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 E7B0B4464E for ; Sun, 20 Nov 2022 23:44:58 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6D52668BBAF; Mon, 21 Nov 2022 01:44:54 +0200 (EET) Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E10668BA61 for ; Mon, 21 Nov 2022 01:44:47 +0200 (EET) Received: by mail-qv1-f52.google.com with SMTP id d18so3549748qvs.6 for ; Sun, 20 Nov 2022 15:44:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc: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=wDQWf5mTspr/typmOe6bJMH3i53M3a5tlsPI/6SsCCQ=; b=qs5R0CyUB6X6tDHJ9CbbAhVc5HW+wkb2mHIFLMluIsX+hEijXuck7u8KeKQIhVC9fQ ZBosc9LuP6Z6h8XqRXFBAQpQt64LNJSiTokxnO8KmFUin7JOuMjMiF3sxJ/65Bfqk6n8 H6f9qUGr8dD3iimwjWjinvVuv+4heAbdomMpFQkV54vAm3NuFP0oKOJN4Iu8JyBZ1EcQ uynOxav0kvUtmtzhkXxkf5yt7vcasumwoxtIvZ/rRxEg9BHFfAoADSysQUogJT7V4WXD OTjlhU+IvsVzpiDWL2WVHask6gbVynv8SHnHh0e8BO4JXP0G//xwuxmjxGZKgXwLhsHR Y4/g== X-Gm-Message-State: ANoB5pkzgxdLF5as9POtvzT4lG59yfHx29LHsg9jkYT+iuQd29y+9bFW 8bVZ0mdjClPSPdSidIWX8Lh9D/e933D3jdvze6c= X-Google-Smtp-Source: AA0mqf6Yx3xf1Cl4ctsSeSGKayCizAQm8jKO47bTKtc/q3E/jKHnrRqFIHaGYoWhDXlz9f0RW0N6jnMwZowVwB9hxwo= X-Received: by 2002:a0c:e30e:0:b0:4bc:16b3:6a85 with SMTP id s14-20020a0ce30e000000b004bc16b36a85mr15198075qvl.129.1668987885057; Sun, 20 Nov 2022 15:44:45 -0800 (PST) MIME-Version: 1.0 References: <20221024031658.1026118-1-quinkblack@foxmail.com> In-Reply-To: From: Aman Karmani Date: Sun, 20 Nov 2022 15:44:33 -0800 Message-ID: To: =?UTF-8?B?emhpbGl6aGFvKOi1teW/l+eriyk=?= X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH 10/12] avcodec: add MediaCodec 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 Cc: 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: T24gU2F0LCBOb3YgMTksIDIwMjIgYXQgOToxMyBBTSAiemhpbGl6aGFvKOi1teW/l+eriykiIDxx dWlua2JsYWNrQGZveG1haWwuY29tPgp3cm90ZToKCj4KPgo+ID4gT24gTm92IDE5LCAyMDIyLCBh dCAxNzoxNSwgQW1hbiBLYXJtYW5pIDxhbWFuQHRtbTEubmV0PiB3cm90ZToKPiA+Cj4gPgo+ID4K PiA+IE9uIFN1biwgT2N0IDIzLCAyMDIyIGF0IDg6MTcgUE0gWmhhbyBaaGlsaSA8cXVpbmtibGFj a0Bmb3htYWlsLmNvbT4KPiB3cm90ZToKPiA+IEZyb206IFpoYW8gWmhpbGkgPHpoaWxpemhhb0B0 ZW5jZW50LmNvbT4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBaaGFvIFpoaWxpIDx6aGlsaXpoYW9A dGVuY2VudC5jb20+Cj4gPiAtLS0KPiA+ICBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKPiA+ICBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKPiA+ ICBsaWJhdmNvZGVjL01ha2VmaWxlICAgICAgICAgICAgIHwgICAyICsKPiA+ICBsaWJhdmNvZGVj L2FsbGNvZGVjcy5jICAgICAgICAgIHwgICAyICsKPiA+ICBsaWJhdmNvZGVjL21lZGlhY29kZWNf d3JhcHBlci5jIHwgMTAyICsrKysrKy0KPiA+ICBsaWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBl ci5oIHwgICA4ICsKPiA+ICBsaWJhdmNvZGVjL21lZGlhY29kZWNlbmMuYyAgICAgIHwgNDk1ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgbGliYXZjb2RlYy92ZXJzaW9uLmgg ICAgICAgICAgICB8ICAgNCArLQo+ID4gIDggZmlsZXMgY2hhbmdlZCwgNjExIGluc2VydGlvbnMo KyksIDcgZGVsZXRpb25zKC0pCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbWVk aWFjb2RlY2VuYy5jCj4gPgo+ID4gZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+ ID4gaW5kZXggOWUyMDM4MzNhYS4uOWUzOWEzNTk3MiAxMDA2NDQKPiA+IC0tLSBhL0NoYW5nZWxv Zwo+ID4gKysrIGIvQ2hhbmdlbG9nCj4gPiBAQCAtMTksNiArMTksNyBAQCB2ZXJzaW9uIDxuZXh0 PjoKPiA+ICAtIERUUyB0byBQVFMgcmVvcmRlciBic2YKPiA+ICAtIFZpZXdRdWVzdCBWUUMgZGVj b2Rlcgo+ID4gIC0gTWVkaWFDb2RlYyBkZWNvZGVyIHZpYSBOREtNZWRpYUNvZGVjCj4gPiArLSBN ZWRpYUNvZGVjIGVuY29kZXIKPiA+Cj4gPgo+ID4KPiA+ICB2ZXJzaW9uIDUuMToKPiA+IGRpZmYg LS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiA+IGluZGV4IGVlMmUzYmE2YWMuLjUxMTRj ZGExM2YgMTAwNzU1Cj4gPiAtLS0gYS9jb25maWd1cmUKPiA+ICsrKyBiL2NvbmZpZ3VyZQo+ID4g QEAgLTMxOTMsNiArMzE5Myw4IEBAIGgyNjRfY3V2aWRfZGVjb2Rlcl9zZWxlY3Q9ImgyNjRfbXA0 dG9hbm5leGJfYnNmIgo+ID4gIGgyNjRfbWVkaWFjb2RlY19kZWNvZGVyX2RlcHM9Im1lZGlhY29k ZWMiCj4gPiAgaDI2NF9tZWRpYWNvZGVjX2RlY29kZXJfZXh0cmFsaWJzPSItbGFuZHJvaWQiCj4g PiAgaDI2NF9tZWRpYWNvZGVjX2RlY29kZXJfc2VsZWN0PSJoMjY0X21wNHRvYW5uZXhiX2JzZiBo MjY0X3BhcnNlciIKPiA+ICtoMjY0X21lZGlhY29kZWNfZW5jb2Rlcl9kZXBzPSJtZWRpYWNvZGVj Igo+ID4gK2gyNjRfbWVkaWFjb2RlY19lbmNvZGVyX2V4dHJhbGlicz0iLWxhbmRyb2lkIgo+ID4g IGgyNjRfbWZfZW5jb2Rlcl9kZXBzPSJtZWRpYWZvdW5kYXRpb24iCj4gPiAgaDI2NF9tbWFsX2Rl Y29kZXJfZGVwcz0ibW1hbCIKPiA+ICBoMjY0X252ZW5jX2VuY29kZXJfZGVwcz0ibnZlbmMiCj4g PiBAQCAtMzIxMiw2ICszMjE0LDggQEAgaGV2Y19jdXZpZF9kZWNvZGVyX3NlbGVjdD0iaGV2Y19t cDR0b2FubmV4Yl9ic2YiCj4gPiAgaGV2Y19tZWRpYWNvZGVjX2RlY29kZXJfZGVwcz0ibWVkaWFj b2RlYyIKPiA+ICBoZXZjX21lZGlhY29kZWNfZGVjb2Rlcl9leHRyYWxpYnM9Ii1sYW5kcm9pZCIK PiA+ICBoZXZjX21lZGlhY29kZWNfZGVjb2Rlcl9zZWxlY3Q9ImhldmNfbXA0dG9hbm5leGJfYnNm IGhldmNfcGFyc2VyIgo+ID4gK2hldmNfbWVkaWFjb2RlY19lbmNvZGVyX2RlcHM9Im1lZGlhY29k ZWMiCj4gPiAraGV2Y19tZWRpYWNvZGVjX2VuY29kZXJfZXh0cmFsaWJzPSItbGFuZHJvaWQiCj4g PiAgaGV2Y19tZl9lbmNvZGVyX2RlcHM9Im1lZGlhZm91bmRhdGlvbiIKPiA+ICBoZXZjX252ZW5j X2VuY29kZXJfZGVwcz0ibnZlbmMiCj4gPiAgaGV2Y19udmVuY19lbmNvZGVyX3NlbGVjdD0iYXRz Y19hNTMiCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMv TWFrZWZpbGUKPiA+IGluZGV4IDkwYzdmMTEzYTMuLjdkMGI1MTNlZWMgMTAwNjQ0Cj4gPiAtLS0g YS9saWJhdmNvZGVjL01ha2VmaWxlCj4gPiArKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gPiBA QCAtMzkzLDYgKzM5Myw3IEBAIE9CSlMtJChDT05GSUdfSDI2NF9ERUNPREVSKSAgICAgICAgICAg ICs9IGgyNjRkZWMubwo+IGgyNjRfY2FiYWMubyBoMjY0X2NhdmxjLm8gXAo+ID4gIE9CSlMtJChD T05GSUdfSDI2NF9BTUZfRU5DT0RFUikgICAgICAgICs9IGFtZmVuY19oMjY0Lm8KPiA+ICBPQkpT LSQoQ09ORklHX0gyNjRfQ1VWSURfREVDT0RFUikgICAgICArPSBjdXZpZGRlYy5vCj4gPiAgT0JK Uy0kKENPTkZJR19IMjY0X01FRElBQ09ERUNfREVDT0RFUikgKz0gbWVkaWFjb2RlY2RlYy5vCj4g PiArT0JKUy0kKENPTkZJR19IMjY0X01FRElBQ09ERUNfRU5DT0RFUikgKz0gbWVkaWFjb2RlY2Vu Yy5vCj4gPiAgT0JKUy0kKENPTkZJR19IMjY0X01GX0VOQ09ERVIpICAgICAgICAgKz0gbWZlbmMu byBtZl91dGlscy5vCj4gPiAgT0JKUy0kKENPTkZJR19IMjY0X01NQUxfREVDT0RFUikgICAgICAg Kz0gbW1hbGRlYy5vCj4gPiAgT0JKUy0kKENPTkZJR19IMjY0X05WRU5DX0VOQ09ERVIpICAgICAg Kz0gbnZlbmNfaDI2NC5vIG52ZW5jLm8KPiA+IEBAIC00MTcsNiArNDE4LDcgQEAgT0JKUy0kKENP TkZJR19IRVZDX0RFQ09ERVIpICAgICAgICAgICAgKz0gaGV2Y2RlYy5vCj4gaGV2Y19tdnMubyBc Cj4gPiAgT0JKUy0kKENPTkZJR19IRVZDX0FNRl9FTkNPREVSKSAgICAgICAgKz0gYW1mZW5jX2hl dmMubwo+ID4gIE9CSlMtJChDT05GSUdfSEVWQ19DVVZJRF9ERUNPREVSKSAgICAgICs9IGN1dmlk ZGVjLm8KPiA+ICBPQkpTLSQoQ09ORklHX0hFVkNfTUVESUFDT0RFQ19ERUNPREVSKSArPSBtZWRp YWNvZGVjZGVjLm8KPiA+ICtPQkpTLSQoQ09ORklHX0hFVkNfTUVESUFDT0RFQ19FTkNPREVSKSAr PSBtZWRpYWNvZGVjZW5jLm8KPiA+ICBPQkpTLSQoQ09ORklHX0hFVkNfTUZfRU5DT0RFUikgICAg ICAgICArPSBtZmVuYy5vIG1mX3V0aWxzLm8KPiA+ICBPQkpTLSQoQ09ORklHX0hFVkNfTlZFTkNf RU5DT0RFUikgICAgICArPSBudmVuY19oZXZjLm8gbnZlbmMubwo+ID4gIE9CSlMtJChDT05GSUdf SEVWQ19RU1ZfREVDT0RFUikgICAgICAgICs9IHFzdmRlYy5vCj4gPiBkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiA+IGluZGV4IDQ2 YWQzYjVhMjUuLjRjMzNhOWVjM2MgMTAwNjQ0Cj4gPiAtLS0gYS9saWJhdmNvZGVjL2FsbGNvZGVj cy5jCj4gPiArKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gPiBAQCAtMTU0LDYgKzE1NCw3 IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfZGVjb2RlcjsKPiA+ICBleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9oMjY0X2NyeXN0YWxoZF9kZWNvZGVyOwo+ID4gIGV4dGVybiBjb25zdCBG RkNvZGVjIGZmX2gyNjRfdjRsMm0ybV9kZWNvZGVyOwo+ID4gIGV4dGVybiBjb25zdCBGRkNvZGVj IGZmX2gyNjRfbWVkaWFjb2RlY19kZWNvZGVyOwo+ID4gK2V4dGVybiBjb25zdCBGRkNvZGVjIGZm X2gyNjRfbWVkaWFjb2RlY19lbmNvZGVyOwo+ID4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gy NjRfbW1hbF9kZWNvZGVyOwo+ID4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfcXN2X2Rl Y29kZXI7Cj4gPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaDI2NF9ya21wcF9kZWNvZGVyOwo+ ID4gQEAgLTg0Miw2ICs4NDMsNyBAQCBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oMjY0X3ZpZGVv dG9vbGJveF9lbmNvZGVyOwo+ID4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNfYW1mX2Vu Y29kZXI7Cj4gPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaGV2Y19jdXZpZF9kZWNvZGVyOwo+ ID4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNfbWVkaWFjb2RlY19kZWNvZGVyOwo+ID4g K2V4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNfbWVkaWFjb2RlY19lbmNvZGVyOwo+ID4gIGV4 dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNfbWZfZW5jb2RlcjsKPiA+ICBleHRlcm4gY29uc3Qg RkZDb2RlYyBmZl9oZXZjX252ZW5jX2VuY29kZXI7Cj4gPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfaGV2Y19xc3ZfZW5jb2RlcjsKPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL21lZGlhY29k ZWNfd3JhcHBlci5jCj4gYi9saWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5jCj4gPiBpbmRl eCAyODRkNjE1OTgwLi41ZDFhMzIwMzFkIDEwMDY0NAo+ID4gLS0tIGEvbGliYXZjb2RlYy9tZWRp YWNvZGVjX3dyYXBwZXIuYwo+ID4gKysrIGIvbGliYXZjb2RlYy9tZWRpYWNvZGVjX3dyYXBwZXIu Ywo+ID4gQEAgLTIxMiw2ICsyMTIsOSBAQCBzdHJ1Y3QgSk5JQU1lZGlhQ29kZWNGaWVsZHMgewo+ ID4gICAgICBqbWV0aG9kSUQgcmVsZWFzZV9vdXRwdXRfYnVmZmVyX2lkOwo+ID4gICAgICBqbWV0 aG9kSUQgcmVsZWFzZV9vdXRwdXRfYnVmZmVyX2F0X3RpbWVfaWQ7Cj4gPgo+ID4gKyAgICBqbWV0 aG9kSUQgc2V0X2lucHV0X3N1cmZhY2VfaWQ7Cj4gPiArICAgIGptZXRob2RJRCBzaWduYWxfZW5k X29mX2lucHV0X3N0cmVhbV9pZDsKPiA+ICsKPiA+ICAgICAgamNsYXNzIG1lZGlhaW5mb19jbGFz czsKPiA+Cj4gPiAgICAgIGptZXRob2RJRCBpbml0X2lkOwo+ID4gQEAgLTI2MSw2ICsyNjQsOSBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IEZGSm5pRmllbGQKPiBqbmlfYW1lZGlhY29kZWNfbWFwcGlu Z1tdID0gewo+ID4gICAgICAgICAgeyAiYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjIiwgInJlbGVh c2VPdXRwdXRCdWZmZXIiLCAiKElaKVYiLAo+IEZGX0pOSV9NRVRIT0QsIG9mZnNldG9mKHN0cnVj dCBKTklBTWVkaWFDb2RlY0ZpZWxkcywKPiByZWxlYXNlX291dHB1dF9idWZmZXJfaWQpLCAxIH0s Cj4gPiAgICAgICAgICB7ICJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMiLCAicmVsZWFzZU91dHB1 dEJ1ZmZlciIsICIoSUopViIsCj4gRkZfSk5JX01FVEhPRCwgb2Zmc2V0b2Yoc3RydWN0IEpOSUFN ZWRpYUNvZGVjRmllbGRzLAo+IHJlbGVhc2Vfb3V0cHV0X2J1ZmZlcl9hdF90aW1lX2lkKSwgMCB9 LAo+ID4KPiA+ICsgICAgICAgIHsgImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyIsICJzZXRJbnB1 dFN1cmZhY2UiLAo+ICIoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIiwgRkZfSk5JX01FVEhPRCwg b2Zmc2V0b2Yoc3RydWN0Cj4gSk5JQU1lZGlhQ29kZWNGaWVsZHMsIHNldF9pbnB1dF9zdXJmYWNl X2lkKSwgMCB9LAo+ID4gKyAgICAgICAgeyAiYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjIiwgInNp Z25hbEVuZE9mSW5wdXRTdHJlYW0iLCAiKClWIiwKPiBGRl9KTklfTUVUSE9ELCBvZmZzZXRvZihz dHJ1Y3QgSk5JQU1lZGlhQ29kZWNGaWVsZHMsCj4gc2lnbmFsX2VuZF9vZl9pbnB1dF9zdHJlYW1f aWQpLCAwIH0sCj4gPiArCj4gPiAgICAgIHsgImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRCdWZm ZXJJbmZvIiwgTlVMTCwgTlVMTCwgRkZfSk5JX0NMQVNTLAo+IG9mZnNldG9mKHN0cnVjdCBKTklB TWVkaWFDb2RlY0ZpZWxkcywgbWVkaWFpbmZvX2NsYXNzKSwgMSB9LAo+ID4KPiA+ICAgICAgICAg IHsgImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYy5CdWZmZXJJbmZvIiwgIjxpbml0PiIsICIoKVYi LAo+IEZGX0pOSV9NRVRIT0QsIG9mZnNldG9mKHN0cnVjdCBKTklBTWVkaWFDb2RlY0ZpZWxkcywg aW5pdF9pZCksIDEgfSwKPiA+IEBAIC0xMzg1LDcgKzEzOTEsMjYgQEAgc3RhdGljIGludCBtZWRp YWNvZGVjX2puaV9jb25maWd1cmUoRkZBTWVkaWFDb2RlYwo+ICpjdHgsCj4gPgo+ID4gICAgICBK TklfR0VUX0VOVl9PUl9SRVRVUk4oZW52LCBjb2RlYywgQVZFUlJPUl9FWFRFUk5BTCk7Cj4gPgo+ ID4gLSAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9kKGVudiwgY29kZWMtPm9iamVjdCwKPiBjb2Rl Yy0+amZpZWxkcy5jb25maWd1cmVfaWQsIGZvcm1hdC0+b2JqZWN0LCBzdXJmYWNlLCBOVUxMLCBm bGFncyk7Cj4gPiArICAgIGlmIChmbGFncyAmIGNvZGVjLT5DT05GSUdVUkVfRkxBR19FTkNPREUp IHsKPiA+ICsgICAgICAgIGlmIChzdXJmYWNlICYmICFjb2RlYy0+amZpZWxkcy5zZXRfaW5wdXRf c3VyZmFjZV9pZCkgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IlN5c3RlbSBkb2Vzbid0IHN1cHBvcnQKPiBzZXRJbnB1dFN1cmZhY2VcbiIpOwo+ID4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4g KyAgICAgICAgKCplbnYpLT5DYWxsVm9pZE1ldGhvZChlbnYsIGNvZGVjLT5vYmplY3QsCj4gY29k ZWMtPmpmaWVsZHMuY29uZmlndXJlX2lkLCBmb3JtYXQtPm9iamVjdCwgTlVMTCwgTlVMTCwgZmxh Z3MpOwo+ID4gKyAgICAgICAgaWYgKGZmX2puaV9leGNlcHRpb25fY2hlY2soZW52LCAxLCBjb2Rl YykgPCAwKQo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKwo+ ID4gKyAgICAgICAgaWYgKCFzdXJmYWNlKQo+ID4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ID4g Kwo+ID4gKyAgICAgICAgKCplbnYpLT5DYWxsVm9pZE1ldGhvZChlbnYsIGNvZGVjLT5vYmplY3Qs Cj4gY29kZWMtPmpmaWVsZHMuc2V0X2lucHV0X3N1cmZhY2VfaWQsIHN1cmZhY2UpOwo+ID4gKyAg ICAgICAgaWYgKGZmX2puaV9leGNlcHRpb25fY2hlY2soZW52LCAxLCBjb2RlYykgPCAwKQo+ID4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICAgICAgcmV0dXJu IDA7Cj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9k KGVudiwgY29kZWMtPm9iamVjdCwKPiBjb2RlYy0+amZpZWxkcy5jb25maWd1cmVfaWQsIGZvcm1h dC0+b2JqZWN0LCBzdXJmYWNlLCBOVUxMLCBmbGFncyk7Cj4gPiArICAgIH0KPiA+ICAgICAgaWYg KGZmX2puaV9leGNlcHRpb25fY2hlY2soZW52LCAxLCBjb2RlYykgPCAwKSB7Cj4gPiAgICAgICAg ICByZXQgPSBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gICAgICAgICAgZ290byBmYWlsOwo+ID4gQEAg LTE3NDMsNiArMTc2OCwyMiBAQCBmYWlsOgo+ID4gICAgICByZXR1cm4gcmV0Owo+ID4gIH0KPiA+ Cj4gPiArc3RhdGljIGludCBtZWRpYWNvZGVjX2puaV9zaWduYWxFbmRPZklucHV0U3RyZWFtKEZG QU1lZGlhQ29kZWMgKmN0eCkKPiA+ICt7Cj4gPiArICAgIGludCByZXQgPSAwOwo+ID4gKyAgICBK TklFbnYgKmVudiA9IE5VTEw7Cj4gPiArICAgIEZGQU1lZGlhQ29kZWNKbmkgKmNvZGVjID0gKEZG QU1lZGlhQ29kZWNKbmkgKiljdHg7Cj4gPiArCj4gPiArICAgIEpOSV9HRVRfRU5WX09SX1JFVFVS TihlbnYsIGNvZGVjLCBBVkVSUk9SX0VYVEVSTkFMKTsKPiA+ICsKPiA+ICsgICAgKCplbnYpLT5D YWxsVm9pZE1ldGhvZChlbnYsIGNvZGVjLT5vYmplY3QsCj4gY29kZWMtPmpmaWVsZHMuc2lnbmFs X2VuZF9vZl9pbnB1dF9zdHJlYW1faWQpOwo+ID4gKyAgICBpZiAoZmZfam5pX2V4Y2VwdGlvbl9j aGVjayhlbnYsIDEsIGNvZGVjKSA8IDApIHsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsK PiA+ICBzdGF0aWMgY29uc3QgRkZBTWVkaWFGb3JtYXQgbWVkaWFfZm9ybWF0X2puaSA9IHsKPiA+ ICAgICAgLmNsYXNzID0gJmFtZWRpYWZvcm1hdF9jbGFzcywKPiA+Cj4gPiBAQCAtMTgwMSw2ICsx ODQyLDcgQEAgc3RhdGljIGNvbnN0IEZGQU1lZGlhQ29kZWMgbWVkaWFfY29kZWNfam5pID0gewo+ ID4KPiA+ICAgICAgLmdldENvbmZpZ3VyZUZsYWdFbmNvZGUgPSBtZWRpYWNvZGVjX2puaV9nZXRD b25maWd1cmVGbGFnRW5jb2RlLAo+ID4gICAgICAuY2xlYW5PdXRwdXRCdWZmZXJzID0gbWVkaWFj b2RlY19qbmlfY2xlYW5PdXRwdXRCdWZmZXJzLAo+ID4gKyAgICAuc2lnbmFsRW5kT2ZJbnB1dFN0 cmVhbSA9IG1lZGlhY29kZWNfam5pX3NpZ25hbEVuZE9mSW5wdXRTdHJlYW0sCj4gPiAgfTsKPiA+ Cj4gPiAgdHlwZWRlZiBzdHJ1Y3QgRkZBTWVkaWFGb3JtYXROZGsgewo+ID4gQEAgLTE4NjYsNiAr MTkwOCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBGRkFNZWRpYUNvZGVjTmRrIHsKPiA+ICAgICAgLy8g QXZhaWxhYmxlIHNpbmNlIEFQSSBsZXZlbCAyOC4KPiA+ICAgICAgbWVkaWFfc3RhdHVzX3QgKCpn ZXROYW1lKShBTWVkaWFDb2RlYyosIGNoYXIqKiBvdXRfbmFtZSk7Cj4gPiAgICAgIHZvaWQgKCpy ZWxlYXNlTmFtZSkoQU1lZGlhQ29kZWMqLCBjaGFyKiBuYW1lKTsKPiA+ICsKPiA+ICsgICAgLy8g QXZhaWxhYmxlIHNpbmNlIEFQSSBsZXZlbCAyNi4KPiA+ICsgICAgbWVkaWFfc3RhdHVzX3QgKCpz ZXRJbnB1dFN1cmZhY2UpKEFNZWRpYUNvZGVjKiwgQU5hdGl2ZVdpbmRvdyAqKTsKPiA+ICsgICAg bWVkaWFfc3RhdHVzX3QgKCpzaWduYWxFbmRPZklucHV0U3RyZWFtKShBTWVkaWFDb2RlYyAqKTsK PiA+ICB9IEZGQU1lZGlhQ29kZWNOZGs7Cj4gPgo+ID4gIHN0YXRpYyBjb25zdCBGRkFNZWRpYUZv cm1hdCBtZWRpYV9mb3JtYXRfbmRrOwo+ID4gQEAgLTIwOTgsNiArMjE0NCw5IEBAIHN0YXRpYyBp bmxpbmUgRkZBTWVkaWFDb2RlYyAqbmRrX2NvZGVjX2NyZWF0ZShpbnQKPiBtZXRob2QsIGNvbnN0 IGNoYXIgKmFyZykgewo+ID4gICAgICBHRVRfU1lNQk9MKGdldE5hbWUsIDApCj4gPiAgICAgIEdF VF9TWU1CT0wocmVsZWFzZU5hbWUsIDApCj4gPgo+ID4gKyAgICBHRVRfU1lNQk9MKHNldElucHV0 U3VyZmFjZSwgMCkKPiA+ICsgICAgR0VUX1NZTUJPTChzaWduYWxFbmRPZklucHV0U3RyZWFtLCAw KQo+ID4gKwo+ID4gICN1bmRlZiBHRVRfU1lNQk9MCj4gPgo+ID4gICAgICBzd2l0Y2ggKG1ldGhv ZCkgewo+ID4gQEAgLTIxODQsMTAgKzIyMzMsMzIgQEAgc3RhdGljIGludAo+IG1lZGlhY29kZWNf bmRrX2NvbmZpZ3VyZShGRkFNZWRpYUNvZGVjKiBjdHgsCj4gPiAgICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOwo+ID4gICAgICB9Cj4gPgo+ID4gLSAgICBzdGF0dXMgPSBjb2RlYy0+Y29u ZmlndXJlKGNvZGVjLT5pbXBsLCBmb3JtYXQtPmltcGwsIG5hdGl2ZV93aW5kb3csCj4gTlVMTCwg ZmxhZ3MpOwo+ID4gLSAgICBpZiAoc3RhdHVzICE9IEFNRURJQV9PSykgewo+ID4gLSAgICAgICAg YXZfbG9nKGNvZGVjLCBBVl9MT0dfRVJST1IsICJjb25maWd1cmUgZmFpbGVkLCAlZFxuIiwgc3Rh dHVzKTsKPiA+IC0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICBpZiAo ZmxhZ3MgJiBBTUVESUFDT0RFQ19DT05GSUdVUkVfRkxBR19FTkNPREUpIHsKPiA+ICsgICAgICAg IGlmIChuYXRpdmVfd2luZG93ICYmICFjb2RlYy0+c2V0SW5wdXRTdXJmYWNlKSB7Cj4gPiArICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiU3lzdGVtIGRvZXNuJ3Qgc3VwcG9y dAo+IHNldElucHV0U3VyZmFjZVxuIik7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBzdGF0dXMgPSBjb2Rl Yy0+Y29uZmlndXJlKGNvZGVjLT5pbXBsLCBmb3JtYXQtPmltcGwsIE5VTEwsCj4gTlVMTCwgZmxh Z3MpOwo+ID4gKyAgICAgICAgaWYgKHN0YXR1cyAhPSBBTUVESUFfT0spIHsKPiA+ICsgICAgICAg ICAgICBhdl9sb2coY29kZWMsIEFWX0xPR19FUlJPUiwgIkVuY29kZXIgY29uZmlndXJlIGZhaWxl ZCwKPiAlZFxuIiwgc3RhdHVzKTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlmICghbmF0aXZlX3dpbmRv dykKPiA+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgICAgIHN0YXR1cyA9 IGNvZGVjLT5zZXRJbnB1dFN1cmZhY2UoY29kZWMtPmltcGwsIG5hdGl2ZV93aW5kb3cpOwo+ID4g KyAgICAgICAgaWYgKHN0YXR1cyAhPSBBTUVESUFfT0spIHsKPiA+ICsgICAgICAgICAgICBhdl9s b2coY29kZWMsIEFWX0xPR19FUlJPUiwgIkVuY29kZXIgc2V0IGlucHV0IHN1cmZhY2UKPiBmYWls ZWQsICVkXG4iLCBzdGF0dXMpOwo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgc3RhdHVz ID0gY29kZWMtPmNvbmZpZ3VyZShjb2RlYy0+aW1wbCwgZm9ybWF0LT5pbXBsLAo+IG5hdGl2ZV93 aW5kb3csIE5VTEwsIGZsYWdzKTsKPiA+ICsgICAgICAgIGlmIChzdGF0dXMgIT0gQU1FRElBX09L KSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKGNvZGVjLCBBVl9MT0dfRVJST1IsICJEZWNvZGVy IGNvbmZpZ3VyZSBmYWlsZWQsCj4gJWRcbiIsIHN0YXR1cyk7Cj4gPiArICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gPiArICAgICAgICB9Cj4gPiAgICAgIH0KPiA+Cj4gPiAg ICAgIHJldHVybiAwOwo+ID4gQEAgLTIzMzAsNiArMjQwMSwyNiBAQCBzdGF0aWMgaW50Cj4gbWVk aWFjb2RlY19uZGtfY2xlYW5PdXRwdXRCdWZmZXJzKEZGQU1lZGlhQ29kZWMgKmN0eCkKPiA+ICAg ICAgcmV0dXJuIDA7Cj4gPiAgfQo+ID4KPiA+ICtzdGF0aWMgaW50IG1lZGlhY29kZWNfbmRrX3Np Z25hbEVuZE9mSW5wdXRTdHJlYW0oRkZBTWVkaWFDb2RlYyAqY3R4KQo+ID4gK3sKPiA+ICsgICAg RkZBTWVkaWFDb2RlY05kayAqY29kZWMgPSAoRkZBTWVkaWFDb2RlY05kayAqKWN0eDsKPiA+ICsg ICAgbWVkaWFfc3RhdHVzX3Qgc3RhdHVzOwo+ID4gKwo+ID4gKyAgICBpZiAoIWNvZGVjLT5zaWdu YWxFbmRPZklucHV0U3RyZWFtKSB7Cj4gPiArICAgICAgICBhdl9sb2coY29kZWMsIEFWX0xPR19F UlJPUiwgInNpZ25hbEVuZE9mSW5wdXRTdHJlYW0KPiB1bmF2YWlsYWJsZVxuIik7Cj4gPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBz dGF0dXMgPSBjb2RlYy0+c2lnbmFsRW5kT2ZJbnB1dFN0cmVhbShjb2RlYy0+aW1wbCk7Cj4gPiAr ICAgIGlmIChzdGF0dXMgIT0gQU1FRElBX09LKSB7Cj4gPiArICAgICAgICBhdl9sb2coY29kZWMs IEFWX0xPR19FUlJPUiwgInNpZ25hbEVuZE9mSW5wdXRTdHJlYW0gZmFpbGVkLAo+ICVkXG4iLCBz dGF0dXMpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gPiArICAgIH0K PiA+ICsgICAgYXZfbG9nKGNvZGVjLCBBVl9MT0dfREVCVUcsICJzaWduYWxFbmRPZklucHV0U3Ry ZWFtIHN1Y2Nlc3NcbiIpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiAgc3RhdGljIGNvbnN0IEZGQU1lZGlhRm9ybWF0IG1lZGlhX2Zvcm1hdF9uZGsgPSB7Cj4gPiAg ICAgIC5jbGFzcyA9ICZhbWVkaWFmb3JtYXRfbmRrX2NsYXNzLAo+ID4KPiA+IEBAIC0yMzg4LDYg KzI0NzksNyBAQCBzdGF0aWMgY29uc3QgRkZBTWVkaWFDb2RlYyBtZWRpYV9jb2RlY19uZGsgPSB7 Cj4gPgo+ID4gICAgICAuZ2V0Q29uZmlndXJlRmxhZ0VuY29kZSA9IG1lZGlhY29kZWNfbmRrX2dl dENvbmZpZ3VyZUZsYWdFbmNvZGUsCj4gPiAgICAgIC5jbGVhbk91dHB1dEJ1ZmZlcnMgPSBtZWRp YWNvZGVjX25ka19jbGVhbk91dHB1dEJ1ZmZlcnMsCj4gPiArICAgIC5zaWduYWxFbmRPZklucHV0 U3RyZWFtID0gbWVkaWFjb2RlY19uZGtfc2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSwKPiA+ICB9Owo+ ID4KPiA+ICBGRkFNZWRpYUZvcm1hdCAqZmZfQU1lZGlhRm9ybWF0X25ldyhpbnQgbmRrKQo+ID4g ZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbWVkaWFjb2RlY193cmFwcGVyLmgKPiBiL2xpYmF2Y29k ZWMvbWVkaWFjb2RlY193cmFwcGVyLmgKPiA+IGluZGV4IDdjZjNmNGFlY2QuLmYxNWFkNjZkODMg MTAwNjQ0Cj4gPiAtLS0gYS9saWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5oCj4gPiArKysg Yi9saWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5oCj4gPiBAQCAtMTkyLDYgKzE5Miw5IEBA IHN0cnVjdCBGRkFNZWRpYUNvZGVjIHsKPiA+ICAgICAgaW50ICgqZ2V0Q29uZmlndXJlRmxhZ0Vu Y29kZSkoRkZBTWVkaWFDb2RlYyAqY29kZWMpOwo+ID4KPiA+ICAgICAgaW50ICgqY2xlYW5PdXRw dXRCdWZmZXJzKShGRkFNZWRpYUNvZGVjICpjb2RlYyk7Cj4gPiArCj4gPiArICAgIC8vIEZvciBl bmNvZGVyIHdpdGggRkZBTmF0aXZlV2luZG93IGFzIGlucHV0Lgo+ID4gKyAgICBpbnQgKCpzaWdu YWxFbmRPZklucHV0U3RyZWFtKShGRkFNZWRpYUNvZGVjICopOwo+ID4gIH07Cj4gPgo+ID4gIHN0 YXRpYyBpbmxpbmUgY2hhciAqZmZfQU1lZGlhQ29kZWNfZ2V0TmFtZShGRkFNZWRpYUNvZGVjICpj b2RlYykKPiA+IEBAIC0zMTEsNiArMzE0LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50Cj4gZmZfQU1l ZGlhQ29kZWNfY2xlYW5PdXRwdXRCdWZmZXJzKEZGQU1lZGlhQ29kZWMgKmNvZGVjKQo+ID4gICAg ICByZXR1cm4gY29kZWMtPmNsZWFuT3V0cHV0QnVmZmVycyhjb2RlYyk7Cj4gPiAgfQo+ID4KPiA+ ICtzdGF0aWMgaW5saW5lIGludCBmZl9BTWVkaWFDb2RlY19zaWduYWxFbmRPZklucHV0U3RyZWFt KEZGQU1lZGlhQ29kZWMKPiAqY29kZWMpCj4gPiArewo+ID4gKyAgICByZXR1cm4gY29kZWMtPnNp Z25hbEVuZE9mSW5wdXRTdHJlYW0oY29kZWMpOwo+ID4gK30KPiA+ICsKPiA+ICBpbnQgZmZfQnVp bGRfU0RLX0lOVChBVkNvZGVjQ29udGV4dCAqYXZjdHgpOwo+ID4KPiA+ICAjZW5kaWYgLyogQVZD T0RFQ19NRURJQUNPREVDX1dSQVBQRVJfSCAqLwo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv bWVkaWFjb2RlY2VuYy5jIGIvbGliYXZjb2RlYy9tZWRpYWNvZGVjZW5jLmMKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi5jODEwNTBlYzgwCj4gPiAtLS0gL2Rl di9udWxsCj4gPiArKysgYi9saWJhdmNvZGVjL21lZGlhY29kZWNlbmMuYwo+ID4gQEAgLTAsMCAr MSw0OTUgQEAKPiA+ICsvKgo+ID4gKyAqIEFuZHJvaWQgTWVkaWFDb2RlYyBlbmNvZGVycwo+ID4g KyAqCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDIyIFpoYW8gWmhpbGkgPHpoaWxpemhhb0B0ZW5j ZW50LmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiA+ ICsgKgo+ID4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKPiA+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gPiArICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gPiAr ICoKPiA+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gPiArICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiA+ICsgKgo+ID4gKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+IDAyMTEwLTEzMDEgVVNBCj4gPiAr ICovCj4gPiArCj4gPiArI2luY2x1ZGUgImNvbmZpZ19jb21wb25lbnRzLmgiCj4gPiArCj4gPiAr I2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwv aHdjb250ZXh0X21lZGlhY29kZWMuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxz LmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiA+ICsKPiA+ICsjaW5jbHVkZSAi YXZjb2RlYy5oIgo+ID4gKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgo+ID4gKyNpbmNsdWRl ICJlbmNvZGUuaCIKPiA+ICsjaW5jbHVkZSAiaHdjb25maWcuaCIKPiA+ICsjaW5jbHVkZSAiam5p LmgiCj4gPiArI2luY2x1ZGUgIm1lZGlhY29kZWMuaCIKPiA+ICsjaW5jbHVkZSAibWVkaWFjb2Rl Y193cmFwcGVyLmgiCj4gPiArI2luY2x1ZGUgIm1lZGlhY29kZWNkZWNfY29tbW9uLmgiCj4gPiAr Cj4gPiArI2RlZmluZSBJTlBVVF9ERVFVRVVFX1RJTUVPVVRfVVMgODAwMAo+ID4gKyNkZWZpbmUg T1VUUFVUX0RFUVVFVUVfVElNRU9VVF9VUyA4MDAwCj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1Y3Qg TWVkaWFDb2RlY0VuY0NvbnRleHQgewo+ID4gKyAgICBBVkNsYXNzICphdmNsYXNzOwo+ID4gKyAg ICBGRkFNZWRpYUNvZGVjICpjb2RlYzsKPiA+ICsgICAgaW50IHVzZV9uZGtfY29kZWM7Cj4gPiAr ICAgIEZGQU5hdGl2ZVdpbmRvdyAqd2luZG93Owo+ID4gKwo+ID4gKyAgICBpbnQgZnBzOwo+ID4g KyAgICBpbnQgd2lkdGg7Cj4gPiArICAgIGludCBoZWlnaHQ7Cj4gPiArCj4gPiArICAgIHVpbnQ4 X3QgKmV4dHJhZGF0YTsKPiA+ICsgICAgaW50IGV4dHJhZGF0YV9zaXplOwo+ID4gKwo+ID4gKyAg ICAvLyBTaW5jZSBNZWRpYUNvZGVjIGRvZXNuJ3Qgb3V0cHV0IERUUywgdXNlIGEgdGltZXN0YW1w IHF1ZXVlIHRvCj4gc2F2ZSBwdHMKPiA+ICsgICAgLy8gb2YgQVZGcmFtZSBhbmQgZ2VuZXJhdGUg RFRTIGZvciBBVlBhY2tldC4KPiA+ICsgICAgLy8KPiA+ICsgICAgLy8gVGhpcyBkb2Vzbid0IHdv cmsgd2hlbiB1c2UgU3VyZmFjZSBhcyBpbnB1dCwgaW4gdGhhdCBjYXNlIGZyYW1lcwo+IGNhbiBi ZQo+ID4gKyAgICAvLyBzZW50IHRvIGVuY29kZXIgd2l0aG91dCBvdXIgbm90aWNlLiBPbmUgZXhj ZXB0aW9uIGlzIGZyYW1lcyBjb21lCj4gZnJvbQo+ID4gKyAgICAvLyBvdXIgTWVkaWFDb2RlYyBk ZWNvZGVyIHdyYXBwZXIsIHNpbmNlIHdlIGNhbiBjb250cm9sIGl0J3MgcmVuZGVyCj4gYnkKPiA+ ICsgICAgLy8gYXZfbWVkaWFjb2RlY19yZWxlYXNlX2J1ZmZlci4KPiA+ICsgICAgaW50NjRfdCB0 aW1lc3RhbXBzWzMyXTsKPiA+ICsgICAgaW50IHRzX2hlYWQ7Cj4gPiArICAgIGludCB0c190YWls Owo+ID4gKwo+ID4gKyAgICBpbnQgZW9mX3NlbnQ7Cj4gPiArCj4gPiArICAgIEFWRnJhbWUgKmZy YW1lOwo+ID4gK30gTWVkaWFDb2RlY0VuY0NvbnRleHQ7Cj4gPiArCj4gPiArZW51bSB7Cj4gPiAr ICAgIENPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ID0gMHgxMywKPiA+ICsgICAgQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciAgICAgICAgICAg ICAgICAgICAgICAgICAgPSAweDE1LAo+ID4gKyAgICBDT0xPUl9Gb3JtYXRTdXJmYWNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4N0YwMDA3ODksCj4gPiArfTsKPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiA+ICsgICAgaW50IGNvbG9yX2Zvcm1hdDsKPiA+ ICsgICAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQ7Cj4gPiArfSBjb2xvcl9mb3JtYXRzW10g PSB7Cj4gPiArICAgIHsgQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyLCAgICAgICAgIEFWX1BJWF9G TVRfWVVWNDIwUCB9LAo+ID4gKyAgICB7IENPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsICAg ICBBVl9QSVhfRk1UX05WMTIgICAgfSwKPiA+ICsgICAgeyBDT0xPUl9Gb3JtYXRTdXJmYWNlLCAg ICAgICAgICAgICAgQVZfUElYX0ZNVF9NRURJQUNPREVDIH0sCj4gPiArfTsKPiA+ICsKPiA+ICtz dGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IGF2Y19waXhfZm10c1tdID0gewo+ID4gKyAg ICBBVl9QSVhfRk1UX01FRElBQ09ERUMsCj4gPiArICAgIEFWX1BJWF9GTVRfWVVWNDIwUCwKPiA+ ICsgICAgQVZfUElYX0ZNVF9OVjEyLAo+ID4gKyAgICBBVl9QSVhfRk1UX05PTkUKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1lZGlhY29kZWNfb3V0cHV0X2Zvcm1hdChBVkNvZGVjQ29u dGV4dCAqYXZjdHgpCj4gPiArewo+ID4gKyAgICBNZWRpYUNvZGVjRW5jQ29udGV4dCAqcyA9IGF2 Y3R4LT5wcml2X2RhdGE7Cj4gPiArICAgIGNoYXIgKm5hbWUgPSBmZl9BTWVkaWFDb2RlY19nZXRO YW1lKHMtPmNvZGVjKTsKPiA+ICsgICAgRkZBTWVkaWFGb3JtYXQgKm91dF9mb3JtYXQgPQo+IGZm X0FNZWRpYUNvZGVjX2dldE91dHB1dEZvcm1hdChzLT5jb2RlYyk7Cj4gPiArICAgIGNoYXIgKnN0 ciA9IGZmX0FNZWRpYUZvcm1hdF90b1N0cmluZyhvdXRfZm9ybWF0KTsKPiA+ICsKPiA+ICsgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJNZWRpYUNvZGVjIGVuY29kZXIgJXMgb3V0cHV0 IGZvcm1hdAo+ICVzXG4iLAo+ID4gKyAgICAgICAgICAgbmFtZSA/IG5hbWUgOiAidW5rbm93biIs IHN0cik7Cj4gPiArICAgIGF2X2ZyZWUobmFtZSk7Cj4gPiArICAgIGF2X2ZyZWUoc3RyKTsKPiA+ ICsgICAgZmZfQU1lZGlhRm9ybWF0X2RlbGV0ZShvdXRfZm9ybWF0KTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGF2X2NvbGQgaW50IG1lZGlhY29kZWNfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZj dHgpCj4gPiArewo+ID4gKyAgICBjb25zdCBjaGFyICpjb2RlY19taW1lID0gTlVMTDsKPiA+ICsg ICAgTWVkaWFDb2RlY0VuY0NvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gKyAgICBG RkFNZWRpYUZvcm1hdCAqZm9ybWF0ID0gTlVMTDsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsgICAg aW50IGdvcDsKPiA+ICsKPiA+ICsgICAgaWYgKHMtPnVzZV9uZGtfY29kZWMgPCAwKQo+ID4gKyAg ICAgICAgcy0+dXNlX25ka19jb2RlYyA9ICFhdl9qbmlfZ2V0X2phdmFfdm0oYXZjdHgpOwo+ID4g Kwo+ID4gKyAgICBzd2l0Y2ggKGF2Y3R4LT5jb2RlY19pZCkgewo+ID4gKyAgICBjYXNlIEFWX0NP REVDX0lEX0gyNjQ6Cj4gPiArICAgICAgICBjb2RlY19taW1lID0gInZpZGVvL2F2YyI7Cj4gPiAr ICAgICAgICBicmVhazsKPiA+ICsgICAgY2FzZSBBVl9DT0RFQ19JRF9IRVZDOgo+ID4gKyAgICAg ICAgY29kZWNfbWltZSA9ICJ2aWRlby9oZXZjIjsKPiA+ICsgICAgICAgIGJyZWFrOwo+ID4gKyAg ICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgYXZfYXNzZXJ0MCgwKTsKPiA+ICsgICAgfQo+ID4gKwo+ ID4gKyAgICBzLT5jb2RlYyA9IGZmX0FNZWRpYUNvZGVjX2NyZWF0ZUVuY29kZXJCeVR5cGUoY29k ZWNfbWltZSwKPiBzLT51c2VfbmRrX2NvZGVjKTsKPiA+ICsgICAgaWYgKCFzLT5jb2RlYykgewo+ ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRl IGVuY29kZXIgZm9yIHR5cGUKPiAlc1xuIiwKPiA+ICsgICAgICAgICAgICAgICBjb2RlY19taW1l KTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICB9Cj4gPiAr Cj4gPiArICAgIGZvcm1hdCA9IGZmX0FNZWRpYUZvcm1hdF9uZXcocy0+dXNlX25ka19jb2RlYyk7 Cj4gPiArICAgIGlmICghZm9ybWF0KSB7Cj4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgbWVkaWEgZm9ybWF0XG4iKTsKPiA+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGZmX0FN ZWRpYUZvcm1hdF9zZXRTdHJpbmcoZm9ybWF0LCAibWltZSIsIGNvZGVjX21pbWUpOwo+ID4gKyAg ICBzLT53aWR0aCA9IEZGQUxJR04oYXZjdHgtPndpZHRoLCAxNik7Cj4gPiArICAgIHMtPmhlaWdo dCA9IGF2Y3R4LT5oZWlnaHQ7Cj4gPiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQzMihmb3Jt YXQsICJ3aWR0aCIsIHMtPndpZHRoKTsKPiA+ICsgICAgZmZfQU1lZGlhRm9ybWF0X3NldEludDMy KGZvcm1hdCwgImhlaWdodCIsIHMtPmhlaWdodCk7Cj4gPgo+ID4gSXMgaXQgcHJlZmVyYWJsZSB0 byB1c2UgY29uc3RhbnRzIGxpa2UgQU1FRElBRk9STUFUX0tFWV9IRUlHSFQgaGVyZT8KPiA+Cj4g PiBJIGRvbid0IGhhdmUgYSBwcmVmZXJlbmNlIGVpdGhlciB3YXkuCj4KPiBUaGVzZSBLRVlzIGFy ZW7igJl0IHN0cmluZyBsaXRlcmFsLCB0aGV5IGFyZSBnbG9iYWwgdmFyaWFibGVzLgo+Cj4gZXh0 ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfSEVJR0hUIF9fSU5UUk9EVUNFRF9JTigy MSk7Cj4KPiBTb21lIGJhc2ljIG9uZXMgYXJlIGludHJvZHVjZWQgdmVyeSBsYXRlLCBlLmcuLAo+ Cj4gZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ1NEIF9fSU5UUk9EVUNFRF9J TigyOCk7Cj4gZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzAgX19JTlRS T0RVQ0VEX0lOKDI4KTsKPiBleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DU0Rf MSBfX0lOVFJPRFVDRURfSU4oMjgpOwo+IGV4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRf S0VZX0NTRF8yIF9fSU5UUk9EVUNFRF9JTigyOCk7Cj4gZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJ QUZPUk1BVF9LRVlfRElTUExBWV9DUk9QIF9fSU5UUk9EVUNFRF9JTigyOCk7Cj4KPiBTbyB3ZSBj YW7igJl0IHVzZSB0aGVzZSBBTUVESUFGT1JNQVRfS0VZXyBkaXJlY3RseS4gZGxzeW0oKSB0aGVz ZSBnbG9iYWwKPiB2YXJpYWJsZXMgYW5kIHdpdGggYSBmYWxsYmFjayB2YWx1ZSBpcyBwb3NzaWJs ZSwganVzdCBvdmVyLWVuZ2luZWVyaW5nLgo+Cj4gR29vZ2xl4oCZcyBBUEkgZGVzaWduIGZvcmNl ZCB1cyB0byB1c2Ugc3RyaW5nIGxpdGVyYWwgZGlyZWN0bHkuCj4KPiA+Cj4gPiBJdCBtYXkgYmUg d29ydGggYWxzbyBwYXNzaW5nIGluIHRoZSBzYW1lIHZhbHVlcyB0bwo+IEFNRURJQUZPUk1BVF9L RVlfTUFYX1dJRFRIIGFuZCBBTUVESUFGT1JNQVRfS0VZX01BWF9IRUlHSFQKPgo+IFRoZSBkb2N1 bWVudGF0aW9uIGhpbnRzIHRoZXkgYXJlIGZvciBkZWNvZGVyIG9ubHk6Cj4KPiA+IEEga2V5IGRl c2NyaWJpbmcgdGhlIG1heGltdW0gZXhwZWN0ZWQgd2lkdGggb2YgdGhlIGNvbnRlbnQgaW4gYSB2 aWRlbwo+IGRlY29kZXIgZm9ybWF0LCBpbiBjYXNlIHRoZXJlIGFyZSByZXNvbHV0aW9uIGNoYW5n ZXMgaW4gdGhlIHZpZGVvIGNvbnRlbnQuCj4KPiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNv bS9yZWZlcmVuY2UvYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdAo+Cj4gPgo+ID4gQW5kIEkgdGhp bmsgdGhlIHVuYWxpZ25lZCB3aWR0aCBzaG91bGQgYmUgc2V0IGludG8KPiBBTUVESUFGT1JNQVRf S0VZX1NUUklERQo+Cj4gVGVjaG5pY2FsbHksIEtFWV9XSURUSCBzaG91bGQgYmUgdW5hbGlnbmVk IHdpZHRoLCBhbmQgS0VZX1NUUklERSBzaG91bGQKPiBiZSBhbGlnbmVkIHdpZHRoLiBIb3dldmVy LAo+Cj4gMS4gSXTigJlzIHdlbGwga25vd24gdGhhdCBhIGxvdCBvZiBkZXZpY2VzIGNhbuKAmXQg aGFuZGxlIHdpZHRoIGRvZXNu4oCZdCBhbGlnbmVkCj4gdG8gMTYsIHRoZXkgd2lsbCBjcmFzaCwg cmVwb3J0IGVycm9yIG9yIHByb2R1Y2UgYnJva2VuIGZpbGVzLgo+Cj4gMi4gQ1RTIHRlc3RzIG9u bHkgdmVyaWZ5IHRoYXQgMTYgYWxpZ25lZCByZXNvbHV0aW9ucyBhcmUgc3VwcG9ydGVkLgo+Cj4g My4gVGhlcmUgYXJlIGFsaWdubWVudCBpbmZvIGluIE9NWCBhbmQgZXhwb3J0ZWQgdmlhIE1lZGlh Q29kZWNJbmZvLCBsaWtlCj4KPiAgICAgICAgIDxNZWRpYUNvZGVjIG5hbWU9ImMyLnF0aS5hdmMu ZW5jb2RlciIgdHlwZT0idmlkZW8vYXZjIj4KPiAgICAgICAgICAgICA8QWxpYXMgbmFtZT0iT01Y LnFjb20udmlkZW8uZW5jb2Rlci5hdmMiIC8+Cj4gICAgICAgICAgICAgPExpbWl0IG5hbWU9InNp emUiIG1pbj0iOTZ4OTYiIG1heD0iNDA5NngyMzA0IiAvPgo+ICAgICAgICAgICAgIDxMaW1pdCBu YW1lPSJhbGlnbm1lbnQiIHZhbHVlPSIyeDIiIC8+Cj4gICAgICAgICAgICAgPExpbWl0IG5hbWU9 ImJsb2NrLXNpemUiIHZhbHVlPSIxNngxNiIgLz4KPgo+IEl0IGNhbiBiZSBtaXNzaW5nIG9uIG9s ZCBkZXZpY2VzLCBvciB3b3JzZSwgdGhlIGluZm8gZG9lc27igJl0IHJlZmxlY3QgdGhlCj4gcmVh bCByZXF1aXJlbWVudCAoTWF5YmUgaXQgd2FzIGp1c3QgYSBjb3B5LXBhc3RlIGZyb20gc29tZSBw bGFjZXMpLgo+Cj4gSSBoYXZlIGFuIGlkZWEgdG8gZml4IHRoZSBpc3N1ZTogYWx3YXlzIGVuY29k aW5nIGluIGFsaWduZWQgcmVzb2x1dGlvbiwKPiB0aGVuIGZpeCB0aGUgY3JvcCBzZXR0aW5nIGJ5 IGFwcGx5IEJTRiAoZS5nLiwgaDI2NF9tZXRhZGF0YSkgb24gdGhlCj4gYml0c3RyZWFtLgo+Cj4g Pgo+ID4gRmluYWxseSwgYXZjdHgtPnNhbXBsZV9hc3BlY3RfcmF0aW8gc2hvdWxkIGJlIHByb3Bh Z2F0ZWQgaW50bwo+IGFzcGVjdC13aWR0aCBhbmQgYXNwZWN0LWhlaWdodC4gU29tZXRoaW5nIGxp a2UgdGhpczoKPiA+Cj4gPiAgICAgQVZSYXRpb25hbCBzYXIgPSBhdmN0eC0+c2FtcGxlX2FzcGVj dF9yYXRpbzsKPiA+ICAgICBpZiAoIXNhci5udW0gfHwgIXNhci5kZW4pCj4gPiAgICAgICAgIHNh ci5udW0gPSBzYXIuZGVuID0gMTsKPiA+ICAgICBhdl9yZWR1Y2UoJnNhci5udW0sICZzYXIuZGVu LCBzYXIubnVtLCBzYXIuZGVuLCA0MDk2KTsKPiA+ICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIo Zm9ybWF0LCAiYXNwZWN0LXdpZHRoIiwgc2FyLm51bSk7Cj4gPiAgICAgQU1lZGlhRm9ybWF0X3Nl dEludDMyKGZvcm1hdCwgImFzcGVjdC1oZWlnaHQiLCBzYXIuZGVuKTsKPiA+Cj4KPiBZb3UgbWVh biBzYXItd2lkdGgvc2FyLWhlaWdodD8KPgo+IEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JN QVRfS0VZX1NBUl9IRUlHSFQgPSAic2FyLWhlaWdodCI7Cj4gRVhQT1JUIGNvbnN0IGNoYXIqIEFN RURJQUZPUk1BVF9LRVlfU0FSX1dJRFRIID0gInNhci13aWR0aCI7Cj4KPiBUaGV5IGFyZSBhdmFp bGFibGUgaW4gTkRLIHNpbmNlIEFQSSBsZXZlbCAyOSAoQW5kcm9pZCAxMCkKPgo+IGV4dGVybiBj b25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1NBUl9IRUlHSFQgX19JTlRST0RVQ0VEX0lOKDI5 KTsKPiBleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9TQVJfV0lEVEggX19JTlRS T0RVQ0VEX0lOKDI5KTsKPgo+IEFuZCB0aGV5IHdlcmUgYWRkZWQgdG8gSmF2YSBNZWRpYUZvcm1h dCBzaW5jZSBBUEkgbGV2ZWwgMzAuCj4KPgo+IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29t L3JlZmVyZW5jZS9hbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0I0tFWV9QSVhFTF9BU1BFQ1RfUkFU SU9fV0lEVEgKPgo+IEl04oCZcyB1bmNvbW1vbiBmb3IgSmF2YSBBUEkgZ290IGEgZmVhdHVyZSBs YXRlIHRoYW4gTkRLLiBJIHdpbGwga2VlcAo+IGEgbm90ZSBhbmQgZG8gbW9yZSB0ZXN0IGJlZm9y ZSBzZXR0aW5nIHRoZW0uCj4KPiA+Cj4gPiArCj4gPiArICAgIGlmIChhdmN0eC0+cGl4X2ZtdCA9 PSBBVl9QSVhfRk1UX01FRElBQ09ERUMpIHsKPiA+ICsgICAgICAgIEFWTWVkaWFDb2RlY0NvbnRl eHQgKnVzZXJfY3R4ID0gYXZjdHgtPmh3YWNjZWxfY29udGV4dDsKPiA+ICsgICAgICAgIGlmIChh dmN0eC0+aHdfZGV2aWNlX2N0eCkgewo+ID4gKyAgICAgICAgICAgIEFWSFdEZXZpY2VDb250ZXh0 ICpkZXZpY2VfY3R4ID0KPiAoQVZIV0RldmljZUNvbnRleHQqKShhdmN0eC0+aHdfZGV2aWNlX2N0 eC0+ZGF0YSk7Cj4gPiArICAgICAgICAgICAgQVZNZWRpYUNvZGVjRGV2aWNlQ29udGV4dCAqZGV2 X2N0eDsKPiA+ICsKPiA+ICsgICAgICAgICAgICBpZiAoZGV2aWNlX2N0eC0+dHlwZSAhPSBBVl9I V0RFVklDRV9UWVBFX01FRElBQ09ERUMgfHwKPiAhZGV2aWNlX2N0eC0+aHdjdHgpIHsKPiA+ICsg ICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ID4gKyAgICAgICAgICAgICAg ICBnb3RvIGJhaWxvdXQ7Cj4gPiArICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgIGRldl9j dHggPSBkZXZpY2VfY3R4LT5od2N0eDsKPiA+ICsgICAgICAgICAgICBzLT53aW5kb3cgPSBmZl9t ZWRpYWNvZGVjX3N1cmZhY2VfcmVmKGRldl9jdHgtPnN1cmZhY2UsCj4gZGV2X2N0eC0+bmF0aXZl X3dpbmRvdywgYXZjdHgpOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgaWYgKCFz LT53aW5kb3cgJiYgdXNlcl9jdHggJiYgdXNlcl9jdHgtPnN1cmZhY2UpCj4gPiArICAgICAgICAg ICAgcy0+d2luZG93ID0gZmZfbWVkaWFjb2RlY19zdXJmYWNlX3JlZih1c2VyX2N0eC0+c3VyZmFj ZSwKPiBOVUxMLCBhdmN0eCk7Cj4gPiArCj4gPiArICAgICAgICBpZiAoIXMtPndpbmRvdykgewo+ ID4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+ICsgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1pc3NpbmcgaHdfZGV2aWNlX2N0eCBvcgo+IGh3 YWNjZWxfY29udGV4dCBmb3IgQVZfUElYX0ZNVF9NRURJQUNPREVDXG4iKTsKPiA+ICsgICAgICAg ICAgICBnb3RvIGJhaWxvdXQ7Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhjb2xvcl9mb3JtYXRzKTsgaSsr KSB7Cj4gPiArICAgICAgICBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gY29sb3JfZm9ybWF0c1tpXS5w aXhfZm10KSB7Cj4gPiArICAgICAgICAgICAgZmZfQU1lZGlhRm9ybWF0X3NldEludDMyKGZvcm1h dCwgImNvbG9yLWZvcm1hdCIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbG9yX2Zvcm1hdHNbaV0uY29sb3JfZm9ybWF0KTsKPiA+ICsgICAgICAgICAgICBicmVh azsKPiA+Cj4gPiBkbyB3ZSBuZWVkIGVycm9yL2ZhbGxiYWNrIGlmIG5vIG1hdGNoIGlzIGZvdW5k Pwo+Cj4gVGhlIHN1cHBvcnRlZCBwaXhfZm10cyBpcyBzcGVjaWZpZWQKPgo+ICAgICAucHJpdl9k YXRhX3NpemUgICA9IHNpemVvZihNZWRpYUNvZGVjRW5jQ29udGV4dCksICAgICAgICAgICAgICAg ICAgIFwKPiAgICAgLnAucGl4X2ZtdHMgICAgICAgPSBhdmNfcGl4X2ZtdHMsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4gICAgIC5pbml0ICAgICAgICAgICAgID0gbWVkaWFj b2RlY19pbml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+Cj4gSXQgaGFzIGJl ZW4gY2hlY2tlZCBpbiBlbmNvZGVyLmMgZW5jb2RlX3ByZWluaXRfdmlkZW8oKSwgc28gY2hlY2sg aXQgYWdhaW4KPiBpcwo+IG9wdGlvbmFsIGJ1dCBub3QgbmVjZXNzYXJ5IGluIG15IG9waW5pb24u Cj4KPiA+Cj4gPgo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChh dmN0eC0+Yml0X3JhdGUpCj4gPiArICAgICAgICBmZl9BTWVkaWFGb3JtYXRfc2V0SW50MzIoZm9y bWF0LCAiYml0cmF0ZSIsIGF2Y3R4LT5iaXRfcmF0ZSk7Cj4gPiArICAgIC8vIGZyYW1lLXJhdGUg YW5kIGktZnJhbWUtaW50ZXJ2YWwgYXJlIHJlcXVpcmVkIHRvIGNvbmZpZ3VyZSBjb2RlYwo+ID4g KyAgICBpZiAoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPj0gYXZjdHgtPmZyYW1lcmF0ZS5kZW4gJiYK PiBhdmN0eC0+ZnJhbWVyYXRlLmRlbiA+IDApCj4gPiArICAgICAgICBzLT5mcHMgPSBhdmN0eC0+ ZnJhbWVyYXRlLm51bSAvIGF2Y3R4LT5mcmFtZXJhdGUuZGVuOwo+ID4gKyAgICBlbHNlCj4gPiAr ICAgICAgICBzLT5mcHMgPSAzMDsKPiA+ICsgICAgZ29wID0gcm91bmQoYXZjdHgtPmdvcF9zaXpl IC8gcy0+ZnBzKTsKPiA+ICsgICAgaWYgKGdvcCA9PSAwKQo+ID4gKyAgICAgICAgZ29wID0gMjsK PiA+Cj4gPiBjYW4gd2UgcmVhZCBnb3AgZnJvbSBhdmN0eD8gaW4gb3RoZXIgaW1wbGVtZW50YXRp b25zIGkgaGF2ZSBzZWVuIGdvcAo+IGhhcmRjb2RlZCB0byAxCj4KPiBJIHRoaW5rIHdlIHNob3Vs ZCByZXNwZWN0IGdvcF9zaXplIHNldHRpbmcuCj4KPiBJIHdpbGwgYWRkIHNvbWUgbG9nIG1lc3Nh Z2UgYW5kIGNoYW5nZSBkZWZhdWx0IGdvcCB0byAxIGluIHBhdGNoIHYyLgo+Cj4gPgo+ID4gZm9y IGZwcyB2YWx1ZSwgY2FuIHdlIHVzZSBhdl9xMmQoYXZjdHgtPmZyYW1lcmF0ZSkKPgo+IHEyZCgp IGlzIGZvciBkb3VibGUsIGZwcyBpcyBpbnRlZ2VyIGhlcmUuCj4KPiA+Cj4gPgo+ID4gKyAgICBm Zl9BTWVkaWFGb3JtYXRfc2V0SW50MzIoZm9ybWF0LCAiZnJhbWUtcmF0ZSIsIHMtPmZwcyk7Cj4g PiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQzMihmb3JtYXQsICJpLWZyYW1lLWludGVydmFs IiwgZ29wKTsKPiA+ICsKPiA+Cj4gPiBmb3IgSDI2NCBlbmNvZGluZywgeW91IGNhbiBwYXNzICJw cm9maWxlIiBhbmQgImxldmVsIi4gZm9yIGV4YW1wbGUKPiBwcm9maWxlPTB4MDggZm9yIEhpZ2gg YW5kIGxldmVsPTB4NDAwMCBmb3IgNS4wCj4gPgo+ID4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNv bS9hLzM4OTk5NDEyLzMzMjc5OAo+Cj4gSeKAmW0gcGxhbm5pbmcgdG8gYWRkIHByb2ZpbGUvbGV2 ZWwgc3VwcG9ydCBhZnRlciB0aGUgYmFzaWMgcGF0Y2ggaXMgYXBwbGllZC4KPiBUaGVyZSBhcmUg c29tZSB1bnJlc29sdmVkIGlzc3VlIGhlcmU6Cj4KPiAxLiBJIGhhdmUgYSBkZXZpY2Ugd2hpY2gg ZmFpbGVkIGF0IGNvbmZpZ3VyZSgpIHdoZW4gcHJvZmlsZSBoYXMgYmVlbiBzZXQsCj4gZXZlbiBm b3IgYmFzZWxpbmUuCj4KClRoYW5rcyBmb3Igc2hhcmluZyB0aGlzLiBUb2RheSBJIGhhZCB0aGUg c2FtZSBleHBlcmllbmNlLAp3aXRoIE9NWC5yay52aWRlb19lbmNvZGVyLmF2YyB0cnlpbmcgdG8g cGFzcyBwcm9maWxlL2xldmVsLgoKSSBzZWUgdGhlIGZvbGxvd2luZyBtZXNzYWdlIGluIGxvZ2Nh dC4gRGlkIHlvdSBzZWUgdGhlIHNhbWUgYmVoYXZpb3I/CgoxMS0yMCAyMTo1NToxNi4xMzIgIDUw ODYgIDUwOTggVyBBQ29kZWMgIDogW09NWC5yay52aWRlb19lbmNvZGVyLmF2Y10Kc3RvcHBpbmcg Y2hlY2tpbmcgcHJvZmlsZXMgYWZ0ZXIgMzI6IDgvMQoxMS0yMCAyMTo1NToxNi4xMzIgIDUwODYg IDUwOTggRSBBQ29kZWMgIDogW09NWC5yay52aWRlb19lbmNvZGVyLmF2Y10KY29uZmlndXJlQ29k ZWMgcmV0dXJuaW5nIGVycm9yIC0xMDEwCgoKPgo+IDIuIERUUyBpcyBtaXNzaW5nIGluIE1lZGlh Q29kZWMgQVBJLiBGb3IgdGhlIGRlZmF1bHQgYmFzZWxpbmUgcHJvZmlsZSwKPiB0aGVyZQo+IGlz IG5vIHByb2JsZW0uIFRyb3VibGUgY29tZXMgd2hlbiB3ZSBzZXQgcHJvZmlsZSB0byBtYWlubGlu ZSBvciBoaWdoLiBJZgo+IFN1cmZhY2UvQU5hdGl2ZVdpbmRvdyBpcyB1c2VkLCBhbmQgdGhlIGZy YW1lcyBjb21lIGZyb20gb3VyIE1lZGlhQ29kZWMKPiBkZWNvZGVyCj4gd3JhcHBlciwgd2UgY2Fu IGNvbnRyb2wgaXTigJlzICdyZW5kZXInIChzZW5kIHRvIGVuY29kZXIncyBzdXJmYWNlKSB2aWEK PiBhdl9tZWRpYWNvZGVjX3JlbGVhc2VfYnVmZmVyKCkuIEEgRFRTIGdlbmVyYXRpb24gc3RyYXRl Z3kgd29ya3MgaW4gdGhpcwo+IGNhc2UuCj4gSG93ZXZlciwgaWYgZnJhbWVzIGNvbWVzIGZyb20g b3RoZXIgc291cmNlcywgbGlrZSBhIGNhbWVyYSwgdGhlcmUgaXMgbm8gd2F5Cj4gdG8gY29udHJv bCB0aGUgJ3JlbmRlcicgeWV0LCBzbyBEVFMgaXMgbWlzc2luZyBpbiB0aGlzIGNhc2UuCj4KPiBD b25maWd1cmUgcHJvZmlsZS9sZXZlbCBhbmQgQiBmcmFtZXMgc2hvdWxkIGNvbWUgdG9nZXRoZXIu Cj4KPiA+Cj4gPgo+ID4gKwo+ID4gKyAgICByZXQgPSBmZl9BTWVkaWFDb2RlY19nZXRDb25maWd1 cmVGbGFnRW5jb2RlKHMtPmNvZGVjKTsKPiA+ICsgICAgcmV0ID0gZmZfQU1lZGlhQ29kZWNfY29u ZmlndXJlKHMtPmNvZGVjLCBmb3JtYXQsIHMtPndpbmRvdywgTlVMTCwKPiByZXQpOwo+ID4gKyAg ICBpZiAocmV0KSB7Cj4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1l ZGlhQ29kZWMgY29uZmlndXJlIGZhaWxlZCwKPiAlc1xuIiwgYXZfZXJyMnN0cihyZXQpKTsKPiA+ ICsgICAgICAgIGdvdG8gYmFpbG91dDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXQgPSBm Zl9BTWVkaWFDb2RlY19zdGFydChzLT5jb2RlYyk7Cj4gPiArICAgIGlmIChyZXQpIHsKPiA+ICsg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWVkaWFDb2RlYyBmYWlsZWQgdG8g c3RhcnQsICVzXG4iLAo+IGF2X2VycjJzdHIocmV0KSk7Cj4gPiArICAgICAgICBnb3RvIGJhaWxv dXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgbWVkaWFjb2RlY19vdXRwdXRfZm9ybWF0KGF2 Y3R4KTsKPiA+ICsKPiA+ICsgICAgcy0+ZnJhbWUgPSBhdl9mcmFtZV9hbGxvYygpOwo+ID4gKyAg ICBpZiAoIXMtPmZyYW1lKQo+ID4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ID4g Kwo+ID4gK2JhaWxvdXQ6Cj4gPiArICAgIGlmIChmb3JtYXQpCj4gPiArICAgICAgICBmZl9BTWVk aWFGb3JtYXRfZGVsZXRlKGZvcm1hdCk7Cj4gPiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgbWVkaWFjb2RlY19yZWNlaXZlKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZQYWNrZXQgKnBrdCwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpnb3RfcGFja2V0KQo+ID4gK3sK PiA+ICsgICAgTWVkaWFDb2RlY0VuY0NvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4g KyAgICBGRkFNZWRpYUNvZGVjICpjb2RlYyA9IHMtPmNvZGVjOwo+ID4gKyAgICBGRkFNZWRpYUNv ZGVjQnVmZmVySW5mbyBvdXRfaW5mbyA9IHswfTsKPiA+ICsgICAgdWludDhfdCAqb3V0X2J1ZjsK PiA+ICsgICAgc2l6ZV90IG91dF9zaXplID0gMDsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsgICAg aW50IGV4dHJhZGF0YV9zaXplID0gMDsKPiA+ICsgICAgaW50NjRfdCB0aW1lb3V0X3VzID0gcy0+ ZW9mX3NlbnQgPyBPVVRQVVRfREVRVUVVRV9USU1FT1VUX1VTIDogMDsKPiA+ICsgICAgc3NpemVf dCBpbmRleCA9IGZmX0FNZWRpYUNvZGVjX2RlcXVldWVPdXRwdXRCdWZmZXIoY29kZWMsCj4gJm91 dF9pbmZvLCB0aW1lb3V0X3VzKTsKPiA+ICsKPiA+ICsgICAgaWYgKGZmX0FNZWRpYUNvZGVjX2lu Zm9UcnlBZ2FpbkxhdGVyKGNvZGVjLCBpbmRleCkpCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJP UihFQUdBSU4pOwo+ID4gKwo+ID4gKyAgICBpZiAoZmZfQU1lZGlhQ29kZWNfaW5mb091dHB1dEZv cm1hdENoYW5nZWQoY29kZWMsIGluZGV4KSkgewo+ID4gKyAgICAgICAgbWVkaWFjb2RlY19vdXRw dXRfZm9ybWF0KGF2Y3R4KTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVBR0FJTik7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGZmX0FNZWRpYUNvZGVjX2luZm9PdXRwdXRCdWZm ZXJzQ2hhbmdlZChjb2RlYywgaW5kZXgpKSB7Cj4gPiArICAgICAgICBmZl9BTWVkaWFDb2RlY19j bGVhbk91dHB1dEJ1ZmZlcnMoY29kZWMpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFH QUlOKTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoaW5kZXggPCAwKQo+ID4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gPiArCj4gPiArICAgIGlmIChvdXRfaW5mby5m bGFncyAmIGZmX0FNZWRpYUNvZGVjX2dldEJ1ZmZlckZsYWdFbmRPZlN0cmVhbShjb2RlYykpCj4g PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gPiArCj4gPiArICAgIG91dF9idWYgPSBm Zl9BTWVkaWFDb2RlY19nZXRPdXRwdXRCdWZmZXIoY29kZWMsIGluZGV4LCAmb3V0X3NpemUpOwo+ ID4gKyAgICBpZiAoIW91dF9idWYpIHsKPiA+ICsgICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJO QUw7Cj4gPiArICAgICAgICBnb3RvIGJhaWxvdXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAg aWYgKG91dF9pbmZvLmZsYWdzICYKPiBmZl9BTWVkaWFDb2RlY19nZXRCdWZmZXJGbGFnQ29kZWND b25maWcoY29kZWMpKSB7Cj4gPiArICAgICAgICByZXQgPSBhdl9yZWFsbG9jcCgmcy0+ZXh0cmFk YXRhLCBvdXRfaW5mby5zaXplKTsKPiA+ICsgICAgICAgIGlmIChyZXQpCj4gPiArICAgICAgICAg ICAgZ290byBiYWlsb3V0Owo+ID4gKwo+ID4gKyAgICAgICAgcy0+ZXh0cmFkYXRhX3NpemUgPSBv dXRfaW5mby5zaXplOwo+ID4gKyAgICAgICAgbWVtY3B5KHMtPmV4dHJhZGF0YSwgb3V0X2J1ZiAr IG91dF9pbmZvLm9mZnNldCwgb3V0X2luZm8uc2l6ZSk7Cj4gPiArICAgICAgICBmZl9BTWVkaWFD b2RlY19yZWxlYXNlT3V0cHV0QnVmZmVyKGNvZGVjLCBpbmRleCwgZmFsc2UpOwo+ID4gKyAgICAg ICAgLy8gdHJ5IGltbWVkaWF0ZWx5Cj4gPiArICAgICAgICByZXR1cm4gbWVkaWFjb2RlY19yZWNl aXZlKGF2Y3R4LCBwa3QsIGdvdF9wYWNrZXQpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJl dCA9IGZmX2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4LCBwa3QsIG91dF9pbmZvLnNpemUgKwo+IHMt PmV4dHJhZGF0YV9zaXplLCAwKTsKPiA+ICsgICAgaWYgKHJldCA8IDApCj4gPiArICAgICAgZ290 byBiYWlsb3V0Owo+ID4gKwo+ID4gKyAgICBpZiAocy0+ZXh0cmFkYXRhX3NpemUpIHsKPiA+ICsg ICAgICAgIGV4dHJhZGF0YV9zaXplID0gcy0+ZXh0cmFkYXRhX3NpemU7Cj4gPiArICAgICAgICBz LT5leHRyYWRhdGFfc2l6ZSA9IDA7Cj4gPiArICAgICAgICBtZW1jcHkocGt0LT5kYXRhLCBzLT5l eHRyYWRhdGEsIGV4dHJhZGF0YV9zaXplKTsKPiA+ICsgICAgfQo+ID4gKyAgICBtZW1jcHkocGt0 LT5kYXRhICsgZXh0cmFkYXRhX3NpemUsIG91dF9idWYgKyBvdXRfaW5mby5vZmZzZXQsCj4gb3V0 X2luZm8uc2l6ZSk7Cj4gPiArICAgIHBrdC0+cHRzID0gYXZfcmVzY2FsZV9xKG91dF9pbmZvLnBy ZXNlbnRhdGlvblRpbWVVcywKPiBBVl9USU1FX0JBU0VfUSwgYXZjdHgtPnRpbWVfYmFzZSk7Cj4g PiArICAgIGlmIChzLT50c190YWlsICE9IHMtPnRzX2hlYWQpIHsKPiA+ICsgICAgICAgIHBrdC0+ ZHRzID0gcy0+dGltZXN0YW1wc1tzLT50c190YWlsXTsKPiA+ICsgICAgICAgIHMtPnRzX3RhaWwg PSAocy0+dHNfdGFpbCArIDEpICUgRkZfQVJSQVlfRUxFTVMocy0+dGltZXN0YW1wcyk7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKG91dF9pbmZvLmZsYWdzICYgZmZfQU1lZGlhQ29kZWNf Z2V0QnVmZmVyRmxhZ0tleUZyYW1lKGNvZGVjKSkKPiA+ICsgICAgICAgIHBrdC0+ZmxhZ3MgfD0g QVZfUEtUX0ZMQUdfS0VZOwo+ID4gKyAgICByZXQgPSAwOwo+ID4gKyAgICAqZ290X3BhY2tldCA9 IDE7Cj4gPiArCj4gPiArICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1RSQUNFLCAicmVjZWl2ZSBw YWNrZXQgcHRzICUiIFBSSWQ2NCAiIGR0cyAlIgo+IFBSSWQ2NAo+ID4gKyAgICAgICAgICAgIiBm bGFncyAlZCBleHRyYWRhdGEgJWRcbiIsCj4gPiArICAgICAgICAgICBwa3QtPnB0cywgcGt0LT5k dHMsIHBrdC0+ZmxhZ3MsIGV4dHJhZGF0YV9zaXplKTsKPiA+ICsKPiA+ICtiYWlsb3V0Ogo+ID4g KyAgICBmZl9BTWVkaWFDb2RlY19yZWxlYXNlT3V0cHV0QnVmZmVyKGNvZGVjLCBpbmRleCwgZmFs c2UpOwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBj b3B5X2ZyYW1lX3RvX2J1ZmZlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0IEFWRnJhbWUK PiAqZnJhbWUsIHVpbnQ4X3QgKmRzdCwgc2l6ZV90IHNpemUpCj4gPiArewo+ID4gKyAgICBNZWRp YUNvZGVjRW5jQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiArICAgIHVpbnQ4X3Qg KmRzdF9kYXRhWzRdID0ge307Cj4gPiArICAgIGludCBkc3RfbGluZXNpemVbNF0gPSB7fTsKPiA+ ICsgICAgY29uc3QgdWludDhfdCAqc3JjX2RhdGFbNF0gPSB7Cj4gPiArICAgICAgICAgICAgZnJh bWUtPmRhdGFbMF0sIGZyYW1lLT5kYXRhWzFdLCBmcmFtZS0+ZGF0YVsyXSwKPiBmcmFtZS0+ZGF0 YVszXQo+ID4gKyAgICB9Owo+ID4gKwo+ID4gKyAgICBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZf UElYX0ZNVF9ZVVY0MjBQKSB7Cj4gPiArICAgICAgICBkc3RfZGF0YVswXSA9IGRzdDsKPiA+ICsg ICAgICAgIGRzdF9kYXRhWzFdID0gZHN0ICsgcy0+d2lkdGggKiBzLT5oZWlnaHQ7Cj4gPiArICAg ICAgICBkc3RfZGF0YVsyXSA9IGRzdF9kYXRhWzFdICsgcy0+d2lkdGggKiBzLT5oZWlnaHQgLyA0 Owo+ID4gKwo+ID4gKyAgICAgICAgZHN0X2xpbmVzaXplWzBdID0gcy0+d2lkdGg7Cj4gPiArICAg ICAgICBkc3RfbGluZXNpemVbMV0gPSBkc3RfbGluZXNpemVbMl0gPSBzLT53aWR0aCAvIDI7Cj4g PiArICAgIH0gZWxzZSBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9OVjEyKSB7Cj4g PiArICAgICAgICBkc3RfZGF0YVswXSA9IGRzdDsKPiA+ICsgICAgICAgIGRzdF9kYXRhWzFdID0g ZHN0ICsgcy0+d2lkdGggKiBzLT5oZWlnaHQ7Cj4gPiArCj4gPiArICAgICAgICBkc3RfbGluZXNp emVbMF0gPSBzLT53aWR0aDsKPiA+ICsgICAgICAgIGRzdF9saW5lc2l6ZVsxXSA9IHMtPndpZHRo Owo+ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgYXZfYXNzZXJ0MCgwKTsKPiA+ICsgICAg fQo+ID4gKwo+ID4gKyAgICBhdl9pbWFnZV9jb3B5KGRzdF9kYXRhLCBkc3RfbGluZXNpemUsIHNy Y19kYXRhLCBmcmFtZS0+bGluZXNpemUsCj4gPiArICAgICAgICAgICAgICAgICAgYXZjdHgtPnBp eF9mbXQsIGF2Y3R4LT53aWR0aCwgYXZjdHgtPmhlaWdodCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgbWVkaWFjb2RlY19zZW5kKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpmcmFtZSkgewo+ID4gKyAgICBN ZWRpYUNvZGVjRW5jQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiArICAgIEZGQU1l ZGlhQ29kZWMgKmNvZGVjID0gcy0+Y29kZWM7Cj4gPiArICAgIHNzaXplX3QgaW5kZXg7Cj4gPiAr ICAgIHVpbnQ4X3QgKmlucHV0X2J1ZiA9IE5VTEw7Cj4gPiArICAgIHNpemVfdCBpbnB1dF9zaXpl ID0gMDsKPiA+ICsgICAgaW50NjRfdCBwdHMgPSAwOwo+ID4gKyAgICB1aW50MzJfdCBmbGFncyA9 IDA7Cj4gPiArICAgIGludDY0X3QgdGltZW91dF91czsKPiA+ICsKPiA+ICsgICAgaWYgKHMtPmVv Zl9zZW50KQo+ID4gKyAgICAgICAgcmV0dXJuIDA7Cj4gPiArCj4gPiArICAgIGlmIChzLT53aW5k b3cpIHsKPiA+ICsgICAgICAgIGlmICghZnJhbWUpIHsKPiA+ICsgICAgICAgICAgICBzLT5lb2Zf c2VudCA9IDE7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIGZmX0FNZWRpYUNvZGVjX3NpZ25hbEVu ZE9mSW5wdXRTdHJlYW0oY29kZWMpOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKwo+ID4gKyAg ICAgICAgaWYgKGZyYW1lLT5kYXRhWzNdKSB7Cj4gPiArICAgICAgICAgICAgcHRzID0gYXZfcmVz Y2FsZV9xKGZyYW1lLT5wdHMsIGF2Y3R4LT50aW1lX2Jhc2UsCj4gQVZfVElNRV9CQVNFX1EpOwo+ ID4gKyAgICAgICAgICAgIHMtPnRpbWVzdGFtcHNbcy0+dHNfaGVhZF0gPSBmcmFtZS0+cHRzOwo+ ID4gKyAgICAgICAgICAgIHMtPnRzX2hlYWQgPSAocy0+dHNfaGVhZCArIDEpICUKPiBGRl9BUlJB WV9FTEVNUyhzLT50aW1lc3RhbXBzKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICBhdl9tZWRpYWNv ZGVjX3JlbGVhc2VfYnVmZmVyKChBVk1lZGlhQ29kZWNCdWZmZXIKPiAqKWZyYW1lLT5kYXRhWzNd LCAxKTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIHRpbWVvdXRfdXMgPSBJTlBVVF9ERVFVRVVFX1RJTUVPVVRfVVM7Cj4gPiAr ICAgIGluZGV4ID0gZmZfQU1lZGlhQ29kZWNfZGVxdWV1ZUlucHV0QnVmZmVyKGNvZGVjLCB0aW1l b3V0X3VzKTsKPiA+ICsgICAgaWYgKGZmX0FNZWRpYUNvZGVjX2luZm9UcnlBZ2FpbkxhdGVyKGNv ZGVjLCBpbmRleCkpCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFQUdBSU4pOwo+ID4gKwo+ ID4gKyAgICBpZiAoaW5kZXggPCAwKSB7Cj4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgImRlcXVldWUgaW5wdXQgYnVmZmVyIGZhaWxlZCwgJXpkIiwKPiBpbmRleCk7Cj4g PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICBpZiAoZnJhbWUpIHsKPiA+ICsgICAgICAgIGlucHV0X2J1ZiA9IGZmX0FNZWRpYUNvZGVj X2dldElucHV0QnVmZmVyKGNvZGVjLCBpbmRleCwKPiAmaW5wdXRfc2l6ZSk7Cj4gPiArICAgICAg ICBjb3B5X2ZyYW1lX3RvX2J1ZmZlcihhdmN0eCwgZnJhbWUsIGlucHV0X2J1ZiwgaW5wdXRfc2l6 ZSk7Cj4gPiArCj4gPiArICAgICAgICBwdHMgPSBhdl9yZXNjYWxlX3EoZnJhbWUtPnB0cywgYXZj dHgtPnRpbWVfYmFzZSwKPiBBVl9USU1FX0JBU0VfUSk7Cj4gPiArCj4gPiArICAgICAgICBzLT50 aW1lc3RhbXBzW3MtPnRzX2hlYWRdID0gZnJhbWUtPnB0czsKPiA+ICsgICAgICAgIHMtPnRzX2hl YWQgPSAocy0+dHNfaGVhZCArIDEpICUgRkZfQVJSQVlfRUxFTVMocy0+dGltZXN0YW1wcyk7Cj4g PiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICBmbGFncyB8PSBmZl9BTWVkaWFDb2RlY19nZXRC dWZmZXJGbGFnRW5kT2ZTdHJlYW0oY29kZWMpOwo+ID4gKyAgICAgICAgcy0+ZW9mX3NlbnQgPSAx Owo+ID4gKyAgICB9Cj4gPiArCj4gPgo+ID4gaXQgd291bGQgYmUgbmljZSB0byBwcm9wYWdhdGUg a2V5ZnJhbWVzIGhlcmUgKGZyYW1lLT5waWN0X3R5cGUgPT0KPiBBVl9QSUNUVVJFX1RZUEVfSSku IGl0IGlzIG9ubHkgcG9zc2libGUgb24gQVBJMjYgd2l0aAo+IEFNZWRpYUNvZGVjX3NldFBhcmFt ZXRlcnMgYW5kIFBBUkFNRVRFUl9LRVlfUkVRVUVTVF9TWU5DX0ZSQU1FCj4KPiBJdOKAmXMgYSBu aWNlIGZlYXR1cmUuIEnigJltIHBsYW5uaW5nIHRvIGFkZCBzdXBwb3J0IGFmdGVyIHRoZSBiYXNp YyBmdW5jdGlvbgo+IGlzIHdvcmtpbmcuCj4KPiA+Cj4gPgo+ID4gKyAgICBmZl9BTWVkaWFDb2Rl Y19xdWV1ZUlucHV0QnVmZmVyKGNvZGVjLCBpbmRleCwgMCwgaW5wdXRfc2l6ZSwgcHRzLAo+IGZs YWdzKTsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWVk aWFjb2RlY19lbmNvZGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVlBhY2tldCAqcGt0KQo+ID4g K3sKPiA+ICsgICAgTWVkaWFDb2RlY0VuY0NvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ ID4gKyAgICBpbnQgcmV0Owo+ID4gKyAgICBpbnQgZ290X3BhY2tldCA9IDA7Cj4gPiArCj4gPiAr ICAgIC8vIFJldHVybiBvbiB0aHJlZSBjYXNlOgo+ID4gKyAgICAvLyAxLiBTZXJpb3VzIGVycm9y Cj4gPiArICAgIC8vIDIuIEdvdCBhIHBhY2tldCBzdWNjZXNzCj4gPiArICAgIC8vIDMuIE5vIEFW RnJhbWUgaXMgYXZhaWxhYmxlIHlldCAoZG9uJ3QgcmV0dXJuIGlmIGdldF9mcmFtZSByZXR1cm4K PiBFT0YpCj4gPiArICAgIHdoaWxlICgxKSB7Cj4gPiArICAgICAgICByZXQgPSBtZWRpYWNvZGVj X3JlY2VpdmUoYXZjdHgsIHBrdCwgJmdvdF9wYWNrZXQpOwo+ID4gKyAgICAgICAgaWYgKCFyZXQp Cj4gPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICAgICBlbHNlIGlmIChyZXQgIT0g QVZFUlJPUihFQUdBSU4pKQo+ID4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiAr ICAgICAgICBpZiAoIXMtPmZyYW1lLT5idWZbMF0pIHsKPiA+ICsgICAgICAgICAgICByZXQgPSBm Zl9lbmNvZGVfZ2V0X2ZyYW1lKGF2Y3R4LCBzLT5mcmFtZSk7Cj4gPiArICAgICAgICAgICAgaWYg KHJldCAmJiByZXQgIT0gQVZFUlJPUl9FT0YpCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICByZXQgPSBtZWRpYWNvZGVjX3Nl bmQoYXZjdHgsIHMtPmZyYW1lLT5idWZbMF0gPyBzLT5mcmFtZSA6Cj4gTlVMTCk7Cj4gPiArICAg ICAgICBpZiAoIXJldCkKPiA+ICsgICAgICAgICAgICBhdl9mcmFtZV91bnJlZihzLT5mcmFtZSk7 Cj4gPiArICAgICAgICBlbHNlIGlmIChyZXQgIT0gQVZFUlJPUihFQUdBSU4pKQo+ID4gKyAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBhdl9jb2xkIGludCBtZWRpYWNvZGVjX2Nsb3NlKEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKPiA+ICt7Cj4gPiArICAgIE1lZGlhQ29kZWNFbmNDb250ZXh0ICpz ID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ICsgICAgaWYgKHMtPmNvZGVjKSB7Cj4gPiArICAgICAg ICBmZl9BTWVkaWFDb2RlY19zdG9wKHMtPmNvZGVjKTsKPiA+ICsgICAgICAgIGZmX0FNZWRpYUNv ZGVjX2RlbGV0ZShzLT5jb2RlYyk7Cj4gPiArICAgICAgICBzLT5jb2RlYyA9IE5VTEw7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKHMtPndpbmRvdykgewo+ID4gKyAgICAgICAgZmZfbWVk aWFjb2RlY19zdXJmYWNlX3VucmVmKHMtPndpbmRvdywgYXZjdHgpOwo+ID4gKyAgICAgICAgcy0+ d2luZG93ID0gTlVMTDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBhdl9mcmFtZV9mcmVlKCZz LT5mcmFtZSk7Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgY29uc3QgQVZDb2RlY0hXQ29uZmlnSW50ZXJuYWwgKmNvbnN0IG1lZGlhY29kZWNfaHdfY29u Zmlnc1tdID0gewo+ID4gKyAgICAmKGNvbnN0IEFWQ29kZWNIV0NvbmZpZ0ludGVybmFsKSB7Cj4g PiArICAgICAgICAucHVibGljICAgICAgICAgID0gewo+ID4gKyAgICAgICAgICAgIC5waXhfZm10 ICAgICA9IEFWX1BJWF9GTVRfTUVESUFDT0RFQywKPiA+ICsgICAgICAgICAgICAubWV0aG9kcyAg ICAgPSBBVl9DT0RFQ19IV19DT05GSUdfTUVUSE9EX0FEX0hPQyB8Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZfQ09ERUNfSFdfQ09ORklHX01FVEhPRF9IV19ERVZJQ0VfQ1RYLAo+ ID4gKyAgICAgICAgICAgIC5kZXZpY2VfdHlwZSA9IEFWX0hXREVWSUNFX1RZUEVfTUVESUFDT0RF QywKPiA+ICsgICAgICAgIH0sCj4gPiArICAgICAgICAuaHdhY2NlbCAgICAgICAgID0gTlVMTCwK PiA+ICsgICAgfSwKPiA+ICsgICAgTlVMTAo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSBPRkZT RVQoeCkgb2Zmc2V0b2YoTWVkaWFDb2RlY0VuY0NvbnRleHQsIHgpCj4gPiArI2RlZmluZSBWRSBB Vl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNCj4gPiAr c3RhdGljIGNvbnN0IEFWT3B0aW9uIGNvbW1vbl9vcHRpb25zW10gPSB7Cj4gPiArICAgIHsgIm5k a19jb2RlYyIsICJVc2UgTWVkaWFDb2RlYyBmcm9tIE5ESyIsCj4gPiArICAgICAgICAgICAgICAg ICAgICBPRkZTRVQodXNlX25ka19jb2RlYyksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0ID0KPiAt MX0sIC0xLCAxLCBWRSB9LAo+ID4gKyAgICB7IE5VTEwgfSwKPiA+ICt9Owo+ID4gKwo+ID4gKyNk ZWZpbmUgTUVESUFDT0RFQ19FTkNPREVSX0NMQVNTKG5hbWUpICAgICAgICAgICAgICBcCj4gPiAr c3RhdGljIGNvbnN0IEFWQ2xhc3MgbmFtZSAjIyBfbWVkaWFjb2RlY19jbGFzcyA9IHsgIFwKPiA+ ICsgICAgLmNsYXNzX25hbWUgPSAjbmFtZSAiX21lZGlhY29kZWMiLCAgICAgICAgICAgICAgXAo+ ID4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLCAgICAgICAgICAgICBc Cj4gPiArICAgIC5vcHRpb24gICAgID0gY29tbW9uX29wdGlvbnMsICAgICAgICAgICAgICAgICAg IFwKPiA+ICsgICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsICAgICAgICAg ICAgXAo+ID4gK307ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCj4gPiArCj4gPiArI2RlZmluZSBERUNMQVJFX01FRElBQ09ERUNfRU5DT0RFUihzaG9y dF9uYW1lLCBsb25nX25hbWUsIGNvZGVjX2lkKQo+ICBcCj4gPiArTUVESUFDT0RFQ19FTkNPREVS X0NMQVNTKHNob3J0X25hbWUpCj4gXAo+ID4gK2NvbnN0IEZGQ29kZWMgZmZfICMjIHNob3J0X25h bWUgIyMgX21lZGlhY29kZWNfZW5jb2RlciA9IHsKPiBcCj4gPiArICAgIC5wLm5hbWUgICAgICAg ICAgID0gI3Nob3J0X25hbWUgIl9tZWRpYWNvZGVjIiwKPiAgIFwKPiA+ICsgICAgQ09ERUNfTE9O R19OQU1FKGxvbmdfbmFtZSAiIEFuZHJvaWQgTWVkaWFDb2RlYyBlbmNvZGVyIiksCj4gIFwKPiA+ ICsgICAgLnAudHlwZSAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4gIFwKPiA+ICsg ICAgLnAuaWQgICAgICAgICAgICAgPSBjb2RlY19pZCwKPiAgXAo+ID4gKyAgICAucC5jYXBhYmls aXRpZXMgICA9IEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBfREVMQVkKPiAgXAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgIHwgQVZfQ09ERUNfQ0FQX0hBUkRXQVJFLAo+IFwKPiA+ ICsgICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoTWVkaWFDb2RlY0VuY0NvbnRleHQpLAo+ ICBcCj4gPiArICAgIC5wLnBpeF9mbXRzICAgICAgID0gYXZjX3BpeF9mbXRzLAo+ICBcCj4gPiAr ICAgIC5pbml0ICAgICAgICAgICAgID0gbWVkaWFjb2RlY19pbml0LAo+IFwKPiA+ICsgICAgRkZf Q09ERUNfUkVDRUlWRV9QQUNLRVRfQ0IobWVkaWFjb2RlY19lbmNvZGUpLAo+IFwKPiA+ICsgICAg LmNsb3NlICAgICAgICAgICAgPSBtZWRpYWNvZGVjX2Nsb3NlLAo+ICBcCj4gPiArICAgIC5wLnBy aXZfY2xhc3MgICAgID0gJnNob3J0X25hbWUgIyMgX21lZGlhY29kZWNfY2xhc3MsCj4gIFwKPiA+ ICsgICAgLmNhcHNfaW50ZXJuYWwgICAgPSBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQLAo+IFwK PiA+ICsgICAgLnAud3JhcHBlcl9uYW1lID0gIm1lZGlhY29kZWMiLAo+ICBcCj4gPiArICAgIC5o d19jb25maWdzICAgICA9IG1lZGlhY29kZWNfaHdfY29uZmlncywKPiBcCj4gPiArfTsKPiBcCj4g PiArCj4gPiArI2lmIENPTkZJR19IMjY0X01FRElBQ09ERUNfRU5DT0RFUgo+ID4gK0RFQ0xBUkVf TUVESUFDT0RFQ19FTkNPREVSKGgyNjQsICJILjI2NCIsIEFWX0NPREVDX0lEX0gyNjQpCj4gPiAr I2VuZGlmCj4gPiArCj4gPiArI2lmIENPTkZJR19IRVZDX01FRElBQ09ERUNfRU5DT0RFUgo+ID4g K0RFQ0xBUkVfTUVESUFDT0RFQ19FTkNPREVSKGhldmMsICJILjI2NSIsIEFWX0NPREVDX0lEX0hF VkMpCj4gPiArI2VuZGlmCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92ZXJzaW9uLmggYi9s aWJhdmNvZGVjL3ZlcnNpb24uaAo+ID4gaW5kZXggNDNkMGQ5YTlmYy4uODZhYzBmMzg3MSAxMDA2 NDQKPiA+IC0tLSBhL2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4gPiArKysgYi9saWJhdmNvZGVjL3Zl cnNpb24uaAo+ID4gQEAgLTI5LDggKzI5LDggQEAKPiA+Cj4gPiAgI2luY2x1ZGUgInZlcnNpb25f bWFqb3IuaCIKPiA+Cj4gPiAtI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlOT1IgIDUxCj4g PiAtI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlDUk8gMTAxCj4gPiArI2RlZmluZSBMSUJB VkNPREVDX1ZFUlNJT05fTUlOT1IgIDUyCj4gPiArI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05f TUlDUk8gMTAwCj4gPgo+ID4gICNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVAo+IEFWX1ZF UlNJT05fSU5UKExJQkFWQ09ERUNfVkVSU0lPTl9NQUpPUiwgXAo+ID4KPiAgTElCQVZDT0RFQ19W RVJTSU9OX01JTk9SLCBcCj4gPiAtLQo+ID4gMi4yNS4xCj4gPgo+Cj4KX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlz dApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0 aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBl bWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJz Y3JpYmUiLgo=