From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id CEC364104A for ; Sat, 12 Feb 2022 18:46:32 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1141868B28B; Sat, 12 Feb 2022 20:46:30 +0200 (EET) Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B385968B24D for ; Sat, 12 Feb 2022 20:46:23 +0200 (EET) Received: by mail-wr1-f46.google.com with SMTP id v12so20478613wrv.2 for ; Sat, 12 Feb 2022 10:46:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=AdCTucsK3VuXS+kRIpH0jIXCmYtpN1PL/cfQvudN+/s=; b=KwMlBD5WDmjqkDAo8X/PRJ3ugpW0Pn9UNu9NZJt3sg1IjHrrZr7eRcKtz8hwnacVeH 6NkgLrW8uD5ZXS0T1bFIqq5CT7P63u0N6O5PDk/gDMbynY8cOqxknrVu/Wjjsvpasdq7 c/O9IlbWYWlN5W7i5xj7YpE1kDJxIEAk3l5EJaqW5Km7lsRR+LYJ0gQAo+Dsp8QDw5IP 8fUBgerfHdoMIJzA6drHomuP0RVsGYzSHbwvMLsfYLO2Muga6A8y3hNxIGV04Mc5xzGx LgOcUCGe8gWwOOEdYWBdLzTj5jmJKjA9yArs3BD5sfAt0K7O1+z2a0Pm5XeanXLE2tBF TZDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=AdCTucsK3VuXS+kRIpH0jIXCmYtpN1PL/cfQvudN+/s=; b=O7G5ESnDcngztbYancL63tZ85Lvutv0Ro2nr0SZH5A1oi7ueJicxiPKv7A//hD7HK8 JvQgjZHIz93Jmi6W3QzLa0meACDQ0SZcTniCf3ffuaxl8qu1xaKFClXNZerGw/DDglfk LVLuxd2uc3TyP+ay/TmwAEXRjk6Uda7GqZHumujs04IGzXZL/g/cTeZY05QdVT9Xb74T cY7SaYcWbrQM8l1RFv8Wv9cyPrsg0nBRjTwRHfdagzllJMpvKLrGYctqfQoIycQtY1WS r1cOu91fe3HeNzWYx8m7CCYlnZmOHPGuhh66GYPFGDFgdP2qtdzk/9JdaA5jLJ+2Wb31 I3Jw== X-Gm-Message-State: AOAM533VjoZopD3ygeJP3gtW8zLF/SH8xifR5J4foG5Ns973X7wt+mLr 6pIQBAZ5xlLFg3WhpWBYv+AYEG0F9EfLYQnevRHNIehDuQDxNVsb X-Google-Smtp-Source: ABdhPJx6wp2pR9Oxa8r+oE7MxA9vV/DGg0ha9Du35hHZEt3RQ8Xbf9LMKc7GhBHFvo/P1rgM4psMKJ8QaCC/KOzTNcw= X-Received: by 2002:a05:6000:15cc:: with SMTP id y12mr5848368wry.202.1644691582610; Sat, 12 Feb 2022 10:46:22 -0800 (PST) MIME-Version: 1.0 References: <20220210011352.11582-1-markg85@gmail.com> <20220210011352.11582-2-markg85@gmail.com> <27c0aa14924e7dea69492e888e3a057f77f819ad.camel@acc.umu.se> In-Reply-To: From: Mark Gaiser Date: Sat, 12 Feb 2022 19:44:47 +0100 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v5 1/1] avformat: Add IPFS protocol support. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gU2F0LCBGZWIgMTIsIDIwMjIgYXQgNjo1NyBQTSBNYXJrIEdhaXNlciA8bWFya2c4NUBnbWFp bC5jb20+IHdyb3RlOgoKPgo+Cj4gT24gU2F0LCBGZWIgMTIsIDIwMjIgYXQgMToxOSBQTSBUb21h cyBIw6RyZGluIDx0am9wcGVuQGFjYy51bXUuc2U+IHdyb3RlOgo+Cj4+IHRvciAyMDIyLTAyLTEw IGtsb2NrYW4gMDI6MTMgKzAxMDAgc2tyZXYgTWFyayBHYWlzZXI6Cj4+ID4gVGhpcyBwYXRjaCBh ZGRzIHN1cHBvcnQgZm9yOgo+PiA+IC0gZmZwbGF5IGlwZnM6Ly88Y2lkPgo+PiA+IC0gZmZwbGF5 IGlwbnM6Ly88Y2lkPgo+PiA+Cj4+ID4gSVBGUyBkYXRhIGNhbiBiZSBwbGF5ZWQgZnJvbSBzbyBj YWxsZWQgImlwZnMgZ2F0ZXdheXMiLgo+PiA+IEEgZ2F0ZXdheSBpcyBlc3NlbnRpYWxseSBhIHdl YnNlcnZlciB0aGF0IGdpdmVzIGFjY2VzcyB0byB0aGUKPj4gPiBkaXN0cmlidXRlZCBJUEZTIG5l dHdvcmsuCj4+ID4KPj4gPiBUaGlzIHByb3RvY29sIHN1cHBvcnQgKGlwZnMgYW5kIGlwbnMpIHRo ZXJlZm9yZSB0cmFuc2xhdGVzCj4+ID4gaXBmczovLyBhbmQgaXBuczovLyB0byBhIGh0dHA6Ly8g dXJsLiBUaGlzIHJlc3VsdGluZyB1cmwgaXMKPj4gPiB0aGVuIGhhbmRsZWQgYnkgdGhlIGh0dHAg cHJvdG9jb2wuIEl0IGNvdWxkIGFsc28gYmUgaHR0cHMKPj4gPiBkZXBlbmRpbmcgb24gdGhlIGdh dGV3YXkgcHJvdmlkZWQuCj4+ID4KPj4gPiBUbyB1c2UgdGhpcyBwcm90b2NvbCwgYSBnYXRld2F5 IG11c3QgYmUgcHJvdmlkZWQuCj4+ID4gSWYgeW91IGRvIG5vdGhpbmcgaXQgd2lsbCB0cnkgdG8g ZmluZCBpdCBpbiB5b3VyCj4+ID4gJEhPTUUvLmlwZnMvZ2F0ZXdheSBmaWxlLiBUaGUgd2F5cyB0 byBzZXQgaXQgbWFudWFsbHkgYXJlOgo+PiA+IDEuIERlZmluZSBhIC1nYXRld2F5IDx1cmw+IHRv IHRoZSBnYXRld2F5Lgo+PiA+IDIuIERlZmluZSAkSVBGU19HQVRFV0FZIHdpdGggdGhlIGZ1bGwg aHR0cCBsaW5rIHRvIHRoZSBnYXRld2F5Lgo+PiA+IDMuIERlZmluZSAkSVBGU19QQVRIIGFuZCBw b2ludCBpdCB0byB0aGUgSVBGUyBkYXRhIHBhdGguCj4+ID4gNC4gSGF2ZSBJUEZTIHJ1bm5pbmcg aW4geW91ciBsb2NhbCB1c2VyIGZvbGRlciAodW5kZXIgJEhPTUUvLmlwZnMpLgo+PiA+Cj4+ID4g U2lnbmVkLW9mZi1ieTogTWFyayBHYWlzZXIgPG1hcmtnODVAZ21haWwuY29tPgo+PiA+IC0tLQo+ PiA+ICBjb25maWd1cmUgICAgICAgICAgICAgICAgIHwgICAyICsKPj4gPiAgZG9jL3Byb3RvY29s cy50ZXhpICAgICAgICB8ICAzMCArKysrCj4+ID4gIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICAg fCAgIDIgKwo+PiA+ICBsaWJhdmZvcm1hdC9pcGZzZ2F0ZXdheS5jIHwgMzI2Cj4+ID4gKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gPiAgbGliYXZmb3JtYXQvcHJvdG9j b2xzLmMgICB8ICAgMiArCj4+ID4gIDUgZmlsZXMgY2hhbmdlZCwgMzYyIGluc2VydGlvbnMoKykK Pj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPj4gPgo+ PiA+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPj4gPiBpbmRleCA1YjE5YTM1 ZjU5Li42ZmYwOWU3OTc0IDEwMDc1NQo+PiA+IC0tLSBhL2NvbmZpZ3VyZQo+PiA+ICsrKyBiL2Nv bmZpZ3VyZQo+PiA+IEBAIC0zNTg1LDYgKzM1ODUsOCBAQCB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJu ZXR3b3JrIgo+PiA+ICB1ZHBsaXRlX3Byb3RvY29sX3NlbGVjdD0ibmV0d29yayIKPj4gPiAgdW5p eF9wcm90b2NvbF9kZXBzPSJzeXNfdW5faCIKPj4gPiAgdW5peF9wcm90b2NvbF9zZWxlY3Q9Im5l dHdvcmsiCj4+ID4gK2lwZnNfcHJvdG9jb2xfc2VsZWN0PSJodHRwc19wcm90b2NvbCIKPj4gPiAr aXBuc19wcm90b2NvbF9zZWxlY3Q9Imh0dHBzX3Byb3RvY29sIgo+PiA+Cj4+ID4gICMgZXh0ZXJu YWwgbGlicmFyeSBwcm90b2NvbHMKPj4gPiAgbGliYW1xcF9wcm90b2NvbF9kZXBzPSJsaWJyYWJi aXRtcSIKPj4gPiBkaWZmIC0tZ2l0IGEvZG9jL3Byb3RvY29scy50ZXhpIGIvZG9jL3Byb3RvY29s cy50ZXhpCj4+ID4gaW5kZXggZDIwN2RmMGI1Mi4uN2M5YzBhNDgwOCAxMDA2NDQKPj4gPiAtLS0g YS9kb2MvcHJvdG9jb2xzLnRleGkKPj4gPiArKysgYi9kb2MvcHJvdG9jb2xzLnRleGkKPj4gPiBA QCAtMjAyNSw1ICsyMDI1LDM1IEBAIGRlY29kaW5nIGVycm9ycy4KPj4gPgo+PiA+ICBAZW5kIHRh YmxlCj4+ID4KPj4gPiArQHNlY3Rpb24gaXBmcwo+PiA+ICsKPj4gPiArSW50ZXJQbGFuZXRhcnkg RmlsZSBTeXN0ZW0gKElQRlMpIHByb3RvY29sIHN1cHBvcnQuIE9uZSBjYW4gYWNjZXNzCj4+ID4g ZmlsZXMgc3RvcmVkCj4+ID4gK29uIHRoZSBJUEZTIG5ldHdvcmsgdGhyb3VnaCBzbyBjYWxsZWQg Z2F0ZXdheXMuIFRob3NlIGFyZSBodHRwKHMpCj4+ID4gZW5kcG9pbnRzLgo+PiA+ICtUaGlzIHBy b3RvY29sIHdyYXBzIHRoZSBJUEZTIG5hdGl2ZSBwcm90b2NvbHMgKGlwZnM6Ly8gYW5kIGlwbnM6 Ly8pCj4+ID4gdG8gYmUgc2VuZAo+PiA+ICt0byBzdWNoIGEgZ2F0ZXdheS4gVXNlcnMgY2FuIChh bmQgc2hvdWxkKSBob3N0IHRoZWlyIG93biBub2RlIHdoaWNoCj4+ID4gbWVhbnMgdGhpcwo+PiA+ ICtwcm90b2NvbCB3aWxsIHVzZSB5b3VyIGxvY2FsIG1hY2hpbmUgZ2F0ZXdheSB0byBhY2Nlc3Mg ZmlsZXMgb24gdGhlCj4+ID4gSVBGUyBuZXR3b3JrLgo+PiA+ICsKPj4gPiArSWYgYSB1c2VyIGRv ZXNuJ3QgaGF2ZSBhIG5vZGUgb2YgdGhlaXIgb3duIHRoZW4gdGhlIHB1YmxpYyBnYXRld2F5Cj4+ ID4gZHdlYi5saW5rIGlzCj4+ID4gK3VzZWQgYnkgZGVmYXVsdC4KPj4gPiArCj4+ID4gK1lvdSBj YW4gdXNlIHRoaXMgcHJvdG9jb2wgaW4gMiB3YXlzLiBVc2luZyBJUEZTOgo+PiA+ICtAZXhhbXBs ZQo+PiA+ICtmZnBsYXkgaXBmczovL1FtYkd0SmcyM3NraHZGbXU5bUppZVBWQnloZnp1NXJ3bzc0 TUVrVkRZQW1GNVQKPj4gPiArQGVuZCBleGFtcGxlCj4+ID4gKwo+PiA+ICtPciB0aGUgSVBOUyBw cm90b2NvbCAoSVBOUyBpcyBtdXRhYmxlIElQRlMpOgo+PiA+ICtAZXhhbXBsZQo+PiA+ICtmZnBs YXkgaXBuczovL1FtYkd0SmcyM3NraHZGbXU5bUppZVBWQnloZnp1NXJ3bzc0TUVrVkRZQW1GNVQK Pj4gPiArQGVuZCBleGFtcGxlCj4+ID4gKwo+PiA+ICtZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBn YXRld2F5IHRvIGJlIHVzZWQ6Cj4+ID4gKwo+PiA+ICtAdGFibGUgQG9wdGlvbgo+PiA+ICsKPj4g PiArQGl0ZW0gZ2F0ZXdheQo+PiA+ICtEZWZpbmVzIHRoZSBnYXRld2F5IHRvIHVzZS4gV2hlbiBu b3RoaW5nIGlzIHByb3ZpZGVkIHRoZSBwcm90b2NvbAo+PiA+IHdpbGwgZmlyc3QgdHJ5Cj4+ID4g K3lvdXIgbG9jYWwgZ2F0ZXdheS4gSWYgdGhhdCBmYWlscyBkd2ViLmxpbmsgd2lsbCBiZSB1c2Vk Lgo+PiA+ICsKPj4gPiArQGVuZCB0YWJsZQo+PiA+Cj4+ID4gIEBjIG1hbiBlbmQgUFJPVE9DT0xT Cj4+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFr ZWZpbGUKPj4gPiBpbmRleCAzZGM2YTQ3OWNjLi40ZWRjZTg0MjBmIDEwMDY0NAo+PiA+IC0tLSBh L2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4+ID4gKysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPj4g PiBAQCAtNjU2LDYgKzY1Niw4IEBAIE9CSlMtJChDT05GSUdfU1JUUF9QUk9UT0NPTCkgICAgICAg ICAgICAgKz0KPj4gPiBzcnRwcHJvdG8ubyBzcnRwLm8KPj4gPiAgT0JKUy0kKENPTkZJR19TVUJG SUxFX1BST1RPQ09MKSAgICAgICAgICArPSBzdWJmaWxlLm8KPj4gPiAgT0JKUy0kKENPTkZJR19U RUVfUFJPVE9DT0wpICAgICAgICAgICAgICArPSB0ZWVwcm90by5vIHRlZV9jb21tb24ubwo+PiA+ ICBPQkpTLSQoQ09ORklHX1RDUF9QUk9UT0NPTCkgICAgICAgICAgICAgICs9IHRjcC5vCj4+ID4g K09CSlMtJChDT05GSUdfSVBGU19QUk9UT0NPTCkgICAgICAgICAgICAgKz0gaXBmc2dhdGV3YXku bwo+PiA+ICtPQkpTLSQoQ09ORklHX0lQTlNfUFJPVE9DT0wpICAgICAgICAgICAgICs9IGlwZnNn YXRld2F5Lm8KPj4gPiAgVExTLU9CSlMtJChDT05GSUdfR05VVExTKSAgICAgICAgICAgICAgICAr PSB0bHNfZ251dGxzLm8KPj4gPiAgVExTLU9CSlMtJChDT05GSUdfTElCVExTKSAgICAgICAgICAg ICAgICArPSB0bHNfbGlidGxzLm8KPj4gPiAgVExTLU9CSlMtJChDT05GSUdfTUJFRFRMUykgICAg ICAgICAgICAgICArPSB0bHNfbWJlZHRscy5vCj4+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L2lwZnNnYXRld2F5LmMgYi9saWJhdmZvcm1hdC9pcGZzZ2F0ZXdheS5jCj4+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPj4gPiBpbmRleCAwMDAwMDAwMDAwLi45ZWJjZWQxMGM3Cj4+ID4gLS0tIC9k ZXYvbnVsbAo+PiA+ICsrKyBiL2xpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPj4gPiBAQCAtMCww ICsxLDMyNiBAQAo+PiA+ICsvKgo+PiA+ICsgKiBJUEZTIGFuZCBJUE5TIHByb3RvY29sIHN1cHBv cnQgdGhyb3VnaCBJUEZTIEdhdGV3YXkuCj4+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMiBNYXJr IEdhaXNlcgo+PiA+ICsgKgo+PiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4+ ID4gKyAqCj4+ID4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKPj4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+PiA+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPj4gPiArICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCj4+ID4gdmVy c2lvbi4KPj4gPiArICoKPj4gPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ID4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V Cj4+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4+ID4gKyAqCj4+ID4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZG bXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+PiA+ICsgKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4+ ID4gMDIxMTAtMTMwMSBVU0EKPj4gPiArICovCj4+ID4gKwo+PiA+ICsjaW5jbHVkZSAiYXZmb3Jt YXQuaCIKPj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+PiA+ICsjaW5jbHVk ZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgiCj4+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJu YWwuaCIKPj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPj4gPiArI2luY2x1ZGUgImxp YmF2dXRpbC90cmVlLmgiCj4+ID4gKyNpbmNsdWRlIDxmY250bC5oPgo+PiA+ICsjaWYgSEFWRV9J T19ICj4+ID4gKyNpbmNsdWRlIDxpby5oPgo+PiA+ICsjZW5kaWYKPj4gPiArI2lmIEhBVkVfVU5J U1REX0gKPj4gPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+PiA+ICsjZW5kaWYKPj4gPiArI2luY2x1 ZGUgIm9zX3N1cHBvcnQuaCIKPj4gPiArI2luY2x1ZGUgInVybC5oIgo+PiA+ICsjaW5jbHVkZSA8 c3RkbGliLmg+Cj4+ID4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+PiA+ICsKPj4gPiArdHlwZWRl ZiBzdHJ1Y3QgSVBGU0dhdGV3YXlDb250ZXh0IHsKPj4gPiArICAgIEFWQ2xhc3MgKmNsYXNzOwo+ PiA+ICsgICAgVVJMQ29udGV4dCAqaW5uZXI7Cj4+ID4gKyAgICBjaGFyICpnYXRld2F5Owo+PiA+ ICt9IElQRlNHYXRld2F5Q29udGV4dDsKPj4gPiArCj4+ID4gKy8vIEEgYmVzdC1lZmZvcnQgd2F5 IHRvIGZpbmQgdGhlIElQRlMgZ2F0ZXdheS4KPj4gPiArLy8gT25seSB0aGUgbW9zdCBhcHByb3Bp YXRlIGdhdGV3YXkgaXMgc2V0LiBJdCdzIG5vdCBhY3R1YWxseQo+PiA+IHJlcXVlc3RlZAo+PiA+ ICsvLyAoaHR0cCBjYWxsKSB0byBwcmV2ZW50IGEgcG90ZW50aWFsIHNsb3dkb3duIGluIHN0YXJ0 dXAuIEEKPj4gPiBwb3RlbnRpYWwgdGltZW91dAo+PiA+ICsvLyBpcyBoYW5kbGVkIGJ5IHRoZSBI VFRQIHByb3RvY29sLgo+PiA+ICtzdGF0aWMgaW50IHBvcHVsYXRlX2lwZnNfZ2F0ZXdheShVUkxD b250ZXh0ICpoLCBjaGFyICpnYXRld2F5KQo+PiA+ICt7Cj4+ID4gKyAgICBjaGFyIGlwZnNfZnVs bF9kYXRhX2ZvbGRlcltQQVRIX01BWF07Cj4+ID4gKyAgICBjaGFyIGlwZnNfZ2F0ZXdheV9maWxl W1BBVEhfTUFYXTsKPj4gPiArICAgIHN0cnVjdCBzdGF0IHN0Owo+PiA+ICsgICAgaW50IHN0YXRf cmV0ID0gMDsKPj4gPiArICAgIGludCByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ID4gKyAgICBG SUxFICpnYXRld2F5X2ZpbGUgPSBOVUxMOwo+PiA+ICsgICAgY2hhciBnYXRld2F5X2ZpbGVfZGF0 YVtQQVRIX01BWF07Cj4+ID4gKwo+PiA+ICsgICAgLy8gV2UgY291bGQgYWxyZWFkeSBoYXZlIGEg Z2F0ZXdheSAoaXQgd291bGQgaGF2ZSBiZWVuIHBhc3NlZCBhcwo+PiA+IC1nYXRld2F5KS4KPj4g PiArICAgIGlmICgqZ2F0ZXdheSAhPSAnXDAnKSB7Cj4+ID4gKyAgICAgICAgcmV0ID0gMTsKPj4g PiArICAgICAgICBnb3RvIGVycjsKPj4gPiArICAgIH0KPj4KPj4gV2h5IGV2ZW4gY2FsbCB0aGlz IGZ1bmN0aW9uIGlmIHRoaXMgaXMgdGhlIGNhc2U/Cj4+Cj4+ID4gKwo+PiA+ICsgICAgLy8gVGVz dCAkSVBGU19HQVRFV0FZLgo+PiA+ICsgICAgaWYgKGdldGVudigiSVBGU19HQVRFV0FZIikgIT0g TlVMTCkgewo+PiA+ICsgICAgICAgIHNucHJpbnRmKGdhdGV3YXksIFBBVEhfTUFYLCAiJXMiLCBn ZXRlbnYoIklQRlNfR0FURVdBWSIpKTsKPj4KPj4gUGFzc2luZyBidWZmZXIgbGVuZ3RoIHJhdGhl ciB0aGFuIGFzc3VtaW5nIFBBVEhfTUFYIHdvdWxkIGJlIGJldHRlci4KPj4gVGhhdCB3YXkgaXQg Y2FuIGJlIGNoYW5nZWQgd2l0aG91dCB0aGlzIGJyZWFraW5nLgo+Pgo+PiBPciBzdGljayB0aGUg YnVmZmVyIGluIElQRlNHYXRld2F5Q29udGV4dCBhbmQgdXNlIHNpemVvZigpCj4+Cj4KPiBBd2Vz b21lISBEaWRuJ3QgZXZlbiBjb25zaWRlciB0aGUgb3B0aW9uIHlldC4gV2lsbCBkby4KPgo+Pgo+ PiA+ICsgICAgICAgIHJldCA9IDE7Cj4+ID4gKyAgICAgICAgZ290byBlcnI7Cj4+ID4gKyAgICB9 IGVsc2UKPj4gPiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0RFQlVHLCAiJElQRlNfR0FURVdB WSBpcyBlbXB0eS5cbiIpOwo+PiA+ICsKPj4gPiArICAgIC8vIFdlIG5lZWQgdG8ga25vdyB0aGUg SVBGUyBmb2xkZXIgdG8gLSBldmVudHVhbGx5IC0gcmVhZCB0aGUKPj4gPiBjb250ZW50cyBvZgo+ PiA+ICsgICAgLy8gdGhlICJnYXRld2F5IiBmaWxlIHdoaWNoIHdvdWxkIHRlbGwgdXMgdGhlIGdh dGV3YXkgdG8gdXNlLgo+PiA+ICsgICAgaWYgKGdldGVudigiSVBGU19QQVRIIikgPT0gTlVMTCkg ewo+PiA+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfREVCVUcsICIkSVBGU19QQVRIIGlzIGVt cHR5LlxuIik7Cj4+ID4gKwo+PiA+ICsgICAgICAgIC8vIFRyeSB2aWEgdGhlIGhvbWUgZm9sZGVy Lgo+PiA+ICsgICAgICAgIGlmIChnZXRlbnYoIkhPTUUiKSA9PSBOVUxMKSB7Cj4+ID4gKyAgICAg ICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICIkSE9NRSBhcHBlYXJzIHRvIGJlIGVtcHR5 LlxuIik7Cj4+ID4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gPiArICAg ICAgICAgICAgZ290byBlcnI7Cj4+ID4gKyAgICAgICAgfQo+PiA+ICsKPj4gPiArICAgICAgICAv LyBWZXJpZnkgdGhlIGNvbXBvc2VkIHBhdGggZml0cy4KPj4gPiArICAgICAgICBpZiAoc25wcmlu dGYoaXBmc19mdWxsX2RhdGFfZm9sZGVyLCBQQVRIX01BWCwgIiVzLy5pcGZzLyIsCj4+Cj4+IHNp emVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpCj4+IFRoaXMgZ29lcyBmb3IgbW9zdCBQQVRIX01B WCBpbiBoZXJlCj4+Cj4KPiBZZWFoLCBpIGtpbmRhIHRob3VnaHQgdXNpbmcgUEFUSF9NQVggZXZl cnl3aGVyZSB3b3VsZCBiZSBjb25zaXN0ZW50Lgo+IEZsaXBwaW5nIGFsbCBvZiB0aG9zZSB0byBz aXplb2YoLi4uKQo+Cj4+Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdldGVudigiSE9NRSIp KSA+IFBBVEhfTUFYKSB7Cj4+ID4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1Is ICJUaGUgSVBGUyBkYXRhIHBhdGggZXhjZWVkcyB0aGUKPj4gPiBtYXggcGF0aCBsZW5ndGggKCVp KVxuIiwgUEFUSF9NQVgpOwo+PiA+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7 Cj4+ID4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+PiA+ICsgICAgICAgIH0KPj4gPiArCj4+ID4g KyAgICAgICAgLy8gU3RhdCB0aGUgZm9sZGVyLgo+PiA+ICsgICAgICAgIC8vIEl0IHNob3VsZCBl eGlzdCBpbiBhIGRlZmF1bHQgSVBGUyBzZXR1cCB3aGVuIHJ1biBhcyBsb2NhbAo+PiA+IHVzZXIu Cj4+ID4gKyNpZm5kZWYgX1dJTjMyCj4+ID4gKyAgICAgICAgc3RhdF9yZXQgPSBzdGF0KGlwZnNf ZnVsbF9kYXRhX2ZvbGRlciwgJnN0KTsKPj4gPiArI2Vsc2UKPj4gPiArICAgICAgICBzdGF0X3Jl dCA9IHdpbjMyX3N0YXQoaXBmc19mdWxsX2RhdGFfZm9sZGVyLCAmc3QpOwo+PiA+ICsjZW5kaWYK Pj4gPiArICAgICAgICBpZiAoc3RhdF9yZXQgPCAwKSB7Cj4+ID4gKyAgICAgICAgICAgIGF2X2xv ZyhoLCBBVl9MT0dfSU5GTywgIlVuYWJsZSB0byBmaW5kIElQRlMgZm9sZGVyLiBXZQo+PiA+IHRy aWVkOlxuIik7Cj4+ID4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIi0gJElQ RlNfUEFUSCwgd2hpY2ggd2FzCj4+ID4gZW1wdHkuXG4iKTsKPj4gPiArICAgICAgICAgICAgYXZf bG9nKGgsIEFWX0xPR19JTkZPLCAiLSAkSE9NRS8uaXBmcyAoZnVsbCB1cmk6ICVzKQo+PiA+IHdo aWNoIGRvZXNuJ3QgZXhpc3QuXG4iLCBpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpOwo+PiA+ICsgICAg ICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7Cj4+ID4gKyAgICAgICAgICAgIGdvdG8gZXJy Owo+PiA+ICsgICAgICAgIH0KPj4KPj4gUmlnaHQuIFRoaXMgbWFrZXMgbW9yZSBzZW5zZQo+Pgo+ PiA+ICsgICAgfSBlbHNlCj4+ID4gKyAgICAgICAgc25wcmludGYoaXBmc19mdWxsX2RhdGFfZm9s ZGVyLCBQQVRIX01BWCwgIiVzIiwKPj4gPiBnZXRlbnYoIklQRlNfUEFUSCIpKTsKPj4gPiArCj4+ ID4gKyAgICAvLyBDb3B5IHRoZSBmdWxseSBjb21wb3NlZCBnYXRld2F5IHBhdGggaW50byBpcGZz X2dhdGV3YXlfZmlsZS4KPj4gPiArICAgIGlmIChzbnByaW50ZihpcGZzX2dhdGV3YXlfZmlsZSwg UEFUSF9NQVgsICIlc2dhdGV3YXkiLAo+PiA+ICsgICAgICAgICAgICAgICAgIGlwZnNfZnVsbF9k YXRhX2ZvbGRlcikgPiBQQVRIX01BWCkgewo+PiA+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0df RVJST1IsICJUaGUgSVBGUyBnYXRld2F5IGZpbGUgcGF0aCBleGNlZWRzCj4+ID4gdGhlIG1heCBw YXRoIGxlbmd0aCAoJWkpXG4iLCBQQVRIX01BWCk7Cj4+ID4gKyAgICAgICAgcmV0ID0gQVZFUlJP UihFTk9FTlQpOwo+PiA+ICsgICAgICAgIGdvdG8gZXJyOwo+PiA+ICsgICAgfQo+PiA+ICsKPj4g PiArICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIGdhdGV3YXkgZmlsZS4KPj4gPiArICAg IGdhdGV3YXlfZmlsZSA9IGF2X2ZvcGVuX3V0ZjgoaXBmc19nYXRld2F5X2ZpbGUsICJyIik7Cj4+ ID4gKyAgICBpZiAoIWdhdGV3YXlfZmlsZSkgewo+PiA+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9M T0dfRVJST1IsICJUaGUgSVBGUyBnYXRld2F5IGZpbGUgKGZ1bGwgdXJpOgo+PiA+ICVzKSBkb2Vz bid0IGV4aXN0LiBJcyB0aGUgZ2F0ZXdheSBlbmFibGVkP1xuIiwgaXBmc19nYXRld2F5X2ZpbGUp Owo+PiA+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PRU5UKTsKPj4gPiArICAgICAgICBnb3Rv IGVycjsKPj4gPiArICAgIH0KPj4gPiArCj4+ID4gKyAgICAvLyBSZWFkIGEgc2luZ2xlIGxpbmUg KGZnZXRzIHN0b3BzIGF0IG5ldyBsaW5lIG1hcmspLgo+PiA+ICsgICAgZmdldHMoZ2F0ZXdheV9m aWxlX2RhdGEsIFBBVEhfTUFYIC0gMSwgZ2F0ZXdheV9maWxlKTsKPj4gPiArCj4+ID4gKyAgICAv LyBSZXBsYWNlIHRoZSBsYXN0IGNoYXIgd2l0aCBcMAo+PiA+ICsgICAgZ2F0ZXdheV9maWxlX2Rh dGFbUEFUSF9NQVggLSAxXSA9IDA7Cj4+ID4gKwo+PiA+ICsgICAgLy8gUmVwbGFjZSBmaXJzdCBv Y2N1cmVuY2Ugb2YgZW5kIG9mIGxpbmUgd2l0aCBcMAo+PiA+ICsgICAgZ2F0ZXdheV9maWxlX2Rh dGFbc3RyY3NwbihnYXRld2F5X2ZpbGVfZGF0YSwgIlxyXG4iKV0gPSAwOwo+Pgo+PiBXb24ndCB0 aGlzIGJlIGp1c3QgXG4gb24gVW5peC1saWtlIHN5c3RlbXM/IENvdWxkIGJlIHR3byBsaW5lcywg b25lCj4+IHdpdGggc3RyY3NwbiguLiwgIlxuIikgYW5kIHRoZSBvdGhlciB3aXRoICJcciIuCj4+ Cj4KPiBUaGUgY3VycmVudCBsb2dpYyB3b3JrcyB3aXRoIGxpbnV4Lgo+IFNwbGl0dGluZyBpdCB1 cCByZWdhcmRsZXNzLCBpdCBjYW4ndCBodXJ0IGFuZCBtaWdodCBjYXRjaCBzb21lIG5hc3R5IGVk Z2UKPiBjYXNlcy4KPgo+Pgo+PiA+ICsKPj4gPiArICAgIC8vIElmIHN0cmxlbiBmaW5kcyBhbnl0 aGluZyBsb25nZXIgdGhlbiAwIGNoYXJhY3RlcnMgdGhlbiB3ZQo+PiA+IGhhdmUgYQo+PiA+ICsg ICAgLy8gcG90ZW50aWFsIGdhdGV3YXkgdXJsLgo+PiA+ICsgICAgaWYgKHN0cmxlbihnYXRld2F5 X2ZpbGVfZGF0YSkgPCAxKSB7Cj4+ID4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwg IlRoZSBJUEZTIGdhdGV3YXkgZmlsZSAoZnVsbCB1cmk6Cj4+ID4gJXMpIGFwcGVhcnMgdG8gYmUg ZW1wdHkuIElzIHRoZSBnYXRld2F5IHN0YXJ0ZWQ/XG4iLAo+PiA+IGlwZnNfZ2F0ZXdheV9maWxl KTsKPj4gPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4+ID4gKyAgICAgICAgZ290 byBlcnI7Cj4+ID4gKyAgICB9Cj4+ID4gKwo+PiA+ICsgICAgLy8gQXQgdGhpcyBwb2ludCBnYXRl d2F5X2ZpbGVfZGF0YSBjb250YWlucyBhdCBsZWFzdCBzb21ldGhpbmcuCj4+ID4gKyAgICAvLyBD b3B5IGl0IGludG8gZ2F0ZXdheS4KPj4gPiArICAgIGlmIChzbnByaW50ZihnYXRld2F5LCBQQVRI X01BWCwgIiVzIiwgZ2F0ZXdheV9maWxlX2RhdGEpID4gMCkgewo+PiA+ICsgICAgICAgIHJldCA9 IDE7Cj4+ID4gKyAgICAgICAgZ290byBlcnI7Cj4+ID4gKyAgICB9IGVsc2UKPj4gPiArICAgICAg ICBhdl9sb2coaCwgQVZfTE9HX0RFQlVHLCAiVW5rbm93biBlcnJvciBpbiB0aGUgSVBGUyBnYXRl d2F5Cj4+ID4gZmlsZS5cbiIpOwo+PiA+ICsKPj4gPiArZXJyOgo+PiA+ICsgICAgaWYgKGdhdGV3 YXlfZmlsZSkKPj4gPiArICAgICAgICBmY2xvc2UoZ2F0ZXdheV9maWxlKTsKPj4gPiArCj4+ID4g KyAgICByZXR1cm4gcmV0Owo+PiA+ICt9Cj4+ID4gKwo+PiA+ICsvLyBGb3Igbm93IGp1c3QgbWFr ZXMgc3VyZSB0aGF0IHRoZSBnYXRld2F5IGVuZHMgaW4gdXJsIHdlIGV4cGVjdC4KPj4gPiArLy8g TGlrZSBodHRwOi8vbG9jYWxob3N0OjgwODAvLgo+PiA+ICsvLyBFeHBsaWNpdGx5IHdpdGggdGhl IHRyYWxpbmcgc2xhc2guCj4+ID4gK3N0YXRpYyBpbnQgc2FuaXRpemVfaXBmc19nYXRld2F5KFVS TENvbnRleHQgKmgsIGNoYXIgKmdhdGV3YXkpCj4+ID4gK3sKPj4gPiArICAgIGNvbnN0IGNoYXIg KnVybF93aXRob3V0X3Byb3RvY29sOwo+PiA+ICsgICAgaW50IHJldCA9IDE7Cj4+ID4gKwo+PiA+ ICsgICAgLy8gVGVzdCBpZiB0aGUgZ2F0ZXdheSBzdGFydHMgd2l0aCBlaXRoZXIgaHR0cDovLyBv ciBodHRwczovLwo+PiA+ICsgICAgLy8gVGhlIHJlbWFpbmRlciBpcyBzdG9yZWQgaW4gdXJsX3dp dGhvdXRfcHJvdG9jb2wKPj4gPiArICAgIGlmIChhdl9zdHJpc3RhcnQoZ2F0ZXdheSwgImh0dHA6 Ly8iLCAmdXJsX3dpdGhvdXRfcHJvdG9jb2wpID09IDAKPj4gPiArICAgICAgICAmJiBhdl9zdHJp c3RhcnQoZ2F0ZXdheSwgImh0dHBzOi8vIiwgJnVybF93aXRob3V0X3Byb3RvY29sKQo+PiA+ID09 IDApIHsKPj4gPiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiVGhlIGdhdGV3YXkg VVJMIGRpZG4ndCBzdGFydCB3aXRoCj4+ID4gaHR0cDovLyBvciBodHRwczovLyBhbmQgaXMgdGhl cmVmb3JlIGludmFsaWQuXG4iKTsKPj4gPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7 Cj4+ID4gKyAgICAgICAgZ290byBlcnI7Cj4+ID4gKyAgICB9Cj4+ID4gKwo+PiA+ICsgICAgLy8g V2Ugbm93IGtub3cgdGhlIHJlbWFpbmRlciBvZiB0aGUgdXJsIHdpdGhvdXQgdGhlIHByb3RvY29s Lgo+PiA+IENoZWNrIGl0IGZvcgo+PiA+ICsgICAgLy8gc29tZSBsZW5ndGguIEF0IGxlYXN0IDEg Y2hhcmFjdGVyLgo+PiA+ICsgICAgaWYgKHN0cmxlbih1cmxfd2l0aG91dF9wcm90b2NvbCkgPCAx KSB7Cj4+ID4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlRoZSBnYXRld2F5IHVy bCAod2l0aG91dCB0aGUKPj4gPiBwcm90b2NvbCBwYXJ0KSBpcyB0b28gc2hvcnQgdG8gYmUgYSB2 YWxpZCBVUkwuXG4iKTsKPj4gPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4+ID4g KyAgICAgICAgZ290byBlcnI7Cj4+ID4gKyAgICB9Cj4+Cj4+IEkgdGhpbmsgd2UgY2FuIGp1c3Qg cmVseSBvbiB0aGUgaHR0cCBwcm90b2NvbCBzdHVmZiB0byBkZWFsIHdpdGggdGhpcwo+Pgo+Cj4g RG8geW91IG1pbmQgaWYgSSBrZWVwIGl0IGluPyBJdCBkb2Vzbid0IHNlZW0gdG8gaHVydCBhbmQg YWdhaW4gZG9lcyBoZWxwCj4gaW4gZGVidWdnaW5nIHNjZW5hcmlvcy4KPgo+Cj4+Cj4+ID4gKwo+ PiA+ICsKPj4gPiArICAgIGlmIChnYXRld2F5W3N0cmxlbihnYXRld2F5KSAtIDFdICE9ICcvJykg ewo+PiA+ICsgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIHJvb20gdG8gYWRkIGEg Jy8nCj4+ID4gKyAgICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoYXQgaXQncyBiaWdnZXIgdGhl biAwIGJlY2F1c2UgdGhhdCdzCj4+ID4gaGFuZGxlZAo+PiA+ICsgICAgICAgIC8vIGluIHBvcHVs YXRlX2lwZnNfZ2F0ZXdheQo+PiA+ICsKPj4gPiArICAgICAgICBpZiAoc3RybGVuKGdhdGV3YXkp IDwgKFBBVEhfTUFYIC0gMikpIHsKPj4gPiArICAgICAgICAgICAgLy8gV2UgaGF2ZSByb29tLiBH ZXQgdGhlIGxlbmd0aCBhbmQgYWRkIGEgJy8nIGFuZCBhICdcMCcKPj4gPiArICAgICAgICAgICAg aW50IGdhdGV3YXlfbGVuZ3RoID0gc3RybGVuKGdhdGV3YXkpOwo+PiA+ICsgICAgICAgICAgICBn YXRld2F5W2dhdGV3YXlfbGVuZ3RoXSA9ICcvJzsKPj4gPiArICAgICAgICAgICAgZ2F0ZXdheVtn YXRld2F5X2xlbmd0aCArIDFdID0gJ1wwJzsKPj4gPiArICAgICAgICB9IGVsc2UKPj4gPiArICAg ICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlRoZSBnYXRld2F5IHVybCBpcyBsb25n ZXIgdGhlbgo+PiA+IHRoZSBhbGxvd2VkIG1heCBwYXRoIGxlbmd0aCAoJWkpLlxuIiwgUEFUSF9N QVgpOwo+PiA+ICsKPj4gPiArICAgICAgICByZXQgPSAxOwo+PiA+ICsgICAgICAgIGdvdG8gZXJy Owo+PiA+ICsgICAgfQo+Pgo+PiBSb2xsaW5nIHRoaXMgaW50byB0aGUgc25wcmludGYoKSB3b3Vs ZCBiZSBwcmV0dGllcgo+Pgo+Cj4gVWdoIDpQCj4gV2VsbCwgSSBkaWQgdGhhdCBiZWZvcmUgSSBj aGFuZ2VkIGl0IHRvIHRoaXMuIEl0IHdvcmtlZCBidXQgaXQgdGhyZXcgYQo+IGNvbXBpbGUgd2Fy bmluZyBhYm91dCB0aGUgcmVzdWx0aW5nIHNpemUgdHJ1bmNhdGluZyB0aGUgZ2F0ZXdheSB2YXJp YWJsZS4KPiBUaGlzIHNlZW1lZCBzaW1wbGVyIHRoYW4gY2hlY2tpbmcgZm9yIGl0LiBCdXQgdGhl biBhZ2FpbiwgSSBhbSBub3cKPiBjaGVja2luZyBmb3IgdGhhdCBsZW5ndGggaW4gb3RoZXIgcGxh Y2VzIHRvbyBzbyBJIG1pZ2h0IGFzIHdlbGwgZG8gdGhhdAo+IGhlcmUgdG9vLgo+Cj4KPj4KPj4g PiArCj4+ID4gK2VycjoKPj4gPiArICAgIHJldHVybiByZXQ7Cj4+ID4gK30KPj4gPiArCj4+ID4g K3N0YXRpYyBpbnQgdHJhbnNsYXRlX2lwZnNfdG9faHR0cChVUkxDb250ZXh0ICpoLCBjb25zdCBj aGFyICp1cmksCj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxh Z3MsIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpCj4+ID4gK3sKPj4gPiArICAgIGNvbnN0IGNoYXIg KmlwZnNfY2lkOwo+PiA+ICsgICAgY2hhciAqZnVsbHVyaSA9IE5VTEw7Cj4+ID4gKyAgICBjaGFy IGlwZnNfZ2F0ZXdheVtQQVRIX01BWF07Cj4+ID4gKyAgICBpbnQgcmV0Owo+PiA+ICsgICAgSVBG U0dhdGV3YXlDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+PiA+ICsKPj4gPiArICAgIC8vIFRl c3QgZm9yIGlwZnM6Ly8sIGlwZnM6LCBpcG5zOi8vIGFuZCBpcG5zOi4gVGhpcyBwcmVmaXggaXMK Pj4gPiBzdHJpcHBlZCBmcm9tCj4+ID4gKyAgICAvLyB0aGUgc3RyaW5nIGxlYXZpbmcganVzdCB0 aGUgQ0lEIGluIGlwZnNfY2lkLgo+PiA+ICsgICAgaW50IGlzX2lwZnMgPSBhdl9zdHJpc3RhcnQo dXJpLCAiaXBmczovLyIsICZpcGZzX2NpZCk7Cj4+ID4gKyAgICBpbnQgaXNfaXBucyA9IGF2X3N0 cmlzdGFydCh1cmksICJpcG5zOi8vIiwgJmlwZnNfY2lkKTsKPj4gPiArCj4+ID4gKyAgICAvLyBX ZSBtdXN0IGhhdmUgZWl0aGVyIGlwbnMgb3IgaXBmcy4KPj4gPiArICAgIGlmICghaXNfaXBmcyAm JiAhaXNfaXBucykgewo+PiA+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gPiAr ICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgdXJsICVzXG4iLCB1 cmkpOwo+PiA+ICsgICAgICAgIGdvdG8gZXJyOwo+PiA+ICsgICAgfQo+Pgo+PiBTaG91bGRuJ3Qg dGhpcyBjaGVjayB0aGF0IHRoZSBVUkwgaXMgcHJlY2lzZWx5IHdoYXQgdGhlIHByb3RvY29sCj4+ IGV4cGVjdHM/IGlwZnMgZm9yIGZmX2lwZnNfcHJvdG9jb2wgYW5kIGlwbnMgZm9yIGZmX2lwbnNf cHJvdG9jb2wuIE1heWJlCj4+IHRoYXQncyB2YWxpZGF0ZWQgZnVydGhlciB1cCBob3dldmVyLi4K Pj4KPgo+IFdlbGwsIHRoZSBwcm90b2NvbCBoYXMgMiBwb3RlbnRpYWwgd2F5czoKPiA8Z2F0ZXdh eT4vPHByb3RvY29sPi88aXBmcyBjaWQ+IChleGlzdGVkIHNpbmNlIHRoZSBzdGFydCBvZiBJUEZT KQo+IGFuZAo+IDxpcGZzIGNpZD4uPHByb3RvY29sPi48Z2F0ZXdheT4gKGNhbGxlZCBzdWJkb21h aW4gZ2F0ZXdheSkKPgo+IEFuIGV4YW1wbGUgb2YgYm90aDoKPgo+IGh0dHA6Ly9sb2NhbGhvc3Q6 ODA4MC9pcGZzL2JhZnliZWlnYWdkNW5tbm4yaXlzMmYzZG9ybzd5ZHJldnlyMm16YXJ3aWRnYWRh d21hbWl0ZXlkYnppCj4KPiBodHRwOi8vYmFmeWJlaWdhZ2Q1bm1ubjJpeXMyZjNkb3JvN3lkcmV2 eXIybXphcndpZGdhZGF3bWFtaXRleWRiemkuaXBmcy5sb2NhbGhvc3Q6ODA4MAo+Cj4gQm90aCBh cmUgdmFsaWQgYnV0IHRoZSBmb3JtZXIgaXMgZWFzaWVyLgo+IFRoZSBsYXR0ZXIgcmVhbGx5IG1v c3RseSBleGlzdHMgZm9yIHdlYnNpdGUvYnJvd3NlciBwdXJwb3NlcyBbMV0uCj4gVGhlcmVmb3Jl IEkgbGlrZSB0byB1c2UgdGhlIGZvcm1lciBiZWNhdXNlIGl0J3MgbXVjaCBlYXNpZXIuIEl0IG9u bHkKPiByZXF1aXJlcyBhIGdldGV3YXkgcHJvdmlkZWQgYnkgdGhlIHVzZXIuCj4gQW5kIGFmdGVy IHRoYXQgaXQncyBvbmx5IGEgbWF0dGVyIG9mIGFwcGVuZGluZyBzdHJpbmdzLiBUaGUgYWx0ZXJu YXRpdmUKPiBvcHRpb24gaXMgbW9yZSB0cmlja3kgdG8gZ2V0IHJpZ2h0Lgo+IFJlZ2FyZGxlc3Ms IHRoZSB3YXkgSSBjb25jYXRlbmF0ZSB0aGUgc3RyaW5ncyBub3cgaXMgaG93IEkgY29uc3RydWN0 IGEKPiB2YWxpZCB1cmwuCj4KPiBJZiB0aGF0IFVSTCBpc24ndCB2YWxpZCB0aGVuIHRoZXJlJ3Mg bGlrZWx5IGEgZ2F0ZXdheSBwZXJtaXNzaW9uIGlzc3VlLgo+IEJ1dCB0aGF0J3Mgb3V0c2lkZSB0 aGUgc2NvcGUgb2YgdGhpcyBwcm90b2NvbCBhbmQgbGlrZWx5IHNvbWV0aGluZyB0aGUKPiBodHRw KHMpIHByb3RvY29sIGluZm9ybXMgeW91IGFib3V0IGFueWhvdy4KPgo+IEFueWhvdywgdGhhbmsg eW91IGFnYWluIGZvciB0aGUgcmV2aWV3IQo+IEknbGwgc2VuZCBhIFY2IGxhdGVyIHRoaXMgZXZl bmluZy4KPiBBcmUgd2UgY2xvc2UgdG8gbWVyZ2luZyBpdD8gOykKPgo+IFsxXQo+IGh0dHBzOi8v Y29kZWNsaW1iaW5nLmNvbS93aHktaS1hbS1leGNpdGVkLWFib3V0LXN1YmRvbWFpbi1pcGZzLWdh dGV3YXlzLwo+Cj4KU29ycnkgZm9yIGFza2luZyBhIHBlcmhhcHMgc3R1cGlkIHF1ZXN0aW9uIGJ1 dCB3aGF0IGlzIHRoZSBub3JtYWwgc2FuZSB3YXkKaW4gYyB0byBhcHBlbmQgdG8gYSBzdGFjayBh cnJheT8KSSBub3cgaGF2ZSB0aGlzOgogICAgaWYgKGMtPmdhdGV3YXlfYnVmZmVyW3N0cmxlbihj LT5nYXRld2F5X2J1ZmZlcikgLSAxXSAhPSAnLycgJiYKICAgICAgICBzdHJsZW4oYy0+Z2F0ZXdh eV9idWZmZXIpIDwgKHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikgLSAxKSkgewogICAgICAgIC8v IEFkZCBhICIvIi4gc3RybmNhdCBhbHNvIHRha2VzIGNhcmUgb2YgYWRkaW5nIGEgbnVsbCB0ZXJt aW5hdGluZwpjaGFyYWN0ZXIuCiAgICAgICAgc3RybmNhdChjLT5nYXRld2F5X2J1ZmZlciwgIi8i LAogICAgICAgICAgICAgICAgc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSAtIHN0cmxlbihjLT5n YXRld2F5X2J1ZmZlcikgLSAxKTsKICAgICAgICByZXQgPSAxOwogICAgICAgIGdvdG8gZXJyOwog ICAgfQoKVXNpbmcgc3RybmNhdC4gVGhhdCB3b3JrcyB3aXRob3V0IGVycm9ycyBvciB3YXJuaW5n cy4KQnV0IHVzaW5nIHNucHJpbnRmIHRvIGFwcGVuZCBrZWVwcyBnaXZpbmcgbWUgdGhlc2Ugd2Fy bmluZ3MgdGhhdCBpIGRvbid0CmdldDoKbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYzoxODk6OTog d2FybmluZzog4oCYc25wcmludGbigJkgYXJndW1lbnQgNCBvdmVybGFwcwpkZXN0aW5hdGlvbiBv YmplY3Qg4oCYY+KAmSBbLVdyZXN0cmljdF0KICAxODkgfCAgICAgaWYgKHNucHJpbnRmKGMtPmdh dGV3YXlfYnVmZmVyLCBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpIC0gNTAsCiIlcy8iLAogICAg ICB8Cl5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fgogIDE5MCB8ICAgICAgICAgICAgICAgICAgYy0+Z2F0ZXdheV9idWZmZXIp ID4gMCkgewogICAgICB8ICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+CmxpYmF2 Zm9ybWF0L2lwZnNnYXRld2F5LmM6MTY4OjI1OiBub3RlOiBkZXN0aW5hdGlvbiBvYmplY3QgcmVm ZXJlbmNlZCBieQrigJhyZXN0cmljdOKAmS1xdWFsaWZpZWQgYXJndW1lbnQgMSB3YXMgZGVjbGFy ZWQgaGVyZQogIDE2OCB8ICAgICBJUEZTR2F0ZXdheUNvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7 CiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgXgoKSXQgbm90IGFuIGlzc3VlIGlmIHRo ZSB1c2Ugb2Ygc3RybmNhdCBpcyBmaW5lIGluIHRoZSBhYm92ZSBleGFtcGxlIDopCgoKPgo+PiAv VG9tYXMKPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+PiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9y Zwo+PiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKPj4K Pj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4+IGZmbXBlZy1k ZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCj4+Cj4K X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRl dmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5v cmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBs aW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGgg c3ViamVjdCAidW5zdWJzY3JpYmUiLgo=