From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v6 04/24] xen-xsplice: Tool to manipulate xsplice payloads Date: Wed, 6 Apr 2016 23:49:23 -0400 Message-ID: <1460000983-28170-5-git-send-email-konrad.wilk@oracle.com> References: <1460000983-28170-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ao0xJ-0004mh-Or for xen-devel@lists.xenproject.org; Thu, 07 Apr 2016 03:50:05 +0000 In-Reply-To: <1460000983-28170-1-git-send-email-konrad.wilk@oracle.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, konrad@kernel.org, ross.lagerwall@citrix.com, mpohlack@amazon.de, sasha.levin@oracle.com, andrew.cooper3@citrix.com Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org QSBzaW1wbGUgdG9vbCB0aGF0IGFsbG93cyBhbiBzeXN0ZW0gYWRtaW4gdG8gcGVyZm9ybQpiYXNp YyB4c3BsaWNlIG9wZXJhdGlvbnM6CgogLSBVcGxvYWQgYSB4c3BsaWNlIGZpbGUgKHdpdGggYW4g dW5pcXVlIG5hbWUpCiAtIExpc3QgYWxsIHRoZSB4c3BsaWNlIHBheWxvYWRzIGxvYWRlZC4KIC0g QXBwbHksIHJldmVydCwgcmVwbGFjZSwgb3IgdW5sb2FkIHRoZSBwYXlsb2FkIHVzaW5nIHRoZQog ICB1bmlxdWUgbmFtZS4KIC0gRG8gYWxsIHR3byAtIHVwbG9hZCwgYW5kIGFwcGx5IHRoZSBwYXls b2FkIGluIG9uZSBnbyAobG9hZCkuCiAgIEFsc28gd2lsbCB1c2UgdGhlIG5hbWUgb2YgdGhlIGZp bGUgYXMgdGhlIDxuYW1lPgoKU2lnbmVkLW9mZi1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxr b25yYWQud2lsa0BvcmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBSb3NzIExhZ2Vyd2FsbCA8cm9z cy5sYWdlcndhbGxAY2l0cml4LmNvbT4KQWNrZWQtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJp eC5jb20+CgotLS0KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpD YzogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbT4K Q2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Cgp2MjoKIC0gUmVtb3ZlZCBSRVZFUlRF RCBzdGF0ZS4KIC0gRml4ZWQgYnVncyBoYW5kbGluZyBYU1BMSUNFX1NUQVRVU19QUk9HUkVTUy4K IC0gU3BsaXQgc3RhdHVzIGludG8gc3RhdGUgYW5kIGVycm9yLgogICBBZGQgUkVQTEFDRSBhY3Rp b24uCnYzOgogLSBVdGlsaXplIHRoZSB0aW1lb3V0IGFuZCB1c2UgdGhlIGRlZmF1bHQgb25lIChs ZXQgdGhlIGh5cGVydmlzb3IKICAgcGljayBpdCkuCiAtIENoYW5nZSB0aGUgcy9hbGwvbG9hZCBh bmQgaW5mZXIgdGhlIDxpZD4gZnJvbSBuYW1lIG9mIGZpbGUuCiAtIHMvaWQvbmFtZS8KIC0gRG9u J3QgdXNlIGh5cGVyY2FsbCBidWZmZXIgaW4gdXBsb2FkX2Z1bmMsIGluc3RlYWQgZG8gaXQgaW4g bGlieGMKIC0gUmVtb3ZlIHRoZSBkZWJ1ZyBwcmludGsuCiAtIFJlbW92ZSBnb3RvJ3MgKHBlciBX ZWkncyByZXZpZXcpCiAtIFVzZSBmcHJpbnRmKHN0ZGVyciBpbiBlcnJvciBwYXRocy4KIC0gQWRk IGxvY2FsIHZhcmlhYmxlIGJsb2NrLgogLSBTeW50YXgsIGV4cGFuZCBjb21tZW50LCBhbmQgZG9u J3Qgb3ZlcndyaXRlIHJjIGlmIHhjX3hzcGxpY2VfdXBsb2FkIGZhaWxlZC4KdjQ6CiAtIFJlbW92 ZSBMT0FERUQgc3RhdGUuIE9ubHkgaGF2ZSBDSEVDS0VEIHN0YXRlLgotLS0KLS0tCiAuZ2l0aWdu b3JlICAgICAgICAgICAgICAgfCAgIDEgKwogdG9vbHMvbWlzYy9NYWtlZmlsZSAgICAgIHwgICA0 ICsKIHRvb2xzL21pc2MveGVuLXhzcGxpY2UuYyB8IDQ2MyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0NjggaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL21pc2MveGVuLXhzcGxpY2UuYwoKZGlmZiAt LWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGI0MDQ1M2UuLmI5Yzk1NTAgMTAw NjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTgxLDYgKzE4MSw3IEBA IHRvb2xzL21pc2MveGNfc2hhZG93CiB0b29scy9taXNjL3hlbl9jcHVwZXJmCiB0b29scy9taXNj L3hlbi1kZXRlY3QKIHRvb2xzL21pc2MveGVuLXRtZW0tbGlzdC1wYXJzZQordG9vbHMvbWlzYy94 ZW4teHNwbGljZQogdG9vbHMvbWlzYy94ZW5wZXJmCiB0b29scy9taXNjL3hlbnBtCiB0b29scy9t aXNjL3hlbi1odm1jdHgKZGlmZiAtLWdpdCBhL3Rvb2xzL21pc2MvTWFrZWZpbGUgYi90b29scy9t aXNjL01ha2VmaWxlCmluZGV4IGEyZWYwZWMuLmUxOTU2ZjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21p c2MvTWFrZWZpbGUKKysrIGIvdG9vbHMvbWlzYy9NYWtlZmlsZQpAQCAtMzEsNiArMzEsNyBAQCBJ TlNUQUxMX1NCSU4gICAgICAgICAgICAgICAgICAgKz0geGVubG9ja3Byb2YKIElOU1RBTExfU0JJ TiAgICAgICAgICAgICAgICAgICArPSB4ZW5wZXJmCiBJTlNUQUxMX1NCSU4gICAgICAgICAgICAg ICAgICAgKz0geGVucG0KIElOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4ZW53YXRj aGRvZ2QKK0lOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4ZW4teHNwbGljZQogSU5T VEFMTF9TQklOICs9ICQoSU5TVEFMTF9TQklOLXkpCiAKICMgRXZlcnl0aGluZyB0byBiZSBpbnN0 YWxsZWQgaW4gYSBwcml2YXRlIGJpbi8KQEAgLTk5LDYgKzEwMCw5IEBAIHhlbi1tZm5kdW1wOiB4 ZW4tbWZuZHVtcC5vCiB4ZW53YXRjaGRvZ2Q6IHhlbndhdGNoZG9nZC5vCiAJJChDQykgJChMREZM QUdTKSAtbyAkQCAkPCAkKExETElCU19saWJ4ZW5jdHJsKSAkKEFQUEVORF9MREZMQUdTKQogCit4 ZW4teHNwbGljZTogeGVuLXhzcGxpY2UubworCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChM RExJQlNfbGlieGVuY3RybCkgJChBUFBFTkRfTERGTEFHUykKKwogeGVuLWxvd21lbWQ6IHhlbi1s b3dtZW1kLm8KIAkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQoTERMSUJTX2xpYnhlbmV2dGNo bikgJChMRExJQlNfbGlieGVuY3RybCkgJChMRExJQlNfbGlieGVuc3RvcmUpICQoQVBQRU5EX0xE RkxBR1MpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL21pc2MveGVuLXhzcGxpY2UuYyBiL3Rvb2xzL21p c2MveGVuLXhzcGxpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjky MjhlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbWlzYy94ZW4teHNwbGljZS5jCkBAIC0wLDAg KzEsNDYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNsZSBhbmQvb3IgaXRzIGFm ZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+ CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8eGVuY3RybC5o PgorI2luY2x1ZGUgPHhlbnN0b3JlLmg+CisKK3N0YXRpYyB4Y19pbnRlcmZhY2UgKnhjaDsKKwor dm9pZCBzaG93X2hlbHAodm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAg ICJ4ZW4teHNwbGljZTogWHNwbGljZSB0ZXN0IHRvb2xcbiIKKyAgICAgICAgICAgICJVc2FnZTog eGVuLXhzcGxpY2UgPGNvbW1hbmQ+IFthcmdzXVxuIgorICAgICAgICAgICAgIiA8bmFtZT4gQW4g dW5pcXVlIG5hbWUgb2YgcGF5bG9hZC4gVXAgdG8gJWQgY2hhcmFjdGVycy5cbiIKKyAgICAgICAg ICAgICJDb21tYW5kczpcbiIKKyAgICAgICAgICAgICIgIGhlbHAgICAgICAgICAgICAgICAgICAg ZGlzcGxheSB0aGlzIGhlbHBcbiIKKyAgICAgICAgICAgICIgIHVwbG9hZCA8bmFtZT4gPGZpbGU+ ICAgdXBsb2FkIGZpbGUgPGZpbGU+IHdpdGggPG5hbWU+IG5hbWVcbiIKKyAgICAgICAgICAgICIg IGxpc3QgICAgICAgICAgICAgICAgICAgbGlzdCBwYXlsb2FkcyB1cGxvYWRlZC5cbiIKKyAgICAg ICAgICAgICIgIGFwcGx5IDxuYW1lPiAgICAgICAgICAgYXBwbHkgPG5hbWU+IHBhdGNoLlxuIgor ICAgICAgICAgICAgIiAgcmV2ZXJ0IDxuYW1lPiAgICAgICAgICByZXZlcnQgbmFtZSA8bmFtZT4g cGF0Y2guXG4iCisgICAgICAgICAgICAiICByZXBsYWNlIDxuYW1lPiAgICAgICAgIGFwcGx5IDxu YW1lPiBwYXRjaCBhbmQgcmV2ZXJ0IGFsbCBvdGhlcnMuXG4iCisgICAgICAgICAgICAiICB1bmxv YWQgPG5hbWU+ICAgICAgICAgIHVubG9hZCBuYW1lIDxuYW1lPiBwYXRjaC5cbiIKKyAgICAgICAg ICAgICIgIGxvYWQgIDxmaWxlPiAgICAgICAgICAgdXBsb2FkLCBjaGVjayBhbmQgYXBwbHkgPGZp bGU+LlxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIGlzIHRo ZSA8ZmlsZT4gbmFtZVxuIiwKKyAgICAgICAgICAgIFhFTl9YU1BMSUNFX05BTUVfU0laRSk7Cit9 CisKKy8qIHdyYXBwZXIgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgaGVscF9mdW5jKGludCBhcmdj LCBjaGFyICphcmd2W10pCit7CisgICAgc2hvd19oZWxwKCk7CisgICAgcmV0dXJuIDA7Cit9CisK KyNkZWZpbmUgQVJSQVlfU0laRShhKSAoc2l6ZW9mIChhKSAvIHNpemVvZiAoKGEpWzBdKSkKKwor c3RhdGljIGNvbnN0IGNoYXIgKnN0YXRlMnN0cih1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisjZGVm aW5lIFNUQVRFKHgpIFtYU1BMSUNFX1NUQVRFXyMjeF0gPSAjeAorICAgIHN0YXRpYyBjb25zdCBj aGFyICpjb25zdCBuYW1lc1tdID0geworICAgICAgICAgICAgU1RBVEUoQ0hFQ0tFRCksCisgICAg ICAgICAgICBTVEFURShBUFBMSUVEKSwKKyAgICB9OworI3VuZGVmIFNUQVRFCisgICAgaWYgKHN0 YXRlID49IEFSUkFZX1NJWkUobmFtZXMpIHx8ICFuYW1lc1tzdGF0ZV0pCisgICAgICAgIHJldHVy biAidW5rbm93biI7CisKKyAgICByZXR1cm4gbmFtZXNbc3RhdGVdOworfQorCisvKiBUaGlzIHZh bHVlIHdhcyBjaG9vc2VuIGFkaG9jLiBJdCBjb3VsZCBiZSA0MiB0b28uICovCisjZGVmaW5lIE1B WF9MRU4gMTEKK3N0YXRpYyBpbnQgbGlzdF9mdW5jKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7 CisgICAgdW5zaWduZWQgaW50IGlkeCwgZG9uZSwgbGVmdCwgaTsKKyAgICB4ZW5feHNwbGljZV9z dGF0dXNfdCAqaW5mbyA9IE5VTEw7CisgICAgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgdWludDMy X3QgKmxlbiA9IE5VTEw7CisgICAgaW50IHJjID0gRU5PTUVNOworCisgICAgaWYgKCBhcmdjICkK KyAgICB7CisgICAgICAgIHNob3dfaGVscCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor ICAgIGlkeCA9IGxlZnQgPSAwOworICAgIGluZm8gPSBtYWxsb2Moc2l6ZW9mKCppbmZvKSAqIE1B WF9MRU4pOworICAgIGlmICggIWluZm8gKQorICAgICAgICByZXR1cm4gcmM7CisgICAgbmFtZSA9 IG1hbGxvYyhzaXplb2YoKm5hbWUpICogWEVOX1hTUExJQ0VfTkFNRV9TSVpFICogTUFYX0xFTik7 CisgICAgaWYgKCAhbmFtZSApCisgICAgeworICAgICAgICBmcmVlKGluZm8pOworICAgICAgICBy ZXR1cm4gcmM7CisgICAgfQorICAgIGxlbiA9IG1hbGxvYyhzaXplb2YoKmxlbikgKiBNQVhfTEVO KTsKKyAgICBpZiAoICFsZW4gKSB7CisgICAgICAgIGZyZWUobmFtZSk7CisgICAgICAgIGZyZWUo aW5mbyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZG91dCwi IElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzXG4iCisgICAg ICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tXG4iKTsKKyAgICBkbyB7CisgICAgICAgIGRvbmUgPSAwOworICAgICAgICAv KiBUaGUgbWVtc2V0IGlzIGRvbmUgdG8gY2F0Y2ggZXJyb3JzLiAqLworICAgICAgICBtZW1zZXQo aW5mbywgJ0EnLCBzaXplb2YoKmluZm8pICogTUFYX0xFTik7CisgICAgICAgIG1lbXNldChuYW1l LCAnQicsIHNpemVvZigqbmFtZSAqIE1BWF9MRU4gKiBYRU5fWFNQTElDRV9OQU1FX1NJWkUpKTsK KyAgICAgICAgbWVtc2V0KGxlbiwgJ0MnLCBzaXplb2YoKmxlbikgKiBNQVhfTEVOKTsKKyAgICAg ICAgcmMgPSB4Y194c3BsaWNlX2xpc3QoeGNoLCBNQVhfTEVOLCBpZHgsIGluZm8sIG5hbWUsIGxl biwgJmRvbmUsICZsZWZ0KTsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxpc3QgJWQvJWQ6ICVkKCVzKSFcbiIsCisg ICAgICAgICAgICAgICAgICAgIGlkeCwgbGVmdCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGRv bmU7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBqOworICAgICAg ICAgICAgdWludDMyX3Qgc3o7CisgICAgICAgICAgICBjaGFyICpzdHI7CisKKyAgICAgICAgICAg IHN6ID0gbGVuW2ldOworICAgICAgICAgICAgc3RyID0gbmFtZSArIChpICogWEVOX1hTUExJQ0Vf TkFNRV9TSVpFKTsKKyAgICAgICAgICAgIGZvciAoIGogPSBzejsgaiA8IFhFTl9YU1BMSUNFX05B TUVfU0laRTsgaisrICkKKyAgICAgICAgICAgICAgICBzdHJbal0gPSAnXDAnOworCisgICAgICAg ICAgICBwcmludGYoIiUtNDBzfCAlcyIsIHN0ciwgc3RhdGUyc3RyKGluZm9baV0uc3RhdGUpKTsK KyAgICAgICAgICAgIGlmICggaW5mb1tpXS5yYyApCisgICAgICAgICAgICAgICAgcHJpbnRmKCIg KCVkLCAlcylcbiIsIC1pbmZvW2ldLnJjLCBzdHJlcnJvcigtaW5mb1tpXS5yYykpOworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHB1dHMoIiIpOworICAgICAgICB9CisgICAgICAg IGlkeCArPSBkb25lOworICAgIH0gd2hpbGUgKCBsZWZ0ICk7CisKKyAgICBmcmVlKG5hbWUpOwor ICAgIGZyZWUoaW5mbyk7CisgICAgZnJlZShsZW4pOworICAgIHJldHVybiByYzsKK30KKyN1bmRl ZiBNQVhfTEVOCisKK3N0YXRpYyBpbnQgZ2V0X25hbWUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwg Y2hhciAqbmFtZSkKK3sKKyAgICBzc2l6ZV90IGxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKyAgICBp ZiAoIGxlbiA+IFhFTl9YU1BMSUNFX05BTUVfU0laRSApCisgICAgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIklEIE1VU1QgYmUgJWQgY2hhcmFjdGVycyFcbiIsIFhFTl9YU1BMSUNFX05BTUVf U0laRSk7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gZXJybm87Cisg ICAgfQorICAgIC8qIERvbid0IHdhbnQgYW55IGZ1bm55IHN0cmluZ3MgZnJvbSB0aGUgc3RhY2su ICovCisgICAgbWVtc2V0KG5hbWUsIDAsIFhFTl9YU1BMSUNFX05BTUVfU0laRSk7CisgICAgc3Ry bmNweShuYW1lLCBhcmd2WzBdLCBsZW4pOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHVwbG9hZF9mdW5jKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgY2hhciAqZmlsZW5h bWU7CisgICAgY2hhciBuYW1lW1hFTl9YU1BMSUNFX05BTUVfU0laRV07CisgICAgaW50IGZkID0g MCwgcmM7CisgICAgc3RydWN0IHN0YXQgYnVmOworICAgIHVuc2lnbmVkIGNoYXIgKmZidWY7Cisg ICAgc3NpemVfdCBsZW47CisKKyAgICBpZiAoIGFyZ2MgIT0gMiApCisgICAgeworICAgICAgICBz aG93X2hlbHAoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICggZ2V0X25h bWUoYXJnYywgYXJndiwgbmFtZSkgKQorICAgICAgICByZXR1cm4gRUlOVkFMOworCisgICAgZmls ZW5hbWUgPSBhcmd2WzFdOworICAgIGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworICAg IGlmICggZmQgPCAwICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90 IG9wZW4gJXMsIGVycm9yOiAlZCglcylcbiIsCisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGVy cm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZXJybm87CisgICAgfQorICAg IGlmICggc3RhdChmaWxlbmFtZSwgJmJ1ZikgIT0gMCApCisgICAgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkNvdWxkIG5vdCBnZXQgcmlnaHQgc2l6ZSAlcywgZXJyb3I6ICVkKCVzKVxuIiwK KyAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAg ICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIGVycm5vOworICAgIH0KKworICAgIGxlbiA9 IGJ1Zi5zdF9zaXplOworICAgIGZidWYgPSBtbWFwKDAsIGxlbiwgUFJPVF9SRUFELCBNQVBfUFJJ VkFURSwgZmQsIDApOworICAgIGlmICggZmJ1ZiA9PSBNQVBfRkFJTEVEICkKKyAgICB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCJDb3VsZCBub3QgbWFwOiAlcywgZXJyb3I6ICVkKCVzKVxuIiwK KyAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAg ICAgIGNsb3NlIChmZCk7CisgICAgICAgIHJldHVybiBlcnJubzsKKyAgICB9CisgICAgcHJpbnRm KCJVcGxvYWRpbmcgJXMgKCV6dSBieXRlcylcbiIsIGZpbGVuYW1lLCBsZW4pOworICAgIHJjID0g eGNfeHNwbGljZV91cGxvYWQoeGNoLCBuYW1lLCBmYnVmLCBsZW4pOworICAgIGlmICggcmMgKQor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVwbG9hZCBmYWlsZWQ6ICVzLCBlcnJvcjogJWQoJXMp IVxuIiwKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7 CisKKyAgICBpZiAoIG11bm1hcCggZmJ1ZiwgbGVuKSApCisgICAgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkNvdWxkIG5vdCB1bm1hcCE/IGVycm9yOiAlZCglcykhXG4iLAorICAgICAgICAg ICAgICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBpZiAoICFyYyApCisgICAg ICAgICAgICByYyA9IGVycm5vOworICAgIH0KKyAgICBjbG9zZShmZCk7CisKKyAgICByZXR1cm4g cmM7Cit9CisKKy8qIFRoZXNlIE1VU1QgbWF0Y2ggdG8gdGhlICdhY3Rpb25fb3B0aW9uc1tdJyBh cnJheSBzbG90cy4gKi8KK2VudW0geworICAgIEFDVElPTl9BUFBMWSA9IDAsCisgICAgQUNUSU9O X1JFVkVSVCA9IDEsCisgICAgQUNUSU9OX1VOTE9BRCA9IDIsCisgICAgQUNUSU9OX1JFUExBQ0Ug PSAzLAorfTsKKworc3RydWN0IHsKKyAgICBpbnQgYWxsb3c7IC8qIFN0YXRlIGl0IG11c3QgYmUg aW4gdG8gY2FsbCBmdW5jdGlvbi4gKi8KKyAgICBpbnQgZXhwZWN0ZWQ7IC8qIFRoZSBzdGF0ZSB0 byBiZSBpbiBhZnRlciB0aGUgZnVuY3Rpb24uICovCisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAg ICBpbnQgKCpmdW5jdGlvbikoeGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUsIHVpbnQzMl90 IHRpbWVvdXQpOworICAgIHVuc2lnbmVkIGludCBleGVjdXRlZDsgLyogSGFzIHRoZSBmdW5jdGlv biBiZWVuIGNhbGxlZD8uICovCit9IGFjdGlvbl9vcHRpb25zW10gPSB7CisgICAgeyAgIC5hbGxv dyA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRCwKKyAgICAgICAgLmV4cGVjdGVkID0gWFNQTElDRV9T VEFURV9BUFBMSUVELAorICAgICAgICAubmFtZSA9ICJhcHBseSIsCisgICAgICAgIC5mdW5jdGlv biA9IHhjX3hzcGxpY2VfYXBwbHksCisgICAgfSwKKyAgICB7ICAgLmFsbG93ID0gWFNQTElDRV9T VEFURV9BUFBMSUVELAorICAgICAgICAuZXhwZWN0ZWQgPSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQs CisgICAgICAgIC5uYW1lID0gInJldmVydCIsCisgICAgICAgIC5mdW5jdGlvbiA9IHhjX3hzcGxp Y2VfcmV2ZXJ0LAorICAgIH0sCisgICAgeyAgIC5hbGxvdyA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tF RCwKKyAgICAgICAgLmV4cGVjdGVkID0gLUVOT0VOVCwKKyAgICAgICAgLm5hbWUgPSAidW5sb2Fk IiwKKyAgICAgICAgLmZ1bmN0aW9uID0geGNfeHNwbGljZV91bmxvYWQsCisgICAgfSwKKyAgICB7 ICAgLmFsbG93ID0gWFNQTElDRV9TVEFURV9DSEVDS0VELAorICAgICAgICAuZXhwZWN0ZWQgPSBY U1BMSUNFX1NUQVRFX0FQUExJRUQsCisgICAgICAgIC5uYW1lID0gInJlcGxhY2UiLAorICAgICAg ICAuZnVuY3Rpb24gPSB4Y194c3BsaWNlX3JlcGxhY2UsCisgICAgfSwKK307CisKKy8qIEdvIGFy b3VuZCAzMDAgKiAwLjEgc2Vjb25kcyA9IDMwIHNlY29uZHMuICovCisjZGVmaW5lIFJFVFJJRVMg MzAwCisvKiBha2EgMC4xIHNlY29uZCAqLworI2RlZmluZSBERUxBWSAxMDAwMDAKKworaW50IGFj dGlvbl9mdW5jKGludCBhcmdjLCBjaGFyICphcmd2W10sIHVuc2lnbmVkIGludCBpZHgpCit7Cisg ICAgY2hhciBuYW1lW1hFTl9YU1BMSUNFX05BTUVfU0laRV07CisgICAgaW50IHJjLCBvcmlnaW5h bF9zdGF0ZTsKKyAgICB4ZW5feHNwbGljZV9zdGF0dXNfdCBzdGF0dXM7CisgICAgdW5zaWduZWQg aW50IHJldHJ5ID0gMDsKKworICAgIGlmICggYXJnYyAhPSAxICkKKyAgICB7CisgICAgICAgIHNo b3dfaGVscCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBpZHggPj0g QVJSQVlfU0laRShhY3Rpb25fb3B0aW9ucykgKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBp ZiAoIGdldF9uYW1lKGFyZ2MsIGFyZ3YsIG5hbWUpICkKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsK KworICAgIC8qIENoZWNrIGluaXRpYWwgc3RhdHVzLiAqLworICAgIHJjID0geGNfeHNwbGljZV9n ZXQoeGNoLCBuYW1lLCAmc3RhdHVzKTsKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCAiJXMgZmFpbGVkIHRvIGdldCBzdGF0dXMgKHJjPSVkLCAlcykhXG4iLAor ICAgICAgICAgICAgICAgIG5hbWUsIC1yYywgc3RyZXJyb3IoLXJjKSk7CisgICAgICAgIHJldHVy biAtMTsKKyAgICB9CisgICAgaWYgKCBzdGF0dXMucmMgPT0gLUVBR0FJTiApCisgICAgeworICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGZhaWxlZC4gT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJv Z3Jlc3NcbiIsIG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBz dGF0dXMuc3RhdGUgPT0gYWN0aW9uX29wdGlvbnNbaWR4XS5leHBlY3RlZCApCisgICAgeworICAg ICAgICBwcmludGYoIk5vIGFjdGlvbiBuZWVkZWRcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAg ICB9CisKKyAgICAvKiBQZXJmb3JtIGFjdGlvbi4gKi8KKyAgICBpZiAoIGFjdGlvbl9vcHRpb25z W2lkeF0uYWxsb3cgJiBzdGF0dXMuc3RhdGUgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJQZXJm b3JtaW5nICVzOiIsIGFjdGlvbl9vcHRpb25zW2lkeF0ubmFtZSk7CisgICAgICAgIHJjID0gYWN0 aW9uX29wdGlvbnNbaWR4XS5mdW5jdGlvbih4Y2gsIG5hbWUsIDApOworICAgICAgICBpZiAoIHJj ICkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBmYWlsZWQgd2l0 aCAlZCglcylcbiIsIG5hbWUsIC1yYywgc3RyZXJyb3IoLXJjKSk7CisgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHJpbnRm KCIlczogaW4gd3Jvbmcgc3RhdGUgKCVzKSwgZXhwZWN0ZWQgKCVzKVxuIiwKKyAgICAgICAgICAg ICAgIG5hbWUsIHN0YXRlMnN0cihzdGF0dXMuc3RhdGUpLAorICAgICAgICAgICAgICAgc3RhdGUy c3RyKGFjdGlvbl9vcHRpb25zW2lkeF0uZXhwZWN0ZWQpKTsKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICAgIG9yaWdpbmFsX3N0YXRlID0gc3RhdHVzLnN0YXRlOworICAgIGRvIHsKKyAg ICAgICAgcmMgPSB4Y194c3BsaWNlX2dldCh4Y2gsIG5hbWUsICZzdGF0dXMpOworICAgICAgICBp ZiAoIHJjICkKKyAgICAgICAgeworICAgICAgICAgICAgcmMgPSAtZXJybm87CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggc3RhdHVzLnN0YXRlICE9IG9yaWdp bmFsX3N0YXRlICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIHN0YXR1cy5yYyAm JiBzdGF0dXMucmMgIT0gLUVBR0FJTiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gc3Rh dHVzLnJjOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYo Ii4iKTsKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIHVzbGVlcChERUxBWSk7Cisg ICAgfSB3aGlsZSAoICsrcmV0cnkgPCBSRVRSSUVTICk7CisKKyAgICBpZiAoIHJldHJ5ID49IFJF VFJJRVMgKQorICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogT3BlcmF0aW9uIGRp ZG4ndCBjb21wbGV0ZSBhZnRlciAzMCBzZWNvbmRzLlxuIiwgbmFtZSk7CisgICAgICAgIHJldHVy biAtMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCByYyA9PSAwICkKKyAg ICAgICAgICAgIHJjID0gc3RhdHVzLnN0YXRlOworCisgICAgICAgIGlmICggYWN0aW9uX29wdGlv bnNbaWR4XS5leHBlY3RlZCA9PSByYyApCisgICAgICAgICAgICBwcmludGYoIiBjb21wbGV0ZWRc biIpOworICAgICAgICBlbHNlIGlmICggcmMgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICIlcyBmYWlsZWQgd2l0aCAlZCglcylcbiIsIG5hbWUsIC1yYywgc3Ry ZXJyb3IoLXJjKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAg ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbiB3cm9u ZyBzdGF0ZSAoJXMpLCBleHBlY3RlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgbmFtZSwgc3Rh dGUyc3RyKHJjKSwKKyAgICAgICAgICAgICAgIHN0YXRlMnN0cihhY3Rpb25fb3B0aW9uc1tpZHhd LmV4cGVjdGVkKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2FkX2Z1bmMoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKK3sKKyAgICBpbnQgcmM7CisgICAgY2hhciAqbmV3X2FyZ3ZbMl07CisgICAgY2hh ciAqcGF0aCwgKm5hbWUsICpsYXN0ZG90OworCisgICAgaWYgKCBhcmdjICE9IDEgKQorICAgIHsK KyAgICAgICAgc2hvd19oZWxwKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgLyog PGZpbGU+ICovCisgICAgbmV3X2FyZ3ZbMV0gPSBhcmd2WzBdOworCisgICAgLyogU3ludGhlc2l6 ZSB0aGUgPGlkPiAqLworICAgIHBhdGggPSBzdHJkdXAoYXJndlswXSk7CisKKyAgICBuYW1lID0g YmFzZW5hbWUocGF0aCk7CisgICAgbGFzdGRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKyAgICBp ZiAoIGxhc3Rkb3QgIT0gTlVMTCApCisgICAgICAgICpsYXN0ZG90ID0gJ1wwJzsKKyAgICBuZXdf YXJndlswXSA9IG5hbWU7CisKKyAgICByYyA9IHVwbG9hZF9mdW5jKDIgLyogPGlkPiA8ZmlsZT4g Ki8sIG5ld19hcmd2KTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAg cmMgPSBhY3Rpb25fZnVuYygxIC8qIG9ubHkgPGlkPiAqLywgbmV3X2FyZ3YsIEFDVElPTl9BUFBM WSk7CisgICAgaWYgKCByYyApCisgICAgICAgIGFjdGlvbl9mdW5jKDEsIG5ld19hcmd2LCBBQ1RJ T05fVU5MT0FEKTsKKworICAgIGZyZWUocGF0aCk7CisgICAgcmV0dXJuIHJjOworfQorCisvKgor ICogVGhlc2UgYXJlIGFsc28gZnVuY3Rpb25zIGluIGFjdGlvbl9vcHRpb25zIHRoYXQgYXJlIGNh bGxlZCBpbiBjYXNlCisgKiBub25lIG9mIHRoZSBvbmVzIGluIG1haW5fb3B0aW9ucyBtYXRjaC4K KyAqLworc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGludCAoKmZ1bmN0aW9u KShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKK30gbWFpbl9vcHRpb25zW10gPSB7CisgICAgeyAi aGVscCIsIGhlbHBfZnVuYyB9LAorICAgIHsgImxpc3QiLCBsaXN0X2Z1bmMgfSwKKyAgICB7ICJ1 cGxvYWQiLCB1cGxvYWRfZnVuYyB9LAorICAgIHsgImxvYWQiLCBsb2FkX2Z1bmMgfSwKK307CisK K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGksIGosIHJldDsK KworICAgIGlmICggYXJnYyAgPD0gMSApCisgICAgeworICAgICAgICBzaG93X2hlbHAoKTsKKyAg ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRSht YWluX29wdGlvbnMpOyBpKysgKQorICAgICAgICBpZiAoIXN0cm5jbXAobWFpbl9vcHRpb25zW2ld Lm5hbWUsIGFyZ3ZbMV0sIHN0cmxlbihhcmd2WzFdKSkpCisgICAgICAgICAgICBicmVhazsKKwor ICAgIGlmICggaSA9PSBBUlJBWV9TSVpFKG1haW5fb3B0aW9ucykgKQorICAgIHsKKyAgICAgICAg Zm9yICggaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFjdGlvbl9vcHRpb25zKTsgaisrICkKKyAgICAg ICAgICAgIGlmICghc3RybmNtcChhY3Rpb25fb3B0aW9uc1tqXS5uYW1lLCBhcmd2WzFdLCBzdHJs ZW4oYXJndlsxXSkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggaiA9 PSBBUlJBWV9TSVpFKGFjdGlvbl9vcHRpb25zKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiVW5yZWNvZ25pc2VkIGNvbW1hbmQgJyVzJyAtLSB0cnkgIgorICAgICAg ICAgICAgICAgICAgICIneGVuLXhzcGxpY2UgaGVscCdcbiIsIGFyZ3ZbMV0pOworICAgICAgICAg ICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgaiA9IEFSUkFZX1NJ WkUoYWN0aW9uX29wdGlvbnMpOworCisgICAgeGNoID0geGNfaW50ZXJmYWNlX29wZW4oMCwwLDAp OworICAgIGlmICggIXhjaCApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxl ZCB0byBnZXQgdGhlIGhhbmRsZXJcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg ICBpZiAoIGkgPT0gQVJSQVlfU0laRShtYWluX29wdGlvbnMpICkKKyAgICAgICAgcmV0ID0gYWN0 aW9uX2Z1bmMoYXJnYyAtMiwgYXJndiArIDIsIGopOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0g bWFpbl9vcHRpb25zW2ldLmZ1bmN0aW9uKGFyZ2MgLTIsIGFyZ3YgKyAyKTsKKworICAgIHhjX2lu dGVyZmFjZV9jbG9zZSh4Y2gpOworCisgICAgcmV0dXJuICEhcmV0OworfQorCisvKgorICogTG9j YWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1i YXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmls CisgKiBFbmQ6CisgKi8KLS0gCjIuNS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK