From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 24/29] xl: split out vnc and console related code Date: Fri, 24 Feb 2017 16:13:09 +0000 Message-ID: <20170224161314.22154-25-wei.liu2@citrix.com> References: <20170224161314.22154-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 1chIY2-0006rM-4n for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:46 +0000 In-Reply-To: <20170224161314.22154-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: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org VGhlIG5ldyBmaWxlIGFsc28gY29udGFpbnMgY29kZSBmb3IgY2hhbm5lbCwgd2hpY2ggaXMganVz dCBhIGNvbnNvbGUKaW4gZGlzZ3Vpc2UuCgpSZXBsYWNlIHRoZSBjYWxsIHRvIHZuY3ZpZXdlcigp IHdpdGggbGlieGxfdm5jdmlld2VyX2V4ZWMoKSBkaXJlY3RseSBpbgptYWluX3ZuY3ZpZXdlci4K ClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQogdG9vbHMv eGwvTWFrZWZpbGUgICAgIHwgICAyICstCiB0b29scy94bC94bF9jbWRpbXBsLmMgfCAgOTggLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMveGwveGxfY29uc29sZS5j IHwgMTMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiAzIGZpbGVzIGNoYW5nZWQsIDEzMSBpbnNlcnRpb25zKCspLCA5OSBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCB0b29scy94bC94bF9jb25zb2xlLmMKCmRpZmYgLS1naXQgYS90b29s cy94bC9NYWtlZmlsZSBiL3Rvb2xzL3hsL01ha2VmaWxlCmluZGV4IGM1MTEwNmU0OWUuLmI0OWUy Y2RjYWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL01ha2VmaWxlCisrKyBiL3Rvb2xzL3hsL01ha2Vm aWxlCkBAIC0xOSw3ICsxOSw3IEBAIFhMX09CSlMgPSB4bC5vIHhsX2NtZGltcGwubyB4bF9jbWR0 YWJsZS5vIHhsX3N4cC5vIHhsX3V0aWxzLm8KIFhMX09CSlMgKz0geGxfdG1lbS5vIHhsX3BhcnNl Lm8geGxfY3B1cG9vbC5vIHhsX2ZsYXNrLm8KIFhMX09CSlMgKz0geGxfdnRwbS5vIHhsX2Jsb2Nr Lm8geGxfbmljLm8geGxfdXNiLm8KIFhMX09CSlMgKz0geGxfc2NoZWQubyB4bF9wY2kubyB4bF92 Y3B1Lm8geGxfY2QubyB4bF9tZW0ubwotWExfT0JKUyArPSB4bF9wc3IubyB4bF9pbmZvLm8KK1hM X09CSlMgKz0geGxfcHNyLm8geGxfaW5mby5vIHhsX2NvbnNvbGUubwogCiAkKFhMX09CSlMpOiBD RkxBR1MgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKICQoWExfT0JKUyk6IENGTEFHUyArPSAk KENGTEFHU19YTCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX2NtZGltcGwuYyBiL3Rvb2xzL3hs L3hsX2NtZGltcGwuYwppbmRleCAxZGU1NDQ1ZTdmLi5kMzJlN2ZlNmYxIDEwMDY0NAotLS0gYS90 b29scy94bC94bF9jbWRpbXBsLmMKKysrIGIvdG9vbHMveGwveGxfY21kaW1wbC5jCkBAIC0xMDcx LDYwICsxMDcxLDYgQEAgdm9pZCBoZWxwKGNvbnN0IGNoYXIgKmNvbW1hbmQpCiAgICAgfQogfQog Ci1pbnQgbWFpbl9jb25zb2xlKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICB1aW50MzJf dCBkb21pZDsKLSAgICBpbnQgb3B0ID0gMCwgbnVtID0gMDsKLSAgICBsaWJ4bF9jb25zb2xlX3R5 cGUgdHlwZSA9IDA7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAibjp0OiIsIE5VTEws ICJjb25zb2xlIiwgMSkgewotICAgIGNhc2UgJ3QnOgotICAgICAgICBpZiAoIXN0cmNtcChvcHRh cmcsICJwdiIpKQotICAgICAgICAgICAgdHlwZSA9IExJQlhMX0NPTlNPTEVfVFlQRV9QVjsKLSAg ICAgICAgZWxzZSBpZiAoIXN0cmNtcChvcHRhcmcsICJzZXJpYWwiKSkKLSAgICAgICAgICAgIHR5 cGUgPSBMSUJYTF9DT05TT0xFX1RZUEVfU0VSSUFMOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiY29uc29sZSB0eXBlIHN1cHBvcnRlZCBhcmU6IHB2LCBzZXJp YWxcbiIpOwotICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICAgICAgfQotICAg ICAgICBicmVhazsKLSAgICBjYXNlICduJzoKLSAgICAgICAgbnVtID0gYXRvaShvcHRhcmcpOwot ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29w dGluZF0pOwotICAgIGlmICghdHlwZSkKLSAgICAgICAgbGlieGxfcHJpbWFyeV9jb25zb2xlX2V4 ZWMoY3R4LCBkb21pZCwgLTEpOwotICAgIGVsc2UKLSAgICAgICAgbGlieGxfY29uc29sZV9leGVj KGN0eCwgZG9taWQsIG51bSwgdHlwZSwgLTEpOwotICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxl IHRvIGF0dGFjaCBjb25zb2xlXG4iKTsKLSAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotfQotCi1p bnQgbWFpbl92bmN2aWV3ZXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIHN0YXRpYyBj b25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKLSAgICAgICAgeyJhdXRvcGFzcyIsIDAsIDAs ICdhJ30sCi0gICAgICAgIHsidm5jdmlld2VyLWF1dG9wYXNzIiwgMCwgMCwgJ2EnfSwKLSAgICAg ICAgQ09NTU9OX0xPTkdfT1BUUwotICAgIH07Ci0gICAgdWludDMyX3QgZG9taWQ7Ci0gICAgaW50 IG9wdCwgYXV0b3Bhc3MgPSAwOwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgImEiLCBv cHRzLCAidm5jdmlld2VyIiwgMSkgewotICAgIGNhc2UgJ2EnOgotICAgICAgICBhdXRvcGFzcyA9 IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFy Z3Zbb3B0aW5kXSk7Ci0KLSAgICBpZiAodm5jdmlld2VyKGRvbWlkLCBhdXRvcGFzcykpCi0gICAg ICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0KLQog c3RhdGljIHZvaWQgcGF1c2VfZG9tYWluKHVpbnQzMl90IGRvbWlkKQogewogICAgIGxpYnhsX2Rv bWFpbl9wYXVzZShjdHgsIGRvbWlkKTsKQEAgLTI1MTQsNTAgKzI0NjAsNiBAQCBpbnQgbWFpbl9k ZWJ1Z19rZXlzKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICByZXR1cm4gRVhJVF9TVUNDRVNT OwogfQogCi1pbnQgbWFpbl9jaGFubmVsbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0g ICAgaW50IG9wdDsKLSAgICBsaWJ4bF9kZXZpY2VfY2hhbm5lbCAqY2hhbm5lbHM7Ci0gICAgbGli eGxfY2hhbm5lbGluZm8gY2hhbm5lbGluZm87Ci0gICAgaW50IG5iLCBpOwotCi0gICAgU1dJVENI X0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJjaGFubmVsLWxpc3QiLCAxKSB7Ci0gICAgICAg IC8qIE5vIG9wdGlvbnMgKi8KLSAgICB9Ci0KLSAgICAvKiAgICAgIElkeCBCRSBzdGF0ZSBldnQt Y2ggcmluZy1yZWYgY29ubmVjdGlvbiBwYXJhbXMqLwotICAgIHByaW50ZigiJS0zcyAlLTJzICUt NXMgJS02cyAlOHMgJS0xMHMgJS0zMHNcbiIsCi0gICAgICAgICAgICJJZHgiLCAiQkUiLCAic3Rh dGUiLCAiZXZ0LWNoIiwgInJpbmctcmVmIiwgImNvbm5lY3Rpb24iLCAiIik7Ci0gICAgZm9yIChh cmd2ICs9IG9wdGluZCwgYXJnYyAtPSBvcHRpbmQ7IGFyZ2MgPiAwOyAtLWFyZ2MsICsrYXJndikg ewotICAgICAgICB1aW50MzJfdCBkb21pZCA9IHhmaW5kX2RvbWFpbigqYXJndik7Ci0gICAgICAg IGNoYW5uZWxzID0gbGlieGxfZGV2aWNlX2NoYW5uZWxfbGlzdChjdHgsIGRvbWlkLCAmbmIpOwot ICAgICAgICBpZiAoIWNoYW5uZWxzKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZv ciAoaSA9IDA7IGkgPCBuYjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWxpYnhsX2RldmljZV9j aGFubmVsX2dldGluZm8oY3R4LCBkb21pZCwgJmNoYW5uZWxzW2ldLAotICAgICAgICAgICAgICAg ICZjaGFubmVsaW5mbykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiUtM2QgJS0yZCAiLCBj aGFubmVsc1tpXS5kZXZpZCwgY2hhbm5lbGluZm8uYmFja2VuZF9pZCk7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKCIlLTVkICIsIGNoYW5uZWxpbmZvLnN0YXRlKTsKLSAgICAgICAgICAgICAgICBw cmludGYoIiUtNmQgJS04ZCAiLCBjaGFubmVsaW5mby5ldnRjaCwgY2hhbm5lbGluZm8ucnJlZik7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlLTEwcyAiLCBsaWJ4bF9jaGFubmVsX2Nvbm5lY3Rp b25fdG9fc3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsc1tpXS5jb25uZWN0 aW9uKSk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjaGFubmVsc1tpXS5jb25uZWN0aW9uKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTElCWExfQ0hBTk5FTF9DT05ORUNUSU9OX1BUWToK LSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJS0zMHMgIiwgY2hhbm5lbGluZm8udS5w dHkucGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICAgICAg bGlieGxfY2hhbm5lbGluZm9fZGlzcG9zZSgmY2hhbm5lbGluZm8pOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgbGlieGxfZGV2aWNlX2NoYW5uZWxfZGlzcG9zZSgmY2hhbm5lbHNbaV0pOwot ICAgICAgICB9Ci0gICAgICAgIGZyZWUoY2hhbm5lbHMpOwotICAgIH0KLSAgICByZXR1cm4gMDsK LX0KLQogI2lmbmRlZiBMSUJYTF9IQVZFX05PX1NVU1BFTkRfUkVTVU1FCiBpbnQgbWFpbl9yZW11 cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CmRpZmYgLS1naXQgYS90b29scy94bC94bF9jb25z b2xlLmMgYi90b29scy94bC94bF9jb25zb2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uYzNhYmIzZjYzMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3hsL3hsX2Nv bnNvbGUuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTcgQ2l0 cml4IEx0ZCBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lv biAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVz Y3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxsaWJ4bC5oPgorI2luY2x1 ZGUgPGxpYnhsX3V0aWxzLmg+CisjaW5jbHVkZSA8bGlieGx1dGlsLmg+CisKKyNpbmNsdWRlICJ4 bC5oIgorI2luY2x1ZGUgInhsX3V0aWxzLmgiCisjaW5jbHVkZSAieGxfcGFyc2UuaCIKKworaW50 IG1haW5fY29uc29sZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3QgZG9t aWQ7CisgICAgaW50IG9wdCA9IDAsIG51bSA9IDA7CisgICAgbGlieGxfY29uc29sZV90eXBlIHR5 cGUgPSAwOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIm46dDoiLCBOVUxMLCAiY29u c29sZSIsIDEpIHsKKyAgICBjYXNlICd0JzoKKyAgICAgICAgaWYgKCFzdHJjbXAob3B0YXJnLCAi cHYiKSkKKyAgICAgICAgICAgIHR5cGUgPSBMSUJYTF9DT05TT0xFX1RZUEVfUFY7CisgICAgICAg IGVsc2UgaWYgKCFzdHJjbXAob3B0YXJnLCAic2VyaWFsIikpCisgICAgICAgICAgICB0eXBlID0g TElCWExfQ09OU09MRV9UWVBFX1NFUklBTDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgImNvbnNvbGUgdHlwZSBzdXBwb3J0ZWQgYXJlOiBwdiwgc2VyaWFsXG4i KTsKKyAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICAgIG51bSA9IGF0b2kob3B0YXJnKTsKKyAgICAg ICAgYnJlYWs7CisgICAgfQorCisgICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRd KTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIGxpYnhsX3ByaW1hcnlfY29uc29sZV9leGVjKGN0 eCwgZG9taWQsIC0xKTsKKyAgICBlbHNlCisgICAgICAgIGxpYnhsX2NvbnNvbGVfZXhlYyhjdHgs IGRvbWlkLCBudW0sIHR5cGUsIC0xKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBh dHRhY2ggY29uc29sZVxuIik7CisgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKK30KKworaW50IG1h aW5fdm5jdmlld2VyKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBzdGF0aWMgY29uc3Qg c3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisgICAgICAgIHsiYXV0b3Bhc3MiLCAwLCAwLCAnYSd9 LAorICAgICAgICB7InZuY3ZpZXdlci1hdXRvcGFzcyIsIDAsIDAsICdhJ30sCisgICAgICAgIENP TU1PTl9MT05HX09QVFMKKyAgICB9OworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGludCBvcHQs IGF1dG9wYXNzID0gMDsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICJhIiwgb3B0cywg InZuY3ZpZXdlciIsIDEpIHsKKyAgICBjYXNlICdhJzoKKyAgICAgICAgYXV0b3Bhc3MgPSAxOwor ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29w dGluZF0pOworCisgICAgbGlieGxfdm5jdmlld2VyX2V4ZWMoY3R4LCBkb21pZCwgYXV0b3Bhc3Mp OworCisgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKK30KKworLyogQ2hhbm5lbCBpcyBqdXN0IGEg Y29uc29sZSBpbiBkaXNndWlzZSwgc28gcHV0IGl0IGhlcmUgKi8KK2ludCBtYWluX2NoYW5uZWxs aXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIGxpYnhsX2Rl dmljZV9jaGFubmVsICpjaGFubmVsczsKKyAgICBsaWJ4bF9jaGFubmVsaW5mbyBjaGFubmVsaW5m bzsKKyAgICBpbnQgbmIsIGk7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVM TCwgImNoYW5uZWwtbGlzdCIsIDEpIHsKKyAgICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0K KworICAgIC8qICAgICAgSWR4IEJFIHN0YXRlIGV2dC1jaCByaW5nLXJlZiBjb25uZWN0aW9uIHBh cmFtcyovCisgICAgcHJpbnRmKCIlLTNzICUtMnMgJS01cyAlLTZzICU4cyAlLTEwcyAlLTMwc1xu IiwKKyAgICAgICAgICAgIklkeCIsICJCRSIsICJzdGF0ZSIsICJldnQtY2giLCAicmluZy1yZWYi LCAiY29ubmVjdGlvbiIsICIiKTsKKyAgICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBhcmdjIC09IG9w dGluZDsgYXJnYyA+IDA7IC0tYXJnYywgKythcmd2KSB7CisgICAgICAgIHVpbnQzMl90IGRvbWlk ID0geGZpbmRfZG9tYWluKCphcmd2KTsKKyAgICAgICAgY2hhbm5lbHMgPSBsaWJ4bF9kZXZpY2Vf Y2hhbm5lbF9saXN0KGN0eCwgZG9taWQsICZuYik7CisgICAgICAgIGlmICghY2hhbm5lbHMpCisg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5iOyArK2kpIHsK KyAgICAgICAgICAgIGlmICghbGlieGxfZGV2aWNlX2NoYW5uZWxfZ2V0aW5mbyhjdHgsIGRvbWlk LCAmY2hhbm5lbHNbaV0sCisgICAgICAgICAgICAgICAgJmNoYW5uZWxpbmZvKSkgeworICAgICAg ICAgICAgICAgIHByaW50ZigiJS0zZCAlLTJkICIsIGNoYW5uZWxzW2ldLmRldmlkLCBjaGFubmVs aW5mby5iYWNrZW5kX2lkKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiUtNWQgIiwgY2hhbm5l bGluZm8uc3RhdGUpOworICAgICAgICAgICAgICAgIHByaW50ZigiJS02ZCAlLThkICIsIGNoYW5u ZWxpbmZvLmV2dGNoLCBjaGFubmVsaW5mby5ycmVmKTsKKyAgICAgICAgICAgICAgICBwcmludGYo IiUtMTBzICIsIGxpYnhsX2NoYW5uZWxfY29ubmVjdGlvbl90b19zdHJpbmcoCisgICAgICAgICAg ICAgICAgICAgICAgIGNoYW5uZWxzW2ldLmNvbm5lY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBz d2l0Y2ggKGNoYW5uZWxzW2ldLmNvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSBMSUJYTF9DSEFOTkVMX0NPTk5FQ1RJT05fUFRZOgorICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIlLTMwcyAiLCBjaGFubmVsaW5mby51LnB0eS5wYXRoKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgICBsaWJ4bF9jaGFubmVsaW5mb19kaXNwb3Nl KCZjaGFubmVsaW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vf Y2hhbm5lbF9kaXNwb3NlKCZjaGFubmVsc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShj aGFubmVscyk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFi bGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1v ZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK