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 270A048050 for ; Sun, 10 Dec 2023 03:17:18 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2476068D0C3; Sun, 10 Dec 2023 05:17:16 +0200 (EET) Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE1C968D0BB for ; Sun, 10 Dec 2023 05:17:08 +0200 (EET) Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-286f3e0d010so983040a91.0 for ; Sat, 09 Dec 2023 19:17:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702178227; x=1702783027; h=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=Dcm9QPNqq2ri0IZhtAMRcQtSv8YcaIkMBqxRrGSrdhE=; b=HgW0GnBW+VGHX/ilgS49s8FezsMG0jw4ZLiyl5m9cgjHttsdzJ2tXSJRtncYyQ1prP ttZhcf/0SzOFaBVXYp6MfCN1h0UkS6SKVWyH0vSPjgb9o6ZVauTokZqH+MN3YUOPVd9D g4pZhOll6KOiYVdcz5YSb1LbKmvnUxJwAzZ+9Tshjm4ycQKHqH4jYxScSq4wUJ4yrQa2 JQd06Vk+NRPtLHG81enqb1tMLqbv2SGHnk8ViASX0eQJxTQJ5oZ/qwe8ABGXXedsOLq8 5VkAVvKDCLm3aJa7tIiFtURYdejbhwQX4joBYPXhg2ZRs6TY97oigjxKNabHLvGK4kbO zjjA== X-Gm-Message-State: AOJu0YwDN/jv+MW03gvCZTB9pumCAM5CaDVo2nt8rLmLyyIu7cch/LbS lHnK3IsptKoIsSBVVNIxOH3V+oYMyGdctRl4ujS1m9bYtjipZeuULoQ= X-Google-Smtp-Source: AGHT+IFeWse+s7Dg0ccCizm/PMGTUL1aiTonavJIgjJmfQIYkUjc7a5X1JLJF4aLTrxII8FVyazynQtcr5rECZLJ2jY= X-Received: by 2002:a17:902:e9cc:b0:1d0:76c2:e34b with SMTP id 12-20020a170902e9cc00b001d076c2e34bmr4872427plk.2.1702178226118; Sat, 09 Dec 2023 19:17:06 -0800 (PST) MIME-Version: 1.0 References: <20231209100639.607234-1-marth64@proxyid.net> <04e7ac5c-926e-4b44-9473-dbc04d2b7c03@gmail.com> In-Reply-To: <04e7ac5c-926e-4b44-9473-dbc04d2b7c03@gmail.com> From: Marth64 Date: Sat, 9 Dec 2023 21:16:55 -0600 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] [WIP] [RFC] dvdvideo: initial contribution (DVD demuxer) 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: SGkgTGVvLAoKVGhhbmsgeW91IGZvciB0aGUgZmVlZGJhY2sgYW5kIHJldmlldy4gSSB3aWxsIHdv cmsgdGhyb3VnaCB0aGUgY29kZSBzdHlsZQppc3N1ZXMuIFBsZWFzZSBkbyBsZXQgbWUga25vdyB3 aGF0IGVsc2UgeW91IGZpbmQgLSBJIHdpbGwgZml4LgoKSGVyZSBpcyBzb21lIHJlc3BvbnNlcyBv biB0aGUgY29uY2VwdHVhbCBpc3N1ZXMsCgo+IG15IGJpZ2dlc3QgcXVlc3Rpb24gaXMgd2h5IHRo aXMgaXMgbm90IGEgcHJvdG9jb2wgdGhhdCBwcm9kdWNlcyBhbgptcGVnLXBzIHN0cmVhbS4KUHJv dG9jb2wgaGFuZGxlciBpbiBpdHMgY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBhbGxvdyByZXZlYWxp bmcgb2YgbGFuZ3VhZ2UKY29kZXMgb3IgY2hhcHRlcnMgQUZBSUsuCkFsc28sIHRoZXJlIGFyZSBz dHJlYW1zIGluIERWRCB0aGF0IG1heSBwb3AgdXAgbGF0ZXIgaW4gdGhlIGxpZmVjeWNsZSBzdWNo CmFzIGZvcmNlZCBzdWJ0aXRsZXMgdXNlZCBpbiB0aGUgbWlkZGxlIG9mIGEgcHJvZ3JhbS4KCj4g V2h5IGRvIHlvdSBuZWVkIGJvdGggb2YgdGhlc2U/IGxpYmR2ZG5hdiBkZXBlbmRzIG9uIGxpYmR2 ZHJlYWQuClRoaXMgaXMgYmVjYXVzZSBJIG5lZWQgYWNjZXNzIHRvIGxpYmR2ZHJlYWQgaGVhZGVy cyBpbiBvcmRlciB0byBwcm9iZSB0aGUKc3RyZWFtIGluZm9ybWF0aW9uIGluIGFkdmFuY2Ugb2Yg dGhlIHBsYXliYWNrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCBhY2Nlc3MKdG8gd2hhdCBhbGwgY291 bGQgYmUgaW4gdGhlIHN0cmVhbSB2cy4gd2hhdCB0aGUgVk0gaW4gbGliZHZkbmF2IHRoaW5rcyBp dAppcyBjdXJyZW50bHkgcGxheWluZyBiYWNrLgoKPiBVbm5lY2Vzc2FyeSAjZGVmaW5lLgpJIHdp bGwgZ2V0IHJpZCBvZiBpdCwgbnAKCj4gVGhpcyBmdW5jdGlvbiBpcyB1bm5lY2Vzc2FyeS4gSWYg eW91IHJlYWxseSBuZWVkIHRvIGludGVyY2VwdCBsb2dnZWQKbWVzc2FnZXMgZnJvbSBsaWJkdmRu YXYgYW5kIGZlZWQgdGhlbSB0byBhdl9sb2csIHlvdSBzaG91bGQganVzdCBoYXZlIGEKbG9va3Vw IHRoYXQgbWFwcyB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIGxldmVsLgo+IFRoaXMgaXMgd3Jv bmcsIGl0J3MgMzAwMDAvMTAwMS4gV2hpY2ggeW91IGtuZXcsIGJlY2F1c2UgeW91ICNkZWZpbmVk IGl0CmFib3ZlLiBXaHkgbm90IHVzZSB0aG9zZT8KU3VyZSwgSSB3aWxsIHNpbXBsaWZ5IHRoaXMu IEkgd2lsbCBmaXggdGhlIGNoYXB0ZXIgdGltaW5nIGZ1bmN0aW9uIGFueXdheXMKYXMgSSBhbSBu b3cgbm90aWNpbmcgaXQgaXMgdmVyeSBzbGlnaHRseSBvZmYuCgo+IENhbiB0aGlzIGZhaWw/ICh4 MikKPiBPdXIgY29udmVudGlvbiBpcyB0byByZXR1cm4gbmVnYXRpdmUgdmFsdWVzIG9uIGVycm9y IGluIEZGbXBlZy4gTm90Cm5vbnplcm8gdmFsdWVzLgpCb3RoIGhhdmUgYSByZXR1cm4gdHlwZSB2 b2lkLiAgSG93ZXZlciB5b3VyIHF1ZXN0aW9uIGNhdXNlZCBtZSB0byBhbHNvCmNoZWNrIGR2ZG5h dl9jbG9zZSgpIHdoaWNoIGNhbiBmYWlsIHdpdGggYSBzdGF0dXMuIFNvIEkgd2lsbCBmaXggdGhh dCwKYWxvbmcgd2l0aCB0aGUgcG90ZW50aWFsIG5vbi16ZXJvIHJlc3BvbnNlIGFuZCBiZWluZyBl eHBsaWNpdCB0byBwcmV2ZW50IGl0LgoKPiBUaGlzIHNlZW1zIGxpa2UgYW4gdW5uZWNlc3Nhcnkg bWVtY3B5LgpJIGNhbiBkbyB3aXRob3V0IGl0LiBJIGFzc3VtZWQgaXQgd2FzIGEgZ29vZCBpZGVh IHRvIGNyZWF0ZSBzb21lIGRpc3RhbmNlCmJldHdlZW4gbXkgZGVtdXhlcidzIHBhY2tldCBhbmQg dGhlIE1QRUcgUFMgcGFja2V0IGJ1dCBJIGd1ZXNzIHRoZXJlIGlzIG5vCnZhbHVlIHRvIHlvdXIg cG9pbnQuCgpPbiBTYXQsIERlYyA5LCAyMDIzIGF0IDk6MDPigK9QTSBMZW8gSXplbiA8bGVvLml6 ZW5AZ21haWwuY29tPiB3cm90ZToKCj4gT24gMTIvOS8yMyAwNTowNiwgTWFydGg2NCB3cm90ZToK PiA+IEhlbGxvLCBJIGFtIGhhcHB5IHRvIHNoYXJlIGEgRFZEIGRlbXV4ZXIgZm9yIGZmbXBlZyBw b3dlcmVkIGJ5Cj4gbGliZHZkcmVhZCBhbmQgbGliZHZkbmF2Lgo+ID4gSSBoYXZlIGJlZW4gd29y a2luZyBvbiB0aGlzIG9uL29mZiB0aHJvdWdob3V0IHRoZSB5ZWFyIGFuZCB0aGluayBpdCBpcwo+ IGluIGEgZ29vZCBzcG90Cj4gPiB0byBzaGFyZSBhdCB0aGUgTUwgbm93LiBUaGlzIHdhcyBhIG1h am9yIGxlYXJuaW5nIGV4cGVyaWVuY2UgZm9yIG1lIGluCj4gbWFueSB3YXlzIGFuZAo+ID4gYW0g b3BlbiB0byBhbnkgZmVlZGJhY2sgb24gaG93IEkgY291bGQgaW1wcm92ZSBpdCB0byBiZSBiZXR0 ZXIuIEluIGZhY3QsCj4gdGhlcmUgaXMgc3RpbGwKPiA+IG9uZSBpc3N1ZSBJIGNhbid0IHNlZW0g dG8gZmlndXJlIG91dCBob3cgdG8gc29sdmUgKGluIGRpc2N1c3Npb24gYmVsb3cpLgo+IFJlZ2Fy ZGxlc3MsCj4gPiBhIGdvb2QgbnVtYmVyIG9mIERWRHMgSSBoYXZlIHRyaWVkIHNlZW0gdG8gd29y ayBvdXQgb2YgdGhlIGJveC4gVGhpcyBpcwo+IGEgZnVsbC1zZXJ2aWNlCj4gPiBkZW11eGVyIHdp dGggY2hhcHRlcnMsIHN1YnRpdGxlcyAoYW5kIHRoZWlyIHBhbGV0dGVzKSwgYXMgd2VsbCBhcwo+ IGxhbmd1YWdlIG1ldGFkYXRhLgo+ID4KPiA+IEF0IGEgaGlnaCBsZXZlbCwgdGhlIGRlbXV4ZXIg dXNlcyBsaWJkdmRyZWFkIGZvciBtZXRhZGF0YSBvZiB0aGUgZGlzYywKPiBsaWJkdmRuYXYgZm9y Cj4gPiB0aGUgYWN0dWFsIHBsYXliYWNrLCBhbmQgdGhlIE1QRUctUFMgZGVtdXhlciBmb3IgdGhl IHVuZGVybHlpbmcgVk9CCj4gc3RyZWFtLgo+ID4KPiA+IEZpcnN0LCB0aGUgYmFzaWMgdXNhZ2Us IGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZDoKPiA+IGZmbXBlZyAtZiBkdmR2aWRlbyAtdGl0bGUg Tk4gLWkgRFZELmlzb3wvZGV2L3NyWHwvcGF0aC90by9EVkQgLi4uCj4gPiBXaGVyZSBOTiBjYW4g YmUgcmVwbGFjZWQgYnkgeW91ciBrbm93biB0aXRsZSBudW1iZXIgaW4gdGhlIGRpc2MKPiA+Cj4g PiBBcyB0aGUgZGVtdXhlciBlZmZlY3RpdmVseSB3b3JrcyBhdCBhIFBHQyBsZXZlbCwgbXVsdGkt UEdDIHRpdGxlcyBhcmUKPiBub3Qgc3VwcG9ydGVkLgo+ID4gQnV0IHRvIHByb3ZpZGUgdGhpcyBm bGV4aWJpbGl0eSBhcyB0aGVyZSBhcmUgbWFueSB3ZWlyZGx5IGF1dGhvcmVkIERWRHMKPiBvdXQg dGhlcmUsCj4gPiBvbmUgY2FuIHNwZWNpZnkgYW4gZXhhY3QgUEdDIHZpYSAtcGdjIG9wdGlvbiBh bmQgYW4gYXNzb2NpYXRlZCBwcm9ncmFtCj4gKFBHLCBjYW4gc3RhcnQgYXQgMSkuCj4gPgo+ID4g SSBhbSBob3BpbmcgYW5kIHdpbGxpbmcgdG8gaW1wcm92ZSB0aGlzIHRvIGJlIGEgcm9idXN0IGRl bXV4ZXIgd2hlcmV2ZXIKPiBwb3NzaWJsZSwgYnV0IHRvCj4gPiB0aGF0IGV4dGVudCB0aGVyZSBp cyBzdGlsbCBhbiBpc3N1ZSBJIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIHNvbHZlOgo+IERlYWxp bmcgd2l0aCBEVFMgZGlzY29udGludWl0aWVzCj4gPiBhbmQgUFRTIGdlbmVyYXRpb24uCj4gPgo+ ID4gUmlnaHQgbm93LCBhcyBhIGJhbmQtYWlkLCBJIGFtIGFkZGluZyBBVkZNVF9GTEFHX0dFTlBU UyAobGluZSAxNDA4KQo+ID4gdG8gdGhlIE1QRUctUFMgc3ViZGVtdXhlci4gVGhpcyB3b3JrcyB3 aXRoIG1vc3QgZGlzY3MgYW5kIHRoZSBvdXRwdXQKPiBzZWVtcyBPSy4gT24gZGlzY3Mgd2l0aCBk aXNjb250aW51aXRpZXMsIGhvd2V2ZXIsCj4gPiB0aGlzIGNhdXNlcyB0aGUgZGVtdXhpbmcgdG8g aGFuZyB3aGljaCBpcyBvYnZpb3VzbHkgdW5hY2NlcHRhYmxlIGFsc28uCj4gUmVtb3ZpbmcgdGhl IGZsYWcgY2F1c2VzIHRoZSBkaXNjcwo+ID4gdG8gbm90IGhhbmcsIGJ1dCB0aGVuIHRoZSBvdXRw dXQgZm9yIGFsbCBkaXNjcyBiZWNvbWVzIGNob3BweSBmb3IKPiBvYnZpb3VzIHJlYXNvbnMgKGlu dmFsaWQgUFRTKS4KPiA+Cj4gPiBJdCBjb3VsZCBiZSBiZWNhdXNlIEkgaGF2ZSBzb21lIG1pc3Vu ZGVyc3RhbmRpbmdzIG9uIGhvdyB0aGluZ3Mgd29yawo+IHdpdGhpbiBmZm1wZWcsCj4gPiBidXQg SSBoYXZlIHRyaWVkIHRvIHRoZSBwb2ludCBub3cgd2hlcmUgSSB0aG91Z2h0IGl0IGJlc3QgdG8g YXNrIHRoZQo+IGV4cGVydHMgZm9yIGhlbHAgaWYgeW91IGNhbiBzcG90Cj4gPiB3aGF0IEkgYW0g ZG9pbmcgd3JvbmcuIEkgYW0gcmVhbGx5IG1vdGl2YXRlZCB0byBtYWtlIHRoaXMgd29yayBhbmQg Z29vZAo+IHF1YWxpdHkuCj4gPgo+ID4gVGhhbmsgeW91IQo+ID4KPiA+IC0tLQo+ID4gICBjb25m aWd1cmUgICAgICAgICAgICAgICAgIHwgICAgOCArCj4gPiAgIGxpYmF2Zm9ybWF0L01ha2VmaWxl ICAgICAgfCAgICAxICsKPiA+ICAgbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jICB8ICAgIDEgKwo+ ID4gICBsaWJhdmZvcm1hdC9hdmxhbmd1YWdlLmMgIHwgICAxMCArLQo+ID4gICBsaWJhdmZvcm1h dC9kdmR2aWRlb2RlYy5jIHwgMTU5OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gPiAgIDUgZmlsZXMgY2hhbmdlZCwgMTYxNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9u cygtKQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYwo+ ID4KPiA+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiA+IGluZGV4IGQ3N2Mw NTMyMjYuLjY1ZTU5NjgxOTQgMTAwNzU1Cj4gPiAtLS0gYS9jb25maWd1cmUKPiA+ICsrKyBiL2Nv bmZpZ3VyZQo+ID4gQEAgLTIyNyw2ICsyMjcsOCBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6 Cj4gPiAgICAgLS1lbmFibGUtbGliZGF2czIgICAgICAgIGVuYWJsZSBBVlMyIGRlY29kaW5nIHZp YSBsaWJkYXZzMiBbbm9dCj4gPiAgICAgLS1lbmFibGUtbGliZGMxMzk0ICAgICAgIGVuYWJsZSBJ SURDLTEzOTQgZ3JhYmJpbmcgdXNpbmcgbGliZGMxMzk0Cj4gPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFuZCBsaWJyYXcxMzk0IFtub10KPiA+ICsgIC0tZW5hYmxlLWxpYmR2ZG5hdiAg ICAgICBlbmFibGUgbGliZHZkbmF2LCBuZWVkZWQgZm9yIERWRCBkZW11eGluZwo+IFtub10KPiA+ ICsgIC0tZW5hYmxlLWxpYmR2ZHJlYWQgICAgICBlbmFibGUgbGliZHZkcmVhZCwgbmVlZGVkIGZv ciBEVkQgZGVtdXhpbmcKPiBbbm9dCj4KPiBXaHkgZG8geW91IG5lZWQgYm90aCBvZiB0aGVzZT8g bGliZHZkbmF2IGRlcGVuZHMgb24gbGliZHZkcmVhZC4KPgo+ID4gICAgIC0tZW5hYmxlLWxpYmZk ay1hYWMgICAgICBlbmFibGUgQUFDIGRlL2VuY29kaW5nIHZpYSBsaWJmZGstYWFjIFtub10KPiA+ ICAgICAtLWVuYWJsZS1saWJmbGl0ZSAgICAgICAgZW5hYmxlIGZsaXRlICh2b2ljZSBzeW50aGVz aXMpIHN1cHBvcnQgdmlhCj4gbGliZmxpdGUgW25vXQo+ID4gICAgIC0tZW5hYmxlLWxpYmZvbnRj b25maWcgICBlbmFibGUgbGliZm9udGNvbmZpZywgdXNlZnVsIGZvciBkcmF3dGV4dAo+IGZpbHRl ciBbbm9dCj4gPiBAQCAtMTgwMiw2ICsxODA0LDggQEAgRVhURVJOQUxfTElCUkFSWV9HUExfTElT VD0iCj4gPiAgICAgICBmcmVpMHIKPiA+ICAgICAgIGxpYmNkaW8KPiA+ICAgICAgIGxpYmRhdnMy Cj4gPiArICAgIGxpYmR2ZG5hdgo+ID4gKyAgICBsaWJkdmRyZWFkCj4gPiAgICAgICBsaWJydWJi ZXJiYW5kCj4gPiAgICAgICBsaWJ2aWRzdGFiCj4gPiAgICAgICBsaWJ4MjY0Cj4gPiBAQCAtMzQ5 NCw2ICszNDk4LDggQEAgZHRzX2RlbXV4ZXJfc2VsZWN0PSJkY2FfcGFyc2VyIgo+ID4gICBkdHNo ZF9kZW11eGVyX3NlbGVjdD0iZGNhX3BhcnNlciIKPiA+ICAgZHZfZGVtdXhlcl9zZWxlY3Q9ImR2 cHJvZmlsZSIKPiA+ICAgZHZfbXV4ZXJfc2VsZWN0PSJkdnByb2ZpbGUiCj4gPiArZHZkdmlkZW9f ZGVtdXhlcl9zZWxlY3Q9Im1wZWdwc19kZW11eGVyIgo+ID4gK2R2ZHZpZGVvX2RlbXV4ZXJfZGVw cz0ibGliZHZkbmF2IGxpYmR2ZHJlYWQiCj4gPiAgIGR4YV9kZW11eGVyX3NlbGVjdD0icmlmZmRl YyIKPiA+ICAgZWFjM19kZW11eGVyX3NlbGVjdD0iYWMzX3BhcnNlciIKPiA+ICAgZXZjX2RlbXV4 ZXJfc2VsZWN0PSJldmNfZnJhbWVfbWVyZ2VfYnNmIGV2Y19wYXJzZXIiCj4gPiBAQCAtNjcyMyw2 ICs2NzI5LDggQEAgZW5hYmxlZCBsaWJkYXYxZCAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25m aWcKPiBsaWJkYXYxZCAiZGF2MWQgPj0gMC41LjAiICJkYXYxZAo+ID4gICBlbmFibGVkIGxpYmRh dnMyICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJkYXZzMiAiZGF2czIgPj0KPiAx LjYuMCIgZGF2czIuaCBkYXZzMl9kZWNvZGVyX29wZW4KPiA+ICAgZW5hYmxlZCBsaWJkYzEzOTQg ICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZGMxMzk0IGxpYmRjMTM5NC0yCj4gZGMx Mzk0L2RjMTM5NC5oIGRjMTM5NF9uZXcKPiA+ICAgZW5hYmxlZCBsaWJkcm0gICAgICAgICAgICAm JiByZXF1aXJlX3BrZ19jb25maWcgbGliZHJtIGxpYmRybQo+IHhmODZkcm0uaCBkcm1HZXRWZXJz aW9uCj4gPiArZW5hYmxlZCBsaWJkdmRuYXYgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcg bGliZHZkbmF2ICJkdmRuYXYgPj0KPiA2LjEuMSIgZHZkbmF2L2R2ZG5hdi5oIGR2ZG5hdl9vcGVu Mgo+ID4gK2VuYWJsZWQgbGliZHZkcmVhZCAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxp YmR2ZHJlYWQgImR2ZHJlYWQgPj0KPiA2LjEuMiIgZHZkcmVhZC9kdmRfcmVhZGVyLmggRFZET3Bl bjIgLWxkdmRyZWFkCj4gPiAgIGVuYWJsZWQgbGliZmRrX2FhYyAgICAgICAgJiYgeyBjaGVja19w a2dfY29uZmlnIGxpYmZka19hYWMgZmRrLWFhYwo+ICJmZGstYWFjL2FhY2VuY19saWIuaCIgYWFj RW5jT3BlbiB8fAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXF1aXJl IGxpYmZka19hYWMKPiBmZGstYWFjL2FhY2VuY19saWIuaCBhYWNFbmNPcGVuIC1sZmRrLWFhYyAm Jgo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuICJ1c2luZyBsaWJm ZGsgd2l0aG91dAo+IHBrZy1jb25maWciOyB9IH0KPiA+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1h dC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gPiBpbmRleCAyZGI4M2FmZjgxLi40 NWRiYTUzMDQ0IDEwMDY0NAo+ID4gLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiA+ICsrKyBi L2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gPiBAQCAtMTkyLDYgKzE5Miw3IEBAIE9CSlMtJChDT05G SUdfRFRTX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gcmF3ZW5jLm8KPiA+ICAgT0JKUy0kKENP TkZJR19EVl9NVVhFUikgICAgICAgICAgICAgICAgICArPSBkdmVuYy5vCj4gPiAgIE9CSlMtJChD T05GSUdfRFZCU1VCX0RFTVVYRVIpICAgICAgICAgICAgKz0gZHZic3ViLm8gcmF3ZGVjLm8KPiA+ ICAgT0JKUy0kKENPTkZJR19EVkJUWFRfREVNVVhFUikgICAgICAgICAgICArPSBkdmJ0eHQubyBy YXdkZWMubwo+ID4gK09CSlMtJChDT05GSUdfRFZEVklERU9fREVNVVhFUikgICAgICAgICAgKz0g ZHZkdmlkZW9kZWMubwo+ID4gICBPQkpTLSQoQ09ORklHX0RYQV9ERU1VWEVSKSAgICAgICAgICAg ICAgICs9IGR4YS5vCj4gPiAgIE9CSlMtJChDT05GSUdfRUFfQ0RBVEFfREVNVVhFUikgICAgICAg ICAgKz0gZWFjZGF0YS5vCj4gPiAgIE9CSlMtJChDT05GSUdfRUFfREVNVVhFUikgICAgICAgICAg ICAgICAgKz0gZWxlY3Ryb25pY2FydHMubwo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2Fs bGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+ID4gaW5kZXggYzhiYjRlMzg2 Ni4uZGMyYWNmNTc1YyAxMDA2NDQKPiA+IC0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+ ID4gKysrIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4gPiBAQCAtMTUwLDYgKzE1MCw3IEBA IGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9kdl9kZW11eGVyOwo+ID4gICBleHRlcm4g Y29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfZHZfbXV4ZXI7Cj4gPiAgIGV4dGVybiBjb25zdCBBVklu cHV0Rm9ybWF0ICBmZl9kdmJzdWJfZGVtdXhlcjsKPiA+ICAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRG b3JtYXQgIGZmX2R2YnR4dF9kZW11eGVyOwo+ID4gK2V4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0 ICBmZl9kdmR2aWRlb19kZW11eGVyOwo+ID4gICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAg ZmZfZHhhX2RlbXV4ZXI7Cj4gPiAgIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9lYV9k ZW11eGVyOwo+ID4gICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZWFfY2RhdGFfZGVt dXhlcjsKPiA+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hdmxhbmd1YWdlLmMgYi9saWJhdmZv cm1hdC9hdmxhbmd1YWdlLmMKPiA+IGluZGV4IDc4MmE1OGFkYjIuLjIwMmQ5YWE4MzUgMTAwNjQ0 Cj4gPiAtLS0gYS9saWJhdmZvcm1hdC9hdmxhbmd1YWdlLmMKPiA+ICsrKyBiL2xpYmF2Zm9ybWF0 L2F2bGFuZ3VhZ2UuYwo+ID4gQEAgLTI5LDcgKzI5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTGFuZ0Vu dHJ5IHsKPiA+ICAgICAgIHVpbnQxNl90IG5leHRfZXF1aXZhbGVudDsKPiA+ICAgfSBMYW5nRW50 cnk7Cj4gPgo+ID4gLXN0YXRpYyBjb25zdCB1aW50MTZfdCBsYW5nX3RhYmxlX2NvdW50c1tdID0g eyA0ODQsIDIwLCAxODQgfTsKPiA+ICtzdGF0aWMgY29uc3QgdWludDE2X3QgbGFuZ190YWJsZV9j b3VudHNbXSA9IHsgNDg0LCAyMCwgMTkwIH07Cj4gPiAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBs YW5nX3RhYmxlX29mZnNldHNbXSA9IHsgMCwgNDg0LCA1MDQgfTsKPiA+Cj4gPiAgIHN0YXRpYyBj b25zdCBMYW5nRW50cnkgbGFuZ190YWJsZVtdID0gewo+ID4gQEAgLTUzOSw3ICs1MzksNyBAQCBz dGF0aWMgY29uc3QgTGFuZ0VudHJ5IGxhbmdfdGFibGVbXSA9IHsKPiA+ICAgICAgIC8qMDUwMSov IHsgInNsayIsICA2NDcgfSwKPiA+ICAgICAgIC8qMDUwMiovIHsgInNxaSIsICA2NTIgfSwKPiA+ ICAgICAgIC8qMDUwMyovIHsgInpobyIsICA2ODYgfSwKPiA+IC0gICAgLyotLS0tLSBBVl9MQU5H X0lTTzYzOV8xIGVudHJpZXMgKDE4NCkgLS0tLS0qLwo+ID4gKyAgICAvKi0tLS0tIEFWX0xBTkdf SVNPNjM5XzEgZW50cmllcyAoMTkwKSAtLS0tLSovCj4gPiAgICAgICAvKjA1MDQqLyB7ICJhYSIg LCAgICAwIH0sCj4gPiAgICAgICAvKjA1MDUqLyB7ICJhYiIgLCAgICAxIH0sCj4gPiAgICAgICAv KjA1MDYqLyB7ICJhZSIgLCAgIDMzIH0sCj4gPiBAQCAtNzI0LDYgKzcyNCwxMiBAQCBzdGF0aWMg Y29uc3QgTGFuZ0VudHJ5IGxhbmdfdGFibGVbXSA9IHsKPiA+ICAgICAgIC8qMDY4NSovIHsgInph IiAsICA0NzggfSwKPiA+ICAgICAgIC8qMDY4NiovIHsgInpoIiAsICAgNzggfSwKPiA+ICAgICAg IC8qMDY4NyovIHsgInp1IiAsICA0ODAgfSwKPiA+ICsgICAgLyowNjg4Ki8geyAiaW4iICwgIDE5 NSB9LCAvKiBkZXByZWNhdGVkICovCj4gPiArICAgIC8qMDY4OSovIHsgIml3IiAsICAxNzIgfSwg LyogZGVwcmVjYXRlZCAqLwo+ID4gKyAgICAvKjA2OTAqLyB7ICJqaSIgLCAgNDcyIH0sIC8qIGRl cHJlY2F0ZWQgKi8KPiA+ICsgICAgLyowNjkxKi8geyAianciICwgIDIwMiB9LCAvKiBkZXByZWNh dGVkICovCj4gPiArICAgIC8qMDY5MiovIHsgIm1vIiAsICAzNTggfSwgLyogZGVwcmVjYXRlZCAq Lwo+ID4gKyAgICAvKjA2OTMqLyB7ICJzaCIgLCAgNjkzIH0sIC8qIGRlcHJlY2F0ZWQgKG5vIGVx dWl2YWxlbnQpICovCj4gPiAgICAgICB7ICIiLCAwIH0KPiA+ICAgfTsKPiA+Cj4gPiBkaWZmIC0t Z2l0IGEvbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYyBiL2xpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVj LmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi4yYjIyYTdk ZTRmCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9saWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5j Cj4gPiBAQCAtMCwwICsxLDE1OTkgQEAKPiA+ICsvKgo+ID4gKyAqIERWRC1WaWRlbyBkZW11eGVy IChwb3dlcmVkIGJ5IGxpYmR2ZG5hdi9saWJkdmRyZWFkKQo+ID4gKyAqCj4gPiArICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ID4gKyAqCj4gPiArICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ID4gKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKPiA+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiA+ICsgKgo+ID4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiAr ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKPiA+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+ID4gKyAqCj4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiA+ICsgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BCj4gMDIxMTAtMTMwMSBVU0EKPiA+ICsgKi8KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBEVkQt VmlkZW8gaXMgbm90IGEgZGlyZWN0bHkgYWNjZXNzaWJsZSwgbGluZWFyIGNvbnRhaW5lciBmb3Jt YXQgaW4KPiB0aGUKPiA+ICsgKiB0cmFkaXRpb25hbCBzZW5zZS4gSW5zdGVhZCwgaXQgYWxsb3dz IGZvciBjb21wbGV4IGFuZCBwcm9ncmFtbWF0aWMKPiA+ICsgKiBwbGF5YmFjayBvZiBjYXJlZnVs bHkgbXV4ZWQgc3RyZWFtcy4gQSB0eXBpY2FsIERWRCBwbGF5ZXIgcmVsaWVzIG9uCj4gPiArICog dXNlciBHVUkgaW50ZXJhY3Rpb24gdG8gZHJpdmUgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZGVtdXhp bmcuCj4gPiArICogVWx0aW1hdGVseSwgdGhlIGxvZ2ljYWwgcGxheWJhY2sgc2VxdWVuY2UgaXMg ZGVmaW5lZCBieSBhIHRpdGxlJ3MgUEdDCj4gPiArICogYW5kIGEgdXNlciBzZWxlY3RlZCAiYW5n bGUiLiBBbiBhZGRpdGlvbmFsIGxheWVyIG9mIGNvbnRyb2wgaXMKPiBkZWZpbmVkIGJ5Cj4gPiAr ICogTkFWIHBhY2tldHMgaW4gdGhlIE1QRUctUFMsIGJ1dCBhcyB0aGVzZSBhcmUgcHJvY2Vzc2Vk IGJ5IGxpYmR2ZG5hdiwKPiA+ICsgKiB0aGV5IGFyZSB3aXRoZWxkIGZyb20gdGhlIG91dHB1dCBv ZiB0aGlzIGRlbXV4ZXIuCj4gPiArICoKPiA+ICsgKiBUaGVyZWZvcmUsIHRoZSBoaWdoLWxldmVs IGFwcHJvYWNoIGlzIGFzIGZvbGxvd3M6Cj4gPiArICogMSkgT3BlbiB0aGUgdm9sdW1lIHdpdGgg bGliZHZkcmVhZAo+ID4gKyAqIDIpIEdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlci1y ZXF1ZXN0ZWQgdGl0bGUgYW5kIFBHQwo+IGNvb3JkaW5hdGVzCj4gPiArICogMykgUmVxdWVzdCBw bGF5YmFjayBhdCB0aGUgY29vcmRpbmF0ZXMgYW5kIGNob3NlbiBhbmdsZSB3aXRoCj4gbGliZHZk bmF2Cj4gPiArICogNCkgU2VlayBwbGF5YmFjayB0byBmaXJzdCBjZWxsIGF0IHRoZSBjb29yZGlu YXRlcyAoc2tpcHBpbmcgc3RpbGxzLAo+IGV0Yy4pCj4gPiArICogNSkgQmVnaW4gdGhlIHBsYXli YWNrIChyZWFkaW5nIGFuZCBkZW11eGluZykgb2YgTVBFRy1QUyBibG9ja3MKPiA+ICsgKiA2KSBF bmQgcGxheWJhY2sgaWYgdGhlIFBHQyBvciBhbmdsZSBjaGFuZ2UKPiA+ICsgKiA3KSBDbG9zZSBy ZXNvdXJjZXMKPiA+ICsgKiovCj4gPiArCj4gPiArLyoqCj4gPiArICogSXNzdWVzL2J1ZyB0cmFj a2VyIChUT0RPKToKPiA+ICsgKiAtIFNERFMgaXMgbm90IHN1cHBvcnRlZCB5ZXQKPiA+ICsgKiAt IEFyZSB3ZSBoYW5kbGluZyBiYWNrd2FyZHMgY2VsbCBjaGFuZ2VzIGFuZCBQVFQgY2hhbmdlcyBj b3JyZWN0bHk/Cj4gPiArICogLSBTb21lIGNvZGVjIHBhcmFtZXRlcnMvbWV0YWRhdGEgaXMgbm90 IGJlaW5nIGV4cGxpY2l0bHkgc2V0Ogo+ID4gKyAqICAgICAgLT4gQ2hhbm5lbExheW91dCwgY29s b3IvY2hyb21hIGluZm8sIERBUiwgZnJhbWUgc2l6ZSBmb3IKPiBNUDEvTVAyIGF1ZGlvCj4gPiAr ICogLSBBZGRpdGlvbmFsIFBHQyB2YWxpZGF0aW9ucz8KPiA+ICsqKi8KPiA+ICsKPiA+ICsjaW5j bHVkZSA8ZHZkcmVhZC9kdmRfcmVhZGVyLmg+Cj4gPiArI2luY2x1ZGUgPGR2ZHJlYWQvaWZvX3Jl YWQuaD4KPiA+ICsjaW5jbHVkZSA8ZHZkcmVhZC9pZm9fdHlwZXMuaD4KPiA+ICsjaW5jbHVkZSA8 ZHZkcmVhZC9uYXZfcmVhZC5oPgo+ID4gKyNpbmNsdWRlIDxkdmRuYXYvZHZkbmF2Lmg+Cj4gPiAr Cj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ID4gKyNpbmNsdWRlICJsaWJh dnV0aWwvYXZ1dGlsLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9jb2xvcnNwYWNlLmgiCj4g PiArI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29w dC5oIgo+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvc2FtcGxlZm10LmgiCj4gPiArCj4gPiArI2lu Y2x1ZGUgImxpYmF2Y29kZWMvYXZjb2RlYy5oIgo+ID4gKyNpbmNsdWRlICJsaWJhdmZvcm1hdC9h dmlvX2ludGVybmFsLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2bGFuZ3VhZ2UuaCIK PiA+ICsjaW5jbHVkZSAibGliYXZmb3JtYXQvYXZmb3JtYXQuaCIKPiA+ICsjaW5jbHVkZSAibGli YXZmb3JtYXQvZGVtdXguaCIKPiA+ICsjaW5jbHVkZSAibGliYXZmb3JtYXQvaW50ZXJuYWwuaCIK PiA+ICsjaW5jbHVkZSAibGliYXZmb3JtYXQvdXJsLmgiCj4gPiArCj4gPiArI2RlZmluZSBaRVJP X1EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCkg ewo+IDAsIDEgfQo+IFVubmVjZXNzYXJ5ICNkZWZpbmUuCj4KPiA+ICsKPiA+ICsjZGVmaW5lIERW RFZJREVPX1BTX01BWF9TRUFSQ0hfQkxPQ0tTICAgICAgICAgICAgICAgICAgIDEyOAo+ID4gKyNk ZWZpbmUgRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgMTAy NAo+ID4gKwo+ID4gKyNkZWZpbmUgRFZEVklERU9fVElNRV9CQVNFX1EgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKEFWUmF0aW9uYWwpIHsKPiAxLCA5MDAwMCB9Cj4gPiArI2RlZmluZSBEVkRW SURFT19USU1FX0JBU0VfTUlMTElTX1EgICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCkg ewo+IDEsIDEwMDAgfQo+ID4gKyNkZWZpbmUgRFZEVklERU9fUFRTX1dSQVBfQklUUyAgICAgICAg ICAgICAgICAgICAgICAgICAgMzIKPiA+ICsjZGVmaW5lIERWRFZJREVPX0JMT0NLX1NJWkUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDgKPiA+ICsKPiA+ICsjZGVmaW5lIERWRFZJREVP X05UU0NfRlJBTUVSQVRFX1EgICAgICAgICAgICAgICAgICAgICAgIChBVlJhdGlvbmFsKSB7Cj4g MzAwMDAsIDEwMDEgfQo+ID4gKyNkZWZpbmUgRFZEVklERU9fTlRTQ19IRUlHSFQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgNDgwCj4gPiArI2RlZmluZSBEVkRWSURFT19QQUxfRlJBTUVSQVRF X1EgICAgICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCkgewo+IDI1LCAxIH0KPiA+ICsj ZGVmaW5lIERWRFZJREVPX1BBTF9IRUlHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3 Ngo+ID4gKyNkZWZpbmUgRFZEVklERU9fRDFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNzIwCj4gPiArI2RlZmluZSBEVkRWSURFT180Q0lGX1dJRFRIICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA3MDQKPiA+ICsjZGVmaW5lIERWRFZJREVPX0QxX0hBTEZfV0lEVEggICAg ICAgICAgICAgICAgICAgICAgICAgIDM1Mgo+ID4gKyNkZWZpbmUgRFZEVklERU9fQ0lGX1dJRFRI ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzUyCj4gPiArI2RlZmluZSBEVkRWSURFT19Q SVhFTF9GT1JNQVQKPiAgQVZfUElYX0ZNVF9ZVVY0MjBQCj4gPiArCj4gPiArI2RlZmluZSBEVkRW SURFT19TVEFSVENPREVfVklERU8gICAgICAgICAgICAgICAgICAgICAgICAweDFFMAo+ID4gKyNk ZWZpbmUgRFZEVklERU9fU1RBUlRDT0RFX09GRlNFVF9BVURJT19BQzMgICAgICAgICAgICAgMHg4 MAo+ID4gKyNkZWZpbmUgRFZEVklERU9fU1RBUlRDT0RFX09GRlNFVF9BVURJT19NUDEgICAgICAg ICAgICAgMHgxQzAKPiA+ICsjZGVmaW5lIERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9f TVAyICAgICAgICAgICAgIDB4MUMwCj4gPiArI2RlZmluZSBEVkRWSURFT19TVEFSVENPREVfT0ZG U0VUX0FVRElPX1BDTSAgICAgICAgICAgICAweEEwCj4gPiArI2RlZmluZSBEVkRWSURFT19TVEFS VENPREVfT0ZGU0VUX0FVRElPX0RUUyAgICAgICAgICAgICAweDg4Cj4gPiArI2RlZmluZSBEVkRW SURFT19TVEFSVENPREVfT0ZGU0VUX1NVQlAgICAgICAgICAgICAgICAgICAweDIwCj4gPiArCj4g PiArI2RlZmluZSBEVkRWSURFT19USVRMRV9OVU1CRVJfTUFYICAgICAgICAgICAgICAgICAgICAg ICA5OQo+ID4gKyNkZWZpbmUgRFZEVklERU9fUFRUX05VTUJFUl9NQVggICAgICAgICAgICAgICAg ICAgICAgICAgOTkKPiA+ICsjZGVmaW5lIERWRFZJREVPX1BHQ19OVU1CRVJfTUFYICAgICAgICAg ICAgICAgICAgICAgICAgIDMyNzY3Cj4gPiArI2RlZmluZSBEVkRWSURFT19QR19OVU1CRVJfTUFY ICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUKPiA+ICsjZGVmaW5lIERWRFZJREVPX0FOR0xF X05VTUJFUl9NQVggICAgICAgICAgICAgICAgICAgICAgIDkKPiA+ICsjZGVmaW5lIERWRFZJREVP X1ZUU19OVU1CRVJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgIDk5Cj4gPiArI2RlZmluZSBE VkRWSURFT19UVF9OVU1CRVJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICA5OQo+ID4gKyNk ZWZpbmUgRFZEVklERU9fUkVHSU9OX05VTUJFUl9NQVggICAgICAgICAgICAgICAgICAgICAgOAo+ ID4gKyNkZWZpbmUgRFZEVklERU9fQVVESU9fQ09OVFJPTF9FTkFCTEVEX01BU0sgICAgICAgICAg ICAgMHg4MDAwCj4gPiArI2RlZmluZSBEVkRWSURFT19TVUJQX0NPTlRST0xfRU5BQkxFRF9NQVNL ICAgICAgICAgICAgICAweDgwMDAwMDAwCj4gPiArI2RlZmluZSBEVkRWSURFT19WVFNfQVVESU9f U1RSRUFNU19NQVggICAgICAgICAgICAgICAgICA4Cj4gPiArI2RlZmluZSBEVkRWSURFT19WVFNf U1VCUF9TVFJFQU1TX01BWCAgICAgICAgICAgICAgICAgICAzMgo+ID4gKwo+ID4gKy8qICgicGFs ZXR0ZTogIikgKyAoInJyZ2diYiwgIioxNSkgKyAoInJyZ2diYiIpICsgXG4gKyBcMCAqLwo+ID4g KyNkZWZpbmUgRFZEVklERU9fU1VCUF9DTFVUX1JHQl9FWFRSQURBVEFfU0laRSAgICAgICAgICAg KDkgKyAoOCAqIDE1KSArCj4gNiArIDEgKyAxKQo+ID4gKyNkZWZpbmUgRFZEVklERU9fU1VCUF9D TFVUX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKPiA+ICsjZGVmaW5lIERWRFZJREVP X1NVQlBfQ0xVVF9TSVpFCj4gIERWRFZJREVPX1NVQlBfQ0xVVF9MRU4gKiBzaXplb2YodWludDMy X3QpCj4gPiArCj4gPiArLyogY29udmVydCBiaW5hcnktY29kZWQgZGVjaW1hbCB0byBkZWNpbWFs ICovCj4gPiArI2RlZmluZSBCQ0QyRChfX3hfXykgKCgoX194X18gJiAweEYwKSA+PiA0KSAqIDEw ICsgKF9feF9fICYgMHgwRikpCj4gPiArCj4gPiArLyogY3JvcCB0YWJsZSBmb3IgWVVWIHRvIFJH QiBzdWJwaWN0dXJlIHBhbGV0dGUgY29udmVyc2lvbiAqLwo+ID4gKyNkZWZpbmUgRFZEVklERU9f WVVWX05FR19DUk9QX01BWCAgICAgICAgICAgICAgICAgICAgICAgMTAyNAo+ID4gKyNkZWZpbmUg dGltZXM0KHgpIHgsIHgsIHgsIHgKPiA+ICsjZGVmaW5lIHRpbWVzMjU2KHgpIHRpbWVzNCh0aW1l czQodGltZXM0KHRpbWVzNCh0aW1lczQoeCkpKSkpCj4gPiArCj4gPiArY29uc3QgdWludDhfdCBk dmR2aWRlb195dXZfY3JvcF90YWJbMjU2ICsgMiAqCj4gRFZEVklERU9fWVVWX05FR19DUk9QX01B WF0gPSB7Cj4gPiArdGltZXMyNTYoMHgwMCksCj4gPgo+ICsweDAwLDB4MDEsMHgwMiwweDAzLDB4 MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBG LAo+ID4KPiArMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LDB4MTgsMHgx OSwweDFBLDB4MUIsMHgxQywweDFELDB4MUUsMHgxRiwKPiA+Cj4gKzB4MjAsMHgyMSwweDIyLDB4 MjMsMHgyNCwweDI1LDB4MjYsMHgyNywweDI4LDB4MjksMHgyQSwweDJCLDB4MkMsMHgyRCwweDJF LDB4MkYsCj4gPgo+ICsweDMwLDB4MzEsMHgzMiwweDMzLDB4MzQsMHgzNSwweDM2LDB4MzcsMHgz OCwweDM5LDB4M0EsMHgzQiwweDNDLDB4M0QsMHgzRSwweDNGLAo+ID4KPiArMHg0MCwweDQxLDB4 NDIsMHg0MywweDQ0LDB4NDUsMHg0NiwweDQ3LDB4NDgsMHg0OSwweDRBLDB4NEIsMHg0QywweDRE LDB4NEUsMHg0RiwKPiA+Cj4gKzB4NTAsMHg1MSwweDUyLDB4NTMsMHg1NCwweDU1LDB4NTYsMHg1 NywweDU4LDB4NTksMHg1QSwweDVCLDB4NUMsMHg1RCwweDVFLDB4NUYsCj4gPgo+ICsweDYwLDB4 NjEsMHg2MiwweDYzLDB4NjQsMHg2NSwweDY2LDB4NjcsMHg2OCwweDY5LDB4NkEsMHg2QiwweDZD LDB4NkQsMHg2RSwweDZGLAo+ID4KPiArMHg3MCwweDcxLDB4NzIsMHg3MywweDc0LDB4NzUsMHg3 NiwweDc3LDB4NzgsMHg3OSwweDdBLDB4N0IsMHg3QywweDdELDB4N0UsMHg3RiwKPiA+Cj4gKzB4 ODAsMHg4MSwweDgyLDB4ODMsMHg4NCwweDg1LDB4ODYsMHg4NywweDg4LDB4ODksMHg4QSwweDhC LDB4OEMsMHg4RCwweDhFLDB4OEYsCj4gPgo+ICsweDkwLDB4OTEsMHg5MiwweDkzLDB4OTQsMHg5 NSwweDk2LDB4OTcsMHg5OCwweDk5LDB4OUEsMHg5QiwweDlDLDB4OUQsMHg5RSwweDlGLAo+ID4K PiArMHhBMCwweEExLDB4QTIsMHhBMywweEE0LDB4QTUsMHhBNiwweEE3LDB4QTgsMHhBOSwweEFB LDB4QUIsMHhBQywweEFELDB4QUUsMHhBRiwKPiA+Cj4gKzB4QjAsMHhCMSwweEIyLDB4QjMsMHhC NCwweEI1LDB4QjYsMHhCNywweEI4LDB4QjksMHhCQSwweEJCLDB4QkMsMHhCRCwweEJFLDB4QkYs Cj4gPgo+ICsweEMwLDB4QzEsMHhDMiwweEMzLDB4QzQsMHhDNSwweEM2LDB4QzcsMHhDOCwweEM5 LDB4Q0EsMHhDQiwweENDLDB4Q0QsMHhDRSwweENGLAo+ID4KPiArMHhEMCwweEQxLDB4RDIsMHhE MywweEQ0LDB4RDUsMHhENiwweEQ3LDB4RDgsMHhEOSwweERBLDB4REIsMHhEQywweERELDB4REUs MHhERiwKPiA+Cj4gKzB4RTAsMHhFMSwweEUyLDB4RTMsMHhFNCwweEU1LDB4RTYsMHhFNywweEU4 LDB4RTksMHhFQSwweEVCLDB4RUMsMHhFRCwweEVFLDB4RUYsCj4gPgo+ICsweEYwLDB4RjEsMHhG MiwweEYzLDB4RjQsMHhGNSwweEY2LDB4RjcsMHhGOCwweEY5LDB4RkEsMHhGQiwweEZDLDB4RkQs MHhGRSwweEZGLAo+ID4gK3RpbWVzMjU2KDB4RkYpCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIERW RFZpZGVvVlRTTVBFR1ZlcnNpb24gewo+ID4gKyAgICBEVkRWSURFT19WVFNfTVBFR19WRVJTSU9O X01QRUcxICAgICAgICAgID0gMCwKPiA+ICsgICAgRFZEVklERU9fVlRTX01QRUdfVkVSU0lPTl9N UEVHMiAgICAgICAgICA9IDEKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gRFZEVmlkZW9WVFNQaWN0 dXJlRm9ybWF0IHsKPiA+ICsgICAgRFZEVklERU9fVlRTX1BJQ1RVUkVfRk9STUFUX05UU0MgICAg ICAgICA9IDAsCj4gPiArICAgIERWRFZJREVPX1ZUU19QSUNUVVJFX0ZPUk1BVF9QQUwgICAgICAg ICAgPSAxCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIERWRFZpZGVvVlRTUGljdHVyZVNpemUgewo+ ID4gKyAgICBEVkRWSURFT19WVFNfUElDVFVSRV9TSVpFX0QxICAgICAgICAgICAgID0gMCwKPiA+ ICsgICAgRFZEVklERU9fVlRTX1BJQ1RVUkVfU0laRV80Q0lGICAgICAgICAgICA9IDEsCj4gPiAr ICAgIERWRFZJREVPX1ZUU19QSUNUVVJFX1NJWkVfRDFfSEFMRiAgICAgICAgPSAyLAo+ID4gKyAg ICBEVkRWSURFT19WVFNfUElDVFVSRV9TSVpFX0NJRiAgICAgICAgICAgID0gMwo+ID4gK307Cj4g PiArCj4gPiArZW51bSBEVkRWaWRlb1ZUU1BpY3R1cmVEQVIgewo+ID4gKyAgICBEVkRWSURFT19W VFNfUElDVFVSRV9EQVJfNF8zICAgICAgICAgICAgID0gMCwKPiA+ICsgICAgRFZEVklERU9fVlRT X1BJQ1RVUkVfREFSXzE2XzkgICAgICAgICAgICA9IDMKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0g RFZEVmlkZW9WVFNQZXJtaXR0ZWRGdWxsc2NyZWVuRGlzcGxheSB7Cj4gPiArICAgIERWRFZJREVP X1ZUU19TUFVfUEZEX0FOWSAgICAgICAgICAgICAgICAgPSAwLAo+ID4gKyAgICBEVkRWSURFT19W VFNfU1BVX1BGRF9QQU5TQ0FOX09OTFkgICAgICAgID0gMSwKPiA+ICsgICAgRFZEVklERU9fVlRT X1NQVV9QRkRfTEVUVEVSQk9YX09OTFkgICAgICA9IDIKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0g RFZEVmlkZW9WVFNBdWRpb0Zvcm1hdCB7Cj4gPiArICAgIERWRFZJREVPX1ZUU19BVURJT19GT1JN QVRfQUMzICAgICAgICAgICAgPSAwLAo+ID4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fRk9STUFU X01QMSAgICAgICAgICAgID0gMiwKPiA+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX0ZPUk1BVF9N UDIgICAgICAgICAgICA9IDMsCj4gPiArICAgIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfUENN ICAgICAgICAgICAgPSA0LAo+ID4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fRk9STUFUX1NERFMg ICAgICAgICAgID0gNSwKPiA+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX0ZPUk1BVF9EVFMgICAg ICAgICAgICA9IDYKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gRkZEVkRWaWRlb1ZUU0F1ZGlvU2Ft cGxlUmF0ZSB7Cj4gPiArICAgIERWRFZJREVPX1ZUU19BVURJT19TQU1QTEVfUkFURV80OEsgICAg ICAgPSAwLAo+ID4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fU0FNUExFX1JBVEVfOTZLICAgICAg ID0gMQo+ID4gK307Cj4gPiArCj4gPiArZW51bSBGRkRWRFZpZGVvVlRTQXVkaW9RdWFudGl6YXRp b24gewo+ID4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fUVVBTlRJWkFUSU9OXzE2ICAgICAgID0g MCwKPiA+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX1FVQU5USVpBVElPTl8yMCAgICAgICA9IDEs Cj4gPiArICAgIERWRFZJREVPX1ZUU19BVURJT19RVUFOVElaQVRJT05fMjQgICAgICAgPSAyCj4g PiArfTsKPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCBEVkRWaWRlb0RlbXV4Q29udGV4dCB7Cj4g PiArICAgIGNvbnN0IEFWQ2xhc3MgICAgICAgICAgICAgICAqY2xhc3M7Cj4gPiArCj4gPiArICAg IC8qIG9wdGlvbnMgKi8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF90 aXRsZTsgICAgICAgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIHRpdGxlIG51bWJl ciAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0 X3B0dDsgICAgICAgICAgICAgICAgICAgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQgUFRUIG51bWJl ciAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0 X3BnYzsgICAgICAgICAgICAgICAgICAgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQgUEdDIG51bWJl ciAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0 X3BnOyAgICAgICAgICAgICAgICAgICAgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQgUEcgbnVtYmVy ICgxLWluZGV4ZWQpICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRf YW5nbGU7ICAgICAgICAgICAgICAgICAgLyogdGhlCj4gdXNlci1wcm92aWRlZCBhbmdsZSBudW1i ZXIgKDEtaW5kZXhlZCkgKi8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9w dF9yZWdpb247ICAgICAgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIHJlZ2lvbiBp ZGVudGlmaWNhdGlvbiBkaWdpdCAqLwo+ID4gKwo+ID4gKyAgICAvKiBzdWJkZW11eCAqLwo+ID4g KyAgICBjb25zdCBBVklucHV0Rm9ybWF0ICAgICAgICAgKm1wZWdfZm10OyAgICAgICAgICAgICAg ICAgIC8qIGlubmVyCj4gTVBFRy1QUyAoVk9CKSBkZW11eGVyICovCj4gPiArICAgIEFWRm9ybWF0 Q29udGV4dCAgICAgICAgICAgICAqbXBlZ19jdHg7ICAgICAgICAgICAgICAgICAgLyogY29udGV4 dAo+IGZvciBpbm5lciBkZW11eGVyICovCj4gPiArICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAg ICAgICAqbXBlZ19idWY7ICAgICAgICAgICAgICAgICAgLyogYnVmZmVyCj4gZm9yIGlubmVyIGRl bXV4ZXIgKi8KPiA+ICsgICAgRkZJT0NvbnRleHQgICAgICAgICAgICAgICAgIG1wZWdfcGI7ICAg ICAgICAgICAgICAgICAgICAvKiBidWZmZXIKPiBjb250ZXh0IGZvciBpbm5lciBkZW11eGVyICov Cj4gPiArCj4gPiArICAgIC8qIHZvbHVtZSAqLwo+ID4gKyAgICBkdmRfcmVhZGVyX3QgICAgICAg ICAgICAgICAgKnZvbF9kdmRyZWFkOyAgICAgICAgICAgICAgIC8qIGhhbmRsZQo+IHRvIGxpYmR2 ZHJlYWQgKi8KPiA+ICsgICAgaWZvX2hhbmRsZV90ICAgICAgICAgICAgICAgICp2b2xfdm1nX2lm bzsgICAgICAgICAgICAgICAvKiBoYW5kbGUKPiB0byB0aGUgVk1HIChWSURFT19UUy5JRk8pICov Cj4gPiArCj4gPiArICAgIC8qIHBsYXliYWNrICovCj4gPiArICAgIGlmb19oYW5kbGVfdCAgICAg ICAgICAgICAgICAqcGxheV92dHNfaWZvOyAgICAgICAgICAgICAgLyogaGFuZGxlCj4gdG8gdGhl IGFjdGl2ZSBWVFMgKFZUU19ubl9uLklGTykgKi8KPiA+ICsgICAgcGdjX3QgICAgICAgICAgICAg ICAgICAgICAgICpwbGF5X3BnYzsgICAgICAgICAgICAgICAgICAvKiBoYW5kbGUKPiB0byB0aGUg YWN0aXZlIFBHQyAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGxheV92 dHNuOyAgICAgICAgICAgICAgICAgIC8qIG51bWJlcgo+IG9mIHRoZSBhY3RpdmUgVlRTICh2aWRl byB0aXRsZSBzZXQpICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5 X3BnY247ICAgICAgICAgICAgICAgICAgLyogbnVtYmVyCj4gb2YgdGhlIGFjdGl2ZSBQR0MgKHBy b2dyYW0gY2hhaW4pICovCj4gPiArICAgIGR2ZG5hdl90ICAgICAgICAgICAgICAgICAgICAqcGxh eV9kdmRuYXY7ICAgICAgICAgICAgICAgLyogaGFuZGxlCj4gdG8gbGliZHZkbmF2ICovCj4gPiAr fSBEVkRWaWRlb0RlbXV4Q29udGV4dDsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdmR2aWRlb19s aWJkdmRyZWFkX2xvZyh2b2lkICpvcGFxdWUsIGR2ZF9sb2dnZXJfbGV2ZWxfdAo+IGxldmVsLAo+ ID4gKyAgICAgICAgY29uc3QgY2hhciAqbXNnLCB2YV9saXN0IG1zZ192YSkKPiA+ICt7Cj4KPiBU aGlzIGZ1bmN0aW9uIGlzIHVubmVjZXNzYXJ5LiBJZiB5b3UgcmVhbGx5IG5lZWQgdG8gaW50ZXJj ZXB0IGxvZ2dlZAo+IG1lc3NhZ2VzIGZyb20gbGliZHZkbmF2IGFuZCBmZWVkIHRoZW0gdG8gYXZf bG9nLCB5b3Ugc2hvdWxkIGp1c3QgaGF2ZSBhCj4gbG9va3VwIHRoYXQgbWFwcyB0aGUgY29ycmVz cG9uZGluZyBtZXNzYWdlIGxldmVsLgo+Cj4gPiArICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG9w YXF1ZTsKPiA+ICsgICAgaW50IGxhdnVfbGV2ZWw7Cj4gPiArCj4gPiArICAgIGNoYXIgbXNnX2J1 ZltEVkRWSURFT19MSUJEVkRYX0xPR19CVUZGRVJfU0laRV0gPSB7MH07Cj4gPiArICAgIHZzbnBy aW50Zihtc2dfYnVmLCBEVkRWSURFT19MSUJEVkRYX0xPR19CVUZGRVJfU0laRSwgbXNnLCBtc2df dmEpOwo+ID4gKwo+ID4gKyAgICBzd2l0Y2ggKGxldmVsKSB7Cj4gPiArICAgICAgICBjYXNlIERW RF9MT0dHRVJfTEVWRUxfRVJST1I6Cj4gPiArICAgICAgICAgICAgbGF2dV9sZXZlbCA9IEFWX0xP R19FUlJPUjsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIGNhc2UgRFZEX0xP R0dFUl9MRVZFTF9XQVJOOgo+ID4gKyAgICAgICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0dfV0FS TklORzsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIGNhc2UgRFZEX0xPR0dF Ul9MRVZFTF9JTkZPOgo+ID4gKyAgICAgICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0dfSU5GTzsK PiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIGNhc2UgRFZEX0xPR0dFUl9MRVZF TF9ERUJVRzoKPiA+ICsgICAgICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAgICAgbGF2dV9sZXZl bCA9IEFWX0xPR19ERUJVRzsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvKiBsaWJkdmRyZWFk IG1lc3NhZ2VzIGRvbid0IGhhdmUgbGluZSB0ZXJtaW5hdG9ycyAqLwo+ID4gKyAgICBhdl9sb2co cywgbGF2dV9sZXZlbCwgImxpYmR2ZHJlYWQ6ICVzXG4iLCBtc2dfYnVmKTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fbGliZHZkbmF2X2xvZyh2b2lkICpvcGFxdWUsIGR2 ZG5hdl9sb2dnZXJfbGV2ZWxfdAo+IGxldmVsLAo+ID4gKyAgICAgICAgY29uc3QgY2hhciAqbXNn LCB2YV9saXN0IG1zZ192YSkKPiA+ICt7Cj4gPiArICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG9w YXF1ZTsKPiBTYW1lIGNvbXBsYWludCBoZXJlLiBBbHNvIHlvdSBoYXZlIG5vIHRvIHJlYXNzaWdu IG9wYXF1ZSBoZXJlLgo+Cj4gPiArICAgIGludCBsYXZ1X2xldmVsOwo+ID4gKwo+ID4gKyAgICBj aGFyIG1zZ19idWZbRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJWkVdID0gezB9Owo+ID4g KyAgICB2c25wcmludGYobXNnX2J1ZiwgRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJWkUs IG1zZywgbXNnX3ZhKTsKPiA+ICsKPiA+ICsgICAgc3dpdGNoIChsZXZlbCkgewo+ID4gKyAgICAg ICAgY2FzZSBEVkROQVZfTE9HR0VSX0xFVkVMX0VSUk9SOgo+ID4gKyAgICAgICAgICAgIGxhdnVf bGV2ZWwgPSBBVl9MT0dfRVJST1I7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAg ICBjYXNlIERWRE5BVl9MT0dHRVJfTEVWRUxfV0FSTjoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xl dmVsID0gQVZfTE9HX1dBUk5JTkc7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAg ICBjYXNlIERWRE5BVl9MT0dHRVJfTEVWRUxfSU5GTzoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xl dmVsID0gQVZfTE9HX0lORk87Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBj YXNlIERWRE5BVl9MT0dHRVJfTEVWRUxfREVCVUc6Cj4gPiArICAgICAgICBkZWZhdWx0Ogo+ID4g KyAgICAgICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0dfREVCVUc7Cj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgLyogbGliZHZkbmF2IG1lc3NhZ2VzIGRvbid0IGhhdmUgbGluZSB0ZXJtaW5hdG9y cyAqLwo+ID4gKyAgICBhdl9sb2cocywgbGF2dV9sZXZlbCwgImxpYmR2ZG5hdjogJXNcbiIsIG1z Z19idWYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY2hhciAqZHZkdmlkZW9fbGFuZ19jb2Rl X3RvX2lzbzYzOV9fMihjb25zdCB1aW50MTZfdCBsYW5nX2NvZGUpCj4gPiArewo+ID4gKyAgICBj aGFyIGxhbmdfY29kZV9zdHJbM10gPSB7MH07Cj4gPiArCj4gPiArICAgIGlmIChsYW5nX2NvZGUg JiYgbGFuZ19jb2RlICE9IDB4RkZGRikgewo+ID4gKyAgICAgICAgbGFuZ19jb2RlX3N0clswXSA9 IChsYW5nX2NvZGUgPj4gOCkgJiAweEZGOwo+ID4gKyAgICAgICAgbGFuZ19jb2RlX3N0clsxXSA9 IGxhbmdfY29kZSAmIDB4RkY7Cj4gPiArICAgIH0KPiBBVl9XQjE2KGxhbmdfY29kZV9zdHIsIGxh bmdfY29kZSk7Cj4KPiA+ICsKPiA+ICsgICAgcmV0dXJuIChjaGFyICopIGZmX2NvbnZlcnRfbGFu Z190byhsYW5nX2NvZGVfc3RyLAo+IEFWX0xBTkdfSVNPNjM5XzJfQklCTCk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQ2NF90IGR2ZHZpZGVvX3RpbWVfdG9fbWlsbGlzKGR2ZF90aW1lX3Qg KnRpbWUpCj4gPiArewo+ID4gKyAgICBkb3VibGUgZnBzOwo+ID4gKyAgICBpbnQ2NF90IG1zOwo+ ID4gKwo+ID4gKyAgICBpbnQ2NF90IHNlYyA9IChpbnQ2NF90KSAoQkNEMkQodGltZS0+aG91cikp ICogNjAgKiA2MDsKPiA+ICsgICAgc2VjICs9IChpbnQ2NF90KSAoQkNEMkQodGltZS0+bWludXRl KSkgKiA2MDsKPiA+ICsgICAgc2VjICs9IChpbnQ2NF90KSAoQkNEMkQodGltZS0+c2Vjb25kKSk7 Cj4gPiArCj4gPiArICAgIC8qIHRoZSAyIGhpZ2ggYml0cyBhcmUgdGhlIGZyYW1lIHJhdGUgKi8K PiA+ICsgICAgc3dpdGNoICgodGltZS0+ZnJhbWVfdSAmIDB4QzApID4+IDYpCj4gPiArICAgIHsK PiA+ICsgICAgICAgIGNhc2UgMToKPiA+ICsgICAgICAgICAgICBmcHMgPSAyNS4wOwo+ID4gKyAg ICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgY2FzZSAzOgo+ID4gKyAgICAgICAgICAgIGZw cyA9IDI5Ljk3Owo+IFRoaXMgaXMgd3JvbmcsIGl0J3MgMzAwMDAvMTAwMS4gV2hpY2ggeW91IGtu ZXcsIGJlY2F1c2UgeW91ICNkZWZpbmVkIGl0Cj4gYWJvdmUuIFdoeSBub3QgdXNlIHRob3NlPwo+ Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBkZWZhdWx0Ogo+ID4gKyAgICAg ICAgICAgIGZwcyA9IDI1MDAuMDsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgfQo+ ID4gKyAgICBtcyA9IEJDRDJEKHRpbWUtPmZyYW1lX3UgJiAweDNGKSAqIDEwMDAuMCAvIGZwczsK PiA+ICsKPiA+ICsgICAgcmV0dXJuIChzZWMgKiAxMDAwKSArIG1zOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3ZvbHVtZV9pc190aXRsZV92YWxpZF9pbl9jb250ZXh0KEFW Rm9ybWF0Q29udGV4dCAqcywKPiA+ICsgICAgICAgIGludCB0aXRsZSkKPiA+ICt7Cj4gPiArICAg IERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBy ZXR1cm4gdGl0bGUgPj0gMQo+ID4gKyAgICAgICAgICAgICYmIHRpdGxlIDw9IERWRFZJREVPX1RJ VExFX05VTUJFUl9NQVgKPiA+ICsgICAgICAgICAgICAmJiB0aXRsZSA8PSBjLT52b2xfdm1nX2lm by0+dHRfc3JwdC0+bnJfb2Zfc3JwdHMKPiA+ICsgICAgICAgICAgICAmJiBjLT52b2xfdm1nX2lm by0+dHRfc3JwdC0+dGl0bGVbdGl0bGUgLSAxXS5ucl9vZl9wdHRzID4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBkdmR2aWRlb192b2x1bWVfaXNfdGl0bGVfdmFsaWRfaW5fdnRzKHRp dGxlX2luZm9fdAo+IHRpdGxlX2luZm8sCj4gPiArICAgICAgICBpZm9faGFuZGxlX3QgKnZ0c19p Zm8pCj4gPiArewo+ID4gKyAgICByZXR1cm4gdGl0bGVfaW5mby52dHNfdHRuID49IDEKPiA+ICsg ICAgICAgICAgICAmJiB0aXRsZV9pbmZvLnZ0c190dG4gPD0gRFZEVklERU9fVFRfTlVNQkVSX01B WAo+ID4gKyAgICAgICAgICAgICYmIHRpdGxlX2luZm8udnRzX3R0biA8PSB2dHNfaWZvLT52dHNf cHR0X3NycHQtPm5yX29mX3NycHRzCj4gPiArICAgICAgICAgICAgJiYgdnRzX2lmby0+dnRzaV9t YXQtPm5yX29mX3Z0c19hdWRpb19zdHJlYW1zCj4gPiArICAgICAgICAgICAgICAgICAgICA8PSBE VkRWSURFT19WVFNfQVVESU9fU1RSRUFNU19NQVgKPiA+ICsgICAgICAgICAgICAmJiB2dHNfaWZv LT52dHNpX21hdC0+bnJfb2ZfdnRzX3N1YnBfc3RyZWFtcwo+ID4gKyAgICAgICAgICAgICAgICAg ICAgPD0gRFZEVklERU9fVlRTX1NVQlBfU1RSRUFNU19NQVg7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgZHZkdmlkZW9fdm9sdW1lX2lzX2FuZ2xlX3ZhbGlkX2luX3RpdGxlKGludCBhbmds ZSwKPiA+ICsgICAgICAgIHRpdGxlX2luZm9fdCB0aXRsZV9pbmZvKQo+ID4gK3sKPiA+ICsgICAg cmV0dXJuIGFuZ2xlID49IDEKPiA+ICsgICAgICAgICAgICAmJiBhbmdsZSA8PSBEVkRWSURFT19B TkdMRV9OVU1CRVJfTUFYCj4gPiArICAgICAgICAgICAgJiYgYW5nbGUgPD0gdGl0bGVfaW5mby5u cl9vZl9hbmdsZXM7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdm9sdW1l X2lzX3BnY192YWxpZF9hbmRfc2VxdWVudGlhbChwZ2NfdCAqcGdjKQo+ID4gK3sKPiA+ICsgICAg cmV0dXJuIHBnYwo+ID4gKyAgICAgICAgICAgICYmIHBnYy0+cHJvZ3JhbV9tYXAKPiA+ICsgICAg ICAgICAgICAmJiBwZ2MtPmNlbGxfcGxheWJhY2sgIT0gTlVMTAo+ID4gKyAgICAgICAgICAgICYm IHBnYy0+cGdfcGxheWJhY2tfbW9kZSA9PSAwCj4gPiArICAgICAgICAgICAgJiYgcGdjLT5ucl9v Zl9wcm9ncmFtcyA+IDAKPiA+ICsgICAgICAgICAgICAmJiBwZ2MtPm5yX29mX2NlbGxzID4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb192b2x1bWVfaXNfcGdjbl9pbl92 dHMoaW50IHBnY24sIGlmb19oYW5kbGVfdAo+ICp2dHNfaWZvKQo+ID4gK3sKPiA+ICsgICAgcmV0 dXJuIHBnY24gPj0gMQo+ID4gKyAgICAgICAgICAgICYmIHBnY24gPD0gRFZEVklERU9fUEdDX05V TUJFUl9NQVgKPiA+ICsgICAgICAgICAgICAmJiBwZ2NuIDw9IHZ0c19pZm8tPnZ0c19wZ2NpdC0+ bnJfb2ZfcGdjaV9zcnA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdm9s dW1lX2lzX3Bnbl9pbl9wZ2MoaW50IHBnbiwgcGdjX3QgKnBnYykKPiA+ICt7Cj4gPiArICAgIHJl dHVybiBwZ24gPj0gMQo+ID4gKyAgICAgICAgICAgICYmIHBnbiA8PSBEVkRWSURFT19QR19OVU1C RVJfTUFYCj4gPiArICAgICAgICAgICAgJiYgcGduIDw9IHBnYy0+bnJfb2ZfcHJvZ3JhbXM7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdm9sdW1lX29wZW4oQVZGb3JtYXRD b250ZXh0ICpzKQo+IGF2X2NvbGQKPgo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRl eHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGR2ZF9yZWFkZXJfdCAqZHZkcmVh ZDsKPiA+ICsgICAgaWZvX2hhbmRsZV90ICp2bWdfaWZvOwo+ID4gKwo+ID4gKyAgICBkdmRfbG9n Z2VyX2NiIGR2ZHJlYWRfbG9nX2NiID0geyAucGZfbG9nID0gZHZkdmlkZW9fbGliZHZkcmVhZF9s b2cKPiB9Owo+ID4gKyAgICBkdmRyZWFkID0gRFZET3BlbjIocywgJmR2ZHJlYWRfbG9nX2NiLCBz LT51cmwpOwo+ID4gKwo+ID4gKyAgICBpZiAoIWR2ZHJlYWQpIHsKPiA+ICsgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBsaWJkdmRyZWFkXG4iKTsK PiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIGlmICghKHZtZ19pZm8gPSBpZm9PcGVuKGR2ZHJlYWQsIDApKSkgewo+ID4g KyAgICAgICAgRFZEQ2xvc2UoZHZkcmVhZCk7Cj4gPiArCj4gPiArICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLAo+ID4gKyAgICAgICAgICAgICJVbmFibGUgdG8gb3BlbiBWSURFT19UUy5J Rk8uICIKPiA+ICsgICAgICAgICAgICAiSW5wdXQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIERWRC1W aWRlbyBzdHJ1Y3R1cmUgIgo+ID4gKyAgICAgICAgICAgICJvciBpcyBub3QgYSBjb21wbGlhbnQg VURGIERWRC1WaWRlbyBpbWFnZS5cbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgYy0+dm9sX2R2ZHJlYWQg PSBkdmRyZWFkOwo+ID4gKyAgICBjLT52b2xfdm1nX2lmbyA9IHZtZ19pZm87Cj4gPiArCj4gPiAr ICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdmR2aWRlb192b2x1 bWVfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11 eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGlmIChjLT52b2xfdm1n X2lmbykgewo+ID4gKyAgICAgICAgaWZvQ2xvc2UoYy0+dm9sX3ZtZ19pZm8pOwo+IENhbiB0aGlz IGZhaWw/Cj4KPiA+ICsgICAgICAgIGMtPnZvbF92bWdfaWZvID0gTlVMTDsKPiA+ICsgICAgfQo+ ID4gKwo+ID4gKyAgICBpZiAoYy0+dm9sX2R2ZHJlYWQpIHsKPiA+ICsgICAgICAgIERWRENsb3Nl KGMtPnZvbF9kdmRyZWFkKTsKPiBDYW4gdGhpcyBmYWlsPwo+Cj4gPiArICAgICAgICBjLT52b2xf ZHZkcmVhZCA9IE5VTEw7Cj4gPiArICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBk dmR2aWRlb192b2x1bWVfb3Blbl92dHNfaWZvKEFWRm9ybWF0Q29udGV4dCAqcywgaW50IHZ0c24s Cj4gPiArICAgICAgICBpZm9faGFuZGxlX3QgKipwX3Z0c19pZm8pCj4gPiArewo+ID4gKyAgICBE VkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaWZv X2hhbmRsZV90ICp2dHNfaWZvOwo+ID4gKwo+ID4gKyAgICBpZiAodnRzbiA8IDEKPiA+ICsgICAg ICAgICAgICB8fCB2dHNuID4gRFZEVklERU9fVlRTX05VTUJFUl9NQVgKPiA+ICsgICAgICAgICAg ICB8fCAhKHZ0c19pZm8gPSBpZm9PcGVuKGMtPnZvbF9kdmRyZWFkLCB2dHNuKSkpIHsKPiA+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArCj4gPiAr ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdnRzX2lmby0+dnRzX2NfYWR0LT5ucl9vZl92b2JzOyBp KyspIHsKPiA+ICsgICAgICAgIGludCBzdGFydF9zZWN0b3IgPQo+IHZ0c19pZm8tPnZ0c19jX2Fk dC0+Y2VsbF9hZHJfdGFibGVbaV0uc3RhcnRfc2VjdG9yOwo+ID4gKyAgICAgICAgaW50IGVuZF9z ZWN0b3IgPQo+IHZ0c19pZm8tPnZ0c19jX2FkdC0+Y2VsbF9hZHJfdGFibGVbaV0ubGFzdF9zZWN0 b3I7Cj4gPiArCj4gPiArICAgICAgICBpZiAoKHN0YXJ0X3NlY3RvciAmIDB4RkZGRkZGKSA9PSAw eEZGRkZGRgo+ID4gKyAgICAgICAgICAgICAgICB8fCAoZW5kX3NlY3RvciAmIDB4RkZGRkZGKSA9 PSAweEZGRkZGRgo+ID4gKyAgICAgICAgICAgICAgICB8fCBzdGFydF9zZWN0b3IgPj0gZW5kX3Nl Y3Rvcikgewo+ID4gKyAgICAgICAgICAgIGlmb0Nsb3NlKHZ0c19pZm8pOwo+ID4gKwo+ID4gKyAg ICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfV0FSTklORywgIlZUUyBoYXMgaW52YWxpZCBjZWxs IGFkZHJlc3MKPiB0YWJsZVxuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAg KCpwX3Z0c19pZm8pID0gdnRzX2lmbzsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcGxheWJhY2tfb3BlbihBVkZvcm1hdENvbnRl eHQgKnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZf ZGF0YTsKPiA+ICsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgaWZvX2hhbmRsZV90 ICp2dHNfaWZvOwo+ID4gKyAgICBkdmRuYXZfbG9nZ2VyX2NiIGR2ZG5hdl9sb2dfY2I7Cj4gPiAr ICAgIGR2ZG5hdl9zdGF0dXNfdCBkdmRuYXZfc3RhdHVzOwo+ID4gKyAgICBkdmRuYXZfdCAqZHZk bmF2Owo+ID4gKwo+ID4gKyAgICB0aXRsZV9pbmZvX3QgdGl0bGVfaW5mbzsKPiA+ICsgICAgaW50 IHBnY247Cj4gPiArICAgIGludCBwZ247Cj4gPiArICAgIHBnY190ICpwZ2M7Cj4gPiArCj4gPiAr ICAgIGludDMyX3QgZGlzY19yZWdpb25fbWFzazsKPiA+ICsgICAgaW50MzJfdCBwbGF5ZXJfcmVn aW9uX21hc2s7Cj4gPiArICAgIGludCBjZWxsX3NlYXJjaF9oYXNfdnRzID0gMDsKPiA+ICsKPiA+ ICsgICAgLyogaWYgdGhlIHRpdGxlIGlzIHZhbGlkLCBvcGVuIGl0cyBWVFMgSUZPICovCj4gPiAr ICAgIGlmICghZHZkdmlkZW9fdm9sdW1lX2lzX3RpdGxlX3ZhbGlkX2luX2NvbnRleHQocywgYy0+ b3B0X3RpdGxlKSkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlRpdGxl IG5vdCBmb3VuZCBvciBpbnZhbGlkXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVS Uk9SX1NUUkVBTV9OT1RfRk9VTkQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgdGl0bGVfaW5m byA9IGMtPnZvbF92bWdfaWZvLT50dF9zcnB0LT50aXRsZVtjLT5vcHRfdGl0bGUgLSAxXTsKPiA+ ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb192b2x1bWVfb3Blbl92dHNfaWZvKHMsCj4g PiArICAgICAgICAgICAgdGl0bGVfaW5mby50aXRsZV9zZXRfbnIsICZ2dHNfaWZvKSkgIT0gMCkg ewo+IE91ciBjb252ZW50aW9uIGlzIHRvIHJldHVybiBuZWdhdGl2ZSB2YWx1ZXMgb24gZXJyb3Ig aW4gRkZtcGVnLiBOb3QKPiBub256ZXJvIHZhbHVlcy4KPgo+ID4gKyAgICAgICAgYXZfbG9nKHMs IEFWX0xPR19FUlJPUiwgIlRpdGxlIFZUUyBjb3VsZCBub3QgYmUgb3BlbmVkXG4iKTsKPiA+ICsK PiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKCFk dmR2aWRlb192b2x1bWVfaXNfdGl0bGVfdmFsaWRfaW5fdnRzKHRpdGxlX2luZm8sIHZ0c19pZm8p KSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVGl0bGUgVlRTIGlzIGlu dmFsaWRcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKCFkdmR2aWRlb192b2x1bWVfaXNfYW5nbGVf dmFsaWRfaW5fdGl0bGUoYy0+b3B0X2FuZ2xlLAo+IHRpdGxlX2luZm8pKSB7Cj4gPiArICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiQW5nbGUgbm90IGZvdW5kIG9yIGludmFsaWRcbiIp Owo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAg IH0KPiA+ICsKPiA+ICsgICAgLyogZGV0ZXJtaW5lIG91ciBQR0MgYW5kIFBHIChwbGF5YmFjayBj b29yZGluYXRlcykgKi8KPiA+ICsgICAgaWYgKGMtPm9wdF9wZ2MgPiAwICYmIGMtPm9wdF9wZyA+ IDApIHsKPiA+ICsgICAgICAgIGlmIChjLT5vcHRfcHR0ID4gMCkgewo+ID4gKyAgICAgICAgICAg IGF2X2xvZyhzLCBBVl9MT0dfV0FSTklORywKPiA+ICsgICAgICAgICAgICAgICAgICAgICJQVFQg b3B0aW9uIGlnbm9yZWQgYXMgUEdDIGFuZCBQRyBhcmUgcHJvdmlkZWRcbiIpOwo+ID4gKyAgICAg ICAgfQo+ID4gKwo+ID4gKyAgICAgICAgcGdjbiA9IGMtPm9wdF9wZ2M7Cj4gPiArICAgICAgICBw Z24gPSBjLT5vcHRfcGc7Cj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICBpZiAoYy0+b3B0 X3B0dCA+IHRpdGxlX2luZm8ubnJfb2ZfcHR0cykgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJQVFQgbm90IGZvdW5kXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ ID4gKyAgICAgICAgcGdjbiA9IHZ0c19pZm8tPnZ0c19wdHRfc3JwdC0+dGl0bGVbdGl0bGVfaW5m by52dHNfdHRuIC0KPiAxXS5wdHRbYy0+b3B0X3B0dCAtIDFdLnBnY247Cj4gPiArICAgICAgICBw Z24gPSB2dHNfaWZvLT52dHNfcHR0X3NycHQtPnRpdGxlW3RpdGxlX2luZm8udnRzX3R0biAtCj4g MV0ucHR0W2MtPm9wdF9wdHQgLSAxXS5wZ247Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYg KCFkdmR2aWRlb192b2x1bWVfaXNfcGdjbl9pbl92dHMocGdjbiwgdnRzX2lmbykpIHsKPiA+ICsg ICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJQR0Mgbm90IGZvdW5kXG4iKTsKPiA+ICsK PiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX1NUUkVBTV9OT1RfRk9VTkQ7Cj4gPiArICAgIH0K PiA+ICsKPiA+ICsgICAgcGdjID0gdnRzX2lmby0+dnRzX3BnY2l0LT5wZ2NpX3NycFtwZ2NuIC0g MV0ucGdjOwo+ID4gKwo+ID4gKyAgICBpZiAoIWR2ZHZpZGVvX3ZvbHVtZV9pc19wZ2NfdmFsaWRf YW5kX3NlcXVlbnRpYWwocGdjKSkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIlBHQyBub3QgdmFsaWRcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKCFkdmR2aWRlb192b2x1 bWVfaXNfcGduX2luX3BnYyhwZ24sIHBnYykpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9M T0dfRVJST1IsICJQRyBub3QgZm91bmRcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfU1RSRUFNX05PVF9GT1VORDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvKiBzZXQg dXAgbGliZHZkbmF2ICovCj4gPiArICAgIGR2ZG5hdl9sb2dfY2IgPSAoZHZkbmF2X2xvZ2dlcl9j YikgeyAucGZfbG9nID0KPiBkdmR2aWRlb19saWJkdmRuYXZfbG9nIH07Cj4gPiArICAgIGR2ZG5h dl9zdGF0dXMgPSBkdmRuYXZfb3BlbjIoJmR2ZG5hdiwgTlVMTCwgJmR2ZG5hdl9sb2dfY2IsIHMt PnVybCk7Cj4gPiArCj4gPiArICAgIGlmICghZHZkbmF2KSB7Cj4gPiArICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgbGliZHZkbmF2XG4iKTsKPiA+ ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICB9Cj4gPiAr Cj4gPiArICAgIGlmIChkdmRuYXZfc3RhdHVzICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPiBDb2Rl IHN0eWxlLiBXZSBkb24ndCB1c2UgYnJhY2VzIHdpdGggc2luZ2xlLWxpbmUgYmxvY2tzLgo+Cj4g PiArICAgICAgICBnb3RvIGVuZF9zZWFyY2hfZXJyb3JfZHZkbmF2Owo+ID4gKyAgICB9Cj4gPiAr Cj4gPiArICAgIGlmIChkdmRuYXZfc2V0X3JlYWRhaGVhZF9mbGFnKGR2ZG5hdiwgMCkgIT0gRFZE TkFWX1NUQVRVU19PSykgewo+ID4gKyAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vycm9yX2R2ZG5h djsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoZHZkbmF2X3NldF9QR0NfcG9zaXRpb25p bmdfZmxhZyhkdmRuYXYsIDEpICE9IERWRE5BVl9TVEFUVVNfT0spCj4gewo+ID4gKyAgICAgICAg Z290byBlbmRfc2VhcmNoX2Vycm9yX2R2ZG5hdjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBp ZiAoZHZkbmF2X2dldF9yZWdpb25fbWFzayhkdmRuYXYsICZkaXNjX3JlZ2lvbl9tYXNrKSAhPQo+ IERWRE5BVl9TVEFUVVNfT0spIHsKPiA+ICsgICAgICAgIGdvdG8gZW5kX3NlYXJjaF9lcnJvcl9k dmRuYXY7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGMtPm9wdF9yZWdpb24gPiAwKSB7 Cj4gPiArICAgICAgICBwbGF5ZXJfcmVnaW9uX21hc2sgPSAoMSA8PCAoYy0+b3B0X3JlZ2lvbiAt IDEpKTsKPiA+ICsgICAgfSBlbHNlIHsKPiA+ICsgICAgICAgIHBsYXllcl9yZWdpb25fbWFzayA9 IGRpc2NfcmVnaW9uX21hc2s7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGR2ZG5hdl9z ZXRfcmVnaW9uX21hc2soZHZkbmF2LCBwbGF5ZXJfcmVnaW9uX21hc2spICE9Cj4gRFZETkFWX1NU QVRVU19PSykgewo+ID4gKyAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vycm9yX2R2ZG5hdjsKPiA+ ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoZHZkbmF2X3Byb2dyYW1fcGxheShkdmRuYXYsIGMt Pm9wdF90aXRsZSwgcGdjbiwgcGduKSAhPQo+IERWRE5BVl9TVEFUVVNfT0spIHsKPiA+ICsgICAg ICAgIGdvdG8gZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsg ICAgaWYgKGR2ZG5hdl9hbmdsZV9jaGFuZ2UoZHZkbmF2LCBjLT5vcHRfYW5nbGUpICE9IERWRE5B Vl9TVEFUVVNfT0spIHsKPiA+ICsgICAgICAgIGdvdG8gZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY7 Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgLyogbG9jayBvbiB0byB0aXRsZSdzIFZUUyBhbmQg Y2hvc2VuIFBHQy9QR04gY29vcmRpbmF0ZXMgKi8KPiA+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBEVkRWSURFT19QU19NQVhfU0VBUkNIX0JMT0NLUzsgaSsrKSB7Cj4gPiArICAgICAgICBpbnQg bmF2X2V2ZW50Owo+ID4gKyAgICAgICAgaW50IG5hdl9sZW47Cj4gPiArICAgICAgICBkdmRuYXZf dnRzX2NoYW5nZV9ldmVudF90ICp2dHNfZXZlbnQ7Cj4gPiArICAgICAgICB1aW50OF90IG5hdl9i dWZbRFZEVklERU9fQkxPQ0tfU0laRV0gPSB7MH07Cj4gPiArCj4gPiArICAgICAgICBpZiAoZmZf Y2hlY2tfaW50ZXJydXB0KCZzLT5pbnRlcnJ1cHRfY2FsbGJhY2spKSB7Cj4gPiArICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhJVDsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAg IGlmIChkdmRuYXZfZ2V0X25leHRfYmxvY2soZHZkbmF2LCBuYXZfYnVmLCAmbmF2X2V2ZW50LCAm bmF2X2xlbikKPiA+ICsgICAgICAgICAgICAgICAgIT0gRFZETkFWX1NUQVRVU19PSykgewo+ID4g KyAgICAgICAgICAgIGdvdG8gZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY7Cj4gPiArICAgICAgICB9 Cj4gPiArCj4gPiArICAgICAgICBpZiAobmF2X2xlbiA+IERWRFZJREVPX0JMT0NLX1NJWkUpIHsK PiA+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBibG9jayAo dG9vIGJpZylcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVN KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICBnb3RvIGVuZF9zZWFyY2hfZXJyb3I7Cj4gPiArICAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX1RSQUNFLCAibmF2IGV2 ZW50PSVkIGxlbj0lZFxuIiwgbmF2X2V2ZW50LAo+IG5hdl9sZW4pOwo+ID4gKwo+ID4gKyAgICAg ICAgc3dpdGNoIChuYXZfZXZlbnQpIHsKPiA+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9WVFNf Q0hBTkdFOgo+ID4gKyAgICAgICAgICAgICAgICB2dHNfZXZlbnQgPSAoZHZkbmF2X3Z0c19jaGFu Z2VfZXZlbnRfdCAqKSBuYXZfYnVmOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBpZiAoY2Vs bF9zZWFyY2hfaGFzX3Z0cykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgaWYgKHZ0c19ldmVu dC0+bmV3X3Z0c04gIT0gdGl0bGVfaW5mby50aXRsZV9zZXRfbnIKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfHwgdnRzX2V2ZW50LT5uZXdfZG9tYWluICE9Cj4gRFZEX0RPTUFJTl9W VFNUaXRsZSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0df RVJST1IsICJVbmV4cGVjdGVkIFZUUwo+IGNoYW5nZVxuIik7Cj4gPiArCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlBVVF9DSEFOR0VEOwo+ID4gKwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kX3NlYXJjaF9lcnJvcjsKPiA+ICsgICAgICAg ICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAg ICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGlmICh2dHNfZXZlbnQt Pm5ld192dHNOID09IHRpdGxlX2luZm8udGl0bGVfc2V0X25yCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgJiYgdnRzX2V2ZW50LT5uZXdfZG9tYWluID09Cj4gRFZEX0RPTUFJTl9WVFNUaXRs ZSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgY2VsbF9zZWFyY2hfaGFzX3Z0cyA9IDE7Cj4g PiArICAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgY29udGludWU7 Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfQ0VMTF9DSEFOR0U6Cj4gPiArICAgICAgICAg ICAgICAgIC8vIGlmIHdlIG5lZWQgbW9yZSBpbmZvIGFib3V0IHRoZSBjZWxsOgo+ID4gKyAgICAg ICAgICAgICAgICAvLyBkdmRuYXZfY2VsbF9jaGFuZ2VfZXZlbnRfdCAqZXZlbnRfZGF0YSA9Cj4g PiArICAgICAgICAgICAgICAgIC8vICAgICAoZHZkbmF2X2NlbGxfY2hhbmdlX2V2ZW50X3QgKikg bmF2X2J1ZjsKPiA+ICsgICAgICAgICAgICAgICAgaW50IGNoZWNrX3RpdGxlOwo+ID4gKyAgICAg ICAgICAgICAgICBpbnQgY2hlY2tfcGdjbjsKPiA+ICsgICAgICAgICAgICAgICAgaW50IGNoZWNr X3BnbjsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKCFjZWxsX3NlYXJjaF9oYXNfdnRz KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAgICAgICAg ICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBkdmRuYXZfY3VycmVudF90aXRsZV9wcm9n cmFtKGR2ZG5hdiwgJmNoZWNrX3RpdGxlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZjaGVja19wZ2NuLCAmY2hlY2tfcGduKTsKPiA+ICsKPiA+ICsgICAg ICAgICAgICAgICAgaWYgKGNoZWNrX3RpdGxlID09IGMtPm9wdF90aXRsZSAmJiBjaGVja19wZ2Nu ID09IHBnY24KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAmJiBjaGVja19wZ24gPT0gcGdu ICYmCj4gZHZkbmF2X2lzX2RvbWFpbl92dHMoZHZkbmF2KSkgewo+ID4gKyAgICAgICAgICAgICAg ICAgICAgZ290byBlbmRfcmVhZHk7Cj4gPiArICAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsg ICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfU1RJ TExfRlJBTUU6Cj4gPiArICAgICAgICAgICAgICAgIGR2ZG5hdl9zdGlsbF9za2lwKGR2ZG5hdik7 Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgIGNh c2UgRFZETkFWX1dBSVQ6Cj4gPiArICAgICAgICAgICAgICAgIGR2ZG5hdl93YWl0X3NraXAoZHZk bmF2KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAg ICAgY2FzZSBEVkROQVZfU1RPUDoKPiA+ICsgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9J TlBVVF9DSEFOR0VEOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZF9zZWFyY2hf ZXJyb3I7Cj4gPiArICAgICAgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICAgICAgY29u dGludWU7Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsKPiA+ICtlbmRfc2VhcmNoX2Vy cm9yX2R2ZG5hdjoKPiA+ICsgICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgImxpYmR2ZG5hdjogJXNcbiIsCj4gZHZkbmF2X2Vycl90b19z dHJpbmcoZHZkbmF2KSk7Cj4gPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJFcnJvciBz dGFydGluZyBwbGF5YmFja1xuIik7Cj4gPiArCj4gPiArZW5kX3NlYXJjaF9lcnJvcjoKPiA+ICsg ICAgZHZkbmF2X2Nsb3NlKGR2ZG5hdik7Cj4gPiArICAgIGlmb0Nsb3NlKHZ0c19pZm8pOwo+ID4g Kwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK2VuZF9yZWFkeToKPiA+ICsgICAgLyog dXBkYXRlIHRoZSBjb250ZXh0ICovCj4gPiArICAgIGMtPnBsYXlfdnRzX2lmbyA9IHZ0c19pZm87 Cj4gPiArICAgIGMtPnBsYXlfcGdjID0gcGdjOwo+ID4gKyAgICBjLT5wbGF5X3Z0c24gPSB0aXRs ZV9pbmZvLnRpdGxlX3NldF9ucjsKPiA+ICsgICAgYy0+cGxheV9wZ2NuID0gcGdjbjsKPiA+ICsg ICAgYy0+cGxheV9kdmRuYXYgPSBkdmRuYXY7Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdmR2aWRlb19wbGF5YmFja19jbG9zZShBVkZvcm1h dENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMt PnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaWYgKGMtPnBsYXlfZHZkbmF2KSB7Cj4gPiArICAg ICAgICBkdmRuYXZfY2xvc2UoYy0+cGxheV9kdmRuYXYpOwo+ID4gKyAgICAgICAgYy0+cGxheV9k dmRuYXYgPSBOVUxMOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChjLT5wbGF5X3Z0c19p Zm8pIHsKPiA+ICsgICAgICAgIGlmb0Nsb3NlKGMtPnBsYXlfdnRzX2lmbyk7Cj4gPiArICAgICAg ICBjLT5wbGF5X3Z0c19pZm8gPSBOVUxMOwo+ID4gKyAgICB9Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgZHZkdmlkZW9fdmlkZW9fc3RyZWFtX2FuYWx5emUodmlkZW9fYXR0cl90IHZpZGVv X2F0dHIsCj4gPiArICAgICAgICBlbnVtIEFWQ29kZWNJRCAqcF9jb2RlY19pZCwgQVZSYXRpb25h bCAqcF9mcmFtZXJhdGUsCj4gPiArICAgICAgICBpbnQgKnBfaGVpZ2h0LCBpbnQgKnBfd2lkdGgp Cj4gPiArewo+ID4gKyAgICBlbnVtIEFWQ29kZWNJRCBjb2RlY19pZCA9IEFWX0NPREVDX0lEX05P TkU7Cj4gPiArICAgIEFWUmF0aW9uYWwgZnJhbWVyYXRlID0gWkVST19ROwo+ID4gKyAgICBpbnQg aGVpZ2h0ID0gMDsKPiA+ICsgICAgaW50IHdpZHRoID0gMDsKPiA+ICsKPiA+ICsgICAgc3dpdGNo ICh2aWRlb19hdHRyLm1wZWdfdmVyc2lvbikgewo+ID4gKyAgICAgICAgY2FzZSBEVkRWSURFT19W VFNfTVBFR19WRVJTSU9OX01QRUcxOgo+ID4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09E RUNfSURfTVBFRzFWSURFTzsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIGNh c2UgRFZEVklERU9fVlRTX01QRUdfVkVSU0lPTl9NUEVHMjoKPiA+ICsgICAgICAgICAgICBjb2Rl Y19pZCA9IEFWX0NPREVDX0lEX01QRUcyVklERU87Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgc3dpdGNoICh2aWRlb19hdHRyLnZpZGVvX2Zvcm1hdCkg ewo+ID4gKyAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfUElDVFVSRV9GT1JNQVRfTlRTQzoKPiA+ ICsgICAgICAgICAgICBmcmFtZXJhdGUgPSBEVkRWSURFT19OVFNDX0ZSQU1FUkFURV9ROwo+ID4g KyAgICAgICAgICAgIGhlaWdodCA9IERWRFZJREVPX05UU0NfSEVJR0hUOwo+ID4gKyAgICAgICAg ICAgIGJyZWFrOwo+ID4gKyAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfUElDVFVSRV9GT1JNQVRf UEFMOgo+ID4gKyAgICAgICAgICAgIGZyYW1lcmF0ZSA9IERWRFZJREVPX1BBTF9GUkFNRVJBVEVf UTsKPiA+ICsgICAgICAgICAgICBoZWlnaHQgPSBEVkRWSURFT19QQUxfSEVJR0hUOwo+ID4gKyAg ICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChoZWlnaHQgPiAw KSB7Cj4gPiArICAgICAgICBzd2l0Y2ggKHZpZGVvX2F0dHIucGljdHVyZV9zaXplKSB7Cj4gPiAr ICAgICAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfUElDVFVSRV9TSVpFX0QxOgo+ID4gKyAgICAg ICAgICAgICAgICB3aWR0aCA9IERWRFZJREVPX0QxX1dJRFRIOwo+ID4gKyAgICAgICAgICAgICAg ICBicmVhazsKPiA+ICsgICAgICAgICAgICBjYXNlIERWRFZJREVPX1ZUU19QSUNUVVJFX1NJWkVf NENJRjoKPiA+ICsgICAgICAgICAgICAgICAgd2lkdGggPSBEVkRWSURFT180Q0lGX1dJRFRIOwo+ ID4gKyAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICBjYXNlIERWRFZJREVP X1ZUU19QSUNUVVJFX1NJWkVfRDFfSEFMRjoKPiA+ICsgICAgICAgICAgICAgICAgd2lkdGggPSBE VkRWSURFT19EMV9IQUxGX1dJRFRIOwo+ID4gKyAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsg ICAgICAgICAgICBjYXNlIERWRFZJREVPX1ZUU19QSUNUVVJFX1NJWkVfQ0lGOgo+ID4gKyAgICAg ICAgICAgICAgICB3aWR0aCA9IERWRFZJREVPX0NJRl9XSURUSDsKPiA+ICsgICAgICAgICAgICAg ICAgaGVpZ2h0IC89IDI7Cj4gPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAg fQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChjb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9O T05FIHx8IGF2X2NtcF9xKGZyYW1lcmF0ZSwgWkVST19RKSA9PSAwCj4gYXZfY21wX3EgZm9yIGNv bXBhcmluZyBhIHJhdGlvbmFsIHRvIHplcm8gaXMgdW5uZWNlc3NhcnkuIEp1c3QgY2hlY2sgaWYK PiB0aGUgbnVtZXJhdG9yIGlzIG5vbnplcm8sIGFzIGEgZnJhY3Rpb24gaXMgemVybyBpZiBhbmQg b25seSBpZiBpdHMKPiBudW1lcmF0b3IgaXMgemVyby4KPgo+ID4gKyAgICAgICAgICAgIHx8IHdp ZHRoIDwgMSB8fCBoZWlnaHQgPCAxKSB7Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAoKnBfY29kZWNfaWQpID0gY29kZWNf aWQ7Cj4gPiArICAgICgqcF9mcmFtZXJhdGUpID0gZnJhbWVyYXRlOwo+ID4gKyAgICAoKnBfaGVp Z2h0KSA9IGhlaWdodDsKPiA+ICsgICAgKCpwX3dpZHRoKSA9IHdpZHRoOwo+ID4gKwo+ID4gKyAg ICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb192aWRlb19z dHJlYW1fdG9fYXZzdHJlYW0oQVZGb3JtYXRDb250ZXh0ICpzLAo+ID4gKyAgICAgICAgZW51bSBB VkNvZGVjSUQgY29kZWNfaWQsIEFWUmF0aW9uYWwgZnJhbWVyYXRlLAo+ID4gKyAgICAgICAgaW50 IGhlaWdodCwgaW50IHdpZHRoLAo+ID4gKyAgICAgICAgZW51bSBBVlN0cmVhbVBhcnNlVHlwZSBu ZWVkX3BhcnNpbmcpCj4gPiArewo+ID4gKyAgICBBVlN0cmVhbSAqc3Q7Cj4gPiArICAgIEZGU3Ry ZWFtICpzdGk7Cj4gPiArCj4gPiArICAgIHN0ID0gYXZmb3JtYXRfbmV3X3N0cmVhbShzLCBOVUxM KTsKPiA+ICsgICAgaWYgKCFzdCkgewo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBzdC0+aWQgPSBEVkRWSURFT19TVEFSVENPREVf VklERU87Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9W SURFTzsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IGNvZGVjX2lkOwo+ID4gKyAg ICBzdC0+Y29kZWNwYXItPndpZHRoID0gd2lkdGg7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+aGVp Z2h0ID0gaGVpZ2h0Owo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmZvcm1hdCA9IERWRFZJREVPX1BJ WEVMX0ZPUk1BVDsKPiA+ICsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5mcmFtZXJhdGUgPSBmcmFt ZXJhdGU7Cj4gPiArI2lmIEZGX0FQSV9SX0ZSQU1FX1JBVEUKPiA+ICsgICAgc3QtPnJfZnJhbWVf cmF0ZSA9IGZyYW1lcmF0ZTsKPiA+ICsjZW5kaWYKPiA+ICsgICAgc3QtPmF2Z19mcmFtZV9yYXRl ID0gZnJhbWVyYXRlOwo+ID4gKwo+ID4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRW SURFT19QVFNfV1JBUF9CSVRTLAo+ID4gKyAgICAgICAgRFZEVklERU9fVElNRV9CQVNFX1EubnVt LCBEVkRWSURFT19USU1FX0JBU0VfUS5kZW4pOwo+ID4gKwo+ID4gKyAgICBzdGkgPSBmZnN0cmVh bShzdCk7Cj4gPiArICAgIHN0aS0+cmVxdWVzdF9wcm9iZSA9IDA7Cj4gPiArICAgIHN0aS0+bmVl ZF9wYXJzaW5nID0gbmVlZF9wYXJzaW5nOwo+ID4gKyAgICBzdGktPmF2Y3R4LT5mcmFtZXJhdGUg PSBmcmFtZXJhdGU7Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IGR2ZHZpZGVvX3ZpZGVvX3N0cmVhbV9yZWdpc3RlcihBVkZvcm1hdENvbnRleHQg KnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0 YTsKPiA+ICsKPiA+ICsgICAgZW51bSBBVkNvZGVjSUQgY29kZWNfaWQ7Cj4gPiArICAgIEFWUmF0 aW9uYWwgZnJhbWVyYXRlOwo+ID4gKyAgICBpbnQgaGVpZ2h0Owo+ID4gKyAgICBpbnQgd2lkdGg7 Cj4gPiArCj4gPiArICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0KPiBkdmR2 aWRlb192aWRlb19zdHJlYW1fYW5hbHl6ZShjLT5wbGF5X3Z0c19pZm8tPnZ0c2lfbWF0LT52dHNf dmlkZW9fYXR0ciwKPiAmY29kZWNfaWQsCj4gPiArICAgICAgICAgICAgJmZyYW1lcmF0ZSwgJmhl aWdodCwgJndpZHRoKSkgIT0gMCkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgdmlkZW8gcGFyYW1ldGVycyBpbiBWVFMKPiBJRk9cbiIpOwo+ID4gKwo+ID4g KyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9 IGR2ZHZpZGVvX3ZpZGVvX3N0cmVhbV90b19hdnN0cmVhbShjLT5tcGVnX2N0eCwgY29kZWNfaWQs Cj4gPiArICAgICAgICAgICAgZnJhbWVyYXRlLCBoZWlnaHQsIHdpZHRoLCBBVlNUUkVBTV9QQVJT RV9GVUxMKSkgIT0gMCkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVu YWJsZSB0byBhbGxvY2F0ZSB2aWRlbyBzdHJlYW0KPiAoc3ViZGVtdXgpXG4iKTsKPiA+ICsKPiA+ ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKChyZXQg PSBkdmR2aWRlb192aWRlb19zdHJlYW1fdG9fYXZzdHJlYW0ocywgY29kZWNfaWQsCj4gPiArICAg ICAgICAgICAgZnJhbWVyYXRlLCBoZWlnaHQsIHdpZHRoLCBBVlNUUkVBTV9QQVJTRV9OT05FKSkg IT0gMCkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBh bGxvY2F0ZSB2aWRlbyBzdHJlYW1cbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCBkdmR2aWRlb19hdWRpb19zdHJlYW1fYW5hbHl6ZShhdWRpb19hdHRyX3QgYXVkaW9f YXR0ciwKPiA+ICsgICAgICAgIHVpbnQxNl90IGF1ZGlvX2NvbnRyb2wsIGVudW0gQVZDb2RlY0lE ICpwX2NvZGVjX2lkLCBpbnQKPiAqcF9zdGFydGNvZGUsCj4gPiArICAgICAgICBpbnQgKnBfc2Ft cGxlX3JhdGUsIGludCAqcF9zYW1wbGVfYml0cywKPiA+ICsgICAgICAgIGludCAqcF9uYl9jaGFu bmVscywgY2hhciAqKmxhbmdfaXNvNjM5X18yKQo+ID4gK3sKPiA+ICsgICAgZW51bSBBVkNvZGVj SUQgY29kZWNfaWQgPSBBVl9DT0RFQ19JRF9OT05FOwo+ID4gKyAgICBpbnQgc3RhcnRjb2RlID0g MDsKPiA+ICsgICAgaW50IHNhbXBsZV9yYXRlID0gMDsKPiA+ICsgICAgaW50IHNhbXBsZV9iaXRz ID0gMDsKPiA+ICsgICAgaW50IG5iX2NoYW5uZWxzID0gMDsKPiA+ICsKPiA+ICsgICAgaW50IHBv c2l0aW9uID0gKGF1ZGlvX2NvbnRyb2wgJiAweDdGMDApID4+IDg7Cj4gPiArCj4gPiArICAgIHN3 aXRjaCAoYXVkaW9fYXR0ci5hdWRpb19mb3JtYXQpIHsKPiA+ICsgICAgICAgIGNhc2UgRFZEVklE RU9fVlRTX0FVRElPX0ZPUk1BVF9BQzM6Cj4gPiArICAgICAgICAgICAgY29kZWNfaWQgPSBBVl9D T0RFQ19JRF9BQzM7Cj4gPiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsKPiA+ICsg ICAgICAgICAgICBzdGFydGNvZGUgPSBEVkRWSURFT19TVEFSVENPREVfT0ZGU0VUX0FVRElPX0FD MyArIHBvc2l0aW9uOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgY2FzZSBE VkRWSURFT19WVFNfQVVESU9fRk9STUFUX01QMToKPiA+ICsgICAgICAgICAgICBjb2RlY19pZCA9 IEFWX0NPREVDX0lEX01QMTsKPiA+ICsgICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ ID4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9IERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVE SU9fTVAxICsgcG9zaXRpb247Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBj YXNlIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfTVAyOgo+ID4gKyAgICAgICAgICAgIGNvZGVj X2lkID0gQVZfQ09ERUNfSURfTVAyOwo+ID4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgw MDA7Cj4gPiArICAgICAgICAgICAgc3RhcnRjb2RlID0gRFZEVklERU9fU1RBUlRDT0RFX09GRlNF VF9BVURJT19NUDIgKyBwb3NpdGlvbjsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAg ICAgIGNhc2UgRFZEVklERU9fVlRTX0FVRElPX0ZPUk1BVF9QQ006Cj4gPiArICAgICAgICAgICAg Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9QQ01fRFZEOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIHN3 aXRjaCAoYXVkaW9fYXR0ci5zYW1wbGVfZnJlcXVlbmN5KSB7Cj4gPiArICAgICAgICAgICAgICAg IGNhc2UgRFZEVklERU9fVlRTX0FVRElPX1NBTVBMRV9SQVRFXzQ4SzoKPiA+ICsgICAgICAgICAg ICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gPiArICAgICAgICAgICAgICAgICAgICBi cmVhazsKPiA+ICsgICAgICAgICAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfQVVESU9fU0FNUExF X1JBVEVfOTZLOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA5NjAwMDsK PiA+ICsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsK PiA+ICsgICAgICAgICAgICBzd2l0Y2ggKGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uKSB7Cj4gPiAr ICAgICAgICAgICAgICAgIGNhc2UgRFZEVklERU9fVlRTX0FVRElPX1FVQU5USVpBVElPTl8xNjoK PiA+ICsgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9iaXRzID0gMTY7Cj4gPiArICAgICAgICAg ICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgICAgY2FzZSBEVkRWSURFT19WVFNf QVVESU9fUVVBTlRJWkFUSU9OXzIwOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgc2FtcGxlX2Jp dHMgPSAyMDsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAg ICAgICBjYXNlIERWRFZJREVPX1ZUU19BVURJT19RVUFOVElaQVRJT05fMjQ6Cj4gPiArICAgICAg ICAgICAgICAgICAgICBzYW1wbGVfYml0cyA9IDI0Owo+ID4gKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4gPiArICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgIHN0YXJ0Y29k ZSA9IERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9fUENNICsgcG9zaXRpb247Cj4gPiAr ICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBjYXNlIERWRFZJREVPX1ZUU19BVURJT19G T1JNQVRfRFRTOgo+ID4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfRFRTOwo+ ID4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gPiArICAgICAgICAgICAgc3Rh cnRjb2RlID0gRFZEVklERU9fU1RBUlRDT0RFX09GRlNFVF9BVURJT19EVFMgKyBwb3NpdGlvbjsK PiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBuYl9jaGFu bmVscyA9IGF1ZGlvX2F0dHIuY2hhbm5lbHMgKyAxOwo+ID4gKwo+ID4gKyAgICBpZiAoY29kZWNf aWQgPT0gQVZfQ09ERUNfSURfTk9ORSB8fCBzdGFydGNvZGUgPT0gMAo+ID4gKyAgICAgICAgICAg IHx8IHNhbXBsZV9yYXRlID09IDAgfHwgbmJfY2hhbm5lbHMgPT0gMCkgewo+ID4gKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgKCpw X2NvZGVjX2lkKSA9IGNvZGVjX2lkOwo+ID4gKyAgICAoKnBfc3RhcnRjb2RlKSA9IHN0YXJ0Y29k ZTsKPiA+ICsgICAgKCpwX3NhbXBsZV9yYXRlKSA9IHNhbXBsZV9yYXRlOwo+ID4gKyAgICAoKnBf c2FtcGxlX2JpdHMpID0gc2FtcGxlX2JpdHM7Cj4gPiArICAgICgqcF9uYl9jaGFubmVscykgPSBu Yl9jaGFubmVsczsKPiA+ICsgICAgKCpsYW5nX2lzbzYzOV9fMikgPQo+IGR2ZHZpZGVvX2xhbmdf Y29kZV90b19pc282MzlfXzIoYXVkaW9fYXR0ci5sYW5nX2NvZGUpOwo+ID4gKwo+ID4gKyAgICBy ZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19hdWRpb19zdHJl YW1fdG9fYXZzdHJlYW0oQVZGb3JtYXRDb250ZXh0ICpzLAo+ID4gKyAgICAgICAgZW51bSBBVkNv ZGVjSUQgY29kZWNfaWQsIGludCBzdGFydGNvZGUsIGludCBzYW1wbGVfcmF0ZSwKPiA+ICsgICAg ICAgIGludCBzYW1wbGVfYml0cywgaW50IG5iX2NoYW5uZWxzLCBjaGFyICpsYW5nX2lzbzYzOV9f MiwKPiA+ICsgICAgICAgIGVudW0gQVZTdHJlYW1QYXJzZVR5cGUgbmVlZF9wYXJzaW5nKQo+ID4g K3sKPiA+ICsgICAgQVZTdHJlYW0gKnN0Owo+ID4gKyAgICBGRlN0cmVhbSAqc3RpOwo+ID4gKwo+ ID4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7Cj4gPiArICAgIGlmICgh c3QpIHsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgIH0KPiA+ ICsKPiA+ICsgICAgc3QtPmlkID0gc3RhcnRjb2RlOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNv ZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfQVVESU87Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Y29k ZWNfaWQgPSBjb2RlY19pZDsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5zYW1wbGVfcmF0ZSA9IHNh bXBsZV9yYXRlOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNoX2xheW91dC5uYl9jaGFubmVscyA9 IG5iX2NoYW5uZWxzOwo+ID4gKwo+ID4gKyAgICBpZiAoc2FtcGxlX2JpdHMgPiAwKSB7Cj4gPiAr ICAgICAgICBzdC0+Y29kZWNwYXItPmZvcm1hdCA9IHNhbXBsZV9iaXRzID09IDE2ID8KPiA+ICsg ICAgICAgICAgICAgICAgQVZfU0FNUExFX0ZNVF9TMTYKPiA+ICsgICAgICAgICAgICAgICAgOiBB Vl9TQU1QTEVfRk1UX1MzMjsKPiA+ICsgICAgICAgIHN0LT5jb2RlY3Bhci0+Yml0c19wZXJfY29k ZWRfc2FtcGxlID0gc2FtcGxlX2JpdHM7Cj4gPiArICAgICAgICBzdC0+Y29kZWNwYXItPmJpdHNf cGVyX3Jhd19zYW1wbGUgPSBzYW1wbGVfYml0czsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBp ZiAobGFuZ19pc282MzlfXzIpIHsKPiA+ICsgICAgICAgIGF2X2RpY3Rfc2V0KCZzdC0+bWV0YWRh dGEsICJsYW5ndWFnZSIsIGxhbmdfaXNvNjM5X18yLCAwKTsKPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNfV1JBUF9CSVRTLAo+ID4g KyAgICAgICAgRFZEVklERU9fVElNRV9CQVNFX1EubnVtLCBEVkRWSURFT19USU1FX0JBU0VfUS5k ZW4pOwo+ID4gKwo+ID4gKyAgICBzdGkgPSBmZnN0cmVhbShzdCk7Cj4gPiArICAgIHN0aS0+cmVx dWVzdF9wcm9iZSA9IDA7Cj4gPiArICAgIHN0aS0+bmVlZF9wYXJzaW5nID0gbmVlZF9wYXJzaW5n Owo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBk dmR2aWRlb19hdWRpb19zdHJlYW1fcmVnaXN0ZXJfYWxsKEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4g Kwo+ID4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8Cj4gYy0+cGxheV92dHNfaWZvLT52dHNpX21h dC0+bnJfb2ZfdnRzX2F1ZGlvX3N0cmVhbXM7IGkrKykgewo+ID4gKyAgICAgICAgZW51bSBBVkNv ZGVjSUQgY29kZWNfaWQ7Cj4gPiArICAgICAgICBpbnQgc3RhcnRjb2RlOwo+ID4gKyAgICAgICAg aW50IHNhbXBsZV9yYXRlOwo+ID4gKyAgICAgICAgaW50IHNhbXBsZV9iaXRzOwo+ID4gKyAgICAg ICAgaW50IG5iX2NoYW5uZWxzOwo+ID4gKyAgICAgICAgY2hhciAqbGFuZ19pc282MzlfXzI7Cj4g PiArICAgICAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICAgICAgaWYgKCEoYy0+cGxheV9wZ2Mt PmF1ZGlvX2NvbnRyb2xbaV0KPiA+ICsgICAgICAgICAgICAgICAgJiBEVkRWSURFT19BVURJT19D T05UUk9MX0VOQUJMRURfTUFTSykpIHsKPiA+ICsgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsg ICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3Ry ZWFtX2FuYWx5emUoCj4gPiArICAgICAgICAgICAgICAgIGMtPnBsYXlfdnRzX2lmby0+dnRzaV9t YXQtPnZ0c19hdWRpb19hdHRyW2ldLAo+ID4gKyAgICAgICAgICAgICAgICBjLT5wbGF5X3BnYy0+ YXVkaW9fY29udHJvbFtpXSwgJmNvZGVjX2lkLCAmc3RhcnRjb2RlLAo+ID4gKyAgICAgICAgICAg ICAgICAmc2FtcGxlX3JhdGUsICZzYW1wbGVfYml0cywgJm5iX2NoYW5uZWxzLAo+ID4gKyAgICAg ICAgICAgICAgICAmbGFuZ19pc282MzlfXzIpKSAhPSAwKSB7Cj4gPiArICAgICAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYXVkaW8gcGFyYW1ldGVycyBpbiBWVFMKPiBJ Rk9cbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICAgICB9 Cj4gPiArCj4gPiArICAgICAgICBpZiAoYy0+cGxheV92dHNfaWZvLT52dHNpX21hdC0+Cj4gPiAr ICAgICAgICAgICAgICAgIHZ0c19hdWRpb19hdHRyW2ldLmFwcGxpY2F0aW9uX21vZGUgPT0gMSkg ewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsCj4gPiArICAgICAgICAg ICAgICAgICJBdWRpbyBzdHJlYW0gdXNlcyBrYXJhb2tlIGV4dGVuc2lvbiB3aGljaCBpcwo+IHVu c3VwcG9ydGVkXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRD SFdFTENPTUU7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBmb3IgKGludCBqID0g MDsgaiA8IHMtPm5iX3N0cmVhbXM7IGorKykgewo+ID4gKyAgICAgICAgICAgIGlmIChzLT5zdHJl YW1zW2pdLT5pZCA9PSBzdGFydGNvZGUpIHsKPiA+ICsgICAgICAgICAgICAgICAgYXZfbG9nKHMs IEFWX0xPR19XQVJOSU5HLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICJBdWRpbyBzdHJl YW0gaGFzIGR1cGxpY2F0ZSBlbnRyeSBpbiBWVFMKPiBJRk9cbiIpOwo+ID4gKwo+ID4gKyAgICAg ICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICB9Cj4g PiArCj4gPiArICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV90b19hdnN0 cmVhbShjLT5tcGVnX2N0eCwKPiBjb2RlY19pZCwKPiA+ICsgICAgICAgICAgICAgICAgc3RhcnRj b2RlLCBzYW1wbGVfcmF0ZSwgc2FtcGxlX2JpdHMsIG5iX2NoYW5uZWxzLAo+ID4gKyAgICAgICAg ICAgICAgICBsYW5nX2lzbzYzOV9fMiwgQVZTVFJFQU1fUEFSU0VfRlVMTCkpICE9IDApIHsKPiA+ ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRl IHZpZGVvIHN0cmVhbQo+IChzdWJkZW11eClcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIHJl dHVybiByZXQ7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAoKHJldCA9IGR2 ZHZpZGVvX2F1ZGlvX3N0cmVhbV90b19hdnN0cmVhbShzLCBjb2RlY19pZCwKPiA+ICsgICAgICAg ICAgICAgICAgc3RhcnRjb2RlLCBzYW1wbGVfcmF0ZSwgc2FtcGxlX2JpdHMsIG5iX2NoYW5uZWxz LAo+ID4gKyAgICAgICAgICAgICAgICBsYW5nX2lzbzYzOV9fMiwgQVZTVFJFQU1fUEFSU0VfTk9O RSkpICE9IDApIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5h YmxlIHRvIGFsbG9jYXRlIGF1ZGlvCj4gc3RyZWFtXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAg ICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJl dHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnRpdGxlX2Ns dXRfcmdiX2V4dHJhZGF0YV9jYXQoCj4gPiArICAgICAgICBjb25zdCB1aW50MzJfdCAqY2x1dF9y Z2IsIHNpemVfdCBjbHV0X3JnYl9zaXplLAo+ID4gKyAgICAgICAgY2hhciAqZHN0LCBzaXplX3Qg ZHN0X3NpemUpCj4gPiArewo+ID4gKyAgICBpZiAoZHN0X3NpemUgPCBEVkRWSURFT19TVUJQX0NM VVRfUkdCX0VYVFJBREFUQV9TSVpFKSB7Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pO1RoaXMgaXMgdGhlIGVycm9yIGNvZGUgZm9yIGFuIGFsbG9jYXRpb24KPiBmYWlsdXJlLCB3 aGljaCBpcyBub3Qgd2hhdCBpcwo+IGhhcHBlbmluZyBoZXJlLiBJdCdzIGFuIGlsbGVnYWwgYXJn dW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KPgo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAg IGlmIChjbHV0X3JnYl9zaXplICE9IERWRFZJREVPX1NVQlBfQ0xVVF9TSVpFKSB7Cj4gPiArICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHNu cHJpbnRmKGRzdCwgZHN0X3NpemUsICJwYWxldHRlOiAiKTsKPiA+ICsKPiA+ICsgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBEVkRWSURFT19TVUJQX0NMVVRfTEVOOyBpKyspIHsKPiA+ICsgICAgICAg IGF2X3N0cmxjYXRmKGRzdCwgZHN0X3NpemUsCj4gPiArICAgICAgICAgICAgICAgICIlMDYiUFJJ eDMyIiVzIiwgY2x1dF9yZ2JbaV0sIGkgIT0gMTUgPyAiLCAiIDogIiIpOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIGF2X3N0cmxjYXQoZHN0LCAiXG4iLCAxKTsKPiA+ICsKPiBZb3Ugc2hvdWxk IGJlIHVzaW5nIHRoZSBBVkJQcmludCBhcGkgaGVyZSB0byBjb25zdHJ1Y3QgYSBzdHJpbmcsIG5v dAo+IGF2X3N0cmxjYXQuCj4KPgo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGludCBkdmR2aWRlb19zdWJ0aXRsZV9jbHV0X3l1dl90b19yZ2IodWludDMyX3QgKmNs dXQsCj4gPiArICAgICAgICBjb25zdCBzaXplX3QgY2x1dF9zaXplKQo+IFdoYXQgaXMgYSB5dXYt dG8tcmdiIGZ1bmN0aW9uIGRvaW5nIGluc2lkZSBhIGR2ZC12aWRlbyBkZW11eGVyPwo+Cj4gPiAr ewo+ID4gKyAgICBjb25zdCB1aW50OF90ICpjbSA9IGR2ZHZpZGVvX3l1dl9jcm9wX3RhYiArCj4g RFZEVklERU9fWVVWX05FR19DUk9QX01BWDsKPiA+ICsKPiA+ICsgICAgaW50IGksIHksIGNiLCBj cjsKPiA+ICsgICAgdWludDhfdCByLCBnLCBiOwo+ID4gKyAgICBpbnQgcl9hZGQsIGdfYWRkLCBi X2FkZDsKPiA+ICsKPiA+ICsgICAgaWYgKGNsdXRfc2l6ZSAhPSBEVkRWSURFT19TVUJQX0NMVVRf U0laRSkge1doeSBldmVuIGhhdmUgYW4KPiBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gaWYgaXQg bXVzdCBlcXVhbCBzb21lIGV4YWN0Cj4gaW50ZWdlcj8gQXQgdGhhdCBwb2ludCBqdXN0IHJlbW92 ZSBjbHV0X3NpemUgZnJvbSB0aGUgZnVuY3Rpb24gYXJndW1lbnQKPiBhbmQganVzdCB1c2UgRFZE VklERU9fU1VCUF9DTFVUX1NJWkUgaW4gaXRzIHBsYWNlLgo+Cj4KPiA+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgZm9yIChpID0gMDsg aSA8IERWRFZJREVPX1NVQlBfQ0xVVF9MRU47IGkrKykgewo+ID4gKyAgICAgICAgeSAgPSAoY2x1 dFtpXSA+PiAxNikgJiAweEZGOwo+ID4gKyAgICAgICAgY3IgPSAoY2x1dFtpXSA+PiA4KSAgJiAw eEZGOwo+ID4gKyAgICAgICAgY2IgPSBjbHV0W2ldICAgICAgICAgJiAweEZGOwo+ID4gKwo+ID4g KyAgICAgICAgWVVWX1RPX1JHQjFfQ0NJUihjYiwgY3IpOwo+ID4gKyAgICAgICAgWVVWX1RPX1JH QjJfQ0NJUihyLCBnLCBiLCB5KTsKPiA+ICsKPiA+ICsgICAgICAgIGNsdXRbaV0gPSAociA8PCAx NikgfCAoZyA8PCA4KSB8IGI7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3VidGl0bGVfc3RyZWFtX3RvX2F2 c3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqcywKPiA+ICsgICAgICAgIGludCBzdGFydGNvZGUsCj4g PiArICAgICAgICBjaGFyICpjbHV0X3JnYl9leHRyYWRhdGFfYnVmLCBpbnQgY2x1dF9yZ2JfZXh0 cmFkYXRhX2J1Zl9zaXplLAo+ID4gKyAgICAgICAgY2hhciAqbGFuZ19pc282MzlfXzIsIGVudW0g QVZTdHJlYW1QYXJzZVR5cGUgbmVlZF9wYXJzaW5nKQo+ID4gK3sKPiA+ICsgICAgQVZTdHJlYW0g KnN0Owo+ID4gKyAgICBGRlN0cmVhbSAqc3RpOwo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKwo+ID4g KyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7Cj4gPiArICAgIGlmICghc3Qp IHsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgc3QtPmlkID0gc3RhcnRjb2RlOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVj X3R5cGUgPSBBVk1FRElBX1RZUEVfU1VCVElUTEU7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Y29k ZWNfaWQgPSBBVl9DT0RFQ19JRF9EVkRfU1VCVElUTEU7Cj4gPiArCj4gPiArICAgIGlmICgocmV0 ID0gZmZfYWxsb2NfZXh0cmFkYXRhKHN0LT5jb2RlY3BhciwKPiA+ICsgICAgICAgICAgICBjbHV0 X3JnYl9leHRyYWRhdGFfYnVmX3NpemUpKSAhPSAwKSB7Cj4gPiArICAgICAgICByZXR1cm4gcmV0 Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIG1lbWNweShzdC0+Y29kZWNwYXItPmV4dHJhZGF0 YSwgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwKPiA+ICsgICAgICAgICAgICBzdC0+Y29kZWNwYXIt PmV4dHJhZGF0YV9zaXplKTsKPiA+ICsKPiA+ICsgICAgaWYgKGxhbmdfaXNvNjM5X18yKSB7Cj4g PiArICAgICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBsYW5nX2lz bzYzOV9fMiwgMCk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgYXZwcml2X3NldF9wdHNfaW5m byhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywKPiA+ICsgICAgICAgIERWRFZJREVPX1RJTUVf QkFTRV9RLm51bSwgRFZEVklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiA+ICsKPiA+ICsgICAgc3Rp ID0gZmZzdHJlYW0oc3QpOwo+ID4gKyAgICBzdGktPnJlcXVlc3RfcHJvYmUgPSAwOwo+ID4gKyAg ICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFyc2luZzsKPiA+ICsKPiA+ICsgICAgcmV0dXJu IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3VidGl0bGVfc3RyZWFt X3JlZ2lzdGVyKEFWRm9ybWF0Q29udGV4dCAqcywKPiA+ICsgICAgICAgIGludCBwb3NpdGlvbiwK PiA+ICsgICAgICAgIGNoYXIgKmNsdXRfcmdiX2V4dHJhZGF0YV9idWYsIGludCBjbHV0X3JnYl9l eHRyYWRhdGFfYnVmX3NpemUsCj4gPiArICAgICAgICBjaGFyICpsYW5nX2lzbzYzOV9fMikKPiA+ ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4g Kwo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICBpbnQgc3RhcnRjb2RlID0gRFZEVklE RU9fU1RBUlRDT0RFX09GRlNFVF9TVUJQICsgcG9zaXRpb247Cj4gPiArCj4gPiArICAgIGZvciAo aW50IGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsgaSsrKSB7Cj4gPiArICAgICAgICAvKiBkb24n dCBuZWVkIHRvIHdhcm4gdGhlIHVzZXIgYWJvdXQgdGhpcywgc2luY2UgcGFyYW1zIHdvbid0Cj4g Y2hhbmdlICovCj4gPiArICAgICAgICBpZiAocy0+c3RyZWFtc1tpXS0+aWQgPT0gc3RhcnRjb2Rl KSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19UUkFDRSwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICJTdWJ0aXRsZSBzdHJlYW0gaGFzIGR1cGxpY2F0ZSBlbnRyeSBpbiBWVFMg SUZPXG4iKTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiA+ICsgICAgICAgIH0KPiA+ICsg ICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV90 b19hdnN0cmVhbShjLT5tcGVnX2N0eCwKPiBzdGFydGNvZGUsCj4gPiArICAgICAgICAgICAgY2x1 dF9yZ2JfZXh0cmFkYXRhX2J1ZiwgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1Zl9zaXplLAo+ID4gKyAg ICAgICAgICAgIGxhbmdfaXNvNjM5X18yLCBBVlNUUkVBTV9QQVJTRV9GVUxMKSkgIT0gMCkgewo+ ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBz dWJ0aXRsZSBzdHJlYW0KPiAoc3ViZGVtdXgpXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJ0 aXRsZV9zdHJlYW1fdG9fYXZzdHJlYW0ocywgc3RhcnRjb2RlLAo+ID4gKyAgICAgICAgICAgIGNs dXRfcmdiX2V4dHJhZGF0YV9idWYsIGNsdXRfcmdiX2V4dHJhZGF0YV9idWZfc2l6ZSwKPiA+ICsg ICAgICAgICAgICBsYW5nX2lzbzYzOV9fMiwgQVZTVFJFQU1fUEFSU0VfTk9ORSkpICE9IDApIHsK PiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gYWxsb2NhdGUg c3VidGl0bGUgc3RyZWFtXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgZHZkdmlkZW9fc3VidGl0bGVfc3RyZWFtX3JlZ2lzdGVyX2FsbChBVkZvcm1hdENvbnRleHQg KnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0 YTsKPiA+ICsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsgICAgdWludDMyX3QgY2x1dF9yZ2JbRFZE VklERU9fU1VCUF9DTFVUX1NJWkVdID0gezB9Owo+ID4gKyAgICBjaGFyIGNsdXRfcmdiX2V4dHJh ZGF0YV9idWZbRFZEVklERU9fU1VCUF9DTFVUX1JHQl9FWFRSQURBVEFfU0laRV0KPiA9IHswfTsK PiA+ICsKPiA+ICsgICAgaWYgKGMtPnBsYXlfdnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19z dWJwX3N0cmVhbXMgPCAxKSB7Cj4gPiArICAgICAgICByZXR1cm4gMDsKPiA+ICsgICAgfQo+ID4g Kwo+ID4gKyAgICAvKiBpbml0aWFsaXplIHRoZSBwYWxldHRlIChzYW1lIGZvciBhbGwgc3RyZWFt cyBpbiB0aGlzIFBHQykgKi8KPiA+ICsgICAgbWVtY3B5KGNsdXRfcmdiLCBjLT5wbGF5X3BnYy0+ cGFsZXR0ZSwgRFZEVklERU9fU1VCUF9DTFVUX1NJWkUpOwo+ID4gKwo+ID4gKyAgICBpZiAoKHJl dCA9IGR2ZHZpZGVvX3N1YnRpdGxlX2NsdXRfeXV2X3RvX3JnYigKPiA+ICsgICAgICAgICAgICBj bHV0X3JnYiwgRFZEVklERU9fU1VCUF9DTFVUX1NJWkUpKSAhPSAwKSB7Cj4gPiArICAgICAgICBh dl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNvbnZlcnQgc3VidGl0bGUKPiBwYWxl dHRlXG4iKTtXaHkgYXJlIHlvdSBjb252ZXJ0aW5nIHRoZSBzdWJ0aXRsZSBwYWxldHRlPwo+Cj4g PiArCj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlm ICgocmV0ID0gZHZkdmlkZW9fc3VidGl0bGVfY2x1dF9yZ2JfZXh0cmFkYXRhX2NhdCgKPiA+ICsg ICAgICAgICAgICBjbHV0X3JnYiwgRFZEVklERU9fU1VCUF9DTFVUX1NJWkUsCj4gPiArICAgICAg ICAgICAgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwKPiBEVkRWSURFT19TVUJQX0NMVVRfUkdCX0VY VFJBREFUQV9TSVpFKSkgIT0gMCkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIlVuYWJsZSB0byBzZXQgdXAgc3VidGl0bGUKPiBleHRyYWRhdGFcbiIpOwo+ID4gKwo+ID4g KyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IGMtPnBsYXlfdnRzX2lmby0+Cj4gPiArICAgICAgICAgICAgdnRzaV9tYXQtPm5y X29mX3Z0c19zdWJwX3N0cmVhbXM7IGkrKykgewo+ID4gKyAgICAgICAgdWludDMyX3Qgc3VicF9j b250cm9sOwo+ID4gKyAgICAgICAgc3VicF9hdHRyX3Qgc3VicF9hdHRyOwo+ID4gKyAgICAgICAg dmlkZW9fYXR0cl90IHZpZGVvX2F0dHI7Cj4gPiArICAgICAgICBjaGFyICpsYW5nX2lzbzYzOV9f MjsKPiA+ICsKPiA+ICsgICAgICAgIHN1YnBfY29udHJvbCA9IGMtPnBsYXlfcGdjLT5zdWJwX2Nv bnRyb2xbaV07Cj4gPiArCj4gPiArICAgICAgICBpZiAoIShzdWJwX2NvbnRyb2wgJiBEVkRWSURF T19TVUJQX0NPTlRST0xfRU5BQkxFRF9NQVNLKSkgewo+ID4gKyAgICAgICAgICAgIGNvbnRpbnVl Owo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgc3VicF9hdHRyID0gYy0+cGxheV92 dHNfaWZvLT52dHNpX21hdC0+dnRzX3N1YnBfYXR0cltpXTsKPiA+ICsgICAgICAgIHZpZGVvX2F0 dHIgPSBjLT5wbGF5X3Z0c19pZm8tPnZ0c2lfbWF0LT52dHNfdmlkZW9fYXR0cjsKPiA+ICsgICAg ICAgIGxhbmdfaXNvNjM5X18yID0KPiBkdmR2aWRlb19sYW5nX2NvZGVfdG9faXNvNjM5X18yKHN1 YnBfYXR0ci5sYW5nX2NvZGUpOwo+ID4gKwo+ID4gKyAgICAgICAgLyogdGhlcmUgY2FuIGJlIHNl dmVyYWwgcHJlc2VudGF0aW9ucyBmb3Igb25lIFNQVSAqLwo+ID4gKyAgICAgICAgLyogZm9yIG5v dywgYmUgZmxleGlibGUgd2l0aCB0aGUgREFSIGNoZWNrIGR1ZSB0byB3ZWlyZAo+IGF1dGhvcmlu ZyAqLwo+ID4gKyAgICAgICAgaWYgKHZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3RfcmF0aW8gPiAw KSB7Cj4gPiArICAgICAgICAgICAgLyogMTY6OSAqLwo+ID4gKyAgICAgICAgICAgIHJldCA9IGR2 ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV9yZWdpc3RlcihzLAo+ID4gKyAgICAgICAgICAgICAgICAo KHN1YnBfY29udHJvbCA+PiAxNikgJiAweDFGKSwKPiA+ICsgICAgICAgICAgICAgICAgY2x1dF9y Z2JfZXh0cmFkYXRhX2J1ZiwKPiA+ICsgICAgICAgICAgICAgICAgRFZEVklERU9fU1VCUF9DTFVU X1JHQl9FWFRSQURBVEFfU0laRSwKPiA+ICsgICAgICAgICAgICAgICAgbGFuZ19pc282MzlfXzIp Owo+ID4gKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgewo+ID4gKyAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICBpZiAo dmlkZW9fYXR0ci5wZXJtaXR0ZWRfZGYgPT0KPiBEVkRWSURFT19WVFNfU1BVX1BGRF9MRVRURVJC T1hfT05MWQo+ID4gKyAgICAgICAgICAgICAgICAgICAgfHwgdmlkZW9fYXR0ci5wZXJtaXR0ZWRf ZGYgPT0KPiBEVkRWSURFT19WVFNfU1BVX1BGRF9BTlkpIHsKPiA+ICsgICAgICAgICAgICAgICAg cmV0ID0gZHZkdmlkZW9fc3VidGl0bGVfc3RyZWFtX3JlZ2lzdGVyKHMsCj4gPiArICAgICAgICAg ICAgICAgICAgICAoKHN1YnBfY29udHJvbCA+PiA4KSAmIDB4MUYpLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwKPiA+ICsgICAgICAgICAgICAgICAgICAg IERWRFZJREVPX1NVQlBfQ0xVVF9SR0JfRVhUUkFEQVRBX1NJWkUsCj4gPiArICAgICAgICAgICAg ICAgICAgICBsYW5nX2lzbzYzOV9fMik7Cj4gPiArICAgICAgICAgICAgICAgIGlmIChyZXQgIT0g MCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgICAgICAg ICAgICAgfQo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICBpZiAodmlk ZW9fYXR0ci5wZXJtaXR0ZWRfZGYgPT0KPiBEVkRWSURFT19WVFNfU1BVX1BGRF9QQU5TQ0FOX09O TFkKPiA+ICsgICAgICAgICAgICAgICAgICAgIHx8IHZpZGVvX2F0dHIucGVybWl0dGVkX2RmID09 Cj4gRFZEVklERU9fVlRTX1NQVV9QRkRfQU5ZKSB7Cj4gPiArICAgICAgICAgICAgICAgIHJldCA9 IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV9yZWdpc3RlcihzLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgKHN1YnBfY29udHJvbCAmIDB4MUYpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgY2x1 dF9yZ2JfZXh0cmFkYXRhX2J1ZiwKPiA+ICsgICAgICAgICAgICAgICAgICAgIERWRFZJREVPX1NV QlBfQ0xVVF9SR0JfRVhUUkFEQVRBX1NJWkUsCj4gPiArICAgICAgICAgICAgICAgICAgICBsYW5n X2lzbzYzOV9fMik7Cj4gPiArICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgewo+ID4gKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgICAgICAgICAgICAgfQo+ID4g KyAgICAgICAgICAgIH0KPiA+ICsgICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgLyog NDozICovCj4gPiArICAgICAgICAgICAgcmV0ID0gZHZkdmlkZW9fc3VidGl0bGVfc3RyZWFtX3Jl Z2lzdGVyKHMsCj4gPiArICAgICAgICAgICAgICAgICgoc3VicF9jb250cm9sID4+IDI0KSAmIDB4 MUYpLAo+ID4gKyAgICAgICAgICAgICAgICBjbHV0X3JnYl9leHRyYWRhdGFfYnVmLAo+ID4gKyAg ICAgICAgICAgICAgICBEVkRWSURFT19TVUJQX0NMVVRfUkdCX0VYVFJBREFUQV9TSVpFLAo+ID4g KyAgICAgICAgICAgICAgICBsYW5nX2lzbzYzOV9fMik7Cj4gPiArICAgICAgICAgICAgaWYgKHJl dCAhPSAwKSB7Cj4gPiArICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICAgICAg ICAgfQo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YmRlbXV4X25lc3RlZF9pb19v cGVuKEFWRm9ybWF0Q29udGV4dCAqcywKPiA+ICsgICAgICAgIEFWSU9Db250ZXh0ICoqcGIsIGNv bnN0IGNoYXIgKnVybCwgaW50IGZsYWdzLCBBVkRpY3Rpb25hcnkKPiAqKm9wdHMpCj4gPiArewo+ IFRoaXMgZnVuY3Rpb24gaXMgcG9pbnRsZXNzLgo+Cj4gPiArICAgIGF2X2xvZyhzLCBBVl9MT0df RVJST1IsICJOZXN0ZWQgaW9fb3BlbiBub3Qgc3VwcG9ydGVkIGZvciB0aGlzCj4gZm9ybWF0XG4i KTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIEFWRVJST1IoRVBFUk0pOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YmRlbXV4X3JlYWRfZGF0YSh2b2lkICpvcGFxdWUsIHVp bnQ4X3QgKmJ1ZiwKPiA+ICsgICAgICAgIGludCBidWZfc2l6ZSkKPiA+ICt7Cj4gPiArICAgIEFW Rm9ybWF0Q29udGV4dCAqcyA9IG9wYXF1ZTsKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQg KmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGlmIChidWZfc2l6ZSAhPSBEVkRWSURF T19CTE9DS19TSVpFKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52 YWxpZCBidWZmZXIgc2l6ZVxuIik7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRFZE VklERU9fUFNfTUFYX1NFQVJDSF9CTE9DS1M7IGkrKykgewo+ID4gKyAgICAgICAgaW50IG5hdl9l dmVudDsKPiA+ICsgICAgICAgIGludCBuYXZfbGVuOwo+ID4gKwo+ID4gKyAgICAgICAgaW50IGNo ZWNrX3RpdGxlOwo+ID4gKyAgICAgICAgaW50IGNoZWNrX3BnY247Cj4gPiArICAgICAgICBpbnQg Y2hlY2tfcGduOwo+ID4gKyAgICAgICAgaW50IGNoZWNrX2FuZ2xlOwo+ID4gKyAgICAgICAgaW50 IGNoZWNrX25iX2FuZ2xlczsKPiA+ICsKPiA+ICsgICAgICAgIHVpbnQ4X3QgbmF2X2J1ZltEVkRW SURFT19CTE9DS19TSVpFXSA9IHswfTsKPiA+ICsKPiA+ICsgICAgICAgIGlmIChmZl9jaGVja19p bnRlcnJ1cHQoJnMtPmludGVycnVwdF9jYWxsYmFjaykpIHsKPiA+ICsgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9FWElUOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgaWYgKGR2 ZG5hdl9nZXRfbmV4dF9ibG9jayhjLT5wbGF5X2R2ZG5hdiwKPiA+ICsgICAgICAgICAgICAgICAg bmF2X2J1ZiwgJm5hdl9ldmVudCwgJm5hdl9sZW4pICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPiA+ ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRXJyb3IgcmVhZGluZyBibG9j a1xuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAgZ290byBlbmRfZHZkbmF2X2Vycm9yOwo+ID4g KyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgaWYgKG5hdl9sZW4gPiBEVkRWSURFT19CTE9D S19TSVpFKSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFs aWQgYmxvY2sgKHRvbyBiaWcpXG4iKTsKPiA+ICsKPiBUaGlzIGlzIG5vdCB3aGF0IEVOT01FTSBt ZWFucy4KPgo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAobmF2X2V2ZW50ICE9IERWRE5BVl9CTE9DS19P SyAmJiBuYXZfZXZlbnQgIT0KPiBEVkROQVZfTkFWX1BBQ0tFVCkgewo+ID4gKyAgICAgICAgICAg IGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsICJuYXYgZXZlbnQ9JWQgbGVuPSVkXG4iLCBuYXZfZXZl bnQsCj4gbmF2X2xlbik7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAoZHZk bmF2X2N1cnJlbnRfdGl0bGVfcHJvZ3JhbShjLT5wbGF5X2R2ZG5hdiwgJmNoZWNrX3RpdGxlLAo+ ID4gKyAgICAgICAgICAgICAgICAmY2hlY2tfcGdjbiwgJmNoZWNrX3BnbikgIT0gRFZETkFWX1NU QVRVU19PSykgewo+ID4gKyAgICAgICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiA+ICsg ICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlmIChjaGVja190aXRsZSAhPSBjLT5vcHRfdGl0 bGUgfHwgY2hlY2tfcGdjbiAhPSBjLT5wbGF5X3BnY24KPiA+ICsgICAgICAgICAgICAgICAgfHwg IWR2ZG5hdl9pc19kb21haW5fdnRzKGMtPnBsYXlfZHZkbmF2KSkgewo+ID4gKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VPRjsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlm IChkdmRuYXZfZ2V0X2FuZ2xlX2luZm8oYy0+cGxheV9kdmRuYXYsICZjaGVja19hbmdsZSwKPiA+ ICsgICAgICAgICAgICAgICAgJmNoZWNrX25iX2FuZ2xlcykgIT0gRFZETkFWX1NUQVRVU19PSykg ewo+ID4gKyAgICAgICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiA+ICsgICAgICAgIH0K PiA+ICsKPiA+ICsgICAgICAgIGlmIChjaGVja19hbmdsZSAhPSBjLT5vcHRfYW5nbGUpIHsKPiA+ ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5leHBlY3RlZCBhbmdsZSBj aGFuZ2VcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOUFVUX0NI QU5HRUQ7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBzd2l0Y2ggKG5hdl9ldmVu dCkgewo+ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX0JMT0NLX09LOgo+ID4gKyAgICAgICAg ICAgICAgICBpZiAobmF2X2xlbiAhPSBEVkRWSURFT19CTE9DS19TSVpFKSB7Cj4gPiArICAgICAg ICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBibG9ja1xuIik7 Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiA+ICsgICAgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBtZW1j cHkoYnVmLCAmbmF2X2J1ZiwgbmF2X2xlbik7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIHJl dHVybiBuYXZfbGVuOwo+ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX0hJR0hMSUdIVDoKPiA+ ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9WVFNfQ0hBTkdFOgo+ID4gKyAgICAgICAgICAgIGNh c2UgRFZETkFWX1NUSUxMX0ZSQU1FOgo+ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX1NUT1A6 Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfV0FJVDoKPiA+ICsgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfRU9GOwo+ID4gKyAgICAgICAgICAgIGRlZmF1bHQ6Cj4gPiArICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiAr ICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluZCBuZXh0IE1QRUcgYmxv Y2tcbiIpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gQVZFUlJPUl9VTktOT1dOOwo+ID4gKwo+ID4g K2VuZF9kdmRuYXZfZXJyb3I6Cj4gPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJsaWJk dmRuYXY6ICVzXG4iLAo+IGR2ZG5hdl9lcnJfdG9fc3RyaW5nKGMtPnBsYXlfZHZkbmF2KSk7Cj4g PiArCj4gPiArICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50NjRfdCBkdmR2aWRlb19zdWJkZW11eF9zZWVrX2RhdGEodm9pZCAqb3BhcXVlLCBp bnQ2NF90IG9mZnNldCwKPiA+ICsgICAgICAgIGludCB3aGVuY2UpCj4gPiArewo+ID4gKyAgICBB VkZvcm1hdENvbnRleHQgKnMgPSBvcGFxdWU7Cj4gPiArCj4gPiArICAgIGF2X2xvZyhzLCBBVl9M T0dfRVJST1IsCj4gPiArICAgICAgICAgICAgImR2ZHZpZGVvX3N1YmRlbXV4X3NlZWtfZGF0YSgp OiBub3QgaW1wbGVtZW50ZWRcbiIpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gQVZFUlJPUl9QQVRD SFdFTENPTUU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3ViZGVtdXhf b3BlbihBVkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29u dGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsKPiA+ ICsgICAgY29uc3QgQVZJbnB1dEZvcm1hdCAqbXBlZ19mbXQ7Cj4gPiArICAgIEFWRm9ybWF0Q29u dGV4dCAqbXBlZ19jdHg7Cj4gPiArICAgIHVpbnQ4X3QgKm1wZWdfYnVmOwo+ID4gKwo+ID4gKyAg ICBpZiAoIShtcGVnX2ZtdCA9IGF2X2ZpbmRfaW5wdXRfZm9ybWF0KCJtcGVnIikpKSB7Cj4gPiAr ICAgICAgICByZXR1cm4gQVZFUlJPUl9ERU1VWEVSX05PVF9GT1VORDsKPiA+ICsgICAgfQo+ID4g Kwo+ID4gKyAgICBpZiAoIShtcGVnX2N0eCA9IGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKSkpIHsK PiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ ICsgICAgaWYgKCEobXBlZ19idWYgPSBhdl9tYWxsb2MoRFZEVklERU9fQkxPQ0tfU0laRSkpKSB7 Cj4gPiArICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQobXBlZ19jdHgpOwo+ID4gKwo+ID4g KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ICsgICAgfQo+IFdoeSBhcmUgeW91 IGRvaW5nIHRoaXMgaW5zdGVhZCBvZiBqdXN0IGRlY2xhcmluZyBpdCB0byBiZSBhIHByb3RvY29s Cj4gdGhhdCBwcm9kdWNlcyBhIG1wZWctcHMgc3RyZWFtPyBUaGF0IHdheSBpdCBzdG9wcyBiZWlu ZyB5b3VyCj4gcmVzcG9uc2liaWxpdHkuCj4KPgo+ID4gKwo+ID4gKyAgICBmZmlvX2luaXRfY29u dGV4dCgmYy0+bXBlZ19wYiwgbXBlZ19idWYsIERWRFZJREVPX0JMT0NLX1NJWkUsIDAsCj4gPiAr ICAgICAgICAgICAgcywgZHZkdmlkZW9fc3ViZGVtdXhfcmVhZF9kYXRhLCBOVUxMLAo+IGR2ZHZp ZGVvX3N1YmRlbXV4X3NlZWtfZGF0YSk7Cj4gPiArICAgIGMtPm1wZWdfcGIucHViLnNlZWthYmxl ID0gMDsKPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBmZl9jb3B5X3doaXRlYmxhY2tsaXN0cyht cGVnX2N0eCwgcykpICE9IDApIHsKPiA+ICsgICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dCht cGVnX2N0eCk7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiAr Cj4gPiArICAgIC8qIFRPRE86IGZpeCB0aGUgUFRTIGlzc3VlcyAoYXNrIGFib3V0IHRoaXMgaW4g TUwpICovCj4gPiArICAgIC8qIEFWRk1UX0ZMQUdfR0VOUFRTIHdvcmtzIGluIHNvbWUgc2NlbmFy aW9zLCBidXQgaW4gb3RoZXJzLCB0aGUKPiByZWFkaW5nIHByb2Nlc3MgaGFuZ3MgKi8KPiA+ICsg ICAgbXBlZ19jdHgtPmZsYWdzID0gQVZGTVRfRkxBR19DVVNUT01fSU8gfCBBVkZNVF9GTEFHX0dF TlBUUzsKPiBNUEVHLVBTIGNvbnRhaW5zIHB0cyBpbmZvLCB3aHkgbm90IGp1c3QgdXNlIHRoYXQ/ IE5vdCBhbWF6aW5nIFBUUyBpbmZvLAo+IGJ1dCB1c2FibGUgUFRTIGluZm8uCj4KPiA+ICsKPiA+ ICsgICAgbXBlZ19jdHgtPnByb2Jlc2l6ZSA9IDA7Cj4gPiArICAgIG1wZWdfY3R4LT5tYXhfYW5h bHl6ZV9kdXJhdGlvbiA9IDA7Cj4gPiArCj4gPiArICAgIG1wZWdfY3R4LT5pbnRlcnJ1cHRfY2Fs bGJhY2sgPSBzLT5pbnRlcnJ1cHRfY2FsbGJhY2s7Cj4gPiArICAgIG1wZWdfY3R4LT5wYiA9ICZj LT5tcGVnX3BiLnB1YjsKPiA+ICsgICAgbXBlZ19jdHgtPmlvX29wZW4gPSBkdmR2aWRlb19zdWJk ZW11eF9uZXN0ZWRfaW9fb3BlbjsKPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBhdmZvcm1hdF9v cGVuX2lucHV0KCZtcGVnX2N0eCwgIiIsIG1wZWdfZm10LCBOVUxMKSkgIT0KPiAwKSB7Cj4gPiAr ICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQobXBlZ19jdHgpOwo+ID4gKwo+ID4gKyAgICAg ICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBjLT5tcGVnX2ZtdCA9IG1w ZWdfZm10Owo+ID4gKyAgICBjLT5tcGVnX2N0eCA9IG1wZWdfY3R4Owo+ID4gKyAgICBjLT5tcGVn X2J1ZiA9IG1wZWdfYnVmOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgZHZkdmlkZW9fc3ViZGVtdXhfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpz KQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7 Cj4gPiArCj4gPiArICAgIGF2X2ZyZWVwKCZjLT5tcGVnX3BiLnB1Yi5idWZmZXIpOwo+ID4gKyAg ICBtZW1zZXQoJmMtPm1wZWdfcGIsIDB4MDAsIHNpemVvZihjLT5tcGVnX3BiKSk7Cj4gPiArICAg IGF2X2ZyZWVwKCZjLT5tcGVnX3BiKTtXaHkgYXJlIHlvdSB6ZXJvaW5nIGl0IGJlZm9yZSB5b3Ug ZnJlZSBpdD8gSWYKPiB0aGlzIGlzIGEgc2VjdXJpdHkgaXNzdWUKPiB5b3UgY2FuJ3QgdXNlIG1l bXNldCBhbnl3YXkgYXMgdGhlIGNvbXBpbGVyIG1heSB0aHJvdyBpdCBhd2F5LiBUaGF0J3MKPiB3 aHkgZXhwbGljaXRfYnplcm8gd2FzIGNyZWF0ZWQuCj4KPiA+ICsKPiA+ICsgICAgYXZmb3JtYXRf Y2xvc2VfaW5wdXQoJmMtPm1wZWdfY3R4KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBk dmR2aWRlb19jaGFwdGVyc19yZWdpc3RlcihBVkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4g KyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsgICAgaW50 IHN0YXJ0X3RpbWUgPSAwOwo+ID4gKyAgICBpbnQgY2VsbCA9IDA7Cj4gPiArCj4gPiArICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgYy0+cGxheV9wZ2MtPm5yX29mX3Byb2dyYW1zOyBpKyspIHsKPiA+ ICsgICAgICAgIGludDY0X3QgbXMgPSAwOwo+ID4gKyAgICAgICAgaW50IG5leHQgPSBjLT5wbGF5 X3BnYy0+cHJvZ3JhbV9tYXBbaSArIDFdOwo+IEluIHRoZSBsYXN0IGl0ZXJhdGlvbiBvZiB0aGUg bG9vcCwgd2lsbCB0aGlzIHBvc3NpYmx5IGdpdmUgeW91IGFuCj4gb3V0LW9mLWJvdW5kcyByZWFk Pwo+Cj4gPiArCj4gPiArICAgICAgICBpZiAoaSA9PSBjLT5wbGF5X3BnYy0+bnJfb2ZfcHJvZ3Jh bXMgLSAxKSB7Cj4gPiArICAgICAgICAgICAgbmV4dCA9IGMtPnBsYXlfcGdjLT5ucl9vZl9jZWxs cyArIDE7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICB3aGlsZSAoY2VsbCA8IG5l eHQgLSAxKSB7Cj4gPiArICAgICAgICAgICAgLyogb25seSBjb25zaWRlciBmaXJzdCBjZWxsIG9m IG11bHRpLWFuZ2xlIGNlbGxzICovCj4gPiArICAgICAgICAgICAgaWYgKGMtPnBsYXlfcGdjLT5j ZWxsX3BsYXliYWNrW2NlbGxdLmJsb2NrX21vZGUgPD0gMSkgewo+ID4gKyAgICAgICAgICAgICAg ICBtcyA9IG1zICsgZHZkdmlkZW9fdGltZV90b19taWxsaXMoCj4gPiArCj4gJmMtPnBsYXlfcGdj LT5jZWxsX3BsYXliYWNrW2NlbGxdLnBsYXliYWNrX3RpbWUpOwo+ID4gKyAgICAgICAgICAgIH0K PiA+ICsgICAgICAgICAgICBjZWxsKys7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAg ICBpZiAoIWF2cHJpdl9uZXdfY2hhcHRlcihzLCBpLCBEVkRWSURFT19USU1FX0JBU0VfTUlMTElT X1EsCj4gPiArICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUsIHN0YXJ0X3RpbWUgKyBtcywgTlVM TCkpIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRv IGFsbG9jYXRlIGNoYXB0ZXIiKTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgc3RhcnRfdGltZSArPSBtczsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCBkdmR2aWRlb19yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ ID4gKyAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3ZvbHVt ZV9vcGVuKHMpKSAhPSAwKSB7Cj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fcGxheWJhY2tfb3BlbihzKSkgIT0gMCkg ewo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAo KHJldCA9IGR2ZHZpZGVvX3N1YmRlbXV4X29wZW4ocykpICE9IDApIHsKPiA+ICsgICAgICAgIHJl dHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb192 aWRlb19zdHJlYW1fcmVnaXN0ZXIocykpICE9IDApIHsKPiA+ICsgICAgICAgIHJldHVybiByZXQ7 Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb19hdWRpb19zdHJl YW1fcmVnaXN0ZXJfYWxsKHMpKSAhPSAwKSB7Cj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4g KyAgICB9Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VidGl0bGVfc3RyZWFt X3JlZ2lzdGVyX2FsbChzKSkgIT0gMCkgewo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsg ICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX2NoYXB0ZXJzX3JlZ2lzdGVy KHMpKSAhPSAwKSB7Cj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiArCj4g PiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3Jl YWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKPiA+ICt7Cj4gPiAr ICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAg ICB3aGlsZSAoIWZmX2NoZWNrX2ludGVycnVwdCgmcy0+aW50ZXJydXB0X2NhbGxiYWNrKSkgewo+ ID4gKyAgICAgICAgaW50IHN1YmRlbXV4X3JldDsKPiA+ICsgICAgICAgIEFWUGFja2V0ICpzdWJk ZW11eF9wa3Q7Cj4gPiArCj4gPiArICAgICAgICBzdWJkZW11eF9wa3QgPSBhdl9wYWNrZXRfYWxs b2MoKTsKPiA+ICsgICAgICAgIGlmICghc3ViZGVtdXhfcGt0KSB7Cj4gPiArICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAg IHN1YmRlbXV4X3JldCA9IGF2X3JlYWRfZnJhbWUoYy0+bXBlZ19jdHgsIHN1YmRlbXV4X3BrdCk7 Cj4gPiArICAgICAgICBpZiAoc3ViZGVtdXhfcmV0ID49IDApIHsKPiA+ICsgICAgICAgICAgICBp ZiAoYy0+bXBlZ19jdHgtPm5iX3N0cmVhbXMgIT0gcy0+bmJfc3RyZWFtcykgewo+ID4gKyAgICAg ICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5leHBlY3RlZCBzdHJlYW0gZHVy aW5nCj4gcGxheWJhY2tcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBhdl9wYWNrZXRf dW5yZWYoc3ViZGVtdXhfcGt0KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5QVVRfQ0hBTkdFRDsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAg ICAgICAgYXZfcGFja2V0X21vdmVfcmVmKHBrdCwgc3ViZGVtdXhfcGt0KTsKPiBUaGlzIHNlZW1z IGxpa2UgYW4gdW5uZWNlc3NhcnkgbWVtY3B5Lgo+Cj4gPiArCj4gPiArICAgICAgICAgICAgcmV0 dXJuIDA7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gc3ViZGVtdXhf cmV0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19yZWFkX3NlZWsoQVZGb3JtYXRDb250ZXh0 ICpzLCBpbnQgc3RyZWFtX2luZGV4LAo+ID4gKyAgICAgICAgaW50NjRfdCB0aW1lc3RhbXAsIGlu dCBmbGFncykKPiA+ICt7Cj4gPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJkdmR2aWRl b19yZWFkX3NlZWsoKTogbm90IGltcGxlbWVudGVkXG4iKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJu IEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZp ZGVvX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIGR2ZHZpZGVvX3N1 YmRlbXV4X2Nsb3NlKHMpOwo+ID4gKyAgICBkdmR2aWRlb19wbGF5YmFja19jbG9zZShzKTsKPiA+ ICsgICAgZHZkdmlkZW9fdm9sdW1lX2Nsb3NlKHMpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19wcm9iZShjb25zdCBBVlByb2Jl RGF0YSAqcCkKPiA+ICt7Cj4gPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJkdmR2 aWRlb19wcm9iZSgpOiBub3QgaW1wbGVtZW50ZWRcbiIpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4g QVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gPiArfQo+ID4gKwo+ID4gKyNkZWZpbmUgT0ZGU0VUKHgp IG9mZnNldG9mKERWRFZpZGVvRGVtdXhDb250ZXh0LCB4KQo+ID4gK3N0YXRpYyBjb25zdCBBVk9w dGlvbiBkdmR2aWRlb19vcHRpb25zW10gPSB7Cj4gPiArICAgIHsidGl0bGUiLCAgICJUaXRsZSBO dW1iZXIiLCAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChvcHRfdGl0bGUpLAo+ICAgICBBVl9P UFRfVFlQRV9JTlQsICAgIHsgLmk2ND0xIH0sICAgICAxLAo+IERWRFZJREVPX1RJVExFX05VTUJF Ul9NQVgsICAgICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gPiArICAgIHsi cHR0IiwgICAgICJFbnRyeSBQVFQgTnVtYmVyIiwgICAgICAgICAgICAgICAgIE9GRlNFVChvcHRf cHR0KSwKPiAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MSB9LCAgICAgMSwKPiBEVkRW SURFT19QVFRfTlVNQkVSX01BWCwgICAgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJB TSB9LAo+ID4gKyAgICB7InBnYyIsICAgICAiRW50cnkgUEdDIE51bWJlciAoMD1hdXRvKSIsICAg ICAgICBPRkZTRVQob3B0X3BnYyksCj4gICAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTAg fSwgICAgIDAsCj4gRFZEVklERU9fUEdDX05VTUJFUl9NQVgsICAgICAgICAgICAgQVZfT1BUX0ZM QUdfREVDT0RJTkdfUEFSQU0gfSwKPiA+ICsgICAgeyJwZyIsICAgICAgIkVudHJ5IFBHIE51bWJl ciAoMD1hdXRvKSIsICAgICAgICAgT0ZGU0VUKG9wdF9wZyksCj4gICAgICBBVl9PUFRfVFlQRV9J TlQsICAgIHsgLmk2ND0wIH0sICAgICAwLAo+IERWRFZJREVPX1BHX05VTUJFUl9NQVgsICAgICAg ICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gPiArICAgIHsiYW5nbGUiLCAg ICJWaWRlbyBBbmdsZSBOdW1iZXIiLCAgICAgICAgICAgICAgIE9GRlNFVChvcHRfYW5nbGUpLAo+ ICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0xIH0sICAgICAxLAo+IERWRFZJREVPX0FO R0xFX05VTUJFUl9NQVgsICAgICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4g PiArICAgIHsicmVnaW9uIiwgICJQbGF5YmFjayBSZWdpb24gTnVtYmVyICgwPWZyZWUpIiwKPiBP RkZTRVQob3B0X3JlZ2lvbiksICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0wIH0sICAg ICAwLAo+IERWRFZJREVPX1JFR0lPTl9OVU1CRVJfTUFYLCAgICAgICAgIEFWX09QVF9GTEFHX0RF Q09ESU5HX1BBUkFNIH0sCj4gPiArICAgIHtOVUxMfQo+ID4gK307Cj4gPiArCj4gPiArc3RhdGlj IGNvbnN0IEFWQ2xhc3MgZHZkdmlkZW9fY2xhc3MgPSB7Cj4gPiArICAgIC5jbGFzc19uYW1lID0g IkRWRC1WaWRlbyBkZW11eGVyIiwKPiA+ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0 ZW1fbmFtZSwKPiA+ICsgICAgLm9wdGlvbiAgICAgPSBkdmR2aWRlb19vcHRpb25zLAo+ID4gKyAg ICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVAo+ID4gK307Cj4gPiArCj4gPiAr Y29uc3QgQVZJbnB1dEZvcm1hdCBmZl9kdmR2aWRlb19kZW11eGVyID0gewo+ID4gKyAgICAubmFt ZSAgICAgICAgICAgPSAiZHZkdmlkZW8iLAo+ID4gKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxM X0lGX0NPTkZJR19TTUFMTCgiRFZELVZpZGVvIiksCj4gPiArICAgIC5wcml2X2NsYXNzICAgICA9 ICZkdmR2aWRlb19jbGFzcywKPiA+ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKERWRFZp ZGVvRGVtdXhDb250ZXh0KSwKPiA+ICsgICAgLmZsYWdzICAgICAgICAgID0gQVZGTVRfTk9GSUxF IHwgQVZGTVRfTk9fQllURV9TRUVLIHwKPiBBVkZNVF9OT0dFTlNFQVJDSCB8IEFWRk1UX05PQklO U0VBUkNIIHwgQVZGTVRfU0hPV19JRFMgfCBBVkZNVF9UU19ESVNDT05ULAo+ID4gKyAgICAuZmxh Z3NfaW50ZXJuYWwgPSBGRl9GTVRfSU5JVF9DTEVBTlVQLAo+ID4gKyAgICAucmVhZF9wcm9iZSAg ICAgPSBkdmR2aWRlb19wcm9iZSwKPiA+ICsgICAgLnJlYWRfY2xvc2UgICAgID0gZHZkdmlkZW9f Y2xvc2UsCj4gPiArICAgIC5yZWFkX2hlYWRlciAgICA9IGR2ZHZpZGVvX3JlYWRfaGVhZGVyLAo+ ID4gKyAgICAucmVhZF9wYWNrZXQgICAgPSBkdmR2aWRlb19yZWFkX3BhY2tldCwKPiA+ICsgICAg LnJlYWRfc2VlayAgICAgID0gZHZkdmlkZW9fcmVhZF9zZWVrCj4gPiArfTsKPgo+IFRoZXJlJ3Mg YSBudW1iZXIgb2Ygb3RoZXIgaXNzdWVzIGFuZCBJIGRpZG4ndCB3cml0ZSBlYWNoIG9uZSBvZiBl YWNoCj4gdHlwZSwgYnV0IG15IGJpZ2dlc3QgcXVlc3Rpb24gaXMgd2h5IHRoaXMgaXMgbm90IGEg cHJvdG9jb2wgdGhhdAo+IHByb2R1Y2VzIGFuIG1wZWctcHMgc3RyZWFtLgo+Cj4gLSBMZW8gSXpl biAoVHJhbmVwdG9yYSkKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1w ZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVs Cj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWct ZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo+Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZl bCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3Jn L21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGlu ayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1 YmplY3QgInVuc3Vic2NyaWJlIi4K