Date: Wed, 3 Jul 2013 00:56:10 +0900 From: Takuya ASADA <syuu@dokukino.com> To: Luigi Rizzo <rizzo@iet.unipi.it> Cc: FreeBSD Net <freebsd-net@freebsd.org> Subject: Re: Multiqueue support for bpf Message-ID: <CALG4x-UYBFsMttpZx1-c_wtVf5MST8%2B_t1psY2HQskTiOZDFLA@mail.gmail.com> In-Reply-To: <CA%2BhQ2%2BgwW6FOQS79xmWVLSWWHrZMFnhaUM98Kp6aDVaUePNfTA@mail.gmail.com> References: <CALG4x-V-OLoqMXQarSNy5Lv3kNVu01AiN4A49Nv7t-Ysfr1DBg@mail.gmail.com> <CA%2BhQ2%2BgwW6FOQS79xmWVLSWWHrZMFnhaUM98Kp6aDVaUePNfTA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--bcaec518248ea5c9a804e089646d Content-Type: text/plain; charset=UTF-8 Hi, Do you have an updated URL for the diffs ? The link below from your > original message > seems not working now (NXDOMAIN) > > http://www.dokukino.com/mq_bpf_20110813.diff > Changes with recent head is on my repository: http://svnweb.freebsd.org/base/user/syuu/mq_bpf/ And I attached a diff file on this mail. --bcaec518248ea5c9a804e089646d Content-Type: application/octet-stream; name="mq_bpf_20130703.diff" Content-Disposition: attachment; filename="mq_bpf_20130703.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hin9onwa0 SW5kZXg6IGlmbmV0LjkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaWZuZXQuOQkoLi4uL2hlYWQvc2hhcmUvbWFu L21hbjkvaWZuZXQuOSkJKHJldmlzaW9uIDI1MjUwOSkKKysrIGlmbmV0LjkJKC4uLi91c2VyL3N5 dXUvbXFfYnBmL3NoYXJlL21hbi9tYW45L2lmbmV0LjkpCShyZXZpc2lvbiAyNTI1MDkpCkBAIC0x MTksNiArMTE5LDE0IEBACiAuRm8gXCoobHAqaWZfcmVzb2x2ZW11bHRpXCoocnAKIC5GYSAic3Ry dWN0IGlmbmV0ICppZnAiICJzdHJ1Y3Qgc29ja2FkZHIgKipyZXRzYSIgInN0cnVjdCBzb2NrYWRk ciAqYWRkciIKIC5GYworLkZ0IGludAorLkZuIFwqKGxwKmlmX2dldF9yeHF1ZXVlX2xlblwqKHJw ICJzdHJ1Y3QgaWZuZXQgKmlmcCIKKy5GdCBpbnQKKy5GbiBcKihscCppZl9nZXRfdHhxdWV1ZV9s ZW5cKihycCAic3RydWN0IGlmbmV0ICppZnAiCisuRnQgaW50CisuRm4gXCoobHAqaWZfZ2V0X3J4 cXVldWVfYWZmaW5pdHlcKihycCAic3RydWN0IGlmbmV0ICppZnAiICJpbnQgcXVlaWQiCisuRnQg aW50CisuRm4gXCoobHAqaWZfZ2V0X3R4cXVldWVfYWZmaW5pdHlcKihycCAic3RydWN0IGlmbmV0 ICppZnAiICJpbnQgcXVlaWQiCiAuU3MgInN0cnVjdCBpZmFkZHIgbWVtYmVyIGZ1bmN0aW9uIgog LkZ0IHZvaWQKIC5GbyBcKihscCppZmFfcnRyZXF1ZXN0XCoocnAKQEAgLTUzNyw2ICs1NDUsMTQg QEAKIGNvcnJlc3BvbmRzIHRvIHRoYXQgYWRkcmVzcyB3aGljaCBpcyByZXR1cm5lZCBpbgogLkZh ICpyZXRzYSAuCiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgYW4gZXJyb3IgY29kZSBvbiBm YWlsdXJlLgorLkl0IEZuIGlmX2dldF9yeHF1ZXVlX2xlbgorR2V0IFJYIHF1ZXVlIGxlbmd0aCwg b25seSByZXF1aXJlZCBmb3IgbXVsdGlxdWV1ZSBzdXBwb3J0ZWQgaW50ZXJmYWNlcy4KKy5JdCBG biBpZl9nZXRfdHhxdWV1ZV9sZW4KK0dldCBUWCBxdWV1ZSBsZW5ndGgsIG9ubHkgcmVxdWlyZWQg Zm9yIG11bHRpcXVldWUgc3VwcG9ydGVkIGludGVyZmFjZXMuCisuSXQgRm4gaWZfZ2V0X3J4cXVl dWVfYWZmaW5pdHkKK0dldCBSWCBxdWV1ZSBhZmZpbml0eSwgb25seSByZXF1aXJlZCBmb3IgbXVs dGlxdWV1ZSBzdXBwb3J0ZWQgaW50ZXJmYWNlcy4KKy5JdCBGbiBpZl9nZXRfdHhxdWV1ZV9hZmZp bml0eQorR2V0IFRYIHF1ZXVlIGFmZmluaXR5LCBvbmx5IHJlcXVpcmVkIGZvciBtdWx0aXF1ZXVl IHN1cHBvcnRlZCBpbnRlcmZhY2VzLgogLkVsCiAuU3MgIkludGVyZmFjZSBGbGFncyIKIEludGVy ZmFjZSBmbGFncyBhcmUgdXNlZCBmb3IgYSBudW1iZXIgb2YgZGlmZmVyZW50IHB1cnBvc2VzLgpJ bmRleDogYnBmLjQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnBmLjQJKC4uLi9oZWFkL3NoYXJlL21hbi9tYW40 L2JwZi40KQkocmV2aXNpb24gMjUyNTA5KQorKysgYnBmLjQJKC4uLi91c2VyL3N5dXUvbXFfYnBm L3NoYXJlL21hbi9tYW40L2JwZi40KQkocmV2aXNpb24gMjUyNTA5KQpAQCAtNjMxLDYgKzYzMSw0 NiBAQAogLlZ0IGJ6aF9rZXJuZWxfZ2VuCiBhZ2FpbnN0CiAuVnQgYnpoX3VzZXJfZ2VuIC4KKy5J dCBEdiBCSU9DRU5BUU1BU0sKK0VuYWJsZXMgbXVsdGlxdWV1ZSBmaWx0ZXIgb24gdGhlIGRlc2Ny aXB0b3IuCisKKy5JdCBEdiBCSU9DRElTUU1BU0sKK0Rpc2FibGVzIG11bHRpcXVldWUgZmlsdGVy IG9uIHRoZSBkZXNjcmlwdG9yLgorCisuSXQgRHYgQklPQ1NUUlhRTUFTSworLlBxIExpIHVpbnQz Ml90CitTZXQgbWFzayBiaXQgb24gc3BlY2lmaWVkIFJYIHF1ZXVlLgorCisuSXQgRHYgQklPQ0NS UlhRTUFTSworLlBxIExpIHVpbnQzMl90CitDbGVhciBtYXNrIGJpdCBvbiBzcGVjaWZpZWQgUlgg cXVldWUuCisKKy5JdCBEdiBCSU9DR1RSWFFNQVNLCisuUHEgTGkgdWludDMyX3QKK0dldCBtYXNr IGJpdCBvbiBzcGVjaWZpZWQgUlggcXVldWUuCisKKy5JdCBEdiBCSU9DU1RUWFFNQVNLCisuUHEg TGkgdWludDMyX3QKK1NldCBtYXNrIGJpdCBvbiBzcGVjaWZpZWQgVFggcXVldWUuCisKKy5JdCBE diBCSU9DQ1JUWFFNQVNLCisuUHEgTGkgdWludDMyX3QKK0NsZWFyIG1hc2sgYml0IG9uIHNwZWNp ZmllZCBUWCBxdWV1ZS4KKworLkl0IER2IEJJT0NHVFRYUU1BU0sKKy5QcSBMaSB1aW50MzJfdAor R2V0IG1hc2sgYml0IG9uIHNwZWNpZmllZCBUWCBxdWV1ZS4KKworLkl0IER2IEJJT0NTVE9USEVS TUFTSworU2V0IG1hc2sgYml0IGZvciB0aGUgcGFja2V0cyB3aGljaCBub3QgdGllZCB3aXRoIGFu eSBxdWV1ZXMuCisKKy5JdCBEdiBCSU9DQ1JPVEhFUk1BU0sKK0NsZWFyIG1hc2sgYml0IGZvciB0 aGUgcGFja2V0cyB3aGljaCBub3QgdGllZCB3aXRoIGFueSBxdWV1ZXMuCisKKy5JdCBEdiBCSU9D R1RPVEhFUk1BU0sKKy5QcSBMaSB1aW50MzJfdAorR2V0IG1hc2sgYml0IGZvciB0aGUgcGFja2V0 cyB3aGljaCBub3QgdGllZCB3aXRoIGFueSBxdWV1ZXMuCisKIC5FbAogLlNoIEJQRiBIRUFERVIK IE9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgaXMgcHJlcGVuZGVkIHRvIGVhY2ggcGFj a2V0IHJldHVybmVkIGJ5CkBAIC0xMDM3LDYgKzEwNzcsMjQgQEAKIAlCUEZfU1RNVChCUEZfUkVU K0JQRl9LLCAwKSwKIH07CiAuRWQKKy5TaCBNVUxUSVFVRVVFIFNVUFBPUlQKK011bHRpcXVldWUg bmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydCBmdW5jdGlvbiBwcm92aWRlcyBpbnRlcmZhY2VzIGZv ciAKK211bHRpdGhyZWFkZWQgcGFja2V0IHByb2Nlc3NpbmcgdXNpbmcgYnBmLgorCitOb3JtYWwg YnBmIGNhbiByZWNlaXZlIHBhY2tldHMgZnJvbSBzcGVjaWZpZWQgaW50ZXJmYWNlLCBtdWx0aXF1 ZXVlIHN1cHBvcnQgCitmdW5jdGlvbiBjYW4gcmVjZWl2ZSBwYWNrZXRzIGZyb20gc3BlY2lmaWVk IGhhcmR3YXJlIHF1ZXVlLgorCitUaGlzIGRpc3RyaWJ1dGVzIGJwZiB3b3JrbG9hZCBvbiBtdWx0 aXBsZSB0aHJlYWRzLCBhbHNvIHJlZHVjZXMgbG9jayAKK2NvbnRlbnRpb24gb24gYnBmLgorCitU byBtYWtlIHlvdXIgcHJvZ3JhbSBtdWx0aXRocmVhZGVkLCB5b3UnbGwgbmVlZCB0byBvcGVuIGJw ZiBkZXNjcmlwdG9yIG9uIGVhY2ggCit0aHJlYWQsIGVuYWJsZSBtdWx0aXF1ZXVlIHN1cHBvcnQg YnkgQklPQ0VOQVFNQVNLIGlvY3RsLCBhbmQgc2V0IHF1ZXVlIG1hc2sgYnkgCitCSU9DU1RSWFFN QVNLIC8gQklPQ1NUVFhRTUFTSyAvIEJJT0NTVE9USEVSTUFTSyBpb2N0bHMuCisKK1F1ZXVlIGxl bmd0aCBhbmQgcXVldWUgYWZmaW5pdHkgaW5mb3JtYXRpb24gbWF5IHVzZWZ1bCB0byBvcHRpbWl6 ZSBzZXR0aW5nIAorcXVldWUgbWFzayBvbiBicGYgZGVzY3JpcHRvciwgc2VlCisuWHIgbmV0aW50 cm8gNCAuCisKIC5TaCBTRUUgQUxTTwogLlhyIHRjcGR1bXAgMSAsCiAuWHIgaW9jdGwgMiAsCklu ZGV4OiBpZmNvbmZpZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlmY29uZmlnLmMJKC4uLi9oZWFkL3NiaW4v aWZjb25maWcvaWZjb25maWcuYykJKHJldmlzaW9uIDI1MjUwOSkKKysrIGlmY29uZmlnLmMJKC4u Li91c2VyL3N5dXUvbXFfYnBmL3NiaW4vaWZjb25maWcvaWZjb25maWcuYykJKHJldmlzaW9uIDI1 MjUwOSkKQEAgLTkxNyw3ICs5MTcsNyBAQAogIlwwMjBcMVJYQ1NVTVwyVFhDU1VNXDNORVRDT05T XDRWTEFOX01UVVw1VkxBTl9IV1RBR0dJTkdcNkpVTUJPX01UVVw3UE9MTElORyIgXAogIlwxMFZM QU5fSFdDU1VNXDExVFNPNFwxMlRTTzZcMTNMUk9cMTRXT0xfVUNBU1RcMTVXT0xfTUNBU1RcMTZX T0xfTUFHSUMiIFwKICJcMTdUT0U0XDIwVE9FNlwyMVZMQU5fSFdGSUxURVJcMjNWTEFOX0hXVFNP XDI0TElOS1NUQVRFXDI1TkVUTUFQIiBcCi0iXDI2UlhDU1VNX0lQVjZcMjdUWENTVU1fSVBWNiIK KyJcMjZSWENTVU1fSVBWNlwyN1RYQ1NVTV9JUFY2XDMwTVVMVElRVUVVRSIKIAogLyoKICAqIFBy aW50IHRoZSBzdGF0dXMgb2YgdGhlIGludGVyZmFjZS4gIElmIGFuIGFkZHJlc3MgZmFtaWx5IHdh cwpAQCAtOTg0LDYgKzk4NCwzOCBAQAogCQl9CiAJfQogCisJaWYgKChpZnIuaWZyX3JlcWNhcCAm IElGQ0FQX01VTFRJUVVFVUUpKSB7CisJCWludCBpLCByeHFsZW4gPSAwLCB0eHFsZW4gPSAwOwor CisJCWlmIChpb2N0bChzLCBTSU9DR0lGUUxFTiwgJmlmcikgPT0gMCkgeworCQkJcnhxbGVuID0g aWZyLmlmcl9yeHF1ZXVlX2xlbjsKKwkJCXR4cWxlbiA9IGlmci5pZnJfdHhxdWV1ZV9sZW47CisJ CX1lbHNlCisJCQlwZXJyb3IoImlvY3RsIik7CisKKwkJcHJpbnRmKCJcdHJ4cXVldWUgbGVuPSVk IGFmZmluaXR5PVsiLCByeHFsZW4pOworCQlmb3IgKGkgPSAwOyBpIDwgcnhxbGVuOyBpKyspIHsK KwkJCWlmci5pZnJfcXVldWVfYWZmaW5pdHlfaW5kZXggPSBpOworCQkJaWYgKGlvY3RsKHMsIFNJ T0NHSUZSWFFBRkZJTklUWSwgJmlmcikgPT0gMCkKKwkJCQlwcmludGYoIiAlZDolZCIsIGlmci5p ZnJfcXVldWVfYWZmaW5pdHlfaW5kZXgsCisJCQkJCWlmci5pZnJfcXVldWVfYWZmaW5pdHlfY3B1 KTsKKwkJCWVsc2UKKwkJCQlwZXJyb3IoImlvY3RsIik7CisJCX0KKwkJcHJpbnRmKCIgXVxuIik7 CisKKwkJcHJpbnRmKCJcdHR4cXVldWUgbGVuPSVkIGFmZmluaXR5PVsiLCB0eHFsZW4pOworCQlm b3IgKGkgPSAwOyBpIDwgdHhxbGVuOyBpKyspIHsKKwkJCWlmci5pZnJfcXVldWVfYWZmaW5pdHlf aW5kZXggPSBpOworCQkJaWYgKGlvY3RsKHMsIFNJT0NHSUZUWFFBRkZJTklUWSwgJmlmcikgPT0g MCkKKwkJCQlwcmludGYoIiAlZDolZCIsIGlmci5pZnJfcXVldWVfYWZmaW5pdHlfaW5kZXgsCisJ CQkJCWlmci5pZnJfcXVldWVfYWZmaW5pdHlfY3B1KTsKKwkJCWVsc2UKKwkJCQlwZXJyb3IoImlv Y3RsIik7CisJCX0KKwkJcHJpbnRmKCIgXVxuIik7CisJfQorCiAJdHVubmVsX3N0YXR1cyhzKTsK IAogCWZvciAoaWZ0ID0gaWZhOyBpZnQgIT0gTlVMTDsgaWZ0ID0gaWZ0LT5pZmFfbmV4dCkgewpJ bmRleDogdGNwZHVtcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRjcGR1bXAuYwkoLi4uL2hlYWQvY29udHJp Yi90Y3BkdW1wL3RjcGR1bXAuYykJKHJldmlzaW9uIDI1MjUwOSkKKysrIHRjcGR1bXAuYwkoLi4u L3VzZXIvc3l1dS9tcV9icGYvY29udHJpYi90Y3BkdW1wL3RjcGR1bXAuYykJKHJldmlzaW9uIDI1 MjUwOSkKQEAgLTcwMiw2ICs3MDIsNyBAQAogI2VuZGlmCiAJaW50IHN0YXR1czsKIAlGSUxFICpW RmlsZTsKKwl1aW50MzJfdCByeHEgPSAodWludDMyX3QpLTEsIHR4cSA9ICh1aW50MzJfdCktMSwg b3RoZXIgPSAodWludDMyX3QpLTE7CiAjaWZkZWYgV0lOMzIKIAlpZih3c29ja2luaXQoKSAhPSAw KSByZXR1cm4gMTsKICNlbmRpZiAvKiBXSU4zMiAqLwpAQCAtNzM3LDcgKzczOCw3IEBACiAjZW5k aWYKIAogCXdoaWxlICgKLQkgICAgKG9wID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJhQWIiIEJfRkxB RyAiYzpDOmQiIERfRkxBRyAiZUU6ZkY6RzpoSGk6IiBJX0ZMQUcgal9GTEFHIEpfRkxBRyAiS2xM bTpNOm5OT3BxcjpSczpTdFQ6dSIgVV9GTEFHICJWOnZ3Olc6eFh5Oll6Olo6IikpICE9IC0xKQor CSAgICAob3AgPSBnZXRvcHQoYXJnYywgYXJndiwgImFBYiIgQl9GTEFHICJjOkM6ZCIgRF9GTEFH ICJlRTpmRjpHOmhIaToiIElfRkxBRyBqX0ZMQUcgSl9GTEFHICJLbExtOk06bk5PcHFyOlJzOlN0 VDp1IiBVX0ZMQUcgIlY6dnc6Vzp4WHk6WXo6WjpROmc6ayIpKSAhPSAtMSkKIAkJc3dpdGNoIChv cCkgewogCiAJCWNhc2UgJ2EnOgpAQCAtODE1LDYgKzgxNiwxMCBAQAogCQkJaW5maWxlID0gb3B0 YXJnOwogCQkJYnJlYWs7CiAKKwkJY2FzZSAnZyc6CisJCQl0eHEgPSBhdG9pKG9wdGFyZyk7CisJ CQlicmVhazsKKwogCQljYXNlICdHJzoKIAkJCUdmbGFnID0gYXRvaShvcHRhcmcpOwogCQkJaWYg KEdmbGFnIDwgMCkKQEAgLTkxOSw2ICs5MjQsMTIgQEAKICNlbmRpZiAvKiBXSU4zMiAqLwogCQkJ YnJlYWs7CiAKKwkJY2FzZSAnayc6CisJCQlvdGhlciA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChv dGhlciAhPSAwIHx8IG90aGVyICE9IDEpCisJCQkJdXNhZ2UoKTsKKwkJCWJyZWFrOworCiAJCWNh c2UgJ0snOgogCQkJKytLZmxhZzsKIAkJCWJyZWFrOwpAQCAtOTY1LDYgKzk3NiwxMCBAQAogCQkJ KytzdXBwcmVzc19kZWZhdWx0X3ByaW50OwogCQkJYnJlYWs7CiAKKwkJY2FzZSAnUSc6CisJCQly eHEgPSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwogCQljYXNlICdyJzoKIAkJCVJGaWxlTmFt ZSA9IG9wdGFyZzsKIAkJCWJyZWFrOwpAQCAtMTI3NCw2ICsxMjg5LDEzIEBACiAJCQkgICAgCSAg ICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CiAJCX0KICNlbmRpZgorIAkJaWYg KHJ4cSAhPSAodWludDMyX3QpLTEpCisgCQkJcGNhcF9zZXRfcnhxX21hc2socGQsIHJ4cSk7Cisg CQlpZiAodHhxICE9ICh1aW50MzJfdCktMSkKKyAJCQlwY2FwX3NldF90eHFfbWFzayhwZCwgdHhx KTsKKyAJCWlmIChvdGhlciAhPSAodWludDMyX3QpLTEpCisgCQkJcGNhcF9zZXRfb3RoZXJfbWFz ayhwZCwgb3RoZXIpOworCiAJCXN0YXR1cyA9IHBjYXBfYWN0aXZhdGUocGQpOwogCQlpZiAoc3Rh dHVzIDwgMCkgewogCQkJLyoKQEAgLTIwNzgsNyArMjEwMCw3IEBACiAjZW5kaWYgLyogV0lOMzIg Ki8KICNlbmRpZiAvKiBIQVZFX1BDQVBfTElCX1ZFUlNJT04gKi8KIAkodm9pZClmcHJpbnRmKHN0 ZGVyciwKLSJVc2FnZTogJXMgWy1hQWJkIiBEX0ZMQUcgImVmaEgiIElfRkxBRyBKX0ZMQUcgIkts TG5OT3BxUlN0dSIgVV9GTEFHICJ2eFhdIiBCX0ZMQUdfVVNBR0UgIiBbIC1jIGNvdW50IF1cbiIs IHByb2dyYW1fbmFtZSk7CisiVXNhZ2U6ICVzIFstYUFiZCIgRF9GTEFHICJlZmdoSCIgSV9GTEFH IEpfRkxBRyAia0tsTG5OT3BxUVJTdHUiIFVfRkxBRyAidnhYXSIgQl9GTEFHX1VTQUdFICIgWyAt YyBjb3VudCBdXG4iLCBwcm9ncmFtX25hbWUpOwogCSh2b2lkKWZwcmludGYoc3RkZXJyLAogIlx0 XHRbIC1DIGZpbGVfc2l6ZSBdIFsgLUUgYWxnbzpzZWNyZXQgXSBbIC1GIGZpbGUgXSBbIC1HIHNl Y29uZHMgXVxuIik7CiAJKHZvaWQpZnByaW50ZihzdGRlcnIsCkluZGV4OiBwY2FwLWludC5oCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHBjYXAtaW50LmgJKC4uLi9oZWFkL2NvbnRyaWIvbGlicGNhcC9wY2FwLWlu dC5oKQkocmV2aXNpb24gMjUyNTA5KQorKysgcGNhcC1pbnQuaAkoLi4uL3VzZXIvc3l1dS9tcV9i cGYvY29udHJpYi9saWJwY2FwL3BjYXAtaW50LmgpCShyZXZpc2lvbiAyNTI1MDkpCkBAIC0zMzcs NiArMzM3LDkgQEAKIAl1X2ludCAqdHN0YW1wX3R5cGVfbGlzdDsKIAogCXN0cnVjdCBwY2FwX3Br dGhkciBwY2FwX2hlYWRlcjsJLyogVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBwY2FwX25leHRfZXgo KSB0byB3b3JrICovCisKKwl1aW50MzJfdCByeHFfbnVtLCB0eHFfbnVtOworCXVpbnQzMl90IG90 aGVyX21hc2s7CiB9OwogCiAvKgpJbmRleDogcGNhcC5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBjYXAuaAko Li4uL2hlYWQvY29udHJpYi9saWJwY2FwL3BjYXAvcGNhcC5oKQkocmV2aXNpb24gMjUyNTA5KQor KysgcGNhcC5oCSguLi4vdXNlci9zeXV1L21xX2JwZi9jb250cmliL2xpYnBjYXAvcGNhcC9wY2Fw LmgpCShyZXZpc2lvbiAyNTI1MDkpCkBAIC0zMzEsNiArMzMxLDEwIEBACiAjZGVmaW5lIFBDQVBf VFNUQU1QX0FEQVBURVIJCTMJLyogZGV2aWNlLXByb3ZpZGVkLCBzeW5jZWQgd2l0aCB0aGUgc3lz dGVtIGNsb2NrICovCiAjZGVmaW5lIFBDQVBfVFNUQU1QX0FEQVBURVJfVU5TWU5DRUQJNAkvKiBk ZXZpY2UtcHJvdmlkZWQsIG5vdCBzeW5jZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrICovCiAKK2lu dAlwY2FwX3NldF9yeHFfbWFzayhwY2FwX3QgKiwgdWludDMyX3QpOworaW50CXBjYXBfc2V0X3R4 cV9tYXNrKHBjYXBfdCAqLCB1aW50MzJfdCk7CitpbnQJcGNhcF9zZXRfb3RoZXJfbWFzayhwY2Fw X3QgKiwgdWludDMyX3QpOworCiBwY2FwX3QJKnBjYXBfb3Blbl9saXZlKGNvbnN0IGNoYXIgKiwg aW50LCBpbnQsIGludCwgY2hhciAqKTsKIHBjYXBfdAkqcGNhcF9vcGVuX2RlYWQoaW50LCBpbnQp OwogcGNhcF90CSpwY2FwX29wZW5fb2ZmbGluZShjb25zdCBjaGFyICosIGNoYXIgKik7CkluZGV4 OiBwY2FwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gcGNhcC5jCSguLi4vaGVhZC9jb250cmliL2xpYnBjYXAv cGNhcC5jKQkocmV2aXNpb24gMjUyNTA5KQorKysgcGNhcC5jCSguLi4vdXNlci9zeXV1L21xX2Jw Zi9jb250cmliL2xpYnBjYXAvcGNhcC5jKQkocmV2aXNpb24gMjUyNTA5KQpAQCAtNTA1LDYgKzUw NSw5IEBACiAJcC0+b3B0LnByb21pc2MgPSAwOwogCXAtPm9wdC5idWZmZXJfc2l6ZSA9IDA7CiAJ cC0+b3B0LnRzdGFtcF90eXBlID0gLTE7CS8qIGRlZmF1bHQgdG8gbm90IHNldHRpbmcgdGltZSBz dGFtcCB0eXBlICovCisgCXAtPnJ4cV9udW0gPSAodWludDMyX3QpLTE7CisgCXAtPnR4cV9udW0g PSAodWludDMyX3QpLTE7CisgCXAtPm90aGVyX21hc2sgPSAodWludDMyX3QpLTE7CiAJcmV0dXJu IChwKTsKIH0KIApAQCAtNjM3LDYgKzY0MCwzMyBAQAogCXJldHVybiAoc3RhdHVzKTsKIH0KIAor aW50CitwY2FwX3NldF9yeHFfbWFzayhwY2FwX3QgKnAsIHVpbnQzMl90IG51bSkKK3sKKwlpZiAo cGNhcF9jaGVja19hY3RpdmF0ZWQocCkpCisJCXJldHVybiBQQ0FQX0VSUk9SX0FDVElWQVRFRDsK KwlwLT5yeHFfbnVtID0gbnVtOworCXJldHVybiAwOworfQorCitpbnQKK3BjYXBfc2V0X3R4cV9t YXNrKHBjYXBfdCAqcCwgdWludDMyX3QgbnVtKQoreworCWlmIChwY2FwX2NoZWNrX2FjdGl2YXRl ZChwKSkKKwkJcmV0dXJuIFBDQVBfRVJST1JfQUNUSVZBVEVEOworCXAtPnR4cV9udW0gPSBudW07 CisJcmV0dXJuIDA7Cit9CisKK2ludAorcGNhcF9zZXRfb3RoZXJfbWFzayhwY2FwX3QgKnAsIHVp bnQzMl90IG1hc2spCit7CisJaWYgKHBjYXBfY2hlY2tfYWN0aXZhdGVkKHApKQorCQlyZXR1cm4g UENBUF9FUlJPUl9BQ1RJVkFURUQ7CisJcC0+b3RoZXJfbWFzayA9IG1hc2s7CisJcmV0dXJuIDA7 Cit9CisKIHBjYXBfdCAqCiBwY2FwX29wZW5fbGl2ZShjb25zdCBjaGFyICpzb3VyY2UsIGludCBz bmFwbGVuLCBpbnQgcHJvbWlzYywgaW50IHRvX21zLCBjaGFyICplcnJidWYpCiB7CkluZGV4OiBw Y2FwLWJwZi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHBjYXAtYnBmLmMJKC4uLi9oZWFkL2NvbnRyaWIvbGli cGNhcC9wY2FwLWJwZi5jKQkocmV2aXNpb24gMjUyNTA5KQorKysgcGNhcC1icGYuYwkoLi4uL3Vz ZXIvc3l1dS9tcV9icGYvY29udHJpYi9saWJwY2FwL3BjYXAtYnBmLmMpCShyZXZpc2lvbiAyNTI1 MDkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNlbmRpZgogI2lu Y2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx0 aW1lLmg+CiAvKgogICogPG5ldC9icGYuaD4gZGVmaW5lcyBpb2N0bHMsIGJ1dCBkb2Vzbid0IGlu Y2x1ZGUgPHN5cy9pb2Njb20uaD4uCkBAIC0yMTg3LDYgKzIxODgsNDAgQEAKIAl9CiAjZW5kaWYK IAorCWlmIChwLT5yeHFfbnVtICE9ICh1aW50MzJfdCktMSB8fCBwLT50eHFfbnVtICE9ICh1aW50 MzJfdCktMSB8fAorCQlwLT5vdGhlcl9tYXNrICE9ICh1aW50MzJfdCktMSkgeworCQlpZiAoaW9j dGwoZmQsIEJJT0NFTkFRTUFTSywgTlVMTCkgPCAwKSB7CisJCQlzbnByaW50ZihwLT5lcnJidWYs IFBDQVBfRVJSQlVGX1NJWkUsICJCSU9DRU5BUU1BU0s6ICVzIiwKKwkJCSAgICBwY2FwX3N0cmVy cm9yKGVycm5vKSk7CisJCQlzdGF0dXMgPSBQQ0FQX0VSUk9SOworCQkJZ290byBiYWQ7CisJCX0K KwkJaWYgKHAtPnJ4cV9udW0gIT0gKHVpbnQzMl90KS0xKSB7CisJCQlpZiAoaW9jdGwoZmQsIEJJ T0NTVFJYUU1BU0ssICZwLT5yeHFfbnVtKSA8IDApIHsKKwkJCQlzbnByaW50ZihwLT5lcnJidWYs IFBDQVBfRVJSQlVGX1NJWkUsICJCSU9DU1RSWFFNQVNLOiAlcyIsCisJCQkJICAgIHBjYXBfc3Ry ZXJyb3IoZXJybm8pKTsKKwkJCQlzdGF0dXMgPSBQQ0FQX0VSUk9SOworCQkJCWdvdG8gYmFkOwor CQkJfQorCQl9CisJCWlmIChwLT50eHFfbnVtICE9ICh1aW50MzJfdCktMSkgeworCQkJaWYgKGlv Y3RsKGZkLCBCSU9DU1RUWFFNQVNLLCAmcC0+dHhxX251bSkgPCAwKSB7CisJCQkJc25wcmludGYo cC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQklPQ1NUVFhRTUFTSzogJXMiLAorCQkJCSAg ICBwY2FwX3N0cmVycm9yKGVycm5vKSk7CisJCQkJc3RhdHVzID0gUENBUF9FUlJPUjsKKwkJCQln b3RvIGJhZDsKKwkJCX0KKwkJfQorCQlpZiAocC0+b3RoZXJfbWFzayAhPSAodWludDMyX3QpLTEp IHsKKwkJCWlmIChpb2N0bChmZCwgQklPQ1NUT1RIRVJNQVNLLCAmcC0+b3RoZXJfbWFzaykgPCAw KSB7CisJCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQklPQ1NUT1RI RVJRTUFTSzogJXMiLAorCQkJCSAgICBwY2FwX3N0cmVycm9yKGVycm5vKSk7CisJCQkJc3RhdHVz ID0gUENBUF9FUlJPUjsKKwkJCQlnb3RvIGJhZDsKKwkJCX0KKwkJfQorCX0KKwogCS8qCiAJICog SWYgdGhlcmUncyBubyBmaWx0ZXIgcHJvZ3JhbSBpbnN0YWxsZWQsIHRoZXJlJ3MKIAkgKiBubyBp bmRpY2F0aW9uIHRvIHRoZSBrZXJuZWwgb2Ygd2hhdCB0aGUgc25hcHNob3QKSW5kZXg6IGlmbmV0 LjkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gaWZuZXQuOQkoLi4uL2hlYWQvc2hhcmUvbWFuL21hbjkvaWZuZXQu OSkJKHJldmlzaW9uIDI1MjUwOSkKKysrIGlmbmV0LjkJKC4uLi91c2VyL3N5dXUvbXFfYnBmL3No YXJlL21hbi9tYW45L2lmbmV0LjkpCShyZXZpc2lvbiAyNTI1MDkpCkBAIC0xMTksNiArMTE5LDE0 IEBACiAuRm8gXCoobHAqaWZfcmVzb2x2ZW11bHRpXCoocnAKIC5GYSAic3RydWN0IGlmbmV0ICpp ZnAiICJzdHJ1Y3Qgc29ja2FkZHIgKipyZXRzYSIgInN0cnVjdCBzb2NrYWRkciAqYWRkciIKIC5G YworLkZ0IGludAorLkZuIFwqKGxwKmlmX2dldF9yeHF1ZXVlX2xlblwqKHJwICJzdHJ1Y3QgaWZu ZXQgKmlmcCIKKy5GdCBpbnQKKy5GbiBcKihscCppZl9nZXRfdHhxdWV1ZV9sZW5cKihycCAic3Ry dWN0IGlmbmV0ICppZnAiCisuRnQgaW50CisuRm4gXCoobHAqaWZfZ2V0X3J4cXVldWVfYWZmaW5p dHlcKihycCAic3RydWN0IGlmbmV0ICppZnAiICJpbnQgcXVlaWQiCisuRnQgaW50CisuRm4gXCoo bHAqaWZfZ2V0X3R4cXVldWVfYWZmaW5pdHlcKihycCAic3RydWN0IGlmbmV0ICppZnAiICJpbnQg cXVlaWQiCiAuU3MgInN0cnVjdCBpZmFkZHIgbWVtYmVyIGZ1bmN0aW9uIgogLkZ0IHZvaWQKIC5G byBcKihscCppZmFfcnRyZXF1ZXN0XCoocnAKQEAgLTUzNyw2ICs1NDUsMTQgQEAKIGNvcnJlc3Bv bmRzIHRvIHRoYXQgYWRkcmVzcyB3aGljaCBpcyByZXR1cm5lZCBpbgogLkZhICpyZXRzYSAuCiBS ZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorLkl0 IEZuIGlmX2dldF9yeHF1ZXVlX2xlbgorR2V0IFJYIHF1ZXVlIGxlbmd0aCwgb25seSByZXF1aXJl ZCBmb3IgbXVsdGlxdWV1ZSBzdXBwb3J0ZWQgaW50ZXJmYWNlcy4KKy5JdCBGbiBpZl9nZXRfdHhx dWV1ZV9sZW4KK0dldCBUWCBxdWV1ZSBsZW5ndGgsIG9ubHkgcmVxdWlyZWQgZm9yIG11bHRpcXVl dWUgc3VwcG9ydGVkIGludGVyZmFjZXMuCisuSXQgRm4gaWZfZ2V0X3J4cXVldWVfYWZmaW5pdHkK K0dldCBSWCBxdWV1ZSBhZmZpbml0eSwgb25seSByZXF1aXJlZCBmb3IgbXVsdGlxdWV1ZSBzdXBw b3J0ZWQgaW50ZXJmYWNlcy4KKy5JdCBGbiBpZl9nZXRfdHhxdWV1ZV9hZmZpbml0eQorR2V0IFRY IHF1ZXVlIGFmZmluaXR5LCBvbmx5IHJlcXVpcmVkIGZvciBtdWx0aXF1ZXVlIHN1cHBvcnRlZCBp bnRlcmZhY2VzLgogLkVsCiAuU3MgIkludGVyZmFjZSBGbGFncyIKIEludGVyZmFjZSBmbGFncyBh cmUgdXNlZCBmb3IgYSBudW1iZXIgb2YgZGlmZmVyZW50IHB1cnBvc2VzLgpJbmRleDogbmV0aW50 cm8uNAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBuZXRpbnRyby40CSguLi4vaGVhZC9zaGFyZS9tYW4vbWFuNC9u ZXRpbnRyby40KQkocmV2aXNpb24gMjUyNTA5KQorKysgbmV0aW50cm8uNAkoLi4uL3VzZXIvc3l1 dS9tcV9icGYvc2hhcmUvbWFuL21hbjQvbmV0aW50cm8uNCkJKHJldmlzaW9uIDI1MjUwOSkKQEAg LTIxMyw2ICsyMTMsOCBAQAogICAgICAgICBpbnQgICAgICAgaWZydV9tZWRpYTsKICAgICAgICAg Y2FkZHJfdCAgIGlmcnVfZGF0YTsKICAgICAgICAgaW50ICAgICAgIGlmcnVfY2FwWzJdOworICAg ICAgICBpbnQgICAgICAgaWZydV9xdWV1ZV9sZW5bMl07CisgICAgICAgIGludCAgICAgICBpZnJ1 X3F1ZXVlX2FmZmluaXR5WzJdOwogICAgIH0gaWZyX2lmcnU7CiAjZGVmaW5lIGlmcl9hZGRyICAg ICAgaWZyX2lmcnUuaWZydV9hZGRyICAgICAgLyogYWRkcmVzcyAqLwogI2RlZmluZSBpZnJfZHN0 YWRkciAgIGlmcl9pZnJ1LmlmcnVfZHN0YWRkciAgIC8qIG90aGVyIGVuZCBvZiBwLXRvLXAgbGlu ayAqLwpAQCAtMjI4LDYgKzIzMCwxMCBAQAogI2RlZmluZSBpZnJfcmVxY2FwICAgIGlmcl9pZnJ1 LmlmcnVfY2FwWzBdICAgIC8qIHJlcXVlc3RlZCBjYXBhYmlsaXRpZXMgKi8KICNkZWZpbmUgaWZy X2N1cmNhcCAgICBpZnJfaWZydS5pZnJ1X2NhcFsxXSAgICAvKiBjdXJyZW50IGNhcGFiaWxpdGll cyAqLwogI2RlZmluZSBpZnJfaW5kZXggICAgIGlmcl9pZnJ1LmlmcnVfaW5kZXggICAgIC8qIGlu dGVyZmFjZSBpbmRleCAqLworI2RlZmluZSBpZnJfcnhxdWV1ZV9sZW4JaWZyX2lmcnUuaWZydV9x dWV1ZV9sZW5bMF0gLyogcnhxdWV1ZSBsZW4gKi8KKyNkZWZpbmUgaWZyX3R4cXVldWVfbGVuCWlm cl9pZnJ1LmlmcnVfcXVldWVfbGVuWzFdIC8qIHR4cXVldWUgbGVuICovCisjZGVmaW5lIGlmcl9x dWV1ZV9hZmZpbml0eV9pbmRleCBpZnJfaWZydS5pZnJ1X3F1ZXVlX2FmZmluaXR5WzBdIC8qIHF1 ZXVlIGlkICovCisjZGVmaW5lIGlmcl9xdWV1ZV9hZmZpbml0eV9jcHUgaWZyX2lmcnUuaWZydV9x dWV1ZV9hZmZpbml0eVsxXSAvKiBjcHUgaWQgKi8KIH07CiAuRWQKIC5QcApAQCAtMzE5LDYgKzMy NSwxMiBAQAogZmllbGQgd2lsbCBjb250YWluIHRoZSBuZXcgaW50ZXJmYWNlIG5hbWUuCiAuSXQg RHYgU0lPQ0lGREVTVFJPWQogQXR0ZW1wdCB0byBkZXN0cm95IHRoZSBzcGVjaWZpZWQgaW50ZXJm YWNlLgorLkl0IER2IFNJT0NHSUZRTEVOCitHZXQgaW50ZXJmYWNlIFJYL1RYIHF1ZXVlIGxlbmd0 aC4KKy5JdCBEdiBTSU9DR0lGUlhRQUZGSU5JVFkKK0dldCBpbnRlcmZhY2UgUlggcXVldWUgYWZm aW5pdHkuCisuSXQgRHYgU0lPQ0dJRlRYUUFGRklOSVRZCitHZXQgaW50ZXJmYWNlIFRYIHF1ZXVl IGFmZmluaXR5LgogLkVsCiAuUHAKIFRoZXJlIGFyZSB0d28gcmVxdWVzdHMgdGhhdCBtYWtlIHVz ZSBvZiBhIG5ldyBzdHJ1Y3R1cmU6CkluZGV4OiBicGYuNAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicGYuNAko Li4uL2hlYWQvc2hhcmUvbWFuL21hbjQvYnBmLjQpCShyZXZpc2lvbiAyNTI1MDkpCisrKyBicGYu NAkoLi4uL3VzZXIvc3l1dS9tcV9icGYvc2hhcmUvbWFuL21hbjQvYnBmLjQpCShyZXZpc2lvbiAy NTI1MDkpCkBAIC02MzEsNiArNjMxLDQ2IEBACiAuVnQgYnpoX2tlcm5lbF9nZW4KIGFnYWluc3QK IC5WdCBiemhfdXNlcl9nZW4gLgorLkl0IER2IEJJT0NFTkFRTUFTSworRW5hYmxlcyBtdWx0aXF1 ZXVlIGZpbHRlciBvbiB0aGUgZGVzY3JpcHRvci4KKworLkl0IER2IEJJT0NESVNRTUFTSworRGlz YWJsZXMgbXVsdGlxdWV1ZSBmaWx0ZXIgb24gdGhlIGRlc2NyaXB0b3IuCisKKy5JdCBEdiBCSU9D U1RSWFFNQVNLCisuUHEgTGkgdWludDMyX3QKK1NldCBtYXNrIGJpdCBvbiBzcGVjaWZpZWQgUlgg cXVldWUuCisKKy5JdCBEdiBCSU9DQ1JSWFFNQVNLCisuUHEgTGkgdWludDMyX3QKK0NsZWFyIG1h c2sgYml0IG9uIHNwZWNpZmllZCBSWCBxdWV1ZS4KKworLkl0IER2IEJJT0NHVFJYUU1BU0sKKy5Q cSBMaSB1aW50MzJfdAorR2V0IG1hc2sgYml0IG9uIHNwZWNpZmllZCBSWCBxdWV1ZS4KKworLkl0 IER2IEJJT0NTVFRYUU1BU0sKKy5QcSBMaSB1aW50MzJfdAorU2V0IG1hc2sgYml0IG9uIHNwZWNp ZmllZCBUWCBxdWV1ZS4KKworLkl0IER2IEJJT0NDUlRYUU1BU0sKKy5QcSBMaSB1aW50MzJfdAor Q2xlYXIgbWFzayBiaXQgb24gc3BlY2lmaWVkIFRYIHF1ZXVlLgorCisuSXQgRHYgQklPQ0dUVFhR TUFTSworLlBxIExpIHVpbnQzMl90CitHZXQgbWFzayBiaXQgb24gc3BlY2lmaWVkIFRYIHF1ZXVl LgorCisuSXQgRHYgQklPQ1NUT1RIRVJNQVNLCitTZXQgbWFzayBiaXQgZm9yIHRoZSBwYWNrZXRz IHdoaWNoIG5vdCB0aWVkIHdpdGggYW55IHF1ZXVlcy4KKworLkl0IER2IEJJT0NDUk9USEVSTUFT SworQ2xlYXIgbWFzayBiaXQgZm9yIHRoZSBwYWNrZXRzIHdoaWNoIG5vdCB0aWVkIHdpdGggYW55 IHF1ZXVlcy4KKworLkl0IER2IEJJT0NHVE9USEVSTUFTSworLlBxIExpIHVpbnQzMl90CitHZXQg bWFzayBiaXQgZm9yIHRoZSBwYWNrZXRzIHdoaWNoIG5vdCB0aWVkIHdpdGggYW55IHF1ZXVlcy4K KwogLkVsCiAuU2ggQlBGIEhFQURFUgogT25lIG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBp cyBwcmVwZW5kZWQgdG8gZWFjaCBwYWNrZXQgcmV0dXJuZWQgYnkKQEAgLTEwMzcsNiArMTA3Nywy NCBAQAogCUJQRl9TVE1UKEJQRl9SRVQrQlBGX0ssIDApLAogfTsKIC5FZAorLlNoIE1VTFRJUVVF VUUgU1VQUE9SVAorTXVsdGlxdWV1ZSBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0IGZ1bmN0aW9u IHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIAorbXVsdGl0aHJlYWRlZCBwYWNrZXQgcHJvY2Vzc2lu ZyB1c2luZyBicGYuCisKK05vcm1hbCBicGYgY2FuIHJlY2VpdmUgcGFja2V0cyBmcm9tIHNwZWNp ZmllZCBpbnRlcmZhY2UsIG11bHRpcXVldWUgc3VwcG9ydCAKK2Z1bmN0aW9uIGNhbiByZWNlaXZl IHBhY2tldHMgZnJvbSBzcGVjaWZpZWQgaGFyZHdhcmUgcXVldWUuCisKK1RoaXMgZGlzdHJpYnV0 ZXMgYnBmIHdvcmtsb2FkIG9uIG11bHRpcGxlIHRocmVhZHMsIGFsc28gcmVkdWNlcyBsb2NrIAor Y29udGVudGlvbiBvbiBicGYuCisKK1RvIG1ha2UgeW91ciBwcm9ncmFtIG11bHRpdGhyZWFkZWQs IHlvdSdsbCBuZWVkIHRvIG9wZW4gYnBmIGRlc2NyaXB0b3Igb24gZWFjaCAKK3RocmVhZCwgZW5h YmxlIG11bHRpcXVldWUgc3VwcG9ydCBieSBCSU9DRU5BUU1BU0sgaW9jdGwsIGFuZCBzZXQgcXVl dWUgbWFzayBieSAKK0JJT0NTVFJYUU1BU0sgLyBCSU9DU1RUWFFNQVNLIC8gQklPQ1NUT1RIRVJN QVNLIGlvY3Rscy4KKworUXVldWUgbGVuZ3RoIGFuZCBxdWV1ZSBhZmZpbml0eSBpbmZvcm1hdGlv biBtYXkgdXNlZnVsIHRvIG9wdGltaXplIHNldHRpbmcgCitxdWV1ZSBtYXNrIG9uIGJwZiBkZXNj cmlwdG9yLCBzZWUKKy5YciBuZXRpbnRybyA0IC4KKwogLlNoIFNFRSBBTFNPCiAuWHIgdGNwZHVt cCAxICwKIC5YciBpb2N0bCAyICwKSW5kZXg6IGlmX214Z2UuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpZl9t eGdlLmMJKC4uLi9oZWFkL3N5cy9kZXYvbXhnZS9pZl9teGdlLmMpCShyZXZpc2lvbiAyNTI1MDkp CisrKyBpZl9teGdlLmMJKC4uLi91c2VyL3N5dXUvbXFfYnBmL3N5cy9kZXYvbXhnZS9pZl9teGdl LmMpCShyZXZpc2lvbiAyNTI1MDkpCkBAIC0xMjAsNiArMTIwLDExIEBACiBzdGF0aWMgaW50IG14 Z2Vfc2h1dGRvd24oZGV2aWNlX3QgZGV2KTsKIHN0YXRpYyB2b2lkIG14Z2VfaW50cih2b2lkICph cmcpOwogCitzdGF0aWMgaW50IG14Z2VfZ2V0X3J4cXVldWVfbGVuKHN0cnVjdCBpZm5ldCAqKTsK K3N0YXRpYyBpbnQgbXhnZV9nZXRfdHhxdWV1ZV9sZW4oc3RydWN0IGlmbmV0ICopOworc3RhdGlj IGludCBteGdlX2dldF9yeHF1ZXVlX2FmZmluaXR5KHN0cnVjdCBpZm5ldCAqLCBpbnQpOworc3Rh dGljIGludCBteGdlX2dldF90eHF1ZXVlX2FmZmluaXR5KHN0cnVjdCBpZm5ldCAqLCBpbnQpOwor CiBzdGF0aWMgZGV2aWNlX21ldGhvZF90IG14Z2VfbWV0aG9kc1tdID0KIHsKICAgLyogRGV2aWNl IGludGVyZmFjZSAqLwpAQCAtMjI3Miw2ICsyMjc3LDkgQEAKIAkJaWYgKG0gPT0gTlVMTCkgewog CQkJcmV0dXJuOwogCQl9CisJCW0tPm1fcGt0aGRyLnJ4cXVldWUgPSAodWludDMyX3QpLTE7CisJ CW0tPm1fcGt0aGRyLnR4cXVldWUgPSAoc3MgLSBzYy0+c3MpOworCiAJCS8qIGxldCBCUEYgc2Vl IGl0ICovCiAJCUJQRl9NVEFQKGlmcCwgbSk7CiAKQEAgLTIzMDYsNiArMjMxNCw5IEBACiAKIAlp ZiAoIWRyYnJfbmVlZHNfZW5xdWV1ZShpZnAsIHR4LT5icikgJiYKIAkgICAgKCh0eC0+bWFzayAt ICh0eC0+cmVxIC0gdHgtPmRvbmUpKSA+IHR4LT5tYXhfZGVzYykpIHsKKwkJbS0+bV9wa3RoZHIu cnhxdWV1ZSA9ICh1aW50MzJfdCktMTsKKwkJbS0+bV9wa3RoZHIudHhxdWV1ZSA9IChzcyAtIHNj LT5zcyk7CisKIAkJLyogbGV0IEJQRiBzZWUgaXQgKi8KIAkJQlBGX01UQVAoaWZwLCBtKTsKIAkJ LyogZ2l2ZSBpdCB0byB0aGUgbmljICovCkBAIC0yNzE5LDYgKzI3MzAsOCBAQAogCWlmIChzYy0+ bnVtX3NsaWNlcyA+IDEpIHsKIAkJbS0+bV9wa3RoZHIuZmxvd2lkID0gKHNzIC0gc2MtPnNzKTsK IAkJbS0+bV9mbGFncyB8PSBNX0ZMT1dJRDsKKwkJbS0+bV9wa3RoZHIucnhxdWV1ZSA9IChzcyAt IHNjLT5zcyk7CisJCW0tPm1fcGt0aGRyLnR4cXVldWUgPSAodWludDMyX3QpLTE7CiAJfQogCS8q IHBhc3MgdGhlIGZyYW1lIHVwIHRoZSBzdGFjayAqLwogCSgqaWZwLT5pZl9pbnB1dCkoaWZwLCBt KTsKQEAgLTQ4OTYsNiArNDkwOSw3IEBACiAjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElO RVQ2KQogCWlmcC0+aWZfY2FwYWJpbGl0aWVzIHw9IElGQ0FQX0xSTzsKICNlbmRpZgorCWlmcC0+ aWZfY2FwYWJpbGl0aWVzIHw9IElGQ0FQX01VTFRJUVVFVUU7CiAKICNpZmRlZiBNWEdFX05FV19W TEFOX0FQSQogCWlmcC0+aWZfY2FwYWJpbGl0aWVzIHw9IElGQ0FQX1ZMQU5fSFdUQUdHSU5HIHwg SUZDQVBfVkxBTl9IV0NTVU07CkBAIC00OTI5LDYgKzQ5NDMsMTEgQEAKICAgICAgICAgaWZwLT5p Zl9mbGFncyA9IElGRl9CUk9BRENBU1QgfCBJRkZfU0lNUExFWCB8IElGRl9NVUxUSUNBU1Q7CiAg ICAgICAgIGlmcC0+aWZfaW9jdGwgPSBteGdlX2lvY3RsOwogICAgICAgICBpZnAtPmlmX3N0YXJ0 ID0gbXhnZV9zdGFydDsKKwlpZnAtPmlmX2dldF9yeHF1ZXVlX2xlbiA9IG14Z2VfZ2V0X3J4cXVl dWVfbGVuOworCWlmcC0+aWZfZ2V0X3R4cXVldWVfbGVuID0gbXhnZV9nZXRfdHhxdWV1ZV9sZW47 CisJaWZwLT5pZl9nZXRfcnhxdWV1ZV9hZmZpbml0eSA9IG14Z2VfZ2V0X3J4cXVldWVfYWZmaW5p dHk7CisJaWZwLT5pZl9nZXRfdHhxdWV1ZV9hZmZpbml0eSA9IG14Z2VfZ2V0X3R4cXVldWVfYWZm aW5pdHk7CisKIAkvKiBJbml0aWFsaXNlIHRoZSBpZm1lZGlhIHN0cnVjdHVyZSAqLwogCWlmbWVk aWFfaW5pdCgmc2MtPm1lZGlhLCAwLCBteGdlX21lZGlhX2NoYW5nZSwgCiAJCSAgICAgbXhnZV9t ZWRpYV9zdGF0dXMpOwpAQCAtNTAyNSw2ICs1MDQ0LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKKwor c3RhdGljIGludAorbXhnZV9nZXRfcnhxdWV1ZV9sZW4oc3RydWN0IGlmbmV0ICppZnApCit7CisJ bXhnZV9zb2Z0Y190ICpzYyA9IGlmcC0+aWZfc29mdGM7CisJcmV0dXJuIChzYy0+bnVtX3NsaWNl cyk7Cit9CisKK3N0YXRpYyBpbnQKK214Z2VfZ2V0X3R4cXVldWVfbGVuKHN0cnVjdCBpZm5ldCAq aWZwKQoreworCW14Z2Vfc29mdGNfdCAqc2MgPSBpZnAtPmlmX3NvZnRjOworCXJldHVybiAoc2Mt Pm51bV9zbGljZXMpOworfQorCitzdGF0aWMgaW50CitteGdlX2dldF9yeHF1ZXVlX2FmZmluaXR5 KHN0cnVjdCBpZm5ldCAqaWZwLCBpbnQgcXVlaWQpCit7CisJcmV0dXJuIChxdWVpZCk7Cit9CisK K3N0YXRpYyBpbnQKK214Z2VfZ2V0X3R4cXVldWVfYWZmaW5pdHkoc3RydWN0IGlmbmV0ICppZnAs IGludCBxdWVpZCkKK3sKKwlyZXR1cm4gKHF1ZWlkKTsKK30KKwogLyoKICAgVGhpcyBmaWxlIHVz ZXMgTXlyaTEwR0UgZHJpdmVyIGluZGVudGF0aW9uLgogCkluZGV4OiBpeGdiZS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGl4Z2JlLmMJKC4uLi9oZWFkL3N5cy9kZXYvaXhnYmUvaXhnYmUuYykJKHJldmlzaW9u IDI1MjUwOSkKKysrIGl4Z2JlLmMJKC4uLi91c2VyL3N5dXUvbXFfYnBmL3N5cy9kZXYvaXhnYmUv aXhnYmUuYykJKHJldmlzaW9uIDI1MjUwOSkKQEAgLTIxMCw2ICsyMTAsMTIgQEAKIC8qIE1pc3Np bmcgc2hhcmVkIGNvZGUgcHJvdG90eXBlICovCiBleHRlcm4gdm9pZCBpeGdiZV9zdG9wX21hY19s aW5rX29uX2QzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOwogCitzdGF0aWMgaW50CWl4Z2Jl X2dldF9yeHF1ZXVlX2xlbihzdHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMgaW50CWl4Z2JlX2dldF90 eHF1ZXVlX2xlbihzdHJ1Y3QgaWZuZXQgKik7CitzdGF0aWMgaW50CWl4Z2JlX2dldF9yeHF1ZXVl X2FmZmluaXR5KHN0cnVjdCBpZm5ldCAqLCBpbnQpOworc3RhdGljIGludAlpeGdiZV9nZXRfdHhx dWV1ZV9hZmZpbml0eShzdHJ1Y3QgaWZuZXQgKiwgaW50KTsKKworCiAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KiAgRnJlZUJTRCBEZXZpY2UgSW50ZXJmYWNlIEVudHJ5IFBvaW50cwogICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K QEAgLTc1Myw2ICs3NTksMTAgQEAKIAkJCQlJRlFfRFJWX1BSRVBFTkQoJmlmcC0+aWZfc25kLCBt X2hlYWQpOwogCQkJYnJlYWs7CiAJCX0KKworCQltX2hlYWQtPm1fcGt0aGRyLnJ4cXVldWUgPSAo dWludDMyX3QpLTE7CisJCW1faGVhZC0+bV9wa3RoZHIudHhxdWV1ZSA9IHR4ci0+bWU7CisKIAkJ LyogU2VuZCBhIGNvcHkgb2YgdGhlIGZyYW1lIHRvIHRoZSBCUEYgbGlzdGVuZXIgKi8KIAkJRVRI RVJfQlBGX01UQVAoaWZwLCBtX2hlYWQpOwogCkBAIC04NTEsNiArODYxLDEwIEBACiAJCWRyYnJf YWR2YW5jZShpZnAsIHR4ci0+YnIpOwogI2VuZGlmCiAJCWVucXVldWVkKys7CisgCisgCQluZXh0 LT5tX3BrdGhkci5yeHF1ZXVlID0gKHVpbnQzMl90KS0xOworIAkJbmV4dC0+bV9wa3RoZHIudHhx dWV1ZSA9IHR4ci0+bWU7CisKIAkJLyogU2VuZCBhIGNvcHkgb2YgdGhlIGZyYW1lIHRvIHRoZSBC UEYgbGlzdGVuZXIgKi8KIAkJRVRIRVJfQlBGX01UQVAoaWZwLCBuZXh0KTsKIAkJaWYgKChpZnAt PmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgPT0gMCkKQEAgLTI2MTgsNiArMjYzMiwx MCBAQAogCWlmcC0+aWZfc29mdGMgPSBhZGFwdGVyOwogCWlmcC0+aWZfZmxhZ3MgPSBJRkZfQlJP QURDQVNUIHwgSUZGX1NJTVBMRVggfCBJRkZfTVVMVElDQVNUOwogCWlmcC0+aWZfaW9jdGwgPSBp eGdiZV9pb2N0bDsKKyAJaWZwLT5pZl9nZXRfcnhxdWV1ZV9sZW4gPSBpeGdiZV9nZXRfcnhxdWV1 ZV9sZW47CisgCWlmcC0+aWZfZ2V0X3R4cXVldWVfbGVuID0gaXhnYmVfZ2V0X3R4cXVldWVfbGVu OworIAlpZnAtPmlmX2dldF9yeHF1ZXVlX2FmZmluaXR5ID0gaXhnYmVfZ2V0X3J4cXVldWVfYWZm aW5pdHk7CisgCWlmcC0+aWZfZ2V0X3R4cXVldWVfYWZmaW5pdHkgPSBpeGdiZV9nZXRfdHhxdWV1 ZV9hZmZpbml0eTsKICNpZm5kZWYgSVhHQkVfTEVHQUNZX1RYCiAJaWZwLT5pZl90cmFuc21pdCA9 IGl4Z2JlX21xX3N0YXJ0OwogCWlmcC0+aWZfcWZsdXNoID0gaXhnYmVfcWZsdXNoOwpAQCAtMjY0 NCw2ICsyNjYyLDcgQEAKIAlpZnAtPmlmX2NhcGFiaWxpdGllcyB8PSBJRkNBUF9WTEFOX0hXVEFH R0lORwogCQkJICAgICB8ICBJRkNBUF9WTEFOX0hXVFNPCiAJCQkgICAgIHwgIElGQ0FQX1ZMQU5f TVRVOworCWlmcC0+aWZfY2FwYWJpbGl0aWVzIHw9IElGQ0FQX01VTFRJUVVFVUU7CiAJaWZwLT5p Zl9jYXBlbmFibGUgPSBpZnAtPmlmX2NhcGFiaWxpdGllczsKIAogCS8qCkBAIC00NTQ3LDYgKzQ1 NjYsOCBAQAogCQkJc2VuZG1wLT5tX3BrdGhkci5mbG93aWQgPSBxdWUtPm1zaXg7CiAJCQlzZW5k bXAtPm1fZmxhZ3MgfD0gTV9GTE9XSUQ7CiAjZW5kaWYKKwkJCXNlbmRtcC0+bV9wa3RoZHIucnhx dWV1ZSA9IHF1ZS0+bXNpeDsKKwkJCXNlbmRtcC0+bV9wa3RoZHIudHhxdWV1ZSA9ICh1aW50MzJf dCktMTsKIAkJfQogbmV4dF9kZXNjOgogCQlidXNfZG1hbWFwX3N5bmMocnhyLT5yeGRtYS5kbWFf dGFnLCByeHItPnJ4ZG1hLmRtYV9tYXAsCkBAIC01NzQzLDYgKzU3NjQsMzIgQEAKIAlyZXR1cm4g KGVycm9yKTsKIH0KIAorc3RhdGljIGludAoraXhnYmVfZ2V0X3J4cXVldWVfbGVuKHN0cnVjdCBp Zm5ldCAqaWZwKQoreworCXN0cnVjdCBhZGFwdGVyCSphZGFwdGVyID0gaWZwLT5pZl9zb2Z0YzsK KwlyZXR1cm4gKGFkYXB0ZXItPm51bV9xdWV1ZXMpOworfQorCitzdGF0aWMgaW50CitpeGdiZV9n ZXRfdHhxdWV1ZV9sZW4oc3RydWN0IGlmbmV0ICppZnApCit7CisJc3RydWN0IGFkYXB0ZXIJKmFk YXB0ZXIgPSBpZnAtPmlmX3NvZnRjOworCXJldHVybiAoYWRhcHRlci0+bnVtX3F1ZXVlcyk7Cit9 CisKK3N0YXRpYyBpbnQKK2l4Z2JlX2dldF9yeHF1ZXVlX2FmZmluaXR5KHN0cnVjdCBpZm5ldCAq aWZwLCBpbnQgcXVlaWQpCit7CisJcmV0dXJuIChxdWVpZCk7Cit9CisKK3N0YXRpYyBpbnQKK2l4 Z2JlX2dldF90eHF1ZXVlX2FmZmluaXR5KHN0cnVjdCBpZm5ldCAqaWZwLCBpbnQgcXVlaWQpCit7 CisJcmV0dXJuIChxdWVpZCk7Cit9CisKIC8qCiAqKiBUaGVybWFsIFNodXRkb3duIFRyaWdnZXIK ICoqICAgLSBjYXVzZSBhIFRoZXJtYWwgT3ZlcnRlbXAgSVJRCkluZGV4OiBpZl9pZ2IuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBpZl9pZ2IuYwkoLi4uL2hlYWQvc3lzL2Rldi9lMTAwMC9pZl9pZ2IuYykJKHJl dmlzaW9uIDI1MjUwOSkKKysrIGlmX2lnYi5jCSguLi4vdXNlci9zeXV1L21xX2JwZi9zeXMvZGV2 L2UxMDAwL2lmX2lnYi5jKQkocmV2aXNpb24gMjUyNTA5KQpAQCAtMjc4LDYgKzI3OCwxMSBAQAog c3RhdGljIGludAlpZ2Jfc3lzY3RsX2RtYWMoU1lTQ1RMX0hBTkRMRVJfQVJHUyk7CiBzdGF0aWMg aW50CWlnYl9zeXNjdGxfZWVlKFNZU0NUTF9IQU5ETEVSX0FSR1MpOwogCitzdGF0aWMgaW50CWln Yl9nZXRfcnhxdWV1ZV9sZW4oc3RydWN0IGlmbmV0ICopOworc3RhdGljIGludAlpZ2JfZ2V0X3R4 cXVldWVfbGVuKHN0cnVjdCBpZm5ldCAqKTsKK3N0YXRpYyBpbnQJaWdiX2dldF9yeHF1ZXVlX2Fm ZmluaXR5KHN0cnVjdCBpZm5ldCAqLCBpbnQpOworc3RhdGljIGludAlpZ2JfZ2V0X3R4cXVldWVf YWZmaW5pdHkoc3RydWN0IGlmbmV0ICosIGludCk7CisKICNpZmRlZiBERVZJQ0VfUE9MTElORwog c3RhdGljIHBvbGxfaGFuZGxlcl90IGlnYl9wb2xsOwogI2VuZGlmIC8qIFBPTExJTkcgKi8KQEAg LTkxOSw2ICs5MjQsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQltX2hlYWQtPm1fcGt0aGRyLnJ4 cXVldWUgPSAodWludDMyX3QpLTE7CisJCW1faGVhZC0+bV9wa3RoZHIudHhxdWV1ZSA9IHR4ci0+ bWU7CisKIAkJLyogU2VuZCBhIGNvcHkgb2YgdGhlIGZyYW1lIHRvIHRoZSBCUEYgbGlzdGVuZXIg Ki8KIAkJRVRIRVJfQlBGX01UQVAoaWZwLCBtX2hlYWQpOwogCkBAIC0xMDEyLDYgKzEwMjAsOCBA QAogCQlpZnAtPmlmX29ieXRlcyArPSBuZXh0LT5tX3BrdGhkci5sZW47CiAJCWlmIChuZXh0LT5t X2ZsYWdzICYgTV9NQ0FTVCkKIAkJCWlmcC0+aWZfb21jYXN0cysrOworCQluZXh0LT5tX3BrdGhk ci5yeHF1ZXVlID0gKHVpbnQzMl90KS0xOworCQluZXh0LT5tX3BrdGhkci50eHF1ZXVlID0gdHhy LT5tZTsKIAkJRVRIRVJfQlBGX01UQVAoaWZwLCBuZXh0KTsKIAkJaWYgKChpZnAtPmlmX2Rydl9m bGFncyAmIElGRl9EUlZfUlVOTklORykgPT0gMCkKIAkJCWJyZWFrOwpAQCAtMzExMiw2ICszMTIy LDEwIEBACiAJaWZwLT5pZl9zb2Z0YyA9IGFkYXB0ZXI7CiAJaWZwLT5pZl9mbGFncyA9IElGRl9C Uk9BRENBU1QgfCBJRkZfU0lNUExFWCB8IElGRl9NVUxUSUNBU1Q7CiAJaWZwLT5pZl9pb2N0bCA9 IGlnYl9pb2N0bDsKKyAJaWZwLT5pZl9nZXRfcnhxdWV1ZV9sZW4gPSBpZ2JfZ2V0X3J4cXVldWVf bGVuOworIAlpZnAtPmlmX2dldF90eHF1ZXVlX2xlbiA9IGlnYl9nZXRfdHhxdWV1ZV9sZW47Cisg CWlmcC0+aWZfZ2V0X3J4cXVldWVfYWZmaW5pdHkgPSBpZ2JfZ2V0X3J4cXVldWVfYWZmaW5pdHk7 CisgCWlmcC0+aWZfZ2V0X3R4cXVldWVfYWZmaW5pdHkgPSBpZ2JfZ2V0X3R4cXVldWVfYWZmaW5p dHk7CiAjaWZuZGVmIElHQl9MRUdBQ1lfVFgKIAlpZnAtPmlmX3RyYW5zbWl0ID0gaWdiX21xX3N0 YXJ0OwogCWlmcC0+aWZfcWZsdXNoID0gaWdiX3FmbHVzaDsKQEAgLTMxNTksNiArMzE3Myw3IEBA CiAJKiogZW5hYmxlIHRoaXMgYW5kIGdldCBmdWxsIGhhcmR3YXJlIHRhZyBmaWx0ZXJpbmcuCiAJ Ki8KIAlpZnAtPmlmX2NhcGFiaWxpdGllcyB8PSBJRkNBUF9WTEFOX0hXRklMVEVSOworCWlmcC0+ aWZfY2FwYWJpbGl0aWVzIHw9IElGQ0FQX01VTFRJUVVFVUU7CiAKIAkvKgogCSAqIFNwZWNpZnkg dGhlIG1lZGlhIHR5cGVzIHN1cHBvcnRlZCBieSB0aGlzIGFkYXB0ZXIgYW5kIHJlZ2lzdGVyCkBA IC00ODgzLDYgKzQ4OTgsOSBAQAogCQkJcnhyLT5mbXAtPm1fcGt0aGRyLmZsb3dpZCA9IHF1ZS0+ bXNpeDsKIAkJCXJ4ci0+Zm1wLT5tX2ZsYWdzIHw9IE1fRkxPV0lEOwogI2VuZGlmCisJCQlyeHIt PmZtcC0+bV9wa3RoZHIucnhxdWV1ZSA9IHF1ZS0+bXNpeDsKKwkJCXJ4ci0+Zm1wLT5tX3BrdGhk ci50eHF1ZXVlID0gKHVpbnQzMl90KS0xOworCiAJCQlzZW5kbXAgPSByeHItPmZtcDsKIAkJCS8q IE1ha2Ugc3VyZSB0byBzZXQgTV9QS1RIRFIuICovCiAJCQlzZW5kbXAtPm1fZmxhZ3MgfD0gTV9Q S1RIRFI7CkBAIC02MDQ3LDMgKzYwNjUsMjkgQEAKIAlJR0JfQ09SRV9VTkxPQ0soYWRhcHRlcik7 CiAJcmV0dXJuICgwKTsKIH0KKworc3RhdGljIGludAoraWdiX2dldF9yeHF1ZXVlX2xlbihzdHJ1 Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgYWRhcHRlcgkqYWRhcHRlciA9IGlmcC0+aWZfc29m dGM7CisJcmV0dXJuIChhZGFwdGVyLT5udW1fcXVldWVzKTsKK30KKworc3RhdGljIGludAoraWdi X2dldF90eHF1ZXVlX2xlbihzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgYWRhcHRlcgkq YWRhcHRlciA9IGlmcC0+aWZfc29mdGM7CisJcmV0dXJuIChhZGFwdGVyLT5udW1fcXVldWVzKTsK K30KKworc3RhdGljIGludAoraWdiX2dldF9yeHF1ZXVlX2FmZmluaXR5KHN0cnVjdCBpZm5ldCAq aWZwLCBpbnQgcXVlaWQpCit7CisJcmV0dXJuIChxdWVpZCk7Cit9CisKK3N0YXRpYyBpbnQKK2ln Yl9nZXRfdHhxdWV1ZV9hZmZpbml0eShzdHJ1Y3QgaWZuZXQgKmlmcCwgaW50IHF1ZWlkKQorewor CXJldHVybiAocXVlaWQpOworfQpJbmRleDogYnBmZGVzYy5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJwZmRl c2MuaAkoLi4uL2hlYWQvc3lzL25ldC9icGZkZXNjLmgpCShyZXZpc2lvbiAyNTI1MDkpCisrKyBi cGZkZXNjLmgJKC4uLi91c2VyL3N5dXUvbXFfYnBmL3N5cy9uZXQvYnBmZGVzYy5oKQkocmV2aXNp b24gMjUyNTA5KQpAQCAtNDUsNiArNDUsMjAgQEAKICNpbmNsdWRlIDxzeXMvY29uZi5oPgogI2lu Y2x1ZGUgPG5ldC9pZi5oPgogCitzdHJ1Y3QgYnBmX3FtYXNrIHsKKwlib29sZWFuX3QJcW1fZW5h YmxlZDsKKwlib29sZWFuX3QgKglxbV9yeHFfbWFzazsKKwlib29sZWFuX3QgKglxbV90eHFfbWFz azsKKwlib29sZWFuX3QJcW1fb3RoZXJfbWFzazsKKwlzdHJ1Y3Qgcndsb2NrCXFtX2xvY2s7Cit9 OworCisjZGVmaW5lIEJQRlFfTE9DS19ERVNUUk9ZKHFtKQkJcndfZGVzdHJveSgmKHFtKS0+cW1f bG9jaykKKyNkZWZpbmUgQlBGUV9STE9DSyhxbSkJCQlyd19ybG9jaygmKHFtKS0+cW1fbG9jaykK KyNkZWZpbmUgQlBGUV9SVU5MT0NLKHFtKQkJcndfcnVubG9jaygmKHFtKS0+cW1fbG9jaykKKyNk ZWZpbmUgQlBGUV9XTE9DSyhxbSkJCQlyd193bG9jaygmKHFtKS0+cW1fbG9jaykKKyNkZWZpbmUg QlBGUV9XVU5MT0NLKHFtKQkJcndfd3VubG9jaygmKHFtKS0+cW1fbG9jaykKKwogLyoKICAqIERl c2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb3BlbiBicGYgZmlsZS4KICAqLwpAQCAtMTAx LDYgKzExNSw3IEBACiAJdV9pbnQ2NF90CWJkX3dkY291bnQ7CS8qIG51bWJlciBvZiBwYWNrZXRz IGRyb3BwZWQgZHVyaW5nIGEgd3JpdGUgKi8KIAl1X2ludDY0X3QJYmRfemNvcHk7CS8qIG51bWJl ciBvZiB6ZXJvIGNvcHkgb3BlcmF0aW9ucyAqLwogCXVfY2hhcgkJYmRfY29tcGF0MzI7CS8qIDMy LWJpdCBzdHJlYW0gb24gTFA2NCBzeXN0ZW0gKi8KKwlzdHJ1Y3QgYnBmX3FtYXNrIGJkX3FtYXNr OwogfTsKIAogLyogVmFsdWVzIGZvciBiZF9zdGF0ZSAqLwpJbmRleDogaWZfdmFyLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gaWZfdmFyLmgJKC4uLi9oZWFkL3N5cy9uZXQvaWZfdmFyLmgpCShyZXZpc2lvbiAy NTI1MDkpCisrKyBpZl92YXIuaAkoLi4uL3VzZXIvc3l1dS9tcV9icGYvc3lzL25ldC9pZl92YXIu aCkJKHJldmlzaW9uIDI1MjUwOSkKQEAgLTE3Niw2ICsxNzYsMTUgQEAKIAkJKHN0cnVjdCBpZm5l dCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKIAl2b2lkCSgqaWZfcmVhc3NpZ24pCQkvKiByZWFzc2lnbiB0 byB2bmV0IHJvdXRpbmUgKi8KIAkJKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3Qgdm5ldCAqLCBjaGFy ICopOworCWludAkoKmlmX2dldF9yeHF1ZXVlX2xlbikKKwkJKHN0cnVjdCBpZm5ldCAqKTsKKwlp bnQJKCppZl9nZXRfdHhxdWV1ZV9sZW4pCisJCShzdHJ1Y3QgaWZuZXQgKik7CisJaW50CSgqaWZf Z2V0X3J4cXVldWVfYWZmaW5pdHkpCisJCShzdHJ1Y3QgaWZuZXQgKiwgaW50KTsKKwlpbnQJKCpp Zl9nZXRfdHhxdWV1ZV9hZmZpbml0eSkKKwkJKHN0cnVjdCBpZm5ldCAqLCBpbnQpOworCiAJc3Ry dWN0CXZuZXQgKmlmX2hvbWVfdm5ldDsJLyogd2hlcmUgdGhpcyBpZm5ldCBvcmlnaW5hdGVzIGZy b20gKi8KIAlzdHJ1Y3QJaWZhZGRyCSppZl9hZGRyOwkvKiBwb2ludGVyIHRvIGxpbmstbGV2ZWwg YWRkcmVzcyAqLwogCXZvaWQJKmlmX2xsc29mdGM7CQkvKiBsaW5rIGxheWVyIHNvZnRjICovCklu ZGV4OiBicGYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicGYuaAkoLi4uL2hlYWQvc3lzL25ldC9icGYuaCkJ KHJldmlzaW9uIDI1MjUwOSkKKysrIGJwZi5oCSguLi4vdXNlci9zeXV1L21xX2JwZi9zeXMvbmV0 L2JwZi5oKQkocmV2aXNpb24gMjUyNTA5KQpAQCAtMTQ3LDYgKzE0NywxNyBAQAogI2RlZmluZQlC SU9DU0VURk5SCV9JT1coJ0InLCAxMzAsIHN0cnVjdCBicGZfcHJvZ3JhbSkKICNkZWZpbmUJQklP Q0dUU1RBTVAJX0lPUignQicsIDEzMSwgdV9pbnQpCiAjZGVmaW5lCUJJT0NTVFNUQU1QCV9JT1co J0InLCAxMzIsIHVfaW50KQorI2RlZmluZQlCSU9DRU5BUU1BU0sJX0lPKCdCJywgMTMzKQorI2Rl ZmluZQlCSU9DRElTUU1BU0sJX0lPKCdCJywgMTM0KQorI2RlZmluZQlCSU9DU1RSWFFNQVNLCV9J T1dSKCdCJywgMTM1LCB1aW50MzJfdCkKKyNkZWZpbmUJQklPQ0NSUlhRTUFTSwlfSU9XUignQics IDEzNiwgdWludDMyX3QpCisjZGVmaW5lCUJJT0NHVFJYUU1BU0sJX0lPUignQicsIDEzNywgdWlu dDMyX3QpCisjZGVmaW5lCUJJT0NTVFRYUU1BU0sJX0lPV1IoJ0InLCAxMzgsIHVpbnQzMl90KQor I2RlZmluZQlCSU9DQ1JUWFFNQVNLCV9JT1dSKCdCJywgMTM5LCB1aW50MzJfdCkKKyNkZWZpbmUJ QklPQ0dUVFhRTUFTSwlfSU9SKCdCJywgMTQwLCB1aW50MzJfdCkKKyNkZWZpbmUJQklPQ1NUT1RI RVJNQVNLCV9JTygnQicsIDE0MSkKKyNkZWZpbmUJQklPQ0NST1RIRVJNQVNLCV9JTygnQicsIDE0 MikKKyNkZWZpbmUJQklPQ0dUT1RIRVJNQVNLCV9JT1IoJ0InLCAxNDMsIHVpbnQzMl90KQogCiAv KiBPYnNvbGV0ZSAqLwogI2RlZmluZQlCSU9DR1NFRVNFTlQJQklPQ0dESVJFQ1RJT04KSW5kZXg6 IGlmLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gaWYuYwkoLi4uL2hlYWQvc3lzL25ldC9pZi5jKQkocmV2aXNp b24gMjUyNTA5KQorKysgaWYuYwkoLi4uL3VzZXIvc3l1dS9tcV9icGYvc3lzL25ldC9pZi5jKQko cmV2aXNpb24gMjUyNTA5KQpAQCAtMjQyOCw2ICsyNDI4LDMxIEBACiAJCWJyZWFrOwogCX0KIAor CWNhc2UgU0lPQ0dJRlFMRU46CisJCWlmICghKGlmcC0+aWZfY2FwYWJpbGl0aWVzICYgSUZDQVBf TVVMVElRVUVVRSkpCisJCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCQlLQVNTRVJUKGlmcC0+aWZf Z2V0X3J4cXVldWVfbGVuLCAoImlmX2dldF9yeHF1ZXVlX2xlbiBub3Qgc2V0IikpOworCQlLQVNT RVJUKGlmcC0+aWZfZ2V0X3R4cXVldWVfbGVuLCAoImlmX2dldF90eHF1ZXVlX2xlbiBub3Qgc2V0 IikpOworCQlpZnItPmlmcl9yeHF1ZXVlX2xlbiA9IGlmcC0+aWZfZ2V0X3J4cXVldWVfbGVuKGlm cCk7CisJCWlmci0+aWZyX3R4cXVldWVfbGVuID0gaWZwLT5pZl9nZXRfdHhxdWV1ZV9sZW4oaWZw KTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NHSUZSWFFBRkZJTklUWToKKwkJaWYgKCEoaWZwLT5p Zl9jYXBhYmlsaXRpZXMgJiBJRkNBUF9NVUxUSVFVRVVFKSkKKwkJCXJldHVybiAoRU9QTk9UU1VQ UCk7CisJCUtBU1NFUlQoaWZwLT5pZl9nZXRfcnhxdWV1ZV9hZmZpbml0eSwgKCJpZl9nZXRfcnhx dWV1ZV9hZmZpbml0eSBub3Qgc2V0IikpOworCQlpZnItPmlmcl9xdWV1ZV9hZmZpbml0eV9jcHUg PQorCQkJaWZwLT5pZl9nZXRfcnhxdWV1ZV9hZmZpbml0eShpZnAsIGlmci0+aWZyX3F1ZXVlX2Fm ZmluaXR5X2luZGV4KTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NHSUZUWFFBRkZJTklUWToKKwkJ aWYgKCEoaWZwLT5pZl9jYXBhYmlsaXRpZXMgJiBJRkNBUF9NVUxUSVFVRVVFKSkKKwkJCXJldHVy biAoRU9QTk9UU1VQUCk7CisJCUtBU1NFUlQoaWZwLT5pZl9nZXRfcnhxdWV1ZV9hZmZpbml0eSwg KCJpZl9nZXRfcnhxdWV1ZV9hZmZpbml0eSBub3Qgc2V0IikpOworCQlpZnItPmlmcl9xdWV1ZV9h ZmZpbml0eV9jcHUgPSAKKwkJCWlmcC0+aWZfZ2V0X3J4cXVldWVfYWZmaW5pdHkoaWZwLCBpZnIt Pmlmcl9xdWV1ZV9hZmZpbml0eV9pbmRleCk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJZXJy b3IgPSBFTk9JT0NUTDsKIAkJYnJlYWs7CkluZGV4OiBpZi5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlmLmgJ KC4uLi9oZWFkL3N5cy9uZXQvaWYuaCkJKHJldmlzaW9uIDI1MjUwOSkKKysrIGlmLmgJKC4uLi91 c2VyL3N5dXUvbXFfYnBmL3N5cy9uZXQvaWYuaCkJKHJldmlzaW9uIDI1MjUwOSkKQEAgLTIzMSw2 ICsyMzEsNyBAQAogI2RlZmluZQlJRkNBUF9ORVRNQVAJCTB4MTAwMDAwIC8qIG5ldG1hcCBtb2Rl IHN1cHBvcnRlZC9lbmFibGVkICovCiAjZGVmaW5lCUlGQ0FQX1JYQ1NVTV9JUFY2CTB4MjAwMDAw ICAvKiBjYW4gb2ZmbG9hZCBjaGVja3N1bSBvbiBJUHY2IFJYICovCiAjZGVmaW5lCUlGQ0FQX1RY Q1NVTV9JUFY2CTB4NDAwMDAwICAvKiBjYW4gb2ZmbG9hZCBjaGVja3N1bSBvbiBJUHY2IFRYICov CisjZGVmaW5lCUlGQ0FQX01VTFRJUVVFVUUJMHg4MDAwMDAKIAogI2RlZmluZSBJRkNBUF9IV0NT VU1fSVBWNgkoSUZDQVBfUlhDU1VNX0lQVjYgfCBJRkNBUF9UWENTVU1fSVBWNikKIApAQCAtMzg1 LDYgKzM4Niw4IEBACiAJCWNhZGRyX3QJaWZydV9kYXRhOwogCQlpbnQJaWZydV9jYXBbMl07CiAJ CXVfaW50CWlmcnVfZmliOworCQlpbnQJaWZydV9xdWV1ZV9sZW5bMl07CisJCWludAlpZnJ1X3F1 ZXVlX2FmZmluaXR5WzJdOwogCX0gaWZyX2lmcnU7CiAjZGVmaW5lCWlmcl9hZGRyCWlmcl9pZnJ1 LmlmcnVfYWRkcgkvKiBhZGRyZXNzICovCiAjZGVmaW5lCWlmcl9kc3RhZGRyCWlmcl9pZnJ1Lmlm cnVfZHN0YWRkcgkvKiBvdGhlciBlbmQgb2YgcC10by1wIGxpbmsgKi8KQEAgLTQwMiw2ICs0MDUs MTEgQEAKICNkZWZpbmUJaWZyX2N1cmNhcAlpZnJfaWZydS5pZnJ1X2NhcFsxXQkvKiBjdXJyZW50 IGNhcGFiaWxpdGllcyAqLwogI2RlZmluZQlpZnJfaW5kZXgJaWZyX2lmcnUuaWZydV9pbmRleAkv KiBpbnRlcmZhY2UgaW5kZXggKi8KICNkZWZpbmUJaWZyX2ZpYgkJaWZyX2lmcnUuaWZydV9maWIJ LyogaW50ZXJmYWNlIGZpYiAqLworI2RlZmluZSBpZnJfcnhxdWV1ZV9sZW4JaWZyX2lmcnUuaWZy dV9xdWV1ZV9sZW5bMF0gLyogcnhxdWV1ZSBsZW4gKi8KKyNkZWZpbmUgaWZyX3R4cXVldWVfbGVu CWlmcl9pZnJ1LmlmcnVfcXVldWVfbGVuWzFdIC8qIHR4cXVldWUgbGVuICovCisjZGVmaW5lIGlm cl9xdWV1ZV9hZmZpbml0eV9pbmRleCBpZnJfaWZydS5pZnJ1X3F1ZXVlX2FmZmluaXR5WzBdIC8q IHF1ZXVlIGlkICovCisjZGVmaW5lIGlmcl9xdWV1ZV9hZmZpbml0eV9jcHUgaWZyX2lmcnUuaWZy dV9xdWV1ZV9hZmZpbml0eVsxXSAvKiBjcHUgaWQgKi8KKwogfTsKIAogI2RlZmluZQlfU0laRU9G X0FERFJfSUZSRVEoaWZyKSBcCkluZGV4OiBicGYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicGYuYwkoLi4u L2hlYWQvc3lzL25ldC9icGYuYykJKHJldmlzaW9uIDI1MjUwOSkKKysrIGJwZi5jCSguLi4vdXNl ci9zeXV1L21xX2JwZi9zeXMvbmV0L2JwZi5jKQkocmV2aXNpb24gMjUyNTA5KQpAQCAtODE5LDYg KzgxOSwxMiBAQAogCXNpemUgPSBkLT5iZF9idWZzaXplOwogCWJwZl9idWZmZXJfaW9jdGxfc2Js ZW4oZCwgJnNpemUpOwogCisgCWQtPmJkX3FtYXNrLnFtX2VuYWJsZWQgPSBGQUxTRTsKKyAJZC0+ YmRfcW1hc2sucW1fcnhxX21hc2sgPSBOVUxMOworIAlkLT5iZF9xbWFzay5xbV90eHFfbWFzayA9 IE5VTEw7CisgCWQtPmJkX3FtYXNrLnFtX290aGVyX21hc2sgPSBGQUxTRTsKKyAJcndfaW5pdCgm ZC0+YmRfcW1hc2sucW1fbG9jaywgInFtYXNrIGxvY2siKTsKKwogCXJldHVybiAoMCk7CiB9CiAK QEAgLTE2OTcsNiArMTcwMywyNjYgQEAKIAljYXNlIEJJT0NST1RaQlVGOgogCQllcnJvciA9IGJw Zl9pb2N0bF9yb3R6YnVmKHRkLCBkLCAoc3RydWN0IGJwZl96YnVmICopYWRkcik7CiAJCWJyZWFr OworCisJY2FzZSBCSU9DRU5BUU1BU0s6CisJCXsKKwkJCXN0cnVjdCBpZm5ldCAqaWZwOworCisJ CQlpZiAoZC0+YmRfYmlmID09IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIE5vIGludGVyZmFjZSBh dHRhY2hlZCB5ZXQuCisJCQkJICovCisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJ CQl9CisJCQlCUEZRX1dMT0NLKCZkLT5iZF9xbWFzayk7CisJCQlpZiAoZC0+YmRfcW1hc2sucW1f ZW5hYmxlZCkgeworCQkJCUJQRlFfV1VOTE9DSygmZC0+YmRfcW1hc2spOworCQkJCWVycm9yID0g RUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJaWZwID0gZC0+YmRfYmlmLT5iaWZfaWZwOwor CQkJaWYgKCEoaWZwLT5pZl9jYXBhYmlsaXRpZXMgJiBJRkNBUF9NVUxUSVFVRVVFKSkgeworCQkJ CUJQRlFfV1VOTE9DSygmZC0+YmRfcW1hc2spOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJy ZWFrOworCQkJfQorCQkJS0FTU0VSVChpZnAtPmlmX2dldF9yeHF1ZXVlX2xlbiwgKCJpZnAtPmlm X2dldF9yeHF1ZXVlX2xlbiBub3Qgc2V0XG4iKSk7CisJCQlLQVNTRVJUKGlmcC0+aWZfZ2V0X3R4 cXVldWVfbGVuLCAoImlmcC0+aWZfZ2V0X3J4cXVldWVfbGVuIG5vdCBzZXRcbiIpKTsKKwkJCWQt PmJkX3FtYXNrLnFtX2VuYWJsZWQgPSBUUlVFOworCQkJZC0+YmRfcW1hc2sucW1fcnhxX21hc2sg PQorCQkJCW1hbGxvYyhpZnAtPmlmX2dldF9yeHF1ZXVlX2xlbihpZnApICogc2l6ZW9mKGJvb2xl YW5fdCksIE1fQlBGLCAKKwkJCQkJTV9XQUlUT0sgfCBNX1pFUk8pOworCQkJZC0+YmRfcW1hc2su cW1fdHhxX21hc2sgPQorCQkJCW1hbGxvYyhpZnAtPmlmX2dldF90eHF1ZXVlX2xlbihpZnApICog c2l6ZW9mKGJvb2xlYW5fdCksIE1fQlBGLCAKKwkJCQkJTV9XQUlUT0sgfCBNX1pFUk8pOworCQkJ ZC0+YmRfcW1hc2sucW1fb3RoZXJfbWFzayA9IEZBTFNFOworCQkJQlBGUV9XVU5MT0NLKCZkLT5i ZF9xbWFzayk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBCSU9DRElTUU1BU0s6CisJCXsKKwkJ CWlmIChkLT5iZF9iaWYgPT0gTlVMTCkgeworCQkJCS8qCisJCQkJICogTm8gaW50ZXJmYWNlIGF0 dGFjaGVkIHlldC4KKwkJCQkgKi8KKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJ CX0KKwkJCUJQRlFfV0xPQ0soJmQtPmJkX3FtYXNrKTsKKwkJCWlmICghZC0+YmRfcW1hc2sucW1f ZW5hYmxlZCkgeworCQkJCUJQRlFfV1VOTE9DSygmZC0+YmRfcW1hc2spOworCQkJCWVycm9yID0g RUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJZC0+YmRfcW1hc2sucW1fZW5hYmxlZCA9IEZB TFNFOworCQkJCisJCQlmcmVlKGQtPmJkX3FtYXNrLnFtX3J4cV9tYXNrLCBNX0JQRik7CisJCQlm cmVlKGQtPmJkX3FtYXNrLnFtX3R4cV9tYXNrLCBNX0JQRik7CisJCQlCUEZRX1dVTkxPQ0soJmQt PmJkX3FtYXNrKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIEJJT0NTVFJYUU1BU0s6CisJCXsK KwkJCXN0cnVjdCBpZm5ldCAqaWZwOworCQkJaW50IGluZGV4OworCisJCQlpZiAoZC0+YmRfYmlm ID09IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIE5vIGludGVyZmFjZSBhdHRhY2hlZCB5ZXQuCisJ CQkJICovCisJCQkJZXJyb3IgPSBFSU5WQUw7CQorCQkJCWJyZWFrOworCQkJfQorCQkJQlBGUV9X TE9DSygmZC0+YmRfcW1hc2spOworCQkJaWYgKCFkLT5iZF9xbWFzay5xbV9lbmFibGVkKSB7CisJ CQkJQlBGUV9XVU5MT0NLKCZkLT5iZF9xbWFzayk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJ YnJlYWs7CisJCQl9CisJCQlpZnAgPSBkLT5iZF9iaWYtPmJpZl9pZnA7CisJCQlpbmRleCA9ICoo dWludDMyX3QgKilhZGRyOworCQkJaWYgKGluZGV4ID4gaWZwLT5pZl9nZXRfcnhxdWV1ZV9sZW4o aWZwKSkgeworCQkJCUJQRlFfV1VOTE9DSygmZC0+YmRfcW1hc2spOworCQkJCWVycm9yID0gRUlO VkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJZC0+YmRfcW1hc2sucW1fcnhxX21hc2tbaW5kZXhd ID0gVFJVRTsKKwkJCUJQRlFfV1VOTE9DSygmZC0+YmRfcW1hc2spOworCQkJYnJlYWs7CisJCX0K KworCWNhc2UgQklPQ0NSUlhRTUFTSzoKKwkJeworCQkJaW50IGluZGV4OworCQkJc3RydWN0IGlm bmV0ICppZnA7CisKKwkJCWlmIChkLT5iZF9iaWYgPT0gTlVMTCkgeworCQkJCS8qCisJCQkJICog Tm8gaW50ZXJmYWNlIGF0dGFjaGVkIHlldC4KKwkJCQkgKi8KKwkJCQllcnJvciA9IEVJTlZBTDsK KwkJCQlicmVhazsKKwkJCX0KKwkJCUJQRlFfV0xPQ0soJmQtPmJkX3FtYXNrKTsKKwkJCWlmICgh ZC0+YmRfcW1hc2sucW1fZW5hYmxlZCkgeworCQkJCUJQRlFfV1VOTE9DSygmZC0+YmRfcW1hc2sp OworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJaWZwID0gZC0+YmRf YmlmLT5iaWZfaWZwOworCQkJaW5kZXggPSAqKHVpbnQzMl90ICopYWRkcjsKKwkJCWlmIChpbmRl eCA+IGlmcC0+aWZfZ2V0X3J4cXVldWVfbGVuKGlmcCkpIHsKKwkJCQlCUEZRX1dVTkxPQ0soJmQt PmJkX3FtYXNrKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWQt PmJkX3FtYXNrLnFtX3J4cV9tYXNrW2luZGV4XSA9IEZBTFNFOworCQkJQlBGUV9XVU5MT0NLKCZk LT5iZF9xbWFzayk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBCSU9DR1RSWFFNQVNLOgorCQl7 CisJCQlpbnQgaW5kZXg7CisJCQlzdHJ1Y3QgaWZuZXQgKmlmcDsKKworCQkJaWYgKGQtPmJkX2Jp ZiA9PSBOVUxMKSB7CisJCQkJLyoKKwkJCQkgKiBObyBpbnRlcmZhY2UgYXR0YWNoZWQgeWV0Lgor CQkJCSAqLworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJQlBGUV9X TE9DSygmZC0+YmRfcW1hc2spOworCQkJaWYgKCFkLT5iZF9xbWFzay5xbV9lbmFibGVkKSB7CisJ CQkJQlBGUV9XVU5MT0NLKCZkLT5iZF9xbWFzayk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJ YnJlYWs7CisJCQl9CisJCQlpZnAgPSBkLT5iZF9iaWYtPmJpZl9pZnA7CisJCQlpbmRleCA9ICoo dWludDMyX3QgKilhZGRyOworCQkJaWYgKGluZGV4ID4gaWZwLT5pZl9nZXRfcnhxdWV1ZV9sZW4o aWZwKSkgeworCQkJCUJQRlFfV1VOTE9DSygmZC0+YmRfcW1hc2spOworCQkJCWVycm9yID0gRUlO VkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJKih1aW50MzJfdCAqKWFkZHIgPSBkLT5iZF9xbWFz ay5xbV9yeHFfbWFza1tpbmRleF07CisJCQlCUEZRX1dVTkxPQ0soJmQtPmJkX3FtYXNrKTsKKwkJ CWJyZWFrOworCQl9CisKKwljYXNlIEJJT0NTVFRYUU1BU0s6CisJCXsKKwkJCXN0cnVjdCBpZm5l dCAqaWZwOworCQkJaW50IGluZGV4OworCisJCQlpZiAoZC0+YmRfYmlmID09IE5VTEwpIHsKKwkJ CQkvKgorCQkJCSAqIE5vIGludGVyZmFjZSBhdHRhY2hlZCB5ZXQuCisJCQkJICovCisJCQkJZXJy b3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisJCQlCUEZRX1dMT0NLKCZkLT5iZF9xbWFz ayk7CisJCQlpZiAoIWQtPmJkX3FtYXNrLnFtX2VuYWJsZWQpIHsKKwkJCQlCUEZRX1dVTkxPQ0so JmQtPmJkX3FtYXNrKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwor CQkJaWZwID0gZC0+YmRfYmlmLT5iaWZfaWZwOworCQkJaW5kZXggPSAqKHVpbnQzMl90ICopYWRk cjsKKwkJCWlmIChpbmRleCA+IGlmcC0+aWZfZ2V0X3R4cXVldWVfbGVuKGlmcCkpIHsKKwkJCQlC UEZRX1dVTkxPQ0soJmQtPmJkX3FtYXNrKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVh azsKKwkJCX0KKwkJCWQtPmJkX3FtYXNrLnFtX3R4cV9tYXNrW2luZGV4XSA9IFRSVUU7CisJCQlC UEZRX1dVTkxPQ0soJmQtPmJkX3FtYXNrKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIEJJT0ND UlRYUU1BU0s6CisJCXsKKwkJCXN0cnVjdCBpZm5ldCAqaWZwOworCQkJaW50IGluZGV4OworCisJ CQlpZiAoZC0+YmRfYmlmID09IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIE5vIGludGVyZmFjZSBh dHRhY2hlZCB5ZXQuCisJCQkJICovCisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJ CQl9CisJCQlCUEZRX1dMT0NLKCZkLT5iZF9xbWFzayk7CisJCQlpZiAoIWQtPmJkX3FtYXNrLnFt X2VuYWJsZWQpIHsKKwkJCQlCUEZRX1dVTkxPQ0soJmQtPmJkX3FtYXNrKTsKKwkJCQllcnJvciA9 IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWZwID0gZC0+YmRfYmlmLT5iaWZfaWZw OworCQkJaW5kZXggPSAqKHVpbnQzMl90ICopYWRkcjsKKwkJCWlmIChpbmRleCA+IGlmcC0+aWZf Z2V0X3R4cXVldWVfbGVuKGlmcCkpIHsKKwkJCQlCUEZRX1dVTkxPQ0soJmQtPmJkX3FtYXNrKTsK KwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWQtPmJkX3FtYXNrLnFt X3R4cV9tYXNrW2luZGV4XSA9IEZBTFNFOworCQkJQlBGUV9XVU5MT0NLKCZkLT5iZF9xbWFzayk7 CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBCSU9DR1RUWFFNQVNLOgorCQl7CisJCQlpbnQgaW5k ZXg7CisJCQlzdHJ1Y3QgaWZuZXQgKmlmcDsKKworCQkJaWYgKGQtPmJkX2JpZiA9PSBOVUxMKSB7 CisJCQkJLyoKKwkJCQkgKiBObyBpbnRlcmZhY2UgYXR0YWNoZWQgeWV0LgorCQkJCSAqLworCQkJ CWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJQlBGUV9XTE9DSygmZC0+YmRf cW1hc2spOworCQkJaWYgKCFkLT5iZF9xbWFzay5xbV9lbmFibGVkKSB7CisJCQkJQlBGUV9XVU5M T0NLKCZkLT5iZF9xbWFzayk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9 CisJCQlpZnAgPSBkLT5iZF9iaWYtPmJpZl9pZnA7CisJCQlpbmRleCA9ICoodWludDMyX3QgKilh ZGRyOworCQkJaWYgKGluZGV4ID4gaWZwLT5pZl9nZXRfdHhxdWV1ZV9sZW4oaWZwKSkgeworCQkJ CUJQRlFfV1VOTE9DSygmZC0+YmRfcW1hc2spOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJy ZWFrOworCQkJfQorCQkJKih1aW50MzJfdCAqKWFkZHIgPSBkLT5iZF9xbWFzay5xbV90eHFfbWFz a1tpbmRleF07CisJCQlCUEZRX1dVTkxPQ0soJmQtPmJkX3FtYXNrKTsKKwkJCWJyZWFrOworCQl9 CisKKwljYXNlIEJJT0NTVE9USEVSTUFTSzoKKwkJQlBGUV9XTE9DSygmZC0+YmRfcW1hc2spOwor CQlkLT5iZF9xbWFzay5xbV9vdGhlcl9tYXNrID0gVFJVRTsKKwkJQlBGUV9XVU5MT0NLKCZkLT5i ZF9xbWFzayk7CisJCWJyZWFrOworCisJY2FzZSBCSU9DQ1JPVEhFUk1BU0s6CisJCUJQRlFfV0xP Q0soJmQtPmJkX3FtYXNrKTsKKwkJZC0+YmRfcW1hc2sucW1fb3RoZXJfbWFzayA9IEZBTFNFOwor CQlCUEZRX1dVTkxPQ0soJmQtPmJkX3FtYXNrKTsKKwkJYnJlYWs7CisKKwljYXNlIEJJT0NHVE9U SEVSTUFTSzoKKwkJQlBGUV9XTE9DSygmZC0+YmRfcW1hc2spOworCQkqKHVpbnQzMl90ICopYWRk ciA9ICh1aW50MzJfdClkLT5iZF9xbWFzay5xbV9vdGhlcl9tYXNrOworCQlCUEZRX1dVTkxPQ0so JmQtPmJkX3FtYXNrKTsKKwkJYnJlYWs7CiAJfQogCUNVUlZORVRfUkVTVE9SRSgpOwogCXJldHVy biAoZXJyb3IpOwpAQCAtMjA1MCw2ICsyMzE2LDE0IEBACiAJCSAqIDIpIGRlc3Ryb3lpbmcvZGV0 YWNoaW5nIGQgaXMgcHJvdGVjdGVkIGJ5IGludGVyZmFjZQogCQkgKiB3cml0ZSBsb2NrLCB0b28K IAkJICovCisgCQlCUEZRX1JMT0NLKCZkLT5iZF9xbWFzayk7CisgCQlpZiAoZC0+YmRfcW1hc2su cW1fZW5hYmxlZCkgeworIAkJCWlmICghZC0+YmRfcW1hc2sucW1fb3RoZXJfbWFzaykgeworCQkJ CUJQRlFfUlVOTE9DSygmZC0+YmRfcW1hc2spOworIAkJCQljb250aW51ZTsKKyAJCQl9CisgCQl9 CisJCUJQRlFfUlVOTE9DSygmZC0+YmRfcW1hc2spOwogCiAJCS8qIFhYWDogRG8gbm90IHByb3Rl Y3QgY291bnRlciBmb3IgdGhlIHNha2Ugb2YgcGVyZm9ybWFuY2UuICovCiAJCSsrZC0+YmRfcmNv dW50OwpAQCAtMjExNyw2ICsyMzkxLDQyIEBACiAJQlBGSUZfUkxPQ0soYnApOwogCiAJTElTVF9G T1JFQUNIKGQsICZicC0+YmlmX2RsaXN0LCBiZF9uZXh0KSB7CisgCQlCUEZRX1JMT0NLKCZkLT5i ZF9xbWFzayk7CisgCQlpZiAoZC0+YmRfcW1hc2sucW1fZW5hYmxlZCkgeworIAkJCU1fQVNTRVJU UEtUSERSKG0pOworIAkJCWlmICghKG0tPm1fZmxhZ3MgJiBNX0ZMT1dJRCkpIHsKKyAJCQkJaWYg KCFkLT5iZF9xbWFzay5xbV9vdGhlcl9tYXNrKSB7CisgCQkJCQlCUEZRX1JVTkxPQ0soJmQtPmJk X3FtYXNrKTsKKyAJCQkJCWNvbnRpbnVlOworIAkJCQl9CisgCQkJfSBlbHNlIHsKKyAJCQkJc3Ry dWN0IGlmbmV0ICppZnAgPSBicC0+YmlmX2lmcDsKKyAJCQkJaWYgKG0tPm1fcGt0aGRyLnJ4cXVl dWUgIT0gKHVpbnQzMl90KS0xKSB7CisgCQkJCQlpZiAobS0+bV9wa3RoZHIucnhxdWV1ZSA+PSBp ZnAtPmlmX2dldF9yeHF1ZXVlX2xlbihpZnApKSB7CisgCQkJCQkJQlBGUV9SVU5MT0NLKCZkLT5i ZF9xbWFzayk7CisgCQkJCQkJQlBGSUZfUlVOTE9DSyhicCk7CisgCQkJCQkJcmV0dXJuOworCQkJ CQl9CisgCQkJCQlpZiAoIWQtPmJkX3FtYXNrLnFtX3J4cV9tYXNrW20tPm1fcGt0aGRyLnJ4cXVl dWVdKSB7CisgCQkJCQkJQlBGUV9SVU5MT0NLKCZkLT5iZF9xbWFzayk7CisgCQkJCQkJY29udGlu dWU7CisgCQkJCQl9CisgCQkJCX0KKyAJCQkJaWYgKG0tPm1fcGt0aGRyLnR4cXVldWUgIT0gKHVp bnQzMl90KS0xKSB7CisgCQkJCQlpZiAobS0+bV9wa3RoZHIudHhxdWV1ZSA+PSBpZnAtPmlmX2dl dF90eHF1ZXVlX2xlbihpZnApKSB7CisgCQkJCQkJQlBGUV9SVU5MT0NLKCZkLT5iZF9xbWFzayk7 CisgCQkJCQkJQlBGSUZfUlVOTE9DSyhicCk7CisgCQkJCQkJcmV0dXJuOworIAkJCQkJfQorIAkJ CQkJaWYgKCFkLT5iZF9xbWFzay5xbV90eHFfbWFza1ttLT5tX3BrdGhkci50eHF1ZXVlXSkgewor IAkJCQkJCUJQRlFfUlVOTE9DSygmZC0+YmRfcW1hc2spOworIAkJCQkJCWNvbnRpbnVlOworIAkJ CQkJfQorIAkJCQl9CisgCQkJfQorIAkJfQorIAkJQlBGUV9SVU5MT0NLKCZkLT5iZF9xbWFzayk7 CisgCiAJCWlmIChCUEZfQ0hFQ0tfRElSRUNUSU9OKGQsIG0tPm1fcGt0aGRyLnJjdmlmLCBicC0+ YmlmX2lmcCkpCiAJCQljb250aW51ZTsKIAkJKytkLT5iZF9yY291bnQ7CkBAIC0yMTgwLDYgKzI0 OTAsNDIgQEAKIAlCUEZJRl9STE9DSyhicCk7CiAKIAlMSVNUX0ZPUkVBQ0goZCwgJmJwLT5iaWZf ZGxpc3QsIGJkX25leHQpIHsKKyAJCUJQRlFfUkxPQ0soJmQtPmJkX3FtYXNrKTsKKyAJCWlmIChk LT5iZF9xbWFzay5xbV9lbmFibGVkKSB7CisgCQkJTV9BU1NFUlRQS1RIRFIobSk7CisgCQkJaWYg KCEobS0+bV9mbGFncyAmIE1fRkxPV0lEKSkgeworIAkJCQlpZiAoIWQtPmJkX3FtYXNrLnFtX290 aGVyX21hc2spIHsKKyAJCQkJCUJQRlFfUlVOTE9DSygmZC0+YmRfcW1hc2spOworIAkJCQkJY29u dGludWU7CisgCQkJCX0KKyAJCQl9IGVsc2UgeworIAkJCQlzdHJ1Y3QgaWZuZXQgKmlmcCA9IGJw LT5iaWZfaWZwOworIAkJCQlpZiAobS0+bV9wa3RoZHIucnhxdWV1ZSAhPSAodWludDMyX3QpLTEp IHsKKyAJCQkJCWlmIChtLT5tX3BrdGhkci5yeHF1ZXVlID49IGlmcC0+aWZfZ2V0X3J4cXVldWVf bGVuKGlmcCkpIHsKKyAJCQkJCQlCUEZRX1JVTkxPQ0soJmQtPmJkX3FtYXNrKTsKKyAJCQkJCQlC UEZJRl9SVU5MT0NLKGJwKTsKKyAJCQkJCQlyZXR1cm47CisgCQkJCQl9CisgCQkJCQlpZiAoIWQt PmJkX3FtYXNrLnFtX3J4cV9tYXNrW20tPm1fcGt0aGRyLnJ4cXVldWVdKSB7CisgCQkJCQkJQlBG UV9SVU5MT0NLKCZkLT5iZF9xbWFzayk7CisgCQkJCQkJY29udGludWU7CisgCQkJCQl9CisgCQkJ CX0KKyAJCQkJaWYgKG0tPm1fcGt0aGRyLnR4cXVldWUgIT0gKHVpbnQzMl90KS0xKSB7CisgCQkJ CQlpZiAobS0+bV9wa3RoZHIudHhxdWV1ZSA+PSBpZnAtPmlmX2dldF90eHF1ZXVlX2xlbihpZnAp KSB7CisgCQkJCQkJQlBGUV9SVU5MT0NLKCZkLT5iZF9xbWFzayk7CisgCQkJCQkJQlBGSUZfUlVO TE9DSyhicCk7CisgCQkJCQkJcmV0dXJuOworIAkJCQkJfQorIAkJCQkJaWYgKCFkLT5iZF9xbWFz ay5xbV90eHFfbWFza1ttLT5tX3BrdGhkci50eHF1ZXVlXSkgeworIAkJCQkJCUJQRlFfUlVOTE9D SygmZC0+YmRfcW1hc2spOworIAkJCQkJCWNvbnRpbnVlOworIAkJCQkJfQorIAkJCQl9CisgCQkJ fQorIAkJfQorIAkJQlBGUV9SVU5MT0NLKCZkLT5iZF9xbWFzayk7CisgCiAJCWlmIChCUEZfQ0hF Q0tfRElSRUNUSU9OKGQsIG0tPm1fcGt0aGRyLnJjdmlmLCBicC0+YmlmX2lmcCkpCiAJCQljb250 aW51ZTsKIAkJKytkLT5iZF9yY291bnQ7CkBAIC0yNDQzLDYgKzI3ODksMTIgQEAKIAl9CiAJaWYg KGQtPmJkX3dmaWx0ZXIgIT0gTlVMTCkKIAkJZnJlZSgoY2FkZHJfdClkLT5iZF93ZmlsdGVyLCBN X0JQRik7CisgCisgCWlmIChkLT5iZF9xbWFzay5xbV9lbmFibGVkKSB7CisgCQlmcmVlKGQtPmJk X3FtYXNrLnFtX3J4cV9tYXNrLCBNX0JQRik7CisgCQlmcmVlKGQtPmJkX3FtYXNrLnFtX3R4cV9t YXNrLCBNX0JQRik7CisgCX0KKyAKIAltdHhfZGVzdHJveSgmZC0+YmRfbG9jayk7CiB9CiAKSW5k ZXg6IHNvY2tpby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNvY2tpby5oCSguLi4vaGVhZC9zeXMvc3lzL3Nv Y2tpby5oKQkocmV2aXNpb24gMjUyNTA5KQorKysgc29ja2lvLmgJKC4uLi91c2VyL3N5dXUvbXFf YnBmL3N5cy9zeXMvc29ja2lvLmgpCShyZXZpc2lvbiAyNTI1MDkpCkBAIC04Miw2ICs4MiwxMCBA QAogI2RlZmluZQlTSU9DR0lGREVTQ1IJX0lPV1IoJ2knLCA0Miwgc3RydWN0IGlmcmVxKQkvKiBn ZXQgaWZuZXQgZGVzY3IgKi8gCiAjZGVmaW5lCVNJT0NBSUZBRERSCSBfSU9XKCdpJywgNDMsIHN0 cnVjdCBpZmFsaWFzcmVxKS8qIGFkZC9jaGcgSUYgYWxpYXMgKi8KIAorI2RlZmluZQlTSU9DR0lG UUxFTiAJX0lPV1IoJ2knLCA0NSwgc3RydWN0IGlmcmVxKQkvKiBnZXQgSUYgcXVldWUgbGVuICov CisjZGVmaW5lCVNJT0NHSUZSWFFBRkZJTklUWSBfSU9XUignaScsIDQ2LCBzdHJ1Y3QgaWZyZXEp CS8qIGdldCBJRiByeCBxdWV1ZSBhZmZpbml0eSAqLworI2RlZmluZQlTSU9DR0lGVFhRQUZGSU5J VFkgX0lPV1IoJ2knLCA0Nywgc3RydWN0IGlmcmVxKQkvKiBnZXQgSUYgdHggcXVldWUgYWZmaW5p dHkgKi8KKwogI2RlZmluZQlTSU9DQURETVVMVEkJIF9JT1coJ2knLCA0OSwgc3RydWN0IGlmcmVx KQkvKiBhZGQgbSdjYXN0IGFkZHIgKi8KICNkZWZpbmUJU0lPQ0RFTE1VTFRJCSBfSU9XKCdpJywg NTAsIHN0cnVjdCBpZnJlcSkJLyogZGVsIG0nY2FzdCBhZGRyICovCiAjZGVmaW5lCVNJT0NHSUZN VFUJX0lPV1IoJ2knLCA1MSwgc3RydWN0IGlmcmVxKQkvKiBnZXQgSUYgbXR1ICovCkluZGV4OiBt YnVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gbWJ1Zi5oCSguLi4vaGVhZC9zeXMvc3lzL21idWYuaCkJKHJl dmlzaW9uIDI1MjUwOSkKKysrIG1idWYuaAkoLi4uL3VzZXIvc3l1dS9tcV9icGYvc3lzL3N5cy9t YnVmLmgpCShyZXZpc2lvbiAyNTI1MDkpCkBAIC0xMjEsNiArMTIxLDggQEAKIAl1aW50MzJfdAkg Zmxvd2lkOwkvKiBwYWNrZXQncyA0LXR1cGxlIHN5c3RlbQogCQkJCQkgKiBmbG93IGlkZW50aWZp ZXIKIAkJCQkJICovCisJdWludDMyX3QJcnhxdWV1ZTsKKwl1aW50MzJfdAl0eHF1ZXVlOwogCS8q IHZhcmlhYmxlcyBmb3IgaGFyZHdhcmUgY2hlY2tzdW0gKi8KIAlpbnQJCSBjc3VtX2ZsYWdzOwkv KiBmbGFncyByZWdhcmRpbmcgY2hlY2tzdW0gKi8KIAlpbnQJCSBjc3VtX2RhdGE7CS8qIGRhdGEg ZmllbGQgdXNlZCBieSBjc3VtIHJvdXRpbmVzICovCg== --bcaec518248ea5c9a804e089646d--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALG4x-UYBFsMttpZx1-c_wtVf5MST8%2B_t1psY2HQskTiOZDFLA>