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 A6D334674A for ; Mon, 17 Jul 2023 11:12:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B943868C614; Mon, 17 Jul 2023 14:12:50 +0300 (EEST) Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3E46768C5BC for ; Mon, 17 Jul 2023 14:12:44 +0300 (EEST) Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-553ad54d3c6so2575210a12.1 for ; Mon, 17 Jul 2023 04:12:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689592362; x=1692184362; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=rglvvPY0Nz/1kvJQsDc9kzq+vmAVma/H1hzFR3TL4as=; b=BB4KaIX3M5l9wyIIN4GE0i6NAgfHEeYeQygiutgq45jHURfSx1g8hQFTKg7YSxqCFk 0qM5+h3TGlBt8eR8fqCrQZPEKeREkplX0N1tww3IT3EslarNrTLu5Gi1x0pARL+BYUY+ XNL/whD3sjounTGw7wmKaX3jWwrQaqguV11MEKa+9b0U/rYZFKa7+3ykfz5iB7eoXNP3 OByeEH2zckCghq90eUsgyv3loOogXpdZ3TuylfoaXiLGSa+smn/+2fsWpNKBbfE3R3GL qMuoDDkdn55iAJ2oSFIzSiDsLiYa593ljoRxBzyT/w1mpQ5y87NeFCZN6f80WFjcbJCQ 18Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689592362; x=1692184362; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rglvvPY0Nz/1kvJQsDc9kzq+vmAVma/H1hzFR3TL4as=; b=IGW7Tgs9TVWjnI7lTPJRjZJlgAMCzGx+AUgDKTWav6A/TXJFQOoErh90EKKOsJTe1T BCnmuDk2yET9wf2dVYE9JSJ460MJ7+AbJUs0OGdtkrefK99DC31ygigHfz39PI5pi8WR WV38XhGY+kvKUCP59eIEp46D3sYBzToLo+mTsbTKwl3TodZ8ml2XpFkr9mEq1i4IlzUe bvNJYk6Pcf3M80aLS/wxREYrXEmGdMwBVco8o/mvQ0fJfTz7HRf6vlvWRjN+8Xqth8YM uLQMtddn1dKsZTvdL86drWTsVT2keZdTuzBk3aTmmChIa65+swSO2uOVaKNYbEpqd5mV ICpg== X-Gm-Message-State: ABy/qLbpYyYJsQnSIl0mmPsEV+9I+cX/uj6hUc7nuOlWrJ/SBCniXdhF 5WYs9WQLV+u/oqC3H/v6w4irdcWRv2SIpUXwMaVxsmQ7nzE= X-Google-Smtp-Source: APBJJlEbdDMoTkQf98HzG3/Jq2sInstzu9JpTzu263wq0b4F220UXcQsn7CNpTYa4u0iSpOHH3BfQQ3a59t4/gu36Aw= X-Received: by 2002:a17:90a:a58f:b0:250:6c76:fd9b with SMTP id b15-20020a17090aa58f00b002506c76fd9bmr9611463pjq.38.1689592361660; Mon, 17 Jul 2023 04:12:41 -0700 (PDT) MIME-Version: 1.0 References: <20230710073941.425658-1-fei.w.wang@intel.com> <20230710073941.425658-6-fei.w.wang@intel.com> In-Reply-To: <20230710073941.425658-6-fei.w.wang@intel.com> From: David Rosca Date: Mon, 17 Jul 2023 13:12:30 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v1 6/6] lavc/vaapi_encode: Add VAAPI AV1 encoder 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: T24gTW9uLCBKdWwgMTAsIDIwMjMgYXQgOTo0MOKAr0FNIEZlaSBXYW5nCjxmZWkudy53YW5nLWF0 LWludGVsLmNvbUBmZm1wZWcub3JnPiB3cm90ZToKPgo+IFNpZ25lZC1vZmYtYnk6IEZlaSBXYW5n IDxmZWkudy53YW5nQGludGVsLmNvbT4KPiAtLS0KPiAgQ2hhbmdlbG9nICAgICAgICAgICAgICAg ICAgICAgfCAgICAxICsKPiAgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsK PiAgZG9jL2VuY29kZXJzLnRleGkgICAgICAgICAgICAgfCAgIDEzICsKPiAgbGliYXZjb2RlYy9N YWtlZmlsZSAgICAgICAgICAgfCAgICAxICsKPiAgbGliYXZjb2RlYy9hbGxjb2RlY3MuYyAgICAg ICAgfCAgICAxICsKPiAgbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYyAgICAgfCAgMTI1ICsrKy0K PiAgbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaCAgICAgfCAgIDEyICsKPiAgbGliYXZjb2RlYy92 YWFwaV9lbmNvZGVfYXYxLmMgfCAxMjI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICA4IGZpbGVzIGNoYW5nZWQsIDEzNjYgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0p Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuYwo+Cj4g ZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+IGluZGV4IDM4NzYwODI4NDQuLjdh ZTliODVkNTIgMTAwNjQ0Cj4gLS0tIGEvQ2hhbmdlbG9nCj4gKysrIGIvQ2hhbmdlbG9nCj4gQEAg LTI1LDYgKzI1LDcgQEAgdmVyc2lvbiA8bmV4dD46Cj4gIC0gUmF3IFZWQyBiaXRzdHJlYW0gcGFy c2VyLCBtdXhlciBhbmQgZGVtdXhlcgo+ICAtIEJpdHN0cmVhbSBmaWx0ZXIgZm9yIGVkaXRpbmcg bWV0YWRhdGEgaW4gVlZDIHN0cmVhbXMKPiAgLSBCaXRzdHJlYW0gZmlsdGVyIGZvciBjb252ZXJ0 aW5nIFZWQyBmcm9tIE1QNCB0byBBbm5leCBCCj4gKy0gVkFBUEkgQVYxIGVuY29kZXIKPgo+ICB2 ZXJzaW9uIDYuMDoKPiAgLSBSYWRpYW5jZSBIRFIgaW1hZ2Ugc3VwcG9ydAo+IGRpZmYgLS1naXQg YS9jb25maWd1cmUgYi9jb25maWd1cmUKPiBpbmRleCAwYWIwNzYxMDExLi42YTFhMzBhYWVjIDEw MDc1NQo+IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBAIC0zMzIzLDYgKzMz MjMsOCBAQCBhdjFfcXN2X2RlY29kZXJfc2VsZWN0PSJxc3ZkZWMiCj4gIGF2MV9xc3ZfZW5jb2Rl cl9zZWxlY3Q9InFzdmVuYyIKPiAgYXYxX3Fzdl9lbmNvZGVyX2RlcHM9ImxpYnZwbCIKPiAgYXYx X2FtZl9lbmNvZGVyX2RlcHM9ImFtZiIKPiArYXYxX3ZhYXBpX2VuY29kZXJfZGVwcz0iVkFFbmNQ aWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxIgo+ICthdjFfdmFhcGlfZW5jb2Rlcl9zZWxlY3Q9ImNi c19hdjEgdmFhcGlfZW5jb2RlIgo+Cj4gICMgcGFyc2Vycwo+ICBhYWNfcGFyc2VyX3NlbGVjdD0i YWR0c19oZWFkZXIgbXBlZzRhdWRpbyIKPiBAQCAtNzEwNiw2ICs3MTA4LDcgQEAgaWYgZW5hYmxl ZCB2YWFwaTsgdGhlbgo+ICAgICAgY2hlY2tfdHlwZSAidmEvdmEuaCB2YS92YV9lbmNfanBlZy5o IiAiVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVySlBFRyIKPiAgICAgIGNoZWNrX3R5cGUgInZh L3ZhLmggdmEvdmFfZW5jX3ZwOC5oIiAgIlZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlclZQOCIK PiAgICAgIGNoZWNrX3R5cGUgInZhL3ZhLmggdmEvdmFfZW5jX3ZwOS5oIiAgIlZBRW5jUGljdHVy ZVBhcmFtZXRlckJ1ZmZlclZQOSIKPiArICAgIGNoZWNrX3R5cGUgInZhL3ZhLmggdmEvdmFfZW5j X2F2MS5oIiAgIlZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckFWMSIKPiAgZmkKPgo+ICBpZiBl bmFibGVkX2FsbCBvcGVuY2wgbGliZHJtIDsgdGhlbgo+IGRpZmYgLS1naXQgYS9kb2MvZW5jb2Rl cnMudGV4aSBiL2RvYy9lbmNvZGVycy50ZXhpCj4gaW5kZXggMjVkNmI3ZjA5ZS4uZmIzMzFlYmQ4 ZSAxMDA2NDQKPiAtLS0gYS9kb2MvZW5jb2RlcnMudGV4aQo+ICsrKyBiL2RvYy9lbmNvZGVycy50 ZXhpCj4gQEAgLTM5OTEsNiArMzk5MSwxOSBAQCBBdmVyYWdlIHZhcmlhYmxlIGJpdHJhdGUuCj4g IEVhY2ggZW5jb2RlciBhbHNvIGhhcyBpdHMgb3duIHNwZWNpZmljIG9wdGlvbnM6Cj4gIEB0YWJs ZSBAb3B0aW9uCj4KPiArQGl0ZW0gYXYxX3ZhYXBpCj4gK0BvcHRpb257cHJvZmlsZX0gc2V0cyB0 aGUgdmFsdWUgb2YgQGVtcGh7c2VxX3Byb2ZpbGV9Lgo+ICtAb3B0aW9ue3RpZXJ9IHNldHMgdGhl IHZhbHVlIG9mIEBlbXBoe3NlcV90aWVyfS4KPiArQG9wdGlvbntsZXZlbH0gc2V0cyB0aGUgdmFs dWUgb2YgQGVtcGh7c2VxX2xldmVsX2lkeH0uCj4gKwo+ICtAdGFibGUgQG9wdGlvbgo+ICtAaXRl bSB0aWxlcwo+ICtTZXQgdGhlIG51bWJlciBvZiB0aWxlcyB0byBlbmNvZGUgdGhlIGlucHV0IHZp ZGVvIHdpdGgsIGFzIGNvbHVtbnMgeCByb3dzLgo+ICsoZGVmYXVsdCBpcyAxeDEpLgo+ICtAaXRl bSB0aWxlX2dyb3Vwcwo+ICtTZXQgdGlsZSBncm91cHMgbnVtYmVyIChkZWZhdWx0IGlzIDEpLgo+ ICtAZW5kIHRhYmxlCj4gKwo+ICBAaXRlbSBoMjY0X3ZhYXBpCj4gIEBvcHRpb257cHJvZmlsZX0g c2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7cHJvZmlsZV9pZGN9IGFuZCB0aGUgQGVtcGh7Y29uc3Ry YWludF9zZXQqX2ZsYWd9cy4KPiAgQG9wdGlvbntsZXZlbH0gc2V0cyB0aGUgdmFsdWUgb2YgQGVt cGh7bGV2ZWxfaWRjfS4KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2 Y29kZWMvTWFrZWZpbGUKPiBpbmRleCAzY2Q1OTk3ZTY0Li5mZTFlNmFhOTlkIDEwMDY0NAo+IC0t LSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiArKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gQEAg LTI1OSw2ICsyNTksNyBAQCBPQkpTLSQoQ09ORklHX0FWMV9NRURJQUNPREVDX0RFQ09ERVIpICAr PSBtZWRpYWNvZGVjZGVjLm8KPiAgT0JKUy0kKENPTkZJR19BVjFfTUVESUFDT0RFQ19FTkNPREVS KSAgKz0gbWVkaWFjb2RlY2VuYy5vCj4gIE9CSlMtJChDT05GSUdfQVYxX05WRU5DX0VOQ09ERVIp ICAgICAgICs9IG52ZW5jX2F2MS5vIG52ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19BVjFfUVNWX0VO Q09ERVIpICAgICAgICAgKz0gcXN2ZW5jX2F2MS5vCj4gK09CSlMtJChDT05GSUdfQVYxX1ZBQVBJ X0VOQ09ERVIpICAgICAgICs9IHZhYXBpX2VuY29kZV9hdjEubyBhdjFfcHJvZmlsZV9sZXZlbC5v Cj4gIE9CSlMtJChDT05GSUdfQVZSTl9ERUNPREVSKSAgICAgICAgICAgICs9IGF2cm5kZWMubwo+ ICBPQkpTLSQoQ09ORklHX0FWUlBfREVDT0RFUikgICAgICAgICAgICArPSByMjEwZGVjLm8KPiAg T0JKUy0kKENPTkZJR19BVlJQX0VOQ09ERVIpICAgICAgICAgICAgKz0gcjIxMGVuYy5vCj4gZGlm ZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5j Cj4gaW5kZXggODc3NWQxNWE0Zi4uYzQzYzFkN2I0OCAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVj L2FsbGNvZGVjcy5jCj4gKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+IEBAIC04NDQsNiAr ODQ0LDcgQEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX252ZW5jX2VuY29kZXI7Cj4gIGV4 dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV9xc3ZfZGVjb2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZG Q29kZWMgZmZfYXYxX3Fzdl9lbmNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9hdjFf YW1mX2VuY29kZXI7Cj4gK2V4dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV92YWFwaV9lbmNvZGVy Owo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuaDI2NF9lbmNvZGVyOwo+ICBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuaDI2NF9kZWNvZGVyOwo+ICBleHRlcm4gY29uc3Qg RkZDb2RlYyBmZl9oMjY0X2FtZl9lbmNvZGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Zh YXBpX2VuY29kZS5jIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYwo+IGluZGV4IDI2MDRmMTJi OWUuLjI5MDdlMTU5ZmIgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYwo+ ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMKPiBAQCAtNjY5LDYgKzY2OSwxNSBAQCBz dGF0aWMgaW50IHZhYXBpX2VuY29kZV9zZXRfb3V0cHV0X3RpbWVzdGFtcChBVkNvZGVjQ29udGV4 dCAqYXZjdHgsCj4gIHsKPiAgICAgIFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnBy aXZfZGF0YTsKPgo+ICsgICAgLy8gQVYxIHBhY2tzIFAgZnJhbWUgYW5kIG5leHQgQiBmcmFtZSBp bnRvIG9uZSBwa3QsIGFuZCB1c2VzIHRoZSBvdGhlcgo+ICsgICAgLy8gcmVwZWF0IGZyYW1lIGhl YWRlciBwa3QgYXQgdGhlIGRpc3BsYXkgb3JkZXIgcG9zaXRpb24gb2YgdGhlIFAgZnJhbWUKPiAr ICAgIC8vIHRvIGluZGljYXRlIGl0cyBmcmFtZSBpbmRleC4gRWFjaCBmcmFtZSBoYXMgYSBjb3Jy ZXNwb25kaW5nIHBrdCBpbiBpdHMKPiArICAgIC8vIGRpc3BsYXkgb3JkZXIgcG9zaXRpb24uIFNv IGRvbid0IG5lZWQgdG8gY29uc2lkZXIgZGVsYXkgZm9yIEFWMSB0aW1lc3RhbXAuCj4gKyAgICBp ZiAoYXZjdHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0FWMSkgewo+ICsgICAgICAgIHBrdC0+ ZHRzID0gcGt0LT5wdHMgLSBjdHgtPmR0c19wdHNfZGlmZjsKPiArICAgICAgICByZXR1cm4gMDsK PiArICAgIH0KPiArCj4gICAgICBpZiAoY3R4LT5vdXRwdXRfZGVsYXkgPT0gMCkgewo+ICAgICAg ICAgIHBrdC0+ZHRzID0gcGt0LT5wdHM7Cj4gICAgICB9IGVsc2UgaWYgKHBpYy0+ZW5jb2RlX29y ZGVyIDwgY3R4LT5kZWNvZGVfZGVsYXkpIHsKPiBAQCAtNjg5LDkgKzY5OCwxMCBAQCBzdGF0aWMg aW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICB7Cj4gICAg ICBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gICAgICBWQUNv ZGVkQnVmZmVyU2VnbWVudCAqYnVmX2xpc3QsICpidWY7Cj4gLSAgICBWQVN0YXR1cyB2YXM7Cj4g KyAgICBBVlBhY2tldCAqcGt0X3B0ciA9IHBrdDsKPiAgICAgIGludCB0b3RhbF9zaXplID0gMDsK PiAgICAgIHVpbnQ4X3QgKnB0cjsKPiArICAgIFZBU3RhdHVzIHZhczsKPiAgICAgIGludCBlcnI7 Cj4KPiAgICAgIGVyciA9IHZhYXBpX2VuY29kZV93YWl0KGF2Y3R4LCBwaWMpOwo+IEBAIC03MTEs MTEgKzcyMSw1MiBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LAo+ICAgICAgZm9yIChidWYgPSBidWZfbGlzdDsgYnVmOyBidWYgPSBidWYtPm5l eHQpCj4gICAgICAgICAgdG90YWxfc2l6ZSArPSBidWYtPnNpemU7Cj4KPiAtICAgIGVyciA9IGZm X2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4LCBwa3QsIHRvdGFsX3NpemUsIDApOwo+IC0gICAgcHRy ID0gcGt0LT5kYXRhOwo+ICsgICAgLyoqIHJlcGFjayBhdjEgY29kZWQgZnJhbWUgZm9yIG5vdCBk aXNwbGF5IGFuZCByZXBlYXQgZnJhbWVzICovCj4gKyAgICBpZiAoYXZjdHgtPmNvZGVjX2lkID09 IEFWX0NPREVDX0lEX0FWMSkgewo+ICsgICAgICAgIGludCBkaXNwbGF5X2ZyYW1lID0gcGljLT5k aXNwbGF5X29yZGVyIDw9IHBpYy0+ZW5jb2RlX29yZGVyOwo+Cj4gLSAgICBpZiAoZXJyIDwgMCkK PiAtICAgICAgICBnb3RvIGZhaWxfbWFwcGVkOwo+ICsgICAgICAgIGlmIChkaXNwbGF5X2ZyYW1l KSB7Cj4gKyAgICAgICAgICAgIHRvdGFsX3NpemUgKz0gY3R4LT5oZWFkZXJfZGF0YV9zaXplOwo+ ICsgICAgICAgICAgICBlcnIgPSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCB0b3Rh bF9zaXplLCAwKTsKPiArICAgICAgICAgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgICAgICAg ICBnb3RvIGZhaWxfbWFwcGVkOwo+ICsgICAgICAgICAgICBwdHIgPSBwa3QtPmRhdGE7Cj4gKwo+ ICsgICAgICAgICAgICBpZiAoY3R4LT5oZWFkZXJfZGF0YV9zaXplKSB7Cj4gKyAgICAgICAgICAg ICAgICBtZW1jcHkocHRyLCBjdHgtPmhlYWRlcl9kYXRhLCBjdHgtPmhlYWRlcl9kYXRhX3NpemUp Owo+ICsgICAgICAgICAgICAgICAgcHRyICs9IGN0eC0+aGVhZGVyX2RhdGFfc2l6ZTsKPiArICAg ICAgICAgICAgICAgIGN0eC0+aGVhZGVyX2RhdGFfc2l6ZSA9IDA7Cj4gKyAgICAgICAgICAgIH0K PiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBjdHgtPmhlYWRlcl9kYXRhID0gYXZf cmVhbGxvYyhjdHgtPmhlYWRlcl9kYXRhLCB0b3RhbF9zaXplKTsKPiArICAgICAgICAgICAgaWYg KCFjdHgtPmhlYWRlcl9kYXRhKSB7Cj4gKyAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVO T01FTSk7Cj4gKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxfbWFwcGVkOwo+ICsgICAgICAgICAg ICB9Cj4gKyAgICAgICAgICAgIHB0ciA9IGN0eC0+aGVhZGVyX2RhdGE7Cj4gKyAgICAgICAgICAg IGN0eC0+aGVhZGVyX2RhdGFfc2l6ZSA9IHRvdGFsX3NpemU7Cj4gKwo+ICsgICAgICAgICAgICBp ZiAocGljLT50YWlsX3NpemUpIHsKPiArICAgICAgICAgICAgICAgIGlmIChjdHgtPnRhaWxfcGt0 LT5zaXplKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgZXJyID0gQVZFUlJPUihBVkVSUk9SX0JV Ryk7Cj4gKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBlZDsKPiArICAgICAgICAg ICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBlcnIgPSBmZl9nZXRfZW5jb2RlX2J1ZmZl cihhdmN0eCwgY3R4LT50YWlsX3BrdCwgcGljLT50YWlsX3NpemUsIDApOwo+ICsgICAgICAgICAg ICAgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBl ZDsKPiArCj4gKyAgICAgICAgICAgICAgICBtZW1jcHkoY3R4LT50YWlsX3BrdC0+ZGF0YSwgcGlj LT50YWlsX2RhdGEsIHBpYy0+dGFpbF9zaXplKTsKPiArICAgICAgICAgICAgICAgIHBrdF9wdHIg PSBjdHgtPnRhaWxfcGt0Owo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfSBl bHNlIHsKPiArICAgICAgICBlcnIgPSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCB0 b3RhbF9zaXplLCAwKTsKPiArICAgICAgICBwdHIgPSBwa3QtPmRhdGE7Cj4gKwo+ICsgICAgICAg IGlmIChlcnIgPCAwKQo+ICsgICAgICAgICAgICBnb3RvIGZhaWxfbWFwcGVkOwo+ICsgICAgfQo+ Cj4gICAgICBmb3IgKGJ1ZiA9IGJ1Zl9saXN0OyBidWY7IGJ1ZiA9IGJ1Zi0+bmV4dCkgewo+ICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiT3V0cHV0IGJ1ZmZlcjogJXUgYnl0 ZXMgIgo+IEBAIC03MjYsMTAgKzc3NywxMCBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRw dXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICAgICAgfQo+Cj4gICAgICBpZiAocGljLT50eXBl ID09IFBJQ1RVUkVfVFlQRV9JRFIpCj4gLSAgICAgICAgcGt0LT5mbGFncyB8PSBBVl9QS1RfRkxB R19LRVk7Cj4gKyAgICAgICAgcGt0X3B0ci0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZOwo+Cj4g LSAgICBwa3QtPnB0cyA9IHBpYy0+cHRzOwo+IC0gICAgcGt0LT5kdXJhdGlvbiA9IHBpYy0+ZHVy YXRpb247Cj4gKyAgICBwa3RfcHRyLT5wdHMgPSBwaWMtPnB0czsKPiArICAgIHBrdF9wdHItPmR1 cmF0aW9uID0gcGljLT5kdXJhdGlvbjsKPgo+ICAgICAgdmFzID0gdmFVbm1hcEJ1ZmZlcihjdHgt Pmh3Y3R4LT5kaXNwbGF5LCBwaWMtPm91dHB1dF9idWZmZXIpOwo+ICAgICAgaWYgKHZhcyAhPSBW QV9TVEFUVVNfU1VDQ0VTUykgewo+IEBAIC03NDIsOCArNzkzLDggQEAgc3RhdGljIGludCB2YWFw aV9lbmNvZGVfb3V0cHV0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiAgICAgIC8vIGZvciBuby1k ZWxheSBlbmNvZGVycyB0aGlzIGlzIGhhbmRsZWQgaW4gZ2VuZXJpYyBjb2RlYwo+ICAgICAgaWYg KGF2Y3R4LT5jb2RlYy0+Y2FwYWJpbGl0aWVzICYgQVZfQ09ERUNfQ0FQX0RFTEFZICYmCj4gICAg ICAgICAgYXZjdHgtPmZsYWdzICYgQVZfQ09ERUNfRkxBR19DT1BZX09QQVFVRSkgewo+IC0gICAg ICAgIHBrdC0+b3BhcXVlICAgICA9IHBpYy0+b3BhcXVlOwo+IC0gICAgICAgIHBrdC0+b3BhcXVl X3JlZiA9IHBpYy0+b3BhcXVlX3JlZjsKPiArICAgICAgICBwa3RfcHRyLT5vcGFxdWUgICAgID0g cGljLT5vcGFxdWU7Cj4gKyAgICAgICAgcGt0X3B0ci0+b3BhcXVlX3JlZiA9IHBpYy0+b3BhcXVl X3JlZjsKPiAgICAgICAgICBwaWMtPm9wYXF1ZV9yZWYgPSBOVUxMOwo+ICAgICAgfQo+Cj4gQEAg LTc1Miw2ICs4MDMsOSBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LAo+Cj4gICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1 dCByZWFkIGZvciBwaWMgJSJQUklkNjQiLyUiUFJJZDY0Ii5cbiIsCj4gICAgICAgICAgICAgcGlj LT5kaXNwbGF5X29yZGVyLCBwaWMtPmVuY29kZV9vcmRlcik7Cj4gKwo+ICsgICAgdmFhcGlfZW5j b2RlX3NldF9vdXRwdXRfdGltZXN0YW1wKGF2Y3R4LCBwaWMsIHBrdF9wdHIpOwo+ICsKPiAgICAg IHJldHVybiAwOwo+Cj4gIGZhaWxfbWFwcGVkOgo+IEBAIC0xMTI4LDkgKzExODIsMTkgQEAgc3Rh dGljIGludCB2YWFwaV9lbmNvZGVfcGlja19uZXh0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPgo+ ICAgICAgdmFhcGlfZW5jb2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgcGljLCAwLCAxLCAwKTsKPiAg ICAgIGlmIChwaWMtPnR5cGUgIT0gUElDVFVSRV9UWVBFX0lEUikgewo+IC0gICAgICAgIHZhYXBp X2VuY29kZV9hZGRfcmVmKGF2Y3R4LCBwaWMsIHN0YXJ0LAo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCwKPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiX2NvdW50ZXIgPiAwLCAwKTsKPiArICAgICAgICAvLyBUT0RPOiBhcHBs eSBib3RoIHByZXZpb3VzIGFuZCBmb3J3YXJkIG11bHRpIHJlZmVyZW5jZSBmb3IgYWxsIHZhYXBp IGVuY29kZXJzLgo+ICsgICAgICAgIC8vIEFuZCBMMC9MMSByZWZlcmVuY2UgZnJhbWUgbnVtYmVy IGNhbiBiZSBzZXQgZHluYW1pY2FsbHkgdGhyb3VnaCBxdWVyeQo+ICsgICAgICAgIC8vIFZBQ29u ZmlnQXR0cmliRW5jTWF4UmVmRnJhbWVzIGF0dHJpYnV0ZS4KPiArICAgICAgICBpZiAoYXZjdHgt PmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0FWMSkgewo+ICsgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgY3R4LT5uYl9uZXh0X3ByZXY7IGkrKykKPiArICAgICAgICAgICAgICAgIHZhYXBpX2Vu Y29kZV9hZGRfcmVmKGF2Y3R4LCBwaWMsIGN0eC0+bmV4dF9wcmV2W2ldLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYl9jb3VudGVyID4gMCwgMCk7 Cj4gKyAgICAgICAgfSBlbHNlCj4gKyAgICAgICAgICAgIHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2 Y3R4LCBwaWMsIHN0YXJ0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWMt PnR5cGUgPT0gUElDVFVSRV9UWVBFX1AsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJfY291bnRlciA+IDAsIDApOwo+ICsKPiAgICAgICAgICB2YWFwaV9lbmNvZGVfYWRkX3Jl ZihhdmN0eCwgcGljLCBjdHgtPm5leHRfcHJldltjdHgtPm5iX25leHRfcHJldiAtIDFdLCAwLCAw LCAxKTsKPiAgICAgIH0KPgo+IEBAIC0xMjkyLDYgKzEzNTYsMTkgQEAgaW50IGZmX3ZhYXBpX2Vu Y29kZV9yZWNlaXZlX3BhY2tldChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0ICpwa3Qp Cj4gICAgICBBVkZyYW1lICpmcmFtZSA9IGN0eC0+ZnJhbWU7Cj4gICAgICBpbnQgZXJyOwo+Cj4g K3N0YXJ0Ogo+ICsgICAgLyoqIGlmIG5vIEIgZnJhbWUgYmVmb3JlIHJlcGVhdCBQIGZyYW1lLCBz ZW50IHJlcGVhdCBQIGZyYW1lIG91dC4gKi8KPiArICAgIGlmIChhdmN0eC0+Y29kZWNfaWQgPT0g QVZfQ09ERUNfSURfQVYxICYmIGN0eC0+dGFpbF9wa3QtPnNpemUpIHsKPiArICAgICAgICBmb3Ig KFZBQVBJRW5jb2RlUGljdHVyZSAqdG1wID0gY3R4LT5waWNfc3RhcnQ7IHRtcDsgdG1wID0gdG1w LT5uZXh0KSB7Cj4gKyAgICAgICAgICAgIGlmICh0bXAtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0Ig JiYgdG1wLT5wdHMgPCBjdHgtPnRhaWxfcGt0LT5wdHMpCj4gKyAgICAgICAgICAgICAgICBicmVh azsKPiArICAgICAgICAgICAgZWxzZSBpZiAoIXRtcC0+bmV4dCkgewo+ICsgICAgICAgICAgICAg ICAgYXZfcGFja2V0X21vdmVfcmVmKHBrdCwgY3R4LT50YWlsX3BrdCk7Cj4gKyAgICAgICAgICAg ICAgICBnb3RvIGVuZDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr Cj4gICAgICBlcnIgPSBmZl9lbmNvZGVfZ2V0X2ZyYW1lKGF2Y3R4LCBmcmFtZSk7Cj4gICAgICBp ZiAoZXJyIDwgMCAmJiBlcnIgIT0gQVZFUlJPUl9FT0YpCj4gICAgICAgICAgcmV0dXJuIGVycjsK PiBAQCAtMTM1NiwxNyArMTQzMywyMSBAQCBpbnQgZmZfdmFhcGlfZW5jb2RlX3JlY2VpdmVfcGFj a2V0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKnBrdCkKPiAgICAgICAgICByZXR1 cm4gZXJyOwo+ICAgICAgfQo+Cj4gLSAgICB2YWFwaV9lbmNvZGVfc2V0X291dHB1dF90aW1lc3Rh bXAoYXZjdHgsIHBpYywgcGt0KTsKPiAtICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi T3V0cHV0IHBhY2tldDogcHRzICUiUFJJZDY0IiwgZHRzICUiUFJJZDY0IiwgIgo+IC0gICAgICAg ICAgICJzaXplICV1IGJ5dGVzLlxuIiwgcGt0LT5wdHMsIHBrdC0+ZHRzLCBwa3QtPnNpemUpOwo+ IC0KPiAgICAgIGN0eC0+b3V0cHV0X29yZGVyID0gcGljLT5lbmNvZGVfb3JkZXI7Cj4gICAgICB2 YWFwaV9lbmNvZGVfY2xlYXJfb2xkKGF2Y3R4KTsKPgo+ICsgICAgLyoqIGxvb3AgdG8gZ2V0IGFu IGF2YWlsYWJsZSBwa3QgaW4gZW5jb2RlciBmbHVzaGluZy4gKi8KPiArICAgIGlmIChjdHgtPmVu ZF9vZl9zdHJlYW0gJiYgIXBrdC0+c2l6ZSkKPiArICAgICAgICBnb3RvIHN0YXJ0Owo+ICsKPiAr ZW5kOgo+ICsgICAgaWYgKHBrdC0+c2l6ZSkKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19ERUJVRywgIk91dHB1dCBwYWNrZXQ6IHB0cyAlIlBSSWQ2NCIsIGR0cyAlIlBSSWQ2NCIsICIK PiArICAgICAgICAgICAgICAgInNpemUgJXUgYnl0ZXMuXG4iLCBwa3QtPnB0cywgcGt0LT5kdHMs IHBrdC0+c2l6ZSk7Cj4gKwo+ICAgICAgcmV0dXJuIDA7Cj4gIH0KPgo+IC0KPiAgc3RhdGljIGF2 X2NvbGQgdm9pZCB2YWFwaV9lbmNvZGVfYWRkX2dsb2JhbF9wYXJhbShBVkNvZGVjQ29udGV4dCAq YXZjdHgsIGludCB0eXBlLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCj4gIHsKPiBAQCAtMjY2Nyw2 ICsyNzQ4LDEyIEBAIGF2X2NvbGQgaW50IGZmX3ZhYXBpX2VuY29kZV9pbml0KEFWQ29kZWNDb250 ZXh0ICphdmN0eCkKPiAgICAgIGN0eC0+ZGV2aWNlID0gKEFWSFdEZXZpY2VDb250ZXh0KiljdHgt PmRldmljZV9yZWYtPmRhdGE7Cj4gICAgICBjdHgtPmh3Y3R4ID0gY3R4LT5kZXZpY2UtPmh3Y3R4 Owo+Cj4gKyAgICBjdHgtPnRhaWxfcGt0ID0gYXZfcGFja2V0X2FsbG9jKCk7Cj4gKyAgICBpZiAo IWN0eC0+dGFpbF9wa3QpIHsKPiArICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAg ICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiAgICAgIGVyciA9IHZhYXBpX2VuY29kZV9w cm9maWxlX2VudHJ5cG9pbnQoYXZjdHgpOwo+ICAgICAgaWYgKGVyciA8IDApCj4gICAgICAgICAg Z290byBmYWlsOwo+IEBAIC0yODU5LDkgKzI5NDYsMTEgQEAgYXZfY29sZCBpbnQgZmZfdmFhcGlf ZW5jb2RlX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiAgICAgIH0KPgo+ICAgICAgYXZf ZnJhbWVfZnJlZSgmY3R4LT5mcmFtZSk7Cj4gKyAgICBhdl9wYWNrZXRfZnJlZSgmY3R4LT50YWls X3BrdCk7Cj4KPiAgICAgIGF2X2ZyZWVwKCZjdHgtPmNvZGVjX3NlcXVlbmNlX3BhcmFtcyk7Cj4g ICAgICBhdl9mcmVlcCgmY3R4LT5jb2RlY19waWN0dXJlX3BhcmFtcyk7Cj4gKyAgICBhdl9mcmVl cCgmY3R4LT5oZWFkZXJfZGF0YSk7Cj4gICAgICBhdl9maWZvX2ZyZWVwMigmY3R4LT5lbmNvZGVf Zmlmbyk7Cj4KPiAgICAgIGF2X2J1ZmZlcl91bnJlZigmY3R4LT5yZWNvbl9mcmFtZXNfcmVmKTsK PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaCBiL2xpYmF2Y29kZWMvdmFh cGlfZW5jb2RlLmgKPiBpbmRleCBkNTQ1MmEzN2IzLi4wM2RmOGQ2ZDQ2IDEwMDY0NAo+IC0tLSBh L2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgKPiArKysgYi9saWJhdmNvZGVjL3ZhYXBpX2VuY29k ZS5oCj4gQEAgLTEzMyw2ICsxMzMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVQaWN0 dXJlIHsKPgo+ICAgICAgaW50ICAgICAgICAgIG5iX3NsaWNlczsKPiAgICAgIFZBQVBJRW5jb2Rl U2xpY2UgKnNsaWNlczsKPiArCj4gKyAgICAvKiogVGFpbCBkYXRhIG9mIGN1cnJlbnQgcGljLCB1 c2VkIG9ubHkgZm9yIHJlcGVhdCBoZWFkZXIgb2YgQVYxLiAqLwo+ICsgICAgY2hhciB0YWlsX2Rh dGFbTUFYX1BBUkFNX0JVRkZFUl9TSVpFXTsKPiArICAgIC8qKiBCeXRlIGxlbmd0aCBvZiB0YWls X2RhdGEuICovCj4gKyAgICBzaXplX3QgdGFpbF9zaXplOwo+ICB9IFZBQVBJRW5jb2RlUGljdHVy ZTsKPgo+ICB0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZVByb2ZpbGUgewo+IEBAIC0zNjcsNiAr MzcyLDEzIEBAIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlQ29udGV4dCB7Cj4gICAgICBBVkZp Zm8gICAgICAgICAgKmVuY29kZV9maWZvOwo+ICAgICAgLy8gTWF4IG51bWJlciBvZiBmcmFtZSBi dWZmZXJlZCBpbiBlbmNvZGVyLgo+ICAgICAgaW50ICAgICAgICAgICAgIGFzeW5jX2RlcHRoOwo+ ICsKPiArICAgIC8qKiBIZWFkIGRhdGEgZm9yIGN1cnJlbnQgb3V0cHV0IHBrdCwgdXNlZCBvbmx5 IGZvciBBVjEuICovCj4gKyAgICB2b2lkICAqaGVhZGVyX2RhdGE7Cj4gKyAgICBzaXplX3QgaGVh ZGVyX2RhdGFfc2l6ZTsKPiArCj4gKyAgICAvKiogU3RvcmUgYXYxIHJlcGVhdCBmcmFtZSBoZWFk ZXIgcGt0LiAqLwo+ICsgICAgQVZQYWNrZXQgKnRhaWxfcGt0Owo+ICB9IFZBQVBJRW5jb2RlQ29u dGV4dDsKPgo+ICBlbnVtIHsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVf YXYxLmMgYi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uMTYzNWIyNWJiNwo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuYwo+IEBAIC0wLDAgKzEsMTIyOCBAQAo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy Cj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK PiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAr ICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiAr ICovCj4gKwo+ICsjaW5jbHVkZSA8dmEvdmEuaD4KPiArI2luY2x1ZGUgPHZhL3ZhX2VuY19hdjEu aD4KPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL29wdC5oIgo+ICsKPiArI2luY2x1ZGUgImNic19hdjEuaCIKPiArI2luY2x1ZGUgInB1 dF9iaXRzLmgiCj4gKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiYXYx X3Byb2ZpbGVfbGV2ZWwuaCIKPiArI2luY2x1ZGUgInZhYXBpX2VuY29kZS5oIgo+ICsKPiArI2Rl ZmluZSBBVjFfTUFYX1FVQU5UIDI1NQo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVB VjFQaWN0dXJlIHsKPiArICAgIGludDY0X3QgbGFzdF9pZHJfZnJhbWU7Cj4gKyAgICBpbnQgc2xv dDsKPiArfSBWQUFQSUVuY29kZUFWMVBpY3R1cmU7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWQUFQ SUVuY29kZUFWMUNvbnRleHQgewo+ICsgICAgVkFBUElFbmNvZGVDb250ZXh0IGNvbW1vbjsKPiAr ICAgIEFWMVJhd09CVSBzaDsgLyoqPCBzZXF1ZW5jZSBoZWFkZXIuKi8KPiArICAgIEFWMVJhd09C VSBmaDsgLyoqPCBmcmFtZSBoZWFkZXIuKi8KPiArICAgIENvZGVkQml0c3RyZWFtQ29udGV4dCAq Y2JjOwo+ICsgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCBjdXJyZW50X29idTsKPiArICAgIFZB Q29uZmlnQXR0cmliVmFsRW5jQVYxIGF0dHI7Cj4gKyAgICBWQUNvbmZpZ0F0dHJpYlZhbEVuY0FW MUV4dDEgYXR0cl9leHQxOwo+ICsgICAgVkFDb25maWdBdHRyaWJWYWxFbmNBVjFFeHQyIGF0dHJf ZXh0MjsKPiArCj4gKyAgICBjaGFyIHNoX2RhdGFbTUFYX1BBUkFNX0JVRkZFUl9TSVpFXTsgLyoq PCBjb2RlZCBzZXF1ZW5jZSBoZWFkZXIgZGF0YS4gKi8KPiArICAgIHNpemVfdCBzaF9kYXRhX2xl bjsgLyoqPCBiaXQgbGVuZ3RoIG9mIHNoX2RhdGEuICovCj4gKyAgICBjaGFyIGZoX2RhdGFbTUFY X1BBUkFNX0JVRkZFUl9TSVpFXTsgLyoqPCBjb2RlZCBmcmFtZSBoZWFkZXIgZGF0YS4gKi8KPiAr ICAgIHNpemVfdCBmaF9kYXRhX2xlbjsgLyoqPCBiaXQgbGVuZ3RoIG9mIGZoX2RhdGEuICovCj4g Kwo+ICsgICAgdWludDhfdCB1bmlmb3JtX3RpbGU7Cj4gKyAgICB1aW50OF90IHVzZV8xMjh4MTI4 X3N1cGVyYmxvY2s7Cj4gKyAgICBpbnQgc2JfY29sczsKPiArICAgIGludCBzYl9yb3dzOwo+ICsg ICAgaW50IHRpbGVfY29sc19sb2cyOwo+ICsgICAgaW50IHRpbGVfcm93c19sb2cyOwo+ICsgICAg aW50IG1heF90aWxlX3dpZHRoX3NiOwo+ICsgICAgaW50IG1heF90aWxlX2hlaWdodF9zYjsKPiAr ICAgIHVpbnQ4X3Qgd2lkdGhfaW5fc2JzX21pbnVzXzFbQVYxX01BWF9USUxFX0NPTFNdOwo+ICsg ICAgdWludDhfdCBoZWlnaHRfaW5fc2JzX21pbnVzXzFbQVYxX01BWF9USUxFX1JPV1NdOwo+ICsK PiArICAgIGludCBtaW5fbG9nMl90aWxlX2NvbHM7Cj4gKyAgICBpbnQgbWF4X2xvZzJfdGlsZV9j b2xzOwo+ICsgICAgaW50IG1pbl9sb2cyX3RpbGVfcm93czsKPiArICAgIGludCBtYXhfbG9nMl90 aWxlX3Jvd3M7Cj4gKwo+ICsgICAgaW50IHFfaWR4X2lkcjsKPiArICAgIGludCBxX2lkeF9wOwo+ ICsgICAgaW50IHFfaWR4X2I7Cj4gKwo+ICsgICAgLyoqIHVzZXIgb3B0aW9ucyAqLwo+ICsgICAg aW50IHByb2ZpbGU7Cj4gKyAgICBpbnQgbGV2ZWw7Cj4gKyAgICBpbnQgdGllcjsKPiArICAgIGlu dCB0aWxlX2NvbHMsIHRpbGVfcm93czsKPiArICAgIGludCB0aWxlX2dyb3VwczsKPiArfSBWQUFQ SUVuY29kZUFWMUNvbnRleHQ7Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2Rl X2F2MV9jb25maWd1cmUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7Cj4gKyAgICBWQUFQSUVu Y29kZUNvbnRleHQgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgVkFBUElFbmNv ZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIGludCByZXQ7Cj4g Kwo+ICsgICAgcmV0ID0gZmZfY2JzX2luaXQoJnByaXYtPmNiYywgQVZfQ09ERUNfSURfQVYxLCBh dmN0eCk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiAr ICAgIGlmIChjdHgtPnJjX21vZGUtPnF1YWxpdHkpIHsKPiArICAgICAgICBwcml2LT5xX2lkeF9w ID0gYXZfY2xpcChjdHgtPnJjX3F1YWxpdHksIDAsIEFWMV9NQVhfUVVBTlQpOwo+ICsgICAgICAg IGlmIChmYWJzKGF2Y3R4LT5pX3F1YW50X2ZhY3RvcikgPiAwLjApCj4gKyAgICAgICAgICAgIHBy aXYtPnFfaWR4X2lkciA9Cj4gKyAgICAgICAgICAgICAgICBhdl9jbGlwKChmYWJzKGF2Y3R4LT5p X3F1YW50X2ZhY3RvcikgKiBwcml2LT5xX2lkeF9wICArCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBhdmN0eC0+aV9xdWFudF9vZmZzZXQpICsgMC41LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAwLCBBVjFfTUFYX1FVQU5UKTsKPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgIHBy aXYtPnFfaWR4X2lkciA9IHByaXYtPnFfaWR4X3A7Cj4gKwo+ICsgICAgICAgIGlmIChmYWJzKGF2 Y3R4LT5iX3F1YW50X2ZhY3RvcikgPiAwLjApCj4gKyAgICAgICAgICAgIHByaXYtPnFfaWR4X2Ig PQo+ICsgICAgICAgICAgICAgICAgYXZfY2xpcCgoZmFicyhhdmN0eC0+Yl9xdWFudF9mYWN0b3Ip ICogcHJpdi0+cV9pZHhfcCAgKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmJf cXVhbnRfb2Zmc2V0KSArIDAuNSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgMCwgQVYxX01B WF9RVUFOVCk7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBwcml2LT5xX2lkeF9iID0g cHJpdi0+cV9pZHhfcDsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgLyoqIEFyYml0cmFyeSB2 YWx1ZSAqLwo+ICsgICAgICAgIHByaXYtPnFfaWR4X2lkciA9IHByaXYtPnFfaWR4X3AgPSBwcml2 LT5xX2lkeF9iID0gMTI4Owo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfYWRkX29idShBVkNvZGVjQ29udGV4dCAqYXZj dHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkQml0c3RyZWFt RnJhZ21lbnQgKmF1LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 OF90IHR5cGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9i dV91bml0KQo+ICt7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIHJldCA9IGZmX2Nic19pbnNl cnRfdW5pdF9jb250ZW50KGF1LCAtMSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGUsIG9idV91bml0LCBOVUxMKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gYWRkIE9CVSB1bml0 OiAiCj4gKyAgICAgICAgICAgICAgICJ0eXBlID0gJWQuXG4iLCB0eXBlKTsKPiArICAgICAgICBy ZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfb2J1KEFWQ29kZWNDb250ZXh0ICphdmN0eCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhLCBzaXpl X3QgKmRhdGFfbGVuLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv ZGVkQml0c3RyZWFtRnJhZ21lbnQgKmJzKQo+ICt7Cj4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRl eHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBy ZXQgPSBmZl9jYnNfd3JpdGVfZnJhZ21lbnRfZGF0YShwcml2LT5jYmMsIGJzKTsKPiArICAgIGlm IChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgdG8gd3JpdGUgcGFja2VkIGhlYWRlci5cbiIpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4g KyAgICB9Cj4gKwo+ICsgICAgaWYgKChzaXplX3QpOCAqIE1BWF9QQVJBTV9CVUZGRVJfU0laRSA8 IDggKiBicy0+ZGF0YV9zaXplIC0gYnMtPmRhdGFfYml0X3BhZGRpbmcpIHsKPiArICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFjY2VzcyB1bml0IHRvbyBsYXJnZTogIgo+ICsg ICAgICAgICAgICAgICAiJXp1IDwgJXp1LlxuIiwgKHNpemVfdCk4ICogTUFYX1BBUkFNX0JVRkZF Ul9TSVpFLAo+ICsgICAgICAgICAgICAgICA4ICogYnMtPmRhdGFfc2l6ZSAtIGJzLT5kYXRhX2Jp dF9wYWRkaW5nKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TUEMpOwo+ICsgICAgfQo+ ICsKPiArICAgIG1lbWNweShkYXRhLCBicy0+ZGF0YSwgYnMtPmRhdGFfc2l6ZSk7Cj4gKyAgICAq ZGF0YV9sZW4gPSA4ICogYnMtPmRhdGFfc2l6ZSAtIGJzLT5kYXRhX2JpdF9wYWRkaW5nOwo+ICsK PiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdldF9yZWxhdGl2ZV9kaXN0 KGNvbnN0IEFWMVJhd1NlcXVlbmNlSGVhZGVyICpzZXEsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQo+ICt7Cj4gKyAgICB1bnNp Z25lZCBpbnQgZGlmZiwgbTsKPiArICAgIGlmICghc2VxLT5lbmFibGVfb3JkZXJfaGludCkKPiAr ICAgICAgICByZXR1cm4gMDsKPiArICAgIGRpZmYgPSBhIC0gYjsKPiArICAgIG0gPSAxIDw8IHNl cS0+b3JkZXJfaGludF9iaXRzX21pbnVzXzE7Cj4gKyAgICBkaWZmID0gKGRpZmYgJiAobSAtIDEp KSAtIChkaWZmICYgbSk7Cj4gKyAgICByZXR1cm4gZGlmZjsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB3cml0ZV9ucyhQdXRCaXRDb250ZXh0ICpwYmMsIHVpbnQzMl90IG4sIHVpbnQzMl90IHZhbHVl KQo+ICt7Cj4gKyAgICB1aW50MzJfdCB3LCBtLCB2LCBleHRyYV9iaXQ7Cj4gKwo+ICsgICAgdyA9 IGF2X2xvZzIobikgKyAxOwo+ICsgICAgbSA9ICgxIDw8IHcpIC0gbjsKPiArCj4gKyAgICBpZiAo dmFsdWUgPCBtKSB7Cj4gKyAgICAgICAgdiA9IHZhbHVlOwo+ICsgICAgICAgIHB1dF9iaXRzKHBi YywgdyAtIDEsIHYpOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICB2ID0gbSArICgodmFsdWUg LSBtKSA+PiAxKTsKPiArICAgICAgICBleHRyYV9iaXQgPSAodmFsdWUgLSBtKSAmIDE7Cj4gKyAg ICAgICAgcHV0X2JpdHMocGJjLCB3IC0gMSwgdik7Cj4gKyAgICAgICAgcHV0X2JpdHMocGJjLCAx LCBleHRyYV9iaXQpOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsv KioKPiArICogVGhpcyBBUEkgcHJvdmlkZSB0aGUgbWlubXVtIGltcGxlbWVudGlvbiBhY2NvcmRp bmcgY3VycmVudCBlbmFibGVkIGZlYXR1cmVzCj4gKyAqIGluIGZyYW1lIGhlYWRlci4gSWYgbW9y ZSBmZWF0dXJlcyB3aWxsIGVuYWJsZSBpbiBmdXJ0dXJlLCBwbGVhc2UgbWFrZSBzdXJlCj4gKyAq IHRoZSByZWxhdGl2ZSBmbGFncyBvZiBmZWF0dXJlcyBzaG91bGQgYmUgcGFja2VkIGNvcnJlY3Rs eSBpbnRvIGZyYW1lIGhlYWRlcgo+ICsgKiBvYnUgaW4gdGhpcyBBUEkuCj4gKyAqLwo+ICtzdGF0 aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfZnJhbWVfaGVhZGVyKEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhLCBzaXplX3QgKmRhdGFfbGVuKQo+ICt7Cj4g KyAgICBWQUFQSUVuY29kZUNvbnRleHQgICAgICAgICAgICAgICpjdHggPSBhdmN0eC0+cHJpdl9k YXRhOwo+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAgICAgICAgICpwcml2ID0gYXZjdHgt PnByaXZfZGF0YTsKPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICAgICAgKmZoX29idSA9 ICZwcml2LT5maDsKPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICAgICAgKnNoX29idSA9 ICZwcml2LT5zaDsKPiArICAgIEFWMVJhd0ZyYW1lSGVhZGVyICAgICAgICAgICAgICAgICpmaCA9 ICZmaF9vYnUtPm9idS5mcmFtZS5oZWFkZXI7Cj4gKyAgICBBVjFSYXdTZXF1ZW5jZUhlYWRlciAg ICAgICAgICAgICAqc2ggPSAmc2hfb2J1LT5vYnUuc2VxdWVuY2VfaGVhZGVyOwo+ICsgICAgVkFF bmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxICp2cGljID0gcGljLT5jb2RlY19waWN0dXJlX3Bh cmFtczsKPiArICAgIFB1dEJpdENvbnRleHQgcGJjLCBwYmNfdG1wOwo+ICsgICAgdWludDhfdCBi eXRlOwo+ICsgICAgaW50IHFpbmRleCwgY29kZWRfbG9zc2xlc3M7Cj4gKyAgICBpbnQgaWRfbGVu LCBmcmFtZV9pc19pbnRyYSwgc2tpcF9tb2RlX2FsbG93ZWQ7Cj4gKyAgICBpbnQgc3RhcnQsIHBh eWxvYWRfYml0cywgb2J1X3NpemUsIG9idV9zaXplX2xlbjsKPiArICAgIGludCBxaW5kZXhfb2Zm c2V0LCBsb29wZmlsdGVyX29mZnNldDsKPiArICAgIGludCBjZGVmX3N0YXJ0X29mZnNldCwgY2Rl Zl9lbmRfb2Zmc2V0Owo+ICsgICAgaW50IGk7Cj4gKwo+ICsgICAgaW5pdF9wdXRfYml0cygmcGJj LCBkYXRhLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOwo+ICsKPiArICAgIC8qKiBvYnUgaGVhZGVy ICovCj4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaF9vYnUtPmhlYWRlci5vYnVfZm9yYmlkZGVu X2JpdCk7Cj4gKyAgICBwdXRfYml0cygmcGJjLCA0LCBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSk7 Cj4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaF9vYnUtPmhlYWRlci5vYnVfZXh0ZW5zaW9uX2Zs YWcpOwo+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXpl X2ZpZWxkKTsKPiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoX29idS0+aGVhZGVyLm9idV9yZXNl cnZlZF8xYml0KTsKPiArCj4gKyAgICAvKiogcmVjb3JkIHBiYyBzdGF0dXMgdG8gcmUtd3JpdGUg b2J1IHNpemUgbGF0ZXIuICovCj4gKyAgICBpZiAoZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXpl X2ZpZWxkKSB7Cj4gKyAgICAgICAgcGJjX3RtcCA9IHBiYzsKPiArICAgICAgICBwdXRfYml0czMy KCZwYmMsIDApOwo+ICsgICAgICAgIHB1dF9iaXRzMzIoJnBiYywgMCk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgc3RhcnQgPSBwdXRfYml0c19jb3VudCgmcGJjKTsKPiArCj4gKyAgICAvKiogdW5jb21w cmVzc2VkX2hlYWRlcigpICovCj4gKyAgICBpZiAoc2gtPmZyYW1lX2lkX251bWJlcnNfcHJlc2Vu dF9mbGFnKQo+ICsgICAgICAgIGlkX2xlbiA9IHNoLT5hZGRpdGlvbmFsX2ZyYW1lX2lkX2xlbmd0 aF9taW51c18xICsKPiArICAgICAgICAgICAgICAgICBzaC0+ZGVsdGFfZnJhbWVfaWRfbGVuZ3Ro X21pbnVzXzIgKyAzOwo+ICsKPiArICAgIGZyYW1lX2lzX2ludHJhID0gKGZoLT5mcmFtZV90eXBl ID09IEFWMV9GUkFNRV9LRVkgfHwKPiArICAgICAgICAgICAgICAgICAgICAgIGZoLT5mcmFtZV90 eXBlID09IEFWMV9GUkFNRV9JTlRSQV9PTkxZKTsKPiArICAgIGlmICghc2gtPnJlZHVjZWRfc3Rp bGxfcGljdHVyZV9oZWFkZXIpIHsKPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+c2hv d19leGlzdGluZ19mcmFtZSk7Cj4gKyAgICAgICAgaWYgKGZoLT5zaG93X2V4aXN0aW5nX2ZyYW1l KSB7Cj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDMsIGZoLT5mcmFtZV90b19zaG93X21h cF9pZHgpOwo+ICsgICAgICAgICAgICBnb3RvIHRyYWlsaW5nX2JpdHM7Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIGlmIChzaC0+ZnJhbWVfaWRfbnVtYmVyc19wcmVzZW50X2ZsYWcpCj4gKyAgICAg ICAgICAgIHB1dF9iaXRzKCZwYmMsIGlkX2xlbiwgZmgtPmRpc3BsYXlfZnJhbWVfaWQpOwo+ICsK PiArICAgICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+ZnJhbWVfdHlwZSk7Cj4gKyAgICAgICAg cHV0X2JpdHMoJnBiYywgMSwgZmgtPnNob3dfZnJhbWUpOwo+ICsgICAgICAgIGlmICghZmgtPnNo b3dfZnJhbWUpCj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5zaG93YWJsZV9m cmFtZSk7Cj4gKwo+ICsgICAgICAgIGlmICghKGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9T V0lUQ0ggfHwKPiArICAgICAgICAgICAgKGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkg JiYgZmgtPnNob3dfZnJhbWUpKSkKPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgt PmVycm9yX3Jlc2lsaWVudF9tb2RlKTsKPiArICAgIH0KPiArCj4gKyAgICBwdXRfYml0cygmcGJj LCAxLCBmaC0+ZGlzYWJsZV9jZGZfdXBkYXRlKTsKPiArICAgIGlmIChzaC0+c2VxX2ZvcmNlX3Nj cmVlbl9jb250ZW50X3Rvb2xzID09IEFWMV9TRUxFQ1RfU0NSRUVOX0NPTlRFTlRfVE9PTFMpCj4g KyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmFsbG93X3NjcmVlbl9jb250ZW50X3Rvb2xz KTsKPiArCj4gKyAgICBpZiAoZmgtPmFsbG93X3NjcmVlbl9jb250ZW50X3Rvb2xzICYmIHNoLT5z ZXFfZm9yY2VfaW50ZWdlcl9tdiA9PSBBVjFfU0VMRUNUX0lOVEVHRVJfTVYpCj4gKyAgICAgICAg cHV0X2JpdHMoJnBiYywgMSwgZmgtPmZvcmNlX2ludGVnZXJfbXYpOwo+ICsKPiArICAgIGlmIChz aC0+ZnJhbWVfaWRfbnVtYmVyc19wcmVzZW50X2ZsYWcpCj4gKyAgICAgICAgcHV0X2JpdHMoJnBi YywgaWRfbGVuLCBmaC0+Y3VycmVudF9mcmFtZV9pZCk7Cj4gKwo+ICsgICAgaWYgKGZoLT5mcmFt ZV90eXBlICE9IEFWMV9GUkFNRV9TV0lUQ0ggJiYgIXNoLT5yZWR1Y2VkX3N0aWxsX3BpY3R1cmVf aGVhZGVyKQo+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5mcmFtZV9zaXplX292ZXJy aWRlX2ZsYWcpOwo+ICsKPiArICAgIGlmIChzaC0+ZW5hYmxlX29yZGVyX2hpbnQpCj4gKyAgICAg ICAgcHV0X2JpdHMoJnBiYywgc2gtPm9yZGVyX2hpbnRfYml0c19taW51c18xICsgMSwgZmgtPm9y ZGVyX2hpbnQpOwo+ICsKPiArICAgIGlmICghKGZyYW1lX2lzX2ludHJhIHx8IGZoLT5lcnJvcl9y ZXNpbGllbnRfbW9kZSkpCj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMywgZmgtPnByaW1hcnlf cmVmX2ZyYW1lKTsKPiArCj4gKyAgICBpZiAoIShmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVf U1dJVENIIHx8Cj4gKyAgICAgICAgZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSAmJiBm aC0+c2hvd19mcmFtZSkpCj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgOCwgZmgtPnJlZnJlc2hf ZnJhbWVfZmxhZ3MpOwo+ICsKPiArICAgIGlmIChmcmFtZV9pc19pbnRyYSkgewo+ICsgICAgICAg IC8qKiByZW5kZXJfc2l6ZSgpICovCj4gKyAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5y ZW5kZXJfYW5kX2ZyYW1lX3NpemVfZGlmZmVyZW50KTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAg ICAgaWYgKCFmcmFtZV9pc19pbnRyYSAmJiBzaC0+ZW5hYmxlX29yZGVyX2hpbnQpCj4gKyAgICAg ICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5mcmFtZV9yZWZzX3Nob3J0X3NpZ25hbGluZyk7 Cj4gKwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykg ewo+ICsgICAgICAgICAgICBpZiAoIWZoLT5mcmFtZV9yZWZzX3Nob3J0X3NpZ25hbGluZykKPiAr ICAgICAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDMsIGZoLT5yZWZfZnJhbWVfaWR4W2ldKTsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICghKGZoLT5mcmFtZV9zaXplX292ZXJyaWRl X2ZsYWcgJiYgIWZoLT5lcnJvcl9yZXNpbGllbnRfbW9kZSkpCj4gKyAgICAgICAgICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT5yZW5kZXJfYW5kX2ZyYW1lX3NpemVfZGlmZmVyZW50KTsKPiArCj4g KyAgICAgICAgaWYgKCFmaC0+Zm9yY2VfaW50ZWdlcl9tdikKPiArICAgICAgICAgICAgcHV0X2Jp dHMoJnBiYywgMSwgZmgtPmFsbG93X2hpZ2hfcHJlY2lzaW9uX212KTsKPiArCj4gKyAgICAgICAg LyoqIHJlYWRfaW50ZXJwb2xhdGlvbl9maWx0ZXIoKSAqLwo+ICsgICAgICAgIHB1dF9iaXRzKCZw YmMsIDEsIGZoLT5pc19maWx0ZXJfc3dpdGNoYWJsZSk7Cj4gKyAgICAgICAgaWYgKCFmaC0+aXNf ZmlsdGVyX3N3aXRjaGFibGUpCj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5p bnRlcnBvbGF0aW9uX2ZpbHRlcik7Cj4gKwo+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZo LT5pc19tb3Rpb25fbW9kZV9zd2l0Y2hhYmxlKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoIShz aC0+cmVkdWNlZF9zdGlsbF9waWN0dXJlX2hlYWRlciB8fCBmaC0+ZGlzYWJsZV9jZGZfdXBkYXRl KSkKPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGlzYWJsZV9mcmFtZV9lbmRfdXBk YXRlX2NkZik7Cj4gKwo+ICsgICAgLyoqIHRpbGVfaW5mbygpICovCj4gKyAgICBwdXRfYml0cygm cGJjLCAxLCBmaC0+dW5pZm9ybV90aWxlX3NwYWNpbmdfZmxhZyk7Cj4gKyAgICBpZiAoZmgtPnVu aWZvcm1fdGlsZV9zcGFjaW5nX2ZsYWcpIHsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJp di0+dGlsZV9jb2xzX2xvZzIgLSBwcml2LT5taW5fbG9nMl90aWxlX2NvbHM7IGkrKykgewo+ICsg ICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCAxKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAg aWYgKHByaXYtPnRpbGVfY29sc19sb2cyIDwgcHJpdi0+bWF4X2xvZzJfdGlsZV9jb2xzKQo+ICsg ICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCAwKTsKPiArCj4gKyAgICAgICAgZm9yIChpID0g MDsgaSA8IHByaXYtPnRpbGVfcm93c19sb2cyIC0gcHJpdi0+bWluX2xvZzJfdGlsZV9yb3dzOyBp KyspIHsKPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIGlmIChwcml2LT50aWxlX3Jvd3NfbG9nMiA8IHByaXYtPm1heF9sb2cyX3RpbGVf cm93cykKPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7Cj4gKyAgICB9IGVsc2Ug ewo+ICsgICAgICAgIGludCBzdGFydF9zYiA9IDA7Cj4gKyAgICAgICAgaW50IG1heF93aWR0aCwg bWF4X2hlaWdodDsKPiArICAgICAgICBmb3IgKGkgPSAwOyBzdGFydF9zYiA8IHByaXYtPnNiX2Nv bHM7IGkrKykgewo+ICsgICAgICAgICAgICBtYXhfd2lkdGggPSBGRk1JTihwcml2LT5zYl9jb2xz IC0gc3RhcnRfc2IsIHByaXYtPm1heF90aWxlX3dpZHRoX3NiKTsKPiArICAgICAgICAgICAgd3Jp dGVfbnMoJnBiYywgbWF4X3dpZHRoLCBmaC0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0pOwo+ICsg ICAgICAgICAgICBzdGFydF9zYiArPSBmaC0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gKyAxOwo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgc3RhcnRfc2IgPSAwOwo+ICsgICAgICAgIGZvciAo aSA9IDA7IHN0YXJ0X3NiIDwgcHJpdi0+c2Jfcm93czsgaSsrKSB7Cj4gKyAgICAgICAgICAgIG1h eF9oZWlnaHQgPSBGRk1JTihwcml2LT5zYl9yb3dzIC0gc3RhcnRfc2IsIHByaXYtPm1heF90aWxl X2hlaWdodF9zYik7Cj4gKyAgICAgICAgICAgIHdyaXRlX25zKCZwYmMsIG1heF9oZWlnaHQsIGZo LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0pOwo+ICsgICAgICAgICAgICBzdGFydF9zYiArPSBm aC0+aGVpZ2h0X2luX3Nic19taW51c18xW2ldICsgMTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYgKHByaXYtPnRpbGVfY29sc19sb2cyIHx8IHByaXYtPnRpbGVfcm93c19sb2cy KSB7Cj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgcHJpdi0+dGlsZV9jb2xzX2xvZzIgKyBwcml2 LT50aWxlX3Jvd3NfbG9nMiwgZmgtPmNvbnRleHRfdXBkYXRlX3RpbGVfaWQpOwo+ICsgICAgICAg IHB1dF9iaXRzKCZwYmMsIDIsIGZoLT50aWxlX3NpemVfYnl0ZXNfbWludXMxKTsKPiArICAgIH0K PiArCj4gKyAgICBxaW5kZXhfb2Zmc2V0ID0gcHV0X2JpdHNfY291bnQoJnBiYyk7Cj4gKyAgICAv KiogcXVhbnRpemF0aW9uX3BhcmFtcygpICovCj4gKyAgICBwdXRfYml0cygmcGJjLCA4LCBmaC0+ YmFzZV9xX2lkeCk7Cj4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGVsdGFfcV95X2RjKTsK PiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5kZWx0YV9xX3VfZGMpOwo+ICsgICAgcHV0X2Jp dHMoJnBiYywgMSwgZmgtPmRlbHRhX3FfdV9hYyk7Cj4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBm aC0+dXNpbmdfcW1hdHJpeCk7Cj4gKwo+ICsgICAgLyoqIHNlZ21lbnRhdGlvbl9wYXJhbXMoKSAq Lwo+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnNlZ21lbnRhdGlvbl9lbmFibGVkKTsKPiAr Cj4gKyAgICAvKiogZGVsdGFfcV9wYXJhbXMoKSAqLwo+ICsgICAgaWYgKGZoLT5iYXNlX3FfaWR4 KQo+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5kZWx0YV9xX3ByZXNlbnQpOwo+ICsg ICAgaWYgKGZoLT5kZWx0YV9xX3ByZXNlbnQpCj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMiwg ZmgtPmRlbHRhX3FfcmVzKTsKPiArCj4gKyAgICAvKiogZGVsdGFfbGZfcGFyYW1zKCkgKi8KPiAr ICAgIGlmIChmaC0+ZGVsdGFfcV9wcmVzZW50KSB7Cj4gKyAgICAgICAgaWYgKCFmaC0+YWxsb3df aW50cmFiYykKPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX2xmX3By ZXNlbnQpOwo+ICsgICAgICAgIGlmIChmaC0+ZGVsdGFfbGZfcHJlc2VudCkgewo+ICsgICAgICAg ICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+ZGVsdGFfbGZfcmVzKTsKPiArICAgICAgICAgICAg cHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX2xmX211bHRpKTsKPiArICAgICAgICB9Cj4gKyAg ICB9Cj4gKwo+ICsgICAgLyoqIGNvZGVsb3NzbGVzcyAqLwo+ICsgICAgY29kZWRfbG9zc2xlc3Mg PSAxOwo+ICsgICAgZm9yIChpID0gMDsgaSA8IEFWMV9NQVhfU0VHTUVOVFM7IGkrKykgewo+ICsg ICAgICAgIGlmIChmaC0+c2VnbWVudGF0aW9uX2VuYWJsZWQgJiYgZmgtPmZlYXR1cmVfZW5hYmxl ZFtpXVtBVjFfU0VHX0xWTF9BTFRfUV0pCj4gKyAgICAgICAgICAgIHFpbmRleCA9IGZoLT5iYXNl X3FfaWR4ICsgZmgtPmZlYXR1cmVfdmFsdWVbaV1bQVYxX1NFR19MVkxfQUxUX1FdOwo+ICsgICAg ICAgIGVsc2UKPiArICAgICAgICAgICAgcWluZGV4ID0gZmgtPmJhc2VfcV9pZHg7Cj4gKyAgICAg ICAgcWluZGV4ID0gYXZfY2xpcF91aW50cDIocWluZGV4LCA4KTsKPiArCj4gKyAgICAgICAgaWYg KHFpbmRleCB8fCBmaC0+ZGVsdGFfcV95X2RjIHx8IGZoLT5kZWx0YV9xX3VfYWMgfHwgZmgtPmRl bHRhX3FfdV9kYyB8fAo+ICsgICAgICAgICAgICBmaC0+ZGVsdGFfcV92X2FjIHx8IGZoLT5kZWx0 YV9xX3ZfZGMpCj4gKyAgICAgICAgICAgIGNvZGVkX2xvc3NsZXNzID0gMDsKPiArICAgIH0KPiAr Cj4gKyAgICBsb29wZmlsdGVyX29mZnNldCA9IHB1dF9iaXRzX2NvdW50KCZwYmMpOwo+ICsgICAg LyoqIGxvb3BfZmlsdGVyX3BhcmFtcygpICovCj4gKyAgICBpZiAoIShjb2RlZF9sb3NzbGVzcyB8 fCBmaC0+YWxsb3dfaW50cmFiYykpIHsKPiArICAgICAgICBwdXRfYml0cygmcGJjLCA2LCBmaC0+ bG9vcF9maWx0ZXJfbGV2ZWxbMF0pOwo+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDYsIGZoLT5s b29wX2ZpbHRlcl9sZXZlbFsxXSk7Cj4gKyAgICAgICAgaWYgKGZoLT5sb29wX2ZpbHRlcl9sZXZl bFswXSB8fCBmaC0+bG9vcF9maWx0ZXJfbGV2ZWxbMV0pIHsKPiArICAgICAgICAgICAgcHV0X2Jp dHMoJnBiYywgNiwgZmgtPmxvb3BfZmlsdGVyX2xldmVsWzJdKTsKPiArICAgICAgICAgICAgcHV0 X2JpdHMoJnBiYywgNiwgZmgtPmxvb3BfZmlsdGVyX2xldmVsWzNdKTsKPiArICAgICAgICB9Cj4g KyAgICAgICAgcHV0X2JpdHMoJnBiYywgMywgZmgtPmxvb3BfZmlsdGVyX3NoYXJwbmVzcyk7Cj4g KyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmxvb3BfZmlsdGVyX2RlbHRhX2VuYWJsZWQp Owo+ICsgICAgfQo+ICsKPiArICAgIGNkZWZfc3RhcnRfb2Zmc2V0ID0gcHV0X2JpdHNfY291bnQo JnBiYyk7Cj4gKyAgICAvKiogY2RlZl9wYXJhbXMoKSAqLwo+ICsgICAgaWYgKCEoY29kZWRfbG9z c2xlc3MgfHwgZmgtPmFsbG93X2ludHJhYmMgfHwgIXNoLT5lbmFibGVfY2RlZikpIHsKPiArICAg ICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+Y2RlZl9kYW1waW5nX21pbnVzXzMpOwo+ICsgICAg ICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5jZGVmX2JpdHMpOwo+ICsgICAgICAgIGZvciAoaSA9 IDA7IGkgPCAoMSA8PCBmaC0+Y2RlZl9iaXRzKTsgaSsrKSB7Cj4gKyAgICAgICAgICAgIHB1dF9i aXRzKCZwYmMsIDQsIGZoLT5jZGVmX3lfcHJpX3N0cmVuZ3RoW2ldKTsKPiArICAgICAgICAgICAg cHV0X2JpdHMoJnBiYywgMiwgZmgtPmNkZWZfeV9zZWNfc3RyZW5ndGhbaV0pOwo+ICsgICAgICAg ICAgICBwdXRfYml0cygmcGJjLCA0LCBmaC0+Y2RlZl91dl9wcmlfc3RyZW5ndGhbaV0pOwo+ICsg ICAgICAgICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+Y2RlZl91dl9zZWNfc3RyZW5ndGhbaV0p Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIGNkZWZfZW5kX29mZnNldCA9IHB1dF9iaXRz X2NvdW50KCZwYmMpOwo+ICsKPiArICAgIC8qKiByZWFkX3R4X21vZGUoKSAqLwo+ICsgICAgaWYg KGZoLT50eF9tb2RlID09IEFWMV9UWF9NT0RFX1NFTEVDVCkKPiArICAgICAgICBwdXRfYml0cygm cGJjLCAxLCAxKTsKPiArICAgIGVsc2UKPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCAwKTsK PiArCj4gKyAgICAvKiogZnJhbWVfcmVmZXJlbmNlX21vZGUoKSAqLwo+ICsgICAgaWYgKCFmcmFt ZV9pc19pbnRyYSkKPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+cmVmZXJlbmNlX3Nl bGVjdCk7Cj4gKwo+ICsgICAgLyoqIHNraXBfbW9kZV9wYXJhbXMoKSAqLwo+ICsgICAgaWYgKGZy YW1lX2lzX2ludHJhIHx8ICFmaC0+cmVmZXJlbmNlX3NlbGVjdCB8fCAhc2gtPmVuYWJsZV9vcmRl cl9oaW50KQo+ICsgICAgICAgIHNraXBfbW9kZV9hbGxvd2VkID0gMDsKPiArICAgIGVsc2Ugewo+ ICsgICAgICAgIGludCBmb3J3YXJkX2lkeCwgYmFja3dhcmRfaWR4Owo+ICsgICAgICAgIGludCBy ZWZfaGludCwgZm9yd2FyZF9oaW50LCBiYWNrd2FyZF9oaW50Owo+ICsKPiArICAgICAgICBmb3J3 YXJkX2lkeCA9IC0xOwo+ICsgICAgICAgIGJhY2t3YXJkX2lkeCA9IC0xOwo+ICsKPiArICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1FOyBpKyspIHsKPiArICAgICAgICAg ICAgcmVmX2hpbnQgPSBmaC0+cmVmX29yZGVyX2hpbnRbZmgtPnJlZl9mcmFtZV9pZHhbaV1dOwo+ ICsgICAgICAgICAgICBpZiAoZ2V0X3JlbGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBmaC0+b3Jk ZXJfaGludCkgPCAwKSB7Cj4gKyAgICAgICAgICAgICAgICBpZiAoZm9yd2FyZF9pZHggPCAwIHx8 IGdldF9yZWxhdGl2ZV9kaXN0KHNoLCByZWZfaGludCwgZm9yd2FyZF9pZHgpID4gMCkgewo+ICsg ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaWR4ID0gaTsKPiArICAgICAgICAgICAgICAgICAg ICBmb3J3YXJkX2hpbnQgPSByZWZfaGludDsKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgfSBlbHNlIGlmIChnZXRfcmVsYXRpdmVfZGlzdChzaCwgcmVmX2hpbnQsIGZoLT5vcmRl cl9oaW50KSA+IDApIHsKPiArICAgICAgICAgICAgICAgIGlmIChiYWNrd2FyZF9pZHggPCAwIHx8 IGdldF9yZWxhdGl2ZV9kaXN0KHNoLCByZWZfaGludCwgYmFja3dhcmRfaGludCkgPCAwKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgYmFja3dhcmRfaWR4ID0gaTsKPiArICAgICAgICAgICAgICAg ICAgICBiYWNrd2FyZF9oaW50ID0gcmVmX2hpbnQ7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAg ICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGZvcndhcmRfaWR4IDwgMCkK PiArICAgICAgICAgICAgc2tpcF9tb2RlX2FsbG93ZWQgPSAwOwo+ICsgICAgICAgIGVsc2UgaWYg KGJhY2t3YXJkX2lkeCA+PSAwKQo+ICsgICAgICAgICAgICBza2lwX21vZGVfYWxsb3dlZCA9IDE7 Cj4gKyAgICAgICAgZWxzZSB7Cj4gKyAgICAgICAgICAgIGludCBzZWNvbmRfZm9yd2FyZF9pZHgs IHNlY29uZF9mb3J3YXJkX2hpbnQ7Cj4gKyAgICAgICAgICAgIHNlY29uZF9mb3J3YXJkX2lkeCA9 IC0xOwo+ICsgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1FOyBp KyspIHsKPiArICAgICAgICAgICAgICAgIHJlZl9oaW50ID0gZmgtPnJlZl9vcmRlcl9oaW50W2Zo LT5yZWZfZnJhbWVfaWR4W2ldXTsKPiArICAgICAgICAgICAgICAgIGlmIChnZXRfcmVsYXRpdmVf ZGlzdChzaCwgcmVmX2hpbnQsIGZvcndhcmRfaGludCkgPCAwKSB7Cj4gKyAgICAgICAgICAgICAg ICAgICAgaWYgKHNlY29uZF9mb3J3YXJkX2lkeCA8IDAgfHwgZ2V0X3JlbGF0aXZlX2Rpc3Qoc2gs IHJlZl9oaW50LCBzZWNvbmRfZm9yd2FyZF9oaW50KSA+IDApewo+ICsgICAgICAgICAgICAgICAg ICAgICAgICBzZWNvbmRfZm9yd2FyZF9pZHggPSBpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg ICBzZWNvbmRfZm9yd2FyZF9oaW50ID0gcmVmX2hpbnQ7Cj4gKyAgICAgICAgICAgICAgICAgICAg fQo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGlm IChzZWNvbmRfZm9yd2FyZF9pZHggPCAwKQo+ICsgICAgICAgICAgICAgICAgc2tpcF9tb2RlX2Fs bG93ZWQgPSAwOwo+ICsgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICBza2lwX21v ZGVfYWxsb3dlZCA9IDE7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGlmIChza2lw X21vZGVfYWxsb3dlZCkKPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+c2tpcF9tb2Rl X3ByZXNlbnQpOwo+ICsKPiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5yZWR1Y2VkX3R4X3Nl dCk7Cj4gKwo+ICsgICAgLyoqIGdsb2JhbF9tb3Rpb25fcGFyYW1zKCkgKi8KPiArICAgIGlmICgh ZnJhbWVfaXNfaW50cmEpIHsKPiArICAgICAgICBmb3IgKGkgPSBBVjFfUkVGX0ZSQU1FX0xBU1Q7 IGkgPD0gQVYxX1JFRl9GUkFNRV9BTFRSRUY7IGkrKykgewo+ICsgICAgICAgICAgICBwdXRfYml0 cygmcGJjLCAxLCBmaC0+aXNfZ2xvYmFsW2ldKTsKPiArICAgICAgICAgICAgaWYgKGZoLT5pc19n bG9iYWxbaV0pIHsKPiArICAgICAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5pc19y b3Rfem9vbVtpXSk7Cj4gKyAgICAgICAgICAgICAgICBpZiAoIWZoLT5pc19yb3Rfem9vbVtpXSkK PiArICAgICAgICAgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+aXNfdHJhbnNsYXRp b25baV0pOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArdHJh aWxpbmdfYml0czoKPiArICAgIHBheWxvYWRfYml0cyA9IHB1dF9iaXRzX2NvdW50KCZwYmMpIC0g c3RhcnQ7Cj4gKwo+ICsgICAgLyoqIHRyYWlsaW5nX2JpdHMoKSAqLwo+ICsgICAgcHV0X2JpdHMo JnBiYywgMSwgMSk7Cj4gKyAgICBvYnVfc2l6ZSA9IChwdXRfYml0c19jb3VudCgmcGJjKSAtIHN0 YXJ0ICsgNykgLyA4Owo+ICsgICAgZm9yIChpID0gMDsgaSA8IG9idV9zaXplICogOCAtIHBheWxv YWRfYml0cyAtIDE7IGkrKykKPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCAwKTsKPiArCj4g KyAgICBmbHVzaF9wdXRfYml0cygmcGJjKTsKPiArICAgICpkYXRhX2xlbiA9IHB1dF9iaXRzX2Nv dW50KCZwYmMpOwo+ICsKPiArICAgIC8qKiB1cGRhdGUgb2J1IHNpemUgaW4gYml0c3RyZWFtICov Cj4gKyAgICBpZiAoZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXplX2ZpZWxkKSB7Cj4gKyAgICAg ICAgb2J1X3NpemVfbGVuID0gcHJpdi0+YXR0cl9leHQyLmJpdHMub2J1X3NpemVfYnl0ZXNfbWlu dXMxICsgMTsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2J1X3NpemVfbGVuOyBpKyspIHsK PiArICAgICAgICAgICAgYnl0ZSA9IG9idV9zaXplID4+ICg3ICogaSkgJiAweDdmOwo+ICsgICAg ICAgICAgICBpZiAoaSA8IG9idV9zaXplX2xlbiAtIDEpCj4gKyAgICAgICAgICAgICAgICBieXRl IHw9IDB4ODA7Cj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmNfdG1wLCA4LCBieXRlKTsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgZmx1c2hfcHV0X2JpdHMoJnBiY190bXApOwo+ICsgICAgICAg IG1lbW1vdmUocGJjX3RtcC5idWZfcHRyLCBwYmNfdG1wLmJ1Zl9wdHIgKyAoOCAtIG9idV9zaXpl X2xlbiksIG9idV9zaXplKTsKPiArICAgICAgICAqZGF0YV9sZW4gLT0gKDggLSBvYnVfc2l6ZV9s ZW4pICogODsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoZmgtPnNob3dfZXhpc3RpbmdfZnJhbWUp Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgaWYgKCEoY3R4LT52YV9yY19tb2RlICYg VkFfUkNfQ1FQKSkgewo+ICsgICAgICAgIHZwaWMtPm1pbl9iYXNlX3FpbmRleCA9IGF2X2NsaXAo YXZjdHgtPnFtaW4sIDEsIEFWMV9NQVhfUVVBTlQpOwo+ICsgICAgICAgIHZwaWMtPm1heF9iYXNl X3FpbmRleCA9IGF2X2NsaXAoYXZjdHgtPnFtYXgsIDEsIEFWMV9NQVhfUVVBTlQpOwo+ICsKPiAr ICAgICAgICB2cGljLT5iaXRfb2Zmc2V0X3FpbmRleCAgICAgICAgICAgID0gcWluZGV4X29mZnNl dCAtICg4IC0gb2J1X3NpemVfbGVuKSAqIDg7Cj4gKyAgICAgICAgdnBpYy0+Yml0X29mZnNldF9s b29wZmlsdGVyX3BhcmFtcyA9IGxvb3BmaWx0ZXJfb2Zmc2V0IC0gKDggLSBvYnVfc2l6ZV9sZW4p ICogODsKPiArICAgICAgICB2cGljLT5iaXRfb2Zmc2V0X2NkZWZfcGFyYW1zICAgICAgID0gY2Rl Zl9zdGFydF9vZmZzZXQgLSAoOCAtIG9idV9zaXplX2xlbikgKiA4Owo+ICsgICAgICAgIHZwaWMt PnNpemVfaW5fYml0c19jZGVmX3BhcmFtcyAgICAgPSBjZGVmX2VuZF9vZmZzZXQgLSBjZGVmX3N0 YXJ0X29mZnNldDsKPiArICAgICAgICB2cGljLT5zaXplX2luX2JpdHNfZnJhbWVfaGRyX29idSAg ID0gKmRhdGFfbGVuOwo+ICsKPiArICAgICAgICB2cGljLT5ieXRlX29mZnNldF9mcmFtZV9oZHJf b2J1X3NpemUgPSAoKChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0lEUikgPwo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnNoX2RhdGFfbGVu IC8gOCA6IDApICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoZmhfb2J1LT5oZWFkZXIub2J1X2V4dGVuc2lvbl9mbGFnID8KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogMSkpOwo+ICsgICAgfQo+ICsK PiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpbGVfbG9nMihpbnQgYmxr U2l6ZSwgaW50IHRhcmdldCkgewo+ICsgICAgaW50IGs7Cj4gKyAgICBmb3IgKGsgPSAwOyAoYmxr U2l6ZSA8PCBrKSA8IHRhcmdldDsgaysrKTsKPiArICAgIHJldHVybiBrOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfc2V0X3RpbGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQo+ICt7Cj4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9k YXRhOwo+ICsgICAgaW50IG1pX2NvbHMsIG1pX3Jvd3MsIHNiX3NoaWZ0LCBzYl9zaXplOwo+ICsg ICAgaW50IG1heF90aWxlX2FyZWFfc2IsIG1heF90aWxlX2FyZWFfc2JfdmFyaWVkOwo+ICsgICAg aW50IHRpbGVfd2lkdGhfc2IsIHRpbGVfaGVpZ2h0X3NiLCB3aWRlc3RfdGlsZV9zYjsKPiArICAg IGludCBtaW5fbG9nMl90aWxlczsKPiArICAgIGludCB0aWxlX3Jvd3NfdG1wLCBpOwo+ICsKPiAr ICAgIGlmIChwcml2LT50aWxlX2NvbHMgPiBBVjFfTUFYX1RJTEVfQ09MUyB8fAo+ICsgICAgICAg IHByaXYtPnRpbGVfcm93cyA+IEFWMV9NQVhfVElMRV9ST1dTKSB7Cj4gKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHRpbGUgbnVtYmVyICVkeCVkLCBzaG91bGQg bGVzcyB0aGFuICVkeCVkLlxuIiwKPiArICAgICAgICAgICAgICAgcHJpdi0+dGlsZV9jb2xzLCBw cml2LT50aWxlX3Jvd3MsIEFWMV9NQVhfVElMRV9DT0xTLCBBVjFfTUFYX1RJTEVfUk9XUyk7Cj4g KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgIH0KPiArCj4gKyAgICBtaV9j b2xzID0gMiAqICgoYXZjdHgtPndpZHRoICsgNykgPj4gMyk7Cj4gKyAgICBtaV9yb3dzID0gMiAq ICgoYXZjdHgtPmhlaWdodCArIDcpID4+IDMpOwo+ICsgICAgcHJpdi0+c2JfY29scyA9IHByaXYt PnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sgPwo+ICsgICAgICAgICAgICAgICAgICAgICgobWlfY29s cyArIDMxKSA+PiA1KSA6ICgobWlfY29scyArIDE1KSA+PiA0KTsKPiArICAgIHByaXYtPnNiX3Jv d3MgPSBwcml2LT51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8KPiArICAgICAgICAgICAgICAgICAg ICAoKG1pX3Jvd3MgKyAzMSkgPj4gNSkgOiAoKG1pX3Jvd3MgKyAxNSkgPj4gNCk7Cj4gKyAgICBz Yl9zaGlmdCA9IHByaXYtPnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sgPyA1IDogNDsKPiArICAgIHNi X3NpemUgID0gc2Jfc2hpZnQgKyAyOwo+ICsgICAgcHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IgPSBB VjFfTUFYX1RJTEVfV0lEVEggPj4gc2Jfc2l6ZTsKPiArICAgIG1heF90aWxlX2FyZWFfc2IgPSBB VjFfTUFYX1RJTEVfQVJFQSAgPj4gKDIgKiBzYl9zaXplKTsKPiArCj4gKyAgICBwcml2LT5taW5f bG9nMl90aWxlX2NvbHMgPSB0aWxlX2xvZzIocHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IsIHByaXYt PnNiX2NvbHMpOwo+ICsgICAgcHJpdi0+bWF4X2xvZzJfdGlsZV9jb2xzID0gdGlsZV9sb2cyKDEs IEZGTUlOKHByaXYtPnNiX2NvbHMsIEFWMV9NQVhfVElMRV9DT0xTKSk7Cj4gKyAgICBwcml2LT5t YXhfbG9nMl90aWxlX3Jvd3MgPSB0aWxlX2xvZzIoMSwgRkZNSU4ocHJpdi0+c2Jfcm93cywgQVYx X01BWF9USUxFX1JPV1MpKTsKPiArICAgIG1pbl9sb2cyX3RpbGVzID0gRkZNQVgocHJpdi0+bWlu X2xvZzJfdGlsZV9jb2xzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlX2xvZzIo bWF4X3RpbGVfYXJlYV9zYiwgcHJpdi0+c2Jfcm93cyAqIHByaXYtPnNiX2NvbHMpKTsKPiArCj4g KyAgICBpZiAocHJpdi0+dGlsZV9jb2xzICE9IGF2X2NsaXAocHJpdi0+dGlsZV9jb2xzLCAocHJp di0+c2JfY29scyArIHByaXYtPm1heF90aWxlX3dpZHRoX3NiIC0gMSkgLyBwcml2LT5tYXhfdGls ZV93aWR0aF9zYiwgcHJpdi0+c2JfY29scykpIHsKPiArICAgICAgICBwcml2LT50aWxlX2NvbHMg PSBhdl9jbGlwKHByaXYtPnRpbGVfY29scywgKHByaXYtPnNiX2NvbHMgKyBwcml2LT5tYXhfdGls ZV93aWR0aF9zYiAtIDEpIC8gcHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IsIHByaXYtPnNiX2NvbHMp Owo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbnZhbGlkIHRpbGUg Y29scywgY29ycmVjdCB0byAlZC5cbiIsIHByaXYtPnRpbGVfY29scyk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgcHJpdi0+dGlsZV9jb2xzX2xvZzIgPSB0aWxlX2xvZzIoMSwgcHJpdi0+dGlsZV9jb2xz KTsKPiArICAgIHRpbGVfd2lkdGhfc2IgPSAocHJpdi0+c2JfY29scyArICgxIDw8IHByaXYtPnRp bGVfY29sc19sb2cyKSAtIDEpID4+Cj4gKyAgICAgICAgICAgICAgICAgICAgcHJpdi0+dGlsZV9j b2xzX2xvZzI7Cj4gKwo+ICsgICAgaWYgKHByaXYtPnRpbGVfcm93cyA+IHByaXYtPnNiX3Jvd3Mp IHsKPiArICAgICAgICBwcml2LT50aWxlX3Jvd3MgPSBwcml2LT5zYl9yb3dzOwo+ICsgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbnZhbGlkIHRpbGUgcm93cywgY29ycmVj dCB0byAlZC5cbiIsIHByaXYtPnRpbGVfcm93cyk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yICh0 aWxlX3Jvd3NfdG1wID0gcHJpdi0+dGlsZV9yb3dzOyB0aWxlX3Jvd3NfdG1wIDw9IHByaXYtPnNi X3Jvd3MgJiYgdGlsZV9yb3dzX3RtcCA8PSBBVjFfTUFYX1RJTEVfUk9XUzsgdGlsZV9yb3dzX3Rt cCsrKSB7Cj4gKyAgICAgICAgLyoqIHRyeSB1bmlmb3JtZWQgdGlsZS4gKi8KPiArICAgICAgICBw cml2LT50aWxlX3Jvd3NfbG9nMiA9IHRpbGVfbG9nMigxLCB0aWxlX3Jvd3NfdG1wKTsKPiArICAg ICAgICBpZiAoKHByaXYtPnNiX2NvbHMgKyB0aWxlX3dpZHRoX3NiIC0gMSkgLyB0aWxlX3dpZHRo X3NiID09IHByaXYtPnRpbGVfY29scykgewo+ICsgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg cHJpdi0+dGlsZV9jb2xzIC0gMTsgaSsrKQo+ICsgICAgICAgICAgICAgICAgcHJpdi0+d2lkdGhf aW5fc2JzX21pbnVzXzFbaV0gPSB0aWxlX3dpZHRoX3NiIC0gMTsKPiArICAgICAgICAgICAgcHJp di0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSBwcml2LT5zYl9jb2xzIC0gKHByaXYtPnRpbGVf Y29scyAtIDEpICogdGlsZV93aWR0aF9zYiAtIDE7Cj4gKwo+ICsgICAgICAgICAgICB0aWxlX2hl aWdodF9zYiA9IChwcml2LT5zYl9yb3dzICsgKDEgPDwgcHJpdi0+dGlsZV9yb3dzX2xvZzIpIC0g MSkgPj4KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT50aWxlX3Jvd3NfbG9n MjsKPiArCj4gKyAgICAgICAgICAgIGlmICgocHJpdi0+c2Jfcm93cyArIHRpbGVfaGVpZ2h0X3Ni IC0gMSkgLyB0aWxlX2hlaWdodF9zYiA9PSB0aWxlX3Jvd3NfdG1wICYmCj4gKyAgICAgICAgICAg ICAgICB0aWxlX2hlaWdodF9zYiA8PSBtYXhfdGlsZV9hcmVhX3NiIC8gdGlsZV93aWR0aF9zYikg ewo+ICsgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRpbGVfcm93c190bXAgLSAxOyBp KyspCj4gKyAgICAgICAgICAgICAgICAgICAgcHJpdi0+aGVpZ2h0X2luX3Nic19taW51c18xW2ld ID0gdGlsZV9oZWlnaHRfc2IgLSAxOwo+ICsgICAgICAgICAgICAgICAgcHJpdi0+aGVpZ2h0X2lu X3Nic19taW51c18xW2ldID0gcHJpdi0+c2Jfcm93cyAtICh0aWxlX3Jvd3NfdG1wIC0gMSkgKiB0 aWxlX2hlaWdodF9zYiAtIDE7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcHJpdi0+dW5pZm9ybV90 aWxlID0gMTsKPiArICAgICAgICAgICAgICAgIHByaXYtPm1pbl9sb2cyX3RpbGVfcm93cyA9IEZG TUFYKG1pbl9sb2cyX3RpbGVzIC0gcHJpdi0+dGlsZV9jb2xzX2xvZzIsIDApOwo+ICsKPiArICAg ICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsKPiAr ICAgICAgICAvKiogdHJ5IG5vbi11bmlmb3JtZWQgdGlsZS4gKi8KPiArICAgICAgICB3aWRlc3Rf dGlsZV9zYiA9IDA7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnRpbGVfY29sczsg aSsrKSB7Cj4gKyAgICAgICAgICAgIHByaXYtPndpZHRoX2luX3Nic19taW51c18xW2ldID0gKGkg KyAxKSAqIHByaXYtPnNiX2NvbHMgLyBwcml2LT50aWxlX2NvbHMgLSBpICogcHJpdi0+c2JfY29s cyAvIHByaXYtPnRpbGVfY29scyAtIDE7Cj4gKyAgICAgICAgICAgIHdpZGVzdF90aWxlX3NiID0g RkZNQVgod2lkZXN0X3RpbGVfc2IsIHByaXYtPndpZHRoX2luX3Nic19taW51c18xW2ldICsgMSk7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAobWluX2xvZzJfdGlsZXMpCj4gKyAgICAg ICAgICAgIG1heF90aWxlX2FyZWFfc2JfdmFyaWVkID0gKHByaXYtPnNiX3Jvd3MgKiBwcml2LT5z Yl9jb2xzKSA+PiAobWluX2xvZzJfdGlsZXMgKyAxKTsKPiArICAgICAgICBlbHNlCj4gKyAgICAg ICAgICAgIG1heF90aWxlX2FyZWFfc2JfdmFyaWVkID0gcHJpdi0+c2Jfcm93cyAqIHByaXYtPnNi X2NvbHM7Cj4gKyAgICAgICAgcHJpdi0+bWF4X3RpbGVfaGVpZ2h0X3NiID0gRkZNQVgoMSwgbWF4 X3RpbGVfYXJlYV9zYl92YXJpZWQgLyB3aWRlc3RfdGlsZV9zYik7Cj4gKwo+ICsgICAgICAgIGlm ICh0aWxlX3Jvd3NfdG1wID09IGF2X2NsaXAodGlsZV9yb3dzX3RtcCwgKHByaXYtPnNiX3Jvd3Mg KyBwcml2LT5tYXhfdGlsZV9oZWlnaHRfc2IgLSAxKSAvIHByaXYtPm1heF90aWxlX2hlaWdodF9z YiwgcHJpdi0+c2Jfcm93cykpIHsKPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRpbGVf cm93c190bXA7IGkrKykKPiArICAgICAgICAgICAgICAgIHByaXYtPmhlaWdodF9pbl9zYnNfbWlu dXNfMVtpXSA9IChpICsgMSkgKiBwcml2LT5zYl9yb3dzIC8gdGlsZV9yb3dzX3RtcCAtIGkgKiBw cml2LT5zYl9yb3dzIC8gdGlsZV9yb3dzX3RtcCAtIDE7Cj4gKwo+ICsgICAgICAgICAgICBicmVh azsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHByaXYtPnRpbGVfcm93cyAh PSB0aWxlX3Jvd3NfdG1wKSB7Cj4gKyAgICAgICAgcHJpdi0+dGlsZV9yb3dzID0gdGlsZV9yb3dz X3RtcDsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZCB0 aWxlIHJvd3MsIGNvcnJlY3QgdG8gJWQuXG4iLCBwcml2LT50aWxlX3Jvd3MpOwo+ICsgICAgfQo+ ICsKPiArICAgIC8qKiBjaGVjayBpZiB0aWxlIGNvbHMvcm93cyBpcyBzdXBwb3J0ZWQgYnkgZHJp dmVyLiAqLwo+ICsgICAgaWYgKHByaXYtPmF0dHJfZXh0Mi5iaXRzLm1heF90aWxlX251bV9taW51 czEpIHsKPiArICAgICAgICBpZiAoKHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93cyAt IDEpID4gcHJpdi0+YXR0cl9leHQyLmJpdHMubWF4X3RpbGVfbnVtX21pbnVzMSkgewo+ICsgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIHRpbGUgbnVt ICVkICogJWQgPSAlZCBieSBkcml2ZXIsICIKPiArICAgICAgICAgICAgICAgICAgICJzaG91bGQg YmUgbGVzcyB0aGFuICVkLlxuIiwgcHJpdi0+dGlsZV9jb2xzLCBwcml2LT50aWxlX3Jvd3MsCj4g KyAgICAgICAgICAgICAgICAgICBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MsCj4g KyAgICAgICAgICAgICAgICAgICBwcml2LT5hdHRyX2V4dDIuYml0cy5tYXhfdGlsZV9udW1fbWlu dXMxICsgMSk7Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTZXR0aW5n IHRpbGUgY29scy9yb3dzIHRvICVkLyVkLlxuIiwKPiArICAgICAgICAgICBwcml2LT50aWxlX2Nv bHMsIHByaXYtPnRpbGVfcm93cyk7Cj4gKwo+ICsgICAgLyoqIGNoZWNrIGlmIHRpbGUgZ3JvdXAg bnVtYmVycyBpcyB2YWxpZC4gKi8KPiArICAgIGlmIChwcml2LT50aWxlX2dyb3VwcyA+IHByaXYt PnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93cykgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX1dBUk5JTkcsICJJbnZhbGlkIHRpbGUgZ3JvdXBzIG51bWJlciAlZCwgIgo+ICsgICAg ICAgICJjb3JyZWN0IHRvICVkLlxuIiwgcHJpdi0+dGlsZV9ncm91cHMsIHByaXYtPnRpbGVfY29s cyAqIHByaXYtPnRpbGVfcm93cyk7Cj4gKyAgICAgICAgcHJpdi0+dGlsZV9ncm91cHMgPSBwcml2 LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3M7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9zZXF1ZW5j ZV9oZWFkZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4p Cj4gK3sKPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2Rh dGE7Cj4gKwo+ICsgICAgbWVtY3B5KGRhdGEsICZwcml2LT5zaF9kYXRhLCBNQVhfUEFSQU1fQlVG RkVSX1NJWkUgKiBzaXplb2YoY2hhcikpOwo+ICsgICAgKmRhdGFfbGVuID0gcHJpdi0+c2hfZGF0 YV9sZW47Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmFhcGlf ZW5jb2RlX2F2MV9pbml0X3NlcXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4g K3sKPiArICAgIFZBQVBJRW5jb2RlQ29udGV4dCAgICAgICAgICAgICAgICpjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOwo+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAgICAgICAgICAqcHJpdiA9 IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAgICAgICAq c2hfb2J1ID0gJnByaXYtPnNoOwo+ICsgICAgQVYxUmF3U2VxdWVuY2VIZWFkZXIgICAgICAgICAg ICAgICpzaCA9ICZzaF9vYnUtPm9idS5zZXF1ZW5jZV9oZWFkZXI7Cj4gKyAgICBWQUVuY1NlcXVl bmNlUGFyYW1ldGVyQnVmZmVyQVYxICp2c2VxID0gY3R4LT5jb2RlY19zZXF1ZW5jZV9wYXJhbXM7 Cj4gKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICAgICAgICAgICAqb2J1ID0gJnByaXYtPmN1 cnJlbnRfb2J1Owo+ICsgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjOwo+ICsgICAg aW50IHJldDsKPiArCj4gKyAgICBtZW1zZXQoc2hfb2J1LCAwLCBzaXplb2YoKnNoX29idSkpOwo+ ICsgICAgc2hfb2J1LT5oZWFkZXIub2J1X3R5cGUgPSBBVjFfT0JVX1NFUVVFTkNFX0hFQURFUjsK PiArCj4gKyAgICBkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChwcml2LT5jb21tb24uaW5wdXRf ZnJhbWVzLT5zd19mb3JtYXQpOwo+ICsgICAgYXZfYXNzZXJ0MChkZXNjKTsKPiArCj4gKyAgICBz aC0+c2VxX3Byb2ZpbGUgID0gYXZjdHgtPnByb2ZpbGU7Cj4gKyAgICBpZiAoIXNoLT5zZXFfZm9y Y2Vfc2NyZWVuX2NvbnRlbnRfdG9vbHMpCj4gKyAgICAgICAgc2gtPnNlcV9mb3JjZV9pbnRlZ2Vy X212ID0gQVYxX1NFTEVDVF9JTlRFR0VSX01WOwo+ICsgICAgc2gtPmZyYW1lX3dpZHRoX2JpdHNf bWludXNfMSAgPSBhdl9sb2cyKGF2Y3R4LT53aWR0aCk7Cj4gKyAgICBzaC0+ZnJhbWVfaGVpZ2h0 X2JpdHNfbWludXNfMSA9IGF2X2xvZzIoYXZjdHgtPmhlaWdodCk7Cj4gKyAgICBzaC0+bWF4X2Zy YW1lX3dpZHRoX21pbnVzXzEgICA9IGF2Y3R4LT53aWR0aCAtIDE7Cj4gKyAgICBzaC0+bWF4X2Zy YW1lX2hlaWdodF9taW51c18xICA9IGF2Y3R4LT5oZWlnaHQgLSAxOwo+ICsgICAgc2gtPnNlcV90 aWVyWzBdICAgICAgICAgICAgICAgPSBwcml2LT50aWVyOwo+ICsgICAgLyoqIGVuYWJsZSBvcmRl ciBoaW50IGFuZCByZXNlcnZlIG1heGltdW0gOCBiaXRzIGZvciBpdCBieSBkZWZhdWx0LiAqLwo+ ICsgICAgc2gtPmVuYWJsZV9vcmRlcl9oaW50ICAgICAgICAgPSAxOwo+ICsgICAgc2gtPm9yZGVy X2hpbnRfYml0c19taW51c18xICAgPSA3Owo+ICsKPiArICAgIHNoLT5jb2xvcl9jb25maWcgPSAo QVYxUmF3Q29sb3JDb25maWcpIHsKPiArICAgICAgICAuaGlnaF9iaXRkZXB0aCAgICAgICAgICAg ICAgICAgID0gZGVzYy0+Y29tcFswXS5kZXB0aCA9PSA4ID8gMCA6IDEsCj4gKyAgICAgICAgLmNv bG9yX3ByaW1hcmllcyAgICAgICAgICAgICAgICA9IGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMsCj4g KyAgICAgICAgLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcyAgICAgICA9IGF2Y3R4LT5jb2xvcl90 cmMsCj4gKyAgICAgICAgLm1hdHJpeF9jb2VmZmljaWVudHMgICAgICAgICAgICA9IGF2Y3R4LT5j b2xvcnNwYWNlLAo+ICsgICAgICAgIC5jb2xvcl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcgPSAo YXZjdHgtPmNvbG9yX3ByaW1hcmllcyAhPSBBVkNPTF9QUklfVU5TUEVDSUZJRUQgfHwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2xvcl90cmMg ICAgICAgIT0gQVZDT0xfVFJDX1VOU1BFQ0lGSUVEIHx8Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y29sb3JzcGFjZSAgICAgICE9IEFWQ09MX1NQ Q19VTlNQRUNJRklFRCksCgpUaGlzIHNob3VsZCBhbHNvIHNldCBjb2xvcl9yYW5nZToKCiAgICAg ICAgLmNvbG9yX3JhbmdlICAgICAgICAgICAgICAgICAgICA9IGF2Y3R4LT5jb2xvcl9yYW5nZSA9 PQpBVkNPTF9SQU5HRV9KUEVHLAoKCj4gKyAgICAgICAgLnN1YnNhbXBsaW5nX3ggICAgICAgICAg ICAgICAgICA9IGRlc2MtPmxvZzJfY2hyb21hX3csCj4gKyAgICAgICAgLnN1YnNhbXBsaW5nX3kg ICAgICAgICAgICAgICAgICA9IGRlc2MtPmxvZzJfY2hyb21hX2gsCj4gKyAgICB9Owo+ICsKPiAr ICAgIGlmIChhdmN0eC0+bGV2ZWwgIT0gRkZfTEVWRUxfVU5LTk9XTikgewo+ICsgICAgICAgIHNo LT5zZXFfbGV2ZWxfaWR4WzBdID0gYXZjdHgtPmxldmVsOwo+ICsgICAgfSBlbHNlIHsKPiArICAg ICAgICBjb25zdCBBVjFMZXZlbERlc2NyaXB0b3IgKmxldmVsOwo+ICsgICAgICAgIGZsb2F0IGZy YW1lcmF0ZTsKPiArCj4gKyAgICAgICAgaWYgKGF2Y3R4LT5mcmFtZXJhdGUubnVtID4gMCAmJiBh dmN0eC0+ZnJhbWVyYXRlLmRlbiA+IDApCj4gKyAgICAgICAgICAgIGZyYW1lcmF0ZSA9IGF2Y3R4 LT5mcmFtZXJhdGUubnVtIC8gYXZjdHgtPmZyYW1lcmF0ZS5kZW47Cj4gKyAgICAgICAgZWxzZQo+ ICsgICAgICAgICAgICBmcmFtZXJhdGUgPSAwOwo+ICsKPiArICAgICAgICBsZXZlbCA9IGZmX2F2 MV9ndWVzc19sZXZlbChhdmN0eC0+Yml0X3JhdGUsIHByaXYtPnRpZXIsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zdXJmYWNlX3dpZHRoLCBjdHgtPnN1cmZhY2Vf aGVpZ2h0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVf cm93cyAqIHByaXYtPnRpbGVfY29scywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcml2LT50aWxlX2NvbHMsIGZyYW1lcmF0ZSk7Cj4gKyAgICAgICAgaWYgKGxldmVsKSB7 Cj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBsZXZl bCAlcy5cbiIsIGxldmVsLT5uYW1lKTsKPiArICAgICAgICAgICAgc2gtPnNlcV9sZXZlbF9pZHhb MF0gPSBsZXZlbC0+bGV2ZWxfaWR4Owo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJTdHJlYW0gd2lsbCBub3QgY29uZm9ybSB0 byAiCj4gKyAgICAgICAgICAgICAgICAgICAiYW55IG5vcm1hbCBsZXZlbCwgdXNpbmcgbGV2ZWwg Ni4zIGJ5IGRlZmF1bHQuXG4iKTsKPiArICAgICAgICAgICAgc2gtPnNlcV9sZXZlbF9pZHhbMF0g PSAxOTsKPiArICAgICAgICAgICAgc2gtPnNlcV90aWVyWzBdID0gMTsKPiArICAgICAgICB9Cj4g KyAgICB9Cj4gKyAgICB2c2VxLT5zZXFfcHJvZmlsZSAgICAgICAgICAgICA9IHNoLT5zZXFfcHJv ZmlsZTsKPiArICAgIHZzZXEtPnNlcV9sZXZlbF9pZHggICAgICAgICAgID0gc2gtPnNlcV9sZXZl bF9pZHhbMF07Cj4gKyAgICB2c2VxLT5zZXFfdGllciAgICAgICAgICAgICAgICA9IHNoLT5zZXFf dGllclswXTsKPiArICAgIHZzZXEtPm9yZGVyX2hpbnRfYml0c19taW51c18xID0gc2gtPm9yZGVy X2hpbnRfYml0c19taW51c18xOwo+ICsgICAgdnNlcS0+aW50cmFfcGVyaW9kICAgICAgICAgICAg PSBjdHgtPmdvcF9zaXplOwo+ICsgICAgdnNlcS0+aXBfcGVyaW9kICAgICAgICAgICAgICAgPSBj dHgtPmJfcGVyX3AgKyAxOwo+ICsKPiArICAgIHZzZXEtPnNlcV9maWVsZHMuYml0cy5lbmFibGVf b3JkZXJfaGludCA9IHNoLT5lbmFibGVfb3JkZXJfaGludDsKPiArCj4gKyAgICBpZiAoIShjdHgt PnZhX3JjX21vZGUgJiBWQV9SQ19DUVApKSB7Cj4gKyAgICAgICAgdnNlcS0+Yml0c19wZXJfc2Vj b25kID0gY3R4LT52YV9iaXRfcmF0ZTsKPiArICAgICAgICB2c2VxLT5zZXFfZmllbGRzLmJpdHMu ZW5hYmxlX2NkZWYgPSBzaC0+ZW5hYmxlX2NkZWYgPSAxOwo+ICsgICAgfQo+ICsKPiArICAgIHJl dCA9IHZhYXBpX2VuY29kZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LCBBVjFfT0JVX1NFUVVFTkNF X0hFQURFUiwgJnByaXYtPnNoKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIGdvdG8g ZW5kOwo+ICsKPiArICAgIHJldCA9IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfb2J1KGF2Y3R4LCBw cml2LT5zaF9kYXRhLCAmcHJpdi0+c2hfZGF0YV9sZW4sIG9idSk7Cj4gKyAgICBpZiAocmV0IDwg MCkKPiArICAgICAgICBnb3RvIGVuZDsKPiArCj4gK2VuZDoKPiArICAgIGZmX2Nic19mcmFnbWVu dF9yZXNldChvYnUpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2 YWFwaV9lbmNvZGVfYXYxX2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUFQ SUVuY29kZVBpY3R1cmUgKnBpYykKPiArewo+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAg ICAgICAgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIFZBQVBJRW5jb2RlQVYxUGlj dHVyZSAgICAgICAgICAqaHBpYyA9IHBpYy0+cHJpdl9kYXRhOwo+ICsgICAgQVYxUmF3T0JVICAg ICAgICAgICAgICAgICAgICAqZmhfb2J1ID0gJnByaXYtPmZoOwo+ICsgICAgQVYxUmF3RnJhbWVI ZWFkZXIgICAgICAgICAgICAgICAgKmZoID0gJmZoX29idS0+b2J1LmZyYW1lLmhlYWRlcjsKPiAr ICAgIFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckFWMSAqdnBpYyA9IHBpYy0+Y29kZWNfcGlj dHVyZV9wYXJhbXM7Cj4gKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICAgICAgICAgICpvYnUg PSAmcHJpdi0+Y3VycmVudF9vYnU7Cj4gKyAgICBWQUFQSUVuY29kZVBpY3R1cmUgICAgKnJlZjsK PiArICAgIFZBQVBJRW5jb2RlQVYxUGljdHVyZSAqaHJlZjsKPiArICAgIGludCBzbG90LCBpOwo+ ICsgICAgaW50IHJldDsKPiArICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgZGVmYXVsdF9sb29wX2Zp bHRlcl9yZWZfZGVsdGFzW0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRV0gPQo+ICsgICAgICAgIHsg MSwgMCwgMCwgMCwgLTEsIDAsIC0xLCAtMSB9Owo+ICsKPiArICAgIG1lbXNldChmaF9vYnUsIDAs IHNpemVvZigqZmhfb2J1KSk7Cj4gKyAgICBwaWMtPm5iX3NsaWNlcyA9IHByaXYtPnRpbGVfZ3Jv dXBzOwo+ICsgICAgZmhfb2J1LT5oZWFkZXIub2J1X3R5cGUgPSBBVjFfT0JVX0ZSQU1FX0hFQURF UjsKPiArICAgIGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6ZV9maWVsZCA9IDE7Cj4gKwo+ICsg ICAgc3dpdGNoIChwaWMtPnR5cGUpIHsKPiArICAgIGNhc2UgUElDVFVSRV9UWVBFX0lEUjoKPiAr ICAgICAgICBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSA9PSAwIHx8IHBpYy0+bmJfcmVmc1sx XSk7Cj4gKyAgICAgICAgZmgtPmZyYW1lX3R5cGUgPSBBVjFfRlJBTUVfS0VZOwo+ICsgICAgICAg IGZoLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzID0gMHhGRjsKPiArICAgICAgICBmaC0+YmFzZV9xX2lk eCA9IHByaXYtPnFfaWR4X2lkcjsKPiArICAgICAgICBocGljLT5zbG90ID0gMDsKPiArICAgICAg ICBocGljLT5sYXN0X2lkcl9mcmFtZSA9IHBpYy0+ZGlzcGxheV9vcmRlcjsKPiArICAgICAgICBi cmVhazsKPiArICAgIGNhc2UgUElDVFVSRV9UWVBFX1A6Cj4gKyAgICAgICAgYXZfYXNzZXJ0MChw aWMtPm5iX3JlZnNbMF0pOwo+ICsgICAgICAgIGZoLT5mcmFtZV90eXBlID0gQVYxX0ZSQU1FX0lO VEVSOwo+ICsgICAgICAgIGZoLT5iYXNlX3FfaWR4ID0gcHJpdi0+cV9pZHhfcDsKPiArICAgICAg ICByZWYgPSBwaWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBdIC0gMV07Cj4gKyAgICAgICAgaHJl ZiA9IHJlZi0+cHJpdl9kYXRhOwo+ICsgICAgICAgIGhwaWMtPnNsb3QgPSAhaHJlZi0+c2xvdDsK PiArICAgICAgICBocGljLT5sYXN0X2lkcl9mcmFtZSA9IGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ ICsgICAgICAgIGZoLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzID0gMSA8PCBocGljLT5zbG90Owo+ICsK PiArICAgICAgICAvKiogc2V0IHRoZSBuZWFyZXN0IGZyYW1lIGluIEwwIGFzIGFsbCByZWZlcmVu Y2UgZnJhbWUuICovCj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFN RTsgaSsrKSB7Cj4gKyAgICAgICAgICAgIGZoLT5yZWZfZnJhbWVfaWR4W2ldID0gaHJlZi0+c2xv dDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZmgtPnByaW1hcnlfcmVmX2ZyYW1lID0gaHJlZi0+ c2xvdDsKPiArICAgICAgICBmaC0+cmVmX29yZGVyX2hpbnRbaHJlZi0+c2xvdF0gPSByZWYtPmRp c3BsYXlfb3JkZXIgLSBocmVmLT5sYXN0X2lkcl9mcmFtZTsKPiArICAgICAgICB2cGljLT5yZWZf ZnJhbWVfY3RybF9sMC5maWVsZHMuc2VhcmNoX2lkeDAgPSBBVjFfUkVGX0ZSQU1FX0xBU1Q7Cj4g Kwo+ICsgICAgICAgIC8qKiBzZXQgdGhlIDJuZCBuZWFyZXN0IGZyYW1lIGluIEwwIGFzIEdvbGRl biBmcmFtZS4gKi8KPiArICAgICAgICBpZiAocGljLT5uYl9yZWZzWzBdID4gMSkgewo+ICsgICAg ICAgICAgICByZWYgPSBwaWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBdIC0gMl07Cj4gKyAgICAg ICAgICAgIGhyZWYgPSByZWYtPnByaXZfZGF0YTsKPiArICAgICAgICAgICAgZmgtPnJlZl9mcmFt ZV9pZHhbM10gPSBocmVmLT5zbG90Owo+ICsgICAgICAgICAgICBmaC0+cmVmX29yZGVyX2hpbnRb aHJlZi0+c2xvdF0gPSByZWYtPmRpc3BsYXlfb3JkZXIgLSBocmVmLT5sYXN0X2lkcl9mcmFtZTsK PiArICAgICAgICAgICAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxfbDAuZmllbGRzLnNlYXJjaF9pZHgx ID0gQVYxX1JFRl9GUkFNRV9HT0xERU47Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGJyZWFrOwo+ ICsgICAgY2FzZSBQSUNUVVJFX1RZUEVfQjoKPiArICAgICAgICBhdl9hc3NlcnQwKHBpYy0+bmJf cmVmc1swXSAmJiBwaWMtPm5iX3JlZnNbMV0pOwo+ICsgICAgICAgIGZoLT5mcmFtZV90eXBlID0g QVYxX0ZSQU1FX0lOVEVSOwo+ICsgICAgICAgIGZoLT5iYXNlX3FfaWR4ID0gcHJpdi0+cV9pZHhf YjsKPiArICAgICAgICBmaC0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4MDsKPiArICAgICAgICBm aC0+cmVmZXJlbmNlX3NlbGVjdCA9IDE7Cj4gKwo+ICsgICAgICAgIC8qKiBCIGZyYW1lIHdpbGwg bm90IGJlIHJlZmVyZW5jZWQsIGRpc2FibGUgaXRzIHJlY29uIGZyYW1lLiAqLwo+ICsgICAgICAg IHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5kaXNhYmxlX2ZyYW1lX3JlY29uID0gMTsKPiArCj4g KyAgICAgICAgLyoqIFVzZSBMQVNUX0ZSQU1FIGFuZCBCV0RSRUZfRlJBTUUgZm9yIHJlZmVyZW5j ZS4gKi8KPiArICAgICAgICB2cGljLT5yZWZfZnJhbWVfY3RybF9sMC5maWVsZHMuc2VhcmNoX2lk eDAgPSBBVjFfUkVGX0ZSQU1FX0xBU1Q7Cj4gKyAgICAgICAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxf bDEuZmllbGRzLnNlYXJjaF9pZHgwID0gQVYxX1JFRl9GUkFNRV9CV0RSRUY7Cj4gKwo+ICsgICAg ICAgIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHBpYy0+cmVmc1swXVtwaWMtPm5i X3JlZnNbMF0gLSAxXTsKPiArICAgICAgICBocmVmICAgICAgICAgICAgICAgICAgICAgICAgICAg PSByZWYtPnByaXZfZGF0YTsKPiArICAgICAgICBocGljLT5sYXN0X2lkcl9mcmFtZSAgICAgICAg ICAgPSBocmVmLT5sYXN0X2lkcl9mcmFtZTsKPiArICAgICAgICBmaC0+cHJpbWFyeV9yZWZfZnJh bWUgICAgICAgICAgPSBocmVmLT5zbG90Owo+ICsgICAgICAgIGZoLT5yZWZfb3JkZXJfaGludFto cmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAtIGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSsrKSB7Cj4g KyAgICAgICAgICAgIGZoLT5yZWZfZnJhbWVfaWR4W2ldID0gaHJlZi0+c2xvdDsKPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHBpYy0+ cmVmc1sxXVtwaWMtPm5iX3JlZnNbMV0gLSAxXTsKPiArICAgICAgICBocmVmICAgICAgICAgICAg ICAgICAgICAgICAgICAgPSByZWYtPnByaXZfZGF0YTsKPiArICAgICAgICBmaC0+cmVmX29yZGVy X2hpbnRbaHJlZi0+c2xvdF0gPSByZWYtPmRpc3BsYXlfb3JkZXIgLSBocmVmLT5sYXN0X2lkcl9m cmFtZTsKPiArICAgICAgICBmb3IgKGkgPSBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSA8IEFWMV9S RUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gKyAgICAgICAgICAgIGZoLT5yZWZfZnJhbWVfaWR4W2ld ID0gaHJlZi0+c2xvdDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBkZWZh dWx0Ogo+ICsgICAgICAgIGF2X2Fzc2VydDAoMCAmJiAiaW52YWxpZCBwaWN0dXJlIHR5cGUiKTsK PiArICAgIH0KPiArCj4gKyAgICBmaC0+c2hvd19mcmFtZSAgICAgICAgICAgICAgICA9IHBpYy0+ ZGlzcGxheV9vcmRlciA8PSBwaWMtPmVuY29kZV9vcmRlcjsKPiArICAgIGZoLT5zaG93YWJsZV9m cmFtZSAgICAgICAgICAgID0gZmgtPmZyYW1lX3R5cGUgIT0gQVYxX0ZSQU1FX0tFWTsKPiArICAg IGZoLT5mcmFtZV93aWR0aF9taW51c18xICAgICAgID0gYXZjdHgtPndpZHRoIC0gMTsKPiArICAg IGZoLT5mcmFtZV9oZWlnaHRfbWludXNfMSAgICAgID0gYXZjdHgtPmhlaWdodCAtIDE7Cj4gKyAg ICBmaC0+cmVuZGVyX3dpZHRoX21pbnVzXzEgICAgICA9IGZoLT5mcmFtZV93aWR0aF9taW51c18x Owo+ICsgICAgZmgtPnJlbmRlcl9oZWlnaHRfbWludXNfMSAgICAgPSBmaC0+ZnJhbWVfaGVpZ2h0 X21pbnVzXzE7Cj4gKyAgICBmaC0+b3JkZXJfaGludCAgICAgICAgICAgICAgICA9IHBpYy0+ZGlz cGxheV9vcmRlciAtIGhwaWMtPmxhc3RfaWRyX2ZyYW1lOwo+ICsgICAgZmgtPnRpbGVfY29scyAg ICAgICAgICAgICAgICAgPSBwcml2LT50aWxlX2NvbHM7Cj4gKyAgICBmaC0+dGlsZV9yb3dzICAg ICAgICAgICAgICAgICA9IHByaXYtPnRpbGVfcm93czsKPiArICAgIGZoLT50aWxlX2NvbHNfbG9n MiAgICAgICAgICAgID0gcHJpdi0+dGlsZV9jb2xzX2xvZzI7Cj4gKyAgICBmaC0+dGlsZV9yb3dz X2xvZzIgICAgICAgICAgICA9IHByaXYtPnRpbGVfcm93c19sb2cyOwo+ICsgICAgZmgtPnVuaWZv cm1fdGlsZV9zcGFjaW5nX2ZsYWcgPSBwcml2LT51bmlmb3JtX3RpbGU7Cj4gKyAgICBmaC0+dGls ZV9zaXplX2J5dGVzX21pbnVzMSAgICA9IHByaXYtPmF0dHJfZXh0Mi5iaXRzLnRpbGVfc2l6ZV9i eXRlc19taW51czE7Cj4gKyAgICBmaC0+cmVkdWNlZF90eF9zZXQgICAgICAgICAgICA9IDE7Cj4g Kwo+ICsgICAgLyoqIGlnbm9yZSBPTkxZXzR4NCBtb2RlIGZvciBjb2RlZGxvc3NsZXNzIGlzIG5v dCBmdWxseSBpbXBsZW1lbnRlZC4gKi8KPiArICAgIGlmIChwcml2LT5hdHRyX2V4dDIuYml0cy50 eF9tb2RlX3N1cHBvcnQgJiAweDA0KQo+ICsgICAgICAgIGZoLT50eF9tb2RlID0gQVYxX1RYX01P REVfU0VMRUNUOwo+ICsgICAgZWxzZSBpZiAocHJpdi0+YXR0cl9leHQyLmJpdHMudHhfbW9kZV9z dXBwb3J0ICYgMHgwMikKPiArICAgICAgICBmaC0+dHhfbW9kZSA9IEFWMV9UWF9NT0RFX0xBUkdF U1Q7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArCj4g KyAgICBmb3IgKGkgPSAwOyBpIDwgZmgtPnRpbGVfY29sczsgaSsrKQo+ICsgICAgICAgIGZoLT53 aWR0aF9pbl9zYnNfbWludXNfMVtpXSA9IHZwaWMtPndpZHRoX2luX3Nic19taW51c18xW2ldID0g cHJpdi0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV07Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8 IGZoLT50aWxlX3Jvd3M7IGkrKykKPiArICAgICAgICBmaC0+aGVpZ2h0X2luX3Nic19taW51c18x W2ldID0gdnBpYy0+aGVpZ2h0X2luX3Nic19taW51c18xW2ldID0gcHJpdi0+aGVpZ2h0X2luX3Ni c19taW51c18xW2ldOwo+ICsKPiArICAgIG1lbWNweShmaC0+bG9vcF9maWx0ZXJfcmVmX2RlbHRh cywgZGVmYXVsdF9sb29wX2ZpbHRlcl9yZWZfZGVsdGFzLAo+ICsgICAgICAgICAgIEFWMV9UT1RB TF9SRUZTX1BFUl9GUkFNRSAqIHNpemVvZihpbnQ4X3QpKTsKPiArCj4gKyAgICBpZiAoZmgtPmZy YW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSAmJiBmaC0+c2hvd19mcmFtZSkgewo+ICsgICAgICAg IGZoLT5lcnJvcl9yZXNpbGllbnRfbW9kZSA9IDE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGZo LT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgfHwgZmgtPmVycm9yX3Jlc2lsaWVudF9tb2Rl KQo+ICsgICAgICAgIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSA9IEFWMV9QUklNQVJZX1JFRl9OT05F Owo+ICsKPiArICAgIHZwaWMtPmJhc2VfcWluZGV4ICAgICAgICAgID0gZmgtPmJhc2VfcV9pZHg7 Cj4gKyAgICB2cGljLT5mcmFtZV93aWR0aF9taW51c18xICA9IGZoLT5mcmFtZV93aWR0aF9taW51 c18xOwo+ICsgICAgdnBpYy0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEgPSBmaC0+ZnJhbWVfaGVpZ2h0 X21pbnVzXzE7Cj4gKyAgICB2cGljLT5wcmltYXJ5X3JlZl9mcmFtZSAgICA9IGZoLT5wcmltYXJ5 X3JlZl9mcmFtZTsKPiArICAgIHZwaWMtPnJlY29uc3RydWN0ZWRfZnJhbWUgID0gcGljLT5yZWNv bl9zdXJmYWNlOwo+ICsgICAgdnBpYy0+Y29kZWRfYnVmICAgICAgICAgICAgPSBwaWMtPm91dHB1 dF9idWZmZXI7Cj4gKyAgICB2cGljLT50aWxlX2NvbHMgICAgICAgICAgICA9IGZoLT50aWxlX2Nv bHM7Cj4gKyAgICB2cGljLT50aWxlX3Jvd3MgICAgICAgICAgICA9IGZoLT50aWxlX3Jvd3M7Cj4g KyAgICB2cGljLT5vcmRlcl9oaW50ICAgICAgICAgICA9IGZoLT5vcmRlcl9oaW50Owo+ICsjaWYg VkFfQ0hFQ0tfVkVSU0lPTigxLCAxNSwgMCkKPiArICAgIHZwaWMtPnJlZnJlc2hfZnJhbWVfZmxh Z3MgID0gZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3M7Cj4gKyNlbmRpZgo+ICsKPiArICAgIHZwaWMt PnBpY3R1cmVfZmxhZ3MuYml0cy5lbmFibGVfZnJhbWVfb2J1ICAgICA9IDA7Cj4gKyAgICB2cGlj LT5waWN0dXJlX2ZsYWdzLmJpdHMuZnJhbWVfdHlwZSAgICAgICAgICAgPSBmaC0+ZnJhbWVfdHlw ZTsKPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5yZWR1Y2VkX3R4X3NldCAgICAgICA9 IGZoLT5yZWR1Y2VkX3R4X3NldDsKPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5lcnJv cl9yZXNpbGllbnRfbW9kZSA9IGZoLT5lcnJvcl9yZXNpbGllbnRfbW9kZTsKPiArCj4gKyAgICAv KiogbGV0IGRyaXZlciBkZWNpZGUgdG8gdXNlIHNpbmdsZSBvciBjb21wb3VuZCByZWZlcmVuY2Ug cHJlZGljdGlvbiBtb2RlLiAqLwo+ICsgICAgdnBpYy0+bW9kZV9jb250cm9sX2ZsYWdzLmJpdHMu cmVmZXJlbmNlX21vZGUgPSBmaC0+cmVmZXJlbmNlX3NlbGVjdCA/IDIgOiAwOwo+ICsgICAgdnBp Yy0+bW9kZV9jb250cm9sX2ZsYWdzLmJpdHMudHhfbW9kZSA9IGZoLT50eF9tb2RlOwo+ICsKPiAr ICAgIHZwaWMtPnRpbGVfZ3JvdXBfb2J1X2hkcl9pbmZvLmJpdHMub2J1X2hhc19zaXplX2ZpZWxk ID0gMTsKPiArCj4gKyAgICAvKiogc2V0IHJlZmVyZW5jZS4gKi8KPiArICAgIGZvciAoaSA9IDA7 IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykKPiArICAgICAgICB2cGljLT5yZWZfZnJhbWVf aWR4W2ldID0gZmgtPnJlZl9mcmFtZV9pZHhbaV07Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8 IEZGX0FSUkFZX0VMRU1TKHZwaWMtPnJlZmVyZW5jZV9mcmFtZXMpOyBpKyspCj4gKyAgICAgICAg dnBpYy0+cmVmZXJlbmNlX2ZyYW1lc1tpXSA9IFZBX0lOVkFMSURfU1VSRkFDRTsKPiArCj4gKyAg ICBmb3IgKGkgPSAwOyBpIDwgTUFYX1JFRkVSRU5DRV9MSVNUX05VTTsgaSsrKSB7Cj4gKyAgICAg ICAgZm9yIChpbnQgaiA9IDA7IGogPCBwaWMtPm5iX3JlZnNbaV07IGorKykgewo+ICsgICAgICAg ICAgICBWQUFQSUVuY29kZVBpY3R1cmUgKnJlZl9waWMgPSBwaWMtPnJlZnNbaV1bal07Cj4gKwo+ ICsgICAgICAgICAgICBzbG90ID0gKChWQUFQSUVuY29kZUFWMVBpY3R1cmUqKXJlZl9waWMtPnBy aXZfZGF0YSktPnNsb3Q7Cj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAodnBpYy0+cmVmZXJlbmNl X2ZyYW1lc1tzbG90XSA9PSBWQV9JTlZBTElEX1NVUkZBQ0UpOwo+ICsKPiArICAgICAgICAgICAg dnBpYy0+cmVmZXJlbmNlX2ZyYW1lc1tzbG90XSA9IHJlZl9waWMtPnJlY29uX3N1cmZhY2U7Cj4g KyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8qKiBwYWNrIGZyYW1lIGhlYWRlciwgYW5k IHNldCB2YSBwYXJhbXMgb2Zmc2V0IGxpa2UgYml0X29mZnNldF9xaW5kZXggZXRjLiAqLwo+ICsg ICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9mcmFtZV9oZWFkZXIoYXZjdHgsIHBpYywg cHJpdi0+ZmhfZGF0YSwgJnByaXYtPmZoX2RhdGFfbGVuKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ ICsgICAgICAgIGdvdG8gZW5kOwo+ICsKPiArZW5kOgo+ICsgICAgZmZfY2JzX2ZyYWdtZW50X3Jl c2V0KG9idSk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZhYXBp X2VuY29kZV9hdjFfaW5pdF9zbGljZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFBUElFbmNvZGVQ aWN0dXJlICpwaWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWQUFQSUVuY29kZVNsaWNlICpzbGljZSkKPiArewo+ICsgICAgVkFBUElFbmNvZGVBVjFD b250ZXh0ICAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgVkFFbmNUaWxlR3Jv dXBCdWZmZXJBVjEgICp2c2xpY2UgPSBzbGljZS0+Y29kZWNfc2xpY2VfcGFyYW1zOwo+ICsgICAg Q29kZWRCaXRzdHJlYW1BVjFDb250ZXh0ICAqY2JjdHggPSBwcml2LT5jYmMtPnByaXZfZGF0YTsK PiArICAgIGludCBkaXY7Cj4gKwo+ICsgICAgLyoqIFNldCB0aWxlIGdyb3VwIGluZm8uICovCj4g KyAgICBkaXYgPSBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MgLyBwcml2LT50aWxl X2dyb3VwczsKPiArICAgIHZzbGljZS0+dGdfc3RhcnQgPSBzbGljZS0+aW5kZXggKiBkaXY7Cj4g KyAgICBpZiAoc2xpY2UtPmluZGV4ID09IChwcml2LT50aWxlX2dyb3VwcyAtIDEpKSB7Cj4gKyAg ICAgICAgdnNsaWNlLT50Z19lbmQgPSBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3Mg LSAxOwo+ICsgICAgICAgIGNiY3R4LT5zZWVuX2ZyYW1lX2hlYWRlciA9IDA7Cj4gKyAgICB9IGVs c2Ugewo+ICsgICAgICAgIHZzbGljZS0+dGdfZW5kID0gKHNsaWNlLT5pbmRleCArIDEpICogZGl2 IC0gMTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX3BpY3R1cmVfaGVhZGVyKEFWQ29kZWNDb250ZXh0ICph dmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZBQVBJRW5jb2RlUGljdHVyZSAqcGljLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbikKPiArewo+ ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAgICAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7 Cj4gKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICAgICAqb2J1ID0gJnByaXYtPmN1cnJlbnRf b2J1Owo+ICsgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAgKmZoX29idSA9ICZwcml2LT5maDsK PiArICAgIEFWMVJhd0ZyYW1lSGVhZGVyICAgICAgICpyZXBfZmggPSAmZmhfb2J1LT5vYnUuZnJh bWVfaGVhZGVyOwo+ICsgICAgVkFBUElFbmNvZGVBVjFQaWN0dXJlICpocmVmOwo+ICsgICAgaW50 IHJldCA9IDA7Cj4gKwo+ICsgICAgcGljLT50YWlsX3NpemUgPSAwOwo+ICsgICAgLyoqIFBhY2sg cmVwZWF0IGZyYW1lIGhlYWRlci4gKi8KPiArICAgIGlmIChwaWMtPmRpc3BsYXlfb3JkZXIgPiBw aWMtPmVuY29kZV9vcmRlcikgewo+ICsgICAgICAgIG1lbXNldChmaF9vYnUsIDAsIHNpemVvZigq Zmhfb2J1KSk7Cj4gKyAgICAgICAgaHJlZiA9IHBpYy0+cmVmc1swXVtwaWMtPm5iX3JlZnNbMF0g LSAxXS0+cHJpdl9kYXRhOwo+ICsgICAgICAgIGZoX29idS0+aGVhZGVyLm9idV90eXBlID0gQVYx X09CVV9GUkFNRV9IRUFERVI7Cj4gKyAgICAgICAgZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXpl X2ZpZWxkID0gMTsKPiArCj4gKyAgICAgICAgcmVwX2ZoLT5zaG93X2V4aXN0aW5nX2ZyYW1lICAg PSAxOwo+ICsgICAgICAgIHJlcF9maC0+ZnJhbWVfdG9fc2hvd19tYXBfaWR4ID0gaHJlZi0+c2xv dCA9PSAwOwo+ICsgICAgICAgIHJlcF9maC0+ZnJhbWVfdHlwZSAgICAgICAgICAgID0gQVYxX0ZS QU1FX0lOVEVSOwo+ICsgICAgICAgIHJlcF9maC0+ZnJhbWVfd2lkdGhfbWludXNfMSAgID0gYXZj dHgtPndpZHRoIC0gMTsKPiArICAgICAgICByZXBfZmgtPmZyYW1lX2hlaWdodF9taW51c18xICA9 IGF2Y3R4LT5oZWlnaHQgLSAxOwo+ICsgICAgICAgIHJlcF9maC0+cmVuZGVyX3dpZHRoX21pbnVz XzEgID0gcmVwX2ZoLT5mcmFtZV93aWR0aF9taW51c18xOwo+ICsgICAgICAgIHJlcF9maC0+cmVu ZGVyX2hlaWdodF9taW51c18xID0gcmVwX2ZoLT5mcmFtZV9oZWlnaHRfbWludXNfMTsKPiArCj4g KyAgICAgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9mcmFtZV9oZWFkZXIoYXZjdHgs IHBpYywgcGljLT50YWlsX2RhdGEsICZwaWMtPnRhaWxfc2l6ZSk7Cj4gKyAgICAgICAgaWYgKHJl dCA8IDApCj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsKPiArICAgICAgICBwaWMtPnRhaWxf c2l6ZSAvPSA4Owo+ICsgICAgfQo+ICsKPiArICAgIG1lbWNweShkYXRhLCAmcHJpdi0+ZmhfZGF0 YSwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFICogc2l6ZW9mKGNoYXIpKTsKPiArICAgICpkYXRhX2xl biA9IHByaXYtPmZoX2RhdGFfbGVuOwo+ICsKPiArZW5kOgo+ICsgICAgZmZfY2JzX2ZyYWdtZW50 X3Jlc2V0KG9idSk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg VkFBUElFbmNvZGVQcm9maWxlIHZhYXBpX2VuY29kZV9hdjFfcHJvZmlsZXNbXSA9IHsKPiArICAg IHsgRkZfUFJPRklMRV9BVjFfTUFJTiwgIDgsIDMsIDEsIDEsIFZBUHJvZmlsZUFWMVByb2ZpbGUw IH0sCj4gKyAgICB7IEZGX1BST0ZJTEVfQVYxX01BSU4sIDEwLCAzLCAxLCAxLCBWQVByb2ZpbGVB VjFQcm9maWxlMCB9LAo+ICsgICAgeyBGRl9QUk9GSUxFX1VOS05PV04gfQo+ICt9Owo+ICsKPiAr c3RhdGljIGNvbnN0IFZBQVBJRW5jb2RlVHlwZSB2YWFwaV9lbmNvZGVfdHlwZV9hdjEgPSB7Cj4g KyAgICAucHJvZmlsZXMgICAgICAgID0gdmFhcGlfZW5jb2RlX2F2MV9wcm9maWxlcywKPiArICAg IC5mbGFncyAgICAgICAgICAgPSBGTEFHX0JfUElDVFVSRVMsCj4gKyAgICAuZGVmYXVsdF9xdWFs aXR5ID0gMjUsCj4gKyAgICAuY29uZmlndXJlICAgICAgID0gJnZhYXBpX2VuY29kZV9hdjFfY29u ZmlndXJlLAo+ICsKPiArICAgIC5zZXF1ZW5jZV9oZWFkZXJfdHlwZSAgPSBWQUVuY1BhY2tlZEhl YWRlclNlcXVlbmNlLAo+ICsgICAgLnNlcXVlbmNlX3BhcmFtc19zaXplICA9IHNpemVvZihWQUVu Y1NlcXVlbmNlUGFyYW1ldGVyQnVmZmVyQVYxKSwKPiArICAgIC5pbml0X3NlcXVlbmNlX3BhcmFt cyAgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0X3NlcXVlbmNlX3BhcmFtcywKPiArICAgIC53cml0 ZV9zZXF1ZW5jZV9oZWFkZXIgPSAmdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9zZXF1ZW5jZV9oZWFk ZXIsCj4gKwo+ICsgICAgLnBpY3R1cmVfcHJpdl9kYXRhX3NpemUgPSBzaXplb2YoVkFBUElFbmNv ZGVBVjFQaWN0dXJlKSwKPiArICAgIC5waWN0dXJlX2hlYWRlcl90eXBlICAgID0gVkFFbmNQYWNr ZWRIZWFkZXJQaWN0dXJlLAo+ICsgICAgLnBpY3R1cmVfcGFyYW1zX3NpemUgICAgPSBzaXplb2Yo VkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxKSwKPiArICAgIC5pbml0X3BpY3R1cmVfcGFy YW1zICAgID0gJnZhYXBpX2VuY29kZV9hdjFfaW5pdF9waWN0dXJlX3BhcmFtcywKPiArICAgIC53 cml0ZV9waWN0dXJlX2hlYWRlciAgID0gJnZhYXBpX2VuY29kZV9hdjFfd3JpdGVfcGljdHVyZV9o ZWFkZXIsCj4gKwo+ICsgICAgLnNsaWNlX3BhcmFtc19zaXplID0gc2l6ZW9mKFZBRW5jVGlsZUdy b3VwQnVmZmVyQVYxKSwKPiArICAgIC5pbml0X3NsaWNlX3BhcmFtcyA9ICZ2YWFwaV9lbmNvZGVf YXYxX2luaXRfc2xpY2VfcGFyYW1zLAo+ICt9Owo+ICsKPiArc3RhdGljIGF2X2NvbGQgaW50IHZh YXBpX2VuY29kZV9hdjFfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIFZB QVBJRW5jb2RlQ29udGV4dCAgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgVkFB UElFbmNvZGVBVjFDb250ZXh0ICAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBWQUNv bmZpZ0F0dHJpYiBhdHRyOwo+ICsgICAgVkFTdGF0dXMgdmFzOwo+ICsgICAgaW50IHJldDsKPiAr Cj4gKyAgICBjdHgtPmNvZGVjID0gJnZhYXBpX2VuY29kZV90eXBlX2F2MTsKPiArCj4gKyAgICBj dHgtPmRlc2lyZWRfcGFja2VkX2hlYWRlcnMgPQo+ICsgICAgICAgIFZBX0VOQ19QQUNLRURfSEVB REVSX1NFUVVFTkNFIHwKPiArICAgICAgICBWQV9FTkNfUEFDS0VEX0hFQURFUl9QSUNUVVJFOwo+ ICsKPiArICAgIGlmIChhdmN0eC0+cHJvZmlsZSA9PSBGRl9QUk9GSUxFX1VOS05PV04pCj4gKyAg ICAgICAgYXZjdHgtPnByb2ZpbGUgPSBwcml2LT5wcm9maWxlOwo+ICsgICAgaWYgKGF2Y3R4LT5s ZXZlbCA9PSBGRl9MRVZFTF9VTktOT1dOKQo+ICsgICAgICAgIGF2Y3R4LT5sZXZlbCA9IHByaXYt PmxldmVsOwo+ICsKPiArICAgIGlmIChhdmN0eC0+bGV2ZWwgIT0gRkZfTEVWRUxfVU5LTk9XTiAm JiBhdmN0eC0+bGV2ZWwgJiB+MHgxZikgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiSW52YWxpZCBsZXZlbCAlZFxuIiwgYXZjdHgtPmxldmVsKTsKPiArICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGZmX3ZhYXBp X2VuY29kZV9pbml0KGF2Y3R4KTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gKwo+ICsgICAgYXR0ci50eXBlID0gVkFDb25maWdBdHRyaWJFbmNBVjE7Cj4gKyAg ICB2YXMgPSB2YUdldENvbmZpZ0F0dHJpYnV0ZXMoY3R4LT5od2N0eC0+ZGlzcGxheSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX3Byb2ZpbGUsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT52YV9lbnRyeXBvaW50LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZhdHRyLCAxKTsKPiArICAgIGlmICh2YXMgIT0gVkFfU1RB VFVTX1NVQ0NFU1MpIHsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZh aWxlZCB0byBxdWVyeSAiCj4gKyAgICAgICAgICAgICAgICJjb25maWcgYXR0cmlidXRlOiAlZCAo JXMpLlxuIiwgdmFzLCB2YUVycm9yU3RyKHZhcykpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S X0VYVEVSTkFMOwo+ICsgICAgfSBlbHNlIGlmIChhdHRyLnZhbHVlID09IFZBX0FUVFJJQl9OT1Rf U1VQUE9SVEVEKSB7Cj4gKyAgICAgICAgcHJpdi0+YXR0ci52YWx1ZSA9IDA7Cj4gKyAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkF0dHJpYnV0ZSB0eXBlOiVkIGlzIG5vdCAi Cj4gKyAgICAgICAgICAgICAgICJzdXBwb3J0ZWQuXG4iLCBhdHRyLnR5cGUpOwo+ICsgICAgfSBl bHNlIHsKPiArICAgICAgICBwcml2LT5hdHRyLnZhbHVlID0gYXR0ci52YWx1ZTsKPiArICAgIH0K PiArCj4gKyAgICBhdHRyLnR5cGUgPSBWQUNvbmZpZ0F0dHJpYkVuY0FWMUV4dDE7Cj4gKyAgICB2 YXMgPSB2YUdldENvbmZpZ0F0dHJpYnV0ZXMoY3R4LT5od2N0eC0+ZGlzcGxheSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX3Byb2ZpbGUsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3R4LT52YV9lbnRyeXBvaW50LAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZhdHRyLCAxKTsKPiArICAgIGlmICh2YXMgIT0gVkFfU1RBVFVT X1NVQ0NFU1MpIHsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxl ZCB0byBxdWVyeSAiCj4gKyAgICAgICAgICAgICAgICJjb25maWcgYXR0cmlidXRlOiAlZCAoJXMp LlxuIiwgdmFzLCB2YUVycm9yU3RyKHZhcykpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOwo+ICsgICAgfSBlbHNlIGlmIChhdHRyLnZhbHVlID09IFZBX0FUVFJJQl9OT1RfU1VQ UE9SVEVEKSB7Cj4gKyAgICAgICAgcHJpdi0+YXR0cl9leHQxLnZhbHVlID0gMDsKPiArICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiQXR0cmlidXRlIHR5cGU6JWQgaXMgbm90 ICIKPiArICAgICAgICAgICAgICAgInN1cHBvcnRlZC5cbiIsIGF0dHIudHlwZSk7Cj4gKyAgICB9 IGVsc2Ugewo+ICsgICAgICAgIHByaXYtPmF0dHJfZXh0MS52YWx1ZSA9IGF0dHIudmFsdWU7Cj4g KyAgICB9Cj4gKwo+ICsgICAgLyoqIFRoaXMgYXR0ciBwcm92aWRlcyBlc3NlbnRpYWwgaW5kaWNh dG9ycywgcmV0dXJuIGVycm9yIGlmIG5vdCBzdXBwb3J0LiAqLwo+ICsgICAgYXR0ci50eXBlID0g VkFDb25maWdBdHRyaWJFbmNBVjFFeHQyOwo+ICsgICAgdmFzID0gdmFHZXRDb25maWdBdHRyaWJ1 dGVzKGN0eC0+aHdjdHgtPmRpc3BsYXksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3R4LT52YV9wcm9maWxlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0 eC0+dmFfZW50cnlwb2ludCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXR0 ciwgMSk7Cj4gKyAgICBpZiAodmFzICE9IFZBX1NUQVRVU19TVUNDRVNTIHx8IGF0dHIudmFsdWUg PT0gVkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBxdWVyeSAiCj4gKyAgICAgICAgICAgICAgICJjb25maWcg YXR0cmlidXRlOiAlZCAoJXMpLlxuIiwgdmFzLCB2YUVycm9yU3RyKHZhcykpOwo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBwcml2 LT5hdHRyX2V4dDIudmFsdWUgPSBhdHRyLnZhbHVlOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9 IHZhYXBpX2VuY29kZV9hdjFfc2V0X3RpbGUoYXZjdHgpOwo+ICsgICAgaWYgKHJldCA8IDApCj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KQo+ICt7Cj4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJp dl9kYXRhOwo+ICsKPiArICAgIGZmX2Nic19mcmFnbWVudF9mcmVlKCZwcml2LT5jdXJyZW50X29i dSk7Cj4gKyAgICBmZl9jYnNfY2xvc2UoJnByaXYtPmNiYyk7Cj4gKwo+ICsgICAgcmV0dXJuIGZm X3ZhYXBpX2VuY29kZV9jbG9zZShhdmN0eCk7Cj4gK30KPiArCj4gKyNkZWZpbmUgT0ZGU0VUKHgp IG9mZnNldG9mKFZBQVBJRW5jb2RlQVYxQ29udGV4dCwgeCkKPiArI2RlZmluZSBGTEFHUyAoQVZf T1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJBTSkKPiArCj4g K3N0YXRpYyBjb25zdCBBVk9wdGlvbiB2YWFwaV9lbmNvZGVfYXYxX29wdGlvbnNbXSA9IHsKPiAr ICAgIFZBQVBJX0VOQ09ERV9DT01NT05fT1BUSU9OUywKPiArICAgIFZBQVBJX0VOQ09ERV9SQ19P UFRJT05TLAo+ICsgICAgeyAicHJvZmlsZSIsICJTZXQgcHJvZmlsZSAoc2VxX3Byb2ZpbGUpIiwK PiArICAgICAgT0ZGU0VUKHByb2ZpbGUpLCBBVl9PUFRfVFlQRV9JTlQsCj4gKyAgICAgIHsgLmk2 NCA9IEZGX1BST0ZJTEVfVU5LTk9XTiB9LCBGRl9QUk9GSUxFX1VOS05PV04sIDB4ZmYsIEZMQUdT LCAicHJvZmlsZSIgfSwKPiArCj4gKyNkZWZpbmUgUFJPRklMRShuYW1lLCB2YWx1ZSkgIG5hbWUs IE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCBcCj4gKyAgICB7IC5pNjQgPSB2YWx1ZSB9LCAw LCAwLCBGTEFHUywgInByb2ZpbGUiCj4gKyAgICB7IFBST0ZJTEUoIm1haW4iLCAgICAgICAgICAg ICAgIEZGX1BST0ZJTEVfQVYxX01BSU4pIH0sCj4gKyAgICB7IFBST0ZJTEUoImhpZ2giLCAgICAg ICAgICAgICAgIEZGX1BST0ZJTEVfQVYxX0hJR0gpIH0sCj4gKyAgICB7IFBST0ZJTEUoInByb2Zl c3Npb25hbCIsICAgICAgIEZGX1BST0ZJTEVfQVYxX1BST0ZFU1NJT05BTCkgfSwKPiArI3VuZGVm IFBST0ZJTEUKPiArCj4gKyAgICB7ICJ0aWVyIiwgIlNldCB0aWVyIChzZXFfdGllcikiLAo+ICsg ICAgICBPRkZTRVQodGllciksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9LCAwLCAxLCBG TEFHUywgInRpZXIiIH0sCj4gKyAgICB7ICJtYWluIiwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09O U1QsCj4gKyAgICAgIHsgLmk2NCA9IDAgfSwgMCwgMCwgRkxBR1MsICJ0aWVyIiB9LAo+ICsgICAg eyAiaGlnaCIsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULAo+ICsgICAgICB7IC5pNjQgPSAx IH0sIDAsIDAsIEZMQUdTLCAidGllciIgfSwKPiArICAgIHsgImxldmVsIiwgIlNldCBsZXZlbCAo c2VxX2xldmVsX2lkeCkiLAo+ICsgICAgICBPRkZTRVQobGV2ZWwpLCBBVl9PUFRfVFlQRV9JTlQs Cj4gKyAgICAgIHsgLmk2NCA9IEZGX0xFVkVMX1VOS05PV04gfSwgRkZfTEVWRUxfVU5LTk9XTiwg MHgxZiwgRkxBR1MsICJsZXZlbCIgfSwKPiArCj4gKyNkZWZpbmUgTEVWRUwobmFtZSwgdmFsdWUp IG5hbWUsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCBcCj4gKyAgICAgIHsgLmk2NCA9IHZh bHVlIH0sIDAsIDAsIEZMQUdTLCAibGV2ZWwiCj4gKyAgICB7IExFVkVMKCIyLjAiLCAgMCkgfSwK PiArICAgIHsgTEVWRUwoIjIuMSIsICAxKSB9LAo+ICsgICAgeyBMRVZFTCgiMy4wIiwgIDQpIH0s Cj4gKyAgICB7IExFVkVMKCIzLjEiLCAgNSkgfSwKPiArICAgIHsgTEVWRUwoIjQuMCIsICA4KSB9 LAo+ICsgICAgeyBMRVZFTCgiNC4xIiwgIDkpIH0sCj4gKyAgICB7IExFVkVMKCI1LjAiLCAxMikg fSwKPiArICAgIHsgTEVWRUwoIjUuMSIsIDEzKSB9LAo+ICsgICAgeyBMRVZFTCgiNS4yIiwgMTQp IH0sCj4gKyAgICB7IExFVkVMKCI1LjMiLCAxNSkgfSwKPiArICAgIHsgTEVWRUwoIjYuMCIsIDE2 KSB9LAo+ICsgICAgeyBMRVZFTCgiNi4xIiwgMTcpIH0sCj4gKyAgICB7IExFVkVMKCI2LjIiLCAx OCkgfSwKPiArICAgIHsgTEVWRUwoIjYuMyIsIDE5KSB9LAo+ICsjdW5kZWYgTEVWRUwKPiArCj4g KyAgICB7ICJ0aWxlcyIsICJUaWxlIGNvbHVtbnMgeCByb3dzIiwKPiArICAgICAgT0ZGU0VUKHRp bGVfY29scyksIEFWX09QVF9UWVBFX0lNQUdFX1NJWkUsIHsgLnN0ciA9ICIxeDEiIH0sIDEsIEFW MV9NQVhfVElMRV9DT0xTLCBGTEFHUyB9LAo+ICsgICAgeyAidGlsZV9ncm91cHMiLCAiTnVtYmVy IG9mIHRpbGUgZ3JvdXBzIGZvciBlbmNvZGluZyIsCj4gKyAgICAgIE9GRlNFVCh0aWxlX2dyb3Vw cyksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMSB9LCAxLCBBVjFfTUFYX1RJTEVfUk9XUyAq IEFWMV9NQVhfVElMRV9DT0xTLCBGTEFHUyB9LAo+ICsKPiArICAgIHsgTlVMTCB9LAo+ICt9Owo+ ICsKPiArc3RhdGljIGNvbnN0IEZGQ29kZWNEZWZhdWx0IHZhYXBpX2VuY29kZV9hdjFfZGVmYXVs dHNbXSA9IHsKPiArICAgIHsgImIiLCAgICAgICAgICAgICAgIjAiICAgfSwKPiArICAgIHsgImJm IiwgICAgICAgICAgICAgIjciICAgfSwKPiArICAgIHsgImciLCAgICAgICAgICAgICAgIjEyMCIg fSwKPiArICAgIHsgInFtaW4iLCAgICAgICAgICAgIjEiICAgfSwKPiArICAgIHsgInFtYXgiLCAg ICAgICAgICAgIjI1NSIgfSwKPiArICAgIHsgTlVMTCB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNv bnN0IEFWQ2xhc3MgdmFhcGlfZW5jb2RlX2F2MV9jbGFzcyA9IHsKPiArICAgIC5jbGFzc19uYW1l ID0gImF2MV92YWFwaSIsCj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1l LAo+ICsgICAgLm9wdGlvbiAgICAgPSB2YWFwaV9lbmNvZGVfYXYxX29wdGlvbnMsCj4gKyAgICAu dmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPiArfTsKPiArCj4gK2NvbnN0IEZG Q29kZWMgZmZfYXYxX3ZhYXBpX2VuY29kZXIgPSB7Cj4gKyAgICAucC5uYW1lICAgICAgICAgPSAi YXYxX3ZhYXBpIiwKPiArICAgIENPREVDX0xPTkdfTkFNRSgiQVYxIChWQUFQSSkiKSwKPiArICAg IC5wLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKPiArICAgIC5wLmlkICAgICAg ICAgICA9IEFWX0NPREVDX0lEX0FWMSwKPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihW QUFQSUVuY29kZUFWMUNvbnRleHQpLAo+ICsgICAgLmluaXQgICAgICAgICAgID0gJnZhYXBpX2Vu Y29kZV9hdjFfaW5pdCwKPiArICAgIEZGX0NPREVDX1JFQ0VJVkVfUEFDS0VUX0NCKCZmZl92YWFw aV9lbmNvZGVfcmVjZWl2ZV9wYWNrZXQpLAo+ICsgICAgLmNsb3NlICAgICAgICAgID0gJnZhYXBp X2VuY29kZV9hdjFfY2xvc2UsCj4gKyAgICAucC5wcml2X2NsYXNzICAgPSAmdmFhcGlfZW5jb2Rl X2F2MV9jbGFzcywKPiArICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVDX0NBUF9ERUxBWSB8 IEFWX0NPREVDX0NBUF9IQVJEV0FSRSB8Cj4gKyAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RF Q19DQVBfRFIxIHwgQVZfQ09ERUNfQ0FQX0VOQ09ERVJfUkVPUkRFUkVEX09QQVFVRSwKPiArICAg IC5jYXBzX2ludGVybmFsICA9IEZGX0NPREVDX0NBUF9OT1RfSU5JVF9USFJFQURTQUZFIHwKPiAr ICAgICAgICAgICAgICAgICAgICAgIEZGX0NPREVDX0NBUF9JTklUX0NMRUFOVVAsCj4gKyAgICAu ZGVmYXVsdHMgICAgICAgPSB2YWFwaV9lbmNvZGVfYXYxX2RlZmF1bHRzLAo+ICsgICAgLnAucGl4 X2ZtdHMgPSAoY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0W10pIHsKPiArICAgICAgICBBVl9QSVhf Rk1UX1ZBQVBJLAo+ICsgICAgICAgIEFWX1BJWF9GTVRfTk9ORSwKPiArICAgIH0sCj4gKyAgICAu aHdfY29uZmlncyAgICAgPSBmZl92YWFwaV9lbmNvZGVfaHdfY29uZmlncywKPiArICAgIC5wLndy YXBwZXJfbmFtZSA9ICJ2YWFwaSIsCj4gK307Cj4gLS0KPiAyLjI1LjEKPgo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxp bmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21h aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGlu ayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGgg c3ViamVjdCAidW5zdWJzY3JpYmUiLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1w ZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoK VG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1y ZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==