From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [RFC PATCH 4/8] gcov: add new interface and 3.4 and 4.7 format support Date: Thu, 6 Oct 2016 15:37:34 +0100 Message-ID: <1475764658-30809-5-git-send-email-wei.liu2@citrix.com> References: <1475764658-30809-1-git-send-email-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 1bs9nt-00011U-J6 for xen-devel@lists.xenproject.org; Thu, 06 Oct 2016 14:37:45 +0000 In-Reply-To: <1475764658-30809-1-git-send-email-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: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , philippe.gabriel@citrix.com, Jan Beulich List-Id: xen-devel@lists.xenproject.org QSBuZXcgc3lzY3RsIGludGVyZmFjZSBmb3IgcGFzc2luZyBnY292IGRhdGEgYmFjayB0byB1c2Vy c3BhY2UuIFRoZSBuZXcKaW50ZXJmYWNlIHVzZXMgYSBjdXN0b21pc2VkIHJlY29yZCBmaWxlIGZv cm1hdC4gVGhlIG5ldyBzeXNjdGwgcmV1c2VzCm9yaWdpbmFsIHN5c2N0bCBudW1iZXIgYnV0IHJl bmFtZXMgdGhlIG9wIHRvIGdjb3Zfb3AuCgpCb3RoIGdjYyAzLjQgYW5kIDQuNyBmb3JtYXQgYXJl IHN1cHBvcnRlZC4gVGhlIGNvZGUgaXMgcmV3cml0dGVuIHNvIHRoYXQKYSBuZXcgZm9ybWF0IGNh biBiZSBlYXNpbHkgYWRkZWQgaW4gdGhlIGZ1dHVyZS4gIFZlcnNpb24gc3BlY2lmaWMgY29kZQpp cyBncm91cGVkIGludG8gZGlmZmVyZW50IGZpbGVzLiBUaGUgZm9ybWF0IG9uZSBuZWVkcyB0byB1 c2UgY2FuIGJlCnBpY2tlZCB2aWEgS2NvbmZpZy4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzIDQuNyBm b3JtYXQuCgpVc2Vyc3BhY2UgcHJvZ3JhbXMgdG8gaGFuZGxlIGV4dHJhY3RlZCBkYXRhIHdpbGwg Y29tZSBpbiBhIGxhdGVyIHBhdGNoLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJA Y2l0cml4LmNvbT4KLS0tCkNjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXgu Y29tPgpDYzogR2VvcmdlIER1bmxhcCA8R2VvcmdlLkR1bmxhcEBldS5jaXRyaXguY29tPgpDYzog SWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBKYW4gQmV1bGljaCA8 amJldWxpY2hAc3VzZS5jb20+CkNjOiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxr QG9yYWNsZS5jb20+CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5v cmc+CkNjOiBUaW0gRGVlZ2FuIDx0aW1AeGVuLm9yZz4KQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNp dHJpeC5jb20+Ci0tLQogeGVuL0tjb25maWcuZGVidWcgICAgICAgICAgIHwgIDI0ICsrLQogeGVu L2NvbW1vbi9nY292L01ha2VmaWxlICAgIHwgICAzICsKIHhlbi9jb21tb24vZ2Nvdi9nY2NfM180 LmMgICB8IDM2MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog eGVuL2NvbW1vbi9nY292L2djY180XzcuYyAgIHwgMjAxICsrKysrKysrKysrKysrKysrKysrKysr KwogeGVuL2NvbW1vbi9nY292L2djb3YuYyAgICAgIHwgMjU0ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIHhlbi9jb21tb24vZ2Nvdi9nY292LmggICAgICB8ICAzNiArKysrKwogeGVu L2NvbW1vbi9nY292L2djb3ZfYmFzZS5jIHwgIDY0ICsrKysrKysrCiB4ZW4vY29tbW9uL3N5c2N0 bC5jICAgICAgICAgfCAgIDggKwogeGVuL2luY2x1ZGUvcHVibGljL3N5c2N0bC5oIHwgIDM3ICsr KystCiB4ZW4vaW5jbHVkZS94ZW4vZ2Nvdi5oICAgICAgfCAgIDkgKysKIDEwIGZpbGVzIGNoYW5n ZWQsIDk5MyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHhlbi9jb21tb24vZ2Nvdi9nY2NfM180LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vY29tbW9u L2djb3YvZ2NjXzRfNy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2NvbW1vbi9nY292L2djb3Yu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9jb21tb24vZ2Nvdi9nY292LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB4ZW4vY29tbW9uL2djb3YvZ2Nvdl9iYXNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4 ZW4vaW5jbHVkZS94ZW4vZ2Nvdi5oCgpkaWZmIC0tZ2l0IGEveGVuL0tjb25maWcuZGVidWcgYi94 ZW4vS2NvbmZpZy5kZWJ1ZwppbmRleCAwNTZkNWRhLi5hOGViNjY4IDEwMDY0NAotLS0gYS94ZW4v S2NvbmZpZy5kZWJ1ZworKysgYi94ZW4vS2NvbmZpZy5kZWJ1ZwpAQCAtMzAsMTYgKzMwLDMwIEBA IGNvbmZpZyBGUkFNRV9QT0lOVEVSCiAKIGNvbmZpZyBHQ09WCiAgICAgICAgYm9vbCAiR2NvdiBT dXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gQlJPS0VOCiAgICAgICAgLS0taGVscC0tLQogICAg ICAgICAgRW5hYmxlIGdjb3YgKGEgdGVzdCBjb3ZlcmFnZSBwcm9ncmFtIGluIEdDQykgc3VwcG9y dC4KIAotICAgICAgICAgQ3VycmVudGx5IHRoZSBkYXRhIHN0cnVjdHVyZSBhbmQgaHlwZXJjYWxs IGludGVyZmFjZSBhcmUgdGllZAotICAgICAgICAgdG8gR0NDIDMuNCBnY292IGZvcm1hdC4gWW91 IG5lZWQgdG8gaGF2ZSBhIHZlcnNpb24gb2YgR0NDCi0gICAgICAgICB0aGF0IGlzIGNvbXBhdGli bGUgd2l0aCB0aGF0IGZvcm1hdCB0byBtYWtlIGdjb3Ygd29yay4KLQogICAgICAgICAgSWYgdW5z dXJlLCBzYXkgTiBoZXJlLgogCitjaG9pY2UKKwlwcm9tcHQgIlNwZWNpZnkgR2NvdiBmb3JtYXQi CisJZGVwZW5kcyBvbiBHQ09WCisJZGVmYXVsdCBHQ09WX0ZPUk1BVF80XzcKKwktLS1oZWxwLS0t CisJVGhlIGdjb3YgZm9ybWF0IGlzIGRldGVybWluZWQgYnkgZ2NjIHZlcnNpb24uCisKK2NvbmZp ZyBHQ09WX0ZPUk1BVF80XzcKKyAgICAgICBib29sICJHQ0MgNC43IGZvcm1hdCIKKyAgICAgICAt LS1oZWxwLS0tCisgICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHVzZSB0aGUgZm9ybWF0IHNw ZWNpZmllZCBpbiBHQ0MgNC43LgorCitjb25maWcgR0NPVl9GT1JNQVRfM180CisgICAgICAgYm9v bCAiR0NDIDMuNCBmb3JtYXQiCisgICAgICAgLS0taGVscC0tLQorICAgICAgIFNlbGVjdCB0aGlz IG9wdGlvbiB0byB1c2UgdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gR0NDIDMuNC4KKworZW5kY2hv aWNlCisKIGNvbmZpZyBMT0NLX1BST0ZJTEUKIAlib29sICJMb2NrIFByb2ZpbGluZyIKIAktLS1o ZWxwLS0tCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2djb3YvTWFrZWZpbGUgYi94ZW4vY29tbW9u L2djb3YvTWFrZWZpbGUKaW5kZXggZTY5ZGUyOS4uMDNhYzFlNSAxMDA2NDQKLS0tIGEveGVuL2Nv bW1vbi9nY292L01ha2VmaWxlCisrKyBiL3hlbi9jb21tb24vZ2Nvdi9NYWtlZmlsZQpAQCAtMCww ICsxLDMgQEAKK29iai15ICs9IGdjb3ZfYmFzZS5vIGdjb3Yubworb2JqLSQoQ09ORklHX0dDT1Zf Rk9STUFUXzNfNCkgKz0gZ2NjXzNfNC5vCitvYmotJChDT05GSUdfR0NPVl9GT1JNQVRfNF83KSAr PSBnY2NfNF83Lm8KZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vZ2Nvdi9nY2NfM180LmMgYi94ZW4v Y29tbW9uL2djb3YvZ2NjXzNfNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjU0MGZiYWYKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vY29tbW9uL2djb3YvZ2NjXzNfNC5jCkBA IC0wLDAgKzEsMzYzIEBACisvKgorICogIFRoaXMgY29kZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8g aGFuZGxlIGdjYydzIHByb2ZpbGluZyBkYXRhIGZvcm1hdAorICogIGludHJvZHVjZWQgd2l0aCBn Y2MgMy40LiBGdXR1cmUgdmVyc2lvbnMgb2YgZ2NjIG1heSBjaGFuZ2UgdGhlIGdjb3YKKyAqICBm b3JtYXQgKGFzIGhhcHBlbmVkIGJlZm9yZSksIHNvIGFsbCBmb3JtYXQtc3BlY2lmaWMgaW5mb3Jt YXRpb24gbmVlZHMKKyAqICB0byBiZSBrZXB0IG1vZHVsYXIgYW5kIGVhc2lseSBleGNoYW5nZWFi bGUuCisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBnY2MtaW50ZXJuYWwgZGVmaW5pdGlv bnMuIEZ1bmN0aW9ucyBhbmQgZGF0YQorICogIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgdG8gYmUg Y29tcGF0aWJsZSB3aXRoIGdjYyBjb3VudGVycGFydHMuCisgKiAgRm9yIGEgYmV0dGVyIHVuZGVy c3RhbmRpbmcsIHJlZmVyIHRvIGdjYyBzb3VyY2U6IGdjYy9nY292LWlvLmguCisgKgorICogICAg Q29weXJpZ2h0IElCTSBDb3JwLiAyMDA5CisgKiAgICBBdXRob3Iocyk6IFBldGVyIE9iZXJwYXJs ZWl0ZXIgPG9iZXJwYXJAbGludXgudm5ldC5pYm0uY29tPgorICoKKyAqICAgIFVzZXMgZ2NjLWlu dGVybmFsIGRhdGEgZGVmaW5pdGlvbnMuCisgKgorICogIEltcG9ydGVkIGZyb20gTGludXggYW5k IG1vZGlmaWVkIGZvciBYZW4gYnkKKyAqICAgIFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+ CisgKi8KKworCisjaW5jbHVkZSA8eGVuL2xpYi5oPgorCisjaW5jbHVkZSAiZ2Nvdi5oIgorCisj ZGVmaW5lIEdDT1ZfQ09VTlRFUlMgNQorCitzdGF0aWMgc3RydWN0IGdjb3ZfaW5mbyAqZ2Nvdl9p bmZvX2hlYWQ7CisKKy8qKgorICogc3RydWN0IGdjb3ZfZm5faW5mbyAtIHByb2ZpbGluZyBtZXRh IGRhdGEgcGVyIGZ1bmN0aW9uCisgKiBAaWRlbnQ6IG9iamVjdCBmaWxlLXVuaXF1ZSBmdW5jdGlv biBpZGVudGlmaWVyCisgKiBAY2hlY2tzdW06IGZ1bmN0aW9uIGNoZWNrc3VtCisgKiBAbl9jdHJz OiBudW1iZXIgb2YgdmFsdWVzIHBlciBjb3VudGVyIHR5cGUgYmVsb25naW5nIHRvIHRoaXMgZnVu Y3Rpb24KKyAqCisgKiBUaGlzIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGdjYyBkdXJpbmcgY29tcGls YXRpb24gYW5kIGRvZXNuJ3QgY2hhbmdlCisgKiBhdCBydW4tdGltZS4KKyAqLworc3RydWN0IGdj b3ZfZm5faW5mbworeworICAgIHVuc2lnbmVkIGludCBpZGVudDsKKyAgICB1bnNpZ25lZCBpbnQg Y2hlY2tzdW07CisgICAgdW5zaWduZWQgaW50IG5fY3Ryc1swXTsKK307CisKKy8qKgorICogc3Ry dWN0IGdjb3ZfY3RyX2luZm8gLSBwcm9maWxpbmcgZGF0YSBwZXIgY291bnRlciB0eXBlCisgKiBA bnVtOiBudW1iZXIgb2YgY291bnRlciB2YWx1ZXMgZm9yIHRoaXMgdHlwZQorICogQHZhbHVlczog YXJyYXkgb2YgY291bnRlciB2YWx1ZXMgZm9yIHRoaXMgdHlwZQorICogQG1lcmdlOiBtZXJnZSBm dW5jdGlvbiBmb3IgY291bnRlciB2YWx1ZXMgb2YgdGhpcyB0eXBlICh1bnVzZWQpCisgKgorICog VGhpcyBkYXRhIGlzIGdlbmVyYXRlZCBieSBnY2MgZHVyaW5nIGNvbXBpbGF0aW9uIGFuZCBkb2Vz bid0IGNoYW5nZQorICogYXQgcnVuLXRpbWUgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSB2YWx1 ZXMgYXJyYXkuCisgKi8KK3N0cnVjdCBnY292X2N0cl9pbmZvCit7CisgICAgdW5zaWduZWQgaW50 IG51bTsKKyAgICBnY292X3R5cGUgKnZhbHVlczsKKyAgICB2b2lkICgqbWVyZ2UpKGdjb3ZfdHlw ZSAqLCB1bnNpZ25lZCBpbnQpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZ2Nvdl9pbmZvIC0gcHJv ZmlsaW5nIGRhdGEgcGVyIG9iamVjdCBmaWxlCisgKiBAdmVyc2lvbjogZ2NvdiB2ZXJzaW9uIG1h Z2ljIGluZGljYXRpbmcgdGhlIGdjYyB2ZXJzaW9uIHVzZWQgZm9yIGNvbXBpbGF0aW9uCisgKiBA bmV4dDogbGlzdCBoZWFkIGZvciBhIHNpbmdseS1saW5rZWQgbGlzdAorICogQHN0YW1wOiB0aW1l IHN0YW1wCisgKiBAZmlsZW5hbWU6IG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgZ2NvdiBkYXRhIGZp bGUKKyAqIEBuX2Z1bmN0aW9uczogbnVtYmVyIG9mIGluc3RydW1lbnRlZCBmdW5jdGlvbnMKKyAq IEBmdW5jdGlvbnM6IGZ1bmN0aW9uIGRhdGEKKyAqIEBjdHJfbWFzazogbWFzayBzcGVjaWZ5aW5n IHdoaWNoIGNvdW50ZXIgdHlwZXMgYXJlIGFjdGl2ZQorICogQGNvdW50czogY291bnRlciBkYXRh IHBlciBjb3VudGVyIHR5cGUKKyAqCisgKiBUaGlzIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGdjYyBk dXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJ3QgY2hhbmdlCisgKiBhdCBydW4tdGltZSB3aXRo IHRoZSBleGNlcHRpb24gb2YgdGhlIG5leHQgcG9pbnRlci4KKyAqLworc3RydWN0IGdjb3ZfaW5m bworeworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgdmVyc2lvbjsKKyAgICBzdHJ1Y3Qg Z2Nvdl9pbmZvICAgICAgICAgICpuZXh0OworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAg c3RhbXA7CisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAqZmlsZW5hbWU7CisgICAgdW5z aWduZWQgaW50ICAgICAgICAgICAgICBuX2Z1bmN0aW9uczsKKyAgICBjb25zdCBzdHJ1Y3QgZ2Nv dl9mbl9pbmZvICpmdW5jdGlvbnM7CisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICBjdHJf bWFzazsKKyAgICBzdHJ1Y3QgZ2Nvdl9jdHJfaW5mbyAgICAgIGNvdW50c1swXTsKK307CisKKy8q KgorICogc3RydWN0IHR5cGVfaW5mbyAtIGl0ZXJhdG9yIGhlbHBlciBhcnJheQorICogQGN0cl90 eXBlOiBjb3VudGVyIHR5cGUKKyAqIEBvZmZzZXQ6IGluZGV4IG9mIHRoZSBmaXJzdCB2YWx1ZSBv ZiB0aGUgY3VycmVudCBmdW5jdGlvbiBmb3IgdGhpcyB0eXBlCisgKgorICogVGhpcyBhcnJheSBp cyBuZWVkZWQgdG8gY29udmVydCB0aGUgaW4tbWVtb3J5IGRhdGEgZm9ybWF0IGludG8gdGhlIGlu LWZpbGUKKyAqIGRhdGEgZm9ybWF0OgorICoKKyAqIEluLW1lbW9yeToKKyAqICAgZm9yIGVhY2gg Y291bnRlciB0eXBlCisgKiAgICAgZm9yIGVhY2ggZnVuY3Rpb24KKyAqICAgICAgIHZhbHVlcwor ICoKKyAqIEluLWZpbGU6CisgKiAgIGZvciBlYWNoIGZ1bmN0aW9uCisgKiAgICAgZm9yIGVhY2gg Y291bnRlciB0eXBlCisgKiAgICAgICB2YWx1ZXMKKyAqCisgKiBTZWUgZ2NjIHNvdXJjZSBnY2Mv Z2Nvdi1pby5oIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGRhdGEgb3JnYW5pemF0aW9uLgorICov CitzdHJ1Y3QgdHlwZV9pbmZvIHsKKyAgICBpbnQgY3RyX3R5cGU7CisgICAgdW5zaWduZWQgaW50 IG9mZnNldDsKK307CisKKy8qKgorICogc3RydWN0IGdjb3ZfaXRlcmF0b3IgLSBzcGVjaWZpZXMg Y3VycmVudCBmaWxlIHBvc2l0aW9uIGluIGxvZ2ljYWwgcmVjb3JkcworICogQGluZm86IGFzc29j aWF0ZWQgcHJvZmlsaW5nIGRhdGEKKyAqIEByZWNvcmQ6IHJlY29yZCB0eXBlCisgKiBAZnVuY3Rp b246IGZ1bmN0aW9uIG51bWJlcgorICogQHR5cGU6IGNvdW50ZXIgdHlwZQorICogQGNvdW50OiBp bmRleCBpbnRvIHZhbHVlcyBhcnJheQorICogQG51bV90eXBlczogbnVtYmVyIG9mIGNvdW50ZXIg dHlwZXMKKyAqIEB0eXBlX2luZm86IGhlbHBlciBhcnJheSB0byBnZXQgdmFsdWVzLWFycmF5IG9m ZnNldCBmb3IgY3VycmVudCBmdW5jdGlvbgorICovCitzdHJ1Y3QgZ2Nvdl9pdGVyYXRvciB7Cisg ICAgc3RydWN0IGdjb3ZfaW5mbyAqaW5mbzsKKworICAgIGludCByZWNvcmQ7CisgICAgdW5zaWdu ZWQgaW50IGZ1bmN0aW9uOworICAgIHVuc2lnbmVkIGludCB0eXBlOworICAgIHVuc2lnbmVkIGlu dCBjb3VudDsKKworICAgIGludCBudW1fdHlwZXM7CisgICAgc3RydWN0IHR5cGVfaW5mbyB0eXBl X2luZm9bR0NPVl9DT1VOVEVSU107Cit9OworCisvKiBNYXBwaW5nIG9mIGxvZ2ljYWwgcmVjb3Jk IG51bWJlciB0byBhY3R1YWwgZmlsZSBjb250ZW50LiAqLworI2RlZmluZSBSRUNPUkRfRklMRV9N QUdJQyAgICAgICAwCisjZGVmaW5lIFJFQ09SRF9HQ09WX1ZFUlNJT04gICAgIDEKKyNkZWZpbmUg UkVDT1JEX1RJTUVfU1RBTVAgICAgICAgMgorI2RlZmluZSBSRUNPUkRfRlVOQ1RJT05fVEFHICAg ICAzCisjZGVmaW5lIFJFQ09SRF9GVU5DVE9OX1RBR19MRU4gIDQKKyNkZWZpbmUgUkVDT1JEX0ZV TkNUSU9OX0lERU5UICAgNQorI2RlZmluZSBSRUNPUkRfRlVOQ1RJT05fQ0hFQ0sgICA2CisjZGVm aW5lIFJFQ09SRF9DT1VOVF9UQUcgICAgICAgIDcKKyNkZWZpbmUgUkVDT1JEX0NPVU5UX0xFTiAg ICAgICAgOAorI2RlZmluZSBSRUNPUkRfQ09VTlQgICAgICAgICAgICA5CisKK3N0YXRpYyBpbnQg Y291bnRlcl9hY3RpdmUoc3RydWN0IGdjb3ZfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IHR5cGUp Cit7CisgICAgcmV0dXJuICgxIDw8IHR5cGUpICYgaW5mby0+Y3RyX21hc2s7Cit9CisKK3N0YXRp YyB1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJfYWN0aXZlKHN0cnVjdCBnY292X2luZm8gKmluZm8p Cit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisK KyAgICBmb3IgKCBpID0gMDsgaSA8IEdDT1ZfQ09VTlRFUlM7IGkrKyApCisgICAgICAgIGlmICgg Y291bnRlcl9hY3RpdmUoaW5mbywgaSkgKQorICAgICAgICAgICAgcmVzdWx0Kys7CisKKyAgICBy ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGdjb3ZfaW5mb19saW5rKHN0cnVjdCBnY292X2luZm8g KmluZm8pCit7CisgICAgaW5mby0+bmV4dCA9IGdjb3ZfaW5mb19oZWFkOworICAgIGdjb3ZfaW5m b19oZWFkID0gaW5mbzsKK30KKworc3RydWN0IGdjb3ZfaW5mbyAqZ2Nvdl9pbmZvX25leHQoc3Ry dWN0IGdjb3ZfaW5mbyAqaW5mbykKK3sKKyAgICBpZiAoICFpbmZvICkKKyAgICAgICAgcmV0dXJu IGdjb3ZfaW5mb19oZWFkOworCisgICAgcmV0dXJuIGluZm8tPm5leHQ7Cit9CisKK2NvbnN0IGNo YXIgKmdjb3ZfaW5mb19maWxlbmFtZShzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvKQoreworICAgIHJl dHVybiBpbmZvLT5maWxlbmFtZTsKK30KKwordm9pZCBnY292X2luZm9fcmVzZXQoc3RydWN0IGdj b3ZfaW5mbyAqaW5mbykKK3sKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlID0gbnVtX2NvdW50ZXJf YWN0aXZlKGluZm8pOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDA7IGkg PCBhY3RpdmU7IGkrKyApCisgICAgICAgIG1lbXNldChpbmZvLT5jb3VudHNbaV0udmFsdWVzLCAw LAorICAgICAgICAgICAgICAgaW5mby0+Y291bnRzW2ldLm51bSAqIHNpemVvZihnY292X3R5cGUp KTsKK30KKworc3RhdGljIHNpemVfdCBnZXRfZm5fc2l6ZShzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZv KQoreworICAgIHNpemVfdCBzaXplOworCisgICAgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ2Nvdl9m bl9pbmZvKSArIG51bV9jb3VudGVyX2FjdGl2ZShpbmZvKSAqCisgICAgICAgIHNpemVvZih1bnNp Z25lZCBpbnQpOworICAgIGlmICggX19hbGlnbm9mX18oc3RydWN0IGdjb3ZfZm5faW5mbykgPiBz aXplb2YodW5zaWduZWQgaW50KSApCisgICAgICAgIHNpemUgPSBST1VORFVQKHNpemUsIF9fYWxp Z25vZl9fKHN0cnVjdCBnY292X2ZuX2luZm8pKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKworc3Rh dGljIHN0cnVjdCBnY292X2ZuX2luZm8gKmdldF9mbl9pbmZvKHN0cnVjdCBnY292X2luZm8gKmlu Zm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGZuKQoreworICAgIHJldHVybiAoc3RydWN0IGdjb3ZfZm5faW5mbyAqKQorICAgICAgICAoKGNo YXIgKikgaW5mby0+ZnVuY3Rpb25zICsgZm4gKiBnZXRfZm5fc2l6ZShpbmZvKSk7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgZ2Nvdl9mbl9pbmZvICpnZXRfZnVuYyhzdHJ1Y3QgZ2Nvdl9pdGVyYXRvciAq aXRlcikKK3sKKyAgICByZXR1cm4gZ2V0X2ZuX2luZm8oaXRlci0+aW5mbywgaXRlci0+ZnVuY3Rp b24pOworfQorCitzdGF0aWMgc3RydWN0IHR5cGVfaW5mbyAqZ2V0X3R5cGUoc3RydWN0IGdjb3Zf aXRlcmF0b3IgKml0ZXIpCit7CisgICAgcmV0dXJuICZpdGVyLT50eXBlX2luZm9baXRlci0+dHlw ZV07Cit9CisKKy8qKgorICogZ2Nvdl9pdGVyX25leHQgLSBhZHZhbmNlIGZpbGUgaXRlcmF0b3Ig dG8gbmV4dCBsb2dpY2FsIHJlY29yZAorICogQGl0ZXI6IGZpbGUgaXRlcmF0b3IKKyAqCisgKiBS ZXR1cm4gemVybyBpZiBuZXcgcG9zaXRpb24gaXMgdmFsaWQsIG5vbi16ZXJvIGlmIGl0ZXJhdG9y IGhhcyByZWFjaGVkIGVuZC4KKyAqLworc3RhdGljIGludCBnY292X2l0ZXJfbmV4dChzdHJ1Y3Qg Z2Nvdl9pdGVyYXRvciAqaXRlcikKK3sKKyAgICBzd2l0Y2ggKCBpdGVyLT5yZWNvcmQgKQorICAg IHsKKyAgICBjYXNlIFJFQ09SRF9GSUxFX01BR0lDOgorICAgIGNhc2UgUkVDT1JEX0dDT1ZfVkVS U0lPTjoKKyAgICBjYXNlIFJFQ09SRF9GVU5DVElPTl9UQUc6CisgICAgY2FzZSBSRUNPUkRfRlVO Q1RPTl9UQUdfTEVOOgorICAgIGNhc2UgUkVDT1JEX0ZVTkNUSU9OX0lERU5UOgorICAgIGNhc2Ug UkVDT1JEX0NPVU5UX1RBRzoKKyAgICAgICAgLyogQWR2YW5jZSB0byBuZXh0IHJlY29yZCAqLwor ICAgICAgICBpdGVyLT5yZWNvcmQrKzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSRUNPUkRf Q09VTlQ6CisgICAgICAgIC8qIEFkdmFuY2UgdG8gbmV4dCBjb3VudCAqLworICAgICAgICBpdGVy LT5jb3VudCsrOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIFJFQ09SRF9D T1VOVF9MRU46CisgICAgICAgIGlmICggaXRlci0+Y291bnQgPCBnZXRfZnVuYyhpdGVyKS0+bl9j dHJzW2l0ZXItPnR5cGVdICkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlci0+cmVjb3JkID0g OTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qIEFkdmFuY2UgdG8g bmV4dCBjb3VudGVyIHR5cGUgKi8KKyAgICAgICAgZ2V0X3R5cGUoaXRlciktPm9mZnNldCArPSBp dGVyLT5jb3VudDsKKyAgICAgICAgaXRlci0+Y291bnQgPSAwOworICAgICAgICBpdGVyLT50eXBl Kys7CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgUkVDT1JEX0ZVTkNUSU9O X0NIRUNLOgorICAgICAgICBpZiAoIGl0ZXItPnR5cGUgPCBpdGVyLT5udW1fdHlwZXMgKQorICAg ICAgICB7CisgICAgICAgICAgICBpdGVyLT5yZWNvcmQgPSA3OworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgLyogQWR2YW5jZSB0byBuZXh0IGZ1bmN0aW9uICovCisgICAg ICAgIGl0ZXItPnR5cGUgPSAwOworICAgICAgICBpdGVyLT5mdW5jdGlvbisrOworICAgICAgICAv KiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIFJFQ09SRF9USU1FX1NUQU1QOgorICAgICAgICBp ZiAoIGl0ZXItPmZ1bmN0aW9uIDwgaXRlci0+aW5mby0+bl9mdW5jdGlvbnMgKQorICAgICAgICAg ICAgaXRlci0+cmVjb3JkID0gMzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlci0+cmVj b3JkID0gLTE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBDaGVjayBmb3IgRU9GLiAq LworICAgIGlmICggaXRlci0+cmVjb3JkID09IC0xICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7 CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworLyoqCisgKiBnY292X2l0ZXJfd3Jp dGUgLSB3cml0ZSBkYXRhIHRvIGJ1ZmZlcgorICogQGl0ZXI6IGZpbGUgaXRlcmF0b3IKKyAqIEBi dWY6IGJ1ZmZlciB0byB3cml0ZSB0bywgaWYgaXQgaXMgTlVMTCwgbm90aGluZyBpcyB3cml0dGVu CisgKiBAcG9zOiBwb3NpdGlvbiBpbnNpZGUgYnVmZmVyIHRvIHN0YXJ0IHdyaXRpbmcKKyAqCisg KiBSZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaW50byBidWZmZXIuCisgKi8KK3N0YXRp YyBzaXplX3QgZ2Nvdl9pdGVyX3dyaXRlKHN0cnVjdCBnY292X2l0ZXJhdG9yICppdGVyLCBjaGFy ICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcG9zKQoreworICAg IHNpemVfdCByZXQgPSAwOworCisgICAgc3dpdGNoICggaXRlci0+cmVjb3JkICkKKyAgICB7Cisg ICAgY2FzZSBSRUNPUkRfRklMRV9NQUdJQzoKKyAgICAgICAgcmV0ID0gZ2Nvdl9zdG9yZV91MzIo YnVmLCBwb3MsIEdDT1ZfREFUQV9NQUdJQyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkVD T1JEX0dDT1ZfVkVSU0lPTjoKKyAgICAgICAgcmV0ID0gZ2Nvdl9zdG9yZV91MzIoYnVmLCBwb3Ms IGl0ZXItPmluZm8tPnZlcnNpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJFQ09SRF9U SU1FX1NUQU1QOgorICAgICAgICByZXQgPSBnY292X3N0b3JlX3UzMihidWYsIHBvcywgaXRlci0+ aW5mby0+c3RhbXApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJFQ09SRF9GVU5DVElPTl9U QUc6CisgICAgICAgIHJldCA9IGdjb3Zfc3RvcmVfdTMyKGJ1ZiwgcG9zLCBHQ09WX1RBR19GVU5D VElPTik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkVDT1JEX0ZVTkNUT05fVEFHX0xFTjoK KyAgICAgICAgcmV0ID0gZ2Nvdl9zdG9yZV91MzIoYnVmLCBwb3MsIDIpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIFJFQ09SRF9GVU5DVElPTl9JREVOVDoKKyAgICAgICAgcmV0ID0gZ2Nvdl9z dG9yZV91MzIoYnVmLCBwb3MsIGdldF9mdW5jKGl0ZXIpLT5pZGVudCk7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgUkVDT1JEX0ZVTkNUSU9OX0NIRUNLOgorICAgICAgICByZXQgPSBnY292X3N0 b3JlX3UzMihidWYsIHBvcywgZ2V0X2Z1bmMoaXRlciktPmNoZWNrc3VtKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBSRUNPUkRfQ09VTlRfVEFHOgorICAgICAgICByZXQgPSBnY292X3N0b3Jl X3UzMihidWYsIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NPVl9UQUdfRk9S X0NPVU5URVIoZ2V0X3R5cGUoaXRlciktPmN0cl90eXBlKSk7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgUkVDT1JEX0NPVU5UX0xFTjoKKyAgICAgICAgcmV0ID0gZ2Nvdl9zdG9yZV91MzIoYnVm LCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9mdW5jKGl0ZXIpLT5uX2N0 cnNbaXRlci0+dHlwZV0gKiAyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSRUNPUkRfQ09V TlQ6CisgICAgICAgIHJldCA9IGdjb3Zfc3RvcmVfdTY0KGJ1ZiwgcG9zLCBpdGVyLT5pbmZvLT5j b3VudHNbaXRlci0+dHlwZV0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tp dGVyLT5jb3VudCArIGdldF90eXBlKGl0ZXIpLT5vZmZzZXRdKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyogSWYgYnVmZmVyIGlzIE5VTEwsIG5vIGRh dGEgaXMgd3JpdHRlbi4gKi8KK3NpemVfdCBnY292X2luZm9fdG9fZ2NkYShjaGFyICpidWZmZXIs IHN0cnVjdCBnY292X2luZm8gKmluZm8pCit7CisgICAgc3RydWN0IGdjb3ZfaXRlcmF0b3IgaXRl ciA9IHsgLmluZm8gPSBpbmZvIH07CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgc2l6ZV90IHBv cyA9IDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IEdDT1ZfQ09VTlRFUlM7IGkrKyApCisgICAg eworICAgICAgICBpZiAoIGNvdW50ZXJfYWN0aXZlKGluZm8sIGkpICkKKyAgICAgICAgeworICAg ICAgICAgICAgaXRlci50eXBlX2luZm9baXRlci5udW1fdHlwZXNdLmN0cl90eXBlID0gaTsKKyAg ICAgICAgICAgIGl0ZXIudHlwZV9pbmZvW2l0ZXIubnVtX3R5cGVzXS5vZmZzZXQgPSAwOworICAg ICAgICAgICAgaXRlci5udW1fdHlwZXMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRvIHsK KyAgICAgICAgcG9zICs9IGdjb3ZfaXRlcl93cml0ZSgmaXRlciwgYnVmZmVyLCBwb3MpOworICAg IH0gd2hpbGUgKCBnY292X2l0ZXJfbmV4dCgmaXRlcikgPT0gMCApOworCisgICAgcmV0dXJuIHBv czsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1z dHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGlu ZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vY29tbW9u L2djb3YvZ2NjXzRfNy5jIGIveGVuL2NvbW1vbi9nY292L2djY180XzcuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQzYmQyCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2Nv bW1vbi9nY292L2djY180XzcuYwpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqICBUaGlzIGNvZGUg cHJvdmlkZXMgZnVuY3Rpb25zIHRvIGhhbmRsZSBnY2MncyBwcm9maWxpbmcgZGF0YSBmb3JtYXQK KyAqICBpbnRyb2R1Y2VkIHdpdGggZ2NjIDQuNy4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIGJhc2Vk IGhlYXZpbHkgb24gZ2NjXzNfNC5jIGZpbGUuCisgKgorICogIEZvciBhIGJldHRlciB1bmRlcnN0 YW5kaW5nLCByZWZlciB0byBnY2Mgc291cmNlOgorICogIGdjYy9nY292LWlvLmgKKyAqICBsaWJn Y2MvbGliZ2Nvdi5jCisgKgorICogIFVzZXMgZ2NjLWludGVybmFsIGRhdGEgZGVmaW5pdGlvbnMu CisgKgorICogIEltcG9ydGVkIGZyb20gTGludXggYW5kIG1vZGlmaWVkIGZvciBYZW4gYnkKKyAq ICAgIFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+CisgKi8KKworI2luY2x1ZGUgPHhlbi9z dHJpbmcuaD4KKworI2luY2x1ZGUgImdjb3YuaCIKKworI2lmIChfX0dOVUNfXyA+IDUpIHx8IChf X0dOVUNfXyA9PSA1ICYmIF9fR05VQ19NSU5PUl9fID49IDEpCisjZGVmaW5lIEdDT1ZfQ09VTlRF UlMgICAgICAgICAgICAgICAgICAgMTAKKyNlbGlmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01J Tk9SX18gPj0gOQorI2RlZmluZSBHQ09WX0NPVU5URVJTICAgICAgICAgICAgICAgICAgIDkKKyNl bHNlCisjZGVmaW5lIEdDT1ZfQ09VTlRFUlMgICAgICAgICAgICAgICAgICAgOAorI2VuZGlmCisK KyNkZWZpbmUgR0NPVl9UQUdfRlVOQ1RJT05fTEVOR1RIICAgICAgICAzCisKK3N0YXRpYyBzdHJ1 Y3QgZ2Nvdl9pbmZvICpnY292X2luZm9faGVhZDsKKworLyoqCisgKiBzdHJ1Y3QgZ2Nvdl9jdHJf aW5mbyAtIGluZm9ybWF0aW9uIGFib3V0IGNvdW50ZXJzIGZvciBhIHNpbmdsZSBmdW5jdGlvbgor ICogQG51bTogbnVtYmVyIG9mIGNvdW50ZXIgdmFsdWVzIGZvciB0aGlzIHR5cGUKKyAqIEB2YWx1 ZXM6IGFycmF5IG9mIGNvdW50ZXIgdmFsdWVzIGZvciB0aGlzIHR5cGUKKyAqCisgKiBUaGlzIGRh dGEgaXMgZ2VuZXJhdGVkIGJ5IGdjYyBkdXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJ3QgY2hh bmdlCisgKiBhdCBydW4tdGltZSB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHZhbHVlcyBhcnJh eS4KKyAqLworc3RydWN0IGdjb3ZfY3RyX2luZm8geworICAgIHVuc2lnbmVkIGludCBudW07Cisg ICAgZ2Nvdl90eXBlICp2YWx1ZXM7Cit9OworCisvKioKKyAqIHN0cnVjdCBnY292X2ZuX2luZm8g LSBwcm9maWxpbmcgbWV0YSBkYXRhIHBlciBmdW5jdGlvbgorICogQGtleTogY29tZGF0IGtleQor ICogQGlkZW50OiB1bmlxdWUgaWRlbnQgb2YgZnVuY3Rpb24KKyAqIEBsaW5lbm9fY2hlY2tzdW06 IGZ1bmN0aW9uIGxpbmVvX2NoZWNrc3VtCisgKiBAY2ZnX2NoZWNrc3VtOiBmdW5jdGlvbiBjZmcg Y2hlY2tzdW0KKyAqIEBjdHJzOiBpbnN0cnVtZW50ZWQgY291bnRlcnMKKyAqCisgKiBUaGlzIGRh dGEgaXMgZ2VuZXJhdGVkIGJ5IGdjYyBkdXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJ3QgY2hh bmdlCisgKiBhdCBydW4tdGltZS4KKyAqCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBm dW5jdGlvbi4gIFRoaXMgdXNlcyB0aGUgdHJhaWxpbmcgYXJyYXkKKyAqIGlkaW9tLiBUaGUgbnVt YmVyIG9mIGNvdW50ZXJzIGlzIGRldGVybWluZWQgZnJvbSB0aGUgbWVyZ2UgcG9pbnRlcgorICog YXJyYXkgaW4gZ2Nvdl9pbmZvLiAgVGhlIGtleSBpcyB1c2VkIHRvIGRldGVjdCB3aGljaCBvZiBh IHNldCBvZgorICogY29tZGF0IGZ1bmN0aW9ucyB3YXMgc2VsZWN0ZWQgLS0gaXQgcG9pbnRzIHRv IHRoZSBnY292X2luZm8gb2JqZWN0CisgKiBvZiB0aGUgb2JqZWN0IGZpbGUgY29udGFpbmluZyB0 aGUgc2VsZWN0ZWQgY29tZGF0IGZ1bmN0aW9uLgorICovCitzdHJ1Y3QgZ2Nvdl9mbl9pbmZvIHsK KyAgICBjb25zdCBzdHJ1Y3QgZ2Nvdl9pbmZvICprZXk7CisgICAgdW5zaWduZWQgaW50IGlkZW50 OworICAgIHVuc2lnbmVkIGludCBsaW5lbm9fY2hlY2tzdW07CisgICAgdW5zaWduZWQgaW50IGNm Z19jaGVja3N1bTsKKyAgICBzdHJ1Y3QgZ2Nvdl9jdHJfaW5mbyBjdHJzWzBdOworfTsKKworLyoq CisgKiBzdHJ1Y3QgZ2Nvdl9pbmZvIC0gcHJvZmlsaW5nIGRhdGEgcGVyIG9iamVjdCBmaWxlCisg KiBAdmVyc2lvbjogZ2NvdiB2ZXJzaW9uIG1hZ2ljIGluZGljYXRpbmcgdGhlIGdjYyB2ZXJzaW9u IHVzZWQgZm9yIGNvbXBpbGF0aW9uCisgKiBAbmV4dDogbGlzdCBoZWFkIGZvciBhIHNpbmdseS1s aW5rZWQgbGlzdAorICogQHN0YW1wOiB1bmlxdWlmeWluZyB0aW1lIHN0YW1wCisgKiBAZmlsZW5h bWU6IG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgZ2NvdiBkYXRhIGZpbGUKKyAqIEBtZXJnZTogbWVy Z2UgZnVuY3Rpb25zIChudWxsIGZvciB1bnVzZWQgY291bnRlciB0eXBlKQorICogQG5fZnVuY3Rp b25zOiBudW1iZXIgb2YgaW5zdHJ1bWVudGVkIGZ1bmN0aW9ucworICogQGZ1bmN0aW9uczogcG9p bnRlciB0byBwb2ludGVycyB0byBmdW5jdGlvbiBpbmZvcm1hdGlvbgorICoKKyAqIFRoaXMgZGF0 YSBpcyBnZW5lcmF0ZWQgYnkgZ2NjIGR1cmluZyBjb21waWxhdGlvbiBhbmQgZG9lc24ndCBjaGFu Z2UKKyAqIGF0IHJ1bi10aW1lIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgbmV4dCBwb2ludGVy LgorICovCitzdHJ1Y3QgZ2Nvdl9pbmZvIHsKKyAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKyAg ICBzdHJ1Y3QgZ2Nvdl9pbmZvICpuZXh0OworICAgIHVuc2lnbmVkIGludCBzdGFtcDsKKyAgICBj b25zdCBjaGFyICpmaWxlbmFtZTsKKyAgICB2b2lkICgqbWVyZ2VbR0NPVl9DT1VOVEVSU10pKGdj b3ZfdHlwZSAqLCB1bnNpZ25lZCBpbnQpOworICAgIHVuc2lnbmVkIGludCBuX2Z1bmN0aW9uczsK KyAgICBzdHJ1Y3QgZ2Nvdl9mbl9pbmZvICoqZnVuY3Rpb25zOworfTsKKworc3RhdGljIGludCBj b3VudGVyX2FjdGl2ZShzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgdHlwZSkK K3sKKyAgICByZXR1cm4gaW5mby0+bWVyZ2VbdHlwZV0gPyAxIDogMDsKK30KKwordm9pZCBnY292 X2luZm9fbGluayhzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvKQoreworICAgIGluZm8tPm5leHQgPSBn Y292X2luZm9faGVhZDsKKyAgICBnY292X2luZm9faGVhZCA9IGluZm87Cit9CisKK3N0cnVjdCBn Y292X2luZm8gKmdjb3ZfaW5mb19uZXh0KHN0cnVjdCBnY292X2luZm8gKmluZm8pCit7CisgICAg aWYgKCAhaW5mbyApCisgICAgICAgIHJldHVybiBnY292X2luZm9faGVhZDsKKyAgICByZXR1cm4g aW5mby0+bmV4dDsKK30KKwordm9pZCBnY292X2luZm9fcmVzZXQoc3RydWN0IGdjb3ZfaW5mbyAq aW5mbykKK3sKKyAgICBzdHJ1Y3QgZ2Nvdl9jdHJfaW5mbyAqY2lfcHRyOworICAgIHVuc2lnbmVk IGludCBmaV9pZHg7CisgICAgdW5zaWduZWQgaW50IGN0X2lkeDsKKworICAgIGZvciAoIGZpX2lk eCA9IDA7IGZpX2lkeCA8IGluZm8tPm5fZnVuY3Rpb25zOyBmaV9pZHgrKyApCisgICAgeworICAg ICAgICBjaV9wdHIgPSBpbmZvLT5mdW5jdGlvbnNbZmlfaWR4XS0+Y3RyczsKKworICAgICAgICBm b3IgKCBjdF9pZHggPSAwOyBjdF9pZHggPCBHQ09WX0NPVU5URVJTOyBjdF9pZHgrKyApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGlmICggIWNvdW50ZXJfYWN0aXZlKGluZm8sIGN0X2lkeCkgKQor ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBtZW1zZXQoY2lfcHRyLT52 YWx1ZXMsIDAsIHNpemVvZihnY292X3R5cGUpICogY2lfcHRyLT5udW0pOworICAgICAgICAgICAg Y2lfcHRyKys7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NvbnN0IGNoYXIgKmdjb3ZfaW5mb19m aWxlbmFtZShzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvKQoreworICAgIHJldHVybiBpbmZvLT5maWxl bmFtZTsKK30KKworCisvKioKKyAqIGdjb3ZfaW5mb190b19nY2RhIC0gY29udmVydCBwcm9maWxp bmcgZGF0YSBzZXQgdG8gZ2NkYSBmaWxlIGZvcm1hdAorICogQGJ1ZmZlcjogdGhlIGJ1ZmZlciB0 byBzdG9yZSBmaWxlIGRhdGEgb3IgJU5VTEwgaWYgbm8gZGF0YSBzaG91bGQgYmUgc3RvcmVkCisg KiBAaW5mbzogcHJvZmlsaW5nIGRhdGEgc2V0IHRvIGJlIGNvbnZlcnRlZAorICoKKyAqIFJldHVy bnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUvd291bGQgaGF2ZSBiZWVuIHN0b3JlZCBp bnRvIHRoZSBidWZmZXIuCisgKi8KK3NpemVfdCBnY292X2luZm9fdG9fZ2NkYShjaGFyICpidWZm ZXIsIHN0cnVjdCBnY292X2luZm8gKmluZm8pCit7CisgICAgc3RydWN0IGdjb3ZfZm5faW5mbyAq ZmlfcHRyOworICAgIHN0cnVjdCBnY292X2N0cl9pbmZvICpjaV9wdHI7CisgICAgdW5zaWduZWQg aW50IGZpX2lkeDsKKyAgICB1bnNpZ25lZCBpbnQgY3RfaWR4OworICAgIHVuc2lnbmVkIGludCBj dl9pZHg7CisgICAgc2l6ZV90IHBvcyA9IDA7CisKKyAgICAvKiBGaWxlIGhlYWRlci4gKi8KKyAg ICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBwb3MsIEdDT1ZfREFUQV9NQUdJQyk7Cisg ICAgcG9zICs9IGdjb3Zfc3RvcmVfdTMyKGJ1ZmZlciwgcG9zLCBpbmZvLT52ZXJzaW9uKTsKKyAg ICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBwb3MsIGluZm8tPnN0YW1wKTsKKworICAg IGZvciAoIGZpX2lkeCA9IDA7IGZpX2lkeCA8IGluZm8tPm5fZnVuY3Rpb25zOyBmaV9pZHgrKyAp CisgICAgeworICAgICAgICBmaV9wdHIgPSBpbmZvLT5mdW5jdGlvbnNbZmlfaWR4XTsKKworICAg ICAgICAvKiBGdW5jdGlvbiByZWNvcmQuICovCisgICAgICAgIHBvcyArPSBnY292X3N0b3JlX3Uz MihidWZmZXIsIHBvcywgR0NPVl9UQUdfRlVOQ1RJT04pOworICAgICAgICBwb3MgKz0gZ2Nvdl9z dG9yZV91MzIoYnVmZmVyLCBwb3MsIEdDT1ZfVEFHX0ZVTkNUSU9OX0xFTkdUSCk7CisgICAgICAg IHBvcyArPSBnY292X3N0b3JlX3UzMihidWZmZXIsIHBvcywgZmlfcHRyLT5pZGVudCk7CisgICAg ICAgIHBvcyArPSBnY292X3N0b3JlX3UzMihidWZmZXIsIHBvcywgZmlfcHRyLT5saW5lbm9fY2hl Y2tzdW0pOworICAgICAgICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBwb3MsIGZpX3B0 ci0+Y2ZnX2NoZWNrc3VtKTsKKworICAgICAgICBjaV9wdHIgPSBmaV9wdHItPmN0cnM7CisKKyAg ICAgICAgZm9yICggY3RfaWR4ID0gMDsgY3RfaWR4IDwgR0NPVl9DT1VOVEVSUzsgY3RfaWR4Kysg KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoISBjb3VudGVyX2FjdGl2ZShpbmZvLCBjdF9p ZHgpICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyogQ291bnRl ciByZWNvcmQuICovCisgICAgICAgICAgICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBw b3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDT1ZfVEFHX0ZPUl9DT1VOVEVSKGN0X2lk eCkpOworICAgICAgICAgICAgcG9zICs9IGdjb3Zfc3RvcmVfdTMyKGJ1ZmZlciwgcG9zLCBjaV9w dHItPm51bSAqIDIpOworCisgICAgICAgICAgICBmb3IgKCBjdl9pZHggPSAwOyBjdl9pZHggPCBj aV9wdHItPm51bTsgY3ZfaWR4KysgKQorICAgICAgICAgICAgICAgIHBvcyArPSBnY292X3N0b3Jl X3U2NChidWZmZXIsIHBvcywgY2lfcHRyLT52YWx1ZXNbY3ZfaWR4XSk7CisKKyAgICAgICAgICAg IGNpX3B0cisrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBvczsKK30KKworLyoK KyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIK KyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1v ZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2djb3YvZ2Nvdi5j IGIveGVuL2NvbW1vbi9nY292L2djb3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi45NDk0MzI2Ci0tLSAvZGV2L251bGwKKysrIGIveGVuL2NvbW1vbi9nY292L2djb3YuYwpA QCAtMCwwICsxLDI1NCBAQAorLyoKKyAqICBUaGlzIGNvZGUgbWFpbnRhaW5zIGEgbGlzdCBvZiBh Y3RpdmUgcHJvZmlsaW5nIGRhdGEgc3RydWN0dXJlcy4KKyAqCisgKiAgICBDb3B5cmlnaHQgSUJN IENvcnAuIDIwMDkKKyAqICAgIEF1dGhvcihzKTogUGV0ZXIgT2JlcnBhcmxlaXRlciA8b2JlcnBh ckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogICAgVXNlcyBnY2MtaW50ZXJuYWwgZGF0YSBk ZWZpbml0aW9ucy4KKyAqICAgIEJhc2VkIG9uIHRoZSBnY292LWtlcm5lbCBwYXRjaCBieToKKyAq ICAgICAgIEh1YmVydHVzIEZyYW5rZSA8ZnJhbmtlaEB1cy5pYm0uY29tPgorICogICAgICAgTmln ZWwgSGluZHMgPG5oaW5kc0B1cy5pYm0uY29tPgorICogICAgICAgUmFqYW4gUmF2aW5kcmFuIDxy YWphbmNyQHVzLmlibS5jb20+CisgKiAgICAgICBQZXRlciBPYmVycGFybGVpdGVyIDxvYmVycGFy QGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqICAgICAgIFBhdWwgTGFyc29uCisgKi8KKworI2luY2x1 ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KKyNpbmNsdWRl IDx4ZW4vdHlwZXMuaD4KKworI2luY2x1ZGUgPHB1YmxpYy9zeXNjdGwuaD4KKworI2luY2x1ZGUg Imdjb3YuaCIKKworLyoqCisgKiBnY292X3N0b3JlX3UzMiAtIHN0b3JlIDMyIGJpdCBudW1iZXIg aW4gZ2NvdiBmb3JtYXQgdG8gYnVmZmVyCisgKiBAYnVmZmVyOiB0YXJnZXQgYnVmZmVyIG9yIE5V TEwKKyAqIEBvZmY6IG9mZnNldCBpbnRvIHRoZSBidWZmZXIKKyAqIEB2OiB2YWx1ZSB0byBiZSBz dG9yZWQKKyAqCisgKiBOdW1iZXIgZm9ybWF0IGRlZmluZWQgYnkgZ2NjOiBudW1iZXJzIGFyZSBy ZWNvcmRlZCBpbiB0aGUgMzIgYml0CisgKiB1bnNpZ25lZCBiaW5hcnkgZm9ybSBvZiB0aGUgZW5k aWFubmVzcyBvZiB0aGUgbWFjaGluZSBnZW5lcmF0aW5nIHRoZQorICogZmlsZS4gUmV0dXJucyB0 aGUgbnVtYmVyIG9mIGJ5dGVzIHN0b3JlZC4gSWYgQGJ1ZmZlciBpcyAlTlVMTCwgZG9lc24ndAor ICogc3RvcmUgYW55dGhpbmcuCisgKi8KK3NpemVfdCBnY292X3N0b3JlX3UzMih2b2lkICpidWZm ZXIsIHNpemVfdCBvZmYsIHUzMiB2KQoreworICAgIHUzMiAqZGF0YTsKKworICAgIGlmICggYnVm ZmVyICkKKyAgICB7CisgICAgICAgIGRhdGEgPSBidWZmZXIgKyBvZmY7CisgICAgICAgICpkYXRh ID0gdjsKKyAgICB9CisKKyAgICByZXR1cm4gc2l6ZW9mKCpkYXRhKTsKK30KKworLyoqCisgKiBn Y292X3N0b3JlX3U2NCAtIHN0b3JlIDY0IGJpdCBudW1iZXIgaW4gZ2NvdiBmb3JtYXQgdG8gYnVm ZmVyCisgKiBAYnVmZmVyOiB0YXJnZXQgYnVmZmVyIG9yIE5VTEwKKyAqIEBvZmY6IG9mZnNldCBp bnRvIHRoZSBidWZmZXIKKyAqIEB2OiB2YWx1ZSB0byBiZSBzdG9yZWQKKyAqCisgKiBOdW1iZXIg Zm9ybWF0IGRlZmluZWQgYnkgZ2NjOiBudW1iZXJzIGFyZSByZWNvcmRlZCBpbiB0aGUgMzIgYml0 CisgKiB1bnNpZ25lZCBiaW5hcnkgZm9ybSBvZiB0aGUgZW5kaWFubmVzcyBvZiB0aGUgbWFjaGlu ZSBnZW5lcmF0aW5nIHRoZQorICogZmlsZS4gNjQgYml0IG51bWJlcnMgYXJlIHN0b3JlZCBhcyB0 d28gMzIgYml0IG51bWJlcnMsIHRoZSBsb3cgcGFydAorICogZmlyc3QuIFJldHVybnMgdGhlIG51 bWJlciBvZiBieXRlcyBzdG9yZWQuIElmIEBidWZmZXIgaXMgJU5VTEwsIGRvZXNuJ3Qgc3RvcmUK KyAqIGFueXRoaW5nLgorICovCitzaXplX3QgZ2Nvdl9zdG9yZV91NjQodm9pZCAqYnVmZmVyLCBz aXplX3Qgb2ZmLCB1NjQgdikKK3sKKyAgICB1MzIgKmRhdGE7CisKKyAgICBpZiAoIGJ1ZmZlciAp CisgICAgeworICAgICAgICBkYXRhID0gYnVmZmVyICsgb2ZmOworCisgICAgICAgIGRhdGFbMF0g PSAodiAmIDB4ZmZmZmZmZmZVTCk7CisgICAgICAgIGRhdGFbMV0gPSAodiA+PiAzMik7CisgICAg fQorCisgICAgcmV0dXJuIHNpemVvZigqZGF0YSkgKiAyOworfQorCitzdGF0aWMgc2l6ZV90IGdj b3ZfaW5mb19wYXlsb2FkX3NpemUoc3RydWN0IGdjb3ZfaW5mbyAqaW5mbykKK3sKKyAgICByZXR1 cm4gZ2Nvdl9pbmZvX3RvX2djZGEoTlVMTCwgaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgZ2Nvdl9p bmZvX2R1bXBfcGF5bG9hZChzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY2hhcikgYnVmZmVyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpvZmYpCit7CisgICAg Y2hhciAqYnVmOworICAgIHVpbnQzMl90IGJ1Zl9zaXplOworICAgIGludCByZXQ7CisKKyAgICAv KgorICAgICAqIEFsbG9jYXRlIGEgYnVmZmVyIGFuZCBkdW1wIHBheWxvYWQgdGhlcmUuIFRoaXMg aGVscHMgdXMgdG8gbm90CisgICAgICogaGF2ZSBjb3B5X3RvX2d1ZXN0IGluIG90aGVyIGZ1bmN0 aW9ucyBhbmQgcmV0YWluIHRoZWlyIHNpbXBsZQorICAgICAqIHNlbWFudGljcy4KKyAgICAgKi8K KworICAgIGJ1Zl9zaXplID0gZ2Nvdl9pbmZvX3BheWxvYWRfc2l6ZShpbmZvKTsKKyAgICBidWYg PSB4bWFsbG9jX2FycmF5KGNoYXIsIGJ1Zl9zaXplKTsKKworICAgIGlmICggIWJ1ZiApCisgICAg eworICAgICAgICByZXQgPSAtRU5PTUVNOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAg ICBnY292X2luZm9fdG9fZ2NkYShidWYsIGluZm8pOworCisgICAgaWYgKCBjb3B5X3RvX2d1ZXN0 X29mZnNldChidWZmZXIsICpvZmYsIGJ1ZiwgYnVmX3NpemUpICkKKyAgICB7CisgICAgICAgIHJl dCA9IC1FRkFVTFQ7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICAqb2ZmICs9IGJ1Zl9z aXplOworCisgICAgcmV0ID0gMDsKK291dDoKKyAgICB4ZnJlZShidWYpOworICAgIHJldHVybiBy ZXQ7CisKK30KKworc3RhdGljIHVpbnQzMl90IGdjb3ZfZ2V0X3NpemUodm9pZCkKK3sKKyAgICB1 aW50MzJfdCB0b3RhbF9zaXplID0gMDsKKyAgICBzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvID0gTlVM TDsKKworICAgIC8qIE1hZ2ljIG51bWJlciBYQ09WICovCisgICAgdG90YWxfc2l6ZSArPSBzaXpl b2YodWludDMyX3QpOworCisgICAgd2hpbGUgKCAoaW5mbyA9IGdjb3ZfaW5mb19uZXh0KGluZm8p KSApCisgICAgeworICAgICAgICAvKiBGaWxlIG5hbWUgbGVuZ3RoLCBpbmNsdWRpbmcgdHJhaWxp bmcgXDAgKi8KKyAgICAgICAgdG90YWxfc2l6ZSArPSBzdHJsZW4oZ2Nvdl9pbmZvX2ZpbGVuYW1l KGluZm8pKSArIDE7CisKKyAgICAgICAgLyogUGF5bG9hZCBzaXplIGZpZWxkICovCisgICAgICAg IHRvdGFsX3NpemUgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKworICAgICAgICAvKiBQYXlsb2FkIGl0 c2VsZiAqLworICAgICAgICB0b3RhbF9zaXplICs9IGdjb3ZfaW5mb19wYXlsb2FkX3NpemUoaW5m byk7CisgICAgfQorCisgICAgcmV0dXJuIHRvdGFsX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkIGdj b3ZfcmVzZXRfYWxsX2NvdW50ZXJzKHZvaWQpCit7CisgICAgc3RydWN0IGdjb3ZfaW5mbyAqaW5m byA9IE5VTEw7CisKKyAgICB3aGlsZSAoIChpbmZvID0gZ2Nvdl9pbmZvX25leHQoaW5mbykpICkK KyAgICAgICAgZ2Nvdl9pbmZvX3Jlc2V0KGluZm8pOworfQorCitzdGF0aWMgaW50IGdjb3ZfZHVt cF9vbmVfcmVjb3JkKHN0cnVjdCBnY292X2luZm8gKmluZm8sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY2hhcikgYnVmZmVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb2ZmKQoreworICAgIHVpbnQzMl90 IHBheWxvYWRfc2l6ZTsKKyAgICB1aW50MzJfdCBsZW47CisKKyAgICAvKiBGaWxlIG5hbWUsIGlu Y2x1ZGluZyB0cmFpbGluZyBcMCAqLworICAgIGxlbiA9IHN0cmxlbihnY292X2luZm9fZmlsZW5h bWUoaW5mbykpICsgMTsKKyAgICBpZiAoIGNvcHlfdG9fZ3Vlc3Rfb2Zmc2V0KGJ1ZmZlciwgKm9m ZiwgZ2Nvdl9pbmZvX2ZpbGVuYW1lKGluZm8pLCBsZW4pICkKKyAgICAgICAgcmV0dXJuIC1FRkFV TFQ7CisgICAgKm9mZiArPSBsZW47CisKKyAgICBwYXlsb2FkX3NpemUgPSBnY292X2luZm9fcGF5 bG9hZF9zaXplKGluZm8pOworICAgIC8qIFBheWxvYWQgc2l6ZSAqLworICAgIGlmICggY29weV90 b19ndWVzdF9vZmZzZXQoYnVmZmVyLCAqb2ZmLCAoY2hhciopJnBheWxvYWRfc2l6ZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCkpICkKKyAgICAgICAgcmV0 dXJuIC1FRkFVTFQ7CisgICAgKm9mZiArPSBzaXplb2YodWludDMyX3QpOworCisgICAgLyogUGF5 bG9hZCBpdHNlbGYgKi8KKyAgICByZXR1cm4gZ2Nvdl9pbmZvX2R1bXBfcGF5bG9hZChpbmZvLCBi dWZmZXIsIG9mZik7Cit9CisKK3N0YXRpYyBpbnQgZ2Nvdl9kdW1wX2FsbChYRU5fR1VFU1RfSEFO RExFX1BBUkFNKGNoYXIpIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCAqYnVmZmVyX3NpemUpCit7CisgICAgdWludDMyX3Qgb2ZmOworICAgIHVpbnQzMl90IG1hZ2lj ID0gWEVOX0dDT1ZfRk9STUFUX01BR0lDOworICAgIHN0cnVjdCBnY292X2luZm8gKmluZm8gPSBO VUxMOworICAgIGludCByZXQ7CisKKyAgICBpZiAoICpidWZmZXJfc2l6ZSA8IGdjb3ZfZ2V0X3Np emUoKSApCisgICAgeworICAgICAgICByZXQgPSAtRU5PQlVGUzsKKyAgICAgICAgZ290byBvdXQ7 CisgICAgfQorCisgICAgb2ZmID0gMDsKKworICAgIC8qIE1hZ2ljIG51bWJlciAqLworICAgIGlm ICggY29weV90b19ndWVzdF9vZmZzZXQoYnVmZmVyLCBvZmYsIChjaGFyICopJm1hZ2ljLCBzaXpl b2YobWFnaWMpKSApCisgICAgeworICAgICAgICByZXQgPSAtRUZBVUxUOworICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisgICAgb2ZmICs9IHNpemVvZihtYWdpYyk7CisKKyAgICB3aGlsZSAoIChp bmZvID0gZ2Nvdl9pbmZvX25leHQoaW5mbykpICkKKyAgICB7CisgICAgICAgIHJldCA9IGdjb3Zf ZHVtcF9vbmVfcmVjb3JkKGluZm8sIGJ1ZmZlciwgJm9mZik7CisgICAgICAgIGlmICggcmV0ICkK KyAgICAgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgICpidWZmZXJfc2l6ZSA9IG9mZjsK KworICAgIHJldCA9IDA7CitvdXQ6CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IHN5c2N0bF9n Y292X29wKHhlbl9zeXNjdGxfZ2Nvdl9vcF90ICpvcCkKK3sKKyAgICBpbnQgcmV0OworCisgICAg c3dpdGNoICggb3AtPmNtZCApCisgICAgeworICAgIGNhc2UgWEVOX1NZU0NUTF9HQ09WX2dldF9z aXplOgorICAgICAgICBvcC0+c2l6ZSA9IGdjb3ZfZ2V0X3NpemUoKTsKKyAgICAgICAgcmV0ID0g MDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYRU5fU1lTQ1RMX0dDT1ZfcmVhZDoKKyAgICB7 CisgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY2hhcikgYnVmOworICAgICAgICB1aW50 MzJfdCBzaXplID0gb3AtPnNpemU7CisKKyAgICAgICAgYnVmID0gZ3Vlc3RfaGFuZGxlX2Nhc3Qo b3AtPmJ1ZmZlciwgY2hhcik7CisKKyAgICAgICAgcmV0ID0gZ2Nvdl9kdW1wX2FsbChidWYsICZz aXplKTsKKyAgICAgICAgb3AtPnNpemUgPSBzaXplOworCisgICAgICAgIGJyZWFrOworICAgIH0K KyAgICBjYXNlIFhFTl9TWVNDVExfR0NPVl9yZXNldDoKKyAgICAgICAgZ2Nvdl9yZXNldF9hbGxf Y291bnRlcnMoKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs dDoKKyAgICAgICAgcmV0ID0gLUVJTlZBTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg cmV0dXJuIHJldDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAq IGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6 IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94 ZW4vY29tbW9uL2djb3YvZ2Nvdi5oIGIveGVuL2NvbW1vbi9nY292L2djb3YuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTgxMGI1Ci0tLSAvZGV2L251bGwKKysrIGIveGVu L2NvbW1vbi9nY292L2djb3YuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9HQ09WX0hfCisj ZGVmaW5lIF9HQ09WX0hfCisKKyNpbmNsdWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVk ZSA8eGVuL3R5cGVzLmg+CisKKy8qCisgKiBQcm9maWxpbmcgZGF0YSB0eXBlcyB1c2VkIGZvciBn Y2MgMy40IGFuZCBhYm92ZSAtIHRoZXNlIGFyZSBkZWZpbmVkIGJ5CisgKiBnY2MgYW5kIG5lZWQg dG8gYmUga2VwdCBhcyBjbG9zZSB0byB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBhcyBwb3NzaWJs ZSB0bworICogcmVtYWluIGNvbXBhdGlibGUuCisgKi8KKyNkZWZpbmUgR0NPVl9EQVRBX01BR0lD CQkoKHVuc2lnbmVkIGludCkgMHg2NzYzNjQ2MSkKKyNkZWZpbmUgR0NPVl9UQUdfRlVOQ1RJT04J KCh1bnNpZ25lZCBpbnQpIDB4MDEwMDAwMDApCisjZGVmaW5lIEdDT1ZfVEFHX0NPVU5URVJfQkFT RQkoKHVuc2lnbmVkIGludCkgMHgwMWExMDAwMCkKKyNkZWZpbmUgR0NPVl9UQUdfRk9SX0NPVU5U RVIoY291bnQpCQkJCQlcCisJKEdDT1ZfVEFHX0NPVU5URVJfQkFTRSArICgodW5zaWduZWQgaW50 KSAoY291bnQpIDw8IDE3KSkKKworI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKK3R5cGVkZWYgbG9u ZyBnY292X3R5cGU7CisjZWxzZQordHlwZWRlZiBsb25nIGxvbmcgZ2Nvdl90eXBlOworI2VuZGlm CisKKy8qIE9wYXF1ZSBnY292X2luZm8gLS0gdGllZCB0byBzcGVjaWZpYyBnY2MgZ2NvdiBmb3Jt YXRzICovCitzdHJ1Y3QgZ2Nvdl9pbmZvOworCit2b2lkIGdjb3ZfaW5mb19saW5rKHN0cnVjdCBn Y292X2luZm8gKmluZm8pOworc3RydWN0IGdjb3ZfaW5mbyAqZ2Nvdl9pbmZvX25leHQoc3RydWN0 IGdjb3ZfaW5mbyAqaW5mbyk7Cit2b2lkIGdjb3ZfaW5mb19yZXNldChzdHJ1Y3QgZ2Nvdl9pbmZv ICppbmZvKTsKK2NvbnN0IGNoYXIgKmdjb3ZfaW5mb19maWxlbmFtZShzdHJ1Y3QgZ2Nvdl9pbmZv ICppbmZvKTsKK3NpemVfdCBnY292X2luZm9fdG9fZ2NkYShjaGFyICpidWZmZXIsIHN0cnVjdCBn Y292X2luZm8gKmluZm8pOworCitzaXplX3QgZ2Nvdl9zdG9yZV91MzIodm9pZCAqYnVmZmVyLCBz aXplX3Qgb2ZmLCB1MzIgdik7CitzaXplX3QgZ2Nvdl9zdG9yZV91NjQodm9pZCAqYnVmZmVyLCBz aXplX3Qgb2ZmLCB1NjQgdik7CisKKyNlbmRpZgkvKiBfR0NPVl9IXyAqLwpkaWZmIC0tZ2l0IGEv eGVuL2NvbW1vbi9nY292L2djb3ZfYmFzZS5jIGIveGVuL2NvbW1vbi9nY292L2djb3ZfYmFzZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NmExYjkKLS0tIC9kZXYvbnVs bAorKysgYi94ZW4vY29tbW9uL2djb3YvZ2Nvdl9iYXNlLmMKQEAgLTAsMCArMSw2NCBAQAorLyoK KyAqIENvbW1vbiBjb2RlIGFjcm9zcyBnY292IGltcGxlbWVudGF0aW9ucworICoKKyAqIENvcHly aWdodCBDaXRyaXggU3lzdGVtcyBSJkQgVUsKKyAqIEF1dGhvcihzKTogV2VpIExpdSA8d2VpLmxp dTJAY2l0cml4LmNvbT4KKyAqCisgKiAgICBVc2VzIGdjYy1pbnRlcm5hbCBkYXRhIGRlZmluaXRp b25zLgorICogICAgQmFzZWQgb24gdGhlIGdjb3Yta2VybmVsIHBhdGNoIGJ5OgorICogICAgICAg SHViZXJ0dXMgRnJhbmtlIDxmcmFua2VoQHVzLmlibS5jb20+CisgKiAgICAgICBOaWdlbCBIaW5k cyA8bmhpbmRzQHVzLmlibS5jb20+CisgKiAgICAgICBSYWphbiBSYXZpbmRyYW4gPHJhamFuY3JA dXMuaWJtLmNvbT4KKyAqICAgICAgIFBldGVyIE9iZXJwYXJsZWl0ZXIgPG9iZXJwYXJAbGludXgu dm5ldC5pYm0uY29tPgorICogICAgICAgUGF1bCBMYXJzb24KKyAqLworCisjaW5jbHVkZSAiZ2Nv di5oIgorCisvKgorICogX19nY292X2luaXQgaXMgY2FsbGVkIGJ5IGdjYy1nZW5lcmF0ZWQgY29u c3RydWN0b3IgY29kZSBmb3IgZWFjaCBvYmplY3QKKyAqIGZpbGUgY29tcGlsZWQgd2l0aCAtZnBy b2ZpbGUtYXJjcy4KKyAqCisgKiBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5 IGR1cmluZyBpbml0aWFsaXphdGlvbiBpcyBjYWxsZWQgZnJvbQorICogYSAudGV4dCBzZWN0aW9u IHdoaWNoIGlzIHN0aWxsIHByZXNlbnQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gc28gbm90IGRlY2xh cmUKKyAqIGFzIF9faW5pdC4KKyAqLwordm9pZCBfX2djb3ZfaW5pdChzdHJ1Y3QgZ2Nvdl9pbmZv ICppbmZvKQoreworICAgIC8qIExpbmsgYWxsIGdjb3YgaW5mbyB0b2dldGhlci4gKi8KKyAgICBn Y292X2luZm9fbGluayhpbmZvKTsKK30KKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtYXkgYmUg cmVmZXJlbmNlZCBieSBnY2MtZ2VuZXJhdGVkIHByb2ZpbGluZyBjb2RlIGJ1dCBzZXJ2ZQorICog bm8gZnVuY3Rpb24gZm9yIFhlbi4KKyAqLwordm9pZCBfX2djb3ZfZmx1c2godm9pZCkKK3sKKyAg ICAvKiBVbnVzZWQuICovCit9CisKK3ZvaWQgX19nY292X21lcmdlX2FkZChnY292X3R5cGUgKmNv dW50ZXJzLCB1bnNpZ25lZCBpbnQgbl9jb3VudGVycykKK3sKKyAgICAvKiBVbnVzZWQuICovCit9 CisKK3ZvaWQgX19nY292X21lcmdlX3NpbmdsZShnY292X3R5cGUgKmNvdW50ZXJzLCB1bnNpZ25l ZCBpbnQgbl9jb3VudGVycykKK3sKKyAgICAvKiBVbnVzZWQuICovCit9CisKK3ZvaWQgX19nY292 X21lcmdlX2RlbHRhKGdjb3ZfdHlwZSAqY291bnRlcnMsIHVuc2lnbmVkIGludCBuX2NvdW50ZXJz KQoreworICAgIC8qIFVudXNlZC4gKi8KK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAq IG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0Cisg KiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRp ZmYgLS1naXQgYS94ZW4vY29tbW9uL3N5c2N0bC5jIGIveGVuL2NvbW1vbi9zeXNjdGwuYwppbmRl eCAyY2FjNDUxLi4wM2NjYTVjIDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL3N5c2N0bC5jCisrKyBi L3hlbi9jb21tb24vc3lzY3RsLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx4c20veHNt Lmg+CiAjaW5jbHVkZSA8eGVuL3Btc3RhdC5oPgogI2luY2x1ZGUgPHhlbi9saXZlcGF0Y2guaD4K KyNpbmNsdWRlIDx4ZW4vZ2Nvdi5oPgogCiBsb25nIGRvX3N5c2N0bChYRU5fR1VFU1RfSEFORExF X1BBUkFNKHhlbl9zeXNjdGxfdCkgdV9zeXNjdGwpCiB7CkBAIC0zOTUsNiArMzk2LDEzIEBAIGxv bmcgZG9fc3lzY3RsKFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX3N5c2N0bF90KSB1X3N5c2N0 bCkKICAgICB9CiAgICAgYnJlYWs7CiAKKyNpZmRlZiBDT05GSUdfR0NPVgorICAgIGNhc2UgWEVO X1NZU0NUTF9nY292X29wOgorICAgICAgICByZXQgPSBzeXNjdGxfZ2Nvdl9vcCgmb3AtPnUuZ2Nv dl9vcCk7CisgICAgICAgIGNvcHliYWNrID0gMTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKwog I2lmZGVmIENPTkZJR19IQVNfUENJCiAgICAgY2FzZSBYRU5fU1lTQ1RMX3BjaXRvcG9pbmZvOgog ICAgIHsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9zeXNjdGwuaCBiL3hlbi9pbmNs dWRlL3B1YmxpYy9zeXNjdGwuaAppbmRleCBhOTM5ZmE5Li4wYmUzZGQ1IDEwMDY0NAotLS0gYS94 ZW4vaW5jbHVkZS9wdWJsaWMvc3lzY3RsLmgKKysrIGIveGVuL2luY2x1ZGUvcHVibGljL3N5c2N0 bC5oCkBAIC02NjUsNiArNjY1LDQwIEBAIHN0cnVjdCB4ZW5fc3lzY3RsX3NjaGVkdWxlcl9vcCB7 CiB0eXBlZGVmIHN0cnVjdCB4ZW5fc3lzY3RsX3NjaGVkdWxlcl9vcCB4ZW5fc3lzY3RsX3NjaGVk dWxlcl9vcF90OwogREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeGVuX3N5c2N0bF9zY2hlZHVsZXJf b3BfdCk7CiAKKy8qCisgKiBPdXRwdXQgZm9ybWF0IG9mIGdjb3YgZGF0YToKKyAqCisgKiBYRU5f R0NPVl9GT1JNQVRfTUFHSUMgWEVOX0dDT1ZfUkVDT1JEIC4uLiBYRU5fR0NPVl9SRUNPUkQKKyAq CisgKiBUaGF0IGlzLCBvbmUgbWFnaWMgbnVtYmVyIGZvbGxvd2VkIGJ5IDAgb3IgbW9yZSByZWNv cmQuCisgKgorICogVGhlIG1hZ2ljIG51bWJlciBpcyBzdG9yZWQgYXMgYW4gdWludDMyX3QgZmll bGQuCisgKgorICogVGhlIHJlY29yZCBpcyBwYWNrZWQgYW5kIHZhcmlhYmxlIGluIGxlbmd0aC4g SXQgaGFzIHRoZSBmb3JtOgorICoKKyAqICBmaWxlbmFtZTogYSBOVUxMIHRlcm1pbmF0ZWQgcGF0 aCBuYW1lIGV4dHJhY3RlZCBmcm9tIGdjb3YsIHVzZWQgdG8KKyAqICAgICAgICAgICAgY3JlYXRl IHRoZSBuYW1lIG9mIGdjZGEgZmlsZS4KKyAqICBzaXplOiAgICAgYSB1aW50MzJfdCBmaWVsZCBp bmRpY2F0aW5nIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkLCB0aGUKKyAqICAgICAgICAgICAgdW5p dCBpcyBieXRlLgorICogIHBheWxvYWQ6ICB0aGUgYWN0dWFsIHBheWxvYWQsIGxlbmd0aCBpcyBg c2l6ZScgYnl0ZXMuCisgKgorICogVXNlcnNwYWNlIHRvb2wgd2lsbCBzcGxpdCB0aGUgcmVjb3Jk IHRvIGRpZmZlcmVudCBmaWxlcy4KKyAqLworCisjZGVmaW5lIFhFTl9HQ09WX0ZPUk1BVF9NQUdJ QyAgICAweDU4NDM0ZjU2IC8qIFhDT1YgKi8KKworI2RlZmluZSBYRU5fU1lTQ1RMX0dDT1ZfZ2V0 X3NpemUgMCAvKiBHZXQgdG90YWwgc2l6ZSBvZiBvdXRwdXQgZGF0YSAqLworI2RlZmluZSBYRU5f U1lTQ1RMX0dDT1ZfcmVhZCAgICAgMSAvKiBSZWFkIG91dHB1dCBkYXRhICovCisjZGVmaW5lIFhF Tl9TWVNDVExfR0NPVl9yZXNldCAgICAyIC8qIFJlc2V0IGFsbCBjb3VudGVycyAqLworCitzdHJ1 Y3QgeGVuX3N5c2N0bF9nY292X29wIHsKKyAgICB1aW50MzJfdCBjbWQ7CisgICAgdWludDMyX3Qg c2l6ZTsgLyogSU4vT1VUOiBzaXplIG9mIHRoZSBidWZmZXIgICovCisgICAgWEVOX0dVRVNUX0hB TkRMRV82NChjaGFyKSBidWZmZXI7IC8qIE9VVCAqLworfTsKK3R5cGVkZWYgc3RydWN0IHhlbl9z eXNjdGxfZ2Nvdl9vcCB4ZW5fc3lzY3RsX2djb3Zfb3BfdDsKK0RFRklORV9YRU5fR1VFU1RfSEFO RExFKHhlbl9zeXNjdGxfZ2Nvdl9vcF90KTsKKwogI2RlZmluZSBYRU5fU1lTQ1RMX1BTUl9DTVRf Z2V0X3RvdGFsX3JtaWQgICAgICAgICAgICAwCiAjZGVmaW5lIFhFTl9TWVNDVExfUFNSX0NNVF9n ZXRfbDNfdXBzY2FsaW5nX2ZhY3RvciAgIDEKIC8qIFRoZSBMMyBjYWNoZSBzaXplIGlzIHJldHVy bmVkIGluIEtCIHVuaXQgKi8KQEAgLTEwNzMsNyArMTEwNyw3IEBAIHN0cnVjdCB4ZW5fc3lzY3Rs IHsKICNkZWZpbmUgWEVOX1NZU0NUTF9udW1haW5mbyAgICAgICAgICAgICAgICAgICAgICAxNwog I2RlZmluZSBYRU5fU1lTQ1RMX2NwdXBvb2xfb3AgICAgICAgICAgICAgICAgICAgIDE4CiAjZGVm aW5lIFhFTl9TWVNDVExfc2NoZWR1bGVyX29wICAgICAgICAgICAgICAgICAgMTkKLS8qICNkZWZp bmUgWEVOX1NZU0NUTF9jb3ZlcmFnZV9vcCAgICAgICAgICAgICAgICAgICAyMCAqLworI2RlZmlu ZSBYRU5fU1lTQ1RMX2djb3Zfb3AgICAgICAgICAgICAgICAgICAgICAgIDIwCiAjZGVmaW5lIFhF Tl9TWVNDVExfcHNyX2NtdF9vcCAgICAgICAgICAgICAgICAgICAgMjEKICNkZWZpbmUgWEVOX1NZ U0NUTF9wY2l0b3BvaW5mbyAgICAgICAgICAgICAgICAgICAyMgogI2RlZmluZSBYRU5fU1lTQ1RM X3Bzcl9jYXRfb3AgICAgICAgICAgICAgICAgICAgIDIzCkBAIC0xMTAyLDYgKzExMzYsNyBAQCBz dHJ1Y3QgeGVuX3N5c2N0bCB7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lzY3RsX2xvY2twcm9mX29w ICAgICAgIGxvY2twcm9mX29wOwogICAgICAgICBzdHJ1Y3QgeGVuX3N5c2N0bF9jcHVwb29sX29w ICAgICAgICBjcHVwb29sX29wOwogICAgICAgICBzdHJ1Y3QgeGVuX3N5c2N0bF9zY2hlZHVsZXJf b3AgICAgICBzY2hlZHVsZXJfb3A7CisgICAgICAgIHN0cnVjdCB4ZW5fc3lzY3RsX2djb3Zfb3Ag ICAgICAgICAgIGdjb3Zfb3A7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lzY3RsX3Bzcl9jbXRfb3Ag ICAgICAgIHBzcl9jbXRfb3A7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lzY3RsX3Bzcl9jYXRfb3Ag ICAgICAgIHBzcl9jYXRfb3A7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lzY3RsX3RtZW1fb3AgICAg ICAgICAgIHRtZW1fb3A7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vZ2Nvdi5oIGIveGVu L2luY2x1ZGUveGVuL2djb3YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44 YjVkOTE0Ci0tLSAvZGV2L251bGwKKysrIGIveGVuL2luY2x1ZGUveGVuL2djb3YuaApAQCAtMCww ICsxLDkgQEAKKyNpZm5kZWYgX1hFTl9HQ09WX0gKKyNkZWZpbmUgX1hFTl9HQ09WX0gKKworI2lm ZGVmIENPTkZJR19HQ09WCisjaW5jbHVkZSA8cHVibGljL3N5c2N0bC5oPgoraW50IHN5c2N0bF9n Y292X29wKHhlbl9zeXNjdGxfZ2Nvdl9vcF90ICpvcCk7CisjZW5kaWYKKworI2VuZGlmCS8qIF9Y RU5fR0NPVl9IICovCi0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=