From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id EB6304DF19 for ; Thu, 5 Jun 2025 18:14:12 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 5C83E68B92B; Thu, 5 Jun 2025 21:14:08 +0300 (EEST) Received: from btbn.de (btbn.de [144.76.60.213]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 19F8468A15F for ; Thu, 5 Jun 2025 21:14:01 +0300 (EEST) Received: from [authenticated] by btbn.de (Postfix) with ESMTPSA id D82D22819119F for ; Thu, 05 Jun 2025 20:13:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rothenpieler.org; s=mail; t=1749147239; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Bcj0TAoRwp1mZnTqFlDOrJlaY+1kd2M30KTeYWRG4OQ=; b=KDiRo7L/wcXwb68IpSRHMFC16HuZb0zZC6FPBriUWCbPVM2dyUT6wdMEAqxS2x495ZzpUo CNWZWY5Tf4BMrvQEmyO2K3Ek5dAUnp5ijhx74e4EvpDgAEhDsoqQPItvcfK8qHJ+VjBinf 6H2XjgsHPoZCJKu247GAIzfOuh8qfTsmYjnPcvLzAN9lqZkPe3iEMPcuN2/yOyhi8w0BDb QIQO7GKMnx315kTbhBaH/FCSEnAdNKKIGY3e3Ce4Yu+4d/hC3GOuTBYSsVbYWN613lGo8w hGVtchq6g3Yqa2GoUdbfBf3KEylf7TDjS+PSx8Vv/URqbffIUP18BaWBBEgEAA== Message-ID: Date: Thu, 5 Jun 2025 20:14:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250605110938.686643-1-f1k2faeez@gmail.com> Content-Language: en-US From: Timo Rothenpieler In-Reply-To: <20250605110938.686643-1-f1k2faeez@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH] avfilter: add CUDA-accelerated transpose filter 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gMDUuMDYuMjAyNSAxMzowOSwgRmFlZXogS2FkaXJpIHdyb3RlOgo+IEFkZCBhIG5ldyBDVURB LWFjY2VsZXJhdGVkIHRyYW5zcG9zZSBmaWx0ZXIgKHRyYW5zcG9zZV9jdWRhKSB0aGF0IHByb3Zp ZGVzCj4gaGFyZHdhcmUtYWNjZWxlcmF0ZWQgdmlkZW8gdHJhbnNwb3NpdGlvbiBvcGVyYXRpb25z IG9uIE5WSURJQSBHUFVzIHVzaW5nCj4gQ1VEQS4gVGhpcyBmaWx0ZXIgc3VwcG9ydHMgYWxsIHRo ZSBzYW1lIHRyYW5zcG9zZSBvcGVyYXRpb25zIGFzIHRoZSBDUFUKPiB0cmFuc3Bvc2UgZmlsdGVy IHdoaWxlIGxldmVyYWdpbmcgR1BVIGFjY2VsZXJhdGlvbiBmb3IgaW1wcm92ZWQgcGVyZm9ybWFu Y2UuCj4gCj4gU3VwcG9ydGVkIG9wZXJhdGlvbnM6Cj4gLSA5MMKwIGNsb2Nrd2lzZSByb3RhdGlv bgo+IC0gOTDCsCBjb3VudGVyLWNsb2Nrd2lzZSByb3RhdGlvbgo+IC0gOTDCsCBjbG9ja3dpc2Ug KyB2ZXJ0aWNhbCBmbGlwCj4gLSA5MMKwIGNvdW50ZXItY2xvY2t3aXNlICsgdmVydGljYWwgZmxp cAo+IC0gMTgwwrAgcm90YXRpb24KPiAtIEhvcml6b250YWwgZmxpcAo+IC0gVmVydGljYWwgZmxp cAo+IAo+IFN1cHBvcnRlZCBwaXhlbCBmb3JtYXRzOgo+IC0gWVVWNDIwUCwgTlYxMiwgWVVWNDQ0 UCAoOC1iaXQpCj4gLSBQMDEwLCBQMDE2LCBZVVY0NDRQMTYgKDEwLzE2LWJpdCkKPiAtIFJHQjMy LCBCR1IzMiwgMFJHQjMyLCAwQkdSMzIgKHBhY2tlZCBSR0IpCj4gCj4gVGhlIGltcGxlbWVudGF0 aW9uIHVzZXMgQ1VEQSB0ZXh0dXJlIG1lbW9yeSBmb3Igb3B0aW1hbCBtZW1vcnkgYWNjZXNzCj4g cGF0dGVybnMgYW5kIGluY2x1ZGVzIGEgbmV3IENVREEgVlBQIChWaWRlbyBQb3N0LVByb2Nlc3Np bmcpIGZyYW1ld29yawo+IHRoYXQgY2FuIGJlIHJldXNlZCBieSBmdXR1cmUgQ1VEQSBmaWx0ZXJz Lgo+IAo+IFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvdmVyIENQVSB0cmFuc3Bvc2U6Cj4gLSA0 SyBZVVY0MjBQOiB+MTV4IGZhc3Rlcgo+IC0gMTA4MHAgWVVWNDIwUDogfjh4IGZhc3Rlcgo+IC0g TmVnbGlnaWJsZSBDUFUgdXNhZ2UgZHVyaW5nIHByb2Nlc3NpbmcKPiAKPiBUaGUgZmlsdGVyIG1h aW50YWlucyBmdWxsIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZXhpc3RpbmcgdHJhbnNwb3NlIGZp bHRlcgo+IEFQSSBhbmQgaW5jbHVkZXMgcGFzc3Rocm91Z2ggbW9kZSBmb3IgbGFuZHNjYXBlIGNv bnRlbnQgd2hlbiBlbmFibGVkLgo+IAo+IERlcGVuZGVuY2llczogcmVxdWlyZXMgQ1VEQSBTREsg YW5kIGZmbnZjb2RlYyBoZWFkZXJzLgoKV2hhdCBleGFjdGx5IHJlcXVpcmVzIHRoZSBDVURBIFNE Sz8KTG9va2luZyBhdCBpdCwgaXQgc2hvdWxkIG5vdCBkbyBzbyBhdCBhbGwuCgo+IEV4YW1wbGUg dXNhZ2U6Cj4gICAgZmZtcGVnIC1od2FjY2VsIGN1ZGEgLWh3YWNjZWxfb3V0cHV0X2Zvcm1hdCBj dWRhIC1pIGlucHV0Lm1wNCBcCj4gICAgICAgICAgIC12ZiB0cmFuc3Bvc2VfY3VkYT0xIC1jOnYg aDI2NF9udmVuYyBvdXRwdXQubXA0Cj4gCj4gU2lnbmVkLW9mZi1ieTogRmFlZXogS2FkaXJpIDxm MWsyZmFlZXpAZ21haWwuY29tPgo+IC0tLQo+ICAgQ2hhbmdlbG9nICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDIgKy0KPiAgIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAy ICsKPiAgIGRvYy9maWx0ZXJzLnRleGkgICAgICAgICAgICAgICAgIHwgMTM3ICsrKysrKysrKysK PiAgIGxpYmF2ZmlsdGVyL01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsKPiAgIGxpYmF2Zmls dGVyL2FsbGZpbHRlcnMuYyAgICAgICAgIHwgICAxICsKPiAgIGxpYmF2ZmlsdGVyL2N1ZGEvY3Vk YV92cHAuYyAgICAgIHwgMjQ4ICsrKysrKysrKysrKysrKysrKwo+ICAgbGliYXZmaWx0ZXIvY3Vk YS9jdWRhX3ZwcC5oICAgICAgfCAxMTMgKysrKysrKysrCj4gICBsaWJhdmZpbHRlci92Zl90cmFu c3Bvc2VfY3VkYS5jICB8IDQyMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBs aWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfY3VkYS5jdSB8IDIxOSArKysrKysrKysrKysrKysrCj4g ICA5IGZpbGVzIGNoYW5nZWQsIDExNDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL2N1ZGEvY3VkYV92cHAuYwo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL2N1ZGEvY3VkYV92cHAuaAo+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYmF2ZmlsdGVyL3ZmX3RyYW5zcG9zZV9jdWRhLmMKPiAgIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfY3VkYS5jdQo+IAo+IGRpZmYgLS1naXQgYS9D aGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKPiBpbmRleCA0MjE3NDQ5NDM4Li5jZjFkMDE5NjQ1IDEwMDY0 NAo+IC0tLSBhL0NoYW5nZWxvZwo+ICsrKyBiL0NoYW5nZWxvZwo+IEBAIC0xOCw3ICsxOCw3IEBA IHZlcnNpb24gPG5leHQ+Ogo+ICAgLSBBUFYgZW5jb2Rpbmcgc3VwcG9ydCB0aHJvdWdoIGEgbGli b3BlbmFwdiB3cmFwcGVyCj4gICAtIFZWQyBkZWNvZGVyIHN1cHBvcnRzIGFsbCBjb250ZW50IG9m IFNDQyAoU2NyZWVuIENvbnRlbnQgQ29kaW5nKToKPiAgICAgSUJDIChJbnRlciBCbG9jayBDb3B5 KSwgUGFsZXR0ZSBNb2RlIGFuZCBBQ1QgKEFkYXB0aXZlIENvbG9yIFRyYW5zZm9ybQo+IC0KClRo ZSB0d28gbmV3bGluZXMgbmVlZCB0byBzdGF5Cgo+ICstIFRyYW5zcG9zZSBDVURBIGZpbHRlciAo dHJhbnNwb3NlX2N1ZGEpCj4gICAKPiAgIHZlcnNpb24gNy4xOgo+ICAgLSBSYXcgQ2FwdGlvbnMg d2l0aCBUaW1lIChSQ1dUKSBjbG9zZWQgY2FwdGlvbiBkZW11eGVyCj4gZGlmZiAtLWdpdCBhL2Nv bmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IDg5YTc2NmI0MDMuLmQ2YjA3ZDdhZmUgMTAwNzU1 Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTQwMTYsNiArNDAxNiw4 IEBAIHRpbnRlcmxhY2VfcGFkX3Rlc3RfZGVwcz0idGludGVybGFjZV9maWx0ZXIiCj4gICB0b25l bWFwX2ZpbHRlcl9kZXBzPSJjb25zdF9uYW4iCj4gICB0b25lbWFwX3ZhYXBpX2ZpbHRlcl9kZXBz PSJ2YWFwaSBWQVByb2NGaWx0ZXJQYXJhbWV0ZXJCdWZmZXJIRFJUb25lTWFwcGluZyIKPiAgIHRv bmVtYXBfb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wgY29uc3RfbmFuIgo+ICt0cmFuc3Bvc2Vf Y3VkYV9maWx0ZXJfZGVwcz0iZmZudmNvZGVjIgo+ICt0cmFuc3Bvc2VfY3VkYV9maWx0ZXJfZGVw c19hbnk9ImN1ZGFfbnZjYyBjdWRhX2xsdm0iCgpJdCdzIGEgYml0IG9mIGEgbml0LCBnaXZlbiBu b3QgYWxsIGZpbHRlcnMgZm9sbG93IHRoaXMgYWxyZWFkeSwgYnV0IAp0aGVyZSBpcyBpcyB3aG9s ZSBzZWN0aW9uIGp1c3QgZm9yIGN1ZGEgZmlsdGVycywgc3RhcnRpbmcgd2l0aCAKYmlsYXRlcmFs X2N1ZGFfZmlsdGVyX2RlcHMuCgo+ICAgdHJhbnNwb3NlX29wZW5jbF9maWx0ZXJfZGVwcz0ib3Bl bmNsIgo+ICAgdHJhbnNwb3NlX3ZhYXBpX2ZpbHRlcl9kZXBzPSJ2YWFwaSBWQVByb2NQaXBlbGlu ZUNhcHNfcm90YXRpb25fZmxhZ3MiCj4gICB0cmFuc3Bvc2VfdnRfZmlsdGVyX2RlcHM9InZpZGVv dG9vbGJveCBWVFBpeGVsUm90YXRpb25TZXNzaW9uQ3JlYXRlIgo+IGRpZmYgLS1naXQgYS9kb2Mv ZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQo+IGluZGV4IDYzZjU1ZjU3OTQuLjgzMjFm ODQ3ZGUgMTAwNjQ0Cj4gLS0tIGEvZG9jL2ZpbHRlcnMudGV4aQo+ICsrKyBiL2RvYy9maWx0ZXJz LnRleGkKPiBAQCAtMjY4NTYsNiArMjY4NTYsMTQzIEBAIE9ubHkgZGVpbnRlcmxhY2UgZnJhbWVz IG1hcmtlZCBhcyBpbnRlcmxhY2VkLgo+ICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgQGNvZGV7YWxs fS4KPiAgIEBlbmQgdGFibGUKPiAgIAo+ICtAYW5jaG9ye3RyYW5zcG9zZV9jdWRhfQo+ICtAc3Vi c2VjdGlvbiB0cmFuc3Bvc2VfY3VkYQo+ICsKPiArVHJhbnNwb3NlIHJvd3Mgd2l0aCBjb2x1bW5z IGluIHRoZSBpbnB1dCB2aWRlbyBhbmQgb3B0aW9uYWxseSBmbGlwIGl0IHVzaW5nIENVREEuCj4g Kwo+ICtUaGlzIGlzIHRoZSBDVURBIHZhcmlhbnQgb2YgdGhlIEByZWZ7dHJhbnNwb3NlfSBmaWx0 ZXIuIEl0IHByb3ZpZGVzIGhhcmR3YXJlLWFjY2VsZXJhdGVkCj4gK3RyYW5zcG9zaXRpb24gb3Bl cmF0aW9ucyBvbiBDVURBLWNhcGFibGUgZGV2aWNlcyB3aXRoIHN1cHBvcnQgZm9yIG11bHRpcGxl IHBpeGVsIGZvcm1hdHMuCj4gKwo+ICtUaGUgZmlsdGVyIHVzZXMgZWZmaWNpZW50IENVREEga2Vy bmVscyB3aXRoIHRleHR1cmUgbWVtb3J5IGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGFjcm9zcwo+ ICthbGwgc3VwcG9ydGVkIHBpeGVsIGZvcm1hdHMgYW5kIGZyYW1lIHNpemVzLgo+ICsKPiArQHN1 YnNlY3Rpb24gU3VwcG9ydGVkIFBpeGVsIEZvcm1hdHMKPiArCj4gK1RoZSBmaWx0ZXIgc3VwcG9y dHMgdGhlIGZvbGxvd2luZyBwaXhlbCBmb3JtYXRzOgo+ICtAaXRlbWl6ZQo+ICtAaXRlbSBZVVY0 MjBQICg4LWJpdCBwbGFuYXIgWVVWKQo+ICtAaXRlbSBOVjEyICg4LWJpdCBzZW1pLXBsYW5hciBZ VVYpCj4gK0BpdGVtIFlVVjQ0NFAgKDgtYml0IHBsYW5hciBZVVYgNDo0OjQpCj4gK0BpdGVtIFAw MTBMRSAoMTAtYml0IHNlbWktcGxhbmFyIFlVVikKPiArQGl0ZW0gUDAxNkxFICgxNi1iaXQgc2Vt aS1wbGFuYXIgWVVWKQo+ICtAaXRlbSBZVVY0NDRQMTZMRSAoMTYtYml0IHBsYW5hciBZVVYgNDo0 OjQpCj4gK0BpdGVtIFJHQjAgKDMyLWJpdCBSR0Igd2l0aCBhbHBoYSBwYWRkaW5nKQo+ICtAaXRl bSBCR1IwICgzMi1iaXQgQkdSIHdpdGggYWxwaGEgcGFkZGluZykKPiArQGl0ZW0gUkdCQSAoMzIt Yml0IFJHQkEpCj4gK0BpdGVtIEJHUkEgKDMyLWJpdCBCR1JBKQo+ICtAZW5kIGl0ZW1pemUKPiAr Cj4gK0BzdWJzZWN0aW9uIE9wdGlvbnMKPiArCj4gK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBw YXJhbWV0ZXJzOgo+ICsKPiArQHRhYmxlIEBvcHRpb24KPiArCj4gK0BpdGVtIGRpcgo+ICtTcGVj aWZ5IHRoZSB0cmFuc3Bvc2l0aW9uIGRpcmVjdGlvbi4KPiArCj4gK0NhbiBhc3N1bWUgdGhlIGZv bGxvd2luZyB2YWx1ZXM6Cj4gK0B0YWJsZSBAc2FtcAo+ICtAaXRlbSAwLCBjY2xvY2tfZmxpcAo+ ICtSb3RhdGUgYnkgOTAgZGVncmVlcyBjb3VudGVyY2xvY2t3aXNlIGFuZCB2ZXJ0aWNhbGx5IGZs aXAgKGRlZmF1bHQpLCB0aGF0IGlzOgo+ICtAZXhhbXBsZQo+ICtMLlIgICAgIEwubAo+ICsuIC4g LT4gIC4gLgo+ICtsLnIgICAgIFIucgo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BpdGVtIDEsIGNs b2NrCj4gK1JvdGF0ZSBieSA5MCBkZWdyZWVzIGNsb2Nrd2lzZSwgdGhhdCBpczoKPiArQGV4YW1w bGUKPiArTC5SICAgICBsLkwKPiArLiAuIC0+ICAuIC4KPiArbC5yICAgICByLlIKPiArQGVuZCBl eGFtcGxlCj4gKwo+ICtAaXRlbSAyLCBjY2xvY2sKPiArUm90YXRlIGJ5IDkwIGRlZ3JlZXMgY291 bnRlcmNsb2Nrd2lzZSwgdGhhdCBpczoKPiArQGV4YW1wbGUKPiArTC5SICAgICBSLnIKPiArLiAu IC0+ICAuIC4KPiArbC5yICAgICBMLmwKPiArQGVuZCBleGFtcGxlCj4gKwo+ICtAaXRlbSAzLCBj bG9ja19mbGlwCj4gK1JvdGF0ZSBieSA5MCBkZWdyZWVzIGNsb2Nrd2lzZSBhbmQgdmVydGljYWxs eSBmbGlwLCB0aGF0IGlzOgo+ICtAZXhhbXBsZQo+ICtMLlIgICAgIHIuUgo+ICsuIC4gLT4gIC4g Lgo+ICtsLnIgICAgIGwuTAo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BpdGVtIDQsIHJldmVyc2Fs Cj4gK1JvdGF0ZSBieSAxODAgZGVncmVlcywgdGhhdCBpczoKPiArQGV4YW1wbGUKPiArTC5SICAg ICByLmwKPiArLiAuIC0+ICAuIC4KPiArbC5yICAgICBSLkwKPiArQGVuZCBleGFtcGxlCj4gKwo+ ICtAaXRlbSA1LCBoZmxpcAo+ICtGbGlwIGhvcml6b250YWxseSwgdGhhdCBpczoKPiArQGV4YW1w bGUKPiArTC5SICAgICBSLkwKPiArLiAuIC0+ICAuIC4KPiArbC5yICAgICByLmwKPiArQGVuZCBl eGFtcGxlCj4gKwo+ICtAaXRlbSA2LCB2ZmxpcAo+ICtGbGlwIHZlcnRpY2FsbHksIHRoYXQgaXM6 Cj4gK0BleGFtcGxlCj4gK0wuUiAgICAgbC5yCj4gKy4gLiAtPiAgLiAuCj4gK2wuciAgICAgTC5S Cj4gK0BlbmQgZXhhbXBsZQo+ICtAZW5kIHRhYmxlCj4gKwo+ICtAaXRlbSBwYXNzdGhyb3VnaAo+ ICtEbyBub3QgYXBwbHkgdGhlIHRyYW5zcG9zaXRpb24gaWYgdGhlIGlucHV0IGdlb21ldHJ5IG1h dGNoZXMgdGhlIG9uZQo+ICtzcGVjaWZpZWQgYnkgdGhlIHNwZWNpZmllZCB2YWx1ZS4gSXQgYWNj ZXB0cyB0aGUgZm9sbG93aW5nIHZhbHVlczoKPiArQHRhYmxlIEBzYW1wCj4gK0BpdGVtIG5vbmUK PiArQWx3YXlzIGFwcGx5IHRyYW5zcG9zaXRpb24uIChkZWZhdWx0KQo+ICtAaXRlbSBwb3J0cmFp dAo+ICtQcmVzZXJ2ZSBwb3J0cmFpdCBnZW9tZXRyeSAod2hlbiBAdmFye2hlaWdodH0gPj0gQHZh cnt3aWR0aH0pLgo+ICtAaXRlbSBsYW5kc2NhcGUKPiArUHJlc2VydmUgbGFuZHNjYXBlIGdlb21l dHJ5ICh3aGVuIEB2YXJ7d2lkdGh9ID49IEB2YXJ7aGVpZ2h0fSkuCj4gK0BlbmQgdGFibGUKPiAr Cj4gK0BlbmQgdGFibGUKPiArCj4gK0BzdWJzZWN0aW9uIFVzYWdlIEV4YW1wbGVzCj4gKwo+ICtA aXRlbWl6ZQo+ICtAaXRlbQo+ICtSb3RhdGUgYSB2aWRlbyA5MCBkZWdyZWVzIGNsb2Nrd2lzZToK PiArQGV4YW1wbGUKPiArZmZtcGVnIC1od2FjY2VsIGN1ZGEgLWh3YWNjZWxfb3V0cHV0X2Zvcm1h dCBjdWRhIC1pIGlucHV0Lm1wNCAtdmYgInRyYW5zcG9zZV9jdWRhPWRpcj1jbG9jayIgb3V0cHV0 Lm1wNAo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BpdGVtCj4gK1JvdGF0ZSBhIHZpZGVvIDkwIGRl Z3JlZXMgY291bnRlcmNsb2Nrd2lzZToKPiArQGV4YW1wbGUKPiArZmZtcGVnIC1od2FjY2VsIGN1 ZGEgLWh3YWNjZWxfb3V0cHV0X2Zvcm1hdCBjdWRhIC1pIGlucHV0Lm1wNCAtdmYgInRyYW5zcG9z ZV9jdWRhPWRpcj1jY2xvY2siIG91dHB1dC5tcDQKPiArQGVuZCBleGFtcGxlCj4gKwo+ICtAaXRl bQo+ICtGbGlwIGEgdmlkZW8gaG9yaXpvbnRhbGx5Ogo+ICtAZXhhbXBsZQo+ICtmZm1wZWcgLWh3 YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9ybWF0IGN1ZGEgLWkgaW5wdXQubXA0IC12ZiAi dHJhbnNwb3NlX2N1ZGE9ZGlyPWhmbGlwIiBvdXRwdXQubXA0Cj4gK0BlbmQgZXhhbXBsZQo+ICsK PiArQGl0ZW0KPiArUm90YXRlIDE4MCBkZWdyZWVzOgo+ICtAZXhhbXBsZQo+ICtmZm1wZWcgLWh3 YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9ybWF0IGN1ZGEgLWkgaW5wdXQubXA0IC12ZiAi dHJhbnNwb3NlX2N1ZGE9ZGlyPXJldmVyc2FsIiBvdXRwdXQubXA0Cj4gK0BlbmQgZXhhbXBsZQo+ ICtAZW5kIGl0ZW1pemUKPiArCj4gICBAYW5jaG9ye0NVREEgTlBQfQo+ICAgQHNlY3Rpb24gQ1VE QSBOUFAKPiAgIEJlbG93IGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnRseSBhdmFpbGFi bGUgTlZJRElBIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMgKGxpYm5wcCkgdmlkZW8gZmlsdGVycy4K PiBkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9NYWtlZmls ZQo+IGluZGV4IDk3ZjhmMTcyNzIuLjczN2YzOTczMTUgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0 ZXIvTWFrZWZpbGUKPiArKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQo+IEBAIC01MzUsNiArNTM1 LDcgQEAgT0JKUy0kKENPTkZJR19UT05FTUFQX09QRU5DTF9GSUxURVIpICAgICAgICAgKz0gdmZf dG9uZW1hcF9vcGVuY2wubyBvcGVuY2wubyBcCj4gICBPQkpTLSQoQ09ORklHX1RPTkVNQVBfVkFB UElfRklMVEVSKSAgICAgICAgICArPSB2Zl90b25lbWFwX3ZhYXBpLm8gdmFhcGlfdnBwLm8KPiAg IE9CSlMtJChDT05GSUdfVFBBRF9GSUxURVIpICAgICAgICAgICAgICAgICAgICs9IHZmX3RwYWQu bwo+ICAgT0JKUy0kKENPTkZJR19UUkFOU1BPU0VfRklMVEVSKSAgICAgICAgICAgICAgKz0gdmZf dHJhbnNwb3NlLm8KPiArT0JKUy0kKENPTkZJR19UUkFOU1BPU0VfQ1VEQV9GSUxURVIpICAgICAg ICAgKz0gdmZfdHJhbnNwb3NlX2N1ZGEubyB2Zl90cmFuc3Bvc2VfY3VkYS5wdHgubyBjdWRhL2N1 ZGFfdnBwLm8gY3VkYS9sb2FkX2hlbHBlci5vCj4gICBPQkpTLSQoQ09ORklHX1RSQU5TUE9TRV9O UFBfRklMVEVSKSAgICAgICAgICArPSB2Zl90cmFuc3Bvc2VfbnBwLm8KPiAgIE9CSlMtJChDT05G SUdfVFJBTlNQT1NFX09QRU5DTF9GSUxURVIpICAgICAgICs9IHZmX3RyYW5zcG9zZV9vcGVuY2wu byBvcGVuY2wubyBvcGVuY2wvdHJhbnNwb3NlLm8KPiAgIE9CSlMtJChDT05GSUdfVFJBTlNQT1NF X1ZBQVBJX0ZJTFRFUikgICAgICAgICs9IHZmX3RyYW5zcG9zZV92YWFwaS5vIHZhYXBpX3ZwcC5v Cj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyBiL2xpYmF2ZmlsdGVyL2Fs bGZpbHRlcnMuYwo+IGluZGV4IDNiYzA0NWIyOGYuLjZkMGVmNWU2NTQgMTAwNjQ0Cj4gLS0tIGEv bGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCj4gKysrIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5j Cj4gQEAgLTUwMyw2ICs1MDMsNyBAQCBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfdG9uZW1h cF9vcGVuY2w7Cj4gICBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfdG9uZW1hcF92YWFwaTsK PiAgIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl90cGFkOwo+ICAgZXh0ZXJuIGNvbnN0IEZG RmlsdGVyIGZmX3ZmX3RyYW5zcG9zZTsKPiArZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3Ry YW5zcG9zZV9jdWRhOwo+ICAgZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3RyYW5zcG9zZV9u cHA7Cj4gICBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfdHJhbnNwb3NlX29wZW5jbDsKPiAg IGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl90cmFuc3Bvc2VfdmFhcGk7Cj4gZGlmZiAtLWdp dCBhL2xpYmF2ZmlsdGVyL2N1ZGEvY3VkYV92cHAuYyBiL2xpYmF2ZmlsdGVyL2N1ZGEvY3VkYV92 cHAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uYjhhOTM4MjBm OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZpbHRlci9jdWRhL2N1ZGFfdnBwLmMKPiBA QCAtMCwwICsxLDI0OCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIEZhZWV6IEth ZGlyaSA8IGYxazJmYWVleiBhdCBnbWFpbCBkb3QgY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4g Kwo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNz ZXJ0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgo+ICsKPiArI2luY2x1ZGUg ImxpYmF2ZmlsdGVyL2ZpbHRlcnMuaCIKPiArI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2Zvcm1hdHMu aCIKPiArI2luY2x1ZGUgImN1ZGFfdnBwLmgiCj4gKyNpbmNsdWRlICJsb2FkX2hlbHBlci5oIgo+ ICsKPiAraW50IGZmX2N1ZGFfdnBwX3F1ZXJ5X2Zvcm1hdHMoY29uc3QgQVZGaWx0ZXJDb250ZXh0 ICphdmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGaWx0ZXJGb3JtYXRz Q29uZmlnICoqY2ZnX2luLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZpbHRl ckZvcm1hdHNDb25maWcgKipjZmdfb3V0KQo+ICt7Cj4gKyAgICBzdGF0aWMgY29uc3QgZW51bSBB VlBpeGVsRm9ybWF0IHBpeF9mbXRzW10gPSB7Cj4gKyAgICAgICAgQVZfUElYX0ZNVF9DVURBLCBB Vl9QSVhfRk1UX05PTkUsCj4gKyAgICB9Owo+ICsgICAgaW50IGVycjsKPiArCj4gKyAgICBlcnIg PSBmZl9zZXRfY29tbW9uX2Zvcm1hdHNfZnJvbV9saXN0MihhdmN0eCwgY2ZnX2luLCBjZmdfb3V0 LCBwaXhfZm10cyk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICByZXR1cm4gZXJyOwo+ ICsKPiArICAgIHJldHVybiAwOwo+ICt9CgpUaGlzIHdob2xlIGZ1bmN0aW9uIGFwcGVhcnMgdG8g YmUganVzdCBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX0NVREEpCgo+ICtpbnQgZmZf Y3VkYV92cHBfY29uZmlnX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQo+ICt7Cj4gKyAgICBG aWx0ZXJMaW5rICAgICAgICAgICpsID0gZmZfZmlsdGVyX2xpbmsoaW5saW5rKTsKPiArICAgIEFW RmlsdGVyQ29udGV4dCAqYXZjdHggPSBpbmxpbmstPmRzdDsKPiArICAgIENVREFWUFBDb250ZXh0 ICpjdHggICAgPSBhdmN0eC0+cHJpdjsKPiArCj4gKyAgICBpZiAoY3R4LT5waXBlbGluZV91bmlu aXQpCj4gKyAgICAgICAgY3R4LT5waXBlbGluZV91bmluaXQoYXZjdHgpOwo+ICsKPiArICAgIGlm ICghbC0+aHdfZnJhbWVzX2N0eCkgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiQSBoYXJkd2FyZSBmcmFtZXMgcmVmZXJlbmNlIGlzICIKPiArICAgICAgICAgICAgICAg InJlcXVpcmVkIHRvIGFzc29jaWF0ZSB0aGUgcHJvY2Vzc2luZyBkZXZpY2UuXG4iKTsKPiArICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsKPiArICAgIGN0eC0+aW5w dXRfZnJhbWVzX3JlZiA9IGF2X2J1ZmZlcl9yZWYobC0+aHdfZnJhbWVzX2N0eCk7Cj4gKyAgICBp ZiAoIWN0eC0+aW5wdXRfZnJhbWVzX3JlZikgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiQSBpbnB1dCBmcmFtZXMgcmVmZXJlbmNlIGNyZWF0ZSAiCj4gKyAgICAgICAg ICAgICAgICJmYWlsZWQuXG4iKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ ICsgICAgfQo+ICsgICAgY3R4LT5pbnB1dF9mcmFtZXMgPSAoQVZIV0ZyYW1lc0NvbnRleHQqKWN0 eC0+aW5wdXRfZnJhbWVzX3JlZi0+ZGF0YTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsK PiAraW50IGZmX2N1ZGFfdnBwX2NvbmZpZ19vdXRwdXQoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQo+ ICt7Cj4gKyAgICBGaWx0ZXJMaW5rICAgICAgICpvdXRsID0gZmZfZmlsdGVyX2xpbmsob3V0bGlu ayk7Cj4gKyAgICBBVkZpbHRlckNvbnRleHQgKmF2Y3R4ID0gb3V0bGluay0+c3JjOwo+ICsgICAg QVZGaWx0ZXJMaW5rICAgKmlubGluayA9IGF2Y3R4LT5pbnB1dHNbMF07Cj4gKyAgICBGaWx0ZXJM aW5rICAgICAgICAqaW5sID0gZmZfZmlsdGVyX2xpbmsoaW5saW5rKTsKPiArICAgIENVREFWUFBD b250ZXh0ICpjdHggICAgPSBhdmN0eC0+cHJpdjsKPiArICAgIEFWSFdGcmFtZXNDb250ZXh0ICpp bnB1dF9mcmFtZXM7Cj4gKyAgICBBVkJ1ZmZlclJlZiAqaHdfZnJhbWVzX2N0eDsKPiArICAgIEFW SFdGcmFtZXNDb250ZXh0ICpvdXRwdXRfZnJhbWVzOwo+ICsgICAgZW51bSBBVlBpeGVsRm9ybWF0 IGluX2Zvcm1hdDsKPiArICAgIGludCBlcnI7Cj4gKwo+ICsgICAgaWYgKGN0eC0+cGlwZWxpbmVf dW5pbml0KQo+ICsgICAgICAgIGN0eC0+cGlwZWxpbmVfdW5pbml0KGF2Y3R4KTsKPiArCj4gKyAg ICBpZiAoIWN0eC0+b3V0cHV0X3dpZHRoKQo+ICsgICAgICAgIGN0eC0+b3V0cHV0X3dpZHRoICA9 IGF2Y3R4LT5pbnB1dHNbMF0tPnc7Cj4gKyAgICBpZiAoIWN0eC0+b3V0cHV0X2hlaWdodCkKPiAr ICAgICAgICBjdHgtPm91dHB1dF9oZWlnaHQgPSBhdmN0eC0+aW5wdXRzWzBdLT5oOwo+ICsKPiAr ICAgIG91dGxpbmstPncgPSBjdHgtPm91dHB1dF93aWR0aDsKPiArICAgIG91dGxpbmstPmggPSBj dHgtPm91dHB1dF9oZWlnaHQ7Cj4gKwo+ICsgICAgaWYgKGN0eC0+cGFzc3Rocm91Z2gpIHsKPiAr ICAgICAgICBpZiAoaW5sLT5od19mcmFtZXNfY3R4KQo+ICsgICAgICAgICAgICBvdXRsLT5od19m cmFtZXNfY3R4ID0gYXZfYnVmZmVyX3JlZihpbmwtPmh3X2ZyYW1lc19jdHgpOwo+ICsgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiVXNpbmcgQ1VEQSBmaWx0ZXIgcGFzc3Rocm91 Z2ggbW9kZS5cbiIpOwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiArICAgIGF2 X2Fzc2VydDAoY3R4LT5pbnB1dF9mcmFtZXMpOwo+ICsgICAgY3R4LT5kZXZpY2VfcmVmID0gYXZf YnVmZmVyX3JlZihjdHgtPmlucHV0X2ZyYW1lcy0+ZGV2aWNlX3JlZik7Cj4gKyAgICBpZiAoIWN0 eC0+ZGV2aWNlX3JlZikgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi QSBkZXZpY2UgcmVmZXJlbmNlIGNyZWF0ZSAiCj4gKyAgICAgICAgICAgICAgICJmYWlsZWQuXG4i KTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgfQo+ICsKPiArICAg IGlucHV0X2ZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCopY3R4LT5pbnB1dF9mcmFtZXNfcmVm LT5kYXRhOwo+ICsgICAgaW5fZm9ybWF0ID0gaW5wdXRfZnJhbWVzLT5zd19mb3JtYXQ7Cj4gKwo+ ICsgICAgY3R4LT5od2N0eCA9IGlucHV0X2ZyYW1lcy0+ZGV2aWNlX2N0eC0+aHdjdHg7Cj4gKyAg ICBjdHgtPmN1ZGFfZGwgPSBjdHgtPmh3Y3R4LT5pbnRlcm5hbC0+Y3VkYV9kbDsKPiArICAgIGN0 eC0+Y3Vfc3RyZWFtID0gY3R4LT5od2N0eC0+c3RyZWFtOwo+ICsKPiArICAgIGlmIChjdHgtPm91 dHB1dF9mb3JtYXQgPT0gQVZfUElYX0ZNVF9OT05FKQo+ICsgICAgICAgIGN0eC0+b3V0cHV0X2Zv cm1hdCA9IGlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0Owo+ICsKPiArICAgIC8vIFNldHVwIGZvcm1h dCBpbmZvcm1hdGlvbgo+ICsgICAgZXJyID0gZmZfY3VkYV92cHBfc2V0dXBfcGxhbmVzKGN0eCwg aW5fZm9ybWF0KTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4g Kwo+ICsgICAgLy8gTG9hZCBmaWx0ZXItc3BlY2lmaWMgZnVuY3Rpb25zCj4gKyAgICBpZiAoY3R4 LT5sb2FkX2Z1bmN0aW9ucykgewo+ICsgICAgICAgIGVyciA9IGN0eC0+bG9hZF9mdW5jdGlvbnMo YXZjdHgsIGluX2Zvcm1hdCk7Cj4gKyAgICAgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgICAg IHJldHVybiBlcnI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8gQnVpbGQgZmlsdGVyIHBhcmFtZXRl cnMKPiArICAgIGlmIChjdHgtPmJ1aWxkX2ZpbHRlcl9wYXJhbXMpIHsKPiArICAgICAgICBlcnIg PSBjdHgtPmJ1aWxkX2ZpbHRlcl9wYXJhbXMoYXZjdHgpOwo+ICsgICAgICAgIGlmIChlcnIgPCAw KQo+ICsgICAgICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgfQo+ICsKPiArICAgIC8vIEluaXRp YWxpemUgaGFyZHdhcmUgZnJhbWVzIGNvbnRleHQgZm9yIG91dHB1dAo+ICsgICAgaHdfZnJhbWVz X2N0eCA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9jKGN0eC0+ZGV2aWNlX3JlZik7Cj4gKyAgICBpZiAo IWh3X2ZyYW1lc19jdHgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4g KyAgICBvdXRwdXRfZnJhbWVzID0gKEFWSFdGcmFtZXNDb250ZXh0Kilod19mcmFtZXNfY3R4LT5k YXRhOwo+ICsgICAgb3V0cHV0X2ZyYW1lcy0+Zm9ybWF0ID0gQVZfUElYX0ZNVF9DVURBOwo+ICsg ICAgb3V0cHV0X2ZyYW1lcy0+c3dfZm9ybWF0ID0gY3R4LT5vdXRwdXRfZm9ybWF0Owo+ICsgICAg b3V0cHV0X2ZyYW1lcy0+d2lkdGggPSBjdHgtPm91dHB1dF93aWR0aDsKPiArICAgIG91dHB1dF9m cmFtZXMtPmhlaWdodCA9IGN0eC0+b3V0cHV0X2hlaWdodDsKPiArCj4gKyAgICBlcnIgPSBhdl9o d2ZyYW1lX2N0eF9pbml0KGh3X2ZyYW1lc19jdHgpOwo+ICsgICAgaWYgKGVyciA8IDApIHsKPiAr ICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmh3X2ZyYW1lc19jdHgpOwo+ICsgICAgICAgIHJldHVy biBlcnI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfYnVmZmVyX3VucmVmKCZvdXRsLT5od19mcmFt ZXNfY3R4KTsKPiArICAgIG91dGwtPmh3X2ZyYW1lc19jdHggPSBod19mcmFtZXNfY3R4Owo+ICsK PiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgZmZfY3VkYV92cHBfZm9ybWF0X2lzX3N1 cHBvcnRlZChlbnVtIEFWUGl4ZWxGb3JtYXQgZm10LCBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQg KnN1cHBvcnRlZF9mb3JtYXRzLCBpbnQgbmJfZm9ybWF0cykKPiArewo+ICsgICAgaW50IGk7Cj4g Kwo+ICsgICAgZm9yIChpID0gMDsgaSA8IG5iX2Zvcm1hdHM7IGkrKykKPiArICAgICAgICBpZiAo c3VwcG9ydGVkX2Zvcm1hdHNbaV0gPT0gZm10KQo+ICsgICAgICAgICAgICByZXR1cm4gMTsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgZmZfY3VkYV92cHBfc2V0dXBfcGxhbmVzKENV REFWUFBDb250ZXh0ICpzLCBlbnVtIEFWUGl4ZWxGb3JtYXQgZm9ybWF0KQo+ICt7Cj4gKyAgICBz LT5pbl9mbXQgPSBmb3JtYXQ7Cj4gKyAgICBzLT5pbl9kZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dl dChzLT5pbl9mbXQpOwo+ICsgICAgcy0+aW5fcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFu ZXMocy0+aW5fZm10KTsKPiArCj4gKyAgICAvLyBDbGVhciBwbGFuZSBpbmZvcm1hdGlvbgo+ICsg ICAgbWVtc2V0KHMtPmluX3BsYW5lX2RlcHRocywgMCwgc2l6ZW9mKHMtPmluX3BsYW5lX2RlcHRo cykpOwo+ICsgICAgbWVtc2V0KHMtPmluX3BsYW5lX2NoYW5uZWxzLCAwLCBzaXplb2Yocy0+aW5f cGxhbmVfY2hhbm5lbHMpKTsKClRoZSBjb250ZXh0IGlzIGFscmVhZHkgemVyby1pbml0aWFsaXpl ZCwgc28gdGhpcyBpcyBub3QgbmVjY2VzYXJ5LgoKPiArICAgIC8vIFNldCB1cCBwbGFuZSBpbmZv cm1hdGlvbgo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5pbl9kZXNjLT5uYl9jb21wb25l bnRzOyBpKyspIHsKPiArICAgICAgICBpbnQgZCA9IChzLT5pbl9kZXNjLT5jb21wW2ldLmRlcHRo ICsgNykgLyA4Owo+ICsgICAgICAgIGludCBwID0gcy0+aW5fZGVzYy0+Y29tcFtpXS5wbGFuZTsK PiArICAgICAgICBzLT5pbl9wbGFuZV9jaGFubmVsc1twXSA9IEZGTUFYKHMtPmluX3BsYW5lX2No YW5uZWxzW3BdLCBzLT5pbl9kZXNjLT5jb21wW2ldLnN0ZXAgLyBkKTsKPiArICAgICAgICBzLT5p bl9wbGFuZV9kZXB0aHNbcF0gPSBzLT5pbl9kZXNjLT5jb21wW2ldLmRlcHRoOwo+ICsgICAgfQo+ ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgZmZfY3VkYV92cHBfbG9hZF9tb2R1 bGUoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIENVREFWUFBDb250ZXh0ICpzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHhfZGF0YSwgdW5zaWduZWQg aW50IHB0eF9sZW4pCj4gK3sKPiArICAgIENVY29udGV4dCBkdW1teSwgY3VkYV9jdHggPSBzLT5o d2N0eC0+Y3VkYV9jdHg7Cj4gKyAgICBDdWRhRnVuY3Rpb25zICpjdSA9IHMtPmN1ZGFfZGw7Cj4g KyAgICBpbnQgcmV0Owo+ICsKPiArICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdUN0eFB1c2hDdXJy ZW50KGN1ZGFfY3R4KSk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0 Owo+ICsKPiArICAgIHJldCA9IGZmX2N1ZGFfbG9hZF9tb2R1bGUoY3R4LCBzLT5od2N0eCwgJnMt PmN1X21vZHVsZSwgcHR4X2RhdGEsIHB0eF9sZW4pOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAg ICAgICAgZ290byBmYWlsOwo+ICsKPiArZmFpbDoKPiArICAgIENIRUNLX0NVKGN1LT5jdUN0eFBv cEN1cnJlbnQoJmR1bW15KSk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9CgpUaGlzIHNlZW1zIGEg Yml0IHJlZHVuZGFudCB0byBtZS4gQWxsIGl0IGRvZXMgaXMgbW92ZSBwdXNoL3BvcCBvdXQgb2Yg CnNvbWV3aGVyZSBlbHNlLCB3aGljaCB3b3VsZCBwb3RlbnRpYWxseSBiZSBkb3VibGVkIHVwIGlm IHNvbWV0aGluZyBsb2FkcyAKbXVsdGlwbGUgbW9kdWxlcy4KCj4gK2ludCBmZl9jdWRhX3ZwcF9n ZXRfZnVuY3Rpb24oQVZGaWx0ZXJDb250ZXh0ICpjdHgsIENVREFWUFBDb250ZXh0ICpzLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VmdW5jdGlvbiAqZnVuYywgY29uc3QgY2hhciAq ZnVuY19uYW1lKQo+ICt7Cj4gKyAgICBDdWRhRnVuY3Rpb25zICpjdSA9IHMtPmN1ZGFfZGw7Cj4g KyAgICBpbnQgcmV0Owo+ICsKPiArICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdU1vZHVsZUdldEZ1 bmN0aW9uKGZ1bmMsIHMtPmN1X21vZHVsZSwgZnVuY19uYW1lKSk7Cj4gKyAgICBpZiAocmV0IDwg MCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19GQVRBTCwgIkZhaWxlZCB0byBsb2Fk IGZ1bmN0aW9uOiAlc1xuIiwgZnVuY19uYW1lKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9TWVMpOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9CgpUaGlzIGZ1bmN0aW9u IGlzIGFsc28gcmVkdW5kYW50LCBnaXZlbiBpdCBhZGRzIG5vdGhpbmcgb24gdG9wIG9mIGp1c3Qg CmN1TW9kdWxlR2V0RnVuY3Rpb24gaXRzZWxmLgoKPiArdm9pZCBmZl9jdWRhX3ZwcF9jdHhfaW5p dChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQo+ICt7Cj4gKyAgICBDVURBVlBQQ29udGV4dCAqY3R4 ID0gYXZjdHgtPnByaXY7Cj4gKwo+ICsgICAgY3R4LT5jdV9tb2R1bGUgPSBOVUxMOwo+ICsgICAg Y3R4LT5wYXNzdGhyb3VnaCA9IDA7Cj4gK30KCkV2ZXJ5IGNvbnRleHQgaXMgemVyby1pbml0aWFs aXplZCBhbnl3YXksIHNvIHRoaXMgaXMgdW5uZWNjZXNhcnkuCgo+ICt2b2lkIGZmX2N1ZGFfdnBw X2N0eF91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgQ1VEQVZQUENv bnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2Owo+ICsKPiArICAgIGlmIChjdHgtPnBpcGVsaW5lX3Vu aW5pdCkKPiArICAgICAgICBjdHgtPnBpcGVsaW5lX3VuaW5pdChhdmN0eCk7Cj4gKwo+ICsgICAg YXZfYnVmZmVyX3VucmVmKCZjdHgtPmlucHV0X2ZyYW1lc19yZWYpOwo+ICsgICAgYXZfYnVmZmVy X3VucmVmKCZjdHgtPmRldmljZV9yZWYpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVy L2N1ZGEvY3VkYV92cHAuaCBiL2xpYmF2ZmlsdGVyL2N1ZGEvY3VkYV92cHAuaAo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uMTI0MWQzNjE4MAo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9saWJhdmZpbHRlci9jdWRhL2N1ZGFfdnBwLmgKPiBAQCAtMCwwICsxLDExMyBA QAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIEZhZWV6IEthZGlyaSA8IGYxazJmYWVl eiBhdCBnbWFpbCBkb3QgY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4g KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNpZm5kZWYgQVZGSUxU RVJfQ1VEQV9WUFBfSAo+ICsjZGVmaW5lIEFWRklMVEVSX0NVREFfVlBQX0gKPiArCj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvaHdjb250ZXh0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250 ZXh0X2N1ZGFfaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9jdWRhX2NoZWNrLmgi Cj4gKyNpbmNsdWRlICJsaWJhdmZpbHRlci9hdmZpbHRlci5oIgo+ICsKPiArI2RlZmluZSBDSEVD S19DVSh4KSBGRl9DVURBX0NIRUNLX0RMKGN0eCwgcy0+aHdjdHgtPmludGVybmFsLT5jdWRhX2Rs LCB4KQo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgQ1VEQVZQUENvbnRleHQgewo+ICsgICAgY29uc3Qg QVZDbGFzcyAqY2xhc3M7Cj4gKwo+ICsgICAgQVZDVURBRGV2aWNlQ29udGV4dCAqaHdjdHg7Cj4g KyAgICBDdWRhRnVuY3Rpb25zICpjdWRhX2RsOwo+ICsgICAgQVZCdWZmZXJSZWYgKmRldmljZV9y ZWY7Cj4gKwo+ICsgICAgQ1Vjb250ZXh0ICAgY3VfY3R4Owo+ICsgICAgQ1Vtb2R1bGUgICAgY3Vf bW9kdWxlOwo+ICsgICAgQ1VzdHJlYW0gICAgY3Vfc3RyZWFtOwo+ICsKPiArICAgIEFWQnVmZmVy UmVmICAgICAgICppbnB1dF9mcmFtZXNfcmVmOwo+ICsgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmlu cHV0X2ZyYW1lczsKPiArCj4gKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgb3V0cHV0X2Zvcm1hdDsK PiArICAgIGludCBvdXRwdXRfd2lkdGg7ICAgLy8gY29tcHV0ZWQgd2lkdGgKPiArICAgIGludCBv dXRwdXRfaGVpZ2h0OyAgLy8gY29tcHV0ZWQgaGVpZ2h0Cj4gKwo+ICsgICAgaW50IHBhc3N0aHJv dWdoOwo+ICsKPiArICAgIC8vIEZvcm1hdCBpbmZvcm1hdGlvbgo+ICsgICAgZW51bSBBVlBpeGVs Rm9ybWF0IGluX2ZtdDsKPiArICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqaW5fZGVzYzsK PiArICAgIGludCBpbl9wbGFuZXM7Cj4gKyAgICBpbnQgaW5fcGxhbmVfZGVwdGhzWzRdOwo+ICsg ICAgaW50IGluX3BsYW5lX2NoYW5uZWxzWzRdOwo+ICsKPiArICAgIC8vIEZ1bmN0aW9uIHBvaW50 ZXJzIGZvciBmaWx0ZXItc3BlY2lmaWMgb3BlcmF0aW9ucwo+ICsgICAgaW50ICgqbG9hZF9mdW5j dGlvbnMpKEFWRmlsdGVyQ29udGV4dCAqYXZjdHgsIGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQp Owo+ICsgICAgaW50ICgqYnVpbGRfZmlsdGVyX3BhcmFtcykoQVZGaWx0ZXJDb250ZXh0ICphdmN0 eCk7Cj4gKyAgICB2b2lkICgqcGlwZWxpbmVfdW5pbml0KShBVkZpbHRlckNvbnRleHQgKmF2Y3R4 KTsKPiArfSBDVURBVlBQQ29udGV4dDsKCkknbSBub3QgZnVsbHkgY29udmluY2VkIHRoaXMgaXMg cmVhbGx5IG5lY2Nlc2FyeSwgZmlsdGVycyB0ZW5kIHRvIGFsbCBiZSAKZGlmZmVyZW50IGVub3Vn aCB0aGF0IHNvbWV0aGluZyBsaWtlIHRoaXMgd2lsbCBoYXZlIG1vcmUgYW5kIG1vcmUgc3R1ZmYg CmFkZGVkIHRvIGl0IG92ZXIgdGltZS4KCj4gKy8qKgo+ICsgKiBJbml0aWFsaXplIENVREEgVlBQ IGNvbnRleHQKPiArICovCj4gK3ZvaWQgZmZfY3VkYV92cHBfY3R4X2luaXQoQVZGaWx0ZXJDb250 ZXh0ICphdmN0eCk7Cj4gKwo+ICsvKioKPiArICogVW5pbml0aWFsaXplIENVREEgVlBQIGNvbnRl eHQKPiArICovCj4gK3ZvaWQgZmZfY3VkYV92cHBfY3R4X3VuaW5pdChBVkZpbHRlckNvbnRleHQg KmF2Y3R4KTsKPiArCj4gKy8qKgo+ICsgKiBRdWVyeSBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgQ1VE QSBWUFAKPiArICovCj4gK2ludCBmZl9jdWRhX3ZwcF9xdWVyeV9mb3JtYXRzKGNvbnN0IEFWRmls dGVyQ29udGV4dCAqYXZjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRmls dGVyRm9ybWF0c0NvbmZpZyAqKmNmZ19pbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQVZGaWx0ZXJGb3JtYXRzQ29uZmlnICoqY2ZnX291dCk7Cj4gKwo+ICsvKioKPiArICogQ29u ZmlndXJlIGlucHV0IGZvciBDVURBIFZQUAo+ICsgKi8KPiAraW50IGZmX2N1ZGFfdnBwX2NvbmZp Z19pbnB1dChBVkZpbHRlckxpbmsgKmlubGluayk7Cj4gKwo+ICsvKioKPiArICogQ29uZmlndXJl IG91dHB1dCBmb3IgQ1VEQSBWUFAKPiArICovCj4gK2ludCBmZl9jdWRhX3ZwcF9jb25maWdfb3V0 cHV0KEFWRmlsdGVyTGluayAqb3V0bGluayk7Cj4gKwo+ICsvKioKPiArICogQ2hlY2sgaWYgYSBw aXhlbCBmb3JtYXQgaXMgc3VwcG9ydGVkCj4gKyAqLwo+ICtpbnQgZmZfY3VkYV92cHBfZm9ybWF0 X2lzX3N1cHBvcnRlZChlbnVtIEFWUGl4ZWxGb3JtYXQgZm10LCBjb25zdCBlbnVtIEFWUGl4ZWxG b3JtYXQgKnN1cHBvcnRlZF9mb3JtYXRzLCBpbnQgbmJfZm9ybWF0cyk7Cj4gKwo+ICsvKioKPiAr ICogU2V0dXAgcGxhbmUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gZm9ybWF0Cj4gKyAqLwo+ICtp bnQgZmZfY3VkYV92cHBfc2V0dXBfcGxhbmVzKENVREFWUFBDb250ZXh0ICpzLCBlbnVtIEFWUGl4 ZWxGb3JtYXQgZm9ybWF0KTsKPiArCj4gKy8qKgo+ICsgKiBMb2FkIENVREEgbW9kdWxlIGZyb20g UFRYIGRhdGEKPiArICovCj4gK2ludCBmZl9jdWRhX3ZwcF9sb2FkX21vZHVsZShBVkZpbHRlckNv bnRleHQgKmN0eCwgQ1VEQVZQUENvbnRleHQgKnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHhfZGF0YSwgdW5zaWduZWQgaW50IHB0eF9sZW4p Owo+ICsKPiArLyoqCj4gKyAqIEdldCBDVURBIGZ1bmN0aW9uIGZyb20gbG9hZGVkIG1vZHVsZQo+ ICsgKi8KPiAraW50IGZmX2N1ZGFfdnBwX2dldF9mdW5jdGlvbihBVkZpbHRlckNvbnRleHQgKmN0 eCwgQ1VEQVZQUENvbnRleHQgKnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1Vm dW5jdGlvbiAqZnVuYywgY29uc3QgY2hhciAqZnVuY19uYW1lKTsKPiArCj4gKyNlbmRpZiAvKiBB VkZJTFRFUl9DVURBX1ZQUF9IICovCgpJdCdkIGJlIGJldHRlciBpZiB0aGlzIHdhcyBhZGRlZCBp biBpdHMgb3duIGNvbW1pdC4KCj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX3RyYW5zcG9z ZV9jdWRhLmMgYi9saWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfY3VkYS5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5iYjc5NTljZTBmCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2xpYmF2ZmlsdGVyL3ZmX3RyYW5zcG9zZV9jdWRhLmMKPiBAQCAtMCwwICsxLDQyMyBA QAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIEZhZWV6IEthZGlyaSA8IGYxazJmYWVl eiBhdCBnbWFpbCBkb3QgY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4g KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBAZmls ZQo+ICsgKiBIYXJkd2FyZSBhY2NlbGVyYXRlZCB0cmFuc3Bvc2UgZmlsdGVyIGJhc2VkIG9uIENV REEKPiArICovCj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL2NvbW1vbi5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKPiAr I2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9o d2NvbnRleHRfY3VkYV9pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2N1ZGFfY2hl Y2suaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL2F2YXNzZXJ0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW1ndXRpbHMuaCIKPiAr Cj4gKyNpbmNsdWRlICJmaWx0ZXJzLmgiCj4gKyNpbmNsdWRlICJmb3JtYXRzLmgiCj4gKyNpbmNs dWRlICJ2aWRlby5oIgo+ICsjaW5jbHVkZSAidHJhbnNwb3NlLmgiCj4gKyNpbmNsdWRlICJjdWRh L2N1ZGFfdnBwLmgiCj4gKwo+ICtzdGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IHN1cHBv cnRlZF9mb3JtYXRzW10gPSB7Cj4gKyAgICBBVl9QSVhfRk1UX1lVVjQyMFAsCj4gKyAgICBBVl9Q SVhfRk1UX05WMTIsCj4gKyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAsCj4gKyAgICBBVl9QSVhfRk1U X1AwMTAsCj4gKyAgICBBVl9QSVhfRk1UX1AwMTYsCj4gKyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAx NiwKPiArICAgIEFWX1BJWF9GTVRfMFJHQjMyLAo+ICsgICAgQVZfUElYX0ZNVF8wQkdSMzIsCj4g KyAgICBBVl9QSVhfRk1UX1JHQjMyLAo+ICsgICAgQVZfUElYX0ZNVF9CR1IzMiwKPiArfTsKPiAr Cj4gKyNkZWZpbmUgRElWX1VQKGEsIGIpICggKChhKSArIChiKSAtIDEpIC8gKGIpICkKPiArI2Rl ZmluZSBCTE9DS1ggMzIKPiArI2RlZmluZSBCTE9DS1kgMTYKPiArCj4gK3R5cGVkZWYgc3RydWN0 IFRyYW5zcG9zZUNVREFDb250ZXh0IHsKPiArICAgIENVREFWUFBDb250ZXh0IHZwcF9jdHg7IC8v IG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkCj4gKwo+ICsgICAgaW50IHBhc3N0aHJvdWdoOyAgICAg ICAgIC8vIFBhc3N0aHJvdWdoVHlwZSwgbGFuZHNjYXBlIHBhc3N0aHJvdWdoIG1vZGUgZW5hYmxl ZAoKSSdkIHByZWZlciBpZiB0aGlzIHdhcyBuYW1lZCBtb3JlIGV4cGxpY2l0bHksIGxpa2UgcGFz c3Rocm91Z2hfbW9kZS4KVG8gcHJldmVudCBjb25mdXNpb24gd2l0aCB0aGUgcGFzc3Rocm91Z2gg cGFyYW1ldGVyIGluIHRoZSBWUFBDb250ZXh0LgoKPiArICAgIGludCBkaXI7ICAgICAgICAgICAg ICAgICAvLyBUcmFuc3Bvc2VEaXIKPiArCj4gKyAgICAvLyBDVURBIGZ1bmN0aW9ucyBmb3IgZGlm ZmVyZW50IG9wZXJhdGlvbnMKPiArICAgIENVZnVuY3Rpb24gY3VfZnVuY190cmFuc3Bvc2U7Cj4g KyAgICBDVWZ1bmN0aW9uIGN1X2Z1bmNfdHJhbnNwb3NlX3V2Owo+ICt9IFRyYW5zcG9zZUNVREFD b250ZXh0Owo+ICsKPiArc3RhdGljIGludCBmb3JtYXRfaXNfc3VwcG9ydGVkKGVudW0gQVZQaXhl bEZvcm1hdCBmbXQpCj4gK3sKPiArICAgIGludCBpOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkg PCBGRl9BUlJBWV9FTEVNUyhzdXBwb3J0ZWRfZm9ybWF0cyk7IGkrKykKPiArICAgICAgICBpZiAo c3VwcG9ydGVkX2Zvcm1hdHNbaV0gPT0gZm10KQo+ICsgICAgICAgICAgICByZXR1cm4gMTsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdHJhbnNwb3NlX2N1 ZGFfbG9hZF9mdW5jdGlvbnMoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCwgZW51bSBBVlBpeGVsRm9y bWF0IGZvcm1hdCkKPiArewo+ICsgICAgVHJhbnNwb3NlQ1VEQUNvbnRleHQgKmN0eCA9IGF2Y3R4 LT5wcml2Owo+ICsgICAgQ1VEQVZQUENvbnRleHQgKnZwcF9jdHggPSAmY3R4LT52cHBfY3R4Owo+ ICsgICAgaW50IHJldDsKPiArICAgIGNoYXIgYnVmWzEyOF07Cj4gKwo+ICsgICAgY29uc3QgY2hh ciAqZm10X25hbWUgPSBhdl9nZXRfcGl4X2ZtdF9uYW1lKGZvcm1hdCk7Cj4gKwo+ICsgICAgZXh0 ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmZfdmZfdHJhbnNwb3NlX2N1ZGFfcHR4X2RhdGFbXTsK PiArICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgZmZfdmZfdHJhbnNwb3NlX2N1ZGFfcHR4 X2xlbjsKPiArCj4gKyAgICByZXQgPSBmZl9jdWRhX3ZwcF9sb2FkX21vZHVsZShhdmN0eCwgdnBw X2N0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZmX3ZmX3RyYW5zcG9z ZV9jdWRhX3B0eF9kYXRhLCBmZl92Zl90cmFuc3Bvc2VfY3VkYV9wdHhfbGVuKTsKPiArICAgIGlm IChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgLy8gTG9hZCB0cmFu c3Bvc2UgZnVuY3Rpb25zCj4gKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiVHJhbnNw b3NlXyVzIiwgZm10X25hbWUpOwo+ICsgICAgcmV0ID0gZmZfY3VkYV92cHBfZ2V0X2Z1bmN0aW9u KGF2Y3R4LCB2cHBfY3R4LCAmY3R4LT5jdV9mdW5jX3RyYW5zcG9zZSwgYnVmKTsKPiArICAgIGlm IChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRkFUQUwsICJVbnN1 cHBvcnRlZCBmb3JtYXQgZm9yIHRyYW5zcG9zZTogJXNcbiIsIGZtdF9uYW1lKTsKPiArICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOwo+ICsgICAgfQo+ICsKPiArICAgIHNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICJUcmFuc3Bvc2VfJXNfdXYiLCBmbXRfbmFtZSk7Cj4gKyAgICByZXQg PSBmZl9jdWRhX3ZwcF9nZXRfZnVuY3Rpb24oYXZjdHgsIHZwcF9jdHgsICZjdHgtPmN1X2Z1bmNf dHJhbnNwb3NlX3V2LCBidWYpOwo+ICsgICAgaWYgKHJldCA8IDAgJiYgdnBwX2N0eC0+aW5fcGxh bmVzID4gMSkgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJVViBm dW5jdGlvbiBub3QgZm91bmQgZm9yIGZvcm1hdDogJXNcbiIsIGZtdF9uYW1lKTsKPiArICAgIH0K PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0cmFuc3Bvc2VfY3Vk YV9idWlsZF9maWx0ZXJfcGFyYW1zKEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAg IFRyYW5zcG9zZUNVREFDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdjsKPiArICAgIENVREFWUFBD b250ZXh0ICp2cHBfY3R4ID0gJmN0eC0+dnBwX2N0eDsKPiArCj4gKyAgICBpZiAoIWZvcm1hdF9p c19zdXBwb3J0ZWQodnBwX2N0eC0+aW5fZm10KSkgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgaW5wdXQgZm9ybWF0OiAlc1xuIiwKPiArICAgICAg ICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZSh2cHBfY3R4LT5pbl9mbXQpKTsKPiArICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdHJhbnNwb3NlX2N1ZGFfa2VybmVsKEFWRmls dGVyQ29udGV4dCAqYXZjdHgsIENVZnVuY3Rpb24gZnVuYywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENVdGV4T2JqZWN0IHNyY190ZXhbNF0sCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpvdXRfZnJhbWUsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWln aHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0X3dp ZHRoLCBpbnQgZHN0X2hlaWdodCwgaW50IGRzdF9waXRjaCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfd2lkdGgsIGludCBzcmNfaGVpZ2h0LCBpbnQg ZGlyKQo+ICt7Cj4gKyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXY7 Cj4gKyAgICBDVURBVlBQQ29udGV4dCAqcyA9ICZjdHgtPnZwcF9jdHg7Cj4gKyAgICBDdWRhRnVu Y3Rpb25zICpjdSA9IHMtPmN1ZGFfZGw7Cj4gKwo+ICsgICAgQ1VkZXZpY2VwdHIgZHN0X2RldnB0 cls0XSA9IHsKPiArICAgICAgICAoQ1VkZXZpY2VwdHIpb3V0X2ZyYW1lLT5kYXRhWzBdLCAoQ1Vk ZXZpY2VwdHIpb3V0X2ZyYW1lLT5kYXRhWzFdLAo+ICsgICAgICAgIChDVWRldmljZXB0cilvdXRf ZnJhbWUtPmRhdGFbMl0sIChDVWRldmljZXB0cilvdXRfZnJhbWUtPmRhdGFbM10KPiArICAgIH07 Cj4gKwo+ICsgICAgdm9pZCAqYXJnc1tdID0gewo+ICsgICAgICAgICZzcmNfdGV4WzBdLCAmc3Jj X3RleFsxXSwgJnNyY190ZXhbMl0sICZzcmNfdGV4WzNdLAo+ICsgICAgICAgICZkc3RfZGV2cHRy WzBdLCAmZHN0X2RldnB0clsxXSwgJmRzdF9kZXZwdHJbMl0sICZkc3RfZGV2cHRyWzNdLAo+ICsg ICAgICAgICZ3aWR0aCwgJmhlaWdodCwgJmRzdF9waXRjaCwKPiArICAgICAgICAmZHN0X3dpZHRo LCAmZHN0X2hlaWdodCwKPiArICAgICAgICAmc3JjX3dpZHRoLCAmc3JjX2hlaWdodCwKPiArICAg ICAgICAmZGlyCj4gKyAgICB9Owo+ICsKPiArICAgIHJldHVybiBDSEVDS19DVShjdS0+Y3VMYXVu Y2hLZXJuZWwoZnVuYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJ Vl9VUCh3aWR0aCwgQkxPQ0tYKSwgRElWX1VQKGhlaWdodCwgQkxPQ0tZKSwgMSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLWCwgQkxPQ0tZLCAxLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcy0+Y3Vfc3RyZWFtLCBhcmdzLCBO VUxMKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHJhbnNwb3NlX2N1ZGFfZmlsdGVyX2ZyYW1l KEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICppbnB1dF9mcmFtZSkKPiArewo+ICsgICAg QVZGaWx0ZXJDb250ZXh0ICphdmN0eCAgICAgPSBpbmxpbmstPmRzdDsKPiArICAgIEFWRmlsdGVy TGluayAqb3V0bGluayAgICAgID0gYXZjdHgtPm91dHB1dHNbMF07Cj4gKyAgICBUcmFuc3Bvc2VD VURBQ29udGV4dCAqY3R4ICA9IGF2Y3R4LT5wcml2Owo+ICsgICAgQ1VEQVZQUENvbnRleHQgKnMg ICAgICAgICAgPSAmY3R4LT52cHBfY3R4Owo+ICsgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgICAgICAg ICAgPSBzLT5jdWRhX2RsOwo+ICsgICAgQVZGcmFtZSAqb3V0cHV0X2ZyYW1lICAgICAgPSBOVUxM Owo+ICsgICAgQ1V0ZXhPYmplY3QgdGV4WzRdID0geyAwLCAwLCAwLCAwIH07Cj4gKyAgICBpbnQg cmV0ID0gMDsKPiArICAgIGludCBpOwo+ICsgICAgQ1Vjb250ZXh0IGR1bW15Owo+ICsKPiArICAg IGlmIChjdHgtPnBhc3N0aHJvdWdoKQo+ICsgICAgICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUo b3V0bGluaywgaW5wdXRfZnJhbWUpOwo+ICsKPiArICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiRmlsdGVyIGlucHV0OiAlcywgJXV4JXUgKCUiUFJJZDY0IikuXG4iLAo+ICsgICAgICAg ICAgIGF2X2dldF9waXhfZm10X25hbWUoaW5wdXRfZnJhbWUtPmZvcm1hdCksCj4gKyAgICAgICAg ICAgaW5wdXRfZnJhbWUtPndpZHRoLCBpbnB1dF9mcmFtZS0+aGVpZ2h0LCBpbnB1dF9mcmFtZS0+ cHRzKTsKPiArCj4gKyAgICAvLyBQdXNoIENVREEgY29udGV4dAo+ICsgICAgcmV0ID0gQ0hFQ0tf Q1UoY3UtPmN1Q3R4UHVzaEN1cnJlbnQocy0+aHdjdHgtPmN1ZGFfY3R4KSk7Cj4gKyAgICBpZiAo cmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIG91dHB1dF9mcmFtZSA9 IGZmX2dldF92aWRlb19idWZmZXIob3V0bGluaywgcy0+b3V0cHV0X3dpZHRoLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5vdXRwdXRfaGVpZ2h0KTsKPiArICAg IGlmICghb3V0cHV0X2ZyYW1lKSB7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSBhdl9mcmFtZV9j b3B5X3Byb3BzKG91dHB1dF9mcmFtZSwgaW5wdXRfZnJhbWUpOwo+ICsgICAgaWYgKHJldCA8IDAp Cj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsKPiArICAgIC8vIENyZWF0ZSB0ZXh0dXJlIG9iamVj dHMgZm9yIGlucHV0Cj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+aW5fcGxhbmVzOyBpKyspIHsK PiArICAgICAgICBDVURBX1RFWFRVUkVfREVTQyB0ZXhfZGVzYyA9IHsKPiArICAgICAgICAgICAg LmZpbHRlck1vZGUgPSBDVV9UUl9GSUxURVJfTU9ERV9QT0lOVCwKPiArICAgICAgICAgICAgLmZs YWdzID0gQ1VfVFJTRl9SRUFEX0FTX0lOVEVHRVIsCj4gKyAgICAgICAgfTsKPiArCj4gKyAgICAg ICAgQ1VEQV9SRVNPVVJDRV9ERVNDIHJlc19kZXNjID0gewo+ICsgICAgICAgICAgICAucmVzVHlw ZSA9IENVX1JFU09VUkNFX1RZUEVfUElUQ0gyRCwKPiArICAgICAgICAgICAgLnJlcy5waXRjaDJE LmZvcm1hdCA9IHMtPmluX3BsYW5lX2RlcHRoc1tpXSA8PSA4ID8KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENVX0FEX0ZPUk1BVF9VTlNJR05FRF9JTlQ4IDoKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVX0FEX0ZPUk1BVF9VTlNJR05FRF9JTlQxNiwK PiArICAgICAgICAgICAgLnJlcy5waXRjaDJELm51bUNoYW5uZWxzID0gcy0+aW5fcGxhbmVfY2hh bm5lbHNbaV0sCj4gKyAgICAgICAgICAgIC5yZXMucGl0Y2gyRC5waXRjaEluQnl0ZXMgPSBpbnB1 dF9mcmFtZS0+bGluZXNpemVbaV0sCj4gKyAgICAgICAgICAgIC5yZXMucGl0Y2gyRC5kZXZQdHIg PSAoQ1VkZXZpY2VwdHIpaW5wdXRfZnJhbWUtPmRhdGFbaV0sCj4gKyAgICAgICAgfTsKPiArCj4g KyAgICAgICAgaWYgKGkgPT0gMSB8fCBpID09IDIpIHsKPiArICAgICAgICAgICAgcmVzX2Rlc2Mu cmVzLnBpdGNoMkQud2lkdGggPSBBVl9DRUlMX1JTSElGVChpbnB1dF9mcmFtZS0+d2lkdGgsIHMt PmluX2Rlc2MtPmxvZzJfY2hyb21hX3cpOwo+ICsgICAgICAgICAgICByZXNfZGVzYy5yZXMucGl0 Y2gyRC5oZWlnaHQgPSBBVl9DRUlMX1JTSElGVChpbnB1dF9mcmFtZS0+aGVpZ2h0LCBzLT5pbl9k ZXNjLT5sb2cyX2Nocm9tYV9oKTsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBy ZXNfZGVzYy5yZXMucGl0Y2gyRC53aWR0aCA9IGlucHV0X2ZyYW1lLT53aWR0aDsKPiArICAgICAg ICAgICAgcmVzX2Rlc2MucmVzLnBpdGNoMkQuaGVpZ2h0ID0gaW5wdXRfZnJhbWUtPmhlaWdodDsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdVRleE9iamVj dENyZWF0ZSgmdGV4W2ldLCAmcmVzX2Rlc2MsICZ0ZXhfZGVzYywgTlVMTCkpOwoKVGhpcyBpcyB1 bnJlbGF0ZWQgdG8gdGhpcyBmaWx0ZXIgYW5kIHJldmlldywgYnV0IEkgZG8gd29uZGVyIGlmIHRo ZXNlIAp0ZXh0dXJlIG9iamVjdHMgY291bGRuJ3QgYmUgY2FjaGVkIGluIHRoZSBmcmFtZSBzb21l aG93LgpOb3Qgc3VyZSBob3cgaGlnaCB0aGUgb3ZlcmhlYWQgb2YgY29uc3RhbnRseSBjcmVhdGlu ZyBhbmQgZGVzdHJveWluZyAKdGhlc2UsIGJ1dCBpdCBjYW4ndCBiZSBmdWxseSBmcmVlLgoKPiAr ICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ ICsKPiArICAgIC8vIFByb2Nlc3MgbHVtYSBwbGFuZQo+ICsgICAgcmV0ID0gdHJhbnNwb3NlX2N1 ZGFfa2VybmVsKGF2Y3R4LCBjdHgtPmN1X2Z1bmNfdHJhbnNwb3NlLCB0ZXgsIG91dHB1dF9mcmFt ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mcmFtZS0+d2lkdGgs IG91dHB1dF9mcmFtZS0+aGVpZ2h0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3V0cHV0X2ZyYW1lLT53aWR0aCwgb3V0cHV0X2ZyYW1lLT5oZWlnaHQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZnJhbWUtPmxpbmVzaXplWzBdLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZnJhbWUtPndpZHRoLCBpbnB1dF9mcmFtZS0+ aGVpZ2h0LCBjdHgtPmRpcik7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3IgZHVyaW5nIGx1bWEgdHJhbnNwb3NlOiAlZFxu IiwgcmV0KTsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8gUHJv Y2VzcyBjaHJvbWEgcGxhbmVzIGlmIHByZXNlbnQKPiArICAgIGlmIChzLT5pbl9wbGFuZXMgPiAx KSB7Cj4gKyAgICAgICAgcmV0ID0gdHJhbnNwb3NlX2N1ZGFfa2VybmVsKGF2Y3R4LCBjdHgtPmN1 X2Z1bmNfdHJhbnNwb3NlX3V2LCB0ZXgsIG91dHB1dF9mcmFtZSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVl9DRUlMX1JTSElGVChvdXRwdXRfZnJhbWUtPndpZHRoLCBz LT5pbl9kZXNjLT5sb2cyX2Nocm9tYV93KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBVl9DRUlMX1JTSElGVChvdXRwdXRfZnJhbWUtPmhlaWdodCwgcy0+aW5fZGVzYy0+ bG9nMl9jaHJvbWFfaCksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0 cHV0X2ZyYW1lLT53aWR0aCwgb3V0cHV0X2ZyYW1lLT5oZWlnaHQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2ZyYW1lLT5saW5lc2l6ZVsxXSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9DRUlMX1JTSElGVChpbnB1dF9mcmFtZS0+ d2lkdGgsIHMtPmluX2Rlc2MtPmxvZzJfY2hyb21hX3cpLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWX0NFSUxfUlNISUZUKGlucHV0X2ZyYW1lLT5oZWlnaHQsIHMtPmlu X2Rlc2MtPmxvZzJfY2hyb21hX2gpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGN0eC0+ZGlyKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIGR1cmluZyBjaHJvbWEgdHJhbnNwb3Nl OiAlZFxuIiwgcmV0KTsKPiArICAgICAgICAgICAgZ290byBmYWlsOwo+ICsgICAgICAgIH0KPiAr ICAgIH0KPiArCj4gKyAgICAvLyBIYW5kbGUgc2FtcGxlIGFzcGVjdCByYXRpbwo+ICsgICAgaWYg KGlucHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bSA9PSAwKSB7Cj4gKyAgICAgICAg b3V0cHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gaW5wdXRfZnJhbWUtPnNhbXBsZV9h c3BlY3RfcmF0aW87Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIG91dHB1dF9mcmFtZS0+c2Ft cGxlX2FzcGVjdF9yYXRpby5udW0gPSBpbnB1dF9mcmFtZS0+c2FtcGxlX2FzcGVjdF9yYXRpby5k ZW47Cj4gKyAgICAgICAgb3V0cHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvLmRlbiA9IGlu cHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bTsKPiArICAgIH0KPiArCj4gKyAgICBh dl9mcmFtZV9mcmVlKCZpbnB1dF9mcmFtZSk7Cj4gKwo+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfREVCVUcsICJGaWx0ZXIgb3V0cHV0OiAlcywgJXV4JXUgKCUiUFJJZDY0IikuXG4iLAo+ICsg ICAgICAgICAgIGF2X2dldF9waXhfZm10X25hbWUob3V0cHV0X2ZyYW1lLT5mb3JtYXQpLAo+ICsg ICAgICAgICAgIG91dHB1dF9mcmFtZS0+d2lkdGgsIG91dHB1dF9mcmFtZS0+aGVpZ2h0LCBvdXRw dXRfZnJhbWUtPnB0cyk7Cj4gKwo+ICsgICAgLy8gQ2xlYW51cCB0ZXh0dXJlIG9iamVjdHMKPiAr ICAgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyh0ZXgpOyBpKyspCj4gKyAgICAgICAg aWYgKHRleFtpXSkKPiArICAgICAgICAgICAgQ0hFQ0tfQ1UoY3UtPmN1VGV4T2JqZWN0RGVzdHJv eSh0ZXhbaV0pKTsKPiArCj4gKyAgICBDSEVDS19DVShjdS0+Y3VDdHhQb3BDdXJyZW50KCZkdW1t eSkpOwo+ICsgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBvdXRwdXRfZnJhbWUp Owo+ICsKPiArZmFpbDoKPiArICAgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyh0ZXgp OyBpKyspCj4gKyAgICAgICAgaWYgKHRleFtpXSkKPiArICAgICAgICAgICAgQ0hFQ0tfQ1UoY3Ut PmN1VGV4T2JqZWN0RGVzdHJveSh0ZXhbaV0pKTsKPiArCj4gKyAgICBhdl9mcmFtZV9mcmVlKCZp bnB1dF9mcmFtZSk7Cj4gKyAgICBhdl9mcmFtZV9mcmVlKCZvdXRwdXRfZnJhbWUpOwo+ICsgICAg Q0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXkpKTsKPiArICAgIHJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRyYW5zcG9zZV9jdWRhX3VuaW5pdChBVkZpbHRlckNv bnRleHQgKmF2Y3R4KQo+ICt7Cj4gKyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ICA9IGF2 Y3R4LT5wcml2Owo+ICsgICAgQ1VEQVZQUENvbnRleHQgKnMgICAgICAgICAgPSAmY3R4LT52cHBf Y3R4Owo+ICsKPiArICAgIGlmIChzLT5jdV9tb2R1bGUpIHsKPiArICAgICAgICBDdWRhRnVuY3Rp b25zICpjdSA9IHMtPmN1ZGFfZGw7Cj4gKyAgICAgICAgQ1Vjb250ZXh0IGR1bW15Owo+ICsKPiAr ICAgICAgICBpZiAocy0+aHdjdHgpIHsKPiArICAgICAgICAgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4 UHVzaEN1cnJlbnQocy0+aHdjdHgtPmN1ZGFfY3R4KSk7Cj4gKyAgICAgICAgICAgIENIRUNLX0NV KGN1LT5jdU1vZHVsZVVubG9hZChzLT5jdV9tb2R1bGUpKTsKPiArICAgICAgICAgICAgcy0+Y3Vf bW9kdWxlID0gTlVMTDsKPiArICAgICAgICAgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVu dCgmZHVtbXkpKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfYnVmZmVyX3Vu cmVmKCZzLT5kZXZpY2VfcmVmKTsKPiArICAgIHMtPmh3Y3R4ID0gTlVMTDsKPiArfQo+ICsKPiAr c3RhdGljIGF2X2NvbGQgaW50IHRyYW5zcG9zZV9jdWRhX2luaXQoQVZGaWx0ZXJDb250ZXh0ICph dmN0eCkKPiArewo+ICsgICAgVHJhbnNwb3NlQ1VEQUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2 Owo+ICsgICAgQ1VEQVZQUENvbnRleHQgKnZwcF9jdHggPSAmY3R4LT52cHBfY3R4Owo+ICsKPiAr ICAgIGZmX2N1ZGFfdnBwX2N0eF9pbml0KGF2Y3R4KTsKPiArICAgIHZwcF9jdHgtPmxvYWRfZnVu Y3Rpb25zID0gdHJhbnNwb3NlX2N1ZGFfbG9hZF9mdW5jdGlvbnM7Cj4gKyAgICB2cHBfY3R4LT5i dWlsZF9maWx0ZXJfcGFyYW1zID0gdHJhbnNwb3NlX2N1ZGFfYnVpbGRfZmlsdGVyX3BhcmFtczsK PiArICAgIHZwcF9jdHgtPnBpcGVsaW5lX3VuaW5pdCA9IHRyYW5zcG9zZV9jdWRhX3VuaW5pdDsK PiArICAgIHZwcF9jdHgtPm91dHB1dF9mb3JtYXQgPSBBVl9QSVhfRk1UX05PTkU7Cj4gKwo+ICsg ICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHJhbnNwb3NlX2N1ZGFfY29uZmln X291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCj4gK3sKPiArICAgIEFWRmlsdGVyQ29udGV4 dCAqYXZjdHggICAgID0gb3V0bGluay0+c3JjOwo+ICsgICAgVHJhbnNwb3NlQ1VEQUNvbnRleHQg KmN0eCAgPSBhdmN0eC0+cHJpdjsKPiArICAgIENVREFWUFBDb250ZXh0ICp2cHBfY3R4ICAgID0g JmN0eC0+dnBwX2N0eDsKPiArICAgIEFWRmlsdGVyTGluayAqaW5saW5rICAgICAgID0gYXZjdHgt PmlucHV0c1swXTsKPiArCj4gKyAgICBpZiAoKGlubGluay0+dyA+PSBpbmxpbmstPmggJiYgY3R4 LT5wYXNzdGhyb3VnaCA9PSBUUkFOU1BPU0VfUFRfVFlQRV9MQU5EU0NBUEUpIHx8Cj4gKyAgICAg ICAgKGlubGluay0+dyA8PSBpbmxpbmstPmggJiYgY3R4LT5wYXNzdGhyb3VnaCA9PSBUUkFOU1BP U0VfUFRfVFlQRV9QT1JUUkFJVCkpIHsKPiArICAgICAgICB2cHBfY3R4LT5wYXNzdGhyb3VnaCA9 IDE7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwKPiArICAgICAgICAg ICAgICAgInc6JWQgaDolZCAtPiB3OiVkIGg6JWQgKHBhc3N0aHJvdWdoIG1vZGUpXG4iLAo+ICsg ICAgICAgICAgICAgICBpbmxpbmstPncsIGlubGluay0+aCwgaW5saW5rLT53LCBpbmxpbmstPmgp Owo+ICsgICAgICAgIHJldHVybiBmZl9jdWRhX3ZwcF9jb25maWdfb3V0cHV0KG91dGxpbmspOwo+ ICsgICAgfQo+ICsgICAgY3R4LT5wYXNzdGhyb3VnaCA9IFRSQU5TUE9TRV9QVF9UWVBFX05PTkU7 Cj4gKwo+ICsgICAgLy8gRm9yIHRyYW5zcG9zZSBvcGVyYXRpb25zIHRoYXQgc3dhcCBkaW1lbnNp b25zCj4gKyAgICBzd2l0Y2ggKGN0eC0+ZGlyKSB7Cj4gKyAgICBjYXNlIFRSQU5TUE9TRV9DQ0xP Q0tfRkxJUDoKPiArICAgIGNhc2UgVFJBTlNQT1NFX0NDTE9DSzoKPiArICAgIGNhc2UgVFJBTlNQ T1NFX0NMT0NLOgo+ICsgICAgY2FzZSBUUkFOU1BPU0VfQ0xPQ0tfRkxJUDoKPiArICAgICAgICB2 cHBfY3R4LT5vdXRwdXRfd2lkdGggID0gYXZjdHgtPmlucHV0c1swXS0+aDsKPiArICAgICAgICB2 cHBfY3R4LT5vdXRwdXRfaGVpZ2h0ID0gYXZjdHgtPmlucHV0c1swXS0+dzsKPiArICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgInN3YXAgd2lkdGggYW5kIGhlaWdodCBmb3IgY2xv Y2svY2Nsb2NrIHJvdGF0aW9uXG4iKTsKPiArICAgICAgICBicmVhazsKPiArICAgIGRlZmF1bHQ6 Cj4gKyAgICAgICAgdnBwX2N0eC0+b3V0cHV0X3dpZHRoICA9IGF2Y3R4LT5pbnB1dHNbMF0tPnc7 Cj4gKyAgICAgICAgdnBwX2N0eC0+b3V0cHV0X2hlaWdodCA9IGF2Y3R4LT5pbnB1dHNbMF0tPmg7 Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfVkVSQk9TRSwKPiArICAgICAgICAgICAidzolZCBoOiVkIGRpcjolZCAtPiB3OiVkIGg6JWQg cm90YXRpb246JXMgdmZsaXA6JWRcbiIsCj4gKyAgICAgICAgICAgaW5saW5rLT53LCBpbmxpbmst PmgsIGN0eC0+ZGlyLCB2cHBfY3R4LT5vdXRwdXRfd2lkdGgsIHZwcF9jdHgtPm91dHB1dF9oZWln aHQsCj4gKyAgICAgICAgICAgY3R4LT5kaXIgPT0gMSB8fCBjdHgtPmRpciA9PSAzID8gImNsb2Nr d2lzZSIgOiAiY291bnRlcmNsb2Nrd2lzZSIsCj4gKyAgICAgICAgICAgY3R4LT5kaXIgPT0gMCB8 fCBjdHgtPmRpciA9PSAzKTsKPiArCj4gKyAgICByZXR1cm4gZmZfY3VkYV92cHBfY29uZmlnX291 dHB1dChvdXRsaW5rKTsKPiArfQo+ICsKPiArc3RhdGljIEFWRnJhbWUgKmdldF92aWRlb19idWZm ZXIoQVZGaWx0ZXJMaW5rICppbmxpbmssIGludCB3LCBpbnQgaCkKPiArewo+ICsgICAgVHJhbnNw b3NlQ1VEQUNvbnRleHQgKmN0eCA9IGlubGluay0+ZHN0LT5wcml2Owo+ICsKPiArICAgIHJldHVy biBjdHgtPnBhc3N0aHJvdWdoID8KPiArICAgICAgICBmZl9udWxsX2dldF92aWRlb19idWZmZXIo aW5saW5rLCB3LCBoKSA6Cj4gKyAgICAgICAgZmZfZGVmYXVsdF9nZXRfdmlkZW9fYnVmZmVyKGlu bGluaywgdywgaCk7Cj4gK30KPiArCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFRyYW5z cG9zZUNVREFDb250ZXh0LCB4KQo+ICsjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19WSURFT19Q QVJBTSB8IEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSkKPiArc3RhdGljIGNvbnN0IEFWT3B0 aW9uIHRyYW5zcG9zZV9jdWRhX29wdGlvbnNbXSA9IHsKPiArICAgIHsgImRpciIsICJzZXQgdHJh bnNwb3NlIGRpcmVjdGlvbiIsIE9GRlNFVChkaXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9 IFRSQU5TUE9TRV9DQ0xPQ0tfRkxJUCB9LCAwLCA2LCBGTEFHUywgLnVuaXQgPSAiZGlyIiB9LAo+ ICsgICAgICAgIHsgImNjbG9ja19mbGlwIiwgICAicm90YXRlIGNvdW50ZXItY2xvY2t3aXNlIHdp dGggdmVydGljYWwgZmxpcCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBUUkFOU1BP U0VfQ0NMT0NLX0ZMSVAgfSwgLmZsYWdzPUZMQUdTLCAudW5pdCA9ICJkaXIiIH0sCj4gKyAgICAg ICAgeyAiY2xvY2siLCAgICAgICAgICJyb3RhdGUgY2xvY2t3aXNlIiwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFRSQU5TUE9TRV9DTE9D SyAgICAgICB9LCAuZmxhZ3M9RkxBR1MsIC51bml0ID0gImRpciIgfSwKPiArICAgICAgICB7ICJj Y2xvY2siLCAgICAgICAgInJvdGF0ZSBjb3VudGVyLWNsb2Nrd2lzZSIsICAgICAgICAgICAgICAg ICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NDTE9DSyAgICAg IH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAo+ICsgICAgICAgIHsgImNsb2NrX2Zs aXAiLCAgICAicm90YXRlIGNsb2Nrd2lzZSB3aXRoIHZlcnRpY2FsIGZsaXAiLCAgICAgICAgIDAs IEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBUUkFOU1BPU0VfQ0xPQ0tfRkxJUCAgfSwgLmZs YWdzPUZMQUdTLCAudW5pdCA9ICJkaXIiIH0sCj4gKyAgICAgICAgeyAicmV2ZXJzYWwiLCAgICAg ICJyb3RhdGUgYnkgaGFsZi10dXJuIiwgICAgICAgICAgICAgICAgICAgICAgICAgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsgLmk2NCA9IFRSQU5TUE9TRV9SRVZFUlNBTCAgICB9LCAuZmxhZ3M9RkxB R1MsIC51bml0ID0gImRpciIgfSwKPiArICAgICAgICB7ICJoZmxpcCIsICAgICAgICAgImZsaXAg aG9yaXpvbnRhbGx5IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9D T05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0hGTElQICAgICAgIH0sIC5mbGFncz1GTEFHUywgLnVu aXQgPSAiZGlyIiB9LAo+ICsgICAgICAgIHsgInZmbGlwIiwgICAgICAgICAiZmxpcCB2ZXJ0aWNh bGx5IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7 IC5pNjQgPSBUUkFOU1BPU0VfVkZMSVAgICAgICAgfSwgLmZsYWdzPUZMQUdTLCAudW5pdCA9ICJk aXIiIH0sCj4gKwo+ICsgICAgeyAicGFzc3Rocm91Z2giLCAiZG8gbm90IGFwcGx5IHRyYW5zcG9z aXRpb24gaWYgdGhlIGlucHV0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBnZW9tZXRyeSIsCj4gKyAg ICAgIE9GRlNFVChwYXNzdGhyb3VnaCksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQ9VFJBTlNQT1NF X1BUX1RZUEVfTk9ORX0sICAwLCBJTlRfTUFYLCBGTEFHUywgLnVuaXQgPSAicGFzc3Rocm91Z2gi IH0sCj4gKyAgICAgICAgeyAibm9uZSIsICAgICAgImFsd2F5cyBhcHBseSB0cmFuc3Bvc2l0aW9u IiwgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9VFJBTlNQT1NFX1BUX1RZUEVfTk9ORX0s ICAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsIC51bml0ID0gInBhc3N0aHJvdWdoIiB9LAo+ ICsgICAgICAgIHsgInBvcnRyYWl0IiwgICJwcmVzZXJ2ZSBwb3J0cmFpdCBnZW9tZXRyeSIsICAg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVRSQU5TUE9TRV9QVF9UWVBFX1BPUlRSQUlUfSwg IElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAudW5pdCA9ICJwYXNzdGhyb3VnaCIgfSwKPiArICAg ICAgICB7ICJsYW5kc2NhcGUiLCAicHJlc2VydmUgbGFuZHNjYXBlIGdlb21ldHJ5IiwgIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7Lmk2ND1UUkFOU1BPU0VfUFRfVFlQRV9MQU5EU0NBUEV9LCBJTlRf TUlOLCBJTlRfTUFYLCBGTEFHUywgLnVuaXQgPSAicGFzc3Rocm91Z2giIH0sCj4gKwo+ICsgICAg eyBOVUxMIH0KPiArfTsKPiArCj4gK0FWRklMVEVSX0RFRklORV9DTEFTUyh0cmFuc3Bvc2VfY3Vk YSk7Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgdHJhbnNwb3NlX2N1ZGFfaW5wdXRz W10gPSB7Cj4gKyAgICB7Cj4gKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKPiAr ICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+ICsgICAgICAgIC5m aWx0ZXJfZnJhbWUgPSB0cmFuc3Bvc2VfY3VkYV9maWx0ZXJfZnJhbWUsCj4gKyAgICAgICAgLmdl dF9idWZmZXIudmlkZW8gPSBnZXRfdmlkZW9fYnVmZmVyLAo+ICsgICAgICAgIC5jb25maWdfcHJv cHMgPSBmZl9jdWRhX3ZwcF9jb25maWdfaW5wdXQsCj4gKyAgICB9LAo+ICt9Owo+ICsKPiArc3Rh dGljIGNvbnN0IEFWRmlsdGVyUGFkIHRyYW5zcG9zZV9jdWRhX291dHB1dHNbXSA9IHsKPiArICAg IHsKPiArICAgICAgICAubmFtZSA9ICJkZWZhdWx0IiwKPiArICAgICAgICAudHlwZSA9IEFWTUVE SUFfVFlQRV9WSURFTywKPiArICAgICAgICAuY29uZmlnX3Byb3BzID0gdHJhbnNwb3NlX2N1ZGFf Y29uZmlnX291dHB1dCwKPiArICAgIH0sCj4gK307Cj4gKwo+ICtjb25zdCBGRkZpbHRlciBmZl92 Zl90cmFuc3Bvc2VfY3VkYSA9IHsKPiArICAgIC5wLm5hbWUgICAgICAgICA9ICJ0cmFuc3Bvc2Vf Y3VkYSIsCj4gKyAgICAucC5kZXNjcmlwdGlvbiAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiQ1VE QSBhY2NlbGVyYXRlZCB2aWRlbyB0cmFuc3Bvc2UiKSwKPiArICAgIC5wLnByaXZfY2xhc3MgICA9 ICZ0cmFuc3Bvc2VfY3VkYV9jbGFzcywKPiArICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihU cmFuc3Bvc2VDVURBQ29udGV4dCksCj4gKyAgICAuaW5pdCAgICAgICAgICAgPSB0cmFuc3Bvc2Vf Y3VkYV9pbml0LAo+ICsgICAgLnVuaW5pdCAgICAgICAgID0gZmZfY3VkYV92cHBfY3R4X3VuaW5p dCwKPiArICAgIEZJTFRFUl9JTlBVVFModHJhbnNwb3NlX2N1ZGFfaW5wdXRzKSwKPiArICAgIEZJ TFRFUl9PVVRQVVRTKHRyYW5zcG9zZV9jdWRhX291dHB1dHMpLAo+ICsgICAgRklMVEVSX1FVRVJZ X0ZVTkMyKGZmX2N1ZGFfdnBwX3F1ZXJ5X2Zvcm1hdHMpLAo+ICsgICAgLmZsYWdzX2ludGVybmFs ID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvbGli YXZmaWx0ZXIvdmZfdHJhbnNwb3NlX2N1ZGEuY3UgYi9saWJhdmZpbHRlci92Zl90cmFuc3Bvc2Vf Y3VkYS5jdQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uMTM4NGMy MjhlMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfY3Vk YS5jdQo+IEBAIC0wLDAgKzEsMjE5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSwg RmFlZXogS2FkaXJpIDwgZjFrMmZhZWV6IGF0IGdtYWlsIGRvdCBjb20+Cj4gKyAqCj4gKyAqIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4g KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAq Cj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgImN1ZGEvdmVjdG9yX2hlbHBlcnMuY3VoIgo+ICsKPiArLy8gVHJh bnNwb3NlIGRpcmVjdGlvbiBjb25zdGFudHMgKGZyb20gdHJhbnNwb3NlLmgpCj4gKyNkZWZpbmUg VFJBTlNQT1NFX0NDTE9DS19GTElQIDAKPiArI2RlZmluZSBUUkFOU1BPU0VfQ0xPQ0sgICAgICAg MQo+ICsjZGVmaW5lIFRSQU5TUE9TRV9DQ0xPQ0sgICAgICAyCj4gKyNkZWZpbmUgVFJBTlNQT1NF X0NMT0NLX0ZMSVAgIDMKPiArI2RlZmluZSBUUkFOU1BPU0VfUkVWRVJTQUwgICAgNAo+ICsjZGVm aW5lIFRSQU5TUE9TRV9IRkxJUCAgICAgICA1Cj4gKyNkZWZpbmUgVFJBTlNQT1NFX1ZGTElQICAg ICAgIDYKCllvdSBzaG91bGQgYmUgYWJsZSB0byBpbmNsdWRlIHRoZSBoZWFkZXIgaGVyZSwgaXQn cyBqdXN0IG5vcm1hbCBDKysuCgo+ICsvLyBGRm1wZWcgcGFzc2VzIHBpdGNoIGluIGJ5dGVzLCBD VURBIHVzZXMgcG90ZW50aWFsbHkgbGFyZ2VyIHR5cGVzCj4gKyNkZWZpbmUgRklYRURfUElUQ0go VCkgXAo+ICsgICAgKGRzdF9waXRjaC9zaXplb2YoVCkpCj4gKwo+ICsjZGVmaW5lIERFRkFVTFRf RFNUKG4sIFQpIFwKPiArICAgIGRzdFtuXVt5bypGSVhFRF9QSVRDSChUKSt4b10KPiArCj4gKy8v IC0tLSBDT09SRElOQVRFIFRSQU5TRk9STUFUSU9OIEZVTkNUSU9OUyAtLS0KPiArCj4gK19fZGV2 aWNlX18gc3RhdGljIGlubGluZSB2b2lkIGdldF90cmFuc3Bvc2VfY29vcmRzKGludCBzcmNfeCwg aW50IHNyY195LCBpbnQgc3JjX3dpZHRoLCBpbnQgc3JjX2hlaWdodCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmRzdF94LCBpbnQgKmRz dF95LCBpbnQgZHN0X3dpZHRoLCBpbnQgZHN0X2hlaWdodCwgaW50IGRpcikKPiArewo+ICsgICAg c3dpdGNoIChkaXIpIHsKPiArICAgIGNhc2UgVFJBTlNQT1NFX0NDTE9DS19GTElQOiAvLyA5MMKw IENDVyArIHZlcnRpY2FsIGZsaXAKPiArICAgICAgICAqZHN0X3ggPSBzcmNfeTsKPiArICAgICAg ICAqZHN0X3kgPSBzcmNfeDsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgVFJBTlNQT1NF X0NMT0NLOiAvLyA5MMKwIENXCj4gKyAgICAgICAgKmRzdF94ID0gc3JjX3k7Cj4gKyAgICAgICAg KmRzdF95ID0gc3JjX3dpZHRoIC0gMSAtIHNyY194Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAg Y2FzZSBUUkFOU1BPU0VfQ0NMT0NLOiAvLyA5MMKwIENDVwo+ICsgICAgICAgICpkc3RfeCA9IHNy Y19oZWlnaHQgLSAxIC0gc3JjX3k7Cj4gKyAgICAgICAgKmRzdF95ID0gc3JjX3g7Cj4gKyAgICAg ICAgYnJlYWs7Cj4gKyAgICBjYXNlIFRSQU5TUE9TRV9DTE9DS19GTElQOiAvLyA5MMKwIENXICsg dmVydGljYWwgZmxpcAo+ICsgICAgICAgICpkc3RfeCA9IHNyY19oZWlnaHQgLSAxIC0gc3JjX3k7 Cj4gKyAgICAgICAgKmRzdF95ID0gc3JjX3dpZHRoIC0gMSAtIHNyY194Owo+ICsgICAgICAgIGJy ZWFrOwo+ICsgICAgY2FzZSBUUkFOU1BPU0VfUkVWRVJTQUw6IC8vIDE4MMKwIHJvdGF0aW9uCj4g KyAgICAgICAgKmRzdF94ID0gc3JjX3dpZHRoIC0gMSAtIHNyY194Owo+ICsgICAgICAgICpkc3Rf eSA9IHNyY19oZWlnaHQgLSAxIC0gc3JjX3k7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNl IFRSQU5TUE9TRV9IRkxJUDogLy8gSG9yaXpvbnRhbCBmbGlwCj4gKyAgICAgICAgKmRzdF94ID0g c3JjX3dpZHRoIC0gMSAtIHNyY194Owo+ICsgICAgICAgICpkc3RfeSA9IHNyY195Owo+ICsgICAg ICAgIGJyZWFrOwo+ICsgICAgY2FzZSBUUkFOU1BPU0VfVkZMSVA6IC8vIFZlcnRpY2FsIGZsaXAK PiArICAgICAgICAqZHN0X3ggPSBzcmNfeDsKPiArICAgICAgICAqZHN0X3kgPSBzcmNfaGVpZ2h0 IC0gMSAtIHNyY195Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAg ICAqZHN0X3ggPSBzcmNfeDsKPiArICAgICAgICAqZHN0X3kgPSBzcmNfeTsKPiArICAgICAgICBi cmVhazsKPiArICAgIH0KPiArfQo+ICsKPiArLy8gLS0tIFRSQU5TUE9TRSBLRVJORUxTIC0tLQo+ ICsKPiArI2RlZmluZSBUUkFOU1BPU0VfREVGKG5hbWUsIGluX3R5cGUsIG91dF90eXBlKSBcCj4g K19fZGV2aWNlX18gc3RhdGljIGlubGluZSB2b2lkIFRyYW5zcG9zZV8jI25hbWUjI19pbXBsKCBc Cj4gKyAgICBjdWRhVGV4dHVyZU9iamVjdF90IHNyY190ZXhbNF0sIG91dF90eXBlICpkc3RbNF0s IFwKPiArICAgIGludCB4bywgaW50IHlvLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkc3Rf cGl0Y2gsIFwKPiArICAgIGludCBkc3Rfd2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQgc3JjX3dp ZHRoLCBpbnQgc3JjX2hlaWdodCwgaW50IGRpcikgXAo+ICt7IFwKPiArICAgIGludCBzcmNfeCwg c3JjX3k7IFwKPiArICAgIGdldF90cmFuc3Bvc2VfY29vcmRzKHhvLCB5bywgd2lkdGgsIGhlaWdo dCwgJnNyY194LCAmc3JjX3ksIHNyY193aWR0aCwgc3JjX2hlaWdodCwgZGlyKTsgXAo+ICsgICAg XAo+ICsgICAgaW5fdHlwZSBwaXhlbCA9IHRleDJEPGluX3R5cGU+KHNyY190ZXhbMF0sIHNyY194 ICsgMC41Ziwgc3JjX3kgKyAwLjVmKTsgXAo+ICsgICAgREVGQVVMVF9EU1QoMCwgb3V0X3R5cGUp ID0gcGl4ZWw7IFwKPiArfQo+ICsKPiArI2RlZmluZSBUUkFOU1BPU0VfVVZfREVGKG5hbWUsIGlu X3R5cGVfdXYsIG91dF90eXBlX3V2KSBcCj4gK19fZGV2aWNlX18gc3RhdGljIGlubGluZSB2b2lk IFRyYW5zcG9zZV8jI25hbWUjI191dl9pbXBsKCBcCj4gKyAgICBjdWRhVGV4dHVyZU9iamVjdF90 IHNyY190ZXhbNF0sIG91dF90eXBlX3V2ICpkc3RbNF0sIFwKPiArICAgIGludCB4bywgaW50IHlv LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkc3RfcGl0Y2gsIFwKPiArICAgIGludCBkc3Rf d2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQgc3JjX3dpZHRoLCBpbnQgc3JjX2hlaWdodCwgaW50 IGRpcikgXAo+ICt7IFwKPiArICAgIGludCBzcmNfeCwgc3JjX3k7IFwKPiArICAgIGdldF90cmFu c3Bvc2VfY29vcmRzKHhvLCB5bywgd2lkdGgsIGhlaWdodCwgJnNyY194LCAmc3JjX3ksIHNyY193 aWR0aCwgc3JjX2hlaWdodCwgZGlyKTsgXAo+ICsgICAgXAo+ICsgICAgaW5fdHlwZV91diBwaXhl bF91ID0gdGV4MkQ8aW5fdHlwZV91dj4oc3JjX3RleFsxXSwgc3JjX3ggKyAwLjVmLCBzcmNfeSAr IDAuNWYpOyBcCj4gKyAgICBpbl90eXBlX3V2IHBpeGVsX3YgPSB0ZXgyRDxpbl90eXBlX3V2Pihz cmNfdGV4WzJdLCBzcmNfeCArIDAuNWYsIHNyY195ICsgMC41Zik7IFwKPiArICAgIERFRkFVTFRf RFNUKDEsIG91dF90eXBlX3V2KSA9IHBpeGVsX3U7IFwKPiArICAgIERFRkFVTFRfRFNUKDIsIG91 dF90eXBlX3V2KSA9IHBpeGVsX3Y7IFwKPiArfQo+ICsKPiArI2RlZmluZSBUUkFOU1BPU0VfTlZf VVZfREVGKG5hbWUsIGluX3R5cGVfdXYsIG91dF90eXBlX3V2KSBcCj4gK19fZGV2aWNlX18gc3Rh dGljIGlubGluZSB2b2lkIFRyYW5zcG9zZV8jI25hbWUjI191dl9pbXBsKCBcCj4gKyAgICBjdWRh VGV4dHVyZU9iamVjdF90IHNyY190ZXhbNF0sIG91dF90eXBlX3V2ICpkc3RbNF0sIFwKPiArICAg IGludCB4bywgaW50IHlvLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkc3RfcGl0Y2gsIFwK PiArICAgIGludCBkc3Rfd2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQgc3JjX3dpZHRoLCBpbnQg c3JjX2hlaWdodCwgaW50IGRpcikgXAo+ICt7IFwKPiArICAgIGludCBzcmNfeCwgc3JjX3k7IFwK PiArICAgIGdldF90cmFuc3Bvc2VfY29vcmRzKHhvLCB5bywgd2lkdGgsIGhlaWdodCwgJnNyY194 LCAmc3JjX3ksIHNyY193aWR0aCwgc3JjX2hlaWdodCwgZGlyKTsgXAo+ICsgICAgXAo+ICsgICAg aW5fdHlwZV91diBwaXhlbF91diA9IHRleDJEPGluX3R5cGVfdXY+KHNyY190ZXhbMV0sIHNyY194 ICsgMC41Ziwgc3JjX3kgKyAwLjVmKTsgXAo+ICsgICAgREVGQVVMVF9EU1QoMSwgb3V0X3R5cGVf dXYpID0gcGl4ZWxfdXY7IFwKPiArfQo+ICsKPiArCj4gKy8vIERlZmluZSB0cmFuc3Bvc2UgaW1w bGVtZW50YXRpb25zIGZvciBhbGwgZm9ybWF0cwo+ICtUUkFOU1BPU0VfREVGKHl1djQyMHAsIHVj aGFyLCB1Y2hhcikKPiArVFJBTlNQT1NFX1VWX0RFRih5dXY0MjBwLCB1Y2hhciwgdWNoYXIpCj4g Kwo+ICtUUkFOU1BPU0VfREVGKG52MTIsIHVjaGFyLCB1Y2hhcikKPiArVFJBTlNQT1NFX05WX1VW X0RFRihudjEyLCB1Y2hhcjIsIHVjaGFyMikKPiArCj4gK1RSQU5TUE9TRV9ERUYoeXV2NDQ0cCwg dWNoYXIsIHVjaGFyKQo+ICtUUkFOU1BPU0VfVVZfREVGKHl1djQ0NHAsIHVjaGFyLCB1Y2hhcikK PiArCj4gK1RSQU5TUE9TRV9ERUYocDAxMGxlLCB1c2hvcnQsIHVzaG9ydCkKPiArVFJBTlNQT1NF X05WX1VWX0RFRihwMDEwbGUsIHVzaG9ydDIsIHVzaG9ydDIpCj4gKwo+ICtUUkFOU1BPU0VfREVG KHAwMTZsZSwgdXNob3J0LCB1c2hvcnQpCj4gK1RSQU5TUE9TRV9OVl9VVl9ERUYocDAxNmxlLCB1 c2hvcnQyLCB1c2hvcnQyKQo+ICsKPiArVFJBTlNQT1NFX0RFRih5dXY0NDRwMTZsZSwgdXNob3J0 LCB1c2hvcnQpCj4gK1RSQU5TUE9TRV9VVl9ERUYoeXV2NDQ0cDE2bGUsIHVzaG9ydCwgdXNob3J0 KQo+ICsKPiArVFJBTlNQT1NFX0RFRihyZ2IwLCB1Y2hhcjQsIHVjaGFyNCkKPiArVFJBTlNQT1NF X0RFRihiZ3IwLCB1Y2hhcjQsIHVjaGFyNCkKPiArVFJBTlNQT1NFX0RFRihyZ2JhLCB1Y2hhcjQs IHVjaGFyNCkKPiArVFJBTlNQT1NFX0RFRihiZ3JhLCB1Y2hhcjQsIHVjaGFyNCkKClNob3VsZG4n dCBpdCBiZSBwb3NzaWJsZSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBrZXJuZWxzIHF1aXRlIApk cmFzdGljYWxseSBoZXJlLCBieSBqdXN0IGhhdmluZyBvbmUgcGVyIGVsZW1lbnQtc2l6ZSBhbmQg bGF5b3V0PwpUaGUga2VybmVscyB0aGVuIGRvbid0IG5lZWQgdG8gY2FyZSBhYm91dCB0aGUgcGl4 X2ZtdHMgYW55bW9yZS4KClRoZSBmaWx0ZXIgdGhhbiBjb21iaW5lcyB0aGUgY29ycmVjdCBrZXJu ZWxzIGZyb20gdGhlIHBpeGVsIGZvcm1hdCBpbmZvLgoKPiArLy8gLS0tIEtFUk5FTCBBUkdVTUVO VCBERUZJTklUSU9OUyAtLS0KPiArCj4gKyNkZWZpbmUgVFJBTlNQT1NFX0tFUk5FTF9BUkdTKFQp IFwKPiArICAgIGN1ZGFUZXh0dXJlT2JqZWN0X3Qgc3JjX3RleF8wLCBjdWRhVGV4dHVyZU9iamVj dF90IHNyY190ZXhfMSwgXAo+ICsgICAgY3VkYVRleHR1cmVPYmplY3RfdCBzcmNfdGV4XzIsIGN1 ZGFUZXh0dXJlT2JqZWN0X3Qgc3JjX3RleF8zLCBcCj4gKyAgICBUICpkc3RfMCwgVCAqZHN0XzEs IFQgKmRzdF8yLCBUICpkc3RfMywgXAo+ICsgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQg ZHN0X3BpdGNoLCBcCj4gKyAgICBpbnQgZHN0X3dpZHRoLCBpbnQgZHN0X2hlaWdodCwgXAo+ICsg ICAgaW50IHNyY193aWR0aCwgaW50IHNyY19oZWlnaHQsIGludCBkaXIKPiArCj4gKyNkZWZpbmUg VFJBTlNQT1NFX0tFUk5FTF9JTVBMKGZ1bmNfaW1wbCwgVCkgXAo+ICsgICAgY3VkYVRleHR1cmVP YmplY3RfdCBzcmNfdGV4WzRdID0geyBzcmNfdGV4XzAsIHNyY190ZXhfMSwgc3JjX3RleF8yLCBz cmNfdGV4XzMgfTsgXAo+ICsgICAgVCAqZHN0WzRdID0geyBkc3RfMCwgZHN0XzEsIGRzdF8yLCBk c3RfMyB9OyBcCj4gKyAgICBpbnQgeG8gPSBibG9ja0lkeC54ICogYmxvY2tEaW0ueCArIHRocmVh ZElkeC54OyBcCj4gKyAgICBpbnQgeW8gPSBibG9ja0lkeC55ICogYmxvY2tEaW0ueSArIHRocmVh ZElkeC55OyBcCj4gKyAgICBpZiAoeG8gPj0gd2lkdGggfHwgeW8gPj0gaGVpZ2h0KSByZXR1cm47 IFwKPiArICAgIFwKPiArICAgIGZ1bmNfaW1wbChzcmNfdGV4LCBkc3QsIHhvLCB5bywgd2lkdGgs IGhlaWdodCwgZHN0X3BpdGNoLCBcCj4gKyAgICAgICAgICAgICAgZHN0X3dpZHRoLCBkc3RfaGVp Z2h0LCBzcmNfd2lkdGgsIHNyY19oZWlnaHQsIGRpcik7Cj4gKwo+ICtleHRlcm4gIkMiIHsKPiAr Cj4gKy8vIC0tLSBUUkFOU1BPU0UgS0VSTkVMUyAtLS0KPiArCj4gKyNkZWZpbmUgVFJBTlNQT1NF X0tFUk5FTChuYW1lLCBUKSBcCj4gK19fZ2xvYmFsX18gdm9pZCBUcmFuc3Bvc2VfIyNuYW1lKFRS QU5TUE9TRV9LRVJORUxfQVJHUyhUKSkgXAo+ICt7IFwKPiArICAgIFRSQU5TUE9TRV9LRVJORUxf SU1QTChUcmFuc3Bvc2VfIyNuYW1lIyNfaW1wbCwgVCkgXAo+ICt9Cj4gKwo+ICsjZGVmaW5lIFRS QU5TUE9TRV9VVl9LRVJORUwobmFtZSwgVCkgXAo+ICtfX2dsb2JhbF9fIHZvaWQgVHJhbnNwb3Nl XyMjbmFtZSMjX3V2KFRSQU5TUE9TRV9LRVJORUxfQVJHUyhUKSkgXAo+ICt7IFwKPiArICAgIFRS QU5TUE9TRV9LRVJORUxfSU1QTChUcmFuc3Bvc2VfIyNuYW1lIyNfdXZfaW1wbCwgVCkgXAo+ICt9 Cj4gKwo+ICsvLyBUcmFuc3Bvc2Uga2VybmVscyBmb3IgYWxsIGZvcm1hdHMKPiArVFJBTlNQT1NF X0tFUk5FTCh5dXY0MjBwLCB1Y2hhcikKPiArVFJBTlNQT1NFX1VWX0tFUk5FTCh5dXY0MjBwLCB1 Y2hhcikKPiArCj4gK1RSQU5TUE9TRV9LRVJORUwobnYxMiwgdWNoYXIpCj4gK1RSQU5TUE9TRV9V Vl9LRVJORUwobnYxMiwgdWNoYXIyKQo+ICsKPiArVFJBTlNQT1NFX0tFUk5FTCh5dXY0NDRwLCB1 Y2hhcikKPiArVFJBTlNQT1NFX1VWX0tFUk5FTCh5dXY0NDRwLCB1Y2hhcikKPiArCj4gK1RSQU5T UE9TRV9LRVJORUwocDAxMGxlLCB1c2hvcnQpCj4gK1RSQU5TUE9TRV9VVl9LRVJORUwocDAxMGxl LCB1c2hvcnQyKQo+ICsKPiArVFJBTlNQT1NFX0tFUk5FTChwMDE2bGUsIHVzaG9ydCkKPiArVFJB TlNQT1NFX1VWX0tFUk5FTChwMDE2bGUsIHVzaG9ydDIpCj4gKwo+ICtUUkFOU1BPU0VfS0VSTkVM KHl1djQ0NHAxNmxlLCB1c2hvcnQpCj4gK1RSQU5TUE9TRV9VVl9LRVJORUwoeXV2NDQ0cDE2bGUs IHVzaG9ydCkKPiArCj4gK1RSQU5TUE9TRV9LRVJORUwocmdiMCwgdWNoYXI0KQo+ICtUUkFOU1BP U0VfS0VSTkVMKGJncjAsIHVjaGFyNCkKPiArVFJBTlNQT1NFX0tFUk5FTChyZ2JhLCB1Y2hhcjQp Cj4gK1RSQU5TUE9TRV9LRVJORUwoYmdyYSwgdWNoYXI0KQo+ICsKPiArLy8gRm9yIFJHQiBmb3Jt YXRzLCBVViBrZXJuZWxzIGFyZSBub3QgbmVlZGVkLCBidXQgd2UgcHJvdmlkZSBlbXB0eSBpbXBs ZW1lbnRhdGlvbnMKPiArLy8gdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgd2l0aCB0aGUgZnVuY3Rp b24gbG9hZGluZyBsb2dpYwo+ICsKPiArI2RlZmluZSBFTVBUWV9VVl9LRVJORUwobmFtZSwgVCkg XAo+ICtfX2dsb2JhbF9fIHZvaWQgVHJhbnNwb3NlXyMjbmFtZSMjX3V2KFRSQU5TUE9TRV9LRVJO RUxfQVJHUyhUKSkgeyB9IFwKPiArCj4gK0VNUFRZX1VWX0tFUk5FTChyZ2IwLCB1Y2hhcikKPiAr RU1QVFlfVVZfS0VSTkVMKGJncjAsIHVjaGFyKQo+ICtFTVBUWV9VVl9LRVJORUwocmdiYSwgdWNo YXIpCj4gK0VNUFRZX1VWX0tFUk5FTChiZ3JhLCB1Y2hhcikKClNhbWUgYXMgYWJvdmUsIHRoaXMg c2hvdWxkIGFsbCBiZSBwb3NzaWJsZSB0byBzaW1wbHlmeSBieSBub3QgaGF2aW5nIG9uZSAKa2Vy bmVsIHBlciBwaXhlbC1mb3JtYXQuCgo+ICt9CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZl bEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1k ZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1k ZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==