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 BCB8147B85 for ; Fri, 3 Nov 2023 09:58:18 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 829A868CD12; Fri, 3 Nov 2023 11:57:51 +0200 (EET) Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD6F768CD09 for ; Fri, 3 Nov 2023 11:57:44 +0200 (EET) Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-507a55302e0so2408247e87.0 for ; Fri, 03 Nov 2023 02:57:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spin-digital-com.20230601.gappssmtp.com; s=20230601; t=1699005463; x=1699610263; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=4Pneui3wz5AzPSK12I+eX+4F+eqrFdSqul1ldR7DbZc=; b=mOP1p1nTPQlZq1Ksfd8kusYX2sTv/FxqdGDChrWwgCj1jdfswsFvt6u5Gc97pouYog BulAmYXGsKJXiK0iAu74pqZHq+djBD6dhKWX1cByToH3gOyUOTrtWORGvGeF5jv/UNS1 5+Rlf3ZGzNypcpOCNovFBjuzTz+vRDRsw2TfNlrJXqfNPHeKibmBmLt2oomTFBB9VVVl n+3ouF+P/wvS8kugtNICjhaguqSbZKKG6pl7R4f2V6L58hvKdPBUP4irOxG1+kJWdgrA M5LNHhNLMgPn0UdozPgo19h33IzlwsnyN65nc2UissZHbR8dZV2iB5ikJtCyBQcnQ5L2 nb8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699005463; x=1699610263; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4Pneui3wz5AzPSK12I+eX+4F+eqrFdSqul1ldR7DbZc=; b=mRUdVOzqvgKDxyX7sJtwq5Q4gE2Jxauct2QZG0N/2iThRWJjdWePtjVw522DiGxzYm VgpTPxwn4mAwkCjNeAdpmOlg7C7tmN2UH2G2MHr9NN49gLJ7oGcMF5PyVRSrZdmCp1Es jazVloj8Pt07EK1G+foQ8+jRQ9Gve/TawxDbRIfWK8Ms7aZfsGR8yrSNNbwt1d1gTpSy DomtxGKkofDAPRvpnsDNmt/bSIYGi+XzL9y1KYNM4fIk4BrlXt3RPxaChAJwC8mD3BAU 7n4uSqtO/aGt5AkWx/CoNoaArjRG43U9GitjSW4E88l/z6wcz5x7qsVuH5AcheBMJmDA vfOA== X-Gm-Message-State: AOJu0YwVRL7vUvK2a87i5kShQYih3jcXhx66uO3cNJdXpvV60IK3t9wS h9+TH3TUYp7AQyQYgT49OnmWLwcM8Rlak2t8mWM= X-Google-Smtp-Source: AGHT+IFrc3qMoPUhLbxiQZ7wk45PLGECGcfh451G9n+tarTsIbhbEYa0zlROEoFwblmuLhp01XHO/w== X-Received: by 2002:a05:6512:3e08:b0:503:99d:5a97 with SMTP id i8-20020a0565123e0800b00503099d5a97mr21493148lfv.20.1699005462298; Fri, 03 Nov 2023 02:57:42 -0700 (PDT) Received: from thomas-win.localdomain ([213.138.44.237]) by smtp.gmail.com with ESMTPSA id s3-20020a50d483000000b00537963f692esm806214edi.0.2023.11.03.02.57.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 02:57:41 -0700 (PDT) From: Thomas Siedel To: ffmpeg-devel@ffmpeg.org Date: Fri, 3 Nov 2023 10:57:17 +0100 Message-Id: <20231103095720.32426-3-thomas.ff@spin-digital.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231103095720.32426-1-thomas.ff@spin-digital.com> References: <20231103095720.32426-1-thomas.ff@spin-digital.com> MIME-Version: 1.0 Subject: [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: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: QWRkIG11eGVyIGZvciB2dmNjIGJ5dGUgc3RyZWFtIGZvcm1hdC4KQWRkIEFWX0NPREVDX0lEX1ZW QyB0byBmZl9tcDRfb2JqX3R5cGUuCkFkZCBBVl9DT0RFQ19JRF9WVkMgdG8gSVNPIE1lZGlhIGNv ZGVjIChWdmNDb25maWd1cmF0aW9uQm94IHZ2aTEsCnZ2YzEgZGVmaW5lZCBpbiBJU08vSUVDIDE0 NDk2LTE1OjIwMjEpLgpBZGQgVnZjQ29uZmlndXJhdGlvbkJveCB2dmNDIHdoaWNoIGV4dGVuZHMg RnVsbEJveCB0eXBlIGluCklTTy9JRUMgMTQ0OTYtMTU6MjAyMS4KQWRkIGZmX3Z2Y19tdXhlciB0 byBSQVcgbXV4ZXJzLgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIFNpZWRlbCA8dGhvbWFzLmZmQHNw aW4tZGlnaXRhbC5jb20+Ci0tLQogbGliYXZmb3JtYXQvTWFrZWZpbGUgICAgfCAgIDYgKy0KIGxp YmF2Zm9ybWF0L2lzb20uYyAgICAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L2lzb21fdGFncy5jIHwg ICAzICsKIGxpYmF2Zm9ybWF0L21vdi5jICAgICAgIHwgICA2ICsKIGxpYmF2Zm9ybWF0L21vdmVu Yy5jICAgIHwgIDQxICstCiBsaWJhdmZvcm1hdC92dmMuYyAgICAgICB8IDk5OCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmZvcm1hdC92dmMuaCAgICAgICB8 ICA5OSArKysrCiA3IGZpbGVzIGNoYW5nZWQsIDExNTAgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC92dmMuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYmF2Zm9ybWF0L3Z2Yy5oCgpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZp bGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCAzMjkwNTVjY2ZkLi41OTVmNmJkZjA4IDEw MDY0NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmls ZQpAQCAtMzQxLDcgKzM0MSw3IEBAIE9CSlMtJChDT05GSUdfTUFUUk9TS0FfREVNVVhFUikgICAg ICAgICAgKz0gbWF0cm9za2FkZWMubyBtYXRyb3NrYS5vICBcCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9nZ3BhcnNldm9yYmlzLm8gdm9yYmlzY29tbWVudC5v IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXRwYWxldHRl Lm8gcmVwbGF5Z2Fpbi5vIGRvdmlfaXNvbS5vCiBPQkpTLSQoQ09ORklHX01BVFJPU0tBX01VWEVS KSAgICAgICAgICAgICs9IG1hdHJvc2thZW5jLm8gbWF0cm9za2EubyBcCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2MS5vIGF2Yy5vIGhldmMubyBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2MS5vIGF2Yy5vIGhldmMu byB2dmMub1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxh Y2VuY19oZWFkZXIubyBhdmxhbmd1YWdlLm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b3JiaXNjb21tZW50Lm8gd3YubyBkb3ZpX2lzb20ubwogT0JKUy0k KENPTkZJR19NQ0FfREVNVVhFUikgICAgICAgICAgICAgICArPSBtY2EubwpAQCAtMzYzLDcgKzM2 Myw3IEBAIE9CSlMtJChDT05GSUdfTU9EU19ERU1VWEVSKSAgICAgICAgICAgICAgKz0gbW9kcy5v CiBPQkpTLSQoQ09ORklHX01PRkxFWF9ERU1VWEVSKSAgICAgICAgICAgICs9IG1vZmxleC5vCiBP QkpTLSQoQ09ORklHX01PVl9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IG1vdi5vIG1vdl9jaGFu Lm8gbW92X2VzZHMubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHF0cGFsZXR0ZS5vIHJlcGxheWdhaW4ubyBkb3ZpX2lzb20ubwotT0JKUy0kKENPTkZJR19N T1ZfTVVYRVIpICAgICAgICAgICAgICAgICArPSBtb3ZlbmMubyBhdjEubyBhdmMubyBoZXZjLm8g dnBjYy5vIFwKK09CSlMtJChDT05GSUdfTU9WX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gbW92 ZW5jLm8gYXYxLm8gYXZjLm8gaGV2Yy5vIHZ2Yy5vIHZwY2MubyBcCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVuY2hpbnQubyBtb3ZfY2hhbi5vIHJ0cC5v IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW5jY2Vu Yy5vIG1vdmVuY190dG1sLm8gcmF3dXRpbHMubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvdmlfaXNvbS5vIGV2Yy5vCkBAIC01MTYsNyArNTE2LDcgQEAg T0JKUy0kKENPTkZJR19SVFBfTVVYRVIpICAgICAgICAgICAgICAgICArPSBydHAubyAgICAgICAg IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwZW5jX3Zw OC5vICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cGVu Y192cDkubyAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJ0cGVuY194aXBoLm8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhdmMubyBoZXZjLm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXZjLm8gaGV2Yy5vIHZ2Yy5vCiBPQkpTLSQoQ09ORklHX1JUU1Bf REVNVVhFUikgICAgICAgICAgICAgICs9IHJ0c3AubyBydHNwZGVjLm8gaHR0cGF1dGgubyBcCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybGRlY29kZS5vCiBP QkpTLSQoQ09ORklHX1JUU1BfTVVYRVIpICAgICAgICAgICAgICAgICs9IHJ0c3AubyBydHNwZW5j Lm8gaHR0cGF1dGgubyBcCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9pc29tLmMgYi9saWJhdmZv cm1hdC9pc29tLmMKaW5kZXggNmQwMTk4ODFlNS4uOWZiY2NkNDQzNyAxMDA2NDQKLS0tIGEvbGli YXZmb3JtYXQvaXNvbS5jCisrKyBiL2xpYmF2Zm9ybWF0L2lzb20uYwpAQCAtMzYsNiArMzYsNyBA QCBjb25zdCBBVkNvZGVjVGFnIGZmX21wNF9vYmpfdHlwZVtdID0gewogICAgIHsgQVZfQ09ERUNf SURfTVBFRzQgICAgICAgLCAweDIwIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9IMjY0ICAgICAgICAs IDB4MjEgfSwKICAgICB7IEFWX0NPREVDX0lEX0hFVkMgICAgICAgICwgMHgyMyB9LAorICAgIHsg QVZfQ09ERUNfSURfVlZDICAgICAgICAgLCAweDMzIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9BQUMg ICAgICAgICAsIDB4NDAgfSwKICAgICB7IEFWX0NPREVDX0lEX01QNEFMUyAgICAgICwgMHg0MCB9 LCAvKiAxNDQ5Ni0zIEFMUyAqLwogICAgIHsgQVZfQ09ERUNfSURfTVBFRzJWSURFTyAgLCAweDYx IH0sIC8qIE1QRUctMiBNYWluICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9pc29tX3RhZ3Mu YyBiL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jCmluZGV4IGE1NzViN2MxNjAuLjcwNTgxMWU5NTAg MTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jCisrKyBiL2xpYmF2Zm9ybWF0L2lz b21fdGFncy5jCkBAIC0xMjMsNiArMTIzLDkgQEAgY29uc3QgQVZDb2RlY1RhZyBmZl9jb2RlY19t b3Z2aWRlb190YWdzW10gPSB7CiAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCBNS1RBRygnZCcsICd2 JywgJ2gnLCAnZScpIH0sIC8qIEhFVkMtYmFzZWQgRG9sYnkgVmlzaW9uIGRlcml2ZWQgZnJvbSBo ZXYxICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGR2aDEgaXMgaGFuZGxlZCB3aXRoaW4gbW92LmMgKi8KIAorICAgIHsgQVZfQ09ERUNf SURfVlZDLCBNS1RBRygndicsICd2JywgJ2knLCAnMScpIH0sICAvKiBWVkMvSC4yNjYgd2hpY2gg aW5kaWNhdGVzIHBhcmFtZXRlciBzZXRzIG1heSBiZSBpbiBFUyAqLworICAgIHsgQVZfQ09ERUNf SURfVlZDLCBNS1RBRygndicsICd2JywgJ2MnLCAnMScpIH0sICAvKiBWVkMvSC4yNjYgd2hpY2gg aW5kaWNhdGVzIHBhcmFtZXRlciBzaGFsbCBub3QgYmUgaW4gRVMgKi8KKwogICAgIHsgQVZfQ09E RUNfSURfSDI2NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzEnKSB9LCAvKiBBVkMtMS9ILjI2NCAq LwogICAgIHsgQVZfQ09ERUNfSURfSDI2NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzInKSB9LAog ICAgIHsgQVZfQ09ERUNfSURfSDI2NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzMnKSB9LApkaWZm IC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92LmMgYi9saWJhdmZvcm1hdC9tb3YuYwppbmRleCBlOGVm Y2NmNmViLi4xMWI0M2FjMTM1IDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9tb3YuYworKysgYi9s aWJhdmZvcm1hdC9tb3YuYwpAQCAtMjExNyw2ICsyMTE3LDExIEBAIHN0YXRpYyBpbnQgbW92X3Jl YWRfZ2xibChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAg ICBpZiAoKHVpbnQ2NF90KWF0b20uc2l6ZSA+ICgxPDwzMCkpCiAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwogCisgICAgaWYgKGF0b20udHlwZSA9PSBNS1RBRygndicsJ3YnLCdj JywnQycpKSB7CisgICAgICAgIGF2aW9fcmIzMihwYik7CisgICAgICAgIGF0b20uc2l6ZSAtPSA0 OworICAgIH0KKwogICAgIGlmIChhdG9tLnNpemUgPj0gMTApIHsKICAgICAgICAgLy8gQnJva2Vu IGZpbGVzIGNyZWF0ZWQgYnkgbGVnYWN5IHZlcnNpb25zIG9mIGxpYmF2Zm9ybWF0IHdpbGwKICAg ICAgICAgLy8gd3JhcCBhIHdob2xlIGZpZWwgYXRvbSBpbnNpZGUgb2YgYSBnbGJsIGF0b20uCkBA IC03OTIxLDYgKzc5MjYsNyBAQCBzdGF0aWMgY29uc3QgTU9WUGFyc2VUYWJsZUVudHJ5IG1vdl9k ZWZhdWx0X3BhcnNlX3RhYmxlW10gPSB7CiB7IE1LVEFHKCdzJywnZycsJ3AnLCdkJyksIG1vdl9y ZWFkX3NncGQgfSwKIHsgTUtUQUcoJ3MnLCdiJywnZycsJ3AnKSwgbW92X3JlYWRfc2JncCB9LAog eyBNS1RBRygnaCcsJ3YnLCdjJywnQycpLCBtb3ZfcmVhZF9nbGJsIH0sCit7IE1LVEFHKCd2Jywn dicsJ2MnLCdDJyksIG1vdl9yZWFkX2dsYmwgfSwKIHsgTUtUQUcoJ3UnLCd1JywnaScsJ2QnKSwg bW92X3JlYWRfdXVpZCB9LAogeyBNS1RBRygnQycsJ2knLCduJywgMHg4ZSksIG1vdl9yZWFkX3Rh cmdhX3kyMTYgfSwKIHsgTUtUQUcoJ2YnLCdyJywnZScsJ2UnKSwgbW92X3JlYWRfZnJlZSB9LApk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92ZW5jLmMgYi9saWJhdmZvcm1hdC9tb3ZlbmMuYwpp bmRleCBlMzlmMWFjOTg3Li4wOTNhMDRkMGMyIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9tb3Zl bmMuYworKysgYi9saWJhdmZvcm1hdC9tb3ZlbmMuYwpAQCAtNjgsNiArNjgsNyBAQAogI2luY2x1 ZGUgInR0bWxlbmMuaCIKICNpbmNsdWRlICJ2ZXJzaW9uLmgiCiAjaW5jbHVkZSAidnBjYy5oIgor I2luY2x1ZGUgInZ2Yy5oIgogCiBzdGF0aWMgY29uc3QgQVZPcHRpb24gb3B0aW9uc1tdID0gewog ICAgIHsgIm1vdmZsYWdzIiwgIk1PViBtdXhlciBmbGFncyIsIG9mZnNldG9mKE1PVk11eENvbnRl eHQsIGZsYWdzKSwgQVZfT1BUX1RZUEVfRkxBR1MsIHsuaTY0ID0gMH0sIElOVF9NSU4sIElOVF9N QVgsIEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNLCAibW92ZmxhZ3MiIH0sCkBAIC0xNDczLDYg KzE0NzQsMjMgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfZXZjY190YWcoQVZJT0NvbnRleHQgKnBi LCBNT1ZUcmFjayAqdHJhY2spCiAgICAgcmV0dXJuIHVwZGF0ZV9zaXplKHBiLCBwb3MpOwogfQog CitzdGF0aWMgaW50IG1vdl93cml0ZV92dmNjX3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVlRyYWNr ICp0cmFjaykKK3sKKyAgICBpbnQ2NF90IHBvcyA9IGF2aW9fdGVsbChwYik7CisKKyAgICBhdmlv X3diMzIocGIsIDApOworICAgIGZmaW9fd2ZvdXJjYyhwYiwgInZ2Y0MiKTsKKworICAgIGF2aW9f dzggIChwYiwgMCk7IC8qIHZlcnNpb24gKi8KKyAgICBhdmlvX3diMjQocGIsIDApOyAvKiBmbGFn cyAqLworCisgICAgaWYgKHRyYWNrLT50YWcgPT0gTUtUQUcoJ3YnLCd2JywnYycsJzEnKSkKKyAg ICAgICAgZmZfaXNvbV93cml0ZV92dmNjKHBiLCB0cmFjay0+dm9zX2RhdGEsIHRyYWNrLT52b3Nf bGVuLCAxKTsKKyAgICBlbHNlCisgICAgICAgIGZmX2lzb21fd3JpdGVfdnZjYyhwYiwgdHJhY2st PnZvc19kYXRhLCB0cmFjay0+dm9zX2xlbiwgMCk7CisgICAgcmV0dXJuIHVwZGF0ZV9zaXplKHBi LCBwb3MpOworfQorCiAvKiBhbHNvIHVzZWQgYnkgYWxsIGF2aWQgY29kZWNzIChkdiwgaW14LCBt ZXJpZGllbikgYW5kIHRoZWlyIHZhcmlhbnRzICovCiBzdGF0aWMgaW50IG1vdl93cml0ZV9hdmlk X3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVlRyYWNrICp0cmFjaykKIHsKQEAgLTIzODIsNiArMjQw MCw4IEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX3ZpZGVvX3RhZyhBVkZvcm1hdENvbnRleHQgKnMs IEFWSU9Db250ZXh0ICpwYiwgTU9WTXV4Q29udGV4CiAgICAgICAgIGF2aWQgPSAxOwogICAgIH0g ZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVWQykKICAgICAg ICAgbW92X3dyaXRlX2h2Y2NfdGFnKHBiLCB0cmFjayk7CisgICAgZWxzZSBpZiAodHJhY2stPnBh ci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlZDKQorICAgICAgICBtb3Zfd3JpdGVfdnZjY190 YWcocGIsIHRyYWNrKTsKICAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9D T0RFQ19JRF9IMjY0ICYmICFUQUdfSVNfQVZDSSh0cmFjay0+dGFnKSkgewogICAgICAgICBtb3Zf d3JpdGVfYXZjY190YWcocGIsIHRyYWNrKTsKICAgICAgICAgaWYgKHRyYWNrLT5tb2RlID09IE1P REVfSVBPRCkKQEAgLTYxNzAsNiArNjE5MCw3IEBAIGludCBmZl9tb3Zfd3JpdGVfcGFja2V0KEFW Rm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKICAgICBpZiAoKHBhci0+Y29kZWNfaWQg PT0gQVZfQ09ERUNfSURfRE5YSEQgfHwKICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09E RUNfSURfSDI2NCB8fAogICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IRVZD IHx8CisgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZWQyB8fAogICAgICAg ICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkgfHwKICAgICAgICAgIHBhci0+Y29k ZWNfaWQgPT0gQVZfQ09ERUNfSURfRVZDIHx8CiAgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFW X0NPREVDX0lEX1RSVUVIRCkgJiYgIXRyay0+dm9zX2xlbiAmJgpAQCAtNjIzNSw2ICs2MjU2LDE4 IEBAIGludCBmZl9tb3Zfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQg KnBrdCkKICAgICAgICAgICAgICAgICBzaXplID0gZmZfaGV2Y19hbm5leGIybXA0KHBiLCBwa3Qt PmRhdGEsIHBrdC0+c2l6ZSwgMCwgTlVMTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAg ICB9IGVsc2UgaWYgKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlZDICYmIHRyay0+dm9z X2xlbiA+IDYgJiYKKyAgICAgICAgICAgICAoQVZfUkIyNCh0cmstPnZvc19kYXRhKSA9PSAxIHx8 IEFWX1JCMzIodHJrLT52b3NfZGF0YSkgPT0gMSkpIHsKKyAgICAgIC8qIGV4dHJhZGF0YSBpcyBB bm5leCBCLCBhc3N1bWUgdGhlIGJpdHN0cmVhbSBpcyB0b28gYW5kIGNvbnZlcnQgaXQgKi8KKyAg ICAgIGlmICh0cmstPmhpbnRfdHJhY2sgPj0gMCAmJiB0cmstPmhpbnRfdHJhY2sgPCBtb3YtPm5i X3N0cmVhbXMpIHsKKyAgICAgICAgICAgIHJldCA9IGZmX2gyNjZfYW5uZXhiMm1wNF9idWYocGt0 LT5kYXRhLCAmcmVmb3JtYXR0ZWRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnNpemUsIDAsIE5VTEwpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIGF2aW9fd3JpdGUocGIsIHJl Zm9ybWF0dGVkX2RhdGEsIHNpemUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzaXplID0g ZmZfaDI2Nl9hbm5leGIybXA0KHBiLCBwa3QtPmRhdGEsIHBrdC0+c2l6ZSwgMCwgTlVMTCk7Cisg ICAgICB9CiAgICAgfSBlbHNlIGlmIChwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0FWMSkg ewogICAgICAgICBpZiAodHJrLT5oaW50X3RyYWNrID49IDAgJiYgdHJrLT5oaW50X3RyYWNrIDwg bW92LT5uYl9zdHJlYW1zKSB7CiAgICAgICAgICAgICByZXQgPSBmZl9hdjFfZmlsdGVyX29idXNf YnVmKHBrdC0+ZGF0YSwgJnJlZm9ybWF0dGVkX2RhdGEsCkBAIC02MjgxLDYgKzYzMTQsOSBAQCBp bnQgZmZfbW92X3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3Qp CiAgICAgICAgICAgICB9IGVsc2UgaWYocGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IRVZD ICYmIHBhci0+ZXh0cmFkYXRhX3NpemUgPiAyMSkgewogICAgICAgICAgICAgICAgIGludCBuYWxf c2l6ZV9sZW5ndGggPSAocGFyLT5leHRyYWRhdGFbMjFdICYgMHgzKSArIDE7CiAgICAgICAgICAg ICAgICAgcmV0ID0gZmZfbW92X2NlbmNfYXZjX3dyaXRlX25hbF91bml0cyhzLCAmdHJrLT5jZW5j LCBuYWxfc2l6ZV9sZW5ndGgsIHBiLCBwa3QtPmRhdGEsIHNpemUpOworICAgICAgICAgICAgfSBl bHNlIGlmKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlZDICYmIHBhci0+ZXh0cmFkYXRh X3NpemUgPiAyMSkgeworICAgICAgICAgICAgICAgIGludCBuYWxfc2l6ZV9sZW5ndGggPSAocGFy LT5leHRyYWRhdGFbMjFdICYgMHgzKSArIDE7CisgICAgICAgICAgICAgICAgcmV0ID0gZmZfbW92 X2NlbmNfYXZjX3dyaXRlX25hbF91bml0cyhzLCAmdHJrLT5jZW5jLCBuYWxfc2l6ZV9sZW5ndGgs IHBiLCBwa3QtPmRhdGEsIHNpemUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg ICAgICByZXQgPSBmZl9tb3ZfY2VuY193cml0ZV9wYWNrZXQoJnRyay0+Y2VuYywgcGIsIHBrdC0+ ZGF0YSwgc2l6ZSk7CiAgICAgICAgICAgICB9CkBAIC03MzYzLDcgKzczOTksOCBAQCBzdGF0aWMg aW50IG1vdl9pbml0KEFWRm9ybWF0Q29udGV4dCAqcykKIAogICAgICAgICBpZiAobW92LT5lbmNy eXB0aW9uX3NjaGVtZSA9PSBNT1ZfRU5DX0NFTkNfQUVTX0NUUikgewogICAgICAgICAgICAgcmV0 ID0gZmZfbW92X2NlbmNfaW5pdCgmdHJhY2stPmNlbmMsIG1vdi0+ZW5jcnlwdGlvbl9rZXksCi0g ICAgICAgICAgICAgICAgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQg fHwgdHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVWQyksCisgICAgICAgICAg ICAgICAgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgfHwgdHJhY2st PnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVWQyB8fAorICAgICAgICAgICAgICAgICB0 cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WVkMpLAogICAgICAgICAgICAgICAg IHMtPmZsYWdzICYgQVZGTVRfRkxBR19CSVRFWEFDVCk7CiAgICAgICAgICAgICBpZiAocmV0KQog ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CkBAIC03ODMyLDYgKzc4NjksOCBAQCBzdGF0aWMg Y29uc3QgQVZDb2RlY1RhZyBjb2RlY19tcDRfdGFnc1tdID0gewogICAgIHsgQVZfQ09ERUNfSURf SEVWQywgICAgICAgICAgICBNS1RBRygnaCcsICdlJywgJ3YnLCAnMScpIH0sCiAgICAgeyBBVl9D T0RFQ19JRF9IRVZDLCAgICAgICAgICAgIE1LVEFHKCdoJywgJ3YnLCAnYycsICcxJykgfSwKICAg ICB7IEFWX0NPREVDX0lEX0hFVkMsICAgICAgICAgICAgTUtUQUcoJ2QnLCAndicsICdoJywgJzEn KSB9LAorICAgIHsgQVZfQ09ERUNfSURfVlZDLCAgICAgICAgICAgICBNS1RBRygndicsICd2Jywg J2MnLCAnMScpIH0sCisgICAgeyBBVl9DT0RFQ19JRF9WVkMsICAgICAgICAgICAgIE1LVEFHKCd2 JywgJ3YnLCAnaScsICcxJykgfSwKICAgICB7IEFWX0NPREVDX0lEX0VWQywgICAgICAgICAgICAg TUtUQUcoJ2UnLCAndicsICdjJywgJzEnKSB9LAogICAgIHsgQVZfQ09ERUNfSURfTVBFRzJWSURF TywgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAndicpIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9N UEVHMVZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcsICd2JykgfSwKZGlmZiAtLWdpdCBh L2xpYmF2Zm9ybWF0L3Z2Yy5jIGIvbGliYXZmb3JtYXQvdnZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uOGVjMDEzNjg2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2 Zm9ybWF0L3Z2Yy5jCkBAIC0wLDAgKzEsOTk4IEBACisvKgorICogSC4yNjYvVlZDIGhlbHBlciBm dW5jdGlvbnMgZm9yIG11eGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiwgVGhvbWFzIFNp ZWRlbAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAi bGliYXZjb2RlYy9nZXRfYml0cy5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvZ29sb21iLmgiCisj aW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdy aXRlLmgiCisjaW5jbHVkZSAiYXZjLmgiCisjaW5jbHVkZSAiYXZpby5oIgorI2luY2x1ZGUgImF2 aW9faW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ2dmMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgVlZDQ05B TFVuaXRBcnJheSB7CisgICAgdWludDhfdCBhcnJheV9jb21wbGV0ZW5lc3M7CisgICAgdWludDhf dCBOQUxfdW5pdF90eXBlOworICAgIHVpbnQxNl90IG51bV9uYWx1czsKKyAgICB1aW50MTZfdCAq bmFsX3VuaXRfbGVuZ3RoOworICAgIHVpbnQ4X3QgKipuYWxfdW5pdDsKK30gVlZDQ05BTFVuaXRB cnJheTsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDUFRMUmVjb3JkIHsKKyAgICB1aW50OF90IG51bV9i eXRlc19jb25zdHJhaW50X2luZm87CisgICAgdWludDhfdCBnZW5lcmFsX3Byb2ZpbGVfaWRjOwor ICAgIHVpbnQ4X3QgZ2VuZXJhbF90aWVyX2ZsYWc7CisgICAgdWludDhfdCBnZW5lcmFsX2xldmVs X2lkYzsKKyAgICB1aW50OF90IHB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB1 aW50OF90IHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzsKKyAgICB1aW50OF90IGdlbmVyYWxf Y29uc3RyYWludF9pbmZvWzldOworICAgIHVpbnQ4X3QgKnB0bF9zdWJsYXllcl9sZXZlbF9wcmVz ZW50X2ZsYWc7CisgICAgdWludDhfdCAqc3VibGF5ZXJfbGV2ZWxfaWRjOworICAgIHVpbnQ4X3Qg cHRsX251bV9zdWJfcHJvZmlsZXM7CisgICAgdWludDMyX3QgKmdlbmVyYWxfc3ViX3Byb2ZpbGVf aWRjOworfSBWVkNQVExSZWNvcmQ7CisKK3R5cGVkZWYgc3RydWN0IFZWQ0RlY29kZXJDb25maWd1 cmF0aW9uUmVjb3JkIHsKKyAgICB1aW50OF90IGxlbmd0aFNpemVNaW51c09uZTsKKyAgICB1aW50 OF90IHB0bF9wcmVzZW50X2ZsYWc7CisgICAgdWludDE2X3Qgb2xzX2lkeDsKKyAgICB1aW50OF90 IG51bV9zdWJsYXllcnM7CisgICAgdWludDhfdCBjb25zdGFudF9mcmFtZV9yYXRlOworICAgIHVp bnQ4X3QgY2hyb21hX2Zvcm1hdF9pZGM7CisgICAgdWludDhfdCBiaXRfZGVwdGhfbWludXM4Owor ICAgIFZWQ1BUTFJlY29yZCBwdGw7CisgICAgdWludDE2X3QgbWF4X3BpY3R1cmVfd2lkdGg7Cisg ICAgdWludDE2X3QgbWF4X3BpY3R1cmVfaGVpZ2h0OworICAgIHVpbnQxNl90IGF2Z19mcmFtZV9y YXRlOworICAgIHVpbnQ4X3QgbnVtX29mX2FycmF5czsKKyAgICBWVkNDTkFMVW5pdEFycmF5ICph cnJheTsKK30gVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ7CisKK3R5cGVkZWYgc3RydWN0 IFZWQ0NQcm9maWxlVGllckxldmVsIHsKKyAgICB1aW50OF90IHByb2ZpbGVfaWRjOworICAgIHVp bnQ4X3QgdGllcl9mbGFnOworICAgIHVpbnQ4X3QgZ2VuZXJhbF9sZXZlbF9pZGM7CisgICAgdWlu dDhfdCBwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc7CisgICAgdWludDhfdCBwdGxfbXVs dGlsYXllcl9lbmFibGVkX2ZsYWc7CisvLyBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbworICAgIHVp bnQ4X3QgZ2NpX3ByZXNlbnRfZmxhZzsKKyAgICB1aW50OF90IGdjaV9nZW5lcmFsX2NvbnN0cmFp bnRzWzldOworICAgIHVpbnQ4X3QgZ2NpX251bV9yZXNlcnZlZF9iaXRzOworLy8gZW5kIGdlbmVy YWxfY29uc3RyYWludF9pbmZvCisgICAgdWludDhfdCAqcHRsX3N1YmxheWVyX2xldmVsX3ByZXNl bnRfZmxhZzsKKyAgICB1aW50OF90ICpzdWJsYXllcl9sZXZlbF9pZGM7CisgICAgdWludDhfdCBw dGxfbnVtX3N1Yl9wcm9maWxlczsKKyAgICB1aW50MzJfdCAqZ2VuZXJhbF9zdWJfcHJvZmlsZV9p ZGM7Cit9IFZWQ0NQcm9maWxlVGllckxldmVsOworCitzdGF0aWMgdm9pZCB2dmNjX3VwZGF0ZV9w dGwoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgKnB0bCkKK3sKKyAgICAvKgorICAgICAq IFRoZSBsZXZlbCBpbmRpY2F0aW9uIGdlbmVyYWxfbGV2ZWxfaWRjIG11c3QgaW5kaWNhdGUgYSBs ZXZlbCBvZgorICAgICAqIGNhcGFiaWxpdHkgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZSBo aWdoZXN0IGxldmVsIGluZGljYXRlZCBmb3IgdGhlCisgICAgICogaGlnaGVzdCB0aWVyIGluIGFs bCB0aGUgcGFyYW1ldGVyIHNldHMuCisgICAgICovCisgICAgaWYgKHZ2Y2MtPnB0bC5nZW5lcmFs X3RpZXJfZmxhZyA8IHB0bC0+dGllcl9mbGFnKQorICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9s ZXZlbF9pZGMgPSBwdGwtPmdlbmVyYWxfbGV2ZWxfaWRjOworICAgIGVsc2UKKyAgICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjID0KKyAgICAgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5n ZW5lcmFsX2xldmVsX2lkYywgcHRsLT5nZW5lcmFsX2xldmVsX2lkYyk7CisKKyAgICAvKgorICAg ICAqIFRoZSB0aWVyIGluZGljYXRpb24gZ2VuZXJhbF90aWVyX2ZsYWcgbXVzdCBpbmRpY2F0ZSBh IHRpZXIgZXF1YWwgdG8gb3IKKyAgICAgKiBncmVhdGVyIHRoYW4gdGhlIGhpZ2hlc3QgdGllciBp bmRpY2F0ZWQgaW4gYWxsIHRoZSBwYXJhbWV0ZXIgc2V0cy4KKyAgICAgKi8KKyAgICB2dmNjLT5w dGwuZ2VuZXJhbF90aWVyX2ZsYWcgPQorICAgICAgICBGRk1BWCh2dmNjLT5wdGwuZ2VuZXJhbF90 aWVyX2ZsYWcsIHB0bC0+dGllcl9mbGFnKTsKKworICAgIC8qCisgICAgICogVGhlIHByb2ZpbGUg aW5kaWNhdGlvbiBnZW5lcmFsX3Byb2ZpbGVfaWRjIG11c3QgaW5kaWNhdGUgYSBwcm9maWxlIHRv CisgICAgICogd2hpY2ggdGhlIHN0cmVhbSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0 aW9uIHJlY29yZCBjb25mb3Jtcy4KKyAgICAgKgorICAgICAqIElmIHRoZSBzZXF1ZW5jZSBwYXJh bWV0ZXIgc2V0cyBhcmUgbWFya2VkIHdpdGggZGlmZmVyZW50IHByb2ZpbGVzLCB0aGVuCisgICAg ICogdGhlIHN0cmVhbSBtYXkgbmVlZCBleGFtaW5hdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggcHJv ZmlsZSwgaWYgYW55LCB0aGUKKyAgICAgKiBlbnRpcmUgc3RyZWFtIGNvbmZvcm1zIHRvLiBJZiB0 aGUgZW50aXJlIHN0cmVhbSBpcyBub3QgZXhhbWluZWQsIG9yIHRoZQorICAgICAqIGV4YW1pbmF0 aW9uIHJldmVhbHMgdGhhdCB0aGVyZSBpcyBubyBwcm9maWxlIHRvIHdoaWNoIHRoZSBlbnRpcmUg c3RyZWFtCisgICAgICogY29uZm9ybXMsIHRoZW4gdGhlIGVudGlyZSBzdHJlYW0gbXVzdCBiZSBz cGxpdCBpbnRvIHR3byBvciBtb3JlCisgICAgICogc3ViLXN0cmVhbXMgd2l0aCBzZXBhcmF0ZSBj b25maWd1cmF0aW9uIHJlY29yZHMgaW4gd2hpY2ggdGhlc2UgcnVsZXMgY2FuCisgICAgICogYmUg bWV0LgorICAgICAqCisgICAgICogTm90ZTogc2V0IHRoZSBwcm9maWxlIHRvIHRoZSBoaWdoZXN0 IHZhbHVlIGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LgorICAgICAqLworICAgIHZ2Y2MtPnB0 bC5nZW5lcmFsX3Byb2ZpbGVfaWRjID0KKyAgICAgICAgRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxf cHJvZmlsZV9pZGMsIHB0bC0+cHJvZmlsZV9pZGMpOworCisgICAgLyoKKyAgICAgKiBFYWNoIGJp dCBpbiBmbGFncyBtYXkgb25seSBiZSBzZXQgaWYgYWxsCisgICAgICogdGhlIHBhcmFtZXRlciBz ZXRzIHNldCB0aGF0IGJpdC4KKyAgICAgKi8KKyAgICB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlf Y29uc3RyYWludF9mbGFnICY9CisgICAgICAgIHB0bC0+cHRsX2ZyYW1lX29ubHlfY29uc3RyYWlu dF9mbGFnOworICAgIHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcgJj0gcHRs LT5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7CisKKyAgICAvKgorICAgICAqIENvbnN0cmFp bnRzIEluZm8KKyAgICAgKi8KKyAgICBpZiAocHRsLT5nY2lfcHJlc2VudF9mbGFnKSB7CisgICAg ICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0gOTsKKyAgICAgICAgbWVt Y3B5KCZ2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bMF0sCisgICAgICAgICAgICAg ICAmcHRsLT5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1swXSwgc2l6ZW9mKHVpbnQ4X3QpICogOSk7 CisKKyAgICB9IGVsc2UgeworICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRf aW5mbyA9IDE7CisgICAgICAgIG1lbXNldCgmdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9p bmZvWzBdLCAwLCBzaXplb2YodWludDhfdCkgKiA5KTsKKyAgICB9CisKKyAgICAvKgorICAgICAq IEVhY2ggYml0IGluIGZsYWdzIG1heSBvbmx5IGJlIHNldCBpZiBvbmUgb2YKKyAgICAgKiB0aGUg cGFyYW1ldGVyIHNldHMgc2V0IHRoYXQgYml0LgorICAgICAqLworICAgIHZ2Y2MtPnB0bC5wdGxf c3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnID0KKyAgICAgICAgKHVpbnQ4X3QgKikgbWFsbG9j KHNpemVvZih1aW50OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsKKyAgICB2dmNjLT5w dGwuc3VibGF5ZXJfbGV2ZWxfaWRjID0KKyAgICAgICAgKHVpbnQ4X3QgKikgbWFsbG9jKHNpemVv Zih1aW50OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsKKworICAgIG1lbXNldCh2dmNj LT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZywgMCwKKyAgICAgICAgICAgc2l6 ZW9mKHVpbnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOworICAgIG1lbXNldCh2dmNj LT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjLCAwLAorICAgICAgICAgICBzaXplb2YodWludDhfdCkg KiB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMSk7CisKKyAgICBmb3IgKGludCBpID0gdnZjYy0+bnVt X3N1YmxheWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHZ2Y2MtPnB0bC5wdGxfc3Vi bGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldIHw9CisgICAgICAgICAgICBwdGwtPnB0bF9zdWJs YXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV07CisgICAgICAgIGlmICh2dmNjLT5wdGwucHRsX3N1 YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSkgeworICAgICAgICAgICAgdnZjYy0+cHRsLnN1 YmxheWVyX2xldmVsX2lkY1tpXSA9CisgICAgICAgICAgICAgICAgRkZNQVgodnZjYy0+cHRsLnN1 YmxheWVyX2xldmVsX2lkY1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICBwdGwtPnN1YmxheWVy X2xldmVsX2lkY1tpXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaSA9PSB2 dmNjLT5udW1fc3VibGF5ZXJzIC0gMSkgeworICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJs YXllcl9sZXZlbF9pZGNbaV0gPSB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGM7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9p ZGNbaV0gPQorICAgICAgICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRj W2kgKyAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZ2Y2MtPnB0 bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5wdGxfbnVt X3N1Yl9wcm9maWxlcywgcHRsLT5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgaWYgKHZ2Y2Mt PnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcykgeworICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9z dWJfcHJvZmlsZV9pZGMgPQorICAgICAgICAgICAgKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2Yo dWludDMyX3QpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjYy0+cHRsLnB0 bF9udW1fc3ViX3Byb2ZpbGVzKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2dmNjLT5w dGwucHRsX251bV9zdWJfcHJvZmlsZXM7IGkrKykgeworICAgICAgICAgICAgdnZjYy0+cHRsLmdl bmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldID0KKyAgICAgICAgICAgICAgICBwdGwtPmdlbmVyYWxf c3ViX3Byb2ZpbGVfaWRjW2ldOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KKyAgICAgICAgICAgICh1aW50MzJfdCAq KSBtYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2dmNj X3BhcnNlX3B0bChHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHByb2ZpbGVUaWVyUHJlc2VudEZsYWcsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3N1Yl9sYXllcnNfbWludXMxKQorewor ICAgIFZWQ0NQcm9maWxlVGllckxldmVsIGdlbmVyYWxfcHRsOworICAgIGludCBqOworCisgICAg aWYgKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAgZ2VuZXJhbF9wdGwucHJvZmls ZV9pZGMgPSBnZXRfYml0cyhnYiwgNyk7CisgICAgICAgIGdlbmVyYWxfcHRsLnRpZXJfZmxhZyA9 IGdldF9iaXRzMShnYik7CisgICAgfQorICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxfbGV2ZWxfaWRj ID0gZ2V0X2JpdHMoZ2IsIDgpOworCisgICAgZ2VuZXJhbF9wdGwucHRsX2ZyYW1lX29ubHlfY29u c3RyYWludF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBnZW5lcmFsX3B0bC5wdGxfbXVsdGls YXllcl9lbmFibGVkX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIGlmIChwcm9maWxlVGllclBy ZXNlbnRGbGFnKSB7ICAgICAgIC8vIHBhcnNlIGNvbnN0cmFpbnQgaW5mbworICAgICAgICBnZW5l cmFsX3B0bC5nY2lfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgaWYgKGdl bmVyYWxfcHRsLmdjaV9wcmVzZW50X2ZsYWcpIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGog PCA4OyBqKyspCisgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3Ry YWludHNbal0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgICAgICBnZW5lcmFsX3B0bC5nY2lf Z2VuZXJhbF9jb25zdHJhaW50c1s4XSA9IDA7CisgICAgICAgICAgICBnZW5lcmFsX3B0bC5nY2lf Z2VuZXJhbF9jb25zdHJhaW50c1s4XSA9IGdldF9iaXRzKGdiLCA3KTsKKworICAgICAgICAgICAg Z2VuZXJhbF9wdGwuZ2NpX251bV9yZXNlcnZlZF9iaXRzID0gZ2V0X2JpdHMoZ2IsIDgpOworICAg ICAgICAgICAgc2tpcF9iaXRzKGdiLCBnZW5lcmFsX3B0bC5nY2lfbnVtX3Jlc2VydmVkX2JpdHMp OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChnYi0+aW5kZXggJSA4ICE9IDApCisgICAgICAg ICAgICBza2lwX2JpdHMxKGdiKTsKKyAgICB9CisKKyAgICBnZW5lcmFsX3B0bC5wdGxfc3VibGF5 ZXJfbGV2ZWxfcHJlc2VudF9mbGFnID0KKyAgICAgICAgKHVpbnQ4X3QgKikgbWFsbG9jKHNpemVv Zih1aW50OF90KSAqIG1heF9zdWJfbGF5ZXJzX21pbnVzMSk7CisgICAgZm9yIChpbnQgaSA9IG1h eF9zdWJfbGF5ZXJzX21pbnVzMSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGdlbmVyYWxf cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOwor ICAgIH0KKyAgICB3aGlsZSAoZ2ItPmluZGV4ICUgOCAhPSAwKQorICAgICAgICBza2lwX2JpdHMx KGdiKTsKKworICAgIGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVsX2lkYyA9CisgICAgICAgICh1 aW50OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiBtYXhfc3ViX2xheWVyc19taW51czEp OworICAgIGZvciAoaW50IGkgPSBtYXhfc3ViX2xheWVyc19taW51czEgLSAxOyBpID49IDA7IGkt LSkgeworICAgICAgICBpZiAoZ2VuZXJhbF9wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRf ZmxhZ1tpXSkKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSA9 IGdldF9iaXRzKGdiLCA4KTsKKyAgICB9CisKKyAgICBpZiAocHJvZmlsZVRpZXJQcmVzZW50Rmxh ZykgeworICAgICAgICBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyA9IGdldF9iaXRz KGdiLCA4KTsKKyAgICAgICAgaWYgKGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKSB7 CisgICAgICAgICAgICBnZW5lcmFsX3B0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyA9CisgICAg ICAgICAgICAgICAgKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2YodWludDMyX3QpICoKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3By b2ZpbGVzKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2VuZXJhbF9wdGwucHRs X251bV9zdWJfcHJvZmlsZXM7IGkrKykgeworICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdl bmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOworICAgICAg ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2VuZXJh bF9zdWJfcHJvZmlsZV9pZGMgPQorICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKSBtYWxsb2Mo c2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2dmNjX3VwZGF0ZV9w dGwodnZjYywgJmdlbmVyYWxfcHRsKTsKKworICAgIGZyZWUoZ2VuZXJhbF9wdGwucHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZyk7CisgICAgZnJlZShnZW5lcmFsX3B0bC5zdWJsYXllcl9s ZXZlbF9pZGMpOworICAgIGZyZWUoZ2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMp OworfQorCitzdGF0aWMgaW50IHZ2Y2NfcGFyc2VfdnBzKEdldEJpdENvbnRleHQgKmdiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZj YykKK3sKKyAgICB1bnNpZ25lZCBpbnQgdnBzX21heF9sYXllcnNfbWludXMxOworICAgIHVuc2ln bmVkIGludCB2cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxOworICAgIHVuc2lnbmVkIGludCB2cHNf ZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWc7CisgICAgdW5zaWduZWQgaW50IHZwc19h bGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZzsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX2VhY2hfbGF5 ZXJfaXNfYW5fb2xzX2ZsYWc7CisgICAgdW5zaWduZWQgaW50IHZwc19vbHNfbW9kZV9pZGM7CisK KyAgICB1bnNpZ25lZCBpbnQgKnZwc19wdF9wcmVzZW50X2ZsYWc7CisgICAgdW5zaWduZWQgaW50 ICp2cHNfcHRsX21heF90aWQ7CisgICAgdW5zaWduZWQgaW50IHZwc19udW1fcHRsc19taW51czEg PSAwOworCisgICAgLyoKKyAgICAgKiB2cHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZCB1KDQpCisg ICAgICovCisgICAgc2tpcF9iaXRzKGdiLCA0KTsKKworICAgIHZwc19tYXhfbGF5ZXJzX21pbnVz MSA9IGdldF9iaXRzKGdiLCA2KTsKKyAgICB2cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxID0gZ2V0 X2JpdHMoZ2IsIDMpOworCisgICAgLyoKKyAgICAgKiBudW1UZW1wb3JhbExheWVycyBncmVhdGVy IHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdoaWNoIHRoaXMKKyAgICAgKiBj b25maWd1cmF0aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUgYW5kIHRo ZSBjb250YWluZWQKKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJlZmVy cmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1sYXllciBvcgorICAgICAqIHN1Yi1sYXllciBpbiBJU08v SUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5ZXJzLiBWYWx1ZSAxCisgICAg ICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSBpcyBub3QgdGVtcG9yYWxseSBzY2FsYWJsZS4g VmFsdWUgMCBpbmRpY2F0ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGUg c3RyZWFtIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUuCisgICAgICovCisgICAgdnZjYy0+bnVtX3N1 YmxheWVycyA9IEZGTUFYKHZ2Y2MtPm51bV9zdWJsYXllcnMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZwc19tYXhfc3ViX2xheWVyc19taW51czEgKyAxKTsKKworICAgIGlmICh2 cHNfbWF4X2xheWVyc19taW51czEgPiAwICYmIHZwc19tYXhfc3ViX2xheWVyc19taW51czEgPiAw KQorICAgICAgICB2cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWcgPSBnZXRfYml0 czEoZ2IpOworICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEgPiAwKQorICAgICAgICB2cHNf YWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPD0gdnBzX21heF9sYXllcnNfbWludXMxOyBpKyspIHsKKyAgICAgICAgc2tp cF9iaXRzKGdiLCA2KTsgICAgLy92cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWdb aV0KKyAgICAgICAgaWYgKGkgPiAwICYmICF2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWcp IHsKKyAgICAgICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSB7ICAgIC8vIHZwc19pbmRlcGVuZGFu dF9sYXllcl9mbGFnCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZwc19tYXhfdGlkX3Jl Zl9wcmVzZW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgICAgIGZvciAoaW50 IGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2cHNfbWF4X3Rp ZF9yZWZfcHJlc2VudF9mbGFnICYmIGdldF9iaXRzMShnYikpICAvLyB2cHNfZGlyZWN0X3JlZl9s YXllcl9mbGFnW2ldW2pdCisgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDMp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2cHNfbWF4X3RpZF9pbF9yZWZfcGlj c19wbHVzMQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKworICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEgPiAwKSB7CisgICAgICAgIGlmICh2 cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWcpCisgICAgICAgICAgICB2cHNfZWFjaF9sYXll cl9pc19hbl9vbHNfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgIGlmICh2cHNfZWFjaF9s YXllcl9pc19hbl9vbHNfZmxhZykgeworICAgICAgICAgICAgaWYgKCF2cHNfYWxsX2luZGVwZW5k YW50X2xheWVyX2ZsYWcpCisgICAgICAgICAgICAgICAgdnBzX29sc19tb2RlX2lkYyA9IGdldF9i aXRzKGdiLCAyKTsKKyAgICAgICAgICAgIGlmICh2cHNfb2xzX21vZGVfaWRjID09IDIpIHsKKyAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdnBzX251bV9vdXRwdXRfbGF5ZXJfc2V0c19taW51 czIgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkg PD0gdnBzX251bV9vdXRwdXRfbGF5ZXJfc2V0c19taW51czIgKyAxOyBpKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gdnBzX21heF9sYXllcnNfbWludXMxOyBq KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIHZwc19udW1fcHRsc19taW51czEgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgfQor CisgICAgdnBzX3B0X3ByZXNlbnRfZmxhZyA9CisgICAgICAgICh1bnNpZ25lZCBpbnQgKikgbWFs bG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHZwc19udW1fcHRsc19taW51czEgKyAxKSk7CisgICAgdnBzX3B0bF9tYXhfdGlkID0KKyAg ICAgICAgKHVuc2lnbmVkIGludCAqKSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnBzX251bV9wdGxzX21pbnVzMSArIDEpKTsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8PSB2cHNfbnVtX3B0bHNfbWludXMxOyBpKyspIHsKKyAg ICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSA9IGdl dF9iaXRzMShnYik7CisgICAgICAgIGlmICghdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3Rp ZF9mbGFnKQorICAgICAgICAgICAgdnBzX3B0bF9tYXhfdGlkW2ldID0gZ2V0X2JpdHMoZ2IsIDMp OworICAgIH0KKworICAgIHdoaWxlIChnYi0+aW5kZXggJSA4ICE9IDApCisgICAgICAgIHNraXBf Yml0czEoZ2IpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gdnBzX251bV9wdGxzX21pbnVz MTsgaSsrKSB7CisgICAgICAgIHZ2Y2NfcGFyc2VfcHRsKGdiLCB2dmNjLCB2cHNfcHRfcHJlc2Vu dF9mbGFnW2ldLCB2cHNfcHRsX21heF90aWRbaV0pOworICAgIH0KKworICAgIGZyZWUodnBzX3B0 X3ByZXNlbnRfZmxhZyk7CisgICAgZnJlZSh2cHNfcHRsX21heF90aWQpOworCisgICAgLyogbm90 aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50ICovCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgdnZjY19wYXJzZV9zcHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQor eworICAgIHVuc2lnbmVkIGludCBzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxLCBsb2cyX2N0dV9z aXplX21pbnVzNTsKKyAgICAvL3Vuc2lnbmVkIGludCBudW1fc2hvcnRfdGVybV9yZWZfcGljX3Nl dHMsIG51bV9kZWx0YV9wb2NzW1ZWQ19NQVhfUkVGX1BJQ19MSVNUU107CisgICAgLy91bnNpZ25l ZCBpbnQgc3BzX2Nocm9tYV9mb3JtYXRfaWRjOworICAgIHVuc2lnbmVkIGludCBzcHNfc3VicGlj X3NhbWVfc2l6ZV9mbGFnLCBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUsCisgICAg ICAgIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlOworICAgIHVuc2lnbmVkIGludCBz cHNfaW5kZXBlbmRhbnRfc3VicGljc19mbGFnOworICAgIHVuc2lnbmVkIGludCBmbGFnOworCisg ICAgc2tpcF9iaXRzKGdiLCA4KTsgIC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAmJiBzcHNf dmlkZW9fcGFyYW1ldGVyX3NldF9pZAorICAgIHNwc19tYXhfc3ViX2xheWVyc19taW51czEgPSBn ZXRfYml0cyhnYiwgMyk7CisKKyAgICAvKgorICAgICAqIG51bVRlbXBvcmFsTGF5ZXJzIGdyZWF0 ZXIgdGhhbiAxIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gdG8gd2hpY2ggdGhpcworICAgICAq IGNvbmZpZ3VyYXRpb24gcmVjb3JkIGFwcGxpZXMgaXMgdGVtcG9yYWxseSBzY2FsYWJsZSBhbmQg dGhlIGNvbnRhaW5lZAorICAgICAqIG51bWJlciBvZiB0ZW1wb3JhbCBsYXllcnMgKGFsc28gcmVm ZXJyZWQgdG8gYXMgdGVtcG9yYWwgc3ViLWxheWVyIG9yCisgICAgICogc3ViLWxheWVyIGluIElT Ty9JRUMgMjMwMDgtMikgaXMgZXF1YWwgdG8gbnVtVGVtcG9yYWxMYXllcnMuIFZhbHVlIDEKKyAg ICAgKiBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIGlzIG5vdCB0ZW1wb3JhbGx5IHNjYWxhYmxl LiBWYWx1ZSAwIGluZGljYXRlcworICAgICAqIHRoYXQgaXQgaXMgdW5rbm93biB3aGV0aGVyIHRo ZSBzdHJlYW0gaXMgdGVtcG9yYWxseSBzY2FsYWJsZS4KKyAgICAgKi8KKyAgICB2dmNjLT5udW1f c3VibGF5ZXJzID0gRkZNQVgodnZjYy0+bnVtX3N1YmxheWVycywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMSArIDEpOworCisgICAgdnZj Yy0+Y2hyb21hX2Zvcm1hdF9pZGMgPSBnZXRfYml0cyhnYiwgMik7CisgICAgbG9nMl9jdHVfc2l6 ZV9taW51czUgPSBnZXRfYml0cyhnYiwgMik7CisKKyAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgICAg ICAgICAgLy9zcHNfcHRsX2RwYl9ocmRfcGFyYW1zX3ByZXNlbnRfZmxhZworICAgICAgICB2dmNj X3BhcnNlX3B0bChnYiwgdnZjYywgMSwgc3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMSk7CisKKyAg ICBmbGFnID0gZ2V0X2JpdHMoZ2IsIDEpOyAgICAgLy9za2lwX2JpdHMxKGdiKTsgLy9zcHNfZ2Ry X2VuYWJsZWRfZmxhZworICAgIGZsYWcgPSBnZXRfYml0cyhnYiwgMSk7ICAgICAvL3Nwc19yZWZf cGljX3Jlc2FtcGxpbmdfZW5hYmxlZF9mbGFnCisgICAgaWYgKGZsYWcpIHsgICAgICAgICAgICAg ICAgIC8vc3BzX3JlZl9waWNfcmVzYW1wbGluZ19lbmFibGVkX2ZsYWcKKyAgICAgICAgZmxhZyA9 IGdldF9iaXRzKGdiLCAxKTsgLy9za2lwX2JpdHMxKGdiKTsgLy9zcHNfcmVzX2NoYW5nZV9pbl9j bHZzX2FsbG93ZWRfZmxhZworICAgIH0KKworICAgIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFf c2FtcGxlID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2dmNjLT5tYXhfcGljdHVyZV93 aWR0aCA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJlX3dpZHRoLCBzcHNfcGljX3dp ZHRoX21heF9pbl9sdW1hX3NhbXBsZSk7CisgICAgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFf c2FtcGxlID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2dmNjLT5tYXhfcGljdHVyZV9o ZWlnaHQgPQorICAgICAgICBGRk1BWCh2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQsIHNwc19waWNf aGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZSk7CisKKyAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgewor ICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fbGVmdF9vZmZz ZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX3JpZ2h0 X29mZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5f dG9wX29mZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93 aW5fYm90dG9tX29mZnNldAorICAgIH0KKworICAgIGlmIChnZXRfYml0czEoZ2IpKSB7ICAgICAg ICAvLyBzcHNfc3VicGljX2luZm9fcHJlc2VudF9mbGFnCisgICAgICAgIHVuc2lnbmVkIGludCBz cHNfbnVtX3N1YnBpY3NfbWludXMxID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICAgICAg aWYgKHNwc19udW1fc3VicGljc19taW51czEgPiAwKSB7ICAgICAgIC8vIHNwc19udW1fc3VicGlj c19taW51czEKKyAgICAgICAgICAgIHNwc19pbmRlcGVuZGFudF9zdWJwaWNzX2ZsYWcgPSBnZXRf Yml0czEoZ2IpOworICAgICAgICAgICAgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZyA9IGdldF9i aXRzMShnYik7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7CisgICAgICAgICAg ICAgc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDAgJiYgaSA8PSBzcHNfbnVtX3N1YnBpY3NfbWlu dXMxOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZyB8 fCBpID09IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gRkZNSU4obG9nMl9jdHVfc2l6 ZV9taW51czUgKyA1LCAxNik7CisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIHNwc19waWNf d2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlID4gMTI4KQorICAgICAgICAgICAgICAgICAgICBza2lw X2JpdHMoZ2IsIGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIHNwc19waWNfaGVp Z2h0X21heF9pbl9sdW1hX3NhbXBsZSA+IDEyOCkKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9i aXRzKGdiLCBsZW4pOworICAgICAgICAgICAgICAgIGlmIChpIDwgc3BzX251bV9zdWJwaWNzX21p bnVzMQorICAgICAgICAgICAgICAgICAgICAmJiBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3Nh bXBsZSA+IDEyOCkKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBsZW4pOworICAg ICAgICAgICAgICAgIGlmIChpIDwgc3BzX251bV9zdWJwaWNzX21pbnVzMQorICAgICAgICAgICAg ICAgICAgICAmJiBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCisgICAg ICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmICghc3BzX2luZGVwZW5kYW50X3N1YnBpY3NfZmxhZykgeworICAgICAgICAgICAg ICAgIHNraXBfYml0cyhnYiwgMik7ICAgICAgIC8vIHNwc19zdWJwaWNfdHJlYXRlZF9hc19waWNf ZmxhZyAmJiBzcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3N1YnBpY19lbmFibGVkX2ZsYWcKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBz cHNfc3VicGljX2lkX2xlbl9taW51czEKKyAgICAgICAgaWYgKGdldF9iaXRzMShnYikpIHsgICAg Ly8gc3BzX3N1YnBpY19pZF9tYXBwaW5nX2V4cGxpY2l0bHlfc2lnbmFsbGVkX2ZsYWcKKyAgICAg ICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSAgLy8gc3BzX3N1YnBpY19pZF9tYXBwaW5nX3ByZXNl bnRfZmxhZworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHNwc19udW1fc3Vi cGljc19taW51czE7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMxKGdiKTsg ICAgIC8vIHNwc19zdWJwaWNfaWRbaV0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisgICAgdnZjYy0+Yml0X2RlcHRoX21pbnVzOCA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7 CisKKyAgICAvKiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMgcG9pbnQgKi8KKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dmNjX3BhcnNlX3BwcyhHZXRCaXRDb250ZXh0 ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25S ZWNvcmQgKnZ2Y2MpCit7CisKKyAgICAvLyBOb3RoaW5nIG9mIGltcG9ydGFuY2UgdG8gcGFyc2Ug aW4gUFBTCisgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50ICov CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5hbF91bml0X3BhcnNlX2hlYWRlcihH ZXRCaXRDb250ZXh0ICpnYiwgdWludDhfdCAqbmFsX3R5cGUpCit7CisgICAgLyoKKyAgICAgKiBm b3JiaWRkZW5femVyb19iaXQgICAgdSgxKQorICAgICAqIG51aF9yZXNlcnZlZF96ZXJvX2JpdCB1 KDEpCisgICAgICogbnVoX2xheWVyX2lkICAgICAgICAgIHUoNikKKyAgICAgKi8KKyAgICBza2lw X2JpdHMoZ2IsIDgpOworICAgICpuYWxfdHlwZSA9IGdldF9iaXRzKGdiLCA1KTsKKworICAgIC8q CisgICAgICogbnVoX3RlbXBvcmFsX2lkX3BsdXMxIHUoMykKKyAgICAgKi8KKyAgICBza2lwX2Jp dHMoZ2IsIDMpOworfQorCitzdGF0aWMgaW50IHZ2Y2NfYXJyYXlfYWRkX25hbF91bml0KHVpbnQ4 X3QgKm5hbF9idWYsIHVpbnQzMl90IG5hbF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50OF90IG5hbF90eXBlLCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlv blJlY29yZCAqdnZjYykKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQ4X3QgaW5kZXg7CisgICAg dWludDE2X3QgbnVtX25hbHVzOworICAgIFZWQ0NOQUxVbml0QXJyYXkgKmFycmF5OworCisgICAg Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgdnZjYy0+bnVtX29mX2FycmF5czsgaW5kZXgrKykKKyAg ICAgICAgaWYgKHZ2Y2MtPmFycmF5W2luZGV4XS5OQUxfdW5pdF90eXBlID09IG5hbF90eXBlKQor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoaW5kZXggPj0gdnZjYy0+bnVtX29mX2FycmF5 cykgeworICAgICAgICB1aW50OF90IGk7CisKKyAgICAgICAgcmV0ID0KKyAgICAgICAgICAgIGF2 X3JlYWxsb2NwX2FycmF5KCZ2dmNjLT5hcnJheSwgaW5kZXggKyAxLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKFZWQ0NOQUxVbml0QXJyYXkpKTsKKyAgICAgICAgaWYgKHJl dCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIGZvciAoaSA9IHZ2Y2Mt Pm51bV9vZl9hcnJheXM7IGkgPD0gaW5kZXg7IGkrKykKKyAgICAgICAgICAgIG1lbXNldCgmdnZj Yy0+YXJyYXlbaV0sIDAsIHNpemVvZihWVkNDTkFMVW5pdEFycmF5KSk7CisgICAgICAgIHZ2Y2Mt Pm51bV9vZl9hcnJheXMgPSBpbmRleCArIDE7CisgICAgfQorCisgICAgYXJyYXkgPSAmdnZjYy0+ YXJyYXlbaW5kZXhdOworICAgIG51bV9uYWx1cyA9IGFycmF5LT5udW1fbmFsdXM7CisKKyAgICBy ZXQgPSBhdl9yZWFsbG9jcF9hcnJheSgmYXJyYXktPm5hbF91bml0LCBudW1fbmFsdXMgKyAxLCBz aXplb2YodWludDhfdCAqKSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7 CisKKyAgICByZXQgPQorICAgICAgICBhdl9yZWFsbG9jcF9hcnJheSgmYXJyYXktPm5hbF91bml0 X2xlbmd0aCwgbnVtX25hbHVzICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KHVpbnQxNl90KSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAg ICBhcnJheS0+bmFsX3VuaXRbbnVtX25hbHVzXSA9IG5hbF9idWY7CisgICAgYXJyYXktPm5hbF91 bml0X2xlbmd0aFtudW1fbmFsdXNdID0gbmFsX3NpemU7CisgICAgYXJyYXktPk5BTF91bml0X3R5 cGUgPSBuYWxfdHlwZTsKKyAgICBhcnJheS0+bnVtX25hbHVzKys7CisKKyAgICAvKgorICAgICog V2hlbiB0aGUgc2FtcGxlIGVudHJ5IG5hbWUgaXMgJ3Z2YzEnLCB0aGUgZm9sbG93aW5nIGFwcGxp ZXM6CisgICAgKiDigKIgVGhlIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVzcyBzaGFsbCBiZSBl cXVhbCB0byAxIGZvciBhcnJheXMgb2YgU1BTLAorICAgICogICBhbmQgUFBTIE5BTCB1bml0cy4K KyAgICAqIOKAoiBJZiBhIFZWQyBiaXRzdHJlYW0gaW5jbHVkZXMgRENJIE5BTCB1bml0KHMpLCB0 aGUgdmFsdWUgb2YKKyAgICAqICAgYXJyYXlfY29tcGxldGVuZXNzIHNoYWxsIGJlIGVxdWFsIHRv IDEgZm9yIHRoZSBhcnJheSBvZiBEQ0kgdW5pdHMuCisgICAgKiAgIE90aGVyd2lzZSwgTkFMX3Vu aXRfdHlwZSBzaGFsbCBub3QgaW5kaWNhdGUgRENJIE5BTCB1bml0cy4KKyAgICAqIOKAoiBJZiBh IFZWQyBiaXRzdHJlYW0gaW5jbHVkZXMgVlBTIE5BTCB1bml0KHMpLCB0aGUgdmFsdWUgb2YKKyAg ICAqICAgYXJyYXlfY29tcGxldGVuZXNzIHNoYWxsIGJlIGVxdWFsIHRvIDEgZm9yIHRoZSBhcnJh eSBvZiBWUFMgTkFMIHVuaXRzLgorICAgICogICBPdGhlcndpc2UsIE5BTF91bml0X3R5cGUgc2hh bGwgbm90IGluZGljYXRlIFZQUyBOQUwgdW5pdHMuCisgICAgKiBXaGVuIHRoZSB2YWx1ZSBvZiBh cnJheV9jb21wbGV0ZW5lc3MgaXMgZXF1YWwgdG8gMSBmb3IgYW4gYXJyYXkgb2YgYQorICAgICog cGFydGljdWxhciBOQUxfdW5pdF90eXBlIHZhbHVlLCBOQUwgdW5pdHMgb2YgdGhhdCBOQUxfdW5p dF90eXBlIHZhbHVlCisgICAgKiBjYW5ub3QgYmUgdXBkYXRlZCB3aXRob3V0IGNhdXNpbmcgYSBk aWZmZXJlbnQgc2FtcGxlIGVudHJ5IHRvIGJlIHVzZWQuCisgICAgKiBXaGVuIHRoZSBzYW1wbGUg ZW50cnkgbmFtZSBpcyAndnZpMScsIHRoZSB2YWx1ZSBvZiBhcnJheV9jb21wbGV0ZW5lc3MKKyAg ICAqIG9mIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGFycmF5cyBzaGFsbCBiZSBlcXVh bCB0byAwOgorICAgICAg4oCiIFRoZSBhcnJheSBvZiBEQ0kgTkFMIHVuaXRzLCBpZiBwcmVzZW50 LgorICAgICAg4oCiIFRoZSBhcnJheSBvZiBWUFMgTkFMIHVuaXRzLCBpZiBwcmVzZW50LgorICAg ICAg4oCiIFRoZSBhcnJheSBvZiBTUFMgTkFMIHVuaXRzCisgICAgICDigKIgVGhlIGFycmF5IG9m IFBQUyBOQUwgdW5pdHMuCisgICAgKi8KKyAgICBpZiAobmFsX3R5cGUgPT0gVlZDX1ZQU19OVVQg fHwgbmFsX3R5cGUgPT0gVlZDX1NQU19OVVQgfHwKKyAgICAgICAgbmFsX3R5cGUgPT0gVlZDX1BQ U19OVVQgfHwgbmFsX3R5cGUgPT0gVlZDX0RDSV9OVVQgKQorICAgICAgICBhcnJheS0+YXJyYXlf Y29tcGxldGVuZXNzID0gcHNfYXJyYXlfY29tcGxldGVuZXNzOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgdnZjY19hZGRfbmFsX3VuaXQodWludDhfdCAqbmFsX2J1ZiwgdWludDMy X3QgbmFsX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwc19hcnJheV9j b21wbGV0ZW5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25m aWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIGludCByZXQgPSAwOworICAgIEdldEJpdENv bnRleHQgZ2JjOworICAgIHVpbnQ4X3QgbmFsX3R5cGU7CisgICAgdWludDhfdCAqcmJzcF9idWY7 CisgICAgdWludDMyX3QgcmJzcF9zaXplOworCisgICAgcmJzcF9idWYgPSBmZl9uYWxfdW5pdF9l eHRyYWN0X3Jic3AobmFsX2J1ZiwgbmFsX3NpemUsICZyYnNwX3NpemUsIDIpOworICAgIGlmICgh cmJzcF9idWYpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3Rv IGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBpbml0X2dldF9iaXRzOCgmZ2JjLCByYnNwX2J1Ziwg cmJzcF9zaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICBu YWxfdW5pdF9wYXJzZV9oZWFkZXIoJmdiYywgJm5hbF90eXBlKTsKKworICAgIC8qCisgICAgICog Tm90ZTogb25seSAnZGVjbGFyYXRpdmUnIFNFSSBtZXNzYWdlcyBhcmUgYWxsb3dlZCBpbgorICAg ICAqIHZ2Y2MuIFBlcmhhcHMgdGhlIFNFSSBwbGF5bG9hZCB0eXBlIHNob3VsZCBiZSBjaGVja2Vk CisgICAgICogYW5kIG5vbi1kZWNsYXJhdGl2ZSBTRUkgbWVzc2FnZXMgZGlzY2FyZGVkPworICAg ICAqLworICAgIHN3aXRjaCAobmFsX3R5cGUpIHsKKyAgICBjYXNlIFZWQ19PUElfTlVUOgorICAg IGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAgICBjYXNlIFZWQ19Q UFNfTlVUOgorICAgIGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgorICAgIGNhc2UgVlZDX1NVRkZJ WF9TRUlfTlVUOgorICAgICAgICByZXQgPSB2dmNjX2FycmF5X2FkZF9uYWxfdW5pdChuYWxfYnVm LCBuYWxfc2l6ZSwgbmFsX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBzX2FycmF5X2NvbXBsZXRlbmVzcywgdnZjYyk7CisgICAgICAgIGlmIChyZXQgPCAwKQor ICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19W UFNfTlVUKQorICAgICAgICAgICAgcmV0ID0gdnZjY19wYXJzZV92cHMoJmdiYywgdnZjYyk7Cisg ICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19TUFNfTlVUKQorICAgICAgICAgICAgcmV0 ID0gdnZjY19wYXJzZV9zcHMoJmdiYywgdnZjYyk7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBl ID09IFZWQ19QUFNfTlVUKQorICAgICAgICAgICAgcmV0ID0gdnZjY19wYXJzZV9wcHMoJmdiYywg dnZjYyk7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19PUElfTlVUKSB7CisgICAg ICAgICAgICAvLyBub3QgeWV0IHN1cHBvcnRlZAorICAgICAgICB9CisgICAgICAgIGlmIChyZXQg PCAwKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6 CisgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGdvdG8gZW5kOwor ICAgIH0KKworICBlbmQ6CisgICAgYXZfZnJlZShyYnNwX2J1Zik7CisgICAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQgdnZjY19pbml0KFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3Jk ICp2dmNjKQoreworICAgIG1lbXNldCh2dmNjLCAwLCBzaXplb2YoVlZDRGVjb2RlckNvbmZpZ3Vy YXRpb25SZWNvcmQpKTsKKyAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUgPSAzOyAgICAgICAv LyA0IGJ5dGVzCisKKyAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDE7 CisKKyAgICB2dmNjLT5wdGxfcHJlc2VudF9mbGFnID0gMTsKK30KKworc3RhdGljIHZvaWQgdnZj Y19jbG9zZShWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1aW50 OF90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKSB7 CisgICAgICAgIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyA9IDA7CisgICAgICAgIGF2X2ZyZWVw KCZ2dmNjLT5hcnJheVtpXS5uYWxfdW5pdCk7CisgICAgICAgIGF2X2ZyZWVwKCZ2dmNjLT5hcnJh eVtpXS5uYWxfdW5pdF9sZW5ndGgpOworICAgIH0KKworICAgIGZyZWUodnZjYy0+cHRsLnB0bF9z dWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUodnZjYy0+cHRsLnN1YmxheWVy X2xldmVsX2lkYyk7CisgICAgZnJlZSh2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMp OworCisgICAgdnZjYy0+bnVtX29mX2FycmF5cyA9IDA7CisgICAgYXZfZnJlZXAoJnZ2Y2MtPmFy cmF5KTsKK30KKworc3RhdGljIGludCB2dmNjX3dyaXRlKEFWSU9Db250ZXh0ICpwYiwgVlZDRGVj b2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdWludDhfdCBpOworICAgIHVp bnQxNl90IGosIHZwc19jb3VudCA9IDAsIHNwc19jb3VudCA9IDAsIHBwc19jb3VudCA9IDA7Cisg ICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKyAgICAvKgorICAgICAqIEl0J3MgdW5jbGVh ciBob3cgdG8gcHJvcGVybHkgY29tcHV0ZSB0aGVzZSBmaWVsZHMsIHNvCisgICAgICogbGV0J3Mg YWx3YXlzIHNldCB0aGVtIHRvIHZhbHVlcyBtZWFuaW5nICd1bnNwZWNpZmllZCcuCisgICAgICov CisgICAgdnZjYy0+YXZnX2ZyYW1lX3JhdGUgPSAwOworICAgIHZ2Y2MtPmNvbnN0YW50X2ZyYW1l X3JhdGUgPSAxOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAg Imxlbmd0aFNpemVNaW51c09uZTogICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAg ICAgICAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUpOworICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfVFJBQ0UsCisgICAgICAgICAgICJwdGxfcHJlc2VudF9mbGFnOiAgICAgICAgICAgICAgICAg ICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsX3ByZXNlbnRfZmxhZyk7Cisg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm9sc19pZHg6ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwgdnZjYy0+b2xzX2lkeCk7Cisg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9zdWJsYXllcnM6 ICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5u dW1fc3VibGF5ZXJzKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAg ICAiY29uc3RhbnRfZnJhbWVfcmF0ZTogICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisg ICAgICAgICAgIHZ2Y2MtPmNvbnN0YW50X2ZyYW1lX3JhdGUpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJjaHJvbWFfZm9ybWF0X2lkYzogICAgICAgICAgICAg ICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+Y2hyb21hX2Zvcm1hdF9pZGMp OworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImJpdF9kZXB0 aF9taW51czg6ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2 dmNjLT5iaXRfZGVwdGhfbWludXM4KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAor ICAgICAgICAgICAibnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzogICAgICAgICAgICUiIFBSSXU4 ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsK KyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiZ2VuZXJhbF9wcm9m aWxlX2lkYzogICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2Mt PnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNF LAorICAgICAgICAgICAiZ2VuZXJhbF90aWVyX2ZsYWc6ICAgICAgICAgICAgICAgICAgICUiIFBS SXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyk7CisgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImdlbmVyYWxfbGV2ZWxfaWRj OiAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwu Z2VuZXJhbF9sZXZlbF9pZGMpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAg ICAgICAgICJwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc6ICAgICAgJSIgUFJJdTggIlxu IiwKKyAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyk7 CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgInB0bF9tdWx0aWxh eWVyX2VuYWJsZWRfZmxhZzogICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNj LT5wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwg dnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm87IGkrKykgeworICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgImdlbmVyYWxfY29uc3RyYWlu dF9pbmZvWyVkXTogICAgICAgICAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2 Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1tpXSk7CisgICAgfQorCisgICAgZm9yIChp ID0gMDsgaSA8IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxOyBpKyspIHsKKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJwdGxfc3VibGF5ZXJfbGV2ZWxf cHJlc2VudF9mbGFnWyUiIFBSSXU4ICJdOiAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAg ICAgIHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJzdWJsYXllcl9s ZXZlbF9pZGNbJSIgUFJJdTggIl06ICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAgICB2 dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICB9CisKKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibnVtX3N1Yl9wcm9maWxlczogICAgICAgICAg ICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1 Yl9wcm9maWxlcyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1fc3Vi X3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAg ICAgICAgICAgICAgICJnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1slIiBQUkl1OCAiXTogICAgICAg ICAlIiBQUkl4MzIgIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1 Yl9wcm9maWxlX2lkY1tpXSk7CisgICAgfQorCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFD RSwKKyAgICAgICAgICAgIm1heF9waWN0dXJlX3dpZHRoOiAgICAgICAgICAgICAgICAgICAlIiBQ Ukl1MTYgIlxuIiwKKyAgICAgICAgICAgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOworICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJtYXhfcGljdHVyZV9oZWlnaHQ6 ICAgICAgICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPm1heF9w aWN0dXJlX2hlaWdodCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAg ICAgImF2Z19mcmFtZV9yYXRlOiAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwK KyAgICAgICAgICAgdnZjYy0+YXZnX2ZyYW1lX3JhdGUpOworCisgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9vZl9hcnJheXM6ICAgICAgICAgICAgICAgICAg ICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzKTsKKyAg ICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKSB7CisgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAiYXJyYXlfY29tcGxldGVu ZXNzWyUiIFBSSXU4ICJdOiAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAg ICAgICAgICB2dmNjLT5hcnJheVtpXS5hcnJheV9jb21wbGV0ZW5lc3MpOworICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgIk5BTF91bml0X3R5cGVbJSIg UFJJdTggIl06ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLCBpLAorICAgICAgICAg ICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSk7CisgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAibnVtX25hbHVzWyUiIFBSSXU4ICJdOiAg ICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLCBpLAorICAgICAgICAgICAgICAg dnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzKTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHZ2Y2Mt PmFycmF5W2ldLm51bV9uYWx1czsgaisrKQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19UUkFDRSwKKyAgICAgICAgICAgICAgICAgICAibmFsX3VuaXRfbGVuZ3RoWyUiIFBSSXU4ICJd WyUiIFBSSXUxNiAiXTogICAgICAgICAgICAgICAlIgorICAgICAgICAgICAgICAgICAgIFBSSXUx NiAiXG4iLCBpLCBqLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOworICAgIH0K KworICAgIC8qCisgICAgICogV2UgbmVlZCBhdCBsZWFzdCBvbmUgb2YgZWFjaDogVlBTIGFuZCBT UFMuCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkr KykKKyAgICAgICAgc3dpdGNoICh2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKSB7CisgICAg ICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgICAgICAgICB2cHNfY291bnQgKz0gdnZjYy0+YXJy YXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1NQ U19OVVQ6CisgICAgICAgICAgICBzcHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVz OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAgICAg ICAgICBwcHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor CisgICAgaWYgKCFzcHNfY291bnQgfHwgc3BzX2NvdW50ID4gVlZDX01BWF9TUFNfQ09VTlQpCisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgLyogYml0KDUpIHJlc2Vy dmVkID0g4oCYMTExMTHigJliOworICAgICAgIHVuc2lnbmVkIGludCAoMikgTGVuZ3RoU2l6ZU1p bnVzT25lCisgICAgICAgdW5zaWduZWQgaW50ICgxKSBwdGxfcHJlc2VudF9mbGFnICovCisgICAg YXZpb193OChwYiwgdnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lIDw8IDEgfCB2dmNjLT5wdGxfcHJl c2VudF9mbGFnIHwgMHhmOCk7CisKKyAgICBpZiAodnZjYy0+cHRsX3ByZXNlbnRfZmxhZykgewor ICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoOSkgb2xzX2lkeDsKKyAgICAgICAg ICogdW5zaWduZWQgaW50KDMpIG51bV9zdWJsYXllcnM7CisgICAgICAgICAqIHVuc2lnbmVkIGlu dCgyKSBjb25zdGFudF9mcmFtZV9yYXRlOworICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMikgY2hy b21hX2Zvcm1hdF9pZGM7ICAgICAqLworICAgICAgICBhdmlvX3diMTYocGIsCisgICAgICAgICAg ICAgICAgICB2dmNjLT5vbHNfaWR4IDw8IDcgfCB2dmNjLT5udW1fc3VibGF5ZXJzIDw8IDQgfCB2 dmNjLT4KKyAgICAgICAgICAgICAgICAgIGNvbnN0YW50X2ZyYW1lX3JhdGUgPDwgMiB8IHZ2Y2Mt PmNocm9tYV9mb3JtYXRfaWRjKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMykgYml0X2Rl cHRoX21pbnVzODsKKyAgICAgICAgICAgYml0KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJliOyAq LworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5iaXRfZGVwdGhfbWludXM4IDw8IDUgfCAweDFm KTsKKworICAgICAgICAvL1ZWQ1BUTFJlY29yZAorCisgICAgICAgIC8qIGJpdCgyKSByZXNlcnZl ZCA9IOKAmDAw4oCZYjsKKyAgICAgICAgICAgdW5zaWduZWQgaW50ICg2KSBudW1fYnl0ZXNfY29u c3RyYWludF9pbmZvICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5udW1fYnl0ZXNf Y29uc3RyYWludF9pbmZvICYgMHgzZik7CisKKyAgICAgICAgLyogdW5zaWduZWQgaW50ICg3KSBn ZW5lcmFsX3Byb2ZpbGVfaWRjCisgICAgICAgICAgIHVuc2lnbmVkIGludCAoMSkgZ2VuZXJhbF90 aWVyX2ZsYWcgKi8KKyAgICAgICAgYXZpb193OChwYiwKKyAgICAgICAgICAgICAgICB2dmNjLT5w dGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA8PCAxIHwgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFn KTsKKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQgKDgpIGdlbmVyYWxfbGV2ZWxfaWRjICovCisg ICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7CisKKyAgICAg ICAgLyoKKyAgICAgICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfZnJhbWVfb25seV9jb25zdHJh aW50X2ZsYWcKKyAgICAgICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfbXVsdGlsYXllcl9lbmFi bGVkX2ZsYWcKKyAgICAgICAgICogdW5zaWduZWQgaW50ICg4Km51bV9ieXRlc19jb25zdHJhaW50 X2luZm8gLTIpIGdlbmVyYWxfY29uc3RyYWludF9pbmZvICovCisgICAgICAgIGJ1ZiA9CisgICAg ICAgICAgICAodW5zaWduZWQgY2hhciAqKSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVz X2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAgICpidWYgPSB2dmNjLT5wdGwucHRsX2ZyYW1lX29u bHlfY29uc3RyYWludF9mbGFnIDw8IHZ2Y2MtPnB0bC4KKyAgICAgICAgICAgIG51bV9ieXRlc19j b25zdHJhaW50X2luZm8gKiA4IC0gMSB8IHZ2Y2MtPnB0bC4KKyAgICAgICAgICAgIHB0bF9tdWx0 aWxheWVyX2VuYWJsZWRfZmxhZyA8PCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5m byAqCisgICAgICAgICAgICA4IC0gMiB8ICp2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2lu Zm8gPj4gMjsKKyAgICAgICAgYXZpb193cml0ZShwYiwgYnVmLCB2dmNjLT5wdGwubnVtX2J5dGVz X2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAgIGZyZWUoYnVmKTsKKworICAgICAgICBpZiAodnZj Yy0+bnVtX3N1YmxheWVycyA+IDEpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgcHRsX3N1YmxheWVy X2xldmVsX3ByZXNlbnRfZmxhZ3MgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IHZ2Y2Mt Pm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIHB0bF9z dWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzID0KKyAgICAgICAgICAgICAgICAgICAgKHB0bF9z dWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzIDw8IDEgfCB2dmNjLT5wdGwuCisgICAgICAgICAg ICAgICAgICAgICBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGF2aW9fdzgocGIsIHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50 X2ZsYWdzKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSB2dmNjLT5udW1fc3Vi bGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmICh2dmNjLT5wdGwucHRs X3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSkKKyAgICAgICAgICAgICAgICBhdmlvX3c4 KHBiLCB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICAgICAgfQorCisgICAg ICAgIC8qIHVuc2lnbmVkIGludCg4KSBudW1fc3ViX3Byb2ZpbGVzOyAqLworICAgICAgICBhdmlv X3c4KHBiLCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOworCisgICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBqKyspIHsKKyAg ICAgICAgICAgIC8qIHVuc2lnbmVkIGludCgzMikgZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbal07 ICovCisgICAgICAgICAgICBhdmlvX3diMzIocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9m aWxlX2lkY1tqXSk7CisgICAgICAgIH0KKworICAgICAgICAvL0VuZCBvZiBWdmNQVExSZWNvcmQK KworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIG1heF9waWN0dXJlX3dp ZHRoOyovCisgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOwor CisgICAgICAgIC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCgxNikgbWF4X3BpY3R1cmVfaGVp Z2h0OyovCisgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0KTsK KworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIGF2Z19mcmFtZV9yYXRl OyAqLworICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmF2Z19mcmFtZV9yYXRlKTsKKyAgICB9 CisKKyAgICAvKiB1bnNpZ25lZCBpbnQoOCkgbnVtX29mX2FycmF5czsgKi8KKyAgICBhdmlvX3c4 KHBiLCB2dmNjLT5udW1fb2ZfYXJyYXlzKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5u dW1fb2ZfYXJyYXlzOyBpKyspIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYml0KDEpIGFycmF5 X2NvbXBsZXRlbmVzczsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIHJlc2VydmVkID0gMDsK KyAgICAgICAgICogdW5zaWduZWQgaW50KDUpIE5BTF91bml0X3R5cGU7CisgICAgICAgICAqLwor ICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5hcnJheVtpXS5hcnJheV9jb21wbGV0ZW5lc3MgPDwg NyB8CisgICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAmIDB4MWYp OworICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMTYpIG51bV9uYWx1czsgKi8KKyAgICAgICAgaWYg KHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgIT0gVlZDX0RDSV9OVVQgJiYKKyAgICAgICAg ICAgIHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgIT0gVlZDX09QSV9OVVQpCisgICAgICAg ICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyk7CisgICAgICAgIGZv ciAoaiA9IDA7IGogPCB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7IGorKykgeworICAgICAgICAg ICAgLyogdW5zaWduZWQgaW50KDE2KSBuYWxfdW5pdF9sZW5ndGg7ICovCisgICAgICAgICAgICBh dmlvX3diMTYocGIsIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aFtqXSk7CisKKyAgICAg ICAgICAgIC8qIGJpdCg4Km5hbF91bml0X2xlbmd0aCkgbmFsX3VuaXQ7ICovCisgICAgICAgICAg ICBhdmlvX3dyaXRlKHBiLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdFtqXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pdKTsKKyAgICAgICAg fQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfaDI2Nl9hbm5leGIybXA0KEFW SU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqYnVmX2luLAorICAgICAgICAgICAgICAgICAg ICAgIGludCBzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KQoreworICAgIGludCBu dW1fcHMgPSAwLCByZXQgPSAwOworICAgIHVpbnQ4X3QgKmJ1ZiwgKmVuZCwgKnN0YXJ0ID0gTlVM TDsKKworICAgIGlmICghZmlsdGVyX3BzKSB7CisgICAgICAgIHJldCA9IGZmX2F2Y19wYXJzZV9u YWxfdW5pdHMocGIsIGJ1Zl9pbiwgc2l6ZSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKwor ICAgIHJldCA9IGZmX2F2Y19wYXJzZV9uYWxfdW5pdHNfYnVmKGJ1Zl9pbiwgJnN0YXJ0LCAmc2l6 ZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZW5kOworCisgICAgcmV0ID0gMDsK KyAgICBidWYgPSBzdGFydDsKKyAgICBlbmQgPSBzdGFydCArIHNpemU7CisKKyAgICB3aGlsZSAo ZW5kIC0gYnVmID4gNCkgeworICAgICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihBVl9SQjMyKGJ1 ZiksIGVuZCAtIGJ1ZiAtIDQpOworICAgICAgICB1aW50OF90IHR5cGUgPSAoYnVmWzVdID4+IDMp OworCisgICAgICAgIGJ1ZiArPSA0OworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg ICBjYXNlIFZWQ19WUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgICAgICBj YXNlIFZWQ19QUFNfTlVUOgorICAgICAgICAgICAgbnVtX3BzKys7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCArPSA0ICsgbGVuOworICAgICAg ICAgICAgYXZpb193YjMyKHBiLCBsZW4pOworICAgICAgICAgICAgYXZpb193cml0ZShwYiwgYnVm LCBsZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBidWYgKz0g bGVuOworICAgIH0KKworICBlbmQ6CisgICAgYXZfZnJlZShzdGFydCk7CisgICAgaWYgKHBzX2Nv dW50KQorICAgICAgICAqcHNfY291bnQgPSBudW1fcHM7CisgICAgcmV0dXJuIHJldDsKK30KKwor aW50IGZmX2gyNjZfYW5uZXhiMm1wNF9idWYoY29uc3QgdWludDhfdCAqYnVmX2luLCB1aW50OF90 ICoqYnVmX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzaXplLCBpbnQgZmls dGVyX3BzLCBpbnQgKnBzX2NvdW50KQoreworICAgIEFWSU9Db250ZXh0ICpwYjsKKyAgICBpbnQg cmV0OworCisgICAgcmV0ID0gYXZpb19vcGVuX2R5bl9idWYoJnBiKTsKKyAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IGZmX2gyNjZfYW5uZXhiMm1wNChw YiwgYnVmX2luLCAqc2l6ZSwgZmlsdGVyX3BzLCBwc19jb3VudCk7CisgICAgaWYgKHJldCA8IDAp IHsKKyAgICAgICAgZmZpb19mcmVlX2R5bl9idWYoJnBiKTsKKyAgICAgICAgcmV0dXJuIHJldDsK KyAgICB9CisKKyAgICAqc2l6ZSA9IGF2aW9fY2xvc2VfZHluX2J1ZihwYiwgYnVmX291dCk7CisK KyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklPQ29udGV4dCAq cGIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXpl LCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzKQoreworICAgIFZWQ0RlY29kZXJDb25maWd1cmF0 aW9uUmVjb3JkIHZ2Y2M7CisgICAgdWludDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQ7CisgICAgaW50 IHJldDsKKworICAgIGlmIChzaXplIDwgNikgeworICAgICAgICAvKiBXZSBjYW4ndCB3cml0ZSBh IHZhbGlkIHZ2Y2MgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAqLworICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICB9IGVsc2UgaWYgKCpkYXRhID09IDEpIHsKKyAgICAgICAg LyogRGF0YSBpcyBhbHJlYWR5IHZ2Y2MtZm9ybWF0dGVkICovCisgICAgICAgIGF2aW9fd3JpdGUo cGIsIGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKCEoQVZf UkIyNChkYXRhKSA9PSAxIHx8IEFWX1JCMzIoZGF0YSkgPT0gMSkpIHsKKyAgICAgICAgLyogTm90 IGEgdmFsaWQgQW5uZXggQiBzdGFydCBjb2RlIHByZWZpeCAqLworICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3Vu aXRzX2J1ZihkYXRhLCAmc3RhcnQsICZzaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIHZ2Y2NfaW5pdCgmdnZjYyk7CisKKyAgICBidWYgPSBzdGFydDsK KyAgICBlbmQgPSBzdGFydCArIHNpemU7CisKKyAgICB3aGlsZSAoZW5kIC0gYnVmID4gNCkgewor ICAgICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihBVl9SQjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQp OworICAgICAgICB1aW50OF90IHR5cGUgPSAoYnVmWzVdID4+IDMpOworCisgICAgICAgIGJ1ZiAr PSA0OworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZWQ19PUElfTlVU OgorICAgICAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19TUFNfTlVUOgor ICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19QUkVGSVhfU0VJX05V VDoKKyAgICAgICAgY2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6CisgICAgICAgICAgICByZXQgPSB2 dmNjX2FkZF9uYWxfdW5pdChidWYsIGxlbiwgcHNfYXJyYXlfY29tcGxldGVuZXNzLCAmdnZjYyk7 CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgICBidWYgKz0gbGVuOworICAgIH0KKworICAgIHJldCA9IHZ2Y2Nf d3JpdGUocGIsICZ2dmNjKTsKKworICBlbmQ6CisgICAgdnZjY19jbG9zZSgmdnZjYyk7CisgICAg YXZfZnJlZShzdGFydCk7CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9y bWF0L3Z2Yy5oIGIvbGliYXZmb3JtYXQvdnZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uZjU4MTQ1ZTRhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L3Z2 Yy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBILjI2NiAvIFZWQyBoZWxwZXIgZnVuY3Rpb25z IGZvciBtdXhlcnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoq CisgKiBAZmlsZQorICogaW50ZXJuYWwgaGVhZGVyIGZvciBILjI2Ni9WVkMgKGRlKW11eGVyIHV0 aWxpdGllcworICovCisKKyNpZm5kZWYgQVZGT1JNQVRfSDI2Nl9ICisjZGVmaW5lIEFWRk9STUFU X0gyNjZfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiYXZpby5oIgorCisvKioK KyAqIFdyaXRlcyBBbm5leCBCIGZvcm1hdHRlZCBILjI2Ni9WVkMgTkFMIHVuaXRzIHRvIHRoZSBw cm92aWRlZCBBVklPQ29udGV4dC4KKyAqCisgKiBUaGUgTkFMIHVuaXRzIGFyZSBjb252ZXJ0ZWQg dG8gYW4gTVA0LWNvbXBhdGlibGUgZm9ybWF0IChzdGFydCBjb2RlIHByZWZpeGVzCisgKiBhcmUg cmVwbGFjZWQgYnkgNC1ieXRlIHNpemUgZmllbGRzLCBhcyBwZXIgSVNPL0lFQyAxNDQ5Ni0xNSku CisgKgorICogSWYgZmlsdGVyX3BzIGlzIG5vbi16ZXJvLCBhbnkgVlZDIHBhcmFtZXRlciBzZXRz IGZvdW5kIGluIHRoZSBpbnB1dCB3aWxsIGJlCisgKiBkaXNjYXJkZWQsIGFuZCAqcHNfY291bnQg d2lsbCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiBkaXNjYXJkZWQgUFMgTkFMIHVuaXRzLgorICoK KyAqIEBwYXJhbSBwYiBhZGRyZXNzIG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUgZGF0YSBz aGFsbCBiZSB3cml0dGVuCisgKiBAcGFyYW0gYnVmX2luIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBo b2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBAcGFyYW0gc2l6ZSBzaXplIChpbiBieXRlcykgb2Yg dGhlIGlucHV0IGJ1ZmZlcgorICogQHBhcmFtIGZpbHRlcl9wcyB3aGV0aGVyIHRvIHdyaXRlIHBh cmFtZXRlciBzZXQgTkFMIHVuaXRzIHRvIHRoZSBvdXRwdXQgKDApCisgKiAgICAgICAgb3IgdG8g ZGlzY2FyZCB0aGVtIChub24temVybykKKyAqIEBwYXJhbSBwc19jb3VudCBhZGRyZXNzIG9mIHRo ZSB2YXJpYWJsZSB3aGVyZSB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZAorICogICAgICAgIHBhcmFt ZXRlciBzZXQgTkFMIHVuaXRzIHNoYWxsIGJlIHdyaXR0ZW4sIG1heSBiZSBOVUxMCisgKiBAcmV0 dXJuIHRoZSBhbW91bnQgKGluIGJ5dGVzKSBvZiBkYXRhIHdyaXR0ZW4gaW4gY2FzZSBvZiBzdWNj ZXNzLCBhIG5lZ2F0aXZlCisgKiAgICAgICAgIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZF UlJPUiBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorICovCitpbnQgZmZfaDI2Nl9hbm5leGIybXA0 KEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqYnVmX2luLAorICAgICAgICAgICAgICAg ICAgICAgIGludCBzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KTsKKworLyoqCisg KiBXcml0ZXMgQW5uZXggQiBmb3JtYXR0ZWQgSC4yNjYvVlZDIE5BTCB1bml0cyB0byBhIGRhdGEg YnVmZmVyLgorICoKKyAqIFRoZSBOQUwgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBhbiBNUDQtY29t cGF0aWJsZSBmb3JtYXQgKHN0YXJ0IGNvZGUgcHJlZml4ZXMKKyAqIGFyZSByZXBsYWNlZCBieSA0 LWJ5dGUgc2l6ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVDIDE0NDk2LTE1KS4KKyAqCisgKiBJZiBm aWx0ZXJfcHMgaXMgbm9uLXplcm8sIGFueSBWVkMgcGFyYW1ldGVyIHNldHMgZm91bmQgaW4gdGhl IGlucHV0IHdpbGwgYmUKKyAqIGRpc2NhcmRlZCwgYW5kICpwc19jb3VudCB3aWxsIGJlIHNldCB0 byB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMuCisgKgorICogT24gc3VjY2Vz cywgKnNpemUgaG9sZHMgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgb3V0cHV0IGRhdGEgYnVm ZmVyLgorICoKKyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcg dGhlIGlucHV0IGRhdGEKKyAqIEBwYXJhbSBzaXplIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIGhv bGRpbmcgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgaW5wdXQKKyAqICAgICAgICBidWZmZXIg KG9uIGlucHV0KSBhbmQgb2YgdGhlIG91dHB1dCBidWZmZXIgKG9uIHN1Y2Nlc3MpCisgKiBAcGFy YW0gYnVmX291dCBvbiBzdWNjZXNzLCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRo ZSBhZGRyZXNzIG9mCisgKiAgICAgICAgdGhlIG91dHB1dCBidWZmZXIKKyAqIEBwYXJhbSBmaWx0 ZXJfcHMgd2hldGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyB0byB0aGUgb3V0 cHV0ICgwKQorICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCisgKiBAcGFy YW0gcHNfY291bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIG51bWJlciBvZiBk aXNjYXJkZWQKKyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBzaGFsbCBiZSB3cml0 dGVuLCBtYXkgYmUgTlVMTAorICogQHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdh dGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IKKyAqICAgICAgICAgY29kZSBp biBjYXNlIG9mIGZhaWx1cmUKKyAqIEBub3RlICpidWZfb3V0IHdpbGwgYmUgdHJlYXRlZCBhcyB1 bmluaXRpYWxpemVkIG9uIGlucHV0IGFuZCB3b24ndCBiZSBmcmVlZC4KKyAqLworaW50IGZmX2gy NjZfYW5uZXhiMm1wNF9idWYoY29uc3QgdWludDhfdCAqYnVmX2luLCB1aW50OF90ICoqYnVmX291 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBp bnQgKnBzX2NvdW50KTsKKworLyoqCisgKiBXcml0ZXMgSC4yNjYvVlZDIGV4dHJhZGF0YSAocGFy YW1ldGVyIHNldHMsIGRlY2xhcmF0aXZlIFNFSSBOQUwgdW5pdHMpIHRvCisgKiB0aGUgcHJvdmlk ZWQgQVZJT0NvbnRleHQuCisgKgorICogSWYgdGhlIGV4dHJhZGF0YSBpcyBBbm5leCBCIGZvcm1h dCwgaXQgZ2V0cyBjb252ZXJ0ZWQgdG8gdnZjQyBmb3JtYXQgYmVmb3JlCisgKiB3cml0aW5nLgor ICoKKyAqIEBwYXJhbSBwYiBhZGRyZXNzIG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUgdnZj QyBzaGFsbCBiZSB3cml0dGVuCisgKiBAcGFyYW0gZGF0YSBhZGRyZXNzIG9mIHRoZSBidWZmZXIg aG9sZGluZyB0aGUgZGF0YSBuZWVkZWQgdG8gd3JpdGUgdGhlIHZ2Y0MKKyAqIEBwYXJhbSBzaXpl IHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSBidWZmZXIKKyAqIEBwYXJhbSBwc19hcnJheV9j b21wbGV0ZW5lc3Mgd2hldGhlciBhbGwgcGFyYW1ldGVyIHNldHMgYXJlIGluIHRoZSB2dmNDICgx KQorICogICAgICAgIG9yIHRoZXJlIG1heSBiZSBhZGRpdGlvbmFsIHBhcmFtZXRlciBzZXRzIGlu IHRoZSBiaXRzdHJlYW0gKDApCisgKiBAcmV0dXJuID49MCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEg bmVnYXRpdmUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBBVkVSUk9SCisgKiAgICAgICAgIGNv ZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisgKi8KK2ludCBmZl9pc29tX3dyaXRlX3Z2Y2MoQVZJT0Nv bnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBp bnQgc2l6ZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcyk7CisKKyNlbmRpZiAvKiBBVkZPUk1B VF9IMjY2X0ggKi8KLS0gCjIuMzQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZt cGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwK ClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwt cmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=