From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id A1D294DE5B for ; Thu, 5 Jun 2025 11:10:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 17C4768CAB2; Thu, 5 Jun 2025 14:10:12 +0300 (EEST) Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id AF22568C7E2 for ; Thu, 5 Jun 2025 14:10:05 +0300 (EEST) Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-234c5b57557so7580775ad.3 for ; Thu, 05 Jun 2025 04:10:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749121804; x=1749726604; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=NBztBdI+vc3Ry88NvyHyau0RMZ3AFQuajrcKewjcIZQ=; b=R+uDmmW6F3o01rOfXkmJoxOJjaY5Qa7ITXEY5nFzux3otnXuPioomndwCJevFlQrmJ H1uFhiFLzkRW5yvCS+TO9eZiT7/rzezcVJfTSvhAu/Y6VLrfMQ3IM1PUxlEkWRpqGjbg YRXJi0XxmMeUbtdeIdb+OBtVty5Hg7MtotTrBVW0QFs18s0JNWukIAwthhARg5hPAe07 Y5Z4C9vYAkxPL2lY77yqdwPHl222af8V4TpHOTZtxEs55sXB/H8y/0u7OAn/elA0Fign L34eI8Nk52IC8c6s/in4spmBVv4NzTgel3hd0RYbwsx7n4vOXfWk9yGE4zkBgHyvk2F1 5XxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749121804; x=1749726604; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=NBztBdI+vc3Ry88NvyHyau0RMZ3AFQuajrcKewjcIZQ=; b=JLQ2diLc5w9Rqv3gDhkNF2LPPNf8fZCXCW4kmO1v8w3UX1WfmVvg13AMZW/evF9XpI TlpvUc7g1Vr1pIlqDw7yMiS2Qwyp5Ofwyj1eO8fnNvD8nSvrtCir8v+1umIMSTBSyuLQ lWX9TJO0x59EWlCsl/3z+iQ7ExfDbjzBF7BypzCgzvKN4JhygedxPbgDNL2NMcnvLHs5 T4iAdt3hiDeVy6+6XZit00hns0N3hEtj8aLlcjwl5lsUGaYmpmvPanEahp4Jasesct5Z AhakPXEMa0CbmKAJO+t4DrwT2mYkfYAuGfnU+0VRgpZxgYPh7ziK5k0DS6cUyn4ctHS4 npjA== X-Gm-Message-State: AOJu0YxSwmtnLuFcHop2ZgBpT7MYFBW9iTLaTzteaNRpz0jFiB31sM5B O6okK5uDG8AmsASx+bnJXq9p4eBfogr/FBRk7wIjq9C5bjVOPluzFb5wqyt5uA== X-Gm-Gg: ASbGncuAGc/rIuohd4me4EgihqrK6BDOhj4tdV5pjJgZtcj1KR+GTUHuexBVqXaAqDi PzNj/G1v+fTuVrOkodENTydMtwl47L6aR8sic3gHEXrgr0O138L00DD3SDhJsIrNaLHemOiJ6xK W0uYiHgw6C1ZLTjb4cwwPZGHO9cxoVN2vo0Ob29dQZljm2S93RbJaWqRnUneAC2fgVfArWlE8Ew cH6en5rHt7jBtkOTkS3Zwl7X8YnFheITXt3Ny30zSlzxRJySoZY+6YLQgVHPFlSxlmXCLL1u/JU qcRUaFY3z+V7UwnqBpxPAVpGza5cyY9LJS0C8BlTPUZ4xYMepOL+t7Q0LTAM2kjgnY0= X-Google-Smtp-Source: AGHT+IF8zPpY4D1HIb09i658XV+h7McxcHSLIOT+ZW6nyJDbTEzkqc6sd/3/gPiyO7Y02doPR5kyJQ== X-Received: by 2002:a17:902:d510:b0:235:c9a7:d5fb with SMTP id d9443c01a7336-235e1152d89mr91053045ad.16.1749121803123; Thu, 05 Jun 2025 04:10:03 -0700 (PDT) Received: from velotio-ThinkPad-E14.. ([2405:201:1008:b04e:e33:6693:dff4:3424]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23506bdd034sm117700165ad.92.2025.06.05.04.10.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Jun 2025 04:10:02 -0700 (PDT) From: Faeez Kadiri To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 Jun 2025 16:39:38 +0530 Message-Id: <20250605110938.686643-1-f1k2faeez@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avfilter: add CUDA-accelerated transpose filter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Faeez Kadiri 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: QWRkIGEgbmV3IENVREEtYWNjZWxlcmF0ZWQgdHJhbnNwb3NlIGZpbHRlciAodHJhbnNwb3NlX2N1 ZGEpIHRoYXQgcHJvdmlkZXMKaGFyZHdhcmUtYWNjZWxlcmF0ZWQgdmlkZW8gdHJhbnNwb3NpdGlv biBvcGVyYXRpb25zIG9uIE5WSURJQSBHUFVzIHVzaW5nCkNVREEuIFRoaXMgZmlsdGVyIHN1cHBv cnRzIGFsbCB0aGUgc2FtZSB0cmFuc3Bvc2Ugb3BlcmF0aW9ucyBhcyB0aGUgQ1BVCnRyYW5zcG9z ZSBmaWx0ZXIgd2hpbGUgbGV2ZXJhZ2luZyBHUFUgYWNjZWxlcmF0aW9uIGZvciBpbXByb3ZlZCBw ZXJmb3JtYW5jZS4KClN1cHBvcnRlZCBvcGVyYXRpb25zOgotIDkwwrAgY2xvY2t3aXNlIHJvdGF0 aW9uCi0gOTDCsCBjb3VudGVyLWNsb2Nrd2lzZSByb3RhdGlvbgotIDkwwrAgY2xvY2t3aXNlICsg dmVydGljYWwgZmxpcAotIDkwwrAgY291bnRlci1jbG9ja3dpc2UgKyB2ZXJ0aWNhbCBmbGlwCi0g MTgwwrAgcm90YXRpb24KLSBIb3Jpem9udGFsIGZsaXAKLSBWZXJ0aWNhbCBmbGlwCgpTdXBwb3J0 ZWQgcGl4ZWwgZm9ybWF0czoKLSBZVVY0MjBQLCBOVjEyLCBZVVY0NDRQICg4LWJpdCkKLSBQMDEw LCBQMDE2LCBZVVY0NDRQMTYgKDEwLzE2LWJpdCkKLSBSR0IzMiwgQkdSMzIsIDBSR0IzMiwgMEJH UjMyIChwYWNrZWQgUkdCKQoKVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgQ1VEQSB0ZXh0dXJlIG1l bW9yeSBmb3Igb3B0aW1hbCBtZW1vcnkgYWNjZXNzCnBhdHRlcm5zIGFuZCBpbmNsdWRlcyBhIG5l dyBDVURBIFZQUCAoVmlkZW8gUG9zdC1Qcm9jZXNzaW5nKSBmcmFtZXdvcmsKdGhhdCBjYW4gYmUg cmV1c2VkIGJ5IGZ1dHVyZSBDVURBIGZpbHRlcnMuCgpQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMg b3ZlciBDUFUgdHJhbnNwb3NlOgotIDRLIFlVVjQyMFA6IH4xNXggZmFzdGVyCi0gMTA4MHAgWVVW NDIwUDogfjh4IGZhc3RlcgotIE5lZ2xpZ2libGUgQ1BVIHVzYWdlIGR1cmluZyBwcm9jZXNzaW5n CgpUaGUgZmlsdGVyIG1haW50YWlucyBmdWxsIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZXhpc3Rp bmcgdHJhbnNwb3NlIGZpbHRlcgpBUEkgYW5kIGluY2x1ZGVzIHBhc3N0aHJvdWdoIG1vZGUgZm9y IGxhbmRzY2FwZSBjb250ZW50IHdoZW4gZW5hYmxlZC4KCkRlcGVuZGVuY2llczogcmVxdWlyZXMg Q1VEQSBTREsgYW5kIGZmbnZjb2RlYyBoZWFkZXJzLgoKRXhhbXBsZSB1c2FnZToKICBmZm1wZWcg LWh3YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9ybWF0IGN1ZGEgLWkgaW5wdXQubXA0IFwK ICAgICAgICAgLXZmIHRyYW5zcG9zZV9jdWRhPTEgLWM6diBoMjY0X252ZW5jIG91dHB1dC5tcDQK ClNpZ25lZC1vZmYtYnk6IEZhZWV6IEthZGlyaSA8ZjFrMmZhZWV6QGdtYWlsLmNvbT4KLS0tCiBD aGFuZ2Vsb2cgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogY29uZmlndXJlICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZG9jL2ZpbHRlcnMudGV4aSAgICAgICAgICAgICAg ICAgfCAxMzcgKysrKysrKysrKwogbGliYXZmaWx0ZXIvTWFrZWZpbGUgICAgICAgICAgICAgfCAg IDEgKwogbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jICAgICAgICAgfCAgIDEgKwogbGliYXZmaWx0 ZXIvY3VkYS9jdWRhX3ZwcC5jICAgICAgfCAyNDggKysrKysrKysrKysrKysrKysrCiBsaWJhdmZp bHRlci9jdWRhL2N1ZGFfdnBwLmggICAgICB8IDExMyArKysrKysrKysKIGxpYmF2ZmlsdGVyL3Zm X3RyYW5zcG9zZV9jdWRhLmMgIHwgNDIzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGxpYmF2ZmlsdGVyL3ZmX3RyYW5zcG9zZV9jdWRhLmN1IHwgMjE5ICsrKysrKysrKysrKysrKysK IDkgZmlsZXMgY2hhbmdlZCwgMTE0NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvY3VkYS9jdWRhX3ZwcC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZmaWx0ZXIvY3VkYS9jdWRhX3ZwcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZmaWx0ZXIvdmZfdHJhbnNwb3NlX2N1ZGEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zmls dGVyL3ZmX3RyYW5zcG9zZV9jdWRhLmN1CgpkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdl bG9nCmluZGV4IDQyMTc0NDk0MzguLmNmMWQwMTk2NDUgMTAwNjQ0Ci0tLSBhL0NoYW5nZWxvZwor KysgYi9DaGFuZ2Vsb2cKQEAgLTE4LDcgKzE4LDcgQEAgdmVyc2lvbiA8bmV4dD46CiAtIEFQViBl bmNvZGluZyBzdXBwb3J0IHRocm91Z2ggYSBsaWJvcGVuYXB2IHdyYXBwZXIKIC0gVlZDIGRlY29k ZXIgc3VwcG9ydHMgYWxsIGNvbnRlbnQgb2YgU0NDIChTY3JlZW4gQ29udGVudCBDb2RpbmcpOgog ICBJQkMgKEludGVyIEJsb2NrIENvcHkpLCBQYWxldHRlIE1vZGUgYW5kIEFDVCAoQWRhcHRpdmUg Q29sb3IgVHJhbnNmb3JtCi0KKy0gVHJhbnNwb3NlIENVREEgZmlsdGVyICh0cmFuc3Bvc2VfY3Vk YSkKIAogdmVyc2lvbiA3LjE6CiAtIFJhdyBDYXB0aW9ucyB3aXRoIFRpbWUgKFJDV1QpIGNsb3Nl ZCBjYXB0aW9uIGRlbXV4ZXIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRl eCA4OWE3NjZiNDAzLi5kNmIwN2Q3YWZlIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29u ZmlndXJlCkBAIC00MDE2LDYgKzQwMTYsOCBAQCB0aW50ZXJsYWNlX3BhZF90ZXN0X2RlcHM9InRp bnRlcmxhY2VfZmlsdGVyIgogdG9uZW1hcF9maWx0ZXJfZGVwcz0iY29uc3RfbmFuIgogdG9uZW1h cF92YWFwaV9maWx0ZXJfZGVwcz0idmFhcGkgVkFQcm9jRmlsdGVyUGFyYW1ldGVyQnVmZmVySERS VG9uZU1hcHBpbmciCiB0b25lbWFwX29wZW5jbF9maWx0ZXJfZGVwcz0ib3BlbmNsIGNvbnN0X25h biIKK3RyYW5zcG9zZV9jdWRhX2ZpbHRlcl9kZXBzPSJmZm52Y29kZWMiCit0cmFuc3Bvc2VfY3Vk YV9maWx0ZXJfZGVwc19hbnk9ImN1ZGFfbnZjYyBjdWRhX2xsdm0iCiB0cmFuc3Bvc2Vfb3BlbmNs X2ZpbHRlcl9kZXBzPSJvcGVuY2wiCiB0cmFuc3Bvc2VfdmFhcGlfZmlsdGVyX2RlcHM9InZhYXBp IFZBUHJvY1BpcGVsaW5lQ2Fwc19yb3RhdGlvbl9mbGFncyIKIHRyYW5zcG9zZV92dF9maWx0ZXJf ZGVwcz0idmlkZW90b29sYm94IFZUUGl4ZWxSb3RhdGlvblNlc3Npb25DcmVhdGUiCmRpZmYgLS1n aXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRleCA2M2Y1NWY1Nzk0 Li44MzIxZjg0N2RlIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2RvYy9maWx0 ZXJzLnRleGkKQEAgLTI2ODU2LDYgKzI2ODU2LDE0MyBAQCBPbmx5IGRlaW50ZXJsYWNlIGZyYW1l cyBtYXJrZWQgYXMgaW50ZXJsYWNlZC4KIFRoZSBkZWZhdWx0IHZhbHVlIGlzIEBjb2Rle2FsbH0u CiBAZW5kIHRhYmxlCiAKK0BhbmNob3J7dHJhbnNwb3NlX2N1ZGF9CitAc3Vic2VjdGlvbiB0cmFu c3Bvc2VfY3VkYQorCitUcmFuc3Bvc2Ugcm93cyB3aXRoIGNvbHVtbnMgaW4gdGhlIGlucHV0IHZp ZGVvIGFuZCBvcHRpb25hbGx5IGZsaXAgaXQgdXNpbmcgQ1VEQS4KKworVGhpcyBpcyB0aGUgQ1VE QSB2YXJpYW50IG9mIHRoZSBAcmVme3RyYW5zcG9zZX0gZmlsdGVyLiBJdCBwcm92aWRlcyBoYXJk d2FyZS1hY2NlbGVyYXRlZCAKK3RyYW5zcG9zaXRpb24gb3BlcmF0aW9ucyBvbiBDVURBLWNhcGFi bGUgZGV2aWNlcyB3aXRoIHN1cHBvcnQgZm9yIG11bHRpcGxlIHBpeGVsIGZvcm1hdHMuCisKK1Ro ZSBmaWx0ZXIgdXNlcyBlZmZpY2llbnQgQ1VEQSBrZXJuZWxzIHdpdGggdGV4dHVyZSBtZW1vcnkg Zm9yIG9wdGltYWwgcGVyZm9ybWFuY2UgYWNyb3NzIAorYWxsIHN1cHBvcnRlZCBwaXhlbCBmb3Jt YXRzIGFuZCBmcmFtZSBzaXplcy4KKworQHN1YnNlY3Rpb24gU3VwcG9ydGVkIFBpeGVsIEZvcm1h dHMKKworVGhlIGZpbHRlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBpeGVsIGZvcm1hdHM6CitA aXRlbWl6ZQorQGl0ZW0gWVVWNDIwUCAoOC1iaXQgcGxhbmFyIFlVVikKK0BpdGVtIE5WMTIgKDgt Yml0IHNlbWktcGxhbmFyIFlVVikKK0BpdGVtIFlVVjQ0NFAgKDgtYml0IHBsYW5hciBZVVYgNDo0 OjQpCitAaXRlbSBQMDEwTEUgKDEwLWJpdCBzZW1pLXBsYW5hciBZVVYpCitAaXRlbSBQMDE2TEUg KDE2LWJpdCBzZW1pLXBsYW5hciBZVVYpCitAaXRlbSBZVVY0NDRQMTZMRSAoMTYtYml0IHBsYW5h ciBZVVYgNDo0OjQpCitAaXRlbSBSR0IwICgzMi1iaXQgUkdCIHdpdGggYWxwaGEgcGFkZGluZykK K0BpdGVtIEJHUjAgKDMyLWJpdCBCR1Igd2l0aCBhbHBoYSBwYWRkaW5nKQorQGl0ZW0gUkdCQSAo MzItYml0IFJHQkEpCitAaXRlbSBCR1JBICgzMi1iaXQgQkdSQSkKK0BlbmQgaXRlbWl6ZQorCitA c3Vic2VjdGlvbiBPcHRpb25zCisKK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJz OgorCitAdGFibGUgQG9wdGlvbgorCitAaXRlbSBkaXIKK1NwZWNpZnkgdGhlIHRyYW5zcG9zaXRp b24gZGlyZWN0aW9uLgorCitDYW4gYXNzdW1lIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorQHRhYmxl IEBzYW1wCitAaXRlbSAwLCBjY2xvY2tfZmxpcAorUm90YXRlIGJ5IDkwIGRlZ3JlZXMgY291bnRl cmNsb2Nrd2lzZSBhbmQgdmVydGljYWxseSBmbGlwIChkZWZhdWx0KSwgdGhhdCBpczoKK0BleGFt cGxlCitMLlIgICAgIEwubAorLiAuIC0+ICAuIC4KK2wuciAgICAgUi5yCitAZW5kIGV4YW1wbGUK KworQGl0ZW0gMSwgY2xvY2sKK1JvdGF0ZSBieSA5MCBkZWdyZWVzIGNsb2Nrd2lzZSwgdGhhdCBp czoKK0BleGFtcGxlCitMLlIgICAgIGwuTAorLiAuIC0+ICAuIC4KK2wuciAgICAgci5SCitAZW5k IGV4YW1wbGUKKworQGl0ZW0gMiwgY2Nsb2NrCitSb3RhdGUgYnkgOTAgZGVncmVlcyBjb3VudGVy Y2xvY2t3aXNlLCB0aGF0IGlzOgorQGV4YW1wbGUKK0wuUiAgICAgUi5yCisuIC4gLT4gIC4gLgor bC5yICAgICBMLmwKK0BlbmQgZXhhbXBsZQorCitAaXRlbSAzLCBjbG9ja19mbGlwCitSb3RhdGUg YnkgOTAgZGVncmVlcyBjbG9ja3dpc2UgYW5kIHZlcnRpY2FsbHkgZmxpcCwgdGhhdCBpczoKK0Bl eGFtcGxlCitMLlIgICAgIHIuUgorLiAuIC0+ICAuIC4KK2wuciAgICAgbC5MCitAZW5kIGV4YW1w bGUKKworQGl0ZW0gNCwgcmV2ZXJzYWwKK1JvdGF0ZSBieSAxODAgZGVncmVlcywgdGhhdCBpczoK K0BleGFtcGxlCitMLlIgICAgIHIubAorLiAuIC0+ICAuIC4KK2wuciAgICAgUi5MCitAZW5kIGV4 YW1wbGUKKworQGl0ZW0gNSwgaGZsaXAKK0ZsaXAgaG9yaXpvbnRhbGx5LCB0aGF0IGlzOgorQGV4 YW1wbGUKK0wuUiAgICAgUi5MCisuIC4gLT4gIC4gLgorbC5yICAgICByLmwKK0BlbmQgZXhhbXBs ZQorCitAaXRlbSA2LCB2ZmxpcAorRmxpcCB2ZXJ0aWNhbGx5LCB0aGF0IGlzOgorQGV4YW1wbGUK K0wuUiAgICAgbC5yCisuIC4gLT4gIC4gLgorbC5yICAgICBMLlIKK0BlbmQgZXhhbXBsZQorQGVu ZCB0YWJsZQorCitAaXRlbSBwYXNzdGhyb3VnaAorRG8gbm90IGFwcGx5IHRoZSB0cmFuc3Bvc2l0 aW9uIGlmIHRoZSBpbnB1dCBnZW9tZXRyeSBtYXRjaGVzIHRoZSBvbmUKK3NwZWNpZmllZCBieSB0 aGUgc3BlY2lmaWVkIHZhbHVlLiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorQHRh YmxlIEBzYW1wCitAaXRlbSBub25lCitBbHdheXMgYXBwbHkgdHJhbnNwb3NpdGlvbi4gKGRlZmF1 bHQpCitAaXRlbSBwb3J0cmFpdAorUHJlc2VydmUgcG9ydHJhaXQgZ2VvbWV0cnkgKHdoZW4gQHZh cntoZWlnaHR9ID49IEB2YXJ7d2lkdGh9KS4KK0BpdGVtIGxhbmRzY2FwZQorUHJlc2VydmUgbGFu ZHNjYXBlIGdlb21ldHJ5ICh3aGVuIEB2YXJ7d2lkdGh9ID49IEB2YXJ7aGVpZ2h0fSkuCitAZW5k IHRhYmxlCisKK0BlbmQgdGFibGUKKworQHN1YnNlY3Rpb24gVXNhZ2UgRXhhbXBsZXMKKworQGl0 ZW1pemUKK0BpdGVtCitSb3RhdGUgYSB2aWRlbyA5MCBkZWdyZWVzIGNsb2Nrd2lzZToKK0BleGFt cGxlCitmZm1wZWcgLWh3YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9ybWF0IGN1ZGEgLWkg aW5wdXQubXA0IC12ZiAidHJhbnNwb3NlX2N1ZGE9ZGlyPWNsb2NrIiBvdXRwdXQubXA0CitAZW5k IGV4YW1wbGUKKworQGl0ZW0KK1JvdGF0ZSBhIHZpZGVvIDkwIGRlZ3JlZXMgY291bnRlcmNsb2Nr d2lzZToKK0BleGFtcGxlCitmZm1wZWcgLWh3YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9y bWF0IGN1ZGEgLWkgaW5wdXQubXA0IC12ZiAidHJhbnNwb3NlX2N1ZGE9ZGlyPWNjbG9jayIgb3V0 cHV0Lm1wNAorQGVuZCBleGFtcGxlCisKK0BpdGVtCitGbGlwIGEgdmlkZW8gaG9yaXpvbnRhbGx5 OgorQGV4YW1wbGUKK2ZmbXBlZyAtaHdhY2NlbCBjdWRhIC1od2FjY2VsX291dHB1dF9mb3JtYXQg Y3VkYSAtaSBpbnB1dC5tcDQgLXZmICJ0cmFuc3Bvc2VfY3VkYT1kaXI9aGZsaXAiIG91dHB1dC5t cDQKK0BlbmQgZXhhbXBsZQorCitAaXRlbQorUm90YXRlIDE4MCBkZWdyZWVzOgorQGV4YW1wbGUK K2ZmbXBlZyAtaHdhY2NlbCBjdWRhIC1od2FjY2VsX291dHB1dF9mb3JtYXQgY3VkYSAtaSBpbnB1 dC5tcDQgLXZmICJ0cmFuc3Bvc2VfY3VkYT1kaXI9cmV2ZXJzYWwiIG91dHB1dC5tcDQKK0BlbmQg ZXhhbXBsZQorQGVuZCBpdGVtaXplCisKIEBhbmNob3J7Q1VEQSBOUFB9CiBAc2VjdGlvbiBDVURB IE5QUAogQmVsb3cgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBO VklESUEgUGVyZm9ybWFuY2UgUHJpbWl0aXZlcyAobGlibnBwKSB2aWRlbyBmaWx0ZXJzLgpkaWZm IC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9NYWtlZmlsZQppbmRl eCA5N2Y4ZjE3MjcyLi43MzdmMzk3MzE1IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9NYWtlZmls ZQorKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQpAQCAtNTM1LDYgKzUzNSw3IEBAIE9CSlMtJChD T05GSUdfVE9ORU1BUF9PUEVOQ0xfRklMVEVSKSAgICAgICAgICs9IHZmX3RvbmVtYXBfb3BlbmNs Lm8gb3BlbmNsLm8gXAogT0JKUy0kKENPTkZJR19UT05FTUFQX1ZBQVBJX0ZJTFRFUikgICAgICAg ICAgKz0gdmZfdG9uZW1hcF92YWFwaS5vIHZhYXBpX3ZwcC5vCiBPQkpTLSQoQ09ORklHX1RQQURf RklMVEVSKSAgICAgICAgICAgICAgICAgICArPSB2Zl90cGFkLm8KIE9CSlMtJChDT05GSUdfVFJB TlNQT1NFX0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX3RyYW5zcG9zZS5vCitPQkpTLSQoQ09O RklHX1RSQU5TUE9TRV9DVURBX0ZJTFRFUikgICAgICAgICArPSB2Zl90cmFuc3Bvc2VfY3VkYS5v IHZmX3RyYW5zcG9zZV9jdWRhLnB0eC5vIGN1ZGEvY3VkYV92cHAubyBjdWRhL2xvYWRfaGVscGVy Lm8KIE9CSlMtJChDT05GSUdfVFJBTlNQT1NFX05QUF9GSUxURVIpICAgICAgICAgICs9IHZmX3Ry YW5zcG9zZV9ucHAubwogT0JKUy0kKENPTkZJR19UUkFOU1BPU0VfT1BFTkNMX0ZJTFRFUikgICAg ICAgKz0gdmZfdHJhbnNwb3NlX29wZW5jbC5vIG9wZW5jbC5vIG9wZW5jbC90cmFuc3Bvc2Uubwog T0JKUy0kKENPTkZJR19UUkFOU1BPU0VfVkFBUElfRklMVEVSKSAgICAgICAgKz0gdmZfdHJhbnNw b3NlX3ZhYXBpLm8gdmFhcGlfdnBwLm8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRl cnMuYyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwppbmRleCAzYmMwNDViMjhmLi42ZDBlZjVl NjU0IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKKysrIGIvbGliYXZmaWx0 ZXIvYWxsZmlsdGVycy5jCkBAIC01MDMsNiArNTAzLDcgQEAgZXh0ZXJuIGNvbnN0IEZGRmlsdGVy IGZmX3ZmX3RvbmVtYXBfb3BlbmNsOwogZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3RvbmVt YXBfdmFhcGk7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfdHBhZDsKIGV4dGVybiBjb25z dCBGRkZpbHRlciBmZl92Zl90cmFuc3Bvc2U7CitleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZf dHJhbnNwb3NlX2N1ZGE7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfdHJhbnNwb3NlX25w cDsKIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl90cmFuc3Bvc2Vfb3BlbmNsOwogZXh0ZXJu IGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3RyYW5zcG9zZV92YWFwaTsKZGlmZiAtLWdpdCBhL2xpYmF2 ZmlsdGVyL2N1ZGEvY3VkYV92cHAuYyBiL2xpYmF2ZmlsdGVyL2N1ZGEvY3VkYV92cHAuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iOGE5MzgyMGY5Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliYXZmaWx0ZXIvY3VkYS9jdWRhX3ZwcC5jCkBAIC0wLDAgKzEsMjQ4IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBGYWVleiBLYWRpcmkgPCBmMWsyZmFlZXogYXQgZ21h aWwgZG90IGNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworCisj aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNp bmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgorCisjaW5jbHVkZSAibGliYXZmaWx0ZXIvZmls dGVycy5oIgorI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2Zvcm1hdHMuaCIKKyNpbmNsdWRlICJjdWRh X3ZwcC5oIgorI2luY2x1ZGUgImxvYWRfaGVscGVyLmgiCisKK2ludCBmZl9jdWRhX3ZwcF9xdWVy eV9mb3JtYXRzKGNvbnN0IEFWRmlsdGVyQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBVkZpbHRlckZvcm1hdHNDb25maWcgKipjZmdfaW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVkZpbHRlckZvcm1hdHNDb25maWcgKipjZmdfb3V0KQorewor ICAgIHN0YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdHNbXSA9IHsKKyAgICAg ICAgQVZfUElYX0ZNVF9DVURBLCBBVl9QSVhfRk1UX05PTkUsCisgICAgfTsKKyAgICBpbnQgZXJy OworCisgICAgZXJyID0gZmZfc2V0X2NvbW1vbl9mb3JtYXRzX2Zyb21fbGlzdDIoYXZjdHgsIGNm Z19pbiwgY2ZnX291dCwgcGl4X2ZtdHMpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1 cm4gZXJyOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9jdWRhX3ZwcF9jb25maWdfaW5w dXQoQVZGaWx0ZXJMaW5rICppbmxpbmspCit7CisgICAgRmlsdGVyTGluayAgICAgICAgICAqbCA9 IGZmX2ZpbHRlcl9saW5rKGlubGluayk7CisgICAgQVZGaWx0ZXJDb250ZXh0ICphdmN0eCA9IGlu bGluay0+ZHN0OworICAgIENVREFWUFBDb250ZXh0ICpjdHggICAgPSBhdmN0eC0+cHJpdjsKKwor ICAgIGlmIChjdHgtPnBpcGVsaW5lX3VuaW5pdCkKKyAgICAgICAgY3R4LT5waXBlbGluZV91bmlu aXQoYXZjdHgpOworCisgICAgaWYgKCFsLT5od19mcmFtZXNfY3R4KSB7CisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQSBoYXJkd2FyZSBmcmFtZXMgcmVmZXJlbmNlIGlzICIK KyAgICAgICAgICAgICAgICJyZXF1aXJlZCB0byBhc3NvY2lhdGUgdGhlIHByb2Nlc3NpbmcgZGV2 aWNlLlxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAg Y3R4LT5pbnB1dF9mcmFtZXNfcmVmID0gYXZfYnVmZmVyX3JlZihsLT5od19mcmFtZXNfY3R4KTsK KyAgICBpZiAoIWN0eC0+aW5wdXRfZnJhbWVzX3JlZikgeworICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkEgaW5wdXQgZnJhbWVzIHJlZmVyZW5jZSBjcmVhdGUgIgorICAgICAg ICAgICAgICAgImZhaWxlZC5cbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwor ICAgIH0KKyAgICBjdHgtPmlucHV0X2ZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCopY3R4LT5p bnB1dF9mcmFtZXNfcmVmLT5kYXRhOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9jdWRh X3ZwcF9jb25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBGaWx0ZXJM aW5rICAgICAgICpvdXRsID0gZmZfZmlsdGVyX2xpbmsob3V0bGluayk7CisgICAgQVZGaWx0ZXJD b250ZXh0ICphdmN0eCA9IG91dGxpbmstPnNyYzsKKyAgICBBVkZpbHRlckxpbmsgICAqaW5saW5r ID0gYXZjdHgtPmlucHV0c1swXTsKKyAgICBGaWx0ZXJMaW5rICAgICAgICAqaW5sID0gZmZfZmls dGVyX2xpbmsoaW5saW5rKTsKKyAgICBDVURBVlBQQ29udGV4dCAqY3R4ICAgID0gYXZjdHgtPnBy aXY7CisgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmlucHV0X2ZyYW1lczsKKyAgICBBVkJ1ZmZlclJl ZiAqaHdfZnJhbWVzX2N0eDsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqb3V0cHV0X2ZyYW1lczsK KyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgaW5fZm9ybWF0OworICAgIGludCBlcnI7CisKKyAgICBp ZiAoY3R4LT5waXBlbGluZV91bmluaXQpCisgICAgICAgIGN0eC0+cGlwZWxpbmVfdW5pbml0KGF2 Y3R4KTsKKworICAgIGlmICghY3R4LT5vdXRwdXRfd2lkdGgpCisgICAgICAgIGN0eC0+b3V0cHV0 X3dpZHRoICA9IGF2Y3R4LT5pbnB1dHNbMF0tPnc7CisgICAgaWYgKCFjdHgtPm91dHB1dF9oZWln aHQpCisgICAgICAgIGN0eC0+b3V0cHV0X2hlaWdodCA9IGF2Y3R4LT5pbnB1dHNbMF0tPmg7CisK KyAgICBvdXRsaW5rLT53ID0gY3R4LT5vdXRwdXRfd2lkdGg7CisgICAgb3V0bGluay0+aCA9IGN0 eC0+b3V0cHV0X2hlaWdodDsKKworICAgIGlmIChjdHgtPnBhc3N0aHJvdWdoKSB7CisgICAgICAg IGlmIChpbmwtPmh3X2ZyYW1lc19jdHgpCisgICAgICAgICAgICBvdXRsLT5od19mcmFtZXNfY3R4 ID0gYXZfYnVmZmVyX3JlZihpbmwtPmh3X2ZyYW1lc19jdHgpOworICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIENVREEgZmlsdGVyIHBhc3N0aHJvdWdoIG1vZGUuXG4i KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYXZfYXNzZXJ0MChjdHgtPmlucHV0 X2ZyYW1lcyk7CisgICAgY3R4LT5kZXZpY2VfcmVmID0gYXZfYnVmZmVyX3JlZihjdHgtPmlucHV0 X2ZyYW1lcy0+ZGV2aWNlX3JlZik7CisgICAgaWYgKCFjdHgtPmRldmljZV9yZWYpIHsKKyAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBIGRldmljZSByZWZlcmVuY2UgY3JlYXRl ICIKKyAgICAgICAgICAgICAgICJmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKKyAgICB9CisKKyAgICBpbnB1dF9mcmFtZXMgPSAoQVZIV0ZyYW1lc0NvbnRleHQq KWN0eC0+aW5wdXRfZnJhbWVzX3JlZi0+ZGF0YTsKKyAgICBpbl9mb3JtYXQgPSBpbnB1dF9mcmFt ZXMtPnN3X2Zvcm1hdDsKKworICAgIGN0eC0+aHdjdHggPSBpbnB1dF9mcmFtZXMtPmRldmljZV9j dHgtPmh3Y3R4OworICAgIGN0eC0+Y3VkYV9kbCA9IGN0eC0+aHdjdHgtPmludGVybmFsLT5jdWRh X2RsOworICAgIGN0eC0+Y3Vfc3RyZWFtID0gY3R4LT5od2N0eC0+c3RyZWFtOworCisgICAgaWYg KGN0eC0+b3V0cHV0X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX05PTkUpCisgICAgICAgIGN0eC0+b3V0 cHV0X2Zvcm1hdCA9IGlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0OworCisgICAgLy8gU2V0dXAgZm9y bWF0IGluZm9ybWF0aW9uCisgICAgZXJyID0gZmZfY3VkYV92cHBfc2V0dXBfcGxhbmVzKGN0eCwg aW5fZm9ybWF0KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg IC8vIExvYWQgZmlsdGVyLXNwZWNpZmljIGZ1bmN0aW9ucworICAgIGlmIChjdHgtPmxvYWRfZnVu Y3Rpb25zKSB7CisgICAgICAgIGVyciA9IGN0eC0+bG9hZF9mdW5jdGlvbnMoYXZjdHgsIGluX2Zv cm1hdCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAg ICB9CisKKyAgICAvLyBCdWlsZCBmaWx0ZXIgcGFyYW1ldGVycworICAgIGlmIChjdHgtPmJ1aWxk X2ZpbHRlcl9wYXJhbXMpIHsKKyAgICAgICAgZXJyID0gY3R4LT5idWlsZF9maWx0ZXJfcGFyYW1z KGF2Y3R4KTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOwor ICAgIH0KKworICAgIC8vIEluaXRpYWxpemUgaGFyZHdhcmUgZnJhbWVzIGNvbnRleHQgZm9yIG91 dHB1dAorICAgIGh3X2ZyYW1lc19jdHggPSBhdl9od2ZyYW1lX2N0eF9hbGxvYyhjdHgtPmRldmlj ZV9yZWYpOworICAgIGlmICghaHdfZnJhbWVzX2N0eCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKKworICAgIG91dHB1dF9mcmFtZXMgPSAoQVZIV0ZyYW1lc0NvbnRleHQqKWh3X2Zy YW1lc19jdHgtPmRhdGE7CisgICAgb3V0cHV0X2ZyYW1lcy0+Zm9ybWF0ID0gQVZfUElYX0ZNVF9D VURBOworICAgIG91dHB1dF9mcmFtZXMtPnN3X2Zvcm1hdCA9IGN0eC0+b3V0cHV0X2Zvcm1hdDsK KyAgICBvdXRwdXRfZnJhbWVzLT53aWR0aCA9IGN0eC0+b3V0cHV0X3dpZHRoOworICAgIG91dHB1 dF9mcmFtZXMtPmhlaWdodCA9IGN0eC0+b3V0cHV0X2hlaWdodDsKKworICAgIGVyciA9IGF2X2h3 ZnJhbWVfY3R4X2luaXQoaHdfZnJhbWVzX2N0eCk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAg ICAgYXZfYnVmZmVyX3VucmVmKCZod19mcmFtZXNfY3R4KTsKKyAgICAgICAgcmV0dXJuIGVycjsK KyAgICB9CisKKyAgICBhdl9idWZmZXJfdW5yZWYoJm91dGwtPmh3X2ZyYW1lc19jdHgpOworICAg IG91dGwtPmh3X2ZyYW1lc19jdHggPSBod19mcmFtZXNfY3R4OworCisgICAgcmV0dXJuIDA7Cit9 CisKK2ludCBmZl9jdWRhX3ZwcF9mb3JtYXRfaXNfc3VwcG9ydGVkKGVudW0gQVZQaXhlbEZvcm1h dCBmbXQsIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCAqc3VwcG9ydGVkX2Zvcm1hdHMsIGludCBu Yl9mb3JtYXRzKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IG5iX2Zvcm1h dHM7IGkrKykKKyAgICAgICAgaWYgKHN1cHBvcnRlZF9mb3JtYXRzW2ldID09IGZtdCkKKyAgICAg ICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfY3VkYV92cHBfc2V0 dXBfcGxhbmVzKENVREFWUFBDb250ZXh0ICpzLCBlbnVtIEFWUGl4ZWxGb3JtYXQgZm9ybWF0KQor eworICAgIHMtPmluX2ZtdCA9IGZvcm1hdDsKKyAgICBzLT5pbl9kZXNjID0gYXZfcGl4X2ZtdF9k ZXNjX2dldChzLT5pbl9mbXQpOworICAgIHMtPmluX3BsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRf cGxhbmVzKHMtPmluX2ZtdCk7CisKKyAgICAvLyBDbGVhciBwbGFuZSBpbmZvcm1hdGlvbgorICAg IG1lbXNldChzLT5pbl9wbGFuZV9kZXB0aHMsIDAsIHNpemVvZihzLT5pbl9wbGFuZV9kZXB0aHMp KTsKKyAgICBtZW1zZXQocy0+aW5fcGxhbmVfY2hhbm5lbHMsIDAsIHNpemVvZihzLT5pbl9wbGFu ZV9jaGFubmVscykpOworCisgICAgLy8gU2V0IHVwIHBsYW5lIGluZm9ybWF0aW9uCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBzLT5pbl9kZXNjLT5uYl9jb21wb25lbnRzOyBpKyspIHsKKyAgICAg ICAgaW50IGQgPSAocy0+aW5fZGVzYy0+Y29tcFtpXS5kZXB0aCArIDcpIC8gODsKKyAgICAgICAg aW50IHAgPSBzLT5pbl9kZXNjLT5jb21wW2ldLnBsYW5lOworICAgICAgICBzLT5pbl9wbGFuZV9j aGFubmVsc1twXSA9IEZGTUFYKHMtPmluX3BsYW5lX2NoYW5uZWxzW3BdLCBzLT5pbl9kZXNjLT5j b21wW2ldLnN0ZXAgLyBkKTsKKyAgICAgICAgcy0+aW5fcGxhbmVfZGVwdGhzW3BdID0gcy0+aW5f ZGVzYy0+Y29tcFtpXS5kZXB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZm X2N1ZGFfdnBwX2xvYWRfbW9kdWxlKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBDVURBVlBQQ29udGV4 dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0 eF9kYXRhLCB1bnNpZ25lZCBpbnQgcHR4X2xlbikKK3sKKyAgICBDVWNvbnRleHQgZHVtbXksIGN1 ZGFfY3R4ID0gcy0+aHdjdHgtPmN1ZGFfY3R4OworICAgIEN1ZGFGdW5jdGlvbnMgKmN1ID0gcy0+ Y3VkYV9kbDsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1Q3R4UHVz aEN1cnJlbnQoY3VkYV9jdHgpKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKworICAgIHJldCA9IGZmX2N1ZGFfbG9hZF9tb2R1bGUoY3R4LCBzLT5od2N0eCwgJnMtPmN1 X21vZHVsZSwgcHR4X2RhdGEsIHB0eF9sZW4pOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBn b3RvIGZhaWw7CisKK2ZhaWw6CisgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVt bXkpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgZmZfY3VkYV92cHBfZ2V0X2Z1bmN0aW9u KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBDVURBVlBQQ29udGV4dCAqcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDVWZ1bmN0aW9uICpmdW5jLCBjb25zdCBjaGFyICpmdW5jX25hbWUpCit7 CisgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBzLT5jdWRhX2RsOworICAgIGludCByZXQ7CisKKyAg ICByZXQgPSBDSEVDS19DVShjdS0+Y3VNb2R1bGVHZXRGdW5jdGlvbihmdW5jLCBzLT5jdV9tb2R1 bGUsIGZ1bmNfbmFtZSkpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19GQVRBTCwgIkZhaWxlZCB0byBsb2FkIGZ1bmN0aW9uOiAlc1xuIiwgZnVuY19uYW1l KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKKyAgICB9CisKKyAgICByZXR1cm4g MDsKK30KKwordm9pZCBmZl9jdWRhX3ZwcF9jdHhfaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4 KQoreworICAgIENVREFWUFBDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdjsKKworICAgIGN0eC0+ Y3VfbW9kdWxlID0gTlVMTDsKKyAgICBjdHgtPnBhc3N0aHJvdWdoID0gMDsKK30KKwordm9pZCBm Zl9jdWRhX3ZwcF9jdHhfdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCit7CisgICAgQ1VE QVZQUENvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2OworCisgICAgaWYgKGN0eC0+cGlwZWxpbmVf dW5pbml0KQorICAgICAgICBjdHgtPnBpcGVsaW5lX3VuaW5pdChhdmN0eCk7CisKKyAgICBhdl9i dWZmZXJfdW5yZWYoJmN0eC0+aW5wdXRfZnJhbWVzX3JlZik7CisgICAgYXZfYnVmZmVyX3VucmVm KCZjdHgtPmRldmljZV9yZWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvY3VkYS9jdWRh X3ZwcC5oIGIvbGliYXZmaWx0ZXIvY3VkYS9jdWRhX3ZwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjEyNDFkMzYxODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZp bHRlci9jdWRhL2N1ZGFfdnBwLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMjUsIEZhZWV6IEthZGlyaSA8IGYxazJmYWVleiBhdCBnbWFpbCBkb3QgY29tPgorICoK KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIEFWRklMVEVSX0NV REFfVlBQX0gKKyNkZWZpbmUgQVZGSUxURVJfQ1VEQV9WUFBfSAorCisjaW5jbHVkZSAibGliYXZ1 dGlsL2h3Y29udGV4dC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHRfY3VkYV9pbnRl cm5hbC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9jdWRhX2NoZWNrLmgiCisjaW5jbHVkZSAibGli YXZmaWx0ZXIvYXZmaWx0ZXIuaCIKKworI2RlZmluZSBDSEVDS19DVSh4KSBGRl9DVURBX0NIRUNL X0RMKGN0eCwgcy0+aHdjdHgtPmludGVybmFsLT5jdWRhX2RsLCB4KQorCit0eXBlZGVmIHN0cnVj dCBDVURBVlBQQ29udGV4dCB7CisgICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7CisKKyAgICBBVkNV REFEZXZpY2VDb250ZXh0ICpod2N0eDsKKyAgICBDdWRhRnVuY3Rpb25zICpjdWRhX2RsOworICAg IEFWQnVmZmVyUmVmICpkZXZpY2VfcmVmOworCisgICAgQ1Vjb250ZXh0ICAgY3VfY3R4OworICAg IENVbW9kdWxlICAgIGN1X21vZHVsZTsKKyAgICBDVXN0cmVhbSAgICBjdV9zdHJlYW07CisKKyAg ICBBVkJ1ZmZlclJlZiAgICAgICAqaW5wdXRfZnJhbWVzX3JlZjsKKyAgICBBVkhXRnJhbWVzQ29u dGV4dCAqaW5wdXRfZnJhbWVzOworCisgICAgZW51bSBBVlBpeGVsRm9ybWF0IG91dHB1dF9mb3Jt YXQ7CisgICAgaW50IG91dHB1dF93aWR0aDsgICAvLyBjb21wdXRlZCB3aWR0aAorICAgIGludCBv dXRwdXRfaGVpZ2h0OyAgLy8gY29tcHV0ZWQgaGVpZ2h0CisKKyAgICBpbnQgcGFzc3Rocm91Z2g7 CisKKyAgICAvLyBGb3JtYXQgaW5mb3JtYXRpb24KKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgaW5f Zm10OworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqaW5fZGVzYzsKKyAgICBpbnQgaW5f cGxhbmVzOworICAgIGludCBpbl9wbGFuZV9kZXB0aHNbNF07CisgICAgaW50IGluX3BsYW5lX2No YW5uZWxzWzRdOworCisgICAgLy8gRnVuY3Rpb24gcG9pbnRlcnMgZm9yIGZpbHRlci1zcGVjaWZp YyBvcGVyYXRpb25zCisgICAgaW50ICgqbG9hZF9mdW5jdGlvbnMpKEFWRmlsdGVyQ29udGV4dCAq YXZjdHgsIGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQpOworICAgIGludCAoKmJ1aWxkX2ZpbHRl cl9wYXJhbXMpKEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpOworICAgIHZvaWQgKCpwaXBlbGluZV91 bmluaXQpKEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpOworfSBDVURBVlBQQ29udGV4dDsKKworLyoq CisgKiBJbml0aWFsaXplIENVREEgVlBQIGNvbnRleHQKKyAqLwordm9pZCBmZl9jdWRhX3ZwcF9j dHhfaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KTsKKworLyoqCisgKiBVbmluaXRpYWxpemUg Q1VEQSBWUFAgY29udGV4dAorICovCit2b2lkIGZmX2N1ZGFfdnBwX2N0eF91bmluaXQoQVZGaWx0 ZXJDb250ZXh0ICphdmN0eCk7CisKKy8qKgorICogUXVlcnkgc3VwcG9ydGVkIGZvcm1hdHMgZm9y IENVREEgVlBQCisgKi8KK2ludCBmZl9jdWRhX3ZwcF9xdWVyeV9mb3JtYXRzKGNvbnN0IEFWRmls dGVyQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZpbHRl ckZvcm1hdHNDb25maWcgKipjZmdfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB VkZpbHRlckZvcm1hdHNDb25maWcgKipjZmdfb3V0KTsKKworLyoqCisgKiBDb25maWd1cmUgaW5w dXQgZm9yIENVREEgVlBQCisgKi8KK2ludCBmZl9jdWRhX3ZwcF9jb25maWdfaW5wdXQoQVZGaWx0 ZXJMaW5rICppbmxpbmspOworCisvKioKKyAqIENvbmZpZ3VyZSBvdXRwdXQgZm9yIENVREEgVlBQ CisgKi8KK2ludCBmZl9jdWRhX3ZwcF9jb25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGlu ayk7CisKKy8qKgorICogQ2hlY2sgaWYgYSBwaXhlbCBmb3JtYXQgaXMgc3VwcG9ydGVkCisgKi8K K2ludCBmZl9jdWRhX3ZwcF9mb3JtYXRfaXNfc3VwcG9ydGVkKGVudW0gQVZQaXhlbEZvcm1hdCBm bXQsIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCAqc3VwcG9ydGVkX2Zvcm1hdHMsIGludCBuYl9m b3JtYXRzKTsKKworLyoqCisgKiBTZXR1cCBwbGFuZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBm b3JtYXQKKyAqLworaW50IGZmX2N1ZGFfdnBwX3NldHVwX3BsYW5lcyhDVURBVlBQQ29udGV4dCAq cywgZW51bSBBVlBpeGVsRm9ybWF0IGZvcm1hdCk7CisKKy8qKgorICogTG9hZCBDVURBIG1vZHVs ZSBmcm9tIFBUWCBkYXRhCisgKi8KK2ludCBmZl9jdWRhX3ZwcF9sb2FkX21vZHVsZShBVkZpbHRl ckNvbnRleHQgKmN0eCwgQ1VEQVZQUENvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHR4X2RhdGEsIHVuc2lnbmVkIGludCBwdHhfbGVu KTsKKworLyoqCisgKiBHZXQgQ1VEQSBmdW5jdGlvbiBmcm9tIGxvYWRlZCBtb2R1bGUKKyAqLwor aW50IGZmX2N1ZGFfdnBwX2dldF9mdW5jdGlvbihBVkZpbHRlckNvbnRleHQgKmN0eCwgQ1VEQVZQ UENvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVZnVuY3Rpb24gKmZ1 bmMsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSk7CisKKyNlbmRpZiAvKiBBVkZJTFRFUl9DVURBX1ZQ UF9IICovCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfY3VkYS5jIGIvbGli YXZmaWx0ZXIvdmZfdHJhbnNwb3NlX2N1ZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi5iYjc5NTljZTBmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvdmZf dHJhbnNwb3NlX2N1ZGEuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAyNSwgRmFlZXogS2FkaXJpIDwgZjFrMmZhZWV6IGF0IGdtYWlsIGRvdCBjb20+CisgKgorICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIEhhcmR3 YXJlIGFjY2VsZXJhdGVkIHRyYW5zcG9zZSBmaWx0ZXIgYmFzZWQgb24gQ1VEQQorICovCisKKyNp bmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29u dGV4dC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHRfY3VkYV9pbnRlcm5hbC5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC9jdWRhX2NoZWNrLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2 c3RyaW5nLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisjaW5jbHVkZSAibGli YXZ1dGlsL2ltZ3V0aWxzLmgiCisKKyNpbmNsdWRlICJmaWx0ZXJzLmgiCisjaW5jbHVkZSAiZm9y bWF0cy5oIgorI2luY2x1ZGUgInZpZGVvLmgiCisjaW5jbHVkZSAidHJhbnNwb3NlLmgiCisjaW5j bHVkZSAiY3VkYS9jdWRhX3ZwcC5oIgorCitzdGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0 IHN1cHBvcnRlZF9mb3JtYXRzW10gPSB7CisgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLAorICAgIEFW X1BJWF9GTVRfTlYxMiwKKyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAsCisgICAgQVZfUElYX0ZNVF9Q MDEwLAorICAgIEFWX1BJWF9GTVRfUDAxNiwKKyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAxNiwKKyAg ICBBVl9QSVhfRk1UXzBSR0IzMiwKKyAgICBBVl9QSVhfRk1UXzBCR1IzMiwKKyAgICBBVl9QSVhf Rk1UX1JHQjMyLAorICAgIEFWX1BJWF9GTVRfQkdSMzIsCit9OworCisjZGVmaW5lIERJVl9VUChh LCBiKSAoICgoYSkgKyAoYikgLSAxKSAvIChiKSApCisjZGVmaW5lIEJMT0NLWCAzMgorI2RlZmlu ZSBCTE9DS1kgMTYKKwordHlwZWRlZiBzdHJ1Y3QgVHJhbnNwb3NlQ1VEQUNvbnRleHQgeworICAg IENVREFWUFBDb250ZXh0IHZwcF9jdHg7IC8vIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkCisKKyAg ICBpbnQgcGFzc3Rocm91Z2g7ICAgICAgICAgLy8gUGFzc3Rocm91Z2hUeXBlLCBsYW5kc2NhcGUg cGFzc3Rocm91Z2ggbW9kZSBlbmFibGVkCisgICAgaW50IGRpcjsgICAgICAgICAgICAgICAgIC8v IFRyYW5zcG9zZURpcgorCisgICAgLy8gQ1VEQSBmdW5jdGlvbnMgZm9yIGRpZmZlcmVudCBvcGVy YXRpb25zCisgICAgQ1VmdW5jdGlvbiBjdV9mdW5jX3RyYW5zcG9zZTsKKyAgICBDVWZ1bmN0aW9u IGN1X2Z1bmNfdHJhbnNwb3NlX3V2OworfSBUcmFuc3Bvc2VDVURBQ29udGV4dDsKKworc3RhdGlj IGludCBmb3JtYXRfaXNfc3VwcG9ydGVkKGVudW0gQVZQaXhlbEZvcm1hdCBmbXQpCit7CisgICAg aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoc3VwcG9ydGVkX2Zv cm1hdHMpOyBpKyspCisgICAgICAgIGlmIChzdXBwb3J0ZWRfZm9ybWF0c1tpXSA9PSBmbXQpCisg ICAgICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGF2X2NvbGQg aW50IHRyYW5zcG9zZV9jdWRhX2xvYWRfZnVuY3Rpb25zKEFWRmlsdGVyQ29udGV4dCAqYXZjdHgs IGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQpCit7CisgICAgVHJhbnNwb3NlQ1VEQUNvbnRleHQg KmN0eCA9IGF2Y3R4LT5wcml2OworICAgIENVREFWUFBDb250ZXh0ICp2cHBfY3R4ID0gJmN0eC0+ dnBwX2N0eDsKKyAgICBpbnQgcmV0OworICAgIGNoYXIgYnVmWzEyOF07CisKKyAgICBjb25zdCBj aGFyICpmbXRfbmFtZSA9IGF2X2dldF9waXhfZm10X25hbWUoZm9ybWF0KTsKKworICAgIGV4dGVy biBjb25zdCB1bnNpZ25lZCBjaGFyIGZmX3ZmX3RyYW5zcG9zZV9jdWRhX3B0eF9kYXRhW107Cisg ICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBmZl92Zl90cmFuc3Bvc2VfY3VkYV9wdHhfbGVu OworCisgICAgcmV0ID0gZmZfY3VkYV92cHBfbG9hZF9tb2R1bGUoYXZjdHgsIHZwcF9jdHgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZfdmZfdHJhbnNwb3NlX2N1ZGFfcHR4 X2RhdGEsIGZmX3ZmX3RyYW5zcG9zZV9jdWRhX3B0eF9sZW4pOworICAgIGlmIChyZXQgPCAwKQor ICAgICAgICByZXR1cm4gcmV0OworCisgICAgLy8gTG9hZCB0cmFuc3Bvc2UgZnVuY3Rpb25zCisg ICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlRyYW5zcG9zZV8lcyIsIGZtdF9uYW1lKTsK KyAgICByZXQgPSBmZl9jdWRhX3ZwcF9nZXRfZnVuY3Rpb24oYXZjdHgsIHZwcF9jdHgsICZjdHgt PmN1X2Z1bmNfdHJhbnNwb3NlLCBidWYpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0ZBVEFMLCAiVW5zdXBwb3J0ZWQgZm9ybWF0IGZvciB0cmFuc3Bv c2U6ICVzXG4iLCBmbXRfbmFtZSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NZUyk7Cisg ICAgfQorCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlRyYW5zcG9zZV8lc191diIs IGZtdF9uYW1lKTsKKyAgICByZXQgPSBmZl9jdWRhX3ZwcF9nZXRfZnVuY3Rpb24oYXZjdHgsIHZw cF9jdHgsICZjdHgtPmN1X2Z1bmNfdHJhbnNwb3NlX3V2LCBidWYpOworICAgIGlmIChyZXQgPCAw ICYmIHZwcF9jdHgtPmluX3BsYW5lcyA+IDEpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfV0FSTklORywgIlVWIGZ1bmN0aW9uIG5vdCBmb3VuZCBmb3IgZm9ybWF0OiAlc1xuIiwgZm10 X25hbWUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyYW5zcG9z ZV9jdWRhX2J1aWxkX2ZpbHRlcl9wYXJhbXMoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAg ICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXY7CisgICAgQ1VEQVZQUENv bnRleHQgKnZwcF9jdHggPSAmY3R4LT52cHBfY3R4OworCisgICAgaWYgKCFmb3JtYXRfaXNfc3Vw cG9ydGVkKHZwcF9jdHgtPmluX2ZtdCkpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJVbnN1cHBvcnRlZCBpbnB1dCBmb3JtYXQ6ICVzXG4iLAorICAgICAgICAgICAgICAg YXZfZ2V0X3BpeF9mbXRfbmFtZSh2cHBfY3R4LT5pbl9mbXQpKTsKKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PU1lTKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGF2X2Nv bGQgaW50IHRyYW5zcG9zZV9jdWRhX2tlcm5lbChBVkZpbHRlckNvbnRleHQgKmF2Y3R4LCBDVWZ1 bmN0aW9uIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1V0 ZXhPYmplY3Qgc3JjX3RleFs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBVkZyYW1lICpvdXRfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBkc3Rfd2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQgZHN0X3Bp dGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfd2lk dGgsIGludCBzcmNfaGVpZ2h0LCBpbnQgZGlyKQoreworICAgIFRyYW5zcG9zZUNVREFDb250ZXh0 ICpjdHggPSBhdmN0eC0+cHJpdjsKKyAgICBDVURBVlBQQ29udGV4dCAqcyA9ICZjdHgtPnZwcF9j dHg7CisgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBzLT5jdWRhX2RsOworCisgICAgQ1VkZXZpY2Vw dHIgZHN0X2RldnB0cls0XSA9IHsKKyAgICAgICAgKENVZGV2aWNlcHRyKW91dF9mcmFtZS0+ZGF0 YVswXSwgKENVZGV2aWNlcHRyKW91dF9mcmFtZS0+ZGF0YVsxXSwKKyAgICAgICAgKENVZGV2aWNl cHRyKW91dF9mcmFtZS0+ZGF0YVsyXSwgKENVZGV2aWNlcHRyKW91dF9mcmFtZS0+ZGF0YVszXQor ICAgIH07CisKKyAgICB2b2lkICphcmdzW10gPSB7CisgICAgICAgICZzcmNfdGV4WzBdLCAmc3Jj X3RleFsxXSwgJnNyY190ZXhbMl0sICZzcmNfdGV4WzNdLAorICAgICAgICAmZHN0X2RldnB0clsw XSwgJmRzdF9kZXZwdHJbMV0sICZkc3RfZGV2cHRyWzJdLCAmZHN0X2RldnB0clszXSwKKyAgICAg ICAgJndpZHRoLCAmaGVpZ2h0LCAmZHN0X3BpdGNoLAorICAgICAgICAmZHN0X3dpZHRoLCAmZHN0 X2hlaWdodCwKKyAgICAgICAgJnNyY193aWR0aCwgJnNyY19oZWlnaHQsCisgICAgICAgICZkaXIK KyAgICB9OworCisgICAgcmV0dXJuIENIRUNLX0NVKGN1LT5jdUxhdW5jaEtlcm5lbChmdW5jLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJVl9VUCh3aWR0aCwgQkxPQ0tY KSwgRElWX1VQKGhlaWdodCwgQkxPQ0tZKSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCTE9DS1gsIEJMT0NLWSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLCBzLT5jdV9zdHJlYW0sIGFyZ3MsIE5VTEwpKTsKK30KKworc3RhdGljIGlu dCB0cmFuc3Bvc2VfY3VkYV9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRnJh bWUgKmlucHV0X2ZyYW1lKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqYXZjdHggICAgID0gaW5s aW5rLT5kc3Q7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rICAgICAgPSBhdmN0eC0+b3V0cHV0 c1swXTsKKyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ICA9IGF2Y3R4LT5wcml2OworICAg IENVREFWUFBDb250ZXh0ICpzICAgICAgICAgID0gJmN0eC0+dnBwX2N0eDsKKyAgICBDdWRhRnVu Y3Rpb25zICpjdSAgICAgICAgICA9IHMtPmN1ZGFfZGw7CisgICAgQVZGcmFtZSAqb3V0cHV0X2Zy YW1lICAgICAgPSBOVUxMOworICAgIENVdGV4T2JqZWN0IHRleFs0XSA9IHsgMCwgMCwgMCwgMCB9 OworICAgIGludCByZXQgPSAwOworICAgIGludCBpOworICAgIENVY29udGV4dCBkdW1teTsKKwor ICAgIGlmIChjdHgtPnBhc3N0aHJvdWdoKQorICAgICAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1l KG91dGxpbmssIGlucHV0X2ZyYW1lKTsKKworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVH LCAiRmlsdGVyIGlucHV0OiAlcywgJXV4JXUgKCUiUFJJZDY0IikuXG4iLAorICAgICAgICAgICBh dl9nZXRfcGl4X2ZtdF9uYW1lKGlucHV0X2ZyYW1lLT5mb3JtYXQpLAorICAgICAgICAgICBpbnB1 dF9mcmFtZS0+d2lkdGgsIGlucHV0X2ZyYW1lLT5oZWlnaHQsIGlucHV0X2ZyYW1lLT5wdHMpOwor CisgICAgLy8gUHVzaCBDVURBIGNvbnRleHQKKyAgICByZXQgPSBDSEVDS19DVShjdS0+Y3VDdHhQ dXNoQ3VycmVudChzLT5od2N0eC0+Y3VkYV9jdHgpKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAg ICAgcmV0dXJuIHJldDsKKworICAgIG91dHB1dF9mcmFtZSA9IGZmX2dldF92aWRlb19idWZmZXIo b3V0bGluaywgcy0+b3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy0+b3V0cHV0X2hlaWdodCk7CisgICAgaWYgKCFvdXRwdXRfZnJhbWUpIHsKKyAg ICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQor CisgICAgcmV0ID0gYXZfZnJhbWVfY29weV9wcm9wcyhvdXRwdXRfZnJhbWUsIGlucHV0X2ZyYW1l KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLy8gQ3JlYXRl IHRleHR1cmUgb2JqZWN0cyBmb3IgaW5wdXQKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+aW5fcGxh bmVzOyBpKyspIHsKKyAgICAgICAgQ1VEQV9URVhUVVJFX0RFU0MgdGV4X2Rlc2MgPSB7CisgICAg ICAgICAgICAuZmlsdGVyTW9kZSA9IENVX1RSX0ZJTFRFUl9NT0RFX1BPSU5ULAorICAgICAgICAg ICAgLmZsYWdzID0gQ1VfVFJTRl9SRUFEX0FTX0lOVEVHRVIsCisgICAgICAgIH07CisKKyAgICAg ICAgQ1VEQV9SRVNPVVJDRV9ERVNDIHJlc19kZXNjID0geworICAgICAgICAgICAgLnJlc1R5cGUg PSBDVV9SRVNPVVJDRV9UWVBFX1BJVENIMkQsCisgICAgICAgICAgICAucmVzLnBpdGNoMkQuZm9y bWF0ID0gcy0+aW5fcGxhbmVfZGVwdGhzW2ldIDw9IDggPworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENVX0FEX0ZPUk1BVF9VTlNJR05FRF9JTlQ4IDoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDVV9BRF9GT1JNQVRfVU5TSUdORURfSU5UMTYsCisgICAgICAg ICAgICAucmVzLnBpdGNoMkQubnVtQ2hhbm5lbHMgPSBzLT5pbl9wbGFuZV9jaGFubmVsc1tpXSwK KyAgICAgICAgICAgIC5yZXMucGl0Y2gyRC5waXRjaEluQnl0ZXMgPSBpbnB1dF9mcmFtZS0+bGlu ZXNpemVbaV0sCisgICAgICAgICAgICAucmVzLnBpdGNoMkQuZGV2UHRyID0gKENVZGV2aWNlcHRy KWlucHV0X2ZyYW1lLT5kYXRhW2ldLAorICAgICAgICB9OworCisgICAgICAgIGlmIChpID09IDEg fHwgaSA9PSAyKSB7CisgICAgICAgICAgICByZXNfZGVzYy5yZXMucGl0Y2gyRC53aWR0aCA9IEFW X0NFSUxfUlNISUZUKGlucHV0X2ZyYW1lLT53aWR0aCwgcy0+aW5fZGVzYy0+bG9nMl9jaHJvbWFf dyk7CisgICAgICAgICAgICByZXNfZGVzYy5yZXMucGl0Y2gyRC5oZWlnaHQgPSBBVl9DRUlMX1JT SElGVChpbnB1dF9mcmFtZS0+aGVpZ2h0LCBzLT5pbl9kZXNjLT5sb2cyX2Nocm9tYV9oKTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc19kZXNjLnJlcy5waXRjaDJELndpZHRoID0g aW5wdXRfZnJhbWUtPndpZHRoOworICAgICAgICAgICAgcmVzX2Rlc2MucmVzLnBpdGNoMkQuaGVp Z2h0ID0gaW5wdXRfZnJhbWUtPmhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IENI RUNLX0NVKGN1LT5jdVRleE9iamVjdENyZWF0ZSgmdGV4W2ldLCAmcmVzX2Rlc2MsICZ0ZXhfZGVz YywgTlVMTCkpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsK KyAgICB9CisKKyAgICAvLyBQcm9jZXNzIGx1bWEgcGxhbmUKKyAgICByZXQgPSB0cmFuc3Bvc2Vf Y3VkYV9rZXJuZWwoYXZjdHgsIGN0eC0+Y3VfZnVuY190cmFuc3Bvc2UsIHRleCwgb3V0cHV0X2Zy YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mcmFtZS0+d2lkdGgs IG91dHB1dF9mcmFtZS0+aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91 dHB1dF9mcmFtZS0+d2lkdGgsIG91dHB1dF9mcmFtZS0+aGVpZ2h0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG91dHB1dF9mcmFtZS0+bGluZXNpemVbMF0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXRfZnJhbWUtPndpZHRoLCBpbnB1dF9mcmFtZS0+aGVpZ2h0 LCBjdHgtPmRpcik7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJFcnJvciBkdXJpbmcgbHVtYSB0cmFuc3Bvc2U6ICVkXG4iLCByZXQpOwor ICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLy8gUHJvY2VzcyBjaHJvbWEgcGxhbmVz IGlmIHByZXNlbnQKKyAgICBpZiAocy0+aW5fcGxhbmVzID4gMSkgeworICAgICAgICByZXQgPSB0 cmFuc3Bvc2VfY3VkYV9rZXJuZWwoYXZjdHgsIGN0eC0+Y3VfZnVuY190cmFuc3Bvc2VfdXYsIHRl eCwgb3V0cHV0X2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9D RUlMX1JTSElGVChvdXRwdXRfZnJhbWUtPndpZHRoLCBzLT5pbl9kZXNjLT5sb2cyX2Nocm9tYV93 KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfQ0VJTF9SU0hJRlQob3V0 cHV0X2ZyYW1lLT5oZWlnaHQsIHMtPmluX2Rlc2MtPmxvZzJfY2hyb21hX2gpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZnJhbWUtPndpZHRoLCBvdXRwdXRfZnJh bWUtPmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zy YW1lLT5saW5lc2l6ZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZf Q0VJTF9SU0hJRlQoaW5wdXRfZnJhbWUtPndpZHRoLCBzLT5pbl9kZXNjLT5sb2cyX2Nocm9tYV93 KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfQ0VJTF9SU0hJRlQoaW5w dXRfZnJhbWUtPmhlaWdodCwgcy0+aW5fZGVzYy0+bG9nMl9jaHJvbWFfaCksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZGlyKTsKKyAgICAgICAgaWYgKHJldCA8IDAp IHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3IgZHVyaW5n IGNocm9tYSB0cmFuc3Bvc2U6ICVkXG4iLCByZXQpOworICAgICAgICAgICAgZ290byBmYWlsOwor ICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIHNhbXBsZSBhc3BlY3QgcmF0aW8KKyAg ICBpZiAoaW5wdXRfZnJhbWUtPnNhbXBsZV9hc3BlY3RfcmF0aW8ubnVtID09IDApIHsKKyAgICAg ICAgb3V0cHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gaW5wdXRfZnJhbWUtPnNhbXBs ZV9hc3BlY3RfcmF0aW87CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3V0cHV0X2ZyYW1lLT5zYW1w bGVfYXNwZWN0X3JhdGlvLm51bSA9IGlucHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvLmRl bjsKKyAgICAgICAgb3V0cHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvLmRlbiA9IGlucHV0 X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bTsKKyAgICB9CisKKyAgICBhdl9mcmFtZV9m cmVlKCZpbnB1dF9mcmFtZSk7CisKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkZp bHRlciBvdXRwdXQ6ICVzLCAldXgldSAoJSJQUklkNjQiKS5cbiIsCisgICAgICAgICAgIGF2X2dl dF9waXhfZm10X25hbWUob3V0cHV0X2ZyYW1lLT5mb3JtYXQpLAorICAgICAgICAgICBvdXRwdXRf ZnJhbWUtPndpZHRoLCBvdXRwdXRfZnJhbWUtPmhlaWdodCwgb3V0cHV0X2ZyYW1lLT5wdHMpOwor CisgICAgLy8gQ2xlYW51cCB0ZXh0dXJlIG9iamVjdHMKKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZf QVJSQVlfRUxFTVModGV4KTsgaSsrKQorICAgICAgICBpZiAodGV4W2ldKQorICAgICAgICAgICAg Q0hFQ0tfQ1UoY3UtPmN1VGV4T2JqZWN0RGVzdHJveSh0ZXhbaV0pKTsKKworICAgIENIRUNLX0NV KGN1LT5jdUN0eFBvcEN1cnJlbnQoJmR1bW15KSk7CisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFt ZShvdXRsaW5rLCBvdXRwdXRfZnJhbWUpOworCitmYWlsOgorICAgIGZvciAoaSA9IDA7IGkgPCBG Rl9BUlJBWV9FTEVNUyh0ZXgpOyBpKyspCisgICAgICAgIGlmICh0ZXhbaV0pCisgICAgICAgICAg ICBDSEVDS19DVShjdS0+Y3VUZXhPYmplY3REZXN0cm95KHRleFtpXSkpOworCisgICAgYXZfZnJh bWVfZnJlZSgmaW5wdXRfZnJhbWUpOworICAgIGF2X2ZyYW1lX2ZyZWUoJm91dHB1dF9mcmFtZSk7 CisgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXkpKTsKKyAgICByZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCB0cmFuc3Bvc2VfY3VkYV91bmluaXQoQVZGaWx0ZXJDb250 ZXh0ICphdmN0eCkKK3sKKyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ICA9IGF2Y3R4LT5w cml2OworICAgIENVREFWUFBDb250ZXh0ICpzICAgICAgICAgID0gJmN0eC0+dnBwX2N0eDsKKwor ICAgIGlmIChzLT5jdV9tb2R1bGUpIHsKKyAgICAgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBzLT5j dWRhX2RsOworICAgICAgICBDVWNvbnRleHQgZHVtbXk7CisKKyAgICAgICAgaWYgKHMtPmh3Y3R4 KSB7CisgICAgICAgICAgICBDSEVDS19DVShjdS0+Y3VDdHhQdXNoQ3VycmVudChzLT5od2N0eC0+ Y3VkYV9jdHgpKTsKKyAgICAgICAgICAgIENIRUNLX0NVKGN1LT5jdU1vZHVsZVVubG9hZChzLT5j dV9tb2R1bGUpKTsKKyAgICAgICAgICAgIHMtPmN1X21vZHVsZSA9IE5VTEw7CisgICAgICAgICAg ICBDSEVDS19DVShjdS0+Y3VDdHhQb3BDdXJyZW50KCZkdW1teSkpOworICAgICAgICB9CisgICAg fQorCisgICAgYXZfYnVmZmVyX3VucmVmKCZzLT5kZXZpY2VfcmVmKTsKKyAgICBzLT5od2N0eCA9 IE5VTEw7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCB0cmFuc3Bvc2VfY3VkYV9pbml0KEFWRmls dGVyQ29udGV4dCAqYXZjdHgpCit7CisgICAgVHJhbnNwb3NlQ1VEQUNvbnRleHQgKmN0eCA9IGF2 Y3R4LT5wcml2OworICAgIENVREFWUFBDb250ZXh0ICp2cHBfY3R4ID0gJmN0eC0+dnBwX2N0eDsK KworICAgIGZmX2N1ZGFfdnBwX2N0eF9pbml0KGF2Y3R4KTsKKyAgICB2cHBfY3R4LT5sb2FkX2Z1 bmN0aW9ucyA9IHRyYW5zcG9zZV9jdWRhX2xvYWRfZnVuY3Rpb25zOworICAgIHZwcF9jdHgtPmJ1 aWxkX2ZpbHRlcl9wYXJhbXMgPSB0cmFuc3Bvc2VfY3VkYV9idWlsZF9maWx0ZXJfcGFyYW1zOwor ICAgIHZwcF9jdHgtPnBpcGVsaW5lX3VuaW5pdCA9IHRyYW5zcG9zZV9jdWRhX3VuaW5pdDsKKyAg ICB2cHBfY3R4LT5vdXRwdXRfZm9ybWF0ID0gQVZfUElYX0ZNVF9OT05FOworCisgICAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJhbnNwb3NlX2N1ZGFfY29uZmlnX291dHB1dChBVkZpbHRl ckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICphdmN0eCAgICAgPSBvdXRs aW5rLT5zcmM7CisgICAgVHJhbnNwb3NlQ1VEQUNvbnRleHQgKmN0eCAgPSBhdmN0eC0+cHJpdjsK KyAgICBDVURBVlBQQ29udGV4dCAqdnBwX2N0eCAgICA9ICZjdHgtPnZwcF9jdHg7CisgICAgQVZG aWx0ZXJMaW5rICppbmxpbmsgICAgICAgPSBhdmN0eC0+aW5wdXRzWzBdOworCisgICAgaWYgKChp bmxpbmstPncgPj0gaW5saW5rLT5oICYmIGN0eC0+cGFzc3Rocm91Z2ggPT0gVFJBTlNQT1NFX1BU X1RZUEVfTEFORFNDQVBFKSB8fAorICAgICAgICAoaW5saW5rLT53IDw9IGlubGluay0+aCAmJiBj dHgtPnBhc3N0aHJvdWdoID09IFRSQU5TUE9TRV9QVF9UWVBFX1BPUlRSQUlUKSkgeworICAgICAg ICB2cHBfY3R4LT5wYXNzdGhyb3VnaCA9IDE7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsCisgICAgICAgICAgICAgICAidzolZCBoOiVkIC0+IHc6JWQgaDolZCAocGFzc3Ro cm91Z2ggbW9kZSlcbiIsCisgICAgICAgICAgICAgICBpbmxpbmstPncsIGlubGluay0+aCwgaW5s aW5rLT53LCBpbmxpbmstPmgpOworICAgICAgICByZXR1cm4gZmZfY3VkYV92cHBfY29uZmlnX291 dHB1dChvdXRsaW5rKTsKKyAgICB9CisgICAgY3R4LT5wYXNzdGhyb3VnaCA9IFRSQU5TUE9TRV9Q VF9UWVBFX05PTkU7CisKKyAgICAvLyBGb3IgdHJhbnNwb3NlIG9wZXJhdGlvbnMgdGhhdCBzd2Fw IGRpbWVuc2lvbnMKKyAgICBzd2l0Y2ggKGN0eC0+ZGlyKSB7CisgICAgY2FzZSBUUkFOU1BPU0Vf Q0NMT0NLX0ZMSVA6CisgICAgY2FzZSBUUkFOU1BPU0VfQ0NMT0NLOgorICAgIGNhc2UgVFJBTlNQ T1NFX0NMT0NLOgorICAgIGNhc2UgVFJBTlNQT1NFX0NMT0NLX0ZMSVA6CisgICAgICAgIHZwcF9j dHgtPm91dHB1dF93aWR0aCAgPSBhdmN0eC0+aW5wdXRzWzBdLT5oOworICAgICAgICB2cHBfY3R4 LT5vdXRwdXRfaGVpZ2h0ID0gYXZjdHgtPmlucHV0c1swXS0+dzsKKyAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfREVCVUcsICJzd2FwIHdpZHRoIGFuZCBoZWlnaHQgZm9yIGNsb2NrL2NjbG9j ayByb3RhdGlvblxuIik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHZw cF9jdHgtPm91dHB1dF93aWR0aCAgPSBhdmN0eC0+aW5wdXRzWzBdLT53OworICAgICAgICB2cHBf Y3R4LT5vdXRwdXRfaGVpZ2h0ID0gYXZjdHgtPmlucHV0c1swXS0+aDsKKyAgICAgICAgYnJlYWs7 CisgICAgfQorCisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwKKyAgICAgICAgICAg Inc6JWQgaDolZCBkaXI6JWQgLT4gdzolZCBoOiVkIHJvdGF0aW9uOiVzIHZmbGlwOiVkXG4iLAor ICAgICAgICAgICBpbmxpbmstPncsIGlubGluay0+aCwgY3R4LT5kaXIsIHZwcF9jdHgtPm91dHB1 dF93aWR0aCwgdnBwX2N0eC0+b3V0cHV0X2hlaWdodCwKKyAgICAgICAgICAgY3R4LT5kaXIgPT0g MSB8fCBjdHgtPmRpciA9PSAzID8gImNsb2Nrd2lzZSIgOiAiY291bnRlcmNsb2Nrd2lzZSIsCisg ICAgICAgICAgIGN0eC0+ZGlyID09IDAgfHwgY3R4LT5kaXIgPT0gMyk7CisKKyAgICByZXR1cm4g ZmZfY3VkYV92cHBfY29uZmlnX291dHB1dChvdXRsaW5rKTsKK30KKworc3RhdGljIEFWRnJhbWUg KmdldF92aWRlb19idWZmZXIoQVZGaWx0ZXJMaW5rICppbmxpbmssIGludCB3LCBpbnQgaCkKK3sK KyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ID0gaW5saW5rLT5kc3QtPnByaXY7CisKKyAg ICByZXR1cm4gY3R4LT5wYXNzdGhyb3VnaCA/CisgICAgICAgIGZmX251bGxfZ2V0X3ZpZGVvX2J1 ZmZlcihpbmxpbmssIHcsIGgpIDoKKyAgICAgICAgZmZfZGVmYXVsdF9nZXRfdmlkZW9fYnVmZmVy KGlubGluaywgdywgaCk7Cit9CisKKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFRyYW5zcG9z ZUNVREFDb250ZXh0LCB4KQorI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0g fCBBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0pCitzdGF0aWMgY29uc3QgQVZPcHRpb24gdHJh bnNwb3NlX2N1ZGFfb3B0aW9uc1tdID0geworICAgIHsgImRpciIsICJzZXQgdHJhbnNwb3NlIGRp cmVjdGlvbiIsIE9GRlNFVChkaXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IFRSQU5TUE9T RV9DQ0xPQ0tfRkxJUCB9LCAwLCA2LCBGTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7 ICJjY2xvY2tfZmxpcCIsICAgInJvdGF0ZSBjb3VudGVyLWNsb2Nrd2lzZSB3aXRoIHZlcnRpY2Fs IGZsaXAiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NDTE9DS19G TElQIH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7ICJjbG9jayIs ICAgICAgICAgInJvdGF0ZSBjbG9ja3dpc2UiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NMT0NLICAgICAgIH0sIC5m bGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7ICJjY2xvY2siLCAgICAgICAg InJvdGF0ZSBjb3VudGVyLWNsb2Nrd2lzZSIsICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRf VFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NDTE9DSyAgICAgIH0sIC5mbGFncz1GTEFH UywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7ICJjbG9ja19mbGlwIiwgICAgInJvdGF0ZSBj bG9ja3dpc2Ugd2l0aCB2ZXJ0aWNhbCBmbGlwIiwgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05T VCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NMT0NLX0ZMSVAgIH0sIC5mbGFncz1GTEFHUywgLnVuaXQg PSAiZGlyIiB9LAorICAgICAgICB7ICJyZXZlcnNhbCIsICAgICAgInJvdGF0ZSBieSBoYWxmLXR1 cm4iLCAgICAgICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0 ID0gVFJBTlNQT1NFX1JFVkVSU0FMICAgIH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9 LAorICAgICAgICB7ICJoZmxpcCIsICAgICAgICAgImZsaXAgaG9yaXpvbnRhbGx5IiwgICAgICAg ICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQ T1NFX0hGTElQICAgICAgIH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAg ICB7ICJ2ZmxpcCIsICAgICAgICAgImZsaXAgdmVydGljYWxseSIsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX1ZGTElQ ICAgICAgIH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorCisgICAgeyAicGFzc3Ro cm91Z2giLCAiZG8gbm90IGFwcGx5IHRyYW5zcG9zaXRpb24gaWYgdGhlIGlucHV0IG1hdGNoZXMg dGhlIHNwZWNpZmllZCBnZW9tZXRyeSIsCisgICAgICBPRkZTRVQocGFzc3Rocm91Z2gpLCBBVl9P UFRfVFlQRV9JTlQsIHsuaTY0PVRSQU5TUE9TRV9QVF9UWVBFX05PTkV9LCAgMCwgSU5UX01BWCwg RkxBR1MsIC51bml0ID0gInBhc3N0aHJvdWdoIiB9LAorICAgICAgICB7ICJub25lIiwgICAgICAi YWx3YXlzIGFwcGx5IHRyYW5zcG9zaXRpb24iLCAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2 ND1UUkFOU1BPU0VfUFRfVFlQRV9OT05FfSwgICAgICBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywg LnVuaXQgPSAicGFzc3Rocm91Z2giIH0sCisgICAgICAgIHsgInBvcnRyYWl0IiwgICJwcmVzZXJ2 ZSBwb3J0cmFpdCBnZW9tZXRyeSIsICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVRSQU5T UE9TRV9QVF9UWVBFX1BPUlRSQUlUfSwgIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAudW5pdCA9 ICJwYXNzdGhyb3VnaCIgfSwKKyAgICAgICAgeyAibGFuZHNjYXBlIiwgInByZXNlcnZlIGxhbmRz Y2FwZSBnZW9tZXRyeSIsICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9VFJBTlNQT1NFX1BU X1RZUEVfTEFORFNDQVBFfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsIC51bml0ID0gInBhc3N0 aHJvdWdoIiB9LAorCisgICAgeyBOVUxMIH0KK307CisKK0FWRklMVEVSX0RFRklORV9DTEFTUyh0 cmFuc3Bvc2VfY3VkYSk7CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCB0cmFuc3Bvc2VfY3Vk YV9pbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIs CisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5m aWx0ZXJfZnJhbWUgPSB0cmFuc3Bvc2VfY3VkYV9maWx0ZXJfZnJhbWUsCisgICAgICAgIC5nZXRf YnVmZmVyLnZpZGVvID0gZ2V0X3ZpZGVvX2J1ZmZlciwKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9 IGZmX2N1ZGFfdnBwX2NvbmZpZ19pbnB1dCwKKyAgICB9LAorfTsKKworc3RhdGljIGNvbnN0IEFW RmlsdGVyUGFkIHRyYW5zcG9zZV9jdWRhX291dHB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5u YW1lID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAg ICAgICAgLmNvbmZpZ19wcm9wcyA9IHRyYW5zcG9zZV9jdWRhX2NvbmZpZ19vdXRwdXQsCisgICAg fSwKK307CisKK2NvbnN0IEZGRmlsdGVyIGZmX3ZmX3RyYW5zcG9zZV9jdWRhID0geworICAgIC5w Lm5hbWUgICAgICAgICA9ICJ0cmFuc3Bvc2VfY3VkYSIsCisgICAgLnAuZGVzY3JpcHRpb24gID0g TlVMTF9JRl9DT05GSUdfU01BTEwoIkNVREEgYWNjZWxlcmF0ZWQgdmlkZW8gdHJhbnNwb3NlIiks CisgICAgLnAucHJpdl9jbGFzcyAgID0gJnRyYW5zcG9zZV9jdWRhX2NsYXNzLAorICAgIC5wcml2 X3NpemUgICAgICA9IHNpemVvZihUcmFuc3Bvc2VDVURBQ29udGV4dCksCisgICAgLmluaXQgICAg ICAgICAgID0gdHJhbnNwb3NlX2N1ZGFfaW5pdCwKKyAgICAudW5pbml0ICAgICAgICAgPSBmZl9j dWRhX3ZwcF9jdHhfdW5pbml0LAorICAgIEZJTFRFUl9JTlBVVFModHJhbnNwb3NlX2N1ZGFfaW5w dXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyh0cmFuc3Bvc2VfY3VkYV9vdXRwdXRzKSwKKyAgICBG SUxURVJfUVVFUllfRlVOQzIoZmZfY3VkYV92cHBfcXVlcnlfZm9ybWF0cyksCisgICAgLmZsYWdz X2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKK307CmRpZmYgLS1naXQg YS9saWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfY3VkYS5jdSBiL2xpYmF2ZmlsdGVyL3ZmX3RyYW5z cG9zZV9jdWRhLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjEzODRj MjI4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfY3VkYS5j dQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgRmFlZXogS2Fk aXJpIDwgZjFrMmZhZWV6IGF0IGdtYWlsIGRvdCBjb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJjdWRhL3ZlY3Rvcl9oZWxwZXJzLmN1aCIKKwor Ly8gVHJhbnNwb3NlIGRpcmVjdGlvbiBjb25zdGFudHMgKGZyb20gdHJhbnNwb3NlLmgpCisjZGVm aW5lIFRSQU5TUE9TRV9DQ0xPQ0tfRkxJUCAwCisjZGVmaW5lIFRSQU5TUE9TRV9DTE9DSyAgICAg ICAxCisjZGVmaW5lIFRSQU5TUE9TRV9DQ0xPQ0sgICAgICAyCisjZGVmaW5lIFRSQU5TUE9TRV9D TE9DS19GTElQICAzCisjZGVmaW5lIFRSQU5TUE9TRV9SRVZFUlNBTCAgICA0CisjZGVmaW5lIFRS QU5TUE9TRV9IRkxJUCAgICAgICA1CisjZGVmaW5lIFRSQU5TUE9TRV9WRkxJUCAgICAgICA2CisK Ky8vIEZGbXBlZyBwYXNzZXMgcGl0Y2ggaW4gYnl0ZXMsIENVREEgdXNlcyBwb3RlbnRpYWxseSBs YXJnZXIgdHlwZXMKKyNkZWZpbmUgRklYRURfUElUQ0goVCkgXAorICAgIChkc3RfcGl0Y2gvc2l6 ZW9mKFQpKQorCisjZGVmaW5lIERFRkFVTFRfRFNUKG4sIFQpIFwKKyAgICBkc3Rbbl1beW8qRklY RURfUElUQ0goVCkreG9dCisKKy8vIC0tLSBDT09SRElOQVRFIFRSQU5TRk9STUFUSU9OIEZVTkNU SU9OUyAtLS0KKworX19kZXZpY2VfXyBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3RyYW5zcG9zZV9j b29yZHMoaW50IHNyY194LCBpbnQgc3JjX3ksIGludCBzcmNfd2lkdGgsIGludCBzcmNfaGVpZ2h0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KmRzdF94LCBpbnQgKmRzdF95LCBpbnQgZHN0X3dpZHRoLCBpbnQgZHN0X2hlaWdodCwgaW50IGRp cikKK3sKKyAgICBzd2l0Y2ggKGRpcikgeworICAgIGNhc2UgVFJBTlNQT1NFX0NDTE9DS19GTElQ OiAvLyA5MMKwIENDVyArIHZlcnRpY2FsIGZsaXAKKyAgICAgICAgKmRzdF94ID0gc3JjX3k7Cisg ICAgICAgICpkc3RfeSA9IHNyY194OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRSQU5TUE9T RV9DTE9DSzogLy8gOTDCsCBDVworICAgICAgICAqZHN0X3ggPSBzcmNfeTsKKyAgICAgICAgKmRz dF95ID0gc3JjX3dpZHRoIC0gMSAtIHNyY194OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRS QU5TUE9TRV9DQ0xPQ0s6IC8vIDkwwrAgQ0NXCisgICAgICAgICpkc3RfeCA9IHNyY19oZWlnaHQg LSAxIC0gc3JjX3k7CisgICAgICAgICpkc3RfeSA9IHNyY194OworICAgICAgICBicmVhazsKKyAg ICBjYXNlIFRSQU5TUE9TRV9DTE9DS19GTElQOiAvLyA5MMKwIENXICsgdmVydGljYWwgZmxpcAor ICAgICAgICAqZHN0X3ggPSBzcmNfaGVpZ2h0IC0gMSAtIHNyY195OworICAgICAgICAqZHN0X3kg PSBzcmNfd2lkdGggLSAxIC0gc3JjX3g7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFJBTlNQ T1NFX1JFVkVSU0FMOiAvLyAxODDCsCByb3RhdGlvbgorICAgICAgICAqZHN0X3ggPSBzcmNfd2lk dGggLSAxIC0gc3JjX3g7CisgICAgICAgICpkc3RfeSA9IHNyY19oZWlnaHQgLSAxIC0gc3JjX3k7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFJBTlNQT1NFX0hGTElQOiAvLyBIb3Jpem9udGFs IGZsaXAKKyAgICAgICAgKmRzdF94ID0gc3JjX3dpZHRoIC0gMSAtIHNyY194OworICAgICAgICAq ZHN0X3kgPSBzcmNfeTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUUkFOU1BPU0VfVkZMSVA6 IC8vIFZlcnRpY2FsIGZsaXAKKyAgICAgICAgKmRzdF94ID0gc3JjX3g7CisgICAgICAgICpkc3Rf eSA9IHNyY19oZWlnaHQgLSAxIC0gc3JjX3k7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6 CisgICAgICAgICpkc3RfeCA9IHNyY194OworICAgICAgICAqZHN0X3kgPSBzcmNfeTsKKyAgICAg ICAgYnJlYWs7CisgICAgfQorfQorCisvLyAtLS0gVFJBTlNQT1NFIEtFUk5FTFMgLS0tCisKKyNk ZWZpbmUgVFJBTlNQT1NFX0RFRihuYW1lLCBpbl90eXBlLCBvdXRfdHlwZSkgXAorX19kZXZpY2Vf XyBzdGF0aWMgaW5saW5lIHZvaWQgVHJhbnNwb3NlXyMjbmFtZSMjX2ltcGwoIFwKKyAgICBjdWRh VGV4dHVyZU9iamVjdF90IHNyY190ZXhbNF0sIG91dF90eXBlICpkc3RbNF0sIFwKKyAgICBpbnQg eG8sIGludCB5bywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZHN0X3BpdGNoLCBcCisgICAg aW50IGRzdF93aWR0aCwgaW50IGRzdF9oZWlnaHQsIGludCBzcmNfd2lkdGgsIGludCBzcmNfaGVp Z2h0LCBpbnQgZGlyKSBcCit7IFwKKyAgICBpbnQgc3JjX3gsIHNyY195OyBcCisgICAgZ2V0X3Ry YW5zcG9zZV9jb29yZHMoeG8sIHlvLCB3aWR0aCwgaGVpZ2h0LCAmc3JjX3gsICZzcmNfeSwgc3Jj X3dpZHRoLCBzcmNfaGVpZ2h0LCBkaXIpOyBcCisgICAgXAorICAgIGluX3R5cGUgcGl4ZWwgPSB0 ZXgyRDxpbl90eXBlPihzcmNfdGV4WzBdLCBzcmNfeCArIDAuNWYsIHNyY195ICsgMC41Zik7IFwK KyAgICBERUZBVUxUX0RTVCgwLCBvdXRfdHlwZSkgPSBwaXhlbDsgXAorfQorCisjZGVmaW5lIFRS QU5TUE9TRV9VVl9ERUYobmFtZSwgaW5fdHlwZV91diwgb3V0X3R5cGVfdXYpIFwKK19fZGV2aWNl X18gc3RhdGljIGlubGluZSB2b2lkIFRyYW5zcG9zZV8jI25hbWUjI191dl9pbXBsKCBcCisgICAg Y3VkYVRleHR1cmVPYmplY3RfdCBzcmNfdGV4WzRdLCBvdXRfdHlwZV91diAqZHN0WzRdLCBcCisg ICAgaW50IHhvLCBpbnQgeW8sIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRzdF9waXRjaCwg XAorICAgIGludCBkc3Rfd2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQgc3JjX3dpZHRoLCBpbnQg c3JjX2hlaWdodCwgaW50IGRpcikgXAoreyBcCisgICAgaW50IHNyY194LCBzcmNfeTsgXAorICAg IGdldF90cmFuc3Bvc2VfY29vcmRzKHhvLCB5bywgd2lkdGgsIGhlaWdodCwgJnNyY194LCAmc3Jj X3ksIHNyY193aWR0aCwgc3JjX2hlaWdodCwgZGlyKTsgXAorICAgIFwKKyAgICBpbl90eXBlX3V2 IHBpeGVsX3UgPSB0ZXgyRDxpbl90eXBlX3V2PihzcmNfdGV4WzFdLCBzcmNfeCArIDAuNWYsIHNy Y195ICsgMC41Zik7IFwKKyAgICBpbl90eXBlX3V2IHBpeGVsX3YgPSB0ZXgyRDxpbl90eXBlX3V2 PihzcmNfdGV4WzJdLCBzcmNfeCArIDAuNWYsIHNyY195ICsgMC41Zik7IFwKKyAgICBERUZBVUxU X0RTVCgxLCBvdXRfdHlwZV91dikgPSBwaXhlbF91OyBcCisgICAgREVGQVVMVF9EU1QoMiwgb3V0 X3R5cGVfdXYpID0gcGl4ZWxfdjsgXAorfQorCisjZGVmaW5lIFRSQU5TUE9TRV9OVl9VVl9ERUYo bmFtZSwgaW5fdHlwZV91diwgb3V0X3R5cGVfdXYpIFwKK19fZGV2aWNlX18gc3RhdGljIGlubGlu ZSB2b2lkIFRyYW5zcG9zZV8jI25hbWUjI191dl9pbXBsKCBcCisgICAgY3VkYVRleHR1cmVPYmpl Y3RfdCBzcmNfdGV4WzRdLCBvdXRfdHlwZV91diAqZHN0WzRdLCBcCisgICAgaW50IHhvLCBpbnQg eW8sIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRzdF9waXRjaCwgXAorICAgIGludCBkc3Rf d2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQgc3JjX3dpZHRoLCBpbnQgc3JjX2hlaWdodCwgaW50 IGRpcikgXAoreyBcCisgICAgaW50IHNyY194LCBzcmNfeTsgXAorICAgIGdldF90cmFuc3Bvc2Vf Y29vcmRzKHhvLCB5bywgd2lkdGgsIGhlaWdodCwgJnNyY194LCAmc3JjX3ksIHNyY193aWR0aCwg c3JjX2hlaWdodCwgZGlyKTsgXAorICAgIFwKKyAgICBpbl90eXBlX3V2IHBpeGVsX3V2ID0gdGV4 MkQ8aW5fdHlwZV91dj4oc3JjX3RleFsxXSwgc3JjX3ggKyAwLjVmLCBzcmNfeSArIDAuNWYpOyBc CisgICAgREVGQVVMVF9EU1QoMSwgb3V0X3R5cGVfdXYpID0gcGl4ZWxfdXY7IFwKK30KKworCisv LyBEZWZpbmUgdHJhbnNwb3NlIGltcGxlbWVudGF0aW9ucyBmb3IgYWxsIGZvcm1hdHMKK1RSQU5T UE9TRV9ERUYoeXV2NDIwcCwgdWNoYXIsIHVjaGFyKQorVFJBTlNQT1NFX1VWX0RFRih5dXY0MjBw LCB1Y2hhciwgdWNoYXIpCisKK1RSQU5TUE9TRV9ERUYobnYxMiwgdWNoYXIsIHVjaGFyKQorVFJB TlNQT1NFX05WX1VWX0RFRihudjEyLCB1Y2hhcjIsIHVjaGFyMikKKworVFJBTlNQT1NFX0RFRih5 dXY0NDRwLCB1Y2hhciwgdWNoYXIpCitUUkFOU1BPU0VfVVZfREVGKHl1djQ0NHAsIHVjaGFyLCB1 Y2hhcikKKworVFJBTlNQT1NFX0RFRihwMDEwbGUsIHVzaG9ydCwgdXNob3J0KQorVFJBTlNQT1NF X05WX1VWX0RFRihwMDEwbGUsIHVzaG9ydDIsIHVzaG9ydDIpCisKK1RSQU5TUE9TRV9ERUYocDAx NmxlLCB1c2hvcnQsIHVzaG9ydCkKK1RSQU5TUE9TRV9OVl9VVl9ERUYocDAxNmxlLCB1c2hvcnQy LCB1c2hvcnQyKQorCitUUkFOU1BPU0VfREVGKHl1djQ0NHAxNmxlLCB1c2hvcnQsIHVzaG9ydCkK K1RSQU5TUE9TRV9VVl9ERUYoeXV2NDQ0cDE2bGUsIHVzaG9ydCwgdXNob3J0KQorCitUUkFOU1BP U0VfREVGKHJnYjAsIHVjaGFyNCwgdWNoYXI0KQorVFJBTlNQT1NFX0RFRihiZ3IwLCB1Y2hhcjQs IHVjaGFyNCkKK1RSQU5TUE9TRV9ERUYocmdiYSwgdWNoYXI0LCB1Y2hhcjQpCitUUkFOU1BPU0Vf REVGKGJncmEsIHVjaGFyNCwgdWNoYXI0KQorCisvLyAtLS0gS0VSTkVMIEFSR1VNRU5UIERFRklO SVRJT05TIC0tLQorCisjZGVmaW5lIFRSQU5TUE9TRV9LRVJORUxfQVJHUyhUKSBcCisgICAgY3Vk YVRleHR1cmVPYmplY3RfdCBzcmNfdGV4XzAsIGN1ZGFUZXh0dXJlT2JqZWN0X3Qgc3JjX3RleF8x LCBcCisgICAgY3VkYVRleHR1cmVPYmplY3RfdCBzcmNfdGV4XzIsIGN1ZGFUZXh0dXJlT2JqZWN0 X3Qgc3JjX3RleF8zLCBcCisgICAgVCAqZHN0XzAsIFQgKmRzdF8xLCBUICpkc3RfMiwgVCAqZHN0 XzMsIFwKKyAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkc3RfcGl0Y2gsIFwKKyAgICBp bnQgZHN0X3dpZHRoLCBpbnQgZHN0X2hlaWdodCwgXAorICAgIGludCBzcmNfd2lkdGgsIGludCBz cmNfaGVpZ2h0LCBpbnQgZGlyCisKKyNkZWZpbmUgVFJBTlNQT1NFX0tFUk5FTF9JTVBMKGZ1bmNf aW1wbCwgVCkgXAorICAgIGN1ZGFUZXh0dXJlT2JqZWN0X3Qgc3JjX3RleFs0XSA9IHsgc3JjX3Rl eF8wLCBzcmNfdGV4XzEsIHNyY190ZXhfMiwgc3JjX3RleF8zIH07IFwKKyAgICBUICpkc3RbNF0g PSB7IGRzdF8wLCBkc3RfMSwgZHN0XzIsIGRzdF8zIH07IFwKKyAgICBpbnQgeG8gPSBibG9ja0lk eC54ICogYmxvY2tEaW0ueCArIHRocmVhZElkeC54OyBcCisgICAgaW50IHlvID0gYmxvY2tJZHgu eSAqIGJsb2NrRGltLnkgKyB0aHJlYWRJZHgueTsgXAorICAgIGlmICh4byA+PSB3aWR0aCB8fCB5 byA+PSBoZWlnaHQpIHJldHVybjsgXAorICAgIFwKKyAgICBmdW5jX2ltcGwoc3JjX3RleCwgZHN0 LCB4bywgeW8sIHdpZHRoLCBoZWlnaHQsIGRzdF9waXRjaCwgXAorICAgICAgICAgICAgICBkc3Rf d2lkdGgsIGRzdF9oZWlnaHQsIHNyY193aWR0aCwgc3JjX2hlaWdodCwgZGlyKTsKKworZXh0ZXJu ICJDIiB7CisKKy8vIC0tLSBUUkFOU1BPU0UgS0VSTkVMUyAtLS0KKworI2RlZmluZSBUUkFOU1BP U0VfS0VSTkVMKG5hbWUsIFQpIFwKK19fZ2xvYmFsX18gdm9pZCBUcmFuc3Bvc2VfIyNuYW1lKFRS QU5TUE9TRV9LRVJORUxfQVJHUyhUKSkgXAoreyBcCisgICAgVFJBTlNQT1NFX0tFUk5FTF9JTVBM KFRyYW5zcG9zZV8jI25hbWUjI19pbXBsLCBUKSBcCit9CisKKyNkZWZpbmUgVFJBTlNQT1NFX1VW X0tFUk5FTChuYW1lLCBUKSBcCitfX2dsb2JhbF9fIHZvaWQgVHJhbnNwb3NlXyMjbmFtZSMjX3V2 KFRSQU5TUE9TRV9LRVJORUxfQVJHUyhUKSkgXAoreyBcCisgICAgVFJBTlNQT1NFX0tFUk5FTF9J TVBMKFRyYW5zcG9zZV8jI25hbWUjI191dl9pbXBsLCBUKSBcCit9CisKKy8vIFRyYW5zcG9zZSBr ZXJuZWxzIGZvciBhbGwgZm9ybWF0cworVFJBTlNQT1NFX0tFUk5FTCh5dXY0MjBwLCB1Y2hhcikK K1RSQU5TUE9TRV9VVl9LRVJORUwoeXV2NDIwcCwgdWNoYXIpCisKK1RSQU5TUE9TRV9LRVJORUwo bnYxMiwgdWNoYXIpCitUUkFOU1BPU0VfVVZfS0VSTkVMKG52MTIsIHVjaGFyMikKKworVFJBTlNQ T1NFX0tFUk5FTCh5dXY0NDRwLCB1Y2hhcikKK1RSQU5TUE9TRV9VVl9LRVJORUwoeXV2NDQ0cCwg dWNoYXIpCisKK1RSQU5TUE9TRV9LRVJORUwocDAxMGxlLCB1c2hvcnQpCitUUkFOU1BPU0VfVVZf S0VSTkVMKHAwMTBsZSwgdXNob3J0MikKKworVFJBTlNQT1NFX0tFUk5FTChwMDE2bGUsIHVzaG9y dCkKK1RSQU5TUE9TRV9VVl9LRVJORUwocDAxNmxlLCB1c2hvcnQyKQorCitUUkFOU1BPU0VfS0VS TkVMKHl1djQ0NHAxNmxlLCB1c2hvcnQpCitUUkFOU1BPU0VfVVZfS0VSTkVMKHl1djQ0NHAxNmxl LCB1c2hvcnQpCisKK1RSQU5TUE9TRV9LRVJORUwocmdiMCwgdWNoYXI0KQorVFJBTlNQT1NFX0tF Uk5FTChiZ3IwLCB1Y2hhcjQpCitUUkFOU1BPU0VfS0VSTkVMKHJnYmEsIHVjaGFyNCkKK1RSQU5T UE9TRV9LRVJORUwoYmdyYSwgdWNoYXI0KQorCisvLyBGb3IgUkdCIGZvcm1hdHMsIFVWIGtlcm5l bHMgYXJlIG5vdCBuZWVkZWQsIGJ1dCB3ZSBwcm92aWRlIGVtcHR5IGltcGxlbWVudGF0aW9ucwor Ly8gdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgd2l0aCB0aGUgZnVuY3Rpb24gbG9hZGluZyBsb2dp YworCisjZGVmaW5lIEVNUFRZX1VWX0tFUk5FTChuYW1lLCBUKSBcCitfX2dsb2JhbF9fIHZvaWQg VHJhbnNwb3NlXyMjbmFtZSMjX3V2KFRSQU5TUE9TRV9LRVJORUxfQVJHUyhUKSkgeyB9IFwKKwor RU1QVFlfVVZfS0VSTkVMKHJnYjAsIHVjaGFyKQorRU1QVFlfVVZfS0VSTkVMKGJncjAsIHVjaGFy KQorRU1QVFlfVVZfS0VSTkVMKHJnYmEsIHVjaGFyKQorRU1QVFlfVVZfS0VSTkVMKGJncmEsIHVj aGFyKQorCit9Ci0tIAoyLjM0LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBl Zy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpU byB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K