Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qyz2W-00CWAq-JX for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Nov 2023 18:37:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qyz2V-002Z6N-2k for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Nov 2023 18:37:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qyz2U-002Z5s-LN for pgsql-hackers@lists.postgresql.org; Fri, 03 Nov 2023 18:37:02 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qyz2L-004XSt-Cl for pgsql-hackers@postgresql.org; Fri, 03 Nov 2023 18:36:57 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-9d8d3b65a67so349585766b.2 for ; Fri, 03 Nov 2023 11:36:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1699036612; x=1699641412; darn=postgresql.org; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=8ZZq5J3HLtoGvhryEYeNt0hF09DO4KodBAZuz7r8rc0=; b=Tw9nrMlfj1uSunCHQ0wAeZB5N0kWJNtUnK6WsFpzLgh+U8enAvqP4bGvbCMPeglnJ5 HCUQolCuR6KL3BenpcV0jqkNHfsvoZFuuJYqWNPdVhjOsjexcdc3GacSQam7Aim5oI7M 84Rxw/OFFyZMxuvf6uGj81jGiqnJLcA3lwvj4131QFXt42q4fqTe4qEc4Lo+7itW7iHy G1PPFC3RGBajk3sloFRMg/pHTJt5hgci+LM//UuIU++MRHn695X+esBle2Qfkw3uoa4O WMoxgv60sdcGSnMUMxW+12z3bXH5i4Xr+dbvOsWvY1YU2Hz8se4M0ia0Mu17HE4q9u8n rx4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699036612; x=1699641412; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=8ZZq5J3HLtoGvhryEYeNt0hF09DO4KodBAZuz7r8rc0=; b=nPeoU8IejjI57qE+qk7g+jJKuI8XYG3rXucN/GkqJ6Sub02AQlcf2DIYmDFafoptiV 9AAo1/BihsksutOPLyGJQJAcop/X8kV8ldj+m3F7xRqDXuwuTp8/Tprtb3C1qckN5RGo aslA9s7/hkLSe9kIcfAusT/singkbx7vG7EjarUBSTpTp/AKV0+Q6LLRIqk4gRcCFI2Z J8CJJD3t5TmrtKVOntqF1rNu+RPJI9ku4hXLuBa7NxWW8WVtjKmYTxJa1CdNmXgH2JET 6RqO2PuSaI3nx9c2fGMCqiCViycxH1T7TKSOJLyNYcQuaoLOHsQ5cR1IIH5xmLv0woqJ LAmQ== X-Gm-Message-State: AOJu0YwpqyK6jQ91I5R17BYcLg75bDhiW9HhokfuAmlXjUUzulgztlQf UDI/OJG3KJ7g++Wf4/RTvtdENuNA9XFomyFDC6PItA== X-Google-Smtp-Source: AGHT+IHA/SaeN4DQwyd3V1Du+AZxdjWbz5t+bn9Dq5KXh9MRzwriPf5ok8hqsqQz8wPr9172Cm3ukg== X-Received: by 2002:a17:907:7e85:b0:9c3:b3cb:29ae with SMTP id qb5-20020a1709077e8500b009c3b3cb29aemr6999780ejc.47.1699036611853; Fri, 03 Nov 2023 11:36:51 -0700 (PDT) Received: from [10.137.0.17] (srv1.mobissw.com. [89.235.0.226]) by smtp.gmail.com with ESMTPSA id s5-20020a170906168500b009a1be9c29d7sm1175225ejd.179.2023.11.03.11.36.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 03 Nov 2023 11:36:51 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------qZPTCJ8V3Tzsjazp59JPHqxQ" Message-ID: <1d68ef1d-41c5-7159-c6c0-b44dad4e3148@enterprisedb.com> Date: Fri, 3 Nov 2023 19:35:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: brininsert optimization opportunity Content-Language: en-US To: Soumyadeep Chakraborty Cc: Alvaro Herrera , pgsql-hackers , Ashwin Agrawal References: <20230704112358.bkm6r3fxp275m4lu@alvherre.pgsql> <2b672382-c0b3-3f44-b72c-86b1077b082b@enterprisedb.com> <11f78627-a934-1f8b-084e-21ed95f2564c@enterprisedb.com> <35e7be37-0d35-d8ea-a4d5-eff84aefcc39@enterprisedb.com> From: Tomas Vondra In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------qZPTCJ8V3Tzsjazp59JPHqxQ Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, I took a look at this patch today. I had to rebase the patch, due to some minor bitrot related to 9f0602539d (but nothing major). I also did a couple tiny cosmetic tweaks, but other than that the patch seems OK. See the attached v6. I did some simple performance tests too, similar to those in the initial message: CREATE UNLOGGED TABLE heap (i int); CREATE INDEX ON heap USING brin(i) WITH (pages_per_range=1); -- TRUNCATE heap; INSERT INTO heap SELECT 1 FROM generate_series(1, 20000000); And the results look like this (5 runs each): master: 16448.338 16066.473 16039.166 16067.420 16080.066 patched: 13260.065 13229.800 13254.454 13265.479 13273.693 So that's a nice improvement, even though enabling WAL will make the relative speedup somewhat smaller. The one thing I'm not entirely sure about is adding new stuff to the IndexAmRoutine. I don't think we want to end up with too many callbacks that all AMs have to initialize etc. I can't think of a different/better way to do this, though. Barring objections, I'll try to push this early next week, after another round of cleanup. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------qZPTCJ8V3Tzsjazp59JPHqxQ Content-Type: text/x-patch; charset=UTF-8; name="v6-0001-Reuse-revmap-and-brin-desc-in-brininsert.patch" Content-Disposition: attachment; filename="v6-0001-Reuse-revmap-and-brin-desc-in-brininsert.patch" Content-Transfer-Encoding: base64 RnJvbSBiMWM0NzUyNzEzMmYwZThjMzlmZjIyMWI2YjVhZGNjOTY3OGJhNmNlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAzIE5vdiAyMDIzIDE5OjE3OjIxICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2Nl0gUmV1c2UgcmV2bWFwIGFuZCBicmluIGRlc2MgaW4gYnJpbmluc2Vy dAoKYnJpbmluc2VydCgpIHVzZWQgdG8gaGF2ZSBjb2RlIHRoYXQgcGVyZm9ybWVkIHBlci10 dXBsZSBpbml0aWFsaXphdGlvbgpvZiB0aGUgcmV2bWFwLiBUaGF0IGhhZCBzb21lIG92ZXJo ZWFkLgoKVG8gbWl0aWdhdGUsIHdlIGludHJvZHVjZSBhIG5ldyBBTSBjYWxsYmFjayB0byBj bGVhbiB1cCBzdGF0ZSBhdCB0aGUgZW5kCm9mIGFsbCBpbnNlcnRzLCBhbmQgcGVyZm9ybSB0 aGUgcmV2bWFwIGNsZWFudXAgdGhlcmUuCi0tLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMg ICAgICAgICAgICAgIHwgIDEgKwogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAg ICAgIHwgMTQgKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAg fCA3NCArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbnV0aWwuYyAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 LmMgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgfCAxNSArKysr KysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICB8ICAxICsKIHNyYy9i YWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyB8ICAxICsKIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jICB8ICA1ICsrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1h cGkuaCAgICAgICAgICAgfCAgNCArKwogc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5faW50ZXJu YWwuaCAgIHwgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgIHwg IDIgKwogMTMgZmlsZXMgY2hhbmdlZCwgMTA5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9i bG9vbS9ibHV0aWxzLmMKaW5kZXggZjIzZmJiMWQ5ZTAuLjQ4MzBjYjNmZWU2IDEwMDY0NAot LS0gYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRp bHMuYwpAQCAtMTMxLDYgKzEzMSw3IEBAIGJsaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQog CWFtcm91dGluZS0+YW1idWlsZCA9IGJsYnVpbGQ7CiAJYW1yb3V0aW5lLT5hbWJ1aWxkZW1w dHkgPSBibGJ1aWxkZW1wdHk7CiAJYW1yb3V0aW5lLT5hbWluc2VydCA9IGJsaW5zZXJ0Owor CWFtcm91dGluZS0+YW1pbnNlcnRjbGVhbnVwID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtYnVs a2RlbGV0ZSA9IGJsYnVsa2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9 IGJsdmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gTlVMTDsKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sCmluZGV4IDMwZWRhMzdhZmE4Li5hMzZkMmVhZWJlNyAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5z Z21sCkBAIC0xMzksNiArMTM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUK ICAgICBhbWJ1aWxkX2Z1bmN0aW9uIGFtYnVpbGQ7CiAgICAgYW1idWlsZGVtcHR5X2Z1bmN0 aW9uIGFtYnVpbGRlbXB0eTsKICAgICBhbWluc2VydF9mdW5jdGlvbiBhbWluc2VydDsKKyAg ICBhbWluc2VydGNsZWFudXBfZnVuY3Rpb24gYW1pbnNlcnRjbGVhbnVwOwogICAgIGFtYnVs a2RlbGV0ZV9mdW5jdGlvbiBhbWJ1bGtkZWxldGU7CiAgICAgYW12YWN1dW1jbGVhbnVwX2Z1 bmN0aW9uIGFtdmFjdXVtY2xlYW51cDsKICAgICBhbWNhbnJldHVybl9mdW5jdGlvbiBhbWNh bnJldHVybjsgICAvKiBjYW4gYmUgTlVMTCAqLwpAQCAtMzU5LDExICszNjAsMjIgQEAgYW1p bnNlcnQgKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAgICB3aXRoaW4gYW4gU1FMIHN0YXRl bWVudCwgaXQgY2FuIGFsbG9jYXRlIHNwYWNlCiAgICBpbiA8bGl0ZXJhbD5pbmRleEluZm8t Jmd0O2lpX0NvbnRleHQ8L2xpdGVyYWw+IGFuZCBzdG9yZSBhIHBvaW50ZXIgdG8gdGhlCiAg ICBkYXRhIGluIDxsaXRlcmFsPmluZGV4SW5mby0mZ3Q7aWlfQW1DYWNoZTwvbGl0ZXJhbD4g KHdoaWNoIHdpbGwgYmUgTlVMTAotICAgaW5pdGlhbGx5KS4KKyAgIGluaXRpYWxseSkuIElm IHRoZSBkYXRhIGNhY2hlZCBjb250YWlucyBzdHJ1Y3R1cmVzIHRoYXQgY2FuIGJlIHNpbXBs eSBwZnJlZSdkLAorICAgdGhleSB3aWxsIGltcGxpY2l0bHkgYmUgcGZyZWUnZC4gQnV0LCBp ZiBpdCBjb250YWlucyBtb3JlIGNvbXBsZXggZGF0YSwgc3VjaAorICAgYXMgQnVmZmVycyBv ciBUdXBsZURlc2NzLCBhZGRpdGlvbmFsIGNsZWFudXAgaXMgbmVjZXNzYXJ5LiBUaGlzIGFk ZGl0aW9uYWwKKyAgIGNsZWFudXAgY2FuIGJlIHBlcmZvcm1lZCBpbiA8bGl0ZXJhbD5pbmRl eGluc2VydGNsZWFudXA8L2xpdGVyYWw+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiA8cHJv Z3JhbWxpc3Rpbmc+Citib29sCithbWluc2VydGNsZWFudXAgKEluZGV4SW5mbyAqaW5kZXhJ bmZvKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDbGVhbiB1cCBzdGF0ZSB0aGF0IHdhcyBt YWludGFpbmVkIGFjcm9zcyBzdWNjZXNzaXZlIGluc2VydHMgaW4KKyAgIDxsaXRlcmFsPmlu ZGV4SW5mby0mZ3Q7aWlfQW1DYWNoZTwvbGl0ZXJhbD4uIFRoaXMgaXMgdXNlZnVsIGlmIHRo ZSBkYXRhCisgICBjb250YWluZWQgaXMgY29tcGxleCAtIGxpa2UgQnVmZmVycyBvciBUdXBs ZURlc2NzIHdoaWNoIG5lZWQgYWRkaXRpb25hbAorICAgY2xlYW51cCwgdW5saWtlIHNpbXBs ZSBzdHJ1Y3R1cmVzIHRoYXQgd2lsbCBiZSBpbXBsaWNpdGx5IHBmcmVlJ2QuCis8cHJvZ3Jh bWxpc3Rpbmc+CiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKgogYW1idWxrZGVsZXRlIChJbmRl eFZhY3V1bUluZm8gKmluZm8sCiAgICAgICAgICAgICAgIEluZGV4QnVsa0RlbGV0ZVJlc3Vs dCAqc3RhdHMsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggMjUzMzhhOTBlMjkuLmZk OTliNmViMTFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC01OCw2ICs1OCwxNyBA QCB0eXBlZGVmIHN0cnVjdCBCcmluQnVpbGRTdGF0ZQogCUJyaW5NZW1UdXBsZSAqYnNfZHR1 cGxlOwogfSBCcmluQnVpbGRTdGF0ZTsKIAorLyoKKyAqIFdlIHVzZSBhIEJyaW5JbnNlcnRT dGF0ZSB0byBjYXB0dXJlIHJ1bm5pbmcgc3RhdGUgc3Bhbm5pbmcgbXVsdGlwbGUKKyAqIGJy aW5pbnNlcnQgaW52b2NhdGlvbnMsIHdpdGhpbiB0aGUgc2FtZSBjb21tYW5kLgorICovCit0 eXBlZGVmIHN0cnVjdCBCcmluSW5zZXJ0U3RhdGUKK3sKKwlCcmluUmV2bWFwICpic19ybUFj Y2VzczsKKwlCcmluRGVzYyAgICpic19kZXNjOworCUJsb2NrTnVtYmVyIGJzX3BhZ2VzX3Bl cl9yYW5nZTsKK30JCQlCcmluSW5zZXJ0U3RhdGU7CisKIC8qCiAgKiBTdHJ1Y3QgdXNlZCBh cyAib3BhcXVlIiBkdXJpbmcgaW5kZXggc2NhbnMKICAqLwpAQCAtNzIsNiArODMsNyBAQCB0 eXBlZGVmIHN0cnVjdCBCcmluT3BhcXVlCiAKIHN0YXRpYyBCcmluQnVpbGRTdGF0ZSAqaW5p dGlhbGl6ZV9icmluX2J1aWxkc3RhdGUoUmVsYXRpb24gaWR4UmVsLAogCQkJCQkJCQkJCQkJ ICBCcmluUmV2bWFwICpyZXZtYXAsIEJsb2NrTnVtYmVyIHBhZ2VzUGVyUmFuZ2UpOworc3Rh dGljIEJyaW5JbnNlcnRTdGF0ZSAqaW5pdGlhbGl6ZV9icmluX2luc2VydHN0YXRlKFJlbGF0 aW9uIGlkeFJlbCwgSW5kZXhJbmZvICppbmRleEluZm8pOwogc3RhdGljIHZvaWQgdGVybWlu YXRlX2JyaW5fYnVpbGRzdGF0ZShCcmluQnVpbGRTdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZv aWQgYnJpbnN1bW1hcml6ZShSZWxhdGlvbiBpbmRleCwgUmVsYXRpb24gaGVhcFJlbCwgQmxv Y2tOdW1iZXIgcGFnZVJhbmdlLAogCQkJCQkJICBib29sIGluY2x1ZGVfcGFydGlhbCwgZG91 YmxlICpudW1TdW1tYXJpemVkLCBkb3VibGUgKm51bUV4aXN0aW5nKTsKQEAgLTExNyw2ICsx MjksNyBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1i dWlsZCA9IGJyaW5idWlsZDsKIAlhbXJvdXRpbmUtPmFtYnVpbGRlbXB0eSA9IGJyaW5idWls ZGVtcHR5OwogCWFtcm91dGluZS0+YW1pbnNlcnQgPSBicmluaW5zZXJ0OworCWFtcm91dGlu ZS0+YW1pbnNlcnRjbGVhbnVwID0gYnJpbmluc2VydGNsZWFudXA7CiAJYW1yb3V0aW5lLT5h bWJ1bGtkZWxldGUgPSBicmluYnVsa2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xl YW51cCA9IGJyaW52YWN1dW1jbGVhbnVwOwogCWFtcm91dGluZS0+YW1jYW5yZXR1cm4gPSBO VUxMOwpAQCAtMTQwLDYgKzE1MywyNyBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQogCVBHX1JFVFVSTl9QT0lOVEVSKGFtcm91dGluZSk7CiB9CiAKKy8qCisgKiBJbml0aWFs aXplIGEgQnJpbkluc2VydFN0YXRlIHRvIG1haW50YWluIHN0YXRlIHRvIGJlIHVzZWQgYWNy b3NzIG11bHRpcGxlCisgKiB0dXBsZSBpbnNlcnRzLCB3aXRoaW4gdGhlIHNhbWUgY29tbWFu ZC4KKyAqLworc3RhdGljIEJyaW5JbnNlcnRTdGF0ZSAqCitpbml0aWFsaXplX2JyaW5faW5z ZXJ0c3RhdGUoUmVsYXRpb24gaWR4UmVsLCBJbmRleEluZm8gKmluZGV4SW5mbykKK3sKKwlC cmluSW5zZXJ0U3RhdGUgKmJpc3RhdGU7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwlv bGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaW5kZXhJbmZvLT5paV9Db250ZXh0KTsK KwliaXN0YXRlID0gcGFsbG9jMChzaXplb2YoQnJpbkluc2VydFN0YXRlKSk7CisJYmlzdGF0 ZS0+YnNfZGVzYyA9IGJyaW5fYnVpbGRfZGVzYyhpZHhSZWwpOworCWJpc3RhdGUtPmJzX3Jt QWNjZXNzID0gYnJpblJldm1hcEluaXRpYWxpemUoaWR4UmVsLAorCQkJCQkJCQkJCQkJJmJp c3RhdGUtPmJzX3BhZ2VzX3Blcl9yYW5nZSk7CisJaW5kZXhJbmZvLT5paV9BbUNhY2hlID0g YmlzdGF0ZTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCXJldHVybiBi aXN0YXRlOworfQorCiAvKgogICogQSB0dXBsZSBpbiB0aGUgaGVhcCBpcyBiZWluZyBpbnNl cnRlZC4gIFRvIGtlZXAgYSBicmluIGluZGV4IHVwIHRvIGRhdGUsCiAgKiB3ZSBuZWVkIHRv IG9idGFpbiB0aGUgcmVsZXZhbnQgaW5kZXggdHVwbGUgYW5kIGNvbXBhcmUgaXRzIHN0b3Jl ZCB2YWx1ZXMKQEAgLTE2MiwxNCArMTk2LDIzIEBAIGJyaW5pbnNlcnQoUmVsYXRpb24gaWR4 UmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywKIAlCbG9ja051bWJlciBwYWdlc1Bl clJhbmdlOwogCUJsb2NrTnVtYmVyIG9yaWdIZWFwQmxrOwogCUJsb2NrTnVtYmVyIGhlYXBC bGs7Ci0JQnJpbkRlc2MgICAqYmRlc2MgPSAoQnJpbkRlc2MgKikgaW5kZXhJbmZvLT5paV9B bUNhY2hlOworCUJyaW5JbnNlcnRTdGF0ZSAqYmlzdGF0ZSA9IChCcmluSW5zZXJ0U3RhdGUg KikgaW5kZXhJbmZvLT5paV9BbUNhY2hlOwogCUJyaW5SZXZtYXAgKnJldm1hcDsKKwlCcmlu RGVzYyAgICpiZGVzYzsKIAlCdWZmZXIJCWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJTWVtb3J5 Q29udGV4dCB0dXBjeHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY3h0ID0gQ3VycmVu dE1lbW9yeUNvbnRleHQ7CiAJYm9vbAkJYXV0b3N1bW1hcml6ZSA9IEJyaW5HZXRBdXRvU3Vt bWFyaXplKGlkeFJlbCk7CiAKLQlyZXZtYXAgPSBicmluUmV2bWFwSW5pdGlhbGl6ZShpZHhS ZWwsICZwYWdlc1BlclJhbmdlKTsKKwlpZiAoIWJpc3RhdGUpCisJeworCQkvKiBGaXJzdCB0 aW1lIHRocm91Z2ggaW4gdGhpcyBzdGF0ZW1lbnQ/ICovCisJCWJpc3RhdGUgPSBpbml0aWFs aXplX2JyaW5faW5zZXJ0c3RhdGUoaWR4UmVsLCBpbmRleEluZm8pOworCX0KKworCXJldm1h cCA9IGJpc3RhdGUtPmJzX3JtQWNjZXNzOworCWJkZXNjID0gYmlzdGF0ZS0+YnNfZGVzYzsK KwlwYWdlc1BlclJhbmdlID0gYmlzdGF0ZS0+YnNfcGFnZXNfcGVyX3JhbmdlOwogCiAJLyoK IAkgKiBvcmlnSGVhcEJsayBpcyB0aGUgYmxvY2sgbnVtYmVyIHdoZXJlIHRoZSBpbnNlcnRp b24gb2NjdXJyZWQuICBoZWFwQmxrCkBAIC0yMjgsMTQgKzI3MSw2IEBAIGJyaW5pbnNlcnQo UmVsYXRpb24gaWR4UmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywKIAkJaWYgKCFi cnR1cCkKIAkJCWJyZWFrOwogCi0JCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCBpbiB0aGlzIHN0 YXRlbWVudD8gKi8KLQkJaWYgKGJkZXNjID09IE5VTEwpCi0JCXsKLQkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhpbmRleEluZm8tPmlpX0NvbnRleHQpOwotCQkJYmRlc2MgPSBicmluX2J1 aWxkX2Rlc2MoaWR4UmVsKTsKLQkJCWluZGV4SW5mby0+aWlfQW1DYWNoZSA9ICh2b2lkICop IGJkZXNjOwotCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Ci0JCX0KIAkJLyog Rmlyc3QgdGltZSB0aHJvdWdoIGluIHRoaXMgYnJpbmluc2VydCBjYWxsPyAqLwogCQlpZiAo dHVwY3h0ID09IE5VTEwpCiAJCXsKQEAgLTMwNiw3ICszNDEsNiBAQCBicmluaW5zZXJ0KFJl bGF0aW9uIGlkeFJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqbnVsbHMsCiAJCWJyZWFrOwog CX0KIAotCWJyaW5SZXZtYXBUZXJtaW5hdGUocmV2bWFwKTsKIAlpZiAoQnVmZmVySXNWYWxp ZChidWYpKQogCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGN4dCk7CkBAIC0zMTYsNiArMzUwLDI0IEBAIGJyaW5pbnNlcnQoUmVsYXRpb24gaWR4 UmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywKIAlyZXR1cm4gZmFsc2U7CiB9CiAK Ky8qCisgKiBDYWxsYmFjayB0byBjbGVhbiB1cCB0aGUgQnJpbkluc2VydFN0YXRlIG9uY2Ug YWxsIHR1cGxlIGluc2VydHMgYXJlIGRvbmUuCisgKi8KK3ZvaWQKK2JyaW5pbnNlcnRjbGVh bnVwKEluZGV4SW5mbyAqaW5kZXhJbmZvKQoreworCUJyaW5JbnNlcnRTdGF0ZSAqYmlzdGF0 ZSA9IChCcmluSW5zZXJ0U3RhdGUgKikgaW5kZXhJbmZvLT5paV9BbUNhY2hlOworCisJQXNz ZXJ0KGJpc3RhdGUpOworCS8qCisJICogQ2xlYW4gdXAgdGhlIHJldm1hcC4gTm90ZSB0aGF0 IHRoZSBicmluRGVzYyBoYXMgYWxyZWFkeSBiZWVuIGNsZWFuZWQgdXAKKwkgKiBhcyBwYXJ0 IG9mIGl0cyBvd24gbWVtb3J5IGNvbnRleHQuCisJICovCisJYnJpblJldm1hcFRlcm1pbmF0 ZShiaXN0YXRlLT5ic19ybUFjY2Vzcyk7CisJYmlzdGF0ZS0+YnNfcm1BY2Nlc3MgPSBOVUxM OworCWJpc3RhdGUtPmJzX2Rlc2MgPSBOVUxMOworfQorCiAvKgogICogSW5pdGlhbGl6ZSBz dGF0ZSBmb3IgYSBCUklOIGluZGV4IHNjYW4uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0 aWwuYwppbmRleCA3YTRjZDkzZjMwMS4uYTg3NWM1ZDNkN2EgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2ludXRpbC5jCkBAIC02NCw2ICs2NCw3IEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlhbXJvdXRpbmUtPmFtYnVpbGQgPSBnaW5idWlsZDsKIAlhbXJvdXRpbmUtPmFt YnVpbGRlbXB0eSA9IGdpbmJ1aWxkZW1wdHk7CiAJYW1yb3V0aW5lLT5hbWluc2VydCA9IGdp bmluc2VydDsKKwlhbXJvdXRpbmUtPmFtaW5zZXJ0Y2xlYW51cCA9IE5VTEw7CiAJYW1yb3V0 aW5lLT5hbWJ1bGtkZWxldGUgPSBnaW5idWxrZGVsZXRlOwogCWFtcm91dGluZS0+YW12YWN1 dW1jbGVhbnVwID0gZ2ludmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJu ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA4ZWY1ZmEwMzI5MC4uOWEx YmY4ZjY2Y2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTg2LDYgKzg2LDcgQEAg Z2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVpbGQgPSBn aXN0YnVpbGQ7CiAJYW1yb3V0aW5lLT5hbWJ1aWxkZW1wdHkgPSBnaXN0YnVpbGRlbXB0eTsK IAlhbXJvdXRpbmUtPmFtaW5zZXJ0ID0gZ2lzdGluc2VydDsKKwlhbXJvdXRpbmUtPmFtaW5z ZXJ0Y2xlYW51cCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWJ1bGtkZWxldGUgPSBnaXN0YnVs a2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGdpc3R2YWN1dW1jbGVh bnVwOwogCWFtcm91dGluZS0+YW1jYW5yZXR1cm4gPSBnaXN0Y2FucmV0dXJuOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jCmluZGV4IDdhMDI1ZjMzY2ZlLi42NDQzZmYyMWJkYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtODMsNiArODMsNyBAQCBoYXNoaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1idWlsZCA9IGhhc2hidWlsZDsKIAlhbXJv dXRpbmUtPmFtYnVpbGRlbXB0eSA9IGhhc2hidWlsZGVtcHR5OwogCWFtcm91dGluZS0+YW1p bnNlcnQgPSBoYXNoaW5zZXJ0OworCWFtcm91dGluZS0+YW1pbnNlcnRjbGVhbnVwID0gTlVM TDsKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGhhc2hidWxrZGVsZXRlOwogCWFtcm91 dGluZS0+YW12YWN1dW1jbGVhbnVwID0gaGFzaHZhY3V1bWNsZWFudXA7CiAJYW1yb3V0aW5l LT5hbWNhbnJldHVybiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpp bmRleCBiMjViMDNmN2FiYy4uNTk3Yjc2M2QxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YW0uYwpAQCAtMTk2LDYgKzE5NiwyMSBAQCBpbmRleF9pbnNlcnQoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwKIAkJCQkJCQkJCQkJIGluZGV4SW5mbyk7CiB9CiAKKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9pbnNlcnRfY2xlYW51cCAtIGNsZWFu IHVwIGFmdGVyIGFsbCBpbmRleCBpbnNlcnRzIGFyZSBkb25lCisgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9u IGluZGV4UmVsYXRpb24sCisJCQkJCSBJbmRleEluZm8gKmluZGV4SW5mbykKK3sKKwlSRUxB VElPTl9DSEVDS1M7CisJQXNzZXJ0KGluZGV4SW5mbyk7CisKKwlpZiAoaW5kZXhSZWxhdGlv bi0+cmRfaW5kYW0tPmFtaW5zZXJ0Y2xlYW51cCkKKwkJaW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtaW5zZXJ0Y2xlYW51cChpbmRleEluZm8pOworfQorCiAvKgogICogaW5kZXhfYmVn aW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZQogICoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IGE4OGIzNmE1ODlhLi4wOTMw ZjliMzdlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xMjIsNiAr MTIyLDcgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWJ1 aWxkID0gYnRidWlsZDsKIAlhbXJvdXRpbmUtPmFtYnVpbGRlbXB0eSA9IGJ0YnVpbGRlbXB0 eTsKIAlhbXJvdXRpbmUtPmFtaW5zZXJ0ID0gYnRpbnNlcnQ7CisJYW1yb3V0aW5lLT5hbWlu c2VydGNsZWFudXAgPSBOVUxMOwogCWFtcm91dGluZS0+YW1idWxrZGVsZXRlID0gYnRidWxr ZGVsZXRlOwogCWFtcm91dGluZS0+YW12YWN1dW1jbGVhbnVwID0gYnR2YWN1dW1jbGVhbnVw OwogCWFtcm91dGluZS0+YW1jYW5yZXR1cm4gPSBidGNhbnJldHVybjsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCBjMTEyZTFlNWRkNC4uMzBjMDA4NzZhNTYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTcwLDYgKzcwLDcg QEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1idWlsZCA9 IHNwZ2J1aWxkOwogCWFtcm91dGluZS0+YW1idWlsZGVtcHR5ID0gc3BnYnVpbGRlbXB0eTsK IAlhbXJvdXRpbmUtPmFtaW5zZXJ0ID0gc3BnaW5zZXJ0OworCWFtcm91dGluZS0+YW1pbnNl cnRjbGVhbnVwID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IHNwZ2J1bGtk ZWxldGU7CiAJYW1yb3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBzcGd2YWN1dW1jbGVhbnVw OwogCWFtcm91dGluZS0+YW1jYW5yZXR1cm4gPSBzcGdjYW5yZXR1cm47CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDM4NGIzOTgzOWEwLi4yZmEyMTE4ZjNjMiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTIzMywxNSArMjMzLDIw IEBAIEV4ZWNDbG9zZUluZGljZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbykKIAlp bnQJCQlpOwogCWludAkJCW51bUluZGljZXM7CiAJUmVsYXRpb25QdHIgaW5kZXhEZXNjczsK KwlJbmRleEluZm8gKippbmRleEluZm9zOwogCiAJbnVtSW5kaWNlcyA9IHJlc3VsdFJlbElu Zm8tPnJpX051bUluZGljZXM7CiAJaW5kZXhEZXNjcyA9IHJlc3VsdFJlbEluZm8tPnJpX0lu ZGV4UmVsYXRpb25EZXNjczsKKwlpbmRleEluZm9zID0gcmVzdWx0UmVsSW5mby0+cmlfSW5k ZXhSZWxhdGlvbkluZm87CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtSW5kaWNlczsgaSsrKQog CXsKIAkJaWYgKGluZGV4RGVzY3NbaV0gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwkJCS8qIHNo b3VsZG4ndCBoYXBwZW4/ICovCiAKKwkJLyogR2l2ZSB0aGUgaW5kZXggYSBjaGFuY2UgdG8g ZG8gc29tZSBwb3N0LWluc2VydCBjbGVhbnVwICovCisJCWluZGV4X2luc2VydF9jbGVhbnVw KGluZGV4RGVzY3NbaV0sIGluZGV4SW5mb3NbaV0pOworCiAJCS8qIERyb3AgbG9jayBhY3F1 aXJlZCBieSBFeGVjT3BlbkluZGljZXMgKi8KIAkJaW5kZXhfY2xvc2UoaW5kZXhEZXNjc1tp XSwgUm93RXhjbHVzaXZlTG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCA5OTU3MjU1 MDJhNi4uMjQ0NDU5NTg3ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFw aS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xMTMsNiArMTEzLDkg QEAgdHlwZWRlZiBib29sICgqYW1pbnNlcnRfZnVuY3Rpb24pIChSZWxhdGlvbiBpbmRleFJl bGF0aW9uLAogCQkJCQkJCQkgICBib29sIGluZGV4VW5jaGFuZ2VkLAogCQkJCQkJCQkgICBz dHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwogCisvKiBjbGVhbnVwIGFmdGVyIGluc2Vy dCAqLwordHlwZWRlZiB2b2lkICgqYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uKSAoc3RydWN0 IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKKwogLyogYnVsayBkZWxldGUgKi8KIHR5cGVkZWYg SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICooKmFtYnVsa2RlbGV0ZV9mdW5jdGlvbikgKEluZGV4 VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3Vs dCAqc3RhdHMsCkBAIC0yNjEsNiArMjY0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJv dXRpbmUKIAlhbWJ1aWxkX2Z1bmN0aW9uIGFtYnVpbGQ7CiAJYW1idWlsZGVtcHR5X2Z1bmN0 aW9uIGFtYnVpbGRlbXB0eTsKIAlhbWluc2VydF9mdW5jdGlvbiBhbWluc2VydDsKKwlhbWlu c2VydGNsZWFudXBfZnVuY3Rpb24gYW1pbnNlcnRjbGVhbnVwOwogCWFtYnVsa2RlbGV0ZV9m dW5jdGlvbiBhbWJ1bGtkZWxldGU7CiAJYW12YWN1dW1jbGVhbnVwX2Z1bmN0aW9uIGFtdmFj dXVtY2xlYW51cDsKIAlhbWNhbnJldHVybl9mdW5jdGlvbiBhbWNhbnJldHVybjsJLyogY2Fu IGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluX2ludGVy bmFsLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl9pbnRlcm5hbC5oCmluZGV4IDk3ZGRj OTI1YjI3Li5lZDIzMWUyMDhlYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Jy aW5faW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl9pbnRlcm5hbC5o CkBAIC05Niw2ICs5Niw3IEBAIGV4dGVybiBib29sIGJyaW5pbnNlcnQoUmVsYXRpb24gaWR4 UmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywKIAkJCQkJICAgSW5kZXhVbmlxdWVD aGVjayBjaGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJ ICAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK2V4dGVybiB2b2lkIGJyaW5pbnNl cnRjbGVhbnVwKHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7CiBleHRlcm4gSW5kZXhT Y2FuRGVzYyBicmluYmVnaW5zY2FuKFJlbGF0aW9uIHIsIGludCBua2V5cywgaW50IG5vcmRl cmJ5cyk7CiBleHRlcm4gaW50NjQgYnJpbmdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4s IFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJyaW5yZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5o CmluZGV4IGYzMWRlYzZlZTBmLi44MGRjOGQ1NDA2NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAg LTE0OCw2ICsxNDgsOCBAQCBleHRlcm4gYm9vbCBpbmRleF9pbnNlcnQoUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwKIAkJCQkJCSBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAogCQkJ CQkJIGJvb2wgaW5kZXhVbmNoYW5nZWQsCiAJCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5k ZXhJbmZvKTsKK2V4dGVybiB2b2lkIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCisJCQkJCQkJCSBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwog CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCi0tIAoyLjQxLjAK Cg== --------------qZPTCJ8V3Tzsjazp59JPHqxQ--