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 2921342E9D for ; Thu, 12 May 2022 06:07:14 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DA83268B47C; Thu, 12 May 2022 09:07:10 +0300 (EEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B5F7E68B45D for ; Thu, 12 May 2022 09:07:04 +0300 (EEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20220512060704euoutp01c158db7d5f48e6b9546adc40168f8e60~uRn7vlie01171411714euoutp01t for ; Thu, 12 May 2022 06:07:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20220512060704euoutp01c158db7d5f48e6b9546adc40168f8e60~uRn7vlie01171411714euoutp01t DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652335624; bh=pF5NDlIj9PNQWElmwHIwadC6w5+PExKwqWD/TlyneA0=; h=From:To:In-Reply-To:Subject:Date:References:From; b=EPZvlh6tHlW3tb98eRONCzI6XO0pe0ADJkaeOLbgvYVcIVtherz90fIWPy5nPgWRY 7YDZ5ZmoFq1Ep8j1jvfVEeMYgWzeRvuaNQJRo6q28j7mHQ3qm4Op/r1mcRoP91aJlh PZcfgvq96aXPtoWNypFI0jmqV/D/Hir5yfpuM/oY= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20220512060704eucas1p166a164bb2d639f1fd05947e4d607f035~uRn7k9EKB0889608896eucas1p1U for ; Thu, 12 May 2022 06:07:04 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 92.3F.10260.704AC726; Thu, 12 May 2022 07:07:04 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20220512060703eucas1p22dcb39d00befd61d09d08917363a9ad0~uRn7PTWnl1709517095eucas1p2D for ; Thu, 12 May 2022 06:07:03 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220512060703eusmtrp2d5aad60f3bc51fe010aec1d9c4ac039e~uRn7OfhNi2638926389eusmtrp21 for ; Thu, 12 May 2022 06:07:03 +0000 (GMT) X-AuditID: cbfec7f5-bddff70000002814-35-627ca40740c2 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id FD.29.09522.704AC726; Thu, 12 May 2022 07:07:03 +0100 (BST) Received: from AMDN3260 (unknown [106.210.132.171]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220512060703eusmtip2cbcc3ddb6d5edc267c483d2f8c7c347b~uRn60neEf0863308633eusmtip2z for ; Thu, 12 May 2022 06:07:03 +0000 (GMT) From: =?UTF-8?Q?Dawid_Kozinski/Robot_SDK_=28PLT=29_/?= =?UTF-8?Q?SRPOL/Staff_Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= To: "'FFmpeg development discussions and patches'" In-Reply-To: Date: Thu, 12 May 2022 08:07:02 +0200 Message-ID: <020a01d865c6$800c0130$80240390$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Content-Language: pl Thread-Index: AQJtVRiY12yP+UBaNusv0RKMFnfq0gKSg7DpAunQoTCrwjPqIA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrFIsWRmVeSWpSXmKPExsWy7djPc7ocS2qSDBYcZLL49ukMswOjx59F m1kCGKO4bFJSczLLUov07RK4Ms7elitY+4+z4vz8GewNjLu6OLsYOTkkBEwkttzvYO9i5OIQ EljBKHG8bTkLhDOJSeLepM9QmYlMEhNmTmSDadm9bAIzRGI5o8SvqwdZIZw2JokZX3+AZdgE ZjJKvD+ykRGkRUTAR6J7/XpWEJtTwFaib9JcoLkcHMICKRLdT8NAwiwCqhK3d39mAbF5BSwl VnSuZoewBSVOznwCFmcW0JZYtvA1M8QVChI/ny5jhYiLSNx41AK1ykmibfk6sB8kBCZySHw6 tpgVosFF4uL5P+wQtrDEq+NboGwZif875zOB3CMhUCxxqN8BwqyROPQjHaLCWuJt43FGkDCz gKbE+l36EGFHiQfPDzFCVPNJ3HgrCHEMn8SkbdOZIcK8Eh1tQhCmikRfpxhEo5TE02VzmCcw Ks1C8uEsJB/OQvLVLIS1CxhZVjGKp5YW56anFhvnpZbrFSfmFpfmpesl5+duYgQmh9P/jn/d wbji1Ue9Q4xMHIyHGCU4mJVEeGuaa5KEeFMSK6tSi/Lji0pzUosPMUpzsCiJ8yZnbkgUEkhP LEnNTk0tSC2CyTJxcEo1MM3I//V8enaW84w9qUEOoU6FMpdyij09jkdJHDcvFNtaXXqic4nH 0VvbmLIvdGRr9/xr17siVVChYTEla8ZPjVl7Dot/KGyQeeCWqcQeKHjp3u5523Zcvvl0C8PG ovsPT0dtY0sV52K4snzmOi2RwOVZ2xNk814xN8ueaknTWn5KynJNzvE9Yq7/09UPbCp83H6U 33b5m1wZw8nLq6VXX30d/+JtzjK+f/JnXnJctz5T4l7ONflD0nKdolOBSfavpp4R1t5y39P4 bTrLDbN1jw00VgS7BjCcrfix/U3qTa8/LS6Op0XXKjWULd37Y09ex9zvkzOy0122mTcVLf3y ebHNG4uqAi070UKekM3vypVYijMSDbWYi4oTAbDaKzl9AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpikeLIzCtJLcpLzFFi42I5/e/4PV32JTVJBhP61S2+fTrD7MDo8WfR ZpYAxig9m6L80pJUhYz84hJbpWhDCyM9Q0sLPSMTSz1DY/NYKyNTJX07m5TUnMyy1CJ9uwS9 jF/vHzEWLPjBVnHu1yTmBsa731m6GDk5JARMJHYvm8AMYgsJLGWUeHyNHyIuJbF06SJGCFtY 4s+1LrYuRi6gmhYmidX/17KCOGwC0xkl/i//xARSJSLgI9G9fj0rRNUeRom2U8fZQBKcArYS fZPmsoPYwgJJEp+XbAJrYBFQlbi9+zPYGbwClhIrOlezQ9iCEidnPgGLMwtoS/Q+bGWEsZct fM0McZKCxM+ny1gh4iISNx61MEIc4STRtnwdywRGoVlIRs1CMmoWklGzkLQvYGRZxSiSWlqc m55bbKhXnJhbXJqXrpecn7uJERgZ24793LyDcd6rj3qHGJk4GA8xSnAwK4nw1jTXJAnxpiRW VqUW5ccXleakFh9iNAX6bSKzlGhyPjA280riDc0MTA1NzCwNTC3NjJXEeT0LOhKFBNITS1Kz U1MLUotg+pg4OKUamGZUyqv+dI5zn1CxapnL/2zdR6/ERA9fLZ1vr36k1kVb8IDhNxuT/3r/ fIs2fFu1QOjrIaMl3LOMuObfMDBMN/22+ZBV+R92C14T0TD/rjWFu5ve/tHz/G/eNL/mea+5 xw/rUE+7n4zntz2rO9vetN5bvn29hE4yu0ZjRWu1l0QYd4zuVo0Jp07k6e2cbPuIzfCx3eqb +6+XCBY3Vm5fLc8md+73KyPTOQUiiXK7KkUPOgv+rj1zdOf09d9f35cwqfwXW9VjoHfjTe7E WT4PnD16ch0nCy76mW0+Y2YQV9AbnkTTrTXy7FqPzIROZ+wV+3ZCIqdp9g/9tuTSWI8b0uUX Ml9wCDKeTpi8LP2TEktxRqKhFnNRcSIAhZCBnRUDAAA= X-CMS-MailID: 20220512060703eucas1p22dcb39d00befd61d09d08917363a9ad0 X-Msg-Generator: CA X-RootMTR: 20220404122922eucas1p1013831b43a516e8460cfe56737a38884 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220404122922eucas1p1013831b43a516e8460cfe56737a38884 References: <006701d8481f$9ccdf900$d669eb00$@samsung.com> Subject: Re: [FFmpeg-devel] [PATCH] 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: VGhhbmsgeW91IGZvciB5b3VyIHJldmlldy4gQWxsIHlvdXIgc3VnZ2VzdGlvbnMgaGF2ZSBiZWVu IHRha2VuIGludG8gYWNjb3VudCBhbmQgbmV3IHBhdGNoZXMgaGF2ZSBqdXN0IGJlZW4gcHV0IG9u IHRoZSBtYWlsaW5nIGxpc3QuCgotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQpGcm9tOiBmZm1w ZWctZGV2ZWwgPGZmbXBlZy1kZXZlbC1ib3VuY2VzQGZmbXBlZy5vcmc+IE9uIEJlaGFsZiBPZiBK YW1lcyBBbG1lcgpTZW50OiBUdWVzZGF5LCBBcHJpbCA1LCAyMDIyIDg6NTMgUE0KVG86IGZmbXBl Zy1kZXZlbEBmZm1wZWcub3JnClN1YmplY3Q6IFJlOiBbRkZtcGVnLWRldmVsXSBbUEFUQ0hdIFBy b3ZpZGVkIHN1cHBvcnQgZm9yIE1QRUctNSBFVkMgKEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIGNv ZGVjCgpPbiA0LzQvMjAyMiA5OjI5IEFNLCBEYXdpZCBLb3ppbnNraSB3cm90ZToKPiBkaWZmIC0t Z2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCj4gaW5kZXggNWEzMmNmMGQ1Yy4uMjFlYmMxMWZm NCAxMDA2NDQKPiAtLS0gYS9DaGFuZ2Vsb2cKPiArKysgYi9DaGFuZ2Vsb2cKPiBAQCAtMTA2LDcg KzEwNiw4IEBAIHZlcnNpb24gNS4wOgo+ICAgLSBWaWRlb1Rvb2xib3ggUHJvUmVzIGVuY29kZXIK PiAgIC0gYW5sbWYgYXVkaW8gZmlsdGVyCj4gICAtIElNRiBkZW11eGVyIChleHBlcmltZW50YWwp Cj4gLQo+ICstIGVYdHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIEVuY29kZXIgKFhFVkUpCj4gKy0g ZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlkZW8gRGVjb2RlciAoWEVWRCkKPiAgIAo+ICAgdmVyc2lv biA0LjQ6Cj4gICAtIEF1ZGlvVG9vbGJveCBvdXRwdXQgZGV2aWNlCj4gZGlmZiAtLWdpdCBhL2Nv bmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IDdhNjJmMGMyNDguLjc0OTFkM2FmNmIgMTAwNzU1 Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTI4OSw2ICsyODksOCBA QCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gICAgIC0tZW5hYmxlLWxpYndlYnAgICAgICAg ICBlbmFibGUgV2ViUCBlbmNvZGluZyB2aWEgbGlid2VicCBbbm9dCj4gICAgIC0tZW5hYmxlLWxp YngyNjQgICAgICAgICBlbmFibGUgSC4yNjQgZW5jb2RpbmcgdmlhIHgyNjQgW25vXQo+ICAgICAt LWVuYWJsZS1saWJ4MjY1ICAgICAgICAgZW5hYmxlIEhFVkMgZW5jb2RpbmcgdmlhIHgyNjUgW25v XQo+ICsgIC0tZW5hYmxlLWxpYnhldmUgICAgICAgICBlbmFibGUgWEVWRSBlbmNvZGluZyB2aWEg eGV2ZSBbbm9dCj4gKyAgLS1lbmFibGUtbGlieGV2ZCAgICAgICAgIGVuYWJsZSBYRVZEIGRlY29k aW5nIHZpYSB4ZXZkIFtub10KPiAgICAgLS1lbmFibGUtbGlieGF2cyAgICAgICAgIGVuYWJsZSBB VlMgZW5jb2RpbmcgdmlhIHhhdnMgW25vXQo+ICAgICAtLWVuYWJsZS1saWJ4YXZzMiAgICAgICAg ZW5hYmxlIEFWUzIgZW5jb2RpbmcgdmlhIHhhdnMyIFtub10KPiAgICAgLS1lbmFibGUtbGlieGNi ICAgICAgICAgIGVuYWJsZSBYMTEgZ3JhYmJpbmcgdXNpbmcgWENCIFthdXRvZGV0ZWN0XQo+IEBA IC0xODgwLDYgKzE4ODIsOCBAQCBFWFRFUk5BTF9MSUJSQVJZX0xJU1Q9Igo+ICAgICAgIG9wZW5z c2wKPiAgICAgICBwb2NrZXRzcGhpbngKPiAgICAgICB2YXBvdXJzeW50aAo+ICsgICAgbGlieGV2 ZQo+ICsgICAgbGlieGV2ZAo+ICAgIgo+ICAgCj4gICBIV0FDQ0VMX0FVVE9ERVRFQ1RfTElCUkFS WV9MSVNUPSIKPiBAQCAtMjQ1Myw2ICsyNDU3LDcgQEAgQ09ORklHX0VYVFJBPSIKPiAgICAgICBo MjY0cHJlZAo+ICAgICAgIGgyNjRxcGVsCj4gICAgICAgaGV2Y3BhcnNlCj4gKyAgICBldmNwYXJz ZQoKVGhpcyBpcyB1bnVzZWQsIHNvIHJlbW92ZSBpdCBmcm9tIGhlcmUgYW5kIGJlbG93LgoKSXQg aGFzIGJlZW4gRklYRUQKCj4gICAgICAgaHBlbGRzcAo+ICAgICAgIGh1ZmZtYW4KPiAgICAgICBo dWZmeXV2ZHNwCj4gQEAgLTMyNTIsNiArMzI1Nyw3IEBAIG1wZWdhdWRpb19wYXJzZXJfc2VsZWN0 PSJtcGVnYXVkaW9oZWFkZXIiCj4gICBtcGVndmlkZW9fcGFyc2VyX3NlbGVjdD0ibXBlZ3ZpZGVv Igo+ICAgbXBlZzR2aWRlb19wYXJzZXJfc2VsZWN0PSJoMjYzZHNwIG1wZWd2aWRlbyBxcGVsZHNw Igo+ICAgdmMxX3BhcnNlcl9zZWxlY3Q9InZjMWRzcCIKPiArZXZjX3BhcnNlcl9zZWxlY3Q9ImV2 Y3BhcnNlIgo+ICAgCj4gICAjIGJpdHN0cmVhbV9maWx0ZXJzCj4gICBhYWNfYWR0c3RvYXNjX2Jz Zl9zZWxlY3Q9ImFkdHNfaGVhZGVyIG1wZWc0YXVkaW8iCj4gQEAgLTMzNzcsNiArMzM4Myw4IEBA IGxpYngyNjRfZW5jb2Rlcl9zZWxlY3Q9ImF0c2NfYTUzIgo+ICAgbGlieDI2NHJnYl9lbmNvZGVy X2RlcHM9ImxpYngyNjQiCj4gICBsaWJ4MjY0cmdiX2VuY29kZXJfc2VsZWN0PSJsaWJ4MjY0X2Vu Y29kZXIiCj4gICBsaWJ4MjY1X2VuY29kZXJfZGVwcz0ibGlieDI2NSIKPiArbGlieGV2ZV9lbmNv ZGVyX2RlcHM9ImxpYnhldmUiCj4gK2xpYnhldmRfZGVjb2Rlcl9kZXBzPSJsaWJ4ZXZkIgo+ICAg bGlieGF2c19lbmNvZGVyX2RlcHM9ImxpYnhhdnMiCj4gICBsaWJ4YXZzMl9lbmNvZGVyX2RlcHM9 ImxpYnhhdnMyIgo+ICAgbGlieHZpZF9lbmNvZGVyX2RlcHM9ImxpYnh2aWQiCj4gQEAgLTY2NTks NiArNjY2Nyw4IEBAIGVuYWJsZWQgbGlieDI2NCAgICAgICAgICAgJiYgeyBjaGVja19wa2dfY29u ZmlnIGxpYngyNjQgeDI2NCAic3RkaW50LmggeDI2NC5oIiB4Cj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoZWNrX2NwcF9jb25kaXRpb24gbGlieDI2MiB4MjY0LmggIlgyNjRfTVBF RzIiCj4gICBlbmFibGVkIGxpYngyNjUgICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBs aWJ4MjY1IHgyNjUgeDI2NS5oIHgyNjVfYXBpX2dldCAmJgo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXF1aXJlX2NwcF9jb25kaXRpb24gbGlieDI2NSB4MjY1LmggIlgyNjVfQlVJ TEQgPj0gNzAiCj4gK2VuYWJsZWQgbGlieGV2ZSAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29u ZmlnIGxpYnhldmUgInhldmUgPj0gMS4wLjAiICJ4ZXZlLmgiIHhldmVfZW5jb2RlCj4gK2VuYWJs ZWQgbGlieGV2ZCAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnhldmQgInhldmQg Pj0gMS4wLjAiICJ4ZXZkLmgiIHhldmRfZGVjb2RlCj4gICBlbmFibGVkIGxpYnhhdnMgICAgICAg ICAgICYmIHJlcXVpcmUgbGlieGF2cyAic3RkaW50LmggeGF2cy5oIiB4YXZzX2VuY29kZXJfZW5j b2RlICItbHhhdnMgJHB0aHJlYWRzX2V4dHJhbGlicyAkbGlibV9leHRyYWxpYnMiCj4gICBlbmFi bGVkIGxpYnhhdnMyICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4YXZzMiAieGF2 czIgPj0gMS4zLjAiICJzdGRpbnQuaCB4YXZzMi5oIiB4YXZzMl9hcGlfZ2V0Cj4gICBlbmFibGVk IGxpYnh2aWQgICAgICAgICAgICYmIHJlcXVpcmUgbGlieHZpZCB4dmlkLmggeHZpZF9nbG9iYWwg LWx4dmlkY29yZQoKWy4uLl0KCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvZXZjX3BhcnNlci5j IGIvbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAuLmY2OGM0Y2MzYTAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2Rl Yy9ldmNfcGFyc2VyLmMKPiBAQCAtMCwwICsxLDQ1MiBAQAo+ICsvKgo+ICsgKiBFVkMgQVZDIGZv cm1hdCBwYXJzZXIKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIERhd2lkIEtvemluc2tp IDxkLmtvemluc2tpQHNhbXN1bmcuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4g KyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4g KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvY29tbW9uLmgiCj4gKwo+ICsjaW5jbHVkZSAiZ29sb21iLmgiCj4gKyNpbmNs dWRlICJwYXJzZXIuaCIKPiArI2luY2x1ZGUgInhldmQuaCIKCkEgcGFyc2VyIG11c3Qgbm90IGRl cGVuZCBvbiBleHRlcm5hbCBsaWJyYXJpZXMgb3IgaGVhZGVycy4KCkl0IGhhcyBiZWVuIEZJWEVE LiBJIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBYRVZEIGxpYnJhcnkuCgo+ICsjaW5jbHVkZSA8c3Rk aW50Lmg+Cj4gKwo+ICsjZGVmaW5lIEVWQ19OQUxfSEVBREVSX1NJWkUgICAyIC8qIGJ5dGUgKi8K PiArI2RlZmluZSBNQVhfU1BTX0NOVCAgMTYgLyogZGVmaW5lZCB2YWx1ZSBpbiBFVkMgc3RhbmRh cmQgKi8KPiArCj4gK3R5cGVkZWYgc3RydWN0IF9FVkNQYXJzZXJTUFMgewo+ICsgICAgaW50IHNw c19pZDsKPiArICAgIGludCBwcm9maWxlX2lkYzsKPiArICAgIGludCBsZXZlbF9pZGM7Cj4gKyAg ICBpbnQgY2hyb21hX2Zvcm1hdF9pZGM7Cj4gKyAgICBpbnQgcGljX3dpZHRoX2luX2x1bWFfc2Ft cGxlczsKPiArICAgIGludCBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlczsKPiArICAgIGludCBi aXRfZGVwdGhfbHVtYTsKPiArICAgIGludCBiaXRfZGVwdGhfY2hyb21hOwo+ICsKPiArICAgIGlu dCBwaWN0dXJlX2Nyb3BwaW5nX2ZsYWc7Cj4gKyAgICBpbnQgcGljdHVyZV9jcm9wX2xlZnRfb2Zm c2V0Owo+ICsgICAgaW50IHBpY3R1cmVfY3JvcF9yaWdodF9vZmZzZXQ7Cj4gKyAgICBpbnQgcGlj dHVyZV9jcm9wX3RvcF9vZmZzZXQ7Cj4gKyAgICBpbnQgcGljdHVyZV9jcm9wX2JvdHRvbV9vZmZz ZXQ7Cj4gK30gRVZDUGFyc2VyU1BTOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRVZDUGFyc2VyQ29u dGV4dCB7Cj4gKyAgICBQYXJzZUNvbnRleHQgcGM7Cj4gKyAgICBFVkNQYXJzZXJTUFMgc3BzW01B WF9TUFNfQ05UXTsKPiArICAgIGludCBpc19hdmM7Cj4gKyAgICBpbnQgbmFsX2xlbmd0aF9zaXpl Owo+ICsgICAgaW50IHRvX3JlYWQ7Cj4gKyAgICBpbnQgaW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9y ZWFkOyAvLyBUaGUgZmxhZyBpcyBzZXQgdG8gMSB3aGVuIGluY29tcGxldGUgTkFMIHVuaXQgcHJl Zml4IGhhcyBiZWVuIHJlYWQKPiArCj4gKyAgICBpbnQgcGFyc2VkX2V4dHJhZGF0YTsKPiArCj4g KyAgICBpbnQgcG9jOwo+ICsgICAgaW50IHBvY1RpZDA7Cj4gKwo+ICsgICAgaW50IGdvdF9zcHM7 Cj4gKyAgICBpbnQgZ290X3BwczsKPiArICAgIGludCBnb3Rfc2VpOwo+ICsgICAgaW50IGdvdF9z bGljZTsKPiArfSBFVkNQYXJzZXJDb250ZXh0Owo+ICsKPiArc3RhdGljIGludCBnZXRfbmFsdV90 eXBlKGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQgYnNfc2l6ZSkKPiArewo+ICsgICAgR2V0Qml0Q29u dGV4dCBnYjsKPiArICAgIGludCBmemIsIG51dDsKPiArICAgIGluaXRfZ2V0X2JpdHMoJmdiLCBi cywgYnNfc2l6ZSAqIDgpOwo+ICsgICAgZnpiID0gZ2V0X2JpdHMxKCZnYik7Cj4gKyAgICBpZihm emIgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJmb3JiaWRk ZW5femVyb19iaXQgaXMgbm90IGNsZWFyXG4iKTsKPiArICAgIH0KPiArICAgIG51dCA9IGdldF9i aXRzKCZnYiwgNik7IC8qIG5hbF91bml0X3R5cGVfcGx1czEgKi8KPiArICAgIHJldHVybiBudXQg LSAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdldF9uYWx1X3R5cGUyKGNvbnN0IHVpbnQ4X3Qg KmJzLCBpbnQgYnNfc2l6ZSkKPiArewo+ICsgICAgaW50IG5hbHVfdHlwZSA9IDA7Cj4gKyAgICBY RVZEX0lORk8gaW5mbzsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgaWYoYnNfc2l6ZT49RVZD X05BTF9IRUFERVJfU0laRSkgewo+ICsgICAgICAgIHJldCA9IHhldmRfaW5mbygodm9pZCopYnMs IEVWQ19OQUxfSEVBREVSX1NJWkUsIDEsICZpbmZvKTsKCllvdSB3aWxsIG5lZWQgdG8gaW1wbGVt ZW50IHRoaXMgcGFyc2luZyBpbiBsYXZjLgoKSSBsZWZ0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBF VkMgcGFyc2VyIGluIGxpYmF2Y29kZS9ldmNfcGFyc2VyLmMKCkkgcmVjb21tZW5kIHlvdSBkb2lu ZyBpdCBhcyBhIENCUyBtb2R1bGUsIHdoaWNoIGNhbiBiZSByZXVzZWQgYnkgCmRpZmZlcmVudCBj b21wb25lbnRzLCBhbmQgd2lsbCBtYWtlIHdyaXRpbmcgdGhpcyBwYXJzZXIgZWFzaWVyLgoKU2Vl IGNic19oMjY0NS5jIGFuZCBzby4KCj4gKyAgICAgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsK PiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0 c3RyZWFtIGluZm9ybWF0aW9uXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIG5hbHVfdHlwZSA9IGluZm8ubmFsdV90eXBlOwo+ICsKPiArICAgIH0K PiArICAgIHJldHVybiBuYWx1X3R5cGUtMTsKPiArfQo+ICsKPiArc3RhdGljIEVWQ1BhcnNlclNQ UyAqIHBhcnNlX3Nwcyhjb25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUsIEVWQ1BhcnNlckNv bnRleHQgKmV2KQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0IGdiOwo+ICsgICAgRVZDUGFyc2Vy U1BTICpzcHM7Cj4gKyAgICBpbnQgc3BzX2lkOwo+ICsKPiArICAgIGluaXRfZ2V0X2JpdHMoJmdi LCBicywgYnNfc2l6ZSo4KTsKPiArCj4gKyAgICBzcHNfaWQgPSBnZXRfdWVfZ29sb21iKCZnYik7 Cj4gKyAgICBpZihzcHNfaWQgPj0gTUFYX1NQU19DTlQpIGdvdG8gRVJSOwo+ICsgICAgc3BzID0g JmV2LT5zcHNbc3BzX2lkXTsKPiArICAgIHNwcy0+c3BzX2lkID0gc3BzX2lkOwo+ICsgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIltFVkMgUGFyc2VyXSBzcHNfaWQ9JWRcbiIsIHNwcy0+ c3BzX2lkKTsKPiArCj4gKyAgICBzcHMtPnByb2ZpbGVfaWRjID0gZ2V0X2JpdHMoJmdiLCA4KTsK PiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJbRVZDIFBhcnNlcl0gcHJvZmlsZT0l ZFxuIiwgc3BzLT5wcm9maWxlX2lkYyk7Cj4gKyAgICBzcHMtPmxldmVsX2lkYyA9IGdldF9iaXRz KCZnYiwgOCk7Cj4gKwo+ICsgICAgc2tpcF9iaXRzX2xvbmcoJmdiLCAzMik7IC8qIHNraXAgdG9v bHNldF9pZGNfaCAqLwo+ICsgICAgc2tpcF9iaXRzX2xvbmcoJmdiLCAzMik7IC8qIHNraXAgdG9v bHNldF9pZGNfbCAqLwo+ICsKPiArICAgIHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMgPSBnZXRfdWVf Z29sb21iKCZnYik7Cj4gKyAgICBzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXMgPSBnZXRf dWVfZ29sb21iKCZnYik7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiW0VWQyBQ YXJzZXJdIHdpZHRoPSVkXG4iLCBzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXMpOwo+ICsg ICAgc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyA9IGdldF91ZV9nb2xvbWIoJmdiKTsK PiArCj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiW0VWQyBQYXJzZXJdIGhlaWdo dD0lZFxuIiwgc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyk7Cj4gKyAgICBzcHMtPmJp dF9kZXB0aF9sdW1hID0gZ2V0X3VlX2dvbG9tYigmZ2IpOwo+ICsgICAgc3BzLT5iaXRfZGVwdGhf Y2hyb21hID0gZ2V0X3VlX2dvbG9tYigmZ2IpOwo+ICsKPiArICAgIC8vIEB0b2RvIHdlIG5lZWQg dG8gcGFyc2UgY3JvcCBhbmQgdnVpIGluZm9ybWF0aW9uIGhlcmUKPiArCj4gKyAgICByZXR1cm4g c3BzOwo+ICsKPiArRVJSOgo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBSZWFkIE5BTCB1bml0IGxlbmd0aAo+ICsgKiBAcGFyYW0gYnMgaW5wdXQgZGF0YSAoYml0c3Ry ZWFtKQo+ICsgKiBAcmV0dXJuIHRoZSBsZW5naHRoIG9mIE5BTCB1bml0IG9uIHN1Y2Nlc3MsIDAg dmFsdWUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIHVpbnQzMl90IHJlYWRfbmFsX3VuaXRf bGVuZ3RoKGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQgYnNfc2l6ZSkKPiArewo+ICsgICAgdWludDMy X3QgbGVuID0gMDsKPiArICAgIFhFVkRfSU5GTyBpbmZvOwo+ICsgICAgaW50IHJldDsKPiArCj4g KyAgICBpZihic19zaXplPj1YRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSB7Cj4gKyAgICAgICAg cmV0ID0geGV2ZF9pbmZvKCh2b2lkKilicywgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSwgMSwg JmluZm8pOwo+ICsgICAgICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJDYW5ub3QgZ2V0IGJpdHN0cmVhbSBpbmZvcm1h dGlvblxuIik7Cj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAgICAgIH0KPiArICAgICAg ICBsZW4gPSBpbmZvLm5hbHVfbGVuOwo+ICsgICAgICAgIGlmKGxlbiA9PSAwKQo+ICsgICAgICAg IHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYml0 c3RyZWFtIHNpemUhIDEgWyVkXSBbJWRdXG4iLCBsZW4sIGJzX3NpemUpOwo+ICsgICAgICAgICAg ICByZXR1cm4gMDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gbGVuOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX25hbF91bml0cyhBVkNvZGVjUGFyc2VyQ29udGV4dCAq cywgY29uc3QgdWludDhfdCAqYnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBi c19zaXplLCBBVkNvZGVjQ29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBFVkNQYXJzZXJDb250ZXh0 ICpldiA9IHMtPnByaXZfZGF0YTsKPiArICAgIGludCBuYWx1X3R5cGUsIG5hbHVfc2l6ZTsKPiAr ICAgIHVuc2lnbmVkIGNoYXIgKiBiaXRzID0gKHVuc2lnbmVkIGNoYXIgKiliczsKPiArICAgIGlu dCBiaXRzX3NpemUgPSBic19zaXplOwo+ICsKPiArICAgIGN0eC0+Y29kZWNfaWQgPSBBVl9DT0RF Q19JRF9FVkM7Cj4gKwo+ICsgICAgbmFsdV9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgoYml0 cywgYml0c19zaXplKTsKPiArICAgIGlmKG5hbHVfc2l6ZT09MCkgewo+ICsgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgTkFMIHVuaXQgc2l6ZTogKCVkKVxuIiwgbmFs dV9zaXplKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYml0cyAr PSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOwo+ICsgICAgYml0c19zaXplIC09IFhFVkRfTkFM X1VOSVRfTEVOR1RIX0JZVEU7Cj4gKwo+ICsgICAgbmFsdV90eXBlID0gZ2V0X25hbHVfdHlwZTIo Yml0cywgYml0c19zaXplKTsKPiArCj4gKyAgICBiaXRzICs9IEVWQ19OQUxfSEVBREVSX1NJWkU7 Cj4gKyAgICBiaXRzX3NpemUgLT0gRVZDX05BTF9IRUFERVJfU0laRTsKPiArCj4gKwo+ICsgICAg aWYgKG5hbHVfdHlwZSA9PSBYRVZEX05VVF9TUFMpIHsKPiArICAgICAgICBFVkNQYXJzZXJTUFMg KiBzcHM7Cj4gKwo+ICsgICAgICAgIHNwcyA9IHBhcnNlX3NwcyhiaXRzLCBiaXRzX3NpemUsIGV2 KTsKPiArCj4gKyAgICAgICAgY3R4LT5jb2RlZF93aWR0aCAgICAgICAgID0gc3BzLT5waWNfd2lk dGhfaW5fbHVtYV9zYW1wbGVzOwo+ICsgICAgICAgIGN0eC0+Y29kZWRfaGVpZ2h0ICAgICAgICA9 IHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXM7Cj4gKyAgICAgICAgY3R4LT53aWR0aCAg ICAgICAgICAgICAgID0gc3BzLT5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOwo+ICsgICAgICAg IGN0eC0+aGVpZ2h0ICAgICAgICAgICAgICA9IHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3NhbXBs ZXM7Cj4gKwo+ICsgICAgICAgIGlmKHNwcy0+cHJvZmlsZV9pZGMgPT0gMCkgY3R4LT5wcm9maWxl ID0gRkZfUFJPRklMRV9FVkNfQkFTRUxJTkU7Cj4gKyAgICAgICAgZWxzZSBpZiAoc3BzLT5wcm9m aWxlX2lkYyA9PSAxKSBjdHgtPnByb2ZpbGUgPSBGRl9QUk9GSUxFX0VWQ19NQUlOOwo+ICsgICAg ICAgIGVsc2V7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIm5vdCBz dXBwb3J0ZWQgcHJvZmlsZSAoJWQpXG4iLCBzcHMtPnByb2ZpbGVfaWRjKTsKPiArICAgICAgICAg ICAgcmV0dXJuIC0xOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgc3dpdGNoKHNwcy0+Y2hy b21hX2Zvcm1hdF9pZGMpCj4gKyAgICAgICAgewo+ICsgICAgICAgIGNhc2UgMDogLyogWUNCQ1I0 MDBfMTBMRSAqLwo+ICsgICAgICAgICAgICAvKiBAdG9kbyBzdXBwb3J0IHRoaXMgKi8KPiArICAg ICAgICAgICAgY3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTBMRTsKPiArICAgICAgICAg ICAgcmV0dXJuIC0xOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIDE6IC8q IFlDQkNSNDIwXzEwTEUgKi8KPiArICAgICAgICAgICAgY3R4LT5waXhfZm10ID0gQVZfUElYX0ZN VF9ZVVY0MjBQMTBMRTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSAyOiAv KiBZQ0JDUjQyMl8xMExFICovCj4gKyAgICAgICAgICAgIC8qIEB0b2RvIHN1cHBvcnQgdGhpcyAq Lwo+ICsgICAgICAgICAgICBjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMlAxMExFOwo+ ICsgICAgICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAg IGNhc2UgMzogLyogWUNCQ1I0NDRfMTBMRSAqLwo+ICsgICAgICAgICAgICAvKiBAdG9kbyBzdXBw b3J0IHRoaXMgKi8KPiArICAgICAgICAgICAgY3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0 NDRQMTBMRTsKPiArICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAgICAgICBicmVhazsK PiArICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICBjdHgtPnBpeF9mbXQgPSBBVl9QSVhf Rk1UX05PTkU7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJ1bmtu b3duIGNvbG9yIHNwYWNlXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAg IH0KPiArCj4gKyAgICAgICAgLy9hdmN0eC0+aGFzX2JfZnJhbWVzID0gMTsgLy8gQHRvZG8gRklY LU1FCj4gKwo+ICsgICAgICAgIGV2LT5nb3Rfc3BzID0gMTsKPiArCj4gKyAgICB9Cj4gKyAgICBl bHNlIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfUFBTKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1BQUyBcbiIpOwo+ICsgICAgICAgIGV2LT5nb3Rf cHBzID0gMTsKPiArICAgIH0KPiArICAgIGVsc2UgaWYobmFsdV90eXBlID09IFhFVkRfTlVUX1NF SSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9TRUkg XG4iKTsKPiArICAgICAgICBldi0+Z290X3NlaSA9IDE7CgpUaGlzIGlzIGEgd3JpdGUgb25seSBm aWVsZC4KCj4gKyAgICB9Cj4gKyAgICBlbHNlIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfSURS IHx8IG5hbHVfdHlwZSA9PSBYRVZEX05VVF9OT05JRFIpIHsKPiArICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9OT05JRFJcbiIpOwo+ICsgICAgICAgIGV2LT5nb3Rf c2xpY2UrKzsKClRoaXMgdG9vLiBNYXliZSB5b3UgbWVhbnQgdG8gc2V0IGN0eC0+cGljdF90eXBl IGJhc2VkIG9uIG5hbHVfdHlwZT8KCldoYXQgZG8geW91IG1lYW4/IEkgZG9uJ3QgZ2V0IGl0LiBT ZWVtcyBJIG5lZWQgbW9yZSBleHBsYW5hdGlvbnMuCgo+ICsgICAgfSBlbHNlIHsKPiArICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIE5BTCB1bml0IHR5cGU6ICVkXG4i LCBuYWx1X3R5cGUpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArICAgIHJldHVy biAwOwo+ICt9Cj4gKwo+ICsKPiArLyoqCj4gKyAqIEZpbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVu dCBmcmFtZSBpbiB0aGUgYml0c3RyZWFtLgo+ICsgKiBAcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0 aGUgZmlyc3QgYnl0ZSBvZiB0aGUgbmV4dCBmcmFtZSwgb3IgRU5EX05PVF9GT1VORAo+ICsgKi8K PiArc3RhdGljIGludCBldmNfZmluZF9mcmFtZV9lbmQoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMs IGNvbnN0IHVpbnQ4X3QgKmJ1ZiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBidWZfc2l6ZSkKPiArewo+ICsgICAgRVZDUGFyc2VyQ29udGV4dCAqZXYgPSBzLT5wcml2X2Rh dGE7Cj4gKwo+ICsgICAgaWYoIWV2LT50b19yZWFkKQo+ICsgICAgewo+ICsgICAgICAgIGludCBu YWxfdW5pdF9zaXplID0gMDsKPiArICAgICAgICBpbnQgbmV4dCA9IEVORF9OT1RfRk9VTkQ7Cj4g Kwo+ICsgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBidWZmZXIgc2l6ZSBpcyBub3Qg ZW5vdWdoIGZvciBidWZmZXIgdG8gc3RvcmUgTkFMIHVuaXQgbGVuZ3RoCj4gKyAgICAgICAgaWYo YnVmX3NpemUgPCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSB7Cj4gKyAgICAgICAgICAgIGV2 LT50b19yZWFkID0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsKPiArICAgICAgICAgICAgZXYt Pm5hbF9sZW5ndGhfc2l6ZSA9IGJ1Zl9zaXplOwo+ICsgICAgICAgICAgICBldi0+aW5jb21wbGV0 ZV9uYWx1X3ByZWZpeF9yZWFkICA9IDE7Cj4gKwo+ICsgICAgICAgICAgICByZXR1cm4gRU5EX05P VF9GT1VORDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIG5hbF91bml0X3NpemUgPSByZWFk X25hbF91bml0X2xlbmd0aChidWYsIGJ1Zl9zaXplKTsKPiArICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0RFQlVHLCAibmFsX3VuaXRfc2l6ZTogJWQgfCBidWZfc2l6ZTogJWQgXG4iLCBuYWxf dW5pdF9zaXplLCBidWZfc2l6ZSk7Cj4gKyAgICAgICAgZXYtPm5hbF9sZW5ndGhfc2l6ZSA9IFhF VkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7Cj4gKwo+ICsgICAgICAgIG5leHQgPSBuYWxfdW5pdF9z aXplICsgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsKPiArICAgICAgICBldi0+dG9fcmVhZCA9 IG5leHQ7Cj4gKyAgICAgICAgaWYobmV4dDxidWZfc2l6ZSkKPiArICAgICAgICAgICAgcmV0dXJu IG5leHQ7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICByZXR1cm4gRU5EX05PVF9GT1VO RDsKPiArICAgIH0gZWxzZSBpZihldi0+dG9fcmVhZCA+IGJ1Zl9zaXplKSB7Cj4gKyAgICAgICAg Ly8vIEB0b2RvIENvbnNpZGVyIGhhbmRsaW5nIHRoZSBmb2xsb3dpbmcgY2FzZQo+ICsgICAgICAg IC8vIGlmKGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQgID09IDEpIHsKPiArICAgICAg ICAvLyB9Cj4gKyAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7Cj4gKyAgICB9IGVsc2UgIHsK PiArICAgICAgICBpZihldi0+aW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFkICA9PSAxKSB7Cj4g KyAgICAgICAgICAgIEVWQ1BhcnNlckNvbnRleHQgKmV2ID0gcy0+cHJpdl9kYXRhOwo+ICsgICAg ICAgICAgICBQYXJzZUNvbnRleHQgKnBjID0gJmV2LT5wYzsKPiArICAgICAgICAgICAgdWludDhf dCBuYWx1X2xlbltYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFXSA9IHswfTsKPiArICAgICAgICAg ICAgaW50IG5hbF91bml0X3NpemUgPSAwOwo+ICsKPiArICAgICAgICAgICAgLy8gMS4gcGMtPmJ1 ZmZlciBjb250YWlucyBwcmV2aW91c2x5IHJlYWQgYnl0ZXMgb2YgTkFMVSBwcmVmaXgKPiArICAg ICAgICAgICAgLy8gMi4gYnVmIGNvbnRhaW5zIHRoZSByZXN0IG9mIE5BTCB1bml0IHByZWZpeCBi eXRlcwo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyB+fn5+fn5+Cj4gKyAgICAg ICAgICAgIC8vIEVYQU1QTEUKPiArICAgICAgICAgICAgLy8gfn5+fn5+fgo+ICsgICAgICAgICAg ICAvLwo+ICsgICAgICAgICAgICAvLyBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgd2UgYXNzdW1l ZCB0aGF0IHRoZSBudW1iZXIgb2YgYWxyZWFkeSByZWFkIE5BTCBVbml0IHByZWZpeCBieXRlcyBp cyBlcXVhbCAxCj4gKyAgICAgICAgICAgIC8vCj4gKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0K PiArICAgICAgICAgICAgLy8gcGMtPmJ1ZmZlciAtPiBjb25hdGlucyBhbHJlYWR5IHJlYWQgYnl0 ZXMKPiArICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQo+ICsgICAgICAgICAgICAvLyAgICAgICAg ICAgICAgX18gcGMtPmluZGV4ID09IDEKPiArICAgICAgICAgICAgLy8gICAgICAgICAgICAgfAo+ ICsgICAgICAgICAgICAvLyAgICAgICAgICAgICBWCj4gKyAgICAgICAgICAgIC8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICAgICAg ICAgICAgLy8gfCAgIDAgICB8ICAgMSAgIHwgICAyICAgfCAgIDMgICB8ICAgNCAgIHwgLi4uIHwg ICBOICAgfAo+ICsgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAgICAgICAgICAgIC8vIHwgIDB4MDAgfCAgMHhY WCB8ICAweFhYIHwgIDB4WFggfCAgMHhYWCB8IC4uLiB8ICAweFhYIHwKPiArICAgICAgICAgICAg Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyAtLS0tLS0tLS0tCj4gKyAgICAg ICAgICAgIC8vIGJ1ZiAtPiBjb250YWlucyBuZXdseSByZWFkIGJ5dGVzCj4gKyAgICAgICAgICAg IC8vIC0tLS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsgICAgICAgICAgICAvLyB8ICAgMCAg IHwgICAxICAgfCAgIDIgICB8ICAgMyAgIHwgICA0ICAgfCAuLi4gfCAgIE4gICB8Cj4gKyAgICAg ICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gfCAgMHgwMCB8ICAweDAwIHwgIDB4M0MgfCAgMHhY WCB8ICAweFhYIHwgLi4uIHwgIDB4WFggfAo+ICsgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAgICAgICAgICAg IC8vCj4gKyAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8WEVWRF9OQUxfVU5JVF9MRU5HVEhfQllU RTtpKyspIHsKPiArICAgICAgICAgICAgICAgIGlmKGk8cGMtPmluZGV4KSB7Cj4gKyAgICAgICAg ICAgICAgICAgICAgbmFsdV9sZW5baV0gPSBwYy0+YnVmZmVyW2ldOwo+ICsgICAgICAgICAgICAg ICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgICAgICBuYWx1X2xlbltpXSA9IGJ1ZltpLXBj LT5pbmRleF07Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAg ICAgICAgICAgIC8vIC0tLS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gbmFsdV9sZW4KPiArICAg ICAgICAgICAgLy8gLS0tLS0tLS0tLQo+ICsgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gfCAgIDAgICB8ICAgMSAgIHwgICAy ICAgfCAgIDMgICB8Cj4gKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+ICsgICAgICAgICAgICAvLyB8ICAweDAwIHwgIDB4MDAgfCAgMHgwMCB8ICAweDND IHwKPiArICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g KyAgICAgICAgICAgIC8vIHwgTkFMVSBMRU5HVEggICAgICAgICAgICAgICAgICAgfAo+ICsgICAg ICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICAgICAgICAg ICAgLy8gTkFMIFVuaXQgbGVuZ2h0ID0gIDYwICgweDAwMDAwMDNDKQo+ICsKPiArICAgICAgICAg ICAgbmFsX3VuaXRfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKG5hbHVfbGVuLCBYRVZEX05B TF9VTklUX0xFTkdUSF9CWVRFKTsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19E RUJVRywgIm5hbF91bml0X3NpemU6ICVkIHwgYnVmX3NpemU6ICVkIFxuIiwgbmFsX3VuaXRfc2l6 ZSwgYnVmX3NpemUpOwo+ICsKPiArICAgICAgICAgICAgZXYtPnRvX3JlYWQgPSBuYWxfdW5pdF9z aXplICsgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSAtIHBjLT5pbmRleDsKPiArCj4gKyAgICAg ICAgICAgIGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQgPSAwOwo+ICsKPiArICAgICAg ICAgICAgaWYoZXYtPnRvX3JlYWQgPiBidWZfc2l6ZSkgewo+ICsgICAgICAgICAgICAgICAgcmV0 dXJuIEVORF9OT1RfRk9VTkQ7Cj4gKyAgICAgICAgICAgIH0gZWxzZSAgewo+ICsgICAgICAgICAg ICAgICAgcmV0dXJuIGV2LT50b19yZWFkOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIHJldHVybiBldi0+dG9fcmVhZDsKPiArICAgIH0KPiArICAgIHJldHVybiBFTkRf Tk9UX0ZPVU5EOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGV2Y19wYXJzZXJfaW5pdChBVkNvZGVj UGFyc2VyQ29udGV4dCAqcykgewo+ICsKPiArICAgIEVWQ1BhcnNlckNvbnRleHQgKmV2ID0gcy0+ cHJpdl9kYXRhOwo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJlWHRyYS1m YXN0IEVzc2VudGlhbCBWaWRlbyBQYXJzZXJcbiIpOwoKVW5uZWNlc3NhcnkgbG9nIG1lc3NhZ2Uu CgpGaXhlZC4gSXQgaGFzIGJlZW4gUkVNT1ZFRC4KCj4gKwo+ICsgICAgZXYtPmdvdF9zcHMgPSAw Owo+ICsgICAgZXYtPmdvdF9wcHMgPSAwOwo+ICsgICAgZXYtPmdvdF9zZWkgPSAwOwo+ICsgICAg ZXYtPmdvdF9zbGljZSA9IDA7Cj4gKyAgICBldi0+bmFsX2xlbmd0aF9zaXplID0gWEVWRF9OQUxf VU5JVF9MRU5HVEhfQllURTsKPiArICAgIGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQg PSAwOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGV2Y19wYXJz ZShBVkNvZGVjUGFyc2VyQ29udGV4dCAqcywgQVZDb2RlY0NvbnRleHQgKmN0eCwKPiArICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqKnBvdXRidWYsIGludCAqcG91dGJ1Zl9zaXpl LAo+ICsgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6 ZSkKPiArewo+ICsgICAgaW50IG5leHQ7Cj4gKyAgICBFVkNQYXJzZXJDb250ZXh0ICpldiA9IHMt PnByaXZfZGF0YTsKPiArICAgIFBhcnNlQ29udGV4dCAqcGMgPSAmZXYtPnBjOwo+ICsgICAgaW50 IGlzX2R1bW15X2J1ZiA9ICFidWZfc2l6ZTsKPiArICAgIGNvbnN0IHVpbnQ4X3QgKmR1bW15X2J1 ZiA9IGJ1ZjsKPiArCj4gKyAgICBpZiAoY3R4LT5leHRyYWRhdGEgJiYgIWV2LT5wYXJzZWRfZXh0 cmFkYXRhKSB7Cj4gKyAgICAgICAgLy8gQHRvZG8gY29uc2lkZXIgaGFuZGxpbmcgZXh0cmFkYXRh Cj4gKyAgICAgICAgLy8KPiArICAgICAgICAvLyBmZl9ldmNfZGVjb2RlX2V4dHJhZGF0YShhdmN0 eC0+ZXh0cmFkYXRhLCBhdmN0eC0+ZXh0cmFkYXRhX3NpemUsICZjdHgtPnBzLCAmY3R4LT5zZWks Cj4gKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+aXNfYXZjLCAmY3R4 LT5uYWxfbGVuZ3RoX3NpemUsIGF2Y3R4LT5lcnJfcmVjb2duaXRpb24sCj4gKyAgICAgICAgLy8g ICAgICAgICAgICAgICAgICAgICAgICAgMSwgYXZjdHgpOwo+ICsgICAgICAgIGV2LT5wYXJzZWRf ZXh0cmFkYXRhID0gMTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAocy0+ZmxhZ3MgJiBQQVJTRVJf RkxBR19DT01QTEVURV9GUkFNRVMpIHsKPiArICAgICAgICBuZXh0ID0gYnVmX3NpemU7Cj4gKyAg ICB9IGVsc2Ugewo+ICsgICAgICAgIG5leHQgPSBldmNfZmluZF9mcmFtZV9lbmQocywgYnVmLCBi dWZfc2l6ZSk7Cj4gKyAgICAgICAgaWYgKGZmX2NvbWJpbmVfZnJhbWUocGMsIG5leHQsICZidWYs ICZidWZfc2l6ZSkgPCAwKSB7Cj4gKyAgICAgICAgICAgICpwb3V0YnVmICAgICAgPSBOVUxMOwo+ ICsgICAgICAgICAgICAqcG91dGJ1Zl9zaXplID0gMDsKPiArICAgICAgICAgICAgZXYtPnRvX3Jl YWQgLT0gYnVmX3NpemU7Cj4gKyAgICAgICAgICAgIHJldHVybiBidWZfc2l6ZTsKPiArICAgICAg ICB9Cj4gKyAgICB9Cj4gKyNpZiAxCj4gKyAgICBpc19kdW1teV9idWYgJj0gKGR1bW15X2J1ZiA9 PSBidWYpOwo+ICsKPiArICAgIGlmICghaXNfZHVtbXlfYnVmKSB7Cj4gKyAgICAgICAgcGFyc2Vf bmFsX3VuaXRzKHMsIGJ1ZiwgYnVmX3NpemUsIGN0eCk7Cj4gKyAgICB9Cj4gKyNlbHNlCj4gKyAg ICBpZihuZXh0ICE9IEVORF9OT1RfRk9VTkQpIHsKPiArICAgICAgICBwYXJzZV9uYWxfdW5pdHMo cywgYnVmLCBidWZfc2l6ZSwgYXZjdHgpOwo+ICsgICAgfQo+ICsjZW5kaWYKPiArCj4gKyAgICAq cG91dGJ1ZiAgICAgID0gYnVmOwo+ICsgICAgKnBvdXRidWZfc2l6ZSA9IGJ1Zl9zaXplOwo+ICsg ICAgZXYtPnRvX3JlYWQgLT0gbmV4dDsKPiArICAgIHJldHVybiBuZXh0Owo+ICt9Cj4gKwo+ICsv LyBTcGxpdCBhZnRlciB0aGUgcGFyYW1ldGVyIHNldHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg c3RyZWFtIGlmIHRoZXkgZXhpc3QuCj4gK3N0YXRpYyBpbnQgZXZjX3NwbGl0KEFWQ29kZWNDb250 ZXh0ICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQgYnNfc2l6ZSkKClJlbW92ZSB0aGlzLCBu b3Qgb25seSBiZWNhdXNlIGl0J3MgYSBuby1vcCB0aGUgd2F5IHlvdSB3cm90ZSBpdCwgYnV0IAph bHNvIGJlY2F1c2UgQVZDb2RlY1BhcnNlci5zcGxpdCgpIGlzIHVudXNlZC4KCkZpeGVkLiBJdCBo YXMgIGJlZW4gUkVNT1ZFRC4KCj4gK3sKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgYXZfY29sZCB2b2lkIGV2Y19wYXJzZXJfY2xvc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMp Cj4gK3sKPiArICAgIC8qIEVWQ1BhcnNlckNvbnRleHQgKmN0eCA9IHMtPnByaXZfZGF0YTsgKi8K PiArfQo+ICsKPiArQVZDb2RlY1BhcnNlciBmZl9ldmNfcGFyc2VyID0gewo+ICsgICAgLmNvZGVj X2lkcyAgICAgID0geyBBVl9DT0RFQ19JRF9FVkMgfSwKPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9 IHNpemVvZihFVkNQYXJzZXJDb250ZXh0KSwKPiArICAgIC5wYXJzZXJfaW5pdCAgICA9IGV2Y19w YXJzZXJfaW5pdCwKPiArICAgIC5wYXJzZXJfcGFyc2UgICA9IGV2Y19wYXJzZSwKPiArICAgIC5w YXJzZXJfY2xvc2UgICA9IGV2Y19wYXJzZXJfY2xvc2UsCj4gKyAgICAuc3BsaXQgICAgICAgICAg PSBldmNfc3BsaXQsCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGlieGV2ZC5jIGIv bGliYXZjb2RlYy9saWJ4ZXZkLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLmZmOWVlNWMxNmYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy9saWJ4 ZXZkLmMKPiBAQCAtMCwwICsxLDcyNCBAQAo+ICsvKgo+ICsgKiBsaWJ4ZXZkIGRlY29kZXIKPiAr ICogRVZDIChNUEVHLTUgRXNzZW50aWFsIFZpZGVvIENvZGluZykgZGVjb2RpbmcgdXNpbmcgWEVW RCBNUEVHLTUgRVZDIGRlY29kZXIgbGlicmFyeQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MjEgRGF3aWQgS296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+Cj4gKyAqCj4gKyAqIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4g KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAq Cj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAq Lwo+ICsKPiArI2lmIGRlZmluZWQoX01TQ19WRVIpCj4gKyNkZWZpbmUgWEVWRF9BUElfSU1QT1JU UyAxCj4gKyNlbmRpZgo+ICsKPiArI2luY2x1ZGUgPHhldmQuaD4KPiArCj4gKyNpbmNsdWRlIDxm bG9hdC5oPgo+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGls L2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiCj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvb3B0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgo+ICsj aW5jbHVkZSAibGliYXZ1dGlsL3BpeGZtdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0 aWxzLmgiCj4gKwo+ICsvLyAjZGVmaW5lIFVTRV9FWFBfR09MT01CX1NUVUZGCj4gKyNpZmRlZiBV U0VfRVhQX0dPTE9NQl9TVFVGRgoKSXMgdGhpcyBhIHJlbW5hbnQgb2YgZGVidWdpbmcgY29kZT8g SnVzdCByZW1vdmUgaXQgYW5kIGVpdGhlciB1c2UgZ29sb21iIApvciBub3QuCgpGaXhlZC4gSXQg aGFzICBiZWVuIFJFTU9WRUQuCgo+ICsjaW5jbHVkZSAiZ29sb21iLmgiCj4gKyNlbmRpZgo+ICsK PiArI2luY2x1ZGUgImF2Y29kZWMuaCIKPiArI2luY2x1ZGUgImludGVybmFsLmgiCj4gKyNpbmNs dWRlICJwYWNrZXRfaW50ZXJuYWwuaCIKPiArCj4gKyNkZWZpbmUgVU5VU0VEKHgpICh2b2lkKSh4 KQo+ICsKPiArI2RlZmluZSBYRVZEX1BBUkFNX0JBRF9OQU1FIC0xCj4gKyNkZWZpbmUgWEVWRF9Q QVJBTV9CQURfVkFMVUUgLTIKPiArCj4gKy8qKgo+ICsgKiBUaGUgc3RydWN0dXJlIHN0b3JlcyBh bGwgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUg RVZDIGRlY29kZXIKPiArICogVGhlIGZpcnN0IGZpZWxkIGlzIGEgcG9pbnRlciB0byBhbiBBVkNs YXNzIHN0cnVjdCAoQHNlZSBodHRwczovL2ZmbXBlZy5vcmcvZG94eWdlbi90cnVuay9zdHJ1Y3RB VkNsYXNzLmh0bWwjZGV0YWlscykuCj4gKyAqLwo+ICt0eXBlZGVmIHN0cnVjdCBYZXZkQ29udGV4 dCB7Cj4gKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKPiArCj4gKyAgICBYRVZEIGlkOyAgICAg ICAgLy8gWEVWRCBpbnN0YW5jZSBpZGVudGlmaWVyIEBzZWUgeGV2ZC5oCj4gKyAgICBYRVZEX0NE U0MgY2RzYzsgLy8gZGVjb2RpbmcgcGFyYW1ldGVycyBAc2VlIHhldmQuaAo+ICsKPiArICAgIGlu dCBkZWNvZF9mcmFtZXM7IC8vIG51bWJlciBvZiBkZWNvZGVkIGZyYW1lcwo+ICsgICAgaW50IHBh Y2tldF9jb3VudDsgLy8gbnVtYmVyIG9mIHBhY2tldHMgY3JlYXRlZCBieSBkZWNvZGVyCj4gKwo+ ICsgICAgLy8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCj4gKyAgICBBVkRpY3Rpb25hcnkgKnhl dmRfb3B0czsgLy8geGV2ZCBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSBhIDotc2VwYXJhdGVkIGxp c3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMKPiArCj4gK30gWGV2ZENvbnRleHQ7Cj4gKwo+ICtz dGF0aWMgaW50ICBvcF90aHJlYWRzID0gMTsgLy8gRGVmYXVsdCB2YWx1ZQo+ICsKPiArI2lmZGVm IFVTRV9FWFBfR09MT01CX1NUVUZGCj4gK3N0YXRpYyBpbnQgZ2V0X25hbHVfdHlwZShjb25zdCB1 aW50OF90ICpicywgaW50IGJzX3NpemUpCj4gK3sKPiArICAgIEdldEJpdENvbnRleHQgZ2I7Cj4g KyAgICBpbnQgZnpiLCBudXQ7Cj4gKyAgICBpbml0X2dldF9iaXRzKCZnYiwgYnMsIGJzX3NpemUg KiA4KTsKPiArICAgIGZ6YiA9IGdldF9iaXRzMSgmZ2IpOwo+ICsgICAgaWYoZnpiICE9IDApIHsK PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiZm9yYmlkZGVuX3plcm9fYml0 IGlzIG5vdCBjbGVhclxuIik7Cj4gKyAgICB9Cj4gKyAgICBudXQgPSBnZXRfYml0cygmZ2IsIDYp OyAvKiBuYWxfdW5pdF90eXBlX3BsdXMxICovCj4gKyAgICByZXR1cm4gbnV0IC0gMTsKPiArfQo+ ICsjZW5kaWYKPiArCj4gKyNpZmRlZiBQUklOVF9OQUxVX0lORk8KPiArc3RhdGljIHZvaWQgcHJp bnRfbmFsdV9pbmZvKFhFVkRfU1RBVCAqIHN0YXQpCj4gK3sKPiArICAgIGlmKHN0YXQtPm5hbHVf dHlwZSA8IFhFVkRfTlVUX1NQUykgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVC VUcsICJYRVZEX05VVF9TUFMgXG4iKTsKPiArCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19ERUJVRywgIiVjLXNsaWNlXG4iLCBzdGF0LT5zdHlwZSA9PSBYRVZEX1NUX0kgPyAnSScgOiBz dGF0LT5zdHlwZSA9PSBYRVZEX1NUX1AgPyAnUCcgOiAnQicpOwo+ICsKPiArICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiICVkIGJ5dGVzXG4iLCBzdGF0LT5yZWFkKTsKPiArICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiLCBwb2M9JWQsIHRpZD0lZCwgIiwgKGlu dClzdGF0LT5wb2MsIChpbnQpc3RhdC0+dGlkKTsKPiArCj4gKyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCAyOyBpKyspIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJV RywgIltMJWQgIiwgaSk7Cj4gKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3RhdC0+ cmVmcGljX251bVtpXTsgaisrKSBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCIlZCAiLCBzdGF0 LT5yZWZwaWNbaV1bal0pOwo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVH LCJdIFxuIik7Cj4gKyAgICAgICAgfQo+ICsgICAgfSBlbHNlIGlmKHN0YXQtPm5hbHVfdHlwZSA9 PSBYRVZEX05VVF9TUFMpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi WEVWRF9OVVRfU1BTIFxuIik7Cj4gKyAgICB9IGVsc2UgaWYgKHN0YXQtPm5hbHVfdHlwZSA9PSBY RVZEX05VVF9QUFMpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiWEVW RF9OVVRfUFBTIFxuIik7Cj4gKyAgICB9IGVsc2UgaWYgKHN0YXQtPm5hbHVfdHlwZSA9PSBYRVZE X05VVF9TRUkpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiWEVWRF9O VVRfU0VJIFxuIik7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfREVCVUcsICJVbmtub3duIGJpdHN0cmVhbSAhISEhIFxuIik7Cj4gKyAgICB9Cj4gK30KPiAr I2VuZGlmCj4gKwo+ICsvLyBAdG9kbyBjb25zaWRlciBtb3ZpbmcgZm9sbG93aW5nIGZ1bmN0aW9u IHRvIHNlcGFyYXRlIGZpbGUgY29udGFpbmluZyBoZWxwZXIgZnVuY3Rpb25zIGZvciBFVkMgZGVj b2Rlcgo+ICsjaWZkZWYgUFJJTlRfRlJBTUVfSU5GTwoKQWdhaW4sIG5vIGNoZWNrcyBmb3IgZGVm aW5lcyB0aGF0IGFyZSBub3QgZGVmaW5lZCBhbnl3aGVyZS4KCkZpeGVkLiBJdCBoYXMgIGJlZW4g UkVNT1ZFRC4KCj4gK3N0YXRpYyB2b2lkIHByaW50X2ZyYW1lX2luZm8oY29uc3QgQVZGcmFtZSog ZikKPiArewo+ICsgICAgaW50IGxldmVsID0gQVZfTE9HX0RFQlVHOwo+ICsgICAgYXZfbG9nKE5V TEwsIGxldmVsLCAiZnJhbWUtPndpZHRoOiAlZFxuIiwgZi0+d2lkdGgpOwo+ICsgICAgYXZfbG9n KE5VTEwsIGxldmVsLCAiZnJhbWUtPmhlaWdodDogJWRcbiIsIGYtPmhlaWdodCk7CgpEb24ndCBw cmludCB0byBOVUxMLgpGaXhlZC4KCj4gKwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJh bWUtPmxpbmVzaXplWzBdOiAlZFxuIiwgZi0+bGluZXNpemVbMF0pOwo+ICsgICAgYXZfbG9nKE5V TEwsIGxldmVsLCAiZnJhbWUtPmxpbmVzaXplWzFdOiAlZFxuIiwgZi0+bGluZXNpemVbMV0pOwo+ ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmxpbmVzaXplWzJdOiAlZFxuIiwgZi0+ bGluZXNpemVbMl0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmJ1ZlswXTog JXBcbiIsIGYtPmJ1ZlswXSk7Cj4gKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+YnVm WzFdOiAlcFxuIiwgZi0+YnVmWzFdKTsKPiArICAgIGF2X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1l LT5idWZbMl06ICVwXG4iLCBmLT5idWZbMl0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAi ZnJhbWUtPmRhdGFbMF06ICVwXG4iLCBmLT5kYXRhWzBdKTsKPiArICAgIGF2X2xvZyhOVUxMLCBs ZXZlbCwgImZyYW1lLT5kYXRhWzFdOiAlcFxuIiwgZi0+ZGF0YVsxXSk7Cj4gKyAgICBhdl9sb2co TlVMTCwgbGV2ZWwsICJmcmFtZS0+ZGF0YVsyXTogJXBcbiIsIGYtPmRhdGFbMl0pOwo+ICt9Cj4g KyNlbmRpZgo+ICsKPiArLy8gQHRvZG8gY29uc2lkZXIgbW92aW5nIGZvbGxvd2luZyBmdW5jdGlv biB0byBzZXBhcmF0ZSBmaWxlIGNvbnRhaW5pbmcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgRVZDIGRl Y29kZXIKPiArI2lmZGVmIFBSSU5UX1hFVkRfSU1HQl9JTkZPCgpEaXR0by4KRml4ZWQuIAoKCj4g K3N0YXRpYyB2b2lkIHByaW50X3hldmRfaW1nYl9pbmZvKGNvbnN0IFhFVkRfSU1HQiogaW1nYikK PiArewo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImltZ2ItPm5wOiAlZFxuIiwg aW1nYi0+bnApOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImltZ2ItPmJzaXpl WzBdOiAlZFxuIiwgaW1nYi0+YnNpemVbMF0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19E RUJVRywgImltZ2ItPmJzaXplWzFdOiAlZFxuIiwgaW1nYi0+YnNpemVbMV0pOwo+ICsgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImltZ2ItPmJzaXplWzJdOiAlZFxuIiwgaW1nYi0+YnNp emVbMl0pOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArLy8gQHRvZG8gY29uc2lkZXIgbW92aW5nIGZv bGxvd2luZyBmdW5jdGlvbiB0byBzZXBhcmF0ZSBmaWxlIGNvbnRhaW5pbmcgaGVscGVyIGZ1bmN0 aW9ucyBmb3IgRVZDIGRlY29kZXIKPiArI2lmZGVmIFBSSU5UX0FWQ1RYCgpEaXR0bywgYW5kIGV2 ZXJ5IG90aGVyIGNhc2UgYmVsb3cuCkZpeGVkCgo+ICtzdGF0aWMgdm9pZCBwcmludF9hdmN0eChj b25zdCBBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIGlmKCBBVk1FRElBX1RZUEVf VU5LTk9XTiA9PSBhdmN0eC0+Y29kZWNfdHlwZSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfREVCVUcsICJhdmN0eC0+Y29kZWNfdHlwZTogQVZNRURJQV9UWVBFX1VOS05PV05cbiIp Owo+ICsgICAgfSBlbHNlIGlmKEFWTUVESUFfVFlQRV9WSURFTyAgPT0gYXZjdHgtPmNvZGVjX3R5 cGUpCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImF2Y3R4LT5jb2RlY190 eXBlOiBBVk1FRElBX1RZUEVfVklERU8gXG4iKTsKPiArICAgIGVsc2Ugewo+ICsgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJhdmN0eC0+Y29kZWNfdHlwZTogQVZNRURJQV9UWVBF X1VOS05PV05cbiIpOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVC VUcsICJhdmN0eC0+Y29kZWNfaWQ6ICVzXG4iLGF2Y29kZWNfZ2V0X25hbWUoYXZjdHgtPmNvZGVj X2lkKSk7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiYXZjdHgtPndpZHRoOiAl ZFxuIiwgYXZjdHgtPndpZHRoKTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJh dmN0eC0+aGVpZ2h0OiAlZFxuIiwgYXZjdHgtPmhlaWdodCk7Cj4gKyAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0RFQlVHLCAiYXZjdHgtPnBpeF9mbXQ6ICVkXG4iLCBhdmN0eC0+cGl4X2ZtdCk7Cj4g K30KPiArI2VuZGlmCj4gKwo+ICsvKioKPiArICogUmVhZCBvcHRpb25zCj4gKyAqCj4gKyAqIEBw YXJhbSBhdmN0eCBjb2RlYyBjb250ZXh0Cj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCj4gKyAq Lwo+ICtzdGF0aWMgaW50IHJlYWRfb3B0aW9ucyhjb25zdCBBVkNvZGVjQ29udGV4dCogYXZjdHgp Cj4gK3sKPiArCj4gKyAgICBvcF90aHJlYWRzID0gKGF2Y3R4LT50aHJlYWRfY291bnQ+MCk/YXZj dHgtPnRocmVhZF9jb3VudDoxOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioK PiArICogUGFyc2UgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycwo+ICsg Kgo+ICsgKiBAcGFyYW0ga2V5Cj4gKyAqIEBwYXJhbSB2YWx1ZQo+ICsgKgo+ICsgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQo+ICsgKgo+ICsgKiBAdG9k byBDb25zaWRlciByZW1vdmluZyB0aGUgZnVuY3Rpb24KPiArICovCj4gK3N0YXRpYyBpbnQgeGV2 ZF9wYXJhbXNfcGFyc2UoY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSkKPiArewo+ ICsgICAgaWYoIWtleSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJ dmFsaWQgYXJndW1lbnQ6IGtleSBzdHJpbmcgaXMgTlVMTFxuIik7Cj4gKyAgICAgICAgcmV0dXJu IFhFVkRfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Cj4gKyAgICB9Cj4gKyAgICBpZighdmFsdWUpIHsK PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFyZ3VtZW50OiB2 YWx1ZSBzdHJpbmcgaXMgTlVMTFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIFhFVkRfRVJSX0lOVkFM SURfQVJHVU1FTlQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19FUlJPUiwgIlVua25vd24geGV2ZCBjb2RlYyBvcHRpb246ICVzXG4iLCBr ZXkpOwo+ICsgICAgICAgIHJldHVybiBYRVZEX1BBUkFNX0JBRF9OQU1FOwo+ICsgICAgfQo+ICsg ICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiAgVGhlIGZ1bmN0aW9uIHJldHVybnMg YSBwb2ludGVyIHRvIHZhcmlhYmxlIG9mIHR5cGUgWEVWRF9DRFNDLgo+ICsgKiBYRVZEX0NEU0Mg Y29udGFpbnMgYWxsIGRlY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXpl ZCBiZWZvcmUgaXRzIHVzZS4KPiArICoKPiArICogVGhlIGZpZWxkIHZhbHVlcyBvZiB0aGUgWEVW RF9DRFNDIHN0cnVjdHVyZSBhcmUgcG9wdWxhdGVkIGJhc2VkIG9uOgo+ICsgKiAtIHRoZSBjb3Jy ZXNwb25kaW5nIGZpZWxkIHZhbHVlcyBvZiB0aGUgQXZDb2RlY0NvbmV0eHQgc3RydWN0dXJlLAo+ ICsgKiAtIHRoZSB4ZXZkIGRlY29kZXIgc3BlY2lmaWMgb3B0aW9uIHZhbHVlcywKPiArICogICAo dGhlIGZ1bGwgbGlzdCBvZiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgeGV2ZCBlbmNvZGVyIGlzIGRp c3BsYXllZCBhZnRlciBleGVjdXRpbmcgdGhlIGNvbW1hbmQgLi9mZm1wZWcgLS1oZWxwIGRlY29k ZXIgPSBsaWJ4ZXZkKQo+ICsgKiAtIGFuZCB0aGUgeGV2ZCBlbmNvZGVyIG9wdGlvbnMgc3BlY2lm aWVkIGFzIGEgbGlzdCBvZiBrZXkgdmFsdWUgcGFpcnMgZm9sbG93aW5nIHhldmQtcGFyYW1zIG9w dGlvbgo+ICsgKgo+ICsgKiBPcmRlciBvZiBpbnB1dCBwcm9jZXNzaW5nIGFuZCBwb3B1bGF0aW5n IHRoZSBYRVZEX0NEU0Mgc3RydWN0dXJlCj4gKyAqIDEuIGZpcnN0LCB0aGUgY29ycmVzcG9uZGlu ZyBmaWVsZHMgb2YgdGhlIEFWQ29kZWNDb250ZXh0IHN0cnVjdHVyZSBhcmUgcHJvY2Vzc2VkLCAo aS5lIC10aHJlYWRzIDQpCj4gKyAqIDIuIHRoZW4geGV2ZC1zcGVjaWZpYyBvcHRpb25zIGFkZGVk IGFzIEFWT3B0aW9uIHRvIHRoZSB4ZXZkIEFWQ29kZWMgaW1wbGVtZW50YXRpb24gKGkuZSAtdGhy ZWFkcyAzKQo+ICsgKiAzLiBmaW5hbGx5LCB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgYWZ0ZXIgdGhl IHhldmQtcGFyYW1zIG9wdGlvbiBhcyB0aGUgcGFyYW1ldGVyIGxpc3Qgb2YgdHlwZSBrZXkgdmFs dWUgYXJlIHByb2Nlc3NlZCAoaS5lIC14ZXZkLXBhcmFtcyAibT0yIikKPiArICoKPiArICogVGhl cmUgYXJlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IGluIGRpZmZlcmVudCB3YXlzLiBJbiB0aGlz IGNhc2UsIHBsZWFzZSBmb2xsb3cgdGhlIGFib3ZlLW1lbnRpb25lZCBvcmRlciBvZiBwcm9jZXNz aW5nLgo+ICsgKiBUaGUgbW9zdCByZWNlbnQgYXNzaWdubWVudHMgb3ZlcndyaXRlIHRoZSBwcmV2 aW91cyB2YWx1ZXMuCj4gKyAqCj4gKyAqIEBwYXJhbSBhdmN0eCBjb2RlYyBjb250ZXh0Cj4gKyAq IEBwYXJhbSBjZHNjIGNvbnRhaW5zIGFsbCBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQg YmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UuCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBvbiBz dWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBp bnQgZ2V0X2NvbmYoY29uc3QgQVZDb2RlY0NvbnRleHQqIGF2Y3R4LCBYRVZEX0NEU0MqIGNkc2Mp Cj4gK3sKPiArICAgIGludCBjcHVfY291bnQgPSBhdl9jcHVfY291bnQoKTsKPiArCj4gKyAgICAv KiByZWFkIG9wdGlvbnMgZnJvbSBBVkNvZGVjQ29udGV4dCAmIGZyb20gWEVWRF9DRFNDICovCj4g KyAgICByZWFkX29wdGlvbnMoYXZjdHgpOwo+ICsKPiArICAgIC8qIHBhcnNlIDotc2VwYXJhdGVk IGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMgYW5kIHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQg ZGVzY3JpcHRvciAoWEVWRF9DRFNDKSAqLwo+ICsgICAgewo+ICsgICAgICAgIFhldmRDb250ZXh0 ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgICAgIEFWRGljdGlvbmFyeUVudHJ5ICpl biA9IE5VTEw7Cj4gKyAgICAgICAgd2hpbGUgKChlbiA9IGF2X2RpY3RfZ2V0KGN0eC0+eGV2ZF9v cHRzLCAiIiwgZW4sIEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCkpKSB7Cj4gKyAgICAgICAgICAgIGlu dCBwYXJzZV9yZXQgPSB4ZXZkX3BhcmFtc19wYXJzZShlbi0+a2V5LCBlbi0+dmFsdWUpOwo+ICsK PiArICAgICAgICAgICAgc3dpdGNoIChwYXJzZV9yZXQpIHsKPiArICAgICAgICAgICAgY2FzZSBY RVZEX1BBUkFNX0JBRF9OQU1FOgo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKChBVkNvZGVjQ29u dGV4dCopYXZjdHgsIEFWX0xPR19XQVJOSU5HLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICJV bmtub3duIG9wdGlvbjogJXMuXG4iLCBlbi0+a2V5KTsKPiArICAgICAgICAgICAgICAgIGJyZWFr Owo+ICsgICAgICAgICAgICBjYXNlIFhFVkRfUEFSQU1fQkFEX1ZBTFVFOgo+ICsgICAgICAgICAg ICAgICAgYXZfbG9nKChBVkNvZGVjQ29udGV4dCopYXZjdHgsIEFWX0xPR19XQVJOSU5HLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMuXG4iLCBlbi0+ a2V5LCBlbi0+dmFsdWUpOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAg IGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgfQo+ICsg ICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvKiBjbGVhciBYRVZTX0NEU0Mgc3RydWN0dXJl ICovCj4gKyAgICBtZW1zZXQoY2RzYywgMCwgc2l6ZW9mKFhFVkRfQ0RTQykpOwo+ICsKPiArICAg IC8qIGluaXQgWEVWRF9DRFNDICovCj4gKyAgICBpZihhdmN0eC0+dGhyZWFkX2NvdW50IDw9IDAp IHsKPiArICAgICAgICBjZHNjLT50aHJlYWRzID0gKGNwdV9jb3VudDxYRVZEX01BWF9UQVNLX0NO VCk/Y3B1X2NvdW50OlhFVkRfTUFYX1RBU0tfQ05UOwo+ICsgICAgfSBlbHNlIGlmKGF2Y3R4LT50 aHJlYWRfY291bnQgPiBYRVZEX01BWF9UQVNLX0NOVCkgewo+ICsgICAgICAgIGNkc2MtPnRocmVh ZHMgPSBYRVZEX01BWF9UQVNLX0NOVDsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgY2RzYy0+ dGhyZWFkcyA9IGF2Y3R4LT50aHJlYWRfY291bnQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJu IFhFVkRfT0s7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBSZWFkIE5BTCB1bml0IGxlbmd0aAo+ICsg KiBAcGFyYW0gYnMgaW5wdXQgZGF0YSAoYml0c3RyZWFtKQo+ICsgKiBAcmV0dXJuIHRoZSBsZW5n aHRoIG9mIE5BTCB1bml0IG9uIHN1Y2Nlc3MsIDAgdmFsdWUgb24gZmFpbHVyZQo+ICsgKi8KPiAr c3RhdGljIHVpbnQzMl90IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKGNvbnN0IHVpbnQ4X3QgKmJzLCBp bnQgYnNfc2l6ZSkKPiArewo+ICsgICAgdWludDMyX3QgbGVuID0gMDsKPiArICAgIFhFVkRfSU5G TyBpbmZvOwo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBpZihic19zaXplPT1YRVZEX05BTF9V TklUX0xFTkdUSF9CWVRFKSB7Cj4gKyAgICAgICAgcmV0ID0geGV2ZF9pbmZvKCh2b2lkKilicywg WEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSwgMSwgJmluZm8pOwo+ICsgICAgICAgIGlmIChYRVZE X0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJDYW5ub3QgZ2V0IGJpdHN0cmVhbSBpbmZvcm1hdGlvblxuIik7Cj4gKyAgICAgICAgICAgIHJl dHVybiAwOwo+ICsgICAgICAgIH0KPiArICAgICAgICBsZW4gPSBpbmZvLm5hbHVfbGVuOwo+ICsg ICAgICAgIGlmKGxlbiA9PSAwKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYml0c3RyZWFtIHNpemUhIFslZF1cbiIsIGJzX3Np emUpOwo+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAg ICByZXR1cm4gbGVuOwo+ICt9Cj4gKwo+ICsvKioKPiArICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNv bnRleHQKPiArICogQHBhcmFtIGN0eCB0aGUgc3RydWN0dXJlIHRoYXQgc3RvcmVzIGFsbCB0aGUg c3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZGVj b2Rlcgo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVy ZQo+ICsgKi8KPiArc3RhdGljIGludCBleHBvcnRfc3RyZWFtX3BhcmFtcyhBVkNvZGVjQ29udGV4 dCAqYXZjdHgsIGNvbnN0IFhldmRDb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIC8vIHVuc2lnbmVk IGludCBudW0gPSAwLCBkZW4gPSAwOwo+ICsgICAgLy8gQHRvZG8gc3VwcG9ydCBvdGhlciBmb3Jt YXRzCj4gKwo+ICsgICAgaW50IHJldDsKPiArICAgIGludCBzaXplOwo+ICsgICAgaW50IGNvbG9y X3NwYWNlOwo+ICsKPiArICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjBQMTA7 Cj4gKwo+ICsgICAgLy8gQHRvZG8gVGhlIEFWQ29kZWNDb250ZXh0IHNob3VsZCBiZSBpbml0aWFs aXplZCBoZXJlIHVzaW5nIGRhdGEgZnJvbSB0aGUgb2JqZWN0IG9mIFhFVkRfU1BTIHR5cGUuCj4g KyAgICAvLwo+ICsgICAgLy8gSXQgc2VlbXMgdG8gYmUgaW1wb3NzaWJsZSByaWdodCBub3cgc2lu Y2UgWEVWRCBBUEkgbGltaXRhdGlvbi4KPiArICAgIC8vIFRoZSBleHRlbnNpb24gZm9yIHRoZSBY RVZEIEFQSSBpcyBuZWVkZWQuCj4gKyAgICAvLyBUbyBiZSBtb3JlIHByZWNpc2UsIHdoYXQgd2Ug bmVlZCBpcyBhY2Nlc3MgdG8gdGhlIG9iamVjdCBvZiBYRVZEX1NQUyB0eXBlIGJlaW5nIGEgcGFy dCBvZiBYRVZEX0NUWCBvYmplY3QuCj4gKyAgICAvLyBUaGUgb2JqZWN0IG9mIFhFVkRfQ1RYIHR5 cGUgaXMgY3JlYXRlZCB3aGlsZSB0aGUgZnVuY3Rpb24geGV2ZF9jcmVhdGUoKSBiZWluZyBhIHBh cnQgb2YgcHVibGljIEFQSSBpcyBjYWxsZWQuCj4gKyAgICAvLwo+ICsgICAgLy8gQHRvZG8gcmVt b3ZlIHRoZSBmb2xsb3dpbmcgaGFyZG9jZWQgaGFzX2JfZnJhbWVzOyBjb25zaWRlciB1c2luZyBz cHMtPm51bV9yZW9yZGVyX3BpY3MgdmFsdWUgaW5zdGVhZAo+ICsgICAgLy8KPiArICAgIC8vIGF2 Y3R4LT5oYXNfYl9mcmFtZXMgICAgICAgID0gMTsgLy8gKHNwcy0+bnVtX3Jlb3JkZXJfcGljcyk/ MTowOwo+ICsgICAgc2l6ZSA9IDQ7Cj4gKyAgICByZXQgPSB4ZXZkX2NvbmZpZyhjdHgtPmlkLCBY RVZEX0NGR19HRVRfQ09ERURfV0lEVEgsICZhdmN0eC0+Y29kZWRfd2lkdGgsICZzaXplKTsKPiAr ICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgImZhaWxlZCB0byBnZXQgY29kZWRfd2lkdGhcbiIpOwo+ICsgICAgICAgIHJldHVy biAtMTsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSB4ZXZkX2NvbmZpZyhjdHgtPmlkLCBYRVZE X0NGR19HRVRfQ09ERURfSEVJR0hULCAmYXZjdHgtPmNvZGVkX2hlaWdodCwgJnNpemUpOwo+ICsg ICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAiZmFpbGVkIHRvIGdldCBjb2RlZF9oZWlnaHRcbiIpOwo+ICsgICAgICAgIHJldHVy biAtMTsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSB4ZXZkX2NvbmZpZyhjdHgtPmlkLCBYRVZE X0NGR19HRVRfV0lEVEgsICZhdmN0eC0+d2lkdGgsICZzaXplKTsKPiArICAgIGlmIChYRVZEX0ZB SUxFRChyZXQpKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImZhaWxl ZCB0byBnZXQgd2lkdGhcbiIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4g KyAgICByZXQgPSB4ZXZkX2NvbmZpZyhjdHgtPmlkLCBYRVZEX0NGR19HRVRfSEVJR0hULCAmYXZj dHgtPmhlaWdodCwgJnNpemUpOwo+ICsgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKPiArICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGdldCBoZWlnaHRcbiIp Owo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSB4ZXZkX2Nv bmZpZyhjdHgtPmlkLCBYRVZEX0NGR19HRVRfQ09MT1JfU1BBQ0UsICZjb2xvcl9zcGFjZSwgJnNp emUpOwo+ICsgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKPiArICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGdldCBjb2xvcl9zcGFjZVxuIik7Cj4gKyAgICAg ICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsgICAgc3dpdGNoKGNvbG9yX3NwYWNlKSB7Cj4gKyAg ICBjYXNlIFhFVkRfQ1NfWUNCQ1I0MDBfMTBMRToKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0RFQlVHLCAiY29sb3Jfc3BhY2UgPSBYRVZEX0NTX1lDQkNSNDAwXzEwTEVcbiIpOwo+ICsg ICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTBMRTsKPiArICAgICAgICBi cmVhazsKPiArICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQyMF8xMExFOgo+ICsgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfREVCVUcsICJjb2xvcl9zcGFjZSA9IFhFVkRfQ1NfWUNCQ1I0MjBfMTBM RVxuIik7Cj4gKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExF Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBYRVZEX0NTX1lDQkNSNDIyXzEwTEU6Cj4g KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImNvbG9yX3NwYWNlID0gWEVWRF9D U19ZQ0JDUjQyMl8xMExFXG4iKTsKPiArICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9G TVRfWVVWNDIyUDEwTEU7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIFhFVkRfQ1NfWUNC Q1I0NDRfMTBMRToKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY29sb3Jf c3BhY2UgPSBYRVZEX0NTX1lDQkNSNDQ0XzEwTEVcbiIpOwo+ICsgICAgICAgIGF2Y3R4LT5waXhf Zm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQMTBMRTsKPiArICAgICAgICBicmVhazsKPiArICAgIGRl ZmF1bHQ6Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgInVua25vd24gY29s b3Igc3BhY2VcbiIpOwo+ICsgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9OT05F Owo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKy8vIEB0b2RvIFVzZSBfWEVW RF9TUFMgZmllbGRzIHRvIGluaXRpYWxpemUgQVZDb2RlY0NvbnRleHQgd2hlbiBpdCBpcyBwb3Nz aWJsZQo+ICsjaWZkZWYgVVNFX1hFVkRfU1BTX0ZJRUxEUwo+ICsgICAgYXZjdHgtPnByb2ZpbGUg PSBzcHMtPnByb2ZpbGVfaWRjOwo+ICsgICAgYXZjdHgtPmxldmVsID0gc3BzLT5sZXZlbF9pZGM7 Cj4gKwo+ICsgICAgZmZfc2V0X3NhcihhdmN0eCwgc3BzLT52dWlfcGFyYW1ldGVycy5zYXIpOwo+ ICsKPiArICAgIGlmIChzcHMtPnZ1aV9wYXJhbWV0ZXJzdnVpLnZpZGVvX3NpZ25hbF90eXBlX3By ZXNlbnRfZmxhZykKPiArICAgICAgICBhdmN0eC0+Y29sb3JfcmFuZ2UgPSBzcHMtPnZ1aV9wYXJh bWV0ZXJzLnZpZGVvX2Z1bGxfcmFuZ2VfZmxhZyA/IEFWQ09MX1JBTkdFX0pQRUcKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IEFWQ09MX1JBTkdFX01QRUc7Cj4gKyAgICBlbHNlCj4g KyAgICAgICAgYXZjdHgtPmNvbG9yX3JhbmdlID0gQVZDT0xfUkFOR0VfTVBFRzsKPiArCj4gKyAg ICBpZiAoc3BzLT52dWlfcGFyYW1ldGVycy5jb2xvdXJfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFn KSB7Cj4gKyAgICAgICAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9IHNwcy0+dnVpX3BhcmFtZXRl cnMuY29sb3VyX3ByaW1hcmllczsKPiArICAgICAgICBhdmN0eC0+Y29sb3JfdHJjICAgICAgID0g c3BzLT52dWlfcGFyYW1ldGVycy50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpYzsKPiArICAgICAgICBh dmN0eC0+Y29sb3JzcGFjZSAgICAgID0gc3BzLT52dWlfcGFyYW1ldGVycy5tYXRyaXhfY29lZmZz Owo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBhdmN0eC0+Y29sb3JfcHJpbWFyaWVzID0gQVZD T0xfUFJJX1VOU1BFQ0lGSUVEOwo+ICsgICAgICAgIGF2Y3R4LT5jb2xvcl90cmMgICAgICAgPSBB VkNPTF9UUkNfVU5TUEVDSUZJRUQ7Cj4gKyAgICAgICAgYXZjdHgtPmNvbG9yc3BhY2UgICAgICA9 IEFWQ09MX1NQQ19VTlNQRUNJRklFRDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoc3BzLT52dWlf cGFyYW1ldGVycy50aW1pbmdfaW5mb19wcmVzZW50X2ZsYWcpIHsKPiArICAgICAgICBudW0gPSBz cHMtPnZ1aV9wYXJhbWV0ZXJzLm51bV91bml0c19pbl90aWNrOwo+ICsgICAgICAgIGRlbiA9IHNw cy0+dnVpX3BhcmFtZXRlcnMudGltZV9zY2FsZTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAocy0+ c2VpLmFsdGVybmF0aXZlX3RyYW5zZmVyLnByZXNlbnQgJiYKPiArICAgICAgICAgICAgYXZfY29s b3JfdHJhbnNmZXJfbmFtZShzLT5zZWkuYWx0ZXJuYXRpdmVfdHJhbnNmZXIucHJlZmVycmVkX3Ry YW5zZmVyX2NoYXJhY3RlcmlzdGljcykgJiYKPiArICAgICAgICAgICAgcy0+c2VpLmFsdGVybmF0 aXZlX3RyYW5zZmVyLnByZWZlcnJlZF90cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgIT0gQVZDT0xf VFJDX1VOU1BFQ0lGSUVEKSB7Cj4gKyAgICAgICAgYXZjdHgtPmNvbG9yX3RyYyA9IHMtPnNlaS5h bHRlcm5hdGl2ZV90cmFuc2Zlci5wcmVmZXJyZWRfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzOwo+ ICsgICAgfQo+ICsjZWxzZQo+ICsgICAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9IEFWQ09MX1BS SV9VTlNQRUNJRklFRDsKPiArICAgIGF2Y3R4LT5jb2xvcl90cmMgICAgICAgPSBBVkNPTF9UUkNf VU5TUEVDSUZJRUQ7Cj4gKyAgICBhdmN0eC0+Y29sb3JzcGFjZSAgICAgID0gQVZDT0xfU1BDX1VO U1BFQ0lGSUVEOwo+ICsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIEluaXRpYWxpemUgZGVjb2RlciBzdGF0aWMgZGF0YQo+ICsgKgo+ICsgKiBAdG9kbyBD b25zaWRlciByZW1vdmluZyB1bnVzZWQgZnVuY3Rpb24KPiArICovCj4gK3N0YXRpYyBhdl9jb2xk IHZvaWQgbGlieGV2ZF9pbml0X3N0YXRpY19kYXRhKEFWQ29kZWMgKmNvZGVjKQo+ICt7Cj4gKyAg ICBVTlVTRUQoY29kZWMpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogSW5pdGlhbGl6ZSBkZWNvZGVy Cj4gKyAqIENyZWF0ZSBkZWNvZGVyIGluc3RhbmNlIGFuZCBhbGxvY2F0ZSBhbGwgdGhlIG5lZWRl ZCByZXNvdXJjZXMKPiArICoKPiArICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQKPiArICog QHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQo+ICsg Ki8KPiArc3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmRfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZj dHgpCj4gK3sKPiArICAgIFhldmRDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsg ICAgaW50IHZhbCA9IDA7Cj4gKyAgICBYRVZEX0NEU0MgKmNkc2MgPSAmKGN0eC0+Y2RzYyk7Cj4g Kwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImVYdHJhLWZhc3QgRXNzZW50aWFs IFZpZGVvIERlY29kZXJcbiIpOwo+ICsjaWZkZWYgUFJJTlRfQVZDVFgKPiArICAgIHByaW50X2F2 Y3R4KGF2Y3R4KTsKPiArI2VuZGlmCj4gKwo+ICsgICAgLyogcmVhZCBjb25maWd1cmF0aW9ucyBh bmQgc2V0IHZhbHVlcyBmb3IgY3JlYXRlZCBkZXNjcmlwdG9yIChYRVZEX0NEU0MpICovCj4gKyAg ICB2YWwgPSBnZXRfY29uZihhdmN0eCwgY2RzYyk7Cj4gKyAgICBpZiAodmFsICE9IFhFVkRfT0sp IHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCJDYW5ub3QgZ2V0IGNvbmZp Z3VyYXRpb25cbiIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICAv KiBjcmVhdGUgZGVjb2RlciAqLwo+ICsgICAgY3R4LT5pZCA9IHhldmRfY3JlYXRlKCYoY3R4LT5j ZHNjKSwgTlVMTCk7Cj4gKyAgICBpZihjdHgtPmlkID09IE5VTEwpIHsKPiArICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGNyZWF0ZSBYRVZEIGVuY29kZXJcbiIpOwo+ ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICBjdHgtPnBhY2tldF9jb3Vu dCA9IDA7Cj4gKyAgICBjdHgtPmRlY29kX2ZyYW1lcyA9IDA7Cj4gKyAgICByZXR1cm4gMDsKPiAr fQo+ICsKPiArLyoqCj4gKyAgKiBEbmNvZGUgcGljdHVyZQo+ICsgICoKPiArICAqIEBwYXJhbSAg ICAgIGF2Y3R4ICAgICAgICAgIGNvZGVjIGNvbnRleHQKPiArICAqIEBwYXJhbSAgICAgIGRhdGEg ICAgICAgICAgIGNvZGVjIHR5cGUgZGVwZW5kZW50IG91dHB1dCBzdHJ1Y3QKPiArICAqIEBwYXJh bVtvdXRdIGdvdF9mcmFtZSAgICAgIGRlY29kZXIgc2V0cyB0byAwIG9yIDEgdG8gaW5kaWNhdGUg dGhhdCBhCj4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkgZnJhbWUg b3Igc3VidGl0bGUgd2FzIHJldHVybmVkIGluCj4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvdXRkYXRhLgo+ICsgICogQHBhcmFtW2luXSAgcGt0ICAgICAgICAgICAgQVZQYWNrZXQg Y29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBkZWNvZGVkCj4gKyAgKiBAcmV0dXJuIGFtb3VudCBv ZiBieXRlcyByZWFkIGZyb20gdGhlIHBhY2tldCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvcgo+ ICsgICogICAgICAgICBjb2RlIG9uIGZhaWx1cmUKPiArICAqLwo+ICtzdGF0aWMgaW50IGxpYnhl dmRfZGVjb2RlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgdm9pZCAqZGF0YSwgaW50ICpnb3RfZnJh bWUsIEFWUGFja2V0ICpwa3QpCj4gK3sKPiArICAgIEFWRnJhbWUgKmZyYW1lID0gZGF0YTsKPiAr ICAgIFhldmRDb250ZXh0ICpjdHggPSBOVUxMOwo+ICsgICAgWEVWRF9JTUdCICogaW1nYiA9IE5V TEw7Cj4gKyAgICBYRVZEX1NUQVQgc3RhdDsKPiArICAgIFhFVkRfQklUQiBiaXRiOwo+ICsgICAg aW50IHJldCwgbmFsdV9zaXplLCBic19yZWFkX3BvczsKPiArCj4gKyAgICBpZihhdmN0eCA9PSBO VUxMKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgaW5w dXQgcGFyYW1ldGVyOiBBVkNvZGVjQ29udGV4dFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ ICsgICAgfQo+ICsgICAgY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmKGN0eCA9PSBO VUxMKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFhF VkQgY29udGV4dFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAg IGlmKHBrdC0+c2l6ZSA+IDApIHsKPiArICAgICAgICBic19yZWFkX3BvcyA9IDA7Cj4gKyAgICAg ICAgaW1nYiA9IE5VTEw7Cj4gKyAgICAgICAgd2hpbGUocGt0LT5zaXplID4gKGJzX3JlYWRfcG9z ICsgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSkpIHsKPiArICAgICAgICAgICAgaW50IG5hbF90 eXBlID0gMDsKPiArCj4gKyAgICAgICAgICAgIG1lbXNldCgmc3RhdCwgMCwgc2l6ZW9mKFhFVkRf U1RBVCkpOwo+ICsgICAgICAgICAgICBtZW1zZXQoJmJpdGIsIDAsIHNpemVvZihYRVZEX0JJVEIp KTsKPiArCj4gKyAgICAgICAgICAgIG5hbHVfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKHBr dC0+ZGF0YSArIGJzX3JlYWRfcG9zLCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKTsKPiArICAg ICAgICAgICAgaWYobmFsdV9zaXplID09IDApIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBiaXRzdHJlYW1cbiIpOwo+ICsgICAgICAgICAg ICAgICAgZ290byBFUlI7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgYnNfcmVhZF9w b3MgKz0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsKPiArCj4gKyAgICAgICAgICAgIGJpdGIu YWRkciA9IHBrdC0+ZGF0YSArIGJzX3JlYWRfcG9zOwo+ICsgICAgICAgICAgICBiaXRiLnNzaXpl ID0gbmFsdV9zaXplOwo+ICsKPiArICAgICAgICAgICAgLy8gUmVhZCBOQUwgVW5pdCBUeXBlIGZy b20gIE5BTCBVbml0IEhlYWRlcgo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyBU aGUgc3RydWN0dXJlIG9mIE5BTCBVbml0IEhlYWRlciBsb29rcyBsaWtlIGZvbGxvd3MKPiArICAg ICAgICAgICAgLy8KPiArICAgICAgICAgICAgLy/DgiArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSsNCj4gKyAgICAgICAgICAgIC8vw4IgfDB8MXwyfDN8NHw1fDZ8N3wwfDF8MnwzfDR8 NXw2fDd8DQo+ICsgICAgICAgICAgICAvL8OCICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r LSstKw0KPiArICAgICAgICAgICAgLy/DgiB8RnwgICBUeXBlICAgIHwgVElEIHwgUmVzZXJ2ZSB8 RXwNCj4gKyAgICAgICAgICAgIC8vw4IgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0r DQo+ICsgICAgICAgICAgICAvLw0KPiArICAgICAgICAgICAgLy8gRjogICAgICAgMSBiaXQgICAt IGZvcmJpZGRlbl96ZXJvX2JpdC4gIFJlcXVpcmVkIHRvIGJlIHplcm8gaW4gW0VWQ10uDQo+ICsg ICAgICAgICAgICAvLyBUeXBlOiAgICA2IGJpdHMgIC0gbmFsX3VuaXRfdHlwZV9wbHVzMSAoVGhp cyBmaWVsZCBzcGVjaWZpZXMgdGhlIE5BTCB1bml0IHR5cGUgYXMgZGVmaW5lZCBpbiBUYWJsZSA0 IG9mIFtFVkNdKQ0KPiArICAgICAgICAgICAgLy8gVElEOiAgICAgMyBiaXRzICAtIG51aF90ZW1w b3JhbF9pZC4gIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSB0ZW1wb3JhbCBpZGVudGlmaWVyIG9m IHRoZSBOQUwgdW5pdC4NCj4gKyAgICAgICAgICAgIC8vIFJlc2VydmU6IDUgYml0cyAgLSBudWhf cmVzZXJ2ZWRfemVyb181Yml0cy4gIFRoaXMgZmllbGQgc2hhbGwgYmUgZXF1YWwgdG8gdGhlIHZl cnNpb24gb2YgdGhlIFtFVkNdIHNwZWNpZmljYXRpb24uDQo+ICsgICAgICAgICAgICAvLyBFOiAg ICAgICAxIGJpdCAgIC0gbnVoX2V4dGVuc2lvbl9mbGFnLiAgVGhpcyBmaWVsZCBzaGFsbCBiZSBl cXVhbCB0aGUgdmVyc2lvbiBvZiB0aGUgW0VWQ10gc3BlY2lmaWNhdGlvbi4NCj4gKyAgICAgICAg ICAgIC8vDQo+ICsgICAgICAgICAgICAvLyBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5v cmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1hdnRjb3JlLXJ0cC1ldmMtMDEjc2VjdGlvbi0xLjEuNA0K PiArDQo+ICsjaWZkZWYgVVNFX0VYUF9HT0xPTUJfU1RVRkYNCj4gKyAgICAgICAgICAgIG5hbF90 eXBlID0gZ2V0X25hbHVfdHlwZShiaXRiLmFkZHIsIDEpOw0KPiArICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfREVCVUcsICJOQUxVIFR5cGU6ICVkXG4iLCBuYWxfdHlwZSk7DQo+ICsj ZWxzZQ0KPiArICAgICAgICAgICAgbWVtY3B5KCZuYWxfdHlwZSxiaXRiLmFkZHIsMSk7DQo+ICsg ICAgICAgICAgICBuYWxfdHlwZSA9IG5hbF90eXBlICYgMHg3RTsNCj4gKyAgICAgICAgICAgIG5h bF90eXBlID0gbmFsX3R5cGUgPj4gMTsNCj4gKyAgICAgICAgICAgIG5hbF90eXBlIC09IDE7DQo+ ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk5BTFUgVHlwZTogJWRc biIsIG5hbF90eXBlKTsNCj4gKyNlbmRpZg0KPiArDQo+ICsgICAgICAgICAgICAvKiBtYWluIGRl Y29kaW5nIGJsb2NrICovDQo+ICsgICAgICAgICAgICByZXQgPSB4ZXZkX2RlY29kZShjdHgtPmlk LCAmYml0YiwgJnN0YXQpOw0KPiArICAgICAgICAgICAgaWYoWEVWRF9GQUlMRUQocmV0KSkgew0K PiArICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRv IGRlY29kZSBiaXRzdHJlYW1cbiIpOw0KPiArICAgICAgICAgICAgICAgIGdvdG8gRVJSOw0KPiAr ICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICBic19yZWFkX3BvcyArPSBuYWx1X3Np emU7DQo+ICsNCj4gKyNpZmRlZiBQUklOVF9OQUxVX0lORk8NCj4gKyAgICAgICAgICAgIHByaW50 X25hbHVfaW5mbyhjdHgpOw0KPiArI2VuZGlmDQo+ICsNCj4gKyAgICAgICAgICAgIGlmKHN0YXQu bmFsdV90eXBlID09IFhFVkRfTlVUX1NQUykgew0KPiArICAgICAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0RFQlVHLCAiRVZDIHN0cmVhbSBwYXJhbWV0ZXJzIGNoYW5nZWRcbiIpOw0K PiArDQo+ICsgICAgICAgICAgICAgICAgaWYoZXhwb3J0X3N0cmVhbV9wYXJhbXMoYXZjdHgsIGN0 eCkhPTApIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgZ290byBFUlI7DQo+ICsgICAgICAgICAg ICAgICAgfQ0KPiArICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi d2lkdGg6ICVkXG4iLGF2Y3R4LT53aWR0aCk7DQo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfREVCVUcsICJoZWlnaHQ6ICVkXG4iLGF2Y3R4LT5oZWlnaHQpOw0KPiArDQo+ ICsgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgIGlmKGh0dHBzOi8vcHJvdGVjdDIu ZmlyZWV5ZS5jb20vdjEvdXJsP2s9NjE0NjhhM2QtMDBjZDlmMGItNjE0NzAxNzItNzRmZTQ4NWZm ZmUwLThhZDc4ZjJiYjdlYzA2MWYmcT0xJmU9MWQ1OTRhMGEtYTIwOS00NTk1LTliMjUtZDE3ZTA5 MjA3OGJjJnU9aHR0cCUzQSUyRiUyRnN0YXQucmVhZCUyRiAhPSBuYWx1X3NpemUpIHsNCj4gKyAg ICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAiZGlmZmVyZW50IHJlYWRp bmcgb2YgYml0c3RyZWFtIChpbjolZCwgcmVhZDolZClcbiwiLCBuYWx1X3NpemUsIHN0YXQucmVh ZCk7DQo+ICsgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICBpZihzdGF0LmZudW0gPj0gMCkg ew0KPiArICAgICAgICAgICAgICAgIGlmIChpbWdiKSB7IC8qIGFscmVhZHkgaGFzIGEgZGVjb2Rl ZCBpbWFnZSAqLw0KPiArICAgICAgICAgICAgICAgICAgICBpbWdiLT5yZWxlYXNlKGltZ2IpOw0K DQpTbyBpZiB0aGVyZSdzIGEgZGVjb2RlZCBpbWFnZSBhbmQgdGhpcyBsb29wIGlzIHJ1biBhZ2Fp biBiZWNhdXNlIA0KYnNfcmVhZF9wb3MgaXMgc3RpbGwgc21hbGxlciB0aGFuIHBrdC0+c2l6ZSwg eW91IGp1c3QgZGlzY2FyZCBpdD8NCg0KWW91IHByb2JhYmx5IHNob3VsZCB3cml0ZSB0aGlzIGRl Y29kZXIgdXNpbmcgdGhlIGRlY291cGxlZCBpbnB1dC9vdXRwdXQgDQpBUEkgKEFWQ29kZWMucmVj ZWl2ZV9mcmFtZSBpbnN0ZWFkIG9mIEFWQ29kZWMuZGVjb2RlKQ0KDQpSRToNCnhldmRfcHVsbCB1 c2VzIHBvb2wgb2Ygb2JqZWN0cyBvZiB0eXBlIFhFVkRfSU1HQi4NClRoZSBwb29sIHNpemUgaXMg ZXF1YWwgTUFYX1BCX1NJWkUgKDI2KSwgc28gcmVsZWFzZSBvYmplY3Qgd2hlbiBpdCBpcyBubyBt b3JlIG5lZWRlZA0KDQo+ICsgICAgICAgICAgICAgICAgICAgIGltZ2IgPSBOVUxMOw0KPiArICAg ICAgICAgICAgICAgIH0NCj4gKyAgICAgICAgICAgICAgICByZXQgPSB4ZXZkX3B1bGwoY3R4LT5p ZCwgJmltZ2IpOw0KPiArICAgICAgICAgICAgICAgIGlmKFhFVkRfRkFJTEVEKHJldCkpIHsNCj4g KyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJmYWlsZWQg dG8gcHVsbCB0aGUgZGVjb2RlZCBpbWFnZSAoZXJyOiVkLCBmcmFtZSM9JWQpXG4iLCByZXQsIHN0 YXQuZm51bSk7DQo+ICsgICAgICAgICAgICAgICAgICAgIGdvdG8gRVJSOw0KPiArICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAocmV0ID09IFhFVkRfT0tfRlJNX0RFTEFZRUQpIHsNCj4gKyAgICAg ICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJkZWxheWVkIGZyYW1l XG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgaWYoaW1nYikgew0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgaW1nYi0+cmVsZWFzZShpbWdiKTsNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIGltZ2IgPSBOVUxMOw0KPiArICAgICAgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAg ICAgICAgfQ0KPiArICAgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsgICAgfSBlbHNlIHsN Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImJ1bXBpbmcgLi4uXG4iKTsN Cj4gKyAgICAgICAgcmV0ID0geGV2ZF9wdWxsKGN0eC0+aWQsICYoaW1nYikpOw0KPiArICAgICAg ICBpZihyZXQgPT0gWEVWRF9FUlJfVU5FWFBFQ1RFRCkgew0KPiArICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfREVCVUcsICJCdW1waW5nIHByb2Nlc3MgY29tcGxldGVkXG4iKTsNCj4g KyAgICAgICAgICAgICpnb3RfZnJhbWUgPSAwOw0KPiArICAgICAgICAgICAgcmV0dXJuIDA7DQo+ ICsgICAgICAgIH0gZWxzZSBpZihYRVZEX0ZBSUxFRChyZXQpKSB7DQo+ICsgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImZhaWxlZCB0byBwdWxsIHRoZSBkZWNvZGVkIGlt YWdlIChlcnI6JWQpXG4iLCByZXQpOw0KPiArICAgICAgICAgICAgZ290byBFUlI7DQo+ICsgICAg ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg ImJ1bXBpbmcgc3VjY2Vzc1xuIik7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBpZihpbWdiKSB7DQo+ICsgICAgICAgIC8qIEB0b2RvIHN1cHBvcnRzIG90aGVyIGNvbG9yIHNw YWNlIGFuZCBiaXQgZGVwdGggKi8NCj4gKyAgICAgICAgaWYoaW1nYi0+Y3MgIT0gWEVWRF9DU19Z Q0JDUjQyMF8xMExFKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIk5vdCBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFt ZShhdmN0eC0+cGl4X2ZtdCkpOw0KPiArICAgICAgICAgICAgZ290byBFUlI7DQo+ICsgICAgICAg IH0NCj4gKw0KPiArICAgICAgICBpZiAoaW1nYi0+d1swXSAhPSBhdmN0eC0+d2lkdGggfHwgaW1n Yi0+aFswXSAhPSBhdmN0eC0+aGVpZ2h0KSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19ERUJVRywgInJlc29sdXRpb24gY2hhbmdlZCAlZHglZCAtPiAlZHglZFxuIiwNCj4g KyAgICAgICAgICAgICAgICAgICBhdmN0eC0+d2lkdGgsIGF2Y3R4LT5oZWlnaHQsIGltZ2ItPndb MF0sIGltZ2ItPmhbMF0pOw0KPiArICAgICAgICAgICAgaWYoZmZfc2V0X2RpbWVuc2lvbnMoYXZj dHgsIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pIDwgMCkgew0KPiArICAgICAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IHNldCBuZXcgZGltZW5zaW9uXG4iKTsN Cj4gKyAgICAgICAgICAgICAgICBnb3RvIEVSUjsNCj4gKyAgICAgICAgICAgIH0NCj4gKyAgICAg ICAgfQ0KPiArDQo+ICsgICAgICAgIGZyYW1lLT5jb2RlZF9waWN0dXJlX251bWJlcisrOw0KPiAr ICAgICAgICBmcmFtZS0+ZGlzcGxheV9waWN0dXJlX251bWJlcisrOw0KPiArICAgICAgICBmcmFt ZS0+Zm9ybWF0ID0gQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRTsNCj4gKw0KPiArI2lmZGVmIFBSSU5U X1hFVkRfSU1HQl9JTkZPDQo+ICsgICAgICAgIHByaW50X3hldmRfaW1nYl9pbmZvKGltZ2IpOw0K PiArI2VuZGlmDQo+ICsNCj4gKyAgICAgICAgaWYgKGZmX2dldF9idWZmZXIoYXZjdHgsIGZyYW1l LCAwKSA8IDApIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi Y2Fubm90IGdldCBBViBidWZmZXJcbiIpOw0KPiArICAgICAgICAgICAgZ290byBFUlI7DQo+ICsg ICAgICAgIH0NCj4gKw0KPiArICAgICAgICBmcmFtZS0+cHRzID0gcGt0LT5wdHM7DQoNCmZmX2dl dF9idWZmZXIoKSBhbHJlYWR5IGZpbGxzIGZpZWxkcyBsaWtlIHRoaXMuDQoNCj4gKyAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJmcmFtZS0+cHRzID0gJWxkXG4iLCBmcmFtZS0+ cHRzKTsNCj4gKw0KPiArICAgICAgICBhdl9pbWFnZV9jb3B5KGZyYW1lLT5kYXRhLCBmcmFtZS0+ bGluZXNpemUsIChjb25zdCB1aW50OF90ICoqKWltZ2ItPmEsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgaW1nYi0+cywgYXZjdHgtPnBpeF9mbXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg aW1nYi0+d1swXSwgaW1nYi0+aFswXSk7DQo+ICsNCj4gKyAgICAgICAgY3R4LT5kZWNvZF9mcmFt ZXMrKzsNCj4gKyAgICAgICAgKmdvdF9mcmFtZSA9IDE7DQo+ICsNCj4gKyNpZmRlZiBQUklOVF9G UkFNRV9JTkZPDQo+ICsgICAgICAgIHByaW50X2ZyYW1lX2luZm8oZnJhbWUpOw0KPiArI2VuZGlm DQo+ICsgICAgICAgIGltZ2ItPnJlbGVhc2UoaW1nYik7DQo+ICsgICAgICAgIGltZ2IgPSBOVUxM Ow0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICpnb3RfZnJhbWUgPSAwOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIGN0eC0+cGFja2V0X2NvdW50Kys7DQo+ICsgICAgcmV0dXJuIHBrdC0+c2l6 ZTsNCj4gKw0KPiArRVJSOg0KPiArICAgIGlmKGltZ2IpIHsNCj4gKyAgICAgICAgaW1nYi0+cmVs ZWFzZShpbWdiKTsNCj4gKyAgICAgICAgaW1nYiA9IE5VTEw7DQo+ICsgICAgfQ0KPiArICAgICpn b3RfZnJhbWUgPSAwOw0KPiArICAgIHJldHVybiAtMTsNCg0KUmV0dXJuIHByb3BlciBBVkVSUk9S IGNvZGVzLCBoZXJlIGFuZCBldmVyeXdoZXJlIGVsc2UuDQoNCkZJWEVEDQoNCg0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAqIERlc3Ryb3kgZGVjb2Rlcg0KPiArICoNCj4gKyAqIEBwYXJhbSBhdmN0 eCBjb2RlYyBjb250ZXh0DQo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcw0KPiArICovDQo+ICtz dGF0aWMgYXZfY29sZCBpbnQgbGlieGV2ZF9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ ICt7DQo+ICsgICAgWGV2ZENvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+ICsgICAg aWYoY3R4LT5pZCkgew0KPiArICAgICAgICB4ZXZkX2RlbGV0ZShjdHgtPmlkKTsNCj4gKyAgICAg ICAgY3R4LT5pZCA9IE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFhldmRDb250ZXh0LCB4KQ0KPiAr I2RlZmluZSBWRCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0RFQ09ESU5H X1BBUkFNDQo+ICsNCj4gKy8vIEB0b2RvIGNvbnNpZGVyIHVzaW5nIGZvbGxvd2luZyBvcHRpb25z ICguL2ZmbXBlZyAtLWhlbHAgZGVjb2Rlcj1saWJ4ZXZkKQ0KPiArLy8NCj4gK3N0YXRpYyBjb25z dCBBVk9wdGlvbiBvcHRpb25zW10gPSB7DQo+ICsgICAgeyAieGV2ZC1wYXJhbXMiLCAgICAgICAg ICAgICAgICAib3ZlcnJpZGUgdGhlIHhldmQgY29uZmlndXJhdGlvbiB1c2luZyBhIDotc2VwYXJh dGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMiLCBPRkZTRVQoeGV2ZF9vcHRzKSwgQVZf T1BUX1RZUEVfRElDVCwgICB7IDAgfSwgMCwgMCwgVkQgfSwNCj4gKyAgICB7IE5VTEwgfQ0KPiAr fTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgeGV2ZF9jbGFzcyA9IHsNCj4gKyAgICAu Y2xhc3NfbmFtZSA9ICJsaWJ4ZXZkIiwNCj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRf aXRlbV9uYW1lLA0KPiArICAgIC5vcHRpb24gICAgID0gb3B0aW9ucywNCj4gKyAgICAudmVyc2lv biAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwNCj4gK307DQo+ICsNCj4gKy8vLyBAdG9kbyBw cm92aWRlIGltcGxlbWVudGF0aW9uDQo+ICtzdGF0aWMgY29uc3QgQVZDb2RlY0RlZmF1bHQgeGV2 ZF9kZWZhdWx0c1tdID0gew0KPiArICAgIHsgImIiLCAiMCIgfSwNCj4gKyAgICB7IE5VTEwgfSwN Cj4gK307DQo+ICsNCj4gK0FWQ29kZWMgZmZfbGlieGV2ZF9kZWNvZGVyID0gew0KPiArICAgIC5u YW1lICAgICAgICAgICAgID0gImV2YyIsDQo+ICsgICAgLmxvbmdfbmFtZSAgICAgICAgPSBOVUxM X0lGX0NPTkZJR19TTUFMTCgiRVZDIC8gTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcgKEVW QykiKSwNCj4gKyAgICAudHlwZSAgICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywNCj4g KyAgICAuaWQgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywNCj4gKyAgICAuaW5pdCAg ICAgICAgICAgICA9IGxpYnhldmRfaW5pdCwNCj4gKyAgICAuaW5pdF9zdGF0aWNfZGF0YSA9IGxp YnhldmRfaW5pdF9zdGF0aWNfZGF0YSwNCj4gKyAgICAuZGVjb2RlICAgICAgICAgICA9IGxpYnhl dmRfZGVjb2RlLA0KPiArICAgIC5jbG9zZSAgICAgICAgICAgID0gbGlieGV2ZF9jbG9zZSwNCj4g KyAgICAucHJpdl9kYXRhX3NpemUgICA9IHNpemVvZihYZXZkQ29udGV4dCksDQo+ICsgICAgLnBy aXZfY2xhc3MgICAgICAgPSAmeGV2ZF9jbGFzcywNCj4gKyAgICAuZGVmYXVsdHMgICAgICAgICA9 IHhldmRfZGVmYXVsdHMsDQo+ICsgICAgLmNhcGFiaWxpdGllcyAgICAgPSBBVl9DT0RFQ19DQVBf REVMQVkgfCBBVl9DT0RFQ19DQVBfQVVUT19USFJFQURTIHwgQVZfQ09ERUNfQ0FQX0FWT0lEX1BS T0JJTkcsDQoNCk1pc3NpbmcgQVZfQ09ERUNfQ0FQX0RSMSBzaW5jZSB5b3UncmUgdXNpbmcgZmZf Z2V0X2J1ZmZlcigpLg0KDQpGSVhFRA0KDQo+ICsgICAgLndyYXBwZXJfbmFtZSAgICAgPSAibGli eGV2ZCIsDQo+ICt9Ow0KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJ4ZXZlLmMgYi9saWJh dmNvZGVjL2xpYnhldmUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwLi5mMzRhMWQ2ZWZkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliYXZjb2RlYy9saWJ4 ZXZlLmMNCj4gQEAgLTAsMCArMSwxMTg1IEBADQo+ICsvKg0KPiArICogbGlieGV2ZSBlbmNvZGVy DQo+ICsgKiBFVkMgKE1QRUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nKSBlbmNvZGluZyB1c2lu ZyBYRVZFIE1QRUctNSBFVkMgZW5jb2RlciBsaWJyYXJ5DQo+ICsgKg0KPiArICogQ29weXJpZ2h0 IChDKSAyMDIxIERhd2lkIEtvemluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29tPg0KPiArICoN Cj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4NCj4gKyAqDQo+ICsgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ICsgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj DQo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXINCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KPiArICoNCj4gKyAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YN Cj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VDQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLg0KPiArICoNCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCj4gKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0ENCj4gKyAqLw0KPiArDQo+ICsjaWYgZGVmaW5lZChfTVNDX1ZFUikN Cj4gKyNkZWZpbmUgWEVWRV9BUElfSU1QT1JUUyAxDQo+ICsjZW5kaWYNCj4gKw0KPiArI2luY2x1 ZGUgPHhldmUuaD4NCj4gKw0KPiArI2luY2x1ZGUgPGZsb2F0Lmg+DQo+ICsjaW5jbHVkZSA8c3Rk bGliLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCINCj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvY29tbW9uLmgiDQo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIg0K PiArI2luY2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiDQo+ICsjaW5jbHVkZSAibGliYXZ1dGls L3BpeGZtdC5oIg0KPiArI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lLmgiDQo+ICsNCj4gKyNpbmNs dWRlICJhdmNvZGVjLmgiDQo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCINCj4gKyNpbmNsdWRlICJw YWNrZXRfaW50ZXJuYWwuaCINCj4gKw0KPiArI2RlZmluZSBNQVhfQlNfQlVGICgxNioxMDI0KjEw MjQpDQo+ICsNCj4gKy8qKg0KPiArICogRXJyb3IgY29kZXMNCj4gKyAqLw0KPiArI2RlZmluZSBY RVZFX1BBUkFNX0JBRF9OQU1FIC0xMDANCj4gKyNkZWZpbmUgWEVWRV9QQVJBTV9CQURfVkFMVUUg LTIwMA0KPiArDQo+ICsvKioNCj4gKyAqIE1hY3JvIGZvciBlbGltaW5hdGluZyB0aGUgdW51c2Vk IHZhcmlhYmxlIHdhcm5pbmcNCj4gKyAqLw0KPiArI2RlZmluZSBVTlVTRUQoeCkgKHZvaWQpKHgp DQo+ICsNCj4gKy8qKg0KPiArICogRW5jb2RlciBzdGF0ZXMNCj4gKyAqDQo+ICsgKiBTVEFURV9F TkNPRElORyAtIHRoZSBlbmNvZGVyIHJlY2VpdmVzIGFuZCBwcm9jZXNzZXMgaW5wdXQgZnJhbWVz DQo+ICsgKiBTVEFURV9CVU1QSU5HICAtIHRoZXJlIGFyZSBubyBtb3JlIGlucHV0IGZyYW1lcywg aG93ZXZlciB0aGUgZW5jb2RlciBzdGlsbCBwcm9jZXNzZXMgcHJldmlvdXNseSByZWNlaXZlZCBk YXRhDQo+ICsgKiBTVEFURV9TS0lQUElORyAtIHNraXBwaW5nIGlucHV0IGZyYW1lcw0KPiArICov DQo+ICt0eXBlZGVmIGVudW0gU3RhdGUgew0KPiArICAgIFNUQVRFX0VOQ09ESU5HLA0KPiArICAg IFNUQVRFX0JVTVBJTkcsDQo+ICsgICAgU1RBVEVfU0tJUFBJTkcNCj4gK30gU3RhdGU7DQo+ICsN Cj4gKy8qKg0KPiArICogVGhlIHN0cnVjdHVyZSBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lh dGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUgTVBFRy01IEVWQyBlbmNvZGVyDQo+ICsgKiBU aGUgZmlyc3QgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuIEFWQ2xhc3Mgc3RydWN0IChAc2VlIGh0 dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2VuL3RydW5rL3N0cnVjdEFWQ2xhc3MuaHRtbCNkZXRhaWxz KS4NCj4gKyAqLw0KPiArdHlwZWRlZiBzdHJ1Y3QgWGV2ZUNvbnRleHQgew0KPiArICAgIGNvbnN0 IEFWQ2xhc3MgKmNsYXNzOw0KPiArDQo+ICsgICAgWEVWRSBpZDsgICAgICAgIC8vIFhFVkUgaW5z dGFuY2UgaWRlbnRpZmllcg0KPiArICAgIFhFVkVfQ0RTQyBjZHNjOyAvLyBjb2RpbmcgcGFyYW1l dGVycyBpLmUgcHJvZmlsZSwgd2lkdGggJiBoZWlnaHQgb2YgaW5wdXQgZnJhbWUsIG51bSBvZiB0 aGVyYWRzLCBmcmFtZSByYXRlIC4uLg0KPiArICAgIFhFVkVfQklUQiBiaXRiOyAvLyBiaXRzdHJl YW0gYnVmZmVyIChvdXRwdXQpDQo+ICsgICAgWEVWRV9TVEFUIHN0YXQ7IC8vIGVuY29kaW5nIHN0 YXR1cyAob3V0cHV0KQ0KPiArICAgIFhFVkVfSU1HQiBpbWdiOyAvLyBpbWFnZSBidWZmZXIgKGlu cHV0KQ0KPiArDQo+ICsgICAgU3RhdGUgc3RhdGU7IC8vIGVuY29kZXIgc3RhdGUgKHNraXBwaW5n LCBlbmNvZGluZywgYnVtcGluZykNCj4gKw0KPiArICAgIGludCBlbmNvZF9mcmFtZXM7ICAgLy8g bnVtIG9mIGVuY29kZWQgZnJhbWVzDQo+ICsgICAgZG91YmxlIGJ5dGVzX3RvdGFsOyAvLyBlbmNv ZGVkIGJpdHN0cmVhbSBieXRlIHNpemUNCj4gKyAgICBkb3VibGUgYml0cmF0ZTsgICAgIC8vIGJp dHMgcGVyIHNlY29uZA0KPiArICAgIGludCBwYWNrZXRfY291bnQ7ICAgLy8gbnVtIG9mIHBhY2tl dHMgY3JlYXRlZCBieSBlbmNvZGVyDQo+ICsNCj4gKyAgICAvLyBDaHJvbWEgc3Vic2FtcGxpbmcN Cj4gKyAgICBpbnQgd2lkdGhfbHVtYTsNCj4gKyAgICBpbnQgaGVpZ2h0X2x1bWE7DQo+ICsgICAg aW50IHdpZHRoX2Nocm9tYTsNCj4gKyAgICBpbnQgaGVpZ2h0X2Nocm9tYTsNCj4gKw0KPiArICAg IGludCBwcm9maWxlX2lkOyAgLy8gZW5jb2RlciBwcm9maWxlIChtYWluLCBiYXNlbGluZSkNCj4g KyAgICBpbnQgcHJlc2V0X2lkOyAgIC8vIHByZXNldCBvZiB4ZXZlICggZmFzdCwgbWVkaXVtLCBz bG93LCBwbGFjZWJvKQ0KPiArICAgIGludCB0dW5lX2lkOyAgICAgLy8gdHVuZSBvZiB4ZXZlIChw c25yLCB6ZXJvbGF0ZW5jeSkNCj4gKyAgICBpbnQgaW5wdXRfZGVwdGg7IC8vIGlucHV0IGJpdC1k ZXB0aDogOGJpdCwgMTBiaXQNCj4gKyAgICBpbnQgaGFzaDsNCj4gKw0KPiArICAgIC8qIHZhcmlh YmxlcyBmb3IgaW5wdXQgcGFyYW1ldGVyICovDQo+ICsgICAgY2hhciAqIG9wX3ByZXNldDsNCj4g KyAgICBjaGFyICogb3BfdHVuZTsNCj4gKyAgICBpbnQgICAgb3BfcXA7DQo+ICsgICAgaW50ICAg IG9wX2NyZjsNCj4gKw0KPiArICAgIC8vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycw0KPiArICAg IC8vIHhldmUgY29uZmlndXJhdGlvbiByZWFkIGZyb20gYSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtl eT12YWx1ZSBwYXJhbWV0ZXJzDQo+ICsgICAgQVZEaWN0aW9uYXJ5ICp4ZXZlX3BhcmFtczsNCj4g K30gWGV2ZUNvbnRleHQ7DQo+ICsNCj4gKy8qKg0KPiArICogR2V0cyBYZXZlIGVuY29kZXIgcHJl LWRlZmluZWQgcHJvZmlsZQ0KPiArICoNCj4gKyAqIEBwYXJhbSBwcm9maWxlIHN0cmluZyBkZXNj cmliaW5nIFhldmUgZW5jb2RlciBwcm9maWxlIChiYXNlbGluZSwgbWFpbikNCj4gKyAqIEByZXR1 cm4gWEVWRSBwcmUtZGVmaW5lZCBwcm9maWxlIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9u IGZhaWx1cmUNCj4gKyAqLw0KPiArc3RhdGljIGludCBnZXRfcHJvZmlsZV9pZChjb25zdCBjaGFy ICogcHJvZmlsZSkNCj4gK3sNCj4gKyAgICBpZiAoIXN0cmNtcChwcm9maWxlLCAiYmFzZWxpbmUi KSkgew0KPiArICAgICAgICByZXR1cm4gWEVWRV9QUk9GSUxFX0JBU0VMSU5FOw0KPiArICAgIH0g ZWxzZSBpZiAoIXN0cmNtcChwcm9maWxlLCAibWFpbiIpKSB7DQo+ICsgICAgICAgIHJldHVybiBY RVZFX1BST0ZJTEVfTUFJTjsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgICByZXR1cm4gLTE7 DQo+ICsgICAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEdldHMgWGV2ZSBwcmUtZGVmaW5l ZCBwcmVzZXQNCj4gKyAqDQo+ICsgKiBAcGFyYW0gcHJlc2V0IHN0cmluZyBkZXNjcmliaW5nIFhl dmUgZW5jb2RlciBwcmVzZXQgKGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibyApDQo+ICsgKiBA cmV0dXJuIFhFVkUgcHJlLWRlZmluZWQgcHJvZmlsZSBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1 ZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgZ2V0X3ByZXNldF9pZChjb25zdCBj aGFyICogcHJlc2V0KQ0KPiArew0KPiArICAgIGlmKCghc3RyY21wKHByZXNldCwgImZhc3QiKSkp IHsNCj4gKyAgICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX0ZBU1Q7DQo+ICsgICAgfSBlbHNlIGlm ICghc3RyY21wKHByZXNldCwgIm1lZGl1bSIpKSB7DQo+ICsgICAgICAgIHJldHVybiBYRVZFX1BS RVNFVF9NRURJVU07DQo+ICsgICAgfSBlbHNlIGlmICghc3RyY21wKHByZXNldCwgInNsb3ciKSkg ew0KPiArICAgICAgICByZXR1cm4gWEVWRV9QUkVTRVRfU0xPVzsNCj4gKyAgICB9IGVsc2UgaWYg KCFzdHJjbXAocHJlc2V0LCAicGxhY2VibyIpKSB7DQo+ICsgICAgICAgIHJldHVybiBYRVZFX1BS RVNFVF9QTEFDRUJPOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIHJldHVybiAtMTsNCj4g KyAgICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogR2V0cyBYZXZlIHByZS1kZWZpbmVkIHR1 bmUgaWQNCj4gKyAqDQo+ICsgKiBAcGFyYW0gcHJlc2V0IHN0cmluZyBkZXNjcmliaW5nIFhldmUg ZW5jb2RlciBwcmVzZXQgKGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibyApDQo+ICsgKiBAcmV0 dXJuIFhFVkUgcHJlLWRlZmluZWQgcHJvZmlsZSBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBv biBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgZ2V0X3R1bmVfaWQoY29uc3QgY2hhciAq IHR1bmUpDQo+ICt7DQo+ICsgICAgaWYoKCFzdHJjbXAodHVuZSwgInBzbnIiKSkpIHsNCj4gKyAg ICAgICAgcmV0dXJuIFhFVkVfVFVORV9QU05SOw0KPiArICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0 dW5lLCAiemVyb2xhdGVuY3kiKSkgew0KPiArICAgICAgICByZXR1cm4gWEVWRV9UVU5FX1pFUk9M QVRFTkNZOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICB9 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQga2Jwc19zdHJfdG9faW50KGNoYXIgKnN0cikNCj4g K3sNCj4gKyAgICBpbnQga2JwcyA9IDA7DQo+ICsgICAgaWYgKHN0cmNocihzdHIsICdLJykgfHwg c3RyY2hyKHN0ciwgJ2snKSkgew0KPiArICAgICAgICBjaGFyICp0bXAgPSBzdHJ0b2soc3RyLCAi S2sgIik7DQo+ICsgICAgICAgIGticHMgPSAoaW50KShhdG9mKHRtcCkpOw0KPiArICAgIH0gZWxz ZSBpZiAoc3RyY2hyKHN0ciwgJ00nKSB8fCBzdHJjaHIoc3RyLCAnbScpKSB7DQo+ICsgICAgICAg IGNoYXIgKnRtcCA9IHN0cnRvayhzdHIsICJNbSAiKTsNCj4gKyAgICAgICAga2JwcyA9IChpbnQp KGF0b2YodG1wKSAqIDEwMDApOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGticHMgPSBh dG9pKHN0cik7DQo+ICsgICAgfQ0KPiArICAgIHJldHVybiBrYnBzOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAqIFBhcnNlIDotc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMN Cj4gKyAqDQo+ICsgKiBAcGFyYW0ga2V5DQo+ICsgKiBAcGFyYW0gdmFsdWUNCj4gKyAqIEBwYXJh bSB4ZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBh c3NvY2lhdGVkIHdpdGgNCj4gKyAqICAgICAgICAgICB0aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVH LTUgRVZDIGVuY29kZXINCj4gKyAqIEBwYXJhbSBwYXJhbSBjb2RpbmcgcGFyYW1ldGVycw0KPiAr ICoNCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJl DQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgcGFyc2VfeGV2ZV9wYXJhbXMoY29uc3QgY2hhcioga2V5 LCBjb25zdCBjaGFyKiB2YWx1ZSwgWGV2ZUNvbnRleHQqIHhlLCBYRVZFX1BBUkFNKiBwYXJhbSkN Cj4gK3sNCj4gKyAgICBpZigha2V5KSB7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJJdmFsaWQgYXJndW1lbnQ6IGtleSBzdHJpbmcgaXMgTlVMTFxuIik7DQo+ICsgICAg ICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCj4gKyAgICB9DQo+ICsgICAgaWYoIXZh bHVlKSB7DQo+ICsgICAgICAgIGlmIChzdHJjbXAoa2V5LCAiaGFzaCIpID09IDApIHsNCj4gKyAg ICAgICAgICAgIHhlLT5oYXNoID0gMTsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfSU5GTywgImVtYmVkZGluZyBzaWduYXR1cmUgaXMgZW5hYmxlZFxuIik7DQo+ICsgICAgICAg IH0gZWxzZSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSXZh bGlkIGFyZ3VtZW50OiB2YWx1ZSBzdHJpbmcgaXMgTlVMTFxuIik7DQo+ICsgICAgICAgICAgICBy ZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9IGVsc2Ug aWYgKHN0cmNtcChrZXksICJ2YnYtYnVmc2l6ZSIpID09IDAgKSB7DQo+ICsgICAgICAgIHBhcmFt LT52YnZfYnVmc2l6ZSA9IGticHNfc3RyX3RvX2ludCgoY2hhciopdmFsdWUpOw0KPiArICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJWQlYgYnVmZmVyIHNpemU6ICVka2JpdHNcbiIs IHBhcmFtLT52YnZfYnVmc2l6ZSk7DQo+ICsgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAicmMt dHlwZSIpID09IDAgKSB7DQo+ICsgICAgICAgIGludCByY190eXBlID0gYXRvaSh2YWx1ZSk7DQo+ ICsgICAgICAgIGlmKHJjX3R5cGUgPCAwIHx8IHJjX3R5cGUgPiAyKSB7DQo+ICsgICAgICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiUmF0ZSBjb250cm9sIHR5cGUgWyAwKHJjX29m ZikgLyAxKENCUikgXSBiYWQgdmFsdWU6ICVkXG4iLCByY190eXBlKTsNCj4gKyAgICAgICAgICAg IHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBw YXJhbS0+cmNfdHlwZSA9IHJjX3R5cGU7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df SU5GTywgIlJhdGUgY29udHJvbCB0eXBlIFsgMChyY19vZmYpIC8gMShDQlIpIF0gOiAlZFxuIiwg cmNfdHlwZSk7DQo+ICsgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAiYmZyYW1lcyIpID09IDAg KSB7DQo+ICsgICAgICAgIGludCBiZnJhbWVzID0gYXRvaSh2YWx1ZSk7DQo+ICsgICAgICAgIGlm KGJmcmFtZXMgPCAwKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiYmZyYW1lczogYmFkIHZhbHVlOiAlZFxuIiwgYmZyYW1lcyk7DQo+ICsgICAgICAgICAgICBy ZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgcGFy YW0tPmJmcmFtZXMgPSBiZnJhbWVzOw0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lO Rk8sICJiZnJhbWVzIDogJWRcbiIsIGJmcmFtZXMpOw0KPiArICAgIH0gZWxzZSBpZiAoc3RyY21w KGtleSwgInByb2ZpbGUiKSA9PSAwICkgew0KPiArICAgICAgICBjb25zdCBjaGFyKiBwcm9maWxl ID0gdmFsdWU7DQo+ICsgICAgICAgIGludCBwcm9maWxlX2lkOw0KPiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0lORk8sICJwcm9maWxlIChiYXNlbGluZSwgbWFpbik6ICVzXG4iLCBwcm9m aWxlKTsNCj4gKyAgICAgICAgcHJvZmlsZV9pZCA9IGdldF9wcm9maWxlX2lkKHByb2ZpbGUpOw0K PiArICAgICAgICBpZiAocHJvZmlsZV9pZCA8IDApIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHhldmUgcGFyYW06IHByb2ZpbGUoJXMpXG4iLCBw cm9maWxlKTsNCj4gKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCj4g KyAgICAgICAgfQ0KPiArICAgICAgICB4ZS0+cHJvZmlsZV9pZCA9IHByb2ZpbGVfaWQ7DQo+ICsg ICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAicHJlc2V0IikgPT0gMCApIHsNCj4gKyAgICAgICAg Y29uc3QgY2hhciogcHJlc2V0ID0gdmFsdWU7DQo+ICsgICAgICAgIGludCBwcmVzZXRfaWQ7DQo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlByZXNldCBvZiB4ZXZlIChmYXN0 LCBtZWRpdW0sIHNsb3csIHBsYWNlYm8pOiAlc1xuIiwgcHJlc2V0KTsNCj4gKyAgICAgICAgcHJl c2V0X2lkID0gZ2V0X3ByZXNldF9pZChwcmVzZXQpOw0KPiArICAgICAgICBpZiggcHJlc2V0X2lk IDwgMCkgew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFs aWQgeGV2ZSBwYXJhbTogcHJlc2V0KCVzKVxuIiwgcHJlc2V0KTsNCj4gKyAgICAgICAgICAgIHJl dHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICB4ZS0+ cHJlc2V0X2lkID0gcHJlc2V0X2lkOw0KPiArICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInR1 bmUiKSA9PSAwICkgew0KPiArICAgICAgICBjb25zdCBjaGFyKiB0dW5lID0gdmFsdWU7DQo+ICsg ICAgICAgIGludCB0dW5lX2lkOw0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8s ICJUdW5lIG9mIHhldmUgKHBzbnIsIHplcm9sYXRlbmN5KTogJXNcbiIsIHR1bmUpOw0KPiArICAg ICAgICB0dW5lX2lkPSBnZXRfdHVuZV9pZCh0dW5lKTsNCj4gKyAgICAgICAgaWYoIHR1bmVfaWQg PCAwKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxp ZCB4ZXZlIHBhcmFtOiB0dW5lKCVzKVxuIiwgdHVuZSk7DQo+ICsgICAgICAgICAgICByZXR1cm4g WEVWRV9QQVJBTV9CQURfVkFMVUU7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgeGUtPnR1bmVf aWQgPSB0dW5lX2lkOw0KPiArICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgImJpdHJhdGUiKSA9 PSAwICkgew0KPiArICAgICAgICBwYXJhbS0+Yml0cmF0ZSA9IGticHNfc3RyX3RvX2ludCgoY2hh ciAqKXZhbHVlKTsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiQml0cmF0 ZSA9ICVka2Jwc1xuIiwgcGFyYW0tPmJpdHJhdGUpOw0KPiArICAgIH0gZWxzZSBpZiAoc3RyY21w KGtleSwgInEiKSA9PSAwIHx8IHN0cmNtcChrZXksICJxcCIpID09IDApIHsNCj4gKyAgICAgICAg aW50IHFwID0gYXRvaSh2YWx1ZSk7DQo+ICsgICAgICAgIGlmKHFwIDwgMCB8fCBxcCA+IDUxKSB7 DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBRUCB2 YWx1ZSAoMH41MSkgOiVkXG4iLCBxcCk7DQo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJB TV9CQURfVkFMVUU7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgcGFyYW0tPnFwID0gcXA7DQo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlFQIHZhbHVlICgwfjUxKTogJWRc biIsIHBhcmFtLT5xcCk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19FUlJPUiwgIlVua25vd24geGV2ZSBjb2RlYyBvcHRpb246ICVzXG4iLCBrZXkpOw0K PiArICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfTkFNRTsNCj4gKyAgICB9DQo+ICsgICAg cmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogQ29udmVydCBmZm1wZWcgcGl4ZWwg Zm9ybWF0IChBVlBpeGVsRm9ybWF0KSB0byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIGZvcm1hdA0K PiArICoNCj4gKyAqIEBwYXJhbVtpbl0gIHB4X2ZtdCBwaXhlbCBmb3JtYXQgKEBzZWUgaHR0cHM6 Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvcGl4Zm10XzhoLmh0bWwjYTlhOGUzMzVjZjNiZTQ3 MjA0MmJjOWYwY2Y4MGNkNGM1KQ0KPiArICogQHBhcmFtW291dF0gY29sb3JfZm9ybWF0IFhFVkUg cHJlLWRlZmluZWQgY29sb3IgZm9ybWF0IChAc2VlIHhldmUuaCkNCj4gKyAqIEBwYXJhbVtvdXRd IGJpdF9kZXB0aCBiaXQgZGVwdGgNCj4gKyAqDQo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg bmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQ0KPiArICovDQo+ICtzdGF0aWMgaW50IGdldF9waXhf Zm10KGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10LCBpbnQgKmNvbG9yX2Zvcm1hdCwgaW50ICpi aXRfZGVwdGgpDQo+ICt7DQo+ICsgICAgc3dpdGNoIChwaXhfZm10KSB7DQo+ICsgICAgY2FzZSBB Vl9QSVhfRk1UX1lVVjQyMFA6DQo+ICsgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lD QkNSNDIwOw0KPiArICAgICAgICAqYml0X2RlcHRoID0gODsNCj4gKyAgICAgICAgYnJlYWs7DQo+ ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6DQo+ICsgICAgICAgICpjb2xvcl9mb3JtYXQg PSBYRVZFX0NGX1lDQkNSNDIyOw0KPiArICAgICAgICAqYml0X2RlcHRoID0gODsNCj4gKyAgICAg ICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6DQo+ICsgICAgICAgICpj b2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDQ0Ow0KPiArICAgICAgICAqYml0X2RlcHRoID0g ODsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMDoN Cj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjA7DQo+ICsgICAgICAg ICpiaXRfZGVwdGggPSAxMDsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhf Rk1UX1lVVjQyMlAxMDoNCj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0 MjI7DQo+ICsgICAgICAgICpiaXRfZGVwdGggPSAxMDsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsg ICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMDoNCj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9 IFhFVkVfQ0ZfWUNCQ1I0NDQ7DQo+ICsgICAgICAgICpiaXRfZGVwdGggPSAxMDsNCj4gKyAgICAg ICAgYnJlYWs7DQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhF VkVfQ0ZfVU5LTk9XTjsNCj4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiArICAgIH0NCj4gKyAgICBy ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBh IHBvaW50ZXIgdG8gdmFyaWFibGUgb2YgdHlwZSBYRVZFX0NEU0MuDQo+ICsgKiBYRVZFX0NEU0Mg Y29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXpl ZCBiZWZvcmUgaXRzIHVzZS4NCj4gKyAqDQo+ICsgKiBUaGUgZmllbGQgdmFsdWVzIG9mIHRoZSBY RVZFX0NEU0Mgc3RydWN0dXJlIGFyZSBwb3B1bGF0ZWQgYmFzZWQgb246DQo+ICsgKiAtIHRoZSBj b3JyZXNwb25kaW5nIGZpZWxkIHZhbHVlcyBvZiB0aGUgQXZDb2RlY0NvbmV0eHQgc3RydWN0dXJl LA0KPiArICogLSB0aGUgeGV2ZSBlbmNvZGVyIHNwZWNpZmljIG9wdGlvbiB2YWx1ZXMsDQo+ICsg KiAgICh0aGUgZnVsbCBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB4ZXZlIGVuY29kZXIg aXMgZGlzcGxheWVkIGFmdGVyIGV4ZWN1dGluZyB0aGUgY29tbWFuZCAuL2ZmbXBlZyAtLWhlbHAg ZW5jb2RlciA9IGxpYnhldmUpDQo+ICsgKiAtIGFuZCB0aGUgeGV2ZSBlbmNvZGVyIG9wdGlvbnMg c3BlY2lmaWVkIGFzIGEgbGlzdCBvZiBrZXkgdmFsdWUgcGFpcnMgZm9sbG93aW5nIHhldmUtcGFy YW1zIG9wdGlvbg0KPiArICoNCj4gKyAqIE9yZGVyIG9mIGlucHV0IHByb2Nlc3NpbmcgYW5kIHBv cHVsYXRpbmcgdGhlIFhFVkVfQ0RTQyBzdHJ1Y3R1cmUNCj4gKyAqIDEuIGZpcnN0LCB0aGUgY29y cmVzcG9uZGluZyBmaWVsZHMgb2YgdGhlIEFWQ29kZWNDb250ZXh0IHN0cnVjdHVyZSBhcmUgcHJv Y2Vzc2VkLCAoaS5lIC1waXhfZm10IHl1djQyMHAgLXM6diAxOTIweDEwODAgLXIgMzAgLXByb2Zp bGU6diAwKQ0KPiArICogMi4gdGhlbiB4ZXZlLXNwZWNpZmljIG9wdGlvbnMgYWRkZWQgYXMgQVZP cHRpb24gdG8gdGhlIHhldmUgQVZDb2RlYyBpbXBsZW1lbnRhdGlvbiAoaS5lIC10aHJlYWRzX2Nu dCAzIC1wcmVzZXQgMCkNCj4gKyAqIDMuIGZpbmFsbHksIHRoZSBvcHRpb25zIHNwZWNpZmllZCBh ZnRlciB0aGUgeGV2ZS1wYXJhbXMgb3B0aW9uIGFzIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiB0eXBl IGtleSB2YWx1ZSBhcmUgcHJvY2Vzc2VkIChpLmUgLXhldmUtcGFyYW1zICJtPTI6cT0xNyIpDQo+ ICsgKg0KPiArICogVGhlcmUgYXJlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IGluIGRpZmZlcmVu dCB3YXlzLiBJbiB0aGlzIGNhc2UsIHBsZWFzZSBmb2xsb3cgdGhlIGFib3ZlLW1lbnRpb25lZCBv cmRlciBvZiBwcm9jZXNzaW5nLg0KPiArICogVGhlIG1vc3QgcmVjZW50IGFzc2lnbm1lbnRzIG92 ZXJ3cml0ZSB0aGUgcHJldmlvdXMgdmFsdWVzLg0KPiArICoNCj4gKyAqIEBwYXJhbSBjdHggY29k ZWMgY29udGV4dA0KPiArICogQHBhcmFtIGNkc2MgY29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1l dGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4NCj4gKyAqDQo+ ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl DQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgZ2V0X2NvbmYoY29uc3QgQVZDb2RlY0NvbnRleHQgKmN0 eCwgWEVWRV9DRFNDICpjZHNjKQ0KPiArew0KPiArICAgIFhFVkVfUEFSQU0gKiBwYXJhbSA9IE5V TEw7DQo+ICsgICAgWGV2ZUNvbnRleHQgKnhlID0gTlVMTDsNCj4gKyAgICBpbnQgY29sb3JfZm9y bWF0Ow0KPiArICAgIGludCBjcHVfY291bnQgPSBhdl9jcHVfY291bnQoKTsNCj4gKyAgICBpbnQg cmV0Ow0KPiArDQo+ICsgICAgeGUgPSBjdHgtPnByaXZfZGF0YTsNCj4gKyAgICBwYXJhbSA9ICZj ZHNjLT5wYXJhbTsNCj4gKw0KPiArICAgIC8qIHNldCBkZWZ1YWx0IHZhbHVlIGluIHByaXZfZGF0 YSAqLw0KPiArICAgIG1lbXNldChjZHNjLCAwLCBzaXplb2YoWEVWRV9DRFNDKSk7DQo+ICsgICAg eGUtPmhhc2ggPSAwOw0KPiArDQo+ICsgICAgLyogc2V0IGRlZmF1bHQgcGFyYW1ldGVycyAqLw0K PiArICAgIHJldCA9IHhldmVfcGFyYW1fZGVmYXVsdChwYXJhbSk7DQo+ICsgICAgaWYgKFhFVkVf RkFJTEVEKHJldCkpIHsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImNh bm5vdCBzZXRfZGVmYXVsdCBwYXJhbWV0ZXJcbiIpOw0KPiArICAgICAgICBnb3RvIEVSUjsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICAvKiByZWFkIG9wdGlvbnMgZnJvbSBBVkNvZGVjQ29udGV4dCAg Ki8NCj4gKyAgICBpZihjdHgtPndpZHRoID4gMCkgew0KPiArICAgICAgICBwYXJhbS0+dyA9IGN0 eC0+d2lkdGg7DQo+ICsgICAgICAgIHhlLT53aWR0aF9sdW1hID0gY3R4LT53aWR0aDsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBpZihjdHgtPmhlaWdodCA+IDApIHsNCj4gKyAgICAgICAgcGFyYW0t PmggPSBjdHgtPmhlaWdodDsNCj4gKyAgICAgICAgeGUtPmhlaWdodF9sdW1hID0gY3R4LT5oZWln aHQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYoY3R4LT5mcmFtZXJhdGUubnVtID4gMCkgew0K PiArICAgICAgICAvKiBAdG9kbzogZnBzIGNhbiBiZSBmbG9hdCBudW1iZXIsIGJ1dCB4ZXZlIEFQ SSBkb2Vzbid0IHN1cHBvcnQgaXQgKi8NCj4gKyAgICAgICAgcGFyYW0tPmZwcyA9IChpbnQpKCgo ZmxvYXQpY3R4LT5mcmFtZXJhdGUubnVtIC8gY3R4LT5mcmFtZXJhdGUuZGVuKSArIDAuNSk7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgaWYoY3R4LT5nb3Bfc2l6ZSA+PSAwKSB7IC8qIGtleS1mcmFt ZSBpbnRlcnZhbCAqLw0KPiArICAgICAgICBwYXJhbS0+a2V5aW50ID0gY3R4LT5nb3Bfc2l6ZTsg Ly8gMDogb25seSBvbmUgSS1mcmFtZSBhdCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUg aXMgY29kZWQgaW4gSS1mcmFtZQ0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8s ICJHT1Agc2l6ZSAoa2V5LWZyYW1lIGludGVydmFsKTogJWRcbiIsIGN0eC0+Z29wX3NpemUpOw0K PiArICAgIH0NCj4gKyAgICBpZiAoY3R4LT5tYXhfYl9mcmFtZXMgPT0gMCB8fCBjdHgtPm1heF9i X2ZyYW1lcyA9PSAxIHx8IGN0eC0+bWF4X2JfZnJhbWVzID09IDMgfHwNCj4gKyAgICAgICAgICAg IGN0eC0+bWF4X2JfZnJhbWVzID09IDcgfHwgY3R4LT5tYXhfYl9mcmFtZXMgPT0gMTUpIHsgLyog bnVtYmVyIG9mIGItZnJhbWUgKi8NCj4gKyAgICAgICAgcGFyYW0tPmJmcmFtZXMgPSBjdHgtPm1h eF9iX2ZyYW1lczsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiTnVtYmVy IG9mIG1heCBiLWZyYW1lczogJWRcbiIsIGN0eC0+bWF4X2JfZnJhbWVzKTsNCj4gKyAgICB9IGVs c2Ugew0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW5jb3JyZWN0IHZh bHVlIGZvciBtYXhpbXVtIG51bWJlciBvZiBCIGZyYW1lczogKCVkKSBcbiINCj4gKyAgICAgICAg ICAgICAgICJBY2NlcHRhYmxlIHZhbHVlcyBmb3IgYmYgb3B0aW9uIChtYXhpbXVtIG51bWJlciBv ZiBCIGZyYW1lcykgYXJlIDAsMSwzLDcgb3IgMTVcbiIsIGN0eC0+bWF4X2JfZnJhbWVzKTsNCj4g KyAgICAgICAgZ290byBFUlI7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKGN0eC0+bGV2ZWwg Pj0gMCkgew0KPiArICAgICAgICBwYXJhbS0+bGV2ZWxfaWRjID0gY3R4LT5sZXZlbDsNCj4gKyAg ICB9DQo+ICsgICAgcmV0ID0gZ2V0X3BpeF9mbXQoY3R4LT5waXhfZm10LCAmY29sb3JfZm9ybWF0 LCAmeGUtPmlucHV0X2RlcHRoKTsNCj4gKyAgICBpZiAocmV0IT0wKSB7DQo+ICsgICAgICAgIGF2 X2xvZygoQVZDb2RlY0NvbnRleHQqKWN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgcGl4 ZWwgZm9ybWF0LlxuIik7DQo+ICsgICAgICAgIGdvdG8gRVJSOw0KPiArICAgIH0NCj4gKyAgICBw YXJhbS0+Y3MgPSBYRVZFX0NTX1NFVChjb2xvcl9mb3JtYXQsIHhlLT5pbnB1dF9kZXB0aCwgMCk7 DQo+ICsNCj4gKyAgICBpZiAoY3R4LT5yY19idWZmZXJfc2l6ZSA+IDApIHsNCj4gKyAgICAgICAg cGFyYW0tPnZidl9idWZzaXplID0gKGludCkoY3R4LT5yY19idWZmZXJfc2l6ZS8gMTAwMCk7DQo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlZCViBidWYgc2l6ZTogJWRcbiIs IGN0eC0+cmNfYnVmZmVyX3NpemUpOw0KPiArICAgIH0NCj4gKyAgICBpZiAoY3R4LT5iaXRfcmF0 ZSA+IDApIHsNCj4gKyAgICAgICAgaWYgKGN0eC0+Yml0X3JhdGUgLyAxMDAwID4gSU5UX01BWCB8 fCBjdHgtPnJjX21heF9yYXRlIC8gMTAwMCA+IElOVF9NQVgpIHsNCj4gKyAgICAgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJub3Qgc3VwcG9ydGVkIGJpdHJhdGUgYml0X3JhdGUg YW5kIHJjX21heF9yYXRlID4gJWQwMDBcbiIsIElOVF9NQVgpOw0KPiArICAgICAgICAgICAgZ290 byBFUlI7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgcGFyYW0tPmJpdHJhdGUgPSAoaW50KShj dHgtPmJpdF9yYXRlIC8gMTAwMCk7DQo+ICsgICAgICAgIHBhcmFtLT5yY190eXBlID0gWEVWRV9S Q19BQlI7DQo+ICsgICAgfQ0KPiArICAgIGlmICh4ZS0+b3BfY3JmID49IDApIHsNCj4gKyAgICAg ICAgcGFyYW0tPmNyZiA9IHhlLT5vcF9jcmY7DQo+ICsgICAgICAgIHBhcmFtLT5yY190eXBlID0g WEVWRV9SQ19DUkY7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYoY3R4LT50aHJlYWRfY291bnQg PD0gMCkgew0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY3B1X2NvdW50 OiAlZFxuIiwgY3B1X2NvdW50KTsNCj4gKyAgICAgICAgcGFyYW0tPnRocmVhZHMgPSAoY3B1X2Nv dW50IDwgWEVWRV9NQVhfVEhSRUFEUyk/IGNwdV9jb3VudDogWEVWRV9NQVhfVEhSRUFEUzsNCj4g KyAgICB9IGVsc2UgaWYoY3R4LT50aHJlYWRfY291bnQgPiBYRVZFX01BWF9USFJFQURTKSB7DQo+ ICsgICAgICAgIHBhcmFtLT50aHJlYWRzID0gWEVWRV9NQVhfVEhSRUFEUzsNCj4gKyAgICB9IGVs c2Ugew0KPiArICAgICAgICBwYXJhbS0+dGhyZWFkcyA9IGN0eC0+dGhyZWFkX2NvdW50Ow0KPiAr ICAgIH0NCj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJwYXJhbS0+dGhyZWFkczog JWRcbiIsIHBhcmFtLT50aHJlYWRzKTsNCj4gKw0KPiArICAgIGNkc2MtPnBhcmFtLmNzID0gWEVW RV9DU19TRVQoY29sb3JfZm9ybWF0LCBwYXJhbS0+Y29kZWNfYml0X2RlcHRoLCAwKTsNCj4gKyAg ICBjZHNjLT5tYXhfYnNfYnVmX3NpemUgPSBNQVhfQlNfQlVGOw0KPiArDQo+ICsgICAgaWYoY3R4 LT5wcm9maWxlID09IEZGX1BST0ZJTEVfRVZDX0JBU0VMSU5FKSB7DQo+ICsgICAgICAgIHhlLT5w cm9maWxlX2lkID0gWEVWRV9QUk9GSUxFX0JBU0VMSU5FOw0KPiArICAgIH0gZWxzZSBpZihjdHgt PnByb2ZpbGUgPT0gRkZfUFJPRklMRV9FVkNfTUFJTikgew0KPiArICAgICAgICB4ZS0+cHJvZmls ZV9pZCA9IFhFVkVfUFJPRklMRV9NQUlOOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJVbmtub3duIGVuY29kZXIgcHJvZmlsZSAoJWQpXG4i DQo+ICsgICAgICAgICAgICAgICAiQWNjZXB0YWJsZSB2YWx1ZXMgZm9yIHByb2ZpbGUgb3B0aW9u IGFyZSAwIGFuZCAxICgwOiBiYXNlbGluZSBwcm9maWxlOyAxOiBtYWluIHByb2ZpbGUpXG4iLCBj dHgtPnByb2ZpbGUpOw0KPiArICAgICAgICBnb3RvIEVSUjsNCj4gKyAgICB9DQo+ICsgICAgaWYg KHhlLT5vcF9wcmVzZXQpIHsNCj4gKyAgICAgICAgeGUtPnByZXNldF9pZCA9IGdldF9wcmVzZXRf aWQoeGUtPm9wX3ByZXNldCk7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywg IlByZXNldCAgOiAlc1xuIiwgeGUtPm9wX3ByZXNldCk7DQo+ICsgICAgfQ0KPiArICAgIGlmICh4 ZS0+b3BfdHVuZSkgew0KPiArICAgICAgICB4ZS0+dHVuZV9pZCA9IGdldF90dW5lX2lkKHhlLT5v cF90dW5lKTsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiVHVuZSAgICA6 ICVzXG4iLCB4ZS0+b3BfdHVuZSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0ID0geGV2ZV9w YXJhbV9wcHQocGFyYW0sIHhlLT5wcm9maWxlX2lkLCB4ZS0+cHJlc2V0X2lkLCB4ZS0+dHVuZV9p ZCk7DQo+ICsgICAgaWYgKFhFVkVfRkFJTEVEKHJldCkpIHsNCj4gKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBzZXQgcHJvZmlsZSglZCksIHByZXNldCglZCksIHR1 bmUoJWQpXG4iLCB4ZS0+cHJvZmlsZV9pZCwgeGUtPnByZXNldF9pZCwgeGUtPnR1bmVfaWQpOw0K PiArICAgICAgICBnb3RvIEVSUjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvKiBwYXJzZSA6LXNl cGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzIGFuZCBzZXQgdmFsdWVzIGZvciBj cmVhdGVkIGRlc2NyaXB0b3IgKFhFVkVfQ0RTQykgKi8NCj4gKyAgICB7DQo+ICsgICAgICAgIEFW RGljdGlvbmFyeUVudHJ5ICplbiA9IE5VTEw7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfSU5GTywgIiMjIyBTdGFydCB0byBwYXJzZSB4ZXZlX3BhcmFtcyAjIyNcbiIpOw0KPiArICAg ICAgICB3aGlsZSAoKGVuID0gYXZfZGljdF9nZXQoeGUtPnhldmVfcGFyYW1zLCAiIiwgZW4sIEFW X0RJQ1RfSUdOT1JFX1NVRkZJWCkpKSB7DQo+ICsgICAgICAgICAgICBpbnQgcGFyc2VfcmV0ID0g cGFyc2VfeGV2ZV9wYXJhbXMoZW4tPmtleSwgZW4tPnZhbHVlLCB4ZSwgcGFyYW0pOw0KPiArDQo+ ICsgICAgICAgICAgICBzd2l0Y2ggKHBhcnNlX3JldCkgew0KPiArICAgICAgICAgICAgY2FzZSBY RVZFX1BBUkFNX0JBRF9OQU1FOg0KPiArICAgICAgICAgICAgICAgIGF2X2xvZygoQVZDb2RlY0Nv bnRleHQqKWN0eCwgQVZfTE9HX1dBUk5JTkcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICJV bmtub3duIG9wdGlvbjogJXMuXG4iLCBlbi0+a2V5KTsNCj4gKyAgICAgICAgICAgICAgICBicmVh azsNCj4gKyAgICAgICAgICAgIGNhc2UgWEVWRV9QQVJBTV9CQURfVkFMVUU6DQo+ICsgICAgICAg ICAgICAgICAgYXZfbG9nKChBVkNvZGVjQ29udGV4dCopY3R4LCBBVl9MT0dfV0FSTklORywNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcy5cbiIsIGVu LT5rZXksIGVuLT52YWx1ZSk7DQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAg ICAgICBkZWZhdWx0Og0KPiArICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAg fQ0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIiMj IyBFbmQgb2YgcGFyc2luZyB4ZXZlX3BhcmFtcyAjIyNcbiIpOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlJhdGUgY29udHJvbCB0eXBlIFsgMChDUVAp IC8gMShBQlIpIC8gMihDUkYpIF0gOiAlZFxuIiwgcGFyYW0tPnJjX3R5cGUpOw0KPiArICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgImNyZj0lZCwgYml0cmF0ZT0lZCwgdmJ2X2J1ZnNpemU9 JWQsIGZwcz0lZFxuIiwgcGFyYW0tPmNyZiwgcGFyYW0tPmJpdHJhdGUsIHBhcmFtLT52YnZfYnVm c2l6ZSwgcGFyYW0tPmZwcyk7DQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gKw0KPiArRVJSOg0K PiArICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog Q2hlY2sgY29kZWMgY29uZmlndXJhdGlvbg0KPiArICoNCj4gKyAqIEBwYXJhbSBjdHggY29kZWMg Y29udGV4dA0KPiArICogQHBhcmFtIGNkc2MgY29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVy cyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4NCj4gKyAqDQo+ICsg KiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ ICsgKi8NCj4gK3N0YXRpYyBpbnQgY2hlY2tfY29uZihBVkNvZGVjQ29udGV4dCAqY3R4LCAgWEVW RV9DRFNDICpjZHNjKQ0KPiArew0KPiArICAgIGludCByZXQgPSAwOw0KPiArICAgIGludCBtaW5f YmxvY2tfc2l6ZSA9IDQ7DQo+ICsgICAgaW50IHBpY19tOw0KPiArDQo+ICsgICAgaWYoY2RzYy0+ cGFyYW0ucHJvZmlsZSA9PSBYRVZFX1BST0ZJTEVfQkFTRUxJTkUpIHsNCj4gKyAgICAgICAgaWYg KGNkc2MtPnBhcmFtLnRvb2xfYW12ciAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJBTVZSIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIp Ow0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYg KGNkc2MtPnBhcmFtLnRvb2xfbW12ZCAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJNTVZEIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIp Ow0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYg KGNkc2MtPnBhcmFtLnRvb2xfYWZmaW5lICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJBZmZpbmUgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxu Iik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9kbXZyICAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkRNVlIgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxu Iik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFETVZQIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVc biIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfaG12cCAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJITVZQIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVc biIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRkYiAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJBRERCIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVc biIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfYWxmICAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJBTEYgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxu Iik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9odGRmICAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkhUREYgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxu Iik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBp ZiAoY2RzYy0+cGFyYW0uYnR0ICAgICAgICAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkJUVCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4i KTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlm IChjZHNjLT5wYXJhbS5zdWNvICAgICAgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiU1VDTyBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4i KTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlm IChjZHNjLT5wYXJhbS50b29sX2VpcGQgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiRUlQRCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4i KTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlm IChjZHNjLT5wYXJhbS50b29sX2lxdCAgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiSVFUIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIp Ow0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYg KGNkc2MtPnBhcmFtLnRvb2xfY21faW5pdCA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJDTV9JTklUIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVc biIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRjYyAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJBRENDIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVc biIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfYXRzICAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJBVFNfSU5UUkEgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJv ZmlsZVxuIik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAg ICAgICBpZiAoY2RzYy0+cGFyYW0uaWJjX2ZsYWcgICAgID09IDEpIHsNCj4gKyAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIklCQyBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9m aWxlXG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAg ICAgIGlmIChjZHNjLT5wYXJhbS50b29sX3JwbCAgICAgPT0gMSkgew0KPiArICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiUlBMIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2Zp bGVcbiIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAg ICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfcG9jcyAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJQT0NTIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2Zp bGVcbiIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9 IGVsc2Ugew0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDAgJiYg Y2RzYy0+cGFyYW0udG9vbF9hZmZpbmUgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiQUZGSU5FIGNhbm5vdCBiZSBvbiB3aGVuIEFETVZQIGlzIG9mZlxu Iik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hbXZy ICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQU1W UiBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBpcyBvZmZcbiIpOw0KPiArICAgICAgICAgICAgcmV0 ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRt dnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfZG12ciAgID09IDEpIHsNCj4gKyAgICAgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkRNVlIgY2Fubm90IGJlIG9uIHdoZW4gQURN VlAgaXMgb2ZmXG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAgPT0gMCAmJiBjZHNjLT5wYXJh bS50b29sX21tdmQgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJNTVZEIGNhbm5vdCBiZSBvbiB3aGVuIEFETVZQIGlzIG9mZlxuIik7DQo+ICsgICAg ICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+cGFy YW0udG9vbF9laXBkICAgID09IDAgJiYgY2RzYy0+cGFyYW0uaWJjX2ZsYWcgICAgPT0gMSkgew0K PiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSUJDIGNhbm5vdCBiZSBv biB3aGVuIEVJUEQgaXMgb2ZmXG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAg ICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2lxdCAgICAgPT0gMCAmJiBj ZHNjLT5wYXJhbS50b29sX2F0cyAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJBVFMgY2Fubm90IGJlIG9uIHdoZW4gSVFUIGlzIG9mZlxuIik7DQo+ ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2Rz Yy0+cGFyYW0udG9vbF9jbV9pbml0ID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hZGNjICAgPT0g MSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQURDQyBjYW5u b3QgYmUgb24gd2hlbiBDTV9JTklUIGlzIG9mZlxuIik7DQo+ICsgICAgICAgICAgICByZXQgPSAt MTsNCj4gKyAgICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChjZHNjLT5wYXJhbS5i dHQgPT0gMSkgew0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCAm JiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4IDwgNSkgew0KPiArICAgICAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90 IGJlIHNtYWxsZXIgdGhhbiA1XG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAg ICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4ID4gNykg ew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gQ29k aW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiA3XG4iKTsNCj4gKyAgICAgICAg ICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS5m cmFtZXdvcmtfY2JfbWluICYmIGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4gPCAyKSB7DQo+ ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWluaW11bSBDb2Rpbmcg QmxvY2sgc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDJcbiIpOw0KPiArICAgICAgICAgICAg cmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKChjZHNjLT5wYXJhbS5mcmFt ZXdvcmtfY2JfbWF4IHx8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4pICYmDQo+ICsgICAg ICAgICAgICAgICAgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiA+IGNkc2MtPnBhcmFtLmZy YW1ld29ya19jYl9tYXgpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJS T1IsICJNaW5pbXVtIENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4 aW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4g KyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2N1MTRfbWF4 ID4gNikgew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1heGlt dW4gMTo0IENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gNlxuIik7DQo+ ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoKGNk c2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggfHwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2N1MTRf bWF4KSAmJg0KPiArICAgICAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1ld29ya19jdTE0X21h eCA+IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXgpIHsNCj4gKyAgICAgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIDE6NCBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5u b3QgYmUgZ3JlYXRlciB0aGFuIE1heGltdW0gY29kaW5nIEJsb2NrIHNpemVcbiIpOw0KPiArICAg ICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBh cmFtLmZyYW1ld29ya190cmlzX21heCA+IDYpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFRyaS1zcGxpdCBCbG9jayBzaXplIGJlIGdyZWF0ZXIg dGhhbiA2XG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsg ICAgICAgIGlmICgoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3RyaXNfbWF4IHx8IGNkc2MtPnBhcmFt LmZyYW1ld29ya19jYl9tYXgpICYmDQo+ICsgICAgICAgICAgICAgICAgY2RzYy0+cGFyYW0uZnJh bWV3b3JrX3RyaXNfbWF4ID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCkgew0KPiArICAg ICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gVHJpLXNwbGl0IEJs b2NrIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBCbG9jayBzaXpl XG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAg IGlmICgoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3RyaXNfbWluIHx8IGNkc2MtPnBhcmFtLmZyYW1l d29ya19jYl9taW4pICYmDQo+ICsgICAgICAgICAgICAgICAgY2RzYy0+cGFyYW0uZnJhbWV3b3Jr X3RyaXNfbWluIDwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiArIDIpIHsNCj4gKyAgICAg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFRyaS1zcGxpdCBCbG9j ayBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gTWluaW11bSBDb2RpbmcgQmxvY2sgc2l6ZSBw bHVzIHR3b1xuIik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgICBpZihjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluKSBtaW5fYmxvY2tfc2l6ZSA9 IDEgPDwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbjsNCj4gKyAgICAgICAgZWxzZSBtaW5f YmxvY2tfc2l6ZSA9IDg7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKGNkc2MtPnBhcmFtLnN1 Y28gPT0gMSkgew0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4 ID4gNikgew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1heGlt dW4gU1VDTyBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gNlxuIik7DQo+ICsgICAgICAgICAg ICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJh bWV3b3JrX2NiX21heCAmJiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19tYXggPiBjZHNjLT5w YXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCJNYXhpbXVuIFNVQ08gc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heGlt dW0gY29kaW5nIEJsb2NrIHNpemVcbiIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsg ICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19zdWNvX21pbiA8 IDQpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNaW5pbXVu IFNVQ08gc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDRcbiIpOw0KPiArICAgICAgICAgICAg cmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1l d29ya19jYl9taW4gJiYgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWluIDwgY2RzYy0+cGFy YW0uZnJhbWV3b3JrX2NiX21pbikgew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwiTWluaW11biBTVUNPIHNpemUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBNaW5pbXVt IGNvZGluZyBCbG9jayBzaXplXG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAg ICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19taW4gPiBj ZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19tYXgpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJNaW5pbXVtIFNVQ08gc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0 aGFuIE1heGltdW0gU1VDTyBzaXplXG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiAr ICAgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcGljX20gPSAoOCA+IG1pbl9ibG9ja19z aXplKSA/IG1pbl9ibG9ja19zaXplIDogODsNCj4gKyAgICBpZiAoKGNkc2MtPnBhcmFtLncgJiAo cGljX20gLSAxKSkgIT0gMCkgew0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiQ3VycmVudCBlbmNvZGVyIGRvZXMgbm90IHN1cHBvcnQgcGljdHVyZSB3aWR0aCwgbm90IG11 bHRpcGxlIG9mIG1heCg4LCBtaW5pbXVtIENVIHNpemUpXG4iKTsNCj4gKyAgICAgICAgcmV0ID0g LTE7DQo+ICsgICAgfQ0KPiArICAgIGlmICgoY2RzYy0+cGFyYW0uaCAmIChwaWNfbSAtIDEpKSAh PSAwKSB7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJDdXJyZW50IGVu Y29kZXIgZG9lcyBub3Qgc3VwcG9ydCBwaWN0dXJlIGhlaWdodCwgbm90IG11bHRpcGxlIG9mIG1h eCg4LCBtaW5pbXVtIENVIHNpemUpXG4iKTsNCj4gKyAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBTZXQg WEVWRV9DRkdfU0VUX1VTRV9QSUNfU0lHTkFUVVJFIGZvciBlbmNvZGVyDQo+ICsgKg0KPiArICog QHBhcmFtIGlkIFhFVkUgaW5zdGFuY2UgaWRlbnRpZmllcg0KPiArICogQHBhcmFtIGN0eCB0aGUg c3RydWN0dXJlIHN0b3JlcyBhbGwgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5zdGFu Y2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGVuY29kZXINCj4gKyAqIEByZXR1cm4gWEVWRSBwcmUtZGVm aW5lZCBjb2xvciBzcGFjZSAoQHNlZSB4ZXZlLmgpIG9uIHN1Y2Nlc3MsIFhFVkVfQ0ZfVU5LTk9X TiBvbiBmYWlsdXJlDQo+ICsgKg0KPiArICogQHRvZG8gY29uc2lkZXIgcmVtb3ZpbmcgdGhlIGZ1 bmN0aW9uDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgc2V0X2V4dHJhX2NvbmZpZyhYRVZFIGlkLCBY ZXZlQ29udGV4dCAqY3R4KQ0KPiArew0KPiArICAgIGludCByZXQsIHNpemUsIHZhbHVlOw0KPiAr DQo+ICsgICAgaWYoY3R4LT5oYXNoKSB7DQo+ICsgICAgICAgIHZhbHVlID0gMTsNCj4gKyAgICAg ICAgc2l6ZSA9IDQ7DQo+ICsgICAgICAgIHJldCA9IHhldmVfY29uZmlnKGlkLCBYRVZFX0NGR19T RVRfVVNFX1BJQ19TSUdOQVRVUkUsICZ2YWx1ZSwgJnNpemUpOw0KPiArICAgICAgICBpZihYRVZF X0ZBSUxFRChyZXQpKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiZmFpbGVkIHRvIHNldCBjb25maWcgZm9yIHBpY3R1cmUgc2lnbmF0dXJlXG4iKTsNCj4gKyAg ICAgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAg IHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIENvbnZlcnQgZmZtcGVnIHBpeGVs IGZvcm1hdCAoQVZQaXhlbEZvcm1hdCkgaW50byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNl DQo+ICsgKg0KPiArICogQHBhcmFtIHB4X2ZtdCBwaXhlbCBmb3JtYXQgKEBzZWUgaHR0cHM6Ly9m Zm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvcGl4Zm10XzhoLmh0bWwjYTlhOGUzMzVjZjNiZTQ3MjA0 MmJjOWYwY2Y4MGNkNGM1KQ0KPiArICogQHJldHVybiBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNw YWNlIChAc2VlIHhldmUuaCkgb24gc3VjY2VzcywgWEVWRV9DRl9VTktOT1dOIG9uIGZhaWx1cmUN Cj4gKyAqLw0KPiArc3RhdGljIGludCB4ZXZlX2NvbG9yX3NwYWNlKGVudW0gQVZQaXhlbEZvcm1h dCBwaXhfZm10KQ0KPiArew0KPiArICAgIC8qIGNvbG9yIHNwYWNlIG9mIGlucHV0IGltYWdlICov DQo+ICsgICAgaW50IGNzID0gWEVWRV9DRl9VTktOT1dOOw0KPiArDQo+ICsgICAgc3dpdGNoIChw aXhfZm10KSB7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA6DQo+ICsgICAgICAgIGNz ID0gWEVWRV9DU19ZQ0JDUjQyMDsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9Q SVhfRk1UX1lVVjQyMFAxMDoNCj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KPiArICAgICAgICBj cyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MjAsIDEwLCAxKTsNCj4gKyNlbHNlDQo+ICsg ICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMF8xMExFOw0KPiArI2VuZGlmDQo+ICsNCj4gKyAg ICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMjoNCj4gKyNpZiBB Vl9IQVZFX0JJR0VORElBTg0KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNC Q1I0MjAsIDEyLCAxKTsNCj4gKyNlbHNlDQo+ICsgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQy MF8xMkxFOw0KPiArI2VuZGlmDQo+ICsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBB Vl9QSVhfRk1UX1lVVjQyMlA6DQo+ICsgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMjsNCj4g KyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlAxMDoNCj4gKyNp ZiBBVl9IQVZFX0JJR0VORElBTg0KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0Zf WUNCQ1I0MjIsIDEwLCAxKTsNCj4gKyNlbHNlDQo+ICsgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JD UjQyMl8xMExFOw0KPiArI2VuZGlmDQo+ICsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2Fz ZSBBVl9QSVhfRk1UX1lVVjQyMlAxMjoNCj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KPiArICAg ICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MjIsIDEyLCAxKTsNCj4gKyNlbHNl DQo+ICsgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwgMTIsIDApOw0K PiArI2VuZGlmDQo+ICsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1U X0dCUlA6DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX0dCUlAxMDoNCj4gKyAgICBjYXNlIEFWX1BJ WF9GTVRfR0JSUDEyOg0KPiArICAgICAgICBjcyA9IFhFVkVfQ0ZfVU5LTk9XTjsNCj4gKyAgICAg ICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6DQo+ICsgICAgICAgIGNz ID0gWEVWRV9DRl9ZQ0JDUjQ0NDsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9Q SVhfRk1UX1lVVjQ0NFAxMDoNCj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KPiArICAgICAgICBj cyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0NDQsIDEwLCAxKTsNCj4gKyNlbHNlDQo+ICsg ICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQ0NF8xMExFOw0KPiArI2VuZGlmDQo+ICsNCj4gKyAg ICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMjoNCj4gKyNpZiBB Vl9IQVZFX0JJR0VORElBTg0KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNC Q1I0NDQsIDEyLCAxKTsNCj4gKyNlbHNlDQo+ICsgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVW RV9DRl9ZQ0JDUjQ0NCwgMTIsIDApOw0KPiArI2VuZGlmDQo+ICsNCj4gKyAgICAgICAgYnJlYWs7 DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX0dSQVk4Og0KPiArICAgICAgICBjcyA9IFhFVkVfQ0Zf WUNCQ1I0MDA7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZ MTA6DQo+ICsjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NF VChYRVZFX0NGX1lDQkNSNDAwLCAxMCwgMSk7DQo+ICsjZWxzZQ0KPiArICAgICAgICBjcyA9IFhF VkVfQ1NfWUNCQ1I0MDBfMTBMRTsNCj4gKyNlbmRpZg0KPiArDQo+ICsgICAgICAgIGJyZWFrOw0K PiArICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZMTI6DQo+ICsjaWYgQVZfSEFWRV9CSUdFTkRJQU4N Cj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDAwLCAxMiwgMSk7DQo+ ICsjZWxzZQ0KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MDBfMTJMRTsNCj4gKyNlbmRp Zg0KPiArDQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgIGNz ID0gWEVWRV9DRl9VTktOT1dOOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgICAg cmV0dXJuIGNzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHNldHVwX2J1bXBpbmcoWEVWRSBp ZCkNCj4gK3sNCj4gKyAgICBpbnQgdmFsLCBzaXplOw0KPiArICAgIHZhbCAgPSAxOw0KPiArICAg IHNpemUgPSBzaXplb2YoaW50KTsNCj4gKyAgICBpZihYRVZFX0ZBSUxFRCh4ZXZlX2NvbmZpZyhp ZCwgWEVWRV9DRkdfU0VUX0ZPUkNFX09VVCwgKHZvaWQgKikoJnZhbCksICZzaXplKSkpIHsNCj4g KyAgICAgICAgcmV0dXJuIC0xOw0KPiArICAgIH0NCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGNvbnN0IGNoYXIqIHNsaWNlX3R5cGUoZW51bSBBVlBpY3R1cmVUeXBlIGF2 X3BpY190eXBlKQ0KPiArew0KPiArICAgIGlmKGF2X3BpY190eXBlID09IEFWX1BJQ1RVUkVfVFlQ RV9JKSB7DQo+ICsgICAgICAgIHJldHVybiAiU2xpY2UgVHlwZSBJIjsNCj4gKyAgICB9IGVsc2Ug aWYoYXZfcGljX3R5cGUgPT0gQVZfUElDVFVSRV9UWVBFX1ApIHsNCj4gKyAgICAgICAgcmV0dXJu ICJTbGljZSBUeXBlIFAiOw0KPiArICAgIH0gZWxzZSBpZihhdl9waWNfdHlwZSA9PSBBVl9QSUNU VVJFX1RZUEVfQikgew0KPiArICAgICAgICByZXR1cm4gIlNsaWNlIFR5cGUgQiI7DQo+ICsgICAg fQ0KPiArICAgIHJldHVybiAiU2xpY2UgVHlwZSBVTkRFRklORUQiOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAqIEluaXRpYWxpemUgY29kZWMgc3RhdGljIGRhdGENCj4gKyAqDQo+ICsgKiBAdG9k byBjb25zaWRlciByZW1vdmluZyB1bnVzZWQgZnVuY3Rpb24NCj4gKyAqLw0KPiArc3RhdGljIGF2 X2NvbGQgdm9pZCBsaWJ4ZXZlX2luaXRfc3RhdGljX2RhdGEoQVZDb2RlYyAqY29kZWMpDQo+ICt7 DQo+ICsgICAgVU5VU0VEKGNvZGVjKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBJbml0aWFs aXplIGNvZGVjDQo+ICsgKiBDcmVhdGUgZW5jb2RlciBpbnN0YW5jZSBhbmQgYWxsb2NhdGUgYWxs IHRoZSBuZWVkZWQgcmVzb3VyY2VzDQo+ICsgKg0KPiArICogQHBhcmFtIGN0eCBjb2RlYyBjb250 ZXh0DQo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBm YWlsdXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBhdl9jb2xkIGludCBsaWJ4ZXZlX2luaXQoQVZDb2Rl Y0NvbnRleHQgKmN0eCkNCj4gK3sNCj4gKyAgICBYZXZlQ29udGV4dCAqeGUgPSBjdHgtPnByaXZf ZGF0YTsNCj4gKyAgICB1bnNpZ25lZCBjaGFyICpic19idWYgPSBOVUxMOw0KPiArICAgIGludCBp LCB2YWwgPSAwOw0KPiArICAgIGludCBzaGlmdF9oID0gMDsNCj4gKyAgICBpbnQgc2hpZnRfdiA9 IDA7DQo+ICsgICAgWEVWRV9JTUdCICogaW1nYiA9IE5VTEw7DQo+ICsNCj4gKyAgICBYRVZFX0NE U0MgKmNkc2MgPSAmKHhlLT5jZHNjKTsNCj4gKw0KPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df REVCVUcsICJlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBFbmNvZGVyXG4iKTsNCj4gKw0KPiAr ICAgIGlmKGN0eC0+cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lVVjQyMFAgJiYgY3R4LT5waXhfZm10 ICE9IEFWX1BJWF9GTVRfWVVWNDIwUDEwKSB7DQo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFt ZShjdHgtPnBpeF9mbXQpKTsNCj4gKyAgICAgICAgZ290byBFUlI7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgLyogYWxsb2NhdGUgYml0c3RyZWFtIGJ1ZmZlciAqLw0KPiArICAgIGJzX2J1ZiA9ICh1 bnNpZ25lZCBjaGFyKiltYWxsb2MoTUFYX0JTX0JVRik7DQo+ICsgICAgaWYoYnNfYnVmID09IE5V TEwpIHsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBhbGxv Y2F0ZSBiaXRzdHJlYW0gYnVmZmVyLCBzaXplPSVkIiwgTUFYX0JTX0JVRik7DQo+ICsgICAgICAg IGdvdG8gRVJSOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8qIHJlYWQgY29uZmlndXJhdGlvbnMg YW5kIHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQgZGVzY3JpcHRvciAoWEVWRV9DRFNDKSAqLw0KPiAr ICAgIHZhbCA9IGdldF9jb25mKGN0eCwgY2RzYyk7DQo+ICsgICAgaWYgKHZhbCAhPSBYRVZFX09L KSB7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsImNhbm5vdCBnZXQgY29u ZmlndXJhdGlvblxuIik7DQo+ICsgICAgICAgIGdvdG8gRVJSOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIGlmIChjaGVja19jb25mKGN0eCwgY2RzYykgIT0gMCkgew0KPiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCJpbnZhbGlkIGNvbmZpZ3VyYXRpb25cbiIpOw0KPiArICAgICAg ICBnb3RvIEVSUjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvKiBjcmVhdGUgZW5jb2RlciAqLw0K PiArICAgIHhlLT5pZCA9IHhldmVfY3JlYXRlKGNkc2MsIE5VTEwpOw0KPiArICAgIGlmKHhlLT5p ZCA9PSBOVUxMKSB7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJjYW5u b3QgY3JlYXRlIFhFVkUgZW5jb2RlclxuIik7DQo+ICsgICAgICAgIGdvdG8gRVJSOw0KPiArICAg IH0NCj4gKw0KPiArICAgIGlmKHNldF9leHRyYV9jb25maWcoeGUtPmlkLCB4ZSkpIHsNCj4gKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBzZXQgZXh0cmEgY29uZmln dXJhdGlvbnNcbiIpOw0KPiArICAgICAgICBnb3RvIEVSUjsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICB4ZS0+Yml0Yi5hZGRyID0gYnNfYnVmOw0KPiArICAgIHhlLT5iaXRiLmJzaXplID0gTUFYX0JT X0JVRjsNCj4gKw0KPiArICAgIGlmKGF2X3BpeF9mbXRfZ2V0X2Nocm9tYV9zdWJfc2FtcGxlKGN0 eC0+cGl4X2ZtdCwgJnNoaWZ0X2gsICZzaGlmdF92KSkgew0KPiArICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZ2V0ICBjaHJvbWEgc2hpZnRcbiIpOw0KPiArICAg ICAgICBnb3RvIEVSUjsNCj4gKyAgICB9DQo+ICsgICAgLy8gWVVWIGZvcm1hdCBleHBsYW5hdGlv bg0KPiArICAgIC8vIHNoaWZ0X2ggPT0gMSAmJiBzaGlmdF92ID09IDEgOiBZVVY0MjANCj4gKyAg ICAvLyBzaGlmdF9oID09IDEgJiYgc2hpZnRfdiA9PSAwIDogWVVWNDIyDQo+ICsgICAgLy8gc2hp ZnRfaCA9PSAwICYmIHNoaWZ0X3YgPT0gMCA6IFlVVjQ0NA0KPiArICAgIC8vDQo+ICsgICAgeGUt PndpZHRoX2Nocm9tYSA9IEFWX0NFSUxfUlNISUZUKGN0eC0+d2lkdGgsIHNoaWZ0X2gpOw0KPiAr ICAgIHhlLT5oZWlnaHRfY2hyb21hID0gQVZfQ0VJTF9SU0hJRlQoY3R4LT5oZWlnaHQsIHNoaWZ0 X3YpOw0KPiArDQo+ICsgICAgLyogc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBpbWFnZSBi dWZmZXIgKi8NCj4gKyAgICBpbWdiID0gJnhlLT5pbWdiOw0KPiArICAgIGltZ2ItPmNzID0geGV2 ZV9jb2xvcl9zcGFjZShjdHgtPnBpeF9mbXQpOw0KPiArICAgIGltZ2ItPm5wID0gMzsgLyogb25s eSBmb3IgeXV2NDIwcCwgeXV2NDIwcGxlICovDQo+ICsgICAgZm9yIChpPTA7IGk8aW1nYi0+bnA7 IGkrKykgew0KPiArICAgICAgICBpbWdiLT54W2ldID0gaW1nYi0+eVtpXSA9IDA7DQo+ICsgICAg fQ0KPiArICAgIGltZ2ItPndbMF0gPSBpbWdiLT5hd1swXSA9IHhlLT53aWR0aF9sdW1hOw0KPiAr ICAgIGltZ2ItPndbMV0gPSBpbWdiLT53WzJdID0gaW1nYi0+YXdbMV09IGltZ2ItPmF3WzJdID0g eGUtPndpZHRoX2Nocm9tYTsNCj4gKyAgICBpbWdiLT5oWzBdID0gaW1nYi0+YWhbMF0gPSB4ZS0+ aGVpZ2h0X2x1bWE7DQo+ICsgICAgaW1nYi0+aFsxXSA9IGltZ2ItPmhbMl0gPSBpbWdiLT5haFsx XSA9IGltZ2ItPmFoWzJdID0geGUtPmhlaWdodF9jaHJvbWE7DQo+ICsNCj4gKyAgICB4ZS0+ZW5j b2RfZnJhbWVzID0gMDsNCj4gKyAgICB4ZS0+Ynl0ZXNfdG90YWwgPSAwOw0KPiArICAgIHhlLT5z dGF0ZSA9IFNUQVRFX0VOQ09ESU5HOw0KPiArICAgIHhlLT5wYWNrZXRfY291bnQgPSAwOw0KPiAr ICAgIHhlLT5iaXRyYXRlID0gMDsNCj4gKyAgICByZXR1cm4gMDsNCj4gKw0KPiArRVJSOg0KPiAr ICAgIGlmKGJzX2J1ZikgZnJlZShic19idWYpOw0KPiArICAgIHJldHVybiAtMTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgICogRW5jb2RlIGRhdGEgdG8gYW4gQVZQYWNrZXQuDQo+ICsgICoNCj4g KyAgKiBAcGFyYW0gICAgICBjdHggICAgICAgICAgICBjb2RlYyBjb250ZXh0DQo+ICsgICogQHBh cmFtICAgICAgcGt0ICAgICAgICAgICAgb3V0cHV0IEFWUGFja2V0DQo+ICsgICogQHBhcmFtW2lu XSAgZnJhbWUgICAgICAgICAgQVZGcmFtZSBjb250YWluaW5nIHRoZSByYXcgZGF0YSB0byBiZSBl bmNvZGVkDQo+ICsgICogQHBhcmFtW291dF0gZ290X3BhY2tldCAgICAgZW5jb2RlciBzZXRzIHRv IDAgb3IgMSB0byBpbmRpY2F0ZSB0aGF0IGENCj4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBub24tZW1wdHkgcGFja2V0IHdhcyByZXR1cm5lZCBpbiBhdnBrdC4NCj4gKyAgKiBAcmV0 dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ICsgICov DQo+ICtzdGF0aWMgaW50IGxpYnhldmVfZW5jb2RlKEFWQ29kZWNDb250ZXh0ICpjdHgsIEFWUGFj a2V0ICpwa3QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZy YW1lLCBpbnQgKmdvdF9wYWNrZXQpDQo+ICt7DQo+ICsgICAgWGV2ZUNvbnRleHQgKnhlID0gTlVM TDsNCj4gKyAgICBpbnQgIHJldCA9IC0xOw0KPiArICAgIGludCB4ZXZlX2NzOw0KPiArICAgIGlm KGN0eCA9PSBOVUxMIHx8IHBrdCA9PSBOVUxMIHx8IGdvdF9wYWNrZXQ9PU5VTEwpIHsNCg0KVW5u ZWNlc3NhcnkgY2hlY2tzLg0KDQpGSVhFRA0KDQo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIkludmFsaWQgYXJndW1lbnRzXG4iKTsNCj4gKyAgICAgICAgcmV0dXJuIC0xOw0K PiArICAgIH0NCj4gKyAgICB4ZSA9IGN0eC0+cHJpdl9kYXRhOw0KDQpTYW1lLg0KDQpGSVhFRA0K DQo+ICsgICAgaWYoeGUgPT0gTlVMTCkgew0KPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJJbnZhbGlkIFhFVkUgY29udGV4dFxuIik7DQo+ICsgICAgICAgIHJldHVybiAtMTsN Cj4gKyAgICB9DQo+ICsgICAgaWYoeGUtPnN0YXRlID09IFNUQVRFX1NLSVBQSU5HICYmIGZyYW1l ICkgew0KPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJFbXB0eSBmcmFtZSAt PiBFbnRlcmluZyBlbmNvZGluZyBwcm9jZXNzLi4uXG4iKTsNCj4gKyAgICAgICAgeGUtPnN0YXRl ID0gU1RBVEVfRU5DT0RJTkc7DQo+ICsgICAgfSBlbHNlIGlmKHhlLT5zdGF0ZSA9PSBTVEFURV9F TkNPRElORyAmJiBmcmFtZSA9PSBOVUxMKSB7DQo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19ERUJVRywgIkVtcHR5IGZyYW1lIC0+IEVudGVyaW5nIGJ1bXBpbmcgcHJvY2Vzcy4uLlxuIik7 DQo+ICsgICAgICAgIGlmIChzZXR1cF9idW1waW5nKHhlLT5pZCkgPT0gMCkgew0KPiArICAgICAg ICAgICAgeGUtPnN0YXRlID0gU1RBVEVfQlVNUElORzsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4g KyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwiRmFpbGVkIHRvIHNldHVwIGJ1 bXBpbmdcbiIpOw0KPiArICAgICAgICAgICAgeGUtPnN0YXRlID0gU1RBVEVfU0tJUFBJTkc7DQo+ ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZih4ZS0+c3RhdGUgPT0gU1RBVEVf RU5DT0RJTkcpIHsNCj4gKyAgICAgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpwaXhlbF9m bXRfZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQgKGZyYW1lLT5mb3JtYXQpOw0KPiArICAgICAg ICBpZighcGl4ZWxfZm10X2Rlc2MpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsICJJbnZhbGlkIHBpeGVsIGZvcm1hdCBkZXNjcmlwdG9yIGZvciBwaXhlbCBmb3Jt YXQ6ICVzXG4iLCBhdl9nZXRfcGl4X2ZtdF9uYW1lKGN0eC0+cGl4X2ZtdCkpOw0KPiArICAgICAg ICAgICAgcmV0dXJuIC0xOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgeGV2ZV9jcyA9 IHhldmVfY29sb3Jfc3BhY2UoY3R4LT5waXhfZm10KTsNCj4gKyAgICAgICAgaWYoeGV2ZV9jcyAh PSBYRVZFX0NTX1lDQkNSNDIwICYmIHhldmVfY3MgIT0gWEVWRV9DU19ZQ0JDUjQyMF8xMExFKSB7 DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHBpeGVs IGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10X25hbWUoY3R4LT5waXhfZm10KSk7DQo+ICsg ICAgICAgICAgICByZXR1cm4gLTE7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICB7DQo+ ICsgICAgICAgICAgICBpbnQgaTsNCj4gKyAgICAgICAgICAgIFhFVkVfSU1HQiAqIGltZ2IgPSBO VUxMOw0KPiArICAgICAgICAgICAgaW50IHhldmVfYnl0ZV9kZXB0aCA9IDA7DQo+ICsNCj4gKyAg ICAgICAgICAgIGltZ2IgPSAmeGUtPmltZ2I7DQo+ICsNCj4gKyAgICAgICAgICAgIHhldmVfYnl0 ZV9kZXB0aCA9IFhFVkVfQ1NfR0VUX0JZVEVfREVQVEgoeGV2ZV9jcyk7DQo+ICsgICAgICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJieXRlIGRlcHRoOiAlZFxuIix4ZXZlX2J5dGVf ZGVwdGgpOw0KPiArDQo+ICsgICAgICAgICAgICBmb3IgKGk9MDsgaTxpbWdiLT5ucDsgaSsrKSB7 DQo+ICsgICAgICAgICAgICAgICAgaW1nYi0+YVtpXSA9IGZyYW1lLT5kYXRhW2ldOw0KPiArICAg ICAgICAgICAgICAgIGltZ2ItPnNbaV0gPSBmcmFtZS0+bGluZXNpemVbaV07DQo+ICsgICAgICAg ICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgIGlmKHhlLT5pZCA9PSBOVUxMKSB7DQo+ICsgICAg ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBYRVZFIGVuY29k ZXJcbiIpOw0KPiArICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICAgICAgICAgIH0N Cj4gKw0KPiArICAgICAgICAgICAgaW1nYi0+dHNbMF0gPSBmcmFtZS0+cHRzOw0KPiArICAgICAg ICAgICAgaW1nYi0+dHNbMV0gPSAwOw0KPiArICAgICAgICAgICAgaW1nYi0+dHNbMl0gPSAwOw0K PiArICAgICAgICAgICAgaW1nYi0+dHNbM10gPSAwOw0KPiArDQo+ICsgICAgICAgICAgICAvKiBw dXNoIGltYWdlIHRvIGVuY29kZXIgKi8NCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19ERUJVRywgIklOUFVUIHwgUkFXIGZyYW1lIHwgdGltZXN0YW1wcyB8ICVsbGQgfCAlbGxkIHwg JWxsZCB8ICVsbGQgfFxuIiwgaW1nYi0+dHNbMF0sIGltZ2ItPnRzWzFdLCBpbWdiLT50c1syXSwg aW1nYi0+dHNbM10pOw0KPiArDQo+ICsgICAgICAgICAgICByZXQgPSB4ZXZlX3B1c2goeGUtPmlk LCBpbWdiKTsNCj4gKyAgICAgICAgICAgIGlmKFhFVkVfRkFJTEVEKHJldCkpIHsNCj4gKyAgICAg ICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJ4ZXZlX3B1c2goKSBmYWlsZWRc biIpOw0KPiArICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICAgICAgICAgIH0NCj4g KyAgICAgICAgfQ0KPiArICAgIH0NCj4gKyAgICBpZih4ZS0+c3RhdGUgPT0gU1RBVEVfRU5DT0RJ TkcgfHwgeGUtPnN0YXRlID09IFNUQVRFX0JVTVBJTkcpIHsNCj4gKw0KPiArICAgICAgICAvKiBl bmNvZGluZyAqLw0KPiArICAgICAgICByZXQgPSB4ZXZlX2VuY29kZSh4ZS0+aWQsICYoeGUtPmJp dGIpLCAmKHhlLT5zdGF0KSk7DQo+ICsgICAgICAgIGlmKFhFVkVfRkFJTEVEKHJldCkpIHsNCj4g KyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgInhldmVfZW5jb2RlKCkgZmFp bGVkXG4iKTsNCj4gKyAgICAgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ ICsgICAgICAgIHhlLT5lbmNvZF9mcmFtZXMrKzsNCj4gKw0KPiArICAgICAgICAvKiBzdG9yZSBi aXRzdHJlYW0gKi8NCj4gKyAgICAgICAgaWYgKHJldCA9PSBYRVZFX09LX09VVF9OT1RfQVZBSUxB QkxFKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJSRVRVUk4g T0sgQlVUIFBJQ1RVUkUgSVMgTk9UIEFWQUlMQUJMRSBZRVQgKCVkKSBmcmFtZTogJWRcbiIsIHJl dCwgeGUtPmVuY29kX2ZyYW1lcyk7DQo+ICsgICAgICAgICAgICAqZ290X3BhY2tldCA9IDA7DQo+ ICsgICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAgICAgfSBlbHNlIGlmKHJldCA9PSBYRVZF X09LKSB7DQo+ICsgICAgICAgICAgICBpbnQgYXZfcGljX3R5cGU7DQo+ICsNCj4gKyAgICAgICAg ICAgIGlmKHhlLT5zdGF0LndyaXRlID4gMCkgew0KPiArICAgICAgICAgICAgICAgIHhlLT5ieXRl c190b3RhbCs9eGUtPnN0YXQud3JpdGU7DQo+ICsgICAgICAgICAgICAgICAgLy8gYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAiZnJhbWU6ICVkIHwgQnl0ZXMgd3JpdHRlbjogICVkIHwgYnl0ZXMg dG90YWw6ICVmIHwgZm51bSAlZCB8ICVsbGQgfCAlbGxkIHwgJWxsZCB8ICVsbGQgfFxuIiwgeGUt PmVuY29kX2ZyYW1lcywgeGUtPnN0YXQud3JpdGUsIHhlLT5ieXRlc190b3RhbCwgeGUtPnN0YXQu Zm51bSwgeGUtPmJpdGIudHNbMF0seGUtPmJpdGIudHNbMV0seGUtPmJpdGIudHNbMl0seGUtPmJp dGIudHNbM10pOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgcmV0ID0gYXZfZ3Jvd19wYWNrZXQo cGt0LCB4ZS0+c3RhdC53cml0ZSk7DQoNCmZmX2dldF9lbmNvZGVfYnVmZmVyKCkuDQoNClNob3Vs ZCBJIHVzZSBmZl9nZXRfZW5jb2RlX2J1ZmZlcigpIGluc3RhZWFkIG9mIGF2X2dyb3dfcGFja2V0 PyBXaGF0cyB3cm9uZyB3aXQgYXZfZ3Jvd19wYWNrZXQ/DQoNCj4gKyAgICAgICAgICAgICAgICBp ZiAocmV0IDwgMCkgew0KPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIEFWUGFja2V0IGRhdGFcbiIpOw0KPiAr ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiArICAgICAgICAgICAgICAgIH0NCj4g Kw0KPiArICAgICAgICAgICAgICAgIG1lbWNweShwa3QtPmRhdGEsIHhlLT5iaXRiLmFkZHIsIHhl LT5zdGF0LndyaXRlKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgIHBrdC0+cHRzID0geGUtPmJp dGIudHNbMF07DQo+ICsgICAgICAgICAgICAgICAgcGt0LT5kdHMgPSB4ZS0+Yml0Yi50c1sxXTsN Cj4gKw0KPiArICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJQVFM6 ICVsZCB8IERUUzogJWxkXG4iLCBwa3QtPnB0cywgcGt0LT5kdHMpOw0KPiArDQo+ICsgICAgICAg ICAgICAgICAgeGUtPmJpdHJhdGUgKz0gKHhlLT5zdGF0LndyaXRlIC0geGUtPnN0YXQuc2VpX3Np emUpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgc3dpdGNoKHhlLT5zdGF0LnN0eXBlKSB7DQo+ ICsgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX0k6DQo+ICsgICAgICAgICAgICAgICAgICAg IGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7DQo+ICsgICAgICAgICAgICAgICAgICAg IHBrdC0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZOw0KPiArICAgICAgICAgICAgICAgICAgICBi cmVhazsNCj4gKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfUDoNCj4gKyAgICAgICAgICAg ICAgICAgICAgYXZfcGljX3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfUDsNCj4gKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX0I6DQo+ICsg ICAgICAgICAgICAgICAgICAgIGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX0I7DQo+ICsg ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9T VF9VTktOT1dOOg0KPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLCAidW5rbm93biBzbGljZSB0eXBlXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOw0KPiArICAgICAgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIk9VVFBVVCB8IEVuY29kZWQgfCBzbGljZSB0eXBlOiAl cyB8IGZudW06ICVsZCB8IHBvYzogJWQgfCBCeXRlcyB3cml0dGVuOiAgJWQgfCBieXRlcyB0b3Rh bDogJWYgfCB0aW1lc3RhbXBzIHwgJWxsZCB8ICVsbGQgfCAlbGxkIHwgJWxsZCB8XG4iLA0KPiAr ICAgICAgICAgICAgICAgICAgICBzbGljZV90eXBlKGF2X3BpY190eXBlKSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgeGUtPnN0YXQuZm51bSwNCj4gKyAgICAgICAgICAgICAgICAgICAgeGUtPnN0 YXQucG9jLA0KPiArICAgICAgICAgICAgICAgICAgICB4ZS0+c3RhdC53cml0ZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgeGUtPmJ5dGVzX3RvdGFsLA0KPiArICAgICAgICAgICAgICAgICAgICB4 ZS0+Yml0Yi50c1swXSwNCj4gKyAgICAgICAgICAgICAgICAgICAgeGUtPmJpdGIudHNbMV0sDQo+ ICsgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRiLnRzWzJdLA0KPiArICAgICAgICAgICAgICAg ICAgICB4ZS0+Yml0Yi50c1szXSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICBmZl9zaWRlX2Rh dGFfc2V0X2VuY29kZXJfc3RhdHMocGt0LCB4ZS0+c3RhdC5xcCpGRl9RUDJMQU1CREEsIE5VTEws IDAsIGF2X3BpY190eXBlKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgIHhlLT5iaXRyYXRlICs9 ICh4ZS0+c3RhdC53cml0ZSAtIHhlLT5zdGF0LnNlaV9zaXplKTsNCj4gKw0KPiArICAgICAgICAg ICAgICAgICpnb3RfcGFja2V0ID0gMTsNCj4gKyAgICAgICAgICAgICAgICB4ZS0+cGFja2V0X2Nv dW50Kys7DQo+ICsgICAgICAgICAgICB9DQo+ICsgICAgICAgIH0gZWxzZSBpZiAocmV0ID09IFhF VkVfT0tfTk9fTU9SRV9GUk0pIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19J TkZPLCAiUmV0dXJuIE9LIGJ1dCBubyBtb3JlIGZyYW1lcyAoJWQpXG4iLCByZXQpOw0KPiArICAg ICAgICAgICAgcmV0dXJuIDA7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJJbnZhbGlkIHJldHVybiB2YWx1ZSAoJWQpXG4iLCBy ZXQpOw0KPiArICAgICAgICAgICAgcmV0dXJuIC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgfSBl bHNlIHsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlVkZWZpbmVkIHN0 YXRlOiAlZFxuIiwgeGUtPnN0YXRlKTsNCj4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiArICAgIH0N Cj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBEZXN0cm95IGVuY29k ZXIgYW5kIHJlbGVhc2UgYWxsIHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzDQo+ICsgKg0KPiArICog QHBhcmFtIGN0eCBjb2RlYyBjb250ZXh0DQo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVn YXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBhdl9jb2xkIGlu dCBsaWJ4ZXZlX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICpjdHgpDQo+ICt7DQo+ICsgICAgWGV2ZUNv bnRleHQgKnhlID0gY3R4LT5wcml2X2RhdGE7DQo+ICsNCj4gKyAgICB4ZXZlX2RlbGV0ZSh4ZS0+ aWQpOw0KPiArDQo+ICsgICAgaWYoeGUtPmJpdGIuYWRkcikgZnJlZSh4ZS0+Yml0Yi5hZGRyKTsg LyogcmVsZWFzZSBiaXRzdHJlYW0gYnVmZmVyICovDQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoWGV2ZUNvbnRleHQsIHgpDQo+ ICsjZGVmaW5lIFZFIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJ TkdfUEFSQU0NCj4gKw0KPiArLy8gRXhhbXBsZSBvZiB1c2luZzogLi9mZm1wZWcgLXhldmUtcGFy YW1zICJtPTI6cT0xNyINCj4gKy8vIENvbnNpZGVyIHVzaW5nIGZvbGxvd2luZyBvcHRpb25zICgu L2ZmbXBlZyAtLWhlbHAgZW5jb2Rlcj1saWJ4ZXZlKQ0KPiArLy8NCj4gK3N0YXRpYyBjb25zdCBB Vk9wdGlvbiB4ZXZlX29wdGlvbnNbXSA9IHsNCj4gKyAgICB7ICJwcmVzZXQiLCAiRW5jb2Rpbmcg cHJlc2V0IGZvciBzZXR0aW5nIGVuY29kaW5nIHNwZWVkIFtmYXN0LCBtZWRpdW0sIHNsb3csIHBs YWNlYm9dIiwgT0ZGU0VUKG9wX3ByZXNldCksIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0g Im1lZGl1bSIgfSwgMCwgMCwgVkUgfSwNCj4gKyAgICB7ICJ0dW5lIiwgIlR1bmVpbmcgcGFyYW1l dGVyIGZvciBzcGVjaWFsIHB1cnBvc2Ugb3BlcmF0aW9uIFtwc25yLCB6ZXJvbGF0ZW5jeV0iLCBP RkZTRVQob3BfdHVuZSksIEFWX09QVF9UWVBFX1NUUklORywgeyAwIH0sIDAsIDAsIFZFfSwNCj4g KyAgICB7ICJxcCIsICJxdWFudGl6YXRpb24gcGFyYW1ldGVyIHFwIDwwLi41MT4gW2RlZmF1bHQ6 IDMyXSIsIE9GRlNFVChvcF9xcCksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMzIgfSwgMCwg NTEsIFZFIH0sDQo+ICsgICAgeyAiY3JmIiwgImNvbnN0YW50IHJhdGUgZmFjdG9yIDwtMS4uNTE+ IFtkZWZhdWx0OiAzMl0iLCBPRkZTRVQob3BfY3JmKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQg PSAtMSB9LCAtMSwgNTEsIFZFIH0sDQo+ICsgICAgeyAieGV2ZS1wYXJhbXMiLCAib3ZlcnJpZGUg dGhlIHhldmUgY29uZmlndXJhdGlvbiB1c2luZyBhIDotc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZh bHVlIHBhcmFtZXRlcnMiLCBPRkZTRVQoeGV2ZV9wYXJhbXMpLCBBVl9PUFRfVFlQRV9ESUNULCAg IHsgMCB9LCAwLCAwLCBWRSB9LA0KPiArICAgIHsgTlVMTCB9DQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgY29uc3QgQVZDbGFzcyB4ZXZlX2NsYXNzID0gew0KPiArICAgIC5jbGFzc19uYW1lID0gImxp YnhldmUiLA0KPiArICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsDQo+ICsg ICAgLm9wdGlvbiAgICAgPSB4ZXZlX29wdGlvbnMsDQo+ICsgICAgLnZlcnNpb24gICAgPSBMSUJB VlVUSUxfVkVSU0lPTl9JTlQsDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqICBsaWJhdmNvZGVj IGdlbmVyaWMgZ2xvYmFsIG9wdGlvbnMsIHdoaWNoIGNhbiBiZSBzZXQgb24gYWxsIHRoZSBlbmNv ZGVycyBhbmQgZGVjb2RlcnMNCj4gKyAqICBAc2VlIGh0dHBzOi8vd3d3LmZmbXBlZy5vcmcvZmZt cGVnLWNvZGVjcy5odG1sI0NvZGVjLU9wdGlvbnMNCj4gKyAqLw0KPiArc3RhdGljIGNvbnN0IEFW Q29kZWNEZWZhdWx0IHhldmVfZGVmYXVsdHNbXSA9IHsNCj4gKyAgICB7ICJiIiwgIjAiIH0sICAg ICAgIC8vIGJpdHJhdGUNCj4gKyAgICB7ICJnIiwgIjAiIH0sICAgICAgIC8vIGdvcF9zaXplIChr ZXktZnJhbWUgaW50ZXJ2YWwgMDogb25seSBvbmUgSS1mcmFtZSBhdCB0aGUgZmlyc3QgdGltZTsg MTogZXZlcnkgZnJhbWUgaXMgY29kZWQgaW4gSS1mcmFtZSkNCj4gKyAgICB7ICJiZiIsICIxNSJ9 LCAgICAgIC8vIGJmcmFtZXMgKDA6IG5vIEItZnJhbWVzKQ0KPiArICAgIHsgInByb2ZpbGUiLCAi MCJ9LCAgLy8gZW5jb2RlciBjb2RlYyBwcm9maWxlICgwOiBiYXNlbGllOyAxOiBtYWluKQ0KPiAr ICAgIHsgInRocmVhZHMiLCAiMCJ9LCAgLy8gbnVtYmVyIG9mIHRocmVhZHMgdG8gYmUgdXNlZCAo MDogYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNldCkNCj4g KyAgICB7IE5VTEwgfSwNCj4gK307DQo+ICsNCj4gK0FWQ29kZWMgZmZfbGlieGV2ZV9lbmNvZGVy ID0gew0KPiArICAgIC5uYW1lICAgICAgICAgICAgID0gImxpYnhldmUiLA0KPiArICAgIC5sb25n X25hbWUgICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoImxpYnhldmUgTVBFRy01IEVWQyIp LA0KPiArICAgIC50eXBlICAgICAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLA0KPiArICAg IC5pZCAgICAgICAgICAgICAgID0gQVZfQ09ERUNfSURfRVZDLA0KPiArICAgIC5pbml0ICAgICAg ICAgICAgID0gbGlieGV2ZV9pbml0LA0KPiArICAgIC5pbml0X3N0YXRpY19kYXRhID0gbGlieGV2 ZV9pbml0X3N0YXRpY19kYXRhLA0KPiArICAgIC5lbmNvZGUyICAgICAgICAgID0gbGlieGV2ZV9l bmNvZGUsDQo+ICsgICAgLmNsb3NlICAgICAgICAgICAgPSBsaWJ4ZXZlX2Nsb3NlLA0KPiArICAg IC5wcml2X2RhdGFfc2l6ZSAgID0gc2l6ZW9mKFhldmVDb250ZXh0KSwNCj4gKyAgICAucHJpdl9j bGFzcyAgICAgICA9ICZ4ZXZlX2NsYXNzLA0KPiArICAgIC5kZWZhdWx0cyAgICAgICAgID0geGV2 ZV9kZWZhdWx0cywNCj4gKyAgICAuY2FwYWJpbGl0aWVzICAgICA9IEFWX0NPREVDX0NBUF9ERUxB WSB8IEFWX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMgfA0KPiArICAgIEFWX0NPREVDX0NBUF9FTkNP REVSX1JFT1JERVJFRF9PUEFRVUUsDQoNCllvdSdyZSBub3Qgc2V0dGluZyByZW9yZGVyZWRfb3Bh cXVlLCBzbyB3aHkgc2lnbmFsIHRoaXMgY29kZWMgY2FwYWJpbGl0eT8NCg0KQWxzbyBhZGQgQVZf Q09ERUNfQ0FQX0RSMSBpZiB5b3UgdXNlIGZmX2dldF9lbmNvZGVfYnVmZmVyKCkuDQoNCj4gKyAg ICAud3JhcHBlcl9uYW1lICAgICA9ICJsaWJ4ZXZlIiwNCj4gK307DQo+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL3BhcnNlcnMuYyBiL2xpYmF2Y29kZWMvcGFyc2Vycy5jDQo+IGluZGV4IDZiNDBj MThkODAuLjI5NWZhMzNmNTIgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvcGFyc2Vycy5jDQo+ ICsrKyBiL2xpYmF2Y29kZWMvcGFyc2Vycy5jDQo+IEBAIC03Myw2ICs3Myw3IEBAIGV4dGVybiBj b25zdCBBVkNvZGVjUGFyc2VyIGZmX3ZwOV9wYXJzZXI7DQo+ICAgZXh0ZXJuIGNvbnN0IEFWQ29k ZWNQYXJzZXIgZmZfd2VicF9wYXJzZXI7DQo+ICAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIg ZmZfeGJtX3BhcnNlcjsNCj4gICBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl94bWFfcGFy c2VyOw0KPiArZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlcjsNCj4gICAN Cj4gICAjaW5jbHVkZSAibGliYXZjb2RlYy9wYXJzZXJfbGlzdC5jIg0KPiAgIA0KPiBkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9wcm9maWxlcy5jIGIvbGliYXZjb2RlYy9wcm9maWxlcy5jDQo+IGlu ZGV4IDdhZjdmYmViMTMuLmEzMTI0NGUwZGIgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvcHJv ZmlsZXMuYw0KPiArKysgYi9saWJhdmNvZGVjL3Byb2ZpbGVzLmMNCj4gQEAgLTE4MSw0ICsxODEs MTAgQEAgY29uc3QgQVZQcm9maWxlIGZmX2FyaWJfY2FwdGlvbl9wcm9maWxlc1tdID0gew0KPiAg ICAgICB7IEZGX1BST0ZJTEVfVU5LTk9XTiB9DQo+ICAgfTsNCj4gICANCj4gK2NvbnN0IEFWUHJv ZmlsZSBmZl9ldmNfcHJvZmlsZXNbXSA9IHsNCj4gKyAgICB7IEZGX1BST0ZJTEVfRVZDX0JBU0VM SU5FLCAgICAgICAgICAgICAiQmFzZWxpbmUiICAgICAgICAgICAgICB9LA0KPiArICAgIHsgRkZf UFJPRklMRV9FVkNfTUFJTiwgICAgICAgICAgICAgICAgICJNYWluIiAgICAgICAgICAgICAgICAg IH0sDQo+ICsgICAgeyBGRl9QUk9GSUxFX1VOS05PV04gfSwNCj4gK307DQo+ICsNCj4gICAjZW5k aWYgLyogIUNPTkZJR19TTUFMTCAqLw0KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9wcm9maWxl cy5oIGIvbGliYXZjb2RlYy9wcm9maWxlcy5oDQo+IGluZGV4IDQxYTE5YWE5YWQuLmNmOTJiNWYx MjYgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvcHJvZmlsZXMuaA0KPiArKysgYi9saWJhdmNv ZGVjL3Byb2ZpbGVzLmgNCj4gQEAgLTcyLDUgKzcyLDYgQEAgZXh0ZXJuIGNvbnN0IEFWUHJvZmls ZSBmZl9zYmNfcHJvZmlsZXNbXTsNCj4gICBleHRlcm4gY29uc3QgQVZQcm9maWxlIGZmX3Byb3Jl c19wcm9maWxlc1tdOw0KPiAgIGV4dGVybiBjb25zdCBBVlByb2ZpbGUgZmZfbWpwZWdfcHJvZmls ZXNbXTsNCj4gICBleHRlcm4gY29uc3QgQVZQcm9maWxlIGZmX2FyaWJfY2FwdGlvbl9wcm9maWxl c1tdOw0KPiArZXh0ZXJuIGNvbnN0IEFWUHJvZmlsZSBmZl9ldmNfcHJvZmlsZXNbXTsNCj4gICAN Cj4gICAjZW5kaWYgLyogQVZDT0RFQ19QUk9GSUxFU19IICovDQo+IGRpZmYgLS1naXQgYS9saWJh dmNvZGVjL3ZlcnNpb24uaCBiL2xpYmF2Y29kZWMvdmVyc2lvbi5oDQo+IGluZGV4IDRkNzc0MzE4 NDIuLmZiMWEwZmVlYzYgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvdmVyc2lvbi5oDQo+ICsr KyBiL2xpYmF2Y29kZWMvdmVyc2lvbi5oDQo+IEBAIC0yOCw3ICsyOCw3IEBADQo+ICAgI2luY2x1 ZGUgImxpYmF2dXRpbC92ZXJzaW9uLmgiDQo+ICAgDQo+ICAgI2RlZmluZSBMSUJBVkNPREVDX1ZF UlNJT05fTUFKT1IgIDU5DQo+IC0jZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9NSU5PUiAgMTgN Cj4gKyNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JTk9SICAxOQ0KPiAgICNkZWZpbmUgTElC QVZDT0RFQ19WRVJTSU9OX01JQ1JPIDEwMA0KPiAgIA0KPiAgICNkZWZpbmUgTElCQVZDT0RFQ19W RVJTSU9OX0lOVCAgQVZfVkVSU0lPTl9JTlQoTElCQVZDT0RFQ19WRVJTSU9OX01BSk9SLCBcDQo+ IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxl DQo+IGluZGV4IDg0ZTczZTNjNjMuLmRiNDYxZTc5YjcgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Zm9y bWF0L01ha2VmaWxlDQo+ICsrKyBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlDQo+IEBAIC0yNDEsNiAr MjQxLDggQEAgT0JKUy0kKENPTkZJR19IQ09NX0RFTVVYRVIpICAgICAgICAgICAgICArPSBoY29t Lm8gcGNtLm8NCj4gICBPQkpTLSQoQ09ORklHX0hEU19NVVhFUikgICAgICAgICAgICAgICAgICs9 IGhkc2VuYy5vDQo+ICAgT0JKUy0kKENPTkZJR19IRVZDX0RFTVVYRVIpICAgICAgICAgICAgICAr PSBoZXZjZGVjLm8gcmF3ZGVjLm8NCj4gICBPQkpTLSQoQ09ORklHX0hFVkNfTVVYRVIpICAgICAg ICAgICAgICAgICs9IHJhd2VuYy5vDQo+ICtPQkpTLSQoQ09ORklHX0VWQ19ERU1VWEVSKSAgICAg ICAgICAgICAgICs9IGV2Y2RlYy5vIHJhd2RlYy5vDQo+ICtPQkpTLSQoQ09ORklHX0VWQ19NVVhF UikgICAgICAgICAgICAgICAgICs9IHJhd2VuYy5vDQo+ICAgT0JKUy0kKENPTkZJR19ITFNfREVN VVhFUikgICAgICAgICAgICAgICArPSBobHMubyBobHNfc2FtcGxlX2VuY3J5cHRpb24ubw0KPiAg IE9CSlMtJChDT05GSUdfSExTX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gaGxzZW5jLm8gaGxz cGxheWxpc3QubyBhdmMubw0KPiAgIE9CSlMtJChDT05GSUdfSE5NX0RFTVVYRVIpICAgICAgICAg ICAgICAgKz0gaG5tLm8NCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyBi L2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYw0KPiBpbmRleCBkMDY2YTc3NDViLi4xMTQ4MDI0ZTcx IDEwMDY0NA0KPiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMNCj4gKysrIGIvbGliYXZm b3JtYXQvYWxsZm9ybWF0cy5jDQo+IEBAIC0xNDUsNiArMTQ1LDggQEAgZXh0ZXJuIGNvbnN0IEFW SW5wdXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7DQo+ICAgZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX2VhYzNfZGVtdXhlcjsNCj4gICBleHRlcm4gY29uc3QgQVZPdXRwdXRGb3Jt YXQgZmZfZWFjM19tdXhlcjsNCj4gICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZXBh Zl9kZW11eGVyOw0KPiArZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2V2Y19kZW11eGVy Ow0KPiArZXh0ZXJuIGNvbnN0IEFWT3V0cHV0Rm9ybWF0IGZmX2V2Y19tdXhlcjsNCj4gICBleHRl cm4gY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfZjR2X211eGVyOw0KPiAgIGV4dGVybiBjb25zdCBB VklucHV0Rm9ybWF0ICBmZl9mZm1ldGFkYXRhX2RlbXV4ZXI7DQo+ICAgZXh0ZXJuIGNvbnN0IEFW T3V0cHV0Rm9ybWF0IGZmX2ZmbWV0YWRhdGFfbXV4ZXI7DQo+IGRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC9ldmNkZWMuYyBiL2xpYmF2Zm9ybWF0L2V2Y2RlYy5jDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmRkOTEwMmNkZDQNCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9saWJhdmZvcm1hdC9ldmNkZWMuYw0KPiBAQCAtMCwwICsxLDEzNiBAQA0KPiArLyoNCj4g KyAqIFJBVyBFVkMgdmlkZW8gZGVtdXhlcg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAy MSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4NCj4gKyAqDQo+ICsgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuDQo+ICsgKg0KPiArICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPiArICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyDQo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4gKyAqDQo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQ0KPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCj4gKyAqDQo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+ICsgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgImxpYmF2Y29kZWMvZ2V0X2JpdHMu aCINCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL2dvbG9tYi5oIg0KPiArI2luY2x1ZGUgImF2Zm9y bWF0LmgiDQo+ICsjaW5jbHVkZSAicmF3ZGVjLmgiDQo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9p bnRlcm5hbC5oIg0KPiArI2luY2x1ZGUgInhldmQuaCINCg0KTGlrZSB3aXRoIHRoZSBwYXJzZXIs IHRoZSBkZW11eGVyIGFuZCBtdXhlciBjYW4ndCBkZXBlbmQgb24gZXh0ZXJuYWwgDQpsaWJyYXJp ZXMuDQoNCkZJWEVEDQoNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgRVZDUGFyc2VyQ29udGV4dCB7 DQo+ICsgICAgaW50IGdvdF9zcHM7DQo+ICsgICAgaW50IGdvdF9wcHM7DQo+ICsgICAgaW50IGdv dF9pZHI7DQo+ICsgICAgaW50IGdvdF9ub25pZHI7DQo+ICt9IEVWQ1BhcnNlckNvbnRleHQ7DQo+ ICsNCj4gK3N0YXRpYyBpbnQgZ2V0X25hbHVfdHlwZShjb25zdCB1aW50OF90ICpicywgaW50IGJz X3NpemUpDQo+ICt7DQo+ICsgICAgR2V0Qml0Q29udGV4dCBnYjsNCj4gKyAgICBpbnQgZnpiLCBu dXQ7DQo+ICsgICAgaW5pdF9nZXRfYml0cygmZ2IsIGJzLCBic19zaXplICogOCk7DQo+ICsgICAg ZnpiID0gZ2V0X2JpdHMxKCZnYik7DQo+ICsgICAgaWYoZnpiICE9IDApIHsNCj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImZvcmJpZGRlbl96ZXJvX2JpdCBpcyBub3QgY2xl YXJcbiIpOw0KPiArICAgIH0NCj4gKyAgICBudXQgPSBnZXRfYml0cygmZ2IsIDYpOyAvKiBuYWxf dW5pdF90eXBlX3BsdXMxICovDQo+ICsgICAgcmV0dXJuIG51dCAtIDE7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICogUmVhZCBOQUwgdW5pdCBsZW5ndGgNCj4gKyAqIEBwYXJhbSBicyBpbnB1dCBk YXRhIChiaXRzdHJlYW0pDQo+ICsgKiBAcmV0dXJuIHRoZSBsZW5naHRoIG9mIE5BTCB1bml0IG9u IHN1Y2Nlc3MsIDAgdmFsdWUgb24gZmFpbHVyZQ0KPiArICovDQo+ICtzdGF0aWMgdWludDMyX3Qg cmVhZF9uYWxfdW5pdF9sZW5ndGgoY29uc3QgdWludDhfdCAqYnMsIGludCBic19zaXplKQ0KPiAr ew0KPiArICAgIHVpbnQzMl90IGxlbiA9IDA7DQo+ICsgICAgWEVWRF9JTkZPIGluZm87DQo+ICsg ICAgaW50IHJldDsNCj4gKw0KPiArICAgIGlmKGJzX3NpemU+PVhFVkRfTkFMX1VOSVRfTEVOR1RI X0JZVEUpIHsNCj4gKyAgICAgICAgcmV0ID0geGV2ZF9pbmZvKCh2b2lkKilicywgWEVWRF9OQUxf VU5JVF9MRU5HVEhfQllURSwgMSwgJmluZm8pOw0KPiArICAgICAgICBpZiAoWEVWRF9GQUlMRUQo cmV0KSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5v dCBnZXQgYml0c3RyZWFtIGluZm9ybWF0aW9uXG4iKTsNCj4gKyAgICAgICAgICAgIHJldHVybiAw Ow0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGxlbiA9IGluZm8ubmFsdV9sZW47DQo+ICsgICAg ICAgIGlmKGxlbiA9PSAwKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBiaXRzdHJlYW0gc2l6ZSEgWyVkXVxuIiwgYnNfc2l6 ZSk7DQo+ICsgICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAgICAgfQ0KPiArICAgIH0NCj4g KyAgICByZXR1cm4gbGVuOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHBhcnNlX25hbF91bml0 cyhjb25zdCBBVlByb2JlRGF0YSAqcCwgRVZDUGFyc2VyQ29udGV4dCAqZXYpDQo+ICt7DQo+ICsg ICAgaW50IG5hbHVfdHlwZTsNCj4gKyAgICBzaXplX3QgbmFsdV9zaXplOw0KPiArICAgIHVuc2ln bmVkIGNoYXIqIGJpdHMgPSAodW5zaWduZWQgY2hhciAqKXAtPmJ1ZjsNCj4gKyAgICBpbnQgYnl0 ZXNfdG9fcmVhZCA9IHAtPmJ1Zl9zaXplOw0KPiArDQo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19ERUJVRywgImJ5dGVzX3RvX3JlYWQ6ICVkIFxuIiwgYnl0ZXNfdG9fcmVhZCk7DQo+ICsNCj4g KyAgICB3aGlsZShieXRlc190b19yZWFkID4gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSkgew0K PiArDQo+ICsgICAgICAgIG5hbHVfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKGJpdHMsIFhF VkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpOw0KPiArICAgICAgICBpZihuYWx1X3NpemUgPT0gMCkg YnJlYWs7DQo+ICsNCj4gKyAgICAgICAgYml0cyArPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRF Ow0KPiArICAgICAgICBieXRlc190b19yZWFkIC09IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7 DQo+ICsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIm5hbHVfc2l6ZTog JWxkIFxuIiwgbmFsdV9zaXplKTsNCj4gKw0KPiArICAgICAgICBpZihieXRlc190b19yZWFkIDwg bmFsdV9zaXplKSBicmVhazsNCj4gKw0KPiArICAgICAgICBuYWx1X3R5cGUgPSBnZXRfbmFsdV90 eXBlKGJpdHMsIGJ5dGVzX3RvX3JlYWQpOw0KPiArDQo+ICsgICAgICAgIGJpdHMgKz0gbmFsdV9z aXplOw0KPiArICAgICAgICBieXRlc190b19yZWFkIC09IG5hbHVfc2l6ZTsNCj4gKw0KPiArICAg ICAgICBpZiAobmFsdV90eXBlID09IFhFVkRfTlVUX1NQUykgew0KPiArICAgICAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1NQUyBcbiIpOw0KPiArICAgICAgICAg ICAgZXYtPmdvdF9zcHMrKzsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBlbHNlIGlmIChuYWx1 X3R5cGUgPT0gWEVWRF9OVVRfUFBTKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0RFQlVHLCAiWEVWRF9OVVRfUFBTIFxuIik7DQo+ICsgICAgICAgICAgICBldi0+Z290X3Bw cysrOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGVsc2UgaWYgKG5hbHVfdHlwZSA9PSBYRVZE X05VVF9JRFIgKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi WEVWRF9OVVRfSURSXG4iKTsNCj4gKyAgICAgICAgICAgIGV2LT5nb3RfaWRyKys7DQo+ICsgICAg ICAgIH0NCj4gKyAgICAgICAgZWxzZSBpZiAobmFsdV90eXBlID09IFhFVkRfTlVUX05PTklEUikg ew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX05P TklEUlxuIik7DQo+ICsgICAgICAgICAgICBldi0+Z290X25vbmlkcisrOw0KPiArICAgICAgICB9 DQo+ICsgICAgfQ0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGV2 Y19wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkNCj4gK3sNCj4gKyAgICBFVkNQYXJzZXJDb250 ZXh0IGV2ID0ge307DQo+ICsgICAgaW50IHJldCA9IHBhcnNlX25hbF91bml0cyhwLCAmZXYpOw0K PiArDQo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgInNwczolZCBwcHM6JWQgaWRy OiVkIHNsaTolZFxuIiwgZXYuZ290X3NwcywgZXYuZ290X3BwcywgZXYuZ290X2lkciwgZXYuZ290 X25vbmlkcik7DQo+ICsNCj4gKyAgICBpZiAocmV0ID09IDAgJiYgZXYuZ290X3NwcyAmJiBldi5n b3RfcHBzICYmIChldi5nb3RfaWRyIHx8IGV2LmdvdF9ub25pZHIgPiAzKSkNCj4gKyAgICAgICAg cmV0dXJuIEFWUFJPQkVfU0NPUkVfRVhURU5TSU9OICsgMTsgIC8vIDEgbW9yZSB0aGFuIC5tcGcN Cj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtGRl9ERUZfUkFXVklERU9fREVN VVhFUihldmMsICJyYXcgRVZDIHZpZGVvIiwgZXZjX3Byb2JlLCAiZXZjIiwgQVZfQ09ERUNfSURf RVZDKQ0KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaXNvbV90YWdzLmMgYi9saWJhdmZvcm1h dC9pc29tX3RhZ3MuYw0KPiBpbmRleCA2MmU2MDQ3MGE4Li4wMjQ1Y2ZiOTk5IDEwMDY0NA0KPiAt LS0gYS9saWJhdmZvcm1hdC9pc29tX3RhZ3MuYw0KPiArKysgYi9saWJhdmZvcm1hdC9pc29tX3Rh Z3MuYw0KPiBAQCAtMTQ1LDYgKzE0NSw4IEBAIGNvbnN0IEFWQ29kZWNUYWcgZmZfY29kZWNfbW92 dmlkZW9fdGFnc1tdID0gew0KPiAgICAgICB7IEFWX0NPREVDX0lEX0gyNjQsIE1LVEFHKCdkJywg J3YnLCAnYScsICcxJykgfSwgLyogQVZDLWJhc2VkIERvbGJ5IFZpc2lvbiBkZXJpdmVkIGZyb20g YXZjMSAqLw0KPiAgICAgICB7IEFWX0NPREVDX0lEX0gyNjQsIE1LVEFHKCdkJywgJ3YnLCAnYScs ICd2JykgfSwgLyogQVZDLWJhc2VkIERvbGJ5IFZpc2lvbiBkZXJpdmVkIGZyb20gYXZjMyAqLw0K PiAgIA0KPiArICAgIHsgQVZfQ09ERUNfSURfRVZDLCAgTUtUQUcoJ2UnLCAndicsICdjJywgJzEn KSB9LCAvKiBFVkMvTVBFRy01ICovDQo+ICsNCj4gICAgICAgeyBBVl9DT0RFQ19JRF9WUDgsICBN S1RBRygndicsICdwJywgJzAnLCAnOCcpIH0sIC8qIFZQOCAqLw0KPiAgICAgICB7IEFWX0NPREVD X0lEX1ZQOSwgIE1LVEFHKCd2JywgJ3AnLCAnMCcsICc5JykgfSwgLyogVlA5ICovDQo+ICAgICAg IHsgQVZfQ09ERUNfSURfQVYxLCAgTUtUQUcoJ2EnLCAndicsICcwJywgJzEnKSB9LCAvKiBBVjEg Ki8NCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21vdi5jIGIvbGliYXZmb3JtYXQvbW92LmMN Cj4gaW5kZXggNmZiMDlkZjdlMS4uZTgzODcyZmJlMiAxMDA2NDQNCj4gLS0tIGEvbGliYXZmb3Jt YXQvbW92LmMNCj4gKysrIGIvbGliYXZmb3JtYXQvbW92LmMNCj4gQEAgLTg1NjgsNyArODU2OCw3 IEBAIGNvbnN0IEFWSW5wdXRGb3JtYXQgZmZfbW92X2RlbXV4ZXIgPSB7DQo+ICAgICAgIC5sb25n X25hbWUgICAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJRdWlja1RpbWUgLyBNT1YiKSwNCj4g ICAgICAgLnByaXZfY2xhc3MgICAgID0gJm1vdl9jbGFzcywNCj4gICAgICAgLnByaXZfZGF0YV9z aXplID0gc2l6ZW9mKE1PVkNvbnRleHQpLA0KPiAtICAgIC5leHRlbnNpb25zICAgICA9ICJtb3Ys bXA0LG00YSwzZ3AsM2cyLG1qMixwc3AsbTRiLGlzbSxpc212LGlzbWEsZjR2IiwNCj4gKyAgICAu ZXh0ZW5zaW9ucyAgICAgPSAibW92LG1wNCxtNGEsM2dwLDNnMixtajIscHNwLG00Yixpc20saXNt dixpc21hLGY0dixldmMiLA0KPiAgICAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GTVRfSU5JVF9D TEVBTlVQLA0KPiAgICAgICAucmVhZF9wcm9iZSAgICAgPSBtb3ZfcHJvYmUsDQo+ICAgICAgIC5y ZWFkX2hlYWRlciAgICA9IG1vdl9yZWFkX2hlYWRlciwNCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9y bWF0L21vdmVuYy5jIGIvbGliYXZmb3JtYXQvbW92ZW5jLmMNCj4gaW5kZXggNGM4Njg5MTlhZS4u MzBlNTAzN2YwNiAxMDA2NDQNCj4gLS0tIGEvbGliYXZmb3JtYXQvbW92ZW5jLmMNCj4gKysrIGIv bGliYXZmb3JtYXQvbW92ZW5jLmMNCj4gQEAgLTEzNDIsNiArMTM0MiwxNiBAQCBzdGF0aWMgaW50 IG1vdl93cml0ZV9odmNjX3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVlRyYWNrICp0cmFjaykNCj4g ICAgICAgcmV0dXJuIHVwZGF0ZV9zaXplKHBiLCBwb3MpOw0KPiAgIH0NCj4gICANCj4gK3N0YXRp YyBpbnQgbW92X3dyaXRlX2V2Y2NfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNr KQ0KPiArew0KPiArICAgIGludDY0X3QgcG9zID0gYXZpb190ZWxsKHBiKTsNCj4gKw0KPiArICAg IGF2aW9fd2IzMihwYiwgMCk7DQo+ICsgICAgZmZpb193Zm91cmNjKHBiLCAiZXZjQyIpOw0KPiAr ICAgIGZmX2lzb21fd3JpdGVfYXZjYyhwYiwgdHJhY2stPnZvc19kYXRhLCB0cmFjay0+dm9zX2xl bik7DQoNCldoeSBhcmUgeW91IHdyaXRpbmcgaDI2NCBleHRyYWRhdGE/IEVzcGVjaWFsbHkgd2hl biB5b3UgZGlkIG5vdCBkZWZpbmUgDQphbnkgYXMgZXhwb3J0ZWQgYnkgdGhlIGVuY29kZXIgb3Ig dGhlIG1vdiBkZW11eGVyLg0KDQpGSVhFRA0KDQo+ICsgICAgcmV0dXJuIHVwZGF0ZV9zaXplKHBi LCBwb3MpOw0KPiArfQ0KPiArDQo+ICAgLyogYWxzbyB1c2VkIGJ5IGFsbCBhdmlkIGNvZGVjcyAo ZHYsIGlteCwgbWVyaWRpZW4pIGFuZCB0aGVpciB2YXJpYW50cyAqLw0KPiAgIHN0YXRpYyBpbnQg bW92X3dyaXRlX2F2aWRfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQ0KPiAg IHsNCj4gQEAgLTE1OTEsNiArMTYwMSwxOSBAQCBzdGF0aWMgaW50IG1vdl9nZXRfaDI2NF9jb2Rl Y190YWcoQVZGb3JtYXRDb250ZXh0ICpzLCBNT1ZUcmFjayAqdHJhY2spDQo+ICAgICAgIHJldHVy biB0YWc7DQo+ICAgfQ0KPiAgIA0KPiArc3RhdGljIGludCBtb3ZfZ2V0X2V2Y19jb2RlY190YWco QVZGb3JtYXRDb250ZXh0ICpzLCBNT1ZUcmFjayAqdHJhY2spDQo+ICt7DQo+ICsgICAgaW50IHRh ZyA9IHRyYWNrLT5wYXItPmNvZGVjX3RhZzsNCj4gKyAgICBpbnQgaW50ZXJsYWNlZCA9IHRyYWNr LT5wYXItPmZpZWxkX29yZGVyID4gQVZfRklFTERfUFJPR1JFU1NJVkU7DQo+ICsgICAgQVZTdHJl YW0gKnN0ID0gdHJhY2stPnN0Ow0KPiArICAgIGludCByYXRlID0gZGVmaW5lZF9mcmFtZV9yYXRl KHMsIHN0KTsNCj4gKw0KPiArICAgIGlmICghdGFnKQ0KPiArICAgICAgICB0YWcgPSBNS1RBRygn ZScsICd2JywgJ2MnLCAnaScpOyAvL2ZhbGxiYWNrIHRhZw0KPiArDQo+ICsgICAgcmV0dXJuIHRh ZzsNCj4gK30NCj4gKw0KPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgew0KPiAgICAgICBlbnVtIEFW UGl4ZWxGb3JtYXQgcGl4X2ZtdDsNCj4gICAgICAgdWludDMyX3QgdGFnOw0KPiBAQCAtMTY3Miw2 ICsxNjk1LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBtb3ZfZ2V0X2NvZGVjX3RhZyhBVkZvcm1h dENvbnRleHQgKnMsIE1PVlRyYWNrICp0cmFjaykNCj4gICAgICAgICAgICAgICB0YWcgPSBtb3Zf Z2V0X21wZWcyX3hkY2FtX2NvZGVjX3RhZyhzLCB0cmFjayk7DQo+ICAgICAgICAgICBlbHNlIGlm ICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0KQ0KPiAgICAgICAgICAg ICAgIHRhZyA9IG1vdl9nZXRfaDI2NF9jb2RlY190YWcocywgdHJhY2spOw0KPiArICAgICAgICBl bHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9FVkMpDQo+ICsgICAg ICAgICAgICB0YWcgPSBtb3ZfZ2V0X2V2Y19jb2RlY190YWcocywgdHJhY2spOw0KPiAgICAgICAg ICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfRE5YSEQpDQo+ ICAgICAgICAgICAgICAgdGFnID0gbW92X2dldF9kbnhoZF9jb2RlY190YWcocywgdHJhY2spOw0K PiAgICAgICAgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZ UEVfVklERU8pIHsNCj4gQEAgLTIyMDgsNiArMjIzMyw5IEBAIHN0YXRpYyBpbnQgbW92X3dyaXRl X3ZpZGVvX3RhZyhBVkZvcm1hdENvbnRleHQgKnMsIEFWSU9Db250ZXh0ICpwYiwgTU9WTXV4Q29u dGV4DQo+ICAgICAgICAgICBtb3Zfd3JpdGVfYXZjY190YWcocGIsIHRyYWNrKTsNCj4gICAgICAg ICAgIGlmICh0cmFjay0+bW9kZSA9PSBNT0RFX0lQT0QpDQo+ICAgICAgICAgICAgICAgbW92X3dy aXRlX3V1aWRfdGFnX2lwb2QocGIpOw0KPiArICAgIH0NCj4gKyAgICBlbHNlIGlmICh0cmFjay0+ cGFyLT5jb2RlY19pZCA9PUFWX0NPREVDX0lEX0VWQykgew0KPiArICAgICAgICBtb3Zfd3JpdGVf ZXZjY190YWcocGIsIHRyYWNrKTsNCj4gICAgICAgfSBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9WUDkpIHsNCj4gICAgICAgICAgIG1vdl93cml0ZV92cGNjX3Rh Zyhtb3YtPmZjLCBwYiwgdHJhY2spOw0KPiAgICAgICB9IGVsc2UgaWYgKHRyYWNrLT5wYXItPmNv ZGVjX2lkID09IEFWX0NPREVDX0lEX0FWMSkgew0KPiBAQCAtNTczNyw2ICs1NzY1LDcgQEAgaW50 IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQ0K PiAgICAgICBpZiAoKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfRE5YSEQgfHwNCj4gICAg ICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgfHwNCj4gICAgICAgICAg ICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0hFVkMgfHwNCj4gKyAgICAgICAgIHBhci0+ Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfRVZDIHx8DQo+ICAgICAgICAgICAgcGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9UUlVFSEQgfHwNCj4gICAgICAgICAgICBwYXItPmNvZGVjX2lkID09 IEFWX0NPREVDX0lEX0FDMykgJiYgIXRyay0+dm9zX2xlbiAmJg0KPiAgICAgICAgICAgICFUQUdf SVNfQVZDSSh0cmstPnRhZykpIHsNCj4gQEAgLTczMTEsNiArNzM0MCw3IEBAIHN0YXRpYyBjb25z dCBBVkNvZGVjVGFnIGNvZGVjX21wNF90YWdzW10gPSB7DQo+ICAgICAgIHsgQVZfQ09ERUNfSURf SDI2NCwgICAgICAgICAgICBNS1RBRygnYScsICd2JywgJ2MnLCAnMycpIH0sDQo+ICAgICAgIHsg QVZfQ09ERUNfSURfSEVWQywgICAgICAgICAgICBNS1RBRygnaCcsICdlJywgJ3YnLCAnMScpIH0s DQo+ICAgICAgIHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAgICAgICBNS1RBRygnaCcsICd2Jywg J2MnLCAnMScpIH0sDQo+ICsgICAgeyBBVl9DT0RFQ19JRF9FVkMsICAgICAgICAgICAgIE1LVEFH KCdlJywgJ3YnLCAnYycsICcxJykgfSwNCj4gICAgICAgeyBBVl9DT0RFQ19JRF9NUEVHMlZJREVP LCAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcsICd2JykgfSwNCj4gICAgICAgeyBBVl9DT0RFQ19J RF9NUEVHMVZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcsICd2JykgfSwNCj4gICAgICAg eyBBVl9DT0RFQ19JRF9NSlBFRywgICAgICAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcsICd2Jykg fSwNCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Jhd2VuYy5jIGIvbGliYXZmb3JtYXQvcmF3 ZW5jLmMNCj4gaW5kZXggNGJiYWU3NzE3Yi4uMzIyYWI1ODNhYiAxMDA2NDQNCj4gLS0tIGEvbGli YXZmb3JtYXQvcmF3ZW5jLmMNCj4gKysrIGIvbGliYXZmb3JtYXQvcmF3ZW5jLmMNCj4gQEAgLTM4 Niw2ICszODYsMjAgQEAgY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfaGV2Y19tdXhlciA9IHsNCj4g ICB9Ow0KPiAgICNlbmRpZg0KPiAgIA0KPiArI2lmIENPTkZJR19FVkNfTVVYRVINCj4gK0FWT3V0 cHV0Rm9ybWF0IGZmX2V2Y19tdXhlciA9IHsNCj4gKyAgICAubmFtZSAgICAgICAgICAgICAgPSAi ZXZjIiwNCj4gKyAgICAubG9uZ19uYW1lICAgICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgi cmF3IEVWQyB2aWRlbyIpLA0KPiArICAgIC5leHRlbnNpb25zICAgICAgICA9ICJldmMiLA0KPiAr ICAgIC5hdWRpb19jb2RlYyAgICAgICA9IEFWX0NPREVDX0lEX05PTkUsDQo+ICsgICAgLnZpZGVv X2NvZGVjICAgICAgID0gQVZfQ09ERUNfSURfRVZDLA0KPiArICAgIC53cml0ZV9oZWFkZXIgICAg ICA9IGZvcmNlX29uZV9zdHJlYW0sDQo+ICsgICAgLndyaXRlX3BhY2tldCAgICAgID0gZmZfcmF3 X3dyaXRlX3BhY2tldCwNCj4gKyAgICAuZmxhZ3MgICAgICAgICAgICAgPSBBVkZNVF9OT1RJTUVT VEFNUFMsDQo+ICt9Ow0KPiArI2VuZGlmDQo+ICsNCj4gKw0KPiAgICNpZiBDT05GSUdfTTRWX01V WEVSDQo+ICAgY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfbTR2X211eGVyID0gew0KPiAgICAgICAu bmFtZSAgICAgICAgICAgICAgPSAibTR2IiwNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fDQpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0DQpmZm1wZWctZGV2 ZWxAZmZtcGVnLm9yZw0KaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVn LWRldmVsDQoNClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbA0KZmZt cGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4N Cg0KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBl Zy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1w ZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlz aXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3 aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K