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.96) (envelope-from ) id 1w7Aag-0051lM-0p for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 11:15:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7Aae-002kID-2d for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 11:15:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7Aae-002kHw-01 for pgsql-hackers@lists.postgresql.org; Mon, 30 Mar 2026 11:15:28 +0000 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7Aac-00000001n7o-1RmZ for pgsql-hackers@postgresql.org; Mon, 30 Mar 2026 11:15:27 +0000 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2b2503753efso8016565ad.0 for ; Mon, 30 Mar 2026 04:15:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774869325; cv=none; d=google.com; s=arc-20240605; b=LS4dPQ6S1AbU3Hh8Eng0s7fUyqLu0Ad3DdVsRBUGAUfmgi9FJx+MLhHeXa+quB0AR/ 1QuWTi6jUg0MdGe9zkQzazKCF/kHQfNCHUoo817EisS+xYofgrUOpTO7DG4zRvjXGEG5 DE6kngiAZTKYYxKyeWtTXsoohtD+dv4W6R+YaBGh3EsmhYH4IWWFZcDc7Togwz8SwuQY kmw6l1/TJtZWo2kQ9ceKhs2JLySSpfRi03nwkh+HNSmDsA5SZDq4kS56MtysnZhm1WRd 7GG/NIFICjivPLymsIOcJBVwIHNjQUtEtGxJsMWJzt9b6Zxx6GqzeII9+U/BaUNLfzfx AxuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=MKL6E2iGBAfku4qhRXPMaQ8JeIfZ63Xa3+amuGkitto=; fh=FECa8ChUR+e/baRVwfJpSoqHHL3bnjFmbdqUoaYDWIw=; b=bgesyKhIfm6r+1IOwz1tOla3AtI8Ki/nMA0RWFyHfnoDFtejBCm4lTAxGHUl/VgNxN TcboOYW+0ULLFEoDax7z5DAeVPFzoFGR5nkli8pcX/8v8mwxPWE7EL7dehsG66rlT9kn mIcJ4GAQm6ofva41CLQUmINiF9EEYblR9hScIpn5lH84/bXmCpFqlitioO+5i0vvUOx4 kKN+8L8JdLLooVSYxts89VqAfJV/9IXNd44Iiq0/z3pc27SlTTjm5nsQ+EWOqLQSpcyL zz0ee2O1Bm5AGO2gBiedtza1FnNpc9JP5k/yMY+UVEKa1L4o6FtIS4G/xWV1rbbCzmHP HHtA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774869325; x=1775474125; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MKL6E2iGBAfku4qhRXPMaQ8JeIfZ63Xa3+amuGkitto=; b=FGHBfpRofc0Oz2idMPPdKhrgPEaq9qmXGnV8y1HVoZXrltv5taOC+5/0BTM456JMzI OQTZmBqVaPXP56hIjQGCCs/Fckh3WONYCpTt72bfa+uxfQFTL6rKFNpE7YBJayKqCpkZ xL3d9kqPB/IBZ4lGTtSIq9GlY51V5myRxeNht3o8IHCuc5Kx93A8u+De+FkUIRJ8lpKi uYsFCI2yDskBiaEWLWMVCJY0dvlRDcNT8TiULm6VE48S4Vr3XtFlDpR4jwLslDlqFEpM Ab8ILx3H3RiDuR0TkV6nfoaQrSIcS95T4bWuVqzDJpbtq8Q8K6nl7HnoL0chZrUAopi1 p1fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774869325; x=1775474125; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=MKL6E2iGBAfku4qhRXPMaQ8JeIfZ63Xa3+amuGkitto=; b=W5t/Vg7K1s36NdNRI0Rt0+cOtG8dhA3PbnjqzR+lTl5bol+lOwmuEwuagP7pdvsQZg mliLNsV7FxtVt7ebcgwZLy8t76LbTmHoqEtjZb0oR+sv+fB1SFLNn8Ae68BFNAxBtDwM oyFlFdoDhqC5zn2zRNwrEWO+FcHJhnTwOAflF71ZJ/kUku31QhgVAIa3PW7JueUepDak paRX3+xVHofVAyYwChMS+URjV7N3jPG0KWyxQGuBYhnvXSXbKCj3E5OyygLPnNDwq5Df rhW0ZVcBmnYcsdcpsUSS3ZqfI/NYcw/oXrYjA82JTBoXgCY13uCvwxEUlvubTFouQpjg oVNQ== X-Forwarded-Encrypted: i=1; AJvYcCXs+CDrGy90ZIxfM0sIEzoW13iOMVgtKSzQDB7G3a9BTHCuLgR1yLTl8moNNOupy7EBnVWy7UlkN6o/iCxQ@postgresql.org X-Gm-Message-State: AOJu0YwwNMQ62U4kOdHpZWdgocU8KRqt6LCIuVAWJx/2BJH+Ys/3GCxr iolIGTIXK5rhZL/ZMoI+MYoV3IEUABZ2n8KWMvRXcd50IdU9AHCpQhKRiBy8QPTo6p1pFg5Jnze r2h9Be1El7sJPBi+haJCSpLFfrkuJLk8= X-Gm-Gg: ATEYQzwhR41A/j7tphhPPyyPP6Z6bv5TTQl2Mo+Q3Mqow6iB1GhzudxsFf99niOfWek m2ShMXDmYLx7FygBsgva3g7LCtGa5m1KiFtrKEuAqu7+ZQfDpAov99fXyuTjIvslPTNUYcthhU3 YMvo2BFVm0y8aHfxxYZANUuTbhXwMh43VQ9HRtnQAJEIVGvIGqo3dusQDbri2iP+G4uHUYYH5EC r+rQi9B2Skh8Hi1Lg0jEJrT23bNGmppAFVlvWouKteTdJHvCyFuZUuuA8P+mMNbtE7dwrpI9icY iIDPaCRY X-Received: by 2002:a17:902:d2c2:b0:2b2:490c:411c with SMTP id d9443c01a7336-2b2490c5233mr69968255ad.21.1774869322755; Mon, 30 Mar 2026 04:15:22 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> In-Reply-To: From: Amit Langote Date: Mon, 30 Mar 2026 20:15:05 +0900 X-Gm-Features: AQROBzCzPcHubugcoSNxfcXMTwllvJaFbaPqGrZkCbjOHtLyeSz5PdqV9iyA0Do Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Junwang Zhao Cc: Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000818fbb064e3bf7b9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000818fbb064e3bf7b9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 30, 2026 at 1:55=E2=80=AFPM Amit Langote wrote: > Junwang pointed out off-list that FK tuples added to > RI_FastPathEntry.batch[] were being copied into TopTransactionContext > rather than flush_cxt, so they would accumulate until the batch was > exhausted rather than being reclaimed per flush. Fixed in > ri_FastPathBatchAdd() in 0002. > > Also added a couple of comments in trigger.c that were missing: an > Assert and explanation in RegisterAfterTriggerBatchCallback() > clarifying the query_depth >=3D 0 precondition, a comment at the > AfterTriggerEndQuery call site explaining why > FireAfterTriggerBatchCallbacks() must precede the query_depth > decrement and AfterTriggerFreeQuery, and brief intent comments at the > AfterTriggerFireDeferred and AfterTriggerSetState call sites. > > Plan is to commit 0001 tomorrow barring objections and let it sit for > a bit before committing 0002. Feedback on 0002, particularly on the > AfterTriggerBatchCallback mechanism in trigger.c, welcome in the > meantime. Kept looking at 0002 and found a couple of things to improve or change my thoughts about. I decided to move the permission check from fast path cache entry creation into ri_FastPathBatchFlush(), alongside the snapshot, so that permission changes between flushes are respected rather than checked once at batch start; the check happens for every row in the SPI and non-batched fast path. Also, improved comments in a few places to mention design decisions better. 0001 is mostly unchanged from v11 except I updated its commit message to explain why only RI_FKey_check is covered and not the action triggers as the topic has come up in previous threads about this topic. Still planning to commit 0001 tomorrow. --=20 Thanks, Amit Langote --000000000000818fbb064e3bf7b9 Content-Type: application/octet-stream; name="v12-0001-Add-fast-path-for-foreign-key-constraint-checks.patch" Content-Disposition: attachment; filename="v12-0001-Add-fast-path-for-foreign-key-constraint-checks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnd399921 RnJvbSA1ZmE1MjEzMjgxYzZiNWZiMjVkOTMyNzJhMDc2MDYwODMxNDFlMWM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMzAgTWFyIDIwMjYgMTY6MzI6NTYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MiAxLzJdIEFkZCBmYXN0IHBhdGggZm9yIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgY2hlY2tzCgpB ZGQgYSBmYXN0LXBhdGggb3B0aW1pemF0aW9uIGZvciBmb3JlaWduIGtleSBjaGVja3MgdGhhdCBi eXBhc3NlcyBTUEkKYnkgZGlyZWN0bHkgcHJvYmluZyB0aGUgdW5pcXVlIGluZGV4IG9uIHRoZSBy ZWZlcmVuY2VkIHRhYmxlLgpCZW5jaG1hcmtpbmcgc2hvd3MgfjEuOHggc3BlZWR1cCBmb3IgYnVs ayBGSyBpbnNlcnRzIChpbnQgUEsvaW50IEZLLAoxTSByb3dzLCB3aGVyZSBQSyB0YWJsZSBhbmQg aW5kZXggYXJlIGNhY2hlZCkuCgpUaGUgZmFzdCBwYXRoIGFwcGxpZXMgd2hlbiB0aGUgcmVmZXJl bmNlZCB0YWJsZSBpcyBub3QgcGFydGl0aW9uZWQgYW5kCnRoZSBjb25zdHJhaW50IGRvZXMgbm90 IGludm9sdmUgdGVtcG9yYWwgc2VtYW50aWNzLiAgT3RoZXJ3aXNlLCB0aGUKZXhpc3RpbmcgU1BJ IHBhdGggaXMgdXNlZC4KClRoaXMgb3B0aW1pemF0aW9uIGNvdmVycyBvbmx5IHRoZSByZWZlcmVu dGlhbCBjaGVjayB0cmlnZ2VyCihSSV9GS2V5X2NoZWNrKS4gIFRoZSBhY3Rpb24gdHJpZ2dlcnMg KENBU0NBREUsIFNFVCBOVUxMLCBTRVQgREVGQVVMVCwKUkVTVFJJQ1QsIE5PIEFDVElPTikgbXVz dCBmaW5kIHJvd3Mgb24gdGhlIEZLIHNpZGUgdG8gbW9kaWZ5LCB3aGljaApyZXF1aXJlcyBhIHRh YmxlIHNjYW4gd2l0aCBubyBndWFyYW50ZWVkIGluZGV4IGF2YWlsYWJsZSwgYW5kIHRoZW4KZXhl Y3V0ZSBETUwgYWdhaW5zdCB0aG9zZSByb3dzIHRocm91Z2ggdGhlIGZ1bGwgZXhlY3V0b3IgcGF0 aCBpbmNsdWRpbmcKYW55IHRyaWdnZXJlZCBhY3Rpb25zLiAgUmVwbGljYXRpbmcgdGhhdCB3aXRo b3V0IHN1YnN0YW50aWFsIGNvZGUKZHVwbGljYXRpb24gaXMgbm90IGZlYXNpYmxlLCBzbyB0aG9z ZSB0cmlnZ2VycyByZW1haW4gb24gdGhlIFNQSSBwYXRoLgpFeHRlbmRpbmcgdGhlIGZhc3QgcGF0 aCB0byBhY3Rpb24gdHJpZ2dlcnMgcmVtYWlucyBwb3NzaWJsZSBhcyBmdXR1cmUKd29yayBpZiB0 aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGlzIGJ1aWx0LgoKVGhlIG5ldyByaV9GYXN0UGF0 aENoZWNrKCkgZnVuY3Rpb24gZXh0cmFjdHMgdGhlIEZLIHZhbHVlcywgYnVpbGRzIHNjYW4Ka2V5 cywgcGVyZm9ybXMgYW4gaW5kZXggc2NhbiwgYW5kIGxvY2tzIHRoZSBtYXRjaGluZyB0dXBsZSB3 aXRoCkxvY2tUdXBsZUtleVNoYXJlIHZpYSByaV9Mb2NrUEtUdXBsZSgpLCB3aGljaCBoYW5kbGVz IHRoZSBSSS1zcGVjaWZpYwpzdWJzZXQgb2YgdGFibGVfdHVwbGVfbG9jaygpIHJlc3VsdHMuCgpJ ZiB0aGUgbG9ja2VkIHR1cGxlIHdhcyByZWFjaGVkIGJ5IGNoYXNpbmcgYW4gdXBkYXRlIGNoYWlu Cih0bWZkLnRyYXZlcnNlZCksIHJlY2hlY2tfbWF0Y2hlZF9wa190dXBsZSgpIHZlcmlmaWVzIHRo YXQgdGhlIGtleQppcyBzdGlsbCB0aGUgc2FtZSwgZW11bGF0aW5nIEV2YWxQbGFuUXVhbC4KClRo ZSBzY2FuIHVzZXMgR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpLCBtYXRjaGluZyB3aGF0IHRoZSBT UEkgcGF0aAp1c2VzICh2aWEgX1NQSV9leGVjdXRlX3BsYW4gcHVzaGluZyBHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkgYXMgdGhlCmFjdGl2ZSBzbmFwc2hvdCkuICBVbmRlciBSRUFEIENPTU1JVFRF RCB0aGlzIGlzIGEgZnJlc2ggc25hcHNob3Q7CnVuZGVyIFJFUEVBVEFCTEUgUkVBRCAvIFNFUklB TElaQUJMRSBpdCBpcyB0aGUgZnJvemVuIHRyYW5zYWN0aW9uLQpzdGFydCBzbmFwc2hvdCwgc28g UEsgcm93cyBjb21taXR0ZWQgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIHN0YXJ0ZWQKYXJlIG5vdCB2 aXNpYmxlLgoKVGhlIHJpX0NoZWNrUGVybWlzc2lvbnMoKSBmdW5jdGlvbiBwZXJmb3JtcyBzY2hl bWEgVVNBR0UgYW5kIHRhYmxlClNFTEVDVCBjaGVja3MsIG1hdGNoaW5nIHdoYXQgdGhlIFNQSSBw YXRoIGdldHMgaW1wbGljaXRseSB0aHJvdWdoCnRoZSBleGVjdXRvcidzIHBlcm1pc3Npb24gY2hl Y2tzLiAgVGhlIGZhc3QgcGF0aCBhbHNvIHN3aXRjaGVzIHRvCnRoZSBQSyB0YWJsZSBvd25lcidz IHNlY3VyaXR5IGNvbnRleHQgKHdpdGggU0VDVVJJVFlfTk9GT1JDRV9STFMpCmJlZm9yZSB0aGUg aW5kZXggcHJvYmUsIG1hdGNoaW5nIHRoZSBTUEkgcGF0aCB3aGVyZSB0aGUgcXVlcnkgcnVucwph cyB0aGUgdGFibGUgb3duZXIuCgpyaV9IYXNoQ29tcGFyZU9wKCkgaXMgYWRqdXN0ZWQgdG8gaGFu ZGxlIGNyb3NzLXR5cGUgZXF1YWxpdHkgb3BlcmF0b3JzCihlLmcuIGludDQ4ZXEgZm9yIGludDQg UEsgLyBpbnQ4IEZLKSB3aGljaCBjYW4gYXBwZWFyIGluIGNvbnBmZXFvcC4KVGhlIGV4aXN0aW5n IGNvZGUgYXNzZXJ0ZWQgc2FtZS10eXBlIG9wZXJhdG9ycyBvbmx5LCB3aGljaCB3YXMgY29ycmVj dApmb3IgaXRzIGV4aXN0aW5nIGNhbGxlcnMgKHJpX0tleXNFcXVhbCBjb21wYXJlcyBzYW1lLXR5 cGUgRksgY29sdW1uCnZhbHVlcyB2aWEgZmZfZXFfb3BycyksIGJ1dCB0aGUgZmFzdCBwYXRoIGlz IHRoZSBmaXJzdCBjYWxsZXIgdG8gcGFzcwpwZl9lcV9vcHJzLCB3aGljaCBjYW4gYmUgY3Jvc3Mt dHlwZS4KClBlci1rZXkgbWV0YWRhdGEgKGNvbXBhcmUgZW50cmllcywgb3BlcmF0b3IgcHJvY2Vk dXJlcywgc3RyYXRlZ3kKbnVtYmVycykgaXMgY2FjaGVkIGluIFJJX0NvbnN0cmFpbnRJbmZvIHZp YQpyaV9wb3B1bGF0ZV9mYXN0cGF0aF9tZXRhZGF0YSgpIG9uIGZpcnN0IHVzZSwgZWxpbWluYXRp bmcgcmVwZWF0ZWQKY2FsbHMgdG8gcmlfSGFzaENvbXBhcmVPcCgpIGFuZCBnZXRfb3Bfb3BmYW1p bHlfcHJvcGVydGllcygpLgpjb25pbmRpZCBhbmQgcGtfaXNfcGFydGl0aW9uZWQgYXJlIGFsc28g Y2FjaGVkIGF0IGNvbnN0cmFpbnQgbG9hZAp0aW1lLCBhdm9pZGluZyBwZXItaW52b2NhdGlvbiBz eXNjYWNoZSBsb29rdXBzIGFuZCB0aGUgbmVlZCB0byBvcGVuCnBrX3JlbCBiZWZvcmUgZGVjaWRp bmcgd2hldGhlciB0aGUgZmFzdCBwYXRoIGFwcGxpZXMuCgpOZXcgcmVncmVzc2lvbiB0ZXN0cyBj b3ZlciBSTFMgYnlwYXNzIGFuZCBBQ0wgZW5mb3JjZW1lbnQgZm9yIHRoZQpmYXN0LXBhdGggcGVy bWlzc2lvbiBjaGVja3MuICBOZXcgaXNvbGF0aW9uIHRlc3RzIGV4ZXJjaXNlIGNvbmN1cnJlbnQK UEsgdXBkYXRlcyB1bmRlciBib3RoIFJFQUQgQ09NTUlUVEVEIGFuZCBSRVBFQVRBQkxFIFJFQUQu CgpBdXRob3I6IEp1bndhbmcgWmhhbyA8emhqd3BrdUBnbWFpbC5jb20+CkNvLWF1dGhvcmVkLWJ5 OiBBbWl0IExhbmdvdGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSGFp Ym8gWWFuIDx0cmlzdGFuLnlpbUBnbWFpbC5jb20+ClRlc3RlZC1ieTogVG9tYXMgVm9uZHJhIDx0 b21hc0B2b25kcmEubWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUY0 QzB3czNjTyt6NWNMa1B1dnduQXdrU3A3c2Z2Z0dqM3lRPUxpNktOTXFBQG1haWwuZ21haWwuY29t Ci0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgICAgICAgICAgIHwgNDY1 ICsrKysrKysrKysrKysrKysrLQogLi4uL2V4cGVjdGVkL2ZrLWNvbmN1cnJlbnQtcGstdXBkLm91 dCAgICAgICAgIHwgMTA1ICsrKysKIHNyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1 bGUgICAgICAgICB8ICAgMSArCiAuLi4vaXNvbGF0aW9uL3NwZWNzL2ZrLWNvbmN1cnJlbnQtcGst dXBkLnNwZWMgfCAgNTMgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXku b3V0ICAgICB8ICA0NyArKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsICAg ICAgICAgIHwgIDY0ICsrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAg ICAgICAgIHwgICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgNzIyIGluc2VydGlvbnMoKyksIDE0IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3Rl ZC9may1jb25jdXJyZW50LXBrLXVwZC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9p c29sYXRpb24vc3BlY3MvZmstY29uY3VycmVudC1way11cGQuc3BlYwoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JpX3RyaWdnZXJzLmMKaW5kZXggNjIzMGEyZWE5YWQuLjE4ZDQ4OWQ3OTBkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMjQsMTIgKzI0LDE1IEBACiAjaW5jbHVkZSAicG9z dGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJh Y2Nlc3Mvc2tleS5oIgogI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nl c3MveGFjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dl ci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv c3BpLmgiCkBAIC05MSw2ICs5NCw3IEBACiAjZGVmaW5lIFJJX1RSSUdUWVBFX1VQREFURSAyCiAj ZGVmaW5lIFJJX1RSSUdUWVBFX0RFTEVURSAzCiAKK3R5cGVkZWYgc3RydWN0IEZhc3RQYXRoTWV0 YSBGYXN0UGF0aE1ldGE7CiAKIC8qCiAgKiBSSV9Db25zdHJhaW50SW5mbwpAQCAtMTMyLDggKzEz NiwyNCBAQCB0eXBlZGVmIHN0cnVjdCBSSV9Db25zdHJhaW50SW5mbwogCU9pZAkJCXBlcmlvZF9p bnRlcnNlY3Rfb3BlcjsJLyogYW55cmFuZ2UgKiBhbnlyYW5nZSAob3IKIAkJCQkJCQkJCQkgKiBt dWx0aXJhbmdlcykgKi8KIAlkbGlzdF9ub2RlCXZhbGlkX2xpbms7CQkvKiBMaW5rIGluIGxpc3Qg b2YgdmFsaWQgZW50cmllcyAqLworCisJT2lkCQkJY29uaW5kaWQ7CisJYm9vbAkJcGtfaXNfcGFy dGl0aW9uZWQ7CisKKwlGYXN0UGF0aE1ldGEgKmZwbWV0YTsKIH0gUklfQ29uc3RyYWludEluZm87 CiAKK3R5cGVkZWYgc3RydWN0IFJJX0NvbXBhcmVIYXNoRW50cnkgUklfQ29tcGFyZUhhc2hFbnRy eTsKKworLyogRmFzdC1wYXRoIG1ldGFkYXRhIGZvciBSSSBjaGVja3Mgb24gZm9yZWlnbiBrZXkg cmVmZXJlbmNpbmcgdGFibGVzICovCit0eXBlZGVmIHN0cnVjdCBGYXN0UGF0aE1ldGEKK3sKKwlS SV9Db21wYXJlSGFzaEVudHJ5ICpjb21wYXJlX2VudHJpZXNbUklfTUFYX05VTUtFWVNdOworCVJl Z1Byb2NlZHVyZSByZWdvcHNbUklfTUFYX05VTUtFWVNdOworCU9pZAkJCXN1YnR5cGVzW1JJX01B WF9OVU1LRVlTXTsKKwlpbnQJCQlzdHJhdHNbUklfTUFYX05VTUtFWVNdOworfSBGYXN0UGF0aE1l dGE7CisKIC8qCiAgKiBSSV9RdWVyeUtleQogICoKQEAgLTIzMyw2ICsyNTMsMjMgQEAgc3RhdGlj IGJvb2wgcmlfUGVyZm9ybUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJ CQkJCQkJVHVwbGVUYWJsZVNsb3QgKm9sZHNsb3QsIFR1cGxlVGFibGVTbG90ICpuZXdzbG90LAog CQkJCQkJCWJvb2wgaXNfcmVzdHJpY3QsCiAJCQkJCQkJYm9vbCBkZXRlY3ROZXdSb3dzLCBpbnQg ZXhwZWN0X09LKTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3Ry YWludEluZm8gKnJpaW5mbywKKwkJCQkJCQkgUmVsYXRpb24gZmtfcmVsLCBUdXBsZVRhYmxlU2xv dCAqbmV3c2xvdCk7CitzdGF0aWMgYm9vbCByaV9GYXN0UGF0aFByb2JlT25lKFJlbGF0aW9uIHBr X3JlbCwgUmVsYXRpb24gaWR4X3JlbCwKKwkJCQkJCQkJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYywg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LCBjb25zdCBS SV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQkJCQlTY2FuS2V5RGF0YSAqc2tleSwgaW50 IG5rZXlzKTsKK3N0YXRpYyBib29sIHJpX0xvY2tQS1R1cGxlKFJlbGF0aW9uIHBrX3JlbCwgVHVw bGVUYWJsZVNsb3QgKnNsb3QsIFNuYXBzaG90IHNuYXAsCisJCQkJCQkgICBib29sICpjb25jdXJy ZW50bHlfdXBkYXRlZCk7CitzdGF0aWMgYm9vbCByaV9mYXN0cGF0aF9pc19hcHBsaWNhYmxlKGNv bnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8pOworc3RhdGljIHZvaWQgcmlfQ2hlY2tQZXJt aXNzaW9ucyhSZWxhdGlvbiBxdWVyeV9yZWwpOworc3RhdGljIGJvb2wgcmVjaGVja19tYXRjaGVk X3BrX3R1cGxlKFJlbGF0aW9uIGlkeHJlbCwgU2NhbktleURhdGEgKnNrZXlzLAorCQkJCQkJCQkJ IFR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCk7CitzdGF0aWMgdm9pZCBidWlsZF9pbmRleF9zY2Fu a2V5cyhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQkJCQkgUmVsYXRpb24g aWR4X3JlbCwgRGF0dW0gKnBrX3ZhbHMsCisJCQkJCQkJCSBjaGFyICpwa19udWxscywgU2Nhbktl eSBza2V5cyk7CitzdGF0aWMgdm9pZCByaV9wb3B1bGF0ZV9mYXN0cGF0aF9tZXRhZGF0YShSSV9D b25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQkJCQkJCSAgUmVsYXRpb24gZmtfcmVsLCBSZWxh dGlvbiBpZHhfcmVsKTsKIHN0YXRpYyB2b2lkIHJpX0V4dHJhY3RWYWx1ZXMoUmVsYXRpb24gcmVs LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkgY29uc3QgUklfQ29uc3RyYWludEluZm8g KnJpaW5mbywgYm9vbCByZWxfaXNfcGssCiAJCQkJCQkJIERhdHVtICp2YWxzLCBjaGFyICpudWxs cyk7CkBAIC0yNzYsMTQgKzMxMyw3IEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdk YXRhKQogCWlmICghdGFibGVfdHVwbGVfc2F0aXNmaWVzX3NuYXBzaG90KHRyaWdkYXRhLT50Z19y ZWxhdGlvbiwgbmV3c2xvdCwgU25hcHNob3RTZWxmKSkKIAkJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShOVUxMKTsKIAotCS8qCi0JICogR2V0IHRoZSByZWxhdGlvbiBkZXNjcmlwdG9ycyBvZiB0aGUg RksgYW5kIFBLIHRhYmxlcy4KLQkgKgotCSAqIHBrX3JlbCBpcyBvcGVuZWQgaW4gUm93U2hhcmVM b2NrIG1vZGUgc2luY2UgdGhhdCdzIHdoYXQgb3VyIGV2ZW50dWFsCi0JICogU0VMRUNUIEZPUiBL RVkgU0hBUkUgd2lsbCBnZXQgb24gaXQuCi0JICovCiAJZmtfcmVsID0gdHJpZ2RhdGEtPnRnX3Jl bGF0aW9uOwotCXBrX3JlbCA9IHRhYmxlX29wZW4ocmlpbmZvLT5wa19yZWxpZCwgUm93U2hhcmVM b2NrKTsKIAogCXN3aXRjaCAocmlfTnVsbENoZWNrKFJlbGF0aW9uR2V0RGVzY3IoZmtfcmVsKSwg bmV3c2xvdCwgcmlpbmZvLCBmYWxzZSkpCiAJewpAQCAtMjkzLDcgKzMyMyw2IEBAIFJJX0ZLZXlf Y2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCQkJICogTm8gZnVydGhlciBjaGVjayBuZWVk ZWQgLSBhbiBhbGwtTlVMTCBrZXkgcGFzc2VzIGV2ZXJ5IHR5cGUgb2YKIAkJCSAqIGZvcmVpZ24g a2V5IGNvbnN0cmFpbnQuCiAJCQkgKi8KLQkJCXRhYmxlX2Nsb3NlKHBrX3JlbCwgUm93U2hhcmVM b2NrKTsKIAkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAKIAkJY2FzZSBSSV9LRVlT X1NPTUVfTlVMTDoKQEAgLTMxOCw3ICszNDcsNiBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRh ICp0cmlnZGF0YSkKIAkJCQkJCQkgZXJyZGV0YWlsKCJNQVRDSCBGVUxMIGRvZXMgbm90IGFsbG93 IG1peGluZyBvZiBudWxsIGFuZCBub25udWxsIGtleSB2YWx1ZXMuIiksCiAJCQkJCQkJIGVycnRh YmxlY29uc3RyYWludChma19yZWwsCiAJCQkJCQkJCQkJCQlOYW1lU3RyKHJpaW5mby0+Y29ubmFt ZSkpKSk7Ci0JCQkJCXRhYmxlX2Nsb3NlKHBrX3JlbCwgUm93U2hhcmVMb2NrKTsKIAkJCQkJcmV0 dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKIAogCQkJCWNhc2UgRktDT05TVFJfTUFUQ0hfU0lN UExFOgpAQCAtMzI3LDcgKzM1NSw2IEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdk YXRhKQogCQkJCQkgKiBNQVRDSCBTSU1QTEUgLSBpZiBBTlkgY29sdW1uIGlzIG51bGwsIHRoZSBr ZXkgcGFzc2VzCiAJCQkJCSAqIHRoZSBjb25zdHJhaW50LgogCQkJCQkgKi8KLQkJCQkJdGFibGVf Y2xvc2UocGtfcmVsLCBSb3dTaGFyZUxvY2spOwogCQkJCQlyZXR1cm4gUG9pbnRlckdldERhdHVt KE5VTEwpOwogCiAjaWZkZWYgTk9UX1VTRUQKQEAgLTM1Miw4ICszNzksMzEgQEAgUklfRktleV9j aGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJCQlicmVhazsKIAl9CiAKKwkvKgorCSAqIEZh c3QgcGF0aDogcHJvYmUgdGhlIFBLIHVuaXF1ZSBpbmRleCBkaXJlY3RseSwgYnlwYXNzaW5nIFNQ SS4KKwkgKgorCSAqIEZvciBub24tcGFydGl0aW9uZWQsIG5vbi10ZW1wb3JhbCBGS3MsIHdlIGNh biBza2lwIHRoZSBTUEkgbWFjaGluZXJ5CisJICogKHBsYW4gY2FjaGUsIGV4ZWN1dG9yIHNldHVw LCBldGMuKSBhbmQgZG8gYSBkaXJlY3QgaW5kZXggc2NhbiArIHR1cGxlCisJICogbG9jay4gIFRo aXMgaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8gdGhlIFNQSSBwYXRoIGJlbG93IGJ1dCBh dm9pZHMKKwkgKiB0aGUgcGVyLXJvdyBleGVjdXRvciBvdmVyaGVhZC4KKwkgKgorCSAqIHJpX0Zh c3RQYXRoQ2hlY2soKSByZXBvcnRzIHRoZSB2aW9sYXRpb24gaXRzZWxmICh2aWEgZXJlcG9ydCkg aWYgbm8KKwkgKiBtYXRjaGluZyBQSyByb3cgaXMgZm91bmQsIHNvIGl0IG9ubHkgcmV0dXJucyBv biBzdWNjZXNzLgorCSAqLworCWlmIChyaV9mYXN0cGF0aF9pc19hcHBsaWNhYmxlKHJpaW5mbykp CisJeworCQlyaV9GYXN0UGF0aENoZWNrKHJpaW5mbywgZmtfcmVsLCBuZXdzbG90KTsKKwkJcmV0 dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwl9CisKIAlTUElfY29ubmVjdCgpOwogCisJLyoK KwkgKiBwa19yZWwgaXMgb3BlbmVkIGluIFJvd1NoYXJlTG9jayBtb2RlIHNpbmNlIHRoYXQncyB3 aGF0IG91ciBldmVudHVhbAorCSAqIFNFTEVDVCBGT1IgS0VZIFNIQVJFIHdpbGwgZ2V0IG9uIGl0 LgorCSAqLworCXBrX3JlbCA9IHRhYmxlX29wZW4ocmlpbmZvLT5wa19yZWxpZCwgUm93U2hhcmVM b2NrKTsKKwogCS8qIEZldGNoIG9yIHByZXBhcmUgYSBzYXZlZCBwbGFuIGZvciB0aGUgcmVhbCBj aGVjayAqLwogCXJpX0J1aWxkUXVlcnlLZXkoJnFrZXksIHJpaW5mbywgUklfUExBTl9DSEVDS19M T09LVVBQSyk7CiAKQEAgLTIzNTYsNiArMjQwNiwxMiBAQCByaV9Mb2FkQ29uc3RyYWludEluZm8o T2lkIGNvbnN0cmFpbnRPaWQpCiAKIAlyaWluZm8tPnZhbGlkID0gdHJ1ZTsKIAorCXJpaW5mby0+ Y29uaW5kaWQgPSBjb25Gb3JtLT5jb25pbmRpZDsKKwlyaWluZm8tPnBrX2lzX3BhcnRpdGlvbmVk ID0KKwkJKGdldF9yZWxfcmVsa2luZChyaWluZm8tPnBrX3JlbGlkKSA9PSBSRUxLSU5EX1BBUlRJ VElPTkVEX1RBQkxFKTsKKworCXJpaW5mby0+ZnBtZXRhID0gTlVMTDsKKwogCXJldHVybiByaWlu Zm87CiB9CiAKQEAgLTI2MjMsNiArMjY3OSwzNzggQEAgcmlfUGVyZm9ybUNoZWNrKGNvbnN0IFJJ X0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJcmV0dXJuIFNQSV9wcm9jZXNzZWQgIT0gMDsKIH0K IAorLyoKKyAqIHJpX0Zhc3RQYXRoQ2hlY2sKKyAqCQlQZXJmb3JtIEZLIGV4aXN0ZW5jZSBjaGVj ayB2aWEgZGlyZWN0IGluZGV4IHByb2JlLCBieXBhc3NpbmcgU1BJLgorICoKKyAqIElmIG5vIG1h dGNoaW5nIFBLIHJvdyBleGlzdHMsIHJlcG9ydCB0aGUgdmlvbGF0aW9uIHZpYSByaV9SZXBvcnRW aW9sYXRpb24oKSwKKyAqIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9ybWFsbHku CisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aENoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJ bmZvICpyaWluZm8sCisJCQkJIFJlbGF0aW9uIGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Ns b3QpCit7CisJUmVsYXRpb24JcGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWw7CisJSW5kZXhTY2Fu RGVzYyBzY2FuZGVzYzsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlEYXR1bQkJcGtfdmFsc1tJ TkRFWF9NQVhfS0VZU107CisJY2hhcgkJcGtfbnVsbHNbSU5ERVhfTUFYX0tFWVNdOworCVNjYW5L ZXlEYXRhIHNrZXlbSU5ERVhfTUFYX0tFWVNdOworCWJvb2wJCWZvdW5kID0gZmFsc2U7CisJT2lk CQkJc2F2ZWRfdXNlcmlkOworCWludAkJCXNhdmVkX3NlY19jb250ZXh0OworCVNuYXBzaG90CXNu YXBzaG90OworCisJLyoKKwkgKiBBZHZhbmNlIHRoZSBjb21tYW5kIGNvdW50ZXIgc28gdGhlIHNu YXBzaG90IHNlZXMgdGhlIGVmZmVjdHMgb2YgcHJpb3IKKwkgKiB0cmlnZ2VycyBpbiB0aGlzIHN0 YXRlbWVudC4gIE1pcnJvcnMgd2hhdCB0aGUgU1BJIHBhdGggZG9lcyBpbgorCSAqIHJpX1BlcmZv cm1DaGVjaygpLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisJc25hcHNob3Qg PSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisKKwlwa19yZWwg PSB0YWJsZV9vcGVuKHJpaW5mby0+cGtfcmVsaWQsIFJvd1NoYXJlTG9jayk7CisJaWR4X3JlbCA9 IGluZGV4X29wZW4ocmlpbmZvLT5jb25pbmRpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXNsb3Qg PSB0YWJsZV9zbG90X2NyZWF0ZShwa19yZWwsIE5VTEwpOworCXNjYW5kZXNjID0gaW5kZXhfYmVn aW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwKKwkJCQkJCQkgICBzbmFwc2hvdCwgTlVMTCwKKwkJCQkJ CQkgICByaWluZm8tPm5rZXlzLCAwKTsKKworCWlmIChyaWluZm8tPmZwbWV0YSA9PSBOVUxMKQor CQlyaV9wb3B1bGF0ZV9mYXN0cGF0aF9tZXRhZGF0YSgoUklfQ29uc3RyYWludEluZm8gKikgcmlp bmZvLAorCQkJCQkJCQkJICBma19yZWwsIGlkeF9yZWwpOworCUFzc2VydChyaWluZm8tPmZwbWV0 YSk7CisKKwlHZXRVc2VySWRBbmRTZWNDb250ZXh0KCZzYXZlZF91c2VyaWQsICZzYXZlZF9zZWNf Y29udGV4dCk7CisJU2V0VXNlcklkQW5kU2VjQ29udGV4dChSZWxhdGlvbkdldEZvcm0ocGtfcmVs KS0+cmVsb3duZXIsCisJCQkJCQkgICBzYXZlZF9zZWNfY29udGV4dCB8CisJCQkJCQkgICBTRUNV UklUWV9MT0NBTF9VU0VSSURfQ0hBTkdFIHwKKwkJCQkJCSAgIFNFQ1VSSVRZX05PRk9SQ0VfUkxT KTsKKwlyaV9DaGVja1Blcm1pc3Npb25zKHBrX3JlbCk7CisKKwlyaV9FeHRyYWN0VmFsdWVzKGZr X3JlbCwgbmV3c2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOworCWJ1aWxk X2luZGV4X3NjYW5rZXlzKHJpaW5mbywgaWR4X3JlbCwgcGtfdmFscywgcGtfbnVsbHMsIHNrZXkp OworCWZvdW5kID0gcmlfRmFzdFBhdGhQcm9iZU9uZShwa19yZWwsIGlkeF9yZWwsIHNjYW5kZXNj LCBzbG90LAorCQkJCQkJCQlzbmFwc2hvdCwgcmlpbmZvLCBza2V5LCByaWluZm8tPm5rZXlzKTsK KwlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNhdmVkX3VzZXJpZCwgc2F2ZWRfc2VjX2NvbnRleHQp OworCWluZGV4X2VuZHNjYW4oc2NhbmRlc2MpOworCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNs b3Qoc2xvdCk7CisJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKKworCWlmICghZm91bmQp CisJCXJpX1JlcG9ydFZpb2xhdGlvbihyaWluZm8sIHBrX3JlbCwgZmtfcmVsLAorCQkJCQkJICAg bmV3c2xvdCwgTlVMTCwKKwkJCQkJCSAgIFJJX1BMQU5fQ0hFQ0tfTE9PS1VQUEssIGZhbHNlLCBm YWxzZSk7CisKKwlpbmRleF9jbG9zZShpZHhfcmVsLCBOb0xvY2spOworCXRhYmxlX2Nsb3NlKHBr X3JlbCwgTm9Mb2NrKTsKK30KKworLyoKKyAqIHJpX0Zhc3RQYXRoUHJvYmVPbmUKKyAqCQlQcm9i ZSB0aGUgUEsgaW5kZXggZm9yIG9uZSBzZXQgb2Ygc2NhbiBrZXlzLCBsb2NrIHRoZSBtYXRjaGlu ZworICoJCXR1cGxlCisgKgorICogUmV0dXJucyB0cnVlIGlmIGEgbWF0Y2hpbmcgUEsgcm93IHdh cyBmb3VuZCwgbG9ja2VkLCBhbmQgKGlmCisgKiBhcHBsaWNhYmxlKSB2aXNpYmxlIHRvIHRoZSB0 cmFuc2FjdGlvbiBzbmFwc2hvdC4KKyAqLworc3RhdGljIGJvb2wKK3JpX0Zhc3RQYXRoUHJvYmVP bmUoUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBpZHhfcmVsLAorCQkJCQlJbmRleFNjYW5EZXNj IHNjYW5kZXNjLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJU25hcHNob3Qgc25hcHNob3Qs IGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCVNjYW5LZXlEYXRhICpza2V5 LCBpbnQgbmtleXMpCit7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCWluZGV4X3Jlc2Nhbihz Y2FuZGVzYywgc2tleSwgbmtleXMsIE5VTEwsIDApOworCisJaWYgKGluZGV4X2dldG5leHRfc2xv dChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCXsKKwkJYm9vbAkJY29u Y3VycmVudGx5X3VwZGF0ZWQ7CisKKwkJaWYgKHJpX0xvY2tQS1R1cGxlKHBrX3JlbCwgc2xvdCwg c25hcHNob3QsCisJCQkJCQkgICAmY29uY3VycmVudGx5X3VwZGF0ZWQpKQorCQl7CisJCQlpZiAo Y29uY3VycmVudGx5X3VwZGF0ZWQpCisJCQkJZm91bmQgPSByZWNoZWNrX21hdGNoZWRfcGtfdHVw bGUoaWR4X3JlbCwgc2tleSwgc2xvdCk7CisJCQllbHNlCisJCQkJZm91bmQgPSB0cnVlOworCQl9 CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisvKgorICogcmlfTG9ja1BLVHVwbGUKKyAqCQlM b2NrIGEgUEsgdHVwbGUgZm91bmQgYnkgdGhlIGZhc3QtcGF0aCBpbmRleCBzY2FuLgorICoKKyAq IENhbGxzIHRhYmxlX3R1cGxlX2xvY2soKSBkaXJlY3RseSB3aXRoIGhhbmRsaW5nIHNwZWNpZmlj IHRvIFJJIGNoZWNrcy4KKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHVwbGUgd2FzIHN1Y2Nlc3Nm dWxseSBsb2NrZWQuCisgKgorICogU2V0cyAqY29uY3VycmVudGx5X3VwZGF0ZWQgdG8gdHJ1ZSBp ZiB0aGUgbG9ja2VkIHR1cGxlIHdhcyByZWFjaGVkCisgKiBieSBmb2xsb3dpbmcgYW4gdXBkYXRl IGNoYWluICh0bWZkLnRyYXZlcnNlZCksIGluZGljYXRpbmcgdGhlIGNhbGxlcgorICogc2hvdWxk IHJlY2hlY2sgdGhlIGtleS4KKyAqLworc3RhdGljIGJvb2wKK3JpX0xvY2tQS1R1cGxlKFJlbGF0 aW9uIHBrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNuYXBzaG90IHNuYXAsCisJCQkgICBi b29sICpjb25jdXJyZW50bHlfdXBkYXRlZCkKK3sKKwlUTV9GYWlsdXJlRGF0YSB0bWZkOworCVRN X1Jlc3VsdAlyZXN1bHQ7CisJaW50CQkJbG9ja2ZsYWdzID0gVFVQTEVfTE9DS19GTEFHX0xPQ0tf VVBEQVRFX0lOX1BST0dSRVNTOworCisJKmNvbmN1cnJlbnRseV91cGRhdGVkID0gZmFsc2U7CisK KwlpZiAoIUlzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSkKKwkJbG9ja2ZsYWdzIHw9IFRVUExF X0xPQ0tfRkxBR19GSU5EX0xBU1RfVkVSU0lPTjsKKworCXJlc3VsdCA9IHRhYmxlX3R1cGxlX2xv Y2socGtfcmVsLCAmc2xvdC0+dHRzX3RpZCwgc25hcCwKKwkJCQkJCQkgIHNsb3QsIEdldEN1cnJl bnRDb21tYW5kSWQoZmFsc2UpLAorCQkJCQkJCSAgTG9ja1R1cGxlS2V5U2hhcmUsIExvY2tXYWl0 QmxvY2ssCisJCQkJCQkJICBsb2NrZmxhZ3MsICZ0bWZkKTsKKworCXN3aXRjaCAocmVzdWx0KQor CXsKKwkJY2FzZSBUTV9PazoKKwkJCWlmICh0bWZkLnRyYXZlcnNlZCkKKwkJCQkqY29uY3VycmVu dGx5X3VwZGF0ZWQgPSB0cnVlOworCQkJcmV0dXJuIHRydWU7CisKKwkJY2FzZSBUTV9EZWxldGVk OgorCQkJaWYgKElzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSkKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSwKKwkJ CQkJCSBlcnJtc2coImNvdWxkIG5vdCBzZXJpYWxpemUgYWNjZXNzIGR1ZSB0byBjb25jdXJyZW50 IHVwZGF0ZSIpKSk7CisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2FzZSBUTV9VcGRhdGVkOgorCQkJ aWYgKElzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSwKKwkJCQkJCSBl cnJtc2coImNvdWxkIG5vdCBzZXJpYWxpemUgYWNjZXNzIGR1ZSB0byBjb25jdXJyZW50IHVwZGF0 ZSIpKSk7CisKKwkJCS8qCisJCQkgKiBJbiBSRUFEIENPTU1JVFRFRCwgRklORF9MQVNUX1ZFUlNJ T04gc2hvdWxkIGhhdmUgY2hhc2VkIHRoZQorCQkJICogY2hhaW4gYW5kIHJldHVybmVkIFRNX09r LiAgR2V0dGluZyBoZXJlIG1lYW5zIHNvbWV0aGluZworCQkJICogdW5leHBlY3RlZCAtLSBmYWxs IHRocm91Z2ggdG8gZXJyb3IuCisJCQkgKi8KKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHRh YmxlX3R1cGxlX2xvY2sgc3RhdHVzOiAldSIsIHJlc3VsdCk7CisJCQlicmVhazsKKworCQljYXNl IFRNX1NlbGZNb2RpZmllZDoKKworCQkJLyoKKwkJCSAqIFRoZSBjdXJyZW50IGNvbW1hbmQgb3Ig YSBsYXRlciBjb21tYW5kIGluIHRoaXMgdHJhbnNhY3Rpb24KKwkJCSAqIG1vZGlmaWVkIHRoZSBQ SyByb3cuICBUaGlzIHNob3VsZG4ndCBub3JtYWxseSBoYXBwZW4gZHVyaW5nIGFuCisJCQkgKiBG SyBjaGVjayAod2UncmUgbm90IG1vZGlmeWluZyBwa19yZWwpLCBidXQgaGFuZGxlIGl0IHNhZmVs eSBieQorCQkJICogdHJlYXRpbmcgdGhlIHR1cGxlIGFzIG5vdCBmb3VuZC4KKwkJCSAqLworCQkJ cmV0dXJuIGZhbHNlOworCisJCWNhc2UgVE1fSW52aXNpYmxlOgorCQkJZWxvZyhFUlJPUiwgImF0 dGVtcHRlZCB0byBsb2NrIGludmlzaWJsZSB0dXBsZSIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVs dDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdGFibGVfdHVwbGVfbG9jayBzdGF0dXM6 ICV1IiwgcmVzdWx0KTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBmYWxzZTsJCQkJLyoga2Vl cCBjb21waWxlciBxdWlldCAqLworfQorCitzdGF0aWMgYm9vbAorcmlfZmFzdHBhdGhfaXNfYXBw bGljYWJsZShjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvKQoreworCS8qCisJICogUGFy dGl0aW9uZWQgcmVmZXJlbmNlZCB0YWJsZXMgYXJlIHNraXBwZWQgZm9yIHNpbXBsaWNpdHksIHNp bmNlIHRoZXkKKwkgKiByZXF1aXJlIHJvdXRpbmcgdGhlIHByb2JlIHRocm91Z2ggdGhlIGNvcnJl Y3QgcGFydGl0aW9uIHVzaW5nCisJICogUGFydGl0aW9uRGlyZWN0b3J5LgorCSAqLworCWlmIChy aWluZm8tPnBrX2lzX3BhcnRpdGlvbmVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRl bXBvcmFsIGZvcmVpZ24ga2V5cyB1c2UgcmFuZ2Ugb3ZlcmxhcCBhbmQgY29udGFpbm1lbnQgc2Vt YW50aWNzICgmJiwKKwkgKiA8QCwgcmFuZ2VfYWdnKCkpIHRoYXQgaW5oZXJlbnRseSBpbnZvbHZl IGFnZ3JlZ2F0aW9uIGFuZCBtdWx0aXBsZS1yb3cKKwkgKiByZWFzb25pbmcsIHNvIHRoZXkgc3Rh eSBvbiB0aGUgU1BJIHBhdGguCisJICovCisJaWYgKHJpaW5mby0+aGFzcGVyaW9kKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIHJpX0NoZWNrUGVybWlzc2lv bnMKKyAqICAgQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB1c2VyIGhhcyBwZXJtaXNzaW9ucyB0byBs b29rIGludG8gdGhlIHNjaGVtYSBvZgorICogICBhbmQgU0VMRUNUIGZyb20gJ3F1ZXJ5X3JlbCcK KyAqLworc3RhdGljIHZvaWQKK3JpX0NoZWNrUGVybWlzc2lvbnMoUmVsYXRpb24gcXVlcnlfcmVs KQoreworCUFjbFJlc3VsdAlhY2xyZXN1bHQ7CisKKwkvKiBVU0FHRSBvbiBzY2hlbWEuICovCisJ YWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKE5hbWVzcGFjZVJlbGF0aW9uSWQsCisJCQkJCQkJ CVJlbGF0aW9uR2V0TmFtZXNwYWNlKHF1ZXJ5X3JlbCksCisJCQkJCQkJCUdldFVzZXJJZCgpLCBB Q0xfVVNBR0UpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vy cm9yKGFjbHJlc3VsdCwgT0JKRUNUX1NDSEVNQSwKKwkJCQkJICAgZ2V0X25hbWVzcGFjZV9uYW1l KFJlbGF0aW9uR2V0TmFtZXNwYWNlKHF1ZXJ5X3JlbCkpKTsKKworCS8qIFNFTEVDVCBvbiByZWxh dGlvbi4gKi8KKwlhY2xyZXN1bHQgPSBwZ19jbGFzc19hY2xjaGVjayhSZWxhdGlvbkdldFJlbGlk KHF1ZXJ5X3JlbCksIEdldFVzZXJJZCgpLAorCQkJCQkJCQkgIEFDTF9TRUxFQ1QpOworCWlmIChh Y2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JK RUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShxdWVyeV9yZWwpKTsK K30KKworLyoKKyAqIHJlY2hlY2tfbWF0Y2hlZF9wa190dXBsZQorICoJCUFmdGVyIGZvbGxvd2lu ZyBhbiB1cGRhdGUgY2hhaW4gKHRtZmQudHJhdmVyc2VkKSwgdmVyaWZ5IHRoYXQKKyAqCQl0aGUg bG9ja2VkIFBLIHR1cGxlIHN0aWxsIG1hdGNoZXMgdGhlIG9yaWdpbmFsIHNlYXJjaCBrZXlzLgor ICoKKyAqIEEgbm9uLWtleSB1cGRhdGUgKGUuZy4gY2hhbmdpbmcgYSBub24tUEsgY29sdW1uKSBj cmVhdGVzIGEgbmV3IHR1cGxlIHZlcnNpb24KKyAqIHRoYXQgd2UndmUgbm93IGxvY2tlZCwgYnV0 IHRoZSBrZXkgaXMgdW5jaGFuZ2VkIC0tIHRoYXQncyBmaW5lLiAgQSBrZXkKKyAqIHVwZGF0ZSBt ZWFucyB0aGUgdmFsdWUgd2Ugd2VyZSBsb29raW5nIGZvciBpcyBnb25lLCBzbyB3ZSBzaG91bGQg dHJlYXQgaXQgYXMKKyAqIG5vdCBmb3VuZC4KKyAqLworc3RhdGljIGJvb2wKK3JlY2hlY2tfbWF0 Y2hlZF9wa190dXBsZShSZWxhdGlvbiBpZHhyZWwsIFNjYW5LZXlEYXRhICpza2V5cywKKwkJCQkJ CSBUdXBsZVRhYmxlU2xvdCAqbmV3X3Nsb3QpCit7CisJLyoKKwkgKiBUT0RPOiBCdWlsZEluZGV4 SW5mbyBkb2VzIGEgc3lzY2FjaGUgbG9va3VwICsgcGFsbG9jIG9uIGV2ZXJ5IGNhbGwuCisJICog VGhpcyBvbmx5IGZpcmVzIG9uIHRoZSBjb25jdXJyZW50LXVwZGF0ZSBwYXRoICh0bWZkLnRyYXZl cnNlZCksIHdoaWNoCisJICogc2hvdWxkIGJlIHJhcmUsIHNvIHRoZSBjb3N0IGlzIGFjY2VwdGFi bGUgZm9yIG5vdy4gIElmIHByb2ZpbGluZyBzaG93cworCSAqIG90aGVyd2lzZSwgY2FjaGUgdGhl IEluZGV4SW5mbyBpbiBGYXN0UGF0aE1ldGEuCisJICovCisJSW5kZXhJbmZvICAqaW5kZXhJbmZv ID0gQnVpbGRJbmRleEluZm8oaWR4cmVsKTsKKwlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlT XTsKKwlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOworCWJvb2wJCW1hdGNoZWQgPSB0cnVl OworCisJLyogUEsgaW5kZXhlcyBuZXZlciBoYXZlIHRoZXNlLiAqLworCUFzc2VydChpbmRleElu Zm8tPmlpX0V4cHJlc3Npb25zID09IE5JTCAmJgorCQkgICBpbmRleEluZm8tPmlpX0V4Y2x1c2lv bk9wcyA9PSBOVUxMKTsKKworCS8qIEZvcm0gdGhlIGluZGV4IHZhbHVlcyBhbmQgaXNudWxsIGZs YWdzIGdpdmVuIHRoZSB0YWJsZSB0dXBsZS4gKi8KKwlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8s IG5ld19zbG90LCBOVUxMLCB2YWx1ZXMsIGlzbnVsbCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBp bmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0cnM7IGkrKykKKwl7CisJCVNjYW5LZXlEYXRhICpz a2V5ID0gJnNrZXlzW2ldOworCisJCS8qIEEgUEsgY29sdW1uIGNhbiBuZXZlciBiZSBzZXQgdG8g TlVMTC4gKi8KKwkJQXNzZXJ0KCFpc251bGxbaV0pOworCQlpZiAoIURhdHVtR2V0Qm9vbChGdW5j dGlvbkNhbGwyQ29sbCgmc2tleS0+c2tfZnVuYywKKwkJCQkJCQkJCQkJc2tleS0+c2tfY29sbGF0 aW9uLAorCQkJCQkJCQkJCQl2YWx1ZXNbaV0sCisJCQkJCQkJCQkJCXNrZXktPnNrX2FyZ3VtZW50 KSkpCisJCXsKKwkJCW1hdGNoZWQgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0 dXJuIG1hdGNoZWQ7Cit9CisKKy8qCisgKiBidWlsZF9pbmRleF9zY2Fua2V5cworICoJCUJ1aWxk IFNjYW5LZXlzIGZvciBhIGRpcmVjdCBpbmRleCBwcm9iZSBvZiB0aGUgUEsncyB1bmlxdWUgaW5k ZXguCisgKgorICogVXNlcyBjYWNoZWQgY29tcGFyZSBlbnRyaWVzLCBvcGVyYXRvciBwcm9jZWR1 cmVzLCBhbmQgc3RyYXRlZ3kgbnVtYmVycworICogZnJvbSByaV9wb3B1bGF0ZV9mYXN0cGF0aF9t ZXRhZGF0YSgpIHJhdGhlciB0aGFuIGxvb2tpbmcgdGhlbSB1cCBvbgorICogZWFjaCBpbnZvY2F0 aW9uLiAgQ2FzdHMgRksgdmFsdWVzIHRvIHRoZSBvcGVyYXRvcidzIGV4cGVjdGVkIGlucHV0Cisg KiB0eXBlIGlmIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQKK2J1aWxkX2luZGV4X3NjYW5rZXlz KGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCSBSZWxhdGlvbiBpZHhfcmVs LCBEYXR1bSAqcGtfdmFscywKKwkJCQkJIGNoYXIgKnBrX251bGxzLCBTY2FuS2V5IHNrZXlzKQor eworCUZhc3RQYXRoTWV0YSAqZnBtZXRhID0gcmlpbmZvLT5mcG1ldGE7CisKKwlBc3NlcnQoZnBt ZXRhKTsKKworCS8qCisJICogTWF5IG5lZWQgdG8gY2FzdCBlYWNoIG9mIHRoZSBpbmRpdmlkdWFs IHZhbHVlcyBvZiB0aGUgZm9yZWlnbiBrZXkgdG8KKwkgKiB0aGUgY29ycmVzcG9uZGluZyBQSyBj b2x1bW4ncyB0eXBlIGlmIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBkZW1hbmRzIGl0LgorCSAqLwor CWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsrKQorCXsKKwkJaWYgKHBrX251 bGxzW2ldICE9ICduJykKKwkJeworCQkJUklfQ29tcGFyZUhhc2hFbnRyeSAqZW50cnkgPSBmcG1l dGEtPmNvbXBhcmVfZW50cmllc1tpXTsKKworCQkJaWYgKE9pZElzVmFsaWQoZW50cnktPmNhc3Rf ZnVuY19maW5mby5mbl9vaWQpKQorCQkJCXBrX3ZhbHNbaV0gPSBGdW5jdGlvbkNhbGwzKCZlbnRy eS0+Y2FzdF9mdW5jX2ZpbmZvLAorCQkJCQkJCQkJCSAgIHBrX3ZhbHNbaV0sCisJCQkJCQkJCQkJ ICAgSW50MzJHZXREYXR1bSgtMSksCS8qIHR5cG1vZCAqLworCQkJCQkJCQkJCSAgIEJvb2xHZXRE YXR1bShmYWxzZSkpOwkvKiBpbXBsaWNpdCBjb2VyY2lvbiAqLworCQl9CisJfQorCisJLyoKKwkg KiBTZXQgdXAgU2NhbktleXMgZm9yIHRoZSBpbmRleCBzY2FuLiBUaGlzIGlzIGVzc2VudGlhbGx5 IGhvdworCSAqIEV4ZWNJbmRleEJ1aWxkU2NhbktleXMoKSBzZXRzIHRoZW0gdXAuCisJICovCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCisJeworCQlpbnQJCQlwa2F0 dHJubyA9IGkgKyAxOworCisJCVNjYW5LZXlFbnRyeUluaXRpYWxpemUoJnNrZXlzW2ldLCAwLCBw a2F0dHJubywKKwkJCQkJCQkgICBmcG1ldGEtPnN0cmF0c1tpXSwgZnBtZXRhLT5zdWJ0eXBlc1tp XSwKKwkJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRpb25baV0sIGZwbWV0YS0+cmVnb3Bz W2ldLAorCQkJCQkJCSAgIHBrX3ZhbHNbaV0pOworCX0KK30KKworLyoKKyAqIHJpX3BvcHVsYXRl X2Zhc3RwYXRoX21ldGFkYXRhCisgKgkJQ2FjaGUgcGVyLWtleSBtZXRhZGF0YSBuZWVkZWQgYnkg YnVpbGRfaW5kZXhfc2NhbmtleXMoKS4KKyAqCisgKiBMb29rcyB1cCB0aGUgY29tcGFyZSBoYXNo IGVudHJ5LCBvcGVyYXRvciBwcm9jZWR1cmUgT0lELCBhbmQgaW5kZXgKKyAqIHN0cmF0ZWd5L3N1 YnR5cGUgZm9yIGVhY2gga2V5IGNvbHVtbi4gIENhbGxlZCBsYXppbHkgb24gZmlyc3QgdXNlCisg KiBhbmQgcGVyc2lzdHMgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgUklfQ29uc3RyYWludEluZm8g ZW50cnkuCisgKi8KK3N0YXRpYyB2b2lkCityaV9wb3B1bGF0ZV9mYXN0cGF0aF9tZXRhZGF0YShS SV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQkJCSAgUmVsYXRpb24gZmtfcmVsLCBSZWxh dGlvbiBpZHhfcmVsKQoreworCUZhc3RQYXRoTWV0YSAqZnBtZXRhOworCU1lbW9yeUNvbnRleHQg b2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJQXNz ZXJ0KHJpaW5mbyAhPSBOVUxMICYmIHJpaW5mby0+dmFsaWQpOworCisJZnBtZXRhID0gcGFsbG9j X29iamVjdChGYXN0UGF0aE1ldGEpOworCWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5 czsgaSsrKQorCXsKKwkJT2lkCQkJZXFfb3ByID0gcmlpbmZvLT5wZl9lcV9vcHJzW2ldOworCQlP aWQJCQl0eXBlaWQgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pOwor CQlPaWQJCQlsZWZ0dHlwZTsKKwkJUklfQ29tcGFyZUhhc2hFbnRyeSAqZW50cnkgPSByaV9IYXNo Q29tcGFyZU9wKGVxX29wciwgdHlwZWlkKTsKKworCQlmcG1ldGEtPmNvbXBhcmVfZW50cmllc1tp XSA9IGVudHJ5OworCQlmcG1ldGEtPnJlZ29wc1tpXSA9IGdldF9vcGNvZGUoZXFfb3ByKTsKKwor CQlnZXRfb3Bfb3BmYW1pbHlfcHJvcGVydGllcyhlcV9vcHIsCisJCQkJCQkJCSAgIGlkeF9yZWwt PnJkX29wZmFtaWx5W2ldLAorCQkJCQkJCQkgICBmYWxzZSwKKwkJCQkJCQkJICAgJmZwbWV0YS0+ c3RyYXRzW2ldLAorCQkJCQkJCQkgICAmbGVmdHR5cGUsCisJCQkJCQkJCSAgICZmcG1ldGEtPnN1 YnR5cGVzW2ldKTsKKwl9CisKKwlyaWluZm8tPmZwbWV0YSA9IGZwbWV0YTsKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwogLyoKICAqIEV4dHJhY3QgZmllbGRzIGZyb20gYSB0 dXBsZSBpbnRvIERhdHVtL251bGxzIGFycmF5cwogICovCkBAIC0zMTE4LDggKzM1NDYsMTEgQEAg cmlfQ29tcGFyZVdpdGhDYXN0KE9pZCBlcV9vcHIsIE9pZCB0eXBlaWQsIE9pZCBjb2xsaWQsCiAv KgogICogcmlfSGFzaENvbXBhcmVPcCAtCiAgKgotICogU2VlIGlmIHdlIGtub3cgaG93IHRvIGNv bXBhcmUgdHdvIHZhbHVlcywgYW5kIGNyZWF0ZSBhIG5ldyBoYXNoIGVudHJ5Ci0gKiBpZiBub3Qu CisgKiBMb29rIHVwIG9yIGNyZWF0ZSBhIGNhY2hlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gZXF1YWxp dHkgb3BlcmF0b3IgYW5kCisgKiB0aGUgY2FsbGVyJ3MgdmFsdWUgdHlwZSAodHlwZWlkKS4gIFRo ZSBlbnRyeSBob2xkcyB0aGUgb3BlcmF0b3IncworICogRm1nckluZm8gYW5kLCBpZiB0eXBlaWQg ZG9lc24ndCBtYXRjaCB3aGF0IHRoZSBvcGVyYXRvciBleHBlY3RzIGFzCisgKiBpdHMgcmlnaHQt aGFuZCBpbnB1dCwgYSBjYXN0IGZ1bmN0aW9uIHRvIGNvZXJjZSB0aGUgdmFsdWUgYmVmb3JlCisg KiBjb21wYXJpc29uLgogICovCiBzdGF0aWMgUklfQ29tcGFyZUhhc2hFbnRyeSAqCiByaV9IYXNo Q29tcGFyZU9wKE9pZCBlcV9vcHIsIE9pZCB0eXBlaWQpCkBAIC0zMTc1LDggKzM2MDYsMTQgQEAg cmlfSGFzaENvbXBhcmVPcChPaWQgZXFfb3ByLCBPaWQgdHlwZWlkKQogCQkgKiBtb21lbnQgc2lu Y2UgdGhhdCB3aWxsIG5ldmVyIGJlIGdlbmVyYXRlZCBmb3IgaW1wbGljaXQgY29lcmNpb25zLgog CQkgKi8KIAkJb3BfaW5wdXRfdHlwZXMoZXFfb3ByLCAmbGVmdHR5cGUsICZyaWdodHR5cGUpOwot CQlBc3NlcnQobGVmdHR5cGUgPT0gcmlnaHR0eXBlKTsKLQkJaWYgKHR5cGVpZCA9PSBsZWZ0dHlw ZSkKKworCQkvKgorCQkgKiBwZl9lcV9vcHJzICh1c2VkIGJ5IHRoZSBmYXN0IHBhdGgpIGNhbiBi ZSBjcm9zcy10eXBlIHdoZW4gdGhlIEZLCisJCSAqIGFuZCBQSyBjb2x1bW5zIGRpZmZlciBpbiB0 eXBlLCBlLmcuIGludDQ4ZXEgZm9yIGludDQgUEsgLyBpbnQ4IEZLLgorCQkgKiBJZiB0aGUgRksg Y29sdW1uJ3MgdHlwZSBhbHJlYWR5IG1hdGNoZXMgd2hhdCB0aGUgb3BlcmF0b3IgZXhwZWN0cwor CQkgKiBhcyBpdHMgcmlnaHQtaGFuZCBpbnB1dCwgbm8gY2FzdCBpcyBuZWVkZWQuCisJCSAqLwor CQlpZiAodHlwZWlkID09IHJpZ2h0dHlwZSkKIAkJCWNhc3RmdW5jID0gSW52YWxpZE9pZDsJLyog c2ltcGxlc3QgY2FzZSAqLwogCQllbHNlCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xh dGlvbi9leHBlY3RlZC9may1jb25jdXJyZW50LXBrLXVwZC5vdXQgYi9zcmMvdGVzdC9pc29sYXRp b24vZXhwZWN0ZWQvZmstY29uY3VycmVudC1way11cGQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi40ZGQ5NTM1ZDNjMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1jb25jdXJyZW50LXBrLXVwZC5vdXQKQEAgLTAsMCAr MSwxMDUgQEAKK1BhcnNlZCB0ZXN0IHNwZWMgd2l0aCAzIHNlc3Npb25zCisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBzMmIgczJ1a2V5IHMxYiBzMWkgczJjIHMxYyBzMnMgczFzCitzdGVwIHMyYjog QkVHSU47CitzdGVwIHMydWtleTogVVBEQVRFIHBhcmVudCBTRVQgcGFyZW50X2tleSA9IDIgV0hF UkUgcGFyZW50X2tleSA9IDE7CitzdGVwIHMxYjogQkVHSU47CitzdGVwIHMxaTogSU5TRVJUIElO VE8gY2hpbGQgVkFMVUVTICgxLCAxKTsgPHdhaXRpbmcgLi4uPgorc3RlcCBzMmM6IENPTU1JVDsK K3N0ZXAgczFpOiA8Li4uIGNvbXBsZXRlZD4KK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0 YWJsZSAiY2hpbGQiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImNoaWxkX3BhcmVu dF9rZXlfZmtleSIKK3N0ZXAgczFjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICogRlJPTSBw YXJlbnQ7CitwYXJlbnRfa2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDJ8Zm9vCiso MSByb3cpCisKK3N0ZXAgczFzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5fHBhcmVu dF9rZXkKKy0tLS0tLS0tLSstLS0tLS0tLS0tCisoMCByb3dzKQorCisKK3N0YXJ0aW5nIHBlcm11 dGF0aW9uOiBzMmIgczJ1YXV4IHMxYiBzMWkgczJjIHMxYyBzMnMgczFzCitzdGVwIHMyYjogQkVH SU47CitzdGVwIHMydWF1eDogVVBEQVRFIHBhcmVudCBTRVQgYXV4ID0gJ2JhcicgV0hFUkUgcGFy ZW50X2tleSA9IDE7CitzdGVwIHMxYjogQkVHSU47CitzdGVwIHMxaTogSU5TRVJUIElOVE8gY2hp bGQgVkFMVUVTICgxLCAxKTsKK3N0ZXAgczJjOiBDT01NSVQ7CitzdGVwIHMxYzogQ09NTUlUOwor c3RlcCBzMnM6IFNFTEVDVCAqIEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgKKy0tLS0tLS0t LS0rLS0tCisgICAgICAgICAxfGJhcgorKDEgcm93KQorCitzdGVwIHMxczogU0VMRUNUICogRlJP TSBjaGlsZDsKK2NoaWxkX2tleXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0tLS0tLQorICAg ICAgICAxfCAgICAgICAgIDEKKygxIHJvdykKKworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczJi IHMydWtleSBzMWIgczFpIHMydWtleTIgczJjIHMxYyBzMnMgczFzCitzdGVwIHMyYjogQkVHSU47 CitzdGVwIHMydWtleTogVVBEQVRFIHBhcmVudCBTRVQgcGFyZW50X2tleSA9IDIgV0hFUkUgcGFy ZW50X2tleSA9IDE7CitzdGVwIHMxYjogQkVHSU47CitzdGVwIHMxaTogSU5TRVJUIElOVE8gY2hp bGQgVkFMVUVTICgxLCAxKTsgPHdhaXRpbmcgLi4uPgorc3RlcCBzMnVrZXkyOiBVUERBVEUgcGFy ZW50IFNFVCBwYXJlbnRfa2V5ID0gMSBXSEVSRSBwYXJlbnRfa2V5ID0gMjsKK3N0ZXAgczJjOiBD T01NSVQ7CitzdGVwIHMxaTogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIHMxYzogQ09NTUlUOworc3Rl cCBzMnM6IFNFTEVDVCAqIEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgKKy0tLS0tLS0tLS0r LS0tCisgICAgICAgICAxfGZvbworKDEgcm93KQorCitzdGVwIHMxczogU0VMRUNUICogRlJPTSBj aGlsZDsKK2NoaWxkX2tleXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAg ICAxfCAgICAgICAgIDEKKygxIHJvdykKKworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczJiIHMy dWtleSBzM2IgczNpIHMyYyBzM2MgczJzIHMzcworc3RlcCBzMmI6IEJFR0lOOworc3RlcCBzMnVr ZXk6IFVQREFURSBwYXJlbnQgU0VUIHBhcmVudF9rZXkgPSAyIFdIRVJFIHBhcmVudF9rZXkgPSAx Oworc3RlcCBzM2I6IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVw IHMzaTogSU5TRVJUIElOVE8gY2hpbGQgVkFMVUVTICgyLCAxKTsgPHdhaXRpbmcgLi4uPgorc3Rl cCBzMmM6IENPTU1JVDsKK3N0ZXAgczNpOiA8Li4uIGNvbXBsZXRlZD4KK0VSUk9SOiAgY291bGQg bm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRvIGNvbmN1cnJlbnQgdXBkYXRlCitzdGVwIHMzYzog Q09NTUlUOworc3RlcCBzMnM6IFNFTEVDVCAqIEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgK Ky0tLS0tLS0tLS0rLS0tCisgICAgICAgICAyfGZvbworKDEgcm93KQorCitzdGVwIHMzczogU0VM RUNUICogRlJPTSBjaGlsZDsKK2NoaWxkX2tleXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0t LS0tLQorKDAgcm93cykKKworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczJiIHMydWF1eCBzM2Ig czNpIHMyYyBzM2MgczJzIHMzcworc3RlcCBzMmI6IEJFR0lOOworc3RlcCBzMnVhdXg6IFVQREFU RSBwYXJlbnQgU0VUIGF1eCA9ICdiYXInIFdIRVJFIHBhcmVudF9rZXkgPSAxOworc3RlcCBzM2I6 IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVwIHMzaTogSU5TRVJU IElOVE8gY2hpbGQgVkFMVUVTICgyLCAxKTsKK3N0ZXAgczJjOiBDT01NSVQ7CitzdGVwIHMzYzog Q09NTUlUOworc3RlcCBzMnM6IFNFTEVDVCAqIEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgK Ky0tLS0tLS0tLS0rLS0tCisgICAgICAgICAxfGJhcgorKDEgcm93KQorCitzdGVwIHMzczogU0VM RUNUICogRlJPTSBjaGlsZDsKK2NoaWxkX2tleXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0t LS0tLQorICAgICAgICAyfCAgICAgICAgIDEKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZSBiL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29s YXRpb25fc2NoZWR1bGUKaW5kZXggNGU0NjY1ODBjZDQuLmMxYTk5OWJmMWQyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L2lz b2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUKQEAgLTM3LDYgKzM3LDcgQEAgdGVzdDogZmstcGFy dGl0aW9uZWQtMgogdGVzdDogZmstc25hcHNob3QKIHRlc3Q6IGZrLXNuYXBzaG90LTIKIHRlc3Q6 IGZrLXNuYXBzaG90LTMKK3Rlc3Q6IGZrLWNvbmN1cnJlbnQtcGstdXBkCiB0ZXN0OiBzdWJ4aWQt b3ZlcmZsb3cKIHRlc3Q6IGV2YWwtcGxhbi1xdWFsCiB0ZXN0OiBldmFsLXBsYW4tcXVhbC10cmln Z2VyCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvZmstY29uY3VycmVudC1w ay11cGQuc3BlYyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9may1jb25jdXJyZW50LXBrLXVw ZC5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wM2RjN2YyNjBj ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9may1jb25jdXJy ZW50LXBrLXVwZC5zcGVjCkBAIC0wLDAgKzEsNTMgQEAKKyMgVGVzdHMgdGhhdCBhbiBJTlNFUlQg b24gcmVmZXJlbmNpbmcgdGFibGUgY29ycmVjdGx5IGZhaWxzIHdoZW4KKyMgdGhlIHJlZmVyZW5j ZWQgdmFsdWUgZGlzYXBwZWFycyBkdWUgdG8gYSBjb25jdXJyZW50IHVwZGF0ZQorc2V0dXAKK3sK KyAgQ1JFQVRFIFRBQkxFIHBhcmVudCAoCisgICAgcGFyZW50X2tleSBpbnQgUFJJTUFSWSBLRVks CisgICAgYXV4ICAgdGV4dCBOT1QgTlVMTAorICApOworCisgIENSRUFURSBUQUJMRSBjaGlsZCAo CisgICAgY2hpbGRfa2V5IGludCBQUklNQVJZIEtFWSwKKyAgICBwYXJlbnRfa2V5IGludDggTk9U IE5VTEwgUkVGRVJFTkNFUyBwYXJlbnQKKyAgKTsKKworICBJTlNFUlQgSU5UTyBwYXJlbnQgVkFM VUVTICgxLCAnZm9vJyk7Cit9CisKK3RlYXJkb3duCit7CisgIERST1AgVEFCTEUgcGFyZW50LCBj aGlsZDsKK30KKworc2Vzc2lvbiBzMQorc3RlcCBzMWIgIHsgQkVHSU47IH0KK3N0ZXAgczFpIHsg SU5TRVJUIElOVE8gY2hpbGQgVkFMVUVTICgxLCAxKTsgfQorc3RlcCBzMWMgeyBDT01NSVQ7IH0K K3N0ZXAgczFzIHsgU0VMRUNUICogRlJPTSBjaGlsZDsgfQorCitzZXNzaW9uIHMyCitzdGVwIHMy YiAgeyBCRUdJTjsgfQorc3RlcCBzMnVrZXkgeyBVUERBVEUgcGFyZW50IFNFVCBwYXJlbnRfa2V5 ID0gMiBXSEVSRSBwYXJlbnRfa2V5ID0gMTsgfQorc3RlcCBzMnVhdXggeyBVUERBVEUgcGFyZW50 IFNFVCBhdXggPSAnYmFyJyBXSEVSRSBwYXJlbnRfa2V5ID0gMTsgfQorc3RlcCBzMnVrZXkyIHsg VVBEQVRFIHBhcmVudCBTRVQgcGFyZW50X2tleSA9IDEgV0hFUkUgcGFyZW50X2tleSA9IDI7IH0K K3N0ZXAgczJjIHsgQ09NTUlUOyB9CitzdGVwIHMycyB7IFNFTEVDVCAqIEZST00gcGFyZW50OyB9 CisKK3Nlc3Npb24gczMKK3N0ZXAgczNiIHsgQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFC TEUgUkVBRDsgfQorc3RlcCBzM2kgeyBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDIsIDEpOyB9 CitzdGVwIHMzYyB7IENPTU1JVDsgfQorc3RlcCBzM3MgeyBTRUxFQ1QgKiBGUk9NIGNoaWxkOyB9 CisKKyMgZmFpbAorcGVybXV0YXRpb24gczJiIHMydWtleSBzMWIgczFpIHMyYyBzMWMgczJzIHMx cworIyBvaworcGVybXV0YXRpb24gczJiIHMydWF1eCBzMWIgczFpIHMyYyBzMWMgczJzIHMxcwor IyBvaworcGVybXV0YXRpb24gczJiIHMydWtleSBzMWIgczFpIHMydWtleTIgczJjIHMxYyBzMnMg czFzCisKKyMgUlI6IGtleSB1cGRhdGUgLT4gc2VyaWFsaXphdGlvbiBmYWlsdXJlCitwZXJtdXRh dGlvbiBzMmIgczJ1a2V5IHMzYiBzM2kgczJjIHMzYyBzMnMgczNzCisjIFJSOiBub24ta2V5IHVw ZGF0ZSAtPiBvbGQgdmVyc2lvbiB2aXNpYmxlIHZpYSB0cmFuc2FjdGlvbiBzbmFwc2hvdAorcGVy bXV0YXRpb24gczJiIHMydWF1eCBzM2IgczNpIHMyYyBzM2MgczJzIHMzcwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dAppbmRleCA5YWU0ZGJmMWIwYS4uMDgyNmY1MTgw MDQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CkBAIC0zNzAs NiArMzcwLDUzIEBAIFNFTEVDVCAqIEZST00gUEtUQUJMRTsKIERST1AgVEFCTEUgRktUQUJMRTsK IERST1AgVEFCTEUgUEtUQUJMRTsKIC0tCistLSBDaGVjayBSTFMKKy0tCitDUkVBVEUgVEFCTEUg UEtUQUJMRSAoIHB0ZXN0MSBpbnQgUFJJTUFSWSBLRVksIHB0ZXN0MiB0ZXh0ICk7CitDUkVBVEUg VEFCTEUgRktUQUJMRSAoIGZ0ZXN0MSBpbnQgUkVGRVJFTkNFUyBQS1RBQkxFLCBmdGVzdDIgaW50 ICk7CistLSBJbnNlcnQgdGVzdCBkYXRhIGludG8gUEtUQUJMRQorSU5TRVJUIElOVE8gUEtUQUJM RSBWQUxVRVMgKDEsICdUZXN0MScpOworSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDIsICdU ZXN0MicpOworSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDMsICdUZXN0MycpOworLS0gR3Jh bnQgcHJpdmlsZWdlcyBvbiBQS1RBQkxFL0ZLVEFCTEUgdG8gdXNlciByZWdyZXNzX2ZvcmVpZ25f a2V5X3VzZXIKK0NSRUFURSBVU0VSIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlciBOT0xPR0lOOwor R1JBTlQgU0VMRUNUIE9OIFBLVEFCTEUgVE8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOworR1JB TlQgU0VMRUNULCBJTlNFUlQgT04gRktUQUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7 CistLSBFbmFibGUgUkxTIG9uIFBLVEFCTEUgYW5kIENyZWF0ZSBwb2xpY2llcworQUxURVIgVEFC TEUgUEtUQUJMRSBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworQ1JFQVRFIFBPTElDWSBwa3Rh YmxlX3ZpZXdfb2RkX3BvbGljeSBPTiBQS1RBQkxFIFRPIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNl ciBVU0lORyAocHRlc3QxICUgMiA9IDEpOworQUxURVIgVEFCTEUgUEtUQUJMRSBPV05FUiB0byBy ZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CitTRVQgUk9MRSByZWdyZXNzX2ZvcmVpZ25fa2V5X3Vz ZXI7CitJTlNFUlQgSU5UTyBGS1RBQkxFIFZBTFVFUyAoMywgNSk7CitJTlNFUlQgSU5UTyBGS1RB QkxFIFZBTFVFUyAoMiwgNSk7IC0tIHN1Y2Nlc3MsIFJFRkVSRU5DRVMgYXJlIG5vdCBzdWJqZWN0 IHRvIHJvdyBzZWN1cml0eQorUkVTRVQgUk9MRTsKK0RST1AgVEFCTEUgRktUQUJMRTsKK0RST1Ag VEFCTEUgUEtUQUJMRTsKK0RST1AgVVNFUiByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CistLQor LS0gQ2hlY2sgQUNMCistLQorQ1JFQVRFIFRBQkxFIFBLVEFCTEUgKCBwdGVzdDEgaW50IFBSSU1B UlkgS0VZLCBwdGVzdDIgdGV4dCApOworQ1JFQVRFIFRBQkxFIEZLVEFCTEUgKCBmdGVzdDEgaW50 IFJFRkVSRU5DRVMgUEtUQUJMRSwgZnRlc3QyIGludCApOworLS0gSW5zZXJ0IHRlc3QgZGF0YSBp bnRvIFBLVEFCTEUKK0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgxLCAnVGVzdDEnKTsKK0lO U0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgyLCAnVGVzdDInKTsKK0lOU0VSVCBJTlRPIFBLVEFC TEUgVkFMVUVTICgzLCAnVGVzdDMnKTsKKy0tIEdyYW50IHVzYWdlIG9uIFBLVEFCTEUgdG8gdXNl ciByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXIKK0NSRUFURSBVU0VSIHJlZ3Jlc3NfZm9yZWlnbl9r ZXlfdXNlciBOT0xPR0lOOworR1JBTlQgU0VMRUNUIE9OIFBLVEFCTEUgVE8gcmVncmVzc19mb3Jl aWduX2tleV91c2VyOworQUxURVIgVEFCTEUgUEtUQUJMRSBPV05FUiB0byByZWdyZXNzX2ZvcmVp Z25fa2V5X3VzZXI7CistLSBJbnNlcnRpbmcgaW50byBGS1RBQkxFIHNob3VsZCB3b3JrCitJTlNF UlQgSU5UTyBGS1RBQkxFIFZBTFVFUyAoMywgNSk7CistLSBSZXZva2UgdXNhZ2Ugb24gUEtUQUJM RSBmcm9tIHVzZXIgcmVncmVzc19mb3JlaWduX2tleV91c2VyCitSRVZPS0UgU0VMRUNUIE9OIFBL VEFCTEUgRlJPTSByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CistLSBJbnNlcnRpbmcgaW50byBG S1RBQkxFIHNob3VsZCBmYWlsCitJTlNFUlQgSU5UTyBGS1RBQkxFIFZBTFVFUyAoMiwgNik7CitF UlJPUjogIHBlcm1pc3Npb24gZGVuaWVkIGZvciB0YWJsZSBwa3RhYmxlCitEUk9QIFRBQkxFIEZL VEFCTEU7CitEUk9QIFRBQkxFIFBLVEFCTEU7CitEUk9QIFVTRVIgcmVncmVzc19mb3JlaWduX2tl eV91c2VyOworLS0KIC0tIENoZWNrIGluaXRpYWwgY2hlY2sgdXBvbiBBTFRFUiBUQUJMRQogLS0K IENSRUFURSBUQUJMRSBQS1RBQkxFICggcHRlc3QxIGludCwgcHRlc3QyIGludCwgUFJJTUFSWSBL RVkocHRlc3QxLCBwdGVzdDIpICk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9m b3JlaWduX2tleS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKaW5k ZXggM2I4Yzk1YmY4OTMuLmU5ZWUyOTMzMWNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9mb3JlaWduX2tleS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9r ZXkuc3FsCkBAIC0yNDIsNiArMjQyLDcwIEBAIFNFTEVDVCAqIEZST00gUEtUQUJMRTsKIERST1Ag VEFCTEUgRktUQUJMRTsKIERST1AgVEFCTEUgUEtUQUJMRTsKIAorLS0KKy0tIENoZWNrIFJMUwor LS0KK0NSRUFURSBUQUJMRSBQS1RBQkxFICggcHRlc3QxIGludCBQUklNQVJZIEtFWSwgcHRlc3Qy IHRleHQgKTsKK0NSRUFURSBUQUJMRSBGS1RBQkxFICggZnRlc3QxIGludCBSRUZFUkVOQ0VTIFBL VEFCTEUsIGZ0ZXN0MiBpbnQgKTsKKworLS0gSW5zZXJ0IHRlc3QgZGF0YSBpbnRvIFBLVEFCTEUK K0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgxLCAnVGVzdDEnKTsKK0lOU0VSVCBJTlRPIFBL VEFCTEUgVkFMVUVTICgyLCAnVGVzdDInKTsKK0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgz LCAnVGVzdDMnKTsKKworLS0gR3JhbnQgcHJpdmlsZWdlcyBvbiBQS1RBQkxFL0ZLVEFCTEUgdG8g dXNlciByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXIKK0NSRUFURSBVU0VSIHJlZ3Jlc3NfZm9yZWln bl9rZXlfdXNlciBOT0xPR0lOOworR1JBTlQgU0VMRUNUIE9OIFBLVEFCTEUgVE8gcmVncmVzc19m b3JlaWduX2tleV91c2VyOworR1JBTlQgU0VMRUNULCBJTlNFUlQgT04gRktUQUJMRSBUTyByZWdy ZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CisKKy0tIEVuYWJsZSBSTFMgb24gUEtUQUJMRSBhbmQgQ3Jl YXRlIHBvbGljaWVzCitBTFRFUiBUQUJMRSBQS1RBQkxFIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJ VFk7CitDUkVBVEUgUE9MSUNZIHBrdGFibGVfdmlld19vZGRfcG9saWN5IE9OIFBLVEFCTEUgVE8g cmVncmVzc19mb3JlaWduX2tleV91c2VyIFVTSU5HIChwdGVzdDEgJSAyID0gMSk7CisKK0FMVEVS IFRBQkxFIFBLVEFCTEUgT1dORVIgdG8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOworCitTRVQg Uk9MRSByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CisKK0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFM VUVTICgzLCA1KTsKK0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFMVUVTICgyLCA1KTsgLS0gc3VjY2Vz cywgUkVGRVJFTkNFUyBhcmUgbm90IHN1YmplY3QgdG8gcm93IHNlY3VyaXR5CisKK1JFU0VUIFJP TEU7CisKK0RST1AgVEFCTEUgRktUQUJMRTsKK0RST1AgVEFCTEUgUEtUQUJMRTsKK0RST1AgVVNF UiByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CisKKy0tCistLSBDaGVjayBBQ0wKKy0tCitDUkVB VEUgVEFCTEUgUEtUQUJMRSAoIHB0ZXN0MSBpbnQgUFJJTUFSWSBLRVksIHB0ZXN0MiB0ZXh0ICk7 CitDUkVBVEUgVEFCTEUgRktUQUJMRSAoIGZ0ZXN0MSBpbnQgUkVGRVJFTkNFUyBQS1RBQkxFLCBm dGVzdDIgaW50ICk7CisKKy0tIEluc2VydCB0ZXN0IGRhdGEgaW50byBQS1RBQkxFCitJTlNFUlQg SU5UTyBQS1RBQkxFIFZBTFVFUyAoMSwgJ1Rlc3QxJyk7CitJTlNFUlQgSU5UTyBQS1RBQkxFIFZB TFVFUyAoMiwgJ1Rlc3QyJyk7CitJTlNFUlQgSU5UTyBQS1RBQkxFIFZBTFVFUyAoMywgJ1Rlc3Qz Jyk7CisKKy0tIEdyYW50IHVzYWdlIG9uIFBLVEFCTEUgdG8gdXNlciByZWdyZXNzX2ZvcmVpZ25f a2V5X3VzZXIKK0NSRUFURSBVU0VSIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlciBOT0xPR0lOOwor R1JBTlQgU0VMRUNUIE9OIFBLVEFCTEUgVE8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOworCitB TFRFUiBUQUJMRSBQS1RBQkxFIE9XTkVSIHRvIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKwor LS0gSW5zZXJ0aW5nIGludG8gRktUQUJMRSBzaG91bGQgd29yaworSU5TRVJUIElOVE8gRktUQUJM RSBWQUxVRVMgKDMsIDUpOworCistLSBSZXZva2UgdXNhZ2Ugb24gUEtUQUJMRSBmcm9tIHVzZXIg cmVncmVzc19mb3JlaWduX2tleV91c2VyCitSRVZPS0UgU0VMRUNUIE9OIFBLVEFCTEUgRlJPTSBy ZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CisKKy0tIEluc2VydGluZyBpbnRvIEZLVEFCTEUgc2hv dWxkIGZhaWwKK0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFMVUVTICgyLCA2KTsKKworRFJPUCBUQUJM RSBGS1RBQkxFOworRFJPUCBUQUJMRSBQS1RBQkxFOworCitEUk9QIFVTRVIgcmVncmVzc19mb3Jl aWduX2tleV91c2VyOworCiAtLQogLS0gQ2hlY2sgaW5pdGlhbCBjaGVjayB1cG9uIEFMVEVSIFRB QkxFCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlM2MxMDA3YWJkZi4uNjZjYjE4 YmE1YjkgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC04MTcsNiArODE3LDcgQEAgRXh0 ZW5zaW9uSW5mbwogRXh0ZW5zaW9uTG9jYXRpb24KIEV4dGVuc2lvblNpYmxpbmdDYWNoZQogRXh0 ZW5zaW9uVmVyc2lvbkluZm8KK0Zhc3RQYXRoTWV0YQogRkRXQ29sbGF0ZVN0YXRlCiBGRF9TRVQK IEZJTEUKLS0gCjIuNDcuMwoK --000000000000818fbb064e3bf7b9 Content-Type: application/octet-stream; name="v12-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Disposition: attachment; filename="v12-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnd3998y0 RnJvbSA5ODk5ZjZhMzRmMTY3MDI1YWM1YzRlZTExNTU4MTAzMjgwZjQ2MDhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMzAgTWFyIDIwMjYgMTc6Mzg6NTUgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MiAyLzJdIEJhdGNoIEZLIHJvd3MgYW5kIHVzZSBTS19TRUFSQ0hBUlJBWSBmb3IgZmFzdC1wYXRo IEZLCiBwcm9iZXMKCkluc3RlYWQgb2YgcHJvYmluZyB0aGUgUEsgaW5kZXggb24gZWFjaCB0cmln Z2VyIGludm9jYXRpb24sIGJ1ZmZlcgpGSyByb3dzIGluIGEgbmV3IHBlci1jb25zdHJhaW50IGNh Y2hlIGVudHJ5IChSSV9GYXN0UGF0aEVudHJ5KSBhbmQKZmx1c2ggdGhlbSBhcyBhIGJhdGNoLiAg Q29tYmluZWQgd2l0aCB0aGUgZmFzdCBwYXRoIGludHJvZHVjZWQgaW4KdGhlIHByZXZpb3VzIGNv bW1pdCwgYnVsayBGSyBpbnNlcnRzIGFyZSB+Mi45eCBmYXN0ZXIgKGludCBQSyAvCmludCBGSywg MU0gcm93cywgUEsgdGFibGUgYW5kIGluZGV4IGNhY2hlZCBpbiBtZW1vcnkpLgoKT24gZWFjaCB0 cmlnZ2VyIGludm9jYXRpb24sIHRoZSBuZXcgcmlfRmFzdFBhdGhCYXRjaEFkZCgpIGJ1ZmZlcnMK dGhlIEZLIHJvdyBpbiBSSV9GYXN0UGF0aEVudHJ5LiAgV2hlbiB0aGUgYnVmZmVyIGZpbGxzICg2 NCByb3dzKQpvciB0aGUgdHJpZ2dlci1maXJpbmcgY3ljbGUgZW5kcywgdGhlIG5ldyByaV9GYXN0 UGF0aEJhdGNoRmx1c2goKQpwcm9iZXMgdGhlIGluZGV4IGZvciBhbGwgYnVmZmVyZWQgcm93cywg c2hhcmluZyBhIHNpbmdsZQpDb21tYW5kQ291bnRlckluY3JlbWVudCwgc25hcHNob3QsIHBlcm1p c3Npb24gY2hlY2ssIGFuZCBzZWN1cml0eQpjb250ZXh0IHN3aXRjaCBhY3Jvc3MgdGhlIGJhdGNo LCByYXRoZXIgdGhhbiByZXBlYXRpbmcgZWFjaCBwZXIgcm93CmFzIHRoZSBTUEkgcGF0aCBkb2Vz LiAgUGVyLWZsdXNoIENDSSBpcyBzYWZlIGJlY2F1c2UgYWxsIEFGVEVSCnRyaWdnZXJzIGZvciB0 aGUgYnVmZmVyZWQgcm93cyBoYXZlIGFscmVhZHkgZmlyZWQgYnkgZmx1c2ggdGltZS4KCkZvciBz aW5nbGUtY29sdW1uIGZvcmVpZ24ga2V5cywgdGhlIGZsdXNoIGJ1aWxkcyBhbiBBcnJheVR5cGUg ZnJvbQp0aGUgYnVmZmVyZWQgRksgdmFsdWVzIChjYXN0aW5nIHRvIHRoZSBQSy1zaWRlIHR5cGUg aWYgbmVlZGVkKSBhbmQKY29uc3RydWN0cyBhIHNjYW4ga2V5IHdpdGggdGhlIFNLX1NFQVJDSEFS UkFZIGZsYWcuICBUaGUgaW5kZXggQU0Kc29ydHMgYW5kIGRlZHVwbGljYXRlcyB0aGUgYXJyYXkg aW50ZXJuYWxseSwgdGhlbiB3YWxrcyBtYXRjaGluZwpsZWFmIHBhZ2VzIGluIG9uZSBvcmRlcmVk IHRyYXZlcnNhbCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgZnJvbSB0aGUKcm9vdCBvbmNlIHBlciBy b3cuICBBIG1hdGNoZWRbXSBiaXRtYXAgdHJhY2tzIHdoaWNoIGJhdGNoIGl0ZW1zCndlcmUgc2F0 aXNmaWVkOyB0aGUgZmlyc3QgdW5tYXRjaGVkIGl0ZW0gaXMgcmVwb3J0ZWQgYXMgYQp2aW9sYXRp b24uICBNdWx0aS1jb2x1bW4gZm9yZWlnbiBrZXlzIGZhbGwgYmFjayB0byBwZXItcm93IHByb2Jp bmcKdmlhIHRoZSBuZXcgcmlfRmFzdFBhdGhGbHVzaExvb3AoKS4KCkZLIHR1cGxlcyBhcmUgbWF0 ZXJpYWxpemVkIHZpYSBFeGVjQ29weVNsb3RIZWFwVHVwbGUoKSBpbnRvIGEgbmV3CnB1cnBvc2Ut c3BlY2lmaWMgbWVtb3J5IGNvbnRleHQgKGZsdXNoX2N4dCksIGNoaWxkIG9mClRvcFRyYW5zYWN0 aW9uQ29udGV4dCwgd2hpY2ggaXMgYWxzbyB1c2VkIGZvciBwZXItZmx1c2ggdHJhbnNpZW50Cndv cms6IGNhc3QgcmVzdWx0cywgdGhlIHNlYXJjaCBhcnJheSwgYW5kIGluZGV4IHNjYW4gYWxsb2Nh dGlvbnMuCkl0IGlzIHJlc2V0IGFmdGVyIGVhY2ggZmx1c2ggYW5kIGRlbGV0ZWQgaW4gdGVhcmRv d24uCgpUaGUgUEsgcmVsYXRpb24sIGluZGV4LCB0dXBsZSBzbG90cywgYW5kIGZhc3QtcGF0aCBt ZXRhZGF0YSBhcmUKY2FjaGVkIGluIFJJX0Zhc3RQYXRoRW50cnkgYWNyb3NzIHRyaWdnZXIgaW52 b2NhdGlvbnMgd2l0aGluIGEKdHJpZ2dlci1maXJpbmcgYmF0Y2gsIGF2b2lkaW5nIHJlcGVhdGVk IG9wZW4vY2xvc2Ugb3ZlcmhlYWQuICBUaGUKc25hcHNob3QgYW5kIEluZGV4U2NhbkRlc2MgYXJl IHRha2VuIGZyZXNoIHBlciBmbHVzaC4KCnJpX0Zhc3RQYXRoRW5kQmF0Y2goKSBmbHVzaGVzIGFu eSBwYXJ0aWFsIGJhdGNoIGJlZm9yZSB0ZWFyaW5nCmRvd24gY2FjaGVkIHJlc291cmNlcy4gIFNp bmNlIHRoZSBGSyByZWxhdGlvbiBtYXkgYWxyZWFkeSBiZQpjbG9zZWQgYnkgZmx1c2ggdGltZSAo ZS5nLiBmb3IgZGVmZXJyZWQgY29uc3RyYWludHMgYXQgQ09NTUlUKSwKaXQgcmVvcGVucyB0aGUg cmVsYXRpb24gdXNpbmcgZW50cnktPnJpaW5mby0+ZmtfcmVsaWQgaWYgbmVlZGVkLgoKVGhlIGV4 aXN0aW5nIEFMVEVSIFRBQkxFIHZhbGlkYXRpb24gcGF0aCBieXBhc3NlcyBiYXRjaGluZyBhbmQK Y29udGludWVzIHRvIGNhbGwgcmlfRmFzdFBhdGhDaGVjaygpIGRpcmVjdGx5IHBlciByb3cuCgpM aWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgUklfRmFzdFBhdGhFbnRyeSByZWxpZXMgb24gdGhyZWUg bmV3Cm1lY2hhbmlzbXM6CgogIC0gQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjazogQSBuZXcgZ2Vu ZXJhbC1wdXJwb3NlIGNhbGxiYWNrCiAgICBtZWNoYW5pc20gaW4gdHJpZ2dlci5jLiAgQ2FsbGJh Y2tzIHJlZ2lzdGVyZWQgdmlhCiAgICBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2so KSBmaXJlIGF0IHRoZSBlbmQgb2YgZWFjaAogICAgdHJpZ2dlci1maXJpbmcgYmF0Y2ggKEFmdGVy VHJpZ2dlckVuZFF1ZXJ5IGZvciBpbW1lZGlhdGUKICAgIGNvbnN0cmFpbnRzLCBBZnRlclRyaWdn ZXJGaXJlRGVmZXJyZWQgYXQgQ09NTUlULCBhbmQKICAgIEFmdGVyVHJpZ2dlclNldFN0YXRlIGZv ciBTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFKS4gIFRoZSBSSQogICAgY29kZSByZWdpc3RlcnMg cmlfRmFzdFBhdGhFbmRCYXRjaCBhcyBhIGJhdGNoIGNhbGxiYWNrLgoKICAtIEJhdGNoIGNhbGxi YWNrcyBvbmx5IGZpcmUgYXQgdGhlIG91dGVybW9zdCBxdWVyeSBsZXZlbAogICAgKGNoZWNrZWQg aW5zaWRlIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyksIHNvIG5lc3RlZAogICAgcXVl cmllcyBmcm9tIFNQSSBpbnNpZGUgb3RoZXIgQUZURVIgdHJpZ2dlcnMgZG8gbm90IHRlYXIgZG93 bgogICAgdGhlIGNhY2hlIG1pZC1iYXRjaC4KCiAgLSBYYWN0Q2FsbGJhY2s6IHJpX0Zhc3RQYXRo WGFjdENhbGxiYWNrIE5VTExzIHRoZSBzdGF0aWMgY2FjaGUKICAgIHBvaW50ZXIgYXQgdHJhbnNh Y3Rpb24gZW5kLCBoYW5kbGluZyB0aGUgYWJvcnQgcGF0aCB3aGVyZSB0aGUKICAgIGJhdGNoIGNh bGxiYWNrIG5ldmVyIGZpcmVkLgoKICAtIFN1YlhhY3RDYWxsYmFjazogcmlfRmFzdFBhdGhTdWJY YWN0Q2FsbGJhY2sgTlVMTHMgdGhlIHN0YXRpYwogICAgY2FjaGUgcG9pbnRlciBvbiBzdWJ0cmFu c2FjdGlvbiBhYm9ydCwgcHJldmVudGluZyB0aGUgYmF0Y2gKICAgIGNhbGxiYWNrIGZyb20gYWNj ZXNzaW5nIGFscmVhZHktcmVsZWFzZWQgcmVzb3VyY2VzLgoKICAtIEFmdGVyVHJpZ2dlckJhdGNo SXNBY3RpdmUoKTogQSBuZXcgZXhwb3J0ZWQgYWNjZXNzb3IgdGhhdAogICAgcmV0dXJucyB0cnVl IHdoZW4gYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA+PSAwLiAgRHVyaW5nCiAgICBBTFRFUiBU QUJMRSAuLi4gQUREIEZPUkVJR04gS0VZIHZhbGlkYXRpb24sIFJJIHRyaWdnZXJzIGFyZQogICAg Y2FsbGVkIGRpcmVjdGx5IG91dHNpZGUgdGhlIGFmdGVyLXRyaWdnZXIgZnJhbWV3b3JrLCBzbyBi YXRjaAogICAgY2FsbGJhY2tzIHdvdWxkIG5ldmVyIGZpcmUuICBUaGUgZmFzdC1wYXRoIGNvZGUg dXNlcyB0aGlzIHRvCiAgICBmYWxsIGJhY2sgdG8gdGhlIG5vbi1jYWNoZWQgcGVyLWludm9jYXRp b24gcGF0aCBpbiB0aGF0CiAgICBjb250ZXh0LgoKQXV0aG9yOiBBbWl0IExhbmdvdGUgPGFtaXRs YW5nb3RlMDlAZ21haWwuY29tPgpDby1hdXRob3JlZC1ieTogSnVud2FuZyBaaGFvIDx6aGp3cGt1 QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29t PgpUZXN0ZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FGNEMwd3MzY08rejVjTGtQdXZ3bkF3a1NwN3NmdmdH ajN5UT1MaTZLTk1xQUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3Ry aWdnZXIuYyAgICAgICAgICAgIHwgMTA1ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90 cmlnZ2Vycy5jICAgICAgIHwgNTk3ICsrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRl L2NvbW1hbmRzL3RyaWdnZXIuaCAgICAgICAgICAgIHwgIDE4ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0IHwgMTI2ICsrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9mb3JlaWduX2tleS5zcWwgICAgICB8IDExOCArKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgICAgICAgICAgfCAgIDMgKwogNiBmaWxlcyBjaGFuZ2VkLCA5NjMgaW5zZXJ0 aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKaW5kZXggNjU5Njg0 M2E4ZDguLjRiYzMxY2FiZmYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmln Z2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCkBAIC0zODkzLDYgKzM4 OTMsOCBAQCB0eXBlZGVmIHN0cnVjdCBBZnRlclRyaWdnZXJzRGF0YQogCS8qIHBlci1zdWJ0cmFu c2FjdGlvbi1sZXZlbCBkYXRhOiAqLwogCUFmdGVyVHJpZ2dlcnNUcmFuc0RhdGEgKnRyYW5zX3N0 YWNrOwkvKiBhcnJheSBvZiBzdHJ1Y3RzIHNob3duIGJlbG93ICovCiAJaW50CQkJbWF4dHJhbnNk ZXB0aDsJLyogYWxsb2NhdGVkIGxlbiBvZiBhYm92ZSBhcnJheSAqLworCisJTGlzdAkgICAqYmF0 Y2hfY2FsbGJhY2tzOwkvKiBMaXN0IG9mIEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqLwogfSBB ZnRlclRyaWdnZXJzRGF0YTsKIAogc3RydWN0IEFmdGVyVHJpZ2dlcnNRdWVyeURhdGEKQEAgLTM5 MjksNiArMzkzMSwxMyBAQCBzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YQogCVR1cGxlVGFi bGVTbG90ICpzdG9yZXNsb3Q7CS8qIGZvciBjb252ZXJ0aW5nIHRvIHR1cGxlc3RvcmUncyBmb3Jt YXQgKi8KIH07CiAKKy8qIEVudHJ5IGluIGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzICov Cit0eXBlZGVmIHN0cnVjdCBBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0KK3sKKwlBZnRlclRyaWdn ZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrOworCXZvaWQJICAgKmFyZzsKK30gQWZ0ZXJUcmlnZ2Vy Q2FsbGJhY2tJdGVtOworCiBzdGF0aWMgQWZ0ZXJUcmlnZ2Vyc0RhdGEgYWZ0ZXJUcmlnZ2VyczsK IAogc3RhdGljIHZvaWQgQWZ0ZXJUcmlnZ2VyRXhlY3V0ZShFU3RhdGUgKmVzdGF0ZSwKQEAgLTM5 NjQsNiArMzk3Myw3IEBAIHN0YXRpYyBTZXRDb25zdHJhaW50U3RhdGUgU2V0Q29uc3RyYWludFN0 YXRlQWRkSXRlbShTZXRDb25zdHJhaW50U3RhdGUgc3RhdGUsCiAJCQkJCQkJCQkJCQkJT2lkIHRn b2lkLCBib29sIHRnaXNkZWZlcnJlZCk7CiBzdGF0aWMgdm9pZCBjYW5jZWxfcHJpb3Jfc3RtdF90 cmlnZ2VycyhPaWQgcmVsaWQsIENtZFR5cGUgY21kVHlwZSwgaW50IHRnZXZlbnQpOwogCitzdGF0 aWMgdm9pZCBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3Modm9pZCk7CiAKIC8qCiAgKiBH ZXQgdGhlIEZEVyB0dXBsZXN0b3JlIGZvciB0aGUgY3VycmVudCB0cmlnZ2VyIHF1ZXJ5IGxldmVs LCBjcmVhdGluZyBpdApAQCAtNTA4OSw2ICs1MDk5LDcgQEAgQWZ0ZXJUcmlnZ2VyQmVnaW5YYWN0 KHZvaWQpCiAJICovCiAJYWZ0ZXJUcmlnZ2Vycy5maXJpbmdfY291bnRlciA9IChDb21tYW5kSWQp IDE7CS8qIG11c3RuJ3QgYmUgMCAqLwogCWFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPSAtMTsK KwlhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyA9IE5JTDsKIAogCS8qCiAJICogVmVyaWZ5 IHRoYXQgdGhlcmUgaXMgbm8gbGVmdG92ZXIgc3RhdGUgcmVtYWluaW5nLiAgSWYgdGhlc2UgYXNz ZXJ0aW9ucwpAQCAtNTIxMCw2ICs1MjIxLDE1IEBAIEFmdGVyVHJpZ2dlckVuZFF1ZXJ5KEVTdGF0 ZSAqZXN0YXRlKQogCQkJYnJlYWs7CiAJfQogCisJLyoKKwkgKiBGaXJlIGJhdGNoIGNhbGxiYWNr cyBiZWZvcmUgcmVsZWFzaW5nIHF1ZXJ5LWxldmVsIHN0b3JhZ2UgYW5kIGJlZm9yZQorCSAqIGRl Y3JlbWVudGluZyBxdWVyeV9kZXB0aC4gIENhbGxiYWNrcyBtYXkgZG8gcmVhbCB3b3JrIChpbmRl eCBwcm9iZXMsCisJICogZXJyb3IgcmVwb3J0aW5nKSBhbmQgcmVseSBvbiBxdWVyeV9kZXB0aCBz dGlsbCByZWZsZWN0aW5nIHRoZSBjdXJyZW50CisJICogYmF0Y2ggbGV2ZWwgc28gdGhhdCBuZXN0 ZWQgY2FsbHMgZnJvbSBTUEkgaW5zaWRlIEFGVEVSIHRyaWdnZXJzIGFyZQorCSAqIGNvcnJlY3Rs eSBzdXBwcmVzc2VkIGJ5IEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcydzIGRlcHRoIGd1 YXJkLgorCSAqLworCUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygpOworCiAJLyogUmVs ZWFzZSBxdWVyeS1sZXZlbC1sb2NhbCBzdG9yYWdlLCBpbmNsdWRpbmcgdHVwbGVzdG9yZXMgaWYg YW55ICovCiAJQWZ0ZXJUcmlnZ2VyRnJlZVF1ZXJ5KCZhZnRlclRyaWdnZXJzLnF1ZXJ5X3N0YWNr W2FmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGhdKTsKIApAQCAtNTMxNyw2ICs1MzM3LDkgQEAgQWZ0 ZXJUcmlnZ2VyRmlyZURlZmVycmVkKHZvaWQpCiAJCQlicmVhazsJCQkJLyogYWxsIGZpcmVkICov CiAJfQogCisJLyogRmx1c2ggYW55IGZhc3QtcGF0aCBiYXRjaGVzIGFjY3VtdWxhdGVkIGJ5IHRo ZSB0cmlnZ2VycyBqdXN0IGZpcmVkLiAqLworCUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNr cygpOworCiAJLyoKIAkgKiBXZSBkb24ndCBib3RoZXIgZnJlZWluZyB0aGUgZXZlbnQgbGlzdCwg c2luY2UgaXQgd2lsbCBnbyBhd2F5IGFueXdheQogCSAqIChhbmQgbW9yZSBlZmZpY2llbnRseSB0 aGFuIHZpYSBwZnJlZSkgaW4gQWZ0ZXJUcmlnZ2VyRW5kWGFjdC4KQEAgLTYwNTksNiArNjA4Miwx MSBAQCBBZnRlclRyaWdnZXJTZXRTdGF0ZShDb25zdHJhaW50c1NldFN0bXQgKnN0bXQpCiAJCQkJ YnJlYWs7CQkJLyogYWxsIGZpcmVkICovCiAJCX0KIAorCQkvKgorCQkgKiBGbHVzaCBhbnkgZmFz dC1wYXRoIGJhdGNoZXMgYWNjdW11bGF0ZWQgYnkgdGhlIHRyaWdnZXJzIGp1c3QgZmlyZWQuCisJ CSAqLworCQlGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoKTsKKwogCQlpZiAoc25hcHNo b3Rfc2V0KQogCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAl9CkBAIC02NzU1LDMgKzY3ODMsODAg QEAgY2hlY2tfbW9kaWZpZWRfdmlydHVhbF9nZW5lcmF0ZWQoVHVwbGVEZXNjIHR1cGRlc2MsIEhl YXBUdXBsZSB0dXBsZSkKIAogCXJldHVybiB0dXBsZTsKIH0KKworLyoKKyAqIFJlZ2lzdGVyQWZ0 ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjaworICoJCVJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2Fs bGVkIHdoZW4gdGhlIGN1cnJlbnQgdHJpZ2dlci1maXJpbmcKKyAqCQliYXRjaCBjb21wbGV0ZXMu CisgKgorICogTXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyIGZ1bmN0aW9uJ3Mg ZXhlY3V0aW9uIGNvbnRleHQKKyAqIChpLmUuLCB3aGlsZSBhZnRlclRyaWdnZXJzIHN0YXRlIGlz IGFjdGl2ZSkuCisgKgorICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgY2xlYXJlZCBhZnRlciBpbnZv Y2F0aW9uLCBzbyB0aGUgY2FsbGVyIG11c3QKKyAqIHJlLXJlZ2lzdGVyIGZvciBlYWNoIG5ldyBi YXRjaCBpZiBuZWVkZWQuCisgKi8KK3ZvaWQKK1JlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxs YmFjayhBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkgIHZvaWQg KmFyZykKK3sKKwlBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0gKml0ZW07CisJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CisKKwkvKgorCSAqIEFsbG9jYXRlIGluIFRvcFRyYW5zYWN0aW9uQ29udGV4dCBz byB0aGUgaXRlbSBzdXJ2aXZlcyBmb3IgdGhlIGR1cmF0aW9uCisJICogb2YgdGhlIGJhdGNoLCB3 aGljaCBtYXkgc3BhbiBtdWx0aXBsZSB0cmlnZ2VyIGludm9jYXRpb25zLgorCSAqCisJICogTXVz dCBiZSBjYWxsZWQgd2hpbGUgYWZ0ZXJUcmlnZ2VycyBpcyBhY3RpdmUgKHF1ZXJ5X2RlcHRoID49 IDApOworCSAqIGNhbGxiYWNrcyByZWdpc3RlcmVkIG91dHNpZGUgYSB0cmlnZ2VyLWZpcmluZyBj b250ZXh0IHdvdWxkIG5ldmVyIGZpcmUuCisJICovCisJQXNzZXJ0KGFmdGVyVHJpZ2dlcnMucXVl cnlfZGVwdGggPj0gMCk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRyYW5z YWN0aW9uQ29udGV4dCk7CisJaXRlbSA9IHBhbGxvYyhzaXplb2YoQWZ0ZXJUcmlnZ2VyQ2FsbGJh Y2tJdGVtKSk7CisJaXRlbS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwlpdGVtLT5hcmcgPSBhcmc7 CisJYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MgPQorCQlsYXBwZW5kKGFmdGVyVHJpZ2dl cnMuYmF0Y2hfY2FsbGJhY2tzLCBpdGVtKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0 KTsKK30KKworLyoKKyAqIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcworICoJCUludm9r ZSBhbmQgY2xlYXIgYWxsIHJlZ2lzdGVyZWQgYmF0Y2ggY2FsbGJhY2tzLgorICoKKyAqIE9ubHkg ZmlyZXMgYXQgdGhlIG91dGVybW9zdCBxdWVyeSBsZXZlbCAocXVlcnlfZGVwdGggPT0gMCkgb3Ig ZnJvbQorICogdG9wLWxldmVsIG9wZXJhdGlvbnMgKHF1ZXJ5X2RlcHRoID09IC0xLCBlLmcuIEFm dGVyVHJpZ2dlckZpcmVEZWZlcnJlZAorICogYXQgQ09NTUlUKS4gIE5lc3RlZCBxdWVyaWVzIGZy b20gU1BJIGluc2lkZSBBRlRFUiB0cmlnZ2VycyBydW4gYXQKKyAqIGRlcHRoID4gMCBhbmQgbXVz dCBub3QgdGVhciBkb3duIHJlc291cmNlcyB0aGUgb3V0ZXIgYmF0Y2ggc3RpbGwgbmVlZHMuCisg Ki8KK3N0YXRpYyB2b2lkCitGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3Modm9pZCkKK3sK KwlMaXN0Q2VsbCAgICpsYzsKKworCWlmIChhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoID4gMCkK KwkJcmV0dXJuOworCisJZm9yZWFjaChsYywgYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3Mp CisJeworCQlBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0gKml0ZW0gPSBsZmlyc3QobGMpOworCisJ CWl0ZW0tPmNhbGxiYWNrKGl0ZW0tPmFyZyk7CisJfQorCisJbGlzdF9mcmVlX2RlZXAoYWZ0ZXJU cmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MpOworCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tz ID0gTklMOworfQorCisvKgorICogQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZQorICoJCVJldHVy bnMgdHJ1ZSBpZiB3ZSdyZSBpbnNpZGUgYSBxdWVyeS1sZXZlbCB0cmlnZ2VyIGJhdGNoIHdoZXJl CisgKgkJcmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFja3Mgd2lsbCBhY3R1YWxseSBiZSBpbnZva2Vk LgorICoKKyAqIFRoaXMgaXMgZmFsc2UgZHVyaW5nIHZhbGlkYXRlRm9yZWlnbktleUNvbnN0cmFp bnQoKSwgd2hpY2ggY2FsbHMKKyAqIFJJIHRyaWdnZXIgZnVuY3Rpb25zIGRpcmVjdGx5IG91dHNp ZGUgdGhlIGFmdGVyLXRyaWdnZXIgZnJhbWV3b3JrLgorICovCitib29sCitBZnRlclRyaWdnZXJC YXRjaElzQWN0aXZlKHZvaWQpCit7CisJcmV0dXJuIGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGgg Pj0gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5kZXggMThkNDg5ZDc5MGQu LmQ5NzUwNWJkNDFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dl cnMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMTk2LDYg KzE5Niw1MCBAQCB0eXBlZGVmIHN0cnVjdCBSSV9Db21wYXJlSGFzaEVudHJ5CiAJRm1nckluZm8J Y2FzdF9mdW5jX2ZpbmZvOwkvKiBpbiBjYXNlIHdlIG11c3QgY29lcmNlIGlucHV0ICovCiB9IFJJ X0NvbXBhcmVIYXNoRW50cnk7CiAKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBGSyByb3dzIGJ1 ZmZlcmVkIGJlZm9yZSBmbHVzaGluZy4KKyAqCisgKiBMYXJnZXIgYmF0Y2hlcyBhbW9ydGl6ZSBw ZXItZmx1c2ggb3ZlcmhlYWQgYW5kIGxldCB0aGUgU0tfU0VBUkNIQVJSQVkKKyAqIHBhdGggd2Fs ayBtb3JlIGxlYWYgcGFnZXMgaW4gYSBzaW5nbGUgc29ydGVkIHRyYXZlcnNhbC4gIEJ1dCBlYWNo CisgKiBidWZmZXJlZCByb3cgaXMgYSBtYXRlcmlhbGl6ZWQgSGVhcFR1cGxlIGluIGZsdXNoX2N4 dCwgYW5kIHRoZSBtYXRjaGVkW10KKyAqIHNjYW4gaW4gcmlfRmFzdFBhdGhGbHVzaEFycmF5KCkg aXMgTyhiYXRjaF9zaXplKSBwZXIgaW5kZXggbWF0Y2guCisgKiBCZW5jaG1hcmtpbmcgc2hvd2Vk IGxpdHRsZSBkaWZmZXJlbmNlIGJldHdlZW4gMTYgYW5kIDY0LCB3aXRoIDI1NgorICogY29uc2lz dGVudGx5IHNsb3dlci4gIDY0IGlzIGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICovCisjZGVmaW5l IFJJX0ZBU1RQQVRIX0JBVENIX1NJWkUJNjQKKworLyoKKyAqIFJJX0Zhc3RQYXRoRW50cnkKKyAq CQlQZXItY29uc3RyYWludCBjYWNoZSBvZiByZXNvdXJjZXMgbmVlZGVkIGJ5IHJpX0Zhc3RQYXRo QmF0Y2hGbHVzaCgpLgorICoKKyAqIE9uZSBlbnRyeSBwZXIgY29uc3RyYWludCwga2V5ZWQgYnkg cGdfY29uc3RyYWludCBPSUQuICBDcmVhdGVkIGxhemlseQorICogYnkgcmlfRmFzdFBhdGhHZXRF bnRyeSgpIG9uIGZpcnN0IHVzZSB3aXRoaW4gYSB0cmlnZ2VyLWZpcmluZyBiYXRjaAorICogYW5k IHRvcm4gZG93biBieSByaV9GYXN0UGF0aFRlYXJkb3duKCkgYXQgYmF0Y2ggZW5kLgorICoKKyAq IEZLIHR1cGxlcyBhcmUgYnVmZmVyZWQgaW4gYmF0Y2hbXSBhY3Jvc3MgdHJpZ2dlciBpbnZvY2F0 aW9ucyBhbmQKKyAqIGZsdXNoZWQgd2hlbiB0aGUgYnVmZmVyIGZpbGxzIG9yIHRoZSBiYXRjaCBl bmRzLgorICovCit0eXBlZGVmIHN0cnVjdCBSSV9GYXN0UGF0aEVudHJ5Cit7CisJT2lkCQkJY29u b2lkOwkJCS8qIGhhc2gga2V5OiBwZ19jb25zdHJhaW50IE9JRCAqLworCVJlbGF0aW9uCXBrX3Jl bDsKKwlSZWxhdGlvbglpZHhfcmVsOworCVR1cGxlVGFibGVTbG90ICpwa19zbG90OworCVR1cGxl VGFibGVTbG90ICpma19zbG90OworCU1lbW9yeUNvbnRleHQgZmx1c2hfY3h0OwkvKiBzaG9ydC1s aXZlZCBjb250ZXh0IGZvciBwZXItZmx1c2ggd29yayAqLworCisJLyoKKwkgKiBUT0RPOiBiYXRj aFtdIGlzIEhlYXBUdXBsZVtdIGJlY2F1c2UgdGhlIEFGVEVSIHRyaWdnZXIgbWFjaGluZXJ5CisJ ICogY3VycmVudGx5IHBhc3NlcyB0dXBsZXMgYXMgSGVhcFR1cGxlcy4gIE9uY2UgdHJpZ2dlciBp bmZyYXN0cnVjdHVyZSBpcworCSAqIHNsb3RpZmllZCwgdGhpcyBzaG91bGQgdXNlIGEgc2xvdCBh cnJheSBvciB3aGF0ZXZlciBiYXRjaGVkIHR1cGxlCisJICogc3RvcmFnZSBhYnN0cmFjdGlvbiBl eGlzdHMgYXQgdGhhdCBwb2ludCB0byBiZSBUQU0tYWdub3N0aWMuCisJICovCisJSGVhcFR1cGxl CWJhdGNoW1JJX0ZBU1RQQVRIX0JBVENIX1NJWkVdOworCWludAkJCWJhdGNoX2NvdW50OworCisJ LyogRm9yIHJpX0Zhc3RQYXRoRW5kQmF0Y2goKSAqLworCWNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaWluZm87Cit9IFJJX0Zhc3RQYXRoRW50cnk7CiAKIC8qCiAgKiBMb2NhbCBkYXRhCkBAIC0y MDUsNiArMjQ5LDggQEAgc3RhdGljIEhUQUIgKnJpX3F1ZXJ5X2NhY2hlID0gTlVMTDsKIHN0YXRp YyBIVEFCICpyaV9jb21wYXJlX2NhY2hlID0gTlVMTDsKIHN0YXRpYyBkY2xpc3RfaGVhZCByaV9j b25zdHJhaW50X2NhY2hlX3ZhbGlkX2xpc3Q7CiAKK3N0YXRpYyBIVEFCICpyaV9mYXN0cGF0aF9j YWNoZSA9IE5VTEw7CitzdGF0aWMgYm9vbCByaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVk ID0gZmFsc2U7CiAKIC8qCiAgKiBMb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCkBAIC0yNTUsNiAr MzAxLDE2IEBAIHN0YXRpYyBib29sIHJpX1BlcmZvcm1DaGVjayhjb25zdCBSSV9Db25zdHJhaW50 SW5mbyAqcmlpbmZvLAogCQkJCQkJCWJvb2wgZGV0ZWN0TmV3Um93cywgaW50IGV4cGVjdF9PSyk7 CiBzdGF0aWMgdm9pZCByaV9GYXN0UGF0aENoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpy aWluZm8sCiAJCQkJCQkJIFJlbGF0aW9uIGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3Qp Oworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhCYXRjaEFkZChjb25zdCBSSV9Db25zdHJhaW50SW5m byAqcmlpbmZvLAorCQkJCQkJCQlSZWxhdGlvbiBma19yZWwsIFR1cGxlVGFibGVTbG90ICpuZXdz bG90KTsKK3N0YXRpYyBpbnQJcmlfRmFzdFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkg KmZwZW50cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAorCQkJCQkJCQkgIGNvbnN0IFJJX0Nv bnN0cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCwKKwkJCQkJCQkJICBTbmFwc2hv dCBzbmFwc2hvdCwgSW5kZXhTY2FuRGVzYyBzY2FuZGVzYyk7CitzdGF0aWMgaW50CXJpX0Zhc3RQ YXRoRmx1c2hMb29wKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFR1cGxlVGFibGVTbG90ICpm a19zbG90LAorCQkJCQkJCQkgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRp b24gZmtfcmVsLAorCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsIEluZGV4U2NhbkRlc2Mgc2Nh bmRlc2MpOworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKFJJX0Zhc3RQYXRoRW50 cnkgKmZwZW50cnksCisJCQkJCQkJCSAgUmVsYXRpb24gZmtfcmVsKTsKIHN0YXRpYyBib29sIHJp X0Zhc3RQYXRoUHJvYmVPbmUoUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBpZHhfcmVsLAogCQkJ CQkJCQlJbmRleFNjYW5EZXNjIHNjYW5kZXNjLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJ CQkJU25hcHNob3Qgc25hcHNob3QsIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCkBA IC0yNzcsNiArMzMzLDEwIEBAIHBnX25vcmV0dXJuIHN0YXRpYyB2b2lkIHJpX1JlcG9ydFZpb2xh dGlvbihjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCQkJCQkJCQkJCSAgIFJlbGF0 aW9uIHBrX3JlbCwgUmVsYXRpb24gZmtfcmVsLAogCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90 ICp2aW9sYXRvcnNsb3QsIFR1cGxlRGVzYyB0dXBkZXNjLAogCQkJCQkJCQkJCSAgIGludCBxdWVy eW5vLCBib29sIGlzX3Jlc3RyaWN0LCBib29sIHBhcnRnb25lKTsKK3N0YXRpYyBSSV9GYXN0UGF0 aEVudHJ5ICpyaV9GYXN0UGF0aEdldEVudHJ5KGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWlu Zm8sCisJCQkJCQkJCQkJCSBSZWxhdGlvbiBma19yZWwpOworc3RhdGljIHZvaWQgcmlfRmFzdFBh dGhFbmRCYXRjaCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhUZWFyZG93bih2 b2lkKTsKIAogCiAvKgpAQCAtMzg3LDEyICs0NDcsMjIgQEAgUklfRktleV9jaGVjayhUcmlnZ2Vy RGF0YSAqdHJpZ2RhdGEpCiAJICogbG9jay4gIFRoaXMgaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxl bnQgdG8gdGhlIFNQSSBwYXRoIGJlbG93IGJ1dCBhdm9pZHMKIAkgKiB0aGUgcGVyLXJvdyBleGVj dXRvciBvdmVyaGVhZC4KIAkgKgotCSAqIHJpX0Zhc3RQYXRoQ2hlY2soKSByZXBvcnRzIHRoZSB2 aW9sYXRpb24gaXRzZWxmICh2aWEgZXJlcG9ydCkgaWYgbm8KLQkgKiBtYXRjaGluZyBQSyByb3cg aXMgZm91bmQsIHNvIGl0IG9ubHkgcmV0dXJucyBvbiBzdWNjZXNzLgorCSAqIHJpX0Zhc3RQYXRo QmF0Y2hBZGQoKSBhbmQgcmlfRmFzdFBhdGhDaGVjaygpIHJlcG9ydCB0aGUgdmlvbGF0aW9uCisJ ICogdGhlbXNlbHZlcyBpZiBubyBtYXRjaGluZyBQSyByb3cgaXMgZm91bmQsIHNvIHRoZXkgb25s eSByZXR1cm4gb24KKwkgKiBzdWNjZXNzLgogCSAqLwogCWlmIChyaV9mYXN0cGF0aF9pc19hcHBs aWNhYmxlKHJpaW5mbykpCiAJewotCQlyaV9GYXN0UGF0aENoZWNrKHJpaW5mbywgZmtfcmVsLCBu ZXdzbG90KTsKKwkJaWYgKEFmdGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUoKSkKKwkJeworCQkJLyog QmF0Y2hlZCBwYXRoOiBidWZmZXIgYW5kIHByb2JlIGluIGdyb3VwcyAqLworCQkJcmlfRmFzdFBh dGhCYXRjaEFkZChyaWluZm8sIGZrX3JlbCwgbmV3c2xvdCk7CisJCX0KKwkJZWxzZQorCQl7CisJ CQkvKiBBTFRFUiBUQUJMRSB2YWxpZGF0aW9uOiBwZXItcm93LCBubyBjYWNoZSAqLworCQkJcmlf RmFzdFBhdGhDaGVjayhyaWluZm8sIGZrX3JlbCwgbmV3c2xvdCk7CisJCX0KIAkJcmV0dXJuIFBv aW50ZXJHZXREYXR1bShOVUxMKTsKIAl9CiAKQEAgLTI2ODEsMTAgKzI3NTEsMTQgQEAgcmlfUGVy Zm9ybUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAKIC8qCiAgKiByaV9G YXN0UGF0aENoZWNrCi0gKgkJUGVyZm9ybSBGSyBleGlzdGVuY2UgY2hlY2sgdmlhIGRpcmVjdCBp bmRleCBwcm9iZSwgYnlwYXNzaW5nIFNQSS4KKyAqCQlQZXJmb3JtIHBlciByb3cgRksgZXhpc3Rl bmNlIGNoZWNrIHZpYSBkaXJlY3QgaW5kZXggcHJvYmUsCisgKgkJYnlwYXNzaW5nIFNQSS4KICAq CiAgKiBJZiBubyBtYXRjaGluZyBQSyByb3cgZXhpc3RzLCByZXBvcnQgdGhlIHZpb2xhdGlvbiB2 aWEgcmlfUmVwb3J0VmlvbGF0aW9uKCksCiAgKiBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiByZXR1 cm5zIG5vcm1hbGx5LgorICoKKyAqIE5vdGU6IFRoaXMgaXMgb25seSB1c2VkIGJ5IHRoZSBBTFRF UiBUQUJMRSB2YWxpZGF0aW9uIHBhdGguIE90aGVyIHBhdGhzIHVzZQorICogcmlfRmFzdFBhdGhC YXRjaEFkZCgpLgogICovCiBzdGF0aWMgdm9pZAogcmlfRmFzdFBhdGhDaGVjayhjb25zdCBSSV9D b25zdHJhaW50SW5mbyAqcmlpbmZvLApAQCAtMjc0OCw2ICsyODIyLDMyMSBAQCByaV9GYXN0UGF0 aENoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJdGFibGVfY2xvc2UocGtf cmVsLCBOb0xvY2spOwogfQogCisvKgorICogcmlfRmFzdFBhdGhCYXRjaEFkZAorICoJCUJ1ZmZl ciBhIEZLIHJvdyBmb3IgYmF0Y2hlZCBwcm9iaW5nLgorICoKKyAqIEFkZHMgdGhlIHJvdyB0byB0 aGUgYmF0Y2ggYnVmZmVyLiAgV2hlbiB0aGUgYnVmZmVyIGlzIGZ1bGwsIGZsdXNoZXMgYWxsCisg KiBidWZmZXJlZCByb3dzIGJ5IHByb2JpbmcgdGhlIFBLIGluZGV4LiAgQW55IHZpb2xhdGlvbiBp cyByZXBvcnRlZAorICogaW1tZWRpYXRlbHkgZHVyaW5nIHRoZSBmbHVzaCB2aWEgcmlfUmVwb3J0 VmlvbGF0aW9uICh3aGljaCBkb2VzIG5vdCByZXR1cm4pLgorICoKKyAqIFVzZXMgdGhlIHBlci1i YXRjaCBjYWNoZSAoUklfRmFzdFBhdGhFbnRyeSkgdG8gYXZvaWQgcGVyLXJvdyByZWxhdGlvbgor ICogb3Blbi9jbG9zZSwgc2xvdCBjcmVhdGlvbiwgZXRjLgorICoKKyAqIFRoZSBiYXRjaCBpcyBh bHNvIGZsdXNoZWQgYXQgZW5kIG9mIHRyaWdnZXItZmlyaW5nIGN5Y2xlIHZpYQorICogcmlfRmFz dFBhdGhFbmRCYXRjaCgpLgorICovCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhCYXRjaEFkZChj b25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQlSZWxhdGlvbiBma19yZWwsIFR1 cGxlVGFibGVTbG90ICpuZXdzbG90KQoreworCVJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnkgPSBy aV9GYXN0UGF0aEdldEVudHJ5KHJpaW5mbywgZmtfcmVsKTsKKwlNZW1vcnlDb250ZXh0IG9sZGN4 dDsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmcGVudHJ5LT5mbHVzaF9jeHQp OworCWZwZW50cnktPmJhdGNoW2ZwZW50cnktPmJhdGNoX2NvdW50XSA9CisJCUV4ZWNDb3B5U2xv dEhlYXBUdXBsZShuZXdzbG90KTsKKwlmcGVudHJ5LT5iYXRjaF9jb3VudCsrOworCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJaWYgKGZwZW50cnktPmJhdGNoX2NvdW50ID49IFJJ X0ZBU1RQQVRIX0JBVENIX1NJWkUpCisJCXJpX0Zhc3RQYXRoQmF0Y2hGbHVzaChmcGVudHJ5LCBm a19yZWwpOworfQorCisvKgorICogcmlfRmFzdFBhdGhCYXRjaEZsdXNoCisgKgkJRmx1c2ggYWxs IGJ1ZmZlcmVkIEZLIHJvd3MgYnkgcHJvYmluZyB0aGUgUEsgaW5kZXguCisgKgorICogRGlzcGF0 Y2hlcyB0byByaV9GYXN0UGF0aEZsdXNoQXJyYXkoKSBmb3Igc2luZ2xlLWNvbHVtbiBGS3MKKyAq ICh1c2luZyBTS19TRUFSQ0hBUlJBWSkgb3IgcmlfRmFzdFBhdGhGbHVzaExvb3AoKSBmb3IgbXVs dGktY29sdW1uCisgKiBGS3MgKHBlci1yb3cgcHJvYmluZykuICBWaW9sYXRpb25zIGFyZSByZXBv cnRlZCBpbW1lZGlhdGVseSB2aWEKKyAqIHJpX1JlcG9ydFZpb2xhdGlvbigpLCB3aGljaCBkb2Vz IG5vdCByZXR1cm4uCisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aEJhdGNoRmx1c2goUklf RmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgUmVsYXRpb24gZmtfcmVsKQoreworCWNvbnN0IFJJX0Nv bnN0cmFpbnRJbmZvICpyaWluZm8gPSBmcGVudHJ5LT5yaWluZm87CisJUmVsYXRpb24JcGtfcmVs ID0gZnBlbnRyeS0+cGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVs OworCVR1cGxlVGFibGVTbG90ICpma19zbG90ID0gZnBlbnRyeS0+Zmtfc2xvdDsKKwlTbmFwc2hv dAlzbmFwc2hvdDsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCU9pZAkJCXNhdmVkX3VzZXJp ZDsKKwlpbnQJCQlzYXZlZF9zZWNfY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlp bnQJCQl2aW9sYXRpb25faW5kZXg7CisKKwlpZiAoZnBlbnRyeS0+YmF0Y2hfY291bnQgPT0gMCkK KwkJcmV0dXJuOworCisJaWYgKHJpaW5mby0+ZnBtZXRhID09IE5VTEwpCisJCXJpX3BvcHVsYXRl X2Zhc3RwYXRoX21ldGFkYXRhKChSSV9Db25zdHJhaW50SW5mbyAqKSByaWluZm8sCisJCQkJCQkJ CQkgIGZrX3JlbCwgaWR4X3JlbCk7CisJQXNzZXJ0KHJpaW5mby0+ZnBtZXRhKTsKKworCS8qCisJ ICogQ0NJIGFuZCBzZWN1cml0eSBjb250ZXh0IHN3aXRjaCBhcmUgZG9uZSBvbmNlIGZvciB0aGUg ZW50aXJlIGJhdGNoLgorCSAqIFBlci1yb3cgQ0NJIGlzIHVubmVjZXNzYXJ5IGJlY2F1c2UgYnkg dGhlIHRpbWUgYSBmbHVzaCBydW5zLCBhbGwgQUZURVIKKwkgKiB0cmlnZ2VycyBmb3IgdGhlIGJ1 ZmZlcmVkIHJvd3MgaGF2ZSBhbHJlYWR5IGZpcmVkICh0cmlnZ2VyIGludm9jYXRpb25zCisJICog c3RyaWN0bHkgYWx0ZXJuYXRlIHBlciByb3cpLCBzbyBhIHNpbmdsZSBDQ0kgYWR2YW5jZXMgcGFz dCBhbGwgdGhlaXIKKwkgKiBlZmZlY3RzLiAgUGVyLXJvdyBzZWN1cml0eSBjb250ZXh0IHN3aXRj aCBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIGVhY2gKKwkgKiByb3cncyBwcm9iZSBydW5zIGVudGly ZWx5IGFzIHRoZSBQSyB0YWJsZSBvd25lciwgc2FtZSBhcyB0aGUgU1BJIHBhdGgKKwkgKiAtLSB0 aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIFNQSSBwYXRoIHNldHMgYW5kIHJlc3RvcmVz IHRoZQorCSAqIGNvbnRleHQgcGVyIHJvdyB3aGVyZWFzIHdlIGRvIGl0IG9uY2UgYXJvdW5kIHRo ZSB3aG9sZSBiYXRjaC4KKwkgKi8KKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCXNuYXBz aG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJLyoK KwkgKiBidWlsZF9pbmRleF9zY2Fua2V5cygpIG1heSBwYWxsb2MgY2FzdCByZXN1bHRzIGZvciBj cm9zcy10eXBlIEZLcy4gVXNlCisJICogdGhlIGVudHJ5J3Mgc2hvcnQtbGl2ZWQgZmx1c2ggY29u dGV4dCBzbyB0aGVzZSBkb24ndCBhY2N1bXVsYXRlIGFjcm9zcworCSAqIGJhdGNoZXMuCisJICov CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CisK KwlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihwa19yZWwsIGlkeF9yZWwsIHNuYXBzaG90LCBO VUxMLAorCQkJCQkJCSAgIHJpaW5mby0+bmtleXMsIDApOworCisJR2V0VXNlcklkQW5kU2VjQ29u dGV4dCgmc2F2ZWRfdXNlcmlkLCAmc2F2ZWRfc2VjX2NvbnRleHQpOworCVNldFVzZXJJZEFuZFNl Y0NvbnRleHQoUmVsYXRpb25HZXRGb3JtKHBrX3JlbCktPnJlbG93bmVyLAorCQkJCQkJICAgc2F2 ZWRfc2VjX2NvbnRleHQgfAorCQkJCQkJICAgU0VDVVJJVFlfTE9DQUxfVVNFUklEX0NIQU5HRSB8 CisJCQkJCQkgICBTRUNVUklUWV9OT0ZPUkNFX1JMUyk7CisKKwkvKgorCSAqIENoZWNrIHRoYXQg dGhlIGN1cnJlbnQgdXNlciBoYXMgcGVybWlzc2lvbiB0byBhY2Nlc3MgcGtfcmVsLiBEb25lIGhl cmUKKwkgKiByYXRoZXIgdGhhbiBhdCBlbnRyeSBjcmVhdGlvbiBzbyB0aGF0IHBlcm1pc3Npb24g Y2hhbmdlcyBiZXR3ZWVuCisJICogZmx1c2hlcyBhcmUgcmVzcGVjdGVkLCBtYXRjaGluZyB0aGUg cGVyLXJvdyBiZWhhdmlvciBvZiB0aGUgU1BJIHBhdGgsCisJICogYWxiZWl0IGNoZWNrZWQgb25j ZSBwZXIgZmx1c2ggcmF0aGVyIHRoYW4gb25jZSBwZXIgcm93LCBsaWtlIGluCisJICogcmlfRmFz dFBhdGhDaGVjaygpLgorCSAqLworCXJpX0NoZWNrUGVybWlzc2lvbnMocGtfcmVsKTsKKworCWlm IChyaWluZm8tPm5rZXlzID09IDEpCisJCXZpb2xhdGlvbl9pbmRleCA9IHJpX0Zhc3RQYXRoRmx1 c2hBcnJheShmcGVudHJ5LCBma19zbG90LCByaWluZm8sCisJCQkJCQkJCQkJCQlma19yZWwsIHNu YXBzaG90LCBzY2FuZGVzYyk7CisJZWxzZQorCQl2aW9sYXRpb25faW5kZXggPSByaV9GYXN0UGF0 aEZsdXNoTG9vcChmcGVudHJ5LCBma19zbG90LCByaWluZm8sCisJCQkJCQkJCQkJCSAgIGZrX3Jl bCwgc25hcHNob3QsIHNjYW5kZXNjKTsKKworCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZWRf dXNlcmlkLCBzYXZlZF9zZWNfY29udGV4dCk7CisJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90 KTsKKwlpbmRleF9lbmRzY2FuKHNjYW5kZXNjKTsKKworCWlmICh2aW9sYXRpb25faW5kZXggPj0g MCkKKwl7CisJCUV4ZWNTdG9yZUhlYXBUdXBsZShmcGVudHJ5LT5iYXRjaFt2aW9sYXRpb25faW5k ZXhdLCBma19zbG90LCBmYWxzZSk7CisJCXJpX1JlcG9ydFZpb2xhdGlvbihyaWluZm8sIHBrX3Jl bCwgZmtfcmVsLAorCQkJCQkJICAgZmtfc2xvdCwgTlVMTCwKKwkJCQkJCSAgIFJJX1BMQU5fQ0hF Q0tfTE9PS1VQUEssIGZhbHNlLCBmYWxzZSk7CisJfQorCisJTWVtb3J5Q29udGV4dFJlc2V0KGZw ZW50cnktPmZsdXNoX2N4dCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkv KiBSZXNldC4gKi8KKwlmcGVudHJ5LT5iYXRjaF9jb3VudCA9IDA7Cit9CisKKy8qCisgKiByaV9G YXN0UGF0aEZsdXNoTG9vcAorICoJCU11bHRpLWNvbHVtbiBmYWxsYmFjazogcHJvYmUgdGhlIGlu ZGV4IG9uY2UgcGVyIGJ1ZmZlcmVkIHJvdy4KKyAqCisgKiBVc2VkIGZvciBjb21wb3NpdGUgZm9y ZWlnbiBrZXlzIHdoZXJlIFNLX1NFQVJDSEFSUkFZIGRvZXMgbm90CisgKiBhcHBseS4KKyAqCisg KiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmlvbGF0aW5nIHJvdyBpbiB0aGUgYmF0 Y2ggYXJyYXksIG9yIC0xIGlmCisgKiBhbGwgcm93cyBhcmUgdmFsaWQuCisgKi8KK3N0YXRpYyBp bnQKK3JpX0Zhc3RQYXRoRmx1c2hMb29wKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFR1cGxl VGFibGVTbG90ICpma19zbG90LAorCQkJCQkgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5m bywgUmVsYXRpb24gZmtfcmVsLAorCQkJCQkgU25hcHNob3Qgc25hcHNob3QsIEluZGV4U2NhbkRl c2Mgc2NhbmRlc2MpCit7CisJUmVsYXRpb24JcGtfcmVsID0gZnBlbnRyeS0+cGtfcmVsOworCVJl bGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVsOworCVR1cGxlVGFibGVTbG90ICpwa19z bG90ID0gZnBlbnRyeS0+cGtfc2xvdDsKKwlEYXR1bQkJcGtfdmFsc1tJTkRFWF9NQVhfS0VZU107 CisJY2hhcgkJcGtfbnVsbHNbSU5ERVhfTUFYX0tFWVNdOworCVNjYW5LZXlEYXRhIHNrZXlbSU5E RVhfTUFYX0tFWVNdOworCWJvb2wJCWZvdW5kID0gdHJ1ZTsKKworCWZvciAoaW50IGkgPSAwOyBp IDwgZnBlbnRyeS0+YmF0Y2hfY291bnQ7IGkrKykKKwl7CisJCUV4ZWNTdG9yZUhlYXBUdXBsZShm cGVudHJ5LT5iYXRjaFtpXSwgZmtfc2xvdCwgZmFsc2UpOworCQlyaV9FeHRyYWN0VmFsdWVzKGZr X3JlbCwgZmtfc2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOworCQlidWls ZF9pbmRleF9zY2Fua2V5cyhyaWluZm8sIGlkeF9yZWwsIHBrX3ZhbHMsIHBrX251bGxzLCBza2V5 KTsKKworCQlmb3VuZCA9IHJpX0Zhc3RQYXRoUHJvYmVPbmUocGtfcmVsLCBpZHhfcmVsLCBzY2Fu ZGVzYywgcGtfc2xvdCwKKwkJCQkJCQkJCXNuYXBzaG90LCByaWluZm8sIHNrZXksIHJpaW5mby0+ bmtleXMpOworCisJCS8qIFJlcG9ydCBmaXJzdCB1bm1hdGNoZWQgcm93ICovCisJCWlmICghZm91 bmQpCisJCQlyZXR1cm4gaTsKKwl9CisKKwkvKiBBbGwgcGFzcy4gKi8KKwlyZXR1cm4gLTE7Cit9 CisKKy8qCisgKiByaV9GYXN0UGF0aEZsdXNoQXJyYXkKKyAqCQlTaW5nbGUtY29sdW1uIGZhc3Qg cGF0aCB1c2luZyBTS19TRUFSQ0hBUlJBWS4KKyAqCisgKiBCdWlsZHMgYW4gYXJyYXkgb2YgRksg dmFsdWVzIGFuZCBkb2VzIG9uZSBpbmRleCBzY2FuIHdpdGgKKyAqIFNLX1NFQVJDSEFSUkFZLiAg VGhlIGluZGV4IEFNIHNvcnRzIGFuZCBkZWR1cGxpY2F0ZXMgdGhlIGFycmF5CisgKiBpbnRlcm5h bGx5LCB0aGVuIHdhbGtzIG1hdGNoaW5nIGxlYWYgcGFnZXMgaW4gb3JkZXIuICBFYWNoCisgKiBt YXRjaGVkIFBLIHR1cGxlIGlzIGxvY2tlZCBhbmQgcmVjaGVja2VkIGFzIGJlZm9yZTsgYSBtYXRj aGVkW10KKyAqIGJpdG1hcCB0cmFja3Mgd2hpY2ggYmF0Y2ggaXRlbXMgd2VyZSBzYXRpc2ZpZWQu CisgKgorICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZpb2xhdGluZyByb3cgaW4g dGhlIGJhdGNoIGFycmF5LCBvciAtMSBpZgorICogYWxsIHJvd3MgYXJlIHZhbGlkLgorICovCitz dGF0aWMgaW50CityaV9GYXN0UGF0aEZsdXNoQXJyYXkoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRy eSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCisJCQkJCSAgY29uc3QgUklfQ29uc3RyYWludElu Zm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsLAorCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LCBJ bmRleFNjYW5EZXNjIHNjYW5kZXNjKQoreworCUZhc3RQYXRoTWV0YSAqZnBtZXRhID0gcmlpbmZv LT5mcG1ldGE7CisJUmVsYXRpb24JcGtfcmVsID0gZnBlbnRyeS0+cGtfcmVsOworCVJlbGF0aW9u CWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVsOworCVR1cGxlVGFibGVTbG90ICpwa19zbG90ID0g ZnBlbnRyeS0+cGtfc2xvdDsKKwlEYXR1bQkJc2VhcmNoX3ZhbHNbUklfRkFTVFBBVEhfQkFUQ0hf U0laRV07CisJYm9vbAkJbWF0Y2hlZFtSSV9GQVNUUEFUSF9CQVRDSF9TSVpFXTsKKwlpbnQJCQlu dmFscyA9IGZwZW50cnktPmJhdGNoX2NvdW50OworCURhdHVtCQlwa192YWxzW0lOREVYX01BWF9L RVlTXTsKKwljaGFyCQlwa19udWxsc1tJTkRFWF9NQVhfS0VZU107CisJU2NhbktleURhdGEgc2tl eVsxXTsKKwlSSV9Db21wYXJlSGFzaEVudHJ5ICplbnRyeTsKKwlPaWQJCQllbGVtX3R5cGU7CisJ aW50MTYJCWVsZW1fbGVuOworCWJvb2wJCWVsZW1fYnl2YWw7CisJY2hhcgkJZWxlbV9hbGlnbjsK KwlBcnJheVR5cGUgICphcnI7CisKKwlBc3NlcnQoZnBtZXRhKTsKKworCW1lbXNldChtYXRjaGVk LCAwLCBudmFscyAqIHNpemVvZihib29sKSk7CisKKwkvKgorCSAqIEV4dHJhY3QgRksgdmFsdWVz LCBjYXN0aW5nIHRvIHRoZSBvcGVyYXRvcidzIGV4cGVjdGVkIGlucHV0IHR5cGUgaWYKKwkgKiBu ZWVkZWQgKGUuZy4gaW50OCBGSyAtPiBpbnQ0IGZvciBpbnQ0OGVxKS4KKwkgKi8KKwllbnRyeSA9 IGZwbWV0YS0+Y29tcGFyZV9lbnRyaWVzWzBdOworCWZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHM7 IGkrKykKKwl7CisJCUV4ZWNTdG9yZUhlYXBUdXBsZShmcGVudHJ5LT5iYXRjaFtpXSwgZmtfc2xv dCwgZmFsc2UpOworCQlyaV9FeHRyYWN0VmFsdWVzKGZrX3JlbCwgZmtfc2xvdCwgcmlpbmZvLCBm YWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOworCisJCS8qIENhc3QgaWYgbmVlZGVkIChlLmcuIGlu dDggRksgLT4gbnVtZXJpYyBQSykgKi8KKwkJaWYgKE9pZElzVmFsaWQoZW50cnktPmNhc3RfZnVu Y19maW5mby5mbl9vaWQpKQorCQkJc2VhcmNoX3ZhbHNbaV0gPSBGdW5jdGlvbkNhbGwzKCZlbnRy eS0+Y2FzdF9mdW5jX2ZpbmZvLAorCQkJCQkJCQkJCSAgIHBrX3ZhbHNbMF0sCisJCQkJCQkJCQkJ ICAgSW50MzJHZXREYXR1bSgtMSksCisJCQkJCQkJCQkJICAgQm9vbEdldERhdHVtKGZhbHNlKSk7 CisJCWVsc2UKKwkJCXNlYXJjaF92YWxzW2ldID0gcGtfdmFsc1swXTsKKwl9CisKKwkvKgorCSAq IEFycmF5IGVsZW1lbnQgdHlwZSBtdXN0IG1hdGNoIHRoZSBvcGVyYXRvcidzIHJpZ2h0LWhhbmQg aW5wdXQgdHlwZSwKKwkgKiB3aGljaCBpcyB3aGF0IHRoZSBpbmRleCBjb21wYXJpc29uIGV4cGVj dHMgb24gdGhlIHNlYXJjaCBzaWRlLgorCSAqIHJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRh KCkgc3RvcmVzIGV4YWN0bHkgdGhpcyB2aWEKKwkgKiBnZXRfb3Bfb3BmYW1pbHlfcHJvcGVydGll cygpLCB3aGljaCByZXR1cm5zIHRoZSBvcGVyYXRvcidzIHJpZ2h0LWhhbmQKKwkgKiB0eXBlIGFz IHRoZSBzdWJ0eXBlIGZvciBjcm9zcy10eXBlIG9wZXJhdG9ycyAoZS5nLiBpbnQ4IGZvciBpbnQ0 OGVxKQorCSAqIGFuZCB0aGUgY29tbW9uIHR5cGUgZm9yIHNhbWUtdHlwZSBvcGVyYXRvcnMuCisJ ICovCisJZWxlbV90eXBlID0gZnBtZXRhLT5zdWJ0eXBlc1swXTsKKwlBc3NlcnQoT2lkSXNWYWxp ZChlbGVtX3R5cGUpKTsKKwlnZXRfdHlwbGVuYnl2YWxhbGlnbihlbGVtX3R5cGUsICZlbGVtX2xl biwgJmVsZW1fYnl2YWwsICZlbGVtX2FsaWduKTsKKworCWFyciA9IGNvbnN0cnVjdF9hcnJheShz ZWFyY2hfdmFscywgbnZhbHMsCisJCQkJCQkgIGVsZW1fdHlwZSwgZWxlbV9sZW4sIGVsZW1fYnl2 YWwsIGVsZW1fYWxpZ24pOworCisJLyoKKwkgKiBCdWlsZCBzY2FuIGtleSB3aXRoIFNLX1NFQVJD SEFSUkFZLiAgVGhlIGluZGV4IEFNIGNvZGUgd2lsbCBpbnRlcm5hbGx5CisJICogc29ydCBhbmQg ZGVkdXBsaWNhdGUsIHRoZW4gd2FsayBsZWFmIHBhZ2VzIGluIG9yZGVyLgorCSAqLworCVNjYW5L ZXlFbnRyeUluaXRpYWxpemUoJnNrZXlbMF0sCisJCQkJCQkgICBTS19TRUFSQ0hBUlJBWSwKKwkJ CQkJCSAgIDEsCS8qIGF0dG5vICovCisJCQkJCQkgICBmcG1ldGEtPnN0cmF0c1swXSwKKwkJCQkJ CSAgIGZwbWV0YS0+c3VidHlwZXNbMF0sCisJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRp b25bMF0sCisJCQkJCQkgICBmcG1ldGEtPnJlZ29wc1swXSwKKwkJCQkJCSAgIFBvaW50ZXJHZXRE YXR1bShhcnIpKTsKKworCWluZGV4X3Jlc2NhbihzY2FuZGVzYywgc2tleSwgMSwgTlVMTCwgMCk7 CisKKwkvKgorCSAqIFdhbGsgYWxsIG1hdGNoZXMuICBUaGUgaW5kZXggQU0gcmV0dXJucyB0aGVt IGluIGluZGV4IG9yZGVyLiAgRm9yIGVhY2gKKwkgKiBtYXRjaCwgZmluZCB3aGljaCBiYXRjaCBp dGVtKHMpIGl0IHNhdGlzZmllcy4KKwkgKi8KKwl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNj YW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcGtfc2xvdCkpCisJeworCQlEYXR1bQkJZm91 bmRfdmFsOworCQlib29sCQlmb3VuZF9udWxsOworCQlib29sCQljb25jdXJyZW50bHlfdXBkYXRl ZDsKKwkJU2NhbktleURhdGEgcmVjaGVja19za2V5WzFdOworCisJCWlmICghcmlfTG9ja1BLVHVw bGUocGtfcmVsLCBwa19zbG90LCBzbmFwc2hvdCwgJmNvbmN1cnJlbnRseV91cGRhdGVkKSkKKwkJ CWNvbnRpbnVlOworCisJCS8qIEV4dHJhY3QgdGhlIFBLIHZhbHVlIGZyb20gdGhlIG1hdGNoZWQg YW5kIGxvY2tlZCB0dXBsZSAqLworCQlmb3VuZF92YWwgPSBzbG90X2dldGF0dHIocGtfc2xvdCwg cmlpbmZvLT5wa19hdHRudW1zWzBdLCAmZm91bmRfbnVsbCk7CisJCUFzc2VydCghZm91bmRfbnVs bCk7CisKKwkJaWYgKGNvbmN1cnJlbnRseV91cGRhdGVkKQorCQl7CisJCQkvKgorCQkJICogQnVp bGQgYSBzaW5nbGUta2V5IHNjYW5rZXkgZm9yIHJlY2hlY2suICBXZSBuZWVkIHRoZSBhY3R1YWwg UEsKKwkJCSAqIHZhbHVlIHRoYXQgd2FzIGZvdW5kLCBub3QgdGhlIEZLIHNlYXJjaCB2YWx1ZS4K KwkJCSAqLworCQkJU2NhbktleUVudHJ5SW5pdGlhbGl6ZSgmcmVjaGVja19za2V5WzBdLCAwLCAx LAorCQkJCQkJCQkgICBmcG1ldGEtPnN0cmF0c1swXSwKKwkJCQkJCQkJICAgZnBtZXRhLT5zdWJ0 eXBlc1swXSwKKwkJCQkJCQkJICAgaWR4X3JlbC0+cmRfaW5kY29sbGF0aW9uWzBdLAorCQkJCQkJ CQkgICBmcG1ldGEtPnJlZ29wc1swXSwKKwkJCQkJCQkJICAgZm91bmRfdmFsKTsKKwkJCWlmICgh cmVjaGVja19tYXRjaGVkX3BrX3R1cGxlKGlkeF9yZWwsIHJlY2hlY2tfc2tleSwgcGtfc2xvdCkp CisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBMaW5lYXIgc2NhbiB0byBtYXJrIGFs bCBiYXRjaCBpdGVtcyBtYXRjaGluZyB0aGlzIFBLIHZhbHVlLgorCQkgKiBPKGJhdGNoX3NpemUp IHBlciBtYXRjaCwgTyhiYXRjaF9zaXplXjIpIHdvcnN0IGNhc2UgLS0gZmluZSBmb3IgdGhlCisJ CSAqIGN1cnJlbnQgYmF0Y2ggc2l6ZSBvZiA2NC4KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBp IDwgbnZhbHM7IGkrKykKKwkJeworCQkJaWYgKCFtYXRjaGVkW2ldICYmCisJCQkJRGF0dW1HZXRC b29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZlbnRyeS0+ZXFfb3ByX2ZpbmZvLAorCQkJCQkJCQkJCQkg ICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRpb25bMF0sCisJCQkJCQkJCQkJCSAgIGZvdW5kX3ZhbCwK KwkJCQkJCQkJCQkJICAgc2VhcmNoX3ZhbHNbaV0pKSkKKwkJCQltYXRjaGVkW2ldID0gdHJ1ZTsK KwkJfQorCX0KKworCS8qIFJlcG9ydCBmaXJzdCB1bm1hdGNoZWQgcm93ICovCisJZm9yIChpbnQg aSA9IDA7IGkgPCBudmFsczsgaSsrKQorCQlpZiAoIW1hdGNoZWRbaV0pCisJCQlyZXR1cm4gaTsK KworCS8qIEFsbCBwYXNzLiAqLworCXJldHVybiAtMTsKK30KKwogLyoKICAqIHJpX0Zhc3RQYXRo UHJvYmVPbmUKICAqCQlQcm9iZSB0aGUgUEsgaW5kZXggZm9yIG9uZSBzZXQgb2Ygc2NhbiBrZXlz LCBsb2NrIHRoZSBtYXRjaGluZwpAQCAtMzY3NSwzICs0MDY0LDIwMyBAQCBSSV9GS2V5X3RyaWdn ZXJfdHlwZShPaWQgdGdmb2lkKQogCiAJcmV0dXJuIFJJX1RSSUdHRVJfTk9ORTsKIH0KKworLyoK KyAqIHJpX0Zhc3RQYXRoRW5kQmF0Y2gKKyAqCQlGbHVzaCByZW1haW5pbmcgcm93cyBhbmQgdGVh ciBkb3duIGNhY2hlZCBzdGF0ZS4KKyAqCisgKiBSZWdpc3RlcmVkIGFzIGFuIEFmdGVyVHJpZ2dl ckJhdGNoQ2FsbGJhY2suICBOb3RlOiB0aGUgZmx1c2ggY2FuCisgKiBkbyByZWFsIHdvcmsgKEND SSwgc2VjdXJpdHkgY29udGV4dCBzd2l0Y2gsIGluZGV4IHByb2JlcykgYW5kIGNhbgorICogdGhy b3cgRVJST1Igb24gYSBjb25zdHJhaW50IHZpb2xhdGlvbi4gIElmIHRoYXQgaGFwcGVucywKKyAq IHJpX0Zhc3RQYXRoVGVhcmRvd24gbmV2ZXIgcnVuczsgUmVzb3VyY2VPd25lciArIFhhY3RDYWxs YmFjaworICogaGFuZGxlIHJlc291cmNlIGNsZWFudXAgb24gdGhlIGFib3J0IHBhdGguCisgKi8K K3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aEVuZEJhdGNoKHZvaWQgKmFyZykKK3sKKwlIQVNIX1NF UV9TVEFUVVMgc3RhdHVzOworCVJJX0Zhc3RQYXRoRW50cnkgKmVudHJ5OworCisJaWYgKHJpX2Zh c3RwYXRoX2NhY2hlID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEZsdXNoIGFueSBwYXJ0aWFs IGJhdGNoZXMgLS0gY2FuIHRocm93IEVSUk9SICovCisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBy aV9mYXN0cGF0aF9jYWNoZSk7CisJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3Rh dHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+YmF0Y2hfY291bnQgPiAwKQorCQl7CisJ CQlSZWxhdGlvbglma19yZWwgPSB0YWJsZV9vcGVuKGVudHJ5LT5yaWluZm8tPmZrX3JlbGlkLAor CQkJCQkJCQkJCQlBY2Nlc3NTaGFyZUxvY2spOworCisJCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2go ZW50cnksIGZrX3JlbCk7CisJCQl0YWJsZV9jbG9zZShma19yZWwsIE5vTG9jayk7CisJCX0KKwl9 CisKKwkvKiBPcmRlcmx5IHRlYXJkb3duICovCisJcmlfRmFzdFBhdGhUZWFyZG93bigpOworfQor CisvKgorICogcmlfRmFzdFBhdGhUZWFyZG93bgorICoJCVRlYXIgZG93biBhbGwgY2FjaGVkIGZh c3QtcGF0aCBzdGF0ZS4KKyAqCisgKiBDYWxsZWQgZnJvbSByaV9GYXN0UGF0aEVuZEJhdGNoKCkg YWZ0ZXIgZmx1c2hpbmcgYW55IHJlbWFpbmluZyByb3dzLgorICovCitzdGF0aWMgdm9pZAorcmlf RmFzdFBhdGhUZWFyZG93bih2b2lkKQoreworCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklf RmFzdFBhdGhFbnRyeSAqZW50cnk7CisKKwlpZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkK KwkJcmV0dXJuOworCisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCByaV9mYXN0cGF0aF9jYWNoZSk7 CisJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7 CisJCWlmIChlbnRyeS0+aWR4X3JlbCkKKwkJCWluZGV4X2Nsb3NlKGVudHJ5LT5pZHhfcmVsLCBO b0xvY2spOworCQlpZiAoZW50cnktPnBrX3JlbCkKKwkJCXRhYmxlX2Nsb3NlKGVudHJ5LT5wa19y ZWwsIE5vTG9jayk7CisJCWlmIChlbnRyeS0+cGtfc2xvdCkKKwkJCUV4ZWNEcm9wU2luZ2xlVHVw bGVUYWJsZVNsb3QoZW50cnktPnBrX3Nsb3QpOworCQlpZiAoZW50cnktPmZrX3Nsb3QpCisJCQlF eGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KGVudHJ5LT5ma19zbG90KTsKKwkJaWYgKGVudHJ5 LT5mbHVzaF9jeHQpCisJCQlNZW1vcnlDb250ZXh0RGVsZXRlKGVudHJ5LT5mbHVzaF9jeHQpOwor CX0KKworCWhhc2hfZGVzdHJveShyaV9mYXN0cGF0aF9jYWNoZSk7CisJcmlfZmFzdHBhdGhfY2Fj aGUgPSBOVUxMOworCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKK30K Kworc3RhdGljIGJvb2wgcmlfZmFzdHBhdGhfeGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gZmFs c2U7CisKK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aFhhY3RDYWxsYmFjayhYYWN0RXZlbnQgZXZl bnQsIHZvaWQgKmFyZykKK3sKKwkvKgorCSAqIE9uIGFib3J0LCBSZXNvdXJjZU93bmVyIGFscmVh ZHkgcmVsZWFzZWQgcmVsYXRpb25zOyBvbiBjb21taXQsCisJICogcmlfRmFzdFBhdGhUZWFyZG93 biBhbHJlYWR5IHJhbi4gIEVpdGhlciB3YXksIGp1c3QgTlVMTCB0aGUgc3RhdGljCisJICogcG9p bnRlcnMgc28gdGhleSBkb24ndCBkYW5nbGUgaW50byB0aGUgbmV4dCB0cmFuc2FjdGlvbi4KKwkg Ki8KKwlyaV9mYXN0cGF0aF9jYWNoZSA9IE5VTEw7CisJcmlfZmFzdHBhdGhfY2FsbGJhY2tfcmVn aXN0ZXJlZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhTdWJYYWN0Q2Fs bGJhY2soU3ViWGFjdEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCisJCQkJ CQkgICBTdWJUcmFuc2FjdGlvbklkIHBhcmVudFN1YmlkLCB2b2lkICphcmcpCit7CisJaWYgKGV2 ZW50ID09IFNVQlhBQ1RfRVZFTlRfQUJPUlRfU1VCKQorCXsKKwkJLyoKKwkJICogUmVzb3VyY2VP d25lciBhbHJlYWR5IHJlbGVhc2VkIHJlbGF0aW9ucy4gIE5VTEwgdGhlIHN0YXRpYyBwb2ludGVy cworCQkgKiBzbyB0aGUgc3RpbGwtcmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFjayBiZWNvbWVzIGEg bm8tb3AgZm9yIHRoZSByZXN0CisJCSAqIG9mIHRoaXMgdHJhbnNhY3Rpb24uCisJCSAqLworCQly aV9mYXN0cGF0aF9jYWNoZSA9IE5VTEw7CisJCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVy ZWQgPSBmYWxzZTsKKwl9Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aEdldEVudHJ5CisgKgkJTG9v ayB1cCBvciBjcmVhdGUgYSBwZXItYmF0Y2ggY2FjaGUgZW50cnkgZm9yIHRoZSBnaXZlbiBjb25z dHJhaW50LgorICoKKyAqIE9uIGZpcnN0IGNhbGwgZm9yIGEgY29uc3RyYWludCB3aXRoaW4gYSBi YXRjaDogb3BlbnMgcGtfcmVsIGFuZCB0aGUgaW5kZXgsCisgKiBhbGxvY2F0ZXMgc2xvdHMgZm9y IGJvdGggRksgcm93IGFuZCB0aGUgbG9va2VkIHVwIFBLIHJvdywgYW5kIHJlZ2lzdGVycyB0aGUK KyAqIGNsZWFudXAgY2FsbGJhY2suCisgKgorICogT24gc3Vic2VxdWVudCBjYWxsczogcmV0dXJu cyB0aGUgZXhpc3RpbmcgZW50cnkuCisgKi8KK3N0YXRpYyBSSV9GYXN0UGF0aEVudHJ5ICoKK3Jp X0Zhc3RQYXRoR2V0RW50cnkoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRp b24gZmtfcmVsKQoreworCVJJX0Zhc3RQYXRoRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOwor CisJLyogQ3JlYXRlIGhhc2ggdGFibGUgb24gZmlyc3QgdXNlIGluIHRoaXMgYmF0Y2ggKi8KKwlp ZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwl7CisJCUhBU0hDVEwJCWN0bDsKKworCQlp ZiAoIXJpX2Zhc3RwYXRoX3hhY3RfY2FsbGJhY2tfcmVnaXN0ZXJlZCkKKwkJeworCQkJUmVnaXN0 ZXJYYWN0Q2FsbGJhY2socmlfRmFzdFBhdGhYYWN0Q2FsbGJhY2ssIE5VTEwpOworCQkJUmVnaXN0 ZXJTdWJYYWN0Q2FsbGJhY2socmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2ssIE5VTEwpOworCQkJ cmlfZmFzdHBhdGhfeGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKKwkJfQorCisJCWN0 bC5rZXlzaXplID0gc2l6ZW9mKE9pZCk7CisJCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoUklfRmFz dFBhdGhFbnRyeSk7CisJCWN0bC5oY3h0ID0gVG9wVHJhbnNhY3Rpb25Db250ZXh0OworCQlyaV9m YXN0cGF0aF9jYWNoZSA9IGhhc2hfY3JlYXRlKCJSSSBmYXN0LXBhdGggY2FjaGUiLAorCQkJCQkJ CQkJCTE2LAorCQkJCQkJCQkJCSZjdGwsCisJCQkJCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9CTE9C UyB8IEhBU0hfQ09OVEVYVCk7CisJfQorCisJZW50cnkgPSBoYXNoX3NlYXJjaChyaV9mYXN0cGF0 aF9jYWNoZSwgJnJpaW5mby0+Y29uc3RyYWludF9pZCwKKwkJCQkJCUhBU0hfRU5URVIsICZmb3Vu ZCk7CisKKwlpZiAoIWZvdW5kKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkJLyoK KwkJICogWmVybyBvdXQgbm9uLWtleSBmaWVsZHMgc28gcmlfRmFzdFBhdGhUZWFyZG93biBpcyBz YWZlIGlmIHdlIGVycm9yCisJCSAqIG91dCBkdXJpbmcgcGFydGlhbCBpbml0aWFsaXphdGlvbiBi ZWxvdy4KKwkJICovCisJCW1lbXNldCgoKGNoYXIgKikgZW50cnkpICsgb2Zmc2V0b2YoUklfRmFz dFBhdGhFbnRyeSwgcGtfcmVsKSwgMCwKKwkJCSAgIHNpemVvZihSSV9GYXN0UGF0aEVudHJ5KSAt IG9mZnNldG9mKFJJX0Zhc3RQYXRoRW50cnksIHBrX3JlbCkpOworCisJCW9sZGN4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCisJCS8qCisJCSAqIE9w ZW4gUEsgdGFibGUgYW5kIGl0cyB1bmlxdWUgaW5kZXguCisJCSAqCisJCSAqIFJvd1NoYXJlTG9j ayBvbiBwa19yZWwgbWF0Y2hlcyB3aGF0IHRoZSBTUEkgcGF0aCdzIFNFTEVDVCAuLi4gRk9SCisJ CSAqIEtFWSBTSEFSRSB3b3VsZCBhY3F1aXJlIGFzIGEgcmVsYXRpb24tbGV2ZWwgbG9jay4gQWNj ZXNzU2hhcmVMb2NrCisJCSAqIG9uIHRoZSBpbmRleCBpcyBzdGFuZGFyZCBmb3IgaW5kZXggc2Nh bnMuCisJCSAqCisJCSAqIFdlIGRvbid0IHJlbGVhc2UgdGhlc2UgbG9ja3MgdW50aWwgZW5kIG9m IHRyYW5zYWN0aW9uLCBtYXRjaGluZyBTUEkKKwkJICogYmVoYXZpb3IuCisJCSAqLworCQllbnRy eS0+cGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBrX3JlbGlkLCBSb3dTaGFyZUxvY2spOwor CQllbnRyeS0+aWR4X3JlbCA9IGluZGV4X29wZW4ocmlpbmZvLT5jb25pbmRpZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJZW50cnktPnBrX3Nsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShlbnRyeS0+cGtf cmVsLCBOVUxMKTsKKworCQkvKgorCQkgKiBNdXN0IGJlIFRUU09wc0hlYXBUdXBsZSBiZWNhdXNl IEV4ZWNTdG9yZUhlYXBUdXBsZSgpIGlzIHVzZWQgdG8KKwkJICogbG9hZCBlbnRyaWVzIGZyb20g YmF0Y2hbXSBpbnRvIHRoaXMgc2xvdCBmb3IgdmFsdWUgZXh0cmFjdGlvbi4KKwkJICovCisJCWVu dHJ5LT5ma19zbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3Io ZmtfcmVsKSwKKwkJCQkJCQkJCQkJCSAgJlRUU09wc0hlYXBUdXBsZSk7CisKKwkJZW50cnktPmZs dXNoX2N4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BUcmFuc2FjdGlvbkNvbnRleHQsCisJ CQkJCQkJCQkJCQkgIlJJIGZhc3QgcGF0aCBmbHVzaCB0ZW1wb3JhcnkgY29udGV4dCIsCisJCQkJ CQkJCQkJCQkgQUxMT0NTRVRfU01BTExfU0laRVMpOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKKworCQkvKiBFbnN1cmUgY2xlYW51cCBhdCBlbmQgb2YgdGhpcyB0cmlnZ2VyLWZp cmluZyBiYXRjaCAqLworCQlpZiAoIXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQpCisJ CXsKKwkJCVJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhyaV9GYXN0UGF0aEVuZEJh dGNoLCBOVUxMKTsKKwkJCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSB0cnVlOwor CQl9CisKKwkJLyoKKwkJICogU3RvcmUgcmlpbmZvIHNvIHJpX0Zhc3RQYXRoRW5kQmF0Y2goKSBj YW4gZmx1c2ggYW55IHJlbWFpbmluZworCQkgKiBidWZmZXJlZCByb3dzIGFuZCByZW9wZW4gdGhl IEZLIHJlbGF0aW9uIGlmIG5lZWRlZCAoZS5nLiBmb3IKKwkJICogZGVmZXJyZWQgY29uc3RyYWlu dHMsIHRoZSBGSyByZWxhdGlvbiBtYXkgYWxyZWFkeSBiZSBjbG9zZWQgYnkgdGhlCisJCSAqIHRp bWUgdGhlIGJhdGNoIGVuZHMpLgorCQkgKi8KKwkJZW50cnktPnJpaW5mbyA9IHJpaW5mbzsKKwl9 CisKKwlyZXR1cm4gZW50cnk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90 cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKaW5kZXggMjdhZjUyODQ0 MDYuLjc2NjQyOThmNWM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2Vy LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdHJpZ2dlci5oCkBAIC0yODksNCArMjg5LDIy IEBAIGV4dGVybiB2b2lkIFJJX1BhcnRpdGlvblJlbW92ZV9DaGVjayhUcmlnZ2VyICp0cmlnZ2Vy LCBSZWxhdGlvbiBma19yZWwsCiAKIGV4dGVybiBpbnQJUklfRktleV90cmlnZ2VyX3R5cGUoT2lk IHRnZm9pZCk7CiAKKy8qCisgKiBDYWxsYmFjayB0eXBlIGZvciBlbmQtb2YtdHJpZ2dlci1iYXRj aCBub3RpZmljYXRpb25zLgorICoKKyAqIFJlZ2lzdGVyZWQgdmlhIFJlZ2lzdGVyQWZ0ZXJUcmln Z2VyQmF0Y2hDYWxsYmFjaygpLiAgSW52b2tlZCB3aGVuCisgKiBhIGJhdGNoIG9mIGFmdGVyLXRy aWdnZXIgcHJvY2Vzc2luZyBjb21wbGV0ZXM6CisgKgktIEFmdGVyVHJpZ2dlckVuZFF1ZXJ5KCkg ICAgICAoaW1tZWRpYXRlIGNvbnN0cmFpbnRzKQorICoJLSBBZnRlclRyaWdnZXJGaXJlRGVmZXJy ZWQoKSAgKGRlZmVycmVkIGNvbnN0cmFpbnRzIGF0IENPTU1JVCkKKyAqCS0gQWZ0ZXJUcmlnZ2Vy U2V0U3RhdGUoKSAgICAgIChTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFKQorICoKKyAqIFRoZSBj YWxsYmFjayBsaXN0IGlzIGNsZWFyZWQgYWZ0ZXIgZWFjaCBiYXRjaC4gIENhbGxlcnMgbXVzdAor ICogcmUtcmVnaXN0ZXIgaWYgdGhleSBuZWVkIHRvIGJlIGNhbGxlZCBhZ2FpbiBpbiBhIHN1YnNl cXVlbnQgYmF0Y2guCisgKi8KK3R5cGVkZWYgdm9pZCAoKkFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJh Y2spICh2b2lkICphcmcpOworCitleHRlcm4gdm9pZCBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNo Q2FsbGJhY2soQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCQkJCQkJ ICB2b2lkICphcmcpOworZXh0ZXJuIGJvb2wgQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZSh2b2lk KTsKKwogI2VuZGlmCQkJCQkJCS8qIFRSSUdHRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2ZvcmVpZ25fa2V5Lm91dAppbmRleCAwODI2ZjUxODAwNC4uMjE3OWQyYThlOGYgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CkBAIC0zNTA0LDMgKzM1MDQs MTI5IEBAIERFVEFJTDogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtwYXJ0MTNfdDEKIGRyb3Ag Y2FzY2FkZXMgdG8gdGFibGUgZmtwYXJ0MTNfdDIKIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtw YXJ0MTNfdDMKIFJFU0VUIHNlYXJjaF9wYXRoOworLS0gVGVzdHMgZm9yZWlnbiBrZXkgY2hlY2sg ZmFzdC1wYXRoIG5vLWNhY2hlIHBhdGguCitDUkVBVEUgVEFCTEUgZnBfcGtfYWx0ZXIgKGEgaW50 IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2FsdGVyIFNFTEVDVCBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwKTsKK0NSRUFURSBUQUJMRSBmcF9ma19hbHRlciAoYSBpbnQpOworSU5TRVJU IElOVE8gZnBfZmtfYWx0ZXIgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworLS0gVmFs aWRhdGlvbiBwYXRoOiBzaG91bGQgc3VjY2VlZAorQUxURVIgVEFCTEUgZnBfZmtfYWx0ZXIgQURE IEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIGZwX3BrX2FsdGVyOworSU5TRVJUIElOVE8gZnBf ZmtfYWx0ZXIgVkFMVUVTICgxMDEpOyAgLS0gc2hvdWxkIGZhaWwgKGNvbnN0cmFpbnQgYWN0aXZl KQorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19hbHRlciIgdmlvbGF0 ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtfYWx0ZXJfYV9ma2V5IgorREVUQUlMOiAg S2V5IChhKT0oMTAxKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGtfYWx0ZXIiLgorRFJP UCBUQUJMRSBmcF9ma19hbHRlciwgZnBfcGtfYWx0ZXI7CistLSBTZXBhcmF0ZSB0ZXN0OiB2YWxp ZGF0aW9uIGNhdGNoZXMgZXhpc3RpbmcgdmlvbGF0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfYWx0 ZXIyIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19hbHRlcjIgVkFMVUVT ICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19hbHRlcjIgKGEgaW50KTsKK0lOU0VSVCBJTlRPIGZw X2ZrX2FsdGVyMiBWQUxVRVMgKDEpLCAoMjAwKTsgIC0tIDIwMCBoYXMgbm8gUEsgbWF0Y2gKK0FM VEVSIFRBQkxFIGZwX2ZrX2FsdGVyMiBBREQgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBf cGtfYWx0ZXIyOyAgLS0gc2hvdWxkIGZhaWwKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0 YWJsZSAiZnBfZmtfYWx0ZXIyIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9m a19hbHRlcjJfYV9ma2V5IgorREVUQUlMOiAgS2V5IChhKT0oMjAwKSBpcyBub3QgcHJlc2VudCBp biB0YWJsZSAiZnBfcGtfYWx0ZXIyIi4KK0RST1AgVEFCTEUgZnBfZmtfYWx0ZXIyLCBmcF9wa19h bHRlcjI7CistLSBUZXN0cyB0aGF0IHRoZSBmYXN0LXBhdGggaGFuZGxlcyBjYWNoaW5nIGZvciBt dWx0aXBsZSBjb25zdHJhaW50cworQ1JFQVRFIFRBQkxFIGZwX3BrMSAoYSBpbnQgUFJJTUFSWSBL RVkpOworQ1JFQVRFIFRBQkxFIGZwX3BrMiAoYiBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElO VE8gZnBfcGsxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9wazIgVkFMVUVTICgxKTsKK0NS RUFURSBUQUJMRSBmcF9tdWx0aV9mayAoCisgICAgYSBpbnQgUkVGRVJFTkNFUyBmcF9wazEsCisg ICAgYiBpbnQgUkVGRVJFTkNFUyBmcF9wazIKKyk7CitJTlNFUlQgSU5UTyBmcF9tdWx0aV9mayBW QUxVRVMgKDEsIDEpOyAgLS0gdHdvIGNvbnN0cmFpbnRzLCBvbmUgYmF0Y2gKK0lOU0VSVCBJTlRP IGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMik7ICAtLSBzZWNvbmQgY29uc3RyYWludCBmYWlscwor RVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9tdWx0aV9mayIgdmlvbGF0ZXMg Zm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfbXVsdGlfZmtfYl9ma2V5IgorREVUQUlMOiAgS2V5 IChiKT0oMikgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZwX3BrMiIuCitEUk9QIFRBQkxFIGZw X211bHRpX2ZrLCBmcF9wazEsIGZwX3BrMjsKKy0tIFRlc3QgdGhhdCBmYXN0LXBhdGggY2FjaGUg aGFuZGxlcyBkZWZlcnJlZCBjb25zdHJhaW50cyBhbmQgU0VUIENPTlNUUkFJTlRTIElNTUVESUFU RQorQ1JFQVRFIFRBQkxFIGZwX3BrX2RlZmVyIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgZnBfZmtfZGVmZXIgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZGVmZXIgREVGRVJSQUJM RSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElOVE8gZnBfcGtfZGVmZXIgVkFMVUVTICgx KSwgKDIpOworQkVHSU47CitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDEpOworSU5T RVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgyKTsKK1NFVCBDT05TVFJBSU5UUyBBTEwgSU1N RURJQVRFOyAgLS0gZmlyZXMgYmF0Y2ggY2FsbGJhY2sgaGVyZQorSU5TRVJUIElOVE8gZnBfZmtf ZGVmZXIgVkFMVUVTICgzKTsgIC0tIHNob3VsZCBmYWlsLCBhbHNvIHRlc3RzIHRoYXQgY2FjaGUg d2FzIGNsZWFuZWQgdXAKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtf ZGVmZXIiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX2RlZmVyX2FfZmtl eSIKK0RFVEFJTDogIEtleSAoYSk9KDMpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19k ZWZlciIuCitDT01NSVQ7CitEUk9QIFRBQkxFIGZwX3BrX2RlZmVyLCBmcF9ma19kZWZlcjsKKy0t IFN1YnRyYW5zYWN0aW9uIGFib3J0OiBjYWNoZWQgc3RhdGUgbXVzdCBiZSBpbnZhbGlkYXRlZCBv biBST0xMQkFDSyBUTworQ1JFQVRFIFRBQkxFIGZwX3BrX3N1YnhhY3QgKGEgaW50IFBSSU1BUlkg S0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19zdWJ4YWN0IChhIGludCBSRUZFUkVOQ0VTIGZwX3Br X3N1YnhhY3QpOworSU5TRVJUIElOVE8gZnBfcGtfc3VieGFjdCBWQUxVRVMgKDEpLCAoMik7CitC RUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK1NBVkVQT0lOVCBz cDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZBTFVFUyAoMik7CitST0xMQkFDSyBUTyBz cDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxF Q1QgKiBGUk9NIGZwX2ZrX3N1YnhhY3Q7CisgYSAKKy0tLQorIDEKKyAxCisoMiByb3dzKQorCitE Uk9QIFRBQkxFIGZwX2ZrX3N1YnhhY3QsIGZwX3BrX3N1YnhhY3Q7CistLSBGSyBjaGVjayBtdXN0 IHNlZSBQSyByb3dzIGluc2VydGVkIGJ5IGVhcmxpZXIgQUZURVIgdHJpZ2dlcnMKKy0tIGZpcmlu ZyBvbiB0aGUgc2FtZSBzdGF0ZW1lbnQKK0NSRUFURSBUQUJMRSBmcF9wa19jY2kgKGEgaW50IFBS SU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19jY2kgKGEgaW50IFJFRkVSRU5DRVMgZnBf cGtfY2NpKTsKK0NSRUFURSBGVU5DVElPTiBmcF9hdXRvX3BrKCkgUkVUVVJOUyB0cmlnZ2VyIEFT ICQkCitCRUdJTgorICBSQUlTRSBOT1RJQ0UgJ2ZwX2F1dG9fcGsgY2FsbGVkJzsKKyAgSU5TRVJU IElOVE8gZnBfcGtfY2NpIFZBTFVFUyAoTkVXLmEpOworICBSRVRVUk4gTkVXOworRU5EICQkIExB TkdVQUdFIHBscGdzcWw7CistLSBOYW1lIHNvcnRzIGJlZm9yZSB0aGUgUkkgdHJpZ2dlciwgc28g ZmlyZXMgZmlyc3QgcGVyIHJvdworQ1JFQVRFIFRSSUdHRVIgIkFBQV9hdXRvIiBBRlRFUiBJTlNF UlQgT04gZnBfZmtfY2NpCisgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIGZwX2F1dG9f cGsoKTsKKy0tIFNob3VsZCBzdWNjZWVkOiBBQUFfYXV0byBwcm92aXNpb25zIHRoZSBQSyByb3cg YmVmb3JlIFJJIGNoZWNrCitJTlNFUlQgSU5UTyBmcF9ma19jY2kgVkFMVUVTICgxKSwgKDIpLCAo Myk7CitOT1RJQ0U6ICBmcF9hdXRvX3BrIGNhbGxlZAorTk9USUNFOiAgZnBfYXV0b19wayBjYWxs ZWQKK05PVElDRTogIGZwX2F1dG9fcGsgY2FsbGVkCitEUk9QIFRBQkxFIGZwX2ZrX2NjaSwgZnBf cGtfY2NpOworRFJPUCBGVU5DVElPTiBmcF9hdXRvX3BrOworLS0gTXVsdGktY29sdW1uIEZLOiBl eGVyY2lzZXMgYmF0Y2hlZCBwZXItcm93IHByb2Jpbmcgd2l0aCBjb21wb3NpdGUga2V5cworQ1JF QVRFIFRBQkxFIGZwX3BrX211bHRpIChhIGludCwgYiBpbnQsIFBSSU1BUlkgS0VZIChhLCBiKSk7 CitJTlNFUlQgSU5UTyBmcF9wa19tdWx0aSBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAxMDApIGk7CitDUkVBVEUgVEFCTEUgZnBfZmtfbXVsdGkgKHggaW50LCBhIGludCwgYiBp bnQsCisgICAgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5DRVMgZnBfcGtfbXVsdGkpOworSU5T RVJUIElOVE8gZnBfZmtfbXVsdGkgU0VMRUNUIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgMTAwKSBpOworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkgVkFMVUVTICgxLCA5OTksIDk5OSk7 CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2ZrX211bHRpIiB2aW9sYXRl cyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19tdWx0aV9hX2JfZmtleSIKK0RFVEFJTDog IEtleSAoYSwgYik9KDk5OSwgOTk5KSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGtfbXVs dGkiLgorRFJPUCBUQUJMRSBmcF9ma19tdWx0aSwgZnBfcGtfbXVsdGk7CistLSBEZWZlcnJlZCBj b25zdHJhaW50OiBiYXRjaCBmbHVzaGVkIGF0IENPTU1JVCwgbm90IGF0IHN0YXRlbWVudCBlbmQK K0NSRUFURSBUQUJMRSBmcF9wa19jb21taXQgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBU QUJMRSBmcF9ma19jb21taXQgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfY29tbWl0CisgICAgREVG RVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElOVE8gZnBfcGtfY29tbWl0IFZB TFVFUyAoMSk7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDEpOwor SU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19j b21taXQgVkFMVUVTICg5OTkpOworQ09NTUlUOworRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9u IHRhYmxlICJmcF9ma19jb21taXQiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZw X2ZrX2NvbW1pdF9hX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEpPSg5OTkpIGlzIG5vdCBwcmVzZW50 IGluIHRhYmxlICJmcF9wa19jb21taXQiLgorRFJPUCBUQUJMRSBmcF9ma19jb21taXQsIGZwX3Br X2NvbW1pdDsKKy0tIENyb3NzLXR5cGUgRksgd2l0aCBidWxrIGluc2VydDogaW50OCBGSyByZWZl cmVuY2luZyBpbnQ0IFBLLAorLS0gdmFsdWVzIGNhc3QgZHVyaW5nIGFycmF5IGNvbnN0cnVjdGlv bgorQ1JFQVRFIFRBQkxFIGZwX3BrX2Nyb3NzIChhIGludDQgUFJJTUFSWSBLRVkpOworSU5TRVJU IElOVE8gZnBfcGtfY3Jvc3MgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAyMDApOworQ1JFQVRF IFRBQkxFIGZwX2ZrX2Nyb3NzIChhIGludDggUkVGRVJFTkNFUyBmcF9wa19jcm9zcyk7CitJTlNF UlQgSU5UTyBmcF9ma19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitJTlNF UlQgSU5UTyBmcF9ma19jcm9zcyBWQUxVRVMgKDk5OSk7CitFUlJPUjogIGluc2VydCBvciB1cGRh dGUgb24gdGFibGUgImZwX2ZrX2Nyb3NzIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50 ICJmcF9ma19jcm9zc19hX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEpPSg5OTkpIGlzIG5vdCBwcmVz ZW50IGluIHRhYmxlICJmcF9wa19jcm9zcyIuCitEUk9QIFRBQkxFIGZwX2ZrX2Nyb3NzLCBmcF9w a19jcm9zczsKKy0tIER1cGxpY2F0ZSBGSyB2YWx1ZXM6IHdoZW4gdXNpbmcgdGhlIGJhdGNoZWQg U0FPUCBwYXRoLCBldmVyeQorLS0gcm93IG11c3QgYmUgcmVjb2duaXplZCBhcyBzYXRpc2ZpZWQs IG5vdCBqdXN0IHRoZSBmaXJzdCBtYXRjaAorQ1JFQVRFIFRBQkxFIGZwX3BrX2R1cCAoYSBpbnQg UFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfZHVwIFZBTFVFUyAoMSk7CitDUkVBVEUg VEFCTEUgZnBfZmtfZHVwIChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX2R1cCk7CitJTlNFUlQgSU5U TyBmcF9ma19kdXAgU0VMRUNUIDEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKK0RST1Ag VEFCTEUgZnBfZmtfZHVwLCBmcF9wa19kdXA7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9mb3JlaWduX2tleS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5z cWwKaW5kZXggZTllZTI5MzMxY2IuLjdhNzI5NDg2YmMyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9y ZWlnbl9rZXkuc3FsCkBAIC0yNDk4LDMgKzI0OTgsMTIxIEBAIFdJVEggY3RlIEFTICgKIAogRFJP UCBTQ0hFTUEgZmtwYXJ0MTMgQ0FTQ0FERTsKIFJFU0VUIHNlYXJjaF9wYXRoOworCistLSBUZXN0 cyBmb3JlaWduIGtleSBjaGVjayBmYXN0LXBhdGggbm8tY2FjaGUgcGF0aC4KK0NSRUFURSBUQUJM RSBmcF9wa19hbHRlciAoYSBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfYWx0 ZXIgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Fs dGVyIChhIGludCk7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMCk7CistLSBWYWxpZGF0aW9uIHBhdGg6IHNob3VsZCBzdWNjZWVkCitBTFRFUiBU QUJMRSBmcF9ma19hbHRlciBBREQgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0 ZXI7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlciBWQUxVRVMgKDEwMSk7ICAtLSBzaG91bGQgZmFp bCAoY29uc3RyYWludCBhY3RpdmUpCitEUk9QIFRBQkxFIGZwX2ZrX2FsdGVyLCBmcF9wa19hbHRl cjsKKworLS0gU2VwYXJhdGUgdGVzdDogdmFsaWRhdGlvbiBjYXRjaGVzIGV4aXN0aW5nIHZpb2xh dGlvbgorQ1JFQVRFIFRBQkxFIGZwX3BrX2FsdGVyMiAoYSBpbnQgUFJJTUFSWSBLRVkpOworSU5T RVJUIElOVE8gZnBfcGtfYWx0ZXIyIFZBTFVFUyAoMSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfYWx0 ZXIyIChhIGludCk7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlcjIgVkFMVUVTICgxKSwgKDIwMCk7 ICAtLSAyMDAgaGFzIG5vIFBLIG1hdGNoCitBTFRFUiBUQUJMRSBmcF9ma19hbHRlcjIgQUREIEZP UkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIGZwX3BrX2FsdGVyMjsgIC0tIHNob3VsZCBmYWlsCitE Uk9QIFRBQkxFIGZwX2ZrX2FsdGVyMiwgZnBfcGtfYWx0ZXIyOworCistLSBUZXN0cyB0aGF0IHRo ZSBmYXN0LXBhdGggaGFuZGxlcyBjYWNoaW5nIGZvciBtdWx0aXBsZSBjb25zdHJhaW50cworQ1JF QVRFIFRBQkxFIGZwX3BrMSAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX3Br MiAoYiBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGsxIFZBTFVFUyAoMSk7CitJ TlNFUlQgSU5UTyBmcF9wazIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9tdWx0aV9mayAo CisgICAgYSBpbnQgUkVGRVJFTkNFUyBmcF9wazEsCisgICAgYiBpbnQgUkVGRVJFTkNFUyBmcF9w azIKKyk7CitJTlNFUlQgSU5UTyBmcF9tdWx0aV9mayBWQUxVRVMgKDEsIDEpOyAgLS0gdHdvIGNv bnN0cmFpbnRzLCBvbmUgYmF0Y2gKK0lOU0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwg Mik7ICAtLSBzZWNvbmQgY29uc3RyYWludCBmYWlscworRFJPUCBUQUJMRSBmcF9tdWx0aV9maywg ZnBfcGsxLCBmcF9wazI7CisKKy0tIFRlc3QgdGhhdCBmYXN0LXBhdGggY2FjaGUgaGFuZGxlcyBk ZWZlcnJlZCBjb25zdHJhaW50cyBhbmQgU0VUIENPTlNUUkFJTlRTIElNTUVESUFURQorQ1JFQVRF IFRBQkxFIGZwX3BrX2RlZmVyIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBf ZmtfZGVmZXIgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZGVmZXIgREVGRVJSQUJMRSBJTklUSUFM TFkgREVGRVJSRUQpOworSU5TRVJUIElOVE8gZnBfcGtfZGVmZXIgVkFMVUVTICgxKSwgKDIpOwor CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5U TyBmcF9ma19kZWZlciBWQUxVRVMgKDIpOworU0VUIENPTlNUUkFJTlRTIEFMTCBJTU1FRElBVEU7 ICAtLSBmaXJlcyBiYXRjaCBjYWxsYmFjayBoZXJlCitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBW QUxVRVMgKDMpOyAgLS0gc2hvdWxkIGZhaWwsIGFsc28gdGVzdHMgdGhhdCBjYWNoZSB3YXMgY2xl YW5lZCB1cAorQ09NTUlUOworRFJPUCBUQUJMRSBmcF9wa19kZWZlciwgZnBfZmtfZGVmZXI7CisK Ky0tIFN1YnRyYW5zYWN0aW9uIGFib3J0OiBjYWNoZWQgc3RhdGUgbXVzdCBiZSBpbnZhbGlkYXRl ZCBvbiBST0xMQkFDSyBUTworQ1JFQVRFIFRBQkxFIGZwX3BrX3N1YnhhY3QgKGEgaW50IFBSSU1B UlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19zdWJ4YWN0IChhIGludCBSRUZFUkVOQ0VTIGZw X3BrX3N1YnhhY3QpOworSU5TRVJUIElOVE8gZnBfcGtfc3VieGFjdCBWQUxVRVMgKDEpLCAoMik7 CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK1NBVkVQT0lO VCBzcDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZBTFVFUyAoMik7CitST0xMQkFDSyBU TyBzcDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitT RUxFQ1QgKiBGUk9NIGZwX2ZrX3N1YnhhY3Q7CitEUk9QIFRBQkxFIGZwX2ZrX3N1YnhhY3QsIGZw X3BrX3N1YnhhY3Q7CisKKy0tIEZLIGNoZWNrIG11c3Qgc2VlIFBLIHJvd3MgaW5zZXJ0ZWQgYnkg ZWFybGllciBBRlRFUiB0cmlnZ2VycworLS0gZmlyaW5nIG9uIHRoZSBzYW1lIHN0YXRlbWVudAor Q1JFQVRFIFRBQkxFIGZwX3BrX2NjaSAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxF IGZwX2ZrX2NjaSAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19jY2kpOworCitDUkVBVEUgRlVOQ1RJ T04gZnBfYXV0b19waygpIFJFVFVSTlMgdHJpZ2dlciBBUyAkJAorQkVHSU4KKyAgUkFJU0UgTk9U SUNFICdmcF9hdXRvX3BrIGNhbGxlZCc7CisgIElOU0VSVCBJTlRPIGZwX3BrX2NjaSBWQUxVRVMg KE5FVy5hKTsKKyAgUkVUVVJOIE5FVzsKK0VORCAkJCBMQU5HVUFHRSBwbHBnc3FsOworCistLSBO YW1lIHNvcnRzIGJlZm9yZSB0aGUgUkkgdHJpZ2dlciwgc28gZmlyZXMgZmlyc3QgcGVyIHJvdwor Q1JFQVRFIFRSSUdHRVIgIkFBQV9hdXRvIiBBRlRFUiBJTlNFUlQgT04gZnBfZmtfY2NpCisgIEZP UiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKTsKKworLS0gU2hvdWxkIHN1 Y2NlZWQ6IEFBQV9hdXRvIHByb3Zpc2lvbnMgdGhlIFBLIHJvdyBiZWZvcmUgUkkgY2hlY2sKK0lO U0VSVCBJTlRPIGZwX2ZrX2NjaSBWQUxVRVMgKDEpLCAoMiksICgzKTsKKworRFJPUCBUQUJMRSBm cF9ma19jY2ksIGZwX3BrX2NjaTsKK0RST1AgRlVOQ1RJT04gZnBfYXV0b19wazsKKworLS0gTXVs dGktY29sdW1uIEZLOiBleGVyY2lzZXMgYmF0Y2hlZCBwZXItcm93IHByb2Jpbmcgd2l0aCBjb21w b3NpdGUga2V5cworQ1JFQVRFIFRBQkxFIGZwX3BrX211bHRpIChhIGludCwgYiBpbnQsIFBSSU1B UlkgS0VZIChhLCBiKSk7CitJTlNFUlQgSU5UTyBmcF9wa19tdWx0aSBTRUxFQ1QgaSwgaSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitDUkVBVEUgVEFCTEUgZnBfZmtfbXVsdGkgKHgg aW50LCBhIGludCwgYiBpbnQsCisgICAgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5DRVMgZnBf cGtfbXVsdGkpOworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkgU0VMRUNUIGksIGksIGkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkgVkFMVUVT ICgxLCA5OTksIDk5OSk7CitEUk9QIFRBQkxFIGZwX2ZrX211bHRpLCBmcF9wa19tdWx0aTsKKwor LS0gRGVmZXJyZWQgY29uc3RyYWludDogYmF0Y2ggZmx1c2hlZCBhdCBDT01NSVQsIG5vdCBhdCBz dGF0ZW1lbnQgZW5kCitDUkVBVEUgVEFCTEUgZnBfcGtfY29tbWl0IChhIGludCBQUklNQVJZIEtF WSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY29tbWl0IChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX2Nv bW1pdAorICAgIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEKTsKK0lOU0VSVCBJTlRPIGZw X3BrX2NvbW1pdCBWQUxVRVMgKDEpOworQkVHSU47CitJTlNFUlQgSU5UTyBmcF9ma19jb21taXQg VkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDEpOworSU5TRVJU IElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoOTk5KTsKK0NPTU1JVDsKK0RST1AgVEFCTEUgZnBf ZmtfY29tbWl0LCBmcF9wa19jb21taXQ7CisKKy0tIENyb3NzLXR5cGUgRksgd2l0aCBidWxrIGlu c2VydDogaW50OCBGSyByZWZlcmVuY2luZyBpbnQ0IFBLLAorLS0gdmFsdWVzIGNhc3QgZHVyaW5n IGFycmF5IGNvbnN0cnVjdGlvbgorQ1JFQVRFIFRBQkxFIGZwX3BrX2Nyb3NzIChhIGludDQgUFJJ TUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfY3Jvc3MgU0VMRUNUIGdlbmVyYXRlX3Nlcmll cygxLCAyMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Nyb3NzIChhIGludDggUkVGRVJFTkNFUyBm cF9wa19jcm9zcyk7CitJTlNFUlQgSU5UTyBmcF9ma19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2Vy aWVzKDEsIDIwMCk7CitJTlNFUlQgSU5UTyBmcF9ma19jcm9zcyBWQUxVRVMgKDk5OSk7CitEUk9Q IFRBQkxFIGZwX2ZrX2Nyb3NzLCBmcF9wa19jcm9zczsKKworLS0gRHVwbGljYXRlIEZLIHZhbHVl czogd2hlbiB1c2luZyB0aGUgYmF0Y2hlZCBTQU9QIHBhdGgsIGV2ZXJ5CistLSByb3cgbXVzdCBi ZSByZWNvZ25pemVkIGFzIHNhdGlzZmllZCwgbm90IGp1c3QgdGhlIGZpcnN0IG1hdGNoCitDUkVB VEUgVEFCTEUgZnBfcGtfZHVwIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9w a19kdXAgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19kdXAgKGEgaW50IFJFRkVSRU5D RVMgZnBfcGtfZHVwKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2R1cCBTRUxFQ1QgMSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLCAxMDApOworRFJPUCBUQUJMRSBmcF9ma19kdXAsIGZwX3BrX2R1cDsKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNjZjYjE4YmE1YjkuLjJhNWQ5Mzg3ZmFmIDEwMDY0 NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzAsNiArMzAsOCBAQCBBZGRGb3JlaWduVXBkYXRl VGFyZ2V0c19mdW5jdGlvbgogQWRkckluZm8KIEFmZml4Tm9kZQogQWZmaXhOb2RlRGF0YQorQWZ0 ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjaworQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtCiBBZnRlclRy aWdnZXJFdmVudAogQWZ0ZXJUcmlnZ2VyRXZlbnRDaHVuawogQWZ0ZXJUcmlnZ2VyRXZlbnREYXRh CkBAIC0yNDg1LDYgKzI0ODcsNyBAQCBSSVgKIFJJX0NvbXBhcmVIYXNoRW50cnkKIFJJX0NvbXBh cmVLZXkKIFJJX0NvbnN0cmFpbnRJbmZvCitSSV9GYXN0UGF0aEVudHJ5CiBSSV9RdWVyeUhhc2hF bnRyeQogUklfUXVlcnlLZXkKIFJURUtpbmQKLS0gCjIuNDcuMwoK --000000000000818fbb064e3bf7b9--