From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v3.1 15/15] xen/x86: setup PVHv2 Dom0 ACPI tables Date: Sat, 29 Oct 2016 11:00:01 +0200 Message-ID: <1477731601-10926-16-git-send-email-roger.pau@citrix.com> References: <1477731601-10926-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c0PVW-0002Hr-ON for xen-devel@lists.xenproject.org; Sat, 29 Oct 2016 09:00:54 +0000 In-Reply-To: <1477731601-10926-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: Andrew Cooper , Jan Beulich , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org Q3JlYXRlIGEgbmV3IE1BRFQgdGFibGUgdGhhdCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZXhwb3Nl ZCB0byB0aGUgZ3Vlc3QuIEEKbmV3IFhTRFQgdGFibGUgaXMgYWxzbyBjcmVhdGVkLCBpbiBvcmRl ciB0byBmaWx0ZXIgdGhlIHRhYmxlcyB0aGF0IHdlIHdhbnQKdG8gZXhwb3NlIHRvIHRoZSBndWVz dCwgcGx1cyB0aGUgWGVuIGNyYWZ0ZWQgTUFEVC4gVGhpcyBpbiB0dXJuIHJlcXVpcmVzIFhlbgp0 byBhbHNvIGNyZWF0ZSBhIG5ldyBSU0RQIGluIG9yZGVyIHRvIG1ha2UgaXQgcG9pbnQgdG8gdGhl IGN1c3RvbSBYU0RULgoKQWxzbywgcmVnaW9ucyBtYXJrZWQgYXMgRTgyMF9BQ1BJIG9yIEU4MjBf TlZTIGFyZSBpZGVudGl0eSBtYXBwZWQgaW50byBEb20wCnAybSwgcGx1cyBhbnkgdG9wLWxldmVs IEFDUEkgdGFibGVzIHRoYXQgc2hvdWxkIGJlIGFjY2Vzc2libGUgdG8gRG9tMCBhbmQKdGhhdCBk b24ndCByZXNpZGUgaW4gUkFNIHJlZ2lvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZSBt ZW1vcnkgbWFwcwpkb24ndCBwcm9wZXJseSBhY2NvdW50IGZvciBhbGwgdGhlIG1lbW9yeSB1c2Vk IGJ5IEFDUEksIHNvIGl0J3MgY29tbW9uIHRvCmZpbmQgQUNQSSB0YWJsZXMgaW4gaG9sZXMuCgpT aWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4KLS0t CkNjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+CkNjOiBBbmRyZXcgQ29vcGVyIDxh bmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgotLS0KQ2hhbmdlcyBzaW5jZSB2MjoKIC0gQ29tcGxl dGVseSByZXdvcmtlZC4KLS0tCiB4ZW4vYXJjaC94ODYvZG9tYWluX2J1aWxkLmMgfCA0MjggKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2Vk LCA0MjcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9kb21haW5fYnVpbGQuYyBiL3hlbi9hcmNoL3g4Ni9kb21haW5fYnVpbGQuYwppbmRleCAx ZWJjMjFmLi5kN2I1NGQ5IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvZG9tYWluX2J1aWxkLmMK KysrIGIveGVuL2FyY2gveDg2L2RvbWFpbl9idWlsZC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5j bHVkZSA8eGVuL2xpYmVsZi5oPgogI2luY2x1ZGUgPHhlbi9wZm4uaD4KICNpbmNsdWRlIDx4ZW4v Z3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVkZSA8eGVuL2FjcGkuaD4KICNpbmNsdWRlIDxhc20vcmVn cy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTM4 LDYgKzM5LDggQEAKICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9ocGV0 Lmg+CiAKKyNpbmNsdWRlIDxhY3BpL2FjdGFibGVzLmg+CisKICNpbmNsdWRlIDxwdWJsaWMvdmVy c2lvbi5oPgogI2luY2x1ZGUgPHB1YmxpYy9hcmNoLXg4Ni9odm0vc3RhcnRfaW5mby5oPgogI2lu Y2x1ZGUgPHB1YmxpYy9odm0vaHZtX3ZjcHUuaD4KQEAgLTQ5LDYgKzUyLDkgQEAgc3RhdGljIGxv bmcgX19pbml0ZGF0YSBkb20wX21heF9ucnBhZ2VzID0gTE9OR19NQVg7CiAvKiBTaXplIG9mIHRo ZSBWTTg2IFRTUyBmb3IgdmlydHVhbCA4MDg2IG1vZGUgdG8gdXNlLiAqLwogI2RlZmluZSBIVk1f Vk04Nl9UU1NfU0laRSAgIDEyOAogCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgYWNw aV9pbnRyX292ZXJycmlkZXM7CitzdGF0aWMgc3RydWN0IGFjcGlfbWFkdF9pbnRlcnJ1cHRfb3Zl cnJpZGUgX19pbml0ZGF0YSAqaW50c3Jjb3ZyOworCiAvKgogICogZG9tMF9tZW09W21pbjo8bWlu X2FtdD4sXVttYXg6PG1heF9hbXQ+LF1bPGFtdD5dCiAgKiAKQEAgLTU3Miw3ICs1NzgsNyBAQCBz dGF0aWMgX19pbml0IHZvaWQgaHZtX3NldHVwX2U4MjAoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWdu ZWQgbG9uZyBucl9wYWdlcykKICAgICAvKgogICAgICAqIENyYWZ0IHRoZSBlODIwIG1lbW9yeSBt YXAgZm9yIERvbTAgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGU4MjAgbWFwLgogICAgICAqLwotICAg IGQtPmFyY2guZTgyMCA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IGU4MjBlbnRyeSwgZTgyMC5ucl9t YXApOworICAgIGQtPmFyY2guZTgyMCA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IGU4MjBlbnRyeSwg RTgyME1BWCk7CiAgICAgaWYgKCAhZC0+YXJjaC5lODIwICkKICAgICAgICAgcGFuaWMoIlVuYWJs ZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIERvbTAgZTgyMCBtYXAiKTsKICAgICBlbnRyeV9ndWVz dCA9IGQtPmFyY2guZTgyMDsKQEAgLTE3NTcsNiArMTc2Myw1NCBAQCBzdGF0aWMgaW50IF9faW5p dCBodm1fc3RlYWxfcmFtKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKICAg ICByZXR1cm4gLUVOT01FTTsKIH0KIAorc3RhdGljIGludCBfX2luaXQgaHZtX2FkZF9tZW1fcmFu Z2Uoc3RydWN0IGRvbWFpbiAqZCwgdWludDY0X3QgcywgdWludDY0X3QgZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGUpCit7CisgICAgdW5zaWduZWQg aW50IGk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGQtPmFyY2gubnJfZTgyMDsgaSsrICkKKyAg ICB7CisgICAgICAgIHVpbnQ2NF90IHJzID0gZC0+YXJjaC5lODIwW2ldLmFkZHI7CisgICAgICAg IHVpbnQ2NF90IHJlID0gcnMgKyBkLT5hcmNoLmU4MjBbaV0uc2l6ZTsKKworICAgICAgICBpZiAo IHJzID09IGUgJiYgZC0+YXJjaC5lODIwW2ldLnR5cGUgPT0gdHlwZSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIGQtPmFyY2guZTgyMFtpXS5hZGRyID0gczsKKyAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCByZSA9PSBzICYmIGQtPmFyY2guZTgyMFtpXS50 eXBlID09IHR5cGUgJiYKKyAgICAgICAgICAgICAoaSArIDEgPT0gZC0+YXJjaC5ucl9lODIwIHx8 IGQtPmFyY2guZTgyMFtpICsgMV0uYWRkciA+PSBlKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IGQtPmFyY2guZTgyMFtpXS5zaXplICs9IGUgLSBzOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg ICAgICAgIH0KKworICAgICAgICBpZiAoIHJzID49IGUgKQorICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgaWYgKCByZSA+IHMgKQorICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAg fQorCisgICAgaWYgKCBkLT5hcmNoLm5yX2U4MjAgPj0gRTgyME1BWCApCisgICAgeworICAgICAg ICBwcmludGsoWEVOTE9HX1dBUk5JTkcgIkU4MjA6IG92ZXJmbG93IHdoaWxlIGFkZGluZyByZWdp b24iCisgICAgICAgICAgICAgICAiWyUiUFJJeDY0IiwgJSJQUkl4NjQiKVxuIiwgcywgZSk7Cisg ICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIG1lbW1vdmUoZC0+YXJjaC5lODIw ICsgaSArIDEsIGQtPmFyY2guZTgyMCArIGksCisgICAgICAgICAgICAoZC0+YXJjaC5ucl9lODIw IC0gaSkgKiBzaXplb2YoKmQtPmFyY2guZTgyMCkpOworCisgICAgZC0+YXJjaC5ucl9lODIwKys7 CisgICAgZC0+YXJjaC5lODIwW2ldLmFkZHIgPSBzOworICAgIGQtPmFyY2guZTgyMFtpXS5zaXpl ID0gZSAtIHM7CisgICAgZC0+YXJjaC5lODIwW2ldLnR5cGUgPSB0eXBlOworCisgICAgcmV0dXJu IDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGh2bV9zZXR1cF92bXhfcmVhbG1vZGVfaGVscGVy cyhzdHJ1Y3QgZG9tYWluICpkKQogewogICAgIHAybV90eXBlX3QgcDJtdDsKQEAgLTIxMTIsNiAr MjE2NiwzNzEgQEAgc3RhdGljIGludCBfX2luaXQgaHZtX3NldHVwX2NwdXMoc3RydWN0IGRvbWFp biAqZCwgcGFkZHJfdCBlbnRyeSwKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2lu aXQgYWNwaV9jb3VudF9pbnRyX292KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxv bmcgZW5kKQoreworCisgICAgYWNwaV9pbnRyX292ZXJycmlkZXMrKzsKKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIGludCBfX2luaXQgYWNwaV9zZXRfaW50cl9vdihzdHJ1Y3QgYWNwaV9zdWJ0 YWJsZV9oZWFkZXIgKmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCit7CisgICAgc3RydWN0IGFjcGlfbWFkdF9pbnRlcnJ1 cHRfb3ZlcnJpZGUgKmludHIgPQorICAgICAgICBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qg YWNwaV9tYWR0X2ludGVycnVwdF9vdmVycmlkZSwgaGVhZGVyKTsKKworICAgIEFDUElfTUVNQ1BZ KGludHNyY292ciwgaW50ciwgc2l6ZW9mKCppbnRyKSk7CisgICAgaW50c3Jjb3ZyKys7CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgaHZtX3NldHVwX2FjcGlfbWFkdChz dHJ1Y3QgZG9tYWluICpkLCBwYWRkcl90ICphZGRyKQoreworICAgIHN0cnVjdCBhY3BpX3RhYmxl X21hZHQgKm1hZHQ7CisgICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZTsKKyAgICBz dHJ1Y3QgYWNwaV9tYWR0X2lvX2FwaWMgKmlvX2FwaWM7CisgICAgc3RydWN0IGFjcGlfbWFkdF9s b2NhbF9hcGljICpsb2NhbF9hcGljOworICAgIHN0cnVjdCB2Y3B1ICpzYXZlZF9jdXJyZW50LCAq diA9IGQtPnZjcHVbMF07CisgICAgYWNwaV9zdGF0dXMgc3RhdHVzOworICAgIHVuc2lnbmVkIGxv bmcgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBDb3Vu dCBudW1iZXIgb2YgaW50ZXJydXB0IG92ZXJyaWRlcyBpbiB0aGUgTUFEVC4gKi8KKyAgICBhY3Bp X3RhYmxlX3BhcnNlX21hZHQoQUNQSV9NQURUX1RZUEVfSU5URVJSVVBUX09WRVJSSURFLCBhY3Bp X2NvdW50X2ludHJfb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9JUlFfU09VUkNF Uyk7CisKKyAgICAvKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGNyYWZ0ZWQgTUFEVC4gKi8K KyAgICBzaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX21hZHQpOworICAgIHNpemUgKz0g c2l6ZW9mKHN0cnVjdCBhY3BpX21hZHRfaW50ZXJydXB0X292ZXJyaWRlKSAqIGFjcGlfaW50cl9v dmVycnJpZGVzOworICAgIHNpemUgKz0gc2l6ZW9mKHN0cnVjdCBhY3BpX21hZHRfaW9fYXBpYyk7 CisgICAgc2l6ZSArPSBzaXplb2Yoc3RydWN0IGFjcGlfbWFkdF9sb2NhbF9hcGljKSAqIGRvbTBf bWF4X3ZjcHVzKCk7CisKKyAgICBtYWR0ID0geHphbGxvY19ieXRlcyhzaXplKTsKKyAgICBpZiAo ICFtYWR0ICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9y eSBmb3IgTUFEVCB0YWJsZVxuIik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKwor ICAgIC8qIENvcHkgdGhlIG5hdGl2ZSBNQURUIHRhYmxlIGhlYWRlci4gKi8KKyAgICBzdGF0dXMg PSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19NQURULCAwLCAmdGFibGUpOworICAgIGlmICggIUFD UElfU1VDQ0VTUyhzdGF0dXMpICkKKyAgICB7CisgICAgICAgIHByaW50aygiRmFpbGVkIHRvIGdl dCBNQURUIEFDUEkgdGFibGUsIGFib3J0aW5nLlxuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFM OworICAgIH0KKyAgICBBQ1BJX01FTUNQWShtYWR0LCB0YWJsZSwgc2l6ZW9mKCp0YWJsZSkpOwor ICAgIG1hZHQtPmFkZHJlc3MgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOworCisgICAgLyogU2V0 dXAgdGhlIElPIEFQSUMgZW50cnkuICovCisgICAgaWYgKCBucl9pb2FwaWNzID4gMSApCisgICAg ICAgIHByaW50aygiV0FSTklORzogZm91bmQgJWQgSU8gQVBJQ3MsIERvbTAgd2lsbCBvbmx5IGhh dmUgYWNjZXNzIHRvIDEgZW11bGF0ZWQgSU8gQVBJQ1xuIiwKKyAgICAgICAgICAgICAgIG5yX2lv YXBpY3MpOworICAgIGlvX2FwaWMgPSAoc3RydWN0IGFjcGlfbWFkdF9pb19hcGljICopKG1hZHQg KyAxKTsKKyAgICBpb19hcGljLT5oZWFkZXIudHlwZSA9IEFDUElfTUFEVF9UWVBFX0lPX0FQSUM7 CisgICAgaW9fYXBpYy0+aGVhZGVyLmxlbmd0aCA9IHNpemVvZigqaW9fYXBpYyk7CisgICAgaW9f YXBpYy0+aWQgPSAxOworICAgIGlvX2FwaWMtPmFkZHJlc3MgPSBWSU9BUElDX0RFRkFVTFRfQkFT RV9BRERSRVNTOworCisgICAgbG9jYWxfYXBpYyA9IChzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX2Fw aWMgKikoaW9fYXBpYyArIDEpOworICAgIGZvciAoIGkgPSAwOyBpIDwgZG9tMF9tYXhfdmNwdXMo KTsgaSsrICkKKyAgICB7CisgICAgICAgIGxvY2FsX2FwaWMtPmhlYWRlci50eXBlID0gQUNQSV9N QURUX1RZUEVfTE9DQUxfQVBJQzsKKyAgICAgICAgbG9jYWxfYXBpYy0+aGVhZGVyLmxlbmd0aCA9 IHNpemVvZigqbG9jYWxfYXBpYyk7CisgICAgICAgIGxvY2FsX2FwaWMtPnByb2Nlc3Nvcl9pZCA9 IGk7CisgICAgICAgIGxvY2FsX2FwaWMtPmlkID0gaSAqIDI7CisgICAgICAgIGxvY2FsX2FwaWMt PmxhcGljX2ZsYWdzID0gQUNQSV9NQURUX0VOQUJMRUQ7CisgICAgICAgIGxvY2FsX2FwaWMrKzsK KyAgICB9CisKKyAgICAvKiBTZXR1cCBpbnRlcnJ1cHQgb3ZlcndyaXRlcy4gKi8KKyAgICBpbnRz cmNvdnIgPSAoc3RydWN0IGFjcGlfbWFkdF9pbnRlcnJ1cHRfb3ZlcnJpZGUgKilsb2NhbF9hcGlj OworICAgIGFjcGlfdGFibGVfcGFyc2VfbWFkdChBQ1BJX01BRFRfVFlQRV9JTlRFUlJVUFRfT1ZF UlJJREUsIGFjcGlfc2V0X2ludHJfb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9J UlFfU09VUkNFUyk7CisgICAgQVNTRVJUKCgodW5zaWduZWQgY2hhciAqKWludHNyY292ciAtICh1 bnNpZ25lZCBjaGFyICopbWFkdCkgPT0gc2l6ZSk7CisgICAgbWFkdC0+aGVhZGVyLmxlbmd0aCA9 IHNpemU7CisgICAgbWFkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGFjcGlfdGJfY2hlY2tzdW0oQUNQ SV9DQVNUX1BUUih1OCwgbWFkdCksIHNpemUpOworCisgICAgLyogUGxhY2UgdGhlIG5ldyBNQURU IGluIGd1ZXN0IG1lbW9yeSBzcGFjZS4gKi8KKyAgICBpZiAoIGh2bV9zdGVhbF9yYW0oZCwgc2l6 ZSwgR0IoNCksIGFkZHIpICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGZpbmQg YWxsb2NhdGUgZ3Vlc3QgUkFNIGZvciBNQURUXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07 CisgICAgfQorCisgICAgLyogTWFyayB0aGlzIHJlZ2lvbiBhcyBFODIwX0FDUEkuICovCisgICAg aWYgKCBodm1fYWRkX21lbV9yYW5nZShkLCAqYWRkciwgKmFkZHIgKyBzaXplLCBFODIwX0FDUEkp ICkKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gYWRkIE1BRFQgcmVnaW9uIHRvIG1lbW9yeSBt YXBcbiIpOworCisgICAgc2F2ZWRfY3VycmVudCA9IGN1cnJlbnQ7CisgICAgc2V0X2N1cnJlbnQo dik7CisgICAgcmMgPSBodm1fY29weV90b19ndWVzdF9waHlzKCphZGRyLCBtYWR0LCBzaXplKTsK KyAgICBzZXRfY3VycmVudChzYXZlZF9jdXJyZW50KTsKKyAgICBpZiAoIHJjICE9IEhWTUNPUFlf b2theSApCisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBjb3B5IE1BRFQgaW50byBn dWVzdCBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICB9CisgICAgeGZy ZWUobWFkdCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgX19pbml0IHJhbmdl X2lzX3JhbSh1bnNpZ25lZCBsb25nIG1mbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKK3sKKyAg ICB1bnNpZ25lZCBsb25nIGk7CisKKyAgICBmb3IgKCBpID0gMCA7IGkgPCBucl9wYWdlczsgaSsr ICkKKyAgICAgICAgaWYgKCBwYWdlX2lzX3JhbV90eXBlKG1mbiArIGksIFJBTV9UWVBFX0NPTlZF TlRJT05BTCkgKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7 Cit9CisKK3N0YXRpYyBib29sIF9faW5pdCBodm1fYWNwaV90YWJsZV9hbGxvd2VkKGNvbnN0IGNo YXIgKnNpZykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBfX2luaXQgYmFubmVkX3RhYmxlc1td W0FDUElfTkFNRV9TSVpFXSA9IHsKKyAgICAgICAgQUNQSV9TSUdfSFBFVCwgQUNQSV9TSUdfU0xJ VCwgQUNQSV9TSUdfU1JBVCwgQUNQSV9TSUdfTVBTVCwKKyAgICAgICAgQUNQSV9TSUdfUE1UVCwg QUNQSV9TSUdfTUFEVCwgQUNQSV9TSUdfRE1BUn07CisgICAgdW5zaWduZWQgbG9uZyBwZm4sIG5y X3BhZ2VzOworICAgIGludCBpOworCisgICAgZm9yICggaSA9IDAgOyBpIDwgQVJSQVlfU0laRShi YW5uZWRfdGFibGVzKTsgaSsrICkKKyAgICAgICAgaWYgKCBzdHJuY21wKHNpZywgYmFubmVkX3Rh Ymxlc1tpXSwgQUNQSV9OQU1FX1NJWkUpID09IDAgKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl OworCisgICAgLyogTWFrZSBzdXJlIHRhYmxlIGRvZXNuJ3QgcmVzaWRlIGluIGEgUkFNIHJlZ2lv bi4gKi8KKyAgICBwZm4gPSBQRk5fRE9XTihhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVz W2ldLmFkZHJlc3MpOworICAgIG5yX3BhZ2VzID0gRElWX1JPVU5EX1VQKGFjcGlfZ2JsX3Jvb3Rf dGFibGVfbGlzdC50YWJsZXNbaV0ubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBBR0VfU0laRSk7CisgICAgaWYgKCByYW5nZV9pc19yYW0ocGZuLCBucl9wYWdlcykgKQorICAg IHsKKyAgICAgICAgcHJpbnRrKCJTa2lwcGluZyB0YWJsZSAlLjRzIGJlY2F1c2UgcmVzaWRlcyBp biBhIFJBTSByZWdpb25cbiIsCisgICAgICAgICAgICAgICBzaWcpOworICAgICAgICByZXR1cm4g ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0 IGh2bV9zZXR1cF9hY3BpX3hzZHQoc3RydWN0IGRvbWFpbiAqZCwgcGFkZHJfdCBtYWR0X2FkZHIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRyX3QgKmFkZHIpCit7 CisgICAgc3RydWN0IGFjcGlfdGFibGVfeHNkdCAqeHNkdDsKKyAgICBzdHJ1Y3QgYWNwaV90YWJs ZV9oZWFkZXIgKnRhYmxlOworICAgIHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAgKnJzZHA7CisgICAg c3RydWN0IHZjcHUgKnNhdmVkX2N1cnJlbnQsICp2ID0gZC0+dmNwdVswXTsKKyAgICB1bnNpZ25l ZCBsb25nIHNpemU7CisgICAgdW5zaWduZWQgaW50IGksIG51bV90YWJsZXM7CisgICAgaW50IGos IHJjOworCisgICAgLyoKKyAgICAgKiBSZXN0b3JlIG9yaWdpbmFsIERNQVIgdGFibGUgc2lnbmF0 dXJlLCB3ZSBhcmUgZ29pbmcgdG8gZmlsdGVyIGl0CisgICAgICogZnJvbSB0aGUgbmV3IFhTRFQg dGhhdCBpcyBwcmVzZW50ZWQgdG8gdGhlIGd1ZXN0LCBzbyBpdCBubyBsb25nZXIKKyAgICAgKiBt YWtlcyBzZW5zZSB0byBoYXZlIGl0J3Mgc2lnbmF0dXJlIHphcHBlZC4KKyAgICAgKi8KKyAgICBh Y3BpX2RtYXJfcmVpbnN0YXRlKCk7CisKKyAgICAvKiBBY2NvdW50IGZvciB0aGUgc3BhY2UgbmVl ZGVkIGJ5IHRoZSBYU0RULiAqLworICAgIHNpemUgPSBzaXplb2YoKnhzZHQpOworICAgIG51bV90 YWJsZXMgPSAwOworCisgICAgLyogQ291bnQgdGhlIG51bWJlciBvZiB0YWJsZXMgdGhhdCB3aWxs IGJlIGFkZGVkIHRvIHRoZSBYU0RULiAqLworICAgIGZvciggaSA9IDA7IGkgPCBhY3BpX2dibF9y b290X3RhYmxlX2xpc3QuY291bnQ7IGkrKyApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpz aWcgPSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLnNpZ25hdHVyZS5hc2NpaTsK KworICAgICAgICBpZiAoICFodm1fYWNwaV90YWJsZV9hbGxvd2VkKHNpZykgKQorICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgbnVtX3RhYmxlcysrOworICAgIH0KKworICAgIC8qCisg ICAgICogTm8gbmVlZCB0byBzdWJ0cmFjdCBvbmUgYmVjYXVzZSB3ZSB3aWxsIGJlIGFkZGluZyBh IGN1c3RvbSBNQURUIChhbmQKKyAgICAgKiB0aGUgbmF0aXZlIG9uZSBpcyBub3QgYWNjb3VudGVk IGZvcikuCisgICAgICovCisgICAgc2l6ZSArPSBudW1fdGFibGVzICogc2l6ZW9mKHU2NCk7CisK KyAgICB4c2R0ID0geHphbGxvY19ieXRlcyhzaXplKTsKKyAgICBpZiAoICF4c2R0ICkKKyAgICB7 CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgWFNEVCB0YWJs ZVxuIik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIC8qIENvcHkgdGhl IG5hdGl2ZSBYU0RUIHRhYmxlIGhlYWRlci4gKi8KKyAgICByc2RwID0gYWNwaV9vc19tYXBfbWVt b3J5KGFjcGlfb3NfZ2V0X3Jvb3RfcG9pbnRlcigpLCBzaXplb2YoKnJzZHApKTsKKyAgICBpZiAo ICFyc2RwICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIG1hcCBSU0RQXG4iKTsK KyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAgIHRhYmxlID0gYWNwaV9vc19tYXBf bWVtb3J5KHJzZHAtPnhzZHRfcGh5c2ljYWxfYWRkcmVzcywgc2l6ZW9mKCp0YWJsZSkpOworICAg IGlmICggIXRhYmxlICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIG1hcCBYU0RU XG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAgIEFDUElfTUVNQ1BZKHhz ZHQsIHRhYmxlLCBzaXplb2YoKnRhYmxlKSk7CisgICAgYWNwaV9vc191bm1hcF9tZW1vcnkodGFi bGUsIHNpemVvZigqdGFibGUpKTsKKyAgICBhY3BpX29zX3VubWFwX21lbW9yeShyc2RwLCBzaXpl b2YoKnJzZHApKTsKKworICAgIC8qIEFkZCB0aGUgY3VzdG9tIE1BRFQuICovCisgICAgaiA9IDA7 CisgICAgeHNkdC0+dGFibGVfb2Zmc2V0X2VudHJ5W2orK10gPSBtYWR0X2FkZHI7CisKKyAgICAv KiBDb3B5IHRoZSBhZGRyZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBhbGxvd2VkIHRhYmxlcy4gKi8K KyAgICBmb3IoIGkgPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50OyBpKysg KQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc2lnID0gYWNwaV9nYmxfcm9vdF90YWJsZV9s aXN0LnRhYmxlc1tpXS5zaWduYXR1cmUuYXNjaWk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZu LCBucl9wYWdlczsKKworICAgICAgICBpZiAoICFodm1fYWNwaV90YWJsZV9hbGxvd2VkKHNpZykg KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogTWFrZSBzdXJlIHRhYmxlIGRv ZXNuJ3QgcmVzaWRlIGluIGEgUkFNIHJlZ2lvbi4gKi8KKyAgICAgICAgcGZuID0gUEZOX0RPV04o YWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5hZGRyZXNzKTsKKyAgICAgICAgbnJf cGFnZXMgPSBESVZfUk9VTkRfVVAoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5s ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0VfU0laRSk7CisKKyAg ICAgICAgLyogTWFrZSBzdXJlIHRhYmxlIGlzIG1hcHBlZC4gKi8KKyAgICAgICAgcmMgPSBtb2Rp ZnlfaWRlbnRpdHlfbW1pbyhkLCBwZm4sIG5yX3BhZ2VzLCB0cnVlKTsKKyAgICAgICAgaWYgKCBy YyApCisgICAgICAgICAgICBwcmludGsoIkZhaWxlZCB0byBtYXAgQUNQSSByZWdpb24gWyUjbHgs ICUjbHgpIGludG8gRG9tMCBtZW1vcnkgbWFwXG4iLAorICAgICAgICAgICAgICAgICAgIHBmbiwg cGZuICsgbnJfcGFnZXMpOworCisgICAgICAgIHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeVtqKytd ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9yb290X3RhYmxlX2xpc3Qu dGFibGVzW2ldLmFkZHJlc3M7CisgICAgfQorCisgICAgeHNkdC0+aGVhZGVyLmxlbmd0aCA9IHNp emU7CisgICAgeHNkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9D QVNUX1BUUih1OCwgeHNkdCksIHNpemUpOworCisgICAgLyogUGxhY2UgdGhlIG5ldyBYU0RUIGlu IGd1ZXN0IG1lbW9yeSBzcGFjZS4gKi8KKyAgICBpZiAoIGh2bV9zdGVhbF9yYW0oZCwgc2l6ZSwg R0IoNCksIGFkZHIpICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGZpbmQgYWxs b2NhdGUgZ3Vlc3QgUkFNIGZvciBYU0RUXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cisg ICAgfQorCisgICAgLyogTWFyayB0aGlzIHJlZ2lvbiBhcyBFODIwX0FDUEkuICovCisgICAgaWYg KCBodm1fYWRkX21lbV9yYW5nZShkLCAqYWRkciwgKmFkZHIgKyBzaXplLCBFODIwX0FDUEkpICkK KyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gYWRkIFhTRFQgcmVnaW9uIHRvIG1lbW9yeSBtYXBc biIpOworCisgICAgc2F2ZWRfY3VycmVudCA9IGN1cnJlbnQ7CisgICAgc2V0X2N1cnJlbnQodik7 CisgICAgcmMgPSBodm1fY29weV90b19ndWVzdF9waHlzKCphZGRyLCB4c2R0LCBzaXplKTsKKyAg ICBzZXRfY3VycmVudChzYXZlZF9jdXJyZW50KTsKKyAgICBpZiAoIHJjICE9IEhWTUNPUFlfb2th eSApCisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBjb3B5IFhTRFQgaW50byBndWVz dCBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICB9CisgICAgeGZyZWUo eHNkdCk7CisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBodm1fc2V0 dXBfYWNwaShzdHJ1Y3QgZG9tYWluICpkLCBwYWRkcl90IHN0YXJ0X2luZm8pCit7CisgICAgc3Ry dWN0IHZjcHUgKnNhdmVkX2N1cnJlbnQsICp2ID0gZC0+dmNwdVswXTsKKyAgICBzdHJ1Y3QgYWNw aV90YWJsZV9yc2RwIHJzZHA7CisgICAgdW5zaWduZWQgbG9uZyBwZm4sIG5yX3BhZ2VzOworICAg IHBhZGRyX3QgbWFkdF9wYWRkciwgeHNkdF9wYWRkciwgcnNkcF9wYWRkcjsKKyAgICB1bnNpZ25l ZCBpbnQgaTsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBJZGVudGl0eSBtYXAgQUNQSSBlODIwIHJl Z2lvbnMuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBkLT5hcmNoLm5yX2U4MjA7IGkrKyApCisg ICAgeworICAgICAgICBpZiAoIGQtPmFyY2guZTgyMFtpXS50eXBlICE9IEU4MjBfQUNQSSAmJgor ICAgICAgICAgICAgIGQtPmFyY2guZTgyMFtpXS50eXBlICE9IEU4MjBfTlZTICkKKyAgICAgICAg ICAgIGNvbnRpbnVlOworCisgICAgICAgIHBmbiA9IFBGTl9ET1dOKGQtPmFyY2guZTgyMFtpXS5h ZGRyKTsKKyAgICAgICAgbnJfcGFnZXMgPSBESVZfUk9VTkRfVVAoZC0+YXJjaC5lODIwW2ldLnNp emUsIFBBR0VfU0laRSk7CisKKyAgICAgICAgcmMgPSBtb2RpZnlfaWRlbnRpdHlfbW1pbyhkLCBw Zm4sIG5yX3BhZ2VzLCB0cnVlKTsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgIHsKKyAgICAg ICAgICAgIHByaW50aygKKyAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIG1hcCBBQ1BJIHJlZ2lv biBbJSNseCwgJSNseCkgaW50byBEb20wIG1lbW9yeSBtYXBcbiIsCisgICAgICAgICAgICAgICAg ICAgcGZuLCBwZm4gKyBucl9wYWdlcyk7CisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAg IH0KKyAgICB9CisKKyAgICByYyA9IGh2bV9zZXR1cF9hY3BpX21hZHQoZCwgJm1hZHRfcGFkZHIp OworICAgIGlmICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGh2bV9zZXR1 cF9hY3BpX3hzZHQoZCwgbWFkdF9wYWRkciwgJnhzZHRfcGFkZHIpOworICAgIGlmICggcmMgKQor ICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKiBDcmFmdCBhIGN1c3RvbSBSU0RQLiAqLworICAg IG1lbXNldCgmcnNkcCwgMCwgc2l6ZW9mKHJzZHApKTsKKyAgICBtZW1jcHkoJnJzZHAuc2lnbmF0 dXJlLCBBQ1BJX1NJR19SU0RQLCBzaXplb2YocnNkcC5zaWduYXR1cmUpKTsKKyAgICBtZW1jcHko JnJzZHAub2VtX2lkLCAiWGVuVk1NIiwgc2l6ZW9mKHJzZHAub2VtX2lkKSk7CisgICAgcnNkcC5y ZXZpc2lvbiA9IDI7CisgICAgcnNkcC54c2R0X3BoeXNpY2FsX2FkZHJlc3MgPSB4c2R0X3BhZGRy OworICAgIHJzZHAucnNkdF9waHlzaWNhbF9hZGRyZXNzID0gMDsKKyAgICByc2RwLmxlbmd0aCA9 IHNpemVvZihyc2RwKTsKKyAgICByc2RwLmNoZWNrc3VtIC09IGFjcGlfdGJfY2hlY2tzdW0oQUNQ SV9DQVNUX1BUUih1OCwgJnJzZHApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBQ1BJX1JTRFBfUkVWMF9TSVpFKTsKKyAgICByc2RwLmV4dGVuZGVkX2NoZWNrc3VtIC09 IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1OCwgJnJzZHApLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocnNkcCkpOworCisgICAg LyoKKyAgICAgKiBQbGFjZSB0aGUgbmV3IFJTRFAgaW4gZ3Vlc3QgbWVtb3J5IHNwYWNlLgorICAg ICAqCisgICAgICogTkI6IHRoaXMgUlNEUCBpcyBub3QgZ29pbmcgdG8gcmVwbGFjZSB0aGUgb3Jp Z2luYWwgUlNEUCwgd2hpY2gKKyAgICAgKiBzaG91bGQgc3RpbGwgYmUgYWNjZXNzaWJsZSB0byB0 aGUgZ3Vlc3QuIEhvd2V2ZXIgdGhhdCBSU0RQIGlzCisgICAgICogZ29pbmcgdG8gcG9pbnQgdG8g dGhlIG5hdGl2ZSBYU0RUL1JTRFQsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCisgICAgICovCisg ICAgaWYgKCBodm1fc3RlYWxfcmFtKGQsIHNpemVvZihyc2RwKSwgR0IoNCksICZyc2RwX3BhZGRy KSApCisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBndWVzdCBSQU0g Zm9yIFJTRFBcbiIpOworICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9CisKKyAgICAvKiBN YXJrIHRoaXMgcmVnaW9uIGFzIEU4MjBfQUNQSS4gKi8KKyAgICBpZiAoIGh2bV9hZGRfbWVtX3Jh bmdlKGQsIHJzZHBfcGFkZHIsIHJzZHBfcGFkZHIgKyBzaXplb2YocnNkcCksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBFODIwX0FDUEkpICkKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8g YWRkIFJTRFAgcmVnaW9uIHRvIG1lbW9yeSBtYXBcbiIpOworCisgICAgLyogQ29weSBSU0RQIGlu dG8gZ3Vlc3QgbWVtb3J5LiAqLworICAgIHNhdmVkX2N1cnJlbnQgPSBjdXJyZW50OworICAgIHNl dF9jdXJyZW50KHYpOworICAgIHJjID0gaHZtX2NvcHlfdG9fZ3Vlc3RfcGh5cyhyc2RwX3BhZGRy LCAmcnNkcCwgc2l6ZW9mKHJzZHApKTsKKyAgICBpZiAoIHJjICE9IEhWTUNPUFlfb2theSApCisg ICAgeworICAgICAgICBzZXRfY3VycmVudChzYXZlZF9jdXJyZW50KTsKKyAgICAgICAgcHJpbnRr KCJVbmFibGUgdG8gY29weSBSU0RQIGludG8gZ3Vlc3QgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0 dXJuIC1FRkFVTFQ7CisgICAgfQorCisgICAgLyogQ29weSBSU0RQIGFkZHJlc3MgdG8gc3RhcnRf aW5mby4gKi8KKyAgICByYyA9IGh2bV9jb3B5X3RvX2d1ZXN0X3BoeXMoc3RhcnRfaW5mbyArCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCBodm1fc3RhcnRf aW5mbywgcnNkcF9wYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyc2Rw X3BhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCBodm1fc3RhcnRfaW5mbyAqKTAp LT5yc2RwX3BhZGRyKSk7CisgICAgc2V0X2N1cnJlbnQoc2F2ZWRfY3VycmVudCk7CisgICAgaWYg KCByYyAhPSBIVk1DT1BZX29rYXkgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8g Y29weSBSU0RQIGludG8gZ3Vlc3QgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7 CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGNvbnN0cnVj dF9kb20wX2h2bShzdHJ1Y3QgZG9tYWluICpkLCBjb25zdCBtb2R1bGVfdCAqaW1hZ2UsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbWFnZV9oZWFk cm9vbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfdCAqaW5p dHJkLApAQCAtMjE1MSw2ICsyNTcwLDEzIEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbnN0cnVjdF9k b20wX2h2bShzdHJ1Y3QgZG9tYWluICpkLCBjb25zdCBtb2R1bGVfdCAqaW1hZ2UsCiAgICAgICAg IHJldHVybiByYzsKICAgICB9CiAKKyAgICByYyA9IGh2bV9zZXR1cF9hY3BpKGQsIHN0YXJ0X2lu Zm8pOworICAgIGlmICggcmMgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gc2V0 dXAgRG9tMCBBQ1BJIHRhYmxlczogJWRcbiIsIHJjKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAg IH0KKwogICAgIGNsZWFyX2JpdChfVlBGX2Rvd24sICZkLT52Y3B1WzBdLT5wYXVzZV9mbGFncyk7 CiAKICAgICByZXR1cm4gMDsKLS0gCjIuNy40IChBcHBsZSBHaXQtNjYpCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==