From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 80F99A0352 for ; Mon, 21 Feb 2022 18:29:48 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6F9824068C; Mon, 21 Feb 2022 18:29:48 +0100 (CET) Received: from mail-pj1-f99.google.com (mail-pj1-f99.google.com [209.85.216.99]) by mails.dpdk.org (Postfix) with ESMTP id 8731D4013F for ; Mon, 21 Feb 2022 18:29:46 +0100 (CET) Received: by mail-pj1-f99.google.com with SMTP id gf13-20020a17090ac7cd00b001bbfb9d760eso5883473pjb.2 for ; Mon, 21 Feb 2022 09:29:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; h=mime-version:subject:from:to:cc:message-id:date; bh=UeMa7+ZAAzw+CWsPq9oB37ikmPrf+yark6dOfbnqR9U=; b=Cf3LpqGcmoM2eFCO1Ms96X1S97DvITKlQnlaE9RRCSAbYTOFr3ZrBkt+cz6kmk72sM RE+kJOBGTNvnzXvVZFDsQvrpeMj3GJlrXFbeKedLvBhyFSqAoLhvFn05o0EivDCFroHE sciMQ2QXbtqk7Ab8hD36GWy1LFsgWvZ53khFM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:subject:from:to:cc:message-id:date; bh=UeMa7+ZAAzw+CWsPq9oB37ikmPrf+yark6dOfbnqR9U=; b=czfRRThE1V7FNh9ghLbREKAK3SfiwxEWyo1R59V3ilNlBR/IrfKYO533qPLTXnzZ/C L1gdgqL/HV83fdZVzBqDs05rVSYL1ajREU8xRLcn4wgNjqNZHNaA3R3Qbls4q45kJ56z W8UcbipaaFs0xgK58seiTD+k4duj/7WMbLVRVt2wnS3MfM/hG1Ri265q4y11wyqmNM4g MblbXrMos5bRnvpJ8Idm7kwTmXZquKx6AOR2vErGSSI4ToTISZjFoAyAK1g3l46RBYp0 YwVNctOSlyJgI3sXM3E3YGrJP8vRex8EQdALhHZoiEYQ5WzyQiev99DsKZkR7bb2V01e s0mA== X-Gm-Message-State: AOAM533AhFMuFvD7sGSDIi05xsG+StNLSY+YtWXPC+XMxTvQ4Y0BKJns SDuGk3XvkdA1/Ae5Xc7x6zH/ckC4UCqVhirt73Mu/0aCimuGSssAXlA/sSBmBhO7hg== X-Google-Smtp-Source: ABdhPJx7ER6FznDTLfRZadbiOwBecl/RCsgi+4qsqTH1SDFYfQ2W12KFli2m1QCUtSxYGOZAMgW7NJSzRZzv X-Received: by 2002:a17:90a:f3cf:b0:1bc:6732:3db7 with SMTP id ha15-20020a17090af3cf00b001bc67323db7mr12280pjb.199.1645464585674; Mon, 21 Feb 2022 09:29:45 -0800 (PST) Received: from postal.iol.unh.edu (postal.iol.unh.edu. [2606:4100:3880:1234::84]) by smtp-relay.gmail.com with ESMTPS id ot8sm486pjb.4.2022.02.21.09.29.45 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Feb 2022 09:29:45 -0800 (PST) X-Relaying-Domain: iol.unh.edu Received: from noxus.dpdklab.iol.unh.edu (unknown [IPv6:2606:4100:3880:1722::4]) by postal.iol.unh.edu (Postfix) with ESMTP id AECCA605246B; Mon, 21 Feb 2022 12:29:44 -0500 (EST) Received: from noxus.dpdklab.iol.unh.edu (localhost [IPv6:::1]) by noxus.dpdklab.iol.unh.edu (Postfix) with ESMTP id AEEF1B0F7; Mon, 21 Feb 2022 12:29:44 -0500 (EST) Content-Type: multipart/mixed; boundary="===============0428496616688058553==" MIME-Version: 1.0 Subject: |WARNING| pw107892-107896 [PATCH] [v3, 5/5] crypto/qat: refactor asymmetric session From: dpdklab@iol.unh.edu To: test-report@dpdk.org Cc: dpdk-test-reports@iol.unh.edu Message-Id: <20220221172944.AEEF1B0F7@noxus.dpdklab.iol.unh.edu> Date: Mon, 21 Feb 2022 12:29:44 -0500 (EST) X-BeenThere: test-report@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: automatic DPDK test reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: test-report-bounces@dpdk.org --===============0428496616688058553== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGVzdC1MYWJlbDogaW9sLXRlc3RpbmcKVGVzdC1TdGF0dXM6IFdBUk5JTkcKaHR0cDovL2RwZGsu b3JnL3BhdGNoLzEwNzg5MgoKX2FwcGx5IHBhdGNoIGZhaWx1cmVfCgpTdWJtaXR0ZXI6IEFyZWsg S3VzenRhbCA8YXJrYWRpdXN6eC5rdXN6dGFsQGludGVsLmNvbT4KRGF0ZTogTW9uZGF5LCBGZWJy dWFyeSAyMSAyMDIyIDEwOjQ4OjMxIApBcHBsaWVkIG9uOiBDb21taXRJRDplY2MwZGQ0NTVlOWE1 NmRiNzgzNDYzZDgzMTczYzNmMzQ4YjU2MGNlCkFwcGx5IHBhdGNoIHNldCAxMDc4OTItMTA3ODk2 IGZhaWxlZDoKCkNoZWNraW5nIHBhdGNoIGRvYy9ndWlkZXMvY3J5cHRvZGV2cy9xYXQucnN0Li4u CkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvY29tbW9uL3FhdC9xYXRfYWRmL3FhdF9wa2UuaC4uLgpD aGVja2luZyBwYXRjaCBkcml2ZXJzL2NvbW1vbi9xYXQvcWF0X2FkZi9xYXRfcGtlX2Z1bmN0aW9u YWxpdHlfYXJyYXlzLmguLi4KQ2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9jcnlwdG8vcWF0L2Rldi9x YXRfYXN5bV9wbWRfZ2VuMS5jLi4uCkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvY3J5cHRvL3FhdC9x YXRfYXN5bS5jLi4uCmVycm9yOiB3aGlsZSBzZWFyY2hpbmcgZm9yOgoKI2luY2x1ZGUgPGNyeXB0 b2Rldl9wbWQuaD4KCiNpbmNsdWRlICJpY3BfcWF0X2Z3X3BrZS5oIgojaW5jbHVkZSAiaWNwX3Fh dF9mdy5oIgojaW5jbHVkZSAicWF0X3BrZV9mdW5jdGlvbmFsaXR5X2FycmF5cy5oIgoKI2luY2x1 ZGUgInFhdF9kZXZpY2UuaCIKCiNpbmNsdWRlICJxYXRfbG9ncy5oIgojaW5jbHVkZSAicWF0X2Fz eW0uaCIKCnVpbnQ4X3QgcWF0X2FzeW1fZHJpdmVyX2lkOwoKc3RydWN0IHFhdF9jcnlwdG9fZ2Vu X2Rldl9vcHMgcWF0X2FzeW1fZ2VuX2Rldl9vcHNbUUFUX05fR0VOU107Cgp2b2lkCnFhdF9hc3lt X2luaXRfb3BfY29va2llKHZvaWQgKm9wX2Nvb2tpZSkKewoJaW50IGo7CglzdHJ1Y3QgcWF0X2Fz eW1fb3BfY29va2llICpjb29raWUgPSBvcF9jb29raWU7CgoJY29va2llLT5pbnB1dF9hZGRyID0g cnRlX21lbXBvb2xfdmlydDJpb3ZhKGNvb2tpZSkgKwoJCQlvZmZzZXRvZihzdHJ1Y3QgcWF0X2Fz eW1fb3BfY29va2llLAoJCQkJCWlucHV0X3BhcmFtc19wdHJzKTsKCgljb29raWUtPm91dHB1dF9h ZGRyID0gcnRlX21lbXBvb2xfdmlydDJpb3ZhKGNvb2tpZSkgKwoJCQlvZmZzZXRvZihzdHJ1Y3Qg cWF0X2FzeW1fb3BfY29va2llLAoJCQkJCW91dHB1dF9wYXJhbXNfcHRycyk7CgoJZm9yIChqID0g MDsgaiA8IDg7IGorKykgewoJCWNvb2tpZS0+aW5wdXRfcGFyYW1zX3B0cnNbal0gPQoJCQkJcnRl X21lbXBvb2xfdmlydDJpb3ZhKGNvb2tpZSkgKwoJCQkJb2Zmc2V0b2Yoc3RydWN0IHFhdF9hc3lt X29wX2Nvb2tpZSwKCQkJCQkJaW5wdXRfYXJyYXlbal0pOwoJCWNvb2tpZS0+b3V0cHV0X3BhcmFt c19wdHJzW2pdID0KCQkJCXJ0ZV9tZW1wb29sX3ZpcnQyaW92YShjb29raWUpICsKCQkJCW9mZnNl dG9mKHN0cnVjdCBxYXRfYXN5bV9vcF9jb29raWUsCgkJCQkJCW91dHB1dF9hcnJheVtqXSk7Cgl9 Cn0KCi8qIEFuIHJ0ZV9kcml2ZXIgaXMgbmVlZGVkIGluIHRoZSByZWdpc3RyYXRpb24gb2YgYm90 aCB0aGUgZGV2aWNlIGFuZCB0aGUgZHJpdmVyCiAqIHdpdGggY3J5cHRvZGV2LgogKiBUaGUgYWN0 dWFsIHFhdCBwY2kncyBydGVfZHJpdmVyIGNhbid0IGJlIHVzZWQgYXMgaXRzIG5hbWUgcmVwcmVz ZW50cwoKZXJyb3I6IHBhdGNoIGZhaWxlZDogZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmM6 NgplcnJvcjogd2hpbGUgc2VhcmNoaW5nIGZvcjoKCS5hbGlhcyA9IHFhdF9hc3ltX2Rydl9uYW1l Cn07CgoKc3RhdGljIHZvaWQgcWF0X2NsZWFyX2FycmF5cyhzdHJ1Y3QgcWF0X2FzeW1fb3BfY29v a2llICpjb29raWUsCgkJaW50IGluX2NvdW50LCBpbnQgb3V0X2NvdW50LCBpbnQgYWxnX3NpemUp CnsKCWludCBpOwoKZXJyb3I6IHBhdGNoIGZhaWxlZDogZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9h c3ltLmM6NTcKSHVuayAjMyBzdWNjZWVkZWQgYXQgNzUgKG9mZnNldCAtMTEgbGluZXMpLgplcnJv cjogd2hpbGUgc2VhcmNoaW5nIGZvcjoKCQltZW1zZXQoY29va2llLT5vdXRwdXRfYXJyYXlbaV0s IDB4MCwgYWxnX3NpemUpOwp9CgpzdGF0aWMgdm9pZCBxYXRfY2xlYXJfYXJyYXlzX2J5X2FsZyhz dHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llICpjb29raWUsCgkJc3RydWN0IHJ0ZV9jcnlwdG9fYXN5 bV94Zm9ybSAqeGZvcm0sIGludCBhbGdfc2l6ZSkKewoJaWYgKHhmb3JtLT54Zm9ybV90eXBlID09 IFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RFWCkKCQlxYXRfY2xlYXJfYXJyYXlzKGNvb2tpZSwg UUFUX0FTWU1fTU9ERVhQX05VTV9JTl9QQVJBTVMsCgkJCQlRQVRfQVNZTV9NT0RFWFBfTlVNX09V VF9QQVJBTVMsIGFsZ19zaXplKTsKCWVsc2UgaWYgKHhmb3JtLT54Zm9ybV90eXBlID09IFJURV9D UllQVE9fQVNZTV9YRk9STV9NT0RJTlYpCgkJcWF0X2NsZWFyX2FycmF5cyhjb29raWUsIFFBVF9B U1lNX01PRElOVl9OVU1fSU5fUEFSQU1TLAoJCQkJUUFUX0FTWU1fTU9ESU5WX05VTV9PVVRfUEFS QU1TLCBhbGdfc2l6ZSk7CgllbHNlIGlmICh4Zm9ybS0+eGZvcm1fdHlwZSA9PSBSVEVfQ1JZUFRP X0FTWU1fWEZPUk1fUlNBKSB7CgkJaWYgKHhmb3JtLT5yc2Eua2V5X3R5cGUgPT0gUlRFX1JTQV9L RVlfVFlQRV9RVCkKCQkJcWF0X2NsZWFyX2FycmF5c19jcnQoY29va2llLCBhbGdfc2l6ZSk7CgkJ ZWxzZSB7CgkJCXFhdF9jbGVhcl9hcnJheXMoY29va2llLCBRQVRfQVNZTV9SU0FfTlVNX0lOX1BB UkFNUywKCQkJCVFBVF9BU1lNX1JTQV9OVU1fT1VUX1BBUkFNUywgYWxnX3NpemUpOwoJCX0KCX0K fQoKI2RlZmluZSBxYXRfYXN5bV9zel8ycGFyYW0oYXJnKSAoYXJnLCBzaXplb2YoYXJnKS9zaXpl b2YoKmFyZykpCgpzdGF0aWMgaW50CnFhdF9hc3ltX2dldF9zel9hbmRfZnVuY19pZChjb25zdCB1 aW50MzJfdCBhcnJbXVsyXSwKCQlzaXplX3QgYXJyX3N6LCBzaXplX3QgKnNpemUsIHVpbnQzMl90 ICpmdW5jX2lkKQp7CglzaXplX3QgaTsKCglmb3IgKGkgPSAwOyBpIDwgYXJyX3N6OyBpKyspIHsK CQlpZiAoKnNpemUgPD0gYXJyW2ldWzBdKSB7CgkJCSpzaXplID0gYXJyW2ldWzBdOwoJCQkqZnVu Y19pZCA9IGFycltpXVsxXTsKCQkJcmV0dXJuIDA7CgkJfQoJfQoJcmV0dXJuIC0xOwp9CgpzdGF0 aWMgc2l6ZV90Cm1heF9vZihpbnQgbiwgLi4uKQp7Cgl2YV9saXN0IGFyZ3M7CglzaXplX3QgbGVu ID0gMCwgbnVtOwoJaW50IGk7CgoJdmFfc3RhcnQoYXJncywgbik7CglsZW4gPSB2YV9hcmcoYXJn cywgc2l6ZV90KTsKCglmb3IgKGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewoJCW51bSA9IHZhX2Fy ZyhhcmdzLCBzaXplX3QpOwoJCWlmIChudW0gPiBsZW4pCgkJCWxlbiA9IG51bTsKCX0KCXZhX2Vu ZChhcmdzKTsKCglyZXR1cm4gbGVuOwp9CgpzdGF0aWMgaW50CnFhdF9hc3ltX2NoZWNrX25vbnpl cm8ocnRlX2NyeXB0b19wYXJhbSBuKQp7CglpZiAobi5sZW5ndGggPCA4KSB7CgkJLyogTm90IGEg Y2FzZSBmb3IgYW55IGNyeXB0b2dyYXBoaWMgZnVuY3Rpb24gZXhjZXB0IGZvciBESAoJCSAqIGdl bmVyYXRvciB3aGljaCB2ZXJ5IG9mdGVuIGNhbiBiZSBvZiBvbmUgYnl0ZSBsZW5ndGgKCQkgKi8K CQlzaXplX3QgaTsKCgkJaWYgKG4uZGF0YVtuLmxlbmd0aCAtIDFdID09IDB4MCkgewoJCQlmb3Ig KGkgPSAwOyBpIDwgbi5sZW5ndGggLSAxOyBpKyspCgkJCQlpZiAobi5kYXRhW2ldICE9IDB4MCkK CQkJCQlicmVhazsKCQkJaWYgKGkgPT0gbi5sZW5ndGggLSAxKQoJCQkJcmV0dXJuIC0oRUlOVkFM KTsKCQl9Cgl9IGVsc2UgaWYgKCoodWludDY0X3QgKikmbi5kYXRhWwoJCQkJbi5sZW5ndGggLSA4 XSA9PSAwKSB7CgkJLyogVmVyeSBsaWtlbHkgaXQgaXMgemVyb2VkIG1vZHVsdXMgKi8KCQlzaXpl X3QgaTsKCgkJZm9yIChpID0gMDsgaSA8IG4ubGVuZ3RoIC0gODsgaSsrKQoJCQlpZiAobi5kYXRh W2ldICE9IDB4MCkKCQkJCWJyZWFrOwoJCWlmIChpID09IG4ubGVuZ3RoIC0gOCkKCQkJcmV0dXJu IC0oRUlOVkFMKTsKCX0KCglyZXR1cm4gMDsKfQoKc3RhdGljIGludApxYXRfYXN5bV9maWxsX2Fy cmF5cyhzdHJ1Y3QgcnRlX2NyeXB0b19hc3ltX29wICphc3ltX29wLAoJCXN0cnVjdCBpY3BfcWF0 X2Z3X3BrZV9yZXF1ZXN0ICpxYXRfcmVxLAoJCXN0cnVjdCBxYXRfYXN5bV9vcF9jb29raWUgKmNv b2tpZSwKCQlzdHJ1Y3QgcnRlX2NyeXB0b19hc3ltX3hmb3JtICp4Zm9ybSkKewoJaW50IGVyciA9 IDA7CglzaXplX3QgYWxnX3NpemU7CglzaXplX3QgYWxnX3NpemVfaW5fYnl0ZXM7Cgl1aW50MzJf dCBmdW5jX2lkID0gMDsKCglpZiAoeGZvcm0tPnhmb3JtX3R5cGUgPT0gUlRFX0NSWVBUT19BU1lN X1hGT1JNX01PREVYKSB7CgkJZXJyID0gcWF0X2FzeW1fY2hlY2tfbm9uemVybyh4Zm9ybS0+bW9k ZXgubW9kdWx1cyk7CgkJaWYgKGVycikgewoJCQlRQVRfTE9HKEVSUiwgIkVtcHR5IG1vZHVsdXMg aW4gbW9kdWxhciBleHBvbmVudGlhdGlvbiwiCgkJCQkJIiBhYm9ydGluZyB0aGlzIG9wZXJhdGlv biIpOwoJCQlyZXR1cm4gZXJyOwoJCX0KCgkJYWxnX3NpemVfaW5fYnl0ZXMgPSBtYXhfb2YoMywg YXN5bV9vcC0+bW9kZXguYmFzZS5sZW5ndGgsCgkJCSAgICAgICB4Zm9ybS0+bW9kZXguZXhwb25l bnQubGVuZ3RoLAoJCQkgICAgICAgeGZvcm0tPm1vZGV4Lm1vZHVsdXMubGVuZ3RoKTsKCQlhbGdf c2l6ZSA9IGFsZ19zaXplX2luX2J5dGVzIDw8IDM7CgoJCWlmIChxYXRfYXN5bV9nZXRfc3pfYW5k X2Z1bmNfaWQoTU9EX0VYUF9TSVpFLAoJCQkJc2l6ZW9mKE1PRF9FWFBfU0laRSkvc2l6ZW9mKCpN T0RfRVhQX1NJWkUpLAoJCQkJJmFsZ19zaXplLCAmZnVuY19pZCkpIHsKCQkJcmV0dXJuIC0oRUlO VkFMKTsKCQl9CgoJCWFsZ19zaXplX2luX2J5dGVzID0gYWxnX3NpemUgPj4gMzsKCQlydGVfbWVt Y3B5KGNvb2tpZS0+aW5wdXRfYXJyYXlbMF0gKyBhbGdfc2l6ZV9pbl9ieXRlcyAtCgkJCWFzeW1f b3AtPm1vZGV4LmJhc2UubGVuZ3RoCgkJCSwgYXN5bV9vcC0+bW9kZXguYmFzZS5kYXRhLAoJCQlh c3ltX29wLT5tb2RleC5iYXNlLmxlbmd0aCk7CgkJcnRlX21lbWNweShjb29raWUtPmlucHV0X2Fy cmF5WzFdICsgYWxnX3NpemVfaW5fYnl0ZXMgLQoJCQl4Zm9ybS0+bW9kZXguZXhwb25lbnQubGVu Z3RoCgkJCSwgeGZvcm0tPm1vZGV4LmV4cG9uZW50LmRhdGEsCgkJCXhmb3JtLT5tb2RleC5leHBv bmVudC5sZW5ndGgpOwoJCXJ0ZV9tZW1jcHkoY29va2llLT5pbnB1dF9hcnJheVsyXSAgKyBhbGdf c2l6ZV9pbl9ieXRlcyAtCgkJCXhmb3JtLT5tb2RleC5tb2R1bHVzLmxlbmd0aCwKCQkJeGZvcm0t Pm1vZGV4Lm1vZHVsdXMuZGF0YSwKCQkJeGZvcm0tPm1vZGV4Lm1vZHVsdXMubGVuZ3RoKTsKCQlj b29raWUtPmFsZ19zaXplID0gYWxnX3NpemU7CgkJcWF0X3JlcS0+cGtlX2hkci5jZF9wYXJzLmZ1 bmNfaWQgPSBmdW5jX2lkOwoJCXFhdF9yZXEtPmlucHV0X3BhcmFtX2NvdW50ID0gUUFUX0FTWU1f TU9ERVhQX05VTV9JTl9QQVJBTVM7CgkJcWF0X3JlcS0+b3V0cHV0X3BhcmFtX2NvdW50ID0gUUFU X0FTWU1fTU9ERVhQX05VTV9PVVRfUEFSQU1TOwojaWYgUlRFX0xPR19EUF9MRVZFTCA+PSBSVEVf TE9HX0RFQlVHCgkJUUFUX0RQX0hFWERVTVBfTE9HKERFQlVHLCAiTW9kRXhwIGJhc2UiLAoJCQkJ Y29va2llLT5pbnB1dF9hcnJheVswXSwKCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKCQlRQVRfRFBf SEVYRFVNUF9MT0coREVCVUcsICJNb2RFeHAgZXhwb25lbnQiLAoJCQkJY29va2llLT5pbnB1dF9h cnJheVsxXSwKCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKCQlRQVRfRFBfSEVYRFVNUF9MT0coREVC VUcsICIgTW9kRXhwbW9kdWx1cyIsCgkJCQljb29raWUtPmlucHV0X2FycmF5WzJdLAoJCQkJYWxn X3NpemVfaW5fYnl0ZXMpOwojZW5kaWYKCX0gZWxzZSBpZiAoeGZvcm0tPnhmb3JtX3R5cGUgPT0g UlRFX0NSWVBUT19BU1lNX1hGT1JNX01PRElOVikgewoJCWVyciA9IHFhdF9hc3ltX2NoZWNrX25v bnplcm8oeGZvcm0tPm1vZGludi5tb2R1bHVzKTsKCQlpZiAoZXJyKSB7CgkJCVFBVF9MT0coRVJS LCAiRW1wdHkgbW9kdWx1cyBpbiBtb2R1bGFyIG11bHRpcGxpY2F0aXZlIgoJCQkJCSIgCmVycm9y OiBwYXRjaCBmYWlsZWQ6IGRyaXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5jOjgxCkh1bmsgIzUg c3VjY2VlZGVkIGF0IDUyMiAob2Zmc2V0IC03MCBsaW5lcykuCmVycm9yOiB3aGlsZSBzZWFyY2hp bmcgZm9yOgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIHFhdF9hc3ltX2NvbGxlY3RfcmVzcG9u c2Uoc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKnJ4X29wLAoJCXN0cnVjdCBxYXRfYXN5bV9vcF9jb29r aWUgKmNvb2tpZSwKCQlzdHJ1Y3QgcnRlX2NyeXB0b19hc3ltX3hmb3JtICp4Zm9ybSkKewoJc2l6 ZV90IGFsZ19zaXplLCBhbGdfc2l6ZV9pbl9ieXRlcyA9IDA7CglzdHJ1Y3QgcnRlX2NyeXB0b19h c3ltX29wICphc3ltX29wID0gcnhfb3AtPmFzeW07CgoJaWYgKHhmb3JtLT54Zm9ybV90eXBlID09 IFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RFWCkgewoJCXJ0ZV9jcnlwdG9fcGFyYW0gbiA9IHhm b3JtLT5tb2RleC5tb2R1bHVzOwoKCQlhbGdfc2l6ZSA9IGNvb2tpZS0+YWxnX3NpemU7CgkJYWxn X3NpemVfaW5fYnl0ZXMgPSBhbGdfc2l6ZSA+PiAzOwoJCXVpbnQ4X3QgKm1vZGV4cF9yZXN1bHQg PSBhc3ltX29wLT5tb2RleC5yZXN1bHQuZGF0YTsKCgkJaWYgKHJ4X29wLT5zdGF0dXMgPT0gUlRF X0NSWVBUT19PUF9TVEFUVVNfTk9UX1BST0NFU1NFRCkgewoJCQlydGVfbWVtY3B5KG1vZGV4cF9y ZXN1bHQgKwoJCQkJKGFzeW1fb3AtPm1vZGV4LnJlc3VsdC5sZW5ndGggLQoJCQkJCW4ubGVuZ3Ro KSwKCQkJCWNvb2tpZS0+b3V0cHV0X2FycmF5WzBdICsgYWxnX3NpemVfaW5fYnl0ZXMKCQkJCS0g bi5sZW5ndGgsIG4ubGVuZ3RoCgkJCQkpOwoJCQlyeF9vcC0+c3RhdHVzID0gUlRFX0NSWVBUT19P UF9TVEFUVVNfU1VDQ0VTUzsKI2lmIFJURV9MT0dfRFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRwoJ CQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJNb2RFeHAgcmVzdWx0IiwKCQkJCQljb29raWUt Pm91dHB1dF9hcnJheVswXSwKCQkJCQlhbGdfc2l6ZV9pbl9ieXRlcyk7CgojZW5kaWYKCQl9Cgl9 IGVsc2UgaWYgKHhmb3JtLT54Zm9ybV90eXBlID09IFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RJ TlYpIHsKCQlydGVfY3J5cHRvX3BhcmFtIG4gPSB4Zm9ybS0+bW9kaW52Lm1vZHVsdXM7CgoJCWFs Z19zaXplID0gY29va2llLT5hbGdfc2l6ZTsKCQlhbGdfc2l6ZV9pbl9ieXRlcyA9IGFsZ19zaXpl ID4+IDM7CgkJdWludDhfdCAqbW9kaW52X3Jlc3VsdCA9IGFzeW1fb3AtPm1vZGludi5yZXN1bHQu ZGF0YTsKCgkJaWYgKHJ4X29wLT5zdGF0dXMgPT0gUlRFX0NSWVBUT19PUF9TVEFUVVNfTk9UX1BS T0NFU1NFRCkgewoJCQlydGVfbWVtY3B5KG1vZGludl9yZXN1bHQgKyAoYXN5bV9vcC0+bW9kaW52 LnJlc3VsdC5sZW5ndGgKCQkJCS0gbi5sZW5ndGgpLAoJCQkJY29va2llLT5vdXRwdXRfYXJyYXlb MF0gKyBhbGdfc2l6ZV9pbl9ieXRlcwoJCQkJLSBuLmxlbmd0aCwgbi5sZW5ndGgpOwoJCQlyeF9v cC0+c3RhdHVzID0gUlRFX0NSWVBUT19PUF9TVEFUVVNfU1VDQ0VTUzsKI2lmIFJURV9MT0dfRFBf TEVWRUwgPj0gUlRFX0xPR19ERUJVRwoJCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJNb2RJ bnYgcmVzdWx0IiwKCQkJCQljb29raWUtPm91dHB1dF9hcnJheVswXSwKCQkJCQlhbGdfc2l6ZV9p bl9ieXRlcyk7CiNlbmRpZgoJCX0KCX0gZWxzZSBpZiAoeGZvcm0tPnhmb3JtX3R5cGUgPT0gUlRF X0NSWVBUT19BU1lNX1hGT1JNX1JTQSkgewoKCQlhbGdfc2l6ZSA9IGNvb2tpZS0+YWxnX3NpemU7 CgkJYWxnX3NpemVfaW5fYnl0ZXMgPSBhbGdfc2l6ZSA+PiAzOwoJCWlmIChhc3ltX29wLT5yc2Eu b3BfdHlwZSA9PSBSVEVfQ1JZUFRPX0FTWU1fT1BfRU5DUllQVCB8fAoJCQkJYXN5bV9vcC0+cnNh Lm9wX3R5cGUgPT0KCQkJCQlSVEVfQ1JZUFRPX0FTWU1fT1BfVkVSSUZZKSB7CgkJCWlmIChhc3lt X29wLT5yc2Eub3BfdHlwZSA9PQoJCQkJCVJURV9DUllQVE9fQVNZTV9PUF9FTkNSWVBUKSB7CgkJ CQl1aW50OF90ICpyc2FfcmVzdWx0ID0gYXN5bV9vcC0+cnNhLmNpcGhlci5kYXRhOwoKCQkJCXJ0 ZV9tZW1jcHkocnNhX3Jlc3VsdCwKCQkJCQkJY29va2llLT5vdXRwdXRfYXJyYXlbMF0sCgkJCQkJ CWFsZ19zaXplX2luX2J5dGVzKTsKCQkJCXJ4X29wLT5zdGF0dXMgPSBSVEVfQ1JZUFRPX09QX1NU QVRVU19TVUNDRVNTOwojaWYgUlRFX0xPR19EUF9MRVZFTCA+PSBSVEVfTE9HX0RFQlVHCgkJCQlR QVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJSU0EgRW5jcnlwdGVkIGRhdGEiLAoJCQkJCQljb29r aWUtPm91dHB1dF9hcnJheVswXSwKCQkJCQkJYWxnX3NpemVfaW5fYnl0ZXMpOwojZW5kaWYKCQkJ fSBlbHNlIGlmIChhc3ltX29wLT5yc2Eub3BfdHlwZSA9PQoJCQkJCVJURV9DUllQVE9fQVNZTV9P UF9WRVJJRlkpIHsKCQkJCXVpbnQ4X3QgKnJzYV9yZXN1bHQgPSBhc3ltX29wLT5yc2EuY2lwaGVy LmRhdGE7CgoJCQkJc3dpdGNoIChhc3ltX29wLT5yc2EucGFkKSB7CgkJCQljYXNlIFJURV9DUllQ VE9fUlNBX1BBRERJTkdfTk9ORToKCQkJCQlydGVfbWVtY3B5KHJzYV9yZXN1bHQsCgkJCQkJCQlj b29raWUtPm91dHB1dF9hcnJheVswXSwKCQkJCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKCQkJCQly eF9vcC0+c3RhdHVzID0KCQkJCQkJUlRFX0NSWVBUT19PUF9TVEFUVVNfU1VDQ0VTUzsKI2lmIFJU RV9MT0dfRFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRwoJCQkJUUFUX0RQX0hFWERVTVBfTE9HKERF QlVHLCAiUlNBIFNpZ25hdHVyZSIsCgkJCQkJCWNvb2tpZS0+b3V0cHV0X2FycmF5WzBdLAoJCQkJ CQlhbGdfc2l6ZV9pbl9ieXRlcyk7CiNlbmRpZgoJCQkJCWJyZWFrOwoJCQkJZGVmYXVsdDoKCQkJ CQlRQVRfTE9HKEVSUiwgIlBhZGRpbmcgbm90IHN1cHBvcnRlZCIpOwoJCQkJCXJ4X29wLT5zdGF0 dXMgPQoJCQkJCQlSVEVfQ1JZUFRPX09QX1NUQVRVU19FUlJPUjsKCQkJCQlicmVhazsKCQkJCX0K CQkJfQoJCX0gZWxzZSB7CgkJCWlmIChhc3ltX29wLT5yc2Eub3BfdHlwZSA9PQoJCQkJCVJURV9D UllQVE9fQVNZTV9PUF9ERUNSWVBUKSB7CgkJCQl1aW50OF90ICpyc2FfcmVzdWx0ID0gYXN5bV9v cC0+cnNhLm1lc3NhZ2UuZGF0YTsKCgkJCQlzd2l0Y2ggKGFzeW1fb3AtPnJzYS5wYWQpIHsKCQkJ CWNhc2UgUlRFX0NSWVBUT19SU0FfUEFERElOR19OT05FOgoJCQkJCXJ0ZV9tZW1jcHkocnNhX3Jl c3VsdCwKCQkJCQkJY29va2llLT5vdXRwdXRfYXJyYXlbMF0sCgkJCQkJCWFsZ19zaXplX2luX2J5 dGVzKTsKCQkJCQlyeF9vcC0+c3RhdHVzID0KCQkJCQkJUlRFX0NSWVBUT19PUF9TVEFUVVNfU1VD Q0VTUzsKCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJUUFUX0xPRyhFUlIsICJQYWRkaW5n IG5vdCBzdXBwb3J0ZWQiKTsKCQkJCQlyeF9vcC0+c3RhdHVzID0KCQkJCQkJUlRFX0NSWVBUT19P UF9TVEFUVVNfRVJST1I7CgkJCQkJYnJlYWs7CgkJCQl9CiNpZiBSVEVfTE9HX0RQX0xFVkVMID49 IFJURV9MT0dfREVCVUcKCQkJCVFBVF9EUF9IRVhEVU1QX0xPRyhERUJVRywgIlJTQSBEZWNyeXB0 ZWQgTWVzc2FnZSIsCgkJCQkJCXJzYV9yZXN1bHQsIGFsZ19zaXplX2luX2J5dGVzKTsKI2VuZGlm CgkJCX0gZWxzZSBpZiAoYXN5bV9vcC0+cnNhLm9wX3R5cGUgPT0gUlRFX0NSWVBUT19BU1lNX09Q X1NJR04pIHsKCQkJCXVpbnQ4X3QgKnJzYV9yZXN1bHQgPSBhc3ltX29wLT5yc2Euc2lnbi5kYXRh OwoKCQkJCXJ0ZV9tZW1jcHkocnNhX3Jlc3VsdCwKCQkJCQkJY29va2llLT5vdXRwdXRfYXJyYXlb MF0sCgkJCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKCQkJCXJ4X29wLT5zdGF0dXMgPSBSVEVfQ1JZ UFRPX09QX1NUQVRVU19TVUNDRVNTOwojaWYgUlRFX0xPR19EUF9MRVZFTCA+PSBSVEVfTE9HX0RF QlVHCgkJCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJSU0EgU2lnbmF0dXJlIiwKCQkJCQkJ Y29va2llLT5vdXRwdXRfYXJyYXlbMF0sCgkJCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKI2VuZGlm CgkJCX0KCQl9Cgl9CglxYXRfY2xlYXJfYXJyYXlzX2J5X2FsZyhjb29raWUsIHhmb3JtLCBhbGdf c2l6ZV9pbl9ieXRlcyk7Cn0KCmludApxYXRfYXN5bV9wcm9jZXNzX3Jlc3BvbnNlKHZvaWQgKipv cCwgdWludDhfdCAqcmVzcCwKCQl2b2lkICpvcF9jb29raWUsIF9fcnRlX3VudXNlZCB1aW50NjRf dCAqZGVxdWV1ZV9lcnJfY291bnQpCnsKCXN0cnVjdCBxYXQKZXJyb3I6IHBhdGNoIGZhaWxlZDog ZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmM6NTc2CmVycm9yOiB3aGlsZSBzZWFyY2hpbmcg Zm9yOgoJCQkJCSIgcmV0dXJuZWQgZXJyb3IiKTsKCQl9Cgl9CgoJaWYgKHJ4X29wLT5zZXNzX3R5 cGUgPT0gUlRFX0NSWVBUT19PUF9XSVRIX1NFU1NJT04pIHsKCQljdHggPSAoc3RydWN0IHFhdF9h c3ltX3Nlc3Npb24gKikKCQkJCXJ4X29wLT5hc3ltLT5zZXNzaW9uLT5zZXNzX3ByaXZhdGVfZGF0 YTsKCQlxYXRfYXN5bV9jb2xsZWN0X3Jlc3BvbnNlKHJ4X29wLCBjb29raWUsIGN0eC0+eGZvcm0p OwoJfSBlbHNlIGlmIChyeF9vcC0+c2Vzc190eXBlID09IFJURV9DUllQVE9fT1BfU0VTU0lPTkxF U1MpIHsKCQlxYXRfYXN5bV9jb2xsZWN0X3Jlc3BvbnNlKHJ4X29wLCBjb29raWUsIHJ4X29wLT5h c3ltLT54Zm9ybSk7Cgl9Cgkqb3AgPSByeF9vcDsKCiNpZiBSVEVfTE9HX0RQX0xFVkVMID49IFJU RV9MT0dfREVCVUcKCVFBVF9EUF9IRVhEVU1QX0xPRyhERUJVRywgInJlc3BfbXNnOiIsIHJlc3Bf bXNnLAoJCQlzaXplb2Yoc3RydWN0IGljcF9xYXRfZndfcGtlX3Jlc3ApKTsKI2VuZGlmCgoJcmV0 dXJuIDE7Cn0KCmludApxYXRfYXN5bV9zZXNzaW9uX2NvbmZpZ3VyZShzdHJ1Y3QgcnRlX2NyeXB0 b2RldiAqZGV2IF9fcnRlX3VudXNlZCwKCQlzdHJ1Y3QgcnRlX2NyeXB0b19hc3ltX3hmb3JtICp4 Zm9ybSwKCQlzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9hc3ltX3Nlc3Npb24gKnNlc3MpCnsKCXN0cnVj dCBxYXRfYXN5bV9zZXNzaW9uICpzZXNzaW9uOwoKCXNlc3Npb24gPSAoc3RydWN0IHFhdF9hc3lt X3Nlc3Npb24gKikgc2Vzcy0+c2Vzc19wcml2YXRlX2RhdGE7CglpZiAoeGZvcm0tPnhmb3JtX3R5 cGUgPT0gUlRFX0NSWVBUT19BU1lNX1hGT1JNX01PREVYKSB7CgkJaWYgKHhmb3JtLT5tb2RleC5l eHBvbmVudC5sZW5ndGggPT0gMCB8fAoJCQkJeGZvcm0tPm1vZGV4Lm1vZHVsdXMubGVuZ3RoID09 IDApIHsKCQkJUUFUX0xPRyhFUlIsICJJbnZhbGlkIG1vZCBleHAgaW5wdXQgcGFyYW1ldGVyIik7 CgkJCXJldHVybiAtRUlOVkFMOwoJCX0KCX0gZWxzZSBpZiAoeGZvcm0tPnhmb3JtX3R5cGUgPT0g UlRFX0NSWVBUT19BU1lNX1hGT1JNX01PRElOVikgewoJCWlmICh4Zm9ybS0+bW9kaW52Lm1vZHVs dXMubGVuZ3RoID09IDApIHsKCQkJUUFUX0xPRyhFUlIsICJJbnZhbGlkIG1vZCBpbnYgaW5wdXQg cGFyYW1ldGVyIik7CgkJCXJldHVybiAtRUlOVkFMOwoJCX0KCX0gZWxzZSBpZiAoeGZvcm0tPnhm b3JtX3R5cGUgPT0gUlRFX0NSWVBUT19BU1lNX1hGT1JNX1JTQSkgewoJCWlmICh4Zm9ybS0+cnNh Lm4ubGVuZ3RoID09IDApIHsKCQkJUUFUX0xPRyhFUlIsICJJbnZhbGlkIHJzYSBpbnB1dCBwYXJh bWV0ZXIiKTsKCQkJcmV0dXJuIC1FSU5WQUw7CgkJfQoJfSBlbHNlIGlmICh4Zm9ybS0+eGZvcm1f dHlwZSA+PSBSVEVfQ1JZUFRPX0FTWU1fWEZPUk1fVFlQRV9MSVNUX0VORAoJCQl8fCB4Zm9ybS0+ eGZvcm1fdHlwZSA8PSBSVEVfQ1JZUFRPX0FTWU1fWEZPUk1fTk9ORSkgewoJCVFBVF9MT0coRVJS LCAiSW52YWxpZCBhc3ltbWV0cmljIGNyeXB0byB4Zm9ybSIpOwoJCXJldHVybiAtRUlOVkFMOwoJ fSBlbHNlIHsKCQlRQVRfTE9HKEVSUiwgIkFzeW1tZXRyaWMgY3J5cHRvIHhmb3JtIG5vdCBpbXBs ZW1lbnRlZCIpOwoJCXJldHVybiAtRUlOVkFMOwoJfQoKCXNlc3Npb24tPnhmb3JtID0geGZvcm07 CglxYXRfYXN5bV9idWlsZF9yZXFfdG1wbChzZXNzaW9uKTsKCglyZXR1cm4gMDsKfQoKdW5zaWdu ZWQgaW50IHFhdF9hc3ltX3Nlc3Npb25fZ2V0X3ByaXZhdGVfc2l6ZSgKCQlzdHJ1Y3QgcnRlX2Ny eXB0b2RldiAqZGV2IF9fcnRlX3VudXNlZCkKewoJcmV0dXJuIFJURV9BTElHTl9DRUlMKHNpemVv ZihzdHJ1Y3QgcWF0X2FzeW1fc2Vzc2lvbiksIDgpOwp9Cgp2b2lkCnFhdF9hc3ltX3Nlc3Npb25f Y2xlYXIoc3RydWN0IHJ0ZV9jcnlwdG9kZXYgKmRldiwKCQlzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9h c3ltX3Nlc3Npb24gKnNlc3MpCnsKCXZvaWQgKnNlc3NfcHJpdiA9IHNlc3MtPnNlc3NfcHJpdmF0 ZV9kYXRhOwoJc3RydWN0IHFhdF9hc3ltX3Nlc3Npb24gKnMgPSAoc3RydWN0IHFhdF9hc3ltX3Nl c3Npb24gKilzZXNzX3ByaXY7CgoJaWYgKHNlc3NfcHJpdikKCQltZW1zZXQocywgMCwgcWF0X2Fz eW1fc2Vzc2lvbl9nZXRfcHJpdmF0ZV9zaXplKGRldikpOwp9CgpzdGF0aWMgdWludDE2X3QKCmVy cm9yOiBwYXRjaCBmYWlsZWQ6IGRyaXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5jOjc0MAplcnJv cjogd2hpbGUgc2VhcmNoaW5nIGZvcjoKCQkJCW5iX29wcyk7Cn0KCmludApxYXRfYXN5bV9kZXZf Y3JlYXRlKHN0cnVjdCBxYXRfcGNpX2RldmljZSAqcWF0X3BjaV9kZXYsCgkJc3RydWN0IHFhdF9k ZXZfY21kX3BhcmFtICpxYXRfZGV2X2NtZF9wYXJhbSkKCmVycm9yOiBwYXRjaCBmYWlsZWQ6IGRy aXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5jOjgzMApDaGVja2luZyBwYXRjaCBkcml2ZXJzL2Ny eXB0by9xYXQvcWF0X2FzeW0uaC4uLgplcnJvcjogd2hpbGUgc2VhcmNoaW5nIGZvcjoKCX0KCnN0 cnVjdCBxYXRfYXN5bV9vcF9jb29raWUgewoJc2l6ZV90IGFsZ19zaXplOwoJdWludDY0X3QgZXJy b3I7CglydGVfaW92YV90IGlucHV0X2FkZHI7CglydGVfaW92YV90IG91dHB1dF9hZGRyOwoKZXJy b3I6IHBhdGNoIGZhaWxlZDogZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmg6NTIKZXJyb3I6 IHdoaWxlIHNlYXJjaGluZyBmb3I6CnFhdF9hc3ltX3Nlc3Npb25fY2xlYXIoc3RydWN0IHJ0ZV9j cnlwdG9kZXYgKmRldiwKCQlzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9hc3ltX3Nlc3Npb24gKnNlc3Mp OwoKLyoKICogUHJvY2VzcyBQS0UgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBvdXRnb2luZyBxdWV1 ZSBvZiBRQVQKICoKICogQHBhcmFtCW9wCQlhIHB0ciB0byB0aGUgcnRlX2NyeXB0b19vcCByZWZl cnJlZCB0byBieQogKgkJCQl0aGUgcmVzcG9uc2UgbWVzc2FnZSBpcyByZXR1cm5lZCBpbiB0aGlz IHBhcmFtCiAqIEBwYXJhbQlyZXNwCQlpY3BfcWF0X2Z3X3BrZV9yZXNwIG1lc3NhZ2UgcmVjZWl2 ZWQgZnJvbQogKgkJCQlvdXRnb2luZyBmdyBtZXNzYWdlIHF1ZXVlCiAqIEBwYXJhbQlvcF9jb29r aWUJQ29va2llIHBvaW50ZXIgdGhhdCBob2xkcyBwcml2YXRlIG1ldGFkYXRhCiAqCiAqLwppbnQK cWF0X2FzeW1fcHJvY2Vzc19yZXNwb25zZSh2b2lkICoqb3AsIHVpbnQ4X3QgKnJlc3AsCgkJdm9p ZCAqb3BfY29va2llLCAgX19ydGVfdW51c2VkIHVpbnQ2NF90ICpkZXF1ZXVlX2Vycl9jb3VudCk7 Cgp2b2lkCnFhdF9hc3ltX2luaXRfb3BfY29va2llKHZvaWQgKmNvb2tpZSk7CgoKZXJyb3I6IHBh dGNoIGZhaWxlZDogZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmg6MTAzCkFwcGxpZWQgcGF0 Y2ggZG9jL2d1aWRlcy9jcnlwdG9kZXZzL3FhdC5yc3QgY2xlYW5seS4KQXBwbGllZCBwYXRjaCBk cml2ZXJzL2NvbW1vbi9xYXQvcWF0X2FkZi9xYXRfcGtlLmggY2xlYW5seS4KQXBwbGllZCBwYXRj aCBkcml2ZXJzL2NvbW1vbi9xYXQvcWF0X2FkZi9xYXRfcGtlX2Z1bmN0aW9uYWxpdHlfYXJyYXlz LmggY2xlYW5seS4KQXBwbGllZCBwYXRjaCBkcml2ZXJzL2NyeXB0by9xYXQvZGV2L3FhdF9hc3lt X3BtZF9nZW4xLmMgY2xlYW5seS4KQXBwbHlpbmcgcGF0Y2ggZHJpdmVycy9jcnlwdG8vcWF0L3Fh dF9hc3ltLmMgd2l0aCA2IHJlamVjdHMuLi4KUmVqZWN0ZWQgaHVuayAjMS4KUmVqZWN0ZWQgaHVu ayAjMi4KSHVuayAjMyBhcHBsaWVkIGNsZWFubHkuClJlamVjdGVkIGh1bmsgIzQuCkh1bmsgIzUg YXBwbGllZCBjbGVhbmx5LgpSZWplY3RlZCBodW5rICM2LgpSZWplY3RlZCBodW5rICM3LgpSZWpl Y3RlZCBodW5rICM4LgpBcHBseWluZyBwYXRjaCBkcml2ZXJzL2NyeXB0by9xYXQvcWF0X2FzeW0u aCB3aXRoIDIgcmVqZWN0cy4uLgpSZWplY3RlZCBodW5rICMxLgpSZWplY3RlZCBodW5rICMyLgpk aWZmIGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmMgYi9kcml2ZXJzL2NyeXB0by9xYXQv cWF0X2FzeW0uYwkocmVqZWN0ZWQgaHVua3MpCkBAIC02LDQ1ICs2LDE4IEBACiAKICNpbmNsdWRl IDxjcnlwdG9kZXZfcG1kLmg+CiAKLSNpbmNsdWRlICJpY3BfcWF0X2Z3X3BrZS5oIgotI2luY2x1 ZGUgImljcF9xYXRfZncuaCIKLSNpbmNsdWRlICJxYXRfcGtlX2Z1bmN0aW9uYWxpdHlfYXJyYXlz LmgiCi0KICNpbmNsdWRlICJxYXRfZGV2aWNlLmgiCi0KICNpbmNsdWRlICJxYXRfbG9ncy5oIgor CiAjaW5jbHVkZSAicWF0X2FzeW0uaCIKKyNpbmNsdWRlICJpY3BfcWF0X2Z3X3BrZS5oIgorI2lu Y2x1ZGUgImljcF9xYXRfZncuaCIKKyNpbmNsdWRlICJxYXRfcGtlLmgiCiAKIHVpbnQ4X3QgcWF0 X2FzeW1fZHJpdmVyX2lkOwogCiBzdHJ1Y3QgcWF0X2NyeXB0b19nZW5fZGV2X29wcyBxYXRfYXN5 bV9nZW5fZGV2X29wc1tRQVRfTl9HRU5TXTsKIAotdm9pZAotcWF0X2FzeW1faW5pdF9vcF9jb29r aWUodm9pZCAqb3BfY29va2llKQotewotCWludCBqOwotCXN0cnVjdCBxYXRfYXN5bV9vcF9jb29r aWUgKmNvb2tpZSA9IG9wX2Nvb2tpZTsKLQotCWNvb2tpZS0+aW5wdXRfYWRkciA9IHJ0ZV9tZW1w b29sX3ZpcnQyaW92YShjb29raWUpICsKLQkJCW9mZnNldG9mKHN0cnVjdCBxYXRfYXN5bV9vcF9j b29raWUsCi0JCQkJCWlucHV0X3BhcmFtc19wdHJzKTsKLQotCWNvb2tpZS0+b3V0cHV0X2FkZHIg PSBydGVfbWVtcG9vbF92aXJ0MmlvdmEoY29va2llKSArCi0JCQlvZmZzZXRvZihzdHJ1Y3QgcWF0 X2FzeW1fb3BfY29va2llLAotCQkJCQlvdXRwdXRfcGFyYW1zX3B0cnMpOwotCi0JZm9yIChqID0g MDsgaiA8IDg7IGorKykgewotCQljb29raWUtPmlucHV0X3BhcmFtc19wdHJzW2pdID0KLQkJCQly dGVfbWVtcG9vbF92aXJ0MmlvdmEoY29va2llKSArCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IHFhdF9h c3ltX29wX2Nvb2tpZSwKLQkJCQkJCWlucHV0X2FycmF5W2pdKTsKLQkJY29va2llLT5vdXRwdXRf cGFyYW1zX3B0cnNbal0gPQotCQkJCXJ0ZV9tZW1wb29sX3ZpcnQyaW92YShjb29raWUpICsKLQkJ CQlvZmZzZXRvZihzdHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llLAotCQkJCQkJb3V0cHV0X2FycmF5 W2pdKTsKLQl9Ci19Ci0KIC8qIEFuIHJ0ZV9kcml2ZXIgaXMgbmVlZGVkIGluIHRoZSByZWdpc3Ry YXRpb24gb2YgYm90aCB0aGUgZGV2aWNlIGFuZCB0aGUgZHJpdmVyCiAgKiB3aXRoIGNyeXB0b2Rl di4KICAqIFRoZSBhY3R1YWwgcWF0IHBjaSdzIHJ0ZV9kcml2ZXIgY2FuJ3QgYmUgdXNlZCBhcyBp dHMgbmFtZSByZXByZXNlbnRzCkBAIC01Nyw4ICszMCw1MiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IHJ0ZV9kcml2ZXIgY3J5cHRvZGV2X3FhdF9hc3ltX2RyaXZlciA9IHsKIAkuYWxpYXMgPSBxYXRf YXN5bV9kcnZfbmFtZQogfTsKIAorI2lmIFJURV9MT0dfRFBfTEVWRUwgPj0gUlRFX0xPR19ERUJV RworI2RlZmluZSBIRVhEVU1QKG5hbWUsIHdoZXJlLCBzaXplKSBRQVRfRFBfSEVYRFVNUF9MT0co REVCVUcsIG5hbWUsIFwKKwkJCXdoZXJlLCBzaXplKQorI2RlZmluZSBIRVhEVU1QX09GRihuYW1l LCB3aGVyZSwgc2l6ZSwgaWR4KSBRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsIG5hbWUsIFwKKwkJ CSZ3aGVyZVtpZHggKiBzaXplXSwgc2l6ZSkKKyNlbHNlCisjZGVmaW5lIEhFWERVTVAobmFtZSwg d2hlcmUsIHNpemUpCisjZGVmaW5lIEhFWERVTVBfT0ZGKG5hbWUsIHdoZXJlLCBzaXplLCBpZHgp CisjZW5kaWYKIAotc3RhdGljIHZvaWQgcWF0X2NsZWFyX2FycmF5cyhzdHJ1Y3QgcWF0X2FzeW1f b3BfY29va2llICpjb29raWUsCisjZGVmaW5lIENIRUNLX0lGX05PVF9FTVBUWShwYXJhbSwgbmFt ZSwgcG5hbWUsIHN0YXR1cykgXAorCWRvIHsgXAorCQlpZiAocGFyYW0ubGVuZ3RoID09IDApIHsJ XAorCQkJUUFUX0xPRyhFUlIsCQkJXAorCQkJCSJJbnZhbGlkICIgbmFtZQlcCisJCQkJIiBpbnB1 dCBwYXJhbWV0ZXIsIHplcm8gbGVuZ3RoICIgcG5hbWUJXAorCQkJKTsJXAorCQkJc3RhdHVzID0g LUVJTlZBTDsJXAorCQl9IGVsc2UgaWYgKGNoZWNrX3plcm8ocGFyYW0pKSB7IFwKKwkJCVFBVF9M T0coRVJSLAlcCisJCQkJIkludmFsaWQgIiBuYW1lICIgaW5wdXQgcGFyYW1ldGVyLCBlbXB0eSAi IFwKKwkJCQlwbmFtZSAiLCBsZW5ndGggPSAlZCIsIFwKKwkJCQkoaW50KXBhcmFtLmxlbmd0aCBc CisJCQkpOyBcCisJCQlzdGF0dXMgPSAtRUlOVkFMOwlcCisJCX0gXAorCX0gd2hpbGUgKDApCisK KyNkZWZpbmUgU0VUX1BLRV9MTih3aGVyZSwgd2hhdCwgaG93LCBpZHgpIFwKKwlydGVfbWVtY3B5 KHdoZXJlW2lkeF0gKyBob3cgLSBcCisJCXdoYXQubGVuZ3RoLCBcCisJCXdoYXQuZGF0YSwgXAor CQl3aGF0Lmxlbmd0aCkKKworc3RhdGljIHZvaWQKK3JlcXVlc3RfaW5pdChzdHJ1Y3QgaWNwX3Fh dF9md19wa2VfcmVxdWVzdCAqcWF0X3JlcSkKK3sKKwltZW1zZXQocWF0X3JlcSwgMCwgc2l6ZW9m KCpxYXRfcmVxKSk7CisJcWF0X3JlcS0+cGtlX2hkci5zZXJ2aWNlX3R5cGUgPSBJQ1BfUUFUX0ZX X0NPTU5fUkVRX0NQTV9GV19QS0U7CisJcWF0X3JlcS0+cGtlX2hkci5oZHJfZmxhZ3MgPQorCQkJ SUNQX1FBVF9GV19DT01OX0hEUl9GTEFHU19CVUlMRAorCQkJKElDUF9RQVRfRldfQ09NTl9SRVFf RkxBR19TRVQpOworfQorCitzdGF0aWMgdm9pZAorY2xlYW51cF9hcnJheXMoc3RydWN0IHFhdF9h c3ltX29wX2Nvb2tpZSAqY29va2llLAogCQlpbnQgaW5fY291bnQsIGludCBvdXRfY291bnQsIGlu dCBhbGdfc2l6ZSkKIHsKIAlpbnQgaTsKQEAgLTgxLDQ2OSArOTksNDkwIEBAIHN0YXRpYyB2b2lk IHFhdF9jbGVhcl9hcnJheXNfY3J0KHN0cnVjdCBxYXRfYXN5bV9vcF9jb29raWUgKmNvb2tpZSwK IAkJbWVtc2V0KGNvb2tpZS0+b3V0cHV0X2FycmF5W2ldLCAweDAsIGFsZ19zaXplKTsKIH0KIAot c3RhdGljIHZvaWQgcWF0X2NsZWFyX2FycmF5c19ieV9hbGcoc3RydWN0IHFhdF9hc3ltX29wX2Nv b2tpZSAqY29va2llLAorc3RhdGljIHZvaWQKK2NsZWFudXAoc3RydWN0IHFhdF9hc3ltX29wX2Nv b2tpZSAqY29va2llLAogCQlzdHJ1Y3QgcnRlX2NyeXB0b19hc3ltX3hmb3JtICp4Zm9ybSwgaW50 IGFsZ19zaXplKQogewogCWlmICh4Zm9ybS0+eGZvcm1fdHlwZSA9PSBSVEVfQ1JZUFRPX0FTWU1f WEZPUk1fTU9ERVgpCi0JCXFhdF9jbGVhcl9hcnJheXMoY29va2llLCBRQVRfQVNZTV9NT0RFWFBf TlVNX0lOX1BBUkFNUywKKwkJY2xlYW51cF9hcnJheXMoY29va2llLCBRQVRfQVNZTV9NT0RFWFBf TlVNX0lOX1BBUkFNUywKIAkJCQlRQVRfQVNZTV9NT0RFWFBfTlVNX09VVF9QQVJBTVMsIGFsZ19z aXplKTsKIAllbHNlIGlmICh4Zm9ybS0+eGZvcm1fdHlwZSA9PSBSVEVfQ1JZUFRPX0FTWU1fWEZP Uk1fTU9ESU5WKQotCQlxYXRfY2xlYXJfYXJyYXlzKGNvb2tpZSwgUUFUX0FTWU1fTU9ESU5WX05V TV9JTl9QQVJBTVMsCisJCWNsZWFudXBfYXJyYXlzKGNvb2tpZSwgUUFUX0FTWU1fTU9ESU5WX05V TV9JTl9QQVJBTVMsCiAJCQkJUUFUX0FTWU1fTU9ESU5WX05VTV9PVVRfUEFSQU1TLCBhbGdfc2l6 ZSk7CiAJZWxzZSBpZiAoeGZvcm0tPnhmb3JtX3R5cGUgPT0gUlRFX0NSWVBUT19BU1lNX1hGT1JN X1JTQSkgewogCQlpZiAoeGZvcm0tPnJzYS5rZXlfdHlwZSA9PSBSVEVfUlNBX0tFWV9UWVBFX1FU KQotCQkJcWF0X2NsZWFyX2FycmF5c19jcnQoY29va2llLCBhbGdfc2l6ZSk7CisJCQljbGVhbnVw X2NydChjb29raWUsIGFsZ19zaXplKTsKIAkJZWxzZSB7Ci0JCQlxYXRfY2xlYXJfYXJyYXlzKGNv b2tpZSwgUUFUX0FTWU1fUlNBX05VTV9JTl9QQVJBTVMsCisJCQljbGVhbnVwX2FycmF5cyhjb29r aWUsIFFBVF9BU1lNX1JTQV9OVU1fSU5fUEFSQU1TLAogCQkJCVFBVF9BU1lNX1JTQV9OVU1fT1VU X1BBUkFNUywgYWxnX3NpemUpOwogCQl9CiAJfQogfQogCi0jZGVmaW5lIHFhdF9hc3ltX3N6XzJw YXJhbShhcmcpIChhcmcsIHNpemVvZihhcmcpL3NpemVvZigqYXJnKSkKLQogc3RhdGljIGludAot cWF0X2FzeW1fZ2V0X3N6X2FuZF9mdW5jX2lkKGNvbnN0IHVpbnQzMl90IGFycltdWzJdLAotCQlz aXplX3QgYXJyX3N6LCBzaXplX3QgKnNpemUsIHVpbnQzMl90ICpmdW5jX2lkKQorY2hlY2tfemVy byhydGVfY3J5cHRvX3BhcmFtIG4pCiB7Ci0Jc2l6ZV90IGk7CisJaW50IGksIGxlbiA9IG4ubGVu Z3RoOwogCi0JZm9yIChpID0gMDsgaSA8IGFycl9zejsgaSsrKSB7Ci0JCWlmICgqc2l6ZSA8PSBh cnJbaV1bMF0pIHsKLQkJCSpzaXplID0gYXJyW2ldWzBdOwotCQkJKmZ1bmNfaWQgPSBhcnJbaV1b MV07Ci0JCQlyZXR1cm4gMDsKKwlpZiAobGVuIDwgOCkgeworCQlmb3IgKGkgPSBsZW4gLSAxOyBp ID49IDA7IGktLSkgeworCQkJaWYgKG4uZGF0YVtpXSAhPSAweDApCisJCQkJcmV0dXJuIDA7CiAJ CX0KLQl9Ci0JcmV0dXJuIC0xOworCX0gZWxzZSBpZiAobGVuID09IDggJiYgKih1aW50NjRfdCAq KSZuLmRhdGFbbGVuIC0gOF0gPT0gMCkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKCoodWlu dDY0X3QgKikmbi5kYXRhW2xlbiAtIDhdID09IDApIHsKKwkJZm9yIChpID0gbGVuIC0gOTsgaSA+ PSAwOyBpLS0pIHsKKwkJCWlmIChuLmRhdGFbaV0gIT0gMHgwKQorCQkJCXJldHVybiAwOworCQl9 CisJfSBlbHNlCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzaXplX3QK LW1heF9vZihpbnQgbiwgLi4uKQorc3RhdGljIHN0cnVjdCBxYXRfYXN5bV9mdW5jdGlvbgorZ2V0 X2FzeW1fZnVuY3Rpb24oc3RydWN0IHJ0ZV9jcnlwdG9fYXN5bV94Zm9ybSAqeGZvcm0pCiB7Ci0J dmFfbGlzdCBhcmdzOwotCXNpemVfdCBsZW4gPSAwLCBudW07Ci0JaW50IGk7CisJc3RydWN0IHFh dF9hc3ltX2Z1bmN0aW9uIHFhdF9mdW5jdGlvbjsKKworCXN3aXRjaCAoeGZvcm0tPnhmb3JtX3R5 cGUpIHsKKwljYXNlIFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RFWDoKKwkJcWF0X2Z1bmN0aW9u ID0gZ2V0X21vZGV4cF9mdW5jdGlvbih4Zm9ybSk7CisJCWJyZWFrOworCWNhc2UgUlRFX0NSWVBU T19BU1lNX1hGT1JNX01PRElOVjoKKwkJcWF0X2Z1bmN0aW9uID0gZ2V0X21vZGludl9mdW5jdGlv bih4Zm9ybSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXFhdF9mdW5jdGlvbi5mdW5jX2lkID0g MDsKKwkJYnJlYWs7CisJfQogCi0JdmFfc3RhcnQoYXJncywgbik7Ci0JbGVuID0gdmFfYXJnKGFy Z3MsIHNpemVfdCk7CisJcmV0dXJuIHFhdF9mdW5jdGlvbjsKK30KIAotCWZvciAoaSA9IDA7IGkg PCBuIC0gMTsgaSsrKSB7Ci0JCW51bSA9IHZhX2FyZyhhcmdzLCBzaXplX3QpOwotCQlpZiAobnVt ID4gbGVuKQotCQkJbGVuID0gbnVtOworc3RhdGljIGludAorbW9kZXhwX3NldF9pbnB1dChzdHJ1 Y3QgcnRlX2NyeXB0b19hc3ltX29wICphc3ltX29wLAorCQlzdHJ1Y3QgaWNwX3FhdF9md19wa2Vf cmVxdWVzdCAqcWF0X3JlcSwKKwkJc3RydWN0IHFhdF9hc3ltX29wX2Nvb2tpZSAqY29va2llLAor CQlzdHJ1Y3QgcnRlX2NyeXB0b19hc3ltX3hmb3JtICp4Zm9ybSkKK3sKKwlzdHJ1Y3QgcWF0X2Fz eW1fZnVuY3Rpb24gcWF0X2Z1bmN0aW9uOworCXVpbnQzMl90IGFsZ19ieXRlc2l6ZSwgZnVuY19p ZDsKKwlpbnQgc3RhdHVzID0gMDsKKworCUNIRUNLX0lGX05PVF9FTVBUWSh4Zm9ybS0+bW9kZXgu bW9kdWx1cywgIm1vZCBleHAiLAorCQkJIm1vZHVsdXMiLCBzdGF0dXMpOworCUNIRUNLX0lGX05P VF9FTVBUWSh4Zm9ybS0+bW9kZXguZXhwb25lbnQsICJtb2QgZXhwIiwKKwkJCQkiZXhwb25lbnQi LCBzdGF0dXMpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlxYXRfZnVuY3Rp b24gPSBnZXRfYXN5bV9mdW5jdGlvbih4Zm9ybSk7CisJZnVuY19pZCA9IHFhdF9mdW5jdGlvbi5m dW5jX2lkOworCWlmIChxYXRfZnVuY3Rpb24uZnVuY19pZCA9PSAwKSB7CisJCVFBVF9MT0coRVJS LCAiQ2Fubm90IG9idGFpbiBmdW5jdGlvbmFsaXR5IGlkIik7CisJCXJldHVybiAtRUlOVkFMOwog CX0KLQl2YV9lbmQoYXJncyk7CisJYWxnX2J5dGVzaXplID0gcWF0X2Z1bmN0aW9uLmJ5dGVzaXpl OworCisJU0VUX1BLRV9MTihjb29raWUtPmlucHV0X2FycmF5LCBhc3ltX29wLT5tb2RleC5iYXNl LAorCQkJYWxnX2J5dGVzaXplLCAwKTsKKwlTRVRfUEtFX0xOKGNvb2tpZS0+aW5wdXRfYXJyYXks IHhmb3JtLT5tb2RleC5leHBvbmVudCwKKwkJCWFsZ19ieXRlc2l6ZSwgMSk7CisJU0VUX1BLRV9M Tihjb29raWUtPmlucHV0X2FycmF5LCB4Zm9ybS0+bW9kZXgubW9kdWx1cywKKwkJCWFsZ19ieXRl c2l6ZSwgMik7CisKKwljb29raWUtPmFsZ19ieXRlc2l6ZSA9IGFsZ19ieXRlc2l6ZTsKKwlxYXRf cmVxLT5wa2VfaGRyLmNkX3BhcnMuZnVuY19pZCA9IGZ1bmNfaWQ7CisJcWF0X3JlcS0+aW5wdXRf cGFyYW1fY291bnQgPSBRQVRfQVNZTV9NT0RFWFBfTlVNX0lOX1BBUkFNUzsKKwlxYXRfcmVxLT5v dXRwdXRfcGFyYW1fY291bnQgPSBRQVRfQVNZTV9NT0RFWFBfTlVNX09VVF9QQVJBTVM7CiAKLQly ZXR1cm4gbGVuOworCUhFWERVTVAoIk1vZEV4cCBiYXNlIiwgY29va2llLT5pbnB1dF9hcnJheVsw XSwgYWxnX2J5dGVzaXplKTsKKwlIRVhEVU1QKCJNb2RFeHAgZXhwb25lbnQiLCBjb29raWUtPmlu cHV0X2FycmF5WzFdLCBhbGdfYnl0ZXNpemUpOworCUhFWERVTVAoIk1vZEV4cCBtb2R1bHVzIiwg Y29va2llLT5pbnB1dF9hcnJheVsyXSwgYWxnX2J5dGVzaXplKTsKKworCXJldHVybiBzdGF0dXM7 CiB9CiAKLXN0YXRpYyBpbnQKLXFhdF9hc3ltX2NoZWNrX25vbnplcm8ocnRlX2NyeXB0b19wYXJh bSBuKQorc3RhdGljIHVpbnQ4X3QKK21vZGV4cF9jb2xsZWN0KHN0cnVjdCBydGVfY3J5cHRvX2Fz eW1fb3AgKmFzeW1fb3AsCisJCXN0cnVjdCBxYXRfYXN5bV9vcF9jb29raWUgKmNvb2tpZSwKKwkJ c3RydWN0IHJ0ZV9jcnlwdG9fYXN5bV94Zm9ybSAqeGZvcm0pCiB7Ci0JaWYgKG4ubGVuZ3RoIDwg OCkgewotCQkvKiBOb3QgYSBjYXNlIGZvciBhbnkgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbiBleGNl cHQgZm9yIERICi0JCSAqIGdlbmVyYXRvciB3aGljaCB2ZXJ5IG9mdGVuIGNhbiBiZSBvZiBvbmUg Ynl0ZSBsZW5ndGgKLQkJICovCi0JCXNpemVfdCBpOwotCi0JCWlmIChuLmRhdGFbbi5sZW5ndGgg LSAxXSA9PSAweDApIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBuLmxlbmd0aCAtIDE7IGkrKykKLQkJ CQlpZiAobi5kYXRhW2ldICE9IDB4MCkKLQkJCQkJYnJlYWs7Ci0JCQlpZiAoaSA9PSBuLmxlbmd0 aCAtIDEpCi0JCQkJcmV0dXJuIC0oRUlOVkFMKTsKLQkJfQotCX0gZWxzZSBpZiAoKih1aW50NjRf dCAqKSZuLmRhdGFbCi0JCQkJbi5sZW5ndGggLSA4XSA9PSAwKSB7Ci0JCS8qIFZlcnkgbGlrZWx5 IGl0IGlzIHplcm9lZCBtb2R1bHVzICovCi0JCXNpemVfdCBpOworCXJ0ZV9jcnlwdG9fcGFyYW0g biA9IHhmb3JtLT5tb2RleC5tb2R1bHVzOworCXVpbnQzMl90IGFsZ19ieXRlc2l6ZSA9IGNvb2tp ZS0+YWxnX2J5dGVzaXplOworCXVpbnQ4X3QgKm1vZGV4cF9yZXN1bHQgPSBhc3ltX29wLT5tb2Rl eC5yZXN1bHQuZGF0YTsKKworCXJ0ZV9tZW1jcHkobW9kZXhwX3Jlc3VsdCwKKwkJY29va2llLT5v dXRwdXRfYXJyYXlbMF0gKyBhbGdfYnl0ZXNpemUKKwkJLSBuLmxlbmd0aCwgbi5sZW5ndGgpOwor CUhFWERVTVAoIk1vZEV4cCByZXN1bHQiLCBjb29raWUtPm91dHB1dF9hcnJheVswXSwKKwkJCWFs Z19ieXRlc2l6ZSk7CisJcmV0dXJuIFJURV9DUllQVE9fT1BfU1RBVFVTX1NVQ0NFU1M7Cit9CiAK LQkJZm9yIChpID0gMDsgaSA8IG4ubGVuZ3RoIC0gODsgaSsrKQotCQkJaWYgKG4uZGF0YVtpXSAh PSAweDApCi0JCQkJYnJlYWs7Ci0JCWlmIChpID09IG4ubGVuZ3RoIC0gOCkKLQkJCXJldHVybiAt KEVJTlZBTCk7CitzdGF0aWMgaW50Cittb2RpbnZfc2V0X2lucHV0KHN0cnVjdCBydGVfY3J5cHRv X2FzeW1fb3AgKmFzeW1fb3AsCisJCXN0cnVjdCBpY3BfcWF0X2Z3X3BrZV9yZXF1ZXN0ICpxYXRf cmVxLAorCQlzdHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llICpjb29raWUsCisJCXN0cnVjdCBydGVf Y3J5cHRvX2FzeW1feGZvcm0gKnhmb3JtKQoreworCXN0cnVjdCBxYXRfYXN5bV9mdW5jdGlvbiBx YXRfZnVuY3Rpb247CisJdWludDMyX3QgYWxnX2J5dGVzaXplLCBmdW5jX2lkOworCWludCBzdGF0 dXMgPSAwOworCisJQ0hFQ0tfSUZfTk9UX0VNUFRZKHhmb3JtLT5tb2RleC5tb2R1bHVzLCAibW9k IGludiIsCisJCQkibW9kdWx1cyIsIHN0YXR1cyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0 YXR1czsKKworCXFhdF9mdW5jdGlvbiA9IGdldF9hc3ltX2Z1bmN0aW9uKHhmb3JtKTsKKwlmdW5j X2lkID0gcWF0X2Z1bmN0aW9uLmZ1bmNfaWQ7CisJaWYgKGZ1bmNfaWQgPT0gMCkgeworCQlRQVRf TE9HKEVSUiwgIkNhbm5vdCBvYnRhaW4gZnVuY3Rpb25hbGl0eSBpZCIpOworCQlyZXR1cm4gLUVJ TlZBTDsKIAl9CisJYWxnX2J5dGVzaXplID0gcWF0X2Z1bmN0aW9uLmJ5dGVzaXplOworCisJU0VU X1BLRV9MTihjb29raWUtPmlucHV0X2FycmF5LCBhc3ltX29wLT5tb2RpbnYuYmFzZSwKKwkJCWFs Z19ieXRlc2l6ZSwgMCk7CisJU0VUX1BLRV9MTihjb29raWUtPmlucHV0X2FycmF5LCB4Zm9ybS0+ bW9kaW52Lm1vZHVsdXMsCisJCQlhbGdfYnl0ZXNpemUsIDEpOworCisJY29va2llLT5hbGdfYnl0 ZXNpemUgPSBhbGdfYnl0ZXNpemU7CisJcWF0X3JlcS0+cGtlX2hkci5jZF9wYXJzLmZ1bmNfaWQg PSBmdW5jX2lkOworCXFhdF9yZXEtPmlucHV0X3BhcmFtX2NvdW50ID0KKwkJCVFBVF9BU1lNX01P RElOVl9OVU1fSU5fUEFSQU1TOworCXFhdF9yZXEtPm91dHB1dF9wYXJhbV9jb3VudCA9CisJCQlR QVRfQVNZTV9NT0RJTlZfTlVNX09VVF9QQVJBTVM7CisKKwlIRVhEVU1QKCJNb2RJbnYgYmFzZSIs IGNvb2tpZS0+aW5wdXRfYXJyYXlbMF0sIGFsZ19ieXRlc2l6ZSk7CisJSEVYRFVNUCgiTW9kSW52 IG1vZHVsdXMiLCBjb29raWUtPmlucHV0X2FycmF5WzFdLCBhbGdfYnl0ZXNpemUpOwogCiAJcmV0 dXJuIDA7CiB9CiAKK3N0YXRpYyB1aW50OF90Cittb2RpbnZfY29sbGVjdChzdHJ1Y3QgcnRlX2Ny eXB0b19hc3ltX29wICphc3ltX29wLAorCQlzdHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llICpjb29r aWUsCisJCXN0cnVjdCBydGVfY3J5cHRvX2FzeW1feGZvcm0gKnhmb3JtKQoreworCXJ0ZV9jcnlw dG9fcGFyYW0gbiA9IHhmb3JtLT5tb2RpbnYubW9kdWx1czsKKwl1aW50OF90ICptb2RpbnZfcmVz dWx0ID0gYXN5bV9vcC0+bW9kaW52LnJlc3VsdC5kYXRhOworCXVpbnQzMl90IGFsZ19ieXRlc2l6 ZSA9IGNvb2tpZS0+YWxnX2J5dGVzaXplOworCisJcnRlX21lbWNweShtb2RpbnZfcmVzdWx0ICsg KGFzeW1fb3AtPm1vZGludi5yZXN1bHQubGVuZ3RoCisJCS0gbi5sZW5ndGgpLAorCQljb29raWUt Pm91dHB1dF9hcnJheVswXSArIGFsZ19ieXRlc2l6ZQorCQktIG4ubGVuZ3RoLCBuLmxlbmd0aCk7 CisJSEVYRFVNUCgiTW9kSW52IHJlc3VsdCIsIGNvb2tpZS0+b3V0cHV0X2FycmF5WzBdLAorCQkJ YWxnX2J5dGVzaXplKTsKKwlyZXR1cm4gUlRFX0NSWVBUT19PUF9TVEFUVVNfU1VDQ0VTUzsKK30K Kwogc3RhdGljIGludAotcWF0X2FzeW1fZmlsbF9hcnJheXMoc3RydWN0IHJ0ZV9jcnlwdG9fYXN5 bV9vcCAqYXN5bV9vcCwKK3JzYV9zZXRfcHViX2lucHV0KHN0cnVjdCBydGVfY3J5cHRvX2FzeW1f b3AgKmFzeW1fb3AsCiAJCXN0cnVjdCBpY3BfcWF0X2Z3X3BrZV9yZXF1ZXN0ICpxYXRfcmVxLAog CQlzdHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llICpjb29raWUsCiAJCXN0cnVjdCBydGVfY3J5cHRv X2FzeW1feGZvcm0gKnhmb3JtKQogewotCWludCBlcnIgPSAwOwotCXNpemVfdCBhbGdfc2l6ZTsK LQlzaXplX3QgYWxnX3NpemVfaW5fYnl0ZXM7Ci0JdWludDMyX3QgZnVuY19pZCA9IDA7CisJc3Ry dWN0IHFhdF9hc3ltX2Z1bmN0aW9uIHFhdF9mdW5jdGlvbjsKKwl1aW50MzJfdCBhbGdfYnl0ZXNp emUsIGZ1bmNfaWQ7CisJaW50IHN0YXR1cyA9IDA7CisKKwlxYXRfZnVuY3Rpb24gPSBnZXRfcnNh X2VuY19mdW5jdGlvbih4Zm9ybSk7CisJZnVuY19pZCA9IHFhdF9mdW5jdGlvbi5mdW5jX2lkOwor CWlmIChmdW5jX2lkID09IDApIHsKKwkJUUFUX0xPRyhFUlIsICJDYW5ub3Qgb2J0YWluIGZ1bmN0 aW9uYWxpdHkgaWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWFsZ19ieXRlc2l6ZSA9IHFh dF9mdW5jdGlvbi5ieXRlc2l6ZTsKIAotCWlmICh4Zm9ybS0+eGZvcm1fdHlwZSA9PSBSVEVfQ1JZ UFRPX0FTWU1fWEZPUk1fTU9ERVgpIHsKLQkJZXJyID0gcWF0X2FzeW1fY2hlY2tfbm9uemVybyh4 Zm9ybS0+bW9kZXgubW9kdWx1cyk7Ci0JCWlmIChlcnIpIHsKLQkJCVFBVF9MT0coRVJSLCAiRW1w dHkgbW9kdWx1cyBpbiBtb2R1bGFyIGV4cG9uZW50aWF0aW9uLCIKLQkJCQkJIiBhYm9ydGluZyB0 aGlzIG9wZXJhdGlvbiIpOwotCQkJcmV0dXJuIGVycjsKKwlpZiAoYXN5bV9vcC0+cnNhLm9wX3R5 cGUgPT0gUlRFX0NSWVBUT19BU1lNX09QX0VOQ1JZUFQpIHsKKwkJc3dpdGNoIChhc3ltX29wLT5y c2EucGFkKSB7CisJCWNhc2UgUlRFX0NSWVBUT19SU0FfUEFERElOR19OT05FOgorCQkJU0VUX1BL RV9MTihjb29raWUtPmlucHV0X2FycmF5LCBhc3ltX29wLT5yc2EubWVzc2FnZSwKKwkJCQkJYWxn X2J5dGVzaXplLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUUFUX0xPRyhFUlIsCisJ CQkJIkludmFsaWQgUlNBIHBhZGRpbmcgKEVuY3J5cHRpb24pIgorCQkJCSk7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCQlIRVhEVU1QKCJSU0EgTWVzc2FnZSIsIGNvb2tpZS0+aW5wdXRfYXJy YXlbMF0sIGFsZ19ieXRlc2l6ZSk7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChhc3ltX29wLT5yc2Eu cGFkKSB7CisJCWNhc2UgUlRFX0NSWVBUT19SU0FfUEFERElOR19OT05FOgorCQkJU0VUX1BLRV9M Tihjb29raWUtPmlucHV0X2FycmF5LCBhc3ltX29wLT5yc2Euc2lnbiwKKwkJCQkJYWxnX2J5dGVz aXplLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUUFUX0xPRyhFUlIsCisJCQkJIklu dmFsaWQgUlNBIHBhZGRpbmcgKFZlcmlmeSkiKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJ CUhFWERVTVAoIlJTQSBTaWduYXR1cmUiLCBjb29raWUtPmlucHV0X2FycmF5WzBdLAorCQkJCWFs Z19ieXRlc2l6ZSk7CisJfQogCi0JCWFsZ19zaXplX2luX2J5dGVzID0gbWF4X29mKDMsIGFzeW1f b3AtPm1vZGV4LmJhc2UubGVuZ3RoLAotCQkJICAgICAgIHhmb3JtLT5tb2RleC5leHBvbmVudC5s ZW5ndGgsCi0JCQkgICAgICAgeGZvcm0tPm1vZGV4Lm1vZHVsdXMubGVuZ3RoKTsKLQkJYWxnX3Np emUgPSBhbGdfc2l6ZV9pbl9ieXRlcyA8PCAzOworCVNFVF9QS0VfTE4oY29va2llLT5pbnB1dF9h cnJheSwgeGZvcm0tPnJzYS5lLAorCQkJYWxnX2J5dGVzaXplLCAxKTsKKwlTRVRfUEtFX0xOKGNv b2tpZS0+aW5wdXRfYXJyYXksIHhmb3JtLT5yc2EubiwKKwkJCWFsZ19ieXRlc2l6ZSwgMik7CiAK LQkJaWYgKHFhdF9hc3ltX2dldF9zel9hbmRfZnVuY19pZChNT0RfRVhQX1NJWkUsCi0JCQkJc2l6 ZW9mKE1PRF9FWFBfU0laRSkvc2l6ZW9mKCpNT0RfRVhQX1NJWkUpLAotCQkJCSZhbGdfc2l6ZSwg JmZ1bmNfaWQpKSB7Ci0JCQlyZXR1cm4gLShFSU5WQUwpOwotCQl9CisJY29va2llLT5hbGdfYnl0 ZXNpemUgPSBhbGdfYnl0ZXNpemU7CisJcWF0X3JlcS0+cGtlX2hkci5jZF9wYXJzLmZ1bmNfaWQg PSBmdW5jX2lkOwogCi0JCWFsZ19zaXplX2luX2J5dGVzID0gYWxnX3NpemUgPj4gMzsKLQkJcnRl X21lbWNweShjb29raWUtPmlucHV0X2FycmF5WzBdICsgYWxnX3NpemVfaW5fYnl0ZXMgLQotCQkJ YXN5bV9vcC0+bW9kZXguYmFzZS5sZW5ndGgKLQkJCSwgYXN5bV9vcC0+bW9kZXguYmFzZS5kYXRh LAotCQkJYXN5bV9vcC0+bW9kZXguYmFzZS5sZW5ndGgpOwotCQlydGVfbWVtY3B5KGNvb2tpZS0+ aW5wdXRfYXJyYXlbMV0gKyBhbGdfc2l6ZV9pbl9ieXRlcyAtCi0JCQl4Zm9ybS0+bW9kZXguZXhw b25lbnQubGVuZ3RoCi0JCQksIHhmb3JtLT5tb2RleC5leHBvbmVudC5kYXRhLAotCQkJeGZvcm0t Pm1vZGV4LmV4cG9uZW50Lmxlbmd0aCk7Ci0JCXJ0ZV9tZW1jcHkoY29va2llLT5pbnB1dF9hcnJh eVsyXSAgKyBhbGdfc2l6ZV9pbl9ieXRlcyAtCi0JCQl4Zm9ybS0+bW9kZXgubW9kdWx1cy5sZW5n dGgsCi0JCQl4Zm9ybS0+bW9kZXgubW9kdWx1cy5kYXRhLAotCQkJeGZvcm0tPm1vZGV4Lm1vZHVs dXMubGVuZ3RoKTsKLQkJY29va2llLT5hbGdfc2l6ZSA9IGFsZ19zaXplOwotCQlxYXRfcmVxLT5w a2VfaGRyLmNkX3BhcnMuZnVuY19pZCA9IGZ1bmNfaWQ7Ci0JCXFhdF9yZXEtPmlucHV0X3BhcmFt X2NvdW50ID0gUUFUX0FTWU1fTU9ERVhQX05VTV9JTl9QQVJBTVM7Ci0JCXFhdF9yZXEtPm91dHB1 dF9wYXJhbV9jb3VudCA9IFFBVF9BU1lNX01PREVYUF9OVU1fT1VUX1BBUkFNUzsKLSNpZiBSVEVf TE9HX0RQX0xFVkVMID49IFJURV9MT0dfREVCVUcKLQkJUUFUX0RQX0hFWERVTVBfTE9HKERFQlVH LCAiTW9kRXhwIGJhc2UiLAotCQkJCWNvb2tpZS0+aW5wdXRfYXJyYXlbMF0sCi0JCQkJYWxnX3Np emVfaW5fYnl0ZXMpOwotCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJNb2RFeHAgZXhwb25l bnQiLAotCQkJCWNvb2tpZS0+aW5wdXRfYXJyYXlbMV0sCi0JCQkJYWxnX3NpemVfaW5fYnl0ZXMp OwotCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICIgTW9kRXhwbW9kdWx1cyIsCi0JCQkJY29v a2llLT5pbnB1dF9hcnJheVsyXSwKLQkJCQlhbGdfc2l6ZV9pbl9ieXRlcyk7Ci0jZW5kaWYKLQl9 IGVsc2UgaWYgKHhmb3JtLT54Zm9ybV90eXBlID09IFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RJ TlYpIHsKLQkJZXJyID0gcWF0X2FzeW1fY2hlY2tfbm9uemVybyh4Zm9ybS0+bW9kaW52Lm1vZHVs dXMpOwotCQlpZiAoZXJyKSB7Ci0JCQlRQVRfTE9HKEVSUiwgIkVtcHR5IG1vZHVsdXMgaW4gbW9k dWxhciBtdWx0aXBsaWNhdGl2ZSIKLQkJCQkJIiBpbnZlcnNlLCBhYm9ydGluZyB0aGlzIG9wZXJh dGlvbiIpOwotCQkJcmV0dXJuIGVycjsKKwlIRVhEVU1QKCJSU0EgUHVibGljIEtleSIsIGNvb2tp ZS0+aW5wdXRfYXJyYXlbMV0sIGFsZ19ieXRlc2l6ZSk7CisJSEVYRFVNUCgiUlNBIE1vZHVsdXMi LCBjb29raWUtPmlucHV0X2FycmF5WzJdLCBhbGdfYnl0ZXNpemUpOworCisJcmV0dXJuIHN0YXR1 czsKK30KKworc3RhdGljIGludAorcnNhX3NldF9wcml2X2lucHV0KHN0cnVjdCBydGVfY3J5cHRv X2FzeW1fb3AgKmFzeW1fb3AsCisJCXN0cnVjdCBpY3BfcWF0X2Z3X3BrZV9yZXF1ZXN0ICpxYXRf cmVxLAorCQlzdHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llICpjb29raWUsCisJCXN0cnVjdCBydGVf Y3J5cHRvX2FzeW1feGZvcm0gKnhmb3JtKQoreworCXN0cnVjdCBxYXRfYXN5bV9mdW5jdGlvbiBx YXRfZnVuY3Rpb247CisJdWludDMyX3QgYWxnX2J5dGVzaXplLCBmdW5jX2lkOworCWludCBzdGF0 dXMgPSAwOworCisJaWYgKHhmb3JtLT5yc2Eua2V5X3R5cGUgPT0gUlRFX1JTQV9LRVlfVFlQRV9R VCkgeworCQlxYXRfZnVuY3Rpb24gPSBnZXRfcnNhX2NydF9mdW5jdGlvbih4Zm9ybSk7CisJCWZ1 bmNfaWQgPSBxYXRfZnVuY3Rpb24uZnVuY19pZDsKKwkJaWYgKGZ1bmNfaWQgPT0gMCkgeworCQkJ UUFUX0xPRyhFUlIsICJDYW5ub3Qgb2J0YWluIGZ1bmN0aW9uYWxpdHkgaWQiKTsKKwkJCXJldHVy biAtRUlOVkFMOwogCQl9CisJCWFsZ19ieXRlc2l6ZSA9IHFhdF9mdW5jdGlvbi5ieXRlc2l6ZTsK KwkJcWF0X3JlcS0+aW5wdXRfcGFyYW1fY291bnQgPQorCQkJCVFBVF9BU1lNX1JTQV9RVF9OVU1f SU5fUEFSQU1TOworCisJCVNFVF9QS0VfTE4oY29va2llLT5pbnB1dF9hcnJheSwgeGZvcm0tPnJz YS5xdC5wLAorCQkJKGFsZ19ieXRlc2l6ZSA+PiAxKSwgMSk7CisJCVNFVF9QS0VfTE4oY29va2ll LT5pbnB1dF9hcnJheSwgeGZvcm0tPnJzYS5xdC5xLAorCQkJKGFsZ19ieXRlc2l6ZSA+PiAxKSwg Mik7CisJCVNFVF9QS0VfTE4oY29va2llLT5pbnB1dF9hcnJheSwgeGZvcm0tPnJzYS5xdC5kUCwK KwkJCShhbGdfYnl0ZXNpemUgPj4gMSksIDMpOworCQlTRVRfUEtFX0xOKGNvb2tpZS0+aW5wdXRf YXJyYXksIHhmb3JtLT5yc2EucXQuZFEsCisJCQkoYWxnX2J5dGVzaXplID4+IDEpLCA0KTsKKwkJ U0VUX1BLRV9MTihjb29raWUtPmlucHV0X2FycmF5LCB4Zm9ybS0+cnNhLnF0LnFJbnYsCisJCQko YWxnX2J5dGVzaXplID4+IDEpLCA1KTsKKworCQlIRVhEVU1QKCJSU0EgcCIsIGNvb2tpZS0+aW5w dXRfYXJyYXlbMV0sCisJCQkJYWxnX2J5dGVzaXplKTsKKwkJSEVYRFVNUCgiUlNBIHEiLCBjb29r aWUtPmlucHV0X2FycmF5WzJdLAorCQkJCWFsZ19ieXRlc2l6ZSk7CisJCUhFWERVTVAoIlJTQSBk UCIsIGNvb2tpZS0+aW5wdXRfYXJyYXlbM10sCisJCQkJYWxnX2J5dGVzaXplKTsKKwkJSEVYRFVN UCgiUlNBIGRRIiwgY29va2llLT5pbnB1dF9hcnJheVs0XSwKKwkJCQlhbGdfYnl0ZXNpemUpOwor CQlIRVhEVU1QKCJSU0EgcUludiIsIGNvb2tpZS0+aW5wdXRfYXJyYXlbNV0sCisJCQkJYWxnX2J5 dGVzaXplKTsKKwl9IGVsc2UgaWYgKHhmb3JtLT5yc2Eua2V5X3R5cGUgPT0KKwkJCVJURV9SU0Ff S0VZX1RZUEVfRVhQKSB7CisJCXFhdF9mdW5jdGlvbiA9IGdldF9yc2FfZGVjX2Z1bmN0aW9uKHhm b3JtKTsKKwkJZnVuY19pZCA9IHFhdF9mdW5jdGlvbi5mdW5jX2lkOworCQlpZiAoZnVuY19pZCA9 PSAwKSB7CisJCQlRQVRfTE9HKEVSUiwgIkNhbm5vdCBvYnRhaW4gZnVuY3Rpb25hbGl0eSBpZCIp OworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYWxnX2J5dGVzaXplID0gcWF0X2Z1bmN0aW9u LmJ5dGVzaXplOwogCi0JCWFsZ19zaXplX2luX2J5dGVzID0gbWF4X29mKDIsIGFzeW1fb3AtPm1v ZGludi5iYXNlLmxlbmd0aCwKLQkJCQl4Zm9ybS0+bW9kaW52Lm1vZHVsdXMubGVuZ3RoKTsKLQkJ YWxnX3NpemUgPSBhbGdfc2l6ZV9pbl9ieXRlcyA8PCAzOwotCi0JCWlmICh4Zm9ybS0+bW9kaW52 Lm1vZHVsdXMuZGF0YVsKLQkJCQl4Zm9ybS0+bW9kaW52Lm1vZHVsdXMubGVuZ3RoIC0gMV0gJiAw eDAxKSB7Ci0JCQlpZiAocWF0X2FzeW1fZ2V0X3N6X2FuZF9mdW5jX2lkKE1PRF9JTlZfSURTX09E RCwKLQkJCQkJc2l6ZW9mKE1PRF9JTlZfSURTX09ERCkvCi0JCQkJCXNpemVvZigqTU9EX0lOVl9J RFNfT0REKSwKLQkJCQkJJmFsZ19zaXplLCAmZnVuY19pZCkpIHsKLQkJCQlyZXR1cm4gLShFSU5W QUwpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKHFhdF9hc3ltX2dldF9zel9hbmRfZnVuY19p ZChNT0RfSU5WX0lEU19FVkVOLAotCQkJCQlzaXplb2YoTU9EX0lOVl9JRFNfRVZFTikvCi0JCQkJ CXNpemVvZigqTU9EX0lOVl9JRFNfRVZFTiksCi0JCQkJCSZhbGdfc2l6ZSwgJmZ1bmNfaWQpKSB7 Ci0JCQkJcmV0dXJuIC0oRUlOVkFMKTsKLQkJCX0KKwkJU0VUX1BLRV9MTihjb29raWUtPmlucHV0 X2FycmF5LCB4Zm9ybS0+cnNhLmQsCisJCQlhbGdfYnl0ZXNpemUsIDEpOworCQlTRVRfUEtFX0xO KGNvb2tpZS0+aW5wdXRfYXJyYXksIHhmb3JtLT5yc2EubiwKKwkJCWFsZ19ieXRlc2l6ZSwgMik7 CisKKwkJSEVYRFVNUCgiUlNBIGQiLCBjb29raWUtPmlucHV0X2FycmF5WzFdLAorCQkJCWFsZ19i eXRlc2l6ZSk7CisJCUhFWERVTVAoIlJTQSBuIiwgY29va2llLT5pbnB1dF9hcnJheVsyXSwKKwkJ CQlhbGdfYnl0ZXNpemUpOworCX0gZWxzZSB7CisJCVFBVF9MT0coRVJSLCAiSW52YWxpZCBSU0Eg a2V5IHR5cGUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFzeW1fb3AtPnJzYS5v cF90eXBlID09CisJCQlSVEVfQ1JZUFRPX0FTWU1fT1BfREVDUllQVCkgeworCQlzd2l0Y2ggKGFz eW1fb3AtPnJzYS5wYWQpIHsKKwkJY2FzZSBSVEVfQ1JZUFRPX1JTQV9QQURESU5HX05PTkU6CisJ CQlTRVRfUEtFX0xOKGNvb2tpZS0+aW5wdXRfYXJyYXksIGFzeW1fb3AtPnJzYS5jaXBoZXIsCisJ CQkJYWxnX2J5dGVzaXplLCAwKTsKKwkJCUhFWERVTVAoIlJTQSBjaXBoZXJ0ZXh0IiwgY29va2ll LT5pbnB1dF9hcnJheVswXSwKKwkJCQlhbGdfYnl0ZXNpemUpOworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQlRQVRfTE9HKEVSUiwKKwkJCQkiSW52YWxpZCBwYWRkaW5nIG9mIFJTQSAoRGVjcnlw dCkiKTsKKwkJCXJldHVybiAtKEVJTlZBTCk7CiAJCX0KIAotCQlhbGdfc2l6ZV9pbl9ieXRlcyA9 IGFsZ19zaXplID4+IDM7Ci0JCXJ0ZV9tZW1jcHkoY29va2llLT5pbnB1dF9hcnJheVswXSArIGFs Z19zaXplX2luX2J5dGVzIC0KLQkJCWFzeW1fb3AtPm1vZGludi5iYXNlLmxlbmd0aAotCQkJCSwg YXN5bV9vcC0+bW9kaW52LmJhc2UuZGF0YSwKLQkJCQlhc3ltX29wLT5tb2RpbnYuYmFzZS5sZW5n dGgpOwotCQlydGVfbWVtY3B5KGNvb2tpZS0+aW5wdXRfYXJyYXlbMV0gKyBhbGdfc2l6ZV9pbl9i eXRlcyAtCi0JCQkJeGZvcm0tPm1vZGludi5tb2R1bHVzLmxlbmd0aAotCQkJCSwgeGZvcm0tPm1v ZGludi5tb2R1bHVzLmRhdGEsCi0JCQkJeGZvcm0tPm1vZGludi5tb2R1bHVzLmxlbmd0aCk7Ci0J CWNvb2tpZS0+YWxnX3NpemUgPSBhbGdfc2l6ZTsKLQkJcWF0X3JlcS0+cGtlX2hkci5jZF9wYXJz LmZ1bmNfaWQgPSBmdW5jX2lkOwotCQlxYXRfcmVxLT5pbnB1dF9wYXJhbV9jb3VudCA9Ci0JCQkJ UUFUX0FTWU1fTU9ESU5WX05VTV9JTl9QQVJBTVM7Ci0JCXFhdF9yZXEtPm91dHB1dF9wYXJhbV9j b3VudCA9Ci0JCQkJUUFUX0FTWU1fTU9ESU5WX05VTV9PVVRfUEFSQU1TOwotI2lmIFJURV9MT0df RFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRwotCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJN b2RJbnYgYmFzZSIsCi0JCQkJY29va2llLT5pbnB1dF9hcnJheVswXSwKLQkJCQlhbGdfc2l6ZV9p bl9ieXRlcyk7Ci0JCVFBVF9EUF9IRVhEVU1QX0xPRyhERUJVRywgIk1vZEludiBtb2R1bHVzIiwK LQkJCQljb29raWUtPmlucHV0X2FycmF5WzFdLAotCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKLSNl bmRpZgotCX0gZWxzZSBpZiAoeGZvcm0tPnhmb3JtX3R5cGUgPT0gUlRFX0NSWVBUT19BU1lNX1hG T1JNX1JTQSkgewotCQllcnIgPSBxYXRfYXN5bV9jaGVja19ub256ZXJvKHhmb3JtLT5yc2Eubik7 Ci0JCWlmIChlcnIpIHsKLQkJCVFBVF9MT0coRVJSLCAiRW1wdHkgbW9kdWx1cyBpbiBSU0EiCi0J CQkJCSIgaW52ZXJzZSwgYWJvcnRpbmcgdGhpcyBvcGVyYXRpb24iKTsKLQkJCXJldHVybiBlcnI7 CisJfSBlbHNlIGlmIChhc3ltX29wLT5yc2Eub3BfdHlwZSA9PQorCQkJUlRFX0NSWVBUT19BU1lN X09QX1NJR04pIHsKKwkJc3dpdGNoIChhc3ltX29wLT5yc2EucGFkKSB7CisJCWNhc2UgUlRFX0NS WVBUT19SU0FfUEFERElOR19OT05FOgorCQkJU0VUX1BLRV9MTihjb29raWUtPmlucHV0X2FycmF5 LCBhc3ltX29wLT5yc2EubWVzc2FnZSwKKwkJCQlhbGdfYnl0ZXNpemUsIDApOworCQkJSEVYRFVN UCgiUlNBIHRleHQgdG8gYmUgc2lnbmVkIiwgY29va2llLT5pbnB1dF9hcnJheVswXSwKKwkJCQlh bGdfYnl0ZXNpemUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlRQVRfTE9HKEVSUiwKKwkJ CQkiSW52YWxpZCBwYWRkaW5nIG9mIFJTQSAoU2lnbmF0dXJlKSIpOworCQkJcmV0dXJuIC0oRUlO VkFMKTsKIAkJfQorCX0KIAotCQlhbGdfc2l6ZV9pbl9ieXRlcyA9IHhmb3JtLT5yc2Eubi5sZW5n dGg7Ci0JCWFsZ19zaXplID0gYWxnX3NpemVfaW5fYnl0ZXMgPDwgMzsKKwljb29raWUtPmFsZ19i eXRlc2l6ZSA9IGFsZ19ieXRlc2l6ZTsKKwlxYXRfcmVxLT5wa2VfaGRyLmNkX3BhcnMuZnVuY19p ZCA9IGZ1bmNfaWQ7CisJcmV0dXJuIHN0YXR1czsKK30KIAotCQlxYXRfcmVxLT5pbnB1dF9wYXJh bV9jb3VudCA9Ci0JCQkJUUFUX0FTWU1fUlNBX05VTV9JTl9QQVJBTVM7Ci0JCXFhdF9yZXEtPm91 dHB1dF9wYXJhbV9jb3VudCA9Ci0JCQkJUUFUX0FTWU1fUlNBX05VTV9PVVRfUEFSQU1TOwotCi0J CWlmIChhc3ltX29wLT5yc2Eub3BfdHlwZSA9PSBSVEVfQ1JZUFRPX0FTWU1fT1BfRU5DUllQVCB8 fAotCQkJCWFzeW1fb3AtPnJzYS5vcF90eXBlID09Ci0JCQkJCQlSVEVfQ1JZUFRPX0FTWU1fT1Bf VkVSSUZZKSB7Ci0KLQkJCWlmIChxYXRfYXN5bV9nZXRfc3pfYW5kX2Z1bmNfaWQoUlNBX0VOQ19J RFMsCi0JCQkJCXNpemVvZihSU0FfRU5DX0lEUykvCi0JCQkJCXNpemVvZigqUlNBX0VOQ19JRFMp LAotCQkJCQkmYWxnX3NpemUsICZmdW5jX2lkKSkgewotCQkJCWVyciA9IC0oRUlOVkFMKTsKLQkJ CQlRQVRfTE9HKEVSUiwKLQkJCQkJIk5vdCBzdXBwb3J0ZWQgUlNBIHBhcmFtZXRlciBzaXplIChr ZXkpIik7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KLQkJCWFsZ19zaXplX2luX2J5dGVzID0gYWxn X3NpemUgPj4gMzsKLQkJCWlmIChhc3ltX29wLT5yc2Eub3BfdHlwZSA9PSBSVEVfQ1JZUFRPX0FT WU1fT1BfRU5DUllQVCkgewotCQkJCXN3aXRjaCAoYXN5bV9vcC0+cnNhLnBhZCkgewotCQkJCWNh c2UgUlRFX0NSWVBUT19SU0FfUEFERElOR19OT05FOgotCQkJCQlydGVfbWVtY3B5KGNvb2tpZS0+ aW5wdXRfYXJyYXlbMF0gKwotCQkJCQkJYWxnX3NpemVfaW5fYnl0ZXMgLQotCQkJCQkJYXN5bV9v cC0+cnNhLm1lc3NhZ2UubGVuZ3RoCi0JCQkJCQksIGFzeW1fb3AtPnJzYS5tZXNzYWdlLmRhdGEs Ci0JCQkJCQlhc3ltX29wLT5yc2EubWVzc2FnZS5sZW5ndGgpOwotCQkJCQlicmVhazsKLQkJCQlk ZWZhdWx0OgotCQkJCQllcnIgPSAtKEVJTlZBTCk7Ci0JCQkJCVFBVF9MT0coRVJSLAotCQkJCQkJ IkludmFsaWQgUlNBIHBhZGRpbmcgKEVuY3J5cHRpb24pIik7Ci0JCQkJCXJldHVybiBlcnI7Ci0J CQkJfQotI2lmIFJURV9MT0dfRFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRwotCQkJCVFBVF9EUF9I RVhEVU1QX0xPRyhERUJVRywgIlJTQSBNZXNzYWdlIiwKLQkJCQkJCWNvb2tpZS0+aW5wdXRfYXJy YXlbMF0sCi0JCQkJCQlhbGdfc2l6ZV9pbl9ieXRlcyk7Ci0jZW5kaWYKLQkJCX0gZWxzZSB7Ci0J CQkJc3dpdGNoIChhc3ltX29wLT5yc2EucGFkKSB7Ci0JCQkJY2FzZSBSVEVfQ1JZUFRPX1JTQV9Q QURESU5HX05PTkU6Ci0JCQkJCXJ0ZV9tZW1jcHkoY29va2llLT5pbnB1dF9hcnJheVswXSwKLQkJ CQkJCWFzeW1fb3AtPnJzYS5zaWduLmRhdGEsCi0JCQkJCQlhbGdfc2l6ZV9pbl9ieXRlcyk7Ci0J CQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWVyciA9IC0oRUlOVkFMKTsKLQkJCQkJUUFU X0xPRyhFUlIsCi0JCQkJCQkiSW52YWxpZCBSU0EgcGFkZGluZyAoVmVyaWZ5KSIpOwotCQkJCQly ZXR1cm4gZXJyOwotCQkJCX0KK3N0YXRpYyBpbnQKK3JzYV9zZXRfaW5wdXQoc3RydWN0IHJ0ZV9j cnlwdG9fYXN5bV9vcCAqYXN5bV9vcCwKKwkJc3RydWN0IGljcF9xYXRfZndfcGtlX3JlcXVlc3Qg KnFhdF9yZXEsCisJCXN0cnVjdCBxYXRfYXN5bV9vcF9jb29raWUgKmNvb2tpZSwKKwkJc3RydWN0 IHJ0ZV9jcnlwdG9fYXN5bV94Zm9ybSAqeGZvcm0pCit7CisJcWF0X3JlcS0+aW5wdXRfcGFyYW1f Y291bnQgPQorCQkJUUFUX0FTWU1fUlNBX05VTV9JTl9QQVJBTVM7CisJcWF0X3JlcS0+b3V0cHV0 X3BhcmFtX2NvdW50ID0KKwkJCVFBVF9BU1lNX1JTQV9OVU1fT1VUX1BBUkFNUzsKKworCWlmIChh c3ltX29wLT5yc2Eub3BfdHlwZSA9PSBSVEVfQ1JZUFRPX0FTWU1fT1BfRU5DUllQVCB8fAorCQkJ YXN5bV9vcC0+cnNhLm9wX3R5cGUgPT0KKwkJCQlSVEVfQ1JZUFRPX0FTWU1fT1BfVkVSSUZZKSB7 CisJCXJldHVybiByc2Ffc2V0X3B1Yl9pbnB1dChhc3ltX29wLCBxYXRfcmVxLCBjb29raWUsIHhm b3JtKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gcnNhX3NldF9wcml2X2lucHV0KGFzeW1fb3AsIHFh dF9yZXEsIGNvb2tpZSwgeGZvcm0pOworCX0KK30KIAotI2lmIFJURV9MT0dfRFBfTEVWRUwgPj0g UlRFX0xPR19ERUJVRwotCQkJCVFBVF9EUF9IRVhEVU1QX0xPRyhERUJVRywgIiBSU0EgU2lnbmF0 dXJlIiwKLQkJCQkJCWNvb2tpZS0+aW5wdXRfYXJyYXlbMF0sCi0JCQkJCQlhbGdfc2l6ZV9pbl9i eXRlcyk7Ci0jZW5kaWYKK3N0YXRpYyB1aW50OF90Cityc2FfY29sbGVjdChzdHJ1Y3QgcnRlX2Ny eXB0b19hc3ltX29wICphc3ltX29wLAorCQlzdHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llICpjb29r aWUpCit7CisJdWludDMyX3QgYWxnX2J5dGVzaXplID0gY29va2llLT5hbGdfYnl0ZXNpemU7CiAK LQkJCX0KLQkJCXJ0ZV9tZW1jcHkoY29va2llLT5pbnB1dF9hcnJheVsxXSArCi0JCQkJCWFsZ19z aXplX2luX2J5dGVzIC0KLQkJCQkJeGZvcm0tPnJzYS5lLmxlbmd0aAotCQkJCQksIHhmb3JtLT5y c2EuZS5kYXRhLAotCQkJCQl4Zm9ybS0+cnNhLmUubGVuZ3RoKTsKLQkJCXJ0ZV9tZW1jcHkoY29v a2llLT5pbnB1dF9hcnJheVsyXSArCi0JCQkJCWFsZ19zaXplX2luX2J5dGVzIC0KLQkJCQkJeGZv cm0tPnJzYS5uLmxlbmd0aCwKLQkJCQkJeGZvcm0tPnJzYS5uLmRhdGEsCi0JCQkJCXhmb3JtLT5y c2Eubi5sZW5ndGgpOwotCi0JCQljb29raWUtPmFsZ19zaXplID0gYWxnX3NpemU7Ci0JCQlxYXRf cmVxLT5wa2VfaGRyLmNkX3BhcnMuZnVuY19pZCA9IGZ1bmNfaWQ7CisJaWYgKGFzeW1fb3AtPnJz YS5vcF90eXBlID09IFJURV9DUllQVE9fQVNZTV9PUF9FTkNSWVBUIHx8CisJCWFzeW1fb3AtPnJz YS5vcF90eXBlID09CVJURV9DUllQVE9fQVNZTV9PUF9WRVJJRlkpIHsKIAotI2lmIFJURV9MT0df RFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRwotCQkJUUFUX0RQX0hFWERVTVBfTE9HKERFQlVHLCAi UlNBIFB1YmxpYyBLZXkiLAotCQkJCQljb29raWUtPmlucHV0X2FycmF5WzFdLCBhbGdfc2l6ZV9p bl9ieXRlcyk7Ci0JCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJSU0EgTW9kdWx1cyIsCi0J CQkJCWNvb2tpZS0+aW5wdXRfYXJyYXlbMl0sIGFsZ19zaXplX2luX2J5dGVzKTsKLSNlbmRpZgot CQl9IGVsc2UgewotCQkJaWYgKGFzeW1fb3AtPnJzYS5vcF90eXBlID09Ci0JCQkJCVJURV9DUllQ VE9fQVNZTV9PUF9ERUNSWVBUKSB7Ci0JCQkJc3dpdGNoIChhc3ltX29wLT5yc2EucGFkKSB7Ci0J CQkJY2FzZSBSVEVfQ1JZUFRPX1JTQV9QQURESU5HX05PTkU6Ci0JCQkJCXJ0ZV9tZW1jcHkoY29v a2llLT5pbnB1dF9hcnJheVswXQotCQkJCQkJKyBhbGdfc2l6ZV9pbl9ieXRlcyAtCi0JCQkJCQlh c3ltX29wLT5yc2EuY2lwaGVyLmxlbmd0aCwKLQkJCQkJCWFzeW1fb3AtPnJzYS5jaXBoZXIuZGF0 YSwKLQkJCQkJCWFzeW1fb3AtPnJzYS5jaXBoZXIubGVuZ3RoKTsKLQkJCQkJYnJlYWs7Ci0JCQkJ ZGVmYXVsdDoKLQkJCQkJUUFUX0xPRyhFUlIsCi0JCQkJCQkiSW52YWxpZCBwYWRkaW5nIG9mIFJT QSAoRGVjcnlwdCkiKTsKLQkJCQkJcmV0dXJuIC0oRUlOVkFMKTsKLQkJCQl9Ci0KLQkJCX0gZWxz ZSBpZiAoYXN5bV9vcC0+cnNhLm9wX3R5cGUgPT0KLQkJCQkJUlRFX0NSWVBUT19BU1lNX09QX1NJ R04pIHsKLQkJCQlzd2l0Y2ggKGFzeW1fb3AtPnJzYS5wYWQpIHsKLQkJCQljYXNlIFJURV9DUllQ VE9fUlNBX1BBRERJTkdfTk9ORToKLQkJCQkJcnRlX21lbWNweShjb29raWUtPmlucHV0X2FycmF5 WzBdCi0JCQkJCQkrIGFsZ19zaXplX2luX2J5dGVzIC0KLQkJCQkJCWFzeW1fb3AtPnJzYS5tZXNz YWdlLmxlbmd0aCwKLQkJCQkJCWFzeW1fb3AtPnJzYS5tZXNzYWdlLmRhdGEsCi0JCQkJCQlhc3lt X29wLT5yc2EubWVzc2FnZS5sZW5ndGgpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJ CQlRQVRfTE9HKEVSUiwKLQkJCQkJCSJJbnZhbGlkIHBhZGRpbmcgb2YgUlNBIChTaWduYXR1cmUp Iik7Ci0JCQkJCXJldHVybiAtKEVJTlZBTCk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKHhmb3JtLT5y c2Eua2V5X3R5cGUgPT0gUlRFX1JTQV9LRVlfVFlQRV9RVCkgewotCi0JCQkJcWF0X3JlcS0+aW5w dXRfcGFyYW1fY291bnQgPQotCQkJCQkJUUFUX0FTWU1fUlNBX1FUX05VTV9JTl9QQVJBTVM7Ci0J CQkJaWYgKHFhdF9hc3ltX2dldF9zel9hbmRfZnVuY19pZChSU0FfREVDX0NSVF9JRFMsCi0JCQkJ CQlzaXplb2YoUlNBX0RFQ19DUlRfSURTKS8KLQkJCQkJCXNpemVvZigqUlNBX0RFQ19DUlRfSURT KSwKLQkJCQkJCSZhbGdfc2l6ZSwgJmZ1bmNfaWQpKSB7Ci0JCQkJCXJldHVybiAtKEVJTlZBTCk7 Ci0JCQkJfQotCQkJCWFsZ19zaXplX2luX2J5dGVzID0gYWxnX3NpemUgPj4gMzsKLQotCQkJCXJ0 ZV9tZW1jcHkoY29va2llLT5pbnB1dF9hcnJheVsxXSArCi0JCQkJCQkoYWxnX3NpemVfaW5fYnl0 ZXMgPj4gMSkgLQotCQkJCQkJeGZvcm0tPnJzYS5xdC5wLmxlbmd0aAotCQkJCQkJLCB4Zm9ybS0+ cnNhLnF0LnAuZGF0YSwKLQkJCQkJCXhmb3JtLT5yc2EucXQucC5sZW5ndGgpOwotCQkJCXJ0ZV9t ZW1jcHkoY29va2llLT5pbnB1dF9hcnJheVsyXSArCi0JCQkJCQkoYWxnX3NpemVfaW5fYnl0ZXMg Pj4gMSkgLQotCQkJCQkJeGZvcm0tPnJzYS5xdC5xLmxlbmd0aAotCQkJCQkJLCB4Zm9ybS0+cnNh LnF0LnEuZGF0YSwKLQkJCQkJCXhmb3JtLT5yc2EucXQucS5sZW5ndGgpOwotCQkJCXJ0ZV9tZW1j cHkoY29va2llLT5pbnB1dF9hcnJheVszXSArCi0JCQkJCQkoYWxnX3NpemVfaW5fYnl0ZXMgPj4g MSkgLQotCQkJCQkJeGZvcm0tPnJzYS5xdC5kUC5sZW5ndGgKLQkJCQkJCSwgeGZvcm0tPnJzYS5x dC5kUC5kYXRhLAotCQkJCQkJeGZvcm0tPnJzYS5xdC5kUC5sZW5ndGgpOwotCQkJCXJ0ZV9tZW1j cHkoY29va2llLT5pbnB1dF9hcnJheVs0XSArCi0JCQkJCQkoYWxnX3NpemVfaW5fYnl0ZXMgPj4g MSkgLQotCQkJCQkJeGZvcm0tPnJzYS5xdC5kUS5sZW5ndGgKLQkJCQkJCSwgeGZvcm0tPnJzYS5x dC5kUS5kYXRhLAotCQkJCQkJeGZvcm0tPnJzYS5xdC5kUS5sZW5ndGgpOwotCQkJCXJ0ZV9tZW1j cHkoY29va2llLT5pbnB1dF9hcnJheVs1XSArCi0JCQkJCQkoYWxnX3NpemVfaW5fYnl0ZXMgPj4g MSkgLQotCQkJCQkJeGZvcm0tPnJzYS5xdC5xSW52Lmxlbmd0aAotCQkJCQkJLCB4Zm9ybS0+cnNh LnF0LnFJbnYuZGF0YSwKLQkJCQkJCXhmb3JtLT5yc2EucXQucUludi5sZW5ndGgpOwotCQkJCWNv b2tpZS0+YWxnX3NpemUgPSBhbGdfc2l6ZTsKLQkJCQlxYXRfcmVxLT5wa2VfaGRyLmNkX3BhcnMu ZnVuY19pZCA9IGZ1bmNfaWQ7CisJCWlmIChhc3ltX29wLT5yc2Eub3BfdHlwZSA9PQorCQkJCVJU RV9DUllQVE9fQVNZTV9PUF9FTkNSWVBUKSB7CisJCQl1aW50OF90ICpyc2FfcmVzdWx0ID0gYXN5 bV9vcC0+cnNhLmNpcGhlci5kYXRhOwogCi0jaWYgUlRFX0xPR19EUF9MRVZFTCA+PSBSVEVfTE9H X0RFQlVHCi0JCQkJUUFUX0RQX0hFWERVTVBfTE9HKERFQlVHLCAiQyIsCi0JCQkJCQljb29raWUt PmlucHV0X2FycmF5WzBdLAotCQkJCQkJYWxnX3NpemVfaW5fYnl0ZXMpOwotCQkJCVFBVF9EUF9I RVhEVU1QX0xPRyhERUJVRywgInAiLAotCQkJCQkJY29va2llLT5pbnB1dF9hcnJheVsxXSwKLQkJ CQkJCWFsZ19zaXplX2luX2J5dGVzKTsKLQkJCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJx IiwKLQkJCQkJCWNvb2tpZS0+aW5wdXRfYXJyYXlbMl0sCi0JCQkJCQlhbGdfc2l6ZV9pbl9ieXRl cyk7Ci0JCQkJUUFUX0RQX0hFWERVTVBfTE9HKERFQlVHLAotCQkJCQkJImRQIiwgY29va2llLT5p bnB1dF9hcnJheVszXSwKLQkJCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKLQkJCQlRQVRfRFBfSEVY RFVNUF9MT0coREVCVUcsCi0JCQkJCQkiZFEiLCBjb29raWUtPmlucHV0X2FycmF5WzRdLAotCQkJ CQkJYWxnX3NpemVfaW5fYnl0ZXMpOwotCQkJCVFBVF9EUF9IRVhEVU1QX0xPRyhERUJVRywKLQkJ CQkJCSJxSW52IiwgY29va2llLT5pbnB1dF9hcnJheVs1XSwKLQkJCQkJCWFsZ19zaXplX2luX2J5 dGVzKTsKLSNlbmRpZgotCQkJfSBlbHNlIGlmICh4Zm9ybS0+cnNhLmtleV90eXBlID09Ci0JCQkJ CVJURV9SU0FfS0VZX1RZUEVfRVhQKSB7Ci0JCQkJaWYgKHFhdF9hc3ltX2dldF9zel9hbmRfZnVu Y19pZCgKLQkJCQkJCVJTQV9ERUNfSURTLAotCQkJCQkJc2l6ZW9mKFJTQV9ERUNfSURTKS8KLQkJ CQkJCXNpemVvZigqUlNBX0RFQ19JRFMpLAotCQkJCQkJJmFsZ19zaXplLCAmZnVuY19pZCkpIHsK LQkJCQkJcmV0dXJuIC0oRUlOVkFMKTsKLQkJCQl9Ci0JCQkJYWxnX3NpemVfaW5fYnl0ZXMgPSBh bGdfc2l6ZSA+PiAzOwotCQkJCXJ0ZV9tZW1jcHkoY29va2llLT5pbnB1dF9hcnJheVsxXSArCi0J CQkJCQlhbGdfc2l6ZV9pbl9ieXRlcyAtCi0JCQkJCQl4Zm9ybS0+cnNhLmQubGVuZ3RoLAotCQkJ CQkJeGZvcm0tPnJzYS5kLmRhdGEsCi0JCQkJCQl4Zm9ybS0+cnNhLmQubGVuZ3RoKTsKLQkJCQly dGVfbWVtY3B5KGNvb2tpZS0+aW5wdXRfYXJyYXlbMl0gKwotCQkJCQkJYWxnX3NpemVfaW5fYnl0 ZXMgLQotCQkJCQkJeGZvcm0tPnJzYS5uLmxlbmd0aCwKLQkJCQkJCXhmb3JtLT5yc2Eubi5kYXRh LAotCQkJCQkJeGZvcm0tPnJzYS5uLmxlbmd0aCk7Ci0jaWYgUlRFX0xPR19EUF9MRVZFTCA+PSBS VEVfTE9HX0RFQlVHCi0JCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJSU0EgY2lwaGVydGV4 dCIsCi0JCQkJCWNvb2tpZS0+aW5wdXRfYXJyYXlbMF0sCi0JCQkJCWFsZ19zaXplX2luX2J5dGVz KTsKLQkJCVFBVF9EUF9IRVhEVU1QX0xPRyhERUJVRywgIlJTQSBkIiwgY29va2llLT5pbnB1dF9h cnJheVsxXSwKLQkJCQkJYWxnX3NpemVfaW5fYnl0ZXMpOwotCQkJUUFUX0RQX0hFWERVTVBfTE9H KERFQlVHLCAiUlNBIG4iLCBjb29raWUtPmlucHV0X2FycmF5WzJdLAotCQkJCQlhbGdfc2l6ZV9p bl9ieXRlcyk7Ci0jZW5kaWYKKwkJCXJ0ZV9tZW1jcHkocnNhX3Jlc3VsdCwKKwkJCQkJY29va2ll LT5vdXRwdXRfYXJyYXlbMF0sCisJCQkJCWFsZ19ieXRlc2l6ZSk7CisJCQlIRVhEVU1QKCJSU0Eg RW5jcnlwdGVkIGRhdGEiLCBjb29raWUtPm91dHB1dF9hcnJheVswXSwKKwkJCQlhbGdfYnl0ZXNp emUpOworCQl9IGVsc2UgeworCQkJdWludDhfdCAqcnNhX3Jlc3VsdCA9IGFzeW1fb3AtPnJzYS5j aXBoZXIuZGF0YTsKIAotCQkJCWNvb2tpZS0+YWxnX3NpemUgPSBhbGdfc2l6ZTsKLQkJCQlxYXRf cmVxLT5wa2VfaGRyLmNkX3BhcnMuZnVuY19pZCA9IGZ1bmNfaWQ7Ci0JCQl9IGVsc2UgewotCQkJ CVFBVF9MT0coRVJSLCAiSW52YWxpZCBSU0Ega2V5IHR5cGUiKTsKLQkJCQlyZXR1cm4gLShFSU5W QUwpOworCQkJc3dpdGNoIChhc3ltX29wLT5yc2EucGFkKSB7CisJCQljYXNlIFJURV9DUllQVE9f UlNBX1BBRERJTkdfTk9ORToKKwkJCQlydGVfbWVtY3B5KHJzYV9yZXN1bHQsCisJCQkJCQljb29r aWUtPm91dHB1dF9hcnJheVswXSwKKwkJCQkJCWFsZ19ieXRlc2l6ZSk7CisJCQkJSEVYRFVNUCgi UlNBIHNpZ25hdHVyZSIsCisJCQkJCWNvb2tpZS0+b3V0cHV0X2FycmF5WzBdLAorCQkJCQlhbGdf Ynl0ZXNpemUpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlRQVRfTE9HKEVSUiwgIlBh ZGRpbmcgbm90IHN1cHBvcnRlZCIpOworCQkJCXJldHVybiBSVEVfQ1JZUFRPX09QX1NUQVRVU19F UlJPUjsKIAkJCX0KIAkJfQogCX0gZWxzZSB7Ci0JCVFBVF9MT0coRVJSLCAiSW52YWxpZCBhc3lt bWV0cmljIGNyeXB0byB4Zm9ybSIpOwotCQlyZXR1cm4gLShFSU5WQUwpOworCQlpZiAoYXN5bV9v cC0+cnNhLm9wX3R5cGUgPT0gUlRFX0NSWVBUT19BU1lNX09QX0RFQ1JZUFQpIHsKKwkJCXVpbnQ4 X3QgKnJzYV9yZXN1bHQgPSBhc3ltX29wLT5yc2EubWVzc2FnZS5kYXRhOworCisJCQlzd2l0Y2gg KGFzeW1fb3AtPnJzYS5wYWQpIHsKKwkJCWNhc2UgUlRFX0NSWVBUT19SU0FfUEFERElOR19OT05F OgorCQkJCXJ0ZV9tZW1jcHkocnNhX3Jlc3VsdCwKKwkJCQkJY29va2llLT5vdXRwdXRfYXJyYXlb MF0sCisJCQkJCWFsZ19ieXRlc2l6ZSk7CisJCQkJSEVYRFVNUCgiUlNBIERlY3J5cHRlZCBNZXNz YWdlIiwKKwkJCQkJY29va2llLT5vdXRwdXRfYXJyYXlbMF0sCisJCQkJCWFsZ19ieXRlc2l6ZSk7 CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVFBVF9MT0coRVJSLCAiUGFkZGluZyBub3Qg c3VwcG9ydGVkIik7CisJCQkJcmV0dXJuIFJURV9DUllQVE9fT1BfU1RBVFVTX0VSUk9SOworCQkJ fQorCQl9IGVsc2UgeworCQkJdWludDhfdCAqcnNhX3Jlc3VsdCA9IGFzeW1fb3AtPnJzYS5zaWdu LmRhdGE7CisKKwkJCXJ0ZV9tZW1jcHkocnNhX3Jlc3VsdCwKKwkJCQkJY29va2llLT5vdXRwdXRf YXJyYXlbMF0sCisJCQkJCWFsZ19ieXRlc2l6ZSk7CisJCQlIRVhEVU1QKCJSU0EgU2lnbmF0dXJl IiwgY29va2llLT5vdXRwdXRfYXJyYXlbMF0sCisJCQkJYWxnX2J5dGVzaXplKTsKKwkJfQogCX0K LQlyZXR1cm4gMDsKKwlyZXR1cm4gUlRFX0NSWVBUT19PUF9TVEFUVVNfU1VDQ0VTUzsKIH0KIAot c3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50CisKK3N0YXRpYyBpbnQKK2FzeW1fc2V0X2lu cHV0KHN0cnVjdCBydGVfY3J5cHRvX2FzeW1fb3AgKmFzeW1fb3AsCisJCXN0cnVjdCBpY3BfcWF0 X2Z3X3BrZV9yZXF1ZXN0ICpxYXRfcmVxLAorCQlzdHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llICpj b29raWUsCisJCXN0cnVjdCBydGVfY3J5cHRvX2FzeW1feGZvcm0gKnhmb3JtKQoreworCXN3aXRj aCAoeGZvcm0tPnhmb3JtX3R5cGUpIHsKKwljYXNlIFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RF WDoKKwkJcmV0dXJuIG1vZGV4cF9zZXRfaW5wdXQoYXN5bV9vcCwgcWF0X3JlcSwKKwkJCQljb29r aWUsIHhmb3JtKTsKKwljYXNlIFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RJTlY6CisJCXJldHVy biBtb2RpbnZfc2V0X2lucHV0KGFzeW1fb3AsIHFhdF9yZXEsCisJCQkJY29va2llLCB4Zm9ybSk7 CisJY2FzZSBSVEVfQ1JZUFRPX0FTWU1fWEZPUk1fUlNBOgorCQlyZXR1cm4gcnNhX3NldF9pbnB1 dChhc3ltX29wLCBxYXRfcmVxLAorCQkJCWNvb2tpZSwgeGZvcm0pOworCWRlZmF1bHQ6CisJCVFB VF9MT0coRVJSLCAiSW52YWxpZC91bnN1cHBvcnRlZCBhc3ltbWV0cmljIGNyeXB0byB4Zm9ybSIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKIHFh dF9hc3ltX2J1aWxkX3JlcXVlc3Qodm9pZCAqaW5fb3AsIHVpbnQ4X3QgKm91dF9tc2csIHZvaWQg Km9wX2Nvb2tpZSwKLQkJX19ydGVfdW51c2VkIHVpbnQ2NF90ICpvcGFxdWUsCi0JCV9fcnRlX3Vu dXNlZCBlbnVtIHFhdF9kZXZpY2VfZ2VuIGRldl9nZW4pCisJCQlfX3J0ZV91bnVzZWQgdWludDY0 X3QgKm9wYXF1ZSwKKwkJCV9fcnRlX3VudXNlZCBlbnVtIHFhdF9kZXZpY2VfZ2VuIHFhdF9kZXZf Z2VuKQogewotCXN0cnVjdCBxYXRfYXN5bV9zZXNzaW9uICpjdHg7CiAJc3RydWN0IHJ0ZV9jcnlw dG9fb3AgKm9wID0gKHN0cnVjdCBydGVfY3J5cHRvX29wICopaW5fb3A7CiAJc3RydWN0IHJ0ZV9j cnlwdG9fYXN5bV9vcCAqYXN5bV9vcCA9IG9wLT5hc3ltOwogCXN0cnVjdCBpY3BfcWF0X2Z3X3Br ZV9yZXF1ZXN0ICpxYXRfcmVxID0KIAkJCShzdHJ1Y3QgaWNwX3FhdF9md19wa2VfcmVxdWVzdCAq KW91dF9tc2c7CiAJc3RydWN0IHFhdF9hc3ltX29wX2Nvb2tpZSAqY29va2llID0KLQkJCQkoc3Ry dWN0IHFhdF9hc3ltX29wX2Nvb2tpZSAqKW9wX2Nvb2tpZTsKKwkJCShzdHJ1Y3QgcWF0X2FzeW1f b3BfY29va2llICopb3BfY29va2llOwogCWludCBlcnIgPSAwOwogCiAJb3AtPnN0YXR1cyA9IFJU RV9DUllQVE9fT1BfU1RBVFVTX05PVF9QUk9DRVNTRUQ7Ci0JaWYgKG9wLT5zZXNzX3R5cGUgPT0g UlRFX0NSWVBUT19PUF9XSVRIX1NFU1NJT04pIHsKLQkJY3R4ID0gKHN0cnVjdCBxYXRfYXN5bV9z ZXNzaW9uICopCi0JCQkJb3AtPmFzeW0tPnNlc3Npb24tPnNlc3NfcHJpdmF0ZV9kYXRhOwotCQlp ZiAodW5saWtlbHkoY3R4ID09IE5VTEwpKSB7Ci0JCQlRQVRfTE9HKEVSUiwgIlNlc3Npb24gaGFz IG5vdCBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgZGV2aWNlIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9 Ci0JCXJ0ZV9tb3Y2NCgodWludDhfdCAqKXFhdF9yZXEsIChjb25zdCB1aW50OF90ICopJihjdHgt PnJlcV90bXBsKSk7Ci0JCWVyciA9IHFhdF9hc3ltX2ZpbGxfYXJyYXlzKGFzeW1fb3AsIHFhdF9y ZXEsIGNvb2tpZSwgY3R4LT54Zm9ybSk7Ci0JCWlmIChlcnIpIHsKLQkJCW9wLT5zdGF0dXMgPSBS VEVfQ1JZUFRPX09QX1NUQVRVU19JTlZBTElEX0FSR1M7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0J fSBlbHNlIGlmIChvcC0+c2Vzc190eXBlID09IFJURV9DUllQVE9fT1BfU0VTU0lPTkxFU1MpIHsK LQkJcWF0X2ZpbGxfcmVxX3RtcGwocWF0X3JlcSk7Ci0JCWVyciA9IHFhdF9hc3ltX2ZpbGxfYXJy YXlzKGFzeW1fb3AsIHFhdF9yZXEsIGNvb2tpZSwKKwlzd2l0Y2ggKG9wLT5zZXNzX3R5cGUpIHsK KwljYXNlIFJURV9DUllQVE9fT1BfV0lUSF9TRVNTSU9OOgorCQlRQVRfTE9HKEVSUiwKKwkJCSJR QVQgYXN5bW1ldHJpYyBjcnlwdG8gUE1EIGRvZXMgbm90IHN1cHBvcnQgc2Vzc2lvbiIKKwkJCSk7 CisJCWdvdG8gZXJyb3I7CisJY2FzZSBSVEVfQ1JZUFRPX09QX1NFU1NJT05MRVNTOgorCQlyZXF1 ZXN0X2luaXQocWF0X3JlcSk7CisJCWVyciA9IGFzeW1fc2V0X2lucHV0KGFzeW1fb3AsIHFhdF9y ZXEsIGNvb2tpZSwKIAkJCQlvcC0+YXN5bS0+eGZvcm0pOwogCQlpZiAoZXJyKSB7CiAJCQlvcC0+ c3RhdHVzID0gUlRFX0NSWVBUT19PUF9TVEFUVVNfSU5WQUxJRF9BUkdTOwogCQkJZ290byBlcnJv cjsKIAkJfQotCX0gZWxzZSB7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCVFBVF9EUF9MT0coRVJS LCAiSW52YWxpZCBzZXNzaW9uL3hmb3JtIHNldHRpbmdzIik7CiAJCW9wLT5zdGF0dXMgPSBSVEVf Q1JZUFRPX09QX1NUQVRVU19JTlZBTElEX1NFU1NJT047CiAJCWdvdG8gZXJyb3I7CkBAIC01NzYs MTQ0ICs2MDYsMzAgQEAgcWF0X2FzeW1fYnVpbGRfcmVxdWVzdCh2b2lkICppbl9vcCwgdWludDhf dCAqb3V0X21zZywgdm9pZCAqb3BfY29va2llLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9p ZCBxYXRfYXN5bV9jb2xsZWN0X3Jlc3BvbnNlKHN0cnVjdCBydGVfY3J5cHRvX29wICpyeF9vcCwK K3N0YXRpYyB1aW50OF90CitxYXRfYXN5bV9jb2xsZWN0X3Jlc3BvbnNlKHN0cnVjdCBydGVfY3J5 cHRvX29wICpyeF9vcCwKIAkJc3RydWN0IHFhdF9hc3ltX29wX2Nvb2tpZSAqY29va2llLAogCQlz dHJ1Y3QgcnRlX2NyeXB0b19hc3ltX3hmb3JtICp4Zm9ybSkKIHsKLQlzaXplX3QgYWxnX3NpemUs IGFsZ19zaXplX2luX2J5dGVzID0gMDsKIAlzdHJ1Y3QgcnRlX2NyeXB0b19hc3ltX29wICphc3lt X29wID0gcnhfb3AtPmFzeW07CiAKLQlpZiAoeGZvcm0tPnhmb3JtX3R5cGUgPT0gUlRFX0NSWVBU T19BU1lNX1hGT1JNX01PREVYKSB7Ci0JCXJ0ZV9jcnlwdG9fcGFyYW0gbiA9IHhmb3JtLT5tb2Rl eC5tb2R1bHVzOwotCi0JCWFsZ19zaXplID0gY29va2llLT5hbGdfc2l6ZTsKLQkJYWxnX3NpemVf aW5fYnl0ZXMgPSBhbGdfc2l6ZSA+PiAzOwotCQl1aW50OF90ICptb2RleHBfcmVzdWx0ID0gYXN5 bV9vcC0+bW9kZXgucmVzdWx0LmRhdGE7Ci0KLQkJaWYgKHJ4X29wLT5zdGF0dXMgPT0gUlRFX0NS WVBUT19PUF9TVEFUVVNfTk9UX1BST0NFU1NFRCkgewotCQkJcnRlX21lbWNweShtb2RleHBfcmVz dWx0ICsKLQkJCQkoYXN5bV9vcC0+bW9kZXgucmVzdWx0Lmxlbmd0aCAtCi0JCQkJCW4ubGVuZ3Ro KSwKLQkJCQljb29raWUtPm91dHB1dF9hcnJheVswXSArIGFsZ19zaXplX2luX2J5dGVzCi0JCQkJ LSBuLmxlbmd0aCwgbi5sZW5ndGgKLQkJCQkpOwotCQkJcnhfb3AtPnN0YXR1cyA9IFJURV9DUllQ VE9fT1BfU1RBVFVTX1NVQ0NFU1M7Ci0jaWYgUlRFX0xPR19EUF9MRVZFTCA+PSBSVEVfTE9HX0RF QlVHCi0JCQlRQVRfRFBfSEVYRFVNUF9MT0coREVCVUcsICJNb2RFeHAgcmVzdWx0IiwKLQkJCQkJ Y29va2llLT5vdXRwdXRfYXJyYXlbMF0sCi0JCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKLQotI2Vu ZGlmCi0JCX0KLQl9IGVsc2UgaWYgKHhmb3JtLT54Zm9ybV90eXBlID09IFJURV9DUllQVE9fQVNZ TV9YRk9STV9NT0RJTlYpIHsKLQkJcnRlX2NyeXB0b19wYXJhbSBuID0geGZvcm0tPm1vZGludi5t b2R1bHVzOwotCi0JCWFsZ19zaXplID0gY29va2llLT5hbGdfc2l6ZTsKLQkJYWxnX3NpemVfaW5f Ynl0ZXMgPSBhbGdfc2l6ZSA+PiAzOwotCQl1aW50OF90ICptb2RpbnZfcmVzdWx0ID0gYXN5bV9v cC0+bW9kaW52LnJlc3VsdC5kYXRhOwotCi0JCWlmIChyeF9vcC0+c3RhdHVzID09IFJURV9DUllQ VE9fT1BfU1RBVFVTX05PVF9QUk9DRVNTRUQpIHsKLQkJCXJ0ZV9tZW1jcHkobW9kaW52X3Jlc3Vs dCArIChhc3ltX29wLT5tb2RpbnYucmVzdWx0Lmxlbmd0aAotCQkJCS0gbi5sZW5ndGgpLAotCQkJ CWNvb2tpZS0+b3V0cHV0X2FycmF5WzBdICsgYWxnX3NpemVfaW5fYnl0ZXMKLQkJCQktIG4ubGVu Z3RoLCBuLmxlbmd0aCk7Ci0JCQlyeF9vcC0+c3RhdHVzID0gUlRFX0NSWVBUT19PUF9TVEFUVVNf U1VDQ0VTUzsKLSNpZiBSVEVfTE9HX0RQX0xFVkVMID49IFJURV9MT0dfREVCVUcKLQkJCVFBVF9E UF9IRVhEVU1QX0xPRyhERUJVRywgIk1vZEludiByZXN1bHQiLAotCQkJCQljb29raWUtPm91dHB1 dF9hcnJheVswXSwKLQkJCQkJYWxnX3NpemVfaW5fYnl0ZXMpOwotI2VuZGlmCi0JCX0KLQl9IGVs c2UgaWYgKHhmb3JtLT54Zm9ybV90eXBlID09IFJURV9DUllQVE9fQVNZTV9YRk9STV9SU0EpIHsK LQotCQlhbGdfc2l6ZSA9IGNvb2tpZS0+YWxnX3NpemU7Ci0JCWFsZ19zaXplX2luX2J5dGVzID0g YWxnX3NpemUgPj4gMzsKLQkJaWYgKGFzeW1fb3AtPnJzYS5vcF90eXBlID09IFJURV9DUllQVE9f QVNZTV9PUF9FTkNSWVBUIHx8Ci0JCQkJYXN5bV9vcC0+cnNhLm9wX3R5cGUgPT0KLQkJCQkJUlRF X0NSWVBUT19BU1lNX09QX1ZFUklGWSkgewotCQkJaWYgKGFzeW1fb3AtPnJzYS5vcF90eXBlID09 Ci0JCQkJCVJURV9DUllQVE9fQVNZTV9PUF9FTkNSWVBUKSB7Ci0JCQkJdWludDhfdCAqcnNhX3Jl c3VsdCA9IGFzeW1fb3AtPnJzYS5jaXBoZXIuZGF0YTsKLQotCQkJCXJ0ZV9tZW1jcHkocnNhX3Jl c3VsdCwKLQkJCQkJCWNvb2tpZS0+b3V0cHV0X2FycmF5WzBdLAotCQkJCQkJYWxnX3NpemVfaW5f Ynl0ZXMpOwotCQkJCXJ4X29wLT5zdGF0dXMgPSBSVEVfQ1JZUFRPX09QX1NUQVRVU19TVUNDRVNT OwotI2lmIFJURV9MT0dfRFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRwotCQkJCVFBVF9EUF9IRVhE VU1QX0xPRyhERUJVRywgIlJTQSBFbmNyeXB0ZWQgZGF0YSIsCi0JCQkJCQljb29raWUtPm91dHB1 dF9hcnJheVswXSwKLQkJCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKLSNlbmRpZgotCQkJfSBlbHNl IGlmIChhc3ltX29wLT5yc2Eub3BfdHlwZSA9PQotCQkJCQlSVEVfQ1JZUFRPX0FTWU1fT1BfVkVS SUZZKSB7Ci0JCQkJdWludDhfdCAqcnNhX3Jlc3VsdCA9IGFzeW1fb3AtPnJzYS5jaXBoZXIuZGF0 YTsKLQotCQkJCXN3aXRjaCAoYXN5bV9vcC0+cnNhLnBhZCkgewotCQkJCWNhc2UgUlRFX0NSWVBU T19SU0FfUEFERElOR19OT05FOgotCQkJCQlydGVfbWVtY3B5KHJzYV9yZXN1bHQsCi0JCQkJCQkJ Y29va2llLT5vdXRwdXRfYXJyYXlbMF0sCi0JCQkJCQkJYWxnX3NpemVfaW5fYnl0ZXMpOwotCQkJ CQlyeF9vcC0+c3RhdHVzID0KLQkJCQkJCVJURV9DUllQVE9fT1BfU1RBVFVTX1NVQ0NFU1M7Ci0j aWYgUlRFX0xPR19EUF9MRVZFTCA+PSBSVEVfTE9HX0RFQlVHCi0JCQkJUUFUX0RQX0hFWERVTVBf TE9HKERFQlVHLCAiUlNBIFNpZ25hdHVyZSIsCi0JCQkJCQljb29raWUtPm91dHB1dF9hcnJheVsw XSwKLQkJCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKLSNlbmRpZgotCQkJCQlicmVhazsKLQkJCQlk ZWZhdWx0OgotCQkJCQlRQVRfTE9HKEVSUiwgIlBhZGRpbmcgbm90IHN1cHBvcnRlZCIpOwotCQkJ CQlyeF9vcC0+c3RhdHVzID0KLQkJCQkJCVJURV9DUllQVE9fT1BfU1RBVFVTX0VSUk9SOwotCQkJ CQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYXN5bV9vcC0+cnNhLm9w X3R5cGUgPT0KLQkJCQkJUlRFX0NSWVBUT19BU1lNX09QX0RFQ1JZUFQpIHsKLQkJCQl1aW50OF90 ICpyc2FfcmVzdWx0ID0gYXN5bV9vcC0+cnNhLm1lc3NhZ2UuZGF0YTsKLQotCQkJCXN3aXRjaCAo YXN5bV9vcC0+cnNhLnBhZCkgewotCQkJCWNhc2UgUlRFX0NSWVBUT19SU0FfUEFERElOR19OT05F OgotCQkJCQlydGVfbWVtY3B5KHJzYV9yZXN1bHQsCi0JCQkJCQljb29raWUtPm91dHB1dF9hcnJh eVswXSwKLQkJCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKLQkJCQkJcnhfb3AtPnN0YXR1cyA9Ci0J CQkJCQlSVEVfQ1JZUFRPX09QX1NUQVRVU19TVUNDRVNTOwotCQkJCQlicmVhazsKLQkJCQlkZWZh dWx0OgotCQkJCQlRQVRfTE9HKEVSUiwgIlBhZGRpbmcgbm90IHN1cHBvcnRlZCIpOwotCQkJCQly eF9vcC0+c3RhdHVzID0KLQkJCQkJCVJURV9DUllQVE9fT1BfU1RBVFVTX0VSUk9SOwotCQkJCQli cmVhazsKLQkJCQl9Ci0jaWYgUlRFX0xPR19EUF9MRVZFTCA+PSBSVEVfTE9HX0RFQlVHCi0JCQkJ UUFUX0RQX0hFWERVTVBfTE9HKERFQlVHLCAiUlNBIERlY3J5cHRlZCBNZXNzYWdlIiwKLQkJCQkJ CXJzYV9yZXN1bHQsIGFsZ19zaXplX2luX2J5dGVzKTsKLSNlbmRpZgotCQkJfSBlbHNlIGlmIChh c3ltX29wLT5yc2Eub3BfdHlwZSA9PSBSVEVfQ1JZUFRPX0FTWU1fT1BfU0lHTikgewotCQkJCXVp bnQ4X3QgKnJzYV9yZXN1bHQgPSBhc3ltX29wLT5yc2Euc2lnbi5kYXRhOwotCi0JCQkJcnRlX21l bWNweShyc2FfcmVzdWx0LAotCQkJCQkJY29va2llLT5vdXRwdXRfYXJyYXlbMF0sCi0JCQkJCQlh bGdfc2l6ZV9pbl9ieXRlcyk7Ci0JCQkJcnhfb3AtPnN0YXR1cyA9IFJURV9DUllQVE9fT1BfU1RB VFVTX1NVQ0NFU1M7Ci0jaWYgUlRFX0xPR19EUF9MRVZFTCA+PSBSVEVfTE9HX0RFQlVHCi0JCQkJ UUFUX0RQX0hFWERVTVBfTE9HKERFQlVHLCAiUlNBIFNpZ25hdHVyZSIsCi0JCQkJCQljb29raWUt Pm91dHB1dF9hcnJheVswXSwKLQkJCQkJCWFsZ19zaXplX2luX2J5dGVzKTsKLSNlbmRpZgotCQkJ fQotCQl9CisJc3dpdGNoICh4Zm9ybS0+eGZvcm1fdHlwZSkgeworCWNhc2UgUlRFX0NSWVBUT19B U1lNX1hGT1JNX01PREVYOgorCQlyZXR1cm4gbW9kZXhwX2NvbGxlY3QoYXN5bV9vcCwgY29va2ll LCB4Zm9ybSk7CisJY2FzZSBSVEVfQ1JZUFRPX0FTWU1fWEZPUk1fTU9ESU5WOgorCQlyZXR1cm4g bW9kaW52X2NvbGxlY3QoYXN5bV9vcCwgY29va2llLCB4Zm9ybSk7CisJY2FzZSBSVEVfQ1JZUFRP X0FTWU1fWEZPUk1fUlNBOgorCQlyZXR1cm4gcnNhX2NvbGxlY3QoYXN5bV9vcCwgY29va2llKTsK KwlkZWZhdWx0OgorCQlRQVRfTE9HKEVSUiwgIk5vdCBzdXBwb3J0ZWQgeGZvcm0gdHlwZSIpOwor CQlyZXR1cm4gIFJURV9DUllQVE9fT1BfU1RBVFVTX0VSUk9SOwogCX0KLQlxYXRfY2xlYXJfYXJy YXlzX2J5X2FsZyhjb29raWUsIHhmb3JtLCBhbGdfc2l6ZV9pbl9ieXRlcyk7CiB9CiAKLWludAor c3RhdGljIGludAogcWF0X2FzeW1fcHJvY2Vzc19yZXNwb25zZSh2b2lkICoqb3AsIHVpbnQ4X3Qg KnJlc3AsCiAJCXZvaWQgKm9wX2Nvb2tpZSwgX19ydGVfdW51c2VkIHVpbnQ2NF90ICpkZXF1ZXVl X2Vycl9jb3VudCkKIHsKLQlzdHJ1Y3QgcWF0X2FzeW1fc2Vzc2lvbiAqY3R4OwogCXN0cnVjdCBp Y3BfcWF0X2Z3X3BrZV9yZXNwICpyZXNwX21zZyA9CiAJCQkoc3RydWN0IGljcF9xYXRfZndfcGtl X3Jlc3AgKilyZXNwOwogCXN0cnVjdCBydGVfY3J5cHRvX29wICpyeF9vcCA9IChzdHJ1Y3QgcnRl X2NyeXB0b19vcCAqKSh1aW50cHRyX3QpCkBAIC03NDAsNzggKzY1Niw0MCBAQCBxYXRfYXN5bV9w cm9jZXNzX3Jlc3BvbnNlKHZvaWQgKipvcCwgdWludDhfdCAqcmVzcCwKIAkJCQkJIiByZXR1cm5l ZCBlcnJvciIpOwogCQl9CiAJfQotCi0JaWYgKHJ4X29wLT5zZXNzX3R5cGUgPT0gUlRFX0NSWVBU T19PUF9XSVRIX1NFU1NJT04pIHsKLQkJY3R4ID0gKHN0cnVjdCBxYXRfYXN5bV9zZXNzaW9uICop Ci0JCQkJcnhfb3AtPmFzeW0tPnNlc3Npb24tPnNlc3NfcHJpdmF0ZV9kYXRhOwotCQlxYXRfYXN5 bV9jb2xsZWN0X3Jlc3BvbnNlKHJ4X29wLCBjb29raWUsIGN0eC0+eGZvcm0pOwotCX0gZWxzZSBp ZiAocnhfb3AtPnNlc3NfdHlwZSA9PSBSVEVfQ1JZUFRPX09QX1NFU1NJT05MRVNTKSB7Ci0JCXFh dF9hc3ltX2NvbGxlY3RfcmVzcG9uc2Uocnhfb3AsIGNvb2tpZSwgcnhfb3AtPmFzeW0tPnhmb3Jt KTsKKwlpZiAocnhfb3AtPnN0YXR1cyA9PSBSVEVfQ1JZUFRPX09QX1NUQVRVU19OT1RfUFJPQ0VT U0VEKSB7CisJCXJ4X29wLT5zdGF0dXMgPSBxYXRfYXN5bV9jb2xsZWN0X3Jlc3BvbnNlKHJ4X29w LAorCQkJCQljb29raWUsIHJ4X29wLT5hc3ltLT54Zm9ybSk7CisJCWNsZWFudXAoY29va2llLCBy eF9vcC0+YXN5bS0+eGZvcm0sCisJCQkJCWNvb2tpZS0+YWxnX2J5dGVzaXplKTsKIAl9Ci0JKm9w ID0gcnhfb3A7CiAKLSNpZiBSVEVfTE9HX0RQX0xFVkVMID49IFJURV9MT0dfREVCVUcKLQlRQVRf RFBfSEVYRFVNUF9MT0coREVCVUcsICJyZXNwX21zZzoiLCByZXNwX21zZywKLQkJCXNpemVvZihz dHJ1Y3QgaWNwX3FhdF9md19wa2VfcmVzcCkpOwotI2VuZGlmCisJKm9wID0gcnhfb3A7CisJSEVY RFVNUCgicmVzcF9tc2c6IiwgcmVzcF9tc2csIHNpemVvZihzdHJ1Y3QgaWNwX3FhdF9md19wa2Vf cmVzcCkpOwogCiAJcmV0dXJuIDE7CiB9CiAKIGludAogcWF0X2FzeW1fc2Vzc2lvbl9jb25maWd1 cmUoc3RydWN0IHJ0ZV9jcnlwdG9kZXYgKmRldiBfX3J0ZV91bnVzZWQsCi0JCXN0cnVjdCBydGVf Y3J5cHRvX2FzeW1feGZvcm0gKnhmb3JtLAotCQlzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9hc3ltX3Nl c3Npb24gKnNlc3MpCisJCXN0cnVjdCBydGVfY3J5cHRvX2FzeW1feGZvcm0gKnhmb3JtIF9fcnRl X3VudXNlZCwKKwkJc3RydWN0IHJ0ZV9jcnlwdG9kZXZfYXN5bV9zZXNzaW9uICpzZXNzIF9fcnRl X3VudXNlZCkKIHsKLQlzdHJ1Y3QgcWF0X2FzeW1fc2Vzc2lvbiAqc2Vzc2lvbjsKLQotCXNlc3Np b24gPSAoc3RydWN0IHFhdF9hc3ltX3Nlc3Npb24gKikgc2Vzcy0+c2Vzc19wcml2YXRlX2RhdGE7 Ci0JaWYgKHhmb3JtLT54Zm9ybV90eXBlID09IFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RFWCkg ewotCQlpZiAoeGZvcm0tPm1vZGV4LmV4cG9uZW50Lmxlbmd0aCA9PSAwIHx8Ci0JCQkJeGZvcm0t Pm1vZGV4Lm1vZHVsdXMubGVuZ3RoID09IDApIHsKLQkJCVFBVF9MT0coRVJSLCAiSW52YWxpZCBt b2QgZXhwIGlucHV0IHBhcmFtZXRlciIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVs c2UgaWYgKHhmb3JtLT54Zm9ybV90eXBlID09IFJURV9DUllQVE9fQVNZTV9YRk9STV9NT0RJTlYp IHsKLQkJaWYgKHhmb3JtLT5tb2RpbnYubW9kdWx1cy5sZW5ndGggPT0gMCkgewotCQkJUUFUX0xP RyhFUlIsICJJbnZhbGlkIG1vZCBpbnYgaW5wdXQgcGFyYW1ldGVyIik7Ci0JCQlyZXR1cm4gLUVJ TlZBTDsKLQkJfQotCX0gZWxzZSBpZiAoeGZvcm0tPnhmb3JtX3R5cGUgPT0gUlRFX0NSWVBUT19B U1lNX1hGT1JNX1JTQSkgewotCQlpZiAoeGZvcm0tPnJzYS5uLmxlbmd0aCA9PSAwKSB7Ci0JCQlR QVRfTE9HKEVSUiwgIkludmFsaWQgcnNhIGlucHV0IHBhcmFtZXRlciIpOwotCQkJcmV0dXJuIC1F SU5WQUw7Ci0JCX0KLQl9IGVsc2UgaWYgKHhmb3JtLT54Zm9ybV90eXBlID49IFJURV9DUllQVE9f QVNZTV9YRk9STV9UWVBFX0xJU1RfRU5ECi0JCQl8fCB4Zm9ybS0+eGZvcm1fdHlwZSA8PSBSVEVf Q1JZUFRPX0FTWU1fWEZPUk1fTk9ORSkgewotCQlRQVRfTE9HKEVSUiwgIkludmFsaWQgYXN5bW1l dHJpYyBjcnlwdG8geGZvcm0iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIHsKLQkJUUFU X0xPRyhFUlIsICJBc3ltbWV0cmljIGNyeXB0byB4Zm9ybSBub3QgaW1wbGVtZW50ZWQiKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc2Vzc2lvbi0+eGZvcm0gPSB4Zm9ybTsKLQlxYXRfYXN5 bV9idWlsZF9yZXFfdG1wbChzZXNzaW9uKTsKLQotCXJldHVybiAwOworCVFBVF9MT0coRVJSLCAi UUFUIGFzeW1tZXRyaWMgUE1EIGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IHNlc3Npb24iKTsK KwlyZXR1cm4gLUVOT1RTVVA7CiB9CiAKLXVuc2lnbmVkIGludCBxYXRfYXN5bV9zZXNzaW9uX2dl dF9wcml2YXRlX3NpemUoCi0JCXN0cnVjdCBydGVfY3J5cHRvZGV2ICpkZXYgX19ydGVfdW51c2Vk KQordW5zaWduZWQgaW50CitxYXRfYXN5bV9zZXNzaW9uX2dldF9wcml2YXRlX3NpemUoc3RydWN0 IHJ0ZV9jcnlwdG9kZXYgKmRldiBfX3J0ZV91bnVzZWQpCiB7Ci0JcmV0dXJuIFJURV9BTElHTl9D RUlMKHNpemVvZihzdHJ1Y3QgcWF0X2FzeW1fc2Vzc2lvbiksIDgpOworCVFBVF9MT0coRVJSLCAi UUFUIGFzeW1tZXRyaWMgUE1EIGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IHNlc3Npb24iKTsK KwlyZXR1cm4gMDsKIH0KIAogdm9pZAotcWF0X2FzeW1fc2Vzc2lvbl9jbGVhcihzdHJ1Y3QgcnRl X2NyeXB0b2RldiAqZGV2LAotCQlzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9hc3ltX3Nlc3Npb24gKnNl c3MpCitxYXRfYXN5bV9zZXNzaW9uX2NsZWFyKHN0cnVjdCBydGVfY3J5cHRvZGV2ICpkZXYgX19y dGVfdW51c2VkLAorCQlzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9hc3ltX3Nlc3Npb24gKnNlc3MgX19y dGVfdW51c2VkKQogewotCXZvaWQgKnNlc3NfcHJpdiA9IHNlc3MtPnNlc3NfcHJpdmF0ZV9kYXRh OwotCXN0cnVjdCBxYXRfYXN5bV9zZXNzaW9uICpzID0gKHN0cnVjdCBxYXRfYXN5bV9zZXNzaW9u ICopc2Vzc19wcml2OwotCi0JaWYgKHNlc3NfcHJpdikKLQkJbWVtc2V0KHMsIDAsIHFhdF9hc3lt X3Nlc3Npb25fZ2V0X3ByaXZhdGVfc2l6ZShkZXYpKTsKKwlRQVRfTE9HKEVSUiwgIlFBVCBhc3lt bWV0cmljIFBNRCBjdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydCBzZXNzaW9uIik7CiB9CiAKIHN0 YXRpYyB1aW50MTZfdApAQCAtODMwLDYgKzcwOCwzMiBAQCBxYXRfYXN5bV9jcnlwdG9fZGVxdWV1 ZV9vcF9idXJzdCh2b2lkICpxcCwgc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKipvcHMsCiAJCQkJbmJf b3BzKTsKIH0KIAordm9pZAorcWF0X2FzeW1faW5pdF9vcF9jb29raWUodm9pZCAqb3BfY29va2ll KQoreworCWludCBqOworCXN0cnVjdCBxYXRfYXN5bV9vcF9jb29raWUgKmNvb2tpZSA9IG9wX2Nv b2tpZTsKKworCWNvb2tpZS0+aW5wdXRfYWRkciA9IHJ0ZV9tZW1wb29sX3ZpcnQyaW92YShjb29r aWUpICsKKwkJCW9mZnNldG9mKHN0cnVjdCBxYXRfYXN5bV9vcF9jb29raWUsCisJCQkJCWlucHV0 X3BhcmFtc19wdHJzKTsKKworCWNvb2tpZS0+b3V0cHV0X2FkZHIgPSBydGVfbWVtcG9vbF92aXJ0 MmlvdmEoY29va2llKSArCisJCQlvZmZzZXRvZihzdHJ1Y3QgcWF0X2FzeW1fb3BfY29va2llLAor CQkJCQlvdXRwdXRfcGFyYW1zX3B0cnMpOworCisJZm9yIChqID0gMDsgaiA8IDg7IGorKykgewor CQljb29raWUtPmlucHV0X3BhcmFtc19wdHJzW2pdID0KKwkJCQlydGVfbWVtcG9vbF92aXJ0Mmlv dmEoY29va2llKSArCisJCQkJb2Zmc2V0b2Yoc3RydWN0IHFhdF9hc3ltX29wX2Nvb2tpZSwKKwkJ CQkJCWlucHV0X2FycmF5W2pdKTsKKwkJY29va2llLT5vdXRwdXRfcGFyYW1zX3B0cnNbal0gPQor CQkJCXJ0ZV9tZW1wb29sX3ZpcnQyaW92YShjb29raWUpICsKKwkJCQlvZmZzZXRvZihzdHJ1Y3Qg cWF0X2FzeW1fb3BfY29va2llLAorCQkJCQkJb3V0cHV0X2FycmF5W2pdKTsKKwl9Cit9CisKIGlu dAogcWF0X2FzeW1fZGV2X2NyZWF0ZShzdHJ1Y3QgcWF0X3BjaV9kZXZpY2UgKnFhdF9wY2lfZGV2 LAogCQlzdHJ1Y3QgcWF0X2Rldl9jbWRfcGFyYW0gKnFhdF9kZXZfY21kX3BhcmFtKQpkaWZmIGEv ZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmggYi9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2Fz eW0uaAkocmVqZWN0ZWQgaHVua3MpCkBAIC01Miw3ICs1Miw3IEBAIHR5cGVkZWYgdWludDY0X3Qg bGFyZ2VfaW50X3B0cjsKIAl9CiAKIHN0cnVjdCBxYXRfYXN5bV9vcF9jb29raWUgewotCXNpemVf dCBhbGdfc2l6ZTsKKwlzaXplX3QgYWxnX2J5dGVzaXplOwogCXVpbnQ2NF90IGVycm9yOwogCXJ0 ZV9pb3ZhX3QgaW5wdXRfYWRkcjsKIAlydGVfaW92YV90IG91dHB1dF9hZGRyOwpAQCAtMTAzLDIw ICsxMDMsNiBAQCB2b2lkCiBxYXRfYXN5bV9zZXNzaW9uX2NsZWFyKHN0cnVjdCBydGVfY3J5cHRv ZGV2ICpkZXYsCiAJCXN0cnVjdCBydGVfY3J5cHRvZGV2X2FzeW1fc2Vzc2lvbiAqc2Vzcyk7CiAK LS8qCi0gKiBQcm9jZXNzIFBLRSByZXNwb25zZSByZWNlaXZlZCBmcm9tIG91dGdvaW5nIHF1ZXVl IG9mIFFBVAotICoKLSAqIEBwYXJhbQlvcAkJYSBwdHIgdG8gdGhlIHJ0ZV9jcnlwdG9fb3AgcmVm ZXJyZWQgdG8gYnkKLSAqCQkJCXRoZSByZXNwb25zZSBtZXNzYWdlIGlzIHJldHVybmVkIGluIHRo aXMgcGFyYW0KLSAqIEBwYXJhbQlyZXNwCQlpY3BfcWF0X2Z3X3BrZV9yZXNwIG1lc3NhZ2UgcmVj ZWl2ZWQgZnJvbQotICoJCQkJb3V0Z29pbmcgZncgbWVzc2FnZSBxdWV1ZQotICogQHBhcmFtCW9w X2Nvb2tpZQlDb29raWUgcG9pbnRlciB0aGF0IGhvbGRzIHByaXZhdGUgbWV0YWRhdGEKLSAqCi0g Ki8KLWludAotcWF0X2FzeW1fcHJvY2Vzc19yZXNwb25zZSh2b2lkICoqb3AsIHVpbnQ4X3QgKnJl c3AsCi0JCXZvaWQgKm9wX2Nvb2tpZSwgIF9fcnRlX3VudXNlZCB1aW50NjRfdCAqZGVxdWV1ZV9l cnJfY291bnQpOwotCiB2b2lkCiBxYXRfYXN5bV9pbml0X29wX2Nvb2tpZSh2b2lkICpjb29raWUp OwogCkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5jLi4uCmVycm9y OiBkcml2ZXJzL2NyeXB0by9xYXQvcWF0X2FzeW0uYzogZG9lcyBub3QgbWF0Y2ggaW5kZXgKQ2hl Y2tpbmcgcGF0Y2ggZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9lYy5oLi4uCkFwcGxpZWQgcGF0Y2gg ZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9lYy5oIGNsZWFubHkuCkNoZWNraW5nIHBhdGNoIGRvYy9n dWlkZXMvY3J5cHRvZGV2cy9xYXQucnN0Li4uCmVycm9yOiBkb2MvZ3VpZGVzL2NyeXB0b2RldnMv cWF0LnJzdDogZG9lcyBub3QgbWF0Y2ggaW5kZXgKQ2hlY2tpbmcgcGF0Y2ggZG9jL2d1aWRlcy9y ZWxfbm90ZXMvcmVsZWFzZV8yMl8wMy5yc3QuLi4KSHVuayAjMSBzdWNjZWVkZWQgYXQgMTU5IChv ZmZzZXQgMTAgbGluZXMpLgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL2NvbW1vbi9xYXQvcWF0X2Fk Zi9xYXRfcGtlLmguLi4KZXJyb3I6IGRyaXZlcnMvY29tbW9uL3FhdC9xYXRfYWRmL3FhdF9wa2Uu aDogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgKQ2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9jcnlwdG8v cWF0L3FhdF9hc3ltLmMuLi4KZXJyb3I6IGRyaXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5jOiBk b2VzIG5vdCBtYXRjaCBpbmRleApDaGVja2luZyBwYXRjaCBkcml2ZXJzL2NyeXB0by9xYXQvcWF0 X2FzeW0uaC4uLgplcnJvcjogd2hpbGUgc2VhcmNoaW5nIGZvcjoKI2RlZmluZSBRQVRfQVNZTV9S U0FfTlVNX0lOX1BBUkFNUwkJMwojZGVmaW5lIFFBVF9BU1lNX1JTQV9OVU1fT1VUX1BBUkFNUwkJ MQojZGVmaW5lIFFBVF9BU1lNX1JTQV9RVF9OVU1fSU5fUEFSQU1TCQk2CgovKioKICogaGVscGVy IGZ1bmN0aW9uIHRvIGFkZCBhbiBhc3ltIGNhcGFiaWxpdHkKCmVycm9yOiBwYXRjaCBmYWlsZWQ6 IGRyaXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5oOjI4CkFwcGxpZWQgcGF0Y2ggZG9jL2d1aWRl cy9yZWxfbm90ZXMvcmVsZWFzZV8yMl8wMy5yc3QgY2xlYW5seS4KQXBwbHlpbmcgcGF0Y2ggZHJp dmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmggd2l0aCAxIHJlamVjdC4uLgpSZWplY3RlZCBodW5r ICMxLgpkaWZmIGEvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmggYi9kcml2ZXJzL2NyeXB0 by9xYXQvcWF0X2FzeW0uaAkocmVqZWN0ZWQgaHVua3MpCkBAIC0yOCw2ICsyOCwxMCBAQCB0eXBl ZGVmIHVpbnQ2NF90IGxhcmdlX2ludF9wdHI7CiAjZGVmaW5lIFFBVF9BU1lNX1JTQV9OVU1fSU5f UEFSQU1TCQkzCiAjZGVmaW5lIFFBVF9BU1lNX1JTQV9OVU1fT1VUX1BBUkFNUwkJMQogI2RlZmlu ZSBRQVRfQVNZTV9SU0FfUVRfTlVNX0lOX1BBUkFNUwkJNgorI2RlZmluZSBRQVRfQVNZTV9FQ0RT QV9SU19TSUdOX0lOX1BBUkFNUwkxCisjZGVmaW5lIFFBVF9BU1lNX0VDRFNBX1JTX1NJR05fT1VU X1BBUkFNUwkyCisjZGVmaW5lIFFBVF9BU1lNX0VDRFNBX1JTX1ZFUklGWV9JTl9QQVJBTVMJMQor I2RlZmluZSBRQVRfQVNZTV9FQ0RTQV9SU19WRVJJRllfT1VUX1BBUkFNUwkwCiAKIC8qKgogICog aGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBhbiBhc3ltIGNhcGFiaWxpdHkKQ2hlY2tpbmcgcGF0Y2gg ZG9jL2d1aWRlcy9jcnlwdG9kZXZzL3FhdC5yc3QuLi4KZXJyb3I6IGRvYy9ndWlkZXMvY3J5cHRv ZGV2cy9xYXQucnN0OiBkb2VzIG5vdCBtYXRjaCBpbmRleApDaGVja2luZyBwYXRjaCBkb2MvZ3Vp ZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzIyXzAzLnJzdC4uLgplcnJvcjogZG9jL2d1aWRlcy9yZWxf bm90ZXMvcmVsZWFzZV8yMl8wMy5yc3Q6IGRvZXMgbm90IG1hdGNoIGluZGV4CkNoZWNraW5nIHBh dGNoIGRyaXZlcnMvY29tbW9uL3FhdC9xYXRfYWRmL3FhdF9wa2UuaC4uLgplcnJvcjogZHJpdmVy cy9jb21tb24vcWF0L3FhdF9hZGYvcWF0X3BrZS5oOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleApD aGVja2luZyBwYXRjaCBkcml2ZXJzL2NyeXB0by9xYXQvcWF0X2FzeW0uYy4uLgplcnJvcjogZHJp dmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmM6IGRvZXMgbm90IG1hdGNoIGluZGV4CkNoZWNraW5n IHBhdGNoIGRyaXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5oLi4uCmVycm9yOiB3aGlsZSBzZWFy Y2hpbmcgZm9yOgojZGVmaW5lIFFBVF9BU1lNX0VDRFNBX1JTX1NJR05fT1VUX1BBUkFNUwkyCiNk ZWZpbmUgUUFUX0FTWU1fRUNEU0FfUlNfVkVSSUZZX0lOX1BBUkFNUwkxCiNkZWZpbmUgUUFUX0FT WU1fRUNEU0FfUlNfVkVSSUZZX09VVF9QQVJBTVMJMAoKLyoqCiAqIGhlbHBlciBmdW5jdGlvbiB0 byBhZGQgYW4gYXN5bSBjYXBhYmlsaXR5CgplcnJvcjogcGF0Y2ggZmFpbGVkOiBkcml2ZXJzL2Ny eXB0by9xYXQvcWF0X2FzeW0uaDozMgpBcHBseWluZyBwYXRjaCBkcml2ZXJzL2NyeXB0by9xYXQv cWF0X2FzeW0uaCB3aXRoIDEgcmVqZWN0Li4uClJlamVjdGVkIGh1bmsgIzEuCmRpZmYgYS9kcml2 ZXJzL2NyeXB0by9xYXQvcWF0X2FzeW0uaCBiL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5o CShyZWplY3RlZCBodW5rcykKQEAgLTMyLDYgKzMyLDggQEAgdHlwZWRlZiB1aW50NjRfdCBsYXJn ZV9pbnRfcHRyOwogI2RlZmluZSBRQVRfQVNZTV9FQ0RTQV9SU19TSUdOX09VVF9QQVJBTVMJMgog I2RlZmluZSBRQVRfQVNZTV9FQ0RTQV9SU19WRVJJRllfSU5fUEFSQU1TCTEKICNkZWZpbmUgUUFU X0FTWU1fRUNEU0FfUlNfVkVSSUZZX09VVF9QQVJBTVMJMAorI2RlZmluZSBRQVRfQVNZTV9FQ1BN X0lOX1BBUkFNUwkJCTcKKyNkZWZpbmUgUUFUX0FTWU1fRUNQTV9PVVRfUEFSQU1TCQkyCiAKIC8q KgogICogaGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBhbiBhc3ltIGNhcGFiaWxpdHkKQ2hlY2tpbmcg cGF0Y2ggZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9hc3ltLmMuLi4KZXJyb3I6IGRyaXZlcnMvY3J5 cHRvL3FhdC9xYXRfYXN5bS5jOiBkb2VzIG5vdCBtYXRjaCBpbmRleApDaGVja2luZyBwYXRjaCBk cml2ZXJzL2NyeXB0by9xYXQvcWF0X2FzeW0uaC4uLgplcnJvcjogd2hpbGUgc2VhcmNoaW5nIGZv cjoKCnN0cnVjdCBxYXRfYXN5bV9zZXNzaW9uIHsKCXN0cnVjdCBpY3BfcWF0X2Z3X3BrZV9yZXF1 ZXN0IHJlcV90bXBsOwoJc3RydWN0IHJ0ZV9jcnlwdG9fYXN5bV94Zm9ybSAqeGZvcm07Cn07Cgpz dGF0aWMgaW5saW5lIHZvaWQKCmVycm9yOiBwYXRjaCBmYWlsZWQ6IGRyaXZlcnMvY3J5cHRvL3Fh dC9xYXRfYXN5bS5oOjczCkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvY3J5cHRvL3FhdC9xYXRfZWMu aC4uLgplcnJvcjogZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9lYy5oOiBkb2VzIG5vdCBleGlzdCBp biBpbmRleApBcHBseWluZyBwYXRjaCBkcml2ZXJzL2NyeXB0by9xYXQvcWF0X2FzeW0uaCB3aXRo IDEgcmVqZWN0Li4uClJlamVjdGVkIGh1bmsgIzEuCmRpZmYgYS9kcml2ZXJzL2NyeXB0by9xYXQv cWF0X2FzeW0uaCBiL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfYXN5bS5oCShyZWplY3RlZCBodW5r cykKQEAgLTczLDcgKzczLDcgQEAgc3RydWN0IHFhdF9hc3ltX29wX2Nvb2tpZSB7CiAKIHN0cnVj dCBxYXRfYXN5bV9zZXNzaW9uIHsKIAlzdHJ1Y3QgaWNwX3FhdF9md19wa2VfcmVxdWVzdCByZXFf dG1wbDsKLQlzdHJ1Y3QgcnRlX2NyeXB0b19hc3ltX3hmb3JtICp4Zm9ybTsKKwlzdHJ1Y3QgcnRl X2NyeXB0b19hc3ltX3hmb3JtIHhmb3JtOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkCgpodHRw czovL2xhYi5kcGRrLm9yZy9yZXN1bHRzL2Rhc2hib2FyZC9wYXRjaHNldHMvMjExNjIvCgpVTkgt SU9MIERQREsgQ29tbXVuaXR5IExhYgo= --===============0428496616688058553==--