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 1w7Y0Y-005Qo0-0Q for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 12:15:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7Y0W-00A6L7-20 for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 12:15:45 +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 1w7Y0W-00A6Ky-0i for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 12:15:44 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7Y0T-00000002Ab3-1J1R for pgsql-hackers@postgresql.org; Tue, 31 Mar 2026 12:15:44 +0000 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2b2469e5117so15364285ad.1 for ; Tue, 31 Mar 2026 05:15:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774959340; cv=none; d=google.com; s=arc-20240605; b=eEC2GTVDrG6JvrSzDL9p3QJBcNdElsJk6y6njMsQ9VcaBZ3On19bmzm7WPKw3aa2OB ISOK71cNErAvrnaB9IGZKJNdzcaRLgX1yGaPQfQ4AYJuX4Vk/adCnG6aU3dxVKPxijwm qFfTfThwEq+P+/h8WW46i6Xqfbz3gyMucGvlbqUphXGhB0SMwaP8UZdhkNDt5DGMcdQT dpxXYuibJXj0hlNGlzyGHNWjFUFhxfNzmW/fC9b3z6zRL9xFxyixedQJ15tIs8+O6xeE 3nyS6M8jo9U94UYegioFRRIt4yRj25WIdxy2hT9DJDTMAWgivQyl6cwRfyf5/CuTX7ot lKow== 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=DFGB9qalPw9rGdLxeXsO7Ig4+nHF+kmZB+6MS6K6KTs=; fh=CJachtQRtEpkYDo2eM/hTcnO/iU4FJ4VbL/pCCH4HH8=; b=eCZk3Ouh6RIlI8NMPHiKkBFtK9J0FWYljoh3TnlyzrkbVy1DFhRKmNM+Q54j2jMdpI bWtkECSG7hfnOnK+CoXvmr31BF/nSqY8kshQae2PO7aNavpkG/gp871WFUf0CwxO+gc0 sT5iIGm7E5ODxPcLMbFcr0gU7/yNtHefu9UgP9VW9ehfk6STxRgeAxMMH7X1z5F3NbDV JVS0Ll971mWW3hHu6RPrKQR9Ei5xyUfQjvV8krWsQN2EhXgXyUiC7ZuAuUBzU6mn03ip YJOJJTi6rUBR0sflS+OaVY919AlIPP3vk0rHUzrrF1kz6CZUM14JPrXmQMf9GuLxQhU/ SdMA==; 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=1774959340; x=1775564140; 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=DFGB9qalPw9rGdLxeXsO7Ig4+nHF+kmZB+6MS6K6KTs=; b=Kt3MfTvmUfrCQ/MMwRy5uXUVys5v1CGVrGchF50h/Ri5v3a/1zy0Y54SmYeyhkXOBo g3KaIjeak/ZqIgf5aczIuD/PW8FE9gtK4RvV2s5+YzYFEt1GC2r4B1/qs20q4kfYL4iH YURR5VAHSMnPtX0J8HeYGOH23KamwDWyF0G+vfuTA/f8H+GNAiVx4/behtVye4nCO5Dm 7Ru9D6dCz/upETz6i8dPE+scS0wOitzN5cxKmjDAyGUUZYjYbhM0172M4pZPQ0DPpa7L UCLVa5+Tpbrjip9QJzwHJJwnX92AxqQPiiuTBOxLgfXNHYpJ5MsP12y0DgGT4Hy3sPiG ROnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774959340; x=1775564140; 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=DFGB9qalPw9rGdLxeXsO7Ig4+nHF+kmZB+6MS6K6KTs=; b=g8IYXarUZ8MfOeCvWUdERxEq6ll6p+EGjt/b/2oikLmQPyQQAVmzUJxiASPjauWQKz ZlpYeh/mO07/ZbomA+ZJq7nuYa5s2R60Iy84fy3nnRy+utUo94IBvyPgVkDm2MTmjK4F /vX+AkUnLcCoucNgdYTW//D3NISqu4pJ6E57L+68qv/fks2eqMVz9wabmdvg3hSkSqPh iSz5Vq9nI/pvxsSer6ON+xKtkm+ggUXDDs34Qos+Cuk4o3yOobx0SV1xa/SiUmjWXT8O diVdaRtJU9i6BO6WZNCzSwl+nsiGKF9IS/S57MVJ2woqod6YM2ER25d9ftQYSV98mGH6 Vd4g== X-Forwarded-Encrypted: i=1; AJvYcCW9JttnbIBuRDn8Q3+uWmfxfci7BNCAMyTDzv0e1yNZYmZU+iUkR2HWe/oml343+hztyocYDb1eJ8l/tmLa@postgresql.org X-Gm-Message-State: AOJu0YyK3f2lSa4E2oWUvphFrleZBHfk0UcbNt+y0JrcOC25rVvMoEgV 88iJim/ETSZ2BjLer/1TZqOblt8epapEEwElZs5yKrZOTU0zXQdLecQcDYXkETMQFZ84L5B5RXY Jx9k2jnzdQ4UE9Iy2pL36cwkmb9y879c= X-Gm-Gg: ATEYQzx/8rUAEudOLyV5xW+XwY6Wb4vfJqlm4DqlqqfKNVz2HPohbSwbfiWaD2cKSIV T5ookA6abZ0chbWbvLidGxKtV4uynQ82NO83FKHo7dScML6iDNlaiFOjs/hktGB6D04X7muWuom djF9kXeaWqFKe7uZJ2mwSwx1OLi07NUnamuFEdWKGXvLgUQQS56JnQhjWcRQE2cma4XpwgCH4Yb 7GjATlEPbG3n7jBJXLO8incrICzRNBNSnFzwTZx/P6CuVz2PE8rUpP9LhWrg7yxc58E7LLE6m08 8LZEi7qW X-Received: by 2002:a17:902:f645:b0:2b2:4fc1:f653 with SMTP id d9443c01a7336-2b25ee8ff34mr29038225ad.3.1774959339537; Tue, 31 Mar 2026 05:15:39 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> <77FA04FE-1F84-4DA1-8855-8BBFD8CC889A@gmail.com> In-Reply-To: From: Amit Langote Date: Tue, 31 Mar 2026 21:15:22 +0900 X-Gm-Features: AQROBzCKUav6GJRgcyWhYNybpKz6LGNu0jYUMSW-Jwx5cw-egYlIvgMebrvaDCA Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Junwang Zhao Cc: Chao Li , Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000ec9cdb064e50ecc0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ec9cdb064e50ecc0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2026 at 7:57=E2=80=AFPM Junwang Zhao wr= ote: > On Tue, Mar 31, 2026 at 5:17=E2=80=AFPM Amit Langote wrote: > > On Tue, Mar 31, 2026 at 6:09=E2=80=AFPM Chao Li wrote: > > > > On Mar 30, 2026, at 19:15, Amit Langote w= rote: > > > > Kept looking at 0002 and found a couple of things to improve or cha= nge > > > > my thoughts about. I decided to move the permission check from fas= t > > > > path cache entry creation into ri_FastPathBatchFlush(), alongside t= he > > > > snapshot, so that permission changes between flushes are respected > > > > rather than checked once at batch start; the check happens for ever= y > > > > row in the SPI and non-batched fast path. Also, improved comments = in > > > > a few places to mention design decisions better. > > > > > > > > 0001 is mostly unchanged from v11 except I updated its commit messa= ge > > > > to explain why only RI_FKey_check is covered and not the action > > > > triggers as the topic has come up in previous threads about this > > > > topic. > > > > > > > > Still planning to commit 0001 tomorrow. > > > > > > > > -- > > > > Thanks, Amit Langote > > > > > > > > > > Hi Amit, > > > > > > While reading the recent commits, I saw that 0001 has been pushed as = 2da86c1ef9b5446e0e22c0b6a5846293e58d98e3. However, I also just noticed a us= e-after-free issue in ri_LoadConstraintInfo(). It dereferences conForm afte= r ReleaseSysCache(tup), which is unsafe. I am attaching a tiny patch to fix= that. > > > > Thanks. I noticed that too and pushed the fix an hour ago: > > > > https://www.postgresql.org/message-id/E1w7U6V-002H6n-0o%40gemulon.postg= resql.org > > > > -- > > Thanks, Amit Langote > > prion is happy now, the fix works, thanks. Yep, good. Because I noticed a use-after-free with prion, I thought to check our preparedness for CLOBBER_CACHE_ALWAYS and found issues in both the committed patch (and similar code in 0002): riinfo going stale inside ri_FastPathCheck() after relation opens and dangling fpmeta pointer after riinfo invalidation. 0001 fixes those; I'll apply it tomorrow morning. 0002 is the rebased batching patch. -- Thanks, Amit Langote --000000000000ec9cdb064e50ecc0 Content-Type: application/octet-stream; name="v13-0001-Fix-two-issues-in-fast-path-FK-check-introduced-.patch" Content-Disposition: attachment; filename="v13-0001-Fix-two-issues-in-fast-path-FK-check-introduced-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnekw36f0 RnJvbSA1ZWE3ODkzMjNkMjAwNWI2ZGY4ZTBhZGM4ODE1MTgyM2UxZmJlZDI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMzEgTWFyIDIwMjYgMjA6NTM6NDMgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MyAxLzJdIEZpeCB0d28gaXNzdWVzIGluIGZhc3QtcGF0aCBGSyBjaGVjayBpbnRyb2R1Y2VkIGJ5 CiBjb21taXQgMmRhODZjMWVmOQoKRmlyc3QsIHVuZGVyIENMT0JCRVJfQ0FDSEVfQUxXQVlTLCB0 aGUgUklfQ29uc3RyYWludEluZm8gZW50cnkgY2FuCmJlIGludmFsaWRhdGVkIGJ5IHJlbGNhY2hl IGNhbGxiYWNrcyB0cmlnZ2VyZWQgaW5zaWRlIHRhYmxlX29wZW4oKQpvciBpbmRleF9vcGVuKCks IGxlYXZpbmcgcmlfRmFzdFBhdGhDaGVjaygpIGNhbGxpbmcKcmlfcG9wdWxhdGVfZmFzdHBhdGhf bWV0YWRhdGEoKSB3aXRoIGEgc3RhbGUgZW50cnkgd2hvc2UgdmFsaWQgZmxhZwppcyBmYWxzZS4g IEZpeCBieSByZWxvYWRpbmcgcmlpbmZvIGFmdGVyIHRoZSByZWxhdGlvbiBvcGVucyBhbmQKcG9w dWxhdGluZyBmcG1ldGEgaW1tZWRpYXRlbHksIHRoZW4gY2FsbGluZyByaV9FeHRyYWN0VmFsdWVz KCkgYW5kCmJ1aWxkX2luZGV4X3NjYW5rZXlzKCkgYmVmb3JlIGFueSBmdXJ0aGVyIG9wZXJhdGlv bnMgdGhhdCBjb3VsZAp0cmlnZ2VyIGludmFsaWRhdGlvbi4KClNlY29uZCwgZnBtZXRhIHdhcyBu b3QgZnJlZWQgb3IgY2xlYXJlZCB3aGVuIHRoZSBlbnRyeSB3YXMKaW52YWxpZGF0ZWQgaW4gSW52 YWxpZGF0ZUNvbnN0cmFpbnRDYWNoZUNhbGxCYWNrKCksIGxlYXZpbmcgYQpkYW5nbGluZyBwb2lu dGVyIHRoYXQgY2F1c2VkIGEgY3Jhc2ggb24gdGhlIG5leHQgaW52b2NhdGlvbiB3aGVuCnRoZSBn dWFyZCBgaWYgKHJpaW5mby0+ZnBtZXRhID09IE5VTEwpYCBpbmNvcnJlY3RseSBza2lwcGVkCnJl cG9wdWxhdGlvbi4gIEZpeCBieSBmcmVlaW5nIGFuZCBOVUxMaW5nIGZwbWV0YSBhdCBpbnZhbGlk YXRpb24KdGltZS4KCk5vdGljZWQgbG9jYWxseSB3aGVuIHRlc3Rpbmcgd2l0aCBDTE9CQkVSX0NB Q0hFX0FMV0FZUy4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyB8IDI4 ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRp b25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5k ZXggZmZhYTBlNzQ5Y2IuLmQ1NzM0M2Y4NWQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dl cnMuYwpAQCAtMjQ4Niw2ICsyNDg2LDE2IEBAIEludmFsaWRhdGVDb25zdHJhaW50Q2FjaGVDYWxs QmFjayhEYXR1bSBhcmcsIFN5c0NhY2hlSWRlbnRpZmllciBjYWNoZWlkLAogCQkJcmlpbmZvLT5y b290SGFzaFZhbHVlID09IGhhc2h2YWx1ZSkKIAkJewogCQkJcmlpbmZvLT52YWxpZCA9IGZhbHNl OworCQkJLyoKKwkJCSAqIEZyZWUgYW5kIGNsZWFyIGFueSBjYWNoZWQgZmFzdC1wYXRoIG1ldGFk YXRhIHNvIHRoZSBuZXh0IHVzZQorCQkJICogcmVwb3B1bGF0ZXMgaXQgZnJvbSBzY3JhdGNoIHJh dGhlciB0aGFuIGZvbGxvd2luZyBhIGRhbmdsaW5nCisJCQkgKiBwb2ludGVyLgorCQkJICovCisJ CQlpZiAocmlpbmZvLT5mcG1ldGEpCisJCQl7CisJCQkJcGZyZWUocmlpbmZvLT5mcG1ldGEpOwor CQkJCXJpaW5mby0+ZnBtZXRhID0gTlVMTDsKKwkJCX0KIAkJCS8qIFJlbW92ZSBpbnZhbGlkYXRl ZCBlbnRyaWVzIGZyb20gdGhlIGxpc3QsIHRvbyAqLwogCQkJZGNsaXN0X2RlbGV0ZV9mcm9tKCZy aV9jb25zdHJhaW50X2NhY2hlX3ZhbGlkX2xpc3QsIGl0ZXIuY3VyKTsKIAkJfQpAQCAtMjcxNCwx NyArMjcyNCwyMyBAQCByaV9GYXN0UGF0aENoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpy aWluZm8sCiAJcGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBrX3JlbGlkLCBSb3dTaGFyZUxv Y2spOwogCWlkeF9yZWwgPSBpbmRleF9vcGVuKHJpaW5mby0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJl TG9jayk7CiAKKwlpZiAocmlpbmZvLT5mcG1ldGEgPT0gTlVMTCkKKwl7CisJCS8qIFJlbG9hZCB0 byBlbnN1cmUgaXQncyB2YWxpZC4gKi8KKwkJcmlpbmZvID0gcmlfTG9hZENvbnN0cmFpbnRJbmZv KHJpaW5mby0+Y29uc3RyYWludF9pZCk7CisJCXJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRh KChSSV9Db25zdHJhaW50SW5mbyAqKSByaWluZm8sCisJCQkJCQkJCQkgIGZrX3JlbCwgaWR4X3Jl bCk7CisJfQorCUFzc2VydChyaWluZm8tPmZwbWV0YSk7CisJcmlfRXh0cmFjdFZhbHVlcyhma19y ZWwsIG5ld3Nsb3QsIHJpaW5mbywgZmFsc2UsIHBrX3ZhbHMsIHBrX251bGxzKTsKKwlidWlsZF9p bmRleF9zY2Fua2V5cyhyaWluZm8sIGlkeF9yZWwsIHBrX3ZhbHMsIHBrX251bGxzLCBza2V5KTsK KwogCXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShwa19yZWwsIE5VTEwpOwogCXNjYW5kZXNjID0g aW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwKIAkJCQkJCQkgICBzbmFwc2hvdCwgTlVM TCwKIAkJCQkJCQkgICByaWluZm8tPm5rZXlzLCAwLAogCQkJCQkJCSAgIFNPX05PTkUpOwogCi0J aWYgKHJpaW5mby0+ZnBtZXRhID09IE5VTEwpCi0JCXJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFk YXRhKChSSV9Db25zdHJhaW50SW5mbyAqKSByaWluZm8sCi0JCQkJCQkJCQkgIGZrX3JlbCwgaWR4 X3JlbCk7Ci0JQXNzZXJ0KHJpaW5mby0+ZnBtZXRhKTsKLQogCUdldFVzZXJJZEFuZFNlY0NvbnRl eHQoJnNhdmVkX3VzZXJpZCwgJnNhdmVkX3NlY19jb250ZXh0KTsKIAlTZXRVc2VySWRBbmRTZWND b250ZXh0KFJlbGF0aW9uR2V0Rm9ybShwa19yZWwpLT5yZWxvd25lciwKIAkJCQkJCSAgIHNhdmVk X3NlY19jb250ZXh0IHwKQEAgLTI3MzIsOCArMjc0OCw2IEBAIHJpX0Zhc3RQYXRoQ2hlY2soY29u c3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJCSAgIFNFQ1VSSVRZX05PRk9SQ0Vf UkxTKTsKIAlyaV9DaGVja1Blcm1pc3Npb25zKHBrX3JlbCk7CiAKLQlyaV9FeHRyYWN0VmFsdWVz KGZrX3JlbCwgbmV3c2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOwotCWJ1 aWxkX2luZGV4X3NjYW5rZXlzKHJpaW5mbywgaWR4X3JlbCwgcGtfdmFscywgcGtfbnVsbHMsIHNr ZXkpOwogCWZvdW5kID0gcmlfRmFzdFBhdGhQcm9iZU9uZShwa19yZWwsIGlkeF9yZWwsIHNjYW5k ZXNjLCBzbG90LAogCQkJCQkJCQlzbmFwc2hvdCwgcmlpbmZvLCBza2V5LCByaWluZm8tPm5rZXlz KTsKIAlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNhdmVkX3VzZXJpZCwgc2F2ZWRfc2VjX2NvbnRl eHQpOwotLSAKMi40Ny4zCgo= --000000000000ec9cdb064e50ecc0 Content-Type: application/octet-stream; name="v13-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Disposition: attachment; filename="v13-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnekw36q1 RnJvbSAyZDM5YThjYjkwYzE2ZDU4NmQ1ZmQzZjBkNmY4ODBkZGJiNTc4MjQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMzEgTWFyIDIwMjYgMTg6MjI6MjMgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MyAyLzJdIEJhdGNoIEZLIHJvd3MgYW5kIHVzZSBTS19TRUFSQ0hBUlJBWSBmb3IgZmFzdC1wYXRo IEZLCiBwcm9iZXMKCkluc3RlYWQgb2YgcHJvYmluZyB0aGUgUEsgaW5kZXggb24gZWFjaCB0cmln Z2VyIGludm9jYXRpb24sIGJ1ZmZlcgpGSyByb3dzIGluIGEgbmV3IHBlci1jb25zdHJhaW50IGNh Y2hlIGVudHJ5IChSSV9GYXN0UGF0aEVudHJ5KSBhbmQKZmx1c2ggdGhlbSBhcyBhIGJhdGNoLiAg Q29tYmluZWQgd2l0aCB0aGUgZmFzdCBwYXRoIGludHJvZHVjZWQgaW4KdGhlIHByZXZpb3VzIGNv bW1pdCwgYnVsayBGSyBpbnNlcnRzIGFyZSB+Mi45eCBmYXN0ZXIgKGludCBQSyAvCmludCBGSywg MU0gcm93cywgUEsgdGFibGUgYW5kIGluZGV4IGNhY2hlZCBpbiBtZW1vcnkpLgoKT24gZWFjaCB0 cmlnZ2VyIGludm9jYXRpb24sIHRoZSBuZXcgcmlfRmFzdFBhdGhCYXRjaEFkZCgpIGJ1ZmZlcnMK dGhlIEZLIHJvdyBpbiBSSV9GYXN0UGF0aEVudHJ5LiAgV2hlbiB0aGUgYnVmZmVyIGZpbGxzICg2 NCByb3dzKQpvciB0aGUgdHJpZ2dlci1maXJpbmcgY3ljbGUgZW5kcywgdGhlIG5ldyByaV9GYXN0 UGF0aEJhdGNoRmx1c2goKQpwcm9iZXMgdGhlIGluZGV4IGZvciBhbGwgYnVmZmVyZWQgcm93cywg c2hhcmluZyBhIHNpbmdsZQpDb21tYW5kQ291bnRlckluY3JlbWVudCwgc25hcHNob3QsIHBlcm1p c3Npb24gY2hlY2ssIGFuZCBzZWN1cml0eQpjb250ZXh0IHN3aXRjaCBhY3Jvc3MgdGhlIGJhdGNo LCByYXRoZXIgdGhhbiByZXBlYXRpbmcgZWFjaCBwZXIgcm93CmFzIHRoZSBTUEkgcGF0aCBkb2Vz LiAgUGVyLWZsdXNoIENDSSBpcyBzYWZlIGJlY2F1c2UgYWxsIEFGVEVSCnRyaWdnZXJzIGZvciB0 aGUgYnVmZmVyZWQgcm93cyBoYXZlIGFscmVhZHkgZmlyZWQgYnkgZmx1c2ggdGltZS4KCkZvciBz aW5nbGUtY29sdW1uIGZvcmVpZ24ga2V5cywgdGhlIGZsdXNoIGJ1aWxkcyBhbiBBcnJheVR5cGUg ZnJvbQp0aGUgYnVmZmVyZWQgRksgdmFsdWVzIChjYXN0aW5nIHRvIHRoZSBQSy1zaWRlIHR5cGUg aWYgbmVlZGVkKSBhbmQKY29uc3RydWN0cyBhIHNjYW4ga2V5IHdpdGggdGhlIFNLX1NFQVJDSEFS UkFZIGZsYWcuICBUaGUgaW5kZXggQU0Kc29ydHMgYW5kIGRlZHVwbGljYXRlcyB0aGUgYXJyYXkg aW50ZXJuYWxseSwgdGhlbiB3YWxrcyBtYXRjaGluZwpsZWFmIHBhZ2VzIGluIG9uZSBvcmRlcmVk IHRyYXZlcnNhbCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgZnJvbSB0aGUKcm9vdCBvbmNlIHBlciBy b3cuICBBIG1hdGNoZWRbXSBiaXRtYXAgdHJhY2tzIHdoaWNoIGJhdGNoIGl0ZW1zCndlcmUgc2F0 aXNmaWVkOyB0aGUgZmlyc3QgdW5tYXRjaGVkIGl0ZW0gaXMgcmVwb3J0ZWQgYXMgYQp2aW9sYXRp b24uICBNdWx0aS1jb2x1bW4gZm9yZWlnbiBrZXlzIGZhbGwgYmFjayB0byBwZXItcm93IHByb2Jp bmcKdmlhIHRoZSBuZXcgcmlfRmFzdFBhdGhGbHVzaExvb3AoKS4KCkZLIHR1cGxlcyBhcmUgbWF0 ZXJpYWxpemVkIHZpYSBFeGVjQ29weVNsb3RIZWFwVHVwbGUoKSBpbnRvIGEgbmV3CnB1cnBvc2Ut c3BlY2lmaWMgbWVtb3J5IGNvbnRleHQgKGZsdXNoX2N4dCksIGNoaWxkIG9mClRvcFRyYW5zYWN0 aW9uQ29udGV4dCwgd2hpY2ggaXMgYWxzbyB1c2VkIGZvciBwZXItZmx1c2ggdHJhbnNpZW50Cndv cms6IGNhc3QgcmVzdWx0cywgdGhlIHNlYXJjaCBhcnJheSwgYW5kIGluZGV4IHNjYW4gYWxsb2Nh dGlvbnMuCkl0IGlzIHJlc2V0IGFmdGVyIGVhY2ggZmx1c2ggYW5kIGRlbGV0ZWQgaW4gdGVhcmRv d24uCgpUaGUgUEsgcmVsYXRpb24sIGluZGV4LCB0dXBsZSBzbG90cywgYW5kIGZhc3QtcGF0aCBt ZXRhZGF0YSBhcmUKY2FjaGVkIGluIFJJX0Zhc3RQYXRoRW50cnkgYWNyb3NzIHRyaWdnZXIgaW52 b2NhdGlvbnMgd2l0aGluIGEKdHJpZ2dlci1maXJpbmcgYmF0Y2gsIGF2b2lkaW5nIHJlcGVhdGVk IG9wZW4vY2xvc2Ugb3ZlcmhlYWQuICBUaGUKc25hcHNob3QgYW5kIEluZGV4U2NhbkRlc2MgYXJl IHRha2VuIGZyZXNoIHBlciBmbHVzaC4KCnJpX0Zhc3RQYXRoRW5kQmF0Y2goKSBmbHVzaGVzIGFu eSBwYXJ0aWFsIGJhdGNoIGJlZm9yZSB0ZWFyaW5nCmRvd24gY2FjaGVkIHJlc291cmNlcy4gIFNp bmNlIHRoZSBGSyByZWxhdGlvbiBtYXkgYWxyZWFkeSBiZQpjbG9zZWQgYnkgZmx1c2ggdGltZSAo ZS5nLiBmb3IgZGVmZXJyZWQgY29uc3RyYWludHMgYXQgQ09NTUlUKSwKaXQgcmVvcGVucyB0aGUg cmVsYXRpb24gdXNpbmcgZW50cnktPmZrX3JlbGlkIGlmIG5lZWRlZC4KClRoZSBleGlzdGluZyBB TFRFUiBUQUJMRSB2YWxpZGF0aW9uIHBhdGggYnlwYXNzZXMgYmF0Y2hpbmcgYW5kCmNvbnRpbnVl cyB0byBjYWxsIHJpX0Zhc3RQYXRoQ2hlY2soKSBkaXJlY3RseSBwZXIgcm93LgoKTGlmZWN5Y2xl IG1hbmFnZW1lbnQgZm9yIFJJX0Zhc3RQYXRoRW50cnkgcmVsaWVzIG9uIHRocmVlIG5ldwptZWNo YW5pc21zOgoKICAtIEFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2s6IEEgbmV3IGdlbmVyYWwtcHVy cG9zZSBjYWxsYmFjawogICAgbWVjaGFuaXNtIGluIHRyaWdnZXIuYy4gIENhbGxiYWNrcyByZWdp c3RlcmVkIHZpYQogICAgUmVnaXN0ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrKCkgZmlyZSBh dCB0aGUgZW5kIG9mIGVhY2gKICAgIHRyaWdnZXItZmlyaW5nIGJhdGNoIChBZnRlclRyaWdnZXJF bmRRdWVyeSBmb3IgaW1tZWRpYXRlCiAgICBjb25zdHJhaW50cywgQWZ0ZXJUcmlnZ2VyRmlyZURl ZmVycmVkIGF0IENPTU1JVCwgYW5kCiAgICBBZnRlclRyaWdnZXJTZXRTdGF0ZSBmb3IgU0VUIENP TlNUUkFJTlRTIElNTUVESUFURSkuICBUaGUgUkkKICAgIGNvZGUgcmVnaXN0ZXJzIHJpX0Zhc3RQ YXRoRW5kQmF0Y2ggYXMgYSBiYXRjaCBjYWxsYmFjay4KCiAgLSBCYXRjaCBjYWxsYmFja3Mgb25s eSBmaXJlIGF0IHRoZSBvdXRlcm1vc3QgcXVlcnkgbGV2ZWwKICAgIChjaGVja2VkIGluc2lkZSBG aXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MpLCBzbyBuZXN0ZWQKICAgIHF1ZXJpZXMgZnJv bSBTUEkgaW5zaWRlIG90aGVyIEFGVEVSIHRyaWdnZXJzIGRvIG5vdCB0ZWFyIGRvd24KICAgIHRo ZSBjYWNoZSBtaWQtYmF0Y2guCgogIC0gWGFjdENhbGxiYWNrOiByaV9GYXN0UGF0aFhhY3RDYWxs YmFjayBOVUxMcyB0aGUgc3RhdGljIGNhY2hlCiAgICBwb2ludGVyIGF0IHRyYW5zYWN0aW9uIGVu ZCwgaGFuZGxpbmcgdGhlIGFib3J0IHBhdGggd2hlcmUgdGhlCiAgICBiYXRjaCBjYWxsYmFjayBu ZXZlciBmaXJlZC4KCiAgLSBTdWJYYWN0Q2FsbGJhY2s6IHJpX0Zhc3RQYXRoU3ViWGFjdENhbGxi YWNrIE5VTExzIHRoZSBzdGF0aWMKICAgIGNhY2hlIHBvaW50ZXIgb24gc3VidHJhbnNhY3Rpb24g YWJvcnQsIHByZXZlbnRpbmcgdGhlIGJhdGNoCiAgICBjYWxsYmFjayBmcm9tIGFjY2Vzc2luZyBh bHJlYWR5LXJlbGVhc2VkIHJlc291cmNlcy4KCiAgLSBBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZl KCk6IEEgbmV3IGV4cG9ydGVkIGFjY2Vzc29yIHRoYXQKICAgIHJldHVybnMgdHJ1ZSB3aGVuIGFm dGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPj0gMC4gIER1cmluZwogICAgQUxURVIgVEFCTEUgLi4u IEFERCBGT1JFSUdOIEtFWSB2YWxpZGF0aW9uLCBSSSB0cmlnZ2VycyBhcmUKICAgIGNhbGxlZCBk aXJlY3RseSBvdXRzaWRlIHRoZSBhZnRlci10cmlnZ2VyIGZyYW1ld29yaywgc28gYmF0Y2gKICAg IGNhbGxiYWNrcyB3b3VsZCBuZXZlciBmaXJlLiAgVGhlIGZhc3QtcGF0aCBjb2RlIHVzZXMgdGhp cyB0bwogICAgZmFsbCBiYWNrIHRvIHRoZSBub24tY2FjaGVkIHBlci1pbnZvY2F0aW9uIHBhdGgg aW4gdGhhdAogICAgY29udGV4dC4KCkF1dGhvcjogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5 QGdtYWlsLmNvbT4KQ28tYXV0aG9yZWQtYnk6IEp1bndhbmcgWmhhbyA8emhqd3BrdUBnbWFpbC5j b20+ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRyaXN0YW4ueWltQGdtYWlsLmNvbT4KVGVzdGVk LWJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQStIaXdxRjRDMHdzM2NPK3o1Y0xrUHV2d25Bd2tTcDdzZnZnR2ozeVE9TGk2 S05NcUFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMg ICAgICAgICAgICB8IDEwNSArKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMu YyAgICAgICB8IDU5MiArKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9jb21tYW5k cy90cmlnZ2VyLmggICAgICAgICAgICB8ICAxOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2ZvcmVpZ25fa2V5Lm91dCB8IDEyNiArKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWln bl9rZXkuc3FsICAgICAgfCAxMTggKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgIHwgICAzICsKIDYgZmlsZXMgY2hhbmdlZCwgOTU4IGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dl ci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCmluZGV4IDY1OTY4NDNhOGQ4Li40 YmMzMWNhYmZmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYwpAQCAtMzg5Myw2ICszODkzLDggQEAg dHlwZWRlZiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc0RhdGEKIAkvKiBwZXItc3VidHJhbnNhY3Rpb24t bGV2ZWwgZGF0YTogKi8KIAlBZnRlclRyaWdnZXJzVHJhbnNEYXRhICp0cmFuc19zdGFjazsJLyog YXJyYXkgb2Ygc3RydWN0cyBzaG93biBiZWxvdyAqLwogCWludAkJCW1heHRyYW5zZGVwdGg7CS8q IGFsbG9jYXRlZCBsZW4gb2YgYWJvdmUgYXJyYXkgKi8KKworCUxpc3QJICAgKmJhdGNoX2NhbGxi YWNrczsJLyogTGlzdCBvZiBBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0gKi8KIH0gQWZ0ZXJUcmln Z2Vyc0RhdGE7CiAKIHN0cnVjdCBBZnRlclRyaWdnZXJzUXVlcnlEYXRhCkBAIC0zOTI5LDYgKzM5 MzEsMTMgQEAgc3RydWN0IEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEKIAlUdXBsZVRhYmxlU2xvdCAq c3RvcmVzbG90OwkvKiBmb3IgY29udmVydGluZyB0byB0dXBsZXN0b3JlJ3MgZm9ybWF0ICovCiB9 OwogCisvKiBFbnRyeSBpbiBhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyAqLwordHlwZWRl ZiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtCit7CisJQWZ0ZXJUcmlnZ2VyQmF0Y2hD YWxsYmFjayBjYWxsYmFjazsKKwl2b2lkCSAgICphcmc7Cit9IEFmdGVyVHJpZ2dlckNhbGxiYWNr SXRlbTsKKwogc3RhdGljIEFmdGVyVHJpZ2dlcnNEYXRhIGFmdGVyVHJpZ2dlcnM7CiAKIHN0YXRp YyB2b2lkIEFmdGVyVHJpZ2dlckV4ZWN1dGUoRVN0YXRlICplc3RhdGUsCkBAIC0zOTY0LDYgKzM5 NzMsNyBAQCBzdGF0aWMgU2V0Q29uc3RyYWludFN0YXRlIFNldENvbnN0cmFpbnRTdGF0ZUFkZEl0 ZW0oU2V0Q29uc3RyYWludFN0YXRlIHN0YXRlLAogCQkJCQkJCQkJCQkJCU9pZCB0Z29pZCwgYm9v bCB0Z2lzZGVmZXJyZWQpOwogc3RhdGljIHZvaWQgY2FuY2VsX3ByaW9yX3N0bXRfdHJpZ2dlcnMo T2lkIHJlbGlkLCBDbWRUeXBlIGNtZFR5cGUsIGludCB0Z2V2ZW50KTsKIAorc3RhdGljIHZvaWQg RmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKHZvaWQpOwogCiAvKgogICogR2V0IHRoZSBG RFcgdHVwbGVzdG9yZSBmb3IgdGhlIGN1cnJlbnQgdHJpZ2dlciBxdWVyeSBsZXZlbCwgY3JlYXRp bmcgaXQKQEAgLTUwODksNiArNTA5OSw3IEBAIEFmdGVyVHJpZ2dlckJlZ2luWGFjdCh2b2lkKQog CSAqLwogCWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2NvdW50ZXIgPSAoQ29tbWFuZElkKSAxOwkvKiBt dXN0bid0IGJlIDAgKi8KIAlhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoID0gLTE7CisJYWZ0ZXJU cmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MgPSBOSUw7CiAKIAkvKgogCSAqIFZlcmlmeSB0aGF0IHRo ZXJlIGlzIG5vIGxlZnRvdmVyIHN0YXRlIHJlbWFpbmluZy4gIElmIHRoZXNlIGFzc2VydGlvbnMK QEAgLTUyMTAsNiArNTIyMSwxNSBAQCBBZnRlclRyaWdnZXJFbmRRdWVyeShFU3RhdGUgKmVzdGF0 ZSkKIAkJCWJyZWFrOwogCX0KIAorCS8qCisJICogRmlyZSBiYXRjaCBjYWxsYmFja3MgYmVmb3Jl IHJlbGVhc2luZyBxdWVyeS1sZXZlbCBzdG9yYWdlIGFuZCBiZWZvcmUKKwkgKiBkZWNyZW1lbnRp bmcgcXVlcnlfZGVwdGguICBDYWxsYmFja3MgbWF5IGRvIHJlYWwgd29yayAoaW5kZXggcHJvYmVz LAorCSAqIGVycm9yIHJlcG9ydGluZykgYW5kIHJlbHkgb24gcXVlcnlfZGVwdGggc3RpbGwgcmVm bGVjdGluZyB0aGUgY3VycmVudAorCSAqIGJhdGNoIGxldmVsIHNvIHRoYXQgbmVzdGVkIGNhbGxz IGZyb20gU1BJIGluc2lkZSBBRlRFUiB0cmlnZ2VycyBhcmUKKwkgKiBjb3JyZWN0bHkgc3VwcHJl c3NlZCBieSBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MncyBkZXB0aCBndWFyZC4KKwkg Ki8KKwlGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoKTsKKwogCS8qIFJlbGVhc2UgcXVl cnktbGV2ZWwtbG9jYWwgc3RvcmFnZSwgaW5jbHVkaW5nIHR1cGxlc3RvcmVzIGlmIGFueSAqLwog CUFmdGVyVHJpZ2dlckZyZWVRdWVyeSgmYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9zdGFja1thZnRlclRy aWdnZXJzLnF1ZXJ5X2RlcHRoXSk7CiAKQEAgLTUzMTcsNiArNTMzNyw5IEBAIEFmdGVyVHJpZ2dl ckZpcmVEZWZlcnJlZCh2b2lkKQogCQkJYnJlYWs7CQkJCS8qIGFsbCBmaXJlZCAqLwogCX0KIAor CS8qIEZsdXNoIGFueSBmYXN0LXBhdGggYmF0Y2hlcyBhY2N1bXVsYXRlZCBieSB0aGUgdHJpZ2dl cnMganVzdCBmaXJlZC4gKi8KKwlGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoKTsKKwog CS8qCiAJICogV2UgZG9uJ3QgYm90aGVyIGZyZWVpbmcgdGhlIGV2ZW50IGxpc3QsIHNpbmNlIGl0 IHdpbGwgZ28gYXdheSBhbnl3YXkKIAkgKiAoYW5kIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB2aWEg cGZyZWUpIGluIEFmdGVyVHJpZ2dlckVuZFhhY3QuCkBAIC02MDU5LDYgKzYwODIsMTEgQEAgQWZ0 ZXJUcmlnZ2VyU2V0U3RhdGUoQ29uc3RyYWludHNTZXRTdG10ICpzdG10KQogCQkJCWJyZWFrOwkJ CS8qIGFsbCBmaXJlZCAqLwogCQl9CiAKKwkJLyoKKwkJICogRmx1c2ggYW55IGZhc3QtcGF0aCBi YXRjaGVzIGFjY3VtdWxhdGVkIGJ5IHRoZSB0cmlnZ2VycyBqdXN0IGZpcmVkLgorCQkgKi8KKwkJ RmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKCk7CisKIAkJaWYgKHNuYXBzaG90X3NldCkK IAkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJfQpAQCAtNjc1NSwzICs2NzgzLDgwIEBAIGNoZWNr X21vZGlmaWVkX3ZpcnR1YWxfZ2VuZXJhdGVkKFR1cGxlRGVzYyB0dXBkZXNjLCBIZWFwVHVwbGUg dHVwbGUpCiAKIAlyZXR1cm4gdHVwbGU7CiB9CisKKy8qCisgKiBSZWdpc3RlckFmdGVyVHJpZ2dl ckJhdGNoQ2FsbGJhY2sKKyAqCQlSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVu IHRoZSBjdXJyZW50IHRyaWdnZXItZmlyaW5nCisgKgkJYmF0Y2ggY29tcGxldGVzLgorICoKKyAq IE11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgdHJpZ2dlciBmdW5jdGlvbidzIGV4ZWN1dGlv biBjb250ZXh0CisgKiAoaS5lLiwgd2hpbGUgYWZ0ZXJUcmlnZ2VycyBzdGF0ZSBpcyBhY3RpdmUp LgorICoKKyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIGNsZWFyZWQgYWZ0ZXIgaW52b2NhdGlvbiwg c28gdGhlIGNhbGxlciBtdXN0CisgKiByZS1yZWdpc3RlciBmb3IgZWFjaCBuZXcgYmF0Y2ggaWYg bmVlZGVkLgorICovCit2b2lkCitSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2soQWZ0 ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCQkJICB2b2lkICphcmcpCit7 CisJQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtICppdGVtOworCU1lbW9yeUNvbnRleHQgb2xkY3h0 OworCisJLyoKKwkgKiBBbGxvY2F0ZSBpbiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgc28gdGhlIGl0 ZW0gc3Vydml2ZXMgZm9yIHRoZSBkdXJhdGlvbgorCSAqIG9mIHRoZSBiYXRjaCwgd2hpY2ggbWF5 IHNwYW4gbXVsdGlwbGUgdHJpZ2dlciBpbnZvY2F0aW9ucy4KKwkgKgorCSAqIE11c3QgYmUgY2Fs bGVkIHdoaWxlIGFmdGVyVHJpZ2dlcnMgaXMgYWN0aXZlIChxdWVyeV9kZXB0aCA+PSAwKTsKKwkg KiBjYWxsYmFja3MgcmVnaXN0ZXJlZCBvdXRzaWRlIGEgdHJpZ2dlci1maXJpbmcgY29udGV4dCB3 b3VsZCBuZXZlciBmaXJlLgorCSAqLworCUFzc2VydChhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRo ID49IDApOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNv bnRleHQpOworCWl0ZW0gPSBwYWxsb2Moc2l6ZW9mKEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSkp OworCWl0ZW0tPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJaXRlbS0+YXJnID0gYXJnOworCWFmdGVy VHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0KKwkJbGFwcGVuZChhZnRlclRyaWdnZXJzLmJhdGNo X2NhbGxiYWNrcywgaXRlbSk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisK Ky8qCisgKiBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MKKyAqCQlJbnZva2UgYW5kIGNs ZWFyIGFsbCByZWdpc3RlcmVkIGJhdGNoIGNhbGxiYWNrcy4KKyAqCisgKiBPbmx5IGZpcmVzIGF0 IHRoZSBvdXRlcm1vc3QgcXVlcnkgbGV2ZWwgKHF1ZXJ5X2RlcHRoID09IDApIG9yIGZyb20KKyAq IHRvcC1sZXZlbCBvcGVyYXRpb25zIChxdWVyeV9kZXB0aCA9PSAtMSwgZS5nLiBBZnRlclRyaWdn ZXJGaXJlRGVmZXJyZWQKKyAqIGF0IENPTU1JVCkuICBOZXN0ZWQgcXVlcmllcyBmcm9tIFNQSSBp bnNpZGUgQUZURVIgdHJpZ2dlcnMgcnVuIGF0CisgKiBkZXB0aCA+IDAgYW5kIG11c3Qgbm90IHRl YXIgZG93biByZXNvdXJjZXMgdGhlIG91dGVyIGJhdGNoIHN0aWxsIG5lZWRzLgorICovCitzdGF0 aWMgdm9pZAorRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKHZvaWQpCit7CisJTGlzdENl bGwgICAqbGM7CisKKwlpZiAoYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA+IDApCisJCXJldHVy bjsKKworCWZvcmVhY2gobGMsIGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzKQorCXsKKwkJ QWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtICppdGVtID0gbGZpcnN0KGxjKTsKKworCQlpdGVtLT5j YWxsYmFjayhpdGVtLT5hcmcpOworCX0KKworCWxpc3RfZnJlZV9kZWVwKGFmdGVyVHJpZ2dlcnMu YmF0Y2hfY2FsbGJhY2tzKTsKKwlhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyA9IE5JTDsK K30KKworLyoKKyAqIEFmdGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUKKyAqCQlSZXR1cm5zIHRydWUg aWYgd2UncmUgaW5zaWRlIGEgcXVlcnktbGV2ZWwgdHJpZ2dlciBiYXRjaCB3aGVyZQorICoJCXJl Z2lzdGVyZWQgYmF0Y2ggY2FsbGJhY2tzIHdpbGwgYWN0dWFsbHkgYmUgaW52b2tlZC4KKyAqCisg KiBUaGlzIGlzIGZhbHNlIGR1cmluZyB2YWxpZGF0ZUZvcmVpZ25LZXlDb25zdHJhaW50KCksIHdo aWNoIGNhbGxzCisgKiBSSSB0cmlnZ2VyIGZ1bmN0aW9ucyBkaXJlY3RseSBvdXRzaWRlIHRoZSBh ZnRlci10cmlnZ2VyIGZyYW1ld29yay4KKyAqLworYm9vbAorQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0Fj dGl2ZSh2b2lkKQoreworCXJldHVybiBhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoID49IDA7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCmluZGV4IGQ1NzM0M2Y4NWQ4Li43ZWExNzU1 YjI3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTE5Niw2ICsxOTYsNDgg QEAgdHlwZWRlZiBzdHJ1Y3QgUklfQ29tcGFyZUhhc2hFbnRyeQogCUZtZ3JJbmZvCWNhc3RfZnVu Y19maW5mbzsJLyogaW4gY2FzZSB3ZSBtdXN0IGNvZXJjZSBpbnB1dCAqLwogfSBSSV9Db21wYXJl SGFzaEVudHJ5OwogCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgRksgcm93cyBidWZmZXJlZCBi ZWZvcmUgZmx1c2hpbmcuCisgKgorICogTGFyZ2VyIGJhdGNoZXMgYW1vcnRpemUgcGVyLWZsdXNo IG92ZXJoZWFkIGFuZCBsZXQgdGhlIFNLX1NFQVJDSEFSUkFZCisgKiBwYXRoIHdhbGsgbW9yZSBs ZWFmIHBhZ2VzIGluIGEgc2luZ2xlIHNvcnRlZCB0cmF2ZXJzYWwuICBCdXQgZWFjaAorICogYnVm ZmVyZWQgcm93IGlzIGEgbWF0ZXJpYWxpemVkIEhlYXBUdXBsZSBpbiBmbHVzaF9jeHQsIGFuZCB0 aGUgbWF0Y2hlZFtdCisgKiBzY2FuIGluIHJpX0Zhc3RQYXRoRmx1c2hBcnJheSgpIGlzIE8oYmF0 Y2hfc2l6ZSkgcGVyIGluZGV4IG1hdGNoLgorICogQmVuY2htYXJraW5nIHNob3dlZCBsaXR0bGUg ZGlmZmVyZW5jZSBiZXR3ZWVuIDE2IGFuZCA2NCwgd2l0aCAyNTYKKyAqIGNvbnNpc3RlbnRseSBz bG93ZXIuICA2NCBpcyBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAqLworI2RlZmluZSBSSV9GQVNU UEFUSF9CQVRDSF9TSVpFCTY0CisKKy8qCisgKiBSSV9GYXN0UGF0aEVudHJ5CisgKgkJUGVyLWNv bnN0cmFpbnQgY2FjaGUgb2YgcmVzb3VyY2VzIG5lZWRlZCBieSByaV9GYXN0UGF0aEJhdGNoRmx1 c2goKS4KKyAqCisgKiBPbmUgZW50cnkgcGVyIGNvbnN0cmFpbnQsIGtleWVkIGJ5IHBnX2NvbnN0 cmFpbnQgT0lELiAgQ3JlYXRlZCBsYXppbHkKKyAqIGJ5IHJpX0Zhc3RQYXRoR2V0RW50cnkoKSBv biBmaXJzdCB1c2Ugd2l0aGluIGEgdHJpZ2dlci1maXJpbmcgYmF0Y2gKKyAqIGFuZCB0b3JuIGRv d24gYnkgcmlfRmFzdFBhdGhUZWFyZG93bigpIGF0IGJhdGNoIGVuZC4KKyAqCisgKiBGSyB0dXBs ZXMgYXJlIGJ1ZmZlcmVkIGluIGJhdGNoW10gYWNyb3NzIHRyaWdnZXIgaW52b2NhdGlvbnMgYW5k CisgKiBmbHVzaGVkIHdoZW4gdGhlIGJ1ZmZlciBmaWxscyBvciB0aGUgYmF0Y2ggZW5kcy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgUklfRmFzdFBhdGhFbnRyeQoreworCU9pZAkJCWNvbm9pZDsJCQkv KiBoYXNoIGtleTogcGdfY29uc3RyYWludCBPSUQgKi8KKwlPaWQJCQlma19yZWxpZDsJCS8qIGZv ciByaV9GYXN0UGF0aEVuZEJhdGNoKCkgKi8KKwlSZWxhdGlvbglwa19yZWw7CisJUmVsYXRpb24J aWR4X3JlbDsKKwlUdXBsZVRhYmxlU2xvdCAqcGtfc2xvdDsKKwlUdXBsZVRhYmxlU2xvdCAqZmtf c2xvdDsKKwlNZW1vcnlDb250ZXh0IGZsdXNoX2N4dDsJLyogc2hvcnQtbGl2ZWQgY29udGV4dCBm b3IgcGVyLWZsdXNoIHdvcmsgKi8KKworCS8qCisJICogVE9ETzogYmF0Y2hbXSBpcyBIZWFwVHVw bGVbXSBiZWNhdXNlIHRoZSBBRlRFUiB0cmlnZ2VyIG1hY2hpbmVyeQorCSAqIGN1cnJlbnRseSBw YXNzZXMgdHVwbGVzIGFzIEhlYXBUdXBsZXMuICBPbmNlIHRyaWdnZXIgaW5mcmFzdHJ1Y3R1cmUg aXMKKwkgKiBzbG90aWZpZWQsIHRoaXMgc2hvdWxkIHVzZSBhIHNsb3QgYXJyYXkgb3Igd2hhdGV2 ZXIgYmF0Y2hlZCB0dXBsZQorCSAqIHN0b3JhZ2UgYWJzdHJhY3Rpb24gZXhpc3RzIGF0IHRoYXQg cG9pbnQgdG8gYmUgVEFNLWFnbm9zdGljLgorCSAqLworCUhlYXBUdXBsZQliYXRjaFtSSV9GQVNU UEFUSF9CQVRDSF9TSVpFXTsKKwlpbnQJCQliYXRjaF9jb3VudDsKK30gUklfRmFzdFBhdGhFbnRy eTsKIAogLyoKICAqIExvY2FsIGRhdGEKQEAgLTIwNSw2ICsyNDcsOCBAQCBzdGF0aWMgSFRBQiAq cmlfcXVlcnlfY2FjaGUgPSBOVUxMOwogc3RhdGljIEhUQUIgKnJpX2NvbXBhcmVfY2FjaGUgPSBO VUxMOwogc3RhdGljIGRjbGlzdF9oZWFkIHJpX2NvbnN0cmFpbnRfY2FjaGVfdmFsaWRfbGlzdDsK IAorc3RhdGljIEhUQUIgKnJpX2Zhc3RwYXRoX2NhY2hlID0gTlVMTDsKK3N0YXRpYyBib29sIHJp X2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKIAogLyoKICAqIExvY2FsIGZ1 bmN0aW9uIHByb3RvdHlwZXMKQEAgLTI1NSw2ICsyOTksMTYgQEAgc3RhdGljIGJvb2wgcmlfUGVy Zm9ybUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJCQkJYm9vbCBk ZXRlY3ROZXdSb3dzLCBpbnQgZXhwZWN0X09LKTsKIHN0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQ2hl Y2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJCQkgUmVsYXRpb24gZmtf cmVsLCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEJh dGNoQWRkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCVJlbGF0aW9u IGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpOworc3RhdGljIGludAlyaV9GYXN0UGF0 aEZsdXNoQXJyYXkoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZr X3Nsb3QsCisJCQkJCQkJCSAgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRp b24gZmtfcmVsLAorCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LCBJbmRleFNjYW5EZXNjIHNj YW5kZXNjKTsKK3N0YXRpYyBpbnQJcmlfRmFzdFBhdGhGbHVzaExvb3AoUklfRmFzdFBhdGhFbnRy eSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCisJCQkJCQkJCSBjb25zdCBSSV9D b25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwsCisJCQkJCQkJCSBTbmFwc2hv dCBzbmFwc2hvdCwgSW5kZXhTY2FuRGVzYyBzY2FuZGVzYyk7CitzdGF0aWMgdm9pZCByaV9GYXN0 UGF0aEJhdGNoRmx1c2goUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwKKwkJCQkJCQkJICBSZWxh dGlvbiBma19yZWwpOwogc3RhdGljIGJvb2wgcmlfRmFzdFBhdGhQcm9iZU9uZShSZWxhdGlvbiBw a19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCiAJCQkJCQkJCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2Ms IFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwgY29uc3Qg UklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKQEAgLTI3Nyw2ICszMzEsMTAgQEAgcGdfbm9yZXR1 cm4gc3RhdGljIHZvaWQgcmlfUmVwb3J0VmlvbGF0aW9uKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaWluZm8sCiAJCQkJCQkJCQkJICAgUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBma19yZWws CiAJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnZpb2xhdG9yc2xvdCwgVHVwbGVEZXNjIHR1 cGRlc2MsCiAJCQkJCQkJCQkJICAgaW50IHF1ZXJ5bm8sIGJvb2wgaXNfcmVzdHJpY3QsIGJvb2wg cGFydGdvbmUpOworc3RhdGljIFJJX0Zhc3RQYXRoRW50cnkgKnJpX0Zhc3RQYXRoR2V0RW50cnko Y29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJCQkJCQkJIFJlbGF0aW9uIGZr X3JlbCk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEVuZEJhdGNoKHZvaWQgKmFyZyk7CitzdGF0 aWMgdm9pZCByaV9GYXN0UGF0aFRlYXJkb3duKHZvaWQpOwogCiAKIC8qCkBAIC0zODcsMTIgKzQ0 NSwyMiBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAkgKiBsb2NrLiAg VGhpcyBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byB0aGUgU1BJIHBhdGggYmVsb3cgYnV0 IGF2b2lkcwogCSAqIHRoZSBwZXItcm93IGV4ZWN1dG9yIG92ZXJoZWFkLgogCSAqCi0JICogcmlf RmFzdFBhdGhDaGVjaygpIHJlcG9ydHMgdGhlIHZpb2xhdGlvbiBpdHNlbGYgKHZpYSBlcmVwb3J0 KSBpZiBubwotCSAqIG1hdGNoaW5nIFBLIHJvdyBpcyBmb3VuZCwgc28gaXQgb25seSByZXR1cm5z IG9uIHN1Y2Nlc3MuCisJICogcmlfRmFzdFBhdGhCYXRjaEFkZCgpIGFuZCByaV9GYXN0UGF0aENo ZWNrKCkgcmVwb3J0IHRoZSB2aW9sYXRpb24KKwkgKiB0aGVtc2VsdmVzIGlmIG5vIG1hdGNoaW5n IFBLIHJvdyBpcyBmb3VuZCwgc28gdGhleSBvbmx5IHJldHVybiBvbgorCSAqIHN1Y2Nlc3MuCiAJ ICovCiAJaWYgKHJpX2Zhc3RwYXRoX2lzX2FwcGxpY2FibGUocmlpbmZvKSkKIAl7Ci0JCXJpX0Zh c3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWwsIG5ld3Nsb3QpOworCQlpZiAoQWZ0ZXJUcmlnZ2Vy QmF0Y2hJc0FjdGl2ZSgpKQorCQl7CisJCQkvKiBCYXRjaGVkIHBhdGg6IGJ1ZmZlciBhbmQgcHJv YmUgaW4gZ3JvdXBzICovCisJCQlyaV9GYXN0UGF0aEJhdGNoQWRkKHJpaW5mbywgZmtfcmVsLCBu ZXdzbG90KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEFMVEVSIFRBQkxFIHZhbGlkYXRpb246 IHBlci1yb3csIG5vIGNhY2hlICovCisJCQlyaV9GYXN0UGF0aENoZWNrKHJpaW5mbywgZmtfcmVs LCBuZXdzbG90KTsKKwkJfQogCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCX0KIApA QCAtMjY5MiwxMCArMjc2MCwxNCBAQCByaV9QZXJmb3JtQ2hlY2soY29uc3QgUklfQ29uc3RyYWlu dEluZm8gKnJpaW5mbywKIAogLyoKICAqIHJpX0Zhc3RQYXRoQ2hlY2sKLSAqCQlQZXJmb3JtIEZL IGV4aXN0ZW5jZSBjaGVjayB2aWEgZGlyZWN0IGluZGV4IHByb2JlLCBieXBhc3NpbmcgU1BJLgor ICoJCVBlcmZvcm0gcGVyIHJvdyBGSyBleGlzdGVuY2UgY2hlY2sgdmlhIGRpcmVjdCBpbmRleCBw cm9iZSwKKyAqCQlieXBhc3NpbmcgU1BJLgogICoKICAqIElmIG5vIG1hdGNoaW5nIFBLIHJvdyBl eGlzdHMsIHJlcG9ydCB0aGUgdmlvbGF0aW9uIHZpYSByaV9SZXBvcnRWaW9sYXRpb24oKSwKICAq IG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9ybWFsbHkuCisgKgorICogTm90ZTog VGhpcyBpcyBvbmx5IHVzZWQgYnkgdGhlIEFMVEVSIFRBQkxFIHZhbGlkYXRpb24gcGF0aC4gT3Ro ZXIgcGF0aHMgdXNlCisgKiByaV9GYXN0UGF0aEJhdGNoQWRkKCkuCiAgKi8KIHN0YXRpYyB2b2lk CiByaV9GYXN0UGF0aENoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCkBAIC0y NzY0LDYgKzI4MzYsMzI1IEBAIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludElu Zm8gKnJpaW5mbywKIAl0YWJsZV9jbG9zZShwa19yZWwsIE5vTG9jayk7CiB9CiAKKy8qCisgKiBy aV9GYXN0UGF0aEJhdGNoQWRkCisgKgkJQnVmZmVyIGEgRksgcm93IGZvciBiYXRjaGVkIHByb2Jp bmcuCisgKgorICogQWRkcyB0aGUgcm93IHRvIHRoZSBiYXRjaCBidWZmZXIuICBXaGVuIHRoZSBi dWZmZXIgaXMgZnVsbCwgZmx1c2hlcyBhbGwKKyAqIGJ1ZmZlcmVkIHJvd3MgYnkgcHJvYmluZyB0 aGUgUEsgaW5kZXguICBBbnkgdmlvbGF0aW9uIGlzIHJlcG9ydGVkCisgKiBpbW1lZGlhdGVseSBk dXJpbmcgdGhlIGZsdXNoIHZpYSByaV9SZXBvcnRWaW9sYXRpb24gKHdoaWNoIGRvZXMgbm90IHJl dHVybikuCisgKgorICogVXNlcyB0aGUgcGVyLWJhdGNoIGNhY2hlIChSSV9GYXN0UGF0aEVudHJ5 KSB0byBhdm9pZCBwZXItcm93IHJlbGF0aW9uCisgKiBvcGVuL2Nsb3NlLCBzbG90IGNyZWF0aW9u LCBldGMuCisgKgorICogVGhlIGJhdGNoIGlzIGFsc28gZmx1c2hlZCBhdCBlbmQgb2YgdHJpZ2dl ci1maXJpbmcgY3ljbGUgdmlhCisgKiByaV9GYXN0UGF0aEVuZEJhdGNoKCkuCisgKi8KK3N0YXRp YyB2b2lkCityaV9GYXN0UGF0aEJhdGNoQWRkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWlu Zm8sCisJCQkJCVJlbGF0aW9uIGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpCit7CisJ UklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSA9IHJpX0Zhc3RQYXRoR2V0RW50cnkocmlpbmZvLCBm a19yZWwpOworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CisJZnBlbnRyeS0+YmF0Y2hbZnBlbnRyeS0+ YmF0Y2hfY291bnRdID0KKwkJRXhlY0NvcHlTbG90SGVhcFR1cGxlKG5ld3Nsb3QpOworCWZwZW50 cnktPmJhdGNoX2NvdW50Kys7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwlp ZiAoZnBlbnRyeS0+YmF0Y2hfY291bnQgPj0gUklfRkFTVFBBVEhfQkFUQ0hfU0laRSkKKwkJcmlf RmFzdFBhdGhCYXRjaEZsdXNoKGZwZW50cnksIGZrX3JlbCk7Cit9CisKKy8qCisgKiByaV9GYXN0 UGF0aEJhdGNoRmx1c2gKKyAqCQlGbHVzaCBhbGwgYnVmZmVyZWQgRksgcm93cyBieSBwcm9iaW5n IHRoZSBQSyBpbmRleC4KKyAqCisgKiBEaXNwYXRjaGVzIHRvIHJpX0Zhc3RQYXRoRmx1c2hBcnJh eSgpIGZvciBzaW5nbGUtY29sdW1uIEZLcworICogKHVzaW5nIFNLX1NFQVJDSEFSUkFZKSBvciBy aV9GYXN0UGF0aEZsdXNoTG9vcCgpIGZvciBtdWx0aS1jb2x1bW4KKyAqIEZLcyAocGVyLXJvdyBw cm9iaW5nKS4gIFZpb2xhdGlvbnMgYXJlIHJlcG9ydGVkIGltbWVkaWF0ZWx5IHZpYQorICogcmlf UmVwb3J0VmlvbGF0aW9uKCksIHdoaWNoIGRvZXMgbm90IHJldHVybi4KKyAqLworc3RhdGljIHZv aWQKK3JpX0Zhc3RQYXRoQmF0Y2hGbHVzaChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxh dGlvbiBma19yZWwpCit7CisJLyogUmVsb2FkOyBtYXkgaGF2ZSBiZWVuIGludmFsaWRhdGVkIHNp bmNlIGxhc3QgYmF0Y2ggYWNjdW11bGF0aW9uLiAqLworCWNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaWluZm8gPSByaV9Mb2FkQ29uc3RyYWludEluZm8oZnBlbnRyeS0+Y29ub2lkKTsKKwlSZWxh dGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19yZWw7CisJUmVsYXRpb24JaWR4X3JlbCA9IGZwZW50 cnktPmlkeF9yZWw7CisJVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QgPSBmcGVudHJ5LT5ma19zbG90 OworCVNuYXBzaG90CXNuYXBzaG90OworCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CisJT2lkCQkJ c2F2ZWRfdXNlcmlkOworCWludAkJCXNhdmVkX3NlY19jb250ZXh0OworCU1lbW9yeUNvbnRleHQg b2xkY3h0OworCWludAkJCXZpb2xhdGlvbl9pbmRleDsKKworCWlmIChmcGVudHJ5LT5iYXRjaF9j b3VudCA9PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENDSSBhbmQgc2VjdXJpdHkgY29udGV4 dCBzd2l0Y2ggYXJlIGRvbmUgb25jZSBmb3IgdGhlIGVudGlyZSBiYXRjaC4KKwkgKiBQZXItcm93 IENDSSBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIGJ5IHRoZSB0aW1lIGEgZmx1c2ggcnVucywgYWxs IEFGVEVSCisJICogdHJpZ2dlcnMgZm9yIHRoZSBidWZmZXJlZCByb3dzIGhhdmUgYWxyZWFkeSBm aXJlZCAodHJpZ2dlciBpbnZvY2F0aW9ucworCSAqIHN0cmljdGx5IGFsdGVybmF0ZSBwZXIgcm93 KSwgc28gYSBzaW5nbGUgQ0NJIGFkdmFuY2VzIHBhc3QgYWxsIHRoZWlyCisJICogZWZmZWN0cy4g IFBlci1yb3cgc2VjdXJpdHkgY29udGV4dCBzd2l0Y2ggaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSBl YWNoCisJICogcm93J3MgcHJvYmUgcnVucyBlbnRpcmVseSBhcyB0aGUgUEsgdGFibGUgb3duZXIs IHNhbWUgYXMgdGhlIFNQSSBwYXRoCisJICogLS0gdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0 IHRoZSBTUEkgcGF0aCBzZXRzIGFuZCByZXN0b3JlcyB0aGUKKwkgKiBjb250ZXh0IHBlciByb3cg d2hlcmVhcyB3ZSBkbyBpdCBvbmNlIGFyb3VuZCB0aGUgd2hvbGUgYmF0Y2guCisJICovCisJQ29t bWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKwlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKworCS8qCisJICogYnVpbGRfaW5kZXhfc2NhbmtleXMo KSBtYXkgcGFsbG9jIGNhc3QgcmVzdWx0cyBmb3IgY3Jvc3MtdHlwZSBGS3MuIFVzZQorCSAqIHRo ZSBlbnRyeSdzIHNob3J0LWxpdmVkIGZsdXNoIGNvbnRleHQgc28gdGhlc2UgZG9uJ3QgYWNjdW11 bGF0ZSBhY3Jvc3MKKwkgKiBiYXRjaGVzLgorCSAqLworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhmcGVudHJ5LT5mbHVzaF9jeHQpOworCisJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNj YW4ocGtfcmVsLCBpZHhfcmVsLCBzbmFwc2hvdCwgTlVMTCwKKwkJCQkJCQkgICByaWluZm8tPm5r ZXlzLCAwLCBTT19OT05FKTsKKworCUdldFVzZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVkX3VzZXJp ZCwgJnNhdmVkX3NlY19jb250ZXh0KTsKKwlTZXRVc2VySWRBbmRTZWNDb250ZXh0KFJlbGF0aW9u R2V0Rm9ybShwa19yZWwpLT5yZWxvd25lciwKKwkJCQkJCSAgIHNhdmVkX3NlY19jb250ZXh0IHwK KwkJCQkJCSAgIFNFQ1VSSVRZX0xPQ0FMX1VTRVJJRF9DSEFOR0UgfAorCQkJCQkJICAgU0VDVVJJ VFlfTk9GT1JDRV9STFMpOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHVzZXIg aGFzIHBlcm1pc3Npb24gdG8gYWNjZXNzIHBrX3JlbC4gRG9uZSBoZXJlCisJICogcmF0aGVyIHRo YW4gYXQgZW50cnkgY3JlYXRpb24gc28gdGhhdCBwZXJtaXNzaW9uIGNoYW5nZXMgYmV0d2Vlbgor CSAqIGZsdXNoZXMgYXJlIHJlc3BlY3RlZCwgbWF0Y2hpbmcgdGhlIHBlci1yb3cgYmVoYXZpb3Ig b2YgdGhlIFNQSSBwYXRoLAorCSAqIGFsYmVpdCBjaGVja2VkIG9uY2UgcGVyIGZsdXNoIHJhdGhl ciB0aGFuIG9uY2UgcGVyIHJvdywgbGlrZSBpbgorCSAqIHJpX0Zhc3RQYXRoQ2hlY2soKS4KKwkg Ki8KKwlyaV9DaGVja1Blcm1pc3Npb25zKHBrX3JlbCk7CisKKwlpZiAocmlpbmZvLT5mcG1ldGEg PT0gTlVMTCkKKwl7CisJCS8qIFJlbG9hZCB0byBlbnN1cmUgaXQncyB2YWxpZC4gKi8KKwkJcmlp bmZvID0gcmlfTG9hZENvbnN0cmFpbnRJbmZvKHJpaW5mby0+Y29uc3RyYWludF9pZCk7CisJCXJp X3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKChSSV9Db25zdHJhaW50SW5mbyAqKSByaWluZm8s CisJCQkJCQkJCQkgIGZrX3JlbCwgaWR4X3JlbCk7CisJfQorCUFzc2VydChyaWluZm8tPmZwbWV0 YSk7CisJaWYgKHJpaW5mby0+bmtleXMgPT0gMSkKKwkJdmlvbGF0aW9uX2luZGV4ID0gcmlfRmFz dFBhdGhGbHVzaEFycmF5KGZwZW50cnksIGZrX3Nsb3QsIHJpaW5mbywKKwkJCQkJCQkJCQkJCWZr X3JlbCwgc25hcHNob3QsIHNjYW5kZXNjKTsKKwllbHNlCisJCXZpb2xhdGlvbl9pbmRleCA9IHJp X0Zhc3RQYXRoRmx1c2hMb29wKGZwZW50cnksIGZrX3Nsb3QsIHJpaW5mbywKKwkJCQkJCQkJCQkJ ICAgZmtfcmVsLCBzbmFwc2hvdCwgc2NhbmRlc2MpOworCisJU2V0VXNlcklkQW5kU2VjQ29udGV4 dChzYXZlZF91c2VyaWQsIHNhdmVkX3NlY19jb250ZXh0KTsKKwlVbnJlZ2lzdGVyU25hcHNob3Qo c25hcHNob3QpOworCWluZGV4X2VuZHNjYW4oc2NhbmRlc2MpOworCisJaWYgKHZpb2xhdGlvbl9p bmRleCA+PSAwKQorCXsKKwkJRXhlY1N0b3JlSGVhcFR1cGxlKGZwZW50cnktPmJhdGNoW3Zpb2xh dGlvbl9pbmRleF0sIGZrX3Nsb3QsIGZhbHNlKTsKKwkJcmlfUmVwb3J0VmlvbGF0aW9uKHJpaW5m bywgcGtfcmVsLCBma19yZWwsCisJCQkJCQkgICBma19zbG90LCBOVUxMLAorCQkJCQkJICAgUklf UExBTl9DSEVDS19MT09LVVBQSywgZmFsc2UsIGZhbHNlKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0 UmVzZXQoZnBlbnRyeS0+Zmx1c2hfY3h0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0 KTsKKworCS8qIFJlc2V0LiAqLworCWZwZW50cnktPmJhdGNoX2NvdW50ID0gMDsKK30KKworLyoK KyAqIHJpX0Zhc3RQYXRoRmx1c2hMb29wCisgKgkJTXVsdGktY29sdW1uIGZhbGxiYWNrOiBwcm9i ZSB0aGUgaW5kZXggb25jZSBwZXIgYnVmZmVyZWQgcm93LgorICoKKyAqIFVzZWQgZm9yIGNvbXBv c2l0ZSBmb3JlaWduIGtleXMgd2hlcmUgU0tfU0VBUkNIQVJSQVkgZG9lcyBub3QKKyAqIGFwcGx5 LgorICoKKyAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2aW9sYXRpbmcgcm93IGlu IHRoZSBiYXRjaCBhcnJheSwgb3IgLTEgaWYKKyAqIGFsbCByb3dzIGFyZSB2YWxpZC4KKyAqLwor c3RhdGljIGludAorcmlfRmFzdFBhdGhGbHVzaExvb3AoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRy eSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCisJCQkJCSBjb25zdCBSSV9Db25zdHJhaW50SW5m byAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwsCisJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwgSW5k ZXhTY2FuRGVzYyBzY2FuZGVzYykKK3sKKwlSZWxhdGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19y ZWw7CisJUmVsYXRpb24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7CisJVHVwbGVUYWJsZVNs b3QgKnBrX3Nsb3QgPSBmcGVudHJ5LT5wa19zbG90OworCURhdHVtCQlwa192YWxzW0lOREVYX01B WF9LRVlTXTsKKwljaGFyCQlwa19udWxsc1tJTkRFWF9NQVhfS0VZU107CisJU2NhbktleURhdGEg c2tleVtJTkRFWF9NQVhfS0VZU107CisJYm9vbAkJZm91bmQgPSB0cnVlOworCisJZm9yIChpbnQg aSA9IDA7IGkgPCBmcGVudHJ5LT5iYXRjaF9jb3VudDsgaSsrKQorCXsKKwkJRXhlY1N0b3JlSGVh cFR1cGxlKGZwZW50cnktPmJhdGNoW2ldLCBma19zbG90LCBmYWxzZSk7CisJCXJpX0V4dHJhY3RW YWx1ZXMoZmtfcmVsLCBma19zbG90LCByaWluZm8sIGZhbHNlLCBwa192YWxzLCBwa19udWxscyk7 CisJCWJ1aWxkX2luZGV4X3NjYW5rZXlzKHJpaW5mbywgaWR4X3JlbCwgcGtfdmFscywgcGtfbnVs bHMsIHNrZXkpOworCisJCWZvdW5kID0gcmlfRmFzdFBhdGhQcm9iZU9uZShwa19yZWwsIGlkeF9y ZWwsIHNjYW5kZXNjLCBwa19zbG90LAorCQkJCQkJCQkJc25hcHNob3QsIHJpaW5mbywgc2tleSwg cmlpbmZvLT5ua2V5cyk7CisKKwkJLyogUmVwb3J0IGZpcnN0IHVubWF0Y2hlZCByb3cgKi8KKwkJ aWYgKCFmb3VuZCkKKwkJCXJldHVybiBpOworCX0KKworCS8qIEFsbCBwYXNzLiAqLworCXJldHVy biAtMTsKK30KKworLyoKKyAqIHJpX0Zhc3RQYXRoRmx1c2hBcnJheQorICoJCVNpbmdsZS1jb2x1 bW4gZmFzdCBwYXRoIHVzaW5nIFNLX1NFQVJDSEFSUkFZLgorICoKKyAqIEJ1aWxkcyBhbiBhcnJh eSBvZiBGSyB2YWx1ZXMgYW5kIGRvZXMgb25lIGluZGV4IHNjYW4gd2l0aAorICogU0tfU0VBUkNI QVJSQVkuICBUaGUgaW5kZXggQU0gc29ydHMgYW5kIGRlZHVwbGljYXRlcyB0aGUgYXJyYXkKKyAq IGludGVybmFsbHksIHRoZW4gd2Fsa3MgbWF0Y2hpbmcgbGVhZiBwYWdlcyBpbiBvcmRlci4gIEVh Y2gKKyAqIG1hdGNoZWQgUEsgdHVwbGUgaXMgbG9ja2VkIGFuZCByZWNoZWNrZWQgYXMgYmVmb3Jl OyBhIG1hdGNoZWRbXQorICogYml0bWFwIHRyYWNrcyB3aGljaCBiYXRjaCBpdGVtcyB3ZXJlIHNh dGlzZmllZC4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmlvbGF0aW5n IHJvdyBpbiB0aGUgYmF0Y2ggYXJyYXksIG9yIC0xIGlmCisgKiBhbGwgcm93cyBhcmUgdmFsaWQu CisgKi8KK3N0YXRpYyBpbnQKK3JpX0Zhc3RQYXRoRmx1c2hBcnJheShSSV9GYXN0UGF0aEVudHJ5 ICpmcGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKKwkJCQkJICBjb25zdCBSSV9Db25z dHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwsCisJCQkJCSAgU25hcHNob3Qgc25h cHNob3QsIEluZGV4U2NhbkRlc2Mgc2NhbmRlc2MpCit7CisJRmFzdFBhdGhNZXRhICpmcG1ldGEg PSByaWluZm8tPmZwbWV0YTsKKwlSZWxhdGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19yZWw7CisJ UmVsYXRpb24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7CisJVHVwbGVUYWJsZVNsb3QgKnBr X3Nsb3QgPSBmcGVudHJ5LT5wa19zbG90OworCURhdHVtCQlzZWFyY2hfdmFsc1tSSV9GQVNUUEFU SF9CQVRDSF9TSVpFXTsKKwlib29sCQltYXRjaGVkW1JJX0ZBU1RQQVRIX0JBVENIX1NJWkVdOwor CWludAkJCW52YWxzID0gZnBlbnRyeS0+YmF0Y2hfY291bnQ7CisJRGF0dW0JCXBrX3ZhbHNbSU5E RVhfTUFYX0tFWVNdOworCWNoYXIJCXBrX251bGxzW0lOREVYX01BWF9LRVlTXTsKKwlTY2FuS2V5 RGF0YSBza2V5WzFdOworCVJJX0NvbXBhcmVIYXNoRW50cnkgKmVudHJ5OworCU9pZAkJCWVsZW1f dHlwZTsKKwlpbnQxNgkJZWxlbV9sZW47CisJYm9vbAkJZWxlbV9ieXZhbDsKKwljaGFyCQllbGVt X2FsaWduOworCUFycmF5VHlwZSAgKmFycjsKKworCUFzc2VydChmcG1ldGEpOworCisJbWVtc2V0 KG1hdGNoZWQsIDAsIG52YWxzICogc2l6ZW9mKGJvb2wpKTsKKworCS8qCisJICogRXh0cmFjdCBG SyB2YWx1ZXMsIGNhc3RpbmcgdG8gdGhlIG9wZXJhdG9yJ3MgZXhwZWN0ZWQgaW5wdXQgdHlwZSBp ZgorCSAqIG5lZWRlZCAoZS5nLiBpbnQ4IEZLIC0+IGludDQgZm9yIGludDQ4ZXEpLgorCSAqLwor CWVudHJ5ID0gZnBtZXRhLT5jb21wYXJlX2VudHJpZXNbMF07CisJZm9yIChpbnQgaSA9IDA7IGkg PCBudmFsczsgaSsrKQorCXsKKwkJRXhlY1N0b3JlSGVhcFR1cGxlKGZwZW50cnktPmJhdGNoW2ld LCBma19zbG90LCBmYWxzZSk7CisJCXJpX0V4dHJhY3RWYWx1ZXMoZmtfcmVsLCBma19zbG90LCBy aWluZm8sIGZhbHNlLCBwa192YWxzLCBwa19udWxscyk7CisKKwkJLyogQ2FzdCBpZiBuZWVkZWQg KGUuZy4gaW50OCBGSyAtPiBudW1lcmljIFBLKSAqLworCQlpZiAoT2lkSXNWYWxpZChlbnRyeS0+ Y2FzdF9mdW5jX2ZpbmZvLmZuX29pZCkpCisJCQlzZWFyY2hfdmFsc1tpXSA9IEZ1bmN0aW9uQ2Fs bDMoJmVudHJ5LT5jYXN0X2Z1bmNfZmluZm8sCisJCQkJCQkJCQkJICAgcGtfdmFsc1swXSwKKwkJ CQkJCQkJCQkgICBJbnQzMkdldERhdHVtKC0xKSwKKwkJCQkJCQkJCQkgICBCb29sR2V0RGF0dW0o ZmFsc2UpKTsKKwkJZWxzZQorCQkJc2VhcmNoX3ZhbHNbaV0gPSBwa192YWxzWzBdOworCX0KKwor CS8qCisJICogQXJyYXkgZWxlbWVudCB0eXBlIG11c3QgbWF0Y2ggdGhlIG9wZXJhdG9yJ3Mgcmln aHQtaGFuZCBpbnB1dCB0eXBlLAorCSAqIHdoaWNoIGlzIHdoYXQgdGhlIGluZGV4IGNvbXBhcmlz b24gZXhwZWN0cyBvbiB0aGUgc2VhcmNoIHNpZGUuCisJICogcmlfcG9wdWxhdGVfZmFzdHBhdGhf bWV0YWRhdGEoKSBzdG9yZXMgZXhhY3RseSB0aGlzIHZpYQorCSAqIGdldF9vcF9vcGZhbWlseV9w cm9wZXJ0aWVzKCksIHdoaWNoIHJldHVybnMgdGhlIG9wZXJhdG9yJ3MgcmlnaHQtaGFuZAorCSAq IHR5cGUgYXMgdGhlIHN1YnR5cGUgZm9yIGNyb3NzLXR5cGUgb3BlcmF0b3JzIChlLmcuIGludDgg Zm9yIGludDQ4ZXEpCisJICogYW5kIHRoZSBjb21tb24gdHlwZSBmb3Igc2FtZS10eXBlIG9wZXJh dG9ycy4KKwkgKi8KKwllbGVtX3R5cGUgPSBmcG1ldGEtPnN1YnR5cGVzWzBdOworCUFzc2VydChP aWRJc1ZhbGlkKGVsZW1fdHlwZSkpOworCWdldF90eXBsZW5ieXZhbGFsaWduKGVsZW1fdHlwZSwg JmVsZW1fbGVuLCAmZWxlbV9ieXZhbCwgJmVsZW1fYWxpZ24pOworCisJYXJyID0gY29uc3RydWN0 X2FycmF5KHNlYXJjaF92YWxzLCBudmFscywKKwkJCQkJCSAgZWxlbV90eXBlLCBlbGVtX2xlbiwg ZWxlbV9ieXZhbCwgZWxlbV9hbGlnbik7CisKKwkvKgorCSAqIEJ1aWxkIHNjYW4ga2V5IHdpdGgg U0tfU0VBUkNIQVJSQVkuICBUaGUgaW5kZXggQU0gY29kZSB3aWxsIGludGVybmFsbHkKKwkgKiBz b3J0IGFuZCBkZWR1cGxpY2F0ZSwgdGhlbiB3YWxrIGxlYWYgcGFnZXMgaW4gb3JkZXIuCisJICov CisJU2NhbktleUVudHJ5SW5pdGlhbGl6ZSgmc2tleVswXSwKKwkJCQkJCSAgIFNLX1NFQVJDSEFS UkFZLAorCQkJCQkJICAgMSwJLyogYXR0bm8gKi8KKwkJCQkJCSAgIGZwbWV0YS0+c3RyYXRzWzBd LAorCQkJCQkJICAgZnBtZXRhLT5zdWJ0eXBlc1swXSwKKwkJCQkJCSAgIGlkeF9yZWwtPnJkX2lu ZGNvbGxhdGlvblswXSwKKwkJCQkJCSAgIGZwbWV0YS0+cmVnb3BzWzBdLAorCQkJCQkJICAgUG9p bnRlckdldERhdHVtKGFycikpOworCisJaW5kZXhfcmVzY2FuKHNjYW5kZXNjLCBza2V5LCAxLCBO VUxMLCAwKTsKKworCS8qCisJICogV2FsayBhbGwgbWF0Y2hlcy4gIFRoZSBpbmRleCBBTSByZXR1 cm5zIHRoZW0gaW4gaW5kZXggb3JkZXIuICBGb3IgZWFjaAorCSAqIG1hdGNoLCBmaW5kIHdoaWNo IGJhdGNoIGl0ZW0ocykgaXQgc2F0aXNmaWVzLgorCSAqLworCXdoaWxlIChpbmRleF9nZXRuZXh0 X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBwa19zbG90KSkKKwl7CisJCURh dHVtCQlmb3VuZF92YWw7CisJCWJvb2wJCWZvdW5kX251bGw7CisJCWJvb2wJCWNvbmN1cnJlbnRs eV91cGRhdGVkOworCQlTY2FuS2V5RGF0YSByZWNoZWNrX3NrZXlbMV07CisKKwkJaWYgKCFyaV9M b2NrUEtUdXBsZShwa19yZWwsIHBrX3Nsb3QsIHNuYXBzaG90LCAmY29uY3VycmVudGx5X3VwZGF0 ZWQpKQorCQkJY29udGludWU7CisKKwkJLyogRXh0cmFjdCB0aGUgUEsgdmFsdWUgZnJvbSB0aGUg bWF0Y2hlZCBhbmQgbG9ja2VkIHR1cGxlICovCisJCWZvdW5kX3ZhbCA9IHNsb3RfZ2V0YXR0cihw a19zbG90LCByaWluZm8tPnBrX2F0dG51bXNbMF0sICZmb3VuZF9udWxsKTsKKwkJQXNzZXJ0KCFm b3VuZF9udWxsKTsKKworCQlpZiAoY29uY3VycmVudGx5X3VwZGF0ZWQpCisJCXsKKwkJCS8qCisJ CQkgKiBCdWlsZCBhIHNpbmdsZS1rZXkgc2NhbmtleSBmb3IgcmVjaGVjay4gIFdlIG5lZWQgdGhl IGFjdHVhbCBQSworCQkJICogdmFsdWUgdGhhdCB3YXMgZm91bmQsIG5vdCB0aGUgRksgc2VhcmNo IHZhbHVlLgorCQkJICovCisJCQlTY2FuS2V5RW50cnlJbml0aWFsaXplKCZyZWNoZWNrX3NrZXlb MF0sIDAsIDEsCisJCQkJCQkJCSAgIGZwbWV0YS0+c3RyYXRzWzBdLAorCQkJCQkJCQkgICBmcG1l dGEtPnN1YnR5cGVzWzBdLAorCQkJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRpb25bMF0s CisJCQkJCQkJCSAgIGZwbWV0YS0+cmVnb3BzWzBdLAorCQkJCQkJCQkgICBmb3VuZF92YWwpOwor CQkJaWYgKCFyZWNoZWNrX21hdGNoZWRfcGtfdHVwbGUoaWR4X3JlbCwgcmVjaGVja19za2V5LCBw a19zbG90KSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIExpbmVhciBzY2FuIHRv IG1hcmsgYWxsIGJhdGNoIGl0ZW1zIG1hdGNoaW5nIHRoaXMgUEsgdmFsdWUuCisJCSAqIE8oYmF0 Y2hfc2l6ZSkgcGVyIG1hdGNoLCBPKGJhdGNoX3NpemVeMikgd29yc3QgY2FzZSAtLSBmaW5lIGZv ciB0aGUKKwkJICogY3VycmVudCBiYXRjaCBzaXplIG9mIDY0LgorCQkgKi8KKwkJZm9yIChpbnQg aSA9IDA7IGkgPCBudmFsczsgaSsrKQorCQl7CisJCQlpZiAoIW1hdGNoZWRbaV0gJiYKKwkJCQlE YXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJmVudHJ5LT5lcV9vcHJfZmluZm8sCisJCQkJ CQkJCQkJCSAgIGlkeF9yZWwtPnJkX2luZGNvbGxhdGlvblswXSwKKwkJCQkJCQkJCQkJICAgZm91 bmRfdmFsLAorCQkJCQkJCQkJCQkgICBzZWFyY2hfdmFsc1tpXSkpKQorCQkJCW1hdGNoZWRbaV0g PSB0cnVlOworCQl9CisJfQorCisJLyogUmVwb3J0IGZpcnN0IHVubWF0Y2hlZCByb3cgKi8KKwlm b3IgKGludCBpID0gMDsgaSA8IG52YWxzOyBpKyspCisJCWlmICghbWF0Y2hlZFtpXSkKKwkJCXJl dHVybiBpOworCisJLyogQWxsIHBhc3MuICovCisJcmV0dXJuIC0xOworfQorCiAvKgogICogcmlf RmFzdFBhdGhQcm9iZU9uZQogICoJCVByb2JlIHRoZSBQSyBpbmRleCBmb3Igb25lIHNldCBvZiBz Y2FuIGtleXMsIGxvY2sgdGhlIG1hdGNoaW5nCkBAIC0zNjkxLDMgKzQwODIsMTk2IEBAIFJJX0ZL ZXlfdHJpZ2dlcl90eXBlKE9pZCB0Z2ZvaWQpCiAKIAlyZXR1cm4gUklfVFJJR0dFUl9OT05FOwog fQorCisvKgorICogcmlfRmFzdFBhdGhFbmRCYXRjaAorICoJCUZsdXNoIHJlbWFpbmluZyByb3dz IGFuZCB0ZWFyIGRvd24gY2FjaGVkIHN0YXRlLgorICoKKyAqIFJlZ2lzdGVyZWQgYXMgYW4gQWZ0 ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjay4gIE5vdGU6IHRoZSBmbHVzaCBjYW4KKyAqIGRvIHJlYWwg d29yayAoQ0NJLCBzZWN1cml0eSBjb250ZXh0IHN3aXRjaCwgaW5kZXggcHJvYmVzKSBhbmQgY2Fu CisgKiB0aHJvdyBFUlJPUiBvbiBhIGNvbnN0cmFpbnQgdmlvbGF0aW9uLiAgSWYgdGhhdCBoYXBw ZW5zLAorICogcmlfRmFzdFBhdGhUZWFyZG93biBuZXZlciBydW5zOyBSZXNvdXJjZU93bmVyICsg WGFjdENhbGxiYWNrCisgKiBoYW5kbGUgcmVzb3VyY2UgY2xlYW51cCBvbiB0aGUgYWJvcnQgcGF0 aC4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoRW5kQmF0Y2godm9pZCAqYXJnKQorewor CUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklfRmFzdFBhdGhFbnRyeSAqZW50cnk7CisKKwlp ZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogRmx1c2ggYW55 IHBhcnRpYWwgYmF0Y2hlcyAtLSBjYW4gdGhyb3cgRVJST1IgKi8KKwloYXNoX3NlcV9pbml0KCZz dGF0dXMsIHJpX2Zhc3RwYXRoX2NhY2hlKTsKKwl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2Vh cmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCXsKKwkJaWYgKGVudHJ5LT5iYXRjaF9jb3VudCA+IDAp CisJCXsKKwkJCVJlbGF0aW9uCWZrX3JlbCA9IHRhYmxlX29wZW4oZW50cnktPmZrX3JlbGlkLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2goZW50cnksIGZrX3Jl bCk7CisJCQl0YWJsZV9jbG9zZShma19yZWwsIE5vTG9jayk7CisJCX0KKwl9CisKKwkvKiBPcmRl cmx5IHRlYXJkb3duICovCisJcmlfRmFzdFBhdGhUZWFyZG93bigpOworfQorCisvKgorICogcmlf RmFzdFBhdGhUZWFyZG93bgorICoJCVRlYXIgZG93biBhbGwgY2FjaGVkIGZhc3QtcGF0aCBzdGF0 ZS4KKyAqCisgKiBDYWxsZWQgZnJvbSByaV9GYXN0UGF0aEVuZEJhdGNoKCkgYWZ0ZXIgZmx1c2hp bmcgYW55IHJlbWFpbmluZyByb3dzLgorICovCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhUZWFy ZG93bih2b2lkKQoreworCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklfRmFzdFBhdGhFbnRy eSAqZW50cnk7CisKKwlpZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCByaV9mYXN0cGF0aF9jYWNoZSk7CisJd2hpbGUgKChl bnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRy eS0+aWR4X3JlbCkKKwkJCWluZGV4X2Nsb3NlKGVudHJ5LT5pZHhfcmVsLCBOb0xvY2spOworCQlp ZiAoZW50cnktPnBrX3JlbCkKKwkJCXRhYmxlX2Nsb3NlKGVudHJ5LT5wa19yZWwsIE5vTG9jayk7 CisJCWlmIChlbnRyeS0+cGtfc2xvdCkKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qo ZW50cnktPnBrX3Nsb3QpOworCQlpZiAoZW50cnktPmZrX3Nsb3QpCisJCQlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KGVudHJ5LT5ma19zbG90KTsKKwkJaWYgKGVudHJ5LT5mbHVzaF9jeHQp CisJCQlNZW1vcnlDb250ZXh0RGVsZXRlKGVudHJ5LT5mbHVzaF9jeHQpOworCX0KKworCWhhc2hf ZGVzdHJveShyaV9mYXN0cGF0aF9jYWNoZSk7CisJcmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOwor CXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKK30KKworc3RhdGljIGJv b2wgcmlfZmFzdHBhdGhfeGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gZmFsc2U7CisKK3N0YXRp YyB2b2lkCityaV9GYXN0UGF0aFhhY3RDYWxsYmFjayhYYWN0RXZlbnQgZXZlbnQsIHZvaWQgKmFy ZykKK3sKKwkvKgorCSAqIE9uIGFib3J0LCBSZXNvdXJjZU93bmVyIGFscmVhZHkgcmVsZWFzZWQg cmVsYXRpb25zOyBvbiBjb21taXQsCisJICogcmlfRmFzdFBhdGhUZWFyZG93biBhbHJlYWR5IHJh bi4gIEVpdGhlciB3YXksIGp1c3QgTlVMTCB0aGUgc3RhdGljCisJICogcG9pbnRlcnMgc28gdGhl eSBkb24ndCBkYW5nbGUgaW50byB0aGUgbmV4dCB0cmFuc2FjdGlvbi4KKwkgKi8KKwlyaV9mYXN0 cGF0aF9jYWNoZSA9IE5VTEw7CisJcmlfZmFzdHBhdGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZh bHNlOworfQorCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2soU3ViWGFj dEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCisJCQkJCQkgICBTdWJUcmFu c2FjdGlvbklkIHBhcmVudFN1YmlkLCB2b2lkICphcmcpCit7CisJaWYgKGV2ZW50ID09IFNVQlhB Q1RfRVZFTlRfQUJPUlRfU1VCKQorCXsKKwkJLyoKKwkJICogUmVzb3VyY2VPd25lciBhbHJlYWR5 IHJlbGVhc2VkIHJlbGF0aW9ucy4gIE5VTEwgdGhlIHN0YXRpYyBwb2ludGVycworCQkgKiBzbyB0 aGUgc3RpbGwtcmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFjayBiZWNvbWVzIGEgbm8tb3AgZm9yIHRo ZSByZXN0CisJCSAqIG9mIHRoaXMgdHJhbnNhY3Rpb24uCisJCSAqLworCQlyaV9mYXN0cGF0aF9j YWNoZSA9IE5VTEw7CisJCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsK Kwl9Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aEdldEVudHJ5CisgKgkJTG9vayB1cCBvciBjcmVh dGUgYSBwZXItYmF0Y2ggY2FjaGUgZW50cnkgZm9yIHRoZSBnaXZlbiBjb25zdHJhaW50LgorICoK KyAqIE9uIGZpcnN0IGNhbGwgZm9yIGEgY29uc3RyYWludCB3aXRoaW4gYSBiYXRjaDogb3BlbnMg cGtfcmVsIGFuZCB0aGUgaW5kZXgsCisgKiBhbGxvY2F0ZXMgc2xvdHMgZm9yIGJvdGggRksgcm93 IGFuZCB0aGUgbG9va2VkIHVwIFBLIHJvdywgYW5kIHJlZ2lzdGVycyB0aGUKKyAqIGNsZWFudXAg Y2FsbGJhY2suCisgKgorICogT24gc3Vic2VxdWVudCBjYWxsczogcmV0dXJucyB0aGUgZXhpc3Rp bmcgZW50cnkuCisgKi8KK3N0YXRpYyBSSV9GYXN0UGF0aEVudHJ5ICoKK3JpX0Zhc3RQYXRoR2V0 RW50cnkoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsKQor eworCVJJX0Zhc3RQYXRoRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOworCisJLyogQ3JlYXRl IGhhc2ggdGFibGUgb24gZmlyc3QgdXNlIGluIHRoaXMgYmF0Y2ggKi8KKwlpZiAocmlfZmFzdHBh dGhfY2FjaGUgPT0gTlVMTCkKKwl7CisJCUhBU0hDVEwJCWN0bDsKKworCQlpZiAoIXJpX2Zhc3Rw YXRoX3hhY3RfY2FsbGJhY2tfcmVnaXN0ZXJlZCkKKwkJeworCQkJUmVnaXN0ZXJYYWN0Q2FsbGJh Y2socmlfRmFzdFBhdGhYYWN0Q2FsbGJhY2ssIE5VTEwpOworCQkJUmVnaXN0ZXJTdWJYYWN0Q2Fs bGJhY2socmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2ssIE5VTEwpOworCQkJcmlfZmFzdHBhdGhf eGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKKwkJfQorCisJCWN0bC5rZXlzaXplID0g c2l6ZW9mKE9pZCk7CisJCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoUklfRmFzdFBhdGhFbnRyeSk7 CisJCWN0bC5oY3h0ID0gVG9wVHJhbnNhY3Rpb25Db250ZXh0OworCQlyaV9mYXN0cGF0aF9jYWNo ZSA9IGhhc2hfY3JlYXRlKCJSSSBmYXN0LXBhdGggY2FjaGUiLAorCQkJCQkJCQkJCTE2LAorCQkJ CQkJCQkJCSZjdGwsCisJCQkJCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfQ09O VEVYVCk7CisJfQorCisJZW50cnkgPSBoYXNoX3NlYXJjaChyaV9mYXN0cGF0aF9jYWNoZSwgJnJp aW5mby0+Y29uc3RyYWludF9pZCwKKwkJCQkJCUhBU0hfRU5URVIsICZmb3VuZCk7CisKKwlpZiAo IWZvdW5kKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkJLyoKKwkJICogWmVybyBv dXQgbm9uLWtleSBmaWVsZHMgc28gcmlfRmFzdFBhdGhUZWFyZG93biBpcyBzYWZlIGlmIHdlIGVy cm9yCisJCSAqIG91dCBkdXJpbmcgcGFydGlhbCBpbml0aWFsaXphdGlvbiBiZWxvdy4KKwkJICov CisJCW1lbXNldCgoKGNoYXIgKikgZW50cnkpICsgb2Zmc2V0b2YoUklfRmFzdFBhdGhFbnRyeSwg cGtfcmVsKSwgMCwKKwkJCSAgIHNpemVvZihSSV9GYXN0UGF0aEVudHJ5KSAtIG9mZnNldG9mKFJJ X0Zhc3RQYXRoRW50cnksIHBrX3JlbCkpOworCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCisJCWVudHJ5LT5ma19yZWxpZCA9IFJlbGF0 aW9uR2V0UmVsaWQoZmtfcmVsKTsKKworCQkvKgorCQkgKiBPcGVuIFBLIHRhYmxlIGFuZCBpdHMg dW5pcXVlIGluZGV4LgorCQkgKgorCQkgKiBSb3dTaGFyZUxvY2sgb24gcGtfcmVsIG1hdGNoZXMg d2hhdCB0aGUgU1BJIHBhdGgncyBTRUxFQ1QgLi4uIEZPUgorCQkgKiBLRVkgU0hBUkUgd291bGQg YWNxdWlyZSBhcyBhIHJlbGF0aW9uLWxldmVsIGxvY2suIEFjY2Vzc1NoYXJlTG9jaworCQkgKiBv biB0aGUgaW5kZXggaXMgc3RhbmRhcmQgZm9yIGluZGV4IHNjYW5zLgorCQkgKgorCQkgKiBXZSBk b24ndCByZWxlYXNlIHRoZXNlIGxvY2tzIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiwgbWF0Y2hp bmcgU1BJCisJCSAqIGJlaGF2aW9yLgorCQkgKi8KKwkJZW50cnktPnBrX3JlbCA9IHRhYmxlX29w ZW4ocmlpbmZvLT5wa19yZWxpZCwgUm93U2hhcmVMb2NrKTsKKwkJZW50cnktPmlkeF9yZWwgPSBp bmRleF9vcGVuKHJpaW5mby0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWVudHJ5LT5w a19zbG90ID0gdGFibGVfc2xvdF9jcmVhdGUoZW50cnktPnBrX3JlbCwgTlVMTCk7CisKKwkJLyoK KwkJICogTXVzdCBiZSBUVFNPcHNIZWFwVHVwbGUgYmVjYXVzZSBFeGVjU3RvcmVIZWFwVHVwbGUo KSBpcyB1c2VkIHRvCisJCSAqIGxvYWQgZW50cmllcyBmcm9tIGJhdGNoW10gaW50byB0aGlzIHNs b3QgZm9yIHZhbHVlIGV4dHJhY3Rpb24uCisJCSAqLworCQllbnRyeS0+Zmtfc2xvdCA9IE1ha2VT aW5nbGVUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKGZrX3JlbCksCisJCQkJCQkJCQkJ CQkgICZUVFNPcHNIZWFwVHVwbGUpOworCisJCWVudHJ5LT5mbHVzaF9jeHQgPSBBbGxvY1NldENv bnRleHRDcmVhdGUoVG9wVHJhbnNhY3Rpb25Db250ZXh0LAorCQkJCQkJCQkJCQkJICJSSSBmYXN0 IHBhdGggZmx1c2ggdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX1NN QUxMX1NJWkVTKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkJLyogRW5z dXJlIGNsZWFudXAgYXQgZW5kIG9mIHRoaXMgdHJpZ2dlci1maXJpbmcgYmF0Y2ggKi8KKwkJaWYg KCFyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkKQorCQl7CisJCQlSZWdpc3RlckFmdGVy VHJpZ2dlckJhdGNoQ2FsbGJhY2socmlfRmFzdFBhdGhFbmRCYXRjaCwgTlVMTCk7CisJCQlyaV9m YXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBl bnRyeTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaAppbmRleCAyN2FmNTI4NDQwNi4uNzY2NDI5OGY1 YzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaAorKysgYi9zcmMv aW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKQEAgLTI4OSw0ICsyODksMjIgQEAgZXh0ZXJuIHZv aWQgUklfUGFydGl0aW9uUmVtb3ZlX0NoZWNrKFRyaWdnZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZr X3JlbCwKIAogZXh0ZXJuIGludAlSSV9GS2V5X3RyaWdnZXJfdHlwZShPaWQgdGdmb2lkKTsKIAor LyoKKyAqIENhbGxiYWNrIHR5cGUgZm9yIGVuZC1vZi10cmlnZ2VyLWJhdGNoIG5vdGlmaWNhdGlv bnMuCisgKgorICogUmVnaXN0ZXJlZCB2aWEgUmVnaXN0ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxi YWNrKCkuICBJbnZva2VkIHdoZW4KKyAqIGEgYmF0Y2ggb2YgYWZ0ZXItdHJpZ2dlciBwcm9jZXNz aW5nIGNvbXBsZXRlczoKKyAqCS0gQWZ0ZXJUcmlnZ2VyRW5kUXVlcnkoKSAgICAgIChpbW1lZGlh dGUgY29uc3RyYWludHMpCisgKgktIEFmdGVyVHJpZ2dlckZpcmVEZWZlcnJlZCgpICAoZGVmZXJy ZWQgY29uc3RyYWludHMgYXQgQ09NTUlUKQorICoJLSBBZnRlclRyaWdnZXJTZXRTdGF0ZSgpICAg ICAgKFNFVCBDT05TVFJBSU5UUyBJTU1FRElBVEUpCisgKgorICogVGhlIGNhbGxiYWNrIGxpc3Qg aXMgY2xlYXJlZCBhZnRlciBlYWNoIGJhdGNoLiAgQ2FsbGVycyBtdXN0CisgKiByZS1yZWdpc3Rl ciBpZiB0aGV5IG5lZWQgdG8gYmUgY2FsbGVkIGFnYWluIGluIGEgc3Vic2VxdWVudCBiYXRjaC4K KyAqLwordHlwZWRlZiB2b2lkICgqQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjaykgKHZvaWQgKmFy Zyk7CisKK2V4dGVybiB2b2lkIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhBZnRl clRyaWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkJCQkgIHZvaWQgKmFyZyk7 CitleHRlcm4gYm9vbCBBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZlKHZvaWQpOworCiAjZW5kaWYJ CQkJCQkJLyogVFJJR0dFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2ZvcmVpZ25fa2V5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9r ZXkub3V0CmluZGV4IDZjNjA3ZDM2MjIyLi45MTI5NTc1NGJhYiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKQEAgLTM1NTcsMyArMzU1NywxMjkgQEAgREVUQUlM OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma3BhcnQxM190MQogZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBma3BhcnQxM190MgogZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma3BhcnQxM190MwogUkVT RVQgc2VhcmNoX3BhdGg7CistLSBUZXN0cyBmb3JlaWduIGtleSBjaGVjayBmYXN0LXBhdGggbm8t Y2FjaGUgcGF0aC4KK0NSRUFURSBUQUJMRSBmcF9wa19hbHRlciAoYSBpbnQgUFJJTUFSWSBLRVkp OworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAp OworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyIChhIGludCk7CitJTlNFUlQgSU5UTyBmcF9ma19h bHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CistLSBWYWxpZGF0aW9uIHBhdGg6 IHNob3VsZCBzdWNjZWVkCitBTFRFUiBUQUJMRSBmcF9ma19hbHRlciBBREQgRk9SRUlHTiBLRVkg KGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXI7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlciBWQUxV RVMgKDEwMSk7ICAtLSBzaG91bGQgZmFpbCAoY29uc3RyYWludCBhY3RpdmUpCitFUlJPUjogIGlu c2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2ZrX2FsdGVyIiB2aW9sYXRlcyBmb3JlaWduIGtl eSBjb25zdHJhaW50ICJmcF9ma19hbHRlcl9hX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEpPSgxMDEp IGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19hbHRlciIuCitEUk9QIFRBQkxFIGZwX2Zr X2FsdGVyLCBmcF9wa19hbHRlcjsKKy0tIFNlcGFyYXRlIHRlc3Q6IHZhbGlkYXRpb24gY2F0Y2hl cyBleGlzdGluZyB2aW9sYXRpb24KK0NSRUFURSBUQUJMRSBmcF9wa19hbHRlcjIgKGEgaW50IFBS SU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2FsdGVyMiBWQUxVRVMgKDEpOworQ1JFQVRF IFRBQkxFIGZwX2ZrX2FsdGVyMiAoYSBpbnQpOworSU5TRVJUIElOVE8gZnBfZmtfYWx0ZXIyIFZB TFVFUyAoMSksICgyMDApOyAgLS0gMjAwIGhhcyBubyBQSyBtYXRjaAorQUxURVIgVEFCTEUgZnBf ZmtfYWx0ZXIyIEFERCBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNFUyBmcF9wa19hbHRlcjI7ICAt LSBzaG91bGQgZmFpbAorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19h bHRlcjIiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX2FsdGVyMl9hX2Zr ZXkiCitERVRBSUw6ICBLZXkgKGEpPSgyMDApIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9w a19hbHRlcjIiLgorRFJPUCBUQUJMRSBmcF9ma19hbHRlcjIsIGZwX3BrX2FsdGVyMjsKKy0tIFRl c3RzIHRoYXQgdGhlIGZhc3QtcGF0aCBoYW5kbGVzIGNhY2hpbmcgZm9yIG11bHRpcGxlIGNvbnN0 cmFpbnRzCitDUkVBVEUgVEFCTEUgZnBfcGsxIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgZnBfcGsyIChiIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wazEgVkFM VUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX3BrMiBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZw X211bHRpX2ZrICgKKyAgICBhIGludCBSRUZFUkVOQ0VTIGZwX3BrMSwKKyAgICBiIGludCBSRUZF UkVOQ0VTIGZwX3BrMgorKTsKK0lOU0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMSk7 ICAtLSB0d28gY29uc3RyYWludHMsIG9uZSBiYXRjaAorSU5TRVJUIElOVE8gZnBfbXVsdGlfZmsg VkFMVUVTICgxLCAyKTsgIC0tIHNlY29uZCBjb25zdHJhaW50IGZhaWxzCitFUlJPUjogIGluc2Vy dCBvciB1cGRhdGUgb24gdGFibGUgImZwX211bHRpX2ZrIiB2aW9sYXRlcyBmb3JlaWduIGtleSBj b25zdHJhaW50ICJmcF9tdWx0aV9ma19iX2ZrZXkiCitERVRBSUw6ICBLZXkgKGIpPSgyKSBpcyBu b3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGsyIi4KK0RST1AgVEFCTEUgZnBfbXVsdGlfZmssIGZw X3BrMSwgZnBfcGsyOworLS0gVGVzdCB0aGF0IGZhc3QtcGF0aCBjYWNoZSBoYW5kbGVzIGRlZmVy cmVkIGNvbnN0cmFpbnRzIGFuZCBTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFCitDUkVBVEUgVEFC TEUgZnBfcGtfZGVmZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19k ZWZlciAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19kZWZlciBERUZFUlJBQkxFIElOSVRJQUxMWSBE RUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19kZWZlciBWQUxVRVMgKDEpLCAoMik7CitCRUdJ TjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9m a19kZWZlciBWQUxVRVMgKDIpOworU0VUIENPTlNUUkFJTlRTIEFMTCBJTU1FRElBVEU7ICAtLSBm aXJlcyBiYXRjaCBjYWxsYmFjayBoZXJlCitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMg KDMpOyAgLS0gc2hvdWxkIGZhaWwsIGFsc28gdGVzdHMgdGhhdCBjYWNoZSB3YXMgY2xlYW5lZCB1 cAorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19kZWZlciIgdmlvbGF0 ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtfZGVmZXJfYV9ma2V5IgorREVUQUlMOiAg S2V5IChhKT0oMykgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZwX3BrX2RlZmVyIi4KK0NPTU1J VDsKK0RST1AgVEFCTEUgZnBfcGtfZGVmZXIsIGZwX2ZrX2RlZmVyOworLS0gU3VidHJhbnNhY3Rp b24gYWJvcnQ6IGNhY2hlZCBzdGF0ZSBtdXN0IGJlIGludmFsaWRhdGVkIG9uIFJPTExCQUNLIFRP CitDUkVBVEUgVEFCTEUgZnBfcGtfc3VieGFjdCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRF IFRBQkxFIGZwX2ZrX3N1YnhhY3QgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfc3VieGFjdCk7CitJ TlNFUlQgSU5UTyBmcF9wa19zdWJ4YWN0IFZBTFVFUyAoMSksICgyKTsKK0JFR0lOOworSU5TRVJU IElOVE8gZnBfZmtfc3VieGFjdCBWQUxVRVMgKDEpOworU0FWRVBPSU5UIHNwMTsKK0lOU0VSVCBJ TlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgyKTsKK1JPTExCQUNLIFRPIHNwMTsKK0lOU0VSVCBJ TlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK0NPTU1JVDsKK1NFTEVDVCAqIEZST00gZnBf Zmtfc3VieGFjdDsKKyBhIAorLS0tCisgMQorIDEKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgZnBf Zmtfc3VieGFjdCwgZnBfcGtfc3VieGFjdDsKKy0tIEZLIGNoZWNrIG11c3Qgc2VlIFBLIHJvd3Mg aW5zZXJ0ZWQgYnkgZWFybGllciBBRlRFUiB0cmlnZ2VycworLS0gZmlyaW5nIG9uIHRoZSBzYW1l IHN0YXRlbWVudAorQ1JFQVRFIFRBQkxFIGZwX3BrX2NjaSAoYSBpbnQgUFJJTUFSWSBLRVkpOwor Q1JFQVRFIFRBQkxFIGZwX2ZrX2NjaSAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19jY2kpOworQ1JF QVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKSBSRVRVUk5TIHRyaWdnZXIgQVMgJCQKK0JFR0lOCisg IFJBSVNFIE5PVElDRSAnZnBfYXV0b19wayBjYWxsZWQnOworICBJTlNFUlQgSU5UTyBmcF9wa19j Y2kgVkFMVUVTIChORVcuYSk7CisgIFJFVFVSTiBORVc7CitFTkQgJCQgTEFOR1VBR0UgcGxwZ3Nx bDsKKy0tIE5hbWUgc29ydHMgYmVmb3JlIHRoZSBSSSB0cmlnZ2VyLCBzbyBmaXJlcyBmaXJzdCBw ZXIgcm93CitDUkVBVEUgVFJJR0dFUiAiQUFBX2F1dG8iIEFGVEVSIElOU0VSVCBPTiBmcF9ma19j Y2kKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gZnBfYXV0b19waygpOworLS0gU2hv dWxkIHN1Y2NlZWQ6IEFBQV9hdXRvIHByb3Zpc2lvbnMgdGhlIFBLIHJvdyBiZWZvcmUgUkkgY2hl Y2sKK0lOU0VSVCBJTlRPIGZwX2ZrX2NjaSBWQUxVRVMgKDEpLCAoMiksICgzKTsKK05PVElDRTog IGZwX2F1dG9fcGsgY2FsbGVkCitOT1RJQ0U6ICBmcF9hdXRvX3BrIGNhbGxlZAorTk9USUNFOiAg ZnBfYXV0b19wayBjYWxsZWQKK0RST1AgVEFCTEUgZnBfZmtfY2NpLCBmcF9wa19jY2k7CitEUk9Q IEZVTkNUSU9OIGZwX2F1dG9fcGs7CistLSBNdWx0aS1jb2x1bW4gRks6IGV4ZXJjaXNlcyBiYXRj aGVkIHBlci1yb3cgcHJvYmluZyB3aXRoIGNvbXBvc2l0ZSBrZXlzCitDUkVBVEUgVEFCTEUgZnBf cGtfbXVsdGkgKGEgaW50LCBiIGludCwgUFJJTUFSWSBLRVkgKGEsIGIpKTsKK0lOU0VSVCBJTlRP IGZwX3BrX211bHRpIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsK K0NSRUFURSBUQUJMRSBmcF9ma19tdWx0aSAoeCBpbnQsIGEgaW50LCBiIGludCwKKyAgICBGT1JF SUdOIEtFWSAoYSwgYikgUkVGRVJFTkNFUyBmcF9wa19tdWx0aSk7CitJTlNFUlQgSU5UTyBmcF9m a19tdWx0aSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitJ TlNFUlQgSU5UTyBmcF9ma19tdWx0aSBWQUxVRVMgKDEsIDk5OSwgOTk5KTsKK0VSUk9SOiAgaW5z ZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfbXVsdGkiIHZpb2xhdGVzIGZvcmVpZ24ga2V5 IGNvbnN0cmFpbnQgImZwX2ZrX211bHRpX2FfYl9ma2V5IgorREVUQUlMOiAgS2V5IChhLCBiKT0o OTk5LCA5OTkpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19tdWx0aSIuCitEUk9QIFRB QkxFIGZwX2ZrX211bHRpLCBmcF9wa19tdWx0aTsKKy0tIERlZmVycmVkIGNvbnN0cmFpbnQ6IGJh dGNoIGZsdXNoZWQgYXQgQ09NTUlULCBub3QgYXQgc3RhdGVtZW50IGVuZAorQ1JFQVRFIFRBQkxF IGZwX3BrX2NvbW1pdCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Nv bW1pdCAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19jb21taXQKKyAgICBERUZFUlJBQkxFIElOSVRJ QUxMWSBERUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19jb21taXQgVkFMVUVTICgxKTsKK0JF R0lOOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBm cF9ma19jb21taXQgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMg KDk5OSk7CitDT01NSVQ7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2Zr X2NvbW1pdCIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtfY29tbWl0X2Ff ZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDk5OSkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZw X3BrX2NvbW1pdCIuCitEUk9QIFRBQkxFIGZwX2ZrX2NvbW1pdCwgZnBfcGtfY29tbWl0OworLS0g Q3Jvc3MtdHlwZSBGSyB3aXRoIGJ1bGsgaW5zZXJ0OiBpbnQ4IEZLIHJlZmVyZW5jaW5nIGludDQg UEssCistLSB2YWx1ZXMgY2FzdCBkdXJpbmcgYXJyYXkgY29uc3RydWN0aW9uCitDUkVBVEUgVEFC TEUgZnBfcGtfY3Jvc3MgKGEgaW50NCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19j cm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitDUkVBVEUgVEFCTEUgZnBfZmtf Y3Jvc3MgKGEgaW50OCBSRUZFUkVOQ0VTIGZwX3BrX2Nyb3NzKTsKK0lOU0VSVCBJTlRPIGZwX2Zr X2Nyb3NzIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsKK0lOU0VSVCBJTlRPIGZwX2Zr X2Nyb3NzIFZBTFVFUyAoOTk5KTsKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAi ZnBfZmtfY3Jvc3MiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX2Nyb3Nz X2FfZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDk5OSkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUg ImZwX3BrX2Nyb3NzIi4KK0RST1AgVEFCTEUgZnBfZmtfY3Jvc3MsIGZwX3BrX2Nyb3NzOworLS0g RHVwbGljYXRlIEZLIHZhbHVlczogd2hlbiB1c2luZyB0aGUgYmF0Y2hlZCBTQU9QIHBhdGgsIGV2 ZXJ5CistLSByb3cgbXVzdCBiZSByZWNvZ25pemVkIGFzIHNhdGlzZmllZCwgbm90IGp1c3QgdGhl IGZpcnN0IG1hdGNoCitDUkVBVEUgVEFCTEUgZnBfcGtfZHVwIChhIGludCBQUklNQVJZIEtFWSk7 CitJTlNFUlQgSU5UTyBmcF9wa19kdXAgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19k dXAgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZHVwKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2R1cCBT RUxFQ1QgMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworRFJPUCBUQUJMRSBmcF9ma19k dXAsIGZwX3BrX2R1cDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25f a2V5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbAppbmRleCBmY2Rk MDA2Yzk3MS4uZjY0NmRkMTA0MDEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zv cmVpZ25fa2V5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwK QEAgLTI1MzUsMyArMjUzNSwxMjEgQEAgV0lUSCBjdGUgQVMgKAogCiBEUk9QIFNDSEVNQSBma3Bh cnQxMyBDQVNDQURFOwogUkVTRVQgc2VhcmNoX3BhdGg7CisKKy0tIFRlc3RzIGZvcmVpZ24ga2V5 IGNoZWNrIGZhc3QtcGF0aCBuby1jYWNoZSBwYXRoLgorQ1JFQVRFIFRBQkxFIGZwX3BrX2FsdGVy IChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19hbHRlciBTRUxFQ1QgZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitDUkVBVEUgVEFCTEUgZnBfZmtfYWx0ZXIgKGEgaW50KTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsK Ky0tIFZhbGlkYXRpb24gcGF0aDogc2hvdWxkIHN1Y2NlZWQKK0FMVEVSIFRBQkxFIGZwX2ZrX2Fs dGVyIEFERCBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNFUyBmcF9wa19hbHRlcjsKK0lOU0VSVCBJ TlRPIGZwX2ZrX2FsdGVyIFZBTFVFUyAoMTAxKTsgIC0tIHNob3VsZCBmYWlsIChjb25zdHJhaW50 IGFjdGl2ZSkKK0RST1AgVEFCTEUgZnBfZmtfYWx0ZXIsIGZwX3BrX2FsdGVyOworCistLSBTZXBh cmF0ZSB0ZXN0OiB2YWxpZGF0aW9uIGNhdGNoZXMgZXhpc3RpbmcgdmlvbGF0aW9uCitDUkVBVEUg VEFCTEUgZnBfcGtfYWx0ZXIyIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9w a19hbHRlcjIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19hbHRlcjIgKGEgaW50KTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyMiBWQUxVRVMgKDEpLCAoMjAwKTsgIC0tIDIwMCBoYXMg bm8gUEsgbWF0Y2gKK0FMVEVSIFRBQkxFIGZwX2ZrX2FsdGVyMiBBREQgRk9SRUlHTiBLRVkgKGEp IFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXIyOyAgLS0gc2hvdWxkIGZhaWwKK0RST1AgVEFCTEUgZnBf ZmtfYWx0ZXIyLCBmcF9wa19hbHRlcjI7CisKKy0tIFRlc3RzIHRoYXQgdGhlIGZhc3QtcGF0aCBo YW5kbGVzIGNhY2hpbmcgZm9yIG11bHRpcGxlIGNvbnN0cmFpbnRzCitDUkVBVEUgVEFCTEUgZnBf cGsxIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfcGsyIChiIGludCBQUklN QVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wazEgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZw X3BrMiBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX211bHRpX2ZrICgKKyAgICBhIGludCBS RUZFUkVOQ0VTIGZwX3BrMSwKKyAgICBiIGludCBSRUZFUkVOQ0VTIGZwX3BrMgorKTsKK0lOU0VS VCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMSk7ICAtLSB0d28gY29uc3RyYWludHMsIG9u ZSBiYXRjaAorSU5TRVJUIElOVE8gZnBfbXVsdGlfZmsgVkFMVUVTICgxLCAyKTsgIC0tIHNlY29u ZCBjb25zdHJhaW50IGZhaWxzCitEUk9QIFRBQkxFIGZwX211bHRpX2ZrLCBmcF9wazEsIGZwX3Br MjsKKworLS0gVGVzdCB0aGF0IGZhc3QtcGF0aCBjYWNoZSBoYW5kbGVzIGRlZmVycmVkIGNvbnN0 cmFpbnRzIGFuZCBTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFCitDUkVBVEUgVEFCTEUgZnBfcGtf ZGVmZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19kZWZlciAoYSBp bnQgUkVGRVJFTkNFUyBmcF9wa19kZWZlciBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCk7 CitJTlNFUlQgSU5UTyBmcF9wa19kZWZlciBWQUxVRVMgKDEpLCAoMik7CisKK0JFR0lOOworSU5T RVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVy IFZBTFVFUyAoMik7CitTRVQgQ09OU1RSQUlOVFMgQUxMIElNTUVESUFURTsgIC0tIGZpcmVzIGJh dGNoIGNhbGxiYWNrIGhlcmUKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMyk7ICAt LSBzaG91bGQgZmFpbCwgYWxzbyB0ZXN0cyB0aGF0IGNhY2hlIHdhcyBjbGVhbmVkIHVwCitDT01N SVQ7CitEUk9QIFRBQkxFIGZwX3BrX2RlZmVyLCBmcF9ma19kZWZlcjsKKworLS0gU3VidHJhbnNh Y3Rpb24gYWJvcnQ6IGNhY2hlZCBzdGF0ZSBtdXN0IGJlIGludmFsaWRhdGVkIG9uIFJPTExCQUNL IFRPCitDUkVBVEUgVEFCTEUgZnBfcGtfc3VieGFjdCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JF QVRFIFRBQkxFIGZwX2ZrX3N1YnhhY3QgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfc3VieGFjdCk7 CitJTlNFUlQgSU5UTyBmcF9wa19zdWJ4YWN0IFZBTFVFUyAoMSksICgyKTsKK0JFR0lOOworSU5T RVJUIElOVE8gZnBfZmtfc3VieGFjdCBWQUxVRVMgKDEpOworU0FWRVBPSU5UIHNwMTsKK0lOU0VS VCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgyKTsKK1JPTExCQUNLIFRPIHNwMTsKK0lOU0VS VCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK0NPTU1JVDsKK1NFTEVDVCAqIEZST00g ZnBfZmtfc3VieGFjdDsKK0RST1AgVEFCTEUgZnBfZmtfc3VieGFjdCwgZnBfcGtfc3VieGFjdDsK KworLS0gRksgY2hlY2sgbXVzdCBzZWUgUEsgcm93cyBpbnNlcnRlZCBieSBlYXJsaWVyIEFGVEVS IHRyaWdnZXJzCistLSBmaXJpbmcgb24gdGhlIHNhbWUgc3RhdGVtZW50CitDUkVBVEUgVEFCTEUg ZnBfcGtfY2NpIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY2NpIChh IGludCBSRUZFUkVOQ0VTIGZwX3BrX2NjaSk7CisKK0NSRUFURSBGVU5DVElPTiBmcF9hdXRvX3Br KCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJTgorICBSQUlTRSBOT1RJQ0UgJ2ZwX2F1dG9f cGsgY2FsbGVkJzsKKyAgSU5TRVJUIElOVE8gZnBfcGtfY2NpIFZBTFVFUyAoTkVXLmEpOworICBS RVRVUk4gTkVXOworRU5EICQkIExBTkdVQUdFIHBscGdzcWw7CisKKy0tIE5hbWUgc29ydHMgYmVm b3JlIHRoZSBSSSB0cmlnZ2VyLCBzbyBmaXJlcyBmaXJzdCBwZXIgcm93CitDUkVBVEUgVFJJR0dF UiAiQUFBX2F1dG8iIEFGVEVSIElOU0VSVCBPTiBmcF9ma19jY2kKKyAgRk9SIEVBQ0ggUk9XIEVY RUNVVEUgRlVOQ1RJT04gZnBfYXV0b19waygpOworCistLSBTaG91bGQgc3VjY2VlZDogQUFBX2F1 dG8gcHJvdmlzaW9ucyB0aGUgUEsgcm93IGJlZm9yZSBSSSBjaGVjaworSU5TRVJUIElOVE8gZnBf ZmtfY2NpIFZBTFVFUyAoMSksICgyKSwgKDMpOworCitEUk9QIFRBQkxFIGZwX2ZrX2NjaSwgZnBf cGtfY2NpOworRFJPUCBGVU5DVElPTiBmcF9hdXRvX3BrOworCistLSBNdWx0aS1jb2x1bW4gRks6 IGV4ZXJjaXNlcyBiYXRjaGVkIHBlci1yb3cgcHJvYmluZyB3aXRoIGNvbXBvc2l0ZSBrZXlzCitD UkVBVEUgVEFCTEUgZnBfcGtfbXVsdGkgKGEgaW50LCBiIGludCwgUFJJTUFSWSBLRVkgKGEsIGIp KTsKK0lOU0VSVCBJTlRPIGZwX3BrX211bHRpIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMCkgaTsKK0NSRUFURSBUQUJMRSBmcF9ma19tdWx0aSAoeCBpbnQsIGEgaW50LCBi IGludCwKKyAgICBGT1JFSUdOIEtFWSAoYSwgYikgUkVGRVJFTkNFUyBmcF9wa19tdWx0aSk7CitJ TlNFUlQgSU5UTyBmcF9ma19tdWx0aSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAxMDApIGk7CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBWQUxVRVMgKDEsIDk5OSwgOTk5 KTsKK0RST1AgVEFCTEUgZnBfZmtfbXVsdGksIGZwX3BrX211bHRpOworCistLSBEZWZlcnJlZCBj b25zdHJhaW50OiBiYXRjaCBmbHVzaGVkIGF0IENPTU1JVCwgbm90IGF0IHN0YXRlbWVudCBlbmQK K0NSRUFURSBUQUJMRSBmcF9wa19jb21taXQgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBU QUJMRSBmcF9ma19jb21taXQgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfY29tbWl0CisgICAgREVG RVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElOVE8gZnBfcGtfY29tbWl0IFZB TFVFUyAoMSk7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDEpOwor SU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19j b21taXQgVkFMVUVTICg5OTkpOworQ09NTUlUOworRFJPUCBUQUJMRSBmcF9ma19jb21taXQsIGZw X3BrX2NvbW1pdDsKKworLS0gQ3Jvc3MtdHlwZSBGSyB3aXRoIGJ1bGsgaW5zZXJ0OiBpbnQ4IEZL IHJlZmVyZW5jaW5nIGludDQgUEssCistLSB2YWx1ZXMgY2FzdCBkdXJpbmcgYXJyYXkgY29uc3Ry dWN0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfY3Jvc3MgKGEgaW50NCBQUklNQVJZIEtFWSk7CitJ TlNFUlQgSU5UTyBmcF9wa19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitD UkVBVEUgVEFCTEUgZnBfZmtfY3Jvc3MgKGEgaW50OCBSRUZFUkVOQ0VTIGZwX3BrX2Nyb3NzKTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFZBTFVFUyAoOTk5KTsKK0RST1AgVEFCTEUgZnBfZmtf Y3Jvc3MsIGZwX3BrX2Nyb3NzOworCistLSBEdXBsaWNhdGUgRksgdmFsdWVzOiB3aGVuIHVzaW5n IHRoZSBiYXRjaGVkIFNBT1AgcGF0aCwgZXZlcnkKKy0tIHJvdyBtdXN0IGJlIHJlY29nbml6ZWQg YXMgc2F0aXNmaWVkLCBub3QganVzdCB0aGUgZmlyc3QgbWF0Y2gKK0NSRUFURSBUQUJMRSBmcF9w a19kdXAgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2R1cCBWQUxVRVMg KDEpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2R1cCAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19kdXAp OworSU5TRVJUIElOVE8gZnBfZmtfZHVwIFNFTEVDVCAxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMCk7CitEUk9QIFRBQkxFIGZwX2ZrX2R1cCwgZnBfcGtfZHVwOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCBjOWRhMWY5MWNiOS4uMDA5MmExZDkwMjcgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CkBAIC0zMCw2ICszMCw4IEBAIEFkZEZvcmVpZ25VcGRhdGVUYXJnZXRzX2Z1bmN0 aW9uCiBBZGRySW5mbwogQWZmaXhOb2RlCiBBZmZpeE5vZGVEYXRhCitBZnRlclRyaWdnZXJCYXRj aENhbGxiYWNrCitBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0KIEFmdGVyVHJpZ2dlckV2ZW50CiBB ZnRlclRyaWdnZXJFdmVudENodW5rCiBBZnRlclRyaWdnZXJFdmVudERhdGEKQEAgLTI0ODUsNiAr MjQ4Nyw3IEBAIFJJWAogUklfQ29tcGFyZUhhc2hFbnRyeQogUklfQ29tcGFyZUtleQogUklfQ29u c3RyYWludEluZm8KK1JJX0Zhc3RQYXRoRW50cnkKIFJJX1F1ZXJ5SGFzaEVudHJ5CiBSSV9RdWVy eUtleQogUlRFS2luZAotLSAKMi40Ny4zCgo= --000000000000ec9cdb064e50ecc0--