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 1vlQ3P-00BdX4-0i for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jan 2026 11:19:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vlQ3O-00818D-14 for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jan 2026 11:19:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vlQ3N-008183-2U for pgsql-hackers@lists.postgresql.org; Thu, 29 Jan 2026 11:19:14 +0000 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vlQ3J-002uB2-1q for pgsql-hackers@lists.postgresql.org; Thu, 29 Jan 2026 11:19:13 +0000 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-42fb2314f52so525645f8f.0 for ; Thu, 29 Jan 2026 03:19:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769685549; x=1770290349; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=H6Ppe0yoY6CDQQkkAMwwcRaijA4IVgQsRp095bqN8U0=; b=AuSIqPcgzzYaJ6qQK44yfMzzUzKrRLXN1q1P7EF8yLu4y0NMeEfXZQWF58dlgjiO6V uLIQY3Hm6PiTSAOQsBhK7bf2crHfavgfrAATgBuOlRsrvLoIm5WkJLhjBs0yHCmLplv1 0fmHlG2oA4IRR1ILvYuII192OTbU/8tjzXvYU7F4N+WwzwCVmiiXiz/d97bmxwk45eTP 8xmSa15Bt9f21gvMRluCScXeG/sAiaQqSbxLJOGKqxwRrPi939WMyV0mzp3BbhYR+BrQ iUNE5ykN8UnwntoelO/P7H8HNYoexZrNeSj6ia7neIADQ2QaX4G+UYUphFDzsuaff8Ni Xl3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769685549; x=1770290349; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=H6Ppe0yoY6CDQQkkAMwwcRaijA4IVgQsRp095bqN8U0=; b=cWSvxMTSIYpU49TMXdxm9CjusfSAvO8ieKFTB6oWHvJ4+tfPC0+oDot7iPviV9W7xg h5Nx5TOqvB5iUQtAmHl5RpAU9Tui24RyW7N8WNafM66oX6y90k3v7ggKlPunLL3Xqb00 KOygCkwOME6+7ZaJFJwZkYW+HvrtT6S6vWUYHsufRLKCKxRARDLysommljmR8sJ+mYIK uq538d03XXx1U0sL/kzlT5RQqk7MVOkvTMBNaxXltlfnV4iohq8THKt3JKveqHueTbAb cvTklG3lhvdn4iUDFFzWyX6kf7pqF1ClK+M4fkBUfWwCCBvxYCeHPmAu44Dm/fb+Jc/i NuQg== X-Gm-Message-State: AOJu0YzyTSEQRgteKqcpO5Sdkx6tm2r5cfhDGlOA8P18aG6mKmRg5DhH csNhw+/TAww8MphQP0DOqaPHU4qEyFM6sBCvSzxI32AVWCCxPPmFtgZ2 X-Gm-Gg: AZuq6aJDloUwa2jesmhTNSjAyTxaHmyGgm2+Hr7N1QSxUp5WCnkdzriYJ8RyT3W8Qms WEVgv+eBhd6cccRhlOalYDJJqgD5chVU8T4CjIEP6yZzep1tfn062CfTwc9D63Q78/FYxQs7F35 TdTGjFhEBeNA/58o+1/3MwfZioM1WoCJDjJ3eJ6WnC9l1HRZn2BCaxyOjISGutC6U5euyb1SSaH FgYnbXdpFTOhcOu9s+6vGC5J3s6uiR2jKCtsTXagJFt0zzGfbVF+5urEexo7w7pWs3dIitSZJd0 W/rYQutpRGNLbhAmb+zMImEP06fxNjMpUGgBksSbQVbJWXnUgisfuTe8luKh4JyRG6DyD0t4Dzt QtfAzptxYQWhY0AYDEuXDrGnu5bAt6adDtlClEsqdDAug+mh6ee/zybLcNfdlfiPzMdZuCPjhgu gGoCnkM6OtZxuQd3NbvGLTQvFoge1Fi8W+ln41EtMWc+KVWEKWtjk/lG5ndZAuRLBhNWo= X-Received: by 2002:a05:6000:288e:b0:432:5c34:fb22 with SMTP id ffacd0b85a97d-435dd05beb0mr12170187f8f.22.1769685548538; Thu, 29 Jan 2026 03:19:08 -0800 (PST) Received: from [172.20.10.2] ([85.255.233.53]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-435e10e476dsm13945285f8f.4.2026.01.29.03.19.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 29 Jan 2026 03:19:07 -0800 (PST) Content-Type: multipart/mixed; boundary="------------zxnLflPgEq3snl3exkZu08zB" Message-ID: <4c1d0b97-a5f8-472c-afdd-bdeb09b93f33@gmail.com> Date: Thu, 29 Jan 2026 11:19:05 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: parallel data loading for pgbench -i To: lakshmi Cc: PostgreSQL Hackers , tomas@vondra.me References: Content-Language: en-GB From: Mircea Cadariu In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------zxnLflPgEq3snl3exkZu08zB Content-Type: multipart/alternative; boundary="------------LvUpFz4rBpmjw1AAoMvY1Vig" --------------LvUpFz4rBpmjw1AAoMvY1Vig Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Lakshmi, On 19/01/2026 09:25, lakshmi wrote: > > Hi Mircea, > > I tested the patch on 19devel and it worked well for me. > Before applying it, |-j| is rejected in pgbench initialization mode as > expected. After applying the patch, |pgbench -i -s 100 -j 10| runs > successfully and shows a clear speedup. > On my system the total runtime dropped to about 9.6s, with client-side > data generation around 3.3s. > I also checked correctness after the run — row counts for > pgbench_accounts, pgbench_branches, and pgbench_tellers all match the > expected values. > > Thanks for working on this, the improvement is very noticeable. > > Best regards, > lakshmi > Thanks for having a look and trying it out! FYI this is one of Tomas Vondra's patch ideas from his blog [1]. I have attached a new version which now includes docs, tests, a proposed commit message, and an attempt to fix the current CI failures (Windows). [1] - https://vondra.me/posts/patch-idea-parallel-pgbench-i -- Thanks, Mircea Cadariu --------------LvUpFz4rBpmjw1AAoMvY1Vig Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hi Lakshmi,

On 19/01/2026 09:25, lakshmi wrote:

Hi Mircea,

I tested the patch on 19devel and it worked well for me.
Before applying it, -j is rejected in pgbench initialization mode as expected. After applying the patch, pgbench -i -s 100 -j 10 runs successfully and shows a clear speedup.
On my system the total runtime dropped to about 9.6s, with client-side data generation around 3.3s. 
I also checked correctness after the run — row counts for pgbench_accounts, pgbench_branches, and pgbench_tellers all match the expected values.

Thanks for working on this, the improvement is very noticeable.

Best regards,
lakshmi

Thanks for having a look and trying it out! 

FYI this is one of Tomas Vondra's patch ideas from his blog [1].

I have attached a new version which now includes docs, tests, a proposed commit message, and an attempt to fix the current CI failures (Windows). 

[1] - https://vondra.me/posts/patch-idea-parallel-pgbench-i

-- 
Thanks,
Mircea Cadariu
--------------LvUpFz4rBpmjw1AAoMvY1Vig-- --------------zxnLflPgEq3snl3exkZu08zB Content-Type: text/plain; charset=UTF-8; name="v1-0001-Add-parallel-data-loading-support-to-pgbench.patch" Content-Disposition: attachment; filename*0="v1-0001-Add-parallel-data-loading-support-to-pgbench.patch" Content-Transfer-Encoding: base64 RnJvbSAwMWNhYWJiZTE1OWFmNmI2ZWZkNjA3ZTA4YWQ1ZDdmYmM3N2U1MTNlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNaXJjZWEgQ2FkYXJpdSA8Y2FkYXJpdS5taXJjZWFA Z21haWwuY29tPgpEYXRlOiBTdW4sIDkgTm92IDIwMjUgMTA6NDE6NTEgKzAwMDAKU3ViamVj dDogW1BBVENIIHYxXSBBZGQgcGFyYWxsZWwgZGF0YSBsb2FkaW5nIHN1cHBvcnQgdG8gcGdi ZW5jaAoKcGdiZW5jaCBpbml0aWFsaXphdGlvbiAocGdiZW5jaCAtaSkgbm93IHVzZXMgdGhl IC1qIG9wdGlvbiB0bwpsb2FkIHRoZSBwZ2JlbmNoX2FjY291bnRzIHRhYmxlIGluIHBhcmFs bGVsIHVzaW5nIG11bHRpcGxlIHRocmVhZHMsIGVhY2gKd2l0aCBpdHMgb3duIGNvbm5lY3Rp b24uCgpGb3IgcmFuZ2UtcGFydGl0aW9uZWQgdGFibGVzLCBlYWNoIHdvcmtlciBjcmVhdGVz IGFuZCBsb2FkcyBpdHMgYXNzaWduZWQKcGFydGl0aW9ucyBhcyBzdGFuZGFsb25lIHRhYmxl cywgdGhlbiB0aGUgbWFpbiB0aHJlYWQgYXR0YWNoZXMgdGhlbSB0bwp0aGUgcGFyZW50IGFm dGVyIGFsbCBkYXRhIGlzIGxvYWRlZC4gVGhpcyBhdm9pZHMgQWNjZXNzRXhjbHVzaXZlTG9j awpjb250ZW50aW9uIG9uIHRoZSBwYXJlbnQgdGFibGUgZHVyaW5nIHBhcmFsbGVsIGxvYWRp bmcsIGFuZCBhbGxvd3MgZWFjaAp3b3JrZXIgdG8gdXNlIENPUFkgRlJFRVpFLgoKRm9yIG5v bi1wYXJ0aXRpb25lZCB0YWJsZXMsIHdvcmtlciAwIHJldXNlcyB0aGUgbWFpbiBjb25uZWN0 aW9uICh3aGljaApkaWQgdGhlIFRSVU5DQVRFKSBhbmQgY2FuIHVzZSBDT1BZIEZSRUVaRSwg d2hpbGUgYWRkaXRpb25hbCB3b3JrZXJzIHVzZQpzZXBhcmF0ZSBjb25uZWN0aW9ucyB3aXRo IHJlZ3VsYXIgQ09QWS4KCkltcGxlbWVudGF0aW9uIGRldGFpbHM6Ci0gQ09QWSBkYXRhIGlz IGJhdGNoZWQgaW50byAxTUIgYnVmZmVycyBiZWZvcmUgc2VuZGluZyB0byByZWR1Y2Ugb3Zl cmhlYWQKLSBIYXNoIHBhcnRpdGlvbmluZyBkb2VzIG5vdCBzdXBwb3J0IHBhcmFsbGVsIGxv YWRpbmcKLSBOdW1iZXIgb2YgdGhyZWFkcyBtdXN0IG5vdCBleGNlZWQgdGhlIG51bWJlciBv ZiBwYXJ0aXRpb25zCgpBdXRob3I6IE1pcmNlYSBDYWRhcml1IDxjYWRhcml1Lm1pcmNlYUBn bWFpbC5jb20+ClJldmlld2VkLWJ5OiBMYWtzaG1pIEcgPGxha3NobWlnY2RhY0BnbWFpbC5j b20+Ci0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwgICAgICAgICAgICAgICAg fCAgMTEgKwogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyAgICAgICAgICAgICAgICAgICAg fCA0NzUgKysrKysrKysrKysrKysrKystLQogc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVu Y2hfd2l0aF9zZXJ2ZXIucGwgfCAgNDUgKysKIHNyYy9iaW4vcGdiZW5jaC90LzAwMl9wZ2Jl bmNoX25vX3NlcnZlci5wbCAgIHwgICA1ICsKIDQgZmlsZXMgY2hhbmdlZCwgNTAxIGluc2Vy dGlvbnMoKyksIDM1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvcGdiZW5jaC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwKaW5kZXgg MmU0MDFkMWNlYi4uNThiM2NjZDM3OSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9w Z2JlbmNoLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwKQEAgLTUw Miw2ICs1MDIsMTcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25z PC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAgICAgQ2xp ZW50cyBhcmUgZGlzdHJpYnV0ZWQgYXMgZXZlbmx5IGFzIHBvc3NpYmxlIGFtb25nIGF2YWls YWJsZSB0aHJlYWRzLgogICAgICAgICBEZWZhdWx0IGlzIDEuCiAgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICBJbiBpbml0aWFsaXphdGlvbiBtb2RlICg8b3B0aW9u Pi1pPC9vcHRpb24+KSwgdGhpcyBvcHRpb24gY29udHJvbHMKKyAgICAgICAgdGhlIG51bWJl ciBvZiB0aHJlYWRzIHVzZWQgdG8gbG9hZCBkYXRhIGludG8KKyAgICAgICAgPGxpdGVyYWw+ cGdiZW5jaF9hY2NvdW50czwvbGl0ZXJhbD4gaW4gcGFyYWxsZWwuCisgICAgICAgIFdpdGgg PG9wdGlvbj4tLXBhcnRpdGlvbnM8L29wdGlvbj4gdXNpbmcKKyAgICAgICAgPGxpdGVyYWw+ cmFuZ2U8L2xpdGVyYWw+IHBhcnRpdGlvbmluZywgZWFjaCB0aHJlYWQgbG9hZHMgb25lIG9y IG1vcmUKKyAgICAgICAgY29tcGxldGUgcGFydGl0aW9ucyBpbmRlcGVuZGVudGx5LgorICAg ICAgICBUaGUgbnVtYmVyIG9mIHRocmVhZHMgbXVzdCBub3QgZXhjZWVkIHRoZSBudW1iZXIg b2YgcGFydGl0aW9ucy4KKyAgICAgICAgUGFyYWxsZWwgZGF0YSBsb2FkaW5nIGlzIG5vdCBj dXJyZW50bHkgc3VwcG9ydGVkIHdpdGgKKyAgICAgICAgPGxpdGVyYWw+aGFzaDwvbGl0ZXJh bD4gcGFydGl0aW9uaW5nLgorICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdi ZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCA1ODczNTg3MWMxLi5i OTRkYTI1NjdkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBi L3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTc4LDYgKzc4LDggQEAKICNkZWZpbmUg RVJSQ09ERV9UX1JfREVBRExPQ0tfREVURUNURUQgICI0MFAwMSIKICNkZWZpbmUgRVJSQ09E RV9VTkRFRklORURfVEFCTEUgICI0MlAwMSIKIAorI2RlZmluZSBDT1BZX0JBVENIX1NJWkUJ KDEwMjQgKiAxMDI0KQorCiAvKgogICogSGFzaGluZyBjb25zdGFudHMKICAqLwpAQCAtODI1 LDcgKzgyNyw2IEBAIHN0YXRpYyBjb25zdCBCdWlsdGluU2NyaXB0IGJ1aWx0aW5fc2NyaXB0 W10gPQogCX0KIH07CiAKLQogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIHZv aWQgc2V0TnVsbFZhbHVlKFBnQmVuY2hWYWx1ZSAqcHYpOwogc3RhdGljIHZvaWQgc2V0Qm9v bFZhbHVlKFBnQmVuY2hWYWx1ZSAqcHYsIGJvb2wgYnZhbCk7CkBAIC04NDgsNiArODQ5LDgg QEAgc3RhdGljIHZvaWQgY2xlYXJfc29ja2V0X3NldChzb2NrZXRfc2V0ICpzYSk7CiBzdGF0 aWMgdm9pZCBhZGRfc29ja2V0X3RvX3NldChzb2NrZXRfc2V0ICpzYSwgaW50IGZkLCBpbnQg aWR4KTsKIHN0YXRpYyBpbnQJd2FpdF9vbl9zb2NrZXRfc2V0KHNvY2tldF9zZXQgKnNhLCBp bnQ2NCB1c2Vjcyk7CiBzdGF0aWMgYm9vbCBzb2NrZXRfaGFzX2lucHV0KHNvY2tldF9zZXQg KnNhLCBpbnQgZmQsIGludCBpZHgpOworc3RhdGljIHZvaWQgY3JlYXRlUGFydGl0aW9ucyhQ R2Nvbm4gKmNvbiwgaW50IHBhcnRfc3RhcnQsIGludCBwYXJ0X2VuZCk7CitzdGF0aWMgdm9p ZCBhdHRhY2hQYXJ0aXRpb25zKFBHY29ubiAqY29uKTsKIAogLyogY2FsbGJhY2sgdXNlZCB0 byBidWlsZCByb3dzIGZvciBDT1BZIGR1cmluZyBkYXRhIGxvYWRpbmcgKi8KIHR5cGVkZWYg dm9pZCAoKmluaXRSb3dNZXRob2QpIChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3Vy cik7CkBAIC04NTcsNiArODYwLDIwIEBAIHN0YXRpYyBjb25zdCBQc3FsU2NhbkNhbGxiYWNr cyBwZ2JlbmNoX2NhbGxiYWNrcyA9IHsKIAlOVUxMLAkJCQkJCS8qIGRvbid0IG5lZWQgZ2V0 X3ZhcmlhYmxlIGZ1bmN0aW9uYWxpdHkgKi8KIH07CiAKKy8qIFdvcmtlciB0aHJlYWQgZGF0 YSBmb3IgcGFyYWxsZWwgdGFibGUgbG9hZGluZyAqLwordHlwZWRlZiBzdHJ1Y3QgV29ya2Vy VGFzaworeworCVBHY29ubgkgICAqY29uOworCWNvbnN0IGNoYXIgKnRhYmxlOworCWludDY0 CQlzdGFydF9yb3c7CisJaW50NjQJCWVuZF9yb3c7CisJaW5pdFJvd01ldGhvZCBhcHBlbmRf cm93OworCWludAkJCXdvcmtlcl9pZDsKKwlpbnQJCQlwYXJ0X3N0YXJ0OworCWludAkJCXBh cnRfZW5kOworCWludDY0CQlwYXJ0X3NpemU7Cit9CQkJV29ya2VyVGFzazsKKwogc3RhdGlj IGNoYXIKIGdldF90YWJsZV9yZWxraW5kKFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0YWJs ZSkKIHsKQEAgLTE1ODYsNiArMTYwMywzMDEgQEAgZG9Db25uZWN0KHZvaWQpCiAJcmV0dXJu IGNvbm47CiB9CiAKKy8qCisgKiBUcnVuY2F0ZSBzcGVjaWZpZWQgdGFibGUocykKKyAqIHRh YmxlTmFtZSBjYW4gYmUgYSBzaW5nbGUgdGFibGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qg b2YgdGFibGVzCisgKi8KK3N0YXRpYyB2b2lkCit0cnVuY2F0ZVRhYmxlKFBHY29ubiAqY29u LCBjb25zdCBjaGFyICp0YWJsZU5hbWUpCit7CisJUFFFeHBCdWZmZXJEYXRhIHF1ZXJ5Owor CisJaW5pdFBRRXhwQnVmZmVyKCZxdWVyeSk7CisJcHJpbnRmUFFFeHBCdWZmZXIoJnF1ZXJ5 LCAiVFJVTkNBVEUgVEFCTEUgJXMiLCB0YWJsZU5hbWUpOworCWV4ZWN1dGVTdGF0ZW1lbnQo Y29uLCBxdWVyeS5kYXRhKTsKKwl0ZXJtUFFFeHBCdWZmZXIoJnF1ZXJ5KTsKK30KKworLyoK KyAqIFBhcmFtZXRlcnMgbmVlZGVkIGZvciBDT1BZIG9wZXJhdGlvbnMuCisgKi8KK3R5cGVk ZWYgc3RydWN0IENvcHlUYXJnZXQKK3sKKwljb25zdCBjaGFyICp0YWJsZV9uYW1lOworCWlu dDY0CQlzdGFydF9yb3c7CisJaW50NjQJCWVuZF9yb3c7CisJYm9vbAkJdXNlX2ZyZWV6ZTsK K30JCQlDb3B5VGFyZ2V0OworCisvKgorICogUGVyZm9ybSBDT1BZIG9wZXJhdGlvbiBmb3Ig YSBzaW5nbGUgdGFibGUgb3IgcGFydGl0aW9uLgorICogQmF0Y2hlcyByb3dzIGludG8gbGFy Z2VyIGJ1ZmZlcnMgYmVmb3JlIHNlbmRpbmcgdG8gcmVkdWNlIG92ZXJoZWFkLgorICovCitz dGF0aWMgdm9pZAorcGVyZm9ybUNvcHkoUEdjb25uICpjb25uLCBXb3JrZXJUYXNrICogd3Rk LCBDb3B5VGFyZ2V0ICogdGFyZ2V0KQoreworCVBHcmVzdWx0ICAgKnJlczsKKwljaGFyCQlj b3B5X3N0YXRlbWVudFtOQU1FREFUQUxFTiArIDMyXTsKKwlpbnQ2NAkJcm93OworCVBRRXhw QnVmZmVyRGF0YSBiYXRjaF9idWZmZXI7CisKKwkvKiBCdWlsZCB0aGUgQ09QWSBjb21tYW5k ICovCisJaWYgKHRhcmdldC0+dXNlX2ZyZWV6ZSkKKwkJc25wcmludGYoY29weV9zdGF0ZW1l bnQsIHNpemVvZihjb3B5X3N0YXRlbWVudCksCisJCQkJICJDT1BZICVzIEZST00gU1RESU4g KEZSRUVaRSBPTikiLCB0YXJnZXQtPnRhYmxlX25hbWUpOworCWVsc2UKKwkJc25wcmludGYo Y29weV9zdGF0ZW1lbnQsIHNpemVvZihjb3B5X3N0YXRlbWVudCksCisJCQkJICJDT1BZICVz IEZST00gU1RESU4iLCB0YXJnZXQtPnRhYmxlX25hbWUpOworCisJLyogSW5pdGlhdGUgQ09Q WSBtb2RlICovCisJcmVzID0gUFFleGVjKGNvbm4sIGNvcHlfc3RhdGVtZW50KTsKKwlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT1BZX0lOKQorCQlwZ19mYXRhbCgiQ09Q WSBjb21tYW5kIGZhaWxlZCBmb3IgdGFibGUgXCIlc1wiOiAlcyIsCisJCQkJIHRhcmdldC0+ dGFibGVfbmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCVBRY2xlYXIocmVzKTsKKwor CS8qIFByZS1hbGxvY2F0ZSBidWZmZXIgdG8gYXZvaWQgcmVwZWF0ZWQgcmVhbGxvY3MgKi8K Kwlpbml0UFFFeHBCdWZmZXIoJmJhdGNoX2J1ZmZlcik7CisJZW5sYXJnZVBRRXhwQnVmZmVy KCZiYXRjaF9idWZmZXIsIENPUFlfQkFUQ0hfU0laRSk7CisKKwkvKiBHZW5lcmF0ZSBhbmQg c2VuZCByb3dzIGluIGJhdGNoZXMgdXNpbmcgYXBwZW5kX3JvdyAqLworCWZvciAocm93ID0g dGFyZ2V0LT5zdGFydF9yb3c7IHJvdyA8IHRhcmdldC0+ZW5kX3Jvdzsgcm93KyspCisJewor CQkvKiBVc2UgYXBwZW5kX3JvdyB0byBhY2N1bXVsYXRlIG11bHRpcGxlIHJvd3MgaW4gdGhl IGJ1ZmZlciAqLworCQl3dGQtPmFwcGVuZF9yb3coJmJhdGNoX2J1ZmZlciwgcm93KTsKKwor CQkvKiBTZW5kIGJhdGNoIHdoZW4gYnVmZmVyIHJlYWNoZXMgc2l6ZSB0aHJlc2hvbGQgKi8K KwkJaWYgKGJhdGNoX2J1ZmZlci5sZW4gPj0gQ09QWV9CQVRDSF9TSVpFKQorCQl7CisJCQlp ZiAoUFFwdXRDb3B5RGF0YShjb25uLCBiYXRjaF9idWZmZXIuZGF0YSwgYmF0Y2hfYnVmZmVy LmxlbikgPD0gMCkKKwkJCQlwZ19mYXRhbCgiZXJyb3IgaW4gUFFwdXRDb3B5RGF0YTogJXMi LCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkJCXJlc2V0UFFFeHBCdWZmZXIoJmJhdGNo X2J1ZmZlcik7CisJCX0KKwl9CisKKwkvKiBTZW5kIGFueSByZW1haW5pbmcgYnVmZmVyZWQg ZGF0YSAqLworCWlmIChiYXRjaF9idWZmZXIubGVuID4gMCkKKwl7CisJCWlmIChQUXB1dENv cHlEYXRhKGNvbm4sIGJhdGNoX2J1ZmZlci5kYXRhLCBiYXRjaF9idWZmZXIubGVuKSA8PSAw KQorCQkJcGdfZmF0YWwoImVycm9yIGluIFBRcHV0Q29weURhdGE6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubikpOworCX0KKworCS8qIEZpbmFsaXplIHRoZSBDT1BZIG9wZXJhdGlvbiAq LworCWlmIChQUXB1dENvcHlFbmQoY29ubiwgTlVMTCkgPD0gMCkKKwkJcGdfZmF0YWwoImVy cm9yIGluIFBRcHV0Q29weUVuZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwly ZXMgPSBQUWdldFJlc3VsdChjb25uKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19DT01NQU5EX09LKQorCQlwZ19mYXRhbCgiQ09QWSBmYWlsZWQgZm9yIHRhYmxlIFwi JXNcIjogJXMiLAorCQkJCSB0YXJnZXQtPnRhYmxlX25hbWUsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwl0ZXJtUFFFeHBCdWZmZXIoJmJhdGNoX2J1ZmZl cik7Cit9CisKKworc3RhdGljIHZvaWQKK2Fzc2lnbldvcmtlclJvd3MoV29ya2VyVGFzayAq IHd0ZCwgaW50IG51bV93b3JrZXJzLCBpbnQ2NCB0b3RhbF9yb3dzKQoreworCWludDY0CQly b3dzX3Blcl93b3JrZXIgPSB0b3RhbF9yb3dzIC8gbnVtX3dvcmtlcnM7CisKKwl3dGQtPnN0 YXJ0X3JvdyA9IHd0ZC0+d29ya2VyX2lkICogcm93c19wZXJfd29ya2VyOworCXd0ZC0+ZW5k X3JvdyA9ICh3dGQtPndvcmtlcl9pZCA9PSBudW1fd29ya2VycyAtIDEpID8KKwkJdG90YWxf cm93cyA6CisJCSh3dGQtPndvcmtlcl9pZCArIDEpICogcm93c19wZXJfd29ya2VyOworfQor CisvKgorICogQ292ZXJzIG9ubHkgbXVsdGlwbGUgcGFydGl0aW9ucyBwZXIgd29ya2VyICh3 b3JrZXJzIDw9IHBhcnRpdGlvbnMpIGZvciBub3cuCisgKiBFYWNoIHdvcmtlciBsb2FkcyBj b21wbGV0ZSBwYXJ0aXRpb25zIGluZGVwZW5kZW50bHkgYW5kIGNhbiB1c2UgQ09QWSBGUkVF WkUuCisgKi8KK3N0YXRpYyB2b2lkCithc3NpZ25Xb3JrZXJQYXJ0aXRpb25zKFdvcmtlclRh c2sgKiB3dGQsIGludCBudW1fd29ya2VycywgaW50NjQgdG90YWxfcm93cywKKwkJCQkJICAg aW50IG51bV9wYXJ0cykKK3sKKwlpbnQJCQlwYXJ0c19wZXJfd29ya2VyID0gbnVtX3BhcnRz IC8gbnVtX3dvcmtlcnM7CisJaW50CQkJZXh0cmFfcGFydHMgPSBudW1fcGFydHMgJSBudW1f d29ya2VyczsKKworCXd0ZC0+cGFydF9zdGFydCA9IHd0ZC0+d29ya2VyX2lkICogcGFydHNf cGVyX3dvcmtlciArIDEgKworCQkod3RkLT53b3JrZXJfaWQgPCBleHRyYV9wYXJ0cyA/IHd0 ZC0+d29ya2VyX2lkIDogZXh0cmFfcGFydHMpOworCXd0ZC0+cGFydF9lbmQgPSB3dGQtPnBh cnRfc3RhcnQgKyBwYXJ0c19wZXJfd29ya2VyIC0gMSArCisJCSh3dGQtPndvcmtlcl9pZCA8 IGV4dHJhX3BhcnRzID8gMSA6IDApOworCisJd3RkLT5zdGFydF9yb3cgPSAod3RkLT5wYXJ0 X3N0YXJ0IC0gMSkgKiB3dGQtPnBhcnRfc2l6ZTsKKwl3dGQtPmVuZF9yb3cgPSAod3RkLT5w YXJ0X2VuZCA9PSBudW1fcGFydHMpID8KKwkJdG90YWxfcm93cyA6CisJCXd0ZC0+cGFydF9l bmQgKiB3dGQtPnBhcnRfc2l6ZTsKK30KKworCisvKiBMb2FkIGRhdGEgaW50byBwYXJ0aXRp b25lZCB0YWJsZSAqLworc3RhdGljIHZvaWQKK2xvYWRQYXJ0aXRpb25lZFRhYmxlKFBHY29u biAqY29ubiwgV29ya2VyVGFzayAqIHd0ZCkKK3sKKwlpbnQJCQlwOworCisJZm9yIChwID0g d3RkLT5wYXJ0X3N0YXJ0OyBwIDw9IHd0ZC0+cGFydF9lbmQ7IHArKykKKwl7CisJCUNvcHlU YXJnZXQJdGFyZ2V0OworCQlpbnQ2NAkJcGFydF9zdGFydF9yb3cgPSAocCAtIDEpICogd3Rk LT5wYXJ0X3NpemU7CisJCWludDY0CQlwYXJ0X2VuZF9yb3cgPSAocCA9PSBwYXJ0aXRpb25z KSA/IChuYWNjb3VudHMgKiAoaW50NjQpIHNjYWxlKSA6IChwICogd3RkLT5wYXJ0X3NpemUp OworCQljaGFyCQlwYXJ0aXRpb25fdGFibGVbTkFNRURBVEFMRU5dOworCisJCXNucHJpbnRm KHBhcnRpdGlvbl90YWJsZSwgc2l6ZW9mKHBhcnRpdGlvbl90YWJsZSksICJwZ2JlbmNoX2Fj Y291bnRzXyVkIiwgcCk7CisKKwkJdGFyZ2V0LnRhYmxlX25hbWUgPSBwYXJ0aXRpb25fdGFi bGU7CisJCXRhcmdldC5zdGFydF9yb3cgPSBwYXJ0X3N0YXJ0X3JvdzsKKwkJdGFyZ2V0LmVu ZF9yb3cgPSBwYXJ0X2VuZF9yb3c7CisJCXRhcmdldC51c2VfZnJlZXplID0gdHJ1ZTsKKwor CQlwZXJmb3JtQ29weShjb25uLCB3dGQsICZ0YXJnZXQpOworCX0KK30KKworLyoKKyAqIExv YWQgZGF0YSBpbnRvIG5vbi1wYXJ0aXRpb25lZCB0YWJsZS4KKyAqCisgKiBPbmx5IHdvcmtl ciAwIGNhbiB1c2UgQ09QWSBGUkVFWkUsIGJlY2F1c2UgaXQgaW5oZXJpdHMgdGhlIHRyYW5z YWN0aW9uCisgKiB0aGF0IHRydW5jYXRlZCB0aGUgdGFibGUuICBPdGhlciB3b3JrZXJzIHVz ZSBwbGFpbiBDT1BZIGluIHRoZWlyIG93bgorICogdHJhbnNhY3Rpb25zLgorICovCitzdGF0 aWMgdm9pZAorbG9hZFJlZ3VsYXJUYWJsZShQR2Nvbm4gKmNvbm4sIFdvcmtlclRhc2sgKiB3 dGQpCit7CisJQ29weVRhcmdldAl0YXJnZXQ7CisKKwl0YXJnZXQudGFibGVfbmFtZSA9IHd0 ZC0+dGFibGU7CisJdGFyZ2V0LnN0YXJ0X3JvdyA9IHd0ZC0+c3RhcnRfcm93OworCXRhcmdl dC5lbmRfcm93ID0gd3RkLT5lbmRfcm93OworCXRhcmdldC51c2VfZnJlZXplID0gKHd0ZC0+ d29ya2VyX2lkID09IDApOworCisJcGVyZm9ybUNvcHkoY29ubiwgd3RkLCAmdGFyZ2V0KTsK K30KKworc3RhdGljIFRIUkVBRF9GVU5DX1JFVFVSTl9UWVBFIFRIUkVBRF9GVU5DX0NDCitp bml0V29ya2VyVGhyZWFkKHZvaWQgKmFyZykKK3sKKwlXb3JrZXJUYXNrICp3dGQgPSAoV29y a2VyVGFzayAqKSBhcmc7CisJUEdjb25uCSAgICpjb25uOworCisJLyogQ29ubmVjdGlvbiBp cyBwcmUtY3JlYXRlZCwganVzdCB1c2UgaXQgKi8KKwljb25uID0gd3RkLT5jb247CisKKwkv KgorCSAqIFN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIGZvciB0aGlzIHdvcmtlciwgZXhjZXB0 IGZvciB3b3JrZXIgMCBvbgorCSAqIG5vbi1wYXJ0aXRpb25lZCB0YWJsZXMuIFdvcmtlciAw IGNvbnRpbnVlcyB0aGUgdHJhbnNhY3Rpb24gZnJvbSB0aGUKKwkgKiBtYWluIHRocmVhZCB0 aGF0IGFscmVhZHkgZGlkIHRoZSB0cnVuY2F0ZSAodG8gZW5hYmxlIENPUFkgRlJFRVpFKS4K KwkgKi8KKwlpZiAod3RkLT5wYXJ0X3N0YXJ0ID4gMCB8fCB3dGQtPndvcmtlcl9pZCA+IDAp CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29ubiwgImJlZ2luIik7CisKKwlpZiAod3RkLT5wYXJ0 X3N0YXJ0ID4gMCkKKwl7CisJCWNyZWF0ZVBhcnRpdGlvbnMoY29ubiwgd3RkLT5wYXJ0X3N0 YXJ0LCB3dGQtPnBhcnRfZW5kKTsKKwkJbG9hZFBhcnRpdGlvbmVkVGFibGUoY29ubiwgd3Rk KTsKKwl9CisJZWxzZQorCQlsb2FkUmVndWxhclRhYmxlKGNvbm4sIHd0ZCk7CisKKwlleGVj dXRlU3RhdGVtZW50KGNvbm4sICJjb21taXQiKTsKKworCVRIUkVBRF9GVU5DX1JFVFVSTjsK K30KKworc3RhdGljIHZvaWQKK2luaXRQb3B1bGF0ZVRhYmxlUGFyYWxsZWwoUEdjb25uICpj b25uZWN0aW9uLCBpbnQgbnVtX3dvcmtlcnMsCisJCQkJCQkgIGNvbnN0IGNoYXIgKnRhYmxl LCBpbnQ2NCB0b3RhbF9yb3dzLAorCQkJCQkJICBpbml0Um93TWV0aG9kIGFwcGVuZF9yb3cp Cit7CisJVEhSRUFEX1QgICAqd29ya2VyX3RocmVhZHM7CisJV29ya2VyVGFzayAqd29ya2Vy X2RhdGE7CisJUEdjb25uCSAgKipjb25uZWN0aW9uczsKKwlib29sCQlpc19wYXJ0aXRpb25l ZDsKKwlpbnQJCQlpOworCisJLyogQWxsb2NhdGUgd29ya2VyIGRhdGEgYW5kIHRocmVhZHMg Ki8KKwl3b3JrZXJfdGhyZWFkcyA9IHBnX21hbGxvYyhudW1fd29ya2VycyAqIHNpemVvZihU SFJFQURfVCkpOworCXdvcmtlcl9kYXRhID0gcGdfbWFsbG9jMChudW1fd29ya2VycyAqIHNp emVvZihXb3JrZXJUYXNrKSk7CisJY29ubmVjdGlvbnMgPSBwZ19tYWxsb2MobnVtX3dvcmtl cnMgKiBzaXplb2YoUEdjb25uICopKTsKKworCS8qIFJldXNlIG1haW4gY29ubmVjdGlvbiBm b3Igd29ya2VyIDAsIGNyZWF0ZSBuZXcgb25lcyBmb3Igb3RoZXJzICovCisJY29ubmVjdGlv bnNbMF0gPSBjb25uZWN0aW9uOworCWZvciAoaSA9IDE7IGkgPCBudW1fd29ya2VyczsgaSsr KQorCXsKKwkJY29ubmVjdGlvbnNbaV0gPSBkb0Nvbm5lY3QoKTsKKwkJaWYgKGNvbm5lY3Rp b25zW2ldID09IE5VTEwpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBjb25uZWN0 aW9uIGZvciB3b3JrZXIgJWQiLCBpKTsKKwl9CisKKwkvKiBXb3JrcyBvbmx5IGZvciBwZ2Jl bmNoX2FjY291bnRzIGFuZCB0aGUgcmFuZ2UgcGFydGl0aW9uaW5nIG9wdGlvbiAqLworCWlz X3BhcnRpdGlvbmVkID0gc3RyY21wKHRhYmxlLCAicGdiZW5jaF9hY2NvdW50cyIpID09IDAg JiYgcGFydGl0aW9uX21ldGhvZCA9PSBQQVJUX1JBTkdFOworCisJLyoKKwkgKiBGb3IgcGFy dGl0aW9uZWQgdGFibGVzLCB3ZSBoYW5kbGUgb25seSBudW1fd29ya2VycyA8PSBwYXJ0aXRp b25zIGZvcgorCSAqIG5vdworCSAqLworCWlmIChpc19wYXJ0aXRpb25lZCAmJiBudW1fd29y a2VycyA+IHBhcnRpdGlvbnMpCisJCXBnX2ZhdGFsKCJudW1iZXIgb2YgdGhyZWFkcyAoJWQp IG11c3Qgbm90IGV4Y2VlZCB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgKCVkKSIsCisJCQkJ IG51bV93b3JrZXJzLCBwYXJ0aXRpb25zKTsKKworCWV4ZWN1dGVTdGF0ZW1lbnQoY29ubmVj dGlvbnNbMF0sICJiZWdpbiIpOworCXRydW5jYXRlVGFibGUoY29ubmVjdGlvbnNbMF0sIHRh YmxlKTsKKworCWlmIChpc19wYXJ0aXRpb25lZCkKKwl7CisJCWV4ZWN1dGVTdGF0ZW1lbnQo Y29ubmVjdGlvbnNbMF0sICJjb21taXQiKTsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgImxv YWRpbmcgJXMgd2l0aCAlZCB0aHJlYWRzLi4uXG4iLCB0YWJsZSwgbnVtX3dvcmtlcnMpOwor CisJLyogQ3JlYXRlIGFuZCBzdGFydCB3b3JrZXIgdGhyZWFkcyAqLworCWZvciAoaSA9IDA7 IGkgPCBudW1fd29ya2VyczsgaSsrKQorCXsKKwkJd29ya2VyX2RhdGFbaV0uY29uID0gY29u bmVjdGlvbnNbaV07CisJCXdvcmtlcl9kYXRhW2ldLnRhYmxlID0gdGFibGU7CisJCXdvcmtl cl9kYXRhW2ldLmFwcGVuZF9yb3cgPSBhcHBlbmRfcm93OworCQl3b3JrZXJfZGF0YVtpXS53 b3JrZXJfaWQgPSBpOworCisJCWlmICghaXNfcGFydGl0aW9uZWQpCisJCQlhc3NpZ25Xb3Jr ZXJSb3dzKCZ3b3JrZXJfZGF0YVtpXSwgbnVtX3dvcmtlcnMsIHRvdGFsX3Jvd3MpOworCQll bHNlCisJCXsKKwkJCXdvcmtlcl9kYXRhW2ldLnBhcnRfc2l6ZSA9IChuYWNjb3VudHMgKiAo aW50NjQpIHNjYWxlICsgcGFydGl0aW9ucyAtIDEpIC8gcGFydGl0aW9uczsKKwkJCWFzc2ln bldvcmtlclBhcnRpdGlvbnMoJndvcmtlcl9kYXRhW2ldLCBudW1fd29ya2VycywgdG90YWxf cm93cywKKwkJCQkJCQkJICAgcGFydGl0aW9ucyk7CisJCX0KKworCQllcnJubyA9IFRIUkVB RF9DUkVBVEUoJndvcmtlcl90aHJlYWRzW2ldLCBpbml0V29ya2VyVGhyZWFkLCAmd29ya2Vy X2RhdGFbaV0pOworCQlpZiAoZXJybm8gIT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg Y3JlYXRlIHRocmVhZCBmb3Igd29ya2VyICVkOiAlbSIsIGkpOworCX0KKworCS8qCisJICog V2FpdCBmb3IgYWxsIHdvcmtlcnMgdG8gZmluaXNoLiAgQW55IHdvcmtlciBmYWlsdXJlIGNh bGxzIHBnX2ZhdGFsKCksCisJICogd2hpY2ggdGVybWluYXRlcyB0aGUgcHJvY2Vzcywgc28g aWYgd2UgZ2V0IGhlcmUgYWxsIHdvcmtlcnMgc3VjY2VlZGVkLgorCSAqLworCWZvciAoaSA9 IDA7IGkgPCBudW1fd29ya2VyczsgaSsrKQorCQlUSFJFQURfSk9JTih3b3JrZXJfdGhyZWFk c1tpXSk7CisKKwkvKgorCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIGF0dGFjaCBhbGwg cGFydGl0aW9ucyBub3cgdGhhdCBkYXRhIGlzIGxvYWRlZC4KKwkgKi8KKwlpZiAoaXNfcGFy dGl0aW9uZWQpCisJCWF0dGFjaFBhcnRpdGlvbnMoY29ubmVjdGlvbik7CisKKwkvKgorCSAq IENsZWFuIHVwIHdvcmtlciBjb25uZWN0aW9ucyAoc2tpcCBpbmRleCAwLCB3aGljaCBpcyB0 aGUgbWFpbgorCSAqIGNvbm5lY3Rpb24pCisJICovCisJZm9yIChpID0gMTsgaSA8IG51bV93 b3JrZXJzOyBpKyspCisJCVBRZmluaXNoKGNvbm5lY3Rpb25zW2ldKTsKKworCWZyZWUoY29u bmVjdGlvbnMpOworCWZyZWUod29ya2VyX3RocmVhZHMpOworCWZyZWUod29ya2VyX2RhdGEp OworfQorCiAvKiBxc29ydCBjb21wYXJhdG9yIGZvciBWYXJpYWJsZSBhcnJheSAqLwogc3Rh dGljIGludAogY29tcGFyZVZhcmlhYmxlTmFtZXMoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZv aWQgKnYyKQpAQCAtNDgyNCwxNCArNTEzNiw1MCBAQCBpbml0RHJvcFRhYmxlcyhQR2Nvbm4g KmNvbikKICAqIHdpdGggYSBrbm93biBzaXplLCBzbyB3ZSBjaG9vc2UgdG8gcGFydGl0aW9u IGl0LgogICovCiBzdGF0aWMgdm9pZAotY3JlYXRlUGFydGl0aW9ucyhQR2Nvbm4gKmNvbikK K2NyZWF0ZVBhcnRpdGlvbnMoUEdjb25uICpjb24sIGludCBwYXJ0X3N0YXJ0LCBpbnQgcGFy dF9lbmQpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIHF1ZXJ5OwogCiAJLyogd2UgbXVzdCBoYXZl IHRvIGNyZWF0ZSBzb21lIHBhcnRpdGlvbnMgKi8KIAlBc3NlcnQocGFydGl0aW9ucyA+IDAp OwogCi0JZnByaW50ZihzdGRlcnIsICJjcmVhdGluZyAlZCBwYXJ0aXRpb25zLi4uXG4iLCBw YXJ0aXRpb25zKTsKKwlpbml0UFFFeHBCdWZmZXIoJnF1ZXJ5KTsKKworCWZvciAoaW50IHAg PSBwYXJ0X3N0YXJ0OyBwIDw9IHBhcnRfZW5kOyBwKyspCisJeworCQkvKgorCQkgKiBDcmVh dGUgc3RhbmRhbG9uZSB0YWJsZXMgKG5vdCBhdHRhY2hlZCB0byBwYXJlbnQgeWV0KS4gVGhp cyBhdm9pZHMKKwkJICogQWNjZXNzRXhjbHVzaXZlTG9jayBvbiB0aGUgcGFyZW50IHRhYmxl LCBhbGxvd2luZyBwYXJhbGxlbAorCQkgKiBjcmVhdGlvbi4gVGFibGVzIHdpbGwgYmUgYXR0 YWNoZWQgYWZ0ZXIgZGF0YSBsb2FkaW5nLgorCQkgKi8KKwkJcHJpbnRmUFFFeHBCdWZmZXIo JnF1ZXJ5LAorCQkJCQkJICAiY3JlYXRlJXMgdGFibGUgcGdiZW5jaF9hY2NvdW50c18lZFxu IgorCQkJCQkJICAiICAoYWlkIGludCBub3QgbnVsbCxcbiIKKwkJCQkJCSAgIiAgIGJpZCBp bnQsXG4iCisJCQkJCQkgICIgICBhYmFsYW5jZSBpbnQsXG4iCisJCQkJCQkgICIgICBmaWxs ZXIgY2hhcmFjdGVyKDg0KSlcbiIKKwkJCQkJCSAgIiAgd2l0aCAoZmlsbGZhY3Rvcj0lZCki LAorCQkJCQkJICB1bmxvZ2dlZF90YWJsZXMgPyAiIHVubG9nZ2VkIiA6ICIiLCBwLAorCQkJ CQkJICBmaWxsZmFjdG9yKTsKKworCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgcXVlcnkuZGF0 YSk7CisJfQorCisJdGVybVBRRXhwQnVmZmVyKCZxdWVyeSk7Cit9CisKKy8qCisgKiBBdHRh Y2ggc3RhbmRhbG9uZSBwYXJ0aXRpb24gdGFibGVzIHRvIHRoZSBwYXJlbnQgdGFibGUuCisg KiBDYWxsZWQgYWZ0ZXIgYWxsIGRhdGEgaGFzIGJlZW4gbG9hZGVkIGluIHBhcmFsbGVsLgor ICovCitzdGF0aWMgdm9pZAorYXR0YWNoUGFydGl0aW9ucyhQR2Nvbm4gKmNvbikKK3sKKwlQ UUV4cEJ1ZmZlckRhdGEgcXVlcnk7CisKKwlBc3NlcnQocGFydGl0aW9ucyA+IDApOworCisJ ZnByaW50ZihzdGRlcnIsICJhdHRhY2hpbmcgJWQgcGFydGl0aW9ucy4uLlxuIiwgcGFydGl0 aW9ucyk7CiAKIAlpbml0UFFFeHBCdWZmZXIoJnF1ZXJ5KTsKIApAQCAtNDg0MiwxMCArNTE5 MCw5IEBAIGNyZWF0ZVBhcnRpdGlvbnMoUEdjb25uICpjb24pCiAJCQlpbnQ2NAkJcGFydF9z aXplID0gKG5hY2NvdW50cyAqIChpbnQ2NCkgc2NhbGUgKyBwYXJ0aXRpb25zIC0gMSkgLyBw YXJ0aXRpb25zOwogCiAJCQlwcmludGZQUUV4cEJ1ZmZlcigmcXVlcnksCi0JCQkJCQkJICAi Y3JlYXRlJXMgdGFibGUgcGdiZW5jaF9hY2NvdW50c18lZFxuIgotCQkJCQkJCSAgIiAgcGFy dGl0aW9uIG9mIHBnYmVuY2hfYWNjb3VudHNcbiIKLQkJCQkJCQkgICIgIGZvciB2YWx1ZXMg ZnJvbSAoIiwKLQkJCQkJCQkgIHVubG9nZ2VkX3RhYmxlcyA/ICIgdW5sb2dnZWQiIDogIiIs IHApOworCQkJCQkJCSAgImFsdGVyIHRhYmxlIHBnYmVuY2hfYWNjb3VudHNcbiIKKwkJCQkJ CQkgICIgIGF0dGFjaCBwYXJ0aXRpb24gcGdiZW5jaF9hY2NvdW50c18lZFxuIgorCQkJCQkJ CSAgIiAgZm9yIHZhbHVlcyBmcm9tICgiLCBwKTsKIAogCQkJLyoKIAkJCSAqIEZvciBSQU5H RSwgd2UgdXNlIG9wZW4tZW5kZWQgcGFydGl0aW9ucyBhdCB0aGUgYmVnaW5uaW5nIGFuZApA QCAtNDg2OCwyMSArNTIxNSwxNiBAQCBjcmVhdGVQYXJ0aXRpb25zKFBHY29ubiAqY29uKQog CQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKCZxdWVyeSwgJyknKTsKIAkJfQogCQllbHNlIGlm IChwYXJ0aXRpb25fbWV0aG9kID09IFBBUlRfSEFTSCkKKwkJewogCQkJcHJpbnRmUFFFeHBC dWZmZXIoJnF1ZXJ5LAotCQkJCQkJCSAgImNyZWF0ZSVzIHRhYmxlIHBnYmVuY2hfYWNjb3Vu dHNfJWRcbiIKLQkJCQkJCQkgICIgIHBhcnRpdGlvbiBvZiBwZ2JlbmNoX2FjY291bnRzXG4i CisJCQkJCQkJICAiYWx0ZXIgdGFibGUgcGdiZW5jaF9hY2NvdW50c1xuIgorCQkJCQkJCSAg IiAgYXR0YWNoIHBhcnRpdGlvbiBwZ2JlbmNoX2FjY291bnRzXyVkXG4iCiAJCQkJCQkJICAi ICBmb3IgdmFsdWVzIHdpdGggKG1vZHVsdXMgJWQsIHJlbWFpbmRlciAlZCkiLAotCQkJCQkJ CSAgdW5sb2dnZWRfdGFibGVzID8gIiB1bmxvZ2dlZCIgOiAiIiwgcCwKLQkJCQkJCQkgIHBh cnRpdGlvbnMsIHAgLSAxKTsKKwkJCQkJCQkgIHAsIHBhcnRpdGlvbnMsIHAgLSAxKTsKKwkJ fQogCQllbHNlCQkJCQkvKiBjYW5ub3QgZ2V0IHRoZXJlICovCiAJCQlBc3NlcnQoMCk7CiAK LQkJLyoKLQkJICogUGVyIGRkbGluZm8gaW4gaW5pdENyZWF0ZVRhYmxlcywgZmlsbGZhY3Rv ciBpcyBuZWVkZWQgb24gdGFibGUKLQkJICogcGdiZW5jaF9hY2NvdW50cy4KLQkJICovCi0J CWFwcGVuZFBRRXhwQnVmZmVyKCZxdWVyeSwgIiB3aXRoIChmaWxsZmFjdG9yPSVkKSIsIGZp bGxmYWN0b3IpOwotCiAJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBxdWVyeS5kYXRhKTsKIAl9 CiAKQEAgLTQ5ODAsOCArNTMyMiwxMSBAQCBpbml0Q3JlYXRlVGFibGVzKFBHY29ubiAqY29u KQogCiAJdGVybVBRRXhwQnVmZmVyKCZxdWVyeSk7CiAKLQlpZiAocGFydGl0aW9uX21ldGhv ZCAhPSBQQVJUX05PTkUpCi0JCWNyZWF0ZVBhcnRpdGlvbnMoY29uKTsKKwlpZiAocGFydGl0 aW9uX21ldGhvZCAhPSBQQVJUX05PTkUgJiYgKG50aHJlYWRzID09IDEgfHwgcGFydGl0aW9u X21ldGhvZCA9PSBQQVJUX0hBU0gpKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJjcmVhdGlu ZyAlZCBwYXJ0aXRpb25zLi4uXG4iLCBwYXJ0aXRpb25zKTsKKwkJY3JlYXRlUGFydGl0aW9u cyhjb24sIDEsIHBhcnRpdGlvbnMpOworCX0KIH0KIAogLyoKQEAgLTQ5OTAsMTEgKzUzMzUs NyBAQCBpbml0Q3JlYXRlVGFibGVzKFBHY29ubiAqY29uKQogc3RhdGljIHZvaWQKIGluaXRU cnVuY2F0ZVRhYmxlcyhQR2Nvbm4gKmNvbikKIHsKLQlleGVjdXRlU3RhdGVtZW50KGNvbiwg InRydW5jYXRlIHRhYmxlICIKLQkJCQkJICJwZ2JlbmNoX2FjY291bnRzLCAiCi0JCQkJCSAi cGdiZW5jaF9icmFuY2hlcywgIgotCQkJCQkgInBnYmVuY2hfaGlzdG9yeSwgIgotCQkJCQkg InBnYmVuY2hfdGVsbGVycyIpOworCXRydW5jYXRlVGFibGUoY29uLCAicGdiZW5jaF9hY2Nv dW50cywgcGdiZW5jaF9icmFuY2hlcywgcGdiZW5jaF9oaXN0b3J5LCBwZ2JlbmNoX3RlbGxl cnMiKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUwMjQsOSArNTM2NSw0MSBAQCBpbml0QWNj b3VudChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3VycikKIAkJCQkJICBjdXJyICsg MSwgY3VyciAvIG5hY2NvdW50cyArIDEpOwogfQogCisvKgorICogQXBwZW5kLWJhc2VkIHZl cnNpb25zIHRvIGVuYWJsZSBiYXRjaGluZy4KKyAqIFRoZXNlIHVzZSBhcHBlbmRQUUV4cEJ1 ZmZlciBpbnN0ZWFkIG9mIHByaW50ZlBRRXhwQnVmZmVyIHRvIGFsbG93CisgKiBtdWx0aXBs ZSByb3dzIHRvIGJlIGFjY3VtdWxhdGVkIGluIGEgc2luZ2xlIGJ1ZmZlci4KKyAqLworc3Rh dGljIHZvaWQKK2FwcGVuZEJyYW5jaChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3Vy cikKK3sKKwkvKiAiZmlsbGVyIiBjb2x1bW4gdXNlcyBOVUxMICovCisJYXBwZW5kUFFFeHBC dWZmZXIoc3FsLAorCQkJCQkgIElOVDY0X0ZPUk1BVCAiXHQwXHRcXE5cbiIsCisJCQkJCSAg Y3VyciArIDEpOworfQorCiBzdGF0aWMgdm9pZAotaW5pdFBvcHVsYXRlVGFibGUoUEdjb25u ICpjb24sIGNvbnN0IGNoYXIgKnRhYmxlLCBpbnQ2NCBiYXNlLAotCQkJCSAgaW5pdFJvd01l dGhvZCBpbml0X3JvdykKK2FwcGVuZFRlbGxlcihQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50 NjQgY3VycikKK3sKKwkvKiAiZmlsbGVyIiBjb2x1bW4gdXNlcyBOVUxMICovCisJYXBwZW5k UFFFeHBCdWZmZXIoc3FsLAorCQkJCQkgIElOVDY0X0ZPUk1BVCAiXHQiIElOVDY0X0ZPUk1B VCAiXHQwXHRcXE5cbiIsCisJCQkJCSAgY3VyciArIDEsIGN1cnIgLyBudGVsbGVycyArIDEp OworfQorCitzdGF0aWMgdm9pZAorYXBwZW5kQWNjb3VudChQUUV4cEJ1ZmZlckRhdGEgKnNx bCwgaW50NjQgY3VycikKK3sKKwkvKiAiZmlsbGVyIiBjb2x1bW4gZGVmYXVsdHMgdG8gYmxh bmsgcGFkZGVkIGVtcHR5IHN0cmluZyAqLworCWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwKKwkJ CQkJICBJTlQ2NF9GT1JNQVQgIlx0IiBJTlQ2NF9GT1JNQVQgIlx0MFx0XG4iLAorCQkJCQkg IGN1cnIgKyAxLCBjdXJyIC8gbmFjY291bnRzICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitp bml0UG9wdWxhdGVUYWJsZVNlcmlhbChQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAqdGFibGUs IGludDY0IGJhc2UsCisJCQkJCQlpbml0Um93TWV0aG9kIGluaXRfcm93KQogewogCWludAkJ CW47CiAJaW50NjQJCWs7CkBAIC01MDM0LDcgKzU0MDcsNyBAQCBpbml0UG9wdWxhdGVUYWJs ZShQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAqdGFibGUsIGludDY0IGJhc2UsCiAJaW50CQkJ cHJldl9jaGFycyA9IDA7CiAJUEdyZXN1bHQgICAqcmVzOwogCVBRRXhwQnVmZmVyRGF0YSBz cWw7Ci0JY2hhcgkJY29weV9zdGF0ZW1lbnRbMjU2XTsKKwljaGFyCQljb3B5X3N0YXRlbWVu dFtOQU1FREFUQUxFTiArIDMyXTsKIAljb25zdCBjaGFyICpjb3B5X3N0YXRlbWVudF9mbXQg PSAiY29weSAlcyBmcm9tIHN0ZGluIjsKIAlpbnQ2NAkJdG90YWwgPSBiYXNlICogc2NhbGU7 CiAKQEAgLTUxNDMsNiArNTUxNiwyNyBAQCBpbml0UG9wdWxhdGVUYWJsZShQR2Nvbm4gKmNv biwgY29uc3QgY2hhciAqdGFibGUsIGludDY0IGJhc2UsCiAJdGVybVBRRXhwQnVmZmVyKCZz cWwpOwogfQogCitzdGF0aWMgdm9pZAoraW5pdFBvcHVsYXRlVGFibGUoUEdjb25uICpjb24s IGNvbnN0IGNoYXIgKnRhYmxlLCBpbnQ2NCB0b3RhbF9yb3dzLAorCQkJCSAgaW5pdFJvd01l dGhvZCBpbml0X3JvdywgaW5pdFJvd01ldGhvZCBhcHBlbmRfcm93LCBib29sIHVzZV9wYXJh bGxlbCkKK3sKKwlib29sCQlpc19hY2NvdW50cyA9IChzdHJjbXAodGFibGUsICJwZ2JlbmNo X2FjY291bnRzIikgPT0gMCk7CisKKwlpZiAodXNlX3BhcmFsbGVsICYmIG50aHJlYWRzID4g MSkKKwkJaW5pdFBvcHVsYXRlVGFibGVQYXJhbGxlbChjb24sIG50aHJlYWRzLCB0YWJsZSwg dG90YWxfcm93cyAqIHNjYWxlLCBhcHBlbmRfcm93KTsKKwllbHNlCisJeworCQkvKgorCQkg KiBGb3Igc2luZ2xlLXRocmVhZGVkIG1vZGUgd2l0aCBwYXJ0aXRpb25lZCB0YWJsZXMsIGF0 dGFjaCBwYXJ0aXRpb25zCisJCSAqIGJlZm9yZSBsb2FkaW5nIGRhdGEgc28gQ09QWSB0byB0 aGUgcGFyZW50IHRhYmxlIGNhbiByb3V0ZSByb3dzLgorCQkgKi8KKwkJaWYgKGlzX2FjY291 bnRzICYmIHBhcnRpdGlvbnMgPiAwICYmIHBhcnRpdGlvbl9tZXRob2QgIT0gUEFSVF9OT05F KQorCQkJYXR0YWNoUGFydGl0aW9ucyhjb24pOworCisJCWluaXRQb3B1bGF0ZVRhYmxlU2Vy aWFsKGNvbiwgdGFibGUsIHRvdGFsX3Jvd3MsIGluaXRfcm93KTsKKwl9Cit9CisKIC8qCiAg KiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJsZXMgd2l0aCBzb21lIGRhdGEgZ2VuZXJhdGVkIGFu ZCBzZW50IGZyb20gdGhlIGNsaWVudC4KICAqCkBAIC01MTU1LDggKzU1NDksOSBAQCBpbml0 R2VuZXJhdGVEYXRhQ2xpZW50U2lkZShQR2Nvbm4gKmNvbikKIAlmcHJpbnRmKHN0ZGVyciwg ImdlbmVyYXRpbmcgZGF0YSAoY2xpZW50LXNpZGUpLi4uXG4iKTsKIAogCS8qCi0JICogd2Ug ZG8gYWxsIG9mIHRoaXMgaW4gb25lIHRyYW5zYWN0aW9uIHRvIGVuYWJsZSB0aGUgYmFja2Vu ZCdzCi0JICogZGF0YS1sb2FkaW5nIG9wdGltaXphdGlvbnMKKwkgKiBGb3Igc2luZ2xlLXRo cmVhZGVkIG1vZGUsIGRvIGV2ZXJ5dGhpbmcgaW4gb25lIHRyYW5zYWN0aW9uLiBGb3IKKwkg KiBtdWx0aS10aHJlYWRlZCBtb2RlLCBkbyBicmFuY2hlcy90ZWxsZXJzL2hpc3RvcnkgaW4g b25lIHRyYW5zYWN0aW9uLAorCSAqIHRoZW4gYWNjb3VudHMgaW4gcGFyYWxsZWwgKGVhY2gg dGhyZWFkIGhhbmRsZXMgaXRzIG93biB0cmFuc2FjdGlvbikuCiAJICovCiAJZXhlY3V0ZVN0 YXRlbWVudChjb24sICJiZWdpbiIpOwogCkBAIC01MTY3LDExICs1NTYyLDE2IEBAIGluaXRH ZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAqY29uKQogCSAqIGZpbGwgYnJhbmNoZXMs IHRlbGxlcnMsIGFjY291bnRzIGluIHRoYXQgb3JkZXIgaW4gY2FzZSBmb3JlaWduIGtleXMK IAkgKiBhbHJlYWR5IGV4aXN0CiAJICovCi0JaW5pdFBvcHVsYXRlVGFibGUoY29uLCAicGdi ZW5jaF9icmFuY2hlcyIsIG5icmFuY2hlcywgaW5pdEJyYW5jaCk7Ci0JaW5pdFBvcHVsYXRl VGFibGUoY29uLCAicGdiZW5jaF90ZWxsZXJzIiwgbnRlbGxlcnMsIGluaXRUZWxsZXIpOwot CWluaXRQb3B1bGF0ZVRhYmxlKGNvbiwgInBnYmVuY2hfYWNjb3VudHMiLCBuYWNjb3VudHMs IGluaXRBY2NvdW50KTsKKwlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX2JyYW5j aGVzIiwgbmJyYW5jaGVzLCBpbml0QnJhbmNoLCBhcHBlbmRCcmFuY2gsIGZhbHNlKTsKKwlp bml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCBudGVsbGVycywgaW5p dFRlbGxlciwgYXBwZW5kVGVsbGVyLCBmYWxzZSk7CiAKLQlleGVjdXRlU3RhdGVtZW50KGNv biwgImNvbW1pdCIpOworCWlmIChudGhyZWFkcyA+IDEpCisJCWV4ZWN1dGVTdGF0ZW1lbnQo Y29uLCAiY29tbWl0Iik7CisKKwlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX2Fj Y291bnRzIiwgbmFjY291bnRzLCBpbml0QWNjb3VudCwgYXBwZW5kQWNjb3VudCwgbnRocmVh ZHMgPiAxKTsKKworCWlmIChudGhyZWFkcyA9PSAxKQorCQlleGVjdXRlU3RhdGVtZW50KGNv biwgImNvbW1pdCIpOwogfQogCiAvKgpAQCAtNTE5Nyw2ICs1NTk3LDkgQEAgaW5pdEdlbmVy YXRlRGF0YVNlcnZlclNpZGUoUEdjb25uICpjb24pCiAJLyogdHJ1bmNhdGUgYXdheSBhbnkg b2xkIGRhdGEgKi8KIAlpbml0VHJ1bmNhdGVUYWJsZXMoY29uKTsKIAorCWlmIChwYXJ0aXRp b25zID4gMCAmJiBwYXJ0aXRpb25fbWV0aG9kICE9IFBBUlRfTk9ORSkKKwkJYXR0YWNoUGFy dGl0aW9ucyhjb24pOworCiAJaW5pdFBRRXhwQnVmZmVyKCZzcWwpOwogCiAJcHJpbnRmUFFF eHBCdWZmZXIoJnNxbCwKQEAgLTY5NDQsNyArNzM0Nyw2IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCWluaXRpYWxpemF0aW9uX29wdGlvbl9zZXQgPSB0cnVlOwogCQkJ CWJyZWFrOwogCQkJY2FzZSAnaic6CQkJLyogam9icyAqLwotCQkJCWJlbmNobWFya2luZ19v cHRpb25fc2V0ID0gdHJ1ZTsKIAkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAi LWovLS1qb2JzIiwgMSwgSU5UX01BWCwKIAkJCQkJCQkJCSAgJm50aHJlYWRzKSkKIAkJCQl7 CkBAIC03MTc2LDcgKzc1NzgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkg KiBvcHRpbWl6YXRpb247IHRocm90dGxlX2RlbGF5IGlzIGNhbGN1bGF0ZWQgaW5jb3JyZWN0 bHkgYmVsb3cgaWYgc29tZQogCSAqIHRocmVhZHMgaGF2ZSBubyBjbGllbnRzIGFzc2lnbmVk IHRvIHRoZW0uKQogCSAqLwotCWlmIChudGhyZWFkcyA+IG5jbGllbnRzKQorCWlmIChudGhy ZWFkcyA+IG5jbGllbnRzICYmICFpc19pbml0X21vZGUpCiAJCW50aHJlYWRzID0gbmNsaWVu dHM7CiAKIAkvKgpAQCAtNzIyMSw2ICs3NjIzLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCWlmIChwYXJ0aXRpb25zID4gMCAmJiBwYXJ0aXRpb25fbWV0aG9kID09IFBB UlRfTk9ORSkKIAkJCXBhcnRpdGlvbl9tZXRob2QgPSBQQVJUX1JBTkdFOwogCisJCWlmIChw YXJ0aXRpb25fbWV0aG9kID09IFBBUlRfSEFTSCAmJiBudGhyZWFkcyA+IDEpCisJCQlwZ19m YXRhbCgicGFyYWxsZWwgZGF0YSBsb2FkaW5nICgtaikgaXMgbm90IHN1cHBvcnRlZCB3aXRo IGhhc2ggcGFydGl0aW9uaW5nIik7CisKIAkJaWYgKGluaXRpYWxpemVfc3RlcHMgPT0gTlVM TCkKIAkJCWluaXRpYWxpemVfc3RlcHMgPSBwZ19zdHJkdXAoREVGQVVMVF9JTklUX1NURVBT KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9z ZXJ2ZXIucGwgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5w bAppbmRleCBiNzY4NWVhNWQyLi43YjIxNGM5MDMwIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn YmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbAorKysgYi9zcmMvYmluL3BnYmVu Y2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbApAQCAtMjE3LDYgKzIxNyw1MSBAQCBt eSAkbnRocmVhZHMgPSAyOwogCSRudGhyZWFkcyA9IDEgaWYgJHN0ZGVyciA9fiBtL3RocmVh ZHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS87CiB9CiAKKyMgVGVzdCBw YXJhbGxlbCBpbml0aWFsaXphdGlvbiAocmVxdWlyZXMgdGhyZWFkIHN1cHBvcnQpCitpZiAo JG50aHJlYWRzID4gMSkKK3sKKwkjIFBhcmFsbGVsIGluaXQgd2l0aG91dCBwYXJ0aXRpb25z CisJJG5vZGUtPnBnYmVuY2goCisJCSctaSAtaiAyIC0tc2NhbGU9MScsCisJCTAsCisJCVtx cnteJH1dLAorCQlbCisJCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQkJcXJ7bG9hZGluZyBw Z2JlbmNoX2FjY291bnRzIHdpdGggMiB0aHJlYWRzfSwKKwkJCXFye3ZhY3V1bWluZ30sCisJ CQlxcntjcmVhdGluZyBwcmltYXJ5IGtleXN9LAorCQkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQg cyB9CisJCV0sCisJCSdwZ2JlbmNoIHBhcmFsbGVsIGluaXRpYWxpemF0aW9uIHdpdGhvdXQg cGFydGl0aW9ucycpOworCisJY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ3BhcmFsbGVsLW5v LXBhcnRpdGlvbnMnKTsKKworCSMgUGFyYWxsZWwgaW5pdCB3aXRoIHJhbmdlIHBhcnRpdGlv bnMKKwkkbm9kZS0+cGdiZW5jaCgKKwkJJy1pIC1qIDIgLS1zY2FsZT0xIC0tcGFydGl0aW9u cz00IC0tcGFydGl0aW9uLW1ldGhvZD1yYW5nZScsCisJCTAsCisJCVtxcnteJH1dLAorCQlb CisJCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQkJcXJ7bG9hZGluZyBwZ2JlbmNoX2FjY291 bnRzIHdpdGggMiB0aHJlYWRzfSwKKwkJCXFye2F0dGFjaGluZyA0IHBhcnRpdGlvbnN9LAor CQkJcXJ7dmFjdXVtaW5nfSwKKwkJCXFye2NyZWF0aW5nIHByaW1hcnkga2V5c30sCisJCQlx cntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwkJXSwKKwkJJ3BnYmVuY2ggcGFyYWxsZWwgaW5p dGlhbGl6YXRpb24gd2l0aCByYW5nZSBwYXJ0aXRpb25zJyk7CisKKwljaGVja19kYXRhX3N0 YXRlKCRub2RlLCAncGFyYWxsZWwtcmFuZ2UtcGFydGl0aW9ucycpOworCisJIyBFcnJvcjog bW9yZSB0aHJlYWRzIHRoYW4gcGFydGl0aW9ucworCSRub2RlLT5wZ2JlbmNoKAorCQknLWkg LWogMyAtLXNjYWxlPTEgLS1wYXJ0aXRpb25zPTIgLS1wYXJ0aXRpb24tbWV0aG9kPXJhbmdl JywKKwkJMSwKKwkJW3Fye14kfV0sCisJCVtxcntudW1iZXIgb2YgdGhyZWFkcyBcKDNcKSBt dXN0IG5vdCBleGNlZWQgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIFwoMlwpfV0sCisJCSdw Z2JlbmNoIHBhcmFsbGVsIGluaXQgZmFpbHMgd2hlbiB0aHJlYWRzIGV4Y2VlZCBwYXJ0aXRp b25zJyk7Cit9CisKICMgcnVuIGN1c3RvbSBzY3JpcHRzCiAkbm9kZS0+cGdiZW5jaCgKIAki LXQgMTAwIC1jIDEgLWogJG50aHJlYWRzIC1NIHByZXBhcmVkIC1uIiwKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdiZW5jaC90LzAwMl9wZ2JlbmNoX25vX3NlcnZlci5wbCBiL3NyYy9iaW4v cGdiZW5jaC90LzAwMl9wZ2JlbmNoX25vX3NlcnZlci5wbAppbmRleCBlNjk0ZTllZjBmLi5k NjdmMjZlNDIyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvdC8wMDJfcGdiZW5jaF9u b19zZXJ2ZXIucGwKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVuY2hfbm9fc2Vy dmVyLnBsCkBAIC0xODcsNiArMTg3LDExIEBAIG15IEBvcHRpb25zID0gKAogCQknLWkgLS1w YXJ0aXRpb24tbWV0aG9kPWhhc2gnLAogCQlbcXJ7cGFydGl0aW9uLW1ldGhvZCByZXF1aXJl cyBncmVhdGVyIHRoYW4gemVybyAtLXBhcnRpdGlvbnN9XQogCV0sCisJWworCQkncGFyYWxs ZWwgZGF0YSBsb2FkaW5nIHdpdGggaGFzaCBwYXJ0aXRpb25pbmcnLAorCQknLWkgLWogMiAt LXBhcnRpdGlvbnM9NCAtLXBhcnRpdGlvbi1tZXRob2Q9aGFzaCcsCisJCVtxcntwYXJhbGxl bCBkYXRhIGxvYWRpbmcgXCgtalwpIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBoYXNoIHBhcnRp dGlvbmluZ31dCisJXSwKIAlbCiAJCSdiYWQgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMnLAog CQknLS1tYXgtdHJpZXMgLTEwJywKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --------------zxnLflPgEq3snl3exkZu08zB--