From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 4BA0F4A2A0 for ; Tue, 20 May 2025 11:37:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 1553C68D6C8; Tue, 20 May 2025 14:37:54 +0300 (EEST) Received: from mail-vs1-f51.google.com (mail-vs1-f51.google.com [209.85.217.51]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 33E9968D4B8 for ; Tue, 20 May 2025 14:37:47 +0300 (EEST) Received: by mail-vs1-f51.google.com with SMTP id ada2fe7eead31-4e2534c08a5so1166896137.1 for ; Tue, 20 May 2025 04:37:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747741065; x=1748345865; darn=ffmpeg.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=oykp8BIwqELryQwsIAUx9o9ebgj0Lqx5jtQ8rvKeaLE=; b=duphimOSl4Q3XbKY7bCVV+ur0l5SloAuBmosx4EPsxinCvAulxQWfeVRv1Hs+qTAYh 0mHzoTuN814MPRjUnJg835WRvlq7NMxGdc04imaaNbgo4Bq/aADTEP7ZuVxMhKglR5al 3iNF1nVIkXZdDnNaEIBLI2MZ7j0DCgcc4Z5qTZW6j94nwKWsuDR2cLJzgzIMshZlku5R YCLO/Btcsczh+5ZbOaqooBVfDQHko7O7qZMRo1kwVo0htyog0IayfV+9o8U85OYvBPwc odsT4jrfeAS2xX7zDHUZY8doCJ6/j6z0mVOi/VnsT3okRGwIo/PYDaAmTwLZiDm3RUfb sRVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747741065; x=1748345865; h=content-transfer-encoding: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=oykp8BIwqELryQwsIAUx9o9ebgj0Lqx5jtQ8rvKeaLE=; b=iEQfaViSMxE/PucGIK14R3m5jbWsV5W29ZAgofe0MIpXvlIAH6n3hOXVJ9d9XEms7U XrsZvt/fsm7FO0JaxsrEV+kSSLHlnsVZnBKBrmhSxDxxSlDX4KsqyJ6eIVVKLYvfKLzE 06dbvuTthOQZ4m0T5EkT9VoSSP4kjCbAn7krbVD8Gboc8MStvGYAqJogwDpJF3SZvm1E XNc+ozQ27GkNtJT/ikPnOMEBn/o2tMcsTFSZr0palquNxv47l/zpUsU9ZJlYp5NV+VxF Q6tM+sMPvv0IRPZVKpX+73EmpaleqcYy6EfPgOL9bSah4zjDalt2+KuRYZKRCioZ7/E7 FSFg== X-Gm-Message-State: AOJu0YwbkebdF9h/oQziK+79HXiMAiGLsUaZoOcR+8+FEyADDK5JuSnf 8mwyY07ladIJgafaLTgycqy0BbECftlmETqkiUQSh6OvBw2jOhAsxB1H9Oy5np2I7v9vmj36X0Q FopwDxwWHo6OwgTjGClbPkgUyp+9f5x1j/5Ug X-Gm-Gg: ASbGnct/y06t9J7zLbAp+tTr0ogFqOMmyjfoNcSX8nhwALoNGmsk/WxNKNzHcP4F8nd 01AjJCpm16bD+roZZok8kfOECEn9KQnJEKlaaL186vIyM7JF0i91TY7Vmhp7+2GiDh25pd1/LqW RAv6gMrSsQzLy8onZ7APsLLC/lhH54dXi3qw== X-Google-Smtp-Source: AGHT+IGzXHp3175xF6ON1eYD9ucbwT3czbOsCEt5CXbh+kgS1UvbJVHuHCEIAAIysH2tZfhLflZg/6MA7VuhKMCZZ+U= X-Received: by 2002:a05:6102:370a:b0:4db:154f:46c2 with SMTP id ada2fe7eead31-4dfa6ab0c0fmr14318897137.1.1747741063372; Tue, 20 May 2025 04:37:43 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Steven Liu Date: Tue, 20 May 2025 19:37:31 +0800 X-Gm-Features: AX0GCFuQGCZJaBi8_J-hjEtxu1Mim5u_9t7nv8PN-f-LIYOY9BKheLR99k98NN0 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v3] avformat/whip: Add WHIP muxer support for subsecond latency streaming 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: Jun Zhao , yangrtc , Steven Liu , Jack Lau , cloudwebrtc , winlin , Haibo Chen <495810242@qq.com> 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: SmFjayBMYXUgdmlhIGZmbXBlZy1kZXZlbCA8ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmc+IOS6jjIw MjXlubQ15pyIMTfml6Xlkajlha0gMTc6MjXlhpnpgZPvvJoKPgo+IDAuIFdISVAgVmVyc2lvbiAz Lgo+IDEuIFRoZSBXSElQIG11eGVyIGhhcyBiZWVuIHJlbmFtZWQgYW5kIHJlZmluZWQsIHdpdGgg aW1wcm92ZWQgbG9nZ2luZyBjb250ZXh0IGFuZCBlcnJvciBtZXNzYWdlcyBmb3IgU1NMLCBEVExT LCBhbmQgUlRDLgo+IDIuIE1hZ2ljIG51bWJlcnMgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggbWFj cm9zIGFuZCBleHRyYWN0ZWQgdG8gZnVuY3Rpb25zLCBhbmQgbG9nIGxldmVscyBoYXZlIGJlZW4g YWx0ZXJlZCBmb3IgYmV0dGVyIGNsYXJpdHkuCj4gMy4gRFRMUyBjdXJ2ZSBsaXN0IGhhcyBiZWVu IHVwZGF0ZWQsIGFuZCBTUlRQIHByb2ZpbGUgbmFtZXMgaGF2ZSBiZWVuIHJlZmluZWQgZm9yIEZG bXBlZyBhbmQgT3BlblNTTC4KPiA0LiBJQ0UgU1RVTiBtYWdpYyBudW1iZXIgaGFzIGJlZW4gcmVm aW5lZCwgYW5kIFJUUCBwYXlsb2FkIHR5cGVzIGhhdmUgYmVlbiB1cGRhdGVkIGJhc2VkIG9uIENo cm9tZSdzIGRlZmluaXRpb24uCj4gNS4gRml4ZWQgZnJhbWUgc2l6ZSBoYXMgYmVlbiByZWZpbmVk IHRvIHJ0Yy0+YXVkaW9fcGFyLT5mcmFtZV9zaXplLCBhbmQgaDI2NF9tcDR0b2FubmV4YiBpcyBu b3cgdXNlZCB0byBjb252ZXJ0IE1QNC9JU09NIHRvIGFubmV4Yi4KPiA2LiBPUFVTIHRpbWVzdGFt cCBpc3N1ZSBoYXMgYmVlbiBhZGRyZXNzZWQsIGFuZCBtYXJrZXIgc2V0dGluZyBoYXMgYmVlbiBj b3JyZWN0ZWQgYWZ0ZXIgdXRpbGl6aW5nIEJTRi4KPiA3LiBEVExTIGhhbmRzaGFrZSBhbmQgSUNF IGhhbmRsaW5nIGhhdmUgYmVlbiBvcHRpbWl6ZWQgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLCB3 aXRoIGEgc2luZ2xlIGhhbmRzaGFrZSB0aW1lb3V0IGFuZCBzZXJ2ZXIgcm9sZSB0byBwcmV2ZW50 IEFSUS4KPiA4LiBDb25zb2xpZGF0ZWQgSUNFIHJlcXVlc3QvcmVzcG9uc2UgaGFuZGxpbmcgYW5k IERUTFMgaGFuZHNoYWtlIGludG8gYSBzaW5nbGUgZnVuY3Rpb24sIGFuZCBmaXhlZCBPcGVuU1NM IGJ1aWxkIGVycm9ycyB0byB3b3JrIHdpdGggUGlvbi4KPiA5LiBNZXJnZSBUTFMgJiBEVExTIGlt cGxlbWVudGF0aW9uLCBzaGFyZWQgQklPIGNhbGxiYWNrcywgcmVhZCwgd3JpdGUsIHByaW50X3Nz bF9lcnJvciwgb3BlbnNzbF9pbml0X2NhX2tleV9jZXJ0LCBpbml0X2Jpb19tZXRob2QgZnVuY3Rp b24gYW5kIHNoYXJlZCBzYW1lIGRhdGEgc3RydWN0dXJlCj4gMTAuIE1vZGlmeSBjb25maWd1cmUg dGhhdCB3aGlwIGlzIGVuYWJsZWQgb25seSBkdGxzIGlzIGVuYWJsZWQoanVzdCBzdXBwb3J0IG9w ZW5zc2wgZm9yIG5vdykgdG8gZml4IGJ1aWxkIGVycm9yCj4KPiBDby1hdXRob3JlZC1ieTogd2lu bGluIDx3aW5saW52aXBAZ21haWwuY29tPgo+IENvLWF1dGhvcmVkLWJ5OiB5YW5ncnRjIDx5YW5n cnRjQGFsaXl1bi5jb20+Cj4gQ28tYXV0aG9yZWQtYnk6IGNsb3Vkd2VicnRjIDxkdWFud2Vpd2Vp MTk4MkBnbWFpbC5jb20+Cj4gQ28tYXV0aG9yZWQtYnk6IEhhaWJvIENoZW4gPDQ5NTgxMDI0MkBx cS5jb20+Cj4gQ28tYXV0aG9yZWQtYnk6IFN0ZXZlbiBMaXUgPGxxQGNoaW5hZmZtcGVnLm9yZz4K PiBDby1hdXRob3JlZC1ieTogSnVuIFpoYW8gPGJhcnJ5anpoYW9AdGVuY2VudC5jb20+Cj4gU2ln bmVkLW9mZi1ieTogSmFjayBMYXUgPGphY2tsYXUxMjIyQHFxLmNvbT4KPiAtLS0KPiAgY29uZmln dXJlICAgICAgICAgICAgICAgICB8ICAgMTIgKwo+ICBkb2MvbXV4ZXJzLnRleGkgICAgICAgICAg IHwgICA0NyArCj4gIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICAgfCAgICAxICsKPiAgbGliYXZm b3JtYXQvYWxsZm9ybWF0cy5jICB8ICAgIDEgKwo+ICBsaWJhdmZvcm1hdC9hdmlvLmMgICAgICAg IHwgICAgNSArLQo+ICBsaWJhdmZvcm1hdC9odHRwLmMgICAgICAgIHwgICAgNiArCj4gIGxpYmF2 Zm9ybWF0L2h0dHAuaCAgICAgICAgfCAgICAyICsKPiAgbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMg ICB8ICAgIDEgKwo+ICBsaWJhdmZvcm1hdC9zcnRwLmggICAgICAgIHwgICAgNCArLQo+ICBsaWJh dmZvcm1hdC90bHMuYyAgICAgICAgIHwgICA3MCArLQo+ICBsaWJhdmZvcm1hdC90bHMuaCAgICAg ICAgIHwgICA1OCArLQo+ICBsaWJhdmZvcm1hdC90bHNfb3BlbnNzbC5jIHwgIDg1NyArKysrKysr KysrKysrKysrLQo+ICBsaWJhdmZvcm1hdC93aGlwLmMgICAgICAgIHwgMTkxNyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEzIGZpbGVzIGNoYW5nZWQsIDI5MjUgaW5z ZXJ0aW9ucygrKSwgNTYgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZv cm1hdC93aGlwLmMKPgo+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiBpbmRl eCAwNjA5ZGFjNGFiLi4yYTMxNjY5NjJhIDEwMDc1NQo+IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBi L2NvbmZpZ3VyZQo+IEBAIC0zNzQ3LDYgKzM3NDcsNyBAQCB3YXZfZGVtdXhlcl9zZWxlY3Q9InJp ZmZkZWMiCj4gIHdhdl9tdXhlcl9zZWxlY3Q9InJpZmZlbmMiCj4gIHdlYm1fY2h1bmtfbXV4ZXJf c2VsZWN0PSJ3ZWJtX211eGVyIgo+ICB3ZWJtX2Rhc2hfbWFuaWZlc3RfZGVtdXhlcl9zZWxlY3Q9 Im1hdHJvc2thX2RlbXV4ZXIiCj4gK3doaXBfbXV4ZXJfZGVwc19hbnk9ImR0bHNfcHJvdG9jb2wi Cj4gIHd0dl9kZW11eGVyX3NlbGVjdD0ibXBlZ3RzX2RlbXV4ZXIgcmlmZmRlYyIKPiAgd3R2X211 eGVyX3NlbGVjdD0ibXBlZ3RzX211eGVyIHJpZmZlbmMiCj4gIHhtdl9kZW11eGVyX3NlbGVjdD0i cmlmZmRlYyIKPiBAQCAtMzg0NSw2ICszODQ2LDkgQEAgc3J0cF9wcm90b2NvbF9zZWxlY3Q9InJ0 cF9wcm90b2NvbCBzcnRwIgo+ICB0Y3BfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+ICB0bHNf cHJvdG9jb2xfZGVwc19hbnk9ImdudXRscyBvcGVuc3NsIHNjaGFubmVsIHNlY3VyZXRyYW5zcG9y dCBsaWJ0bHMgbWJlZHRscyIKPiAgdGxzX3Byb3RvY29sX3NlbGVjdD0idGNwX3Byb3RvY29sIgo+ ICsjIFRPRE86IFN1cHBvcnQgbGlidGxzLCBtYmVkdGxzLCBhbmQgZ251dGxzLgo+ICtkdGxzX3By b3RvY29sX2RlcHNfYW55PSJvcGVuc3NsIgo+ICtkdGxzX3Byb3RvY29sX3NlbGVjdD0idWRwX3By b3RvY29sIgo+ICB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+ICB1ZHBsaXRlX3Byb3Rv Y29sX3NlbGVjdD0ibmV0d29yayIKPiAgdW5peF9wcm90b2NvbF9kZXBzPSJzeXNfdW5faCIKPiBA QCAtNzE5Miw2ICs3MTk2LDE0IEBAIGVuYWJsZWQgcmttcHAgICAgICAgICAgICAgJiYgeyByZXF1 aXJlX3BrZ19jb25maWcgcmttcHAgcm9ja2NoaXBfbXBwICByb2NrY2hpcC9yCj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQo+ICBlbmFibGVkIHZhcG91cnN5bnRoICAgICAgICYmIHJl cXVpcmVfaGVhZGVycyAidmFwb3Vyc3ludGgvVlNTY3JpcHQ0LmggdmFwb3Vyc3ludGgvVmFwb3Vy U3ludGg0LmgiCj4KPiArZW5hYmxlZCBvcGVuc3NsICAgICAgICAgICAgJiYgewo+ICsgICAgZW5h YmxlZCB3aGlwX211eGVyICYmIHsKPiArICAgICAgICAkcGtnX2NvbmZpZyAtLWV4aXN0cyAtLXBy aW50LWVycm9ycyAib3BlbnNzbCA+PSAxLjAuMWsiIHx8Cj4gKyAgICAgICAgcmVxdWlyZV9wa2df Y29uZmlnIG9wZW5zc2wgIm9wZW5zc2wgPj0gMS4wLjFrIiBvcGVuc3NsL3NzbC5oIFNTTF9saWJy YXJ5X2luaXQgfHwKPiArICAgICAgICByZXF1aXJlX3BrZ19jb25maWcgb3BlbnNzbCAib3BlbnNz bCA+PSAxLjAuMWsiIG9wZW5zc2wvc3NsLmggT1BFTlNTTF9pbml0X3NzbAo+ICsgICAgfQo+ICt9 Cj4gKwo+Cj4gIGlmIGVuYWJsZWQgZ2NyeXB0OyB0aGVuCj4gICAgICBHQ1JZUFRfQ09ORklHPSIk e2Nyb3NzX3ByZWZpeH1saWJnY3J5cHQtY29uZmlnIgo+IGRpZmYgLS1naXQgYS9kb2MvbXV4ZXJz LnRleGkgYi9kb2MvbXV4ZXJzLnRleGkKPiBpbmRleCAwNGI3ZjIwYjdlLi4zMGM5NWMzZDM0IDEw MDY0NAo+IC0tLSBhL2RvYy9tdXhlcnMudGV4aQo+ICsrKyBiL2RvYy9tdXhlcnMudGV4aQo+IEBA IC0zODc5LDQgKzM4NzksNTEgQEAgZmZtcGVnIC1mIHdlYm1fZGFzaF9tYW5pZmVzdCAtaSB2aWRl bzEud2VibSBcCj4gICAgICAgICBtYW5pZmVzdC54bWwKPiAgQGVuZCBleGFtcGxlCj4KPiArQGFu Y2hvcnt3aGlwfQo+ICtAc2VjdGlvbiB3aGlwCj4gKwo+ICtXZWJSVEMgKFJlYWwtVGltZSBDb21t dW5pY2F0aW9uKSBtdXhlciB0aGF0IHN1cHBvcnRzIHN1Yi1zZWNvbmQgbGF0ZW5jeSBzdHJlYW1p bmcgYWNjb3JkaW5nIHRvCj4gK3RoZSBXSElQIChXZWJSVEMtSFRUUCBpbmdlc3Rpb24gcHJvdG9j b2wpIHNwZWNpZmljYXRpb24uCj4gKwo+ICtJdCB1c2VzIEhUVFAgYXMgYSBzaWduYWxpbmcgcHJv dG9jb2wgdG8gZXhjaGFuZ2UgU0RQIGNhcGFiaWxpdGllcyBhbmQgSUNFIGxpdGUgY2FuZGlkYXRl cy4gVGhlbiwKPiAraXQgdXNlcyBTVFVOIGJpbmRpbmcgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyB0 byBlc3RhYmxpc2ggYSBzZXNzaW9uIG92ZXIgVURQLiBTdWJzZXF1ZW50bHksIGl0Cj4gK2luaXRp YXRlcyBhIERUTFMgaGFuZHNoYWtlIHRvIGV4Y2hhbmdlIHRoZSBTUlRQIGVuY3J5cHRpb24ga2V5 cy4gTGFzdGx5LCBpdCBzcGxpdHMgdmlkZW8gYW5kCj4gK2F1ZGlvIGZyYW1lcyBpbnRvIFJUUCBw YWNrZXRzIGFuZCBlbmNyeXB0cyB0aGVtIHVzaW5nIFNSVFAuCj4gKwo+ICtFbnN1cmUgdGhhdCB5 b3UgdXNlIEguMjY0IHdpdGhvdXQgQiBmcmFtZXMgYW5kIE9wdXMgZm9yIHRoZSBhdWRpbyBjb2Rl Yy4gRm9yIGV4YW1wbGUsIHRvIGNvbnZlcnQKPiArYW4gaW5wdXQgZmlsZSB3aXRoIEBjb21tYW5k e2ZmbXBlZ30gdG8gV2ViUlRDOgo+ICtAZXhhbXBsZQo+ICtmZm1wZWcgLXJlIC1pIGlucHV0Lm1w NCAtYWNvZGVjIGxpYm9wdXMgLWFyIDQ4MDAwIC1hYyAyIFwKPiArICAtdmNvZGVjIGxpYngyNjQg LXByb2ZpbGU6diBiYXNlbGluZSAtdHVuZSB6ZXJvbGF0ZW5jeSAtdGhyZWFkcyAxIC1iZiAwIFwK PiArICAtZiB3aGlwICJodHRwOi8vbG9jYWxob3N0OjE5ODUvcnRjL3YxL3doaXAvP2FwcD1saXZl JnN0cmVhbT1saXZlc3RyZWFtIgo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0ZvciB0aGlzIGV4YW1w bGUsIHdlIGhhdmUgZW1wbG95ZWQgbG93IGxhdGVuY3kgb3B0aW9ucywgcmVzdWx0aW5nIGluIGFu IGVuZC10by1lbmQgbGF0ZW5jeSBvZgo+ICthcHByb3hpbWF0ZWx5IDE1MG1zLgo+ICsKPiArQHN1 YnNlY3Rpb24gT3B0aW9ucwo+ICsKPiArVGhpcyBtdXhlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5n IG9wdGlvbnM6Cj4gKwo+ICtAdGFibGUgQG9wdGlvbgo+ICsKPiArQGl0ZW0gaGFuZHNoYWtlX3Rp bWVvdXQgQHZhcntpbnRlZ2VyfQo+ICtTZXQgdGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZv ciBJQ0UgYW5kIERUTFMgaGFuZHNoYWtlLgo+ICtEZWZhdWx0IHZhbHVlIGlzIDUwMDAuCj4gKwo+ ICtAaXRlbSBwa3Rfc2l6ZSBAdmFye2ludGVnZXJ9Cj4gK1NldCB0aGUgbWF4aW11bSBzaXplLCBp biBieXRlcywgb2YgUlRQIHBhY2tldHMgdGhhdCBzZW5kIG91dC4KPiArRGVmYXVsdCB2YWx1ZSBp cyAxNTAwLgo+ICsKPiArQGl0ZW0gYXV0aG9yaXphdGlvbiBAdmFye3N0cmluZ30KPiArVGhlIG9w dGlvbmFsIEJlYXJlciB0b2tlbiBmb3IgV0hJUCBBdXRob3JpemF0aW9uLgo+ICsKPiArQGl0ZW0g Y2VydF9maWxlIEB2YXJ7c3RyaW5nfQo+ICtUaGUgb3B0aW9uYWwgY2VydGlmaWNhdGUgZmlsZSBw YXRoIGZvciBEVExTLgo+ICsKPiArQGl0ZW0ga2V5X2ZpbGUgQHZhcntzdHJpbmd9Cj4gK1RoZSBv cHRpb25hbCBwcml2YXRlIGtleSBmaWxlIHBhdGggZm9yIERUTFMuCj4gKwo+ICtAZW5kIHRhYmxl Cj4gKwo+ICBAYyBtYW4gZW5kIE1VWEVSUwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtl ZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gaW5kZXggNmM5OTkyYWRhYi4uOTZhNjQzMDE1 OCAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2Zm9ybWF0 L01ha2VmaWxlCj4gQEAgLTYzNyw2ICs2MzcsNyBAQCBPQkpTLSQoQ09ORklHX1dFQk1fQ0hVTktf TVVYRVIpICAgICAgICAgICs9IHdlYm1fY2h1bmsubwo+ICBPQkpTLSQoQ09ORklHX1dFQlBfTVVY RVIpICAgICAgICAgICAgICAgICs9IHdlYnBlbmMubwo+ICBPQkpTLSQoQ09ORklHX1dFQlZUVF9E RU1VWEVSKSAgICAgICAgICAgICs9IHdlYnZ0dGRlYy5vIHN1YnRpdGxlcy5vCj4gIE9CSlMtJChD T05GSUdfV0VCVlRUX01VWEVSKSAgICAgICAgICAgICAgKz0gd2VidnR0ZW5jLm8KPiArT0JKUy0k KENPTkZJR19XSElQX01VWEVSKSAgICAgICAgICAgICAgICArPSB3aGlwLm8gYXZjLm8gaHR0cC5v IHNydHAubyB0bHNfb3BlbnNzbC5vCj4gIE9CSlMtJChDT05GSUdfV1NBVURfREVNVVhFUikgICAg ICAgICAgICAgKz0gd2VzdHdvb2RfYXVkLm8KPiAgT0JKUy0kKENPTkZJR19XU0FVRF9NVVhFUikg ICAgICAgICAgICAgICArPSB3ZXN0d29vZF9hdWRlbmMubwo+ICBPQkpTLSQoQ09ORklHX1dTRF9E RU1VWEVSKSAgICAgICAgICAgICAgICs9IHdzZGRlYy5vIHJhd2RlYy5vCj4gZGlmZiAtLWdpdCBh L2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+IGlu ZGV4IGI1YTIzZjljMTcuLjNlNWYxMjdkYzEgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvYWxs Zm9ybWF0cy5jCj4gKysrIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4gQEAgLTUxNyw2ICs1 MTcsNyBAQCBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfd2VicF9tdXhlcjsKPiAgZXh0 ZXJuIGNvbnN0IEZGSW5wdXRGb3JtYXQgIGZmX3dlYnZ0dF9kZW11eGVyOwo+ICBleHRlcm4gY29u c3QgRkZPdXRwdXRGb3JtYXQgZmZfd2VidnR0X211eGVyOwo+ICBleHRlcm4gY29uc3QgRkZJbnB1 dEZvcm1hdCAgZmZfd3NhdWRfZGVtdXhlcjsKPiArZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0 IGZmX3doaXBfbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl93c2F1ZF9t dXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGSW5wdXRGb3JtYXQgIGZmX3dzZF9kZW11eGVyOwo+ICBl eHRlcm4gY29uc3QgRkZJbnB1dEZvcm1hdCAgZmZfd3N2cWFfZGVtdXhlcjsKPiBkaWZmIC0tZ2l0 IGEvbGliYXZmb3JtYXQvYXZpby5jIGIvbGliYXZmb3JtYXQvYXZpby5jCj4gaW5kZXggZDEwOWYz YWRmZi4uYjE0NmFjOWYxOSAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9hdmlvLmMKPiArKysg Yi9saWJhdmZvcm1hdC9hdmlvLmMKPiBAQCAtMzM5LDggKzMzOSw5IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgVVJMUHJvdG9jb2wgKnVybF9maW5kX3Byb3RvY29sKGNvbnN0IGNoYXIgKmZpbGVuYW1l KQo+ICAgICAgICAgIH0KPiAgICAgIH0KPiAgICAgIGF2X2ZyZWVwKCZwcm90b2NvbHMpOwo+IC0g ICAgaWYgKGF2X3N0cnN0YXJ0KGZpbGVuYW1lLCAiaHR0cHM6IiwgTlVMTCkgfHwgYXZfc3Ryc3Rh cnQoZmlsZW5hbWUsICJ0bHM6IiwgTlVMTCkpCj4gLSAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19XQVJOSU5HLCAiaHR0cHMgcHJvdG9jb2wgbm90IGZvdW5kLCByZWNvbXBpbGUgRkZtcGVnIHdp dGggIgo+ICsgICAgaWYgKGF2X3N0cnN0YXJ0KGZpbGVuYW1lLCAiaHR0cHM6IiwgTlVMTCkgfHwg YXZfc3Ryc3RhcnQoZmlsZW5hbWUsICJ0bHM6IiwgTlVMTCkgfHwKPiArICAgICAgICBhdl9zdHJz dGFydChmaWxlbmFtZSwgImR0bHM6IiwgTlVMTCkpCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19XQVJOSU5HLCAiaHR0cHMgb3IgZHRscyBwcm90b2NvbCBub3QgZm91bmQsIHJlY29tcGls ZSBGRm1wZWcgd2l0aCAiCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi b3BlbnNzbCwgZ251dGxzIG9yIHNlY3VyZXRyYW5zcG9ydCBlbmFibGVkLlxuIik7Cj4KPiAgICAg IHJldHVybiBOVUxMOwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9odHRwLmMgYi9saWJhdmZv cm1hdC9odHRwLmMKPiBpbmRleCBmN2IyYThhMDI5Li5mZjYzYzI1OTY5IDEwMDY0NAo+IC0tLSBh L2xpYmF2Zm9ybWF0L2h0dHAuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L2h0dHAuYwo+IEBAIC01NjIs NiArNTYyLDEyIEBAIGludCBmZl9odHRwX2F2ZXJyb3IoaW50IHN0YXR1c19jb2RlLCBpbnQgZGVm YXVsdF9hdmVycm9yKQo+ICAgICAgICAgIHJldHVybiBkZWZhdWx0X2F2ZXJyb3I7Cj4gIH0KPgo+ ICtjb25zdCBjaGFyKiBmZl9odHRwX2dldF9uZXdfbG9jYXRpb24oVVJMQ29udGV4dCAqaCkKPiAr ewo+ICsgICAgSFRUUENvbnRleHQgKnMgPSBoLT5wcml2X2RhdGE7Cj4gKyAgICByZXR1cm4gcy0+ bmV3X2xvY2F0aW9uOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IGh0dHBfd3JpdGVfcmVwbHkoVVJM Q29udGV4dCogaCwgaW50IHN0YXR1c19jb2RlKQo+ICB7Cj4gICAgICBpbnQgcmV0LCBib2R5ID0g MCwgcmVwbHlfY29kZSwgbWVzc2FnZV9sZW47Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2h0 dHAuaCBiL2xpYmF2Zm9ybWF0L2h0dHAuaAo+IGluZGV4IDVmNjUwZWYxNDMuLmQxYjY5MTgyNmIg MTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvaHR0cC5oCj4gKysrIGIvbGliYXZmb3JtYXQvaHR0 cC5oCj4gQEAgLTYyLDQgKzYyLDYgQEAgaW50IGZmX2h0dHBfZG9fbmV3X3JlcXVlc3QyKFVSTENv bnRleHQgKmgsIGNvbnN0IGNoYXIgKnVyaSwgQVZEaWN0aW9uYXJ5ICoqb3B0aW8KPgo+ICBpbnQg ZmZfaHR0cF9hdmVycm9yKGludCBzdGF0dXNfY29kZSwgaW50IGRlZmF1bHRfYXZlcnJvcik7Cj4K PiArY29uc3QgY2hhciogZmZfaHR0cF9nZXRfbmV3X2xvY2F0aW9uKFVSTENvbnRleHQgKmgpOwo+ ICsKPiAgI2VuZGlmIC8qIEFWRk9STUFUX0hUVFBfSCAqLwo+IGRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC9wcm90b2NvbHMuYyBiL2xpYmF2Zm9ybWF0L3Byb3RvY29scy5jCj4gaW5kZXggOTNhNmQ2 NzI2MS4uZDM5NDQ1NGQ0MSAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9wcm90b2NvbHMuYwo+ ICsrKyBiL2xpYmF2Zm9ybWF0L3Byb3RvY29scy5jCj4gQEAgLTYyLDYgKzYyLDcgQEAgZXh0ZXJu IGNvbnN0IFVSTFByb3RvY29sIGZmX3N1YmZpbGVfcHJvdG9jb2w7Cj4gIGV4dGVybiBjb25zdCBV UkxQcm90b2NvbCBmZl90ZWVfcHJvdG9jb2w7Cj4gIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBm Zl90Y3BfcHJvdG9jb2w7Cj4gIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl90bHNfcHJvdG9j b2w7Cj4gK2V4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9kdGxzX3Byb3RvY29sOwo+ICBleHRl cm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfdWRwX3Byb3RvY29sOwo+ICBleHRlcm4gY29uc3QgVVJM UHJvdG9jb2wgZmZfdWRwbGl0ZV9wcm90b2NvbDsKPiAgZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29s IGZmX3VuaXhfcHJvdG9jb2w7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3NydHAuaCBiL2xp YmF2Zm9ybWF0L3NydHAuaAo+IGluZGV4IDMxODlmOGY1NGIuLjM1MjI0Y2M5YmEgMTAwNjQ0Cj4g LS0tIGEvbGliYXZmb3JtYXQvc3J0cC5oCj4gKysrIGIvbGliYXZmb3JtYXQvc3J0cC5oCj4gQEAg LTI3LDcgKzI3LDcgQEAKPiAgc3RydWN0IEFWQUVTOwo+ICBzdHJ1Y3QgQVZITUFDOwo+Cj4gLXN0 cnVjdCBTUlRQQ29udGV4dCB7Cj4gK3R5cGVkZWYgc3RydWN0IFNSVFBDb250ZXh0IHsKPiAgICAg IHN0cnVjdCBBVkFFUyAqYWVzOwo+ICAgICAgc3RydWN0IEFWSE1BQyAqaG1hYzsKPiAgICAgIGlu dCBydHBfaG1hY19zaXplLCBydGNwX2htYWNfc2l6ZTsKPiBAQCAtNDAsNyArNDAsNyBAQCBzdHJ1 Y3QgU1JUUENvbnRleHQgewo+ICAgICAgdWludDMyX3Qgcm9jOwo+Cj4gICAgICB1aW50MzJfdCBy dGNwX2luZGV4Owo+IC19Owo+ICt9IFNSVFBDb250ZXh0Owo+Cj4gIGludCBmZl9zcnRwX3NldF9j cnlwdG8oc3RydWN0IFNSVFBDb250ZXh0ICpzLCBjb25zdCBjaGFyICpzdWl0ZSwKPiAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXJhbXMpOwo+IGRpZmYgLS1naXQgYS9saWJh dmZvcm1hdC90bHMuYyBiL2xpYmF2Zm9ybWF0L3Rscy5jCj4gaW5kZXggZjk2ZmY2MjE1ZC4uZTA2 YjcwMjJiZiAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC90bHMuYwo+ICsrKyBiL2xpYmF2Zm9y bWF0L3Rscy5jCj4gQEAgLTEsNiArMSw3IEBACj4gIC8qCj4gLSAqIFRMUy9TU0wgUHJvdG9jb2wK PiArICogVExTL0RUTFMvU1NMIFByb3RvY29sCj4gICAqIENvcHlyaWdodCAoYykgMjAxMSBNYXJ0 aW4gU3RvcnNqbwo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgSmFjayBMYXUKPiAgICoKPiAgICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICAgKgo+IEBAIC0yMCw2ICsyMSw3IEBACj4g ICAqLwo+Cj4gICNpbmNsdWRlICJhdmZvcm1hdC5oIgo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIK PiAgI2luY2x1ZGUgIm5ldHdvcmsuaCIKPiAgI2luY2x1ZGUgIm9zX3N1cHBvcnQuaCIKPiAgI2lu Y2x1ZGUgInVybC5oIgo+IEBAIC05Myw3ICs5NSw3IEBAIGludCBmZl90bHNfb3Blbl91bmRlcmx5 aW5nKFRMU1NoYXJlZCAqYywgVVJMQ29udGV4dCAqcGFyZW50LCBjb25zdCBjaGFyICp1cmksIEFW Cj4gICAgICAgICAgICAgIGMtPmxpc3RlbiA9IDE7Cj4gICAgICB9Cj4KPiAtICAgIGZmX3VybF9q b2luKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJ0Y3AiLCBOVUxMLCBjLT51bmRlcmx5aW5nX2hvc3QsIHBv cnQsICIlcyIsIHApOwo+ICsgICAgZmZfdXJsX2pvaW4oYnVmLCBzaXplb2YoYnVmKSwgYy0+aXNf ZHRscyA/ICJ1ZHAiIDogInRjcCIsIE5VTEwsIGMtPnVuZGVybHlpbmdfaG9zdCwgcG9ydCwgIiVz IiwgcCk7Cj4KPiAgICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7Cj4gICAgICBp ZiAoIWdldGFkZHJpbmZvKGMtPnVuZGVybHlpbmdfaG9zdCwgTlVMTCwgJmhpbnRzLCAmYWkpKSB7 Cj4gQEAgLTEyNCw3ICsxMjYsNjUgQEAgaW50IGZmX3Rsc19vcGVuX3VuZGVybHlpbmcoVExTU2hh cmVkICpjLCBVUkxDb250ZXh0ICpwYXJlbnQsIGNvbnN0IGNoYXIgKnVyaSwgQVYKPiAgICAgIH0K Pgo+ICAgICAgZnJlZWVudl91dGY4KGVudl9odHRwX3Byb3h5KTsKPiAtICAgIHJldHVybiBmZnVy bF9vcGVuX3doaXRlbGlzdCgmYy0+dGNwLCBidWYsIEFWSU9fRkxBR19SRUFEX1dSSVRFLAo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJlbnQtPmludGVycnVwdF9jYWxsYmFj aywgb3B0aW9ucywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPnBy b3RvY29sX3doaXRlbGlzdCwgcGFyZW50LT5wcm90b2NvbF9ibGFja2xpc3QsIHBhcmVudCk7Cj4g KyAgICBpZiAoYy0+aXNfZHRscykgewo+ICsgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25z LCAiY29ubmVjdCIsIDEsIDApOwo+ICsgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25zLCAi Zmlmb19zaXplIiwgMCwgMCk7Cj4gKyAgICAgICAgLyogU2V0IHRoZSBtYXggcGFja2V0IHNpemUg dG8gdGhlIGJ1ZmZlciBzaXplLiAqLwo+ICsgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25z LCAicGt0X3NpemUiLCBjLT5tdHUsIDApOwo+ICsgICAgfQo+ICsgICAgcmV0ID0gZmZ1cmxfb3Bl bl93aGl0ZWxpc3QoYy0+aXNfZHRscyA/ICZjLT51ZHAgOiAmYy0+dGNwLCBidWYsIEFWSU9fRkxB R19SRUFEX1dSSVRFLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmVudC0+ aW50ZXJydXB0X2NhbGxiYWNrLCBvcHRpb25zLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFyZW50LT5wcm90b2NvbF93aGl0ZWxpc3QsIHBhcmVudC0+cHJvdG9jb2xfYmxhY2ts aXN0LCBwYXJlbnQpOwo+ICsgICAgaWYgKGMtPmlzX2R0bHMpIHsKPiArICAgICAgICBpZiAocmV0 IDwgMCkgewo+ICsgICAgICAgICAgICBhdl9sb2coYywgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFp bGVkIHRvIGNvbm5lY3QgdWRwOi8vJXM6JWRcbiIsIGMtPnVuZGVybHlpbmdfaG9zdCwgcG9ydCk7 Cj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIC8qIE1h a2UgdGhlIHNvY2tldCBub24tYmxvY2tpbmcsIHNldCB0byBSRUFEIGFuZCBXUklURSBtb2RlIGFm dGVyIGNvbm5lY3RlZCAqLwo+ICsgICAgICAgIGZmX3NvY2tldF9ub25ibG9jayhmZnVybF9nZXRf ZmlsZV9oYW5kbGUoYy0+dWRwKSwgMSk7Cj4gKyAgICAgICAgYy0+dWRwLT5mbGFncyB8PSBBVklP X0ZMQUdfUkVBRCB8IEFWSU9fRkxBR19OT05CTE9DSzsKPiArICAgIH0KPiArICAgIHJldHVybiBy ZXQ7Cj4gIH0KPiArCj4gKy8qKgo+ICsgKiBSZWFkIGFsbCBkYXRhIGZyb20gdGhlIGdpdmVuIFVS TCB1cmwgYW5kIHN0b3JlIGl0IGluIHRoZSBnaXZlbiBidWZmZXIgYnAuCj4gKyAqLwo+ICtpbnQg ZmZfdXJsX3JlYWRfYWxsKGNvbnN0IGNoYXIgKnVybCwgQVZCUHJpbnQgKmJwKQo+ICt7Cj4gKyAg ICBpbnQgcmV0ID0gMDsKPiArICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7Cj4gKyAgICBV UkxDb250ZXh0ICp1YyA9IE5VTEw7Cj4gKyAgICBjaGFyIGJ1ZltNQVhfVVJMX1NJWkVdOwo+ICsK PiArICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ1YywgdXJsLCBBVklPX0ZMQUdfUkVB RCwgTlVMTCwgJm9wdHMsIE5VTEwsIE5VTEwsIE5VTEwpOwo+ICsgICAgaWYgKHJldCA8IDApIHsK PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gb3Bl biB1cmwgJXNcbiIsIHVybCk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgd2hpbGUgKDEpIHsKPiArICAgICAgICByZXQgPSBmZnVybF9yZWFkKHVjLCBidWYsIHNpemVv ZihidWYpKTsKPiArICAgICAgICBpZiAocmV0ID09IEFWRVJST1JfRU9GKSB7Cj4gKyAgICAgICAg ICAgIC8qIFJlc2V0IHRoZSBlcnJvciBiZWNhdXNlIHdlIHJlYWQgYWxsIHJlc3BvbnNlIGFzIGFu c3dlciB1dGlsIEVPRi4gKi8KPiArICAgICAgICAgICAgcmV0ID0gMDsKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChyZXQgPD0gMCkgewo+ICsgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gcmVhZCBmcm9t IHVybD0lcywga2V5IGlzICVzXG4iLCB1cmwsIGJwLT5zdHIpOwo+ICsgICAgICAgICAgICBnb3Rv IGVuZDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGF2X2JwcmludGYoYnAsICIlLipzIiwg cmV0LCBidWYpOwo+ICsgICAgICAgIGlmICghYXZfYnByaW50X2lzX2NvbXBsZXRlKGJwKSkgewo+ ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBFeGNlZWQgbWF4 IHNpemUgJS4qcywgJXNcbiIsIHJldCwgYnVmLCBicC0+c3RyKTsKPiArICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFSU8pOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4g KyAgICB9Cj4gKwo+ICtlbmQ6Cj4gKyAgICBmZnVybF9jbG9zZXAoJnVjKTsKPiArICAgIGF2X2Rp Y3RfZnJlZSgmb3B0cyk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Rscy5oIGIvbGliYXZmb3Jt YXQvdGxzLmgKPiBpbmRleCA2YzZhYTAxYTlhLi5jYjYyNmYxOTc3IDEwMDY0NAo+IC0tLSBhL2xp YmF2Zm9ybWF0L3Rscy5oCj4gKysrIGIvbGliYXZmb3JtYXQvdGxzLmgKPiBAQCAtMSw2ICsxLDcg QEAKPiAgLyoKPiAtICogVExTL1NTTCBQcm90b2NvbAo+ICsgKiBUTFMvRFRMUy9TU0wgUHJvdG9j b2wKPiAgICogQ29weXJpZ2h0IChjKSAyMDExIE1hcnRpbiBTdG9yc2pvCj4gKyAqIENvcHlyaWdo dCAoYykgMjAyNSBKYWNrIExhdQo+ICAgKgo+ICAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCj4gICAqCj4gQEAgLTIyLDEwICsyMywyNyBAQAo+ICAjaWZuZGVmIEFWRk9STUFUX1RMU19I Cj4gICNkZWZpbmUgQVZGT1JNQVRfVExTX0gKPgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2Jwcmlu dC5oIgo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+Cj4gICNpbmNsdWRlICJ1cmwuaCIK Pgo+ICsvKioKPiArICogTWF4aW11bSBzaXplIGxpbWl0IG9mIGEgY2VydGlmaWNhdGUgYW5kIHBy aXZhdGUga2V5IHNpemUuCj4gKyAqLwo+ICsjZGVmaW5lIE1BWF9DRVJUSUZJQ0FURV9TSVpFIDgx OTIKPiArCj4gK2VudW0gRFRMU1N0YXRlIHsKPiArICAgIERUTFNfU1RBVEVfTk9ORSwKPiArCj4g KyAgICAvKiBXaGV0aGVyIERUTFMgaGFuZHNoYWtlIGlzIGZpbmlzaGVkLiAqLwo+ICsgICAgRFRM U19TVEFURV9GSU5JU0hFRCwKPiArICAgIC8qIFdoZXRoZXIgRFRMUyBzZXNzaW9uIGlzIGNsb3Nl ZC4gKi8KPiArICAgIERUTFNfU1RBVEVfQ0xPU0VELAo+ICsgICAgLyogV2hldGhlciBEVExTIGhh bmRzaGFrZSBpcyBmYWlsZWQuICovCj4gKyAgICBEVExTX1NUQVRFX0ZBSUxFRCwKPiArfTsKPiAr Cj4gIHR5cGVkZWYgc3RydWN0IFRMU1NoYXJlZCB7Cj4gICAgICBjaGFyICpjYV9maWxlOwo+ICAg ICAgaW50IHZlcmlmeTsKPiBAQCAtNDAsNiArNTgsMjUgQEAgdHlwZWRlZiBzdHJ1Y3QgVExTU2hh cmVkIHsKPiAgICAgIGludCBudW1lcmljaG9zdDsKPgo+ICAgICAgVVJMQ29udGV4dCAqdGNwOwo+ ICsKPiArICAgIGludCBpc19kdGxzOwo+ICsKPiArICAgIGVudW0gRFRMU1N0YXRlIHN0YXRlOwo+ ICsKPiArICAgIGludCB1c2VfZXh0ZXJuYWxfdWRwOwo+ICsgICAgVVJMQ29udGV4dCAqdWRwOwo+ ICsKPiArICAgIC8qIFRoZSBmaW5nZXJwcmludCBvZiBjZXJ0aWZpY2F0ZSwgdXNlZCBpbiBTRFAg b2ZmZXIuICovCj4gKyAgICBjaGFyICpmaW5nZXJwcmludDsKPiArCj4gKyAgICAvKiBUaGUgY2Vy dGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IGNvbnRlbnQgdXNlZCBmb3IgRFRMUyBoYW5kc2hha2Ug Ki8KPiArICAgIGNoYXIqIGNlcnRfYnVmOwo+ICsgICAgY2hhcioga2V5X2J1ZjsKPiArICAgIC8q Kgo+ICsgICAgICogVGhlIHNpemUgb2YgUlRQIHBhY2tldCwgc2hvdWxkIGdlbmVyYWxseSBiZSBz ZXQgdG8gTVRVLgo+ICsgICAgICogTm90ZSB0aGF0IHBpb24gcmVxdWlyZXMgYSBzbWFsbGVyIHZh bHVlLCBmb3IgZXhhbXBsZSwgMTIwMC4KPiArICAgICAqLwo+ICsgICAgaW50IG10dTsKPiAgfSBU TFNTaGFyZWQ7Cj4KPiAgI2RlZmluZSBUTFNfT1BURkwgKEFWX09QVF9GTEFHX0RFQ09ESU5HX1BB UkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0pCj4gQEAgLTUxLDEwICs4OCwyNyBAQCB0 eXBlZGVmIHN0cnVjdCBUTFNTaGFyZWQgewo+ICAgICAgeyJrZXlfZmlsZSIsICAgIlByaXZhdGUg a2V5IGZpbGUiLCAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19m aWVsZCAuIGtleV9maWxlKSwgIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZM IH0sIFwKPiAgICAgIHsibGlzdGVuIiwgICAgICJMaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rp b25zIiwgICAgIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBsaXN0ZW4pLCAgICBB Vl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgMSwgLmZsYWdzID0gVExTX09QVEZMIH0s IFwKPiAgICAgIHsidmVyaWZ5aG9zdCIsICJWZXJpZnkgYWdhaW5zdCBhIHNwZWNpZmljIGhvc3Ru YW1lIiwgIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBob3N0KSwgICAgICBBVl9P UFRfVFlQRV9TVFJJTkcsIC5mbGFncyA9IFRMU19PUFRGTCB9LCBcCj4gLSAgICB7Imh0dHBfcHJv eHkiLCAiU2V0IHByb3h5IHRvIHR1bm5lbCB0aHJvdWdoIiwgICAgICAgICBvZmZzZXRvZihwc3Ry dWN0LCBvcHRpb25zX2ZpZWxkIC4gaHR0cF9wcm94eSksIEFWX09QVF9UWVBFX1NUUklORywgLmZs YWdzID0gVExTX09QVEZMIH0KPiArICAgIHsiaHR0cF9wcm94eSIsICJTZXQgcHJveHkgdG8gdHVu bmVsIHRocm91Z2giLCAgICAgICAgIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBo dHRwX3Byb3h5KSwgQVZfT1BUX1RZUEVfU1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BURkwgfSwgXAo+ ICsgICAgeyJ1c2VfZXh0ZXJuYWxfdWRwIiwgIlVzZSBleHRlcm5hbCBVRFAgZnJvbSBtdXhlciBv ciBkZW11eGVyIiwgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIHVzZV9leHRlcm5h bF91ZHApLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDB9LCAwLCAxLCAuZmxhZ3MgPSBUTFNf T1BURkwgfSwgXAo+ICsgICAgeyJtdHUiLCAiTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCIsIG9m ZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBtdHUpLCBBVl9PUFRfVFlQRV9JTlQsICB7 IC5pNjQgPSAwfSwgSU5UNjRfTUlOLCBJTlQ2NF9NQVgsIC5mbGFncyA9IFRMU19PUFRGTH0sIFwK PiArICAgIHsiZmluZ2VycHJpbnQiLCAiVGhlIG9wdGlvbmFsIGZpbmdlcnByaW50IGZvciBEVExT Iiwgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIGZpbmdlcnByaW50KSwgQVZfT1BU X1RZUEVfU1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BURkx9LCBcCj4gKyAgICB7ImNlcnRfYnVmIiwg IlRoZSBvcHRpb25hbCBjZXJ0aWZpY2F0ZSBidWZmZXIgZm9yIERUTFMiLCBvZmZzZXRvZihwc3Ry dWN0LCBvcHRpb25zX2ZpZWxkIC4gY2VydF9idWYpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIC5mbGFn cyA9IFRMU19PUFRGTH0sIFwKPiArICAgIHsia2V5X2J1ZiIsICJUaGUgb3B0aW9uYWwgcHJpdmF0 ZSBrZXkgYnVmZmVyIGZvciBEVExTIiwgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAu IGtleV9idWYpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIC5mbGFncyA9IFRMU19PUFRGTH0KPgo+ICBp bnQgZmZfdGxzX29wZW5fdW5kZXJseWluZyhUTFNTaGFyZWQgKmMsIFVSTENvbnRleHQgKnBhcmVu dCwgY29uc3QgY2hhciAqdXJpLCBBVkRpY3Rpb25hcnkgKipvcHRpb25zKTsKPgo+ICtpbnQgZmZf dXJsX3JlYWRfYWxsKGNvbnN0IGNoYXIgKnVybCwgQVZCUHJpbnQgKmJwKTsKPiArCj4gK2ludCBm Zl9kdGxzX3NldF91ZHAoVVJMQ29udGV4dCAqaCwgVVJMQ29udGV4dCAqdWRwKTsKPiArCj4gK2lu dCBmZl9kdGxzX2V4cG9ydF9tYXRlcmlhbHMoVVJMQ29udGV4dCAqaCwgY2hhciAqZHRsc19zcnRw X21hdGVyaWFscywgc2l6ZV90IG1hdGVyaWFsc19zeik7Cj4gKwo+ICtpbnQgZmZfZHRsc19zdGF0 ZShVUkxDb250ZXh0ICpoKTsKPiArCj4gK2ludCBmZl9zc2xfcmVhZF9rZXlfY2VydChjaGFyICpr ZXlfdXJsLCBjaGFyICpjZXJ0X3VybCwgY2hhciAqa2V5X2J1Ziwgc2l6ZV90IGtleV9zeiwgY2hh ciAqY2VydF9idWYsIHNpemVfdCBjZXJ0X3N6LCBjaGFyICoqZmluZ2VycHJpbnQpOwo+ICsKPiAr aW50IGZmX3NzbF9nZW5fa2V5X2NlcnQoY2hhciAqa2V5X2J1Ziwgc2l6ZV90IGtleV9zeiwgY2hh ciAqY2VydF9idWYsIHNpemVfdCBjZXJ0X3N6LCBjaGFyICoqZmluZ2VycHJpbnQpOwo+ICsKPiAg dm9pZCBmZl9nbnV0bHNfaW5pdCh2b2lkKTsKPiAgdm9pZCBmZl9nbnV0bHNfZGVpbml0KHZvaWQp Owo+Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Rsc19vcGVuc3NsLmMgYi9saWJhdmZvcm1h dC90bHNfb3BlbnNzbC5jCj4gaW5kZXggOGIwY2Y5ZWZiMi4uYjU4OWQ1ZDkwYSAxMDA2NDQKPiAt LS0gYS9saWJhdmZvcm1hdC90bHNfb3BlbnNzbC5jCj4gKysrIGIvbGliYXZmb3JtYXQvdGxzX29w ZW5zc2wuYwo+IEBAIC0xLDYgKzEsNyBAQAo+ICAvKgo+IC0gKiBUTFMvU1NMIFByb3RvY29sCj4g KyAqIFRMUy9EVExTL1NTTCBQcm90b2NvbAo+ICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTWFydGlu IFN0b3Jzam8KPiArICogQ29weXJpZ2h0IChjKSAyMDI1IEphY2sgTGF1Cj4gICAqCj4gICAqIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiAgICoKPiBAQCAtMTksOCArMjAsMTAgQEAKPiAg ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICAgKi8KPgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21l bS5oIgo+ICAjaW5jbHVkZSAibmV0d29yay5oIgo+ICAjaW5jbHVkZSAib3Nfc3VwcG9ydC5oIgo+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL3JhbmRvbV9zZWVkLmgiCj4gICNpbmNsdWRlICJ1cmwuaCIK PiAgI2luY2x1ZGUgInRscy5oIgo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+IEBAIC0y OSw2ICszMiw0MzYgQEAKPiAgI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+Cj4gICNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgo+Cj4gKy8qKgo+ICsgKiBSZXR1cm5zIGEgaGVhcOKAkGFsbG9jYXRlZCBu dWxs4oCQdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZwo+ICsgKiB0aGUgUEVN4oCQZW5jb2Rl ZCBwdWJsaWMga2V5LiAgQ2FsbGVyIG11c3QgZnJlZS4KPiArICovCj4gK3N0YXRpYyBjaGFyICpw a2V5X3RvX3BlbV9zdHJpbmcoRVZQX1BLRVkgKnBrZXkpIHsKPiArICAgIEJJTyAgICAgICAgKm1l bSA9IE5VTEw7Cj4gKyAgICBCVUZfTUVNICAgICpicHRyID0gTlVMTDsKPiArICAgIGNoYXIgICAg ICAgKnBlbV9zdHIgPSBOVUxMOwo+ICsKPiArICAgIC8vIENyZWF0ZSBhIG1lbW9yeSBCSU8KPiAr ICAgIGlmICghKG1lbSA9IEJJT19uZXcoQklPX3NfbWVtKCkpKSkKPiArICAgICAgICBnb3RvIGVy cjsKPiArCj4gKyAgICAvLyBXcml0ZSBwdWJsaWMga2V5IGluIFBFTSBmb3JtCj4gKyAgICBpZiAo IVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShtZW0sIHBrZXksIE5VTEwsIE5VTEwsIDAsIE5VTEws IE5VTEwpKQo+ICsgICAgICAgIGdvdG8gZXJyOwo+ICsKPiArICAgIC8vIEV4dHJhY3QgcG9pbnRl ci9sZW5ndGgKPiArICAgIEJJT19nZXRfbWVtX3B0cihtZW0sICZicHRyKTsKPiArICAgIGlmICgh YnB0ciB8fCAhYnB0ci0+bGVuZ3RoKQo+ICsgICAgICAgIGdvdG8gZXJyOwo+ICsKPiArICAgIC8v IEFsbG9jYXRlIHN0cmluZyAoKzEgZm9yIE5VTCkKPiArICAgIHBlbV9zdHIgPSBhdl9tYWxsb2Mo YnB0ci0+bGVuZ3RoICsgMSk7Cj4gKyAgICBpZiAoIXBlbV9zdHIpCj4gKyAgICAgICAgZ290byBl cnI7Cj4gKwo+ICsgICAgLy8gQ29weSBkYXRhICYgTlVM4oCQdGVybWluYXRlCj4gKyAgICBtZW1j cHkocGVtX3N0ciwgYnB0ci0+ZGF0YSwgYnB0ci0+bGVuZ3RoKTsKPiArICAgIHBlbV9zdHJbYnB0 ci0+bGVuZ3RoXSA9ICdcMCc7Cj4gKwo+ICtjbGVhbnVwOgo+ICsgICAgQklPX2ZyZWUobWVtKTsK PiArICAgIHJldHVybiBwZW1fc3RyOwo+ICsKPiArZXJyOgo+ICsgICAgLy8gZXJyb3IgcGF0aDog ZnJlZSBhbmQgcmV0dXJuIE5VTEwKPiArICAgIGZyZWUocGVtX3N0cik7Cj4gKyAgICBwZW1fc3Ry ID0gTlVMTDsKPiArICAgIGdvdG8gY2xlYW51cDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNlcmlh bGl6ZSBhbiBYNTA5IGNlcnRpZmljYXRlIHRvIGEgYXZfbWFsbG9j4oCZZCBQRU0gc3RyaW5nLgo+ ICsgKiBDYWxsZXIgbXVzdCBmcmVlIHRoZSByZXR1cm5lZCBwb2ludGVyLgo+ICsgKi8KPiArc3Rh dGljIGNoYXIgKmNlcnRfdG9fcGVtX3N0cmluZyhYNTA5ICpjZXJ0KQo+ICt7Cj4gKyAgICBCSU8g ICAgICptZW0gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKPiArICAgIEJVRl9NRU0gKmJwdHIgPSBO VUxMOwo+ICsgICAgY2hhciAgICAqb3V0ID0gTlVMTDsKPiArCj4gKyAgICBpZiAoIW1lbSkgZ290 byBlcnI7Cj4gKwo+ICsgICAgLyogV3JpdGUgdGhlIFBFTSBjZXJ0aWZpY2F0ZSAqLwo+ICsgICAg aWYgKCFQRU1fd3JpdGVfYmlvX1g1MDkobWVtLCBjZXJ0KSkKPiArICAgICAgICBnb3RvIGVycjsK PiArCj4gKyAgICBCSU9fZ2V0X21lbV9wdHIobWVtLCAmYnB0cik7Cj4gKyAgICBpZiAoIWJwdHIg fHwgIWJwdHItPmxlbmd0aCkgZ290byBlcnI7Cj4gKwo+ICsgICAgb3V0ID0gYXZfbWFsbG9jKGJw dHItPmxlbmd0aCArIDEpOwo+ICsgICAgaWYgKCFvdXQpIGdvdG8gZXJyOwo+ICsKPiArICAgIG1l bWNweShvdXQsIGJwdHItPmRhdGEsIGJwdHItPmxlbmd0aCk7Cj4gKyAgICBvdXRbYnB0ci0+bGVu Z3RoXSA9ICdcMCc7Cj4gKwo+ICtjbGVhbnVwOgo+ICsgICAgQklPX2ZyZWUobWVtKTsKPiArICAg IHJldHVybiBvdXQ7Cj4gKwo+ICtlcnI6Cj4gKyAgICBmcmVlKG91dCk7Cj4gKyAgICBvdXQgPSBO VUxMOwo+ICsgICAgZ290byBjbGVhbnVwOwo+ICt9Cj4gKwo+ICsKPiArLyoqCj4gKyAqIEdlbmVy YXRlIGEgU0hBLTI1NiBmaW5nZXJwcmludCBvZiBhbiBYLjUwOSBjZXJ0aWZpY2F0ZS4KPiArICoK PiArICogQHBhcmFtIGN0eCAgICAgICBBVkZvcm1hdENvbnRleHQgZm9yIGxvZ2dpbmcgKGNhbiBi ZSBOVUxMKQo+ICsgKiBAcGFyYW0gY2VydCAgICAgIFg1MDkgY2VydGlmaWNhdGUgdG8gZmluZ2Vy cHJpbnQKPiArICogQHJldHVybiAgICAgICAgICBOZXdseSBhbGxvY2F0ZWQgZmluZ2VycHJpbnQg c3RyaW5nIGluICJBQTpCQjpDQzrigKYiIGZvcm1hdCwKPiArICogICAgICAgICAgICAgICAgICBv ciBOVUxMIG9uIGVycm9yIChsb2dzIHZpYSBhdl9sb2cgaWYgY3R4IGlzIG5vdCBOVUxMKS4KPiAr ICogICAgICAgICAgICAgICAgICBDYWxsZXIgbXVzdCBmcmVlKCkgdGhlIHJldHVybmVkIHN0cmlu Zy4KPiArICovCj4gK3N0YXRpYyBjaGFyICpnZW5lcmF0ZV9maW5nZXJwcmludChYNTA5ICpjZXJ0 KQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07Cj4gKyAgICBp bnQgbiA9IDA7Cj4gKyAgICBBVkJQcmludCBmaW5nZXJwcmludDsKPiArICAgIGNoYXIgKnJlc3Vs dCA9IE5VTEw7Cj4gKyAgICBpbnQgaTsKPiArCj4gKyAgICAvKiBUbyBwcmV2ZW50IGEgY3Jhc2gg ZHVyaW5nIGNsZWFudXAsIGFsd2F5cyBpbml0aWFsaXplIGl0LiAqLwo+ICsgICAgYXZfYnByaW50 X2luaXQoJmZpbmdlcnByaW50LCAwLCBBVl9CUFJJTlRfU0laRV9VTkxJTUlURUQpOwo+ICsKPiAr ICAgIGlmIChYNTA5X2RpZ2VzdChjZXJ0LCBFVlBfc2hhMjU2KCksIG1kLCAmbikgIT0gMSkgewo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBnZW5l cmF0ZSBmaW5nZXJwcmludCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigp LCBOVUxMKSk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChp ID0gMDsgaSA8IG47IGkrKykgewo+ICsgICAgICAgIGF2X2JwcmludGYoJmZpbmdlcnByaW50LCAi JTAyWCIsIG1kW2ldKTsKPiArICAgICAgICBpZiAoaSArIDEgPCBuKQo+ICsgICAgICAgICAgICBh dl9icHJpbnRmKCZmaW5nZXJwcmludCwgIjoiKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoIWZp bmdlcnByaW50LnN0ciB8fCAhc3RybGVuKGZpbmdlcnByaW50LnN0cikpIHsKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGaW5nZXJwcmludCBpcyBlbXB0eVxuIik7 Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmVzdWx0ID0gYXZfc3Ry ZHVwKGZpbmdlcnByaW50LnN0cik7Cj4gKyAgICBpZiAoIXJlc3VsdCkgewo+ICsgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IE91dCBvZiBtZW1vcnkgZ2VuZXJhdGluZyBm aW5nZXJwcmludFxuIik7Cj4gKyAgICB9Cj4gKwo+ICtlbmQ6Cj4gKyAgICBhdl9icHJpbnRfZmlu YWxpemUoJmZpbmdlcnByaW50LCBOVUxMKTsKPiArICAgIHJldHVybiByZXN1bHQ7Cj4gK30KPiAr Cj4gK2ludCBmZl9zc2xfcmVhZF9rZXlfY2VydChjaGFyICprZXlfdXJsLCBjaGFyICpjZXJ0X3Vy bCwgY2hhciAqa2V5X2J1Ziwgc2l6ZV90IGtleV9zeiwgY2hhciAqY2VydF9idWYsIHNpemVfdCBj ZXJ0X3N6LCBjaGFyICoqZmluZ2VycHJpbnQpCj4gK3sKPiArICAgIGludCByZXQgPSAwOwo+ICsg ICAgQklPICprZXlfYiA9IE5VTEwsICpjZXJ0X2IgPSBOVUxMOwo+ICsgICAgQVZCUHJpbnQga2V5 X2JwLCBjZXJ0X2JwOwo+ICsgICAgRVZQX1BLRVkgKnBrZXk7Cj4gKyAgICBYNTA5ICpjZXJ0Owo+ ICsgICAgY2hhciAqa2V5X3RlbSA9IE5VTEwsICpjZXJ0X3RlbSA9IE5VTEw7Cj4gKwo+ICsgICAg LyogVG8gcHJldmVudCBhIGNyYXNoIGR1cmluZyBjbGVhbnVwLCBhbHdheXMgaW5pdGlhbGl6ZSBp dC4gKi8KPiArICAgIGF2X2JwcmludF9pbml0KCZrZXlfYnAsIDEsIE1BWF9DRVJUSUZJQ0FURV9T SVpFKTsKPiArICAgIGF2X2JwcmludF9pbml0KCZjZXJ0X2JwLCAxLCBNQVhfQ0VSVElGSUNBVEVf U0laRSk7Cj4gKwo+ICsgICAgLyogUmVhZCBrZXkgZmlsZS4gKi8KPiArICAgIHJldCA9IGZmX3Vy bF9yZWFkX2FsbChrZXlfdXJsLCAma2V5X2JwKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIG9wZW4ga2V5 IGZpbGUgJXNcbiIsIGtleV91cmwpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsK PiArICAgIGlmICghKGtleV9iID0gQklPX25ldyhCSU9fc19tZW0oKSkpKSB7Cj4gKyAgICAgICAg cmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsK PiArICAgIEJJT193cml0ZShrZXlfYiwga2V5X2JwLnN0ciwga2V5X2JwLmxlbik7Cj4gKyAgICBw a2V5ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkoa2V5X2IsIE5VTEwsIE5VTEwsIE5VTEwpOwo+ ICsgICAgaWYgKCFwa2V5KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwg IlRMUzogRmFpbGVkIHRvIHJlYWQgcHJpdmF0ZSBrZXkgZnJvbSAlc1xuIiwga2V5X3VybCk7Cj4g KyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAg fQo+ICsKPiArICAgIC8qIFJlYWQgY2VydGlmaWNhdGUuICovCj4gKyAgICByZXQgPSBmZl91cmxf cmVhZF9hbGwoY2VydF91cmwsICZjZXJ0X2JwKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIG9wZW4gY2Vy dCBmaWxlICVzXG4iLCBjZXJ0X3VybCk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYgKCEoY2VydF9iID0gQklPX25ldyhCSU9fc19tZW0oKSkpKSB7Cj4gKyAgICAg ICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ ICsKPiArICAgIEJJT193cml0ZShjZXJ0X2IsIGNlcnRfYnAuc3RyLCBjZXJ0X2JwLmxlbik7Cj4g KyAgICBjZXJ0ID0gUEVNX3JlYWRfYmlvX1g1MDkoY2VydF9iLCBOVUxMLCBOVUxMLCBOVUxMKTsK PiArICAgIGlmICghY2VydCkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJUTFM6IEZhaWxlZCB0byByZWFkIGNlcnRpZmljYXRlIGZyb20gJXNcbiIsIGNlcnRfdXJsKTsK PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAg ICB9Cj4gKwo+ICsgICAga2V5X3RlbSA9IHBrZXlfdG9fcGVtX3N0cmluZyhwa2V5KTsKPiArICAg IGNlcnRfdGVtID0gY2VydF90b19wZW1fc3RyaW5nKGNlcnQpOwo+ICsKPiArICAgIHNucHJpbnRm KGtleV9idWYsICBrZXlfc3osICAiJXMiLCBrZXlfdGVtKTsKPiArICAgIHNucHJpbnRmKGNlcnRf YnVmLCBjZXJ0X3N6LCAiJXMiLCBjZXJ0X3RlbSk7Cj4gKwo+ICsgICAgLyogR2VuZXJhdGUgZmlu Z2VycHJpbnQuICovCj4gKyAgICAqZmluZ2VycHJpbnQgPSBnZW5lcmF0ZV9maW5nZXJwcmludChj ZXJ0KTsKPiArICAgIGlmICghKmZpbmdlcnByaW50KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIGdlbmVyYXRlIGZpbmdlcnByaW50IGZyb20g JXNcbiIsIGNlcnRfdXJsKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gKyAgICAg ICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICtlbmQ6Cj4gKyAgICBCSU9fZnJlZShrZXlfYik7 Cj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmtleV9icCwgTlVMTCk7Cj4gKyAgICBCSU9fZnJl ZShjZXJ0X2IpOwo+ICsgICAgYXZfYnByaW50X2ZpbmFsaXplKCZjZXJ0X2JwLCBOVUxMKTsKPiAr ICAgIGlmIChrZXlfdGVtKSBhdl9mcmVlKGtleV90ZW0pOwo+ICsgICAgaWYgKGNlcnRfdGVtKSBh dl9mcmVlKGNlcnRfdGVtKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgb3BlbnNzbF9nZW5fcHJpdmF0ZV9rZXkoRVZQX1BLRVkgKipwa2V5LCBFQ19LRVkgKiplY2tl eSkKPiArewo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsgICAgLyoqCj4gKyAgICAgKiBOb3Rl IHRoYXQgc2VjcDI1NnIxIGluIG9wZW5zc2wgaXMgY2FsbGVkIE5JRF9YOV82Ml9wcmltZTI1NnYx IG9yIHByaW1lMjU2djEgaW4gc3RyaW5nLAo+ICsgICAgICogbm90IE5JRF9zZWNwMjU2azEgb3Ig c2VjcDI1NmsxIGluIHN0cmluZy4KPiArICAgICAqCj4gKyAgICAgKiBUT0RPOiBTaG91bGQgY2hv b3NlIHRoZSBjdXJ2ZXMgaW4gQ2xpZW50SGVsbG8uc3VwcG9ydGVkX2dyb3VwcywgZm9yIGV4YW1w bGU6Cj4gKyAgICAgKiAgICAgIFN1cHBvcnRlZCBHcm91cDogeDI1NTE5ICgweDAwMWQpCj4gKyAg ICAgKiAgICAgIFN1cHBvcnRlZCBHcm91cDogc2VjcDI1NnIxICgweDAwMTcpCj4gKyAgICAgKiAg ICAgIFN1cHBvcnRlZCBHcm91cDogc2VjcDM4NHIxICgweDAwMTgpCj4gKyAgICAgKi8KPiArI2lm IE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAwMDAwTCAvKiBPcGVuU1NMIDMuMCAqLwo+ ICsgICAgRUNfR1JPVVAgKmVjZ3JvdXAgPSBOVUxMOwo+ICsgICAgaW50IGN1cnZlID0gTklEX1g5 XzYyX3ByaW1lMjU2djE7Cj4gKyNlbHNlCj4gKyAgICBjb25zdCBjaGFyICpjdXJ2ZSA9IFNOX1g5 XzYyX3ByaW1lMjU2djE7Cj4gKyNlbmRpZgo+ICsKPiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1C RVIgPCAweDMwMDAwMDAwTCAvKiBPcGVuU1NMIDMuMCAqLwo+ICsgICAgKnBrZXkgPSBFVlBfUEtF WV9uZXcoKTsKPiArICAgICplY2tleSA9IEVDX0tFWV9uZXcoKTsKPiArICAgIGVjZ3JvdXAgPSBF Q19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShjdXJ2ZSk7Cj4gKyAgICBpZiAoIWVjZ3JvdXApIHsK PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBDcmVhdGUgRUMgZ3Jv dXAgYnkgY3VydmU9JWQgZmFpbGVkLCAlcyIsIGN1cnZlLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9n ZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPiArICAgIH0K PiArCj4gKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEwMDAwMEwgLy8gdjEuMS54 Cj4gKyAgICAvKiBGb3Igb3BlbnNzbCAxLjAsIHdlIG11c3Qgc2V0IHRoZSBncm91cCBwYXJhbWV0 ZXJzLCBzbyB0aGF0IGNlcnQgaXMgb2suICovCj4gKyAgICBFQ19HUk9VUF9zZXRfYXNuMV9mbGFn KGVjZ3JvdXAsIE9QRU5TU0xfRUNfTkFNRURfQ1VSVkUpOwo+ICsjZW5kaWYKPiArCj4gKyAgICBp ZiAoRUNfS0VZX3NldF9ncm91cCgqZWNrZXksIGVjZ3JvdXApICE9IDEpIHsKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBHZW5lcmF0ZSBwcml2YXRlIGtleSwgRUNf S0VZX3NldF9ncm91cCBmYWlsZWQsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJy b3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoRUNfS0VZX2dlbmVyYXRlX2tleSgqZWNrZXkpICE9IDEpIHsKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBHZW5lcmF0ZSBwcml2YXRlIGtleSwgRUNf S0VZX2dlbmVyYXRlX2tleSBmYWlsZWQsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRf ZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoRVZQX1BLRVlfc2V0MV9FQ19LRVkoKnBrZXksICplY2tleSkgIT0gMSkgewo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEdlbmVyYXRlIHByaXZh dGUga2V5LCBFVlBfUEtFWV9zZXQxX0VDX0tFWSBmYWlsZWQsICVzXG4iLCBFUlJfZXJyb3Jfc3Ry aW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsK PiArICAgIH0KPiArI2Vsc2UKPiArICAgICpwa2V5ID0gRVZQX0VDX2dlbihjdXJ2ZSk7Cj4gKyAg ICBpZiAoISpwa2V5KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRM UzogR2VuZXJhdGUgcHJpdmF0ZSBrZXksIEVWUF9FQ19nZW4gY3VydmU9JXMgZmFpbGVkLCAlc1xu IiwgY3VydmUsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAg ICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsjZW5kaWYKPiArICAgIGdvdG8gZW5k Owo+ICsKPiArZWludmFsX2VuZDoKPiArICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiArZW5k Ogo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MzAwMDAwMDBMIC8qIE9wZW5TU0wg My4wICovCj4gKyAgICBFQ19HUk9VUF9mcmVlKGVjZ3JvdXApOwo+ICsjZW5kaWYKPiArICAgIHJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgb3BlbnNzbF9nZW5fY2VydGlmaWNhdGUo RVZQX1BLRVkgKnBrZXksIFg1MDkgKipjZXJ0LCBjaGFyICoqZmluZ2VycHJpbnQpCj4gK3sKPiAr ICAgIGludCByZXQgPSAwLCBzZXJpYWwsIGV4cGlyZV9kYXk7Cj4gKyAgICBjb25zdCBjaGFyICph b3IgPSAibGF2ZiI7Cj4gKyAgICBYNTA5X05BTUUqIHN1YmplY3QgPSBOVUxMOwo+ICsKPiArICAg ICpjZXJ0PSBYNTA5X25ldygpOwo+ICsgICAgaWYgKCEqY2VydCkgewo+ICsgICAgICAgIGdvdG8g ZW5vbWVtX2VuZDsKPiArICAgIH0KPiArCj4gKyAgICAvLyBUT0RPOiBTdXBwb3J0IG5vbi1zZWxm LXNpZ25lZCBjZXJ0aWZpY2F0ZSwgZm9yIGV4YW1wbGUsIGxvYWQgZnJvbSBhIGZpbGUuCj4gKyAg ICBzdWJqZWN0ID0gWDUwOV9OQU1FX25ldygpOwo+ICsgICAgaWYgKCFzdWJqZWN0KSB7Cj4gKyAg ICAgICAgZ290byBlbm9tZW1fZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHNlcmlhbCA9IChpbnQp YXZfZ2V0X3JhbmRvbV9zZWVkKCk7Cj4gKyAgICBpZiAoQVNOMV9JTlRFR0VSX3NldChYNTA5X2dl dF9zZXJpYWxOdW1iZXIoKmNlcnQpLCBzZXJpYWwpICE9IDEpIHsKPiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IHNlcmlhbCwgJXNcbiIsIEVS Ul9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAgICAgICAgZ290byBl aW52YWxfZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChYNTA5X05BTUVfYWRkX2VudHJ5X2J5 X3R4dChzdWJqZWN0LCAiQ04iLCBNQlNUUklOR19BU0MsIGFvciwgc3RybGVuKGFvciksIC0xLCAw KSAhPSAxKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFp bGVkIHRvIHNldCBDTiwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBO VUxMKSk7Cj4gKyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlm IChYNTA5X3NldF9pc3N1ZXJfbmFtZSgqY2VydCwgc3ViamVjdCkgIT0gMSkgewo+ICsgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBzZXQgaXNzdWVyLCAl c1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPiArICAgICAg ICBnb3RvIGVpbnZhbF9lbmQ7Cj4gKyAgICB9Cj4gKyAgICBpZiAoWDUwOV9zZXRfc3ViamVjdF9u YW1lKCpjZXJ0LCBzdWJqZWN0KSAhPSAxKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIHNldCBzdWJqZWN0IG5hbWUsICVzXG4iLCBFUlJfZXJy b3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFs X2VuZDsKPiArICAgIH0KPiArCj4gKyAgICBleHBpcmVfZGF5ID0gMzY1Owo+ICsgICAgaWYgKCFY NTA5X2dtdGltZV9hZGooWDUwOV9nZXRfbm90QmVmb3JlKCpjZXJ0KSwgMCkpIHsKPiArICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IG5vdEJlZm9y ZSwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAg ICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsgICAgaWYgKCFYNTA5X2dtdGltZV9h ZGooWDUwOV9nZXRfbm90QWZ0ZXIoKmNlcnQpLCA2MCo2MCoyNCpleHBpcmVfZGF5KSkgewo+ICsg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBzZXQgbm90 QWZ0ZXIsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoWDUwOV9z ZXRfdmVyc2lvbigqY2VydCwgMikgIT0gMSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBzZXQgdmVyc2lvbiwgJXNcbiIsIEVSUl9lcnJvcl9z dHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAgICAgICAgZ290byBlaW52YWxfZW5k Owo+ICsgICAgfQo+ICsKPiArICAgIGlmIChYNTA5X3NldF9wdWJrZXkoKmNlcnQsIHBrZXkpICE9 IDEpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQg dG8gc2V0IHB1YmxpYyBrZXksICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3Io KSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPiArICAgIH0KPiArCj4gKyAg ICBpZiAoIVg1MDlfc2lnbigqY2VydCwgcGtleSwgRVZQX3NoYTEoKSkpIHsKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2lnbiBjZXJ0aWZpY2F0 ZSwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAg ICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsKPiArICAgICpmaW5nZXJwcmludCA9 IGdlbmVyYXRlX2ZpbmdlcnByaW50KCpjZXJ0KTsKPiArICAgIGlmICghKmZpbmdlcnByaW50KSB7 Cj4gKyAgICAgICAgZ290byBlbm9tZW1fZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGdvdG8gZW5k Owo+ICtlbm9tZW1fZW5kOgo+ICsgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgZ290 byBlbmQ7Cj4gK2VpbnZhbF9lbmQ6Cj4gKyAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gK2Vu ZDoKPiArICAgIFg1MDlfTkFNRV9mcmVlKHN1YmplY3QpOwo+ICsgICAgLy9hdl9icHJpbnRfZmlu YWxpemUoJmZpbmdlcnByaW50LCBOVUxMKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4g K2ludCBmZl9zc2xfZ2VuX2tleV9jZXJ0KGNoYXIgKmtleV9idWYsIHNpemVfdCBrZXlfc3osIGNo YXIgKmNlcnRfYnVmLCBzaXplX3QgY2VydF9zeiwgY2hhciAqKmZpbmdlcnByaW50KQo+ICt7Cj4g KyAgICBpbnQgcmV0ID0gMDsKPiArICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKPiArICAgIEVD X0tFWSAqZWNfa2V5ID0gTlVMTDsKPiArICAgIFg1MDkgKmNlcnQgPSBOVUxMOwo+ICsgICAgY2hh ciAqa2V5X3RlbSA9IE5VTEwsICpjZXJ0X3RlbSA9IE5VTEw7Cj4gKwo+ICsgICAgcmV0ID0gb3Bl bnNzbF9nZW5fcHJpdmF0ZV9rZXkoJnBrZXksICZlY19rZXkpOwo+ICsgICAgaWYgKHJldCA8IDAp IGdvdG8gZXJyb3I7Cj4gKwo+ICsgICAgcmV0ID0gb3BlbnNzbF9nZW5fY2VydGlmaWNhdGUocGtl eSwgJmNlcnQsIGZpbmdlcnByaW50KTsKPiArICAgIGlmIChyZXQgPCAwKSBnb3RvIGVycm9yOwo+ ICsKPiArICAgIGtleV90ZW0gPSBwa2V5X3RvX3BlbV9zdHJpbmcocGtleSk7Cj4gKyAgICBjZXJ0 X3RlbSA9IGNlcnRfdG9fcGVtX3N0cmluZyhjZXJ0KTsKPiArCj4gKyAgICBzbnByaW50ZihrZXlf YnVmLCAga2V5X3N6LCAgIiVzIiwga2V5X3RlbSk7Cj4gKyAgICBzbnByaW50ZihjZXJ0X2J1Ziwg Y2VydF9zeiwgIiVzIiwgY2VydF90ZW0pOwo+ICsKPiArICAgIGlmIChrZXlfdGVtKSBhdl9mcmVl KGtleV90ZW0pOwo+ICsgICAgaWYgKGNlcnRfdGVtKSBhdl9mcmVlKGNlcnRfdGVtKTsKPiArZXJy b3I6Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsKPiArLyoqCj4gKyAqIERlc2VyaWFs aXplIGEgUEVN4oCQZW5jb2RlZCBwcml2YXRlIG9yIHB1YmxpYyBrZXkgZnJvbSBhIE5VTC10ZXJt aW5hdGVkIEMgc3RyaW5nLgo+ICsgKgo+ICsgKiBAcGFyYW0gcGVtX3N0ciAgIFRoZSBQRU0gdGV4 dCwgZS5nLgo+ICsgKiAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0t LS1cbuKAplxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxuIgo+ICsgKiBAcGFyYW0gaXNfcHJp diAgIElmIG5vbi16ZXJvLCBwYXJzZSBhcyBhIFBSSVZBVEUga2V5OyBvdGhlcndpc2UsIHBhcnNl IGFzIGEgUFVCTElDIGtleS4KPiArICogQHJldHVybiAgICAgICAgICBFVlBfUEtFWSogb24gc3Vj Y2VzcyAobXVzdCBFVlBfUEtFWV9mcmVlKCkpLCBvciBOVUxMIG9uIGVycm9yLgo+ICsgKi8KPiAr c3RhdGljIEVWUF9QS0VZICpwa2V5X2Zyb21fcGVtX3N0cmluZyhjb25zdCBjaGFyICpwZW1fc3Ry LCBpbnQgaXNfcHJpdikKPiArewo+ICsgICAgQklPICptZW0gPSBCSU9fbmV3X21lbV9idWYocGVt X3N0ciwgLTEpOwo+ICsgICAgaWYgKCFtZW0pIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCAiQklPX25ld19tZW1fYnVmIGZhaWxlZFxuIik7Cj4gKyAgICAgICAgcmV0dXJu IE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgRVZQX1BLRVkgKnBrZXkgPSBOVUxMOwo+ICsgICAg aWYgKGlzX3ByaXYpIHsKPiArICAgICAgICBwa2V5ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXko bWVtLCBOVUxMLCBOVUxMLCBOVUxMKTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgcGtleSA9 IFBFTV9yZWFkX2Jpb19QVUJLRVkobWVtLCBOVUxMLCBOVUxMLCBOVUxMKTsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoIXBrZXkpCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwg IkZhaWxlZCB0byBwYXJzZSAlcyBrZXkgZnJvbSBzdHJpbmdcbiIsCj4gKyAgICAgICAgICAgICAg aXNfcHJpdiA/ICJwcml2YXRlIiA6ICJwdWJsaWMiKTsKPiArCj4gKyAgICBCSU9fZnJlZShtZW0p Owo+ICsgICAgcmV0dXJuIHBrZXk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBEZXNlcmlhbGl6ZSBh IFBFTeKAkGVuY29kZWQgY2VydGlmaWNhdGUgZnJvbSBhIE5VTC10ZXJtaW5hdGVkIEMgc3RyaW5n Lgo+ICsgKgo+ICsgKiBAcGFyYW0gcGVtX3N0ciAgIFRoZSBQRU0gdGV4dCwgZS5nLgo+ICsgKiAg ICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbuKAplxuLS0tLS1F TkQgQ0VSVElGSUNBVEUtLS0tLVxuIgo+ICsgKiBAcmV0dXJuICAgICAgICAgIFg1MDkqIG9uIHN1 Y2Nlc3MgKG11c3QgWDUwOV9mcmVlKCkpLCBvciBOVUxMIG9uIGVycm9yLgo+ICsgKi8KPiArc3Rh dGljIFg1MDkgKmNlcnRfZnJvbV9wZW1fc3RyaW5nKGNvbnN0IGNoYXIgKnBlbV9zdHIpCj4gK3sK PiArICAgIEJJTyAqbWVtID0gQklPX25ld19tZW1fYnVmKHBlbV9zdHIsIC0xKTsKPiArICAgIGlm ICghbWVtKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkJJT19uZXdf bWVtX2J1ZiBmYWlsZWRcbiIpOwo+ICsgICAgICAgIHJldHVybiBOVUxMOwo+ICsgICAgfQo+ICsK PiArICAgIFg1MDkgKmNlcnQgPSBQRU1fcmVhZF9iaW9fWDUwOShtZW0sIE5VTEwsIE5VTEwsIE5V TEwpOwo+ICsgICAgaWYgKCFjZXJ0KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19F UlJPUiwgIkZhaWxlZCB0byBwYXJzZSBjZXJ0aWZpY2F0ZSBmcm9tIHN0cmluZ1xuIik7Cj4gKyAg ICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgQklPX2ZyZWUobWVtKTsKPiAr ICAgIHJldHVybiBjZXJ0Owo+ICt9Cj4gKwo+ICsKPiAgdHlwZWRlZiBzdHJ1Y3QgVExTQ29udGV4 dCB7Cj4gICAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKPiAgICAgIFRMU1NoYXJlZCB0bHNfc2hh cmVkOwo+IEBAIC0zOCw4ICs0NzEsNTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVExTQ29udGV4dCB7Cj4g ICAgICBCSU9fTUVUSE9EKiB1cmxfYmlvX21ldGhvZDsKPiAgI2VuZGlmCj4gICAgICBpbnQgaW9f ZXJyOwo+ICsgICAgY2hhciBlcnJvcl9tZXNzYWdlWzI1Nl07Cj4gIH0gVExTQ29udGV4dDsKPgo+ ICsvKioKPiArICogUmV0cmlldmVzIHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGUgbGF0ZXN0IE9w ZW5TU0wgZXJyb3IuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBlcnJv ciBjb2RlIGZyb20gdGhlIHRocmVhZCdzIGVycm9yIHF1ZXVlLCBjb252ZXJ0cyBpdAo+ICsgKiB0 byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZywgYW5kIHN0b3JlcyBpdCBpbiB0aGUgVExTQ29udGV4 dCdzIGVycm9yX21lc3NhZ2UgZmllbGQuCj4gKyAqIFRoZSBlcnJvciBxdWV1ZSBpcyB0aGVuIGNs ZWFyZWQgdXNpbmcgRVJSX2NsZWFyX2Vycm9yKCkuCj4gKyAqLwo+ICtzdGF0aWMgY29uc3QgY2hh ciogb3BlbnNzbF9nZXRfZXJyb3IoVExTQ29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBpbnQgcjIg PSBFUlJfZ2V0X2Vycm9yKCk7Cj4gKyAgICBpZiAocjIpIHsKPiArICAgICAgICBFUlJfZXJyb3Jf c3RyaW5nX24ocjIsIGN0eC0+ZXJyb3JfbWVzc2FnZSwgc2l6ZW9mKGN0eC0+ZXJyb3JfbWVzc2Fn ZSkpOwo+ICsgICAgfSBlbHNlCj4gKyAgICAgICAgY3R4LT5lcnJvcl9tZXNzYWdlWzBdID0gJ1ww JzsKPiArCj4gKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKPiArICAgIHJldHVybiBjdHgtPmVycm9y X21lc3NhZ2U7Cj4gK30KPiArCj4gK2ludCBmZl9kdGxzX3NldF91ZHAoVVJMQ29udGV4dCAqaCwg VVJMQ29udGV4dCAqdWRwKQo+ICt7Cj4gKyAgICBUTFNDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRh Owo+ICsgICAgYy0+dGxzX3NoYXJlZC51ZHAgPSB1ZHA7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiAraW50IGZmX2R0bHNfZXhwb3J0X21hdGVyaWFscyhVUkxDb250ZXh0ICpoLCBjaGFyICpk dGxzX3NydHBfbWF0ZXJpYWxzLCBzaXplX3QgbWF0ZXJpYWxzX3N6KQo+ICt7Cj4gKyAgICBpbnQg cmV0ID0gMDsKPiArICAgIGNvbnN0IGNoYXIqIGRzdCA9ICJFWFRSQUNUT1ItZHRsc19zcnRwIjsK PiArICAgIFRMU0NvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgcmV0ID0gU1NM X2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWwoYy0+c3NsLCBkdGxzX3NydHBfbWF0ZXJpYWxzLCBtYXRl cmlhbHNfc3osCj4gKyAgICAgICAgZHN0LCBzdHJsZW4oZHN0KSwgTlVMTCwgMCwgMCk7Cj4gKyAg ICBpZiAoIXJldCkgewo+ICsgICAgICAgIGF2X2xvZyhjLCBBVl9MT0dfRVJST1IsICJUTFM6IEZh aWxlZCB0byBleHBvcnQgU1JUUCBtYXRlcmlhbCwgJXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKGMp KTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiAraW50IGZmX2R0bHNfc3RhdGUoVVJMQ29udGV4dCAqaCkKPiArewo+ICsgICAgVExTQ29u dGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPiArICAgIHJldHVybiBjLT50bHNfc2hhcmVkLnN0YXRl Owo+ICt9Cj4gKwo+ICAvKiBPcGVuU1NMIDEuMC4yIG9yIGJlbG93LCB0aGVuIHlvdSB3b3VsZCB1 c2UgU1NMX2xpYnJhcnlfaW5pdC4gSWYgeW91IGFyZQo+ICAgKiB1c2luZyBPcGVuU1NMIDEuMS4w IG9yIGFib3ZlLCB0aGVuIHRoZSBsaWJyYXJ5IHdpbGwgaW5pdGlhbGl6ZQo+ICAgKiBpdHNlbGYg YXV0b21hdGljYWxseS4KPiBAQCAtMTIxLDcgKzYwMiw3IEBAIHZvaWQgZmZfb3BlbnNzbF9kZWlu aXQodm9pZCkKPiAgfQo+ICAjZW5kaWYKPgo+IC1zdGF0aWMgaW50IHByaW50X3Rsc19lcnJvcihV UkxDb250ZXh0ICpoLCBpbnQgcmV0KQo+ICtzdGF0aWMgaW50IHByaW50X3NzbF9lcnJvcihVUkxD b250ZXh0ICpoLCBpbnQgcmV0KQo+ICB7Cj4gICAgICBUTFNDb250ZXh0ICpjID0gaC0+cHJpdl9k YXRhOwo+ICAgICAgaW50IHByaW50ZWQgPSAwLCBlLCBhdmVyciA9IEFWRVJST1IoRUlPKTsKPiBA QCAtMTkzLDcgKzY3NCw3IEBAIHN0YXRpYyBpbnQgdXJsX2Jpb19kZXN0cm95KEJJTyAqYikKPiAg c3RhdGljIGludCB1cmxfYmlvX2JyZWFkKEJJTyAqYiwgY2hhciAqYnVmLCBpbnQgbGVuKQo+ICB7 Cj4gICAgICBUTFNDb250ZXh0ICpjID0gR0VUX0JJT19EQVRBKGIpOwo+IC0gICAgaW50IHJldCA9 IGZmdXJsX3JlYWQoYy0+dGxzX3NoYXJlZC50Y3AsIGJ1ZiwgbGVuKTsKPiArICAgIGludCByZXQg PSBmZnVybF9yZWFkKGMtPnRsc19zaGFyZWQuaXNfZHRscyA/IGMtPnRsc19zaGFyZWQudWRwIDog Yy0+dGxzX3NoYXJlZC50Y3AsIGJ1ZiwgbGVuKTsKPiAgICAgIGlmIChyZXQgPj0gMCkKPiAgICAg ICAgICByZXR1cm4gcmV0Owo+ICAgICAgQklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOwo+IEBAIC0y MDksNyArNjkwLDcgQEAgc3RhdGljIGludCB1cmxfYmlvX2JyZWFkKEJJTyAqYiwgY2hhciAqYnVm LCBpbnQgbGVuKQo+ICBzdGF0aWMgaW50IHVybF9iaW9fYndyaXRlKEJJTyAqYiwgY29uc3QgY2hh ciAqYnVmLCBpbnQgbGVuKQo+ICB7Cj4gICAgICBUTFNDb250ZXh0ICpjID0gR0VUX0JJT19EQVRB KGIpOwo+IC0gICAgaW50IHJldCA9IGZmdXJsX3dyaXRlKGMtPnRsc19zaGFyZWQudGNwLCBidWYs IGxlbik7Cj4gKyAgICBpbnQgcmV0ID0gZmZ1cmxfd3JpdGUoYy0+dGxzX3NoYXJlZC5pc19kdGxz ID8gYy0+dGxzX3NoYXJlZC51ZHAgOiBjLT50bHNfc2hhcmVkLnRjcCwgYnVmLCBsZW4pOwo+ICAg ICAgaWYgKHJldCA+PSAwKQo+ICAgICAgICAgIHJldHVybiByZXQ7Cj4gICAgICBCSU9fY2xlYXJf cmV0cnlfZmxhZ3MoYik7Cj4gQEAgLTI1MCwxMSArNzMxLDMwMCBAQCBzdGF0aWMgQklPX01FVEhP RCB1cmxfYmlvX21ldGhvZCA9IHsKPiAgfTsKPiAgI2VuZGlmCj4KPiArc3RhdGljIGF2X2NvbGQg dm9pZCBpbml0X2Jpb19tZXRob2QoVVJMQ29udGV4dCAqaCkKPiArewo+ICsgICAgVExTQ29udGV4 dCAqcCA9IGgtPnByaXZfZGF0YTsKPiArICAgIEJJTyAqYmlvOwo+ICsjaWYgT1BFTlNTTF9WRVJT SU9OX05VTUJFUiA+PSAweDEwMTAwMDBmTAo+ICsgICAgcC0+dXJsX2Jpb19tZXRob2QgPSBCSU9f bWV0aF9uZXcoQklPX1RZUEVfU09VUkNFX1NJTkssICJ1cmxwcm90b2NvbCBiaW8iKTsKPiArICAg IEJJT19tZXRoX3NldF93cml0ZShwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19id3JpdGUpOwo+ ICsgICAgQklPX21ldGhfc2V0X3JlYWQocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fYnJlYWQp Owo+ICsgICAgQklPX21ldGhfc2V0X3B1dHMocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fYnB1 dHMpOwo+ICsgICAgQklPX21ldGhfc2V0X2N0cmwocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9f Y3RybCk7Cj4gKyAgICBCSU9fbWV0aF9zZXRfY3JlYXRlKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxf YmlvX2NyZWF0ZSk7Cj4gKyAgICBCSU9fbWV0aF9zZXRfZGVzdHJveShwLT51cmxfYmlvX21ldGhv ZCwgdXJsX2Jpb19kZXN0cm95KTsKPiArICAgIGJpbyA9IEJJT19uZXcocC0+dXJsX2Jpb19tZXRo b2QpOwo+ICsgICAgQklPX3NldF9kYXRhKGJpbywgcCk7Cj4gKyNlbHNlCj4gKyAgICBiaW8gPSBC SU9fbmV3KCZ1cmxfYmlvX21ldGhvZCk7Cj4gKyAgICBiaW8tPnB0ciA9IHA7Cj4gKyNlbmRpZgo+ ICsgICAgU1NMX3NldF9iaW8ocC0+c3NsLCBiaW8sIGJpbyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIG9wZW5zc2xfaW5mb19jYWxsYmFjayhjb25zdCBTU0wgKnNzbCwgaW50IHdoZXJlLCBpbnQg cmV0KSB7Cj4gKyAgICBjb25zdCBjaGFyICptZXRob2QgPSAidW5kZWZpbmVkIjsKPiArICAgIFRM U0NvbnRleHQgKmN0eCA9IChUTFNDb250ZXh0KilTU0xfZ2V0X2V4X2RhdGEoc3NsLCAwKTsKPiAr Cj4gKyAgICBpZiAod2hlcmUgJiBTU0xfU1RfQ09OTkVDVCkgewo+ICsgICAgICAgIG1ldGhvZCA9 ICJTU0xfY29ubmVjdCI7Cj4gKyAgICB9IGVsc2UgaWYgKHdoZXJlICYgU1NMX1NUX0FDQ0VQVCkK PiArICAgICAgICBtZXRob2QgPSAiU1NMX2FjY2VwdCI7Cj4gKwo+ICsgICAgaWYgKHdoZXJlICYg U1NMX0NCX0xPT1ApIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJJbmZv IG1ldGhvZD0lcyBzdGF0ZT0lcyglcyksIHdoZXJlPSVkLCByZXQ9JWRcbiIsCj4gKyAgICAgICAg ICAgICAgIG1ldGhvZCwgU1NMX3N0YXRlX3N0cmluZyhzc2wpLCBTU0xfc3RhdGVfc3RyaW5nX2xv bmcoc3NsKSwgd2hlcmUsIHJldCk7Cj4gKyAgICB9IGVsc2UgaWYgKHdoZXJlICYgU1NMX0NCX0FM RVJUKSB7Cj4gKyAgICAgICAgbWV0aG9kID0gKHdoZXJlICYgU1NMX0NCX1JFQUQpID8gInJlYWQi OiJ3cml0ZSI7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiQWxlcnQgbWV0 aG9kPSVzIHN0YXRlPSVzKCVzKSwgd2hlcmU9JWQsIHJldD0lZFxuIiwKPiArICAgICAgICAgICAg ICAgbWV0aG9kLCBTU0xfc3RhdGVfc3RyaW5nKHNzbCksIFNTTF9zdGF0ZV9zdHJpbmdfbG9uZyhz c2wpLCB3aGVyZSwgcmV0KTsKPiArICAgIH0KPiArfQo+ICsKPiArLyoqCj4gKyAqIEFsd2F5cyBy ZXR1cm4gMSB0byBhY2NlcHQgYW55IGNlcnRpZmljYXRlLiBUaGlzIGlzIGJlY2F1c2Ugd2UgYWxs b3cgdGhlIHBlZXIgdG8KPiArICogdXNlIGEgdGVtcG9yYXJ5IHNlbGYtc2lnbmVkIGNlcnRpZmlj YXRlIGZvciBEVExTLgo+ICsgKi8KPiArc3RhdGljIGludCBvcGVuc3NsX2R0bHNfdmVyaWZ5X2Nh bGxiYWNrKGludCBwcmV2ZXJpZnlfb2ssIFg1MDlfU1RPUkVfQ1RYICpjdHgpCj4gK3sKPiArICAg IHJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR0bHNfaGFuZHNoYWtlKFVSTENvbnRl eHQgKmgpCj4gK3sKPiArICAgIGludCByZXQgPSAwLCByMCwgcjE7Cj4gKyAgICBUTFNDb250ZXh0 ICpwID0gaC0+cHJpdl9kYXRhOwo+ICsKPiArICAgIHIwID0gU1NMX2RvX2hhbmRzaGFrZShwLT5z c2wpOwo+ICsgICAgcjEgPSBTU0xfZ2V0X2Vycm9yKHAtPnNzbCwgcjApOwo+ICsgICAgaWYgKHIw IDw9IDApIHsKPiArICAgICAgICBpZiAocjEgIT0gU1NMX0VSUk9SX1dBTlRfUkVBRCAmJiByMSAh PSBTU0xfRVJST1JfV0FOVF9XUklURSAmJiByMSAhPSBTU0xfRVJST1JfWkVST19SRVRVUk4pIHsK PiArICAgICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJPUiwgIlRMUzogUmVhZCBmYWlsZWQs IHIwPSVkLCByMT0lZCAlc1xuIiwgcjAsIHIxLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cj4gKyAg ICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4g KyAgICAgICAgfQo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBhdl9sb2cocCwgQVZfTE9HX1RS QUNFLCAiVExTOiBSZWFkICVkIGJ5dGVzLCByMD0lZCwgcjE9JWRcbiIsIHIwLCByMCwgcjEpOwo+ ICsgICAgfQo+ICsKPiArICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIERUTFMgaXMgY29tcGxldGVk LiAqLwo+ICsgICAgaWYgKFNTTF9pc19pbml0X2ZpbmlzaGVkKHAtPnNzbCkgIT0gMSkKPiArICAg ICAgICBnb3RvIGVuZDsKPiArCj4gKyAgICBwLT50bHNfc2hhcmVkLnN0YXRlID0gRFRMU19TVEFU RV9GSU5JU0hFRDsKPiArZW5kOgo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IGF2X2NvbGQgaW50IG9wZW5zc2xfaW5pdF9jYV9rZXlfY2VydChVUkxDb250ZXh0ICpoKQo+ICt7 Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgVExTQ29udGV4dCAqcCA9IGgtPnByaXZfZGF0YTsKPiAr ICAgIFRMU1NoYXJlZCAqYyA9ICZwLT50bHNfc2hhcmVkOwo+ICsgICAgRVZQX1BLRVkgKnBrZXkg PSBOVUxMOwo+ICsgICAgWDUwOSAqY2VydCA9IE5VTEw7Cj4gKyAgICAvKiBzZXR1cCBjYSwgcHJp dmF0ZSBrZXksIGNlcnRpZmljYXRlICovCj4gKyAgICBpZiAoYy0+Y2FfZmlsZSkgewo+ICsgICAg ICAgIGlmICghU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMocC0+Y3R4LCBjLT5jYV9maWxl LCBOVUxMKSkKPiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlNTTF9DVFhf bG9hZF92ZXJpZnlfbG9jYXRpb25zICVzXG4iLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgaWYgKGMtPmNlcnRfZmlsZSkgewo+ICsgICAgICAgIHJldCA9IFNTTF9D VFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUocC0+Y3R4LCBjLT5jZXJ0X2ZpbGUpOwo+ICsg ICAgICAgIGlmIChyZXQgPD0gMCkgewo+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VS Uk9SLCAiVW5hYmxlIHRvIGxvYWQgY2VydCBmaWxlICVzOiAlc1xuIiwKPiArICAgICAgICAgICAg ICAgYy0+Y2VydF9maWxlLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cj4gKyAgICAgICAgICAgIHJl dCA9IEFWRVJST1IoRUlPKTsKPiArICAgICAgICAgICAgZ290byBmYWlsOwo+ICsgICAgICAgIH0K PiArICAgIH0gZWxzZSBpZiAocC0+dGxzX3NoYXJlZC5jZXJ0X2J1Zikgewo+ICsgICAgICAgIGNl cnQgPSBjZXJ0X2Zyb21fcGVtX3N0cmluZyhwLT50bHNfc2hhcmVkLmNlcnRfYnVmKTsKPiArICAg ICAgICBpZiAoU1NMX0NUWF91c2VfY2VydGlmaWNhdGUocC0+Y3R4LCBjZXJ0KSAhPSAxKSB7Cj4g KyAgICAgICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJTU0w6IEluaXQgU1NMX0NUWF91 c2VfY2VydGlmaWNhdGUgZmFpbGVkLCAlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICsg ICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfSBlbHNlIGlmIChwLT50bHNfc2hhcmVkLmlzX2R0bHMp ewo+ICsgICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgY2VydCBmYWls ZWQsICVzXG4iLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJP UihFSU5WQUwpOwo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAo Yy0+a2V5X2ZpbGUpIHsKPiArICAgICAgICByZXQgPSBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2Zp bGUocC0+Y3R4LCBjLT5rZXlfZmlsZSwgU1NMX0ZJTEVUWVBFX1BFTSk7Cj4gKyAgICAgICAgaWYg KHJldCA8PSAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gbG9hZCBrZXkgZmlsZSAlczogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICBjLT5rZXlf ZmlsZSwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9S KEVJTyk7Cj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDsKPiArICAgICAgICB9Cj4gKyAgICB9IGVs c2UgaWYgKHAtPnRsc19zaGFyZWQua2V5X2J1Zikgewo+ICsgICAgICAgIHBrZXkgPSBwa2V5X2Zy b21fcGVtX3N0cmluZyhwLT50bHNfc2hhcmVkLmtleV9idWYsIDEpOwo+ICsgICAgICAgIGlmIChT U0xfQ1RYX3VzZV9Qcml2YXRlS2V5KHAtPmN0eCwgcGtleSkgIT0gMSkgewo+ICsgICAgICAgICAg ICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiVExTOiBJbml0IFNTTF9DVFhfdXNlX1ByaXZhdGVL ZXkgZmFpbGVkLCAlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICsgICAgICAgICAgICBy ZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAg ICAgfQo+ICsgICAgfSBlbHNlIGlmIChwLT50bHNfc2hhcmVkLmlzX2R0bHMpewo+ICsgICAgICAg IGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgcGtleSBmYWlsZWQsICVzXG4iLCBv cGVuc3NsX2dldF9lcnJvcihwKSk7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArICAgIHJldCA9IDA7Cj4gK2ZhaWw6Cj4g KyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogT25jZSB0aGUgRFRMUyByb2xl IGhhcyBiZWVuIG5lZ290aWF0ZWQgLSBhY3RpdmUgZm9yIHRoZSBEVExTIGNsaWVudCBvciBwYXNz aXZlIGZvciB0aGUKPiArICogRFRMUyBzZXJ2ZXIgLSB3ZSBwcm9jZWVkIHRvIHNldCB1cCB0aGUg RFRMUyBzdGF0ZSBhbmQgaW5pdGlhdGUgdGhlIGhhbmRzaGFrZS4KPiArICovCj4gK3N0YXRpYyBp bnQgZHRsc19zdGFydChVUkxDb250ZXh0ICpoLCBjb25zdCBjaGFyICp1cmwsIGludCBmbGFncywg QVZEaWN0aW9uYXJ5ICoqb3B0aW9ucykKPiArewo+ICsgICAgVExTQ29udGV4dCAqcCA9IGgtPnBy aXZfZGF0YTsKPiArICAgIFRMU1NoYXJlZCAqYyA9ICZwLT50bHNfc2hhcmVkOwo+ICsgICAgaW50 IHJldCA9IDA7Cj4gKyAgICBjLT5pc19kdGxzID0gMTsKPiArICAgIGNvbnN0IGNoYXIqIGNpcGhl cnMgPSAiQUxMIjsKPiArICAgIC8qKgo+ICsgICAgICogVGhlIHByb2ZpbGUgZm9yIE9wZW5TU0wn cyBTUlRQIGlzIFNSVFBfQUVTMTI4X0NNX1NIQTFfODAsIHNlZSBzc2wvZDFfc3J0cC5jLgo+ICsg ICAgICogVGhlIHByb2ZpbGUgZm9yIEZGbXBlZydzIFNSVFAgaXMgU1JUUF9BRVMxMjhfQ01fSE1B Q19TSEExXzgwLCBzZWUgbGliYXZmb3JtYXQvc3J0cC5jLgo+ICsgICAgICovCj4gKyAgICBjb25z dCBjaGFyKiBwcm9maWxlcyA9ICJTUlRQX0FFUzEyOF9DTV9TSEExXzgwIjsKPiArICAgIC8qIFJl ZmVyIHRvIHRoZSB0ZXN0IGNhc2VzIHJlZ2FyZGluZyB0aGVzZSBjdXJ2ZXMgaW4gdGhlIFdlYlJU QyBjb2RlLiAqLwo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTCAv KiBPcGVuU1NMIDEuMS4wICovCj4gKyAgICBjb25zdCBjaGFyKiBjdXJ2ZXMgPSAiWDI1NTE5OlAt MjU2OlAtMzg0OlAtNTIxIjsKPiArI2VsaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEw MDAyMDAwTCAvKiBPcGVuU1NMIDEuMC4yICovCj4gKyAgICBjb25zdCBjaGFyKiBjdXJ2ZXMgPSAi UC0yNTY6UC0zODQ6UC01MjEiOwo+ICsjZW5kaWYKPiArCj4gKyNpZiBPUEVOU1NMX1ZFUlNJT05f TlVNQkVSIDwgMHgxMDAwMjAwMEwgLyogT3BlblNTTCB2MS4wLjIgKi8KPiArICAgIHAtPmN0eCA9 IFNTTF9DVFhfbmV3KERUTFN2MV9tZXRob2QoKSk7Cj4gKyNlbHNlCj4gKyAgICBwLT5jdHggPSBT U0xfQ1RYX25ldyhEVExTX21ldGhvZCgpKTsKPiArI2VuZGlmCj4gKyAgICBpZiAoIXAtPmN0eCkg ewo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICBnb3RvIGZhaWw7 Cj4gKyAgICB9Cj4gKwo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAyMDAw TCAvKiBPcGVuU1NMIDEuMC4yICovCj4gKyAgICAvKiBGb3IgRUNEU0EsIHdlIGNvdWxkIHNldCB0 aGUgY3VydmVzIGxpc3QuICovCj4gKyAgICBpZiAoU1NMX0NUWF9zZXQxX2N1cnZlc19saXN0KHAt PmN0eCwgY3VydmVzKSAhPSAxKSB7Cj4gKyAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJPUiwg IlRMUzogSW5pdCBTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QgZmFpbGVkLCBjdXJ2ZXM9JXMsICVz XG4iLAo+ICsgICAgICAgICAgICBjdXJ2ZXMsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPiArICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAg IH0KPiArI2VuZGlmCj4gKwo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAxMDAw MDBMIC8vIHYxLjEueAo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAwMDIwMDBM IC8vIHYxLjAuMgo+ICsgICAgaWYgKGN0eC0+ZHRsc19lY2tleSkKPiArICAgICAgICBTU0xfQ1RY X3NldF90bXBfZWNkaChwLT5jdHgsIHAtPmR0bHNfZWNrZXkpOwo+ICsjZWxzZQo+ICsgICAgU1NM X0NUWF9zZXRfZWNkaF9hdXRvKHAtPmN0eCwgMSk7Cj4gKyNlbmRpZgo+ICsjZW5kaWYKPiArCj4g KyAgICAvKioKPiArICAgICAqIFdlIGFjdGl2YXRlICJBTEwiIGNpcGhlciBzdWl0ZXMgdG8gYWxp Z24gd2l0aCB0aGUgcGVlcidzIGNhcGFiaWxpdGllcywKPiArICAgICAqIGVuc3VyaW5nIG1heGlt dW0gY29tcGF0aWJpbGl0eS4KPiArICAgICAqLwo+ICsgICAgaWYgKFNTTF9DVFhfc2V0X2NpcGhl cl9saXN0KHAtPmN0eCwgY2lwaGVycykgIT0gMSkgewo+ICsgICAgICAgIGF2X2xvZyhwLCBBVl9M T0dfRVJST1IsICJUTFM6IEluaXQgU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QgZmFpbGVkLCBjaXBo ZXJzPSVzLCAlc1xuIiwKPiArICAgICAgICAgICAgY2lwaGVycywgb3BlbnNzbF9nZXRfZXJyb3Io cCkpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiArICAgICAgICByZXR1cm4g cmV0Owo+ICsgICAgfQo+ICsgICAgcmV0ID0gb3BlbnNzbF9pbml0X2NhX2tleV9jZXJ0KGgpOwo+ ICsgICAgaWYgKHJldCA8IDApIGdvdG8gZmFpbDsKPiArCj4gKyAgICAvKiBTZXJ2ZXIgd2lsbCBz ZW5kIENlcnRpZmljYXRlIFJlcXVlc3QuICovCj4gKyAgICBTU0xfQ1RYX3NldF92ZXJpZnkocC0+ Y3R4LCBTU0xfVkVSSUZZX1BFRVIgfCBTU0xfVkVSSUZZX0NMSUVOVF9PTkNFLCBvcGVuc3NsX2R0 bHNfdmVyaWZ5X2NhbGxiYWNrKTsKPiArICAgIC8qIFRoZSBkZXB0aCBjb3VudCBpcyAibGV2ZWwg MDpwZWVyIGNlcnRpZmljYXRlIiwgImxldmVsIDE6IENBIGNlcnRpZmljYXRlIiwKPiArICAgICAq ICJsZXZlbCAyOiBoaWdoZXIgbGV2ZWwgQ0EgY2VydGlmaWNhdGUiLCBhbmQgc28gb24uICovCj4g KyAgICBTU0xfQ1RYX3NldF92ZXJpZnlfZGVwdGgocC0+Y3R4LCA0KTsKPiArICAgIC8qIFdoZXRo ZXIgd2Ugc2hvdWxkIHJlYWQgYXMgbWFueSBpbnB1dCBieXRlcyBhcyBwb3NzaWJsZSAoZm9yIG5v bi1ibG9ja2luZyByZWFkcykgb3Igbm90LiAqLwo+ICsgICAgU1NMX0NUWF9zZXRfcmVhZF9haGVh ZChwLT5jdHgsIDEpOwo+ICsgICAgLyogU2V0dXAgdGhlIFNSVFAgY29udGV4dCAqLwo+ICsgICAg aWYgKFNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0cChwLT5jdHgsIHByb2ZpbGVzKSkgewo+ICsg ICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgU1NMX0NUWF9zZXRfdGxz ZXh0X3VzZV9zcnRwIGZhaWxlZCwgcHJvZmlsZXM9JXMsICVzXG4iLAo+ICsgICAgICAgICAgICBw cm9maWxlcywgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1Io RUlOVkFMKTsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIC8qIFRo ZSBzc2wgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIHVubGVzcyB0aGUgY3R4IGhhcyBiZWVuIGluaXRp YWxpemVkLiAqLwo+ICsgICAgcC0+c3NsID0gU1NMX25ldyhwLT5jdHgpOwo+ICsgICAgaWYgKCFw LT5zc2wpIHsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgZ290 byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFNldHVwIHRoZSBjYWxsYmFjayBmb3IgbG9n Z2luZy4gKi8KPiArICAgIFNTTF9zZXRfZXhfZGF0YShwLT5zc2wsIDAsIHApOwo+ICsgICAgU1NM X3NldF9pbmZvX2NhbGxiYWNrKHAtPnNzbCwgb3BlbnNzbF9pbmZvX2NhbGxiYWNrKTsKPiArICAg IC8qKgo+ICsgICAgICogV2UgaGF2ZSBzZXQgdGhlIE1UVSB0byBmcmFnbWVudCB0aGUgRFRMUyBw YWNrZXQuIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlCj4gKyAgICAgKiBwYWNrZXQg aXMgc3BsaXQgdG8gZW5zdXJlIHRoYXQgZWFjaCBoYW5kc2hha2UgcGFja2V0IGlzIHNtYWxsZXIg dGhhbiB0aGUgTVRVLgo+ICsgICAgICovCj4gKyAgICBTU0xfc2V0X29wdGlvbnMocC0+c3NsLCBT U0xfT1BfTk9fUVVFUllfTVRVKTsKPiArICAgIFNTTF9zZXRfbXR1KHAtPnNzbCwgcC0+dGxzX3No YXJlZC5tdHUpOwo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMGIwTCAv KiBPcGVuU1NMIDEuMC4xayAqLwo+ICsgICAgRFRMU19zZXRfbGlua19tdHUocC0+c3NsLCBwLT50 bHNfc2hhcmVkLm10dSk7Cj4gKyNlbmRpZgo+ICsgICAgaW5pdF9iaW9fbWV0aG9kKGgpOwo+ICsK PiArICAgIGlmIChwLT50bHNfc2hhcmVkLnVzZV9leHRlcm5hbF91ZHAgIT0gMSkgewo+ICsgICAg ICAgIGlmICgocmV0ID0gZmZfdGxzX29wZW5fdW5kZXJseWluZygmcC0+dGxzX3NoYXJlZCwgaCwg dXJsLCBvcHRpb25zKSkgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJS T1IsICJGYWlsZWQgdG8gY29ubmVjdCAlc1xuIiwgdXJsKTsKPiArICAgICAgICAgICAgcmV0dXJu IHJldDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogU2V0dXAgRFRMUyBhcyBw YXNzaXZlLCB3aGljaCBpcyBzZXJ2ZXIgcm9sZS4gKi8KPiArICAgIGMtPmxpc3RlbiA/IFNTTF9z ZXRfYWNjZXB0X3N0YXRlKHAtPnNzbCkgOiBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUocC0+c3NsKTsK PiArCj4gKyAgICAvKioKPiArICAgICAqIER1cmluZyBpbml0aWFsaXphdGlvbiwgd2Ugb25seSBu ZWVkIHRvIGNhbGwgU1NMX2RvX2hhbmRzaGFrZSBvbmNlIGJlY2F1c2UgU1NMX3JlYWQgY29uc3Vt ZXMKPiArICAgICAqIHRoZSBoYW5kc2hha2UgbWVzc2FnZSBpZiB0aGUgaGFuZHNoYWtlIGlzIGlu Y29tcGxldGUuCj4gKyAgICAgKiBUbyBzaW1wbGlmeSBtYWludGVuYW5jZSwgd2UgaW5pdGlhdGUg dGhlIGhhbmRzaGFrZSBmb3IgYm90aCB0aGUgRFRMUyBzZXJ2ZXIgYW5kIGNsaWVudCBhZnRlcgo+ ICsgICAgICogc2VuZGluZyBvdXQgdGhlIElDRSByZXNwb25zZSBpbiB0aGUgc3RhcnRfYWN0aXZl X2hhbmRzaGFrZSBmdW5jdGlvbi4gSXQncyB3b3J0aCBub3RpbmcgdGhhdAo+ICsgICAgICogYWx0 aG91Z2ggdGhlIERUTFMgc2VydmVyIG1heSByZWNlaXZlIHRoZSBDbGllbnRIZWxsbyBpbW1lZGlh dGVseSBhZnRlciBzZW5kaW5nIG91dCB0aGUgSUNFCj4gKyAgICAgKiByZXNwb25zZSwgdGhpcyBz aG91bGRuJ3QgYmUgYW4gaXNzdWUgYXMgdGhlIGhhbmRzaGFrZSBmdW5jdGlvbiBpcyBjYWxsZWQg YmVmb3JlIGFueSBEVExTCj4gKyAgICAgKiBwYWNrZXRzIGFyZSByZWNlaXZlZC4KPiArICAgICAq Cj4gKyAgICAgKiBUaGUgU1NMX2RvX2hhbmRzaGFrZSBjYW4ndCBiZSBjYWxsZWQgaWYgRFRMUyBo YXNuJ3QgcHJlcGFyZSBmb3IgdWRwLgo+ICsgICAgICovCj4gKyAgICBpZiAocC0+dGxzX3NoYXJl ZC51c2VfZXh0ZXJuYWxfdWRwICE9IDEpIHsKPiArICAgICAgICByZXQgPSBkdGxzX2hhbmRzaGFr ZShoKTsKPiArICAgICAgICAvLyBGYXRhbCBTU0wgZXJyb3IsIGZvciBleGFtcGxlLCBubyBhdmFp bGFibGUgc3VpdGUgd2hlbiBwZWVyIGlzIERUTFMgMS4wIHdoaWxlIHdlIGFyZSBEVExTIDEuMi4K PiArICAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAgICBhdl9sb2cocCwgQVZfTE9H X0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gZHJpdmUgU1NMIGNvbnRleHQsIHJldD0lZFxuIiwgcmV0 KTsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlPKTsKPiArICAgICAgICB9Cj4gKyAg ICB9Cj4gKwo+ICsgICAgYXZfbG9nKHAsIEFWX0xPR19WRVJCT1NFLCAiVExTOiBTZXR1cCBvaywg TVRVPSVkLCBmaW5nZXJwcmludCAlc1xuIiwKPiArICAgICAgICBwLT50bHNfc2hhcmVkLm10dSwg cC0+dGxzX3NoYXJlZC5maW5nZXJwcmludCk7Cj4gKwo+ICsgICAgcmV0ID0gMDsKPiArZmFpbDoK PiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBDbGVhbnVwIHRoZSBEVExT IGNvbnRleHQuCj4gKyAqLwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgZHRsc19jbG9zZShVUkxDb250 ZXh0ICpoKQo+ICt7Cj4gKyAgICBUTFNDb250ZXh0ICpjdHggPSBoLT5wcml2X2RhdGE7Cj4gKyAg ICBTU0xfZnJlZShjdHgtPnNzbCk7Cj4gKyAgICBTU0xfQ1RYX2ZyZWUoY3R4LT5jdHgpOwo+ICsg ICAgYXZfZnJlZXAoJmN0eC0+dGxzX3NoYXJlZC5maW5nZXJwcmludCk7Cj4gKyAgICBhdl9mcmVl cCgmY3R4LT50bHNfc2hhcmVkLmNlcnRfYnVmKTsKPiArICAgIGF2X2ZyZWVwKCZjdHgtPnRsc19z aGFyZWQua2V5X2J1Zik7Cj4gKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgzMDAwMDAw MEwgLyogT3BlblNTTCAzLjAgKi8KPiArICAgIEVDX0tFWV9mcmVlKGN0eC0+ZHRsc19lY2tleSk7 Cj4gKyNlbmRpZgo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQgdGxzX29w ZW4oVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJpLCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFy eSAqKm9wdGlvbnMpCj4gIHsKPiAgICAgIFRMU0NvbnRleHQgKnAgPSBoLT5wcml2X2RhdGE7Cj4g ICAgICBUTFNTaGFyZWQgKmMgPSAmcC0+dGxzX3NoYXJlZDsKPiAtICAgIEJJTyAqYmlvOwo+ICAg ICAgaW50IHJldDsKPgo+ICAjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAxMDAwMDBM Cj4gQEAgLTI3MSw1MiArMTA0MSwyNiBAQCBzdGF0aWMgaW50IHRsc19vcGVuKFVSTENvbnRleHQg KmgsIGNvbnN0IGNoYXIgKnVyaSwgaW50IGZsYWdzLCBBVkRpY3Rpb25hcnkgKipvcAo+ICAgICAg Ly8gc3VwcG9ydCBmb3IgdGhlIG9sZCBwcm90b2NvbHMgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRp bmcgdGhlIGNvbnRleHQuCj4gICAgICBwLT5jdHggPSBTU0xfQ1RYX25ldyhjLT5saXN0ZW4gPyBT U0x2MjNfc2VydmVyX21ldGhvZCgpIDogU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7Cj4gICAgICBp ZiAoIXAtPmN0eCkgewo+IC0gICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICIlc1xuIiwg RVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPiArICAgICAgICBhdl9s b2coaCwgQVZfTE9HX0VSUk9SLCAiJXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPiAgICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gICAgICAgICAgZ290byBmYWlsOwo+ICAgICAgfQo+ ICAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhwLT5jdHgsIFNTTF9PUF9OT19TU0x2MiB8IFNTTF9P UF9OT19TU0x2Myk7Cj4gLSAgICBpZiAoYy0+Y2FfZmlsZSkgewo+IC0gICAgICAgIGlmICghU1NM X0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMocC0+Y3R4LCBjLT5jYV9maWxlLCBOVUxMKSkKPiAt ICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlNTTF9DVFhfbG9hZF92ZXJpZnlf bG9jYXRpb25zICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkp Owo+IC0gICAgfQo+IC0gICAgaWYgKGMtPmNlcnRfZmlsZSAmJiAhU1NMX0NUWF91c2VfY2VydGlm aWNhdGVfY2hhaW5fZmlsZShwLT5jdHgsIGMtPmNlcnRfZmlsZSkpIHsKPiAtICAgICAgICBhdl9s b2coaCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGxvYWQgY2VydCBmaWxlICVzOiAlc1xuIiwK PiAtICAgICAgICAgICAgICAgYy0+Y2VydF9maWxlLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRf ZXJyb3IoKSwgTlVMTCkpOwo+IC0gICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKPiAtICAgICAg ICBnb3RvIGZhaWw7Cj4gLSAgICB9Cj4gLSAgICBpZiAoYy0+a2V5X2ZpbGUgJiYgIVNTTF9DVFhf dXNlX1ByaXZhdGVLZXlfZmlsZShwLT5jdHgsIGMtPmtleV9maWxlLCBTU0xfRklMRVRZUEVfUEVN KSkgewo+IC0gICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gbG9hZCBr ZXkgZmlsZSAlczogJXNcbiIsCj4gLSAgICAgICAgICAgICAgIGMtPmtleV9maWxlLCBFUlJfZXJy b3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+IC0gICAgICAgIHJldCA9IEFWRVJS T1IoRUlPKTsKPiAtICAgICAgICBnb3RvIGZhaWw7Cj4gLSAgICB9Cj4gKyAgICByZXQgPSBvcGVu c3NsX2luaXRfY2Ffa2V5X2NlcnQoaCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgZ290byBmYWlsOwo+ ICAgICAgLy8gTm90ZSwgdGhpcyBkb2Vzbid0IGNoZWNrIHRoYXQgdGhlIHBlZXIgY2VydGlmaWNh dGUgYWN0dWFsbHkgbWF0Y2hlcwo+ICAgICAgLy8gdGhlIHJlcXVlc3RlZCBob3N0bmFtZS4KPiAg ICAgIGlmIChjLT52ZXJpZnkpCj4gICAgICAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHAtPmN0eCwg U1NMX1ZFUklGWV9QRUVSfFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQsIE5VTEwpOwo+ ICAgICAgcC0+c3NsID0gU1NMX25ldyhwLT5jdHgpOwo+ICAgICAgaWYgKCFwLT5zc2wpIHsKPiAt ICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmco RVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJP UiwgIiVzXG4iLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cj4gICAgICAgICAgcmV0ID0gQVZFUlJP UihFSU8pOwo+ICAgICAgICAgIGdvdG8gZmFpbDsKPiAgICAgIH0KPiAtI2lmIE9QRU5TU0xfVkVS U0lPTl9OVU1CRVIgPj0gMHgxMDEwMDAwZkwKPiAtICAgIHAtPnVybF9iaW9fbWV0aG9kID0gQklP X21ldGhfbmV3KEJJT19UWVBFX1NPVVJDRV9TSU5LLCAidXJscHJvdG9jb2wgYmlvIik7Cj4gLSAg ICBCSU9fbWV0aF9zZXRfd3JpdGUocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fYndyaXRlKTsK PiAtICAgIEJJT19tZXRoX3NldF9yZWFkKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2JyZWFk KTsKPiAtICAgIEJJT19tZXRoX3NldF9wdXRzKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2Jw dXRzKTsKPiAtICAgIEJJT19tZXRoX3NldF9jdHJsKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlv X2N0cmwpOwo+IC0gICAgQklPX21ldGhfc2V0X2NyZWF0ZShwLT51cmxfYmlvX21ldGhvZCwgdXJs X2Jpb19jcmVhdGUpOwo+IC0gICAgQklPX21ldGhfc2V0X2Rlc3Ryb3kocC0+dXJsX2Jpb19tZXRo b2QsIHVybF9iaW9fZGVzdHJveSk7Cj4gLSAgICBiaW8gPSBCSU9fbmV3KHAtPnVybF9iaW9fbWV0 aG9kKTsKPiAtICAgIEJJT19zZXRfZGF0YShiaW8sIHApOwo+IC0jZWxzZQo+IC0gICAgYmlvID0g QklPX25ldygmdXJsX2Jpb19tZXRob2QpOwo+IC0gICAgYmlvLT5wdHIgPSBwOwo+IC0jZW5kaWYK PiAtICAgIFNTTF9zZXRfYmlvKHAtPnNzbCwgYmlvLCBiaW8pOwo+ICsgICAgU1NMX3NldF9leF9k YXRhKHAtPnNzbCwgMCwgcCk7Cj4gKyAgICBTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrKHAtPmN0 eCwgb3BlbnNzbF9pbmZvX2NhbGxiYWNrKTsKPiArICAgIGluaXRfYmlvX21ldGhvZChoKTsKPiAg ICAgIGlmICghYy0+bGlzdGVuICYmICFjLT5udW1lcmljaG9zdCkKPiAgICAgICAgICBTU0xfc2V0 X3Rsc2V4dF9ob3N0X25hbWUocC0+c3NsLCBjLT5ob3N0KTsKPiAgICAgIHJldCA9IGMtPmxpc3Rl biA/IFNTTF9hY2NlcHQocC0+c3NsKSA6IFNTTF9jb25uZWN0KHAtPnNzbCk7Cj4gQEAgLTMyNSw3 ICsxMDY5LDcgQEAgc3RhdGljIGludCB0bHNfb3BlbihVUkxDb250ZXh0ICpoLCBjb25zdCBjaGFy ICp1cmksIGludCBmbGFncywgQVZEaWN0aW9uYXJ5ICoqb3AKPiAgICAgICAgICByZXQgPSBBVkVS Uk9SKEVJTyk7Cj4gICAgICAgICAgZ290byBmYWlsOwo+ICAgICAgfSBlbHNlIGlmIChyZXQgPCAw KSB7Cj4gLSAgICAgICAgcmV0ID0gcHJpbnRfdGxzX2Vycm9yKGgsIHJldCk7Cj4gKyAgICAgICAg cmV0ID0gcHJpbnRfc3NsX2Vycm9yKGgsIHJldCk7Cj4gICAgICAgICAgZ290byBmYWlsOwo+ICAg ICAgfQo+Cj4gQEAgLTMzOCwzMSArMTA4MiwzNSBAQCBmYWlsOgo+ICBzdGF0aWMgaW50IHRsc19y ZWFkKFVSTENvbnRleHQgKmgsIHVpbnQ4X3QgKmJ1ZiwgaW50IHNpemUpCj4gIHsKPiAgICAgIFRM U0NvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4gKyAgICBVUkxDb250ZXh0ICp1YyA9IGMtPnRs c19zaGFyZWQuaXNfZHRscyA/IGMtPnRsc19zaGFyZWQudWRwCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGMtPnRsc19zaGFyZWQudGNwOwo+ICAgICAgaW50 IHJldDsKPiAgICAgIC8vIFNldCBvciBjbGVhciB0aGUgQVZJT19GTEFHX05PTkJMT0NLIG9uIGMt PnRsc19zaGFyZWQudGNwCj4gLSAgICBjLT50bHNfc2hhcmVkLnRjcC0+ZmxhZ3MgJj0gfkFWSU9f RkxBR19OT05CTE9DSzsKPiAtICAgIGMtPnRsc19zaGFyZWQudGNwLT5mbGFncyB8PSBoLT5mbGFn cyAmIEFWSU9fRkxBR19OT05CTE9DSzsKPiArICAgIHVjLT5mbGFncyAmPSB+QVZJT19GTEFHX05P TkJMT0NLOwo+ICsgICAgdWMtPmZsYWdzIHw9IGgtPmZsYWdzICYgQVZJT19GTEFHX05PTkJMT0NL Owo+ICAgICAgcmV0ID0gU1NMX3JlYWQoYy0+c3NsLCBidWYsIHNpemUpOwo+ICAgICAgaWYgKHJl dCA+IDApCj4gICAgICAgICAgcmV0dXJuIHJldDsKPiAgICAgIGlmIChyZXQgPT0gMCkKPiAgICAg ICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gLSAgICByZXR1cm4gcHJpbnRfdGxzX2Vycm9yKGgs IHJldCk7Cj4gKyAgICByZXR1cm4gcHJpbnRfc3NsX2Vycm9yKGgsIHJldCk7Cj4gIH0KPgo+ICBz dGF0aWMgaW50IHRsc193cml0ZShVUkxDb250ZXh0ICpoLCBjb25zdCB1aW50OF90ICpidWYsIGlu dCBzaXplKQo+ICB7Cj4gICAgICBUTFNDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+ICsgICAg VVJMQ29udGV4dCAqdWMgPSBjLT50bHNfc2hhcmVkLmlzX2R0bHMgPyBjLT50bHNfc2hhcmVkLnVk cAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjLT50bHNf c2hhcmVkLnRjcDsKPiAgICAgIGludCByZXQ7Cj4gICAgICAvLyBTZXQgb3IgY2xlYXIgdGhlIEFW SU9fRkxBR19OT05CTE9DSyBvbiBjLT50bHNfc2hhcmVkLnRjcAo+IC0gICAgYy0+dGxzX3NoYXJl ZC50Y3AtPmZsYWdzICY9IH5BVklPX0ZMQUdfTk9OQkxPQ0s7Cj4gLSAgICBjLT50bHNfc2hhcmVk LnRjcC0+ZmxhZ3MgfD0gaC0+ZmxhZ3MgJiBBVklPX0ZMQUdfTk9OQkxPQ0s7Cj4gKyAgICB1Yy0+ ZmxhZ3MgJj0gfkFWSU9fRkxBR19OT05CTE9DSzsKPiArICAgIHVjLT5mbGFncyB8PSBoLT5mbGFn cyAmIEFWSU9fRkxBR19OT05CTE9DSzsKPiAgICAgIHJldCA9IFNTTF93cml0ZShjLT5zc2wsIGJ1 Ziwgc2l6ZSk7Cj4gICAgICBpZiAocmV0ID4gMCkKPiAgICAgICAgICByZXR1cm4gcmV0Owo+ICAg ICAgaWYgKHJldCA9PSAwKQo+ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiAtICAgIHJl dHVybiBwcmludF90bHNfZXJyb3IoaCwgcmV0KTsKPiArICAgIHJldHVybiBwcmludF9zc2xfZXJy b3IoaCwgcmV0KTsKPiAgfQo+Cj4gIHN0YXRpYyBpbnQgdGxzX2dldF9maWxlX2hhbmRsZShVUkxD b250ZXh0ICpoKQo+IEBAIC00MDEsMyArMTE0OSwyMiBAQCBjb25zdCBVUkxQcm90b2NvbCBmZl90 bHNfcHJvdG9jb2wgPSB7Cj4gICAgICAuZmxhZ3MgICAgICAgICAgPSBVUkxfUFJPVE9DT0xfRkxB R19ORVRXT1JLLAo+ICAgICAgLnByaXZfZGF0YV9jbGFzcyA9ICZ0bHNfY2xhc3MsCj4gIH07Cj4g Kwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBkdGxzX2NsYXNzID0gewo+ICsgICAgLmNsYXNzX25h bWUgPSAiZHRscyIsCj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAo+ ICsgICAgLm9wdGlvbiAgICAgPSBvcHRpb25zLAo+ICsgICAgLnZlcnNpb24gICAgPSBMSUJBVlVU SUxfVkVSU0lPTl9JTlQsCj4gK307Cj4gKwo+ICtjb25zdCBVUkxQcm90b2NvbCBmZl9kdGxzX3By b3RvY29sID0gewo+ICsgICAgLm5hbWUgICAgICAgICAgID0gImR0bHMiLAo+ICsgICAgLnVybF9v cGVuMiAgICAgID0gZHRsc19zdGFydCwKPiArICAgIC51cmxfaGFuZHNoYWtlICA9IGR0bHNfaGFu ZHNoYWtlLAo+ICsgICAgLnVybF9jbG9zZSAgICAgID0gZHRsc19jbG9zZSwKPiArICAgIC51cmxf cmVhZCAgICAgICA9IHRsc19yZWFkLAo+ICsgICAgLnVybF93cml0ZSAgICAgID0gdGxzX3dyaXRl LAo+ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFRMU0NvbnRleHQpLAo+ICsgICAgLmZs YWdzICAgICAgICAgID0gVVJMX1BST1RPQ09MX0ZMQUdfTkVUV09SSywKPiArICAgIC5wcml2X2Rh dGFfY2xhc3MgPSAmZHRsc19jbGFzcywKPiArfTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQv d2hpcC5jIGIvbGliYXZmb3JtYXQvd2hpcC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwLi4wNjcxZTIzNjM1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9y bWF0L3doaXAuYwo+IEBAIC0wLDAgKzEsMTkxNyBAQAo+ICsvKgo+ICsgKiBXZWJSVEMtSFRUUCBp bmdlc3Rpb24gcHJvdG9jb2wgKFdISVApIG11eGVyCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMyBU aGUgRkZtcGVnIFByb2plY3QKPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVn Lgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsg KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl Cj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaW5jbHVkZSAibGliYXZj b2RlYy9hdmNvZGVjLmgiCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVjX2Rlc2MuaCIKPiAr I2luY2x1ZGUgImxpYmF2Y29kZWMvaDI2NC5oIgo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9zdGFy dGNvZGUuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9iYXNlNjQuaCIKPiArI2luY2x1ZGUgImxp YmF2dXRpbC9icHJpbnQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9jcmMuaCIKPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9obWFjLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRl LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbGZnLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv b3B0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvcmFuZG9tX3NlZWQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lLmgiCj4gKyNpbmNs dWRlICJhdmMuaCIKPiArI2luY2x1ZGUgIm5hbC5oIgo+ICsjaW5jbHVkZSAiYXZpb19pbnRlcm5h bC5oIgo+ICsjaW5jbHVkZSAiaHR0cC5oIgo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiArI2lu Y2x1ZGUgIm11eC5oIgo+ICsjaW5jbHVkZSAibmV0d29yay5oIgo+ICsjaW5jbHVkZSAic3J0cC5o Igo+ICsjaW5jbHVkZSAidGxzLmgiCj4gKwo+ICsvKioKPiArICogTWF4aW11bSBzaXplIGxpbWl0 IG9mIGEgU2Vzc2lvbiBEZXNjcmlwdGlvbiBQcm90b2NvbCAoU0RQKSwKPiArICogYmUgaXQgYW4g b2ZmZXIgb3IgYW5zd2VyLgo+ICsgKi8KPiArI2RlZmluZSBNQVhfU0RQX1NJWkUgODE5Mgo+ICsK PiArLyoqCj4gKyAqIFRoZSBzaXplIG9mIHRoZSBTZWN1cmUgUmVhbC10aW1lIFRyYW5zcG9ydCBQ cm90b2NvbCAoU1JUUCkgbWFzdGVyIGtleSBtYXRlcmlhbAo+ICsgKiB0aGF0IGlzIGV4cG9ydGVk IGJ5IFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpIGFmdGVyIGEgc3VjY2Vzc2Z1bCBEYXRhZ3Jh bQo+ICsgKiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKERUTFMpIGhhbmRzaGFrZS4gVGhpcyBt YXRlcmlhbCBjb25zaXN0cyBvZiBhIGtleQo+ICsgKiBvZiAxNiBieXRlcyBhbmQgYSBzYWx0IG9m IDE0IGJ5dGVzLgo+ICsgKi8KPiArI2RlZmluZSBEVExTX1NSVFBfS0VZX0xFTiAxNgo+ICsjZGVm aW5lIERUTFNfU1JUUF9TQUxUX0xFTiAxNAo+ICsKPiArLyoqCj4gKyAqIFRoZSBtYXhpbXVtIHNp emUgb2YgdGhlIFNlY3VyZSBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sIChTUlRQKSBITUFD IGNoZWNrc3VtCj4gKyAqIGFuZCBwYWRkaW5nIHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIGVuZCBv ZiB0aGUgcGFja2V0LiBUbyBjYWxjdWxhdGUgdGhlIG1heGltdW0KPiArICogc2l6ZSBvZiB0aGUg VXNlciBEYXRhZ3JhbSBQcm90b2NvbCAoVURQKSBwYWNrZXQgdGhhdCBjYW4gYmUgc2VudCBvdXQs IHN1YnRyYWN0Cj4gKyAqIHRoaXMgc2l6ZSBmcm9tIHRoZSBgcGt0X3NpemVgLgo+ICsgKi8KPiAr I2RlZmluZSBEVExTX1NSVFBfQ0hFQ0tTVU1fTEVOIDE2Cj4gKwo+ICsvKioKPiArICogV2hlbiBz ZW5kaW5nIElDRSBvciBEVExTIG1lc3NhZ2VzLCByZXNwb25zZXMgYXJlIHJlY2VpdmVkIHZpYSBV RFAuIEhvd2V2ZXIsIHRoZSBwZWVyCj4gKyAqIG1heSBub3QgYmUgcmVhZHkgYW5kIHJldHVybiBF QUdBSU4sIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHdhaXQgZm9yIGEgc2hvcnQgZHVyYXRpb24K PiArICogYW5kIHJldHJ5IHJlYWRpbmcuCj4gKyAqIEZvciBpbnN0YW5jZSwgaWYgd2UgdHJ5IHRv IHJlYWQgZnJvbSBVRFAgYW5kIGdldCBFQUdBSU4sIHdlIHNsZWVwIGZvciA1bXMgYW5kIHJldHJ5 Lgo+ICsgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbGltaXQgdGhlIHRvdGFsIGR1cmF0aW9uIGlu IG1pbGxpc2Vjb25kcyAoZS5nLiwgNTBtcyksIHNvIHdlCj4gKyAqIHdpbGwgdHJ5IGF0IG1vc3Qg NSB0aW1lcy4KPiArICogS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSBh IG1pbmltdW0gZHVyYXRpb24gb2YgNSBtcy4KPiArICovCj4gKyNkZWZpbmUgSUNFX0RUTFNfUkVB RF9JTlRFUlZBTCA1MAo+ICsKPiArLyogVGhlIG1hZ2ljIGNvb2tpZSBmb3IgU2Vzc2lvbiBUcmF2 ZXJzYWwgVXRpbGl0aWVzIGZvciBOQVQgKFNUVU4pIG1lc3NhZ2VzLiAqLwo+ICsjZGVmaW5lIFNU VU5fTUFHSUNfQ09PS0lFIDB4MjExMkE0NDIKPiArCj4gKy8qKgo+ICsgKiBUaGUgRFRMUyBjb250 ZW50IHR5cGUuCj4gKyAqIFNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjI0NiNz ZWN0aW9uLTYuMi4xCj4gKyAqIGNoYW5nZV9jaXBoZXJfc3BlYygyMCksIGFsZXJ0KDIxKSwgaGFu ZHNoYWtlKDIyKSwgYXBwbGljYXRpb25fZGF0YSgyMykKPiArICovCj4gKyNkZWZpbmUgRFRMU19D T05URU5UX1RZUEVfQ0hBTkdFX0NJUEhFUl9TUEVDIDIwCj4gKwo+ICsvKioKPiArICogVGhlIERU TFMgcmVjb3JkIGxheWVyIGhlYWRlciBoYXMgYSB0b3RhbCBzaXplIG9mIDEzIGJ5dGVzLCBjb25z aXN0aW5nIG9mCj4gKyAqIENvbnRlbnRUeXBlICgxIGJ5dGUpLCBQcm90b2NvbFZlcnNpb24gKDIg Ynl0ZXMpLCBFcG9jaCAoMiBieXRlcyksCj4gKyAqIFNlcXVlbmNlTnVtYmVyICg2IGJ5dGVzKSwg YW5kIExlbmd0aCAoMiBieXRlcykuCj4gKyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYu b3JnL2RvYy9odG1sL3JmYzkxNDcjc2VjdGlvbi00Cj4gKyAqLwo+ICsjZGVmaW5lIERUTFNfUkVD T1JEX0xBWUVSX0hFQURFUl9MRU4gMTMKPiArCj4gKy8qKgo+ICsgKiBUaGUgRFRMUyB2ZXJzaW9u IG51bWJlciwgd2hpY2ggaXMgMHhmZWZmIGZvciBEVExTIDEuMCwgb3IgMHhmZWZkIGZvciBEVExT IDEuMi4KPiArICogU2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZj OTE0NyNuYW1lLXRoZS1kdGxzLXJlY29yZC1sYXllcgo+ICsgKi8KPiArI2RlZmluZSBEVExTX1ZF UlNJT05fMTAgMHhmZWZmCj4gKyNkZWZpbmUgRFRMU19WRVJTSU9OXzEyIDB4ZmVmZAo+ICsKPiAr LyoqCj4gKyAqIE1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIGZvciBzZW5kaW5nIGFuZCByZWNl aXZpbmcgVURQIHBhY2tldHMuCj4gKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBzaXplIGRvZXMg bm90IGxpbWl0IHRoZSBzaXplIG9mIHRoZSBVRFAgcGFja2V0IHRoYXQgY2FuIGJlIHNlbnQuCj4g KyAqIFRvIHNldCB0aGUgbGltaXQgZm9yIHBhY2tldCBzaXplLCBtb2RpZnkgdGhlIGBwa3Rfc2l6 ZWAgcGFyYW1ldGVyLgo+ICsgKiBGb3IgaW5zdGFuY2UsIGl0IGlzIHBvc3NpYmxlIHRvIHNldCB0 aGUgVURQIGJ1ZmZlciB0byA0MDk2IHRvIHNlbmQgb3IgcmVjZWl2ZSBwYWNrZXRzLAo+ICsgKiBi dXQgcGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBgcGt0X3NpemVgIG9wdGlvbiBsaW1pdHMg dGhlIHBhY2tldCBzaXplIHRvIDE0MDAuCj4gKyAqLwo+ICsjZGVmaW5lIE1BWF9VRFBfQlVGRkVS X1NJWkUgNDA5Ngo+ICsKPiArLyogUmVmZXJyaW5nIHRvIENocm9tZSdzIGRlZmluaXRpb24gb2Yg UlRQIHBheWxvYWQgdHlwZXMuICovCj4gKyNkZWZpbmUgV0hJUF9SVFBfUEFZTE9BRF9UWVBFX0gy NjQgMTA2Cj4gKyNkZWZpbmUgV0hJUF9SVFBfUEFZTE9BRF9UWVBFX09QVVMgMTExCj4gKwo+ICsv KioKPiArICogVGhlIFNUVU4gbWVzc2FnZSBoZWFkZXIsIHdoaWNoIGlzIDIwIGJ5dGVzIGxvbmcs IGNvbXByaXNlcyB0aGUKPiArICogU1RVTk1lc3NhZ2VUeXBlICgxQiksIE1lc3NhZ2VMZW5ndGgg KDJCKSwgTWFnaWNDb29raWUgKDRCKSwKPiArICogYW5kIFRyYW5zYWN0aW9uSUQgKDEyQikuCj4g KyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzUzODkjc2Vj dGlvbi02Cj4gKyAqLwo+ICsjZGVmaW5lIElDRV9TVFVOX0hFQURFUl9TSVpFIDIwCj4gKwo+ICsv KioKPiArICogVGhlIFJUUCBoZWFkZXIgaXMgMTIgYnl0ZXMgbG9uZywgY29tcHJpc2luZyB0aGUg VmVyc2lvbigxQiksIFBUKDFCKSwKPiArICogU2VxdWVuY2VOdW1iZXIoMkIpLCBUaW1lc3RhbXAo NEIpLCBhbmQgU1NSQyg0QikuCj4gKyAqIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9y ZmMvcmZjMzU1MCNzZWN0aW9uLTUuMQo+ICsgKi8KPiArI2RlZmluZSBXSElQX1JUUF9IRUFERVJf U0laRSAxMgo+ICsKPiArLyoqCj4gKyAqIEZvciBSVENQLCBQVCBpcyBbMTI4LCAyMjNdIChvciB3 aXRob3V0IG1hcmtlciBbMCwgOTVdKS4gTGl0ZXJhbGx5LCBSVENQIHN0YXJ0cwo+ICsgKiBmcm9t IDY0IG5vdCAwLCBzbyBQVCBpcyBbMTkyLCAyMjNdIChvciB3aXRob3V0IG1hcmtlciBbNjQsIDk1 XSksIHNlZSAiUlRDUCBDb250cm9sCj4gKyAqIFBhY2tldCBUeXBlcyAoUFQpIiBhdAo+ICsgKiBo dHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9ydHAtcGFyYW1ldGVycy9ydHAtcGFyYW1l dGVycy54aHRtbCNydHAtcGFyYW1ldGVycy00Cj4gKyAqCj4gKyAqIEZvciBSVFAsIHRoZSBQVCBp cyBbOTYsIDEyN10sIG9yIFsyMjQsIDI1NV0gd2l0aCBtYXJrZXIuIFNlZSAiUlRQIFBheWxvYWQg VHlwZXMgKFBUKQo+ICsgKiBmb3Igc3RhbmRhcmQgYXVkaW8gYW5kIHZpZGVvIGVuY29kaW5ncyIg YXQKPiArICogaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvcnRwLXBhcmFtZXRlcnMv cnRwLXBhcmFtZXRlcnMueGh0bWwjcnRwLXBhcmFtZXRlcnMtMQo+ICsgKi8KPiArI2RlZmluZSBX SElQX1JUQ1BfUFRfU1RBUlQgMTkyCj4gKyNkZWZpbmUgV0hJUF9SVENQX1BUX0VORCAgIDIyMwo+ ICsKPiArLyoqCj4gKyAqIEluIHRoZSBjYXNlIG9mIElDRS1MSVRFLCB0aGVzZSBmaWVsZHMgYXJl IG5vdCB1c2VkOyBpbnN0ZWFkLCB0aGV5IGFyZSBkZWZpbmVkCj4gKyAqIGFzIGNvbnN0YW50IHZh bHVlcy4KPiArICovCj4gKyNkZWZpbmUgV0hJUF9TRFBfU0VTU0lPTl9JRCAiNDQ4OTA0NTE0MTY5 Mjc5OTM1OSIKPiArI2RlZmluZSBXSElQX1NEUF9DUkVBVE9SX0lQICIxMjcuMC4wLjEiCj4gKwo+ ICsvKiBDYWxjdWxhdGUgdGhlIGVsYXBzZWQgdGltZSBmcm9tIHN0YXJ0dGltZSB0byBlbmR0aW1l IGluIG1pbGxpc2Vjb25kcy4gKi8KPiArI2RlZmluZSBFTEFQU0VEKHN0YXJ0dGltZSwgZW5kdGlt ZSkgKChpbnQpKGVuZHRpbWUgLSBzdGFydHRpbWUpIC8gMTAwMCkKPiArCj4gKy8qIFNUVU4gQXR0 cmlidXRlLCBjb21wcmVoZW5zaW9uLXJlcXVpcmVkIHJhbmdlICgweDAwMDAtMHg3RkZGKSAqLwo+ ICtlbnVtIFNUVU5BdHRyIHsKPiArICAgIFNUVU5fQVRUUl9VU0VSTkFNRSAgICAgICAgICAgICAg ICAgID0gMHgwMDA2LCAvLy8gc2hhcmVkIHNlY3JldCByZXNwb25zZS9iaW5kIHJlcXVlc3QKPiAr ICAgIFNUVU5fQVRUUl9VU0VfQ0FORElEQVRFICAgICAgICAgICAgID0gMHgwMDI1LCAvLy8gYmlu ZCByZXF1ZXN0Cj4gKyAgICBTVFVOX0FUVFJfTUVTU0FHRV9JTlRFR1JJVFkgICAgICAgICA9IDB4 MDAwOCwgLy8vIGJpbmQgcmVxdWVzdC9yZXNwb25zZQo+ICsgICAgU1RVTl9BVFRSX0ZJTkdFUlBS SU5UICAgICAgICAgICAgICAgPSAweDgwMjgsIC8vLyByZmM1Mzg5Cj4gK307Cj4gKwo+ICtlbnVt IFdISVBTdGF0ZSB7Cj4gKyAgICBXSElQX1NUQVRFX05PTkUsCj4gKwo+ICsgICAgLyogVGhlIGlu aXRpYWwgc3RhdGUuICovCj4gKyAgICBXSElQX1NUQVRFX0lOSVQsCj4gKyAgICAvKiBUaGUgbXV4 ZXIgaGFzIHNlbnQgdGhlIG9mZmVyIHRvIHRoZSBwZWVyLiAqLwo+ICsgICAgV0hJUF9TVEFURV9P RkZFUiwKPiArICAgIC8qIFRoZSBtdXhlciBoYXMgcmVjZWl2ZWQgdGhlIGFuc3dlciBmcm9tIHRo ZSBwZWVyLiAqLwo+ICsgICAgV0hJUF9TVEFURV9BTlNXRVIsCj4gKyAgICAvKioKPiArICAgICAq IEFmdGVyIHBhcnNpbmcgdGhlIGFuc3dlciByZWNlaXZlZCBmcm9tIHRoZSBwZWVyLCB0aGUgbXV4 ZXIgbmVnb3RpYXRlcyB0aGUgYWJpbGl0aWVzCj4gKyAgICAgKiBpbiB0aGUgb2ZmZXIgdGhhdCBp dCBnZW5lcmF0ZWQuCj4gKyAgICAgKi8KPiArICAgIFdISVBfU1RBVEVfTkVHT1RJQVRFRCwKPiAr ICAgIC8qIFRoZSBtdXhlciBoYXMgY29ubmVjdGVkIHRvIHRoZSBwZWVyIHZpYSBVRFAuICovCj4g KyAgICBXSElQX1NUQVRFX1VEUF9DT05ORUNURUQsCj4gKyAgICAvKiBUaGUgbXV4ZXIgaGFzIHNl bnQgdGhlIElDRSByZXF1ZXN0IHRvIHRoZSBwZWVyLiAqLwo+ICsgICAgV0hJUF9TVEFURV9JQ0Vf Q09OTkVDVElORywKPiArICAgIC8qIFRoZSBtdXhlciBoYXMgcmVjZWl2ZWQgdGhlIElDRSByZXNw b25zZSBmcm9tIHRoZSBwZWVyLiAqLwo+ICsgICAgV0hJUF9TVEFURV9JQ0VfQ09OTkVDVEVELAo+ ICsgICAgLyogVGhlIG11eGVyIHN0YXJ0cyBhdHRlbXB0aW5nIHRoZSBEVExTIGhhbmRzaGFrZS4g Ki8KPiArICAgIFdISVBfU1RBVEVfRFRMU19DT05ORUNUSU5HLAo+ICsgICAgLyogVGhlIG11eGVy IGhhcyBmaW5pc2hlZCB0aGUgRFRMUyBoYW5kc2hha2Ugd2l0aCB0aGUgcGVlci4gKi8KPiArICAg IFdISVBfU1RBVEVfRFRMU19GSU5JU0hFRCwKPiArICAgIC8qIFRoZSBtdXhlciBoYXMgZmluaXNo ZWQgdGhlIFNSVFAgc2V0dXAuICovCj4gKyAgICBXSElQX1NUQVRFX1NSVFBfRklOSVNIRUQsCj4g KyAgICAvKiBUaGUgbXV4ZXIgaXMgcmVhZHkgdG8gc2VuZC9yZWNlaXZlIG1lZGlhIGZyYW1lcy4g Ki8KPiArICAgIFdISVBfU1RBVEVfUkVBRFksCj4gKyAgICAvKiBUaGUgbXV4ZXIgaXMgZmFpbGVk LiAqLwo+ICsgICAgV0hJUF9TVEFURV9GQUlMRUQsCj4gK307Cj4gKwo+ICt0eXBlZGVmIHN0cnVj dCBXSElQQ29udGV4dCB7Cj4gKyAgICBBVkNsYXNzICphdl9jbGFzczsKPiArCj4gKyAgICAvKiBU aGUgc3RhdGUgb2YgdGhlIFJUQyBjb25uZWN0aW9uLiAqLwo+ICsgICAgZW51bSBXSElQU3RhdGUg c3RhdGU7Cj4gKyAgICAvKiBUaGUgY2FsbGJhY2sgcmV0dXJuIHZhbHVlIGZvciBEVExTLiAqLwo+ ICsgICAgaW50IGR0bHNfcmV0Owo+ICsgICAgaW50IGR0bHNfY2xvc2VkOwo+ICsKPiArICAgIC8q IFBhcmFtZXRlcnMgZm9yIHRoZSBpbnB1dCBhdWRpbyBhbmQgdmlkZW8gY29kZWNzLiAqLwo+ICsg ICAgQVZDb2RlY1BhcmFtZXRlcnMgKmF1ZGlvX3BhcjsKPiArICAgIEFWQ29kZWNQYXJhbWV0ZXJz ICp2aWRlb19wYXI7Cj4gKwo+ICsgICAgLyoqCj4gKyAgICAgKiBUaGUgaDI2NF9tcDR0b2FubmV4 YiBCaXRzdHJlYW0gRmlsdGVyIChCU0YpIGJ5cGFzc2VzIHRoZSBBbm5leEIgcGFja2V0Owo+ICsg ICAgICogdGhlcmVmb3JlLCBpdCBpcyBlc3NlbnRpYWwgdG8gaW5zZXJ0IHRoZSBTUFMgYW5kIFBQ UyBiZWZvcmUgZWFjaCBJRFIgZnJhbWUKPiArICAgICAqIGluIHN1Y2ggY2FzZXMuCj4gKyAgICAg Ki8KPiArICAgIGludCBoMjY0X2FubmV4Yl9pbnNlcnRfc3BzX3BwczsKPiArCj4gKyAgICAvKiBU aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCj4gKyAgICBBVkxGRyBybmQ7Cj4gKwo+ICsg ICAgLyogVGhlIElDRSB1c2VybmFtZSBhbmQgcHdkIGZyYWdtZW50IGdlbmVyYXRlZCBieSB0aGUg bXV4ZXIuICovCj4gKyAgICBjaGFyIGljZV91ZnJhZ19sb2NhbFs5XTsKPiArICAgIGNoYXIgaWNl X3B3ZF9sb2NhbFszM107Cj4gKyAgICAvKiBUaGUgU1NSQyBvZiB0aGUgYXVkaW8gYW5kIHZpZGVv IHN0cmVhbSwgZ2VuZXJhdGVkIGJ5IHRoZSBtdXhlci4gKi8KPiArICAgIHVpbnQzMl90IGF1ZGlv X3NzcmM7Cj4gKyAgICB1aW50MzJfdCB2aWRlb19zc3JjOwo+ICsgICAgLyogVGhlIFBUKFBheWxv YWQgVHlwZSkgb2Ygc3RyZWFtLCBnZW5lcmF0ZWQgYnkgdGhlIG11eGVyLiAqLwo+ICsgICAgdWlu dDhfdCBhdWRpb19wYXlsb2FkX3R5cGU7Cj4gKyAgICB1aW50OF90IHZpZGVvX3BheWxvYWRfdHlw ZTsKPiArICAgIC8qKgo+ICsgICAgICogVGhpcyBpcyB0aGUgU0RQIG9mZmVyIGdlbmVyYXRlZCBi eSB0aGUgbXV4ZXIgYmFzZWQgb24gdGhlIGNvZGVjIHBhcmFtZXRlcnMsCj4gKyAgICAgKiBEVExT LCBhbmQgSUNFIGluZm9ybWF0aW9uLgo+ICsgICAgICovCj4gKyAgICBjaGFyICpzZHBfb2ZmZXI7 Cj4gKwo+ICsgICAgLyogVGhlIElDRSB1c2VybmFtZSBhbmQgcHdkIGZyb20gcmVtb3RlIHNlcnZl ci4gKi8KPiArICAgIGNoYXIgKmljZV91ZnJhZ19yZW1vdGU7Cj4gKyAgICBjaGFyICppY2VfcHdk X3JlbW90ZTsKPiArICAgIC8qKgo+ICsgICAgICogVGhpcyByZXByZXNlbnRzIHRoZSBJQ0UgY2Fu ZGlkYXRlIHByb3RvY29sLCBwcmlvcml0eSwgaG9zdCBhbmQgcG9ydC4KPiArICAgICAqIEN1cnJl bnRseSwgd2Ugb25seSBzdXBwb3J0IG9uZSBjYW5kaWRhdGUgYW5kIGNob29zZSB0aGUgZmlyc3Qg VURQIGNhbmRpZGF0ZS4KPiArICAgICAqIEhvd2V2ZXIsIHdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0 aXBsZSBjYW5kaWRhdGVzIGluIHRoZSBmdXR1cmUuCj4gKyAgICAgKi8KPiArICAgIGNoYXIgKmlj ZV9wcm90b2NvbDsKPiArICAgIGNoYXIgKmljZV9ob3N0Owo+ICsgICAgaW50IGljZV9wb3J0Owo+ ICsKPiArICAgIC8qIFRoZSBTRFAgYW5zd2VyIHJlY2VpdmVkIGZyb20gdGhlIFdlYlJUQyBzZXJ2 ZXIuICovCj4gKyAgICBjaGFyICpzZHBfYW5zd2VyOwo+ICsgICAgLyogVGhlIHJlc291cmNlIFVS TCByZXR1cm5lZCBpbiB0aGUgTG9jYXRpb24gaGVhZGVyIG9mIFdISVAgSFRUUCByZXNwb25zZS4g Ki8KPiArICAgIGNoYXIgKndoaXBfcmVzb3VyY2VfdXJsOwo+ICsKPiArICAgIC8qIFRoZXNlIHZh cmlhYmxlcyByZXByZXNlbnQgdGltZXN0YW1wcyB1c2VkIGZvciBjYWxjdWxhdGluZyBhbmQgdHJh Y2tpbmcgdGhlIGNvc3QuICovCj4gKyAgICBpbnQ2NF90IHdoaXBfc3RhcnR0aW1lOwo+ICsgICAg aW50NjRfdCB3aGlwX2luaXRfdGltZTsKPiArICAgIGludDY0X3Qgd2hpcF9vZmZlcl90aW1lOwo+ ICsgICAgaW50NjRfdCB3aGlwX2Fuc3dlcl90aW1lOwo+ICsgICAgaW50NjRfdCB3aGlwX3VkcF90 aW1lOwo+ICsgICAgaW50NjRfdCB3aGlwX2ljZV90aW1lOwo+ICsgICAgaW50NjRfdCB3aGlwX2R0 bHNfdGltZTsKPiArICAgIGludDY0X3Qgd2hpcF9zcnRwX3RpbWU7Cj4gKwo+ICsgICAgLyogVGhl IGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleSBjb250ZW50IHVzZWQgZm9yIERUTFMgaGFuc2hh a2UgKi8KPiArICAgIGNoYXIgY2VydF9idWZbTUFYX0NFUlRJRklDQVRFX1NJWkVdOwo+ICsgICAg Y2hhciBrZXlfYnVmW01BWF9DRVJUSUZJQ0FURV9TSVpFXTsKPiArICAgIC8qIFRoZSBmaW5nZXJw cmludCBvZiBjZXJ0aWZpY2F0ZSwgdXNlZCBpbiBTRFAgb2ZmZXIuICovCj4gKyAgICBjaGFyICpk dGxzX2ZpbmdlcnByaW50Owo+ICsgICAgLyoqCj4gKyAgICAgKiBUaGlzIHJlcHJlc2VudHMgdGhl IG1hdGVyaWFsIHVzZWQgdG8gYnVpbGQgdGhlIFNSVFAgbWFzdGVyIGtleS4gSXQgaXMKPiArICAg ICAqIGdlbmVyYXRlZCBieSBEVExTIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6Cj4gKyAg ICAgKiAgICAgICAgICAxNkIgICAgICAgICAxNkIgICAgICAgICAxNEIgICAgICAgICAgICAgMTRC Cj4gKyAgICAgKiAgICAgIGNsaWVudF9rZXkgfCBzZXJ2ZXJfa2V5IHwgY2xpZW50X3NhbHQgfCBz ZXJ2ZXJfc2FsdAo+ICsgICAgICovCj4gKyAgICB1aW50OF90IGR0bHNfc3J0cF9tYXRlcmlhbHNb KERUTFNfU1JUUF9LRVlfTEVOICsgRFRMU19TUlRQX1NBTFRfTEVOKSAqIDJdOwo+ICsKPiArICAg IGNoYXIgc3NsX2Vycm9yX21lc3NhZ2VbMjU2XTsKPiArCj4gKyAgICAvKiBUT0RPOiBVc2UgQVZJ T0NvbnRleHQgaW5zdGVhZCBvZiBVUkxDb250ZXh0ICovCj4gKyAgICBVUkxDb250ZXh0ICpkdGxz X3VjOwo+ICsKPiArICAgIC8qIFRoZSBTUlRQIHNlbmQgY29udGV4dCwgdG8gZW5jcnlwdCBvdXRn b2luZyBwYWNrZXRzLiAqLwo+ICsgICAgU1JUUENvbnRleHQgc3J0cF9hdWRpb19zZW5kOwo+ICsg ICAgU1JUUENvbnRleHQgc3J0cF92aWRlb19zZW5kOwo+ICsgICAgU1JUUENvbnRleHQgc3J0cF9y dGNwX3NlbmQ7Cj4gKyAgICAvKiBUaGUgU1JUUCByZWNlaXZlIGNvbnRleHQsIHRvIGRlY3J5cHQg aW5jb21pbmcgcGFja2V0cy4gKi8KPiArICAgIFNSVFBDb250ZXh0IHNydHBfcmVjdjsKPiArCj4g KyAgICAvKiBUaGUgVURQIHRyYW5zcG9ydCBpcyB1c2VkIGZvciBkZWxpdmVyaW5nIElDRSwgRFRM UyBhbmQgU1JUUCBwYWNrZXRzLiAqLwo+ICsgICAgVVJMQ29udGV4dCAqdWRwOwo+ICsgICAgLyog VGhlIGJ1ZmZlciBmb3IgVURQIHRyYW5zbWlzc2lvbi4gKi8KPiArICAgIGNoYXIgYnVmW01BWF9V RFBfQlVGRkVSX1NJWkVdOwo+ICsKPiArICAgIC8qIFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25k cyBmb3IgSUNFIGFuZCBEVExTIGhhbmRzaGFrZS4gKi8KPiArICAgIGludCBoYW5kc2hha2VfdGlt ZW91dDsKPiArICAgIC8qKgo+ICsgICAgICogVGhlIHNpemUgb2YgUlRQIHBhY2tldCwgc2hvdWxk IGdlbmVyYWxseSBiZSBzZXQgdG8gTVRVLgo+ICsgICAgICogTm90ZSB0aGF0IHBpb24gcmVxdWly ZXMgYSBzbWFsbGVyIHZhbHVlLCBmb3IgZXhhbXBsZSwgMTIwMC4KPiArICAgICAqLwo+ICsgICAg aW50IHBrdF9zaXplOwo+ICsgICAgLyoqCj4gKyAgICAgKiBUaGUgb3B0aW9uYWwgQmVhcmVyIHRv a2VuIGZvciBXSElQIEF1dGhvcml6YXRpb24uCj4gKyAgICAgKiBTZWUgaHR0cHM6Ly93d3cuaWV0 Zi5vcmcvYXJjaGl2ZS9pZC9kcmFmdC1pZXRmLXdpc2gtd2hpcC0wOC5odG1sI25hbWUtYXV0aGVu dGljYXRpb24tYW5kLWF1dGhvcml6Cj4gKyAgICAgKi8KPiArICAgIGNoYXIqIGF1dGhvcml6YXRp b247Cj4gKyAgICAvKiBUaGUgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IHVzZWQgZm9yIERU TFMgaGFuZHNoYWtlLiAqLwo+ICsgICAgY2hhciogY2VydF9maWxlOwo+ICsgICAgY2hhcioga2V5 X2ZpbGU7Cj4gK30gV0hJUENvbnRleHQ7Cj4gKwo+ICsvKioKPiArICogV2hldGhlciB0aGUgcGFj a2V0IGlzIGEgRFRMUyBwYWNrZXQuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGlzX2R0bHNfcGFja2V0 KHVpbnQ4X3QgKmIsIGludCBzaXplKSB7Cj4gKyAgICB1aW50MTZfdCB2ZXJzaW9uID0gQVZfUkIx NigmYlsxXSk7Cj4gKyAgICByZXR1cm4gc2l6ZSA+IERUTFNfUkVDT1JEX0xBWUVSX0hFQURFUl9M RU4gJiYKPiArICAgICAgICBiWzBdID49IERUTFNfQ09OVEVOVF9UWVBFX0NIQU5HRV9DSVBIRVJf U1BFQyAmJgo+ICsgICAgICAgICh2ZXJzaW9uID09IERUTFNfVkVSU0lPTl8xMCB8fCB2ZXJzaW9u ID09IERUTFNfVkVSU0lPTl8xMik7Cj4gK30KPiArCj4gKwo+ICsvKioKPiArICogR2V0IG9yIEdl bmVyYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IGZvciBEVExT LAo+ICsgKiBmaW5nZXJwcmludCBmb3IgU0RQCj4gKyAqLwo+ICtzdGF0aWMgYXZfY29sZCBpbnQg Y2VydGlmaWNhdGVfa2V5X2luaXQoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQg cmV0ID0gMDsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiAr ICAgIGlmICh3aGlwLT5jZXJ0X2ZpbGUgJiYgd2hpcC0+a2V5X2ZpbGUpIHsKPiArICAgICAgICAv KiBSZWFkIHRoZSBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgZnJvbSB0aGUgZmlsZS4gKi8K PiArICAgICAgICBpZiAoKHJldCA9IGZmX3NzbF9yZWFkX2tleV9jZXJ0KHdoaXAtPmtleV9maWxl LCB3aGlwLT5jZXJ0X2ZpbGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGlwLT5rZXlfYnVmLCBzaXplb2Yod2hpcC0+a2V5X2J1ZiksCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlwLT5jZXJ0X2J1Ziwgc2l6ZW9mKHdoaXAt PmNlcnRfYnVmKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3 aGlwLT5kdGxzX2ZpbmdlcnByaW50KSkgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBB Vl9MT0dfRVJST1IsICJEVExTOiBGYWlsZWQgdG8gcmVhZCBEVExTIGNlcnRpZmljYXRlIGZyb20g Y2VydD0lcywga2V5PSVzXG4iLAo+ICsgICAgICAgICAgICAgICAgd2hpcC0+Y2VydF9maWxlLCB3 aGlwLT5rZXlfZmlsZSk7Cj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ ICsgICAgfSBlbHNlIHsKPiArICAgICAgICAvKiBHZW5lcmF0ZSBhIHByaXZhdGUga2V5IHRvIGN0 eC0+ZHRsc19wa2V5IGFuZCBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4gKi8KPiArICAgICAgICBp ZiAoKHJldCA9IGZmX3NzbF9nZW5fa2V5X2NlcnQod2hpcC0+a2V5X2J1Ziwgc2l6ZW9mKHdoaXAt PmtleV9idWYpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlw LT5jZXJ0X2J1Ziwgc2l6ZW9mKHdoaXAtPmNlcnRfYnVmKSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJndoaXAtPmR0bHNfZmluZ2VycHJpbnQpKSA8IDApIHsKPiAr ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkRUTFM6IEZhaWxlZCB0byBnZW5l cmF0ZSBEVExTIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZVxuIik7Cj4gKyAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiByZXQ7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBXaGVuIERUTFMgc3RhdGUgY2hhbmdlLgo+ICsgKi8KPiAr c3RhdGljIGludCBkdGxzX2NvbnRleHRfb25fc3RhdGUoQVZGb3JtYXRDb250ZXh0ICpzLCBjb25z dCBjaGFyKiB0eXBlLCBjb25zdCBjaGFyKiBkZXNjKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsK PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsgICAgaW50IHN0YXRl ID0gZmZfZHRsc19zdGF0ZSh3aGlwLT5kdGxzX3VjKTsKPiArCj4gKyAgICBpZiAoc3RhdGUgPT0g RFRMU19TVEFURV9DTE9TRUQpIHsKPiArICAgICAgICB3aGlwLT5kdGxzX2Nsb3NlZCA9IDE7Cj4g KyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NFLCAiV0hJUDogRFRMUyBzZXNzaW9u IGNsb3NlZCwgdHlwZT0lcywgZGVzYz0lcywgZWxhcHNlZD0lZG1zXG4iLAo+ICsgICAgICAgICAg ICB0eXBlID8gdHlwZSA6ICIiLCBkZXNjID8gZGVzYyA6ICIiLCBFTEFQU0VEKHdoaXAtPndoaXBf c3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKPiArICAgICAgICBnb3RvIGVycm9yOwo+ICsgICAg fQo+ICsKPiArICAgIGlmIChzdGF0ZSA9PSBEVExTX1NUQVRFX0ZBSUxFRCkgewo+ICsgICAgICAg IHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9GQUlMRUQ7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAs IEFWX0xPR19FUlJPUiwgIldISVA6IERUTFMgc2Vzc2lvbiBmYWlsZWQsIHR5cGU9JXMsIGRlc2M9 JXNcbiIsCj4gKyAgICAgICAgICAgIHR5cGUgPyB0eXBlIDogIiIsIGRlc2MgPyBkZXNjIDogIiIp Owo+ICsgICAgICAgIHdoaXAtPmR0bHNfcmV0ID0gQVZFUlJPUihFSU8pOwo+ICsgICAgICAgIGdv dG8gZXJyb3I7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHN0YXRlID09IERUTFNfU1RBVEVfRklO SVNIRUQgJiYgd2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0RUTFNfRklOSVNIRUQpIHsKPiArICAg ICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfRFRMU19GSU5JU0hFRDsKPiArICAgICAgICB3 aGlwLT53aGlwX2R0bHNfdGltZSA9IGF2X2dldHRpbWUoKTsKPiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQOiBEVExTIGhhbmRzaGFrZSBpcyBkb25lLCBlbGFwc2Vk PSVkbXNcbiIsCj4gKyAgICAgICAgICAgIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2 X2dldHRpbWUoKSkpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gK2Vycm9yOgo+ ICsgICAgcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgZHRsc19pbml0 aWFsaXplKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgV0hJUENvbnRleHQgKndoaXAg PSBzLT5wcml2X2RhdGE7Cj4gKyAgICAvKiByZXVzZSB0aGUgdWRwIGNyZWF0ZWQgYnkgd2hpcCAq Lwo+ICsgICAgZmZfZHRsc19zZXRfdWRwKHdoaXAtPmR0bHNfdWMsIHdoaXAtPnVkcCk7Cj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEluaXRpYWxpemUgYW5kIGNoZWNrIHRo ZSBvcHRpb25zIGZvciB0aGUgV2ViUlRDIG11eGVyLgo+ICsgKi8KPiArc3RhdGljIGF2X2NvbGQg aW50IGluaXRpYWxpemUoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0LCBp ZGVhbF9wa3Rfc2l6ZSA9IDUzMjsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9k YXRhOwo+ICsgICAgdWludDMyX3Qgc2VlZDsKPiArCj4gKyAgICB3aGlwLT53aGlwX3N0YXJ0dGlt ZSA9IGF2X2dldHRpbWUoKTsKPiArCj4gKyAgICByZXQgPSBjZXJ0aWZpY2F0ZV9rZXlfaW5pdChz KTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19F UlJPUiwgIldISVA6IEZhaWxlZCB0byBpbml0IGNlcnRpZmljYXRlIGFuZCBrZXlcbiIpOwo+ICsg ICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogSW5pdGlhbGl6ZSB0aGUg cmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCj4gKyAgICBzZWVkID0gYXZfZ2V0X3JhbmRvbV9z ZWVkKCk7Cj4gKyAgICBhdl9sZmdfaW5pdCgmd2hpcC0+cm5kLCBzZWVkKTsKPiArCj4gKyAgICBp ZiAod2hpcC0+cGt0X3NpemUgPCBpZGVhbF9wa3Rfc2l6ZSkKPiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX1dBUk5JTkcsICJXSElQOiBwa3Rfc2l6ZT0lZCg8JWQpIGlzIHRvbyBzbWFsbCwg bWF5IGNhdXNlIHBhY2tldCBsb3NzXG4iLAo+ICsgICAgICAgICAgICAgICB3aGlwLT5wa3Rfc2l6 ZSwgaWRlYWxfcGt0X3NpemUpOwo+ICsKPiArICAgIGlmICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RB VEVfSU5JVCkKPiArICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfSU5JVDsKPiArICAg IHdoaXAtPndoaXBfaW5pdF90aW1lID0gYXZfZ2V0dGltZSgpOwo+ICsgICAgYXZfbG9nKHdoaXAs IEFWX0xPR19WRVJCT1NFLCAiV0hJUDogSW5pdCBzdGF0ZT0lZCwgaGFuZHNoYWtlX3RpbWVvdXQ9 JWRtcywgcGt0X3NpemU9JWQsIHNlZWQ9JWQsIGVsYXBzZWQ9JWRtc1xuIiwKPiArICAgICAgICB3 aGlwLT5zdGF0ZSwgd2hpcC0+aGFuZHNoYWtlX3RpbWVvdXQsIHdoaXAtPnBrdF9zaXplLCBzZWVk LCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFdoZW4gZHVwbGljYXRpbmcgYSBzdHJl YW0sIHRoZSBkZW11eGVyIGhhcyBhbHJlYWR5IHNldCB0aGUgZXh0cmFkYXRhLCBwcm9maWxlLCBh bmQKPiArICogbGV2ZWwgb2YgdGhlIHBhci4gS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBmdW5jdGlv biB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIHRoZQo+ICsgKiBwcm9maWxlIGFuZCBsZXZlbCBh cmUgc2V0Lgo+ICsgKgo+ICsgKiBXaGVuIHV0aWxpemluZyBhbiBlbmNvZGVyLCBzdWNoIGFzIGxp YngyNjQsIHRvIGVuY29kZSBhIHN0cmVhbSwgdGhlIGV4dHJhZGF0YSBpbgo+ICsgKiBwYXItPmV4 dHJhZGF0YSBjb250YWlucyB0aGUgU1BTLCB3aGljaCBpbmNsdWRlcyBwcm9maWxlIGFuZCBsZXZl bCBpbmZvcm1hdGlvbi4KPiArICogSG93ZXZlciwgdGhlIHByb2ZpbGUgYW5kIGxldmVsIG9mIHBh ciByZW1haW4gdW5zcGVjaWZpZWQuIFRoZXJlZm9yZSwgaXQgaXMgbmVjZXNzYXJ5Cj4gKyAqIHRv IGV4dHJhY3QgdGhlIHByb2ZpbGUgYW5kIGxldmVsIGRhdGEgZnJvbSB0aGUgZXh0cmFkYXRhIGFu ZCBhc3NpZ24gaXQgdG8gdGhlIHBhcidzCj4gKyAqIHByb2ZpbGUgYW5kIGxldmVsLiBLZWVwIGlu IG1pbmQgdGhhdCBBVkZNVF9HTE9CQUxIRUFERVIgbXVzdCBiZSBlbmFibGVkOyBvdGhlcndpc2Us Cj4gKyAqIHRoZSBleHRyYWRhdGEgd2lsbCByZW1haW4gZW1wdHkuCj4gKyAqLwo+ICtzdGF0aWMg aW50IHBhcnNlX3Byb2ZpbGVfbGV2ZWwoQVZGb3JtYXRDb250ZXh0ICpzLCBBVkNvZGVjUGFyYW1l dGVycyAqcGFyKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIGNvbnN0IHVpbnQ4X3Qg KnIgPSBwYXItPmV4dHJhZGF0YSwgKnIxLCAqZW5kID0gcGFyLT5leHRyYWRhdGEgKyBwYXItPmV4 dHJhZGF0YV9zaXplOwo+ICsgICAgSDI2NFNQUyBzZXEsICpjb25zdCBzcHMgPSAmc2VxOwo+ICsg ICAgdWludDMyX3Qgc3RhdGU7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0 YTsKPiArCj4gKyAgICBpZiAocGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IMjY0KQo+ICsg ICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKHBhci0+cHJvZmlsZSAhPSBBVl9QUk9G SUxFX1VOS05PV04gJiYgcGFyLT5sZXZlbCAhPSBBVl9MRVZFTF9VTktOT1dOKQo+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKCFwYXItPmV4dHJhZGF0YSB8fCBwYXItPmV4dHJh ZGF0YV9zaXplIDw9IDApIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAi V0hJUDogVW5hYmxlIHRvIHBhcnNlIHByb2ZpbGUgZnJvbSBlbXB0eSBleHRyYWRhdGE9JXAsIHNp emU9JWRcbiIsCj4gKyAgICAgICAgICAgIHBhci0+ZXh0cmFkYXRhLCBwYXItPmV4dHJhZGF0YV9z aXplKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsKPiAr ICAgIHdoaWxlICgxKSB7Cj4gKyAgICAgICAgciA9IGF2cHJpdl9maW5kX3N0YXJ0X2NvZGUociwg ZW5kLCAmc3RhdGUpOwo+ICsgICAgICAgIGlmIChyID49IGVuZCkKPiArICAgICAgICAgICAgYnJl YWs7Cj4gKwo+ICsgICAgICAgIHIxID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2RlKHIsIGVuZCk7Cj4g KyAgICAgICAgaWYgKChzdGF0ZSAmIDB4MWYpID09IEgyNjRfTkFMX1NQUykgewo+ICsgICAgICAg ICAgICByZXQgPSBmZl9hdmNfZGVjb2RlX3NwcyhzcHMsIHIsIHIxIC0gcik7Cj4gKyAgICAgICAg ICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9H X0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGRlY29kZSBTUFMsIHN0YXRlPSV4LCBzaXplPSVkXG4i LAo+ICsgICAgICAgICAgICAgICAgICAgIHN0YXRlLCAoaW50KShyMSAtIHIpKTsKPiArICAgICAg ICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IFBhcnNlIHByb2ZpbGU9JWQsIGxl dmVsPSVkIGZyb20gU1BTXG4iLAo+ICsgICAgICAgICAgICAgICAgc3BzLT5wcm9maWxlX2lkYywg c3BzLT5sZXZlbF9pZGMpOwo+ICsgICAgICAgICAgICBwYXItPnByb2ZpbGUgPSBzcHMtPnByb2Zp bGVfaWRjOwo+ICsgICAgICAgICAgICBwYXItPmxldmVsID0gc3BzLT5sZXZlbF9pZGM7Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgICAgICByID0gcjE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJu IHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFBhcnNlcyB2aWRlbyBTUFMvUFBTIGZyb20gdGhl IGV4dHJhZGF0YSBvZiBjb2RlY3BhciBhbmQgY2hlY2tzIHRoZSBjb2RlYy4KPiArICogQ3VycmVu dGx5IG9ubHkgc3VwcG9ydHMgdmlkZW8oaDI2NCkgYW5kIGF1ZGlvKG9wdXMpLiBOb3RlIHRoYXQg b25seSBiYXNlbGluZQo+ICsgKiBhbmQgY29uc3RyYWluZWQgYmFzZWxpbmUgcHJvZmlsZXMgb2Yg aDI2NCBhcmUgc3VwcG9ydGVkLgo+ICsgKgo+ICsgKiBJZiB0aGUgcHJvZmlsZSBpcyBsZXNzIHRo YW4gMCwgdGhlIGZ1bmN0aW9uIGNvbnNpZGVycyB0aGUgcHJvZmlsZSBhcyBiYXNlbGluZS4KPiAr ICogSXQgbWF5IG5lZWQgdG8gcGFyc2UgdGhlIHByb2ZpbGUgZnJvbSBTUFMvUFBTLiBUaGlzIHNp dHVhdGlvbiBvY2N1cnMgd2hlbiBpbmdlc3RpbmcKPiArICogZGVza3RvcCBhbmQgdHJhbnNjb2Rp bmcuCj4gKyAqCj4gKyAqIEBwYXJhbSBzIFBvaW50ZXIgdG8gdGhlIEFWRm9ybWF0Q29udGV4dAo+ ICsgKiBAcmV0dXJucyBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBBVkVSUk9SX3h4eCBpbiBj YXNlIG9mIGFuIGVycm9yLgo+ICsgKgo+ICsgKiBUT0RPOiBGSVhNRTogVGhlcmUgaXMgYW4gaXNz dWUgd2l0aCB0aGUgdGltZXN0YW1wIG9mIE9QVVMgYXVkaW8sIGVzcGVjaWFsbHkgd2hlbgo+ICsg KiAgdGhlIGlucHV0IGlzIGFuIE1QNCBmaWxlLiBUaGUgdGltZXN0YW1wIGRldmlhdGVzIGZyb20g dGhlIGV4cGVjdGVkIHZhbHVlIG9mIDk2MCwKPiArICogIGNhdXNpbmcgQ2hyb21lIHRvIHBsYXkg dGhlIGF1ZGlvIHN0cmVhbSB3aXRoIG5vaXNlLiBUaGlzIHByb2JsZW0gY2FuIGJlIHJlcGxpY2F0 ZWQKPiArICogIGJ5IHRyYW5zY29kaW5nIGEgc3BlY2lmaWMgZmlsZSBpbnRvIE1QNCBmb3JtYXQg YW5kIHB1Ymxpc2hpbmcgaXQgdXNpbmcgdGhlIFdISVAKPiArICogIG11eGVyLiBIb3dldmVyLCB3 aGVuIGRpcmVjdGx5IHRyYW5zY29kaW5nIGFuZCBwdWJsaXNoaW5nIHRocm91Z2ggdGhlIFdISVAg bXV4ZXIsCj4gKyAqICB0aGUgaXNzdWUgaXMgbm90IHByZXNlbnQsIGFuZCB0aGUgYXVkaW8gdGlt ZXN0YW1wIHJlbWFpbnMgY29uc2lzdGVudC4gVGhlIHJvb3QKPiArICogIGNhdXNlIGlzIHN0aWxs IHVua25vd24sIGFuZCB0aGlzIGNvbW1lbnQgaGFzIGJlZW4gYWRkZWQgdG8gYWRkcmVzcyB0aGlz IGlzc3VlCj4gKyAqICBpbiB0aGUgZnV0dXJlLiBGdXJ0aGVyIHJlc2VhcmNoIGlzIG5lZWRlZCB0 byByZXNvbHZlIHRoZSBwcm9ibGVtLgo+ICsgKi8KPiArc3RhdGljIGludCBwYXJzZV9jb2RlYyhB VkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIGludCBpLCByZXQgPSAwOwo+ICsgICAgV0hJ UENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8 IHMtPm5iX3N0cmVhbXM7IGkrKykgewo+ICsgICAgICAgIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIg PSBzLT5zdHJlYW1zW2ldLT5jb2RlY3BhcjsKPiArICAgICAgICBjb25zdCBBVkNvZGVjRGVzY3Jp cHRvciAqZGVzYyA9IGF2Y29kZWNfZGVzY3JpcHRvcl9nZXQocGFyLT5jb2RlY19pZCk7Cj4gKyAg ICAgICAgc3dpdGNoIChwYXItPmNvZGVjX3R5cGUpIHsKPiArICAgICAgICBjYXNlIEFWTUVESUFf VFlQRV9WSURFTzoKPiArICAgICAgICAgICAgaWYgKHdoaXAtPnZpZGVvX3Bhcikgewo+ICsgICAg ICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE9ubHkgb25lIHZp ZGVvIHN0cmVhbSBpcyBzdXBwb3J0ZWQgYnkgUlRDXG4iKTsKPiArICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgd2hp cC0+dmlkZW9fcGFyID0gcGFyOwo+ICsKPiArICAgICAgICAgICAgaWYgKHBhci0+Y29kZWNfaWQg IT0gQVZfQ09ERUNfSURfSDI2NCkgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIldISVA6IFVuc3VwcG9ydGVkIHZpZGVvIGNvZGVjICVzIGJ5IFJUQywgY2hv b3NlIGgyNjRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA/IGRlc2MtPm5hbWUg OiAidW5rbm93biIpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxD T01FOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBpZiAocGFyLT52aWRlb19k ZWxheSA+IDApIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1Is ICJXSElQOiBVbnN1cHBvcnRlZCBCIGZyYW1lcyBieSBSVENcbiIpOwo+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsg ICAgICAgICAgICBpZiAoKHJldCA9IHBhcnNlX3Byb2ZpbGVfbGV2ZWwocywgcGFyKSkgPCAwKSB7 Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFp bGVkIHRvIHBhcnNlIFNQUy9QUFMgZnJvbSBleHRyYWRhdGFcbiIpOwo+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAg ICAgICAgaWYgKHBhci0+cHJvZmlsZSA9PSBBVl9QUk9GSUxFX1VOS05PV04pIHsKPiArICAgICAg ICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IE5vIHByb2ZpbGUg Zm91bmQgaW4gZXh0cmFkYXRhLCBjb25zaWRlciBiYXNlbGluZVxuIik7Cj4gKyAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAg ICAgIGlmIChwYXItPmxldmVsID09IEFWX0xFVkVMX1VOS05PV04pIHsKPiArICAgICAgICAgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IE5vIGxldmVsIGZvdW5kIGlu IGV4dHJhZGF0YSwgY29uc2lkZXIgMy4xXG4iKTsKPiArICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgYnJlYWs7Cj4g KyAgICAgICAgY2FzZSBBVk1FRElBX1RZUEVfQVVESU86Cj4gKyAgICAgICAgICAgIGlmICh3aGlw LT5hdWRpb19wYXIpIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBPbmx5IG9uZSBhdWRpbyBzdHJlYW0gaXMgc3VwcG9ydGVkIGJ5IFJUQ1xuIik7 Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgICAg ICB9Cj4gKyAgICAgICAgICAgIHdoaXAtPmF1ZGlvX3BhciA9IHBhcjsKPiArCj4gKyAgICAgICAg ICAgIGlmIChwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX09QVVMpIHsKPiArICAgICAgICAg ICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBVbnN1cHBvcnRlZCBhdWRp byBjb2RlYyAlcyBieSBSVEMsIGNob29zZSBvcHVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAg IGRlc2MgPyBkZXNjLT5uYW1lIDogInVua25vd24iKTsKPiArICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAg ICAgaWYgKHBhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzICE9IDIpIHsKPiArICAgICAgICAgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBVbnN1cHBvcnRlZCBhdWRpbyBj aGFubmVscyAlZCBieSBSVEMsIGNob29zZSBzdGVyZW9cbiIsCj4gKyAgICAgICAgICAgICAgICAg ICAgcGFyLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAg ICBpZiAocGFyLT5zYW1wbGVfcmF0ZSAhPSA0ODAwMCkgewo+ICsgICAgICAgICAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IFVuc3VwcG9ydGVkIGF1ZGlvIHNhbXBsZSBy YXRlICVkIGJ5IFJUQywgY2hvb3NlIDQ4MDAwXG4iLCBwYXItPnNhbXBsZV9yYXRlKTsKPiArICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAgICAgICAgICAg fQo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogQ29kZWMgdHlwZSAnJXMnIGZvciBz dHJlYW0gJWQgaXMgbm90IHN1cHBvcnRlZCBieSBSVENcbiIsCj4gKyAgICAgICAgICAgICAgICAg ICBhdl9nZXRfbWVkaWFfdHlwZV9zdHJpbmcocGFyLT5jb2RlY190eXBlKSwgaSk7Cj4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAgICAgICB9Cj4gKyAgICB9 Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEdlbmVyYXRlIFNE UCBvZmZlciBhY2NvcmRpbmcgdG8gdGhlIGNvZGVjIHBhcmFtZXRlcnMsIERUTFMgYW5kIElDRSBp bmZvcm1hdGlvbi4KPiArICoKPiArICogTm90ZSB0aGF0IHdlIGRvbid0IHVzZSBhdl9zZHBfY3Jl YXRlIHRvIGdlbmVyYXRlIFNEUCBvZmZlciBiZWNhdXNlIGl0IGRvZXNuJ3QKPiArICogc3VwcG9y dCBEVExTIGFuZCBJQ0UgaW5mb3JtYXRpb24uCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBpZiBPSywg QVZFUlJPUl94eHggb24gZXJyb3IKPiArICovCj4gK3N0YXRpYyBpbnQgZ2VuZXJhdGVfc2RwX29m ZmVyKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgaW50IHJldCA9IDAsIHByb2ZpbGUs IGxldmVsLCBwcm9maWxlX2lvcDsKPiArICAgIGNvbnN0IGNoYXIgKmFjb2RlY19uYW1lID0gTlVM TCwgKnZjb2RlY19uYW1lID0gTlVMTDsKPiArICAgIEFWQlByaW50IGJwOwo+ICsgICAgV0hJUENv bnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgLyogVG8gcHJldmVudCBhIGNy YXNoIGR1cmluZyBjbGVhbnVwLCBhbHdheXMgaW5pdGlhbGl6ZSBpdC4gKi8KPiArICAgIGF2X2Jw cmludF9pbml0KCZicCwgMSwgTUFYX1NEUF9TSVpFKTsKPiArCj4gKyAgICBpZiAod2hpcC0+c2Rw X29mZmVyKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IFNE UCBvZmZlciBpcyBhbHJlYWR5IHNldFxuIik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5W QUwpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHNucHJpbnRmKHdo aXAtPmljZV91ZnJhZ19sb2NhbCwgc2l6ZW9mKHdoaXAtPmljZV91ZnJhZ19sb2NhbCksICIlMDh4 IiwKPiArICAgICAgICBhdl9sZmdfZ2V0KCZ3aGlwLT5ybmQpKTsKPiArICAgIHNucHJpbnRmKHdo aXAtPmljZV9wd2RfbG9jYWwsIHNpemVvZih3aGlwLT5pY2VfcHdkX2xvY2FsKSwgIiUwOHglMDh4 JTA4eCUwOHgiLAo+ICsgICAgICAgIGF2X2xmZ19nZXQoJndoaXAtPnJuZCksIGF2X2xmZ19nZXQo JndoaXAtPnJuZCksIGF2X2xmZ19nZXQoJndoaXAtPnJuZCksCj4gKyAgICAgICAgYXZfbGZnX2dl dCgmd2hpcC0+cm5kKSk7Cj4gKwo+ICsgICAgd2hpcC0+YXVkaW9fc3NyYyA9IGF2X2xmZ19nZXQo JndoaXAtPnJuZCk7Cj4gKyAgICB3aGlwLT52aWRlb19zc3JjID0gYXZfbGZnX2dldCgmd2hpcC0+ cm5kKTsKPiArCj4gKyAgICB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUgPSBXSElQX1JUUF9QQVlM T0FEX1RZUEVfT1BVUzsKPiArICAgIHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSA9IFdISVBfUlRQ X1BBWUxPQURfVFlQRV9IMjY0Owo+ICsKPiArICAgIGF2X2JwcmludGYoJmJwLCAiIgo+ICsgICAg ICAgICJ2PTBcclxuIgo+ICsgICAgICAgICJvPUZGbXBlZyAlcyAyIElOIElQNCAlc1xyXG4iCj4g KyAgICAgICAgInM9RkZtcGVnUHVibGlzaFNlc3Npb25cclxuIgo+ICsgICAgICAgICJ0PTAgMFxy XG4iCj4gKyAgICAgICAgImE9Z3JvdXA6QlVORExFIDAgMVxyXG4iCj4gKyAgICAgICAgImE9ZXh0 bWFwLWFsbG93LW1peGVkXHJcbiIKPiArICAgICAgICAiYT1tc2lkLXNlbWFudGljOiBXTVNcclxu IiwKPiArICAgICAgICBXSElQX1NEUF9TRVNTSU9OX0lELAo+ICsgICAgICAgIFdISVBfU0RQX0NS RUFUT1JfSVApOwo+ICsKPiArICAgIGlmICh3aGlwLT5hdWRpb19wYXIpIHsKPiArICAgICAgICBp ZiAod2hpcC0+YXVkaW9fcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9PUFVTKQo+ICsgICAg ICAgICAgICBhY29kZWNfbmFtZSA9ICJvcHVzIjsKPiArCj4gKyAgICAgICAgYXZfYnByaW50Zigm YnAsICIiCj4gKyAgICAgICAgICAgICJtPWF1ZGlvIDkgVURQL1RMUy9SVFAvU0FWUEYgJXVcclxu Igo+ICsgICAgICAgICAgICAiYz1JTiBJUDQgMC4wLjAuMFxyXG4iCj4gKyAgICAgICAgICAgICJh PWljZS11ZnJhZzolc1xyXG4iCj4gKyAgICAgICAgICAgICJhPWljZS1wd2Q6JXNcclxuIgo+ICsg ICAgICAgICAgICAiYT1maW5nZXJwcmludDpzaGEtMjU2ICVzXHJcbiIKPiArICAgICAgICAgICAg ImE9c2V0dXA6cGFzc2l2ZVxyXG4iCj4gKyAgICAgICAgICAgICJhPW1pZDowXHJcbiIKPiArICAg ICAgICAgICAgImE9c2VuZG9ubHlcclxuIgo+ICsgICAgICAgICAgICAiYT1tc2lkOkZGbXBlZyBh dWRpb1xyXG4iCj4gKyAgICAgICAgICAgICJhPXJ0Y3AtbXV4XHJcbiIKPiArICAgICAgICAgICAg ImE9cnRwbWFwOiV1ICVzLyVkLyVkXHJcbiIKPiArICAgICAgICAgICAgImE9c3NyYzoldSBjbmFt ZTpGRm1wZWdcclxuIgo+ICsgICAgICAgICAgICAiYT1zc3JjOiV1IG1zaWQ6RkZtcGVnIGF1ZGlv XHJcbiIsCj4gKyAgICAgICAgICAgIHdoaXAtPmF1ZGlvX3BheWxvYWRfdHlwZSwKPiArICAgICAg ICAgICAgd2hpcC0+aWNlX3VmcmFnX2xvY2FsLAo+ICsgICAgICAgICAgICB3aGlwLT5pY2VfcHdk X2xvY2FsLAo+ICsgICAgICAgICAgICB3aGlwLT5kdGxzX2ZpbmdlcnByaW50LAo+ICsgICAgICAg ICAgICB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUsCj4gKyAgICAgICAgICAgIGFjb2RlY19uYW1l LAo+ICsgICAgICAgICAgICB3aGlwLT5hdWRpb19wYXItPnNhbXBsZV9yYXRlLAo+ICsgICAgICAg ICAgICB3aGlwLT5hdWRpb19wYXItPmNoX2xheW91dC5uYl9jaGFubmVscywKPiArICAgICAgICAg ICAgd2hpcC0+YXVkaW9fc3NyYywKPiArICAgICAgICAgICAgd2hpcC0+YXVkaW9fc3NyYyk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgaWYgKHdoaXAtPnZpZGVvX3Bhcikgewo+ICsgICAgICAgIHByb2Zp bGVfaW9wID0gcHJvZmlsZSA9IHdoaXAtPnZpZGVvX3Bhci0+cHJvZmlsZTsKPiArICAgICAgICBs ZXZlbCA9IHdoaXAtPnZpZGVvX3Bhci0+bGV2ZWw7Cj4gKyAgICAgICAgaWYgKHdoaXAtPnZpZGVv X3Bhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCkgewo+ICsgICAgICAgICAgICB2Y29k ZWNfbmFtZSA9ICJIMjY0IjsKPiArICAgICAgICAgICAgcHJvZmlsZV9pb3AgJj0gQVZfUFJPRklM RV9IMjY0X0NPTlNUUkFJTkVEOwo+ICsgICAgICAgICAgICBwcm9maWxlICY9ICh+QVZfUFJPRklM RV9IMjY0X0NPTlNUUkFJTkVEKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGF2X2Jwcmlu dGYoJmJwLCAiIgo+ICsgICAgICAgICAgICAibT12aWRlbyA5IFVEUC9UTFMvUlRQL1NBVlBGICV1 XHJcbiIKPiArICAgICAgICAgICAgImM9SU4gSVA0IDAuMC4wLjBcclxuIgo+ICsgICAgICAgICAg ICAiYT1pY2UtdWZyYWc6JXNcclxuIgo+ICsgICAgICAgICAgICAiYT1pY2UtcHdkOiVzXHJcbiIK PiArICAgICAgICAgICAgImE9ZmluZ2VycHJpbnQ6c2hhLTI1NiAlc1xyXG4iCj4gKyAgICAgICAg ICAgICJhPXNldHVwOnBhc3NpdmVcclxuIgo+ICsgICAgICAgICAgICAiYT1taWQ6MVxyXG4iCj4g KyAgICAgICAgICAgICJhPXNlbmRvbmx5XHJcbiIKPiArICAgICAgICAgICAgImE9bXNpZDpGRm1w ZWcgdmlkZW9cclxuIgo+ICsgICAgICAgICAgICAiYT1ydGNwLW11eFxyXG4iCj4gKyAgICAgICAg ICAgICJhPXJ0Y3AtcnNpemVcclxuIgo+ICsgICAgICAgICAgICAiYT1ydHBtYXA6JXUgJXMvOTAw MDBcclxuIgo+ICsgICAgICAgICAgICAiYT1mbXRwOiV1IGxldmVsLWFzeW1tZXRyeS1hbGxvd2Vk PTE7cGFja2V0aXphdGlvbi1tb2RlPTE7cHJvZmlsZS1sZXZlbC1pZD0lMDJ4JTAyeCUwMnhcclxu Igo+ICsgICAgICAgICAgICAiYT1zc3JjOiV1IGNuYW1lOkZGbXBlZ1xyXG4iCj4gKyAgICAgICAg ICAgICJhPXNzcmM6JXUgbXNpZDpGRm1wZWcgdmlkZW9cclxuIiwKPiArICAgICAgICAgICAgd2hp cC0+dmlkZW9fcGF5bG9hZF90eXBlLAo+ICsgICAgICAgICAgICB3aGlwLT5pY2VfdWZyYWdfbG9j YWwsCj4gKyAgICAgICAgICAgIHdoaXAtPmljZV9wd2RfbG9jYWwsCj4gKyAgICAgICAgICAgIHdo aXAtPmR0bHNfZmluZ2VycHJpbnQsCj4gKyAgICAgICAgICAgIHdoaXAtPnZpZGVvX3BheWxvYWRf dHlwZSwKPiArICAgICAgICAgICAgdmNvZGVjX25hbWUsCj4gKyAgICAgICAgICAgIHdoaXAtPnZp ZGVvX3BheWxvYWRfdHlwZSwKPiArICAgICAgICAgICAgcHJvZmlsZSwKPiArICAgICAgICAgICAg cHJvZmlsZV9pb3AsCj4gKyAgICAgICAgICAgIGxldmVsLAo+ICsgICAgICAgICAgICB3aGlwLT52 aWRlb19zc3JjLAo+ICsgICAgICAgICAgICB3aGlwLT52aWRlb19zc3JjKTsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoIWF2X2JwcmludF9pc19jb21wbGV0ZSgmYnApKSB7Cj4gKyAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE9mZmVyIGV4Y2VlZCBtYXggJWQsICVzXG4i LCBNQVhfU0RQX1NJWkUsIGJwLnN0cik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+ ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHdoaXAtPnNkcF9vZmZlciA9 IGF2X3N0cmR1cChicC5zdHIpOwo+ICsgICAgaWYgKCF3aGlwLT5zZHBfb2ZmZXIpIHsKPiArICAg ICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgaWYgKHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9PRkZFUikKPiArICAgICAg ICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfT0ZGRVI7Cj4gKyAgICB3aGlwLT53aGlwX29mZmVy X3RpbWUgPSBhdl9nZXR0aW1lKCk7Cj4gKyAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0Us ICJXSElQOiBHZW5lcmF0ZWQgc3RhdGU9JWQsIG9mZmVyOiAlc1xuIiwgd2hpcC0+c3RhdGUsIHdo aXAtPnNkcF9vZmZlcik7Cj4gKwo+ICtlbmQ6Cj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJw LCBOVUxMKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBFeGNoYW5n ZSBTRFAgb2ZmZXIgd2l0aCBXZWJSVEMgcGVlciB0byBnZXQgdGhlIGFuc3dlci4KPiArICoKPiAr ICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgo+ICsgKi8KPiArc3RhdGlj IGludCBleGNoYW5nZV9zZHAoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0 Owo+ICsgICAgY2hhciBidWZbTUFYX1VSTF9TSVpFXTsKPiArICAgIEFWQlByaW50IGJwOwo+ICsg ICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICAvKiBUaGUgVVJMIGNv bnRleHQgaXMgYW4gSFRUUCB0cmFuc3BvcnQgbGF5ZXIgZm9yIHRoZSBXSElQIHByb3RvY29sLiAq Lwo+ICsgICAgVVJMQ29udGV4dCAqd2hpcF91YyA9IE5VTEw7Cj4gKyAgICBBVkRpY3Rpb25hcnkg Km9wdHMgPSBOVUxMOwo+ICsgICAgY2hhciAqaGV4X2RhdGEgPSBOVUxMOwo+ICsKPiArICAgIC8q IFRvIHByZXZlbnQgYSBjcmFzaCBkdXJpbmcgY2xlYW51cCwgYWx3YXlzIGluaXRpYWxpemUgaXQu ICovCj4gKyAgICBhdl9icHJpbnRfaW5pdCgmYnAsIDEsIE1BWF9TRFBfU0laRSk7Cj4gKwo+ICsg ICAgaWYgKCF3aGlwLT5zZHBfb2ZmZXIgfHwgIXN0cmxlbih3aGlwLT5zZHBfb2ZmZXIpKSB7Cj4g KyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE5vIG9mZmVyIHRvIGV4 Y2hhbmdlXG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAg Z290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2Yo YnVmKSwgIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXHJcbkNvbnRlbnQtVHlwZTogYXBwbGljYXRp b24vc2RwXHJcbiIpOwo+ICsgICAgaWYgKHdoaXAtPmF1dGhvcml6YXRpb24pCj4gKyAgICAgICAg cmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsICJBdXRob3JpemF0 aW9uOiBCZWFyZXIgJXNcclxuIiwgd2hpcC0+YXV0aG9yaXphdGlvbik7Cj4gKyAgICBpZiAocmV0 IDw9IDAgfHwgcmV0ID49IHNpemVvZihidWYpKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBnZW5lcmF0ZSBoZWFkZXJzLCBzaXplPSVkLCAl c1xuIiwgcmV0LCBidWYpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiArICAg ICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICBhdl9kaWN0X3NldCgmb3B0cywgImhl YWRlcnMiLCBidWYsIDApOwo+ICsgICAgYXZfZGljdF9zZXRfaW50KCZvcHRzLCAiY2h1bmtlZF9w b3N0IiwgMCwgMCk7Cj4gKwo+ICsgICAgaGV4X2RhdGEgPSBhdl9tYWxsb2N6KDIgKiBzdHJsZW4o d2hpcC0+c2RwX29mZmVyKSArIDEpOwo+ICsgICAgaWYgKCFoZXhfZGF0YSkgewo+ICsgICAgICAg IHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiAr ICAgIGZmX2RhdGFfdG9faGV4KGhleF9kYXRhLCB3aGlwLT5zZHBfb2ZmZXIsIHN0cmxlbih3aGlw LT5zZHBfb2ZmZXIpLCAwKTsKPiArICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAicG9zdF9kYXRhIiwg aGV4X2RhdGEsIDApOwo+ICsKPiArICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ3aGlw X3VjLCBzLT51cmwsIEFWSU9fRkxBR19SRUFEX1dSSVRFLCAmcy0+aW50ZXJydXB0X2NhbGxiYWNr LAo+ICsgICAgICAgICZvcHRzLCBzLT5wcm90b2NvbF93aGl0ZWxpc3QsIHMtPnByb3RvY29sX2Js YWNrbGlzdCwgTlVMTCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgIGF2X2xvZyh3 aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gcmVxdWVzdCB1cmw9JXMsIG9mZmVy OiAlc1xuIiwgcy0+dXJsLCB3aGlwLT5zZHBfb2ZmZXIpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ ICsgICAgfQo+ICsKPiArICAgIGlmIChmZl9odHRwX2dldF9uZXdfbG9jYXRpb24od2hpcF91Yykp IHsKPiArICAgICAgICB3aGlwLT53aGlwX3Jlc291cmNlX3VybCA9IGF2X3N0cmR1cChmZl9odHRw X2dldF9uZXdfbG9jYXRpb24od2hpcF91YykpOwo+ICsgICAgICAgIGlmICghd2hpcC0+d2hpcF9y ZXNvdXJjZV91cmwpIHsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsg ICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgd2hp bGUgKDEpIHsKPiArICAgICAgICByZXQgPSBmZnVybF9yZWFkKHdoaXBfdWMsIGJ1Ziwgc2l6ZW9m KGJ1ZikpOwo+ICsgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKPiArICAgICAgICAg ICAgLyogUmVzZXQgdGhlIGVycm9yIGJlY2F1c2Ugd2UgcmVhZCBhbGwgcmVzcG9uc2UgYXMgYW5z d2VyIHV0aWwgRU9GLiAqLwo+ICsgICAgICAgICAgICByZXQgPSAwOwo+ICsgICAgICAgICAgICBi cmVhazsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKHJldCA8PSAwKSB7Cj4gKyAgICAgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gcmVhZCByZXNw b25zZSBmcm9tIHVybD0lcywgb2ZmZXIgaXMgJXMsIGFuc3dlciBpcyAlc1xuIiwKPiArICAgICAg ICAgICAgICAgIHMtPnVybCwgd2hpcC0+c2RwX29mZmVyLCB3aGlwLT5zZHBfYW5zd2VyKTsKPiAr ICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBhdl9icHJp bnRmKCZicCwgIiUuKnMiLCByZXQsIGJ1Zik7Cj4gKyAgICAgICAgaWYgKCFhdl9icHJpbnRfaXNf Y29tcGxldGUoJmJwKSkgewo+ICsgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogQW5zd2VyIGV4Y2VlZCBtYXggc2l6ZSAlZCwgJS4qcywgJXNcbiIsIE1BWF9TRFBf U0laRSwgcmV0LCBidWYsIGJwLnN0cik7Cj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlP KTsKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiAr ICAgIGlmICghYXZfc3Ryc3RhcnQoYnAuc3RyLCAidj0iLCBOVUxMKSkgewo+ICsgICAgICAgIGF2 X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBJbnZhbGlkIGFuc3dlcjogJXNcbiIsIGJw LnN0cik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIGdvdG8g ZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHdoaXAtPnNkcF9hbnN3ZXIgPSBhdl9zdHJkdXAoYnAu c3RyKTsKPiArICAgIGlmICghd2hpcC0+c2RwX2Fuc3dlcikgewo+ICsgICAgICAgIHJldCA9IEFW RVJST1IoRU5PTUVNKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICBp ZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0FOU1dFUikKPiArICAgICAgICB3aGlwLT5zdGF0 ZSA9IFdISVBfU1RBVEVfQU5TV0VSOwo+ICsgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NF LCAiV0hJUDogR290IHN0YXRlPSVkLCBhbnN3ZXI6ICVzXG4iLCB3aGlwLT5zdGF0ZSwgd2hpcC0+ c2RwX2Fuc3dlcik7Cj4gKwo+ICtlbmQ6Cj4gKyAgICBmZnVybF9jbG9zZXAoJndoaXBfdWMpOwo+ ICsgICAgYXZfYnByaW50X2ZpbmFsaXplKCZicCwgTlVMTCk7Cj4gKyAgICBhdl9kaWN0X2ZyZWUo Jm9wdHMpOwo+ICsgICAgYXZfZnJlZXAoJmhleF9kYXRhKTsKPiArICAgIHJldHVybiByZXQ7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBQYXJzZXMgdGhlIElDRSB1ZnJhZywgcHdkLCBhbmQgY2FuZGlk YXRlcyBmcm9tIHRoZSBTRFAgYW5zd2VyLgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gZXh0cmFjdCB0aGUgSUNFIHVmcmFnLCBwd2QsIGFuZCBjYW5kaWRhdGVzIGZyb20gdGhl IFNEUCBhbnN3ZXIuCj4gKyAqIEl0IHJldHVybnMgYW4gZXJyb3IgaWYgYW55IG9mIHRoZXNlIGZp ZWxkcyBpcyBOVUxMLiBUaGUgZnVuY3Rpb24gb25seSB1c2VzIHRoZSBmaXJzdAo+ICsgKiBjYW5k aWRhdGUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNhbmRpZGF0ZXMuIEhvd2V2ZXIsIHN1cHBvcnQg Zm9yIG11bHRpcGxlIGNhbmRpZGF0ZXMKPiArICogd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJl Lgo+ICsgKgo+ICsgKiBAcGFyYW0gcyBQb2ludGVyIHRvIHRoZSBBVkZvcm1hdENvbnRleHQKPiAr ICogQHJldHVybnMgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgQVZFUlJPUl94eHggaWYgYW4g ZXJyb3Igb2NjdXJzLgo+ICsgKi8KPiArc3RhdGljIGludCBwYXJzZV9hbnN3ZXIoQVZGb3JtYXRD b250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIEFWSU9Db250ZXh0ICpw YjsKPiArICAgIGNoYXIgbGluZVtNQVhfVVJMX1NJWkVdOwo+ICsgICAgY29uc3QgY2hhciAqcHRy Owo+ICsgICAgaW50IGk7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsK PiArCj4gKyAgICBpZiAoIXdoaXAtPnNkcF9hbnN3ZXIgfHwgIXN0cmxlbih3aGlwLT5zZHBfYW5z d2VyKSkgewo+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBObyBh bnN3ZXIgdG8gcGFyc2VcbiIpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiAr ICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICBwYiA9IGF2aW9fYWxsb2NfY29u dGV4dCh3aGlwLT5zZHBfYW5zd2VyLCBzdHJsZW4od2hpcC0+c2RwX2Fuc3dlciksIDAsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpOwo+ICsgICAgaWYgKCFwYikKPiArICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ICsKPiArICAgIGZvciAoaSA9IDA7ICFhdmlvX2Zlb2YocGIpOyBpKysp IHsKPiArICAgICAgICBmZl9nZXRfY2hvbXBfbGluZShwYiwgbGluZSwgc2l6ZW9mKGxpbmUpKTsK PiArICAgICAgICBpZiAoYXZfc3Ryc3RhcnQobGluZSwgImE9aWNlLXVmcmFnOiIsICZwdHIpICYm ICF3aGlwLT5pY2VfdWZyYWdfcmVtb3RlKSB7Cj4gKyAgICAgICAgICAgIHdoaXAtPmljZV91ZnJh Z19yZW1vdGUgPSBhdl9zdHJkdXAocHRyKTsKPiArICAgICAgICAgICAgaWYgKCF3aGlwLT5pY2Vf dWZyYWdfcmVtb3RlKSB7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7 Cj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAg IH0gZWxzZSBpZiAoYXZfc3Ryc3RhcnQobGluZSwgImE9aWNlLXB3ZDoiLCAmcHRyKSAmJiAhd2hp cC0+aWNlX3B3ZF9yZW1vdGUpIHsKPiArICAgICAgICAgICAgd2hpcC0+aWNlX3B3ZF9yZW1vdGUg PSBhdl9zdHJkdXAocHRyKTsKPiArICAgICAgICAgICAgaWYgKCF3aGlwLT5pY2VfcHdkX3JlbW90 ZSkgewo+ICsgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAg ICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9IGVsc2UgaWYg KGF2X3N0cnN0YXJ0KGxpbmUsICJhPWNhbmRpZGF0ZToiLCAmcHRyKSAmJiAhd2hpcC0+aWNlX3By b3RvY29sKSB7Cj4gKyAgICAgICAgICAgIHB0ciA9IGF2X3N0cmlzdHIocHRyLCAidWRwIik7Cj4g KyAgICAgICAgICAgIGlmIChwdHIgJiYgYXZfc3RyaXN0cihwdHIsICJob3N0IikpIHsKPiArICAg ICAgICAgICAgICAgIGNoYXIgcHJvdG9jb2xbMTddLCBob3N0WzEyOV07Cj4gKyAgICAgICAgICAg ICAgICBpbnQgcHJpb3JpdHksIHBvcnQ7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBzc2NhbmYo cHRyLCAiJTE2cyAlZCAlMTI4cyAlZCB0eXAgaG9zdCIsIHByb3RvY29sLCAmcHJpb3JpdHksIGhv c3QsICZwb3J0KTsKPiArICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gNCkgewo+ICsgICAgICAg ICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgJWQg dG8gcGFyc2UgbGluZSAlZCAlcyBmcm9tICVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICByZXQsIGksIGxpbmUsIHdoaXAtPnNkcF9hbnN3ZXIpOwo+ICsgICAgICAgICAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRUlPKTsKPiArICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiAr ICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoYXZfc3RyY2FzZWNt cChwcm90b2NvbCwgInVkcCIpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAs IEFWX0xPR19FUlJPUiwgIldISVA6IFByb3RvY29sICVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUlRD LCBjaG9vc2UgdWRwLCBsaW5lICVkICVzIG9mICVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICBwcm90b2NvbCwgaSwgbGluZSwgd2hpcC0+c2RwX2Fuc3dlcik7Cj4gKyAgICAgICAgICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+ICsgICAgICAgICAgICAgICAgICAgIGdvdG8g ZW5kOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIHdoaXAtPmlj ZV9wcm90b2NvbCA9IGF2X3N0cmR1cChwcm90b2NvbCk7Cj4gKyAgICAgICAgICAgICAgICB3aGlw LT5pY2VfaG9zdCA9IGF2X3N0cmR1cChob3N0KTsKPiArICAgICAgICAgICAgICAgIHdoaXAtPmlj ZV9wb3J0ID0gcG9ydDsKPiArICAgICAgICAgICAgICAgIGlmICghd2hpcC0+aWNlX3Byb3RvY29s IHx8ICF3aGlwLT5pY2VfaG9zdCkgewo+ICsgICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJS T1IoRU5PTUVNKTsKPiArICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAg ICBpZiAoIXdoaXAtPmljZV9wd2RfcmVtb3RlIHx8ICFzdHJsZW4od2hpcC0+aWNlX3B3ZF9yZW1v dGUpKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE5vIHJl bW90ZSBpY2UgcHdkIHBhcnNlZCBmcm9tICVzXG4iLCB3aGlwLT5zZHBfYW5zd2VyKTsKPiArICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgaWYgKCF3aGlwLT5pY2VfdWZyYWdfcmVtb3RlIHx8ICFzdHJsZW4od2hpcC0+ aWNlX3VmcmFnX3JlbW90ZSkpIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogTm8gcmVtb3RlIGljZSB1ZnJhZyBwYXJzZWQgZnJvbSAlc1xuIiwgd2hpcC0+c2Rw X2Fuc3dlcik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIGdv dG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICghd2hpcC0+aWNlX3Byb3RvY29sIHx8ICF3 aGlwLT5pY2VfaG9zdCB8fCAhd2hpcC0+aWNlX3BvcnQpIHsKPiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogTm8gaWNlIGNhbmRpZGF0ZSBwYXJzZWQgZnJvbSAlc1xu Iiwgd2hpcC0+c2RwX2Fuc3dlcik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICh3aGlwLT5zdGF0ZSA8 IFdISVBfU1RBVEVfTkVHT1RJQVRFRCkKPiArICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RB VEVfTkVHT1RJQVRFRDsKPiArICAgIHdoaXAtPndoaXBfYW5zd2VyX3RpbWUgPSBhdl9nZXR0aW1l KCk7Cj4gKyAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQOiBTRFAgc3RhdGU9 JWQsIG9mZmVyPSVsdUIsIGFuc3dlcj0lbHVCLCB1ZnJhZz0lcywgcHdkPSVsdUIsIHRyYW5zcG9y dD0lczovLyVzOiVkLCBlbGFwc2VkPSVkbXNcbiIsCj4gKyAgICAgICAgd2hpcC0+c3RhdGUsIHN0 cmxlbih3aGlwLT5zZHBfb2ZmZXIpLCBzdHJsZW4od2hpcC0+c2RwX2Fuc3dlciksIHdoaXAtPmlj ZV91ZnJhZ19yZW1vdGUsIHN0cmxlbih3aGlwLT5pY2VfcHdkX3JlbW90ZSksCj4gKyAgICAgICAg d2hpcC0+aWNlX3Byb3RvY29sLCB3aGlwLT5pY2VfaG9zdCwgd2hpcC0+aWNlX3BvcnQsIEVMQVBT RUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dldHRpbWUoKSkpOwo+ICsKPiArZW5kOgo+ICsg ICAgYXZpb19jb250ZXh0X2ZyZWUoJnBiKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBDcmVhdGVzIGFuZCBtYXJzaGFscyBhbiBJQ0UgYmluZGluZyByZXF1ZXN0IHBh Y2tldC4KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBtYXJzaGFscyBhbiBJ Q0UgYmluZGluZyByZXF1ZXN0IHBhY2tldC4gVGhlIGZ1bmN0aW9uIG9ubHkKPiArICogZ2VuZXJh dGVzIHRoZSB1c2VybmFtZSBhdHRyaWJ1dGUgYW5kIGRvZXMgbm90IGluY2x1ZGUgZ29vZy1uZXR3 b3JrLWluZm8sIGljZS1jb250cm9sbGluZywKPiArICogdXNlLWNhbmRpZGF0ZSwgYW5kIHByaW9y aXR5LiBIb3dldmVyLCBzb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMgbWF5IGJlIGFkZGVkIGluIHRo ZSBmdXR1cmUuCj4gKyAqCj4gKyAqIEBwYXJhbSBzIFBvaW50ZXIgdG8gdGhlIEFWRm9ybWF0Q29u dGV4dAo+ICsgKiBAcGFyYW0gYnVmIFBvaW50ZXIgdG8gbWVtb3J5IGJ1ZmZlciB0byBzdG9yZSB0 aGUgcmVxdWVzdCBwYWNrZXQKPiArICogQHBhcmFtIGJ1Zl9zaXplIFNpemUgb2YgdGhlIG1lbW9y eSBidWZmZXIKPiArICogQHBhcmFtIHJlcXVlc3Rfc2l6ZSBQb2ludGVyIHRvIGFuIGludGVnZXIg dGhhdCByZWNlaXZlcyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBwYWNrZXQKPiArICogQHJldHVy biBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBBVkVSUk9SX3h4eCBpZiBhbiBlcnJvciBvY2N1 cnMuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGljZV9jcmVhdGVfcmVxdWVzdChBVkZvcm1hdENvbnRl eHQgKnMsIHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBpbnQgKnJlcXVlc3Rfc2l6ZSkKPiAr ewo+ICsgICAgaW50IHJldCwgc2l6ZSwgY3JjMzI7Cj4gKyAgICBjaGFyIHVzZXJuYW1lWzEyOF07 Cj4gKyAgICBBVklPQ29udGV4dCAqcGIgPSBOVUxMOwo+ICsgICAgQVZITUFDICpobWFjID0gTlVM TDsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIHBi ID0gYXZpb19hbGxvY19jb250ZXh0KGJ1ZiwgYnVmX3NpemUsIDEsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpOwo+ICsgICAgaWYgKCFwYikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p Owo+ICsKPiArICAgIGhtYWMgPSBhdl9obWFjX2FsbG9jKEFWX0hNQUNfU0hBMSk7Cj4gKyAgICBp ZiAoIWhtYWMpIHsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAg Z290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogV3JpdGUgMjAgYnl0ZXMgaGVhZGVyICov Cj4gKyAgICBhdmlvX3diMTYocGIsIDB4MDAwMSk7IC8qIFNUVU4gYmluZGluZyByZXF1ZXN0ICov Cj4gKyAgICBhdmlvX3diMTYocGIsIDApOyAgICAgIC8qIGxlbmd0aCAqLwo+ICsgICAgYXZpb193 YjMyKHBiLCBTVFVOX01BR0lDX0NPT0tJRSk7IC8qIG1hZ2ljIGNvb2tpZSAqLwo+ICsgICAgYXZp b193YjMyKHBiLCBhdl9sZmdfZ2V0KCZ3aGlwLT5ybmQpKTsgLyogdHJhbnNhY3Rpb24gSUQgKi8K PiArICAgIGF2aW9fd2IzMihwYiwgYXZfbGZnX2dldCgmd2hpcC0+cm5kKSk7IC8qIHRyYW5zYWN0 aW9uIElEICovCj4gKyAgICBhdmlvX3diMzIocGIsIGF2X2xmZ19nZXQoJndoaXAtPnJuZCkpOyAv KiB0cmFuc2FjdGlvbiBJRCAqLwo+ICsKPiArICAgIC8qIFRoZSB1c2VybmFtZSBpcyB0aGUgY29u Y2F0ZW5hdGlvbiBvZiB0aGUgdHdvIElDRSB1ZnJhZyAqLwo+ICsgICAgcmV0ID0gc25wcmludGYo dXNlcm5hbWUsIHNpemVvZih1c2VybmFtZSksICIlczolcyIsIHdoaXAtPmljZV91ZnJhZ19yZW1v dGUsIHdoaXAtPmljZV91ZnJhZ19sb2NhbCk7Cj4gKyAgICBpZiAocmV0IDw9IDAgfHwgcmV0ID49 IHNpemVvZih1c2VybmFtZSkpIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogRmFpbGVkIHRvIGJ1aWxkIHVzZXJuYW1lICVzOiVzLCBtYXg9JWx1LCByZXQ9JWRc biIsCj4gKyAgICAgICAgICAgIHdoaXAtPmljZV91ZnJhZ19yZW1vdGUsIHdoaXAtPmljZV91ZnJh Z19sb2NhbCwgc2l6ZW9mKHVzZXJuYW1lKSwgcmV0KTsKPiArICAgICAgICByZXQgPSBBVkVSUk9S KEVJTyk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogV3JpdGUg dGhlIHVzZXJuYW1lIGF0dHJpYnV0ZSAqLwo+ICsgICAgYXZpb193YjE2KHBiLCBTVFVOX0FUVFJf VVNFUk5BTUUpOyAvKiBhdHRyaWJ1dGUgdHlwZSB1c2VybmFtZSAqLwo+ICsgICAgYXZpb193YjE2 KHBiLCByZXQpOyAvKiBzaXplIG9mIHVzZXJuYW1lICovCj4gKyAgICBhdmlvX3dyaXRlKHBiLCB1 c2VybmFtZSwgcmV0KTsgLyogYnl0ZXMgb2YgdXNlcm5hbWUgKi8KPiArICAgIGZmaW9fZmlsbChw YiwgMCwgKDQgLSAocmV0ICUgNCkpICUgNCk7IC8qIHBhZGRpbmcgKi8KPiArCj4gKyAgICAvKiBX cml0ZSB0aGUgdXNlLWNhbmRpZGF0ZSBhdHRyaWJ1dGUgKi8KPiArICAgIGF2aW9fd2IxNihwYiwg U1RVTl9BVFRSX1VTRV9DQU5ESURBVEUpOyAvKiBhdHRyaWJ1dGUgdHlwZSB1c2UtY2FuZGlkYXRl ICovCj4gKyAgICBhdmlvX3diMTYocGIsIDApOyAvKiBzaXplIG9mIHVzZS1jYW5kaWRhdGUgKi8K PiArCj4gKyAgICAvKiBCdWlsZCBhbmQgdXBkYXRlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCj4gKyAg ICBhdmlvX3diMTYocGIsIFNUVU5fQVRUUl9NRVNTQUdFX0lOVEVHUklUWSk7IC8qIGF0dHJpYnV0 ZSB0eXBlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCj4gKyAgICBhdmlvX3diMTYocGIsIDIwKTsgLyog c2l6ZSBvZiBtZXNzYWdlIGludGVncml0eSAqLwo+ICsgICAgZmZpb19maWxsKHBiLCAwLCAyMCk7 IC8qIGZpbGwgd2l0aCB6ZXJvIHRvIGRpcmVjdGx5IHdyaXRlIGFuZCBza2lwIGl0ICovCj4gKyAg ICBzaXplID0gYXZpb190ZWxsKHBiKTsKPiArICAgIGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7 Cj4gKyAgICBidWZbM10gPSAoc2l6ZSAtIDIwKSAmIDB4RkY7Cj4gKyAgICBhdl9obWFjX2luaXQo aG1hYywgd2hpcC0+aWNlX3B3ZF9yZW1vdGUsIHN0cmxlbih3aGlwLT5pY2VfcHdkX3JlbW90ZSkp Owo+ICsgICAgYXZfaG1hY191cGRhdGUoaG1hYywgYnVmLCBzaXplIC0gMjQpOwo+ICsgICAgYXZf aG1hY19maW5hbChobWFjLCBidWYgKyBzaXplIC0gMjAsIDIwKTsKPiArCj4gKyAgICAvKiBXcml0 ZSB0aGUgZmluZ2VycHJpbnQgYXR0cmlidXRlICovCj4gKyAgICBhdmlvX3diMTYocGIsIFNUVU5f QVRUUl9GSU5HRVJQUklOVCk7IC8qIGF0dHJpYnV0ZSB0eXBlIGZpbmdlcnByaW50ICovCj4gKyAg ICBhdmlvX3diMTYocGIsIDQpOyAvKiBzaXplIG9mIGZpbmdlcnByaW50ICovCj4gKyAgICBmZmlv X2ZpbGwocGIsIDAsIDQpOyAvKiBmaWxsIHdpdGggemVybyB0byBkaXJlY3RseSB3cml0ZSBhbmQg c2tpcCBpdCAqLwo+ICsgICAgc2l6ZSA9IGF2aW9fdGVsbChwYik7Cj4gKyAgICBidWZbMl0gPSAo c2l6ZSAtIDIwKSA+PiA4Owo+ICsgICAgYnVmWzNdID0gKHNpemUgLSAyMCkgJiAweEZGOwo+ICsg ICAgLyogUmVmZXIgdG8gdGhlIGF2X2hhc2hfYWxsb2MoIkNSQzMyIiksIGF2X2hhc2hfaW5pdCBh bmQgYXZfaGFzaF9maW5hbCAqLwo+ICsgICAgY3JjMzIgPSBhdl9jcmMoYXZfY3JjX2dldF90YWJs ZShBVl9DUkNfMzJfSUVFRV9MRSksIDB4RkZGRkZGRkYsIGJ1Ziwgc2l6ZSAtIDgpIF4gMHhGRkZG RkZGRjsKPiArICAgIGF2aW9fc2tpcChwYiwgLTQpOwo+ICsgICAgYXZpb193YjMyKHBiLCBjcmMz MiBeIDB4NTM1NDU1NEUpOyAvKiB4b3Igd2l0aCAiU1RVTiIgKi8KPiArCj4gKyAgICAqcmVxdWVz dF9zaXplID0gc2l6ZTsKPiArCj4gK2VuZDoKPiArICAgIGF2aW9fY29udGV4dF9mcmVlKCZwYik7 Cj4gKyAgICBhdl9obWFjX2ZyZWUoaG1hYyk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICsvKioKPiArICogQ3JlYXRlIGFuIElDRSBiaW5kaW5nIHJlc3BvbnNlLgo+ICsgKgo+ICsgKiBU aGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiBJQ0UgYmluZGluZyByZXNwb25zZSBhbmQgd3JpdGVz IGl0IHRvIHRoZSBwcm92aWRlZAo+ICsgKiBidWZmZXIuIFRoZSByZXNwb25zZSBpcyBzaWduZWQg dXNpbmcgdGhlIGxvY2FsIHBhc3N3b3JkIGZvciBtZXNzYWdlIGludGVncml0eS4KPiArICoKPiAr ICogQHBhcmFtIHMgUG9pbnRlciB0byB0aGUgQVZGb3JtYXRDb250ZXh0IHN0cnVjdHVyZS4KPiAr ICogQHBhcmFtIHRpZCBQb2ludGVyIHRvIHRoZSB0cmFuc2FjdGlvbiBJRCBvZiB0aGUgYmluZGlu ZyByZXF1ZXN0LiBUaGUgdGlkX3NpemUgc2hvdWxkIGJlIDEyLgo+ICsgKiBAcGFyYW0gdGlkX3Np emUgVGhlIHNpemUgb2YgdGhlIHRyYW5zYWN0aW9uIElELCBzaG91bGQgYmUgMTIuCj4gKyAqIEBw YXJhbSBidWYgUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHRoZSByZXNwb25zZSB3aWxsIGJl IHdyaXR0ZW4uCj4gKyAqIEBwYXJhbSBidWZfc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBy b3ZpZGVkIGZvciB0aGUgcmVzcG9uc2UuCj4gKyAqIEBwYXJhbSByZXNwb25zZV9zaXplIFBvaW50 ZXIgdG8gYW4gaW50ZWdlciB0aGF0IHdpbGwgc3RvcmUgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRl ZCByZXNwb25zZS4KPiArICogQHJldHVybiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBBVkVS Uk9SX3h4eCBpZiBhbiBlcnJvciBvY2N1cnMuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGljZV9jcmVh dGVfcmVzcG9uc2UoQVZGb3JtYXRDb250ZXh0ICpzLCBjaGFyICp0aWQsIGludCB0aWRfc2l6ZSwg dWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUsIGludCAqcmVzcG9uc2Vfc2l6ZSkKPiArewo+ICsg ICAgaW50IHJldCA9IDAsIHNpemUsIGNyYzMyOwo+ICsgICAgQVZJT0NvbnRleHQgKnBiID0gTlVM TDsKPiArICAgIEFWSE1BQyAqaG1hYyA9IE5VTEw7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9 IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAodGlkX3NpemUgIT0gMTIpIHsKPiArICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogSW52YWxpZCB0cmFuc2FjdGlvbiBJ RCBzaXplLiBFeHBlY3RlZCAxMiwgZ290ICVkXG4iLCB0aWRfc2l6ZSk7Cj4gKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgIH0KPiArCj4gKyAgICBwYiA9IGF2aW9fYWxsb2Nf Y29udGV4dChidWYsIGJ1Zl9zaXplLCAxLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKPiArICAg IGlmICghcGIpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyAgICBo bWFjID0gYXZfaG1hY19hbGxvYyhBVl9ITUFDX1NIQTEpOwo+ICsgICAgaWYgKCFobWFjKSB7Cj4g KyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsg ICAgfQo+ICsKPiArICAgIC8qIFdyaXRlIDIwIGJ5dGVzIGhlYWRlciAqLwo+ICsgICAgYXZpb193 YjE2KHBiLCAweDAxMDEpOyAvKiBTVFVOIGJpbmRpbmcgcmVzcG9uc2UgKi8KPiArICAgIGF2aW9f d2IxNihwYiwgMCk7ICAgICAgLyogbGVuZ3RoICovCj4gKyAgICBhdmlvX3diMzIocGIsIFNUVU5f TUFHSUNfQ09PS0lFKTsgLyogbWFnaWMgY29va2llICovCj4gKyAgICBhdmlvX3dyaXRlKHBiLCB0 aWQsIHRpZF9zaXplKTsgLyogdHJhbnNhY3Rpb24gSUQgKi8KPiArCj4gKyAgICAvKiBCdWlsZCBh bmQgdXBkYXRlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCj4gKyAgICBhdmlvX3diMTYocGIsIFNUVU5f QVRUUl9NRVNTQUdFX0lOVEVHUklUWSk7IC8qIGF0dHJpYnV0ZSB0eXBlIG1lc3NhZ2UgaW50ZWdy aXR5ICovCj4gKyAgICBhdmlvX3diMTYocGIsIDIwKTsgLyogc2l6ZSBvZiBtZXNzYWdlIGludGVn cml0eSAqLwo+ICsgICAgZmZpb19maWxsKHBiLCAwLCAyMCk7IC8qIGZpbGwgd2l0aCB6ZXJvIHRv IGRpcmVjdGx5IHdyaXRlIGFuZCBza2lwIGl0ICovCj4gKyAgICBzaXplID0gYXZpb190ZWxsKHBi KTsKPiArICAgIGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7Cj4gKyAgICBidWZbM10gPSAoc2l6 ZSAtIDIwKSAmIDB4RkY7Cj4gKyAgICBhdl9obWFjX2luaXQoaG1hYywgd2hpcC0+aWNlX3B3ZF9s b2NhbCwgc3RybGVuKHdoaXAtPmljZV9wd2RfbG9jYWwpKTsKPiArICAgIGF2X2htYWNfdXBkYXRl KGhtYWMsIGJ1Ziwgc2l6ZSAtIDI0KTsKPiArICAgIGF2X2htYWNfZmluYWwoaG1hYywgYnVmICsg c2l6ZSAtIDIwLCAyMCk7Cj4gKwo+ICsgICAgLyogV3JpdGUgdGhlIGZpbmdlcnByaW50IGF0dHJp YnV0ZSAqLwo+ICsgICAgYXZpb193YjE2KHBiLCBTVFVOX0FUVFJfRklOR0VSUFJJTlQpOyAvKiBh dHRyaWJ1dGUgdHlwZSBmaW5nZXJwcmludCAqLwo+ICsgICAgYXZpb193YjE2KHBiLCA0KTsgLyog c2l6ZSBvZiBmaW5nZXJwcmludCAqLwo+ICsgICAgZmZpb19maWxsKHBiLCAwLCA0KTsgLyogZmls bCB3aXRoIHplcm8gdG8gZGlyZWN0bHkgd3JpdGUgYW5kIHNraXAgaXQgKi8KPiArICAgIHNpemUg PSBhdmlvX3RlbGwocGIpOwo+ICsgICAgYnVmWzJdID0gKHNpemUgLSAyMCkgPj4gODsKPiArICAg IGJ1ZlszXSA9IChzaXplIC0gMjApICYgMHhGRjsKPiArICAgIC8qIFJlZmVyIHRvIHRoZSBhdl9o YXNoX2FsbG9jKCJDUkMzMiIpLCBhdl9oYXNoX2luaXQgYW5kIGF2X2hhc2hfZmluYWwgKi8KPiAr ICAgIGNyYzMyID0gYXZfY3JjKGF2X2NyY19nZXRfdGFibGUoQVZfQ1JDXzMyX0lFRUVfTEUpLCAw eEZGRkZGRkZGLCBidWYsIHNpemUgLSA4KSBeIDB4RkZGRkZGRkY7Cj4gKyAgICBhdmlvX3NraXAo cGIsIC00KTsKPiArICAgIGF2aW9fd2IzMihwYiwgY3JjMzIgXiAweDUzNTQ1NTRFKTsgLyogeG9y IHdpdGggIlNUVU4iICovCj4gKwo+ICsgICAgKnJlc3BvbnNlX3NpemUgPSBzaXplOwo+ICsKPiAr ZW5kOgo+ICsgICAgYXZpb19jb250ZXh0X2ZyZWUoJnBiKTsKPiArICAgIGF2X2htYWNfZnJlZSho bWFjKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBBIEJpbmRpbmcg cmVxdWVzdCBoYXMgY2xhc3M9MGIwMCAocmVxdWVzdCkgYW5kIG1ldGhvZD0wYjAwMDAwMDAwMDAw MSAoQmluZGluZykKPiArICogYW5kIGlzIGVuY29kZWQgaW50byB0aGUgZmlyc3QgMTYgYml0cyBh cyAweDAwMDEuCj4gKyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1s L3JmYzUzODkjc2VjdGlvbi02Cj4gKyAqLwo+ICtzdGF0aWMgaW50IGljZV9pc19iaW5kaW5nX3Jl cXVlc3QodWludDhfdCAqYiwgaW50IHNpemUpCj4gK3sKPiArICAgIHJldHVybiBzaXplID49IElD RV9TVFVOX0hFQURFUl9TSVpFICYmIEFWX1JCMTYoJmJbMF0pID09IDB4MDAwMTsKPiArfQo+ICsK PiArLyoqCj4gKyAqIEEgQmluZGluZyByZXNwb25zZSBoYXMgY2xhc3M9MGIxMCAoc3VjY2VzcyBy ZXNwb25zZSkgYW5kIG1ldGhvZD0wYjAwMDAwMDAwMDAwMSwKPiArICogYW5kIGlzIGVuY29kZWQg aW50byB0aGUgZmlyc3QgMTYgYml0cyBhcyAweDAxMDEuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGlj ZV9pc19iaW5kaW5nX3Jlc3BvbnNlKHVpbnQ4X3QgKmIsIGludCBzaXplKQo+ICt7Cj4gKyAgICBy ZXR1cm4gc2l6ZSA+PSBJQ0VfU1RVTl9IRUFERVJfU0laRSAmJiBBVl9SQjE2KCZiWzBdKSA9PSAw eDAxMDE7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBJbiBSVFAgcGFja2V0cywgdGhlIGZpcnN0IGJ5 dGUgaXMgcmVwcmVzZW50ZWQgYXMgMGIxMHh4eHh4eCwgd2hlcmUgdGhlIGluaXRpYWwKPiArICog dHdvIGJpdHMgKDBiMTApIGluZGljYXRlIHRoZSBSVFAgdmVyc2lvbiwKPiArICogc2VlIGh0dHBz Oi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzNTUwI3NlY3Rpb24tNS4xCj4gKyAqIFRoZSBS VENQIHBhY2tldCBoZWFkZXIgaXMgc2ltaWxhciB0byBSVFAsCj4gKyAqIHNlZSBodHRwczovL3d3 dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzU1MCNzZWN0aW9uLTYuNC4xCj4gKyAqLwo+ICtzdGF0 aWMgaW50IG1lZGlhX2lzX3J0cF9ydGNwKHVpbnQ4X3QgKmIsIGludCBzaXplKQo+ICt7Cj4gKyAg ICByZXR1cm4gc2l6ZSA+PSBXSElQX1JUUF9IRUFERVJfU0laRSAmJiAoYlswXSAmIDB4QzApID09 IDB4ODA7Cj4gK30KPiArCj4gKy8qIFdoZXRoZXIgdGhlIHBhY2tldCBpcyBSVENQLiAqLwo+ICtz dGF0aWMgaW50IG1lZGlhX2lzX3J0Y3AodWludDhfdCAqYiwgaW50IHNpemUpCj4gK3sKPiArICAg IHJldHVybiBzaXplID49IFdISVBfUlRQX0hFQURFUl9TSVpFICYmIGJbMV0gPj0gV0hJUF9SVENQ X1BUX1NUQVJUICYmIGJbMV0gPD0gV0hJUF9SVENQX1BUX0VORDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBpbmNvbWluZyBiaW5kaW5nIHJlcXVlc3QgbWVzc2Fn ZXMgYnkgcmVzcG9uZGluZyB0byB0aGVtLgo+ICsgKiBJZiB0aGUgbWVzc2FnZSBpcyBub3QgYSBi aW5kaW5nIHJlcXVlc3QsIGl0IHdpbGwgYmUgaWdub3JlZC4KPiArICovCj4gK3N0YXRpYyBpbnQg aWNlX2hhbmRsZV9iaW5kaW5nX3JlcXVlc3QoQVZGb3JtYXRDb250ZXh0ICpzLCBjaGFyICpidWYs IGludCBidWZfc2l6ZSkKPiArewo+ICsgICAgaW50IHJldCA9IDAsIHNpemU7Cj4gKyAgICBjaGFy IHRpZFsxMl07Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKPiArCj4g KyAgICAvKiBJZ25vcmUgaWYgbm90IGEgYmluZGluZyByZXF1ZXN0LiAqLwo+ICsgICAgaWYgKCFp Y2VfaXNfYmluZGluZ19yZXF1ZXN0KGJ1ZiwgYnVmX3NpemUpKQo+ICsgICAgICAgIHJldHVybiBy ZXQ7Cj4gKwo+ICsgICAgaWYgKGJ1Zl9zaXplIDwgSUNFX1NUVU5fSEVBREVSX1NJWkUpIHsKPiAr ICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogSW52YWxpZCBTVFVOIG1l c3NhZ2UsIGV4cGVjdGVkIGF0IGxlYXN0ICVkLCBnb3QgJWRcbiIsCj4gKyAgICAgICAgICAgIElD RV9TVFVOX0hFQURFUl9TSVpFLCBidWZfc2l6ZSk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBQYXJzZSB0cmFuc2FjdGlvbiBpZCBmcm9t IGJpbmRpbmcgcmVxdWVzdCBpbiBidWYuICovCj4gKyAgICBtZW1jcHkodGlkLCBidWYgKyA4LCAx Mik7Cj4gKwo+ICsgICAgLyogQnVpbGQgdGhlIFNUVU4gYmluZGluZyByZXNwb25zZS4gKi8KPiAr ICAgIHJldCA9IGljZV9jcmVhdGVfcmVzcG9uc2UocywgdGlkLCBzaXplb2YodGlkKSwgd2hpcC0+ YnVmLCBzaXplb2Yod2hpcC0+YnVmKSwgJnNpemUpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiAr ICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGNyZWF0 ZSBTVFVOIGJpbmRpbmcgcmVzcG9uc2UsIHNpemU9JWRcbiIsIHNpemUpOwo+ICsgICAgICAgIHJl dHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZ1cmxfd3JpdGUod2hpcC0+dWRw LCB3aGlwLT5idWYsIHNpemUpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBhdl9s b2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNlbmQgU1RVTiBiaW5kaW5n IHJlc3BvbnNlLCBzaXplPSVkXG4iLCBzaXplKTsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsg ICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogVG8gZXN0YWJs aXNoIGEgY29ubmVjdGlvbiB3aXRoIHRoZSBVRFAgc2VydmVyLCB3ZSB1dGlsaXplIElDRS1MSVRF IGluIGEgQ2xpZW50LVNlcnZlcgo+ICsgKiBtb2RlLiBJbiB0aGlzIHNldHVwLCBGRm1wZWcgYWN0 cyBhcyB0aGUgVURQIGNsaWVudCwgd2hpbGUgdGhlIHBlZXIgZnVuY3Rpb25zIGFzIHRoZQo+ICsg KiBVRFAgc2VydmVyLgo+ICsgKi8KPiArc3RhdGljIGludCB1ZHBfY29ubmVjdChBVkZvcm1hdENv bnRleHQgKnMpCj4gK3sKPiArICAgIGludCByZXQgPSAwOwo+ICsgICAgY2hhciB1cmxbMjU2XTsK PiArICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hp cCA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICAvKiBCdWlsZCBVRFAgVVJMIGFuZCBjcmVhdGUg dGhlIFVEUCBjb250ZXh0IGFzIHRyYW5zcG9ydC4gKi8KPiArICAgIGZmX3VybF9qb2luKHVybCwg c2l6ZW9mKHVybCksICJ1ZHAiLCBOVUxMLCB3aGlwLT5pY2VfaG9zdCwgd2hpcC0+aWNlX3BvcnQs IE5VTEwpOwo+ICsKPiArICAgIGF2X2RpY3Rfc2V0X2ludCgmb3B0cywgImNvbm5lY3QiLCAxLCAw KTsKPiArICAgIGF2X2RpY3Rfc2V0X2ludCgmb3B0cywgImZpZm9fc2l6ZSIsIDAsIDApOwo+ICsg ICAgLyogU2V0IHRoZSBtYXggcGFja2V0IHNpemUgdG8gdGhlIGJ1ZmZlciBzaXplLiAqLwo+ICsg ICAgYXZfZGljdF9zZXRfaW50KCZvcHRzLCAicGt0X3NpemUiLCB3aGlwLT5wa3Rfc2l6ZSwgMCk7 Cj4gKwo+ICsgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJndoaXAtPnVkcCwgdXJsLCBB VklPX0ZMQUdfV1JJVEUsICZzLT5pbnRlcnJ1cHRfY2FsbGJhY2ssCj4gKyAgICAgICAgJm9wdHMs IHMtPnByb3RvY29sX3doaXRlbGlzdCwgcy0+cHJvdG9jb2xfYmxhY2tsaXN0LCBOVUxMKTsKPiAr ICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwg IldISVA6IEZhaWxlZCB0byBjb25uZWN0IHVkcDovLyVzOiVkXG4iLCB3aGlwLT5pY2VfaG9zdCwg d2hpcC0+aWNlX3BvcnQpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAg IC8qIE1ha2UgdGhlIHNvY2tldCBub24tYmxvY2tpbmcsIHNldCB0byBSRUFEIGFuZCBXUklURSBt b2RlIGFmdGVyIGNvbm5lY3RlZCAqLwo+ICsgICAgZmZfc29ja2V0X25vbmJsb2NrKGZmdXJsX2dl dF9maWxlX2hhbmRsZSh3aGlwLT51ZHApLCAxKTsKPiArICAgIHdoaXAtPnVkcC0+ZmxhZ3MgfD0g QVZJT19GTEFHX1JFQUQgfCBBVklPX0ZMQUdfTk9OQkxPQ0s7Cj4gKwo+ICsgICAgaWYgKHdoaXAt PnN0YXRlIDwgV0hJUF9TVEFURV9VRFBfQ09OTkVDVEVEKQo+ICsgICAgICAgIHdoaXAtPnN0YXRl ID0gV0hJUF9TVEFURV9VRFBfQ09OTkVDVEVEOwo+ICsgICAgd2hpcC0+d2hpcF91ZHBfdGltZSA9 IGF2X2dldHRpbWUoKTsKPiArICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6 IFVEUCBzdGF0ZT0lZCwgZWxhcHNlZD0lZG1zLCBjb25uZWN0ZWQgdG8gdWRwOi8vJXM6JWRcbiIs Cj4gKyAgICAgICAgd2hpcC0+c3RhdGUsIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2 X2dldHRpbWUoKSksIHdoaXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCk7Cj4gKwo+ICtlbmQ6 Cj4gKyAgICBhdl9kaWN0X2ZyZWUoJm9wdHMpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBpY2VfZHRsc19oYW5kc2hha2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7 Cj4gKyAgICBpbnQgcmV0ID0gMCwgc2l6ZSwgaTsKPiArICAgIGludDY0X3Qgc3RhcnR0aW1lID0g YXZfZ2V0dGltZSgpLCBub3c7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0 YTsKPiArICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7Cj4gKyAgICBjaGFyIHN0cls4XTsK PiArICAgIGNoYXIgYnVmWzI1Nl0sICpjZXJ0X2J1ZiA9IE5VTEwsICprZXlfYnVmID0gTlVMTDsK PiArCj4gKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX1VEUF9DT05ORUNURUQgfHwg IXdoaXAtPnVkcCkgewo+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQ OiBVRFAgbm90IGNvbm5lY3RlZCwgc3RhdGU9JWQsIHVkcD0lcFxuIiwgd2hpcC0+c3RhdGUsIHdo aXAtPnVkcCk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgIH0KPiAr Cj4gKyAgICB3aGlsZSAoMSkgewo+ICsgICAgICAgIGlmICh3aGlwLT5zdGF0ZSA8PSBXSElQX1NU QVRFX0lDRV9DT05ORUNUSU5HKSB7Cj4gKyAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBTVFVOIGJp bmRpbmcgcmVxdWVzdC4gKi8KPiArICAgICAgICAgICAgcmV0ID0gaWNlX2NyZWF0ZV9yZXF1ZXN0 KHMsIHdoaXAtPmJ1Ziwgc2l6ZW9mKHdoaXAtPmJ1ZiksICZzaXplKTsKPiArICAgICAgICAgICAg aWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBGYWlsZWQgdG8gY3JlYXRlIFNUVU4gYmluZGluZyByZXF1ZXN0LCBzaXplPSVk XG4iLCBzaXplKTsKPiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAgICAgICB9 Cj4gKwo+ICsgICAgICAgICAgICByZXQgPSBmZnVybF93cml0ZSh3aGlwLT51ZHAsIHdoaXAtPmJ1 Ziwgc2l6ZSk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNlbmQgU1RVTiBi aW5kaW5nIHJlcXVlc3QsIHNpemU9JWRcbiIsIHNpemUpOwo+ICsgICAgICAgICAgICAgICAgZ290 byBlbmQ7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIGlmICh3aGlwLT5zdGF0 ZSA8IFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RJTkcpCj4gKyAgICAgICAgICAgICAgICB3aGlwLT5z dGF0ZSA9IFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RJTkc7Cj4gKyAgICAgICAgfQo+ICsKPiArbmV4 dF9wYWNrZXQ6Cj4gKyAgICAgICAgaWYgKHdoaXAtPnN0YXRlID49IFdISVBfU1RBVEVfRFRMU19G SU5JU0hFRCkKPiArICAgICAgICAgICAgLyogRFRMUyBoYW5kc2hha2UgaXMgZG9uZSwgZXhpdCB0 aGUgbG9vcC4gKi8KPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIG5vdyA9IGF2 X2dldHRpbWUoKTsKPiArICAgICAgICBpZiAobm93IC0gc3RhcnR0aW1lID49IHdoaXAtPmhhbmRz aGFrZV90aW1lb3V0ICogMTAwMCkgewo+ICsgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9H X0VSUk9SLCAiV0hJUDogRFRMUyBoYW5kc2hha2UgdGltZW91dD0lZG1zLCBjb3N0PSVkbXMsIGVs YXBzZWQ9JWRtcywgc3RhdGU9JWRcbiIsCj4gKyAgICAgICAgICAgICAgICB3aGlwLT5oYW5kc2hh a2VfdGltZW91dCwgRUxBUFNFRChzdGFydHRpbWUsIG5vdyksIEVMQVBTRUQod2hpcC0+d2hpcF9z dGFydHRpbWUsIG5vdyksIHdoaXAtPnN0YXRlKTsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJP UihFVElNRURPVVQpOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4gKwo+ ICsgICAgICAgIC8qIFJlYWQgdGhlIFNUVU4gb3IgRFRMUyBtZXNzYWdlcyBmcm9tIHBlZXIuICov Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IElDRV9EVExTX1JFQURfSU5URVJWQUwgLyA1ICYm IHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJTkc7IGkrKykgewo+ICsgICAg ICAgICAgICByZXQgPSBmZnVybF9yZWFkKHdoaXAtPnVkcCwgd2hpcC0+YnVmLCBzaXplb2Yod2hp cC0+YnVmKSk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPiAwKQo+ICsgICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUihFQUdBSU4pKSB7Cj4gKyAg ICAgICAgICAgICAgICBhdl91c2xlZXAoNSAqIDEwMDApOwo+ICsgICAgICAgICAgICAgICAgY29u dGludWU7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xP R19FUlJPUiwgIldISVA6IEZhaWxlZCB0byByZWFkIG1lc3NhZ2VcbiIpOwo+ICsgICAgICAgICAg ICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qIEdvdCBub3RoaW5nLCBj b250aW51ZSB0byBwcm9jZXNzIGhhbmRzaGFrZS4gKi8KPiArICAgICAgICBpZiAocmV0IDw9IDAg JiYgd2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0RUTFNfQ09OTkVDVElORykKPiArICAgICAgICAg ICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIC8qIEhhbmRsZSB0aGUgSUNFIGJpbmRpbmcgcmVz cG9uc2UuICovCj4gKyAgICAgICAgaWYgKGljZV9pc19iaW5kaW5nX3Jlc3BvbnNlKHdoaXAtPmJ1 ZiwgcmV0KSkgewo+ICsgICAgICAgICAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0lD RV9DT05ORUNURUQpIHsKPiArICAgICAgICAgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFU RV9JQ0VfQ09OTkVDVEVEOwo+ICsgICAgICAgICAgICAgICAgd2hpcC0+d2hpcF9pY2VfdGltZSA9 IGF2X2dldHRpbWUoKTsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVS Qk9TRSwgIldISVA6IElDRSBTVFVOIG9rLCBzdGF0ZT0lZCwgdXJsPXVkcDovLyVzOiVkLCBsb2Nh dGlvbj0lcywgdXNlcm5hbWU9JXM6JXMsIHJlcz0lZEIsIGVsYXBzZWQ9JWRtc1xuIiwKPiArICAg ICAgICAgICAgICAgICAgICB3aGlwLT5zdGF0ZSwgd2hpcC0+aWNlX2hvc3QsIHdoaXAtPmljZV9w b3J0LCB3aGlwLT53aGlwX3Jlc291cmNlX3VybCA/IHdoaXAtPndoaXBfcmVzb3VyY2VfdXJsIDog IiIsCj4gKyAgICAgICAgICAgICAgICAgICAgd2hpcC0+aWNlX3VmcmFnX3JlbW90ZSwgd2hpcC0+ aWNlX3VmcmFnX2xvY2FsLCByZXQsIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dl dHRpbWUoKSkpOwo+ICsKPiArICAgICAgICAgICAgICAgIGZmX3VybF9qb2luKGJ1Ziwgc2l6ZW9m KGJ1ZiksICJkdGxzIiwgTlVMTCwgd2hpcC0+aWNlX2hvc3QsIHdoaXAtPmljZV9wb3J0LCBOVUxM KTsKPiArICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZCIsIHdo aXAtPnBrdF9zaXplKTsKPiArICAgICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAibXR1 Iiwgc3RyLCAwKTsKPiArICAgICAgICAgICAgICAgIGlmICh3aGlwLT5jZXJ0X2ZpbGUpIHsKPiAr ICAgICAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgImNlcnRfZmlsZSIsIHdoaXAt PmNlcnRfZmlsZSwgMCk7Cj4gKyAgICAgICAgICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAg ICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgImNlcnRfYnVmIiwgd2hpcC0+Y2VydF9idWYsIDAp Owo+ICsKPiArICAgICAgICAgICAgICAgIGlmICh3aGlwLT5rZXlfZmlsZSkgewo+ICsgICAgICAg ICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAia2V5X2ZpbGUiLCB3aGlwLT5rZXlfZmls ZSwgMCk7Cj4gKyAgICAgICAgICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAgICAgICAgICBh dl9kaWN0X3NldCgmb3B0cywgImtleV9idWYiLCB3aGlwLT5rZXlfYnVmLCAwKTsKPiArCj4gKyAg ICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgImZpbmdlcnByaW50Iiwgd2hpcC0+ZHRs c19maW5nZXJwcmludCwgMCk7Cj4gKyAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywg InVzZV9leHRlcm5hbF91ZHAiLCAiMSIsIDApOwo+ICsgICAgICAgICAgICAgICAgYXZfZGljdF9z ZXQoJm9wdHMsICJsaXN0ZW4iLCAiMSIsIDApOwo+ICsgICAgICAgICAgICAgICAgLyogSWYgZ290 IHRoZSBmaXJzdCBiaW5kaW5nIHJlc3BvbnNlLCBzdGFydCBEVExTIGhhbmRzaGFrZS4gKi8KPiAr ICAgICAgICAgICAgICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ3aGlwLT5kdGxzX3Vj LCBidWYsIEFWSU9fRkxBR19SRUFEX1dSSVRFLCAmcy0+aW50ZXJydXB0X2NhbGxiYWNrLAo+ICsg ICAgICAgICAgICAgICAgICAgICZvcHRzLCBzLT5wcm90b2NvbF93aGl0ZWxpc3QsIHMtPnByb3Rv Y29sX2JsYWNrbGlzdCwgTlVMTCk7Cj4gKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiAr ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAgICAgICAgIGR0bHNfaW5p dGlhbGl6ZShzKTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBnb3RvIG5leHRfcGFj a2V0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogV2hlbiBhIGJpbmRpbmcgcmVxdWVz dCBpcyByZWNlaXZlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlc3BvbmQgaW1tZWRpYXRlbHkuICov Cj4gKyAgICAgICAgaWYgKGljZV9pc19iaW5kaW5nX3JlcXVlc3Qod2hpcC0+YnVmLCByZXQpKSB7 Cj4gKyAgICAgICAgICAgIGlmICgocmV0ID0gaWNlX2hhbmRsZV9iaW5kaW5nX3JlcXVlc3Qocywg d2hpcC0+YnVmLCByZXQpKSA8IDApCj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAg ICAgICAgICAgZ290byBuZXh0X3BhY2tldDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8q IElmIGdvdCBhbnkgRFRMUyBtZXNzYWdlcywgaGFuZGxlIGl0LiAqLwo+ICsgICAgICAgIGlmIChp c19kdGxzX3BhY2tldCh3aGlwLT5idWYsIHJldCkgJiYgd2hpcC0+c3RhdGUgPj0gV0hJUF9TVEFU RV9JQ0VfQ09OTkVDVEVEIHx8IHdoaXAtPnN0YXRlID09IFdISVBfU1RBVEVfRFRMU19DT05ORUNU SU5HKSB7Cj4gKyAgICAgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9EVExTX0NPTk5F Q1RJTkc7Cj4gKyAgICAgICAgICAgIGlmICgocmV0ID0gZmZ1cmxfaGFuZHNoYWtlKHdoaXAtPmR0 bHNfdWMpKSA8IDApCj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAgICAg ZHRsc19jb250ZXh0X29uX3N0YXRlKHMsIE5VTEwsIE5VTEwpOwo+ICsgICAgICAgICAgICBnb3Rv IG5leHRfcGFja2V0Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gK2VuZDoKPiArICAgIGlm IChjZXJ0X2J1ZikKPiArICAgICAgICBhdl9mcmVlKGNlcnRfYnVmKTsKPiArICAgIGlmIChrZXlf YnVmKQo+ICsgICAgICAgIGF2X2ZyZWUoa2V5X2J1Zik7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICsvKioKPiArICogRXN0YWJsaXNoIHRoZSBTUlRQIGNvbnRleHQgdXNpbmcgdGhlIGtl eWluZyBtYXRlcmlhbCBleHBvcnRlZCBmcm9tIERUTFMuCj4gKyAqCj4gKyAqIENyZWF0ZSBzZXBh cmF0ZSBTUlRQIGNvbnRleHRzIGZvciBzZW5kaW5nIHZpZGVvIGFuZCBhdWRpbywgYXMgdGhlaXIg c2VxdWVuY2VzIGRpZmZlcgo+ICsgKiBhbmQgc2hvdWxkIG5vdCBzaGFyZSBhIHNpbmdsZSBjb250 ZXh0LiBHZW5lcmF0ZSBhIHNpbmdsZSBTUlRQIGNvbnRleHQgZm9yIHJlY2VpdmluZwo+ICsgKiBS VENQIG9ubHkuCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBpZiBPSywgQVZFUlJPUl94eHggb24gZXJy b3IKPiArICovCj4gK3N0YXRpYyBpbnQgc2V0dXBfc3J0cChBVkZvcm1hdENvbnRleHQgKnMpCj4g K3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBjaGFyIHJlY3Zfa2V5W0RUTFNfU1JUUF9LRVlfTEVO ICsgRFRMU19TUlRQX1NBTFRfTEVOXTsKPiArICAgIGNoYXIgc2VuZF9rZXlbRFRMU19TUlRQX0tF WV9MRU4gKyBEVExTX1NSVFBfU0FMVF9MRU5dOwo+ICsgICAgY2hhciBidWZbQVZfQkFTRTY0X1NJ WkUoRFRMU19TUlRQX0tFWV9MRU4gKyBEVExTX1NSVFBfU0FMVF9MRU4pXTsKPiArICAgIC8qKgo+ ICsgICAgICogVGhlIHByb2ZpbGUgZm9yIE9wZW5TU0wncyBTUlRQIGlzIFNSVFBfQUVTMTI4X0NN X1NIQTFfODAsIHNlZSBzc2wvZDFfc3J0cC5jLgo+ICsgICAgICogVGhlIHByb2ZpbGUgZm9yIEZG bXBlZydzIFNSVFAgaXMgU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwLCBzZWUgbGliYXZmb3Jt YXQvc3J0cC5jLgo+ICsgICAgICovCj4gKyAgICBjb25zdCBjaGFyKiBzdWl0ZSA9ICJTUlRQX0FF UzEyOF9DTV9ITUFDX1NIQTFfODAiOwo+ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2 X2RhdGE7Cj4gKyAgICByZXQgPSBmZl9kdGxzX2V4cG9ydF9tYXRlcmlhbHMod2hpcC0+ZHRsc191 Yywgd2hpcC0+ZHRsc19zcnRwX21hdGVyaWFscywgc2l6ZW9mKHdoaXAtPmR0bHNfc3J0cF9tYXRl cmlhbHMpKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAg LyoqCj4gKyAgICAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIG1hdGVyaWFsIHVzZWQgdG8gYnVpbGQg dGhlIFNSVFAgbWFzdGVyIGtleS4gSXQgaXMKPiArICAgICAqIGdlbmVyYXRlZCBieSBEVExTIGFu ZCBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6Cj4gKyAgICAgKiAgICAgICAgICAxNkIgICAgICAg ICAxNkIgICAgICAgICAxNEIgICAgICAgICAgICAgMTRCCj4gKyAgICAgKiAgICAgIGNsaWVudF9r ZXkgfCBzZXJ2ZXJfa2V5IHwgY2xpZW50X3NhbHQgfCBzZXJ2ZXJfc2FsdAo+ICsgICAgICovCj4g KyAgICBjaGFyICpjbGllbnRfa2V5ID0gd2hpcC0+ZHRsc19zcnRwX21hdGVyaWFsczsKPiArICAg IGNoYXIgKnNlcnZlcl9rZXkgPSB3aGlwLT5kdGxzX3NydHBfbWF0ZXJpYWxzICsgRFRMU19TUlRQ X0tFWV9MRU47Cj4gKyAgICBjaGFyICpjbGllbnRfc2FsdCA9IHNlcnZlcl9rZXkgKyBEVExTX1NS VFBfS0VZX0xFTjsKPiArICAgIGNoYXIgKnNlcnZlcl9zYWx0ID0gY2xpZW50X3NhbHQgKyBEVExT X1NSVFBfU0FMVF9MRU47Cj4gKwo+ICsgICAgLyogQXMgRFRMUyBzZXJ2ZXIsIHRoZSByZWN2IGtl eSBpcyBjbGllbnQgbWFzdGVyIGtleSBwbHVzIHNhbHQuICovCj4gKyAgICBtZW1jcHkocmVjdl9r ZXksIGNsaWVudF9rZXksIERUTFNfU1JUUF9LRVlfTEVOKTsKPiArICAgIG1lbWNweShyZWN2X2tl eSArIERUTFNfU1JUUF9LRVlfTEVOLCBjbGllbnRfc2FsdCwgRFRMU19TUlRQX1NBTFRfTEVOKTsK PiArCj4gKyAgICAvKiBBcyBEVExTIHNlcnZlciwgdGhlIHNlbmQga2V5IGlzIHNlcnZlciBtYXN0 ZXIga2V5IHBsdXMgc2FsdC4gKi8KPiArICAgIG1lbWNweShzZW5kX2tleSwgc2VydmVyX2tleSwg RFRMU19TUlRQX0tFWV9MRU4pOwo+ICsgICAgbWVtY3B5KHNlbmRfa2V5ICsgRFRMU19TUlRQX0tF WV9MRU4sIHNlcnZlcl9zYWx0LCBEVExTX1NSVFBfU0FMVF9MRU4pOwo+ICsKPiArICAgIC8qIFNl dHVwIFNSVFAgY29udGV4dCBmb3Igb3V0Z29pbmcgcGFja2V0cyAqLwo+ICsgICAgaWYgKCFhdl9i YXNlNjRfZW5jb2RlKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlbmRfa2V5LCBzaXplb2Yoc2VuZF9rZXkp KSkgewo+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQg dG8gZW5jb2RlIHNlbmQga2V5XG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4g KyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZfc3J0cF9zZXRf Y3J5cHRvKCZ3aGlwLT5zcnRwX2F1ZGlvX3NlbmQsIHN1aXRlLCBidWYpOwo+ICsgICAgaWYgKHJl dCA8IDApIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFp bGVkIHRvIHNldCBjcnlwdG8gZm9yIGF1ZGlvIHNlbmRcbiIpOwo+ICsgICAgICAgIGdvdG8gZW5k Owo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGZmX3NydHBfc2V0X2NyeXB0bygmd2hpcC0+c3J0 cF92aWRlb19zZW5kLCBzdWl0ZSwgYnVmKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAg ICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBzZXQgY3J5cHRv IGZvciB2aWRlbyBzZW5kXG4iKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4g KyAgICByZXQgPSBmZl9zcnRwX3NldF9jcnlwdG8oJndoaXAtPnNydHBfcnRjcF9zZW5kLCBzdWl0 ZSwgYnVmKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBzZXQgY3J5cHRvIGZvciBydGNwIHNlbmRcbiIpOwo+ICsg ICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFNldHVwIFNSVFAgY29udGV4 dCBmb3IgaW5jb21pbmcgcGFja2V0cyAqLwo+ICsgICAgaWYgKCFhdl9iYXNlNjRfZW5jb2RlKGJ1 Ziwgc2l6ZW9mKGJ1ZiksIHJlY3Zfa2V5LCBzaXplb2YocmVjdl9rZXkpKSkgewo+ICsgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZW5jb2RlIHJlY3Yg a2V5XG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gKyAgICAgICAgZ290byBl bmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZfc3J0cF9zZXRfY3J5cHRvKCZ3aGlwLT5z cnRwX3JlY3YsIHN1aXRlLCBidWYpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBh dl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNldCBjcnlwdG8gZm9y IHJlY3ZcbiIpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICh3 aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfU1JUUF9GSU5JU0hFRCkKPiArICAgICAgICB3aGlwLT5z dGF0ZSA9IFdISVBfU1RBVEVfU1JUUF9GSU5JU0hFRDsKPiArICAgIHdoaXAtPndoaXBfc3J0cF90 aW1lID0gYXZfZ2V0dGltZSgpOwo+ICsgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NFLCAi V0hJUDogU1JUUCBzZXR1cCBkb25lLCBzdGF0ZT0lZCwgc3VpdGU9JXMsIGtleT0lbHVCLCBlbGFw c2VkPSVkbXNcbiIsCj4gKyAgICAgICAgd2hpcC0+c3RhdGUsIHN1aXRlLCBzaXplb2Yoc2VuZF9r ZXkpLCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKPiArCj4g K2VuZDoKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBDYWxsYmFjayB0 cmlnZ2VyZWQgYnkgdGhlIFJUUCBtdXhlciB3aGVuIGl0IGNyZWF0ZXMgYW5kIHNlbmRzIG91dCBh biBSVFAgcGFja2V0Lgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSB2aWRl byBTVEFQIHBhY2tldCwgcmVtb3ZpbmcgdGhlIG1hcmtlcnMsIGFuZCB1cGRhdGluZyB0aGUKPiAr ICogTlJJIG9mIHRoZSBmaXJzdCBOQUxVLiBBZGRpdGlvbmFsbHksIGl0IHVzZXMgdGhlIGNvcnJl c3BvbmRpbmcgU1JUUCBjb250ZXh0IHRvIGVuY3J5cHQKPiArICogdGhlIFJUUCBwYWNrZXQsIHdo ZXJlIHRoZSB2aWRlbyBwYWNrZXQgaXMgaGFuZGxlZCBieSB0aGUgdmlkZW8gU1JUUCBjb250ZXh0 Lgo+ICsgKi8KPiArc3RhdGljIGludCBvbl9ydHBfd3JpdGVfcGFja2V0KHZvaWQgKm9wYXF1ZSwg Y29uc3QgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpCj4gK3sKPiArICAgIGludCByZXQsIGNp cGhlcl9zaXplLCBpc19ydGNwLCBpc192aWRlbzsKPiArICAgIHVpbnQ4X3QgcGF5bG9hZF90eXBl Owo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpzID0gb3BhcXVlOwo+ICsgICAgV0hJUENvbnRleHQg KndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICBTUlRQQ29udGV4dCAqc3J0cDsKPiArCj4gKyAg ICAvKiBJZ25vcmUgaWYgbm90IFJUUCBvciBSVENQIHBhY2tldC4gKi8KPiArICAgIGlmICghbWVk aWFfaXNfcnRwX3J0Y3AoYnVmLCBidWZfc2l6ZSkpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ ICsgICAgLyogT25seSBzdXBwb3J0IGF1ZGlvLCB2aWRlbyBhbmQgcnRjcC4gKi8KPiArICAgIGlz X3J0Y3AgPSBtZWRpYV9pc19ydGNwKGJ1ZiwgYnVmX3NpemUpOwo+ICsgICAgcGF5bG9hZF90eXBl ID0gYnVmWzFdICYgMHg3ZjsKPiArICAgIGlzX3ZpZGVvID0gcGF5bG9hZF90eXBlID09IHdoaXAt PnZpZGVvX3BheWxvYWRfdHlwZTsKPiArICAgIGlmICghaXNfcnRjcCAmJiBwYXlsb2FkX3R5cGUg IT0gd2hpcC0+dmlkZW9fcGF5bG9hZF90eXBlICYmIHBheWxvYWRfdHlwZSAhPSB3aGlwLT5hdWRp b19wYXlsb2FkX3R5cGUpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgLyogR2V0IHRo ZSBjb3JyZXNwb25kaW5nIFNSVFAgY29udGV4dC4gKi8KPiArICAgIHNydHAgPSBpc19ydGNwID8g JndoaXAtPnNydHBfcnRjcF9zZW5kIDogKGlzX3ZpZGVvPyAmd2hpcC0+c3J0cF92aWRlb19zZW5k IDogJndoaXAtPnNydHBfYXVkaW9fc2VuZCk7Cj4gKwo+ICsgICAgLyogRW5jcnlwdCBieSBTUlRQ IGFuZCBzZW5kIG91dC4gKi8KPiArICAgIGNpcGhlcl9zaXplID0gZmZfc3J0cF9lbmNyeXB0KHNy dHAsIGJ1ZiwgYnVmX3NpemUsIHdoaXAtPmJ1Ziwgc2l6ZW9mKHdoaXAtPmJ1ZikpOwo+ICsgICAg aWYgKGNpcGhlcl9zaXplIDw9IDAgfHwgY2lwaGVyX3NpemUgPCBidWZfc2l6ZSkgewo+ICsgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IEZhaWxlZCB0byBlbmNyeXB0 IHBhY2tldD0lZEIsIGNpcGhlcj0lZEJcbiIsIGJ1Zl9zaXplLCBjaXBoZXJfc2l6ZSk7Cj4gKyAg ICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZ1cmxfd3JpdGUod2hp cC0+dWRwLCB3aGlwLT5idWYsIGNpcGhlcl9zaXplKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4g KyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byB3cml0 ZSBwYWNrZXQ9JWRCLCByZXQ9JWRcbiIsIGNpcGhlcl9zaXplLCByZXQpOwo+ICsgICAgICAgIHJl dHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIENyZWF0ZXMgZGVkaWNhdGVkIFJUUCBtdXhlcnMgZm9yIGVhY2ggc3RyZWFtIGluIHRo ZSBBVkZvcm1hdENvbnRleHQgdG8gYnVpbGQgUlRQCj4gKyAqIHBhY2tldHMgZnJvbSB0aGUgZW5j b2RlZCBmcmFtZXMuCj4gKyAqCj4gKyAqIFRoZSBjb3JyZXNwb25kaW5nIFNSVFAgY29udGV4dCBp cyB1dGlsaXplZCB0byBlbmNyeXB0IGVhY2ggc3RyZWFtJ3MgUlRQIHBhY2tldHMuIEZvcgo+ICsg KiBleGFtcGxlLCBhIHZpZGVvIFNSVFAgY29udGV4dCBpcyB1c2VkIGZvciB0aGUgdmlkZW8gc3Ry ZWFtLiBBZGRpdGlvbmFsbHksIHRoZQo+ICsgKiAib25fcnRwX3dyaXRlX3BhY2tldCIgY2FsbGJh Y2sgZnVuY3Rpb24gaXMgc2V0IGFzIHRoZSB3cml0ZSBmdW5jdGlvbiBmb3IgZWFjaCBSVFAKPiAr ICogbXV4ZXIgdG8gc2VuZCBvdXQgZW5jcnlwdGVkIFJUUCBwYWNrZXRzLgo+ICsgKgo+ICsgKiBA cmV0dXJuIDAgaWYgT0ssIEFWRVJST1JfeHh4IG9uIGVycm9yCj4gKyAqLwo+ICtzdGF0aWMgaW50 IGNyZWF0ZV9ydHBfbXV4ZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0 LCBpLCBpc192aWRlbywgYnVmZmVyX3NpemUsIG1heF9wYWNrZXRfc2l6ZTsKPiArICAgIEFWRm9y bWF0Q29udGV4dCAqcnRwX2N0eCA9IE5VTEw7Cj4gKyAgICBBVkRpY3Rpb25hcnkgKm9wdHMgPSBO VUxMOwo+ICsgICAgdWludDhfdCAqYnVmZmVyID0gTlVMTDsKPiArICAgIGNoYXIgYnVmWzY0XTsK PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGNvbnN0 IEFWT3V0cHV0Rm9ybWF0ICpydHBfZm9ybWF0ID0gYXZfZ3Vlc3NfZm9ybWF0KCJydHAiLCBOVUxM LCBOVUxMKTsKPiArICAgIGlmICghcnRwX2Zvcm1hdCkgewo+ICsgICAgICAgIGF2X2xvZyh3aGlw LCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZ3Vlc3MgcnRwIG11eGVyXG4iKTsKPiAr ICAgICAgICByZXQgPSBBVkVSUk9SKEVOT1NZUyk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgLyogVGhlIFVEUCBidWZmZXIgc2l6ZSwgbWF5IGdyZWF0ZXIgdGhhbiBN VFUuICovCj4gKyAgICBidWZmZXJfc2l6ZSA9IE1BWF9VRFBfQlVGRkVSX1NJWkU7Cj4gKyAgICAv KiBUaGUgUlRQIHBheWxvYWQgbWF4IHNpemUuIFJlc2VydmVkIHNvbWUgYnl0ZXMgZm9yIFNSVFAg Y2hlY2tzdW0gYW5kIHBhZGRpbmcuICovCj4gKyAgICBtYXhfcGFja2V0X3NpemUgPSB3aGlwLT5w a3Rfc2l6ZSAtIERUTFNfU1JUUF9DSEVDS1NVTV9MRU47Cj4gKwo+ICsgICAgZm9yIChpID0gMDsg aSA8IHMtPm5iX3N0cmVhbXM7IGkrKykgewo+ICsgICAgICAgIHJ0cF9jdHggPSBhdmZvcm1hdF9h bGxvY19jb250ZXh0KCk7Cj4gKyAgICAgICAgaWYgKCFydHBfY3R4KSB7Cj4gKyAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICBydHBfY3R4LT5vZm9ybWF0ID0gcnRwX2Zvcm1hdDsKPiArICAg ICAgICBpZiAoIWF2Zm9ybWF0X25ld19zdHJlYW0ocnRwX2N0eCwgTlVMTCkpIHsKPiArICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgLyogUGFzcyB0aGUgaW50ZXJydXB0IGNhbGxiYWNrIG9uICov Cj4gKyAgICAgICAgcnRwX2N0eC0+aW50ZXJydXB0X2NhbGxiYWNrID0gcy0+aW50ZXJydXB0X2Nh bGxiYWNrOwo+ICsgICAgICAgIC8qIENvcHkgdGhlIG1heCBkZWxheSBzZXR0aW5nOyB0aGUgcnRw IG11eGVyIHJlYWRzIHRoaXMuICovCj4gKyAgICAgICAgcnRwX2N0eC0+bWF4X2RlbGF5ID0gcy0+ bWF4X2RlbGF5Owo+ICsgICAgICAgIC8qIENvcHkgb3RoZXIgc3RyZWFtIHBhcmFtZXRlcnMuICov Cj4gKyAgICAgICAgcnRwX2N0eC0+c3RyZWFtc1swXS0+c2FtcGxlX2FzcGVjdF9yYXRpbyA9IHMt PnN0cmVhbXNbaV0tPnNhbXBsZV9hc3BlY3RfcmF0aW87Cj4gKyAgICAgICAgcnRwX2N0eC0+Zmxh Z3MgfD0gcy0+ZmxhZ3MgJiBBVkZNVF9GTEFHX0JJVEVYQUNUOwo+ICsgICAgICAgIHJ0cF9jdHgt PnN0cmljdF9zdGRfY29tcGxpYW5jZSA9IHMtPnN0cmljdF9zdGRfY29tcGxpYW5jZTsKPiArCj4g KyAgICAgICAgLyogU2V0IHRoZSBzeW5jaHJvbml6ZWQgc3RhcnQgdGltZS4gKi8KPiArICAgICAg ICBydHBfY3R4LT5zdGFydF90aW1lX3JlYWx0aW1lID0gcy0+c3RhcnRfdGltZV9yZWFsdGltZTsK PiArCj4gKyAgICAgICAgYXZjb2RlY19wYXJhbWV0ZXJzX2NvcHkocnRwX2N0eC0+c3RyZWFtc1sw XS0+Y29kZWNwYXIsIHMtPnN0cmVhbXNbaV0tPmNvZGVjcGFyKTsKPiArICAgICAgICBydHBfY3R4 LT5zdHJlYW1zWzBdLT50aW1lX2Jhc2UgPSBzLT5zdHJlYW1zW2ldLT50aW1lX2Jhc2U7Cj4gKwo+ ICsgICAgICAgIC8qKgo+ICsgICAgICAgICAqIEZvciBILjI2NCwgY29uc2lzdGVudGx5IHV0aWxp emUgdGhlIGFubmV4YiBmb3JtYXQgdGhyb3VnaCB0aGUgQml0c3RyZWFtIEZpbHRlciAoQlNGKTsK PiArICAgICAgICAgKiB0aGVyZWZvcmUsIHdlIGRlYWN0aXZhdGUgdGhlIGV4dHJhZGF0YSBkZXRl Y3Rpb24gZm9yIHRoZSBSVFAgbXV4ZXIuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKHMt PnN0cmVhbXNbaV0tPmNvZGVjcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0KSB7Cj4g KyAgICAgICAgICAgIGF2X2ZyZWVwKCZydHBfY3R4LT5zdHJlYW1zW2ldLT5jb2RlY3Bhci0+ZXh0 cmFkYXRhKTsKPiArICAgICAgICAgICAgcnRwX2N0eC0+c3RyZWFtc1tpXS0+Y29kZWNwYXItPmV4 dHJhZGF0YV9zaXplID0gMDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGJ1ZmZlciA9IGF2 X21hbGxvYyhidWZmZXJfc2l6ZSk7Cj4gKyAgICAgICAgaWYgKCFidWZmZXIpIHsKPiArICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJ0cF9jdHgtPnBiID0gYXZpb19hbGxvY19jb250ZXh0 KGJ1ZmZlciwgYnVmZmVyX3NpemUsIDEsIHMsIE5VTEwsIG9uX3J0cF93cml0ZV9wYWNrZXQsIE5V TEwpOwo+ICsgICAgICAgIGlmICghcnRwX2N0eC0+cGIpIHsKPiArICAgICAgICAgICAgcmV0ID0g QVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4g KyAgICAgICAgcnRwX2N0eC0+cGItPm1heF9wYWNrZXRfc2l6ZSA9IG1heF9wYWNrZXRfc2l6ZTsK PiArICAgICAgICBydHBfY3R4LT5wYi0+YXZfY2xhc3MgPSAmZmZfYXZpb19jbGFzczsKPiArCj4g KyAgICAgICAgaXNfdmlkZW8gPSBzLT5zdHJlYW1zW2ldLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9 PSBBVk1FRElBX1RZUEVfVklERU87Cj4gKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVm KSwgIiVkIiwgaXNfdmlkZW8/IHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSA6IHdoaXAtPmF1ZGlv X3BheWxvYWRfdHlwZSk7Cj4gKyAgICAgICAgYXZfZGljdF9zZXQoJm9wdHMsICJwYXlsb2FkX3R5 cGUiLCBidWYsIDApOwo+ICsgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIs IGlzX3ZpZGVvPyB3aGlwLT52aWRlb19zc3JjIDogd2hpcC0+YXVkaW9fc3NyYyk7Cj4gKyAgICAg ICAgYXZfZGljdF9zZXQoJm9wdHMsICJzc3JjIiwgYnVmLCAwKTsKPiArCj4gKyAgICAgICAgcmV0 ID0gYXZmb3JtYXRfd3JpdGVfaGVhZGVyKHJ0cF9jdHgsICZvcHRzKTsKPiArICAgICAgICBpZiAo cmV0IDwgMCkgewo+ICsgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJ UDogRmFpbGVkIHRvIHdyaXRlIHJ0cCBoZWFkZXJcbiIpOwo+ICsgICAgICAgICAgICBnb3RvIGVu ZDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGZmX2Zvcm1hdF9zZXRfdXJsKHJ0cF9jdHgs IGF2X3N0cmR1cChzLT51cmwpKTsKPiArICAgICAgICBzLT5zdHJlYW1zW2ldLT50aW1lX2Jhc2Ug PSBydHBfY3R4LT5zdHJlYW1zWzBdLT50aW1lX2Jhc2U7Cj4gKyAgICAgICAgcy0+c3RyZWFtc1tp XS0+cHJpdl9kYXRhID0gcnRwX2N0eDsKPiArICAgICAgICBydHBfY3R4ID0gTlVMTDsKPiArICAg IH0KPiArCj4gKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX1JFQURZKQo+ICsgICAg ICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9SRUFEWTsKPiArICAgIGF2X2xvZyh3aGlwLCBB Vl9MT0dfSU5GTywgIldISVA6IE11eGVyIHN0YXRlPSVkLCBidWZmZXJfc2l6ZT0lZCwgbWF4X3Bh Y2tldF9zaXplPSVkLCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkPSVk bXMoaW5pdDolZCxvZmZlcjolZCxhbnN3ZXI6JWQsdWRwOiVkLGljZTolZCxkdGxzOiVkLHNydHA6 JWQpXG4iLAo+ICsgICAgICAgIHdoaXAtPnN0YXRlLCBidWZmZXJfc2l6ZSwgbWF4X3BhY2tldF9z aXplLCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpLAo+ICsgICAg ICAgIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsICAgd2hpcC0+d2hpcF9pbml0X3RpbWUp LAo+ICsgICAgICAgIEVMQVBTRUQod2hpcC0+d2hpcF9pbml0X3RpbWUsICAgd2hpcC0+d2hpcF9v ZmZlcl90aW1lKSwKPiArICAgICAgICBFTEFQU0VEKHdoaXAtPndoaXBfb2ZmZXJfdGltZSwgIHdo aXAtPndoaXBfYW5zd2VyX3RpbWUpLAo+ICsgICAgICAgIEVMQVBTRUQod2hpcC0+d2hpcF9hbnN3 ZXJfdGltZSwgd2hpcC0+d2hpcF91ZHBfdGltZSksCj4gKyAgICAgICAgRUxBUFNFRCh3aGlwLT53 aGlwX3VkcF90aW1lLCAgICB3aGlwLT53aGlwX2ljZV90aW1lKSwKPiArICAgICAgICBFTEFQU0VE KHdoaXAtPndoaXBfaWNlX3RpbWUsICAgIHdoaXAtPndoaXBfZHRsc190aW1lKSwKPiArICAgICAg ICBFTEFQU0VEKHdoaXAtPndoaXBfZHRsc190aW1lLCAgIHdoaXAtPndoaXBfc3J0cF90aW1lKSk7 Cj4gKwo+ICtlbmQ6Cj4gKyAgICBpZiAocnRwX2N0eCkKPiArICAgICAgICBhdmlvX2NvbnRleHRf ZnJlZSgmcnRwX2N0eC0+cGIpOwo+ICsgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHJ0cF9jdHgp Owo+ICsgICAgYXZfZGljdF9mcmVlKCZvcHRzKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBSVEMgaXMgY29ubmVjdGlvbmxlc3MsIGZvciBpdCdzIGJhc2VkIG9uIFVE UCwgc28gaXQgY2hlY2sgd2hldGhlciBzZXNpc29uIGlzCj4gKyAqIHRpbWVvdXQuIEluIHN1Y2gg Y2FzZSwgcHVibGlzaGVycyBjYW4ndCByZXB1Ymxpc2ggdGhlIHN0cmVhbSB1dGlsIHRoZSBzZXNz aW9uCj4gKyAqIGlzIHRpbWVvdXQuCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIG5v dGlmeSB0aGUgc2VydmVyIHRoYXQgdGhlIHN0cmVhbSBpcyBlbmRlZCwgc2VydmVyCj4gKyAqIHNo b3VsZCBleHBpcmUgYW5kIGNsb3NlIHRoZSBzZXNzaW9uIGltbWVkaWF0ZWx5LCBzbyB0aGF0IHB1 Ymxpc2hlcnMgY2FuIHJlcHVibGlzaAo+ICsgKiB0aGUgc3RyZWFtIHF1aWNrbHkuCj4gKyAqLwo+ ICtzdGF0aWMgaW50IGRpc3Bvc2Vfc2Vzc2lvbihBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiAr ICAgIGludCByZXQ7Cj4gKyAgICBjaGFyIGJ1ZltNQVhfVVJMX1NJWkVdOwo+ICsgICAgVVJMQ29u dGV4dCAqd2hpcF91YyA9IE5VTEw7Cj4gKyAgICBBVkRpY3Rpb25hcnkgKm9wdHMgPSBOVUxMOwo+ ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaWYgKCF3 aGlwLT53aGlwX3Jlc291cmNlX3VybCkKPiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBy ZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVc clxuIik7Cj4gKyAgICBpZiAod2hpcC0+YXV0aG9yaXphdGlvbikKPiArICAgICAgICByZXQgKz0g c25wcmludGYoYnVmICsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgIkF1dGhvcml6YXRpb246IEJl YXJlciAlc1xyXG4iLCB3aGlwLT5hdXRob3JpemF0aW9uKTsKPiArICAgIGlmIChyZXQgPD0gMCB8 fCByZXQgPj0gc2l6ZW9mKGJ1ZikpIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VS Uk9SLCAiV0hJUDogRmFpbGVkIHRvIGdlbmVyYXRlIGhlYWRlcnMsIHNpemU9JWQsICVzXG4iLCBy ZXQsIGJ1Zik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIGdv dG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAiaGVhZGVycyIs IGJ1ZiwgMCk7Cj4gKyAgICBhdl9kaWN0X3NldF9pbnQoJm9wdHMsICJjaHVua2VkX3Bvc3QiLCAw LCAwKTsKPiArICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAibWV0aG9kIiwgIkRFTEVURSIsIDApOwo+ ICsgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJndoaXBfdWMsIHdoaXAtPndoaXBfcmVz b3VyY2VfdXJsLCBBVklPX0ZMQUdfUkVBRF9XUklURSwgJnMtPmludGVycnVwdF9jYWxsYmFjaywK PiArICAgICAgICAmb3B0cywgcy0+cHJvdG9jb2xfd2hpdGVsaXN0LCBzLT5wcm90b2NvbF9ibGFj a2xpc3QsIE5VTEwpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIERFTEVURSB1cmw9JXNcbiIsIHdoaXAt PndoaXBfcmVzb3VyY2VfdXJsKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4g KyAgICB3aGlsZSAoMSkgewo+ICsgICAgICAgIHJldCA9IGZmdXJsX3JlYWQod2hpcF91YywgYnVm LCBzaXplb2YoYnVmKSk7Cj4gKyAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SX0VPRikgewo+ICsg ICAgICAgICAgICByZXQgPSAwOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4g KyAgICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xP R19FUlJPUiwgIldISVA6IEZhaWxlZCB0byByZWFkIHJlc3BvbnNlIGZyb20gREVMRVRFIHVybD0l c1xuIiwgd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwpOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsK PiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19JTkZP LCAiV0hJUDogRGlzcG9zZSByZXNvdXJjZSAlcyBva1xuIiwgd2hpcC0+d2hpcF9yZXNvdXJjZV91 cmwpOwo+ICsKPiArZW5kOgo+ICsgICAgZmZ1cmxfY2xvc2VwKCZ3aGlwX3VjKTsKPiArICAgIGF2 X2RpY3RfZnJlZSgmb3B0cyk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiAr ICogU2luY2UgdGhlIGgyNjRfbXA0dG9hbm5leGIgZmlsdGVyIG9ubHkgcHJvY2Vzc2VzIHRoZSBN UDQgSVNPTSBmb3JtYXQgYW5kIGJ5cGFzc2VzCj4gKyAqIHRoZSBhbm5leGIgZm9ybWF0LCBpdCBp cyBuZWNlc3NhcnkgdG8gbWFudWFsbHkgaW5zZXJ0IGVuY29kZXIgbWV0YWRhdGEgYmVmb3JlIGVh Y2gKPiArICogSURSIHdoZW4gZGVhbGluZyB3aXRoIGFubmV4YiBmb3JtYXQgcGFja2V0cy4gRm9y IGluc3RhbmNlLCBpbiB0aGUgY2FzZSBvZiBILjI2NCwKPiArICogd2UgbXVzdCBpbnNlcnQgU1BT IGFuZCBQUFMgYmVmb3JlIHRoZSBJRFIgZnJhbWUuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGgyNjRf YW5uZXhiX2luc2VydF9zcHNfcHBzKEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkK PiArewo+ICsgICAgaW50IHJldCA9IDA7Cj4gKyAgICBBVlBhY2tldCAqaW4gPSBOVUxMOwo+ICsg ICAgQVZDb2RlY1BhcmFtZXRlcnMgKnBhciA9IHMtPnN0cmVhbXNbcGt0LT5zdHJlYW1faW5kZXhd LT5jb2RlY3BhcjsKPiArICAgIHVpbnQzMl90IG5hbF9zaXplID0gMCwgb3V0X3NpemUgPSBwYXIg PyBwYXItPmV4dHJhZGF0YV9zaXplIDogMDsKPiArICAgIHVpbnQ4X3QgdW5pdF90eXBlLCBzcHNf c2VlbiA9IDAsIHBwc19zZWVuID0gMCwgaWRyX3NlZW4gPSAwLCAqb3V0Owo+ICsgICAgY29uc3Qg dWludDhfdCAqYnVmLCAqYnVmX2VuZCwgKnIxOwo+ICsKPiArICAgIGlmICghcGt0IHx8ICFwa3Qt PmRhdGEgfHwgcGt0LT5zaXplIDw9IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIGlm ICghcGFyIHx8ICFwYXItPmV4dHJhZGF0YSB8fCBwYXItPmV4dHJhZGF0YV9zaXplIDw9IDApCj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAvKiBEaXNjb3ZlciBOQUxVIHR5cGUgZnJv bSBwYWNrZXQuICovCj4gKyAgICBidWZfZW5kICA9IHBrdC0+ZGF0YSArIHBrdC0+c2l6ZTsKPiAr ICAgIGZvciAoYnVmID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2RlKHBrdC0+ZGF0YSwgYnVmX2VuZCk7 IGJ1ZiA8IGJ1Zl9lbmQ7IGJ1ZiArPSBuYWxfc2l6ZSkgewo+ICsgICAgICAgIHdoaWxlICghKihi dWYrKykpOwo+ICsgICAgICAgIHIxID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2RlKGJ1ZiwgYnVmX2Vu ZCk7Cj4gKyAgICAgICAgaWYgKChuYWxfc2l6ZSA9IHIxIC0gYnVmKSA+IDApIHsKPiArICAgICAg ICAgICAgdW5pdF90eXBlID0gKmJ1ZiAmIDB4MWY7Cj4gKyAgICAgICAgICAgIGlmICh1bml0X3R5 cGUgPT0gSDI2NF9OQUxfU1BTKSB7Cj4gKyAgICAgICAgICAgICAgICBzcHNfc2VlbiA9IDE7Cj4g KyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdF90eXBlID09IEgyNjRfTkFMX1BQUykgewo+ICsg ICAgICAgICAgICAgICAgcHBzX3NlZW4gPSAxOwo+ICsgICAgICAgICAgICB9IGVsc2UgaWYgKHVu aXRfdHlwZSA9PSBIMjY0X05BTF9JRFJfU0xJQ0UpIHsKPiArICAgICAgICAgICAgICAgIGlkcl9z ZWVuID0gMTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgb3V0X3NpemUgKz0g MyArIG5hbF9zaXplOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBpZiAoIWlkcl9z ZWVuIHx8IChzcHNfc2VlbiAmJiBwcHNfc2VlbikpCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiAr Cj4gKyAgICAvKiBTZWUgYXZfYnNmX3NlbmRfcGFja2V0ICovCj4gKyAgICBpbiA9IGF2X3BhY2tl dF9hbGxvYygpOwo+ICsgICAgaWYgKCFpbikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwo+ICsKPiArICAgIHJldCA9IGF2X3BhY2tldF9tYWtlX3JlZmNvdW50ZWQocGt0KTsKPiAr ICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICBhdl9wYWNr ZXRfbW92ZV9yZWYoaW4sIHBrdCk7Cj4gKwo+ICsgICAgLyogQ3JlYXRlIGEgbmV3IHBhY2tldCB3 aXRoIHNwcy9wcHMgaW5zZXJ0ZWQuICovCj4gKyAgICByZXQgPSBhdl9uZXdfcGFja2V0KHBrdCwg b3V0X3NpemUpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsK PiArICAgIHJldCA9IGF2X3BhY2tldF9jb3B5X3Byb3BzKHBrdCwgaW4pOwo+ICsgICAgaWYgKHJl dCA8IDApCj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsKPiArICAgIG1lbWNweShwa3QtPmRhdGEs IHBhci0+ZXh0cmFkYXRhLCBwYXItPmV4dHJhZGF0YV9zaXplKTsKPiArICAgIG91dCA9IHBrdC0+ ZGF0YSArIHBhci0+ZXh0cmFkYXRhX3NpemU7Cj4gKyAgICBidWZfZW5kICA9IGluLT5kYXRhICsg aW4tPnNpemU7Cj4gKyAgICBmb3IgKGJ1ZiA9IGZmX25hbF9maW5kX3N0YXJ0Y29kZShpbi0+ZGF0 YSwgYnVmX2VuZCk7IGJ1ZiA8IGJ1Zl9lbmQ7IGJ1ZiArPSBuYWxfc2l6ZSkgewo+ICsgICAgICAg IHdoaWxlICghKihidWYrKykpOwo+ICsgICAgICAgIHIxID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2Rl KGJ1ZiwgYnVmX2VuZCk7Cj4gKyAgICAgICAgaWYgKChuYWxfc2l6ZSA9IHIxIC0gYnVmKSA+IDAp IHsKPiArICAgICAgICAgICAgQVZfV0IyNChvdXQsIDB4MDAwMDEpOwo+ICsgICAgICAgICAgICBt ZW1jcHkob3V0ICsgMywgYnVmLCBuYWxfc2l6ZSk7Cj4gKyAgICAgICAgICAgIG91dCArPSAzICsg bmFsX3NpemU7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArZmFpbDoKPiArICAgIGlmIChy ZXQgPCAwKQo+ICsgICAgICAgIGF2X3BhY2tldF91bnJlZihwa3QpOwo+ICsgICAgYXZfcGFja2V0 X2ZyZWUoJmluKTsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZf Y29sZCBpbnQgd2hpcF9pbml0KEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgaW50IHJl dDsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGlm ICgocmV0ID0gaW5pdGlhbGl6ZShzKSkgPCAwKQo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsKPiAr ICAgIGlmICgocmV0ID0gcGFyc2VfY29kZWMocykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsK PiArCj4gKyAgICBpZiAoKHJldCA9IGdlbmVyYXRlX3NkcF9vZmZlcihzKSkgPCAwKQo+ICsgICAg ICAgIGdvdG8gZW5kOwo+ICsKPiArICAgIGlmICgocmV0ID0gZXhjaGFuZ2Vfc2RwKHMpKSA8IDAp Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBwYXJzZV9hbnN3ZXIo cykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsKPiArCj4gKyAgICBpZiAoKHJldCA9IHVkcF9j b25uZWN0KHMpKSA8IDApCj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICsgICAgaWYgKChyZXQg PSBpY2VfZHRsc19oYW5kc2hha2UocykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsKPiArCj4g KyAgICBpZiAoKHJldCA9IHNldHVwX3NydHAocykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsK PiArCj4gKyAgICBpZiAoKHJldCA9IGNyZWF0ZV9ydHBfbXV4ZXIocykpIDwgMCkKPiArICAgICAg ICBnb3RvIGVuZDsKPiArCj4gK2VuZDoKPiArICAgIGlmIChyZXQgPCAwICYmIHdoaXAtPnN0YXRl IDwgV0hJUF9TVEFURV9GQUlMRUQpCj4gKyAgICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRF X0ZBSUxFRDsKPiArICAgIGlmIChyZXQgPj0gMCAmJiB3aGlwLT5zdGF0ZSA+PSBXSElQX1NUQVRF X0ZBSUxFRCAmJiB3aGlwLT5kdGxzX3JldCA8IDApCj4gKyAgICAgICAgcmV0ID0gd2hpcC0+ZHRs c19yZXQ7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHdoaXBfd3Jp dGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKPiArewo+ICsgICAg aW50IHJldDsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsgICAg QVZTdHJlYW0gKnN0ID0gcy0+c3RyZWFtc1twa3QtPnN0cmVhbV9pbmRleF07Cj4gKyAgICBBVkZv cm1hdENvbnRleHQgKnJ0cF9jdHggPSBzdC0+cHJpdl9kYXRhOwo+ICsKPiArICAgIC8qIFRPRE86 IFNlbmQgYmluZGluZyByZXF1ZXN0IGV2ZXJ5IDFzIGFzIFdlYlJUQyBoZWFydGJlYXQuICovCj4g Kwo+ICsgICAgLyoqCj4gKyAgICAgKiBSZWNlaXZlIHBhY2tldHMgZnJvbSB0aGUgc2VydmVyIHN1 Y2ggYXMgSUNFIGJpbmRpbmcgcmVxdWVzdHMsIERUTFMgbWVzc2FnZXMsCj4gKyAgICAgKiBhbmQg UlRDUCBsaWtlIFBMSSByZXF1ZXN0cywgdGhlbiByZXNwb25kIHRvIHRoZW0uCj4gKyAgICAgKi8K PiArICAgIHJldCA9IGZmdXJsX3JlYWQod2hpcC0+dWRwLCB3aGlwLT5idWYsIHNpemVvZih3aGlw LT5idWYpKTsKPiArICAgIGlmIChyZXQgPiAwKSB7Cj4gKyAgICAgICAgaWYgKGlzX2R0bHNfcGFj a2V0KHdoaXAtPmJ1ZiwgcmV0KSkgewo+ICsgICAgICAgICAgICBpZiAoKHJldCA9IGZmdXJsX3dy aXRlKHdoaXAtPmR0bHNfdWMsIHdoaXAtPmJ1ZiwgcmV0KSkgPCAwKSB7Cj4gKyAgICAgICAgICAg ICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGhhbmRsZSBE VExTIG1lc3NhZ2VcbiIpOwo+ICsgICAgICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAg ICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9IGVsc2UgaWYgKHJldCAhPSBBVkVSUk9SKEVBR0FJ TikpIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVk IHRvIHJlYWQgZnJvbSBVRFAgc29ja2V0XG4iKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAg IH0KPiArCj4gKyAgICBpZiAod2hpcC0+aDI2NF9hbm5leGJfaW5zZXJ0X3Nwc19wcHMgJiYgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0KSB7Cj4gKyAgICAgICAgaWYg KChyZXQgPSBoMjY0X2FubmV4Yl9pbnNlcnRfc3BzX3BwcyhzLCBwa3QpKSA8IDApIHsKPiArICAg ICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBpbnNl cnQgU1BTL1BQUyBiZWZvcmUgSURSXG4iKTsKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGZmX3dyaXRlX2NoYWluZWQocnRwX2N0 eCwgMCwgcGt0LCBzLCAwKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgaWYgKHJl dCA9PSBBVkVSUk9SKEVJTlZBTCkpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xP R19XQVJOSU5HLCAiV0hJUDogSWdub3JlIGZhaWxlZCB0byB3cml0ZSBwYWNrZXQ9JWRCLCByZXQ9 JWRcbiIsIHBrdC0+c2l6ZSwgcmV0KTsKPiArICAgICAgICAgICAgcmV0ID0gMDsKPiArICAgICAg ICB9IGVsc2UKPiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6 IEZhaWxlZCB0byB3cml0ZSBwYWNrZXQsIHNpemU9JWRcbiIsIHBrdC0+c2l6ZSk7Cj4gKyAgICAg ICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICtlbmQ6Cj4gKyAgICBpZiAocmV0IDwgMCAmJiB3 aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfRkFJTEVEKQo+ICsgICAgICAgIHdoaXAtPnN0YXRlID0g V0hJUF9TVEFURV9GQUlMRUQ7Cj4gKyAgICBpZiAocmV0ID49IDAgJiYgd2hpcC0+c3RhdGUgPj0g V0hJUF9TVEFURV9GQUlMRUQgJiYgd2hpcC0+ZHRsc19yZXQgPCAwKQo+ICsgICAgICAgIHJldCA9 IHdoaXAtPmR0bHNfcmV0Owo+ICsgICAgaWYgKHJldCA+PSAwICYmIHdoaXAtPmR0bHNfY2xvc2Vk KQo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyBhdl9jb2xkIHZvaWQgd2hpcF9kZWluaXQoQVZGb3JtYXRDb250ZXh0ICpz KQo+ICt7Cj4gKyAgICBpbnQgaSwgcmV0Owo+ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5w cml2X2RhdGE7Cj4gKwo+ICsgICAgcmV0ID0gZGlzcG9zZV9zZXNzaW9uKHMpOwo+ICsgICAgaWYg KHJldCA8IDApCj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19XQVJOSU5HLCAiV0hJUDog RmFpbGVkIHRvIGRpc3Bvc2UgcmVzb3VyY2UsIHJldD0lZFxuIiwgcmV0KTsKPiArCj4gKyAgICBm b3IgKGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsgaSsrKSB7Cj4gKyAgICAgICAgQVZGb3JtYXRD b250ZXh0KiBydHBfY3R4ID0gcy0+c3RyZWFtc1tpXS0+cHJpdl9kYXRhOwo+ICsgICAgICAgIGlm ICghcnRwX2N0eCkKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIGF2X3dy aXRlX3RyYWlsZXIocnRwX2N0eCk7Cj4gKyAgICAgICAgLyoqCj4gKyAgICAgICAgICogS2VlcCBp biBtaW5kIHRoYXQgaXQgaXMgbmVjZXNzYXJ5IHRvIGZyZWUgdGhlIGJ1ZmZlciBvZiBwYiBzaW5j ZSB3ZSBhbGxvY2F0ZQo+ICsgICAgICAgICAqIGl0IGFuZCBwYXNzIGl0IHRvIHBiIHVzaW5nIGF2 aW9fYWxsb2NfY29udGV4dCwgd2hpbGUgYXZpb19jb250ZXh0X2ZyZWUgZG9lcwo+ICsgICAgICAg ICAqIG5vdCBwZXJmb3JtIHRoaXMgYWN0aW9uLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGF2 X2ZyZWVwKCZydHBfY3R4LT5wYi0+YnVmZmVyKTsKPiArICAgICAgICBhdmlvX2NvbnRleHRfZnJl ZSgmcnRwX2N0eC0+cGIpOwo+ICsgICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChydHBfY3R4 KTsKPiArICAgICAgICBzLT5zdHJlYW1zW2ldLT5wcml2X2RhdGEgPSBOVUxMOwo+ICsgICAgfQo+ ICsKPiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5zZHBfb2ZmZXIpOwo+ICsgICAgYXZfZnJlZXAoJndo aXAtPnNkcF9hbnN3ZXIpOwo+ICsgICAgYXZfZnJlZXAoJndoaXAtPndoaXBfcmVzb3VyY2VfdXJs KTsKPiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5pY2VfdWZyYWdfcmVtb3RlKTsKPiArICAgIGF2X2Zy ZWVwKCZ3aGlwLT5pY2VfcHdkX3JlbW90ZSk7Cj4gKyAgICBhdl9mcmVlcCgmd2hpcC0+aWNlX3By b3RvY29sKTsKPiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5pY2VfaG9zdCk7Cj4gKyAgICBhdl9mcmVl cCgmd2hpcC0+YXV0aG9yaXphdGlvbik7Cj4gKyAgICBhdl9mcmVlcCgmd2hpcC0+Y2VydF9maWxl KTsKPiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5rZXlfZmlsZSk7Cj4gKyAgICBmZnVybF9jbG9zZXAo JndoaXAtPnVkcCk7Cj4gKyAgICBmZl9zcnRwX2ZyZWUoJndoaXAtPnNydHBfYXVkaW9fc2VuZCk7 Cj4gKyAgICBmZl9zcnRwX2ZyZWUoJndoaXAtPnNydHBfdmlkZW9fc2VuZCk7Cj4gKyAgICBmZl9z cnRwX2ZyZWUoJndoaXAtPnNydHBfcnRjcF9zZW5kKTsKPiArICAgIGZmX3NydHBfZnJlZSgmd2hp cC0+c3J0cF9yZWN2KTsKPiArICAgIGZmdXJsX2Nsb3NlKHdoaXAtPmR0bHNfdWMpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHdoaXBfY2hlY2tfYml0c3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqcywg QVZTdHJlYW0gKnN0LCBjb25zdCBBVlBhY2tldCAqcGt0KQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0g MSwgZXh0cmFkYXRhX2lzb20gPSAwOwo+ICsgICAgdWludDhfdCAqYiA9IHBrdC0+ZGF0YTsKPiAr ICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGlmIChzdC0+ Y29kZWNwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQpIHsKPiArICAgICAgICBleHRy YWRhdGFfaXNvbSA9IHN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhX3NpemUgPiAwICYmIHN0LT5jb2Rl Y3Bhci0+ZXh0cmFkYXRhWzBdID09IDE7Cj4gKyAgICAgICAgaWYgKHBrdC0+c2l6ZSA+PSA1ICYm IEFWX1JCMzIoYikgIT0gMHgwMDAwMDAxICYmIChBVl9SQjI0KGIpICE9IDB4MDAwMDAxIHx8IGV4 dHJhZGF0YV9pc29tKSkgewo+ICsgICAgICAgICAgICByZXQgPSBmZl9zdHJlYW1fYWRkX2JpdHN0 cmVhbV9maWx0ZXIoc3QsICJoMjY0X21wNHRvYW5uZXhiIiwgTlVMTCk7Cj4gKyAgICAgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IEVuYWJsZSBCU0YgaDI2NF9tcDR0 b2FubmV4YiwgcGFja2V0PVsleCAleCAleCAleCAleCAuLi5dLCBleHRyYWRhdGFfaXNvbT0lZFxu IiwKPiArICAgICAgICAgICAgICAgIGJbMF0sIGJbMV0sIGJbMl0sIGJbM10sIGJbNF0sIGV4dHJh ZGF0YV9pc29tKTsKPiArICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAgd2hpcC0+aDI2NF9h bm5leGJfaW5zZXJ0X3Nwc19wcHMgPSAxOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiByZXQ7 Cj4gK30KPiArCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFdISVBDb250ZXh0LCB4KQo+ ICsjZGVmaW5lIERFQyBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTQo+ICtzdGF0aWMgY29uc3Qg QVZPcHRpb24gb3B0aW9uc1tdID0gewo+ICsgICAgeyAiaGFuZHNoYWtlX3RpbWVvdXQiLCAgIlRp bWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBJQ0UgYW5kIERUTFMgaGFuZHNoYWtlLiIsICAgICAg T0ZGU0VUKGhhbmRzaGFrZV90aW1lb3V0KSwgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0ID0g NTAwMCB9LCAgICAtMSwgSU5UX01BWCwgREVDIH0sCj4gKyAgICB7ICJwa3Rfc2l6ZSIsICAgICAg ICAgICAiVGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIG9mIFJUUCBwYWNrZXRzIHRoYXQgc2Vu ZCBvdXQiLCBPRkZTRVQocGt0X3NpemUpLCAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7 IC5pNjQgPSAxMjAwIH0sICAgIC0xLCBJTlRfTUFYLCBERUMgfSwKPiArICAgIHsgImF1dGhvcml6 YXRpb24iLCAgICAgICJUaGUgb3B0aW9uYWwgQmVhcmVyIHRva2VuIGZvciBXSElQIEF1dGhvcml6 YXRpb24iLCAgICAgICAgIE9GRlNFVChhdXRob3JpemF0aW9uKSwgICAgICBBVl9PUFRfVFlQRV9T VFJJTkcsIHsgLnN0ciA9IE5VTEwgfSwgICAgIDAsICAgICAgIDAsIERFQyB9LAo+ICsgICAgeyAi Y2VydF9maWxlIiwgICAgICAgICAgIlRoZSBvcHRpb25hbCBjZXJ0aWZpY2F0ZSBmaWxlIHBhdGgg Zm9yIERUTFMiLCAgICAgICAgICAgICAgT0ZGU0VUKGNlcnRfZmlsZSksICAgICAgICAgIEFWX09Q VF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAgICAgMCwgICAgICAgMCwgREVDIH0sCj4g KyAgICB7ICJrZXlfZmlsZSIsICAgICAgICAgICAiVGhlIG9wdGlvbmFsIHByaXZhdGUga2V5IGZp bGUgcGF0aCBmb3IgRFRMUyIsICAgICAgICAgICAgICBPRkZTRVQoa2V5X2ZpbGUpLCAgICAgIEFW X09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAgICAgMCwgICAgICAgMCwgREVDIH0s Cj4gKyAgICB7IE5VTEwgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBBVkNsYXNzIHdoaXBf bXV4ZXJfY2xhc3MgPSB7Cj4gKyAgICAuY2xhc3NfbmFtZSA9ICJXSElQIG11eGVyIiwKPiArICAg IC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4gKyAgICAub3B0aW9uICAgICA9 IG9wdGlvbnMsCj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPiAr fTsKPiArCj4gK2NvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX3doaXBfbXV4ZXIgPSB7Cj4gKyAgICAu cC5uYW1lICAgICAgICAgICAgID0gIndoaXAiLAo+ICsgICAgLnAubG9uZ19uYW1lICAgICAgICA9 IE5VTExfSUZfQ09ORklHX1NNQUxMKCJXSElQKFdlYlJUQy1IVFRQIGluZ2VzdGlvbiBwcm90b2Nv bCkgbXV4ZXIiKSwKPiArICAgIC5wLmF1ZGlvX2NvZGVjICAgICAgPSBBVl9DT0RFQ19JRF9PUFVT LAo+ICsgICAgLnAudmlkZW9fY29kZWMgICAgICA9IEFWX0NPREVDX0lEX0gyNjQsCj4gKyAgICAu cC5mbGFncyAgICAgICAgICAgID0gQVZGTVRfR0xPQkFMSEVBREVSIHwgQVZGTVRfTk9GSUxFLAo+ ICsgICAgLnAucHJpdl9jbGFzcyAgICAgICA9ICZ3aGlwX211eGVyX2NsYXNzLAo+ICsgICAgLnBy aXZfZGF0YV9zaXplICAgICA9IHNpemVvZihXSElQQ29udGV4dCksCj4gKyAgICAuaW5pdCAgICAg ICAgICAgICAgID0gd2hpcF9pbml0LAo+ICsgICAgLndyaXRlX3BhY2tldCAgICAgICA9IHdoaXBf d3JpdGVfcGFja2V0LAo+ICsgICAgLmRlaW5pdCAgICAgICAgICAgICA9IHdoaXBfZGVpbml0LAo+ ICsgICAgLmNoZWNrX2JpdHN0cmVhbSAgICA9IHdoaXBfY2hlY2tfYml0c3RyZWFtLAo+ICt9Owo+ IC0tCj4gMi40OS4wCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVn Lm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+ Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRl dmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KCkZlZWwg ZnJlZSB0byBzaGFyZSB5b3VyIGNvbW1lbnRzLiBBcyB3ZSd2ZSBwcmV2aW91c2x5IGRpc2N1c3Nl ZCB0aGlzCmNvZGUsIHdlJ2QgYXBwcmVjaWF0ZSBldmVyeW9uZSdzIGlucHV0IGluIHJldmlld2lu ZyBpdC4KCgpUaGFua3MKU3RldmVuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBl Zy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpU byB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K