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 8D4DD48042 for ; Sun, 10 Dec 2023 02:28:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E222268D0B3; Sun, 10 Dec 2023 04:28:14 +0200 (EET) Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52FBD68CED0 for ; Sun, 10 Dec 2023 04:28:07 +0200 (EET) Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-286f3e0d010so971926a91.0 for ; Sat, 09 Dec 2023 18:28:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702175285; x=1702780085; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5iVNnuj1DIHez0QNm4CNwkej6U9KCX8rMU9lPxn0ib8=; b=ccZxdrEPsrBtnDo0jKSYqhwDShJMY+lAvZp+SweeRvZvXHLbsqAAV+1V36GbZ/Jpj7 BVp9Vm8VMa6EnmRv3xWJNYf3eGStxAnNNqMR55Ve7bCk0lD7qL3fbWxt0G4z0BMUv6br rwrrHqI+IjPMph4NTV06OyqalV1c6m1ePLpcg0am9ucx2umASy2+BwcOoKCCEG99N/UH Tg2A70Qpk+byOzZyZX5djEm5H1uIM0dEaOP3yM+vXCgioO7APsnk+HlOEErUN5U3FZzA 6cjHpDUAiAac5iUGMcD8VR1aNm2T+suOv3l6wvh+XiyrVaQvGdOoDZbq+hI16FvYlyje YyqQ== X-Gm-Message-State: AOJu0YxquFNoQTVaU4HCieu4WWlPLz52z2sVCPEKo4CaqjIB3ty4+/HO GThaIweBidzfG4FzTsJLmPjWeyauPnVRK10LVxMmIg== X-Google-Smtp-Source: AGHT+IGktSZhIuTTSlCdidWFscyuT3Qf6x26RikkOkth7aSCsoOhRpf8nM7PWVRYyzI3eA0w2ddvz7L89y1DsqpsB1g= X-Received: by 2002:a17:90a:c285:b0:286:bf9e:a6 with SMTP id f5-20020a17090ac28500b00286bf9e00a6mr4096614pjt.4.1702175285145; Sat, 09 Dec 2023 18:28:05 -0800 (PST) MIME-Version: 1.0 References: <20231209100639.607234-1-marth64@proxyid.net> In-Reply-To: <20231209100639.607234-1-marth64@proxyid.net> From: Marth64 Date: Sat, 9 Dec 2023 20:27:54 -0600 Message-ID: To: Marth64 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 Cc: ffmpeg-devel@ffmpeg.org 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: UmVhbGl6aW5nIHRoaXMgbGF0ZSwgYnV0IGluIGZ1bGwgdHJhbnNwYXJlbmN5IHRoZXJlIGFyZSBz b21lIHBvcnRpb25zCmFkYXB0ZWQgZnJvbSBWTEMgcGxheWVyICh3aGljaCBpcyBMR1BMKSwgbmFt ZWx5IGNoYXB0ZXIgYW5kIHRpbWUKY29udmVyc2lvbnMsIGFuZCBzbWFsbCBudW1iZXIgb2YgbGlu ZXMgYWRvcHRlZCBmcm9tIEhhbmRicmFrZSAod2hpY2ggaXMKR1BMKSwgc3BlY2lmaWNhbGx5IG9u ZSBpZiBzdGF0ZW1lbnQgdmFsaWRhdGlvbiBhbmQgYSBjb25zdGFudCB2YWx1ZS4gRm9yCnRoZSBs YXR0ZXIgSSB3aWxsIHNlbmQgYSByZXF1ZXN0IHRvIHJlbGljZW5zZSBhcyBMR1BMIGFuZCB1cGRh dGUgaGVyZS4gSQp3aWxsIHRoZW4gZ2l2ZSBjcmVkaXQgaW4gdGhlIGhlYWRlci4KCk15IGFwb2xv Z2llcyBmb3IgbWl4aW5nIHRoaXMuIEluIHRoZSBtZWFuIHRpbWUgSSB3aWxsIGFsc28gZml4IHNv bWUKYWZvcmVtZW50aW9uZWQgYnVncy4KCk9uIFNhdCwgRGVjIDksIDIwMjMgYXQgNDowNuKAr0FN IE1hcnRoNjQgPG1hcnRoNjRAcHJveHlpZC5uZXQ+IHdyb3RlOgoKPiBIZWxsbywgSSBhbSBoYXBw eSB0byBzaGFyZSBhIERWRCBkZW11eGVyIGZvciBmZm1wZWcgcG93ZXJlZCBieSBsaWJkdmRyZWFk Cj4gYW5kIGxpYmR2ZG5hdi4KPiBJIGhhdmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgb24vb2ZmIHRo cm91Z2hvdXQgdGhlIHllYXIgYW5kIHRoaW5rIGl0IGlzIGluCj4gYSBnb29kIHNwb3QKPiB0byBz aGFyZSBhdCB0aGUgTUwgbm93LiBUaGlzIHdhcyBhIG1ham9yIGxlYXJuaW5nIGV4cGVyaWVuY2Ug Zm9yIG1lIGluCj4gbWFueSB3YXlzIGFuZAo+IGFtIG9wZW4gdG8gYW55IGZlZWRiYWNrIG9uIGhv dyBJIGNvdWxkIGltcHJvdmUgaXQgdG8gYmUgYmV0dGVyLiBJbiBmYWN0LAo+IHRoZXJlIGlzIHN0 aWxsCj4gb25lIGlzc3VlIEkgY2FuJ3Qgc2VlbSB0byBmaWd1cmUgb3V0IGhvdyB0byBzb2x2ZSAo aW4gZGlzY3Vzc2lvbiBiZWxvdykuCj4gUmVnYXJkbGVzcywKPiBhIGdvb2QgbnVtYmVyIG9mIERW RHMgSSBoYXZlIHRyaWVkIHNlZW0gdG8gd29yayBvdXQgb2YgdGhlIGJveC4gVGhpcyBpcyBhCj4g ZnVsbC1zZXJ2aWNlCj4gZGVtdXhlciB3aXRoIGNoYXB0ZXJzLCBzdWJ0aXRsZXMgKGFuZCB0aGVp ciBwYWxldHRlcyksIGFzIHdlbGwgYXMgbGFuZ3VhZ2UKPiBtZXRhZGF0YS4KPgo+IEF0IGEgaGln aCBsZXZlbCwgdGhlIGRlbXV4ZXIgdXNlcyBsaWJkdmRyZWFkIGZvciBtZXRhZGF0YSBvZiB0aGUg ZGlzYywKPiBsaWJkdmRuYXYgZm9yCj4gdGhlIGFjdHVhbCBwbGF5YmFjaywgYW5kIHRoZSBNUEVH LVBTIGRlbXV4ZXIgZm9yIHRoZSB1bmRlcmx5aW5nIFZPQiBzdHJlYW0uCj4KPiBGaXJzdCwgdGhl IGJhc2ljIHVzYWdlLCBpcyBxdWl0ZSBzdHJhaWdodGZvcndhcmQ6Cj4gZmZtcGVnIC1mIGR2ZHZp ZGVvIC10aXRsZSBOTiAtaSBEVkQuaXNvfC9kZXYvc3JYfC9wYXRoL3RvL0RWRCAuLi4KPiBXaGVy ZSBOTiBjYW4gYmUgcmVwbGFjZWQgYnkgeW91ciBrbm93biB0aXRsZSBudW1iZXIgaW4gdGhlIGRp c2MKPgo+IEFzIHRoZSBkZW11eGVyIGVmZmVjdGl2ZWx5IHdvcmtzIGF0IGEgUEdDIGxldmVsLCBt dWx0aS1QR0MgdGl0bGVzIGFyZSBub3QKPiBzdXBwb3J0ZWQuCj4gQnV0IHRvIHByb3ZpZGUgdGhp cyBmbGV4aWJpbGl0eSBhcyB0aGVyZSBhcmUgbWFueSB3ZWlyZGx5IGF1dGhvcmVkIERWRHMKPiBv dXQgdGhlcmUsCj4gb25lIGNhbiBzcGVjaWZ5IGFuIGV4YWN0IFBHQyB2aWEgLXBnYyBvcHRpb24g YW5kIGFuIGFzc29jaWF0ZWQgcHJvZ3JhbQo+IChQRywgY2FuIHN0YXJ0IGF0IDEpLgo+Cj4gSSBh bSBob3BpbmcgYW5kIHdpbGxpbmcgdG8gaW1wcm92ZSB0aGlzIHRvIGJlIGEgcm9idXN0IGRlbXV4 ZXIgd2hlcmV2ZXIKPiBwb3NzaWJsZSwgYnV0IHRvCj4gdGhhdCBleHRlbnQgdGhlcmUgaXMgc3Rp bGwgYW4gaXNzdWUgSSBjYW4ndCBmaWd1cmUgb3V0IGhvdyB0byBzb2x2ZToKPiBEZWFsaW5nIHdp dGggRFRTIGRpc2NvbnRpbnVpdGllcwo+IGFuZCBQVFMgZ2VuZXJhdGlvbi4KPgo+IFJpZ2h0IG5v dywgYXMgYSBiYW5kLWFpZCwgSSBhbSBhZGRpbmcgQVZGTVRfRkxBR19HRU5QVFMgKGxpbmUgMTQw OCkKPiB0byB0aGUgTVBFRy1QUyBzdWJkZW11eGVyLiBUaGlzIHdvcmtzIHdpdGggbW9zdCBkaXNj cyBhbmQgdGhlIG91dHB1dCBzZWVtcwo+IE9LLiBPbiBkaXNjcyB3aXRoIGRpc2NvbnRpbnVpdGll cywgaG93ZXZlciwKPiB0aGlzIGNhdXNlcyB0aGUgZGVtdXhpbmcgdG8gaGFuZyB3aGljaCBpcyBv YnZpb3VzbHkgdW5hY2NlcHRhYmxlIGFsc28uCj4gUmVtb3ZpbmcgdGhlIGZsYWcgY2F1c2VzIHRo ZSBkaXNjcwo+IHRvIG5vdCBoYW5nLCBidXQgdGhlbiB0aGUgb3V0cHV0IGZvciBhbGwgZGlzY3Mg YmVjb21lcyBjaG9wcHkgZm9yIG9idmlvdXMKPiByZWFzb25zIChpbnZhbGlkIFBUUykuCj4KPiBJ dCBjb3VsZCBiZSBiZWNhdXNlIEkgaGF2ZSBzb21lIG1pc3VuZGVyc3RhbmRpbmdzIG9uIGhvdyB0 aGluZ3Mgd29yawo+IHdpdGhpbiBmZm1wZWcsCj4gYnV0IEkgaGF2ZSB0cmllZCB0byB0aGUgcG9p bnQgbm93IHdoZXJlIEkgdGhvdWdodCBpdCBiZXN0IHRvIGFzayB0aGUKPiBleHBlcnRzIGZvciBo ZWxwIGlmIHlvdSBjYW4gc3BvdAo+IHdoYXQgSSBhbSBkb2luZyB3cm9uZy4gSSBhbSByZWFsbHkg bW90aXZhdGVkIHRvIG1ha2UgdGhpcyB3b3JrIGFuZCBnb29kCj4gcXVhbGl0eS4KPgo+IFRoYW5r IHlvdSEKPgo+IC0tLQo+ICBjb25maWd1cmUgICAgICAgICAgICAgICAgIHwgICAgOCArCj4gIGxp YmF2Zm9ybWF0L01ha2VmaWxlICAgICAgfCAgICAxICsKPiAgbGliYXZmb3JtYXQvYWxsZm9ybWF0 cy5jICB8ICAgIDEgKwo+ICBsaWJhdmZvcm1hdC9hdmxhbmd1YWdlLmMgIHwgICAxMCArLQo+ICBs aWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5jIHwgMTU5OSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4gIDUgZmlsZXMgY2hhbmdlZCwgMTYxNyBpbnNlcnRpb25zKCspLCAyIGRl bGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMu Ywo+Cj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IGQ3N2MwNTMy MjYuLjY1ZTU5NjgxOTQgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJl Cj4gQEAgLTIyNyw2ICsyMjcsOCBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gICAgLS1l bmFibGUtbGliZGF2czIgICAgICAgIGVuYWJsZSBBVlMyIGRlY29kaW5nIHZpYSBsaWJkYXZzMiBb bm9dCj4gICAgLS1lbmFibGUtbGliZGMxMzk0ICAgICAgIGVuYWJsZSBJSURDLTEzOTQgZ3JhYmJp bmcgdXNpbmcgbGliZGMxMzk0Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaWJy YXcxMzk0IFtub10KPiArICAtLWVuYWJsZS1saWJkdmRuYXYgICAgICAgZW5hYmxlIGxpYmR2ZG5h diwgbmVlZGVkIGZvciBEVkQgZGVtdXhpbmcgW25vXQo+ICsgIC0tZW5hYmxlLWxpYmR2ZHJlYWQg ICAgICBlbmFibGUgbGliZHZkcmVhZCwgbmVlZGVkIGZvciBEVkQgZGVtdXhpbmcgW25vXQo+ICAg IC0tZW5hYmxlLWxpYmZkay1hYWMgICAgICBlbmFibGUgQUFDIGRlL2VuY29kaW5nIHZpYSBsaWJm ZGstYWFjIFtub10KPiAgICAtLWVuYWJsZS1saWJmbGl0ZSAgICAgICAgZW5hYmxlIGZsaXRlICh2 b2ljZSBzeW50aGVzaXMpIHN1cHBvcnQgdmlhCj4gbGliZmxpdGUgW25vXQo+ICAgIC0tZW5hYmxl LWxpYmZvbnRjb25maWcgICBlbmFibGUgbGliZm9udGNvbmZpZywgdXNlZnVsIGZvciBkcmF3dGV4 dAo+IGZpbHRlciBbbm9dCj4gQEAgLTE4MDIsNiArMTgwNCw4IEBAIEVYVEVSTkFMX0xJQlJBUllf R1BMX0xJU1Q9Igo+ICAgICAgZnJlaTByCj4gICAgICBsaWJjZGlvCj4gICAgICBsaWJkYXZzMgo+ ICsgICAgbGliZHZkbmF2Cj4gKyAgICBsaWJkdmRyZWFkCj4gICAgICBsaWJydWJiZXJiYW5kCj4g ICAgICBsaWJ2aWRzdGFiCj4gICAgICBsaWJ4MjY0Cj4gQEAgLTM0OTQsNiArMzQ5OCw4IEBAIGR0 c19kZW11eGVyX3NlbGVjdD0iZGNhX3BhcnNlciIKPiAgZHRzaGRfZGVtdXhlcl9zZWxlY3Q9ImRj YV9wYXJzZXIiCj4gIGR2X2RlbXV4ZXJfc2VsZWN0PSJkdnByb2ZpbGUiCj4gIGR2X211eGVyX3Nl bGVjdD0iZHZwcm9maWxlIgo+ICtkdmR2aWRlb19kZW11eGVyX3NlbGVjdD0ibXBlZ3BzX2RlbXV4 ZXIiCj4gK2R2ZHZpZGVvX2RlbXV4ZXJfZGVwcz0ibGliZHZkbmF2IGxpYmR2ZHJlYWQiCj4gIGR4 YV9kZW11eGVyX3NlbGVjdD0icmlmZmRlYyIKPiAgZWFjM19kZW11eGVyX3NlbGVjdD0iYWMzX3Bh cnNlciIKPiAgZXZjX2RlbXV4ZXJfc2VsZWN0PSJldmNfZnJhbWVfbWVyZ2VfYnNmIGV2Y19wYXJz ZXIiCj4gQEAgLTY3MjMsNiArNjcyOSw4IEBAIGVuYWJsZWQgbGliZGF2MWQgICAgICAgICAgJiYg cmVxdWlyZV9wa2dfY29uZmlnCj4gbGliZGF2MWQgImRhdjFkID49IDAuNS4wIiAiZGF2MWQKPiAg ZW5hYmxlZCBsaWJkYXZzMiAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZGF2czIg ImRhdnMyID49IDEuNi4wIgo+IGRhdnMyLmggZGF2czJfZGVjb2Rlcl9vcGVuCj4gIGVuYWJsZWQg bGliZGMxMzk0ICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmRjMTM5NCBsaWJkYzEz OTQtMgo+IGRjMTM5NC9kYzEzOTQuaCBkYzEzOTRfbmV3Cj4gIGVuYWJsZWQgbGliZHJtICAgICAg ICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmRybSBsaWJkcm0geGY4NmRybS5oCj4gZHJt R2V0VmVyc2lvbgo+ICtlbmFibGVkIGxpYmR2ZG5hdiAgICAgICAgICYmIHJlcXVpcmVfcGtnX2Nv bmZpZyBsaWJkdmRuYXYgImR2ZG5hdiA+PQo+IDYuMS4xIiBkdmRuYXYvZHZkbmF2LmggZHZkbmF2 X29wZW4yCj4gK2VuYWJsZWQgbGliZHZkcmVhZCAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmln IGxpYmR2ZHJlYWQgImR2ZHJlYWQgPj0KPiA2LjEuMiIgZHZkcmVhZC9kdmRfcmVhZGVyLmggRFZE T3BlbjIgLWxkdmRyZWFkCj4gIGVuYWJsZWQgbGliZmRrX2FhYyAgICAgICAgJiYgeyBjaGVja19w a2dfY29uZmlnIGxpYmZka19hYWMgZmRrLWFhYwo+ICJmZGstYWFjL2FhY2VuY19saWIuaCIgYWFj RW5jT3BlbiB8fAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXF1aXJlIGxp YmZka19hYWMgZmRrLWFhYy9hYWNlbmNfbGliLmgKPiBhYWNFbmNPcGVuIC1sZmRrLWFhYyAmJgo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuICJ1c2luZyBsaWJmZGsgd2l0 aG91dCBwa2ctY29uZmlnIjsKPiB9IH0KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZp bGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQo+IGluZGV4IDJkYjgzYWZmODEuLjQ1ZGJhNTMwNDQg MTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiArKysgYi9saWJhdmZvcm1hdC9N YWtlZmlsZQo+IEBAIC0xOTIsNiArMTkyLDcgQEAgT0JKUy0kKENPTkZJR19EVFNfTVVYRVIpICAg ICAgICAgICAgICAgICArPSByYXdlbmMubwo+ICBPQkpTLSQoQ09ORklHX0RWX01VWEVSKSAgICAg ICAgICAgICAgICAgICs9IGR2ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19EVkJTVUJfREVNVVhFUikg ICAgICAgICAgICArPSBkdmJzdWIubyByYXdkZWMubwo+ICBPQkpTLSQoQ09ORklHX0RWQlRYVF9E RU1VWEVSKSAgICAgICAgICAgICs9IGR2YnR4dC5vIHJhd2RlYy5vCj4gK09CSlMtJChDT05GSUdf RFZEVklERU9fREVNVVhFUikgICAgICAgICAgKz0gZHZkdmlkZW9kZWMubwo+ICBPQkpTLSQoQ09O RklHX0RYQV9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IGR4YS5vCj4gIE9CSlMtJChDT05GSUdf RUFfQ0RBVEFfREVNVVhFUikgICAgICAgICAgKz0gZWFjZGF0YS5vCj4gIE9CSlMtJChDT05GSUdf RUFfREVNVVhFUikgICAgICAgICAgICAgICAgKz0gZWxlY3Ryb25pY2FydHMubwo+IGRpZmYgLS1n aXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMK PiBpbmRleCBjOGJiNGUzODY2Li5kYzJhY2Y1NzVjIDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0 L2FsbGZvcm1hdHMuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+IEBAIC0xNTAs NiArMTUwLDcgQEAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R2X2RlbXV4ZXI7Cj4g IGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl9kdl9tdXhlcjsKPiAgZXh0ZXJuIGNvbnN0 IEFWSW5wdXRGb3JtYXQgIGZmX2R2YnN1Yl9kZW11eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfZHZidHh0X2RlbXV4ZXI7Cj4gK2V4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0 ICBmZl9kdmR2aWRlb19kZW11eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZf ZHhhX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9lYV9kZW11eGVy Owo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZWFfY2RhdGFfZGVtdXhlcjsKPiBk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYXZsYW5ndWFnZS5jIGIvbGliYXZmb3JtYXQvYXZsYW5n dWFnZS5jCj4gaW5kZXggNzgyYTU4YWRiMi4uMjAyZDlhYTgzNSAxMDA2NDQKPiAtLS0gYS9saWJh dmZvcm1hdC9hdmxhbmd1YWdlLmMKPiArKysgYi9saWJhdmZvcm1hdC9hdmxhbmd1YWdlLmMKPiBA QCAtMjksNyArMjksNyBAQCB0eXBlZGVmIHN0cnVjdCBMYW5nRW50cnkgewo+ICAgICAgdWludDE2 X3QgbmV4dF9lcXVpdmFsZW50Owo+ICB9IExhbmdFbnRyeTsKPgo+IC1zdGF0aWMgY29uc3QgdWlu dDE2X3QgbGFuZ190YWJsZV9jb3VudHNbXSA9IHsgNDg0LCAyMCwgMTg0IH07Cj4gK3N0YXRpYyBj b25zdCB1aW50MTZfdCBsYW5nX3RhYmxlX2NvdW50c1tdID0geyA0ODQsIDIwLCAxOTAgfTsKPiAg c3RhdGljIGNvbnN0IHVpbnQxNl90IGxhbmdfdGFibGVfb2Zmc2V0c1tdID0geyAwLCA0ODQsIDUw NCB9Owo+Cj4gIHN0YXRpYyBjb25zdCBMYW5nRW50cnkgbGFuZ190YWJsZVtdID0gewo+IEBAIC01 MzksNyArNTM5LDcgQEAgc3RhdGljIGNvbnN0IExhbmdFbnRyeSBsYW5nX3RhYmxlW10gPSB7Cj4g ICAgICAvKjA1MDEqLyB7ICJzbGsiLCAgNjQ3IH0sCj4gICAgICAvKjA1MDIqLyB7ICJzcWkiLCAg NjUyIH0sCj4gICAgICAvKjA1MDMqLyB7ICJ6aG8iLCAgNjg2IH0sCj4gLSAgICAvKi0tLS0tIEFW X0xBTkdfSVNPNjM5XzEgZW50cmllcyAoMTg0KSAtLS0tLSovCj4gKyAgICAvKi0tLS0tIEFWX0xB TkdfSVNPNjM5XzEgZW50cmllcyAoMTkwKSAtLS0tLSovCj4gICAgICAvKjA1MDQqLyB7ICJhYSIg LCAgICAwIH0sCj4gICAgICAvKjA1MDUqLyB7ICJhYiIgLCAgICAxIH0sCj4gICAgICAvKjA1MDYq LyB7ICJhZSIgLCAgIDMzIH0sCj4gQEAgLTcyNCw2ICs3MjQsMTIgQEAgc3RhdGljIGNvbnN0IExh bmdFbnRyeSBsYW5nX3RhYmxlW10gPSB7Cj4gICAgICAvKjA2ODUqLyB7ICJ6YSIgLCAgNDc4IH0s Cj4gICAgICAvKjA2ODYqLyB7ICJ6aCIgLCAgIDc4IH0sCj4gICAgICAvKjA2ODcqLyB7ICJ6dSIg LCAgNDgwIH0sCj4gKyAgICAvKjA2ODgqLyB7ICJpbiIgLCAgMTk1IH0sIC8qIGRlcHJlY2F0ZWQg Ki8KPiArICAgIC8qMDY4OSovIHsgIml3IiAsICAxNzIgfSwgLyogZGVwcmVjYXRlZCAqLwo+ICsg ICAgLyowNjkwKi8geyAiamkiICwgIDQ3MiB9LCAvKiBkZXByZWNhdGVkICovCj4gKyAgICAvKjA2 OTEqLyB7ICJqdyIgLCAgMjAyIH0sIC8qIGRlcHJlY2F0ZWQgKi8KPiArICAgIC8qMDY5MiovIHsg Im1vIiAsICAzNTggfSwgLyogZGVwcmVjYXRlZCAqLwo+ICsgICAgLyowNjkzKi8geyAic2giICwg IDY5MyB9LCAvKiBkZXByZWNhdGVkIChubyBlcXVpdmFsZW50KSAqLwo+ICAgICAgeyAiIiwgMCB9 Cj4gIH07Cj4KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYyBiL2xpYmF2 Zm9ybWF0L2R2ZHZpZGVvZGVjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLjJiMjJhN2RlNGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZmb3JtYXQvZHZk dmlkZW9kZWMuYwo+IEBAIC0wLDAgKzEsMTU5OSBAQAo+ICsvKgo+ICsgKiBEVkQtVmlkZW8gZGVt dXhlciAocG93ZXJlZCBieSBsaWJkdmRuYXYvbGliZHZkcmVhZCkKPiArICoKPiArICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiAr ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8K PiArCj4gKy8qKgo+ICsgKiBEVkQtVmlkZW8gaXMgbm90IGEgZGlyZWN0bHkgYWNjZXNzaWJsZSwg bGluZWFyIGNvbnRhaW5lciBmb3JtYXQgaW4gdGhlCj4gKyAqIHRyYWRpdGlvbmFsIHNlbnNlLiBJ bnN0ZWFkLCBpdCBhbGxvd3MgZm9yIGNvbXBsZXggYW5kIHByb2dyYW1tYXRpYwo+ICsgKiBwbGF5 YmFjayBvZiBjYXJlZnVsbHkgbXV4ZWQgc3RyZWFtcy4gQSB0eXBpY2FsIERWRCBwbGF5ZXIgcmVs aWVzIG9uCj4gKyAqIHVzZXIgR1VJIGludGVyYWN0aW9uIHRvIGRyaXZlIHRoZSBkaXJlY3Rpb24g b2YgdGhlIGRlbXV4aW5nLgo+ICsgKiBVbHRpbWF0ZWx5LCB0aGUgbG9naWNhbCBwbGF5YmFjayBz ZXF1ZW5jZSBpcyBkZWZpbmVkIGJ5IGEgdGl0bGUncyBQR0MKPiArICogYW5kIGEgdXNlciBzZWxl Y3RlZCAiYW5nbGUiLiBBbiBhZGRpdGlvbmFsIGxheWVyIG9mIGNvbnRyb2wgaXMgZGVmaW5lZAo+ IGJ5Cj4gKyAqIE5BViBwYWNrZXRzIGluIHRoZSBNUEVHLVBTLCBidXQgYXMgdGhlc2UgYXJlIHBy b2Nlc3NlZCBieSBsaWJkdmRuYXYsCj4gKyAqIHRoZXkgYXJlIHdpdGhlbGQgZnJvbSB0aGUgb3V0 cHV0IG9mIHRoaXMgZGVtdXhlci4KPiArICoKPiArICogVGhlcmVmb3JlLCB0aGUgaGlnaC1sZXZl bCBhcHByb2FjaCBpcyBhcyBmb2xsb3dzOgo+ICsgKiAxKSBPcGVuIHRoZSB2b2x1bWUgd2l0aCBs aWJkdmRyZWFkCj4gKyAqIDIpIEdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlci1yZXF1 ZXN0ZWQgdGl0bGUgYW5kIFBHQwo+IGNvb3JkaW5hdGVzCj4gKyAqIDMpIFJlcXVlc3QgcGxheWJh Y2sgYXQgdGhlIGNvb3JkaW5hdGVzIGFuZCBjaG9zZW4gYW5nbGUgd2l0aCBsaWJkdmRuYXYKPiAr ICogNCkgU2VlayBwbGF5YmFjayB0byBmaXJzdCBjZWxsIGF0IHRoZSBjb29yZGluYXRlcyAoc2tp cHBpbmcgc3RpbGxzLAo+IGV0Yy4pCj4gKyAqIDUpIEJlZ2luIHRoZSBwbGF5YmFjayAocmVhZGlu ZyBhbmQgZGVtdXhpbmcpIG9mIE1QRUctUFMgYmxvY2tzCj4gKyAqIDYpIEVuZCBwbGF5YmFjayBp ZiB0aGUgUEdDIG9yIGFuZ2xlIGNoYW5nZQo+ICsgKiA3KSBDbG9zZSByZXNvdXJjZXMKPiArICoq Lwo+ICsKPiArLyoqCj4gKyAqIElzc3Vlcy9idWcgdHJhY2tlciAoVE9ETyk6Cj4gKyAqIC0gU0RE UyBpcyBub3Qgc3VwcG9ydGVkIHlldAo+ICsgKiAtIEFyZSB3ZSBoYW5kbGluZyBiYWNrd2FyZHMg Y2VsbCBjaGFuZ2VzIGFuZCBQVFQgY2hhbmdlcyBjb3JyZWN0bHk/Cj4gKyAqIC0gU29tZSBjb2Rl YyBwYXJhbWV0ZXJzL21ldGFkYXRhIGlzIG5vdCBiZWluZyBleHBsaWNpdGx5IHNldDoKPiArICog ICAgICAtPiBDaGFubmVsTGF5b3V0LCBjb2xvci9jaHJvbWEgaW5mbywgREFSLCBmcmFtZSBzaXpl IGZvciBNUDEvTVAyCj4gYXVkaW8KPiArICogLSBBZGRpdGlvbmFsIFBHQyB2YWxpZGF0aW9ucz8K PiArKiovCj4gKwo+ICsjaW5jbHVkZSA8ZHZkcmVhZC9kdmRfcmVhZGVyLmg+Cj4gKyNpbmNsdWRl IDxkdmRyZWFkL2lmb19yZWFkLmg+Cj4gKyNpbmNsdWRlIDxkdmRyZWFkL2lmb190eXBlcy5oPgo+ ICsjaW5jbHVkZSA8ZHZkcmVhZC9uYXZfcmVhZC5oPgo+ICsjaW5jbHVkZSA8ZHZkbmF2L2R2ZG5h di5oPgo+ICsKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL2F2dXRpbC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NvbG9yc3BhY2UuaCIK PiArI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQu aCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9zYW1wbGVmbXQuaCIKPiArCj4gKyNpbmNsdWRlICJs aWJhdmNvZGVjL2F2Y29kZWMuaCIKPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2aW9faW50ZXJu YWwuaCIKPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2bGFuZ3VhZ2UuaCIKPiArI2luY2x1ZGUg ImxpYmF2Zm9ybWF0L2F2Zm9ybWF0LmgiCj4gKyNpbmNsdWRlICJsaWJhdmZvcm1hdC9kZW11eC5o Igo+ICsjaW5jbHVkZSAibGliYXZmb3JtYXQvaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2 Zm9ybWF0L3VybC5oIgo+ICsKPiArI2RlZmluZSBaRVJPX1EgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCkgeyAwLAo+IDEgfQo+ICsKPiArI2RlZmlu ZSBEVkRWSURFT19QU19NQVhfU0VBUkNIX0JMT0NLUyAgICAgICAgICAgICAgICAgICAxMjgKPiAr I2RlZmluZSBEVkRWSURFT19MSUJEVkRYX0xPR19CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAx MDI0Cj4gKwo+ICsjZGVmaW5lIERWRFZJREVPX1RJTUVfQkFTRV9RICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChBVlJhdGlvbmFsKSB7IDEsCj4gOTAwMDAgfQo+ICsjZGVmaW5lIERWRFZJREVP X1RJTUVfQkFTRV9NSUxMSVNfUSAgICAgICAgICAgICAgICAgICAgIChBVlJhdGlvbmFsKSB7IDEs Cj4gMTAwMCB9Cj4gKyNkZWZpbmUgRFZEVklERU9fUFRTX1dSQVBfQklUUyAgICAgICAgICAgICAg ICAgICAgICAgICAgMzIKPiArI2RlZmluZSBEVkRWSURFT19CTE9DS19TSVpFICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAyMDQ4Cj4gKwo+ICsjZGVmaW5lIERWRFZJREVPX05UU0NfRlJBTUVS QVRFX1EgICAgICAgICAgICAgICAgICAgICAgIChBVlJhdGlvbmFsKSB7Cj4gMzAwMDAsIDEwMDEg fQo+ICsjZGVmaW5lIERWRFZJREVPX05UU0NfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDQ4MAo+ICsjZGVmaW5lIERWRFZJREVPX1BBTF9GUkFNRVJBVEVfUSAgICAgICAgICAgICAg ICAgICAgICAgIChBVlJhdGlvbmFsKSB7Cj4gMjUsIDEgfQo+ICsjZGVmaW5lIERWRFZJREVPX1BB TF9IRUlHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3Ngo+ICsjZGVmaW5lIERWRFZJ REVPX0QxX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcyMAo+ICsjZGVmaW5l IERWRFZJREVPXzRDSUZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcwNAo+ICsj ZGVmaW5lIERWRFZJREVPX0QxX0hBTEZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDM1 Mgo+ICsjZGVmaW5lIERWRFZJREVPX0NJRl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDM1Mgo+ICsjZGVmaW5lIERWRFZJREVPX1BJWEVMX0ZPUk1BVCAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFWX1BJWF9GTVRfWVVWNDIwUAo+ICsKPiArI2RlZmluZSBEVkRWSURFT19TVEFS VENPREVfVklERU8gICAgICAgICAgICAgICAgICAgICAgICAweDFFMAo+ICsjZGVmaW5lIERWRFZJ REVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9fQUMzICAgICAgICAgICAgIDB4ODAKPiArI2RlZmlu ZSBEVkRWSURFT19TVEFSVENPREVfT0ZGU0VUX0FVRElPX01QMSAgICAgICAgICAgICAweDFDMAo+ ICsjZGVmaW5lIERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9fTVAyICAgICAgICAgICAg IDB4MUMwCj4gKyNkZWZpbmUgRFZEVklERU9fU1RBUlRDT0RFX09GRlNFVF9BVURJT19QQ00gICAg ICAgICAgICAgMHhBMAo+ICsjZGVmaW5lIERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9f RFRTICAgICAgICAgICAgIDB4ODgKPiArI2RlZmluZSBEVkRWSURFT19TVEFSVENPREVfT0ZGU0VU X1NVQlAgICAgICAgICAgICAgICAgICAweDIwCj4gKwo+ICsjZGVmaW5lIERWRFZJREVPX1RJVExF X05VTUJFUl9NQVggICAgICAgICAgICAgICAgICAgICAgIDk5Cj4gKyNkZWZpbmUgRFZEVklERU9f UFRUX05VTUJFUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgOTkKPiArI2RlZmluZSBEVkRW SURFT19QR0NfTlVNQkVSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAzMjc2Nwo+ICsjZGVm aW5lIERWRFZJREVPX1BHX05VTUJFUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgIDI1NQo+ ICsjZGVmaW5lIERWRFZJREVPX0FOR0xFX05VTUJFUl9NQVggICAgICAgICAgICAgICAgICAgICAg IDkKPiArI2RlZmluZSBEVkRWSURFT19WVFNfTlVNQkVSX01BWCAgICAgICAgICAgICAgICAgICAg ICAgICA5OQo+ICsjZGVmaW5lIERWRFZJREVPX1RUX05VTUJFUl9NQVggICAgICAgICAgICAgICAg ICAgICAgICAgIDk5Cj4gKyNkZWZpbmUgRFZEVklERU9fUkVHSU9OX05VTUJFUl9NQVggICAgICAg ICAgICAgICAgICAgICAgOAo+ICsjZGVmaW5lIERWRFZJREVPX0FVRElPX0NPTlRST0xfRU5BQkxF RF9NQVNLICAgICAgICAgICAgIDB4ODAwMAo+ICsjZGVmaW5lIERWRFZJREVPX1NVQlBfQ09OVFJP TF9FTkFCTEVEX01BU0sgICAgICAgICAgICAgIDB4ODAwMDAwMDAKPiArI2RlZmluZSBEVkRWSURF T19WVFNfQVVESU9fU1RSRUFNU19NQVggICAgICAgICAgICAgICAgICA4Cj4gKyNkZWZpbmUgRFZE VklERU9fVlRTX1NVQlBfU1RSRUFNU19NQVggICAgICAgICAgICAgICAgICAgMzIKPiArCj4gKy8q ICgicGFsZXR0ZTogIikgKyAoInJyZ2diYiwgIioxNSkgKyAoInJyZ2diYiIpICsgXG4gKyBcMCAq Lwo+ICsjZGVmaW5lIERWRFZJREVPX1NVQlBfQ0xVVF9SR0JfRVhUUkFEQVRBX1NJWkUgICAgICAg ICAgICg5ICsgKDggKiAxNSkgKyA2Cj4gKyAxICsgMSkKPiArI2RlZmluZSBEVkRWSURFT19TVUJQ X0NMVVRfTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAxNgo+ICsjZGVmaW5lIERWRFZJREVP X1NVQlBfQ0xVVF9TSVpFCj4gIERWRFZJREVPX1NVQlBfQ0xVVF9MRU4gKiBzaXplb2YodWludDMy X3QpCj4gKwo+ICsvKiBjb252ZXJ0IGJpbmFyeS1jb2RlZCBkZWNpbWFsIHRvIGRlY2ltYWwgKi8K PiArI2RlZmluZSBCQ0QyRChfX3hfXykgKCgoX194X18gJiAweEYwKSA+PiA0KSAqIDEwICsgKF9f eF9fICYgMHgwRikpCj4gKwo+ICsvKiBjcm9wIHRhYmxlIGZvciBZVVYgdG8gUkdCIHN1YnBpY3R1 cmUgcGFsZXR0ZSBjb252ZXJzaW9uICovCj4gKyNkZWZpbmUgRFZEVklERU9fWVVWX05FR19DUk9Q X01BWCAgICAgICAgICAgICAgICAgICAgICAgMTAyNAo+ICsjZGVmaW5lIHRpbWVzNCh4KSB4LCB4 LCB4LCB4Cj4gKyNkZWZpbmUgdGltZXMyNTYoeCkgdGltZXM0KHRpbWVzNCh0aW1lczQodGltZXM0 KHRpbWVzNCh4KSkpKSkKPiArCj4gK2NvbnN0IHVpbnQ4X3QgZHZkdmlkZW9feXV2X2Nyb3BfdGFi WzI1NiArIDIgKiBEVkRWSURFT19ZVVZfTkVHX0NST1BfTUFYXQo+ID0gewo+ICt0aW1lczI1Nigw eDAwKSwKPgo+ICsweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCww eDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGLAo+Cj4gKzB4MTAsMHgxMSwweDEyLDB4 MTMsMHgxNCwweDE1LDB4MTYsMHgxNywweDE4LDB4MTksMHgxQSwweDFCLDB4MUMsMHgxRCwweDFF LDB4MUYsCj4KPiArMHgyMCwweDIxLDB4MjIsMHgyMywweDI0LDB4MjUsMHgyNiwweDI3LDB4Mjgs MHgyOSwweDJBLDB4MkIsMHgyQywweDJELDB4MkUsMHgyRiwKPgo+ICsweDMwLDB4MzEsMHgzMiww eDMzLDB4MzQsMHgzNSwweDM2LDB4MzcsMHgzOCwweDM5LDB4M0EsMHgzQiwweDNDLDB4M0QsMHgz RSwweDNGLAo+Cj4gKzB4NDAsMHg0MSwweDQyLDB4NDMsMHg0NCwweDQ1LDB4NDYsMHg0NywweDQ4 LDB4NDksMHg0QSwweDRCLDB4NEMsMHg0RCwweDRFLDB4NEYsCj4KPiArMHg1MCwweDUxLDB4NTIs MHg1MywweDU0LDB4NTUsMHg1NiwweDU3LDB4NTgsMHg1OSwweDVBLDB4NUIsMHg1QywweDVELDB4 NUUsMHg1RiwKPgo+ICsweDYwLDB4NjEsMHg2MiwweDYzLDB4NjQsMHg2NSwweDY2LDB4NjcsMHg2 OCwweDY5LDB4NkEsMHg2QiwweDZDLDB4NkQsMHg2RSwweDZGLAo+Cj4gKzB4NzAsMHg3MSwweDcy LDB4NzMsMHg3NCwweDc1LDB4NzYsMHg3NywweDc4LDB4NzksMHg3QSwweDdCLDB4N0MsMHg3RCww eDdFLDB4N0YsCj4KPiArMHg4MCwweDgxLDB4ODIsMHg4MywweDg0LDB4ODUsMHg4NiwweDg3LDB4 ODgsMHg4OSwweDhBLDB4OEIsMHg4QywweDhELDB4OEUsMHg4RiwKPgo+ICsweDkwLDB4OTEsMHg5 MiwweDkzLDB4OTQsMHg5NSwweDk2LDB4OTcsMHg5OCwweDk5LDB4OUEsMHg5QiwweDlDLDB4OUQs MHg5RSwweDlGLAo+Cj4gKzB4QTAsMHhBMSwweEEyLDB4QTMsMHhBNCwweEE1LDB4QTYsMHhBNyww eEE4LDB4QTksMHhBQSwweEFCLDB4QUMsMHhBRCwweEFFLDB4QUYsCj4KPiArMHhCMCwweEIxLDB4 QjIsMHhCMywweEI0LDB4QjUsMHhCNiwweEI3LDB4QjgsMHhCOSwweEJBLDB4QkIsMHhCQywweEJE LDB4QkUsMHhCRiwKPgo+ICsweEMwLDB4QzEsMHhDMiwweEMzLDB4QzQsMHhDNSwweEM2LDB4Qzcs MHhDOCwweEM5LDB4Q0EsMHhDQiwweENDLDB4Q0QsMHhDRSwweENGLAo+Cj4gKzB4RDAsMHhEMSww eEQyLDB4RDMsMHhENCwweEQ1LDB4RDYsMHhENywweEQ4LDB4RDksMHhEQSwweERCLDB4REMsMHhE RCwweERFLDB4REYsCj4KPiArMHhFMCwweEUxLDB4RTIsMHhFMywweEU0LDB4RTUsMHhFNiwweEU3 LDB4RTgsMHhFOSwweEVBLDB4RUIsMHhFQywweEVELDB4RUUsMHhFRiwKPgo+ICsweEYwLDB4RjEs MHhGMiwweEYzLDB4RjQsMHhGNSwweEY2LDB4RjcsMHhGOCwweEY5LDB4RkEsMHhGQiwweEZDLDB4 RkQsMHhGRSwweEZGLAo+ICt0aW1lczI1NigweEZGKQo+ICt9Owo+ICsKPiArZW51bSBEVkRWaWRl b1ZUU01QRUdWZXJzaW9uIHsKPiArICAgIERWRFZJREVPX1ZUU19NUEVHX1ZFUlNJT05fTVBFRzEg ICAgICAgICAgPSAwLAo+ICsgICAgRFZEVklERU9fVlRTX01QRUdfVkVSU0lPTl9NUEVHMiAgICAg ICAgICA9IDEKPiArfTsKPiArCj4gK2VudW0gRFZEVmlkZW9WVFNQaWN0dXJlRm9ybWF0IHsKPiAr ICAgIERWRFZJREVPX1ZUU19QSUNUVVJFX0ZPUk1BVF9OVFNDICAgICAgICAgPSAwLAo+ICsgICAg RFZEVklERU9fVlRTX1BJQ1RVUkVfRk9STUFUX1BBTCAgICAgICAgICA9IDEKPiArfTsKPiArCj4g K2VudW0gRFZEVmlkZW9WVFNQaWN0dXJlU2l6ZSB7Cj4gKyAgICBEVkRWSURFT19WVFNfUElDVFVS RV9TSVpFX0QxICAgICAgICAgICAgID0gMCwKPiArICAgIERWRFZJREVPX1ZUU19QSUNUVVJFX1NJ WkVfNENJRiAgICAgICAgICAgPSAxLAo+ICsgICAgRFZEVklERU9fVlRTX1BJQ1RVUkVfU0laRV9E MV9IQUxGICAgICAgICA9IDIsCj4gKyAgICBEVkRWSURFT19WVFNfUElDVFVSRV9TSVpFX0NJRiAg ICAgICAgICAgID0gMwo+ICt9Owo+ICsKPiArZW51bSBEVkRWaWRlb1ZUU1BpY3R1cmVEQVIgewo+ ICsgICAgRFZEVklERU9fVlRTX1BJQ1RVUkVfREFSXzRfMyAgICAgICAgICAgICA9IDAsCj4gKyAg ICBEVkRWSURFT19WVFNfUElDVFVSRV9EQVJfMTZfOSAgICAgICAgICAgID0gMwo+ICt9Owo+ICsK PiArZW51bSBEVkRWaWRlb1ZUU1Blcm1pdHRlZEZ1bGxzY3JlZW5EaXNwbGF5IHsKPiArICAgIERW RFZJREVPX1ZUU19TUFVfUEZEX0FOWSAgICAgICAgICAgICAgICAgPSAwLAo+ICsgICAgRFZEVklE RU9fVlRTX1NQVV9QRkRfUEFOU0NBTl9PTkxZICAgICAgICA9IDEsCj4gKyAgICBEVkRWSURFT19W VFNfU1BVX1BGRF9MRVRURVJCT1hfT05MWSAgICAgID0gMgo+ICt9Owo+ICsKPiArZW51bSBEVkRW aWRlb1ZUU0F1ZGlvRm9ybWF0IHsKPiArICAgIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfQUMz ICAgICAgICAgICAgPSAwLAo+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX0ZPUk1BVF9NUDEgICAg ICAgICAgICA9IDIsCj4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fRk9STUFUX01QMiAgICAgICAg ICAgID0gMywKPiArICAgIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfUENNICAgICAgICAgICAg PSA0LAo+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX0ZPUk1BVF9TRERTICAgICAgICAgICA9IDUs Cj4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fRk9STUFUX0RUUyAgICAgICAgICAgID0gNgo+ICt9 Owo+ICsKPiArZW51bSBGRkRWRFZpZGVvVlRTQXVkaW9TYW1wbGVSYXRlIHsKPiArICAgIERWRFZJ REVPX1ZUU19BVURJT19TQU1QTEVfUkFURV80OEsgICAgICAgPSAwLAo+ICsgICAgRFZEVklERU9f VlRTX0FVRElPX1NBTVBMRV9SQVRFXzk2SyAgICAgICA9IDEKPiArfTsKPiArCj4gK2VudW0gRkZE VkRWaWRlb1ZUU0F1ZGlvUXVhbnRpemF0aW9uIHsKPiArICAgIERWRFZJREVPX1ZUU19BVURJT19R VUFOVElaQVRJT05fMTYgICAgICAgPSAwLAo+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX1FVQU5U SVpBVElPTl8yMCAgICAgICA9IDEsCj4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fUVVBTlRJWkFU SU9OXzI0ICAgICAgID0gMgo+ICt9Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9EZW11 eENvbnRleHQgewo+ICsgICAgY29uc3QgQVZDbGFzcyAgICAgICAgICAgICAgICpjbGFzczsKPiAr Cj4gKyAgICAvKiBvcHRpb25zICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg b3B0X3RpdGxlOyAgICAgICAgICAgICAgICAgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQgdGl0bGUg bnVtYmVyICgxLWluZGV4ZWQpICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg b3B0X3B0dDsgICAgICAgICAgICAgICAgICAgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQgUFRUIG51 bWJlciAoMS1pbmRleGVkKSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9w dF9wZ2M7ICAgICAgICAgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIFBHQyBudW1i ZXIgKDEtaW5kZXhlZCkgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRf cGc7ICAgICAgICAgICAgICAgICAgICAgLyogdGhlCj4gdXNlci1wcm92aWRlZCBQRyBudW1iZXIg KDEtaW5kZXhlZCkgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfYW5n bGU7ICAgICAgICAgICAgICAgICAgLyogdGhlCj4gdXNlci1wcm92aWRlZCBhbmdsZSBudW1iZXIg KDEtaW5kZXhlZCkgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcmVn aW9uOyAgICAgICAgICAgICAgICAgLyogdGhlCj4gdXNlci1wcm92aWRlZCByZWdpb24gaWRlbnRp ZmljYXRpb24gZGlnaXQgKi8KPiArCj4gKyAgICAvKiBzdWJkZW11eCAqLwo+ICsgICAgY29uc3Qg QVZJbnB1dEZvcm1hdCAgICAgICAgICptcGVnX2ZtdDsgICAgICAgICAgICAgICAgICAvKiBpbm5l cgo+IE1QRUctUFMgKFZPQikgZGVtdXhlciAqLwo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICAgICAg ICAgICAgICptcGVnX2N0eDsgICAgICAgICAgICAgICAgICAvKiBjb250ZXh0Cj4gZm9yIGlubmVy IGRlbXV4ZXIgKi8KPiArICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAqbXBlZ19idWY7 ICAgICAgICAgICAgICAgICAgLyogYnVmZmVyIGZvcgo+IGlubmVyIGRlbXV4ZXIgKi8KPiArICAg IEZGSU9Db250ZXh0ICAgICAgICAgICAgICAgICBtcGVnX3BiOyAgICAgICAgICAgICAgICAgICAg LyogYnVmZmVyCj4gY29udGV4dCBmb3IgaW5uZXIgZGVtdXhlciAqLwo+ICsKPiArICAgIC8qIHZv bHVtZSAqLwo+ICsgICAgZHZkX3JlYWRlcl90ICAgICAgICAgICAgICAgICp2b2xfZHZkcmVhZDsg ICAgICAgICAgICAgICAvKiBoYW5kbGUgdG8KPiBsaWJkdmRyZWFkICovCj4gKyAgICBpZm9faGFu ZGxlX3QgICAgICAgICAgICAgICAgKnZvbF92bWdfaWZvOyAgICAgICAgICAgICAgIC8qIGhhbmRs ZSB0bwo+IHRoZSBWTUcgKFZJREVPX1RTLklGTykgKi8KPiArCj4gKyAgICAvKiBwbGF5YmFjayAq Lwo+ICsgICAgaWZvX2hhbmRsZV90ICAgICAgICAgICAgICAgICpwbGF5X3Z0c19pZm87ICAgICAg ICAgICAgICAvKiBoYW5kbGUgdG8KPiB0aGUgYWN0aXZlIFZUUyAoVlRTX25uX24uSUZPKSAqLwo+ ICsgICAgcGdjX3QgICAgICAgICAgICAgICAgICAgICAgICpwbGF5X3BnYzsgICAgICAgICAgICAg ICAgICAvKiBoYW5kbGUgdG8KPiB0aGUgYWN0aXZlIFBHQyAqLwo+ICsgICAgaW50ICAgICAgICAg ICAgICAgICAgICAgICAgIHBsYXlfdnRzbjsgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YK PiB0aGUgYWN0aXZlIFZUUyAodmlkZW8gdGl0bGUgc2V0KSAqLwo+ICsgICAgaW50ICAgICAgICAg ICAgICAgICAgICAgICAgIHBsYXlfcGdjbjsgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YK PiB0aGUgYWN0aXZlIFBHQyAocHJvZ3JhbSBjaGFpbikgKi8KPiArICAgIGR2ZG5hdl90ICAgICAg ICAgICAgICAgICAgICAqcGxheV9kdmRuYXY7ICAgICAgICAgICAgICAgLyogaGFuZGxlIHRvCj4g bGliZHZkbmF2ICovCj4gK30gRFZEVmlkZW9EZW11eENvbnRleHQ7Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkdmR2aWRlb19saWJkdmRyZWFkX2xvZyh2b2lkICpvcGFxdWUsIGR2ZF9sb2dnZXJfbGV2ZWxf dAo+IGxldmVsLAo+ICsgICAgICAgIGNvbnN0IGNoYXIgKm1zZywgdmFfbGlzdCBtc2dfdmEpCj4g K3sKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG9wYXF1ZTsKPiArICAgIGludCBsYXZ1X2xl dmVsOwo+ICsKPiArICAgIGNoYXIgbXNnX2J1ZltEVkRWSURFT19MSUJEVkRYX0xPR19CVUZGRVJf U0laRV0gPSB7MH07Cj4gKyAgICB2c25wcmludGYobXNnX2J1ZiwgRFZEVklERU9fTElCRFZEWF9M T0dfQlVGRkVSX1NJWkUsIG1zZywgbXNnX3ZhKTsKPiArCj4gKyAgICBzd2l0Y2ggKGxldmVsKSB7 Cj4gKyAgICAgICAgY2FzZSBEVkRfTE9HR0VSX0xFVkVMX0VSUk9SOgo+ICsgICAgICAgICAgICBs YXZ1X2xldmVsID0gQVZfTE9HX0VSUk9SOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAg ICBjYXNlIERWRF9MT0dHRVJfTEVWRUxfV0FSTjoKPiArICAgICAgICAgICAgbGF2dV9sZXZlbCA9 IEFWX0xPR19XQVJOSU5HOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIERW RF9MT0dHRVJfTEVWRUxfSU5GTzoKPiArICAgICAgICAgICAgbGF2dV9sZXZlbCA9IEFWX0xPR19J TkZPOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIERWRF9MT0dHRVJfTEVW RUxfREVCVUc6Cj4gKyAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgbGF2dV9sZXZlbCA9 IEFWX0xPR19ERUJVRzsKPiArICAgIH0KPiArCj4gKyAgICAvKiBsaWJkdmRyZWFkIG1lc3NhZ2Vz IGRvbid0IGhhdmUgbGluZSB0ZXJtaW5hdG9ycyAqLwo+ICsgICAgYXZfbG9nKHMsIGxhdnVfbGV2 ZWwsICJsaWJkdmRyZWFkOiAlc1xuIiwgbXNnX2J1Zik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGR2ZHZpZGVvX2xpYmR2ZG5hdl9sb2codm9pZCAqb3BhcXVlLCBkdmRuYXZfbG9nZ2VyX2xldmVs X3QKPiBsZXZlbCwKPiArICAgICAgICBjb25zdCBjaGFyICptc2csIHZhX2xpc3QgbXNnX3ZhKQo+ ICt7Cj4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBvcGFxdWU7Cj4gKyAgICBpbnQgbGF2dV9s ZXZlbDsKPiArCj4gKyAgICBjaGFyIG1zZ19idWZbRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVS X1NJWkVdID0gezB9Owo+ICsgICAgdnNucHJpbnRmKG1zZ19idWYsIERWRFZJREVPX0xJQkRWRFhf TE9HX0JVRkZFUl9TSVpFLCBtc2csIG1zZ192YSk7Cj4gKwo+ICsgICAgc3dpdGNoIChsZXZlbCkg ewo+ICsgICAgICAgIGNhc2UgRFZETkFWX0xPR0dFUl9MRVZFTF9FUlJPUjoKPiArICAgICAgICAg ICAgbGF2dV9sZXZlbCA9IEFWX0xPR19FUlJPUjsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAg ICAgICAgY2FzZSBEVkROQVZfTE9HR0VSX0xFVkVMX1dBUk46Cj4gKyAgICAgICAgICAgIGxhdnVf bGV2ZWwgPSBBVl9MT0dfV0FSTklORzsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAg Y2FzZSBEVkROQVZfTE9HR0VSX0xFVkVMX0lORk86Cj4gKyAgICAgICAgICAgIGxhdnVfbGV2ZWwg PSBBVl9MT0dfSU5GTzsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBEVkRO QVZfTE9HR0VSX0xFVkVMX0RFQlVHOgo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAg IGxhdnVfbGV2ZWwgPSBBVl9MT0dfREVCVUc7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogbGliZHZk bmF2IG1lc3NhZ2VzIGRvbid0IGhhdmUgbGluZSB0ZXJtaW5hdG9ycyAqLwo+ICsgICAgYXZfbG9n KHMsIGxhdnVfbGV2ZWwsICJsaWJkdmRuYXY6ICVzXG4iLCBtc2dfYnVmKTsKPiArfQo+ICsKPiAr c3RhdGljIGNoYXIgKmR2ZHZpZGVvX2xhbmdfY29kZV90b19pc282MzlfXzIoY29uc3QgdWludDE2 X3QgbGFuZ19jb2RlKQo+ICt7Cj4gKyAgICBjaGFyIGxhbmdfY29kZV9zdHJbM10gPSB7MH07Cj4g Kwo+ICsgICAgaWYgKGxhbmdfY29kZSAmJiBsYW5nX2NvZGUgIT0gMHhGRkZGKSB7Cj4gKyAgICAg ICAgbGFuZ19jb2RlX3N0clswXSA9IChsYW5nX2NvZGUgPj4gOCkgJiAweEZGOwo+ICsgICAgICAg IGxhbmdfY29kZV9zdHJbMV0gPSBsYW5nX2NvZGUgJiAweEZGOwo+ICsgICAgfQo+ICsKPiArICAg IHJldHVybiAoY2hhciAqKSBmZl9jb252ZXJ0X2xhbmdfdG8obGFuZ19jb2RlX3N0ciwKPiBBVl9M QU5HX0lTTzYzOV8yX0JJQkwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50NjRfdCBkdmR2aWRlb190 aW1lX3RvX21pbGxpcyhkdmRfdGltZV90ICp0aW1lKQo+ICt7Cj4gKyAgICBkb3VibGUgZnBzOwo+ ICsgICAgaW50NjRfdCBtczsKPiArCj4gKyAgICBpbnQ2NF90IHNlYyA9IChpbnQ2NF90KSAoQkNE MkQodGltZS0+aG91cikpICogNjAgKiA2MDsKPiArICAgIHNlYyArPSAoaW50NjRfdCkgKEJDRDJE KHRpbWUtPm1pbnV0ZSkpICogNjA7Cj4gKyAgICBzZWMgKz0gKGludDY0X3QpIChCQ0QyRCh0aW1l LT5zZWNvbmQpKTsKPiArCj4gKyAgICAvKiB0aGUgMiBoaWdoIGJpdHMgYXJlIHRoZSBmcmFtZSBy YXRlICovCj4gKyAgICBzd2l0Y2ggKCh0aW1lLT5mcmFtZV91ICYgMHhDMCkgPj4gNikKPiArICAg IHsKPiArICAgICAgICBjYXNlIDE6Cj4gKyAgICAgICAgICAgIGZwcyA9IDI1LjA7Cj4gKyAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgMzoKPiArICAgICAgICAgICAgZnBzID0gMjku OTc7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAg ICAgIGZwcyA9IDI1MDAuMDsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKyAgICBt cyA9IEJDRDJEKHRpbWUtPmZyYW1lX3UgJiAweDNGKSAqIDEwMDAuMCAvIGZwczsKPiArCj4gKyAg ICByZXR1cm4gKHNlYyAqIDEwMDApICsgbXM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlk ZW9fdm9sdW1lX2lzX3RpdGxlX3ZhbGlkX2luX2NvbnRleHQoQVZGb3JtYXRDb250ZXh0ICpzLAo+ ICsgICAgICAgIGludCB0aXRsZSkKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMg PSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgcmV0dXJuIHRpdGxlID49IDEKPiArICAgICAgICAg ICAgJiYgdGl0bGUgPD0gRFZEVklERU9fVElUTEVfTlVNQkVSX01BWAo+ICsgICAgICAgICAgICAm JiB0aXRsZSA8PSBjLT52b2xfdm1nX2lmby0+dHRfc3JwdC0+bnJfb2Zfc3JwdHMKPiArICAgICAg ICAgICAgJiYgYy0+dm9sX3ZtZ19pZm8tPnR0X3NycHQtPnRpdGxlW3RpdGxlIC0gMV0ubnJfb2Zf cHR0cyA+IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdm9sdW1lX2lzX3RpdGxl X3ZhbGlkX2luX3Z0cyh0aXRsZV9pbmZvX3QgdGl0bGVfaW5mbywKPiArICAgICAgICBpZm9faGFu ZGxlX3QgKnZ0c19pZm8pCj4gK3sKPiArICAgIHJldHVybiB0aXRsZV9pbmZvLnZ0c190dG4gPj0g MQo+ICsgICAgICAgICAgICAmJiB0aXRsZV9pbmZvLnZ0c190dG4gPD0gRFZEVklERU9fVFRfTlVN QkVSX01BWAo+ICsgICAgICAgICAgICAmJiB0aXRsZV9pbmZvLnZ0c190dG4gPD0gdnRzX2lmby0+ dnRzX3B0dF9zcnB0LT5ucl9vZl9zcnB0cwo+ICsgICAgICAgICAgICAmJiB2dHNfaWZvLT52dHNp X21hdC0+bnJfb2ZfdnRzX2F1ZGlvX3N0cmVhbXMKPiArICAgICAgICAgICAgICAgICAgICA8PSBE VkRWSURFT19WVFNfQVVESU9fU1RSRUFNU19NQVgKPiArICAgICAgICAgICAgJiYgdnRzX2lmby0+ dnRzaV9tYXQtPm5yX29mX3Z0c19zdWJwX3N0cmVhbXMKPiArICAgICAgICAgICAgICAgICAgICA8 PSBEVkRWSURFT19WVFNfU1VCUF9TVFJFQU1TX01BWDsKPiArfQo+ICsKPiArc3RhdGljIGludCBk dmR2aWRlb192b2x1bWVfaXNfYW5nbGVfdmFsaWRfaW5fdGl0bGUoaW50IGFuZ2xlLAo+ICsgICAg ICAgIHRpdGxlX2luZm9fdCB0aXRsZV9pbmZvKQo+ICt7Cj4gKyAgICByZXR1cm4gYW5nbGUgPj0g MQo+ICsgICAgICAgICAgICAmJiBhbmdsZSA8PSBEVkRWSURFT19BTkdMRV9OVU1CRVJfTUFYCj4g KyAgICAgICAgICAgICYmIGFuZ2xlIDw9IHRpdGxlX2luZm8ubnJfb2ZfYW5nbGVzOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3ZvbHVtZV9pc19wZ2NfdmFsaWRfYW5kX3NlcXVlbnRp YWwocGdjX3QgKnBnYykKPiArewo+ICsgICAgcmV0dXJuIHBnYwo+ICsgICAgICAgICAgICAmJiBw Z2MtPnByb2dyYW1fbWFwCj4gKyAgICAgICAgICAgICYmIHBnYy0+Y2VsbF9wbGF5YmFjayAhPSBO VUxMCj4gKyAgICAgICAgICAgICYmIHBnYy0+cGdfcGxheWJhY2tfbW9kZSA9PSAwCj4gKyAgICAg ICAgICAgICYmIHBnYy0+bnJfb2ZfcHJvZ3JhbXMgPiAwCj4gKyAgICAgICAgICAgICYmIHBnYy0+ bnJfb2ZfY2VsbHMgPiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3ZvbHVtZV9p c19wZ2NuX2luX3Z0cyhpbnQgcGdjbiwgaWZvX2hhbmRsZV90ICp2dHNfaWZvKQo+ICt7Cj4gKyAg ICByZXR1cm4gcGdjbiA+PSAxCj4gKyAgICAgICAgICAgICYmIHBnY24gPD0gRFZEVklERU9fUEdD X05VTUJFUl9NQVgKPiArICAgICAgICAgICAgJiYgcGdjbiA8PSB2dHNfaWZvLT52dHNfcGdjaXQt Pm5yX29mX3BnY2lfc3JwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3ZvbHVtZV9p c19wZ25faW5fcGdjKGludCBwZ24sIHBnY190ICpwZ2MpCj4gK3sKPiArICAgIHJldHVybiBwZ24g Pj0gMQo+ICsgICAgICAgICAgICAmJiBwZ24gPD0gRFZEVklERU9fUEdfTlVNQkVSX01BWAo+ICsg ICAgICAgICAgICAmJiBwZ24gPD0gcGdjLT5ucl9vZl9wcm9ncmFtczsKPiArfQo+ICsKPiArc3Rh dGljIGludCBkdmR2aWRlb192b2x1bWVfb3BlbihBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiAr ICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGR2 ZF9yZWFkZXJfdCAqZHZkcmVhZDsKPiArICAgIGlmb19oYW5kbGVfdCAqdm1nX2lmbzsKPiArCj4g KyAgICBkdmRfbG9nZ2VyX2NiIGR2ZHJlYWRfbG9nX2NiID0geyAucGZfbG9nID0gZHZkdmlkZW9f bGliZHZkcmVhZF9sb2cgfTsKPiArICAgIGR2ZHJlYWQgPSBEVkRPcGVuMihzLCAmZHZkcmVhZF9s b2dfY2IsIHMtPnVybCk7Cj4gKwo+ICsgICAgaWYgKCFkdmRyZWFkKSB7Cj4gKyAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIGxpYmR2ZHJlYWRcbiIp Owo+ICsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoISh2bWdfaWZvID0gaWZvT3BlbihkdmRyZWFkLCAwKSkpIHsKPiArICAgICAgICBE VkRDbG9zZShkdmRyZWFkKTsKPiArCj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwK PiArICAgICAgICAgICAgIlVuYWJsZSB0byBvcGVuIFZJREVPX1RTLklGTy4gIgo+ICsgICAgICAg ICAgICAiSW5wdXQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIERWRC1WaWRlbyBzdHJ1Y3R1cmUgIgo+ ICsgICAgICAgICAgICAib3IgaXMgbm90IGEgY29tcGxpYW50IFVERiBEVkQtVmlkZW8gaW1hZ2Uu XG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgYy0+dm9sX2R2ZHJlYWQgPSBkdmRyZWFkOwo+ICsgICAgYy0+dm9sX3ZtZ19p Zm8gPSB2bWdfaWZvOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkdmR2aWRlb192b2x1bWVfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBE VkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAoYy0+ dm9sX3ZtZ19pZm8pIHsKPiArICAgICAgICBpZm9DbG9zZShjLT52b2xfdm1nX2lmbyk7Cj4gKyAg ICAgICAgYy0+dm9sX3ZtZ19pZm8gPSBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChjLT52 b2xfZHZkcmVhZCkgewo+ICsgICAgICAgIERWRENsb3NlKGMtPnZvbF9kdmRyZWFkKTsKPiArICAg ICAgICBjLT52b2xfZHZkcmVhZCA9IE5VTEw7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZHZkdmlkZW9fdm9sdW1lX29wZW5fdnRzX2lmbyhBVkZvcm1hdENvbnRleHQgKnMsIGludCB2 dHNuLAo+ICsgICAgICAgIGlmb19oYW5kbGVfdCAqKnBfdnRzX2lmbykKPiArewo+ICsgICAgRFZE VmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaWZvX2hhbmRs ZV90ICp2dHNfaWZvOwo+ICsKPiArICAgIGlmICh2dHNuIDwgMQo+ICsgICAgICAgICAgICB8fCB2 dHNuID4gRFZEVklERU9fVlRTX05VTUJFUl9NQVgKPiArICAgICAgICAgICAgfHwgISh2dHNfaWZv ID0gaWZvT3BlbihjLT52b2xfZHZkcmVhZCwgdnRzbikpKSB7Cj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkg PCB2dHNfaWZvLT52dHNfY19hZHQtPm5yX29mX3ZvYnM7IGkrKykgewo+ICsgICAgICAgIGludCBz dGFydF9zZWN0b3IgPQo+IHZ0c19pZm8tPnZ0c19jX2FkdC0+Y2VsbF9hZHJfdGFibGVbaV0uc3Rh cnRfc2VjdG9yOwo+ICsgICAgICAgIGludCBlbmRfc2VjdG9yID0KPiB2dHNfaWZvLT52dHNfY19h ZHQtPmNlbGxfYWRyX3RhYmxlW2ldLmxhc3Rfc2VjdG9yOwo+ICsKPiArICAgICAgICBpZiAoKHN0 YXJ0X3NlY3RvciAmIDB4RkZGRkZGKSA9PSAweEZGRkZGRgo+ICsgICAgICAgICAgICAgICAgfHwg KGVuZF9zZWN0b3IgJiAweEZGRkZGRikgPT0gMHhGRkZGRkYKPiArICAgICAgICAgICAgICAgIHx8 IHN0YXJ0X3NlY3RvciA+PSBlbmRfc2VjdG9yKSB7Cj4gKyAgICAgICAgICAgIGlmb0Nsb3NlKHZ0 c19pZm8pOwo+ICsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19XQVJOSU5HLCAiVlRT IGhhcyBpbnZhbGlkIGNlbGwgYWRkcmVzcwo+IHRhYmxlXG4iKTsKPiArCj4gKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4g KyAgICAoKnBfdnRzX2lmbykgPSB2dHNfaWZvOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3BsYXliYWNrX29wZW4oQVZGb3JtYXRDb250ZXh0ICpz KQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiAr Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGlmb19oYW5kbGVfdCAqdnRzX2lmbzsKPiArICAg IGR2ZG5hdl9sb2dnZXJfY2IgZHZkbmF2X2xvZ19jYjsKPiArICAgIGR2ZG5hdl9zdGF0dXNfdCBk dmRuYXZfc3RhdHVzOwo+ICsgICAgZHZkbmF2X3QgKmR2ZG5hdjsKPiArCj4gKyAgICB0aXRsZV9p bmZvX3QgdGl0bGVfaW5mbzsKPiArICAgIGludCBwZ2NuOwo+ICsgICAgaW50IHBnbjsKPiArICAg IHBnY190ICpwZ2M7Cj4gKwo+ICsgICAgaW50MzJfdCBkaXNjX3JlZ2lvbl9tYXNrOwo+ICsgICAg aW50MzJfdCBwbGF5ZXJfcmVnaW9uX21hc2s7Cj4gKyAgICBpbnQgY2VsbF9zZWFyY2hfaGFzX3Z0 cyA9IDA7Cj4gKwo+ICsgICAgLyogaWYgdGhlIHRpdGxlIGlzIHZhbGlkLCBvcGVuIGl0cyBWVFMg SUZPICovCj4gKyAgICBpZiAoIWR2ZHZpZGVvX3ZvbHVtZV9pc190aXRsZV92YWxpZF9pbl9jb250 ZXh0KHMsIGMtPm9wdF90aXRsZSkpIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVGl0bGUgbm90IGZvdW5kIG9yIGludmFsaWRcbiIpOwo+ICsKPiArICAgICAgICByZXR1cm4g QVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOwo+ICsgICAgfQo+ICsKPiArICAgIHRpdGxlX2luZm8g PSBjLT52b2xfdm1nX2lmby0+dHRfc3JwdC0+dGl0bGVbYy0+b3B0X3RpdGxlIC0gMV07Cj4gKwo+ ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb192b2x1bWVfb3Blbl92dHNfaWZvKHMsCj4gKyAgICAg ICAgICAgIHRpdGxlX2luZm8udGl0bGVfc2V0X25yLCAmdnRzX2lmbykpICE9IDApIHsKPiArICAg ICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVGl0bGUgVlRTIGNvdWxkIG5vdCBiZSBvcGVu ZWRcbiIpOwo+ICsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIGlm ICghZHZkdmlkZW9fdm9sdW1lX2lzX3RpdGxlX3ZhbGlkX2luX3Z0cyh0aXRsZV9pbmZvLCB2dHNf aWZvKSkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJUaXRsZSBWVFMgaXMg aW52YWxpZFxuIik7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsgICAgfQo+ICsKPiArICAgIGlmICghZHZkdmlkZW9fdm9sdW1lX2lzX2FuZ2xlX3ZhbGlkX2lu X3RpdGxlKGMtPm9wdF9hbmdsZSwKPiB0aXRsZV9pbmZvKSkgewo+ICsgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJBbmdsZSBub3QgZm91bmQgb3IgaW52YWxpZFxuIik7Cj4gKwo+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgfQo+ICsKPiArICAgIC8q IGRldGVybWluZSBvdXIgUEdDIGFuZCBQRyAocGxheWJhY2sgY29vcmRpbmF0ZXMpICovCj4gKyAg ICBpZiAoYy0+b3B0X3BnYyA+IDAgJiYgYy0+b3B0X3BnID4gMCkgewo+ICsgICAgICAgIGlmIChj LT5vcHRfcHR0ID4gMCkgewo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX1dBUk5JTkcs Cj4gKyAgICAgICAgICAgICAgICAgICAgIlBUVCBvcHRpb24gaWdub3JlZCBhcyBQR0MgYW5kIFBH IGFyZSBwcm92aWRlZFxuIik7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBwZ2NuID0gYy0+ b3B0X3BnYzsKPiArICAgICAgICBwZ24gPSBjLT5vcHRfcGc7Cj4gKyAgICB9IGVsc2Ugewo+ICsg ICAgICAgIGlmIChjLT5vcHRfcHR0ID4gdGl0bGVfaW5mby5ucl9vZl9wdHRzKSB7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJQVFQgbm90IGZvdW5kXG4iKTsKPiArCj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1NUUkVBTV9OT1RfRk9VTkQ7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICBwZ2NuID0gdnRzX2lmby0+dnRzX3B0dF9zcnB0LT50aXRsZVt0aXRs ZV9pbmZvLnZ0c190dG4gLQo+IDFdLnB0dFtjLT5vcHRfcHR0IC0gMV0ucGdjbjsKPiArICAgICAg ICBwZ24gPSB2dHNfaWZvLT52dHNfcHR0X3NycHQtPnRpdGxlW3RpdGxlX2luZm8udnRzX3R0biAt Cj4gMV0ucHR0W2MtPm9wdF9wdHQgLSAxXS5wZ247Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCFk dmR2aWRlb192b2x1bWVfaXNfcGdjbl9pbl92dHMocGdjbiwgdnRzX2lmbykpIHsKPiArICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiUEdDIG5vdCBmb3VuZFxuIik7Cj4gKwo+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SX1NUUkVBTV9OT1RfRk9VTkQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAg cGdjID0gdnRzX2lmby0+dnRzX3BnY2l0LT5wZ2NpX3NycFtwZ2NuIC0gMV0ucGdjOwo+ICsKPiAr ICAgIGlmICghZHZkdmlkZW9fdm9sdW1lX2lzX3BnY192YWxpZF9hbmRfc2VxdWVudGlhbChwZ2Mp KSB7Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlBHQyBub3QgdmFsaWRcbiIp Owo+ICsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoIWR2ZHZpZGVvX3ZvbHVtZV9pc19wZ25faW5fcGdjKHBnbiwgcGdjKSkgewo+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJQRyBub3QgZm91bmRcbiIpOwo+ICsK PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOwo+ICsgICAgfQo+ICsK PiArICAgIC8qIHNldCB1cCBsaWJkdmRuYXYgKi8KPiArICAgIGR2ZG5hdl9sb2dfY2IgPSAoZHZk bmF2X2xvZ2dlcl9jYikgeyAucGZfbG9nID0gZHZkdmlkZW9fbGliZHZkbmF2X2xvZwo+IH07Cj4g KyAgICBkdmRuYXZfc3RhdHVzID0gZHZkbmF2X29wZW4yKCZkdmRuYXYsIE5VTEwsICZkdmRuYXZf bG9nX2NiLCBzLT51cmwpOwo+ICsKPiArICAgIGlmICghZHZkbmF2KSB7Cj4gKyAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIGxpYmR2ZG5hdlxuIik7 Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiAr ICAgIGlmIChkdmRuYXZfc3RhdHVzICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPiArICAgICAgICBn b3RvIGVuZF9zZWFyY2hfZXJyb3JfZHZkbmF2Owo+ICsgICAgfQo+ICsKPiArICAgIGlmIChkdmRu YXZfc2V0X3JlYWRhaGVhZF9mbGFnKGR2ZG5hdiwgMCkgIT0gRFZETkFWX1NUQVRVU19PSykgewo+ ICsgICAgICAgIGdvdG8gZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgaWYgKGR2ZG5hdl9zZXRfUEdDX3Bvc2l0aW9uaW5nX2ZsYWcoZHZkbmF2LCAxKSAhPSBEVkRO QVZfU1RBVFVTX09LKSB7Cj4gKyAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vycm9yX2R2ZG5hdjsK PiArICAgIH0KPiArCj4gKyAgICBpZiAoZHZkbmF2X2dldF9yZWdpb25fbWFzayhkdmRuYXYsICZk aXNjX3JlZ2lvbl9tYXNrKSAhPQo+IERWRE5BVl9TVEFUVVNfT0spIHsKPiArICAgICAgICBnb3Rv IGVuZF9zZWFyY2hfZXJyb3JfZHZkbmF2Owo+ICsgICAgfQo+ICsKPiArICAgIGlmIChjLT5vcHRf cmVnaW9uID4gMCkgewo+ICsgICAgICAgIHBsYXllcl9yZWdpb25fbWFzayA9ICgxIDw8IChjLT5v cHRfcmVnaW9uIC0gMSkpOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBwbGF5ZXJfcmVnaW9u X21hc2sgPSBkaXNjX3JlZ2lvbl9tYXNrOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChkdmRuYXZf c2V0X3JlZ2lvbl9tYXNrKGR2ZG5hdiwgcGxheWVyX3JlZ2lvbl9tYXNrKSAhPQo+IERWRE5BVl9T VEFUVVNfT0spIHsKPiArICAgICAgICBnb3RvIGVuZF9zZWFyY2hfZXJyb3JfZHZkbmF2Owo+ICsg ICAgfQo+ICsKPiArICAgIGlmIChkdmRuYXZfcHJvZ3JhbV9wbGF5KGR2ZG5hdiwgYy0+b3B0X3Rp dGxlLCBwZ2NuLCBwZ24pICE9Cj4gRFZETkFWX1NUQVRVU19PSykgewo+ICsgICAgICAgIGdvdG8g ZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGR2ZG5hdl9h bmdsZV9jaGFuZ2UoZHZkbmF2LCBjLT5vcHRfYW5nbGUpICE9IERWRE5BVl9TVEFUVVNfT0spIHsK PiArICAgICAgICBnb3RvIGVuZF9zZWFyY2hfZXJyb3JfZHZkbmF2Owo+ICsgICAgfQo+ICsKPiAr ICAgIC8qIGxvY2sgb24gdG8gdGl0bGUncyBWVFMgYW5kIGNob3NlbiBQR0MvUEdOIGNvb3JkaW5h dGVzICovCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IERWRFZJREVPX1BTX01BWF9TRUFSQ0hf QkxPQ0tTOyBpKyspIHsKPiArICAgICAgICBpbnQgbmF2X2V2ZW50Owo+ICsgICAgICAgIGludCBu YXZfbGVuOwo+ICsgICAgICAgIGR2ZG5hdl92dHNfY2hhbmdlX2V2ZW50X3QgKnZ0c19ldmVudDsK PiArICAgICAgICB1aW50OF90IG5hdl9idWZbRFZEVklERU9fQkxPQ0tfU0laRV0gPSB7MH07Cj4g Kwo+ICsgICAgICAgIGlmIChmZl9jaGVja19pbnRlcnJ1cHQoJnMtPmludGVycnVwdF9jYWxsYmFj aykpIHsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhJVDsKPiArICAgICAgICB9Cj4g Kwo+ICsgICAgICAgIGlmIChkdmRuYXZfZ2V0X25leHRfYmxvY2soZHZkbmF2LCBuYXZfYnVmLCAm bmF2X2V2ZW50LCAmbmF2X2xlbikKPiArICAgICAgICAgICAgICAgICE9IERWRE5BVl9TVEFUVVNf T0spIHsKPiArICAgICAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vycm9yX2R2ZG5hdjsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChuYXZfbGVuID4gRFZEVklERU9fQkxPQ0tfU0laRSkg ewo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBibG9jayAo dG9vIGJpZylcbiIpOwo+ICsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ ICsKPiArICAgICAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vycm9yOwo+ICsgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19UUkFDRSwgIm5hdiBldmVudD0lZCBsZW49JWRc biIsIG5hdl9ldmVudCwKPiBuYXZfbGVuKTsKPiArCj4gKyAgICAgICAgc3dpdGNoIChuYXZfZXZl bnQpIHsKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfVlRTX0NIQU5HRToKPiArICAgICAgICAg ICAgICAgIHZ0c19ldmVudCA9IChkdmRuYXZfdnRzX2NoYW5nZV9ldmVudF90ICopIG5hdl9idWY7 Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgKGNlbGxfc2VhcmNoX2hhc192dHMpIHsKPiArICAg ICAgICAgICAgICAgICAgICBpZiAodnRzX2V2ZW50LT5uZXdfdnRzTiAhPSB0aXRsZV9pbmZvLnRp dGxlX3NldF9ucgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdnRzX2V2ZW50LT5u ZXdfZG9tYWluICE9Cj4gRFZEX0RPTUFJTl9WVFNUaXRsZSkgewo+ICsgICAgICAgICAgICAgICAg ICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5leHBlY3RlZCBWVFMKPiBjaGFuZ2Vc biIpOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlBVVF9D SEFOR0VEOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vy cm9yOwo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiAodnRz X2V2ZW50LT5uZXdfdnRzTiA9PSB0aXRsZV9pbmZvLnRpdGxlX3NldF9ucgo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAmJiB2dHNfZXZlbnQtPm5ld19kb21haW4gPT0gRFZEX0RPTUFJTl9WVFNU aXRsZSkgewo+ICsgICAgICAgICAgICAgICAgICAgIGNlbGxfc2VhcmNoX2hhc192dHMgPSAxOwo+ ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsg ICAgICAgICAgICBjYXNlIERWRE5BVl9DRUxMX0NIQU5HRToKPiArICAgICAgICAgICAgICAgIC8v IGlmIHdlIG5lZWQgbW9yZSBpbmZvIGFib3V0IHRoZSBjZWxsOgo+ICsgICAgICAgICAgICAgICAg Ly8gZHZkbmF2X2NlbGxfY2hhbmdlX2V2ZW50X3QgKmV2ZW50X2RhdGEgPQo+ICsgICAgICAgICAg ICAgICAgLy8gICAgIChkdmRuYXZfY2VsbF9jaGFuZ2VfZXZlbnRfdCAqKSBuYXZfYnVmOwo+ICsg ICAgICAgICAgICAgICAgaW50IGNoZWNrX3RpdGxlOwo+ICsgICAgICAgICAgICAgICAgaW50IGNo ZWNrX3BnY247Cj4gKyAgICAgICAgICAgICAgICBpbnQgY2hlY2tfcGduOwo+ICsKPiArICAgICAg ICAgICAgICAgIGlmICghY2VsbF9zZWFyY2hfaGFzX3Z0cykgewo+ICsgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAg IGR2ZG5hdl9jdXJyZW50X3RpdGxlX3Byb2dyYW0oZHZkbmF2LCAmY2hlY2tfdGl0bGUsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVja19wZ2NuLCAmY2hl Y2tfcGduKTsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tfdGl0bGUgPT0gYy0+b3B0 X3RpdGxlICYmIGNoZWNrX3BnY24gPT0gcGdjbgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAm JiBjaGVja19wZ24gPT0gcGduICYmCj4gZHZkbmF2X2lzX2RvbWFpbl92dHMoZHZkbmF2KSkgewo+ ICsgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kX3JlYWR5Owo+ICsgICAgICAgICAgICAgICAg fQo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICBjYXNlIERW RE5BVl9TVElMTF9GUkFNRToKPiArICAgICAgICAgICAgICAgIGR2ZG5hdl9zdGlsbF9za2lwKGR2 ZG5hdik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgIGNh c2UgRFZETkFWX1dBSVQ6Cj4gKyAgICAgICAgICAgICAgICBkdmRuYXZfd2FpdF9za2lwKGR2ZG5h dik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgIGNhc2Ug RFZETkFWX1NUT1A6Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOUFVUX0NIQU5H RUQ7Cj4gKwo+ICsgICAgICAgICAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vycm9yOwo+ICsgICAg ICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAg fQo+ICsgICAgfQo+ICsKPiArZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY6Cj4gKyAgICByZXQgPSBB VkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgImxpYmR2ZG5h djogJXNcbiIsCj4gZHZkbmF2X2Vycl90b19zdHJpbmcoZHZkbmF2KSk7Cj4gKyAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiRXJyb3Igc3RhcnRpbmcgcGxheWJhY2tcbiIpOwo+ICsKPiArZW5k X3NlYXJjaF9lcnJvcjoKPiArICAgIGR2ZG5hdl9jbG9zZShkdmRuYXYpOwo+ICsgICAgaWZvQ2xv c2UodnRzX2lmbyk7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArCj4gK2VuZF9yZWFkeToKPiAr ICAgIC8qIHVwZGF0ZSB0aGUgY29udGV4dCAqLwo+ICsgICAgYy0+cGxheV92dHNfaWZvID0gdnRz X2lmbzsKPiArICAgIGMtPnBsYXlfcGdjID0gcGdjOwo+ICsgICAgYy0+cGxheV92dHNuID0gdGl0 bGVfaW5mby50aXRsZV9zZXRfbnI7Cj4gKyAgICBjLT5wbGF5X3BnY24gPSBwZ2NuOwo+ICsgICAg Yy0+cGxheV9kdmRuYXYgPSBkdmRuYXY7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGR2ZHZpZGVvX3BsYXliYWNrX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykK PiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ ICsgICAgaWYgKGMtPnBsYXlfZHZkbmF2KSB7Cj4gKyAgICAgICAgZHZkbmF2X2Nsb3NlKGMtPnBs YXlfZHZkbmF2KTsKPiArICAgICAgICBjLT5wbGF5X2R2ZG5hdiA9IE5VTEw7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYgKGMtPnBsYXlfdnRzX2lmbykgewo+ICsgICAgICAgIGlmb0Nsb3NlKGMtPnBs YXlfdnRzX2lmbyk7Cj4gKyAgICAgICAgYy0+cGxheV92dHNfaWZvID0gTlVMTDsKPiArICAgIH0K PiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb192aWRlb19zdHJlYW1fYW5hbHl6ZSh2aWRl b19hdHRyX3QgdmlkZW9fYXR0ciwKPiArICAgICAgICBlbnVtIEFWQ29kZWNJRCAqcF9jb2RlY19p ZCwgQVZSYXRpb25hbCAqcF9mcmFtZXJhdGUsCj4gKyAgICAgICAgaW50ICpwX2hlaWdodCwgaW50 ICpwX3dpZHRoKQo+ICt7Cj4gKyAgICBlbnVtIEFWQ29kZWNJRCBjb2RlY19pZCA9IEFWX0NPREVD X0lEX05PTkU7Cj4gKyAgICBBVlJhdGlvbmFsIGZyYW1lcmF0ZSA9IFpFUk9fUTsKPiArICAgIGlu dCBoZWlnaHQgPSAwOwo+ICsgICAgaW50IHdpZHRoID0gMDsKPiArCj4gKyAgICBzd2l0Y2ggKHZp ZGVvX2F0dHIubXBlZ192ZXJzaW9uKSB7Cj4gKyAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfTVBF R19WRVJTSU9OX01QRUcxOgo+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lEX01Q RUcxVklERU87Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgRFZEVklERU9f VlRTX01QRUdfVkVSU0lPTl9NUEVHMjoKPiArICAgICAgICAgICAgY29kZWNfaWQgPSBBVl9DT0RF Q19JRF9NUEVHMlZJREVPOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAg ICBzd2l0Y2ggKHZpZGVvX2F0dHIudmlkZW9fZm9ybWF0KSB7Cj4gKyAgICAgICAgY2FzZSBEVkRW SURFT19WVFNfUElDVFVSRV9GT1JNQVRfTlRTQzoKPiArICAgICAgICAgICAgZnJhbWVyYXRlID0g RFZEVklERU9fTlRTQ19GUkFNRVJBVEVfUTsKPiArICAgICAgICAgICAgaGVpZ2h0ID0gRFZEVklE RU9fTlRTQ19IRUlHSFQ7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgRFZE VklERU9fVlRTX1BJQ1RVUkVfRk9STUFUX1BBTDoKPiArICAgICAgICAgICAgZnJhbWVyYXRlID0g RFZEVklERU9fUEFMX0ZSQU1FUkFURV9ROwo+ICsgICAgICAgICAgICBoZWlnaHQgPSBEVkRWSURF T19QQUxfSEVJR0hUOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAgICBp ZiAoaGVpZ2h0ID4gMCkgewo+ICsgICAgICAgIHN3aXRjaCAodmlkZW9fYXR0ci5waWN0dXJlX3Np emUpIHsKPiArICAgICAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfUElDVFVSRV9TSVpFX0QxOgo+ ICsgICAgICAgICAgICAgICAgd2lkdGggPSBEVkRWSURFT19EMV9XSURUSDsKPiArICAgICAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBjYXNlIERWRFZJREVPX1ZUU19QSUNUVVJFX1NJ WkVfNENJRjoKPiArICAgICAgICAgICAgICAgIHdpZHRoID0gRFZEVklERU9fNENJRl9XSURUSDsK PiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBjYXNlIERWRFZJREVPX1ZU U19QSUNUVVJFX1NJWkVfRDFfSEFMRjoKPiArICAgICAgICAgICAgICAgIHdpZHRoID0gRFZEVklE RU9fRDFfSEFMRl9XSURUSDsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAg ICBjYXNlIERWRFZJREVPX1ZUU19QSUNUVVJFX1NJWkVfQ0lGOgo+ICsgICAgICAgICAgICAgICAg d2lkdGggPSBEVkRWSURFT19DSUZfV0lEVEg7Cj4gKyAgICAgICAgICAgICAgICBoZWlnaHQgLz0g MjsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4g KyAgICBpZiAoY29kZWNfaWQgPT0gQVZfQ09ERUNfSURfTk9ORSB8fCBhdl9jbXBfcShmcmFtZXJh dGUsIFpFUk9fUSkgPT0gMAo+ICsgICAgICAgICAgICB8fCB3aWR0aCA8IDEgfHwgaGVpZ2h0IDwg MSkgewo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgfQo+ICsK PiArICAgICgqcF9jb2RlY19pZCkgPSBjb2RlY19pZDsKPiArICAgICgqcF9mcmFtZXJhdGUpID0g ZnJhbWVyYXRlOwo+ICsgICAgKCpwX2hlaWdodCkgPSBoZWlnaHQ7Cj4gKyAgICAoKnBfd2lkdGgp ID0gd2lkdGg7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZk dmlkZW9fdmlkZW9fc3RyZWFtX3RvX2F2c3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqcywKPiArICAg ICAgICBlbnVtIEFWQ29kZWNJRCBjb2RlY19pZCwgQVZSYXRpb25hbCBmcmFtZXJhdGUsCj4gKyAg ICAgICAgaW50IGhlaWdodCwgaW50IHdpZHRoLAo+ICsgICAgICAgIGVudW0gQVZTdHJlYW1QYXJz ZVR5cGUgbmVlZF9wYXJzaW5nKQo+ICt7Cj4gKyAgICBBVlN0cmVhbSAqc3Q7Cj4gKyAgICBGRlN0 cmVhbSAqc3RpOwo+ICsKPiArICAgIHN0ID0gYXZmb3JtYXRfbmV3X3N0cmVhbShzLCBOVUxMKTsK PiArICAgIGlmICghc3QpIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsg ICAgfQo+ICsKPiArICAgIHN0LT5pZCA9IERWRFZJREVPX1NUQVJUQ09ERV9WSURFTzsKPiArICAg IHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKPiArICAgIHN0 LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBjb2RlY19pZDsKPiArICAgIHN0LT5jb2RlY3Bhci0+d2lk dGggPSB3aWR0aDsKPiArICAgIHN0LT5jb2RlY3Bhci0+aGVpZ2h0ID0gaGVpZ2h0Owo+ICsgICAg c3QtPmNvZGVjcGFyLT5mb3JtYXQgPSBEVkRWSURFT19QSVhFTF9GT1JNQVQ7Cj4gKwo+ICsgICAg c3QtPmNvZGVjcGFyLT5mcmFtZXJhdGUgPSBmcmFtZXJhdGU7Cj4gKyNpZiBGRl9BUElfUl9GUkFN RV9SQVRFCj4gKyAgICBzdC0+cl9mcmFtZV9yYXRlID0gZnJhbWVyYXRlOwo+ICsjZW5kaWYKPiAr ICAgIHN0LT5hdmdfZnJhbWVfcmF0ZSA9IGZyYW1lcmF0ZTsKPiArCj4gKyAgICBhdnByaXZfc2V0 X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNfV1JBUF9CSVRTLAo+ICsgICAgICAgIERWRFZJREVP X1RJTUVfQkFTRV9RLm51bSwgRFZEVklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiArCj4gKyAgICBz dGkgPSBmZnN0cmVhbShzdCk7Cj4gKyAgICBzdGktPnJlcXVlc3RfcHJvYmUgPSAwOwo+ICsgICAg c3RpLT5uZWVkX3BhcnNpbmcgPSBuZWVkX3BhcnNpbmc7Cj4gKyAgICBzdGktPmF2Y3R4LT5mcmFt ZXJhdGUgPSBmcmFtZXJhdGU7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZHZkdmlkZW9fdmlkZW9fc3RyZWFtX3JlZ2lzdGVyKEFWRm9ybWF0Q29udGV4dCAqcykK PiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ ICsgICAgZW51bSBBVkNvZGVjSUQgY29kZWNfaWQ7Cj4gKyAgICBBVlJhdGlvbmFsIGZyYW1lcmF0 ZTsKPiArICAgIGludCBoZWlnaHQ7Cj4gKyAgICBpbnQgd2lkdGg7Cj4gKwo+ICsgICAgaW50IHJl dDsKPiArCj4gKyAgICBpZiAoKHJldCA9Cj4gZHZkdmlkZW9fdmlkZW9fc3RyZWFtX2FuYWx5emUo Yy0+cGxheV92dHNfaWZvLT52dHNpX21hdC0+dnRzX3ZpZGVvX2F0dHIsCj4gJmNvZGVjX2lkLAo+ ICsgICAgICAgICAgICAmZnJhbWVyYXRlLCAmaGVpZ2h0LCAmd2lkdGgpKSAhPSAwKSB7Cj4gKyAg ICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgdmlkZW8gcGFyYW1ldGVycyBp biBWVFMgSUZPXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3ZpZGVvX3N0cmVhbV90b19hdnN0cmVhbShjLT5tcGVn X2N0eCwgY29kZWNfaWQsCj4gKyAgICAgICAgICAgIGZyYW1lcmF0ZSwgaGVpZ2h0LCB3aWR0aCwg QVZTVFJFQU1fUEFSU0VfRlVMTCkpICE9IDApIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHZpZGVvIHN0cmVhbQo+IChzdWJkZW11eClcbiIp Owo+ICsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIGlmICgocmV0 ID0gZHZkdmlkZW9fdmlkZW9fc3RyZWFtX3RvX2F2c3RyZWFtKHMsIGNvZGVjX2lkLAo+ICsgICAg ICAgICAgICBmcmFtZXJhdGUsIGhlaWdodCwgd2lkdGgsIEFWU1RSRUFNX1BBUlNFX05PTkUpKSAh PSAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxv Y2F0ZSB2aWRlbyBzdHJlYW1cbiIpOwo+ICsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAg fQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX2F1 ZGlvX3N0cmVhbV9hbmFseXplKGF1ZGlvX2F0dHJfdCBhdWRpb19hdHRyLAo+ICsgICAgICAgIHVp bnQxNl90IGF1ZGlvX2NvbnRyb2wsIGVudW0gQVZDb2RlY0lEICpwX2NvZGVjX2lkLCBpbnQKPiAq cF9zdGFydGNvZGUsCj4gKyAgICAgICAgaW50ICpwX3NhbXBsZV9yYXRlLCBpbnQgKnBfc2FtcGxl X2JpdHMsCj4gKyAgICAgICAgaW50ICpwX25iX2NoYW5uZWxzLCBjaGFyICoqbGFuZ19pc282Mzlf XzIpCj4gK3sKPiArICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfTk9O RTsKPiArICAgIGludCBzdGFydGNvZGUgPSAwOwo+ICsgICAgaW50IHNhbXBsZV9yYXRlID0gMDsK PiArICAgIGludCBzYW1wbGVfYml0cyA9IDA7Cj4gKyAgICBpbnQgbmJfY2hhbm5lbHMgPSAwOwo+ ICsKPiArICAgIGludCBwb3NpdGlvbiA9IChhdWRpb19jb250cm9sICYgMHg3RjAwKSA+PiA4Owo+ ICsKPiArICAgIHN3aXRjaCAoYXVkaW9fYXR0ci5hdWRpb19mb3JtYXQpIHsKPiArICAgICAgICBj YXNlIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfQUMzOgo+ICsgICAgICAgICAgICBjb2RlY19p ZCA9IEFWX0NPREVDX0lEX0FDMzsKPiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsK PiArICAgICAgICAgICAgc3RhcnRjb2RlID0gRFZEVklERU9fU1RBUlRDT0RFX09GRlNFVF9BVURJ T19BQzMgKyBwb3NpdGlvbjsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBE VkRWSURFT19WVFNfQVVESU9fRk9STUFUX01QMToKPiArICAgICAgICAgICAgY29kZWNfaWQgPSBB Vl9DT0RFQ19JRF9NUDE7Cj4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gKyAg ICAgICAgICAgIHN0YXJ0Y29kZSA9IERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9fTVAx ICsgcG9zaXRpb247Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgRFZEVklE RU9fVlRTX0FVRElPX0ZPUk1BVF9NUDI6Cj4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09E RUNfSURfTVAyOwo+ICsgICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ICsgICAgICAg ICAgICBzdGFydGNvZGUgPSBEVkRWSURFT19TVEFSVENPREVfT0ZGU0VUX0FVRElPX01QMiArIHBv c2l0aW9uOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIERWRFZJREVPX1ZU U19BVURJT19GT1JNQVRfUENNOgo+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lE X1BDTV9EVkQ7Cj4gKwo+ICsgICAgICAgICAgICBzd2l0Y2ggKGF1ZGlvX2F0dHIuc2FtcGxlX2Zy ZXF1ZW5jeSkgewo+ICsgICAgICAgICAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfQVVESU9fU0FN UExFX1JBVEVfNDhLOgo+ICsgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7 Cj4gKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgICBjYXNlIERW RFZJREVPX1ZUU19BVURJT19TQU1QTEVfUkFURV85Nks6Cj4gKyAgICAgICAgICAgICAgICAgICAg c2FtcGxlX3JhdGUgPSA5NjAwMDsKPiArICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArICAg ICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgc3dpdGNoIChhdWRpb19hdHRyLnF1YW50aXph dGlvbikgewo+ICsgICAgICAgICAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfQVVESU9fUVVBTlRJ WkFUSU9OXzE2Ogo+ICsgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9iaXRzID0gMTY7Cj4gKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgICBjYXNlIERWRFZJREVP X1ZUU19BVURJT19RVUFOVElaQVRJT05fMjA6Cj4gKyAgICAgICAgICAgICAgICAgICAgc2FtcGxl X2JpdHMgPSAyMDsKPiArICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAg ICAgIGNhc2UgRFZEVklERU9fVlRTX0FVRElPX1FVQU5USVpBVElPTl8yNDoKPiArICAgICAgICAg ICAgICAgICAgICBzYW1wbGVfYml0cyA9IDI0Owo+ICsgICAgICAgICAgICAgICAgICAgIGJyZWFr Owo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBzdGFydGNvZGUgPSBEVkRWSURF T19TVEFSVENPREVfT0ZGU0VUX0FVRElPX1BDTSArIHBvc2l0aW9uOwo+ICsgICAgICAgICAgICBi cmVhazsKPiArICAgICAgICBjYXNlIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfRFRTOgo+ICsg ICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lEX0RUUzsKPiArICAgICAgICAgICAgc2Ft cGxlX3JhdGUgPSA0ODAwMDsKPiArICAgICAgICAgICAgc3RhcnRjb2RlID0gRFZEVklERU9fU1RB UlRDT0RFX09GRlNFVF9BVURJT19EVFMgKyBwb3NpdGlvbjsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgbmJfY2hhbm5lbHMgPSBhdWRpb19hdHRyLmNoYW5uZWxzICsg MTsKPiArCj4gKyAgICBpZiAoY29kZWNfaWQgPT0gQVZfQ09ERUNfSURfTk9ORSB8fCBzdGFydGNv ZGUgPT0gMAo+ICsgICAgICAgICAgICB8fCBzYW1wbGVfcmF0ZSA9PSAwIHx8IG5iX2NoYW5uZWxz ID09IDApIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0K PiArCj4gKyAgICAoKnBfY29kZWNfaWQpID0gY29kZWNfaWQ7Cj4gKyAgICAoKnBfc3RhcnRjb2Rl KSA9IHN0YXJ0Y29kZTsKPiArICAgICgqcF9zYW1wbGVfcmF0ZSkgPSBzYW1wbGVfcmF0ZTsKPiAr ICAgICgqcF9zYW1wbGVfYml0cykgPSBzYW1wbGVfYml0czsKPiArICAgICgqcF9uYl9jaGFubmVs cykgPSBuYl9jaGFubmVsczsKPiArICAgICgqbGFuZ19pc282MzlfXzIpID0KPiBkdmR2aWRlb19s YW5nX2NvZGVfdG9faXNvNjM5X18yKGF1ZGlvX2F0dHIubGFuZ19jb2RlKTsKPiArCj4gKyAgICBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19hdWRpb19zdHJlYW1fdG9f YXZzdHJlYW0oQVZGb3JtYXRDb250ZXh0ICpzLAo+ICsgICAgICAgIGVudW0gQVZDb2RlY0lEIGNv ZGVjX2lkLCBpbnQgc3RhcnRjb2RlLCBpbnQgc2FtcGxlX3JhdGUsCj4gKyAgICAgICAgaW50IHNh bXBsZV9iaXRzLCBpbnQgbmJfY2hhbm5lbHMsIGNoYXIgKmxhbmdfaXNvNjM5X18yLAo+ICsgICAg ICAgIGVudW0gQVZTdHJlYW1QYXJzZVR5cGUgbmVlZF9wYXJzaW5nKQo+ICt7Cj4gKyAgICBBVlN0 cmVhbSAqc3Q7Cj4gKyAgICBGRlN0cmVhbSAqc3RpOwo+ICsKPiArICAgIHN0ID0gYXZmb3JtYXRf bmV3X3N0cmVhbShzLCBOVUxMKTsKPiArICAgIGlmICghc3QpIHsKPiArICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOwo+ICsgICAgfQo+ICsKPiArICAgIHN0LT5pZCA9IHN0YXJ0Y29kZTsK PiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9BVURJTzsKPiAr ICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBjb2RlY19pZDsKPiArICAgIHN0LT5jb2RlY3Bh ci0+c2FtcGxlX3JhdGUgPSBzYW1wbGVfcmF0ZTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y2hfbGF5 b3V0Lm5iX2NoYW5uZWxzID0gbmJfY2hhbm5lbHM7Cj4gKwo+ICsgICAgaWYgKHNhbXBsZV9iaXRz ID4gMCkgewo+ICsgICAgICAgIHN0LT5jb2RlY3Bhci0+Zm9ybWF0ID0gc2FtcGxlX2JpdHMgPT0g MTYgPwo+ICsgICAgICAgICAgICAgICAgQVZfU0FNUExFX0ZNVF9TMTYKPiArICAgICAgICAgICAg ICAgIDogQVZfU0FNUExFX0ZNVF9TMzI7Cj4gKyAgICAgICAgc3QtPmNvZGVjcGFyLT5iaXRzX3Bl cl9jb2RlZF9zYW1wbGUgPSBzYW1wbGVfYml0czsKPiArICAgICAgICBzdC0+Y29kZWNwYXItPmJp dHNfcGVyX3Jhd19zYW1wbGUgPSBzYW1wbGVfYml0czsKPiArICAgIH0KPiArCj4gKyAgICBpZiAo bGFuZ19pc282MzlfXzIpIHsKPiArICAgICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAi bGFuZ3VhZ2UiLCBsYW5nX2lzbzYzOV9fMiwgMCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZwcml2 X3NldF9wdHNfaW5mbyhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywKPiArICAgICAgICBEVkRW SURFT19USU1FX0JBU0VfUS5udW0sIERWRFZJREVPX1RJTUVfQkFTRV9RLmRlbik7Cj4gKwo+ICsg ICAgc3RpID0gZmZzdHJlYW0oc3QpOwo+ICsgICAgc3RpLT5yZXF1ZXN0X3Byb2JlID0gMDsKPiAr ICAgIHN0aS0+bmVlZF9wYXJzaW5nID0gbmVlZF9wYXJzaW5nOwo+ICsKPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9yZWdpc3Rlcl9h bGwoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAq YyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8Cj4gYy0+cGxh eV92dHNfaWZvLT52dHNpX21hdC0+bnJfb2ZfdnRzX2F1ZGlvX3N0cmVhbXM7IGkrKykgewo+ICsg ICAgICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkOwo+ICsgICAgICAgIGludCBzdGFydGNvZGU7 Cj4gKyAgICAgICAgaW50IHNhbXBsZV9yYXRlOwo+ICsgICAgICAgIGludCBzYW1wbGVfYml0czsK PiArICAgICAgICBpbnQgbmJfY2hhbm5lbHM7Cj4gKyAgICAgICAgY2hhciAqbGFuZ19pc282Mzlf XzI7Cj4gKyAgICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgICAgaWYgKCEoYy0+cGxheV9wZ2Mt PmF1ZGlvX2NvbnRyb2xbaV0KPiArICAgICAgICAgICAgICAgICYgRFZEVklERU9fQVVESU9fQ09O VFJPTF9FTkFCTEVEX01BU0spKSB7Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAg IH0KPiArCj4gKyAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19hdWRpb19zdHJlYW1fYW5hbHl6 ZSgKPiArICAgICAgICAgICAgICAgIGMtPnBsYXlfdnRzX2lmby0+dnRzaV9tYXQtPnZ0c19hdWRp b19hdHRyW2ldLAo+ICsgICAgICAgICAgICAgICAgYy0+cGxheV9wZ2MtPmF1ZGlvX2NvbnRyb2xb aV0sICZjb2RlY19pZCwgJnN0YXJ0Y29kZSwKPiArICAgICAgICAgICAgICAgICZzYW1wbGVfcmF0 ZSwgJnNhbXBsZV9iaXRzLCAmbmJfY2hhbm5lbHMsCj4gKyAgICAgICAgICAgICAgICAmbGFuZ19p c282MzlfXzIpKSAhPSAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJJbnZhbGlkIGF1ZGlvIHBhcmFtZXRlcnMgaW4gVlRTCj4gSUZPXG4iKTsKPiArCj4gKyAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoYy0+cGxh eV92dHNfaWZvLT52dHNpX21hdC0+Cj4gKyAgICAgICAgICAgICAgICB2dHNfYXVkaW9fYXR0cltp XS5hcHBsaWNhdGlvbl9tb2RlID09IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xP R19FUlJPUiwKPiArICAgICAgICAgICAgICAgICJBdWRpbyBzdHJlYW0gdXNlcyBrYXJhb2tlIGV4 dGVuc2lvbiB3aGljaCBpcwo+IHVuc3VwcG9ydGVkXG4iKTsKPiArCj4gKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGZv ciAoaW50IGogPSAwOyBqIDwgcy0+bmJfc3RyZWFtczsgaisrKSB7Cj4gKyAgICAgICAgICAgIGlm IChzLT5zdHJlYW1zW2pdLT5pZCA9PSBzdGFydGNvZGUpIHsKPiArICAgICAgICAgICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfV0FSTklORywKPiArICAgICAgICAgICAgICAgICAgICAgICAgIkF1ZGlv IHN0cmVhbSBoYXMgZHVwbGljYXRlIGVudHJ5IGluIFZUUyBJRk9cbiIpOwo+ICsKPiArICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsKPiAr ICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV90b19hdnN0cmVhbShjLT5t cGVnX2N0eCwKPiBjb2RlY19pZCwKPiArICAgICAgICAgICAgICAgIHN0YXJ0Y29kZSwgc2FtcGxl X3JhdGUsIHNhbXBsZV9iaXRzLCBuYl9jaGFubmVscywKPiArICAgICAgICAgICAgICAgIGxhbmdf aXNvNjM5X18yLCBBVlNUUkVBTV9QQVJTRV9GVUxMKSkgIT0gMCkgewo+ICsgICAgICAgICAgICBh dl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHZpZGVvIHN0cmVhbQo+ IChzdWJkZW11eClcbiIpOwo+ICsKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3RyZWFtX3RvX2F2 c3RyZWFtKHMsIGNvZGVjX2lkLAo+ICsgICAgICAgICAgICAgICAgc3RhcnRjb2RlLCBzYW1wbGVf cmF0ZSwgc2FtcGxlX2JpdHMsIG5iX2NoYW5uZWxzLAo+ICsgICAgICAgICAgICAgICAgbGFuZ19p c282MzlfXzIsIEFWU1RSRUFNX1BBUlNFX05PTkUpKSAhPSAwKSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gYWxsb2NhdGUgYXVkaW8gc3RyZWFtXG4i KTsKPiArCj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnRp dGxlX2NsdXRfcmdiX2V4dHJhZGF0YV9jYXQoCj4gKyAgICAgICAgY29uc3QgdWludDMyX3QgKmNs dXRfcmdiLCBzaXplX3QgY2x1dF9yZ2Jfc2l6ZSwKPiArICAgICAgICBjaGFyICpkc3QsIHNpemVf dCBkc3Rfc2l6ZSkKPiArewo+ICsgICAgaWYgKGRzdF9zaXplIDwgRFZEVklERU9fU1VCUF9DTFVU X1JHQl9FWFRSQURBVEFfU0laRSkgewo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGNsdXRfcmdiX3NpemUgIT0gRFZEVklERU9fU1VCUF9D TFVUX1NJWkUpIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ ICsKPiArICAgIHNucHJpbnRmKGRzdCwgZHN0X3NpemUsICJwYWxldHRlOiAiKTsKPiArCj4gKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IERWRFZJREVPX1NVQlBfQ0xVVF9MRU47IGkrKykgewo+ICsg ICAgICAgIGF2X3N0cmxjYXRmKGRzdCwgZHN0X3NpemUsCj4gKyAgICAgICAgICAgICAgICAiJTA2 IlBSSXgzMiIlcyIsIGNsdXRfcmdiW2ldLCBpICE9IDE1ID8gIiwgIiA6ICIiKTsKPiArICAgIH0K PiArCj4gKyAgICBhdl9zdHJsY2F0KGRzdCwgIlxuIiwgMSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3VidGl0bGVfY2x1dF95dXZfdG9fcmdi KHVpbnQzMl90ICpjbHV0LAo+ICsgICAgICAgIGNvbnN0IHNpemVfdCBjbHV0X3NpemUpCj4gK3sK PiArICAgIGNvbnN0IHVpbnQ4X3QgKmNtID0gZHZkdmlkZW9feXV2X2Nyb3BfdGFiICsgRFZEVklE RU9fWVVWX05FR19DUk9QX01BWDsKPiArCj4gKyAgICBpbnQgaSwgeSwgY2IsIGNyOwo+ICsgICAg dWludDhfdCByLCBnLCBiOwo+ICsgICAgaW50IHJfYWRkLCBnX2FkZCwgYl9hZGQ7Cj4gKwo+ICsg ICAgaWYgKGNsdXRfc2l6ZSAhPSBEVkRWSURFT19TVUJQX0NMVVRfU0laRSkgewo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpID0gMDsg aSA8IERWRFZJREVPX1NVQlBfQ0xVVF9MRU47IGkrKykgewo+ICsgICAgICAgIHkgID0gKGNsdXRb aV0gPj4gMTYpICYgMHhGRjsKPiArICAgICAgICBjciA9IChjbHV0W2ldID4+IDgpICAmIDB4RkY7 Cj4gKyAgICAgICAgY2IgPSBjbHV0W2ldICAgICAgICAgJiAweEZGOwo+ICsKPiArICAgICAgICBZ VVZfVE9fUkdCMV9DQ0lSKGNiLCBjcik7Cj4gKyAgICAgICAgWVVWX1RPX1JHQjJfQ0NJUihyLCBn LCBiLCB5KTsKPiArCj4gKyAgICAgICAgY2x1dFtpXSA9IChyIDw8IDE2KSB8IChnIDw8IDgpIHwg YjsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBk dmR2aWRlb19zdWJ0aXRsZV9zdHJlYW1fdG9fYXZzdHJlYW0oQVZGb3JtYXRDb250ZXh0ICpzLAo+ ICsgICAgICAgIGludCBzdGFydGNvZGUsCj4gKyAgICAgICAgY2hhciAqY2x1dF9yZ2JfZXh0cmFk YXRhX2J1ZiwgaW50IGNsdXRfcmdiX2V4dHJhZGF0YV9idWZfc2l6ZSwKPiArICAgICAgICBjaGFy ICpsYW5nX2lzbzYzOV9fMiwgZW51bSBBVlN0cmVhbVBhcnNlVHlwZSBuZWVkX3BhcnNpbmcpCj4g K3sKPiArICAgIEFWU3RyZWFtICpzdDsKPiArICAgIEZGU3RyZWFtICpzdGk7Cj4gKyAgICBpbnQg cmV0Owo+ICsKPiArICAgIHN0ID0gYXZmb3JtYXRfbmV3X3N0cmVhbShzLCBOVUxMKTsKPiArICAg IGlmICghc3QpIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgfQo+ ICsKPiArICAgIHN0LT5pZCA9IHN0YXJ0Y29kZTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNf dHlwZSA9IEFWTUVESUFfVFlQRV9TVUJUSVRMRTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNf aWQgPSBBVl9DT0RFQ19JRF9EVkRfU1VCVElUTEU7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBmZl9h bGxvY19leHRyYWRhdGEoc3QtPmNvZGVjcGFyLAo+ICsgICAgICAgICAgICBjbHV0X3JnYl9leHRy YWRhdGFfYnVmX3NpemUpKSAhPSAwKSB7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0K PiArCj4gKyAgICBtZW1jcHkoc3QtPmNvZGVjcGFyLT5leHRyYWRhdGEsIGNsdXRfcmdiX2V4dHJh ZGF0YV9idWYsCj4gKyAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhX3NpemUpOwo+ ICsKPiArICAgIGlmIChsYW5nX2lzbzYzOV9fMikgewo+ICsgICAgICAgIGF2X2RpY3Rfc2V0KCZz dC0+bWV0YWRhdGEsICJsYW5ndWFnZSIsIGxhbmdfaXNvNjM5X18yLCAwKTsKPiArICAgIH0KPiAr Cj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNfV1JBUF9CSVRTLAo+ ICsgICAgICAgIERWRFZJREVPX1RJTUVfQkFTRV9RLm51bSwgRFZEVklERU9fVElNRV9CQVNFX1Eu ZGVuKTsKPiArCj4gKyAgICBzdGkgPSBmZnN0cmVhbShzdCk7Cj4gKyAgICBzdGktPnJlcXVlc3Rf cHJvYmUgPSAwOwo+ICsgICAgc3RpLT5uZWVkX3BhcnNpbmcgPSBuZWVkX3BhcnNpbmc7Cj4gKwo+ ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3VidGl0bGVf c3RyZWFtX3JlZ2lzdGVyKEFWRm9ybWF0Q29udGV4dCAqcywKPiArICAgICAgICBpbnQgcG9zaXRp b24sCj4gKyAgICAgICAgY2hhciAqY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwgaW50IGNsdXRfcmdi X2V4dHJhZGF0YV9idWZfc2l6ZSwKPiArICAgICAgICBjaGFyICpsYW5nX2lzbzYzOV9fMikKPiAr ewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsg ICAgaW50IHJldDsKPiArCj4gKyAgICBpbnQgc3RhcnRjb2RlID0gRFZEVklERU9fU1RBUlRDT0RF X09GRlNFVF9TVUJQICsgcG9zaXRpb247Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz LT5uYl9zdHJlYW1zOyBpKyspIHsKPiArICAgICAgICAvKiBkb24ndCBuZWVkIHRvIHdhcm4gdGhl IHVzZXIgYWJvdXQgdGhpcywgc2luY2UgcGFyYW1zIHdvbid0Cj4gY2hhbmdlICovCj4gKyAgICAg ICAgaWYgKHMtPnN0cmVhbXNbaV0tPmlkID09IHN0YXJ0Y29kZSkgewo+ICsgICAgICAgICAgICBh dl9sb2cocywgQVZfTE9HX1RSQUNFLAo+ICsgICAgICAgICAgICAgICAgICAgICJTdWJ0aXRsZSBz dHJlYW0gaGFzIGR1cGxpY2F0ZSBlbnRyeSBpbiBWVFMgSUZPXG4iKTsKPiArICAgICAgICAgICAg cmV0dXJuIDA7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGlmICgocmV0ID0gZHZk dmlkZW9fc3VidGl0bGVfc3RyZWFtX3RvX2F2c3RyZWFtKGMtPm1wZWdfY3R4LAo+IHN0YXJ0Y29k ZSwKPiArICAgICAgICAgICAgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwgY2x1dF9yZ2JfZXh0cmFk YXRhX2J1Zl9zaXplLAo+ICsgICAgICAgICAgICBsYW5nX2lzbzYzOV9fMiwgQVZTVFJFQU1fUEFS U0VfRlVMTCkpICE9IDApIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5h YmxlIHRvIGFsbG9jYXRlIHN1YnRpdGxlIHN0cmVhbQo+IChzdWJkZW11eClcbiIpOwo+ICsKPiAr ICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIGlmICgocmV0ID0gZHZkdmlk ZW9fc3VidGl0bGVfc3RyZWFtX3RvX2F2c3RyZWFtKHMsIHN0YXJ0Y29kZSwKPiArICAgICAgICAg ICAgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1Zl9zaXplLAo+ ICsgICAgICAgICAgICBsYW5nX2lzbzYzOV9fMiwgQVZTVFJFQU1fUEFSU0VfTk9ORSkpICE9IDAp IHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRl IHN1YnRpdGxlIHN0cmVhbVxuIik7Cj4gKwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3Vi dGl0bGVfc3RyZWFtX3JlZ2lzdGVyX2FsbChBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAg IERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGludCBy ZXQ7Cj4gKyAgICB1aW50MzJfdCBjbHV0X3JnYltEVkRWSURFT19TVUJQX0NMVVRfU0laRV0gPSB7 MH07Cj4gKyAgICBjaGFyIGNsdXRfcmdiX2V4dHJhZGF0YV9idWZbRFZEVklERU9fU1VCUF9DTFVU X1JHQl9FWFRSQURBVEFfU0laRV0gPQo+IHswfTsKPiArCj4gKyAgICBpZiAoYy0+cGxheV92dHNf aWZvLT52dHNpX21hdC0+bnJfb2ZfdnRzX3N1YnBfc3RyZWFtcyA8IDEpIHsKPiArICAgICAgICBy ZXR1cm4gMDsKPiArICAgIH0KPiArCj4gKyAgICAvKiBpbml0aWFsaXplIHRoZSBwYWxldHRlIChz YW1lIGZvciBhbGwgc3RyZWFtcyBpbiB0aGlzIFBHQykgKi8KPiArICAgIG1lbWNweShjbHV0X3Jn YiwgYy0+cGxheV9wZ2MtPnBhbGV0dGUsIERWRFZJREVPX1NVQlBfQ0xVVF9TSVpFKTsKPiArCj4g KyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnRpdGxlX2NsdXRfeXV2X3RvX3JnYigKPiArICAg ICAgICAgICAgY2x1dF9yZ2IsIERWRFZJREVPX1NVQlBfQ0xVVF9TSVpFKSkgIT0gMCkgewo+ICsg ICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gY29udmVydCBzdWJ0aXRs ZSBwYWxldHRlXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnRpdGxlX2NsdXRfcmdiX2V4dHJhZGF0YV9jYXQo Cj4gKyAgICAgICAgICAgIGNsdXRfcmdiLCBEVkRWSURFT19TVUJQX0NMVVRfU0laRSwKPiArICAg ICAgICAgICAgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwKPiBEVkRWSURFT19TVUJQX0NMVVRfUkdC X0VYVFJBREFUQV9TSVpFKSkgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gc2V0IHVwIHN1YnRpdGxlIGV4dHJhZGF0YVxuIik7Cj4gKwo+ICsgICAg ICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj LT5wbGF5X3Z0c19pZm8tPgo+ICsgICAgICAgICAgICB2dHNpX21hdC0+bnJfb2ZfdnRzX3N1YnBf c3RyZWFtczsgaSsrKSB7Cj4gKyAgICAgICAgdWludDMyX3Qgc3VicF9jb250cm9sOwo+ICsgICAg ICAgIHN1YnBfYXR0cl90IHN1YnBfYXR0cjsKPiArICAgICAgICB2aWRlb19hdHRyX3QgdmlkZW9f YXR0cjsKPiArICAgICAgICBjaGFyICpsYW5nX2lzbzYzOV9fMjsKPiArCj4gKyAgICAgICAgc3Vi cF9jb250cm9sID0gYy0+cGxheV9wZ2MtPnN1YnBfY29udHJvbFtpXTsKPiArCj4gKyAgICAgICAg aWYgKCEoc3VicF9jb250cm9sICYgRFZEVklERU9fU1VCUF9DT05UUk9MX0VOQUJMRURfTUFTSykp IHsKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBz dWJwX2F0dHIgPSBjLT5wbGF5X3Z0c19pZm8tPnZ0c2lfbWF0LT52dHNfc3VicF9hdHRyW2ldOwo+ ICsgICAgICAgIHZpZGVvX2F0dHIgPSBjLT5wbGF5X3Z0c19pZm8tPnZ0c2lfbWF0LT52dHNfdmlk ZW9fYXR0cjsKPiArICAgICAgICBsYW5nX2lzbzYzOV9fMiA9Cj4gZHZkdmlkZW9fbGFuZ19jb2Rl X3RvX2lzbzYzOV9fMihzdWJwX2F0dHIubGFuZ19jb2RlKTsKPiArCj4gKyAgICAgICAgLyogdGhl cmUgY2FuIGJlIHNldmVyYWwgcHJlc2VudGF0aW9ucyBmb3Igb25lIFNQVSAqLwo+ICsgICAgICAg IC8qIGZvciBub3csIGJlIGZsZXhpYmxlIHdpdGggdGhlIERBUiBjaGVjayBkdWUgdG8gd2VpcmQg YXV0aG9yaW5nCj4gKi8KPiArICAgICAgICBpZiAodmlkZW9fYXR0ci5kaXNwbGF5X2FzcGVjdF9y YXRpbyA+IDApIHsKPiArICAgICAgICAgICAgLyogMTY6OSAqLwo+ICsgICAgICAgICAgICByZXQg PSBkdmR2aWRlb19zdWJ0aXRsZV9zdHJlYW1fcmVnaXN0ZXIocywKPiArICAgICAgICAgICAgICAg ICgoc3VicF9jb250cm9sID4+IDE2KSAmIDB4MUYpLAo+ICsgICAgICAgICAgICAgICAgY2x1dF9y Z2JfZXh0cmFkYXRhX2J1ZiwKPiArICAgICAgICAgICAgICAgIERWRFZJREVPX1NVQlBfQ0xVVF9S R0JfRVhUUkFEQVRBX1NJWkUsCj4gKyAgICAgICAgICAgICAgICBsYW5nX2lzbzYzOV9fMik7Cj4g KyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgewo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgaWYgKHZpZGVvX2F0dHIucGVy bWl0dGVkX2RmID09Cj4gRFZEVklERU9fVlRTX1NQVV9QRkRfTEVUVEVSQk9YX09OTFkKPiArICAg ICAgICAgICAgICAgICAgICB8fCB2aWRlb19hdHRyLnBlcm1pdHRlZF9kZiA9PQo+IERWRFZJREVP X1ZUU19TUFVfUEZEX0FOWSkgewo+ICsgICAgICAgICAgICAgICAgcmV0ID0gZHZkdmlkZW9fc3Vi dGl0bGVfc3RyZWFtX3JlZ2lzdGVyKHMsCj4gKyAgICAgICAgICAgICAgICAgICAgKChzdWJwX2Nv bnRyb2wgPj4gOCkgJiAweDFGKSwKPiArICAgICAgICAgICAgICAgICAgICBjbHV0X3JnYl9leHRy YWRhdGFfYnVmLAo+ICsgICAgICAgICAgICAgICAgICAgIERWRFZJREVPX1NVQlBfQ0xVVF9SR0Jf RVhUUkFEQVRBX1NJWkUsCj4gKyAgICAgICAgICAgICAgICAgICAgbGFuZ19pc282MzlfXzIpOwo+ ICsgICAgICAgICAgICAgICAgaWYgKHJldCAhPSAwKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHJldDsKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsKPiAr ICAgICAgICAgICAgaWYgKHZpZGVvX2F0dHIucGVybWl0dGVkX2RmID09Cj4gRFZEVklERU9fVlRT X1NQVV9QRkRfUEFOU0NBTl9PTkxZCj4gKyAgICAgICAgICAgICAgICAgICAgfHwgdmlkZW9fYXR0 ci5wZXJtaXR0ZWRfZGYgPT0KPiBEVkRWSURFT19WVFNfU1BVX1BGRF9BTlkpIHsKPiArICAgICAg ICAgICAgICAgIHJldCA9IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV9yZWdpc3RlcihzLAo+ICsg ICAgICAgICAgICAgICAgICAgIChzdWJwX2NvbnRyb2wgJiAweDFGKSwKPiArICAgICAgICAgICAg ICAgICAgICBjbHV0X3JnYl9leHRyYWRhdGFfYnVmLAo+ICsgICAgICAgICAgICAgICAgICAgIERW RFZJREVPX1NVQlBfQ0xVVF9SR0JfRVhUUkFEQVRBX1NJWkUsCj4gKyAgICAgICAgICAgICAgICAg ICAgbGFuZ19pc282MzlfXzIpOwo+ICsgICAgICAgICAgICAgICAgaWYgKHJldCAhPSAwKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgfQo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIC8qIDQ6MyAq Lwo+ICsgICAgICAgICAgICByZXQgPSBkdmR2aWRlb19zdWJ0aXRsZV9zdHJlYW1fcmVnaXN0ZXIo cywKPiArICAgICAgICAgICAgICAgICgoc3VicF9jb250cm9sID4+IDI0KSAmIDB4MUYpLAo+ICsg ICAgICAgICAgICAgICAgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwKPiArICAgICAgICAgICAgICAg IERWRFZJREVPX1NVQlBfQ0xVVF9SR0JfRVhUUkFEQVRBX1NJWkUsCj4gKyAgICAgICAgICAgICAg ICBsYW5nX2lzbzYzOV9fMik7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgewo+ICsgICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiAr ICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRl b19zdWJkZW11eF9uZXN0ZWRfaW9fb3BlbihBVkZvcm1hdENvbnRleHQgKnMsCj4gKyAgICAgICAg QVZJT0NvbnRleHQgKipwYiwgY29uc3QgY2hhciAqdXJsLCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFy eSAqKm9wdHMpCj4gK3sKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJOZXN0ZWQgaW9f b3BlbiBub3Qgc3VwcG9ydGVkIGZvciB0aGlzCj4gZm9ybWF0XG4iKTsKPiArCj4gKyAgICByZXR1 cm4gQVZFUlJPUihFUEVSTSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3ViZGVt dXhfcmVhZF9kYXRhKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqYnVmLAo+ICsgICAgICAgIGludCBi dWZfc2l6ZSkKPiArewo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpzID0gb3BhcXVlOwo+ICsgICAg RFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaWYgKGJ1 Zl9zaXplICE9IERWRFZJREVPX0JMT0NLX1NJWkUpIHsKPiArICAgICAgICBhdl9sb2cocywgQVZf TE9HX0VSUk9SLCAiSW52YWxpZCBidWZmZXIgc2l6ZVxuIik7Cj4gKwo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBEVkRWSURFT19QU19NQVhfU0VBUkNIX0JMT0NLUzsgaSsrKSB7Cj4gKyAgICAgICAgaW50IG5h dl9ldmVudDsKPiArICAgICAgICBpbnQgbmF2X2xlbjsKPiArCj4gKyAgICAgICAgaW50IGNoZWNr X3RpdGxlOwo+ICsgICAgICAgIGludCBjaGVja19wZ2NuOwo+ICsgICAgICAgIGludCBjaGVja19w Z247Cj4gKyAgICAgICAgaW50IGNoZWNrX2FuZ2xlOwo+ICsgICAgICAgIGludCBjaGVja19uYl9h bmdsZXM7Cj4gKwo+ICsgICAgICAgIHVpbnQ4X3QgbmF2X2J1ZltEVkRWSURFT19CTE9DS19TSVpF XSA9IHswfTsKPiArCj4gKyAgICAgICAgaWYgKGZmX2NoZWNrX2ludGVycnVwdCgmcy0+aW50ZXJy dXB0X2NhbGxiYWNrKSkgewo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWElUOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKGR2ZG5hdl9nZXRfbmV4dF9ibG9jayhjLT5wbGF5 X2R2ZG5hdiwKPiArICAgICAgICAgICAgICAgIG5hdl9idWYsICZuYXZfZXZlbnQsICZuYXZfbGVu KSAhPSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0df RVJST1IsICJFcnJvciByZWFkaW5nIGJsb2NrXG4iKTsKPiArCj4gKyAgICAgICAgICAgIGdvdG8g ZW5kX2R2ZG5hdl9lcnJvcjsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChuYXZfbGVu ID4gRFZEVklERU9fQkxPQ0tfU0laRSkgewo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiSW52YWxpZCBibG9jayAodG9vIGJpZylcbiIpOwo+ICsKPiArICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChu YXZfZXZlbnQgIT0gRFZETkFWX0JMT0NLX09LICYmIG5hdl9ldmVudCAhPQo+IERWRE5BVl9OQVZf UEFDS0VUKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsICJuYXYgZXZl bnQ9JWQgbGVuPSVkXG4iLCBuYXZfZXZlbnQsCj4gbmF2X2xlbik7Cj4gKyAgICAgICAgfQo+ICsK PiArICAgICAgICBpZiAoZHZkbmF2X2N1cnJlbnRfdGl0bGVfcHJvZ3JhbShjLT5wbGF5X2R2ZG5h diwgJmNoZWNrX3RpdGxlLAo+ICsgICAgICAgICAgICAgICAgJmNoZWNrX3BnY24sICZjaGVja19w Z24pICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPiArICAgICAgICAgICAgZ290byBlbmRfZHZkbmF2 X2Vycm9yOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKGNoZWNrX3RpdGxlICE9IGMt Pm9wdF90aXRsZSB8fCBjaGVja19wZ2NuICE9IGMtPnBsYXlfcGdjbgo+ICsgICAgICAgICAgICAg ICAgfHwgIWR2ZG5hdl9pc19kb21haW5fdnRzKGMtPnBsYXlfZHZkbmF2KSkgewo+ICsgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAo ZHZkbmF2X2dldF9hbmdsZV9pbmZvKGMtPnBsYXlfZHZkbmF2LCAmY2hlY2tfYW5nbGUsCj4gKyAg ICAgICAgICAgICAgICAmY2hlY2tfbmJfYW5nbGVzKSAhPSBEVkROQVZfU1RBVFVTX09LKSB7Cj4g KyAgICAgICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIGlmIChjaGVja19hbmdsZSAhPSBjLT5vcHRfYW5nbGUpIHsKPiArICAgICAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgYW5nbGUgY2hhbmdlXG4iKTsKPiAr Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOUFVUX0NIQU5HRUQ7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICBzd2l0Y2ggKG5hdl9ldmVudCkgewo+ICsgICAgICAgICAgICBjYXNl IERWRE5BVl9CTE9DS19PSzoKPiArICAgICAgICAgICAgICAgIGlmIChuYXZfbGVuICE9IERWRFZJ REVPX0JMT0NLX1NJWkUpIHsKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiSW52YWxpZCBibG9ja1xuIik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAg ICAgICAgICAgICAgIG1lbWNweShidWYsICZuYXZfYnVmLCBuYXZfbGVuKTsKPiArCj4gKyAgICAg ICAgICAgICAgICByZXR1cm4gbmF2X2xlbjsKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfSElH SExJR0hUOgo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9WVFNfQ0hBTkdFOgo+ICsgICAgICAg ICAgICBjYXNlIERWRE5BVl9TVElMTF9GUkFNRToKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZf U1RPUDoKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfV0FJVDoKPiArICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VPRjsKPiArICAgICAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgbmV4dCBNUEVHIGJsb2NrXG4iKTsKPiAr Cj4gKyAgICByZXR1cm4gQVZFUlJPUl9VTktOT1dOOwo+ICsKPiArZW5kX2R2ZG5hdl9lcnJvcjoK PiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJsaWJkdmRuYXY6ICVzXG4iLAo+IGR2ZG5h dl9lcnJfdG9fc3RyaW5nKGMtPnBsYXlfZHZkbmF2KSk7Cj4gKwo+ICsgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQ2NF90IGR2ZHZpZGVvX3N1YmRlbXV4 X3NlZWtfZGF0YSh2b2lkICpvcGFxdWUsIGludDY0X3Qgb2Zmc2V0LAo+ICsgICAgICAgIGludCB3 aGVuY2UpCj4gK3sKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG9wYXF1ZTsKPiArCj4gKyAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAiZHZkdmlkZW9fc3ViZGVt dXhfc2Vla19kYXRhKCk6IG5vdCBpbXBsZW1lbnRlZFxuIik7Cj4gKwo+ICsgICAgcmV0dXJuIEFW RVJST1JfUEFUQ0hXRUxDT01FOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YmRl bXV4X29wZW4oQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29u dGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGNv bnN0IEFWSW5wdXRGb3JtYXQgKm1wZWdfZm10Owo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICptcGVn X2N0eDsKPiArICAgIHVpbnQ4X3QgKm1wZWdfYnVmOwo+ICsKPiArICAgIGlmICghKG1wZWdfZm10 ID0gYXZfZmluZF9pbnB1dF9mb3JtYXQoIm1wZWciKSkpIHsKPiArICAgICAgICByZXR1cm4gQVZF UlJPUl9ERU1VWEVSX05PVF9GT1VORDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoIShtcGVnX2N0 eCA9IGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKSkpIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICghKG1wZWdfYnVmID0gYXZfbWFsbG9j KERWRFZJREVPX0JMT0NLX1NJWkUpKSkgewo+ICsgICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4 dChtcGVnX2N0eCk7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgZmZpb19pbml0X2NvbnRleHQoJmMtPm1wZWdfcGIsIG1wZWdfYnVmLCBE VkRWSURFT19CTE9DS19TSVpFLCAwLAo+ICsgICAgICAgICAgICBzLCBkdmR2aWRlb19zdWJkZW11 eF9yZWFkX2RhdGEsIE5VTEwsCj4gZHZkdmlkZW9fc3ViZGVtdXhfc2Vla19kYXRhKTsKPiArICAg IGMtPm1wZWdfcGIucHViLnNlZWthYmxlID0gMDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGZmX2Nv cHlfd2hpdGVibGFja2xpc3RzKG1wZWdfY3R4LCBzKSkgIT0gMCkgewo+ICsgICAgICAgIGF2Zm9y bWF0X2ZyZWVfY29udGV4dChtcGVnX2N0eCk7Cj4gKwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4g KyAgICB9Cj4gKwo+ICsgICAgLyogVE9ETzogZml4IHRoZSBQVFMgaXNzdWVzIChhc2sgYWJvdXQg dGhpcyBpbiBNTCkgKi8KPiArICAgIC8qIEFWRk1UX0ZMQUdfR0VOUFRTIHdvcmtzIGluIHNvbWUg c2NlbmFyaW9zLCBidXQgaW4gb3RoZXJzLCB0aGUKPiByZWFkaW5nIHByb2Nlc3MgaGFuZ3MgKi8K PiArICAgIG1wZWdfY3R4LT5mbGFncyA9IEFWRk1UX0ZMQUdfQ1VTVE9NX0lPIHwgQVZGTVRfRkxB R19HRU5QVFM7Cj4gKwo+ICsgICAgbXBlZ19jdHgtPnByb2Jlc2l6ZSA9IDA7Cj4gKyAgICBtcGVn X2N0eC0+bWF4X2FuYWx5emVfZHVyYXRpb24gPSAwOwo+ICsKPiArICAgIG1wZWdfY3R4LT5pbnRl cnJ1cHRfY2FsbGJhY2sgPSBzLT5pbnRlcnJ1cHRfY2FsbGJhY2s7Cj4gKyAgICBtcGVnX2N0eC0+ cGIgPSAmYy0+bXBlZ19wYi5wdWI7Cj4gKyAgICBtcGVnX2N0eC0+aW9fb3BlbiA9IGR2ZHZpZGVv X3N1YmRlbXV4X25lc3RlZF9pb19vcGVuOwo+ICsKPiArICAgIGlmICgocmV0ID0gYXZmb3JtYXRf b3Blbl9pbnB1dCgmbXBlZ19jdHgsICIiLCBtcGVnX2ZtdCwgTlVMTCkpICE9IDApIHsKPiArICAg ICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQobXBlZ19jdHgpOwo+ICsKPiArICAgICAgICByZXR1 cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIGMtPm1wZWdfZm10ID0gbXBlZ19mbXQ7Cj4gKyAg ICBjLT5tcGVnX2N0eCA9IG1wZWdfY3R4Owo+ICsgICAgYy0+bXBlZ19idWYgPSBtcGVnX2J1ZjsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fc3Vi ZGVtdXhfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4 Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBhdl9mcmVlcCgmYy0+bXBlZ19w Yi5wdWIuYnVmZmVyKTsKPiArICAgIG1lbXNldCgmYy0+bXBlZ19wYiwgMHgwMCwgc2l6ZW9mKGMt Pm1wZWdfcGIpKTsKPiArICAgIGF2X2ZyZWVwKCZjLT5tcGVnX3BiKTsKPiArCj4gKyAgICBhdmZv cm1hdF9jbG9zZV9pbnB1dCgmYy0+bXBlZ19jdHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2 ZHZpZGVvX2NoYXB0ZXJzX3JlZ2lzdGVyKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAg RFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICBpbnQgc3RhcnRf dGltZSA9IDA7Cj4gKyAgICBpbnQgY2VsbCA9IDA7Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBjLT5wbGF5X3BnYy0+bnJfb2ZfcHJvZ3JhbXM7IGkrKykgewo+ICsgICAgICAgIGludDY0 X3QgbXMgPSAwOwo+ICsgICAgICAgIGludCBuZXh0ID0gYy0+cGxheV9wZ2MtPnByb2dyYW1fbWFw W2kgKyAxXTsKPiArCj4gKyAgICAgICAgaWYgKGkgPT0gYy0+cGxheV9wZ2MtPm5yX29mX3Byb2dy YW1zIC0gMSkgewo+ICsgICAgICAgICAgICBuZXh0ID0gYy0+cGxheV9wZ2MtPm5yX29mX2NlbGxz ICsgMTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHdoaWxlIChjZWxsIDwgbmV4dCAtIDEp IHsKPiArICAgICAgICAgICAgLyogb25seSBjb25zaWRlciBmaXJzdCBjZWxsIG9mIG11bHRpLWFu Z2xlIGNlbGxzICovCj4gKyAgICAgICAgICAgIGlmIChjLT5wbGF5X3BnYy0+Y2VsbF9wbGF5YmFj a1tjZWxsXS5ibG9ja19tb2RlIDw9IDEpIHsKPiArICAgICAgICAgICAgICAgIG1zID0gbXMgKyBk dmR2aWRlb190aW1lX3RvX21pbGxpcygKPiArICAgICAgICAgICAgICAgICAgICAgICAgJmMtPnBs YXlfcGdjLT5jZWxsX3BsYXliYWNrW2NlbGxdLnBsYXliYWNrX3RpbWUpOwo+ICsgICAgICAgICAg ICB9Cj4gKyAgICAgICAgICAgIGNlbGwrKzsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlm ICghYXZwcml2X25ld19jaGFwdGVyKHMsIGksIERWRFZJREVPX1RJTUVfQkFTRV9NSUxMSVNfUSwK PiArICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUsIHN0YXJ0X3RpbWUgKyBtcywgTlVMTCkpIHsK PiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0 ZSBjaGFwdGVyIik7Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgICAgICBzdGFydF90aW1lICs9IG1zOwo+ICsgICAgfQo+ICsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3JlYWRfaGVhZGVy KEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBpZiAo KHJldCA9IGR2ZHZpZGVvX3ZvbHVtZV9vcGVuKHMpKSAhPSAwKSB7Cj4gKyAgICAgICAgcmV0dXJu IHJldDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3BsYXliYWNrX29w ZW4ocykpICE9IDApIHsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAg IGlmICgocmV0ID0gZHZkdmlkZW9fc3ViZGVtdXhfb3BlbihzKSkgIT0gMCkgewo+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb192aWRl b19zdHJlYW1fcmVnaXN0ZXIocykpICE9IDApIHsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsg ICAgfQo+ICsKPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3RyZWFtX3JlZ2lzdGVy X2FsbChzKSkgIT0gMCkgewo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJ0aXRsZV9zdHJlYW1fcmVnaXN0ZXJfYWxsKHMpKSAh PSAwKSB7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoKHJl dCA9IGR2ZHZpZGVvX2NoYXB0ZXJzX3JlZ2lzdGVyKHMpKSAhPSAwKSB7Cj4gKyAgICAgICAgcmV0 dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBkdmR2aWRlb19yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpw a3QpCj4gK3sKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ ICsKPiArICAgIHdoaWxlICghZmZfY2hlY2tfaW50ZXJydXB0KCZzLT5pbnRlcnJ1cHRfY2FsbGJh Y2spKSB7Cj4gKyAgICAgICAgaW50IHN1YmRlbXV4X3JldDsKPiArICAgICAgICBBVlBhY2tldCAq c3ViZGVtdXhfcGt0Owo+ICsKPiArICAgICAgICBzdWJkZW11eF9wa3QgPSBhdl9wYWNrZXRfYWxs b2MoKTsKPiArICAgICAgICBpZiAoIXN1YmRlbXV4X3BrdCkgewo+ICsgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgc3ViZGVtdXhf cmV0ID0gYXZfcmVhZF9mcmFtZShjLT5tcGVnX2N0eCwgc3ViZGVtdXhfcGt0KTsKPiArICAgICAg ICBpZiAoc3ViZGVtdXhfcmV0ID49IDApIHsKPiArICAgICAgICAgICAgaWYgKGMtPm1wZWdfY3R4 LT5uYl9zdHJlYW1zICE9IHMtPm5iX3N0cmVhbXMpIHsKPiArICAgICAgICAgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJVbmV4cGVjdGVkIHN0cmVhbSBkdXJpbmcKPiBwbGF5YmFja1xu Iik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgYXZfcGFja2V0X3VucmVmKHN1YmRlbXV4X3BrdCk7 Cj4gKwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5QVVRfQ0hBTkdFRDsKPiAr ICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgYXZfcGFja2V0X21vdmVfcmVmKHBrdCwg c3ViZGVtdXhfcGt0KTsKPiArCj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAgICAgIH0K PiArCj4gKyAgICAgICAgcmV0dXJuIHN1YmRlbXV4X3JldDsKPiArICAgIH0KPiArCj4gKyAgICBy ZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcmVhZF9z ZWVrKEFWRm9ybWF0Q29udGV4dCAqcywgaW50IHN0cmVhbV9pbmRleCwKPiArICAgICAgICBpbnQ2 NF90IHRpbWVzdGFtcCwgaW50IGZsYWdzKQo+ICt7Cj4gKyAgICBhdl9sb2cocywgQVZfTE9HX0VS Uk9SLCAiZHZkdmlkZW9fcmVhZF9zZWVrKCk6IG5vdCBpbXBsZW1lbnRlZFxuIik7Cj4gKwo+ICsg ICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2 ZHZpZGVvX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgZHZkdmlkZW9fc3Vi ZGVtdXhfY2xvc2Uocyk7Cj4gKyAgICBkdmR2aWRlb19wbGF5YmFja19jbG9zZShzKTsKPiArICAg IGR2ZHZpZGVvX3ZvbHVtZV9jbG9zZShzKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBkdmR2aWRlb19wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKPiArewo+ ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImR2ZHZpZGVvX3Byb2JlKCk6IG5vdCBp bXBsZW1lbnRlZFxuIik7Cj4gKwo+ICsgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ ICt9Cj4gKwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihEVkRWaWRlb0RlbXV4Q29udGV4 dCwgeCkKPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIGR2ZHZpZGVvX29wdGlvbnNbXSA9IHsKPiAr ICAgIHsidGl0bGUiLCAgICJUaXRsZSBOdW1iZXIiLCAgICAgICAgICAgICAgICAgICAgIE9GRlNF VChvcHRfdGl0bGUpLAo+ICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MSB9LCAgICAgMSwK PiBEVkRWSURFT19USVRMRV9OVU1CRVJfTUFYLCAgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElO R19QQVJBTSB9LAo+ICsgICAgeyJwdHQiLCAgICAgIkVudHJ5IFBUVCBOdW1iZXIiLCAgICAgICAg ICAgICAgICAgT0ZGU0VUKG9wdF9wdHQpLAo+ICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9 MSB9LCAgICAgMSwgICAgICAgICAgRFZEVklERU9fUFRUX05VTUJFUl9NQVgsCj4gICAgICAgICAg IEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7InBnYyIsICAgICAiRW50cnkg UEdDIE51bWJlciAoMD1hdXRvKSIsICAgICAgICBPRkZTRVQob3B0X3BnYyksCj4gICBBVl9PUFRf VFlQRV9JTlQsICAgIHsgLmk2ND0wIH0sICAgICAwLCAgICAgICAgICBEVkRWSURFT19QR0NfTlVN QkVSX01BWCwKPiAgICAgICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAg IHsicGciLCAgICAgICJFbnRyeSBQRyBOdW1iZXIgKDA9YXV0bykiLCAgICAgICAgIE9GRlNFVChv cHRfcGcpLAo+ICAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTAgfSwgICAgIDAsICAgICAg ICAgIERWRFZJREVPX1BHX05VTUJFUl9NQVgsCj4gICAgICAgICAgICBBVl9PUFRfRkxBR19ERUNP RElOR19QQVJBTSB9LAo+ICsgICAgeyJhbmdsZSIsICAgIlZpZGVvIEFuZ2xlIE51bWJlciIsICAg ICAgICAgICAgICAgT0ZGU0VUKG9wdF9hbmdsZSksCj4gICBBVl9PUFRfVFlQRV9JTlQsICAgIHsg Lmk2ND0xIH0sICAgICAxLAo+IERWRFZJREVPX0FOR0xFX05VTUJFUl9NQVgsICAgICAgICAgIEFW X09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7InJlZ2lvbiIsICAiUGxheWJhY2sg UmVnaW9uIE51bWJlciAoMD1mcmVlKSIsICBPRkZTRVQob3B0X3JlZ2lvbiksCj4gICAgQVZfT1BU X1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LCAgICAgMCwKPiBEVkRWSURFT19SRUdJT05fTlVNQkVS X01BWCwgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ICsgICAge05VTEx9 Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBkdmR2aWRlb19jbGFzcyA9IHsKPiAr ICAgIC5jbGFzc19uYW1lID0gIkRWRC1WaWRlbyBkZW11eGVyIiwKPiArICAgIC5pdGVtX25hbWUg ID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4gKyAgICAub3B0aW9uICAgICA9IGR2ZHZpZGVvX29w dGlvbnMsCj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVAo+ICt9Owo+ ICsKPiArY29uc3QgQVZJbnB1dEZvcm1hdCBmZl9kdmR2aWRlb19kZW11eGVyID0gewo+ICsgICAg Lm5hbWUgICAgICAgICAgID0gImR2ZHZpZGVvIiwKPiArICAgIC5sb25nX25hbWUgICAgICA9IE5V TExfSUZfQ09ORklHX1NNQUxMKCJEVkQtVmlkZW8iKSwKPiArICAgIC5wcml2X2NsYXNzICAgICA9 ICZkdmR2aWRlb19jbGFzcywKPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihEVkRWaWRl b0RlbXV4Q29udGV4dCksCj4gKyAgICAuZmxhZ3MgICAgICAgICAgPSBBVkZNVF9OT0ZJTEUgfCBB VkZNVF9OT19CWVRFX1NFRUsgfAo+IEFWRk1UX05PR0VOU0VBUkNIIHwgQVZGTVRfTk9CSU5TRUFS Q0ggfCBBVkZNVF9TSE9XX0lEUyB8IEFWRk1UX1RTX0RJU0NPTlQsCj4gKyAgICAuZmxhZ3NfaW50 ZXJuYWwgPSBGRl9GTVRfSU5JVF9DTEVBTlVQLAo+ICsgICAgLnJlYWRfcHJvYmUgICAgID0gZHZk dmlkZW9fcHJvYmUsCj4gKyAgICAucmVhZF9jbG9zZSAgICAgPSBkdmR2aWRlb19jbG9zZSwKPiAr ICAgIC5yZWFkX2hlYWRlciAgICA9IGR2ZHZpZGVvX3JlYWRfaGVhZGVyLAo+ICsgICAgLnJlYWRf cGFja2V0ICAgID0gZHZkdmlkZW9fcmVhZF9wYWNrZXQsCj4gKyAgICAucmVhZF9zZWVrICAgICAg PSBkdmR2aWRlb19yZWFkX3NlZWsKPiArfTsKPiAtLQo+IDIuMzQuMQo+Cj4KX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9s aXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBv ciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5z dWJzY3JpYmUiLgo=