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 142F04B275 for ; Fri, 31 May 2024 21:07:16 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BBCC868D5B4; Sat, 1 Jun 2024 00:07:03 +0300 (EEST) Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3BCA268D334 for ; Sat, 1 Jun 2024 00:06:57 +0300 (EEST) Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-42108856c33so15168225e9.1 for ; Fri, 31 May 2024 14:06:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717189616; x=1717794416; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:content-language:references :to:subject:from:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=abGJwZrzGI7CDZM5BOvlPj+27zMAdBpXEeVXGp2EXr4=; b=gyy3z5/W8uDgxcPFsOr9fe7OlO328I4o1QrU1+Rbaot+ypb/3WmKYlkCkdzM0SGo+d +LSY1pDSTnPzT5LOwKy4YKnJKxSh4jafz6wqNYbcAqdlM2d9ah1E1XRwOyLl5G9mpyth U9kEwCVA4sibwPJ5LOoEEhyXOdv/29WfPCB4ffBUfwtMP8UmwrDqh4c7UGpmYDLpRsnL ieQ5V6Ip4Kp+quxpQUZ5ixRtup4bnJRmIOtcpqxwC8dJwUMgNqYCQGh+sZH69eK71hQc 2f4e3MxdrZT6enYmww4sKSetRDqDPI/MKUuTobyUESJUuVOlaec8L+BiNOyJZfxlgCfZ ldjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717189616; x=1717794416; h=content-transfer-encoding:in-reply-to:content-language:references :to:subject:from:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=abGJwZrzGI7CDZM5BOvlPj+27zMAdBpXEeVXGp2EXr4=; b=IRAhsUZ0Aot3tkYhM5Nx/0FOCInZ8SHbtOIo6eBV3nsLa9XyKEK1SPibkqlMNWy2Tl LieuZB8T5w5GtEA58qbr9D5djPS7NKDBzvX5JDoAcEnVkMcj9pICmjxx/bELNFkEPHCm w3/MbVMi2I0lcLlJzkobaDaIYD50sROo/tkuwsPMFU+EjwXDUkSCuyFfUNb9xO12V1s/ m3KNbhgEyQsfKQMISqp+IwGZfSr410HaJvzp1U/XxXiISG51/duFopq7Ia0Q7H2hF6I5 pvNc3SDfBbIAvqV6V+GRqeHINmx3/jIz4VcBUDfEhC7AvEXDhjmnOYUV5f59rm56zQQf mFzA== X-Gm-Message-State: AOJu0YyXJMQQWkOhzQDFKR7Xlemey/zpwq5nIVkq8tIGJjOcIQZ6VZjk g+DQyrTzhMk4gjUFRZrjAUZKQRrG02FB2dESPQ2jYTwXfidpSIAvr8jJeA== X-Google-Smtp-Source: AGHT+IGfpJqmLJ0ClXlh39IgQkzD1ShyFXFOeLT+wIUCzcZHZ7742jJKInjvCaVFKDeDXOwzWWuFAw== X-Received: by 2002:a05:600c:1912:b0:417:eb5d:281b with SMTP id 5b1f17b1804b1-4212811fea4mr57805755e9.17.1717189616118; Fri, 31 May 2024 14:06:56 -0700 (PDT) Received: from ?IPV6:2a02:8440:a110:f28d:10:2ee:47ab:bee5? ([2a02:8440:a110:f28d:10:2ee:47ab:bee5]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-35dd04c0f73sm2608848f8f.18.2024.05.31.14.06.55 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 31 May 2024 14:06:55 -0700 (PDT) Message-ID: Date: Fri, 31 May 2024 23:06:55 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: averne To: ffmpeg-devel@ffmpeg.org References: <8D094E9E-8EF2-488E-8CF0-19FF645B96E8@remlab.net> Content-Language: en-US, fr In-Reply-To: <8D094E9E-8EF2-488E-8CF0-19FF645B96E8@remlab.net> Subject: Re: [FFmpeg-devel] [PATCH 05/16] avutil: add common code for nvtegra 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: TGUgMzEvMDUvMjAyNCDDoCAxMDozMiwgUsOpbWkgRGVuaXMtQ291cm1vbnQgYSDDqWNyaXTCoDoK PiAKPiAKPiBMZSAzMCBtYWkgMjAyNCAyMjo0MzowNyBHTVQrMDM6MDAsIGF2ZXJuZSA8YXZlcm5l MzgxQGdtYWlsLmNvbT4gYSDDqWNyaXTCoDoKPj4gVGhpcyBpbmNsdWRlcyBhIG5ldyBwaXhlbCBm b3JtYXQgZm9yIG52dGVncmEgaGFyZHdhcmUgZnJhbWVzLCBhbmQgc2V2ZXJhbCBvYmplY3RzIGZv ciBpbnRlcmFjdGlvbiB3aXRoIGhhcmR3YXJlIGJsb2Nrcy4KPj4gSW4gcGFydGljdWxhciwgdGhp cyBjb250YWlucyBjb2RlIGZvciBjaGFubmVscyAoaGFuZGxlcyB0byBoYXJkd2FyZSBlbmdpbmVz KSwgbWFwcyAobWVtb3J5LW1hcHBlZCBidWZmZXJzIHNoYXJlZCB3aXRoIGVuZ2luZXMpLCBhbmQg Y29tbWFuZCBidWZmZXJzIChhYnN0cmFjdGlvbiBmb3IgYnVpbGRpbmcgY29tbWFuZCBsaXN0cyBz ZW50IHRvIHRoZSBlbmdpbmVzKS4KPj4KPj4gU2lnbmVkLW9mZi1ieTogYXZlcm5lIDxhdmVybmUz ODFAZ21haWwuY29tPgo+PiAtLS0KPj4gY29uZmlndXJlICAgICAgICAgICAgICAgICAgfCAgICAy ICsKPj4gbGliYXZ1dGlsL01ha2VmaWxlICAgICAgICAgfCAgICA0ICsKPj4gbGliYXZ1dGlsL252 dGVncmEuYyAgICAgICAgfCAxMDM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+PiBsaWJhdnV0aWwvbnZ0ZWdyYS5oICAgICAgICB8ICAyNTggKysrKysrKysrCj4+IGxpYmF2 dXRpbC9udnRlZ3JhX2hvc3QxeC5oIHwgICA5NCArKysrCj4+IGxpYmF2dXRpbC9waXhkZXNjLmMg ICAgICAgIHwgICAgNCArCj4+IGxpYmF2dXRpbC9waXhmbXQuaCAgICAgICAgIHwgICAgOCArCj4+ IDcgZmlsZXMgY2hhbmdlZCwgMTQwNSBpbnNlcnRpb25zKCspCj4+IGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdnV0aWwvbnZ0ZWdyYS5jCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvbnZ0 ZWdyYS5oCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvbnZ0ZWdyYV9ob3N0MXguaAo+ Pgo+PiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4+IGluZGV4IDA5ZmIyYWVk MWIuLjUxZjE2OWJmYmQgMTAwNzU1Cj4+IC0tLSBhL2NvbmZpZ3VyZQo+PiArKysgYi9jb25maWd1 cmUKPj4gQEAgLTM2MSw2ICszNjEsNyBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4+ICAg LS1kaXNhYmxlLXZkcGF1ICAgICAgICAgIGRpc2FibGUgTnZpZGlhIFZpZGVvIERlY29kZSBhbmQg UHJlc2VudGF0aW9uIEFQSSBmb3IgVW5peCBjb2RlIFthdXRvZGV0ZWN0XQo+PiAgIC0tZGlzYWJs ZS12aWRlb3Rvb2xib3ggICBkaXNhYmxlIFZpZGVvVG9vbGJveCBjb2RlIFthdXRvZGV0ZWN0XQo+ PiAgIC0tZGlzYWJsZS12dWxrYW4gICAgICAgICBkaXNhYmxlIFZ1bGthbiBjb2RlIFthdXRvZGV0 ZWN0XQo+PiArICAtLWVuYWJsZS1udnRlZ3JhICAgICAgICAgZW5hYmxlIG52dGVncmEgY29kZSBb bm9dCj4+Cj4+IFRvb2xjaGFpbiBvcHRpb25zOgo+PiAgIC0tYXJjaD1BUkNIICAgICAgICAgICAg ICBzZWxlY3QgYXJjaGl0ZWN0dXJlIFskYXJjaF0KPj4gQEAgLTMxNTEsNiArMzE1Miw3IEBAIHZp ZGVvdG9vbGJveF9od2FjY2VsX2RlcHM9InZpZGVvdG9vbGJveCBwdGhyZWFkcyIKPj4gdmlkZW90 b29sYm94X2h3YWNjZWxfZXh0cmFsaWJzPSItZnJhbWV3b3JrIFF1YXJ0ekNvcmUiCj4+IHZ1bGth bl9kZXBzPSJ0aHJlYWRzIgo+PiB2dWxrYW5fZGVwc19hbnk9ImxpYmRsIExvYWRMaWJyYXJ5Igo+ PiArbnZ0ZWdyYV9kZXBzPSJncGwiCj4+Cj4+IGF2MV9kM2QxMXZhX2h3YWNjZWxfZGVwcz0iZDNk MTF2YSBEWFZBX1BpY1BhcmFtc19BVjEiCj4+IGF2MV9kM2QxMXZhX2h3YWNjZWxfc2VsZWN0PSJh djFfZGVjb2RlciIKPj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9NYWtlZmlsZSBiL2xpYmF2dXRp bC9NYWtlZmlsZQo+PiBpbmRleCA5YzExMmJjNThhLi43MzNhMjNhOGEzIDEwMDY0NAo+PiAtLS0g YS9saWJhdnV0aWwvTWFrZWZpbGUKPj4gKysrIGIvbGliYXZ1dGlsL01ha2VmaWxlCj4+IEBAIC01 Miw2ICs1Miw3IEBAIEhFQURFUlMgPSBhZGxlcjMyLmggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gICAgICAgICAgIGh3Y29udGV4dF92aWRl b3Rvb2xib3guaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiAgICAg ICAgICAgaHdjb250ZXh0X3ZkcGF1LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4+ICAgICAgICAgICBod2NvbnRleHRfdnVsa2FuLmggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gKyAgICAgICAgICBudnRlZ3JhLmgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4g ICAgICAgICAgIG52aG9zdF9pb2N0bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+PiAgICAgICAgICAgbnZtYXBfaW9jdGwuaCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICAgICAgICAgICBpYW1mLmgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK Pj4gQEAgLTIwOSw2ICsyMTAsNyBAQCBPQkpTLSQoQ09ORklHX1ZEUEFVKSAgICAgICAgICAgICAg ICAgICAgKz0gaHdjb250ZXh0X3ZkcGF1Lm8KPj4gT0JKUy0kKENPTkZJR19WVUxLQU4pICAgICAg ICAgICAgICAgICAgICs9IGh3Y29udGV4dF92dWxrYW4ubyB2dWxrYW4ubwo+Pgo+PiBPQkpTLSQo IUNPTkZJR19WVUxLQU4pICAgICAgICAgICAgICAgICAgKz0gaHdjb250ZXh0X3N0dWIubwo+PiAr T0JKUy0kKENPTkZJR19OVlRFR1JBKSAgICAgICAgICAgICAgICAgICs9IG52dGVncmEubwo+Pgo+ PiBPQkpTICs9ICQoQ09NUEFUX09CSlM6JT0uLi9jb21wYXQvJSkKPj4KPj4gQEAgLTIzMCw2ICsy MzIsOCBAQCBTS0lQSEVBREVSUy0kKENPTkZJR19WRFBBVSkgICAgICAgICAgICArPSBod2NvbnRl eHRfdmRwYXUuaAo+PiBTS0lQSEVBREVSUy0kKENPTkZJR19WVUxLQU4pICAgICAgICAgICArPSBo d2NvbnRleHRfdnVsa2FuLmggdnVsa2FuLmggICBcCj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZ1bGthbl9mdW5jdGlvbnMuaCAgICAgICAgICAgIFwKPj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnVsa2FuX2xvYWRlci5oCj4+ ICtTS0lQSEVBREVSUy0kKENPTkZJR19OVlRFR1JBKSAgICAgICAgICArPSBudnRlZ3JhLmggICAg ICAgICAgICAgICAgICAgICBcCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBudnRlZ3JhX2hvc3QxeC5oCj4+Cj4+IFRFU1RQUk9HUyA9IGFkbGVyMzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gICAgICAg ICAgICAgYWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+PiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL252dGVncmEuYyBiL2xpYmF2dXRp bC9udnRlZ3JhLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMC4u YWQwYmJiZGZhYQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2xpYmF2dXRpbC9udnRlZ3JhLmMK Pj4gQEAgLTAsMCArMSwxMDM1IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDI0IGF2 ZXJuZSA8YXZlcm5lMzgxQGdtYWlsLmNvbT4KPj4gKyAqCj4+ICsgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCj4+ICsgKgo+PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+ICsg KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcgo+PiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4g KyAqCj4+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFs b25nCj4+ICsgKiB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuLAo+PiArICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KPj4gKyAqLwo+PiArCj4+ICsjaWZuZGVmIF9f U1dJVENIX18KPj4gKyMgICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPj4gKyMgICBpbmNsdWRlIDxz eXMvbW1hbi5oPgo+PiArIyAgIGluY2x1ZGUgPGZjbnRsLmg+Cj4+ICsjICAgaW5jbHVkZSA8dW5p c3RkLmg+Cj4+ICsjZWxzZQo+PiArIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPgo+PiArIyAgIGluY2x1 ZGUgPHN3aXRjaC5oPgo+PiArI2VuZGlmCj4+ICsKPj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPj4g Kwo+PiArI2luY2x1ZGUgImJ1ZmZlci5oIgo+PiArI2luY2x1ZGUgImxvZy5oIgo+PiArI2luY2x1 ZGUgImVycm9yLmgiCj4+ICsjaW5jbHVkZSAibWVtLmgiCj4+ICsjaW5jbHVkZSAidGhyZWFkLmgi Cj4+ICsKPj4gKyNpbmNsdWRlICJudmhvc3RfaW9jdGwuaCIKPj4gKyNpbmNsdWRlICJudm1hcF9p b2N0bC5oIgo+PiArI2luY2x1ZGUgIm52dGVncmFfaG9zdDF4LmgiCj4+ICsKPj4gKyNpbmNsdWRl ICJudnRlZ3JhLmgiCj4+ICsKPj4gKy8qCj4+ICsgKiBUYWcgdXNlZCBieSB0aGUga2VybmVsIHRv IGlkZW50aWZ5IGFsbG9jYXRpb25zLgo+PiArICogT2ZmaWNpYWwgc29mdHdhcmUgaGFzIGJlZW4g c2VlbiB1c2luZyAweDkwMCwgMHhmMDAsIDB4MTEwMCwgMHgxNDAwLCAweDQwMDAuCj4+ICsgKi8K Pj4gKyNkZWZpbmUgTUVNX1RBRyAoMHhmZWVkKQo+PiArCj4+ICtzdHJ1Y3QgRHJpdmVyU3RhdGUg ewo+PiArICAgIGludCBudm1hcF9mZCwgbnZob3N0X2ZkOwo+PiArfTsKPj4gKwo+PiArc3RhdGlj IEFWTXV0ZXggZ19kcml2ZXJfaW5pdF9tdHggPSBBVl9NVVRFWF9JTklUSUFMSVpFUjsKPj4gK3N0 YXRpYyBzdHJ1Y3QgRHJpdmVyU3RhdGUgKmdfZHJpdmVyX3N0YXRlID0gTlVMTDsKPj4gK3N0YXRp YyBBVkJ1ZmZlclJlZiAqZ19kcml2ZXJfc3RhdGVfcmVmID0gTlVMTDsKPj4gKwo+PiArc3RhdGlj IHZvaWQgZnJlZV9kcml2ZXJfZmRzKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkgewo+PiAr ICAgIGlmICghZ19kcml2ZXJfc3RhdGUpCj4+ICsgICAgICAgIHJldHVybjsKPj4gKwo+PiArI2lm bmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgaWYgKGdfZHJpdmVyX3N0YXRlLT5udm1hcF9mZCA+IDAp Cj4+ICsgICAgICAgIGNsb3NlKGdfZHJpdmVyX3N0YXRlLT5udm1hcF9mZCk7Cj4+ICsKPj4gKyAg ICBpZiAoZ19kcml2ZXJfc3RhdGUtPm52aG9zdF9mZCA+IDApCj4+ICsgICAgICAgIGNsb3NlKGdf ZHJpdmVyX3N0YXRlLT5udmhvc3RfZmQpOwo+PiArI2Vsc2UKPj4gKyAgICBudkZlbmNlRXhpdCgp Owo+PiArICAgIG52TWFwRXhpdCgpOwo+PiArICAgIG52RXhpdCgpOwo+PiArICAgIG1tdUV4aXQo KTsKPj4gKyNlbmRpZgo+PiArCj4+ICsgICAgZ19kcml2ZXJfaW5pdF9tdHggID0gKEFWTXV0ZXgp QVZfTVVURVhfSU5JVElBTElaRVI7Cj4+ICsgICAgZ19kcml2ZXJfc3RhdGVfcmVmID0gTlVMTDsK Pj4gKyAgICBhdl9mcmVlcCgmZ19kcml2ZXJfc3RhdGUpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGluaXRfZHJpdmVyX2Zkcyh2b2lkKSB7Cj4+ICsgICAgQVZCdWZmZXJSZWYgKnJlZjsKPj4g KyAgICBzdHJ1Y3QgRHJpdmVyU3RhdGUgKnN0YXRlOwo+PiArICAgIGludCBlcnI7Cj4+ICsKPj4g KyAgICBzdGF0ZSA9IGF2X21hbGxvY3ooc2l6ZW9mKCpzdGF0ZSkpOwo+PiArICAgIGlmICghc3Rh dGUpCj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4+ICsKPj4gKyAgICByZWYg PSBhdl9idWZmZXJfY3JlYXRlKCh1aW50OF90ICopc3RhdGUsIHNpemVvZigqc3RhdGUpLCBmcmVl X2RyaXZlcl9mZHMsIE5VTEwsIDApOwo+PiArICAgIGlmICghc3RhdGUpCj4+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4+ICsKPj4gKyAgICBnX2RyaXZlcl9zdGF0ZSAgICAgPSBz dGF0ZTsKPj4gKyAgICBnX2RyaXZlcl9zdGF0ZV9yZWYgPSByZWY7Cj4+ICsKPj4gKyNpZm5kZWYg X19TV0lUQ0hfXwo+PiArICAgIGVyciA9IG9wZW4oIi9kZXYvbnZtYXAiLCBPX1JEV1IgfCBPX1NZ TkMpOwo+IAo+IFRoZXJlJ3MgaGVscGVycyB0byBvcGVuIGZpbGVzLCBhbmQgeW91J3JlIG1pc3Np bmcgdGhlIGNsb3NlIG9uIGV4ZWMgaGVyZS4gQWxzbyBub3QgY2xlYXIgd2h5IHlvdSBuZWVkIE9f U1lOQy4KPiAKPiBCdXQgZGlkIHlvdSBjb25zaWRlciBqdXN0IHJlaW1wbGVtZW50aW5nIGxpYm52 ZGVjIGluc3RlYWQgb2YgcHV0dGluZyB0aGUgZGV2aWNlIGRyaXZlciBkaXJlY3RseSBpbiBGRm1w ZWc/Cj4gCgpJIGNoZWNrZWQgYW5kIG9mZmljaWFsIGNvZGUgdXNlcyBPX1JEV1J8T19TWU5DfE9f Q0xPRVhFQyBmb3IgCi9kZXYvbnZob3N0LWN0cmwgYW5kIC9kZXYvbnZtYXAsIHRoZW4gT19SRFdS fE9fQ0xPRVhFQyBmb3IgCi9kZXYvbnZob3N0LXZpYyBhbmQgL2Rldi9udmhvc3QtbnZkZWMuCkkg ZG9uJ3QgYmVsaWV2ZSBPX1NZTkMgaXMgcmVxdWlyZWQgYnV0IEkgdGhpbmsgaXQncyBnb29kCnBy YWN0aWNlIHRvIHJlcHJvZHVjZSBvZmZpY2FsIGJlaGF2aW9yIHdoZW4gcG9zc2libGUuIEknbGwg CnN3aXRjaCBldmVyeXRoaW5nIE9fUkRXUnxPX1NZTkN8T19DTE9FWEVDLgoKQXMgZm9yIHlvdXIg c2Vjb25kIHF1ZXN0aW9uLCBJIHByb2JhYmx5IHNob3VsZCd2ZSBnaXZlbiBzb21lCmNvbnRleHQg YWJvdXQgdGhpcyBkZWNpc2lvbi4gSW5pdGlhbGx5IEkgdGhvdWdodCBhYm91dCB3cml0aW5nIGEK dmFhcGkgZHJpdmVyLCBidXQgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMgSSBkZWNpZGVkIGFnYWlu c3QgaXQuCi0gRmlyc3QsIHRoZSBTd2l0Y2ggaXMgYSBwZXJmb3JtYW5jZS1jb25zdHJhaW5lZCBk ZXZpY2UsIHNvIHJlbW92aW5nCiAgYWJzdHJhY3Rpb24gbGF5ZXJzIGZyZWVzIHVwIENQVSB0aW1l IGFuZCBtZW1vcnkgYWNjZXNzZXMuCiAgSW50ZWdyYXRpbmcgZGlyZWN0bHkgaW50byBGRm1wZWcg ZW5hYmxlcyBzb21lIG9wdGltaXphdGlvbnMsIGZvciAKICBpbnN0YW5jZSBiaXRzdHJlYW0gZGF0 YSBpcyBuZXZlciBjb3BpZWQgdG8gYSBzdGFnaW5nIGJ1ZmZlciwgYnV0CiAgd3JpdHRlbiBkaXJl Y3RseSB0byB0aGUgbWVtb3J5LW1hcHBlZCBidWZmZXIgdGhhdCB3aWxsIGJlIGZlZCB0byB0aGUK ICBoYXJkd2FyZS4KICBUaGVyZSBhcmUgYWxzbyBzb21lIGNvZGVjcyB0aGF0IG5lZWQgaW5mb3Jt YXRpb24gbm90IGdpdmVuIGluIHZhYXBpIAogIHN0cnVjdHVyZXMgKHNlZSBmb3IgaW5zdGFuY2Ug c3dfaGRyX3NraXBfbGVuZ3RoIGluIHRoZSBIRVZDIGNvZGUpLAogIHNvIGl0IHdvdWxkIHJlcXVp cmUgcmUtcGFyc2luZyBzbGljZSBoZWFkZXJzLiBMaWtld2lzZSwgaW4gTlZERUMKICB0aGUgVlA5 IGVudHJvcHkgY29udGV4dCBpc24ndCBtYW5hZ2VkIGluIGhhcmR3YXJlL21pY3JvY29kZSwgc28g dGhlCiAgdmFhcGkgaW1wbGVtZW50YXRpb24gd291bGQgbmVlZCB0byBkdXBsaWNhdGUgd29yay4K LSBTZWNvbmQsIGEgdmFhcGkgZHJpdmVyIGhvbmVzdGx5IHNlZW1lZCBsaWtlIGFuIGVub3Jtb3Vz IGFtb3VudCBvZgogIHdvcmssIG9uIHRvcCBvZiBhbGwgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcg ZWZmb3J0cywgSSB3b3VsZCBuZWVkIHRvCiAgbWFrZSBGRm1wZWcgKGFuZCBsYXRlciBtcHYpIGhh cHB5IGFib3V0IG15IGltcGxlbWVudGF0aW9uLiAKLSBUaGlyZCwgSSB3YXNuJ3QgY2VydGFpbiBJ IHdvdWxkIGJlIGFibGUgdG8gaW1wbGVtZW50IHplcm8tY29weSAKICBmcmFtZSBpbXBvcnRzIGlu IG15IGdyYXBoaWNzIGNvbnRleHQuIFRoZSBnb2FsIHdhcyB0byB1c2UgZGVrbzNkCiAgKGh0dHBz Oi8vZ2l0aHViLmNvbS9kZXZraXRQcm8vZGVrbzNkKSwgYW4gZWZmaWNpZW50IGhvbWVicmV3IGdy YXBoaWNzCiAgQVBJIGZvciB0aGUgU3dpdGNoLCB3aGljaCBuZWVkcyBDUFUgYWRkcmVzc2VzIHRv IGltcG9ydCBleHRlcm5hbCAKICBidWZmZXJzLgoKPj4gKyAgICBpZiAoZXJyIDwgMCkKPj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoZXJybm8pOwo+PiArICAgIHN0YXRlLT5udm1hcF9mZCA9IGVy cjsKPj4gKwo+PiArICAgIGVyciA9IG9wZW4oIi9kZXYvbnZob3N0LWN0cmwiLCBPX1JEV1IgfCBP X1NZTkMpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihl cnJubyk7Cj4+ICsgICAgc3RhdGUtPm52aG9zdF9mZCA9IGVycjsKPj4gKyNlbHNlCj4+ICsgICAg ZXJyID0gbnZJbml0aWFsaXplKCk7Cj4+ICsgICAgaWYgKFJfRkFJTEVEKGVycikpCj4+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SKGVycik7Cj4+ICsKPj4gKyAgICBlcnIgPSBudk1hcEluaXQoKTsK Pj4gKyAgICBpZiAoUl9GQUlMRUQoZXJyKSkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJy KTsKPj4gKyAgICBzdGF0ZS0+bnZtYXBfZmQgPSBudk1hcEdldEZkKCk7Cj4+ICsKPj4gKyAgICBl cnIgPSBudkZlbmNlSW5pdCgpOwo+PiArICAgIGlmIChSX0ZBSUxFRChlcnIpKQo+PiArICAgICAg ICByZXR1cm4gQVZFUlJPUihlcnIpOwo+PiArICAgIC8qIGxpYm54IGRvZXNuJ3QgZXhwb3J0IHRo ZSBudmhvc3QtY3RybCBmaWxlIGRlc2NyaXB0b3IgKi8KPj4gKwo+PiArICAgIGVyciA9IG1tdUlu aXRpYWxpemUoKTsKPj4gKyAgICBpZiAoUl9GQUlMRUQoZXJyKSkKPj4gKyAgICAgICAgcmV0dXJu IEFWRVJST1IoZXJyKTsKPj4gKyNlbmRpZgo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbmxpbmUgaW50IGdldF9udm1hcF9mZCh2b2lkKSB7Cj4+ICsgICAgaWYg KCFnX2RyaXZlcl9zdGF0ZSkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfVU5LTk9XTjsKPj4g Kwo+PiArICAgIGlmICghZ19kcml2ZXJfc3RhdGUtPm52bWFwX2ZkKQo+PiArICAgICAgICByZXR1 cm4gQVZFUlJPUl9VTktOT1dOOwo+PiArCj4+ICsgICAgcmV0dXJuIGdfZHJpdmVyX3N0YXRlLT5u dm1hcF9mZDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBpbnQgZ2V0X252aG9zdF9mZCh2 b2lkKSB7Cj4+ICsgICAgaWYgKCFnX2RyaXZlcl9zdGF0ZSkKPj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfVU5LTk9XTjsKPj4gKwo+PiArICAgIGlmICghZ19kcml2ZXJfc3RhdGUtPm52aG9zdF9m ZCkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfVU5LTk9XTjsKPj4gKwo+PiArICAgIHJldHVy biBnX2RyaXZlcl9zdGF0ZS0+bnZob3N0X2ZkOwo+PiArfQo+PiArCj4+ICtBVkJ1ZmZlclJlZiAq YXZfbnZ0ZWdyYV9kcml2ZXJfaW5pdCh2b2lkKSB7Cj4+ICsgICAgQVZCdWZmZXJSZWYgKm91dCA9 IE5VTEw7Cj4+ICsgICAgaW50IGVycjsKPj4gKwo+PiArICAgIC8qCj4+ICsgICAgICogV2UgaGF2 ZSB0byBkbyB0aGlzIG92ZXJseSBjb21wbGV4IGRhbmNlIG9mIHB1dHRpbmcgZHJpdmVyIGZkcyBp biBhIHJlZmNvdW50ZWQgc3RydWN0LAo+PiArICAgICAqIG90aGVyd2lzZSBpbml0aWFsaXppbmcg bXVsdGlwbGUgaHdjb250ZXh0cyB3b3VsZCBsZWFrIGZkcwo+PiArICAgICAqLwo+PiArCj4+ICsg ICAgZXJyID0gZmZfbXV0ZXhfbG9jaygmZ19kcml2ZXJfaW5pdF9tdHgpOwo+PiArICAgIGlmIChl cnIgIT0gMCkKPj4gKyAgICAgICAgZ290byBleGl0Owo+PiArCj4+ICsgICAgaWYgKGdfZHJpdmVy X3N0YXRlX3JlZikgewo+PiArICAgICAgICBvdXQgPSBhdl9idWZmZXJfcmVmKGdfZHJpdmVyX3N0 YXRlX3JlZik7Cj4+ICsgICAgICAgIGdvdG8gZXhpdDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBl cnIgPSBpbml0X2RyaXZlcl9mZHMoKTsKPj4gKyAgICBpZiAoZXJyIDwgMCkgewo+PiArICAgICAg ICAvKiBJbiBjYXNlIG1lbW9yeSBhbGxvY2F0aW9ucyBmYWlsZWQsIGNhbGwgdGhlIGRlc3RydWN0 b3Igb3Vyc2VsdmVzICovCj4+ICsgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZ19kcml2ZXJfc3Rh dGVfcmVmKTsKPj4gKyAgICAgICAgZnJlZV9kcml2ZXJfZmRzKE5VTEwsIE5VTEwpOwo+PiArICAg ICAgICBnb3RvIGV4aXQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgb3V0ID0gZ19kcml2ZXJfc3Rh dGVfcmVmOwo+PiArCj4+ICtleGl0Ogo+PiArICAgIGZmX211dGV4X3VubG9jaygmZ19kcml2ZXJf aW5pdF9tdHgpOwo+PiArICAgIHJldHVybiBvdXQ7Cj4+ICt9Cj4+ICsKPj4gK2ludCBhdl9udnRl Z3JhX2NoYW5uZWxfb3BlbihBVk5WVGVncmFDaGFubmVsICpjaGFubmVsLCBjb25zdCBjaGFyICpk ZXYpIHsKPj4gKyAgICBpbnQgZXJyOwo+PiArI2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgc3Ry dWN0IG52aG9zdF9nZXRfcGFyYW1fYXJnIGFyZ3M7Cj4+ICsKPj4gKyAgICBlcnIgPSBvcGVuKGRl diwgT19SRFdSKTsKPj4gKyAgICBpZiAoZXJyIDwgMCkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoZXJybm8pOwo+PiArCj4+ICsgICAgY2hhbm5lbC0+ZmQgPSBlcnI7Cj4+ICsKPj4gKyAgICBh cmdzID0gKHN0cnVjdCBudmhvc3RfZ2V0X3BhcmFtX2FyZyl7MH07Cj4+ICsKPj4gKyAgICBlcnIg PSBpb2N0bChjaGFubmVsLT5mZCwgTlZIT1NUX0lPQ1RMX0NIQU5ORUxfR0VUX1NZTkNQT0lOVCwg JmFyZ3MpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+PiArICAgICAgICBnb3RvIGZhaWw7Cj4+ICsK Pj4gKyAgICBjaGFubmVsLT5zeW5jcHQgPSBhcmdzLnZhbHVlOwo+PiArCj4+ICsgICAgcmV0dXJu IDA7Cj4+ICsKPj4gK2ZhaWw6Cj4+ICsgICAgY2xvc2UoY2hhbm5lbC0+ZmQpOwo+PiArICAgIHJl dHVybiBBVkVSUk9SKGVycm5vKTsKPj4gKyNlbHNlCj4+ICsgICAgZXJyID0gbnZDaGFubmVsQ3Jl YXRlKCZjaGFubmVsLT5jaGFubmVsLCBkZXYpOwo+PiArICAgIGlmIChSX0ZBSUxFRChlcnIpKQo+ PiArICAgICAgICByZXR1cm4gQVZFUlJPUihlcnIpOwo+PiArCj4+ICsgICAgZXJyID0gbnZpb2N0 bENoYW5uZWxfR2V0U3luY3B0KGNoYW5uZWwtPmNoYW5uZWwuZmQsIDAsICZjaGFubmVsLT5zeW5j cHQpOwo+PiArICAgIGlmIChSX0ZBSUxFRChlcnIpKQo+PiArICAgICAgICBnb3RvIGZhaWw7Cj4+ ICsKPj4gKyAgICByZXR1cm4gMDsKPj4gKwo+PiArZmFpbDoKPj4gKyAgICBudkNoYW5uZWxDbG9z ZSgmY2hhbm5lbC0+Y2hhbm5lbCk7Cj4+ICsgICAgcmV0dXJuIEFWRVJST1IoZXJyKTsKPj4gKyNl bmRpZgo+PiArfQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX2Nsb3NlKEFWTlZUZWdy YUNoYW5uZWwgKmNoYW5uZWwpIHsKPj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIGlmICgh Y2hhbm5lbC0+ZmQpCj4+ICsgICAgICAgIHJldHVybiAwOwo+PiArCj4+ICsgICAgcmV0dXJuIGNs b3NlKGNoYW5uZWwtPmZkKTsKPj4gKyNlbHNlCj4+ICsgICAgbnZDaGFubmVsQ2xvc2UoJmNoYW5u ZWwtPmNoYW5uZWwpOwo+PiArICAgIHJldHVybiAwOwo+PiArI2VuZGlmCj4+ICt9Cj4+ICsKPj4g K2ludCBhdl9udnRlZ3JhX2NoYW5uZWxfZ2V0X2Nsb2NrX3JhdGUoQVZOVlRlZ3JhQ2hhbm5lbCAq Y2hhbm5lbCwgdWludDMyX3QgbW9kdWxlaWQsIHVpbnQzMl90ICpjbG9ja19yYXRlKSB7Cj4+ICsg ICAgaW50IGVycjsKPj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIHN0cnVjdCBudmhvc3Rf Y2xrX3JhdGVfYXJncyBhcmdzOwo+PiArCj4+ICsgICAgYXJncyA9IChzdHJ1Y3QgbnZob3N0X2Ns a19yYXRlX2FyZ3Mpewo+PiArICAgICAgICAubW9kdWxlaWQgPSBtb2R1bGVpZCwKPj4gKyAgICB9 Owo+PiArCj4+ICsgICAgZXJyID0gaW9jdGwoY2hhbm5lbC0+ZmQsIE5WSE9TVF9JT0NUTF9DSEFO TkVMX0dFVF9DTEtfUkFURSwgJmFyZ3MpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+PiArICAgICAg ICByZXR1cm4gQVZFUlJPUihlcnJubyk7Cj4+ICsKPj4gKyAgICBpZiAoY2xvY2tfcmF0ZSkKPj4g KyAgICAgICAgKmNsb2NrX3JhdGUgPSBhcmdzLnJhdGU7Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsK Pj4gKyNlbHNlCj4+ICsgICAgdWludDMyX3QgdG1wOwo+PiArCj4+ICsgICAgZXJyID0gQVZFUlJP UihudmlvY3RsQ2hhbm5lbF9HZXRNb2R1bGVDbG9ja1JhdGUoY2hhbm5lbC0+Y2hhbm5lbC5mZCwg bW9kdWxlaWQsICZ0bXApKTsKPj4gKyAgICBpZiAoZXJyIDwgMCkKPj4gKyAgICAgICAgcmV0dXJu IGVycjsKPj4gKwo+PiArICAgIGlmIChjbG9ja19yYXRlKQo+PiArICAgICAgICAqY2xvY2tfcmF0 ZSA9IHRtcCAqIDEwMDA7Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsKPj4gKyNlbmRpZgo+PiArfQo+ PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX3NldF9jbG9ja19yYXRlKEFWTlZUZWdyYUNo YW5uZWwgKmNoYW5uZWwsIHVpbnQzMl90IG1vZHVsZWlkLCB1aW50MzJfdCBjbG9ja19yYXRlKSB7 Cj4+ICsjaWZuZGVmIF9fU1dJVENIX18KPj4gKyAgICBzdHJ1Y3QgbnZob3N0X2Nsa19yYXRlX2Fy Z3MgYXJnczsKPj4gKwo+PiArICAgIGFyZ3MgPSAoc3RydWN0IG52aG9zdF9jbGtfcmF0ZV9hcmdz KXsKPj4gKyAgICAgICAgLnJhdGUgICAgID0gY2xvY2tfcmF0ZSwKPj4gKyAgICAgICAgLm1vZHVs ZWlkID0gbW9kdWxlaWQsCj4+ICsgICAgfTsKPj4gKwo+PiArICAgIHJldHVybiAoaW9jdGwoY2hh bm5lbC0+ZmQsIE5WSE9TVF9JT0NUTF9DSEFOTkVMX1NFVF9DTEtfUkFURSwgJmFyZ3MpIDwgMCkg PyBBVkVSUk9SKGVycm5vKSA6IDA7Cj4+ICsjZWxzZQo+PiArICAgIHJldHVybiBBVkVSUk9SKG52 aW9jdGxDaGFubmVsX1NldE1vZHVsZUNsb2NrUmF0ZShjaGFubmVsLT5jaGFubmVsLmZkLCBtb2R1 bGVpZCwgY2xvY2tfcmF0ZSAvIDEwMDApKTsKPj4gKyNlbmRpZgo+PiArfQo+PiArCj4+ICtpbnQg YXZfbnZ0ZWdyYV9jaGFubmVsX3N1Ym1pdChBVk5WVGVncmFDaGFubmVsICpjaGFubmVsLCBBVk5W VGVncmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3QgKmZlbmNlKSB7Cj4+ICsgICAgaW50IGVycjsK Pj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIHN0cnVjdCBudmhvc3Rfc3VibWl0X2FyZ3Mg YXJnczsKPj4gKwo+PiArICAgIGFyZ3MgPSAoc3RydWN0IG52aG9zdF9zdWJtaXRfYXJncyl7Cj4+ ICsgICAgICAgIC5zdWJtaXRfdmVyc2lvbiAgICAgICAgICA9IE5WSE9TVF9TVUJNSVRfVkVSU0lP Tl9WMiwKPj4gKyAgICAgICAgLm51bV9zeW5jcHRfaW5jcnMgICAgICAgID0gY21kYnVmLT5udW1f c3luY3B0X2luY3JzLAo+PiArICAgICAgICAubnVtX2NtZGJ1ZnMgICAgICAgICAgICAgPSBjbWRi dWYtPm51bV9jbWRidWZzLAo+PiArICAgICAgICAubnVtX3JlbG9jcyAgICAgICAgICAgICAgPSBj bWRidWYtPm51bV9yZWxvY3MsCj4+ICsgICAgICAgIC5udW1fd2FpdGNoa3MgICAgICAgICAgICA9 IGNtZGJ1Zi0+bnVtX3dhaXRjaGtzLAo+PiArICAgICAgICAudGltZW91dCAgICAgICAgICAgICAg ICAgPSAwLAo+PiArICAgICAgICAuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSAwLAo+PiArICAg ICAgICAuZmVuY2UgICAgICAgICAgICAgICAgICAgPSAwLAo+PiArICAgICAgICAuc3luY3B0X2lu Y3JzICAgICAgICAgICAgPSAodWludHB0cl90KWNtZGJ1Zi0+c3luY3B0X2luY3JzLAo+PiArICAg ICAgICAuY21kYnVmX2V4dHMgICAgICAgICAgICAgPSAodWludHB0cl90KWNtZGJ1Zi0+Y21kYnVm X2V4dHMsCj4+ICsgICAgICAgIC5jaGVja3N1bV9tZXRob2RzICAgICAgICA9IDAsCj4+ICsgICAg ICAgIC5jaGVja3N1bV9mYWxjb25fbWV0aG9kcyA9IDAsCj4+ICsgICAgICAgIC5wYWQgICAgICAg ICAgICAgICAgICAgICA9IHsgMCB9LAo+PiArICAgICAgICAucmVsb2NfdHlwZXMgICAgICAgICAg ICAgPSAodWludHB0cl90KWNtZGJ1Zi0+cmVsb2NfdHlwZXMsCj4+ICsgICAgICAgIC5jbWRidWZz ICAgICAgICAgICAgICAgICA9ICh1aW50cHRyX3QpY21kYnVmLT5jbWRidWZzLAo+PiArICAgICAg ICAucmVsb2NzICAgICAgICAgICAgICAgICAgPSAodWludHB0cl90KWNtZGJ1Zi0+cmVsb2NzLAo+ PiArICAgICAgICAucmVsb2Nfc2hpZnRzICAgICAgICAgICAgPSAodWludHB0cl90KWNtZGJ1Zi0+ cmVsb2Nfc2hpZnRzLAo+PiArICAgICAgICAud2FpdGNoa3MgICAgICAgICAgICAgICAgPSAodWlu dHB0cl90KWNtZGJ1Zi0+d2FpdGNoa3MsCj4+ICsgICAgICAgIC53YWl0YmFzZXMgICAgICAgICAg ICAgICA9IDAsCj4+ICsgICAgICAgIC5jbGFzc19pZHMgICAgICAgICAgICAgICA9ICh1aW50cHRy X3QpY21kYnVmLT5jbGFzc19pZHMsCj4+ICsgICAgICAgIC5mZW5jZXMgICAgICAgICAgICAgICAg ICA9ICh1aW50cHRyX3QpY21kYnVmLT5mZW5jZXMsCj4+ICsgICAgfTsKPj4gKwo+PiArICAgIGVy ciA9IGlvY3RsKGNoYW5uZWwtPmZkLCBOVkhPU1RfSU9DVExfQ0hBTk5FTF9TVUJNSVQsICZhcmdz KTsKPj4gKyAgICBpZiAoZXJyIDwgMCkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJybm8p Owo+PiArCj4+ICsgICAgaWYgKGZlbmNlKQo+PiArICAgICAgICAqZmVuY2UgPSBhcmdzLmZlbmNl Owo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICsjZWxzZQo+PiArICAgIG52aW9jdGxfZmVuY2Ug dG1wOwo+PiArCj4+ICsgICAgZXJyID0gbnZpb2N0bENoYW5uZWxfU3VibWl0KGNoYW5uZWwtPmNo YW5uZWwuZmQsIChudmlvY3RsX2NtZGJ1ZiAqKWNtZGJ1Zi0+Y21kYnVmcywgY21kYnVmLT5udW1f Y21kYnVmcywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwg MCwgKG52aW9jdGxfc3luY3B0X2luY3IgKiljbWRidWYtPnN5bmNwdF9pbmNycywgY21kYnVmLT5u dW1fc3luY3B0X2luY3JzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1w LCAxKTsKPj4gKyAgICBpZiAoUl9GQUlMRUQoZXJyKSkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoZXJyKTsKPj4gKwo+PiArICAgIGlmIChmZW5jZSkKPj4gKyAgICAgICAgKmZlbmNlID0gdG1w LnZhbHVlOwo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICsjZW5kaWYKPj4gK30KPj4gKwo+PiAr aW50IGF2X252dGVncmFfY2hhbm5lbF9zZXRfc3VibWl0X3RpbWVvdXQoQVZOVlRlZ3JhQ2hhbm5l bCAqY2hhbm5lbCwgdWludDMyX3QgdGltZW91dF9tcykgewo+PiArI2lmbmRlZiBfX1NXSVRDSF9f Cj4+ICsgICAgc3RydWN0IG52aG9zdF9zZXRfdGltZW91dF9hcmdzIGFyZ3M7Cj4+ICsKPj4gKyAg ICBhcmdzID0gKHN0cnVjdCBudmhvc3Rfc2V0X3RpbWVvdXRfYXJncyl7Cj4+ICsgICAgICAgIC50 aW1lb3V0ID0gdGltZW91dF9tcywKPj4gKyAgICB9Owo+PiArCj4+ICsgICAgcmV0dXJuIChpb2N0 bChjaGFubmVsLT5mZCwgTlZIT1NUX0lPQ1RMX0NIQU5ORUxfU0VUX1RJTUVPVVQsICZhcmdzKSA8 IDApID8gQVZFUlJPUihlcnJubykgOiAwOwo+PiArI2Vsc2UKPj4gKyAgICByZXR1cm4gQVZFUlJP UihudmlvY3RsQ2hhbm5lbF9TZXRTdWJtaXRUaW1lb3V0KGNoYW5uZWwtPmNoYW5uZWwuZmQsIHRp bWVvdXRfbXMpKTsKPj4gKyNlbmRpZgo+PiArfQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9zeW5j cHRfd2FpdChBVk5WVGVncmFDaGFubmVsICpjaGFubmVsLCB1aW50MzJfdCB0aHJlc2hvbGQsIGlu dDMyX3QgdGltZW91dCkgewo+PiArI2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgc3RydWN0IG52 aG9zdF9jdHJsX3N5bmNwdF93YWl0ZXhfYXJncyBhcmdzID0gewo+PiArICAgICAgICAuaWQgICAg ICA9IGNoYW5uZWwtPnN5bmNwdCwKPj4gKyAgICAgICAgLnRocmVzaCAgPSB0aHJlc2hvbGQsCj4+ ICsgICAgICAgIC50aW1lb3V0ID0gdGltZW91dCwKPj4gKyAgICB9Owo+PiArCj4+ICsgICAgcmV0 dXJuIChpb2N0bChnZXRfbnZob3N0X2ZkKCksIE5WSE9TVF9JT0NUTF9DVFJMX1NZTkNQVF9XQUlU RVgsICZhcmdzKSA8IDApID8gQVZFUlJPUihlcnJubykgOiAwOwo+PiArI2Vsc2UKPj4gKyAgICBO dkZlbmNlIGZlbmNlOwo+PiArCj4+ICsgICAgZmVuY2UgPSAoTnZGZW5jZSl7Cj4+ICsgICAgICAg IC5pZCAgICA9IGNoYW5uZWwtPnN5bmNwdCwKPj4gKyAgICAgICAgLnZhbHVlID0gdGhyZXNob2xk LAo+PiArICAgIH07Cj4+ICsKPj4gKyAgICByZXR1cm4gQVZFUlJPUihudkZlbmNlV2FpdCgmZmVu Y2UsIHRpbWVvdXQpKTsKPj4gKyNlbmRpZgo+PiArfQo+PiArCj4+ICsjaWZkZWYgX19TV0lUQ0hf Xwo+PiArc3RhdGljIGlubGluZSBib29sIGNvbnZlcnRfY2FjaGVfZmxhZ3ModWludDMyX3QgZmxh Z3MpIHsKPj4gKyAgICAvKiBSZXR1cm4gd2hldGhlciB0aGUgbWFwIHNob3VsZCBiZSBDUFUtY2Fj aGVhYmxlICovCj4+ICsgICAgc3dpdGNoIChmbGFncyAmIE5WTUFQX0hBTkRMRV9DQUNIRV9GTEFH KSB7Cj4+ICsgICAgICAgIGNhc2UgTlZNQVBfSEFORExFX0lOTkVSX0NBQ0hFQUJMRToKPj4gKyAg ICAgICAgY2FzZSBOVk1BUF9IQU5ETEVfQ0FDSEVBQkxFOgo+PiArICAgICAgICAgICAgcmV0dXJu IHRydWU7Cj4+ICsgICAgICAgIGRlZmF1bHQ6Cj4+ICsgICAgICAgICAgICByZXR1cm4gZmFsc2U7 Cj4+ICsgICAgfQo+PiArfQo+PiArI2VuZGlmCj4+ICsKPj4gK2ludCBhdl9udnRlZ3JhX21hcF9h bGxvY2F0ZShBVk5WVGVncmFNYXAgKm1hcCwgQVZOVlRlZ3JhQ2hhbm5lbCAqY2hhbm5lbCwgdWlu dDMyX3Qgc2l6ZSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhbGln biwgaW50IGhlYXBfbWFzaywgaW50IGZsYWdzKQo+PiArewo+PiArI2lmbmRlZiBfX1NXSVRDSF9f Cj4+ICsgICAgc3RydWN0IG52bWFwX2NyZWF0ZV9oYW5kbGUgY3JlYXRlX2FyZ3M7Cj4+ICsgICAg c3RydWN0IG52bWFwX2FsbG9jX2hhbmRsZSBhbGxvY19hcmdzOwo+PiArICAgIGludCBlcnI7Cj4+ ICsKPj4gKyAgICBjcmVhdGVfYXJncyA9IChzdHJ1Y3QgbnZtYXBfY3JlYXRlX2hhbmRsZSl7Cj4+ ICsgICAgICAgIC5zaXplICAgPSBzaXplLAo+PiArICAgIH07Cj4+ICsKPj4gKyAgICBlcnIgPSBp b2N0bChnZXRfbnZtYXBfZmQoKSwgTlZNQVBfSU9DX0NSRUFURSwgJmNyZWF0ZV9hcmdzKTsKPj4g KyAgICBpZiAoZXJyIDwgMCkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJybm8pOwo+PiAr Cj4+ICsgICAgbWFwLT5zaXplICAgPSBzaXplOwo+PiArICAgIG1hcC0+aGFuZGxlID0gY3JlYXRl X2FyZ3MuaGFuZGxlOwo+PiArCj4+ICsgICAgYWxsb2NfYXJncyA9IChzdHJ1Y3QgbnZtYXBfYWxs b2NfaGFuZGxlKXsKPj4gKyAgICAgICAgLmhhbmRsZSAgICA9IGNyZWF0ZV9hcmdzLmhhbmRsZSwK Pj4gKyAgICAgICAgLmhlYXBfbWFzayA9IGhlYXBfbWFzaywKPj4gKyAgICAgICAgLmZsYWdzICAg ICA9IGZsYWdzIHwgKE1FTV9UQUcgPDwgMTYpLAo+PiArICAgICAgICAuYWxpZ24gICAgID0gYWxp Z24sCj4+ICsgICAgfTsKPj4gKwo+PiArICAgIGVyciA9IGlvY3RsKGdldF9udm1hcF9mZCgpLCBO Vk1BUF9JT0NfQUxMT0MsICZhbGxvY19hcmdzKTsKPj4gKyAgICBpZiAoZXJyIDwgMCkKPj4gKyAg ICAgICAgZ290byBmYWlsOwo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICsKPj4gK2ZhaWw6Cj4+ ICsgICAgYXZfbnZ0ZWdyYV9tYXBfZnJlZShtYXApOwo+PiArICAgIHJldHVybiBBVkVSUk9SKGVy cm5vKTsKPj4gKyNlbHNlCj4+ICsgICAgdm9pZCAqbWVtOwo+PiArCj4+ICsgICAgbWFwLT5vd25l ciA9IGNoYW5uZWwtPmNoYW5uZWwuZmQ7Cj4+ICsKPj4gKyAgICBzaXplID0gRkZBTElHTihzaXpl LCAweDEwMDApOwo+PiArCj4+ICsgICAgbWVtID0gYWxpZ25lZF9hbGxvYyhGRkFMSUdOKGFsaWdu LCAweDEwMDApLCBzaXplKTsKPj4gKyAgICBpZiAoIW1lbSkKPj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKPj4gKwo+PiArICAgIHJldHVybiBBVkVSUk9SKG52TWFwQ3JlYXRlKCZt YXAtPm1hcCwgbWVtLCBzaXplLCAweDEwMDAwLCBOdktpbmRfUGl0Y2gsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udmVydF9jYWNoZV9mbGFncyhmbGFncykpKTsKPj4gKyNl bmRpZgo+PiArfQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9tYXBfZnJlZShBVk5WVGVncmFNYXAg Km1hcCkgewo+PiArI2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgaW50IGVycjsKPj4gKwo+PiAr ICAgIGlmICghbWFwLT5oYW5kbGUpCj4+ICsgICAgICAgIHJldHVybiAwOwo+PiArCj4+ICsgICAg ZXJyID0gaW9jdGwoZ2V0X252bWFwX2ZkKCksIE5WTUFQX0lPQ19GUkVFLCBtYXAtPmhhbmRsZSk7 Cj4+ICsgICAgaWYgKGVyciA8IDApCj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKGVycm5vKTsK Pj4gKwo+PiArICAgIG1hcC0+aGFuZGxlID0gMDsKPj4gKwo+PiArICAgIHJldHVybiAwOwo+PiAr I2Vsc2UKPj4gKyAgICB2b2lkICphZGRyID0gbWFwLT5tYXAuY3B1X2FkZHI7Cj4+ICsKPj4gKyAg ICBpZiAoIW1hcC0+bWFwLmNwdV9hZGRyKQo+PiArICAgICAgICByZXR1cm4gMDsKPj4gKwo+PiAr ICAgIG52TWFwQ2xvc2UoJm1hcC0+bWFwKTsKPj4gKyAgICBmcmVlKGFkZHIpOwo+PiArICAgIHJl dHVybiAwOwo+PiArI2VuZGlmCj4+ICt9Cj4+ICsKPj4gK2ludCBhdl9udnRlZ3JhX21hcF9mcm9t X3ZhKEFWTlZUZWdyYU1hcCAqbWFwLCBBVk5WVGVncmFDaGFubmVsICpvd25lciwgdm9pZCAqbWVt LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3Qg YWxpZ24sIHVpbnQzMl90IGZsYWdzKQo+PiArewo+PiArI2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsg ICAgc3RydWN0IG52bWFwX2NyZWF0ZV9oYW5kbGVfZnJvbV92YSBhcmdzOwo+PiArICAgIGludCBl cnI7Cj4+ICsKPj4gKyAgICBhcmdzID0gKHN0cnVjdCBudm1hcF9jcmVhdGVfaGFuZGxlX2Zyb21f dmEpewo+PiArICAgICAgICAudmEgICAgPSAodWludHB0cl90KW1lbSwKPj4gKyAgICAgICAgLnNp emUgID0gc2l6ZSwKPj4gKyAgICAgICAgLmZsYWdzID0gZmxhZ3MgfCAoTUVNX1RBRyA8PCAxNiks Cj4+ICsgICAgfTsKPj4gKwo+PiArICAgIGVyciA9IGlvY3RsKGdldF9udm1hcF9mZCgpLCBOVk1B UF9JT0NfRlJPTV9WQSwgJmFyZ3MpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+PiArICAgICAgICBy ZXR1cm4gQVZFUlJPUihlcnJubyk7Cj4+ICsKPj4gKyAgICBtYXAtPmNwdV9hZGRyID0gbWVtOwo+ PiArICAgIG1hcC0+c2l6ZSAgICAgPSBzaXplOwo+PiArICAgIG1hcC0+aGFuZGxlICAgPSBhcmdz LmhhbmRsZTsKPj4gKwo+PiArICAgIHJldHVybiAwOwo+PiArI2Vsc2UKPj4gKwo+PiArICAgIG1h cC0+b3duZXIgPSBvd25lci0+Y2hhbm5lbC5mZDsKPj4gKwo+PiArICAgIHJldHVybiBBVkVSUk9S KG52TWFwQ3JlYXRlKCZtYXAtPm1hcCwgbWVtLCBGRkFMSUdOKHNpemUsIDB4MTAwMCksIDB4MTAw MDAsIE52S2luZF9QaXRjaCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252 ZXJ0X2NhY2hlX2ZsYWdzKGZsYWdzKSkpOzsKPj4gKyNlbmRpZgo+PiArfQo+PiArCj4+ICtpbnQg YXZfbnZ0ZWdyYV9tYXBfY2xvc2UoQVZOVlRlZ3JhTWFwICptYXApIHsKPj4gKyNpZm5kZWYgX19T V0lUQ0hfXwo+PiArICAgIHJldHVybiBhdl9udnRlZ3JhX21hcF9mcmVlKG1hcCk7Cj4+ICsjZWxz ZQo+PiArICAgIG52TWFwQ2xvc2UoJm1hcC0+bWFwKTsKPj4gKyAgICByZXR1cm4gMDsKPj4gKyNl bmRpZgo+PiArfQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9tYXBfbWFwKEFWTlZUZWdyYU1hcCAq bWFwKSB7Cj4+ICsjaWZuZGVmIF9fU1dJVENIX18KPj4gKyAgICB2b2lkICphZGRyOwo+PiArCj4+ ICsgICAgYWRkciA9IG1tYXAoTlVMTCwgbWFwLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF LCBNQVBfU0hBUkVELCBtYXAtPmhhbmRsZSwgMCk7Cj4+ICsgICAgaWYgKGFkZHIgPT0gTUFQX0ZB SUxFRCkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJybm8pOwo+PiArCj4+ICsgICAgbWFw LT5jcHVfYWRkciA9IGFkZHI7Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsKPj4gKyNlbHNlCj4+ICsg ICAgbnZpb2N0bF9jb21tYW5kX2J1ZmZlcl9tYXAgcGFyYW1zOwo+PiArICAgIGludCBlcnI7Cj4+ ICsKPj4gKyAgICBwYXJhbXMgPSAobnZpb2N0bF9jb21tYW5kX2J1ZmZlcl9tYXApewo+PiArICAg ICAgICAuaGFuZGxlID0gbWFwLT5tYXAuaGFuZGxlLAo+PiArICAgIH07Cj4+ICsKPj4gKyAgICBl cnIgPSBudmlvY3RsQ2hhbm5lbF9NYXBDb21tYW5kQnVmZmVyKG1hcC0+b3duZXIsICZwYXJhbXMs IDEsIGZhbHNlKTsKPj4gKyAgICBpZiAoUl9GQUlMRUQoZXJyKSkKPj4gKyAgICAgICAgcmV0dXJu IEFWRVJST1IoZXJyKTsKPj4gKwo+PiArICAgIG1hcC0+aW92YSA9IHBhcmFtcy5pb3ZhOwo+PiAr Cj4+ICsgICAgcmV0dXJuIDA7Cj4+ICsjZW5kaWYKPj4gK30KPj4gKwo+PiAraW50IGF2X252dGVn cmFfbWFwX3VubWFwKEFWTlZUZWdyYU1hcCAqbWFwKSB7Cj4+ICsgICAgaW50IGVycjsKPj4gKyNp Zm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIGlmICghbWFwLT5jcHVfYWRkcikKPj4gKyAgICAgICAg cmV0dXJuIDA7Cj4+ICsKPj4gKyAgICBlcnIgPSBtdW5tYXAobWFwLT5jcHVfYWRkciwgbWFwLT5z aXplKTsKPj4gKyAgICBpZiAoZXJyIDwgMCkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJy bm8pOwo+PiArCj4+ICsgICAgbWFwLT5jcHVfYWRkciA9IE5VTEw7Cj4+ICsKPj4gKyAgICByZXR1 cm4gMDsKPj4gKyNlbHNlCj4+ICsgICAgbnZpb2N0bF9jb21tYW5kX2J1ZmZlcl9tYXAgcGFyYW1z Owo+PiArCj4+ICsgICAgaWYgKCFtYXAtPmlvdmEpCj4+ICsgICAgICAgIHJldHVybiAwOwo+PiAr Cj4+ICsgICAgcGFyYW1zID0gKG52aW9jdGxfY29tbWFuZF9idWZmZXJfbWFwKXsKPj4gKyAgICAg ICAgLmhhbmRsZSA9IG1hcC0+bWFwLmhhbmRsZSwKPj4gKyAgICAgICAgLmlvdmEgICA9IG1hcC0+ aW92YSwKPj4gKyAgICB9Owo+PiArCj4+ICsgICAgZXJyID0gbnZpb2N0bENoYW5uZWxfVW5tYXBD b21tYW5kQnVmZmVyKG1hcC0+b3duZXIsICZwYXJhbXMsIDEsIGZhbHNlKTsKPj4gKyAgICBpZiAo Ul9GQUlMRUQoZXJyKSkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJyKTsKPj4gKwo+PiAr ICAgIG1hcC0+aW92YSA9IDA7Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsKPj4gKyNlbmRpZgo+PiAr fQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9tYXBfY2FjaGVfb3AoQVZOVlRlZ3JhTWFwICptYXAs IGludCBvcCwgdm9pZCAqYWRkciwgc2l6ZV90IGxlbikgewo+PiArI2lmbmRlZiBfX1NXSVRDSF9f Cj4+ICsgICAgc3RydWN0IG52bWFwX2NhY2hlX29wIGFyZ3M7Cj4+ICsKPj4gKyAgICBhcmdzID0g KHN0cnVjdCBudm1hcF9jYWNoZV9vcCl7Cj4+ICsgICAgICAgIC5hZGRyICAgPSAodWludHB0cl90 KWFkZHIsCj4+ICsgICAgICAgIC5sZW4gICAgPSBsZW4sCj4+ICsgICAgICAgIC5oYW5kbGUgPSBh dl9udnRlZ3JhX21hcF9nZXRfaGFuZGxlKG1hcCksCj4+ICsgICAgICAgIC5vcCAgICAgPSBvcCwK Pj4gKyAgICB9Owo+PiArCj4+ICsgICAgcmV0dXJuIEFWRVJST1IoaW9jdGwoZ2V0X252bWFwX2Zk KCksIE5WTUFQX0lPQ19DQUNIRSwgJmFyZ3MpKTsKPj4gKyNlbHNlCj4+ICsgICAgaWYgKCFtYXAt Pm1hcC5pc19jcHVfY2FjaGVhYmxlKQo+PiArICAgICAgICByZXR1cm4gMDsKPj4gKwo+PiArICAg IHN3aXRjaCAob3ApIHsKPj4gKyAgICAgICAgY2FzZSBOVk1BUF9DQUNIRV9PUF9XQjoKPj4gKyAg ICAgICAgICAgIGFybURDYWNoZUNsZWFuKGFkZHIsIGxlbik7Cj4+ICsgICAgICAgICAgICBicmVh azsKPj4gKyAgICAgICAgZGVmYXVsdDoKPj4gKyAgICAgICAgY2FzZSBOVk1BUF9DQUNIRV9PUF9J TlY6Cj4+ICsgICAgICAgIGNhc2UgTlZNQVBfQ0FDSEVfT1BfV0JfSU5WOgo+PiArICAgICAgICAg ICAgLyogbGlibnggaW50ZXJuYWxseSBwZXJmb3JtcyBhIGNsZWFuLWludmFsaWRhdGUsIHNpbmNl IGludmFsaWRhdGUgaXMgYSBwcml2aWxlZ2VkIGluc3RydWN0aW9uICovCj4+ICsgICAgICAgICAg ICBhcm1EQ2FjaGVGbHVzaChhZGRyLCBsZW4pOwo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsg ICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICsjZW5kaWYKPj4gK30KPj4gKwo+PiAraW50 IGF2X252dGVncmFfbWFwX3JlYWxsb2MoQVZOVlRlZ3JhTWFwICptYXAsIHVpbnQzMl90IHNpemUs IHVpbnQzMl90IGFsaWduLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlYXBf bWFzaywgaW50IGZsYWdzKQo+PiArewo+PiArICAgIEFWTlZUZWdyYUNoYW5uZWwgY2hhbm5lbDsK Pj4gKyAgICBBVk5WVGVncmFNYXAgdG1wID0gezB9Owo+PiArICAgIGludCBlcnI7Cj4+ICsKPj4g KyAgICBpZiAoYXZfbnZ0ZWdyYV9tYXBfZ2V0X3NpemUobWFwKSA+PSBzaXplKQo+PiArICAgICAg ICByZXR1cm4gMDsKPj4gKwo+PiArICAgIC8qIER1bW15IGNoYW5uZWwgb2JqZWN0IHRvIGhvbGQg dGhlIG93bmVyIGZkICovCj4+ICsgICAgY2hhbm5lbCA9IChBVk5WVGVncmFDaGFubmVsKXsKPj4g KyNpZmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgICAgIC5jaGFubmVsLmZkID0gbWFwLT5vd25lciwK Pj4gKyNlbmRpZgo+PiArICAgIH07Cj4+ICsKPj4gKyAgICBlcnIgPSBhdl9udnRlZ3JhX21hcF9j cmVhdGUoJnRtcCwgJmNoYW5uZWwsIHNpemUsIGFsaWduLCBoZWFwX21hc2ssIGZsYWdzKTsKPj4g KyAgICBpZiAoZXJyIDwgMCkKPj4gKyAgICAgICAgZ290byBmYWlsOwo+PiArCj4+ICsgICAgbWVt Y3B5KGF2X252dGVncmFfbWFwX2dldF9hZGRyKCZ0bXApLCBhdl9udnRlZ3JhX21hcF9nZXRfYWRk cihtYXApLCBhdl9udnRlZ3JhX21hcF9nZXRfc2l6ZShtYXApKTsKPj4gKwo+PiArICAgIGVyciA9 IGF2X252dGVncmFfbWFwX2Rlc3Ryb3kobWFwKTsKPj4gKyAgICBpZiAoZXJyIDwgMCkKPj4gKyAg ICAgICAgZ290byBmYWlsOwo+PiArCj4+ICsgICAgKm1hcCA9IHRtcDsKPj4gKwo+PiArICAgIHJl dHVybiAwOwo+PiArCj4+ICtmYWlsOgo+PiArICAgIGF2X252dGVncmFfbWFwX2Rlc3Ryb3koJnRt cCk7Cj4+ICsgICAgcmV0dXJuIGVycjsKPj4gK30KPj4gKwo+PiAraW50IGF2X252dGVncmFfY21k YnVmX2luaXQoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYpIHsKPj4gKyAgICBjbWRidWYtPm51bV9j bWRidWZzICAgICAgPSAwOwo+PiArI2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgY21kYnVmLT5u dW1fcmVsb2NzICAgICAgID0gMDsKPj4gKyAgICBjbWRidWYtPm51bV93YWl0Y2hrcyAgICAgPSAw Owo+PiArI2VuZGlmCj4+ICsgICAgY21kYnVmLT5udW1fc3luY3B0X2luY3JzID0gMDsKPj4gKwo+ PiArI2RlZmluZSBOVU1fSU5JVElBTF9DTURCVUZTICAgICAgMwo+PiArI2RlZmluZSBOVU1fSU5J VElBTF9SRUxPQ1MgICAgICAgMTUKPj4gKyNkZWZpbmUgTlVNX0lOSVRJQUxfU1lOQ1BUX0lOQ1JT IDMKPj4gKwo+PiArICAgIGNtZGJ1Zi0+Y21kYnVmcyAgICAgID0gYXZfbWFsbG9jX2FycmF5KE5V TV9JTklUSUFMX0NNREJVRlMsIHNpemVvZigqY21kYnVmLT5jbWRidWZzKSk7Cj4+ICsjaWZuZGVm IF9fU1dJVENIX18KPj4gKyAgICBjbWRidWYtPmNtZGJ1Zl9leHRzICA9IGF2X21hbGxvY19hcnJh eShOVU1fSU5JVElBTF9DTURCVUZTLCBzaXplb2YoKmNtZGJ1Zi0+Y21kYnVmX2V4dHMpKTsKPj4g KyAgICBjbWRidWYtPmNsYXNzX2lkcyAgICA9IGF2X21hbGxvY19hcnJheShOVU1fSU5JVElBTF9D TURCVUZTLCBzaXplb2YoKmNtZGJ1Zi0+Y2xhc3NfaWRzKSk7Cj4+ICsjZW5kaWYKPj4gKwo+PiAr I2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgaWYgKCFjbWRidWYtPmNtZGJ1ZnMgfHwgIWNtZGJ1 Zi0+Y21kYnVmX2V4dHMgfHwgIWNtZGJ1Zi0+Y2xhc3NfaWRzKQo+PiArI2Vsc2UKPj4gKyAgICBp ZiAoIWNtZGJ1Zi0+Y21kYnVmcykKPj4gKyNlbmRpZgo+PiArICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwo+PiArCj4+ICsjaWZuZGVmIF9fU1dJVENIX18KPj4gKyAgICBjbWRidWYtPnJl bG9jcyAgICAgICA9IGF2X21hbGxvY19hcnJheShOVU1fSU5JVElBTF9SRUxPQ1MsIHNpemVvZigq Y21kYnVmLT5yZWxvY3MpKTsKPj4gKyAgICBjbWRidWYtPnJlbG9jX3R5cGVzICA9IGF2X21hbGxv Y19hcnJheShOVU1fSU5JVElBTF9SRUxPQ1MsIHNpemVvZigqY21kYnVmLT5yZWxvY190eXBlcykp Owo+PiArICAgIGNtZGJ1Zi0+cmVsb2Nfc2hpZnRzID0gYXZfbWFsbG9jX2FycmF5KE5VTV9JTklU SUFMX1JFTE9DUywgc2l6ZW9mKCpjbWRidWYtPnJlbG9jX3NoaWZ0cykpOwo+PiArICAgIGlmICgh Y21kYnVmLT5yZWxvY3MgfHwgIWNtZGJ1Zi0+cmVsb2NfdHlwZXMgfHwgIWNtZGJ1Zi0+cmVsb2Nf c2hpZnRzKQo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+PiArI2VuZGlmCj4+ ICsKPj4gKyAgICBjbWRidWYtPnN5bmNwdF9pbmNycyA9IGF2X21hbGxvY19hcnJheShOVU1fSU5J VElBTF9TWU5DUFRfSU5DUlMsIHNpemVvZigqY21kYnVmLT5zeW5jcHRfaW5jcnMpKTsKPj4gKyNp Zm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIGNtZGJ1Zi0+ZmVuY2VzICAgICAgID0gYXZfbWFsbG9j X2FycmF5KE5VTV9JTklUSUFMX1NZTkNQVF9JTkNSUywgc2l6ZW9mKCpjbWRidWYtPmZlbmNlcykp Owo+PiArI2VuZGlmCj4+ICsKPj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIGlmICghY21k YnVmLT5zeW5jcHRfaW5jcnMgfHwgIWNtZGJ1Zi0+ZmVuY2VzKQo+PiArI2Vsc2UKPj4gKyAgICBp ZiAoIWNtZGJ1Zi0+c3luY3B0X2luY3JzKQo+PiArI2VuZGlmCj4+ICsgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAraW50 IGF2X252dGVncmFfY21kYnVmX2RlaW5pdChBVk5WVGVncmFDbWRidWYgKmNtZGJ1Zikgewo+PiAr ICAgIGF2X2ZyZWVwKCZjbWRidWYtPmNtZGJ1ZnMpOwo+PiArICAgIGF2X2ZyZWVwKCZjbWRidWYt PnN5bmNwdF9pbmNycyk7Cj4+ICsKPj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIGF2X2Zy ZWVwKCZjbWRidWYtPmNtZGJ1Zl9leHRzKSwgYXZfZnJlZXAoJmNtZGJ1Zi0+Y2xhc3NfaWRzKTsK Pj4gKyAgICBhdl9mcmVlcCgmY21kYnVmLT5yZWxvY3MpLCBhdl9mcmVlcCgmY21kYnVmLT5yZWxv Y190eXBlcyksIGF2X2ZyZWVwKCZjbWRidWYtPnJlbG9jX3NoaWZ0cyk7Cj4+ICsgICAgYXZfZnJl ZXAoJmNtZGJ1Zi0+ZmVuY2VzKTsKPj4gKyNlbmRpZgo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ ICt9Cj4+ICsKPj4gK2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9hZGRfbWVtb3J5KEFWTlZUZWdyYUNt ZGJ1ZiAqY21kYnVmLCBBVk5WVGVncmFNYXAgKm1hcCwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJf dCBzaXplKSB7Cj4+ICsgICAgdWludDhfdCAqbWVtOwo+PiArCj4+ICsgICAgbWVtID0gYXZfbnZ0 ZWdyYV9tYXBfZ2V0X2FkZHIobWFwKTsKPj4gKwo+PiArICAgIGNtZGJ1Zi0+bWFwICAgICAgICA9 IG1hcDsKPj4gKyAgICBjbWRidWYtPm1lbV9vZmZzZXQgPSBvZmZzZXQ7Cj4+ICsgICAgY21kYnVm LT5tZW1fc2l6ZSAgID0gc2l6ZTsKPj4gKwo+PiArICAgIGNtZGJ1Zi0+Y3VyX3dvcmQgPSAodWlu dDMyX3QgKikobWVtICsgY21kYnVmLT5tZW1fb2Zmc2V0KTsKPj4gKwo+PiArICAgIHJldHVybiAw Owo+PiArfQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfY2xlYXIoQVZOVlRlZ3JhQ21k YnVmICpjbWRidWYpIHsKPj4gKyAgICB1aW50OF90ICptZW07Cj4+ICsKPj4gKyAgICBtZW0gPSBh dl9udnRlZ3JhX21hcF9nZXRfYWRkcihjbWRidWYtPm1hcCk7Cj4+ICsKPj4gKyAgICBjbWRidWYt Pm51bV9jbWRidWZzID0gMCwgY21kYnVmLT5udW1fc3luY3B0X2luY3JzID0gMDsKPj4gKyNpZm5k ZWYgX19TV0lUQ0hfXwo+PiArICAgIGNtZGJ1Zi0+bnVtX3JlbG9jcyA9IDAsIGNtZGJ1Zi0+bnVt X3dhaXRjaGtzID0gMDsKPj4gKyNlbmRpZgo+PiArCj4+ICsgICAgY21kYnVmLT5jdXJfd29yZCA9 ICh1aW50MzJfdCAqKShtZW0gKyBjbWRidWYtPm1lbV9vZmZzZXQpOwo+PiArICAgIHJldHVybiAw Owo+PiArfQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfYmVnaW4oQVZOVlRlZ3JhQ21k YnVmICpjbWRidWYsIHVpbnQzMl90IGNsYXNzX2lkKSB7Cj4+ICsgICAgdWludDhfdCAqbWVtOwo+ PiArICAgIHZvaWQgKnRtcDE7Cj4+ICsjaWZuZGVmIF9fU1dJVENIX18KPj4gKyAgICB2b2lkICp0 bXAyLCAqdG1wMzsKPj4gKyNlbmRpZgo+PiArCj4+ICsgICAgbWVtID0gYXZfbnZ0ZWdyYV9tYXBf Z2V0X2FkZHIoY21kYnVmLT5tYXApOwo+PiArCj4+ICsgICAgdG1wMSA9IGF2X3JlYWxsb2NfYXJy YXkoY21kYnVmLT5jbWRidWZzLCAgICAgY21kYnVmLT5udW1fY21kYnVmcyArIDEsIHNpemVvZigq Y21kYnVmLT5jbWRidWZzKSk7Cj4+ICsjaWZuZGVmIF9fU1dJVENIX18KPj4gKyAgICB0bXAyID0g YXZfcmVhbGxvY19hcnJheShjbWRidWYtPmNtZGJ1Zl9leHRzLCBjbWRidWYtPm51bV9jbWRidWZz ICsgMSwgc2l6ZW9mKCpjbWRidWYtPmNtZGJ1Zl9leHRzKSk7Cj4+ICsgICAgdG1wMyA9IGF2X3Jl YWxsb2NfYXJyYXkoY21kYnVmLT5jbGFzc19pZHMsICAgY21kYnVmLT5udW1fY21kYnVmcyArIDEs IHNpemVvZigqY21kYnVmLT5jbGFzc19pZHMpKTsKPj4gKyNlbmRpZgo+PiArCj4+ICsjaWZuZGVm IF9fU1dJVENIX18KPj4gKyAgICBpZiAoIXRtcDEgfHwgIXRtcDIgfHwgIXRtcDMpCj4+ICsjZWxz ZQo+PiArICAgIGlmICghdG1wMSkKPj4gKyNlbmRpZgo+PiArICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwo+PiArCj4+ICsgICAgY21kYnVmLT5jbWRidWZzID0gdG1wMTsKPj4gKwo+PiAr I2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgY21kYnVmLT5jbWRidWZfZXh0cyA9IHRtcDIsIGNt ZGJ1Zi0+Y2xhc3NfaWRzID0gdG1wMzsKPj4gKyNlbmRpZgo+PiArCj4+ICsgICAgY21kYnVmLT5j bWRidWZzW2NtZGJ1Zi0+bnVtX2NtZGJ1ZnNdID0gKHN0cnVjdCBudmhvc3RfY21kYnVmKXsKPj4g KyAgICAgICAgLm1lbSAgICAgICA9IGF2X252dGVncmFfbWFwX2dldF9oYW5kbGUoY21kYnVmLT5t YXApLAo+PiArICAgICAgICAub2Zmc2V0ICAgID0gKHVpbnQ4X3QgKiljbWRidWYtPmN1cl93b3Jk IC0gbWVtLAo+PiArICAgIH07Cj4+ICsKPj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIGNt ZGJ1Zi0+Y21kYnVmX2V4dHNbY21kYnVmLT5udW1fY21kYnVmc10gPSAoc3RydWN0IG52aG9zdF9j bWRidWZfZXh0KXsKPj4gKyAgICAgICAgLnByZV9mZW5jZSA9IC0xLAo+PiArICAgIH07Cj4+ICsK Pj4gKyAgICBjbWRidWYtPmNsYXNzX2lkc1tjbWRidWYtPm51bV9jbWRidWZzXSA9IGNsYXNzX2lk Owo+PiArI2VuZGlmCj4+ICsKPj4gKyNpZmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgaWYgKGNtZGJ1 Zi0+bnVtX2NtZGJ1ZnMgPT0gMCkKPj4gKyAgICAgICAgYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF93 b3JkKGNtZGJ1ZiwgaG9zdDF4X29wY29kZV9zZXRjbGFzcyhjbGFzc19pZCwgMCwgMCkpOwo+PiAr I2VuZGlmCj4+ICsKPj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAraW50IGF2X252dGVn cmFfY21kYnVmX2VuZChBVk5WVGVncmFDbWRidWYgKmNtZGJ1Zikgewo+PiArICAgIGNtZGJ1Zi0+ bnVtX2NtZGJ1ZnMrKzsKPj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAraW50IGF2X252 dGVncmFfY21kYnVmX3B1c2hfd29yZChBVk5WVGVncmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3Qg d29yZCkgewo+PiArICAgIHVpbnRwdHJfdCBtZW1fc3RhcnQgPSAodWludHB0cl90KWF2X252dGVn cmFfbWFwX2dldF9hZGRyKGNtZGJ1Zi0+bWFwKSArIGNtZGJ1Zi0+bWVtX29mZnNldDsKPj4gKwo+ PiArICAgIGlmICgodWludHB0cl90KWNtZGJ1Zi0+Y3VyX3dvcmQgLSBtZW1fc3RhcnQgPj0gY21k YnVmLT5tZW1fc2l6ZSkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPj4gKwo+ PiArICAgICpjbWRidWYtPmN1cl93b3JkKysgPSB3b3JkOwo+PiArICAgIGNtZGJ1Zi0+Y21kYnVm c1tjbWRidWYtPm51bV9jbWRidWZzXS53b3JkcyArPSAxOwo+PiArICAgIHJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF92YWx1ZShBVk5WVGVncmFDbWRi dWYgKmNtZGJ1ZiwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB3b3JkKSB7Cj4+ICsgICAgaW50 IGVycjsKPj4gKwo+PiArICAgIGVyciA9IGF2X252dGVncmFfY21kYnVmX3B1c2hfd29yZChjbWRi dWYsIGhvc3QxeF9vcGNvZGVfaW5jcihOVl9USElfTUVUSE9EMD4+MiwgMikpOwo+PiArICAgIGlm IChlcnIgPCAwKQo+PiArICAgICAgICByZXR1cm4gZXJyOwo+PiArCj4+ICsgICAgZXJyID0gYXZf bnZ0ZWdyYV9jbWRidWZfcHVzaF93b3JkKGNtZGJ1Ziwgb2Zmc2V0KTsKPj4gKyAgICBpZiAoZXJy IDwgMCkKPj4gKyAgICAgICAgcmV0dXJuIGVycjsKPj4gKwo+PiArICAgIGVyciA9IGF2X252dGVn cmFfY21kYnVmX3B1c2hfd29yZChjbWRidWYsIHdvcmQpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+ PiArICAgICAgICByZXR1cm4gZXJyOwo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsK Pj4gK2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3JlbG9jKEFWTlZUZWdyYUNtZGJ1ZiAqY21k YnVmLCB1aW50MzJfdCBvZmZzZXQsIEFWTlZUZWdyYU1hcCAqdGFyZ2V0LCB1aW50MzJfdCB0YXJn ZXRfb2Zmc2V0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbG9j X3R5cGUsIGludCBzaGlmdCkKPj4gK3sKPj4gKyAgICBpbnQgZXJyOwo+PiArI2lmbmRlZiBfX1NX SVRDSF9fCj4+ICsgICAgdWludDhfdCAqbWVtOwo+PiArICAgIHZvaWQgKnRtcDEsICp0bXAyLCAq dG1wMzsKPj4gKwo+PiArICAgIG1lbSA9IGF2X252dGVncmFfbWFwX2dldF9hZGRyKGNtZGJ1Zi0+ bWFwKTsKPj4gKwo+PiArICAgIHRtcDEgPSBhdl9yZWFsbG9jX2FycmF5KGNtZGJ1Zi0+cmVsb2Nz LCAgICAgICBjbWRidWYtPm51bV9yZWxvY3MgKyAxLCBzaXplb2YoKmNtZGJ1Zi0+cmVsb2NzKSk7 Cj4+ICsgICAgdG1wMiA9IGF2X3JlYWxsb2NfYXJyYXkoY21kYnVmLT5yZWxvY190eXBlcywgIGNt ZGJ1Zi0+bnVtX3JlbG9jcyArIDEsIHNpemVvZigqY21kYnVmLT5yZWxvY190eXBlcykpOwo+PiAr ICAgIHRtcDMgPSBhdl9yZWFsbG9jX2FycmF5KGNtZGJ1Zi0+cmVsb2Nfc2hpZnRzLCBjbWRidWYt Pm51bV9yZWxvY3MgKyAxLCBzaXplb2YoKmNtZGJ1Zi0+cmVsb2Nfc2hpZnRzKSk7Cj4+ICsgICAg aWYgKCF0bXAxIHx8ICF0bXAyIHx8ICF0bXAzKQo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOwo+PiArCj4+ICsgICAgY21kYnVmLT5yZWxvY3MgPSB0bXAxLCBjbWRidWYtPnJlbG9j X3R5cGVzID0gdG1wMiwgY21kYnVmLT5yZWxvY19zaGlmdHMgPSB0bXAzOwo+PiArCj4+ICsgICAg ZXJyID0gYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF92YWx1ZShjbWRidWYsIG9mZnNldCwgMHhkZWFk YmVlZik7Cj4+ICsgICAgaWYgKGVyciA8IDApCj4+ICsgICAgICAgIHJldHVybiBlcnI7Cj4+ICsK Pj4gKyAgICBjbWRidWYtPnJlbG9jc1tjbWRidWYtPm51bV9yZWxvY3NdICAgICAgID0gKHN0cnVj dCBudmhvc3RfcmVsb2Mpewo+PiArICAgICAgICAuY21kYnVmX21lbSAgICA9IGF2X252dGVncmFf bWFwX2dldF9oYW5kbGUoY21kYnVmLT5tYXApLAo+PiArICAgICAgICAuY21kYnVmX29mZnNldCA9 ICh1aW50OF90ICopY21kYnVmLT5jdXJfd29yZCAtIG1lbSAtIHNpemVvZih1aW50MzJfdCksCj4+ ICsgICAgICAgIC50YXJnZXQgICAgICAgID0gYXZfbnZ0ZWdyYV9tYXBfZ2V0X2hhbmRsZSh0YXJn ZXQpLAo+PiArICAgICAgICAudGFyZ2V0X29mZnNldCA9IHRhcmdldF9vZmZzZXQsCj4+ICsgICAg fTsKPj4gKwo+PiArICAgIGNtZGJ1Zi0+cmVsb2NfdHlwZXNbY21kYnVmLT5udW1fcmVsb2NzXSAg PSAoc3RydWN0IG52aG9zdF9yZWxvY190eXBlKXsKPj4gKyAgICAgICAgLnJlbG9jX3R5cGUgICAg PSByZWxvY190eXBlLAo+PiArICAgIH07Cj4+ICsKPj4gKyAgICBjbWRidWYtPnJlbG9jX3NoaWZ0 c1tjbWRidWYtPm51bV9yZWxvY3NdID0gKHN0cnVjdCBudmhvc3RfcmVsb2Nfc2hpZnQpewo+PiAr ICAgICAgICAuc2hpZnQgICAgICAgICA9IHNoaWZ0LAo+PiArICAgIH07Cj4+ICsKPj4gKyAgICBj bWRidWYtPm51bV9yZWxvY3MrKzsKPj4gKwo+PiArICAgIHJldHVybiAwOwo+PiArI2Vsc2UKPj4g KyAgICBlcnIgPSBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3ZhbHVlKGNtZGJ1Ziwgb2Zmc2V0LCAo dGFyZ2V0LT5pb3ZhICsgdGFyZ2V0X29mZnNldCkgPj4gc2hpZnQpOwo+PiArICAgIGlmIChlcnIg PCAwKQo+PiArICAgICAgICByZXR1cm4gZXJyOwo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICsj ZW5kaWYKPj4gK30KPj4gKwo+PiAraW50IGF2X252dGVncmFfY21kYnVmX3B1c2hfc3luY3B0X2lu Y3IoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYsIHVpbnQzMl90IHN5bmNwdCkgewo+PiArICAgIGlu dCBlcnI7Cj4+ICsKPj4gKyAgICBlcnIgPSBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dvcmQoY21k YnVmLCBob3N0MXhfb3Bjb2RlX25vbmluY3IoTlZfVEhJX0lOQ1JfU1lOQ1BUPj4yLCAxKSk7Cj4+ ICsgICAgaWYgKGVyciA8IDApCj4+ICsgICAgICAgIHJldHVybiBlcnI7Cj4+ICsKPj4gKyAgICBl cnIgPSBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dvcmQoY21kYnVmLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9OVlRFR1JBX1ZBTFVFKE5WX1RISV9JTkNSX1NZ TkNQVCwgSU5EWCwgc3luY3B0KSB8Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWX05WVEVHUkFfRU5VTSAoTlZfVEhJX0lOQ1JfU1lOQ1BULCBDT05ELCBPUF9ET05F KSk7Cj4+ICsgICAgaWYgKGVyciA8IDApCj4+ICsgICAgICAgIHJldHVybiBlcnI7Cj4+ICsKPj4g KyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAraW50IGF2X252dGVncmFfY21kYnVmX3B1c2hf d2FpdChBVk5WVGVncmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3Qgc3luY3B0LCB1aW50MzJfdCBm ZW5jZSkgewo+PiArICAgIGludCBlcnI7Cj4+ICsKPj4gKyAgICBlcnIgPSBhdl9udnRlZ3JhX2Nt ZGJ1Zl9wdXNoX3dvcmQoY21kYnVmLCBob3N0MXhfb3Bjb2RlX3NldGNsYXNzKEhPU1QxWF9DTEFT U19IT1NUMVgsIDAsIDApKTsKPj4gKyAgICBpZiAoZXJyIDwgMCkKPj4gKyAgICAgICAgcmV0dXJu IGVycjsKPj4gKwo+PiArICAgIGVyciA9IGF2X252dGVncmFfY21kYnVmX3B1c2hfd29yZChjbWRi dWYsIGhvc3QxeF9vcGNvZGVfbWFzayhOVl9DTEFTU19IT1NUX0xPQURfU1lOQ1BUX1BBWUxPQUQ+ PjIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxPDwoTlZfQ0xB U1NfSE9TVF9MT0FEX1NZTkNQVF9QQVlMT0FEIC0gTlZfQ0xBU1NfSE9TVF9MT0FEX1NZTkNQVF9Q QVlMT0FEKSkgfAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTw8 KE5WX0NMQVNTX0hPU1RfV0FJVF9TWU5DUFQgICAgICAgICAtIE5WX0NMQVNTX0hPU1RfTE9BRF9T WU5DUFRfUEFZTE9BRCkpKSk7Cj4+ICsgICAgaWYgKGVyciA8IDApCj4+ICsgICAgICAgIHJldHVy biBlcnI7Cj4+ICsKPj4gKyAgICBlcnIgPSBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dvcmQoY21k YnVmLCBmZW5jZSk7Cj4+ICsgICAgaWYgKGVyciA8IDApCj4+ICsgICAgICAgIHJldHVybiBlcnI7 Cj4+ICsKPj4gKyAgICBlcnIgPSBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dvcmQoY21kYnVmLCBz eW5jcHQpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+PiArICAgICAgICByZXR1cm4gZXJyOwo+PiAr Cj4+ICsgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9h ZGRfc3luY3B0X2luY3IoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYsIHVpbnQzMl90IHN5bmNwdCwg dWludDMyX3QgZmVuY2UpCj4+ICt7Cj4+ICsgICAgdm9pZCAqdG1wMTsKPj4gKyNpZm5kZWYgX19T V0lUQ0hfXwo+PiArICAgIHZvaWQgKnRtcDI7Cj4+ICsjZW5kaWYKPj4gKwo+PiArICAgIHRtcDEg PSBhdl9yZWFsbG9jX2FycmF5KGNtZGJ1Zi0+c3luY3B0X2luY3JzLCBjbWRidWYtPm51bV9zeW5j cHRfaW5jcnMgKyAxLCBzaXplb2YoKmNtZGJ1Zi0+c3luY3B0X2luY3JzKSk7Cj4+ICsjaWZuZGVm IF9fU1dJVENIX18KPj4gKyAgICB0bXAyID0gYXZfcmVhbGxvY19hcnJheShjbWRidWYtPmZlbmNl cywgICAgICAgY21kYnVmLT5udW1fc3luY3B0X2luY3JzICsgMSwgc2l6ZW9mKCpjbWRidWYtPmZl bmNlcykpOwo+PiArI2VuZGlmCj4+ICsKPj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIGlm ICghdG1wMSB8fCAhdG1wMikKPj4gKyNlbHNlCj4+ICsgICAgaWYgKCF0bXAxKQo+PiArI2VuZGlm Cj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4+ICsKPj4gKyAgICBjbWRidWYt PnN5bmNwdF9pbmNycyA9IHRtcDE7Cj4+ICsjaWZuZGVmIF9fU1dJVENIX18KPj4gKyAgICBjbWRi dWYtPmZlbmNlcyAgICAgICA9IHRtcDI7Cj4+ICsjZW5kaWYKPj4gKwo+PiArICAgIGNtZGJ1Zi0+ c3luY3B0X2luY3JzW2NtZGJ1Zi0+bnVtX3N5bmNwdF9pbmNyc10gPSAoc3RydWN0IG52aG9zdF9z eW5jcHRfaW5jcil7Cj4+ICsgICAgICAgIC5zeW5jcHRfaWQgICAgPSBzeW5jcHQsCj4+ICsgICAg ICAgIC5zeW5jcHRfaW5jcnMgPSAxLAo+PiArICAgIH07Cj4+ICsKPj4gKyNpZm5kZWYgX19TV0lU Q0hfXwo+PiArICAgIGNtZGJ1Zi0+ZmVuY2VzW2NtZGJ1Zi0+bnVtX3N5bmNwdF9pbmNyc10gICAg ICAgPSBmZW5jZTsKPj4gKyNlbmRpZgo+PiArCj4+ICsgICAgY21kYnVmLT5udW1fc3luY3B0X2lu Y3JzKys7Cj4+ICsKPj4gKyAgICByZXR1cm4gYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF9zeW5jcHRf aW5jcihjbWRidWYsIHN5bmNwdCk7Cj4+ICt9Cj4+ICsKPj4gK2ludCBhdl9udnRlZ3JhX2NtZGJ1 Zl9hZGRfd2FpdGNoayhBVk5WVGVncmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3Qgc3luY3B0LCB1 aW50MzJfdCBmZW5jZSkgewo+PiArI2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgdWludDhfdCAq bWVtOwo+PiArICAgIHZvaWQgKnRtcDsKPj4gKwo+PiArICAgIG1lbSA9IGF2X252dGVncmFfbWFw X2dldF9hZGRyKGNtZGJ1Zi0+bWFwKTsKPj4gKwo+PiArICAgIHRtcCA9IGF2X3JlYWxsb2NfYXJy YXkoY21kYnVmLT53YWl0Y2hrcywgY21kYnVmLT5udW1fd2FpdGNoa3MgKyAxLCBzaXplb2YoKmNt ZGJ1Zi0+d2FpdGNoa3MpKTsKPj4gKyAgICBpZiAoIXRtcCkKPj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKPj4gKwo+PiArICAgIGNtZGJ1Zi0+d2FpdGNoa3MgPSB0bXA7Cj4+ICsK Pj4gKyAgICBjbWRidWYtPndhaXRjaGtzW2NtZGJ1Zi0+bnVtX3dhaXRjaGtzXSA9IChzdHJ1Y3Qg bnZob3N0X3dhaXRjaGspewo+PiArICAgICAgICAubWVtICAgICAgID0gYXZfbnZ0ZWdyYV9tYXBf Z2V0X2hhbmRsZShjbWRidWYtPm1hcCksCj4+ICsgICAgICAgIC5vZmZzZXQgICAgPSAodWludDhf dCAqKWNtZGJ1Zi0+Y3VyX3dvcmQgLSBtZW0gLSBzaXplb2YodWludDMyX3QpLAo+PiArICAgICAg ICAuc3luY3B0X2lkID0gc3luY3B0LAo+PiArICAgICAgICAudGhyZXNoICAgID0gZmVuY2UsCj4+ ICsgICAgfTsKPj4gKwo+PiArICAgIGNtZGJ1Zi0+bnVtX3dhaXRjaGtzKys7Cj4+ICsjZW5kaWYK Pj4gKwo+PiArICAgIHJldHVybiBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNoX3dhaXQoY21kYnVmLCBz eW5jcHQsIGZlbmNlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgbnZ0ZWdyYV9qb2JfZnJl ZSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmRhdGEpIHsKPj4gKyAgICBBVk5WVGVncmFKb2IgKmpv YiA9IChBVk5WVGVncmFKb2IgKilkYXRhOwo+PiArCj4+ICsgICAgaWYgKCFqb2IpCj4+ICsgICAg ICAgIHJldHVybjsKPj4gKwo+PiArICAgIGF2X252dGVncmFfY21kYnVmX2RlaW5pdCgmam9iLT5j bWRidWYpOwo+PiArICAgIGF2X252dGVncmFfbWFwX2Rlc3Ryb3koJmpvYi0+aW5wdXRfbWFwKTsK Pj4gKwo+PiArICAgIGF2X2ZyZWVwKCZqb2IpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgQVZCdWZm ZXJSZWYgKm52dGVncmFfam9iX2FsbG9jKHZvaWQgKm9wYXF1ZSwgc2l6ZV90IHNpemUpIHsKPj4g KyAgICBBVk5WVGVncmFKb2JQb29sICpwb29sID0gb3BhcXVlOwo+PiArCj4+ICsgICAgQVZCdWZm ZXJSZWYgICpidWZmZXI7Cj4+ICsgICAgQVZOVlRlZ3JhSm9iICpqb2I7Cj4+ICsgICAgaW50IGVy cjsKPj4gKwo+PiArICAgIGpvYiA9IGF2X21hbGxvY3ooc2l6ZW9mKCpqb2IpKTsKPj4gKyAgICBp ZiAoIWpvYikKPj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4+ICsKPj4gKyAgICBlcnIgPSBhdl9u dnRlZ3JhX21hcF9jcmVhdGUoJmpvYi0+aW5wdXRfbWFwLCBwb29sLT5jaGFubmVsLCBwb29sLT5p bnB1dF9tYXBfc2l6ZSwgMHgxMDAsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5WTUFQX0hFQVBfSU9WTU0sIE5WTUFQX0hBTkRMRV9XUklURV9DT01CSU5FKTsKPj4gKyAgICBp ZiAoZXJyIDwgMCkKPj4gKyAgICAgICAgZ290byBmYWlsOwo+PiArCj4+ICsgICAgZXJyID0gYXZf bnZ0ZWdyYV9jbWRidWZfaW5pdCgmam9iLT5jbWRidWYpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+ PiArICAgICAgICBnb3RvIGZhaWw7Cj4+ICsKPj4gKyAgICBlcnIgPSBhdl9udnRlZ3JhX2NtZGJ1 Zl9hZGRfbWVtb3J5KCZqb2ItPmNtZGJ1ZiwgJmpvYi0+aW5wdXRfbWFwLCBwb29sLT5jbWRidWZf b2ZmLCBwb29sLT5tYXhfY21kYnVmX3NpemUpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+PiArICAg ICAgICBnb3RvIGZhaWw7Cj4+ICsKPj4gKyAgICBidWZmZXIgPSBhdl9idWZmZXJfY3JlYXRlKCh1 aW50OF90ICopam9iLCBzaXplb2YoKmpvYiksIG52dGVncmFfam9iX2ZyZWUsIHBvb2wsIDApOwo+ PiArICAgIGlmICghYnVmZmVyKQo+PiArICAgICAgICBnb3RvIGZhaWw7Cj4+ICsKPj4gKyAgICBy ZXR1cm4gYnVmZmVyOwo+PiArCj4+ICtmYWlsOgo+PiArICAgIGF2X252dGVncmFfY21kYnVmX2Rl aW5pdCgmam9iLT5jbWRidWYpOwo+PiArICAgIGF2X252dGVncmFfbWFwX2Rlc3Ryb3koJmpvYi0+ aW5wdXRfbWFwKTsKPj4gKyAgICBhdl9mcmVlcChqb2IpOwo+PiArICAgIHJldHVybiBOVUxMOwo+ PiArfQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9qb2JfcG9vbF9pbml0KEFWTlZUZWdyYUpvYlBv b2wgKnBvb2wsIEFWTlZUZWdyYUNoYW5uZWwgKmNoYW5uZWwsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBpbnB1dF9tYXBfc2l6ZSwgb2ZmX3QgY21kYnVmX29mZiwgc2l6 ZV90IG1heF9jbWRidWZfc2l6ZSkKPj4gK3sKPj4gKyAgICBwb29sLT5jaGFubmVsICAgICAgICAg PSBjaGFubmVsOwo+PiArICAgIHBvb2wtPmlucHV0X21hcF9zaXplICA9IGlucHV0X21hcF9zaXpl Owo+PiArICAgIHBvb2wtPmNtZGJ1Zl9vZmYgICAgICA9IGNtZGJ1Zl9vZmY7Cj4+ICsgICAgcG9v bC0+bWF4X2NtZGJ1Zl9zaXplID0gbWF4X2NtZGJ1Zl9zaXplOwo+PiArICAgIHBvb2wtPnBvb2wg ICAgICAgICAgICA9IGF2X2J1ZmZlcl9wb29sX2luaXQyKHNpemVvZihBVk5WVGVncmFKb2IpLCBw b29sLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG52dGVncmFfam9iX2FsbG9jLCBOVUxMKTsKPj4gKyAgICBpZiAoIXBvb2wtPnBvb2wpCj4+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsKPj4g K30KPj4gKwo+PiAraW50IGF2X252dGVncmFfam9iX3Bvb2xfdW5pbml0KEFWTlZUZWdyYUpvYlBv b2wgKnBvb2wpIHsKPj4gKyAgICBhdl9idWZmZXJfcG9vbF91bmluaXQoJnBvb2wtPnBvb2wpOwo+ PiArICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtBVkJ1ZmZlclJlZiAqYXZfbnZ0ZWdyYV9q b2JfcG9vbF9nZXQoQVZOVlRlZ3JhSm9iUG9vbCAqcG9vbCkgewo+PiArICAgIHJldHVybiBhdl9i dWZmZXJfcG9vbF9nZXQocG9vbC0+cG9vbCk7Cj4+ICt9Cj4+ICsKPj4gK2ludCBhdl9udnRlZ3Jh X2pvYl9zdWJtaXQoQVZOVlRlZ3JhSm9iUG9vbCAqcG9vbCwgQVZOVlRlZ3JhSm9iICpqb2IpIHsK Pj4gKyAgICByZXR1cm4gYXZfbnZ0ZWdyYV9jaGFubmVsX3N1Ym1pdChwb29sLT5jaGFubmVsLCAm am9iLT5jbWRidWYsICZqb2ItPmZlbmNlKTsKPj4gK30KPj4gKwo+PiAraW50IGF2X252dGVncmFf am9iX3dhaXQoQVZOVlRlZ3JhSm9iUG9vbCAqcG9vbCwgQVZOVlRlZ3JhSm9iICpqb2IsIGludCB0 aW1lb3V0KSB7Cj4+ICsgICAgcmV0dXJuIGF2X252dGVncmFfc3luY3B0X3dhaXQocG9vbC0+Y2hh bm5lbCwgam9iLT5mZW5jZSwgdGltZW91dCk7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9saWJhdnV0 aWwvbnZ0ZWdyYS5oIGIvbGliYXZ1dGlsL252dGVncmEuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+PiBpbmRleCAwMDAwMDAwMDAwLi4zYjYzMzM1ZDZjCj4+IC0tLSAvZGV2L251bGwKPj4gKysr IGIvbGliYXZ1dGlsL252dGVncmEuaAo+PiBAQCAtMCwwICsxLDI1OCBAQAo+PiArLyoKPj4gKyAq IENvcHlyaWdodCAoYykgMjAyNCBhdmVybmUgPGF2ZXJuZTM4MUBnbWFpbC5jb20+Cj4+ICsgKgo+ PiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+PiArICoKPj4gKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+ ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQo+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4gKyAqIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKgo+PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4g KyAqCj4+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwo+PiArICogd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKPj4gKyAqIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCj4+ICsg Ki8KPj4gKwo+PiArI2lmbmRlZiBBVlVUSUxfTlZURUdSQV9ICj4+ICsjZGVmaW5lIEFWVVRJTF9O VlRFR1JBX0gKPj4gKwo+PiArI2luY2x1ZGUgPHN0ZGludC5oPgo+PiArI2luY2x1ZGUgPHN0ZGJv b2wuaD4KPj4gKwo+PiArI2luY2x1ZGUgImJ1ZmZlci5oIgo+PiArCj4+ICsjaW5jbHVkZSAibnZo b3N0X2lvY3RsLmgiCj4+ICsjaW5jbHVkZSAibnZtYXBfaW9jdGwuaCIKPj4gKwo+PiArdHlwZWRl ZiBzdHJ1Y3QgQVZOVlRlZ3JhQ2hhbm5lbCB7Cj4+ICsjaWZuZGVmIF9fU1dJVENIX18KPj4gKyAg ICBpbnQgZmQ7Cj4+ICsgICAgaW50IG1vZHVsZV9pZDsKPj4gKyNlbHNlCj4+ICsgICAgTnZDaGFu bmVsIGNoYW5uZWw7Cj4+ICsjZW5kaWYKPj4gKwo+PiArICAgIHVpbnQzMl90IHN5bmNwdDsKPj4g Kwo+PiArI2lmZGVmIF9fU1dJVENIX18KPj4gKyAgICBNbXVSZXF1ZXN0IG1tdV9yZXF1ZXN0Owo+ PiArI2VuZGlmCj4+ICsgICAgdWludDMyX3QgY2xvY2s7Cj4+ICt9IEFWTlZUZWdyYUNoYW5uZWw7 Cj4+ICsKPj4gK3R5cGVkZWYgc3RydWN0IEFWTlZUZWdyYU1hcCB7Cj4+ICsjaWZuZGVmIF9fU1dJ VENIX18KPj4gKyAgICB1aW50MzJfdCBoYW5kbGU7Cj4+ICsgICAgdWludDMyX3Qgc2l6ZTsKPj4g KyAgICB2b2lkICpjcHVfYWRkcjsKPj4gKyNlbHNlCj4+ICsgICAgTnZNYXAgbWFwOwo+PiArICAg IHVpbnQzMl90IGlvdmE7Cj4+ICsgICAgdWludDMyX3Qgb3duZXI7Cj4+ICsjZW5kaWYKPj4gKyAg ICBib29sIGlzX2xpbmVhcjsKPj4gK30gQVZOVlRlZ3JhTWFwOwo+PiArCj4+ICt0eXBlZGVmIHN0 cnVjdCBBVk5WVGVncmFDbWRidWYgewo+PiArICAgIEFWTlZUZWdyYU1hcCAqbWFwOwo+PiArCj4+ ICsgICAgdWludDMyX3QgbWVtX29mZnNldCwgbWVtX3NpemU7Cj4+ICsKPj4gKyAgICB1aW50MzJf dCAqY3VyX3dvcmQ7Cj4+ICsKPj4gKyAgICBzdHJ1Y3QgbnZob3N0X2NtZGJ1ZiAgICAgICAqY21k YnVmczsKPj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIHN0cnVjdCBudmhvc3RfY21kYnVm X2V4dCAgICpjbWRidWZfZXh0czsKPj4gKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAq Y2xhc3NfaWRzOwo+PiArI2VuZGlmCj4+ICsgICAgdWludDMyX3QgbnVtX2NtZGJ1ZnM7Cj4+ICsK Pj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+PiArICAgIHN0cnVjdCBudmhvc3RfcmVsb2MgICAgICAg ICpyZWxvY3M7Cj4+ICsgICAgc3RydWN0IG52aG9zdF9yZWxvY190eXBlICAgKnJlbG9jX3R5cGVz Owo+PiArICAgIHN0cnVjdCBudmhvc3RfcmVsb2Nfc2hpZnQgICpyZWxvY19zaGlmdHM7Cj4+ICsg ICAgdWludDMyX3QgbnVtX3JlbG9jczsKPj4gKyNlbmRpZgo+PiArCj4+ICsgICAgc3RydWN0IG52 aG9zdF9zeW5jcHRfaW5jciAgKnN5bmNwdF9pbmNyczsKPj4gKyNpZm5kZWYgX19TV0lUQ0hfXwo+ PiArICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICpmZW5jZXM7Cj4+ICsjZW5kaWYKPj4g KyAgICB1aW50MzJfdCBudW1fc3luY3B0X2luY3JzOwo+PiArCj4+ICsjaWZuZGVmIF9fU1dJVENI X18KPj4gKyAgICBzdHJ1Y3QgbnZob3N0X3dhaXRjaGsgICAgICAqd2FpdGNoa3M7Cj4+ICsgICAg dWludDMyX3QgbnVtX3dhaXRjaGtzOwo+PiArI2VuZGlmCj4+ICt9IEFWTlZUZWdyYUNtZGJ1ZjsK Pj4gKwo+PiArdHlwZWRlZiBzdHJ1Y3QgQVZOVlRlZ3JhSm9iUG9vbCB7Cj4+ICsgICAgLyoKPj4g KyAgICAgKiBQb29sIG9iamVjdCBmb3Igam9iIGFsbG9jYXRpb24KPj4gKyAgICAgKi8KPj4gKyAg ICBBVkJ1ZmZlclBvb2wgKnBvb2w7Cj4+ICsKPj4gKyAgICAvKgo+PiArICAgICAqIEhhcmR3YXJl IGNoYW5uZWwgdGhlIGpvYnMgd2lsbCBiZSBzdWJtaXR0ZWQgdG8KPj4gKyAgICAgKi8KPj4gKyAg ICBBVk5WVGVncmFDaGFubmVsICpjaGFubmVsOwo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBU b3RhbCBzaXplIG9mIHRoZSBpbnB1dCBtZW1vcnktbWFwcGVkIGJ1ZmZlcgo+PiArICAgICAqLwo+ PiArICAgIHNpemVfdCBpbnB1dF9tYXBfc2l6ZTsKPj4gKwo+PiArICAgIC8qCj4+ICsgICAgICog T2Zmc2V0IG9mIHRoZSBjb21tYW5kIGRhdGEgd2l0aGluIHRoZSBpbnB1dCBtYXAKPj4gKyAgICAg Ki8KPj4gKyAgICBvZmZfdCBjbWRidWZfb2ZmOwo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBN YXhpbXVtIG1lbW9yeSB1c2FibGUgYnkgdGhlIGNvbW1hbmQgYnVmZmVyCj4+ICsgICAgICovCj4+ ICsgICAgc2l6ZV90IG1heF9jbWRidWZfc2l6ZTsKPj4gK30gQVZOVlRlZ3JhSm9iUG9vbDsKPj4g Kwo+PiArdHlwZWRlZiBzdHJ1Y3QgQVZOVlRlZ3JhSm9iIHsKPj4gKyAgICAvKgo+PiArICAgICAq IE1lbW9yeS1tYXBwZWQgYnVmZmVyIGZvciBjb21tYW5kIGJ1ZmZlcnMsIG1ldGFkYXRhIHN0cnVj dHVyZXMsIC4uLgo+PiArICAgICAqLwo+PiArICAgIEFWTlZUZWdyYU1hcCBpbnB1dF9tYXA7Cj4+ ICsKPj4gKyAgICAvKgo+PiArICAgICAqIE9iamVjdCBmb3IgY29tbWFuZCByZWNvcmRpbmcKPj4g KyAgICAgKi8KPj4gKyAgICBBVk5WVGVncmFDbWRidWYgY21kYnVmOwo+PiArCj4+ICsgICAgLyoK Pj4gKyAgICAgKiBGZW5jZSBpbmRpY2F0aW5nIGNvbXBsZXRpb24gb2YgdGhlIGpvYgo+PiArICAg ICAqLwo+PiArICAgIHVpbnQzMl90IGZlbmNlOwo+PiArfSBBVk5WVGVncmFKb2I7Cj4+ICsKPj4g K0FWQnVmZmVyUmVmICphdl9udnRlZ3JhX2RyaXZlcl9pbml0KHZvaWQpOwo+PiArCj4+ICtpbnQg YXZfbnZ0ZWdyYV9jaGFubmVsX29wZW4oQVZOVlRlZ3JhQ2hhbm5lbCAqY2hhbm5lbCwgY29uc3Qg Y2hhciAqZGV2KTsKPj4gK2ludCBhdl9udnRlZ3JhX2NoYW5uZWxfY2xvc2UoQVZOVlRlZ3JhQ2hh bm5lbCAqY2hhbm5lbCk7Cj4+ICtpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX2dldF9jbG9ja19yYXRl KEFWTlZUZWdyYUNoYW5uZWwgKmNoYW5uZWwsIHVpbnQzMl90IG1vZHVsZWlkLCB1aW50MzJfdCAq Y2xvY2tfcmF0ZSk7Cj4+ICtpbnQgYXZfbnZ0ZWdyYV9jaGFubmVsX3NldF9jbG9ja19yYXRlKEFW TlZUZWdyYUNoYW5uZWwgKmNoYW5uZWwsIHVpbnQzMl90IG1vZHVsZWlkLCB1aW50MzJfdCBjbG9j a19yYXRlKTsKPj4gK2ludCBhdl9udnRlZ3JhX2NoYW5uZWxfc3VibWl0KEFWTlZUZWdyYUNoYW5u ZWwgKmNoYW5uZWwsIEFWTlZUZWdyYUNtZGJ1ZiAqY21kYnVmLCB1aW50MzJfdCAqZmVuY2UpOwo+ PiAraW50IGF2X252dGVncmFfY2hhbm5lbF9zZXRfc3VibWl0X3RpbWVvdXQoQVZOVlRlZ3JhQ2hh bm5lbCAqY2hhbm5lbCwgdWludDMyX3QgdGltZW91dF9tcyk7Cj4+ICsKPj4gK2ludCBhdl9udnRl Z3JhX3N5bmNwdF93YWl0KEFWTlZUZWdyYUNoYW5uZWwgKmNoYW5uZWwsIHVpbnQzMl90IHRocmVz aG9sZCwgaW50MzJfdCB0aW1lb3V0KTsKPj4gKwo+PiAraW50IGF2X252dGVncmFfbWFwX2FsbG9j YXRlKEFWTlZUZWdyYU1hcCAqbWFwLCBBVk5WVGVncmFDaGFubmVsICpvd25lciwgdWludDMyX3Qg c2l6ZSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhbGlnbiwgaW50 IGhlYXBfbWFzaywgaW50IGZsYWdzKTsKPj4gK2ludCBhdl9udnRlZ3JhX21hcF9mcmVlKEFWTlZU ZWdyYU1hcCAqbWFwKTsKPj4gK2ludCBhdl9udnRlZ3JhX21hcF9mcm9tX3ZhKEFWTlZUZWdyYU1h cCAqbWFwLCBBVk5WVGVncmFDaGFubmVsICpvd25lciwgdm9pZCAqbWVtLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24sIHVpbnQzMl90 IGZsYWdzKTsKPj4gK2ludCBhdl9udnRlZ3JhX21hcF9jbG9zZShBVk5WVGVncmFNYXAgKm1hcCk7 Cj4+ICtpbnQgYXZfbnZ0ZWdyYV9tYXBfbWFwKEFWTlZUZWdyYU1hcCAqbWFwKTsKPj4gK2ludCBh dl9udnRlZ3JhX21hcF91bm1hcChBVk5WVGVncmFNYXAgKm1hcCk7Cj4+ICtpbnQgYXZfbnZ0ZWdy YV9tYXBfY2FjaGVfb3AoQVZOVlRlZ3JhTWFwICptYXAsIGludCBvcCwgdm9pZCAqYWRkciwgc2l6 ZV90IGxlbik7Cj4+ICtpbnQgYXZfbnZ0ZWdyYV9tYXBfcmVhbGxvYyhBVk5WVGVncmFNYXAgKm1h cCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24sIGludCBoZWFwX21hc2ssIGludCBmbGFn cyk7Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgaW50IGF2X252dGVncmFfbWFwX2NyZWF0ZShBVk5W VGVncmFNYXAgKm1hcCwgQVZOVlRlZ3JhQ2hhbm5lbCAqb3duZXIsIHVpbnQzMl90IHNpemUsIHVp bnQzMl90IGFsaWduLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBoZWFwX21hc2ssIGludCBmbGFncykKPj4gK3sKPj4gKyAgICBpbnQgZXJyOwo+PiArCj4+ ICsgICAgZXJyID0gYXZfbnZ0ZWdyYV9tYXBfYWxsb2NhdGUobWFwLCBvd25lciwgc2l6ZSwgYWxp Z24sIGhlYXBfbWFzaywgZmxhZ3MpOwo+PiArICAgIGlmIChlcnIgPCAwKQo+PiArICAgICAgICBy ZXR1cm4gZXJyOwo+PiArCj4+ICsgICAgcmV0dXJuIGF2X252dGVncmFfbWFwX21hcChtYXApOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGludCBhdl9udnRlZ3JhX21hcF9kZXN0cm95KEFW TlZUZWdyYU1hcCAqbWFwKSB7Cj4+ICsgICAgaW50IGVycjsKPj4gKwo+PiArICAgIGVyciA9IGF2 X252dGVncmFfbWFwX3VubWFwKG1hcCk7Cj4+ICsgICAgaWYgKGVyciA8IDApCj4+ICsgICAgICAg IHJldHVybiBlcnI7Cj4+ICsKPj4gKyAgICByZXR1cm4gYXZfbnZ0ZWdyYV9tYXBfZnJlZShtYXAp Owo+PiArfQo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfaW5pdChBVk5WVGVncmFDbWRi dWYgKmNtZGJ1Zik7Cj4+ICtpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfZGVpbml0KEFWTlZUZWdyYUNt ZGJ1ZiAqY21kYnVmKTsKPj4gK2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9hZGRfbWVtb3J5KEFWTlZU ZWdyYUNtZGJ1ZiAqY21kYnVmLCBBVk5WVGVncmFNYXAgKm1hcCwgdWludDMyX3Qgb2Zmc2V0LCB1 aW50MzJfdCBzaXplKTsKPj4gK2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9jbGVhcihBVk5WVGVncmFD bWRidWYgKmNtZGJ1Zik7Cj4+ICtpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfYmVnaW4oQVZOVlRlZ3Jh Q21kYnVmICpjbWRidWYsIHVpbnQzMl90IGNsYXNzX2lkKTsKPj4gK2ludCBhdl9udnRlZ3JhX2Nt ZGJ1Zl9lbmQoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYpOwo+PiAraW50IGF2X252dGVncmFfY21k YnVmX3B1c2hfd29yZChBVk5WVGVncmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3Qgd29yZCk7Cj4+ ICtpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF92YWx1ZShBVk5WVGVncmFDbWRidWYgKmNtZGJ1 ZiwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB3b3JkKTsKPj4gK2ludCBhdl9udnRlZ3JhX2Nt ZGJ1Zl9wdXNoX3JlbG9jKEFWTlZUZWdyYUNtZGJ1ZiAqY21kYnVmLCB1aW50MzJfdCBvZmZzZXQs IEFWTlZUZWdyYU1hcCAqdGFyZ2V0LCB1aW50MzJfdCB0YXJnZXRfb2Zmc2V0LAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbG9jX3R5cGUsIGludCBzaGlmdCk7Cj4+ ICtpbnQgYXZfbnZ0ZWdyYV9jbWRidWZfcHVzaF9zeW5jcHRfaW5jcihBVk5WVGVncmFDbWRidWYg KmNtZGJ1ZiwgdWludDMyX3Qgc3luY3B0KTsKPj4gK2ludCBhdl9udnRlZ3JhX2NtZGJ1Zl9wdXNo X3dhaXQoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYsIHVpbnQzMl90IHN5bmNwdCwgdWludDMyX3Qg ZmVuY2UpOwo+PiAraW50IGF2X252dGVncmFfY21kYnVmX2FkZF9zeW5jcHRfaW5jcihBVk5WVGVn cmFDbWRidWYgKmNtZGJ1ZiwgdWludDMyX3Qgc3luY3B0LCB1aW50MzJfdCBmZW5jZSk7Cj4+ICtp bnQgYXZfbnZ0ZWdyYV9jbWRidWZfYWRkX3dhaXRjaGsoQVZOVlRlZ3JhQ21kYnVmICpjbWRidWYs IHVpbnQzMl90IHN5bmNwdCwgdWludDMyX3QgZmVuY2UpOwo+PiArCj4+ICsvKgo+PiArICogSm9i IGFsbG9jYXRpb24gYW5kIHN1Ym1pc3Npb24gcm91dGluZXMKPj4gKyAqLwo+PiAraW50IGF2X252 dGVncmFfam9iX3Bvb2xfaW5pdChBVk5WVGVncmFKb2JQb29sICpwb29sLCBBVk5WVGVncmFDaGFu bmVsICpjaGFubmVsLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5w dXRfbWFwX3NpemUsIG9mZl90IGNtZGJ1Zl9vZmYsIHNpemVfdCBtYXhfY21kYnVmX3NpemUpOwo+ PiAraW50IGF2X252dGVncmFfam9iX3Bvb2xfdW5pbml0KEFWTlZUZWdyYUpvYlBvb2wgKnBvb2wp Owo+PiArQVZCdWZmZXJSZWYgKmF2X252dGVncmFfam9iX3Bvb2xfZ2V0KEFWTlZUZWdyYUpvYlBv b2wgKnBvb2wpOwo+PiArCj4+ICtpbnQgYXZfbnZ0ZWdyYV9qb2Jfc3VibWl0KEFWTlZUZWdyYUpv YlBvb2wgKnBvb2wsIEFWTlZUZWdyYUpvYiAqam9iKTsKPj4gK2ludCBhdl9udnRlZ3JhX2pvYl93 YWl0KEFWTlZUZWdyYUpvYlBvb2wgKnBvb2wsIEFWTlZUZWdyYUpvYiAqam9iLCBpbnQgdGltZW91 dCk7Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgYXZfbnZ0ZWdyYV9tYXBfZ2V0X2hh bmRsZShBVk5WVGVncmFNYXAgKm1hcCkgewo+PiArI2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAg cmV0dXJuIG1hcC0+aGFuZGxlOwo+PiArI2Vsc2UKPj4gKyAgICByZXR1cm4gbWFwLT5tYXAuaGFu ZGxlOwo+PiArI2VuZGlmCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCAqYXZfbnZ0 ZWdyYV9tYXBfZ2V0X2FkZHIoQVZOVlRlZ3JhTWFwICptYXApIHsKPj4gKyNpZm5kZWYgX19TV0lU Q0hfXwo+PiArICAgIHJldHVybiBtYXAtPmNwdV9hZGRyOwo+PiArI2Vsc2UKPj4gKyAgICByZXR1 cm4gbWFwLT5tYXAuY3B1X2FkZHI7Cj4+ICsjZW5kaWYKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu bGluZSB1aW50MzJfdCBhdl9udnRlZ3JhX21hcF9nZXRfc2l6ZShBVk5WVGVncmFNYXAgKm1hcCkg ewo+PiArI2lmbmRlZiBfX1NXSVRDSF9fCj4+ICsgICAgcmV0dXJuIG1hcC0+c2l6ZTsKPj4gKyNl bHNlCj4+ICsgICAgcmV0dXJuIG1hcC0+bWFwLnNpemU7Cj4+ICsjZW5kaWYKPj4gK30KPj4gKwo+ PiArLyogQWRkcmVzc2VzIGFyZSBzaGlmdGVkIGJ5IDggYml0cyBpbiB0aGUgY29tbWFuZCBidWZm ZXIsIHJlcXVpcmluZyBhbiBhbGlnbm1lbnQgdG8gMjU2ICovCj4+ICsjZGVmaW5lIEFWX05WVEVH UkFfTUFQX0FMSUdOICgxIDw8IDgpCj4+ICsKPj4gKyNkZWZpbmUgQVZfTlZURUdSQV9WQUxVRShv ZmZzZXQsIGZpZWxkLCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+PiArICAgICgodmFsdWUgJiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCj4+ICsgICAgKCh1aW50MzJfdCkoKFVJTlQ2NF9DKDEpIDw8ICgoMT9vZmZzZXQgIyMg XyAjIyBmaWVsZCkgLSAoMD9vZmZzZXQgIyMgXyAjIyBmaWVsZCkgKyAxKSkgLSAxKSkpIFwKPj4g KyAgICA8PCAoMD9vZmZzZXQgIyMgXyAjIyBmaWVsZCkpCj4+ICsKPj4gKyNkZWZpbmUgQVZfTlZU RUdSQV9FTlVNKG9mZnNldCwgZmllbGQsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgICgob2Zmc2V0ICMjIF8gIyMgZmll bGQgIyMgXyAjIyB2YWx1ZSAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4+ICsgICAgKCh1aW50MzJfdCkoKFVJTlQ2NF9DKDEpIDw8ICgo MT9vZmZzZXQgIyMgXyAjIyBmaWVsZCkgLSAoMD9vZmZzZXQgIyMgXyAjIyBmaWVsZCkgKyAxKSkg LSAxKSkpIFwKPj4gKyAgICA8PCAoMD9vZmZzZXQgIyMgXyAjIyBmaWVsZCkpCj4+ICsKPj4gKyNk ZWZpbmUgQVZfTlZURUdSQV9QVVNIX1ZBTFVFKGNtZGJ1Ziwgb2Zmc2V0LCB2YWx1ZSkgKHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgIGludCBfZXJyID0gYXZfbnZ0 ZWdyYV9jbWRidWZfcHVzaF92YWx1ZShjbWRidWYsIChvZmZzZXQpIC8gc2l6ZW9mKHVpbnQzMl90 KSwgdmFsdWUpOyBcCj4+ICsgICAgaWYgKF9lcnIgPCAwKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gKyAg ICAgICAgcmV0dXJuIF9lcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArfSkKPj4gKwo+PiArI2RlZmluZSBB Vl9OVlRFR1JBX1BVU0hfUkVMT0MoY21kYnVmLCBvZmZzZXQsIHRhcmdldCwgdGFyZ2V0X29mZnNl dCwgdHlwZSkgKHsgICAgXAo+PiArICAgIGludCBfZXJyID0gYXZfbnZ0ZWdyYV9jbWRidWZfcHVz aF9yZWxvYyhjbWRidWYsIChvZmZzZXQpIC8gc2l6ZW9mKHVpbnQzMl90KSwgXAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIHRhcmdldF9vZmZz ZXQsIHR5cGUsIDgpOyAgICAgXAo+PiArICAgIGlmIChfZXJyIDwgMCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAg ICAgICByZXR1cm4gX2VycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAo+PiArfSkKPj4gKwo+PiArI2VuZGlmIC8qIEFWVVRJTF9O VlRFR1JBX0ggKi8KPj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9udnRlZ3JhX2hvc3QxeC5oIGIv bGliYXZ1dGlsL252dGVncmFfaG9zdDF4LmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5k ZXggMDAwMDAwMDAwMC4uMjVlMzdlYWU2MQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2xpYmF2 dXRpbC9udnRlZ3JhX2hvc3QxeC5oCj4+IEBAIC0wLDAgKzEsOTQgQEAKPj4gKy8qCj4+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMjQgYXZlcm5lIDxhdmVybmUzODFAZ21haWwuY29tPgo+PiArICoKPj4g KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPj4gKyAqCj4+ICsgKiBGRm1wZWcgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+PiAr ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKPj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgo+PiArICoKPj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK Pj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsg Kgo+PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYWxvbmcKPj4gKyAqIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCj4+ICsgKiA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgo+PiArICov Cj4+ICsKPj4gKyNpZm5kZWYgQVZVVElMX05WVEVHUkFfSE9TVDFYX0gKPj4gKyNkZWZpbmUgQVZV VElMX05WVEVHUkFfSE9TVDFYX0gKPj4gKwo+PiArI2luY2x1ZGUgPHN0ZGludC5oPgo+PiArCj4+ ICsjaW5jbHVkZSAibWFjcm9zLmgiCj4+ICsKPj4gKy8qIEZyb20gTDRUIGluY2x1ZGUvbGludXgv aG9zdDF4LmggKi8KPj4gK2VudW0gaG9zdDF4X2NsYXNzIHsKPj4gKyAgICBIT1NUMVhfQ0xBU1Nf SE9TVDFYICA9IDB4MDEsCj4+ICsgICAgSE9TVDFYX0NMQVNTX05WRU5DICAgPSAweDIxLAo+PiAr ICAgIEhPU1QxWF9DTEFTU19WSSAgICAgID0gMHgzMCwKPj4gKyAgICBIT1NUMVhfQ0xBU1NfSVNQ QSAgICA9IDB4MzIsCj4+ICsgICAgSE9TVDFYX0NMQVNTX0lTUEIgICAgPSAweDM0LAo+PiArICAg IEhPU1QxWF9DTEFTU19HUjJEICAgID0gMHg1MSwKPj4gKyAgICBIT1NUMVhfQ0xBU1NfR1IyRF9T QiA9IDB4NTIsCj4+ICsgICAgSE9TVDFYX0NMQVNTX1ZJQyAgICAgPSAweDVkLAo+PiArICAgIEhP U1QxWF9DTEFTU19HUjNEICAgID0gMHg2MCwKPj4gKyAgICBIT1NUMVhfQ0xBU1NfTlZKUEcgICA9 IDB4YzAsCj4+ICsgICAgSE9TVDFYX0NMQVNTX05WREVDICAgPSAweGYwLAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGlubGluZSB1aW50MzJfdCBob3N0MXhfb3Bjb2RlX3NldGNsYXNzKHVuc2lnbmVk IGNsYXNzX2lkLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG1hc2spIHsKPj4gKyAgICByZXR1 cm4gKDAgPDwgMjgpIHwgKG9mZnNldCA8PCAxNikgfCAoY2xhc3NfaWQgPDwgNikgfCBtYXNrOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IGhvc3QxeF9vcGNvZGVfaW5jcih1 bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KSB7Cj4+ICsgICAgcmV0dXJuICgxIDw8IDI4 KSB8IChvZmZzZXQgPDwgMTYpIHwgY291bnQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUg dWludDMyX3QgaG9zdDF4X29wY29kZV9ub25pbmNyKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg Y291bnQpIHsKPj4gKyAgICByZXR1cm4gKDIgPDwgMjgpIHwgKG9mZnNldCA8PCAxNikgfCBjb3Vu dDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB1aW50MzJfdCBob3N0MXhfb3Bjb2RlX21h c2sodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBtYXNrKSB7Cj4+ICsgICAgcmV0dXJuICgzIDw8 IDI4KSB8IChvZmZzZXQgPDwgMTYpIHwgbWFzazsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGlu ZSB1aW50MzJfdCBob3N0MXhfb3Bjb2RlX2ltbSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHZh bHVlKSB7Cj4+ICsgICAgcmV0dXJuICg0IDw8IDI4KSB8IChvZmZzZXQgPDwgMTYpIHwgdmFsdWU7 Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgTlZfQ0xBU1NfSE9TVF9MT0FEX1NZTkNQVF9QQVlMT0FE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMTM4KQo+PiArI2RlZmlu ZSBOVl9DTEFTU19IT1NUX1dBSVRfU1lOQ1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDAwMDAxNDApCj4+ICsKPj4gKyNkZWZpbmUgTlZfVEhJX0lOQ1JfU1lO Q1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAw MDAwMDAwKQo+PiArI2RlZmluZSBOVl9USElfSU5DUl9TWU5DUFRfSU5EWCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzowCj4+ICsjZGVmaW5lIE5WX1RISV9JTkNS X1NZTkNQVF9DT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx NTo4Cj4+ICsjZGVmaW5lIE5WX1RISV9JTkNSX1NZTkNQVF9DT05EX0lNTUVESUFURSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKPj4gKyNkZWZpbmUgTlZfVEhJ X0lOQ1JfU1lOQ1BUX0NPTkRfT1BfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgweDAwMDAwMDAxKQo+PiArI2RlZmluZSBOVl9USElfSU5DUl9TWU5DUFRfRVJSICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDgpCj4+ICsj ZGVmaW5lIE5WX1RISV9JTkNSX1NZTkNQVF9FUlJfQ09ORF9TVFNfSU1NICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwOjAKPj4gKyNkZWZpbmUgTlZfVEhJX0lOQ1JfU1lOQ1BUX0VSUl9D T05EX1NUU19PUERPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MQo+PiArI2RlZmlu ZSBOVl9USElfQ1RYU1dfSU5DUl9TWU5DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDAwMDAwMGMpCj4+ICsjZGVmaW5lIE5WX1RISV9DVFhTV19JTkNSX1NZ TkNQVF9JTkRYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OjAKPj4gKyNk ZWZpbmUgTlZfVEhJX0NUWFNXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgweDAwMDAwMDIwKQo+PiArI2RlZmluZSBOVl9USElfQ1RYU1dfQ1VS Ul9DTEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTowCj4+ ICsjZGVmaW5lIE5WX1RISV9DVFhTV19BVVRPX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxMToxMQo+PiArI2RlZmluZSBOVl9USElfQ1RYU1dfQ1VSUl9D SEFOTkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6MTIKPj4g KyNkZWZpbmUgTlZfVEhJX0NUWFNXX05FWFRfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDI1OjE2Cj4+ICsjZGVmaW5lIE5WX1RISV9DVFhTV19ORVhUX0NI QU5ORUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMToyOAo+PiAr I2RlZmluZSBOVl9USElfQ09OVF9TWU5DUFRfRU9GICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjgpCj4+ICsjZGVmaW5lIE5WX1RISV9DT05UX1NZ TkNQVF9FT0ZfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OjAK Pj4gKyNkZWZpbmUgTlZfVEhJX0NPTlRfU1lOQ1BUX0VPRl9DT05EICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDg6OAo+PiArI2RlZmluZSBOVl9USElfTUVUSE9EMCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAw NDApCj4+ICsjZGVmaW5lIE5WX1RISV9NRVRIT0QwX09GRlNFVCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMTowCj4+ICsjZGVmaW5lIE5WX1RISV9NRVRIT0Qx ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgw MDAwMDA0NCkKPj4gKyNkZWZpbmUgTlZfVEhJX01FVEhPRDFfREFUQSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjAKPj4gKyNkZWZpbmUgTlZfVEhJX0lO VF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgweDAwMDAwMDc4KQo+PiArI2RlZmluZSBOVl9USElfSU5UX1NUQVRVU19GQUxDT05fSU5UICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowCj4+ICsjZGVmaW5lIE5WX1RI SV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwMDAwMDA3YykKPj4gKyNkZWZpbmUgTlZfVEhJX0lOVF9NQVNLX0ZBTENPTl9JTlQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6MAo+PiArCj4+ICsjZW5k aWYgLyogQVZVVElMX05WVEVHUkFfSE9TVDFYX0ggKi8KPj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRp bC9waXhkZXNjLmMgYi9saWJhdnV0aWwvcGl4ZGVzYy5jCj4+IGluZGV4IDFjMGJjZjIyMzIuLmJi MTRiMWIzMDYgMTAwNjQ0Cj4+IC0tLSBhL2xpYmF2dXRpbC9waXhkZXNjLmMKPj4gKysrIGIvbGli YXZ1dGlsL3BpeGRlc2MuYwo+PiBAQCAtMjc5MSw2ICsyNzkxLDEwIEBAIHN0YXRpYyBjb25zdCBB VlBpeEZtdERlc2NyaXB0b3IgYXZfcGl4X2ZtdF9kZXNjcmlwdG9yc1tBVl9QSVhfRk1UX05CXSA9 IHsKPj4gICAgICAgICB9LAo+PiAgICAgICAgIC5mbGFncyA9IEFWX1BJWF9GTVRfRkxBR19QTEFO QVIsCj4+ICAgICB9LAo+PiArICAgIFtBVl9QSVhfRk1UX05WVEVHUkFdID0gewo+PiArICAgICAg ICAubmFtZSA9ICJudnRlZ3JhIiwKPj4gKyAgICAgICAgLmZsYWdzID0gQVZfUElYX0ZNVF9GTEFH X0hXQUNDRUwsCj4+ICsgICAgfSwKPj4gfTsKPj4KPj4gc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCBjb2xvcl9yYW5nZV9uYW1lc1tdID0gewo+PiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3BpeGZt dC5oIGIvbGliYXZ1dGlsL3BpeGZtdC5oCj4+IGluZGV4IGE3ZjUwZTE2OTAuLmEzMjEzYzc5MmEg MTAwNjQ0Cj4+IC0tLSBhL2xpYmF2dXRpbC9waXhmbXQuaAo+PiArKysgYi9saWJhdnV0aWwvcGl4 Zm10LmgKPj4gQEAgLTQzOSw2ICs0MzksMTQgQEAgZW51bSBBVlBpeGVsRm9ybWF0IHsKPj4gICAg ICAqLwo+PiAgICAgQVZfUElYX0ZNVF9EM0QxMiwKPj4KPj4gKyAgICAvKioKPj4gKyAgICAgKiBI YXJkd2FyZSBzdXJmYWNlcyBmb3IgVGVncmEgZGV2aWNlcy4KPj4gKyAgICAgKgo+PiArICAgICAq IGRhdGFbMC4uMl0gcG9pbnRzIHRvIG1lbW9yeS1tYXBwZWQgYnVmZmVyIGNvbnRhaW5pbmcgZnJh bWUgZGF0YQo+PiArICAgICAqIGJ1ZlswXSBjb250YWlucyBhbiBBVkJ1ZmZlclJlZiB0byBhbiBB Vk5UZWdyYU1hcAo+PiArICAgICAqLwo+PiArICAgIEFWX1BJWF9GTVRfTlZURUdSQSwKPj4gKwo+ PiAgICAgQVZfUElYX0ZNVF9OQiAgICAgICAgIC8vLzwgbnVtYmVyIG9mIHBpeGVsIGZvcm1hdHMs IERPIE5PVCBVU0UgVEhJUyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggc2hhcmVkIGxpYmF2KiBi ZWNhdXNlIHRoZSBudW1iZXIgb2YgZm9ybWF0cyBtaWdodCBkaWZmZXIgYmV0d2VlbiB2ZXJzaW9u cwo+PiB9Owo+Pgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3Jn Cj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4gCj4g VG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVs LXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxp bmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1h bi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3Zl LCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAi dW5zdWJzY3JpYmUiLgo=