From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v2 04/12] libxl: carve out cpupool specific functions from libxl.c Date: Thu, 9 Feb 2017 10:30:17 +0100 Message-ID: <20170209093025.20849-5-jgross@suse.com> References: <20170209093025.20849-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cbl3i-0004jR-7Q for xen-devel@lists.xenproject.org; Thu, 09 Feb 2017 09:30:34 +0000 In-Reply-To: <20170209093025.20849-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , haozhong.zhang@intel.com, wei.liu2@citrix.com, zhangchen.fnst@cn.fujitsu.com, ian.jackson@eu.citrix.com, yi.y.sun@linux.intel.com List-Id: xen-devel@lists.xenproject.org bGlieGwuYyBoYXMgZ3Jvd24gdG8gYW4gdW5jb21mb3J0YWJsZSBzaXplLiBDYXJ2ZSBvdXQgdGhl IGNwdXBvb2wKcmVsYXRlZCBmdW5jdGlvbnMgdG8gbGlieGxfY3B1cG9vbC5jLgoKU2lnbmVkLW9m Zi1ieTogSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuY29tPgotLS0KIHRvb2xzL2xpYnhsL01h a2VmaWxlICAgICAgICB8ICAgMSArCiB0b29scy9saWJ4bC9saWJ4bC5jICAgICAgICAgfCA0MTgg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvb2xzL2xpYnhsL2xp YnhsX2NwdXBvb2wuYyB8IDQ0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0NDQgaW5zZXJ0aW9ucygrKSwgNDE4IGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhsX2NwdXBvb2wuYwoKZGlm ZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKaW5k ZXggOTFlMmY5Ny4uMDEyNTg3MSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKKysr IGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKQEAgLTEzNyw2ICsxMzcsNyBAQCBMSUJYTF9PQkpTID0g ZmxleGFycmF5Lm8gbGlieGwubyBsaWJ4bF9jcmVhdGUubyBsaWJ4bF9kbS5vIGxpYnhsX3BjaS5v IFwKIAkJCWxpYnhsX3FtcC5vIGxpYnhsX2V2ZW50Lm8gbGlieGxfZm9yay5vIFwKIAkJCWxpYnhs X2RvbV9zdXNwZW5kLm8gbGlieGxfZG9tX3NhdmUubyBsaWJ4bF91c2IubyBcCiAJCQlsaWJ4bF92 dHBtLm8gbGlieGxfbmljLm8gXAorCQkJbGlieGxfY3B1cG9vbC5vIFwKICAgICAgICAgICAgICAg ICAgICAgICAgICQoTElCWExfT0JKUy15KQogTElCWExfT0JKUyArPSBsaWJ4bF9nZW5pZC5vCiBM SUJYTF9PQkpTICs9IF9saWJ4bF90eXBlcy5vIGxpYnhsX2ZsYXNrLm8gX2xpYnhsX3R5cGVzX2lu dGVybmFsLm8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmMgYi90b29scy9saWJ4bC9s aWJ4bC5jCmluZGV4IDZiODdmNDguLmQwMDgwY2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xp YnhsLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGwuYwpAQCAtNjgzLDEwMCArNjgzLDYgQEAgaW50 IGxpYnhsX2RvbWFpbl9pbmZvKGxpYnhsX2N0eCAqY3R4LCBsaWJ4bF9kb21pbmZvICppbmZvX3Is CiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIFJldHVybnM6Ci0gKiAgIDAgLSBzdWNjZXNzCi0gKiAg IEVSUk9SX0ZBSUwgKyBlcnJubyA9PSBFTk9FTlQgLSBubyBlbnRyeSBmb3VuZAotICogICBFUlJP Ul8kRk9PICsgZXJybm8gIT0gRU5PRU5UIC0gb3RoZXIgZmFpbHVyZQotICovCi1zdGF0aWMgaW50 IGNwdXBvb2xfaW5mbyhsaWJ4bF9fZ2MgKmdjLAotICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfY3B1cG9vbGluZm8gKmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBw b29saWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4YWN0IC8qIGV4YWN0bHkgcG9v bGlkIG9yID49IHBvb2xpZCAqLykKLXsKLSAgICB4Y19jcHVwb29saW5mb190ICp4Y2luZm87Ci0g ICAgaW50IHJjID0gRVJST1JfRkFJTDsKLQotICAgIHhjaW5mbyA9IHhjX2NwdXBvb2xfZ2V0aW5m byhDVFgtPnhjaCwgcG9vbGlkKTsKLSAgICBpZiAoeGNpbmZvID09IE5VTEwpCi0gICAgewotICAg ICAgICBpZiAoZXhhY3QgfHwgZXJybm8gIT0gRU5PRU5UKQotICAgICAgICAgICAgTE9HRShFUlJP UiwgImZhaWxlZCB0byBnZXQgaW5mbyBmb3IgY3B1cG9vbCVkIiwgcG9vbGlkKTsKLSAgICAgICAg cmV0dXJuIEVSUk9SX0ZBSUw7Ci0gICAgfQotCi0gICAgaWYgKGV4YWN0ICYmIHhjaW5mby0+Y3B1 cG9vbF9pZCAhPSBwb29saWQpCi0gICAgewotICAgICAgICBMT0coRVJST1IsICJnb3QgaW5mbyBm b3IgY3B1cG9vbCVkLCB3YW50ZWQgY3B1cG9vbCVkXG4iLAotICAgICAgICAgICAgeGNpbmZvLT5j cHVwb29sX2lkLCBwb29saWQpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBpbmZv LT5wb29saWQgPSB4Y2luZm8tPmNwdXBvb2xfaWQ7Ci0gICAgaW5mby0+cG9vbF9uYW1lID0gbGli eGxfY3B1cG9vbGlkX3RvX25hbWUoQ1RYLCBpbmZvLT5wb29saWQpOwotICAgIGlmICghaW5mby0+ cG9vbF9uYW1lKSB7Ci0gICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICAgICAgZ290byBvdXQ7 Ci0gICAgfQotICAgIGluZm8tPnNjaGVkID0geGNpbmZvLT5zY2hlZF9pZDsKLSAgICBpbmZvLT5u X2RvbSA9IHhjaW5mby0+bl9kb207Ci0gICAgcmMgPSBsaWJ4bF9jcHVfYml0bWFwX2FsbG9jKENU WCwgJmluZm8tPmNwdW1hcCwgMCk7Ci0gICAgaWYgKHJjKQotICAgICAgICBnb3RvIG91dDsKLQot ICAgIG1lbWNweShpbmZvLT5jcHVtYXAubWFwLCB4Y2luZm8tPmNwdW1hcCwgaW5mby0+Y3B1bWFw LnNpemUpOwotCi0gICAgcmMgPSAwOwotb3V0OgotICAgIHhjX2NwdXBvb2xfaW5mb2ZyZWUoQ1RY LT54Y2gsIHhjaW5mbyk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1pbnQgbGlieGxfY3B1cG9vbF9p bmZvKGxpYnhsX2N0eCAqY3R4LAotICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9jcHVwb29s aW5mbyAqaW5mbywgdWludDMyX3QgcG9vbGlkKQotewotICAgIEdDX0lOSVQoY3R4KTsKLSAgICBp bnQgcmMgPSBjcHVwb29sX2luZm8oZ2MsIGluZm8sIHBvb2xpZCwgdHJ1ZSk7Ci0gICAgR0NfRlJF RTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLWxpYnhsX2NwdXBvb2xpbmZvICogbGlieGxfbGlzdF9j cHVwb29sKGxpYnhsX2N0eCAqY3R4LCBpbnQgKm5iX3Bvb2xfb3V0KQotewotICAgIEdDX0lOSVQo Y3R4KTsKLSAgICBsaWJ4bF9jcHVwb29saW5mbyBpbmZvLCAqcHRyOwotCi0gICAgaW50IGk7Ci0g ICAgdWludDMyX3QgcG9vbGlkOwotCi0gICAgcHRyID0gTlVMTDsKLQotICAgIHBvb2xpZCA9IDA7 Ci0gICAgZm9yIChpID0gMDs7IGkrKykgewotICAgICAgICBsaWJ4bF9jcHVwb29saW5mb19pbml0 KCZpbmZvKTsKLSAgICAgICAgaWYgKGNwdXBvb2xfaW5mbyhnYywgJmluZm8sIHBvb2xpZCwgZmFs c2UpKSB7Ci0gICAgICAgICAgICBsaWJ4bF9jcHVwb29saW5mb19kaXNwb3NlKCZpbmZvKTsKLSAg ICAgICAgICAgIGlmIChlcnJubyAhPSBFTk9FTlQpIGdvdG8gb3V0OwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBwdHIgPSBsaWJ4bF9fcmVhbGxvYyhOT0dDLCBwdHIs IChpKzEpICogc2l6ZW9mKGxpYnhsX2NwdXBvb2xpbmZvKSk7Ci0gICAgICAgIHB0cltpXSA9IGlu Zm87Ci0gICAgICAgIHBvb2xpZCA9IGluZm8ucG9vbGlkICsgMTsKLSAgICAgICAgLyogRG9uJ3Qg ZGlzcG9zZSBvZiBpbmZvIGJlY2F1c2UgaXQgd2lsbCBiZSByZXR1cm5lZCB0byBjYWxsZXIgKi8K LSAgICB9Ci0KLSAgICAqbmJfcG9vbF9vdXQgPSBpOwotCi0gICAgR0NfRlJFRTsKLSAgICByZXR1 cm4gcHRyOwotCi1vdXQ6Ci0gICAgbGlieGxfY3B1cG9vbGluZm9fbGlzdF9mcmVlKHB0ciwgaSk7 Ci0gICAgKm5iX3Bvb2xfb3V0ID0gMDsKLSAgICBHQ19GUkVFOwotICAgIHJldHVybiBOVUxMOwot fQotCiAvKiB0aGlzIEFQSSBjYWxsIG9ubHkgbGlzdCBWTSBydW5uaW5nIG9uIHRoaXMgaG9zdC4g QSBWTSBjYW4KICAqIGJlIGFuIGFnZ3JlZ2F0ZSBvZiBtdWx0aXBsZSBkb21haW5zLiAqLwogbGli eGxfdm1pbmZvICogbGlieGxfbGlzdF92bShsaWJ4bF9jdHggKmN0eCwgaW50ICpuYl92bV9vdXQp CkBAIC02MjUzLDMzMCArNjE1OSw2IEBAIG91dDoKICAgICByZXR1cm4gcmM7CiB9CiAKLWludCBs aWJ4bF9nZXRfZnJlZWNwdXMobGlieGxfY3R4ICpjdHgsIGxpYnhsX2JpdG1hcCAqY3B1bWFwKQot ewotICAgIGludCBuY3B1czsKLQotICAgIG5jcHVzID0gbGlieGxfZ2V0X21heF9jcHVzKGN0eCk7 Ci0gICAgaWYgKG5jcHVzIDwgMCkKLSAgICAgICAgcmV0dXJuIG5jcHVzOwotCi0gICAgY3B1bWFw LT5tYXAgPSB4Y19jcHVwb29sX2ZyZWVpbmZvKGN0eC0+eGNoKTsKLSAgICBpZiAoY3B1bWFwLT5t YXAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7Ci0KLSAgICBjcHVtYXAtPnNp emUgPSAobmNwdXMgKyA3KSAvIDg7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGxpYnhsX2Nw dXBvb2xfY3JlYXRlKGxpYnhsX2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3NjaGVkdWxlciBzY2hlZCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9iaXRtYXAgY3B1bWFwLCBsaWJ4bF91dWlkICp1dWlkLAotICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwb29saWQpCi17Ci0gICAgR0NfSU5JVChjdHgpOwot ICAgIGludCByYzsKLSAgICBpbnQgaTsKLSAgICB4c190cmFuc2FjdGlvbl90IHQ7Ci0gICAgY2hh ciAqdXVpZF9zdHJpbmc7Ci0KLSAgICB1dWlkX3N0cmluZyA9IGxpYnhsX191dWlkMnN0cmluZyhn YywgKnV1aWQpOwotICAgIGlmICghdXVpZF9zdHJpbmcpIHsKLSAgICAgICAgR0NfRlJFRTsKLSAg ICAgICAgcmV0dXJuIEVSUk9SX05PTUVNOwotICAgIH0KLQotICAgIHJjID0geGNfY3B1cG9vbF9j cmVhdGUoY3R4LT54Y2gsIHBvb2xpZCwgc2NoZWQpOwotICAgIGlmIChyYykgewotICAgICAgICBM T0dFVihFUlJPUiwgcmMsICJDb3VsZCBub3QgY3JlYXRlIGNwdXBvb2wiKTsKLSAgICAgICAgR0Nf RlJFRTsKLSAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7Ci0gICAgfQotCi0gICAgbGlieGxfZm9y X2VhY2hfYml0KGksIGNwdW1hcCkKLSAgICAgICAgaWYgKGxpYnhsX2JpdG1hcF90ZXN0KCZjcHVt YXAsIGkpKSB7Ci0gICAgICAgICAgICByYyA9IHhjX2NwdXBvb2xfYWRkY3B1KGN0eC0+eGNoLCAq cG9vbGlkLCBpKTsKLSAgICAgICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgICAgIExPR0VW KEVSUk9SLCByYywgIkVycm9yIG1vdmluZyBjcHUgdG8gY3B1cG9vbCIpOwotICAgICAgICAgICAg ICAgIGxpYnhsX2NwdXBvb2xfZGVzdHJveShjdHgsICpwb29saWQpOwotICAgICAgICAgICAgICAg IEdDX0ZSRUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgdCA9IHhzX3RyYW5zYWN0 aW9uX3N0YXJ0KGN0eC0+eHNoKTsKLQotICAgICAgICB4c19ta2RpcihjdHgtPnhzaCwgdCwgR0NT UFJJTlRGKCIvbG9jYWwvcG9vbC8lZCIsICpwb29saWQpKTsKLSAgICAgICAgbGlieGxfX3hzX3By aW50ZihnYywgdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIi9sb2NhbC9w b29sLyVkL3V1aWQiLCAqcG9vbGlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCB1 dWlkX3N0cmluZyk7Ci0gICAgICAgIGxpYnhsX194c19wcmludGYoZ2MsIHQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIvbG9jYWwvcG9vbC8lZC9uYW1lIiwgKnBvb2xpZCks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgbmFtZSk7Ci0KLSAgICAgICAgaWYgKHhz X3RyYW5zYWN0aW9uX2VuZChjdHgtPnhzaCwgdCwgMCkgfHwgKGVycm5vICE9IEVBR0FJTikpIHsK LSAgICAgICAgICAgIEdDX0ZSRUU7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot ICAgIH0KLX0KLQotaW50IGxpYnhsX2NwdXBvb2xfZGVzdHJveShsaWJ4bF9jdHggKmN0eCwgdWlu dDMyX3QgcG9vbGlkKQotewotICAgIEdDX0lOSVQoY3R4KTsKLSAgICBpbnQgcmMsIGk7Ci0gICAg eGNfY3B1cG9vbGluZm9fdCAqaW5mbzsKLSAgICB4c190cmFuc2FjdGlvbl90IHQ7Ci0gICAgbGli eGxfYml0bWFwIGNwdW1hcDsKLQotICAgIGluZm8gPSB4Y19jcHVwb29sX2dldGluZm8oY3R4LT54 Y2gsIHBvb2xpZCk7Ci0gICAgaWYgKGluZm8gPT0gTlVMTCkgewotICAgICAgICBHQ19GUkVFOwot ICAgICAgICByZXR1cm4gRVJST1JfTk9NRU07Ci0gICAgfQotCi0gICAgcmMgPSBFUlJPUl9JTlZB TDsKLSAgICBpZiAoKGluZm8tPmNwdXBvb2xfaWQgIT0gcG9vbGlkKSB8fCAoaW5mby0+bl9kb20p KQotICAgICAgICBnb3RvIG91dDsKLQotICAgIHJjID0gbGlieGxfY3B1X2JpdG1hcF9hbGxvYyhj dHgsICZjcHVtYXAsIDApOwotICAgIGlmIChyYykKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICBt ZW1jcHkoY3B1bWFwLm1hcCwgaW5mby0+Y3B1bWFwLCBjcHVtYXAuc2l6ZSk7Ci0gICAgbGlieGxf Zm9yX2VhY2hfYml0KGksIGNwdW1hcCkKLSAgICAgICAgaWYgKGxpYnhsX2JpdG1hcF90ZXN0KCZj cHVtYXAsIGkpKSB7Ci0gICAgICAgICAgICByYyA9IHhjX2NwdXBvb2xfcmVtb3ZlY3B1KGN0eC0+ eGNoLCBwb29saWQsIGkpOwotICAgICAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICAgICAg TE9HRVYoRVJST1IsIHJjLCAiRXJyb3IgcmVtb3ZpbmcgY3B1IGZyb20gY3B1cG9vbCIpOwotICAg ICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDE7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIHJjID0geGNfY3B1cG9vbF9kZXN0cm95 KGN0eC0+eGNoLCBwb29saWQpOwotICAgIGlmIChyYykgewotICAgICAgICBMT0dFVihFUlJPUiwg cmMsICJDb3VsZCBub3QgZGVzdHJveSBjcHVwb29sIik7Ci0gICAgICAgIHJjID0gRVJST1JfRkFJ TDsKLSAgICAgICAgZ290byBvdXQxOwotICAgIH0KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAg dCA9IHhzX3RyYW5zYWN0aW9uX3N0YXJ0KGN0eC0+eHNoKTsKLQotICAgICAgICB4c19ybShjdHgt PnhzaCwgWEJUX05VTEwsIEdDU1BSSU5URigiL2xvY2FsL3Bvb2wvJWQiLCBwb29saWQpKTsKLQot ICAgICAgICBpZiAoeHNfdHJhbnNhY3Rpb25fZW5kKGN0eC0+eHNoLCB0LCAwKSB8fCAoZXJybm8g IT0gRUFHQUlOKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJjID0gMDsKLQot b3V0MToKLSAgICBsaWJ4bF9iaXRtYXBfZGlzcG9zZSgmY3B1bWFwKTsKLW91dDoKLSAgICB4Y19j cHVwb29sX2luZm9mcmVlKGN0eC0+eGNoLCBpbmZvKTsKLSAgICBHQ19GUkVFOwotCi0gICAgcmV0 dXJuIHJjOwotfQotCi1pbnQgbGlieGxfY3B1cG9vbF9yZW5hbWUobGlieGxfY3R4ICpjdHgsIGNv bnN0IGNoYXIgKm5hbWUsIHVpbnQzMl90IHBvb2xpZCkKLXsKLSAgICBHQ19JTklUKGN0eCk7Ci0g ICAgeHNfdHJhbnNhY3Rpb25fdCB0OwotICAgIHhjX2NwdXBvb2xpbmZvX3QgKmluZm87Ci0gICAg aW50IHJjOwotCi0gICAgaW5mbyA9IHhjX2NwdXBvb2xfZ2V0aW5mbyhjdHgtPnhjaCwgcG9vbGlk KTsKLSAgICBpZiAoaW5mbyA9PSBOVUxMKSB7Ci0gICAgICAgIEdDX0ZSRUU7Ci0gICAgICAgIHJl dHVybiBFUlJPUl9OT01FTTsKLSAgICB9Ci0KLSAgICByYyA9IEVSUk9SX0lOVkFMOwotICAgIGlm IChpbmZvLT5jcHVwb29sX2lkICE9IHBvb2xpZCkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICBy YyA9IDA7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHQgPSB4c190cmFuc2FjdGlvbl9zdGFy dChjdHgtPnhzaCk7Ci0KLSAgICAgICAgbGlieGxfX3hzX3ByaW50ZihnYywgdCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIi9sb2NhbC9wb29sLyVkL25hbWUiLCBwb29saWQp LAotICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIG5hbWUpOwotCi0gICAgICAgIGlmICh4 c190cmFuc2FjdGlvbl9lbmQoY3R4LT54c2gsIHQsIDApKQotICAgICAgICAgICAgYnJlYWs7Ci0K LSAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g ICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi1vdXQ6Ci0g ICAgeGNfY3B1cG9vbF9pbmZvZnJlZShjdHgtPnhjaCwgaW5mbyk7Ci0gICAgR0NfRlJFRTsKLQot ICAgIHJldHVybiByYzsKLX0KLQotaW50IGxpYnhsX2NwdXBvb2xfY3B1YWRkKGxpYnhsX2N0eCAq Y3R4LCB1aW50MzJfdCBwb29saWQsIGludCBjcHUpCi17Ci0gICAgR0NfSU5JVChjdHgpOwotICAg IGludCByYyA9IDA7Ci0KLSAgICByYyA9IHhjX2NwdXBvb2xfYWRkY3B1KGN0eC0+eGNoLCBwb29s aWQsIGNwdSk7Ci0gICAgaWYgKHJjKSB7Ci0gICAgICAgIExPR0UoRVJST1IsICJFcnJvciBtb3Zp bmcgY3B1ICVkIHRvIGNwdXBvb2wiLCBjcHUpOwotICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Ci0g ICAgfQotCi0gICAgR0NfRlJFRTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLWludCBsaWJ4bF9jcHVw b29sX2NwdWFkZF9jcHVtYXAobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IHBvb2xpZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYml0bWFwICpjcHVtYXApCi17 Ci0gICAgaW50IGMsIG5jcHVzID0gMCwgcmMgPSAwOwotCi0gICAgbGlieGxfZm9yX2VhY2hfc2V0 X2JpdChjLCAqY3B1bWFwKSB7Ci0gICAgICAgIGlmICghbGlieGxfY3B1cG9vbF9jcHVhZGQoY3R4 LCBwb29saWQsIGMpKQotICAgICAgICAgICAgbmNwdXMrKzsKLSAgICB9Ci0KLSAgICBpZiAobmNw dXMgIT0gbGlieGxfYml0bWFwX2NvdW50X3NldChjcHVtYXApKQotICAgICAgICByYyA9IEVSUk9S X0ZBSUw7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLWludCBsaWJ4bF9jcHVwb29sX2NwdWFkZF9u b2RlKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBwb29saWQsIGludCBub2RlLCBpbnQgKmNwdXMp Ci17Ci0gICAgaW50IHJjID0gMDsKLSAgICBpbnQgY3B1LCBucjsKLSAgICBsaWJ4bF9iaXRtYXAg ZnJlZW1hcDsKLSAgICBsaWJ4bF9jcHV0b3BvbG9neSAqdG9wb2xvZ3k7Ci0KLSAgICBpZiAobGli eGxfZ2V0X2ZyZWVjcHVzKGN0eCwgJmZyZWVtYXApKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9G QUlMOwotICAgIH0KLQotICAgIHRvcG9sb2d5ID0gbGlieGxfZ2V0X2NwdV90b3BvbG9neShjdHgs ICZucik7Ci0gICAgaWYgKCF0b3BvbG9neSkgewotICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Ci0g ICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgICpjcHVzID0gMDsKLSAgICBmb3IgKGNwdSA9 IDA7IGNwdSA8IG5yOyBjcHUrKykgewotICAgICAgICBpZiAobGlieGxfYml0bWFwX3Rlc3QoJmZy ZWVtYXAsIGNwdSkgJiYgKHRvcG9sb2d5W2NwdV0ubm9kZSA9PSBub2RlKSAmJgotICAgICAgICAg ICAgIWxpYnhsX2NwdXBvb2xfY3B1YWRkKGN0eCwgcG9vbGlkLCBjcHUpKSB7Ci0gICAgICAgICAg ICAgICAgKCpjcHVzKSsrOwotICAgICAgICB9Ci0gICAgICAgIGxpYnhsX2NwdXRvcG9sb2d5X2Rp c3Bvc2UoJnRvcG9sb2d5W2NwdV0pOwotICAgIH0KLQotICAgIGZyZWUodG9wb2xvZ3kpOwotb3V0 OgotICAgIGxpYnhsX2JpdG1hcF9kaXNwb3NlKCZmcmVlbWFwKTsKLSAgICByZXR1cm4gcmM7Ci19 Ci0KLWludCBsaWJ4bF9jcHVwb29sX2NwdXJlbW92ZShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg cG9vbGlkLCBpbnQgY3B1KQotewotICAgIEdDX0lOSVQoY3R4KTsKLSAgICBpbnQgcmMgPSAwOwot Ci0gICAgcmMgPSB4Y19jcHVwb29sX3JlbW92ZWNwdShjdHgtPnhjaCwgcG9vbGlkLCBjcHUpOwot ICAgIGlmIChyYykgewotICAgICAgICBMT0dFKEVSUk9SLCAiRXJyb3IgcmVtb3ZpbmcgY3B1ICVk IGZyb20gY3B1cG9vbCIsIGNwdSk7Ci0gICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICB9Ci0K LSAgICBHQ19GUkVFOwotICAgIHJldHVybiByYzsKLX0KLQotaW50IGxpYnhsX2NwdXBvb2xfY3B1 cmVtb3ZlX2NwdW1hcChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgcG9vbGlkLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9iaXRtYXAgKmNwdW1hcCkKLXsK LSAgICBpbnQgYywgbmNwdXMgPSAwLCByYyA9IDA7Ci0KLSAgICBsaWJ4bF9mb3JfZWFjaF9zZXRf Yml0KGMsICpjcHVtYXApIHsKLSAgICAgICAgaWYgKCFsaWJ4bF9jcHVwb29sX2NwdXJlbW92ZShj dHgsIHBvb2xpZCwgYykpCi0gICAgICAgICAgICBuY3B1cysrOwotICAgIH0KLQotICAgIGlmIChu Y3B1cyAhPSBsaWJ4bF9iaXRtYXBfY291bnRfc2V0KGNwdW1hcCkpCi0gICAgICAgIHJjID0gRVJS T1JfRkFJTDsKLQotICAgIHJldHVybiByYzsKLX0KLQotaW50IGxpYnhsX2NwdXBvb2xfY3B1cmVt b3ZlX25vZGUobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IHBvb2xpZCwgaW50IG5vZGUsIGludCAq Y3B1cykKLXsKLSAgICBpbnQgcmV0ID0gMDsKLSAgICBpbnQgbl9wb29sczsKLSAgICBpbnQgcDsK LSAgICBpbnQgY3B1LCBucl9jcHVzOwotICAgIGxpYnhsX2NwdXRvcG9sb2d5ICp0b3BvbG9neTsK LSAgICBsaWJ4bF9jcHVwb29saW5mbyAqcG9vbGluZm87Ci0KLSAgICBwb29saW5mbyA9IGxpYnhs X2xpc3RfY3B1cG9vbChjdHgsICZuX3Bvb2xzKTsKLSAgICBpZiAoIXBvb2xpbmZvKSB7Ci0gICAg ICAgIHJldHVybiBFUlJPUl9OT01FTTsKLSAgICB9Ci0KLSAgICB0b3BvbG9neSA9IGxpYnhsX2dl dF9jcHVfdG9wb2xvZ3koY3R4LCAmbnJfY3B1cyk7Ci0gICAgaWYgKCF0b3BvbG9neSkgewotICAg ICAgICByZXQgPSBFUlJPUl9GQUlMOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICAq Y3B1cyA9IDA7Ci0gICAgZm9yIChwID0gMDsgcCA8IG5fcG9vbHM7IHArKykgewotICAgICAgICBp ZiAocG9vbGluZm9bcF0ucG9vbGlkID09IHBvb2xpZCkgewotICAgICAgICAgICAgZm9yIChjcHUg PSAwOyBjcHUgPCBucl9jcHVzOyBjcHUrKykgewotICAgICAgICAgICAgICAgIGlmICgodG9wb2xv Z3lbY3B1XS5ub2RlID09IG5vZGUpICYmCi0gICAgICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1h cF90ZXN0KCZwb29saW5mb1twXS5jcHVtYXAsIGNwdSkgJiYKLSAgICAgICAgICAgICAgICAgICAg IWxpYnhsX2NwdXBvb2xfY3B1cmVtb3ZlKGN0eCwgcG9vbGlkLCBjcHUpKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAoKmNwdXMpKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGlieGxfY3B1dG9wb2xvZ3lfbGlzdF9mcmVlKHRv cG9sb2d5LCBucl9jcHVzKTsKLQotb3V0OgotICAgIGxpYnhsX2NwdXBvb2xpbmZvX2xpc3RfZnJl ZShwb29saW5mbywgbl9wb29scyk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1pbnQgbGlieGxf Y3B1cG9vbF9tb3ZlZG9tYWluKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBwb29saWQsIHVpbnQz Ml90IGRvbWlkKQotewotICAgIEdDX0lOSVQoY3R4KTsKLSAgICBpbnQgcmM7Ci0KLSAgICByYyA9 IHhjX2NwdXBvb2xfbW92ZWRvbWFpbihjdHgtPnhjaCwgcG9vbGlkLCBkb21pZCk7Ci0gICAgaWYg KHJjKSB7Ci0gICAgICAgIExPR0VWRChFUlJPUiwgcmMsIGRvbWlkLCAiRXJyb3IgbW92aW5nIGRv bWFpbiB0byBjcHVwb29sIik7Ci0gICAgICAgIEdDX0ZSRUU7Ci0gICAgICAgIHJldHVybiBFUlJP Ul9GQUlMOwotICAgIH0KLQotICAgIEdDX0ZSRUU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRp YyBpbnQgZmRfc2V0X2ZsYWdzKGxpYnhsX2N0eCAqY3R4LCBpbnQgZmQsCiAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgZmNudGxnZXRvcCwgaW50IGZjbnRsc2V0b3AsIGNvbnN0IGNoYXIgKmZs LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdtYXNrLCBpbnQgc2V0X3ApCmRpZmYg LS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9jcHVwb29sLmMgYi90b29scy9saWJ4bC9saWJ4bF9j cHVwb29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkMjJiMQotLS0g L2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NwdXBvb2wuYwpAQCAtMCwwICsxLDQ0 MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTcgQ2l0cml4IEx0ZCBhbmQgb3RoZXIgY29u dHJpYnV0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUg c3BlY2lhbAorICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5T RS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAibGli eGxfb3NkZXBzLmgiCisKKyNpbmNsdWRlICJsaWJ4bF9pbnRlcm5hbC5oIgorCisvKiBSZXR1cm5z OgorICogICAwIC0gc3VjY2VzcworICogICBFUlJPUl9GQUlMICsgZXJybm8gPT0gRU5PRU5UIC0g bm8gZW50cnkgZm91bmQKKyAqICAgRVJST1JfJEZPTyArIGVycm5vICE9IEVOT0VOVCAtIG90aGVy IGZhaWx1cmUKKyAqLworc3RhdGljIGludCBjcHVwb29sX2luZm8obGlieGxfX2djICpnYywKKyAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2NwdXBvb2xpbmZvICppbmZvLAorICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3QgcG9vbGlkLAorICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBleGFjdCAvKiBleGFjdGx5IHBvb2xpZCBvciA+PSBwb29saWQgKi8pCit7CisgICAgeGNf Y3B1cG9vbGluZm9fdCAqeGNpbmZvOworICAgIGludCByYyA9IEVSUk9SX0ZBSUw7CisKKyAgICB4 Y2luZm8gPSB4Y19jcHVwb29sX2dldGluZm8oQ1RYLT54Y2gsIHBvb2xpZCk7CisgICAgaWYgKHhj aW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKGV4YWN0IHx8IGVycm5vICE9IEVOT0VO VCkKKyAgICAgICAgICAgIExPR0UoRVJST1IsICJmYWlsZWQgdG8gZ2V0IGluZm8gZm9yIGNwdXBv b2wlZCIsIHBvb2xpZCk7CisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgIH0KKworICAg IGlmIChleGFjdCAmJiB4Y2luZm8tPmNwdXBvb2xfaWQgIT0gcG9vbGlkKQorICAgIHsKKyAgICAg ICAgTE9HKEVSUk9SLCAiZ290IGluZm8gZm9yIGNwdXBvb2wlZCwgd2FudGVkIGNwdXBvb2wlZFxu IiwKKyAgICAgICAgICAgIHhjaW5mby0+Y3B1cG9vbF9pZCwgcG9vbGlkKTsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorCisgICAgaW5mby0+cG9vbGlkID0geGNpbmZvLT5jcHVwb29sX2lkOwor ICAgIGluZm8tPnBvb2xfbmFtZSA9IGxpYnhsX2NwdXBvb2xpZF90b19uYW1lKENUWCwgaW5mby0+ cG9vbGlkKTsKKyAgICBpZiAoIWluZm8tPnBvb2xfbmFtZSkgeworICAgICAgICByYyA9IEVSUk9S X0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBpbmZvLT5zY2hlZCA9IHhjaW5m by0+c2NoZWRfaWQ7CisgICAgaW5mby0+bl9kb20gPSB4Y2luZm8tPm5fZG9tOworICAgIHJjID0g bGlieGxfY3B1X2JpdG1hcF9hbGxvYyhDVFgsICZpbmZvLT5jcHVtYXAsIDApOworICAgIGlmIChy YykKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBtZW1jcHkoaW5mby0+Y3B1bWFwLm1hcCwgeGNp bmZvLT5jcHVtYXAsIGluZm8tPmNwdW1hcC5zaXplKTsKKworICAgIHJjID0gMDsKK291dDoKKyAg ICB4Y19jcHVwb29sX2luZm9mcmVlKENUWC0+eGNoLCB4Y2luZm8pOworICAgIHJldHVybiByYzsK K30KKworaW50IGxpYnhsX2NwdXBvb2xfaW5mbyhsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfY3B1cG9vbGluZm8gKmluZm8sIHVpbnQzMl90IHBvb2xpZCkKK3sK KyAgICBHQ19JTklUKGN0eCk7CisgICAgaW50IHJjID0gY3B1cG9vbF9pbmZvKGdjLCBpbmZvLCBw b29saWQsIHRydWUpOworICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIHJjOworfQorCitsaWJ4bF9j cHVwb29saW5mbyAqIGxpYnhsX2xpc3RfY3B1cG9vbChsaWJ4bF9jdHggKmN0eCwgaW50ICpuYl9w b29sX291dCkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfY3B1cG9vbGluZm8gaW5m bywgKnB0cjsKKworICAgIGludCBpOworICAgIHVpbnQzMl90IHBvb2xpZDsKKworICAgIHB0ciA9 IE5VTEw7CisKKyAgICBwb29saWQgPSAwOworICAgIGZvciAoaSA9IDA7OyBpKyspIHsKKyAgICAg ICAgbGlieGxfY3B1cG9vbGluZm9faW5pdCgmaW5mbyk7CisgICAgICAgIGlmIChjcHVwb29sX2lu Zm8oZ2MsICZpbmZvLCBwb29saWQsIGZhbHNlKSkgeworICAgICAgICAgICAgbGlieGxfY3B1cG9v bGluZm9fZGlzcG9zZSgmaW5mbyk7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKSBn b3RvIG91dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcHRyID0g bGlieGxfX3JlYWxsb2MoTk9HQywgcHRyLCAoaSsxKSAqIHNpemVvZihsaWJ4bF9jcHVwb29saW5m bykpOworICAgICAgICBwdHJbaV0gPSBpbmZvOworICAgICAgICBwb29saWQgPSBpbmZvLnBvb2xp ZCArIDE7CisgICAgICAgIC8qIERvbid0IGRpc3Bvc2Ugb2YgaW5mbyBiZWNhdXNlIGl0IHdpbGwg YmUgcmV0dXJuZWQgdG8gY2FsbGVyICovCisgICAgfQorCisgICAgKm5iX3Bvb2xfb3V0ID0gaTsK KworICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIHB0cjsKKworb3V0OgorICAgIGxpYnhsX2NwdXBv b2xpbmZvX2xpc3RfZnJlZShwdHIsIGkpOworICAgICpuYl9wb29sX291dCA9IDA7CisgICAgR0Nf RlJFRTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IGxpYnhsX2dldF9mcmVlY3B1cyhsaWJ4 bF9jdHggKmN0eCwgbGlieGxfYml0bWFwICpjcHVtYXApCit7CisgICAgaW50IG5jcHVzOworCisg ICAgbmNwdXMgPSBsaWJ4bF9nZXRfbWF4X2NwdXMoY3R4KTsKKyAgICBpZiAobmNwdXMgPCAwKQor ICAgICAgICByZXR1cm4gbmNwdXM7CisKKyAgICBjcHVtYXAtPm1hcCA9IHhjX2NwdXBvb2xfZnJl ZWluZm8oY3R4LT54Y2gpOworICAgIGlmIChjcHVtYXAtPm1hcCA9PSBOVUxMKQorICAgICAgICBy ZXR1cm4gRVJST1JfRkFJTDsKKworICAgIGNwdW1hcC0+c2l6ZSA9IChuY3B1cyArIDcpIC8gODsK KworICAgIHJldHVybiAwOworfQorCitpbnQgbGlieGxfY3B1cG9vbF9jcmVhdGUobGlieGxfY3R4 ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf c2NoZWR1bGVyIHNjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcCBj cHVtYXAsIGxpYnhsX3V1aWQgKnV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3QgKnBvb2xpZCkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgaW50IHJjOworICAgIGludCBp OworICAgIHhzX3RyYW5zYWN0aW9uX3QgdDsKKyAgICBjaGFyICp1dWlkX3N0cmluZzsKKworICAg IHV1aWRfc3RyaW5nID0gbGlieGxfX3V1aWQyc3RyaW5nKGdjLCAqdXVpZCk7CisgICAgaWYgKCF1 dWlkX3N0cmluZykgeworICAgICAgICBHQ19GUkVFOworICAgICAgICByZXR1cm4gRVJST1JfTk9N RU07CisgICAgfQorCisgICAgcmMgPSB4Y19jcHVwb29sX2NyZWF0ZShjdHgtPnhjaCwgcG9vbGlk LCBzY2hlZCk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIExPR0VWKEVSUk9SLCByYywgIkNvdWxk IG5vdCBjcmVhdGUgY3B1cG9vbCIpOworICAgICAgICBHQ19GUkVFOworICAgICAgICByZXR1cm4g RVJST1JfRkFJTDsKKyAgICB9CisKKyAgICBsaWJ4bF9mb3JfZWFjaF9iaXQoaSwgY3B1bWFwKQor ICAgICAgICBpZiAobGlieGxfYml0bWFwX3Rlc3QoJmNwdW1hcCwgaSkpIHsKKyAgICAgICAgICAg IHJjID0geGNfY3B1cG9vbF9hZGRjcHUoY3R4LT54Y2gsICpwb29saWQsIGkpOworICAgICAgICAg ICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgTE9HRVYoRVJST1IsIHJjLCAiRXJyb3IgbW92 aW5nIGNwdSB0byBjcHVwb29sIik7CisgICAgICAgICAgICAgICAgbGlieGxfY3B1cG9vbF9kZXN0 cm95KGN0eCwgKnBvb2xpZCk7CisgICAgICAgICAgICAgICAgR0NfRlJFRTsKKyAgICAgICAgICAg ICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg Zm9yICg7OykgeworICAgICAgICB0ID0geHNfdHJhbnNhY3Rpb25fc3RhcnQoY3R4LT54c2gpOwor CisgICAgICAgIHhzX21rZGlyKGN0eC0+eHNoLCB0LCBHQ1NQUklOVEYoIi9sb2NhbC9wb29sLyVk IiwgKnBvb2xpZCkpOworICAgICAgICBsaWJ4bF9feHNfcHJpbnRmKGdjLCB0LAorICAgICAgICAg ICAgICAgICAgICAgICAgIEdDU1BSSU5URigiL2xvY2FsL3Bvb2wvJWQvdXVpZCIsICpwb29saWQp LAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHV1aWRfc3RyaW5nKTsKKyAgICAgICAg bGlieGxfX3hzX3ByaW50ZihnYywgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklO VEYoIi9sb2NhbC9wb29sLyVkL25hbWUiLCAqcG9vbGlkKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAiJXMiLCBuYW1lKTsKKworICAgICAgICBpZiAoeHNfdHJhbnNhY3Rpb25fZW5kKGN0eC0+ eHNoLCB0LCAwKSB8fCAoZXJybm8gIT0gRUFHQUlOKSkgeworICAgICAgICAgICAgR0NfRlJFRTsK KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorfQorCitpbnQgbGlieGxf Y3B1cG9vbF9kZXN0cm95KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBwb29saWQpCit7CisgICAg R0NfSU5JVChjdHgpOworICAgIGludCByYywgaTsKKyAgICB4Y19jcHVwb29saW5mb190ICppbmZv OworICAgIHhzX3RyYW5zYWN0aW9uX3QgdDsKKyAgICBsaWJ4bF9iaXRtYXAgY3B1bWFwOworCisg ICAgaW5mbyA9IHhjX2NwdXBvb2xfZ2V0aW5mbyhjdHgtPnhjaCwgcG9vbGlkKTsKKyAgICBpZiAo aW5mbyA9PSBOVUxMKSB7CisgICAgICAgIEdDX0ZSRUU7CisgICAgICAgIHJldHVybiBFUlJPUl9O T01FTTsKKyAgICB9CisKKyAgICByYyA9IEVSUk9SX0lOVkFMOworICAgIGlmICgoaW5mby0+Y3B1 cG9vbF9pZCAhPSBwb29saWQpIHx8IChpbmZvLT5uX2RvbSkpCisgICAgICAgIGdvdG8gb3V0Owor CisgICAgcmMgPSBsaWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJmNwdW1hcCwgMCk7CisgICAg aWYgKHJjKQorICAgICAgICBnb3RvIG91dDsKKworICAgIG1lbWNweShjcHVtYXAubWFwLCBpbmZv LT5jcHVtYXAsIGNwdW1hcC5zaXplKTsKKyAgICBsaWJ4bF9mb3JfZWFjaF9iaXQoaSwgY3B1bWFw KQorICAgICAgICBpZiAobGlieGxfYml0bWFwX3Rlc3QoJmNwdW1hcCwgaSkpIHsKKyAgICAgICAg ICAgIHJjID0geGNfY3B1cG9vbF9yZW1vdmVjcHUoY3R4LT54Y2gsIHBvb2xpZCwgaSk7CisgICAg ICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgICAgICBMT0dFVihFUlJPUiwgcmMsICJFcnJv ciByZW1vdmluZyBjcHUgZnJvbSBjcHVwb29sIik7CisgICAgICAgICAgICAgICAgcmMgPSBFUlJP Ul9GQUlMOworICAgICAgICAgICAgICAgIGdvdG8gb3V0MTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorCisgICAgcmMgPSB4Y19jcHVwb29sX2Rlc3Ryb3koY3R4LT54Y2gsIHBvb2xpZCk7Cisg ICAgaWYgKHJjKSB7CisgICAgICAgIExPR0VWKEVSUk9SLCByYywgIkNvdWxkIG5vdCBkZXN0cm95 IGNwdXBvb2wiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDE7 CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICB0ID0geHNfdHJhbnNhY3Rpb25fc3Rh cnQoY3R4LT54c2gpOworCisgICAgICAgIHhzX3JtKGN0eC0+eHNoLCBYQlRfTlVMTCwgR0NTUFJJ TlRGKCIvbG9jYWwvcG9vbC8lZCIsIHBvb2xpZCkpOworCisgICAgICAgIGlmICh4c190cmFuc2Fj dGlvbl9lbmQoY3R4LT54c2gsIHQsIDApIHx8IChlcnJubyAhPSBFQUdBSU4pKQorICAgICAgICAg ICAgYnJlYWs7CisgICAgfQorCisgICAgcmMgPSAwOworCitvdXQxOgorICAgIGxpYnhsX2JpdG1h cF9kaXNwb3NlKCZjcHVtYXApOworb3V0OgorICAgIHhjX2NwdXBvb2xfaW5mb2ZyZWUoY3R4LT54 Y2gsIGluZm8pOworICAgIEdDX0ZSRUU7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsaWJ4 bF9jcHVwb29sX3JlbmFtZShsaWJ4bF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgdWludDMy X3QgcG9vbGlkKQoreworICAgIEdDX0lOSVQoY3R4KTsKKyAgICB4c190cmFuc2FjdGlvbl90IHQ7 CisgICAgeGNfY3B1cG9vbGluZm9fdCAqaW5mbzsKKyAgICBpbnQgcmM7CisKKyAgICBpbmZvID0g eGNfY3B1cG9vbF9nZXRpbmZvKGN0eC0+eGNoLCBwb29saWQpOworICAgIGlmIChpbmZvID09IE5V TEwpIHsKKyAgICAgICAgR0NfRlJFRTsKKyAgICAgICAgcmV0dXJuIEVSUk9SX05PTUVNOworICAg IH0KKworICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgaWYgKGluZm8tPmNwdXBvb2xfaWQgIT0g cG9vbGlkKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHJjID0gMDsKKworICAgIGZvciAoOzsp IHsKKyAgICAgICAgdCA9IHhzX3RyYW5zYWN0aW9uX3N0YXJ0KGN0eC0+eHNoKTsKKworICAgICAg ICBsaWJ4bF9feHNfcHJpbnRmKGdjLCB0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BS SU5URigiL2xvY2FsL3Bvb2wvJWQvbmFtZSIsIHBvb2xpZCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgIiVzIiwgbmFtZSk7CisKKyAgICAgICAgaWYgKHhzX3RyYW5zYWN0aW9uX2VuZChjdHgt PnhzaCwgdCwgMCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoZXJybm8gPT0g RUFHQUlOKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlM OworICAgICAgICBicmVhazsKKyAgICB9CisKK291dDoKKyAgICB4Y19jcHVwb29sX2luZm9mcmVl KGN0eC0+eGNoLCBpbmZvKTsKKyAgICBHQ19GUkVFOworCisgICAgcmV0dXJuIHJjOworfQorCitp bnQgbGlieGxfY3B1cG9vbF9jcHVhZGQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IHBvb2xpZCwg aW50IGNwdSkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgaW50IHJjID0gMDsKKworICAgIHJj ID0geGNfY3B1cG9vbF9hZGRjcHUoY3R4LT54Y2gsIHBvb2xpZCwgY3B1KTsKKyAgICBpZiAocmMp IHsKKyAgICAgICAgTE9HRShFUlJPUiwgIkVycm9yIG1vdmluZyBjcHUgJWQgdG8gY3B1cG9vbCIs IGNwdSk7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICB9CisKKyAgICBHQ19GUkVFOwor ICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2NwdXBvb2xfY3B1YWRkX2NwdW1hcChsaWJ4 bF9jdHggKmN0eCwgdWludDMyX3QgcG9vbGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBsaWJ4bF9iaXRtYXAgKmNwdW1hcCkKK3sKKyAgICBpbnQgYywgbmNwdXMgPSAw LCByYyA9IDA7CisKKyAgICBsaWJ4bF9mb3JfZWFjaF9zZXRfYml0KGMsICpjcHVtYXApIHsKKyAg ICAgICAgaWYgKCFsaWJ4bF9jcHVwb29sX2NwdWFkZChjdHgsIHBvb2xpZCwgYykpCisgICAgICAg ICAgICBuY3B1cysrOworICAgIH0KKworICAgIGlmIChuY3B1cyAhPSBsaWJ4bF9iaXRtYXBfY291 bnRfc2V0KGNwdW1hcCkpCisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKworICAgIHJldHVybiBy YzsKK30KKworaW50IGxpYnhsX2NwdXBvb2xfY3B1YWRkX25vZGUobGlieGxfY3R4ICpjdHgsIHVp bnQzMl90IHBvb2xpZCwgaW50IG5vZGUsIGludCAqY3B1cykKK3sKKyAgICBpbnQgcmMgPSAwOwor ICAgIGludCBjcHUsIG5yOworICAgIGxpYnhsX2JpdG1hcCBmcmVlbWFwOworICAgIGxpYnhsX2Nw dXRvcG9sb2d5ICp0b3BvbG9neTsKKworICAgIGlmIChsaWJ4bF9nZXRfZnJlZWNwdXMoY3R4LCAm ZnJlZW1hcCkpIHsKKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisgICAgfQorCisgICAgdG9w b2xvZ3kgPSBsaWJ4bF9nZXRfY3B1X3RvcG9sb2d5KGN0eCwgJm5yKTsKKyAgICBpZiAoIXRvcG9s b2d5KSB7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAg fQorCisgICAgKmNwdXMgPSAwOworICAgIGZvciAoY3B1ID0gMDsgY3B1IDwgbnI7IGNwdSsrKSB7 CisgICAgICAgIGlmIChsaWJ4bF9iaXRtYXBfdGVzdCgmZnJlZW1hcCwgY3B1KSAmJiAodG9wb2xv Z3lbY3B1XS5ub2RlID09IG5vZGUpICYmCisgICAgICAgICAgICAhbGlieGxfY3B1cG9vbF9jcHVh ZGQoY3R4LCBwb29saWQsIGNwdSkpIHsKKyAgICAgICAgICAgICAgICAoKmNwdXMpKys7CisgICAg ICAgIH0KKyAgICAgICAgbGlieGxfY3B1dG9wb2xvZ3lfZGlzcG9zZSgmdG9wb2xvZ3lbY3B1XSk7 CisgICAgfQorCisgICAgZnJlZSh0b3BvbG9neSk7CitvdXQ6CisgICAgbGlieGxfYml0bWFwX2Rp c3Bvc2UoJmZyZWVtYXApOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2NwdXBvb2xf Y3B1cmVtb3ZlKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBwb29saWQsIGludCBjcHUpCit7Cisg ICAgR0NfSU5JVChjdHgpOworICAgIGludCByYyA9IDA7CisKKyAgICByYyA9IHhjX2NwdXBvb2xf cmVtb3ZlY3B1KGN0eC0+eGNoLCBwb29saWQsIGNwdSk7CisgICAgaWYgKHJjKSB7CisgICAgICAg IExPR0UoRVJST1IsICJFcnJvciByZW1vdmluZyBjcHUgJWQgZnJvbSBjcHVwb29sIiwgY3B1KTsK KyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgIH0KKworICAgIEdDX0ZSRUU7CisgICAgcmV0 dXJuIHJjOworfQorCitpbnQgbGlieGxfY3B1cG9vbF9jcHVyZW1vdmVfY3B1bWFwKGxpYnhsX2N0 eCAqY3R4LCB1aW50MzJfdCBwb29saWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGxpYnhsX2JpdG1hcCAqY3B1bWFwKQoreworICAgIGludCBjLCBuY3B1cyA9IDAs IHJjID0gMDsKKworICAgIGxpYnhsX2Zvcl9lYWNoX3NldF9iaXQoYywgKmNwdW1hcCkgeworICAg ICAgICBpZiAoIWxpYnhsX2NwdXBvb2xfY3B1cmVtb3ZlKGN0eCwgcG9vbGlkLCBjKSkKKyAgICAg ICAgICAgIG5jcHVzKys7CisgICAgfQorCisgICAgaWYgKG5jcHVzICE9IGxpYnhsX2JpdG1hcF9j b3VudF9zZXQoY3B1bWFwKSkKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworCisgICAgcmV0dXJu IHJjOworfQorCitpbnQgbGlieGxfY3B1cG9vbF9jcHVyZW1vdmVfbm9kZShsaWJ4bF9jdHggKmN0 eCwgdWludDMyX3QgcG9vbGlkLCBpbnQgbm9kZSwgaW50ICpjcHVzKQoreworICAgIGludCByZXQg PSAwOworICAgIGludCBuX3Bvb2xzOworICAgIGludCBwOworICAgIGludCBjcHUsIG5yX2NwdXM7 CisgICAgbGlieGxfY3B1dG9wb2xvZ3kgKnRvcG9sb2d5OworICAgIGxpYnhsX2NwdXBvb2xpbmZv ICpwb29saW5mbzsKKworICAgIHBvb2xpbmZvID0gbGlieGxfbGlzdF9jcHVwb29sKGN0eCwgJm5f cG9vbHMpOworICAgIGlmICghcG9vbGluZm8pIHsKKyAgICAgICAgcmV0dXJuIEVSUk9SX05PTUVN OworICAgIH0KKworICAgIHRvcG9sb2d5ID0gbGlieGxfZ2V0X2NwdV90b3BvbG9neShjdHgsICZu cl9jcHVzKTsKKyAgICBpZiAoIXRvcG9sb2d5KSB7CisgICAgICAgIHJldCA9IEVSUk9SX0ZBSUw7 CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgICpjcHVzID0gMDsKKyAgICBmb3IgKHAg PSAwOyBwIDwgbl9wb29sczsgcCsrKSB7CisgICAgICAgIGlmIChwb29saW5mb1twXS5wb29saWQg PT0gcG9vbGlkKSB7CisgICAgICAgICAgICBmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdXM7IGNw dSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCh0b3BvbG9neVtjcHVdLm5vZGUgPT0gbm9kZSkg JiYKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwX3Rlc3QoJnBvb2xpbmZvW3BdLmNw dW1hcCwgY3B1KSAmJgorICAgICAgICAgICAgICAgICAgICAhbGlieGxfY3B1cG9vbF9jcHVyZW1v dmUoY3R4LCBwb29saWQsIGNwdSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICgqY3B1cykr KzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK KyAgICBsaWJ4bF9jcHV0b3BvbG9neV9saXN0X2ZyZWUodG9wb2xvZ3ksIG5yX2NwdXMpOworCitv dXQ6CisgICAgbGlieGxfY3B1cG9vbGluZm9fbGlzdF9mcmVlKHBvb2xpbmZvLCBuX3Bvb2xzKTsK KworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBsaWJ4bF9jcHVwb29sX21vdmVkb21haW4obGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IHBvb2xpZCwgdWludDMyX3QgZG9taWQpCit7CisgICAgR0Nf SU5JVChjdHgpOworICAgIGludCByYzsKKworICAgIHJjID0geGNfY3B1cG9vbF9tb3ZlZG9tYWlu KGN0eC0+eGNoLCBwb29saWQsIGRvbWlkKTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HRVZE KEVSUk9SLCByYywgZG9taWQsICJFcnJvciBtb3ZpbmcgZG9tYWluIHRvIGNwdXBvb2wiKTsKKyAg ICAgICAgR0NfRlJFRTsKKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisgICAgfQorCisgICAg R0NfRlJFRTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAq IG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwK KyAqIEVuZDoKKyAqLwotLSAKMi4xMC4yCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==