From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joshua Perrett Subject: [PATCH] libxl: made vm mac address assignment deterministic Date: Thu, 30 Aug 2018 15:18:04 +0000 Message-ID: <20180830151804.23674-1-jperrett256@gmail.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 1fvOiy-0006zs-2k for xen-devel@lists.xenproject.org; Thu, 30 Aug 2018 15:19:08 +0000 Received: by mail-ed1-x542.google.com with SMTP id s10-v6so6803777edb.11 for ; Thu, 30 Aug 2018 08:19:06 -0700 (PDT) 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: Wei Liu , Ian Jackson , George Dunlap , Joshua Perrett List-Id: xen-devel@lists.xenproject.org VXNlcyBNRDUgb24gdGhlIGhvc3QgbWFjIGFkZHJlc3MsIHZtIG5hbWUgYW5kIHZpZiBpbmRleCB0 byBnZW5lcmF0ZSB0aGUKbGFzdCB0aHJlZSBieXRlcyBvZiB0aGUgdm0gbWFjIGFkZHJlc3MgKGZv ciBlYWNoIHZtKS4KCkl0IHVzZXMgdGhlIHZpZiBpbmRleCB0byBhY2NvdW50IGZvciBtdWx0aXBs ZSB2aWZzLgoKTUQ1IGNvZGUgaXMgb3JpZ2luYWxseSBmcm9tIHRoZSBwdWJsaWMgZG9tYWluICh3 cml0dGVuIGJ5IENvbGluIFBsdW1iIGluCjE5OTMpLCBmaWxlcyBmb3VuZCBpbiB4ZW4vdG9vbHMv YmxrdGFwMi9kcml2ZXJzLy4KClJlcG9ydGVkLWJ5OiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVu bGFwQGNpdHJpeC5jb20+ClNpZ25lZC1vZmYtYnk6IEpvc2h1YSBQZXJyZXR0IDxqcGVycmV0dDI1 NkBnbWFpbC5jb20+Ci0tLQogdG9vbHMvbGlieGwvTWFrZWZpbGUgICAgfCAgIDIgKy0KIHRvb2xz L2xpYnhsL2xpYnhsX25pYy5jIHwgIDY1ICsrKysrKysrKystLQogdG9vbHMvbGlieGwvbWQ1LmMg ICAgICAgfCAyNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiB0b29scy9saWJ4bC9tZDUuaCAgICAgICB8ICAyNiArKysrKwogNCBmaWxlcyBjaGFuZ2Vk LCAzNTIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 b29scy9saWJ4bC9tZDUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL21kNS5oCgpk aWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmlsZQpp bmRleCA2ZGEzNDJlZDYxLi42ZTdkYjExMzY3IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9NYWtl ZmlsZQorKysgYi90b29scy9saWJ4bC9NYWtlZmlsZQpAQCAtMTQyLDcgKzE0Miw3IEBAIExJQlhM X09CSlMgPSBmbGV4YXJyYXkubyBsaWJ4bC5vIGxpYnhsX2NyZWF0ZS5vIGxpYnhsX2RtLm8gbGli eGxfcGNpLm8gXAogCQkJbGlieGxfOXBmcy5vIGxpYnhsX2RvbWFpbi5vIGxpYnhsX3ZkaXNwbC5v IFwKIAkJCWxpYnhsX3B2Y2FsbHMubyBsaWJ4bF92c25kLm8gbGlieGxfdmtiLm8gJChMSUJYTF9P QkpTLXkpCiBMSUJYTF9PQkpTICs9IGxpYnhsX2dlbmlkLm8KLUxJQlhMX09CSlMgKz0gX2xpYnhs X3R5cGVzLm8gbGlieGxfZmxhc2subyBfbGlieGxfdHlwZXNfaW50ZXJuYWwubworTElCWExfT0JK UyArPSBfbGlieGxfdHlwZXMubyBsaWJ4bF9mbGFzay5vIF9saWJ4bF90eXBlc19pbnRlcm5hbC5v IG1kNS5vCiAKIExJQlhMX1RFU1RTICs9IHRpbWVkZXJlZwogTElCWExfVEVTVFNfUFJPR1MgPSAk KExJQlhMX1RFU1RTKSBmZGRlcmVncmFjZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxf bmljLmMgYi90b29scy9saWJ4bC9saWJ4bF9uaWMuYwppbmRleCAwMWI3MTFiODRlLi45YTFjMGZi MTZmIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9uaWMuYworKysgYi90b29scy9saWJ4 bC9saWJ4bF9uaWMuYwpAQCAtMTcsNiArMTcsMTggQEAKIAogI2luY2x1ZGUgImxpYnhsX2ludGVy bmFsLmgiCiAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm1kNS5oIgorCisjaWZk ZWYgX19saW51eF9fCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8aWZhZGRycy5o PgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4K KyNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNlbmRpZgorCiBpbnQgbGlieGxfbWFjX3RvX2Rl dmljZV9uaWMobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1hYywgbGlieGxfZGV2aWNlX25pYyAqbmljKQogewpA QCAtNTMsOCArNjUsMzggQEAgaW50IGxpYnhsX21hY190b19kZXZpY2VfbmljKGxpYnhsX2N0eCAq Y3R4LCB1aW50MzJfdCBkb21pZCwKICAgICByZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgbGli eGxfX2dldF9ob3N0X21hYyhsaWJ4bF9fZ2MgKmdjLCB1bnNpZ25lZCBjaGFyICpidWYpCit7Cisg ICAgaW50IHJjID0gLTE7CisgICAgI2lmZGVmIF9fbGludXhfXworICAgIHN0cnVjdCBpZmFkZHJz ICppZmFjZV9saXN0OworCisgICAgaWYgKGdldGlmYWRkcnMoJmlmYWNlX2xpc3QpID09IDApIHsK KyAgICAgICAgZm9yIChzdHJ1Y3QgaWZhZGRycyAqaWZhY2UgPSBpZmFjZV9saXN0OworICAgICAg ICAgICAgaWZhY2UgIT0gTlVMTDsgaWZhY2UgPSBpZmFjZS0+aWZhX25leHQpIHsKKyAgICAgICAg ICAgIGlmIChpZmFjZS0+aWZhX2FkZHIgJiYgaWZhY2UtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0g QUZfUEFDS0VUKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2xsICpzID0gKHN0 cnVjdCBzb2NrYWRkcl9sbCAqKWlmYWNlLT5pZmFfYWRkcjsKKyAgICAgICAgICAgICAgICBpZiAo cy0+c2xsX2hhbGVuID09IDYpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgcy0+ c2xsX2FkZHIsIDYpOworICAgICAgICAgICAgICAgICAgICBpZihidWZbMF0gfHwgYnVmWzFdIHx8 IGJ1ZlsyXSB8fCBidWZbM10gfHwgYnVmWzRdIHx8IGJ1Zls1XSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgZnJlZWlmYWRkcnMoaWZhY2VfbGlzdCk7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgTE9HKEVSUk9SLCAiZ2V0aWZhZGRyc1xuIik7CisgICAgfQorICAgICNlbmRpZgorCisgICAg cmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfbmljX3NldGRlZmF1bHQo bGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX25pYyAqbmljLCBib29sIGhvdHBsdWcpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX25pYyAqbmlj LCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGludCBuaWNfaW5kZXgsIGJvb2wgaG90cGx1ZykKIHsKICAgICBpbnQgcmM7CiAK QEAgLTY1LDExICsxMDcsMjIgQEAgc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX25pY19zZXRkZWZh dWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICBpZiAoIW5pYy0+bW9k ZWwpIHJldHVybiBFUlJPUl9OT01FTTsKICAgICB9CiAgICAgaWYgKGxpYnhsX19tYWNfaXNfZGVm YXVsdCgmbmljLT5tYWMpKSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgKnI7Ci0gICAgICAgIGxp YnhsX3V1aWQgdXVpZDsKKyAgICAgICAgdWludDhfdCByWzE2XTsKKworICAgICAgICBNRDVfQ1RY IGN0eDsKKyAgICAgICAgTUQ1SW5pdCgmY3R4KTsKKworICAgICAgICB1aW50OF90IGhvc3RtYWNb Nl0gPSB7MH07CisKKyAgICAgICAgaWYobGlieGxfX2dldF9ob3N0X21hYyhnYywgaG9zdG1hYykg PT0gMCkgeworICAgICAgICAgICAgTUQ1VXBkYXRlKCZjdHgsIGhvc3RtYWMsIHNpemVvZihob3N0 bWFjKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMT0dEKFdBUk4sIGRvbWlkLCAi ZmFpbGVkIHRvIGdldCBob3N0IG1hYyBhZGRyZXNzLCB3aWxsIGdlbmVyYXRlIHZtIG1hYyBhZGRy ZXNzIHdpdGhvdXRcbiIpOworICAgICAgICB9CiAKLSAgICAgICAgbGlieGxfdXVpZF9nZW5lcmF0 ZSgmdXVpZCk7Ci0gICAgICAgIHIgPSBsaWJ4bF91dWlkX2J5dGVhcnJheSgmdXVpZCk7CisgICAg ICAgIE1ENVVwZGF0ZSgmY3R4LCAodWludDhfdCAqKSBuYW1lLCBzdHJsZW4obmFtZSkpOworICAg ICAgICBNRDVVcGRhdGUoJmN0eCwgKHVpbnQ4X3QgKikgJm5pY19pbmRleCwgc2l6ZW9mKG5pY19p bmRleCkpOworICAgICAgICBNRDVGaW5hbChyLCAmY3R4KTsKIAogICAgICAgICBuaWMtPm1hY1sw XSA9IDB4MDA7CiAgICAgICAgIG5pYy0+bWFjWzFdID0gMHgxNjsKQEAgLTQ3OCw3ICs1MzEsNyBA QCBpbnQgbGlieGxfX2RldmljZV9uaWNfc2V0X2RldmlkcyhsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9k b21haW5fY29uZmlnICpkX2NvbmZpZywKICAgICAgICAgICogYnV0IHFlbXUgbmVlZHMgdGhlIG5p YyBpbmZvcm1hdGlvbiB0byBiZSBjb21wbGV0ZS4KICAgICAgICAgICovCiAgICAgICAgIHJldCA9 IGxpYnhsX19kZXZpY2VfbmljX3NldGRlZmF1bHQoZ2MsIGRvbWlkLCAmZF9jb25maWctPm5pY3Nb aV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfY29uZmlnLT5jX2lu Zm8ubmFtZSwgaSwgZmFsc2UpOwogICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICBMT0dE KEVSUk9SLCBkb21pZCwgIlVuYWJsZSB0byBzZXQgbmljIGRlZmF1bHRzIGZvciBuaWMgJWQiLCBp KTsKICAgICAgICAgICAgIGdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbWQ1LmMg Yi90b29scy9saWJ4bC9tZDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li44OGVhMTM5MzhhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbGlieGwvbWQ1LmMKQEAgLTAs MCArMSwyNjYgQEAKKy8qIHN0YXJ0IC0gcHVibGljIGRvbWFpbiBNRDUgaW1wbGVtZW50YXRpb24g Ki8KKy8qCisgKiBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgTUQ1IG1lc3NhZ2UtZGlnZXN0IGFs Z29yaXRobS4KKyAqIFRoZSBhbGdvcml0aG0gaXMgZHVlIHRvIFJvbiBSaXZlc3QuICBUaGlzIGNv ZGUgd2FzCisgKiB3cml0dGVuIGJ5IENvbGluIFBsdW1iIGluIDE5OTMsIG5vIGNvcHlyaWdodCBp cyBjbGFpbWVkLgorICogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluOyBkbyB3aXRo IGl0IHdoYXQgeW91IHdpc2guCisgKgorICogRXF1aXZhbGVudCBjb2RlIGlzIGF2YWlsYWJsZSBm cm9tIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVk IGFnYWluc3QgdGhhdCwgYW5kIGlzIGVxdWl2YWxlbnQsCisgKiBleGNlcHQgdGhhdCB5b3UgZG9u J3QgbmVlZCB0byBpbmNsdWRlIHR3byBwYWdlcyBvZiBsZWdhbGVzZQorICogd2l0aCBldmVyeSBj b3B5LgorICoKKyAqIFRvIGNvbXB1dGUgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGEgY2h1bmsgb2Yg Ynl0ZXMsIGRlY2xhcmUgYW4KKyAqIE1ENUNvbnRleHQgc3RydWN0dXJlLCBwYXNzIGl0IHRvIE1E NUluaXQsIGNhbGwgTUQ1VXBkYXRlIGFzCisgKiBuZWVkZWQgb24gYnVmZmVycyBmdWxsIG9mIGJ5 dGVzLCBhbmQgdGhlbiBjYWxsIE1ENUZpbmFsLCB3aGljaAorICogd2lsbCBmaWxsIGEgc3VwcGxp ZWQgMTYtYnl0ZSBhcnJheSB3aXRoIHRoZSBkaWdlc3QuCisgKi8KKworI2luY2x1ZGUgPHN0cmlu Zy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgIm1kNS5oIgorCitzdGF0aWMgdm9p ZCBNRDVUcmFuc2Zvcm0odWludDMyX3QgYnVmWzRdLCB1aW50MzJfdCBjb25zdCBpblsxNl0pOwor CisKKy8qKgorICogbWQ1X3N1bSAtIE1ENSBoYXNoIGZvciBhIGRhdGEgYmxvY2sKKyAqIEBhZGRy OiBQb2ludGVycyB0byB0aGUgZGF0YSBhcmVhCisgKiBAbGVuOiBMZW5ndGhzIG9mIHRoZSBkYXRh IGJsb2NrCisgKiBAbWFjOiBCdWZmZXIgZm9yIHRoZSBoYXNoCisgKi8KK3ZvaWQgbWQ1X3N1bShj b25zdCB1aW50OF90ICphZGRyLCBjb25zdCBzaXplX3QgbGVuLCB1aW50OF90ICptYWMpCit7Cisg ICAgICAgIE1ENV9DVFggY3R4OworCisgICAgICAgIE1ENUluaXQoJmN0eCk7CisgICAgICAgIE1E NVVwZGF0ZSgmY3R4LCBhZGRyLCBsZW4pOworICAgICAgICBNRDVGaW5hbChtYWMsICZjdHgpOwor fQorCisKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIGJ5dGVSZXZlcnNlKGJ1Ziwg bGVuKSAgIC8qIE5vdGhpbmcgKi8KKyNlbHNlCisvKgorICogTm90ZTogdGhpcyBjb2RlIGlzIGhh cm1sZXNzIG9uIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMuCisgKi8KK3N0YXRpYyB2b2lkIGJ5dGVS ZXZlcnNlKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZ3MpCit7CisgICAgdWludDMy X3QgdDsKKyAgICBkbyB7CisgICAgICAgIHQgPSAodWludDMyX3QpICgodW5zaWduZWQpIGJ1Zlsz XSA8PCA4IHwgYnVmWzJdKSA8PCAxNiB8CisgICAgICAgICAgICAoKHVuc2lnbmVkKSBidWZbMV0g PDwgOCB8IGJ1ZlswXSk7CisgICAgICAgICoodWludDMyX3QgKikgYnVmID0gdDsKKyAgICAgICAg YnVmICs9IDQ7CisgICAgfSB3aGlsZSAoLS1sb25ncyk7Cit9CisjZW5kaWYKKworLyoKKyAqIFN0 YXJ0IE1ENSBhY2N1bXVsYXRpb24uICBTZXQgYml0IGNvdW50IHRvIDAgYW5kIGJ1ZmZlciB0byBt eXN0ZXJpb3VzCisgKiBpbml0aWFsaXphdGlvbiBjb25zdGFudHMuCisgKi8KK3ZvaWQgTUQ1SW5p dChzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4KQoreworICAgIGN0eC0+YnVmWzBdID0gMHg2NzQ1MjMw MTsKKyAgICBjdHgtPmJ1ZlsxXSA9IDB4ZWZjZGFiODk7CisgICAgY3R4LT5idWZbMl0gPSAweDk4 YmFkY2ZlOworICAgIGN0eC0+YnVmWzNdID0gMHgxMDMyNTQ3NjsKKworICAgIGN0eC0+Yml0c1sw XSA9IDA7CisgICAgY3R4LT5iaXRzWzFdID0gMDsKK30KKworLyoKKyAqIFVwZGF0ZSBjb250ZXh0 IHRvIHJlZmxlY3QgdGhlIGNvbmNhdGVuYXRpb24gb2YgYW5vdGhlciBidWZmZXIgZnVsbAorICog b2YgYnl0ZXMuCisgKi8KK3ZvaWQgTUQ1VXBkYXRlKHN0cnVjdCBNRDVDb250ZXh0ICpjdHgsIHVu c2lnbmVkIGNoYXIgY29uc3QgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworICAgIHVpbnQzMl90IHQ7 CisKKyAgICAvKiBVcGRhdGUgYml0Y291bnQgKi8KKworICAgIHQgPSBjdHgtPmJpdHNbMF07Cisg ICAgaWYgKChjdHgtPmJpdHNbMF0gPSB0ICsgKCh1aW50MzJfdCkgbGVuIDw8IDMpKSA8IHQpCisg ICAgICAgIGN0eC0+Yml0c1sxXSsrOyAgICAgICAgIC8qIENhcnJ5IGZyb20gbG93IHRvIGhpZ2gg Ki8KKyAgICBjdHgtPmJpdHNbMV0gKz0gbGVuID4+IDI5OworCisgICAgdCA9ICh0ID4+IDMpICYg MHgzZjsgICAgICAgIC8qIEJ5dGVzIGFscmVhZHkgaW4gc2hzSW5mby0+ZGF0YSAqLworCisgICAg LyogSGFuZGxlIGFueSBsZWFkaW5nIG9kZC1zaXplZCBjaHVua3MgKi8KKworICAgIGlmICh0KSB7 CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBjdHgtPmluICsg dDsKKworICAgICAgICB0ID0gNjQgLSB0OworICAgICAgICBpZiAobGVuIDwgdCkgeworICAgICAg ICAgICAgbWVtY3B5KHAsIGJ1ZiwgbGVuKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg fQorICAgICAgICBtZW1jcHkocCwgYnVmLCB0KTsKKyAgICAgICAgYnl0ZVJldmVyc2UoY3R4LT5p biwgMTYpOworICAgICAgICBNRDVUcmFuc2Zvcm0oY3R4LT5idWYsICh1aW50MzJfdCAqKSBjdHgt PmluKTsKKyAgICAgICAgYnVmICs9IHQ7CisgICAgICAgIGxlbiAtPSB0OworICAgIH0KKyAgICAv KiBQcm9jZXNzIGRhdGEgaW4gNjQtYnl0ZSBjaHVua3MgKi8KKworICAgIHdoaWxlIChsZW4gPj0g NjQpIHsKKyAgICAgICAgbWVtY3B5KGN0eC0+aW4sIGJ1ZiwgNjQpOworICAgICAgICBieXRlUmV2 ZXJzZShjdHgtPmluLCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKHVpbnQz Ml90ICopIGN0eC0+aW4pOworICAgICAgICBidWYgKz0gNjQ7CisgICAgICAgIGxlbiAtPSA2NDsK KyAgICB9CisKKyAgICAvKiBIYW5kbGUgYW55IHJlbWFpbmluZyBieXRlcyBvZiBkYXRhLiAqLwor CisgICAgbWVtY3B5KGN0eC0+aW4sIGJ1ZiwgbGVuKTsKK30KKworLyoKKyAqIEZpbmFsIHdyYXB1 cCAtIHBhZCB0byA2NC1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIGJpdCBwYXR0ZXJuCisgKiAxIDAq ICg2NC1iaXQgY291bnQgb2YgYml0cyBwcm9jZXNzZWQsIE1TQi1maXJzdCkKKyAqLwordm9pZCBN RDVGaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpjdHgp Cit7CisgICAgdW5zaWduZWQgY291bnQ7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKworICAgIC8q IENvbXB1dGUgbnVtYmVyIG9mIGJ5dGVzIG1vZCA2NCAqLworICAgIGNvdW50ID0gKGN0eC0+Yml0 c1swXSA+PiAzKSAmIDB4M0Y7CisKKyAgICAvKiBTZXQgdGhlIGZpcnN0IGNoYXIgb2YgcGFkZGlu ZyB0byAweDgwLiAgVGhpcyBpcyBzYWZlIHNpbmNlIHRoZXJlIGlzCisgICAgICAgYWx3YXlzIGF0 IGxlYXN0IG9uZSBieXRlIGZyZWUgKi8KKyAgICBwID0gY3R4LT5pbiArIGNvdW50OworICAgICpw KysgPSAweDgwOworCisgICAgLyogQnl0ZXMgb2YgcGFkZGluZyBuZWVkZWQgdG8gbWFrZSA2NCBi eXRlcyAqLworICAgIGNvdW50ID0gNjQgLSAxIC0gY291bnQ7CisKKyAgICAvKiBQYWQgb3V0IHRv IDU2IG1vZCA2NCAqLworICAgIGlmIChjb3VudCA8IDgpIHsKKyAgICAgICAgLyogVHdvIGxvdHMg b2YgcGFkZGluZzogIFBhZCB0aGUgZmlyc3QgYmxvY2sgdG8gNjQgYnl0ZXMgKi8KKyAgICAgICAg bWVtc2V0KHAsIDAsIGNvdW50KTsKKyAgICAgICAgYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYpOwor ICAgICAgICBNRDVUcmFuc2Zvcm0oY3R4LT5idWYsICh1aW50MzJfdCAqKSBjdHgtPmluKTsKKwor ICAgICAgICAvKiBOb3cgZmlsbCB0aGUgbmV4dCBibG9jayB3aXRoIDU2IGJ5dGVzICovCisgICAg ICAgIG1lbXNldChjdHgtPmluLCAwLCA1Nik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogUGFk IGJsb2NrIHRvIDU2IGJ5dGVzICovCisgICAgICAgIG1lbXNldChwLCAwLCBjb3VudCAtIDgpOwor ICAgIH0KKyAgICBieXRlUmV2ZXJzZShjdHgtPmluLCAxNCk7CisKKyAgICAvKiBBcHBlbmQgbGVu Z3RoIGluIGJpdHMgYW5kIHRyYW5zZm9ybSAqLworICAgICgodWludDMyX3QgKikgY3R4LT5pbilb MTRdID0gY3R4LT5iaXRzWzBdOworICAgICgodWludDMyX3QgKikgY3R4LT5pbilbMTVdID0gY3R4 LT5iaXRzWzFdOworCisgICAgTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAodWludDMyX3QgKikgY3R4 LT5pbik7CisgICAgYnl0ZVJldmVyc2UoKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5idWYsIDQpOwor ICAgIG1lbWNweShkaWdlc3QsIGN0eC0+YnVmLCAxNik7CisgICAgbWVtc2V0KGN0eCwgMCwgc2l6 ZW9mKCpjdHgpKTsgICAgIC8qIEluIGNhc2UgaXQncyBzZW5zaXRpdmUgKi8KK30KKworLyogVGhl IGZvdXIgY29yZSBmdW5jdGlvbnMgLSBGMSBpcyBvcHRpbWl6ZWQgc29tZXdoYXQgKi8KKworLyog I2RlZmluZSBGMSh4LCB5LCB6KSAoeCAmIHkgfCB+eCAmIHopICovCisjZGVmaW5lIEYxKHgsIHks IHopICh6IF4gKHggJiAoeSBeIHopKSkKKyNkZWZpbmUgRjIoeCwgeSwgeikgRjEoeiwgeCwgeSkK KyNkZWZpbmUgRjMoeCwgeSwgeikgKHggXiB5IF4geikKKyNkZWZpbmUgRjQoeCwgeSwgeikgKHkg XiAoeCB8IH56KSkKKworLyogVGhpcyBpcyB0aGUgY2VudHJhbCBzdGVwIGluIHRoZSBNRDUgYWxn b3JpdGhtLiAqLworI2RlZmluZSBNRDVTVEVQKGYsIHcsIHgsIHksIHosIGRhdGEsIHMpIFwKKyAg ICAgICAgKCB3ICs9IGYoeCwgeSwgeikgKyBkYXRhLCAgdyA9IHc8PHMgfCB3Pj4oMzItcyksICB3 ICs9IHggKQorCisvKgorICogVGhlIGNvcmUgb2YgdGhlIE1ENSBhbGdvcml0aG0sIHRoaXMgYWx0 ZXJzIGFuIGV4aXN0aW5nIE1ENSBoYXNoIHRvCisgKiByZWZsZWN0IHRoZSBhZGRpdGlvbiBvZiAx NiBsb25nd29yZHMgb2YgbmV3IGRhdGEuICBNRDVVcGRhdGUgYmxvY2tzCisgKiB0aGUgZGF0YSBh bmQgY29udmVydHMgYnl0ZXMgaW50byBsb25nd29yZHMgZm9yIHRoaXMgcm91dGluZS4KKyAqLwor c3RhdGljIHZvaWQgTUQ1VHJhbnNmb3JtKHVpbnQzMl90IGJ1Zls0XSwgdWludDMyX3QgY29uc3Qg aW5bMTZdKQoreworICAgIHJlZ2lzdGVyIHVpbnQzMl90IGEsIGIsIGMsIGQ7CisKKyAgICBhID0g YnVmWzBdOworICAgIGIgPSBidWZbMV07CisgICAgYyA9IGJ1ZlsyXTsKKyAgICBkID0gYnVmWzNd OworCisgICAgTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMF0gKyAweGQ3NmFhNDc4LCA3KTsK KyAgICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxXSArIDB4ZThjN2I3NTYsIDEyKTsKKyAg ICBNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsyXSArIDB4MjQyMDcwZGIsIDE3KTsKKyAgICBN RDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblszXSArIDB4YzFiZGNlZWUsIDIyKTsKKyAgICBNRDVT VEVQKEYxLCBhLCBiLCBjLCBkLCBpbls0XSArIDB4ZjU3YzBmYWYsIDcpOworICAgIE1ENVNURVAo RjEsIGQsIGEsIGIsIGMsIGluWzVdICsgMHg0Nzg3YzYyYSwgMTIpOworICAgIE1ENVNURVAoRjEs IGMsIGQsIGEsIGIsIGluWzZdICsgMHhhODMwNDYxMywgMTcpOworICAgIE1ENVNURVAoRjEsIGIs IGMsIGQsIGEsIGluWzddICsgMHhmZDQ2OTUwMSwgMjIpOworICAgIE1ENVNURVAoRjEsIGEsIGIs IGMsIGQsIGluWzhdICsgMHg2OTgwOThkOCwgNyk7CisgICAgTUQ1U1RFUChGMSwgZCwgYSwgYiwg YywgaW5bOV0gKyAweDhiNDRmN2FmLCAxMik7CisgICAgTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwg aW5bMTBdICsgMHhmZmZmNWJiMSwgMTcpOworICAgIE1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGlu WzExXSArIDB4ODk1Y2Q3YmUsIDIyKTsKKyAgICBNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblsx Ml0gKyAweDZiOTAxMTIyLCA3KTsKKyAgICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxM10g KyAweGZkOTg3MTkzLCAxMik7CisgICAgTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTRdICsg MHhhNjc5NDM4ZSwgMTcpOworICAgIE1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzE1XSArIDB4 NDliNDA4MjEsIDIyKTsKKworICAgIE1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhm NjFlMjU2MiwgNSk7CisgICAgTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bNl0gKyAweGMwNDBi MzQwLCA5KTsKKyAgICBNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDI2NWU1YTUx LCAxNCk7CisgICAgTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMF0gKyAweGU5YjZjN2FhLCAy MCk7CisgICAgTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bNV0gKyAweGQ2MmYxMDVkLCA1KTsK KyAgICBNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxMF0gKyAweDAyNDQxNDUzLCA5KTsKKyAg ICBNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweGQ4YTFlNjgxLCAxNCk7CisgICAg TUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bNF0gKyAweGU3ZDNmYmM4LCAyMCk7CisgICAgTUQ1 U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bOV0gKyAweDIxZTFjZGU2LCA1KTsKKyAgICBNRDVTVEVQ KEYyLCBkLCBhLCBiLCBjLCBpblsxNF0gKyAweGMzMzcwN2Q2LCA5KTsKKyAgICBNRDVTVEVQKEYy LCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZjRkNTBkODcsIDE0KTsKKyAgICBNRDVTVEVQKEYyLCBi LCBjLCBkLCBhLCBpbls4XSArIDB4NDU1YTE0ZWQsIDIwKTsKKyAgICBNRDVTVEVQKEYyLCBhLCBi LCBjLCBkLCBpblsxM10gKyAweGE5ZTNlOTA1LCA1KTsKKyAgICBNRDVTVEVQKEYyLCBkLCBhLCBi LCBjLCBpblsyXSArIDB4ZmNlZmEzZjgsIDkpOworICAgIE1ENVNURVAoRjIsIGMsIGQsIGEsIGIs IGluWzddICsgMHg2NzZmMDJkOSwgMTQpOworICAgIE1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGlu WzEyXSArIDB4OGQyYTRjOGEsIDIwKTsKKworICAgIE1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGlu WzVdICsgMHhmZmZhMzk0MiwgNCk7CisgICAgTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bOF0g KyAweDg3NzFmNjgxLCAxMSk7CisgICAgTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTFdICsg MHg2ZDlkNjEyMiwgMTYpOworICAgIE1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzE0XSArIDB4 ZmRlNTM4MGMsIDIzKTsKKyAgICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxXSArIDB4YTRi ZWVhNDQsIDQpOworICAgIE1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzRdICsgMHg0YmRlY2Zh OSwgMTEpOworICAgIE1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzddICsgMHhmNmJiNGI2MCwg MTYpOworICAgIE1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzEwXSArIDB4YmViZmJjNzAsIDIz KTsKKyAgICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweDI4OWI3ZWM2LCA0KTsK KyAgICBNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpblswXSArIDB4ZWFhMTI3ZmEsIDExKTsKKyAg ICBNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZDRlZjMwODUsIDE2KTsKKyAgICBN RDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpbls2XSArIDB4MDQ4ODFkMDUsIDIzKTsKKyAgICBNRDVT VEVQKEYzLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4ZDlkNGQwMzksIDQpOworICAgIE1ENVNURVAo RjMsIGQsIGEsIGIsIGMsIGluWzEyXSArIDB4ZTZkYjk5ZTUsIDExKTsKKyAgICBNRDVTVEVQKEYz LCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweDFmYTI3Y2Y4LCAxNik7CisgICAgTUQ1U1RFUChGMywg YiwgYywgZCwgYSwgaW5bMl0gKyAweGM0YWM1NjY1LCAyMyk7CisKKyAgICBNRDVTVEVQKEY0LCBh LCBiLCBjLCBkLCBpblswXSArIDB4ZjQyOTIyNDQsIDYpOworICAgIE1ENVNURVAoRjQsIGQsIGEs IGIsIGMsIGluWzddICsgMHg0MzJhZmY5NywgMTApOworICAgIE1ENVNURVAoRjQsIGMsIGQsIGEs IGIsIGluWzE0XSArIDB4YWI5NDIzYTcsIDE1KTsKKyAgICBNRDVTVEVQKEY0LCBiLCBjLCBkLCBh LCBpbls1XSArIDB4ZmM5M2EwMzksIDIxKTsKKyAgICBNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBp blsxMl0gKyAweDY1NWI1OWMzLCA2KTsKKyAgICBNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsz XSArIDB4OGYwY2NjOTIsIDEwKTsKKyAgICBNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsxMF0g KyAweGZmZWZmNDdkLCAxNSk7CisgICAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMV0gKyAw eDg1ODQ1ZGQxLCAyMSk7CisgICAgTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDZm YTg3ZTRmLCA2KTsKKyAgICBNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxNV0gKyAweGZlMmNl NmUwLCAxMCk7CisgICAgTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGEzMDE0MzE0 LCAxNSk7CisgICAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMTNdICsgMHg0ZTA4MTFhMSwg MjEpOworICAgIE1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNzUzN2U4MiwgNik7 CisgICAgTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTFdICsgMHhiZDNhZjIzNSwgMTApOwor ICAgIE1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyYWQ3ZDJiYiwgMTUpOworICAg IE1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzldICsgMHhlYjg2ZDM5MSwgMjEpOworCisgICAg YnVmWzBdICs9IGE7CisgICAgYnVmWzFdICs9IGI7CisgICAgYnVmWzJdICs9IGM7CisgICAgYnVm WzNdICs9IGQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9tZDUuaCBiL3Rvb2xzL2xpYnhs L21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA5YzI3ZTI5NjgK LS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9tZDUuaApAQCAtMCwwICsxLDI2IEBACisj aWZuZGVmIE1ENV9ICisjZGVmaW5lIE1ENV9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs dWRlIDxzdGRkZWYuaD4KKworLyoqCisgKiBtZDVfc3VtIC0gTUQ1IGhhc2ggZm9yIGEgZGF0YSBi bG9jaworICogQGFkZHI6IFBvaW50ZXJzIHRvIHRoZSBkYXRhIGFyZWEKKyAqIEBsZW46IExlbmd0 aHMgb2YgdGhlIGRhdGEgYmxvY2sKKyAqIEBtYWM6IEJ1ZmZlciBmb3IgdGhlIGhhc2gKKyAqLwor dm9pZCBtZDVfc3VtKGNvbnN0IHVpbnQ4X3QgKmFkZHIsIGNvbnN0IHNpemVfdCBsZW4sIHVpbnQ4 X3QgKm1hYyk7CisKKworc3RydWN0IE1ENUNvbnRleHQgeworICAgICAgICB1aW50MzJfdCBidWZb NF07CisgICAgICAgIHVpbnQzMl90IGJpdHNbMl07CisgICAgICAgIHVpbnQ4X3QgaW5bNjRdOwor fTsKK3R5cGVkZWYgc3RydWN0IE1ENUNvbnRleHQgTUQ1X0NUWDsKK3ZvaWQgTUQ1SW5pdChzdHJ1 Y3QgTUQ1Q29udGV4dCAqY29udGV4dCk7Cit2b2lkIE1ENVVwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4 dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLCB1bnNpZ25lZCBsZW4pOwordm9p ZCBNRDVGaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpj b250ZXh0KTsKKworI2VuZGlmCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs