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 66EDE487CE for ; Thu, 18 Jan 2024 10:43:47 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A057D68D010; Thu, 18 Jan 2024 12:43:44 +0200 (EET) Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 64B3E68C9F6 for ; Thu, 18 Jan 2024 12:43:38 +0200 (EET) Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-6d9344f30caso408130b3a.1 for ; Thu, 18 Jan 2024 02:43:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705574616; x=1706179416; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=8Afx/tvpaLXHSlM3IE+jw6mz78zD4V/UKUeM3nB0GaE=; b=Jc1Hadr7eslyljQbqGGhA0JaMIeuXT+s0LIQ4pC4yHPzyPyDRPpWsuV4eb36PKU0ka hoaok9O7EMqOLm/lw75LMc2JN1F3SB+4PMxSYxSJ52mSY7ZrMCvJitTJTiTSH1BgAMCN 6CjoYyw6RpMAUkV+ZuX8YI3cp8CoJP/LCovHL5308n0k1qYP5n4FRNsffo6oNrvL4+5t 3wRmvur5AEMw7NfOiFZ6ZA7njVPL1kBy1PnwT5qpIK+rhjghDdGnrf6xvLfcnVzaA1TE SDnoK7Fm4lBQv0BuRZF4x6dLUdLGwFEBDsL36ttEO3gyPHlZCcIRAhxlu2sTWhr3j5YE JUaA== X-Gm-Message-State: AOJu0YxUhDQDOKUb/QW2Zc1lyj9XSzkLEzA/0bphaZoS+E5amzj2w7qe e42w7N7NwKjLD0MEng7h3PE7mxqwZBNaErEAOceU6psUI0yZ5ZcEE4jSU0NPwwZ/e4kwRmBrVB0 = X-Google-Smtp-Source: AGHT+IEtkeQZcI0D2CTWuqsH9Eb5njiSLOz3ctXDK0B5xwxODPNlTLlXuJFGpfnzqkBjXED6QKgGOw== X-Received: by 2002:a05:6a00:2395:b0:6d9:a210:1ade with SMTP id f21-20020a056a00239500b006d9a2101ademr1108050pfc.12.1705574615764; Thu, 18 Jan 2024 02:43:35 -0800 (PST) Received: from smtpclient.apple ([2604:4080:11b0:8350:a8e8:564a:585e:378f]) by smtp.gmail.com with ESMTPSA id l38-20020a635726000000b005ce472f2d0fsm1201523pgb.66.2024.01.18.02.43.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2024 02:43:35 -0800 (PST) Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Date: Thu, 18 Jan 2024 02:43:24 -0800 References: <20231103095720.32426-1-thomas.ff@spin-digital.com> <20231103095720.32426-3-thomas.ff@spin-digital.com> <724da457-774e-4985-a3c1-9708454d6290@gmail.com> To: FFmpeg development discussions and patches In-Reply-To: <724da457-774e-4985-a3c1-9708454d6290@gmail.com> Message-Id: X-Mailer: Apple Mail (2.3774.300.61.1.2) X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v1 2/5] avformat: add muxer support for H266/VVC 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: , From: Ridley Combs via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Ridley Combs 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: Cgo+IE9uIEphbiA0LCAyMDI0LCBhdCAxNjozMSwgSmFtZXMgQWxtZXIgPGphbXJpYWxAZ21haWwu Y29tPiB3cm90ZToKPiAKPiBPbiAxMS8zLzIwMjMgNjo1NyBBTSwgVGhvbWFzIFNpZWRlbCB3cm90 ZToKPj4gQWRkIG11eGVyIGZvciB2dmNjIGJ5dGUgc3RyZWFtIGZvcm1hdC4KPj4gQWRkIEFWX0NP REVDX0lEX1ZWQyB0byBmZl9tcDRfb2JqX3R5cGUuCj4+IEFkZCBBVl9DT0RFQ19JRF9WVkMgdG8g SVNPIE1lZGlhIGNvZGVjIChWdmNDb25maWd1cmF0aW9uQm94IHZ2aTEsCj4+IHZ2YzEgZGVmaW5l ZCBpbiBJU08vSUVDIDE0NDk2LTE1OjIwMjEpLgo+PiBBZGQgVnZjQ29uZmlndXJhdGlvbkJveCB2 dmNDIHdoaWNoIGV4dGVuZHMgRnVsbEJveCB0eXBlIGluCj4+IElTTy9JRUMgMTQ0OTYtMTU6MjAy MS4KPj4gQWRkIGZmX3Z2Y19tdXhlciB0byBSQVcgbXV4ZXJzLgo+PiBTaWduZWQtb2ZmLWJ5OiBU aG9tYXMgU2llZGVsIDx0aG9tYXMuZmZAc3Bpbi1kaWdpdGFsLmNvbT4KPj4gLS0tCj4+ICBsaWJh dmZvcm1hdC9NYWtlZmlsZSAgICB8ICAgNiArLQo+PiAgbGliYXZmb3JtYXQvaXNvbS5jICAgICAg fCAgIDEgKwo+PiAgbGliYXZmb3JtYXQvaXNvbV90YWdzLmMgfCAgIDMgKwo+PiAgbGliYXZmb3Jt YXQvbW92LmMgICAgICAgfCAgIDYgKwo+PiAgbGliYXZmb3JtYXQvbW92ZW5jLmMgICAgfCAgNDEg Ky0KPj4gIGxpYmF2Zm9ybWF0L3Z2Yy5jICAgICAgIHwgOTk4ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPj4gIGxpYmF2Zm9ybWF0L3Z2Yy5oICAgICAgIHwgIDk5ICsr KysKPj4gIDcgZmlsZXMgY2hhbmdlZCwgMTE1MCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygt KQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L3Z2Yy5jCj4+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliYXZmb3JtYXQvdnZjLmgKPj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01h a2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPj4gaW5kZXggMzI5MDU1Y2NmZC4uNTk1ZjZi ZGYwOCAxMDA2NDQKPj4gLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKPj4gKysrIGIvbGliYXZm b3JtYXQvTWFrZWZpbGUKPj4gQEAgLTM0MSw3ICszNDEsNyBAQCBPQkpTLSQoQ09ORklHX01BVFJP U0tBX0RFTVVYRVIpICAgICAgICAgICs9IG1hdHJvc2thZGVjLm8gbWF0cm9za2EubyAgXAo+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZ2dwYXJzZXZvcmJp cy5vIHZvcmJpc2NvbW1lbnQubyBcCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHF0cGFsZXR0ZS5vIHJlcGxheWdhaW4ubyBkb3ZpX2lzb20ubwo+PiAgT0JK Uy0kKENPTkZJR19NQVRST1NLQV9NVVhFUikgICAgICAgICAgICArPSBtYXRyb3NrYWVuYy5vIG1h dHJvc2thLm8gXAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhdjEubyBhdmMubyBoZXZjLm8gXAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdjEubyBhdmMubyBoZXZjLm8gdnZjLm9cCj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWNlbmNfaGVhZGVyLm8gYXZsYW5ndWFn ZS5vIFwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9y YmlzY29tbWVudC5vIHd2Lm8gZG92aV9pc29tLm8KPj4gIE9CSlMtJChDT05GSUdfTUNBX0RFTVVY RVIpICAgICAgICAgICAgICAgKz0gbWNhLm8KPj4gQEAgLTM2Myw3ICszNjMsNyBAQCBPQkpTLSQo Q09ORklHX01PRFNfREVNVVhFUikgICAgICAgICAgICAgICs9IG1vZHMubwo+PiAgT0JKUy0kKENP TkZJR19NT0ZMRVhfREVNVVhFUikgICAgICAgICAgICArPSBtb2ZsZXgubwo+PiAgT0JKUy0kKENP TkZJR19NT1ZfREVNVVhFUikgICAgICAgICAgICAgICArPSBtb3YubyBtb3ZfY2hhbi5vIG1vdl9l c2RzLm8gXAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBx dHBhbGV0dGUubyByZXBsYXlnYWluLm8gZG92aV9pc29tLm8KPj4gLU9CSlMtJChDT05GSUdfTU9W X01VWEVSKSAgICAgICAgICAgICAgICAgKz0gbW92ZW5jLm8gYXYxLm8gYXZjLm8gaGV2Yy5vIHZw Y2MubyBcCj4+ICtPQkpTLSQoQ09ORklHX01PVl9NVVhFUikgICAgICAgICAgICAgICAgICs9IG1v dmVuYy5vIGF2MS5vIGF2Yy5vIGhldmMubyB2dmMubyB2cGNjLm8gXAo+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbmNoaW50Lm8gbW92X2NoYW4ubyBy dHAubyBcCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v dmVuY2NlbmMubyBtb3ZlbmNfdHRtbC5vIHJhd3V0aWxzLm8gXAo+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3ZpX2lzb20ubyBldmMubwo+PiBAQCAtNTE2 LDcgKzUxNiw3IEBAIE9CSlMtJChDT05GSUdfUlRQX01VWEVSKSAgICAgICAgICAgICAgICAgKz0g cnRwLm8gICAgICAgICBcCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJ0cGVuY192cDgubyAgXAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBydHBlbmNfdnA5Lm8gICAgICAgICAgICAgICAgXAo+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHBlbmNfeGlwaC5vIFwKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZjLm8gaGV2Yy5vCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Yy5vIGhldmMu byB2dmMubwo+PiAgT0JKUy0kKENPTkZJR19SVFNQX0RFTVVYRVIpICAgICAgICAgICAgICArPSBy dHNwLm8gcnRzcGRlYy5vIGh0dHBhdXRoLm8gXAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1cmxkZWNvZGUubwo+PiAgT0JKUy0kKENPTkZJR19SVFNQX01V WEVSKSAgICAgICAgICAgICAgICArPSBydHNwLm8gcnRzcGVuYy5vIGh0dHBhdXRoLm8gXAo+PiBk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaXNvbS5jIGIvbGliYXZmb3JtYXQvaXNvbS5jCj4+IGlu ZGV4IDZkMDE5ODgxZTUuLjlmYmNjZDQ0MzcgMTAwNjQ0Cj4+IC0tLSBhL2xpYmF2Zm9ybWF0L2lz b20uYwo+PiArKysgYi9saWJhdmZvcm1hdC9pc29tLmMKPj4gQEAgLTM2LDYgKzM2LDcgQEAgY29u c3QgQVZDb2RlY1RhZyBmZl9tcDRfb2JqX3R5cGVbXSA9IHsKPj4gICAgICB7IEFWX0NPREVDX0lE X01QRUc0ICAgICAgICwgMHgyMCB9LAo+PiAgICAgIHsgQVZfQ09ERUNfSURfSDI2NCAgICAgICAg LCAweDIxIH0sCj4+ICAgICAgeyBBVl9DT0RFQ19JRF9IRVZDICAgICAgICAsIDB4MjMgfSwKPj4g KyAgICB7IEFWX0NPREVDX0lEX1ZWQyAgICAgICAgICwgMHgzMyB9LAo+PiAgICAgIHsgQVZfQ09E RUNfSURfQUFDICAgICAgICAgLCAweDQwIH0sCj4+ICAgICAgeyBBVl9DT0RFQ19JRF9NUDRBTFMg ICAgICAsIDB4NDAgfSwgLyogMTQ0OTYtMyBBTFMgKi8KPj4gICAgICB7IEFWX0NPREVDX0lEX01Q RUcyVklERU8gICwgMHg2MSB9LCAvKiBNUEVHLTIgTWFpbiAqLwo+PiBkaWZmIC0tZ2l0IGEvbGli YXZmb3JtYXQvaXNvbV90YWdzLmMgYi9saWJhdmZvcm1hdC9pc29tX3RhZ3MuYwo+PiBpbmRleCBh NTc1YjdjMTYwLi43MDU4MTFlOTUwIDEwMDY0NAo+PiAtLS0gYS9saWJhdmZvcm1hdC9pc29tX3Rh Z3MuYwo+PiArKysgYi9saWJhdmZvcm1hdC9pc29tX3RhZ3MuYwo+PiBAQCAtMTIzLDYgKzEyMyw5 IEBAIGNvbnN0IEFWQ29kZWNUYWcgZmZfY29kZWNfbW92dmlkZW9fdGFnc1tdID0gewo+PiAgICAg IHsgQVZfQ09ERUNfSURfSEVWQywgTUtUQUcoJ2QnLCAndicsICdoJywgJ2UnKSB9LCAvKiBIRVZD LWJhc2VkIERvbGJ5IFZpc2lvbiBkZXJpdmVkIGZyb20gaGV2MSAqLwo+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkdmgxIGlzIGhhbmRs ZWQgd2l0aGluIG1vdi5jICovCj4+ICArICAgIHsgQVZfQ09ERUNfSURfVlZDLCBNS1RBRygndics ICd2JywgJ2knLCAnMScpIH0sICAvKiBWVkMvSC4yNjYgd2hpY2ggaW5kaWNhdGVzIHBhcmFtZXRl ciBzZXRzIG1heSBiZSBpbiBFUyAqLwo+PiArICAgIHsgQVZfQ09ERUNfSURfVlZDLCBNS1RBRygn dicsICd2JywgJ2MnLCAnMScpIH0sICAvKiBWVkMvSC4yNjYgd2hpY2ggaW5kaWNhdGVzIHBhcmFt ZXRlciBzaGFsbCBub3QgYmUgaW4gRVMgKi8KPj4gKwo+PiAgICAgIHsgQVZfQ09ERUNfSURfSDI2 NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzEnKSB9LCAvKiBBVkMtMS9ILjI2NCAqLwo+PiAgICAg IHsgQVZfQ09ERUNfSURfSDI2NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzInKSB9LAo+PiAgICAg IHsgQVZfQ09ERUNfSURfSDI2NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzMnKSB9LAo+PiBkaWZm IC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92LmMgYi9saWJhdmZvcm1hdC9tb3YuYwo+PiBpbmRleCBl OGVmY2NmNmViLi4xMWI0M2FjMTM1IDEwMDY0NAo+PiAtLS0gYS9saWJhdmZvcm1hdC9tb3YuYwo+ PiArKysgYi9saWJhdmZvcm1hdC9tb3YuYwo+PiBAQCAtMjExNyw2ICsyMTE3LDExIEBAIHN0YXRp YyBpbnQgbW92X3JlYWRfZ2xibChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0 b20gYXRvbSkKPj4gICAgICBpZiAoKHVpbnQ2NF90KWF0b20uc2l6ZSA+ICgxPDwzMCkpCj4+ICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+PiAgKyAgICBpZiAoYXRvbS50eXBl ID09IE1LVEFHKCd2JywndicsJ2MnLCdDJykpIHsKPj4gKyAgICAgICAgYXZpb19yYjMyKHBiKTsK PiAKPiBhdmlvX3NraXAocGIsIDQpOwo+IAo+PiArICAgICAgICBhdG9tLnNpemUgLT0gNDsKPj4g KyAgICB9Cj4+ICsKPj4gICAgICBpZiAoYXRvbS5zaXplID49IDEwKSB7Cj4+ICAgICAgICAgIC8v IEJyb2tlbiBmaWxlcyBjcmVhdGVkIGJ5IGxlZ2FjeSB2ZXJzaW9ucyBvZiBsaWJhdmZvcm1hdCB3 aWxsCj4+ICAgICAgICAgIC8vIHdyYXAgYSB3aG9sZSBmaWVsIGF0b20gaW5zaWRlIG9mIGEgZ2xi bCBhdG9tLgo+PiBAQCAtNzkyMSw2ICs3OTI2LDcgQEAgc3RhdGljIGNvbnN0IE1PVlBhcnNlVGFi bGVFbnRyeSBtb3ZfZGVmYXVsdF9wYXJzZV90YWJsZVtdID0gewo+PiAgeyBNS1RBRygncycsJ2cn LCdwJywnZCcpLCBtb3ZfcmVhZF9zZ3BkIH0sCj4+ICB7IE1LVEFHKCdzJywnYicsJ2cnLCdwJyks IG1vdl9yZWFkX3NiZ3AgfSwKPj4gIHsgTUtUQUcoJ2gnLCd2JywnYycsJ0MnKSwgbW92X3JlYWRf Z2xibCB9LAo+PiAreyBNS1RBRygndicsJ3YnLCdjJywnQycpLCBtb3ZfcmVhZF9nbGJsIH0sCj4+ ICB7IE1LVEFHKCd1JywndScsJ2knLCdkJyksIG1vdl9yZWFkX3V1aWQgfSwKPj4gIHsgTUtUQUco J0MnLCdpJywnbicsIDB4OGUpLCBtb3ZfcmVhZF90YXJnYV95MjE2IH0sCj4+ICB7IE1LVEFHKCdm JywncicsJ2UnLCdlJyksIG1vdl9yZWFkX2ZyZWUgfSwKPj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9y bWF0L21vdmVuYy5jIGIvbGliYXZmb3JtYXQvbW92ZW5jLmMKPj4gaW5kZXggZTM5ZjFhYzk4Ny4u MDkzYTA0ZDBjMiAxMDA2NDQKPj4gLS0tIGEvbGliYXZmb3JtYXQvbW92ZW5jLmMKPj4gKysrIGIv bGliYXZmb3JtYXQvbW92ZW5jLmMKPj4gQEAgLTY4LDYgKzY4LDcgQEAKPj4gICNpbmNsdWRlICJ0 dG1sZW5jLmgiCj4+ICAjaW5jbHVkZSAidmVyc2lvbi5oIgo+PiAgI2luY2x1ZGUgInZwY2MuaCIK Pj4gKyNpbmNsdWRlICJ2dmMuaCIKPj4gICAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIG9wdGlvbnNb XSA9IHsKPj4gICAgICB7ICJtb3ZmbGFncyIsICJNT1YgbXV4ZXIgZmxhZ3MiLCBvZmZzZXRvZihN T1ZNdXhDb250ZXh0LCBmbGFncyksIEFWX09QVF9UWVBFX0ZMQUdTLCB7Lmk2NCA9IDB9LCBJTlRf TUlOLCBJTlRfTUFYLCBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJBTSwgIm1vdmZsYWdzIiB9LAo+ PiBAQCAtMTQ3Myw2ICsxNDc0LDIzIEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX2V2Y2NfdGFnKEFW SU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQo+PiAgICAgIHJldHVybiB1cGRhdGVfc2l6 ZShwYiwgcG9zKTsKPj4gIH0KPj4gICtzdGF0aWMgaW50IG1vdl93cml0ZV92dmNjX3RhZyhBVklP Q29udGV4dCAqcGIsIE1PVlRyYWNrICp0cmFjaykKPj4gK3sKPj4gKyAgICBpbnQ2NF90IHBvcyA9 IGF2aW9fdGVsbChwYik7Cj4+ICsKPj4gKyAgICBhdmlvX3diMzIocGIsIDApOwo+PiArICAgIGZm aW9fd2ZvdXJjYyhwYiwgInZ2Y0MiKTsKPj4gKwo+PiArICAgIGF2aW9fdzggIChwYiwgMCk7IC8q IHZlcnNpb24gKi8KPj4gKyAgICBhdmlvX3diMjQocGIsIDApOyAvKiBmbGFncyAqLwo+IAo+IElz IGl0IHJlYWxseSBhIGZ1bGxib3g/IEkgZmluZCBpdCBvZGQgY29uc2lkZXJpbmcgaDI2NCBhbmQg aDI2NSBkb24ndC4KCkl0IGlzOyBubyBpZGVhIHdoeS4KCj4gCj4+ICsKPj4gKyAgICBpZiAodHJh Y2stPnRhZyA9PSBNS1RBRygndicsJ3YnLCdjJywnMScpKQo+PiArICAgICAgICBmZl9pc29tX3dy aXRlX3Z2Y2MocGIsIHRyYWNrLT52b3NfZGF0YSwgdHJhY2stPnZvc19sZW4sIDEpOwo+PiArICAg IGVsc2UKPj4gKyAgICAgICAgZmZfaXNvbV93cml0ZV92dmNjKHBiLCB0cmFjay0+dm9zX2RhdGEs IHRyYWNrLT52b3NfbGVuLCAwKTsKPj4gKyAgICByZXR1cm4gdXBkYXRlX3NpemUocGIsIHBvcyk7 Cj4+ICt9Cj4+ICsKPj4gIC8qIGFsc28gdXNlZCBieSBhbGwgYXZpZCBjb2RlY3MgKGR2LCBpbXgs IG1lcmlkaWVuKSBhbmQgdGhlaXIgdmFyaWFudHMgKi8KPj4gIHN0YXRpYyBpbnQgbW92X3dyaXRl X2F2aWRfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQo+PiAgewo+PiBAQCAt MjM4Miw2ICsyNDAwLDggQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfdmlkZW9fdGFnKEFWRm9ybWF0 Q29udGV4dCAqcywgQVZJT0NvbnRleHQgKnBiLCBNT1ZNdXhDb250ZXgKPj4gICAgICAgICAgYXZp ZCA9IDE7Cj4+ICAgICAgfSBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RF Q19JRF9IRVZDKQo+PiAgICAgICAgICBtb3Zfd3JpdGVfaHZjY190YWcocGIsIHRyYWNrKTsKPj4g KyAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WVkMpCj4+ ICsgICAgICAgIG1vdl93cml0ZV92dmNjX3RhZyhwYiwgdHJhY2spOwo+PiAgICAgIGVsc2UgaWYg KHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgJiYgIVRBR19JU19BVkNJ KHRyYWNrLT50YWcpKSB7Cj4+ICAgICAgICAgIG1vdl93cml0ZV9hdmNjX3RhZyhwYiwgdHJhY2sp Owo+PiAgICAgICAgICBpZiAodHJhY2stPm1vZGUgPT0gTU9ERV9JUE9EKQo+PiBAQCAtNjE3MCw2 ICs2MTkwLDcgQEAgaW50IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBB VlBhY2tldCAqcGt0KQo+PiAgICAgIGlmICgocGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9E TlhIRCB8fAo+PiAgICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0IHx8 Cj4+ICAgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0hFVkMgfHwKPj4gKyAg ICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlZDIHx8Cj4+ICAgICAgICAgICBw YXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZQOSB8fAo+PiAgICAgICAgICAgcGFyLT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9FVkMgfHwKPj4gICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0g QVZfQ09ERUNfSURfVFJVRUhEKSAmJiAhdHJrLT52b3NfbGVuICYmCj4+IEBAIC02MjM1LDYgKzYy NTYsMTggQEAgaW50IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBh Y2tldCAqcGt0KQo+PiAgICAgICAgICAgICAgICAgIHNpemUgPSBmZl9oZXZjX2FubmV4YjJtcDQo cGIsIHBrdC0+ZGF0YSwgcGt0LT5zaXplLCAwLCBOVUxMKTsKPj4gICAgICAgICAgICAgIH0KPj4g ICAgICAgICAgfQo+PiArICAgIH0gZWxzZSBpZiAocGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19J RF9WVkMgJiYgdHJrLT52b3NfbGVuID4gNiAmJgo+PiArICAgICAgICAgICAgIChBVl9SQjI0KHRy ay0+dm9zX2RhdGEpID09IDEgfHwgQVZfUkIzMih0cmstPnZvc19kYXRhKSA9PSAxKSkgewo+PiAr ICAgICAgLyogZXh0cmFkYXRhIGlzIEFubmV4IEIsIGFzc3VtZSB0aGUgYml0c3RyZWFtIGlzIHRv byBhbmQgY29udmVydCBpdCAqLwo+PiArICAgICAgaWYgKHRyay0+aGludF90cmFjayA+PSAwICYm IHRyay0+aGludF90cmFjayA8IG1vdi0+bmJfc3RyZWFtcykgewo+PiArICAgICAgICAgICAgcmV0 ID0gZmZfaDI2Nl9hbm5leGIybXA0X2J1Zihwa3QtPmRhdGEsICZyZWZvcm1hdHRlZF9kYXRhLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSwgMCwgTlVM TCk7Cj4+ICsgICAgICAgICAgICBpZiAocmV0IDwgMCkKPj4gKyAgICAgICAgICAgICAgICByZXR1 cm4gcmV0Owo+PiArICAgICAgICAgICAgYXZpb193cml0ZShwYiwgcmVmb3JtYXR0ZWRfZGF0YSwg c2l6ZSk7Cj4+ICsgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgIHNpemUgPSBmZl9oMjY2X2Fu bmV4YjJtcDQocGIsIHBrdC0+ZGF0YSwgcGt0LT5zaXplLCAwLCBOVUxMKTsKPj4gKyAgICAgIH0K Pj4gICAgICB9IGVsc2UgaWYgKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4+ ICAgICAgICAgIGlmICh0cmstPmhpbnRfdHJhY2sgPj0gMCAmJiB0cmstPmhpbnRfdHJhY2sgPCBt b3YtPm5iX3N0cmVhbXMpIHsKPj4gICAgICAgICAgICAgIHJldCA9IGZmX2F2MV9maWx0ZXJfb2J1 c19idWYocGt0LT5kYXRhLCAmcmVmb3JtYXR0ZWRfZGF0YSwKPj4gQEAgLTYyODEsNiArNjMxNCw5 IEBAIGludCBmZl9tb3Zfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQg KnBrdCkKPj4gICAgICAgICAgICAgIH0gZWxzZSBpZihwYXItPmNvZGVjX2lkID09IEFWX0NPREVD X0lEX0hFVkMgJiYgcGFyLT5leHRyYWRhdGFfc2l6ZSA+IDIxKSB7Cj4+ICAgICAgICAgICAgICAg ICAgaW50IG5hbF9zaXplX2xlbmd0aCA9IChwYXItPmV4dHJhZGF0YVsyMV0gJiAweDMpICsgMTsK Pj4gICAgICAgICAgICAgICAgICByZXQgPSBmZl9tb3ZfY2VuY19hdmNfd3JpdGVfbmFsX3VuaXRz KHMsICZ0cmstPmNlbmMsIG5hbF9zaXplX2xlbmd0aCwgcGIsIHBrdC0+ZGF0YSwgc2l6ZSk7Cj4+ ICsgICAgICAgICAgICB9IGVsc2UgaWYocGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WVkMg JiYgcGFyLT5leHRyYWRhdGFfc2l6ZSA+IDIxKSB7Cj4+ICsgICAgICAgICAgICAgICAgaW50IG5h bF9zaXplX2xlbmd0aCA9IChwYXItPmV4dHJhZGF0YVsyMV0gJiAweDMpICsgMTsKPiAKPiBJcyB0 aGlzIHJlYWxseSBhdCB0aGUgZXhhY3Qgc2FtZSBvZmZzZXQgYXMgaW4gaGV2Yz8KPiAKPj4gKyAg ICAgICAgICAgICAgICByZXQgPSBmZl9tb3ZfY2VuY19hdmNfd3JpdGVfbmFsX3VuaXRzKHMsICZ0 cmstPmNlbmMsIG5hbF9zaXplX2xlbmd0aCwgcGIsIHBrdC0+ZGF0YSwgc2l6ZSk7Cj4+ICAgICAg ICAgICAgICB9IGVsc2Ugewo+PiAgICAgICAgICAgICAgICAgIHJldCA9IGZmX21vdl9jZW5jX3dy aXRlX3BhY2tldCgmdHJrLT5jZW5jLCBwYiwgcGt0LT5kYXRhLCBzaXplKTsKPj4gICAgICAgICAg ICAgIH0KPj4gQEAgLTczNjMsNyArNzM5OSw4IEBAIHN0YXRpYyBpbnQgbW92X2luaXQoQVZGb3Jt YXRDb250ZXh0ICpzKQo+PiAgICAgICAgICAgIGlmIChtb3YtPmVuY3J5cHRpb25fc2NoZW1lID09 IE1PVl9FTkNfQ0VOQ19BRVNfQ1RSKSB7Cj4+ICAgICAgICAgICAgICByZXQgPSBmZl9tb3ZfY2Vu Y19pbml0KCZ0cmFjay0+Y2VuYywgbW92LT5lbmNyeXB0aW9uX2tleSwKPj4gLSAgICAgICAgICAg ICAgICAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCB8fCB0cmFjay0+ cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IRVZDKSwKPj4gKyAgICAgICAgICAgICAgICAo dHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCB8fCB0cmFjay0+cGFyLT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IRVZDIHx8Cj4+ICsgICAgICAgICAgICAgICAgIHRyYWNr LT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZWQyksCj4+ICAgICAgICAgICAgICAgICAg cy0+ZmxhZ3MgJiBBVkZNVF9GTEFHX0JJVEVYQUNUKTsKPj4gICAgICAgICAgICAgIGlmIChyZXQp Cj4+ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gQEAgLTc4MzIsNiArNzg2OSw4IEBA IHN0YXRpYyBjb25zdCBBVkNvZGVjVGFnIGNvZGVjX21wNF90YWdzW10gPSB7Cj4+ICAgICAgeyBB Vl9DT0RFQ19JRF9IRVZDLCAgICAgICAgICAgIE1LVEFHKCdoJywgJ2UnLCAndicsICcxJykgfSwK Pj4gICAgICB7IEFWX0NPREVDX0lEX0hFVkMsICAgICAgICAgICAgTUtUQUcoJ2gnLCAndicsICdj JywgJzEnKSB9LAo+PiAgICAgIHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAgICAgICBNS1RBRygn ZCcsICd2JywgJ2gnLCAnMScpIH0sCj4+ICsgICAgeyBBVl9DT0RFQ19JRF9WVkMsICAgICAgICAg ICAgIE1LVEFHKCd2JywgJ3YnLCAnYycsICcxJykgfSwKPj4gKyAgICB7IEFWX0NPREVDX0lEX1ZW QywgICAgICAgICAgICAgTUtUQUcoJ3YnLCAndicsICdpJywgJzEnKSB9LAo+PiAgICAgIHsgQVZf Q09ERUNfSURfRVZDLCAgICAgICAgICAgICBNS1RBRygnZScsICd2JywgJ2MnLCAnMScpIH0sCj4+ ICAgICAgeyBBVl9DT0RFQ19JRF9NUEVHMlZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcs ICd2JykgfSwKPj4gICAgICB7IEFWX0NPREVDX0lEX01QRUcxVklERU8sICAgICAgTUtUQUcoJ20n LCAncCcsICc0JywgJ3YnKSB9LAo+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdnZjLmMgYi9s aWJhdmZvcm1hdC92dmMuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw MDAwLi44ZWMwMTM2ODYyCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvbGliYXZmb3JtYXQvdnZj LmMKPj4gQEAgLTAsMCArMSw5OTggQEAKPj4gKy8qCj4+ICsgKiBILjI2Ni9WVkMgaGVscGVyIGZ1 bmN0aW9ucyBmb3IgbXV4ZXJzCj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIyLCBUaG9t YXMgU2llZGVsCj4+ICsgKgo+PiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+PiAr ICoKPj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKPj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKPj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+PiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKgo+PiAr ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPj4gKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+PiAr ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQo+PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+PiArICovCj4+ICsKPj4gKyNpbmNs dWRlICJsaWJhdmNvZGVjL2dldF9iaXRzLmgiCj4+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9nb2xv bWIuaCIKPj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL3Z2Yy5oIgo+PiArI2luY2x1ZGUgImxpYmF2 dXRpbC9pbnRyZWFkd3JpdGUuaCIKPj4gKyNpbmNsdWRlICJhdmMuaCIKPj4gKyNpbmNsdWRlICJh dmlvLmgiCj4+ICsjaW5jbHVkZSAiYXZpb19pbnRlcm5hbC5oIgo+PiArI2luY2x1ZGUgInZ2Yy5o Igo+PiArCj4+ICt0eXBlZGVmIHN0cnVjdCBWVkNDTkFMVW5pdEFycmF5IHsKPj4gKyAgICB1aW50 OF90IGFycmF5X2NvbXBsZXRlbmVzczsKPj4gKyAgICB1aW50OF90IE5BTF91bml0X3R5cGU7Cj4+ ICsgICAgdWludDE2X3QgbnVtX25hbHVzOwo+PiArICAgIHVpbnQxNl90ICpuYWxfdW5pdF9sZW5n dGg7Cj4+ICsgICAgdWludDhfdCAqKm5hbF91bml0Owo+PiArfSBWVkNDTkFMVW5pdEFycmF5Owo+ PiArCj4+ICt0eXBlZGVmIHN0cnVjdCBWVkNQVExSZWNvcmQgewo+PiArICAgIHVpbnQ4X3QgbnVt X2J5dGVzX2NvbnN0cmFpbnRfaW5mbzsKPj4gKyAgICB1aW50OF90IGdlbmVyYWxfcHJvZmlsZV9p ZGM7Cj4+ICsgICAgdWludDhfdCBnZW5lcmFsX3RpZXJfZmxhZzsKPj4gKyAgICB1aW50OF90IGdl bmVyYWxfbGV2ZWxfaWRjOwo+PiArICAgIHVpbnQ4X3QgcHRsX2ZyYW1lX29ubHlfY29uc3RyYWlu dF9mbGFnOwo+PiArICAgIHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOwo+PiAr ICAgIHVpbnQ4X3QgZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bOV07Cj4+ICsgICAgdWludDhfdCAq cHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZzsKPj4gKyAgICB1aW50OF90ICpzdWJsYXll cl9sZXZlbF9pZGM7Cj4+ICsgICAgdWludDhfdCBwdGxfbnVtX3N1Yl9wcm9maWxlczsKPj4gKyAg ICB1aW50MzJfdCAqZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGM7Cj4+ICt9IFZWQ1BUTFJlY29yZDsK Pj4gKwo+PiArdHlwZWRlZiBzdHJ1Y3QgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgewo+ PiArICAgIHVpbnQ4X3QgbGVuZ3RoU2l6ZU1pbnVzT25lOwo+PiArICAgIHVpbnQ4X3QgcHRsX3By ZXNlbnRfZmxhZzsKPj4gKyAgICB1aW50MTZfdCBvbHNfaWR4Owo+PiArICAgIHVpbnQ4X3QgbnVt X3N1YmxheWVyczsKPj4gKyAgICB1aW50OF90IGNvbnN0YW50X2ZyYW1lX3JhdGU7Cj4+ICsgICAg dWludDhfdCBjaHJvbWFfZm9ybWF0X2lkYzsKPj4gKyAgICB1aW50OF90IGJpdF9kZXB0aF9taW51 czg7Cj4+ICsgICAgVlZDUFRMUmVjb3JkIHB0bDsKPj4gKyAgICB1aW50MTZfdCBtYXhfcGljdHVy ZV93aWR0aDsKPj4gKyAgICB1aW50MTZfdCBtYXhfcGljdHVyZV9oZWlnaHQ7Cj4+ICsgICAgdWlu dDE2X3QgYXZnX2ZyYW1lX3JhdGU7Cj4+ICsgICAgdWludDhfdCBudW1fb2ZfYXJyYXlzOwo+PiAr ICAgIFZWQ0NOQUxVbml0QXJyYXkgKmFycmF5Owo+PiArfSBWVkNEZWNvZGVyQ29uZmlndXJhdGlv blJlY29yZDsKPj4gKwo+PiArdHlwZWRlZiBzdHJ1Y3QgVlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgewo+ PiArICAgIHVpbnQ4X3QgcHJvZmlsZV9pZGM7Cj4+ICsgICAgdWludDhfdCB0aWVyX2ZsYWc7Cj4+ ICsgICAgdWludDhfdCBnZW5lcmFsX2xldmVsX2lkYzsKPj4gKyAgICB1aW50OF90IHB0bF9mcmFt ZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKPj4gKyAgICB1aW50OF90IHB0bF9tdWx0aWxheWVyX2Vu YWJsZWRfZmxhZzsKPj4gKy8vIGdlbmVyYWxfY29uc3RyYWludF9pbmZvCj4+ICsgICAgdWludDhf dCBnY2lfcHJlc2VudF9mbGFnOwo+PiArICAgIHVpbnQ4X3QgZ2NpX2dlbmVyYWxfY29uc3RyYWlu dHNbOV07Cj4+ICsgICAgdWludDhfdCBnY2lfbnVtX3Jlc2VydmVkX2JpdHM7Cj4+ICsvLyBlbmQg Z2VuZXJhbF9jb25zdHJhaW50X2luZm8KPj4gKyAgICB1aW50OF90ICpwdGxfc3VibGF5ZXJfbGV2 ZWxfcHJlc2VudF9mbGFnOwo+PiArICAgIHVpbnQ4X3QgKnN1YmxheWVyX2xldmVsX2lkYzsKPj4g KyAgICB1aW50OF90IHB0bF9udW1fc3ViX3Byb2ZpbGVzOwo+PiArICAgIHVpbnQzMl90ICpnZW5l cmFsX3N1Yl9wcm9maWxlX2lkYzsKPj4gK30gVlZDQ1Byb2ZpbGVUaWVyTGV2ZWw7Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIHZ2Y2NfdXBkYXRlX3B0bChWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29y ZCAqdnZjYywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNDUHJvZmlsZVRpZXJM ZXZlbCAqcHRsKQo+PiArewo+PiArICAgIC8qCj4+ICsgICAgICogVGhlIGxldmVsIGluZGljYXRp b24gZ2VuZXJhbF9sZXZlbF9pZGMgbXVzdCBpbmRpY2F0ZSBhIGxldmVsIG9mCj4+ICsgICAgICog Y2FwYWJpbGl0eSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIGhpZ2hlc3QgbGV2ZWwgaW5k aWNhdGVkIGZvciB0aGUKPj4gKyAgICAgKiBoaWdoZXN0IHRpZXIgaW4gYWxsIHRoZSBwYXJhbWV0 ZXIgc2V0cy4KPj4gKyAgICAgKi8KPj4gKyAgICBpZiAodnZjYy0+cHRsLmdlbmVyYWxfdGllcl9m bGFnIDwgcHRsLT50aWVyX2ZsYWcpCj4+ICsgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVs X2lkYyA9IHB0bC0+Z2VuZXJhbF9sZXZlbF9pZGM7Cj4+ICsgICAgZWxzZQo+PiArICAgICAgICB2 dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPQo+PiArICAgICAgICAgICAgRkZNQVgodnZjYy0+ cHRsLmdlbmVyYWxfbGV2ZWxfaWRjLCBwdGwtPmdlbmVyYWxfbGV2ZWxfaWRjKTsKPj4gKwo+PiAr ICAgIC8qCj4+ICsgICAgICogVGhlIHRpZXIgaW5kaWNhdGlvbiBnZW5lcmFsX3RpZXJfZmxhZyBt dXN0IGluZGljYXRlIGEgdGllciBlcXVhbCB0byBvcgo+PiArICAgICAqIGdyZWF0ZXIgdGhhbiB0 aGUgaGlnaGVzdCB0aWVyIGluZGljYXRlZCBpbiBhbGwgdGhlIHBhcmFtZXRlciBzZXRzLgo+PiAr ICAgICAqLwo+PiArICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyA9Cj4+ICsgICAgICAg IEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZywgcHRsLT50aWVyX2ZsYWcpOwo+PiAr Cj4+ICsgICAgLyoKPj4gKyAgICAgKiBUaGUgcHJvZmlsZSBpbmRpY2F0aW9uIGdlbmVyYWxfcHJv ZmlsZV9pZGMgbXVzdCBpbmRpY2F0ZSBhIHByb2ZpbGUgdG8KPj4gKyAgICAgKiB3aGljaCB0aGUg c3RyZWFtIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gcmVjb3JkIGNvbmZvcm1z Lgo+PiArICAgICAqCj4+ICsgICAgICogSWYgdGhlIHNlcXVlbmNlIHBhcmFtZXRlciBzZXRzIGFy ZSBtYXJrZWQgd2l0aCBkaWZmZXJlbnQgcHJvZmlsZXMsIHRoZW4KPj4gKyAgICAgKiB0aGUgc3Ry ZWFtIG1heSBuZWVkIGV4YW1pbmF0aW9uIHRvIGRldGVybWluZSB3aGljaCBwcm9maWxlLCBpZiBh bnksIHRoZQo+PiArICAgICAqIGVudGlyZSBzdHJlYW0gY29uZm9ybXMgdG8uIElmIHRoZSBlbnRp cmUgc3RyZWFtIGlzIG5vdCBleGFtaW5lZCwgb3IgdGhlCj4+ICsgICAgICogZXhhbWluYXRpb24g cmV2ZWFscyB0aGF0IHRoZXJlIGlzIG5vIHByb2ZpbGUgdG8gd2hpY2ggdGhlIGVudGlyZSBzdHJl YW0KPj4gKyAgICAgKiBjb25mb3JtcywgdGhlbiB0aGUgZW50aXJlIHN0cmVhbSBtdXN0IGJlIHNw bGl0IGludG8gdHdvIG9yIG1vcmUKPj4gKyAgICAgKiBzdWItc3RyZWFtcyB3aXRoIHNlcGFyYXRl IGNvbmZpZ3VyYXRpb24gcmVjb3JkcyBpbiB3aGljaCB0aGVzZSBydWxlcyBjYW4KPj4gKyAgICAg KiBiZSBtZXQuCj4+ICsgICAgICoKPj4gKyAgICAgKiBOb3RlOiBzZXQgdGhlIHByb2ZpbGUgdG8g dGhlIGhpZ2hlc3QgdmFsdWUgZm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkuCj4+ICsgICAgICov Cj4+ICsgICAgdnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMgPQo+PiArICAgICAgICBGRk1B WCh2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYywgcHRsLT5wcm9maWxlX2lkYyk7Cj4+ICsK Pj4gKyAgICAvKgo+PiArICAgICAqIEVhY2ggYml0IGluIGZsYWdzIG1heSBvbmx5IGJlIHNldCBp ZiBhbGwKPj4gKyAgICAgKiB0aGUgcGFyYW1ldGVyIHNldHMgc2V0IHRoYXQgYml0Lgo+PiArICAg ICAqLwo+PiArICAgIHZ2Y2MtPnB0bC5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgJj0K Pj4gKyAgICAgICAgcHRsLT5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc7Cj4+ICsgICAg dnZjYy0+cHRsLnB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZyAmPSBwdGwtPnB0bF9tdWx0aWxh eWVyX2VuYWJsZWRfZmxhZzsKPj4gKwo+PiArICAgIC8qCj4+ICsgICAgICogQ29uc3RyYWludHMg SW5mbwo+PiArICAgICAqLwo+PiArICAgIGlmIChwdGwtPmdjaV9wcmVzZW50X2ZsYWcpIHsKPj4g KyAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gPSA5Owo+PiArICAg ICAgICBtZW1jcHkoJnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1swXSwKPj4gKyAg ICAgICAgICAgICAgICZwdGwtPmdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzWzBdLCBzaXplb2YodWlu dDhfdCkgKiA5KTsKPj4gKwo+PiArICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgIHZ2Y2MtPnB0bC5u dW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0gMTsKPj4gKyAgICAgICAgbWVtc2V0KCZ2dmNjLT5w dGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bMF0sIDAsIHNpemVvZih1aW50OF90KSAqIDkpOwo+ PiArICAgIH0KPj4gKwo+PiArICAgIC8qCj4+ICsgICAgICogRWFjaCBiaXQgaW4gZmxhZ3MgbWF5 IG9ubHkgYmUgc2V0IGlmIG9uZSBvZgo+PiArICAgICAqIHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQg dGhhdCBiaXQuCj4+ICsgICAgICovCj4+ICsgICAgdnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZl bF9wcmVzZW50X2ZsYWcgPQo+PiArICAgICAgICAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVp bnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOwo+PiArICAgIHZ2Y2MtPnB0bC5zdWJs YXllcl9sZXZlbF9pZGMgPQo+PiArICAgICAgICAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVp bnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOwo+PiArCj4+ICsgICAgbWVtc2V0KHZ2 Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnLCAwLAo+PiArICAgICAgICAg ICBzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMSk7Cj4+ICsgICAgbWVt c2V0KHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGMsIDAsCj4+ICsgICAgICAgICAgIHNpemVv Zih1aW50OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsKPj4gKwo+PiArICAgIGZvciAo aW50IGkgPSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHsKPj4gKyAgICAg ICAgdnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0gfD0KPj4gKyAg ICAgICAgICAgIHB0bC0+cHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXTsKPj4gKyAg ICAgICAgaWYgKHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKSB7 Cj4+ICsgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0KPj4gKyAg ICAgICAgICAgICAgICBGRk1BWCh2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgIHB0bC0+c3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKPj4gKyAg ICAgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgICAgIGlmIChpID09IHZ2Y2MtPm51bV9zdWJsYXll cnMgLSAxKSB7Cj4+ICsgICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lk Y1tpXSA9IHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYzsKPj4gKyAgICAgICAgICAgIH0gZWxz ZSB7Cj4+ICsgICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSA9 Cj4+ICsgICAgICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaSAr IDFdOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsg ICAgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzID0KPj4gKyAgICAgICAgRkZNQVgodnZj Yy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzLCBwdGwtPnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsK Pj4gKyAgICBpZiAodnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKSB7Cj4+ICsgICAgICAg IHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyA9Cj4+ICsgICAgICAgICAgICAodWlu dDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkgKgo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOwo+PiArICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlczsgaSsr KSB7Cj4+ICsgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbaV0g PQo+PiArICAgICAgICAgICAgICAgIHB0bC0+Z2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbaV07Cj4+ ICsgICAgICAgIH0KPj4gKyAgICB9IGVsc2Ugewo+PiArICAgICAgICB2dmNjLT5wdGwuZ2VuZXJh bF9zdWJfcHJvZmlsZV9pZGMgPQo+PiArICAgICAgICAgICAgKHVpbnQzMl90ICopIG1hbGxvYyhz aXplb2YodWludDMyX3QpKTsKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHZ2 Y2NfcGFyc2VfcHRsKEdldEJpdENvbnRleHQgKmdiLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJvZmlsZVRpZXJQcmVzZW50RmxhZywKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXhfc3ViX2xheWVyc19t aW51czEpCj4+ICt7Cj4+ICsgICAgVlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgZ2VuZXJhbF9wdGw7Cj4+ ICsgICAgaW50IGo7Cj4+ICsKPj4gKyAgICBpZiAocHJvZmlsZVRpZXJQcmVzZW50RmxhZykgewo+ PiArICAgICAgICBnZW5lcmFsX3B0bC5wcm9maWxlX2lkYyA9IGdldF9iaXRzKGdiLCA3KTsKPj4g KyAgICAgICAgZ2VuZXJhbF9wdGwudGllcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKPj4gKyAgICB9 Cj4+ICsgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPSBnZXRfYml0cyhnYiwgOCk7 Cj4+ICsKPj4gKyAgICBnZW5lcmFsX3B0bC5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcg PSBnZXRfYml0czEoZ2IpOwo+PiArICAgIGdlbmVyYWxfcHRsLnB0bF9tdWx0aWxheWVyX2VuYWJs ZWRfZmxhZyA9IGdldF9iaXRzMShnYik7Cj4+ICsgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2VudEZs YWcpIHsgICAgICAgLy8gcGFyc2UgY29uc3RyYWludCBpbmZvCj4+ICsgICAgICAgIGdlbmVyYWxf cHRsLmdjaV9wcmVzZW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOwo+PiArICAgICAgICBpZiAoZ2Vu ZXJhbF9wdGwuZ2NpX3ByZXNlbnRfZmxhZykgewo+PiArICAgICAgICAgICAgZm9yIChqID0gMDsg aiA8IDg7IGorKykKPj4gKyAgICAgICAgICAgICAgICBnZW5lcmFsX3B0bC5nY2lfZ2VuZXJhbF9j b25zdHJhaW50c1tqXSA9IGdldF9iaXRzKGdiLCA4KTsKPj4gKyAgICAgICAgICAgIGdlbmVyYWxf cHRsLmdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzWzhdID0gMDsKPj4gKyAgICAgICAgICAgIGdlbmVy YWxfcHRsLmdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzWzhdID0gZ2V0X2JpdHMoZ2IsIDcpOwo+PiAr Cj4+ICsgICAgICAgICAgICBnZW5lcmFsX3B0bC5nY2lfbnVtX3Jlc2VydmVkX2JpdHMgPSBnZXRf Yml0cyhnYiwgOCk7Cj4+ICsgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGdlbmVyYWxfcHRsLmdj aV9udW1fcmVzZXJ2ZWRfYml0cyk7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgd2hpbGUgKGdi LT5pbmRleCAlIDggIT0gMCkKPj4gKyAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOwo+PiArICAg IH0KPj4gKwo+PiArICAgIGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2Zs YWcgPQo+PiArICAgICAgICAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQ4X3QpICogbWF4 X3N1Yl9sYXllcnNfbWludXMxKTsKPj4gKyAgICBmb3IgKGludCBpID0gbWF4X3N1Yl9sYXllcnNf bWludXMxIC0gMTsgaSA+PSAwOyBpLS0pIHsKPj4gKyAgICAgICAgZ2VuZXJhbF9wdGwucHRsX3N1 YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSA9IGdldF9iaXRzMShnYik7Cj4+ICsgICAgfQo+ PiArICAgIHdoaWxlIChnYi0+aW5kZXggJSA4ICE9IDApCj4+ICsgICAgICAgIHNraXBfYml0czEo Z2IpOwo+PiArCj4+ICsgICAgZ2VuZXJhbF9wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjID0KPj4gKyAg ICAgICAgKHVpbnQ4X3QgKikgbWFsbG9jKHNpemVvZih1aW50OF90KSAqIG1heF9zdWJfbGF5ZXJz X21pbnVzMSk7Cj4+ICsgICAgZm9yIChpbnQgaSA9IG1heF9zdWJfbGF5ZXJzX21pbnVzMSAtIDE7 IGkgPj0gMDsgaS0tKSB7Cj4+ICsgICAgICAgIGlmIChnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJf bGV2ZWxfcHJlc2VudF9mbGFnW2ldKQo+PiArICAgICAgICAgICAgZ2VuZXJhbF9wdGwuc3VibGF5 ZXJfbGV2ZWxfaWRjW2ldID0gZ2V0X2JpdHMoZ2IsIDgpOwo+PiArICAgIH0KPj4gKwo+PiArICAg IGlmIChwcm9maWxlVGllclByZXNlbnRGbGFnKSB7Cj4+ICsgICAgICAgIGdlbmVyYWxfcHRsLnB0 bF9udW1fc3ViX3Byb2ZpbGVzID0gZ2V0X2JpdHMoZ2IsIDgpOwo+PiArICAgICAgICBpZiAoZ2Vu ZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpIHsKPj4gKyAgICAgICAgICAgIGdlbmVyYWxf cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KPj4gKyAgICAgICAgICAgICAgICAodWludDMy X3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkgKgo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOwo+PiArICAg ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9m aWxlczsgaSsrKSB7Cj4+ICsgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJf cHJvZmlsZV9pZGNbaV0gPSBnZXRfYml0c19sb25nKGdiLCAzMik7Cj4+ICsgICAgICAgICAgICB9 Cj4+ICsgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICBnZW5lcmFsX3B0bC5nZW5lcmFs X3N1Yl9wcm9maWxlX2lkYyA9Cj4+ICsgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopIG1hbGxv YyhzaXplb2YodWludDMyX3QpKTsKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiArICAg IHZ2Y2NfdXBkYXRlX3B0bCh2dmNjLCAmZ2VuZXJhbF9wdGwpOwo+PiArCj4+ICsgICAgZnJlZShn ZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnKTsKPj4gKyAgICBmcmVl KGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVsX2lkYyk7Cj4+ICsgICAgZnJlZShnZW5lcmFsX3B0 bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdnZj Y19wYXJzZV92cHMoR2V0Qml0Q29udGV4dCAqZ2IsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQo+PiArewo+PiArICAgIHVu c2lnbmVkIGludCB2cHNfbWF4X2xheWVyc19taW51czE7Cj4+ICsgICAgdW5zaWduZWQgaW50IHZw c19tYXhfc3ViX2xheWVyc19taW51czE7Cj4+ICsgICAgdW5zaWduZWQgaW50IHZwc19kZWZhdWx0 X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZzsKPj4gKyAgICB1bnNpZ25lZCBpbnQgdnBzX2FsbF9p bmRlcGVuZGFudF9sYXllcl9mbGFnOwo+PiArICAgIHVuc2lnbmVkIGludCB2cHNfZWFjaF9sYXll cl9pc19hbl9vbHNfZmxhZzsKPj4gKyAgICB1bnNpZ25lZCBpbnQgdnBzX29sc19tb2RlX2lkYzsK Pj4gKwo+PiArICAgIHVuc2lnbmVkIGludCAqdnBzX3B0X3ByZXNlbnRfZmxhZzsKPj4gKyAgICB1 bnNpZ25lZCBpbnQgKnZwc19wdGxfbWF4X3RpZDsKPj4gKyAgICB1bnNpZ25lZCBpbnQgdnBzX251 bV9wdGxzX21pbnVzMSA9IDA7Cj4+ICsKPj4gKyAgICAvKgo+PiArICAgICAqIHZwc192aWRlb19w YXJhbWV0ZXJfc2V0X2lkIHUoNCkKPj4gKyAgICAgKi8KPj4gKyAgICBza2lwX2JpdHMoZ2IsIDQp Owo+PiArCj4+ICsgICAgdnBzX21heF9sYXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDYpOwo+ PiArICAgIHZwc19tYXhfc3ViX2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgMyk7Cj4+ICsK Pj4gKyAgICAvKgo+PiArICAgICAqIG51bVRlbXBvcmFsTGF5ZXJzIGdyZWF0ZXIgdGhhbiAxIGlu ZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gdG8gd2hpY2ggdGhpcwo+PiArICAgICAqIGNvbmZpZ3Vy YXRpb24gcmVjb3JkIGFwcGxpZXMgaXMgdGVtcG9yYWxseSBzY2FsYWJsZSBhbmQgdGhlIGNvbnRh aW5lZAo+PiArICAgICAqIG51bWJlciBvZiB0ZW1wb3JhbCBsYXllcnMgKGFsc28gcmVmZXJyZWQg dG8gYXMgdGVtcG9yYWwgc3ViLWxheWVyIG9yCj4+ICsgICAgICogc3ViLWxheWVyIGluIElTTy9J RUMgMjMwMDgtMikgaXMgZXF1YWwgdG8gbnVtVGVtcG9yYWxMYXllcnMuIFZhbHVlIDEKPj4gKyAg ICAgKiBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIGlzIG5vdCB0ZW1wb3JhbGx5IHNjYWxhYmxl LiBWYWx1ZSAwIGluZGljYXRlcwo+PiArICAgICAqIHRoYXQgaXQgaXMgdW5rbm93biB3aGV0aGVy IHRoZSBzdHJlYW0gaXMgdGVtcG9yYWxseSBzY2FsYWJsZS4KPj4gKyAgICAgKi8KPj4gKyAgICB2 dmNjLT5udW1fc3VibGF5ZXJzID0gRkZNQVgodnZjYy0+bnVtX3N1YmxheWVycywKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBzX21heF9zdWJfbGF5ZXJzX21pbnVzMSArIDEp Owo+PiArCj4+ICsgICAgaWYgKHZwc19tYXhfbGF5ZXJzX21pbnVzMSA+IDAgJiYgdnBzX21heF9z dWJfbGF5ZXJzX21pbnVzMSA+IDApCj4+ICsgICAgICAgIHZwc19kZWZhdWx0X3B0bF9kcGJfaHJk X21heF90aWRfZmxhZyA9IGdldF9iaXRzMShnYik7Cj4+ICsgICAgaWYgKHZwc19tYXhfbGF5ZXJz X21pbnVzMSA+IDApCj4+ICsgICAgICAgIHZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZyA9 IGdldF9iaXRzMShnYik7Cj4+ICsKPj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSB2cHNfbWF4 X2xheWVyc19taW51czE7IGkrKykgewo+PiArICAgICAgICBza2lwX2JpdHMoZ2IsIDYpOyAgICAv L3Zwc19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZ1tpXQo+PiArICAgICAgICBpZiAo aSA+IDAgJiYgIXZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZykgewo+PiArICAgICAgICAg ICAgaWYgKGdldF9iaXRzMShnYikpIHsgICAgLy8gdnBzX2luZGVwZW5kYW50X2xheWVyX2ZsYWcK Pj4gKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdnBzX21heF90aWRfcmVmX3ByZXNlbnRf ZmxhZyA9IGdldF9iaXRzMShnYik7Cj4+ICsgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7 IGogPCBpOyBqKyspIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKHZwc19tYXhfdGlkX3Jl Zl9wcmVzZW50X2ZsYWcgJiYgZ2V0X2JpdHMxKGdiKSkgIC8vIHZwc19kaXJlY3RfcmVmX2xheWVy X2ZsYWdbaV1bal0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgMyk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZwc19tYXhfdGlkX2lsX3JlZl9waWNz X3BsdXMxCj4+ICsgICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgfQo+PiArICAgICAg ICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKHZwc19tYXhfbGF5ZXJzX21pbnVzMSA+IDAp IHsKPj4gKyAgICAgICAgaWYgKHZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZykKPj4gKyAg ICAgICAgICAgIHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnID0gZ2V0X2JpdHMxKGdiKTsK Pj4gKyAgICAgICAgaWYgKHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnKSB7Cj4+ICsgICAg ICAgICAgICBpZiAoIXZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZykKPj4gKyAgICAgICAg ICAgICAgICB2cHNfb2xzX21vZGVfaWRjID0gZ2V0X2JpdHMoZ2IsIDIpOwo+PiArICAgICAgICAg ICAgaWYgKHZwc19vbHNfbW9kZV9pZGMgPT0gMikgewo+PiArICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCB2cHNfbnVtX291dHB1dF9sYXllcl9zZXRzX21pbnVzMiA9IGdldF9iaXRzKGdiLCA4 KTsKPj4gKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSB2cHNfbnVtX291dHB1 dF9sYXllcl9zZXRzX21pbnVzMiArIDE7IGkrKykgewo+PiArICAgICAgICAgICAgICAgICAgICBm b3IgKGludCBqID0gMDsgaiA8PSB2cHNfbWF4X2xheWVyc19taW51czE7IGorKykgewo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7Cj4+ICsgICAgICAgICAgICAgICAg ICAgIH0KPj4gKyAgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAg IH0KPj4gKyAgICAgICAgdnBzX251bV9wdGxzX21pbnVzMSA9IGdldF9iaXRzKGdiLCA4KTsKPj4g KyAgICB9Cj4+ICsKPj4gKyAgICB2cHNfcHRfcHJlc2VudF9mbGFnID0KPj4gKyAgICAgICAgKHVu c2lnbmVkIGludCAqKSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKgo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodnBzX251bV9wdGxzX21pbnVzMSArIDEpKTsKPj4gKyAg ICB2cHNfcHRsX21heF90aWQgPQo+PiArICAgICAgICAodW5zaWduZWQgaW50ICopIG1hbGxvYyhz aXplb2YodW5zaWduZWQgaW50KSAqCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh2cHNfbnVtX3B0bHNfbWludXMxICsgMSkpOwo+PiArICAgIGZvciAoaW50IGkgPSAwOyBpIDw9 IHZwc19udW1fcHRsc19taW51czE7IGkrKykgewo+PiArICAgICAgICBpZiAoaSA+IDApCj4+ICsg ICAgICAgICAgICB2cHNfcHRfcHJlc2VudF9mbGFnW2ldID0gZ2V0X2JpdHMxKGdiKTsKPj4gKyAg ICAgICAgaWYgKCF2cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWcpCj4+ICsgICAg ICAgICAgICB2cHNfcHRsX21heF90aWRbaV0gPSBnZXRfYml0cyhnYiwgMyk7Cj4+ICsgICAgfQo+ PiArCj4+ICsgICAgd2hpbGUgKGdiLT5pbmRleCAlIDggIT0gMCkKPj4gKyAgICAgICAgc2tpcF9i aXRzMShnYik7Cj4+ICsKPj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSB2cHNfbnVtX3B0bHNf bWludXMxOyBpKyspIHsKPj4gKyAgICAgICAgdnZjY19wYXJzZV9wdGwoZ2IsIHZ2Y2MsIHZwc19w dF9wcmVzZW50X2ZsYWdbaV0sIHZwc19wdGxfbWF4X3RpZFtpXSk7Cj4+ICsgICAgfQo+PiArCj4+ ICsgICAgZnJlZSh2cHNfcHRfcHJlc2VudF9mbGFnKTsKPj4gKyAgICBmcmVlKHZwc19wdGxfbWF4 X3RpZCk7Cj4+ICsKPj4gKyAgICAvKiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMg cG9pbnQgKi8KPj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB2dmNj X3BhcnNlX3NwcyhHZXRCaXRDb250ZXh0ICpnYiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCj4+ICt7Cj4+ICsgICAgdW5z aWduZWQgaW50IHNwc19tYXhfc3ViX2xheWVyc19taW51czEsIGxvZzJfY3R1X3NpemVfbWludXM1 Owo+PiArICAgIC8vdW5zaWduZWQgaW50IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cywgbnVt X2RlbHRhX3BvY3NbVlZDX01BWF9SRUZfUElDX0xJU1RTXTsKPj4gKyAgICAvL3Vuc2lnbmVkIGlu dCBzcHNfY2hyb21hX2Zvcm1hdF9pZGM7Cj4+ICsgICAgdW5zaWduZWQgaW50IHNwc19zdWJwaWNf c2FtZV9zaXplX2ZsYWcsIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZSwKPj4gKyAg ICAgICAgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGU7Cj4+ICsgICAgdW5zaWduZWQg aW50IHNwc19pbmRlcGVuZGFudF9zdWJwaWNzX2ZsYWc7Cj4+ICsgICAgdW5zaWduZWQgaW50IGZs YWc7Cj4+ICsKPj4gKyAgICBza2lwX2JpdHMoZ2IsIDgpOyAgLy8gc3BzX3NlcV9wYXJhbWV0ZXJf c2V0X2lkICYmIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkCj4+ICsgICAgc3BzX21heF9zdWJf bGF5ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKPj4gKwo+PiArICAgIC8qCj4+ICsgICAg ICogbnVtVGVtcG9yYWxMYXllcnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHN0 cmVhbSB0byB3aGljaCB0aGlzCj4+ICsgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBwbGll cyBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlIGFuZCB0aGUgY29udGFpbmVkCj4+ICsgICAgICogbnVt YmVyIG9mIHRlbXBvcmFsIGxheWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWIt bGF5ZXIgb3IKPj4gKyAgICAgKiBzdWItbGF5ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVh bCB0byBudW1UZW1wb3JhbExheWVycy4gVmFsdWUgMQo+PiArICAgICAqIGluZGljYXRlcyB0aGF0 IHRoZSBzdHJlYW0gaXMgbm90IHRlbXBvcmFsbHkgc2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVz Cj4+ICsgICAgICogdGhhdCBpdCBpcyB1bmtub3duIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1w b3JhbGx5IHNjYWxhYmxlLgo+PiArICAgICAqLwo+PiArICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMg PSBGRk1BWCh2dmNjLT5udW1fc3VibGF5ZXJzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxICsgMSk7Cj4+ICsKPj4gKyAgICB2dmNj LT5jaHJvbWFfZm9ybWF0X2lkYyA9IGdldF9iaXRzKGdiLCAyKTsKPj4gKyAgICBsb2cyX2N0dV9z aXplX21pbnVzNSA9IGdldF9iaXRzKGdiLCAyKTsKPj4gKwo+PiArICAgIGlmIChnZXRfYml0czEo Z2IpKSAgICAgICAgICAvL3Nwc19wdGxfZHBiX2hyZF9wYXJhbXNfcHJlc2VudF9mbGFnCj4+ICsg ICAgICAgIHZ2Y2NfcGFyc2VfcHRsKGdiLCB2dmNjLCAxLCBzcHNfbWF4X3N1Yl9sYXllcnNfbWlu dXMxKTsKPj4gKwo+PiArICAgIGZsYWcgPSBnZXRfYml0cyhnYiwgMSk7ICAgICAvL3NraXBfYml0 czEoZ2IpOyAvL3Nwc19nZHJfZW5hYmxlZF9mbGFnCj4+ICsgICAgZmxhZyA9IGdldF9iaXRzKGdi LCAxKTsgICAgIC8vc3BzX3JlZl9waWNfcmVzYW1wbGluZ19lbmFibGVkX2ZsYWcKPj4gKyAgICBp ZiAoZmxhZykgeyAgICAgICAgICAgICAgICAgLy9zcHNfcmVmX3BpY19yZXNhbXBsaW5nX2VuYWJs ZWRfZmxhZwo+PiArICAgICAgICBmbGFnID0gZ2V0X2JpdHMoZ2IsIDEpOyAvL3NraXBfYml0czEo Z2IpOyAvL3Nwc19yZXNfY2hhbmdlX2luX2NsdnNfYWxsb3dlZF9mbGFnCj4+ICsgICAgfQo+PiAr Cj4+ICsgICAgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUgPSBnZXRfdWVfZ29sb21i X2xvbmcoZ2IpOwo+PiArICAgIHZ2Y2MtPm1heF9waWN0dXJlX3dpZHRoID0KPj4gKyAgICAgICAg RkZNQVgodnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgsIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFf c2FtcGxlKTsKPj4gKyAgICBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUgPSBnZXRf dWVfZ29sb21iX2xvbmcoZ2IpOwo+PiArICAgIHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdodCA9Cj4+ ICsgICAgICAgIEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdodCwgc3BzX3BpY19oZWlnaHRf bWF4X2luX2x1bWFfc2FtcGxlKTsKPj4gKwo+PiArICAgIGlmIChnZXRfYml0czEoZ2IpKSB7Cj4+ ICsgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19jb25mX3dpbl9sZWZ0X29m ZnNldAo+PiArICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5f cmlnaHRfb2Zmc2V0Cj4+ICsgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19j b25mX3dpbl90b3Bfb2Zmc2V0Cj4+ICsgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8v IHNwc19jb25mX3dpbl9ib3R0b21fb2Zmc2V0Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKGdl dF9iaXRzMShnYikpIHsgICAgICAgIC8vIHNwc19zdWJwaWNfaW5mb19wcmVzZW50X2ZsYWcKPj4g KyAgICAgICAgdW5zaWduZWQgaW50IHNwc19udW1fc3VicGljc19taW51czEgPSBnZXRfdWVfZ29s b21iX2xvbmcoZ2IpOwo+PiArICAgICAgICBpZiAoc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDAp IHsgICAgICAgLy8gc3BzX251bV9zdWJwaWNzX21pbnVzMQo+PiArICAgICAgICAgICAgc3BzX2lu ZGVwZW5kYW50X3N1YnBpY3NfZmxhZyA9IGdldF9iaXRzMShnYik7Cj4+ICsgICAgICAgICAgICBz cHNfc3VicGljX3NhbWVfc2l6ZV9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKPj4gKyAgICAgICAgfQo+ PiArICAgICAgICBmb3IgKGludCBpID0gMDsKPj4gKyAgICAgICAgICAgICBzcHNfbnVtX3N1YnBp Y3NfbWludXMxID4gMCAmJiBpIDw9IHNwc19udW1fc3VicGljc19taW51czE7IGkrKykgewo+PiAr ICAgICAgICAgICAgaWYgKCFzcHNfc3VicGljX3NhbWVfc2l6ZV9mbGFnIHx8IGkgPT0gMCkgewo+ PiArICAgICAgICAgICAgICAgIGludCBsZW4gPSBGRk1JTihsb2cyX2N0dV9zaXplX21pbnVzNSAr IDUsIDE2KTsKPj4gKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3BzX3BpY193aWR0aF9t YXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCj4+ICsgICAgICAgICAgICAgICAgICAgIHNraXBfYml0 cyhnYiwgbGVuKTsKPj4gKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3BzX3BpY19oZWln aHRfbWF4X2luX2x1bWFfc2FtcGxlID4gMTI4KQo+PiArICAgICAgICAgICAgICAgICAgICBza2lw X2JpdHMoZ2IsIGxlbik7Cj4+ICsgICAgICAgICAgICAgICAgaWYgKGkgPCBzcHNfbnVtX3N1YnBp Y3NfbWludXMxCj4+ICsgICAgICAgICAgICAgICAgICAgICYmIHNwc19waWNfd2lkdGhfbWF4X2lu X2x1bWFfc2FtcGxlID4gMTI4KQo+PiArICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2Is IGxlbik7Cj4+ICsgICAgICAgICAgICAgICAgaWYgKGkgPCBzcHNfbnVtX3N1YnBpY3NfbWludXMx Cj4+ICsgICAgICAgICAgICAgICAgICAgICYmIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3Nh bXBsZSA+IDEyOCkKPj4gKyAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBsZW4pOwo+ PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgaWYgKCFzcHNfaW5kZXBlbmRhbnRfc3Vi cGljc19mbGFnKSB7Cj4+ICsgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAyKTsgICAgICAg Ly8gc3BzX3N1YnBpY190cmVhdGVkX2FzX3BpY19mbGFnICYmIHNwc19sb29wX2ZpbHRlcl9hY3Jv c3Nfc3VicGljX2VuYWJsZWRfZmxhZwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICB9Cj4+ ICsgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19zdWJwaWNfaWRfbGVuX21p bnVzMQo+PiArICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAgICAvLyBzcHNfc3VicGljX2lk X21hcHBpbmdfZXhwbGljaXRseV9zaWduYWxsZWRfZmxhZwo+PiArICAgICAgICAgICAgaWYgKGdl dF9iaXRzMShnYikpICAvLyBzcHNfc3VicGljX2lkX21hcHBpbmdfcHJlc2VudF9mbGFnCj4+ICsg ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3BzX251bV9zdWJwaWNzX21pbnVz MTsgaSsrKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOyAgICAgLy8g c3BzX3N1YnBpY19pZFtpXQo+PiArICAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgfQo+PiAr ICAgIH0KPj4gKyAgICB2dmNjLT5iaXRfZGVwdGhfbWludXM4ID0gZ2V0X3VlX2dvbG9tYl9sb25n KGdiKTsKPj4gKwo+PiArICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBw b2ludCAqLwo+PiArICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHZ2Y2Nf cGFyc2VfcHBzKEdldEJpdENvbnRleHQgKmdiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKPj4gK3sKPj4gKwo+PiArICAg IC8vIE5vdGhpbmcgb2YgaW1wb3J0YW5jZSB0byBwYXJzZSBpbiBQUFMKPj4gKyAgICAvKiBub3Ro aW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMgcG9pbnQgKi8KPj4gKyAgICByZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgbmFsX3VuaXRfcGFyc2VfaGVhZGVyKEdldEJpdENv bnRleHQgKmdiLCB1aW50OF90ICpuYWxfdHlwZSkKPj4gK3sKPj4gKyAgICAvKgo+PiArICAgICAq IGZvcmJpZGRlbl96ZXJvX2JpdCAgICB1KDEpCj4+ICsgICAgICogbnVoX3Jlc2VydmVkX3plcm9f Yml0IHUoMSkKPj4gKyAgICAgKiBudWhfbGF5ZXJfaWQgICAgICAgICAgdSg2KQo+PiArICAgICAq Lwo+PiArICAgIHNraXBfYml0cyhnYiwgOCk7Cj4+ICsgICAgKm5hbF90eXBlID0gZ2V0X2JpdHMo Z2IsIDUpOwo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBudWhfdGVtcG9yYWxfaWRfcGx1czEg dSgzKQo+PiArICAgICAqLwo+PiArICAgIHNraXBfYml0cyhnYiwgMyk7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgdnZjY19hcnJheV9hZGRfbmFsX3VuaXQodWludDhfdCAqbmFsX2J1ZiwgdWlu dDMyX3QgbmFsX3NpemUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgbmFsX3R5cGUsIGludCBwc19hcnJheV9jb21wbGV0ZW5lc3MsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2 dmNjKQo+PiArewo+PiArICAgIGludCByZXQ7Cj4+ICsgICAgdWludDhfdCBpbmRleDsKPj4gKyAg ICB1aW50MTZfdCBudW1fbmFsdXM7Cj4+ICsgICAgVlZDQ05BTFVuaXRBcnJheSAqYXJyYXk7Cj4+ ICsKPj4gKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBp bmRleCsrKQo+PiArICAgICAgICBpZiAodnZjYy0+YXJyYXlbaW5kZXhdLk5BTF91bml0X3R5cGUg PT0gbmFsX3R5cGUpCj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKwo+PiArICAgIGlmIChpbmRl eCA+PSB2dmNjLT5udW1fb2ZfYXJyYXlzKSB7Cj4+ICsgICAgICAgIHVpbnQ4X3QgaTsKPj4gKwo+ PiArICAgICAgICByZXQgPQo+PiArICAgICAgICAgICAgYXZfcmVhbGxvY3BfYXJyYXkoJnZ2Y2Mt PmFycmF5LCBpbmRleCArIDEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YoVlZDQ05BTFVuaXRBcnJheSkpOwo+PiArICAgICAgICBpZiAocmV0IDwgMCkKPj4gKyAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4+ICsKPj4gKyAgICAgICAgZm9yIChpID0gdnZjYy0+bnVtX29m X2FycmF5czsgaSA8PSBpbmRleDsgaSsrKQo+PiArICAgICAgICAgICAgbWVtc2V0KCZ2dmNjLT5h cnJheVtpXSwgMCwgc2l6ZW9mKFZWQ0NOQUxVbml0QXJyYXkpKTsKPj4gKyAgICAgICAgdnZjYy0+ bnVtX29mX2FycmF5cyA9IGluZGV4ICsgMTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBhcnJheSA9 ICZ2dmNjLT5hcnJheVtpbmRleF07Cj4+ICsgICAgbnVtX25hbHVzID0gYXJyYXktPm51bV9uYWx1 czsKPj4gKwo+PiArICAgIHJldCA9IGF2X3JlYWxsb2NwX2FycmF5KCZhcnJheS0+bmFsX3VuaXQs IG51bV9uYWx1cyArIDEsIHNpemVvZih1aW50OF90ICopKTsKPj4gKyAgICBpZiAocmV0IDwgMCkK Pj4gKyAgICAgICAgcmV0dXJuIHJldDsKPj4gKwo+PiArICAgIHJldCA9Cj4+ICsgICAgICAgIGF2 X3JlYWxsb2NwX2FycmF5KCZhcnJheS0+bmFsX3VuaXRfbGVuZ3RoLCBudW1fbmFsdXMgKyAxLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludDE2X3QpKTsKPj4gKyAgICBp ZiAocmV0IDwgMCkKPj4gKyAgICAgICAgcmV0dXJuIHJldDsKPj4gKwo+PiArICAgIGFycmF5LT5u YWxfdW5pdFtudW1fbmFsdXNdID0gbmFsX2J1ZjsKPj4gKyAgICBhcnJheS0+bmFsX3VuaXRfbGVu Z3RoW251bV9uYWx1c10gPSBuYWxfc2l6ZTsKPj4gKyAgICBhcnJheS0+TkFMX3VuaXRfdHlwZSA9 IG5hbF90eXBlOwo+PiArICAgIGFycmF5LT5udW1fbmFsdXMrKzsKPj4gKwo+PiArICAgIC8qCj4+ ICsgICAgKiBXaGVuIHRoZSBzYW1wbGUgZW50cnkgbmFtZSBpcyAndnZjMScsIHRoZSBmb2xsb3dp bmcgYXBwbGllczoKPj4gKyAgICAqIOKAoiBUaGUgdmFsdWUgb2YgYXJyYXlfY29tcGxldGVuZXNz IHNoYWxsIGJlIGVxdWFsIHRvIDEgZm9yIGFycmF5cyBvZiBTUFMsCj4+ICsgICAgKiAgIGFuZCBQ UFMgTkFMIHVuaXRzLgo+PiArICAgICog4oCiIElmIGEgVlZDIGJpdHN0cmVhbSBpbmNsdWRlcyBE Q0kgTkFMIHVuaXQocyksIHRoZSB2YWx1ZSBvZgo+PiArICAgICogICBhcnJheV9jb21wbGV0ZW5l c3Mgc2hhbGwgYmUgZXF1YWwgdG8gMSBmb3IgdGhlIGFycmF5IG9mIERDSSB1bml0cy4KPj4gKyAg ICAqICAgT3RoZXJ3aXNlLCBOQUxfdW5pdF90eXBlIHNoYWxsIG5vdCBpbmRpY2F0ZSBEQ0kgTkFM IHVuaXRzLgo+PiArICAgICog4oCiIElmIGEgVlZDIGJpdHN0cmVhbSBpbmNsdWRlcyBWUFMgTkFM IHVuaXQocyksIHRoZSB2YWx1ZSBvZgo+PiArICAgICogICBhcnJheV9jb21wbGV0ZW5lc3Mgc2hh bGwgYmUgZXF1YWwgdG8gMSBmb3IgdGhlIGFycmF5IG9mIFZQUyBOQUwgdW5pdHMuCj4+ICsgICAg KiAgIE90aGVyd2lzZSwgTkFMX3VuaXRfdHlwZSBzaGFsbCBub3QgaW5kaWNhdGUgVlBTIE5BTCB1 bml0cy4KPj4gKyAgICAqIFdoZW4gdGhlIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVzcyBpcyBl cXVhbCB0byAxIGZvciBhbiBhcnJheSBvZiBhCj4+ICsgICAgKiBwYXJ0aWN1bGFyIE5BTF91bml0 X3R5cGUgdmFsdWUsIE5BTCB1bml0cyBvZiB0aGF0IE5BTF91bml0X3R5cGUgdmFsdWUKPj4gKyAg ICAqIGNhbm5vdCBiZSB1cGRhdGVkIHdpdGhvdXQgY2F1c2luZyBhIGRpZmZlcmVudCBzYW1wbGUg ZW50cnkgdG8gYmUgdXNlZC4KPj4gKyAgICAqIFdoZW4gdGhlIHNhbXBsZSBlbnRyeSBuYW1lIGlz ICd2dmkxJywgdGhlIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVzcwo+PiArICAgICogb2YgYXQg bGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgYXJyYXlzIHNoYWxsIGJlIGVxdWFsIHRvIDA6Cj4+ ICsgICAgICDigKIgVGhlIGFycmF5IG9mIERDSSBOQUwgdW5pdHMsIGlmIHByZXNlbnQuCj4+ICsg ICAgICDigKIgVGhlIGFycmF5IG9mIFZQUyBOQUwgdW5pdHMsIGlmIHByZXNlbnQuCj4+ICsgICAg ICDigKIgVGhlIGFycmF5IG9mIFNQUyBOQUwgdW5pdHMKPj4gKyAgICAgIOKAoiBUaGUgYXJyYXkg b2YgUFBTIE5BTCB1bml0cy4KPj4gKyAgICAqLwo+PiArICAgIGlmIChuYWxfdHlwZSA9PSBWVkNf VlBTX05VVCB8fCBuYWxfdHlwZSA9PSBWVkNfU1BTX05VVCB8fAo+PiArICAgICAgICBuYWxfdHlw ZSA9PSBWVkNfUFBTX05VVCB8fCBuYWxfdHlwZSA9PSBWVkNfRENJX05VVCApCj4+ICsgICAgICAg IGFycmF5LT5hcnJheV9jb21wbGV0ZW5lc3MgPSBwc19hcnJheV9jb21wbGV0ZW5lc3M7Cj4+ICsK Pj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB2dmNjX2FkZF9uYWxf dW5pdCh1aW50OF90ICpuYWxfYnVmLCB1aW50MzJfdCBuYWxfc2l6ZSwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcywKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2Mp Cj4+ICt7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ICsgICAgR2V0Qml0Q29udGV4dCBnYmM7Cj4+ ICsgICAgdWludDhfdCBuYWxfdHlwZTsKPj4gKyAgICB1aW50OF90ICpyYnNwX2J1ZjsKPj4gKyAg ICB1aW50MzJfdCByYnNwX3NpemU7Cj4+ICsKPj4gKyAgICByYnNwX2J1ZiA9IGZmX25hbF91bml0 X2V4dHJhY3RfcmJzcChuYWxfYnVmLCBuYWxfc2l6ZSwgJnJic3Bfc2l6ZSwgMik7Cj4+ICsgICAg aWYgKCFyYnNwX2J1Zikgewo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4+ICsg ICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldCA9IGluaXRfZ2V0X2Jp dHM4KCZnYmMsIHJic3BfYnVmLCByYnNwX3NpemUpOwo+PiArICAgIGlmIChyZXQgPCAwKQo+PiAr ICAgICAgICBnb3RvIGVuZDsKPj4gKwo+PiArICAgIG5hbF91bml0X3BhcnNlX2hlYWRlcigmZ2Jj LCAmbmFsX3R5cGUpOwo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBOb3RlOiBvbmx5ICdkZWNs YXJhdGl2ZScgU0VJIG1lc3NhZ2VzIGFyZSBhbGxvd2VkIGluCj4+ICsgICAgICogdnZjYy4gUGVy aGFwcyB0aGUgU0VJIHBsYXlsb2FkIHR5cGUgc2hvdWxkIGJlIGNoZWNrZWQKPj4gKyAgICAgKiBh bmQgbm9uLWRlY2xhcmF0aXZlIFNFSSBtZXNzYWdlcyBkaXNjYXJkZWQ/Cj4+ICsgICAgICovCj4+ ICsgICAgc3dpdGNoIChuYWxfdHlwZSkgewo+PiArICAgIGNhc2UgVlZDX09QSV9OVVQ6Cj4+ICsg ICAgY2FzZSBWVkNfVlBTX05VVDoKPj4gKyAgICBjYXNlIFZWQ19TUFNfTlVUOgo+PiArICAgIGNh c2UgVlZDX1BQU19OVVQ6Cj4+ICsgICAgY2FzZSBWVkNfUFJFRklYX1NFSV9OVVQ6Cj4+ICsgICAg Y2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6Cj4+ICsgICAgICAgIHJldCA9IHZ2Y2NfYXJyYXlfYWRk X25hbF91bml0KG5hbF9idWYsIG5hbF9zaXplLCBuYWxfdHlwZSwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHNfYXJyYXlfY29tcGxldGVuZXNzLCB2dmNjKTsKPj4g KyAgICAgICAgaWYgKHJldCA8IDApCj4+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAg ICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX1ZQU19OVVQpCj4+ICsgICAgICAgICAgICByZXQg PSB2dmNjX3BhcnNlX3ZwcygmZ2JjLCB2dmNjKTsKPj4gKyAgICAgICAgZWxzZSBpZiAobmFsX3R5 cGUgPT0gVlZDX1NQU19OVVQpCj4+ICsgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3Nwcygm Z2JjLCB2dmNjKTsKPj4gKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX1BQU19OVVQp Cj4+ICsgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3BwcygmZ2JjLCB2dmNjKTsKPj4gKyAg ICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX09QSV9OVVQpIHsKPj4gKyAgICAgICAgICAg IC8vIG5vdCB5ZXQgc3VwcG9ydGVkCj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgaWYgKHJldCA8 IDApCj4+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsgICAg ZGVmYXVsdDoKPj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKPj4gKyAgICAg ICAgZ290byBlbmQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGVuZDoKPj4gKyAgICBhdl9mcmVlKHJi c3BfYnVmKTsKPj4gKyAgICByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB2 dmNjX2luaXQoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCj4+ICt7Cj4+ICsg ICAgbWVtc2V0KHZ2Y2MsIDAsIHNpemVvZihWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCkp Owo+PiArICAgIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSA9IDM7ICAgICAgIC8vIDQgYnl0ZXMK Pj4gKwo+PiArICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0gMTsKPj4g Kwo+PiArICAgIHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcgPSAxOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCB2dmNjX2Nsb3NlKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQo+ PiArewo+PiArICAgIHVpbnQ4X3QgaTsKPj4gKwo+PiArICAgIGZvciAoaSA9IDA7IGkgPCB2dmNj LT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKPj4gKyAgICAgICAgdnZjYy0+YXJyYXlbaV0ubnVtX25h bHVzID0gMDsKPj4gKyAgICAgICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91bml0KTsK Pj4gKyAgICAgICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aCk7Cj4+ ICsgICAgfQo+PiArCj4+ICsgICAgZnJlZSh2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3By ZXNlbnRfZmxhZyk7Cj4+ICsgICAgZnJlZSh2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjKTsK Pj4gKyAgICBmcmVlKHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyk7Cj4+ICsKPj4g KyAgICB2dmNjLT5udW1fb2ZfYXJyYXlzID0gMDsKPj4gKyAgICBhdl9mcmVlcCgmdnZjYy0+YXJy YXkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHZ2Y2Nfd3JpdGUoQVZJT0NvbnRleHQgKnBi LCBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKPj4gK3sKPj4gKyAgICB1aW50 OF90IGk7Cj4+ICsgICAgdWludDE2X3QgaiwgdnBzX2NvdW50ID0gMCwgc3BzX2NvdW50ID0gMCwg cHBzX2NvdW50ID0gMDsKPj4gKyAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwo+PiArICAg IC8qCj4+ICsgICAgICogSXQncyB1bmNsZWFyIGhvdyB0byBwcm9wZXJseSBjb21wdXRlIHRoZXNl IGZpZWxkcywgc28KPj4gKyAgICAgKiBsZXQncyBhbHdheXMgc2V0IHRoZW0gdG8gdmFsdWVzIG1l YW5pbmcgJ3Vuc3BlY2lmaWVkJy4KPj4gKyAgICAgKi8KPj4gKyAgICB2dmNjLT5hdmdfZnJhbWVf cmF0ZSA9IDA7Cj4+ICsgICAgdnZjYy0+Y29uc3RhbnRfZnJhbWVfcmF0ZSA9IDE7Cj4+ICsKPj4g KyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAgICAgICAibGVuZ3RoU2l6 ZU1pbnVzT25lOiAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCj4+ICsgICAgICAgICAg IHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSk7Cj4+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKPj4gKyAgICAgICAgICAgInB0bF9wcmVzZW50X2ZsYWc6ICAgICAgICAgICAgICAgICAg ICAlIiBQUkl1OCAiXG4iLAo+PiArICAgICAgICAgICB2dmNjLT5wdGxfcHJlc2VudF9mbGFnKTsK Pj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAgICAgICAib2xzX2lk eDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLCB2dmNjLT5vbHNf aWR4KTsKPj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAgICAgICAi bnVtX3N1YmxheWVyczogICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCj4+ICsg ICAgICAgICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMpOwo+PiArICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfVFJBQ0UsCj4+ICsgICAgICAgICAgICJjb25zdGFudF9mcmFtZV9yYXRlOiAgICAgICAgICAg ICAgICAgJSIgUFJJdTggIlxuIiwKPj4gKyAgICAgICAgICAgdnZjYy0+Y29uc3RhbnRfZnJhbWVf cmF0ZSk7Cj4+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKPj4gKyAgICAgICAgICAg ImNocm9tYV9mb3JtYXRfaWRjOiAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAo+PiAr ICAgICAgICAgICB2dmNjLT5jaHJvbWFfZm9ybWF0X2lkYyk7Cj4+ICsKPj4gKyAgICBhdl9sb2co TlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAgICAgICAiYml0X2RlcHRoX21pbnVzODogICAg ICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCj4+ICsgICAgICAgICAgIHZ2Y2MtPmJpdF9k ZXB0aF9taW51czgpOwo+PiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4+ICsgICAg ICAgICAgICJudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvOiAgICAgICAgICAgJSIgUFJJdTggIlxu IiwKPj4gKyAgICAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOwo+ PiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4+ICsgICAgICAgICAgICJnZW5lcmFs X3Byb2ZpbGVfaWRjOiAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKPj4gKyAgICAgICAg ICAgdnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMpOwo+PiArICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCj4+ICsgICAgICAgICAgICJnZW5lcmFsX3RpZXJfZmxhZzogICAgICAgICAg ICAgICAgICAgJSIgUFJJdTggIlxuIiwKPj4gKyAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxf dGllcl9mbGFnKTsKPj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAg ICAgICAiZ2VuZXJhbF9sZXZlbF9pZGM6ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIs Cj4+ICsgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7Cj4+ICsgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKPj4gKyAgICAgICAgICAgInB0bF9mcmFtZV9vbmx5X2Nv bnN0cmFpbnRfZmxhZzogICAgICAlIiBQUkl1OCAiXG4iLAo+PiArICAgICAgICAgICB2dmNjLT5w dGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnKTsKPj4gKyAgICBhdl9sb2coTlVMTCwg QVZfTE9HX1RSQUNFLAo+PiArICAgICAgICAgICAicHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFn OiAgICAgICAgICUiIFBSSXU4ICJcbiIsCj4+ICsgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbXVs dGlsYXllcl9lbmFibGVkX2ZsYWcpOwo+PiArICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5wdGwu bnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzsgaSsrKSB7Cj4+ICsgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfVFJBQ0UsCj4+ICsgICAgICAgICAgICAgICAiZ2VuZXJhbF9jb25zdHJhaW50X2lu Zm9bJWRdOiAgICAgICAgICAlIiBQUkl1OCAiXG4iLCBpLAo+PiArICAgICAgICAgICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvW2ldKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAg ICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX3N1YmxheWVycyAtIDE7IGkrKykgewo+PiArICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAgICAgICAgICAgInB0bF9z dWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbJSIgUFJJdTggIl06ICAlIiBQUkl1OCAiXG4iLCBp LAo+PiArICAgICAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50 X2ZsYWdbaV0pOwo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAg ICAgICAgICAgICAgInN1YmxheWVyX2xldmVsX2lkY1slIiBQUkl1OCAiXTogJSIgUFJJdTggIlxu IiwgaSwKPj4gKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0p Owo+PiArICAgIH0KPj4gKwo+PiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4+ICsg ICAgICAgICAgICJudW1fc3ViX3Byb2ZpbGVzOiAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTgg IlxuIiwKPj4gKyAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKPj4g Kwo+PiArICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7 IGkrKykgewo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAg ICAgICAgICAgImdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjWyUiIFBSSXU4ICJdOiAgICAgICAgICUi IFBSSXgzMiAiXG4iLCBpLAo+PiArICAgICAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfc3Vi X3Byb2ZpbGVfaWRjW2ldKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBhdl9sb2coTlVMTCwgQVZf TE9HX1RSQUNFLAo+PiArICAgICAgICAgICAibWF4X3BpY3R1cmVfd2lkdGg6ICAgICAgICAgICAg ICAgICAgICUiIFBSSXUxNiAiXG4iLAo+PiArICAgICAgICAgICB2dmNjLT5tYXhfcGljdHVyZV93 aWR0aCk7Cj4+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKPj4gKyAgICAgICAgICAg Im1heF9waWN0dXJlX2hlaWdodDogICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwKPj4g KyAgICAgICAgICAgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0KTsKPj4gKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAgICAgICAiYXZnX2ZyYW1lX3JhdGU6ICAgICAgICAg ICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLAo+PiArICAgICAgICAgICB2dmNjLT5hdmdfZnJh bWVfcmF0ZSk7Cj4+ICsKPj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAg ICAgICAgICAibnVtX29mX2FycmF5czogICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJc biIsCj4+ICsgICAgICAgICAgIHZ2Y2MtPm51bV9vZl9hcnJheXMpOwo+PiArICAgIGZvciAoaSA9 IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKPj4gKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwKPj4gKyAgICAgICAgICAgICAgICJhcnJheV9jb21wbGV0ZW5lc3Nb JSIgUFJJdTggIl06ICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwgaSwKPj4gKyAgICAgICAg ICAgICAgIHZ2Y2MtPmFycmF5W2ldLmFycmF5X2NvbXBsZXRlbmVzcyk7Cj4+ICsgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4+ICsgICAgICAgICAgICAgICAiTkFMX3VuaXRfdHlw ZVslIiBQUkl1OCAiXTogICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsIGksCj4+ICsg ICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKTsKPj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKPj4gKyAgICAgICAgICAgICAgICJudW1fbmFsdXNb JSIgUFJJdTggIl06ICAgICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsIGksCj4+ ICsgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXMpOwo+PiArICAgICAgICBm b3IgKGogPSAwOyBqIDwgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOyBqKyspCj4+ICsgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+PiArICAgICAgICAgICAgICAgICAgICJu YWxfdW5pdF9sZW5ndGhbJSIgUFJJdTggIl1bJSIgUFJJdTE2ICJdOiAgICAgICAgICAgICAgICUi Cj4+ICsgICAgICAgICAgICAgICAgICAgUFJJdTE2ICJcbiIsIGksIGosIHZ2Y2MtPmFycmF5W2ld Lm5hbF91bml0X2xlbmd0aFtqXSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAg KiBXZSBuZWVkIGF0IGxlYXN0IG9uZSBvZiBlYWNoOiBWUFMgYW5kIFNQUy4KPj4gKyAgICAgKi8K Pj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKQo+PiArICAg ICAgICBzd2l0Y2ggKHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUpIHsKPj4gKyAgICAgICAg Y2FzZSBWVkNfVlBTX05VVDoKPj4gKyAgICAgICAgICAgIHZwc19jb3VudCArPSB2dmNjLT5hcnJh eVtpXS5udW1fbmFsdXM7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgY2FzZSBW VkNfU1BTX05VVDoKPj4gKyAgICAgICAgICAgIHNwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5u dW1fbmFsdXM7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgY2FzZSBWVkNfUFBT X05VVDoKPj4gKyAgICAgICAgICAgIHBwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1fbmFs dXM7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgZGVmYXVsdDoKPj4gKyAgICAg ICAgICAgIGJyZWFrOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICBpZiAoIXNwc19jb3VudCB8 fCBzcHNfY291bnQgPiBWVkNfTUFYX1NQU19DT1VOVCkKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4+ICsKPj4gKyAgICAvKiBiaXQoNSkgcmVzZXJ2ZWQgPSDigJgxMTEx MeKAmWI7Cj4+ICsgICAgICAgdW5zaWduZWQgaW50ICgyKSBMZW5ndGhTaXplTWludXNPbmUKPj4g KyAgICAgICB1bnNpZ25lZCBpbnQgKDEpIHB0bF9wcmVzZW50X2ZsYWcgKi8KPj4gKyAgICBhdmlv X3c4KHBiLCB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUgPDwgMSB8IHZ2Y2MtPnB0bF9wcmVzZW50 X2ZsYWcgfCAweGY4KTsKPj4gKwo+PiArICAgIGlmICh2dmNjLT5wdGxfcHJlc2VudF9mbGFnKSB7 Cj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIHVuc2lnbmVkIGludCg5KSBvbHNfaWR4Owo+ PiArICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMykgbnVtX3N1YmxheWVyczsKPj4gKyAgICAgICAg ICogdW5zaWduZWQgaW50KDIpIGNvbnN0YW50X2ZyYW1lX3JhdGU7Cj4+ICsgICAgICAgICAqIHVu c2lnbmVkIGludCgyKSBjaHJvbWFfZm9ybWF0X2lkYzsgICAgICovCj4+ICsgICAgICAgIGF2aW9f d2IxNihwYiwKPj4gKyAgICAgICAgICAgICAgICAgIHZ2Y2MtPm9sc19pZHggPDwgNyB8IHZ2Y2Mt Pm51bV9zdWJsYXllcnMgPDwgNCB8IHZ2Y2MtPgo+PiArICAgICAgICAgICAgICAgICAgY29uc3Rh bnRfZnJhbWVfcmF0ZSA8PCAyIHwgdnZjYy0+Y2hyb21hX2Zvcm1hdF9pZGMpOwo+PiArCj4+ICsg ICAgICAgIC8qIHVuc2lnbmVkIGludCgzKSBiaXRfZGVwdGhfbWludXM4Owo+PiArICAgICAgICAg ICBiaXQoNSkgcmVzZXJ2ZWQgPSDigJgxMTExMeKAmWI7ICovCj4+ICsgICAgICAgIGF2aW9fdzgo cGIsIHZ2Y2MtPmJpdF9kZXB0aF9taW51czggPDwgNSB8IDB4MWYpOwo+PiArCj4+ICsgICAgICAg IC8vVlZDUFRMUmVjb3JkCj4+ICsKPj4gKyAgICAgICAgLyogYml0KDIpIHJlc2VydmVkID0g4oCY MDDigJliOwo+PiArICAgICAgICAgICB1bnNpZ25lZCBpbnQgKDYpIG51bV9ieXRlc19jb25zdHJh aW50X2luZm8gKi8KPj4gKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLm51bV9ieXRlc19j b25zdHJhaW50X2luZm8gJiAweDNmKTsKPj4gKwo+PiArICAgICAgICAvKiB1bnNpZ25lZCBpbnQg KDcpIGdlbmVyYWxfcHJvZmlsZV9pZGMKPj4gKyAgICAgICAgICAgdW5zaWduZWQgaW50ICgxKSBn ZW5lcmFsX3RpZXJfZmxhZyAqLwo+PiArICAgICAgICBhdmlvX3c4KHBiLAo+PiArICAgICAgICAg ICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjIDw8IDEgfCB2dmNjLT5wdGwuZ2Vu ZXJhbF90aWVyX2ZsYWcpOwo+PiArCj4+ICsgICAgICAgIC8qIHVuc2lnbmVkIGludCAoOCkgZ2Vu ZXJhbF9sZXZlbF9pZGMgKi8KPj4gKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLmdlbmVy YWxfbGV2ZWxfaWRjKTsKPj4gKwo+PiArICAgICAgICAvKgo+PiArICAgICAgICAgKiB1bnNpZ25l ZCBpbnQgKDEpIHB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZwo+PiArICAgICAgICAgKiB1 bnNpZ25lZCBpbnQgKDEpIHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZwo+PiArICAgICAgICAg KiB1bnNpZ25lZCBpbnQgKDgqbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAtMikgZ2VuZXJhbF9j b25zdHJhaW50X2luZm8gKi8KPj4gKyAgICAgICAgYnVmID0KPj4gKyAgICAgICAgICAgICh1bnNp Z25lZCBjaGFyICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhcikgKgo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWlu dF9pbmZvKTsKPj4gKyAgICAgICAgKmJ1ZiA9IHZ2Y2MtPnB0bC5wdGxfZnJhbWVfb25seV9jb25z dHJhaW50X2ZsYWcgPDwgdnZjYy0+cHRsLgo+PiArICAgICAgICAgICAgbnVtX2J5dGVzX2NvbnN0 cmFpbnRfaW5mbyAqIDggLSAxIHwgdnZjYy0+cHRsLgo+PiArICAgICAgICAgICAgcHRsX211bHRp bGF5ZXJfZW5hYmxlZF9mbGFnIDw8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZv ICoKPj4gKyAgICAgICAgICAgIDggLSAyIHwgKnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRf aW5mbyA+PiAyOwo+PiArICAgICAgICBhdmlvX3dyaXRlKHBiLCBidWYsIHZ2Y2MtPnB0bC5udW1f Ynl0ZXNfY29uc3RyYWludF9pbmZvKTsKPj4gKyAgICAgICAgZnJlZShidWYpOwo+PiArCj4+ICsg ICAgICAgIGlmICh2dmNjLT5udW1fc3VibGF5ZXJzID4gMSkgewo+PiArICAgICAgICAgICAgdWlu dDhfdCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyA9IDA7Cj4+ICsgICAgICAgICAg ICBmb3IgKGludCBpID0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7Cj4+ ICsgICAgICAgICAgICAgICAgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MgPQo+PiAr ICAgICAgICAgICAgICAgICAgICAocHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MgPDwg MSB8IHZ2Y2MtPnB0bC4KPj4gKyAgICAgICAgICAgICAgICAgICAgIHB0bF9zdWJsYXllcl9sZXZl bF9wcmVzZW50X2ZsYWdbaV0pOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgYXZp b193OChwYiwgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MpOwo+PiArICAgICAgICB9 Cj4+ICsKPj4gKyAgICAgICAgZm9yIChpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBp ID49IDA7IGktLSkgewo+PiArICAgICAgICAgICAgaWYgKHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJf bGV2ZWxfcHJlc2VudF9mbGFnW2ldKQo+PiArICAgICAgICAgICAgICAgIGF2aW9fdzgocGIsIHZ2 Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAg ICAgICAgLyogdW5zaWduZWQgaW50KDgpIG51bV9zdWJfcHJvZmlsZXM7ICovCj4+ICsgICAgICAg IGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7Cj4+ICsKPj4gKyAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7 IGorKykgewo+PiArICAgICAgICAgICAgLyogdW5zaWduZWQgaW50KDMyKSBnZW5lcmFsX3N1Yl9w cm9maWxlX2lkY1tqXTsgKi8KPj4gKyAgICAgICAgICAgIGF2aW9fd2IzMihwYiwgdnZjYy0+cHRs LmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2pdKTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAg ICAgIC8vRW5kIG9mIFZ2Y1BUTFJlY29yZAo+PiArCj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAg ICAqIHVuc2lnbmVkIGludCgxNikgbWF4X3BpY3R1cmVfd2lkdGg7Ki8KPj4gKyAgICAgICAgYXZp b193YjE2KHBiLCB2dmNjLT5tYXhfcGljdHVyZV93aWR0aCk7Cj4+ICsKPj4gKyAgICAgICAgLyoK Pj4gKyAgICAgICAgICogdW5zaWduZWQgaW50KDE2KSBtYXhfcGljdHVyZV9oZWlnaHQ7Ki8KPj4g KyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQpOwo+PiArCj4+ ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIHVuc2lnbmVkIGludCgxNikgYXZnX2ZyYW1lX3Jh dGU7ICovCj4+ICsgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+YXZnX2ZyYW1lX3JhdGUpOwo+ PiArICAgIH0KPj4gKwo+PiArICAgIC8qIHVuc2lnbmVkIGludCg4KSBudW1fb2ZfYXJyYXlzOyAq Lwo+PiArICAgIGF2aW9fdzgocGIsIHZ2Y2MtPm51bV9vZl9hcnJheXMpOwo+PiArCj4+ICsgICAg Zm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkrKykgewo+PiArICAgICAgICAv Kgo+PiArICAgICAgICAgKiBiaXQoMSkgYXJyYXlfY29tcGxldGVuZXNzOwo+PiArICAgICAgICAg KiB1bnNpZ25lZCBpbnQoMikgcmVzZXJ2ZWQgPSAwOwo+PiArICAgICAgICAgKiB1bnNpZ25lZCBp bnQoNSkgTkFMX3VuaXRfdHlwZTsKPj4gKyAgICAgICAgICovCj4+ICsgICAgICAgIGF2aW9fdzgo cGIsIHZ2Y2MtPmFycmF5W2ldLmFycmF5X2NvbXBsZXRlbmVzcyA8PCA3IHwKPj4gKyAgICAgICAg ICAgICAgICB2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlICYgMHgxZik7Cj4+ICsgICAgICAg IC8qIHVuc2lnbmVkIGludCgxNikgbnVtX25hbHVzOyAqLwo+PiArICAgICAgICBpZiAodnZjYy0+ YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNfRENJX05VVCAmJgo+PiArICAgICAgICAgICAg dnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNfT1BJX05VVCkKPj4gKyAgICAgICAg ICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzKTsKPj4gKyAgICAgICAg Zm9yIChqID0gMDsgaiA8IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisrKSB7Cj4+ICsgICAg ICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMTYpIG5hbF91bml0X2xlbmd0aDsgKi8KPj4gKyAgICAg ICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pdKTsK Pj4gKwo+PiArICAgICAgICAgICAgLyogYml0KDgqbmFsX3VuaXRfbGVuZ3RoKSBuYWxfdW5pdDsg Ki8KPj4gKyAgICAgICAgICAgIGF2aW9fd3JpdGUocGIsIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0 W2pdLAo+PiArICAgICAgICAgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9s ZW5ndGhbal0pOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gK2ludCBmZl9oMjY2X2FubmV4YjJtcDQoQVZJT0NvbnRleHQgKnBiLCBj b25zdCB1aW50OF90ICpidWZfaW4sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUs IGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQpCj4+ICt7Cj4+ICsgICAgaW50IG51bV9wcyA9 IDAsIHJldCA9IDA7Cj4+ICsgICAgdWludDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQgPSBOVUxMOwo+ PiArCj4+ICsgICAgaWYgKCFmaWx0ZXJfcHMpIHsKPj4gKyAgICAgICAgcmV0ID0gZmZfYXZjX3Bh cnNlX25hbF91bml0cyhwYiwgYnVmX2luLCBzaXplKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ ICsgICAgfQo+PiArCj4+ICsgICAgcmV0ID0gZmZfYXZjX3BhcnNlX25hbF91bml0c19idWYoYnVm X2luLCAmc3RhcnQsICZzaXplKTsKPj4gKyAgICBpZiAocmV0IDwgMCkKPj4gKyAgICAgICAgZ290 byBlbmQ7Cj4+ICsKPj4gKyAgICByZXQgPSAwOwo+PiArICAgIGJ1ZiA9IHN0YXJ0Owo+PiArICAg IGVuZCA9IHN0YXJ0ICsgc2l6ZTsKPj4gKwo+PiArICAgIHdoaWxlIChlbmQgLSBidWYgPiA0KSB7 Cj4+ICsgICAgICAgIHVpbnQzMl90IGxlbiA9IEZGTUlOKEFWX1JCMzIoYnVmKSwgZW5kIC0gYnVm IC0gNCk7Cj4+ICsgICAgICAgIHVpbnQ4X3QgdHlwZSA9IChidWZbNV0gPj4gMyk7Cj4+ICsKPj4g KyAgICAgICAgYnVmICs9IDQ7Cj4+ICsKPj4gKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cj4+ICsg ICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6Cj4+ICsgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6Cj4+ ICsgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6Cj4+ICsgICAgICAgICAgICBudW1fcHMrKzsKPj4g KyAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICBkZWZhdWx0Ogo+PiArICAgICAgICAgICAg cmV0ICs9IDQgKyBsZW47Cj4+ICsgICAgICAgICAgICBhdmlvX3diMzIocGIsIGxlbik7Cj4+ICsg ICAgICAgICAgICBhdmlvX3dyaXRlKHBiLCBidWYsIGxlbik7Cj4+ICsgICAgICAgICAgICBicmVh azsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIGJ1ZiArPSBsZW47Cj4+ICsgICAgfQo+ PiArCj4+ICsgIGVuZDoKPj4gKyAgICBhdl9mcmVlKHN0YXJ0KTsKPj4gKyAgICBpZiAocHNfY291 bnQpCj4+ICsgICAgICAgICpwc19jb3VudCA9IG51bV9wczsKPj4gKyAgICByZXR1cm4gcmV0Owo+ PiArfQo+PiArCj4+ICtpbnQgZmZfaDI2Nl9hbm5leGIybXA0X2J1Zihjb25zdCB1aW50OF90ICpi dWZfaW4sIHVpbnQ4X3QgKipidWZfb3V0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKnNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQpCj4+ICt7Cj4+ICsgICAgQVZJ T0NvbnRleHQgKnBiOwo+PiArICAgIGludCByZXQ7Cj4+ICsKPj4gKyAgICByZXQgPSBhdmlvX29w ZW5fZHluX2J1ZigmcGIpOwo+PiArICAgIGlmIChyZXQgPCAwKQo+PiArICAgICAgICByZXR1cm4g cmV0Owo+PiArCj4+ICsgICAgcmV0ID0gZmZfaDI2Nl9hbm5leGIybXA0KHBiLCBidWZfaW4sICpz aXplLCBmaWx0ZXJfcHMsIHBzX2NvdW50KTsKPj4gKyAgICBpZiAocmV0IDwgMCkgewo+PiArICAg ICAgICBmZmlvX2ZyZWVfZHluX2J1ZigmcGIpOwo+PiArICAgICAgICByZXR1cm4gcmV0Owo+PiAr ICAgIH0KPj4gKwo+PiArICAgICpzaXplID0gYXZpb19jbG9zZV9keW5fYnVmKHBiLCBidWZfb3V0 KTsKPj4gKwo+PiArICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtpbnQgZmZfaXNvbV93cml0 ZV92dmNjKEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqZGF0YSwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBwc19hcnJheV9jb21wbGV0ZW5lc3MpCj4+ICt7 Cj4+ICsgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgdnZjYzsKPj4gKyAgICB1aW50 OF90ICpidWYsICplbmQsICpzdGFydDsKPj4gKyAgICBpbnQgcmV0Owo+PiArCj4+ICsgICAgaWYg KHNpemUgPCA2KSB7Cj4+ICsgICAgICAgIC8qIFdlIGNhbid0IHdyaXRlIGEgdmFsaWQgdnZjYyBm cm9tIHRoZSBwcm92aWRlZCBkYXRhICovCj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwo+PiArICAgIH0gZWxzZSBpZiAoKmRhdGEgPT0gMSkgewo+PiArICAgICAgICAvKiBE YXRhIGlzIGFscmVhZHkgdnZjYy1mb3JtYXR0ZWQgKi8KPj4gKyAgICAgICAgYXZpb193cml0ZShw YiwgZGF0YSwgc2l6ZSk7Cj4+ICsgICAgICAgIHJldHVybiAwOwo+PiArICAgIH0gZWxzZSBpZiAo IShBVl9SQjI0KGRhdGEpID09IDEgfHwgQVZfUkIzMihkYXRhKSA9PSAxKSkgewo+PiArICAgICAg ICAvKiBOb3QgYSB2YWxpZCBBbm5leCBCIHN0YXJ0IGNvZGUgcHJlZml4ICovCj4+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldCA9 IGZmX2F2Y19wYXJzZV9uYWxfdW5pdHNfYnVmKGRhdGEsICZzdGFydCwgJnNpemUpOwo+PiArICAg IGlmIChyZXQgPCAwKQo+PiArICAgICAgICByZXR1cm4gcmV0Owo+PiArCj4+ICsgICAgdnZjY19p bml0KCZ2dmNjKTsKPj4gKwo+PiArICAgIGJ1ZiA9IHN0YXJ0Owo+PiArICAgIGVuZCA9IHN0YXJ0 ICsgc2l6ZTsKPj4gKwo+PiArICAgIHdoaWxlIChlbmQgLSBidWYgPiA0KSB7Cj4+ICsgICAgICAg IHVpbnQzMl90IGxlbiA9IEZGTUlOKEFWX1JCMzIoYnVmKSwgZW5kIC0gYnVmIC0gNCk7Cj4+ICsg ICAgICAgIHVpbnQ4X3QgdHlwZSA9IChidWZbNV0gPj4gMyk7Cj4+ICsKPj4gKyAgICAgICAgYnVm ICs9IDQ7Cj4+ICsKPj4gKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cj4+ICsgICAgICAgIGNhc2Ug VlZDX09QSV9OVVQ6Cj4+ICsgICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6Cj4+ICsgICAgICAgIGNh c2UgVlZDX1NQU19OVVQ6Cj4+ICsgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6Cj4+ICsgICAgICAg IGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgo+PiArICAgICAgICBjYXNlIFZWQ19TVUZGSVhfU0VJ X05VVDoKPj4gKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfYWRkX25hbF91bml0KGJ1ZiwgbGVuLCBw c19hcnJheV9jb21wbGV0ZW5lc3MsICZ2dmNjKTsKPj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAw KQo+PiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ ICsgICAgICAgIGRlZmF1bHQ6Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgfQo+ PiArCj4+ICsgICAgICAgIGJ1ZiArPSBsZW47Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0ID0g dnZjY193cml0ZShwYiwgJnZ2Y2MpOwo+PiArCj4+ICsgIGVuZDoKPj4gKyAgICB2dmNjX2Nsb3Nl KCZ2dmNjKTsKPj4gKyAgICBhdl9mcmVlKHN0YXJ0KTsKPj4gKyAgICByZXR1cm4gcmV0Owo+PiAr fQo+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdnZjLmggYi9saWJhdmZvcm1hdC92dmMuaAo+ PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwLi5mNTgxNDVlNGFlCj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvbGliYXZmb3JtYXQvdnZjLmgKPj4gQEAgLTAsMCArMSw5 OSBAQAo+PiArLyoKPj4gKyAqIEguMjY2IC8gVlZDIGhlbHBlciBmdW5jdGlvbnMgZm9yIG11eGVy cwo+PiArICoKPj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPj4gKyAqCj4+ICsg KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y Cj4+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCj4+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIKPj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+PiArICoKPj4gKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiAr ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gKyAqIExpY2Vu c2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK Pj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPj4gKyAqLwo+PiArCj4+ICsvKioKPj4gKyAqIEBm aWxlCj4+ICsgKiBpbnRlcm5hbCBoZWFkZXIgZm9yIEguMjY2L1ZWQyAoZGUpbXV4ZXIgdXRpbGl0 aWVzCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBBVkZPUk1BVF9IMjY2X0gKPj4gKyNkZWZpbmUg QVZGT1JNQVRfSDI2Nl9ICj4+ICsKPj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPj4gKyNpbmNsdWRl ICJhdmlvLmgiCj4+ICsKPj4gKy8qKgo+PiArICogV3JpdGVzIEFubmV4IEIgZm9ybWF0dGVkIEgu MjY2L1ZWQyBOQUwgdW5pdHMgdG8gdGhlIHByb3ZpZGVkIEFWSU9Db250ZXh0Lgo+PiArICoKPj4g KyAqIFRoZSBOQUwgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBhbiBNUDQtY29tcGF0aWJsZSBmb3Jt YXQgKHN0YXJ0IGNvZGUgcHJlZml4ZXMKPj4gKyAqIGFyZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6 ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVDIDE0NDk2LTE1KS4KPj4gKyAqCj4+ICsgKiBJZiBmaWx0 ZXJfcHMgaXMgbm9uLXplcm8sIGFueSBWVkMgcGFyYW1ldGVyIHNldHMgZm91bmQgaW4gdGhlIGlu cHV0IHdpbGwgYmUKPj4gKyAqIGRpc2NhcmRlZCwgYW5kICpwc19jb3VudCB3aWxsIGJlIHNldCB0 byB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMuCj4+ICsgKgo+PiArICogQHBh cmFtIHBiIGFkZHJlc3Mgb2YgdGhlIEFWSU9Db250ZXh0IHdoZXJlIHRoZSBkYXRhIHNoYWxsIGJl IHdyaXR0ZW4KPj4gKyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRp bmcgdGhlIGlucHV0IGRhdGEKPj4gKyAqIEBwYXJhbSBzaXplIHNpemUgKGluIGJ5dGVzKSBvZiB0 aGUgaW5wdXQgYnVmZmVyCj4+ICsgKiBAcGFyYW0gZmlsdGVyX3BzIHdoZXRoZXIgdG8gd3JpdGUg cGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgdG8gdGhlIG91dHB1dCAoMCkKPj4gKyAqICAgICAgICBv ciB0byBkaXNjYXJkIHRoZW0gKG5vbi16ZXJvKQo+PiArICogQHBhcmFtIHBzX2NvdW50IGFkZHJl c3Mgb2YgdGhlIHZhcmlhYmxlIHdoZXJlIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkCj4+ICsgKiAg ICAgICAgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgc2hhbGwgYmUgd3JpdHRlbiwgbWF5IGJlIE5V TEwKPj4gKyAqIEByZXR1cm4gdGhlIGFtb3VudCAoaW4gYnl0ZXMpIG9mIGRhdGEgd3JpdHRlbiBp biBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUKPj4gKyAqICAgICAgICAgdmFsdWUgY29ycmVz cG9uZGluZyB0byBhbiBBVkVSUk9SIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCj4+ICsgKi8KPj4g K2ludCBmZl9oMjY2X2FubmV4YjJtcDQoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpi dWZfaW4sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBmaWx0ZXJfcHMs IGludCAqcHNfY291bnQpOwo+PiArCj4+ICsvKioKPj4gKyAqIFdyaXRlcyBBbm5leCBCIGZvcm1h dHRlZCBILjI2Ni9WVkMgTkFMIHVuaXRzIHRvIGEgZGF0YSBidWZmZXIuCj4+ICsgKgo+PiArICog VGhlIE5BTCB1bml0cyBhcmUgY29udmVydGVkIHRvIGFuIE1QNC1jb21wYXRpYmxlIGZvcm1hdCAo c3RhcnQgY29kZSBwcmVmaXhlcwo+PiArICogYXJlIHJlcGxhY2VkIGJ5IDQtYnl0ZSBzaXplIGZp ZWxkcywgYXMgcGVyIElTTy9JRUMgMTQ0OTYtMTUpLgo+PiArICoKPj4gKyAqIElmIGZpbHRlcl9w cyBpcyBub24temVybywgYW55IFZWQyBwYXJhbWV0ZXIgc2V0cyBmb3VuZCBpbiB0aGUgaW5wdXQg d2lsbCBiZQo+PiArICogZGlzY2FyZGVkLCBhbmQgKnBzX2NvdW50IHdpbGwgYmUgc2V0IHRvIHRo ZSBudW1iZXIgb2YgZGlzY2FyZGVkIFBTIE5BTCB1bml0cy4KPj4gKyAqCj4+ICsgKiBPbiBzdWNj ZXNzLCAqc2l6ZSBob2xkcyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBvdXRwdXQgZGF0YSBi dWZmZXIuCj4+ICsgKgo+PiArICogQHBhcmFtIGJ1Zl9pbiBhZGRyZXNzIG9mIHRoZSBidWZmZXIg aG9sZGluZyB0aGUgaW5wdXQgZGF0YQo+PiArICogQHBhcmFtIHNpemUgYWRkcmVzcyBvZiB0aGUg dmFyaWFibGUgaG9sZGluZyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBpbnB1dAo+PiArICog ICAgICAgIGJ1ZmZlciAob24gaW5wdXQpIGFuZCBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAob24gc3Vj Y2VzcykKPj4gKyAqIEBwYXJhbSBidWZfb3V0IG9uIHN1Y2Nlc3MsIGFkZHJlc3Mgb2YgdGhlIHZh cmlhYmxlIGhvbGRpbmcgdGhlIGFkZHJlc3Mgb2YKPj4gKyAqICAgICAgICB0aGUgb3V0cHV0IGJ1 ZmZlcgo+PiArICogQHBhcmFtIGZpbHRlcl9wcyB3aGV0aGVyIHRvIHdyaXRlIHBhcmFtZXRlciBz ZXQgTkFMIHVuaXRzIHRvIHRoZSBvdXRwdXQgKDApCj4+ICsgKiAgICAgICAgb3IgdG8gZGlzY2Fy ZCB0aGVtIChub24temVybykKPj4gKyAqIEBwYXJhbSBwc19jb3VudCBhZGRyZXNzIG9mIHRoZSB2 YXJpYWJsZSB3aGVyZSB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZAo+PiArICogICAgICAgIHBhcmFt ZXRlciBzZXQgTkFMIHVuaXRzIHNoYWxsIGJlIHdyaXR0ZW4sIG1heSBiZSBOVUxMCj4+ICsgKiBA cmV0dXJuIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRp bmcgdG8gYW4gQVZFUlJPUgo+PiArICogICAgICAgICBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQo+ PiArICogQG5vdGUgKmJ1Zl9vdXQgd2lsbCBiZSB0cmVhdGVkIGFzIHVuaW5pdGlhbGl6ZWQgb24g aW5wdXQgYW5kIHdvbid0IGJlIGZyZWVkLgo+PiArICovCj4+ICtpbnQgZmZfaDI2Nl9hbm5leGIy bXA0X2J1Zihjb25zdCB1aW50OF90ICpidWZfaW4sIHVpbnQ4X3QgKipidWZfb3V0LAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNf Y291bnQpOwo+PiArCj4+ICsvKioKPj4gKyAqIFdyaXRlcyBILjI2Ni9WVkMgZXh0cmFkYXRhIChw YXJhbWV0ZXIgc2V0cywgZGVjbGFyYXRpdmUgU0VJIE5BTCB1bml0cykgdG8KPj4gKyAqIHRoZSBw cm92aWRlZCBBVklPQ29udGV4dC4KPj4gKyAqCj4+ICsgKiBJZiB0aGUgZXh0cmFkYXRhIGlzIEFu bmV4IEIgZm9ybWF0LCBpdCBnZXRzIGNvbnZlcnRlZCB0byB2dmNDIGZvcm1hdCBiZWZvcmUKPj4g KyAqIHdyaXRpbmcuCj4+ICsgKgo+PiArICogQHBhcmFtIHBiIGFkZHJlc3Mgb2YgdGhlIEFWSU9D b250ZXh0IHdoZXJlIHRoZSB2dmNDIHNoYWxsIGJlIHdyaXR0ZW4KPj4gKyAqIEBwYXJhbSBkYXRh IGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBkYXRhIG5lZWRlZCB0byB3cml0ZSB0 aGUgdnZjQwo+PiArICogQHBhcmFtIHNpemUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIGJ1 ZmZlcgo+PiArICogQHBhcmFtIHBzX2FycmF5X2NvbXBsZXRlbmVzcyB3aGV0aGVyIGFsbCBwYXJh bWV0ZXIgc2V0cyBhcmUgaW4gdGhlIHZ2Y0MgKDEpCj4+ICsgKiAgICAgICAgb3IgdGhlcmUgbWF5 IGJlIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHNldHMgaW4gdGhlIGJpdHN0cmVhbSAoMCkKPj4gKyAq IEByZXR1cm4gPj0wIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNw b25kaW5nIHRvIGFuIEFWRVJST1IKPj4gKyAqICAgICAgICAgY29kZSBpbiBjYXNlIG9mIGZhaWx1 cmUKPj4gKyAqLwo+PiAraW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklPQ29udGV4dCAqcGIsIGNv bnN0IHVpbnQ4X3QgKmRhdGEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBp bnQgcHNfYXJyYXlfY29tcGxldGVuZXNzKTsKPj4gKwo+PiArI2VuZGlmIC8qIEFWRk9STUFUX0gy NjZfSCAqLwo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4g aHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4gCj4gVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5n IGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4v bGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwg b3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVu c3Vic2NyaWJlIi4K