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 6B27D463C8 for ; Tue, 15 Aug 2023 16:50:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A392768C6DE; Tue, 15 Aug 2023 19:50:02 +0300 (EEST) Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C531E68BFC0 for ; Tue, 15 Aug 2023 19:49:55 +0300 (EEST) Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-4fe15bfb1adso9041827e87.0 for ; Tue, 15 Aug 2023 09:49:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692118194; x=1692722994; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=O2rpe1EUHvmx1fa45krJCHhEVKfW+9S8o9z0ybVLi50=; b=cFIWFsfrnFoo0eF5yn7Fq/W6DbWNymrRxyOdxLx9aNsCh8qB1C9OjVLqlsH7D0wx5V rk50mLIRsspdXGbo3cel0nk9DgG806ixWs0bz8ViP+OVflWZYXw6Jafcy8RVVv7sZPCu 4RdysZePew4xkLeXCClwrpz8fqlruV0/7zote3qsv/vMxJ1jJLPIo8pJhw1mQqZUvWMj QIx6zSDyKHrGFFGy875OAA3k4g5llfxbXk9MELPNrIAsQo+luIfyRn0d59HDX/eXcKZ6 ubPqyokh20pqS1iN1Fls266aXyVa5t++wIKMvjrIFbcvNzN6yk1kkfXOVu/76nlEUKXT 9nQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692118194; x=1692722994; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O2rpe1EUHvmx1fa45krJCHhEVKfW+9S8o9z0ybVLi50=; b=anE0+8pRrdbKcPCMZkE7A4RhQwQ650mjT2jDqF3zCTAGQHXZG93SchTeW0L6mtDYVA JbWkxAcd+vqaMEmh5JceFTavlMvkktoPV3ast2hsqByGpB3ulLftgDNC6IoMSvdfELhm G6VzDYwAiDKYaJXw6a23i/vA8xOciu8DxX22nFWNqNB7mIBKG5iRZI4p6o/riv8N0VVh Q1cUoEb14/t2ErqZlaMFeyIhlDPichld+/mmAe3a0CMvT2yhWs/bsWsIlMagzHVRDFey 8kWt6thCSIuXJA8pfUCt6WycagX7AVsOiVNZ3YFP1Z65lzUd2M5ZGI8zWA2mj++vE7Vu z9Xg== X-Gm-Message-State: AOJu0YzpTciVmGGEo+IjD7MROfowD4TSx20ymNlaFAGVsvrI9YVsiC6m DhgMot6mdYUujLNSEqhl2umfH4ccVk2PsoxeSNWI0hysqoE= X-Google-Smtp-Source: AGHT+IHMnzYDlUaCEY6snwW2Zx6TAdrhs4HM17XlQsrbIgMdHmxWGkE4rf/4OwHr+TiVSM2a9m2+lZDjFLju+h+2IEI= X-Received: by 2002:a05:6512:4012:b0:4fe:19ef:8791 with SMTP id br18-20020a056512401200b004fe19ef8791mr11500959lfb.38.1692118193905; Tue, 15 Aug 2023 09:49:53 -0700 (PDT) MIME-Version: 1.0 References: <20230803060132.501741-1-fei.w.wang@intel.com> <20230803060132.501741-6-fei.w.wang@intel.com> <336d0b1463430f3591a9444b60191cf00f595700.camel@intel.com> In-Reply-To: From: Neal Gompa Date: Tue, 15 Aug 2023 12:49:17 -0400 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v3 6/6] lavc/vaapi_encode: Add VAAPI AV1 encoder 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: "Wang, Fei W" 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: T24gVHVlLCBBdWcgMTUsIDIwMjMgYXQgOTo1OeKAr0FNIERvbmcsIFJ1aWppbmcgPFJ1aWppbmcu RG9uZ0BhbWQuY29tPiB3cm90ZToKPgo+IFtBTUQgT2ZmaWNpYWwgVXNlIE9ubHkgLSBHZW5lcmFs XQo+Cj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiBGcm9tOiBXYW5nLCBGZWkgVyA8ZmVp Lncud2FuZ0BpbnRlbC5jb20+Cj4gU2VudDogV2VkbmVzZGF5LCBBdWd1c3QgOSwgMjAyMyAxMDo1 NSBQTQo+IFRvOiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwo+IENjOiBEb25nLCBSdWlqaW5nIDxS dWlqaW5nLkRvbmdAYW1kLmNvbT4KPiBTdWJqZWN0OiBSZTogW0ZGbXBlZy1kZXZlbF0gW1BBVENI IHYzIDYvNl0gbGF2Yy92YWFwaV9lbmNvZGU6IEFkZCBWQUFQSSBBVjEgZW5jb2Rlcgo+Cj4gT24g TW9uLCAyMDIzLTA4LTA3IGF0IDIyOjIxICswMTAwLCBNYXJrIFRob21wc29uIHdyb3RlOgo+ID4g T24gMDMvMDgvMjAyMyAwNzowMSwgZmVpLncud2FuZy1hdC1pbnRlbC5jb21AZmZtcGVnLm9yZyB3 cm90ZToKPiA+ID4gRnJvbTogRmVpIFdhbmcgPGZlaS53LndhbmdAaW50ZWwuY29tPgo+ID4gPgo+ ID4gPiBTaWduZWQtb2ZmLWJ5OiBGZWkgV2FuZyA8ZmVpLncud2FuZ0BpbnRlbC5jb20+Cj4gPiA+ IC0tLQo+ID4gPiAgIENoYW5nZWxvZyAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gPiA+ ICAgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKPiA+ID4gICBkb2MvZW5j b2RlcnMudGV4aSAgICAgICAgICAgICB8ICAgMTMgKwo+ID4gPiAgIGxpYmF2Y29kZWMvTWFrZWZp bGUgICAgICAgICAgIHwgICAgMSArCj4gPiA+ICAgbGliYXZjb2RlYy9hbGxjb2RlY3MuYyAgICAg ICAgfCAgICAxICsKPiA+ID4gICBsaWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5jICAgICB8ICAxMjUg KysrLQo+ID4gPiAgIGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmggICAgIHwgICAxMiArCj4gPiA+ ICAgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMgfCAxMjI5Cj4gPiA+ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiAgIGxpYmF2Y29kZWMvdmVyc2lvbi5oICAgICAg ICAgIHwgICAgMiArLQo+ID4gPiAgIDkgZmlsZXMgY2hhbmdlZCwgMTM2OCBpbnNlcnRpb25zKCsp LCAxOSBkZWxldGlvbnMoLSkKPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92 YWFwaV9lbmNvZGVfYXYxLmMKPiA+Cj4gPiBJIGFzc3VtZSB0aGlzIGlzIHRlc3RlZCBvbiBJbnRl bCBoYXJkd2FyZS4gIElzIGl0IHRlc3RlZCBvbiBBTUQgYXMKPiA+IHdlbGw/ICAoQXBwYXJlbnRs eSB3b3JraW5nIGluIHJlY2VudCBNZXNhLikKPiBZZXAsIHRlc3RlZCBvbiBBTUQgYXMgd2VsbCwg d29ya2luZy4KPgo+IEFNRCB0ZXN0ZWQgdGhlIHBhdGNoc2V0IG1vbnRocyBhZ286Cj4gaHR0cHM6 Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL21lc2EvbWVzYS8tL21lcmdlX3JlcXVlc3RzLzIyNTg1 Cj4KPiBUaGlzIHBhdGNoIGNoYW5nZWQgYSBsaXR0bGUgY29tcGFyZSB3aXRoIHRoZSB2ZXJzaW9u IGluIENhcnR3aGVlbCwKPiBAUnVpamluZywgQ291bGQgeW91IGhlbHAgdG8gcmV2aWV3IHRoaXMg dmVyc2lvbiBpbiBNTD8gVG8gYXZvaWQgdGhlCj4gZGlmZnMgYnJlYWsgeW91LiBUaGFua3MuCj4K PiA+Cj4gPgo+ID4gPiBkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCj4gPiA+IGlu ZGV4IGJiZGE0ZjRmZDQuLmU4NmY3NDJjZDMgMTAwNjQ0Cj4gPiA+IC0tLSBhL0NoYW5nZWxvZwo+ ID4gPiArKysgYi9DaGFuZ2Vsb2cKPiA+ID4gQEAgLTI3LDYgKzI3LDcgQEAgdmVyc2lvbiA8bmV4 dD46Cj4gPiA+ICAgLSBCaXRzdHJlYW0gZmlsdGVyIGZvciBjb252ZXJ0aW5nIFZWQyBmcm9tIE1Q NCB0byBBbm5leCBCCj4gPiA+ICAgLSBzY2FsZV92dCBmaWx0ZXIgZm9yIHZpZGVvdG9vbGJveAo+ ID4gPiAgIC0gdHJhbnNwb3NlX3Z0IGZpbHRlciBmb3IgdmlkZW90b29sYm94Cj4gPiA+ICstIFZB QVBJIEFWMSBlbmNvZGVyCj4gPiA+Cj4gPiA+ICAgdmVyc2lvbiA2LjA6Cj4gPiA+ICAgLSBSYWRp YW5jZSBIRFIgaW1hZ2Ugc3VwcG9ydAo+ID4gPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29u ZmlndXJlCj4gPiA+IGluZGV4IDk5Mzg4ZTc2NjQuLjY4YTIzOGE4MTkgMTAwNzU1Cj4gPiA+IC0t LSBhL2NvbmZpZ3VyZQo+ID4gPiArKysgYi9jb25maWd1cmUKPiA+ID4gQEAgLTMzMjIsNiArMzMy Miw4IEBAIGF2MV9xc3ZfZGVjb2Rlcl9zZWxlY3Q9InFzdmRlYyIKPiA+ID4gICBhdjFfcXN2X2Vu Y29kZXJfc2VsZWN0PSJxc3ZlbmMiCj4gPiA+ICAgYXYxX3Fzdl9lbmNvZGVyX2RlcHM9ImxpYnZw bCIKPiA+ID4gICBhdjFfYW1mX2VuY29kZXJfZGVwcz0iYW1mIgo+ID4gPiArYXYxX3ZhYXBpX2Vu Y29kZXJfZGVwcz0iVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxIgo+ID4gPiArYXYxX3Zh YXBpX2VuY29kZXJfc2VsZWN0PSJjYnNfYXYxIHZhYXBpX2VuY29kZSIKPiA+ID4KPiA+ID4gICAj IHBhcnNlcnMKPiA+ID4gICBhYWNfcGFyc2VyX3NlbGVjdD0iYWR0c19oZWFkZXIgbXBlZzRhdWRp byIKPiA+ID4gQEAgLTcxMDYsNiArNzEwOCw3IEBAIGlmIGVuYWJsZWQgdmFhcGk7IHRoZW4KPiA+ ID4gICAgICAgY2hlY2tfdHlwZSAidmEvdmEuaCB2YS92YV9lbmNfanBlZy5oIgo+ID4gPiAiVkFF bmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVySlBFRyIKPiA+ID4gICAgICAgY2hlY2tfdHlwZSAidmEv dmEuaAo+ID4gPiB2YS92YV9lbmNfdnA4LmgiICAiVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVy VlA4Igo+ID4gPiAgICAgICBjaGVja190eXBlICJ2YS92YS5oCj4gPiA+IHZhL3ZhX2VuY192cDku aCIgICJWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJWUDkiCj4gPiA+ICsgICAgY2hlY2tfdHlw ZSAidmEvdmEuaAo+ID4gPiB2YS92YV9lbmNfYXYxLmgiICAiVkFFbmNQaWN0dXJlUGFyYW1ldGVy QnVmZmVyQVYxIgo+ID4gPiAgIGZpCj4gPiA+Cj4gPiA+ICAgaWYgZW5hYmxlZF9hbGwgb3BlbmNs IGxpYmRybSA7IHRoZW4KPiA+ID4gZGlmZiAtLWdpdCBhL2RvYy9lbmNvZGVycy50ZXhpIGIvZG9j L2VuY29kZXJzLnRleGkKPiA+ID4gaW5kZXggMjVkNmI3ZjA5ZS4uZmIzMzFlYmQ4ZSAxMDA2NDQK PiA+ID4gLS0tIGEvZG9jL2VuY29kZXJzLnRleGkKPiA+ID4gKysrIGIvZG9jL2VuY29kZXJzLnRl eGkKPiA+ID4gQEAgLTM5OTEsNiArMzk5MSwxOSBAQCBBdmVyYWdlIHZhcmlhYmxlIGJpdHJhdGUu Cj4gPiA+ICAgRWFjaCBlbmNvZGVyIGFsc28gaGFzIGl0cyBvd24gc3BlY2lmaWMgb3B0aW9uczoK PiA+ID4gICBAdGFibGUgQG9wdGlvbgo+ID4gPgo+ID4gPiArQGl0ZW0gYXYxX3ZhYXBpCj4gPiA+ ICtAb3B0aW9ue3Byb2ZpbGV9IHNldHMgdGhlIHZhbHVlIG9mIEBlbXBoe3NlcV9wcm9maWxlfS4K PiA+ID4gK0BvcHRpb257dGllcn0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7c2VxX3RpZXJ9Lgo+ ID4gPiArQG9wdGlvbntsZXZlbH0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7c2VxX2xldmVsX2lk eH0uCj4gPiA+ICsKPiA+ID4gK0B0YWJsZSBAb3B0aW9uCj4gPiA+ICtAaXRlbSB0aWxlcwo+ID4g PiArU2V0IHRoZSBudW1iZXIgb2YgdGlsZXMgdG8gZW5jb2RlIHRoZSBpbnB1dCB2aWRlbyB3aXRo LCBhcyBjb2x1bW5zCj4gPiA+IHggcm93cy4KPiA+ID4gKyhkZWZhdWx0IGlzIDF4MSkuCj4gPgo+ ID4gUHJvYmFibHkgbmVlZHMgc29tZSBjbGFyaWZpY2F0aW9uIHRoYXQgbGFyZ2UgcmVzb2x1dGlv bnMgbXVzdCBiZQo+ID4gc3BsaXQgaW50byB0aWxlcz8gIE1heWJlIGFuICJhdXRvIiB2YWx1ZSBm b3IgdGhpcyAobWVhbmluZyB1c2UgYXMgZmV3Cj4gPiBhcyBwb3NzaWJsZSksIGFuZCBsZXQgZXhw bGljaXQgIjF4MSIgZmFpbCBpZiB0aGUgcmVzb2x1dGlvbiBpcyB0b28KPiA+IGxhcmdlLgo+ID4K PiA+ID4gK0BpdGVtIHRpbGVfZ3JvdXBzCj4gPiA+ICtTZXQgdGlsZSBncm91cHMgbnVtYmVyIChk ZWZhdWx0IGlzIDEpLgo+ID4KPiA+IE1lYW5pbmcgd2hhdD8gIEl0IHNwbGl0cyBpbnRvIHRpbGUg Z3JvdXAgT0JVcyBjb250YWluaW5nIGVxdWFsCj4gPiBudW1iZXJzIG9mIHRpbGVzLCBvciBvZiBl cXVhbCBzaXplIGluIGJpdHMsIG9yIHNvbWV0aGluZyBlbHNlPwo+ID4KPiA+ID4gK0BlbmQgdGFi bGUKPiA+ID4gKwo+ID4gPiAgIEBpdGVtIGgyNjRfdmFhcGkKPiA+ID4gICBAb3B0aW9ue3Byb2Zp bGV9IHNldHMgdGhlIHZhbHVlIG9mIEBlbXBoe3Byb2ZpbGVfaWRjfSBhbmQgdGhlCj4gPiA+IEBl bXBoe2NvbnN0cmFpbnRfc2V0Kl9mbGFnfXMuCj4gPiA+ICAgQG9wdGlvbntsZXZlbH0gc2V0cyB0 aGUgdmFsdWUgb2YgQGVtcGh7bGV2ZWxfaWRjfS4KPiA+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29k ZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gPiA+IGluZGV4IGE2YjJlY2JiMjIu LjQ3M2FmYjQ0NzEgMTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiA+ID4g KysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+ID4gPiBAQCAtMjU4LDYgKzI1OCw3IEBAIE9CSlMt JChDT05GSUdfQVYxX01FRElBQ09ERUNfREVDT0RFUikgICs9Cj4gPiA+IG1lZGlhY29kZWNkZWMu bwo+ID4gPiAgIE9CSlMtJChDT05GSUdfQVYxX01FRElBQ09ERUNfRU5DT0RFUikgICs9IG1lZGlh Y29kZWNlbmMubwo+ID4gPiAgIE9CSlMtJChDT05GSUdfQVYxX05WRU5DX0VOQ09ERVIpICAgICAg ICs9IG52ZW5jX2F2MS5vIG52ZW5jLm8KPiA+ID4gICBPQkpTLSQoQ09ORklHX0FWMV9RU1ZfRU5D T0RFUikgICAgICAgICArPSBxc3ZlbmNfYXYxLm8KPiA+ID4gK09CSlMtJChDT05GSUdfQVYxX1ZB QVBJX0VOQ09ERVIpICAgICAgICs9IHZhYXBpX2VuY29kZV9hdjEubwo+ID4gPiBhdjFfbGV2ZWxz Lm8KPiA+ID4gICBPQkpTLSQoQ09ORklHX0FWUk5fREVDT0RFUikgICAgICAgICAgICArPSBhdnJu ZGVjLm8KPiA+ID4gICBPQkpTLSQoQ09ORklHX0FWUlBfREVDT0RFUikgICAgICAgICAgICArPSBy MjEwZGVjLm8KPiA+ID4gICBPQkpTLSQoQ09ORklHX0FWUlBfRU5DT0RFUikgICAgICAgICAgICAr PSByMjEwZW5jLm8KPiA+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9s aWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gPiA+IGluZGV4IDg3NzVkMTVhNGYuLmM0M2MxZDdiNDgg MTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiA+ID4gKysrIGIvbGli YXZjb2RlYy9hbGxjb2RlY3MuYwo+ID4gPiBAQCAtODQ0LDYgKzg0NCw3IEBAIGV4dGVybiBjb25z dCBGRkNvZGVjIGZmX2F2MV9udmVuY19lbmNvZGVyOwo+ID4gPiAgIGV4dGVybiBjb25zdCBGRkNv ZGVjIGZmX2F2MV9xc3ZfZGVjb2RlcjsKPiA+ID4gICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9h djFfcXN2X2VuY29kZXI7Cj4gPiA+ICAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX2FtZl9l bmNvZGVyOwo+ID4gPiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX3ZhYXBpX2VuY29kZXI7 Cj4gPiA+ICAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlib3BlbmgyNjRfZW5jb2RlcjsKPiA+ ID4gICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuaDI2NF9kZWNvZGVyOwo+ID4gPiAg IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfYW1mX2VuY29kZXI7Cj4gPiA+IGRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5jIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUu Ywo+ID4gPiBpbmRleCAyNjA0ZjEyYjllLi4yOTA3ZTE1OWZiIDEwMDY0NAo+ID4gPiAtLS0gYS9s aWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5jCj4gPiA+ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5j b2RlLmMKPiA+ID4gQEAgLTY2OSw2ICs2NjksMTUgQEAgc3RhdGljIGludAo+ID4gPiB2YWFwaV9l bmNvZGVfc2V0X291dHB1dF90aW1lc3RhbXAoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ID4gPiAg IHsKPiA+ID4gICAgICAgVkFBUElFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRh Owo+ID4gPgo+ID4gPiArICAgIC8vIEFWMSBwYWNrcyBQIGZyYW1lIGFuZCBuZXh0IEIgZnJhbWUg aW50byBvbmUgcGt0LCBhbmQgdXNlcwo+ID4gPiB0aGUgb3RoZXIKPiA+ID4gKyAgICAvLyByZXBl YXQgZnJhbWUgaGVhZGVyIHBrdCBhdCB0aGUgZGlzcGxheSBvcmRlciBwb3NpdGlvbiBvZgo+ID4g PiB0aGUgUCBmcmFtZQo+ID4gPiArICAgIC8vIHRvIGluZGljYXRlIGl0cyBmcmFtZSBpbmRleC4g RWFjaCBmcmFtZSBoYXMgYSBjb3JyZXNwb25kaW5nCj4gPiA+IHBrdCBpbiBpdHMKPiA+ID4gKyAg ICAvLyBkaXNwbGF5IG9yZGVyIHBvc2l0aW9uLiBTbyBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGRl bGF5IGZvcgo+ID4gPiBBVjEgdGltZXN0YW1wLgo+ID4gPiArICAgIGlmIChhdmN0eC0+Y29kZWNf aWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4gPiA+ICsgICAgICAgIHBrdC0+ZHRzID0gcGt0LT5w dHMgLSBjdHgtPmR0c19wdHNfZGlmZjsKPiA+ID4gKyAgICAgICAgcmV0dXJuIDA7Cj4gPiA+ICsg ICAgfQo+ID4KPiA+IFRoaXMgZG9lc24ndCBnZXQgeW91IHRoZSByaWdodCByZXN1bHQsIHRob3Vn aD8gIFRoZSBQVFMgYW5kIERUUyBvbgo+ID4gZXZlcnkgQVYxIHBhY2tldCB3YW50IHRvIGJlIHRo ZSBzYW1lLgo+Cj4gVGhlIHJlc3VsdCB0ZXN0ZWQgZ29vZCB3aGljaCBjYW4gYmUgcGxheWVkIG5v cm1hbGx5LiBKdXN0IGFsaWduZWQgd2l0aAo+IG90aGVyIHZhYXBpIGVuY29kZXJzIHRoYXQgdGhl IDFzdCBmcmFtZSBzdGFydCB3aXRoIDAvLTEgb2YgUFRTL0RUUyBpZgo+IGhhdmUgQiBmcmFtZS4g U2V0IFBUUy9EVFMgdG8gc2FtZSBhbHNvIGxvb2tzIGdvb2QuCj4KPiA+Cj4gPiBJbiBhbnkgY2Fz ZSwgcGxlYXNlIGRvbid0IHB1dCB0ZXN0cyBmb3IgY29kZWMgSUQgaW4gdGhlIGNvbW1vbgo+ID4g Y29kZS4gIEkgc3VnZ2VzdCB0aGF0IHRoZSB0aW1lc3RhbXAgYmVoYXZpb3VyIHdhbnRzIHRvIGJl IGEgbmV3Cj4gPiBGTEFHXyouCj4gPgo+ID4gPiArCj4gPiA+ICAgICAgIGlmIChjdHgtPm91dHB1 dF9kZWxheSA9PSAwKSB7Cj4gPiA+ICAgICAgICAgICBwa3QtPmR0cyA9IHBrdC0+cHRzOwo+ID4g PiAgICAgICB9IGVsc2UgaWYgKHBpYy0+ZW5jb2RlX29yZGVyIDwgY3R4LT5kZWNvZGVfZGVsYXkp IHsKPiA+ID4gQEAgLTY4OSw5ICs2OTgsMTAgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0 cHV0KEFWQ29kZWNDb250ZXh0Cj4gPiA+ICphdmN0eCwKPiA+ID4gICB7Cj4gPiA+ICAgICAgIFZB QVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ID4gICAgICAgVkFD b2RlZEJ1ZmZlclNlZ21lbnQgKmJ1Zl9saXN0LCAqYnVmOwo+ID4gPiAtICAgIFZBU3RhdHVzIHZh czsKPiA+ID4gKyAgICBBVlBhY2tldCAqcGt0X3B0ciA9IHBrdDsKPiA+ID4gICAgICAgaW50IHRv dGFsX3NpemUgPSAwOwo+ID4gPiAgICAgICB1aW50OF90ICpwdHI7Cj4gPiA+ICsgICAgVkFTdGF0 dXMgdmFzOwo+ID4gPiAgICAgICBpbnQgZXJyOwo+ID4gPgo+ID4gPiAgICAgICBlcnIgPSB2YWFw aV9lbmNvZGVfd2FpdChhdmN0eCwgcGljKTsKPiA+ID4gQEAgLTcxMSwxMSArNzIxLDUyIEBAIHN0 YXRpYyBpbnQgdmFhcGlfZW5jb2RlX291dHB1dChBVkNvZGVjQ29udGV4dAo+ID4gPiAqYXZjdHgs Cj4gPiA+ICAgICAgIGZvciAoYnVmID0gYnVmX2xpc3Q7IGJ1ZjsgYnVmID0gYnVmLT5uZXh0KQo+ ID4gPiAgICAgICAgICAgdG90YWxfc2l6ZSArPSBidWYtPnNpemU7Cj4gPiA+Cj4gPiA+IC0gICAg ZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwgdG90YWxfc2l6ZSwgMCk7Cj4g PiA+IC0gICAgcHRyID0gcGt0LT5kYXRhOwo+ID4gPiArICAgIC8qKiByZXBhY2sgYXYxIGNvZGVk IGZyYW1lIGZvciBub3QgZGlzcGxheSBhbmQgcmVwZWF0IGZyYW1lcwo+ID4gPiAqLwo+ID4gPiAr ICAgIGlmIChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4gPiA+ICsgICAg ICAgIGludCBkaXNwbGF5X2ZyYW1lID0gcGljLT5kaXNwbGF5X29yZGVyIDw9IHBpYy0KPiA+ID4g PmVuY29kZV9vcmRlcjsKPiA+ID4KPiA+ID4gLSAgICBpZiAoZXJyIDwgMCkKPiA+ID4gLSAgICAg ICAgZ290byBmYWlsX21hcHBlZDsKPiA+ID4gKyAgICAgICAgaWYgKGRpc3BsYXlfZnJhbWUpIHsK PiA+ID4gKyAgICAgICAgICAgIHRvdGFsX3NpemUgKz0gY3R4LT5oZWFkZXJfZGF0YV9zaXplOwo+ ID4gPiArICAgICAgICAgICAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwg dG90YWxfc2l6ZSwgMCk7Cj4gPiA+ICsgICAgICAgICAgICBpZiAoZXJyIDwgMCkKPiA+ID4gKyAg ICAgICAgICAgICAgICBnb3RvIGZhaWxfbWFwcGVkOwo+ID4gPiArICAgICAgICAgICAgcHRyID0g cGt0LT5kYXRhOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICBpZiAoY3R4LT5oZWFkZXJfZGF0 YV9zaXplKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgbWVtY3B5KHB0ciwgY3R4LT5oZWFkZXJf ZGF0YSwgY3R4LQo+ID4gPiA+aGVhZGVyX2RhdGFfc2l6ZSk7Cj4gPiA+ICsgICAgICAgICAgICAg ICAgcHRyICs9IGN0eC0+aGVhZGVyX2RhdGFfc2l6ZTsKPiA+ID4gKyAgICAgICAgICAgICAgICBj dHgtPmhlYWRlcl9kYXRhX3NpemUgPSAwOwo+ID4gPiArICAgICAgICAgICAgfQo+ID4gPiArICAg ICAgICB9IGVsc2Ugewo+ID4gPiArICAgICAgICAgICAgY3R4LT5oZWFkZXJfZGF0YSA9IGF2X3Jl YWxsb2MoY3R4LT5oZWFkZXJfZGF0YSwKPiA+ID4gdG90YWxfc2l6ZSk7Cj4gPiA+ICsgICAgICAg ICAgICBpZiAoIWN0eC0+aGVhZGVyX2RhdGEpIHsKPiA+ID4gKyAgICAgICAgICAgICAgICBlcnIg PSBBVkVSUk9SKEVOT01FTSk7Cj4gPiA+ICsgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBl ZDsKPiA+ID4gKyAgICAgICAgICAgIH0KPiA+ID4gKyAgICAgICAgICAgIHB0ciA9IGN0eC0+aGVh ZGVyX2RhdGE7Cj4gPiA+ICsgICAgICAgICAgICBjdHgtPmhlYWRlcl9kYXRhX3NpemUgPSB0b3Rh bF9zaXplOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICBpZiAocGljLT50YWlsX3NpemUpIHsK PiA+ID4gKyAgICAgICAgICAgICAgICBpZiAoY3R4LT50YWlsX3BrdC0+c2l6ZSkgewo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEFWRVJST1JfQlVHKTsKPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBlZDsKPiA+ID4gKyAgICAgICAgICAgICAg ICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgICAgICBlcnIgPSBmZl9nZXRfZW5jb2RlX2J1 ZmZlcihhdmN0eCwgY3R4LT50YWlsX3BrdCwKPiA+ID4gcGljLT50YWlsX3NpemUsIDApOwo+ID4g PiArICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICBnb3RvIGZhaWxfbWFwcGVkOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICAgbWVtY3B5 KGN0eC0+dGFpbF9wa3QtPmRhdGEsIHBpYy0+dGFpbF9kYXRhLCBwaWMtCj4gPiA+ID50YWlsX3Np emUpOwo+ID4gPiArICAgICAgICAgICAgICAgIHBrdF9wdHIgPSBjdHgtPnRhaWxfcGt0Owo+ID4g PiArICAgICAgICAgICAgfQo+ID4gPiArICAgICAgICB9Cj4gPiA+ICsgICAgfSBlbHNlIHsKPiA+ ID4gKyAgICAgICAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwgdG90YWxf c2l6ZSwgMCk7Cj4gPiA+ICsgICAgICAgIHB0ciA9IHBrdC0+ZGF0YTsKPiA+ID4gKwo+ID4gPiAr ICAgICAgICBpZiAoZXJyIDwgMCkKPiA+ID4gKyAgICAgICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7 Cj4gPiA+ICsgICAgfQo+ID4KPiA+IEknbSBub3QgY29udmluY2VkIHRoYXQgdGhpcyByZXBlYXRl ZC1yZWFsbG9jLWFuZC1jb3B5IHN0cnVjdHVyZSBpbgo+ID4gdGhlIG1haW4gY29udGV4dCBpcyBh IGdvb2QgYXBwcm9hY2guCj4gPgo+ID4gSG93IGFib3V0IHNvbWV0aGluZyBsaWtlIHN0b3Jpbmcg dGhlIG91dHB1dCBidWZmZXIgZm9yIGV2ZXJ5IHBpY3R1cmUKPiA+IGluIHRoYXQgcGljdHVyZSBh cyBpdCBpcyBnZW5lcmF0ZWQgKGNvdWxkIGV2ZW4gc3RheSBpbiB0aGUgVkFCdWZmZXIKPiA+IHdp dGhvdXQgbWFwcGluZyBpdCBpZiB0aGF0IHdvcmtlZD8pLCB0aGVuIHdoZW4geW91IGdldCBhIGRp c3BsYXktbm93Cj4gPiBwaWN0dXJlIGNvbmNhdGVuYXRlIGFsbCB0aGUgb3VzdGFuZGluZyBmcmFt ZXMgdG9nZXRoZXIgaW4gb3JkZXIgaW50bwo+ID4gdGhlIHBhY2tldCAod2l0aCBhIHNpbmdsZSBj b3B5KS4KPgo+IFlvdXIgd2F5IGlzIGZlYXNpYmxlLCBtYXkgbmVlZCB0byBhZGQgYWRkaXRpb25h bCBmbGFnIGluIHBpYyB0bwo+IGluZGljYXRlIHRoZSBwaWMgaXMgY29tcGxldGVkIGJ1dCBub3Qg ZHVtcGVkIGFuZCByZWxlYXNlIHBpYyBhZnRlcgo+IGR1bXBlZCwgb3IganVzdCBkZWxheSB0byBj aGFuZ2UgcGljIHN0YXRlIHRvIGNvbXBsZXRlZC4gSSB3aWxsIHRyeSBpdC4KPgo+ID4KPiA+IFRo ZSB0YWlsIGRhdGEgaXMgdHJpdmlhbCB0byBnZW5lcmF0ZSBvbiB0aGUgZmx5IChpdCdzIG9ubHkg dGhyZWUKPiA+IGJ5dGVzKSwgc28gc3RvcmluZyBpdCBkb2VzIG5vdCBzZWVtIHVzZWZ1bC4KPiA+ Cj4gPiA+Cj4gPiA+ICAgICAgIGZvciAoYnVmID0gYnVmX2xpc3Q7IGJ1ZjsgYnVmID0gYnVmLT5u ZXh0KSB7Cj4gPiA+ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1 dCBidWZmZXI6ICV1IGJ5dGVzICIKPiA+ID4gQEAgLTcyNiwxMCArNzc3LDEwIEBAIHN0YXRpYyBp bnQgdmFhcGlfZW5jb2RlX291dHB1dChBVkNvZGVjQ29udGV4dAo+ID4gPiAqYXZjdHgsCj4gPiA+ ICAgICAgIH0KPiA+ID4KPiA+ID4gICAgICAgaWYgKHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVf SURSKQo+ID4gPiAtICAgICAgICBwa3QtPmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsKPiA+ID4g KyAgICAgICAgcGt0X3B0ci0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZOwo+ID4gPgo+ID4gPiAt ICAgIHBrdC0+cHRzID0gcGljLT5wdHM7Cj4gPiA+IC0gICAgcGt0LT5kdXJhdGlvbiA9IHBpYy0+ ZHVyYXRpb247Cj4gPiA+ICsgICAgcGt0X3B0ci0+cHRzID0gcGljLT5wdHM7Cj4gPiA+ICsgICAg cGt0X3B0ci0+ZHVyYXRpb24gPSBwaWMtPmR1cmF0aW9uOwo+ID4gPgo+ID4gPiAgICAgICB2YXMg PSB2YVVubWFwQnVmZmVyKGN0eC0+aHdjdHgtPmRpc3BsYXksIHBpYy0+b3V0cHV0X2J1ZmZlcik7 Cj4gPiA+ICAgICAgIGlmICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NFU1MpIHsKPiA+ID4gQEAgLTc0 Miw4ICs3OTMsOCBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRl eHQKPiA+ID4gKmF2Y3R4LAo+ID4gPiAgICAgICAvLyBmb3Igbm8tZGVsYXkgZW5jb2RlcnMgdGhp cyBpcyBoYW5kbGVkIGluIGdlbmVyaWMgY29kZWMKPiA+ID4gICAgICAgaWYgKGF2Y3R4LT5jb2Rl Yy0+Y2FwYWJpbGl0aWVzICYgQVZfQ09ERUNfQ0FQX0RFTEFZICYmCj4gPiA+ICAgICAgICAgICBh dmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0NPUFlfT1BBUVVFKSB7Cj4gPiA+IC0gICAgICAg IHBrdC0+b3BhcXVlICAgICA9IHBpYy0+b3BhcXVlOwo+ID4gPiAtICAgICAgICBwa3QtPm9wYXF1 ZV9yZWYgPSBwaWMtPm9wYXF1ZV9yZWY7Cj4gPiA+ICsgICAgICAgIHBrdF9wdHItPm9wYXF1ZSAg ICAgPSBwaWMtPm9wYXF1ZTsKPiA+ID4gKyAgICAgICAgcGt0X3B0ci0+b3BhcXVlX3JlZiA9IHBp Yy0+b3BhcXVlX3JlZjsKPiA+ID4gICAgICAgICAgIHBpYy0+b3BhcXVlX3JlZiA9IE5VTEw7Cj4g PiA+ICAgICAgIH0KPiA+ID4KPiA+ID4gQEAgLTc1Miw2ICs4MDMsOSBAQCBzdGF0aWMgaW50IHZh YXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRleHQKPiA+ID4gKmF2Y3R4LAo+ID4gPgo+ID4g PiAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCByZWFkIGZvciBwaWMK PiA+ID4gJSJQUklkNjQiLyUiUFJJZDY0Ii5cbiIsCj4gPiA+ICAgICAgICAgICAgICBwaWMtPmRp c3BsYXlfb3JkZXIsIHBpYy0+ZW5jb2RlX29yZGVyKTsKPiA+ID4gKwo+ID4gPiArICAgIHZhYXBp X2VuY29kZV9zZXRfb3V0cHV0X3RpbWVzdGFtcChhdmN0eCwgcGljLCBwa3RfcHRyKTsKPiA+ID4g Kwo+ID4gPiAgICAgICByZXR1cm4gMDsKPiA+ID4KPiA+ID4gICBmYWlsX21hcHBlZDoKPiA+ID4g QEAgLTExMjgsOSArMTE4MiwxOSBAQCBzdGF0aWMgaW50Cj4gPiA+IHZhYXBpX2VuY29kZV9waWNr X25leHQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ID4gPgo+ID4gPiAgICAgICB2YWFwaV9lbmNv ZGVfYWRkX3JlZihhdmN0eCwgcGljLCBwaWMsIDAsIDEsIDApOwo+ID4gPiAgICAgICBpZiAocGlj LT50eXBlICE9IFBJQ1RVUkVfVFlQRV9JRFIpIHsKPiA+ID4gLSAgICAgICAgdmFhcGlfZW5jb2Rl X2FkZF9yZWYoYXZjdHgsIHBpYywgc3RhcnQsCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCwKPiA+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYl9jb3VudGVyID4gMCwgMCk7Cj4gPiA+ICsgICAgICAgIC8vIFRPRE86 IGFwcGx5IGJvdGggcHJldmlvdXMgYW5kIGZvcndhcmQgbXVsdGkgcmVmZXJlbmNlCj4gPiA+IGZv ciBhbGwgdmFhcGkgZW5jb2RlcnMuCj4gPiA+ICsgICAgICAgIC8vIEFuZCBMMC9MMSByZWZlcmVu Y2UgZnJhbWUgbnVtYmVyIGNhbiBiZSBzZXQgZHluYW1pY2FsbHkKPiA+ID4gdGhyb3VnaCBxdWVy eQo+ID4gPiArICAgICAgICAvLyBWQUNvbmZpZ0F0dHJpYkVuY01heFJlZkZyYW1lcyBhdHRyaWJ1 dGUuCj4gPiA+ICsgICAgICAgIGlmIChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYx KSB7Cj4gPiA+ICsgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5uYl9uZXh0X3ByZXY7 IGkrKykKPiA+ID4gKyAgICAgICAgICAgICAgICB2YWFwaV9lbmNvZGVfYWRkX3JlZihhdmN0eCwg cGljLCBjdHgtCj4gPiA+ID5uZXh0X3ByZXZbaV0sCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QLAo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJfY291bnRlciA+IDAsIDApOwo+ID4K PiA+IFNvIGFuIHVuZGlzY2xvc2VkIGFpbSBvZiB0aGUgcHJldmlvdXMgcGF0Y2ggd2FzIHRvIG1h a2UgdGhpcyBleHRyYQo+ID4gbGlzdCBvZiB0aGUgbW9zdCByZWNlbnQgTiBmcmFtZXMgZm9yIHRo aXMgdG8gdXNlIHdpdGggUCBmcmFtZXMgb25seT8KPgo+IEN1cnJlbnRseSwgeWVzLiBBcyB0aGUg VE9ETyBjb21tZW50IHNheXMsIEkgd2lsbCBhcHBseSBpdCB0byBhbGwgb3RoZXIKPiBjb2RlY3Mg YW5kIEIgZnJhbWUgbmV4dCwgaXQgd2lsbCBuZWVkIGxvdHMgb2YgdGVzdCBvbiBkaWZmZXJlbnQK PiBoYXJkd2FyZS4gQWRkIHRoaXMgZm9yIEFWMSBoZXJlIGlzIHRvIGFsaWduIHdpdGggVlBMIHdo aWNoIHVzZSAyCj4gcHJldmlvdXMgcmVmZXJlbmNlIGZvciBQIGZyYW1lLiBCYXNlIG9uIG91ciB0 ZXN0LCAyIHJlZmVyZW5jZSBmcmFtZSBmb3IKPiBQIHdpbGwgaW1wcm92ZSB+NSUgQkQtcmF0ZSBm b3IgcXVhbGl0eSwgc28gdGhhdCBjYW4gbWFrZSBpdCBwb3NzaWJsZSB0bwo+IGxldCB1c2VyIGdl dCBzYW1lIHF1YWxpdHkgd2l0aCBWUEwgYWZ0ZXIgYWRqdXN0aW5nIGFuZCBhbGlnbmluZyBlbmNv ZGVyCj4gb3B0aW9ucy4KPgo+ID4KPiA+IFdoeSB0aGlzIHBhcnRjdWxhciBzdHJ1Y3R1cmUgZm9y IFAgZnJhbWVzIG9ubHksIHRob3VnaD8gIFNlZW1zIGxpa2UKPiA+IGlmIHlvdSBzdXBwb3J0IGV4 dHJhIHJlZmVyZW5jZXMgdGhlbiBvdGhlciBjb2RlY3MgY291bGQgYWxzbyBtYWtlIHVzZQo+ID4g b2YgdGhlbSBpbiBlaXRoZXIgZGlyZWN0aW9uLCBzbyB3ZSB3b3VsZCBiZSBiZXR0ZXIgb2ZmIGhp bnRpbmcgdGhhdAo+ID4gdGhlIGNvZGVjIHdvdWxkIGxpa2UgdXAgdG8gTiByZWZlcmVuY2VzIGFu ZCB0aGVuIHVzaW5nIHRoZSBjb250ZW50cwo+ID4gb2YgdGhlIGV4aXN0aW5nIERQQiwgcGx1cyBr ZWVwIGV4dHJhcyBpZiB0aGVyZSBpcyBzcGFjZS4KPiA+Cj4gPiA+ICsgICAgICAgIH0gZWxzZQo+ ID4gPiArICAgICAgICAgICAgdmFhcGlfZW5jb2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgc3RhcnQs Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWMtPnR5cGUgPT0gUElD VFVSRV9UWVBFX1AsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiX2Nv dW50ZXIgPiAwLCAwKTsKPiA+ID4gKwo+ID4gPiAgICAgICAgICAgdmFhcGlfZW5jb2RlX2FkZF9y ZWYoYXZjdHgsIHBpYywgY3R4LT5uZXh0X3ByZXZbY3R4LQo+ID4gPiA+bmJfbmV4dF9wcmV2IC0g MV0sIDAsIDAsIDEpOwo+ID4gPiAgICAgICB9Cj4gPiA+Cj4gPiA+IEBAIC0xMjkyLDYgKzEzNTYs MTkgQEAgaW50Cj4gPiA+IGZmX3ZhYXBpX2VuY29kZV9yZWNlaXZlX3BhY2tldChBVkNvZGVjQ29u dGV4dCAqYXZjdHgsIEFWUGFja2V0Cj4gPiA+ICpwa3QpCj4gPiA+ICAgICAgIEFWRnJhbWUgKmZy YW1lID0gY3R4LT5mcmFtZTsKPiA+ID4gICAgICAgaW50IGVycjsKPiA+ID4KPiA+ID4gK3N0YXJ0 Ogo+ID4gPiArICAgIC8qKiBpZiBubyBCIGZyYW1lIGJlZm9yZSByZXBlYXQgUCBmcmFtZSwgc2Vu dCByZXBlYXQgUCBmcmFtZQo+ID4gPiBvdXQuICovCj4gPiA+ICsgICAgaWYgKGF2Y3R4LT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9BVjEgJiYgY3R4LT50YWlsX3BrdC0+c2l6ZSkKPiA+ID4gewo+ ID4gPiArICAgICAgICBmb3IgKFZBQVBJRW5jb2RlUGljdHVyZSAqdG1wID0gY3R4LT5waWNfc3Rh cnQ7IHRtcDsgdG1wID0KPiA+ID4gdG1wLT5uZXh0KSB7Cj4gPiA+ICsgICAgICAgICAgICBpZiAo dG1wLT50eXBlID09IFBJQ1RVUkVfVFlQRV9CICYmIHRtcC0+cHRzIDwgY3R4LQo+ID4gPiA+dGFp bF9wa3QtPnB0cykKPiA+ID4gKyAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKyAgICAgICAg ICAgIGVsc2UgaWYgKCF0bXAtPm5leHQpIHsKPiA+ID4gKyAgICAgICAgICAgICAgICBhdl9wYWNr ZXRfbW92ZV9yZWYocGt0LCBjdHgtPnRhaWxfcGt0KTsKPiA+ID4gKyAgICAgICAgICAgICAgICBn b3RvIGVuZDsKPiA+ID4gKyAgICAgICAgICAgIH0KPiA+ID4gKyAgICAgICAgfQo+ID4gPiArICAg IH0KPiA+ID4gKwo+ID4gPiAgICAgICBlcnIgPSBmZl9lbmNvZGVfZ2V0X2ZyYW1lKGF2Y3R4LCBm cmFtZSk7Cj4gPiA+ICAgICAgIGlmIChlcnIgPCAwICYmIGVyciAhPSBBVkVSUk9SX0VPRikKPiA+ ID4gICAgICAgICAgIHJldHVybiBlcnI7Cj4gPiA+IEBAIC0xMzU2LDE3ICsxNDMzLDIxIEBAIGlu dAo+ID4gPiBmZl92YWFwaV9lbmNvZGVfcmVjZWl2ZV9wYWNrZXQoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBBVlBhY2tldAo+ID4gPiAqcGt0KQo+ID4gPiAgICAgICAgICAgcmV0dXJuIGVycjsKPiA+ ID4gICAgICAgfQo+ID4gPgo+ID4gPiAtICAgIHZhYXBpX2VuY29kZV9zZXRfb3V0cHV0X3RpbWVz dGFtcChhdmN0eCwgcGljLCBwa3QpOwo+ID4gPiAtICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiT3V0cHV0IHBhY2tldDogcHRzICUiUFJJZDY0IiwgZHRzCj4gPiA+ICUiUFJJZDY0Iiwg Igo+ID4gPiAtICAgICAgICAgICAic2l6ZSAldSBieXRlcy5cbiIsIHBrdC0+cHRzLCBwa3QtPmR0 cywgcGt0LT5zaXplKTsKPiA+ID4gLQo+ID4gPiAgICAgICBjdHgtPm91dHB1dF9vcmRlciA9IHBp Yy0+ZW5jb2RlX29yZGVyOwo+ID4gPiAgICAgICB2YWFwaV9lbmNvZGVfY2xlYXJfb2xkKGF2Y3R4 KTsKPiA+ID4KPiA+ID4gKyAgICAvKiogbG9vcCB0byBnZXQgYW4gYXZhaWxhYmxlIHBrdCBpbiBl bmNvZGVyIGZsdXNoaW5nLiAqLwo+ID4gPiArICAgIGlmIChjdHgtPmVuZF9vZl9zdHJlYW0gJiYg IXBrdC0+c2l6ZSkKPiA+ID4gKyAgICAgICAgZ290byBzdGFydDsKPiA+ID4gKwo+ID4gPiArZW5k Ogo+ID4gPiArICAgIGlmIChwa3QtPnNpemUpCj4gPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0RFQlVHLCAiT3V0cHV0IHBhY2tldDogcHRzICUiUFJJZDY0IiwKPiA+ID4gZHRzICUi UFJJZDY0IiwgIgo+ID4gPiArICAgICAgICAgICAgICAgInNpemUgJXUgYnl0ZXMuXG4iLCBwa3Qt PnB0cywgcGt0LT5kdHMsIHBrdC0+c2l6ZSk7Cj4gPiA+ICsKPiA+ID4gICAgICAgcmV0dXJuIDA7 Cj4gPiA+ICAgfQo+ID4gPgo+ID4gPiAtCj4gPiA+ICAgc3RhdGljIGF2X2NvbGQgdm9pZCB2YWFw aV9lbmNvZGVfYWRkX2dsb2JhbF9wYXJhbShBVkNvZGVjQ29udGV4dAo+ID4gPiAqYXZjdHgsIGlu dCB0eXBlLAo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqYnVmZmVyLAo+ID4gPiBzaXplX3Qgc2l6ZSkKPiA+ID4gICB7Cj4gPiA+ IEBAIC0yNjY3LDYgKzI3NDgsMTIgQEAgYXZfY29sZCBpbnQKPiA+ID4gZmZfdmFhcGlfZW5jb2Rl X2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ID4gPiAgICAgICBjdHgtPmRldmljZSA9IChB VkhXRGV2aWNlQ29udGV4dCopY3R4LT5kZXZpY2VfcmVmLT5kYXRhOwo+ID4gPiAgICAgICBjdHgt Pmh3Y3R4ID0gY3R4LT5kZXZpY2UtPmh3Y3R4Owo+ID4gPgo+ID4gPiArICAgIGN0eC0+dGFpbF9w a3QgPSBhdl9wYWNrZXRfYWxsb2MoKTsKPiA+ID4gKyAgICBpZiAoIWN0eC0+dGFpbF9wa3QpIHsK PiA+ID4gKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwo+ID4gPiArICAgICAgICBnb3Rv IGZhaWw7Cj4gPiA+ICsgICAgfQo+ID4gPiArCj4gPiA+ICAgICAgIGVyciA9IHZhYXBpX2VuY29k ZV9wcm9maWxlX2VudHJ5cG9pbnQoYXZjdHgpOwo+ID4gPiAgICAgICBpZiAoZXJyIDwgMCkKPiA+ ID4gICAgICAgICAgIGdvdG8gZmFpbDsKPiA+ID4gQEAgLTI4NTksOSArMjk0NiwxMSBAQCBhdl9j b2xkIGludAo+ID4gPiBmZl92YWFwaV9lbmNvZGVfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQo+ID4gPiAgICAgICB9Cj4gPiA+Cj4gPiA+ICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmN0eC0+ZnJh bWUpOwo+ID4gPiArICAgIGF2X3BhY2tldF9mcmVlKCZjdHgtPnRhaWxfcGt0KTsKPiA+ID4KPiA+ ID4gICAgICAgYXZfZnJlZXAoJmN0eC0+Y29kZWNfc2VxdWVuY2VfcGFyYW1zKTsKPiA+ID4gICAg ICAgYXZfZnJlZXAoJmN0eC0+Y29kZWNfcGljdHVyZV9wYXJhbXMpOwo+ID4gPiArICAgIGF2X2Zy ZWVwKCZjdHgtPmhlYWRlcl9kYXRhKTsKPiA+ID4gICAgICAgYXZfZmlmb19mcmVlcDIoJmN0eC0+ ZW5jb2RlX2ZpZm8pOwo+ID4gPgo+ID4gPiAgICAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+cmVj b25fZnJhbWVzX3JlZik7Cj4gPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29k ZS5oIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaAo+ID4gPiBpbmRleCBkNTQ1MmEzN2IzLi4w M2RmOGQ2ZDQ2IDEwMDY0NAo+ID4gPiAtLS0gYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5oCj4g PiA+ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgKPiA+ID4gQEAgLTEzMyw2ICsxMzMs MTEgQEAgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVQaWN0dXJlIHsKPiA+ID4KPiA+ID4gICAg ICAgaW50ICAgICAgICAgIG5iX3NsaWNlczsKPiA+ID4gICAgICAgVkFBUElFbmNvZGVTbGljZSAq c2xpY2VzOwo+ID4gPiArCj4gPiA+ICsgICAgLyoqIFRhaWwgZGF0YSBvZiBjdXJyZW50IHBpYywg dXNlZCBvbmx5IGZvciByZXBlYXQgaGVhZGVyIG9mCj4gPiA+IEFWMS4gKi8KPiA+ID4gKyAgICBj aGFyIHRhaWxfZGF0YVtNQVhfUEFSQU1fQlVGRkVSX1NJWkVdOwo+ID4gPiArICAgIC8qKiBCeXRl IGxlbmd0aCBvZiB0YWlsX2RhdGEuICovCj4gPiA+ICsgICAgc2l6ZV90IHRhaWxfc2l6ZTsKPiA+ ID4gICB9IFZBQVBJRW5jb2RlUGljdHVyZTsKPiA+ID4KPiA+ID4gICB0eXBlZGVmIHN0cnVjdCBW QUFQSUVuY29kZVByb2ZpbGUgewo+ID4gPiBAQCAtMzY3LDYgKzM3MiwxMyBAQCB0eXBlZGVmIHN0 cnVjdCBWQUFQSUVuY29kZUNvbnRleHQgewo+ID4gPiAgICAgICBBVkZpZm8gICAgICAgICAgKmVu Y29kZV9maWZvOwo+ID4gPiAgICAgICAvLyBNYXggbnVtYmVyIG9mIGZyYW1lIGJ1ZmZlcmVkIGlu IGVuY29kZXIuCj4gPiA+ICAgICAgIGludCAgICAgICAgICAgICBhc3luY19kZXB0aDsKPiA+ID4g Kwo+ID4gPiArICAgIC8qKiBIZWFkIGRhdGEgZm9yIGN1cnJlbnQgb3V0cHV0IHBrdCwgdXNlZCBv bmx5IGZvciBBVjEuICovCj4gPiA+ICsgICAgdm9pZCAgKmhlYWRlcl9kYXRhOwo+ID4gPiArICAg IHNpemVfdCBoZWFkZXJfZGF0YV9zaXplOwo+ID4gPiArCj4gPiA+ICsgICAgLyoqIFN0b3JlIGF2 MSByZXBlYXQgZnJhbWUgaGVhZGVyIHBrdC4gKi8KPiA+ID4gKyAgICBBVlBhY2tldCAqdGFpbF9w a3Q7Cj4gPiA+ICAgfSBWQUFQSUVuY29kZUNvbnRleHQ7Cj4gPiA+Cj4gPiA+ICAgZW51bSB7Cj4g PiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuYwo+ID4gPiBiL2xp YmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g PiA+IGluZGV4IDAwMDAwMDAwMDAuLjRjOGE5ZDk5NWQKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4g PiArKysgYi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuYwo+ID4gPiBAQCAtMCwwICsxLDEy MjkgQEAKPiA+ID4gKy8qCj4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgSW50ZWwgQ29ycG9y YXRpb24KPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4g PiA+ICsgKgo+ID4gPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgo+ID4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gPiArICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gPiA+ICsgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKPiA+ ID4gdmVyc2lvbi4KPiA+ID4gKyAqCj4gPiA+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ID4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiA+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCj4gPiA+IEdOVQo+ID4gPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPiA+ID4gKyAqCj4gPiA+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKPiA+ID4gUHVibGljCj4gPiA+ ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCj4gPiA+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gPiA+IDAyMTEwLTEzMDEgVVNBCj4gPiA+ICsgKi8K PiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgPHZhL3ZhLmg+Cj4gPiA+ICsjaW5jbHVkZSA8dmEvdmFf ZW5jX2F2MS5oPgo+ID4gPiArCj4gPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIK PiA+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRl ICJjYnNfYXYxLmgiCj4gPiA+ICsjaW5jbHVkZSAicHV0X2JpdHMuaCIKPiA+ID4gKyNpbmNsdWRl ICJjb2RlY19pbnRlcm5hbC5oIgo+ID4gPiArI2luY2x1ZGUgImF2MV9sZXZlbHMuaCIKPiA+ID4g KyNpbmNsdWRlICJ2YWFwaV9lbmNvZGUuaCIKPiA+ID4gKwo+ID4gPiArI2RlZmluZSBBVjFfTUFY X1FVQU5UIDI1NQo+ID4gPiArCj4gPiA+ICt0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZUFWMVBp Y3R1cmUgewo+ID4gPiArICAgIGludDY0X3QgbGFzdF9pZHJfZnJhbWU7Cj4gPiA+ICsgICAgaW50 IHNsb3Q7Cj4gPiA+ICt9IFZBQVBJRW5jb2RlQVYxUGljdHVyZTsKPiA+ID4gKwo+ID4gPiArdHlw ZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVBVjFDb250ZXh0IHsKPiA+ID4gKyAgICBWQUFQSUVuY29k ZUNvbnRleHQgY29tbW9uOwo+ID4gPiArICAgIEFWMVJhd09CVSBzaDsgLyoqPCBzZXF1ZW5jZSBo ZWFkZXIuKi8KPiA+ID4gKyAgICBBVjFSYXdPQlUgZmg7IC8qKjwgZnJhbWUgaGVhZGVyLiovCj4g PiA+ICsgICAgQ29kZWRCaXRzdHJlYW1Db250ZXh0ICpjYmM7Cj4gPiA+ICsgICAgQ29kZWRCaXRz dHJlYW1GcmFnbWVudCBjdXJyZW50X29idTsKPiA+ID4gKyAgICBWQUNvbmZpZ0F0dHJpYlZhbEVu Y0FWMSBhdHRyOwo+ID4gPiArICAgIFZBQ29uZmlnQXR0cmliVmFsRW5jQVYxRXh0MSBhdHRyX2V4 dDE7Cj4gPiA+ICsgICAgVkFDb25maWdBdHRyaWJWYWxFbmNBVjFFeHQyIGF0dHJfZXh0MjsKPiA+ ID4gKwo+ID4gPiArICAgIGNoYXIgc2hfZGF0YVtNQVhfUEFSQU1fQlVGRkVSX1NJWkVdOyAvKio8 IGNvZGVkIHNlcXVlbmNlCj4gPiA+IGhlYWRlciBkYXRhLiAqLwo+ID4gPiArICAgIHNpemVfdCBz aF9kYXRhX2xlbjsgLyoqPCBiaXQgbGVuZ3RoIG9mIHNoX2RhdGEuICovCj4gPiA+ICsgICAgY2hh ciBmaF9kYXRhW01BWF9QQVJBTV9CVUZGRVJfU0laRV07IC8qKjwgY29kZWQgZnJhbWUgaGVhZGVy Cj4gPiA+IGRhdGEuICovCj4gPiA+ICsgICAgc2l6ZV90IGZoX2RhdGFfbGVuOyAvKio8IGJpdCBs ZW5ndGggb2YgZmhfZGF0YS4gKi8KPiA+ID4gKwo+ID4gPiArICAgIHVpbnQ4X3QgdW5pZm9ybV90 aWxlOwo+ID4gPiArICAgIHVpbnQ4X3QgdXNlXzEyOHgxMjhfc3VwZXJibG9jazsKPiA+ID4gKyAg ICBpbnQgc2JfY29sczsKPiA+ID4gKyAgICBpbnQgc2Jfcm93czsKPiA+ID4gKyAgICBpbnQgdGls ZV9jb2xzX2xvZzI7Cj4gPiA+ICsgICAgaW50IHRpbGVfcm93c19sb2cyOwo+ID4gPiArICAgIGlu dCBtYXhfdGlsZV93aWR0aF9zYjsKPiA+ID4gKyAgICBpbnQgbWF4X3RpbGVfaGVpZ2h0X3NiOwo+ ID4gPiArICAgIHVpbnQ4X3Qgd2lkdGhfaW5fc2JzX21pbnVzXzFbQVYxX01BWF9USUxFX0NPTFNd Owo+ID4gPiArICAgIHVpbnQ4X3QgaGVpZ2h0X2luX3Nic19taW51c18xW0FWMV9NQVhfVElMRV9S T1dTXTsKPiA+ID4gKwo+ID4gPiArICAgIGludCBtaW5fbG9nMl90aWxlX2NvbHM7Cj4gPiA+ICsg ICAgaW50IG1heF9sb2cyX3RpbGVfY29sczsKPiA+ID4gKyAgICBpbnQgbWluX2xvZzJfdGlsZV9y b3dzOwo+ID4gPiArICAgIGludCBtYXhfbG9nMl90aWxlX3Jvd3M7Cj4gPiA+ICsKPiA+ID4gKyAg ICBpbnQgcV9pZHhfaWRyOwo+ID4gPiArICAgIGludCBxX2lkeF9wOwo+ID4gPiArICAgIGludCBx X2lkeF9iOwo+ID4gPiArCj4gPiA+ICsgICAgLyoqIHVzZXIgb3B0aW9ucyAqLwo+ID4gPiArICAg IGludCBwcm9maWxlOwo+ID4gPiArICAgIGludCBsZXZlbDsKPiA+ID4gKyAgICBpbnQgdGllcjsK PiA+ID4gKyAgICBpbnQgdGlsZV9jb2xzLCB0aWxlX3Jvd3M7Cj4gPiA+ICsgICAgaW50IHRpbGVf Z3JvdXBzOwo+ID4gPiArfSBWQUFQSUVuY29kZUFWMUNvbnRleHQ7Cj4gPiA+ICsKPiA+ID4gK3N0 YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfYXYxX2NvbmZpZ3VyZShBVkNvZGVjQ29udGV4 dAo+ID4gPiAqYXZjdHgpCj4gPiA+ICt7Cj4gPiA+ICsgICAgVkFBUElFbmNvZGVDb250ZXh0ICAg ICAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRl eHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gPiArICAgIGludCByZXQ7Cj4gPiA+ICsK PiA+ID4gKyAgICByZXQgPSBmZl9jYnNfaW5pdCgmcHJpdi0+Y2JjLCBBVl9DT0RFQ19JRF9BVjEs IGF2Y3R4KTsKPiA+ID4gKyAgICBpZiAocmV0IDwgMCkKPiA+ID4gKyAgICAgICAgcmV0dXJuIHJl dDsKPiA+ID4gKwo+ID4gPiArICAgIGlmIChjdHgtPnJjX21vZGUtPnF1YWxpdHkpIHsKPiA+ID4g KyAgICAgICAgcHJpdi0+cV9pZHhfcCA9IGF2X2NsaXAoY3R4LT5yY19xdWFsaXR5LCAwLAo+ID4g PiBBVjFfTUFYX1FVQU5UKTsKPiA+ID4gKyAgICAgICAgaWYgKGZhYnMoYXZjdHgtPmlfcXVhbnRf ZmFjdG9yKSA+IDAuMCkKPiA+ID4gKyAgICAgICAgICAgIHByaXYtPnFfaWR4X2lkciA9Cj4gPiA+ ICsgICAgICAgICAgICAgICAgYXZfY2xpcCgoZmFicyhhdmN0eC0+aV9xdWFudF9mYWN0b3IpICog cHJpdi0KPiA+ID4gPnFfaWR4X3AgICsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBh dmN0eC0+aV9xdWFudF9vZmZzZXQpICsgMC41LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgMCwgQVYxX01BWF9RVUFOVCk7Cj4gPiA+ICsgICAgICAgIGVsc2UKPiA+ID4gKyAgICAgICAg ICAgIHByaXYtPnFfaWR4X2lkciA9IHByaXYtPnFfaWR4X3A7Cj4gPiA+ICsKPiA+ID4gKyAgICAg ICAgaWYgKGZhYnMoYXZjdHgtPmJfcXVhbnRfZmFjdG9yKSA+IDAuMCkKPiA+ID4gKyAgICAgICAg ICAgIHByaXYtPnFfaWR4X2IgPQo+ID4gPiArICAgICAgICAgICAgICAgIGF2X2NsaXAoKGZhYnMo YXZjdHgtPmJfcXVhbnRfZmFjdG9yKSAqIHByaXYtCj4gPiA+ID5xX2lkeF9wICArCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmJfcXVhbnRfb2Zmc2V0KSArIDAuNSwKPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIEFWMV9NQVhfUVVBTlQpOwo+ID4gPiArICAg ICAgICBlbHNlCj4gPiA+ICsgICAgICAgICAgICBwcml2LT5xX2lkeF9iID0gcHJpdi0+cV9pZHhf cDsKPiA+ID4gKyAgICB9IGVsc2Ugewo+ID4gPiArICAgICAgICAvKiogQXJiaXRyYXJ5IHZhbHVl ICovCj4gPiA+ICsgICAgICAgIHByaXYtPnFfaWR4X2lkciA9IHByaXYtPnFfaWR4X3AgPSBwcml2 LT5xX2lkeF9iID0gMTI4Owo+ID4gPiArICAgIH0KPiA+Cj4gPiBBcmUgdGhlcmUgYW55IGFsaWdu bWVudCByZXF1aXJlbWVudHMgaGVyZT8gIChJZiBJIGdhdmUgaXQgYW4gaW5wdXQKPiA+IHdoaWNo IGlzLCBzYXksIDEzNjF4MSwgd291bGQgdGhhdCB3b3JrPykKPgo+IEkgZGlkbid0IGdldCB5b3Uu IFdoaWNoIHBhcmFtZXRlciBoZXJlIG5lZWQgdG8gYmUgYWxpZ24/IE1heC9NaW4KPiByZXNvbHV0 aW9uIEhXIHN1cHBvcnRlZCB3aWxsIGJlIGNoZWNrZWQgc29tZXdoZXJlIGVsc2UuIElmIHVzZSAx MzYxeDEKPiB0aGVyZSB3aWxsIGJlIHRoZSBlcnJvciBsaWtlOgo+Cj4gIkhhcmR3YXJlIGRvZXMg bm90IHN1cHBvcnQgZW5jb2RpbmcgYXQgc2l6ZSAxMzc2eDE2IChjb25zdHJhaW50czogd2lkdGgK PiAzMi04MTkyIGhlaWdodCAzMi04MTkyKS4iCj4KPiA+Cj4gPiA+ICsKPiA+ID4gKyAgICByZXR1 cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCB2YWFwaV9lbmNvZGVfYXYx X2FkZF9vYnUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAqYXUsCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHR5cGUsCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvYnVfdW5pdCkKPiA+ID4gK3sK PiA+ID4gKyAgICBpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsgICAgcmV0ID0gZmZfY2JzX2luc2Vy dF91bml0X2NvbnRlbnQoYXUsIC0xLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGUsIG9idV91bml0LCBOVUxMKTsKPiA+ID4gKyAgICBpZiAocmV0IDwgMCkg ewo+ID4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBh ZGQgT0JVIHVuaXQ6ICIKPiA+ID4gKyAgICAgICAgICAgICAgICJ0eXBlID0gJWQuXG4iLCB0eXBl KTsKPiA+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ID4g KyAgICByZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCB2YWFwaV9l bmNvZGVfYXYxX3dyaXRlX29idShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGEsIHNpemVfdAo+ID4gPiAq ZGF0YV9sZW4sCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv ZGVkQml0c3RyZWFtRnJhZ21lbnQgKmJzKQo+ID4gPiArewo+ID4gPiArICAgIFZBQVBJRW5jb2Rl QVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiA+ICsgICAgaW50IHJldDsK PiA+ID4gKwo+ID4gPiArICAgIHJldCA9IGZmX2Nic193cml0ZV9mcmFnbWVudF9kYXRhKHByaXYt PmNiYywgYnMpOwo+ID4gPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gPiA+ICsgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHdyaXRlIHBhY2tlZAo+ID4gPiBoZWFk ZXIuXG4iKTsKPiA+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ID4gKyAgICB9Cj4gPiA+ICsK PiA+ID4gKyAgICBpZiAoKHNpemVfdCk4ICogTUFYX1BBUkFNX0JVRkZFUl9TSVpFIDwgOCAqIGJz LT5kYXRhX3NpemUgLQo+ID4gPiBicy0+ZGF0YV9iaXRfcGFkZGluZykgewo+ID4gPiArICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFjY2VzcyB1bml0IHRvbyBsYXJnZTogIgo+ ID4gPiArICAgICAgICAgICAgICAgIiV6dSA8ICV6dS5cbiIsIChzaXplX3QpOCAqIE1BWF9QQVJB TV9CVUZGRVJfU0laRSwKPiA+ID4gKyAgICAgICAgICAgICAgIDggKiBicy0+ZGF0YV9zaXplIC0g YnMtPmRhdGFfYml0X3BhZGRpbmcpOwo+ID4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9T UEMpOwo+ID4gPiArICAgIH0KPiA+ID4gKwo+ID4gPiArICAgIG1lbWNweShkYXRhLCBicy0+ZGF0 YSwgYnMtPmRhdGFfc2l6ZSk7Cj4gPiA+ICsgICAgKmRhdGFfbGVuID0gOCAqIGJzLT5kYXRhX3Np emUgLSBicy0+ZGF0YV9iaXRfcGFkZGluZzsKPiA+ID4gKwo+ID4gPiArICAgIHJldHVybiAwOwo+ ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IGdldF9yZWxhdGl2ZV9kaXN0KGNvbnN0 IEFWMVJhd1NlcXVlbmNlSGVhZGVyICpzZXEsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKPiA+ID4gK3sKPiA+ID4gKyAg ICB1bnNpZ25lZCBpbnQgZGlmZiwgbTsKPiA+ID4gKyAgICBpZiAoIXNlcS0+ZW5hYmxlX29yZGVy X2hpbnQpCj4gPiA+ICsgICAgICAgIHJldHVybiAwOwo+ID4gPiArICAgIGRpZmYgPSBhIC0gYjsK PiA+ID4gKyAgICBtID0gMSA8PCBzZXEtPm9yZGVyX2hpbnRfYml0c19taW51c18xOwo+ID4gPiAr ICAgIGRpZmYgPSAoZGlmZiAmIChtIC0gMSkpIC0gKGRpZmYgJiBtKTsKPiA+ID4gKyAgICByZXR1 cm4gZGlmZjsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCB3cml0ZV9ucyhQdXRC aXRDb250ZXh0ICpwYmMsIHVpbnQzMl90IG4sIHVpbnQzMl90Cj4gPiA+IHZhbHVlKQo+ID4gPiAr ewo+ID4gPiArICAgIHVpbnQzMl90IHcsIG0sIHYsIGV4dHJhX2JpdDsKPiA+ID4gKwo+ID4gPiAr ICAgIHcgPSBhdl9sb2cyKG4pICsgMTsKPiA+ID4gKyAgICBtID0gKDEgPDwgdykgLSBuOwo+ID4g PiArCj4gPiA+ICsgICAgaWYgKHZhbHVlIDwgbSkgewo+ID4gPiArICAgICAgICB2ID0gdmFsdWU7 Cj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKHBiYywgdyAtIDEsIHYpOwo+ID4gPiArICAgIH0gZWxz ZSB7Cj4gPiA+ICsgICAgICAgIHYgPSBtICsgKCh2YWx1ZSAtIG0pID4+IDEpOwo+ID4gPiArICAg ICAgICBleHRyYV9iaXQgPSAodmFsdWUgLSBtKSAmIDE7Cj4gPiA+ICsgICAgICAgIHB1dF9iaXRz KHBiYywgdyAtIDEsIHYpOwo+ID4gPiArICAgICAgICBwdXRfYml0cyhwYmMsIDEsIGV4dHJhX2Jp dCk7Cj4gPiA+ICsgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogVGhpcyBBUEkgcHJvdmlkZSB0aGUgbWlubXVtIGlt cGxlbWVudGlvbiBhY2NvcmRpbmcgY3VycmVudAo+ID4gPiBlbmFibGVkIGZlYXR1cmVzCj4gPiA+ ICsgKiBpbiBmcmFtZSBoZWFkZXIuIElmIG1vcmUgZmVhdHVyZXMgd2lsbCBlbmFibGUgaW4gZnVy dHVyZSwKPiA+ID4gcGxlYXNlIG1ha2Ugc3VyZQo+ID4gPiArICogdGhlIHJlbGF0aXZlIGZsYWdz IG9mIGZlYXR1cmVzIHNob3VsZCBiZSBwYWNrZWQgY29ycmVjdGx5IGludG8KPiA+ID4gZnJhbWUg aGVhZGVyCj4gPiA+ICsgKiBvYnUgaW4gdGhpcyBBUEkuCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRp YyBpbnQgdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9mcmFtZV9oZWFkZXIoQVZDb2RlY0NvbnRleHQK PiA+ID4gKmF2Y3R4LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWQUFQSUVuY29kZVBpY3R1cmUKPiA+ID4gKnBpYywKPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgc2l6ZV90 Cj4gPiA+ICpkYXRhX2xlbikKPiA+ID4gK3sKPiA+ID4gKyAgICBWQUFQSUVuY29kZUNvbnRleHQg ICAgICAgICAgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gPiArICAgIFZBQVBJRW5j b2RlQVYxQ29udGV4dCAgICAgICAgICAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiA+ICsg ICAgQVYxUmF3T0JVICAgICAgICAgICAgICAgICAgICAqZmhfb2J1ID0gJnByaXYtPmZoOwo+ID4g PiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICAgICAgKnNoX29idSA9ICZwcml2LT5zaDsK PiA+ID4gKyAgICBBVjFSYXdGcmFtZUhlYWRlciAgICAgICAgICAgICAgICAqZmggPSAmZmhfb2J1 LQo+ID4gPiA+b2J1LmZyYW1lLmhlYWRlcjsKPiA+ID4gKyAgICBBVjFSYXdTZXF1ZW5jZUhlYWRl ciAgICAgICAgICAgICAqc2ggPSAmc2hfb2J1LQo+ID4gPiA+b2J1LnNlcXVlbmNlX2hlYWRlcjsK PiA+ID4gKyAgICBWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEgKnZwaWMgPSBwaWMtCj4g PiA+ID5jb2RlY19waWN0dXJlX3BhcmFtczsKPiA+ID4gKyAgICBQdXRCaXRDb250ZXh0IHBiYywg cGJjX3RtcDsKPiA+ID4gKyAgICB1aW50OF90IGJ5dGU7Cj4gPiA+ICsgICAgaW50IHFpbmRleCwg Y29kZWRfbG9zc2xlc3M7Cj4gPiA+ICsgICAgaW50IGlkX2xlbiwgZnJhbWVfaXNfaW50cmEsIHNr aXBfbW9kZV9hbGxvd2VkOwo+ID4gPiArICAgIGludCBzdGFydCwgcGF5bG9hZF9iaXRzLCBvYnVf c2l6ZSwgb2J1X3NpemVfbGVuOwo+ID4gPiArICAgIGludCBxaW5kZXhfb2Zmc2V0LCBsb29wZmls dGVyX29mZnNldDsKPiA+ID4gKyAgICBpbnQgY2RlZl9zdGFydF9vZmZzZXQsIGNkZWZfZW5kX29m ZnNldDsKPiA+ID4gKyAgICBpbnQgaTsKPiA+ID4gKwo+ID4gPiArICAgIGluaXRfcHV0X2JpdHMo JnBiYywgZGF0YSwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKPiA+ID4gKwo+ID4gPiArICAgIC8q KiBvYnUgaGVhZGVyICovCj4gPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmhfb2J1LT5oZWFk ZXIub2J1X2ZvcmJpZGRlbl9iaXQpOwo+ID4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDQsIGZoX29i dS0+aGVhZGVyLm9idV90eXBlKTsKPiA+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaF9vYnUt PmhlYWRlci5vYnVfZXh0ZW5zaW9uX2ZsYWcpOwo+ID4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEs IGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6ZV9maWVsZCk7Cj4gPiA+ICsgICAgcHV0X2JpdHMo JnBiYywgMSwgZmhfb2J1LT5oZWFkZXIub2J1X3Jlc2VydmVkXzFiaXQpOwo+ID4gPiArCj4gPiA+ ICsgICAgLyoqIHJlY29yZCBwYmMgc3RhdHVzIHRvIHJlLXdyaXRlIG9idSBzaXplIGxhdGVyLiAq Lwo+ID4gPiArICAgIGlmIChmaF9vYnUtPmhlYWRlci5vYnVfaGFzX3NpemVfZmllbGQpIHsKPiA+ ID4gKyAgICAgICAgcGJjX3RtcCA9IHBiYzsKPiA+ID4gKyAgICAgICAgcHV0X2JpdHMzMigmcGJj LCAwKTsKPiA+ID4gKyAgICAgICAgcHV0X2JpdHMzMigmcGJjLCAwKTsKPiA+ID4gKyAgICB9Cj4g PiA+ICsKPiA+ID4gKyAgICBzdGFydCA9IHB1dF9iaXRzX2NvdW50KCZwYmMpOwo+ID4gPiArCj4g PiA+ICsgICAgLyoqIHVuY29tcHJlc3NlZF9oZWFkZXIoKSAqLwo+ID4gPiArICAgIGlmIChzaC0+ ZnJhbWVfaWRfbnVtYmVyc19wcmVzZW50X2ZsYWcpCj4gPiA+ICsgICAgICAgIGlkX2xlbiA9IHNo LT5hZGRpdGlvbmFsX2ZyYW1lX2lkX2xlbmd0aF9taW51c18xICsKPiA+ID4gKyAgICAgICAgICAg ICAgICAgc2gtPmRlbHRhX2ZyYW1lX2lkX2xlbmd0aF9taW51c18yICsgMzsKPiA+ID4gKwo+ID4g PiArICAgIGZyYW1lX2lzX2ludHJhID0gKGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkg fHwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJB TUVfSU5UUkFfT05MWSk7Cj4gPiA+ICsgICAgaWYgKCFzaC0+cmVkdWNlZF9zdGlsbF9waWN0dXJl X2hlYWRlcikgewo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+c2hvd19leGlz dGluZ19mcmFtZSk7Cj4gPiA+ICsgICAgICAgIGlmIChmaC0+c2hvd19leGlzdGluZ19mcmFtZSkg ewo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMywgZmgtPmZyYW1lX3RvX3Nob3df bWFwX2lkeCk7Cj4gPiA+ICsgICAgICAgICAgICBnb3RvIHRyYWlsaW5nX2JpdHM7Cj4gPiA+ICsg ICAgICAgIH0KPiA+ID4gKyAgICAgICAgaWYgKHNoLT5mcmFtZV9pZF9udW1iZXJzX3ByZXNlbnRf ZmxhZykKPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIGlkX2xlbiwgZmgtPmRpc3Bs YXlfZnJhbWVfaWQpOwo+ID4gPiArCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZo LT5mcmFtZV90eXBlKTsKPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnNob3df ZnJhbWUpOwo+ID4gPiArICAgICAgICBpZiAoIWZoLT5zaG93X2ZyYW1lKQo+ID4gPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnNob3dhYmxlX2ZyYW1lKTsKPiA+ID4gKwo+ID4g PiArICAgICAgICBpZiAoIShmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVfU1dJVENIIHx8Cj4g PiA+ICsgICAgICAgICAgICAoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSAmJiBmaC0+ c2hvd19mcmFtZSkpKQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmVy cm9yX3Jlc2lsaWVudF9tb2RlKTsKPiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICBwdXRf Yml0cygmcGJjLCAxLCBmaC0+ZGlzYWJsZV9jZGZfdXBkYXRlKTsKPiA+ID4gKyAgICBpZiAoc2gt PnNlcV9mb3JjZV9zY3JlZW5fY29udGVudF90b29scyA9PQo+ID4gPiBBVjFfU0VMRUNUX1NDUkVF Tl9DT05URU5UX1RPT0xTKQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+YWxs b3dfc2NyZWVuX2NvbnRlbnRfdG9vbHMpOwo+ID4gPiArCj4gPiA+ICsgICAgaWYgKGZoLT5hbGxv d19zY3JlZW5fY29udGVudF90b29scyAmJiBzaC0+c2VxX2ZvcmNlX2ludGVnZXJfbXYKPiA+ID4g PT0gQVYxX1NFTEVDVF9JTlRFR0VSX01WKQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAx LCBmaC0+Zm9yY2VfaW50ZWdlcl9tdik7Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAoc2gtPmZyYW1l X2lkX251bWJlcnNfcHJlc2VudF9mbGFnKQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCBp ZF9sZW4sIGZoLT5jdXJyZW50X2ZyYW1lX2lkKTsKPiA+ID4gKwo+ID4gPiArICAgIGlmIChmaC0+ ZnJhbWVfdHlwZSAhPSBBVjFfRlJBTUVfU1dJVENIICYmICFzaC0KPiA+ID4gPnJlZHVjZWRfc3Rp bGxfcGljdHVyZV9oZWFkZXIpCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5m cmFtZV9zaXplX292ZXJyaWRlX2ZsYWcpOwo+ID4gPiArCj4gPiA+ICsgICAgaWYgKHNoLT5lbmFi bGVfb3JkZXJfaGludCkKPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgc2gtPm9yZGVyX2hp bnRfYml0c19taW51c18xICsgMSwgZmgtCj4gPiA+ID5vcmRlcl9oaW50KTsKPiA+ID4gKwo+ID4g PiArICAgIGlmICghKGZyYW1lX2lzX2ludHJhIHx8IGZoLT5lcnJvcl9yZXNpbGllbnRfbW9kZSkp Cj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDMsIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSk7 Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAoIShmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVfU1dJ VENIIHx8Cj4gPiA+ICsgICAgICAgIGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgJiYg ZmgtPnNob3dfZnJhbWUpKQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCA4LCBmaC0+cmVm cmVzaF9mcmFtZV9mbGFncyk7Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAoZnJhbWVfaXNfaW50cmEp IHsKPiA+ID4gKyAgICAgICAgLyoqIHJlbmRlcl9zaXplKCkgKi8KPiA+ID4gKyAgICAgICAgIHB1 dF9iaXRzKCZwYmMsIDEsIGZoLT5yZW5kZXJfYW5kX2ZyYW1lX3NpemVfZGlmZmVyZW50KTsKPiA+ ID4gKyAgICB9IGVsc2Ugewo+ID4gPiArICAgICAgICBpZiAoIWZyYW1lX2lzX2ludHJhICYmIHNo LT5lbmFibGVfb3JkZXJfaGludCkKPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEs IGZoLT5mcmFtZV9yZWZzX3Nob3J0X3NpZ25hbGluZyk7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gPiA+ICsgICAgICAg ICAgICBpZiAoIWZoLT5mcmFtZV9yZWZzX3Nob3J0X3NpZ25hbGluZykKPiA+ID4gKyAgICAgICAg ICAgICAgICBwdXRfYml0cygmcGJjLCAzLCBmaC0+cmVmX2ZyYW1lX2lkeFtpXSk7Cj4gPiA+ICsg ICAgICAgIH0KPiA+ID4gKwo+ID4gPiArICAgICAgICBpZiAoIShmaC0+ZnJhbWVfc2l6ZV9vdmVy cmlkZV9mbGFnICYmICFmaC0KPiA+ID4gPmVycm9yX3Jlc2lsaWVudF9tb2RlKSkKPiA+ID4gKyAg ICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLQo+ID4gPiA+cmVuZGVyX2FuZF9mcmFtZV9z aXplX2RpZmZlcmVudCk7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgaWYgKCFmaC0+Zm9yY2VfaW50 ZWdlcl9tdikKPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5hbGxvd19o aWdoX3ByZWNpc2lvbl9tdik7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgLyoqIHJlYWRfaW50ZXJw b2xhdGlvbl9maWx0ZXIoKSAqLwo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ aXNfZmlsdGVyX3N3aXRjaGFibGUpOwo+ID4gPiArICAgICAgICBpZiAoIWZoLT5pc19maWx0ZXJf c3dpdGNoYWJsZSkKPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5pbnRl cnBvbGF0aW9uX2ZpbHRlcik7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywg MSwgZmgtPmlzX21vdGlvbl9tb2RlX3N3aXRjaGFibGUpOwo+ID4gPiArICAgIH0KPiA+ID4gKwo+ ID4gPiArICAgIGlmICghKHNoLT5yZWR1Y2VkX3N0aWxsX3BpY3R1cmVfaGVhZGVyIHx8IGZoLQo+ ID4gPiA+ZGlzYWJsZV9jZGZfdXBkYXRlKSkKPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywg MSwgZmgtPmRpc2FibGVfZnJhbWVfZW5kX3VwZGF0ZV9jZGYpOwo+ID4gPiArCj4gPiA+ICsgICAg LyoqIHRpbGVfaW5mbygpICovCj4gPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnVuaWZv cm1fdGlsZV9zcGFjaW5nX2ZsYWcpOwo+ID4gPiArICAgIGlmIChmaC0+dW5pZm9ybV90aWxlX3Nw YWNpbmdfZmxhZykgewo+ID4gPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dGlsZV9j b2xzX2xvZzIgLSBwcml2LQo+ID4gPiA+bWluX2xvZzJfdGlsZV9jb2xzOyBpKyspIHsKPiA+ID4g KyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDEpOwo+ID4gPiArICAgICAgICB9Cj4gPiA+ ICsgICAgICAgIGlmIChwcml2LT50aWxlX2NvbHNfbG9nMiA8IHByaXYtPm1heF9sb2cyX3RpbGVf Y29scykKPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDApOwo+ID4gPiArCj4g PiA+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT50aWxlX3Jvd3NfbG9nMiAtIHByaXYt Cj4gPiA+ID5taW5fbG9nMl90aWxlX3Jvd3M7IGkrKykgewo+ID4gPiArICAgICAgICAgICAgcHV0 X2JpdHMoJnBiYywgMSwgMSk7Cj4gPiA+ICsgICAgICAgIH0KPiA+ID4gKyAgICAgICAgaWYgKHBy aXYtPnRpbGVfcm93c19sb2cyIDwgcHJpdi0+bWF4X2xvZzJfdGlsZV9yb3dzKQo+ID4gPiArICAg ICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7Cj4gPiA+ICsgICAgfSBlbHNlIHsKPiA+ID4g KyAgICAgICAgaW50IHN0YXJ0X3NiID0gMDsKPiA+ID4gKyAgICAgICAgaW50IG1heF93aWR0aCwg bWF4X2hlaWdodDsKPiA+ID4gKyAgICAgICAgZm9yIChpID0gMDsgc3RhcnRfc2IgPCBwcml2LT5z Yl9jb2xzOyBpKyspIHsKPiA+ID4gKyAgICAgICAgICAgIG1heF93aWR0aCA9IEZGTUlOKHByaXYt PnNiX2NvbHMgLSBzdGFydF9zYiwgcHJpdi0KPiA+ID4gPm1heF90aWxlX3dpZHRoX3NiKTsKPiA+ ID4gKyAgICAgICAgICAgIHdyaXRlX25zKCZwYmMsIG1heF93aWR0aCwgZmgtCj4gPiA+ID53aWR0 aF9pbl9zYnNfbWludXNfMVtpXSk7Cj4gPiA+ICsgICAgICAgICAgICBzdGFydF9zYiArPSBmaC0+ d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gKyAxOwo+ID4gPiArICAgICAgICB9Cj4gPiA+ICsKPiA+ ID4gKyAgICAgICAgc3RhcnRfc2IgPSAwOwo+ID4gPiArICAgICAgICBmb3IgKGkgPSAwOyBzdGFy dF9zYiA8IHByaXYtPnNiX3Jvd3M7IGkrKykgewo+ID4gPiArICAgICAgICAgICAgbWF4X2hlaWdo dCA9IEZGTUlOKHByaXYtPnNiX3Jvd3MgLSBzdGFydF9zYiwgcHJpdi0KPiA+ID4gPm1heF90aWxl X2hlaWdodF9zYik7Cj4gPiA+ICsgICAgICAgICAgICB3cml0ZV9ucygmcGJjLCBtYXhfaGVpZ2h0 LCBmaC0KPiA+ID4gPmhlaWdodF9pbl9zYnNfbWludXNfMVtpXSk7Cj4gPiA+ICsgICAgICAgICAg ICBzdGFydF9zYiArPSBmaC0+aGVpZ2h0X2luX3Nic19taW51c18xW2ldICsgMTsKPiA+ID4gKyAg ICAgICAgfQo+ID4gPiArICAgIH0KPiA+ID4gKwo+ID4gPiArICAgIGlmIChwcml2LT50aWxlX2Nv bHNfbG9nMiB8fCBwcml2LT50aWxlX3Jvd3NfbG9nMikgewo+ID4gPiArICAgICAgICBwdXRfYml0 cygmcGJjLCBwcml2LT50aWxlX2NvbHNfbG9nMiArIHByaXYtCj4gPiA+ID50aWxlX3Jvd3NfbG9n MiwgZmgtPmNvbnRleHRfdXBkYXRlX3RpbGVfaWQpOwo+ID4gPiArICAgICAgICBwdXRfYml0cygm cGJjLCAyLCBmaC0+dGlsZV9zaXplX2J5dGVzX21pbnVzMSk7Cj4gPiA+ICsgICAgfQo+ID4gPiAr Cj4gPiA+ICsgICAgcWluZGV4X29mZnNldCA9IHB1dF9iaXRzX2NvdW50KCZwYmMpOwo+ID4gPiAr ICAgIC8qKiBxdWFudGl6YXRpb25fcGFyYW1zKCkgKi8KPiA+ID4gKyAgICBwdXRfYml0cygmcGJj LCA4LCBmaC0+YmFzZV9xX2lkeCk7Cj4gPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRl bHRhX3FfeV9kYyk7Cj4gPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX3FfdV9k Yyk7Cj4gPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX3FfdV9hYyk7Cj4gPiA+ ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnVzaW5nX3FtYXRyaXgpOwo+ID4gPiArCj4gPiA+ ICsgICAgLyoqIHNlZ21lbnRhdGlvbl9wYXJhbXMoKSAqLwo+ID4gPiArICAgIHB1dF9iaXRzKCZw YmMsIDEsIGZoLT5zZWdtZW50YXRpb25fZW5hYmxlZCk7Cj4gPiA+ICsKPiA+ID4gKyAgICAvKiog ZGVsdGFfcV9wYXJhbXMoKSAqLwo+ID4gPiArICAgIGlmIChmaC0+YmFzZV9xX2lkeCkKPiA+ID4g KyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX3FfcHJlc2VudCk7Cj4gPiA+ICsg ICAgaWYgKGZoLT5kZWx0YV9xX3ByZXNlbnQpCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMs IDIsIGZoLT5kZWx0YV9xX3Jlcyk7Cj4gPiA+ICsKPiA+ID4gKyAgICAvKiogZGVsdGFfbGZfcGFy YW1zKCkgKi8KPiA+ID4gKyAgICBpZiAoZmgtPmRlbHRhX3FfcHJlc2VudCkgewo+ID4gPiArICAg ICAgICBpZiAoIWZoLT5hbGxvd19pbnRyYWJjKQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMo JnBiYywgMSwgZmgtPmRlbHRhX2xmX3ByZXNlbnQpOwo+ID4gPiArICAgICAgICBpZiAoZmgtPmRl bHRhX2xmX3ByZXNlbnQpIHsKPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZo LT5kZWx0YV9sZl9yZXMpOwo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgt PmRlbHRhX2xmX211bHRpKTsKPiA+ID4gKyAgICAgICAgfQo+ID4gPiArICAgIH0KPiA+ID4gKwo+ ID4gPiArICAgIC8qKiBjb2RlbG9zc2xlc3MgKi8KPiA+ID4gKyAgICBjb2RlZF9sb3NzbGVzcyA9 IDE7Cj4gPiA+ICsgICAgZm9yIChpID0gMDsgaSA8IEFWMV9NQVhfU0VHTUVOVFM7IGkrKykgewo+ ID4gPiArICAgICAgICBpZiAoZmgtPnNlZ21lbnRhdGlvbl9lbmFibGVkICYmIGZoLQo+ID4gPiA+ ZmVhdHVyZV9lbmFibGVkW2ldW0FWMV9TRUdfTFZMX0FMVF9RXSkKPiA+ID4gKyAgICAgICAgICAg IHFpbmRleCA9IGZoLT5iYXNlX3FfaWR4ICsgZmgtCj4gPiA+ID5mZWF0dXJlX3ZhbHVlW2ldW0FW MV9TRUdfTFZMX0FMVF9RXTsKPiA+ID4gKyAgICAgICAgZWxzZQo+ID4gPiArICAgICAgICAgICAg cWluZGV4ID0gZmgtPmJhc2VfcV9pZHg7Cj4gPiA+ICsgICAgICAgIHFpbmRleCA9IGF2X2NsaXBf dWludHAyKHFpbmRleCwgOCk7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgaWYgKHFpbmRleCB8fCBm aC0+ZGVsdGFfcV95X2RjIHx8IGZoLT5kZWx0YV9xX3VfYWMgfHwgZmgtCj4gPiA+ID5kZWx0YV9x X3VfZGMgfHwKPiA+ID4gKyAgICAgICAgICAgIGZoLT5kZWx0YV9xX3ZfYWMgfHwgZmgtPmRlbHRh X3Ffdl9kYykKPiA+ID4gKyAgICAgICAgICAgIGNvZGVkX2xvc3NsZXNzID0gMDsKPiA+ID4gKyAg ICB9Cj4gPiA+ICsKPiA+ID4gKyAgICBsb29wZmlsdGVyX29mZnNldCA9IHB1dF9iaXRzX2NvdW50 KCZwYmMpOwo+ID4gPiArICAgIC8qKiBsb29wX2ZpbHRlcl9wYXJhbXMoKSAqLwo+ID4gPiArICAg IGlmICghKGNvZGVkX2xvc3NsZXNzIHx8IGZoLT5hbGxvd19pbnRyYWJjKSkgewo+ID4gPiArICAg ICAgICBwdXRfYml0cygmcGJjLCA2LCBmaC0+bG9vcF9maWx0ZXJfbGV2ZWxbMF0pOwo+ID4gPiAr ICAgICAgICBwdXRfYml0cygmcGJjLCA2LCBmaC0+bG9vcF9maWx0ZXJfbGV2ZWxbMV0pOwo+ID4g PiArICAgICAgICBpZiAoZmgtPmxvb3BfZmlsdGVyX2xldmVsWzBdIHx8IGZoLT5sb29wX2ZpbHRl cl9sZXZlbFsxXSkKPiA+ID4gewo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgNiwg ZmgtPmxvb3BfZmlsdGVyX2xldmVsWzJdKTsKPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZw YmMsIDYsIGZoLT5sb29wX2ZpbHRlcl9sZXZlbFszXSk7Cj4gPiA+ICsgICAgICAgIH0KPiA+ID4g KyAgICAgICAgcHV0X2JpdHMoJnBiYywgMywgZmgtPmxvb3BfZmlsdGVyX3NoYXJwbmVzcyk7Cj4g PiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5sb29wX2ZpbHRlcl9kZWx0YV9lbmFi bGVkKTsKPiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICBjZGVmX3N0YXJ0X29mZnNldCA9 IHB1dF9iaXRzX2NvdW50KCZwYmMpOwo+ID4gPiArICAgIC8qKiBjZGVmX3BhcmFtcygpICovCj4g PiA+ICsgICAgaWYgKCEoY29kZWRfbG9zc2xlc3MgfHwgZmgtPmFsbG93X2ludHJhYmMgfHwgIXNo LQo+ID4gPiA+ZW5hYmxlX2NkZWYpKSB7Cj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIs IGZoLT5jZGVmX2RhbXBpbmdfbWludXNfMyk7Cj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMs IDIsIGZoLT5jZGVmX2JpdHMpOwo+ID4gPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKDEgPDwg ZmgtPmNkZWZfYml0cyk7IGkrKykgewo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywg NCwgZmgtPmNkZWZfeV9wcmlfc3RyZW5ndGhbaV0pOwo+ID4gPiArICAgICAgICAgICAgcHV0X2Jp dHMoJnBiYywgMiwgZmgtPmNkZWZfeV9zZWNfc3RyZW5ndGhbaV0pOwo+ID4gPiArICAgICAgICAg ICAgcHV0X2JpdHMoJnBiYywgNCwgZmgtPmNkZWZfdXZfcHJpX3N0cmVuZ3RoW2ldKTsKPiA+ID4g KyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5jZGVmX3V2X3NlY19zdHJlbmd0aFtp XSk7Cj4gPiA+ICsgICAgICAgIH0KPiA+ID4gKyAgICB9Cj4gPiA+ICsgICAgY2RlZl9lbmRfb2Zm c2V0ID0gcHV0X2JpdHNfY291bnQoJnBiYyk7Cj4gPiA+ICsKPiA+ID4gKyAgICAvKiogcmVhZF90 eF9tb2RlKCkgKi8KPiA+ID4gKyAgICBpZiAoZmgtPnR4X21vZGUgPT0gQVYxX1RYX01PREVfU0VM RUNUKQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCAxKTsKPiA+ID4gKyAgICBlbHNl Cj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDApOwo+ID4gPiArCj4gPiA+ICsgICAg LyoqIGZyYW1lX3JlZmVyZW5jZV9tb2RlKCkgKi8KPiA+ID4gKyAgICBpZiAoIWZyYW1lX2lzX2lu dHJhKQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+cmVmZXJlbmNlX3NlbGVj dCk7Cj4gPiA+ICsKPiA+ID4gKyAgICAvKiogc2tpcF9tb2RlX3BhcmFtcygpICovCj4gPiA+ICsg ICAgaWYgKGZyYW1lX2lzX2ludHJhIHx8ICFmaC0+cmVmZXJlbmNlX3NlbGVjdCB8fCAhc2gtCj4g PiA+ID5lbmFibGVfb3JkZXJfaGludCkKPiA+ID4gKyAgICAgICAgc2tpcF9tb2RlX2FsbG93ZWQg PSAwOwo+ID4gPiArICAgIGVsc2Ugewo+ID4gPiArICAgICAgICBpbnQgZm9yd2FyZF9pZHgsIGJh Y2t3YXJkX2lkeDsKPiA+ID4gKyAgICAgICAgaW50IHJlZl9oaW50LCBmb3J3YXJkX2hpbnQsIGJh Y2t3YXJkX2hpbnQ7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgZm9yd2FyZF9pZHggPSAtMTsKPiA+ ID4gKyAgICAgICAgYmFja3dhcmRfaWR4ID0gLTE7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgZm9y IChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gPiA+ICsgICAgICAgICAg ICByZWZfaGludCA9IGZoLT5yZWZfb3JkZXJfaGludFtmaC0+cmVmX2ZyYW1lX2lkeFtpXV07Cj4g PiA+ICsgICAgICAgICAgICBpZiAoZ2V0X3JlbGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBmaC0+ b3JkZXJfaGludCkgPAo+ID4gPiAwKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgaWYgKGZvcndh cmRfaWR4IDwgMCB8fCBnZXRfcmVsYXRpdmVfZGlzdChzaCwKPiA+ID4gcmVmX2hpbnQsIGZvcndh cmRfaWR4KSA+IDApIHsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pZHggPSBp Owo+ID4gPiArICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2hpbnQgPSByZWZfaGludDsKPiA+ ID4gKyAgICAgICAgICAgICAgICB9Cj4gPiA+ICsgICAgICAgICAgICB9IGVsc2UgaWYgKGdldF9y ZWxhdGl2ZV9kaXN0KHNoLCByZWZfaGludCwgZmgtCj4gPiA+ID5vcmRlcl9oaW50KSA+IDApIHsK PiA+ID4gKyAgICAgICAgICAgICAgICBpZiAoYmFja3dhcmRfaWR4IDwgMCB8fCBnZXRfcmVsYXRp dmVfZGlzdChzaCwKPiA+ID4gcmVmX2hpbnQsIGJhY2t3YXJkX2hpbnQpIDwgMCkgewo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZF9pZHggPSBpOwo+ID4gPiArICAgICAgICAgICAg ICAgICAgICBiYWNrd2FyZF9oaW50ID0gcmVmX2hpbnQ7Cj4gPiA+ICsgICAgICAgICAgICAgICAg fQo+ID4gPiArICAgICAgICAgICAgfQo+ID4gPiArICAgICAgICB9Cj4gPiA+ICsgICAgICAgIGlm IChmb3J3YXJkX2lkeCA8IDApCj4gPiA+ICsgICAgICAgICAgICBza2lwX21vZGVfYWxsb3dlZCA9 IDA7Cj4gPiA+ICsgICAgICAgIGVsc2UgaWYgKGJhY2t3YXJkX2lkeCA+PSAwKQo+ID4gPiArICAg ICAgICAgICAgc2tpcF9tb2RlX2FsbG93ZWQgPSAxOwo+ID4gPiArICAgICAgICBlbHNlIHsKPiA+ ID4gKyAgICAgICAgICAgIGludCBzZWNvbmRfZm9yd2FyZF9pZHgsIHNlY29uZF9mb3J3YXJkX2hp bnQ7Cj4gPiA+ICsgICAgICAgICAgICBzZWNvbmRfZm9yd2FyZF9pZHggPSAtMTsKPiA+ID4gKyAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykgewo+ID4g PiArICAgICAgICAgICAgICAgIHJlZl9oaW50ID0gZmgtPnJlZl9vcmRlcl9oaW50W2ZoLQo+ID4g PiA+cmVmX2ZyYW1lX2lkeFtpXV07Cj4gPiA+ICsgICAgICAgICAgICAgICAgaWYgKGdldF9yZWxh dGl2ZV9kaXN0KHNoLCByZWZfaGludCwgZm9yd2FyZF9oaW50KQo+ID4gPiA8IDApIHsKPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgaWYgKHNlY29uZF9mb3J3YXJkX2lkeCA8IDAgfHwKPiA+ID4g Z2V0X3JlbGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBzZWNvbmRfZm9yd2FyZF9oaW50KSA+IDAp ewo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2ZvcndhcmRfaWR4ID0gaTsK PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9mb3J3YXJkX2hpbnQgPSByZWZf aGludDsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgfQo+ID4gPiArICAgICAgICAgICAgICAg IH0KPiA+ID4gKyAgICAgICAgICAgIH0KPiA+ID4gKyAgICAgICAgICAgIGlmIChzZWNvbmRfZm9y d2FyZF9pZHggPCAwKQo+ID4gPiArICAgICAgICAgICAgICAgIHNraXBfbW9kZV9hbGxvd2VkID0g MDsKPiA+ID4gKyAgICAgICAgICAgIGVsc2UKPiA+ID4gKyAgICAgICAgICAgICAgICBza2lwX21v ZGVfYWxsb3dlZCA9IDE7Cj4gPiA+ICsgICAgICAgIH0KPiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ ID4gKyAgICBpZiAoc2tpcF9tb2RlX2FsbG93ZWQpCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZw YmMsIDEsIGZoLT5za2lwX21vZGVfcHJlc2VudCk7Cj4gPiA+ICsKPiA+ID4gKyAgICBwdXRfYml0 cygmcGJjLCAxLCBmaC0+cmVkdWNlZF90eF9zZXQpOwo+ID4gPiArCj4gPiA+ICsgICAgLyoqIGds b2JhbF9tb3Rpb25fcGFyYW1zKCkgKi8KPiA+ID4gKyAgICBpZiAoIWZyYW1lX2lzX2ludHJhKSB7 Cj4gPiA+ICsgICAgICAgIGZvciAoaSA9IEFWMV9SRUZfRlJBTUVfTEFTVDsgaSA8PSBBVjFfUkVG X0ZSQU1FX0FMVFJFRjsKPiA+ID4gaSsrKSB7Cj4gPiA+ICsgICAgICAgICAgICBwdXRfYml0cygm cGJjLCAxLCBmaC0+aXNfZ2xvYmFsW2ldKTsKPiA+ID4gKyAgICAgICAgICAgIGlmIChmaC0+aXNf Z2xvYmFsW2ldKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgt PmlzX3JvdF96b29tW2ldKTsKPiA+ID4gKyAgICAgICAgICAgICAgICBpZiAoIWZoLT5pc19yb3Rf em9vbVtpXSkKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgt PmlzX3RyYW5zbGF0aW9uW2ldKTsKPiA+ID4gKyAgICAgICAgICAgIH0KPiA+ID4gKyAgICAgICAg fQo+ID4gPiArICAgIH0KPiA+ID4gKwo+ID4gPiArdHJhaWxpbmdfYml0czoKPiA+ID4gKyAgICBw YXlsb2FkX2JpdHMgPSBwdXRfYml0c19jb3VudCgmcGJjKSAtIHN0YXJ0Owo+ID4gPiArCj4gPiA+ ICsgICAgLyoqIHRyYWlsaW5nX2JpdHMoKSAqLwo+ID4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEs IDEpOwo+ID4gPiArICAgIG9idV9zaXplID0gKHB1dF9iaXRzX2NvdW50KCZwYmMpIC0gc3RhcnQg KyA3KSAvIDg7Cj4gPiA+ICsgICAgZm9yIChpID0gMDsgaSA8IG9idV9zaXplICogOCAtIHBheWxv YWRfYml0cyAtIDE7IGkrKykKPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7Cj4g PiA+ICsKPiA+ID4gKyAgICBmbHVzaF9wdXRfYml0cygmcGJjKTsKPiA+ID4gKyAgICAqZGF0YV9s ZW4gPSBwdXRfYml0c19jb3VudCgmcGJjKTsKPiA+ID4gKwo+ID4gPiArICAgIC8qKiB1cGRhdGUg b2J1IHNpemUgaW4gYml0c3RyZWFtICovCj4gPiA+ICsgICAgaWYgKGZoX29idS0+aGVhZGVyLm9i dV9oYXNfc2l6ZV9maWVsZCkgewo+ID4gPiArICAgICAgICBvYnVfc2l6ZV9sZW4gPSBwcml2LT5h dHRyX2V4dDIuYml0cy5vYnVfc2l6ZV9ieXRlc19taW51czEKPiA+ID4gKyAxOwo+ID4gPiArICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgb2J1X3NpemVfbGVuOyBpKyspIHsKPiA+ID4gKyAgICAgICAg ICAgIGJ5dGUgPSBvYnVfc2l6ZSA+PiAoNyAqIGkpICYgMHg3ZjsKPiA+ID4gKyAgICAgICAgICAg IGlmIChpIDwgb2J1X3NpemVfbGVuIC0gMSkKPiA+ID4gKyAgICAgICAgICAgICAgICBieXRlIHw9 IDB4ODA7Cj4gPiA+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjX3RtcCwgOCwgYnl0ZSk7Cj4g PiA+ICsgICAgICAgIH0KPiA+ID4gKyAgICAgICAgZmx1c2hfcHV0X2JpdHMoJnBiY190bXApOwo+ ID4gPiArICAgICAgICBtZW1tb3ZlKHBiY190bXAuYnVmX3B0ciwgcGJjX3RtcC5idWZfcHRyICsg KDggLQo+ID4gPiBvYnVfc2l6ZV9sZW4pLCBvYnVfc2l6ZSk7Cj4gPiA+ICsgICAgICAgICpkYXRh X2xlbiAtPSAoOCAtIG9idV9zaXplX2xlbikgKiA4Owo+ID4gPiArICAgIH0KPiA+Cj4gPiBXaHkg aXMgdGhlcmUgYW4gaW5jb21wbGV0ZSBkdXBsaWNhdGUgb2YgdGhlIGNic19hdjEgaGVhZGVyIHdy aXRpbmcKPiA+IGNvZGUgaGVyZT8KPgo+IFRvIHJlY29yZCBzb21lIHBvc2l0aW9uL3NpemUgaW4g Yml0c3RyZWFtIHRoYXQgbmVlZGVkIGZvciBWQUFQSS4gTGlrZQo+IHFwX2luZGV4L2xvb3BmaWx0 ZXIvY2RlZiBvZmZzZXQgYW5kIGNkZWYgcGFyYW1ldGVycyBzaXplIGluIGJpdC4gSXQncwo+IG5v dCByZWFzb25hYmxlIHRvIGFkZCB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyBpbnRvIENCUy4KPgo+ ID4KPiA+ID4gKwo+ID4gPiArICAgIGlmIChmaC0+c2hvd19leGlzdGluZ19mcmFtZSkKPiA+ID4g KyAgICAgICAgcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAoIShjdHgtPnZhX3JjX21v ZGUgJiBWQV9SQ19DUVApKSB7Cj4gPiA+ICsgICAgICAgIHZwaWMtPm1pbl9iYXNlX3FpbmRleCA9 IGF2X2NsaXAoYXZjdHgtPnFtaW4sIDEsCj4gPiA+IEFWMV9NQVhfUVVBTlQpOwo+ID4gPiArICAg ICAgICB2cGljLT5tYXhfYmFzZV9xaW5kZXggPSBhdl9jbGlwKGF2Y3R4LT5xbWF4LCAxLAo+ID4g PiBBVjFfTUFYX1FVQU5UKTsKPiA+ID4gKwo+ID4gPiArICAgICAgICB2cGljLT5iaXRfb2Zmc2V0 X3FpbmRleCAgICAgICAgICAgID0gcWluZGV4X29mZnNldCAtICg4IC0KPiA+ID4gb2J1X3NpemVf bGVuKSAqIDg7Cj4gPiA+ICsgICAgICAgIHZwaWMtPmJpdF9vZmZzZXRfbG9vcGZpbHRlcl9wYXJh bXMgPSBsb29wZmlsdGVyX29mZnNldCAtCj4gPiA+ICg4IC0gb2J1X3NpemVfbGVuKSAqIDg7Cj4g PiA+ICsgICAgICAgIHZwaWMtPmJpdF9vZmZzZXRfY2RlZl9wYXJhbXMgICAgICAgPSBjZGVmX3N0 YXJ0X29mZnNldCAtCj4gPiA+ICg4IC0gb2J1X3NpemVfbGVuKSAqIDg7Cj4gPiA+ICsgICAgICAg IHZwaWMtPnNpemVfaW5fYml0c19jZGVmX3BhcmFtcyAgICAgPSBjZGVmX2VuZF9vZmZzZXQgLQo+ ID4gPiBjZGVmX3N0YXJ0X29mZnNldDsKPiA+ID4gKyAgICAgICAgdnBpYy0+c2l6ZV9pbl9iaXRz X2ZyYW1lX2hkcl9vYnUgICA9ICpkYXRhX2xlbjsKPiA+ID4gKwo+ID4gPiArICAgICAgICB2cGlj LT5ieXRlX29mZnNldF9mcmFtZV9oZHJfb2J1X3NpemUgPSAoKChwaWMtPnR5cGUgPT0KPiA+ID4g UElDVFVSRV9UWVBFX0lEUikgPwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcml2LT5zaF9kYXRhX2xlbiAvCj4gPiA+IDggOiAwKSArCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaF9vYnUt Cj4gPiA+ID5oZWFkZXIub2J1X2V4dGVuc2lvbl9mbGFnID8KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IDEpKTsKPiA+ID4gKyAgICB9Cj4g PiA+ICsKPiA+ID4gKyAgICByZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGlj IGludCB0aWxlX2xvZzIoaW50IGJsa1NpemUsIGludCB0YXJnZXQpIHsKPiA+ID4gKyAgICBpbnQg azsKPiA+ID4gKyAgICBmb3IgKGsgPSAwOyAoYmxrU2l6ZSA8PCBrKSA8IHRhcmdldDsgaysrKTsK PiA+ID4gKyAgICByZXR1cm4gazsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCB2 YWFwaV9lbmNvZGVfYXYxX3NldF90aWxlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiA+ID4gK3sK PiA+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRh Owo+ID4gPiArICAgIGludCBtaV9jb2xzLCBtaV9yb3dzLCBzYl9zaGlmdCwgc2Jfc2l6ZTsKPiA+ ID4gKyAgICBpbnQgbWF4X3RpbGVfYXJlYV9zYiwgbWF4X3RpbGVfYXJlYV9zYl92YXJpZWQ7Cj4g PiA+ICsgICAgaW50IHRpbGVfd2lkdGhfc2IsIHRpbGVfaGVpZ2h0X3NiLCB3aWRlc3RfdGlsZV9z YjsKPiA+ID4gKyAgICBpbnQgbWluX2xvZzJfdGlsZXM7Cj4gPiA+ICsgICAgaW50IHRpbGVfcm93 c190bXAsIGk7Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAocHJpdi0+dGlsZV9jb2xzID4gQVYxX01B WF9USUxFX0NPTFMgfHwKPiA+ID4gKyAgICAgICAgcHJpdi0+dGlsZV9yb3dzID4gQVYxX01BWF9U SUxFX1JPV1MpIHsKPiA+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIHRpbGUgbnVtYmVyICVkeCVkLAo+ID4gPiBzaG91bGQgbGVzcyB0aGFuICVkeCVkLlxu IiwKPiA+ID4gKyAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29scywgcHJpdi0+dGlsZV9yb3dz LAo+ID4gPiBBVjFfTUFYX1RJTEVfQ09MUywgQVYxX01BWF9USUxFX1JPV1MpOwo+ID4KPiA+IENh bid0IHRoaXMgYmUgYSBjb25zdHJhaW50IG9uIHRoZSBvcHRpb24gcmF0aGVyIHRoYW4gYSBzcGVj aWFsIGNoZWNrCj4gPiBoZXJlPwo+Cj4gVGlsZXMgc2V0IHdpdGggSU1BR0VfU0laRSBvcHRpb24g dHlwZSB3aGljaCBhbGlnbnMgd2l0aCBIRVZDLiBJdAo+IGRvZXNuJ3Qgc3VwcG9ydCBNaW4vTUFY IGNoZWNrLgo+Cj4gPgo+ID4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ID4g PiArICAgIH0KPiA+ID4gKwo+ID4gPiArICAgIG1pX2NvbHMgPSAyICogKChhdmN0eC0+d2lkdGgg KyA3KSA+PiAzKTsKPiA+ID4gKyAgICBtaV9yb3dzID0gMiAqICgoYXZjdHgtPmhlaWdodCArIDcp ID4+IDMpOwo+ID4gPiArICAgIHByaXYtPnNiX2NvbHMgPSBwcml2LT51c2VfMTI4eDEyOF9zdXBl cmJsb2NrID8KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgKChtaV9jb2xzICsgMzEpID4+IDUp IDogKChtaV9jb2xzICsgMTUpID4+IDQpOwo+ID4gPiArICAgIHByaXYtPnNiX3Jvd3MgPSBwcml2 LT51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgKCht aV9yb3dzICsgMzEpID4+IDUpIDogKChtaV9yb3dzICsgMTUpID4+IDQpOwo+ID4gPiArICAgIHNi X3NoaWZ0ID0gcHJpdi0+dXNlXzEyOHgxMjhfc3VwZXJibG9jayA/IDUgOiA0Owo+ID4gPiArICAg IHNiX3NpemUgID0gc2Jfc2hpZnQgKyAyOwo+ID4gPiArICAgIHByaXYtPm1heF90aWxlX3dpZHRo X3NiID0gQVYxX01BWF9USUxFX1dJRFRIID4+IHNiX3NpemU7Cj4gPiA+ICsgICAgbWF4X3RpbGVf YXJlYV9zYiA9IEFWMV9NQVhfVElMRV9BUkVBICA+PiAoMiAqIHNiX3NpemUpOwo+ID4gPiArCj4g PiA+ICsgICAgcHJpdi0+bWluX2xvZzJfdGlsZV9jb2xzID0gdGlsZV9sb2cyKHByaXYtPm1heF90 aWxlX3dpZHRoX3NiLAo+ID4gPiBwcml2LT5zYl9jb2xzKTsKPiA+ID4gKyAgICBwcml2LT5tYXhf bG9nMl90aWxlX2NvbHMgPSB0aWxlX2xvZzIoMSwgRkZNSU4ocHJpdi0+c2JfY29scywKPiA+ID4g QVYxX01BWF9USUxFX0NPTFMpKTsKPiA+ID4gKyAgICBwcml2LT5tYXhfbG9nMl90aWxlX3Jvd3Mg PSB0aWxlX2xvZzIoMSwgRkZNSU4ocHJpdi0+c2Jfcm93cywKPiA+ID4gQVYxX01BWF9USUxFX1JP V1MpKTsKPiA+ID4gKyAgICBtaW5fbG9nMl90aWxlcyA9IEZGTUFYKHByaXYtPm1pbl9sb2cyX3Rp bGVfY29scywKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVfbG9nMihtYXhf dGlsZV9hcmVhX3NiLCBwcml2LQo+ID4gPiA+c2Jfcm93cyAqIHByaXYtPnNiX2NvbHMpKTsKPiA+ ID4gKwo+ID4gPiArICAgIGlmIChwcml2LT50aWxlX2NvbHMgIT0gYXZfY2xpcChwcml2LT50aWxl X2NvbHMsIChwcml2LT5zYl9jb2xzCj4gPiA+ICsgcHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IgLSAx KSAvIHByaXYtPm1heF90aWxlX3dpZHRoX3NiLCBwcml2LQo+ID4gPiA+c2JfY29scykpIHsKPiA+ ID4gKyAgICAgICAgcHJpdi0+dGlsZV9jb2xzID0gYXZfY2xpcChwcml2LT50aWxlX2NvbHMsIChw cml2LT5zYl9jb2xzCj4gPiA+ICsgcHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IgLSAxKSAvIHByaXYt Pm1heF90aWxlX3dpZHRoX3NiLCBwcml2LQo+ID4gPiA+c2JfY29scyk7Cj4gPiA+ICsgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbnZhbGlkIHRpbGUgY29scywgY29ycmVj dAo+ID4gPiB0byAlZC5cbiIsIHByaXYtPnRpbGVfY29scyk7Cj4gPiA+ICsgICAgfQo+ID4KPiA+ IElmIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrZWQgZm9yIGEgbnVtYmVyIHdoaWNoIGlzbid0IHBv c3NpYmxlIHRoZW4KPiA+IHlvdSBwcm9iYWJseSB3YW50IHRvIGZhaWwgaGVyZSAoc2VlIGNvbW1l bnQgYWJvdXQgc29tZSBzb3J0IG9mICJhdXRvIgo+ID4gc2V0dGluZyBhYm92ZSkuCj4KPiBPSywg d2lsbCBjaGFuZ2UgaXQgdG8gJ2F1dG8nIGJ5IGRlZmF1bHQuCj4KPiA+Cj4gPiA+ICsKPiA+ID4g KyAgICBwcml2LT50aWxlX2NvbHNfbG9nMiA9IHRpbGVfbG9nMigxLCBwcml2LT50aWxlX2NvbHMp Owo+ID4gPiArICAgIHRpbGVfd2lkdGhfc2IgPSAocHJpdi0+c2JfY29scyArICgxIDw8IHByaXYt PnRpbGVfY29sc19sb2cyKSAtCj4gPiA+IDEpID4+Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAg IHByaXYtPnRpbGVfY29sc19sb2cyOwo+ID4gPiArCj4gPiA+ICsgICAgaWYgKHByaXYtPnRpbGVf cm93cyA+IHByaXYtPnNiX3Jvd3MpIHsKPiA+ID4gKyAgICAgICAgcHJpdi0+dGlsZV9yb3dzID0g cHJpdi0+c2Jfcm93czsKPiA+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklO RywgIkludmFsaWQgdGlsZSByb3dzLCBjb3JyZWN0Cj4gPiA+IHRvICVkLlxuIiwgcHJpdi0+dGls ZV9yb3dzKTsKPiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICBmb3IgKHRpbGVfcm93c190 bXAgPSBwcml2LT50aWxlX3Jvd3M7IHRpbGVfcm93c190bXAgPD0gcHJpdi0KPiA+ID4gPnNiX3Jv d3MgJiYgdGlsZV9yb3dzX3RtcCA8PSBBVjFfTUFYX1RJTEVfUk9XUzsgdGlsZV9yb3dzX3RtcCsr KSB7Cj4gPiA+ICsgICAgICAgIC8qKiB0cnkgdW5pZm9ybWVkIHRpbGUuICovCj4gPiA+ICsgICAg ICAgIHByaXYtPnRpbGVfcm93c19sb2cyID0gdGlsZV9sb2cyKDEsIHRpbGVfcm93c190bXApOwo+ ID4gPiArICAgICAgICBpZiAoKHByaXYtPnNiX2NvbHMgKyB0aWxlX3dpZHRoX3NiIC0gMSkgLyB0 aWxlX3dpZHRoX3NiID09Cj4gPiA+IHByaXYtPnRpbGVfY29scykgewo+ID4gPiArICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnRpbGVfY29scyAtIDE7IGkrKykKPiA+ID4gKyAgICAg ICAgICAgICAgICBwcml2LT53aWR0aF9pbl9zYnNfbWludXNfMVtpXSA9IHRpbGVfd2lkdGhfc2Ig LSAxOwo+ID4gPiArICAgICAgICAgICAgcHJpdi0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSBw cml2LT5zYl9jb2xzIC0gKHByaXYtCj4gPiA+ID50aWxlX2NvbHMgLSAxKSAqIHRpbGVfd2lkdGhf c2IgLSAxOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICB0aWxlX2hlaWdodF9zYiA9IChwcml2 LT5zYl9yb3dzICsgKDEgPDwgcHJpdi0KPiA+ID4gPnRpbGVfcm93c19sb2cyKSAtIDEpID4+Cj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVfcm93c19sb2cyOwo+ ID4gPiArCj4gPiA+ICsgICAgICAgICAgICBpZiAoKHByaXYtPnNiX3Jvd3MgKyB0aWxlX2hlaWdo dF9zYiAtIDEpIC8KPiA+ID4gdGlsZV9oZWlnaHRfc2IgPT0gdGlsZV9yb3dzX3RtcCAmJgo+ID4g PiArICAgICAgICAgICAgICAgIHRpbGVfaGVpZ2h0X3NiIDw9IG1heF90aWxlX2FyZWFfc2IgLwo+ ID4gPiB0aWxlX3dpZHRoX3NiKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IHRpbGVfcm93c190bXAgLSAxOyBpKyspCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIHBy aXYtPmhlaWdodF9pbl9zYnNfbWludXNfMVtpXSA9Cj4gPiA+IHRpbGVfaGVpZ2h0X3NiIC0gMTsK PiA+ID4gKyAgICAgICAgICAgICAgICBwcml2LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPSBw cml2LT5zYl9yb3dzIC0KPiA+ID4gKHRpbGVfcm93c190bXAgLSAxKSAqIHRpbGVfaGVpZ2h0X3Ni IC0gMTsKPiA+ID4gKwo+ID4gPiArICAgICAgICAgICAgICAgIHByaXYtPnVuaWZvcm1fdGlsZSA9 IDE7Cj4gPiA+ICsgICAgICAgICAgICAgICAgcHJpdi0+bWluX2xvZzJfdGlsZV9yb3dzID0gRkZN QVgobWluX2xvZzJfdGlsZXMgLQo+ID4gPiBwcml2LT50aWxlX2NvbHNfbG9nMiwgMCk7Cj4gPiA+ ICsKPiA+ID4gKyAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKyAgICAgICAgICAgIH0KPiA+ ID4gKyAgICAgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgICAgIC8qKiB0cnkgbm9uLXVuaWZvcm1l ZCB0aWxlLiAqLwo+ID4gPiArICAgICAgICB3aWRlc3RfdGlsZV9zYiA9IDA7Cj4gPiA+ICsgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT50aWxlX2NvbHM7IGkrKykgewo+ID4gPiArICAgICAg ICAgICAgcHJpdi0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSAoaSArIDEpICogcHJpdi0KPiA+ ID4gPnNiX2NvbHMgLyBwcml2LT50aWxlX2NvbHMgLSBpICogcHJpdi0+c2JfY29scyAvIHByaXYt PnRpbGVfY29scyAtCj4gPiA+IDE7Cj4gPiA+ICsgICAgICAgICAgICB3aWRlc3RfdGlsZV9zYiA9 IEZGTUFYKHdpZGVzdF90aWxlX3NiLCBwcml2LQo+ID4gPiA+d2lkdGhfaW5fc2JzX21pbnVzXzFb aV0gKyAxKTsKPiA+ID4gKyAgICAgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgICAgIGlmIChtaW5f bG9nMl90aWxlcykKPiA+ID4gKyAgICAgICAgICAgIG1heF90aWxlX2FyZWFfc2JfdmFyaWVkID0g KHByaXYtPnNiX3Jvd3MgKiBwcml2LQo+ID4gPiA+c2JfY29scykgPj4gKG1pbl9sb2cyX3RpbGVz ICsgMSk7Cj4gPiA+ICsgICAgICAgIGVsc2UKPiA+ID4gKyAgICAgICAgICAgIG1heF90aWxlX2Fy ZWFfc2JfdmFyaWVkID0gcHJpdi0+c2Jfcm93cyAqIHByaXYtCj4gPiA+ID5zYl9jb2xzOwo+ID4g PiArICAgICAgICBwcml2LT5tYXhfdGlsZV9oZWlnaHRfc2IgPSBGRk1BWCgxLAo+ID4gPiBtYXhf dGlsZV9hcmVhX3NiX3ZhcmllZCAvIHdpZGVzdF90aWxlX3NiKTsKPiA+ID4gKwo+ID4gPiArICAg ICAgICBpZiAodGlsZV9yb3dzX3RtcCA9PSBhdl9jbGlwKHRpbGVfcm93c190bXAsIChwcml2LT5z Yl9yb3dzCj4gPiA+ICsgcHJpdi0+bWF4X3RpbGVfaGVpZ2h0X3NiIC0gMSkgLyBwcml2LT5tYXhf dGlsZV9oZWlnaHRfc2IsIHByaXYtCj4gPiA+ID5zYl9yb3dzKSkgewo+ID4gPiArICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHRpbGVfcm93c190bXA7IGkrKykKPiA+ID4gKyAgICAgICAgICAg ICAgICBwcml2LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPSAoaSArIDEpICogcHJpdi0KPiA+ ID4gPnNiX3Jvd3MgLyB0aWxlX3Jvd3NfdG1wIC0gaSAqIHByaXYtPnNiX3Jvd3MgLyB0aWxlX3Jv d3NfdG1wIC0gMTsKPiA+ID4gKwo+ID4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiA+ICsgICAg ICAgIH0KPiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAocHJpdi0+dGlsZV9yb3dz ICE9IHRpbGVfcm93c190bXApIHsKPiA+ID4gKyAgICAgICAgcHJpdi0+dGlsZV9yb3dzID0gdGls ZV9yb3dzX3RtcDsKPiA+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywg IkludmFsaWQgdGlsZSByb3dzLCBjb3JyZWN0Cj4gPiA+IHRvICVkLlxuIiwgcHJpdi0+dGlsZV9y b3dzKTsKPiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAvKiogY2hlY2sgaWYgdGlsZSBj b2xzL3Jvd3MgaXMgc3VwcG9ydGVkIGJ5IGRyaXZlci4gKi8KPiA+ID4gKyAgICBpZiAocHJpdi0+ YXR0cl9leHQyLmJpdHMubWF4X3RpbGVfbnVtX21pbnVzMSkgewo+ID4gPiArICAgICAgICBpZiAo KHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93cyAtIDEpID4gcHJpdi0KPiA+ID4gPmF0 dHJfZXh0Mi5iaXRzLm1heF90aWxlX251bV9taW51czEpIHsKPiA+ID4gKyAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgdGlsZSBudW0gJWQgKgo+ID4g PiAlZCA9ICVkIGJ5IGRyaXZlciwgIgo+ID4gPiArICAgICAgICAgICAgICAgICAgICJzaG91bGQg YmUgbGVzcyB0aGFuICVkLlxuIiwgcHJpdi0+dGlsZV9jb2xzLAo+ID4gPiBwcml2LT50aWxlX3Jv d3MsCj4gPgo+ID4gcy9sZXNzIHRoYW4vYXQgbW9zdC8gPwo+ID4KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MsCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgcHJpdi0+YXR0cl9leHQyLmJpdHMubWF4X3RpbGVfbnVtX21pbnVzMSArIDEp Owo+ID4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+ID4gKyAgICAg ICAgfQo+ID4gPiArICAgIH0KPiA+ID4gKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg IlNldHRpbmcgdGlsZSBjb2xzL3Jvd3MgdG8KPiA+ID4gJWQvJWQuXG4iLAo+ID4gPiArICAgICAg ICAgICBwcml2LT50aWxlX2NvbHMsIHByaXYtPnRpbGVfcm93cyk7Cj4gPiA+ICsKPiA+ID4gKyAg ICAvKiogY2hlY2sgaWYgdGlsZSBncm91cCBudW1iZXJzIGlzIHZhbGlkLiAqLwo+ID4gPiArICAg IGlmIChwcml2LT50aWxlX2dyb3VwcyA+IHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93 cykgewo+ID4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiSW52YWxp ZCB0aWxlIGdyb3VwcyBudW1iZXIKPiA+ID4gJWQsICIKPiA+ID4gKyAgICAgICAgImNvcnJlY3Qg dG8gJWQuXG4iLCBwcml2LT50aWxlX2dyb3VwcywgcHJpdi0+dGlsZV9jb2xzICoKPiA+ID4gcHJp di0+dGlsZV9yb3dzKTsKPiA+ID4gKyAgICAgICAgcHJpdi0+dGlsZV9ncm91cHMgPSBwcml2LT50 aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3M7Cj4gPiA+ICsgICAgfQo+ID4gPiArCj4gPiA+ICsg ICAgcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgdmFhcGlfZW5j b2RlX2F2MV93cml0ZV9zZXF1ZW5jZV9oZWFkZXIoQVZDb2RlY0NvbnRleHQKPiA+ID4gKmF2Y3R4 LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICpkYXRhLAo+ID4gPiBzaXplX3QgKmRhdGFfbGVuKQo+ID4gPiArewo+ID4gPiArICAg IFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiA+ICsK PiA+ID4gKyAgICBtZW1jcHkoZGF0YSwgJnByaXYtPnNoX2RhdGEsIE1BWF9QQVJBTV9CVUZGRVJf U0laRSAqCj4gPiA+IHNpemVvZihjaGFyKSk7Cj4gPiA+ICsgICAgKmRhdGFfbGVuID0gcHJpdi0+ c2hfZGF0YV9sZW47Cj4gPgo+ID4gSSdtIGNvbmZ1c2VkIHdoeSB5b3Ugd3JpdGUgdGhlIHNlcXVl bmNlIGhlYWRlciBpbiB0aGUgaW5pdCBmdW5jdGlvbgo+ID4gYW5kIHRoZW4gc3RvcmUgaXQgdG8g dXNlIGhlcmU/Cj4KPiBTZXF1ZW5jZSBkYXRhIGlzIGtlZXAgc2FtZSBkdXJpbmcgdGhlIGVuY29k ZSwgc28gSSB0aGluayBpdCBkb2Vzbid0Cj4gbmVlZCB0byByZS13cml0ZSBpdCBpbiBlYWNoIEdP UC4KPgo+ID4KPiA+ID4gKwo+ID4gPiArICAgIHJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZD b2RlY0NvbnRleHQKPiA+ID4gKmF2Y3R4KQo+ID4gPiArewo+ID4gPiArICAgIFZBQVBJRW5jb2Rl Q29udGV4dCAgICAgICAgICAgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gPiArICAg IFZBQVBJRW5jb2RlQVYxQ29udGV4dCAgICAgICAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRh Owo+ID4gPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICAgICAgICpzaF9vYnUgPSAmcHJp di0+c2g7Cj4gPiA+ICsgICAgQVYxUmF3U2VxdWVuY2VIZWFkZXIgICAgICAgICAgICAgICpzaCA9 ICZzaF9vYnUtCj4gPiA+ID5vYnUuc2VxdWVuY2VfaGVhZGVyOwo+ID4gPiArICAgIFZBRW5jU2Vx dWVuY2VQYXJhbWV0ZXJCdWZmZXJBVjEgKnZzZXEgPSBjdHgtCj4gPiA+ID5jb2RlY19zZXF1ZW5j ZV9wYXJhbXM7Cj4gPiA+ICsgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAgICAgICAgICAgKm9i dSA9ICZwcml2LT5jdXJyZW50X29idTsKPiA+ID4gKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0 b3IgKmRlc2M7Cj4gPiA+ICsgICAgaW50IHJldDsKPiA+ID4gKwo+ID4gPiArICAgIG1lbXNldChz aF9vYnUsIDAsIHNpemVvZigqc2hfb2J1KSk7Cj4gPiA+ICsgICAgc2hfb2J1LT5oZWFkZXIub2J1 X3R5cGUgPSBBVjFfT0JVX1NFUVVFTkNFX0hFQURFUjsKPiA+ID4gKwo+ID4gPiArICAgIGRlc2Mg PSBhdl9waXhfZm10X2Rlc2NfZ2V0KHByaXYtPmNvbW1vbi5pbnB1dF9mcmFtZXMtCj4gPiA+ID5z d19mb3JtYXQpOwo+ID4gPiArICAgIGF2X2Fzc2VydDAoZGVzYyk7Cj4gPiA+ICsKPiA+ID4gKyAg ICBzaC0+c2VxX3Byb2ZpbGUgID0gYXZjdHgtPnByb2ZpbGU7Cj4gPiA+ICsgICAgaWYgKCFzaC0+ c2VxX2ZvcmNlX3NjcmVlbl9jb250ZW50X3Rvb2xzKQo+ID4gPiArICAgICAgICBzaC0+c2VxX2Zv cmNlX2ludGVnZXJfbXYgPSBBVjFfU0VMRUNUX0lOVEVHRVJfTVY7Cj4gPiA+ICsgICAgc2gtPmZy YW1lX3dpZHRoX2JpdHNfbWludXNfMSAgPSBhdl9sb2cyKGF2Y3R4LT53aWR0aCk7Cj4gPiA+ICsg ICAgc2gtPmZyYW1lX2hlaWdodF9iaXRzX21pbnVzXzEgPSBhdl9sb2cyKGF2Y3R4LT5oZWlnaHQp Owo+ID4gPiArICAgIHNoLT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSAgID0gYXZjdHgtPndpZHRo IC0gMTsKPiA+ID4gKyAgICBzaC0+bWF4X2ZyYW1lX2hlaWdodF9taW51c18xICA9IGF2Y3R4LT5o ZWlnaHQgLSAxOwo+ID4gPiArICAgIHNoLT5zZXFfdGllclswXSAgICAgICAgICAgICAgID0gcHJp di0+dGllcjsKPiA+ID4gKyAgICAvKiogZW5hYmxlIG9yZGVyIGhpbnQgYW5kIHJlc2VydmUgbWF4 aW11bSA4IGJpdHMgZm9yIGl0IGJ5Cj4gPiA+IGRlZmF1bHQuICovCj4gPiA+ICsgICAgc2gtPmVu YWJsZV9vcmRlcl9oaW50ICAgICAgICAgPSAxOwo+ID4gPiArICAgIHNoLT5vcmRlcl9oaW50X2Jp dHNfbWludXNfMSAgID0gNzsKPiA+ID4gKwo+ID4gPiArICAgIHNoLT5jb2xvcl9jb25maWcgPSAo QVYxUmF3Q29sb3JDb25maWcpIHsKPiA+ID4gKyAgICAgICAgLmhpZ2hfYml0ZGVwdGggICAgICAg ICAgICAgICAgICA9IGRlc2MtPmNvbXBbMF0uZGVwdGggPT0gOAo+ID4gPiA/IDAgOiAxLAo+ID4g PiArICAgICAgICAuY29sb3JfcHJpbWFyaWVzICAgICAgICAgICAgICAgID0gYXZjdHgtPmNvbG9y X3ByaW1hcmllcywKPiA+ID4gKyAgICAgICAgLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcyAgICAg ICA9IGF2Y3R4LT5jb2xvcl90cmMsCj4gPiA+ICsgICAgICAgIC5tYXRyaXhfY29lZmZpY2llbnRz ICAgICAgICAgICAgPSBhdmN0eC0+Y29sb3JzcGFjZSwKPiA+ID4gKyAgICAgICAgLmNvbG9yX2Rl c2NyaXB0aW9uX3ByZXNlbnRfZmxhZyA9IChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzCj4gPiA+ICE9 IEFWQ09MX1BSSV9VTlNQRUNJRklFRCB8fAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGF2Y3R4LQo+ID4gPiA+Y29sb3JfdHJjICAgICAgICE9IEFWQ09M X1RSQ19VTlNQRUNJRklFRCB8fAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGF2Y3R4LQo+ID4gPiA+Y29sb3JzcGFjZSAgICAgICE9IEFWQ09MX1NQQ19V TlNQRUNJRklFRCksCj4gPiA+ICsgICAgICAgIC5jb2xvcl9yYW5nZSAgICAgICAgICAgICAgICAg ICAgPSBhdmN0eC0+Y29sb3JfcmFuZ2UgPT0KPiA+ID4gQVZDT0xfUkFOR0VfSlBFRywKPiA+ID4g KyAgICAgICAgLnN1YnNhbXBsaW5nX3ggICAgICAgICAgICAgICAgICA9IGRlc2MtPmxvZzJfY2hy b21hX3csCj4gPiA+ICsgICAgICAgIC5zdWJzYW1wbGluZ195ICAgICAgICAgICAgICAgICAgPSBk ZXNjLT5sb2cyX2Nocm9tYV9oLAo+ID4KPiA+IC5jaHJvbWFfc2FtcGxlX3Bvc2l0aW9uID0gc29t ZSBmdW5jdGlvbiBvZiBjaHJvbWFfc2FtcGxlX2xvY2F0aW9uLgo+Cj4gVGhlcmUgaXMgbm8gY2hy b21hX3NhbXBsZV9wb3NpdGlvbiBzdXBwb3J0ZWQgaW4gVkFBUEkgeWV0Lgo+Cj4gPgo+ID4gPiAr ICAgIH07Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAoYXZjdHgtPmxldmVsICE9IEZGX0xFVkVMX1VO S05PV04pIHsKPiA+ID4gKyAgICAgICAgc2gtPnNlcV9sZXZlbF9pZHhbMF0gPSBhdmN0eC0+bGV2 ZWw7Cj4gPiA+ICsgICAgfSBlbHNlIHsKPiA+ID4gKyAgICAgICAgY29uc3QgQVYxTGV2ZWxEZXNj cmlwdG9yICpsZXZlbDsKPiA+ID4gKyAgICAgICAgZmxvYXQgZnJhbWVyYXRlOwo+ID4gPiArCj4g PiA+ICsgICAgICAgIGlmIChhdmN0eC0+ZnJhbWVyYXRlLm51bSA+IDAgJiYgYXZjdHgtPmZyYW1l cmF0ZS5kZW4gPiAwKQo+ID4gPiArICAgICAgICAgICAgZnJhbWVyYXRlID0gYXZjdHgtPmZyYW1l cmF0ZS5udW0gLyBhdmN0eC0KPiA+ID4gPmZyYW1lcmF0ZS5kZW47Cj4gPiA+ICsgICAgICAgIGVs c2UKPiA+ID4gKyAgICAgICAgICAgIGZyYW1lcmF0ZSA9IDA7Cj4gPiA+ICsKPiA+ID4gKyAgICAg ICAgbGV2ZWwgPSBmZl9hdjFfZ3Vlc3NfbGV2ZWwoYXZjdHgtPmJpdF9yYXRlLCBwcml2LT50aWVy LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnN1cmZhY2Vf d2lkdGgsIGN0eC0KPiA+ID4gPnN1cmZhY2VfaGVpZ2h0LAo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcml2LT50aWxlX3Jvd3MgKiBwcml2LQo+ID4gPiA+dGlsZV9j b2xzLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT50aWxl X2NvbHMsIGZyYW1lcmF0ZSk7Cj4gPiA+ICsgICAgICAgIGlmIChsZXZlbCkgewo+ID4gPiArICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIGxldmVsICVzLlxu IiwKPiA+ID4gbGV2ZWwtPm5hbWUpOwo+ID4gPiArICAgICAgICAgICAgc2gtPnNlcV9sZXZlbF9p ZHhbMF0gPSBsZXZlbC0+bGV2ZWxfaWR4Owo+ID4gPiArICAgICAgICB9IGVsc2Ugewo+ID4gPiAr ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlN0cmVhbSB3aWxsIG5v dCBjb25mb3JtCj4gPiA+IHRvICIKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAiYW55IG5vcm1h bCBsZXZlbCwgdXNpbmcgbGV2ZWwgNi4zIGJ5Cj4gPiA+IGRlZmF1bHQuXG4iKTsKPiA+ID4gKyAg ICAgICAgICAgIHNoLT5zZXFfbGV2ZWxfaWR4WzBdID0gMTk7Cj4gPgo+ID4gSXNuJ3QgdGhpcyBl eGFjdGx5IHdoYXQgbGV2ZWxfaWR4ID09IDMxIGlzIGZvcj8KPiA+Cj4gPiA+ICsgICAgICAgICAg ICBzaC0+c2VxX3RpZXJbMF0gPSAxOwo+ID4gPiArICAgICAgICB9Cj4gPiA+ICsgICAgfQo+ID4g PiArICAgIHZzZXEtPnNlcV9wcm9maWxlICAgICAgICAgICAgID0gc2gtPnNlcV9wcm9maWxlOwo+ ID4gPiArICAgIHZzZXEtPnNlcV9sZXZlbF9pZHggICAgICAgICAgID0gc2gtPnNlcV9sZXZlbF9p ZHhbMF07Cj4gPiA+ICsgICAgdnNlcS0+c2VxX3RpZXIgICAgICAgICAgICAgICAgPSBzaC0+c2Vx X3RpZXJbMF07Cj4gPiA+ICsgICAgdnNlcS0+b3JkZXJfaGludF9iaXRzX21pbnVzXzEgPSBzaC0+ b3JkZXJfaGludF9iaXRzX21pbnVzXzE7Cj4gPiA+ICsgICAgdnNlcS0+aW50cmFfcGVyaW9kICAg ICAgICAgICAgPSBjdHgtPmdvcF9zaXplOwo+ID4gPiArICAgIHZzZXEtPmlwX3BlcmlvZCAgICAg ICAgICAgICAgID0gY3R4LT5iX3Blcl9wICsgMTsKPiA+ID4gKwo+ID4gPiArICAgIHZzZXEtPnNl cV9maWVsZHMuYml0cy5lbmFibGVfb3JkZXJfaGludCA9IHNoLQo+ID4gPiA+ZW5hYmxlX29yZGVy X2hpbnQ7Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAoIShjdHgtPnZhX3JjX21vZGUgJiBWQV9SQ19D UVApKSB7Cj4gPiA+ICsgICAgICAgIHZzZXEtPmJpdHNfcGVyX3NlY29uZCA9IGN0eC0+dmFfYml0 X3JhdGU7Cj4gPiA+ICsgICAgICAgIHZzZXEtPnNlcV9maWVsZHMuYml0cy5lbmFibGVfY2RlZiA9 IHNoLT5lbmFibGVfY2RlZiA9IDE7Cj4gPiA+ICsgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgcmV0 ID0gdmFhcGlfZW5jb2RlX2F2MV9hZGRfb2J1KGF2Y3R4LCBvYnUsCj4gPiA+IEFWMV9PQlVfU0VR VUVOQ0VfSEVBREVSLCAmcHJpdi0+c2gpOwo+ID4gPiArICAgIGlmIChyZXQgPCAwKQo+ID4gPiAr ICAgICAgICBnb3RvIGVuZDsKPiA+ID4gKwo+ID4gPiArICAgIHJldCA9IHZhYXBpX2VuY29kZV9h djFfd3JpdGVfb2J1KGF2Y3R4LCBwcml2LT5zaF9kYXRhLCAmcHJpdi0KPiA+ID4gPnNoX2RhdGFf bGVuLCBvYnUpOwo+ID4gPiArICAgIGlmIChyZXQgPCAwKQo+ID4gPiArICAgICAgICBnb3RvIGVu ZDsKPiA+ID4gKwo+ID4gPiArZW5kOgo+ID4gPiArICAgIGZmX2Nic19mcmFnbWVudF9yZXNldChv YnUpOwo+ID4gPiArICAgIHJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRp YyBpbnQgdmFhcGlfZW5jb2RlX2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0 Cj4gPiA+ICphdmN0eCwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZBQVBJRW5jb2RlUGljdHVyZQo+ID4gPiAqcGljKQo+ID4gPiArewo+ID4g PiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAgICAgICAgICAqcHJpdiA9IGF2Y3R4LT5wcml2 X2RhdGE7Cj4gPiA+ICsgICAgVkFBUElFbmNvZGVBVjFQaWN0dXJlICAgICAgICAgICpocGljID0g cGljLT5wcml2X2RhdGE7Cj4gPiA+ICsgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAgICAgICAq Zmhfb2J1ID0gJnByaXYtPmZoOwo+ID4gPiArICAgIEFWMVJhd0ZyYW1lSGVhZGVyICAgICAgICAg ICAgICAgICpmaCA9ICZmaF9vYnUtCj4gPiA+ID5vYnUuZnJhbWUuaGVhZGVyOwo+ID4gPiArICAg IFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckFWMSAqdnBpYyA9IHBpYy0KPiA+ID4gPmNvZGVj X3BpY3R1cmVfcGFyYW1zOwo+ID4gPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgICAgICAg ICAgKm9idSA9ICZwcml2LT5jdXJyZW50X29idTsKPiA+ID4gKyAgICBWQUFQSUVuY29kZVBpY3R1 cmUgICAgKnJlZjsKPiA+ID4gKyAgICBWQUFQSUVuY29kZUFWMVBpY3R1cmUgKmhyZWY7Cj4gPiA+ ICsgICAgaW50IHNsb3QsIGk7Cj4gPiA+ICsgICAgaW50IHJldDsKPiA+ID4gKyAgICBzdGF0aWMg Y29uc3QgaW50OF90Cj4gPiA+IGRlZmF1bHRfbG9vcF9maWx0ZXJfcmVmX2RlbHRhc1tBVjFfVE9U QUxfUkVGU19QRVJfRlJBTUVdID0KPiA+ID4gKyAgICAgICAgeyAxLCAwLCAwLCAwLCAtMSwgMCwg LTEsIC0xIH07Cj4gPiA+ICsKPiA+ID4gKyAgICBtZW1zZXQoZmhfb2J1LCAwLCBzaXplb2YoKmZo X29idSkpOwo+ID4gPiArICAgIHBpYy0+bmJfc2xpY2VzID0gcHJpdi0+dGlsZV9ncm91cHM7Cj4g PiA+ICsgICAgZmhfb2J1LT5oZWFkZXIub2J1X3R5cGUgPSBBVjFfT0JVX0ZSQU1FX0hFQURFUjsK PiA+ID4gKyAgICBmaF9vYnUtPmhlYWRlci5vYnVfaGFzX3NpemVfZmllbGQgPSAxOwo+ID4gPiAr Cj4gPiA+ICsgICAgc3dpdGNoIChwaWMtPnR5cGUpIHsKPiA+ID4gKyAgICBjYXNlIFBJQ1RVUkVf VFlQRV9JRFI6Cj4gPiA+ICsgICAgICAgIGF2X2Fzc2VydDAocGljLT5uYl9yZWZzWzBdID09IDAg fHwgcGljLT5uYl9yZWZzWzFdKTsKPiA+ID4gKyAgICAgICAgZmgtPmZyYW1lX3R5cGUgPSBBVjFf RlJBTUVfS0VZOwo+ID4gPiArICAgICAgICBmaC0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4RkY7 Cj4gPiA+ICsgICAgICAgIGZoLT5iYXNlX3FfaWR4ID0gcHJpdi0+cV9pZHhfaWRyOwo+ID4gPiAr ICAgICAgICBocGljLT5zbG90ID0gMDsKPiA+ID4gKyAgICAgICAgaHBpYy0+bGFzdF9pZHJfZnJh bWUgPSBwaWMtPmRpc3BsYXlfb3JkZXI7Cj4gPiA+ICsgICAgICAgIGJyZWFrOwo+ID4gPiArICAg IGNhc2UgUElDVFVSRV9UWVBFX1A6Cj4gPiA+ICsgICAgICAgIGF2X2Fzc2VydDAocGljLT5uYl9y ZWZzWzBdKTsKPiA+ID4gKyAgICAgICAgZmgtPmZyYW1lX3R5cGUgPSBBVjFfRlJBTUVfSU5URVI7 Cj4gPiA+ICsgICAgICAgIGZoLT5iYXNlX3FfaWR4ID0gcHJpdi0+cV9pZHhfcDsKPiA+ID4gKyAg ICAgICAgcmVmID0gcGljLT5yZWZzWzBdW3BpYy0+bmJfcmVmc1swXSAtIDFdOwo+ID4gPiArICAg ICAgICBocmVmID0gcmVmLT5wcml2X2RhdGE7Cj4gPiA+ICsgICAgICAgIGhwaWMtPnNsb3QgPSAh aHJlZi0+c2xvdDsKPiA+Cj4gPiBJJ20gdmVyeSBjb25mdXNlZCBob3cgYWxsIG9mIHRoZXNlIG11 bHRpcGxlLXJlZmVyZW5jZSBzdHVmZiBjYW4gd29yawo+ID4gaWYgeW91IG9ubHkgZXZlciBwdXQg cGljdHVyZXMgaW4gc2xvdHMgMCBhbmQgMS4KPiA+Cj4gPiBXaGF0IGRvZXMgaXQgYWN0dWFsbHkg bG9vayBsaWtlPyAgQ2FuIHlvdSBzaGFyZSBhIHN0cmVhbSB1c2luZyBpdD8KPgo+IEFuIGV4YW1w bGUgZW5jb2RlZCBieToKPiAjIGZmbXBlZyAtdmFhcGlfZGV2aWNlIC9kZXYvZHJpL3JlbmRlckQx MjggLWYgbGF2ZmkgLWkgdGVzdHNyYyAtdmYKPiBmb3JtYXQ9bnYxMixod3VwbG9hZCAtYzp2IGF2 MV92YWFwaSAtdmZyYW1lcyAxMDAgLXkgdmFhcGlfYXYxLm1wNAo+Cj4gaHR0cHM6Ly9kcml2ZS5n b29nbGUuY29tL2ZpbGUvZC8xclBfY2lkaktWMUdLendHekc3LWVzcmh3X3JkV3lBY0cvdmlldwo+ Cj4gPgo+ID4gPiArICAgICAgICBocGljLT5sYXN0X2lkcl9mcmFtZSA9IGhyZWYtPmxhc3RfaWRy X2ZyYW1lOwo+ID4gPiArICAgICAgICBmaC0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDEgPDwgaHBp Yy0+c2xvdDsKPiA+ID4gKwo+ID4gPiArICAgICAgICAvKiogc2V0IHRoZSBuZWFyZXN0IGZyYW1l IGluIEwwIGFzIGFsbCByZWZlcmVuY2UgZnJhbWUuICovCj4gPiA+ICsgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykgewo+ID4gPiArICAgICAgICAgICAgZmgt PnJlZl9mcmFtZV9pZHhbaV0gPSBocmVmLT5zbG90Owo+ID4gPiArICAgICAgICB9Cj4gPiA+ICsg ICAgICAgIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSA9IGhyZWYtPnNsb3Q7Cj4gPiA+ICsgICAgICAg IGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAtCj4g PiA+IGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ID4gPiArICAgICAgICB2cGljLT5yZWZfZnJhbWVf Y3RybF9sMC5maWVsZHMuc2VhcmNoX2lkeDAgPQo+ID4gPiBBVjFfUkVGX0ZSQU1FX0xBU1Q7Cj4g PiA+ICsKPiA+ID4gKyAgICAgICAgLyoqIHNldCB0aGUgMm5kIG5lYXJlc3QgZnJhbWUgaW4gTDAg YXMgR29sZGVuIGZyYW1lLiAqLwo+ID4gPiArICAgICAgICBpZiAocGljLT5uYl9yZWZzWzBdID4g MSkgewo+ID4gPiArICAgICAgICAgICAgcmVmID0gcGljLT5yZWZzWzBdW3BpYy0+bmJfcmVmc1sw XSAtIDJdOwo+ID4gPiArICAgICAgICAgICAgaHJlZiA9IHJlZi0+cHJpdl9kYXRhOwo+ID4gPiAr ICAgICAgICAgICAgZmgtPnJlZl9mcmFtZV9pZHhbM10gPSBocmVmLT5zbG90Owo+ID4gPiArICAg ICAgICAgICAgZmgtPnJlZl9vcmRlcl9oaW50W2hyZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29y ZGVyIC0KPiA+ID4gaHJlZi0+bGFzdF9pZHJfZnJhbWU7Cj4gPiA+ICsgICAgICAgICAgICB2cGlj LT5yZWZfZnJhbWVfY3RybF9sMC5maWVsZHMuc2VhcmNoX2lkeDEgPQo+ID4gPiBBVjFfUkVGX0ZS QU1FX0dPTERFTjsKPiA+ID4gKyAgICAgICAgfQo+ID4gPiArICAgICAgICBicmVhazsKPiA+ID4g KyAgICBjYXNlIFBJQ1RVUkVfVFlQRV9COgo+ID4gPiArICAgICAgICBhdl9hc3NlcnQwKHBpYy0+ bmJfcmVmc1swXSAmJiBwaWMtPm5iX3JlZnNbMV0pOwo+ID4gPiArICAgICAgICBmaC0+ZnJhbWVf dHlwZSA9IEFWMV9GUkFNRV9JTlRFUjsKPiA+ID4gKyAgICAgICAgZmgtPmJhc2VfcV9pZHggPSBw cml2LT5xX2lkeF9iOwo+ID4gPiArICAgICAgICBmaC0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4 MDsKPiA+ID4gKyAgICAgICAgZmgtPnJlZmVyZW5jZV9zZWxlY3QgPSAxOwo+ID4gPiArCj4gPiA+ ICsgICAgICAgIC8qKiBCIGZyYW1lIHdpbGwgbm90IGJlIHJlZmVyZW5jZWQsIGRpc2FibGUgaXRz IHJlY29uCj4gPiA+IGZyYW1lLiAqLwo+ID4gPiArICAgICAgICB2cGljLT5waWN0dXJlX2ZsYWdz LmJpdHMuZGlzYWJsZV9mcmFtZV9yZWNvbiA9IDE7Cj4gPgo+ID4gSXQgZmVlbHMgbGlrZSBpdCB3 b3VsZCBiZSB2ZXJ5IGVhc3kgdG8gc3VwcG9ydCBhbGwgb2YgdGhlIEIgc3RydWN0dXJlCj4gPiBq dXN0IGxpa2UgVlA5IGRvZXMgaGVyZS4KPgo+IEl0J3MgaW4gbXkgcGxhbiB0b2dldGhlciB3aXRo IG11bHRpKD4yKSByZWZlcmVuY2Ugc3VwcG9ydC4gQmV0dGVyIHRvCj4gYWxpZ25lZCB3aXRoIFZQ TCBhbmQgbmVlZCBzb21lIHRpbWUgdG8gdGVzdCBhbmQgY29tcGFyZS4KPgo+ID4KPiA+ID4gKwo+ ID4gPiArICAgICAgICAvKiogVXNlIExBU1RfRlJBTUUgYW5kIEJXRFJFRl9GUkFNRSBmb3IgcmVm ZXJlbmNlLiAqLwo+ID4gPiArICAgICAgICB2cGljLT5yZWZfZnJhbWVfY3RybF9sMC5maWVsZHMu c2VhcmNoX2lkeDAgPQo+ID4gPiBBVjFfUkVGX0ZSQU1FX0xBU1Q7Cj4gPiA+ICsgICAgICAgIHZw aWMtPnJlZl9mcmFtZV9jdHJsX2wxLmZpZWxkcy5zZWFyY2hfaWR4MCA9Cj4gPiA+IEFWMV9SRUZf RlJBTUVfQldEUkVGOwo+ID4gPiArCj4gPiA+ICsgICAgICAgIHJlZiAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9IHBpYy0+cmVmc1swXVtwaWMtCj4gPiA+ID5uYl9yZWZzWzBdIC0gMV07Cj4g PiA+ICsgICAgICAgIGhyZWYgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHJlZi0+cHJpdl9k YXRhOwo+ID4gPiArICAgICAgICBocGljLT5sYXN0X2lkcl9mcmFtZSAgICAgICAgICAgPSBocmVm LT5sYXN0X2lkcl9mcmFtZTsKPiA+ID4gKyAgICAgICAgZmgtPnByaW1hcnlfcmVmX2ZyYW1lICAg ICAgICAgID0gaHJlZi0+c2xvdDsKPiA+ID4gKyAgICAgICAgZmgtPnJlZl9vcmRlcl9oaW50W2hy ZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29yZGVyIC0KPiA+ID4gaHJlZi0+bGFzdF9pZHJfZnJh bWU7Cj4gPiA+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGX0ZSQU1FX0dPTERFTjsg aSsrKSB7Cj4gPiA+ICsgICAgICAgICAgICBmaC0+cmVmX2ZyYW1lX2lkeFtpXSA9IGhyZWYtPnNs b3Q7Cj4gPiA+ICsgICAgICAgIH0KPiA+ID4gKwo+ID4gPiArICAgICAgICByZWYgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPSBwaWMtPnJlZnNbMV1bcGljLQo+ID4gPiA+bmJfcmVmc1sxXSAt IDFdOwo+ID4gPiArICAgICAgICBocmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgPSByZWYt PnByaXZfZGF0YTsKPiA+ID4gKyAgICAgICAgZmgtPnJlZl9vcmRlcl9oaW50W2hyZWYtPnNsb3Rd ID0gcmVmLT5kaXNwbGF5X29yZGVyIC0KPiA+ID4gaHJlZi0+bGFzdF9pZHJfZnJhbWU7Cj4gPiA+ ICsgICAgICAgIGZvciAoaSA9IEFWMV9SRUZfRlJBTUVfR09MREVOOyBpIDwgQVYxX1JFRlNfUEVS X0ZSQU1FOwo+ID4gPiBpKyspIHsKPiA+ID4gKyAgICAgICAgICAgIGZoLT5yZWZfZnJhbWVfaWR4 W2ldID0gaHJlZi0+c2xvdDsKPiA+ID4gKyAgICAgICAgfQo+ID4gPiArICAgICAgICBicmVhazsK PiA+ID4gKyAgICBkZWZhdWx0Ogo+ID4gPiArICAgICAgICBhdl9hc3NlcnQwKDAgJiYgImludmFs aWQgcGljdHVyZSB0eXBlIik7Cj4gPiA+ICsgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgZmgtPnNo b3dfZnJhbWUgICAgICAgICAgICAgICAgPSBwaWMtPmRpc3BsYXlfb3JkZXIgPD0gcGljLQo+ID4g PiA+ZW5jb2RlX29yZGVyOwo+ID4gPiArICAgIGZoLT5zaG93YWJsZV9mcmFtZSAgICAgICAgICAg ID0gZmgtPmZyYW1lX3R5cGUgIT0KPiA+ID4gQVYxX0ZSQU1FX0tFWTsKPiA+ID4gKyAgICBmaC0+ ZnJhbWVfd2lkdGhfbWludXNfMSAgICAgICA9IGF2Y3R4LT53aWR0aCAtIDE7Cj4gPiA+ICsgICAg ZmgtPmZyYW1lX2hlaWdodF9taW51c18xICAgICAgPSBhdmN0eC0+aGVpZ2h0IC0gMTsKPiA+ID4g KyAgICBmaC0+cmVuZGVyX3dpZHRoX21pbnVzXzEgICAgICA9IGZoLT5mcmFtZV93aWR0aF9taW51 c18xOwo+ID4gPiArICAgIGZoLT5yZW5kZXJfaGVpZ2h0X21pbnVzXzEgICAgID0gZmgtPmZyYW1l X2hlaWdodF9taW51c18xOwo+ID4gPiArICAgIGZoLT5vcmRlcl9oaW50ICAgICAgICAgICAgICAg ID0gcGljLT5kaXNwbGF5X29yZGVyIC0gaHBpYy0KPiA+ID4gPmxhc3RfaWRyX2ZyYW1lOwo+ID4K PiA+IERvZXNuJ3QgdGhpcyBvdmVyZmxvdz8KPgo+IFRoZSBtYXggb3JkZXIgaGludCBmb3IgQVYx IGlzIDI1NSwgZm9yY2UgY29udmVydCBmcm9tIGludDY0X3QgdG8KPiB1aW50OF90IHdpbGwgZ2V0 IHRoZSBleHBlY3RlZCByZXN1bHQuCj4KPiA+Cj4gPiA+ICsgICAgZmgtPnRpbGVfY29scyAgICAg ICAgICAgICAgICAgPSBwcml2LT50aWxlX2NvbHM7Cj4gPiA+ICsgICAgZmgtPnRpbGVfcm93cyAg ICAgICAgICAgICAgICAgPSBwcml2LT50aWxlX3Jvd3M7Cj4gPiA+ICsgICAgZmgtPnRpbGVfY29s c19sb2cyICAgICAgICAgICAgPSBwcml2LT50aWxlX2NvbHNfbG9nMjsKPiA+ID4gKyAgICBmaC0+ dGlsZV9yb3dzX2xvZzIgICAgICAgICAgICA9IHByaXYtPnRpbGVfcm93c19sb2cyOwo+ID4gPiAr ICAgIGZoLT51bmlmb3JtX3RpbGVfc3BhY2luZ19mbGFnID0gcHJpdi0+dW5pZm9ybV90aWxlOwo+ ID4gPiArICAgIGZoLT50aWxlX3NpemVfYnl0ZXNfbWludXMxICAgID0gcHJpdi0KPiA+ID4gPmF0 dHJfZXh0Mi5iaXRzLnRpbGVfc2l6ZV9ieXRlc19taW51czE7Cj4gPiA+ICsgICAgZmgtPnJlZHVj ZWRfdHhfc2V0ICAgICAgICAgICAgPSAxOwo+ID4KPiA+IFRoaXMgbm90IGJlaW5nIHByZXNlbnQg aW4gdGhlIGNhcGFiaWxpdGllcyBmZWVscyBsaWtlIGFuIG9taXNzaW9uIGluCj4gPiB0aGUgQVBJ LiAgVGhhdCdzIGEgbGFyZ2UgbG9zcyBmb3IgYW4gaW1wbGVtZW50YXRpb24gd2hpY2ggZG9lcwo+ ID4gc3VwcG9ydCB0aGUgZnVsbCB0cmFuc2Zvcm0gc2V0Lgo+Cj4gUGVyc29uYWxseSB1bmRlcnN0 YW5kaW5nLCAibm90IGJlaW5nIHByZXNlbnQiIG1lYW5zIGl0IG11c3QgYmUKPiBzdXBwb3J0ZWQu IElmIGFueSBleGNlcHRpb24gZHJpdmVyLCB0aGVuIHRoZXkgY2FuIGFzayB0byBhZGQgbmV3Cj4g Y2FwYWJpbGl0eSB0byBsaWJ2YS4KPgo+ID4KPiA+ID4gKwo+ID4gPiArICAgIC8qKiBpZ25vcmUg T05MWV80eDQgbW9kZSBmb3IgY29kZWRsb3NzbGVzcyBpcyBub3QgZnVsbHkKPiA+ID4gaW1wbGVt ZW50ZWQuICovCj4gPiA+ICsgICAgaWYgKHByaXYtPmF0dHJfZXh0Mi5iaXRzLnR4X21vZGVfc3Vw cG9ydCAmIDB4MDQpCj4gPiA+ICsgICAgICAgIGZoLT50eF9tb2RlID0gQVYxX1RYX01PREVfU0VM RUNUOwo+ID4gPiArICAgIGVsc2UgaWYgKHByaXYtPmF0dHJfZXh0Mi5iaXRzLnR4X21vZGVfc3Vw cG9ydCAmIDB4MDIpCj4gPiA+ICsgICAgICAgIGZoLT50eF9tb2RlID0gQVYxX1RYX01PREVfTEFS R0VTVDsKPiA+ID4gKyAgICBlbHNlCj4gPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7Cj4gPgo+ID4gV2hhdCB3b3VsZCB0aGlzIGNhc2UgZXZlbiBtZWFuPyAgVGhlIGVuY29kZXIg ZG9lc24ndCBzdXBwb3J0IGFueQo+ID4gdHJhbnNmb3Jtcz8gIFNlZW1zIGxpa2UgYSBtZXNzYWdl IHJhdGhlciB0aGFuIHNpbGVudCBmYWlsdXJlIHdvdWxkIGJlCj4gPiBhIGdvb2QgaWRlYSBhbnl3 YXkuCj4KPiBPSywgd2lsbCBhZGQgdGhlIG1lc3NhZ2UgdG8gbGV0IHVzZXIga25vdyB0aGUgZmFp bHVyZSByZWFzb24uCj4KPiA+Cj4gPiA+ICsKPiA+ID4gKyAgICBmb3IgKGkgPSAwOyBpIDwgZmgt PnRpbGVfY29sczsgaSsrKQo+ID4gPiArICAgICAgICBmaC0+d2lkdGhfaW5fc2JzX21pbnVzXzFb aV0gPSB2cGljLQo+ID4gPiA+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSBwcml2LT53aWR0aF9p bl9zYnNfbWludXNfMVtpXTsKPiA+ID4gKwo+ID4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBmaC0+ dGlsZV9yb3dzOyBpKyspCj4gPiA+ICsgICAgICAgIGZoLT5oZWlnaHRfaW5fc2JzX21pbnVzXzFb aV0gPSB2cGljLQo+ID4gPiA+aGVpZ2h0X2luX3Nic19taW51c18xW2ldID0gcHJpdi0+aGVpZ2h0 X2luX3Nic19taW51c18xW2ldOwo+ID4KPiA+IEVyLCB3aGF0PyAgRG9lc24ndCB0aGlzIGZhaWwg dGhlIGluZmVyZW5jZSBvbiB0aGUgbGFzdCB0aWxlCj4gPiB3aWR0aC9oZWlnaHQgaWYgeW91IGRv bid0IHNwbGl0IGV4YWN0bHk/Cj4KPiBXaGF0J3MgdGhlIG1lYW5pbmcgb2YgInNwbGl0IGV4YWN0 bHkiPyBBbGwgdGhlIHRpbGUgdy9oIHdpbGwgYmUgc3BsaXQKPiBpbiB2YWFwaV9lbmNvZGVfYXYx X3NldF90aWxlIGluY2x1ZGUgbGFzdCB0aWxlLiBKdXN0IG1ha2Ugc3VyZSB0aGUgaW5mbwo+IG9m IHRpbGVzIHcvaCBpbiBmcmFtZSBoZWFkZXIgYXJlIHNhbWUgd2l0aCB0aGUgaW5mbyBwYXNzZWQg dG8gVkFBUEkKPiBzaG91bGQgYmUgZmluZS4KPgo+ID4KPiA+ID4gKwo+ID4gPiArICAgIG1lbWNw eShmaC0+bG9vcF9maWx0ZXJfcmVmX2RlbHRhcywKPiA+ID4gZGVmYXVsdF9sb29wX2ZpbHRlcl9y ZWZfZGVsdGFzLAo+ID4gPiArICAgICAgICAgICBBVjFfVE9UQUxfUkVGU19QRVJfRlJBTUUgKiBz aXplb2YoaW50OF90KSk7Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAoZmgtPmZyYW1lX3R5cGUgPT0g QVYxX0ZSQU1FX0tFWSAmJiBmaC0+c2hvd19mcmFtZSkgewo+ID4gPiArICAgICAgICBmaC0+ZXJy b3JfcmVzaWxpZW50X21vZGUgPSAxOwo+ID4gPiArICAgIH0KPiA+ID4gKwo+ID4gPiArICAgIGlm IChmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVfS0VZIHx8IGZoLQo+ID4gPiA+ZXJyb3JfcmVz aWxpZW50X21vZGUpCj4gPiA+ICsgICAgICAgIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSA9IEFWMV9Q UklNQVJZX1JFRl9OT05FOwo+ID4gPiArCj4gPiA+ICsgICAgdnBpYy0+YmFzZV9xaW5kZXggICAg ICAgICAgPSBmaC0+YmFzZV9xX2lkeDsKPiA+ID4gKyAgICB2cGljLT5mcmFtZV93aWR0aF9taW51 c18xICA9IGZoLT5mcmFtZV93aWR0aF9taW51c18xOwo+ID4gPiArICAgIHZwaWMtPmZyYW1lX2hl aWdodF9taW51c18xID0gZmgtPmZyYW1lX2hlaWdodF9taW51c18xOwo+ID4gPiArICAgIHZwaWMt PnByaW1hcnlfcmVmX2ZyYW1lICAgID0gZmgtPnByaW1hcnlfcmVmX2ZyYW1lOwo+ID4gPiArICAg IHZwaWMtPnJlY29uc3RydWN0ZWRfZnJhbWUgID0gcGljLT5yZWNvbl9zdXJmYWNlOwo+ID4gPiAr ICAgIHZwaWMtPmNvZGVkX2J1ZiAgICAgICAgICAgID0gcGljLT5vdXRwdXRfYnVmZmVyOwo+ID4g PiArICAgIHZwaWMtPnRpbGVfY29scyAgICAgICAgICAgID0gZmgtPnRpbGVfY29sczsKPiA+ID4g KyAgICB2cGljLT50aWxlX3Jvd3MgICAgICAgICAgICA9IGZoLT50aWxlX3Jvd3M7Cj4gPiA+ICsg ICAgdnBpYy0+b3JkZXJfaGludCAgICAgICAgICAgPSBmaC0+b3JkZXJfaGludDsKPiA+ID4gKyNp ZiBWQV9DSEVDS19WRVJTSU9OKDEsIDE1LCAwKQo+ID4gPiArICAgIHZwaWMtPnJlZnJlc2hfZnJh bWVfZmxhZ3MgID0gZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3M7Cj4gPiA+ICsjZW5kaWYKPiA+Cj4g PiBXaGF0IHdpbGwgdGhlIGRpZmZlcmVuY2UgYmUgYmV0d2VlbiBydW5uaW5nIGluIHRoZSB0d28g dmVyc2lvbnM/ICAoSXMKPiA+IGl0IHdvcnRoIHN1cHBvcnRpbmcgdGhlIG9sZGVyIG9uZT8gIENm LiBiaXRfZGVwdGggb24gVlA5LikKPgo+IEknZCBwcmVmZXIgdG8gc3VwcG9ydCBvbGRlciBvbmUu IEluIGNhc2Ugb2Ygc29tZW9uZSB1c2luZyBvbGQgdmVyc2lvbgo+IGFuZCB3b3JrcyB3ZWxsIHdp dGggZmZtcGVnLXZwbChhcyB2cGwgYWxyZWFkeSBzdXBwb3J0IGF2MSBlbmNvZGUgbG9uZwo+IHRp bWUgYWdvKSwgb3RoZXJ3aXNlIGhlIG11c3QgYmUgY29uZnVzZSB3aHkgZmZtcGVnLXZhYXBpIG5l ZWQgaGlnaGVyCj4gVkFBUEkgdmVyc2lvbiBidXQgVlBMIGRvZXNuJ3QuCj4KPiA+Cj4gPiA+ICsK PiA+ID4gKyAgICB2cGljLT5waWN0dXJlX2ZsYWdzLmJpdHMuZW5hYmxlX2ZyYW1lX29idSAgICAg PSAwOwo+ID4gPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5mcmFtZV90eXBlICAgICAg ICAgICA9IGZoLQo+ID4gPiA+ZnJhbWVfdHlwZTsKPiA+ID4gKyAgICB2cGljLT5waWN0dXJlX2Zs YWdzLmJpdHMucmVkdWNlZF90eF9zZXQgICAgICAgPSBmaC0KPiA+ID4gPnJlZHVjZWRfdHhfc2V0 Owo+ID4gPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5lcnJvcl9yZXNpbGllbnRfbW9k ZSA9IGZoLQo+ID4gPiA+ZXJyb3JfcmVzaWxpZW50X21vZGU7Cj4gPiA+ICsKPiA+ID4gKyAgICAv KiogbGV0IGRyaXZlciBkZWNpZGUgdG8gdXNlIHNpbmdsZSBvciBjb21wb3VuZCByZWZlcmVuY2UK PiA+ID4gcHJlZGljdGlvbiBtb2RlLiAqLwo+ID4gPiArICAgIHZwaWMtPm1vZGVfY29udHJvbF9m bGFncy5iaXRzLnJlZmVyZW5jZV9tb2RlID0gZmgtCj4gPiA+ID5yZWZlcmVuY2Vfc2VsZWN0ID8g MiA6IDA7Cj4gPiA+ICsgICAgdnBpYy0+bW9kZV9jb250cm9sX2ZsYWdzLmJpdHMudHhfbW9kZSA9 IGZoLT50eF9tb2RlOwo+ID4gPiArCj4gPiA+ICsgICAgdnBpYy0+dGlsZV9ncm91cF9vYnVfaGRy X2luZm8uYml0cy5vYnVfaGFzX3NpemVfZmllbGQgPSAxOwo+ID4gPiArCj4gPiA+ICsgICAgLyoq IHNldCByZWZlcmVuY2UuICovCj4gPiA+ICsgICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BF Ul9GUkFNRTsgaSsrKQo+ID4gPiArICAgICAgICB2cGljLT5yZWZfZnJhbWVfaWR4W2ldID0gZmgt PnJlZl9mcmFtZV9pZHhbaV07Cj4gPiA+ICsKPiA+ID4gKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZf QVJSQVlfRUxFTVModnBpYy0+cmVmZXJlbmNlX2ZyYW1lcyk7IGkrKykKPiA+ID4gKyAgICAgICAg dnBpYy0+cmVmZXJlbmNlX2ZyYW1lc1tpXSA9IFZBX0lOVkFMSURfU1VSRkFDRTsKPiA+ID4gKwo+ ID4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfUkVGRVJFTkNFX0xJU1RfTlVNOyBpKyspIHsK PiA+ID4gKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwaWMtPm5iX3JlZnNbaV07IGorKykg ewo+ID4gPiArICAgICAgICAgICAgVkFBUElFbmNvZGVQaWN0dXJlICpyZWZfcGljID0gcGljLT5y ZWZzW2ldW2pdOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICBzbG90ID0gKChWQUFQSUVuY29k ZUFWMVBpY3R1cmUqKXJlZl9waWMtPnByaXZfZGF0YSktCj4gPiA+ID5zbG90Owo+ID4gPiArICAg ICAgICAgICAgYXZfYXNzZXJ0MCh2cGljLT5yZWZlcmVuY2VfZnJhbWVzW3Nsb3RdID09Cj4gPiA+ IFZBX0lOVkFMSURfU1VSRkFDRSk7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgIHZwaWMtPnJl ZmVyZW5jZV9mcmFtZXNbc2xvdF0gPSByZWZfcGljLT5yZWNvbl9zdXJmYWNlOwo+ID4gPiArICAg ICAgICB9Cj4gPiA+ICsgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgLyoqIHBhY2sgZnJhbWUgaGVh ZGVyLCBhbmQgc2V0IHZhIHBhcmFtcyBvZmZzZXQgbGlrZQo+ID4gPiBiaXRfb2Zmc2V0X3FpbmRl eCBldGMuICovCj4gPiA+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9mcmFtZV9o ZWFkZXIoYXZjdHgsIHBpYywgcHJpdi0KPiA+ID4gPmZoX2RhdGEsICZwcml2LT5maF9kYXRhX2xl bik7Cj4gPiA+ICsgICAgaWYgKHJldCA8IDApCj4gPiA+ICsgICAgICAgIGdvdG8gZW5kOwo+ID4g PiArCj4gPiA+ICtlbmQ6Cj4gPiA+ICsgICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KG9idSk7Cj4g PiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCB2 YWFwaV9lbmNvZGVfYXYxX2luaXRfc2xpY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0Cj4gPiA+ICph dmN0eCwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWQUFQSUVuY29kZVBpY3R1cmUKPiA+ID4gKnBpYywKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUFQSUVuY29kZVNsaWNlCj4gPiA+ICpzbGlj ZSkKPiA+ID4gK3sKPiA+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICAgICAqcHJpdiA9 IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiA+ICsgICAgVkFFbmNUaWxlR3JvdXBCdWZmZXJBVjEgICp2 c2xpY2UgPSBzbGljZS0+Y29kZWNfc2xpY2VfcGFyYW1zOwo+ID4gPiArICAgIENvZGVkQml0c3Ry ZWFtQVYxQ29udGV4dCAgKmNiY3R4ID0gcHJpdi0+Y2JjLT5wcml2X2RhdGE7Cj4gPiA+ICsgICAg aW50IGRpdjsKPiA+ID4gKwo+ID4gPiArICAgIC8qKiBTZXQgdGlsZSBncm91cCBpbmZvLiAqLwo+ ID4gPiArICAgIGRpdiA9IHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93cyAvIHByaXYt PnRpbGVfZ3JvdXBzOwo+ID4gPiArICAgIHZzbGljZS0+dGdfc3RhcnQgPSBzbGljZS0+aW5kZXgg KiBkaXY7Cj4gPiA+ICsgICAgaWYgKHNsaWNlLT5pbmRleCA9PSAocHJpdi0+dGlsZV9ncm91cHMg LSAxKSkgewo+ID4gPiArICAgICAgICB2c2xpY2UtPnRnX2VuZCA9IHByaXYtPnRpbGVfY29scyAq IHByaXYtPnRpbGVfcm93cyAtIDE7Cj4gPiA+ICsgICAgICAgIGNiY3R4LT5zZWVuX2ZyYW1lX2hl YWRlciA9IDA7Cj4gPiA+ICsgICAgfSBlbHNlIHsKPiA+ID4gKyAgICAgICAgdnNsaWNlLT50Z19l bmQgPSAoc2xpY2UtPmluZGV4ICsgMSkgKiBkaXYgLSAxOwo+ID4gPiArICAgIH0KPiA+ID4gKwo+ ID4gPiArICAgIHJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IHZh YXBpX2VuY29kZV9hdjFfd3JpdGVfcGljdHVyZV9oZWFkZXIoQVZDb2RlY0NvbnRleHQKPiA+ID4g KmF2Y3R4LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZBQVBJRW5jb2RlUGljdHVyCj4gPiA+IGUgKnBpYywKPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhLAo+ID4gPiBz aXplX3QgKmRhdGFfbGVuKQo+ID4gPiArewo+ID4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4 dCAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gPiArICAgIENvZGVkQml0c3RyZWFt RnJhZ21lbnQgICAgICpvYnUgPSAmcHJpdi0+Y3VycmVudF9vYnU7Cj4gPiA+ICsgICAgQVYxUmF3 T0JVICAgICAgICAgICAgICAgKmZoX29idSA9ICZwcml2LT5maDsKPiA+ID4gKyAgICBBVjFSYXdG cmFtZUhlYWRlciAgICAgICAqcmVwX2ZoID0gJmZoX29idS0+b2J1LmZyYW1lX2hlYWRlcjsKPiA+ ID4gKyAgICBWQUFQSUVuY29kZUFWMVBpY3R1cmUgKmhyZWY7Cj4gPiA+ICsgICAgaW50IHJldCA9 IDA7Cj4gPiA+ICsKPiA+ID4gKyAgICBwaWMtPnRhaWxfc2l6ZSA9IDA7Cj4gPiA+ICsgICAgLyoq IFBhY2sgcmVwZWF0IGZyYW1lIGhlYWRlci4gKi8KPiA+ID4gKyAgICBpZiAocGljLT5kaXNwbGF5 X29yZGVyID4gcGljLT5lbmNvZGVfb3JkZXIpIHsKPiA+ID4gKyAgICAgICAgbWVtc2V0KGZoX29i dSwgMCwgc2l6ZW9mKCpmaF9vYnUpKTsKPiA+ID4gKyAgICAgICAgaHJlZiA9IHBpYy0+cmVmc1sw XVtwaWMtPm5iX3JlZnNbMF0gLSAxXS0+cHJpdl9kYXRhOwo+ID4gPiArICAgICAgICBmaF9vYnUt PmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfRlJBTUVfSEVBREVSOwo+ID4gPiArICAgICAgICBm aF9vYnUtPmhlYWRlci5vYnVfaGFzX3NpemVfZmllbGQgPSAxOwo+ID4gPiArCj4gPiA+ICsgICAg ICAgIHJlcF9maC0+c2hvd19leGlzdGluZ19mcmFtZSAgID0gMTsKPiA+ID4gKyAgICAgICAgcmVw X2ZoLT5mcmFtZV90b19zaG93X21hcF9pZHggPSBocmVmLT5zbG90ID09IDA7Cj4gPiA+ICsgICAg ICAgIHJlcF9maC0+ZnJhbWVfdHlwZSAgICAgICAgICAgID0gQVYxX0ZSQU1FX0lOVEVSOwo+ID4g PiArICAgICAgICByZXBfZmgtPmZyYW1lX3dpZHRoX21pbnVzXzEgICA9IGF2Y3R4LT53aWR0aCAt IDE7Cj4gPiA+ICsgICAgICAgIHJlcF9maC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEgID0gYXZjdHgt PmhlaWdodCAtIDE7Cj4gPiA+ICsgICAgICAgIHJlcF9maC0+cmVuZGVyX3dpZHRoX21pbnVzXzEg ID0gcmVwX2ZoLQo+ID4gPiA+ZnJhbWVfd2lkdGhfbWludXNfMTsKPiA+ID4gKyAgICAgICAgcmVw X2ZoLT5yZW5kZXJfaGVpZ2h0X21pbnVzXzEgPSByZXBfZmgtCj4gPiA+ID5mcmFtZV9oZWlnaHRf bWludXNfMTsKPiA+ID4gKwo+ID4gPiArICAgICAgICByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3dy aXRlX2ZyYW1lX2hlYWRlcihhdmN0eCwgcGljLCBwaWMtCj4gPiA+ID50YWlsX2RhdGEsICZwaWMt PnRhaWxfc2l6ZSk7Cj4gPiA+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ID4gPiArICAgICAgICAg ICAgZ290byBlbmQ7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgcGljLT50YWlsX3NpemUgLz0gODsK PiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICBtZW1jcHkoZGF0YSwgJnByaXYtPmZoX2Rh dGEsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSAqCj4gPiA+IHNpemVvZihjaGFyKSk7Cj4gPiA+ICsg ICAgKmRhdGFfbGVuID0gcHJpdi0+ZmhfZGF0YV9sZW47Cj4gPiA+ICsKPiA+ID4gK2VuZDoKPiA+ ID4gKyAgICBmZl9jYnNfZnJhZ21lbnRfcmVzZXQob2J1KTsKPiA+ID4gKyAgICByZXR1cm4gcmV0 Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgY29uc3QgVkFBUElFbmNvZGVQcm9maWxl IHZhYXBpX2VuY29kZV9hdjFfcHJvZmlsZXNbXSA9IHsKPiA+ID4gKyAgICB7IEZGX1BST0ZJTEVf QVYxX01BSU4sICA4LCAzLCAxLCAxLCBWQVByb2ZpbGVBVjFQcm9maWxlMCB9LAo+ID4gPiArICAg IHsgRkZfUFJPRklMRV9BVjFfTUFJTiwgMTAsIDMsIDEsIDEsIFZBUHJvZmlsZUFWMVByb2ZpbGUw IH0sCj4gPiA+ICsgICAgeyBGRl9QUk9GSUxFX1VOS05PV04gfQo+ID4gPiArfTsKPiA+ID4gKwo+ ID4gPiArc3RhdGljIGNvbnN0IFZBQVBJRW5jb2RlVHlwZSB2YWFwaV9lbmNvZGVfdHlwZV9hdjEg PSB7Cj4gPiA+ICsgICAgLnByb2ZpbGVzICAgICAgICA9IHZhYXBpX2VuY29kZV9hdjFfcHJvZmls ZXMsCj4gPiA+ICsgICAgLmZsYWdzICAgICAgICAgICA9IEZMQUdfQl9QSUNUVVJFUywKPiA+ID4g KyAgICAuZGVmYXVsdF9xdWFsaXR5ID0gMjUsCj4gPiA+ICsgICAgLmNvbmZpZ3VyZSAgICAgICA9 ICZ2YWFwaV9lbmNvZGVfYXYxX2NvbmZpZ3VyZSwKPiA+ID4gKwo+ID4gPiArICAgIC5zZXF1ZW5j ZV9oZWFkZXJfdHlwZSAgPSBWQUVuY1BhY2tlZEhlYWRlclNlcXVlbmNlLAo+ID4gPiArICAgIC5z ZXF1ZW5jZV9wYXJhbXNfc2l6ZSAgPQo+ID4gPiBzaXplb2YoVkFFbmNTZXF1ZW5jZVBhcmFtZXRl ckJ1ZmZlckFWMSksCj4gPiA+ICsgICAgLmluaXRfc2VxdWVuY2VfcGFyYW1zICA9Cj4gPiA+ICZ2 YWFwaV9lbmNvZGVfYXYxX2luaXRfc2VxdWVuY2VfcGFyYW1zLAo+ID4gPiArICAgIC53cml0ZV9z ZXF1ZW5jZV9oZWFkZXIgPQo+ID4gPiAmdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9zZXF1ZW5jZV9o ZWFkZXIsCj4gPiA+ICsKPiA+ID4gKyAgICAucGljdHVyZV9wcml2X2RhdGFfc2l6ZSA9IHNpemVv ZihWQUFQSUVuY29kZUFWMVBpY3R1cmUpLAo+ID4gPiArICAgIC5waWN0dXJlX2hlYWRlcl90eXBl ICAgID0gVkFFbmNQYWNrZWRIZWFkZXJQaWN0dXJlLAo+ID4gPiArICAgIC5waWN0dXJlX3BhcmFt c19zaXplICAgID0KPiA+ID4gc2l6ZW9mKFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckFWMSks Cj4gPiA+ICsgICAgLmluaXRfcGljdHVyZV9wYXJhbXMgICAgPQo+ID4gPiAmdmFhcGlfZW5jb2Rl X2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zLAo+ID4gPiArICAgIC53cml0ZV9waWN0dXJlX2hlYWRl ciAgID0KPiA+ID4gJnZhYXBpX2VuY29kZV9hdjFfd3JpdGVfcGljdHVyZV9oZWFkZXIsCj4gPiA+ ICsKPiA+ID4gKyAgICAuc2xpY2VfcGFyYW1zX3NpemUgPSBzaXplb2YoVkFFbmNUaWxlR3JvdXBC dWZmZXJBVjEpLAo+ID4gPiArICAgIC5pbml0X3NsaWNlX3BhcmFtcyA9ICZ2YWFwaV9lbmNvZGVf YXYxX2luaXRfc2xpY2VfcGFyYW1zLAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGF2 X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4g PiA+ICt7Cj4gPiA+ICsgICAgVkFBUElFbmNvZGVDb250ZXh0ICAgICAgKmN0eCA9IGF2Y3R4LT5w cml2X2RhdGE7Cj4gPiA+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAqcHJpdiA9IGF2Y3R4 LT5wcml2X2RhdGE7Cj4gPiA+ICsgICAgVkFDb25maWdBdHRyaWIgYXR0cjsKPiA+ID4gKyAgICBW QVN0YXR1cyB2YXM7Cj4gPiA+ICsgICAgaW50IHJldDsKPiA+ID4gKwo+ID4gPiArICAgIGN0eC0+ Y29kZWMgPSAmdmFhcGlfZW5jb2RlX3R5cGVfYXYxOwo+ID4gPiArCj4gPiA+ICsgICAgY3R4LT5k ZXNpcmVkX3BhY2tlZF9oZWFkZXJzID0KPiA+ID4gKyAgICAgICAgVkFfRU5DX1BBQ0tFRF9IRUFE RVJfU0VRVUVOQ0UgfAo+ID4gPiArICAgICAgICBWQV9FTkNfUEFDS0VEX0hFQURFUl9QSUNUVVJF Owo+ID4gPiArCj4gPiA+ICsgICAgaWYgKGF2Y3R4LT5wcm9maWxlID09IEZGX1BST0ZJTEVfVU5L Tk9XTikKPiA+ID4gKyAgICAgICAgYXZjdHgtPnByb2ZpbGUgPSBwcml2LT5wcm9maWxlOwo+ID4g PiArICAgIGlmIChhdmN0eC0+bGV2ZWwgPT0gRkZfTEVWRUxfVU5LTk9XTikKPiA+ID4gKyAgICAg ICAgYXZjdHgtPmxldmVsID0gcHJpdi0+bGV2ZWw7Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAoYXZj dHgtPmxldmVsICE9IEZGX0xFVkVMX1VOS05PV04gJiYgYXZjdHgtPmxldmVsICYgfjB4MWYpCj4g PiA+IHsKPiA+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IGxldmVsICVkXG4iLCBhdmN0eC0KPiA+ID4gPmxldmVsKTsKPiA+ID4gKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKPiA+ID4gKyAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICByZXQgPSBm Zl92YWFwaV9lbmNvZGVfaW5pdChhdmN0eCk7Cj4gPiA+ICsgICAgaWYgKHJldCA8IDApCj4gPiA+ ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiA+ICsKPiA+ID4gKyAgICBhdHRyLnR5cGUgPSBWQUNv bmZpZ0F0dHJpYkVuY0FWMTsKPiA+ID4gKyAgICB2YXMgPSB2YUdldENvbmZpZ0F0dHJpYnV0ZXMo Y3R4LT5od2N0eC0+ZGlzcGxheSwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3R4LT52YV9wcm9maWxlLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPnZhX2VudHJ5cG9pbnQsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZhdHRyLCAxKTsKPiA+ID4gKyAgICBpZiAodmFzICE9IFZBX1NUQVRVU19TVUNDRVNTKSB7 Cj4gPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1 ZXJ5ICIKPiA+ID4gKyAgICAgICAgICAgICAgICJjb25maWcgYXR0cmlidXRlOiAlZCAoJXMpLlxu IiwgdmFzLAo+ID4gPiB2YUVycm9yU3RyKHZhcykpOwo+ID4gPiArICAgICAgICByZXR1cm4gQVZF UlJPUl9FWFRFUk5BTDsKPiA+ID4gKyAgICB9IGVsc2UgaWYgKGF0dHIudmFsdWUgPT0gVkFfQVRU UklCX05PVF9TVVBQT1JURUQpIHsKPiA+ID4gKyAgICAgICAgcHJpdi0+YXR0ci52YWx1ZSA9IDA7 Cj4gPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJBdHRyaWJ1dGUg dHlwZTolZCBpcyBub3QgIgo+ID4gPiArICAgICAgICAgICAgICAgInN1cHBvcnRlZC5cbiIsIGF0 dHIudHlwZSk7Cj4gPgo+ID4gSXMgemVybyBhY3R1YWxseSByZWFzb25hYmxlIGluIHRoaXMgYXR0 cmlidXRlIChhbmQgYmVsb3cpPyAgV291bGQgd2UKPiA+IGJlIGJldHRlciBqdXN0IHJlcXVpcmlu ZyB0aGVtIHRvIHdvcms/Cj4KPiBUaGUgYXR0cmlidXRlIGNvbnRlbnQgb2YgRW5jQVYxIGFuZCBF bmNBVjFFeHQxIGlzIG5vdCB0aGUgbmVjZXNzYXJ5IGZvcgo+IGVuY29kZXIuIElmIGl0IGlzIG5v dCBzdXBwb3J0ZWQsIEkgd2lsbCByZWdhcmQgYWxsIHRoZSBhdHRyaWJ1dGUKPiBmZWF0dXJlcyBp cyB1bi11c2FibGUsIGFuZCBpdCBkb2Vzbid0IGJyZWFrIG91ciBlbmNvZGUuIFNvIEkgZ2l2ZXMg aXQKPiBtb3JlIHRvbGVyYW5jZSB3aXRob3V0IGVycm9yLCBqdXN0IGEgd2FybmluZyBtZXNzYWdl Lgo+Cj4gPgo+ID4gPiArICAgIH0gZWxzZSB7Cj4gPiA+ICsgICAgICAgIHByaXYtPmF0dHIudmFs dWUgPSBhdHRyLnZhbHVlOwo+ID4gPiArICAgIH0KPiA+ID4gKwo+ID4gPiArICAgIGF0dHIudHlw ZSA9IFZBQ29uZmlnQXR0cmliRW5jQVYxRXh0MTsKPiA+ID4gKyAgICB2YXMgPSB2YUdldENvbmZp Z0F0dHJpYnV0ZXMoY3R4LT5od2N0eC0+ZGlzcGxheSwKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3R4LT52YV9wcm9maWxlLAo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjdHgtPnZhX2VudHJ5cG9pbnQsCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZhdHRyLCAxKTsKPiA+ID4gKyAgICBpZiAodmFzICE9IFZBX1NUQVRV U19TVUNDRVNTKSB7Cj4gPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi RmFpbGVkIHRvIHF1ZXJ5ICIKPiA+ID4gKyAgICAgICAgICAgICAgICJjb25maWcgYXR0cmlidXRl OiAlZCAoJXMpLlxuIiwgdmFzLAo+ID4gPiB2YUVycm9yU3RyKHZhcykpOwo+ID4gPiArICAgICAg ICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ID4gKyAgICB9IGVsc2UgaWYgKGF0dHIudmFs dWUgPT0gVkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsKPiA+ID4gKyAgICAgICAgcHJpdi0+YXR0 cl9leHQxLnZhbHVlID0gMDsKPiA+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FS TklORywgIkF0dHJpYnV0ZSB0eXBlOiVkIGlzIG5vdCAiCj4gPiA+ICsgICAgICAgICAgICAgICAi c3VwcG9ydGVkLlxuIiwgYXR0ci50eXBlKTsKPiA+ID4gKyAgICB9IGVsc2Ugewo+ID4gPiArICAg ICAgICBwcml2LT5hdHRyX2V4dDEudmFsdWUgPSBhdHRyLnZhbHVlOwo+ID4gPiArICAgIH0KPiA+ ID4gKwo+ID4gPiArICAgIC8qKiBUaGlzIGF0dHIgcHJvdmlkZXMgZXNzZW50aWFsIGluZGljYXRv cnMsIHJldHVybiBlcnJvciBpZgo+ID4gPiBub3Qgc3VwcG9ydC4gKi8KPiA+ID4gKyAgICBhdHRy LnR5cGUgPSBWQUNvbmZpZ0F0dHJpYkVuY0FWMUV4dDI7Cj4gPiA+ICsgICAgdmFzID0gdmFHZXRD b25maWdBdHRyaWJ1dGVzKGN0eC0+aHdjdHgtPmRpc3BsYXksCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN0eC0+dmFfcHJvZmlsZSwKPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3R4LT52YV9lbnRyeXBvaW50LAo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmYXR0ciwgMSk7Cj4gPiA+ICsgICAgaWYgKHZhcyAhPSBWQV9T VEFUVVNfU1VDQ0VTUyB8fCBhdHRyLnZhbHVlID09Cj4gPiA+IFZBX0FUVFJJQl9OT1RfU1VQUE9S VEVEKSB7Cj4gPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVk IHRvIHF1ZXJ5ICIKPiA+ID4gKyAgICAgICAgICAgICAgICJjb25maWcgYXR0cmlidXRlOiAlZCAo JXMpLlxuIiwgdmFzLAo+ID4gPiB2YUVycm9yU3RyKHZhcykpOwo+ID4gPiArICAgICAgICByZXR1 cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ID4gKyAgICB9IGVsc2Ugewo+ID4gPiArICAgICAgICBw cml2LT5hdHRyX2V4dDIudmFsdWUgPSBhdHRyLnZhbHVlOwo+ID4gPiArICAgIH0KPiA+ID4gKwo+ ID4gPiArICAgIHJldCA9IHZhYXBpX2VuY29kZV9hdjFfc2V0X3RpbGUoYXZjdHgpOwo+ID4gPiAr ICAgIGlmIChyZXQgPCAwKQo+ID4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gPiArCj4gPiA+ ICsgICAgcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBhdl9jb2xkIGlu dCB2YWFwaV9lbmNvZGVfYXYxX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiA+ID4gK3sK PiA+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRh Owo+ID4gPiArCj4gPiA+ICsgICAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJnByaXYtPmN1cnJlbnRf b2J1KTsKPiA+ID4gKyAgICBmZl9jYnNfY2xvc2UoJnByaXYtPmNiYyk7Cj4gPiA+ICsKPiA+ID4g KyAgICByZXR1cm4gZmZfdmFhcGlfZW5jb2RlX2Nsb3NlKGF2Y3R4KTsKPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiArI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVkFBUElFbmNvZGVBVjFDb250ZXh0 LCB4KQo+ID4gPiArI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfAo+ID4g PiBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJBTSkKPiA+ID4gKwo+ID4gPiArc3RhdGljIGNvbnN0 IEFWT3B0aW9uIHZhYXBpX2VuY29kZV9hdjFfb3B0aW9uc1tdID0gewo+ID4gPiArICAgIFZBQVBJ X0VOQ09ERV9DT01NT05fT1BUSU9OUywKPiA+ID4gKyAgICBWQUFQSV9FTkNPREVfUkNfT1BUSU9O UywKPiA+ID4gKyAgICB7ICJwcm9maWxlIiwgIlNldCBwcm9maWxlIChzZXFfcHJvZmlsZSkiLAo+ ID4gPiArICAgICAgT0ZGU0VUKHByb2ZpbGUpLCBBVl9PUFRfVFlQRV9JTlQsCj4gPiA+ICsgICAg ICB7IC5pNjQgPSBGRl9QUk9GSUxFX1VOS05PV04gfSwgRkZfUFJPRklMRV9VTktOT1dOLCAweGZm LAo+ID4gPiBGTEFHUywgInByb2ZpbGUiIH0sCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgUFJPRklM RShuYW1lLCB2YWx1ZSkgIG5hbWUsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCBcCj4gPiA+ ICsgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxBR1MsICJwcm9maWxlIgo+ID4gPiArICAg IHsgUFJPRklMRSgibWFpbiIsICAgICAgICAgICAgICAgRkZfUFJPRklMRV9BVjFfTUFJTikgfSwK PiA+ID4gKyAgICB7IFBST0ZJTEUoImhpZ2giLCAgICAgICAgICAgICAgIEZGX1BST0ZJTEVfQVYx X0hJR0gpIH0sCj4gPiA+ICsgICAgeyBQUk9GSUxFKCJwcm9mZXNzaW9uYWwiLCAgICAgICBGRl9Q Uk9GSUxFX0FWMV9QUk9GRVNTSU9OQUwpCj4gPiA+IH0sCj4gPiA+ICsjdW5kZWYgUFJPRklMRQo+ ID4gPiArCj4gPiA+ICsgICAgeyAidGllciIsICJTZXQgdGllciAoc2VxX3RpZXIpIiwKPiA+ID4g KyAgICAgIE9GRlNFVCh0aWVyKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIDEs IEZMQUdTLAo+ID4gPiAidGllciIgfSwKPiA+ID4gKyAgICB7ICJtYWluIiwgTlVMTCwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsCj4gPiA+ICsgICAgICB7IC5pNjQgPSAwIH0sIDAsIDAsIEZMQUdTLCAi dGllciIgfSwKPiA+ID4gKyAgICB7ICJoaWdoIiwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs Cj4gPiA+ICsgICAgICB7IC5pNjQgPSAxIH0sIDAsIDAsIEZMQUdTLCAidGllciIgfSwKPiA+ID4g KyAgICB7ICJsZXZlbCIsICJTZXQgbGV2ZWwgKHNlcV9sZXZlbF9pZHgpIiwKPiA+ID4gKyAgICAg IE9GRlNFVChsZXZlbCksIEFWX09QVF9UWVBFX0lOVCwKPiA+ID4gKyAgICAgIHsgLmk2NCA9IEZG X0xFVkVMX1VOS05PV04gfSwgRkZfTEVWRUxfVU5LTk9XTiwgMHgxZiwgRkxBR1MsCj4gPiA+ICJs ZXZlbCIgfSwKPiA+ID4gKwo+ID4gPiArI2RlZmluZSBMRVZFTChuYW1lLCB2YWx1ZSkgbmFtZSwg TlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIFwKPiA+ID4gKyAgICAgIHsgLmk2NCA9IHZhbHVl IH0sIDAsIDAsIEZMQUdTLCAibGV2ZWwiCj4gPiA+ICsgICAgeyBMRVZFTCgiMi4wIiwgIDApIH0s Cj4gPiA+ICsgICAgeyBMRVZFTCgiMi4xIiwgIDEpIH0sCj4gPiA+ICsgICAgeyBMRVZFTCgiMy4w IiwgIDQpIH0sCj4gPiA+ICsgICAgeyBMRVZFTCgiMy4xIiwgIDUpIH0sCj4gPiA+ICsgICAgeyBM RVZFTCgiNC4wIiwgIDgpIH0sCj4gPiA+ICsgICAgeyBMRVZFTCgiNC4xIiwgIDkpIH0sCj4gPiA+ ICsgICAgeyBMRVZFTCgiNS4wIiwgMTIpIH0sCj4gPiA+ICsgICAgeyBMRVZFTCgiNS4xIiwgMTMp IH0sCj4gPiA+ICsgICAgeyBMRVZFTCgiNS4yIiwgMTQpIH0sCj4gPiA+ICsgICAgeyBMRVZFTCgi NS4zIiwgMTUpIH0sCj4gPiA+ICsgICAgeyBMRVZFTCgiNi4wIiwgMTYpIH0sCj4gPiA+ICsgICAg eyBMRVZFTCgiNi4xIiwgMTcpIH0sCj4gPiA+ICsgICAgeyBMRVZFTCgiNi4yIiwgMTgpIH0sCj4g PiA+ICsgICAgeyBMRVZFTCgiNi4zIiwgMTkpIH0sCj4gPiA+ICsjdW5kZWYgTEVWRUwKPiA+ID4g Kwo+ID4gPiArICAgIHsgInRpbGVzIiwgIlRpbGUgY29sdW1ucyB4IHJvd3MiLAo+ID4gPiArICAg ICAgT0ZGU0VUKHRpbGVfY29scyksIEFWX09QVF9UWVBFX0lNQUdFX1NJWkUsIHsgLnN0ciA9ICIx eDEiIH0sCj4gPiA+IDEsIEFWMV9NQVhfVElMRV9DT0xTLCBGTEFHUyB9LAo+ID4gPiArICAgIHsg InRpbGVfZ3JvdXBzIiwgIk51bWJlciBvZiB0aWxlIGdyb3VwcyBmb3IgZW5jb2RpbmciLAo+ID4g PiArICAgICAgT0ZGU0VUKHRpbGVfZ3JvdXBzKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAx IH0sIDEsCj4gPiA+IEFWMV9NQVhfVElMRV9ST1dTICogQVYxX01BWF9USUxFX0NPTFMsIEZMQUdT IH0sCj4gPiA+ICsKPiA+ID4gKyAgICB7IE5VTEwgfSwKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB2YWFwaV9lbmNvZGVfYXYxX2RlZmF1bHRzW10g PSB7Cj4gPiA+ICsgICAgeyAiYiIsICAgICAgICAgICAgICAiMCIgICB9LAo+ID4gPiArICAgIHsg ImJmIiwgICAgICAgICAgICAgIjciICAgfSwKPiA+Cj4gPiBUaGlzIGZlZWxzIGV4Y2Vzc2l2ZSB3 aGVuIG9ubHkgb25lIGxheWVyIGlzIHN1cHBvcnRlZC4gIERvCj4gPiBleHBlcmltZW50YWwgcmVz dWx0cyBnaXZlIHRoaXMgYXMgdGhlIGJlc3QgdHJhZGVvZmY/Cj4KPiBEaWQgYSBxdWljayBjaGVj aywgc2V0IGJmIGFzIDIgY2FuIGdldCBhIGJldHRlciBxdWFsaXR5IGluIEJSQyBtb2RlLgo+IFdp bGwgY2hhbmdlIGl0IHRvIDIuCj4KPiBUaGFua3MuCj4KPiA+Cj4gPiA+ICsgICAgeyAiZyIsICAg ICAgICAgICAgICAiMTIwIiB9LAo+ID4gPiArICAgIHsgInFtaW4iLCAgICAgICAgICAgIjEiICAg fSwKPiA+ID4gKyAgICB7ICJxbWF4IiwgICAgICAgICAgICIyNTUiIH0sCj4gPiA+ICsgICAgeyBO VUxMIH0sCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyB2YWFw aV9lbmNvZGVfYXYxX2NsYXNzID0gewo+ID4gPiArICAgIC5jbGFzc19uYW1lID0gImF2MV92YWFw aSIsCj4gPiA+ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKPiA+ID4g KyAgICAub3B0aW9uICAgICA9IHZhYXBpX2VuY29kZV9hdjFfb3B0aW9ucywKPiA+ID4gKyAgICAu dmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPiA+ID4gK307Cj4gPiA+ICsKPiA+ ID4gK2NvbnN0IEZGQ29kZWMgZmZfYXYxX3ZhYXBpX2VuY29kZXIgPSB7Cj4gPiA+ICsgICAgLnAu bmFtZSAgICAgICAgID0gImF2MV92YWFwaSIsCj4gPiA+ICsgICAgQ09ERUNfTE9OR19OQU1FKCJB VjEgKFZBQVBJKSIpLAo+ID4gPiArICAgIC5wLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9W SURFTywKPiA+ID4gKyAgICAucC5pZCAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9BVjEsCj4gPiA+ ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFZBQVBJRW5jb2RlQVYxQ29udGV4dCksCj4g PiA+ICsgICAgLmluaXQgICAgICAgICAgID0gJnZhYXBpX2VuY29kZV9hdjFfaW5pdCwKPiA+ID4g KyAgICBGRl9DT0RFQ19SRUNFSVZFX1BBQ0tFVF9DQigmZmZfdmFhcGlfZW5jb2RlX3JlY2VpdmVf cGFja2V0KSwKPiA+ID4gKyAgICAuY2xvc2UgICAgICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9j bG9zZSwKPiA+ID4gKyAgICAucC5wcml2X2NsYXNzICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9jbGFz cywKPiA+ID4gKyAgICAucC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19DQVBfREVMQVkgfCBBVl9D T0RFQ19DQVBfSEFSRFdBUkUgfAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIEFWX0NPREVD X0NBUF9EUjEgfAo+ID4gPiBBVl9DT0RFQ19DQVBfRU5DT0RFUl9SRU9SREVSRURfT1BBUVVFLAo+ ID4gPiArICAgIC5jYXBzX2ludGVybmFsICA9IEZGX0NPREVDX0NBUF9OT1RfSU5JVF9USFJFQURT QUZFIHwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBGRl9DT0RFQ19DQVBfSU5JVF9DTEVB TlVQLAo+ID4gPiArICAgIC5kZWZhdWx0cyAgICAgICA9IHZhYXBpX2VuY29kZV9hdjFfZGVmYXVs dHMsCj4gPiA+ICsgICAgLnAucGl4X2ZtdHMgPSAoY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0W10p IHsKPiA+ID4gKyAgICAgICAgQVZfUElYX0ZNVF9WQUFQSSwKPiA+ID4gKyAgICAgICAgQVZfUElY X0ZNVF9OT05FLAo+ID4gPiArICAgIH0sCj4gPiA+ICsgICAgLmh3X2NvbmZpZ3MgICAgID0gZmZf dmFhcGlfZW5jb2RlX2h3X2NvbmZpZ3MsCj4gPiA+ICsgICAgLnAud3JhcHBlcl9uYW1lID0gInZh YXBpIiwKPiA+ID4gK307Cj4gPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZlcnNpb24uaCBi L2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4gPiA+IGluZGV4IDk0MTE1MTFlMDQuLjcyOGFiODgzOWQg MTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4gPiA+ICsrKyBiL2xpYmF2 Y29kZWMvdmVyc2lvbi5oCj4gPiA+IEBAIC0yOSw3ICsyOSw3IEBACj4gPiA+Cj4gPiA+ICAgI2lu Y2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKPiA+ID4KPiA+ID4gLSNkZWZpbmUgTElCQVZDT0RFQ19W RVJTSU9OX01JTk9SICAyMgo+ID4gPiArI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlOT1Ig IDIzCj4gPiA+ICAgI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlDUk8gMTAwCj4gPiA+Cj4g PiA+ICAgI2RlZmluZQo+ID4gPiBMSUJBVkNPREVDX1ZFUlNJT05fSU5UICBBVl9WRVJTSU9OX0lO VChMSUJBVkNPREVDX1ZFUlNJT05fTUFKT1IsIFwKPiA+CgpBbHNvLCB0aGlzIHBhdGNoIHNlcmll cyBsb29rcyBnb29kIHRvIG1lLCB0aG91Z2ggSSBjYW4ndCB0ZXN0IHRoZW0gZnVsbHkKbXlzZWxm IGR1ZSB0byBhIGxhY2sgb2YgaGFyZHdhcmUuCgpBY2tlZC1ieTogTmVhbCBHb21wYSA8bmdvbXBh MTNAZ21haWwuY29tPgoKCgoKLS0K55yf5a6f44Gv44GE44Gk44KC5LiA44Gk77yBLyBBbHdheXMs IHRoZXJlJ3Mgb25seSBvbmUgdHJ1dGghCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZm bXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVs CgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVs LXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K