From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v4 9/9] livepach: Add .livepatch.hooks functions and test-case Date: Tue, 23 Aug 2016 22:22:12 -0400 Message-ID: <1472005332-32207-10-git-send-email-konrad.wilk@oracle.com> References: <1472005332-32207-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bcNqD-00037P-E4 for xen-devel@lists.xenproject.org; Wed, 24 Aug 2016 02:22:57 +0000 In-Reply-To: <1472005332-32207-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 Cc: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org RnJvbTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+CgpBZGQgaG9v ayBmdW5jdGlvbnMgd2hpY2ggcnVuIGR1cmluZyBwYXRjaCBhcHBseSBhbmQgcGF0Y2ggcmV2ZXJ0 LgpIb29rIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBsaXZlcGF0Y2ggcGF5bG9hZHMgdG8gbWFuaXB1 bGF0ZSBkYXRhCnN0cnVjdHVyZXMgZHVyaW5nIHBhdGNoaW5nLCBldGMuCgpPbmUgdXNlIGNhc2Ug aXMgdGhlIFhTQTkxLiBBcyBNYXJ0aW4gbWVudGlvbnMgaXQ6CiJJZiB3ZSBoYXZlIHNoYWRvdyB2 YXJpYWJsZXMsIHdlIGFsc28gbmVlZCBhbiB1bmxvYWQgaG9vayB0byBnYXJiYWdlCmNvbGxlY3Qg YWxsIHRoZSB2YXJpYWJsZXMgaW50cm9kdWNlZCBieSBhIGhvdHBhdGNoIHRvIHByZXZlbnQgbWVt b3J5CmxlYWtzLiAgUG90ZW50aWFsbHksIHdlIGFsc28gd2FudCB0byBwcmUtcmVzZXJ2ZSBtZW1v cnkgZm9yIHN0YXRpYyBvcgpleGlzdGluZyBkeW5hbWljIG9iamVjdHMgaW4gdGhlIGxvYWQtaG9v ayBpbnN0ZWFkIG9mIG9uIHRoZSBmbHkuCgpGb3IgdGVzdGluZyBhbmQgZGVidWdnaW5nLCB2YXJp b3VzIGFwcGxpY2F0aW9ucyBhcmUgcG9zc2libGUuCgpJbiBnZW5lcmFsLCB0aGUgaG9va3MgcHJv dmlkZSBmbGV4aWJpbGl0eSB3aGVuIGhhdmluZyB0byBkZWFsIHdpdGgKdW5mb3Jlc2VlbiBjYXNl cywgYnV0IHRoZWlyIGFwcGxpY2F0aW9uIHNob3VsZCBiZSByYXJlbHkgcmVxdWlyZWQgKDwKMTAl KS4iCgpGdXJ0aGVybW9yZSBpbmNsdWRlIGEgdGVzdC1jYXNlIGZvciBpdC4KClNpZ25lZC1vZmYt Ynk6IFJvc3MgTGFnZXJ3YWxsIDxyb3NzLmxhZ2Vyd2FsbEBjaXRyaXguY29tPgpTaWduZWQtb2Zm LWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CgotLS0K Q2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+CkNjOiBHZW9yZ2Ug RHVubGFwIDxHZW9yZ2UuRHVubGFwQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFu LmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNv bT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IFRp bSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4K CnYwLjQuLnYwLjExOiBEZWZlcmVkIGZvciB2NC44CnYwLjEyOiBzL3hzcGxpY2UvbGl2ZXBhdGNo LwoKdjM6IENsYXJpZnkgdGhlIGNvbW1lbnRzIGFib3V0IHNwaW5fZGVidWdfZW5hYmxlCiAgICBS ZW5hbWUgb25lIG9mIHRoZSBob29rcyB0byBsb3dlci1jYXNlIChaLT56KSB0byBndWFyYW50ZWUg aXQgYmVpbmcKICAgIGNhbGxlZCBsYXN0LgogICAgTGVhcm5lZCBhIGxvdCBvZiBhYm91dCAnY29u c3QnCnY0OiBEbyB0aGUgYWN0dWFsIGNvbnN0IG9mIHRoZSBob29rcy4KICAgIFJlbW92ZSB0aGUg cmVxdWlyZW1lbnQgZm9yIHRoZSB0ZXN0cy1jYXNlIGhvb2tzIHRvIGJlIHNvcnRlZAogICAgKHRo ZXkgbmV2ZXIgd2VyZSB0byBzdGFydCB3aXRoKS4KICAgIEZpeCB1cCB0aGUgY29tbWVudCBhYm91 dCBzcGluX2RlYnVnX2VuYWJsZSBzbyBtb3JlLgotLS0KIGRvY3MvbWlzYy9saXZlcGF0Y2gubWFy a2Rvd24gICAgICAgIHwgMjMgKysrKysrKysrKysrKysrKysKIHhlbi9hcmNoL3g4Ni90ZXN0L3hl bl9oZWxsb193b3JsZC5jIHwgMzQgKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2NvbW1v bi9saXZlcGF0Y2guYyAgICAgICAgICAgICAgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystCiB4ZW4vaW5jbHVkZS94ZW4vbGl2ZXBhdGNoX3BheWxvYWQuaCB8IDQ5ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxNTUg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNs dWRlL3hlbi9saXZlcGF0Y2hfcGF5bG9hZC5oCgpkaWZmIC0tZ2l0IGEvZG9jcy9taXNjL2xpdmVw YXRjaC5tYXJrZG93biBiL2RvY3MvbWlzYy9saXZlcGF0Y2gubWFya2Rvd24KaW5kZXggYWQwZGYy Ni4uOWY1MmFlYiAxMDA2NDQKLS0tIGEvZG9jcy9taXNjL2xpdmVwYXRjaC5tYXJrZG93bgorKysg Yi9kb2NzL21pc2MvbGl2ZXBhdGNoLm1hcmtkb3duCkBAIC0zNDMsNiArMzQzLDEzIEBAIFdoZW4g cmV2ZXJ0aW5nIGEgcGF0Y2gsIHRoZSBoeXBlcnZpc29yIGl0ZXJhdGVzIG92ZXIgZWFjaCBgbGl2 ZXBhdGNoX2Z1bmNgCiBhbmQgdGhlIGNvcmUgY29kZSBjb3BpZXMgdGhlIGRhdGEgZnJvbSB0aGUg dW5kbyBidWZmZXIgKHByaXZhdGUgaW50ZXJuYWwgY29weSkKIHRvIGBvbGRfYWRkcmAuCiAKK0l0 IG9wdGlvbmFsbHkgbWF5IGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2YgZnVuY3Rpb25zIHRvIGJlIGNh bGxlZCByaWdodCBiZWZvcmUKK2JlaW5nIGFwcGxpZWQgYW5kIGFmdGVyIGJlaW5nIHJldmVydGVk OgorCisgKiBgLmxpdmVwYXRjaC5ob29rcy5sb2FkYCAtIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHBv aW50ZXJzLgorICogYC5saXZlcGF0Y2guaG9va3MudW5sb2FkYCAtIGFuIGFycmF5IG9mIGZ1bmN0 aW9uIHBvaW50ZXJzLgorCisKICMjIyBFeGFtcGxlIG9mIC5saXZlcGF0Y2guZnVuY3MKIAogQSBz aW1wbGUgZXhhbXBsZSBvZiB3aGF0IGEgcGF5bG9hZCBmaWxlIGNhbiBiZToKQEAgLTM4MCw2ICsz ODcsMjIgQEAgc3RydWN0IGxpdmVwYXRjaF9mdW5jIGxpdmVwYXRjaF9oZWxsb193b3JsZCA9IHsK IAogQ29kZSBtdXN0IGJlIGNvbXBpbGVkIHdpdGggLWZQSUMuCiAKKyMjIyAubGl2ZXBhdGNoLmhv b2tzLmxvYWQgYW5kIC5saXZlcGF0Y2guaG9va3MudW5sb2FkCisKK1RoaXMgc2VjdGlvbiBjb250 YWlucyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycyB0byBiZSBleGVjdXRlZAorYmVmb3Jl IHBheWxvYWQgaXMgYmVpbmcgYXBwbGllZCAoLmxpdmVwYXRjaC5mdW5jcykgb3IgYWZ0ZXIgcmV2 ZXJ0aW5nCit0aGUgcGF5bG9hZC4gVGhpcyBpcyB1c2VmdWwgdG8gcHJlcGFyZSBkYXRhIHN0cnVj dHVyZXMgdGhhdCBuZWVkIHRvCitiZSBtb2RpZmllZCBwYXRjaGluZy4KKworRWFjaCBlbnRyeSBp biB0aGlzIGFycmF5IGlzIGVpZ2h0IGJ5dGVzLgorCitUaGUgdHlwZSBkZWZpbml0aW9uIG9mIHRo ZSBmdW5jdGlvbiBhcmUgYXMgZm9sbG93OgorCis8cHJlPgordHlwZWRlZiB2b2lkICgqbGl2ZXBh dGNoX2xvYWRjYWxsX3QpKHZvaWQpOyAgCit0eXBlZGVmIHZvaWQgKCpsaXZlcGF0Y2hfdW5sb2Fk Y2FsbF90KSh2b2lkKTsgICAKKzwvcHJlPgorCiAjIyMgLmxpdmVwYXRjaC5kZXBlbmRzIGFuZCAu bm90ZS5nbnUuYnVpbGQtaWQKIAogVG8gc3VwcG9ydCBkZXBlbmRlbmNpZXMgY2hlY2tpbmcgYW5k IHNhZmUgbG9hZGluZyAodG8gbG9hZCB0aGUKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni90ZXN0 L3hlbl9oZWxsb193b3JsZC5jIGIveGVuL2FyY2gveDg2L3Rlc3QveGVuX2hlbGxvX3dvcmxkLmMK aW5kZXggNDIyYmRmMS4uY2I1ZTI3YSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3Rlc3QveGVu X2hlbGxvX3dvcmxkLmMKKysrIGIveGVuL2FyY2gveDg2L3Rlc3QveGVuX2hlbGxvX3dvcmxkLmMK QEAgLTQsMTQgKzQsNDggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8 eGVuL2xpYi5oPgogI2luY2x1ZGUgPHhlbi90eXBlcy5oPgogI2luY2x1ZGUgPHhlbi92ZXJzaW9u Lmg+CiAjaW5jbHVkZSA8eGVuL2xpdmVwYXRjaC5oPgorI2luY2x1ZGUgPHhlbi9saXZlcGF0Y2hf cGF5bG9hZC5oPgogCiAjaW5jbHVkZSA8cHVibGljL3N5c2N0bC5oPgogCiBzdGF0aWMgY2hhciBo ZWxsb193b3JsZF9wYXRjaF90aGlzX2ZuY1tdID0gInhlbl9leHRyYV92ZXJzaW9uIjsKIGV4dGVy biBjb25zdCBjaGFyICp4ZW5faGVsbG9fd29ybGQodm9pZCk7CitzdGF0aWMgdW5zaWduZWQgaW50 IGNudDsKKworc3RhdGljIHZvaWQgYXBwbHlfaG9vayh2b2lkKQoreworICAgIHByaW50ayhLRVJO X0RFQlVHICJIb29rIGV4ZWN1dGluZy5cbiIpOworfQorCitzdGF0aWMgdm9pZCByZXZlcnRfaG9v ayh2b2lkKQoreworICAgIHByaW50ayhLRVJOX0RFQlVHICJIb29rIHVubG9hZGVkLlxuIik7Cit9 CisKK3N0YXRpYyB2b2lkICBoaV9mdW5jKHZvaWQpCit7CisgICAgcHJpbnRrKEtFUk5fREVCVUcg IiVzOiBIaSEgKGNhbGxlZCAldSB0aW1lcylcbiIsIF9fZnVuY19fLCArK2NudCk7Cit9OworCitz dGF0aWMgdm9pZCBjaGVja19mbmModm9pZCkKK3sKKyAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6 IEhpIGZ1bmMgY2FsbGVkICV1IHRpbWVzXG4iLCBfX2Z1bmNfXywgY250KTsKKyAgICBCVUdfT04o Y250ID09IDAgfHwgY250ID4gMik7Cit9CisKK0xJVkVQQVRDSF9MT0FEX0hPT0soYXBwbHlfaG9v ayk7CitMSVZFUEFUQ0hfVU5MT0FEX0hPT0socmV2ZXJ0X2hvb2spOworCisvKiBJbWJhbGFuY2Ug aGVyZS4gVHdvIGxvYWQgYW5kIHRocmVlIHVubG9hZC4gKi8KKworTElWRVBBVENIX0xPQURfSE9P SyhoaV9mdW5jKTsKK0xJVkVQQVRDSF9VTkxPQURfSE9PSyhoaV9mdW5jKTsKKworTElWRVBBVENI X1VOTE9BRF9IT09LKGNoZWNrX2ZuYyk7CiAKIHN0cnVjdCBsaXZlcGF0Y2hfZnVuYyBfX3NlY3Rp b24oIi5saXZlcGF0Y2guZnVuY3MiKSBsaXZlcGF0Y2hfeGVuX2hlbGxvX3dvcmxkID0gewogICAg IC52ZXJzaW9uID0gTElWRVBBVENIX1BBWUxPQURfVkVSU0lPTiwKZGlmZiAtLWdpdCBhL3hlbi9j b21tb24vbGl2ZXBhdGNoLmMgYi94ZW4vY29tbW9uL2xpdmVwYXRjaC5jCmluZGV4IGRkMjRhMDcu LjUyOGMwYzkgMTAwNjQ0Ci0tLSBhL3hlbi9jb21tb24vbGl2ZXBhdGNoLmMKKysrIGIveGVuL2Nv bW1vbi9saXZlcGF0Y2guYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPHhlbi93YWl0Lmg+ CiAjaW5jbHVkZSA8eGVuL2xpdmVwYXRjaF9lbGYuaD4KICNpbmNsdWRlIDx4ZW4vbGl2ZXBhdGNo Lmg+CisjaW5jbHVkZSA8eGVuL2xpdmVwYXRjaF9wYXlsb2FkLmg+CiAKICNpbmNsdWRlIDxhc20v ZXZlbnQuaD4KIApAQCAtNzMsNyArNzQsMTEgQEAgc3RydWN0IHBheWxvYWQgewogICAgIHZvaWQg Kipic3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAuYnNzJ3Mgb2YgdGhlIHBheWxvYWQu ICovCiAgICAgc2l6ZV90ICpic3Nfc2l6ZTsgICAgICAgICAgICAgICAgICAgIC8qIGFuZCB0aGVp ciBzaXplcy4gKi8KICAgICBzaXplX3Qgbl9ic3M7ICAgICAgICAgICAgICAgICAgICAgICAgLyog U2l6ZSBvZiB0aGUgYXJyYXkuICovCi0gICAgY2hhciBuYW1lW1hFTl9MSVZFUEFUQ0hfTkFNRV9T SVpFXTsgLyogTmFtZSBvZiBpdC4gKi8KKyAgICBsaXZlcGF0Y2hfbG9hZGNhbGxfdCAqY29uc3Qg KmxvYWRfZnVuY3M7ICAgLyogVGhlIGFycmF5IG9mIGZ1bmNzIHRvIGNhbGwgYWZ0ZXIgKi8KKyAg ICBsaXZlcGF0Y2hfdW5sb2FkY2FsbF90ICpjb25zdCAqdW5sb2FkX2Z1bmNzOy8qIGxvYWQgYW5k IHVubG9hZCBvZiB0aGUgcGF5bG9hZC4gKi8KKyAgICB1bnNpZ25lZCBpbnQgbl9sb2FkX2Z1bmNz OyAgICAgICAgICAgLyogTnIgb2YgdGhlIGZ1bmNzIHRvIGxvYWQgYW5kIGV4ZWN1dGUuICovCisg ICAgdW5zaWduZWQgaW50IG5fdW5sb2FkX2Z1bmNzOyAgICAgICAgIC8qIE5yIG9mIGZ1bmNzIHRv IGNhbGwgZHVydW5nIHVubG9hZC4gKi8KKyAgICBjaGFyIG5hbWVbWEVOX0xJVkVQQVRDSF9OQU1F X1NJWkVdOyAgLyogTmFtZSBvZiBpdC4gKi8KIH07CiAKIC8qIERlZmluZXMgYW4gb3V0c3RhbmRp bmcgcGF0Y2hpbmcgYWN0aW9uLiAqLwpAQCAtNTgzLDYgKzU4OCwyNSBAQCBzdGF0aWMgaW50IHBy ZXBhcmVfcGF5bG9hZChzdHJ1Y3QgcGF5bG9hZCAqcGF5bG9hZCwKICAgICAgICAgICAgIHJldHVy biByYzsKICAgICB9CiAKKyAgICBzZWMgPSBsaXZlcGF0Y2hfZWxmX3NlY19ieV9uYW1lKGVsZiwg Ii5saXZlcGF0Y2guaG9va3MubG9hZCIpOworICAgIGlmICggc2VjICkKKyAgICB7CisgICAgICAg IGlmICggc2VjLT5zZWMtPnNoX3NpemUgJSBzaXplb2YoKnBheWxvYWQtPmxvYWRfZnVuY3MpICkK KyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgIHBheWxvYWQtPmxvYWRfZnVu Y3MgPSBzZWMtPmxvYWRfYWRkcjsKKyAgICAgICAgcGF5bG9hZC0+bl9sb2FkX2Z1bmNzID0gc2Vj LT5zZWMtPnNoX3NpemUgLyBzaXplb2YoKnBheWxvYWQtPmxvYWRfZnVuY3MpOworICAgIH0KKwor ICAgIHNlYyA9IGxpdmVwYXRjaF9lbGZfc2VjX2J5X25hbWUoZWxmLCAiLmxpdmVwYXRjaC5ob29r cy51bmxvYWQiKTsKKyAgICBpZiAoIHNlYyApCisgICAgeworICAgICAgICBpZiAoIHNlYy0+c2Vj LT5zaF9zaXplICUgc2l6ZW9mKCpwYXlsb2FkLT51bmxvYWRfZnVuY3MpICkKKyAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOworCisgICAgICAgIHBheWxvYWQtPnVubG9hZF9mdW5jcyA9IHNlYy0+ bG9hZF9hZGRyOworICAgICAgICBwYXlsb2FkLT5uX3VubG9hZF9mdW5jcyA9IHNlYy0+c2VjLT5z aF9zaXplIC8gc2l6ZW9mKCpwYXlsb2FkLT51bmxvYWRfZnVuY3MpOworICAgIH0KICAgICBzZWMg PSBsaXZlcGF0Y2hfZWxmX3NlY19ieV9uYW1lKGVsZiwgRUxGX0JVSUxEX0lEX05PVEUpOwogICAg IGlmICggc2VjICkKICAgICB7CkBAIC0xMDcxLDYgKzEwOTUsMTggQEAgc3RhdGljIGludCBhcHBs eV9wYXlsb2FkKHN0cnVjdCBwYXlsb2FkICpkYXRhKQogCiAgICAgYXJjaF9saXZlcGF0Y2hfcXVp ZXNjZSgpOwogCisgICAgLyoKKyAgICAgKiBTaW5jZSB3ZSBhcmUgcnVubmluZyB3aXRoIElSUXMg ZGlzYWJsZWQgYW5kIHRoZSBob29rcyBtYXkgY2FsbCBjb21tb24KKyAgICAgKiBjb2RlIC0gd2hp Y2ggZXhwZWN0cyBjZXJ0YWluIHNwaW5sb2NrcyB0byBydW4gd2l0aCBJUlFzIGVuYWJsZWQgLSB3 ZQorICAgICAqIHRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIHNwaW4gbG9ja3MgSVJRIHN0YXRlIGNo ZWNrcy4KKyAgICAgKi8KKyAgICBzcGluX2RlYnVnX2Rpc2FibGUoKTsKKyAgICBmb3IgKCBpID0g MDsgaSA8IGRhdGEtPm5fbG9hZF9mdW5jczsgaSsrICkKKyAgICAgICAgZGF0YS0+bG9hZF9mdW5j c1tpXSgpOworICAgIHNwaW5fZGVidWdfZW5hYmxlKCk7CisKKyAgICBBU1NFUlQoIWxvY2FsX2ly cV9pc19lbmFibGVkKCkpOworCiAgICAgZm9yICggaSA9IDA7IGkgPCBkYXRhLT5uZnVuY3M7IGkr KyApCiAgICAgICAgIGFyY2hfbGl2ZXBhdGNoX2FwcGx5X2ptcCgmZGF0YS0+ZnVuY3NbaV0pOwog CkBAIC0xMDk3LDYgKzExMzMsMTggQEAgc3RhdGljIGludCByZXZlcnRfcGF5bG9hZChzdHJ1Y3Qg cGF5bG9hZCAqZGF0YSkKICAgICBmb3IgKCBpID0gMDsgaSA8IGRhdGEtPm5mdW5jczsgaSsrICkK ICAgICAgICAgYXJjaF9saXZlcGF0Y2hfcmV2ZXJ0X2ptcCgmZGF0YS0+ZnVuY3NbaV0pOwogCisg ICAgLyoKKyAgICAgKiBTaW5jZSB3ZSBhcmUgcnVubmluZyB3aXRoIElSUXMgZGlzYWJsZWQgYW5k IHRoZSBob29rcyBtYXkgY2FsbCBjb21tb24KKyAgICAgKiBjb2RlIC0gd2hpY2ggZXhwZWN0cyBj ZXJ0YWluIHNwaW5sb2NrcyB0byBydW4gd2l0aCBJUlFzIGVuYWJsZWQgLSB3ZQorICAgICAqIHRl bXBvcmFyaWx5IGRpc2FibGUgdGhlIHNwaW4gbG9ja3MgSVJRIHN0YXRlIGNoZWNrcy4KKyAgICAg Ki8KKyAgICBzcGluX2RlYnVnX2Rpc2FibGUoKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGRhdGEt Pm5fdW5sb2FkX2Z1bmNzOyBpKysgKQorICAgICAgICBkYXRhLT51bmxvYWRfZnVuY3NbaV0oKTsK KyAgICBzcGluX2RlYnVnX2VuYWJsZSgpOworCisgICAgQVNTRVJUKCFsb2NhbF9pcnFfaXNfZW5h YmxlZCgpKTsKKwogICAgIGFyY2hfbGl2ZXBhdGNoX3Jldml2ZSgpOwogCiAgICAgLyoKZGlmZiAt LWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9saXZlcGF0Y2hfcGF5bG9hZC5oIGIveGVuL2luY2x1ZGUv eGVuL2xpdmVwYXRjaF9wYXlsb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOGYzOGNjMgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL3hlbi9saXZlcGF0Y2hf cGF5bG9hZC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2l0 cml4IFN5c3RlbXMgUiZEIEx0ZC4KKyAqLworCisjaWZuZGVmIF9fWEVOX0xJVkVQQVRDSF9QQVlM T0FEX0hfXworI2RlZmluZSBfX1hFTl9MSVZFUEFUQ0hfUEFZTE9BRF9IX18KKworLyoKKyAqIFRo ZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIHRvIGJlIHVzZWQgaW4gcGF0Y2hlcy4gVGhleSBh cmUgdGFrZW4KKyAqIGZyb20ga3BhdGNoLgorICovCit0eXBlZGVmIHZvaWQgbGl2ZXBhdGNoX2xv YWRjYWxsX3Qodm9pZCk7Cit0eXBlZGVmIHZvaWQgbGl2ZXBhdGNoX3VubG9hZGNhbGxfdCh2b2lk KTsKKworLyoKKyAqIExJVkVQQVRDSF9MT0FEX0hPT0sgbWFjcm8KKyAqCisgKiBEZWNsYXJlcyBh IGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgYWxsb2NhdGVkIGluIGEgbmV3CisgKiAubGl2ZXBhdGNo Lmhvb2subG9hZCBzZWN0aW9uLiAgVGhpcyBsaXZlcGF0Y2hfbG9hZF9kYXRhIHN5bWJvbCBpcyBs YXRlcgorICogc3RyaXBwZWQgYnkgY3JlYXRlLWRpZmYtb2JqZWN0IHNvIHRoYXQgaXQgY2FuIGJl IGRlY2xhcmVkIGluIG11bHRpcGxlCisgKiBvYmplY3RzIHRoYXQgYXJlIGxhdGVyIGxpbmtlZCB0 b2dldGhlciwgYXZvaWRpbmcgZ2xvYmFsIHN5bWJvbAorICogY29sbGlzaW9uLiAgU2luY2UgbXVs dGlwbGUgaG9va3MgY2FuIGJlIHJlZ2lzdGVyZWQsIHRoZQorICogLmxpdmVwYXRjaC5ob29rLmxv YWQgc2VjdGlvbiBpcyBhIHRhYmxlIG9mIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUKKyAqIGV4ZWN1 dGVkIGluIHNlcmllcyBieSB0aGUgbGl2ZXBhdGNoIGluZnJhc3RydWN0dXJlIGF0IHBhdGNoIGxv YWQgdGltZS4KKyAqLworI2RlZmluZSBMSVZFUEFUQ0hfTE9BRF9IT09LKF9mbikgXAorICAgIGxp dmVwYXRjaF9sb2FkY2FsbF90ICpfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgXAorICAgICAgICBjb25z dCBsaXZlcGF0Y2hfbG9hZF9kYXRhXyMjX2ZuIF9fc2VjdGlvbigiLmxpdmVwYXRjaC5ob29rcy5s b2FkIikgPSBfZm47CisKKy8qCisgKiBMSVZFUEFUQ0hfVU5MT0FEX0hPT0sgbWFjcm8KKyAqCisg KiBTYW1lIGFzIExPQUQgaG9vayB3aXRoIHMvbG9hZC91bmxvYWQvCisgKi8KKyNkZWZpbmUgTElW RVBBVENIX1VOTE9BRF9IT09LKF9mbikgXAorICAgICBsaXZlcGF0Y2hfdW5sb2FkY2FsbF90ICpf X2F0dHJpYnV0ZV9fKCh3ZWFrKSkgXAorICAgICAgICBjb25zdCBsaXZlcGF0Y2hfdW5sb2FkX2Rh dGFfIyNfZm4gX19zZWN0aW9uKCIubGl2ZXBhdGNoLmhvb2tzLnVubG9hZCIpID0gX2ZuOworCisj ZW5kaWYgLyogX19YRU5fTElWRVBBVENIX1BBWUxPQURfSF9fICovCisKKy8qCisgKiBMb2NhbCB2 YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2lj LW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAq IEVuZDoKKyAqLwotLSAKMi40LjExCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==