From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony PERARD Subject: [PATCH v8 06/17] libxl_qmp: Implementation of libxl__ev_qmp_* Date: Fri, 4 Jan 2019 15:30:45 +0000 Message-ID: <20190104153056.19138-7-anthony.perard@citrix.com> References: <20190104153056.19138-1-anthony.perard@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gfRRD-0008Ll-Hj for xen-devel@lists.xenproject.org; Fri, 04 Jan 2019 15:31:07 +0000 In-Reply-To: <20190104153056.19138-1-anthony.perard@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Anthony PERARD , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpbXBsZW1lbnQgdGhlIEFQSSBsaWJ4bF9fZXZfcW1wIGRvY3VtZW50ZWQgaW4g dGhlIHByZXZpb3VzCnBhdGNoLCAibGlieGw6IERlc2lnbiBvZiBhbiBhc3luYyBBUEkgdG8gaXNz dWUgUU1QIGNvbW1hbmRzIHRvIFFFTVUiLgoKU2luY2UgdGhpcyBBUEkgaXMgdG8gaW50ZXJhY3Qg d2l0aCBRRU1VIHZpYSB0aGUgUU1QIHByb3RvY29sLCBpdCBhbHNvCmltcGxlbWVudCBhIFFNUCBj bGllbnQuIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgUUVNVSBNYWNoaW5lIFByb3RvY29sCihR TVApIGNhbiBiZSBmb3VuZCBpbiB0aGUgUUVNVSByZXBvc2l0b3J5IGF0OgpodHRwczovL2dpdC5x ZW11Lm9yZy8/cD1xZW11LmdpdDthPWJsb2JfcGxhaW47Zj1kb2NzL2ludGVyb3AvcW1wLXNwZWMu dHh0CgpTaWduZWQtb2ZmLWJ5OiBBbnRob255IFBFUkFSRCA8YW50aG9ueS5wZXJhcmRAY2l0cml4 LmNvbT4KLS0tCgpOb3RlczoKICAgIHY4OgogICAgLSB1c2luZyBTVEFURV9BT19HQyBldmVyeXdo ZXJlCiAgICAtIGNhbGwgcW1wX2V2X2Vuc3VyZV9yZWFkaW5nX3dyaXRpbmcgZnJvbSBxbXBfZXZf c2V0X3N0YXRlIGluc3RlYWQgb2YKICAgICAgb3RoZXIgcGxhY2VzLiBCdXQgYWRkIGEgY2FsbCB0 byBxbXBfZXZfZW5zdXJlX3JlYWRpbmdfd3JpdGluZyB3aGVuIHRoZQogICAgICB0eF9idWYgaXMg dXBkYXRlZCAoZGF0YSBiZWVuIHRyYW5zbWl0dGVkIHRvIFFFTVUpCiAgICAtIGFzc2VydCByZXR1 cm4gdmFsdWUgb2Ygd3JpdGUoKS4KICAgIAogICAgLSBmaXggaW1wbGVtZW50YXRpb24gZG9jIG9m IHJ4X2J1ZiAoY2FuIGJlIGZyZWUgd2hlbiB1c2VkKQogICAgLSBmaXggZG9jIG9mIHFtcF9ldl9l bnN1cmVfcmVhZGluZ193cml0aW5nCiAgICAKICAgIC0gcmVvcmRlciBxbXBfZXZfcGFyc2VfZXJy b3JfbWVzc2FnZXMgYW5kIHFtcF9ldl9oYW5kbGVfbWVzc2FnZQogICAgCiAgICB2NzoKICAgIC0g TWFrZSB1c2Ugb2YgdGhlIG5ldyBgYW9gIGZpZWxkIGZpbGxlZCBieSB0aGUgY2FsbGVyCiAgICAg IChubyBtb3JlIGZyZWUodHhfYnVmKSkKICAgIC0gSGF2ZSByZXdvcmtlZCB0aGUgc3RhdGUgdGFi bGUgdG8gYmUgbW9yZSBhY2N1cmF0ZSwgZWFzaWVyIHRvIHJlYWQgYW5kCiAgICAgIHdpdGggYmV0 dGVyIGRlc2Mgb2YgdGhlIHdhaXRpbmdfcmVwbHkgc3RhdGUgd2l0aCBzdWItc3RhdGVzIGFzIHdl bGwgYXMKICAgICAgYmV0dGVyIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0ZSBvZiB0aGUgZXZfZmQg YGVmZGAuCiAgICAtIFRoZXJlIGlzIHN0YXRlIHRyYW5zaXRpb24gY2hhbmdlcywgbm93IHdlIGhh dmUgY2FwLm5lZyAtPgogICAgICB3YWl0aW5nX3JlcGx5IChiZWZvcmUgaXQgd2FzIGNhcC5uZWcg LT4gY29ubmVjdGVkIC0+IHdhaXRpbmdfcmVwbHkpLAogICAgICB0aGF0IG1ha2VzIHRoZSBpbnRl cm5hbCBjb25uZWN0ZWQgc3RhdGUgdGhlIHNhbWUgYXMgdGhlIGV4dGVybmFsCiAgICAgIENvbm5l Y3RlZCBzdGF0ZS4KICAgIC0gdGhlcmUgYXJlIG5vdyAzIGRpZmZlcmVudCBpZCB2YXJpYWJsZSBp bnN0ZWFkIG9mIGEgc2luZ2xlIG9uZSwgdGhlCiAgICAgIGN1cnJlbnRseSBzZW50IG9uZSBgaWRg LCB0aGUgbmV4dCBvbmUgYG5leHRfaWRgLCBhbmQgdGhlIG9uZQogICAgICBhc3NvY2lhdGVkIHdp dGggdGhlIGNhbGxlcidzIGNvbW1hbmQgYG1zZ19pZGAsIGBpZGAgd2lsbCBhbHdheXMgYmUgdGhl CiAgICAgIGZvciB0aGUgbmV4dCBleHBlY3RlZCBtZXNzYWdlIGZyb20gUUVNVS4KICAgIC0gcW1w X2V2X2ZkX2NhbGxiYWNrIG5vdyBjaGVjayBmb3IgUE9MTEVSUiwgYW5kIHJlYWQgYXN5bmMgZXJy b3Igd2l0aAogICAgICBnZXRzb2Nrb3B0KFNPX0VSUk9SKS4KICAgIC0gcW1wX2V2X2NhbGxiYWNr X3JlYWRhYmxlIHRha2VzIGNhcmUgb25jZSBhZ2FpbiB0byBhbHNvIHBhcnNlIG1lc3NhZ2VzLgog ICAgICBCdXQgaXQgbm93IGZpcnN0IGF0dGVtcHQgdG8gcmVhZCBtZXNzYWdlcyB0aGF0IHdvdWxk IGJlIGluIHRoZSByeF9idWYKICAgICAgYmVmb3JlIHJlYWRpbmcgZnJvbSB0aGUgc29ja2V0Lgog ICAgLSBTb21lIGZ1bmN0aW9ucyBzdGF0ZSBjaGFuZ2VzIGhhdmUgYmVlbiB1cGRhdGVkLAogICAg ICBxbXBfZXZfZW5zdXJlX3JlYWRpbmdfd3JpdGluZywgcW1wX2V2X3NldF9zdGF0ZSwKICAgICAg cW1wX2V2X2NhbGxiYWNrX3dyaXRhYmxlLCBxbXBfZXZfY2FsbGJhY2tfcmVhZGFibGUKICAgIC0g SGF2ZSBjbGVhbmVkIHVwIHFtcF9ldl9lbnN1cmVfcmVhZGluZ193cml0aW5nCiAgICAtIEhhdmUg Y2xlYW5lZCB1cCBxbXBfZXJyb3JfY2xhc3NfdG9fbGlieGxfZXJyb3JfY29kZSwgYW5kIGxvZyB1 bmtub3duCiAgICAgIGVycm9yIGNsYXNzZXMuCiAgICAtIEluIHFtcF9ldl9jYWxsYmFja19yZWFk YWJsZSwgdGhlIHNpemUgaW5jcmVhc2Ugb2YgdGhlIGJ1ZmZlciBoYXZlIGJlZW4KICAgICAgcmV3 b3JrZWQgdG8gdXBkYXRlIGJvdGggcnhfYnVmX3NpemUgYW5kIHJ4X2J1ZiBhdCB0aGUgc2FtZSB0 aW1lLCBhbmQKICAgICAgcmVtb3ZlIHRoZSB1c2Ugb2YgbWF4KCkKICAgIC0gUmV0dXJuIHZhbHVl IG9mIHFtcF9wcmVwYXJlX2NtZCBjYWxsZXMgaXMgY2hlY2tlZCBhbmQgbG9nZ2VkIG9uIGVycm9y LgogICAgLSBjb21tZW50cyBpbiBSSFMgb2Ygc3RydWN0CiAgICAtIE5ldyBxbXBfZXZfdHhfYnVm X2NsZWFyIGZ1bmMKICAgIC0gQWRkIGEgbGluayB0byB0aGUgUU1QIHNwZWMuCiAgICAtIHVwZGF0 ZSBjYWxsZXJzIG9mIHFtcF9wcmVwYXJlX2NtZCwgd2hpY2ggZG9lc24ndCBwcm92aWRlIHRoZSBz dHJpbmcKICAgICAgbGVuZ2h0IGFueW1vcmUgYWxzbyByZW1vdmUgZXYtPm1zZ19sZW4KICAgIC0g cmVuYW1lIGludGVybmFsIGZpZWxkcyBxbXBfY2ZkLCBxbXBfZWZkLCBxbXBfc3RhdGUgdG8gY2Zk LCBlZmQgYW5kCiAgICAgIHN0YXRlLgogICAgLSBjaGFuZ2UgcW1wX2V2X2Nvbm5lY3QgdG8gb25s eSBhbGxvdyBkaXNjb25uZWN0IG9uIGVudHJ5CiAgICAtIHNxdWFzaCBxbXBfZXZfcHJlcGFyZV9j bWQgaW50byBsaWJ4bF9fZXZfcW1wX3NlbmQKICAgIC0gcmVkdWNlIG1heCByeCBidWZmZXIgc2l6 ZSB0byAxTQogICAgICBxdWVyeS12Y3B1cyB3aXRoIDcxIGNwdXMgYWN0aXZlIHlpZWxkIDE0NDg0 IGJ5dGVzLgogICAgLSB1c2UgSlNPTiB0byBwcmludCBsaWJ4bF9fanNvbl9vYmplY3QKICAgIAog ICAgdjYuMjoKICAgICAgICBBZGQgZGVmaW5pdGlvbiBvZiB0aGUgaW50ZXJuYWwgYnJva2VuIHN0 YXRlCiAgICAgICAgdXBkYXRlZCBjb21tZW50cyBhYm91dCBzdGF0ZXMKICAgIHY2LjE6CiAgICAg ICAgQWRkaW5nIHNvbWUgY29tbWVudCBhYm91dCBwb3NzaWJsZSBpbnRlcm5hbCBzdGF0ZSBjaGFu Z2VzCiAgICAKICAgIHY2OgogICAgICAgIFRoaXMgaXMgYSBzcXVhc2ggb2YgNyBjb21taXRzIG9u IHRoZSBwcmV2aW91cyB2ZXJzaW9uOgogICAgICAgIC0gbGlieGxfcW1wOiBDb25uZWN0IHRvIFFN UCBzb2NrZXQKICAgICAgICAtIGxpYnhsX3FtcDogSW1wbGVtZW50IGZkIGNhbGxiYWNrIGFuZCBy ZWFkIGRhdGEKICAgICAgICAtIGxpYnhsX3FtcDogUGFyc2UgSlNPTiBpbnB1dCBmcm9tIFFNUAog ICAgICAgIC0gbGlieGxfcW1wOiBQcmVwYXJlIHRoZSBjb21tYW5kIHRvIGJlIHNlbnQKICAgICAg ICAtIGxpYnhsX3FtcDogSGFuZGxlIHdyaXRlIHRvIFFNUCBzb2NrZXQKICAgICAgICAtIGxpYnhs X3FtcDogSGFuZGxlIG1lc3NhZ2VzIGZyb20gUUVNVQogICAgICAgIC0gbGlieGxfcW1wOiBSZXNw b25kIHRvIFFNUCBncmVldGluZwogICAgCiAgICAgICAgR2VuZXJhbCByZXdvcmsgb2YgdGhlIGlt cGxlbWVudGF0aW9uLgogICAgICAgIEFkZGVkIG1vcmUgY29tbWVudCwgd2l0aCBhIGRlc2NyaXB0 aW9uIG9mIGFsbG93ZWQgaW50ZXJuYWwgc3RhdGVzLgogICAgICAgIENoZWNrIGZvciBFSU5QUk9H UkVTUyBhZnRlciBjb25uZWN0KCkuCiAgICAgICAgUmVhZCB1bnRpbCBFV09VTERCTE9DSy4KICAg ICAgICBIYW5kbGUgRVdPVUxEQkxPQ0sgb24gd3JpdGUgYW5kIHNlbmRtc2cuCiAgICAgICAgVXNp bmcgbWVtbWVtIGluc3RlYWQgb2Ygc3Ryc3RyLgogICAgICAgIFVzaW5nIG1lbW1vdmUgaW5zdGVh ZCBvZiBoYXZpbmcgYW4gb2Zmc2V0IGluIHJ4X2J1Zi4KICAgICAgICBSZXdvcmsgYnVmZmVyIGFs bG9jYXRpb24KICAgICAgICBEb24ndCBmZWVkIFxyIGludG8ganNvbiBwYXJzZXIgYW55bW9yZQog ICAgICAgIEFkZCBhIGNoZWNrIGZvciBhIG1heGltdW0gUlggYnVmZmVyIHNpemUKICAgICAgICBB ZGRlZCBtb3JlIGVycm9yIG1lc3NhZ2VzCiAgICAgICAgTmV3IGVycm9yIGNvZGUgRVJST1JfUFJP VE9DT0xfRVJST1JfUU1QCiAgICAgICAgUmV3cml0ZSBjb252ZXJzaW9uIG9mIFFNUCBFcnJvckNs YXNzIHRvIGxpYnhsX2Vycm9yIGNvZGUKICAgICAgICBBZGRlZCBoZWxwZXJzOiBxbXBfZXZfZW5z dXJlX3JlYWRpbmdfd3JpdGluZywgcW1wX2V2X3NldF9zdGF0ZQogICAgICAgIFNwbGl0IHNvbWUg ZnVuY3Rpb25zLCBzcXVhc2ggb3RoZXJzCiAgICAgICAgQWRkZWQgZXYtPm1zZyogdG8gc3RvcmUg Z2VuZXJhdGVkIHVzZXIgY29tbWFuZCBhcyB0eF9idWYgaXMgdXNlZCBkdXJpbmcKICAgICAgICAg ICAgY29ubmVjdGlvbiAoZm9yIHFtcF9jYXBhYmlsaXRpZXMpCiAgICAgICAgUmVtb3ZlIHFtcF9z dGF0ZV9ncmVldGluZwogICAgICAgIEFkZGVkIHFtcF9zdGF0ZV93YWl0aW5nX3JlcGx5CiAgICAK ICAgIHY1OgogICAgICAgIG5pdHMKICAgICAgICB1c2UgYSBkZWZpbmUgaW5zdGVhZCBvZiBhIHN0 YXRpYyBpbnQgZm9yIFFNUF9DQVBBQklMSVRZX05FR09DSUFUSU9OX01TR0lECiAgICAgICAgdXNl IGEgc3dpdGNoIGluIHFtcF9ldl9jYWxsYmFja193cml0YWJsZSB0byBjaGVjayBxbXBfc3RhdGUK ICAgICAgICBBZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZGlmZmVyZW50IHZhbHVlIG9mIGxpYnhs X19xbXBfc3RhdGUgZW51bS4KICAgICAgICBzb21lIGNsZWFudXAKICAgICAgICByZW1vdmUgcmVh ZCBsb29wIHRoYXQgb25seSBoYW5kbGVkIEVJTlRSLCBzaW1wbHkgcmV0dXJuCiAgICAgICAgaW5p dGlhbGl6ZSBsZW4gYW5kIHMgYXQgZGVjbGFyYXRpb24gdGltZQogICAgICAgIHJlbW92ZSBvbGQg Y29tbWVudAogICAgICAgIHJlbmFtZSBidWZfZmQgdG8gc2VuZF9mZAogICAgICAgIEFkZGluZyBk ZWZhdWx0OmFib3J0KCkgaW4gcW1wX2V2X2hhbmRsZV9tZXNzYWdlLgogICAgCiAgICB2NDoKICAg ICAgICByZW1vdmUgdXNlIG9mIGEgbGlua2VkIGxpc3Qgb2YgcmVjZWl2ZSBidWZmZXIsIGFuZCB1 c2UgcmVhbGxvYyBpbnN0ZWFkLgogICAgICAgIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBwYXRjaCBk dWUgdG8gdXNlIG9mIGEgc2luZ2xlIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhlCiAgICAgICAgcmVj ZWl2ZSBidWZmZXIuCgogdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCB8ICAzNCArKwogdG9v bHMvbGlieGwvbGlieGxfcW1wLmMgICAgICB8IDczOSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsICB8ICAgNiArCiAzIGZpbGVz IGNoYW5nZWQsIDc3OSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGli eGxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKaW5kZXggZmFkYWZh NWYxMS4uYmUxOGQ0ZjM0MSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwu aAorKysgYi90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCkBAIC00MTgsNiArNDE4LDE5IEBA IF9oaWRkZW4gaW50IGxpYnhsX19ldl9xbXBfc2VuZChsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9fZXZf cW1wICpldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjbWQs IGxpYnhsX19qc29uX29iamVjdCAqYXJncyk7CiBfaGlkZGVuIHZvaWQgbGlieGxfX2V2X3FtcF9k aXNwb3NlKGxpYnhsX19nYyAqZ2MsIGxpYnhsX19ldl9xbXAgKmV2KTsKIAordHlwZWRlZiBlbnVt IHsKKyAgICAvKiBpbml0aWFsIHN0YXRlICovCisgICAgcW1wX3N0YXRlX2Rpc2Nvbm5lY3RlZCA9 IDEsCisgICAgLyogY29ubmVjdGVkIHRvIFFNUCBzb2NrZXQsIHdhaXRpbmcgZm9yIGdyZWV0aW5n IG1lc3NhZ2UgKi8KKyAgICBxbXBfc3RhdGVfY29ubmVjdGluZywKKyAgICAvKiBxbXBfY2FwYWJp bGl0aWVzIGNvbW1hbmQgc2VudCwgd2FpdGluZyBmb3IgcmVwbHkgKi8KKyAgICBxbXBfc3RhdGVf Y2FwYWJpbGl0eV9uZWdvdGlhdGlvbiwKKyAgICAvKiBzZW5kaW5nIHVzZXIncyBjbWQgYW5kIHdh aXRpbmcgZm9yIHJlcGx5ICovCisgICAgcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHksCisgICAgLyog cmVhZHkgdG8gc2VuZCBjb21tYW5kcyAqLworICAgIHFtcF9zdGF0ZV9jb25uZWN0ZWQsCit9IGxp YnhsX19xbXBfc3RhdGU7CisKIHN0cnVjdCBsaWJ4bF9fZXZfcW1wIHsKICAgICAvKiBjYWxsZXIg c2hvdWxkIGluY2x1ZGUgdGhpcyBpbiB0aGVpciBvd24gc3RydWN0ICovCiAgICAgLyogY2FsbGVy IG11c3QgZmlsbCB0aGVzZSBpbiwgYW5kIHRoZXkgbXVzdCBhbGwgcmVtYWluIHZhbGlkICovCkBA IC00MjUsNiArNDM4LDI3IEBAIHN0cnVjdCBsaWJ4bF9fZXZfcW1wIHsKICAgICBsaWJ4bF9kb21p ZCBkb21pZDsKICAgICBsaWJ4bF9fZXZfcW1wX2NhbGxiYWNrICpjYWxsYmFjazsKICAgICBpbnQg cGF5bG9hZF9mZDsgLyogc2V0IHRvIHNlbmQgYSBmZCB3aXRoIHRoZSBjb21tYW5kLCAtMSBvdGhl cndpc2UgKi8KKworICAgIC8qCisgICAgICogcmVtYWluaW5nIGZpZWxkcyBhcmUgcHJpdmF0ZSB0 byBsaWJ4bF9ldl9xbXBfKgorICAgICAqLworCisgICAgbGlieGxfX2NhcmVmZCAqY2ZkOworICAg IGxpYnhsX19ldl9mZCBlZmQ7CisgICAgbGlieGxfX3FtcF9zdGF0ZSBzdGF0ZTsKKyAgICBpbnQg aWQ7CisgICAgaW50IG5leHRfaWQ7ICAgICAgICAvKiBuZXh0IGlkIHRvIHVzZSAqLworICAgIC8q IHJlY2VpdmUgYnVmZmVyICovCisgICAgY2hhciAqcnhfYnVmOworICAgIHNpemVfdCByeF9idWZf c2l6ZTsgLyogY3VycmVudCBhbGxvY2F0ZWQgc2l6ZSAqLworICAgIHNpemVfdCByeF9idWZfdXNl ZDsgLyogYWN0dWFsIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLworICAgIC8qIHNlbmRpbmcgYnVmZmVy ICovCisgICAgY2hhciAqdHhfYnVmOworICAgIHNpemVfdCB0eF9idWZfbGVuOyAgLyogdHhfYnVm IHNpemUgKi8KKyAgICBzaXplX3QgdHhfYnVmX29mZjsgIC8qIGFscmVhZHkgc2VudCAqLworICAg IC8qIFRoZSBtZXNzYWdlIHRvIHNlbmQgd2hlbiByZWFkeSAqLworICAgIGNoYXIgKm1zZzsKKyAg ICBpbnQgbXNnX2lkOwogfTsKIAogCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9xbXAu YyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3FtcC5jCmluZGV4IDczZjIyMDJiNGYuLmYyYWIwODYyMGEg MTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3FtcC5jCisrKyBiL3Rvb2xzL2xpYnhsL2xp YnhsX3FtcC5jCkBAIC03NSwxMSArNzUsMTggQEAKICMgIGRlZmluZSBERUJVR19SRVBPUlRfUkVD RUlWRUQoZG9tLCBidWYsIGxlbikgKCh2b2lkKTApCiAjZW5kaWYKIAorI2lmZGVmIERFQlVHX1FN UF9DTElFTlQKKyMgIGRlZmluZSBMT0dfUU1QKGYsIC4uLikgTE9HRChERUJVRywgZXYtPmRvbWlk LCBmLCAjI19fVkFfQVJHU19fKQorI2Vsc2UKKyMgIGRlZmluZSBMT0dfUU1QKGYsIC4uLikKKyNl bmRpZgorCiAvKgogICogUU1QIHR5cGVzICYgY29uc3RhbnQKICAqLwogCiAjZGVmaW5lIFFNUF9S RUNFSVZFX0JVRkZFUl9TSVpFIDQwOTYKKyNkZWZpbmUgUU1QX01BWF9TSVpFX1JYX0JVRiBNQigx KQogI2RlZmluZSBQQ0lfUFRfUURFVl9JRCAicGNpLXB0LSUwMnhfJTAyeC4lMDF4IgogCiAvKgpA QCAtMTMwNyw2ICsxMzE0LDczOCBAQCBpbnQgbGlieGxfX3FtcF9pbml0aWFsaXphdGlvbnMobGli eGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCiAgICAgcmV0dXJuIHJldDsKIH0KIAorLyogLS0t LS0tLS0tLS0tIEltcGxlbWVudGF0aW9uIG9mIGxpYnhsX19ldl9xbXAgLS0tLS0tLS0tLS0tLS0t LSAqLworCisvKgorICogUG9zc2libGUgaW50ZXJuYWwgc3RhdGUgY29tcGFyZWQgdG8gcW1wX3N0 YXRlOgorICoKKyAqIHFtcF9zdGF0ZSAgICAgRXh0ZXJuYWwgICBjZmQgICAgZWZkICAgICBpZCAg ICAgcnhfYnVmKiB0eF9idWYqIG1zZyoKKyAqIGRpc2Nvbm5lY3RlZCAgIElkbGUgICAgICAgTlVM TCAgIElkbGUgICAgcmVzZXQgIGZyZWUgICAgZnJlZSAgICBmcmVlCisgKiBjb25uZWN0aW5nICAg ICBBY3RpdmUgICAgIG9wZW4gICBJTiAgICAgIHJlc2V0ICB1c2VkICAgIGZyZWUgICAgc2V0Cisg KiBjYXAubmVnICAgICAgICBBY3RpdmUgICAgIG9wZW4gICBJTnxPVVQgIHNlbnQgICB1c2VkICAg IGNhcF9uZWcgc2V0CisgKiBjYXAubmVnICAgICAgICBBY3RpdmUgICAgIG9wZW4gICBJTiAgICAg IHNlbnQgICB1c2VkICAgIGZyZWUgICAgc2V0CisgKiBjb25uZWN0ZWQgICAgICBDb25uZWN0ZWQg IG9wZW4gICBJTiAgICAgIGFueSAgICB1c2VkICAgIGZyZWUgICAgZnJlZQorICogd2FpdGluZ19y ZXBseSAgQWN0aXZlICAgICBvcGVuICAgSU58T1VUICBzZW50ICAgdXNlZCAgICBmcmVlICAgIHNl dAorICogd2FpdGluZ19yZXBseSAgQWN0aXZlICAgICBvcGVuICAgSU58T1VUICBzZW50ICAgdXNl ZCAgICB1c2VyJ3MgIGZyZWUKKyAqIHdhaXRpbmdfcmVwbHkgIEFjdGl2ZSAgICAgb3BlbiAgIElO ICAgICAgc2VudCAgIHVzZWQgICAgZnJlZSAgICBmcmVlCisgKiBicm9rZW5bMV0gICAgICBub25l WzJdICAgIGFueSAgICBBY3RpdmUgIGFueSAgICBhbnkgICAgIGFueSAgICAgYW55CisgKgorICog WzFdIFdoZW4gYW4gaW50ZXJuYWwgZnVuY3Rpb24gcmV0dXJuIGFuIGVycm9yLCBpdCBjYW4gbGVh dmUgZXZfcW1wIGluIGEKKyAqIGBicm9rZW5gIHN0YXRlIGJ1dCBvbmx5IGlmIHRoZSBjYWxsZXIg aXMgYW5vdGhlciBpbnRlcm5hbCBmdW5jdGlvbi4KKyAqIFRoYXQgYGJyb2tlbmAgbmVlZHMgdG8g YmUgY2xlYW5lZCB1cCwgZS5pLiB0cmFuc2l0aW9ubmVkIHRvIHRoZQorICogYGRpc2Nvbm5lY3Rl ZGAgc3RhdGUsIGJlZm9yZSB0aGUgY29udHJvbCBvZiBldl9xbXAgaXMgcmVsZWFzZWQgb3V0c2lk ZXMKKyAqIG9mIGV2X3FtcCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBbMl0gVGhpcyBpbnRlcm5h bCBzdGF0ZSBzaG91bGQgbm90IGJlIHZpc2libGUgZXh0ZXJuYWxseSwgc2VlIFsxXS4KKyAqCisg KiBQb3NzaWJsZSBidWZmZXJzIHN0YXRlczoKKyAqIC0gcmVjZWl2aW5nIGJ1ZmZlcjoKKyAqICAg ICAgICAgICAgICAgICAgICAgZnJlZSAgIHVzZWQKKyAqICAgICByeF9idWYgICAgICAgICAgIE5V TEwgICBOVUxMIG9yIGFsbG9jYXRlZAorICogICAgIHJ4X2J1Zl9zaXplICAgICAgMCAgICAgIGFs bG9jYXRpb24gc2l6ZSBvZiBgcnhfYnVmYAorICogICAgIHJ4X2J1Zl91c2VkICAgICAgMCAgICAg IDw9IHJ4X2J1Zl9zaXplLCBhY3R1YWwgZGF0YSBpbiB0aGUgYnVmZmVyCisgKiAtIHRyYW5zbWl0 dGluZyBidWZmZXI6CisgKiAgICAgICAgICAgICAgICAgICAgIGZyZWUgICB1c2VkCisgKiAgICAg dHhfYnVmICAgICAgICAgICBOVUxMICAgY29udGFpbnMgZGF0YQorICogICAgIHR4X2J1Zl9sZW4g ICAgICAgMCAgICAgIHNpemUgb2YgZGF0YQorICogICAgIHR4X2J1Zl9vZmYgICAgICAgMCAgICAg IDw9IHR4X2J1Zl9sZW4sIGRhdGEgYWxyZWFkeSBzZW50CisgKiAtIHF1ZXVlZCB1c2VyIGNvbW1h bmQ6CisgKiAgICAgICAgICAgICAgICAgICAgIGZyZWUgIHNldAorICogICAgIG1zZyAgICAgICAg ICAgICAgTlVMTCAgY29udGFpbnMgZGF0YQorICogICAgIG1zZ19pZCAgICAgICAgICAgMCAgICAg aWQgYXNzb2N0aWF0ZWQgd2l0aCB0aGUgY29tbWFuZCBpbiBgbXNnYAorICoKKyAqIC0gQWxsb3dl ZCBpbnRlcm5hbCBzdGF0ZSB0cmFuc2l0aW9uOgorICogZGlzY29ubmVjdGVkICAgICAgICAgICAg ICAgICAgICAgLT4gY29ubmVjdGluZworICogY29ubmVjdGlvbiAgICAgICAgICAgICAgICAgICAg ICAgLT4gY2FwYWJpbGl0eV9uZWdvdGlhdGlvbgorICogY2FwYWJpbGl0eV9uZWdvdGlhdGlvbi9j b25uZWN0ZWQgLT4gd2FpdGluZ19yZXBseQorICogd2FpdGluZ19yZXBseSAgICAgICAgICAgICAg ICAgICAgLT4gY29ubmVjdGVkCisgKiBhbnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiBicm9rZW4KKyAqIGJyb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IGRpc2Nvbm5l Y3RlZAorICogYW55ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gZGlzY29ubmVjdGVk CisgKgorICogVGhlIFFFTVUgTWFjaGluZSBQcm90b2NvbCAoUU1QKSBzcGVjaWZpY2F0aW9uIGNh biBiZSBmb3VuZCBpbiB0aGUgUUVNVQorICogcmVwb3NpdG9yeToKKyAqIGh0dHBzOi8vZ2l0LnFl bXUub3JnLz9wPXFlbXUuZ2l0O2E9YmxvYl9wbGFpbjtmPWRvY3MvaW50ZXJvcC9xbXAtc3BlYy50 eHQKKyAqLworCisvKiBwcm90b3R5cGVzICovCisKK3N0YXRpYyB2b2lkIHFtcF9ldl9mZF9jYWxs YmFjayhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19ldl9mZCAqZXZfZmQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGZkLCBzaG9ydCBldmVudHMsIHNob3J0IHJldmVudHMpOwor c3RhdGljIGludCBxbXBfZXZfY2FsbGJhY2tfd3JpdGFibGUobGlieGxfX2djICpnYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19ldl9xbXAgKmV2LCBpbnQgZmQp Oworc3RhdGljIGludCBxbXBfZXZfY2FsbGJhY2tfcmVhZGFibGUobGlieGxfX2VnYyAqZWdjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2X3FtcCAqZXYsIGlu dCBmZCk7CitzdGF0aWMgaW50IHFtcF9ldl9nZXRfbmV4dF9tc2cobGlieGxfX2VnYyAqZWdjLCBs aWJ4bF9fZXZfcW1wICpldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f anNvbl9vYmplY3QgKipvX3IpOworc3RhdGljIGludCBxbXBfZXZfaGFuZGxlX21lc3NhZ2UobGli eGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2 X3FtcCAqZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9f anNvbl9vYmplY3QgKnJlc3ApOworCisvKiBoZWxwZXJzICovCisKK3N0YXRpYyB2b2lkIHFtcF9l dl9lbnN1cmVfcmVhZGluZ193cml0aW5nKGxpYnhsX19nYyAqZ2MsIGxpYnhsX19ldl9xbXAgKmV2 KQorICAgIC8qIFVwZGF0ZSB0aGUgc3RhdGUgb2YgYGVmZGAgdG8gbWF0Y2ggdGhlIHBlcm1pdGVk IHN0YXRlCisgICAgICogb24gZW50cnk6ICFkaXNjb25uZWN0ZWQgKi8KK3sKKyAgICBzaG9ydCBl dmVudHMgPSBQT0xMSU47CisKKyAgICBpZiAoZXYtPnR4X2J1ZikKKyAgICAgICAgZXZlbnRzIHw9 IFBPTExPVVQ7CisgICAgZWxzZSBpZiAoKGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVfd2FpdGluZ19y ZXBseSkgJiYgZXYtPm1zZykKKyAgICAgICAgZXZlbnRzIHw9IFBPTExPVVQ7CisKKyAgICBsaWJ4 bF9fZXZfZmRfbW9kaWZ5KGdjLCAmZXYtPmVmZCwgZXZlbnRzKTsKK30KKworc3RhdGljIHZvaWQg cW1wX2V2X3NldF9zdGF0ZShsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9fZXZfcW1wICpldiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3FtcF9zdGF0ZSBuZXdfc3RhdGUpCisgICAg Lyogb24gZW50cnk6ICFicm9rZW4gYW5kICFkaXNjb25uZWN0ZWQgKi8KK3sKKyAgICBzd2l0Y2gg KG5ld19zdGF0ZSkgeworICAgIGNhc2UgcW1wX3N0YXRlX2Rpc2Nvbm5lY3RlZDoKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBxbXBfc3RhdGVfY29ubmVjdGluZzoKKyAgICAgICAgYXNzZXJ0KGV2 LT5zdGF0ZSA9PSBxbXBfc3RhdGVfZGlzY29ubmVjdGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBxbXBfc3RhdGVfY2FwYWJpbGl0eV9uZWdvdGlhdGlvbjoKKyAgICAgICAgYXNzZXJ0KGV2 LT5zdGF0ZSA9PSBxbXBfc3RhdGVfY29ubmVjdGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgcW1wX3N0YXRlX3dhaXRpbmdfcmVwbHk6CisgICAgICAgIGFzc2VydChldi0+c3RhdGUgPT0g cW1wX3N0YXRlX2NhcGFiaWxpdHlfbmVnb3RpYXRpb24gfHwKKyAgICAgICAgICAgICAgIGV2LT5z dGF0ZSA9PSBxbXBfc3RhdGVfY29ubmVjdGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBx bXBfc3RhdGVfY29ubmVjdGVkOgorICAgICAgICBhc3NlcnQoZXYtPnN0YXRlID09IHFtcF9zdGF0 ZV93YWl0aW5nX3JlcGx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZXYtPnN0YXRl ID0gbmV3X3N0YXRlOworCisgICAgcW1wX2V2X2Vuc3VyZV9yZWFkaW5nX3dyaXRpbmcoZ2MsIGV2 KTsKK30KKworc3RhdGljIHZvaWQgcW1wX2V2X3R4X2J1Zl9jbGVhcihsaWJ4bF9fZXZfcW1wICpl dikKK3sKKyAgICBldi0+dHhfYnVmID0gTlVMTDsKKyAgICBldi0+dHhfYnVmX2xlbiA9IDA7Cisg ICAgZXYtPnR4X2J1Zl9vZmYgPSAwOworfQorCitzdGF0aWMgaW50IHFtcF9lcnJvcl9jbGFzc190 b19saWJ4bF9lcnJvcl9jb2RlKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVjbGFzcykKK3sKKyAgICBjb25z dCBsaWJ4bF9lbnVtX3N0cmluZ190YWJsZSAqdCA9IGxpYnhsX2Vycm9yX3N0cmluZ190YWJsZTsK KyAgICBjb25zdCBjaGFyIHNraXBbXSA9ICJRTVBfIjsKKyAgICBjb25zdCBzaXplX3Qgc2tpcGwg PSBzaXplb2Yoc2tpcCkgLSAxOworCisgICAgLyogY29tcGFyZSAiUU1QX0dFTkVSSUNfRVJST1Ii IGZyb20gbGlieGxfZXJyb3IgdG8gIkdlbmVyaWNFcnJvciIKKyAgICAgKiBnZW5lcmF0ZWQgYnkg dGhlIFFNUCBzZXJ2ZXIgKi8KKworICAgIGZvciAoOyB0LT5zOyB0KyspIHsKKyAgICAgICAgICAg IGNvbnN0IGNoYXIgKnMgPSBlY2xhc3M7CisgICAgICAgICAgICBjb25zdCBjaGFyICpzZSA9IHQt PnM7CisgICAgICAgIGlmIChzdHJuY2FzZWNtcCh0LT5zLCBza2lwLCBza2lwbCkpCisgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgc2UgKz0gc2tpcGw7CisgICAgICAgIHdoaWxlICgqcyAm JiAqc2UpIHsKKyAgICAgICAgICAgIC8qIHNraXAgdW5kZXJzY29yZXMgKi8KKyAgICAgICAgICAg IGlmICgqc2UgPT0gJ18nKSB7CisgICAgICAgICAgICAgICAgc2UrKzsKKyAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2xvd2VyKCpzKSAh PSB0b2xvd2VyKCpzZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBzKyss IHNlKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEqcyAmJiAhKnNlKQorICAgICAgICAgICAg cmV0dXJuIHQtPnY7CisgICAgfQorCisgICAgTE9HKEVSUk9SLCAiVW5rbm93biBRTVAgZXJyb3Ig Y2xhc3MgJyVzJyIsIGVjbGFzcyk7CisgICAgcmV0dXJuIEVSUk9SX1VOS05PV05fUU1QX0VSUk9S OworfQorCisvKiBTZXR1cCBjb25uZWN0aW9uICovCisKK3N0YXRpYyBpbnQgcW1wX2V2X2Nvbm5l Y3QobGlieGxfX2djICpnYywgbGlieGxfX2V2X3FtcCAqZXYpCisgICAgLyogZGlzY29ubmVjdGVk IC0+IGNvbm5lY3RpbmcgYnV0IHdpdGggYG1zZ2AgZnJlZQorICAgICAqIG9uIGVycm9yOiBicm9r ZW4gKi8KK3sKKyAgICBpbnQgZmQ7CisgICAgaW50IHJjLCByOworICAgIHN0cnVjdCBzb2NrYWRk cl91biB1bjsKKyAgICBjb25zdCBjaGFyICpxbXBfc29ja2V0X3BhdGg7CisKKyAgICBhc3NlcnQo ZXYtPnN0YXRlID09IHFtcF9zdGF0ZV9kaXNjb25uZWN0ZWQpOworCisgICAgcW1wX3NvY2tldF9w YXRoID0gbGlieGxfX3FlbXVfcW1wX3BhdGgoZ2MsIGV2LT5kb21pZCk7CisKKyAgICBMT0dEKERF QlVHLCBldi0+ZG9taWQsICJDb25uZWN0aW5nIHRvICVzIiwgcW1wX3NvY2tldF9wYXRoKTsKKwor ICAgIGxpYnhsX19jYXJlZmRfYmVnaW4oKTsKKyAgICBmZCA9IHNvY2tldChBRl9VTklYLCBTT0NL X1NUUkVBTSwgMCk7CisgICAgZXYtPmNmZCA9IGxpYnhsX19jYXJlZmRfb3BlbmVkKENUWCwgZmQp OworICAgIGlmICghZXYtPmNmZCkgeworICAgICAgICBMT0dFRChFUlJPUiwgZXYtPmRvbWlkLCAi c29ja2V0KCkgZmFpbGVkIik7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorICAgIHJjID0gbGlieGxfZmRfc2V0X25vbmJsb2NrKENUWCwgbGlieGxf X2NhcmVmZF9mZChldi0+Y2ZkKSwgMSk7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIG91dDsK KworICAgIHJjID0gbGlieGxfX3ByZXBhcmVfc29ja2FkZHJfdW4oZ2MsICZ1biwgcW1wX3NvY2tl dF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlFNUCBzb2NrZXQi KTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgciA9IGNvbm5lY3QobGli eGxfX2NhcmVmZF9mZChldi0+Y2ZkKSwKKyAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRy ICopICZ1biwgc2l6ZW9mKHVuKSk7CisgICAgaWYgKHIgJiYgZXJybm8gIT0gRUlOUFJPR1JFU1Mp IHsKKyAgICAgICAgTE9HRUQoRVJST1IsIGV2LT5kb21pZCwgIkZhaWxlZCB0byBjb25uZWN0IHRv IFFNUCBzb2NrZXQgJXMiLAorICAgICAgICAgICAgICBxbXBfc29ja2V0X3BhdGgpOworICAgICAg ICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0g bGlieGxfX2V2X2ZkX3JlZ2lzdGVyKGdjLCAmZXYtPmVmZCwgcW1wX2V2X2ZkX2NhbGxiYWNrLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jYXJlZmRfZmQoZXYtPmNmZCks IFBPTExJTik7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHFtcF9ldl9z ZXRfc3RhdGUoZ2MsIGV2LCBxbXBfc3RhdGVfY29ubmVjdGluZyk7CisKKyAgICByZXR1cm4gMDsK Kworb3V0OgorICAgIHJldHVybiByYzsKK30KKworLyogUU1QIEZEIGNhbGxiYWNrcyAqLworCitz dGF0aWMgdm9pZCBxbXBfZXZfZmRfY2FsbGJhY2sobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fZXZf ZmQgKmV2X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZCwgc2hvcnQg ZXZlbnRzLCBzaG9ydCByZXZlbnRzKQorICAgIC8qIE9uIGVudHJ5LCBldl9mZCBpcyAob2YgY291 cnNlKSBBY3RpdmUuICBUaGUgZXZfcW1wIG1heSBiZSBpbiBhbnkKKyAgICAgKiBzdGF0ZSB3aGVy ZSB0aGlzIGlzIHBlcm1pdHRlZC4gIHFtcF9ldl9mZF9jYWxsYmFjayB3aWxsIGRvIHRoZSB3b3Jr CisgICAgICogbmVjZXNzYXJ5IHRvIG1ha2UgcHJvZ3Jlc3MsIGRlcGVuZGluZyBvbiB0aGUgY3Vy cmVudCBzdGF0ZSwgYW5kIG1ha2UKKyAgICAgKiB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgdHJhbnNp dGlvbnMgYW5kIGNhbGxiYWNrcy4gICovCit7CisgICAgbGlieGxfX2V2X3FtcCAqZXYgPSBDT05U QUlORVJfT0YoZXZfZmQsICpldiwgZWZkKTsKKyAgICBTVEFURV9BT19HQyhldi0+YW8pOworICAg IGludCByYzsKKworICAgIGlmIChyZXZlbnRzICYgKFBPTExIVVB8UE9MTEVSUikpIHsKKyAgICAg ICAgaW50IHI7CisgICAgICAgIGludCBlcnJvcl92YWwgPSAwOworICAgICAgICBzb2NrbGVuX3Qg b3B0X2xlbiA9IHNpemVvZihlcnJvcl92YWwpOworCisgICAgICAgIHIgPSBnZXRzb2Nrb3B0KGZk LCBTT0xfU09DS0VULCBTT19FUlJPUiwgJmVycm9yX3ZhbCwgJm9wdF9sZW4pOworICAgICAgICBp ZiAocikKKyAgICAgICAgICAgIExPR0VEKEVSUk9SLCBldi0+ZG9taWQsICJnZXRzb2Nrb3B0IGZh aWxlZCIpOworICAgICAgICBpZiAoIXIgJiYgZXJyb3JfdmFsKSB7CisgICAgICAgICAgICBlcnJu byA9IGVycm9yX3ZhbDsKKyAgICAgICAgICAgIExPR0VEKEVSUk9SLCBldi0+ZG9taWQsICJlcnJv ciBvbiBRTVAgc29ja2V0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMT0dEKEVS Uk9SLCBldi0+ZG9taWQsCisgICAgICAgICAgICAgICAgICJyZWNlaXZlZCBQT0xMSFVQfFBPTExF UlIgZnJvbSBRTVAgc29ja2V0Iik7CisgICAgICAgIH0KKyAgICAgICAgcmMgPSBFUlJPUl9QUk9U T0NPTF9FUlJPUl9RTVA7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHJl dmVudHMgJiB+KFBPTExJTnxQT0xMT1VUKSkgeworICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9t aWQsCisgICAgICAgICAgICAgInVuZXhwZWN0ZWQgcG9sbCBldmVudCAweCV4IG9uIFFNUCBzb2Nr ZXQgKGV4cGVjdGVkIFBPTExJTiAiCisgICAgICAgICAgICAgImFuZC9vciBQT0xMT1VUKSIsCisg ICAgICAgICAgICByZXZlbnRzKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBn b3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChyZXZlbnRzICYgUE9MTE9VVCkgeworICAgICAg ICByYyA9IHFtcF9ldl9jYWxsYmFja193cml0YWJsZShnYywgZXYsIGZkKTsKKyAgICAgICAgaWYg KHJjKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAocmV2ZW50cyAm IFBPTExJTikgeworICAgICAgICByYyA9IHFtcF9ldl9jYWxsYmFja19yZWFkYWJsZShlZ2MsIGV2 LCBmZCk7CisgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAg ICAgICBpZiAocmMgPT0gMSkgeworICAgICAgICAgICAgLyogdXNlciBjYWxsYmFjayBoYXMgYmVl biBjYWxsZWQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg IHJldHVybjsKKworZXJyb3I6CisgICAgYXNzZXJ0KHJjKTsKKworICAgIExPR0QoRVJST1IsIGV2 LT5kb21pZCwKKyAgICAgICAgICJFcnJvciBoYXBwZW5lZCB3aXRoIHRoZSBRTVAgY29ubmVjdGlv biB0byBRRU1VIik7CisKKyAgICAvKiBPbiBlcnJvciwgZGVhbGxvY2F0ZSBhbGwgcHJpdmF0ZSBy ZXNzb3VyY2VzICovCisgICAgbGlieGxfX2V2X3FtcF9kaXNwb3NlKGdjLCBldik7CisKKyAgICAv KiBBbmQgdGVsbCBsaWJ4bF9fZXZfcW1wIHVzZXIgYWJvdXQgdGhlIGVycm9yICovCisgICAgZXYt PmNhbGxiYWNrKGVnYywgZXYsIE5VTEwsIHJjKTsgLyogbXVzdCBiZSBsYXN0ICovCit9CisKK3N0 YXRpYyBpbnQgcW1wX2V2X2NhbGxiYWNrX3dyaXRhYmxlKGxpYnhsX19nYyAqZ2MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZXZfcW1wICpldiwgaW50IGZkKQor ICAgIC8qIG9uIGVudHJ5OiAhZGlzY29ubmVjdGVkCisgICAgICogb24gcmV0dXJuLCBvbmUgb2Yg dGhlc2Ugc3RhdGUgdHJhbnNpdGlvbjoKKyAgICAgKiAgIHdhaXRpbmdfcmVwbHkgKHdpdGggbXNn IHNldCkgLT4gd2FpdGluZ19yZXBseSAod2l0aCBtc2cgZnJlZSkKKyAgICAgKiAgIHR4X2J1ZiBz ZXQgLT4gc2FtZSBzdGF0ZSBvciB0eF9idWYgZnJlZQorICAgICAqIG9uIGVycm9yOiBicm9rZW4g Ki8KK3sKKyAgICBpbnQgcmM7CisgICAgc3NpemVfdCByOworCisgICAgaWYgKGV2LT5zdGF0ZSA9 PSBxbXBfc3RhdGVfd2FpdGluZ19yZXBseSkgeworICAgICAgICBpZiAoZXYtPm1zZykgeworICAg ICAgICAgICAgYXNzZXJ0KCFldi0+dHhfYnVmKTsKKyAgICAgICAgICAgIGV2LT50eF9idWYgPSBl di0+bXNnOworICAgICAgICAgICAgZXYtPnR4X2J1Zl9sZW4gPSBzdHJsZW4oZXYtPm1zZyk7Cisg ICAgICAgICAgICBldi0+dHhfYnVmX29mZiA9IDA7CisgICAgICAgICAgICBldi0+aWQgPSBldi0+ bXNnX2lkOworICAgICAgICAgICAgZXYtPm1zZyA9IE5VTEw7CisgICAgICAgICAgICBldi0+bXNn X2lkID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChldi0+dHhfYnVmKTsKKwor ICAgIExPR19RTVAoInNlbmRpbmc6ICclLipzJyIsIChpbnQpZXYtPnR4X2J1Zl9sZW4sIGV2LT50 eF9idWYpOworCisgICAgLyoKKyAgICAgKiBXZSB3aWxsIHNlbmQgYSBmaWxlIGRlc2NyaXB0b3Ig YXNzb2NpYXRlZCB3aXRoIGEgY29tbWFuZCBvbiB0aGUKKyAgICAgKiBmaXJzdCBieXRlIG9mIHRo aXMgY29tbWFuZC4KKyAgICAgKi8KKyAgICBpZiAoZXYtPnN0YXRlID09IHFtcF9zdGF0ZV93YWl0 aW5nX3JlcGx5ICYmCisgICAgICAgIGV2LT5wYXlsb2FkX2ZkID49IDAgJiYKKyAgICAgICAgZXYt PnR4X2J1Zl9vZmYgPT0gMCkgeworCisgICAgICAgIHJjID0gbGlieGxfX3NlbmRtc2dfZmRzKGdj LCBmZCwgZXYtPnR4X2J1ZiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwg JmV2LT5wYXlsb2FkX2ZkLCAiUU1QIHNvY2tldCIpOworICAgICAgICAvKiBDaGVjayBmb3IgRVdP VUxEQkxPQ0ssIGFuZCByZXR1cm4gdG8gdHJ5IGFnYWluIGxhdGVyICovCisgICAgICAgIGlmIChy YyA9PSBFUlJPUl9OT1RfUkVBRFkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYg KHJjKQorICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICBldi0+dHhfYnVmX29mZisrOwor ICAgIH0KKworICAgIHdoaWxlIChldi0+dHhfYnVmX29mZiA8IGV2LT50eF9idWZfbGVuKSB7Cisg ICAgICAgIHNzaXplX3QgbWF4X3dyaXRlID0gZXYtPnR4X2J1Zl9sZW4gLSBldi0+dHhfYnVmX29m ZjsKKyAgICAgICAgciA9IHdyaXRlKGZkLCBldi0+dHhfYnVmICsgZXYtPnR4X2J1Zl9vZmYsIG1h eF93cml0ZSk7CisgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09 IEVJTlRSKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGVycm5v ID09IEVXT1VMREJMT0NLKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgTE9H RUQoRVJST1IsIGV2LT5kb21pZCwgImZhaWxlZCB0byB3cml0ZSB0byBRTVAgc29ja2V0Iik7Cisg ICAgICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQo ciA+PSAwICYmIHIgPD0gbWF4X3dyaXRlKTsKKyAgICAgICAgZXYtPnR4X2J1Zl9vZmYgKz0gcjsK KyAgICB9CisKKyAgICBpZiAoZXYtPnR4X2J1Zl9vZmYgPT0gZXYtPnR4X2J1Zl9sZW4pCisgICAg ICAgIHFtcF9ldl90eF9idWZfY2xlYXIoZXYpOworCisgICAgcW1wX2V2X2Vuc3VyZV9yZWFkaW5n X3dyaXRpbmcoZ2MsIGV2KTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFtcF9l dl9jYWxsYmFja19yZWFkYWJsZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9fZXZfcW1wICpldiwgaW50IGZkKQorICAgIC8qCisgICAg ICogUmV0dXJuIHZhbHVlczoKKyAgICAgKiAgIDwgMCAgICBsaWJ4bCBlcnJvciBjb2RlCisgICAg ICogICAwICAgICAgc3VjY2VzcworICAgICAqICAgMSAgICAgIHN1Y2Nlc3MsIGJ1dCBhIHVzZXIg Y2FsbGJhY2sgaGFzIGJlZW4gY2FsbGVkLAorICAgICAqICAgICAgICAgIGBldmAgc2hvdWxkIG5v dCBiZSB1c2VkIGFueW1vcmUuCisgICAgICoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBk YXRlIHRoZSByeCBidWZmZXIgYW5kIHBvc3NpYmx5IHVwZGF0ZQorICAgICAqIGV2LT5zdGF0ZToK KyAgICAgKiAgY29ubmVjdGluZyAgICAgICAgICAgICAtPiBjYXBhYmlsaXR5X25lZ290aWF0aW9u CisgICAgICogIGNhcGFiaWxpdHlfbmVnb3RpYXRpb24gLT4gd2FpdGluZ19yZXBseQorICAgICAq ICB3YWl0aW5nX3JlcGx5ICAgICAgICAgIC0+IGNvbm5lY3RlZAorICAgICAqIG9uIGVycm9yOiBi cm9rZW4KKyAgICAgKi8KK3sKKyAgICBTVEFURV9BT19HQyhldi0+YW8pOworICAgIGludCByYzsK KyAgICBzc2l6ZV90IHI7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICB3aGlsZSAoMSkgewor ICAgICAgICAgICAgbGlieGxfX2pzb25fb2JqZWN0ICpvID0gTlVMTDsKKworICAgICAgICAgICAg LyogcGFyc2UgcnggYnVmZmVyIHRvIGZpbmQgb25lIGpzb24gb2JqZWN0ICovCisgICAgICAgICAg ICByYyA9IHFtcF9ldl9nZXRfbmV4dF9tc2coZWdjLCBldiwgJm8pOworICAgICAgICAgICAgaWYg KHJjID09IEVSUk9SX05PVEZPVU5EKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgZWxzZSBpZiAocmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAgICAgICAg ICAvKiBNdXN0IGJlIGxhc3QgYW5kIHJldHVybiB3aGVuIHRoZSB1c2VyIGNhbGxiYWNrIGlzIGNh bGxlZCAqLworICAgICAgICAgICAgcmMgPSBxbXBfZXZfaGFuZGxlX21lc3NhZ2UoZWdjLCBldiwg byk7CisgICAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgICAgLyogcmV0dXJucyBib3Ro IHJjIHZhbHVlcyAtRVJST1JfKiBhbmQgMSAqLworICAgICAgICAgICAgICAgIHJldHVybiByYzsK KyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGlmIHRoZSBidWZmZXIgc3RpbGwgaGF2ZSBz cGFjZSwgb3IgaW5jcmVhc2Ugc2l6ZSAqLworICAgICAgICBpZiAoZXYtPnJ4X2J1Zl9zaXplIC0g ZXYtPnJ4X2J1Zl91c2VkIDwgUU1QX1JFQ0VJVkVfQlVGRkVSX1NJWkUpIHsKKyAgICAgICAgICAg IHNpemVfdCBuZXdzaXplID0gZXYtPnJ4X2J1Zl9zaXplICogMiArIFFNUF9SRUNFSVZFX0JVRkZF Ul9TSVpFOworCisgICAgICAgICAgICBpZiAobmV3c2l6ZSA+IFFNUF9NQVhfU0laRV9SWF9CVUYp IHsKKyAgICAgICAgICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsCisgICAgICAgICAgICAg ICAgICAgICAiUU1QIHJlY2VpdmUgYnVmZmVyIGlzIHRvbyBiaWcgKCVsZCA+ICVsbGQpIiwKKyAg ICAgICAgICAgICAgICAgICAgIG5ld3NpemUsIFFNUF9NQVhfU0laRV9SWF9CVUYpOworICAgICAg ICAgICAgICAgIHJldHVybiBFUlJPUl9CVUZGRVJGVUxMOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZXYtPnJ4X2J1Zl9zaXplID0gbmV3c2l6ZTsKKyAgICAgICAgICAgIGV2LT5yeF9idWYg PSBsaWJ4bF9fcmVhbGxvYyhnYywgZXYtPnJ4X2J1ZiwgZXYtPnJ4X2J1Zl9zaXplKTsKKyAgICAg ICAgfQorCisgICAgICAgIHIgPSByZWFkKGZkLCBldi0+cnhfYnVmICsgZXYtPnJ4X2J1Zl91c2Vk LAorICAgICAgICAgICAgICAgICBldi0+cnhfYnVmX3NpemUgLSBldi0+cnhfYnVmX3VzZWQpOwor ICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAg ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFV09VTERC TE9DSykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIExPR0VEKEVSUk9SLCBl di0+ZG9taWQsICJlcnJvciByZWFkaW5nIFFNUCBzb2NrZXQiKTsKKyAgICAgICAgICAgIHJldHVy biBFUlJPUl9GQUlMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHIgPT0gMCkgeworICAgICAg ICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAiVW5leHBlY3RlZCBFT0Ygb24gUU1QIHNvY2tl dCIpOworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1BST1RPQ09MX0VSUk9SX1FNUDsKKyAgICAg ICAgfQorCisgICAgICAgIExPR19RTVAoInJlY2VpdmVkICVsZEI6ICclLipzJyIsIHIsCisgICAg ICAgICAgICAgICAgKGludClyLCBldi0+cnhfYnVmICsgZXYtPnJ4X2J1Zl91c2VkKTsKKworICAg ICAgICBldi0+cnhfYnVmX3VzZWQgKz0gcjsKKyAgICAgICAgYXNzZXJ0KGV2LT5yeF9idWZfdXNl ZCA8PSBldi0+cnhfYnVmX3NpemUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKiBI YW5kbGUgbWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSBRTVAgc2VydmVyICovCisKK3N0YXRpYyBpbnQg cW1wX2V2X2dldF9uZXh0X21zZyhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19ldl9xbXAgKmV2LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19qc29uX29iamVjdCAqKm9fcikK KyAgICAvKiBGaW5kIGEgSlNPTiBvYmplY3QgYW5kIHN0b3JlIGl0IGluIG9fci4KKyAgICAgKiBy ZXR1cm4gRVJST1JfTk9URk9VTkQgaWYgbm8gb2JqZWN0IGlzIGZvdW5kLgorICAgICAqCisgICAg ICogIWRpc2Nvbm5lY3RlZCAtPiBzYW1lIHN0YXRlICh3aXRoIHJ4IGJ1ZmZlciB1cGRhdGVkKQor ICAgICAqLworeworICAgIFNUQVRFX0FPX0dDKGV2LT5hbyk7CisgICAgc2l6ZV90IGxlbjsKKyAg ICBjaGFyICplbmQgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgZW9tW10gPSAiXHJcbiI7CisgICAg Y29uc3Qgc2l6ZV90IGVvbWwgPSBzaXplb2YoZW9tKSAtIDE7CisgICAgbGlieGxfX2pzb25fb2Jq ZWN0ICpvID0gTlVMTDsKKworICAgIGlmICghZXYtPnJ4X2J1Zl91c2VkKQorICAgICAgICByZXR1 cm4gRVJST1JfTk9URk9VTkQ7CisKKyAgICAvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgYSBRTVAg bWVzc2FnZTogIlxyXG4iICovCisgICAgZW5kID0gbWVtbWVtKGV2LT5yeF9idWYsIGV2LT5yeF9i dWZfdXNlZCwgZW9tLCBlb21sKTsKKyAgICBpZiAoIWVuZCkKKyAgICAgICAgcmV0dXJuIEVSUk9S X05PVEZPVU5EOworICAgIGxlbiA9IChlbmQgLSBldi0+cnhfYnVmKSArIGVvbWw7CisKKyAgICBM T0dfUU1QKCJwYXJzaW5nICVsdUI6ICclLipzJyIsIGxlbiwgKGludClsZW4sIGV2LT5yeF9idWYp OworCisgICAgLyogUmVwbGFjZSBcciBieSBcMCBzbyB0aGF0IGxpYnhsX19qc29uX3BhcnNlIGNh biB1c2Ugc3RybGVuICovCisgICAgZXYtPnJ4X2J1ZltsZW4gLSBlb21sXSA9ICdcMCc7CisgICAg byA9IGxpYnhsX19qc29uX3BhcnNlKGdjLCBldi0+cnhfYnVmKTsKKworICAgIGlmICghbykgewor ICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsICJQYXJzZSBlcnJvciIpOworICAgICAgICBy ZXR1cm4gRVJST1JfUFJPVE9DT0xfRVJST1JfUU1QOworICAgIH0KKworICAgIGV2LT5yeF9idWZf dXNlZCAtPSBsZW47CisgICAgbWVtbW92ZShldi0+cnhfYnVmLCBldi0+cnhfYnVmICsgbGVuLCBl di0+cnhfYnVmX3VzZWQpOworCisgICAgTE9HX1FNUCgiSlNPTiBvYmplY3QgcmVjZWl2ZWQ6ICVz IiwgSlNPTihvKSk7CisKKyAgICAqb19yID0gbzsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHFtcF9ldl9wYXJzZV9lcnJvcl9tZXNzYWdlcyhsaWJ4bF9fZWdjICplZ2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZXZfcW1wICpldiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX19qc29uX29i amVjdCAqcmVzcCk7CisKK3N0YXRpYyBpbnQgcW1wX2V2X2hhbmRsZV9tZXNzYWdlKGxpYnhsX19l Z2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19ldl9xbXAg KmV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfX2pzb25f b2JqZWN0ICpyZXNwKQorICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBl dmVyeSBtZXNzYWdlcyBzZW50IGJ5IHRoZSBRTVAgc2VydmVyLgorICAgICAqIFJldHVybiB2YWx1 ZXM6CisgICAgICogICA8IDAgICAgbGlieGwgZXJyb3IgY29kZQorICAgICAqICAgMCAgICAgIHN1 Y2Nlc3MKKyAgICAgKiAgIDEgICAgICBzdWNjZXNzLCBidXQgYSB1c2VyIGNhbGxiYWNrIGhhcyBi ZWVuIGNhbGxlZCwKKyAgICAgKiAgICAgICAgICBgZXZgIHNob3VsZCBub3QgYmUgdXNlZCBhbnlt b3JlLgorICAgICAqCisgICAgICogUG9zc2libGUgc3RhdGUgY2hhbmdlczoKKyAgICAgKiBjb25u ZWN0aW5nIC0+IGNhcGFiaWxpdHlfbmVnb3RpYXRpb24KKyAgICAgKiBjYXBhYmlsaXR5X25lZ290 aWF0aW9uIC0+IHdhaXRpbmdfcmVwbHkKKyAgICAgKiB3YWl0aW5nX3JlcGx5IC0+IHdhaXRpbmdf cmVwbHkvY29ubmVjdGVkCisgICAgICoKKyAgICAgKiBvbiBlcnJvcjogYnJva2VuCisgICAgICov Cit7CisgICAgU1RBVEVfQU9fR0MoZXYtPmFvKTsKKyAgICBpbnQgaWQ7CisgICAgY2hhciAqYnVm OworICAgIGludCByYyA9IDA7CisgICAgY29uc3QgbGlieGxfX2pzb25fb2JqZWN0ICpvOworICAg IGNvbnN0IGxpYnhsX19qc29uX29iamVjdCAqcmVzcG9uc2U7CisgICAgbGlieGxfX3FtcF9tZXNz YWdlX3R5cGUgdHlwZSA9IHFtcF9yZXNwb25zZV90eXBlKHJlc3ApOworCisgICAgc3dpdGNoICh0 eXBlKSB7CisgICAgY2FzZSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQRV9RTVA6CisgICAgICAgIC8q IGdyZWV0aW5nIG1lc3NhZ2UgKi8KKworICAgICAgICBpZiAoZXYtPnN0YXRlICE9IHFtcF9zdGF0 ZV9jb25uZWN0aW5nKSB7CisgICAgICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsCisgICAg ICAgICAgICAgICAgICJVbmV4cGVjdGVkIGdyZWV0aW5nIG1lc3NhZ2UgcmVjZWl2ZWQiKTsKKyAg ICAgICAgICAgIHJldHVybiBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7CisgICAgICAgIH0KKwor ICAgICAgICAvKiBQcmVwYXJlIG5leHQgbWVzc2FnZSB0byBzZW5kICovCisgICAgICAgIGFzc2Vy dCghZXYtPnR4X2J1Zik7CisgICAgICAgIGV2LT5pZCA9IGV2LT5uZXh0X2lkKys7CisgICAgICAg IGJ1ZiA9IHFtcF9wcmVwYXJlX2NtZChnYywgInFtcF9jYXBhYmlsaXRpZXMiLCBOVUxMLCBldi0+ aWQpOworICAgICAgICBpZiAoIWJ1ZikgeworICAgICAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRv bWlkLAorICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGdlbmVyYXRlIHFtcF9jYXBhYmlsaXRp ZXMgY29tbWFuZCIpOworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisgICAgICAgIH0K KyAgICAgICAgZXYtPnR4X2J1ZiA9IGJ1ZjsKKyAgICAgICAgZXYtPnR4X2J1Zl9sZW4gPSBzdHJs ZW4oYnVmKTsKKyAgICAgICAgZXYtPnR4X2J1Zl9vZmYgPSAwOworICAgICAgICBxbXBfZXZfc2V0 X3N0YXRlKGdjLCBldiwgcW1wX3N0YXRlX2NhcGFiaWxpdHlfbmVnb3RpYXRpb24pOworCisgICAg ICAgIHJldHVybiAwOworCisgICAgY2FzZSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQRV9SRVRVUk46 CisgICAgY2FzZSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQRV9FUlJPUjoKKyAgICAgICAgLyoKKyAg ICAgICAgICogUmVwbHkgdG8gYSBjb21tYW5kIChzdWNjZXNzL2Vycm9yKSBvciBzZXJ2ZXIgZXJy b3IKKyAgICAgICAgICoKKyAgICAgICAgICogSW4gdGhpcyBjYXNlcywgd2UgYXJlIHBhcnNpbmcg dHdvIHBvc3NpYmxlcyByZXNwb25zZXM6CisgICAgICAgICAqIC0gc3VjY2VzczoKKyAgICAgICAg ICogeyAicmV0dXJuIjoganNvbi12YWx1ZSwgImlkIjogaW50IH0KKyAgICAgICAgICogLSBlcnJv cjoKKyAgICAgICAgICogeyAiZXJyb3IiOiB7ICJjbGFzcyI6IHN0cmluZywgImRlc2MiOiBzdHJp bmcgfSwgImlkIjogaW50IH0KKyAgICAgICAgICovCisKKyAgICAgICAgbyA9IGxpYnhsX19qc29u X21hcF9nZXQoImlkIiwgcmVzcCwgSlNPTl9JTlRFR0VSKTsKKyAgICAgICAgaWYgKCFvKSB7Cisg ICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSWYgImlkIiBpc24ndCBwcmVzZW50LCBhbiBl cnJvciBvY2N1ciBvbiB0aGUgc2VydmVyIGJlZm9yZQorICAgICAgICAgICAgICogaXQgaGFzIHJl YWQgdGhlICJpZCIgcHJvdmlkZWQgYnkgbGlieGwuCisgICAgICAgICAgICAgKgorICAgICAgICAg ICAgICogV2UgZGVsaWJlcmF0ZWx5IHNxdWFzaCBhbGwgZXJyb3JzIGludG8KKyAgICAgICAgICAg ICAqIEVSUk9SX1BST1RPQ09MX0VSUk9SX1FNUCBhcyBxbXBfZXZfcGFyc2VfZXJyb3JfbWVzc2Fn ZXMgbWF5CisgICAgICAgICAgICAgKiBhbHNvIHJldHVybiBFUlJPUl9RTVBfKiBidXQgdGhvc2Ug YXJlIHJlc2VydmVkIGZvciBlcnJvcnMKKyAgICAgICAgICAgICAqIHJldHVybiBieSB0aGUgY2Fs bGVyJ3MgY29tbWFuZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcW1wX2V2X3BhcnNl X2Vycm9yX21lc3NhZ2VzKGVnYywgZXYsIHJlc3ApOworICAgICAgICAgICAgcmV0dXJuIEVSUk9S X1BST1RPQ09MX0VSUk9SX1FNUDsKKyAgICAgICAgfQorCisgICAgICAgIGlkID0gbGlieGxfX2pz b25fb2JqZWN0X2dldF9pbnRlZ2VyKG8pOworCisgICAgICAgIGlmIChpZCAhPSBldi0+aWQpIHsK KyAgICAgICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwKKyAgICAgICAgICAgICAgICAgIk1l c3NhZ2UgZnJvbSBRRU1VIHdpdGggdW5leHBlY3RlZCBpZCAlZDogJXMiLAorICAgICAgICAgICAg ICAgICBpZCwgSlNPTihyZXNwKSk7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfUFJPVE9DT0xf RVJST1JfUU1QOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChldi0+c3RhdGUpIHsKKyAg ICAgICAgY2FzZSBxbXBfc3RhdGVfY2FwYWJpbGl0eV9uZWdvdGlhdGlvbjoKKyAgICAgICAgICAg IGlmICh0eXBlICE9IExJQlhMX19RTVBfTUVTU0FHRV9UWVBFX1JFVFVSTikgeworICAgICAgICAg ICAgICAgIExPR0QoRVJST1IsIGV2LT5kb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICJFcnJv ciBkdXJpbmcgY2FwYWJpbGl0eSBuZWdvdGlhdGlvbjogJXMiLAorICAgICAgICAgICAgICAgICAg ICAgSlNPTihyZXNwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1BST1RPQ09MX0VS Uk9SX1FNUDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHFtcF9ldl9zZXRfc3RhdGUoZ2Ms IGV2LCBxbXBfc3RhdGVfd2FpdGluZ19yZXBseSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg ICAgICAgY2FzZSBxbXBfc3RhdGVfd2FpdGluZ19yZXBseToKKyAgICAgICAgICAgIGlmICh0eXBl ID09IExJQlhMX19RTVBfTUVTU0FHRV9UWVBFX1JFVFVSTikgeworICAgICAgICAgICAgICAgIHJl c3BvbnNlID0gbGlieGxfX2pzb25fbWFwX2dldCgicmV0dXJuIiwgcmVzcCwgSlNPTl9BTlkpOwor ICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgLyogZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gTlVM TDsKKyAgICAgICAgICAgICAgICByYyA9IHFtcF9ldl9wYXJzZV9lcnJvcl9tZXNzYWdlcyhlZ2Ms IGV2LCByZXNwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHFtcF9ldl9zZXRfc3RhdGUo Z2MsIGV2LCBxbXBfc3RhdGVfY29ubmVjdGVkKTsKKyAgICAgICAgICAgIGV2LT5jYWxsYmFjayhl Z2MsIGV2LCByZXNwb25zZSwgcmMpOyAvKiBtdXN0IGJlIGxhc3QgKi8KKyAgICAgICAgICAgIHJl dHVybiAxOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRv bWlkLCAiVW5leHBlY3RlZCBtZXNzYWdlOiAlcyIsIEpTT04ocmVzcCkpOworICAgICAgICAgICAg cmV0dXJuIEVSUk9SX1BST1RPQ09MX0VSUk9SX1FNUDsKKyAgICAgICAgfQorICAgICAgICByZXR1 cm4gMDsKKworICAgIGNhc2UgTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfRVZFTlQ6CisgICAgICAg IC8qIEV2ZW50cyBhcmUgaWdub3JlZCAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIGNhc2Ug TElCWExfX1FNUF9NRVNTQUdFX1RZUEVfSU5WQUxJRDoKKyAgICAgICAgTE9HRChFUlJPUiwgZXYt PmRvbWlkLCAiVW5leHBlY3RlZCBtZXNzYWdlIHJlY2VpdmVkOiAlcyIsCisgICAgICAgICAgICAg SlNPTihyZXNwKSk7CisgICAgICAgIHJldHVybiBFUlJPUl9QUk9UT0NPTF9FUlJPUl9RTVA7CisK KyAgICBkZWZhdWx0OgorICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHFtcF9ldl9wYXJzZV9lcnJvcl9tZXNzYWdlcyhsaWJ4bF9fZWdjICpl Z2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZXZfcW1w ICpldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhs X19qc29uX29iamVjdCAqcmVzcCkKKyAgICAvKiBubyBzdGF0ZSBjaGFuZ2UgKi8KK3sKKyAgICBT VEFURV9BT19HQyhldi0+YW8pOworICAgIGludCByYzsKKyAgICBjb25zdCBjaGFyICpzOworICAg IGNvbnN0IGxpYnhsX19qc29uX29iamVjdCAqbzsKKyAgICBjb25zdCBsaWJ4bF9fanNvbl9vYmpl Y3QgKmVycjsKKworICAgIC8qCisgICAgICogeyAiZXJyb3IiOiB7ICJjbGFzcyI6IHN0cmluZywg ImRlc2MiOiBzdHJpbmcgfSB9CisgICAgICovCisKKyAgICBlcnIgPSBsaWJ4bF9fanNvbl9tYXBf Z2V0KCJlcnJvciIsIHJlc3AsIEpTT05fTUFQKTsKKworICAgIG8gPSBsaWJ4bF9fanNvbl9tYXBf Z2V0KCJjbGFzcyIsIGVyciwgSlNPTl9TVFJJTkcpOworICAgIGlmICghbykgeworICAgICAgICBM T0dEKEVSUk9SLCBldi0+ZG9taWQsCisgICAgICAgICAgICAgIlByb3RvY29sIGVycm9yOiBtaXNz aW5nICdjbGFzcycgbWVtYmVyIGluIGVycm9yIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIEVS Uk9SX1BST1RPQ09MX0VSUk9SX1FNUDsKKyAgICB9CisgICAgcyA9IGxpYnhsX19qc29uX29iamVj dF9nZXRfc3RyaW5nKG8pOworICAgIGlmIChzKQorICAgICAgICByYyA9IHFtcF9lcnJvcl9jbGFz c190b19saWJ4bF9lcnJvcl9jb2RlKGdjLCBzKTsKKyAgICBlbHNlCisgICAgICAgIHJjID0gRVJS T1JfUFJPVE9DT0xfRVJST1JfUU1QOworCisgICAgbyA9IGxpYnhsX19qc29uX21hcF9nZXQoImRl c2MiLCBlcnIsIEpTT05fU1RSSU5HKTsKKyAgICBpZiAoIW8pIHsKKyAgICAgICAgTE9HRChFUlJP UiwgZXYtPmRvbWlkLAorICAgICAgICAgICAgICJQcm90b2NvbCBlcnJvcjogbWlzc2luZyAnZGVz YycgbWVtYmVyIGluIGVycm9yIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIEVSUk9SX1BST1RP Q09MX0VSUk9SX1FNUDsKKyAgICB9CisgICAgcyA9IGxpYnhsX19qc29uX29iamVjdF9nZXRfc3Ry aW5nKG8pOworICAgIGlmIChzKQorICAgICAgICBMT0dEKEVSUk9SLCBldi0+ZG9taWQsICIlcyIs IHMpOworICAgIGVsc2UKKyAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAiUmVjZWl2ZWQg dW5leHBlY3RlZCBlcnJvcjogJXMiLAorICAgICAgICAgICAgIEpTT04ocmVzcCkpOworICAgIHJl dHVybiByYzsKK30KKworLyoKKyAqIGxpYnhsX19ldl9xbXBfKgorICovCisKK3ZvaWQgbGlieGxf X2V2X3FtcF9pbml0KGxpYnhsX19ldl9xbXAgKmV2KQorICAgIC8qIGRpc2Nvbm5lY3RlZCAtPiBk aXNjb25uZWN0ZWQgKi8KK3sKKyAgICAvKiBTdGFydCB3aXRoIGFuIG1lc3NhZ2UgSUQgdGhhdCBp cyBvYnZpb3VzbHkgZ2VuZXJhdGVkIGJ5IGxpYnhsCisgICAgICogInhscVwwIiAqLworICAgIGV2 LT5uZXh0X2lkID0gMHg3ODZjNzEwMDsKKworICAgIGV2LT5jZmQgPSBOVUxMOworICAgIGxpYnhs X19ldl9mZF9pbml0KCZldi0+ZWZkKTsKKyAgICBldi0+c3RhdGUgPSBxbXBfc3RhdGVfZGlzY29u bmVjdGVkOworICAgIGV2LT5pZCA9IDA7CisKKyAgICBldi0+cnhfYnVmID0gTlVMTDsKKyAgICBl di0+cnhfYnVmX3NpemUgPSBldi0+cnhfYnVmX3VzZWQgPSAwOworICAgIHFtcF9ldl90eF9idWZf Y2xlYXIoZXYpOworCisgICAgZXYtPm1zZyA9IE5VTEw7CisgICAgZXYtPm1zZ19pZCA9IDA7Cit9 CisKK2ludCBsaWJ4bF9fZXZfcW1wX3NlbmQobGlieGxfX2djICp1bnVzZWRfZ2MsIGxpYnhsX19l dl9xbXAgKmV2LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjbWQsIGxpYnhs X19qc29uX29iamVjdCAqYXJncykKKyAgICAvKiBkaXNjb25uZWN0ZWQgLT4gY29ubmVjdGluZwor ICAgICAqIGNvbm5lY3RlZCAtPiB3YWl0aW5nX3JlcGx5ICh3aXRoIG1zZyBzZXQpCisgICAgICog b24gZXJyb3I6IGRpc2Nvbm5lY3RlZCAqLworeworICAgIFNUQVRFX0FPX0dDKGV2LT5hbyk7Cisg ICAgaW50IHJjOworCisgICAgTE9HRChERUJVRywgZXYtPmRvbWlkLCAiIGV2ICVwLCBjbWQgJyVz JyIsIGV2LCBjbWQpOworCisgICAgYXNzZXJ0KGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVfZGlzY29u bmVjdGVkIHx8CisgICAgICAgICAgIGV2LT5zdGF0ZSA9PSBxbXBfc3RhdGVfY29ubmVjdGVkKTsK KyAgICBhc3NlcnQoY21kKTsKKworICAgIC8qIENvbm5lY3QgdG8gUUVNVSBpZiBub3QgYWxyZWFk eSBjb25uZWN0ZWQgKi8KKyAgICBpZiAoZXYtPnN0YXRlID09IHFtcF9zdGF0ZV9kaXNjb25uZWN0 ZWQpIHsKKyAgICAgICAgcmMgPSBxbXBfZXZfY29ubmVjdChnYywgZXYpOworICAgICAgICBpZiAo cmMpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8qIFByZXBhcmUgdXNl ciBjb21tYW5kICovCisgICAgZXYtPm1zZ19pZCA9IGV2LT5uZXh0X2lkKys7CisgICAgZXYtPm1z ZyA9IHFtcF9wcmVwYXJlX2NtZChnYywgY21kLCBhcmdzLCBldi0+bXNnX2lkKTsKKyAgICBpZiAo IWV2LT5tc2cpIHsKKyAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLCAiRmFpbGVkIHRvIGdl bmVyYXRlIGNhbGxlcidzIGNvbW1hbmQgJXMiLAorICAgICAgICAgICAgIGNtZCk7CisgICAgICAg IHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgaWYgKGV2 LT5zdGF0ZSA9PSBxbXBfc3RhdGVfY29ubmVjdGVkKSB7CisgICAgICAgIHFtcF9ldl9zZXRfc3Rh dGUoZ2MsIGV2LCBxbXBfc3RhdGVfd2FpdGluZ19yZXBseSk7CisgICAgfQorCisgICAgcmV0dXJu IDA7CisKK2Vycm9yOgorICAgIGxpYnhsX19ldl9xbXBfZGlzcG9zZShnYywgZXYpOworICAgIHJl dHVybiByYzsKK30KKwordm9pZCBsaWJ4bF9fZXZfcW1wX2Rpc3Bvc2UobGlieGxfX2djICpnYywg bGlieGxfX2V2X3FtcCAqZXYpCisgICAgLyogKiAtPiBkaXNjb25uZWN0ZWQgKi8KK3sKKyAgICBM T0dEKERFQlVHLCBldi0+ZG9taWQsICIgZXYgJXAiLCBldik7CisKKyAgICBsaWJ4bF9fZXZfZmRf ZGVyZWdpc3RlcihnYywgJmV2LT5lZmQpOworICAgIGxpYnhsX19jYXJlZmRfY2xvc2UoZXYtPmNm ZCk7CisKKyAgICBsaWJ4bF9fZXZfcW1wX2luaXQoZXYpOworfQorCiAvKgogICogTG9jYWwgdmFy aWFibGVzOgogICogbW9kZTogQwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMu aWRsIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCmluZGV4IDE0MWM0NmU0MmEuLjIxMmIw MGE2NzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAorKysgYi90b29s cy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKQEAgLTY5LDYgKzY5LDEyIEBAIGxpYnhsX2Vycm9yID0g RW51bWVyYXRpb24oImVycm9yIiwgWwogICAgICgtMjMsICJOT1RGT1VORCIpLAogICAgICgtMjQs ICJET01BSU5fREVTVFJPWUVEIiksICMgVGFyZ2V0IGRvbWFpbiBjZWFzZWQgdG8gZXhpc3QgZHVy aW5nIG9wCiAgICAgKC0yNSwgIkZFQVRVUkVfUkVNT1ZFRCIpLCAjIEZvciBmdW5jdGlvbmFsaXR5 IHRoYXQgaGFzIGJlZW4gcmVtb3ZlZAorICAgICgtMjYsICJQUk9UT0NPTF9FUlJPUl9RTVAiKSwK KyAgICAoLTI3LCAiVU5LTk9XTl9RTVBfRVJST1IiKSwKKyAgICAoLTI4LCAiUU1QX0dFTkVSSUNf RVJST1IiKSwgIyB1bnNwZWNpZmllZCBxbXAgZXJyb3IKKyAgICAoLTI5LCAiUU1QX0NPTU1BTkRf Tk9UX0ZPVU5EIiksICMgdGhlIHJlcXVlc3RlZCBjb21tYW5kIGhhcyBub3QgYmVlbiBmb3VuZAor ICAgICgtMzAsICJRTVBfREVWSUNFX05PVF9BQ1RJVkUiKSwgIyBhIGRldmljZSBoYXMgZmFpbGVk IHRvIGJlIGJlY29tZSBhY3RpdmUKKyAgICAoLTMxLCAiUU1QX0RFVklDRV9OT1RfRk9VTkQiKSwg IyB0aGUgcmVxdWVzdGVkIGRldmljZSBoYXMgbm90IGJlZW4gZm91bmQKICAgICBdLCB2YWx1ZV9u YW1lc3BhY2UgPSAiIikKIAogbGlieGxfZG9tYWluX3R5cGUgPSBFbnVtZXJhdGlvbigiZG9tYWlu X3R5cGUiLCBbCi0tIApBbnRob255IFBFUkFSRAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s aXN0aW5mby94ZW4tZGV2ZWw=