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 1w50EX-002nT6-0M for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 11:47:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w50EV-006URd-1f for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 11:47:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w50EV-006URU-0E for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 11:47:39 +0000 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w50ES-00000000s0F-1DQP for pgsql-hackers@postgresql.org; Tue, 24 Mar 2026 11:47:39 +0000 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-35691a231a7so737301a91.3 for ; Tue, 24 Mar 2026 04:47:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774352854; cv=none; d=google.com; s=arc-20240605; b=jxCcLLjxqH9p+y7O5BQAGAxln3tzwSRT7c6Au52CYWBp0zmqNhdx/OcsJofepdtAU/ PX7DUFyeMBCnK+l6h6gStBcSQpBqVBVr0DFQ4TwanFxJxpwBaMM1fREkwBgkhw+YKh+i tChCTt+PyzhLEjY4dIibmdLDMKOhITn6MseOKVdGLqhBrmQ/6qR8/RfMlaouDtnDD2p0 j9mlDDGCjROZ3+jQaaDf+ZTFQA8yXReE3B/i3DGseN3z/jeBeZzv/MuWDdtFlervDHP8 k+2ROefhpNUOc30NzknevXSpRlEukM4dqP8GJiWeJHJ8M4r/IOExdeLRWX+9krF46cg4 IBFA== 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=N4JQmrgYqZgirxasv+eeR4iOMV8Yo9WbhjOoc+UG0Ug=; fh=N9nld3BjtfxTRegOrh1P0qg4v4bh2KOlnnnAYxtIlkE=; b=FGLv8DcIORCPidvpGtV6N/5k9B+Vd1wwuT/srRWAFpn62wO6n8L64MmqLzf6X65MFC PoNGHwe391UsW/DSLlti6tMcZJROuwelY02VYaFWlt3prRk4gEJ0fuiBInTkumnj0hvJ 0dovaD5rSc6+jtj53EK/3axl1B9rSU8P3L2t18306MDuBLJnoeNEaYX3C2g/aLPyOhyC 9ftycToYFW+ro8nta3W/1psgpxBPkJROHnna6NeCwxbutlq+B+vUVmyxAEQp6eDpsxvi MwD6eicGJvG+TP+XfNsFgu68+GBMkE5kbl5C9JyuYxCEwsn6UccicUIc26VOkJXPT99+ OpGg==; 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=1774352854; x=1774957654; 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=N4JQmrgYqZgirxasv+eeR4iOMV8Yo9WbhjOoc+UG0Ug=; b=qlRsv2673p1KEnAdMhEiHhF8uM1u+DwagWWdzv5PPAUT+9A+zpMmFaTv5fSYXUNa6B f4n/DFj4rFnedXeIMFJQKGbNzXYgRlA0cqhpaE+gfPk+gI8iJmYwpai+0FUXWNKHC1Zv QjyJmi8XO6pfAKqo9+o3Wphn0bTEDHMKkPURfnBnJGMr/fg25kU6z9IkjuaPwBrC4sVO 7zZJC8Pn9ZNe1LzKR9V3k/ElPaAmr+bmJXUSS/HPerSeJPwYErHqz0yUH4KFNHKK2wMx CenJ/b/kzrGuvJ6aRhYTz3Rr/EweZDJ+Wia8fbBKs+5AAIpwJE5O9gkOhBaU+HbVUlCP Fbog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774352854; x=1774957654; 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=N4JQmrgYqZgirxasv+eeR4iOMV8Yo9WbhjOoc+UG0Ug=; b=BItK+qpUh7dl9WRpaY+xiwZMUIz8Cn0ILft0UIOujKk8j7jBp92un3SMDaOXNfWAal sTZLNlYrqB4efoZ8YChbm2eqdIiqsQ1lEAnbEL8aJxQs5UlqoQkb9NgA8r1fb7B0b6Xe JH5XiTD6UQtmmoMDljrxKJ9ovxmbqGG2gQCioc1GL+ehP+JAFkauQHnKw1z3eucBSvCe /UXWzo5iVDt50+SQ0G+oUZ/lfgyKDGU3V1cX8QfNRS7ieAQNUZh9gDwZLwJKebG64bPI fR8Rr5h+AUYa2Koo5I6DbSkO4mwAf7vlm9soIQO/Je6pSjkYppqnF4m+GUym/1xstOt4 MIdg== X-Forwarded-Encrypted: i=1; AJvYcCU1PEJsB1SVBTrBa+t7LcTEENGEJhHZEs+NFgKJr8PtX8a0IsEcyHNFqxrbYtmKcuLBmSRdxiSbM8/V6tig@postgresql.org X-Gm-Message-State: AOJu0YzsvyrM6S7srOWBvp0RWXejCCO5CO9iH4utjRT5PkS1t7/Cgevc 7uk3D6XL1VvJBWbRwZ4RrHbbPIT5KfBteyrFUB/YpjfnXiZP6339HedmhiE1NpEJkflhwiHojLC 19UAHaem8fDxjpXTMX5jaD+2llAgrpI0= X-Gm-Gg: ATEYQzxbNcrESBIM3LvVj1Ib9Re00oIL/fmoxsQZFu7PLViRo/Y04SPSwilUfncKVXL EnZqOWl6tXLKvR0aJBv9vCa8IB/FHL1rKnedlyRkT5YYeRL5dXh6i4UQ3mdsZtTQ28P3n/kkM9j o0cA1gZh3nC0fdI8t2BRCBVoHmmlWVI+2xUOf+0OglPFYtOh/ptp53kBBz3fXqivmsqGmExOIn2 gXMNK9ux9vdNpDuyLK+xek/MRPozJCb7Xoiv7TjoX1pKd+Eu9oM9Xpe/ET2OlqC/yEm2UO159/b JKjm2H+Kh8oIQzkxYgM= X-Received: by 2002:a17:90a:517:b0:35b:e4f8:55ab with SMTP id 98e67ed59e1d1-35be4f87ae4mr5861704a91.6.1774352854342; Tue, 24 Mar 2026 04:47:34 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> In-Reply-To: From: Amit Langote Date: Tue, 24 Mar 2026 20:47:17 +0900 X-Gm-Features: AaiRm50g2hhqfjnu36y8r27fSXUdSXfjeHUYgZ7pWzRAkSk7Jh5hQFBORBXanCE 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="00000000000096fdfc064dc3b7f9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000096fdfc064dc3b7f9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Junwang, On Fri, Mar 20, 2026 at 1:20=E2=80=AFAM Junwang Zhao wr= ote: > I squashed 0004 into 0003 so that each file can be committed independentl= y. > I also runned pgindent for each file. Thanks for that. Here's another version. In 0001, I noticed that the condition change in ri_HashCompareOp could be simplified further. Also improved the commentary surrounding that. I also updated the commit message to clarify parity with the SPI path. Updated the commit message of 0002 to talk about why caching the snapshot for the entire trigger firing cycle of a given constraint makes a trade off compared to the SPI path which retakes the snapshot for every row checked and could in principle avoid failure for FK rows whose corresponding PK row was added by a concurrently committed transaction, at least in the READ COMMITTED case. Updated the commit message of 0003 to clarify that it replaces ri_FastPathCheckCached() from 0002 with the BatchAdd/BatchFlush pair, and that the cached resources are used unchanged -- only the probing cadence changes from per-row to per-flush. Per-flush CCI is safe because all AFTER triggers for the buffered rows have already fired by flush time; a new test case is added to show that. Finally I added a short line at the end of each patch's commit message to mention the speedup observed at each stage. There are placeholders such as that I will replace by an actual commit hash before pushing. I will continue staring at these for any remaining issues before pushing them one-by-one at some point by early next week. Happy to hear any thoughts before I push. --=20 Thanks, Amit Langote --00000000000096fdfc064dc3b7f9 Content-Type: application/octet-stream; name="v9-0003-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pat.patch" Content-Disposition: attachment; filename="v9-0003-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pat.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn4jgecu0 RnJvbSAzMDg2NDUyMjkxYTgxODQ0YzlmOTc4OTA4MjM2MmE3ZTU3NjlkZTY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMjQgTWFyIDIwMjYgMjA6MDk6MDcgKzA5MDAKU3ViamVjdDogW1BBVENIIHY5 IDMvM10gQmF0Y2ggRksgcm93cyBhbmQgdXNlIFNLX1NFQVJDSEFSUkFZIGZvciBmYXN0LXBhdGgK IHByb2JlcwoKSW5zdGVhZCBvZiBwcm9iaW5nIHRoZSBQSyBpbmRleCBvbiBlYWNoIHRyaWdnZXIg aW52b2NhdGlvbiwgYnVmZmVyCkZLIHJvd3MgaW4gdGhlIHBlci1jb25zdHJhaW50IGNhY2hlIGVu dHJ5IChSSV9GYXN0UGF0aEVudHJ5KSBhbmQKZmx1c2ggdGhlbSBhcyBhIGJhdGNoLiAgV2hlbiB0 aGUgYnVmZmVyIGZpbGxzICg2NCByb3dzKSBvciB0aGUKdHJpZ2dlci1maXJpbmcgY3ljbGUgZW5k cywgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKCkgcHJvYmVzIHRoZSBpbmRleApmb3IgYWxsIGJ1ZmZl cmVkIHJvd3MsIHNoYXJpbmcgYSBzaW5nbGUgQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQgYW5kCnNl Y3VyaXR5IGNvbnRleHQgc3dpdGNoIGFjcm9zcyB0aGUgYmF0Y2guCgpyaV9GYXN0UGF0aENoZWNr Q2FjaGVkKCkgZnJvbSA8Y29tbWl0LWhhc2gtMDAwMj4sIHdoaWNoIHByb2JlZCB0aGUKaW5kZXgg b25jZSBwZXIgdHJpZ2dlciBpbnZvY2F0aW9uIHVzaW5nIGNhY2hlZCByZXNvdXJjZXMsIGlzIHJl cGxhY2VkCmJ5IHJpX0Zhc3RQYXRoQmF0Y2hBZGQoKSB3aGljaCBidWZmZXJzIHJvd3MsIGFuZApy aV9GYXN0UGF0aEJhdGNoRmx1c2goKSB3aGljaCBwcm9iZXMgZm9yIHRoZSBlbnRpcmUgYmF0Y2gg YXQgb25jZS4KVGhlIGNhY2hlZCByZXNvdXJjZXMgKHBrX3JlbCwgaWR4X3JlbCwgc2NhbmRlc2Ms IHNsb3QsIHNuYXBzaG90KSBhcmUKdXNlZCB1bmNoYW5nZWQ7IHRoZSBkaWZmZXJlbmNlIGlzIHRo YXQgQ0NJLCBzZWN1cml0eSBjb250ZXh0IHN3aXRjaCwKYW5kIGN1cmNpZCBwYXRjaGluZyBub3cg aGFwcGVuIG9uY2UgcGVyIGZsdXNoIHJhdGhlciB0aGFuIHBlciByb3cuClBlci1mbHVzaCBDQ0kg aXMgc2FmZSBiZWNhdXNlIGJ5IHRoZSB0aW1lIGEgZmx1c2ggcnVucywgYWxsIEFGVEVSCnRyaWdn ZXJzIGZvciB0aGUgYnVmZmVyZWQgcm93cyBoYXZlIGFscmVhZHkgZmlyZWQuCgpGb3Igc2luZ2xl LWNvbHVtbiBmb3JlaWduIGtleXMsIHRoZSBmbHVzaCBidWlsZHMgYW4gQXJyYXlUeXBlIGZyb20K dGhlIGJ1ZmZlcmVkIEZLIHZhbHVlcyAoY2FzdGluZyB0byB0aGUgUEstc2lkZSB0eXBlIGlmIG5l ZWRlZCkgYW5kCmNvbnN0cnVjdHMgYSBzY2FuIGtleSB3aXRoIHRoZSBTS19TRUFSQ0hBUlJBWSBm bGFnLiAgVGhlIGluZGV4IEFNCnNvcnRzIGFuZCBkZWR1cGxpY2F0ZXMgdGhlIGFycmF5IGludGVy bmFsbHksIHRoZW4gd2Fsa3MgbWF0Y2hpbmcKbGVhZiBwYWdlcyBpbiBvbmUgb3JkZXJlZCB0cmF2 ZXJzYWwgaW5zdGVhZCBvZiBkZXNjZW5kaW5nIGZyb20gdGhlCnJvb3Qgb25jZSBwZXIgcm93LiAg QSBtYXRjaGVkW10gYml0bWFwIHRyYWNrcyB3aGljaCBiYXRjaCBpdGVtcwp3ZXJlIHNhdGlzZmll ZDsgdW5tYXRjaGVkIGl0ZW1zIGFyZSByZXBvcnRlZCBhcyB2aW9sYXRpb25zLgoKTXVsdGktY29s dW1uIGZvcmVpZ24ga2V5cyBmYWxsIGJhY2sgdG8gYSBwZXItcm93IHByb2JlIGxvb3AgdmlhCnJp X0Zhc3RQYXRoRmx1c2hMb29wKCkuCgpGSyB0dXBsZXMgYXJlIG1hdGVyaWFsaXplZCB2aWEgRXhl Y0NvcHlTbG90SGVhcFR1cGxlKCkgaW50bwpUb3BUcmFuc2FjdGlvbkNvbnRleHQgc28gdGhleSBz dXJ2aXZlIGFjcm9zcyB0cmlnZ2VyIGludm9jYXRpb25zLgpWaW9sYXRpb25zIGFyZSByZXBvcnRl ZCBpbW1lZGlhdGVseSBkdXJpbmcgdGhlIGZsdXNoIHZpYQpyaV9SZXBvcnRWaW9sYXRpb24oKSwg d2hpY2ggZG9lcyBub3QgcmV0dXJuLgoKcmlfRmFzdFBhdGhFbmRCYXRjaCgpIGZsdXNoZXMgYW55 IHBhcnRpYWwgYmF0Y2ggYmVmb3JlIHRlYXJpbmcgZG93bgpjYWNoZWQgcmVzb3VyY2VzLiAgU2lu Y2UgdGhlIEZLIHJlbGF0aW9uIG1heSBhbHJlYWR5IGJlIGNsb3NlZCBieQpmbHVzaCB0aW1lIChl LmcuIGZvciBkZWZlcnJlZCBjb25zdHJhaW50cyBhdCBDT01NSVQpLCByZW9wZW5zIHRoZQpyZWxh dGlvbiB1c2luZyBlbnRyeS0+cmlpbmZvLT5ma19yZWxpZCBpZiBuZWVkZWQuCgpUaGUgbm9uLWNh Y2hlZCBwYXRoIChBTFRFUiBUQUJMRSB2YWxpZGF0aW9uKSBieXBhc3NlcyBiYXRjaGluZyBhbmQK Y29udGludWVzIHRvIGNhbGwgcmlfRmFzdFBhdGhDaGVjaygpIGRpcmVjdGx5IHBlciByb3cuCgpJ bnRyb2R1Y2UgdHdvIHB1cnBvc2Utc3BlY2lmaWMgbWVtb3J5IGNvbnRleHRzOgoKICAtIHNjYW5f Y3h0OiBjaGlsZCBvZiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgZm9yIGluZGV4IHNjYW4KICAgIGFs bG9jYXRpb25zIChlLmcuIF9idF9wcmVwcm9jZXNzX2tleXMpLiAgTGl2ZXMgZm9yIHRoZQogICAg dHJpZ2dlci1maXJpbmcgYmF0Y2gsIGRlbGV0ZWQgYXQgdGVhcmRvd24sIHNvIHRoZXNlIGFsbG9j YXRpb25zCiAgICBhcmUgZnJlZWQgd2hlbiB0aGUgYmF0Y2ggZW5kcyBpbnN0ZWFkIG9mIGF0IHRy YW5zYWN0aW9uIGVuZC4KCiAgLSBmbHVzaF9jeHQ6IGNoaWxkIG9mIHNjYW5fY3h0IGZvciBwZXIt Zmx1c2ggdHJhbnNpZW50IHdvcmsgKGNhc3QKICAgIHJlc3VsdHMsIHNlYXJjaCBhcnJheSkuICBS ZXNldCBhZnRlciBlYWNoIGZsdXNoOyBkZWxldGluZwogICAgc2Nhbl9jeHQgaW4gdGVhcmRvd24g YWxzbyBmcmVlcyBmbHVzaF9jeHQuCgpCZW5jaG1hcmtpbmcgc2hvd3MgdGhhdCB0b2dldGhlciB3 aXRoIDxjb21taXQtaGFzaC0wMDAxPiwKPGNvbW1pdC1oYXNoLTAwMDI+LCBidWxrIEZLIGluc2Vy dHMgYXJlIH4yLjl4IGZhc3RlciAoaW50IFBLIC8gaW50IEZLLAoxTSByb3dzLCBQSyB0YWJsZSBh bmQgaW5kZXggY2FjaGVkKS4KCkF1dGhvcjogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdt YWlsLmNvbT4KQ28tYXV0aG9yZWQtYnk6IEp1bndhbmcgWmhhbyA8emhqd3BrdUBnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRyaXN0YW4ueWltQGdtYWlsLmNvbT4KVGVzdGVkLWJ5 OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQStIaXdxRjRDMHdzM2NPK3o1Y0xrUHV2d25Bd2tTcDdzZnZnR2ozeVE9TGk2S05N cUFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMu YyAgICAgICB8IDQ0MSArKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCB8ICA0MCArKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9y ZWlnbl9rZXkuc3FsICAgICAgfCAgMzggKysKIDMgZmlsZXMgY2hhbmdlZCwgNDY2IGluc2VydGlv bnMoKyksIDUzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5k ZXggMTJkZTBkZDJjZjYuLjk5M2MzYWM0OWEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dl cnMuYwpAQCAtMTk2LDEzICsxOTYsMjggQEAgdHlwZWRlZiBzdHJ1Y3QgUklfQ29tcGFyZUhhc2hF bnRyeQogCUZtZ3JJbmZvCWNhc3RfZnVuY19maW5mbzsJLyogaW4gY2FzZSB3ZSBtdXN0IGNvZXJj ZSBpbnB1dCAqLwogfSBSSV9Db21wYXJlSGFzaEVudHJ5OwogCisvKgorICogTWF4aW11bSBudW1i ZXIgb2YgRksgcm93cyBidWZmZXJlZCBiZWZvcmUgZmx1c2hpbmcuCisgKgorICogTGFyZ2VyIGJh dGNoZXMgYW1vcnRpemUgcGVyLWZsdXNoIG92ZXJoZWFkIGFuZCBsZXQgdGhlIFNLX1NFQVJDSEFS UkFZCisgKiBwYXRoIHdhbGsgbW9yZSBsZWFmIHBhZ2VzIGluIGEgc2luZ2xlIHNvcnRlZCB0cmF2 ZXJzYWwuICBCdXQgZWFjaAorICogYnVmZmVyZWQgcm93IGlzIGEgbWF0ZXJpYWxpemVkIEhlYXBU dXBsZSBpbiBUb3BUcmFuc2FjdGlvbkNvbnRleHQsCisgKiBhbmQgdGhlIG1hdGNoZWRbXSBzY2Fu IGluIHJpX0Zhc3RQYXRoRmx1c2hBcnJheSgpIGlzIE8oYmF0Y2hfc2l6ZSkKKyAqIHBlciBpbmRl eCBtYXRjaC4gIEJlbmNobWFya2luZyBzaG93ZWQgbGl0dGxlIGRpZmZlcmVuY2UgYmV0d2VlbiAx NgorICogYW5kIDY0LCB3aXRoIDI1NiBjb25zaXN0ZW50bHkgc2xvd2VyLiAgNjQgaXMgYSByZWFz b25hYmxlIGRlZmF1bHQuCisgKi8KKyNkZWZpbmUgUklfRkFTVFBBVEhfQkFUQ0hfU0laRQk2NAor CiAvKgogICogUklfRmFzdFBhdGhFbnRyeQotICoJCVBlci1jb25zdHJhaW50IGNhY2hlIG9mIHJl c291cmNlcyBuZWVkZWQgYnkgcmlfRmFzdFBhdGhDaGVja0NhY2hlZCgpLgorICoJCVBlci1jb25z dHJhaW50IGNhY2hlIG9mIHJlc291cmNlcyBuZWVkZWQgYnkgcmlfRmFzdFBhdGhCYXRjaEZsdXNo KCkuCiAgKgogICogT25lIGVudHJ5IHBlciBjb25zdHJhaW50LCBrZXllZCBieSBwZ19jb25zdHJh aW50IE9JRC4gIENyZWF0ZWQgbGF6aWx5CiAgKiBieSByaV9GYXN0UGF0aEdldEVudHJ5KCkgb24g Zmlyc3QgdXNlIHdpdGhpbiBhIHRyaWdnZXItZmlyaW5nIGJhdGNoCiAgKiBhbmQgdG9ybiBkb3du IGJ5IHJpX0Zhc3RQYXRoVGVhcmRvd24oKSBhdCBiYXRjaCBlbmQuCisgKgorICogRksgdHVwbGVz IGFyZSBidWZmZXJlZCBpbiBiYXRjaFtdIGFjcm9zcyB0cmlnZ2VyIGludm9jYXRpb25zIGFuZAor ICogZmx1c2hlZCB3aGVuIHRoZSBidWZmZXIgZmlsbHMgb3IgdGhlIGJhdGNoIGVuZHMuCiAgKi8K IHR5cGVkZWYgc3RydWN0IFJJX0Zhc3RQYXRoRW50cnkKIHsKQEAgLTIxMCw4ICsyMjUsMTcgQEAg dHlwZWRlZiBzdHJ1Y3QgUklfRmFzdFBhdGhFbnRyeQogCVJlbGF0aW9uCXBrX3JlbDsKIAlSZWxh dGlvbglpZHhfcmVsOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7Ci0JVHVwbGVUYWJsZVNsb3Qg KnNsb3Q7CisJVHVwbGVUYWJsZVNsb3QgKnBrX3Nsb3Q7CisJVHVwbGVUYWJsZVNsb3QgKmZrX3Ns b3Q7CiAJU25hcHNob3QJc25hcHNob3Q7CQkvKiByZWdpc3RlcmVkIHNuYXBzaG90IGZvciB0aGUg c2NhbiAqLworCU1lbW9yeUNvbnRleHQgc2Nhbl9jeHQ7CQkvKiBpbmRleCBzY2FuIGFsbG9jYXRp b25zICovCisJTWVtb3J5Q29udGV4dCBmbHVzaF9jeHQ7CS8qIHNob3J0LWxpdmVkIGNvbnRleHQg Zm9yIHBlci1mbHVzaCB3b3JrICovCisKKwlIZWFwVHVwbGUJYmF0Y2hbUklfRkFTVFBBVEhfQkFU Q0hfU0laRV07CisJaW50CQkJYmF0Y2hfY291bnQ7CisKKwkvKiBGb3IgcmlfRmFzdFBhdGhFbmRC YXRjaCgpICovCisJY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbzsKIH0gUklfRmFzdFBh dGhFbnRyeTsKIAogLyoKQEAgLTI3NCw4ICsyOTgsMTQgQEAgc3RhdGljIGJvb2wgcmlfUGVyZm9y bUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJCQkJYm9vbCBkZXRl Y3ROZXdSb3dzLCBpbnQgZXhwZWN0X09LKTsKIHN0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQ2hlY2so Y29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJCQkgUmVsYXRpb24gZmtfcmVs LCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCk7Ci1zdGF0aWMgdm9pZCByaV9GYXN0UGF0aENoZWNr Q2FjaGVkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCi0JCQkJCQkJCSAgIFJlbGF0 aW9uIGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpOworc3RhdGljIHZvaWQgcmlfRmFz dFBhdGhCYXRjaEFkZChjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQkJCQlS ZWxhdGlvbiBma19yZWwsIFR1cGxlVGFibGVTbG90ICpuZXdzbG90KTsKK3N0YXRpYyB2b2lkIHJp X0Zhc3RQYXRoRmx1c2hBcnJheShSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBUdXBsZVRhYmxl U2xvdCAqZmtfc2xvdCwKKwkJCQkJCQkJICBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZv LCBSZWxhdGlvbiBma19yZWwpOworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhGbHVzaExvb3AoUklf RmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCisJCQkJCQkJ CSBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwpOworc3Rh dGljIHZvaWQgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnks CisJCQkJCQkJCSAgUmVsYXRpb24gZmtfcmVsKTsKIHN0YXRpYyBib29sIHJpX0Zhc3RQYXRoUHJv YmVPbmUoUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBpZHhfcmVsLAogCQkJCQkJCQlJbmRleFNj YW5EZXNjIHNjYW5kZXNjLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkJU25hcHNob3Qg c25hcHNob3QsIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCkBAIC0zMDAsOCArMzMw LDggQEAgcGdfbm9yZXR1cm4gc3RhdGljIHZvaWQgcmlfUmVwb3J0VmlvbGF0aW9uKGNvbnN0IFJJ X0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJCQkJCQkJICAgaW50IHF1ZXJ5bm8sIGJvb2wg aXNfcmVzdHJpY3QsIGJvb2wgcGFydGdvbmUpOwogc3RhdGljIFJJX0Zhc3RQYXRoRW50cnkgKnJp X0Zhc3RQYXRoR2V0RW50cnkoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJ CQkJCQkJIFJlbGF0aW9uIGZrX3JlbCk7Ci1zdGF0aWMgdm9pZCByaV9GYXN0UGF0aFRlYXJkb3du KHZvaWQgKmFyZyk7Ci0KK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoRW5kQmF0Y2godm9pZCAqYXJn KTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoVGVhcmRvd24odm9pZCk7CiAKIC8qCiAgKiBSSV9G S2V5X2NoZWNrIC0KQEAgLTQxMSwxNiArNDQxLDIyIEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRh dGEgKnRyaWdkYXRhKQogCSAqIGxvY2suICBUaGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50 IHRvIHRoZSBTUEkgcGF0aCBiZWxvdyBidXQgYXZvaWRzCiAJICogdGhlIHBlci1yb3cgZXhlY3V0 b3Igb3ZlcmhlYWQuCiAJICoKLQkgKiByaV9GYXN0UGF0aENoZWNrQ2FjaGVkKCkgYW5kIHJpX0Zh c3RQYXRoQ2hlY2soKSByZXBvcnQgdGhlIHZpb2xhdGlvbgorCSAqIHJpX0Zhc3RQYXRoQmF0Y2hB ZGQoKSBhbmQgcmlfRmFzdFBhdGhDaGVjaygpIHJlcG9ydCB0aGUgdmlvbGF0aW9uCiAJICogdGhl bXNlbHZlcyBpZiBubyBtYXRjaGluZyBQSyByb3cgaXMgZm91bmQsIHNvIHRoZXkgb25seSByZXR1 cm4gb24KIAkgKiBzdWNjZXNzLgogCSAqLwogCWlmIChyaV9mYXN0cGF0aF9pc19hcHBsaWNhYmxl KHJpaW5mbykpCiAJewogCQlpZiAoQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZSgpKQotCQkJcmlf RmFzdFBhdGhDaGVja0NhY2hlZChyaWluZm8sIGZrX3JlbCwgbmV3c2xvdCk7CisJCXsKKwkJCS8q IEJhdGNoZWQgcGF0aDogYnVmZmVyIGFuZCBwcm9iZSBpbiBncm91cHMgKi8KKwkJCXJpX0Zhc3RQ YXRoQmF0Y2hBZGQocmlpbmZvLCBma19yZWwsIG5ld3Nsb3QpOworCQl9CiAJCWVsc2UKKwkJewor CQkJLyogQUxURVIgVEFCTEUgdmFsaWRhdGlvbjogcGVyLXJvdywgbm8gY2FjaGUgKi8KIAkJCXJp X0Zhc3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWwsIG5ld3Nsb3QpOworCQl9CiAJCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7CiAJfQogCkBAIC0yNzAzLDEwICsyNzM5LDE0IEBAIHJpX1Bl cmZvcm1DaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCiAvKgogICogcmlf RmFzdFBhdGhDaGVjawotICoJCVBlcmZvcm0gRksgZXhpc3RlbmNlIGNoZWNrIHZpYSBkaXJlY3Qg aW5kZXggcHJvYmUsIGJ5cGFzc2luZyBTUEkuCisgKgkJUGVyZm9ybSBwZXIgcm93IEZLIGV4aXN0 ZW5jZSBjaGVjayB2aWEgZGlyZWN0IGluZGV4IHByb2JlLAorICoJCWJ5cGFzc2luZyBTUEkuCiAg KgogICogSWYgbm8gbWF0Y2hpbmcgUEsgcm93IGV4aXN0cywgcmVwb3J0IHRoZSB2aW9sYXRpb24g dmlhIHJpX1JlcG9ydFZpb2xhdGlvbigpLAogICogb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0 dXJucyBub3JtYWxseS4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIG9ubHkgdXNlZCBieSB0aGUgQUxU RVIgVEFCTEUgdmFsaWRhdGlvbiBwYXRoLiBPdGhlciBwYXRocyB1c2UKKyAqIHJpX0Zhc3RQYXRo QmF0Y2hBZGQoKS4KICAqLwogc3RhdGljIHZvaWQKIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklf Q29uc3RyYWludEluZm8gKnJpaW5mbywKQEAgLTI3NzEsNzAgKzI4MTEsMzExIEBAIHJpX0Zhc3RQ YXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIH0KIAogLyoKLSAqIHJp X0Zhc3RQYXRoQ2hlY2tDYWNoZWQKLSAqCQlDYWNoZWQtcmVzb3VyY2UgdmFyaWFudCBvZiByaV9G YXN0UGF0aENoZWNrIGZvciB1c2Ugd2l0aGluIHRoZQotICoJCWFmdGVyLXRyaWdnZXIgZnJhbWV3 b3JrLgorICogcmlfRmFzdFBhdGhCYXRjaEFkZAorICoJCUJ1ZmZlciBhIEZLIHJvdyBmb3IgYmF0 Y2hlZCBwcm9iaW5nLgorICoKKyAqIEFkZHMgdGhlIHJvdyB0byB0aGUgYmF0Y2ggYnVmZmVyLiAg V2hlbiB0aGUgYnVmZmVyIGlzIGZ1bGwsIGZsdXNoZXMgYWxsCisgKiBidWZmZXJlZCByb3dzIGJ5 IHByb2JpbmcgdGhlIFBLIGluZGV4LiAgQW55IHZpb2xhdGlvbiBpcyByZXBvcnRlZAorICogaW1t ZWRpYXRlbHkgZHVyaW5nIHRoZSBmbHVzaCB2aWEgcmlfUmVwb3J0VmlvbGF0aW9uICh3aGljaCBk b2VzIG5vdCByZXR1cm4pLgogICoKICAqIFVzZXMgdGhlIHBlci1iYXRjaCBjYWNoZSAoUklfRmFz dFBhdGhFbnRyeSkgdG8gYXZvaWQgcGVyLXJvdyByZWxhdGlvbgogICogb3Blbi9jbG9zZSwgc2Nh biBiZWdpbi9lbmQsIGFuZCBzbmFwc2hvdCByZWdpc3RyYXRpb24uICBUaGUgc25hcHNob3Qncwot ICogY3VyY2lkIGlzIHBhdGNoZWQgZWFjaCBjYWxsIHNvIHRoZSBzY2FuIHNlZXMgZWZmZWN0cyBv ZiBwcmlvciB0cmlnZ2Vycy4KKyAqIGN1cmNpZCBpcyBwYXRjaGVkIGF0IGZsdXNoIHRpbWUgc28g dGhlIHNjYW4gc2VlcyBlZmZlY3RzIG9mIHByaW9yIHRyaWdnZXJzLgogICoKLSAqIExpa2Ugcmlf RmFzdFBhdGhDaGVjaywgcmVwb3J0cyB0aGUgdmlvbGF0aW9uIHZpYSByaV9SZXBvcnRWaW9sYXRp b24oKQotICogaWYgbm8gbWF0Y2hpbmcgUEsgcm93IGlzIGZvdW5kLgorICogVGhlIGJhdGNoIGlz IGFsc28gZmx1c2hlZCBhdCBlbmQgb2YgdHJpZ2dlci1maXJpbmcgY3ljbGUgdmlhCisgKiByaV9G YXN0UGF0aEVuZEJhdGNoKCkuCiAgKi8KIHN0YXRpYyB2b2lkCi1yaV9GYXN0UGF0aENoZWNrQ2Fj aGVkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCi0JCQkJCSAgIFJlbGF0aW9uIGZr X3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpCityaV9GYXN0UGF0aEJhdGNoQWRkKGNvbnN0 IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCVJlbGF0aW9uIGZrX3JlbCwgVHVwbGVU YWJsZVNsb3QgKm5ld3Nsb3QpCiB7CiAJUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSA9IHJpX0Zh c3RQYXRoR2V0RW50cnkocmlpbmZvLCBma19yZWwpOworCU1lbW9yeUNvbnRleHQgb2xkY3h0Owor CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7 CisJZnBlbnRyeS0+YmF0Y2hbZnBlbnRyeS0+YmF0Y2hfY291bnRdID0KKwkJRXhlY0NvcHlTbG90 SGVhcFR1cGxlKG5ld3Nsb3QpOworCWZwZW50cnktPmJhdGNoX2NvdW50Kys7CisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwlpZiAoZnBlbnRyeS0+YmF0Y2hfY291bnQgPj0gUklf RkFTVFBBVEhfQkFUQ0hfU0laRSkKKwkJcmlfRmFzdFBhdGhCYXRjaEZsdXNoKGZwZW50cnksIGZr X3JlbCk7Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aEJhdGNoRmx1c2gKKyAqCQlGbHVzaCBhbGwg YnVmZmVyZWQgRksgcm93cyBieSBwcm9iaW5nIHRoZSBQSyBpbmRleC4KKyAqCisgKiBEaXNwYXRj aGVzIHRvIHJpX0Zhc3RQYXRoRmx1c2hBcnJheSgpIGZvciBzaW5nbGUtY29sdW1uIEZLcworICog KHVzaW5nIFNLX1NFQVJDSEFSUkFZKSBvciByaV9GYXN0UGF0aEZsdXNoTG9vcCgpIGZvciBtdWx0 aS1jb2x1bW4KKyAqIEZLcyAocGVyLXJvdyBwcm9iaW5nKS4gIFZpb2xhdGlvbnMgYXJlIHJlcG9y dGVkIGltbWVkaWF0ZWx5IHZpYQorICogcmlfUmVwb3J0VmlvbGF0aW9uKCksIHdoaWNoIGRvZXMg bm90IHJldHVybi4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoQmF0Y2hGbHVzaChSSV9G YXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxhdGlvbiBma19yZWwpCit7CisJY29uc3QgUklfQ29u c3RyYWludEluZm8gKnJpaW5mbyA9IGZwZW50cnktPnJpaW5mbzsKIAlSZWxhdGlvbglwa19yZWwg PSBmcGVudHJ5LT5wa19yZWw7CiAJUmVsYXRpb24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7 Ci0JSW5kZXhTY2FuRGVzYyBzY2FuZGVzYyA9IGZwZW50cnktPnNjYW5kZXNjOwogCVNuYXBzaG90 CXNuYXBzaG90ID0gZnBlbnRyeS0+c25hcHNob3Q7Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBm cGVudHJ5LT5zbG90OwotCURhdHVtCQlwa192YWxzW0lOREVYX01BWF9LRVlTXTsKLQljaGFyCQlw a19udWxsc1tJTkRFWF9NQVhfS0VZU107Ci0JU2NhbktleURhdGEgc2tleVtJTkRFWF9NQVhfS0VZ U107Ci0JYm9vbAkJZm91bmQ7CisJVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QgPSBmcGVudHJ5LT5m a19zbG90OwogCU9pZAkJCXNhdmVkX3VzZXJpZDsKIAlpbnQJCQlzYXZlZF9zZWNfY29udGV4dDsK LQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IEN1cnJlbnRN ZW1vcnlDb250ZXh0OwogCi0JLyoKLQkgKiBBZHZhbmNlIHRoZSBjb21tYW5kIGNvdW50ZXIgYW5k IHBhdGNoIHRoZSBjYWNoZWQgc25hcHNob3QncyBjdXJjaWQgc28KLQkgKiB0aGUgc2NhbiBzZWVz IFBLIHJvd3MgaW5zZXJ0ZWQgYnkgZWFybGllciB0cmlnZ2VycyBpbiB0aGlzIHN0YXRlbWVudC4K LQkgKi8KLQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwotCWZwZW50cnktPnNuYXBzaG90LT5j dXJjaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKGZhbHNlKTsKKwlpZiAoZnBlbnRyeS0+YmF0Y2hf Y291bnQgPT0gMCkKKwkJcmV0dXJuOwogCiAJaWYgKHJpaW5mby0+ZnBtZXRhID09IE5VTEwpCiAJ CXJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKChSSV9Db25zdHJhaW50SW5mbyAqKSByaWlu Zm8sCiAJCQkJCQkJCQkgIGZrX3JlbCwgaWR4X3JlbCk7CiAJQXNzZXJ0KHJpaW5mby0+ZnBtZXRh KTsKIAorCS8qCisJICogQ0NJIGFuZCBzZWN1cml0eSBjb250ZXh0IHN3aXRjaCBhcmUgZG9uZSBv bmNlIGZvciB0aGUgZW50aXJlIGJhdGNoLgorCSAqIFBlci1yb3cgQ0NJIGlzIHVubmVjZXNzYXJ5 IGJlY2F1c2UgYnkgdGhlIHRpbWUgYSBmbHVzaCBydW5zLCBhbGwgQUZURVIKKwkgKiB0cmlnZ2Vy cyBmb3IgdGhlIGJ1ZmZlcmVkIHJvd3MgaGF2ZSBhbHJlYWR5IGZpcmVkICh0cmlnZ2VyIGludm9j YXRpb25zCisJICogc3RyaWN0bHkgYWx0ZXJuYXRlIHBlciByb3cpLCBzbyBhIHNpbmdsZSBDQ0kg YWR2YW5jZXMgcGFzdCBhbGwgdGhlaXIKKwkgKiBlZmZlY3RzLiAgUGVyLXJvdyBzZWN1cml0eSBj b250ZXh0IHN3aXRjaCBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIGVhY2gKKwkgKiByb3cncyBwcm9i ZSBydW5zIGVudGlyZWx5IGFzIHRoZSBQSyB0YWJsZSBvd25lciwgc2FtZSBhcyB0aGUgU1BJIHBh dGgKKwkgKiAtLSB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIFNQSSBwYXRoIHNldHMg YW5kIHJlc3RvcmVzIHRoZQorCSAqIGNvbnRleHQgcGVyIHJvdyB3aGVyZWFzIHdlIGRvIGl0IG9u Y2UgYXJvdW5kIHRoZSB3aG9sZSBiYXRjaC4KKwkgKi8KKwlDb21tYW5kQ291bnRlckluY3JlbWVu dCgpOworCXNuYXBzaG90LT5jdXJjaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKGZhbHNlKTsKKwog CUdldFVzZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVkX3VzZXJpZCwgJnNhdmVkX3NlY19jb250ZXh0 KTsKIAlTZXRVc2VySWRBbmRTZWNDb250ZXh0KFJlbGF0aW9uR2V0Rm9ybShwa19yZWwpLT5yZWxv d25lciwKIAkJCQkJCSAgIHNhdmVkX3NlY19jb250ZXh0IHwKIAkJCQkJCSAgIFNFQ1VSSVRZX0xP Q0FMX1VTRVJJRF9DSEFOR0UgfAogCQkJCQkJICAgU0VDVVJJVFlfTk9GT1JDRV9STFMpOwogCi0J cmlfRXh0cmFjdFZhbHVlcyhma19yZWwsIG5ld3Nsb3QsIHJpaW5mbywgZmFsc2UsIHBrX3ZhbHMs IHBrX251bGxzKTsKLQlidWlsZF9pbmRleF9zY2Fua2V5cyhyaWluZm8sIGlkeF9yZWwsIHBrX3Zh bHMsIHBrX251bGxzLCBza2V5KTsKKwlpZiAocmlpbmZvLT5ua2V5cyA9PSAxKQorCQlyaV9GYXN0 UGF0aEZsdXNoQXJyYXkoZnBlbnRyeSwgZmtfc2xvdCwgcmlpbmZvLCBma19yZWwpOworCWVsc2UK KwkJcmlfRmFzdFBhdGhGbHVzaExvb3AoZnBlbnRyeSwgZmtfc2xvdCwgcmlpbmZvLCBma19yZWwp OworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCVNldFVzZXJJZEFuZFNlY0NvbnRl eHQoc2F2ZWRfdXNlcmlkLCBzYXZlZF9zZWNfY29udGV4dCk7CisKKwkvKiBGcmVlIG1hdGVyaWFs aXplZCB0dXBsZXMgYW5kIHJlc2V0ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBmcGVudHJ5LT5i YXRjaF9jb3VudDsgaSsrKQorCQloZWFwX2ZyZWV0dXBsZShmcGVudHJ5LT5iYXRjaFtpXSk7CisJ ZnBlbnRyeS0+YmF0Y2hfY291bnQgPSAwOworfQorCisvKgorICogcmlfRmFzdFBhdGhGbHVzaExv b3AKKyAqCQlNdWx0aS1jb2x1bW4gZmFsbGJhY2s6IHByb2JlIHRoZSBpbmRleCBvbmNlIHBlciBi dWZmZXJlZCByb3cuCisgKgorICogVXNlZCBmb3IgY29tcG9zaXRlIGZvcmVpZ24ga2V5cyB3aGVy ZSBTS19TRUFSQ0hBUlJBWSBkb2VzIG5vdAorICogYXBwbHkuCisgKi8KK3N0YXRpYyB2b2lkCity aV9GYXN0UGF0aEZsdXNoTG9vcChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBUdXBsZVRhYmxl U2xvdCAqZmtfc2xvdCwKKwkJCQkJIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIFJl bGF0aW9uIGZrX3JlbCkKK3sKKwlSZWxhdGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19yZWw7CisJ UmVsYXRpb24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7CisJSW5kZXhTY2FuRGVzYyBzY2Fu ZGVzYyA9IGZwZW50cnktPnNjYW5kZXNjOworCVR1cGxlVGFibGVTbG90ICpwa19zbG90ID0gZnBl bnRyeS0+cGtfc2xvdDsKKwlTbmFwc2hvdAlzbmFwc2hvdCA9IGZwZW50cnktPnNuYXBzaG90Owor CURhdHVtCQlwa192YWxzW0lOREVYX01BWF9LRVlTXTsKKwljaGFyCQlwa19udWxsc1tJTkRFWF9N QVhfS0VZU107CisJU2NhbktleURhdGEgc2tleVtJTkRFWF9NQVhfS0VZU107CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IGZwZW50cnktPmJhdGNoX2NvdW50OyBpKyspCisJeworCQlib29sCQlmb3Vu ZCA9IGZhbHNlOworCisJCUV4ZWNTdG9yZUhlYXBUdXBsZShmcGVudHJ5LT5iYXRjaFtpXSwgZmtf c2xvdCwgZmFsc2UpOworCisJCS8qCisJCSAqIGJ1aWxkX2luZGV4X3NjYW5rZXlzKCkgbWF5IHBh bGxvYyBjYXN0IHJlc3VsdHMgZm9yIGNyb3NzLXR5cGUgRktzLgorCQkgKiBVc2UgdGhlIGVudHJ5 J3Mgc2hvcnQtbGl2ZWQgZmx1c2ggY29udGV4dCBzbyB0aGVzZSBkb24ndCBhY2N1bXVsYXRlCisJ CSAqIGFjcm9zcyBiYXRjaGVzLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZwZW50 cnktPmZsdXNoX2N4dCk7CisJCXJpX0V4dHJhY3RWYWx1ZXMoZmtfcmVsLCBma19zbG90LCByaWlu Zm8sIGZhbHNlLCBwa192YWxzLCBwa19udWxscyk7CisJCWJ1aWxkX2luZGV4X3NjYW5rZXlzKHJp aW5mbywgaWR4X3JlbCwgcGtfdmFscywgcGtfbnVsbHMsIHNrZXkpOworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8oZnBlbnRyeS0+c2Nhbl9jeHQpOworCisJCWZvdW5kID0gcmlfRmFzdFBhdGhQcm9i ZU9uZShwa19yZWwsIGlkeF9yZWwsIHNjYW5kZXNjLCBwa19zbG90LAorCQkJCQkJCQkJc25hcHNo b3QsIHJpaW5mbywgc2tleSwgcmlpbmZvLT5ua2V5cyk7CisKKwkJaWYgKCFmb3VuZCkKKwkJCXJp X1JlcG9ydFZpb2xhdGlvbihyaWluZm8sIHBrX3JlbCwgZmtfcmVsLAorCQkJCQkJCSAgIGZrX3Ns b3QsIE5VTEwsCisJCQkJCQkJICAgUklfUExBTl9DSEVDS19MT09LVVBQSywgZmFsc2UsIGZhbHNl KTsKKwl9CisJTWVtb3J5Q29udGV4dFJlc2V0KGZwZW50cnktPmZsdXNoX2N4dCk7Cit9CisKKy8q CisgKiByaV9GYXN0UGF0aEZsdXNoQXJyYXkKKyAqCQlTaW5nbGUtY29sdW1uIGZhc3QgcGF0aCB1 c2luZyBTS19TRUFSQ0hBUlJBWS4KKyAqCisgKiBCdWlsZHMgYW4gYXJyYXkgb2YgRksgdmFsdWVz IGFuZCBkb2VzIG9uZSBpbmRleCBzY2FuIHdpdGgKKyAqIFNLX1NFQVJDSEFSUkFZLiAgVGhlIGlu ZGV4IEFNIHNvcnRzIGFuZCBkZWR1cGxpY2F0ZXMgdGhlIGFycmF5CisgKiBpbnRlcm5hbGx5LCB0 aGVuIHdhbGtzIG1hdGNoaW5nIGxlYWYgcGFnZXMgaW4gb3JkZXIuICBFYWNoCisgKiBtYXRjaGVk IFBLIHR1cGxlIGlzIGxvY2tlZCBhbmQgcmVjaGVja2VkIGFzIGJlZm9yZTsgYSBtYXRjaGVkW10K KyAqIGJpdG1hcCB0cmFja3Mgd2hpY2ggYmF0Y2ggaXRlbXMgd2VyZSBzYXRpc2ZpZWQuCisgKi8K K3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aEZsdXNoQXJyYXkoUklfRmFzdFBhdGhFbnRyeSAqZnBl bnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCisJCQkJCSAgY29uc3QgUklfQ29uc3RyYWlu dEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsKQoreworCUZhc3RQYXRoTWV0YSAqZnBtZXRh ID0gcmlpbmZvLT5mcG1ldGE7CisJUmVsYXRpb24JcGtfcmVsID0gZnBlbnRyeS0+cGtfcmVsOwor CVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVsOworCUluZGV4U2NhbkRlc2Mgc2Nh bmRlc2MgPSBmcGVudHJ5LT5zY2FuZGVzYzsKKwlUdXBsZVRhYmxlU2xvdCAqcGtfc2xvdCA9IGZw ZW50cnktPnBrX3Nsb3Q7CisJU25hcHNob3QJc25hcHNob3QgPSBmcGVudHJ5LT5zbmFwc2hvdDsK KwlEYXR1bQkJc2VhcmNoX3ZhbHNbUklfRkFTVFBBVEhfQkFUQ0hfU0laRV07CisJYm9vbAkJbWF0 Y2hlZFtSSV9GQVNUUEFUSF9CQVRDSF9TSVpFXTsKKwlpbnQJCQludmFscyA9IGZwZW50cnktPmJh dGNoX2NvdW50OworCURhdHVtCQlwa192YWxzW0lOREVYX01BWF9LRVlTXTsKKwljaGFyCQlwa19u dWxsc1tJTkRFWF9NQVhfS0VZU107CisJU2NhbktleURhdGEgc2tleVsxXTsKKwlSSV9Db21wYXJl SGFzaEVudHJ5ICplbnRyeTsKKwlPaWQJCQllbGVtX3R5cGU7CisJaW50MTYJCWVsZW1fbGVuOwor CWJvb2wJCWVsZW1fYnl2YWw7CisJY2hhcgkJZWxlbV9hbGlnbjsKKwlBcnJheVR5cGUgICphcnI7 CisKKwlBc3NlcnQoZnBtZXRhKTsKKworCW1lbXNldChtYXRjaGVkLCAwLCBudmFscyAqIHNpemVv Zihib29sKSk7CiAKIAkvKgotCSAqIFRoZSBjYWNoZWQgc2NhbmRlc2MgbGl2ZXMgaW4gVG9wVHJh bnNhY3Rpb25Db250ZXh0LCBidXQgdGhlIGJ0cmVlIEFNCi0JICogZGVmZXJzIHNvbWUgYWxsb2Nh dGlvbnMgdG8gdGhlIGZpcnN0IGluZGV4X2dldG5leHRfc2xvdCBjYWxsLiAgRW5zdXJlCi0JICog dGhvc2UgbGFuZCBpbiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgdG9vLgorCSAqIFRyYW5zaWVudCBw ZXItZmx1c2ggYWxsb2NhdGlvbnMgKGNhc3QgcmVzdWx0cywgdGhlIHNlYXJjaCBhcnJheSkgbXVz dAorCSAqIG5vdCBhY2N1bXVsYXRlIGFjcm9zcyByZXBlYXRlZCBmbHVzaGVzLiAgVXNlIHRoZSBl bnRyeSdzIHNob3J0LWxpdmVkCisJICogZmx1c2ggY29udGV4dCwgcmVzZXQgYWZ0ZXIgZWFjaCBm bHVzaC4KIAkgKi8KLQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wVHJhbnNhY3Rp b25Db250ZXh0KTsKLQlmb3VuZCA9IHJpX0Zhc3RQYXRoUHJvYmVPbmUocGtfcmVsLCBpZHhfcmVs LCBzY2FuZGVzYywgc2xvdCwgc25hcHNob3QsCi0JCQkJCQkJCXJpaW5mbywgc2tleSwgcmlpbmZv LT5ua2V5cyk7Ci0JTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Ci0JU2V0VXNlcklkQW5k U2VjQ29udGV4dChzYXZlZF91c2VyaWQsIHNhdmVkX3NlY19jb250ZXh0KTsKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8oZnBlbnRyeS0+Zmx1c2hfY3h0KTsKIAotCWlmICghZm91bmQpCi0JCXJpX1Jl cG9ydFZpb2xhdGlvbihyaWluZm8sIHBrX3JlbCwgZmtfcmVsLCBuZXdzbG90LCBOVUxMLAotCQkJ CQkJICAgUklfUExBTl9DSEVDS19MT09LVVBQSywgZmFsc2UsIGZhbHNlKTsKKwkvKgorCSAqIEV4 dHJhY3QgRksgdmFsdWVzLCBjYXN0aW5nIHRvIHRoZSBvcGVyYXRvcidzIGV4cGVjdGVkIGlucHV0 IHR5cGUgaWYKKwkgKiBuZWVkZWQgKGUuZy4gaW50OCBGSyAtPiBpbnQ0IGZvciBpbnQ0OGVxKS4K KwkgKi8KKwllbnRyeSA9IGZwbWV0YS0+Y29tcGFyZV9lbnRyaWVzWzBdOworCWZvciAoaW50IGkg PSAwOyBpIDwgbnZhbHM7IGkrKykKKwl7CisJCUV4ZWNTdG9yZUhlYXBUdXBsZShmcGVudHJ5LT5i YXRjaFtpXSwgZmtfc2xvdCwgZmFsc2UpOworCQlyaV9FeHRyYWN0VmFsdWVzKGZrX3JlbCwgZmtf c2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOworCisJCS8qIENhc3QgaWYg bmVlZGVkIChlLmcuIGludDggRksgLT4gbnVtZXJpYyBQSykgKi8KKwkJaWYgKE9pZElzVmFsaWQo ZW50cnktPmNhc3RfZnVuY19maW5mby5mbl9vaWQpKQorCQkJc2VhcmNoX3ZhbHNbaV0gPSBGdW5j dGlvbkNhbGwzKCZlbnRyeS0+Y2FzdF9mdW5jX2ZpbmZvLAorCQkJCQkJCQkJCSAgIHBrX3ZhbHNb MF0sCisJCQkJCQkJCQkJICAgSW50MzJHZXREYXR1bSgtMSksCisJCQkJCQkJCQkJICAgQm9vbEdl dERhdHVtKGZhbHNlKSk7CisJCWVsc2UKKwkJCXNlYXJjaF92YWxzW2ldID0gcGtfdmFsc1swXTsK Kwl9CisKKwkvKgorCSAqIEFycmF5IGVsZW1lbnQgdHlwZSBtdXN0IG1hdGNoIHRoZSBvcGVyYXRv cidzIHJpZ2h0LWhhbmQgaW5wdXQgdHlwZSwKKwkgKiB3aGljaCBpcyB3aGF0IHRoZSBpbmRleCBj b21wYXJpc29uIGV4cGVjdHMgb24gdGhlIHNlYXJjaCBzaWRlLgorCSAqIHJpX3BvcHVsYXRlX2Zh c3RwYXRoX21ldGFkYXRhKCkgc3RvcmVzIGV4YWN0bHkgdGhpcyB2aWEKKwkgKiBnZXRfb3Bfb3Bm YW1pbHlfcHJvcGVydGllcygpLCB3aGljaCByZXR1cm5zIHRoZSBvcGVyYXRvcidzIHJpZ2h0LWhh bmQKKwkgKiB0eXBlIGFzIHRoZSBzdWJ0eXBlIGZvciBjcm9zcy10eXBlIG9wZXJhdG9ycyAoZS5n LiBpbnQ4IGZvciBpbnQ0OGVxKQorCSAqIGFuZCB0aGUgY29tbW9uIHR5cGUgZm9yIHNhbWUtdHlw ZSBvcGVyYXRvcnMuCisJICovCisJZWxlbV90eXBlID0gZnBtZXRhLT5zdWJ0eXBlc1swXTsKKwlB c3NlcnQoT2lkSXNWYWxpZChlbGVtX3R5cGUpKTsKKwlnZXRfdHlwbGVuYnl2YWxhbGlnbihlbGVt X3R5cGUsICZlbGVtX2xlbiwgJmVsZW1fYnl2YWwsICZlbGVtX2FsaWduKTsKKworCWFyciA9IGNv bnN0cnVjdF9hcnJheShzZWFyY2hfdmFscywgbnZhbHMsCisJCQkJCQkgIGVsZW1fdHlwZSwgZWxl bV9sZW4sIGVsZW1fYnl2YWwsIGVsZW1fYWxpZ24pOworCisJLyoKKwkgKiBCdWlsZCBzY2FuIGtl eSB3aXRoIFNLX1NFQVJDSEFSUkFZLiAgVGhlIGluZGV4IEFNIGNvZGUgd2lsbCBpbnRlcm5hbGx5 CisJICogc29ydCBhbmQgZGVkdXBsaWNhdGUsIHRoZW4gd2FsayBsZWFmIHBhZ2VzIGluIG9yZGVy LgorCSAqLworCVNjYW5LZXlFbnRyeUluaXRpYWxpemUoJnNrZXlbMF0sCisJCQkJCQkgICBTS19T RUFSQ0hBUlJBWSwKKwkJCQkJCSAgIDEsCS8qIGF0dG5vICovCisJCQkJCQkgICBmcG1ldGEtPnN0 cmF0c1swXSwKKwkJCQkJCSAgIGZwbWV0YS0+c3VidHlwZXNbMF0sCisJCQkJCQkgICBpZHhfcmVs LT5yZF9pbmRjb2xsYXRpb25bMF0sCisJCQkJCQkgICBmcG1ldGEtPnJlZ29wc1swXSwKKwkJCQkJ CSAgIFBvaW50ZXJHZXREYXR1bShhcnIpKTsKKworCS8qCisJICogU3dpdGNoIHRvIHNjYW5fY3h0 IGZvciB0aGUgaW5kZXggc2NhbjogaW5kZXggQU1zIG1heSBkZWZlciBpbnRlcm5hbAorCSAqIGFs bG9jYXRpb25zIChlLmcuIF9idF9wcmVwcm9jZXNzX2tleXMpIHRvIHRoZSBmaXJzdAorCSAqIGlu ZGV4X2dldG5leHRfc2xvdCgpIGNhbGwuICBUaG9zZSBtdXN0IHN1cnZpdmUgYWNyb3NzIHJlc2Nh bnMgd2l0aGluIGEKKwkgKiBiYXRjaDsgc2Nhbl9jeHQgaXMgZGVsZXRlZCBpbiB0ZWFyZG93biwg Y2xlYW5pbmcgdGhlbSB1cCB3aGVuIHRoZSBiYXRjaAorCSAqIGVuZHMuCisJICovCisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGZwZW50cnktPnNjYW5fY3h0KTsKKworCWluZGV4X3Jlc2NhbihzY2Fu ZGVzYywgc2tleSwgMSwgTlVMTCwgMCk7CisKKwkvKgorCSAqIFdhbGsgYWxsIG1hdGNoZXMuICBU aGUgaW5kZXggQU0gcmV0dXJucyB0aGVtIGluIGluZGV4IG9yZGVyLiAgRm9yIGVhY2gKKwkgKiBt YXRjaCwgZmluZCB3aGljaCBiYXRjaCBpdGVtKHMpIGl0IHNhdGlzZmllcy4KKwkgKi8KKwl3aGls ZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcGtf c2xvdCkpCisJeworCQlEYXR1bQkJZm91bmRfdmFsOworCQlib29sCQlmb3VuZF9udWxsOworCQli b29sCQljb25jdXJyZW50bHlfdXBkYXRlZDsKKwkJU2NhbktleURhdGEgcmVjaGVja19za2V5WzFd OworCisJCWlmICghcmlfTG9ja1BLVHVwbGUocGtfcmVsLCBwa19zbG90LCBzbmFwc2hvdCwgJmNv bmN1cnJlbnRseV91cGRhdGVkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEV4dHJhY3QgdGhlIFBL IHZhbHVlIGZyb20gdGhlIG1hdGNoZWQgYW5kIGxvY2tlZCB0dXBsZSAqLworCQlmb3VuZF92YWwg PSBzbG90X2dldGF0dHIocGtfc2xvdCwgcmlpbmZvLT5wa19hdHRudW1zWzBdLCAmZm91bmRfbnVs bCk7CisJCUFzc2VydCghZm91bmRfbnVsbCk7CisKKwkJaWYgKGNvbmN1cnJlbnRseV91cGRhdGVk KQorCQl7CisJCQkvKgorCQkJICogQnVpbGQgYSBzaW5nbGUta2V5IHNjYW5rZXkgZm9yIHJlY2hl Y2suICBXZSBuZWVkIHRoZSBhY3R1YWwgUEsKKwkJCSAqIHZhbHVlIHRoYXQgd2FzIGZvdW5kLCBu b3QgdGhlIEZLIHNlYXJjaCB2YWx1ZS4KKwkJCSAqLworCQkJU2NhbktleUVudHJ5SW5pdGlhbGl6 ZSgmcmVjaGVja19za2V5WzBdLCAwLCAxLAorCQkJCQkJCQkgICBmcG1ldGEtPnN0cmF0c1swXSwK KwkJCQkJCQkJICAgZnBtZXRhLT5zdWJ0eXBlc1swXSwKKwkJCQkJCQkJICAgaWR4X3JlbC0+cmRf aW5kY29sbGF0aW9uWzBdLAorCQkJCQkJCQkgICBmcG1ldGEtPnJlZ29wc1swXSwKKwkJCQkJCQkJ ICAgZm91bmRfdmFsKTsKKwkJCWlmICghcmVjaGVja19tYXRjaGVkX3BrX3R1cGxlKGlkeF9yZWws IHJlY2hlY2tfc2tleSwgcGtfc2xvdCkpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkg KiBMaW5lYXIgc2NhbiB0byBtYXJrIGFsbCBiYXRjaCBpdGVtcyBtYXRjaGluZyB0aGlzIFBLIHZh bHVlLgorCQkgKiBPKGJhdGNoX3NpemUpIHBlciBtYXRjaCwgTyhiYXRjaF9zaXplXjIpIHdvcnN0 IGNhc2UgLS0gZmluZSBmb3IgdGhlCisJCSAqIGN1cnJlbnQgYmF0Y2ggc2l6ZSBvZiA2NC4KKwkJ ICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHM7IGkrKykKKwkJeworCQkJaWYgKCFtYXRj aGVkW2ldICYmCisJCQkJRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZlbnRyeS0+ZXFf b3ByX2ZpbmZvLAorCQkJCQkJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRpb25bMF0sCisJ CQkJCQkJCQkJCSAgIGZvdW5kX3ZhbCwKKwkJCQkJCQkJCQkJICAgc2VhcmNoX3ZhbHNbaV0pKSkK KwkJCQltYXRjaGVkW2ldID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qIFJlcG9ydCBmaXJzdCB1bm1h dGNoZWQgcm93ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudmFsczsgaSsrKQorCXsKKwkJaWYg KCFtYXRjaGVkW2ldKQorCQl7CisJCQlFeGVjU3RvcmVIZWFwVHVwbGUoZnBlbnRyeS0+YmF0Y2hb aV0sIGZrX3Nsb3QsIGZhbHNlKTsKKwkJCXJpX1JlcG9ydFZpb2xhdGlvbihyaWluZm8sIHBrX3Jl bCwgZmtfcmVsLAorCQkJCQkJCSAgIGZrX3Nsb3QsIE5VTEwsCisJCQkJCQkJICAgUklfUExBTl9D SEVDS19MT09LVVBQSywgZmFsc2UsIGZhbHNlKTsKKwkJfQorCX0KKworCU1lbW9yeUNvbnRleHRS ZXNldChmcGVudHJ5LT5mbHVzaF9jeHQpOwogfQogCiAvKgpAQCAtMjg0NSw5ICszMTI2LDEwIEBA IHJpX0Zhc3RQYXRoQ2hlY2tDYWNoZWQoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywK ICAqIFJldHVybnMgdHJ1ZSBpZiBhIG1hdGNoaW5nIFBLIHJvdyB3YXMgZm91bmQsIGxvY2tlZCwg YW5kIChpZgogICogYXBwbGljYWJsZSkgdmlzaWJsZSB0byB0aGUgdHJhbnNhY3Rpb24gc25hcHNo b3QuCiAgKgotICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSBDdXJyZW50TWVtb3J5Q29udGV4dCBp cyBsb25nLWxpdmVkIGVub3VnaAotICogZm9yIHRoZSBzY2FuIGRlc2NyaXB0b3IncyBpbnRlcm5h bCBhbGxvY2F0aW9ucyAodHlwaWNhbGx5Ci0gKiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgd2hlbiB1 c2luZyBhIGNhY2hlZCBzY2FuZGVzYykuCisgKiBXaGVuIHVzaW5nIGEgY2FjaGVkIHNjYW5kZXNj IChmcm9tIHRoZSBiYXRjaCBwYXRoKSwgdGhlIGNhbGxlciBtdXN0IHN3aXRjaAorICogdG8gdGhl IGVudHJ5J3Mgc2Nhbl9jeHQgYmVmb3JlIGNhbGxpbmcgc28gdGhhdCBpbmRleCBBTSBhbGxvY2F0 aW9ucyBkdXJpbmcKKyAqIGluZGV4X2dldG5leHRfc2xvdCgpIHN1cnZpdmUgYWNyb3NzIHJlc2Nh bnMuICByaV9GYXN0UGF0aENoZWNrIHVzZXMgYQorICogb25lLXNob3Qgc2NhbiBhbmQgZW5kcyBp dCBpbW1lZGlhdGVseSwgc28gbm8gc3VjaCBzd2l0Y2ggaXMgbmVlZGVkLgogICovCiBzdGF0aWMg Ym9vbAogcmlfRmFzdFBhdGhQcm9iZU9uZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9y ZWwsCkBAIC0zNzY5LDE0ICs0MDUxLDUxIEBAIFJJX0ZLZXlfdHJpZ2dlcl90eXBlKE9pZCB0Z2Zv aWQpCiAJcmV0dXJuIFJJX1RSSUdHRVJfTk9ORTsKIH0KIAorLyoKKyAqIHJpX0Zhc3RQYXRoRW5k QmF0Y2gKKyAqCQlGbHVzaCByZW1haW5pbmcgcm93cyBhbmQgdGVhciBkb3duIGNhY2hlZCBzdGF0 ZS4KKyAqCisgKiBSZWdpc3RlcmVkIGFzIGFuIEFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2suICBO b3RlOiB0aGUgZmx1c2ggY2FuCisgKiBkbyByZWFsIHdvcmsgKENDSSwgc2VjdXJpdHkgY29udGV4 dCBzd2l0Y2gsIGluZGV4IHByb2JlcykgYW5kIGNhbgorICogdGhyb3cgRVJST1Igb24gYSBjb25z dHJhaW50IHZpb2xhdGlvbi4gIElmIHRoYXQgaGFwcGVucywKKyAqIHJpX0Zhc3RQYXRoVGVhcmRv d24gbmV2ZXIgcnVuczsgUmVzb3VyY2VPd25lciArIFhhY3RDYWxsYmFjaworICogaGFuZGxlIHJl c291cmNlIGNsZWFudXAgb24gdGhlIGFib3J0IHBhdGguCisgKi8KK3N0YXRpYyB2b2lkCityaV9G YXN0UGF0aEVuZEJhdGNoKHZvaWQgKmFyZykKK3sKKwlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOwor CVJJX0Zhc3RQYXRoRW50cnkgKmVudHJ5OworCisJaWYgKHJpX2Zhc3RwYXRoX2NhY2hlID09IE5V TEwpCisJCXJldHVybjsKKworCS8qIEZsdXNoIGFueSBwYXJ0aWFsIGJhdGNoZXMgLS0gY2FuIHRo cm93IEVSUk9SICovCisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCByaV9mYXN0cGF0aF9jYWNoZSk7 CisJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7 CisJCWlmIChlbnRyeS0+YmF0Y2hfY291bnQgPiAwKQorCQl7CisJCQlSZWxhdGlvbglma19yZWwg PSB0YWJsZV9vcGVuKGVudHJ5LT5yaWluZm8tPmZrX3JlbGlkLAorCQkJCQkJCQkJCQlBY2Nlc3NT aGFyZUxvY2spOworCisJCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2goZW50cnksIGZrX3JlbCk7CisJ CQl0YWJsZV9jbG9zZShma19yZWwsIE5vTG9jayk7CisJCX0KKwl9CisKKwkvKiBPcmRlcmx5IHRl YXJkb3duICovCisJcmlfRmFzdFBhdGhUZWFyZG93bigpOworfQorCiAvKgogICogcmlfRmFzdFBh dGhUZWFyZG93bgogICoJCVRlYXIgZG93biBhbGwgY2FjaGVkIGZhc3QtcGF0aCBzdGF0ZS4KICAq Ci0gKiBDYWxsZWQgYXMgYW4gQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayBhdCBlbmQgb2YgYmF0 Y2guCisgKiBDYWxsZWQgZnJvbSByaV9GYXN0UGF0aEVuZEJhdGNoKCkgYWZ0ZXIgZmx1c2hpbmcg YW55IHJlbWFpbmluZyByb3dzLgogICovCiBzdGF0aWMgdm9pZAotcmlfRmFzdFBhdGhUZWFyZG93 bih2b2lkICphcmcpCityaV9GYXN0UGF0aFRlYXJkb3duKHZvaWQpCiB7CiAJSEFTSF9TRVFfU1RB VFVTIHN0YXR1czsKIAlSSV9GYXN0UGF0aEVudHJ5ICplbnRyeTsKQEAgLTM3OTQsMTAgKzQxMTMs MTQgQEAgcmlfRmFzdFBhdGhUZWFyZG93bih2b2lkICphcmcpCiAJCQlpbmRleF9jbG9zZShlbnRy eS0+aWR4X3JlbCwgTm9Mb2NrKTsKIAkJaWYgKGVudHJ5LT5wa19yZWwpCiAJCQl0YWJsZV9jbG9z ZShlbnRyeS0+cGtfcmVsLCBOb0xvY2spOwotCQlpZiAoZW50cnktPnNsb3QpCi0JCQlFeGVjRHJv cFNpbmdsZVR1cGxlVGFibGVTbG90KGVudHJ5LT5zbG90KTsKKwkJaWYgKGVudHJ5LT5wa19zbG90 KQorCQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChlbnRyeS0+cGtfc2xvdCk7CisJCWlm IChlbnRyeS0+Zmtfc2xvdCkKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZW50cnkt PmZrX3Nsb3QpOwogCQlpZiAoZW50cnktPnNuYXBzaG90KQogCQkJVW5yZWdpc3RlclNuYXBzaG90 KGVudHJ5LT5zbmFwc2hvdCk7CisJCWlmIChlbnRyeS0+c2Nhbl9jeHQpCisJCQlNZW1vcnlDb250 ZXh0RGVsZXRlKGVudHJ5LT5zY2FuX2N4dCk7CiAJfQogCiAJaGFzaF9kZXN0cm95KHJpX2Zhc3Rw YXRoX2NhY2hlKTsKQEAgLTM5MTEsMjMgKzQyMzQsMzIgQEAgcmlfRmFzdFBhdGhHZXRFbnRyeShj b25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwpCiAKIAkJLyoK IAkJICogUmVnaXN0ZXIgYW4gaW5pdGlhbCBzbmFwc2hvdC4gIEl0cyBjdXJjaWQgd2lsbCBiZSBw YXRjaGVkIGluIHBsYWNlCi0JCSAqIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgKHNlZSByaV9GYXN0 UGF0aENoZWNrQ2FjaGVkKCkpLCBhdm9pZGluZworCQkgKiBvbiBlYWNoIHN1YnNlcXVlbnQgcm93 IChzZWUgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKCkpLCBhdm9pZGluZwogCQkgKiBwZXItcm93IEdl dFNuYXBzaG90RGF0YSgpIG92ZXJoZWFkLgogCQkgKi8KIAkJZW50cnktPnNuYXBzaG90ID0gUmVn aXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCi0JCWVudHJ5LT5zbG90 ID0gdGFibGVfc2xvdF9jcmVhdGUoZW50cnktPnBrX3JlbCwgTlVMTCk7CisJCWVudHJ5LT5wa19z bG90ID0gdGFibGVfc2xvdF9jcmVhdGUoZW50cnktPnBrX3JlbCwgTlVMTCk7CisJCWVudHJ5LT5m a19zbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3IoZmtfcmVs KSwKKwkJCQkJCQkJCQkJCSAgJlRUU09wc0hlYXBUdXBsZSk7CiAKIAkJZW50cnktPnNjYW5kZXNj ID0gaW5kZXhfYmVnaW5zY2FuKGVudHJ5LT5wa19yZWwsIGVudHJ5LT5pZHhfcmVsLAogCQkJCQkJ CQkJCSAgZW50cnktPnNuYXBzaG90LCBOVUxMLAogCQkJCQkJCQkJCSAgcmlpbmZvLT5ua2V5cywg MCk7CiAKKwkJZW50cnktPnNjYW5fY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcFRyYW5z YWN0aW9uQ29udGV4dCwKKwkJCQkJCQkJCQkJCSJSSSBmYXN0IHBhdGggc2NhbiBjb250ZXh0IiwK KwkJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQllbnRyeS0+Zmx1c2hfY3h0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKGVudHJ5LT5zY2FuX2N4dCwKKwkJCQkJCQkJCQkJCSAi UkkgZmFzdCBwYXRoIGZsdXNoIHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCQkJCQkJCSBBTExP Q1NFVF9TTUFMTF9TSVpFUyk7CisKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAK IAkJLyogRW5zdXJlIGNsZWFudXAgYXQgZW5kIG9mIHRoaXMgdHJpZ2dlci1maXJpbmcgYmF0Y2gg Ki8KIAkJaWYgKCFyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkKQogCQl7Ci0JCQlSZWdp c3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2socmlfRmFzdFBhdGhUZWFyZG93biwgTlVMTCk7 CisJCQlSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2socmlfRmFzdFBhdGhFbmRCYXRj aCwgTlVMTCk7CiAJCQlyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKIAkJ fQogCkBAIC0zOTM4LDYgKzQyNzAsOSBAQCByaV9GYXN0UGF0aEdldEVudHJ5KGNvbnN0IFJJX0Nv bnN0cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCkKIAkJCQkJCQkgICBTRUNVUklU WV9OT0ZPUkNFX1JMUyk7CiAJCXJpX0NoZWNrUGVybWlzc2lvbnMoZW50cnktPnBrX3JlbCk7CiAJ CVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZWRfdXNlcmlkLCBzYXZlZF9zZWNfY29udGV4dCk7 CisKKwkJLyogRm9yIHJpX0Zhc3RQYXRoRW5kQmF0Y2goKSAqLworCQllbnRyeS0+cmlpbmZvID0g cmlpbmZvOwogCX0KIAogCXJldHVybiBlbnRyeTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9m b3JlaWduX2tleS5vdXQKaW5kZXggMjVkNTA1YzZjMTIuLjIxNzlkMmE4ZThmIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dApAQCAtMzU5MCwzICszNTkwLDQzIEBA IE5PVElDRTogIGZwX2F1dG9fcGsgY2FsbGVkCiBOT1RJQ0U6ICBmcF9hdXRvX3BrIGNhbGxlZAog RFJPUCBUQUJMRSBmcF9ma19jY2ksIGZwX3BrX2NjaTsKIERST1AgRlVOQ1RJT04gZnBfYXV0b19w azsKKy0tIE11bHRpLWNvbHVtbiBGSzogZXhlcmNpc2VzIGJhdGNoZWQgcGVyLXJvdyBwcm9iaW5n IHdpdGggY29tcG9zaXRlIGtleXMKK0NSRUFURSBUQUJMRSBmcF9wa19tdWx0aSAoYSBpbnQsIGIg aW50LCBQUklNQVJZIEtFWSAoYSwgYikpOworSU5TRVJUIElOVE8gZnBfcGtfbXVsdGkgU0VMRUNU IGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworQ1JFQVRFIFRBQkxFIGZwX2Zr X211bHRpICh4IGludCwgYSBpbnQsIGIgaW50LAorICAgIEZPUkVJR04gS0VZIChhLCBiKSBSRUZF UkVOQ0VTIGZwX3BrX211bHRpKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX211bHRpIFNFTEVDVCBpLCBp LCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0lOU0VSVCBJTlRPIGZwX2ZrX211 bHRpIFZBTFVFUyAoMSwgOTk5LCA5OTkpOworRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRh YmxlICJmcF9ma19tdWx0aSIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtf bXVsdGlfYV9iX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEsIGIpPSg5OTksIDk5OSkgaXMgbm90IHBy ZXNlbnQgaW4gdGFibGUgImZwX3BrX211bHRpIi4KK0RST1AgVEFCTEUgZnBfZmtfbXVsdGksIGZw X3BrX211bHRpOworLS0gRGVmZXJyZWQgY29uc3RyYWludDogYmF0Y2ggZmx1c2hlZCBhdCBDT01N SVQsIG5vdCBhdCBzdGF0ZW1lbnQgZW5kCitDUkVBVEUgVEFCTEUgZnBfcGtfY29tbWl0IChhIGlu dCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY29tbWl0IChhIGludCBSRUZFUkVO Q0VTIGZwX3BrX2NvbW1pdAorICAgIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEKTsKK0lO U0VSVCBJTlRPIGZwX3BrX2NvbW1pdCBWQUxVRVMgKDEpOworQkVHSU47CitJTlNFUlQgSU5UTyBm cF9ma19jb21taXQgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMg KDEpOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoOTk5KTsKK0NPTU1JVDsKK0VS Uk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfY29tbWl0IiB2aW9sYXRlcyBm b3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19jb21taXRfYV9ma2V5IgorREVUQUlMOiAgS2V5 IChhKT0oOTk5KSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGtfY29tbWl0Ii4KK0RST1Ag VEFCTEUgZnBfZmtfY29tbWl0LCBmcF9wa19jb21taXQ7CistLSBDcm9zcy10eXBlIEZLIHdpdGgg YnVsayBpbnNlcnQ6IGludDggRksgcmVmZXJlbmNpbmcgaW50NCBQSywKKy0tIHZhbHVlcyBjYXN0 IGR1cmluZyBhcnJheSBjb25zdHJ1Y3Rpb24KK0NSRUFURSBUQUJMRSBmcF9wa19jcm9zcyAoYSBp bnQ0IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2Nyb3NzIFNFTEVDVCBnZW5lcmF0 ZV9zZXJpZXMoMSwgMjAwKTsKK0NSRUFURSBUQUJMRSBmcF9ma19jcm9zcyAoYSBpbnQ4IFJFRkVS RU5DRVMgZnBfcGtfY3Jvc3MpOworSU5TRVJUIElOVE8gZnBfZmtfY3Jvc3MgU0VMRUNUIGdlbmVy YXRlX3NlcmllcygxLCAyMDApOworSU5TRVJUIElOVE8gZnBfZmtfY3Jvc3MgVkFMVUVTICg5OTkp OworRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19jcm9zcyIgdmlvbGF0 ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtfY3Jvc3NfYV9ma2V5IgorREVUQUlMOiAg S2V5IChhKT0oOTk5KSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGtfY3Jvc3MiLgorRFJP UCBUQUJMRSBmcF9ma19jcm9zcywgZnBfcGtfY3Jvc3M7CistLSBEdXBsaWNhdGUgRksgdmFsdWVz OiB3aGVuIHVzaW5nIHRoZSBiYXRjaGVkIFNBT1AgcGF0aCwgZXZlcnkKKy0tIHJvdyBtdXN0IGJl IHJlY29nbml6ZWQgYXMgc2F0aXNmaWVkLCBub3QganVzdCB0aGUgZmlyc3QgbWF0Y2gKK0NSRUFU RSBUQUJMRSBmcF9wa19kdXAgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3Br X2R1cCBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2R1cCAoYSBpbnQgUkVGRVJFTkNF UyBmcF9wa19kdXApOworSU5TRVJUIElOVE8gZnBfZmtfZHVwIFNFTEVDVCAxIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMCk7CitEUk9QIFRBQkxFIGZwX2ZrX2R1cCwgZnBfcGtfZHVwOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCmluZGV4IGNlZGQyMGM4ZDExLi43YTcyOTQ4NmJj MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbApAQCAtMjU3OCwzICsyNTc4LDQx IEBAIElOU0VSVCBJTlRPIGZwX2ZrX2NjaSBWQUxVRVMgKDEpLCAoMiksICgzKTsKIAogRFJPUCBU QUJMRSBmcF9ma19jY2ksIGZwX3BrX2NjaTsKIERST1AgRlVOQ1RJT04gZnBfYXV0b19wazsKKwor LS0gTXVsdGktY29sdW1uIEZLOiBleGVyY2lzZXMgYmF0Y2hlZCBwZXItcm93IHByb2Jpbmcgd2l0 aCBjb21wb3NpdGUga2V5cworQ1JFQVRFIFRBQkxFIGZwX3BrX211bHRpIChhIGludCwgYiBpbnQs IFBSSU1BUlkgS0VZIChhLCBiKSk7CitJTlNFUlQgSU5UTyBmcF9wa19tdWx0aSBTRUxFQ1QgaSwg aSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitDUkVBVEUgVEFCTEUgZnBfZmtfbXVs dGkgKHggaW50LCBhIGludCwgYiBpbnQsCisgICAgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5D RVMgZnBfcGtfbXVsdGkpOworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkgU0VMRUNUIGksIGksIGkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkg VkFMVUVTICgxLCA5OTksIDk5OSk7CitEUk9QIFRBQkxFIGZwX2ZrX211bHRpLCBmcF9wa19tdWx0 aTsKKworLS0gRGVmZXJyZWQgY29uc3RyYWludDogYmF0Y2ggZmx1c2hlZCBhdCBDT01NSVQsIG5v dCBhdCBzdGF0ZW1lbnQgZW5kCitDUkVBVEUgVEFCTEUgZnBfcGtfY29tbWl0IChhIGludCBQUklN QVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY29tbWl0IChhIGludCBSRUZFUkVOQ0VTIGZw X3BrX2NvbW1pdAorICAgIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEKTsKK0lOU0VSVCBJ TlRPIGZwX3BrX2NvbW1pdCBWQUxVRVMgKDEpOworQkVHSU47CitJTlNFUlQgSU5UTyBmcF9ma19j b21taXQgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDEpOwor SU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoOTk5KTsKK0NPTU1JVDsKK0RST1AgVEFC TEUgZnBfZmtfY29tbWl0LCBmcF9wa19jb21taXQ7CisKKy0tIENyb3NzLXR5cGUgRksgd2l0aCBi dWxrIGluc2VydDogaW50OCBGSyByZWZlcmVuY2luZyBpbnQ0IFBLLAorLS0gdmFsdWVzIGNhc3Qg ZHVyaW5nIGFycmF5IGNvbnN0cnVjdGlvbgorQ1JFQVRFIFRBQkxFIGZwX3BrX2Nyb3NzIChhIGlu dDQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfY3Jvc3MgU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxLCAyMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Nyb3NzIChhIGludDggUkVGRVJF TkNFUyBmcF9wa19jcm9zcyk7CitJTlNFUlQgSU5UTyBmcF9ma19jcm9zcyBTRUxFQ1QgZ2VuZXJh dGVfc2VyaWVzKDEsIDIwMCk7CitJTlNFUlQgSU5UTyBmcF9ma19jcm9zcyBWQUxVRVMgKDk5OSk7 CitEUk9QIFRBQkxFIGZwX2ZrX2Nyb3NzLCBmcF9wa19jcm9zczsKKworLS0gRHVwbGljYXRlIEZL IHZhbHVlczogd2hlbiB1c2luZyB0aGUgYmF0Y2hlZCBTQU9QIHBhdGgsIGV2ZXJ5CistLSByb3cg bXVzdCBiZSByZWNvZ25pemVkIGFzIHNhdGlzZmllZCwgbm90IGp1c3QgdGhlIGZpcnN0IG1hdGNo CitDUkVBVEUgVEFCTEUgZnBfcGtfZHVwIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5U TyBmcF9wa19kdXAgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19kdXAgKGEgaW50IFJF RkVSRU5DRVMgZnBfcGtfZHVwKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2R1cCBTRUxFQ1QgMSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworRFJPUCBUQUJMRSBmcF9ma19kdXAsIGZwX3BrX2R1 cDsKLS0gCjIuNDcuMwoK --00000000000096fdfc064dc3b7f9 Content-Type: application/octet-stream; name="v9-0002-Cache-per-batch-resources-for-fast-path-foreign-k.patch" Content-Disposition: attachment; filename="v9-0002-Cache-per-batch-resources-for-fast-path-foreign-k.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn4jged21 RnJvbSA4MWEwMTQ5YWFmMDQ0ZGMzMjYxMDM1NWM5MTc4YTQwZTdmN2I0ZDU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMjQgTWFyIDIwMjYgMjA6MTM6MDMgKzA5MDAKU3ViamVjdDogW1BBVENIIHY5 IDIvM10gQ2FjaGUgcGVyLWJhdGNoIHJlc291cmNlcyBmb3IgZmFzdC1wYXRoIGZvcmVpZ24ga2V5 CiBjaGVja3MKClRoZSBmYXN0LXBhdGggRksgY2hlY2sgaW50cm9kdWNlZCBpbiA8Y29tbWl0LWhh c2gtMDAwMT4gb3BlbnMgYW5kCmNsb3NlcyB0aGUgUEsgcmVsYXRpb24sIGluZGV4LCBzY2FuIGRl c2NyaXB0b3IsIGFuZCB0dXBsZSBzbG90IG9uCmV2ZXJ5IHRyaWdnZXIgaW52b2NhdGlvbi4gIEZv ciBidWxrIG9wZXJhdGlvbnMgdGhhdCBmaXJlIHRob3VzYW5kcyBvZgpGSyB0cmlnZ2VycyBpbiBh IHNpbmdsZSBzdGF0ZW1lbnQsIHRoaXMgcmVwZWF0ZWQgc2V0dXAvdGVhcmRvd24KZG9taW5hdGVz IHRoZSBjb3N0LgoKSW50cm9kdWNlIFJJX0Zhc3RQYXRoRW50cnksIGEgcGVyLWNvbnN0cmFpbnQg aGFzaCB0YWJsZSB0aGF0IGNhY2hlcwp0aGUgb3BlbiBSZWxhdGlvbiAocGtfcmVsLCBpZHhfcmVs KSwgSW5kZXhTY2FuRGVzYywgVHVwbGVUYWJsZVNsb3QsCmFuZCBhIHJlZ2lzdGVyZWQgU25hcHNo b3QgYWNyb3NzIGFsbCB0cmlnZ2VyIGludm9jYXRpb25zIHdpdGhpbiBhCnNpbmdsZSB0cmlnZ2Vy LWZpcmluZyBiYXRjaC4gIEVudHJpZXMgYXJlIGNyZWF0ZWQgbGF6aWx5IG9uIGZpcnN0IHVzZQp2 aWEgcmlfRmFzdFBhdGhHZXRFbnRyeSgpIGFuZCBwZXJzaXN0IHVudGlsIHRoZSBiYXRjaCBlbmRz LgoKVGhlIHNuYXBzaG90IGlzIHJlZ2lzdGVyZWQgb25jZSBhdCBlbnRyeSBjcmVhdGlvbiB0aW1l LCBhbmQgaXRzCmN1cmNpZCBpcyBwYXRjaGVkIGluIHBsYWNlIG9uIGVhY2ggc3Vic2VxdWVudCBy b3cgcmF0aGVyIHRoYW4KdGFraW5nIGEgZnJlc2ggc25hcHNob3QgcGVyIGludm9jYXRpb24uICBU aGlzIGF2b2lkcyB0aGUgcGVyLXJvdwpQcm9jQXJyYXlMb2NrIGFjcXVpcmUvcmVsZWFzZSB0aGF0 IEdldFNuYXBzaG90RGF0YSgpIHJlcXVpcmVzIGV2ZW4KaW4gaXRzIGZhc3QtcGF0aCByZXVzZSBj YXNlLiAgVW5kZXIgUkVQRUFUQUJMRSBSRUFEIHRoZSB0cmFuc2FjdGlvbgpzbmFwc2hvdCBpcyBp bW11dGFibGUgc28gY2FjaGluZyBpcyBhIG5vLW9wLiAgVW5kZXIgUkVBRCBDT01NSVRURUQKdGhl IGNhY2hlZCBzbmFwc2hvdCB3aWxsIG5vdCByZWZsZWN0IFBLIHJvd3MgY29tbWl0dGVkIGJ5IG90 aGVyCmJhY2tlbmRzIG1pZC1iYXRjaC4gIFRoZSBTUEkgcGF0aCdzIHBlci1yb3cgR2V0U25hcHNo b3REYXRhKCkgbWlnaHQKY2F0Y2ggdGhlc2UgZGVwZW5kaW5nIG9uIHRpbWluZywgYnV0IHRoYXQg dmlzaWJpbGl0eSBpcwpub24tZGV0ZXJtaW5pc3RpYyAtLSB3aGV0aGVyIGEgZ2l2ZW4gcm93J3Mg RksgY2hlY2sgaGFwcGVucyB0byBzZWUKYSBjb25jdXJyZW50IGNvbW1pdCBpcyBhIHJhY2UsIG5v dCBhIGd1YXJhbnRlZS4gIFRoZSBGSyBjaGVjayBvbmx5Cm5lZWRzIFBLIHJvd3MgdmlzaWJsZSBi ZWZvcmUgdGhlIHN0YXRlbWVudCBiZWdhbiBwbHVzIGVmZmVjdHMgb2YKZWFybGllciB0cmlnZ2Vy cyAodHJhY2tlZCBieSBjdXJjaWQpLCBhbmQgTG9ja1R1cGxlS2V5U2hhcmUgcHJldmVudHMKdGhl IFBLIHJvdyBmcm9tIGRpc2FwcGVhcmluZyByZWdhcmRsZXNzLiAgQ29tbWFuZENvdW50ZXJJbmNy ZW1lbnQKc3RpbGwgcnVucyBvbiBlYWNoIGludm9jYXRpb24gb2YgcmlfRmFzdFBhdGhDaGVja0Nh Y2hlZCgpLCBtYXRjaGluZwp0aGUgU1BJIHBhdGgncyBwZXItcm93IENDSSBpbnNpZGUgX1NQSV9l eGVjdXRlX3BsYW4uCgpTbmFwc2hvdFNldENvbW1hbmRJZCgpIG9ubHkgcGF0Y2hlcyB0aGUgcHJv Y2Vzcy1nbG9iYWwgc3RhdGljcywgbm90CnJlZ2lzdGVyZWQgY29waWVzLCBzbyB3ZSBwYXRjaCBl bnRyeS0+c25hcHNob3QtPmN1cmNpZCBkaXJlY3RseS4KClBlcm1pc3Npb24gY2hlY2tzIChzY2hl bWEgVVNBR0UgKyB0YWJsZSBTRUxFQ1QpIGFyZSBwZXJmb3JtZWQgb25jZSBhdApjYWNoZSBlbnRy eSBjcmVhdGlvbiByYXRoZXIgdGhhbiBwZXIgZmx1c2guICBUaGUgUkkgY2hlY2sgcnVucyBhcyB0 aGUKUEsgdGFibGUgb3duZXIgKHZpYSBTZXRVc2VySWRBbmRTZWNDb250ZXh0KSwgc28gaW4gcHJh Y3RpY2UgdGhlc2UKY2hlY2tzIHZlcmlmeSB0aGF0IHRoZSBvd25lciBoYXMgYWNjZXNzIHRvIHRo ZWlyIG93biB0YWJsZSAtLSBhCmNvbmRpdGlvbiB0aGF0IGhvbGRzIHVubGVzcyBwcml2aWxlZ2Vz IGhhdmUgYmVlbiBleHBsaWNpdGx5IHJldm9rZWQKZnJvbSB0aGUgb3duZXIsIHdoaWNoIHdvdWxk IGVxdWFsbHkgYnJlYWsgdGhlIFNQSSBwYXRoLiAgQ2hlY2tpbmcKb25jZSBwZXIgYmF0Y2ggYXZv aWRzIHJlcGVhdGVkIHN5c2NhY2hlIGxvb2t1cHMgZnJvbQpwZ19jbGFzc19hY2xjaGVjaygpIHdp dGggbm8gdXNlci12aXNpYmxlIGJlaGF2aW9yIGNoYW5nZS4KCkxpZmVjeWNsZSBtYW5hZ2VtZW50 OgoKICAtIEFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2s6IEEgbmV3IGdlbmVyYWwtcHVycG9zZSBj YWxsYmFjawogICAgbWVjaGFuaXNtIGluIHRyaWdnZXIuYy4gIENhbGxiYWNrcyByZWdpc3RlcmVk IHZpYQogICAgUmVnaXN0ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrKCkgZmlyZSBhdCB0aGUg ZW5kIG9mIGVhY2gKICAgIHRyaWdnZXItZmlyaW5nIGJhdGNoIChBZnRlclRyaWdnZXJFbmRRdWVy eSBmb3IgaW1tZWRpYXRlCiAgICBjb25zdHJhaW50cywgQWZ0ZXJUcmlnZ2VyRmlyZURlZmVycmVk IGF0IENPTU1JVCwgYW5kCiAgICBBZnRlclRyaWdnZXJTZXRTdGF0ZSBmb3IgU0VUIENPTlNUUkFJ TlRTIElNTUVESUFURSkuICBUaGUgUkkgY29kZQogICAgcmVnaXN0ZXJzIHJpX0Zhc3RQYXRoVGVh cmRvd24gYXMgYSBiYXRjaCBjYWxsYmFjaywgd2hpY2ggZG9lcwogICAgb3JkZXJseSB0ZWFyZG93 bjogaW5kZXhfZW5kc2NhbiwgaW5kZXhfY2xvc2UsIHRhYmxlX2Nsb3NlLAogICAgRXhlY0Ryb3BT aW5nbGVUdXBsZVRhYmxlU2xvdCwgVW5yZWdpc3RlclNuYXBzaG90LgoKICAtIEJhdGNoIGNhbGxi YWNrcyBvbmx5IGZpcmUgYXQgdGhlIG91dGVybW9zdCBxdWVyeSBsZXZlbAogICAgKHF1ZXJ5X2Rl cHRoID09IDAgaW4gQWZ0ZXJUcmlnZ2VyRW5kUXVlcnkgYW5kIGNoZWNrZWQgaW5zaWRlCiAgICBG aXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MpLCBzbyBuZXN0ZWQgcXVlcmllcyBmcm9tIFNQ SQogICAgaW5zaWRlIG90aGVyIEFGVEVSIHRyaWdnZXJzIGRvIG5vdCB0ZWFyIGRvd24gdGhlIGNh Y2hlIG1pZC1iYXRjaC4KCiAgLSBYYWN0Q2FsbGJhY2s6IHJpX0Zhc3RQYXRoWGFjdENhbGxiYWNr IE5VTExzIHRoZSBzdGF0aWMgY2FjaGUKICAgIHBvaW50ZXIgYXQgdHJhbnNhY3Rpb24gZW5kLiAg T24gdGhlIG5vcm1hbCBwYXRoLCBjbGVhbnVwIGFscmVhZHkKICAgIHJhbiB2aWEgdGhlIGJhdGNo IGNhbGxiYWNrOyB0aGlzIGhhbmRsZXMgdGhlIGFib3J0IHBhdGggd2hlcmUKICAgIFRvcFRyYW5z YWN0aW9uQ29udGV4dCBkZXN0cnVjdGlvbiBmcmVlcyB0aGUgbWVtb3J5IGJ1dAogICAgUmVzb3Vy Y2VPd25lciBoYW5kbGVzIHRoZSBhY3R1YWwgcmVzb3VyY2UgY2xlYW51cC4KCiAgLSBTdWJYYWN0 Q2FsbGJhY2s6IHJpX0Zhc3RQYXRoU3ViWGFjdENhbGxiYWNrIE5VTExzIHRoZSBzdGF0aWMKICAg IGNhY2hlIHBvaW50ZXIgb24gc3VidHJhbnNhY3Rpb24gYWJvcnQuICBSZXNvdXJjZU93bmVyIGFs cmVhZHkKICAgIGNsZWFuZWQgdXAgdGhlIHJlc291cmNlczsgdGhpcyBwcmV2ZW50cyB0aGUgYmF0 Y2ggY2FsbGJhY2sgZnJvbQogICAgdHJ5aW5nIHRvIGRvdWJsZS1jbG9zZSB0aGVtLgoKICAtIEFm dGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUoKTogRXhwb3J0ZWQgYWNjZXNzb3IgdGhhdCByZXR1cm5z IHRydWUKICAgIHdoZW4gYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA+PSAwLiAgRHVyaW5nIEFM VEVSIFRBQkxFIC4uLiBBREQKICAgIEZPUkVJR04gS0VZIHZhbGlkYXRpb24sIFJJIHRyaWdnZXJz IGFyZSBjYWxsZWQgZGlyZWN0bHkgb3V0c2lkZQogICAgdGhlIGFmdGVyLXRyaWdnZXIgZnJhbWV3 b3JrLCBzbyBiYXRjaCBjYWxsYmFja3Mgd291bGQgbmV2ZXIgZmlyZS4KICAgIFRoZSBmYXN0LXBh dGggY29kZSB1c2VzIHRoaXMgdG8gZmFsbCBiYWNrIHRvIGEgbm9uLWNhY2hlZAogICAgcGVyLWlu dm9jYXRpb24gcGF0aCAob3Blbi9zY2FuL2Nsb3NlIGVhY2ggY2FsbCkgaW4gdGhhdCBjb250ZXh0 LgoKQmVuY2htYXJraW5nIHNob3dzIHRoYXQgdG9nZXRoZXIgd2l0aCA8Y29tbWl0LWhhc2gtMDAw MT4sIGJ1bGsgRksKaW5zZXJ0cyBhcmUgfjIuMnggZmFzdGVyIChpbnQgUEsgLyBpbnQgRkssIDFN IHJvd3MsIFBLIHRhYmxlCmFuZCBpbmRleCBjYWNoZWQpLgoKQXV0aG9yOiBBbWl0IExhbmdvdGUg PGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpDby1hdXRob3JlZC1ieTogSnVud2FuZyBaaGFvIDx6 aGp3cGt1QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21h aWwuY29tPgpUZXN0ZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FGNEMwd3MzY08rejVjTGtQdXZ3bkF3a1Nw N3NmdmdHajN5UT1MaTZLTk1xQUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3RyaWdnZXIuYyAgICAgICAgICAgIHwgIDkwICsrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9yaV90cmlnZ2Vycy5jICAgICAgIHwgMjc1ICsrKysrKysrKysrKysrKysrKysrKy0KIHNy Yy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaCAgICAgICAgICAgIHwgIDE4ICsrCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCB8ICA4NiArKysrKysrCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwgICAgICB8ICA4MCArKysrKysrCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICB8ICAgMyArCiA2IGZpbGVzIGNoYW5n ZWQsIDU0OSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIu YwppbmRleCA2NTk2ODQzYThkOC4uYjc0NDJjZjZjYjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMK QEAgLTM4OTMsNiArMzg5Myw4IEBAIHR5cGVkZWYgc3RydWN0IEFmdGVyVHJpZ2dlcnNEYXRhCiAJ LyogcGVyLXN1YnRyYW5zYWN0aW9uLWxldmVsIGRhdGE6ICovCiAJQWZ0ZXJUcmlnZ2Vyc1RyYW5z RGF0YSAqdHJhbnNfc3RhY2s7CS8qIGFycmF5IG9mIHN0cnVjdHMgc2hvd24gYmVsb3cgKi8KIAlp bnQJCQltYXh0cmFuc2RlcHRoOwkvKiBhbGxvY2F0ZWQgbGVuIG9mIGFib3ZlIGFycmF5ICovCisK KwlMaXN0CSAgICpiYXRjaF9jYWxsYmFja3M7CS8qIExpc3Qgb2YgQWZ0ZXJUcmlnZ2VyQ2FsbGJh Y2tJdGVtICovCiB9IEFmdGVyVHJpZ2dlcnNEYXRhOwogCiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc1F1 ZXJ5RGF0YQpAQCAtMzkyOSw2ICszOTMxLDEzIEBAIHN0cnVjdCBBZnRlclRyaWdnZXJzVGFibGVE YXRhCiAJVHVwbGVUYWJsZVNsb3QgKnN0b3Jlc2xvdDsJLyogZm9yIGNvbnZlcnRpbmcgdG8gdHVw bGVzdG9yZSdzIGZvcm1hdCAqLwogfTsKIAorLyogRW50cnkgaW4gYWZ0ZXJUcmlnZ2Vycy5iYXRj aF9jYWxsYmFja3MgKi8KK3R5cGVkZWYgc3RydWN0IEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbQor eworCUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2sgY2FsbGJhY2s7CisJdm9pZAkgICAqYXJnOwor fSBBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW07CisKIHN0YXRpYyBBZnRlclRyaWdnZXJzRGF0YSBh ZnRlclRyaWdnZXJzOwogCiBzdGF0aWMgdm9pZCBBZnRlclRyaWdnZXJFeGVjdXRlKEVTdGF0ZSAq ZXN0YXRlLApAQCAtMzk2NCw2ICszOTczLDcgQEAgc3RhdGljIFNldENvbnN0cmFpbnRTdGF0ZSBT ZXRDb25zdHJhaW50U3RhdGVBZGRJdGVtKFNldENvbnN0cmFpbnRTdGF0ZSBzdGF0ZSwKIAkJCQkJ CQkJCQkJCQlPaWQgdGdvaWQsIGJvb2wgdGdpc2RlZmVycmVkKTsKIHN0YXRpYyB2b2lkIGNhbmNl bF9wcmlvcl9zdG10X3RyaWdnZXJzKE9pZCByZWxpZCwgQ21kVHlwZSBjbWRUeXBlLCBpbnQgdGdl dmVudCk7CiAKK3N0YXRpYyB2b2lkIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyh2b2lk KTsKIAogLyoKICAqIEdldCB0aGUgRkRXIHR1cGxlc3RvcmUgZm9yIHRoZSBjdXJyZW50IHRyaWdn ZXIgcXVlcnkgbGV2ZWwsIGNyZWF0aW5nIGl0CkBAIC01MDg5LDYgKzUwOTksNyBAQCBBZnRlclRy aWdnZXJCZWdpblhhY3Qodm9pZCkKIAkgKi8KIAlhZnRlclRyaWdnZXJzLmZpcmluZ19jb3VudGVy ID0gKENvbW1hbmRJZCkgMTsJLyogbXVzdG4ndCBiZSAwICovCiAJYWZ0ZXJUcmlnZ2Vycy5xdWVy eV9kZXB0aCA9IC0xOworCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0gTklMOwogCiAJ LyoKIAkgKiBWZXJpZnkgdGhhdCB0aGVyZSBpcyBubyBsZWZ0b3ZlciBzdGF0ZSByZW1haW5pbmcu ICBJZiB0aGVzZSBhc3NlcnRpb25zCkBAIC01MjEwLDYgKzUyMjEsOCBAQCBBZnRlclRyaWdnZXJF bmRRdWVyeShFU3RhdGUgKmVzdGF0ZSkKIAkJCWJyZWFrOwogCX0KIAorCUZpcmVBZnRlclRyaWdn ZXJCYXRjaENhbGxiYWNrcygpOworCiAJLyogUmVsZWFzZSBxdWVyeS1sZXZlbC1sb2NhbCBzdG9y YWdlLCBpbmNsdWRpbmcgdHVwbGVzdG9yZXMgaWYgYW55ICovCiAJQWZ0ZXJUcmlnZ2VyRnJlZVF1 ZXJ5KCZhZnRlclRyaWdnZXJzLnF1ZXJ5X3N0YWNrW2FmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGhd KTsKIApAQCAtNTMxNyw2ICs1MzMwLDggQEAgQWZ0ZXJUcmlnZ2VyRmlyZURlZmVycmVkKHZvaWQp CiAJCQlicmVhazsJCQkJLyogYWxsIGZpcmVkICovCiAJfQogCisJRmlyZUFmdGVyVHJpZ2dlckJh dGNoQ2FsbGJhY2tzKCk7CisKIAkvKgogCSAqIFdlIGRvbid0IGJvdGhlciBmcmVlaW5nIHRoZSBl dmVudCBsaXN0LCBzaW5jZSBpdCB3aWxsIGdvIGF3YXkgYW55d2F5CiAJICogKGFuZCBtb3JlIGVm ZmljaWVudGx5IHRoYW4gdmlhIHBmcmVlKSBpbiBBZnRlclRyaWdnZXJFbmRYYWN0LgpAQCAtNjA1 OSw2ICs2MDc0LDggQEAgQWZ0ZXJUcmlnZ2VyU2V0U3RhdGUoQ29uc3RyYWludHNTZXRTdG10ICpz dG10KQogCQkJCWJyZWFrOwkJCS8qIGFsbCBmaXJlZCAqLwogCQl9CiAKKwkJRmlyZUFmdGVyVHJp Z2dlckJhdGNoQ2FsbGJhY2tzKCk7CisKIAkJaWYgKHNuYXBzaG90X3NldCkKIAkJCVBvcEFjdGl2 ZVNuYXBzaG90KCk7CiAJfQpAQCAtNjc1NSwzICs2NzcyLDc2IEBAIGNoZWNrX21vZGlmaWVkX3Zp cnR1YWxfZ2VuZXJhdGVkKFR1cGxlRGVzYyB0dXBkZXNjLCBIZWFwVHVwbGUgdHVwbGUpCiAKIAly ZXR1cm4gdHVwbGU7CiB9CisKKy8qCisgKiBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJh Y2sKKyAqCQlSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50 IHRyaWdnZXItZmlyaW5nCisgKgkJYmF0Y2ggY29tcGxldGVzLgorICoKKyAqIE11c3QgYmUgY2Fs bGVkIGZyb20gd2l0aGluIGEgdHJpZ2dlciBmdW5jdGlvbidzIGV4ZWN1dGlvbiBjb250ZXh0Cisg KiAoaS5lLiwgd2hpbGUgYWZ0ZXJUcmlnZ2VycyBzdGF0ZSBpcyBhY3RpdmUpLgorICoKKyAqIFRo ZSBjYWxsYmFjayBsaXN0IGlzIGNsZWFyZWQgYWZ0ZXIgaW52b2NhdGlvbiwgc28gdGhlIGNhbGxl ciBtdXN0CisgKiByZS1yZWdpc3RlciBmb3IgZWFjaCBuZXcgYmF0Y2ggaWYgbmVlZGVkLgorICov Cit2b2lkCitSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2soQWZ0ZXJUcmlnZ2VyQmF0 Y2hDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCQkJICB2b2lkICphcmcpCit7CisJQWZ0ZXJUcmln Z2VyQ2FsbGJhY2tJdGVtICppdGVtOworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJLyoKKwkg KiBBbGxvY2F0ZSBpbiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgc28gdGhlIGl0ZW0gc3Vydml2ZXMg Zm9yIHRoZSBkdXJhdGlvbgorCSAqIG9mIHRoZSBiYXRjaCwgd2hpY2ggbWF5IHNwYW4gbXVsdGlw bGUgdHJpZ2dlciBpbnZvY2F0aW9ucy4KKwkgKi8KKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oVG9wVHJhbnNhY3Rpb25Db250ZXh0KTsKKwlpdGVtID0gcGFsbG9jKHNpemVvZihBZnRl clRyaWdnZXJDYWxsYmFja0l0ZW0pKTsKKwlpdGVtLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCWl0 ZW0tPmFyZyA9IGFyZzsKKwlhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyA9CisJCWxhcHBl bmQoYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MsIGl0ZW0pOworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJh Y2tzCisgKgkJSW52b2tlIGFuZCBjbGVhciBhbGwgcmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFja3Mu CisgKgorICogT25seSBmaXJlcyBhdCB0aGUgb3V0ZXJtb3N0IHF1ZXJ5IGxldmVsIChxdWVyeV9k ZXB0aCA9PSAwKSBvciBmcm9tCisgKiB0b3AtbGV2ZWwgb3BlcmF0aW9ucyAocXVlcnlfZGVwdGgg PT0gLTEsIGUuZy4gQWZ0ZXJUcmlnZ2VyRmlyZURlZmVycmVkCisgKiBhdCBDT01NSVQpLiAgTmVz dGVkIHF1ZXJpZXMgZnJvbSBTUEkgaW5zaWRlIEFGVEVSIHRyaWdnZXJzIHJ1biBhdAorICogZGVw dGggPiAwIGFuZCBtdXN0IG5vdCB0ZWFyIGRvd24gcmVzb3VyY2VzIHRoZSBvdXRlciBiYXRjaCBz dGlsbCBuZWVkcy4KKyAqLworc3RhdGljIHZvaWQKK0ZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxi YWNrcyh2b2lkKQoreworCUxpc3RDZWxsICAgKmxjOworCisJaWYgKGFmdGVyVHJpZ2dlcnMucXVl cnlfZGVwdGggPiAwKQorCQlyZXR1cm47CisKKwlmb3JlYWNoKGxjLCBhZnRlclRyaWdnZXJzLmJh dGNoX2NhbGxiYWNrcykKKwl7CisJCUFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqaXRlbSA9IGxm aXJzdChsYyk7CisKKwkJaXRlbS0+Y2FsbGJhY2soaXRlbS0+YXJnKTsKKwl9CisKKwlsaXN0X2Zy ZWVfZGVlcChhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyk7CisJYWZ0ZXJUcmlnZ2Vycy5i YXRjaF9jYWxsYmFja3MgPSBOSUw7Cit9CisKKy8qCisgKiBBZnRlclRyaWdnZXJCYXRjaElzQWN0 aXZlCisgKgkJUmV0dXJucyB0cnVlIGlmIHdlJ3JlIGluc2lkZSBhIHF1ZXJ5LWxldmVsIHRyaWdn ZXIgYmF0Y2ggd2hlcmUKKyAqCQlyZWdpc3RlcmVkIGJhdGNoIGNhbGxiYWNrcyB3aWxsIGFjdHVh bGx5IGJlIGludm9rZWQuCisgKgorICogVGhpcyBpcyBmYWxzZSBkdXJpbmcgdmFsaWRhdGVGb3Jl aWduS2V5Q29uc3RyYWludCgpLCB3aGljaCBjYWxscworICogUkkgdHJpZ2dlciBmdW5jdGlvbnMg ZGlyZWN0bHkgb3V0c2lkZSB0aGUgYWZ0ZXItdHJpZ2dlciBmcmFtZXdvcmsuCisgKi8KK2Jvb2wK K0FmdGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUodm9pZCkKK3sKKwlyZXR1cm4gYWZ0ZXJUcmlnZ2Vy cy5xdWVyeV9kZXB0aCA+PSAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JpX3RyaWdnZXJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRl eCA2ZDhkZTY0NDcxZi4uMTJkZTBkZDJjZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9yaV90cmlnZ2Vycy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vy cy5jCkBAIC0xOTYsNiArMTk2LDIzIEBAIHR5cGVkZWYgc3RydWN0IFJJX0NvbXBhcmVIYXNoRW50 cnkKIAlGbWdySW5mbwljYXN0X2Z1bmNfZmluZm87CS8qIGluIGNhc2Ugd2UgbXVzdCBjb2VyY2Ug aW5wdXQgKi8KIH0gUklfQ29tcGFyZUhhc2hFbnRyeTsKIAorLyoKKyAqIFJJX0Zhc3RQYXRoRW50 cnkKKyAqCQlQZXItY29uc3RyYWludCBjYWNoZSBvZiByZXNvdXJjZXMgbmVlZGVkIGJ5IHJpX0Zh c3RQYXRoQ2hlY2tDYWNoZWQoKS4KKyAqCisgKiBPbmUgZW50cnkgcGVyIGNvbnN0cmFpbnQsIGtl eWVkIGJ5IHBnX2NvbnN0cmFpbnQgT0lELiAgQ3JlYXRlZCBsYXppbHkKKyAqIGJ5IHJpX0Zhc3RQ YXRoR2V0RW50cnkoKSBvbiBmaXJzdCB1c2Ugd2l0aGluIGEgdHJpZ2dlci1maXJpbmcgYmF0Y2gK KyAqIGFuZCB0b3JuIGRvd24gYnkgcmlfRmFzdFBhdGhUZWFyZG93bigpIGF0IGJhdGNoIGVuZC4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgUklfRmFzdFBhdGhFbnRyeQoreworCU9pZAkJCWNvbm9pZDsJ CQkvKiBoYXNoIGtleTogcGdfY29uc3RyYWludCBPSUQgKi8KKwlSZWxhdGlvbglwa19yZWw7CisJ UmVsYXRpb24JaWR4X3JlbDsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCVR1cGxlVGFibGVT bG90ICpzbG90OworCVNuYXBzaG90CXNuYXBzaG90OwkJLyogcmVnaXN0ZXJlZCBzbmFwc2hvdCBm b3IgdGhlIHNjYW4gKi8KK30gUklfRmFzdFBhdGhFbnRyeTsKIAogLyoKICAqIExvY2FsIGRhdGEK QEAgLTIwNSw2ICsyMjIsOCBAQCBzdGF0aWMgSFRBQiAqcmlfcXVlcnlfY2FjaGUgPSBOVUxMOwog c3RhdGljIEhUQUIgKnJpX2NvbXBhcmVfY2FjaGUgPSBOVUxMOwogc3RhdGljIGRjbGlzdF9oZWFk IHJpX2NvbnN0cmFpbnRfY2FjaGVfdmFsaWRfbGlzdDsKIAorc3RhdGljIEhUQUIgKnJpX2Zhc3Rw YXRoX2NhY2hlID0gTlVMTDsKK3N0YXRpYyBib29sIHJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lz dGVyZWQgPSBmYWxzZTsKIAogLyoKICAqIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKQEAgLTI1 NSw2ICsyNzQsOCBAQCBzdGF0aWMgYm9vbCByaV9QZXJmb3JtQ2hlY2soY29uc3QgUklfQ29uc3Ry YWludEluZm8gKnJpaW5mbywKIAkJCQkJCQlib29sIGRldGVjdE5ld1Jvd3MsIGludCBleHBlY3Rf T0spOwogc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhDaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5m byAqcmlpbmZvLAogCQkJCQkJCSBSZWxhdGlvbiBma19yZWwsIFR1cGxlVGFibGVTbG90ICpuZXdz bG90KTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQ2hlY2tDYWNoZWQoY29uc3QgUklfQ29uc3Ry YWludEluZm8gKnJpaW5mbywKKwkJCQkJCQkJICAgUmVsYXRpb24gZmtfcmVsLCBUdXBsZVRhYmxl U2xvdCAqbmV3c2xvdCk7CiBzdGF0aWMgYm9vbCByaV9GYXN0UGF0aFByb2JlT25lKFJlbGF0aW9u IHBrX3JlbCwgUmVsYXRpb24gaWR4X3JlbCwKIAkJCQkJCQkJSW5kZXhTY2FuRGVzYyBzY2FuZGVz YywgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LCBjb25z dCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLApAQCAtMjc3LDYgKzI5OCw5IEBAIHBnX25vcmV0 dXJuIHN0YXRpYyB2b2lkIHJpX1JlcG9ydFZpb2xhdGlvbihjb25zdCBSSV9Db25zdHJhaW50SW5m byAqcmlpbmZvLAogCQkJCQkJCQkJCSAgIFJlbGF0aW9uIHBrX3JlbCwgUmVsYXRpb24gZmtfcmVs LAogCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICp2aW9sYXRvcnNsb3QsIFR1cGxlRGVzYyB0 dXBkZXNjLAogCQkJCQkJCQkJCSAgIGludCBxdWVyeW5vLCBib29sIGlzX3Jlc3RyaWN0LCBib29s IHBhcnRnb25lKTsKK3N0YXRpYyBSSV9GYXN0UGF0aEVudHJ5ICpyaV9GYXN0UGF0aEdldEVudHJ5 KGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCQkJCSBSZWxhdGlvbiBm a19yZWwpOworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhUZWFyZG93bih2b2lkICphcmcpOwogCiAK IC8qCkBAIC0zODcsMTIgKzQxMSwxNiBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmln ZGF0YSkKIAkgKiBsb2NrLiAgVGhpcyBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byB0aGUg U1BJIHBhdGggYmVsb3cgYnV0IGF2b2lkcwogCSAqIHRoZSBwZXItcm93IGV4ZWN1dG9yIG92ZXJo ZWFkLgogCSAqCi0JICogcmlfRmFzdFBhdGhDaGVjaygpIHJlcG9ydHMgdGhlIHZpb2xhdGlvbiBp dHNlbGYgKHZpYSBlcmVwb3J0KSBpZiBubwotCSAqIG1hdGNoaW5nIFBLIHJvdyBpcyBmb3VuZCwg c28gaXQgb25seSByZXR1cm5zIG9uIHN1Y2Nlc3MuCisJICogcmlfRmFzdFBhdGhDaGVja0NhY2hl ZCgpIGFuZCByaV9GYXN0UGF0aENoZWNrKCkgcmVwb3J0IHRoZSB2aW9sYXRpb24KKwkgKiB0aGVt c2VsdmVzIGlmIG5vIG1hdGNoaW5nIFBLIHJvdyBpcyBmb3VuZCwgc28gdGhleSBvbmx5IHJldHVy biBvbgorCSAqIHN1Y2Nlc3MuCiAJICovCiAJaWYgKHJpX2Zhc3RwYXRoX2lzX2FwcGxpY2FibGUo cmlpbmZvKSkKIAl7Ci0JCXJpX0Zhc3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWwsIG5ld3Nsb3Qp OworCQlpZiAoQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZSgpKQorCQkJcmlfRmFzdFBhdGhDaGVj a0NhY2hlZChyaWluZm8sIGZrX3JlbCwgbmV3c2xvdCk7CisJCWVsc2UKKwkJCXJpX0Zhc3RQYXRo Q2hlY2socmlpbmZvLCBma19yZWwsIG5ld3Nsb3QpOwogCQlyZXR1cm4gUG9pbnRlckdldERhdHVt KE5VTEwpOwogCX0KIApAQCAtMjc0Miw2ICsyNzcwLDczIEBAIHJpX0Zhc3RQYXRoQ2hlY2soY29u c3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAl0YWJsZV9jbG9zZShwa19yZWwsIE5vTG9j ayk7CiB9CiAKKy8qCisgKiByaV9GYXN0UGF0aENoZWNrQ2FjaGVkCisgKgkJQ2FjaGVkLXJlc291 cmNlIHZhcmlhbnQgb2YgcmlfRmFzdFBhdGhDaGVjayBmb3IgdXNlIHdpdGhpbiB0aGUKKyAqCQlh ZnRlci10cmlnZ2VyIGZyYW1ld29yay4KKyAqCisgKiBVc2VzIHRoZSBwZXItYmF0Y2ggY2FjaGUg KFJJX0Zhc3RQYXRoRW50cnkpIHRvIGF2b2lkIHBlci1yb3cgcmVsYXRpb24KKyAqIG9wZW4vY2xv c2UsIHNjYW4gYmVnaW4vZW5kLCBhbmQgc25hcHNob3QgcmVnaXN0cmF0aW9uLiAgVGhlIHNuYXBz aG90J3MKKyAqIGN1cmNpZCBpcyBwYXRjaGVkIGVhY2ggY2FsbCBzbyB0aGUgc2NhbiBzZWVzIGVm ZmVjdHMgb2YgcHJpb3IgdHJpZ2dlcnMuCisgKgorICogTGlrZSByaV9GYXN0UGF0aENoZWNrLCBy ZXBvcnRzIHRoZSB2aW9sYXRpb24gdmlhIHJpX1JlcG9ydFZpb2xhdGlvbigpCisgKiBpZiBubyBt YXRjaGluZyBQSyByb3cgaXMgZm91bmQuCisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aENo ZWNrQ2FjaGVkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCSAgIFJlbGF0 aW9uIGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpCit7CisJUklfRmFzdFBhdGhFbnRy eSAqZnBlbnRyeSA9IHJpX0Zhc3RQYXRoR2V0RW50cnkocmlpbmZvLCBma19yZWwpOworCVJlbGF0 aW9uCXBrX3JlbCA9IGZwZW50cnktPnBrX3JlbDsKKwlSZWxhdGlvbglpZHhfcmVsID0gZnBlbnRy eS0+aWR4X3JlbDsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjID0gZnBlbnRyeS0+c2NhbmRlc2M7 CisJU25hcHNob3QJc25hcHNob3QgPSBmcGVudHJ5LT5zbmFwc2hvdDsKKwlUdXBsZVRhYmxlU2xv dCAqc2xvdCA9IGZwZW50cnktPnNsb3Q7CisJRGF0dW0JCXBrX3ZhbHNbSU5ERVhfTUFYX0tFWVNd OworCWNoYXIJCXBrX251bGxzW0lOREVYX01BWF9LRVlTXTsKKwlTY2FuS2V5RGF0YSBza2V5W0lO REVYX01BWF9LRVlTXTsKKwlib29sCQlmb3VuZDsKKwlPaWQJCQlzYXZlZF91c2VyaWQ7CisJaW50 CQkJc2F2ZWRfc2VjX2NvbnRleHQ7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkvKgorCSAq IEFkdmFuY2UgdGhlIGNvbW1hbmQgY291bnRlciBhbmQgcGF0Y2ggdGhlIGNhY2hlZCBzbmFwc2hv dCdzIGN1cmNpZCBzbworCSAqIHRoZSBzY2FuIHNlZXMgUEsgcm93cyBpbnNlcnRlZCBieSBlYXJs aWVyIHRyaWdnZXJzIGluIHRoaXMgc3RhdGVtZW50LgorCSAqLworCUNvbW1hbmRDb3VudGVySW5j cmVtZW50KCk7CisJZnBlbnRyeS0+c25hcHNob3QtPmN1cmNpZCA9IEdldEN1cnJlbnRDb21tYW5k SWQoZmFsc2UpOworCisJaWYgKHJpaW5mby0+ZnBtZXRhID09IE5VTEwpCisJCXJpX3BvcHVsYXRl X2Zhc3RwYXRoX21ldGFkYXRhKChSSV9Db25zdHJhaW50SW5mbyAqKSByaWluZm8sCisJCQkJCQkJ CQkgIGZrX3JlbCwgaWR4X3JlbCk7CisJQXNzZXJ0KHJpaW5mby0+ZnBtZXRhKTsKKworCUdldFVz ZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVkX3VzZXJpZCwgJnNhdmVkX3NlY19jb250ZXh0KTsKKwlT ZXRVc2VySWRBbmRTZWNDb250ZXh0KFJlbGF0aW9uR2V0Rm9ybShwa19yZWwpLT5yZWxvd25lciwK KwkJCQkJCSAgIHNhdmVkX3NlY19jb250ZXh0IHwKKwkJCQkJCSAgIFNFQ1VSSVRZX0xPQ0FMX1VT RVJJRF9DSEFOR0UgfAorCQkJCQkJICAgU0VDVVJJVFlfTk9GT1JDRV9STFMpOworCisJcmlfRXh0 cmFjdFZhbHVlcyhma19yZWwsIG5ld3Nsb3QsIHJpaW5mbywgZmFsc2UsIHBrX3ZhbHMsIHBrX251 bGxzKTsKKwlidWlsZF9pbmRleF9zY2Fua2V5cyhyaWluZm8sIGlkeF9yZWwsIHBrX3ZhbHMsIHBr X251bGxzLCBza2V5KTsKKworCS8qCisJICogVGhlIGNhY2hlZCBzY2FuZGVzYyBsaXZlcyBpbiBU b3BUcmFuc2FjdGlvbkNvbnRleHQsIGJ1dCB0aGUgYnRyZWUgQU0KKwkgKiBkZWZlcnMgc29tZSBh bGxvY2F0aW9ucyB0byB0aGUgZmlyc3QgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGwuICBFbnN1cmUK KwkgKiB0aG9zZSBsYW5kIGluIFRvcFRyYW5zYWN0aW9uQ29udGV4dCB0b28uCisJICovCisJb2xk Y3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7CisJZm91 bmQgPSByaV9GYXN0UGF0aFByb2JlT25lKHBrX3JlbCwgaWR4X3JlbCwgc2NhbmRlc2MsIHNsb3Qs IHNuYXBzaG90LAorCQkJCQkJCQlyaWluZm8sIHNrZXksIHJpaW5mby0+bmtleXMpOworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZWRf dXNlcmlkLCBzYXZlZF9zZWNfY29udGV4dCk7CisKKwlpZiAoIWZvdW5kKQorCQlyaV9SZXBvcnRW aW9sYXRpb24ocmlpbmZvLCBwa19yZWwsIGZrX3JlbCwgbmV3c2xvdCwgTlVMTCwKKwkJCQkJCSAg IFJJX1BMQU5fQ0hFQ0tfTE9PS1VQUEssIGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAgKiByaV9G YXN0UGF0aFByb2JlT25lCiAgKgkJUHJvYmUgdGhlIFBLIGluZGV4IGZvciBvbmUgc2V0IG9mIHNj YW4ga2V5cywgbG9jayB0aGUgbWF0Y2hpbmcKQEAgLTM2NzMsMyArMzc2OCwxNzcgQEAgUklfRktl eV90cmlnZ2VyX3R5cGUoT2lkIHRnZm9pZCkKIAogCXJldHVybiBSSV9UUklHR0VSX05PTkU7CiB9 CisKKy8qCisgKiByaV9GYXN0UGF0aFRlYXJkb3duCisgKgkJVGVhciBkb3duIGFsbCBjYWNoZWQg ZmFzdC1wYXRoIHN0YXRlLgorICoKKyAqIENhbGxlZCBhcyBhbiBBZnRlclRyaWdnZXJCYXRjaENh bGxiYWNrIGF0IGVuZCBvZiBiYXRjaC4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoVGVh cmRvd24odm9pZCAqYXJnKQoreworCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklfRmFzdFBh dGhFbnRyeSAqZW50cnk7CisKKwlpZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwkJcmV0 dXJuOworCisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCByaV9mYXN0cGF0aF9jYWNoZSk7CisJd2hp bGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCS8q IENsb3NlIGJvdGggc2NhbnMgYmVmb3JlIGNsb3NpbmcgaWR4X3JlbC4gKi8KKwkJaWYgKGVudHJ5 LT5zY2FuZGVzYykKKwkJCWluZGV4X2VuZHNjYW4oZW50cnktPnNjYW5kZXNjKTsKKwkJaWYgKGVu dHJ5LT5pZHhfcmVsKQorCQkJaW5kZXhfY2xvc2UoZW50cnktPmlkeF9yZWwsIE5vTG9jayk7CisJ CWlmIChlbnRyeS0+cGtfcmVsKQorCQkJdGFibGVfY2xvc2UoZW50cnktPnBrX3JlbCwgTm9Mb2Nr KTsKKwkJaWYgKGVudHJ5LT5zbG90KQorCQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChl bnRyeS0+c2xvdCk7CisJCWlmIChlbnRyeS0+c25hcHNob3QpCisJCQlVbnJlZ2lzdGVyU25hcHNo b3QoZW50cnktPnNuYXBzaG90KTsKKwl9CisKKwloYXNoX2Rlc3Ryb3kocmlfZmFzdHBhdGhfY2Fj aGUpOworCXJpX2Zhc3RwYXRoX2NhY2hlID0gTlVMTDsKKwlyaV9mYXN0cGF0aF9jYWxsYmFja19y ZWdpc3RlcmVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHJpX2Zhc3RwYXRoX3hhY3RfY2Fs bGJhY2tfcmVnaXN0ZXJlZCA9IGZhbHNlOworCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhYYWN0 Q2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJLyoKKwkgKiBUb3BUcmFu c2FjdGlvbkNvbnRleHQgaXMgZGVzdHJveWVkIGF0IGVuZCBvZiB0cmFuc2FjdGlvbiwgdGFraW5n IHRoZQorCSAqIGhhc2ggdGFibGUgYW5kIGFsbCBjYWNoZWQgcmVzb3VyY2VzIHdpdGggaXQuICBK dXN0IHJlc2V0IG91ciBzdGF0aWMKKwkgKiBwb2ludGVycyBzbyB3ZSBkb24ndCBkZXJlZmVyZW5j ZSBmcmVlZCBtZW1vcnkuCisJICoKKwkgKiBJbiB0aGUgbm9ybWFsIChub24tZXJyb3IpIHBhdGgs IHJpX0Zhc3RQYXRoVGVhcmRvd24gYWxyZWFkeSByYW4gdmlhIHRoZQorCSAqIGJhdGNoIGNhbGxi YWNrIGFuZCBkaWQgb3JkZXJseSB0ZWFyZG93bi4gIEhlcmUgd2UncmUganVzdCBoYW5kbGluZyB0 aGUKKwkgKiBhYm9ydCBwYXRoIHdoZXJlIHRoYXQgY2FsbGJhY2sgbmV2ZXIgZmlyZWQuCisJICov CisJcmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOworCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lz dGVyZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoU3ViWGFjdENhbGxi YWNrKFN1YlhhY3RFdmVudCBldmVudCwgU3ViVHJhbnNhY3Rpb25JZCBteVN1YmlkLAorCQkJCQkJ ICAgU3ViVHJhbnNhY3Rpb25JZCBwYXJlbnRTdWJpZCwgdm9pZCAqYXJnKQoreworCWlmIChldmVu dCA9PSBTVUJYQUNUX0VWRU5UX0FCT1JUX1NVQikKKwl7CisJCS8qCisJCSAqIFJlc291cmNlT3du ZXIgYWxyZWFkeSBjbGVhbmVkIHVwIHJlbGF0aW9ucyBhbmQgc25hcHNob3RzLiAgSnVzdAorCQkg KiBOVUxMIG91ciBwb2ludGVycyBzbyB0aGUgc3RpbGwtcmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFj ayBiZWNvbWVzIGEKKwkJICogbm8tb3AuICBUaGUgaGFzaCB0YWJsZSBtZW1vcnkgaW4gVG9wVHJh bnNhY3Rpb25Db250ZXh0IHdpbGwgYmUKKwkJICogZnJlZWQgYXQgdHJhbnNhY3Rpb24gZW5kLgor CQkgKi8KKwkJcmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOworCQlyaV9mYXN0cGF0aF9jYWxsYmFj a19yZWdpc3RlcmVkID0gZmFsc2U7CisJfQorfQorCisvKgorICogcmlfRmFzdFBhdGhHZXRFbnRy eQorICoJCUxvb2sgdXAgb3IgY3JlYXRlIGEgcGVyLWJhdGNoIGNhY2hlIGVudHJ5IGZvciB0aGUg Z2l2ZW4gY29uc3RyYWludC4KKyAqCisgKiBPbiBmaXJzdCBjYWxsIGZvciBhIGNvbnN0cmFpbnQg d2l0aGluIGEgYmF0Y2g6IG9wZW5zIHBrX3JlbCBhbmQgdGhlCisgKiBpbmRleCwgYmVnaW5zIGFu IGluZGV4IHNjYW4sIGFsbG9jYXRlcyBhIHJlc3VsdCBzbG90LCBhbmQgcmVnaXN0ZXJzCisgKiB0 aGUgY2xlYW51cCBjYWxsYmFjay4KKyAqCisgKiBPbiBzdWJzZXF1ZW50IGNhbGxzOiByZXR1cm5z IHRoZSBleGlzdGluZyBlbnRyeS4gIENhbGxlciB1c2VzCisgKiBpbmRleF9yZXNjYW4oKSB3aXRo IG5ldyBrZXlzLgorICovCitzdGF0aWMgUklfRmFzdFBhdGhFbnRyeSAqCityaV9GYXN0UGF0aEdl dEVudHJ5KGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCkK K3sKKwlSSV9GYXN0UGF0aEVudHJ5ICplbnRyeTsKKwlib29sCQlmb3VuZDsKKworCS8qIENyZWF0 ZSBoYXNoIHRhYmxlIG9uIGZpcnN0IHVzZSBpbiB0aGlzIGJhdGNoICovCisJaWYgKHJpX2Zhc3Rw YXRoX2NhY2hlID09IE5VTEwpCisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJaWYgKCFyaV9mYXN0 cGF0aF94YWN0X2NhbGxiYWNrX3JlZ2lzdGVyZWQpCisJCXsKKwkJCVJlZ2lzdGVyWGFjdENhbGxi YWNrKHJpX0Zhc3RQYXRoWGFjdENhbGxiYWNrLCBOVUxMKTsKKwkJCVJlZ2lzdGVyU3ViWGFjdENh bGxiYWNrKHJpX0Zhc3RQYXRoU3ViWGFjdENhbGxiYWNrLCBOVUxMKTsKKwkJCXJpX2Zhc3RwYXRo X3hhY3RfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IHRydWU7CisJCX0KKworCQljdGwua2V5c2l6ZSA9 IHNpemVvZihPaWQpOworCQljdGwuZW50cnlzaXplID0gc2l6ZW9mKFJJX0Zhc3RQYXRoRW50cnkp OworCQljdGwuaGN4dCA9IFRvcFRyYW5zYWN0aW9uQ29udGV4dDsKKwkJcmlfZmFzdHBhdGhfY2Fj aGUgPSBoYXNoX2NyZWF0ZSgiUkkgZmFzdC1wYXRoIGNhY2hlIiwKKwkJCQkJCQkJCQkxNiwKKwkJ CQkJCQkJCQkmY3RsLAorCQkJCQkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NP TlRFWFQpOworCX0KKworCWVudHJ5ID0gaGFzaF9zZWFyY2gocmlfZmFzdHBhdGhfY2FjaGUsICZy aWluZm8tPmNvbnN0cmFpbnRfaWQsCisJCQkJCQlIQVNIX0VOVEVSLCAmZm91bmQpOworCisJaWYg KCFmb3VuZCkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCQlPaWQJCQlzYXZlZF91c2Vy aWQ7CisJCWludAkJCXNhdmVkX3NlY19jb250ZXh0OworCisJCS8qCisJCSAqIFplcm8gb3V0IG5v bi1rZXkgZmllbGRzIHNvIHJpX0Zhc3RQYXRoVGVhcmRvd24gaXMgc2FmZSBpZiB3ZSBlcnJvcgor CQkgKiBvdXQgZHVyaW5nIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24gYmVsb3cuCisJCSAqLworCQlt ZW1zZXQoKChjaGFyICopIGVudHJ5KSArIG9mZnNldG9mKFJJX0Zhc3RQYXRoRW50cnksIHBrX3Jl bCksIDAsCisJCQkgICBzaXplb2YoUklfRmFzdFBhdGhFbnRyeSkgLSBvZmZzZXRvZihSSV9GYXN0 UGF0aEVudHJ5LCBwa19yZWwpKTsKKworCQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o VG9wVHJhbnNhY3Rpb25Db250ZXh0KTsKKworCQkvKgorCQkgKiBPcGVuIFBLIHRhYmxlIGFuZCBp dHMgdW5pcXVlIGluZGV4LgorCQkgKgorCQkgKiBSb3dTaGFyZUxvY2sgb24gcGtfcmVsIG1hdGNo ZXMgd2hhdCB0aGUgU1BJIHBhdGgncyBTRUxFQ1QgLi4uIEZPUgorCQkgKiBLRVkgU0hBUkUgd291 bGQgYWNxdWlyZSBhcyBhIHJlbGF0aW9uLWxldmVsIGxvY2suIEFjY2Vzc1NoYXJlTG9jaworCQkg KiBvbiB0aGUgaW5kZXggaXMgc3RhbmRhcmQgZm9yIGluZGV4IHNjYW5zLgorCQkgKgorCQkgKiBX ZSBkb24ndCByZWxlYXNlIHRoZXNlIGxvY2tzIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiwgbWF0 Y2hpbmcgU1BJCisJCSAqIGJlaGF2aW9yLgorCQkgKi8KKwkJZW50cnktPnBrX3JlbCA9IHRhYmxl X29wZW4ocmlpbmZvLT5wa19yZWxpZCwgUm93U2hhcmVMb2NrKTsKKwkJZW50cnktPmlkeF9yZWwg PSBpbmRleF9vcGVuKHJpaW5mby0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJLyoK KwkJICogUmVnaXN0ZXIgYW4gaW5pdGlhbCBzbmFwc2hvdC4gIEl0cyBjdXJjaWQgd2lsbCBiZSBw YXRjaGVkIGluIHBsYWNlCisJCSAqIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgKHNlZSByaV9GYXN0 UGF0aENoZWNrQ2FjaGVkKCkpLCBhdm9pZGluZworCQkgKiBwZXItcm93IEdldFNuYXBzaG90RGF0 YSgpIG92ZXJoZWFkLgorCQkgKi8KKwkJZW50cnktPnNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hv dChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJCWVudHJ5LT5zbG90ID0gdGFibGVfc2xv dF9jcmVhdGUoZW50cnktPnBrX3JlbCwgTlVMTCk7CisKKwkJZW50cnktPnNjYW5kZXNjID0gaW5k ZXhfYmVnaW5zY2FuKGVudHJ5LT5wa19yZWwsIGVudHJ5LT5pZHhfcmVsLAorCQkJCQkJCQkJCSAg ZW50cnktPnNuYXBzaG90LCBOVUxMLAorCQkJCQkJCQkJCSAgcmlpbmZvLT5ua2V5cywgMCk7CisK KwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkJLyogRW5zdXJlIGNsZWFudXAg YXQgZW5kIG9mIHRoaXMgdHJpZ2dlci1maXJpbmcgYmF0Y2ggKi8KKwkJaWYgKCFyaV9mYXN0cGF0 aF9jYWxsYmFja19yZWdpc3RlcmVkKQorCQl7CisJCQlSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNo Q2FsbGJhY2socmlfRmFzdFBhdGhUZWFyZG93biwgTlVMTCk7CisJCQlyaV9mYXN0cGF0aF9jYWxs YmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKKwkJfQorCisJCUdldFVzZXJJZEFuZFNlY0NvbnRleHQo JnNhdmVkX3VzZXJpZCwgJnNhdmVkX3NlY19jb250ZXh0KTsKKwkJU2V0VXNlcklkQW5kU2VjQ29u dGV4dChSZWxhdGlvbkdldEZvcm0oZW50cnktPnBrX3JlbCktPnJlbG93bmVyLAorCQkJCQkJCSAg IHNhdmVkX3NlY19jb250ZXh0IHwKKwkJCQkJCQkgICBTRUNVUklUWV9MT0NBTF9VU0VSSURfQ0hB TkdFIHwKKwkJCQkJCQkgICBTRUNVUklUWV9OT0ZPUkNFX1JMUyk7CisJCXJpX0NoZWNrUGVybWlz c2lvbnMoZW50cnktPnBrX3JlbCk7CisJCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZWRfdXNl cmlkLCBzYXZlZF9zZWNfY29udGV4dCk7CisJfQorCisJcmV0dXJuIGVudHJ5OworfQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvdHJpZ2dlci5oCmluZGV4IDI3YWY1Mjg0NDA2Li43NjY0Mjk4ZjVjOCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L3RyaWdnZXIuaApAQCAtMjg5LDQgKzI4OSwyMiBAQCBleHRlcm4gdm9pZCBSSV9QYXJ0aXRpb25S ZW1vdmVfQ2hlY2soVHJpZ2dlciAqdHJpZ2dlciwgUmVsYXRpb24gZmtfcmVsLAogCiBleHRlcm4g aW50CVJJX0ZLZXlfdHJpZ2dlcl90eXBlKE9pZCB0Z2ZvaWQpOwogCisvKgorICogQ2FsbGJhY2sg dHlwZSBmb3IgZW5kLW9mLXRyaWdnZXItYmF0Y2ggbm90aWZpY2F0aW9ucy4KKyAqCisgKiBSZWdp c3RlcmVkIHZpYSBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2soKS4gIEludm9rZWQg d2hlbgorICogYSBiYXRjaCBvZiBhZnRlci10cmlnZ2VyIHByb2Nlc3NpbmcgY29tcGxldGVzOgor ICoJLSBBZnRlclRyaWdnZXJFbmRRdWVyeSgpICAgICAgKGltbWVkaWF0ZSBjb25zdHJhaW50cykK KyAqCS0gQWZ0ZXJUcmlnZ2VyRmlyZURlZmVycmVkKCkgIChkZWZlcnJlZCBjb25zdHJhaW50cyBh dCBDT01NSVQpCisgKgktIEFmdGVyVHJpZ2dlclNldFN0YXRlKCkgICAgICAoU0VUIENPTlNUUkFJ TlRTIElNTUVESUFURSkKKyAqCisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBjbGVhcmVkIGFmdGVy IGVhY2ggYmF0Y2guICBDYWxsZXJzIG11c3QKKyAqIHJlLXJlZ2lzdGVyIGlmIHRoZXkgbmVlZCB0 byBiZSBjYWxsZWQgYWdhaW4gaW4gYSBzdWJzZXF1ZW50IGJhdGNoLgorICovCit0eXBlZGVmIHZv aWQgKCpBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrKSAodm9pZCAqYXJnKTsKKworZXh0ZXJuIHZv aWQgUmVnaXN0ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrKEFmdGVyVHJpZ2dlckJhdGNoQ2Fs bGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJCQkJCSAgdm9pZCAqYXJnKTsKK2V4dGVybiBib29sIEFm dGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUodm9pZCk7CisKICNlbmRpZgkJCQkJCQkvKiBUUklHR0VS X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXku b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKaW5kZXggMDgy NmY1MTgwMDQuLjI1ZDUwNWM2YzEyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2ZvcmVpZ25fa2V5Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVp Z25fa2V5Lm91dApAQCAtMzUwNCwzICszNTA0LDg5IEBAIERFVEFJTDogIGRyb3AgY2FzY2FkZXMg dG8gdGFibGUgZmtwYXJ0MTNfdDEKIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtwYXJ0MTNfdDIK IGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtwYXJ0MTNfdDMKIFJFU0VUIHNlYXJjaF9wYXRoOwor LS0gVGVzdHMgZm9yZWlnbiBrZXkgY2hlY2sgZmFzdC1wYXRoIG5vLWNhY2hlIHBhdGguCitDUkVB VEUgVEFCTEUgZnBfcGtfYWx0ZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZw X3BrX2FsdGVyIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKK0NSRUFURSBUQUJMRSBm cF9ma19hbHRlciAoYSBpbnQpOworSU5TRVJUIElOVE8gZnBfZmtfYWx0ZXIgU0VMRUNUIGdlbmVy YXRlX3NlcmllcygxLCAxMDApOworLS0gVmFsaWRhdGlvbiBwYXRoOiBzaG91bGQgc3VjY2VlZAor QUxURVIgVEFCTEUgZnBfZmtfYWx0ZXIgQUREIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIGZw X3BrX2FsdGVyOworSU5TRVJUIElOVE8gZnBfZmtfYWx0ZXIgVkFMVUVTICgxMDEpOyAgLS0gc2hv dWxkIGZhaWwgKGNvbnN0cmFpbnQgYWN0aXZlKQorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9u IHRhYmxlICJmcF9ma19hbHRlciIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBf ZmtfYWx0ZXJfYV9ma2V5IgorREVUQUlMOiAgS2V5IChhKT0oMTAxKSBpcyBub3QgcHJlc2VudCBp biB0YWJsZSAiZnBfcGtfYWx0ZXIiLgorRFJPUCBUQUJMRSBmcF9ma19hbHRlciwgZnBfcGtfYWx0 ZXI7CistLSBTZXBhcmF0ZSB0ZXN0OiB2YWxpZGF0aW9uIGNhdGNoZXMgZXhpc3RpbmcgdmlvbGF0 aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfYWx0ZXIyIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNF UlQgSU5UTyBmcF9wa19hbHRlcjIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19hbHRl cjIgKGEgaW50KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyMiBWQUxVRVMgKDEpLCAoMjAwKTsg IC0tIDIwMCBoYXMgbm8gUEsgbWF0Y2gKK0FMVEVSIFRBQkxFIGZwX2ZrX2FsdGVyMiBBREQgRk9S RUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXIyOyAgLS0gc2hvdWxkIGZhaWwKK0VS Uk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfYWx0ZXIyIiB2aW9sYXRlcyBm b3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19hbHRlcjJfYV9ma2V5IgorREVUQUlMOiAgS2V5 IChhKT0oMjAwKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGtfYWx0ZXIyIi4KK0RST1Ag VEFCTEUgZnBfZmtfYWx0ZXIyLCBmcF9wa19hbHRlcjI7CistLSBUZXN0cyB0aGF0IHRoZSBmYXN0 LXBhdGggaGFuZGxlcyBjYWNoaW5nIGZvciBtdWx0aXBsZSBjb25zdHJhaW50cworQ1JFQVRFIFRB QkxFIGZwX3BrMSAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX3BrMiAoYiBp bnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGsxIFZBTFVFUyAoMSk7CitJTlNFUlQg SU5UTyBmcF9wazIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9tdWx0aV9mayAoCisgICAg YSBpbnQgUkVGRVJFTkNFUyBmcF9wazEsCisgICAgYiBpbnQgUkVGRVJFTkNFUyBmcF9wazIKKyk7 CitJTlNFUlQgSU5UTyBmcF9tdWx0aV9mayBWQUxVRVMgKDEsIDEpOyAgLS0gdHdvIGNvbnN0cmFp bnRzLCBvbmUgYmF0Y2gKK0lOU0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMik7ICAt LSBzZWNvbmQgY29uc3RyYWludCBmYWlscworRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRh YmxlICJmcF9tdWx0aV9mayIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfbXVs dGlfZmtfYl9ma2V5IgorREVUQUlMOiAgS2V5IChiKT0oMikgaXMgbm90IHByZXNlbnQgaW4gdGFi bGUgImZwX3BrMiIuCitEUk9QIFRBQkxFIGZwX211bHRpX2ZrLCBmcF9wazEsIGZwX3BrMjsKKy0t IFRlc3QgdGhhdCBmYXN0LXBhdGggY2FjaGUgaGFuZGxlcyBkZWZlcnJlZCBjb25zdHJhaW50cyBh bmQgU0VUIENPTlNUUkFJTlRTIElNTUVESUFURQorQ1JFQVRFIFRBQkxFIGZwX3BrX2RlZmVyIChh IGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfZGVmZXIgKGEgaW50IFJFRkVS RU5DRVMgZnBfcGtfZGVmZXIgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJU IElOVE8gZnBfcGtfZGVmZXIgVkFMVUVTICgxKSwgKDIpOworQkVHSU47CitJTlNFUlQgSU5UTyBm cF9ma19kZWZlciBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgy KTsKK1NFVCBDT05TVFJBSU5UUyBBTEwgSU1NRURJQVRFOyAgLS0gZmlyZXMgYmF0Y2ggY2FsbGJh Y2sgaGVyZQorSU5TRVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgzKTsgIC0tIHNob3VsZCBm YWlsLCBhbHNvIHRlc3RzIHRoYXQgY2FjaGUgd2FzIGNsZWFuZWQgdXAKK0VSUk9SOiAgaW5zZXJ0 IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfZGVmZXIiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNv bnN0cmFpbnQgImZwX2ZrX2RlZmVyX2FfZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDMpIGlzIG5v dCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19kZWZlciIuCitDT01NSVQ7CitEUk9QIFRBQkxFIGZw X3BrX2RlZmVyLCBmcF9ma19kZWZlcjsKKy0tIFN1YnRyYW5zYWN0aW9uIGFib3J0OiBjYWNoZWQg c3RhdGUgbXVzdCBiZSBpbnZhbGlkYXRlZCBvbiBST0xMQkFDSyBUTworQ1JFQVRFIFRBQkxFIGZw X3BrX3N1YnhhY3QgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19zdWJ4 YWN0IChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX3N1YnhhY3QpOworSU5TRVJUIElOVE8gZnBfcGtf c3VieGFjdCBWQUxVRVMgKDEpLCAoMik7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1Ynhh Y3QgVkFMVUVTICgxKTsKK1NBVkVQT0lOVCBzcDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0 IFZBTFVFUyAoMik7CitST0xMQkFDSyBUTyBzcDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0 IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1QgKiBGUk9NIGZwX2ZrX3N1YnhhY3Q7CisgYSAK Ky0tLQorIDEKKyAxCisoMiByb3dzKQorCitEUk9QIFRBQkxFIGZwX2ZrX3N1YnhhY3QsIGZwX3Br X3N1YnhhY3Q7CistLSBGSyBjaGVjayBtdXN0IHNlZSBQSyByb3dzIGluc2VydGVkIGJ5IGVhcmxp ZXIgQUZURVIgdHJpZ2dlcnMKKy0tIGZpcmluZyBvbiB0aGUgc2FtZSBzdGF0ZW1lbnQKK0NSRUFU RSBUQUJMRSBmcF9wa19jY2kgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9m a19jY2kgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfY2NpKTsKK0NSRUFURSBGVU5DVElPTiBmcF9h dXRvX3BrKCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJTgorICBSQUlTRSBOT1RJQ0UgJ2Zw X2F1dG9fcGsgY2FsbGVkJzsKKyAgSU5TRVJUIElOVE8gZnBfcGtfY2NpIFZBTFVFUyAoTkVXLmEp OworICBSRVRVUk4gTkVXOworRU5EICQkIExBTkdVQUdFIHBscGdzcWw7CistLSBOYW1lIHNvcnRz IGJlZm9yZSB0aGUgUkkgdHJpZ2dlciwgc28gZmlyZXMgZmlyc3QgcGVyIHJvdworQ1JFQVRFIFRS SUdHRVIgIkFBQV9hdXRvIiBBRlRFUiBJTlNFUlQgT04gZnBfZmtfY2NpCisgIEZPUiBFQUNIIFJP VyBFWEVDVVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKTsKKy0tIFNob3VsZCBzdWNjZWVkOiBBQUFf YXV0byBwcm92aXNpb25zIHRoZSBQSyByb3cgYmVmb3JlIFJJIGNoZWNrCitJTlNFUlQgSU5UTyBm cF9ma19jY2kgVkFMVUVTICgxKSwgKDIpLCAoMyk7CitOT1RJQ0U6ICBmcF9hdXRvX3BrIGNhbGxl ZAorTk9USUNFOiAgZnBfYXV0b19wayBjYWxsZWQKK05PVElDRTogIGZwX2F1dG9fcGsgY2FsbGVk CitEUk9QIFRBQkxFIGZwX2ZrX2NjaSwgZnBfcGtfY2NpOworRFJPUCBGVU5DVElPTiBmcF9hdXRv X3BrOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCmluZGV4IGU5ZWUyOTMzMWNiLi5j ZWRkMjBjOGQxMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXku c3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbApAQCAtMjQ5OCwz ICsyNDk4LDgzIEBAIFdJVEggY3RlIEFTICgKIAogRFJPUCBTQ0hFTUEgZmtwYXJ0MTMgQ0FTQ0FE RTsKIFJFU0VUIHNlYXJjaF9wYXRoOworCistLSBUZXN0cyBmb3JlaWduIGtleSBjaGVjayBmYXN0 LXBhdGggbm8tY2FjaGUgcGF0aC4KK0NSRUFURSBUQUJMRSBmcF9wa19hbHRlciAoYSBpbnQgUFJJ TUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIgU0VMRUNUIGdlbmVyYXRlX3Nlcmll cygxLCAxMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyIChhIGludCk7CitJTlNFUlQgSU5U TyBmcF9ma19hbHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CistLSBWYWxpZGF0 aW9uIHBhdGg6IHNob3VsZCBzdWNjZWVkCitBTFRFUiBUQUJMRSBmcF9ma19hbHRlciBBREQgRk9S RUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXI7CitJTlNFUlQgSU5UTyBmcF9ma19h bHRlciBWQUxVRVMgKDEwMSk7ICAtLSBzaG91bGQgZmFpbCAoY29uc3RyYWludCBhY3RpdmUpCitE Uk9QIFRBQkxFIGZwX2ZrX2FsdGVyLCBmcF9wa19hbHRlcjsKKworLS0gU2VwYXJhdGUgdGVzdDog dmFsaWRhdGlvbiBjYXRjaGVzIGV4aXN0aW5nIHZpb2xhdGlvbgorQ1JFQVRFIFRBQkxFIGZwX3Br X2FsdGVyMiAoYSBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIyIFZB TFVFUyAoMSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfYWx0ZXIyIChhIGludCk7CitJTlNFUlQgSU5U TyBmcF9ma19hbHRlcjIgVkFMVUVTICgxKSwgKDIwMCk7ICAtLSAyMDAgaGFzIG5vIFBLIG1hdGNo CitBTFRFUiBUQUJMRSBmcF9ma19hbHRlcjIgQUREIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VT IGZwX3BrX2FsdGVyMjsgIC0tIHNob3VsZCBmYWlsCitEUk9QIFRBQkxFIGZwX2ZrX2FsdGVyMiwg ZnBfcGtfYWx0ZXIyOworCistLSBUZXN0cyB0aGF0IHRoZSBmYXN0LXBhdGggaGFuZGxlcyBjYWNo aW5nIGZvciBtdWx0aXBsZSBjb25zdHJhaW50cworQ1JFQVRFIFRBQkxFIGZwX3BrMSAoYSBpbnQg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX3BrMiAoYiBpbnQgUFJJTUFSWSBLRVkpOwor SU5TRVJUIElOVE8gZnBfcGsxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9wazIgVkFMVUVT ICgxKTsKK0NSRUFURSBUQUJMRSBmcF9tdWx0aV9mayAoCisgICAgYSBpbnQgUkVGRVJFTkNFUyBm cF9wazEsCisgICAgYiBpbnQgUkVGRVJFTkNFUyBmcF9wazIKKyk7CitJTlNFUlQgSU5UTyBmcF9t dWx0aV9mayBWQUxVRVMgKDEsIDEpOyAgLS0gdHdvIGNvbnN0cmFpbnRzLCBvbmUgYmF0Y2gKK0lO U0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMik7ICAtLSBzZWNvbmQgY29uc3RyYWlu dCBmYWlscworRFJPUCBUQUJMRSBmcF9tdWx0aV9maywgZnBfcGsxLCBmcF9wazI7CisKKy0tIFRl c3QgdGhhdCBmYXN0LXBhdGggY2FjaGUgaGFuZGxlcyBkZWZlcnJlZCBjb25zdHJhaW50cyBhbmQg U0VUIENPTlNUUkFJTlRTIElNTUVESUFURQorQ1JFQVRFIFRBQkxFIGZwX3BrX2RlZmVyIChhIGlu dCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfZGVmZXIgKGEgaW50IFJFRkVSRU5D RVMgZnBfcGtfZGVmZXIgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElO VE8gZnBfcGtfZGVmZXIgVkFMVUVTICgxKSwgKDIpOworCitCRUdJTjsKK0lOU0VSVCBJTlRPIGZw X2ZrX2RlZmVyIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDIp OworU0VUIENPTlNUUkFJTlRTIEFMTCBJTU1FRElBVEU7ICAtLSBmaXJlcyBiYXRjaCBjYWxsYmFj ayBoZXJlCitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDMpOyAgLS0gc2hvdWxkIGZh aWwsIGFsc28gdGVzdHMgdGhhdCBjYWNoZSB3YXMgY2xlYW5lZCB1cAorQ09NTUlUOworRFJPUCBU QUJMRSBmcF9wa19kZWZlciwgZnBfZmtfZGVmZXI7CisKKy0tIFN1YnRyYW5zYWN0aW9uIGFib3J0 OiBjYWNoZWQgc3RhdGUgbXVzdCBiZSBpbnZhbGlkYXRlZCBvbiBST0xMQkFDSyBUTworQ1JFQVRF IFRBQkxFIGZwX3BrX3N1YnhhY3QgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBm cF9ma19zdWJ4YWN0IChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX3N1YnhhY3QpOworSU5TRVJUIElO VE8gZnBfcGtfc3VieGFjdCBWQUxVRVMgKDEpLCAoMik7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZw X2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK1NBVkVQT0lOVCBzcDE7CitJTlNFUlQgSU5UTyBmcF9m a19zdWJ4YWN0IFZBTFVFUyAoMik7CitST0xMQkFDSyBUTyBzcDE7CitJTlNFUlQgSU5UTyBmcF9m a19zdWJ4YWN0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1QgKiBGUk9NIGZwX2ZrX3N1Ynhh Y3Q7CitEUk9QIFRBQkxFIGZwX2ZrX3N1YnhhY3QsIGZwX3BrX3N1YnhhY3Q7CisKKy0tIEZLIGNo ZWNrIG11c3Qgc2VlIFBLIHJvd3MgaW5zZXJ0ZWQgYnkgZWFybGllciBBRlRFUiB0cmlnZ2Vycwor LS0gZmlyaW5nIG9uIHRoZSBzYW1lIHN0YXRlbWVudAorQ1JFQVRFIFRBQkxFIGZwX3BrX2NjaSAo YSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2NjaSAoYSBpbnQgUkVGRVJF TkNFUyBmcF9wa19jY2kpOworCitDUkVBVEUgRlVOQ1RJT04gZnBfYXV0b19waygpIFJFVFVSTlMg dHJpZ2dlciBBUyAkJAorQkVHSU4KKyAgUkFJU0UgTk9USUNFICdmcF9hdXRvX3BrIGNhbGxlZCc7 CisgIElOU0VSVCBJTlRPIGZwX3BrX2NjaSBWQUxVRVMgKE5FVy5hKTsKKyAgUkVUVVJOIE5FVzsK K0VORCAkJCBMQU5HVUFHRSBwbHBnc3FsOworCistLSBOYW1lIHNvcnRzIGJlZm9yZSB0aGUgUkkg dHJpZ2dlciwgc28gZmlyZXMgZmlyc3QgcGVyIHJvdworQ1JFQVRFIFRSSUdHRVIgIkFBQV9hdXRv IiBBRlRFUiBJTlNFUlQgT04gZnBfZmtfY2NpCisgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNU SU9OIGZwX2F1dG9fcGsoKTsKKworLS0gU2hvdWxkIHN1Y2NlZWQ6IEFBQV9hdXRvIHByb3Zpc2lv bnMgdGhlIFBLIHJvdyBiZWZvcmUgUkkgY2hlY2sKK0lOU0VSVCBJTlRPIGZwX2ZrX2NjaSBWQUxV RVMgKDEpLCAoMiksICgzKTsKKworRFJPUCBUQUJMRSBmcF9ma19jY2ksIGZwX3BrX2NjaTsKK0RS T1AgRlVOQ1RJT04gZnBfYXV0b19wazsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYzUx YTBhOTAzYTYuLjBiMDUzMDRhMjk0IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzAs NiArMzAsOCBAQCBBZGRGb3JlaWduVXBkYXRlVGFyZ2V0c19mdW5jdGlvbgogQWRkckluZm8KIEFm Zml4Tm9kZQogQWZmaXhOb2RlRGF0YQorQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjaworQWZ0ZXJU cmlnZ2VyQ2FsbGJhY2tJdGVtCiBBZnRlclRyaWdnZXJFdmVudAogQWZ0ZXJUcmlnZ2VyRXZlbnRD aHVuawogQWZ0ZXJUcmlnZ2VyRXZlbnREYXRhCkBAIC0yNDc4LDYgKzI0ODAsNyBAQCBSSVgKIFJJ X0NvbXBhcmVIYXNoRW50cnkKIFJJX0NvbXBhcmVLZXkKIFJJX0NvbnN0cmFpbnRJbmZvCitSSV9G YXN0UGF0aEVudHJ5CiBSSV9RdWVyeUhhc2hFbnRyeQogUklfUXVlcnlLZXkKIFJURUtpbmQKLS0g CjIuNDcuMwoK --00000000000096fdfc064dc3b7f9 Content-Type: application/octet-stream; name="v9-0001-Add-fast-path-for-foreign-key-constraint-checks.patch" Content-Disposition: attachment; filename="v9-0001-Add-fast-path-for-foreign-key-constraint-checks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn4jged52 RnJvbSA5MmU4ZmQzMGQ4N2EwOGZhNjc1ZTdkMTVjZjYwYjQwYzExZDlhZmM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMjQgTWFyIDIwMjYgMTg6Mjg6MDAgKzA5MDAKU3ViamVjdDogW1BBVENIIHY5 IDEvM10gQWRkIGZhc3QgcGF0aCBmb3IgZm9yZWlnbiBrZXkgY29uc3RyYWludCBjaGVja3MKCkFk ZCBhIGZhc3QtcGF0aCBvcHRpbWl6YXRpb24gZm9yIGZvcmVpZ24ga2V5IGNoZWNrcyB0aGF0IGJ5 cGFzc2VzIFNQSQpieSBkaXJlY3RseSBwcm9iaW5nIHRoZSB1bmlxdWUgaW5kZXggb24gdGhlIHJl ZmVyZW5jZWQgdGFibGUuCgpUaGUgZmFzdCBwYXRoIGFwcGxpZXMgd2hlbiB0aGUgcmVmZXJlbmNl ZCB0YWJsZSBpcyBub3QgcGFydGl0aW9uZWQgYW5kCnRoZSBjb25zdHJhaW50IGRvZXMgbm90IGlu dm9sdmUgdGVtcG9yYWwgc2VtYW50aWNzLiAgT3RoZXJ3aXNlLCB0aGUKZXhpc3RpbmcgU1BJIHBh dGggaXMgdXNlZC4KCnJpX0Zhc3RQYXRoQ2hlY2soKSBleHRyYWN0cyB0aGUgRksgdmFsdWVzLCBi dWlsZHMgc2NhbiBrZXlzLCBwZXJmb3JtcwphbiBpbmRleCBzY2FuLCBhbmQgbG9ja3MgdGhlIG1h dGNoaW5nIHR1cGxlIHdpdGggTG9ja1R1cGxlS2V5U2hhcmUKdmlhIHJpX0xvY2tQS1R1cGxlKCks IHdoaWNoIGhhbmRsZXMgdGhlIFJJLXNwZWNpZmljIHN1YnNldCBvZgp0YWJsZV90dXBsZV9sb2Nr KCkgcmVzdWx0cy4KCklmIHRoZSBsb2NrZWQgdHVwbGUgd2FzIHJlYWNoZWQgYnkgY2hhc2luZyBh biB1cGRhdGUgY2hhaW4KKHRtZmQudHJhdmVyc2VkKSwgcmVjaGVja19tYXRjaGVkX3BrX3R1cGxl KCkgdmVyaWZpZXMgdGhhdCB0aGUga2V5CmlzIHN0aWxsIHRoZSBzYW1lLCBlbXVsYXRpbmcgRXZh bFBsYW5RdWFsLgoKVGhlIHNjYW4gdXNlcyBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCksIG1hdGNo aW5nIHdoYXQgdGhlIFNQSSBwYXRoCnVzZXMgKHZpYSBfU1BJX2V4ZWN1dGVfcGxhbiBwdXNoaW5n IEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSBhcyB0aGUKYWN0aXZlIHNuYXBzaG90KS4gIFVuZGVy IFJFQUQgQ09NTUlUVEVEIHRoaXMgaXMgYSBmcmVzaCBzbmFwc2hvdDsKdW5kZXIgUkVQRUFUQUJM RSBSRUFEIC8gU0VSSUFMSVpBQkxFIGl0IGlzIHRoZSBmcm96ZW4gdHJhbnNhY3Rpb24tCnN0YXJ0 IHNuYXBzaG90LCBzbyBQSyByb3dzIGNvbW1pdHRlZCBhZnRlciB0aGUgdHJhbnNhY3Rpb24gc3Rh cnRlZAphcmUgbm90IHZpc2libGUuCgpUaGUgcmlfQ2hlY2tQZXJtaXNzaW9ucygpIGZ1bmN0aW9u IHBlcmZvcm1zIHNjaGVtYSBVU0FHRSBhbmQgdGFibGUKU0VMRUNUIGNoZWNrcywgbWF0Y2hpbmcg d2hhdCB0aGUgU1BJIHBhdGggZ2V0cyBpbXBsaWNpdGx5IHRocm91Z2gKdGhlIGV4ZWN1dG9yJ3Mg cGVybWlzc2lvbiBjaGVja3MuICBUaGUgZmFzdCBwYXRoIGFsc28gc3dpdGNoZXMgdG8KdGhlIFBL IHRhYmxlIG93bmVyJ3Mgc2VjdXJpdHkgY29udGV4dCAod2l0aCBTRUNVUklUWV9OT0ZPUkNFX1JM UykKYmVmb3JlIHRoZSBpbmRleCBwcm9iZSwgbWF0Y2hpbmcgdGhlIFNQSSBwYXRoIHdoZXJlIHRo ZSBxdWVyeSBydW5zCmFzIHRoZSB0YWJsZSBvd25lci4KCnJpX0hhc2hDb21wYXJlT3AoKSBpcyBh ZGp1c3RlZCB0byBoYW5kbGUgY3Jvc3MtdHlwZSBlcXVhbGl0eSBvcGVyYXRvcnMKKGUuZy4gaW50 NDhlcSBmb3IgaW50NCBQSyAvIGludDggRkspIHdoaWNoIGNhbiBhcHBlYXIgaW4gY29ucGZlcW9w LgpUaGUgZXhpc3RpbmcgY29kZSBhc3NlcnRlZCBzYW1lLXR5cGUgb3BlcmF0b3JzIG9ubHksIHdo aWNoIHdhcyBjb3JyZWN0CmZvciBpdHMgZXhpc3RpbmcgY2FsbGVycyAocmlfS2V5c0VxdWFsIGNv bXBhcmVzIHNhbWUtdHlwZSBGSyBjb2x1bW4KdmFsdWVzIHZpYSBmZl9lcV9vcHJzKSwgYnV0IHRo ZSBmYXN0IHBhdGggaXMgdGhlIGZpcnN0IGNhbGxlciB0byBwYXNzCnBmX2VxX29wcnMsIHdoaWNo IGNhbiBiZSBjcm9zcy10eXBlLgoKUGVyLWtleSBtZXRhZGF0YSAoY29tcGFyZSBlbnRyaWVzLCBv cGVyYXRvciBwcm9jZWR1cmVzLCBzdHJhdGVneQpudW1iZXJzKSBpcyBjYWNoZWQgaW4gUklfQ29u c3RyYWludEluZm8gdmlhCnJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKCkgb24gZmlyc3Qg dXNlLCBlbGltaW5hdGluZyByZXBlYXRlZApjYWxscyB0byByaV9IYXNoQ29tcGFyZU9wKCkgYW5k IGdldF9vcF9vcGZhbWlseV9wcm9wZXJ0aWVzKCkuCmNvbmluZGlkIGFuZCBwa19pc19wYXJ0aXRp b25lZCBhcmUgYWxzbyBjYWNoZWQgYXQgY29uc3RyYWludCBsb2FkCnRpbWUsIGF2b2lkaW5nIHBl ci1pbnZvY2F0aW9uIHN5c2NhY2hlIGxvb2t1cHMgYW5kIHRoZSBuZWVkIHRvIG9wZW4KcGtfcmVs IGJlZm9yZSBkZWNpZGluZyB3aGV0aGVyIHRoZSBmYXN0IHBhdGggYXBwbGllcy4KCk5ldyByZWdy ZXNzaW9uIHRlc3RzIGNvdmVyIFJMUyBieXBhc3MgYW5kIEFDTCBlbmZvcmNlbWVudCBmb3IgdGhl CmZhc3QtcGF0aCBwZXJtaXNzaW9uIGNoZWNrcy4gIE5ldyBpc29sYXRpb24gdGVzdHMgZXhlcmNp c2UgY29uY3VycmVudApQSyB1cGRhdGVzIHVuZGVyIGJvdGggUkVBRCBDT01NSVRURUQgYW5kIFJF UEVBVEFCTEUgUkVBRC4KCkJlbmNobWFya2luZyBzaG93cyB+MS44eCBzcGVlZHVwIGZvciBidWxr IEZLIGluc2VydHMgKGludCBQSy9pbnQgRkssCjFNIHJvd3MsIHdoZXJlIFBLIHRhYmxlIGFuZCBp bmRleCBpcyBjYWNoZWQpLgoKQXV0aG9yOiBKdW53YW5nIFpoYW8gPHpoandwa3VAZ21haWwuY29t PgpDby1hdXRob3JlZC1ieTogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K UmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpUZXN0ZWQtYnk6 IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBK0hpd3FGNEMwd3MzY08rejVjTGtQdXZ3bkF3a1NwN3NmdmdHajN5UT1MaTZLTk1x QUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5j ICAgICAgICAgICB8IDQ2OSArKysrKysrKysrKysrKysrKy0KIC4uLi9leHBlY3RlZC9may1jb25j dXJyZW50LXBrLXVwZC5vdXQgICAgICAgICB8IDEwNSArKysrCiBzcmMvdGVzdC9pc29sYXRpb24v aXNvbGF0aW9uX3NjaGVkdWxlICAgICAgICAgfCAgIDEgKwogLi4uL2lzb2xhdGlvbi9zcGVjcy9m ay1jb25jdXJyZW50LXBrLXVwZC5zcGVjIHwgIDUzICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2ZvcmVpZ25fa2V5Lm91dCAgICAgfCAgNDcgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zv cmVpZ25fa2V5LnNxbCAgICAgICAgICB8ICA2NCArKysKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDcyNiBpbnNl cnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9p c29sYXRpb24vZXhwZWN0ZWQvZmstY29uY3VycmVudC1way11cGQub3V0CiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2ZrLWNvbmN1cnJlbnQtcGstdXBkLnNwZWMK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCmluZGV4IGQyMmI4ZWY3ZjNjLi42ZDhkZTY0 NDcxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTI0LDEyICsyNCwxNSBA QAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxz LmgiCisjaW5jbHVkZSAiYWNjZXNzL3NrZXkuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5o IgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Nv bnN0cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2lu Y2x1ZGUgImV4ZWN1dG9yL3NwaS5oIgpAQCAtOTEsNiArOTQsNyBAQAogI2RlZmluZSBSSV9UUklH VFlQRV9VUERBVEUgMgogI2RlZmluZSBSSV9UUklHVFlQRV9ERUxFVEUgMwogCit0eXBlZGVmIHN0 cnVjdCBGYXN0UGF0aE1ldGEgRmFzdFBhdGhNZXRhOwogCiAvKgogICogUklfQ29uc3RyYWludElu Zm8KQEAgLTEzMiw4ICsxMzYsMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgUklfQ29uc3RyYWludEluZm8K IAlPaWQJCQlwZXJpb2RfaW50ZXJzZWN0X29wZXI7CS8qIGFueXJhbmdlICogYW55cmFuZ2UgKG9y CiAJCQkJCQkJCQkJICogbXVsdGlyYW5nZXMpICovCiAJZGxpc3Rfbm9kZQl2YWxpZF9saW5rOwkJ LyogTGluayBpbiBsaXN0IG9mIHZhbGlkIGVudHJpZXMgKi8KKworCU9pZAkJCWNvbmluZGlkOwor CWJvb2wJCXBrX2lzX3BhcnRpdGlvbmVkOworCisJRmFzdFBhdGhNZXRhICpmcG1ldGE7CiB9IFJJ X0NvbnN0cmFpbnRJbmZvOwogCit0eXBlZGVmIHN0cnVjdCBSSV9Db21wYXJlSGFzaEVudHJ5IFJJ X0NvbXBhcmVIYXNoRW50cnk7CisKKy8qIEZhc3QtcGF0aCBtZXRhZGF0YSBmb3IgUkkgY2hlY2tz IG9uIGZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIHRhYmxlcyAqLwordHlwZWRlZiBzdHJ1Y3QgRmFz dFBhdGhNZXRhCit7CisJUklfQ29tcGFyZUhhc2hFbnRyeSAqY29tcGFyZV9lbnRyaWVzW1JJX01B WF9OVU1LRVlTXTsKKwlSZWdQcm9jZWR1cmUgcmVnb3BzW1JJX01BWF9OVU1LRVlTXTsKKwlPaWQJ CQlzdWJ0eXBlc1tSSV9NQVhfTlVNS0VZU107CisJaW50CQkJc3RyYXRzW1JJX01BWF9OVU1LRVlT XTsKK30gRmFzdFBhdGhNZXRhOworCiAvKgogICogUklfUXVlcnlLZXkKICAqCkBAIC0yMzMsNiAr MjUzLDIzIEBAIHN0YXRpYyBib29sIHJpX1BlcmZvcm1DaGVjayhjb25zdCBSSV9Db25zdHJhaW50 SW5mbyAqcmlpbmZvLAogCQkJCQkJCVR1cGxlVGFibGVTbG90ICpvbGRzbG90LCBUdXBsZVRhYmxl U2xvdCAqbmV3c2xvdCwKIAkJCQkJCQlib29sIGlzX3Jlc3RyaWN0LAogCQkJCQkJCWJvb2wgZGV0 ZWN0TmV3Um93cywgaW50IGV4cGVjdF9PSyk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aENoZWNr KGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJIFJlbGF0aW9uIGZrX3Jl bCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpOworc3RhdGljIGJvb2wgcmlfRmFzdFBhdGhQcm9i ZU9uZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCisJCQkJCQkJCUluZGV4U2Nh bkRlc2Mgc2NhbmRlc2MsIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQlTbmFwc2hvdCBz bmFwc2hvdCwgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJCQkJU2Nhbktl eURhdGEgKnNrZXksIGludCBua2V5cyk7CitzdGF0aWMgYm9vbCByaV9Mb2NrUEtUdXBsZShSZWxh dGlvbiBwa19yZWwsIFR1cGxlVGFibGVTbG90ICpzbG90LCBTbmFwc2hvdCBzbmFwLAorCQkJCQkJ ICAgYm9vbCAqY29uY3VycmVudGx5X3VwZGF0ZWQpOworc3RhdGljIGJvb2wgcmlfZmFzdHBhdGhf aXNfYXBwbGljYWJsZShjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvKTsKK3N0YXRpYyB2 b2lkIHJpX0NoZWNrUGVybWlzc2lvbnMoUmVsYXRpb24gcXVlcnlfcmVsKTsKK3N0YXRpYyBib29s IHJlY2hlY2tfbWF0Y2hlZF9wa190dXBsZShSZWxhdGlvbiBpZHhyZWwsIFNjYW5LZXlEYXRhICpz a2V5cywKKwkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqbmV3X3Nsb3QpOworc3RhdGljIHZvaWQg YnVpbGRfaW5kZXhfc2NhbmtleXMoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJ CQkJCQkJIFJlbGF0aW9uIGlkeF9yZWwsIERhdHVtICpwa192YWxzLAorCQkJCQkJCQkgY2hhciAq cGtfbnVsbHMsIFNjYW5LZXkgc2tleXMpOworc3RhdGljIHZvaWQgcmlfcG9wdWxhdGVfZmFzdHBh dGhfbWV0YWRhdGEoUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJCQkJCQkgIFJlbGF0 aW9uIGZrX3JlbCwgUmVsYXRpb24gaWR4X3JlbCk7CiBzdGF0aWMgdm9pZCByaV9FeHRyYWN0VmFs dWVzKFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJIGNvbnN0IFJJ X0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIGJvb2wgcmVsX2lzX3BrLAogCQkJCQkJCSBEYXR1bSAq dmFscywgY2hhciAqbnVsbHMpOwpAQCAtMjc2LDE0ICszMTMsNyBAQCBSSV9GS2V5X2NoZWNrKFRy aWdnZXJEYXRhICp0cmlnZGF0YSkKIAlpZiAoIXRhYmxlX3R1cGxlX3NhdGlzZmllc19zbmFwc2hv dCh0cmlnZGF0YS0+dGdfcmVsYXRpb24sIG5ld3Nsb3QsIFNuYXBzaG90U2VsZikpCiAJCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAKLQkvKgotCSAqIEdldCB0aGUgcmVsYXRpb24gZGVz Y3JpcHRvcnMgb2YgdGhlIEZLIGFuZCBQSyB0YWJsZXMuCi0JICoKLQkgKiBwa19yZWwgaXMgb3Bl bmVkIGluIFJvd1NoYXJlTG9jayBtb2RlIHNpbmNlIHRoYXQncyB3aGF0IG91ciBldmVudHVhbAot CSAqIFNFTEVDVCBGT1IgS0VZIFNIQVJFIHdpbGwgZ2V0IG9uIGl0LgotCSAqLwogCWZrX3JlbCA9 IHRyaWdkYXRhLT50Z19yZWxhdGlvbjsKLQlwa19yZWwgPSB0YWJsZV9vcGVuKHJpaW5mby0+cGtf cmVsaWQsIFJvd1NoYXJlTG9jayk7CiAKIAlzd2l0Y2ggKHJpX051bGxDaGVjayhSZWxhdGlvbkdl dERlc2NyKGZrX3JlbCksIG5ld3Nsb3QsIHJpaW5mbywgZmFsc2UpKQogCXsKQEAgLTI5Myw3ICsz MjMsNiBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAkJCSAqIE5vIGZ1 cnRoZXIgY2hlY2sgbmVlZGVkIC0gYW4gYWxsLU5VTEwga2V5IHBhc3NlcyBldmVyeSB0eXBlIG9m CiAJCQkgKiBmb3JlaWduIGtleSBjb25zdHJhaW50LgogCQkJICovCi0JCQl0YWJsZV9jbG9zZShw a19yZWwsIFJvd1NoYXJlTG9jayk7CiAJCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwog CiAJCWNhc2UgUklfS0VZU19TT01FX05VTEw6CkBAIC0zMTgsNyArMzQ3LDYgQEAgUklfRktleV9j aGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJCQkJCQkJIGVycmRldGFpbCgiTUFUQ0ggRlVM TCBkb2VzIG5vdCBhbGxvdyBtaXhpbmcgb2YgbnVsbCBhbmQgbm9ubnVsbCBrZXkgdmFsdWVzLiIp LAogCQkJCQkJCSBlcnJ0YWJsZWNvbnN0cmFpbnQoZmtfcmVsLAogCQkJCQkJCQkJCQkJTmFtZVN0 cihyaWluZm8tPmNvbm5hbWUpKSkpOwotCQkJCQl0YWJsZV9jbG9zZShwa19yZWwsIFJvd1NoYXJl TG9jayk7CiAJCQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAKIAkJCQljYXNlIEZL Q09OU1RSX01BVENIX1NJTVBMRToKQEAgLTMyNyw3ICszNTUsNiBAQCBSSV9GS2V5X2NoZWNrKFRy aWdnZXJEYXRhICp0cmlnZGF0YSkKIAkJCQkJICogTUFUQ0ggU0lNUExFIC0gaWYgQU5ZIGNvbHVt biBpcyBudWxsLCB0aGUga2V5IHBhc3NlcwogCQkJCQkgKiB0aGUgY29uc3RyYWludC4KIAkJCQkJ ICovCi0JCQkJCXRhYmxlX2Nsb3NlKHBrX3JlbCwgUm93U2hhcmVMb2NrKTsKIAkJCQkJcmV0dXJu IFBvaW50ZXJHZXREYXR1bShOVUxMKTsKIAogI2lmZGVmIE5PVF9VU0VECkBAIC0zNTIsOCArMzc5 LDMxIEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCQkJYnJlYWs7CiAJ fQogCisJLyoKKwkgKiBGYXN0IHBhdGg6IHByb2JlIHRoZSBQSyB1bmlxdWUgaW5kZXggZGlyZWN0 bHksIGJ5cGFzc2luZyBTUEkuCisJICoKKwkgKiBGb3Igbm9uLXBhcnRpdGlvbmVkLCBub24tdGVt cG9yYWwgRktzLCB3ZSBjYW4gc2tpcCB0aGUgU1BJIG1hY2hpbmVyeQorCSAqIChwbGFuIGNhY2hl LCBleGVjdXRvciBzZXR1cCwgZXRjLikgYW5kIGRvIGEgZGlyZWN0IGluZGV4IHNjYW4gKyB0dXBs ZQorCSAqIGxvY2suICBUaGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHRoZSBTUEkg cGF0aCBiZWxvdyBidXQgYXZvaWRzCisJICogdGhlIHBlci1yb3cgZXhlY3V0b3Igb3ZlcmhlYWQu CisJICoKKwkgKiByaV9GYXN0UGF0aENoZWNrKCkgcmVwb3J0cyB0aGUgdmlvbGF0aW9uIGl0c2Vs ZiAodmlhIGVyZXBvcnQpIGlmIG5vCisJICogbWF0Y2hpbmcgUEsgcm93IGlzIGZvdW5kLCBzbyBp dCBvbmx5IHJldHVybnMgb24gc3VjY2Vzcy4KKwkgKi8KKwlpZiAocmlfZmFzdHBhdGhfaXNfYXBw bGljYWJsZShyaWluZm8pKQorCXsKKwkJcmlfRmFzdFBhdGhDaGVjayhyaWluZm8sIGZrX3JlbCwg bmV3c2xvdCk7CisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJfQorCiAJU1BJX2Nv bm5lY3QoKTsKIAorCS8qCisJICogcGtfcmVsIGlzIG9wZW5lZCBpbiBSb3dTaGFyZUxvY2sgbW9k ZSBzaW5jZSB0aGF0J3Mgd2hhdCBvdXIgZXZlbnR1YWwKKwkgKiBTRUxFQ1QgRk9SIEtFWSBTSEFS RSB3aWxsIGdldCBvbiBpdC4KKwkgKi8KKwlwa19yZWwgPSB0YWJsZV9vcGVuKHJpaW5mby0+cGtf cmVsaWQsIFJvd1NoYXJlTG9jayk7CisKIAkvKiBGZXRjaCBvciBwcmVwYXJlIGEgc2F2ZWQgcGxh biBmb3IgdGhlIHJlYWwgY2hlY2sgKi8KIAlyaV9CdWlsZFF1ZXJ5S2V5KCZxa2V5LCByaWluZm8s IFJJX1BMQU5fQ0hFQ0tfTE9PS1VQUEspOwogCkBAIC0yMzU2LDYgKzI0MDYsMTIgQEAgcmlfTG9h ZENvbnN0cmFpbnRJbmZvKE9pZCBjb25zdHJhaW50T2lkKQogCiAJcmlpbmZvLT52YWxpZCA9IHRy dWU7CiAKKwlyaWluZm8tPmNvbmluZGlkID0gY29uRm9ybS0+Y29uaW5kaWQ7CisJcmlpbmZvLT5w a19pc19wYXJ0aXRpb25lZCA9CisJCShnZXRfcmVsX3JlbGtpbmQocmlpbmZvLT5wa19yZWxpZCkg PT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSk7CisKKwlyaWluZm8tPmZwbWV0YSA9IE5VTEw7 CisKIAlyZXR1cm4gcmlpbmZvOwogfQogCkBAIC0yNjE3LDYgKzI2NzMsMzgyIEBAIHJpX1BlcmZv cm1DaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCXJldHVybiBTUElfcHJv Y2Vzc2VkICE9IDA7CiB9CiAKKy8qCisgKiByaV9GYXN0UGF0aENoZWNrCisgKgkJUGVyZm9ybSBG SyBleGlzdGVuY2UgY2hlY2sgdmlhIGRpcmVjdCBpbmRleCBwcm9iZSwgYnlwYXNzaW5nIFNQSS4K KyAqCisgKiBJZiBubyBtYXRjaGluZyBQSyByb3cgZXhpc3RzLCByZXBvcnQgdGhlIHZpb2xhdGlv biB2aWEgcmlfUmVwb3J0VmlvbGF0aW9uKCksCisgKiBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiBy ZXR1cm5zIG5vcm1hbGx5LgorICovCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhDaGVjayhjb25z dCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCSBSZWxhdGlvbiBma19yZWwsIFR1cGxl VGFibGVTbG90ICpuZXdzbG90KQoreworCVJlbGF0aW9uCXBrX3JlbDsKKwlSZWxhdGlvbglpZHhf cmVsOworCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJ RGF0dW0JCXBrX3ZhbHNbSU5ERVhfTUFYX0tFWVNdOworCWNoYXIJCXBrX251bGxzW0lOREVYX01B WF9LRVlTXTsKKwlTY2FuS2V5RGF0YSBza2V5W0lOREVYX01BWF9LRVlTXTsKKwlib29sCQlmb3Vu ZCA9IGZhbHNlOworCU9pZAkJCXNhdmVkX3VzZXJpZDsKKwlpbnQJCQlzYXZlZF9zZWNfY29udGV4 dDsKKwlTbmFwc2hvdAlzbmFwc2hvdDsKKworCS8qCisJICogQWR2YW5jZSB0aGUgY29tbWFuZCBj b3VudGVyIHNvIHRoZSBzbmFwc2hvdCBzZWVzIHRoZSBlZmZlY3RzIG9mIHByaW9yCisJICogdHJp Z2dlcnMgaW4gdGhpcyBzdGF0ZW1lbnQuICBNaXJyb3JzIHdoYXQgdGhlIFNQSSBwYXRoIGRvZXMg aW4KKwkgKiByaV9QZXJmb3JtQ2hlY2soKS4KKwkgKi8KKwlDb21tYW5kQ291bnRlckluY3JlbWVu dCgpOworCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90 KCkpOworCisJcGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBrX3JlbGlkLCBSb3dTaGFyZUxv Y2spOworCWlkeF9yZWwgPSBpbmRleF9vcGVuKHJpaW5mby0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocGtfcmVsLCBOVUxMKTsKKwlzY2Fu ZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihwa19yZWwsIGlkeF9yZWwsCisJCQkJCQkJICAgc25hcHNo b3QsIE5VTEwsCisJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCk7CisKKwlpZiAocmlpbmZvLT5m cG1ldGEgPT0gTlVMTCkKKwkJcmlfcG9wdWxhdGVfZmFzdHBhdGhfbWV0YWRhdGEoKFJJX0NvbnN0 cmFpbnRJbmZvICopIHJpaW5mbywKKwkJCQkJCQkJCSAgZmtfcmVsLCBpZHhfcmVsKTsKKwlBc3Nl cnQocmlpbmZvLT5mcG1ldGEpOworCisJR2V0VXNlcklkQW5kU2VjQ29udGV4dCgmc2F2ZWRfdXNl cmlkLCAmc2F2ZWRfc2VjX2NvbnRleHQpOworCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoUmVsYXRp b25HZXRGb3JtKHBrX3JlbCktPnJlbG93bmVyLAorCQkJCQkJICAgc2F2ZWRfc2VjX2NvbnRleHQg fAorCQkJCQkJICAgU0VDVVJJVFlfTE9DQUxfVVNFUklEX0NIQU5HRSB8CisJCQkJCQkgICBTRUNV UklUWV9OT0ZPUkNFX1JMUyk7CisJcmlfQ2hlY2tQZXJtaXNzaW9ucyhwa19yZWwpOworCisJcmlf RXh0cmFjdFZhbHVlcyhma19yZWwsIG5ld3Nsb3QsIHJpaW5mbywgZmFsc2UsIHBrX3ZhbHMsIHBr X251bGxzKTsKKwlidWlsZF9pbmRleF9zY2Fua2V5cyhyaWluZm8sIGlkeF9yZWwsIHBrX3ZhbHMs IHBrX251bGxzLCBza2V5KTsKKwlmb3VuZCA9IHJpX0Zhc3RQYXRoUHJvYmVPbmUocGtfcmVsLCBp ZHhfcmVsLCBzY2FuZGVzYywgc2xvdCwKKwkJCQkJCQkJc25hcHNob3QsIHJpaW5mbywgc2tleSwg cmlpbmZvLT5ua2V5cyk7CisJU2V0VXNlcklkQW5kU2VjQ29udGV4dChzYXZlZF91c2VyaWQsIHNh dmVkX3NlY19jb250ZXh0KTsKKwlpbmRleF9lbmRzY2FuKHNjYW5kZXNjKTsKKwlFeGVjRHJvcFNp bmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7 CisKKwlpZiAoIWZvdW5kKQorCQlyaV9SZXBvcnRWaW9sYXRpb24ocmlpbmZvLCBwa19yZWwsIGZr X3JlbCwKKwkJCQkJCSAgIG5ld3Nsb3QsIE5VTEwsCisJCQkJCQkgICBSSV9QTEFOX0NIRUNLX0xP T0tVUFBLLCBmYWxzZSwgZmFsc2UpOworCisJaW5kZXhfY2xvc2UoaWR4X3JlbCwgTm9Mb2NrKTsK Kwl0YWJsZV9jbG9zZShwa19yZWwsIE5vTG9jayk7Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aFBy b2JlT25lCisgKgkJUHJvYmUgdGhlIFBLIGluZGV4IGZvciBvbmUgc2V0IG9mIHNjYW4ga2V5cywg bG9jayB0aGUgbWF0Y2hpbmcKKyAqCQl0dXBsZQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIG1h dGNoaW5nIFBLIHJvdyB3YXMgZm91bmQsIGxvY2tlZCwgYW5kIChpZgorICogYXBwbGljYWJsZSkg dmlzaWJsZSB0byB0aGUgdHJhbnNhY3Rpb24gc25hcHNob3QuCisgKgorICogVGhlIGNhbGxlciBt dXN0IGVuc3VyZSBDdXJyZW50TWVtb3J5Q29udGV4dCBpcyBsb25nLWxpdmVkIGVub3VnaAorICog Zm9yIHRoZSBzY2FuIGRlc2NyaXB0b3IncyBpbnRlcm5hbCBhbGxvY2F0aW9ucyAodHlwaWNhbGx5 CisgKiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgd2hlbiB1c2luZyBhIGNhY2hlZCBzY2FuZGVzYyku CisgKi8KK3N0YXRpYyBib29sCityaV9GYXN0UGF0aFByb2JlT25lKFJlbGF0aW9uIHBrX3JlbCwg UmVsYXRpb24gaWR4X3JlbCwKKwkJCQkJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYywgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCisJCQkJCVNuYXBzaG90IHNuYXBzaG90LCBjb25zdCBSSV9Db25zdHJhaW50 SW5mbyAqcmlpbmZvLAorCQkJCQlTY2FuS2V5RGF0YSAqc2tleSwgaW50IG5rZXlzKQoreworCWJv b2wJCWZvdW5kID0gZmFsc2U7CisKKwlpbmRleF9yZXNjYW4oc2NhbmRlc2MsIHNrZXksIG5rZXlz LCBOVUxMLCAwKTsKKworCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRT Y2FuRGlyZWN0aW9uLCBzbG90KSkKKwl7CisJCWJvb2wJCWNvbmN1cnJlbnRseV91cGRhdGVkOwor CisJCWlmIChyaV9Mb2NrUEtUdXBsZShwa19yZWwsIHNsb3QsIHNuYXBzaG90LAorCQkJCQkJICAg JmNvbmN1cnJlbnRseV91cGRhdGVkKSkKKwkJeworCQkJaWYgKGNvbmN1cnJlbnRseV91cGRhdGVk KQorCQkJCWZvdW5kID0gcmVjaGVja19tYXRjaGVkX3BrX3R1cGxlKGlkeF9yZWwsIHNrZXksIHNs b3QpOworCQkJZWxzZQorCQkJCWZvdW5kID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmb3Vu ZDsKK30KKworLyoKKyAqIHJpX0xvY2tQS1R1cGxlCisgKgkJTG9jayBhIFBLIHR1cGxlIGZvdW5k IGJ5IHRoZSBmYXN0LXBhdGggaW5kZXggc2Nhbi4KKyAqCisgKiBDYWxscyB0YWJsZV90dXBsZV9s b2NrKCkgZGlyZWN0bHkgd2l0aCBoYW5kbGluZyBzcGVjaWZpYyB0byBSSSBjaGVja3MuCisgKiBS ZXR1cm5zIHRydWUgaWYgdGhlIHR1cGxlIHdhcyBzdWNjZXNzZnVsbHkgbG9ja2VkLgorICoKKyAq IFNldHMgKmNvbmN1cnJlbnRseV91cGRhdGVkIHRvIHRydWUgaWYgdGhlIGxvY2tlZCB0dXBsZSB3 YXMgcmVhY2hlZAorICogYnkgZm9sbG93aW5nIGFuIHVwZGF0ZSBjaGFpbiAodG1mZC50cmF2ZXJz ZWQpLCBpbmRpY2F0aW5nIHRoZSBjYWxsZXIKKyAqIHNob3VsZCByZWNoZWNrIHRoZSBrZXkuCisg Ki8KK3N0YXRpYyBib29sCityaV9Mb2NrUEtUdXBsZShSZWxhdGlvbiBwa19yZWwsIFR1cGxlVGFi bGVTbG90ICpzbG90LCBTbmFwc2hvdCBzbmFwLAorCQkJICAgYm9vbCAqY29uY3VycmVudGx5X3Vw ZGF0ZWQpCit7CisJVE1fRmFpbHVyZURhdGEgdG1mZDsKKwlUTV9SZXN1bHQJcmVzdWx0OworCWlu dAkJCWxvY2tmbGFncyA9IFRVUExFX0xPQ0tfRkxBR19MT0NLX1VQREFURV9JTl9QUk9HUkVTUzsK KworCSpjb25jdXJyZW50bHlfdXBkYXRlZCA9IGZhbHNlOworCisJaWYgKCFJc29sYXRpb25Vc2Vz WGFjdFNuYXBzaG90KCkpCisJCWxvY2tmbGFncyB8PSBUVVBMRV9MT0NLX0ZMQUdfRklORF9MQVNU X1ZFUlNJT047CisKKwlyZXN1bHQgPSB0YWJsZV90dXBsZV9sb2NrKHBrX3JlbCwgJnNsb3QtPnR0 c190aWQsIHNuYXAsCisJCQkJCQkJICBzbG90LCBHZXRDdXJyZW50Q29tbWFuZElkKGZhbHNlKSwK KwkJCQkJCQkgIExvY2tUdXBsZUtleVNoYXJlLCBMb2NrV2FpdEJsb2NrLAorCQkJCQkJCSAgbG9j a2ZsYWdzLCAmdG1mZCk7CisKKwlzd2l0Y2ggKHJlc3VsdCkKKwl7CisJCWNhc2UgVE1fT2s6CisJ CQlpZiAodG1mZC50cmF2ZXJzZWQpCisJCQkJKmNvbmN1cnJlbnRseV91cGRhdGVkID0gdHJ1ZTsK KwkJCXJldHVybiB0cnVlOworCisJCWNhc2UgVE1fRGVsZXRlZDoKKwkJCWlmIChJc29sYXRpb25V c2VzWGFjdFNuYXBzaG90KCkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBu b3Qgc2VyaWFsaXplIGFjY2VzcyBkdWUgdG8gY29uY3VycmVudCB1cGRhdGUiKSkpOworCQkJcmV0 dXJuIGZhbHNlOworCisJCWNhc2UgVE1fVXBkYXRlZDoKKwkJCWlmIChJc29sYXRpb25Vc2VzWGFj dFNuYXBzaG90KCkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf VF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2Vy aWFsaXplIGFjY2VzcyBkdWUgdG8gY29uY3VycmVudCB1cGRhdGUiKSkpOworCisJCQkvKgorCQkJ ICogSW4gUkVBRCBDT01NSVRURUQsIEZJTkRfTEFTVF9WRVJTSU9OIHNob3VsZCBoYXZlIGNoYXNl ZCB0aGUKKwkJCSAqIGNoYWluIGFuZCByZXR1cm5lZCBUTV9Pay4gIEdldHRpbmcgaGVyZSBtZWFu cyBzb21ldGhpbmcKKwkJCSAqIHVuZXhwZWN0ZWQgLS0gZmFsbCB0aHJvdWdoIHRvIGVycm9yLgor CQkJICovCisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCB0YWJsZV90dXBsZV9sb2NrIHN0YXR1 czogJXUiLCByZXN1bHQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUTV9TZWxmTW9kaWZpZWQ6CisK KwkJCS8qCisJCQkgKiBUaGUgY3VycmVudCBjb21tYW5kIG9yIGEgbGF0ZXIgY29tbWFuZCBpbiB0 aGlzIHRyYW5zYWN0aW9uCisJCQkgKiBtb2RpZmllZCB0aGUgUEsgcm93LiAgVGhpcyBzaG91bGRu J3Qgbm9ybWFsbHkgaGFwcGVuIGR1cmluZyBhbgorCQkJICogRksgY2hlY2sgKHdlJ3JlIG5vdCBt b2RpZnlpbmcgcGtfcmVsKSwgYnV0IGhhbmRsZSBpdCBzYWZlbHkgYnkKKwkJCSAqIHRyZWF0aW5n IHRoZSB0dXBsZSBhcyBub3QgZm91bmQuCisJCQkgKi8KKwkJCXJldHVybiBmYWxzZTsKKworCQlj YXNlIFRNX0ludmlzaWJsZToKKwkJCWVsb2coRVJST1IsICJhdHRlbXB0ZWQgdG8gbG9jayBpbnZp c2libGUgdHVwbGUiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIHRhYmxlX3R1cGxlX2xvY2sgc3RhdHVzOiAldSIsIHJlc3VsdCk7CisJCQli cmVhazsKKwl9CisKKwlyZXR1cm4gZmFsc2U7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8K K30KKworc3RhdGljIGJvb2wKK3JpX2Zhc3RwYXRoX2lzX2FwcGxpY2FibGUoY29uc3QgUklfQ29u c3RyYWludEluZm8gKnJpaW5mbykKK3sKKwkvKgorCSAqIFBhcnRpdGlvbmVkIHJlZmVyZW5jZWQg dGFibGVzIGFyZSBza2lwcGVkIGZvciBzaW1wbGljaXR5LCBzaW5jZSB0aGV5CisJICogcmVxdWly ZSByb3V0aW5nIHRoZSBwcm9iZSB0aHJvdWdoIHRoZSBjb3JyZWN0IHBhcnRpdGlvbiB1c2luZwor CSAqIFBhcnRpdGlvbkRpcmVjdG9yeS4KKwkgKi8KKwlpZiAocmlpbmZvLT5wa19pc19wYXJ0aXRp b25lZCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBUZW1wb3JhbCBmb3JlaWduIGtleXMg dXNlIHJhbmdlIG92ZXJsYXAgYW5kIGNvbnRhaW5tZW50IHNlbWFudGljcyAoJiYsCisJICogPEAs IHJhbmdlX2FnZygpKSB0aGF0IGluaGVyZW50bHkgaW52b2x2ZSBhZ2dyZWdhdGlvbiBhbmQgbXVs dGlwbGUtcm93CisJICogcmVhc29uaW5nLCBzbyB0aGV5IHN0YXkgb24gdGhlIFNQSSBwYXRoLgor CSAqLworCWlmIChyaWluZm8tPmhhc3BlcmlvZCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJu IHRydWU7Cit9CisKKy8qCisgKiByaV9DaGVja1Blcm1pc3Npb25zCisgKiAgIENoZWNrIHRoYXQg dGhlIGN1cnJlbnQgdXNlciBoYXMgcGVybWlzc2lvbnMgdG8gbG9vayBpbnRvIHRoZSBzY2hlbWEg b2YKKyAqICAgYW5kIFNFTEVDVCBmcm9tICdxdWVyeV9yZWwnCisgKi8KK3N0YXRpYyB2b2lkCity aV9DaGVja1Blcm1pc3Npb25zKFJlbGF0aW9uIHF1ZXJ5X3JlbCkKK3sKKwlBY2xSZXN1bHQJYWNs cmVzdWx0OworCisJLyogVVNBR0Ugb24gc2NoZW1hLiAqLworCWFjbHJlc3VsdCA9IG9iamVjdF9h Y2xjaGVjayhOYW1lc3BhY2VSZWxhdGlvbklkLAorCQkJCQkJCQlSZWxhdGlvbkdldE5hbWVzcGFj ZShxdWVyeV9yZWwpLAorCQkJCQkJCQlHZXRVc2VySWQoKSwgQUNMX1VTQUdFKTsKKwlpZiAoYWNs cmVzdWx0ICE9IEFDTENIRUNLX09LKQorCQlhY2xjaGVja19lcnJvcihhY2xyZXN1bHQsIE9CSkVD VF9TQ0hFTUEsCisJCQkJCSAgIGdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFj ZShxdWVyeV9yZWwpKSk7CisKKwkvKiBTRUxFQ1Qgb24gcmVsYXRpb24uICovCisJYWNscmVzdWx0 ID0gcGdfY2xhc3NfYWNsY2hlY2soUmVsYXRpb25HZXRSZWxpZChxdWVyeV9yZWwpLCBHZXRVc2Vy SWQoKSwKKwkJCQkJCQkJICBBQ0xfU0VMRUNUKTsKKwlpZiAoYWNscmVzdWx0ICE9IEFDTENIRUNL X09LKQorCQlhY2xjaGVja19lcnJvcihhY2xyZXN1bHQsIE9CSkVDVF9UQUJMRSwKKwkJCQkJICAg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocXVlcnlfcmVsKSk7Cit9CisKKy8qCisgKiByZWNoZWNr X21hdGNoZWRfcGtfdHVwbGUKKyAqCQlBZnRlciBmb2xsb3dpbmcgYW4gdXBkYXRlIGNoYWluICh0 bWZkLnRyYXZlcnNlZCksIHZlcmlmeSB0aGF0CisgKgkJdGhlIGxvY2tlZCBQSyB0dXBsZSBzdGls bCBtYXRjaGVzIHRoZSBvcmlnaW5hbCBzZWFyY2gga2V5cy4KKyAqCisgKiBBIG5vbi1rZXkgdXBk YXRlIChlLmcuIGNoYW5naW5nIGEgbm9uLVBLIGNvbHVtbikgY3JlYXRlcyBhIG5ldyB0dXBsZSB2 ZXJzaW9uCisgKiB0aGF0IHdlJ3ZlIG5vdyBsb2NrZWQsIGJ1dCB0aGUga2V5IGlzIHVuY2hhbmdl ZCAtLSB0aGF0J3MgZmluZS4gIEEga2V5CisgKiB1cGRhdGUgbWVhbnMgdGhlIHZhbHVlIHdlIHdl cmUgbG9va2luZyBmb3IgaXMgZ29uZSwgc28gd2Ugc2hvdWxkIHRyZWF0IGl0IGFzCisgKiBub3Qg Zm91bmQuCisgKi8KK3N0YXRpYyBib29sCityZWNoZWNrX21hdGNoZWRfcGtfdHVwbGUoUmVsYXRp b24gaWR4cmVsLCBTY2FuS2V5RGF0YSAqc2tleXMsCisJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKm5l d19zbG90KQoreworCS8qCisJICogVE9ETzogQnVpbGRJbmRleEluZm8gZG9lcyBhIHN5c2NhY2hl IGxvb2t1cCArIHBhbGxvYyBvbiBldmVyeSBjYWxsLgorCSAqIFRoaXMgb25seSBmaXJlcyBvbiB0 aGUgY29uY3VycmVudC11cGRhdGUgcGF0aCAodG1mZC50cmF2ZXJzZWQpLCB3aGljaAorCSAqIHNo b3VsZCBiZSByYXJlLCBzbyB0aGUgY29zdCBpcyBhY2NlcHRhYmxlIGZvciBub3cuICBJZiBwcm9m aWxpbmcgc2hvd3MKKwkgKiBvdGhlcndpc2UsIGNhY2hlIHRoZSBJbmRleEluZm8gaW4gRmFzdFBh dGhNZXRhLgorCSAqLworCUluZGV4SW5mbyAgKmluZGV4SW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGlk eHJlbCk7CisJRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZU107CisJYm9vbAkJaXNudWxsW0lO REVYX01BWF9LRVlTXTsKKwlib29sCQltYXRjaGVkID0gdHJ1ZTsKKworCS8qIFBLIGluZGV4ZXMg bmV2ZXIgaGF2ZSB0aGVzZS4gKi8KKwlBc3NlcnQoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyA9 PSBOSUwgJiYKKwkJICAgaW5kZXhJbmZvLT5paV9FeGNsdXNpb25PcHMgPT0gTlVMTCk7CisKKwkv KiBGb3JtIHRoZSBpbmRleCB2YWx1ZXMgYW5kIGlzbnVsbCBmbGFncyBnaXZlbiB0aGUgdGFibGUg dHVwbGUuICovCisJRm9ybUluZGV4RGF0dW0oaW5kZXhJbmZvLCBuZXdfc2xvdCwgTlVMTCwgdmFs dWVzLCBpc251bGwpOworCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhJbmZvLT5paV9OdW1JbmRl eEtleUF0dHJzOyBpKyspCisJeworCQlTY2FuS2V5RGF0YSAqc2tleSA9ICZza2V5c1tpXTsKKwor CQkvKiBBIFBLIGNvbHVtbiBjYW4gbmV2ZXIgYmUgc2V0IHRvIE5VTEwuICovCisJCUFzc2VydCgh aXNudWxsW2ldKTsKKwkJaWYgKCFEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJnNrZXkt PnNrX2Z1bmMsCisJCQkJCQkJCQkJCXNrZXktPnNrX2NvbGxhdGlvbiwKKwkJCQkJCQkJCQkJdmFs dWVzW2ldLAorCQkJCQkJCQkJCQlza2V5LT5za19hcmd1bWVudCkpKQorCQl7CisJCQltYXRjaGVk ID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBtYXRjaGVkOworfQorCisv KgorICogYnVpbGRfaW5kZXhfc2NhbmtleXMKKyAqCQlCdWlsZCBTY2FuS2V5cyBmb3IgYSBkaXJl Y3QgaW5kZXggcHJvYmUgb2YgdGhlIFBLJ3MgdW5pcXVlIGluZGV4LgorICoKKyAqIFVzZXMgY2Fj aGVkIGNvbXBhcmUgZW50cmllcywgb3BlcmF0b3IgcHJvY2VkdXJlcywgYW5kIHN0cmF0ZWd5IG51 bWJlcnMKKyAqIGZyb20gcmlfcG9wdWxhdGVfZmFzdHBhdGhfbWV0YWRhdGEoKSByYXRoZXIgdGhh biBsb29raW5nIHRoZW0gdXAgb24KKyAqIGVhY2ggaW52b2NhdGlvbi4gIENhc3RzIEZLIHZhbHVl cyB0byB0aGUgb3BlcmF0b3IncyBleHBlY3RlZCBpbnB1dAorICogdHlwZSBpZiBuZWVkZWQuCisg Ki8KK3N0YXRpYyB2b2lkCitidWlsZF9pbmRleF9zY2Fua2V5cyhjb25zdCBSSV9Db25zdHJhaW50 SW5mbyAqcmlpbmZvLAorCQkJCQkgUmVsYXRpb24gaWR4X3JlbCwgRGF0dW0gKnBrX3ZhbHMsCisJ CQkJCSBjaGFyICpwa19udWxscywgU2NhbktleSBza2V5cykKK3sKKwlGYXN0UGF0aE1ldGEgKmZw bWV0YSA9IHJpaW5mby0+ZnBtZXRhOworCisJQXNzZXJ0KGZwbWV0YSk7CisKKwkvKgorCSAqIE1h eSBuZWVkIHRvIGNhc3QgZWFjaCBvZiB0aGUgaW5kaXZpZHVhbCB2YWx1ZXMgb2YgdGhlIGZvcmVp Z24ga2V5IHRvCisJICogdGhlIGNvcnJlc3BvbmRpbmcgUEsgY29sdW1uJ3MgdHlwZSBpZiB0aGUg ZXF1YWxpdHkgb3BlcmF0b3IgZGVtYW5kcyBpdC4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8 IHJpaW5mby0+bmtleXM7IGkrKykKKwl7CisJCWlmIChwa19udWxsc1tpXSAhPSAnbicpCisJCXsK KwkJCVJJX0NvbXBhcmVIYXNoRW50cnkgKmVudHJ5ID0gZnBtZXRhLT5jb21wYXJlX2VudHJpZXNb aV07CisKKwkJCWlmIChPaWRJc1ZhbGlkKGVudHJ5LT5jYXN0X2Z1bmNfZmluZm8uZm5fb2lkKSkK KwkJCQlwa192YWxzW2ldID0gRnVuY3Rpb25DYWxsMygmZW50cnktPmNhc3RfZnVuY19maW5mbywK KwkJCQkJCQkJCQkgICBwa192YWxzW2ldLAorCQkJCQkJCQkJCSAgIEludDMyR2V0RGF0dW0oLTEp LAkvKiB0eXBtb2QgKi8KKwkJCQkJCQkJCQkgICBCb29sR2V0RGF0dW0oZmFsc2UpKTsJLyogaW1w bGljaXQgY29lcmNpb24gKi8KKwkJfQorCX0KKworCS8qCisJICogU2V0IHVwIFNjYW5LZXlzIGZv ciB0aGUgaW5kZXggc2Nhbi4gVGhpcyBpcyBlc3NlbnRpYWxseSBob3cKKwkgKiBFeGVjSW5kZXhC dWlsZFNjYW5LZXlzKCkgc2V0cyB0aGVtIHVwLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwg cmlpbmZvLT5ua2V5czsgaSsrKQorCXsKKwkJaW50CQkJcGthdHRybm8gPSBpICsgMTsKKworCQlT Y2FuS2V5RW50cnlJbml0aWFsaXplKCZza2V5c1tpXSwgMCwgcGthdHRybm8sCisJCQkJCQkJICAg ZnBtZXRhLT5zdHJhdHNbaV0sIGZwbWV0YS0+c3VidHlwZXNbaV0sCisJCQkJCQkJICAgaWR4X3Jl bC0+cmRfaW5kY29sbGF0aW9uW2ldLCBmcG1ldGEtPnJlZ29wc1tpXSwKKwkJCQkJCQkgICBwa192 YWxzW2ldKTsKKwl9Cit9CisKKy8qCisgKiByaV9wb3B1bGF0ZV9mYXN0cGF0aF9tZXRhZGF0YQor ICoJCUNhY2hlIHBlci1rZXkgbWV0YWRhdGEgbmVlZGVkIGJ5IGJ1aWxkX2luZGV4X3NjYW5rZXlz KCkuCisgKgorICogTG9va3MgdXAgdGhlIGNvbXBhcmUgaGFzaCBlbnRyeSwgb3BlcmF0b3IgcHJv Y2VkdXJlIE9JRCwgYW5kIGluZGV4CisgKiBzdHJhdGVneS9zdWJ0eXBlIGZvciBlYWNoIGtleSBj b2x1bW4uICBDYWxsZWQgbGF6aWx5IG9uIGZpcnN0IHVzZQorICogYW5kIHBlcnNpc3RzIGZvciB0 aGUgbGlmZXRpbWUgb2YgdGhlIFJJX0NvbnN0cmFpbnRJbmZvIGVudHJ5LgorICovCitzdGF0aWMg dm9pZAorcmlfcG9wdWxhdGVfZmFzdHBhdGhfbWV0YWRhdGEoUklfQ29uc3RyYWludEluZm8gKnJp aW5mbywKKwkJCQkJCQkgIFJlbGF0aW9uIGZrX3JlbCwgUmVsYXRpb24gaWR4X3JlbCkKK3sKKwlG YXN0UGF0aE1ldGEgKmZwbWV0YTsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKworCUFzc2VydChyaWluZm8gIT0gTlVMTCAm JiByaWluZm8tPnZhbGlkKTsKKworCWZwbWV0YSA9IHBhbGxvY19vYmplY3QoRmFzdFBhdGhNZXRh KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykKKwl7CisJCU9pZAkJ CWVxX29wciA9IHJpaW5mby0+cGZfZXFfb3Byc1tpXTsKKwkJT2lkCQkJdHlwZWlkID0gUklBdHRU eXBlKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKTsKKwkJT2lkCQkJbGVmdHR5cGU7CisJ CVJJX0NvbXBhcmVIYXNoRW50cnkgKmVudHJ5ID0gcmlfSGFzaENvbXBhcmVPcChlcV9vcHIsIHR5 cGVpZCk7CisKKwkJZnBtZXRhLT5jb21wYXJlX2VudHJpZXNbaV0gPSBlbnRyeTsKKwkJZnBtZXRh LT5yZWdvcHNbaV0gPSBnZXRfb3Bjb2RlKGVxX29wcik7CisKKwkJZ2V0X29wX29wZmFtaWx5X3By b3BlcnRpZXMoZXFfb3ByLAorCQkJCQkJCQkgICBpZHhfcmVsLT5yZF9vcGZhbWlseVtpXSwKKwkJ CQkJCQkJICAgZmFsc2UsCisJCQkJCQkJCSAgICZmcG1ldGEtPnN0cmF0c1tpXSwKKwkJCQkJCQkJ ICAgJmxlZnR0eXBlLAorCQkJCQkJCQkgICAmZnBtZXRhLT5zdWJ0eXBlc1tpXSk7CisJfQorCisJ cmlpbmZvLT5mcG1ldGEgPSBmcG1ldGE7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7 Cit9CisKIC8qCiAgKiBFeHRyYWN0IGZpZWxkcyBmcm9tIGEgdHVwbGUgaW50byBEYXR1bS9udWxs cyBhcnJheXMKICAqLwpAQCAtMzExMiw4ICszNTQ0LDExIEBAIHJpX0NvbXBhcmVXaXRoQ2FzdChP aWQgZXFfb3ByLCBPaWQgdHlwZWlkLCBPaWQgY29sbGlkLAogLyoKICAqIHJpX0hhc2hDb21wYXJl T3AgLQogICoKLSAqIFNlZSBpZiB3ZSBrbm93IGhvdyB0byBjb21wYXJlIHR3byB2YWx1ZXMsIGFu ZCBjcmVhdGUgYSBuZXcgaGFzaCBlbnRyeQotICogaWYgbm90LgorICogTG9vayB1cCBvciBjcmVh dGUgYSBjYWNoZSBlbnRyeSBmb3IgdGhlIGdpdmVuIGVxdWFsaXR5IG9wZXJhdG9yIGFuZAorICog dGhlIGNhbGxlcidzIHZhbHVlIHR5cGUgKHR5cGVpZCkuICBUaGUgZW50cnkgaG9sZHMgdGhlIG9w ZXJhdG9yJ3MKKyAqIEZtZ3JJbmZvIGFuZCwgaWYgdHlwZWlkIGRvZXNuJ3QgbWF0Y2ggd2hhdCB0 aGUgb3BlcmF0b3IgZXhwZWN0cyBhcworICogaXRzIHJpZ2h0LWhhbmQgaW5wdXQsIGEgY2FzdCBm dW5jdGlvbiB0byBjb2VyY2UgdGhlIHZhbHVlIGJlZm9yZQorICogY29tcGFyaXNvbi4KICAqLwog c3RhdGljIFJJX0NvbXBhcmVIYXNoRW50cnkgKgogcmlfSGFzaENvbXBhcmVPcChPaWQgZXFfb3By LCBPaWQgdHlwZWlkKQpAQCAtMzE2OSw4ICszNjA0LDE0IEBAIHJpX0hhc2hDb21wYXJlT3AoT2lk IGVxX29wciwgT2lkIHR5cGVpZCkKIAkJICogbW9tZW50IHNpbmNlIHRoYXQgd2lsbCBuZXZlciBi ZSBnZW5lcmF0ZWQgZm9yIGltcGxpY2l0IGNvZXJjaW9ucy4KIAkJICovCiAJCW9wX2lucHV0X3R5 cGVzKGVxX29wciwgJmxlZnR0eXBlLCAmcmlnaHR0eXBlKTsKLQkJQXNzZXJ0KGxlZnR0eXBlID09 IHJpZ2h0dHlwZSk7Ci0JCWlmICh0eXBlaWQgPT0gbGVmdHR5cGUpCisKKwkJLyoKKwkJICogcGZf ZXFfb3BycyAodXNlZCBieSB0aGUgZmFzdCBwYXRoKSBjYW4gYmUgY3Jvc3MtdHlwZSB3aGVuIHRo ZQorCQkgKiBGSyBhbmQgUEsgY29sdW1ucyBkaWZmZXIgaW4gdHlwZSwgZS5nLiBpbnQ0OGVxIGZv ciBpbnQ0IFBLIC8KKwkJICogaW50OCBGSy4gIElmIHRoZSBGSyBjb2x1bW4ncyB0eXBlIGFscmVh ZHkgbWF0Y2hlcyB3aGF0IHRoZQorCQkgKiBvcGVyYXRvciBleHBlY3RzIGFzIGl0cyByaWdodC1o YW5kIGlucHV0LCBubyBjYXN0IGlzIG5lZWRlZC4KKwkJICovCisJCWlmICh0eXBlaWQgPT0gcmln aHR0eXBlKQogCQkJY2FzdGZ1bmMgPSBJbnZhbGlkT2lkOwkvKiBzaW1wbGVzdCBjYXNlICovCiAJ CWVsc2UKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2ZrLWNv bmN1cnJlbnQtcGstdXBkLm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1jb25j dXJyZW50LXBrLXVwZC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjRkZDk1MzVkM2MwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVj dGVkL2ZrLWNvbmN1cnJlbnQtcGstdXBkLm91dApAQCAtMCwwICsxLDEwNSBAQAorUGFyc2VkIHRl c3Qgc3BlYyB3aXRoIDMgc2Vzc2lvbnMKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMyYiBzMnVr ZXkgczFiIHMxaSBzMmMgczFjIHMycyBzMXMKK3N0ZXAgczJiOiBCRUdJTjsKK3N0ZXAgczJ1a2V5 OiBVUERBVEUgcGFyZW50IFNFVCBwYXJlbnRfa2V5ID0gMiBXSEVSRSBwYXJlbnRfa2V5ID0gMTsK K3N0ZXAgczFiOiBCRUdJTjsKK3N0ZXAgczFpOiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDEs IDEpOyA8d2FpdGluZyAuLi4+CitzdGVwIHMyYzogQ09NTUlUOworc3RlcCBzMWk6IDwuLi4gY29t cGxldGVkPgorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJjaGlsZCIgdmlvbGF0 ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiY2hpbGRfcGFyZW50X2tleV9ma2V5Igorc3RlcCBz MWM6IENPTU1JVDsKK3N0ZXAgczJzOiBTRUxFQ1QgKiBGUk9NIHBhcmVudDsKK3BhcmVudF9rZXl8 YXV4CistLS0tLS0tLS0tKy0tLQorICAgICAgICAgMnxmb28KKygxIHJvdykKKworc3RlcCBzMXM6 IFNFTEVDVCAqIEZST00gY2hpbGQ7CitjaGlsZF9rZXl8cGFyZW50X2tleQorLS0tLS0tLS0tKy0t LS0tLS0tLS0KKygwIHJvd3MpCisKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMyYiBzMnVhdXgg czFiIHMxaSBzMmMgczFjIHMycyBzMXMKK3N0ZXAgczJiOiBCRUdJTjsKK3N0ZXAgczJ1YXV4OiBV UERBVEUgcGFyZW50IFNFVCBhdXggPSAnYmFyJyBXSEVSRSBwYXJlbnRfa2V5ID0gMTsKK3N0ZXAg czFiOiBCRUdJTjsKK3N0ZXAgczFpOiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDEsIDEpOwor c3RlcCBzMmM6IENPTU1JVDsKK3N0ZXAgczFjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICog RlJPTSBwYXJlbnQ7CitwYXJlbnRfa2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDF8 YmFyCisoMSByb3cpCisKK3N0ZXAgczFzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5 fHBhcmVudF9rZXkKKy0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgIDF8ICAgICAgICAgMQor KDEgcm93KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMmIgczJ1a2V5IHMxYiBzMWkgczJ1 a2V5MiBzMmMgczFjIHMycyBzMXMKK3N0ZXAgczJiOiBCRUdJTjsKK3N0ZXAgczJ1a2V5OiBVUERB VEUgcGFyZW50IFNFVCBwYXJlbnRfa2V5ID0gMiBXSEVSRSBwYXJlbnRfa2V5ID0gMTsKK3N0ZXAg czFiOiBCRUdJTjsKK3N0ZXAgczFpOiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDEsIDEpOyA8 d2FpdGluZyAuLi4+CitzdGVwIHMydWtleTI6IFVQREFURSBwYXJlbnQgU0VUIHBhcmVudF9rZXkg PSAxIFdIRVJFIHBhcmVudF9rZXkgPSAyOworc3RlcCBzMmM6IENPTU1JVDsKK3N0ZXAgczFpOiA8 Li4uIGNvbXBsZXRlZD4KK3N0ZXAgczFjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICogRlJP TSBwYXJlbnQ7CitwYXJlbnRfa2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDF8Zm9v CisoMSByb3cpCisKK3N0ZXAgczFzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5fHBh cmVudF9rZXkKKy0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgIDF8ICAgICAgICAgMQorKDEg cm93KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMmIgczJ1a2V5IHMzYiBzM2kgczJjIHMz YyBzMnMgczNzCitzdGVwIHMyYjogQkVHSU47CitzdGVwIHMydWtleTogVVBEQVRFIHBhcmVudCBT RVQgcGFyZW50X2tleSA9IDIgV0hFUkUgcGFyZW50X2tleSA9IDE7CitzdGVwIHMzYjogQkVHSU4g SVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgczNpOiBJTlNFUlQgSU5UTyBj aGlsZCBWQUxVRVMgKDIsIDEpOyA8d2FpdGluZyAuLi4+CitzdGVwIHMyYzogQ09NTUlUOworc3Rl cCBzM2k6IDwuLi4gY29tcGxldGVkPgorRVJST1I6ICBjb3VsZCBub3Qgc2VyaWFsaXplIGFjY2Vz cyBkdWUgdG8gY29uY3VycmVudCB1cGRhdGUKK3N0ZXAgczNjOiBDT01NSVQ7CitzdGVwIHMyczog U0VMRUNUICogRlJPTSBwYXJlbnQ7CitwYXJlbnRfa2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAg ICAgICAgIDJ8Zm9vCisoMSByb3cpCisKK3N0ZXAgczNzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOwor Y2hpbGRfa2V5fHBhcmVudF9rZXkKKy0tLS0tLS0tLSstLS0tLS0tLS0tCisoMCByb3dzKQorCisK K3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMmIgczJ1YXV4IHMzYiBzM2kgczJjIHMzYyBzMnMgczNz CitzdGVwIHMyYjogQkVHSU47CitzdGVwIHMydWF1eDogVVBEQVRFIHBhcmVudCBTRVQgYXV4ID0g J2JhcicgV0hFUkUgcGFyZW50X2tleSA9IDE7CitzdGVwIHMzYjogQkVHSU4gSVNPTEFUSU9OIExF VkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgczNpOiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMg KDIsIDEpOworc3RlcCBzMmM6IENPTU1JVDsKK3N0ZXAgczNjOiBDT01NSVQ7CitzdGVwIHMyczog U0VMRUNUICogRlJPTSBwYXJlbnQ7CitwYXJlbnRfa2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAg ICAgICAgIDF8YmFyCisoMSByb3cpCisKK3N0ZXAgczNzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOwor Y2hpbGRfa2V5fHBhcmVudF9rZXkKKy0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgIDJ8ICAg ICAgICAgMQorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0 aW9uX3NjaGVkdWxlIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQppbmRl eCA0ZTQ2NjU4MGNkNC4uYzFhOTk5YmYxZDIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlv bi9pc29sYXRpb25fc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9z Y2hlZHVsZQpAQCAtMzcsNiArMzcsNyBAQCB0ZXN0OiBmay1wYXJ0aXRpb25lZC0yCiB0ZXN0OiBm ay1zbmFwc2hvdAogdGVzdDogZmstc25hcHNob3QtMgogdGVzdDogZmstc25hcHNob3QtMwordGVz dDogZmstY29uY3VycmVudC1way11cGQKIHRlc3Q6IHN1YnhpZC1vdmVyZmxvdwogdGVzdDogZXZh bC1wbGFuLXF1YWwKIHRlc3Q6IGV2YWwtcGxhbi1xdWFsLXRyaWdnZXIKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9may1jb25jdXJyZW50LXBrLXVwZC5zcGVjIGIvc3JjL3Rl c3QvaXNvbGF0aW9uL3NwZWNzL2ZrLWNvbmN1cnJlbnQtcGstdXBkLnNwZWMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAzZGM3ZjI2MGNkCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2ZrLWNvbmN1cnJlbnQtcGstdXBkLnNwZWMKQEAg LTAsMCArMSw1MyBAQAorIyBUZXN0cyB0aGF0IGFuIElOU0VSVCBvbiByZWZlcmVuY2luZyB0YWJs ZSBjb3JyZWN0bHkgZmFpbHMgd2hlbgorIyB0aGUgcmVmZXJlbmNlZCB2YWx1ZSBkaXNhcHBlYXJz IGR1ZSB0byBhIGNvbmN1cnJlbnQgdXBkYXRlCitzZXR1cAoreworICBDUkVBVEUgVEFCTEUgcGFy ZW50ICgKKyAgICBwYXJlbnRfa2V5IGludCBQUklNQVJZIEtFWSwKKyAgICBhdXggICB0ZXh0IE5P VCBOVUxMCisgICk7CisKKyAgQ1JFQVRFIFRBQkxFIGNoaWxkICgKKyAgICBjaGlsZF9rZXkgaW50 IFBSSU1BUlkgS0VZLAorICAgIHBhcmVudF9rZXkgaW50OCBOT1QgTlVMTCBSRUZFUkVOQ0VTIHBh cmVudAorICApOworCisgIElOU0VSVCBJTlRPIHBhcmVudCBWQUxVRVMgKDEsICdmb28nKTsKK30K KwordGVhcmRvd24KK3sKKyAgRFJPUCBUQUJMRSBwYXJlbnQsIGNoaWxkOworfQorCitzZXNzaW9u IHMxCitzdGVwIHMxYiAgeyBCRUdJTjsgfQorc3RlcCBzMWkgeyBJTlNFUlQgSU5UTyBjaGlsZCBW QUxVRVMgKDEsIDEpOyB9CitzdGVwIHMxYyB7IENPTU1JVDsgfQorc3RlcCBzMXMgeyBTRUxFQ1Qg KiBGUk9NIGNoaWxkOyB9CisKK3Nlc3Npb24gczIKK3N0ZXAgczJiICB7IEJFR0lOOyB9CitzdGVw IHMydWtleSB7IFVQREFURSBwYXJlbnQgU0VUIHBhcmVudF9rZXkgPSAyIFdIRVJFIHBhcmVudF9r ZXkgPSAxOyB9CitzdGVwIHMydWF1eCB7IFVQREFURSBwYXJlbnQgU0VUIGF1eCA9ICdiYXInIFdI RVJFIHBhcmVudF9rZXkgPSAxOyB9CitzdGVwIHMydWtleTIgeyBVUERBVEUgcGFyZW50IFNFVCBw YXJlbnRfa2V5ID0gMSBXSEVSRSBwYXJlbnRfa2V5ID0gMjsgfQorc3RlcCBzMmMgeyBDT01NSVQ7 IH0KK3N0ZXAgczJzIHsgU0VMRUNUICogRlJPTSBwYXJlbnQ7IH0KKworc2Vzc2lvbiBzMworc3Rl cCBzM2IgeyBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOyB9CitzdGVwIHMz aSB7IElOU0VSVCBJTlRPIGNoaWxkIFZBTFVFUyAoMiwgMSk7IH0KK3N0ZXAgczNjIHsgQ09NTUlU OyB9CitzdGVwIHMzcyB7IFNFTEVDVCAqIEZST00gY2hpbGQ7IH0KKworIyBmYWlsCitwZXJtdXRh dGlvbiBzMmIgczJ1a2V5IHMxYiBzMWkgczJjIHMxYyBzMnMgczFzCisjIG9rCitwZXJtdXRhdGlv biBzMmIgczJ1YXV4IHMxYiBzMWkgczJjIHMxYyBzMnMgczFzCisjIG9rCitwZXJtdXRhdGlvbiBz MmIgczJ1a2V5IHMxYiBzMWkgczJ1a2V5MiBzMmMgczFjIHMycyBzMXMKKworIyBSUjoga2V5IHVw ZGF0ZSAtPiBzZXJpYWxpemF0aW9uIGZhaWx1cmUKK3Blcm11dGF0aW9uIHMyYiBzMnVrZXkgczNi IHMzaSBzMmMgczNjIHMycyBzM3MKKyMgUlI6IG5vbi1rZXkgdXBkYXRlIC0+IG9sZCB2ZXJzaW9u IHZpc2libGUgdmlhIHRyYW5zYWN0aW9uIHNuYXBzaG90CitwZXJtdXRhdGlvbiBzMmIgczJ1YXV4 IHMzYiBzM2kgczJjIHMzYyBzMnMgczNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWln bl9rZXkub3V0CmluZGV4IDlhZTRkYmYxYjBhLi4wODI2ZjUxODAwNCAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKQEAgLTM3MCw2ICszNzAsNTMgQEAgU0VMRUNU ICogRlJPTSBQS1RBQkxFOwogRFJPUCBUQUJMRSBGS1RBQkxFOwogRFJPUCBUQUJMRSBQS1RBQkxF OwogLS0KKy0tIENoZWNrIFJMUworLS0KK0NSRUFURSBUQUJMRSBQS1RBQkxFICggcHRlc3QxIGlu dCBQUklNQVJZIEtFWSwgcHRlc3QyIHRleHQgKTsKK0NSRUFURSBUQUJMRSBGS1RBQkxFICggZnRl c3QxIGludCBSRUZFUkVOQ0VTIFBLVEFCTEUsIGZ0ZXN0MiBpbnQgKTsKKy0tIEluc2VydCB0ZXN0 IGRhdGEgaW50byBQS1RBQkxFCitJTlNFUlQgSU5UTyBQS1RBQkxFIFZBTFVFUyAoMSwgJ1Rlc3Qx Jyk7CitJTlNFUlQgSU5UTyBQS1RBQkxFIFZBTFVFUyAoMiwgJ1Rlc3QyJyk7CitJTlNFUlQgSU5U TyBQS1RBQkxFIFZBTFVFUyAoMywgJ1Rlc3QzJyk7CistLSBHcmFudCBwcml2aWxlZ2VzIG9uIFBL VEFCTEUvRktUQUJMRSB0byB1c2VyIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcgorQ1JFQVRFIFVT RVIgcmVncmVzc19mb3JlaWduX2tleV91c2VyIE5PTE9HSU47CitHUkFOVCBTRUxFQ1QgT04gUEtU QUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CitHUkFOVCBTRUxFQ1QsIElOU0VSVCBP TiBGS1RBQkxFIFRPIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKy0tIEVuYWJsZSBSTFMgb24g UEtUQUJMRSBhbmQgQ3JlYXRlIHBvbGljaWVzCitBTFRFUiBUQUJMRSBQS1RBQkxFIEVOQUJMRSBS T1cgTEVWRUwgU0VDVVJJVFk7CitDUkVBVEUgUE9MSUNZIHBrdGFibGVfdmlld19vZGRfcG9saWN5 IE9OIFBLVEFCTEUgVE8gcmVncmVzc19mb3JlaWduX2tleV91c2VyIFVTSU5HIChwdGVzdDEgJSAy ID0gMSk7CitBTFRFUiBUQUJMRSBQS1RBQkxFIE9XTkVSIHRvIHJlZ3Jlc3NfZm9yZWlnbl9rZXlf dXNlcjsKK1NFVCBST0xFIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKK0lOU0VSVCBJTlRPIEZL VEFCTEUgVkFMVUVTICgzLCA1KTsKK0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFMVUVTICgyLCA1KTsg LS0gc3VjY2VzcywgUkVGRVJFTkNFUyBhcmUgbm90IHN1YmplY3QgdG8gcm93IHNlY3VyaXR5CitS RVNFVCBST0xFOworRFJPUCBUQUJMRSBGS1RBQkxFOworRFJPUCBUQUJMRSBQS1RBQkxFOworRFJP UCBVU0VSIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKy0tCistLSBDaGVjayBBQ0wKKy0tCitD UkVBVEUgVEFCTEUgUEtUQUJMRSAoIHB0ZXN0MSBpbnQgUFJJTUFSWSBLRVksIHB0ZXN0MiB0ZXh0 ICk7CitDUkVBVEUgVEFCTEUgRktUQUJMRSAoIGZ0ZXN0MSBpbnQgUkVGRVJFTkNFUyBQS1RBQkxF LCBmdGVzdDIgaW50ICk7CistLSBJbnNlcnQgdGVzdCBkYXRhIGludG8gUEtUQUJMRQorSU5TRVJU IElOVE8gUEtUQUJMRSBWQUxVRVMgKDEsICdUZXN0MScpOworSU5TRVJUIElOVE8gUEtUQUJMRSBW QUxVRVMgKDIsICdUZXN0MicpOworSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDMsICdUZXN0 MycpOworLS0gR3JhbnQgdXNhZ2Ugb24gUEtUQUJMRSB0byB1c2VyIHJlZ3Jlc3NfZm9yZWlnbl9r ZXlfdXNlcgorQ1JFQVRFIFVTRVIgcmVncmVzc19mb3JlaWduX2tleV91c2VyIE5PTE9HSU47CitH UkFOVCBTRUxFQ1QgT04gUEtUQUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CitBTFRF UiBUQUJMRSBQS1RBQkxFIE9XTkVSIHRvIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKy0tIElu c2VydGluZyBpbnRvIEZLVEFCTEUgc2hvdWxkIHdvcmsKK0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFM VUVTICgzLCA1KTsKKy0tIFJldm9rZSB1c2FnZSBvbiBQS1RBQkxFIGZyb20gdXNlciByZWdyZXNz X2ZvcmVpZ25fa2V5X3VzZXIKK1JFVk9LRSBTRUxFQ1QgT04gUEtUQUJMRSBGUk9NIHJlZ3Jlc3Nf Zm9yZWlnbl9rZXlfdXNlcjsKKy0tIEluc2VydGluZyBpbnRvIEZLVEFCTEUgc2hvdWxkIGZhaWwK K0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFMVUVTICgyLCA2KTsKK0VSUk9SOiAgcGVybWlzc2lvbiBk ZW5pZWQgZm9yIHRhYmxlIHBrdGFibGUKK0RST1AgVEFCTEUgRktUQUJMRTsKK0RST1AgVEFCTEUg UEtUQUJMRTsKK0RST1AgVVNFUiByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CistLQogLS0gQ2hl Y2sgaW5pdGlhbCBjaGVjayB1cG9uIEFMVEVSIFRBQkxFCiAtLQogQ1JFQVRFIFRBQkxFIFBLVEFC TEUgKCBwdGVzdDEgaW50LCBwdGVzdDIgaW50LCBQUklNQVJZIEtFWShwdGVzdDEsIHB0ZXN0Mikg KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbAppbmRleCAzYjhjOTViZjg5My4uZTll ZTI5MzMxY2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKQEAgLTI0Miw2ICsy NDIsNzAgQEAgU0VMRUNUICogRlJPTSBQS1RBQkxFOwogRFJPUCBUQUJMRSBGS1RBQkxFOwogRFJP UCBUQUJMRSBQS1RBQkxFOwogCistLQorLS0gQ2hlY2sgUkxTCistLQorQ1JFQVRFIFRBQkxFIFBL VEFCTEUgKCBwdGVzdDEgaW50IFBSSU1BUlkgS0VZLCBwdGVzdDIgdGV4dCApOworQ1JFQVRFIFRB QkxFIEZLVEFCTEUgKCBmdGVzdDEgaW50IFJFRkVSRU5DRVMgUEtUQUJMRSwgZnRlc3QyIGludCAp OworCistLSBJbnNlcnQgdGVzdCBkYXRhIGludG8gUEtUQUJMRQorSU5TRVJUIElOVE8gUEtUQUJM RSBWQUxVRVMgKDEsICdUZXN0MScpOworSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDIsICdU ZXN0MicpOworSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDMsICdUZXN0MycpOworCistLSBH cmFudCBwcml2aWxlZ2VzIG9uIFBLVEFCTEUvRktUQUJMRSB0byB1c2VyIHJlZ3Jlc3NfZm9yZWln bl9rZXlfdXNlcgorQ1JFQVRFIFVTRVIgcmVncmVzc19mb3JlaWduX2tleV91c2VyIE5PTE9HSU47 CitHUkFOVCBTRUxFQ1QgT04gUEtUQUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CitH UkFOVCBTRUxFQ1QsIElOU0VSVCBPTiBGS1RBQkxFIFRPIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNl cjsKKworLS0gRW5hYmxlIFJMUyBvbiBQS1RBQkxFIGFuZCBDcmVhdGUgcG9saWNpZXMKK0FMVEVS IFRBQkxFIFBLVEFCTEUgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKK0NSRUFURSBQT0xJQ1kg cGt0YWJsZV92aWV3X29kZF9wb2xpY3kgT04gUEtUQUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5 X3VzZXIgVVNJTkcgKHB0ZXN0MSAlIDIgPSAxKTsKKworQUxURVIgVEFCTEUgUEtUQUJMRSBPV05F UiB0byByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CisKK1NFVCBST0xFIHJlZ3Jlc3NfZm9yZWln bl9rZXlfdXNlcjsKKworSU5TRVJUIElOVE8gRktUQUJMRSBWQUxVRVMgKDMsIDUpOworSU5TRVJU IElOVE8gRktUQUJMRSBWQUxVRVMgKDIsIDUpOyAtLSBzdWNjZXNzLCBSRUZFUkVOQ0VTIGFyZSBu b3Qgc3ViamVjdCB0byByb3cgc2VjdXJpdHkKKworUkVTRVQgUk9MRTsKKworRFJPUCBUQUJMRSBG S1RBQkxFOworRFJPUCBUQUJMRSBQS1RBQkxFOworRFJPUCBVU0VSIHJlZ3Jlc3NfZm9yZWlnbl9r ZXlfdXNlcjsKKworLS0KKy0tIENoZWNrIEFDTAorLS0KK0NSRUFURSBUQUJMRSBQS1RBQkxFICgg cHRlc3QxIGludCBQUklNQVJZIEtFWSwgcHRlc3QyIHRleHQgKTsKK0NSRUFURSBUQUJMRSBGS1RB QkxFICggZnRlc3QxIGludCBSRUZFUkVOQ0VTIFBLVEFCTEUsIGZ0ZXN0MiBpbnQgKTsKKworLS0g SW5zZXJ0IHRlc3QgZGF0YSBpbnRvIFBLVEFCTEUKK0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVT ICgxLCAnVGVzdDEnKTsKK0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgyLCAnVGVzdDInKTsK K0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgzLCAnVGVzdDMnKTsKKworLS0gR3JhbnQgdXNh Z2Ugb24gUEtUQUJMRSB0byB1c2VyIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcgorQ1JFQVRFIFVT RVIgcmVncmVzc19mb3JlaWduX2tleV91c2VyIE5PTE9HSU47CitHUkFOVCBTRUxFQ1QgT04gUEtU QUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CisKK0FMVEVSIFRBQkxFIFBLVEFCTEUg T1dORVIgdG8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOworCistLSBJbnNlcnRpbmcgaW50byBG S1RBQkxFIHNob3VsZCB3b3JrCitJTlNFUlQgSU5UTyBGS1RBQkxFIFZBTFVFUyAoMywgNSk7CisK Ky0tIFJldm9rZSB1c2FnZSBvbiBQS1RBQkxFIGZyb20gdXNlciByZWdyZXNzX2ZvcmVpZ25fa2V5 X3VzZXIKK1JFVk9LRSBTRUxFQ1QgT04gUEtUQUJMRSBGUk9NIHJlZ3Jlc3NfZm9yZWlnbl9rZXlf dXNlcjsKKworLS0gSW5zZXJ0aW5nIGludG8gRktUQUJMRSBzaG91bGQgZmFpbAorSU5TRVJUIElO VE8gRktUQUJMRSBWQUxVRVMgKDIsIDYpOworCitEUk9QIFRBQkxFIEZLVEFCTEU7CitEUk9QIFRB QkxFIFBLVEFCTEU7CisKK0RST1AgVVNFUiByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CisKIC0t CiAtLSBDaGVjayBpbml0aWFsIGNoZWNrIHVwb24gQUxURVIgVEFCTEUKIC0tCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IDBjMDdjOTQ1ZjA1Li5jNTFhMGE5MDNhNiAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTgxNSw2ICs4MTUsNyBAQCBFeHRlbnNpb25JbmZvCiBFeHRlbnNp b25Mb2NhdGlvbgogRXh0ZW5zaW9uU2libGluZ0NhY2hlCiBFeHRlbnNpb25WZXJzaW9uSW5mbwor RmFzdFBhdGhNZXRhCiBGRFdDb2xsYXRlU3RhdGUKIEZEX1NFVAogRklMRQotLSAKMi40Ny4zCgo= --00000000000096fdfc064dc3b7f9--