From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 11/31] x86/mm: split out writable pagetable emulation code Date: Thu, 17 Aug 2017 15:44:36 +0100 Message-ID: <20170817144456.18989-12-wei.liu2@citrix.com> References: <20170817144456.18989-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1diM4J-0001re-NH for xen-devel@lists.xenproject.org; Thu, 17 Aug 2017 14:46:43 +0000 In-Reply-To: <20170817144456.18989-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgY29kZSB0byBwdi9lbXVsLXB0d3Itb3AuYy4gRml4IGNvZGluZyBzdHlsZSBpc3N1 ZXMgd2hpbGUKbW92aW5nIHRoZSBjb2RlLgoKUmVuYW1lIHB0d3JfZW11bGF0ZWRfcmVhZCB0byBw dl9lbXVsX3B0d3JfcmVhZCBhbmQgZXhwb3J0IGl0IHZpYQpwdi9tbS5oIGJlY2F1c2UgaXQgaXMg bmVlZGVkIGJ5IG90aGVyIGVtdWxhdGlvbiBjb2RlLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8 d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvbW0uYyAgICAgICAgICAgICAg fCAzMDggKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4 Ni9wdi9NYWtlZmlsZSAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvcHYvZW11bC1wdHdyLW9w LmMgfCAzMjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9h cmNoL3g4Ni9wdi9lbXVsYXRlLmggICAgICB8ICAgMiArCiA0IGZpbGVzIGNoYW5nZWQsIDMzMiBp bnNlcnRpb25zKCspLCAzMDYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2Fy Y2gveDg2L3B2L2VtdWwtcHR3ci1vcC5jCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMg Yi94ZW4vYXJjaC94ODYvbW0uYwppbmRleCA0YWM2OWIzODA0Li4zYzBhYTUyZjM4IDEwMDY0NAot LS0gYS94ZW4vYXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNDc4Niwz MTAgKzQ3ODYsNiBAQCBsb25nIGFyY2hfbWVtb3J5X29wKHVuc2lnbmVkIGxvbmcgY21kLCBYRU5f R1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZykKIH0KIAogCi0vKioqKioqKioqKioqKioqKioq KioqKioqKgotICogV3JpdGFibGUgUGFnZXRhYmxlcwotICovCi0KLXN0cnVjdCBwdHdyX2VtdWxh dGVfY3R4dCB7Ci0gICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgY3R4dDsKLSAgICB1bnNpZ25l ZCBsb25nIGNyMjsKLSAgICBsMV9wZ2VudHJ5X3QgIHB0ZTsKLX07Ci0KLXN0YXRpYyBpbnQgcHR3 cl9lbXVsYXRlZF9yZWFkKAotICAgIGVudW0geDg2X3NlZ21lbnQgc2VnLAotICAgIHVuc2lnbmVk IGxvbmcgb2Zmc2V0LAotICAgIHZvaWQgKnBfZGF0YSwKLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXMs Ci0gICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgdW5zaWduZWQgaW50 IHJjID0gYnl0ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyBhZGRyID0gb2Zmc2V0OwotCi0gICAgaWYg KCAhX19hZGRyX29rKGFkZHIpIHx8Ci0gICAgICAgICAocmMgPSBfX2NvcHlfZnJvbV91c2VyKHBf ZGF0YSwgKHZvaWQgKilhZGRyLCBieXRlcykpICkKLSAgICB7Ci0gICAgICAgIHg4Nl9lbXVsX3Bh Z2VmYXVsdCgwLCBhZGRyICsgYnl0ZXMgLSByYywgY3R4dCk7ICAvKiBSZWFkIGZhdWx0LiAqLwot ICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Ci0gICAgfQotCi0gICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsKLX0KLQotc3RhdGljIGludCBwdHdyX2VtdWxhdGVkX3VwZGF0ZSgKLSAgICB1 bnNpZ25lZCBsb25nIGFkZHIsCi0gICAgcGFkZHJfdCBvbGQsCi0gICAgcGFkZHJfdCB2YWwsCi0g ICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHVuc2lnbmVkIGludCBkb19jbXB4Y2hnLAotICAg IHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4dCAqcHR3cl9jdHh0KQotewotICAgIHVuc2lnbmVkIGxv bmcgbWZuOwotICAgIHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX2FkZHIgPSBhZGRyOwotICAgIHN0 cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbDFfcGdlbnRyeV90IHB0ZSwgb2wxZSwgbmwxZSwg KnBsMWU7Ci0gICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50OwotICAgIHN0cnVjdCBkb21haW4g KmQgPSB2LT5kb21haW47Ci0gICAgaW50IHJldDsKLQotICAgIC8qIE9ubHkgYWxsb3cgbmF0dXJh bGx5LWFsaWduZWQgc3RvcmVzIHdpdGhpbiB0aGUgb3JpZ2luYWwgJWNyMiBwYWdlLiAqLwotICAg IGlmICggdW5saWtlbHkoKChhZGRyIF4gcHR3cl9jdHh0LT5jcjIpICYgUEFHRV9NQVNLKSB8fAot ICAgICAgICAgICAgICAgICAgKGFkZHIgJiAoYnl0ZXMgLSAxKSkpICkKLSAgICB7Ci0gICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiYmFkIGFjY2VzcyAoY3IyPSVseCwgYWRkcj0lbHgs IGJ5dGVzPSV1KVxuIiwKLSAgICAgICAgICAgICAgICAgcHR3cl9jdHh0LT5jcjIsIGFkZHIsIGJ5 dGVzKTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgIH0KLQotICAg IC8qIFR1cm4gYSBzdWItd29yZCBhY2Nlc3MgaW50byBhIGZ1bGwtd29yZCBhY2Nlc3MuICovCi0g ICAgaWYgKCBieXRlcyAhPSBzaXplb2YocGFkZHJfdCkgKQotICAgIHsKLSAgICAgICAgcGFkZHJf dCAgICAgIGZ1bGw7Ci0gICAgICAgIHVuc2lnbmVkIGludCByYywgb2Zmc2V0ID0gYWRkciAmIChz aXplb2YocGFkZHJfdCkgLSAxKTsKLQotICAgICAgICAvKiBBbGlnbiBhZGRyZXNzOyByZWFkIGZ1 bGwgd29yZC4gKi8KLSAgICAgICAgYWRkciAmPSB+KHNpemVvZihwYWRkcl90KSAtIDEpOwotICAg ICAgICBpZiAoIChyYyA9IGNvcHlfZnJvbV91c2VyKCZmdWxsLCAodm9pZCAqKWFkZHIsIHNpemVv ZihwYWRkcl90KSkpICE9IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICB4ODZfZW11bF9wYWdl ZmF1bHQoMCwgLyogUmVhZCBmYXVsdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhZGRyICsgc2l6ZW9mKHBhZGRyX3QpIC0gcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnB0d3JfY3R4dC0+Y3R4dCk7Ci0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENF UFRJT047Ci0gICAgICAgIH0KLSAgICAgICAgLyogTWFzayBvdXQgYml0cyBwcm92aWRlZCBieSBj YWxsZXIuICovCi0gICAgICAgIGZ1bGwgJj0gfigoKChwYWRkcl90KTEgPDwgKGJ5dGVzICogOCkp IC0gMSkgPDwgKG9mZnNldCAqIDgpKTsKLSAgICAgICAgLyogU2hpZnQgdGhlIGNhbGxlciB2YWx1 ZSBhbmQgT1IgaW4gdGhlIG1pc3NpbmcgYml0cy4gKi8KLSAgICAgICAgdmFsICAmPSAoKChwYWRk cl90KTEgPDwgKGJ5dGVzICogOCkpIC0gMSk7Ci0gICAgICAgIHZhbCA8PD0gKG9mZnNldCkgKiA4 OwotICAgICAgICB2YWwgIHw9IGZ1bGw7Ci0gICAgICAgIC8qIEFsc28gZmlsbCBpbiBtaXNzaW5n IHBhcnRzIG9mIHRoZSBjbXB4Y2hnIG9sZCB2YWx1ZS4gKi8KLSAgICAgICAgb2xkICAmPSAoKChw YWRkcl90KTEgPDwgKGJ5dGVzICogOCkpIC0gMSk7Ci0gICAgICAgIG9sZCA8PD0gKG9mZnNldCkg KiA4OwotICAgICAgICBvbGQgIHw9IGZ1bGw7Ci0gICAgfQotCi0gICAgcHRlICA9IHB0d3JfY3R4 dC0+cHRlOwotICAgIG1mbiAgPSBsMWVfZ2V0X3BmbihwdGUpOwotICAgIHBhZ2UgPSBtZm5fdG9f cGFnZShtZm4pOwotCi0gICAgLyogV2UgYXJlIGxvb2tpbmcgb25seSBmb3IgcmVhZC1vbmx5IG1h cHBpbmdzIG9mIHAudC4gcGFnZXMuICovCi0gICAgQVNTRVJUKChsMWVfZ2V0X2ZsYWdzKHB0ZSkg JiAoX1BBR0VfUld8X1BBR0VfUFJFU0VOVCkpID09IF9QQUdFX1BSRVNFTlQpOwotICAgIEFTU0VS VChtZm5fdmFsaWQoX21mbihtZm4pKSk7Ci0gICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVf aW5mbyAmIFBHVF90eXBlX21hc2spID09IFBHVF9sMV9wYWdlX3RhYmxlKTsKLSAgICBBU1NFUlQo KHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX2NvdW50X21hc2spICE9IDApOwotICAgIEFT U0VSVChwYWdlX2dldF9vd25lcihwYWdlKSA9PSBkKTsKLQotICAgIC8qIENoZWNrIHRoZSBuZXcg UFRFLiAqLwotICAgIG5sMWUgPSBsMWVfZnJvbV9pbnRwdGUodmFsKTsKLSAgICBzd2l0Y2ggKCBy ZXQgPSBnZXRfcGFnZV9mcm9tX2wxZShubDFlLCBkLCBkKSApCi0gICAgewotICAgIGRlZmF1bHQ6 Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICYmIChieXRlcyA9PSA0KSAmJiAo dW5hbGlnbmVkX2FkZHIgJiA0KSAmJgotICAgICAgICAgICAgICFkb19jbXB4Y2hnICYmIChsMWVf Z2V0X2ZsYWdzKG5sMWUpICYgX1BBR0VfUFJFU0VOVCkgKQotICAgICAgICB7Ci0gICAgICAgICAg ICAvKgotICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhbiB1cHBlci1oYWxmIHdyaXRlIHRvIGEg UEFFIFBURSB0aGVuIHdlIGFzc3VtZSB0aGF0Ci0gICAgICAgICAgICAgKiB0aGUgZ3Vlc3QgaGFz IHNpbXBseSBnb3QgdGhlIHR3byB3cml0ZXMgdGhlIHdyb25nIHdheSByb3VuZC4gV2UKLSAgICAg ICAgICAgICAqIHphcCB0aGUgUFJFU0VOVCBiaXQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUg Ym90dG9tIGhhbGYgd2lsbAotICAgICAgICAgICAgICogYmUgd3JpdHRlbiBpbW1lZGlhdGVseSBh ZnRlciB3ZSByZXR1cm4gdG8gdGhlIGd1ZXN0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfREVCVUcsICJwdHdyX2VtdWxhdGU6IGZpeGluZyB1cCBpbnZhbGlk IFBBRSBQVEUgJSIKLSAgICAgICAgICAgICAgICAgICAgIFBSSXB0ZSJcbiIsIGwxZV9nZXRfaW50 cHRlKG5sMWUpKTsKLSAgICAgICAgICAgIGwxZV9yZW1vdmVfZmxhZ3MobmwxZSwgX1BBR0VfUFJF U0VOVCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgImNvdWxkIG5vdCBnZXRfcGFnZV9mcm9tX2wxZSgpXG4i KTsKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICAgICAgfQot ICAgICAgICBicmVhazsKLSAgICBjYXNlIDA6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1BB R0VfUlcgLi4uIF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUzoKLSAgICAgICAgQVNTRVJUKCEo cmV0ICYgfihfUEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlMpKSk7Ci0gICAgICAgIGwxZV9mbGlw X2ZsYWdzKG5sMWUsIHJldCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGFkanVzdF9n dWVzdF9sMWUobmwxZSwgZCk7Ci0KLSAgICAvKiBDaGVja2VkIHN1Y2Nlc3NmdWxseTogZG8gdGhl IHVwZGF0ZSAod3JpdGUgb3IgY21weGNoZykuICovCi0gICAgcGwxZSA9IG1hcF9kb21haW5fcGFn ZShfbWZuKG1mbikpOwotICAgIHBsMWUgPSAobDFfcGdlbnRyeV90ICopKCh1bnNpZ25lZCBsb25n KXBsMWUgKyAoYWRkciAmIH5QQUdFX01BU0spKTsKLSAgICBpZiAoIGRvX2NtcHhjaGcgKQotICAg IHsKLSAgICAgICAgYm9vbCBva2F5OwotICAgICAgICBpbnRwdGVfdCB0ID0gb2xkOwotCi0gICAg ICAgIG9sMWUgPSBsMWVfZnJvbV9pbnRwdGUob2xkKTsKLSAgICAgICAgb2theSA9IHBhZ2luZ19j bXB4Y2hnX2d1ZXN0X2VudHJ5KHYsICZsMWVfZ2V0X2ludHB0ZSgqcGwxZSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdCwgbDFlX2dldF9pbnRwdGUobmwxZSks IF9tZm4obWZuKSk7Ci0gICAgICAgIG9rYXkgPSAob2theSAmJiB0ID09IG9sZCk7Ci0KLSAgICAg ICAgaWYgKCAhb2theSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdl KHBsMWUpOwotICAgICAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUobmwxZSwgZCk7Ci0gICAgICAg ICAgICByZXR1cm4gWDg2RU1VTF9SRVRSWTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0g ICAgewotICAgICAgICBvbDFlID0gKnBsMWU7Ci0gICAgICAgIGlmICggIVVQREFURV9FTlRSWShs MSwgcGwxZSwgb2wxZSwgbmwxZSwgbWZuLCB2LCAwKSApCi0gICAgICAgICAgICBCVUcoKTsKLSAg ICB9Ci0KLSAgICB0cmFjZV9wdHdyX2VtdWxhdGlvbihhZGRyLCBubDFlKTsKLQotICAgIHVubWFw X2RvbWFpbl9wYWdlKHBsMWUpOwotCi0gICAgLyogRmluYWxseSwgZHJvcCB0aGUgb2xkIFBURS4g Ki8KLSAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFlLCBkKTsKLQotICAgIHJldHVybiBYODZFTVVM X09LQVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHR3cl9lbXVsYXRlZF93cml0ZSgKLSAgICBlbnVtIHg4 Nl9zZWdtZW50IHNlZywKLSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKLSAgICB2b2lkICpwX2Rh dGEsCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0 ICpjdHh0KQotewotICAgIHBhZGRyX3QgdmFsID0gMDsKLQotICAgIGlmICggKGJ5dGVzID4gc2l6 ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0ZXMgLSAxKSkgfHwgIWJ5dGVzICkKLSAgICB7 Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiYmFkIHdyaXRlIHNpemUgKGFkZHI9 JWx4LCBieXRlcz0ldSlcbiIsCi0gICAgICAgICAgICAgICAgIG9mZnNldCwgYnl0ZXMpOwotICAg ICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgfQotCi0gICAgbWVtY3B5KCZ2 YWwsIHBfZGF0YSwgYnl0ZXMpOwotCi0gICAgcmV0dXJuIHB0d3JfZW11bGF0ZWRfdXBkYXRlKAot ICAgICAgICBvZmZzZXQsIDAsIHZhbCwgYnl0ZXMsIDAsCi0gICAgICAgIGNvbnRhaW5lcl9vZihj dHh0LCBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQsIGN0eHQpKTsKLX0KLQotc3RhdGljIGludCBw dHdyX2VtdWxhdGVkX2NtcHhjaGcoCi0gICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCi0gICAgdW5z aWduZWQgbG9uZyBvZmZzZXQsCi0gICAgdm9pZCAqcF9vbGQsCi0gICAgdm9pZCAqcF9uZXcsCi0g ICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0 KQotewotICAgIHBhZGRyX3Qgb2xkID0gMCwgbmV3ID0gMDsKLQotICAgIGlmICggKGJ5dGVzID4g c2l6ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0ZXMgLSAxKSkgKQotICAgIHsKLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJiYWQgY21weGNoZyBzaXplIChhZGRyPSVseCwg Ynl0ZXM9JXUpXG4iLAotICAgICAgICAgICAgICAgICBvZmZzZXQsIGJ5dGVzKTsKLSAgICAgICAg cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgIH0KLQotICAgIG1lbWNweSgmb2xkLCBw X29sZCwgYnl0ZXMpOwotICAgIG1lbWNweSgmbmV3LCBwX25ldywgYnl0ZXMpOwotCi0gICAgcmV0 dXJuIHB0d3JfZW11bGF0ZWRfdXBkYXRlKAotICAgICAgICBvZmZzZXQsIG9sZCwgbmV3LCBieXRl cywgMSwKLSAgICAgICAgY29udGFpbmVyX29mKGN0eHQsIHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4 dCwgY3R4dCkpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBwdHdy X2VtdWxhdGVfb3BzID0gewotICAgIC5yZWFkICAgICAgID0gcHR3cl9lbXVsYXRlZF9yZWFkLAot ICAgIC5pbnNuX2ZldGNoID0gcHR3cl9lbXVsYXRlZF9yZWFkLAotICAgIC53cml0ZSAgICAgID0g cHR3cl9lbXVsYXRlZF93cml0ZSwKLSAgICAuY21weGNoZyAgICA9IHB0d3JfZW11bGF0ZWRfY21w eGNoZywKLSAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAotICAgIC5jcHVp ZCAgICAgID0gcHZfZW11bF9jcHVpZCwKLX07Ci0KLS8qIFdyaXRlIHBhZ2UgZmF1bHQgaGFuZGxl cjogY2hlY2sgaWYgZ3Vlc3QgaXMgdHJ5aW5nIHRvIG1vZGlmeSBhIFBURS4gKi8KLWludCBwdHdy X2RvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKLSAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgc3Ry dWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwot ICAgIGwxX3BnZW50cnlfdCAgICAgIHB0ZTsKLSAgICBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQg cHR3cl9jdHh0ID0gewotICAgICAgICAuY3R4dCA9IHsKLSAgICAgICAgICAgIC5yZWdzID0gcmVn cywKLSAgICAgICAgICAgIC52ZW5kb3IgPSBkLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yLAotICAg ICAgICAgICAgLmFkZHJfc2l6ZSA9IGlzX3B2XzMyYml0X2RvbWFpbihkKSA/IDMyIDogQklUU19Q RVJfTE9ORywKLSAgICAgICAgICAgIC5zcF9zaXplICAgPSBpc19wdl8zMmJpdF9kb21haW4oZCkg PyAzMiA6IEJJVFNfUEVSX0xPTkcsCi0gICAgICAgICAgICAubG1hICAgICAgID0gIWlzX3B2XzMy Yml0X2RvbWFpbihkKSwKLSAgICAgICAgfSwKLSAgICB9OwotICAgIGludCByYzsKLQotICAgIC8q IEF0dGVtcHQgdG8gcmVhZCB0aGUgUFRFIHRoYXQgbWFwcyB0aGUgVkEgYmVpbmcgYWNjZXNzZWQu ICovCi0gICAgcHZfZ2V0X2d1ZXN0X2VmZl9sMWUoYWRkciwgJnB0ZSk7Ci0KLSAgICAvKiBXZSBh cmUgbG9va2luZyBvbmx5IGZvciByZWFkLW9ubHkgbWFwcGluZ3Mgb2YgcC50LiBwYWdlcy4gKi8K LSAgICBpZiAoICgobDFlX2dldF9mbGFncyhwdGUpICYgKF9QQUdFX1BSRVNFTlR8X1BBR0VfUlcp KSAhPSBfUEFHRV9QUkVTRU5UKSB8fAotICAgICAgICAgcmFuZ2VzZXRfY29udGFpbnNfc2luZ2xl dG9uKG1taW9fcm9fcmFuZ2VzLCBsMWVfZ2V0X3BmbihwdGUpKSB8fAotICAgICAgICAgIWdldF9w YWdlX2Zyb21fbWZuKF9tZm4obDFlX2dldF9wZm4ocHRlKSksIGQpICkKLSAgICAgICAgZ290byBi YWlsOwotCi0gICAgcGFnZSA9IGwxZV9nZXRfcGFnZShwdGUpOwotICAgIGlmICggIXBhZ2VfbG9j ayhwYWdlKSApCi0gICAgewotICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAgZ290byBi YWlsOwotICAgIH0KLQotICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5 cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAgICAgICAgcGFnZV91bmxv Y2socGFnZSk7Ci0gICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICBnb3RvIGJhaWw7Ci0g ICAgfQotCi0gICAgcHR3cl9jdHh0LmNyMiA9IGFkZHI7Ci0gICAgcHR3cl9jdHh0LnB0ZSA9IHB0 ZTsKLQotICAgIHJjID0geDg2X2VtdWxhdGUoJnB0d3JfY3R4dC5jdHh0LCAmcHR3cl9lbXVsYXRl X29wcyk7Ci0KLSAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICBwdXRfcGFnZShwYWdlKTsKLQot ICAgIHN3aXRjaCAoIHJjICkKLSAgICB7Ci0gICAgY2FzZSBYODZFTVVMX0VYQ0VQVElPTjoKLSAg ICAgICAgLyoKLSAgICAgICAgICogVGhpcyBlbXVsYXRpb24gb25seSBjb3ZlcnMgd3JpdGVzIHRv IHBhZ2V0YWJsZXMgd2hpY2ggYXJlIG1hcmtlZAotICAgICAgICAgKiByZWFkLW9ubHkgYnkgWGVu LiAgV2UgdG9sZXJhdGUgI1BGIChpbiBjYXNlIGEgY29uY3VycmVudCBwYWdldGFibGUKLSAgICAg ICAgICogdXBkYXRlIGhhcyBzdWNjZWVkZWQgb24gYSBkaWZmZXJlbnQgdmNwdSkuICBBbnl0aGlu ZyBlbHNlIGlzIGFuCi0gICAgICAgICAqIGVtdWxhdGlvbiBidWcsIG9yIGEgZ3Vlc3QgcGxheWlu ZyB3aXRoIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gdW5kZXIKLSAgICAgICAgICogWGVuJ3MgZmVl dC4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggcHR3cl9jdHh0LmN0eHQuZXZlbnQudHlwZSA9 PSBYODZfRVZFTlRUWVBFX0hXX0VYQ0VQVElPTiAmJgotICAgICAgICAgICAgIHB0d3JfY3R4dC5j dHh0LmV2ZW50LnZlY3RvciA9PSBUUkFQX3BhZ2VfZmF1bHQgKQotICAgICAgICAgICAgcHZfaW5q ZWN0X2V2ZW50KCZwdHdyX2N0eHQuY3R4dC5ldmVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgIlVuZXhw ZWN0ZWQgZXZlbnQgKHR5cGUgJXUsIHZlY3RvciAlI3gpIGZyb20gZW11bGF0aW9uXG4iLAotICAg ICAgICAgICAgICAgICAgICAgcHR3cl9jdHh0LmN0eHQuZXZlbnQudHlwZSwgcHR3cl9jdHh0LmN0 eHQuZXZlbnQudmVjdG9yKTsKLQotICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLwotICAgIGNhc2Ug WDg2RU1VTF9PS0FZOgotCi0gICAgICAgIGlmICggcHR3cl9jdHh0LmN0eHQucmV0aXJlLnNpbmds ZXN0ZXAgKQotICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2RlYnVnLCBY ODZfRVZFTlRfTk9fRUMpOwotCi0gICAgICAgIC8qIEZhbGx0aHJvdWdoICovCi0gICAgY2FzZSBY ODZFTVVMX1JFVFJZOgotICAgICAgICBwZXJmY19pbmNyKHB0d3JfZW11bGF0aW9ucyk7Ci0gICAg ICAgIHJldHVybiBFWENSRVRfZmF1bHRfZml4ZWQ7Ci0gICAgfQotCi0gYmFpbDoKLSAgICByZXR1 cm4gMDsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGZhdWx0IGhhbmRsaW5n IGZvciByZWFkLW9ubHkgTU1JTyBwYWdlcwogICovCkBAIC01MTE3LDcgKzQ4MTMsNyBAQCBpbnQg bW1pb19yb19lbXVsYXRlZF93cml0ZSgKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0 ZV9vcHMgbW1pb19yb19lbXVsYXRlX29wcyA9IHsKICAgICAucmVhZCAgICAgICA9IHg4NmVtdWxf dW5oYW5kbGVhYmxlX3J3LAotICAgIC5pbnNuX2ZldGNoID0gcHR3cl9lbXVsYXRlZF9yZWFkLAor ICAgIC5pbnNuX2ZldGNoID0gcHZfZW11bF9wdHdyX3JlYWQsCiAgICAgLndyaXRlICAgICAgPSBt bWlvX3JvX2VtdWxhdGVkX3dyaXRlLAogICAgIC52YWxpZGF0ZSAgID0gcHZfZW11bF9pc19tZW1f d3JpdGUsCiAgICAgLmNwdWlkICAgICAgPSBwdl9lbXVsX2NwdWlkLApAQCAtNTE1Niw3ICs0ODUy LDcgQEAgaW50IG1tY2ZnX2ludGVyY2VwdF93cml0ZSgKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB4 ODZfZW11bGF0ZV9vcHMgbW1jZmdfaW50ZXJjZXB0X29wcyA9IHsKICAgICAucmVhZCAgICAgICA9 IHg4NmVtdWxfdW5oYW5kbGVhYmxlX3J3LAotICAgIC5pbnNuX2ZldGNoID0gcHR3cl9lbXVsYXRl ZF9yZWFkLAorICAgIC5pbnNuX2ZldGNoID0gcHZfZW11bF9wdHdyX3JlYWQsCiAgICAgLndyaXRl ICAgICAgPSBtbWNmZ19pbnRlcmNlcHRfd3JpdGUsCiAgICAgLnZhbGlkYXRlICAgPSBwdl9lbXVs X2lzX21lbV93cml0ZSwKICAgICAuY3B1aWQgICAgICA9IHB2X2VtdWxfY3B1aWQsCmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUK aW5kZXggYzgzYWVkNDkzYi4uY2JkODkwYzVmMiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2 L01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAg b2JqLXkgKz0gZW11bGF0ZS5vCiBvYmoteSArPSBlbXVsLWdhdGUtb3Aubwogb2JqLXkgKz0gZW11 bC1pbnYtb3Aubwogb2JqLXkgKz0gZW11bC1wcml2LW9wLm8KK29iai15ICs9IGVtdWwtcHR3ci1v cC5vCiBvYmoteSArPSBoeXBlcmNhbGwubwogb2JqLXkgKz0gaXJldC5vCiBvYmoteSArPSBtaXNj LWh5cGVyY2FsbHMubwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L2VtdWwtcHR3ci1vcC5j IGIveGVuL2FyY2gveDg2L3B2L2VtdWwtcHR3ci1vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLjE3ZDdlZThmNDEKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC94 ODYvcHYvZW11bC1wdHdyLW9wLmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAqIGFyY2gveDg2L3B2L2VtdWwtcHR3ci1vcC5jCisgKgorICogRW11bGF0ZSB3cml0 YWJsZSBwYWdldGFibGUgZm9yIFBWIGd1ZXN0cworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0y MDA1IEsgQSBGcmFzZXIKKyAqIENvcHlyaWdodCAoYykgMjAwNCBDaHJpc3RpYW4gTGltcGFjaAor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8eGVuL2d1 ZXN0X2FjY2Vzcy5oPgorI2luY2x1ZGUgPHhlbi90cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL3B2 L21tLmg+CisKKyNpbmNsdWRlICJlbXVsYXRlLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioq KioqCisgKiBXcml0YWJsZSBQYWdldGFibGVzCisgKi8KKworc3RydWN0IHB0d3JfZW11bGF0ZV9j dHh0IHsKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCBjdHh0OworICAgIHVuc2lnbmVkIGxv bmcgY3IyOworICAgIGwxX3BnZW50cnlfdCAgcHRlOworfTsKKworaW50IHB2X2VtdWxfcHR3cl9y ZWFkKGVudW0geDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdm9pZCAqcF9k YXRhLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcywgc3RydWN0IHg4 Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgdW5zaWduZWQgaW50IHJjID0gYnl0ZXM7Cisg ICAgdW5zaWduZWQgbG9uZyBhZGRyID0gb2Zmc2V0OworCisgICAgaWYgKCAhX19hZGRyX29rKGFk ZHIpIHx8CisgICAgICAgICAocmMgPSBfX2NvcHlfZnJvbV91c2VyKHBfZGF0YSwgKHZvaWQgKilh ZGRyLCBieXRlcykpICkKKyAgICB7CisgICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCBhZGRy ICsgYnl0ZXMgLSByYywgY3R4dCk7ICAvKiBSZWFkIGZhdWx0LiAqLworICAgICAgICByZXR1cm4g WDg2RU1VTF9FWENFUFRJT047CisgICAgfQorCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30K Kworc3RhdGljIGludCBwdHdyX2VtdWxhdGVkX3VwZGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHBh ZGRyX3Qgb2xkLCBwYWRkcl90IHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGJ5dGVzLCB1bnNpZ25lZCBpbnQgZG9fY21weGNoZywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0ICpwdHdyX2N0eHQp Cit7CisgICAgdW5zaWduZWQgbG9uZyBtZm47CisgICAgdW5zaWduZWQgbG9uZyB1bmFsaWduZWRf YWRkciA9IGFkZHI7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICBsMV9wZ2VudHJ5 X3QgcHRlLCBvbDFlLCBubDFlLCAqcGwxZTsKKyAgICBzdHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7 CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKKyAgICBpbnQgcmV0OworCisgICAg LyogT25seSBhbGxvdyBuYXR1cmFsbHktYWxpZ25lZCBzdG9yZXMgd2l0aGluIHRoZSBvcmlnaW5h bCAlY3IyIHBhZ2UuICovCisgICAgaWYgKCB1bmxpa2VseSgoKGFkZHIgXiBwdHdyX2N0eHQtPmNy MikgJiBQQUdFX01BU0spIHx8CisgICAgICAgICAgICAgICAgICAoYWRkciAmIChieXRlcyAtIDEp KSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJiYWQgYWNjZXNz IChjcjI9JWx4LCBhZGRyPSVseCwgYnl0ZXM9JXUpXG4iLAorICAgICAgICAgICAgICAgICBwdHdy X2N0eHQtPmNyMiwgYWRkciwgYnl0ZXMpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRM RUFCTEU7CisgICAgfQorCisgICAgLyogVHVybiBhIHN1Yi13b3JkIGFjY2VzcyBpbnRvIGEgZnVs bC13b3JkIGFjY2Vzcy4gKi8KKyAgICBpZiAoIGJ5dGVzICE9IHNpemVvZihwYWRkcl90KSApCisg ICAgeworICAgICAgICBwYWRkcl90ICAgICAgZnVsbDsKKyAgICAgICAgdW5zaWduZWQgaW50IHJj LCBvZmZzZXQgPSBhZGRyICYgKHNpemVvZihwYWRkcl90KSAtIDEpOworCisgICAgICAgIC8qIEFs aWduIGFkZHJlc3M7IHJlYWQgZnVsbCB3b3JkLiAqLworICAgICAgICBhZGRyICY9IH4oc2l6ZW9m KHBhZGRyX3QpIC0gMSk7CisgICAgICAgIGlmICggKHJjID0gY29weV9mcm9tX3VzZXIoJmZ1bGws ICh2b2lkICopYWRkciwgc2l6ZW9mKHBhZGRyX3QpKSkgIT0gMCApCisgICAgICAgIHsKKyAgICAg ICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCAvKiBSZWFkIGZhdWx0LiAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKyBzaXplb2YocGFkZHJfdCkgLSByYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmcHR3cl9jdHh0LT5jdHh0KTsKKyAgICAgICAgICAg IHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICAgICAgfQorICAgICAgICAvKiBNYXNrIG91 dCBiaXRzIHByb3ZpZGVkIGJ5IGNhbGxlci4gKi8KKyAgICAgICAgZnVsbCAmPSB+KCgoKHBhZGRy X3QpMSA8PCAoYnl0ZXMgKiA4KSkgLSAxKSA8PCAob2Zmc2V0ICogOCkpOworICAgICAgICAvKiBT aGlmdCB0aGUgY2FsbGVyIHZhbHVlIGFuZCBPUiBpbiB0aGUgbWlzc2luZyBiaXRzLiAqLworICAg ICAgICB2YWwgICY9ICgoKHBhZGRyX3QpMSA8PCAoYnl0ZXMgKiA4KSkgLSAxKTsKKyAgICAgICAg dmFsIDw8PSAob2Zmc2V0KSAqIDg7CisgICAgICAgIHZhbCAgfD0gZnVsbDsKKyAgICAgICAgLyog QWxzbyBmaWxsIGluIG1pc3NpbmcgcGFydHMgb2YgdGhlIGNtcHhjaGcgb2xkIHZhbHVlLiAqLwor ICAgICAgICBvbGQgICY9ICgoKHBhZGRyX3QpMSA8PCAoYnl0ZXMgKiA4KSkgLSAxKTsKKyAgICAg ICAgb2xkIDw8PSAob2Zmc2V0KSAqIDg7CisgICAgICAgIG9sZCAgfD0gZnVsbDsKKyAgICB9CisK KyAgICBwdGUgID0gcHR3cl9jdHh0LT5wdGU7CisgICAgbWZuICA9IGwxZV9nZXRfcGZuKHB0ZSk7 CisgICAgcGFnZSA9IG1mbl90b19wYWdlKG1mbik7CisKKyAgICAvKiBXZSBhcmUgbG9va2luZyBv bmx5IGZvciByZWFkLW9ubHkgbWFwcGluZ3Mgb2YgcC50LiBwYWdlcy4gKi8KKyAgICBBU1NFUlQo KGwxZV9nZXRfZmxhZ3MocHRlKSAmIChfUEFHRV9SV3xfUEFHRV9QUkVTRU5UKSkgPT0gX1BBR0Vf UFJFU0VOVCk7CisgICAgQVNTRVJUKG1mbl92YWxpZChfbWZuKG1mbikpKTsKKyAgICBBU1NFUlQo KHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgPT0gUEdUX2wxX3BhZ2Vf dGFibGUpOworICAgIEFTU0VSVCgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfY291bnRf bWFzaykgIT0gMCk7CisgICAgQVNTRVJUKHBhZ2VfZ2V0X293bmVyKHBhZ2UpID09IGQpOworCisg ICAgLyogQ2hlY2sgdGhlIG5ldyBQVEUuICovCisgICAgbmwxZSA9IGwxZV9mcm9tX2ludHB0ZSh2 YWwpOworICAgIHN3aXRjaCAoIHJldCA9IGdldF9wYWdlX2Zyb21fbDFlKG5sMWUsIGQsIGQpICkK KyAgICB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkg JiYgKGJ5dGVzID09IDQpICYmICh1bmFsaWduZWRfYWRkciAmIDQpICYmCisgICAgICAgICAgICAg IWRvX2NtcHhjaGcgJiYgKGwxZV9nZXRfZmxhZ3MobmwxZSkgJiBfUEFHRV9QUkVTRU5UKSApCisg ICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiB0aGlzIGlzIGFuIHVw cGVyLWhhbGYgd3JpdGUgdG8gYSBQQUUgUFRFIHRoZW4gd2UgYXNzdW1lIHRoYXQKKyAgICAgICAg ICAgICAqIHRoZSBndWVzdCBoYXMgc2ltcGx5IGdvdCB0aGUgdHdvIHdyaXRlcyB0aGUgd3Jvbmcg d2F5IHJvdW5kLiBXZQorICAgICAgICAgICAgICogemFwIHRoZSBQUkVTRU5UIGJpdCBvbiB0aGUg YXNzdW1wdGlvbiB0aGF0IHRoZSBib3R0b20gaGFsZiB3aWxsCisgICAgICAgICAgICAgKiBiZSB3 cml0dGVuIGltbWVkaWF0ZWx5IGFmdGVyIHdlIHJldHVybiB0byB0aGUgZ3Vlc3QuCisgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19ERUJVRywgInB0d3JfZW11bGF0 ZTogZml4aW5nIHVwIGludmFsaWQgUEFFIFBURSAlIgorICAgICAgICAgICAgICAgICAgICAgUFJJ cHRlIlxuIiwgbDFlX2dldF9pbnRwdGUobmwxZSkpOworICAgICAgICAgICAgbDFlX3JlbW92ZV9m bGFncyhubDFlLCBfUEFHRV9QUkVTRU5UKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiY291bGQgbm90IGdl dF9wYWdlX2Zyb21fbDFlKClcbiIpOworICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5E TEVBQkxFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMDoKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBfUEFHRV9SVyAuLi4gX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJT OgorICAgICAgICBBU1NFUlQoIShyZXQgJiB+KF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUykp KTsKKyAgICAgICAgbDFlX2ZsaXBfZmxhZ3MobmwxZSwgcmV0KTsKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorCisgICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBkKTsKKworICAgIC8qIENoZWNrZWQg c3VjY2Vzc2Z1bGx5OiBkbyB0aGUgdXBkYXRlICh3cml0ZSBvciBjbXB4Y2hnKS4gKi8KKyAgICBw bDFlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7CisgICAgcGwxZSA9IChsMV9wZ2VudHJ5 X3QgKikoKHVuc2lnbmVkIGxvbmcpcGwxZSArIChhZGRyICYgflBBR0VfTUFTSykpOworICAgIGlm ICggZG9fY21weGNoZyApCisgICAgeworICAgICAgICBib29sIG9rYXk7CisgICAgICAgIGludHB0 ZV90IHQgPSBvbGQ7CisKKyAgICAgICAgb2wxZSA9IGwxZV9mcm9tX2ludHB0ZShvbGQpOworICAg ICAgICBva2F5ID0gcGFnaW5nX2NtcHhjaGdfZ3Vlc3RfZW50cnkodiwgJmwxZV9nZXRfaW50cHRl KCpwbDFlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0LCBs MWVfZ2V0X2ludHB0ZShubDFlKSwgX21mbihtZm4pKTsKKyAgICAgICAgb2theSA9IChva2F5ICYm IHQgPT0gb2xkKTsKKworICAgICAgICBpZiAoICFva2F5ICkKKyAgICAgICAgeworICAgICAgICAg ICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7CisgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wx ZShubDFlLCBkKTsKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1JFVFJZOworICAgICAgICB9 CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG9sMWUgPSAqcGwxZTsKKyAgICAgICAg aWYgKCAhVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBtZm4sIHYsIDApICkKKyAg ICAgICAgICAgIEJVRygpOworICAgIH0KKworICAgIHRyYWNlX3B0d3JfZW11bGF0aW9uKGFkZHIs IG5sMWUpOworCisgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7CisKKyAgICAvKiBGaW5hbGx5 LCBkcm9wIHRoZSBvbGQgUFRFLiAqLworICAgIHB1dF9wYWdlX2Zyb21fbDFlKG9sMWUsIGQpOwor CisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGludCBwdHdyX2VtdWxhdGVk X3dyaXRlKGVudW0geDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRl cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4 dCAqY3R4dCkKK3sKKyAgICBwYWRkcl90IHZhbCA9IDA7CisKKyAgICBpZiAoIChieXRlcyA+IHNp emVvZihwYWRkcl90KSkgfHwgKGJ5dGVzICYgKGJ5dGVzIC0gMSkpIHx8ICFieXRlcyApCisgICAg eworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgImJhZCB3cml0ZSBzaXplIChhZGRy PSVseCwgYnl0ZXM9JXUpXG4iLAorICAgICAgICAgICAgICAgICBvZmZzZXQsIGJ5dGVzKTsKKyAg ICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgIH0KKworICAgIG1lbWNweSgm dmFsLCBwX2RhdGEsIGJ5dGVzKTsKKworICAgIHJldHVybiBwdHdyX2VtdWxhdGVkX3VwZGF0ZSgK KyAgICAgICAgb2Zmc2V0LCAwLCB2YWwsIGJ5dGVzLCAwLAorICAgICAgICBjb250YWluZXJfb2Yo Y3R4dCwgc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0LCBjdHh0KSk7Cit9CisKK3N0YXRpYyBpbnQg cHR3cl9lbXVsYXRlZF9jbXB4Y2hnKGVudW0geDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25lZCBsb25n IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfb2xkLCB2 b2lkICpwX25ldywgdW5zaWduZWQgaW50IGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcGFkZHJfdCBv bGQgPSAwLCBuZXcgPSAwOworCisgICAgaWYgKCAoYnl0ZXMgPiBzaXplb2YocGFkZHJfdCkpIHx8 IChieXRlcyAmIChieXRlcyAtIDEpKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0df V0FSTklORywgImJhZCBjbXB4Y2hnIHNpemUgKGFkZHI9JWx4LCBieXRlcz0ldSlcbiIsCisgICAg ICAgICAgICAgICAgIG9mZnNldCwgYnl0ZXMpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhB TkRMRUFCTEU7CisgICAgfQorCisgICAgbWVtY3B5KCZvbGQsIHBfb2xkLCBieXRlcyk7CisgICAg bWVtY3B5KCZuZXcsIHBfbmV3LCBieXRlcyk7CisKKyAgICByZXR1cm4gcHR3cl9lbXVsYXRlZF91 cGRhdGUoCisgICAgICAgIG9mZnNldCwgb2xkLCBuZXcsIGJ5dGVzLCAxLAorICAgICAgICBjb250 YWluZXJfb2YoY3R4dCwgc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0LCBjdHh0KSk7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHB0d3JfZW11bGF0ZV9vcHMgPSB7Cisg ICAgLnJlYWQgICAgICAgPSBwdl9lbXVsX3B0d3JfcmVhZCwKKyAgICAuaW5zbl9mZXRjaCA9IHB2 X2VtdWxfcHR3cl9yZWFkLAorICAgIC53cml0ZSAgICAgID0gcHR3cl9lbXVsYXRlZF93cml0ZSwK KyAgICAuY21weGNoZyAgICA9IHB0d3JfZW11bGF0ZWRfY21weGNoZywKKyAgICAudmFsaWRhdGUg ICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAorICAgIC5jcHVpZCAgICAgID0gcHZfZW11bF9jcHVp ZCwKK307CisKKy8qIFdyaXRlIHBhZ2UgZmF1bHQgaGFuZGxlcjogY2hlY2sgaWYgZ3Vlc3QgaXMg dHJ5aW5nIHRvIG1vZGlmeSBhIFBURS4gKi8KK2ludCBwdHdyX2RvX3BhZ2VfZmF1bHQoc3RydWN0 IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRv bWFpbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAgIGwxX3BnZW50cnlfdCAgICAg IHB0ZTsKKyAgICBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQgcHR3cl9jdHh0ID0geworICAgICAg ICAuY3R4dCA9IHsKKyAgICAgICAgICAgIC5yZWdzID0gcmVncywKKyAgICAgICAgICAgIC52ZW5k b3IgPSBkLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yLAorICAgICAgICAgICAgLmFkZHJfc2l6ZSA9 IGlzX3B2XzMyYml0X2RvbWFpbihkKSA/IDMyIDogQklUU19QRVJfTE9ORywKKyAgICAgICAgICAg IC5zcF9zaXplICAgPSBpc19wdl8zMmJpdF9kb21haW4oZCkgPyAzMiA6IEJJVFNfUEVSX0xPTkcs CisgICAgICAgICAgICAubG1hICAgICAgID0gIWlzX3B2XzMyYml0X2RvbWFpbihkKSwKKyAgICAg ICAgfSwKKyAgICB9OworICAgIGludCByYzsKKworICAgIC8qIEF0dGVtcHQgdG8gcmVhZCB0aGUg UFRFIHRoYXQgbWFwcyB0aGUgVkEgYmVpbmcgYWNjZXNzZWQuICovCisgICAgcHZfZ2V0X2d1ZXN0 X2VmZl9sMWUoYWRkciwgJnB0ZSk7CisKKyAgICAvKiBXZSBhcmUgbG9va2luZyBvbmx5IGZvciBy ZWFkLW9ubHkgbWFwcGluZ3Mgb2YgcC50LiBwYWdlcy4gKi8KKyAgICBpZiAoICgobDFlX2dldF9m bGFncyhwdGUpICYgKF9QQUdFX1BSRVNFTlR8X1BBR0VfUlcpKSAhPSBfUEFHRV9QUkVTRU5UKSB8 fAorICAgICAgICAgcmFuZ2VzZXRfY29udGFpbnNfc2luZ2xldG9uKG1taW9fcm9fcmFuZ2VzLCBs MWVfZ2V0X3BmbihwdGUpKSB8fAorICAgICAgICAgIWdldF9wYWdlX2Zyb21fbWZuKF9tZm4obDFl X2dldF9wZm4ocHRlKSksIGQpICkKKyAgICAgICAgZ290byBiYWlsOworCisgICAgcGFnZSA9IGwx ZV9nZXRfcGFnZShwdGUpOworICAgIGlmICggIXBhZ2VfbG9jayhwYWdlKSApCisgICAgeworICAg ICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGlm ICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3Bh Z2VfdGFibGUgKQorICAgIHsKKyAgICAgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAgICAgIHB1 dF9wYWdlKHBhZ2UpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgcHR3cl9jdHh0 LmNyMiA9IGFkZHI7CisgICAgcHR3cl9jdHh0LnB0ZSA9IHB0ZTsKKworICAgIHJjID0geDg2X2Vt dWxhdGUoJnB0d3JfY3R4dC5jdHh0LCAmcHR3cl9lbXVsYXRlX29wcyk7CisKKyAgICBwYWdlX3Vu bG9jayhwYWdlKTsKKyAgICBwdXRfcGFnZShwYWdlKTsKKworICAgIHN3aXRjaCAoIHJjICkKKyAg ICB7CisgICAgY2FzZSBYODZFTVVMX0VYQ0VQVElPTjoKKyAgICAgICAgLyoKKyAgICAgICAgICog VGhpcyBlbXVsYXRpb24gb25seSBjb3ZlcnMgd3JpdGVzIHRvIHBhZ2V0YWJsZXMgd2hpY2ggYXJl IG1hcmtlZAorICAgICAgICAgKiByZWFkLW9ubHkgYnkgWGVuLiAgV2UgdG9sZXJhdGUgI1BGIChp biBjYXNlIGEgY29uY3VycmVudCBwYWdldGFibGUKKyAgICAgICAgICogdXBkYXRlIGhhcyBzdWNj ZWVkZWQgb24gYSBkaWZmZXJlbnQgdmNwdSkuICBBbnl0aGluZyBlbHNlIGlzIGFuCisgICAgICAg ICAqIGVtdWxhdGlvbiBidWcsIG9yIGEgZ3Vlc3QgcGxheWluZyB3aXRoIHRoZSBpbnN0cnVjdGlv biBzdHJlYW0gdW5kZXIKKyAgICAgICAgICogWGVuJ3MgZmVldC4KKyAgICAgICAgICovCisgICAg ICAgIGlmICggcHR3cl9jdHh0LmN0eHQuZXZlbnQudHlwZSA9PSBYODZfRVZFTlRUWVBFX0hXX0VY Q0VQVElPTiAmJgorICAgICAgICAgICAgIHB0d3JfY3R4dC5jdHh0LmV2ZW50LnZlY3RvciA9PSBU UkFQX3BhZ2VfZmF1bHQgKQorICAgICAgICAgICAgcHZfaW5qZWN0X2V2ZW50KCZwdHdyX2N0eHQu Y3R4dC5ldmVudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXZlbnQgKHR5cGUgJXUs IHZlY3RvciAlI3gpIGZyb20gZW11bGF0aW9uXG4iLAorICAgICAgICAgICAgICAgICAgICAgcHR3 cl9jdHh0LmN0eHQuZXZlbnQudHlwZSwgcHR3cl9jdHh0LmN0eHQuZXZlbnQudmVjdG9yKTsKKwor ICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLworICAgIGNhc2UgWDg2RU1VTF9PS0FZOgorCisgICAg ICAgIGlmICggcHR3cl9jdHh0LmN0eHQucmV0aXJlLnNpbmdsZXN0ZXAgKQorICAgICAgICAgICAg cHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2RlYnVnLCBYODZfRVZFTlRfTk9fRUMpOworCisg ICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgY2FzZSBYODZFTVVMX1JFVFJZOgorICAgICAg ICBwZXJmY19pbmNyKHB0d3JfZW11bGF0aW9ucyk7CisgICAgICAgIHJldHVybiBFWENSRVRfZmF1 bHRfZml4ZWQ7CisgICAgfQorCisgYmFpbDoKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIExv Y2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMt YmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5p bAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bGF0ZS5oIGIv eGVuL2FyY2gveDg2L3B2L2VtdWxhdGUuaAppbmRleCA4OWFiYmUwMTBmLi43ZmI1NjhhZGMwIDEw MDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvZW11bGF0ZS5oCisrKyBiL3hlbi9hcmNoL3g4Ni9w di9lbXVsYXRlLmgKQEAgLTEwLDQgKzEwLDYgQEAgdm9pZCBwdl9lbXVsX2luc3RydWN0aW9uX2Rv bmUoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcmlwKTsKIGludCBw dl9lbXVsX2lzX21lbV93cml0ZShjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfc3RhdGUgKnN0YXRl LAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0 KTsKIAoraW50IHB2X2VtdWxfcHR3cl9yZWFkKGVudW0geDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25l ZCBsb25nIG9mZnNldCwgdm9pZCAqcF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBieXRlcywgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpOwogI2VuZGlmIC8q IF9fUFZfRU1VTEFURV9IX18gKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=