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 BFB8144D6A for ; Mon, 21 Nov 2022 04:40:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F1BB768BCF0; Mon, 21 Nov 2022 06:40:39 +0200 (EET) Received: from out162-62-57-49.mail.qq.com (out162-62-57-49.mail.qq.com [162.62.57.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A44BB68B554 for ; Mon, 21 Nov 2022 06:40:32 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1669005629; bh=x2Vh+9DkzFwCTugFC5etq/vbphAF8CpKUz9WpoyqTzY=; h=From:Subject:Date:References:To:In-Reply-To; b=A7vMmxjoxH8n+DWeZ4TopB+oIQxthvXqHd+aEbmJDUjQjhSs3gwvlBiEduTFqvdjM Z1choVV1tCUlZJczVEhSy3v8+BOdZFVaAYDHsZ8Snt8wMkpcIS5Wqp8EX0C0aMyOM/ IGL8tJ+jNX1pdHO+Jto4aWIr0FcugXAPcANynQvw= Received: from smtpclient.apple ([119.147.10.193]) by newxmesmtplogicsvrszc2-1.qq.com (NewEsmtp) with SMTP id A1C1FEAD; Mon, 21 Nov 2022 12:40:28 +0800 X-QQ-mid: xmsmtpt1669005628tb36k89pq Message-ID: X-QQ-XMAILINFO: Mee1Vp/QiDAWtKw4hAhghKY17Kv3+FCZmPHCYzeVltKnfBI2RgF69q+ItNuC0R ezqhnzDemrLLaVL/uuB7thIBbCJcj/JhGpdyYPz9GdwsY1sK8ozGKpDPrwUdsNsimwk3fEFvANhM GfOqx3o3eg7yUVx+I6Qu9Ov18/F3dwkDGfbQWy87ygy3e3jiDVKYus6BeOVPzKN+wWcYwrKp/FOV Me4ixfJ/jZE2MF5ujkZm+/tRyBvdvyAlbaf5MxnkY7OWvqQMuzim1ssrqtmWUO+Lj3s1rMMPS+0z 3I5V5SbwnEuADqS4a+QEVo2dOCULCpbQcebVtUh6gpcxqSelojWe1AXFnaIvc7PY+kiuHlNKnARS G5i06Wyu5AEQF5euYM0B5BG5IsY+MRZhuoJnQ4PF871bhzYfzKGWuqsVABoc3QFqi53Z/GAIu1jc NHv03xPBx1B9T4CygES7naQBb9F21DjiJdVvQz8bB5Y4MANRlMdc0ww4vtHUHjm5QSS0ZZ8oE2L8 aFhIrp7KS1fNnh+PeNLHc/G7VPhCXgRltfOxRuSzGUJfB3izSDur+r+iRdtmsWPk+OKaJkpfjVJd ZHZ9ojmE85bFQQT8+IsollkHuDUpX3vOno0Ydi4c1UsMRfrmHH6UK/CQgFI6PL011Hf69Xk83YoJ ribh8VPubav1E5hWiMNqmjtQU7th0JHohyBjGceZi8ISGhNcup5DeiF4ykEr0FbGlcF8NTGwPEKc rs5LT0/8fxBweqh0puuaowBdXq1L1bADXbZyQjkP6g6G6LrPuaf89cCmuhFRxfIoUmeVM+2D+D7+ pPaxUefoDRNolyWZG2kwZZJArtbynFGYiWamJWDb6OhQdHXyPDSFCI/JhGHRgg/o1h5uqSkLKe6h CPXyN4MJAa6SqtKhIf0UWKMYatAOijKZ4dCCmlPlPdre850mZfCXOtiG71Zlk9uzWbhwsOIzqAcO U5dJGAtYCHSRZeywY4dgL3xW7QGrL+xPFFLp8wnd+JKsvVVV0W2068IgdEj7bOigBDgb3S1mE= From: =?utf-8?B?InpoaWxpemhhbyjotbXlv5fnq4spIg==?= Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\)) Date: Mon, 21 Nov 2022 12:40:28 +0800 References: <20221024031658.1026118-1-quinkblack@foxmail.com> To: FFmpeg development discussions and patches In-Reply-To: X-OQ-MSGID: <9B8B38DC-5B48-4F3F-8450-8DD71B73266E@foxmail.com> X-Mailer: Apple Mail (2.3696.120.41.1.1) 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 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: Cgo+IE9uIE5vdiAyMSwgMjAyMiwgYXQgMDc6NDQsIEFtYW4gS2FybWFuaSA8ZmZtcGVnQHRtbTEu bmV0PiB3cm90ZToKPiAKPiBPbiBTYXQsIE5vdiAxOSwgMjAyMiBhdCA5OjEzIEFNICJ6aGlsaXpo YW8o6LW15b+X56uLKSIgPHF1aW5rYmxhY2tAZm94bWFpbC5jb20+Cj4gd3JvdGU6Cj4gCj4+IAo+ PiAKPj4+IE9uIE5vdiAxOSwgMjAyMiwgYXQgMTc6MTUsIEFtYW4gS2FybWFuaSA8YW1hbkB0bW0x Lm5ldD4gd3JvdGU6Cj4+PiAKPj4+IAo+Pj4gCj4+PiBPbiBTdW4sIE9jdCAyMywgMjAyMiBhdCA4 OjE3IFBNIFpoYW8gWmhpbGkgPHF1aW5rYmxhY2tAZm94bWFpbC5jb20+Cj4+IHdyb3RlOgo+Pj4g RnJvbTogWmhhbyBaaGlsaSA8emhpbGl6aGFvQHRlbmNlbnQuY29tPgo+Pj4gCj4+PiBTaWduZWQt b2ZmLWJ5OiBaaGFvIFpoaWxpIDx6aGlsaXpoYW9AdGVuY2VudC5jb20+Cj4+PiAtLS0KPj4+IENo YW5nZWxvZyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+Pj4gY29uZmlndXJlICAgICAg ICAgICAgICAgICAgICAgICB8ICAgNCArCj4+PiBsaWJhdmNvZGVjL01ha2VmaWxlICAgICAgICAg ICAgIHwgICAyICsKPj4+IGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgICAgICAgICAgfCAgIDIgKwo+ Pj4gbGliYXZjb2RlYy9tZWRpYWNvZGVjX3dyYXBwZXIuYyB8IDEwMiArKysrKystCj4+PiBsaWJh dmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5oIHwgICA4ICsKPj4+IGxpYmF2Y29kZWMvbWVkaWFj b2RlY2VuYy5jICAgICAgfCA0OTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+ IGxpYmF2Y29kZWMvdmVyc2lvbi5oICAgICAgICAgICAgfCAgIDQgKy0KPj4+IDggZmlsZXMgY2hh bmdlZCwgNjExIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCj4+PiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZjb2RlYy9tZWRpYWNvZGVjZW5jLmMKPj4+IAo+Pj4gZGlmZiAtLWdpdCBhL0No YW5nZWxvZyBiL0NoYW5nZWxvZwo+Pj4gaW5kZXggOWUyMDM4MzNhYS4uOWUzOWEzNTk3MiAxMDA2 NDQKPj4+IC0tLSBhL0NoYW5nZWxvZwo+Pj4gKysrIGIvQ2hhbmdlbG9nCj4+PiBAQCAtMTksNiAr MTksNyBAQCB2ZXJzaW9uIDxuZXh0PjoKPj4+IC0gRFRTIHRvIFBUUyByZW9yZGVyIGJzZgo+Pj4g LSBWaWV3UXVlc3QgVlFDIGRlY29kZXIKPj4+IC0gTWVkaWFDb2RlYyBkZWNvZGVyIHZpYSBOREtN ZWRpYUNvZGVjCj4+PiArLSBNZWRpYUNvZGVjIGVuY29kZXIKPj4+IAo+Pj4gCj4+PiAKPj4+IHZl cnNpb24gNS4xOgo+Pj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+Pj4gaW5k ZXggZWUyZTNiYTZhYy4uNTExNGNkYTEzZiAxMDA3NTUKPj4+IC0tLSBhL2NvbmZpZ3VyZQo+Pj4g KysrIGIvY29uZmlndXJlCj4+PiBAQCAtMzE5Myw2ICszMTkzLDggQEAgaDI2NF9jdXZpZF9kZWNv ZGVyX3NlbGVjdD0iaDI2NF9tcDR0b2FubmV4Yl9ic2YiCj4+PiBoMjY0X21lZGlhY29kZWNfZGVj b2Rlcl9kZXBzPSJtZWRpYWNvZGVjIgo+Pj4gaDI2NF9tZWRpYWNvZGVjX2RlY29kZXJfZXh0cmFs aWJzPSItbGFuZHJvaWQiCj4+PiBoMjY0X21lZGlhY29kZWNfZGVjb2Rlcl9zZWxlY3Q9ImgyNjRf bXA0dG9hbm5leGJfYnNmIGgyNjRfcGFyc2VyIgo+Pj4gK2gyNjRfbWVkaWFjb2RlY19lbmNvZGVy X2RlcHM9Im1lZGlhY29kZWMiCj4+PiAraDI2NF9tZWRpYWNvZGVjX2VuY29kZXJfZXh0cmFsaWJz PSItbGFuZHJvaWQiCj4+PiBoMjY0X21mX2VuY29kZXJfZGVwcz0ibWVkaWFmb3VuZGF0aW9uIgo+ Pj4gaDI2NF9tbWFsX2RlY29kZXJfZGVwcz0ibW1hbCIKPj4+IGgyNjRfbnZlbmNfZW5jb2Rlcl9k ZXBzPSJudmVuYyIKPj4+IEBAIC0zMjEyLDYgKzMyMTQsOCBAQCBoZXZjX2N1dmlkX2RlY29kZXJf c2VsZWN0PSJoZXZjX21wNHRvYW5uZXhiX2JzZiIKPj4+IGhldmNfbWVkaWFjb2RlY19kZWNvZGVy X2RlcHM9Im1lZGlhY29kZWMiCj4+PiBoZXZjX21lZGlhY29kZWNfZGVjb2Rlcl9leHRyYWxpYnM9 Ii1sYW5kcm9pZCIKPj4+IGhldmNfbWVkaWFjb2RlY19kZWNvZGVyX3NlbGVjdD0iaGV2Y19tcDR0 b2FubmV4Yl9ic2YgaGV2Y19wYXJzZXIiCj4+PiAraGV2Y19tZWRpYWNvZGVjX2VuY29kZXJfZGVw cz0ibWVkaWFjb2RlYyIKPj4+ICtoZXZjX21lZGlhY29kZWNfZW5jb2Rlcl9leHRyYWxpYnM9Ii1s YW5kcm9pZCIKPj4+IGhldmNfbWZfZW5jb2Rlcl9kZXBzPSJtZWRpYWZvdW5kYXRpb24iCj4+PiBo ZXZjX252ZW5jX2VuY29kZXJfZGVwcz0ibnZlbmMiCj4+PiBoZXZjX252ZW5jX2VuY29kZXJfc2Vs ZWN0PSJhdHNjX2E1MyIKPj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGli YXZjb2RlYy9NYWtlZmlsZQo+Pj4gaW5kZXggOTBjN2YxMTNhMy4uN2QwYjUxM2VlYyAxMDA2NDQK Pj4+IC0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKPj4+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZp bGUKPj4+IEBAIC0zOTMsNiArMzkzLDcgQEAgT0JKUy0kKENPTkZJR19IMjY0X0RFQ09ERVIpICAg ICAgICAgICAgKz0gaDI2NGRlYy5vCj4+IGgyNjRfY2FiYWMubyBoMjY0X2NhdmxjLm8gXAo+Pj4g T0JKUy0kKENPTkZJR19IMjY0X0FNRl9FTkNPREVSKSAgICAgICAgKz0gYW1mZW5jX2gyNjQubwo+ Pj4gT0JKUy0kKENPTkZJR19IMjY0X0NVVklEX0RFQ09ERVIpICAgICAgKz0gY3V2aWRkZWMubwo+ Pj4gT0JKUy0kKENPTkZJR19IMjY0X01FRElBQ09ERUNfREVDT0RFUikgKz0gbWVkaWFjb2RlY2Rl Yy5vCj4+PiArT0JKUy0kKENPTkZJR19IMjY0X01FRElBQ09ERUNfRU5DT0RFUikgKz0gbWVkaWFj b2RlY2VuYy5vCj4+PiBPQkpTLSQoQ09ORklHX0gyNjRfTUZfRU5DT0RFUikgICAgICAgICArPSBt ZmVuYy5vIG1mX3V0aWxzLm8KPj4+IE9CSlMtJChDT05GSUdfSDI2NF9NTUFMX0RFQ09ERVIpICAg ICAgICs9IG1tYWxkZWMubwo+Pj4gT0JKUy0kKENPTkZJR19IMjY0X05WRU5DX0VOQ09ERVIpICAg ICAgKz0gbnZlbmNfaDI2NC5vIG52ZW5jLm8KPj4+IEBAIC00MTcsNiArNDE4LDcgQEAgT0JKUy0k KENPTkZJR19IRVZDX0RFQ09ERVIpICAgICAgICAgICAgKz0gaGV2Y2RlYy5vCj4+IGhldmNfbXZz Lm8gXAo+Pj4gT0JKUy0kKENPTkZJR19IRVZDX0FNRl9FTkNPREVSKSAgICAgICAgKz0gYW1mZW5j X2hldmMubwo+Pj4gT0JKUy0kKENPTkZJR19IRVZDX0NVVklEX0RFQ09ERVIpICAgICAgKz0gY3V2 aWRkZWMubwo+Pj4gT0JKUy0kKENPTkZJR19IRVZDX01FRElBQ09ERUNfREVDT0RFUikgKz0gbWVk aWFjb2RlY2RlYy5vCj4+PiArT0JKUy0kKENPTkZJR19IRVZDX01FRElBQ09ERUNfRU5DT0RFUikg Kz0gbWVkaWFjb2RlY2VuYy5vCj4+PiBPQkpTLSQoQ09ORklHX0hFVkNfTUZfRU5DT0RFUikgICAg ICAgICArPSBtZmVuYy5vIG1mX3V0aWxzLm8KPj4+IE9CSlMtJChDT05GSUdfSEVWQ19OVkVOQ19F TkNPREVSKSAgICAgICs9IG52ZW5jX2hldmMubyBudmVuYy5vCj4+PiBPQkpTLSQoQ09ORklHX0hF VkNfUVNWX0RFQ09ERVIpICAgICAgICArPSBxc3ZkZWMubwo+Pj4gZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4+PiBpbmRleCA0NmFk M2I1YTI1Li40YzMzYTllYzNjIDEwMDY0NAo+Pj4gLS0tIGEvbGliYXZjb2RlYy9hbGxjb2RlY3Mu Ywo+Pj4gKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+Pj4gQEAgLTE1NCw2ICsxNTQsNyBA QCBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oMjY0X2RlY29kZXI7Cj4+PiBleHRlcm4gY29uc3Qg RkZDb2RlYyBmZl9oMjY0X2NyeXN0YWxoZF9kZWNvZGVyOwo+Pj4gZXh0ZXJuIGNvbnN0IEZGQ29k ZWMgZmZfaDI2NF92NGwybTJtX2RlY29kZXI7Cj4+PiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9o MjY0X21lZGlhY29kZWNfZGVjb2RlcjsKPj4+ICtleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oMjY0 X21lZGlhY29kZWNfZW5jb2RlcjsKPj4+IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfbW1h bF9kZWNvZGVyOwo+Pj4gZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaDI2NF9xc3ZfZGVjb2RlcjsK Pj4+IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfcmttcHBfZGVjb2RlcjsKPj4+IEBAIC04 NDIsNiArODQzLDcgQEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaDI2NF92aWRlb3Rvb2xib3hf ZW5jb2RlcjsKPj4+IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNfYW1mX2VuY29kZXI7Cj4+ PiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oZXZjX2N1dmlkX2RlY29kZXI7Cj4+PiBleHRlcm4g Y29uc3QgRkZDb2RlYyBmZl9oZXZjX21lZGlhY29kZWNfZGVjb2RlcjsKPj4+ICtleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9oZXZjX21lZGlhY29kZWNfZW5jb2RlcjsKPj4+IGV4dGVybiBjb25zdCBG RkNvZGVjIGZmX2hldmNfbWZfZW5jb2RlcjsKPj4+IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hl dmNfbnZlbmNfZW5jb2RlcjsKPj4+IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNfcXN2X2Vu Y29kZXI7Cj4+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9tZWRpYWNvZGVjX3dyYXBwZXIuYwo+ PiBiL2xpYmF2Y29kZWMvbWVkaWFjb2RlY193cmFwcGVyLmMKPj4+IGluZGV4IDI4NGQ2MTU5ODAu LjVkMWEzMjAzMWQgMTAwNjQ0Cj4+PiAtLS0gYS9saWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBl ci5jCj4+PiArKysgYi9saWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5jCj4+PiBAQCAtMjEy LDYgKzIxMiw5IEBAIHN0cnVjdCBKTklBTWVkaWFDb2RlY0ZpZWxkcyB7Cj4+PiAgICAgam1ldGhv ZElEIHJlbGVhc2Vfb3V0cHV0X2J1ZmZlcl9pZDsKPj4+ICAgICBqbWV0aG9kSUQgcmVsZWFzZV9v dXRwdXRfYnVmZmVyX2F0X3RpbWVfaWQ7Cj4+PiAKPj4+ICsgICAgam1ldGhvZElEIHNldF9pbnB1 dF9zdXJmYWNlX2lkOwo+Pj4gKyAgICBqbWV0aG9kSUQgc2lnbmFsX2VuZF9vZl9pbnB1dF9zdHJl YW1faWQ7Cj4+PiArCj4+PiAgICAgamNsYXNzIG1lZGlhaW5mb19jbGFzczsKPj4+IAo+Pj4gICAg IGptZXRob2RJRCBpbml0X2lkOwo+Pj4gQEAgLTI2MSw2ICsyNjQsOSBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IEZGSm5pRmllbGQKPj4gam5pX2FtZWRpYWNvZGVjX21hcHBpbmdbXSA9IHsKPj4+ICAg ICAgICAgeyAiYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjIiwgInJlbGVhc2VPdXRwdXRCdWZmZXIi LCAiKElaKVYiLAo+PiBGRl9KTklfTUVUSE9ELCBvZmZzZXRvZihzdHJ1Y3QgSk5JQU1lZGlhQ29k ZWNGaWVsZHMsCj4+IHJlbGVhc2Vfb3V0cHV0X2J1ZmZlcl9pZCksIDEgfSwKPj4+ICAgICAgICAg eyAiYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjIiwgInJlbGVhc2VPdXRwdXRCdWZmZXIiLCAiKElK KVYiLAo+PiBGRl9KTklfTUVUSE9ELCBvZmZzZXRvZihzdHJ1Y3QgSk5JQU1lZGlhQ29kZWNGaWVs ZHMsCj4+IHJlbGVhc2Vfb3V0cHV0X2J1ZmZlcl9hdF90aW1lX2lkKSwgMCB9LAo+Pj4gCj4+PiAr ICAgICAgICB7ICJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMiLCAic2V0SW5wdXRTdXJmYWNlIiwK Pj4gIihMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLCBGRl9KTklfTUVUSE9ELCBvZmZzZXRvZihz dHJ1Y3QKPj4gSk5JQU1lZGlhQ29kZWNGaWVsZHMsIHNldF9pbnB1dF9zdXJmYWNlX2lkKSwgMCB9 LAo+Pj4gKyAgICAgICAgeyAiYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjIiwgInNpZ25hbEVuZE9m SW5wdXRTdHJlYW0iLCAiKClWIiwKPj4gRkZfSk5JX01FVEhPRCwgb2Zmc2V0b2Yoc3RydWN0IEpO SUFNZWRpYUNvZGVjRmllbGRzLAo+PiBzaWduYWxfZW5kX29mX2lucHV0X3N0cmVhbV9pZCksIDAg fSwKPj4+ICsKPj4+ICAgICB7ICJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkQnVmZmVySW5mbyIs IE5VTEwsIE5VTEwsIEZGX0pOSV9DTEFTUywKPj4gb2Zmc2V0b2Yoc3RydWN0IEpOSUFNZWRpYUNv ZGVjRmllbGRzLCBtZWRpYWluZm9fY2xhc3MpLCAxIH0sCj4+PiAKPj4+ICAgICAgICAgeyAiYW5k cm9pZC9tZWRpYS9NZWRpYUNvZGVjLkJ1ZmZlckluZm8iLCAiPGluaXQ+IiwgIigpViIsCj4+IEZG X0pOSV9NRVRIT0QsIG9mZnNldG9mKHN0cnVjdCBKTklBTWVkaWFDb2RlY0ZpZWxkcywgaW5pdF9p ZCksIDEgfSwKPj4+IEBAIC0xMzg1LDcgKzEzOTEsMjYgQEAgc3RhdGljIGludCBtZWRpYWNvZGVj X2puaV9jb25maWd1cmUoRkZBTWVkaWFDb2RlYwo+PiAqY3R4LAo+Pj4gCj4+PiAgICAgSk5JX0dF VF9FTlZfT1JfUkVUVVJOKGVudiwgY29kZWMsIEFWRVJST1JfRVhURVJOQUwpOwo+Pj4gCj4+PiAt ICAgICgqZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCBjb2RlYy0+b2JqZWN0LAo+PiBjb2RlYy0+ amZpZWxkcy5jb25maWd1cmVfaWQsIGZvcm1hdC0+b2JqZWN0LCBzdXJmYWNlLCBOVUxMLCBmbGFn cyk7Cj4+PiArICAgIGlmIChmbGFncyAmIGNvZGVjLT5DT05GSUdVUkVfRkxBR19FTkNPREUpIHsK Pj4+ICsgICAgICAgIGlmIChzdXJmYWNlICYmICFjb2RlYy0+amZpZWxkcy5zZXRfaW5wdXRfc3Vy ZmFjZV9pZCkgewo+Pj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlN5 c3RlbSBkb2Vzbid0IHN1cHBvcnQKPj4gc2V0SW5wdXRTdXJmYWNlXG4iKTsKPj4+ICsgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPj4+ICsgICAgICAgIH0KPj4+ICsKPj4+ICsg ICAgICAgICgqZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCBjb2RlYy0+b2JqZWN0LAo+PiBjb2Rl Yy0+amZpZWxkcy5jb25maWd1cmVfaWQsIGZvcm1hdC0+b2JqZWN0LCBOVUxMLCBOVUxMLCBmbGFn cyk7Cj4+PiArICAgICAgICBpZiAoZmZfam5pX2V4Y2VwdGlvbl9jaGVjayhlbnYsIDEsIGNvZGVj KSA8IDApCj4+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4+PiArCj4+ PiArICAgICAgICBpZiAoIXN1cmZhY2UpCj4+PiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4+PiAr Cj4+PiArICAgICAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9kKGVudiwgY29kZWMtPm9iamVjdCwK Pj4gY29kZWMtPmpmaWVsZHMuc2V0X2lucHV0X3N1cmZhY2VfaWQsIHN1cmZhY2UpOwo+Pj4gKyAg ICAgICAgaWYgKGZmX2puaV9leGNlcHRpb25fY2hlY2soZW52LCAxLCBjb2RlYykgPCAwKQo+Pj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+Pj4gKyAgICAgICAgcmV0dXJu IDA7Cj4+PiArICAgIH0gZWxzZSB7Cj4+PiArICAgICAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9k KGVudiwgY29kZWMtPm9iamVjdCwKPj4gY29kZWMtPmpmaWVsZHMuY29uZmlndXJlX2lkLCBmb3Jt YXQtPm9iamVjdCwgc3VyZmFjZSwgTlVMTCwgZmxhZ3MpOwo+Pj4gKyAgICB9Cj4+PiAgICAgaWYg KGZmX2puaV9leGNlcHRpb25fY2hlY2soZW52LCAxLCBjb2RlYykgPCAwKSB7Cj4+PiAgICAgICAg IHJldCA9IEFWRVJST1JfRVhURVJOQUw7Cj4+PiAgICAgICAgIGdvdG8gZmFpbDsKPj4+IEBAIC0x NzQzLDYgKzE3NjgsMjIgQEAgZmFpbDoKPj4+ICAgICByZXR1cm4gcmV0Owo+Pj4gfQo+Pj4gCj4+ PiArc3RhdGljIGludCBtZWRpYWNvZGVjX2puaV9zaWduYWxFbmRPZklucHV0U3RyZWFtKEZGQU1l ZGlhQ29kZWMgKmN0eCkKPj4+ICt7Cj4+PiArICAgIGludCByZXQgPSAwOwo+Pj4gKyAgICBKTklF bnYgKmVudiA9IE5VTEw7Cj4+PiArICAgIEZGQU1lZGlhQ29kZWNKbmkgKmNvZGVjID0gKEZGQU1l ZGlhQ29kZWNKbmkgKiljdHg7Cj4+PiArCj4+PiArICAgIEpOSV9HRVRfRU5WX09SX1JFVFVSTihl bnYsIGNvZGVjLCBBVkVSUk9SX0VYVEVSTkFMKTsKPj4+ICsKPj4+ICsgICAgKCplbnYpLT5DYWxs Vm9pZE1ldGhvZChlbnYsIGNvZGVjLT5vYmplY3QsCj4+IGNvZGVjLT5qZmllbGRzLnNpZ25hbF9l bmRfb2ZfaW5wdXRfc3RyZWFtX2lkKTsKPj4+ICsgICAgaWYgKGZmX2puaV9leGNlcHRpb25fY2hl Y2soZW52LCAxLCBjb2RlYykgPCAwKSB7Cj4+PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+ PiBzdGF0aWMgY29uc3QgRkZBTWVkaWFGb3JtYXQgbWVkaWFfZm9ybWF0X2puaSA9IHsKPj4+ICAg ICAuY2xhc3MgPSAmYW1lZGlhZm9ybWF0X2NsYXNzLAo+Pj4gCj4+PiBAQCAtMTgwMSw2ICsxODQy LDcgQEAgc3RhdGljIGNvbnN0IEZGQU1lZGlhQ29kZWMgbWVkaWFfY29kZWNfam5pID0gewo+Pj4g Cj4+PiAgICAgLmdldENvbmZpZ3VyZUZsYWdFbmNvZGUgPSBtZWRpYWNvZGVjX2puaV9nZXRDb25m aWd1cmVGbGFnRW5jb2RlLAo+Pj4gICAgIC5jbGVhbk91dHB1dEJ1ZmZlcnMgPSBtZWRpYWNvZGVj X2puaV9jbGVhbk91dHB1dEJ1ZmZlcnMsCj4+PiArICAgIC5zaWduYWxFbmRPZklucHV0U3RyZWFt ID0gbWVkaWFjb2RlY19qbmlfc2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSwKPj4+IH07Cj4+PiAKPj4+ IHR5cGVkZWYgc3RydWN0IEZGQU1lZGlhRm9ybWF0TmRrIHsKPj4+IEBAIC0xODY2LDYgKzE5MDgs MTAgQEAgdHlwZWRlZiBzdHJ1Y3QgRkZBTWVkaWFDb2RlY05kayB7Cj4+PiAgICAgLy8gQXZhaWxh YmxlIHNpbmNlIEFQSSBsZXZlbCAyOC4KPj4+ICAgICBtZWRpYV9zdGF0dXNfdCAoKmdldE5hbWUp KEFNZWRpYUNvZGVjKiwgY2hhcioqIG91dF9uYW1lKTsKPj4+ICAgICB2b2lkICgqcmVsZWFzZU5h bWUpKEFNZWRpYUNvZGVjKiwgY2hhciogbmFtZSk7Cj4+PiArCj4+PiArICAgIC8vIEF2YWlsYWJs ZSBzaW5jZSBBUEkgbGV2ZWwgMjYuCj4+PiArICAgIG1lZGlhX3N0YXR1c190ICgqc2V0SW5wdXRT dXJmYWNlKShBTWVkaWFDb2RlYyosIEFOYXRpdmVXaW5kb3cgKik7Cj4+PiArICAgIG1lZGlhX3N0 YXR1c190ICgqc2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSkoQU1lZGlhQ29kZWMgKik7Cj4+PiB9IEZG QU1lZGlhQ29kZWNOZGs7Cj4+PiAKPj4+IHN0YXRpYyBjb25zdCBGRkFNZWRpYUZvcm1hdCBtZWRp YV9mb3JtYXRfbmRrOwo+Pj4gQEAgLTIwOTgsNiArMjE0NCw5IEBAIHN0YXRpYyBpbmxpbmUgRkZB TWVkaWFDb2RlYyAqbmRrX2NvZGVjX2NyZWF0ZShpbnQKPj4gbWV0aG9kLCBjb25zdCBjaGFyICph cmcpIHsKPj4+ICAgICBHRVRfU1lNQk9MKGdldE5hbWUsIDApCj4+PiAgICAgR0VUX1NZTUJPTChy ZWxlYXNlTmFtZSwgMCkKPj4+IAo+Pj4gKyAgICBHRVRfU1lNQk9MKHNldElucHV0U3VyZmFjZSwg MCkKPj4+ICsgICAgR0VUX1NZTUJPTChzaWduYWxFbmRPZklucHV0U3RyZWFtLCAwKQo+Pj4gKwo+ Pj4gI3VuZGVmIEdFVF9TWU1CT0wKPj4+IAo+Pj4gICAgIHN3aXRjaCAobWV0aG9kKSB7Cj4+PiBA QCAtMjE4NCwxMCArMjIzMywzMiBAQCBzdGF0aWMgaW50Cj4+IG1lZGlhY29kZWNfbmRrX2NvbmZp Z3VyZShGRkFNZWRpYUNvZGVjKiBjdHgsCj4+PiAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7Cj4+PiAgICAgfQo+Pj4gCj4+PiAtICAgIHN0YXR1cyA9IGNvZGVjLT5jb25maWd1cmUoY29k ZWMtPmltcGwsIGZvcm1hdC0+aW1wbCwgbmF0aXZlX3dpbmRvdywKPj4gTlVMTCwgZmxhZ3MpOwo+ Pj4gLSAgICBpZiAoc3RhdHVzICE9IEFNRURJQV9PSykgewo+Pj4gLSAgICAgICAgYXZfbG9nKGNv ZGVjLCBBVl9MT0dfRVJST1IsICJjb25maWd1cmUgZmFpbGVkLCAlZFxuIiwgc3RhdHVzKTsKPj4+ IC0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+Pj4gKyAgICBpZiAoZmxhZ3MgJiBB TUVESUFDT0RFQ19DT05GSUdVUkVfRkxBR19FTkNPREUpIHsKPj4+ICsgICAgICAgIGlmIChuYXRp dmVfd2luZG93ICYmICFjb2RlYy0+c2V0SW5wdXRTdXJmYWNlKSB7Cj4+PiArICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiU3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydAo+PiBzZXRJ bnB1dFN1cmZhY2VcbiIpOwo+Pj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM Owo+Pj4gKyAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgc3RhdHVzID0gY29kZWMtPmNvbmZp Z3VyZShjb2RlYy0+aW1wbCwgZm9ybWF0LT5pbXBsLCBOVUxMLAo+PiBOVUxMLCBmbGFncyk7Cj4+ PiArICAgICAgICBpZiAoc3RhdHVzICE9IEFNRURJQV9PSykgewo+Pj4gKyAgICAgICAgICAgIGF2 X2xvZyhjb2RlYywgQVZfTE9HX0VSUk9SLCAiRW5jb2RlciBjb25maWd1cmUgZmFpbGVkLAo+PiAl ZFxuIiwgc3RhdHVzKTsKPj4+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK Pj4+ICsgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgIGlmICghbmF0aXZlX3dpbmRvdykKPj4+ ICsgICAgICAgICAgICByZXR1cm4gMDsKPj4+ICsKPj4+ICsgICAgICAgIHN0YXR1cyA9IGNvZGVj LT5zZXRJbnB1dFN1cmZhY2UoY29kZWMtPmltcGwsIG5hdGl2ZV93aW5kb3cpOwo+Pj4gKyAgICAg ICAgaWYgKHN0YXR1cyAhPSBBTUVESUFfT0spIHsKPj4+ICsgICAgICAgICAgICBhdl9sb2coY29k ZWMsIEFWX0xPR19FUlJPUiwgIkVuY29kZXIgc2V0IGlucHV0IHN1cmZhY2UKPj4gZmFpbGVkLCAl ZFxuIiwgc3RhdHVzKTsKPj4+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK Pj4+ICsgICAgICAgIH0KPj4+ICsgICAgfSBlbHNlIHsKPj4+ICsgICAgICAgIHN0YXR1cyA9IGNv ZGVjLT5jb25maWd1cmUoY29kZWMtPmltcGwsIGZvcm1hdC0+aW1wbCwKPj4gbmF0aXZlX3dpbmRv dywgTlVMTCwgZmxhZ3MpOwo+Pj4gKyAgICAgICAgaWYgKHN0YXR1cyAhPSBBTUVESUFfT0spIHsK Pj4+ICsgICAgICAgICAgICBhdl9sb2coY29kZWMsIEFWX0xPR19FUlJPUiwgIkRlY29kZXIgY29u ZmlndXJlIGZhaWxlZCwKPj4gJWRcbiIsIHN0YXR1cyk7Cj4+PiArICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7Cj4+PiArICAgICAgICB9Cj4+PiAgICAgfQo+Pj4gCj4+PiAgICAg cmV0dXJuIDA7Cj4+PiBAQCAtMjMzMCw2ICsyNDAxLDI2IEBAIHN0YXRpYyBpbnQKPj4gbWVkaWFj b2RlY19uZGtfY2xlYW5PdXRwdXRCdWZmZXJzKEZGQU1lZGlhQ29kZWMgKmN0eCkKPj4+ICAgICBy ZXR1cm4gMDsKPj4+IH0KPj4+IAo+Pj4gK3N0YXRpYyBpbnQgbWVkaWFjb2RlY19uZGtfc2lnbmFs RW5kT2ZJbnB1dFN0cmVhbShGRkFNZWRpYUNvZGVjICpjdHgpCj4+PiArewo+Pj4gKyAgICBGRkFN ZWRpYUNvZGVjTmRrICpjb2RlYyA9IChGRkFNZWRpYUNvZGVjTmRrICopY3R4Owo+Pj4gKyAgICBt ZWRpYV9zdGF0dXNfdCBzdGF0dXM7Cj4+PiArCj4+PiArICAgIGlmICghY29kZWMtPnNpZ25hbEVu ZE9mSW5wdXRTdHJlYW0pIHsKPj4+ICsgICAgICAgIGF2X2xvZyhjb2RlYywgQVZfTE9HX0VSUk9S LCAic2lnbmFsRW5kT2ZJbnB1dFN0cmVhbQo+PiB1bmF2YWlsYWJsZVxuIik7Cj4+PiArICAgICAg ICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBzdGF0 dXMgPSBjb2RlYy0+c2lnbmFsRW5kT2ZJbnB1dFN0cmVhbShjb2RlYy0+aW1wbCk7Cj4+PiArICAg IGlmIChzdGF0dXMgIT0gQU1FRElBX09LKSB7Cj4+PiArICAgICAgICBhdl9sb2coY29kZWMsIEFW X0xPR19FUlJPUiwgInNpZ25hbEVuZE9mSW5wdXRTdHJlYW0gZmFpbGVkLAo+PiAlZFxuIiwgc3Rh dHVzKTsKPj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+Pj4gKyAgICB9Cj4+ PiArICAgIGF2X2xvZyhjb2RlYywgQVZfTE9HX0RFQlVHLCAic2lnbmFsRW5kT2ZJbnB1dFN0cmVh bSBzdWNjZXNzXG4iKTsKPj4+ICsKPj4+ICsgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4g c3RhdGljIGNvbnN0IEZGQU1lZGlhRm9ybWF0IG1lZGlhX2Zvcm1hdF9uZGsgPSB7Cj4+PiAgICAg LmNsYXNzID0gJmFtZWRpYWZvcm1hdF9uZGtfY2xhc3MsCj4+PiAKPj4+IEBAIC0yMzg4LDYgKzI0 NzksNyBAQCBzdGF0aWMgY29uc3QgRkZBTWVkaWFDb2RlYyBtZWRpYV9jb2RlY19uZGsgPSB7Cj4+ PiAKPj4+ICAgICAuZ2V0Q29uZmlndXJlRmxhZ0VuY29kZSA9IG1lZGlhY29kZWNfbmRrX2dldENv bmZpZ3VyZUZsYWdFbmNvZGUsCj4+PiAgICAgLmNsZWFuT3V0cHV0QnVmZmVycyA9IG1lZGlhY29k ZWNfbmRrX2NsZWFuT3V0cHV0QnVmZmVycywKPj4+ICsgICAgLnNpZ25hbEVuZE9mSW5wdXRTdHJl YW0gPSBtZWRpYWNvZGVjX25ka19zaWduYWxFbmRPZklucHV0U3RyZWFtLAo+Pj4gfTsKPj4+IAo+ Pj4gRkZBTWVkaWFGb3JtYXQgKmZmX0FNZWRpYUZvcm1hdF9uZXcoaW50IG5kaykKPj4+IGRpZmYg LS1naXQgYS9saWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5oCj4+IGIvbGliYXZjb2RlYy9t ZWRpYWNvZGVjX3dyYXBwZXIuaAo+Pj4gaW5kZXggN2NmM2Y0YWVjZC4uZjE1YWQ2NmQ4MyAxMDA2 NDQKPj4+IC0tLSBhL2xpYmF2Y29kZWMvbWVkaWFjb2RlY193cmFwcGVyLmgKPj4+ICsrKyBiL2xp YmF2Y29kZWMvbWVkaWFjb2RlY193cmFwcGVyLmgKPj4+IEBAIC0xOTIsNiArMTkyLDkgQEAgc3Ry dWN0IEZGQU1lZGlhQ29kZWMgewo+Pj4gICAgIGludCAoKmdldENvbmZpZ3VyZUZsYWdFbmNvZGUp KEZGQU1lZGlhQ29kZWMgKmNvZGVjKTsKPj4+IAo+Pj4gICAgIGludCAoKmNsZWFuT3V0cHV0QnVm ZmVycykoRkZBTWVkaWFDb2RlYyAqY29kZWMpOwo+Pj4gKwo+Pj4gKyAgICAvLyBGb3IgZW5jb2Rl ciB3aXRoIEZGQU5hdGl2ZVdpbmRvdyBhcyBpbnB1dC4KPj4+ICsgICAgaW50ICgqc2lnbmFsRW5k T2ZJbnB1dFN0cmVhbSkoRkZBTWVkaWFDb2RlYyAqKTsKPj4+IH07Cj4+PiAKPj4+IHN0YXRpYyBp bmxpbmUgY2hhciAqZmZfQU1lZGlhQ29kZWNfZ2V0TmFtZShGRkFNZWRpYUNvZGVjICpjb2RlYykK Pj4+IEBAIC0zMTEsNiArMzE0LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50Cj4+IGZmX0FNZWRpYUNv ZGVjX2NsZWFuT3V0cHV0QnVmZmVycyhGRkFNZWRpYUNvZGVjICpjb2RlYykKPj4+ICAgICByZXR1 cm4gY29kZWMtPmNsZWFuT3V0cHV0QnVmZmVycyhjb2RlYyk7Cj4+PiB9Cj4+PiAKPj4+ICtzdGF0 aWMgaW5saW5lIGludCBmZl9BTWVkaWFDb2RlY19zaWduYWxFbmRPZklucHV0U3RyZWFtKEZGQU1l ZGlhQ29kZWMKPj4gKmNvZGVjKQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIGNvZGVjLT5zaWduYWxF bmRPZklucHV0U3RyZWFtKGNvZGVjKTsKPj4+ICt9Cj4+PiArCj4+PiBpbnQgZmZfQnVpbGRfU0RL X0lOVChBVkNvZGVjQ29udGV4dCAqYXZjdHgpOwo+Pj4gCj4+PiAjZW5kaWYgLyogQVZDT0RFQ19N RURJQUNPREVDX1dSQVBQRVJfSCAqLwo+Pj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbWVkaWFj b2RlY2VuYy5jIGIvbGliYXZjb2RlYy9tZWRpYWNvZGVjZW5jLmMKPj4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwMDAwLi5jODEwNTBlYzgwCj4+PiAtLS0gL2Rldi9udWxs Cj4+PiArKysgYi9saWJhdmNvZGVjL21lZGlhY29kZWNlbmMuYwo+Pj4gQEAgLTAsMCArMSw0OTUg QEAKPj4+ICsvKgo+Pj4gKyAqIEFuZHJvaWQgTWVkaWFDb2RlYyBlbmNvZGVycwo+Pj4gKyAqCj4+ PiArICogQ29weXJpZ2h0IChjKSAyMDIyIFpoYW8gWmhpbGkgPHpoaWxpemhhb0B0ZW5jZW50LmNv bT4KPj4+ICsgKgo+Pj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPj4+ICsgKgo+ Pj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKPj4+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCj4+PiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4+PiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+PiArICoKPj4+ ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgo+Pj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4+PiArICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4+ICsgKgo+Pj4gKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKPj4+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCj4+PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+PiAwMjExMC0xMzAxIFVTQQo+Pj4gKyAqLwo+ Pj4gKwo+Pj4gKyNpbmNsdWRlICJjb25maWdfY29tcG9uZW50cy5oIgo+Pj4gKwo+Pj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKPj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29u dGV4dF9tZWRpYWNvZGVjLmgiCj4+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgo+ Pj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4+PiArCj4+PiArI2luY2x1ZGUgImF2Y29k ZWMuaCIKPj4+ICsjaW5jbHVkZSAiY29kZWNfaW50ZXJuYWwuaCIKPj4+ICsjaW5jbHVkZSAiZW5j b2RlLmgiCj4+PiArI2luY2x1ZGUgImh3Y29uZmlnLmgiCj4+PiArI2luY2x1ZGUgImpuaS5oIgo+ Pj4gKyNpbmNsdWRlICJtZWRpYWNvZGVjLmgiCj4+PiArI2luY2x1ZGUgIm1lZGlhY29kZWNfd3Jh cHBlci5oIgo+Pj4gKyNpbmNsdWRlICJtZWRpYWNvZGVjZGVjX2NvbW1vbi5oIgo+Pj4gKwo+Pj4g KyNkZWZpbmUgSU5QVVRfREVRVUVVRV9USU1FT1VUX1VTIDgwMDAKPj4+ICsjZGVmaW5lIE9VVFBV VF9ERVFVRVVFX1RJTUVPVVRfVVMgODAwMAo+Pj4gKwo+Pj4gK3R5cGVkZWYgc3RydWN0IE1lZGlh Q29kZWNFbmNDb250ZXh0IHsKPj4+ICsgICAgQVZDbGFzcyAqYXZjbGFzczsKPj4+ICsgICAgRkZB TWVkaWFDb2RlYyAqY29kZWM7Cj4+PiArICAgIGludCB1c2VfbmRrX2NvZGVjOwo+Pj4gKyAgICBG RkFOYXRpdmVXaW5kb3cgKndpbmRvdzsKPj4+ICsKPj4+ICsgICAgaW50IGZwczsKPj4+ICsgICAg aW50IHdpZHRoOwo+Pj4gKyAgICBpbnQgaGVpZ2h0Owo+Pj4gKwo+Pj4gKyAgICB1aW50OF90ICpl eHRyYWRhdGE7Cj4+PiArICAgIGludCBleHRyYWRhdGFfc2l6ZTsKPj4+ICsKPj4+ICsgICAgLy8g U2luY2UgTWVkaWFDb2RlYyBkb2Vzbid0IG91dHB1dCBEVFMsIHVzZSBhIHRpbWVzdGFtcCBxdWV1 ZSB0bwo+PiBzYXZlIHB0cwo+Pj4gKyAgICAvLyBvZiBBVkZyYW1lIGFuZCBnZW5lcmF0ZSBEVFMg Zm9yIEFWUGFja2V0Lgo+Pj4gKyAgICAvLwo+Pj4gKyAgICAvLyBUaGlzIGRvZXNuJ3Qgd29yayB3 aGVuIHVzZSBTdXJmYWNlIGFzIGlucHV0LCBpbiB0aGF0IGNhc2UgZnJhbWVzCj4+IGNhbiBiZQo+ Pj4gKyAgICAvLyBzZW50IHRvIGVuY29kZXIgd2l0aG91dCBvdXIgbm90aWNlLiBPbmUgZXhjZXB0 aW9uIGlzIGZyYW1lcyBjb21lCj4+IGZyb20KPj4+ICsgICAgLy8gb3VyIE1lZGlhQ29kZWMgZGVj b2RlciB3cmFwcGVyLCBzaW5jZSB3ZSBjYW4gY29udHJvbCBpdCdzIHJlbmRlcgo+PiBieQo+Pj4g KyAgICAvLyBhdl9tZWRpYWNvZGVjX3JlbGVhc2VfYnVmZmVyLgo+Pj4gKyAgICBpbnQ2NF90IHRp bWVzdGFtcHNbMzJdOwo+Pj4gKyAgICBpbnQgdHNfaGVhZDsKPj4+ICsgICAgaW50IHRzX3RhaWw7 Cj4+PiArCj4+PiArICAgIGludCBlb2Zfc2VudDsKPj4+ICsKPj4+ICsgICAgQVZGcmFtZSAqZnJh bWU7Cj4+PiArfSBNZWRpYUNvZGVjRW5jQ29udGV4dDsKPj4+ICsKPj4+ICtlbnVtIHsKPj4+ICsg ICAgQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PSAweDEzLAo+Pj4gKyAgICBDT0xPUl9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyICAgICAgICAgICAg ICAgICAgICAgICAgICA9IDB4MTUsCj4+PiArICAgIENPTE9SX0Zvcm1hdFN1cmZhY2UgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3RjAwMDc4OSwKPj4+ICt9Owo+Pj4gKwo+ Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+Pj4gKyAgICBpbnQgY29sb3JfZm9ybWF0Owo+Pj4g KyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdDsKPj4+ICt9IGNvbG9yX2Zvcm1hdHNbXSA9 IHsKPj4+ICsgICAgeyBDT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIsICAgICAgICAgQVZfUElYX0ZN VF9ZVVY0MjBQIH0sCj4+PiArICAgIHsgQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwgICAg IEFWX1BJWF9GTVRfTlYxMiAgICB9LAo+Pj4gKyAgICB7IENPTE9SX0Zvcm1hdFN1cmZhY2UsICAg ICAgICAgICAgICBBVl9QSVhfRk1UX01FRElBQ09ERUMgfSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0 YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgYXZjX3BpeF9mbXRzW10gPSB7Cj4+PiArICAg IEFWX1BJWF9GTVRfTUVESUFDT0RFQywKPj4+ICsgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLAo+Pj4g KyAgICBBVl9QSVhfRk1UX05WMTIsCj4+PiArICAgIEFWX1BJWF9GTVRfTk9ORQo+Pj4gK307Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgbWVkaWFjb2RlY19vdXRwdXRfZm9ybWF0KEFWQ29kZWNDb250 ZXh0ICphdmN0eCkKPj4+ICt7Cj4+PiArICAgIE1lZGlhQ29kZWNFbmNDb250ZXh0ICpzID0gYXZj dHgtPnByaXZfZGF0YTsKPj4+ICsgICAgY2hhciAqbmFtZSA9IGZmX0FNZWRpYUNvZGVjX2dldE5h bWUocy0+Y29kZWMpOwo+Pj4gKyAgICBGRkFNZWRpYUZvcm1hdCAqb3V0X2Zvcm1hdCA9Cj4+IGZm X0FNZWRpYUNvZGVjX2dldE91dHB1dEZvcm1hdChzLT5jb2RlYyk7Cj4+PiArICAgIGNoYXIgKnN0 ciA9IGZmX0FNZWRpYUZvcm1hdF90b1N0cmluZyhvdXRfZm9ybWF0KTsKPj4+ICsKPj4+ICsgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJNZWRpYUNvZGVjIGVuY29kZXIgJXMgb3V0cHV0 IGZvcm1hdAo+PiAlc1xuIiwKPj4+ICsgICAgICAgICAgIG5hbWUgPyBuYW1lIDogInVua25vd24i LCBzdHIpOwo+Pj4gKyAgICBhdl9mcmVlKG5hbWUpOwo+Pj4gKyAgICBhdl9mcmVlKHN0cik7Cj4+ PiArICAgIGZmX0FNZWRpYUZvcm1hdF9kZWxldGUob3V0X2Zvcm1hdCk7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBhdl9jb2xkIGludCBtZWRpYWNvZGVjX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KQo+Pj4gK3sKPj4+ICsgICAgY29uc3QgY2hhciAqY29kZWNfbWltZSA9IE5VTEw7Cj4+PiAr ICAgIE1lZGlhQ29kZWNFbmNDb250ZXh0ICpzID0gYXZjdHgtPnByaXZfZGF0YTsKPj4+ICsgICAg RkZBTWVkaWFGb3JtYXQgKmZvcm1hdCA9IE5VTEw7Cj4+PiArICAgIGludCByZXQ7Cj4+PiArICAg IGludCBnb3A7Cj4+PiArCj4+PiArICAgIGlmIChzLT51c2VfbmRrX2NvZGVjIDwgMCkKPj4+ICsg ICAgICAgIHMtPnVzZV9uZGtfY29kZWMgPSAhYXZfam5pX2dldF9qYXZhX3ZtKGF2Y3R4KTsKPj4+ ICsKPj4+ICsgICAgc3dpdGNoIChhdmN0eC0+Y29kZWNfaWQpIHsKPj4+ICsgICAgY2FzZSBBVl9D T0RFQ19JRF9IMjY0Ogo+Pj4gKyAgICAgICAgY29kZWNfbWltZSA9ICJ2aWRlby9hdmMiOwo+Pj4g KyAgICAgICAgYnJlYWs7Cj4+PiArICAgIGNhc2UgQVZfQ09ERUNfSURfSEVWQzoKPj4+ICsgICAg ICAgIGNvZGVjX21pbWUgPSAidmlkZW8vaGV2YyI7Cj4+PiArICAgICAgICBicmVhazsKPj4+ICsg ICAgZGVmYXVsdDoKPj4+ICsgICAgICAgIGF2X2Fzc2VydDAoMCk7Cj4+PiArICAgIH0KPj4+ICsK Pj4+ICsgICAgcy0+Y29kZWMgPSBmZl9BTWVkaWFDb2RlY19jcmVhdGVFbmNvZGVyQnlUeXBlKGNv ZGVjX21pbWUsCj4+IHMtPnVzZV9uZGtfY29kZWMpOwo+Pj4gKyAgICBpZiAoIXMtPmNvZGVjKSB7 Cj4+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVh dGUgZW5jb2RlciBmb3IgdHlwZQo+PiAlc1xuIiwKPj4+ICsgICAgICAgICAgICAgICBjb2RlY19t aW1lKTsKPj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+Pj4gKyAgICB9Cj4+ PiArCj4+PiArICAgIGZvcm1hdCA9IGZmX0FNZWRpYUZvcm1hdF9uZXcocy0+dXNlX25ka19jb2Rl Yyk7Cj4+PiArICAgIGlmICghZm9ybWF0KSB7Cj4+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgbWVkaWEgZm9ybWF0XG4iKTsKPj4+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIGZm X0FNZWRpYUZvcm1hdF9zZXRTdHJpbmcoZm9ybWF0LCAibWltZSIsIGNvZGVjX21pbWUpOwo+Pj4g KyAgICBzLT53aWR0aCA9IEZGQUxJR04oYXZjdHgtPndpZHRoLCAxNik7Cj4+PiArICAgIHMtPmhl aWdodCA9IGF2Y3R4LT5oZWlnaHQ7Cj4+PiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQzMihm b3JtYXQsICJ3aWR0aCIsIHMtPndpZHRoKTsKPj4+ICsgICAgZmZfQU1lZGlhRm9ybWF0X3NldElu dDMyKGZvcm1hdCwgImhlaWdodCIsIHMtPmhlaWdodCk7Cj4+PiAKPj4+IElzIGl0IHByZWZlcmFi bGUgdG8gdXNlIGNvbnN0YW50cyBsaWtlIEFNRURJQUZPUk1BVF9LRVlfSEVJR0hUIGhlcmU/Cj4+ PiAKPj4+IEkgZG9uJ3QgaGF2ZSBhIHByZWZlcmVuY2UgZWl0aGVyIHdheS4KPj4gCj4+IFRoZXNl IEtFWXMgYXJlbuKAmXQgc3RyaW5nIGxpdGVyYWwsIHRoZXkgYXJlIGdsb2JhbCB2YXJpYWJsZXMu Cj4+IAo+PiBleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9IRUlHSFQgX19JTlRS T0RVQ0VEX0lOKDIxKTsKPj4gCj4+IFNvbWUgYmFzaWMgb25lcyBhcmUgaW50cm9kdWNlZCB2ZXJ5 IGxhdGUsIGUuZy4sCj4+IAo+PiBleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9D U0QgX19JTlRST0RVQ0VEX0lOKDI4KTsKPj4gZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1B VF9LRVlfQ1NEXzAgX19JTlRST0RVQ0VEX0lOKDI4KTsKPj4gZXh0ZXJuIGNvbnN0IGNoYXIqIEFN RURJQUZPUk1BVF9LRVlfQ1NEXzEgX19JTlRST0RVQ0VEX0lOKDI4KTsKPj4gZXh0ZXJuIGNvbnN0 IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzIgX19JTlRST0RVQ0VEX0lOKDI4KTsKPj4gZXh0 ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRElTUExBWV9DUk9QIF9fSU5UUk9EVUNF RF9JTigyOCk7Cj4+IAo+PiBTbyB3ZSBjYW7igJl0IHVzZSB0aGVzZSBBTUVESUFGT1JNQVRfS0VZ XyBkaXJlY3RseS4gZGxzeW0oKSB0aGVzZSBnbG9iYWwKPj4gdmFyaWFibGVzIGFuZCB3aXRoIGEg ZmFsbGJhY2sgdmFsdWUgaXMgcG9zc2libGUsIGp1c3Qgb3Zlci1lbmdpbmVlcmluZy4KPj4gCj4+ IEdvb2dsZeKAmXMgQVBJIGRlc2lnbiBmb3JjZWQgdXMgdG8gdXNlIHN0cmluZyBsaXRlcmFsIGRp cmVjdGx5Lgo+PiAKPj4+IAo+Pj4gSXQgbWF5IGJlIHdvcnRoIGFsc28gcGFzc2luZyBpbiB0aGUg c2FtZSB2YWx1ZXMgdG8KPj4gQU1FRElBRk9STUFUX0tFWV9NQVhfV0lEVEggYW5kIEFNRURJQUZP Uk1BVF9LRVlfTUFYX0hFSUdIVAo+PiAKPj4gVGhlIGRvY3VtZW50YXRpb24gaGludHMgdGhleSBh cmUgZm9yIGRlY29kZXIgb25seToKPj4gCj4+PiBBIGtleSBkZXNjcmliaW5nIHRoZSBtYXhpbXVt IGV4cGVjdGVkIHdpZHRoIG9mIHRoZSBjb250ZW50IGluIGEgdmlkZW8KPj4gZGVjb2RlciBmb3Jt YXQsIGluIGNhc2UgdGhlcmUgYXJlIHJlc29sdXRpb24gY2hhbmdlcyBpbiB0aGUgdmlkZW8gY29u dGVudC4KPj4gCj4+IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRy b2lkL21lZGlhL01lZGlhRm9ybWF0Cj4+IAo+Pj4gCj4+PiBBbmQgSSB0aGluayB0aGUgdW5hbGln bmVkIHdpZHRoIHNob3VsZCBiZSBzZXQgaW50bwo+PiBBTUVESUFGT1JNQVRfS0VZX1NUUklERQo+ PiAKPj4gVGVjaG5pY2FsbHksIEtFWV9XSURUSCBzaG91bGQgYmUgdW5hbGlnbmVkIHdpZHRoLCBh bmQgS0VZX1NUUklERSBzaG91bGQKPj4gYmUgYWxpZ25lZCB3aWR0aC4gSG93ZXZlciwKPj4gCj4+ IDEuIEl04oCZcyB3ZWxsIGtub3duIHRoYXQgYSBsb3Qgb2YgZGV2aWNlcyBjYW7igJl0IGhhbmRs ZSB3aWR0aCBkb2VzbuKAmXQgYWxpZ25lZAo+PiB0byAxNiwgdGhleSB3aWxsIGNyYXNoLCByZXBv cnQgZXJyb3Igb3IgcHJvZHVjZSBicm9rZW4gZmlsZXMuCj4+IAo+PiAyLiBDVFMgdGVzdHMgb25s eSB2ZXJpZnkgdGhhdCAxNiBhbGlnbmVkIHJlc29sdXRpb25zIGFyZSBzdXBwb3J0ZWQuCj4+IAo+ PiAzLiBUaGVyZSBhcmUgYWxpZ25tZW50IGluZm8gaW4gT01YIGFuZCBleHBvcnRlZCB2aWEgTWVk aWFDb2RlY0luZm8sIGxpa2UKPj4gCj4+ICAgICAgICA8TWVkaWFDb2RlYyBuYW1lPSJjMi5xdGku YXZjLmVuY29kZXIiIHR5cGU9InZpZGVvL2F2YyI+Cj4+ICAgICAgICAgICAgPEFsaWFzIG5hbWU9 Ik9NWC5xY29tLnZpZGVvLmVuY29kZXIuYXZjIiAvPgo+PiAgICAgICAgICAgIDxMaW1pdCBuYW1l PSJzaXplIiBtaW49Ijk2eDk2IiBtYXg9IjQwOTZ4MjMwNCIgLz4KPj4gICAgICAgICAgICA8TGlt aXQgbmFtZT0iYWxpZ25tZW50IiB2YWx1ZT0iMngyIiAvPgo+PiAgICAgICAgICAgIDxMaW1pdCBu YW1lPSJibG9jay1zaXplIiB2YWx1ZT0iMTZ4MTYiIC8+Cj4+IAo+PiBJdCBjYW4gYmUgbWlzc2lu ZyBvbiBvbGQgZGV2aWNlcywgb3Igd29yc2UsIHRoZSBpbmZvIGRvZXNu4oCZdCByZWZsZWN0IHRo ZQo+PiByZWFsIHJlcXVpcmVtZW50IChNYXliZSBpdCB3YXMganVzdCBhIGNvcHktcGFzdGUgZnJv bSBzb21lIHBsYWNlcykuCj4+IAo+PiBJIGhhdmUgYW4gaWRlYSB0byBmaXggdGhlIGlzc3VlOiBh bHdheXMgZW5jb2RpbmcgaW4gYWxpZ25lZCByZXNvbHV0aW9uLAo+PiB0aGVuIGZpeCB0aGUgY3Jv cCBzZXR0aW5nIGJ5IGFwcGx5IEJTRiAoZS5nLiwgaDI2NF9tZXRhZGF0YSkgb24gdGhlCj4+IGJp dHN0cmVhbS4KPj4gCj4+PiAKPj4+IEZpbmFsbHksIGF2Y3R4LT5zYW1wbGVfYXNwZWN0X3JhdGlv IHNob3VsZCBiZSBwcm9wYWdhdGVkIGludG8KPj4gYXNwZWN0LXdpZHRoIGFuZCBhc3BlY3QtaGVp Z2h0LiBTb21ldGhpbmcgbGlrZSB0aGlzOgo+Pj4gCj4+PiAgICBBVlJhdGlvbmFsIHNhciA9IGF2 Y3R4LT5zYW1wbGVfYXNwZWN0X3JhdGlvOwo+Pj4gICAgaWYgKCFzYXIubnVtIHx8ICFzYXIuZGVu KQo+Pj4gICAgICAgIHNhci5udW0gPSBzYXIuZGVuID0gMTsKPj4+ICAgIGF2X3JlZHVjZSgmc2Fy Lm51bSwgJnNhci5kZW4sIHNhci5udW0sIHNhci5kZW4sIDQwOTYpOwo+Pj4gICAgQU1lZGlhRm9y bWF0X3NldEludDMyKGZvcm1hdCwgImFzcGVjdC13aWR0aCIsIHNhci5udW0pOwo+Pj4gICAgQU1l ZGlhRm9ybWF0X3NldEludDMyKGZvcm1hdCwgImFzcGVjdC1oZWlnaHQiLCBzYXIuZGVuKTsKPj4+ IAo+PiAKPj4gWW91IG1lYW4gc2FyLXdpZHRoL3Nhci1oZWlnaHQ/Cj4+IAo+PiBFWFBPUlQgY29u c3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9TQVJfSEVJR0hUID0gInNhci1oZWlnaHQiOwo+PiBF WFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9TQVJfV0lEVEggPSAic2FyLXdpZHRo IjsKPj4gCj4+IFRoZXkgYXJlIGF2YWlsYWJsZSBpbiBOREsgc2luY2UgQVBJIGxldmVsIDI5IChB bmRyb2lkIDEwKQo+PiAKPj4gZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfU0FS X0hFSUdIVCBfX0lOVFJPRFVDRURfSU4oMjkpOwo+PiBleHRlcm4gY29uc3QgY2hhciogQU1FRElB Rk9STUFUX0tFWV9TQVJfV0lEVEggX19JTlRST0RVQ0VEX0lOKDI5KTsKPj4gCj4+IEFuZCB0aGV5 IHdlcmUgYWRkZWQgdG8gSmF2YSBNZWRpYUZvcm1hdCBzaW5jZSBBUEkgbGV2ZWwgMzAuCj4+IAo+ PiAKPj4gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvbWVk aWEvTWVkaWFGb3JtYXQjS0VZX1BJWEVMX0FTUEVDVF9SQVRJT19XSURUSAo+PiAKPj4gSXTigJlz IHVuY29tbW9uIGZvciBKYXZhIEFQSSBnb3QgYSBmZWF0dXJlIGxhdGUgdGhhbiBOREsuIEkgd2ls bCBrZWVwCj4+IGEgbm90ZSBhbmQgZG8gbW9yZSB0ZXN0IGJlZm9yZSBzZXR0aW5nIHRoZW0uCj4+ IAo+Pj4gCj4+PiArCj4+PiArICAgIGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBBVl9QSVhfRk1UX01F RElBQ09ERUMpIHsKPj4+ICsgICAgICAgIEFWTWVkaWFDb2RlY0NvbnRleHQgKnVzZXJfY3R4ID0g YXZjdHgtPmh3YWNjZWxfY29udGV4dDsKPj4+ICsgICAgICAgIGlmIChhdmN0eC0+aHdfZGV2aWNl X2N0eCkgewo+Pj4gKyAgICAgICAgICAgIEFWSFdEZXZpY2VDb250ZXh0ICpkZXZpY2VfY3R4ID0K Pj4gKEFWSFdEZXZpY2VDb250ZXh0KikoYXZjdHgtPmh3X2RldmljZV9jdHgtPmRhdGEpOwo+Pj4g KyAgICAgICAgICAgIEFWTWVkaWFDb2RlY0RldmljZUNvbnRleHQgKmRldl9jdHg7Cj4+PiArCj4+ PiArICAgICAgICAgICAgaWYgKGRldmljZV9jdHgtPnR5cGUgIT0gQVZfSFdERVZJQ0VfVFlQRV9N RURJQUNPREVDIHx8Cj4+ICFkZXZpY2VfY3R4LT5od2N0eCkgewo+Pj4gKyAgICAgICAgICAgICAg ICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+PiArICAgICAgICAgICAgICAgIGdvdG8gYmFpbG91 dDsKPj4+ICsgICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgZGV2X2N0eCA9IGRldmljZV9j dHgtPmh3Y3R4Owo+Pj4gKyAgICAgICAgICAgIHMtPndpbmRvdyA9IGZmX21lZGlhY29kZWNfc3Vy ZmFjZV9yZWYoZGV2X2N0eC0+c3VyZmFjZSwKPj4gZGV2X2N0eC0+bmF0aXZlX3dpbmRvdywgYXZj dHgpOwo+Pj4gKyAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgaWYgKCFzLT53aW5kb3cgJiYg dXNlcl9jdHggJiYgdXNlcl9jdHgtPnN1cmZhY2UpCj4+PiArICAgICAgICAgICAgcy0+d2luZG93 ID0gZmZfbWVkaWFjb2RlY19zdXJmYWNlX3JlZih1c2VyX2N0eC0+c3VyZmFjZSwKPj4gTlVMTCwg YXZjdHgpOwo+Pj4gKwo+Pj4gKyAgICAgICAgaWYgKCFzLT53aW5kb3cpIHsKPj4+ICsgICAgICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+PiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJNaXNzaW5nIGh3X2RldmljZV9jdHggb3IKPj4gaHdhY2NlbF9jb250 ZXh0IGZvciBBVl9QSVhfRk1UX01FRElBQ09ERUNcbiIpOwo+Pj4gKyAgICAgICAgICAgIGdvdG8g YmFpbG91dDsKPj4+ICsgICAgICAgIH0KPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGNvbG9yX2Zvcm1hdHMpOyBpKyspIHsKPj4+ICsg ICAgICAgIGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBjb2xvcl9mb3JtYXRzW2ldLnBpeF9mbXQpIHsK Pj4+ICsgICAgICAgICAgICBmZl9BTWVkaWFGb3JtYXRfc2V0SW50MzIoZm9ybWF0LCAiY29sb3It Zm9ybWF0IiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Jf Zm9ybWF0c1tpXS5jb2xvcl9mb3JtYXQpOwo+Pj4gKyAgICAgICAgICAgIGJyZWFrOwo+Pj4gCj4+ PiBkbyB3ZSBuZWVkIGVycm9yL2ZhbGxiYWNrIGlmIG5vIG1hdGNoIGlzIGZvdW5kPwo+PiAKPj4g VGhlIHN1cHBvcnRlZCBwaXhfZm10cyBpcyBzcGVjaWZpZWQKPj4gCj4+ICAgIC5wcml2X2RhdGFf c2l6ZSAgID0gc2l6ZW9mKE1lZGlhQ29kZWNFbmNDb250ZXh0KSwgICAgICAgICAgICAgICAgICAg XAo+PiAgICAucC5waXhfZm10cyAgICAgICA9IGF2Y19waXhfZm10cywgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPj4gICAgLmluaXQgICAgICAgICAgICAgPSBtZWRpYWNvZGVj X2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IAo+PiBJdCBoYXMgYmVl biBjaGVja2VkIGluIGVuY29kZXIuYyBlbmNvZGVfcHJlaW5pdF92aWRlbygpLCBzbyBjaGVjayBp dCBhZ2Fpbgo+PiBpcwo+PiBvcHRpb25hbCBidXQgbm90IG5lY2Vzc2FyeSBpbiBteSBvcGluaW9u Lgo+PiAKPj4+IAo+Pj4gCj4+PiArICAgICAgICB9Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAg aWYgKGF2Y3R4LT5iaXRfcmF0ZSkKPj4+ICsgICAgICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQz Mihmb3JtYXQsICJiaXRyYXRlIiwgYXZjdHgtPmJpdF9yYXRlKTsKPj4+ICsgICAgLy8gZnJhbWUt cmF0ZSBhbmQgaS1mcmFtZS1pbnRlcnZhbCBhcmUgcmVxdWlyZWQgdG8gY29uZmlndXJlIGNvZGVj Cj4+PiArICAgIGlmIChhdmN0eC0+ZnJhbWVyYXRlLm51bSA+PSBhdmN0eC0+ZnJhbWVyYXRlLmRl biAmJgo+PiBhdmN0eC0+ZnJhbWVyYXRlLmRlbiA+IDApCj4+PiArICAgICAgICBzLT5mcHMgPSBh dmN0eC0+ZnJhbWVyYXRlLm51bSAvIGF2Y3R4LT5mcmFtZXJhdGUuZGVuOwo+Pj4gKyAgICBlbHNl Cj4+PiArICAgICAgICBzLT5mcHMgPSAzMDsKPj4+ICsgICAgZ29wID0gcm91bmQoYXZjdHgtPmdv cF9zaXplIC8gcy0+ZnBzKTsKPj4+ICsgICAgaWYgKGdvcCA9PSAwKQo+Pj4gKyAgICAgICAgZ29w ID0gMjsKPj4+IAo+Pj4gY2FuIHdlIHJlYWQgZ29wIGZyb20gYXZjdHg/IGluIG90aGVyIGltcGxl bWVudGF0aW9ucyBpIGhhdmUgc2VlbiBnb3AKPj4gaGFyZGNvZGVkIHRvIDEKPj4gCj4+IEkgdGhp bmsgd2Ugc2hvdWxkIHJlc3BlY3QgZ29wX3NpemUgc2V0dGluZy4KPj4gCj4+IEkgd2lsbCBhZGQg c29tZSBsb2cgbWVzc2FnZSBhbmQgY2hhbmdlIGRlZmF1bHQgZ29wIHRvIDEgaW4gcGF0Y2ggdjIu Cj4+IAo+Pj4gCj4+PiBmb3IgZnBzIHZhbHVlLCBjYW4gd2UgdXNlIGF2X3EyZChhdmN0eC0+ZnJh bWVyYXRlKQo+PiAKPj4gcTJkKCkgaXMgZm9yIGRvdWJsZSwgZnBzIGlzIGludGVnZXIgaGVyZS4K Pj4gCj4+PiAKPj4+IAo+Pj4gKyAgICBmZl9BTWVkaWFGb3JtYXRfc2V0SW50MzIoZm9ybWF0LCAi ZnJhbWUtcmF0ZSIsIHMtPmZwcyk7Cj4+PiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQzMihm b3JtYXQsICJpLWZyYW1lLWludGVydmFsIiwgZ29wKTsKPj4+ICsKPj4+IAo+Pj4gZm9yIEgyNjQg ZW5jb2RpbmcsIHlvdSBjYW4gcGFzcyAicHJvZmlsZSIgYW5kICJsZXZlbCIuIGZvciBleGFtcGxl Cj4+IHByb2ZpbGU9MHgwOCBmb3IgSGlnaCBhbmQgbGV2ZWw9MHg0MDAwIGZvciA1LjAKPj4+IAo+ Pj4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM4OTk5NDEyLzMzMjc5OAo+PiAKPj4gSeKA mW0gcGxhbm5pbmcgdG8gYWRkIHByb2ZpbGUvbGV2ZWwgc3VwcG9ydCBhZnRlciB0aGUgYmFzaWMg cGF0Y2ggaXMgYXBwbGllZC4KPj4gVGhlcmUgYXJlIHNvbWUgdW5yZXNvbHZlZCBpc3N1ZSBoZXJl Ogo+PiAKPj4gMS4gSSBoYXZlIGEgZGV2aWNlIHdoaWNoIGZhaWxlZCBhdCBjb25maWd1cmUoKSB3 aGVuIHByb2ZpbGUgaGFzIGJlZW4gc2V0LAo+PiBldmVuIGZvciBiYXNlbGluZS4KPj4gCj4gCj4g VGhhbmtzIGZvciBzaGFyaW5nIHRoaXMuIFRvZGF5IEkgaGFkIHRoZSBzYW1lIGV4cGVyaWVuY2Us Cj4gd2l0aCBPTVgucmsudmlkZW9fZW5jb2Rlci5hdmMgdHJ5aW5nIHRvIHBhc3MgcHJvZmlsZS9s ZXZlbC4KPiAKPiBJIHNlZSB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgaW4gbG9nY2F0LiBEaWQgeW91 IHNlZSB0aGUgc2FtZSBiZWhhdmlvcj8KPiAKPiAxMS0yMCAyMTo1NToxNi4xMzIgIDUwODYgIDUw OTggVyBBQ29kZWMgIDogW09NWC5yay52aWRlb19lbmNvZGVyLmF2Y10KPiBzdG9wcGluZyBjaGVj a2luZyBwcm9maWxlcyBhZnRlciAzMjogOC8xCj4gMTEtMjAgMjE6NTU6MTYuMTMyICA1MDg2ICA1 MDk4IEUgQUNvZGVjICA6IFtPTVgucmsudmlkZW9fZW5jb2Rlci5hdmNdCj4gY29uZmlndXJlQ29k ZWMgcmV0dXJuaW5nIGVycm9yIC0xMDEwCgpJdOKAmXMgYSBkZXZpY2Ugd2l0aCBTbmFwRHJhZ29u IDg0NS4KClN1Y2Nlc3Mgd2l0aG91dCBzZXR0aW5nIHByb2ZpbGU6CgogSS9FeHRlbmRlZEFDb2Rl Yzogc2V0dXBWaWRlb0VuY29kZXIoKQogVy9PTVhVdGlsczogZG8gbm90IGtub3cgY29sb3IgZm9y bWF0IDB4N2ZhMzBjMDYgPSAyMTQxMzkxODc4CiBXL09NWFV0aWxzOiBkbyBub3Qga25vdyBjb2xv ciBmb3JtYXQgMHg3ZmEzMGMwNCA9IDIxNDEzOTE4NzYKIFcvT01YVXRpbHM6IGRvIG5vdCBrbm93 IGNvbG9yIGZvcm1hdCAweDdmYTMwYzAwID0gMjE0MTM5MTg3MgogVy9PTVhVdGlsczogZG8gbm90 IGtub3cgY29sb3IgZm9ybWF0IDB4N2ZhMzBjMDkgPSAyMTQxMzkxODgxCiBXL09NWFV0aWxzOiBk byBub3Qga25vdyBjb2xvciBmb3JtYXQgMHg3ZmEzMGMwYSA9IDIxNDEzOTE4ODIKIFcvT01YVXRp bHM6IGRvIG5vdCBrbm93IGNvbG9yIGZvcm1hdCAweDdmYTMwYzA4ID0gMjE0MTM5MTg4MAogVy9P TVhVdGlsczogZG8gbm90IGtub3cgY29sb3IgZm9ybWF0IDB4N2ZhMzBjMDcgPSAyMTQxMzkxODc5 CiBXL09NWFV0aWxzOiBkbyBub3Qga25vdyBjb2xvciBmb3JtYXQgMHg3ZjAwMDc4OSA9IDIxMzA3 MDgzNjEKIEkvQUNvZGVjOiBzZXR1cEFWQ0VuY29kZXJQYXJhbWV0ZXJzIHdpdGggW3Byb2ZpbGU6 IEhpZ2hdIFtsZXZlbDogTGV2ZWwxXQogSS9BQ29kZWM6IFtPTVgucWNvbS52aWRlby5lbmNvZGVy LmF2Y10gY2Fubm90IGVuY29kZSBIRFIgc3RhdGljIG1ldGFkYXRhLiBJZ25vcmluZy4KIEkvQUNv ZGVjOiBzZXR1cFZpZGVvRW5jb2RlciBzdWNjZWVkZWQKCkZhaWxlZCB3aGVuIHBhc3MgcHJvZmls ZSAobm8gbWF0dGVyIHdoaWNoIHByb2ZpbGUpCgogSS9FeHRlbmRlZEFDb2RlYzogc2V0dXBWaWRl b0VuY29kZXIoKQogVy9PTVhVdGlsczogZG8gbm90IGtub3cgY29sb3IgZm9ybWF0IDB4N2ZhMzBj MDYgPSAyMTQxMzkxODc4CiBXL09NWFV0aWxzOiBkbyBub3Qga25vdyBjb2xvciBmb3JtYXQgMHg3 ZmEzMGMwNCA9IDIxNDEzOTE4NzYKIFcvT01YVXRpbHM6IGRvIG5vdCBrbm93IGNvbG9yIGZvcm1h dCAweDdmYTMwYzAwID0gMjE0MTM5MTg3MgogVy9PTVhVdGlsczogZG8gbm90IGtub3cgY29sb3Ig Zm9ybWF0IDB4N2ZhMzBjMDkgPSAyMTQxMzkxODgxCiBXL09NWFV0aWxzOiBkbyBub3Qga25vdyBj b2xvciBmb3JtYXQgMHg3ZmEzMGMwYSA9IDIxNDEzOTE4ODIKIFcvT01YVXRpbHM6IGRvIG5vdCBr bm93IGNvbG9yIGZvcm1hdCAweDdmYTMwYzA4ID0gMjE0MTM5MTg4MAogVy9PTVhVdGlsczogZG8g bm90IGtub3cgY29sb3IgZm9ybWF0IDB4N2ZhMzBjMDcgPSAyMTQxMzkxODc5CiBXL09NWFV0aWxz OiBkbyBub3Qga25vdyBjb2xvciBmb3JtYXQgMHg3ZjAwMDc4OSA9IDIxMzA3MDgzNjEKIEUvRXh0 ZW5kZWRBQ29kZWM6IFtPTVgucWNvbS52aWRlby5lbmNvZGVyLmF2Y10gY29uZmlndXJlQ29kZWMg cmV0dXJuaW5nIGVycm9yIC0zOAogRS9BQ29kZWM6IHNpZ25hbEVycm9yKG9teEVycm9yIDB4ODAw MDEwMDEsIGludGVybmFsRXJyb3IgLTIxNDc0ODM2NDgpCiBFL0FDb2RlYzogW09NWC5xY29tLnZp ZGVvLmVuY29kZXIuYXZjXSBjb25maWd1cmVDb2RlYyByZXR1cm5pbmcgZXJyb3IgLTM4CiBFL0FD b2RlYzogc2lnbmFsRXJyb3Iob214RXJyb3IgMHg4MDAwMTAwMSwgaW50ZXJuYWxFcnJvciAtMjE0 NzQ4MzY0OCkKIEUvTWVkaWFDb2RlYzogQ29kZWMgcmVwb3J0ZWQgZXJyIDB4ODAwMDEwMDEsIGFj dGlvbkNvZGUgMCwgd2hpbGUgaW4gc3RhdGUgMwogRS9NZWRpYUNvZGVjOiBDb2RlYyByZXBvcnRl ZCBlcnIgMHg4MDAwMTAwMSwgYWN0aW9uQ29kZSAwLCB3aGlsZSBpbiBzdGF0ZSAwCiBFL01lZGlh Q29kZWM6IGNvbmZpZ3VyZSBmYWlsZWQgd2l0aCBlcnIgMHg4MDAwMTAwMSwgcmVzZXR0aW5n4oCm CgpUaGUgZGV2aWNlIGlzbuKAmXQgUGl4ZWwgMy4gUGl4ZWwgMyBoYXMgdGhlIGFsbW9zdCB0aGUg c2FtZSBTT0MgYnV0IGdvdApubyBwcm9ibGVtLgoKCj4gCj4gCj4+IAo+PiAyLiBEVFMgaXMgbWlz c2luZyBpbiBNZWRpYUNvZGVjIEFQSS4gRm9yIHRoZSBkZWZhdWx0IGJhc2VsaW5lIHByb2ZpbGUs Cj4+IHRoZXJlCj4+IGlzIG5vIHByb2JsZW0uIFRyb3VibGUgY29tZXMgd2hlbiB3ZSBzZXQgcHJv ZmlsZSB0byBtYWlubGluZSBvciBoaWdoLiBJZgo+PiBTdXJmYWNlL0FOYXRpdmVXaW5kb3cgaXMg dXNlZCwgYW5kIHRoZSBmcmFtZXMgY29tZSBmcm9tIG91ciBNZWRpYUNvZGVjCj4+IGRlY29kZXIK Pj4gd3JhcHBlciwgd2UgY2FuIGNvbnRyb2wgaXTigJlzICdyZW5kZXInIChzZW5kIHRvIGVuY29k ZXIncyBzdXJmYWNlKSB2aWEKPj4gYXZfbWVkaWFjb2RlY19yZWxlYXNlX2J1ZmZlcigpLiBBIERU UyBnZW5lcmF0aW9uIHN0cmF0ZWd5IHdvcmtzIGluIHRoaXMKPj4gY2FzZS4KPj4gSG93ZXZlciwg aWYgZnJhbWVzIGNvbWVzIGZyb20gb3RoZXIgc291cmNlcywgbGlrZSBhIGNhbWVyYSwgdGhlcmUg aXMgbm8gd2F5Cj4+IHRvIGNvbnRyb2wgdGhlICdyZW5kZXInIHlldCwgc28gRFRTIGlzIG1pc3Np bmcgaW4gdGhpcyBjYXNlLgo+PiAKPj4gQ29uZmlndXJlIHByb2ZpbGUvbGV2ZWwgYW5kIEIgZnJh bWVzIHNob3VsZCBjb21lIHRvZ2V0aGVyLgo+PiAKPj4+IAo+Pj4gCj4+PiArCj4+PiArICAgIHJl dCA9IGZmX0FNZWRpYUNvZGVjX2dldENvbmZpZ3VyZUZsYWdFbmNvZGUocy0+Y29kZWMpOwo+Pj4g KyAgICByZXQgPSBmZl9BTWVkaWFDb2RlY19jb25maWd1cmUocy0+Y29kZWMsIGZvcm1hdCwgcy0+ d2luZG93LCBOVUxMLAo+PiByZXQpOwo+Pj4gKyAgICBpZiAocmV0KSB7Cj4+PiArICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1lZGlhQ29kZWMgY29uZmlndXJlIGZhaWxlZCwK Pj4gJXNcbiIsIGF2X2VycjJzdHIocmV0KSk7Cj4+PiArICAgICAgICBnb3RvIGJhaWxvdXQ7Cj4+ PiArICAgIH0KPj4+ICsKPj4+ICsgICAgcmV0ID0gZmZfQU1lZGlhQ29kZWNfc3RhcnQocy0+Y29k ZWMpOwo+Pj4gKyAgICBpZiAocmV0KSB7Cj4+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIk1lZGlhQ29kZWMgZmFpbGVkIHRvIHN0YXJ0LCAlc1xuIiwKPj4gYXZfZXJyMnN0 cihyZXQpKTsKPj4+ICsgICAgICAgIGdvdG8gYmFpbG91dDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4g KyAgICBtZWRpYWNvZGVjX291dHB1dF9mb3JtYXQoYXZjdHgpOwo+Pj4gKwo+Pj4gKyAgICBzLT5m cmFtZSA9IGF2X2ZyYW1lX2FsbG9jKCk7Cj4+PiArICAgIGlmICghcy0+ZnJhbWUpCj4+PiArICAg ICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4+PiArCj4+PiArYmFpbG91dDoKPj4+ICsgICAg aWYgKGZvcm1hdCkKPj4+ICsgICAgICAgIGZmX0FNZWRpYUZvcm1hdF9kZWxldGUoZm9ybWF0KTsK Pj4+ICsgICAgcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBtZWRpYWNv ZGVjX3JlY2VpdmUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBVlBhY2tldCAqcGt0LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKmdvdF9wYWNrZXQpCj4+PiArewo+Pj4gKyAgICBNZWRpYUNvZGVjRW5jQ29u dGV4dCAqcyA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4+PiArICAgIEZGQU1lZGlhQ29kZWMgKmNvZGVj ID0gcy0+Y29kZWM7Cj4+PiArICAgIEZGQU1lZGlhQ29kZWNCdWZmZXJJbmZvIG91dF9pbmZvID0g ezB9Owo+Pj4gKyAgICB1aW50OF90ICpvdXRfYnVmOwo+Pj4gKyAgICBzaXplX3Qgb3V0X3NpemUg PSAwOwo+Pj4gKyAgICBpbnQgcmV0Owo+Pj4gKyAgICBpbnQgZXh0cmFkYXRhX3NpemUgPSAwOwo+ Pj4gKyAgICBpbnQ2NF90IHRpbWVvdXRfdXMgPSBzLT5lb2Zfc2VudCA/IE9VVFBVVF9ERVFVRVVF X1RJTUVPVVRfVVMgOiAwOwo+Pj4gKyAgICBzc2l6ZV90IGluZGV4ID0gZmZfQU1lZGlhQ29kZWNf ZGVxdWV1ZU91dHB1dEJ1ZmZlcihjb2RlYywKPj4gJm91dF9pbmZvLCB0aW1lb3V0X3VzKTsKPj4+ ICsKPj4+ICsgICAgaWYgKGZmX0FNZWRpYUNvZGVjX2luZm9UcnlBZ2FpbkxhdGVyKGNvZGVjLCBp bmRleCkpCj4+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFQUdBSU4pOwo+Pj4gKwo+Pj4gKyAg ICBpZiAoZmZfQU1lZGlhQ29kZWNfaW5mb091dHB1dEZvcm1hdENoYW5nZWQoY29kZWMsIGluZGV4 KSkgewo+Pj4gKyAgICAgICAgbWVkaWFjb2RlY19vdXRwdXRfZm9ybWF0KGF2Y3R4KTsKPj4+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SKEVBR0FJTik7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAg aWYgKGZmX0FNZWRpYUNvZGVjX2luZm9PdXRwdXRCdWZmZXJzQ2hhbmdlZChjb2RlYywgaW5kZXgp KSB7Cj4+PiArICAgICAgICBmZl9BTWVkaWFDb2RlY19jbGVhbk91dHB1dEJ1ZmZlcnMoY29kZWMp Owo+Pj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFHQUlOKTsKPj4+ICsgICAgfQo+Pj4gKwo+ Pj4gKyAgICBpZiAoaW5kZXggPCAwKQo+Pj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJO QUw7Cj4+PiArCj4+PiArICAgIGlmIChvdXRfaW5mby5mbGFncyAmIGZmX0FNZWRpYUNvZGVjX2dl dEJ1ZmZlckZsYWdFbmRPZlN0cmVhbShjb2RlYykpCj4+PiArICAgICAgICByZXR1cm4gQVZFUlJP Ul9FT0Y7Cj4+PiArCj4+PiArICAgIG91dF9idWYgPSBmZl9BTWVkaWFDb2RlY19nZXRPdXRwdXRC dWZmZXIoY29kZWMsIGluZGV4LCAmb3V0X3NpemUpOwo+Pj4gKyAgICBpZiAoIW91dF9idWYpIHsK Pj4+ICsgICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7Cj4+PiArICAgICAgICBnb3RvIGJh aWxvdXQ7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgaWYgKG91dF9pbmZvLmZsYWdzICYKPj4g ZmZfQU1lZGlhQ29kZWNfZ2V0QnVmZmVyRmxhZ0NvZGVjQ29uZmlnKGNvZGVjKSkgewo+Pj4gKyAg ICAgICAgcmV0ID0gYXZfcmVhbGxvY3AoJnMtPmV4dHJhZGF0YSwgb3V0X2luZm8uc2l6ZSk7Cj4+ PiArICAgICAgICBpZiAocmV0KQo+Pj4gKyAgICAgICAgICAgIGdvdG8gYmFpbG91dDsKPj4+ICsK Pj4+ICsgICAgICAgIHMtPmV4dHJhZGF0YV9zaXplID0gb3V0X2luZm8uc2l6ZTsKPj4+ICsgICAg ICAgIG1lbWNweShzLT5leHRyYWRhdGEsIG91dF9idWYgKyBvdXRfaW5mby5vZmZzZXQsIG91dF9p bmZvLnNpemUpOwo+Pj4gKyAgICAgICAgZmZfQU1lZGlhQ29kZWNfcmVsZWFzZU91dHB1dEJ1ZmZl cihjb2RlYywgaW5kZXgsIGZhbHNlKTsKPj4+ICsgICAgICAgIC8vIHRyeSBpbW1lZGlhdGVseQo+ Pj4gKyAgICAgICAgcmV0dXJuIG1lZGlhY29kZWNfcmVjZWl2ZShhdmN0eCwgcGt0LCBnb3RfcGFj a2V0KTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICByZXQgPSBmZl9nZXRfZW5jb2RlX2J1ZmZl cihhdmN0eCwgcGt0LCBvdXRfaW5mby5zaXplICsKPj4gcy0+ZXh0cmFkYXRhX3NpemUsIDApOwo+ Pj4gKyAgICBpZiAocmV0IDwgMCkKPj4+ICsgICAgICBnb3RvIGJhaWxvdXQ7Cj4+PiArCj4+PiAr ICAgIGlmIChzLT5leHRyYWRhdGFfc2l6ZSkgewo+Pj4gKyAgICAgICAgZXh0cmFkYXRhX3NpemUg PSBzLT5leHRyYWRhdGFfc2l6ZTsKPj4+ICsgICAgICAgIHMtPmV4dHJhZGF0YV9zaXplID0gMDsK Pj4+ICsgICAgICAgIG1lbWNweShwa3QtPmRhdGEsIHMtPmV4dHJhZGF0YSwgZXh0cmFkYXRhX3Np emUpOwo+Pj4gKyAgICB9Cj4+PiArICAgIG1lbWNweShwa3QtPmRhdGEgKyBleHRyYWRhdGFfc2l6 ZSwgb3V0X2J1ZiArIG91dF9pbmZvLm9mZnNldCwKPj4gb3V0X2luZm8uc2l6ZSk7Cj4+PiArICAg IHBrdC0+cHRzID0gYXZfcmVzY2FsZV9xKG91dF9pbmZvLnByZXNlbnRhdGlvblRpbWVVcywKPj4g QVZfVElNRV9CQVNFX1EsIGF2Y3R4LT50aW1lX2Jhc2UpOwo+Pj4gKyAgICBpZiAocy0+dHNfdGFp bCAhPSBzLT50c19oZWFkKSB7Cj4+PiArICAgICAgICBwa3QtPmR0cyA9IHMtPnRpbWVzdGFtcHNb cy0+dHNfdGFpbF07Cj4+PiArICAgICAgICBzLT50c190YWlsID0gKHMtPnRzX3RhaWwgKyAxKSAl IEZGX0FSUkFZX0VMRU1TKHMtPnRpbWVzdGFtcHMpOwo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAg IGlmIChvdXRfaW5mby5mbGFncyAmIGZmX0FNZWRpYUNvZGVjX2dldEJ1ZmZlckZsYWdLZXlGcmFt ZShjb2RlYykpCj4+PiArICAgICAgICBwa3QtPmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsKPj4+ ICsgICAgcmV0ID0gMDsKPj4+ICsgICAgKmdvdF9wYWNrZXQgPSAxOwo+Pj4gKwo+Pj4gKyAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19UUkFDRSwgInJlY2VpdmUgcGFja2V0IHB0cyAlIiBQUklkNjQg IiBkdHMgJSIKPj4gUFJJZDY0Cj4+PiArICAgICAgICAgICAiIGZsYWdzICVkIGV4dHJhZGF0YSAl ZFxuIiwKPj4+ICsgICAgICAgICAgIHBrdC0+cHRzLCBwa3QtPmR0cywgcGt0LT5mbGFncywgZXh0 cmFkYXRhX3NpemUpOwo+Pj4gKwo+Pj4gK2JhaWxvdXQ6Cj4+PiArICAgIGZmX0FNZWRpYUNvZGVj X3JlbGVhc2VPdXRwdXRCdWZmZXIoY29kZWMsIGluZGV4LCBmYWxzZSk7Cj4+PiArICAgIHJldHVy biByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGNvcHlfZnJhbWVfdG9fYnVmZmVy KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgY29uc3QgQVZGcmFtZQo+PiAqZnJhbWUsIHVpbnQ4X3Qg KmRzdCwgc2l6ZV90IHNpemUpCj4+PiArewo+Pj4gKyAgICBNZWRpYUNvZGVjRW5jQ29udGV4dCAq cyA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4+PiArICAgIHVpbnQ4X3QgKmRzdF9kYXRhWzRdID0ge307 Cj4+PiArICAgIGludCBkc3RfbGluZXNpemVbNF0gPSB7fTsKPj4+ICsgICAgY29uc3QgdWludDhf dCAqc3JjX2RhdGFbNF0gPSB7Cj4+PiArICAgICAgICAgICAgZnJhbWUtPmRhdGFbMF0sIGZyYW1l LT5kYXRhWzFdLCBmcmFtZS0+ZGF0YVsyXSwKPj4gZnJhbWUtPmRhdGFbM10KPj4+ICsgICAgfTsK Pj4+ICsKPj4+ICsgICAgaWYgKGF2Y3R4LT5waXhfZm10ID09IEFWX1BJWF9GTVRfWVVWNDIwUCkg ewo+Pj4gKyAgICAgICAgZHN0X2RhdGFbMF0gPSBkc3Q7Cj4+PiArICAgICAgICBkc3RfZGF0YVsx XSA9IGRzdCArIHMtPndpZHRoICogcy0+aGVpZ2h0Owo+Pj4gKyAgICAgICAgZHN0X2RhdGFbMl0g PSBkc3RfZGF0YVsxXSArIHMtPndpZHRoICogcy0+aGVpZ2h0IC8gNDsKPj4+ICsKPj4+ICsgICAg ICAgIGRzdF9saW5lc2l6ZVswXSA9IHMtPndpZHRoOwo+Pj4gKyAgICAgICAgZHN0X2xpbmVzaXpl WzFdID0gZHN0X2xpbmVzaXplWzJdID0gcy0+d2lkdGggLyAyOwo+Pj4gKyAgICB9IGVsc2UgaWYg KGF2Y3R4LT5waXhfZm10ID09IEFWX1BJWF9GTVRfTlYxMikgewo+Pj4gKyAgICAgICAgZHN0X2Rh dGFbMF0gPSBkc3Q7Cj4+PiArICAgICAgICBkc3RfZGF0YVsxXSA9IGRzdCArIHMtPndpZHRoICog cy0+aGVpZ2h0Owo+Pj4gKwo+Pj4gKyAgICAgICAgZHN0X2xpbmVzaXplWzBdID0gcy0+d2lkdGg7 Cj4+PiArICAgICAgICBkc3RfbGluZXNpemVbMV0gPSBzLT53aWR0aDsKPj4+ICsgICAgfSBlbHNl IHsKPj4+ICsgICAgICAgIGF2X2Fzc2VydDAoMCk7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAg YXZfaW1hZ2VfY29weShkc3RfZGF0YSwgZHN0X2xpbmVzaXplLCBzcmNfZGF0YSwgZnJhbWUtPmxp bmVzaXplLAo+Pj4gKyAgICAgICAgICAgICAgICAgIGF2Y3R4LT5waXhfZm10LCBhdmN0eC0+d2lk dGgsIGF2Y3R4LT5oZWlnaHQpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IG1lZGlhY29k ZWNfc2VuZChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQVZGcmFtZSAqZnJhbWUpIHsKPj4+ICsgICAgTWVkaWFDb2RlY0VuY0NvbnRl eHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+Pj4gKyAgICBGRkFNZWRpYUNvZGVjICpjb2RlYyA9 IHMtPmNvZGVjOwo+Pj4gKyAgICBzc2l6ZV90IGluZGV4Owo+Pj4gKyAgICB1aW50OF90ICppbnB1 dF9idWYgPSBOVUxMOwo+Pj4gKyAgICBzaXplX3QgaW5wdXRfc2l6ZSA9IDA7Cj4+PiArICAgIGlu dDY0X3QgcHRzID0gMDsKPj4+ICsgICAgdWludDMyX3QgZmxhZ3MgPSAwOwo+Pj4gKyAgICBpbnQ2 NF90IHRpbWVvdXRfdXM7Cj4+PiArCj4+PiArICAgIGlmIChzLT5lb2Zfc2VudCkKPj4+ICsgICAg ICAgIHJldHVybiAwOwo+Pj4gKwo+Pj4gKyAgICBpZiAocy0+d2luZG93KSB7Cj4+PiArICAgICAg ICBpZiAoIWZyYW1lKSB7Cj4+PiArICAgICAgICAgICAgcy0+ZW9mX3NlbnQgPSAxOwo+Pj4gKyAg ICAgICAgICAgIHJldHVybiBmZl9BTWVkaWFDb2RlY19zaWduYWxFbmRPZklucHV0U3RyZWFtKGNv ZGVjKTsKPj4+ICsgICAgICAgIH0KPj4+ICsKPj4+ICsKPj4+ICsgICAgICAgIGlmIChmcmFtZS0+ ZGF0YVszXSkgewo+Pj4gKyAgICAgICAgICAgIHB0cyA9IGF2X3Jlc2NhbGVfcShmcmFtZS0+cHRz LCBhdmN0eC0+dGltZV9iYXNlLAo+PiBBVl9USU1FX0JBU0VfUSk7Cj4+PiArICAgICAgICAgICAg cy0+dGltZXN0YW1wc1tzLT50c19oZWFkXSA9IGZyYW1lLT5wdHM7Cj4+PiArICAgICAgICAgICAg cy0+dHNfaGVhZCA9IChzLT50c19oZWFkICsgMSkgJQo+PiBGRl9BUlJBWV9FTEVNUyhzLT50aW1l c3RhbXBzKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICBhdl9tZWRpYWNvZGVjX3JlbGVhc2VfYnVm ZmVyKChBVk1lZGlhQ29kZWNCdWZmZXIKPj4gKilmcmFtZS0+ZGF0YVszXSwgMSk7Cj4+PiArICAg ICAgICB9Cj4+PiArICAgICAgICByZXR1cm4gMDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICB0 aW1lb3V0X3VzID0gSU5QVVRfREVRVUVVRV9USU1FT1VUX1VTOwo+Pj4gKyAgICBpbmRleCA9IGZm X0FNZWRpYUNvZGVjX2RlcXVldWVJbnB1dEJ1ZmZlcihjb2RlYywgdGltZW91dF91cyk7Cj4+PiAr ICAgIGlmIChmZl9BTWVkaWFDb2RlY19pbmZvVHJ5QWdhaW5MYXRlcihjb2RlYywgaW5kZXgpKQo+ Pj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFHQUlOKTsKPj4+ICsKPj4+ICsgICAgaWYgKGlu ZGV4IDwgMCkgewo+Pj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJkZXF1 ZXVlIGlucHV0IGJ1ZmZlciBmYWlsZWQsICV6ZCIsCj4+IGluZGV4KTsKPj4+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIGlmIChmcmFt ZSkgewo+Pj4gKyAgICAgICAgaW5wdXRfYnVmID0gZmZfQU1lZGlhQ29kZWNfZ2V0SW5wdXRCdWZm ZXIoY29kZWMsIGluZGV4LAo+PiAmaW5wdXRfc2l6ZSk7Cj4+PiArICAgICAgICBjb3B5X2ZyYW1l X3RvX2J1ZmZlcihhdmN0eCwgZnJhbWUsIGlucHV0X2J1ZiwgaW5wdXRfc2l6ZSk7Cj4+PiArCj4+ PiArICAgICAgICBwdHMgPSBhdl9yZXNjYWxlX3EoZnJhbWUtPnB0cywgYXZjdHgtPnRpbWVfYmFz ZSwKPj4gQVZfVElNRV9CQVNFX1EpOwo+Pj4gKwo+Pj4gKyAgICAgICAgcy0+dGltZXN0YW1wc1tz LT50c19oZWFkXSA9IGZyYW1lLT5wdHM7Cj4+PiArICAgICAgICBzLT50c19oZWFkID0gKHMtPnRz X2hlYWQgKyAxKSAlIEZGX0FSUkFZX0VMRU1TKHMtPnRpbWVzdGFtcHMpOwo+Pj4gKyAgICB9IGVs c2Ugewo+Pj4gKyAgICAgICAgZmxhZ3MgfD0gZmZfQU1lZGlhQ29kZWNfZ2V0QnVmZmVyRmxhZ0Vu ZE9mU3RyZWFtKGNvZGVjKTsKPj4+ICsgICAgICAgIHMtPmVvZl9zZW50ID0gMTsKPj4+ICsgICAg fQo+Pj4gKwo+Pj4gCj4+PiBpdCB3b3VsZCBiZSBuaWNlIHRvIHByb3BhZ2F0ZSBrZXlmcmFtZXMg aGVyZSAoZnJhbWUtPnBpY3RfdHlwZSA9PQo+PiBBVl9QSUNUVVJFX1RZUEVfSSkuIGl0IGlzIG9u bHkgcG9zc2libGUgb24gQVBJMjYgd2l0aAo+PiBBTWVkaWFDb2RlY19zZXRQYXJhbWV0ZXJzIGFu ZCBQQVJBTUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFNRQo+PiAKPj4gSXTigJlzIGEgbmljZSBm ZWF0dXJlLiBJ4oCZbSBwbGFubmluZyB0byBhZGQgc3VwcG9ydCBhZnRlciB0aGUgYmFzaWMgZnVu Y3Rpb24KPj4gaXMgd29ya2luZy4KPj4gCj4+PiAKPj4+IAo+Pj4gKyAgICBmZl9BTWVkaWFDb2Rl Y19xdWV1ZUlucHV0QnVmZmVyKGNvZGVjLCBpbmRleCwgMCwgaW5wdXRfc2l6ZSwgcHRzLAo+PiBm bGFncyk7Cj4+PiArICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IG1l ZGlhY29kZWNfZW5jb2RlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKnBrdCkKPj4+ ICt7Cj4+PiArICAgIE1lZGlhQ29kZWNFbmNDb250ZXh0ICpzID0gYXZjdHgtPnByaXZfZGF0YTsK Pj4+ICsgICAgaW50IHJldDsKPj4+ICsgICAgaW50IGdvdF9wYWNrZXQgPSAwOwo+Pj4gKwo+Pj4g KyAgICAvLyBSZXR1cm4gb24gdGhyZWUgY2FzZToKPj4+ICsgICAgLy8gMS4gU2VyaW91cyBlcnJv cgo+Pj4gKyAgICAvLyAyLiBHb3QgYSBwYWNrZXQgc3VjY2Vzcwo+Pj4gKyAgICAvLyAzLiBObyBB VkZyYW1lIGlzIGF2YWlsYWJsZSB5ZXQgKGRvbid0IHJldHVybiBpZiBnZXRfZnJhbWUgcmV0dXJu Cj4+IEVPRikKPj4+ICsgICAgd2hpbGUgKDEpIHsKPj4+ICsgICAgICAgIHJldCA9IG1lZGlhY29k ZWNfcmVjZWl2ZShhdmN0eCwgcGt0LCAmZ290X3BhY2tldCk7Cj4+PiArICAgICAgICBpZiAoIXJl dCkKPj4+ICsgICAgICAgICAgICByZXR1cm4gMDsKPj4+ICsgICAgICAgIGVsc2UgaWYgKHJldCAh PSBBVkVSUk9SKEVBR0FJTikpCj4+PiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+ICsKPj4+ ICsgICAgICAgIGlmICghcy0+ZnJhbWUtPmJ1ZlswXSkgewo+Pj4gKyAgICAgICAgICAgIHJldCA9 IGZmX2VuY29kZV9nZXRfZnJhbWUoYXZjdHgsIHMtPmZyYW1lKTsKPj4+ICsgICAgICAgICAgICBp ZiAocmV0ICYmIHJldCAhPSBBVkVSUk9SX0VPRikKPj4+ICsgICAgICAgICAgICAgICAgcmV0dXJu IHJldDsKPj4+ICsgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgIHJldCA9IG1lZGlhY29kZWNf c2VuZChhdmN0eCwgcy0+ZnJhbWUtPmJ1ZlswXSA/IHMtPmZyYW1lIDoKPj4gTlVMTCk7Cj4+PiAr ICAgICAgICBpZiAoIXJldCkKPj4+ICsgICAgICAgICAgICBhdl9mcmFtZV91bnJlZihzLT5mcmFt ZSk7Cj4+PiArICAgICAgICBlbHNlIGlmIChyZXQgIT0gQVZFUlJPUihFQUdBSU4pKQo+Pj4gKyAg ICAgICAgICAgIHJldHVybiByZXQ7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgcmV0dXJuIDA7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBhdl9jb2xkIGludCBtZWRpYWNvZGVjX2Nsb3NlKEFW Q29kZWNDb250ZXh0ICphdmN0eCkKPj4+ICt7Cj4+PiArICAgIE1lZGlhQ29kZWNFbmNDb250ZXh0 ICpzID0gYXZjdHgtPnByaXZfZGF0YTsKPj4+ICsgICAgaWYgKHMtPmNvZGVjKSB7Cj4+PiArICAg ICAgICBmZl9BTWVkaWFDb2RlY19zdG9wKHMtPmNvZGVjKTsKPj4+ICsgICAgICAgIGZmX0FNZWRp YUNvZGVjX2RlbGV0ZShzLT5jb2RlYyk7Cj4+PiArICAgICAgICBzLT5jb2RlYyA9IE5VTEw7Cj4+ PiArICAgIH0KPj4+ICsKPj4+ICsgICAgaWYgKHMtPndpbmRvdykgewo+Pj4gKyAgICAgICAgZmZf bWVkaWFjb2RlY19zdXJmYWNlX3VucmVmKHMtPndpbmRvdywgYXZjdHgpOwo+Pj4gKyAgICAgICAg cy0+d2luZG93ID0gTlVMTDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBhdl9mcmFtZV9mcmVl KCZzLT5mcmFtZSk7Cj4+PiArCj4+PiArICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgY29uc3QgQVZDb2RlY0hXQ29uZmlnSW50ZXJuYWwgKmNvbnN0IG1lZGlhY29kZWNfaHdf Y29uZmlnc1tdID0gewo+Pj4gKyAgICAmKGNvbnN0IEFWQ29kZWNIV0NvbmZpZ0ludGVybmFsKSB7 Cj4+PiArICAgICAgICAucHVibGljICAgICAgICAgID0gewo+Pj4gKyAgICAgICAgICAgIC5waXhf Zm10ICAgICA9IEFWX1BJWF9GTVRfTUVESUFDT0RFQywKPj4+ICsgICAgICAgICAgICAubWV0aG9k cyAgICAgPSBBVl9DT0RFQ19IV19DT05GSUdfTUVUSE9EX0FEX0hPQyB8Cj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfSFdfQ09ORklHX01FVEhPRF9IV19ERVZJQ0VfQ1RY LAo+Pj4gKyAgICAgICAgICAgIC5kZXZpY2VfdHlwZSA9IEFWX0hXREVWSUNFX1RZUEVfTUVESUFD T0RFQywKPj4+ICsgICAgICAgIH0sCj4+PiArICAgICAgICAuaHdhY2NlbCAgICAgICAgID0gTlVM TCwKPj4+ICsgICAgfSwKPj4+ICsgICAgTlVMTAo+Pj4gK307Cj4+PiArCj4+PiArI2RlZmluZSBP RkZTRVQoeCkgb2Zmc2V0b2YoTWVkaWFDb2RlY0VuY0NvbnRleHQsIHgpCj4+PiArI2RlZmluZSBW RSBBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNCj4+ PiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIGNvbW1vbl9vcHRpb25zW10gPSB7Cj4+PiArICAgIHsg Im5ka19jb2RlYyIsICJVc2UgTWVkaWFDb2RlYyBmcm9tIE5ESyIsCj4+PiArICAgICAgICAgICAg ICAgICAgICBPRkZTRVQodXNlX25ka19jb2RlYyksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0ID0K Pj4gLTF9LCAtMSwgMSwgVkUgfSwKPj4+ICsgICAgeyBOVUxMIH0sCj4+PiArfTsKPj4+ICsKPj4+ ICsjZGVmaW5lIE1FRElBQ09ERUNfRU5DT0RFUl9DTEFTUyhuYW1lKSAgICAgICAgICAgICAgXAo+ Pj4gK3N0YXRpYyBjb25zdCBBVkNsYXNzIG5hbWUgIyMgX21lZGlhY29kZWNfY2xhc3MgPSB7ICBc Cj4+PiArICAgIC5jbGFzc19uYW1lID0gI25hbWUgIl9tZWRpYWNvZGVjIiwgICAgICAgICAgICAg IFwKPj4+ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwgICAgICAgICAg ICAgXAo+Pj4gKyAgICAub3B0aW9uICAgICA9IGNvbW1vbl9vcHRpb25zLCAgICAgICAgICAgICAg ICAgICBcCj4+PiArICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULCAgICAg ICAgICAgIFwKPj4+ICt9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+Pj4gKwo+Pj4gKyNkZWZpbmUgREVDTEFSRV9NRURJQUNPREVDX0VOQ09ERVIo c2hvcnRfbmFtZSwgbG9uZ19uYW1lLCBjb2RlY19pZCkKPj4gXAo+Pj4gK01FRElBQ09ERUNfRU5D T0RFUl9DTEFTUyhzaG9ydF9uYW1lKQo+PiBcCj4+PiArY29uc3QgRkZDb2RlYyBmZl8gIyMgc2hv cnRfbmFtZSAjIyBfbWVkaWFjb2RlY19lbmNvZGVyID0gewo+PiBcCj4+PiArICAgIC5wLm5hbWUg ICAgICAgICAgID0gI3Nob3J0X25hbWUgIl9tZWRpYWNvZGVjIiwKPj4gIFwKPj4+ICsgICAgQ09E RUNfTE9OR19OQU1FKGxvbmdfbmFtZSAiIEFuZHJvaWQgTWVkaWFDb2RlYyBlbmNvZGVyIiksCj4+ IFwKPj4+ICsgICAgLnAudHlwZSAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4+IFwK Pj4+ICsgICAgLnAuaWQgICAgICAgICAgICAgPSBjb2RlY19pZCwKPj4gXAo+Pj4gKyAgICAucC5j YXBhYmlsaXRpZXMgICA9IEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBfREVMQVkKPj4g XAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHwgQVZfQ09ERUNfQ0FQX0hBUkRXQVJFLAo+ PiBcCj4+PiArICAgIC5wcml2X2RhdGFfc2l6ZSAgID0gc2l6ZW9mKE1lZGlhQ29kZWNFbmNDb250 ZXh0KSwKPj4gXAo+Pj4gKyAgICAucC5waXhfZm10cyAgICAgICA9IGF2Y19waXhfZm10cywKPj4g XAo+Pj4gKyAgICAuaW5pdCAgICAgICAgICAgICA9IG1lZGlhY29kZWNfaW5pdCwKPj4gXAo+Pj4g KyAgICBGRl9DT0RFQ19SRUNFSVZFX1BBQ0tFVF9DQihtZWRpYWNvZGVjX2VuY29kZSksCj4+IFwK Pj4+ICsgICAgLmNsb3NlICAgICAgICAgICAgPSBtZWRpYWNvZGVjX2Nsb3NlLAo+PiBcCj4+PiAr ICAgIC5wLnByaXZfY2xhc3MgICAgID0gJnNob3J0X25hbWUgIyMgX21lZGlhY29kZWNfY2xhc3Ms Cj4+IFwKPj4+ICsgICAgLmNhcHNfaW50ZXJuYWwgICAgPSBGRl9DT0RFQ19DQVBfSU5JVF9DTEVB TlVQLAo+PiBcCj4+PiArICAgIC5wLndyYXBwZXJfbmFtZSA9ICJtZWRpYWNvZGVjIiwKPj4gXAo+ Pj4gKyAgICAuaHdfY29uZmlncyAgICAgPSBtZWRpYWNvZGVjX2h3X2NvbmZpZ3MsCj4+IFwKPj4+ ICt9Owo+PiBcCj4+PiArCj4+PiArI2lmIENPTkZJR19IMjY0X01FRElBQ09ERUNfRU5DT0RFUgo+ Pj4gK0RFQ0xBUkVfTUVESUFDT0RFQ19FTkNPREVSKGgyNjQsICJILjI2NCIsIEFWX0NPREVDX0lE X0gyNjQpCj4+PiArI2VuZGlmCj4+PiArCj4+PiArI2lmIENPTkZJR19IRVZDX01FRElBQ09ERUNf RU5DT0RFUgo+Pj4gK0RFQ0xBUkVfTUVESUFDT0RFQ19FTkNPREVSKGhldmMsICJILjI2NSIsIEFW X0NPREVDX0lEX0hFVkMpCj4+PiArI2VuZGlmCj4+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92 ZXJzaW9uLmggYi9saWJhdmNvZGVjL3ZlcnNpb24uaAo+Pj4gaW5kZXggNDNkMGQ5YTlmYy4uODZh YzBmMzg3MSAxMDA2NDQKPj4+IC0tLSBhL2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4+PiArKysgYi9s aWJhdmNvZGVjL3ZlcnNpb24uaAo+Pj4gQEAgLTI5LDggKzI5LDggQEAKPj4+IAo+Pj4gI2luY2x1 ZGUgInZlcnNpb25fbWFqb3IuaCIKPj4+IAo+Pj4gLSNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9O X01JTk9SICA1MQo+Pj4gLSNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JQ1JPIDEwMQo+Pj4g KyNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JTk9SICA1Mgo+Pj4gKyNkZWZpbmUgTElCQVZD T0RFQ19WRVJTSU9OX01JQ1JPIDEwMAo+Pj4gCj4+PiAjZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lP Tl9JTlQKPj4gQVZfVkVSU0lPTl9JTlQoTElCQVZDT0RFQ19WRVJTSU9OX01BSk9SLCBcCj4+PiAK Pj4gTElCQVZDT0RFQ19WRVJTSU9OX01JTk9SLCBcCj4+PiAtLQo+Pj4gMi4yNS4xCj4+PiAKPj4g Cj4+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g ZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0 cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4gCj4gVG8gdW5z dWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVsLXJlcXVl c3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxp c3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlz dGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3Ig ZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vi c2NyaWJlIi4K