From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 5290741A36 for ; Wed, 20 Apr 2022 12:32:32 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 99C1868B3BD; Wed, 20 Apr 2022 15:32:18 +0300 (EEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 75F4268B38A for ; Wed, 20 Apr 2022 15:32:10 +0300 (EEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20220420123208euoutp02cfb35ff11f85792cb99a54337cad1611~nmr3nNGYm1958319583euoutp02m for ; Wed, 20 Apr 2022 12:32:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20220420123208euoutp02cfb35ff11f85792cb99a54337cad1611~nmr3nNGYm1958319583euoutp02m DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1650457928; bh=6RVeLZudZjHsga+q1XPBI3Nh3IB907DTB4+r73VhXbU=; h=From:To:Subject:Date:References:From; b=LkLsNNJlNV3sHCpct4yYpLmk46YgFmFnPJHvTKNZJLFaJpwC0ZTwxZgX8ecGs890/ Iu/OS7I0bxkkkskq0OjMwM8OYY9isLYpb+q4YkXMqZMYuRJDDEo4HGqAdkr6rNzMra y1FjsLyehgmZS/XJnRMl2TqZlVw/u+xlEQ17/3BA= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20220420123208eucas1p2328b56405bbe626e0ba6f3f8cf37e06a~nmr3aAmh92885328853eucas1p2l for ; Wed, 20 Apr 2022 12:32:08 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 1A.D8.10260.84DFF526; Wed, 20 Apr 2022 13:32:08 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20220420123208eucas1p1359df4487ab7f4a7edde29b4f80cdfdc~nmr22j9Lr2810428104eucas1p10 for ; Wed, 20 Apr 2022 12:32:08 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220420123208eusmtrp1da4c6d4ce32fb946117be00a90c3e736~nmr213VDW0717407174eusmtrp1W for ; Wed, 20 Apr 2022 12:32:08 +0000 (GMT) X-AuditID: cbfec7f5-bddff70000002814-82-625ffd48a254 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 4B.59.09522.74DFF526; Wed, 20 Apr 2022 13:32:07 +0100 (BST) Received: from AMDN3260 (unknown [106.210.132.171]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220420123207eusmtip2370f9896871394014fc3ead466ef1ba1~nmr2eiPOE2126521265eusmtip2w for ; Wed, 20 Apr 2022 12:32:07 +0000 (GMT) From: "Dawid Kozinski" To: Date: Wed, 20 Apr 2022 14:32:07 +0200 Message-ID: <005501d854b2$a63b0fb0$f2b12f10$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AdhUsQBl8723v6IvRj6qXQJE2TT5iw== Content-Language: pl X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrFIsWRmVeSWpSXmKPExsWy7djPc7oef+OTDO7MlLf49ukMswOjx59F m1kCGKO4bFJSczLLUov07RK4Mo62v2At6PzHUdHy8Q5bA+OV6xxdjJwcEgImEvtaW1i6GLk4 hARWMEpcutbGBuFMYpJY+Hk+I4QzkUni9IlvjDAtU28/ZYZILGeUWHD4F1R/G5PEyslL2UGq 2AT0JWYu+sQGYosIyEqs/jcFzBYWCJW4Nm8VkM3BwSKgKnFofwxImFfAUuL9n1lMELagxMmZ T1hAbGYBbYllC18zQyxWkPj5dBkrxEg9iVv7fzJC1IhI3HjUAnaphMBPdokZ76ZDXeoiMfXU C1YIW1ji1fEt7BC2jMTpyT0sIDdICBRLHOp3gDBrJA79SIeosJZ423icESTMLKApsX6XPkTY UWLa6kY2iGo+iRtvBSEO4JOYtG06M0SYV6KjTQjCVJHo6xSDaJSSeLpsDtQbHhJvF1xgmcCo OAvJt7OQfDsLyVezEE5YwMiyilE8tbQ4Nz212DgvtVyvODG3uDQvXS85P3cTIzA5nP53/OsO xhWvPuodYmTiYDzEKMHBrCTCGzozPkmINyWxsiq1KD++qDQntfgQozQHi5I4b3LmhkQhgfTE ktTs1NSC1CKYLBMHp1QDk4t+bPIn/3U7btrPe1w45aC7mMTy5qiVrj7Tf0fsq7m6YEeySwbz L9lXdq4rRFil8tmbNkQuzux2zHNqkQ2N+P1mdk74imZRr7vfV/FL1n7Jyjy+pkZQ6vz/J2va mnpE3pksTDI+UPNq0+P9Ls8mPP9RvEFj+7WUu83cbIdFvCWv/t2S913+/hGTP4pdh8oypp7n 2PrIfuITtWVJx7/v6nkZrRn2pkNixgSJ9Zo+0VGCf9Ztnxf+4nO4wbltEx/+XxDZzL3RTeT7 meWuny7McXvR6vV+xoWqY+LV7UlVBY51bGcmrrK1s+U79e14Sc7a0p1tSwuWRX3iMDjn3vbI 6lCAuZOIo927jMMrTQ80WCmxFGckGmoxFxUnAgDLQkXOfQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBLMWRmVeSWpSXmKPExsVy+t/xe7ruf+OTDJast7L49ukMswOjx59F m1kCGKP0bIryS0tSFTLyi0tslaINLYz0DC0t9IxMLPUMjc1jrYxMlfTtbFJSczLLUov07RL0 Mj4cu8Ra8PUsa8XTi/eZGxi3tLN0MXJySAiYSEy9/ZS5i5GLQ0hgKaPE4VlLmSASUhJLly5i hLCFJf5c62KDKGphkpg0/Q0rSIJNQF9i5qJPbCC2iICsxOp/U8BsYYFgiWctN4CmcnCwCKhK HNofAxLmFbCUeP9nFhOELShxcuYTsCOYBbQlnt58CmcvW/iaGWKvgsTPp8tYIcbrSdza/5MR okZE4sajFsYJjAKzkIyahWTULCSjZiFpWcDIsopRJLW0ODc9t9hQrzgxt7g0L10vOT93EyMw yLcd+7l5B+O8Vx/1DjEycTAeYpTgYFYS4Q2dGZ8kxJuSWFmVWpQfX1Sak1p8iNEU6LWJzFKi yfnAOMsriTc0MzA1NDGzNDC1NDNWEuf1LOhIFBJITyxJzU5NLUgtgulj4uCUamDaOsFU0cBu 4qbjWqIdCUIdukvWTimUamffJrtm1tGKKxa3Xie6qb4I3i14Lpa7xtRDTiexeN8387bFd8JT 9qy8emNiyZq6PhEGh1jjki1aRxmv/174cW+C486bhuwbdgerzXj5U2n9ubm7gxNjVp3RjLry 2zMhbhd3/OTIOzpZyqJ23Ilawturcue+vqz3ivGp6oQdUr/c+qdNTEv/eLy88Xf4vfOuwYWs f/LfBe/W0lFb4LLtf3vDg/Ku2fLt/OnWLyVL6q/wFO33084v+63bcPtC0+SYlS/rHPbFBLhb zAycpMLFvcX/3DMj7ciS3sxdLF+3Ktt/rv/29Ajv3V0JbFc1zaY0pMlLNt4tX6DEUpyRaKjF XFScCAB16Uvw+wIAAA== X-CMS-MailID: 20220420123208eucas1p1359df4487ab7f4a7edde29b4f80cdfdc X-Msg-Generator: CA X-RootMTR: 20220420123208eucas1p1359df4487ab7f4a7edde29b4f80cdfdc X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220420123208eucas1p1359df4487ab7f4a7edde29b4f80cdfdc References: Subject: [FFmpeg-devel] [PATCH 2/3] Provided support for MPEG-5 EVC (Essential Video Coding) codec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: LSBBZGRlZCB4ZXZlIGVuY29kZXIgd3JhcHBlcgotIEFkZGVkIHhldmQgZGVuY29kZXIgd3JhcHBl cgotIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHhldmUgYW5kIHhldmQgd3JhcHBlcnMKLSBBZGRl ZCBwYXJzZXIgZm9yIEVWQyBmb3JtYXQKLSBDaGFuZ2VzIGluIHByb2plY3QgY29uZmlndXJhdGlv biBmaWxlIGFuZCBsaWJhdmNvZGVjIE1ha2VmaWxlCgpTaWduZWQtb2ZmLWJ5OiBEYXdpZCBLb3pp bnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAg ICAgIHwgICAxMCArCiBkb2MvZGVjb2RlcnMudGV4aSAgICAgICAgIHwgICAyMyArCiBkb2MvZW5j b2RlcnMudGV4aSAgICAgICAgIHwgIDExMiArKysrCiBkb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhp IHwgICAxOSArCiBsaWJhdmNvZGVjL01ha2VmaWxlICAgICAgIHwgICAgMyArCiBsaWJhdmNvZGVj L2FsbGNvZGVjcy5jICAgIHwgICAgMyArCiBsaWJhdmNvZGVjL2F2Y29kZWMuaCAgICAgIHwgICAg MyArCiBsaWJhdmNvZGVjL2V2Y19wYXJzZXIuYyAgIHwgIDUxNCArKysrKysrKysrKysrKysrKwog bGliYXZjb2RlYy9saWJ4ZXZkLmMgICAgICB8ICA0NDUgKysrKysrKysrKysrKysrCiBsaWJhdmNv ZGVjL2xpYnhldmUuYyAgICAgIHwgMTE0MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBsaWJhdmNvZGVjL3BhcnNlcnMuYyAgICAgIHwgICAgMSArCiAxMSBmaWxlcyBjaGFu Z2VkLCAyMjc0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2V2 Y19wYXJzZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlieGV2ZC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJ4ZXZlLmMKCmRpZmYgLS1naXQgYS9jb25maWd1 cmUgYi9jb25maWd1cmUKaW5kZXggMzU4YTYxNDg1NC4uNDhlMGJmNzllZiAxMDA3NTUKLS0tIGEv Y29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMjg5LDYgKzI4OSw4IEBAIEV4dGVybmFsIGxp YnJhcnkgc3VwcG9ydDoKICAgLS1lbmFibGUtbGlid2VicCAgICAgICAgIGVuYWJsZSBXZWJQIGVu Y29kaW5nIHZpYSBsaWJ3ZWJwIFtub10KICAgLS1lbmFibGUtbGlieDI2NCAgICAgICAgIGVuYWJs ZSBILjI2NCBlbmNvZGluZyB2aWEgeDI2NCBbbm9dCiAgIC0tZW5hYmxlLWxpYngyNjUgICAgICAg ICBlbmFibGUgSEVWQyBlbmNvZGluZyB2aWEgeDI2NSBbbm9dCisgIC0tZW5hYmxlLWxpYnhldmUg ICAgICAgICBlbmFibGUgTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcgKEVWQykgZW5jb2Rp bmcgdmlhIGxpYnhldmUgW25vXQorICAtLWVuYWJsZS1saWJ4ZXZkICAgICAgICAgZW5hYmxlIE1Q RUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nIChFVkMpIGRlY29kaW5nIHZpYSBsaWJ4ZXZkIFtu b10KICAgLS1lbmFibGUtbGlieGF2cyAgICAgICAgIGVuYWJsZSBBVlMgZW5jb2RpbmcgdmlhIHhh dnMgW25vXQogICAtLWVuYWJsZS1saWJ4YXZzMiAgICAgICAgZW5hYmxlIEFWUzIgZW5jb2Rpbmcg dmlhIHhhdnMyIFtub10KICAgLS1lbmFibGUtbGlieGNiICAgICAgICAgIGVuYWJsZSBYMTEgZ3Jh YmJpbmcgdXNpbmcgWENCIFthdXRvZGV0ZWN0XQpAQCAtMTg4MSw2ICsxODgzLDggQEAgRVhURVJO QUxfTElCUkFSWV9MSVNUPSIKICAgICBvcGVuc3NsCiAgICAgcG9ja2V0c3BoaW54CiAgICAgdmFw b3Vyc3ludGgKKyAgICBsaWJ4ZXZlCisgICAgbGlieGV2ZAogIgogCiBIV0FDQ0VMX0FVVE9ERVRF Q1RfTElCUkFSWV9MSVNUPSIKQEAgLTI0NTUsNiArMjQ1OSw3IEBAIENPTkZJR19FWFRSQT0iCiAg ICAgaDI2NHByZWQKICAgICBoMjY0cXBlbAogICAgIGhldmNwYXJzZQorICAgIGV2Y3BhcnNlCiAg ICAgaHBlbGRzcAogICAgIGh1ZmZtYW4KICAgICBodWZmeXV2ZHNwCkBAIC0zMjUyLDYgKzMyNTcs NyBAQCBtcGVnYXVkaW9fcGFyc2VyX3NlbGVjdD0ibXBlZ2F1ZGlvaGVhZGVyIgogbXBlZ3ZpZGVv X3BhcnNlcl9zZWxlY3Q9Im1wZWd2aWRlbyIKIG1wZWc0dmlkZW9fcGFyc2VyX3NlbGVjdD0iaDI2 M2RzcCBtcGVndmlkZW9kZWMgcXBlbGRzcCIKIHZjMV9wYXJzZXJfc2VsZWN0PSJ2YzFkc3AiCitl dmNfcGFyc2VyX3NlbGVjdD0iZXZjcGFyc2UiCiAKICMgYml0c3RyZWFtX2ZpbHRlcnMKIGFhY19h ZHRzdG9hc2NfYnNmX3NlbGVjdD0iYWR0c19oZWFkZXIgbXBlZzRhdWRpbyIKQEAgLTMzNzYsNiAr MzM4Miw4IEBAIGxpYngyNjRfZW5jb2Rlcl9zZWxlY3Q9ImF0c2NfYTUzIgogbGlieDI2NHJnYl9l bmNvZGVyX2RlcHM9ImxpYngyNjQiCiBsaWJ4MjY0cmdiX2VuY29kZXJfc2VsZWN0PSJsaWJ4MjY0 X2VuY29kZXIiCiBsaWJ4MjY1X2VuY29kZXJfZGVwcz0ibGlieDI2NSIKK2xpYnhldmVfZW5jb2Rl cl9kZXBzPSJsaWJ4ZXZlIgorbGlieGV2ZF9kZWNvZGVyX2RlcHM9ImxpYnhldmQiCiBsaWJ4YXZz X2VuY29kZXJfZGVwcz0ibGlieGF2cyIKIGxpYnhhdnMyX2VuY29kZXJfZGVwcz0ibGlieGF2czIi CiBsaWJ4dmlkX2VuY29kZXJfZGVwcz0ibGlieHZpZCIKQEAgLTY2NTEsNiArNjY1OSw4IEBAIGVu YWJsZWQgbGlieDI2NCAgICAgICAgICAgJiYgeyBjaGVja19wa2dfY29uZmlnIGxpYngyNjQgeDI2 NCAic3RkaW50LmggeDI2NC5oIiB4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr X2NwcF9jb25kaXRpb24gbGlieDI2MiB4MjY0LmggIlgyNjRfTVBFRzIiCiBlbmFibGVkIGxpYngy NjUgICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4MjY1IHgyNjUgeDI2NS5oIHgy NjVfYXBpX2dldCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX2NwcF9j b25kaXRpb24gbGlieDI2NSB4MjY1LmggIlgyNjVfQlVJTEQgPj0gNzAiCitlbmFibGVkIGxpYnhl dmUgICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4ZXZlICJ4ZXZlID49IDEuMC4w IiAieGV2ZS5oIiB4ZXZlX2VuY29kZQorZW5hYmxlZCBsaWJ4ZXZkICAgICAgICAgICAmJiByZXF1 aXJlX3BrZ19jb25maWcgbGlieGV2ZCAieGV2ZCA+PSAxLjAuMCIgInhldmQuaCIgeGV2ZF9kZWNv ZGUKIGVuYWJsZWQgbGlieGF2cyAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJ4YXZzICJzdGRpbnQu aCB4YXZzLmgiIHhhdnNfZW5jb2Rlcl9lbmNvZGUgIi1seGF2cyAkcHRocmVhZHNfZXh0cmFsaWJz ICRsaWJtX2V4dHJhbGlicyIKIGVuYWJsZWQgbGlieGF2czIgICAgICAgICAgJiYgcmVxdWlyZV9w a2dfY29uZmlnIGxpYnhhdnMyICJ4YXZzMiA+PSAxLjMuMCIgInN0ZGludC5oIHhhdnMyLmgiIHhh dnMyX2FwaV9nZXQKIGVuYWJsZWQgbGlieHZpZCAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJ4dmlk IHh2aWQuaCB4dmlkX2dsb2JhbCAtbHh2aWRjb3JlCmRpZmYgLS1naXQgYS9kb2MvZGVjb2RlcnMu dGV4aSBiL2RvYy9kZWNvZGVycy50ZXhpCmluZGV4IGRlMjQyOWFiYmEuLjE3NTRjNTE3YjggMTAw NjQ0Ci0tLSBhL2RvYy9kZWNvZGVycy50ZXhpCisrKyBiL2RvYy9kZWNvZGVycy50ZXhpCkBAIC0x MjYsNiArMTI2LDI5IEBAIFNldCBhbW91bnQgb2YgZnJhbWUgdGhyZWFkcyB0byB1c2UgZHVyaW5n IGRlY29kaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwIChhdXRvCiAKIEBlbmQgdGFibGUKIAor QHNlY3Rpb24gbGlieGV2ZAorCitlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBEZWNvZGVyIChY RVZEKSBNUEVHLTUgRVZDIGRlY29kZXIgd3JhcHBlci4KKworVGhpcyBkZWNvZGVyIHJlcXVpcmVz IHRoZSBwcmVzZW5jZSBvZiB0aGUgbGlieGV2ZCBoZWFkZXJzIGFuZCBsaWJyYXJ5CitkdXJpbmcg Y29uZmlndXJhdGlvbi4gWW91IG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgdGhlIGJ1aWxk IHdpdGgKK0BvcHRpb257LS1lbmFibGUtbGlieGV2ZH0uCisKK1RoZSB4ZXZkIHByb2plY3Qgd2Vi c2l0ZSBpcyBhdCBAdXJse2h0dHBzOi8vZ2l0aHViLmNvbS9tcGVnNS94ZXZkfS4KKworQHN1YnNl Y3Rpb24gT3B0aW9ucworCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB0 aGUgbGlieGV2ZCB3cmFwcGVyLgorVGhlIHhldmQtZXF1aXZhbGVudCBvcHRpb25zIG9yIHZhbHVl cyBhcmUgbGlzdGVkIGluIHBhcmVudGhlc2VzIGZvciBlYXN5IG1pZ3JhdGlvbi4KKworVG8gZ2V0 IGEgbW9yZSBhY2N1cmF0ZSBhbmQgZXh0ZW5zaXZlIGRvY3VtZW50YXRpb24gb2YgdGhlIGxpYnhl dmQgb3B0aW9ucywKK2ludm9rZSB0aGUgY29tbWFuZCAgQGNvZGV7eGV2ZF9hcHAgLS1oZWxwfSBv ciBjb25zdWx0IHRoZSBsaWJ4ZXZkIGRvY3VtZW50YXRpb24uCisKK0B0YWJsZSBAb3B0aW9uCitA aXRlbSB0aHJlYWRzIChAZW1waHt0aHJlYWRzfSkKK0ZvcmNlIHRvIHVzZSBhIHNwZWNpZmljIG51 bWJlciBvZiB0aHJlYWRzCitAZW5kIHRhYmxlCisKIEBzZWN0aW9uIFFTViBEZWNvZGVycwogCiBU aGUgZmFtaWx5IG9mIEludGVsIFF1aWNrU3luYyBWaWRlbyBkZWNvZGVycyAoVkMxLCBNUEVHLTIs IEguMjY0LCBIRVZDLApkaWZmIC0tZ2l0IGEvZG9jL2VuY29kZXJzLnRleGkgYi9kb2MvZW5jb2Rl cnMudGV4aQppbmRleCBhYWM5ZjI1ZTU1Li5jNGU0YmRhYTVlIDEwMDY0NAotLS0gYS9kb2MvZW5j b2RlcnMudGV4aQorKysgYi9kb2MvZW5jb2RlcnMudGV4aQpAQCAtMjgwOCw2ICsyODA4LDExOCBA QCBmZm1wZWcgLWkgaW5wdXQgLWM6diBsaWJ4YXZzMiAteGF2czItcGFyYW1zIFJkb3FMZXZlbD0w IG91dHB1dC5hdnMyCiBAZW5kIGV4YW1wbGUKIEBlbmQgdGFibGUKIAorQHNlY3Rpb24gbGlieGV2 ZQorCitlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBFbmNvZGVyIChYRVZFKSBNUEVHLTUgRVZD IGVuY29kZXIgd3JhcHBlci4KKworVGhpcyBlbmNvZGVyIHJlcXVpcmVzIHRoZSBwcmVzZW5jZSBv ZiB0aGUgbGlieGV2ZSBoZWFkZXJzIGFuZCBsaWJyYXJ5CitkdXJpbmcgY29uZmlndXJhdGlvbi4g WW91IG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgdGhlIGJ1aWxkIHdpdGgKK0BvcHRpb257 LS1lbmFibGUtbGlieGV2ZX0uCisKK0BmbG9hdCBOT1RFCitNYW55IGxpYnhldmUgZW5jb2RlciBv cHRpb25zIGFyZSBtYXBwZWQgdG8gRkZtcGVnIGdsb2JhbCBjb2RlYyBvcHRpb25zLAord2hpbGUg dW5pcXVlIGVuY29kZXIgb3B0aW9ucyBhcmUgcHJvdmlkZWQgdGhyb3VnaCBwcml2YXRlIG9wdGlv bnMuCitBZGRpdGlvbmFsbHkgdGhlIHhldmUtcGFyYW1zIHByaXZhdGUgb3B0aW9ucyBhbGxvd3Mg b25lIHRvIHBhc3MgYSBsaXN0CitvZiBrZXk9dmFsdWUgdHVwbGVzIGFzIGFjY2VwdGVkIGJ5IHRo ZSBsaWJ4ZXZlIEBjb2Rle3BhcnNlX3hldmVfcGFyYW1zfSBmdW5jdGlvbi4KK0BlbmQgZmxvYXQK KworVGhlIHhldmUgcHJvamVjdCB3ZWJzaXRlIGlzIGF0IEB1cmx7aHR0cHM6Ly9naXRodWIuY29t L21wZWc1L3hldmV9LgorCitAc3Vic2VjdGlvbiBPcHRpb25zCisKK1RoZSBmb2xsb3dpbmcgb3B0 aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWJ4ZXZlIHdyYXBwZXIuCitUaGUgeGV2ZS1lcXVp dmFsZW50IG9wdGlvbnMgb3IgdmFsdWVzIGFyZSBsaXN0ZWQgaW4gcGFyZW50aGVzZXMgZm9yIGVh c3kgbWlncmF0aW9uLgorCitAZmxvYXQgTk9URQorVG8gcmVkdWNlIHRoZSBkdXBsaWNhdGlvbiBv ZiBkb2N1bWVudGF0aW9uLCBvbmx5IHRoZSBwcml2YXRlIG9wdGlvbnMKK2FuZCBzb21lIG90aGVy cyByZXF1aXJpbmcgc3BlY2lhbCBhdHRlbnRpb24gYXJlIGRvY3VtZW50ZWQgaGVyZS4gRm9yCit0 aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgdW5kb2N1bWVudGVkIGdlbmVyaWMgb3B0aW9ucywgc2Vl CitAcmVme2NvZGVjLW9wdGlvbnMsLHRoZSBDb2RlYyBPcHRpb25zIGNoYXB0ZXJ9LgorQGVuZCBm bG9hdAorCitAZmxvYXQgTk9URQorVG8gZ2V0IGEgbW9yZSBhY2N1cmF0ZSBhbmQgZXh0ZW5zaXZl IGRvY3VtZW50YXRpb24gb2YgdGhlIGxpYnhldmUgb3B0aW9ucywKK2ludm9rZSB0aGUgY29tbWFu ZCAgQGNvZGV7eGV2ZV9hcHAgLS1oZWxwfSBvciBjb25zdWx0IHRoZSBsaWJ4ZXZlIGRvY3VtZW50 YXRpb24uCitAZW5kIGZsb2F0CisKK0B0YWJsZSBAb3B0aW9uCitAaXRlbSBiIChAZW1waHtiaXRy YXRlfSkKK1NldCB0YXJnZXQgdmlkZW8gYml0cmF0ZSBpbiBiaXRzL3MuCitOb3RlIHRoYXQgRkZt cGVnw6LigqzihKJzIGIgb3B0aW9uIGlzIGV4cHJlc3NlZCBpbiBiaXRzL3MsIHdoaWxlIHhldmXD ouKCrOKEonMgYml0cmF0ZSBpcyBpbiBraWxvYml0cy9zLg0KKw0KK0BpdGVtIGJmIChAZW1waHti ZnJhbWVzfSkNCitTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIEIgZnJhbWVzICgxLDMsNywxNSku DQorDQorQGl0ZW0gZyAoQGVtcGh7a2V5aW50fSkNCitTZXQgdGhlIEdPUCBzaXplIChJLXBpY3R1 cmUgcGVyaW9kKS4NCisNCitAaXRlbSBwcmVzZXQgKEBlbXBoe3ByZXNldH0pDQorU2V0IHRoZSB4 ZXZlIHByZXNldC4NCitTZXQgdGhlIGVuY29kZXIgcHJlc2V0IHZhbHVlIHRvIGRldGVybWluZSBl bmNvZGluZyBzcGVlZCBbZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvXQ0KKw0KK0BpdGVtIHR1 bmUgKEBlbXBoe3R1bmV9KQ0KK1NldCB0aGUgZW5jb2RlciB0dW5lIHBhcmFtZXRlciBbcHNuciwg emVyb2xhdGVuY3ldDQorDQorQGl0ZW0gcHJvZmlsZSAoQGVtcGh7cHJvZmlsZX0pDQorU2V0IHRo ZSBlbmNvZGVyIHByb2ZpbGUgWzA6IGJhc2VsaWU7IDE6IG1haW5dDQorDQorQGl0ZW0gY3JmIChA ZW1waHtjcmZ9KQ0KK1NldCB0aGUgcXVhbGl0eSBmb3IgY29uc3RhbnQgcXVhbGl0eSBtb2RlLg0K K0NvbnN0YW50IHJhdGUgZmFjdG9yIDwtMS4uNTE+IFtkZWZhdWx0OiAzMl0NCisNCitAaXRlbSBx cCAoQGVtcGh7cXB9KQ0KK1NldCBjb25zdGFudCBxdWFudGl6YXRpb24gcmF0ZSBjb250cm9sIG1l dGhvZCBwYXJhbWV0ZXIuDQorUXVhbnRpemF0aW9uIHBhcmFtZXRlciBxcCA8MC4uNTE+IFtkZWZh dWx0OiAzMl0NCisNCitAaXRlbSB0aHJlYWRzIChAZW1waHt0aHJlYWRzfSkNCitGb3JjZSB0byB1 c2UgYSBzcGVjaWZpYyBudW1iZXIgb2YgdGhyZWFkcw0KKw0KK0BpdGVtIHhldmUtcGFyYW1zDQor U2V0IHhldmUgb3B0aW9ucyB1c2luZyBhIGxpc3Qgb2YgQHZhcntrZXl9PUB2YXJ7dmFsdWV9IGNv dXBsZXMgc2VwYXJhdGVkDQorYnkgIjoiLg0KKw0KK0ZvciBleGFtcGxlIHRvIHNwZWNpZnkgbGli eGV2ZSBlbmNvZGluZyBvcHRpb25zIHdpdGggQG9wdGlvbnsteGV2ZS1wYXJhbXN9Og0KKw0KK0Bl eGFtcGxlDQorZmZtcGVnIC1pIGlucHV0IC1jOnYgbGlieGV2ZSAteGV2ZS1wYXJhbXMgcHJvZmls ZT1tYWluOnR1bmU9emVyb2xhdGVuY3k6cHJlc2V0PWZhc3Q6cT0xNzpiZnJhbWVzPTE1OmJpdHJh dGU9MTAwayBvdXRwdXQubXA0DQorQGVuZCBleGFtcGxlDQorQGVuZCB0YWJsZQ0KKw0KK0BzdWJz dWJzZWN0aW9uIFN1cHBvcnRlZCBrZXkgdmFsdWVzIGZvciB4ZXZlLXBhcmFtcw0KKw0KK1NldCB4 ZXZlIG9wdGlvbnMgdXNpbmcgYSBsaXN0IG9mIEB2YXJ7a2V5fT1AdmFye3ZhbHVlfSBjb3VwbGVz IHNlcGFyYXRlZA0KKw0KK0B0YWJsZSBAb3B0aW9uDQorDQorQGl0ZW0gaGFzaA0KK0VtYmVkIHRo ZSBwaWN0dXJlIHNpZ25hdHVyZSAoSEFTSCkgZm9yIGNvbmZvcm1hbmNlIGNoZWNraW5nIGluIGRl Y29kaW5nLCAoMDogT2ZmLCAxOiBPbikNCisNCitAaXRlbSB2YnYtYnVmc2l6ZQ0KK1NldCB0aGUg VkJWIGJ1ZmZlciBzaXplOiBLYml0cyhub25lLEssayksIE1iaXRzKE0sbSkNCisNCitAaXRlbSBy Yy10eXBlDQorU2V0IHRoZSByYXRlIGNvbnRyb2wgdHlwZSwgKDA6IE9GRiwgMTogQUJSLCAyOiBD UkYpDQorDQorQGl0ZW0gYmZyYW1lcw0KK1NldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgQiBmcmFt ZXMgKDEsMyw3LDE1KQ0KKw0KK0BpdGVtIHByb2ZpbGUNCitTZXQgdGhlIFBST0ZJTEUgKG1haW4s IGJhc2VsaW5lKQ0KKw0KK0BpdGVtIHByZXNldA0KK1NldCB0aGUgZW5jb2RlciBQUkVTRVQgKGZh c3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibykNCisNCitAaXRlbSB0dW5lDQorU2V0IHRoZSBlbmNv ZGVyIFRVTkUgKHBzbnIsIHplcm9sYXRlbmN5KQ0KKw0KK0BpdGVtIGJpdHJhdGUNCitTZXQgdGhl IEJpdHJhdGUgaW4gdGVybXMgb2Yga2lsby1iaXRzIHBlciBzZWNvbmQ6IEticHMobm9uZSxLLGsp LCBNYnBzKE0sbSkNCisNCitAaXRlbSBxcA0KK1NldCB0aGUgUVAgdmFsdWUgKDB+NTEpDQorDQor QGVuZCB0YWJsZQ0KKw0KIEBzZWN0aW9uIGxpYnh2aWQNCiANCiBYdmlkIE1QRUctNCBQYXJ0IDIg ZW5jb2RlciB3cmFwcGVyLg0KZGlmZiAtLWdpdCBhL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkg Yi9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpDQppbmRleCAyMzg1NjhmMmJiLi41YjY2M2E0M2Fi IDEwMDY0NA0KLS0tIGEvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQ0KKysrIGIvZG9jL2dlbmVy YWxfY29udGVudHMudGV4aQ0KQEAgLTMzNiw2ICszMzYsMjIgQEAgbGlieGF2czIgaXMgdW5kZXIg dGhlIEdOVSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXINCiBkZXRhaWxzKSwgeW91 IG11c3QgdXBncmFkZSBGRm1wZWcncyBsaWNlbnNlIHRvIEdQTCBpbiBvcmRlciB0byB1c2UgaXQu DQogQGVuZCBmbG9hdA0KIA0KK0BzZWN0aW9uIGVYdHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIEVu Y29kZXIgKFhFVkUpDQorDQorRkZtcGVnIGNhbiBtYWtlIHVzZSBvZiB0aGUgWEVWRSBsaWJyYXJ5 IGZvciBFVkMgdmlkZW8gZW5jb2RpbmcuDQorDQorR28gdG8gQHVybHtodHRwczovL2dpdGh1Yi5j b20vbXBlZzUveGV2ZX0gYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGZvcg0KK2luc3RhbGxp bmcgdGhlIFhFVkUgbGlicmFyeS4gVGhlbiBwYXNzIEBjb2Rley0tZW5hYmxlLWxpYnhldmV9IHRv IGNvbmZpZ3VyZSB0bw0KK2VuYWJsZSBpdC4NCisNCitAc2VjdGlvbiBlWHRyYS1mYXN0IEVzc2Vu dGlhbCBWaWRlbyBEZWNvZGVyIChYRVZEKQ0KKw0KK0ZGbXBlZyBjYW4gbWFrZSB1c2Ugb2YgdGhl IFhFVkQgbGlicmFyeSBmb3IgRVZDIHZpZGVvIGRlY29kaW5nLg0KKw0KK0dvIHRvIEB1cmx7aHR0 cHM6Ly9naXRodWIuY29tL21wZWc1L3hldmR9IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBm b3INCitpbnN0YWxsaW5nIHRoZSBYRVZEIGxpYnJhcnkuIFRoZW4gcGFzcyBAY29kZXstLWVuYWJs ZS1saWJ4ZXZkfSB0byBjb25maWd1cmUgdG8NCitlbmFibGUgaXQuDQorDQogQHNlY3Rpb24gWlZC SQ0KIA0KIFpWQkkgaXMgYSBWQkkgZGVjb2RpbmcgbGlicmFyeSB3aGljaCBjYW4gYmUgdXNlZCBi eSBGRm1wZWcgdG8gZGVjb2RlIERWQg0KQEAgLTU4NCw2ICs2MDAsNyBAQCBsaWJyYXJ5Og0KIEBp dGVtIHJhdyBEVFMgICAgICAgICAgICAgICAgICAgQHRhYiBYIEB0YWIgWA0KIEBpdGVtIHJhdyBE VFMtSEQgICAgICAgICAgICAgICAgQHRhYiAgIEB0YWIgWA0KIEBpdGVtIHJhdyBFLUFDLTMgICAg ICAgICAgICAgICAgQHRhYiBYIEB0YWIgWA0KK0BpdGVtIHJhdyBFVkMgICAgICAgICAgICAgICAg ICAgQHRhYiBYIEB0YWIgWA0KIEBpdGVtIHJhdyBGTEFDICAgICAgICAgICAgICAgICAgQHRhYiBY IEB0YWIgWA0KIEBpdGVtIHJhdyBHU00gICAgICAgICAgICAgICAgICAgQHRhYiAgIEB0YWIgWA0K IEBpdGVtIHJhdyBILjI2MSAgICAgICAgICAgICAgICAgQHRhYiBYIEB0YWIgWA0KQEAgLTkxNSw2 ICs5MzIsOCBAQCBmb2xsb3dpbmcgaW1hZ2UgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOg0KIEBpdGVt IEVsZWN0cm9uaWMgQXJ0cyBUUUkgdmlkZW8gIEB0YWIgICAgIEB0YWIgIFgNCiBAaXRlbSBFc2Nh cGUgMTI0ICAgICAgICAgICAgIEB0YWIgICAgIEB0YWIgIFgNCiBAaXRlbSBFc2NhcGUgMTMwICAg ICAgICAgICAgIEB0YWIgICAgIEB0YWIgIFgNCitAaXRlbSBFVkMgLyBNUEVHLTUgUGFydCAxICAg IEB0YWIgIFggIEB0YWIgIFgNCisgICAgQHRhYiBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc3VwcG9y dGVkIHRocm91Z2ggZXh0ZXJuYWwgbGlicmFyaWVzIGxpYnhldmUgYW5kIGxpYnhldmQNCiBAaXRl bSBGRm1wZWcgdmlkZW8gY29kZWMgIzEgIEB0YWIgIFggIEB0YWIgIFgNCiAgICAgQHRhYiBsb3Nz bGVzcyBjb2RlYyAoZm91cmNjOiBGRlYxKQ0KIEBpdGVtIEZsYXNoIFNjcmVlbiBWaWRlbyB2MSAg QHRhYiAgWCAgQHRhYiAgWA0KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJh dmNvZGVjL01ha2VmaWxlDQppbmRleCA0YjEyMjI4MDcwLi42ZjY1ZTU5MDJhIDEwMDY0NA0KLS0t IGEvbGliYXZjb2RlYy9NYWtlZmlsZQ0KKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQ0KQEAgLTEw OTYsNiArMTA5Niw4IEBAIE9CSlMtJChDT05GSUdfTElCV0VCUF9BTklNX0VOQ09ERVIpICAgICAg ICs9IGxpYndlYnBlbmNfY29tbW9uLm8gbGlid2VicGVuY19hbmltDQogT0JKUy0kKENPTkZJR19M SUJYMjYyX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieDI2NC5vDQogT0JKUy0kKENPTkZJR19M SUJYMjY0X0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieDI2NC5vDQogT0JKUy0kKENPTkZJR19M SUJYMjY1X0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieDI2NS5vDQorT0JKUy0kKENPTkZJR19M SUJYRVZFX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieGV2ZS5vDQorT0JKUy0kKENPTkZJR19M SUJYRVZEX0RFQ09ERVIpICAgICAgICAgICAgKz0gbGlieGV2ZC5vDQogT0JKUy0kKENPTkZJR19M SUJYQVZTX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieGF2cy5vDQogT0JKUy0kKENPTkZJR19M SUJYQVZTMl9FTkNPREVSKSAgICAgICAgICAgKz0gbGlieGF2czIubw0KIE9CSlMtJChDT05GSUdf TElCWFZJRF9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYnh2aWQubw0KQEAgLTExNjEsNiArMTE2 Myw3IEBAIE9CSlMtJChDT05GSUdfVlA5X1BBUlNFUikgICAgICAgICAgICAgICs9IHZwOV9wYXJz ZXIubw0KIE9CSlMtJChDT05GSUdfV0VCUF9QQVJTRVIpICAgICAgICAgICAgICs9IHdlYnBfcGFy c2VyLm8NCiBPQkpTLSQoQ09ORklHX1hCTV9QQVJTRVIpICAgICAgICAgICAgICArPSB4Ym1fcGFy c2VyLm8NCiBPQkpTLSQoQ09ORklHX1hNQV9QQVJTRVIpICAgICAgICAgICAgICArPSB4bWFfcGFy c2VyLm8NCitPQkpTLSQoQ09ORklHX0VWQ19QQVJTRVIpICAgICAgICAgICAgICArPSBldmNfcGFy c2VyLm8NCiANCiAjIGJpdHN0cmVhbSBmaWx0ZXJzDQogT0JKUy0kKENPTkZJR19BQUNfQURUU1RP QVNDX0JTRikgICAgICAgICAgKz0gYWFjX2FkdHN0b2FzY19ic2Yubw0KZGlmZiAtLWdpdCBhL2xp YmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jDQppbmRleCA1ODU5 MThkYTkzLi4wYjdkNWE1YjZhIDEwMDY0NA0KLS0tIGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYw0K KysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYw0KQEAgLTc4OCw4ICs3ODgsMTEgQEAgZXh0ZXJu IGNvbnN0IEZGQ29kZWMgZmZfbGlieDI2Ml9lbmNvZGVyOw0KICNlbmRpZg0KIGV4dGVybiBMSUJY MjY0X0NPTlNUIEZGQ29kZWMgZmZfbGlieDI2NF9lbmNvZGVyOw0KICNlbmRpZg0KKw0KIGV4dGVy biBjb25zdCBGRkNvZGVjIGZmX2xpYngyNjRyZ2JfZW5jb2RlcjsNCiBleHRlcm4gRkZDb2RlYyBm Zl9saWJ4MjY1X2VuY29kZXI7DQorZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlieGV2ZV9lbmNv ZGVyOw0KK2V4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnhldmRfZGVjb2RlcjsNCiBleHRlcm4g Y29uc3QgRkZDb2RlYyBmZl9saWJ4YXZzX2VuY29kZXI7DQogZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfbGlieGF2czJfZW5jb2RlcjsNCiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJ4dmlkX2Vu Y29kZXI7DQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hdmNvZGVjLmggYi9saWJhdmNvZGVjL2F2 Y29kZWMuaA0KaW5kZXggNGRhZTIzZDA2ZS4uYjgzODcwYzE3NCAxMDA2NDQNCi0tLSBhL2xpYmF2 Y29kZWMvYXZjb2RlYy5oDQorKysgYi9saWJhdmNvZGVjL2F2Y29kZWMuaA0KQEAgLTE2NjYsNiAr MTY2Niw5IEBAIHR5cGVkZWYgc3RydWN0IEFWQ29kZWNDb250ZXh0IHsNCiAjZGVmaW5lIEZGX1BS T0ZJTEVfS0xWQV9TWU5DIDANCiAjZGVmaW5lIEZGX1BST0ZJTEVfS0xWQV9BU1lOQyAxDQogDQor I2RlZmluZSBGRl9QUk9GSUxFX0VWQ19CQVNFTElORSAgICAgICAgICAgICAwDQorI2RlZmluZSBG Rl9QUk9GSUxFX0VWQ19NQUlOICAgICAgICAgICAgICAgICAxDQorDQogICAgIC8qKg0KICAgICAg KiBsZXZlbA0KICAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4NCmRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL2V2Y19wYXJzZXIuYyBiL2xpYmF2Y29kZWMvZXZjX3BhcnNlci5jDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uN2M0MWViOWFmNA0KLS0tIC9kZXYvbnVs bA0KKysrIGIvbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMNCkBAIC0wLDAgKzEsNTE0IEBADQorLyoN CisgKiBFVkMgQVZDIGZvcm1hdCBwYXJzZXINCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAyMSBE YXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4NCisgKg0KKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4NCisgKg0KKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uDQorICoNCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KKyAqLw0KKw0KKyNpbmNsdWRlIDxzdGRp bnQuaD4NCisNCisjaW5jbHVkZSA8eGV2ZC5oPg0KKw0KKyNpbmNsdWRlICJsaWJhdnV0aWwvY29t bW9uLmgiDQorDQorI2luY2x1ZGUgInBhcnNlci5oIg0KKyNpbmNsdWRlICJnb2xvbWIuaCINCisN CisjZGVmaW5lIEVWQ19OQUxfSEVBREVSX1NJWkUgICAyIC8qIGJ5dGUgKi8NCisjZGVmaW5lIE1B WF9TUFNfQ05UICAxNiAvKiBkZWZpbmVkIHZhbHVlIGluIEVWQyBzdGFuZGFyZCAqLw0KKw0KKy8v IFRoZSBzdHVyY3R1cmUgcmVmbGVjdHMgU1BTIFJCU1AocmF3IGJ5dGUgc2VxdWVuY2UgcGF5bG9h ZCkgbGF5b3V0DQorLy8gQHNlZSBJU09fSUVDXzIzMDk0LTEgc2VjdGlvbiA3LjMuMi4xDQorLy8N CisvLyBUaGUgZm9sbG93aW5nIGRlc2NyaXB0b3JzIHNwZWNpZnkgdGhlIHBhcnNpbmcgcHJvY2Vz cyBvZiBlYWNoIGVsZW1lbnQNCisvLyB1KG4pIC0gdW5zaWduZWQgaW50ZWdlciB1c2luZyBuIGJp dHMNCisvLyB1ZSh2KSAtIHVuc2lnbmVkIGludGVnZXIgMC10aCBvcmRlciBFeHBfR29sb21iLWNv ZGVkIHN5bnRheCBlbGVtZW50IHdpdGggdGhlIGxlZnQgYml0IGZpcnN0DQordHlwZWRlZiBzdHJ1 Y3QgRVZDUGFyc2VyU1BTIHsNCisgICAgaW50IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZDsgICAv LyB1ZSh2KQ0KKyAgICBpbnQgcHJvZmlsZV9pZGM7ICAgICAgICAgICAgICAgIC8vIHUoOCkNCisg ICAgaW50IGxldmVsX2lkYzsgICAgICAgICAgICAgICAgICAvLyB1KDgpDQorICAgIGludCB0b29s c2V0X2lkY19oOyAgICAgICAgICAgICAgLy8gdSgzMikNCisgICAgaW50IHRvb2xzZXRfaWRjX2w7 ICAgICAgICAgICAgICAvLyB1KDMyKQ0KKyAgICBpbnQgY2hyb21hX2Zvcm1hdF9pZGM7ICAgICAg ICAgIC8vIHVlKHYpDQorICAgIGludCBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOyAgLy8gdWUo dikNCisgICAgaW50IHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOyAvLyB1ZSh2KQ0KKyAgICBp bnQgYml0X2RlcHRoX2x1bWFfbWludXM4OyAgICAgIC8vIHVlKHYpDQorICAgIGludCBiaXRfZGVw dGhfY2hyb21hX21pbnVzODsgICAgLy8gdWUodikNCisNCisgICAgaW50IHNwc19idHRfZmxhZzsg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1KDEpDQorICAgIGludCBsb2cyX2N0dV9zaXpl X21pbnVzNTsgICAgICAgICAgICAgICAgICAgLy8gdWUodikNCisgICAgaW50IGxvZzJfbWluX2Ni X3NpemVfbWludXMyOyAgICAgICAgICAgICAgICAvLyB1ZSh2KQ0KKyAgICBpbnQgbG9nMl9kaWZm X2N0dV9tYXhfMTRfY2Jfc2l6ZTsgICAgICAgICAgIC8vIHVlKHYpDQorICAgIGludCBsb2cyX2Rp ZmZfY3R1X21heF90dF9jYl9zaXplOyAgICAgICAgICAgLy8gdWUodikNCisgICAgaW50IGxvZzJf ZGlmZl9taW5fY2JfbWluX3R0X2NiX3NpemVfbWludXMyOyAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQg c3BzX3N1Y29fZmxhZzsgICAgICAgICAgICAgICAgICAgICAgIC8vIHUoMSkNCisgICAgaW50IGxv ZzJfZGlmZl9jdHVfc2l6ZV9tYXhfc3Vjb19jYl9zaXplOyAvLyB1ZSh2KQ0KKyAgICBpbnQgbG9n Ml9kaWZmX21heF9zdWNvX21pbl9zdWNvX2NiX3NpemU7IC8vIHVlKHYpDQorDQorICAgIGludCBz cHNfYWRtdnBfZmxhZzsgICAgIC8vIHUoMSkNCisgICAgaW50IHNwc19hZmZpbmVfZmxhZzsgICAg Ly8gdSgxKQ0KKyAgICBpbnQgc3BzX2FtdnJfZmxhZzsgICAgICAvLyB1KDEpDQorICAgIGludCBz cHNfZG12cl9mbGFnOyAgICAgIC8vIHUoMSkNCisgICAgaW50IHNwc19tbXZkX2ZsYWc7ICAgICAg Ly8gdSgxKQ0KKyAgICBpbnQgc3BzX2htdnBfZmxhZzsgICAgICAvLyB1KDEpDQorDQorICAgIGlu dCBzcHNfZWlwZF9mbGFnOyAgICAgICAgICAgICAgICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX2li Y19mbGFnOyAgICAgICAgICAgICAgICAgIC8vIHUoMSkNCisgICAgaW50IGxvZzJfbWF4X2liY19j YW5kX3NpemVfbWludXMyOyAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgc3BzX2NtX2luaXRfZmxhZzsg Ly8gdSgxKQ0KKyAgICBpbnQgc3BzX2FkY2NfZmxhZzsgICAgLy8gdSgxKQ0KKw0KKyAgICBpbnQg c3BzX2lxdF9mbGFnOyAvLyB1KDEpDQorICAgIGludCBzcHNfYXRzX2ZsYWc7IC8vIHUoMSkNCisN CisgICAgaW50IHNwc19hZGRiX2ZsYWc7ICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX2FsZl9mbGFn OyAgICAvLyB1KDEpDQorICAgIGludCBzcHNfaHRkZl9mbGFnOyAgIC8vIHUoMSkNCisgICAgaW50 IHNwc19ycGxfZmxhZzsgICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX3BvY3NfZmxhZzsgICAvLyB1 KDEpDQorICAgIGludCBzcHNfZHF1YW50X2ZsYWc7IC8vIHUoMSkNCisgICAgaW50IHNwc19kcmFf ZmxhZzsgICAgLy8gdSgxKQ0KKw0KKyAgICBpbnQgbG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2Jf bWludXM0OyAvLyB1ZSh2KQ0KKyAgICBpbnQgbG9nMl9zdWJfZ29wX2xlbmd0aDsgICAgICAgICAg ICAgICAvLyB1ZSh2KQ0KKyAgICBpbnQgbG9nMl9yZWZfcGljX2dhcF9sZW5ndGg7ICAgICAgICAg ICAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgbWF4X251bV90aWQwX3JlZl9waWNzOyAvLyB1ZSh2KQ0K Kw0KKyAgICBpbnQgc3BzX21heF9kZWNfcGljX2J1ZmZlcmluZ19taW51czE7IC8vIHVlKHYpDQor ICAgIGludCBsb25nX3Rlcm1fcmVmX3BpY19mbGFnOyAgICAgICAgICAgLy8gdSgxKQ0KKyAgICBp bnQgcnBsMV9zYW1lX2FzX3JwbDBfZmxhZzsgICAgICAgICAgIC8vIHUoMSkNCisgICAgaW50IG51 bV9yZWZfcGljX2xpc3RfaW5fc3BzWzJdOyAgICAgICAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgcGlj dHVyZV9jcm9wcGluZ19mbGFnOyAgICAgIC8vIHUoMSkNCisgICAgaW50IHBpY3R1cmVfY3JvcF9s ZWZ0X29mZnNldDsgICAvLyB1ZSh2KQ0KKyAgICBpbnQgcGljdHVyZV9jcm9wX3JpZ2h0X29mZnNl dDsgIC8vIHVlKHYpDQorICAgIGludCBwaWN0dXJlX2Nyb3BfdG9wX29mZnNldDsgICAgLy8gdWUo dikNCisgICAgaW50IHBpY3R1cmVfY3JvcF9ib3R0b21fb2Zmc2V0OyAvLyB1ZSh2KQ0KKw0KK30g RVZDUGFyc2VyU1BTOw0KKw0KK3R5cGVkZWYgc3RydWN0IEVWQ1BhcnNlckNvbnRleHQgew0KKyAg ICBQYXJzZUNvbnRleHQgcGM7DQorICAgIEVWQ1BhcnNlclNQUyBzcHNbTUFYX1NQU19DTlRdOw0K KyAgICBpbnQgaXNfYXZjOw0KKyAgICBpbnQgbmFsX2xlbmd0aF9zaXplOw0KKyAgICBpbnQgdG9f cmVhZDsNCisgICAgaW50IGluY29tcGxldGVfbmFsdV9wcmVmaXhfcmVhZDsgLy8gVGhlIGZsYWcg aXMgc2V0IHRvIDEgd2hlbiBhbiBpbmNvbXBsZXRlIE5BTCB1bml0IHByZWZpeCBoYXMgYmVlbiBy ZWFkDQorDQorICAgIGludCBnb3Rfc3BzOw0KKyAgICBpbnQgZ290X3BwczsNCisgICAgaW50IGdv dF9zZWk7DQorICAgIGludCBnb3Rfc2xpY2U7DQorfSBFVkNQYXJzZXJDb250ZXh0Ow0KKw0KK3N0 YXRpYyBpbnQgZ2V0X25hbHVfdHlwZShjb25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUsIEFW Q29kZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIGludCB1bml0X3R5cGVfcGx1czEgPSAwOw0K KyAgICBYRVZEX0lORk8gaW5mbzsNCisgICAgaW50IHJldDsNCisNCisgICAgaWYoYnNfc2l6ZSA+ PSBFVkNfTkFMX0hFQURFUl9TSVpFKSB7DQorICAgICAgICByZXQgPSB4ZXZkX2luZm8oKHZvaWQg KilicywgRVZDX05BTF9IRUFERVJfU0laRSwgMSwgJmluZm8pOw0KKyAgICAgICAgaWYgKFhFVkRf RkFJTEVEKHJldCkpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkNhbm5vdCBnZXQgYml0c3RyZWFtIGluZm9ybWF0aW9uXG4iKTsNCisgICAgICAgICAgICByZXR1 cm4gLTE7DQorICAgICAgICB9DQorICAgICAgICB1bml0X3R5cGVfcGx1czEgPSBpbmZvLm5hbHVf dHlwZTsNCisNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdW5pdF90eXBlX3BsdXMxIC0gMTsNCit9 DQorDQorc3RhdGljIHVpbnQzMl90IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKGNvbnN0IHVpbnQ4X3Qg KmJzLCBpbnQgYnNfc2l6ZSwgQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KK3sNCisgICAgdWludDMy X3QgbGVuID0gMDsNCisgICAgWEVWRF9JTkZPIGluZm87DQorICAgIGludCByZXQ7DQorDQorICAg IGlmKGJzX3NpemUgPj0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSkgew0KKyAgICAgICAgcmV0 ID0geGV2ZF9pbmZvKCh2b2lkICopYnMsIFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUsIDEsICZp bmZvKTsNCisgICAgICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgZ2V0IGJpdHN0cmVhbSBpbmZvcm1hdGlv blxuIik7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9DQorICAgICAgICBsZW4g PSBpbmZvLm5hbHVfbGVuOw0KKyAgICAgICAgaWYobGVuID09IDApIHsNCisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYml0c3RyZWFtIHNpemUhXG4iKTsN CisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1 cm4gbGVuOw0KK30NCisNCisvLyBAc2VlIElTT19JRUNfMjMwOTQtMSAoNy4zLjIuMSBTUFMgUkJT UCBzeW50YXgpDQorc3RhdGljIEVWQ1BhcnNlclNQUyAqcGFyc2Vfc3BzKGNvbnN0IHVpbnQ4X3Qg KmJzLCBpbnQgYnNfc2l6ZSwgRVZDUGFyc2VyQ29udGV4dCAqZXYpDQorew0KKyAgICBHZXRCaXRD b250ZXh0IGdiOw0KKyAgICBFVkNQYXJzZXJTUFMgKnNwczsNCisgICAgaW50IHNwc19zZXFfcGFy YW1ldGVyX3NldF9pZDsNCisNCisgICAgaWYoaW5pdF9nZXRfYml0czgoJmdiLCBicywgYnNfc2l6 ZSkgPCAwKQ0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorDQorICAgIHNwc19zZXFfcGFyYW1ldGVy X3NldF9pZCA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisNCisgICAgaWYoc3BzX3NlcV9wYXJhbWV0 ZXJfc2V0X2lkID49IE1BWF9TUFNfQ05UKQ0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorDQorICAg IHNwcyA9ICZldi0+c3BzW3Nwc19zZXFfcGFyYW1ldGVyX3NldF9pZF07DQorICAgIHNwcy0+c3Bz X3NlcV9wYXJhbWV0ZXJfc2V0X2lkID0gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkOw0KKw0KKyAg ICAvLyB0aGUgQmFzZWxpbmUgcHJvZmlsZSBpcyBpbmRpY2F0ZWQgYnkgcHJvZmlsZV9pZGMgZXFh bCB0byAwDQorICAgIC8vIHRoZSBNYWluIHByb2ZpbGUgaXMgaW5kaWNhdGVkIGJ5IHByb2ZpbGVf aWRjIGVxYWwgdG8gMQ0KKyAgICBzcHMtPnByb2ZpbGVfaWRjID0gZ2V0X2JpdHMoJmdiLCA4KTsN CisNCisgICAgc3BzLT5sZXZlbF9pZGMgPSBnZXRfYml0cygmZ2IsIDgpOw0KKw0KKyAgICBza2lw X2JpdHNfbG9uZygmZ2IsIDMyKTsgLyogc2tpcCB0b29sc2V0X2lkY19oICovDQorICAgIHNraXBf Yml0c19sb25nKCZnYiwgMzIpOyAvKiBza2lwIHRvb2xzZXRfaWRjX2wgKi8NCisNCisgICAgLy8g MCAtIG1vbm9jaHJvbWUNCisgICAgLy8gMSAtIDQ6MjowDQorICAgIC8vIDIgLSA0OjI6Mg0KKyAg ICAvLyAzIC0gNDo0OjQNCisgICAgc3BzLT5jaHJvbWFfZm9ybWF0X2lkYyA9IGdldF91ZV9nb2xv bWIoJmdiKTsNCisNCisgICAgc3BzLT5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzID0gZ2V0X3Vl X2dvbG9tYigmZ2IpOw0KKyAgICBzcHMtPnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzID0gZ2V0 X3VlX2dvbG9tYigmZ2IpOw0KKw0KKyAgICBzcHMtPmJpdF9kZXB0aF9sdW1hX21pbnVzOCA9IGdl dF91ZV9nb2xvbWIoJmdiKTsNCisgICAgc3BzLT5iaXRfZGVwdGhfY2hyb21hX21pbnVzOCA9IGdl dF91ZV9nb2xvbWIoJmdiKTsNCisNCisgICAgc3BzLT5zcHNfYnR0X2ZsYWcgPSBnZXRfYml0cygm Z2IsIDEpOw0KKyAgICBpZihzcHMtPnNwc19idHRfZmxhZykgew0KKyAgICAgICAgc3BzLT5sb2cy X2N0dV9zaXplX21pbnVzNSA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgICAgIHNwcy0+bG9n Ml9taW5fY2Jfc2l6ZV9taW51czIgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgICAgICBzcHMt PmxvZzJfZGlmZl9jdHVfbWF4XzE0X2NiX3NpemUgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAg ICAgICBzcHMtPmxvZzJfZGlmZl9jdHVfbWF4X3R0X2NiX3NpemUgPSBnZXRfdWVfZ29sb21iKCZn Yik7DQorICAgICAgICBzcHMtPmxvZzJfZGlmZl9taW5fY2JfbWluX3R0X2NiX3NpemVfbWludXMy ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICB9DQorDQorICAgIHNwcy0+c3BzX3N1Y29fZmxh ZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIGlmKHNwcy0+c3BzX3N1Y29fZmxhZykgew0KKyAg ICAgICAgc3BzLT5sb2cyX2RpZmZfY3R1X3NpemVfbWF4X3N1Y29fY2Jfc2l6ZSA9IGdldF91ZV9n b2xvbWIoJmdiKTsNCisgICAgICAgIHNwcy0+bG9nMl9kaWZmX21heF9zdWNvX21pbl9zdWNvX2Ni X3NpemUgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgIH0NCisNCisgICAgc3BzLT5zcHNfYWRt dnBfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIGlmKHNwcy0+c3BzX2FkbXZwX2ZsYWcp IHsNCisgICAgICAgIHNwcy0+c3BzX2FmZmluZV9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisg ICAgICAgIHNwcy0+c3BzX2FtdnJfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgICAgICBz cHMtPnNwc19kbXZyX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICAgICAgc3BzLT5zcHNf bW12ZF9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgICAgIHNwcy0+c3BzX2htdnBfZmxh ZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIH0NCisNCisgICAgc3BzLT5zcHNfZWlwZF9mbGFn ID0gIGdldF9iaXRzKCZnYiwgMSk7DQorICAgIGlmKHNwcy0+c3BzX2VpcGRfZmxhZykgew0KKyAg ICAgICAgc3BzLT5zcHNfaWJjX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICAgICAgaWYo c3BzLT5zcHNfaWJjX2ZsYWcpDQorICAgICAgICAgICAgc3BzLT5sb2cyX21heF9pYmNfY2FuZF9z aXplX21pbnVzMiA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgfQ0KKw0KKyAgICBzcHMtPnNw c19jbV9pbml0X2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICBpZihzcHMtPnNwc19jbV9p bml0X2ZsYWcpDQorICAgICAgICBzcHMtPnNwc19hZGNjX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEp Ow0KKw0KKyAgICBzcHMtPnNwc19pcXRfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIGlm KHNwcy0+c3BzX2lxdF9mbGFnKQ0KKyAgICAgICAgc3BzLT5zcHNfYXRzX2ZsYWcgPSBnZXRfYml0 cygmZ2IsIDEpOw0KKw0KKyAgICBzcHMtPnNwc19hZGRiX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEp Ow0KKyAgICBzcHMtPnNwc19hbGZfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIHNwcy0+ c3BzX2h0ZGZfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIHNwcy0+c3BzX3JwbF9mbGFn ID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgc3BzLT5zcHNfcG9jc19mbGFnID0gZ2V0X2JpdHMo JmdiLCAxKTsNCisgICAgc3BzLT5zcHNfZHF1YW50X2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0K KyAgICBzcHMtPnNwc19kcmFfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorDQorICAgIGlmKHNw cy0+c3BzX3BvY3NfZmxhZykNCisgICAgICAgIHNwcy0+bG9nMl9tYXhfcGljX29yZGVyX2NudF9s c2JfbWludXM0ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKw0KKyAgICBpZighc3BzLT5zcHNfcG9j c19mbGFnIHx8ICFzcHMtPnNwc19ycGxfZmxhZykgew0KKyAgICAgICAgc3BzLT5sb2cyX3N1Yl9n b3BfbGVuZ3RoID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICAgICAgaWYoc3BzLT5sb2cyX3N1 Yl9nb3BfbGVuZ3RoID09IDApDQorICAgICAgICAgICAgc3BzLT5sb2cyX3JlZl9waWNfZ2FwX2xl bmd0aCA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gc3BzOw0K K30NCisNCitzdGF0aWMgaW50IHBhcnNlX25hbF91bml0cyhBVkNvZGVjUGFyc2VyQ29udGV4dCAq cywgY29uc3QgdWludDhfdCAqYnMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJz X3NpemUsIEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIEVWQ1BhcnNlckNvbnRleHQg KmV2ID0gcy0+cHJpdl9kYXRhOw0KKyAgICBpbnQgbmFsdV90eXBlLCBuYWx1X3NpemU7DQorICAg IHVuc2lnbmVkIGNoYXIgKmJpdHMgPSAodW5zaWduZWQgY2hhciAqKWJzOw0KKyAgICBpbnQgYml0 c19zaXplID0gYnNfc2l6ZTsNCisNCisgICAgYXZjdHgtPmNvZGVjX2lkID0gQVZfQ09ERUNfSURf RVZDOw0KKw0KKyAgICBuYWx1X3NpemUgPSByZWFkX25hbF91bml0X2xlbmd0aChiaXRzLCBiaXRz X3NpemUsIGF2Y3R4KTsNCisgICAgaWYobmFsdV9zaXplID09IDApIHsNCisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBOQUwgdW5pdCBzaXplOiAoJWQpXG4iLCBu YWx1X3NpemUpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGJpdHMgKz0g WEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsNCisgICAgYml0c19zaXplIC09IFhFVkRfTkFMX1VO SVRfTEVOR1RIX0JZVEU7DQorDQorICAgIG5hbHVfdHlwZSA9IGdldF9uYWx1X3R5cGUoYml0cywg Yml0c19zaXplLCBhdmN0eCk7DQorDQorICAgIGJpdHMgKz0gRVZDX05BTF9IRUFERVJfU0laRTsN CisgICAgYml0c19zaXplIC09IEVWQ19OQUxfSEVBREVSX1NJWkU7DQorDQorICAgIGlmIChuYWx1 X3R5cGUgPT0gWEVWRF9OVVRfU1BTKSB7IC8vIE5BTCBVbml0IHR5cGU6IFNQUyAoU2VxdWVuY2Ug UGFyYW1ldGVyIFNldCkNCisgICAgICAgIEVWQ1BhcnNlclNQUyAqc3BzOw0KKw0KKyAgICAgICAg c3BzID0gcGFyc2Vfc3BzKGJpdHMsIGJpdHNfc2l6ZSwgZXYpOw0KKw0KKyAgICAgICAgYXZjdHgt PmNvZGVkX3dpZHRoICAgICAgICAgPSBzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXM7DQor ICAgICAgICBhdmN0eC0+Y29kZWRfaGVpZ2h0ICAgICAgICA9IHNwcy0+cGljX2hlaWdodF9pbl9s dW1hX3NhbXBsZXM7DQorICAgICAgICBhdmN0eC0+d2lkdGggICAgICAgICAgICAgICA9IHNwcy0+ cGljX3dpZHRoX2luX2x1bWFfc2FtcGxlczsNCisgICAgICAgIGF2Y3R4LT5oZWlnaHQgICAgICAg ICAgICAgID0gc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlczsNCisNCisgICAgICAgIGlm KHNwcy0+cHJvZmlsZV9pZGMgPT0gMCkgYXZjdHgtPnByb2ZpbGUgPSBGRl9QUk9GSUxFX0VWQ19C QVNFTElORTsNCisgICAgICAgIGVsc2UgaWYgKHNwcy0+cHJvZmlsZV9pZGMgPT0gMSkgYXZjdHgt PnByb2ZpbGUgPSBGRl9QUk9GSUxFX0VWQ19NQUlOOw0KKyAgICAgICAgZWxzZSB7DQorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJOb3Qgc3VwcG9ydGVkIHByb2ZpbGUg KCVkKVxuIiwgc3BzLT5wcm9maWxlX2lkYyk7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAg ICAgICAgfQ0KKw0KKyAgICAgICAgLy8gQ3VycmVudGx5IFhFVkQgZGVjb2RlciBzdXBwb3J0cyBv bnkgWUNCQ1I0MjBfMTBMRSBjaHJvbWEgZm9ybWF0IGZvciBFVkMgc3RyZWFtDQorICAgICAgICBz d2l0Y2goc3BzLT5jaHJvbWFfZm9ybWF0X2lkYykgew0KKyAgICAgICAgY2FzZSAwOiAvKiBZQ0JD UjQwMF8xMExFICovDQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJZ Q0JDUjQwMF8xMExFOiBOb3Qgc3VwcG9ydGVkIGNocm9tYSBmb3JtYXRcbiIpOw0KKyAgICAgICAg ICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTBMRTsNCisgICAgICAgICAgICBy ZXR1cm4gLTE7DQorICAgICAgICBjYXNlIDE6IC8qIFlDQkNSNDIwXzEwTEUgKi8NCisgICAgICAg ICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwTEU7DQorICAgICAgICAg ICAgYnJlYWs7DQorICAgICAgICBjYXNlIDI6IC8qIFlDQkNSNDIyXzEwTEUgKi8NCisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIllDQkNSNDIyXzEwTEU6IE5vdCBzdXBw b3J0ZWQgY2hyb21hIGZvcm1hdFxuIik7DQorICAgICAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBB Vl9QSVhfRk1UX1lVVjQyMlAxMExFOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAg IGNhc2UgMzogLyogWUNCQ1I0NDRfMTBMRSAqLw0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiWUNCQ1I0NDRfMTBMRTogTm90IHN1cHBvcnRlZCBjaHJvbWEgZm9ybWF0 XG4iKTsNCisgICAgICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEw TEU7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgZGVmYXVsdDoNCisgICAgICAg ICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfTk9ORTsNCisgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gc3VwcG9ydGVkIGNocm9tYSBmb3JtYXRc biIpOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8v IFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHBhcnNlX3NwcyBmdW5jdGlvbiBkb2Vzbid0 IGhhbmRsZSBWVUkgcGFyYW1ldGVycyBwYXJzaW5nLA0KKyAgICAgICAgLy8gc28gYXQgdGhlIG1v bWVudCBpdCdzIGltcG9zc2libGUgdG8gaW5pdGlhbGl6ZSBoYXNfYl9mcmFtZXMgYW5kIG1heF9i X2ZyYW1lcyBBVkNvZGVjQ29udGV4IGZpZWxkcyBoZXJlLg0KKyAgICAgICAgLy8gQ3VycmVudGx5 LCBpbml0aWFsaXphdGlvbiBvZiBoYXNfYl9mcmFtZXMgYW5kIG1heF9iX2ZyYW1lcyBBVkNvZGVj Q29udGV4IGZpZWxkcyBoYXZlIGJlZW4gbW92ZWQgdG8NCisgICAgICAgIC8vIGxpYnhldmRfZGVj b2RlIGZ1bmN0aW9uIHdoZXJlIHdlIGNhbiB1c2UgeGV2ZF9jb25maWcgZnVuY3Rpb24gYmVpbmcg YSBwYXJ0IG9mIHhldmQgbGlicmFyeSBBUEkNCisgICAgICAgIC8vIHRvIGdldCB0aGUgbmVlZGVk IGluZm9ybWF0aW9uLg0KKyAgICAgICAgLy8gSG93ZXZlciwgaWYgaXQgd2lsbCBiZSBuZWVkZWQs IHBhcnNlX3NwcyBmdW5jdGlvbiBzaG91bGQgYmUgZXh0ZW5kZWQgdG8gaGFuZGxlIFZVSSBwYXJh bWV0ZXJzIHBhcnNpbmcNCisgICAgICAgIC8vIGFuZCB0aGUgZm9sbG93aW5nIGxpbmVzIHNob3Vs ZCBiZSB1c2VkIHRvIGluaXRpYWxpemUgaGFzX2JfZnJhbWVzIGFuZCBtYXhfYl9mcmFtZXMgZmll bGRzIG9mIHRoZSBBVkNvZGVjQ29udGV4Lg0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIHNwcy0+ dnVpX3BhcmFtZXRlcnMubnVtX3Jlb3JkZXJfcGljcw0KKyAgICAgICAgLy8gaWYgKHNwcy0+Yml0 c3RyZWFtX3Jlc3RyaWN0aW9uX2ZsYWcgJiYgc3BzLT52dWlfcGFyYW1ldGVycy5udW1fcmVvcmRl cl9waWNzKSB7DQorICAgICAgICAvLyAgICAgYXZjdHgtPmhhc19iX2ZyYW1lcyA9IHNwcy0+dnVp X3BhcmFtZXRlcnMubnVtX3Jlb3JkZXJfcGljczsNCisgICAgICAgIC8vIH0NCisNCisgICAgICAg IGV2LT5nb3Rfc3BzID0gMTsNCisNCisgICAgfSBlbHNlIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9O VVRfUFBTKSAvLyBOQUwgVW5pdCB0eXBlOiBQUFMgKFZpZGVvIFBhcmFtZXRlciBTZXQpDQorICAg ICAgICBldi0+Z290X3BwcyA9IDE7DQorICAgIGVsc2UgaWYobmFsdV90eXBlID09IFhFVkRfTlVU X1NFSSkgLy8gTkFMIHVuaXQgdHlwZTogU0VJIChTdXBwbGVtZW50YWwgRW5oYW5jZW1lbnQgSW5m b3JtYXRpb24pDQorICAgICAgICBldi0+Z290X3NlaSA9IDE7DQorICAgIGVsc2UgaWYgKG5hbHVf dHlwZSA9PSBYRVZEX05VVF9JRFIgfHwgbmFsdV90eXBlID09IFhFVkRfTlVUX05PTklEUikgLy8g TkFMIFVuaXQgdHlwZTogQ29kZWQgc2xpY2Ugb2YgYSBJRFIgb3Igbm9uLUlEUiBwaWN0dXJlDQor ICAgICAgICBldi0+Z290X3NsaWNlKys7DQorICAgIGVsc2Ugew0KKyAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIE5BTCB1bml0IHR5cGU6ICVkXG4iLCBuYWx1X3R5 cGUpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30N CisNCisvKioNCisgKiBGaW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWUgaW4gdGhlIGJp dHN0cmVhbS4NCisgKiBAcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYnl0ZSBvZiB0 aGUgbmV4dCBmcmFtZSwgb3IgRU5EX05PVF9GT1VORA0KKyAqLw0KK3N0YXRpYyBpbnQgZXZjX2Zp bmRfZnJhbWVfZW5kKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzLCBjb25zdCB1aW50OF90ICpidWYs DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9zaXplLCBBVkNvZGVjQ29u dGV4dCAqYXZjdHgpDQorew0KKyAgICBFVkNQYXJzZXJDb250ZXh0ICpldiA9IHMtPnByaXZfZGF0 YTsNCisNCisgICAgaWYoIWV2LT50b19yZWFkKSB7DQorICAgICAgICBpbnQgbmFsX3VuaXRfc2l6 ZSA9IDA7DQorICAgICAgICBpbnQgbmV4dCA9IEVORF9OT1RfRk9VTkQ7DQorDQorICAgICAgICAv LyBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gYnVmZmVyIHNpemUgaXMgbm90IGVub3VnaCBmb3IgYnVm ZmVyIHRvIHN0b3JlIE5BTCB1bml0IGxlbmd0aA0KKyAgICAgICAgaWYoYnVmX3NpemUgPCBYRVZE X05BTF9VTklUX0xFTkdUSF9CWVRFKSB7DQorICAgICAgICAgICAgZXYtPnRvX3JlYWQgPSBYRVZE X05BTF9VTklUX0xFTkdUSF9CWVRFOw0KKyAgICAgICAgICAgIGV2LT5uYWxfbGVuZ3RoX3NpemUg PSBidWZfc2l6ZTsNCisgICAgICAgICAgICBldi0+aW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFk ICA9IDE7DQorDQorICAgICAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7DQorICAgICAgICB9 DQorDQorICAgICAgICBuYWxfdW5pdF9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgoYnVmLCBi dWZfc2l6ZSwgYXZjdHgpOw0KKyAgICAgICAgZXYtPm5hbF9sZW5ndGhfc2l6ZSA9IFhFVkRfTkFM X1VOSVRfTEVOR1RIX0JZVEU7DQorDQorICAgICAgICBuZXh0ID0gbmFsX3VuaXRfc2l6ZSArIFhF VkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQorICAgICAgICBldi0+dG9fcmVhZCA9IG5leHQ7DQor ICAgICAgICBpZihuZXh0IDwgYnVmX3NpemUpDQorICAgICAgICAgICAgcmV0dXJuIG5leHQ7DQor ICAgICAgICBlbHNlDQorICAgICAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7DQorICAgIH0g ZWxzZSBpZihldi0+dG9fcmVhZCA+IGJ1Zl9zaXplKSB7DQorICAgICAgICByZXR1cm4gRU5EX05P VF9GT1VORDsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGlmKGV2LT5pbmNvbXBsZXRlX25hbHVf cHJlZml4X3JlYWQgID09IDEpIHsNCisgICAgICAgICAgICBFVkNQYXJzZXJDb250ZXh0ICpldiA9 IHMtPnByaXZfZGF0YTsNCisgICAgICAgICAgICBQYXJzZUNvbnRleHQgKnBjID0gJmV2LT5wYzsN CisgICAgICAgICAgICB1aW50OF90IG5hbHVfbGVuW1hFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEVd ID0gezB9Ow0KKyAgICAgICAgICAgIGludCBuYWxfdW5pdF9zaXplID0gMDsNCisNCisgICAgICAg ICAgICAvLyAxLiBwYy0+YnVmZmVyIGNvbnRhaW5zIHByZXZpb3VzbHkgcmVhZCBieXRlcyBvZiBO QUxVIHByZWZpeA0KKyAgICAgICAgICAgIC8vIDIuIGJ1ZiBjb250YWlucyB0aGUgcmVzdCBvZiBO QUwgdW5pdCBwcmVmaXggYnl0ZXMNCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIC8vIH5+ fn5+fn4NCisgICAgICAgICAgICAvLyBFWEFNUExFDQorICAgICAgICAgICAgLy8gfn5+fn5+fg0K KyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxl IHdlIGFzc3VtZWQgdGhhdCB0aGUgbnVtYmVyIG9mIGFscmVhZHkgcmVhZCBOQUwgVW5pdCBwcmVm aXggYnl0ZXMgaXMgZXF1YWwgMQ0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gLS0t LS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHBjLT5idWZmZXIgLT4gY29uYXRpbnMgYWxyZWFkeSBy ZWFkIGJ5dGVzDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vICAg ICAgICAgICAgICBfXyBwYy0+aW5kZXggPT0gMQ0KKyAgICAgICAgICAgIC8vICAgICAgICAgICAg IHwNCisgICAgICAgICAgICAvLyAgICAgICAgICAgICBWDQorICAgICAgICAgICAgLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAg ICAgICAgIC8vIHwgICAwICAgfCAgIDEgICB8ICAgMiAgIHwgICAzICAgfCAgIDQgICB8IC4uLiB8 ICAgTiAgIHwNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgLy8gfCAgMHgwMCB8ICAweFhY IHwgIDB4WFggfCAgMHhYWCB8ICAweFhYIHwgLi4uIHwgIDB4WFggfA0KKyAgICAgICAgICAgIC8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0NCisgICAgICAgICAg ICAvLyBidWYgLT4gY29udGFpbnMgbmV3bHkgcmVhZCBieXRlcw0KKyAgICAgICAgICAgIC8vIC0t LS0tLS0tLS0NCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgLy8gfCAgIDAgICB8ICAgMSAg IHwgICAyICAgfCAgIDMgICB8ICAgNCAgIHwgLi4uIHwgICBOICAgfA0KKyAgICAgICAgICAgIC8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CisgICAgICAgICAgICAvLyB8ICAweDAwIHwgIDB4MDAgfCAgMHgzQyB8ICAweFhYIHwgIDB4WFgg fCAuLi4gfCAgMHhYWCB8DQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vDQorICAgICAg ICAgICAgZm9yKGludCBpID0gMDsgaSA8IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7IGkrKykg ew0KKyAgICAgICAgICAgICAgICBpZihpIDwgcGMtPmluZGV4KQ0KKyAgICAgICAgICAgICAgICAg ICAgbmFsdV9sZW5baV0gPSBwYy0+YnVmZmVyW2ldOw0KKyAgICAgICAgICAgICAgICBlbHNlDQor ICAgICAgICAgICAgICAgICAgICBuYWx1X2xlbltpXSA9IGJ1ZltpIC0gcGMtPmluZGV4XTsNCisg ICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQ0KKyAgICAgICAgICAg IC8vIG5hbHVfbGVuDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwgICAw ICAgfCAgIDEgICB8ICAgMiAgIHwgICAzICAgfA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwgIDB4MDAgfCAgMHgwMCB8 ICAweDAwIHwgIDB4M0MgfA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwgTkFMVSBMRU5HVEggICAgICAgICAgICAgICAg ICAgfA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K KyAgICAgICAgICAgIC8vIE5BTCBVbml0IGxlbmdodCA9ICA2MCAoMHgwMDAwMDAzQykNCisNCisg ICAgICAgICAgICBuYWxfdW5pdF9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgobmFsdV9sZW4s IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUsIGF2Y3R4KTsNCisNCisgICAgICAgICAgICBldi0+ dG9fcmVhZCA9IG5hbF91bml0X3NpemUgKyBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFIC0gcGMt PmluZGV4Ow0KKw0KKyAgICAgICAgICAgIGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQg PSAwOw0KKw0KKyAgICAgICAgICAgIGlmKGV2LT50b19yZWFkID4gYnVmX3NpemUpDQorICAgICAg ICAgICAgICAgIHJldHVybiBFTkRfTk9UX0ZPVU5EOw0KKyAgICAgICAgICAgIGVsc2UNCisgICAg ICAgICAgICAgICAgcmV0dXJuIGV2LT50b19yZWFkOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0 dXJuIGV2LT50b19yZWFkOw0KKyAgICB9DQorDQorICAgIHJldHVybiBFTkRfTk9UX0ZPVU5EOw0K K30NCisNCitzdGF0aWMgaW50IGV2Y19wYXJzZXJfaW5pdChBVkNvZGVjUGFyc2VyQ29udGV4dCAq cykNCit7DQorICAgIEVWQ1BhcnNlckNvbnRleHQgKmV2ID0gcy0+cHJpdl9kYXRhOw0KKw0KKyAg ICBldi0+Z290X3NwcyA9IDA7DQorICAgIGV2LT5nb3RfcHBzID0gMDsNCisgICAgZXYtPmdvdF9z ZWkgPSAwOw0KKyAgICBldi0+Z290X3NsaWNlID0gMDsNCisgICAgZXYtPm5hbF9sZW5ndGhfc2l6 ZSA9IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQorICAgIGV2LT5pbmNvbXBsZXRlX25hbHVf cHJlZml4X3JlYWQgPSAwOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBl dmNfcGFyc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMsIEFWQ29kZWNDb250ZXh0ICphdmN0eCwN CisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICoqcG91dGJ1ZiwgaW50ICpwb3V0 YnVmX3NpemUsDQorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYnVmLCBpbnQg YnVmX3NpemUpDQorew0KKyAgICBpbnQgbmV4dDsNCisgICAgRVZDUGFyc2VyQ29udGV4dCAqZXYg PSBzLT5wcml2X2RhdGE7DQorICAgIFBhcnNlQ29udGV4dCAqcGMgPSAmZXYtPnBjOw0KKyAgICBp bnQgaXNfZHVtbXlfYnVmID0gIWJ1Zl9zaXplOw0KKyAgICBjb25zdCB1aW50OF90ICpkdW1teV9i dWYgPSBidWY7DQorDQorICAgIGlmIChzLT5mbGFncyAmIFBBUlNFUl9GTEFHX0NPTVBMRVRFX0ZS QU1FUykNCisgICAgICAgIG5leHQgPSBidWZfc2l6ZTsNCisgICAgZWxzZSB7DQorICAgICAgICBu ZXh0ID0gZXZjX2ZpbmRfZnJhbWVfZW5kKHMsIGJ1ZiwgYnVmX3NpemUsIGF2Y3R4KTsNCisgICAg ICAgIGlmIChmZl9jb21iaW5lX2ZyYW1lKHBjLCBuZXh0LCAmYnVmLCAmYnVmX3NpemUpIDwgMCkg ew0KKyAgICAgICAgICAgICpwb3V0YnVmICAgICAgPSBOVUxMOw0KKyAgICAgICAgICAgICpwb3V0 YnVmX3NpemUgPSAwOw0KKyAgICAgICAgICAgIGV2LT50b19yZWFkIC09IGJ1Zl9zaXplOw0KKyAg ICAgICAgICAgIHJldHVybiBidWZfc2l6ZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBp c19kdW1teV9idWYgJj0gKGR1bW15X2J1ZiA9PSBidWYpOw0KKw0KKyAgICBpZiAoIWlzX2R1bW15 X2J1ZikNCisgICAgICAgIHBhcnNlX25hbF91bml0cyhzLCBidWYsIGJ1Zl9zaXplLCBhdmN0eCk7 DQorDQorICAgICpwb3V0YnVmICAgICAgPSBidWY7DQorICAgICpwb3V0YnVmX3NpemUgPSBidWZf c2l6ZTsNCisgICAgZXYtPnRvX3JlYWQgLT0gbmV4dDsNCisNCisgICAgcmV0dXJuIG5leHQ7DQor fQ0KKw0KK0FWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlciA9IHsNCisgICAgLmNvZGVjX2lkcyAg ICAgID0geyBBVl9DT0RFQ19JRF9FVkMgfSwNCisgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9m KEVWQ1BhcnNlckNvbnRleHQpLA0KKyAgICAucGFyc2VyX2luaXQgICAgPSBldmNfcGFyc2VyX2lu aXQsDQorICAgIC5wYXJzZXJfcGFyc2UgICA9IGV2Y19wYXJzZSwNCisgICAgLnBhcnNlcl9jbG9z ZSAgID0gZmZfcGFyc2VfY2xvc2UsDQorfTsNCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2xpYnhl dmQuYyBiL2xpYmF2Y29kZWMvbGlieGV2ZC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMC4uZWQxOWFhYWJhZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbGliYXZjb2RlYy9s aWJ4ZXZkLmMNCkBAIC0wLDAgKzEsNDQ1IEBADQorLyoNCisgKiBsaWJ4ZXZkIGRlY29kZXINCisg KiBFVkMgKE1QRUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nKSBkZWNvZGluZyB1c2luZyBYRVZE IE1QRUctNSBFVkMgZGVjb2RlciBsaWJyYXJ5DQorICoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg RGF3aWQgS296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+DQorICoNCisgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuDQorICoNCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLg0KKyAqDQorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQor ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCisgKi8NCisNCisjaWYgZGVmaW5lZChf TVNDX1ZFUikNCisjZGVmaW5lIFhFVkRfQVBJX0lNUE9SVFMgMQ0KKyNlbmRpZg0KKw0KKyNpbmNs dWRlIDxmbG9hdC5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisjaW5jbHVkZSA8eGV2ZC5o Pg0KKw0KKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCINCisjaW5jbHVkZSAibGliYXZ1 dGlsL2NvbW1vbi5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiDQorI2luY2x1ZGUgImxp YmF2dXRpbC9waXhkZXNjLmgiDQorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCINCisjaW5j bHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiDQorI2luY2x1ZGUgImxpYmF2dXRpbC9jcHUuaCIN CisNCisjaW5jbHVkZSAiYXZjb2RlYy5oIg0KKyNpbmNsdWRlICJpbnRlcm5hbC5oIg0KKyNpbmNs dWRlICJwYWNrZXRfaW50ZXJuYWwuaCINCisjaW5jbHVkZSAiY29kZWNfaW50ZXJuYWwuaCINCisN CisjZGVmaW5lIFhFVkRfUEFSQU1fQkFEX05BTUUgLTENCisjZGVmaW5lIFhFVkRfUEFSQU1fQkFE X1ZBTFVFIC0yDQorDQorI2RlZmluZSBFVkNfTkFMX0hFQURFUl9TSVpFIDIgLyogYnl0ZSAqLw0K Kw0KKy8qKg0KKyAqIFRoZSBzdHJ1Y3R1cmUgc3RvcmVzIGFsbCB0aGUgc3RhdGVzIGFzc29jaWF0 ZWQgd2l0aCB0aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGRlY29kZXINCisgKiBUaGUg Zmlyc3QgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuIEFWQ2xhc3Mgc3RydWN0IChAc2VlIGh0dHBz Oi8vZmZtcGVnLm9yZy9kb3h5Z2VuL3RydW5rL3N0cnVjdEFWQ2xhc3MuaHRtbCNkZXRhaWxzKS4N CisgKi8NCit0eXBlZGVmIHN0cnVjdCBYZXZkQ29udGV4dCB7DQorICAgIGNvbnN0IEFWQ2xhc3Mg KmNsYXNzOw0KKw0KKyAgICBYRVZEIGlkOyAgICAgICAgICAgIC8vIFhFVkQgaW5zdGFuY2UgaWRl bnRpZmllciBAc2VlIHhldmQuaA0KKyAgICBYRVZEX0NEU0MgY2RzYzsgICAgIC8vIGRlY29kaW5n IHBhcmFtZXRlcnMgQHNlZSB4ZXZkLmgNCisNCisgICAgaW50IGRlY29kX2ZyYW1lczsgICAvLyBu dW1iZXIgb2YgZGVjb2RlZCBmcmFtZXMNCisgICAgaW50IHBhY2tldF9jb3VudDsgICAvLyBudW1i ZXIgb2YgcGFja2V0cyBjcmVhdGVkIGJ5IGRlY29kZXINCisNCisgICAgLy8gY29uZmlndXJhdGlv biBwYXJhbWV0ZXJzDQorICAgIEFWRGljdGlvbmFyeSAqeGV2ZF9vcHRzOyAvLyB4ZXZkIGNvbmZp Z3VyYXRpb24gcmVhZCBmcm9tIGEgOiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1l dGVycw0KKw0KK30gWGV2ZENvbnRleHQ7DQorDQorLyoqDQorICogVGhlIGZ1bmN0aW9uIHJldHVy bnMgYSBwb2ludGVyIHRvIGEgdmFyaWFibGUgb2YgdHlwZSBYRVZEX0NEU0MuDQorICogWEVWRF9D RFNDIGNvbnRhaW5zIGFsbCBkZWNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlh bGl6ZWQgYmVmb3JlIGl0cyB1c2UuDQorICoNCisgKiBUaGUgZmllbGQgdmFsdWVzIG9mIHRoZSBY RVZEX0NEU0Mgc3RydWN0dXJlIGFyZSBwb3B1bGF0ZWQgYmFzZWQgb246DQorICogLSB0aGUgY29y cmVzcG9uZGluZyBmaWVsZCB2YWx1ZXMgb2YgdGhlIEF2Q29kZWNDb25ldHh0IHN0cnVjdHVyZSwN CisgKiAtIHRoZSB4ZXZkIGRlY29kZXIgc3BlY2lmaWMgb3B0aW9uIHZhbHVlcywNCisgKiAgICh0 aGUgZnVsbCBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgeGV2ZCBlbmNvZGVyIGlz IGRpc3BsYXllZCBhZnRlciBleGVjdXRpbmcgdGhlIGNvbW1hbmQgLi9mZm1wZWcgLS1oZWxwIGRl Y29kZXIgPSBsaWJ4ZXZkKQ0KKyAqIC0gYW5kIHRoZSB4ZXZkIGVuY29kZXIgb3B0aW9ucyBzcGVj aWZpZWQgYXMgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycyBmb2xsb3dpbmcgdGhlIHhldmQtcGFy YW1zIG9wdGlvbg0KKyAqDQorICogT3JkZXIgb2YgaW5wdXQgcHJvY2Vzc2luZyBhbmQgcG9wdWxh dGluZyB0aGUgWEVWRF9DRFNDIHN0cnVjdHVyZQ0KKyAqIDEuIGZpcnN0LCB0aGUgY29ycmVzcG9u ZGluZyBmaWVsZHMgb2YgdGhlIEFWQ29kZWNDb250ZXh0IHN0cnVjdHVyZSBhcmUgcHJvY2Vzc2Vk LCAoaS5lIC10aHJlYWRzIDQpDQorICogMi4gdGhlbiB4ZXZkLXNwZWNpZmljIG9wdGlvbnMgYXJl IGFkZGVkIGFzIEFWT3B0aW9uIHRvIHRoZSB4ZXZkIEFWQ29kZWMgaW1wbGVtZW50YXRpb24gKGku ZSAtdGhyZWFkcyAzKQ0KKyAqIDMuIGZpbmFsbHksIHRoZSBvcHRpb25zIHNwZWNpZmllZCBhZnRl ciB0aGUgeGV2ZC1wYXJhbXMgb3B0aW9uIGFzIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiB0eXBlIGtl eSB2YWx1ZSBhcmUgcHJvY2Vzc2VkIChpLmUgLXhldmQtcGFyYW1zICJtPTIiKQ0KKyAqDQorICog U29tZSBvcHRpb25zIGNhbiBiZSBzZXQgaW4gZGlmZmVyZW50IHdheXMuIEluIHRoaXMgY2FzZSwg cGxlYXNlIGZvbGxvdyB0aGUgYWJvdmUtbWVudGlvbmVkIG9yZGVyIG9mIHByb2Nlc3NpbmcuDQor ICogVGhlIG1vc3QgcmVjZW50IGFzc2lnbm1lbnRzIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgdmFs dWVzLg0KKyAqDQorICogQHBhcmFtW2luXSBhdmN0eCBjb2RlYyBjb250ZXh0DQorICogQHBhcmFt W291dF0gY2RzYyBjb250YWlucyBhbGwgZW5jb2RlciBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJl IGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlDQorICoNCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBnZXRf Y29uZihBVkNvZGVjQ29udGV4dCAqYXZjdHgsIFhFVkRfQ0RTQyAqY2RzYykNCit7DQorICAgIGlu dCBjcHVfY291bnQgPSBhdl9jcHVfY291bnQoKTsNCisNCisgICAgLyogY2xlYXIgWEVWU19DRFND IHN0cnVjdHVyZSAqLw0KKyAgICBtZW1zZXQoY2RzYywgMCwgc2l6ZW9mKFhFVkRfQ0RTQykpOw0K Kw0KKyAgICAvKiBpbml0IFhFVkRfQ0RTQyAqLw0KKyAgICBpZihhdmN0eC0+dGhyZWFkX2NvdW50 IDw9IDApDQorICAgICAgICBjZHNjLT50aHJlYWRzID0gKGNwdV9jb3VudCA8IFhFVkRfTUFYX1RB U0tfQ05UKSA/IGNwdV9jb3VudCA6IFhFVkRfTUFYX1RBU0tfQ05UOw0KKyAgICBlbHNlIGlmKGF2 Y3R4LT50aHJlYWRfY291bnQgPiBYRVZEX01BWF9UQVNLX0NOVCkNCisgICAgICAgIGNkc2MtPnRo cmVhZHMgPSBYRVZEX01BWF9UQVNLX0NOVDsNCisgICAgZWxzZQ0KKyAgICAgICAgY2RzYy0+dGhy ZWFkcyA9IGF2Y3R4LT50aHJlYWRfY291bnQ7DQorDQorICAgIHJldHVybiBYRVZEX09LOw0KK30N CisNCisvKioNCisgKiBSZWFkIE5BTCB1bml0IGxlbmd0aA0KKyAqIEBwYXJhbSBicyBpbnB1dCBk YXRhIChiaXRzdHJlYW0pDQorICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIE5BTCB1bml0IG9uIHN1 Y2Nlc3MsIDAgdmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyB1aW50MzJfdCByZWFkX25h bF91bml0X2xlbmd0aChjb25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUsIEFWQ29kZWNDb250 ZXh0ICphdmN0eCkNCit7DQorICAgIHVpbnQzMl90IGxlbiA9IDA7DQorICAgIFhFVkRfSU5GTyBp bmZvOw0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICBpZihic19zaXplID09IFhFVkRfTkFMX1VOSVRf TEVOR1RIX0JZVEUpIHsNCisgICAgICAgIHJldCA9IHhldmRfaW5mbygodm9pZCAqKWJzLCBYRVZE X05BTF9VTklUX0xFTkdUSF9CWVRFLCAxLCAmaW5mbyk7DQorICAgICAgICBpZiAoWEVWRF9GQUlM RUQocmV0KSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fu bm90IGdldCBiaXRzdHJlYW0gaW5mb3JtYXRpb25cbiIpOw0KKyAgICAgICAgICAgIHJldHVybiAw Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgbGVuID0gaW5mby5uYWx1X2xlbjsNCisgICAgICAgIGlm KGxlbiA9PSAwKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIGJpdHN0cmVhbSBzaXplISBbJWRdXG4iLCBic19zaXplKTsNCisgICAgICAgICAgICBy ZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbGVuOw0KK30NCisN CisvKioNCisgKiBAcGFyYW1baW5dIHhlY3R4IHRoZSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgYWxs IHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUgTVBFRy01IEVW QyBkZWNvZGVyDQorICogQHBhcmFtW291dF0gYXZjdHggY29kZWMgY29udGV4dA0KKyAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGlj IGludCBleHBvcnRfc3RyZWFtX3BhcmFtcyhjb25zdCBYZXZkQ29udGV4dCAqeGVjdHgsIEFWQ29k ZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIGludCByZXQ7DQorICAgIGludCBzaXplOw0KKyAg ICBpbnQgY29sb3Jfc3BhY2U7DQorDQorICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9Z VVY0MjBQMTA7DQorDQorICAgIHNpemUgPSA0Ow0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0 eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0RFRF9XSURUSCwgJmF2Y3R4LT5jb2RlZF93aWR0aCwgJnNp emUpOw0KKyAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZ2V0IGNvZGVkX3dpZHRoXG4iKTsNCisgICAgICAg IHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0eC0+aWQs IFhFVkRfQ0ZHX0dFVF9DT0RFRF9IRUlHSFQsICZhdmN0eC0+Y29kZWRfaGVpZ2h0LCAmc2l6ZSk7 DQorICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgY29kZWRfaGVpZ2h0XG4iKTsNCisgICAgICAgIHJl dHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0eC0+aWQsIFhF VkRfQ0ZHX0dFVF9XSURUSCwgJmF2Y3R4LT53aWR0aCwgJnNpemUpOw0KKyAgICBpZiAoWEVWRF9G QUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgdG8gZ2V0IHdpZHRoXG4iKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAg ICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9IRUlHSFQsICZhdmN0 eC0+aGVpZ2h0LCAmc2l6ZSk7DQorICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgaGVpZ2h0XG4iKTsN CisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4 ZWN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0xPUl9TUEFDRSwgJmNvbG9yX3NwYWNlLCAmc2l6ZSk7 DQorICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgY29sb3Jfc3BhY2VcbiIpOw0KKyAgICAgICAgcmV0 dXJuIC0xOw0KKyAgICB9DQorICAgIHN3aXRjaChjb2xvcl9zcGFjZSkgew0KKyAgICBjYXNlIFhF VkRfQ1NfWUNCQ1I0MDBfMTBMRToNCisgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZN VF9HUkFZMTBMRTsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFhFVkRfQ1NfWUNCQ1I0MjBf MTBMRToNCisgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRTsN CisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFhFVkRfQ1NfWUNCQ1I0MjJfMTBMRToNCisgICAg ICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTBMRTsNCisgICAgICAgIGJy ZWFrOw0KKyAgICBjYXNlIFhFVkRfQ1NfWUNCQ1I0NDRfMTBMRToNCisgICAgICAgIGF2Y3R4LT5w aXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQMTBMRTsNCisgICAgICAgIGJyZWFrOw0KKyAgICBk ZWZhdWx0Og0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIGNv bG9yIHNwYWNlXG4iKTsNCisgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9OT05F Ow0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIC8vIHRoZSBmdW5jdGlvbiBy ZXR1cm5zIHNwcy0+bnVtX3Jlb3JkZXJfcGljcw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0 eC0+aWQsIFhFVkRfQ0ZHX0dFVF9NQVhfQ09ESU5HX0RFTEFZLCAmYXZjdHgtPm1heF9iX2ZyYW1l cywgJnNpemUpOw0KKyAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZ2V0IG1heF9jb2RpbmdfZGVsYXlcbiIp Ow0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGF2Y3R4LT5oYXNfYl9mcmFt ZXMgPSAoYXZjdHgtPm1heF9iX2ZyYW1lcykgPyAxIDogMDsNCisNCisgICAgYXZjdHgtPmNvbG9y X3ByaW1hcmllcyA9IEFWQ09MX1BSSV9VTlNQRUNJRklFRDsNCisgICAgYXZjdHgtPmNvbG9yX3Ry YyAgICAgICA9IEFWQ09MX1RSQ19VTlNQRUNJRklFRDsNCisgICAgYXZjdHgtPmNvbG9yc3BhY2Ug ICAgICA9IEFWQ09MX1NQQ19VTlNQRUNJRklFRDsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0K Ky8qKg0KKyAqIEluaXRpYWxpemUgZGVjb2Rlcg0KKyAqIENyZWF0ZSBhIGRlY29kZXIgaW5zdGFu Y2UgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbmVlZGVkIHJlc291cmNlcw0KKyAqDQorICogQHBhcmFt IGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmRf aW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0KKyAgICBYZXZkQ29udGV4dCAqeGVjdHgg PSBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICBpbnQgdmFsID0gMDsNCisgICAgWEVWRF9DRFNDICpj ZHNjID0gJih4ZWN0eC0+Y2RzYyk7DQorDQorICAgIC8qIHJlYWQgY29uZmlndXJhdGlvbnMgYW5k IHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQgZGVzY3JpcHRvciAoWEVWRF9DRFNDKSAqLw0KKyAgICB2 YWwgPSBnZXRfY29uZihhdmN0eCwgY2RzYyk7DQorICAgIGlmICh2YWwgIT0gWEVWRF9PSykgew0K KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgZ2V0IGNvbmZpZ3Vy YXRpb25cbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIC8qIGNyZWF0 ZSBkZWNvZGVyICovDQorICAgIHhlY3R4LT5pZCA9IHhldmRfY3JlYXRlKCYoeGVjdHgtPmNkc2Mp LCBOVUxMKTsNCisgICAgaWYoeGVjdHgtPmlkID09IE5VTEwpIHsNCisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGNyZWF0ZSBYRVZEIGVuY29kZXJcbiIpOw0KKyAg ICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHhlY3R4LT5wYWNrZXRfY291bnQgPSAw Ow0KKyAgICB4ZWN0eC0+ZGVjb2RfZnJhbWVzID0gMDsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0K Kw0KKy8qKg0KKyAgKiBEZWNvZGUgcGljdHVyZQ0KKyAgKg0KKyAgKiBAcGFyYW0gYXZjdHggY29k ZWMgY29udGV4dA0KKyAgKiBAcGFyYW1bb3V0XSBkYXRhIGRlY29kZWQgZnJhbWUNCisgICogQHBh cmFtW291dF0gZ290X2ZyYW1lIGRlY29kZXIgc2V0cyB0byAwIG9yIDEgdG8gaW5kaWNhdGUgdGhh dCBhDQorICAqICAgICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkgZnJhbWUgb3Igc3VidGl0 bGUgd2FzIHJldHVybmVkIGluDQorICAqICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLg0K KyAgKiBAcGFyYW1baW5dIHBrdCBBVlBhY2tldCBjb250YWluaW5nIGVuY29kZWQgZGF0YSB0byBi ZSBkZWNvZGVkDQorICAqDQorICAqIEByZXR1cm4gYW1vdW50IG9mIGJ5dGVzIHJlYWQgZnJvbSB0 aGUgcGFja2V0IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yDQorICAqICAgICAgICAgY29kZSBv biBmYWlsdXJlDQorICAqLw0KK3N0YXRpYyBpbnQgbGlieGV2ZF9kZWNvZGUoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCB2b2lkICpkYXRhLCBpbnQgKmdvdF9mcmFtZSwgQVZQYWNrZXQgKnBrdCkNCit7 DQorICAgIEFWRnJhbWUgKmZyYW1lID0gZGF0YTsNCisgICAgWGV2ZENvbnRleHQgKnhlY3R4ID0g TlVMTDsNCisgICAgWEVWRF9JTUdCICppbWdiID0gTlVMTDsNCisgICAgWEVWRF9TVEFUIHN0YXQ7 DQorICAgIFhFVkRfQklUQiBiaXRiOw0KKyAgICBpbnQgcmV0LCBuYWx1X3NpemUsIGJzX3JlYWRf cG9zOw0KKw0KKyAgICBpZihhdmN0eCA9PSBOVUxMKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkludmFsaWQgaW5wdXQgcGFyYW1ldGVyOiBBVkNvZGVjQ29udGV4dFxu Iik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgeGVjdHggPSBhdmN0eC0+cHJp dl9kYXRhOw0KKyAgICBpZih4ZWN0eCA9PSBOVUxMKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkludmFsaWQgWEVWRCBjb250ZXh0XG4iKTsNCisgICAgICAgIHJldHVy biAtMTsNCisgICAgfQ0KKw0KKyAgICBpZihwa3QtPnNpemUgPiAwKSB7DQorICAgICAgICBic19y ZWFkX3BvcyA9IDA7DQorICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgICAgIHdoaWxlKHBrdC0+ c2l6ZSA+IChic19yZWFkX3BvcyArIFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpKSB7DQorDQor ICAgICAgICAgICAgbWVtc2V0KCZzdGF0LCAwLCBzaXplb2YoWEVWRF9TVEFUKSk7DQorICAgICAg ICAgICAgbWVtc2V0KCZiaXRiLCAwLCBzaXplb2YoWEVWRF9CSVRCKSk7DQorDQorICAgICAgICAg ICAgbmFsdV9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgocGt0LT5kYXRhICsgYnNfcmVhZF9w b3MsIFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUsIGF2Y3R4KTsNCisgICAgICAgICAgICBpZihu YWx1X3NpemUgPT0gMCkgew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkludmFsaWQgYml0c3RyZWFtXG4iKTsNCisgICAgICAgICAgICAgICAgZ290byBFUlI7 DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJzX3JlYWRfcG9zICs9IFhFVkRfTkFMX1VO SVRfTEVOR1RIX0JZVEU7DQorDQorICAgICAgICAgICAgYml0Yi5hZGRyID0gcGt0LT5kYXRhICsg YnNfcmVhZF9wb3M7DQorICAgICAgICAgICAgYml0Yi5zc2l6ZSA9IG5hbHVfc2l6ZTsNCisNCisg ICAgICAgICAgICAvKiBtYWluIGRlY29kaW5nIGJsb2NrICovDQorICAgICAgICAgICAgcmV0ID0g eGV2ZF9kZWNvZGUoeGVjdHgtPmlkLCAmYml0YiwgJnN0YXQpOw0KKyAgICAgICAgICAgIGlmKFhF VkRfRkFJTEVEKHJldCkpIHsNCisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gZGVjb2RlIGJpdHN0cmVhbVxuIik7DQorICAgICAgICAgICAgICAg IGdvdG8gRVJSOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBic19yZWFkX3BvcyAr PSBuYWx1X3NpemU7DQorDQorICAgICAgICAgICAgaWYoc3RhdC5uYWx1X3R5cGUgPT0gWEVWRF9O VVRfU1BTKSB7IC8vIEVWQyBzdHJlYW0gcGFyYW1ldGVycyBjaGFuZ2VkDQorICAgICAgICAgICAg ICAgIGlmKGV4cG9ydF9zdHJlYW1fcGFyYW1zKHhlY3R4LCBhdmN0eCkgIT0gMCkNCisgICAgICAg ICAgICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBp ZihzdGF0LnJlYWQgIT0gbmFsdV9zaXplKQ0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19JTkZPLCAiRGlmZmVyZW50IHJlYWRpbmcgb2YgYml0c3RyZWFtIChpbjolZCwgcmVh ZDolZClcbiwiLCBuYWx1X3NpemUsIHN0YXQucmVhZCk7DQorICAgICAgICAgICAgaWYoc3RhdC5m bnVtID49IDApIHsNCisgICAgICAgICAgICAgICAgaWYgKGltZ2IpIHsgLyogYWxyZWFkeSBoYXMg YSBkZWNvZGVkIGltYWdlICovDQorICAgICAgICAgICAgICAgICAgICBpbWdiLT5yZWxlYXNlKGlt Z2IpOw0KKyAgICAgICAgICAgICAgICAgICAgaW1nYiA9IE5VTEw7DQorICAgICAgICAgICAgICAg IH0NCisgICAgICAgICAgICAgICAgcmV0ID0geGV2ZF9wdWxsKHhlY3R4LT5pZCwgJmltZ2IpOw0K KyAgICAgICAgICAgICAgICBpZihYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICAgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBwdWxsIHRoZSBkZWNv ZGVkIGltYWdlICh4ZXZkIGVycm9yIGNvZGU6ICVkLCBmcmFtZSM9JWQpXG4iLCByZXQsIHN0YXQu Zm51bSk7DQorICAgICAgICAgICAgICAgICAgICBnb3RvIEVSUjsNCisgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChyZXQgPT0gWEVWRF9PS19GUk1fREVMQVlFRCkgew0KKyAgICAgICAgICAgICAg ICAgICAgaWYoaW1nYikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltZ2ItPnJlbGVhc2Uo aW1nYik7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW1nYiA9IE5VTEw7DQorICAgICAgICAg ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAg ICB9DQorICAgIH0gZWxzZSB7IC8vIGJ1bXBpbmcNCisgICAgICAgIHJldCA9IHhldmRfcHVsbCh4 ZWN0eC0+aWQsICYoaW1nYikpOw0KKyAgICAgICAgaWYocmV0ID09IFhFVkRfRVJSX1VORVhQRUNU RUQpIHsgLy8gYnVtcGluZyBwcm9jZXNzIGNvbXBsZXRlZA0KKyAgICAgICAgICAgICpnb3RfZnJh bWUgPSAwOw0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfSBlbHNlIGlmKFhFVkRf RkFJTEVEKHJldCkpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkZhaWxlZCB0byBwdWxsIHRoZSBkZWNvZGVkIGltYWdlICh4ZXZkIGVycm9yIGNvZGU6ICVkKVxu IiwgcmV0KTsNCisgICAgICAgICAgICBnb3RvIEVSUjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0K KyAgICBpZihpbWdiKSB7DQorICAgICAgICAvLyBAdG9kbyBzdXBwb3J0cyBvdGhlciBjb2xvciBz cGFjZSBhbmQgYml0IGRlcHRoDQorICAgICAgICBpZihpbWdiLT5jcyAhPSBYRVZEX0NTX1lDQkNS NDIwXzEwTEUpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5v dCBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFtZShhdmN0 eC0+cGl4X2ZtdCkpOw0KKyAgICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgfQ0KKw0KKyAg ICAgICAgaWYgKGltZ2ItPndbMF0gIT0gYXZjdHgtPndpZHRoIHx8IGltZ2ItPmhbMF0gIT0gYXZj dHgtPmhlaWdodCkgeyAvLyBzdHJlYW0gcmVzb2x1dGlvbiBjaGFuZ2VkDQorICAgICAgICAgICAg aWYoZmZfc2V0X2RpbWVuc2lvbnMoYXZjdHgsIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pIDwgMCkg ew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBz ZXQgbmV3IGRpbWVuc2lvblxuIik7DQorICAgICAgICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAg ICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGZyYW1lLT5jb2RlZF9waWN0dXJlX251 bWJlcisrOw0KKyAgICAgICAgZnJhbWUtPmRpc3BsYXlfcGljdHVyZV9udW1iZXIrKzsNCisgICAg ICAgIGZyYW1lLT5mb3JtYXQgPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFOw0KKw0KKyAgICAgICAg aWYgKGZmX2dldF9idWZmZXIoYXZjdHgsIGZyYW1lLCAwKSA8IDApIHsNCisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgQVYgYnVmZmVyXG4iKTsNCisg ICAgICAgICAgICBnb3RvIEVSUjsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZyYW1lLT5wdHMg PSBwa3QtPnB0czsNCisNCisgICAgICAgIGF2X2ltYWdlX2NvcHkoZnJhbWUtPmRhdGEsIGZyYW1l LT5saW5lc2l6ZSwgKGNvbnN0IHVpbnQ4X3QgKiopaW1nYi0+YSwNCisgICAgICAgICAgICAgICAg ICAgICAgaW1nYi0+cywgYXZjdHgtPnBpeF9mbXQsDQorICAgICAgICAgICAgICAgICAgICAgIGlt Z2ItPndbMF0sIGltZ2ItPmhbMF0pOw0KKw0KKyAgICAgICAgeGVjdHgtPmRlY29kX2ZyYW1lcysr Ow0KKyAgICAgICAgKmdvdF9mcmFtZSA9IDE7DQorDQorICAgICAgICBpbWdiLT5yZWxlYXNlKGlt Z2IpOw0KKyAgICAgICAgaW1nYiA9IE5VTEw7DQorICAgIH0gZWxzZQ0KKyAgICAgICAgKmdvdF9m cmFtZSA9IDA7DQorDQorICAgIHhlY3R4LT5wYWNrZXRfY291bnQrKzsNCisNCisgICAgcmV0dXJu IHBrdC0+c2l6ZTsNCisNCitFUlI6DQorICAgIGlmKGltZ2IpIHsNCisgICAgICAgIGltZ2ItPnJl bGVhc2UoaW1nYik7DQorICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgfQ0KKyAgICAqZ290X2Zy YW1lID0gMDsNCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBEZXN0cm95IGRl Y29kZXINCisgKg0KKyAqIEBwYXJhbSBhdmN0eCBjb2RlYyBjb250ZXh0DQorICogQHJldHVybiAw IG9uIHN1Y2Nlc3MNCisgKi8NCitzdGF0aWMgYXZfY29sZCBpbnQgbGlieGV2ZF9jbG9zZShBVkNv ZGVjQ29udGV4dCAqYXZjdHgpDQorew0KKyAgICBYZXZkQ29udGV4dCAqeGVjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOw0KKyAgICBpZih4ZWN0eC0+aWQpIHsNCisgICAgICAgIHhldmRfZGVsZXRlKHhl Y3R4LT5pZCk7DQorICAgICAgICB4ZWN0eC0+aWQgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIHJl dHVybiAwOw0KK30NCisNCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihYZXZkQ29udGV4dCwg eCkNCisjZGVmaW5lIFZEIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfREVD T0RJTkdfUEFSQU0NCisNCisvLyBAdG9kbyBjb25zaWRlciB1c2luZyBmb2xsb3dpbmcgb3B0aW9u cyAoLi9mZm1wZWcgLS1oZWxwIGRlY29kZXI9bGlieGV2ZCkNCisvLw0KK3N0YXRpYyBjb25zdCBB Vk9wdGlvbiBvcHRpb25zW10gPSB7DQorICAgIHsgInhldmQtcGFyYW1zIiwgICAgICAgICAgICAg ICAgIm92ZXJyaWRlIHRoZSB4ZXZkIGNvbmZpZ3VyYXRpb24gdXNpbmcgYSA6IHNlcGFyYXRlZCBs aXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzIiwgT0ZGU0VUKHhldmRfb3B0cyksIEFWX09QVF9U WVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZEIH0sDQorICAgIHsgTlVMTCB9DQorfTsNCisNCitz dGF0aWMgY29uc3QgQVZDbGFzcyB4ZXZkX2NsYXNzID0gew0KKyAgICAuY2xhc3NfbmFtZSA9ICJs aWJ4ZXZkIiwNCisgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwNCisgICAg Lm9wdGlvbiAgICAgPSBvcHRpb25zLA0KKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJT SU9OX0lOVCwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB4ZXZkX2RlZmF1 bHRzW10gPSB7DQorICAgIHsgImIiLCAiMCIgfSwNCisgICAgeyBOVUxMIH0sDQorfTsNCisNCitG RkNvZGVjIGZmX2xpYnhldmRfZGVjb2RlciA9IHsNCisgICAgLnAubmFtZSAgICAgICAgICAgICA9 ICJldmMiLA0KKyAgICAucC5sb25nX25hbWUgICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwo IkVWQyAvIE1QRUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nIChFVkMpIiksDQorICAgIC5wLnR5 cGUgICAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sDQorICAgIC5wLmlkICAgICAgICAg ICAgICAgPSBBVl9DT0RFQ19JRF9FVkMsDQorICAgIC5pbml0ICAgICAgICAgICAgICAgPSBsaWJ4 ZXZkX2luaXQsDQorICAgIEZGX0NPREVDX0RFQ09ERV9DQihsaWJ4ZXZkX2RlY29kZSksDQorICAg IC5jbG9zZSAgICAgICAgICAgICAgPSBsaWJ4ZXZkX2Nsb3NlLA0KKyAgICAucHJpdl9kYXRhX3Np emUgICAgID0gc2l6ZW9mKFhldmRDb250ZXh0KSwNCisgICAgLnAucHJpdl9jbGFzcyAgICAgICA9 ICZ4ZXZkX2NsYXNzLA0KKyAgICAuZGVmYXVsdHMgICAgICAgICAgID0geGV2ZF9kZWZhdWx0cywN CisgICAgLmNhcHNfaW50ZXJuYWwgICAgICA9IEFWX0NPREVDX0NBUF9ERUxBWSB8IEFWX0NPREVD X0NBUF9BVVRPX1RIUkVBRFMgfCBBVl9DT0RFQ19DQVBfQVZPSURfUFJPQklORywNCisgICAgLnAu d3JhcHBlcl9uYW1lICAgICA9ICJsaWJ4ZXZkIiwNCit9Ow0KZGlmZiAtLWdpdCBhL2xpYmF2Y29k ZWMvbGlieGV2ZS5jIGIvbGliYXZjb2RlYy9saWJ4ZXZlLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwLi5lOTMwMDc0MzFiDQotLS0gL2Rldi9udWxsDQorKysgYi9saWJh dmNvZGVjL2xpYnhldmUuYw0KQEAgLTAsMCArMSwxMTQxIEBADQorLyoNCisgKiBsaWJ4ZXZlIGVu Y29kZXINCisgKiBFVkMgKE1QRUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nKSBlbmNvZGluZyB1 c2luZyBYRVZFIE1QRUctNSBFVkMgZW5jb2RlciBsaWJyYXJ5DQorICoNCisgKiBDb3B5cmlnaHQg KEMpIDIwMjEgRGF3aWQgS296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+DQorICoNCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuDQorICoNCisgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0K KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLg0KKyAqDQorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljDQorICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCisgKi8NCisNCisjaWYg ZGVmaW5lZChfTVNDX1ZFUikNCisjZGVmaW5lIFhFVkVfQVBJX0lNUE9SVFMgMQ0KKyNlbmRpZg0K Kw0KKyNpbmNsdWRlIDxmbG9hdC5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisjaW5jbHVk ZSA8eGV2ZS5oPg0KKw0KKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCINCisjaW5jbHVk ZSAibGliYXZ1dGlsL2NvbW1vbi5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiDQorI2lu Y2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiDQorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQu aCINCisjaW5jbHVkZSAibGliYXZ1dGlsL3RpbWUuaCINCisjaW5jbHVkZSAibGliYXZ1dGlsL2Nw dS5oIg0KKw0KKyNpbmNsdWRlICJhdmNvZGVjLmgiDQorI2luY2x1ZGUgImludGVybmFsLmgiDQor I2luY2x1ZGUgInBhY2tldF9pbnRlcm5hbC5oIg0KKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5o Ig0KKw0KKyNkZWZpbmUgTUFYX0JTX0JVRiAoMTYqMTAyNCoxMDI0KQ0KKw0KKy8qKg0KKyAqIEVy cm9yIGNvZGVzDQorICovDQorI2RlZmluZSBYRVZFX1BBUkFNX0JBRF9OQU1FIC0xMDANCisjZGVm aW5lIFhFVkVfUEFSQU1fQkFEX1ZBTFVFIC0yMDANCisNCisvKioNCisgKiBFbmNvZGVyIHN0YXRl cw0KKyAqDQorICogU1RBVEVfRU5DT0RJTkcgLSB0aGUgZW5jb2RlciByZWNlaXZlcyBhbmQgcHJv Y2Vzc2VzIGlucHV0IGZyYW1lcw0KKyAqIFNUQVRFX0JVTVBJTkcgIC0gdGhlcmUgYXJlIG5vIG1v cmUgaW5wdXQgZnJhbWVzLCBob3dldmVyIHRoZSBlbmNvZGVyIHN0aWxsIHByb2Nlc3NlcyBwcmV2 aW91c2x5IHJlY2VpdmVkIGRhdGENCisgKiBTVEFURV9TS0lQUElORyAtIHNraXBwaW5nIGlucHV0 IGZyYW1lcw0KKyAqLw0KK3R5cGVkZWYgZW51bSBTdGF0ZSB7DQorICAgIFNUQVRFX0VOQ09ESU5H LA0KKyAgICBTVEFURV9CVU1QSU5HLA0KKyAgICBTVEFURV9TS0lQUElORw0KK30gU3RhdGU7DQor DQorLyoqDQorICogVGhlIHN0cnVjdHVyZSBzdG9yZXMgYWxsIHRoZSBzdGF0ZXMgYXNzb2NpYXRl ZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZW5jb2Rlcg0KKyAqIFRoZSBm aXJzdCBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3QgKEBzZWUgaHR0cHM6 Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvc3RydWN0QVZDbGFzcy5odG1sI2RldGFpbHMpLg0K KyAqLw0KK3R5cGVkZWYgc3RydWN0IFhldmVDb250ZXh0IHsNCisgICAgY29uc3QgQVZDbGFzcyAq Y2xhc3M7DQorDQorICAgIFhFVkUgaWQ7ICAgICAgICAgICAgLy8gWEVWRSBpbnN0YW5jZSBpZGVu dGlmaWVyDQorICAgIFhFVkVfQ0RTQyBjZHNjOyAgICAgLy8gY29kaW5nIHBhcmFtZXRlcnMgaS5l IHByb2ZpbGUsIHdpZHRoICYgaGVpZ2h0IG9mIGlucHV0IGZyYW1lLCBudW0gb2YgdGhlcmFkcywg ZnJhbWUgcmF0ZSAuLi4NCisgICAgWEVWRV9CSVRCIGJpdGI7ICAgICAvLyBiaXRzdHJlYW0gYnVm ZmVyIChvdXRwdXQpDQorICAgIFhFVkVfU1RBVCBzdGF0OyAgICAgLy8gZW5jb2Rpbmcgc3RhdHVz IChvdXRwdXQpDQorICAgIFhFVkVfSU1HQiBpbWdiOyAgICAgLy8gaW1hZ2UgYnVmZmVyIChpbnB1 dCkNCisNCisgICAgU3RhdGUgc3RhdGU7ICAgICAgICAvLyBlbmNvZGVyIHN0YXRlIChza2lwcGlu ZywgZW5jb2RpbmcsIGJ1bXBpbmcpDQorDQorICAgIGludCBlbmNvZF9mcmFtZXM7ICAgLy8gbnVt IG9mIGVuY29kZWQgZnJhbWVzDQorICAgIGRvdWJsZSBieXRlc190b3RhbDsgLy8gZW5jb2RlZCBi aXRzdHJlYW0gYnl0ZSBzaXplDQorICAgIGRvdWJsZSBiaXRyYXRlOyAgICAgLy8gYml0cyBwZXIg c2Vjb25kDQorICAgIGludCBwYWNrZXRfY291bnQ7ICAgLy8gbnVtIG9mIHBhY2tldHMgY3JlYXRl ZCBieSBlbmNvZGVyDQorDQorICAgIC8vIENocm9tYSBzdWJzYW1wbGluZw0KKyAgICBpbnQgd2lk dGhfbHVtYTsNCisgICAgaW50IGhlaWdodF9sdW1hOw0KKyAgICBpbnQgd2lkdGhfY2hyb21hOw0K KyAgICBpbnQgaGVpZ2h0X2Nocm9tYTsNCisNCisgICAgaW50IHByb2ZpbGVfaWQ7ICAgICAvLyBl bmNvZGVyIHByb2ZpbGUgKG1haW4sIGJhc2VsaW5lKQ0KKyAgICBpbnQgcHJlc2V0X2lkOyAgICAg IC8vIHByZXNldCBvZiB4ZXZlICggZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvKQ0KKyAgICBp bnQgdHVuZV9pZDsgICAgICAgIC8vIHR1bmUgb2YgeGV2ZSAocHNuciwgemVyb2xhdGVuY3kpDQor ICAgIGludCBpbnB1dF9kZXB0aDsgICAgLy8gaW5wdXQgYml0LWRlcHRoOiA4Yml0LCAxMGJpdA0K KyAgICBpbnQgaGFzaDsgICAgICAgICAgIC8vIGVtYmVkIHBpY3R1cmUgc2lnbmF0dXJlIChIQVNI KSBmb3IgY29uZm9ybWFuY2UgY2hlY2tpbmcgaW4gZGVjb2RpbmcNCisNCisgICAgLyogdmFyaWFi bGVzIGZvciBpbnB1dCBwYXJhbWV0ZXIgKi8NCisgICAgY2hhciAqb3BfcHJlc2V0Ow0KKyAgICBj aGFyICpvcF90dW5lOw0KKyAgICBpbnQgb3BfcXA7DQorICAgIGludCBvcF9jcmY7DQorDQorICAg IC8vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycw0KKyAgICAvLyB4ZXZlIGNvbmZpZ3VyYXRpb24g cmVhZCBmcm9tIGEgOiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycw0KKyAg ICBBVkRpY3Rpb25hcnkgKnhldmVfcGFyYW1zOw0KK30gWGV2ZUNvbnRleHQ7DQorDQorLyoqDQor ICogR2V0cyBYZXZlIGVuY29kZXIgcHJlLWRlZmluZWQgcHJvZmlsZQ0KKyAqDQorICogQHBhcmFt IHByb2ZpbGUgc3RyaW5nIGRlc2NyaWJpbmcgWGV2ZSBlbmNvZGVyIHByb2ZpbGUgKGJhc2VsaW5l LCBtYWluKQ0KKyAqIEByZXR1cm4gWEVWRSBwcmUtZGVmaW5lZCBwcm9maWxlIG9uIHN1Y2Nlc3Ms IG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50IGdldF9wcm9maWxl X2lkKGNvbnN0IGNoYXIgKnByb2ZpbGUpDQorew0KKyAgICBpZiAoIXN0cmNtcChwcm9maWxlLCAi YmFzZWxpbmUiKSkNCisgICAgICAgIHJldHVybiBYRVZFX1BST0ZJTEVfQkFTRUxJTkU7DQorICAg IGVsc2UgaWYgKCFzdHJjbXAocHJvZmlsZSwgIm1haW4iKSkNCisgICAgICAgIHJldHVybiBYRVZF X1BST0ZJTEVfTUFJTjsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIC0xOw0KK30NCisNCisv KioNCisgKiBHZXRzIFhldmUgcHJlLWRlZmluZWQgcHJlc2V0DQorICoNCisgKiBAcGFyYW0gcHJl c2V0IHN0cmluZyBkZXNjcmliaW5nIFhldmUgZW5jb2RlciBwcmVzZXQgKGZhc3QsIG1lZGl1bSwg c2xvdywgcGxhY2VibykNCisgKiBAcmV0dXJuIFhFVkUgcHJlLWRlZmluZWQgcHJvZmlsZSBvbiBz dWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBnZXRf cHJlc2V0X2lkKGNvbnN0IGNoYXIgKnByZXNldCkNCit7DQorICAgIGlmKCghc3RyY21wKHByZXNl dCwgImZhc3QiKSkpDQorICAgICAgICByZXR1cm4gWEVWRV9QUkVTRVRfRkFTVDsNCisgICAgZWxz ZSBpZiAoIXN0cmNtcChwcmVzZXQsICJtZWRpdW0iKSkNCisgICAgICAgIHJldHVybiBYRVZFX1BS RVNFVF9NRURJVU07DQorICAgIGVsc2UgaWYgKCFzdHJjbXAocHJlc2V0LCAic2xvdyIpKQ0KKyAg ICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX1NMT1c7DQorICAgIGVsc2UgaWYgKCFzdHJjbXAocHJl c2V0LCAicGxhY2VibyIpKQ0KKyAgICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX1BMQUNFQk87DQor ICAgIGVsc2UNCisgICAgICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogR2V0cyBYZXZl IHByZS1kZWZpbmVkIHR1bmUgaWQNCisgKg0KKyAqIEBwYXJhbVtpbl0gdHVuZSBzdHJpbmcgZGVz Y3JpYmluZyBYZXZlIGVuY29kZXIgdHVuZSAocHNuciwgemVyb2xhdGVuY3kpDQorICogQHJldHVy biBYRVZFIHByZS1kZWZpbmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24g ZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZ2V0X3R1bmVfaWQoY29uc3QgY2hhciAqdHVuZSkN Cit7DQorICAgIGlmKCghc3RyY21wKHR1bmUsICJwc25yIikpKQ0KKyAgICAgICAgcmV0dXJuIFhF VkVfVFVORV9QU05SOw0KKyAgICBlbHNlIGlmICghc3RyY21wKHR1bmUsICJ6ZXJvbGF0ZW5jeSIp KQ0KKyAgICAgICAgcmV0dXJuIFhFVkVfVFVORV9aRVJPTEFURU5DWTsNCisgICAgZWxzZQ0KKyAg ICAgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBDb252ZXJ0IEZGbXBlZyBwaXhlbCBm b3JtYXQgKEFWUGl4ZWxGb3JtYXQpIHRvIFhFVkUgcHJlLWRlZmluZWQgY29sb3IgZm9ybWF0DQor ICoNCisgKiBAcGFyYW1baW5dICBweF9mbXQgcGl4ZWwgZm9ybWF0IChAc2VlIGh0dHBzOi8vZmZt cGVnLm9yZy9kb3h5Z2VuL3RydW5rL3BpeGZtdF84aC5odG1sI2E5YThlMzM1Y2YzYmU0NzIwNDJi YzlmMGNmODBjZDRjNSkNCisgKiBAcGFyYW1bb3V0XSBjb2xvcl9mb3JtYXQgWEVWRSBwcmUtZGVm aW5lZCBjb2xvciBmb3JtYXQgKEBzZWUgeGV2ZS5oKQ0KKyAqIEBwYXJhbVtvdXRdIGJpdF9kZXB0 aCBiaXQgZGVwdGgNCisgKg0KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1 ZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBnZXRfcGl4X2ZtdChlbnVtIEFWUGl4ZWxG b3JtYXQgcGl4X2ZtdCwgaW50ICpjb2xvcl9mb3JtYXQsIGludCAqYml0X2RlcHRoKQ0KK3sNCisg ICAgc3dpdGNoIChwaXhfZm10KSB7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOg0KKyAg ICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjA7DQorICAgICAgICAqYml0X2Rl cHRoID0gODsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDoN CisgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDIyOw0KKyAgICAgICAgKmJp dF9kZXB0aCA9IDg7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0 NFA6DQorICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQ0NDsNCisgICAgICAg ICpiaXRfZGVwdGggPSA4Ow0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9Z VVY0MjBQMTA6DQorICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQyMDsNCisg ICAgICAgICpiaXRfZGVwdGggPSAxMDsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJ WF9GTVRfWVVWNDIyUDEwOg0KKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0 MjI7DQorICAgICAgICAqYml0X2RlcHRoID0gMTA7DQorICAgICAgICBicmVhazsNCisgICAgY2Fz ZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMDoNCisgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NG X1lDQkNSNDQ0Ow0KKyAgICAgICAgKmJpdF9kZXB0aCA9IDEwOw0KKyAgICAgICAgYnJlYWs7DQor ICAgIGRlZmF1bHQ6DQorICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9VTktOT1dOOw0K KyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCitz dGF0aWMgaW50IGticHNfc3RyX3RvX2ludChjaGFyICpzdHIpDQorew0KKyAgICBpbnQga2JwcyA9 IDA7DQorICAgIGlmIChzdHJjaHIoc3RyLCAnSycpIHx8IHN0cmNocihzdHIsICdrJykpIHsNCisg ICAgICAgIGNoYXIgKnRtcCA9IHN0cnRvayhzdHIsICJLayAiKTsNCisgICAgICAgIGticHMgPSAo aW50KShhdG9mKHRtcCkpOw0KKyAgICB9IGVsc2UgaWYgKHN0cmNocihzdHIsICdNJykgfHwgc3Ry Y2hyKHN0ciwgJ20nKSkgew0KKyAgICAgICAgY2hhciAqdG1wID0gc3RydG9rKHN0ciwgIk1tICIp Ow0KKyAgICAgICAga2JwcyA9IChpbnQpKGF0b2YodG1wKSAqIDEwMDApOw0KKyAgICB9IGVsc2UN CisgICAgICAgIGticHMgPSBhdG9pKHN0cik7DQorDQorICAgIHJldHVybiBrYnBzOw0KK30NCisN CisvKioNCisgKiBQYXJzZSA6IHNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJz DQorICoNCisgKiBAcGFyYW1baW5dIGF2Y3R4IGNvbnRleHQgZm9yIGxvZ2dlcg0KKyAqIEBwYXJh bVtpbl0ga2V5DQorICogQHBhcmFtW2luXSB2YWx1ZQ0KKyAqIEBwYXJhbVtvdXRdIGNkc2MgY29u dGFpbnMgYWxsIFhldmUgTVBFRy01IEVWQyBlbmNvZGVyIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0 DQorICogICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBl bmNvZGVyIGlzIHVzZQ0KKyAqDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZh bHVlIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50IHBhcnNlX3hldmVfcGFyYW1zKEFWQ29k ZWNDb250ZXh0ICphdmN0eCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgWEVW RV9DRFNDKiBjZHNjKQ0KK3sNCisgICAgWGV2ZUNvbnRleHQgKnhlY3R4ID0gTlVMTDsNCisgICAg eGVjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKw0KKyAgICBpZigha2V5KSB7DQorICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkl2YWxpZCBhcmd1bWVudDoga2V5IHN0cmluZyBp cyBOVUxMXG4iKTsNCisgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAg fQ0KKyAgICBpZighdmFsdWUpIHsNCisgICAgICAgIGlmIChzdHJjbXAoa2V5LCAiaGFzaCIpID09 IDApIHsNCisgICAgICAgICAgICB4ZWN0eC0+aGFzaCA9IDE7DQorICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfSU5GTywgImVtYmVkZGluZyBzaWduYXR1cmUgaXMgZW5hYmxlZFxuIik7 DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiSXZhbGlkIGFyZ3VtZW50OiB2YWx1ZSBzdHJpbmcgaXMgTlVMTFxuIik7DQorICAgICAg ICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICB9IGVs c2UgaWYgKHN0cmNtcChrZXksICJ2YnYtYnVmc2l6ZSIpID09IDAgKSB7DQorICAgICAgICBjZHNj LT5wYXJhbS52YnZfYnVmc2l6ZSA9IGticHNfc3RyX3RvX2ludCgoY2hhciAqKXZhbHVlKTsNCisg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8sICJWQlYgYnVmZmVyIHNpemU6ICVka2Jp dHNcbiIsIGNkc2MtPnBhcmFtLnZidl9idWZzaXplKTsNCisgICAgfSBlbHNlIGlmIChzdHJjbXAo a2V5LCAicmMtdHlwZSIpID09IDAgKSB7DQorICAgICAgICBpbnQgcmNfdHlwZSA9IGF0b2kodmFs dWUpOw0KKyAgICAgICAgaWYocmNfdHlwZSA8IDAgfHwgcmNfdHlwZSA+IDIpIHsNCisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlJhdGUgY29udHJvbCB0eXBlIFsgMChy Y19vZmYpIC8gMShDQlIpIF0gYmFkIHZhbHVlOiAlZFxuIiwgcmNfdHlwZSk7DQorICAgICAgICAg ICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICAgICAgY2Rz Yy0+cGFyYW0ucmNfdHlwZSA9IHJjX3R5cGU7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19JTkZPLCAiUmF0ZSBjb250cm9sIHR5cGUgWyAwKHJjX29mZikgLyAxKENCUikgXSA6ICVkXG4i LCByY190eXBlKTsNCisgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAiYmZyYW1lcyIpID09IDAg KSB7DQorICAgICAgICBpbnQgYmZyYW1lcyA9IGF0b2kodmFsdWUpOw0KKyAgICAgICAgaWYoYmZy YW1lcyA8IDApIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImJm cmFtZXM6IGJhZCB2YWx1ZTogJWRcbiIsIGJmcmFtZXMpOw0KKyAgICAgICAgICAgIHJldHVybiBY RVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAgICAgIH0NCisgICAgICAgIGNkc2MtPnBhcmFtLmJm cmFtZXMgPSBiZnJhbWVzOw0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywgImJm cmFtZXMgOiAlZFxuIiwgYmZyYW1lcyk7DQorICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInBy b2ZpbGUiKSA9PSAwICkgew0KKyAgICAgICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IHZhbHVlOw0K KyAgICAgICAgaW50IHByb2ZpbGVfaWQ7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19J TkZPLCAicHJvZmlsZSAoYmFzZWxpbmUsIG1haW4pOiAlc1xuIiwgcHJvZmlsZSk7DQorICAgICAg ICBwcm9maWxlX2lkID0gZ2V0X3Byb2ZpbGVfaWQocHJvZmlsZSk7DQorICAgICAgICBpZiAocHJv ZmlsZV9pZCA8IDApIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkludmFsaWQgeGV2ZSBwYXJhbTogcHJvZmlsZSglcylcbiIsIHByb2ZpbGUpOw0KKyAgICAgICAg ICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAgICAgIH0NCisgICAgICAgIHhl Y3R4LT5wcm9maWxlX2lkID0gcHJvZmlsZV9pZDsNCisgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5 LCAicHJlc2V0IikgPT0gMCApIHsNCisgICAgICAgIGNvbnN0IGNoYXIgKnByZXNldCA9IHZhbHVl Ow0KKyAgICAgICAgaW50IHByZXNldF9pZDsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0lORk8sICJQcmVzZXQgb2YgeGV2ZSAoZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvKTogJXNc biIsIHByZXNldCk7DQorICAgICAgICBwcmVzZXRfaWQgPSBnZXRfcHJlc2V0X2lkKHByZXNldCk7 DQorICAgICAgICBpZiggcHJlc2V0X2lkIDwgMCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB4ZXZlIHBhcmFtOiBwcmVzZXQoJXMpXG4iLCBwcmVz ZXQpOw0KKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAgICAg IH0NCisgICAgICAgIHhlY3R4LT5wcmVzZXRfaWQgPSBwcmVzZXRfaWQ7DQorICAgIH0gZWxzZSBp ZiAoc3RyY21wKGtleSwgInR1bmUiKSA9PSAwICkgew0KKyAgICAgICAgY29uc3QgY2hhciAqdHVu ZSA9IHZhbHVlOw0KKyAgICAgICAgaW50IHR1bmVfaWQ7DQorICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19JTkZPLCAiVHVuZSBvZiB4ZXZlIChwc25yLCB6ZXJvbGF0ZW5jeSk6ICVzXG4iLCB0 dW5lKTsNCisgICAgICAgIHR1bmVfaWQgPSBnZXRfdHVuZV9pZCh0dW5lKTsNCisgICAgICAgIGlm KCB0dW5lX2lkIDwgMCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiSW52YWxpZCB4ZXZlIHBhcmFtOiB0dW5lKCVzKVxuIiwgdHVuZSk7DQorICAgICAgICAgICAg cmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICAgICAgeGVjdHgt PnR1bmVfaWQgPSB0dW5lX2lkOw0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJiaXRyYXRl IikgPT0gMCApIHsNCisgICAgICAgIGNkc2MtPnBhcmFtLmJpdHJhdGUgPSBrYnBzX3N0cl90b19p bnQoKGNoYXIgKil2YWx1ZSk7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAi Qml0cmF0ZSA9ICVka2Jwc1xuIiwgY2RzYy0+cGFyYW0uYml0cmF0ZSk7DQorICAgIH0gZWxzZSBp ZiAoc3RyY21wKGtleSwgInEiKSA9PSAwIHx8IHN0cmNtcChrZXksICJxcCIpID09IDApIHsNCisg ICAgICAgIGludCBxcCA9IGF0b2kodmFsdWUpOw0KKyAgICAgICAgaWYocXAgPCAwIHx8IHFwID4g NTEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQg UVAgdmFsdWUgKDB+NTEpIDolZFxuIiwgcXApOw0KKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BB UkFNX0JBRF9WQUxVRTsNCisgICAgICAgIH0NCisgICAgICAgIGNkc2MtPnBhcmFtLnFwID0gcXA7 DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAiUVAgdmFsdWUgKDB+NTEpOiAl ZFxuIiwgY2RzYy0+cGFyYW0ucXApOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIHhldmUgY29kZWMgb3B0aW9uOiAlc1xuIiwga2V5 KTsNCisgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9OQU1FOw0KKyAgICB9DQorDQorICAg IHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50 ZXIgdG8gdGhlIG9iamVjdCBvZiB0aGUgWEVWRV9DRFNDIHR5cGUuDQorICogWEVWRV9DRFNDIGNv bnRhaW5zIGFsbCBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQg YmVmb3JlIHRoZSBlbmNvZGVyIGlzIHVzZWQuDQorICoNCisgKiBUaGUgZmllbGQgdmFsdWVzIG9m IHRoZSBYRVZFX0NEU0Mgc3RydWN0dXJlIGFyZSBwb3B1bGF0ZWQgYmFzZWQgb246DQorICogLSB0 aGUgY29ycmVzcG9uZGluZyBmaWVsZCB2YWx1ZXMgb2YgdGhlIEF2Q29kZWNDb25ldHh0IHN0cnVj dHVyZSwNCisgKiAtIHRoZSB4ZXZlIGVuY29kZXIgc3BlY2lmaWMgb3B0aW9uIHZhbHVlcywNCisg KiAgICh0aGUgZnVsbCBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB4ZXZlIGVuY29kZXIg aXMgZGlzcGxheWVkIGFmdGVyIGV4ZWN1dGluZyB0aGUgY29tbWFuZCAuL2ZmbXBlZyAtLWhlbHAg ZW5jb2RlciA9IGxpYnhldmUpDQorICogLSBhbmQgdGhlIHhldmUgZW5jb2RlciBvcHRpb25zIHNw ZWNpZmllZCBhcyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzIGZvbGxvd2luZyB0aGUgeGV2ZS1w YXJhbXMgb3B0aW9uDQorICoNCisgKiBUaGUgb3JkZXIgb2YgcHJvY2Vzc2luZyBpbnB1dCBkYXRh IGFuZCBwb3B1bGF0aW5nIHRoZSBYRVZFX0NEU0Mgc3RydWN0dXJlDQorICogMSkgZmlyc3QsIHRo ZSBmaWVsZHMgb2YgdGhlIEFWQ29kZWNDb250ZXh0IHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRv IHRoZSBwcm92aWRlZCBpbnB1dCBvcHRpb25zIGFyZSBwcm9jZXNzZWQsDQorICogICAgKGkuZSAt cGl4X2ZtdCB5dXY0MjBwIC1zOnYgMTkyMHgxMDgwIC1yIDMwIC1wcm9maWxlOnYgMCkNCisgKiAy KSB0aGVuIHhldmUtc3BlY2lmaWMgb3B0aW9ucyBhZGRlZCBhcyBBVk9wdGlvbiB0byB0aGUgeGV2 ZSBBVkNvZGVjIGltcGxlbWVudGF0aW9uDQorICogICAgKGkuZSAtdGhyZWFkc19jbnQgMyAtcHJl c2V0IDApDQorICogMykgZmluYWxseSwgdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGFmdGVyIHRoZSB4 ZXZlLXBhcmFtcyBvcHRpb24gYXMgdGhlIHBhcmFtZXRlciBsaXN0IG9mIHR5cGUga2V5IHZhbHVl IGFyZSBwcm9jZXNzZWQNCisgKiAgICAoaS5lIC14ZXZlLXBhcmFtcyAibT0yOnE9MTciKQ0KKyAq DQorICogS2VlcCBpbiBtaW5kIHRoYXQsIHRoZXJlIGFyZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNl dCBpbiBkaWZmZXJlbnQgd2F5cy4NCisgKiBJbiB0aGlzIGNhc2UsIHBsZWFzZSBmb2xsb3cgdGhl IGFib3ZlLW1lbnRpb25lZCBvcmRlciBvZiBwcm9jZXNzaW5nLg0KKyAqIFRoZSBtb3N0IHJlY2Vu dCBhc3NpZ25tZW50cyBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHZhbHVlcy4NCisgKg0KKyAqIEBw YXJhbVtpbl0gYXZjdHggY29kZWMgY29udGV4dCAoQVZDb2RlY0NvbnRleHQpDQorICogQHBhcmFt W291dF0gY2RzYyBjb250YWlucyBhbGwgWGV2ZSBNUEVHLTUgRVZDIGVuY29kZXIgZW5jb2RlciBw YXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgZW5jb2RlciBp cyB1c2UNCisgKg0KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50IGdldF9jb25mKEFWQ29kZWNDb250ZXh0ICph dmN0eCwgWEVWRV9DRFNDICpjZHNjKQ0KK3sNCisgICAgWGV2ZUNvbnRleHQgKnhlY3R4ID0gTlVM TDsNCisgICAgaW50IGNvbG9yX2Zvcm1hdDsNCisgICAgaW50IGNwdV9jb3VudCA9IGF2X2NwdV9j b3VudCgpOw0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICB4ZWN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 DQorICAgIHhlY3R4LT5oYXNoID0gMDsNCisNCisgICAgLyogaW5pdGlhbGl6ZSB4ZXZlX3BhcmFt IHN0cnVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzICovDQorICAgIHJldCA9IHhldmVfcGFyYW1fZGVm YXVsdCgmY2RzYy0+cGFyYW0pOw0KKyAgICBpZiAoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3Qgc2V0X2RlZmF1bHQgcGFyYW1l dGVyXG4iKTsNCisgICAgICAgIGdvdG8gRVJSOw0KKyAgICB9DQorDQorICAgIC8qIHJlYWQgb3B0 aW9ucyBmcm9tIEFWQ29kZWNDb250ZXh0ICovDQorICAgIGlmKGF2Y3R4LT53aWR0aCA+IDApDQor ICAgICAgICBjZHNjLT5wYXJhbS53ID0geGVjdHgtPndpZHRoX2x1bWEgPSBhdmN0eC0+d2lkdGg7 DQorDQorICAgIGlmKGF2Y3R4LT5oZWlnaHQgPiAwKQ0KKyAgICAgICAgY2RzYy0+cGFyYW0uaCA9 IHhlY3R4LT5oZWlnaHRfbHVtYSA9IGF2Y3R4LT5oZWlnaHQ7DQorDQorICAgIGlmKGF2Y3R4LT5m cmFtZXJhdGUubnVtID4gMCkgew0KKyAgICAgICAgLy8gZnBzIGNhbiBiZSBmbG9hdCBudW1iZXIs IGJ1dCB4ZXZlIEFQSSBkb2Vzbid0IHN1cHBvcnQgaXQNCisgICAgICAgIGNkc2MtPnBhcmFtLmZw cyA9IChpbnQpKCgoZmxvYXQpYXZjdHgtPmZyYW1lcmF0ZS5udW0gLyBhdmN0eC0+ZnJhbWVyYXRl LmRlbikgKyAwLjUpOw0KKyAgICB9DQorDQorICAgIGlmKGF2Y3R4LT5nb3Bfc2l6ZSA+PSAwKSB7 IC8vIEdPUCBzaXplIChrZXktZnJhbWUgaW50ZXJ2YWwpDQorICAgICAgICBjZHNjLT5wYXJhbS5r ZXlpbnQgPSBhdmN0eC0+Z29wX3NpemU7IC8vIDA6IG9ubHkgb25lIEktZnJhbWUgYXQgdGhlIGZp cnN0IHRpbWU7IDE6IGV2ZXJ5IGZyYW1lIGlzIGNvZGVkIGluIEktZnJhbWUNCisgICAgfQ0KKw0K KyAgICBpZiAoYXZjdHgtPm1heF9iX2ZyYW1lcyA9PSAwIHx8IGF2Y3R4LT5tYXhfYl9mcmFtZXMg PT0gMSB8fCBhdmN0eC0+bWF4X2JfZnJhbWVzID09IDMgfHwNCisgICAgICAgIGF2Y3R4LT5tYXhf Yl9mcmFtZXMgPT0gNyB8fCBhdmN0eC0+bWF4X2JfZnJhbWVzID09IDE1KSB7IC8vIG51bWJlciBv ZiBiLWZyYW1lcw0KKyAgICAgICAgY2RzYy0+cGFyYW0uYmZyYW1lcyA9IGF2Y3R4LT5tYXhfYl9m cmFtZXM7DQorICAgIH0gZWxzZSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkluY29ycmVjdCB2YWx1ZSBmb3IgbWF4aW11bSBudW1iZXIgb2YgQiBmcmFtZXM6ICglZCkg XG4iDQorICAgICAgICAgICAgICAgIkFjY2VwdGFibGUgdmFsdWVzIGZvciBiZiBvcHRpb24gKG1h eGltdW0gbnVtYmVyIG9mIEIgZnJhbWVzKSBhcmUgMCwxLDMsNyBvciAxNVxuIiwgYXZjdHgtPm1h eF9iX2ZyYW1lcyk7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAgICBpZiAoYXZj dHgtPmxldmVsID49IDApDQorICAgICAgICBjZHNjLT5wYXJhbS5sZXZlbF9pZGMgPSBhdmN0eC0+ bGV2ZWw7DQorDQorICAgIHJldCA9IGdldF9waXhfZm10KGF2Y3R4LT5waXhfZm10LCAmY29sb3Jf Zm9ybWF0LCAmeGVjdHgtPmlucHV0X2RlcHRoKTsNCisNCisgICAgaWYgKHJldCAhPSAwKSB7DQor ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIHBpeGVsIGZv cm1hdC5cbiIpOw0KKyAgICAgICAgZ290byBFUlI7DQorICAgIH0NCisgICAgY2RzYy0+cGFyYW0u Y3MgPSBYRVZFX0NTX1NFVChjb2xvcl9mb3JtYXQsIHhlY3R4LT5pbnB1dF9kZXB0aCwgMCk7DQor DQorICAgIGlmIChhdmN0eC0+cmNfYnVmZmVyX3NpemUgPiAwKSB7IC8vIFZCViBidWYgc2l6ZQ0K KyAgICAgICAgY2RzYy0+cGFyYW0udmJ2X2J1ZnNpemUgPSAoaW50KShhdmN0eC0+cmNfYnVmZmVy X3NpemUgLyAxMDAwKTsNCisgICAgfQ0KKw0KKyAgICAvLyByY190eXBlOiAgUmF0ZSBjb250cm9s IHR5cGUgWyAwKENRUCkgLyAxKEFCUikgLyAyKENSRikgXQ0KKyAgICBpZiAoYXZjdHgtPmJpdF9y YXRlID4gMCkgew0KKyAgICAgICAgaWYgKGF2Y3R4LT5iaXRfcmF0ZSAvIDEwMDAgPiBJTlRfTUFY IHx8IGF2Y3R4LT5yY19tYXhfcmF0ZSAvIDEwMDAgPiBJTlRfTUFYKSB7DQorICAgICAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJOb3Qgc3VwcG9ydGVkIGJpdHJhdGUgYml0X3Jh dGUgYW5kIHJjX21heF9yYXRlID4gJWQwMDBcbiIsIElOVF9NQVgpOw0KKyAgICAgICAgICAgIGdv dG8gRVJSOw0KKyAgICAgICAgfQ0KKyAgICAgICAgY2RzYy0+cGFyYW0uYml0cmF0ZSA9IChpbnQp KGF2Y3R4LT5iaXRfcmF0ZSAvIDEwMDApOw0KKyAgICAgICAgY2RzYy0+cGFyYW0ucmNfdHlwZSA9 IFhFVkVfUkNfQUJSOw0KKyAgICB9DQorDQorICAgIGlmICh4ZWN0eC0+b3BfY3JmID49IDApIHsN CisgICAgICAgIGNkc2MtPnBhcmFtLmNyZiA9IHhlY3R4LT5vcF9jcmY7DQorICAgICAgICBjZHNj LT5wYXJhbS5yY190eXBlID0gWEVWRV9SQ19DUkY7DQorICAgIH0NCisNCisgICAgaWYoYXZjdHgt PnRocmVhZF9jb3VudCA8PSAwKSB7DQorICAgICAgICBjZHNjLT5wYXJhbS50aHJlYWRzID0gKGNw dV9jb3VudCA8IFhFVkVfTUFYX1RIUkVBRFMpID8gY3B1X2NvdW50IDogWEVWRV9NQVhfVEhSRUFE UzsNCisgICAgfSBlbHNlIGlmKGF2Y3R4LT50aHJlYWRfY291bnQgPiBYRVZFX01BWF9USFJFQURT KQ0KKyAgICAgICAgY2RzYy0+cGFyYW0udGhyZWFkcyA9IFhFVkVfTUFYX1RIUkVBRFM7DQorICAg IGVsc2UNCisgICAgICAgIGNkc2MtPnBhcmFtLnRocmVhZHMgPSBhdmN0eC0+dGhyZWFkX2NvdW50 Ow0KKw0KKyAgICBjZHNjLT5wYXJhbS5jcyA9IFhFVkVfQ1NfU0VUKGNvbG9yX2Zvcm1hdCwgY2Rz Yy0+cGFyYW0uY29kZWNfYml0X2RlcHRoLCAwKTsNCisgICAgY2RzYy0+bWF4X2JzX2J1Zl9zaXpl ID0gTUFYX0JTX0JVRjsNCisNCisgICAgaWYoYXZjdHgtPnByb2ZpbGUgPT0gRkZfUFJPRklMRV9F VkNfQkFTRUxJTkUpDQorICAgICAgICB4ZWN0eC0+cHJvZmlsZV9pZCA9IFhFVkVfUFJPRklMRV9C QVNFTElORTsNCisgICAgZWxzZSBpZihhdmN0eC0+cHJvZmlsZSA9PSBGRl9QUk9GSUxFX0VWQ19N QUlOKQ0KKyAgICAgICAgeGVjdHgtPnByb2ZpbGVfaWQgPSBYRVZFX1BST0ZJTEVfTUFJTjsNCisg ICAgZWxzZSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24g ZW5jb2RlciBwcm9maWxlICglZClcbiINCisgICAgICAgICAgICAgICAiQWNjZXB0YWJsZSB2YWx1 ZXMgZm9yIHByb2ZpbGUgb3B0aW9uIGFyZSAwIGFuZCAxICgwOiBiYXNlbGluZSBwcm9maWxlOyAx OiBtYWluIHByb2ZpbGUpXG4iLCBhdmN0eC0+cHJvZmlsZSk7DQorICAgICAgICBnb3RvIEVSUjsN CisgICAgfQ0KKw0KKyAgICBpZiAoeGVjdHgtPm9wX3ByZXNldCkgeyAvLyBwcmVzZXQNCisgICAg ICAgIHhlY3R4LT5wcmVzZXRfaWQgPSBnZXRfcHJlc2V0X2lkKHhlY3R4LT5vcF9wcmVzZXQpOw0K KyAgICB9DQorDQorICAgIGlmICh4ZWN0eC0+b3BfdHVuZSkgeyAvLyB0dW5lDQorICAgICAgICB4 ZWN0eC0+dHVuZV9pZCA9IGdldF90dW5lX2lkKHhlY3R4LT5vcF90dW5lKTsNCisgICAgfQ0KKw0K KyAgICByZXQgPSB4ZXZlX3BhcmFtX3BwdCgmY2RzYy0+cGFyYW0sIHhlY3R4LT5wcm9maWxlX2lk LCB4ZWN0eC0+cHJlc2V0X2lkLCB4ZWN0eC0+dHVuZV9pZCk7DQorICAgIGlmIChYRVZFX0ZBSUxF RChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBz ZXQgcHJvZmlsZSglZCksIHByZXNldCglZCksIHR1bmUoJWQpXG4iLCB4ZWN0eC0+cHJvZmlsZV9p ZCwgeGVjdHgtPnByZXNldF9pZCwgeGVjdHgtPnR1bmVfaWQpOw0KKyAgICAgICAgZ290byBFUlI7 DQorICAgIH0NCisNCisgICAgLyogcGFyc2UgOiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUg cGFyYW1ldGVycyBhbmQgc2V0IHZhbHVlcyBmb3IgY3JlYXRlZCBkZXNjcmlwdG9yIChYRVZFX0NE U0MpICovDQorICAgIHsNCisgICAgICAgIEFWRGljdGlvbmFyeUVudHJ5ICplbiA9IE5VTEw7DQor DQorICAgICAgICAvLyBTdGFydCB0byBwYXJzZSB4ZXZlX3BhcmFtcw0KKyAgICAgICAgd2hpbGUg KChlbiA9IGF2X2RpY3RfZ2V0KHhlY3R4LT54ZXZlX3BhcmFtcywgIiIsIGVuLCBBVl9ESUNUX0lH Tk9SRV9TVUZGSVgpKSkgew0KKyAgICAgICAgICAgIGludCBwYXJzZV9yZXQgPSBwYXJzZV94ZXZl X3BhcmFtcyhhdmN0eCwgZW4tPmtleSwgZW4tPnZhbHVlLCBjZHNjKTsNCisNCisgICAgICAgICAg ICBzd2l0Y2ggKHBhcnNlX3JldCkgew0KKyAgICAgICAgICAgIGNhc2UgWEVWRV9QQVJBTV9CQURf TkFNRToNCisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIlVu a25vd24gb3B0aW9uOiAlcy5cbiIsIGVuLT5rZXkpOw0KKyAgICAgICAgICAgICAgICBicmVhazsN CisgICAgICAgICAgICBjYXNlIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOg0KKyAgICAgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVz LlxuIiwgZW4tPmtleSwgZW4tPnZhbHVlKTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAg ICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAg fQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KKw0KK0VSUjoNCisgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgZW5jb2RlciBj b25maWd1cmF0aW9uDQorICoNCisgKiBAcGFyYW1baW5dIGF2Y3R4IGNvbnRleHQgZm9yIGxvZ2dl cg0KKyAqIEBwYXJhbVtpbl0gY2RzYyBjb250YWlucyBhbGwgZW5jb2RlciBwYXJhbWV0ZXJzIHRo YXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlDQorICoNCisgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3Rh dGljIGludCBjaGVja19jb25mKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgIFhFVkVfQ0RTQyAqY2Rz YykNCit7DQorICAgIGludCByZXQgPSAwOw0KKyAgICBpbnQgbWluX2Jsb2NrX3NpemUgPSA0Ow0K KyAgICBpbnQgcGljX207DQorDQorICAgIGlmKGNkc2MtPnBhcmFtLnByb2ZpbGUgPT0gWEVWRV9Q Uk9GSUxFX0JBU0VMSU5FKSB7DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hbXZyICAg ID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFNVlIg Y2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7 DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9tbXZkICAgID09IDEp IHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1NVkQgY2Fubm90 IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAg ICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZmZpbmUgID09IDEpIHsNCisg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFmZmluZSBjYW5ub3QgYmUg b24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAg IH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2RtdnIgICAgPT0gMSkgew0KKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRE1WUiBjYW5ub3QgYmUgb24gaW4g YmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisg ICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAgPT0gMSkgew0KKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQURNVlAgY2Fubm90IGJlIG9uIGluIGJhc2Ug cHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAg ICBpZiAoY2RzYy0+cGFyYW0udG9vbF9obXZwICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkhNVlAgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmls ZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAo Y2RzYy0+cGFyYW0udG9vbF9hZGRiICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkFEREIgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7 DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+ cGFyYW0udG9vbF9hbGYgICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkFMRiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAg ICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50 b29sX2h0ZGYgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiSFRERiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAg ICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5idHQgICAg ICAgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi QlRUIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9 IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnN1Y28gICAgICAgICA9 PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJTVUNPIGNh bm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0K KyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfZWlwZCAgICA9PSAxKSB7 DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFSVBEIGNhbm5vdCBi ZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAg ICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfaXF0ICAgICA9PSAxKSB7DQorICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJUVQgY2Fubm90IGJlIG9uIGlu IGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQor ICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9jbV9pbml0ID09IDEpIHsNCisgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNNX0lOSVQgY2Fubm90IGJlIG9uIGluIGJh c2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAg ICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZGNjICAgID09IDEpIHsNCisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFEQ0MgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJv ZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9hdHMgICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkFUU19JTlRSQSBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9m aWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlm IChjZHNjLT5wYXJhbS5pYmNfZmxhZyAgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiSUJDIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIp Ow0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2Mt PnBhcmFtLnRvb2xfcnBsICAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJSUEwgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAg ICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0u dG9vbF9wb2NzICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIlBPQ1MgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAg ICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgIH0gZWxzZSB7DQorICAgICAgICBpZiAoY2Rz Yy0+cGFyYW0udG9vbF9hZG12cCAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hZmZpbmUgPT0g MSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQUZGSU5FIGNh bm5vdCBiZSBvbiB3aGVuIEFETVZQIGlzIG9mZlxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7 DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDAg JiYgY2RzYy0+cGFyYW0udG9vbF9hbXZyICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiQU1WUiBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBpcyBvZmZc biIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNk c2MtPnBhcmFtLnRvb2xfYWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfZG12ciAgID09 IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRNVlIgY2Fu bm90IGJlIG9uIHdoZW4gQURNVlAgaXMgb2ZmXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsN CisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAgPT0gMCAm JiBjZHNjLT5wYXJhbS50b29sX21tdmQgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJNTVZEIGNhbm5vdCBiZSBvbiB3aGVuIEFETVZQIGlzIG9mZlxu Iik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2Rz Yy0+cGFyYW0udG9vbF9laXBkICAgID09IDAgJiYgY2RzYy0+cGFyYW0uaWJjX2ZsYWcgICAgPT0g MSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSUJDIGNhbm5v dCBiZSBvbiB3aGVuIEVJUEQgaXMgb2ZmXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisg ICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2lxdCAgICAgPT0gMCAmJiBj ZHNjLT5wYXJhbS50b29sX2F0cyAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJBVFMgY2Fubm90IGJlIG9uIHdoZW4gSVFUIGlzIG9mZlxuIik7DQor ICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFy YW0udG9vbF9jbV9pbml0ID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hZGNjICAgPT0gMSkgew0K KyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQURDQyBjYW5ub3QgYmUg b24gd2hlbiBDTV9JTklUIGlzIG9mZlxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAg ICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGNkc2MtPnBhcmFtLmJ0dCA9PSAxKSB7DQorICAg ICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCAmJiBjZHNjLT5wYXJhbS5mcmFt ZXdvcmtfY2JfbWF4IDwgNSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiTWF4aW11biBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDVc biIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNk c2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggPiA3KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBn cmVhdGVyIHRoYW4gN1xuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQor ICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiAmJiBjZHNjLT5wYXJhbS5m cmFtZXdvcmtfY2JfbWluIDwgMikgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiTWluaW11bSBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFu IDJcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYg KChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4IHx8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19j Yl9taW4pICYmDQorICAgICAgICAgICAgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiA+IGNk c2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXgpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIk1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0 ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBCbG9jayBzaXplXG4iKTsNCisgICAgICAgICAgICByZXQg PSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY3Ux NF9tYXggPiA2KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJN YXhpbXVuIDE6NCBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDZcbiIp Ow0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKChjZHNj LT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4IHx8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jdTE0X21h eCkgJiYNCisgICAgICAgICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY3UxNF9tYXggPiBjZHNj LT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJNYXhpbXVuIDE6NCBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3Jl YXRlciB0aGFuIE1heGltdW0gY29kaW5nIEJsb2NrIHNpemVcbiIpOw0KKyAgICAgICAgICAgIHJl dCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya190 cmlzX21heCA+IDYpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg Ik1heGltdW4gVHJpLXNwbGl0IEJsb2NrIHNpemUgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOw0KKyAg ICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKChjZHNjLT5wYXJh bS5mcmFtZXdvcmtfdHJpc19tYXggfHwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCkgJiYN CisgICAgICAgICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfdHJpc19tYXggPiBjZHNjLT5wYXJh bS5mcmFtZXdvcmtfY2JfbWF4KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJNYXhpbXVuIFRyaS1zcGxpdCBCbG9jayBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRo YW4gTWF4aW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7 DQorICAgICAgICB9DQorICAgICAgICBpZiAoKGNkc2MtPnBhcmFtLmZyYW1ld29ya190cmlzX21p biB8fCBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluKSAmJg0KKyAgICAgICAgICAgIGNkc2Mt PnBhcmFtLmZyYW1ld29ya190cmlzX21pbiA8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4g KyAyKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJNYXhpbXVu IFRyaS1zcGxpdCBCbG9jayBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gTWluaW11bSBDb2Rp bmcgQmxvY2sgc2l6ZSBwbHVzIHR3b1xuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAg ICAgICB9DQorICAgICAgICBpZihjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluKSBtaW5fYmxv Y2tfc2l6ZSA9IDEgPDwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbjsNCisgICAgICAgIGVs c2UgbWluX2Jsb2NrX3NpemUgPSA4Ow0KKyAgICB9DQorDQorICAgIGlmIChjZHNjLT5wYXJhbS5z dWNvID09IDEpIHsNCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19tYXgg PiA2KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJNYXhpbXVu IFNVQ08gc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOw0KKyAgICAgICAgICAgIHJl dCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19j Yl9tYXggJiYgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4ID4gY2RzYy0+cGFyYW0uZnJh bWV3b3JrX2NiX21heCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiTWF4aW11biBTVUNPIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVtIGNvZGlu ZyBCbG9jayBzaXplXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisg ICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19taW4gPCA0KSB7DQorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJNaW5pbXVuIFNVQ08gc2l6ZSBjYW5u b3QgYmUgc21hbGxlciB0aGFuIDRcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAg ICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4gJiYgY2RzYy0+ cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWluIDwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbikg ew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWluaW11biBTVUNP IHNpemUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBNaW5pbXVtIGNvZGluZyBCbG9jayBzaXplXG4i KTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNj LT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19taW4gPiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19t YXgpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1pbmltdW0g U1VDTyBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4aW11bSBTVUNPIHNpemVcbiIpOw0K KyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHBpY19t ID0gKDggPiBtaW5fYmxvY2tfc2l6ZSkgPyBtaW5fYmxvY2tfc2l6ZSA6IDg7DQorICAgIGlmICgo Y2RzYy0+cGFyYW0udyAmIChwaWNfbSAtIDEpKSAhPSAwKSB7DQorICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkN1cnJlbnQgZW5jb2RlciBkb2VzIG5vdCBzdXBwb3J0IHBpY3R1 cmUgd2lkdGgsIG5vdCBtdWx0aXBsZSBvZiBtYXgoOCwgbWluaW11bSBDVSBzaXplKVxuIik7DQor ICAgICAgICByZXQgPSAtMTsNCisgICAgfQ0KKyAgICBpZiAoKGNkc2MtPnBhcmFtLmggJiAocGlj X20gLSAxKSkgIT0gMCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJD dXJyZW50IGVuY29kZXIgZG9lcyBub3Qgc3VwcG9ydCBwaWN0dXJlIGhlaWdodCwgbm90IG11bHRp cGxlIG9mIG1heCg4LCBtaW5pbXVtIENVIHNpemUpXG4iKTsNCisgICAgICAgIHJldCA9IC0xOw0K KyAgICB9DQorDQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCBYRVZFX0NG R19TRVRfVVNFX1BJQ19TSUdOQVRVUkUgZm9yIGVuY29kZXINCisgKg0KKyAqIEBwYXJhbVtpbl0g bG9nZ2VyIGNvbnRleHQNCisgKiBAcGFyYW1baW5dIGlkIFhFVkUgZW5jb2RlYyBpbnN0YW5jZSBp ZGVudGlmaWVyDQorICogQHBhcmFtW2luXSBjdHggdGhlIHN0cnVjdHVyZSBzdG9yZXMgYWxsIHRo ZSBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMg ZW5jb2Rlcg0KKyAqDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNv ZGUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgc2V0X2V4dHJhX2NvbmZpZyhBVkNvZGVj Q29udGV4dCogYXZjdHgsIFhFVkUgaWQsIFhldmVDb250ZXh0ICpjdHgpDQorew0KKyAgICBpbnQg cmV0LCBzaXplLCB2YWx1ZTsNCisNCisgICAgaWYoY3R4LT5oYXNoKSB7DQorICAgICAgICB2YWx1 ZSA9IDE7DQorICAgICAgICBzaXplID0gNDsNCisgICAgICAgIHJldCA9IHhldmVfY29uZmlnKGlk LCBYRVZFX0NGR19TRVRfVVNFX1BJQ19TSUdOQVRVUkUsICZ2YWx1ZSwgJnNpemUpOw0KKyAgICAg ICAgaWYoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiRmFpbGVkIHRvIHNldCBjb25maWcgZm9yIHBpY3R1cmUgc2lnbmF0dXJlXG4i KTsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg cmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnZlcnQgRkZtcGVnIHBpeGVsIGZvcm1hdCAo QVZQaXhlbEZvcm1hdCkgaW50byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlDQorICoNCisg KiBAcGFyYW1baW5dIHB4X2ZtdCBwaXhlbCBmb3JtYXQgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3Jn L2RveHlnZW4vdHJ1bmsvcGl4Zm10XzhoLmh0bWwjYTlhOGUzMzVjZjNiZTQ3MjA0MmJjOWYwY2Y4 MGNkNGM1KQ0KKyAqDQorICogQHJldHVybiBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlIChA c2VlIHhldmUuaCkgb24gc3VjY2VzcywgWEVWRV9DRl9VTktOT1dOIG9uIGZhaWx1cmUNCisgKi8N CitzdGF0aWMgaW50IHhldmVfY29sb3Jfc3BhY2UoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQp DQorew0KKyAgICAvKiBjb2xvciBzcGFjZSBvZiBpbnB1dCBpbWFnZSAqLw0KKyAgICBpbnQgY3Mg PSBYRVZFX0NGX1VOS05PV047DQorDQorICAgIHN3aXRjaCAocGl4X2ZtdCkgew0KKyAgICBjYXNl IEFWX1BJWF9GTVRfWVVWNDIwUDoNCisgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMDsNCisg ICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEwOg0KKyNpZiBBVl9I QVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIw LCAxMCwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMF8xMExFOw0K KyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQ MTI6DQorI2lmIEFWX0hBVkVfQklHRU5ESUFODQorICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhF VkVfQ0ZfWUNCQ1I0MjAsIDEyLCAxKTsNCisjZWxzZQ0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1lD QkNSNDIwXzEyTEU7DQorI2VuZGlmDQorDQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9Q SVhfRk1UX1lVVjQyMlA6DQorICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjI7DQorICAgICAg ICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlAxMDoNCisjaWYgQVZfSEFWRV9C SUdFTkRJQU4NCisgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwgMTAs IDEpOw0KKyNlbHNlDQorICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjJfMTBMRTsNCisjZW5k aWYNCisNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDEyOg0K KyNpZiBBVl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NG X1lDQkNSNDIyLCAxMiwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVW RV9DRl9ZQ0JDUjQyMiwgMTIsIDApOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAg IGNhc2UgQVZfUElYX0ZNVF9HQlJQOg0KKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDEwOg0KKyAg ICBjYXNlIEFWX1BJWF9GTVRfR0JSUDEyOg0KKyAgICAgICAgY3MgPSBYRVZFX0NGX1VOS05PV047 DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6DQorICAgICAg ICBjcyA9IFhFVkVfQ0ZfWUNCQ1I0NDQ7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9Q SVhfRk1UX1lVVjQ0NFAxMDoNCisjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCisgICAgICAgIGNzID0g WEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQ0NCwgMTAsIDEpOw0KKyNlbHNlDQorICAgICAgICBj cyA9IFhFVkVfQ1NfWUNCQ1I0NDRfMTBMRTsNCisjZW5kaWYNCisNCisgICAgICAgIGJyZWFrOw0K KyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDEyOg0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0K KyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDQ0LCAxMiwgMSk7DQorI2Vs c2UNCisgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQ0NCwgMTIsIDApOw0K KyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZODoN CisgICAgICAgIGNzID0gWEVWRV9DRl9ZQ0JDUjQwMDsNCisgICAgICAgIGJyZWFrOw0KKyAgICBj YXNlIEFWX1BJWF9GTVRfR1JBWTEwOg0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAg Y3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDAwLCAxMCwgMSk7DQorI2Vsc2UNCisgICAg ICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQwMF8xMExFOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJl YWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZMTI6DQorI2lmIEFWX0hBVkVfQklHRU5ESUFO DQorICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MDAsIDEyLCAxKTsNCisj ZWxzZQ0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDAwXzEyTEU7DQorI2VuZGlmDQorDQor ICAgICAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGNzID0gWEVWRV9DRl9VTktO T1dOOw0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGNzOw0KK30NCisN CisvKioNCisgKiBAYnJpZWYgU3dpdGNoIGVuY29kZXIgdG8gYnVtcGluZyBtb2RlDQorICoNCisg KiBAcGFyYW0gaWQgWEVWRSBlbmNvZGVjIGluc3RhbmNlIGlkZW50aWZpZXINCisgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3Rh dGljIGludCBzZXR1cF9idW1waW5nKFhFVkUgaWQpDQorew0KKyAgICBpbnQgdmFsLCBzaXplOw0K KyAgICB2YWwgID0gMTsNCisgICAgc2l6ZSA9IHNpemVvZihpbnQpOw0KKyAgICBpZihYRVZFX0ZB SUxFRCh4ZXZlX2NvbmZpZyhpZCwgWEVWRV9DRkdfU0VUX0ZPUkNFX09VVCwgKHZvaWQgKikoJnZh bCksICZzaXplKSkpDQorICAgICAgICByZXR1cm4gLTE7DQorDQorICAgIHJldHVybiAwOw0KK30N CisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRl byBFbmNvZGVyIGNvZGVjDQorICogQ3JlYXRlIGFuIGVuY29kZXIgaW5zdGFuY2UgYW5kIGFsbG9j YXRlIGFsbCB0aGUgbmVlZGVkIHJlc291cmNlcw0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVj IGNvbnRleHQNCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBv biBmYWlsdXJlDQorICovDQorc3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmVfaW5pdChBVkNvZGVj Q29udGV4dCAqYXZjdHgpDQorew0KKyAgICBYZXZlQ29udGV4dCAqeGVjdHggPSBhdmN0eC0+cHJp dl9kYXRhOw0KKyAgICB1bnNpZ25lZCBjaGFyICpic19idWYgPSBOVUxMOw0KKyAgICBpbnQgaSwg dmFsID0gMDsNCisgICAgaW50IHNoaWZ0X2ggPSAwOw0KKyAgICBpbnQgc2hpZnRfdiA9IDA7DQor ICAgIFhFVkVfSU1HQiAqaW1nYiA9IE5VTEw7DQorDQorICAgIFhFVkVfQ0RTQyAqY2RzYyA9ICYo eGVjdHgtPmNkc2MpOw0KKw0KKyAgICBpZihhdmN0eC0+cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lV VjQyMFAgJiYgYXZjdHgtPnBpeF9mbXQgIT0gQVZfUElYX0ZNVF9ZVVY0MjBQMTApIHsNCisgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBwaXhlbCBmb3JtYXQ6ICVz XG4iLCBhdl9nZXRfcGl4X2ZtdF9uYW1lKGF2Y3R4LT5waXhfZm10KSk7DQorICAgICAgICBnb3Rv IEVSUjsNCisgICAgfQ0KKw0KKyAgICAvKiBhbGxvY2F0ZSBiaXRzdHJlYW0gYnVmZmVyICovDQor ICAgIGJzX2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKE1BWF9CU19CVUYpOw0KKyAgICBp Zihic19idWYgPT0gTlVMTCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJDYW5ub3QgYWxsb2NhdGUgYml0c3RyZWFtIGJ1ZmZlclxuIik7DQorICAgICAgICBnb3RvIEVS UjsNCisgICAgfQ0KKw0KKyAgICAvKiByZWFkIGNvbmZpZ3VyYXRpb25zIGFuZCBzZXQgdmFsdWVz IGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkVfQ0RTQykgKi8NCisgICAgdmFsID0gZ2V0X2Nv bmYoYXZjdHgsIGNkc2MpOw0KKyAgICBpZiAodmFsICE9IFhFVkVfT0spIHsNCisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGdldCBjb25maWd1cmF0aW9uXG4iKTsN CisgICAgICAgIGdvdG8gRVJSOw0KKyAgICB9DQorDQorICAgIGlmIChjaGVja19jb25mKGF2Y3R4 LCBjZHNjKSAhPSAwKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIklu dmFsaWQgY29uZmlndXJhdGlvblxuIik7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0K KyAgICAvKiBjcmVhdGUgZW5jb2RlciAqLw0KKyAgICB4ZWN0eC0+aWQgPSB4ZXZlX2NyZWF0ZShj ZHNjLCBOVUxMKTsNCisgICAgaWYoeGVjdHgtPmlkID09IE5VTEwpIHsNCisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGNyZWF0ZSBYRVZFIGVuY29kZXJcbiIpOw0K KyAgICAgICAgZ290byBFUlI7DQorICAgIH0NCisNCisgICAgaWYoc2V0X2V4dHJhX2NvbmZpZyhh dmN0eCwgeGVjdHgtPmlkLCB4ZWN0eCkpIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiQ2Fubm90IHNldCBleHRyYSBjb25maWd1cmF0aW9uXG4iKTsNCisgICAgICAgIGdv dG8gRVJSOw0KKyAgICB9DQorDQorICAgIHhlY3R4LT5iaXRiLmFkZHIgPSBic19idWY7DQorICAg IHhlY3R4LT5iaXRiLmJzaXplID0gTUFYX0JTX0JVRjsNCisNCisgICAgaWYoYXZfcGl4X2ZtdF9n ZXRfY2hyb21hX3N1Yl9zYW1wbGUoYXZjdHgtPnBpeF9mbXQsICZzaGlmdF9oLCAmc2hpZnRfdikp IHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdldCAg Y2hyb21hIHNoaWZ0XG4iKTsNCisgICAgICAgIGdvdG8gRVJSOw0KKyAgICB9DQorDQorICAgIC8v IFlVViBmb3JtYXQgZXhwbGFuYXRpb24NCisgICAgLy8gc2hpZnRfaCA9PSAxICYmIHNoaWZ0X3Yg PT0gMSA6IFlVVjQyMA0KKyAgICAvLyBzaGlmdF9oID09IDEgJiYgc2hpZnRfdiA9PSAwIDogWVVW NDIyDQorICAgIC8vIHNoaWZ0X2ggPT0gMCAmJiBzaGlmdF92ID09IDAgOiBZVVY0NDQNCisgICAg Ly8NCisgICAgeGVjdHgtPndpZHRoX2Nocm9tYSA9IEFWX0NFSUxfUlNISUZUKHhlY3R4LT53aWR0 aF9sdW1hLCBzaGlmdF9oKTsNCisgICAgeGVjdHgtPmhlaWdodF9jaHJvbWEgPSBBVl9DRUlMX1JT SElGVCh4ZWN0eC0+aGVpZ2h0X2x1bWEsIHNoaWZ0X3YpOw0KKw0KKyAgICAvKiBzZXQgZGVmYXVs dCB2YWx1ZXMgZm9yIGlucHV0IGltYWdlIGJ1ZmZlciAqLw0KKyAgICBpbWdiID0gJnhlY3R4LT5p bWdiOw0KKyAgICBpbWdiLT5jcyA9IHhldmVfY29sb3Jfc3BhY2UoYXZjdHgtPnBpeF9mbXQpOw0K KyAgICBpbWdiLT5ucCA9IDM7IC8qIG9ubHkgZm9yIHl1djQyMHAsIHl1djQyMHBsZSAqLw0KKw0K KyAgICBmb3IgKGkgPSAwOyBpIDwgaW1nYi0+bnA7IGkrKykNCisgICAgICAgIGltZ2ItPnhbaV0g PSBpbWdiLT55W2ldID0gMDsNCisNCisgICAgaW1nYi0+d1swXSA9IGltZ2ItPmF3WzBdID0geGVj dHgtPndpZHRoX2x1bWE7DQorICAgIGltZ2ItPndbMV0gPSBpbWdiLT53WzJdID0gaW1nYi0+YXdb MV0gPSBpbWdiLT5hd1syXSA9IHhlY3R4LT53aWR0aF9jaHJvbWE7DQorICAgIGltZ2ItPmhbMF0g PSBpbWdiLT5haFswXSA9IHhlY3R4LT5oZWlnaHRfbHVtYTsNCisgICAgaW1nYi0+aFsxXSA9IGlt Z2ItPmhbMl0gPSBpbWdiLT5haFsxXSA9IGltZ2ItPmFoWzJdID0geGVjdHgtPmhlaWdodF9jaHJv bWE7DQorDQorICAgIHhlY3R4LT5lbmNvZF9mcmFtZXMgPSAwOw0KKyAgICB4ZWN0eC0+Ynl0ZXNf dG90YWwgPSAwOw0KKyAgICB4ZWN0eC0+c3RhdGUgPSBTVEFURV9FTkNPRElORzsNCisgICAgeGVj dHgtPnBhY2tldF9jb3VudCA9IDA7DQorICAgIHhlY3R4LT5iaXRyYXRlID0gMDsNCisNCisgICAg cmV0dXJuIDA7DQorDQorRVJSOg0KKyAgICBpZihic19idWYpDQorICAgICAgICBmcmVlKGJzX2J1 Zik7DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICAqIEVuY29kZSByYXcgZGF0 YSBmcmFtZSBpbnRvIEVWQyBwYWNrZXQNCisgICoNCisgICogQHBhcmFtW2luXSBhdmN0eCBjb2Rl YyBjb250ZXh0DQorICAqIEBwYXJhbVtvdXRdIHBrdCBvdXRwdXQgQVZQYWNrZXQgY29udGFpbmlu ZyBlbmNvZGVkIGRhdGENCisgICogQHBhcmFtW2luXSBmcmFtZSBBVkZyYW1lIGNvbnRhaW5pbmcg dGhlIHJhdyBkYXRhIHRvIGJlIGVuY29kZWQNCisgICogQHBhcmFtW291dF0gZ290X3BhY2tldCBl bmNvZGVyIHNldHMgdG8gMCBvciAxIHRvIGluZGljYXRlIHRoYXQgYQ0KKyAgKiAgICAgICAgICAg ICAgICAgICAgICAgICBub24tZW1wdHkgcGFja2V0IHdhcyByZXR1cm5lZCBpbiBwa3QNCisgICoN CisgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVy ZQ0KKyAgKi8NCitzdGF0aWMgaW50IGxpYnhldmVfZW5jb2RlKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgQVZQYWNrZXQgKnBrdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJh bWUgKmZyYW1lLCBpbnQgKmdvdF9wYWNrZXQpDQorew0KKyAgICBYZXZlQ29udGV4dCAqeGVjdHgg PSBOVUxMOw0KKyAgICBpbnQgIHJldCA9IC0xOw0KKyAgICBpbnQgeGV2ZV9jczsNCisgICAgaWYo YXZjdHggPT0gTlVMTCB8fCBwa3QgPT0gTlVMTCB8fCBnb3RfcGFja2V0ID09IE5VTEwpIHsNCisg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBhcmd1bWVudHNcbiIp Ow0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHhlY3R4ID0gYXZjdHgtPnByaXZf ZGF0YTsNCisgICAgaWYoeGVjdHggPT0gTlVMTCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJJbnZhbGlkIFhFVkUgY29udGV4dFxuIik7DQorICAgICAgICByZXR1cm4g LTE7DQorICAgIH0NCisgICAgaWYoeGVjdHgtPnN0YXRlID09IFNUQVRFX1NLSVBQSU5HICYmIGZy YW1lICkgew0KKyAgICAgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfRU5DT0RJTkc7IC8vIEVudGVy aW5nIGVuY29kaW5nIHByb2Nlc3MNCisgICAgfSBlbHNlIGlmKHhlY3R4LT5zdGF0ZSA9PSBTVEFU RV9FTkNPRElORyAmJiBmcmFtZSA9PSBOVUxMKSB7DQorICAgICAgICBpZiAoc2V0dXBfYnVtcGlu Zyh4ZWN0eC0+aWQpID09IDApDQorICAgICAgICAgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfQlVN UElORzsgIC8vIEVudGVyaW5nIGJ1bXBpbmcgcHJvY2Vzcw0KKyAgICAgICAgZWxzZSB7DQorICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gc2V0dXAgYnVt cGluZ1xuIik7DQorICAgICAgICAgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfU0tJUFBJTkc7DQor ICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYoeGVjdHgtPnN0YXRlID09IFNUQVRFX0VOQ09E SU5HKSB7DQorICAgICAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKnBpeGVsX2ZtdF9kZXNj ID0gYXZfcGl4X2ZtdF9kZXNjX2dldCAoZnJhbWUtPmZvcm1hdCk7DQorICAgICAgICBpZighcGl4 ZWxfZm10X2Rlc2MpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkludmFsaWQgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0b3IgZm9yIHBpeGVsIGZvcm1hdDogJXNcbiIs IGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnBpeF9mbXQpKTsNCisgICAgICAgICAgICByZXR1 cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICB4ZXZlX2NzID0geGV2ZV9jb2xvcl9zcGFj ZShhdmN0eC0+cGl4X2ZtdCk7DQorICAgICAgICBpZih4ZXZlX2NzICE9IFhFVkVfQ1NfWUNCQ1I0 MjAgJiYgeGV2ZV9jcyAhPSBYRVZFX0NTX1lDQkNSNDIwXzEwTEUpIHsNCisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwg YXZfZ2V0X3BpeF9mbXRfbmFtZShhdmN0eC0+cGl4X2ZtdCkpOw0KKyAgICAgICAgICAgIHJldHVy biAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgaTsNCisg ICAgICAgICAgICBYRVZFX0lNR0IgKmltZ2IgPSBOVUxMOw0KKw0KKyAgICAgICAgICAgIGltZ2Ig PSAmeGVjdHgtPmltZ2I7DQorDQorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGltZ2ItPm5w OyBpKyspIHsNCisgICAgICAgICAgICAgICAgaW1nYi0+YVtpXSA9IGZyYW1lLT5kYXRhW2ldOw0K KyAgICAgICAgICAgICAgICBpbWdiLT5zW2ldID0gZnJhbWUtPmxpbmVzaXplW2ldOw0KKyAgICAg ICAgICAgIH0NCisNCisgICAgICAgICAgICBpZih4ZWN0eC0+aWQgPT0gTlVMTCkgew0KKyAgICAg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgWEVWRSBlbmNv ZGVyXG4iKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgIH0NCisN CisgICAgICAgICAgICBpbWdiLT50c1swXSA9IGZyYW1lLT5wdHM7DQorICAgICAgICAgICAgaW1n Yi0+dHNbMV0gPSAwOw0KKyAgICAgICAgICAgIGltZ2ItPnRzWzJdID0gMDsNCisgICAgICAgICAg ICBpbWdiLT50c1szXSA9IDA7DQorDQorICAgICAgICAgICAgLyogcHVzaCBpbWFnZSB0byBlbmNv ZGVyICovDQorICAgICAgICAgICAgcmV0ID0geGV2ZV9wdXNoKHhlY3R4LT5pZCwgaW1nYik7DQor ICAgICAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgInhldmVfcHVzaCgpIGZhaWxlZFxuIik7DQorICAgICAg ICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0N CisgICAgaWYoeGVjdHgtPnN0YXRlID09IFNUQVRFX0VOQ09ESU5HIHx8IHhlY3R4LT5zdGF0ZSA9 PSBTVEFURV9CVU1QSU5HKSB7DQorDQorICAgICAgICAvKiBlbmNvZGluZyAqLw0KKyAgICAgICAg cmV0ID0geGV2ZV9lbmNvZGUoeGVjdHgtPmlkLCAmKHhlY3R4LT5iaXRiKSwgJih4ZWN0eC0+c3Rh dCkpOw0KKyAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAieGV2ZV9lbmNvZGUoKSBmYWlsZWRcbiIpOw0KKyAgICAg ICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHhlY3R4LT5lbmNvZF9m cmFtZXMrKzsNCisNCisgICAgICAgIC8qIHN0b3JlIGJpdHN0cmVhbSAqLw0KKyAgICAgICAgaWYg KHJldCA9PSBYRVZFX09LX09VVF9OT1RfQVZBSUxBQkxFKSB7IC8vIFJldHVybiBPSyBidXQgcGlj dHVyZSBpcyBub3QgYXZhaWxhYmxlIHlldA0KKyAgICAgICAgICAgICpnb3RfcGFja2V0ID0gMDsN CisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSBpZihyZXQgPT0gWEVWRV9P Sykgew0KKyAgICAgICAgICAgIGludCBhdl9waWNfdHlwZTsNCisNCisgICAgICAgICAgICBpZih4 ZWN0eC0+c3RhdC53cml0ZSA+IDApIHsNCisgICAgICAgICAgICAgICAgeGVjdHgtPmJ5dGVzX3Rv dGFsICs9IHhlY3R4LT5zdGF0LndyaXRlOw0KKw0KKyAgICAgICAgICAgICAgICByZXQgPSBhdl9n cm93X3BhY2tldChwa3QsIHhlY3R4LT5zdGF0LndyaXRlKTsNCisgICAgICAgICAgICAgICAgaWYg KHJldCA8IDApIHsNCisgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBBVlBhY2tldCBkYXRhXG4iKTsNCisgICAg ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAg ICAgICAgICAgICAgbWVtY3B5KHBrdC0+ZGF0YSwgeGVjdHgtPmJpdGIuYWRkciwgeGVjdHgtPnN0 YXQud3JpdGUpOw0KKw0KKyAgICAgICAgICAgICAgICBwa3QtPnB0cyA9IHhlY3R4LT5iaXRiLnRz WzBdOw0KKyAgICAgICAgICAgICAgICBwa3QtPmR0cyA9IHhlY3R4LT5iaXRiLnRzWzFdOw0KKw0K KyAgICAgICAgICAgICAgICB4ZWN0eC0+Yml0cmF0ZSArPSAoeGVjdHgtPnN0YXQud3JpdGUgLSB4 ZWN0eC0+c3RhdC5zZWlfc2l6ZSk7DQorDQorICAgICAgICAgICAgICAgIHN3aXRjaCh4ZWN0eC0+ c3RhdC5zdHlwZSkgew0KKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfSToNCisgICAgICAg ICAgICAgICAgICAgIGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7DQorICAgICAgICAg ICAgICAgICAgICBwa3QtPmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsNCisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfUDoNCisgICAgICAg ICAgICAgICAgICAgIGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX1A7DQorICAgICAgICAg ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX0I6DQorICAg ICAgICAgICAgICAgICAgICBhdl9waWNfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9COw0KKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9VTktO T1dOOg0KKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJV bmtub3duIHNsaWNlIHR5cGVcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0K KyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGZmX3NpZGVfZGF0YV9zZXRf ZW5jb2Rlcl9zdGF0cyhwa3QsIHhlY3R4LT5zdGF0LnFwICogRkZfUVAyTEFNQkRBLCBOVUxMLCAw LCBhdl9waWNfdHlwZSk7DQorDQorICAgICAgICAgICAgICAgIHhlY3R4LT5iaXRyYXRlICs9ICh4 ZWN0eC0+c3RhdC53cml0ZSAtIHhlY3R4LT5zdGF0LnNlaV9zaXplKTsNCisNCisgICAgICAgICAg ICAgICAgKmdvdF9wYWNrZXQgPSAxOw0KKyAgICAgICAgICAgICAgICB4ZWN0eC0+cGFja2V0X2Nv dW50Kys7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gWEVWRV9P S19OT19NT1JFX0ZSTSkgew0KKyAgICAgICAgICAgIC8vIFJldHVybiBPSyBidXQgbm8gbW9yZSBm cmFtZXMNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHJldHVybiB2YWx1ZTog JWRcbiIsIHJldCk7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKyAgICB9 IGVsc2Ugew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVZGVmaW5lZCBl bmNvZGVyIHN0YXRlXG4iLCB4ZWN0eC0+c3RhdGUpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAg ICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBEZXN0cm95IHRoZSBlbmNv ZGVyIGFuZCByZWxlYXNlIGFsbCB0aGUgYWxsb2NhdGVkIHJlc291cmNlcw0KKyAqDQorICogQHBh cmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRp dmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGF2X2NvbGQgaW50IGxpYnhl dmVfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KK3sNCisgICAgWGV2ZUNvbnRleHQgKnhl Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCisNCisgICAgeGV2ZV9kZWxldGUoeGVjdHgtPmlkKTsN CisNCisgICAgaWYoeGVjdHgtPmJpdGIuYWRkcikNCisgICAgICAgIGZyZWUoeGVjdHgtPmJpdGIu YWRkcik7IC8qIHJlbGVhc2UgYml0c3RyZWFtIGJ1ZmZlciAqLw0KKw0KKyAgICByZXR1cm4gMDsN Cit9DQorDQorI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoWGV2ZUNvbnRleHQsIHgpDQorI2Rl ZmluZSBWRSBBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BB UkFNDQorDQorLy8gRXhhbXBsZSBvZiB1c2luZzogLi9mZm1wZWcgLXhldmUtcGFyYW1zICJtPTI6 cT0xNyINCisvLyBDb25zaWRlciB1c2luZyBmb2xsb3dpbmcgb3B0aW9ucyAoLi9mZm1wZWcgLS1o ZWxwIGVuY29kZXI9bGlieGV2ZSkNCisvLw0KK3N0YXRpYyBjb25zdCBBVk9wdGlvbiB4ZXZlX29w dGlvbnNbXSA9IHsNCisgICAgeyAicHJlc2V0IiwgIkVuY29kaW5nIHByZXNldCBmb3Igc2V0dGlu ZyBlbmNvZGluZyBzcGVlZCBbZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvXSIsIE9GRlNFVChv cF9wcmVzZXQpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsgLnN0ciA9ICJtZWRpdW0iIH0sIDAsIDAs IFZFIH0sDQorICAgIHsgInR1bmUiLCAiVHVuZWluZyBwYXJhbWV0ZXIgZm9yIHNwZWNpYWwgcHVy cG9zZSBvcGVyYXRpb24gW3BzbnIsIHplcm9sYXRlbmN5XSIsIE9GRlNFVChvcF90dW5lKSwgQVZf T1BUX1RZUEVfU1RSSU5HLCB7IDAgfSwgMCwgMCwgVkV9LA0KKyAgICB7ICJxcCIsICJxdWFudGl6 YXRpb24gcGFyYW1ldGVyIHFwIDwwLi41MT4gW2RlZmF1bHQ6IDMyXSIsIE9GRlNFVChvcF9xcCks IEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMzIgfSwgMCwgNTEsIFZFIH0sDQorICAgIHsgImNy ZiIsICJjb25zdGFudCByYXRlIGZhY3RvciA8LTEuLjUxPiBbZGVmYXVsdDogMzJdIiwgT0ZGU0VU KG9wX2NyZiksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gLTEgfSwgLTEsIDUxLCBWRSB9LA0K KyAgICB7ICJ4ZXZlLXBhcmFtcyIsICJvdmVycmlkZSB0aGUgeGV2ZSBjb25maWd1cmF0aW9uIHVz aW5nIGEgOiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycyIsIE9GRlNFVCh4 ZXZlX3BhcmFtcyksIEFWX09QVF9UWVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZFIH0sDQorICAg IHsgTlVMTCB9DQorfTsNCisNCitzdGF0aWMgY29uc3QgQVZDbGFzcyB4ZXZlX2NsYXNzID0gew0K KyAgICAuY2xhc3NfbmFtZSA9ICJsaWJ4ZXZlIiwNCisgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZh dWx0X2l0ZW1fbmFtZSwNCisgICAgLm9wdGlvbiAgICAgPSB4ZXZlX29wdGlvbnMsDQorICAgIC52 ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULA0KK307DQorDQorLyoqDQorICogIGxp YmF2Y29kZWMgZ2VuZXJpYyBnbG9iYWwgb3B0aW9ucywgd2hpY2ggY2FuIGJlIHNldCBvbiBhbGwg dGhlIGVuY29kZXJzIGFuZCBkZWNvZGVycw0KKyAqICBAc2VlIGh0dHBzOi8vd3d3LmZmbXBlZy5v cmcvZmZtcGVnLWNvZGVjcy5odG1sI0NvZGVjLU9wdGlvbnMNCisgKi8NCitzdGF0aWMgY29uc3Qg RkZDb2RlY0RlZmF1bHQgeGV2ZV9kZWZhdWx0c1tdID0gew0KKyAgICB7ICJiIiwgIjAiIH0sICAg ICAgIC8vIGJpdHJhdGUNCisgICAgeyAiZyIsICIwIiB9LCAgICAgICAvLyBnb3Bfc2l6ZSAoa2V5 LWZyYW1lIGludGVydmFsIDA6IG9ubHkgb25lIEktZnJhbWUgYXQgdGhlIGZpcnN0IHRpbWU7IDE6 IGV2ZXJ5IGZyYW1lIGlzIGNvZGVkIGluIEktZnJhbWUpDQorICAgIHsgImJmIiwgIjE1In0sICAg ICAgLy8gYmZyYW1lcyAoMDogbm8gQi1mcmFtZXMpDQorICAgIHsgInByb2ZpbGUiLCAiMCJ9LCAg Ly8gZW5jb2RlciBjb2RlYyBwcm9maWxlICgwOiBiYXNlbGllOyAxOiBtYWluKQ0KKyAgICB7ICJ0 aHJlYWRzIiwgIjAifSwgIC8vIG51bWJlciBvZiB0aHJlYWRzIHRvIGJlIHVzZWQgKDA6IGF1dG9t YXRpY2FsbHkgc2VsZWN0IHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBzZXQpDQorICAgIHsgTlVM TCB9LA0KK307DQorDQorRkZDb2RlYyBmZl9saWJ4ZXZlX2VuY29kZXIgPSB7DQorICAgIC5wLm5h bWUgICAgICAgICAgICAgPSAibGlieGV2ZSIsDQorICAgIC5wLmxvbmdfbmFtZSAgICAgICAgPSBO VUxMX0lGX0NPTkZJR19TTUFMTCgibGlieGV2ZSBNUEVHLTUgRVZDIiksDQorICAgIC5wLnR5cGUg ICAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sDQorICAgIC5wLmlkICAgICAgICAgICAg ICAgPSBBVl9DT0RFQ19JRF9FVkMsDQorICAgIC5pbml0ICAgICAgICAgICAgICAgPSBsaWJ4ZXZl X2luaXQsDQorICAgIEZGX0NPREVDX0VOQ09ERV9DQihsaWJ4ZXZlX2VuY29kZSksDQorICAgIC5j bG9zZSAgICAgICAgICAgICAgPSBsaWJ4ZXZlX2Nsb3NlLA0KKyAgICAucHJpdl9kYXRhX3NpemUg ICAgID0gc2l6ZW9mKFhldmVDb250ZXh0KSwNCisgICAgLnAucHJpdl9jbGFzcyAgICAgICA9ICZ4 ZXZlX2NsYXNzLA0KKyAgICAuZGVmYXVsdHMgICAgICAgICAgID0geGV2ZV9kZWZhdWx0cywNCisg ICAgLmNhcHNfaW50ZXJuYWwgICAgICA9IEFWX0NPREVDX0NBUF9ERUxBWSB8IEFWX0NPREVDX0NB UF9BVVRPX1RIUkVBRFMgfA0KKyAgICBBVl9DT0RFQ19DQVBfRU5DT0RFUl9SRU9SREVSRURfT1BB UVVFLA0KKyAgICAucC53cmFwcGVyX25hbWUgICAgID0gImxpYnhldmUiLA0KK307DQpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9wYXJzZXJzLmMgYi9saWJhdmNvZGVjL3BhcnNlcnMuYw0KaW5kZXgg NmI0MGMxOGQ4MC4uMjk1ZmEzM2Y1MiAxMDA2NDQNCi0tLSBhL2xpYmF2Y29kZWMvcGFyc2Vycy5j DQorKysgYi9saWJhdmNvZGVjL3BhcnNlcnMuYw0KQEAgLTczLDYgKzczLDcgQEAgZXh0ZXJuIGNv bnN0IEFWQ29kZWNQYXJzZXIgZmZfdnA5X3BhcnNlcjsNCiBleHRlcm4gY29uc3QgQVZDb2RlY1Bh cnNlciBmZl93ZWJwX3BhcnNlcjsNCiBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl94Ym1f cGFyc2VyOw0KIGV4dGVybiBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX3htYV9wYXJzZXI7DQorZXh0 ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlcjsNCiANCiAjaW5jbHVkZSAibGli YXZjb2RlYy9wYXJzZXJfbGlzdC5jIg0KIA0KLS0gDQoyLjE3LjENCg0KDQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9s aXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBv ciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5z dWJzY3JpYmUiLgo=