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 EE30B4B21B for ; Fri, 31 May 2024 08:33:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9CBF368D4EF; Fri, 31 May 2024 11:33:12 +0300 (EEST) Received: from 16.mo550.mail-out.ovh.net (16.mo550.mail-out.ovh.net [178.33.104.224]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E431868D19B for ; Fri, 31 May 2024 11:33:05 +0300 (EEST) Received: from director10.ghost.mail-out.ovh.net (unknown [10.109.139.43]) by mo550.mail-out.ovh.net (Postfix) with ESMTP id 4VrGbN66Lfz1TXS for ; Fri, 31 May 2024 08:33:04 +0000 (UTC) Received: from ghost-submission-6684bf9d7b-rsznl (unknown [10.110.178.147]) by director10.ghost.mail-out.ovh.net (Postfix) with ESMTPS id 0E2DA1FECF for ; Fri, 31 May 2024 08:33:02 +0000 (UTC) Received: from courmont.net ([37.59.142.106]) by ghost-submission-6684bf9d7b-rsznl with ESMTPSA id OD2DNz6LWWZ3AwAAQg7jMQ (envelope-from ) for ; Fri, 31 May 2024 08:33:02 +0000 Authentication-Results: garm.ovh; auth=pass (GARM-106R006674ff509-c2c6-4b7b-8b6e-02793035d9b6, 7139F8B5FB3F6A67848D24E41004C9E72C3B21FB) smtp.auth=postmaster@courmont.net X-OVh-ClientIp: 212.149.142.231 Date: Fri, 31 May 2024 11:32:59 +0300 From: =?ISO-8859-1?Q?R=E9mi_Denis-Courmont?= To: FFmpeg development discussions and patches User-Agent: K-9 Mail for Android In-Reply-To: References: Message-ID: <8D094E9E-8EF2-488E-8CF0-19FF645B96E8@remlab.net> MIME-Version: 1.0 X-Ovh-Tracer-Id: 10034019973724772857 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: -100 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvledrvdekiedgtdefucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuqfggjfdpvefjgfevmfevgfenuceurghilhhouhhtmecuhedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepfffhvffufggjfhfkgggtgfesthhqmhdttderjeenucfhrhhomheptformhhiucffvghnihhsqdevohhurhhmohhnthcuoehrvghmihesrhgvmhhlrggsrdhnvghtqeenucggtffrrghtthgvrhhnpefgueelhfefffegveegteegueehgeduvdffledtjeegteduvddtjefhhfegtedvjeenucfkphepuddvjedrtddrtddruddpvdduvddrudegledrudegvddrvdefuddpfeejrdehledrudegvddruddtieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduvdejrddtrddtrddupdhmrghilhhfrhhomheprhgvmhhisehrvghmlhgrsgdrnhgvthdpnhgspghrtghpthhtohepuddprhgtphhtthhopehffhhmphgvghdquggvvhgvlhesfhhfmhhpvghgrdhorhhgpdfovfetjfhoshhtpehmohehhedtpdhmohguvgepshhmthhpohhuth Subject: Re: [FFmpeg-devel] [PATCH 05/16] avutil: add common code for nvtegra 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: CgpMZSAzMCBtYWkgMjAyNCAyMjo0MzowNyBHTVQrMDM6MDAsIGF2ZXJuZSA8YXZlcm5lMzgxQGdt YWlsLmNvbT4gYSDDqWNyaXTCoDoKPlRoaXMgaW5jbHVkZXMgYSBuZXcgcGl4ZWwgZm9ybWF0IGZv ciBudnRlZ3JhIGhhcmR3YXJlIGZyYW1lcywgYW5kIHNldmVyYWwgb2JqZWN0cyBmb3IgaW50ZXJh Y3Rpb24gd2l0aCBoYXJkd2FyZSBibG9ja3MuCj5JbiBwYXJ0aWN1bGFyLCB0aGlzIGNvbnRhaW5z IGNvZGUgZm9yIGNoYW5uZWxzIChoYW5kbGVzIHRvIGhhcmR3YXJlIGVuZ2luZXMpLCBtYXBzICht ZW1vcnktbWFwcGVkIGJ1ZmZlcnMgc2hhcmVkIHdpdGggZW5naW5lcyksIGFuZCBjb21tYW5kIGJ1 ZmZlcnMgKGFic3RyYWN0aW9uIGZvciBidWlsZGluZyBjb21tYW5kIGxpc3RzIHNlbnQgdG8gdGhl IGVuZ2luZXMpLgo+Cj5TaWduZWQtb2ZmLWJ5OiBhdmVybmUgPGF2ZXJuZTM4MUBnbWFpbC5jb20+ Cj4tLS0KPiBjb25maWd1cmUgICAgICAgICAgICAgICAgICB8ICAgIDIgKwo+IGxpYmF2dXRpbC9N YWtlZmlsZSAgICAgICAgIHwgICAgNCArCj4gbGliYXZ1dGlsL252dGVncmEuYyAgICAgICAgfCAx MDM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+IGxpYmF2dXRpbC9udnRl Z3JhLmggICAgICAgIHwgIDI1OCArKysrKysrKysKPiBsaWJhdnV0aWwvbnZ0ZWdyYV9ob3N0MXgu aCB8ICAgOTQgKysrKwo+IGxpYmF2dXRpbC9waXhkZXNjLmMgICAgICAgIHwgICAgNCArCj4gbGli YXZ1dGlsL3BpeGZtdC5oICAgICAgICAgfCAgICA4ICsKPiA3IGZpbGVzIGNoYW5nZWQsIDE0MDUg aW5zZXJ0aW9ucygrKQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvbnZ0ZWdyYS5jCj4g Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC9udnRlZ3JhLmgKPiBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliYXZ1dGlsL252dGVncmFfaG9zdDF4LmgKPgo+ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBi L2NvbmZpZ3VyZQo+aW5kZXggMDlmYjJhZWQxYi4uNTFmMTY5YmZiZCAxMDA3NTUKPi0tLSBhL2Nv bmZpZ3VyZQo+KysrIGIvY29uZmlndXJlCj5AQCAtMzYxLDYgKzM2MSw3IEBAIEV4dGVybmFsIGxp YnJhcnkgc3VwcG9ydDoKPiAgIC0tZGlzYWJsZS12ZHBhdSAgICAgICAgICBkaXNhYmxlIE52aWRp YSBWaWRlbyBEZWNvZGUgYW5kIFByZXNlbnRhdGlvbiBBUEkgZm9yIFVuaXggY29kZSBbYXV0b2Rl dGVjdF0KPiAgIC0tZGlzYWJsZS12aWRlb3Rvb2xib3ggICBkaXNhYmxlIFZpZGVvVG9vbGJveCBj b2RlIFthdXRvZGV0ZWN0XQo+ICAgLS1kaXNhYmxlLXZ1bGthbiAgICAgICAgIGRpc2FibGUgVnVs a2FuIGNvZGUgW2F1dG9kZXRlY3RdCj4rICAtLWVuYWJsZS1udnRlZ3JhICAgICAgICAgZW5hYmxl IG52dGVncmEgY29kZSBbbm9dCj4gCj4gVG9vbGNoYWluIG9wdGlvbnM6Cj4gICAtLWFyY2g9QVJD SCAgICAgICAgICAgICAgc2VsZWN0IGFyY2hpdGVjdHVyZSBbJGFyY2hdCj5AQCAtMzE1MSw2ICsz MTUyLDcgQEAgdmlkZW90b29sYm94X2h3YWNjZWxfZGVwcz0idmlkZW90b29sYm94IHB0aHJlYWRz Igo+IHZpZGVvdG9vbGJveF9od2FjY2VsX2V4dHJhbGlicz0iLWZyYW1ld29yayBRdWFydHpDb3Jl Igo+IHZ1bGthbl9kZXBzPSJ0aHJlYWRzIgo+IHZ1bGthbl9kZXBzX2FueT0ibGliZGwgTG9hZExp YnJhcnkiCj4rbnZ0ZWdyYV9kZXBzPSJncGwiCj4gCj4gYXYxX2QzZDExdmFfaHdhY2NlbF9kZXBz PSJkM2QxMXZhIERYVkFfUGljUGFyYW1zX0FWMSIKPiBhdjFfZDNkMTF2YV9od2FjY2VsX3NlbGVj dD0iYXYxX2RlY29kZXIiCj5kaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL01ha2VmaWxlIGIvbGliYXZ1 dGlsL01ha2VmaWxlCj5pbmRleCA5YzExMmJjNThhLi43MzNhMjNhOGEzIDEwMDY0NAo+LS0tIGEv bGliYXZ1dGlsL01ha2VmaWxlCj4rKysgYi9saWJhdnV0aWwvTWFrZWZpbGUKPkBAIC01Miw2ICs1 Miw3IEBAIEhFQURFUlMgPSBhZGxlcjMyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiAgICAgICAgICAgaHdjb250ZXh0X3ZpZGVvdG9vbGJv eC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gICAgICAgICAgIGh3 Y29udGV4dF92ZHBhdS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICAgICAgICAgICBod2NvbnRleHRfdnVsa2FuLmggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPisgICAgICAgICAgbnZ0ZWdyYS5oICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gICAgICAgICAgIG52 aG9zdF9pb2N0bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICAgICAgICAgICBudm1hcF9pb2N0bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiAgICAgICAgICAgaWFtZi5oICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj5AQCAtMjA5LDYgKzIx MCw3IEBAIE9CSlMtJChDT05GSUdfVkRQQVUpICAgICAgICAgICAgICAgICAgICArPSBod2NvbnRl eHRfdmRwYXUubwo+IE9CSlMtJChDT05GSUdfVlVMS0FOKSAgICAgICAgICAgICAgICAgICArPSBo d2NvbnRleHRfdnVsa2FuLm8gdnVsa2FuLm8KPiAKPiBPQkpTLSQoIUNPTkZJR19WVUxLQU4pICAg ICAgICAgICAgICAgICAgKz0gaHdjb250ZXh0X3N0dWIubwo+K09CSlMtJChDT05GSUdfTlZURUdS QSkgICAgICAgICAgICAgICAgICArPSBudnRlZ3JhLm8KPiAKPiBPQkpTICs9ICQoQ09NUEFUX09C SlM6JT0uLi9jb21wYXQvJSkKPiAKPkBAIC0yMzAsNiArMjMyLDggQEAgU0tJUEhFQURFUlMtJChD T05GSUdfVkRQQVUpICAgICAgICAgICAgKz0gaHdjb250ZXh0X3ZkcGF1LmgKPiBTS0lQSEVBREVS Uy0kKENPTkZJR19WVUxLQU4pICAgICAgICAgICArPSBod2NvbnRleHRfdnVsa2FuLmggdnVsa2Fu LmggICBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnVsa2Fu X2Z1bmN0aW9ucy5oICAgICAgICAgICAgXAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZ1bGthbl9sb2FkZXIuaAo+K1NLSVBIRUFERVJTLSQoQ09ORklHX05WVEVH UkEpICAgICAgICAgICs9IG52dGVncmEuaCAgICAgICAgICAgICAgICAgICAgIFwKPisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudnRlZ3JhX2hvc3QxeC5oCj4gCj4g VEVTVFBST0dTID0gYWRsZXIzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ICAgICAgICAgICAgIGFlcyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPmRpZmYgLS1naXQgYS9saWJhdnV0 aWwvbnZ0ZWdyYS5jIGIvbGliYXZ1dGlsL252dGVncmEuYwo+bmV3IGZpbGUgbW9kZSAxMDA2NDQK PmluZGV4IDAwMDAwMDAwMDAuLmFkMGJiYmRmYWEKPi0tLSAvZGV2L251bGwKPisrKyBiL2xpYmF2 dXRpbC9udnRlZ3JhLmMKPkBAIC0wLDAgKzEsMTAzNSBAQAo+Ky8qCj4rICogQ29weXJpZ2h0IChj KSAyMDI0IGF2ZXJuZSA8YXZlcm5lMzgxQGdtYWlsLmNvbT4KPisgKgo+KyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KPisgKgo+KyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4rICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPisgKiB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgo+KyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4rICoKPisg KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKPisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgo+KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgo+KyAqCj4rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKPisgKiB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAo+ KyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EuCj4rICovCj4rCj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rIyAgIGluY2x1ZGUgPHN5cy9p b2N0bC5oPgo+KyMgICBpbmNsdWRlIDxzeXMvbW1hbi5oPgo+KyMgICBpbmNsdWRlIDxmY250bC5o Pgo+KyMgICBpbmNsdWRlIDx1bmlzdGQuaD4KPisjZWxzZQo+KyMgICBpbmNsdWRlIDxzdGRsaWIu aD4KPisjICAgaW5jbHVkZSA8c3dpdGNoLmg+Cj4rI2VuZGlmCj4rCj4rI2luY2x1ZGUgPHN0cmlu Zy5oPgo+Kwo+KyNpbmNsdWRlICJidWZmZXIuaCIKPisjaW5jbHVkZSAibG9nLmgiCj4rI2luY2x1 ZGUgImVycm9yLmgiCj4rI2luY2x1ZGUgIm1lbS5oIgo+KyNpbmNsdWRlICJ0aHJlYWQuaCIKPisK PisjaW5jbHVkZSAibnZob3N0X2lvY3RsLmgiCj4rI2luY2x1ZGUgIm52bWFwX2lvY3RsLmgiCj4r I2luY2x1ZGUgIm52dGVncmFfaG9zdDF4LmgiCj4rCj4rI2luY2x1ZGUgIm52dGVncmEuaCIKPisK PisvKgo+KyAqIFRhZyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gaWRlbnRpZnkgYWxsb2NhdGlvbnMu Cj4rICogT2ZmaWNpYWwgc29mdHdhcmUgaGFzIGJlZW4gc2VlbiB1c2luZyAweDkwMCwgMHhmMDAs IDB4MTEwMCwgMHgxNDAwLCAweDQwMDAuCj4rICovCj4rI2RlZmluZSBNRU1fVEFHICgweGZlZWQp Cj4rCj4rc3RydWN0IERyaXZlclN0YXRlIHsKPisgICAgaW50IG52bWFwX2ZkLCBudmhvc3RfZmQ7 Cj4rfTsKPisKPitzdGF0aWMgQVZNdXRleCBnX2RyaXZlcl9pbml0X210eCA9IEFWX01VVEVYX0lO SVRJQUxJWkVSOwo+K3N0YXRpYyBzdHJ1Y3QgRHJpdmVyU3RhdGUgKmdfZHJpdmVyX3N0YXRlID0g TlVMTDsKPitzdGF0aWMgQVZCdWZmZXJSZWYgKmdfZHJpdmVyX3N0YXRlX3JlZiA9IE5VTEw7Cj4r Cj4rc3RhdGljIHZvaWQgZnJlZV9kcml2ZXJfZmRzKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0 YSkgewo+KyAgICBpZiAoIWdfZHJpdmVyX3N0YXRlKQo+KyAgICAgICAgcmV0dXJuOwo+Kwo+KyNp Zm5kZWYgX19TV0lUQ0hfXwo+KyAgICBpZiAoZ19kcml2ZXJfc3RhdGUtPm52bWFwX2ZkID4gMCkK PisgICAgICAgIGNsb3NlKGdfZHJpdmVyX3N0YXRlLT5udm1hcF9mZCk7Cj4rCj4rICAgIGlmIChn X2RyaXZlcl9zdGF0ZS0+bnZob3N0X2ZkID4gMCkKPisgICAgICAgIGNsb3NlKGdfZHJpdmVyX3N0 YXRlLT5udmhvc3RfZmQpOwo+KyNlbHNlCj4rICAgIG52RmVuY2VFeGl0KCk7Cj4rICAgIG52TWFw RXhpdCgpOwo+KyAgICBudkV4aXQoKTsKPisgICAgbW11RXhpdCgpOwo+KyNlbmRpZgo+Kwo+KyAg ICBnX2RyaXZlcl9pbml0X210eCAgPSAoQVZNdXRleClBVl9NVVRFWF9JTklUSUFMSVpFUjsKPisg ICAgZ19kcml2ZXJfc3RhdGVfcmVmID0gTlVMTDsKPisgICAgYXZfZnJlZXAoJmdfZHJpdmVyX3N0 YXRlKTsKPit9Cj4rCj4rc3RhdGljIGludCBpbml0X2RyaXZlcl9mZHModm9pZCkgewo+KyAgICBB VkJ1ZmZlclJlZiAqcmVmOwo+KyAgICBzdHJ1Y3QgRHJpdmVyU3RhdGUgKnN0YXRlOwo+KyAgICBp bnQgZXJyOwo+Kwo+KyAgICBzdGF0ZSA9IGF2X21hbGxvY3ooc2l6ZW9mKCpzdGF0ZSkpOwo+KyAg ICBpZiAoIXN0YXRlKQo+KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPisKPisgICAg cmVmID0gYXZfYnVmZmVyX2NyZWF0ZSgodWludDhfdCAqKXN0YXRlLCBzaXplb2YoKnN0YXRlKSwg ZnJlZV9kcml2ZXJfZmRzLCBOVUxMLCAwKTsKPisgICAgaWYgKCFzdGF0ZSkKPisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4rCj4rICAgIGdfZHJpdmVyX3N0YXRlICAgICA9IHN0YXRl Owo+KyAgICBnX2RyaXZlcl9zdGF0ZV9yZWYgPSByZWY7Cj4rCj4rI2lmbmRlZiBfX1NXSVRDSF9f Cj4rICAgIGVyciA9IG9wZW4oIi9kZXYvbnZtYXAiLCBPX1JEV1IgfCBPX1NZTkMpOwoKVGhlcmUn cyBoZWxwZXJzIHRvIG9wZW4gZmlsZXMsIGFuZCB5b3UncmUgbWlzc2luZyB0aGUgY2xvc2Ugb24g ZXhlYyBoZXJlLiBBbHNvIG5vdCBjbGVhciB3aHkgeW91IG5lZWQgT19TWU5DLgoKQnV0IGRpZCB5 b3UgY29uc2lkZXIganVzdCByZWltcGxlbWVudGluZyBsaWJudmRlYyBpbnN0ZWFkIG9mIHB1dHRp bmcgdGhlIGRldmljZSBkcml2ZXIgZGlyZWN0bHkgaW4gRkZtcGVnPwoKPisgICAgaWYgKGVyciA8 IDApCj4rICAgICAgICByZXR1cm4gQVZFUlJPUihlcnJubyk7Cj4rICAgIHN0YXRlLT5udm1hcF9m ZCA9IGVycjsKPisKPisgICAgZXJyID0gb3BlbigiL2Rldi9udmhvc3QtY3RybCIsIE9fUkRXUiB8 IE9fU1lOQyk7Cj4rICAgIGlmIChlcnIgPCAwKQo+KyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJy bm8pOwo+KyAgICBzdGF0ZS0+bnZob3N0X2ZkID0gZXJyOwo+KyNlbHNlCj4rICAgIGVyciA9IG52 SW5pdGlhbGl6ZSgpOwo+KyAgICBpZiAoUl9GQUlMRUQoZXJyKSkKPisgICAgICAgIHJldHVybiBB VkVSUk9SKGVycik7Cj4rCj4rICAgIGVyciA9IG52TWFwSW5pdCgpOwo+KyAgICBpZiAoUl9GQUlM RUQoZXJyKSkKPisgICAgICAgIHJldHVybiBBVkVSUk9SKGVycik7Cj4rICAgIHN0YXRlLT5udm1h cF9mZCA9IG52TWFwR2V0RmQoKTsKPisKPisgICAgZXJyID0gbnZGZW5jZUluaXQoKTsKPisgICAg aWYgKFJfRkFJTEVEKGVycikpCj4rICAgICAgICByZXR1cm4gQVZFUlJPUihlcnIpOwo+KyAgICAv KiBsaWJueCBkb2Vzbid0IGV4cG9ydCB0aGUgbnZob3N0LWN0cmwgZmlsZSBkZXNjcmlwdG9yICov Cj4rCj4rICAgIGVyciA9IG1tdUluaXRpYWxpemUoKTsKPisgICAgaWYgKFJfRkFJTEVEKGVycikp Cj4rICAgICAgICByZXR1cm4gQVZFUlJPUihlcnIpOwo+KyNlbmRpZgo+Kwo+KyAgICByZXR1cm4g MDsKPit9Cj4rCj4rc3RhdGljIGlubGluZSBpbnQgZ2V0X252bWFwX2ZkKHZvaWQpIHsKPisgICAg aWYgKCFnX2RyaXZlcl9zdGF0ZSkKPisgICAgICAgIHJldHVybiBBVkVSUk9SX1VOS05PV047Cj4r Cj4rICAgIGlmICghZ19kcml2ZXJfc3RhdGUtPm52bWFwX2ZkKQo+KyAgICAgICAgcmV0dXJuIEFW RVJST1JfVU5LTk9XTjsKPisKPisgICAgcmV0dXJuIGdfZHJpdmVyX3N0YXRlLT5udm1hcF9mZDsK Pit9Cj4rCj4rc3RhdGljIGlubGluZSBpbnQgZ2V0X252aG9zdF9mZCh2b2lkKSB7Cj4rICAgIGlm ICghZ19kcml2ZXJfc3RhdGUpCj4rICAgICAgICByZXR1cm4gQVZFUlJPUl9VTktOT1dOOwo+Kwo+ KyAgICBpZiAoIWdfZHJpdmVyX3N0YXRlLT5udmhvc3RfZmQpCj4rICAgICAgICByZXR1cm4gQVZF UlJPUl9VTktOT1dOOwo+Kwo+KyAgICByZXR1cm4gZ19kcml2ZXJfc3RhdGUtPm52aG9zdF9mZDsK Pit9Cj4rCj4rQVZCdWZmZXJSZWYgKmF2X252dGVncmFfZHJpdmVyX2luaXQodm9pZCkgewo+KyAg ICBBVkJ1ZmZlclJlZiAqb3V0ID0gTlVMTDsKPisgICAgaW50IGVycjsKPisKPisgICAgLyoKPisg ICAgICogV2UgaGF2ZSB0byBkbyB0aGlzIG92ZXJseSBjb21wbGV4IGRhbmNlIG9mIHB1dHRpbmcg ZHJpdmVyIGZkcyBpbiBhIHJlZmNvdW50ZWQgc3RydWN0LAo+KyAgICAgKiBvdGhlcndpc2UgaW5p dGlhbGl6aW5nIG11bHRpcGxlIGh3Y29udGV4dHMgd291bGQgbGVhayBmZHMKPisgICAgICovCj4r Cj4rICAgIGVyciA9IGZmX211dGV4X2xvY2soJmdfZHJpdmVyX2luaXRfbXR4KTsKPisgICAgaWYg KGVyciAhPSAwKQo+KyAgICAgICAgZ290byBleGl0Owo+Kwo+KyAgICBpZiAoZ19kcml2ZXJfc3Rh dGVfcmVmKSB7Cj4rICAgICAgICBvdXQgPSBhdl9idWZmZXJfcmVmKGdfZHJpdmVyX3N0YXRlX3Jl Zik7Cj4rICAgICAgICBnb3RvIGV4aXQ7Cj4rICAgIH0KPisKPisgICAgZXJyID0gaW5pdF9kcml2 ZXJfZmRzKCk7Cj4rICAgIGlmIChlcnIgPCAwKSB7Cj4rICAgICAgICAvKiBJbiBjYXNlIG1lbW9y eSBhbGxvY2F0aW9ucyBmYWlsZWQsIGNhbGwgdGhlIGRlc3RydWN0b3Igb3Vyc2VsdmVzICovCj4r ICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmdfZHJpdmVyX3N0YXRlX3JlZik7Cj4rICAgICAgICBm cmVlX2RyaXZlcl9mZHMoTlVMTCwgTlVMTCk7Cj4rICAgICAgICBnb3RvIGV4aXQ7Cj4rICAgIH0K PisKPisgICAgb3V0ID0gZ19kcml2ZXJfc3RhdGVfcmVmOwo+Kwo+K2V4aXQ6Cj4rICAgIGZmX211 dGV4X3VubG9jaygmZ19kcml2ZXJfaW5pdF9tdHgpOwo+KyAgICByZXR1cm4gb3V0Owo+K30KPisK PitpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX29wZW4oQVZOVlRlZ3JhQ2hhbm5lbCAqY2hhbm5lbCwg Y29uc3QgY2hhciAqZGV2KSB7Cj4rICAgIGludCBlcnI7Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4r ICAgIHN0cnVjdCBudmhvc3RfZ2V0X3BhcmFtX2FyZyBhcmdzOwo+Kwo+KyAgICBlcnIgPSBvcGVu KGRldiwgT19SRFdSKTsKPisgICAgaWYgKGVyciA8IDApCj4rICAgICAgICByZXR1cm4gQVZFUlJP UihlcnJubyk7Cj4rCj4rICAgIGNoYW5uZWwtPmZkID0gZXJyOwo+Kwo+KyAgICBhcmdzID0gKHN0 cnVjdCBudmhvc3RfZ2V0X3BhcmFtX2FyZyl7MH07Cj4rCj4rICAgIGVyciA9IGlvY3RsKGNoYW5u ZWwtPmZkLCBOVkhPU1RfSU9DVExfQ0hBTk5FTF9HRVRfU1lOQ1BPSU5ULCAmYXJncyk7Cj4rICAg IGlmIChlcnIgPCAwKQo+KyAgICAgICAgZ290byBmYWlsOwo+Kwo+KyAgICBjaGFubmVsLT5zeW5j cHQgPSBhcmdzLnZhbHVlOwo+Kwo+KyAgICByZXR1cm4gMDsKPisKPitmYWlsOgo+KyAgICBjbG9z ZShjaGFubmVsLT5mZCk7Cj4rICAgIHJldHVybiBBVkVSUk9SKGVycm5vKTsKPisjZWxzZQo+KyAg ICBlcnIgPSBudkNoYW5uZWxDcmVhdGUoJmNoYW5uZWwtPmNoYW5uZWwsIGRldik7Cj4rICAgIGlm IChSX0ZBSUxFRChlcnIpKQo+KyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJyKTsKPisKPisgICAg ZXJyID0gbnZpb2N0bENoYW5uZWxfR2V0U3luY3B0KGNoYW5uZWwtPmNoYW5uZWwuZmQsIDAsICZj aGFubmVsLT5zeW5jcHQpOwo+KyAgICBpZiAoUl9GQUlMRUQoZXJyKSkKPisgICAgICAgIGdvdG8g ZmFpbDsKPisKPisgICAgcmV0dXJuIDA7Cj4rCj4rZmFpbDoKPisgICAgbnZDaGFubmVsQ2xvc2Uo JmNoYW5uZWwtPmNoYW5uZWwpOwo+KyAgICByZXR1cm4gQVZFUlJPUihlcnIpOwo+KyNlbmRpZgo+ K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX2Nsb3NlKEFWTlZUZWdyYUNoYW5uZWwgKmNo YW5uZWwpIHsKPisjaWZuZGVmIF9fU1dJVENIX18KPisgICAgaWYgKCFjaGFubmVsLT5mZCkKPisg ICAgICAgIHJldHVybiAwOwo+Kwo+KyAgICByZXR1cm4gY2xvc2UoY2hhbm5lbC0+ZmQpOwo+KyNl bHNlCj4rICAgIG52Q2hhbm5lbENsb3NlKCZjaGFubmVsLT5jaGFubmVsKTsKPisgICAgcmV0dXJu IDA7Cj4rI2VuZGlmCj4rfQo+Kwo+K2ludCBhdl9udnRlZ3JhX2NoYW5uZWxfZ2V0X2Nsb2NrX3Jh dGUoQVZOVlRlZ3JhQ2hhbm5lbCAqY2hhbm5lbCwgdWludDMyX3QgbW9kdWxlaWQsIHVpbnQzMl90 ICpjbG9ja19yYXRlKSB7Cj4rICAgIGludCBlcnI7Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAg IHN0cnVjdCBudmhvc3RfY2xrX3JhdGVfYXJncyBhcmdzOwo+Kwo+KyAgICBhcmdzID0gKHN0cnVj dCBudmhvc3RfY2xrX3JhdGVfYXJncyl7Cj4rICAgICAgICAubW9kdWxlaWQgPSBtb2R1bGVpZCwK PisgICAgfTsKPisKPisgICAgZXJyID0gaW9jdGwoY2hhbm5lbC0+ZmQsIE5WSE9TVF9JT0NUTF9D SEFOTkVMX0dFVF9DTEtfUkFURSwgJmFyZ3MpOwo+KyAgICBpZiAoZXJyIDwgMCkKPisgICAgICAg IHJldHVybiBBVkVSUk9SKGVycm5vKTsKPisKPisgICAgaWYgKGNsb2NrX3JhdGUpCj4rICAgICAg ICAqY2xvY2tfcmF0ZSA9IGFyZ3MucmF0ZTsKPisKPisgICAgcmV0dXJuIDA7Cj4rI2Vsc2UKPisg ICAgdWludDMyX3QgdG1wOwo+Kwo+KyAgICBlcnIgPSBBVkVSUk9SKG52aW9jdGxDaGFubmVsX0dl dE1vZHVsZUNsb2NrUmF0ZShjaGFubmVsLT5jaGFubmVsLmZkLCBtb2R1bGVpZCwgJnRtcCkpOwo+ KyAgICBpZiAoZXJyIDwgMCkKPisgICAgICAgIHJldHVybiBlcnI7Cj4rCj4rICAgIGlmIChjbG9j a19yYXRlKQo+KyAgICAgICAgKmNsb2NrX3JhdGUgPSB0bXAgKiAxMDAwOwo+Kwo+KyAgICByZXR1 cm4gMDsKPisjZW5kaWYKPit9Cj4rCj4raW50IGF2X252dGVncmFfY2hhbm5lbF9zZXRfY2xvY2tf cmF0ZShBVk5WVGVncmFDaGFubmVsICpjaGFubmVsLCB1aW50MzJfdCBtb2R1bGVpZCwgdWludDMy X3QgY2xvY2tfcmF0ZSkgewo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICBzdHJ1Y3QgbnZob3N0 X2Nsa19yYXRlX2FyZ3MgYXJnczsKPisKPisgICAgYXJncyA9IChzdHJ1Y3QgbnZob3N0X2Nsa19y YXRlX2FyZ3Mpewo+KyAgICAgICAgLnJhdGUgICAgID0gY2xvY2tfcmF0ZSwKPisgICAgICAgIC5t b2R1bGVpZCA9IG1vZHVsZWlkLAo+KyAgICB9Owo+Kwo+KyAgICByZXR1cm4gKGlvY3RsKGNoYW5u ZWwtPmZkLCBOVkhPU1RfSU9DVExfQ0hBTk5FTF9TRVRfQ0xLX1JBVEUsICZhcmdzKSA8IDApID8g QVZFUlJPUihlcnJubykgOiAwOwo+KyNlbHNlCj4rICAgIHJldHVybiBBVkVSUk9SKG52aW9jdGxD aGFubmVsX1NldE1vZHVsZUNsb2NrUmF0ZShjaGFubmVsLT5jaGFubmVsLmZkLCBtb2R1bGVpZCwg Y2xvY2tfcmF0ZSAvIDEwMDApKTsKPisjZW5kaWYKPit9Cj4rCj4raW50IGF2X252dGVncmFfY2hh bm5lbF9zdWJtaXQoQVZOVlRlZ3JhQ2hhbm5lbCAqY2hhbm5lbCwgQVZOVlRlZ3JhQ21kYnVmICpj bWRidWYsIHVpbnQzMl90ICpmZW5jZSkgewo+KyAgICBpbnQgZXJyOwo+KyNpZm5kZWYgX19TV0lU Q0hfXwo+KyAgICBzdHJ1Y3QgbnZob3N0X3N1Ym1pdF9hcmdzIGFyZ3M7Cj4rCj4rICAgIGFyZ3Mg PSAoc3RydWN0IG52aG9zdF9zdWJtaXRfYXJncyl7Cj4rICAgICAgICAuc3VibWl0X3ZlcnNpb24g ICAgICAgICAgPSBOVkhPU1RfU1VCTUlUX1ZFUlNJT05fVjIsCj4rICAgICAgICAubnVtX3N5bmNw dF9pbmNycyAgICAgICAgPSBjbWRidWYtPm51bV9zeW5jcHRfaW5jcnMsCj4rICAgICAgICAubnVt X2NtZGJ1ZnMgICAgICAgICAgICAgPSBjbWRidWYtPm51bV9jbWRidWZzLAo+KyAgICAgICAgLm51 bV9yZWxvY3MgICAgICAgICAgICAgID0gY21kYnVmLT5udW1fcmVsb2NzLAo+KyAgICAgICAgLm51 bV93YWl0Y2hrcyAgICAgICAgICAgID0gY21kYnVmLT5udW1fd2FpdGNoa3MsCj4rICAgICAgICAu dGltZW91dCAgICAgICAgICAgICAgICAgPSAwLAo+KyAgICAgICAgLmZsYWdzICAgICAgICAgICAg ICAgICAgID0gMCwKPisgICAgICAgIC5mZW5jZSAgICAgICAgICAgICAgICAgICA9IDAsCj4rICAg ICAgICAuc3luY3B0X2luY3JzICAgICAgICAgICAgPSAodWludHB0cl90KWNtZGJ1Zi0+c3luY3B0 X2luY3JzLAo+KyAgICAgICAgLmNtZGJ1Zl9leHRzICAgICAgICAgICAgID0gKHVpbnRwdHJfdClj bWRidWYtPmNtZGJ1Zl9leHRzLAo+KyAgICAgICAgLmNoZWNrc3VtX21ldGhvZHMgICAgICAgID0g MCwKPisgICAgICAgIC5jaGVja3N1bV9mYWxjb25fbWV0aG9kcyA9IDAsCj4rICAgICAgICAucGFk ICAgICAgICAgICAgICAgICAgICAgPSB7IDAgfSwKPisgICAgICAgIC5yZWxvY190eXBlcyAgICAg ICAgICAgICA9ICh1aW50cHRyX3QpY21kYnVmLT5yZWxvY190eXBlcywKPisgICAgICAgIC5jbWRi dWZzICAgICAgICAgICAgICAgICA9ICh1aW50cHRyX3QpY21kYnVmLT5jbWRidWZzLAo+KyAgICAg ICAgLnJlbG9jcyAgICAgICAgICAgICAgICAgID0gKHVpbnRwdHJfdCljbWRidWYtPnJlbG9jcywK PisgICAgICAgIC5yZWxvY19zaGlmdHMgICAgICAgICAgICA9ICh1aW50cHRyX3QpY21kYnVmLT5y ZWxvY19zaGlmdHMsCj4rICAgICAgICAud2FpdGNoa3MgICAgICAgICAgICAgICAgPSAodWludHB0 cl90KWNtZGJ1Zi0+d2FpdGNoa3MsCj4rICAgICAgICAud2FpdGJhc2VzICAgICAgICAgICAgICAg PSAwLAo+KyAgICAgICAgLmNsYXNzX2lkcyAgICAgICAgICAgICAgID0gKHVpbnRwdHJfdCljbWRi dWYtPmNsYXNzX2lkcywKPisgICAgICAgIC5mZW5jZXMgICAgICAgICAgICAgICAgICA9ICh1aW50 cHRyX3QpY21kYnVmLT5mZW5jZXMsCj4rICAgIH07Cj4rCj4rICAgIGVyciA9IGlvY3RsKGNoYW5u ZWwtPmZkLCBOVkhPU1RfSU9DVExfQ0hBTk5FTF9TVUJNSVQsICZhcmdzKTsKPisgICAgaWYgKGVy ciA8IDApCj4rICAgICAgICByZXR1cm4gQVZFUlJPUihlcnJubyk7Cj4rCj4rICAgIGlmIChmZW5j ZSkKPisgICAgICAgICpmZW5jZSA9IGFyZ3MuZmVuY2U7Cj4rCj4rICAgIHJldHVybiAwOwo+KyNl bHNlCj4rICAgIG52aW9jdGxfZmVuY2UgdG1wOwo+Kwo+KyAgICBlcnIgPSBudmlvY3RsQ2hhbm5l bF9TdWJtaXQoY2hhbm5lbC0+Y2hhbm5lbC5mZCwgKG52aW9jdGxfY21kYnVmICopY21kYnVmLT5j bWRidWZzLCBjbWRidWYtPm51bV9jbWRidWZzLAo+KyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgTlVMTCwgMCwgKG52aW9jdGxfc3luY3B0X2luY3IgKiljbWRidWYtPnN5bmNw dF9pbmNycywgY21kYnVmLT5udW1fc3luY3B0X2luY3JzLAo+KyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnRtcCwgMSk7Cj4rICAgIGlmIChSX0ZBSUxFRChlcnIpKQo+KyAgICAgICAg cmV0dXJuIEFWRVJST1IoZXJyKTsKPisKPisgICAgaWYgKGZlbmNlKQo+KyAgICAgICAgKmZlbmNl ID0gdG1wLnZhbHVlOwo+Kwo+KyAgICByZXR1cm4gMDsKPisjZW5kaWYKPit9Cj4rCj4raW50IGF2 X252dGVncmFfY2hhbm5lbF9zZXRfc3VibWl0X3RpbWVvdXQoQVZOVlRlZ3JhQ2hhbm5lbCAqY2hh bm5lbCwgdWludDMyX3QgdGltZW91dF9tcykgewo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICBz dHJ1Y3QgbnZob3N0X3NldF90aW1lb3V0X2FyZ3MgYXJnczsKPisKPisgICAgYXJncyA9IChzdHJ1 Y3QgbnZob3N0X3NldF90aW1lb3V0X2FyZ3Mpewo+KyAgICAgICAgLnRpbWVvdXQgPSB0aW1lb3V0 X21zLAo+KyAgICB9Owo+Kwo+KyAgICByZXR1cm4gKGlvY3RsKGNoYW5uZWwtPmZkLCBOVkhPU1Rf SU9DVExfQ0hBTk5FTF9TRVRfVElNRU9VVCwgJmFyZ3MpIDwgMCkgPyBBVkVSUk9SKGVycm5vKSA6 IDA7Cj4rI2Vsc2UKPisgICAgcmV0dXJuIEFWRVJST1IobnZpb2N0bENoYW5uZWxfU2V0U3VibWl0 VGltZW91dChjaGFubmVsLT5jaGFubmVsLmZkLCB0aW1lb3V0X21zKSk7Cj4rI2VuZGlmCj4rfQo+ Kwo+K2ludCBhdl9udnRlZ3JhX3N5bmNwdF93YWl0KEFWTlZUZWdyYUNoYW5uZWwgKmNoYW5uZWws IHVpbnQzMl90IHRocmVzaG9sZCwgaW50MzJfdCB0aW1lb3V0KSB7Cj4rI2lmbmRlZiBfX1NXSVRD SF9fCj4rICAgIHN0cnVjdCBudmhvc3RfY3RybF9zeW5jcHRfd2FpdGV4X2FyZ3MgYXJncyA9IHsK PisgICAgICAgIC5pZCAgICAgID0gY2hhbm5lbC0+c3luY3B0LAo+KyAgICAgICAgLnRocmVzaCAg PSB0aHJlc2hvbGQsCj4rICAgICAgICAudGltZW91dCA9IHRpbWVvdXQsCj4rICAgIH07Cj4rCj4r ICAgIHJldHVybiAoaW9jdGwoZ2V0X252aG9zdF9mZCgpLCBOVkhPU1RfSU9DVExfQ1RSTF9TWU5D UFRfV0FJVEVYLCAmYXJncykgPCAwKSA/IEFWRVJST1IoZXJybm8pIDogMDsKPisjZWxzZQo+KyAg ICBOdkZlbmNlIGZlbmNlOwo+Kwo+KyAgICBmZW5jZSA9IChOdkZlbmNlKXsKPisgICAgICAgIC5p ZCAgICA9IGNoYW5uZWwtPnN5bmNwdCwKPisgICAgICAgIC52YWx1ZSA9IHRocmVzaG9sZCwKPisg ICAgfTsKPisKPisgICAgcmV0dXJuIEFWRVJST1IobnZGZW5jZVdhaXQoJmZlbmNlLCB0aW1lb3V0 KSk7Cj4rI2VuZGlmCj4rfQo+Kwo+KyNpZmRlZiBfX1NXSVRDSF9fCj4rc3RhdGljIGlubGluZSBi b29sIGNvbnZlcnRfY2FjaGVfZmxhZ3ModWludDMyX3QgZmxhZ3MpIHsKPisgICAgLyogUmV0dXJu IHdoZXRoZXIgdGhlIG1hcCBzaG91bGQgYmUgQ1BVLWNhY2hlYWJsZSAqLwo+KyAgICBzd2l0Y2gg KGZsYWdzICYgTlZNQVBfSEFORExFX0NBQ0hFX0ZMQUcpIHsKPisgICAgICAgIGNhc2UgTlZNQVBf SEFORExFX0lOTkVSX0NBQ0hFQUJMRToKPisgICAgICAgIGNhc2UgTlZNQVBfSEFORExFX0NBQ0hF QUJMRToKPisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPisgICAgICAgIGRlZmF1bHQ6Cj4rICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+KyAgICB9Cj4rfQo+KyNlbmRpZgo+Kwo+K2ludCBhdl9u dnRlZ3JhX21hcF9hbGxvY2F0ZShBVk5WVGVncmFNYXAgKm1hcCwgQVZOVlRlZ3JhQ2hhbm5lbCAq Y2hhbm5lbCwgdWludDMyX3Qgc2l6ZSwKPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgYWxpZ24sIGludCBoZWFwX21hc2ssIGludCBmbGFncykKPit7Cj4rI2lmbmRlZiBfX1NX SVRDSF9fCj4rICAgIHN0cnVjdCBudm1hcF9jcmVhdGVfaGFuZGxlIGNyZWF0ZV9hcmdzOwo+KyAg ICBzdHJ1Y3QgbnZtYXBfYWxsb2NfaGFuZGxlIGFsbG9jX2FyZ3M7Cj4rICAgIGludCBlcnI7Cj4r Cj4rICAgIGNyZWF0ZV9hcmdzID0gKHN0cnVjdCBudm1hcF9jcmVhdGVfaGFuZGxlKXsKPisgICAg ICAgIC5zaXplICAgPSBzaXplLAo+KyAgICB9Owo+Kwo+KyAgICBlcnIgPSBpb2N0bChnZXRfbnZt YXBfZmQoKSwgTlZNQVBfSU9DX0NSRUFURSwgJmNyZWF0ZV9hcmdzKTsKPisgICAgaWYgKGVyciA8 IDApCj4rICAgICAgICByZXR1cm4gQVZFUlJPUihlcnJubyk7Cj4rCj4rICAgIG1hcC0+c2l6ZSAg ID0gc2l6ZTsKPisgICAgbWFwLT5oYW5kbGUgPSBjcmVhdGVfYXJncy5oYW5kbGU7Cj4rCj4rICAg IGFsbG9jX2FyZ3MgPSAoc3RydWN0IG52bWFwX2FsbG9jX2hhbmRsZSl7Cj4rICAgICAgICAuaGFu ZGxlICAgID0gY3JlYXRlX2FyZ3MuaGFuZGxlLAo+KyAgICAgICAgLmhlYXBfbWFzayA9IGhlYXBf bWFzaywKPisgICAgICAgIC5mbGFncyAgICAgPSBmbGFncyB8IChNRU1fVEFHIDw8IDE2KSwKPisg ICAgICAgIC5hbGlnbiAgICAgPSBhbGlnbiwKPisgICAgfTsKPisKPisgICAgZXJyID0gaW9jdGwo Z2V0X252bWFwX2ZkKCksIE5WTUFQX0lPQ19BTExPQywgJmFsbG9jX2FyZ3MpOwo+KyAgICBpZiAo ZXJyIDwgMCkKPisgICAgICAgIGdvdG8gZmFpbDsKPisKPisgICAgcmV0dXJuIDA7Cj4rCj4rZmFp bDoKPisgICAgYXZfbnZ0ZWdyYV9tYXBfZnJlZShtYXApOwo+KyAgICByZXR1cm4gQVZFUlJPUihl cnJubyk7Cj4rI2Vsc2UKPisgICAgdm9pZCAqbWVtOwo+Kwo+KyAgICBtYXAtPm93bmVyID0gY2hh bm5lbC0+Y2hhbm5lbC5mZDsKPisKPisgICAgc2l6ZSA9IEZGQUxJR04oc2l6ZSwgMHgxMDAwKTsK PisKPisgICAgbWVtID0gYWxpZ25lZF9hbGxvYyhGRkFMSUdOKGFsaWduLCAweDEwMDApLCBzaXpl KTsKPisgICAgaWYgKCFtZW0pCj4rICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+Kwo+ KyAgICByZXR1cm4gQVZFUlJPUihudk1hcENyZWF0ZSgmbWFwLT5tYXAsIG1lbSwgc2l6ZSwgMHgx MDAwMCwgTnZLaW5kX1BpdGNoLAo+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252 ZXJ0X2NhY2hlX2ZsYWdzKGZsYWdzKSkpOwo+KyNlbmRpZgo+K30KPisKPitpbnQgYXZfbnZ0ZWdy YV9tYXBfZnJlZShBVk5WVGVncmFNYXAgKm1hcCkgewo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAg ICBpbnQgZXJyOwo+Kwo+KyAgICBpZiAoIW1hcC0+aGFuZGxlKQo+KyAgICAgICAgcmV0dXJuIDA7 Cj4rCj4rICAgIGVyciA9IGlvY3RsKGdldF9udm1hcF9mZCgpLCBOVk1BUF9JT0NfRlJFRSwgbWFw LT5oYW5kbGUpOwo+KyAgICBpZiAoZXJyIDwgMCkKPisgICAgICAgIHJldHVybiBBVkVSUk9SKGVy cm5vKTsKPisKPisgICAgbWFwLT5oYW5kbGUgPSAwOwo+Kwo+KyAgICByZXR1cm4gMDsKPisjZWxz ZQo+KyAgICB2b2lkICphZGRyID0gbWFwLT5tYXAuY3B1X2FkZHI7Cj4rCj4rICAgIGlmICghbWFw LT5tYXAuY3B1X2FkZHIpCj4rICAgICAgICByZXR1cm4gMDsKPisKPisgICAgbnZNYXBDbG9zZSgm bWFwLT5tYXApOwo+KyAgICBmcmVlKGFkZHIpOwo+KyAgICByZXR1cm4gMDsKPisjZW5kaWYKPit9 Cj4rCj4raW50IGF2X252dGVncmFfbWFwX2Zyb21fdmEoQVZOVlRlZ3JhTWFwICptYXAsIEFWTlZU ZWdyYUNoYW5uZWwgKm93bmVyLCB2b2lkICptZW0sCj4rICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24sIHVpbnQzMl90IGZsYWdzKQo+K3sKPisj aWZuZGVmIF9fU1dJVENIX18KPisgICAgc3RydWN0IG52bWFwX2NyZWF0ZV9oYW5kbGVfZnJvbV92 YSBhcmdzOwo+KyAgICBpbnQgZXJyOwo+Kwo+KyAgICBhcmdzID0gKHN0cnVjdCBudm1hcF9jcmVh dGVfaGFuZGxlX2Zyb21fdmEpewo+KyAgICAgICAgLnZhICAgID0gKHVpbnRwdHJfdCltZW0sCj4r ICAgICAgICAuc2l6ZSAgPSBzaXplLAo+KyAgICAgICAgLmZsYWdzID0gZmxhZ3MgfCAoTUVNX1RB RyA8PCAxNiksCj4rICAgIH07Cj4rCj4rICAgIGVyciA9IGlvY3RsKGdldF9udm1hcF9mZCgpLCBO Vk1BUF9JT0NfRlJPTV9WQSwgJmFyZ3MpOwo+KyAgICBpZiAoZXJyIDwgMCkKPisgICAgICAgIHJl dHVybiBBVkVSUk9SKGVycm5vKTsKPisKPisgICAgbWFwLT5jcHVfYWRkciA9IG1lbTsKPisgICAg bWFwLT5zaXplICAgICA9IHNpemU7Cj4rICAgIG1hcC0+aGFuZGxlICAgPSBhcmdzLmhhbmRsZTsK PisKPisgICAgcmV0dXJuIDA7Cj4rI2Vsc2UKPisKPisgICAgbWFwLT5vd25lciA9IG93bmVyLT5j aGFubmVsLmZkOwo+Kwo+KyAgICByZXR1cm4gQVZFUlJPUihudk1hcENyZWF0ZSgmbWFwLT5tYXAs IG1lbSwgRkZBTElHTihzaXplLCAweDEwMDApLCAweDEwMDAwLCBOdktpbmRfUGl0Y2gsCj4rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRfY2FjaGVfZmxhZ3MoZmxhZ3MpKSk7 Owo+KyNlbmRpZgo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9tYXBfY2xvc2UoQVZOVlRlZ3JhTWFw ICptYXApIHsKPisjaWZuZGVmIF9fU1dJVENIX18KPisgICAgcmV0dXJuIGF2X252dGVncmFfbWFw X2ZyZWUobWFwKTsKPisjZWxzZQo+KyAgICBudk1hcENsb3NlKCZtYXAtPm1hcCk7Cj4rICAgIHJl dHVybiAwOwo+KyNlbmRpZgo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9tYXBfbWFwKEFWTlZUZWdy YU1hcCAqbWFwKSB7Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAgIHZvaWQgKmFkZHI7Cj4rCj4r ICAgIGFkZHIgPSBtbWFwKE5VTEwsIG1hcC0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwg TUFQX1NIQVJFRCwgbWFwLT5oYW5kbGUsIDApOwo+KyAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVE KQo+KyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJybm8pOwo+Kwo+KyAgICBtYXAtPmNwdV9hZGRy ID0gYWRkcjsKPisKPisgICAgcmV0dXJuIDA7Cj4rI2Vsc2UKPisgICAgbnZpb2N0bF9jb21tYW5k X2J1ZmZlcl9tYXAgcGFyYW1zOwo+KyAgICBpbnQgZXJyOwo+Kwo+KyAgICBwYXJhbXMgPSAobnZp b2N0bF9jb21tYW5kX2J1ZmZlcl9tYXApewo+KyAgICAgICAgLmhhbmRsZSA9IG1hcC0+bWFwLmhh bmRsZSwKPisgICAgfTsKPisKPisgICAgZXJyID0gbnZpb2N0bENoYW5uZWxfTWFwQ29tbWFuZEJ1 ZmZlcihtYXAtPm93bmVyLCAmcGFyYW1zLCAxLCBmYWxzZSk7Cj4rICAgIGlmIChSX0ZBSUxFRChl cnIpKQo+KyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJyKTsKPisKPisgICAgbWFwLT5pb3ZhID0g cGFyYW1zLmlvdmE7Cj4rCj4rICAgIHJldHVybiAwOwo+KyNlbmRpZgo+K30KPisKPitpbnQgYXZf bnZ0ZWdyYV9tYXBfdW5tYXAoQVZOVlRlZ3JhTWFwICptYXApIHsKPisgICAgaW50IGVycjsKPisj aWZuZGVmIF9fU1dJVENIX18KPisgICAgaWYgKCFtYXAtPmNwdV9hZGRyKQo+KyAgICAgICAgcmV0 dXJuIDA7Cj4rCj4rICAgIGVyciA9IG11bm1hcChtYXAtPmNwdV9hZGRyLCBtYXAtPnNpemUpOwo+ KyAgICBpZiAoZXJyIDwgMCkKPisgICAgICAgIHJldHVybiBBVkVSUk9SKGVycm5vKTsKPisKPisg ICAgbWFwLT5jcHVfYWRkciA9IE5VTEw7Cj4rCj4rICAgIHJldHVybiAwOwo+KyNlbHNlCj4rICAg IG52aW9jdGxfY29tbWFuZF9idWZmZXJfbWFwIHBhcmFtczsKPisKPisgICAgaWYgKCFtYXAtPmlv dmEpCj4rICAgICAgICByZXR1cm4gMDsKPisKPisgICAgcGFyYW1zID0gKG52aW9jdGxfY29tbWFu ZF9idWZmZXJfbWFwKXsKPisgICAgICAgIC5oYW5kbGUgPSBtYXAtPm1hcC5oYW5kbGUsCj4rICAg ICAgICAuaW92YSAgID0gbWFwLT5pb3ZhLAo+KyAgICB9Owo+Kwo+KyAgICBlcnIgPSBudmlvY3Rs Q2hhbm5lbF9Vbm1hcENvbW1hbmRCdWZmZXIobWFwLT5vd25lciwgJnBhcmFtcywgMSwgZmFsc2Up Owo+KyAgICBpZiAoUl9GQUlMRUQoZXJyKSkKPisgICAgICAgIHJldHVybiBBVkVSUk9SKGVycik7 Cj4rCj4rICAgIG1hcC0+aW92YSA9IDA7Cj4rCj4rICAgIHJldHVybiAwOwo+KyNlbmRpZgo+K30K PisKPitpbnQgYXZfbnZ0ZWdyYV9tYXBfY2FjaGVfb3AoQVZOVlRlZ3JhTWFwICptYXAsIGludCBv cCwgdm9pZCAqYWRkciwgc2l6ZV90IGxlbikgewo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICBz dHJ1Y3QgbnZtYXBfY2FjaGVfb3AgYXJnczsKPisKPisgICAgYXJncyA9IChzdHJ1Y3QgbnZtYXBf Y2FjaGVfb3Apewo+KyAgICAgICAgLmFkZHIgICA9ICh1aW50cHRyX3QpYWRkciwKPisgICAgICAg IC5sZW4gICAgPSBsZW4sCj4rICAgICAgICAuaGFuZGxlID0gYXZfbnZ0ZWdyYV9tYXBfZ2V0X2hh bmRsZShtYXApLAo+KyAgICAgICAgLm9wICAgICA9IG9wLAo+KyAgICB9Owo+Kwo+KyAgICByZXR1 cm4gQVZFUlJPUihpb2N0bChnZXRfbnZtYXBfZmQoKSwgTlZNQVBfSU9DX0NBQ0hFLCAmYXJncykp Owo+KyNlbHNlCj4rICAgIGlmICghbWFwLT5tYXAuaXNfY3B1X2NhY2hlYWJsZSkKPisgICAgICAg IHJldHVybiAwOwo+Kwo+KyAgICBzd2l0Y2ggKG9wKSB7Cj4rICAgICAgICBjYXNlIE5WTUFQX0NB Q0hFX09QX1dCOgo+KyAgICAgICAgICAgIGFybURDYWNoZUNsZWFuKGFkZHIsIGxlbik7Cj4rICAg ICAgICAgICAgYnJlYWs7Cj4rICAgICAgICBkZWZhdWx0Ogo+KyAgICAgICAgY2FzZSBOVk1BUF9D QUNIRV9PUF9JTlY6Cj4rICAgICAgICBjYXNlIE5WTUFQX0NBQ0hFX09QX1dCX0lOVjoKPisgICAg ICAgICAgICAvKiBsaWJueCBpbnRlcm5hbGx5IHBlcmZvcm1zIGEgY2xlYW4taW52YWxpZGF0ZSwg c2luY2UgaW52YWxpZGF0ZSBpcyBhIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb24gKi8KPisgICAgICAg ICAgICBhcm1EQ2FjaGVGbHVzaChhZGRyLCBsZW4pOwo+KyAgICAgICAgICAgIGJyZWFrOwo+KyAg ICB9Cj4rCj4rICAgIHJldHVybiAwOwo+KyNlbmRpZgo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9t YXBfcmVhbGxvYyhBVk5WVGVncmFNYXAgKm1hcCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxp Z24sCj4rICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlYXBfbWFzaywgaW50IGZsYWdz KQo+K3sKPisgICAgQVZOVlRlZ3JhQ2hhbm5lbCBjaGFubmVsOwo+KyAgICBBVk5WVGVncmFNYXAg dG1wID0gezB9Owo+KyAgICBpbnQgZXJyOwo+Kwo+KyAgICBpZiAoYXZfbnZ0ZWdyYV9tYXBfZ2V0 X3NpemUobWFwKSA+PSBzaXplKQo+KyAgICAgICAgcmV0dXJuIDA7Cj4rCj4rICAgIC8qIER1bW15 IGNoYW5uZWwgb2JqZWN0IHRvIGhvbGQgdGhlIG93bmVyIGZkICovCj4rICAgIGNoYW5uZWwgPSAo QVZOVlRlZ3JhQ2hhbm5lbCl7Cj4rI2lmZGVmIF9fU1dJVENIX18KPisgICAgICAgIC5jaGFubmVs LmZkID0gbWFwLT5vd25lciwKPisjZW5kaWYKPisgICAgfTsKPisKPisgICAgZXJyID0gYXZfbnZ0 ZWdyYV9tYXBfY3JlYXRlKCZ0bXAsICZjaGFubmVsLCBzaXplLCBhbGlnbiwgaGVhcF9tYXNrLCBm bGFncyk7Cj4rICAgIGlmIChlcnIgPCAwKQo+KyAgICAgICAgZ290byBmYWlsOwo+Kwo+KyAgICBt ZW1jcHkoYXZfbnZ0ZWdyYV9tYXBfZ2V0X2FkZHIoJnRtcCksIGF2X252dGVncmFfbWFwX2dldF9h ZGRyKG1hcCksIGF2X252dGVncmFfbWFwX2dldF9zaXplKG1hcCkpOwo+Kwo+KyAgICBlcnIgPSBh dl9udnRlZ3JhX21hcF9kZXN0cm95KG1hcCk7Cj4rICAgIGlmIChlcnIgPCAwKQo+KyAgICAgICAg Z290byBmYWlsOwo+Kwo+KyAgICAqbWFwID0gdG1wOwo+Kwo+KyAgICByZXR1cm4gMDsKPisKPitm YWlsOgo+KyAgICBhdl9udnRlZ3JhX21hcF9kZXN0cm95KCZ0bXApOwo+KyAgICByZXR1cm4gZXJy Owo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfaW5pdChBVk5WVGVncmFDbWRidWYgKmNt ZGJ1Zikgewo+KyAgICBjbWRidWYtPm51bV9jbWRidWZzICAgICAgPSAwOwo+KyNpZm5kZWYgX19T V0lUQ0hfXwo+KyAgICBjbWRidWYtPm51bV9yZWxvY3MgICAgICAgPSAwOwo+KyAgICBjbWRidWYt Pm51bV93YWl0Y2hrcyAgICAgPSAwOwo+KyNlbmRpZgo+KyAgICBjbWRidWYtPm51bV9zeW5jcHRf aW5jcnMgPSAwOwo+Kwo+KyNkZWZpbmUgTlVNX0lOSVRJQUxfQ01EQlVGUyAgICAgIDMKPisjZGVm aW5lIE5VTV9JTklUSUFMX1JFTE9DUyAgICAgICAxNQo+KyNkZWZpbmUgTlVNX0lOSVRJQUxfU1lO Q1BUX0lOQ1JTIDMKPisKPisgICAgY21kYnVmLT5jbWRidWZzICAgICAgPSBhdl9tYWxsb2NfYXJy YXkoTlVNX0lOSVRJQUxfQ01EQlVGUywgc2l6ZW9mKCpjbWRidWYtPmNtZGJ1ZnMpKTsKPisjaWZu ZGVmIF9fU1dJVENIX18KPisgICAgY21kYnVmLT5jbWRidWZfZXh0cyAgPSBhdl9tYWxsb2NfYXJy YXkoTlVNX0lOSVRJQUxfQ01EQlVGUywgc2l6ZW9mKCpjbWRidWYtPmNtZGJ1Zl9leHRzKSk7Cj4r ICAgIGNtZGJ1Zi0+Y2xhc3NfaWRzICAgID0gYXZfbWFsbG9jX2FycmF5KE5VTV9JTklUSUFMX0NN REJVRlMsIHNpemVvZigqY21kYnVmLT5jbGFzc19pZHMpKTsKPisjZW5kaWYKPisKPisjaWZuZGVm IF9fU1dJVENIX18KPisgICAgaWYgKCFjbWRidWYtPmNtZGJ1ZnMgfHwgIWNtZGJ1Zi0+Y21kYnVm X2V4dHMgfHwgIWNtZGJ1Zi0+Y2xhc3NfaWRzKQo+KyNlbHNlCj4rICAgIGlmICghY21kYnVmLT5j bWRidWZzKQo+KyNlbmRpZgo+KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPisKPisj aWZuZGVmIF9fU1dJVENIX18KPisgICAgY21kYnVmLT5yZWxvY3MgICAgICAgPSBhdl9tYWxsb2Nf YXJyYXkoTlVNX0lOSVRJQUxfUkVMT0NTLCBzaXplb2YoKmNtZGJ1Zi0+cmVsb2NzKSk7Cj4rICAg IGNtZGJ1Zi0+cmVsb2NfdHlwZXMgID0gYXZfbWFsbG9jX2FycmF5KE5VTV9JTklUSUFMX1JFTE9D Uywgc2l6ZW9mKCpjbWRidWYtPnJlbG9jX3R5cGVzKSk7Cj4rICAgIGNtZGJ1Zi0+cmVsb2Nfc2hp ZnRzID0gYXZfbWFsbG9jX2FycmF5KE5VTV9JTklUSUFMX1JFTE9DUywgc2l6ZW9mKCpjbWRidWYt PnJlbG9jX3NoaWZ0cykpOwo+KyAgICBpZiAoIWNtZGJ1Zi0+cmVsb2NzIHx8ICFjbWRidWYtPnJl bG9jX3R5cGVzIHx8ICFjbWRidWYtPnJlbG9jX3NoaWZ0cykKPisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Cj4rI2VuZGlmCj4rCj4rICAgIGNtZGJ1Zi0+c3luY3B0X2luY3JzID0gYXZf bWFsbG9jX2FycmF5KE5VTV9JTklUSUFMX1NZTkNQVF9JTkNSUywgc2l6ZW9mKCpjbWRidWYtPnN5 bmNwdF9pbmNycykpOwo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICBjbWRidWYtPmZlbmNlcyAg ICAgICA9IGF2X21hbGxvY19hcnJheShOVU1fSU5JVElBTF9TWU5DUFRfSU5DUlMsIHNpemVvZigq Y21kYnVmLT5mZW5jZXMpKTsKPisjZW5kaWYKPisKPisjaWZuZGVmIF9fU1dJVENIX18KPisgICAg aWYgKCFjbWRidWYtPnN5bmNwdF9pbmNycyB8fCAhY21kYnVmLT5mZW5jZXMpCj4rI2Vsc2UKPisg ICAgaWYgKCFjbWRidWYtPnN5bmNwdF9pbmNycykKPisjZW5kaWYKPisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Cj4rCj4rICAgIHJldHVybiAwOwo+K30KPisKPitpbnQgYXZfbnZ0ZWdy YV9jbWRidWZfZGVpbml0KEFWTlZUZWdyYUNtZGJ1ZiAqY21kYnVmKSB7Cj4rICAgIGF2X2ZyZWVw KCZjbWRidWYtPmNtZGJ1ZnMpOwo+KyAgICBhdl9mcmVlcCgmY21kYnVmLT5zeW5jcHRfaW5jcnMp Owo+Kwo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICBhdl9mcmVlcCgmY21kYnVmLT5jbWRidWZf ZXh0cyksIGF2X2ZyZWVwKCZjbWRidWYtPmNsYXNzX2lkcyk7Cj4rICAgIGF2X2ZyZWVwKCZjbWRi dWYtPnJlbG9jcyksIGF2X2ZyZWVwKCZjbWRidWYtPnJlbG9jX3R5cGVzKSwgYXZfZnJlZXAoJmNt ZGJ1Zi0+cmVsb2Nfc2hpZnRzKTsKPisgICAgYXZfZnJlZXAoJmNtZGJ1Zi0+ZmVuY2VzKTsKPisj ZW5kaWYKPisKPisgICAgcmV0dXJuIDA7Cj4rfQo+Kwo+K2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9h ZGRfbWVtb3J5KEFWTlZUZWdyYUNtZGJ1ZiAqY21kYnVmLCBBVk5WVGVncmFNYXAgKm1hcCwgdWlu dDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplKSB7Cj4rICAgIHVpbnQ4X3QgKm1lbTsKPisKPisg ICAgbWVtID0gYXZfbnZ0ZWdyYV9tYXBfZ2V0X2FkZHIobWFwKTsKPisKPisgICAgY21kYnVmLT5t YXAgICAgICAgID0gbWFwOwo+KyAgICBjbWRidWYtPm1lbV9vZmZzZXQgPSBvZmZzZXQ7Cj4rICAg IGNtZGJ1Zi0+bWVtX3NpemUgICA9IHNpemU7Cj4rCj4rICAgIGNtZGJ1Zi0+Y3VyX3dvcmQgPSAo dWludDMyX3QgKikobWVtICsgY21kYnVmLT5tZW1fb2Zmc2V0KTsKPisKPisgICAgcmV0dXJuIDA7 Cj4rfQo+Kwo+K2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9jbGVhcihBVk5WVGVncmFDbWRidWYgKmNt ZGJ1Zikgewo+KyAgICB1aW50OF90ICptZW07Cj4rCj4rICAgIG1lbSA9IGF2X252dGVncmFfbWFw X2dldF9hZGRyKGNtZGJ1Zi0+bWFwKTsKPisKPisgICAgY21kYnVmLT5udW1fY21kYnVmcyA9IDAs IGNtZGJ1Zi0+bnVtX3N5bmNwdF9pbmNycyA9IDA7Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAg IGNtZGJ1Zi0+bnVtX3JlbG9jcyA9IDAsIGNtZGJ1Zi0+bnVtX3dhaXRjaGtzID0gMDsKPisjZW5k aWYKPisKPisgICAgY21kYnVmLT5jdXJfd29yZCA9ICh1aW50MzJfdCAqKShtZW0gKyBjbWRidWYt Pm1lbV9vZmZzZXQpOwo+KyAgICByZXR1cm4gMDsKPit9Cj4rCj4raW50IGF2X252dGVncmFfY21k YnVmX2JlZ2luKEFWTlZUZWdyYUNtZGJ1ZiAqY21kYnVmLCB1aW50MzJfdCBjbGFzc19pZCkgewo+ KyAgICB1aW50OF90ICptZW07Cj4rICAgIHZvaWQgKnRtcDE7Cj4rI2lmbmRlZiBfX1NXSVRDSF9f Cj4rICAgIHZvaWQgKnRtcDIsICp0bXAzOwo+KyNlbmRpZgo+Kwo+KyAgICBtZW0gPSBhdl9udnRl Z3JhX21hcF9nZXRfYWRkcihjbWRidWYtPm1hcCk7Cj4rCj4rICAgIHRtcDEgPSBhdl9yZWFsbG9j X2FycmF5KGNtZGJ1Zi0+Y21kYnVmcywgICAgIGNtZGJ1Zi0+bnVtX2NtZGJ1ZnMgKyAxLCBzaXpl b2YoKmNtZGJ1Zi0+Y21kYnVmcykpOwo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICB0bXAyID0g YXZfcmVhbGxvY19hcnJheShjbWRidWYtPmNtZGJ1Zl9leHRzLCBjbWRidWYtPm51bV9jbWRidWZz ICsgMSwgc2l6ZW9mKCpjbWRidWYtPmNtZGJ1Zl9leHRzKSk7Cj4rICAgIHRtcDMgPSBhdl9yZWFs bG9jX2FycmF5KGNtZGJ1Zi0+Y2xhc3NfaWRzLCAgIGNtZGJ1Zi0+bnVtX2NtZGJ1ZnMgKyAxLCBz aXplb2YoKmNtZGJ1Zi0+Y2xhc3NfaWRzKSk7Cj4rI2VuZGlmCj4rCj4rI2lmbmRlZiBfX1NXSVRD SF9fCj4rICAgIGlmICghdG1wMSB8fCAhdG1wMiB8fCAhdG1wMykKPisjZWxzZQo+KyAgICBpZiAo IXRtcDEpCj4rI2VuZGlmCj4rICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+Kwo+KyAg ICBjbWRidWYtPmNtZGJ1ZnMgPSB0bXAxOwo+Kwo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICBj bWRidWYtPmNtZGJ1Zl9leHRzID0gdG1wMiwgY21kYnVmLT5jbGFzc19pZHMgPSB0bXAzOwo+KyNl bmRpZgo+Kwo+KyAgICBjbWRidWYtPmNtZGJ1ZnNbY21kYnVmLT5udW1fY21kYnVmc10gPSAoc3Ry dWN0IG52aG9zdF9jbWRidWYpewo+KyAgICAgICAgLm1lbSAgICAgICA9IGF2X252dGVncmFfbWFw X2dldF9oYW5kbGUoY21kYnVmLT5tYXApLAo+KyAgICAgICAgLm9mZnNldCAgICA9ICh1aW50OF90 ICopY21kYnVmLT5jdXJfd29yZCAtIG1lbSwKPisgICAgfTsKPisKPisjaWZuZGVmIF9fU1dJVENI X18KPisgICAgY21kYnVmLT5jbWRidWZfZXh0c1tjbWRidWYtPm51bV9jbWRidWZzXSA9IChzdHJ1 Y3QgbnZob3N0X2NtZGJ1Zl9leHQpewo+KyAgICAgICAgLnByZV9mZW5jZSA9IC0xLAo+KyAgICB9 Owo+Kwo+KyAgICBjbWRidWYtPmNsYXNzX2lkc1tjbWRidWYtPm51bV9jbWRidWZzXSA9IGNsYXNz X2lkOwo+KyNlbmRpZgo+Kwo+KyNpZmRlZiBfX1NXSVRDSF9fCj4rICAgIGlmIChjbWRidWYtPm51 bV9jbWRidWZzID09IDApCj4rICAgICAgICBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dvcmQoY21k YnVmLCBob3N0MXhfb3Bjb2RlX3NldGNsYXNzKGNsYXNzX2lkLCAwLCAwKSk7Cj4rI2VuZGlmCj4r Cj4rICAgIHJldHVybiAwOwo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfZW5kKEFWTlZU ZWdyYUNtZGJ1ZiAqY21kYnVmKSB7Cj4rICAgIGNtZGJ1Zi0+bnVtX2NtZGJ1ZnMrKzsKPisgICAg cmV0dXJuIDA7Cj4rfQo+Kwo+K2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dvcmQoQVZOVlRl Z3JhQ21kYnVmICpjbWRidWYsIHVpbnQzMl90IHdvcmQpIHsKPisgICAgdWludHB0cl90IG1lbV9z dGFydCA9ICh1aW50cHRyX3QpYXZfbnZ0ZWdyYV9tYXBfZ2V0X2FkZHIoY21kYnVmLT5tYXApICsg Y21kYnVmLT5tZW1fb2Zmc2V0Owo+Kwo+KyAgICBpZiAoKHVpbnRwdHJfdCljbWRidWYtPmN1cl93 b3JkIC0gbWVtX3N0YXJ0ID49IGNtZGJ1Zi0+bWVtX3NpemUpCj4rICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+Kwo+KyAgICAqY21kYnVmLT5jdXJfd29yZCsrID0gd29yZDsKPisgICAg Y21kYnVmLT5jbWRidWZzW2NtZGJ1Zi0+bnVtX2NtZGJ1ZnNdLndvcmRzICs9IDE7Cj4rICAgIHJl dHVybiAwOwo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF92YWx1ZShBVk5WVGVn cmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB3b3JkKSB7Cj4rICAg IGludCBlcnI7Cj4rCj4rICAgIGVyciA9IGF2X252dGVncmFfY21kYnVmX3B1c2hfd29yZChjbWRi dWYsIGhvc3QxeF9vcGNvZGVfaW5jcihOVl9USElfTUVUSE9EMD4+MiwgMikpOwo+KyAgICBpZiAo ZXJyIDwgMCkKPisgICAgICAgIHJldHVybiBlcnI7Cj4rCj4rICAgIGVyciA9IGF2X252dGVncmFf Y21kYnVmX3B1c2hfd29yZChjbWRidWYsIG9mZnNldCk7Cj4rICAgIGlmIChlcnIgPCAwKQo+KyAg ICAgICAgcmV0dXJuIGVycjsKPisKPisgICAgZXJyID0gYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF93 b3JkKGNtZGJ1Ziwgd29yZCk7Cj4rICAgIGlmIChlcnIgPCAwKQo+KyAgICAgICAgcmV0dXJuIGVy cjsKPisKPisgICAgcmV0dXJuIDA7Cj4rfQo+Kwo+K2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNo X3JlbG9jKEFWTlZUZWdyYUNtZGJ1ZiAqY21kYnVmLCB1aW50MzJfdCBvZmZzZXQsIEFWTlZUZWdy YU1hcCAqdGFyZ2V0LCB1aW50MzJfdCB0YXJnZXRfb2Zmc2V0LAo+KyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCByZWxvY190eXBlLCBpbnQgc2hpZnQpCj4rewo+KyAgICBpbnQg ZXJyOwo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICB1aW50OF90ICptZW07Cj4rICAgIHZvaWQg KnRtcDEsICp0bXAyLCAqdG1wMzsKPisKPisgICAgbWVtID0gYXZfbnZ0ZWdyYV9tYXBfZ2V0X2Fk ZHIoY21kYnVmLT5tYXApOwo+Kwo+KyAgICB0bXAxID0gYXZfcmVhbGxvY19hcnJheShjbWRidWYt PnJlbG9jcywgICAgICAgY21kYnVmLT5udW1fcmVsb2NzICsgMSwgc2l6ZW9mKCpjbWRidWYtPnJl bG9jcykpOwo+KyAgICB0bXAyID0gYXZfcmVhbGxvY19hcnJheShjbWRidWYtPnJlbG9jX3R5cGVz LCAgY21kYnVmLT5udW1fcmVsb2NzICsgMSwgc2l6ZW9mKCpjbWRidWYtPnJlbG9jX3R5cGVzKSk7 Cj4rICAgIHRtcDMgPSBhdl9yZWFsbG9jX2FycmF5KGNtZGJ1Zi0+cmVsb2Nfc2hpZnRzLCBjbWRi dWYtPm51bV9yZWxvY3MgKyAxLCBzaXplb2YoKmNtZGJ1Zi0+cmVsb2Nfc2hpZnRzKSk7Cj4rICAg IGlmICghdG1wMSB8fCAhdG1wMiB8fCAhdG1wMykKPisgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7Cj4rCj4rICAgIGNtZGJ1Zi0+cmVsb2NzID0gdG1wMSwgY21kYnVmLT5yZWxvY190eXBl cyA9IHRtcDIsIGNtZGJ1Zi0+cmVsb2Nfc2hpZnRzID0gdG1wMzsKPisKPisgICAgZXJyID0gYXZf bnZ0ZWdyYV9jbWRidWZfcHVzaF92YWx1ZShjbWRidWYsIG9mZnNldCwgMHhkZWFkYmVlZik7Cj4r ICAgIGlmIChlcnIgPCAwKQo+KyAgICAgICAgcmV0dXJuIGVycjsKPisKPisgICAgY21kYnVmLT5y ZWxvY3NbY21kYnVmLT5udW1fcmVsb2NzXSAgICAgICA9IChzdHJ1Y3QgbnZob3N0X3JlbG9jKXsK PisgICAgICAgIC5jbWRidWZfbWVtICAgID0gYXZfbnZ0ZWdyYV9tYXBfZ2V0X2hhbmRsZShjbWRi dWYtPm1hcCksCj4rICAgICAgICAuY21kYnVmX29mZnNldCA9ICh1aW50OF90ICopY21kYnVmLT5j dXJfd29yZCAtIG1lbSAtIHNpemVvZih1aW50MzJfdCksCj4rICAgICAgICAudGFyZ2V0ICAgICAg ICA9IGF2X252dGVncmFfbWFwX2dldF9oYW5kbGUodGFyZ2V0KSwKPisgICAgICAgIC50YXJnZXRf b2Zmc2V0ID0gdGFyZ2V0X29mZnNldCwKPisgICAgfTsKPisKPisgICAgY21kYnVmLT5yZWxvY190 eXBlc1tjbWRidWYtPm51bV9yZWxvY3NdICA9IChzdHJ1Y3QgbnZob3N0X3JlbG9jX3R5cGUpewo+ KyAgICAgICAgLnJlbG9jX3R5cGUgICAgPSByZWxvY190eXBlLAo+KyAgICB9Owo+Kwo+KyAgICBj bWRidWYtPnJlbG9jX3NoaWZ0c1tjbWRidWYtPm51bV9yZWxvY3NdID0gKHN0cnVjdCBudmhvc3Rf cmVsb2Nfc2hpZnQpewo+KyAgICAgICAgLnNoaWZ0ICAgICAgICAgPSBzaGlmdCwKPisgICAgfTsK PisKPisgICAgY21kYnVmLT5udW1fcmVsb2NzKys7Cj4rCj4rICAgIHJldHVybiAwOwo+KyNlbHNl Cj4rICAgIGVyciA9IGF2X252dGVncmFfY21kYnVmX3B1c2hfdmFsdWUoY21kYnVmLCBvZmZzZXQs ICh0YXJnZXQtPmlvdmEgKyB0YXJnZXRfb2Zmc2V0KSA+PiBzaGlmdCk7Cj4rICAgIGlmIChlcnIg PCAwKQo+KyAgICAgICAgcmV0dXJuIGVycjsKPisKPisgICAgcmV0dXJuIDA7Cj4rI2VuZGlmCj4r fQo+Kwo+K2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3N5bmNwdF9pbmNyKEFWTlZUZWdyYUNt ZGJ1ZiAqY21kYnVmLCB1aW50MzJfdCBzeW5jcHQpIHsKPisgICAgaW50IGVycjsKPisKPisgICAg ZXJyID0gYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF93b3JkKGNtZGJ1ZiwgaG9zdDF4X29wY29kZV9u b25pbmNyKE5WX1RISV9JTkNSX1NZTkNQVD4+MiwgMSkpOwo+KyAgICBpZiAoZXJyIDwgMCkKPisg ICAgICAgIHJldHVybiBlcnI7Cj4rCj4rICAgIGVyciA9IGF2X252dGVncmFfY21kYnVmX3B1c2hf d29yZChjbWRidWYsCj4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9O VlRFR1JBX1ZBTFVFKE5WX1RISV9JTkNSX1NZTkNQVCwgSU5EWCwgc3luY3B0KSB8Cj4rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9OVlRFR1JBX0VOVU0gKE5WX1RISV9J TkNSX1NZTkNQVCwgQ09ORCwgT1BfRE9ORSkpOwo+KyAgICBpZiAoZXJyIDwgMCkKPisgICAgICAg IHJldHVybiBlcnI7Cj4rCj4rICAgIHJldHVybiAwOwo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9j bWRidWZfcHVzaF93YWl0KEFWTlZUZWdyYUNtZGJ1ZiAqY21kYnVmLCB1aW50MzJfdCBzeW5jcHQs IHVpbnQzMl90IGZlbmNlKSB7Cj4rICAgIGludCBlcnI7Cj4rCj4rICAgIGVyciA9IGF2X252dGVn cmFfY21kYnVmX3B1c2hfd29yZChjbWRidWYsIGhvc3QxeF9vcGNvZGVfc2V0Y2xhc3MoSE9TVDFY X0NMQVNTX0hPU1QxWCwgMCwgMCkpOwo+KyAgICBpZiAoZXJyIDwgMCkKPisgICAgICAgIHJldHVy biBlcnI7Cj4rCj4rICAgIGVyciA9IGF2X252dGVncmFfY21kYnVmX3B1c2hfd29yZChjbWRidWYs IGhvc3QxeF9vcGNvZGVfbWFzayhOVl9DTEFTU19IT1NUX0xPQURfU1lOQ1BUX1BBWUxPQUQ+PjIs Cj4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTw8KE5WX0NMQVNTX0hP U1RfTE9BRF9TWU5DUFRfUEFZTE9BRCAtIE5WX0NMQVNTX0hPU1RfTE9BRF9TWU5DUFRfUEFZTE9B RCkpIHwKPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxPDwoTlZfQ0xB U1NfSE9TVF9XQUlUX1NZTkNQVCAgICAgICAgIC0gTlZfQ0xBU1NfSE9TVF9MT0FEX1NZTkNQVF9Q QVlMT0FEKSkpKTsKPisgICAgaWYgKGVyciA8IDApCj4rICAgICAgICByZXR1cm4gZXJyOwo+Kwo+ KyAgICBlcnIgPSBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dvcmQoY21kYnVmLCBmZW5jZSk7Cj4r ICAgIGlmIChlcnIgPCAwKQo+KyAgICAgICAgcmV0dXJuIGVycjsKPisKPisgICAgZXJyID0gYXZf bnZ0ZWdyYV9jbWRidWZfcHVzaF93b3JkKGNtZGJ1Ziwgc3luY3B0KTsKPisgICAgaWYgKGVyciA8 IDApCj4rICAgICAgICByZXR1cm4gZXJyOwo+Kwo+KyAgICByZXR1cm4gMDsKPit9Cj4rCj4raW50 IGF2X252dGVncmFfY21kYnVmX2FkZF9zeW5jcHRfaW5jcihBVk5WVGVncmFDbWRidWYgKmNtZGJ1 ZiwgdWludDMyX3Qgc3luY3B0LCB1aW50MzJfdCBmZW5jZSkKPit7Cj4rICAgIHZvaWQgKnRtcDE7 Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAgIHZvaWQgKnRtcDI7Cj4rI2VuZGlmCj4rCj4rICAg IHRtcDEgPSBhdl9yZWFsbG9jX2FycmF5KGNtZGJ1Zi0+c3luY3B0X2luY3JzLCBjbWRidWYtPm51 bV9zeW5jcHRfaW5jcnMgKyAxLCBzaXplb2YoKmNtZGJ1Zi0+c3luY3B0X2luY3JzKSk7Cj4rI2lm bmRlZiBfX1NXSVRDSF9fCj4rICAgIHRtcDIgPSBhdl9yZWFsbG9jX2FycmF5KGNtZGJ1Zi0+ZmVu Y2VzLCAgICAgICBjbWRidWYtPm51bV9zeW5jcHRfaW5jcnMgKyAxLCBzaXplb2YoKmNtZGJ1Zi0+ ZmVuY2VzKSk7Cj4rI2VuZGlmCj4rCj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAgIGlmICghdG1w MSB8fCAhdG1wMikKPisjZWxzZQo+KyAgICBpZiAoIXRtcDEpCj4rI2VuZGlmCj4rICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+Kwo+KyAgICBjbWRidWYtPnN5bmNwdF9pbmNycyA9IHRt cDE7Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAgIGNtZGJ1Zi0+ZmVuY2VzICAgICAgID0gdG1w MjsKPisjZW5kaWYKPisKPisgICAgY21kYnVmLT5zeW5jcHRfaW5jcnNbY21kYnVmLT5udW1fc3lu Y3B0X2luY3JzXSA9IChzdHJ1Y3QgbnZob3N0X3N5bmNwdF9pbmNyKXsKPisgICAgICAgIC5zeW5j cHRfaWQgICAgPSBzeW5jcHQsCj4rICAgICAgICAuc3luY3B0X2luY3JzID0gMSwKPisgICAgfTsK PisKPisjaWZuZGVmIF9fU1dJVENIX18KPisgICAgY21kYnVmLT5mZW5jZXNbY21kYnVmLT5udW1f c3luY3B0X2luY3JzXSAgICAgICA9IGZlbmNlOwo+KyNlbmRpZgo+Kwo+KyAgICBjbWRidWYtPm51 bV9zeW5jcHRfaW5jcnMrKzsKPisKPisgICAgcmV0dXJuIGF2X252dGVncmFfY21kYnVmX3B1c2hf c3luY3B0X2luY3IoY21kYnVmLCBzeW5jcHQpOwo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9jbWRi dWZfYWRkX3dhaXRjaGsoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYsIHVpbnQzMl90IHN5bmNwdCwg dWludDMyX3QgZmVuY2UpIHsKPisjaWZuZGVmIF9fU1dJVENIX18KPisgICAgdWludDhfdCAqbWVt Owo+KyAgICB2b2lkICp0bXA7Cj4rCj4rICAgIG1lbSA9IGF2X252dGVncmFfbWFwX2dldF9hZGRy KGNtZGJ1Zi0+bWFwKTsKPisKPisgICAgdG1wID0gYXZfcmVhbGxvY19hcnJheShjbWRidWYtPndh aXRjaGtzLCBjbWRidWYtPm51bV93YWl0Y2hrcyArIDEsIHNpemVvZigqY21kYnVmLT53YWl0Y2hr cykpOwo+KyAgICBpZiAoIXRtcCkKPisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4r Cj4rICAgIGNtZGJ1Zi0+d2FpdGNoa3MgPSB0bXA7Cj4rCj4rICAgIGNtZGJ1Zi0+d2FpdGNoa3Nb Y21kYnVmLT5udW1fd2FpdGNoa3NdID0gKHN0cnVjdCBudmhvc3Rfd2FpdGNoayl7Cj4rICAgICAg ICAubWVtICAgICAgID0gYXZfbnZ0ZWdyYV9tYXBfZ2V0X2hhbmRsZShjbWRidWYtPm1hcCksCj4r ICAgICAgICAub2Zmc2V0ICAgID0gKHVpbnQ4X3QgKiljbWRidWYtPmN1cl93b3JkIC0gbWVtIC0g c2l6ZW9mKHVpbnQzMl90KSwKPisgICAgICAgIC5zeW5jcHRfaWQgPSBzeW5jcHQsCj4rICAgICAg ICAudGhyZXNoICAgID0gZmVuY2UsCj4rICAgIH07Cj4rCj4rICAgIGNtZGJ1Zi0+bnVtX3dhaXRj aGtzKys7Cj4rI2VuZGlmCj4rCj4rICAgIHJldHVybiBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dh aXQoY21kYnVmLCBzeW5jcHQsIGZlbmNlKTsKPit9Cj4rCj4rc3RhdGljIHZvaWQgbnZ0ZWdyYV9q b2JfZnJlZSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmRhdGEpIHsKPisgICAgQVZOVlRlZ3JhSm9i ICpqb2IgPSAoQVZOVlRlZ3JhSm9iICopZGF0YTsKPisKPisgICAgaWYgKCFqb2IpCj4rICAgICAg ICByZXR1cm47Cj4rCj4rICAgIGF2X252dGVncmFfY21kYnVmX2RlaW5pdCgmam9iLT5jbWRidWYp Owo+KyAgICBhdl9udnRlZ3JhX21hcF9kZXN0cm95KCZqb2ItPmlucHV0X21hcCk7Cj4rCj4rICAg IGF2X2ZyZWVwKCZqb2IpOwo+K30KPisKPitzdGF0aWMgQVZCdWZmZXJSZWYgKm52dGVncmFfam9i X2FsbG9jKHZvaWQgKm9wYXF1ZSwgc2l6ZV90IHNpemUpIHsKPisgICAgQVZOVlRlZ3JhSm9iUG9v bCAqcG9vbCA9IG9wYXF1ZTsKPisKPisgICAgQVZCdWZmZXJSZWYgICpidWZmZXI7Cj4rICAgIEFW TlZUZWdyYUpvYiAqam9iOwo+KyAgICBpbnQgZXJyOwo+Kwo+KyAgICBqb2IgPSBhdl9tYWxsb2N6 KHNpemVvZigqam9iKSk7Cj4rICAgIGlmICgham9iKQo+KyAgICAgICAgcmV0dXJuIE5VTEw7Cj4r Cj4rICAgIGVyciA9IGF2X252dGVncmFfbWFwX2NyZWF0ZSgmam9iLT5pbnB1dF9tYXAsIHBvb2wt PmNoYW5uZWwsIHBvb2wtPmlucHV0X21hcF9zaXplLCAweDEwMCwKPisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5WTUFQX0hFQVBfSU9WTU0sIE5WTUFQX0hBTkRMRV9XUklURV9DT01C SU5FKTsKPisgICAgaWYgKGVyciA8IDApCj4rICAgICAgICBnb3RvIGZhaWw7Cj4rCj4rICAgIGVy ciA9IGF2X252dGVncmFfY21kYnVmX2luaXQoJmpvYi0+Y21kYnVmKTsKPisgICAgaWYgKGVyciA8 IDApCj4rICAgICAgICBnb3RvIGZhaWw7Cj4rCj4rICAgIGVyciA9IGF2X252dGVncmFfY21kYnVm X2FkZF9tZW1vcnkoJmpvYi0+Y21kYnVmLCAmam9iLT5pbnB1dF9tYXAsIHBvb2wtPmNtZGJ1Zl9v ZmYsIHBvb2wtPm1heF9jbWRidWZfc2l6ZSk7Cj4rICAgIGlmIChlcnIgPCAwKQo+KyAgICAgICAg Z290byBmYWlsOwo+Kwo+KyAgICBidWZmZXIgPSBhdl9idWZmZXJfY3JlYXRlKCh1aW50OF90ICop am9iLCBzaXplb2YoKmpvYiksIG52dGVncmFfam9iX2ZyZWUsIHBvb2wsIDApOwo+KyAgICBpZiAo IWJ1ZmZlcikKPisgICAgICAgIGdvdG8gZmFpbDsKPisKPisgICAgcmV0dXJuIGJ1ZmZlcjsKPisK PitmYWlsOgo+KyAgICBhdl9udnRlZ3JhX2NtZGJ1Zl9kZWluaXQoJmpvYi0+Y21kYnVmKTsKPisg ICAgYXZfbnZ0ZWdyYV9tYXBfZGVzdHJveSgmam9iLT5pbnB1dF9tYXApOwo+KyAgICBhdl9mcmVl cChqb2IpOwo+KyAgICByZXR1cm4gTlVMTDsKPit9Cj4rCj4raW50IGF2X252dGVncmFfam9iX3Bv b2xfaW5pdChBVk5WVGVncmFKb2JQb29sICpwb29sLCBBVk5WVGVncmFDaGFubmVsICpjaGFubmVs LAo+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0X21hcF9zaXplLCBv ZmZfdCBjbWRidWZfb2ZmLCBzaXplX3QgbWF4X2NtZGJ1Zl9zaXplKQo+K3sKPisgICAgcG9vbC0+ Y2hhbm5lbCAgICAgICAgID0gY2hhbm5lbDsKPisgICAgcG9vbC0+aW5wdXRfbWFwX3NpemUgID0g aW5wdXRfbWFwX3NpemU7Cj4rICAgIHBvb2wtPmNtZGJ1Zl9vZmYgICAgICA9IGNtZGJ1Zl9vZmY7 Cj4rICAgIHBvb2wtPm1heF9jbWRidWZfc2l6ZSA9IG1heF9jbWRidWZfc2l6ZTsKPisgICAgcG9v bC0+cG9vbCAgICAgICAgICAgID0gYXZfYnVmZmVyX3Bvb2xfaW5pdDIoc2l6ZW9mKEFWTlZUZWdy YUpvYiksIHBvb2wsCj4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG52dGVncmFfam9iX2FsbG9jLCBOVUxMKTsKPisgICAgaWYgKCFwb29sLT5wb29sKQo+ KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPisKPisgICAgcmV0dXJuIDA7Cj4rfQo+ Kwo+K2ludCBhdl9udnRlZ3JhX2pvYl9wb29sX3VuaW5pdChBVk5WVGVncmFKb2JQb29sICpwb29s KSB7Cj4rICAgIGF2X2J1ZmZlcl9wb29sX3VuaW5pdCgmcG9vbC0+cG9vbCk7Cj4rICAgIHJldHVy biAwOwo+K30KPisKPitBVkJ1ZmZlclJlZiAqYXZfbnZ0ZWdyYV9qb2JfcG9vbF9nZXQoQVZOVlRl Z3JhSm9iUG9vbCAqcG9vbCkgewo+KyAgICByZXR1cm4gYXZfYnVmZmVyX3Bvb2xfZ2V0KHBvb2wt PnBvb2wpOwo+K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9qb2Jfc3VibWl0KEFWTlZUZWdyYUpvYlBv b2wgKnBvb2wsIEFWTlZUZWdyYUpvYiAqam9iKSB7Cj4rICAgIHJldHVybiBhdl9udnRlZ3JhX2No YW5uZWxfc3VibWl0KHBvb2wtPmNoYW5uZWwsICZqb2ItPmNtZGJ1ZiwgJmpvYi0+ZmVuY2UpOwo+ K30KPisKPitpbnQgYXZfbnZ0ZWdyYV9qb2Jfd2FpdChBVk5WVGVncmFKb2JQb29sICpwb29sLCBB Vk5WVGVncmFKb2IgKmpvYiwgaW50IHRpbWVvdXQpIHsKPisgICAgcmV0dXJuIGF2X252dGVncmFf c3luY3B0X3dhaXQocG9vbC0+Y2hhbm5lbCwgam9iLT5mZW5jZSwgdGltZW91dCk7Cj4rfQo+ZGlm ZiAtLWdpdCBhL2xpYmF2dXRpbC9udnRlZ3JhLmggYi9saWJhdnV0aWwvbnZ0ZWdyYS5oCj5uZXcg ZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMDAwMC4uM2I2MzMzNWQ2Ywo+LS0tIC9kZXYv bnVsbAo+KysrIGIvbGliYXZ1dGlsL252dGVncmEuaAo+QEAgLTAsMCArMSwyNTggQEAKPisvKgo+ KyAqIENvcHlyaWdodCAoYykgMjAyNCBhdmVybmUgPGF2ZXJuZTM4MUBnbWFpbC5jb20+Cj4rICoK PisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4rICoKPisgKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+KyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5Cj4rICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgo+KyAqCj4rICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4rICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4rICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPisgKgo+KyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25n Cj4rICogd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLiwKPisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBLgo+KyAqLwo+Kwo+KyNpZm5kZWYgQVZVVElMX05WVEVHUkFf SAo+KyNkZWZpbmUgQVZVVElMX05WVEVHUkFfSAo+Kwo+KyNpbmNsdWRlIDxzdGRpbnQuaD4KPisj aW5jbHVkZSA8c3RkYm9vbC5oPgo+Kwo+KyNpbmNsdWRlICJidWZmZXIuaCIKPisKPisjaW5jbHVk ZSAibnZob3N0X2lvY3RsLmgiCj4rI2luY2x1ZGUgIm52bWFwX2lvY3RsLmgiCj4rCj4rdHlwZWRl ZiBzdHJ1Y3QgQVZOVlRlZ3JhQ2hhbm5lbCB7Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAgIGlu dCBmZDsKPisgICAgaW50IG1vZHVsZV9pZDsKPisjZWxzZQo+KyAgICBOdkNoYW5uZWwgY2hhbm5l bDsKPisjZW5kaWYKPisKPisgICAgdWludDMyX3Qgc3luY3B0Owo+Kwo+KyNpZmRlZiBfX1NXSVRD SF9fCj4rICAgIE1tdVJlcXVlc3QgbW11X3JlcXVlc3Q7Cj4rI2VuZGlmCj4rICAgIHVpbnQzMl90 IGNsb2NrOwo+K30gQVZOVlRlZ3JhQ2hhbm5lbDsKPisKPit0eXBlZGVmIHN0cnVjdCBBVk5WVGVn cmFNYXAgewo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICB1aW50MzJfdCBoYW5kbGU7Cj4rICAg IHVpbnQzMl90IHNpemU7Cj4rICAgIHZvaWQgKmNwdV9hZGRyOwo+KyNlbHNlCj4rICAgIE52TWFw IG1hcDsKPisgICAgdWludDMyX3QgaW92YTsKPisgICAgdWludDMyX3Qgb3duZXI7Cj4rI2VuZGlm Cj4rICAgIGJvb2wgaXNfbGluZWFyOwo+K30gQVZOVlRlZ3JhTWFwOwo+Kwo+K3R5cGVkZWYgc3Ry dWN0IEFWTlZUZWdyYUNtZGJ1ZiB7Cj4rICAgIEFWTlZUZWdyYU1hcCAqbWFwOwo+Kwo+KyAgICB1 aW50MzJfdCBtZW1fb2Zmc2V0LCBtZW1fc2l6ZTsKPisKPisgICAgdWludDMyX3QgKmN1cl93b3Jk Owo+Kwo+KyAgICBzdHJ1Y3QgbnZob3N0X2NtZGJ1ZiAgICAgICAqY21kYnVmczsKPisjaWZuZGVm IF9fU1dJVENIX18KPisgICAgc3RydWN0IG52aG9zdF9jbWRidWZfZXh0ICAgKmNtZGJ1Zl9leHRz Owo+KyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAqY2xhc3NfaWRzOwo+KyNlbmRpZgo+ KyAgICB1aW50MzJfdCBudW1fY21kYnVmczsKPisKPisjaWZuZGVmIF9fU1dJVENIX18KPisgICAg c3RydWN0IG52aG9zdF9yZWxvYyAgICAgICAgKnJlbG9jczsKPisgICAgc3RydWN0IG52aG9zdF9y ZWxvY190eXBlICAgKnJlbG9jX3R5cGVzOwo+KyAgICBzdHJ1Y3QgbnZob3N0X3JlbG9jX3NoaWZ0 ICAqcmVsb2Nfc2hpZnRzOwo+KyAgICB1aW50MzJfdCBudW1fcmVsb2NzOwo+KyNlbmRpZgo+Kwo+ KyAgICBzdHJ1Y3QgbnZob3N0X3N5bmNwdF9pbmNyICAqc3luY3B0X2luY3JzOwo+KyNpZm5kZWYg X19TV0lUQ0hfXwo+KyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAqZmVuY2VzOwo+KyNl bmRpZgo+KyAgICB1aW50MzJfdCBudW1fc3luY3B0X2luY3JzOwo+Kwo+KyNpZm5kZWYgX19TV0lU Q0hfXwo+KyAgICBzdHJ1Y3QgbnZob3N0X3dhaXRjaGsgICAgICAqd2FpdGNoa3M7Cj4rICAgIHVp bnQzMl90IG51bV93YWl0Y2hrczsKPisjZW5kaWYKPit9IEFWTlZUZWdyYUNtZGJ1ZjsKPisKPit0 eXBlZGVmIHN0cnVjdCBBVk5WVGVncmFKb2JQb29sIHsKPisgICAgLyoKPisgICAgICogUG9vbCBv YmplY3QgZm9yIGpvYiBhbGxvY2F0aW9uCj4rICAgICAqLwo+KyAgICBBVkJ1ZmZlclBvb2wgKnBv b2w7Cj4rCj4rICAgIC8qCj4rICAgICAqIEhhcmR3YXJlIGNoYW5uZWwgdGhlIGpvYnMgd2lsbCBi ZSBzdWJtaXR0ZWQgdG8KPisgICAgICovCj4rICAgIEFWTlZUZWdyYUNoYW5uZWwgKmNoYW5uZWw7 Cj4rCj4rICAgIC8qCj4rICAgICAqIFRvdGFsIHNpemUgb2YgdGhlIGlucHV0IG1lbW9yeS1tYXBw ZWQgYnVmZmVyCj4rICAgICAqLwo+KyAgICBzaXplX3QgaW5wdXRfbWFwX3NpemU7Cj4rCj4rICAg IC8qCj4rICAgICAqIE9mZnNldCBvZiB0aGUgY29tbWFuZCBkYXRhIHdpdGhpbiB0aGUgaW5wdXQg bWFwCj4rICAgICAqLwo+KyAgICBvZmZfdCBjbWRidWZfb2ZmOwo+Kwo+KyAgICAvKgo+KyAgICAg KiBNYXhpbXVtIG1lbW9yeSB1c2FibGUgYnkgdGhlIGNvbW1hbmQgYnVmZmVyCj4rICAgICAqLwo+ KyAgICBzaXplX3QgbWF4X2NtZGJ1Zl9zaXplOwo+K30gQVZOVlRlZ3JhSm9iUG9vbDsKPisKPit0 eXBlZGVmIHN0cnVjdCBBVk5WVGVncmFKb2Igewo+KyAgICAvKgo+KyAgICAgKiBNZW1vcnktbWFw cGVkIGJ1ZmZlciBmb3IgY29tbWFuZCBidWZmZXJzLCBtZXRhZGF0YSBzdHJ1Y3R1cmVzLCAuLi4K PisgICAgICovCj4rICAgIEFWTlZUZWdyYU1hcCBpbnB1dF9tYXA7Cj4rCj4rICAgIC8qCj4rICAg ICAqIE9iamVjdCBmb3IgY29tbWFuZCByZWNvcmRpbmcKPisgICAgICovCj4rICAgIEFWTlZUZWdy YUNtZGJ1ZiBjbWRidWY7Cj4rCj4rICAgIC8qCj4rICAgICAqIEZlbmNlIGluZGljYXRpbmcgY29t cGxldGlvbiBvZiB0aGUgam9iCj4rICAgICAqLwo+KyAgICB1aW50MzJfdCBmZW5jZTsKPit9IEFW TlZUZWdyYUpvYjsKPisKPitBVkJ1ZmZlclJlZiAqYXZfbnZ0ZWdyYV9kcml2ZXJfaW5pdCh2b2lk KTsKPisKPitpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX29wZW4oQVZOVlRlZ3JhQ2hhbm5lbCAqY2hh bm5lbCwgY29uc3QgY2hhciAqZGV2KTsKPitpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX2Nsb3NlKEFW TlZUZWdyYUNoYW5uZWwgKmNoYW5uZWwpOwo+K2ludCBhdl9udnRlZ3JhX2NoYW5uZWxfZ2V0X2Ns b2NrX3JhdGUoQVZOVlRlZ3JhQ2hhbm5lbCAqY2hhbm5lbCwgdWludDMyX3QgbW9kdWxlaWQsIHVp bnQzMl90ICpjbG9ja19yYXRlKTsKPitpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX3NldF9jbG9ja19y YXRlKEFWTlZUZWdyYUNoYW5uZWwgKmNoYW5uZWwsIHVpbnQzMl90IG1vZHVsZWlkLCB1aW50MzJf dCBjbG9ja19yYXRlKTsKPitpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX3N1Ym1pdChBVk5WVGVncmFD aGFubmVsICpjaGFubmVsLCBBVk5WVGVncmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3QgKmZlbmNl KTsKPitpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX3NldF9zdWJtaXRfdGltZW91dChBVk5WVGVncmFD aGFubmVsICpjaGFubmVsLCB1aW50MzJfdCB0aW1lb3V0X21zKTsKPisKPitpbnQgYXZfbnZ0ZWdy YV9zeW5jcHRfd2FpdChBVk5WVGVncmFDaGFubmVsICpjaGFubmVsLCB1aW50MzJfdCB0aHJlc2hv bGQsIGludDMyX3QgdGltZW91dCk7Cj4rCj4raW50IGF2X252dGVncmFfbWFwX2FsbG9jYXRlKEFW TlZUZWdyYU1hcCAqbWFwLCBBVk5WVGVncmFDaGFubmVsICpvd25lciwgdWludDMyX3Qgc2l6ZSwK PisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWxpZ24sIGludCBoZWFwX21h c2ssIGludCBmbGFncyk7Cj4raW50IGF2X252dGVncmFfbWFwX2ZyZWUoQVZOVlRlZ3JhTWFwICpt YXApOwo+K2ludCBhdl9udnRlZ3JhX21hcF9mcm9tX3ZhKEFWTlZUZWdyYU1hcCAqbWFwLCBBVk5W VGVncmFDaGFubmVsICpvd25lciwgdm9pZCAqbWVtLAo+KyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduLCB1aW50MzJfdCBmbGFncyk7Cj4raW50 IGF2X252dGVncmFfbWFwX2Nsb3NlKEFWTlZUZWdyYU1hcCAqbWFwKTsKPitpbnQgYXZfbnZ0ZWdy YV9tYXBfbWFwKEFWTlZUZWdyYU1hcCAqbWFwKTsKPitpbnQgYXZfbnZ0ZWdyYV9tYXBfdW5tYXAo QVZOVlRlZ3JhTWFwICptYXApOwo+K2ludCBhdl9udnRlZ3JhX21hcF9jYWNoZV9vcChBVk5WVGVn cmFNYXAgKm1hcCwgaW50IG9wLCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKPitpbnQgYXZfbnZ0 ZWdyYV9tYXBfcmVhbGxvYyhBVk5WVGVncmFNYXAgKm1hcCwgdWludDMyX3Qgc2l6ZSwgdWludDMy X3QgYWxpZ24sIGludCBoZWFwX21hc2ssIGludCBmbGFncyk7Cj4rCj4rc3RhdGljIGlubGluZSBp bnQgYXZfbnZ0ZWdyYV9tYXBfY3JlYXRlKEFWTlZUZWdyYU1hcCAqbWFwLCBBVk5WVGVncmFDaGFu bmVsICpvd25lciwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24sCj4rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWFwX21hc2ssIGludCBmbGFncykKPit7 Cj4rICAgIGludCBlcnI7Cj4rCj4rICAgIGVyciA9IGF2X252dGVncmFfbWFwX2FsbG9jYXRlKG1h cCwgb3duZXIsIHNpemUsIGFsaWduLCBoZWFwX21hc2ssIGZsYWdzKTsKPisgICAgaWYgKGVyciA8 IDApCj4rICAgICAgICByZXR1cm4gZXJyOwo+Kwo+KyAgICByZXR1cm4gYXZfbnZ0ZWdyYV9tYXBf bWFwKG1hcCk7Cj4rfQo+Kwo+K3N0YXRpYyBpbmxpbmUgaW50IGF2X252dGVncmFfbWFwX2Rlc3Ry b3koQVZOVlRlZ3JhTWFwICptYXApIHsKPisgICAgaW50IGVycjsKPisKPisgICAgZXJyID0gYXZf bnZ0ZWdyYV9tYXBfdW5tYXAobWFwKTsKPisgICAgaWYgKGVyciA8IDApCj4rICAgICAgICByZXR1 cm4gZXJyOwo+Kwo+KyAgICByZXR1cm4gYXZfbnZ0ZWdyYV9tYXBfZnJlZShtYXApOwo+K30KPisK PitpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfaW5pdChBVk5WVGVncmFDbWRidWYgKmNtZGJ1Zik7Cj4r aW50IGF2X252dGVncmFfY21kYnVmX2RlaW5pdChBVk5WVGVncmFDbWRidWYgKmNtZGJ1Zik7Cj4r aW50IGF2X252dGVncmFfY21kYnVmX2FkZF9tZW1vcnkoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYs IEFWTlZUZWdyYU1hcCAqbWFwLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemUpOwo+K2lu dCBhdl9udnRlZ3JhX2NtZGJ1Zl9jbGVhcihBVk5WVGVncmFDbWRidWYgKmNtZGJ1Zik7Cj4raW50 IGF2X252dGVncmFfY21kYnVmX2JlZ2luKEFWTlZUZWdyYUNtZGJ1ZiAqY21kYnVmLCB1aW50MzJf dCBjbGFzc19pZCk7Cj4raW50IGF2X252dGVncmFfY21kYnVmX2VuZChBVk5WVGVncmFDbWRidWYg KmNtZGJ1Zik7Cj4raW50IGF2X252dGVncmFfY21kYnVmX3B1c2hfd29yZChBVk5WVGVncmFDbWRi dWYgKmNtZGJ1ZiwgdWludDMyX3Qgd29yZCk7Cj4raW50IGF2X252dGVncmFfY21kYnVmX3B1c2hf dmFsdWUoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg d29yZCk7Cj4raW50IGF2X252dGVncmFfY21kYnVmX3B1c2hfcmVsb2MoQVZOVlRlZ3JhQ21kYnVm ICpjbWRidWYsIHVpbnQzMl90IG9mZnNldCwgQVZOVlRlZ3JhTWFwICp0YXJnZXQsIHVpbnQzMl90 IHRhcmdldF9vZmZzZXQsCj4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJl bG9jX3R5cGUsIGludCBzaGlmdCk7Cj4raW50IGF2X252dGVncmFfY21kYnVmX3B1c2hfc3luY3B0 X2luY3IoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYsIHVpbnQzMl90IHN5bmNwdCk7Cj4raW50IGF2 X252dGVncmFfY21kYnVmX3B1c2hfd2FpdChBVk5WVGVncmFDbWRidWYgKmNtZGJ1ZiwgdWludDMy X3Qgc3luY3B0LCB1aW50MzJfdCBmZW5jZSk7Cj4raW50IGF2X252dGVncmFfY21kYnVmX2FkZF9z eW5jcHRfaW5jcihBVk5WVGVncmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3Qgc3luY3B0LCB1aW50 MzJfdCBmZW5jZSk7Cj4raW50IGF2X252dGVncmFfY21kYnVmX2FkZF93YWl0Y2hrKEFWTlZUZWdy YUNtZGJ1ZiAqY21kYnVmLCB1aW50MzJfdCBzeW5jcHQsIHVpbnQzMl90IGZlbmNlKTsKPisKPisv Kgo+KyAqIEpvYiBhbGxvY2F0aW9uIGFuZCBzdWJtaXNzaW9uIHJvdXRpbmVzCj4rICovCj4raW50 IGF2X252dGVncmFfam9iX3Bvb2xfaW5pdChBVk5WVGVncmFKb2JQb29sICpwb29sLCBBVk5WVGVn cmFDaGFubmVsICpjaGFubmVsLAo+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IGlucHV0X21hcF9zaXplLCBvZmZfdCBjbWRidWZfb2ZmLCBzaXplX3QgbWF4X2NtZGJ1Zl9zaXpl KTsKPitpbnQgYXZfbnZ0ZWdyYV9qb2JfcG9vbF91bmluaXQoQVZOVlRlZ3JhSm9iUG9vbCAqcG9v bCk7Cj4rQVZCdWZmZXJSZWYgKmF2X252dGVncmFfam9iX3Bvb2xfZ2V0KEFWTlZUZWdyYUpvYlBv b2wgKnBvb2wpOwo+Kwo+K2ludCBhdl9udnRlZ3JhX2pvYl9zdWJtaXQoQVZOVlRlZ3JhSm9iUG9v bCAqcG9vbCwgQVZOVlRlZ3JhSm9iICpqb2IpOwo+K2ludCBhdl9udnRlZ3JhX2pvYl93YWl0KEFW TlZUZWdyYUpvYlBvb2wgKnBvb2wsIEFWTlZUZWdyYUpvYiAqam9iLCBpbnQgdGltZW91dCk7Cj4r Cj4rc3RhdGljIGlubGluZSB1aW50MzJfdCBhdl9udnRlZ3JhX21hcF9nZXRfaGFuZGxlKEFWTlZU ZWdyYU1hcCAqbWFwKSB7Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAgIHJldHVybiBtYXAtPmhh bmRsZTsKPisjZWxzZQo+KyAgICByZXR1cm4gbWFwLT5tYXAuaGFuZGxlOwo+KyNlbmRpZgo+K30K PisKPitzdGF0aWMgaW5saW5lIHZvaWQgKmF2X252dGVncmFfbWFwX2dldF9hZGRyKEFWTlZUZWdy YU1hcCAqbWFwKSB7Cj4rI2lmbmRlZiBfX1NXSVRDSF9fCj4rICAgIHJldHVybiBtYXAtPmNwdV9h ZGRyOwo+KyNlbHNlCj4rICAgIHJldHVybiBtYXAtPm1hcC5jcHVfYWRkcjsKPisjZW5kaWYKPit9 Cj4rCj4rc3RhdGljIGlubGluZSB1aW50MzJfdCBhdl9udnRlZ3JhX21hcF9nZXRfc2l6ZShBVk5W VGVncmFNYXAgKm1hcCkgewo+KyNpZm5kZWYgX19TV0lUQ0hfXwo+KyAgICByZXR1cm4gbWFwLT5z aXplOwo+KyNlbHNlCj4rICAgIHJldHVybiBtYXAtPm1hcC5zaXplOwo+KyNlbmRpZgo+K30KPisK PisvKiBBZGRyZXNzZXMgYXJlIHNoaWZ0ZWQgYnkgOCBiaXRzIGluIHRoZSBjb21tYW5kIGJ1ZmZl ciwgcmVxdWlyaW5nIGFuIGFsaWdubWVudCB0byAyNTYgKi8KPisjZGVmaW5lIEFWX05WVEVHUkFf TUFQX0FMSUdOICgxIDw8IDgpCj4rCj4rI2RlZmluZSBBVl9OVlRFR1JBX1ZBTFVFKG9mZnNldCwg ZmllbGQsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4rICAgICgodmFsdWUgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4r ICAgICgodWludDMyX3QpKChVSU5UNjRfQygxKSA8PCAoKDE/b2Zmc2V0ICMjIF8gIyMgZmllbGQp IC0gKDA/b2Zmc2V0ICMjIF8gIyMgZmllbGQpICsgMSkpIC0gMSkpKSBcCj4rICAgIDw8ICgwP29m ZnNldCAjIyBfICMjIGZpZWxkKSkKPisKPisjZGVmaW5lIEFWX05WVEVHUkFfRU5VTShvZmZzZXQs IGZpZWxkLCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPisgICAgKChvZmZzZXQgIyMgXyAjIyBmaWVsZCAjIyBfICMjIHZhbHVlICYg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PisgICAgKCh1aW50MzJfdCkoKFVJTlQ2NF9DKDEpIDw8ICgoMT9vZmZzZXQgIyMgXyAjIyBmaWVs ZCkgLSAoMD9vZmZzZXQgIyMgXyAjIyBmaWVsZCkgKyAxKSkgLSAxKSkpIFwKPisgICAgPDwgKDA/ b2Zmc2V0ICMjIF8gIyMgZmllbGQpKQo+Kwo+KyNkZWZpbmUgQVZfTlZURUdSQV9QVVNIX1ZBTFVF KGNtZGJ1Ziwgb2Zmc2V0LCB2YWx1ZSkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+KyAgICBpbnQgX2VyciA9IGF2X252dGVncmFfY21kYnVmX3B1c2hfdmFsdWUoY21kYnVm LCAob2Zmc2V0KSAvIHNpemVvZih1aW50MzJfdCksIHZhbHVlKTsgXAo+KyAgICBpZiAoX2VyciA8 IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+KyAgICAgICAgcmV0dXJuIF9lcnI7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ K30pCj4rCj4rI2RlZmluZSBBVl9OVlRFR1JBX1BVU0hfUkVMT0MoY21kYnVmLCBvZmZzZXQsIHRh cmdldCwgdGFyZ2V0X29mZnNldCwgdHlwZSkgKHsgICAgXAo+KyAgICBpbnQgX2VyciA9IGF2X252 dGVncmFfY21kYnVmX3B1c2hfcmVsb2MoY21kYnVmLCAob2Zmc2V0KSAvIHNpemVvZih1aW50MzJf dCksIFwKPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl dCwgdGFyZ2V0X29mZnNldCwgdHlwZSwgOCk7ICAgICBcCj4rICAgIGlmIChfZXJyIDwgMCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+KyAgICAgICAgcmV0dXJuIF9lcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPit9KQo+Kwo+KyNlbmRpZiAvKiBBVlVU SUxfTlZURUdSQV9IICovCj5kaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL252dGVncmFfaG9zdDF4Lmgg Yi9saWJhdnV0aWwvbnZ0ZWdyYV9ob3N0MXguaAo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4 IDAwMDAwMDAwMDAuLjI1ZTM3ZWFlNjEKPi0tLSAvZGV2L251bGwKPisrKyBiL2xpYmF2dXRpbC9u dnRlZ3JhX2hvc3QxeC5oCj5AQCAtMCwwICsxLDk0IEBACj4rLyoKPisgKiBDb3B5cmlnaHQgKGMp IDIwMjQgYXZlcm5lIDxhdmVybmUzODFAZ21haWwuY29tPgo+KyAqCj4rICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgo+KyAqCj4rICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+KyAqIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yCj4rICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPisgKgo+KyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAo+KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4rICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCj4rICoKPisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwo+KyAqIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCj4r ICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQS4KPisgKi8KPisKPisjaWZuZGVmIEFWVVRJTF9OVlRFR1JBX0hPU1QxWF9ICj4rI2RlZmlu ZSBBVlVUSUxfTlZURUdSQV9IT1NUMVhfSAo+Kwo+KyNpbmNsdWRlIDxzdGRpbnQuaD4KPisKPisj aW5jbHVkZSAibWFjcm9zLmgiCj4rCj4rLyogRnJvbSBMNFQgaW5jbHVkZS9saW51eC9ob3N0MXgu aCAqLwo+K2VudW0gaG9zdDF4X2NsYXNzIHsKPisgICAgSE9TVDFYX0NMQVNTX0hPU1QxWCAgPSAw eDAxLAo+KyAgICBIT1NUMVhfQ0xBU1NfTlZFTkMgICA9IDB4MjEsCj4rICAgIEhPU1QxWF9DTEFT U19WSSAgICAgID0gMHgzMCwKPisgICAgSE9TVDFYX0NMQVNTX0lTUEEgICAgPSAweDMyLAo+KyAg ICBIT1NUMVhfQ0xBU1NfSVNQQiAgICA9IDB4MzQsCj4rICAgIEhPU1QxWF9DTEFTU19HUjJEICAg ID0gMHg1MSwKPisgICAgSE9TVDFYX0NMQVNTX0dSMkRfU0IgPSAweDUyLAo+KyAgICBIT1NUMVhf Q0xBU1NfVklDICAgICA9IDB4NWQsCj4rICAgIEhPU1QxWF9DTEFTU19HUjNEICAgID0gMHg2MCwK PisgICAgSE9TVDFYX0NMQVNTX05WSlBHICAgPSAweGMwLAo+KyAgICBIT1NUMVhfQ0xBU1NfTlZE RUMgICA9IDB4ZjAsCj4rfTsKPisKPitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGhvc3QxeF9vcGNv ZGVfc2V0Y2xhc3ModW5zaWduZWQgY2xhc3NfaWQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg bWFzaykgewo+KyAgICByZXR1cm4gKDAgPDwgMjgpIHwgKG9mZnNldCA8PCAxNikgfCAoY2xhc3Nf aWQgPDwgNikgfCBtYXNrOwo+K30KPisKPitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGhvc3QxeF9v cGNvZGVfaW5jcih1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KSB7Cj4rICAgIHJldHVy biAoMSA8PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IGNvdW50Owo+K30KPisKPitzdGF0aWMgaW5s aW5lIHVpbnQzMl90IGhvc3QxeF9vcGNvZGVfbm9uaW5jcih1bnNpZ25lZCBvZmZzZXQsIHVuc2ln bmVkIGNvdW50KSB7Cj4rICAgIHJldHVybiAoMiA8PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IGNv dW50Owo+K30KPisKPitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGhvc3QxeF9vcGNvZGVfbWFzayh1 bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG1hc2spIHsKPisgICAgcmV0dXJuICgzIDw8IDI4KSB8 IChvZmZzZXQgPDwgMTYpIHwgbWFzazsKPit9Cj4rCj4rc3RhdGljIGlubGluZSB1aW50MzJfdCBo b3N0MXhfb3Bjb2RlX2ltbSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHZhbHVlKSB7Cj4rICAg IHJldHVybiAoNCA8PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IHZhbHVlOwo+K30KPisKPisjZGVm aW5lIE5WX0NMQVNTX0hPU1RfTE9BRF9TWU5DUFRfUEFZTE9BRCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMHgwMDAwMDEzOCkKPisjZGVmaW5lIE5WX0NMQVNTX0hPU1RfV0FJVF9T WU5DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDE0 MCkKPisKPisjZGVmaW5lIE5WX1RISV9JTkNSX1NZTkNQVCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKPisjZGVmaW5lIE5WX1RISV9J TkNSX1NZTkNQVF9JTkRYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA3OjAKPisjZGVmaW5lIE5WX1RISV9JTkNSX1NZTkNQVF9DT05EICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxNTo4Cj4rI2RlZmluZSBOVl9USElfSU5DUl9TWU5D UFRfQ09ORF9JTU1FRElBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAw MDAwMDApCj4rI2RlZmluZSBOVl9USElfSU5DUl9TWU5DUFRfQ09ORF9PUF9ET05FICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCj4rI2RlZmluZSBOVl9USElf SU5DUl9TWU5DUFRfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MDAwMDAwMDgpCj4rI2RlZmluZSBOVl9USElfSU5DUl9TWU5DUFRfRVJSX0NPTkRfU1RT X0lNTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowCj4rI2RlZmluZSBOVl9USElf SU5DUl9TWU5DUFRfRVJSX0NPTkRfU1RTX09QRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMToxCj4rI2RlZmluZSBOVl9USElfQ1RYU1dfSU5DUl9TWU5DUFQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMGMpCj4rI2RlZmluZSBOVl9USElf Q1RYU1dfSU5DUl9TWU5DUFRfSU5EWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgNzowCj4rI2RlZmluZSBOVl9USElfQ1RYU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCj4rI2RlZmluZSBOVl9USElf Q1RYU1dfQ1VSUl9DTEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOTowCj4rI2RlZmluZSBOVl9USElfQ1RYU1dfQVVUT19BQ0sgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6MTEKPisjZGVmaW5lIE5WX1RISV9DVFhTV19D VVJSX0NIQU5ORUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTox Mgo+KyNkZWZpbmUgTlZfVEhJX0NUWFNXX05FWFRfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDI1OjE2Cj4rI2RlZmluZSBOVl9USElfQ1RYU1dfTkVYVF9D SEFOTkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MjgKPisj ZGVmaW5lIE5WX1RISV9DT05UX1NZTkNQVF9FT0YgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMDAwMDAyOCkKPisjZGVmaW5lIE5WX1RISV9DT05UX1NZTkNQ VF9FT0ZfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OjAKPisj ZGVmaW5lIE5WX1RISV9DT05UX1NZTkNQVF9FT0ZfQ09ORCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA4OjgKPisjZGVmaW5lIE5WX1RISV9NRVRIT0QwICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA0MCkKPisj ZGVmaW5lIE5WX1RISV9NRVRIT0QwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMTowCj4rI2RlZmluZSBOVl9USElfTUVUSE9EMSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDQpCj4r I2RlZmluZSBOVl9USElfTUVUSE9EMV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMzE6MAo+KyNkZWZpbmUgTlZfVEhJX0lOVF9TVEFUVVMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDc4KQo+ KyNkZWZpbmUgTlZfVEhJX0lOVF9TVEFUVVNfRkFMQ09OX0lOVCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDA6MAo+KyNkZWZpbmUgTlZfVEhJX0lOVF9NQVNLICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDdjKQo+ KyNkZWZpbmUgTlZfVEhJX0lOVF9NQVNLX0ZBTENPTl9JTlQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDA6MAo+Kwo+KyNlbmRpZiAvKiBBVlVUSUxfTlZURUdSQV9IT1NU MVhfSCAqLwo+ZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9waXhkZXNjLmMgYi9saWJhdnV0aWwvcGl4 ZGVzYy5jCj5pbmRleCAxYzBiY2YyMjMyLi5iYjE0YjFiMzA2IDEwMDY0NAo+LS0tIGEvbGliYXZ1 dGlsL3BpeGRlc2MuYwo+KysrIGIvbGliYXZ1dGlsL3BpeGRlc2MuYwo+QEAgLTI3OTEsNiArMjc5 MSwxMCBAQCBzdGF0aWMgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yIGF2X3BpeF9mbXRfZGVzY3Jp cHRvcnNbQVZfUElYX0ZNVF9OQl0gPSB7Cj4gICAgICAgICB9LAo+ICAgICAgICAgLmZsYWdzID0g QVZfUElYX0ZNVF9GTEFHX1BMQU5BUiwKPiAgICAgfSwKPisgICAgW0FWX1BJWF9GTVRfTlZURUdS QV0gPSB7Cj4rICAgICAgICAubmFtZSA9ICJudnRlZ3JhIiwKPisgICAgICAgIC5mbGFncyA9IEFW X1BJWF9GTVRfRkxBR19IV0FDQ0VMLAo+KyAgICB9LAo+IH07Cj4gCj4gc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCBjb2xvcl9yYW5nZV9uYW1lc1tdID0gewo+ZGlmZiAtLWdpdCBhL2xpYmF2dXRp bC9waXhmbXQuaCBiL2xpYmF2dXRpbC9waXhmbXQuaAo+aW5kZXggYTdmNTBlMTY5MC4uYTMyMTNj NzkyYSAxMDA2NDQKPi0tLSBhL2xpYmF2dXRpbC9waXhmbXQuaAo+KysrIGIvbGliYXZ1dGlsL3Bp eGZtdC5oCj5AQCAtNDM5LDYgKzQzOSwxNCBAQCBlbnVtIEFWUGl4ZWxGb3JtYXQgewo+ICAgICAg Ki8KPiAgICAgQVZfUElYX0ZNVF9EM0QxMiwKPiAKPisgICAgLyoqCj4rICAgICAqIEhhcmR3YXJl IHN1cmZhY2VzIGZvciBUZWdyYSBkZXZpY2VzLgo+KyAgICAgKgo+KyAgICAgKiBkYXRhWzAuLjJd IHBvaW50cyB0byBtZW1vcnktbWFwcGVkIGJ1ZmZlciBjb250YWluaW5nIGZyYW1lIGRhdGEKPisg ICAgICogYnVmWzBdIGNvbnRhaW5zIGFuIEFWQnVmZmVyUmVmIHRvIGFuIEFWTlRlZ3JhTWFwCj4r ICAgICAqLwo+KyAgICBBVl9QSVhfRk1UX05WVEVHUkEsCj4rCj4gICAgIEFWX1BJWF9GTVRfTkIg ICAgICAgICAvLy88IG51bWJlciBvZiBwaXhlbCBmb3JtYXRzLCBETyBOT1QgVVNFIFRISVMgaWYg eW91IHdhbnQgdG8gbGluayB3aXRoIHNoYXJlZCBsaWJhdiogYmVjYXVzZSB0aGUgbnVtYmVyIG9m IGZvcm1hdHMgbWlnaHQgZGlmZmVyIGJldHdlZW4gdmVyc2lvbnMKPiB9Owo+IApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGlu ZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUs IG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1 bnN1YnNjcmliZSIuCg==