From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joshua Perrett Subject: [PATCH] libxl: made vm mac address assignment deterministic Date: Wed, 5 Sep 2018 12:25:55 +0000 Message-ID: <20180905122555.20761-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 1fxWvB-0007Rs-8l for xen-devel@lists.xenproject.org; Wed, 05 Sep 2018 12:28:33 +0000 Received: by mail-ed1-x541.google.com with SMTP id a20-v6so5917310edd.4 for ; Wed, 05 Sep 2018 05:28:31 -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 L2xpYnhsL2xpYnhsX25pYy5jIHwgIDY4ICsrKysrKysrKysrLS0KIHRvb2xzL2xpYnhsL21kNS5j ICAgICAgIHwgMjY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogdG9vbHMvbGlieGwvbWQ1LmggICAgICAgfCAgMjYgKysrKysKIDQgZmlsZXMgY2hhbmdl ZCwgMzU1IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg dG9vbHMvbGlieGwvbWQ1LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWJ4bC9tZDUuaAoK ZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUK aW5kZXggNmRhMzQyZWQ2MS4uNmU3ZGIxMTM2NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFr ZWZpbGUKKysrIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKQEAgLTE0Miw3ICsxNDIsNyBAQCBMSUJY TF9PQkpTID0gZmxleGFycmF5Lm8gbGlieGwubyBsaWJ4bF9jcmVhdGUubyBsaWJ4bF9kbS5vIGxp YnhsX3BjaS5vIFwKIAkJCWxpYnhsXzlwZnMubyBsaWJ4bF9kb21haW4ubyBsaWJ4bF92ZGlzcGwu byBcCiAJCQlsaWJ4bF9wdmNhbGxzLm8gbGlieGxfdnNuZC5vIGxpYnhsX3ZrYi5vICQoTElCWExf T0JKUy15KQogTElCWExfT0JKUyArPSBsaWJ4bF9nZW5pZC5vCi1MSUJYTF9PQkpTICs9IF9saWJ4 bF90eXBlcy5vIGxpYnhsX2ZsYXNrLm8gX2xpYnhsX3R5cGVzX2ludGVybmFsLm8KK0xJQlhMX09C SlMgKz0gX2xpYnhsX3R5cGVzLm8gbGlieGxfZmxhc2subyBfbGlieGxfdHlwZXNfaW50ZXJuYWwu byBtZDUubwogCiBMSUJYTF9URVNUUyArPSB0aW1lZGVyZWcKIExJQlhMX1RFU1RTX1BST0dTID0g JChMSUJYTF9URVNUUykgZmRkZXJlZ3JhY2UKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhs X25pYy5jIGIvdG9vbHMvbGlieGwvbGlieGxfbmljLmMKaW5kZXggMDFiNzExYjg0ZS4uODkwN2Rm ODE4NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfbmljLmMKKysrIGIvdG9vbHMvbGli eGwvbGlieGxfbmljLmMKQEAgLTE3LDYgKzE3LDE4IEBACiAKICNpbmNsdWRlICJsaWJ4bF9pbnRl cm5hbC5oIgogCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJtZDUuaCIKKworI2lm ZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGlmYWRkcnMu aD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+ CisjaW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+CisjZW5kaWYKKwogaW50IGxpYnhsX21hY190b19k ZXZpY2VfbmljKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICptYWMsIGxpYnhsX2RldmljZV9uaWMgKm5pYykKIHsK QEAgLTUzLDggKzY1LDQxIEBAIGludCBsaWJ4bF9tYWNfdG9fZGV2aWNlX25pYyhsaWJ4bF9jdHgg KmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGxp YnhsX19nZXRfaG9zdF9tYWMobGlieGxfX2djICpnYywgdW5zaWduZWQgY2hhciAqYnVmKQorewor ICAgIGludCByYyA9IEVSUk9SX0ZBSUw7CisgICAgI2lmZGVmIF9fbGludXhfXworICAgIHN0cnVj dCBpZmFkZHJzICppZmFjZV9saXN0OworICAgIHVpbnQ2NF90IGxhcmdlc3QgPSAwOworCisgICAg aWYgKGdldGlmYWRkcnMoJmlmYWNlX2xpc3QpID09IDApIHsKKyAgICAgICAgZm9yIChzdHJ1Y3Qg aWZhZGRycyAqaWZhY2UgPSBpZmFjZV9saXN0OworICAgICAgICAgICAgaWZhY2UgIT0gTlVMTDsg aWZhY2UgPSBpZmFjZS0+aWZhX25leHQpIHsKKyAgICAgICAgICAgIGlmIChpZmFjZS0+aWZhX2Fk ZHIgJiYgaWZhY2UtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfUEFDS0VUKSB7CisgICAgICAg ICAgICAgICAgc3RydWN0IHNvY2thZGRyX2xsICpzID0gKHN0cnVjdCBzb2NrYWRkcl9sbCAqKWlm YWNlLT5pZmFfYWRkcjsKKyAgICAgICAgICAgICAgICBpZiAocy0+c2xsX2hhbGVuID09IDYpIHsK KyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsdWUgPSAwOworICAgICAgICAgICAgICAg ICAgICBtZW1jcHkoJnZhbHVlLCBzLT5zbGxfYWRkciwgNik7CisgICAgICAgICAgICAgICAgICAg IGlmICh2YWx1ZSA+IGxhcmdlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShi dWYsIHMtPnNsbF9hZGRyLCA2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlc3QgPSB2 YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBmcmVlaWZhZGRycyhpZmFjZV9saXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBMT0coV0FS TiwgImdldGlmYWRkcnNcbiIpOworICAgIH0KKyAgICAjZW5kaWYKKworICAgIHJldHVybiByYzsK K30KKwogc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX25pY19zZXRkZWZhdWx0KGxpYnhsX19nYyAq Z2MsIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYywgYm9vbCBob3RwbHVnKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYywgY29uc3QgY2hh ciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBp bnQgbmljX2luZGV4LCBib29sIGhvdHBsdWcpCiB7CiAgICAgaW50IHJjOwogCkBAIC02NSwxMSAr MTEwLDIyIEBAIHN0YXRpYyBpbnQgbGlieGxfX2RldmljZV9uaWNfc2V0ZGVmYXVsdChsaWJ4bF9f Z2MgKmdjLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgaWYgKCFuaWMtPm1vZGVsKSByZXR1cm4g RVJST1JfTk9NRU07CiAgICAgfQogICAgIGlmIChsaWJ4bF9fbWFjX2lzX2RlZmF1bHQoJm5pYy0+ bWFjKSkgewotICAgICAgICBjb25zdCB1aW50OF90ICpyOwotICAgICAgICBsaWJ4bF91dWlkIHV1 aWQ7CisgICAgICAgIHVpbnQ4X3QgclsxNl07CisKKyAgICAgICAgTUQ1X0NUWCBjdHg7CisgICAg ICAgIE1ENUluaXQoJmN0eCk7CisKKyAgICAgICAgdWludDhfdCBob3N0bWFjWzZdOworCisgICAg ICAgIGlmKGxpYnhsX19nZXRfaG9zdF9tYWMoZ2MsIGhvc3RtYWMpID09IDApIHsKKyAgICAgICAg ICAgIE1ENVVwZGF0ZSgmY3R4LCBob3N0bWFjLCBzaXplb2YoaG9zdG1hYykpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgTE9HRChJTkZPLCBkb21pZCwgImZhaWxlZCB0byBnZXQgaG9z dCBtYWMgYWRkcmVzcywgd2lsbCBnZW5lcmF0ZSB2bSBtYWMgYWRkcmVzcyB3aXRob3V0XG4iKTsK KyAgICAgICAgfQogCi0gICAgICAgIGxpYnhsX3V1aWRfZ2VuZXJhdGUoJnV1aWQpOwotICAgICAg ICByID0gbGlieGxfdXVpZF9ieXRlYXJyYXkoJnV1aWQpOworICAgICAgICBNRDVVcGRhdGUoJmN0 eCwgKHVpbnQ4X3QgKikgbmFtZSwgc3RybGVuKG5hbWUpKTsKKyAgICAgICAgTUQ1VXBkYXRlKCZj dHgsICh1aW50OF90ICopICZuaWNfaW5kZXgsIHNpemVvZihuaWNfaW5kZXgpKTsKKyAgICAgICAg TUQ1RmluYWwociwgJmN0eCk7CiAKICAgICAgICAgbmljLT5tYWNbMF0gPSAweDAwOwogICAgICAg ICBuaWMtPm1hY1sxXSA9IDB4MTY7CkBAIC00NzgsNyArNTM0LDcgQEAgaW50IGxpYnhsX19kZXZp Y2VfbmljX3NldF9kZXZpZHMobGlieGxfX2djICpnYywgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9j b25maWcsCiAgICAgICAgICAqIGJ1dCBxZW11IG5lZWRzIHRoZSBuaWMgaW5mb3JtYXRpb24gdG8g YmUgY29tcGxldGUuCiAgICAgICAgICAqLwogICAgICAgICByZXQgPSBsaWJ4bF9fZGV2aWNlX25p Y19zZXRkZWZhdWx0KGdjLCBkb21pZCwgJmRfY29uZmlnLT5uaWNzW2ldLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+Y19pbmZvLm5hbWUsIGksIGZhbHNl KTsKICAgICAgICAgaWYgKHJldCkgewogICAgICAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJV bmFibGUgdG8gc2V0IG5pYyBkZWZhdWx0cyBmb3IgbmljICVkIiwgaSk7CiAgICAgICAgICAgICBn b3RvIG91dDsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL21kNS5jIGIvdG9vbHMvbGlieGwvbWQ1 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODhlYTEzOTM4YQotLS0g L2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL21kNS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKiBz dGFydCAtIHB1YmxpYyBkb21haW4gTUQ1IGltcGxlbWVudGF0aW9uICovCisvKgorICogVGhpcyBj b2RlIGltcGxlbWVudHMgdGhlIE1ENSBtZXNzYWdlLWRpZ2VzdCBhbGdvcml0aG0uCisgKiBUaGUg YWxnb3JpdGhtIGlzIGR1ZSB0byBSb24gUml2ZXN0LiAgVGhpcyBjb2RlIHdhcworICogd3JpdHRl biBieSBDb2xpbiBQbHVtYiBpbiAxOTkzLCBubyBjb3B5cmlnaHQgaXMgY2xhaW1lZC4KKyAqIFRo aXMgY29kZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbjsgZG8gd2l0aCBpdCB3aGF0IHlvdSB3aXNo LgorICoKKyAqIEVxdWl2YWxlbnQgY29kZSBpcyBhdmFpbGFibGUgZnJvbSBSU0EgRGF0YSBTZWN1 cml0eSwgSW5jLgorICogVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0IHRoYXQsIGFu ZCBpcyBlcXVpdmFsZW50LAorICogZXhjZXB0IHRoYXQgeW91IGRvbid0IG5lZWQgdG8gaW5jbHVk ZSB0d28gcGFnZXMgb2YgbGVnYWxlc2UKKyAqIHdpdGggZXZlcnkgY29weS4KKyAqCisgKiBUbyBj b21wdXRlIHRoZSBtZXNzYWdlIGRpZ2VzdCBvZiBhIGNodW5rIG9mIGJ5dGVzLCBkZWNsYXJlIGFu CisgKiBNRDVDb250ZXh0IHN0cnVjdHVyZSwgcGFzcyBpdCB0byBNRDVJbml0LCBjYWxsIE1ENVVw ZGF0ZSBhcworICogbmVlZGVkIG9uIGJ1ZmZlcnMgZnVsbCBvZiBieXRlcywgYW5kIHRoZW4gY2Fs bCBNRDVGaW5hbCwgd2hpY2gKKyAqIHdpbGwgZmlsbCBhIHN1cHBsaWVkIDE2LWJ5dGUgYXJyYXkg d2l0aCB0aGUgZGlnZXN0LgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxz dGRpbnQuaD4KKyNpbmNsdWRlICJtZDUuaCIKKworc3RhdGljIHZvaWQgTUQ1VHJhbnNmb3JtKHVp bnQzMl90IGJ1Zls0XSwgdWludDMyX3QgY29uc3QgaW5bMTZdKTsKKworCisvKioKKyAqIG1kNV9z dW0gLSBNRDUgaGFzaCBmb3IgYSBkYXRhIGJsb2NrCisgKiBAYWRkcjogUG9pbnRlcnMgdG8gdGhl IGRhdGEgYXJlYQorICogQGxlbjogTGVuZ3RocyBvZiB0aGUgZGF0YSBibG9jaworICogQG1hYzog QnVmZmVyIGZvciB0aGUgaGFzaAorICovCit2b2lkIG1kNV9zdW0oY29uc3QgdWludDhfdCAqYWRk ciwgY29uc3Qgc2l6ZV90IGxlbiwgdWludDhfdCAqbWFjKQoreworICAgICAgICBNRDVfQ1RYIGN0 eDsKKworICAgICAgICBNRDVJbml0KCZjdHgpOworICAgICAgICBNRDVVcGRhdGUoJmN0eCwgYWRk ciwgbGVuKTsKKyAgICAgICAgTUQ1RmluYWwobWFjLCAmY3R4KTsKK30KKworCisjaWZuZGVmIFdP UkRTX0JJR0VORElBTgorI2RlZmluZSBieXRlUmV2ZXJzZShidWYsIGxlbikgICAvKiBOb3RoaW5n ICovCisjZWxzZQorLyoKKyAqIE5vdGU6IHRoaXMgY29kZSBpcyBoYXJtbGVzcyBvbiBsaXR0bGUt ZW5kaWFuIG1hY2hpbmVzLgorICovCitzdGF0aWMgdm9pZCBieXRlUmV2ZXJzZSh1bnNpZ25lZCBj aGFyICpidWYsIHVuc2lnbmVkIGxvbmdzKQoreworICAgIHVpbnQzMl90IHQ7CisgICAgZG8gewor ICAgICAgICB0ID0gKHVpbnQzMl90KSAoKHVuc2lnbmVkKSBidWZbM10gPDwgOCB8IGJ1ZlsyXSkg PDwgMTYgfAorICAgICAgICAgICAgKCh1bnNpZ25lZCkgYnVmWzFdIDw8IDggfCBidWZbMF0pOwor ICAgICAgICAqKHVpbnQzMl90ICopIGJ1ZiA9IHQ7CisgICAgICAgIGJ1ZiArPSA0OworICAgIH0g d2hpbGUgKC0tbG9uZ3MpOworfQorI2VuZGlmCisKKy8qCisgKiBTdGFydCBNRDUgYWNjdW11bGF0 aW9uLiAgU2V0IGJpdCBjb3VudCB0byAwIGFuZCBidWZmZXIgdG8gbXlzdGVyaW91cworICogaW5p dGlhbGl6YXRpb24gY29uc3RhbnRzLgorICovCit2b2lkIE1ENUluaXQoc3RydWN0IE1ENUNvbnRl eHQgKmN0eCkKK3sKKyAgICBjdHgtPmJ1ZlswXSA9IDB4Njc0NTIzMDE7CisgICAgY3R4LT5idWZb MV0gPSAweGVmY2RhYjg5OworICAgIGN0eC0+YnVmWzJdID0gMHg5OGJhZGNmZTsKKyAgICBjdHgt PmJ1ZlszXSA9IDB4MTAzMjU0NzY7CisKKyAgICBjdHgtPmJpdHNbMF0gPSAwOworICAgIGN0eC0+ Yml0c1sxXSA9IDA7Cit9CisKKy8qCisgKiBVcGRhdGUgY29udGV4dCB0byByZWZsZWN0IHRoZSBj b25jYXRlbmF0aW9uIG9mIGFub3RoZXIgYnVmZmVyIGZ1bGwKKyAqIG9mIGJ5dGVzLgorICovCit2 b2lkIE1ENVVwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIGNvbnN0 ICpidWYsIHVuc2lnbmVkIGxlbikKK3sKKyAgICB1aW50MzJfdCB0OworCisgICAgLyogVXBkYXRl IGJpdGNvdW50ICovCisKKyAgICB0ID0gY3R4LT5iaXRzWzBdOworICAgIGlmICgoY3R4LT5iaXRz WzBdID0gdCArICgodWludDMyX3QpIGxlbiA8PCAzKSkgPCB0KQorICAgICAgICBjdHgtPmJpdHNb MV0rKzsgICAgICAgICAvKiBDYXJyeSBmcm9tIGxvdyB0byBoaWdoICovCisgICAgY3R4LT5iaXRz WzFdICs9IGxlbiA+PiAyOTsKKworICAgIHQgPSAodCA+PiAzKSAmIDB4M2Y7ICAgICAgICAvKiBC eXRlcyBhbHJlYWR5IGluIHNoc0luZm8tPmRhdGEgKi8KKworICAgIC8qIEhhbmRsZSBhbnkgbGVh ZGluZyBvZGQtc2l6ZWQgY2h1bmtzICovCisKKyAgICBpZiAodCkgeworICAgICAgICB1bnNpZ25l ZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5pbiArIHQ7CisKKyAgICAgICAgdCA9 IDY0IC0gdDsKKyAgICAgICAgaWYgKGxlbiA8IHQpIHsKKyAgICAgICAgICAgIG1lbWNweShwLCBi dWYsIGxlbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5 KHAsIGJ1ZiwgdCk7CisgICAgICAgIGJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKKyAgICAgICAg TUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAodWludDMyX3QgKikgY3R4LT5pbik7CisgICAgICAgIGJ1 ZiArPSB0OworICAgICAgICBsZW4gLT0gdDsKKyAgICB9CisgICAgLyogUHJvY2VzcyBkYXRhIGlu IDY0LWJ5dGUgY2h1bmtzICovCisKKyAgICB3aGlsZSAobGVuID49IDY0KSB7CisgICAgICAgIG1l bWNweShjdHgtPmluLCBidWYsIDY0KTsKKyAgICAgICAgYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYp OworICAgICAgICBNRDVUcmFuc2Zvcm0oY3R4LT5idWYsICh1aW50MzJfdCAqKSBjdHgtPmluKTsK KyAgICAgICAgYnVmICs9IDY0OworICAgICAgICBsZW4gLT0gNjQ7CisgICAgfQorCisgICAgLyog SGFuZGxlIGFueSByZW1haW5pbmcgYnl0ZXMgb2YgZGF0YS4gKi8KKworICAgIG1lbWNweShjdHgt PmluLCBidWYsIGxlbik7Cit9CisKKy8qCisgKiBGaW5hbCB3cmFwdXAgLSBwYWQgdG8gNjQtYnl0 ZSBib3VuZGFyeSB3aXRoIHRoZSBiaXQgcGF0dGVybgorICogMSAwKiAoNjQtYml0IGNvdW50IG9m IGJpdHMgcHJvY2Vzc2VkLCBNU0ItZmlyc3QpCisgKi8KK3ZvaWQgTUQ1RmluYWwodW5zaWduZWQg Y2hhciBkaWdlc3RbMTZdLCBzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4KQoreworICAgIHVuc2lnbmVk IGNvdW50OworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgICAvKiBDb21wdXRlIG51bWJlciBv ZiBieXRlcyBtb2QgNjQgKi8KKyAgICBjb3VudCA9IChjdHgtPmJpdHNbMF0gPj4gMykgJiAweDNG OworCisgICAgLyogU2V0IHRoZSBmaXJzdCBjaGFyIG9mIHBhZGRpbmcgdG8gMHg4MC4gIFRoaXMg aXMgc2FmZSBzaW5jZSB0aGVyZSBpcworICAgICAgIGFsd2F5cyBhdCBsZWFzdCBvbmUgYnl0ZSBm cmVlICovCisgICAgcCA9IGN0eC0+aW4gKyBjb3VudDsKKyAgICAqcCsrID0gMHg4MDsKKworICAg IC8qIEJ5dGVzIG9mIHBhZGRpbmcgbmVlZGVkIHRvIG1ha2UgNjQgYnl0ZXMgKi8KKyAgICBjb3Vu dCA9IDY0IC0gMSAtIGNvdW50OworCisgICAgLyogUGFkIG91dCB0byA1NiBtb2QgNjQgKi8KKyAg ICBpZiAoY291bnQgPCA4KSB7CisgICAgICAgIC8qIFR3byBsb3RzIG9mIHBhZGRpbmc6ICBQYWQg dGhlIGZpcnN0IGJsb2NrIHRvIDY0IGJ5dGVzICovCisgICAgICAgIG1lbXNldChwLCAwLCBjb3Vu dCk7CisgICAgICAgIGJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKKyAgICAgICAgTUQ1VHJhbnNm b3JtKGN0eC0+YnVmLCAodWludDMyX3QgKikgY3R4LT5pbik7CisKKyAgICAgICAgLyogTm93IGZp bGwgdGhlIG5leHQgYmxvY2sgd2l0aCA1NiBieXRlcyAqLworICAgICAgICBtZW1zZXQoY3R4LT5p biwgMCwgNTYpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFBhZCBibG9jayB0byA1NiBieXRl cyAqLworICAgICAgICBtZW1zZXQocCwgMCwgY291bnQgLSA4KTsKKyAgICB9CisgICAgYnl0ZVJl dmVyc2UoY3R4LT5pbiwgMTQpOworCisgICAgLyogQXBwZW5kIGxlbmd0aCBpbiBiaXRzIGFuZCB0 cmFuc2Zvcm0gKi8KKyAgICAoKHVpbnQzMl90ICopIGN0eC0+aW4pWzE0XSA9IGN0eC0+Yml0c1sw XTsKKyAgICAoKHVpbnQzMl90ICopIGN0eC0+aW4pWzE1XSA9IGN0eC0+Yml0c1sxXTsKKworICAg IE1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKHVpbnQzMl90ICopIGN0eC0+aW4pOworICAgIGJ5dGVS ZXZlcnNlKCh1bnNpZ25lZCBjaGFyICopIGN0eC0+YnVmLCA0KTsKKyAgICBtZW1jcHkoZGlnZXN0 LCBjdHgtPmJ1ZiwgMTYpOworICAgIG1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7ICAgICAv KiBJbiBjYXNlIGl0J3Mgc2Vuc2l0aXZlICovCit9CisKKy8qIFRoZSBmb3VyIGNvcmUgZnVuY3Rp b25zIC0gRjEgaXMgb3B0aW1pemVkIHNvbWV3aGF0ICovCisKKy8qICNkZWZpbmUgRjEoeCwgeSwg eikgKHggJiB5IHwgfnggJiB6KSAqLworI2RlZmluZSBGMSh4LCB5LCB6KSAoeiBeICh4ICYgKHkg XiB6KSkpCisjZGVmaW5lIEYyKHgsIHksIHopIEYxKHosIHgsIHkpCisjZGVmaW5lIEYzKHgsIHks IHopICh4IF4geSBeIHopCisjZGVmaW5lIEY0KHgsIHksIHopICh5IF4gKHggfCB+eikpCisKKy8q IFRoaXMgaXMgdGhlIGNlbnRyYWwgc3RlcCBpbiB0aGUgTUQ1IGFsZ29yaXRobS4gKi8KKyNkZWZp bmUgTUQ1U1RFUChmLCB3LCB4LCB5LCB6LCBkYXRhLCBzKSBcCisgICAgICAgICggdyArPSBmKHgs IHksIHopICsgZGF0YSwgIHcgPSB3PDxzIHwgdz4+KDMyLXMpLCAgdyArPSB4ICkKKworLyoKKyAq IFRoZSBjb3JlIG9mIHRoZSBNRDUgYWxnb3JpdGhtLCB0aGlzIGFsdGVycyBhbiBleGlzdGluZyBN RDUgaGFzaCB0bworICogcmVmbGVjdCB0aGUgYWRkaXRpb24gb2YgMTYgbG9uZ3dvcmRzIG9mIG5l dyBkYXRhLiAgTUQ1VXBkYXRlIGJsb2NrcworICogdGhlIGRhdGEgYW5kIGNvbnZlcnRzIGJ5dGVz IGludG8gbG9uZ3dvcmRzIGZvciB0aGlzIHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2b2lkIE1ENVRy YW5zZm9ybSh1aW50MzJfdCBidWZbNF0sIHVpbnQzMl90IGNvbnN0IGluWzE2XSkKK3sKKyAgICBy ZWdpc3RlciB1aW50MzJfdCBhLCBiLCBjLCBkOworCisgICAgYSA9IGJ1ZlswXTsKKyAgICBiID0g YnVmWzFdOworICAgIGMgPSBidWZbMl07CisgICAgZCA9IGJ1ZlszXTsKKworICAgIE1ENVNURVAo RjEsIGEsIGIsIGMsIGQsIGluWzBdICsgMHhkNzZhYTQ3OCwgNyk7CisgICAgTUQ1U1RFUChGMSwg ZCwgYSwgYiwgYywgaW5bMV0gKyAweGU4YzdiNzU2LCAxMik7CisgICAgTUQ1U1RFUChGMSwgYywg ZCwgYSwgYiwgaW5bMl0gKyAweDI0MjA3MGRiLCAxNyk7CisgICAgTUQ1U1RFUChGMSwgYiwgYywg ZCwgYSwgaW5bM10gKyAweGMxYmRjZWVlLCAyMik7CisgICAgTUQ1U1RFUChGMSwgYSwgYiwgYywg ZCwgaW5bNF0gKyAweGY1N2MwZmFmLCA3KTsKKyAgICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBp bls1XSArIDB4NDc4N2M2MmEsIDEyKTsKKyAgICBNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpbls2 XSArIDB4YTgzMDQ2MTMsIDE3KTsKKyAgICBNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpbls3XSAr IDB4ZmQ0Njk1MDEsIDIyKTsKKyAgICBNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpbls4XSArIDB4 Njk4MDk4ZDgsIDcpOworICAgIE1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzldICsgMHg4YjQ0 ZjdhZiwgMTIpOworICAgIE1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzEwXSArIDB4ZmZmZjVi YjEsIDE3KTsKKyAgICBNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblsxMV0gKyAweDg5NWNkN2Jl LCAyMik7CisgICAgTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMTJdICsgMHg2YjkwMTEyMiwg Nyk7CisgICAgTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bMTNdICsgMHhmZDk4NzE5MywgMTIp OworICAgIE1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzE0XSArIDB4YTY3OTQzOGUsIDE3KTsK KyAgICBNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblsxNV0gKyAweDQ5YjQwODIxLCAyMik7CisK KyAgICBNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpblsxXSArIDB4ZjYxZTI1NjIsIDUpOworICAg IE1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzZdICsgMHhjMDQwYjM0MCwgOSk7CisgICAgTUQ1 U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bMTFdICsgMHgyNjVlNWE1MSwgMTQpOworICAgIE1ENVNU RVAoRjIsIGIsIGMsIGQsIGEsIGluWzBdICsgMHhlOWI2YzdhYSwgMjApOworICAgIE1ENVNURVAo RjIsIGEsIGIsIGMsIGQsIGluWzVdICsgMHhkNjJmMTA1ZCwgNSk7CisgICAgTUQ1U1RFUChGMiwg ZCwgYSwgYiwgYywgaW5bMTBdICsgMHgwMjQ0MTQ1MywgOSk7CisgICAgTUQ1U1RFUChGMiwgYywg ZCwgYSwgYiwgaW5bMTVdICsgMHhkOGExZTY4MSwgMTQpOworICAgIE1ENVNURVAoRjIsIGIsIGMs IGQsIGEsIGluWzRdICsgMHhlN2QzZmJjOCwgMjApOworICAgIE1ENVNURVAoRjIsIGEsIGIsIGMs IGQsIGluWzldICsgMHgyMWUxY2RlNiwgNSk7CisgICAgTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywg aW5bMTRdICsgMHhjMzM3MDdkNiwgOSk7CisgICAgTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5b M10gKyAweGY0ZDUwZDg3LCAxNCk7CisgICAgTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bOF0g KyAweDQ1NWExNGVkLCAyMCk7CisgICAgTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bMTNdICsg MHhhOWUzZTkwNSwgNSk7CisgICAgTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bMl0gKyAweGZj ZWZhM2Y4LCA5KTsKKyAgICBNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpbls3XSArIDB4Njc2ZjAy ZDksIDE0KTsKKyAgICBNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpblsxMl0gKyAweDhkMmE0Yzhh LCAyMCk7CisKKyAgICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpbls1XSArIDB4ZmZmYTM5NDIs IDQpOworICAgIE1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzhdICsgMHg4NzcxZjY4MSwgMTEp OworICAgIE1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzExXSArIDB4NmQ5ZDYxMjIsIDE2KTsK KyAgICBNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsxNF0gKyAweGZkZTUzODBjLCAyMyk7Cisg ICAgTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bMV0gKyAweGE0YmVlYTQ0LCA0KTsKKyAgICBN RDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpbls0XSArIDB4NGJkZWNmYTksIDExKTsKKyAgICBNRDVT VEVQKEYzLCBjLCBkLCBhLCBiLCBpbls3XSArIDB4ZjZiYjRiNjAsIDE2KTsKKyAgICBNRDVTVEVQ KEYzLCBiLCBjLCBkLCBhLCBpblsxMF0gKyAweGJlYmZiYzcwLCAyMyk7CisgICAgTUQ1U1RFUChG MywgYSwgYiwgYywgZCwgaW5bMTNdICsgMHgyODliN2VjNiwgNCk7CisgICAgTUQ1U1RFUChGMywg ZCwgYSwgYiwgYywgaW5bMF0gKyAweGVhYTEyN2ZhLCAxMSk7CisgICAgTUQ1U1RFUChGMywgYywg ZCwgYSwgYiwgaW5bM10gKyAweGQ0ZWYzMDg1LCAxNik7CisgICAgTUQ1U1RFUChGMywgYiwgYywg ZCwgYSwgaW5bNl0gKyAweDA0ODgxZDA1LCAyMyk7CisgICAgTUQ1U1RFUChGMywgYSwgYiwgYywg ZCwgaW5bOV0gKyAweGQ5ZDRkMDM5LCA0KTsKKyAgICBNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBp blsxMl0gKyAweGU2ZGI5OWU1LCAxMSk7CisgICAgTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5b MTVdICsgMHgxZmEyN2NmOCwgMTYpOworICAgIE1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzJd ICsgMHhjNGFjNTY2NSwgMjMpOworCisgICAgTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bMF0g KyAweGY0MjkyMjQ0LCA2KTsKKyAgICBNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpbls3XSArIDB4 NDMyYWZmOTcsIDEwKTsKKyAgICBNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsxNF0gKyAweGFi OTQyM2E3LCAxNSk7CisgICAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bNV0gKyAweGZjOTNh MDM5LCAyMSk7CisgICAgTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bMTJdICsgMHg2NTViNTlj MywgNik7CisgICAgTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bM10gKyAweDhmMGNjYzkyLCAx MCk7CisgICAgTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMTBdICsgMHhmZmVmZjQ3ZCwgMTUp OworICAgIE1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzFdICsgMHg4NTg0NWRkMSwgMjEpOwor ICAgIE1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzhdICsgMHg2ZmE4N2U0ZiwgNik7CisgICAg TUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTVdICsgMHhmZTJjZTZlMCwgMTApOworICAgIE1E NVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzZdICsgMHhhMzAxNDMxNCwgMTUpOworICAgIE1ENVNU RVAoRjQsIGIsIGMsIGQsIGEsIGluWzEzXSArIDB4NGUwODExYTEsIDIxKTsKKyAgICBNRDVTVEVQ KEY0LCBhLCBiLCBjLCBkLCBpbls0XSArIDB4Zjc1MzdlODIsIDYpOworICAgIE1ENVNURVAoRjQs IGQsIGEsIGIsIGMsIGluWzExXSArIDB4YmQzYWYyMzUsIDEwKTsKKyAgICBNRDVTVEVQKEY0LCBj LCBkLCBhLCBiLCBpblsyXSArIDB4MmFkN2QyYmIsIDE1KTsKKyAgICBNRDVTVEVQKEY0LCBiLCBj LCBkLCBhLCBpbls5XSArIDB4ZWI4NmQzOTEsIDIxKTsKKworICAgIGJ1ZlswXSArPSBhOworICAg IGJ1ZlsxXSArPSBiOworICAgIGJ1ZlsyXSArPSBjOworICAgIGJ1ZlszXSArPSBkOworfQpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvbWQ1LmggYi90b29scy9saWJ4bC9tZDUuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wOWMyN2UyOTY4Ci0tLSAvZGV2L251bGwKKysr IGIvdG9vbHMvbGlieGwvbWQ1LmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBNRDVfSAorI2Rl ZmluZSBNRDVfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisK Ky8qKgorICogbWQ1X3N1bSAtIE1ENSBoYXNoIGZvciBhIGRhdGEgYmxvY2sKKyAqIEBhZGRyOiBQ b2ludGVycyB0byB0aGUgZGF0YSBhcmVhCisgKiBAbGVuOiBMZW5ndGhzIG9mIHRoZSBkYXRhIGJs b2NrCisgKiBAbWFjOiBCdWZmZXIgZm9yIHRoZSBoYXNoCisgKi8KK3ZvaWQgbWQ1X3N1bShjb25z dCB1aW50OF90ICphZGRyLCBjb25zdCBzaXplX3QgbGVuLCB1aW50OF90ICptYWMpOworCisKK3N0 cnVjdCBNRDVDb250ZXh0IHsKKyAgICAgICAgdWludDMyX3QgYnVmWzRdOworICAgICAgICB1aW50 MzJfdCBiaXRzWzJdOworICAgICAgICB1aW50OF90IGluWzY0XTsKK307Cit0eXBlZGVmIHN0cnVj dCBNRDVDb250ZXh0IE1ENV9DVFg7Cit2b2lkIE1ENUluaXQoc3RydWN0IE1ENUNvbnRleHQgKmNv bnRleHQpOwordm9pZCBNRDVVcGRhdGUoc3RydWN0IE1ENUNvbnRleHQgKmNvbnRleHQsIHVuc2ln bmVkIGNoYXIgY29uc3QgKmJ1ZiwgdW5zaWduZWQgbGVuKTsKK3ZvaWQgTUQ1RmluYWwodW5zaWdu ZWQgY2hhciBkaWdlc3RbMTZdLCBzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCk7CisKKyNlbmRp ZgotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZl bA==