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 1wVZYW-0023Wn-1F for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Jun 2026 18:46:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wVZYV-00Drjv-0G for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Jun 2026 18:46:07 +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 1wVZYU-00Drjm-2L for pgsql-hackers@lists.postgresql.org; Fri, 05 Jun 2026 18:46:06 +0000 Received: from mail-dy1-x1335.google.com ([2607:f8b0:4864:20::1335]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wVZYS-00000001TKl-0iQK for pgsql-hackers@lists.postgresql.org; Fri, 05 Jun 2026 18:46:06 +0000 Received: by mail-dy1-x1335.google.com with SMTP id 5a478bee46e88-304f590dd91so2540154eec.0 for ; Fri, 05 Jun 2026 11:46:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780685162; cv=none; d=google.com; s=arc-20240605; b=ZsPNJ1DlTQqLZAUtgMuTR7RS4YdEdK87Gj3EfJkxNMdYF0qPXCtRB4Iby75VUeftnd 1DeTA8wGn6mhEEkMoz6y9nIweSh5ltqjyKiboH/un3YPuOhq+W7Q+JXJZ+Dm+RMs8Ii+ luO0bpeuJlrumjEgfLdnWhGIZJJz5VN2XzJI6iyzbhh9vaOFpjZk6FrsJwrG30QS5Cpw mAcVvvTKJHYWAc343n4/YUW+0BYeQHyw1AT7fzUvkKl26cKHyGQeXkWxaEf6S673LrP0 5kDn7Bmg0kOlDnqnR8qu7TnrEDPXVR4HNyq+Iyv2q7L9nhSZVmJ9cQMioLrhzjDxOkDV q07g== 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=L3BtFx15V8XJaxFUkIFRLJDss2x+DhwyxIwnLbCevKc=; fh=W6Vy9sYdd8eu2A74TtsTdDLM8O1p2hacrvBNQuLi/Go=; b=Nyeg0L0/GheJfGcQLtvveScawG5PN/+Xuh8xSS+nRh7WJtv/3fxUkgNV+ryfhDIZ0e 7gTOGrnSjtr5aPIvzYqoFhlNaJ24bOrEzrGkpQKX6FxgVEm5gPWw1LnrFEK2vg2KDp3O fA2RZLq6OMewdESTKu067bDZyegmdjTcgzzKJleIySqT/vmkDAL9zoQiBZsN6AkOcHmn usZ28gsQS7XH1ZkaUqZlG/ncDESpN/4XttHuY8fmFSGOkRmYqlyLZ7JOrL6xqdAlytg8 wV5X3gZK1/OAgbvEq7djByPkIwOTK3lRjuvz+X0HC+/ASKuKRJSqkK1SbvlxLkM+sSXr M5kg==; darn=lists.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=1780685162; x=1781289962; darn=lists.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=L3BtFx15V8XJaxFUkIFRLJDss2x+DhwyxIwnLbCevKc=; b=BpA1+of5CmGkg7GyPNFnKX3nZS1BvpfaQq+mI3dIZ8EQt4/fp/Hqlm5MtXPz4IaqgW NrZPRTzZXkyJXKV6+AumtXfY2AiS+oEEWlAhC4D2/HMWH9szBSW80bj/LVaWMtfGnN/a C41ICgDvMEziV5B+HDD7OISIeAnhyX7a+IEnPjbxTiOhWrsfZij5mlMkzqxtn6pwdpuD ynQC8WJgumoabnAfxdussTghqmUAVCWhypBEogUY+rWDLKFPT66DV/BfpNR1g84C2Qr1 wvSq3jgch7nLoXVQLuYzC5tfHRm/KTad8Ingz+eJMmXy83CiHKdbUSBczNBwIScZNfSj KJyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780685162; x=1781289962; 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=L3BtFx15V8XJaxFUkIFRLJDss2x+DhwyxIwnLbCevKc=; b=r6dZgWVvq0yhyIK3jnyWqr9fXujupZKtsXD7QvApD0AQOgq9mSsJ4iaBROOIhgUnTn SJc8OOwL7coOCxlc6PXygnw828hCSfrbnh6N3aUzb7XbCNAzLI8rb1TW2W9SSQHudkLm MJK9ipmgvLqKpkGB1xUHPSmTuwz2a9jEvIF7y732l6gk0ujC4sl9/QI5HXncoLc7YE6Y nUHneRQ0bKzx2XVU0UzDFM1JPiQmI8rtJoRGr+VUWZUFbzAlo1QUEWfZOJKKRfllpdMF r8jWXdDclicvlmr9D1tFCPmO/E/Mjl5eOa4KB9F3yusT63n46uR86siLMMFd8UtagWvq 8nzg== X-Gm-Message-State: AOJu0YxFtdDKe3DGkS8BziuVTeK43FtAet4wSy3t6wH8VMqEqnaXOsX5 MsnkE96qLlRzyX7SP6DUyGQGKWvmM5u5V/5lIGz85o+v0vyEAZuLgHrJ8emRofIPGgfIvtNlfFL EpEkz77HXCPVZ/wiDLFe52B100P3OQ9Q= X-Gm-Gg: Acq92OGqgJMA+pMWLoJw4IfmOCvxKYf69uquH6E1btbRSjSJc8ZJpG/h1leG79CyrLY xCKtZvIGhQ8K21fzTFriQVMgRhb/VDFVu18ZQNWSiyF/OMdyNxu9DaRDbXCA+5EjPzLTX6eCHrr EIofidSxE1m2HMKXrtfBj8WzA71Rv9EpB1vtH8GMyS0wIsdlVWom5ZCXcTzIYNlI8YMGPShSA/4 LJSonHuyRzcDI/JtT+Stpy0oT/NNPCR34tPextemA/KC7sa8oo9TmsLpg69SWJ/YIdn7AVvgwsM Xm7Pn2OWWfuvM1ezX70udUgO4p+J2qIhDerc7cfvEaercYZkBUBc X-Received: by 2002:a05:7300:cd97:b0:304:997c:d4b6 with SMTP id 5a478bee46e88-3077b721517mr2343098eec.17.1780685161415; Fri, 05 Jun 2026 11:46:01 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Baji Shaik Date: Fri, 5 Jun 2026 13:45:49 -0500 X-Gm-Features: AVVi8CcNAKRvP5wj9l71__K1V70kQinm8K-K1V8XXWuMifOKwrpqNFgTgL6gz8s Message-ID: Subject: Re: [PATCH] Add regression tests for btree skip scan support functions To: Michael Paquier Cc: pgsql-hackers@lists.postgresql.org, pg@bowt.ie Content-Type: multipart/mixed; boundary="0000000000008151460653861270" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008151460653861270 Content-Type: multipart/alternative; boundary="000000000000815145065386126e" --000000000000815145065386126e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jun 4, 2026 at 10:32=E2=80=AFPM Michael Paquier wrote: > Could you add this patch to the next commit fest please at [1]? > That's to make sure that we don't forget about it when v20 opens for > business. I am sure that nobody would complain it this gets applied > on HEAD today (argument that this is an open item for v19 due to > v19?), but that's a coverage improvement so let's just do that once > REL_19_STABLE is forked. > > Perhaps we could do something for the overflow cases in the increment > functions of oid, oid8, char, int8 and int4. int2_increment is > lacking entirely. For the decrement functions, we still lack > something for the overflow of int2, int8, char. You can run a > coverage report to check all that: > https://www.postgresql.org/docs/devel/regress-coverage.htm > l Thanks for the review. Added to commitfest 59 today [1] and posting v2 which addresses the coverage gaps. v2 adds: - basic int2_increment coverage (was lacking entirely as you noted) - boundary tables for int2/int4/int8/oid/oid8/"char" around MIN/MAX, with forward and backward Index Only Scans, exercising the *_increment overflow / *_decrement underflow comparisons Coverage on src/backend/access/nbtree/nbtcompare.c (--enable-coverage build, regression suite): master: 58.75 % lines, 63.10 % branches taken at least once v1: 89.06 % lines, 73.81 % branches taken at least once v2: 90.94 % lines, 82.14 % branches taken at least once A couple of *_increment overflow code blocks (the body of the "if (val =3D=3D TYPE_MAX)" check) still read as unreached. The scan walks the rows at the boundary value and exits without probing past the end, so the increment function gets called with intermediate values rather than the boundary value itself. The boundary comparison is exercised either way, which is what the +8 pp branch delta over v1 reflects. If you or anyone else has ideas for forcing the few remaining branches I'm happy to extend. All 245 regression tests pass; all 129 isolation tests pass. Patch attached. [1]: https://commitfest.postgresql.org/patch/6852/ Thanks, Baji Shaik --000000000000815145065386126e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Thu, Jun 4, = 2026 at 10:32=E2=80=AFPM Michael Paquier <michael@paquier.xyz> wrote:
Could you add this patch to the next commit fest please at [1]?
That's to make sure that we don't forget about it when v20 opens fo= r
business.=C2=A0 I am sure that nobody would complain it this gets applied on HEAD today (argument that this is an open item for v19 due to
v19?), but that's a coverage improvement so let's just do that once=
REL_19_STABLE is forked.

Perhaps we could do something for the overflow cases in the increment
functions of oid, oid8, char, int8 and int4.=C2=A0 int2_increment is
lacking entirely.=C2=A0 For the decrement functions, we still lack
something for the overflow of int2, int8, char.=C2=A0 You can run a
coverage report to check all that:
https://www.postgresql.org/docs/devel/reg= ress-coverage.html

Thanks for the review.=C2= =A0 Added to commitfest 59 today [1] and posting v2
which addresses the = coverage gaps.

v2 adds:

=C2=A0 - basic int2_increment coverag= e (was lacking entirely as you noted)
=C2=A0 - boundary tables for int2/= int4/int8/oid/oid8/"char" around MIN/MAX,
=C2=A0 =C2=A0 with f= orward and backward Index Only Scans, exercising the
=C2=A0 =C2=A0 *_inc= rement overflow / *_decrement underflow comparisons

Coverage on src/= backend/access/nbtree/nbtcompare.c (--enable-coverage
build, regression = suite):

=C2=A0 master: =C2=A058.75 % lines, 63.10 % branches taken a= t least once
=C2=A0 v1: =C2=A0 =C2=A0 =C2=A089.06 % lines, 73.81 % branc= hes taken at least once
=C2=A0 v2: =C2=A0 =C2=A0 =C2=A090.94 % lines, 82= .14 % branches taken at least once

A couple of *_increment overflow = code blocks (the body of the
"if (val =3D=3D TYPE_MAX)" check)= still read as unreached. The scan
walks the rows at the boundary value = and exits without probing past
the end, so the increment function gets c= alled with intermediate
values rather than the boundary value itself.=C2= =A0 The boundary
comparison is exercised either way, which is what the += 8 pp branch
delta over v1 reflects.=C2=A0 If you or anyone else has idea= s for forcing
the few remaining branches I'm happy to extend.
All 245 regression tests pass; all 129 isolation tests pass.

Patch = attached.

<= div class=3D"gmail_quote gmail_quote_container">[1]:=C2=A0https://commitfest.postgresql.org/= patch/6852/

Thanks,
Baji Shaik
=C2=A0
--000000000000815145065386126e-- --0000000000008151460653861270 Content-Type: application/octet-stream; name="v2-0001-Add-regression-tests-for-btree-skip-scan-support-fun.patch" Content-Disposition: attachment; filename="v2-0001-Add-regression-tests-for-btree-skip-scan-support-fun.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq19xk650 RnJvbSA0ODQ2ZmMzMzQwZmVlMTllYjkyN2UyMWI2OWQ2ODA3NGI2NWRhY2YyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCYWppIFNoYWlrIDxiYWppLnBnZGV2QGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCA1IEp1biAyMDI2IDEzOjQxOjQyIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIHJl Z3Jlc3Npb24gdGVzdHMgZm9yIGJ0cmVlIHNraXAgc2NhbiBzdXBwb3J0IGZ1bmN0aW9ucwoKU2V2 ZXJhbCBidHJlZSBza2lwLXNjYW4gc3VwcG9ydCBmdW5jdGlvbnMgaW4gbmJ0Y29tcGFyZS5jIGxh Y2sKcmVncmVzc2lvbiBjb3ZlcmFnZTogYnRpbnQ4c2tpcHN1cHBvcnQsIGJ0b2lkOHNraXBzdXBw b3J0LApidGJvb2xza2lwc3VwcG9ydCwgYnRjaGFyc2tpcHN1cHBvcnQsIGludDJfaW5jcmVtZW50 LCBhbmQgdGhlCm92ZXJmbG93L3VuZGVyZmxvdyBicmFuY2hlcyBvZiBpbnQyL2ludDQvaW50OC9v aWQvb2lkOC9jaGFyCmluY3JlbWVudC9kZWNyZW1lbnQgaGVscGVycy4KCkFkZCBjb3ZlcmFnZSBi eToKCiAgLSBleGVyY2lzaW5nIGVhY2ggcGVyLXR5cGUgc2tpcHN1cHBvcnQgcGx1cyB0aGUgaW5j cmVtZW50L2RlY3JlbWVudAogICAgaGVscGVycyB2aWEgSW5kZXggT25seSBTY2FuIHdpdGggcHJl ZGljYXRlIG9uIHRoZSBub24tbGVhZGluZwogICAgY29sdW1uIG9mIGEgbXVsdGktY29sdW1uIGJ0 cmVlIGluZGV4OwoKICAtIGJ1aWxkaW5nIGJvdW5kYXJ5IHRhYmxlcyAocm93cyBhdCBJTlQqX01B WCwgSU5UKl9NSU4sIE9JRF9NQVgsCiAgICBPSUQ4X01BWCwgYnl0ZSAwLzI1NSBmb3IgImNoYXIi LCBldGMuKSBhbmQgcnVubmluZyBmb3J3YXJkL2JhY2t3YXJkCiAgICBJbmRleCBPbmx5IFNjYW5z LCB0byBleGVyY2lzZSB0aGUgKl9pbmNyZW1lbnQgb3ZlcmZsb3cgYW5kCiAgICAqX2RlY3JlbWVu dCB1bmRlcmZsb3cgcGF0aHMuCgpDb3ZlcmFnZSBvbiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idGNvbXBhcmUuYyBpbXByb3ZlcyBhcwpmb2xsb3dzIChyZWdyZXNzaW9uIHRlc3RzLCAtLWVu YWJsZS1jb3ZlcmFnZSBidWlsZCk6CgogIG1hc3RlcjogIDU4Ljc1ICUgbGluZXMsIDYzLjEwICUg YnJhbmNoZXMKICBwYXRjaGVkOiA5MC45NCAlIGxpbmVzLCA4Mi4xNCAlIGJyYW5jaGVzCgpTb21l IGJvdW5kYXJ5IGJyYW5jaGVzIHJlbWFpbiB1bnJlYWNoZWQgYmVjYXVzZSBza2lwLXNjYW4gdGVy bWluYXRpb24KZG9lcyBub3QgYWx3YXlzIHByb2JlIHBhc3QgdGhlIHJhbmdlIGVuZDsgdGhlIHBh dGNoIHN0aWxsIGV4ZXJjaXNlcwp0aGUgY29tcGFyaXNvbiBldmFsdWF0aW5nIHRvIHRoZSBib3Vu ZGFyeSB2YWx1ZSwgaW5jcmVhc2luZyBicmFuY2gKY292ZXJhZ2Ugc3Vic3RhbnRpYWxseS4KCk5v IGNvZGUgY2hhbmdlIGluIHRoaXMgcGF0Y2ggLS0gcmVncmVzc2lvbiBjb3ZlcmFnZSBvbmx5LgoK QXV0aG9yOiBCYWppIFNoYWlrIDxiYWppLnBnZGV2QGdtYWlsLmNvbT4KLS0tCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2J0cmVlX2luZGV4Lm91dCB8IDUwMiArKysrKysrKysrKysrKysrKysr KysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9pbmRleC5zcWwgICAgICB8IDE4MiArKysr KysrKwogMiBmaWxlcyBjaGFuZ2VkLCA2ODQgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9idHJlZV9pbmRleC5vdXQKaW5kZXggMjFkYzliNTc4M2EuLjM1NGQwZDliY2Q5 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX2luZGV4Lm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX2luZGV4Lm91dApAQCAtNzM2LDMg KzczNiw1MDUgQEAgQUxURVIgSU5ERVggYnRyZWVfcGFydF9pZHggQUxURVIgQ09MVU1OIGlkIFNF VCAobl9kaXN0aW5jdD0xMDApOwogRVJST1I6ICBBTFRFUiBhY3Rpb24gQUxURVIgQ09MVU1OIC4u LiBTRVQgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiByZWxhdGlvbiAiYnRyZWVfcGFydF9pZHgiCiBE RVRBSUw6ICBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBwYXJ0aXRpb25lZCBp bmRleGVzLgogRFJPUCBUQUJMRSBidHJlZV9wYXJ0OworLS0KKy0tIFRlc3QgYnRyZWUgc2tpcCBz Y2FuIHN1cHBvcnQgZm9yIHR5cGVzIHRoYXQgY3VycmVudGx5IGxhY2sgdGVzdCBjb3ZlcmFnZQor LS0gKGV4ZXJjaXNlcyBidFhYWHNraXBzdXBwb3J0LCBYWFhfZGVjcmVtZW50LCBYWFhfaW5jcmVt ZW50IGZ1bmN0aW9ucykKKy0tCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CitTRVQgZW5hYmxl X2JpdG1hcHNjYW4gPSBvZmY7CistLSBpbnQ4OiBidGludDhza2lwc3VwcG9ydCwgaW50OF9kZWNy ZW1lbnQsIGludDhfaW5jcmVtZW50CitDUkVBVEUgVEFCTEUgc2tpcF9pbnQ4IChhIGludDgsIGIg aW50NCk7CitJTlNFUlQgSU5UTyBza2lwX2ludDggU0VMRUNUIGkgLyAxMCwgaSAlIDEwIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2ludDggKGEs IGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDggV0hF UkUgYiA9IDUgT1JERVIgQlkgYTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNraXBfaW50OF9hX2Jf aWR4IG9uIHNraXBfaW50OAorICAgSW5kZXggQ29uZDogKGIgPSA1KQorKDIgcm93cykKKworU0VM RUNUIGEsIGIgRlJPTSBza2lwX2ludDggV0hFUkUgYiA9IDUgT1JERVIgQlkgYTsKKyBhIHwgYiAK Ky0tLSstLS0KKyAwIHwgNQorIDEgfCA1CisgMiB8IDUKKyAzIHwgNQorIDQgfCA1CisgNSB8IDUK KyA2IHwgNQorIDcgfCA1CisgOCB8IDUKKyA5IHwgNQorKDEwIHJvd3MpCisKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9pbnQ4IFdIRVJFIGIgPSA1IE9SREVSIEJZ IGEgREVTQzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIEJhY2t3YXJkIHVzaW5n IHNraXBfaW50OF9hX2JfaWR4IG9uIHNraXBfaW50OAorICAgSW5kZXggQ29uZDogKGIgPSA1KQor KDIgcm93cykKKworU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDggV0hFUkUgYiA9IDUgT1JERVIg QlkgYSBERVNDOworIGEgfCBiIAorLS0tKy0tLQorIDkgfCA1CisgOCB8IDUKKyA3IHwgNQorIDYg fCA1CisgNSB8IDUKKyA0IHwgNQorIDMgfCA1CisgMiB8IDUKKyAxIHwgNQorIDAgfCA1CisoMTAg cm93cykKKworRFJPUCBUQUJMRSBza2lwX2ludDg7CistLSBvaWQ4OiBidG9pZDhza2lwc3VwcG9y dCwgb2lkOF9kZWNyZW1lbnQsIG9pZDhfaW5jcmVtZW50CitDUkVBVEUgVEFCTEUgc2tpcF9vaWQ4 IChhIG9pZDgsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX29pZDggU0VMRUNUIChpIC8gMTAp OjppbnQ4OjpvaWQ4LCBpICUgMTAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworQ1JF QVRFIElOREVYIE9OIHNraXBfb2lkOCAoYSwgYik7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgYSwgYiBGUk9NIHNraXBfb2lkOCBXSEVSRSBiID0gNSBPUkRFUiBCWSBhOworICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5 IFNjYW4gdXNpbmcgc2tpcF9vaWQ4X2FfYl9pZHggb24gc2tpcF9vaWQ4CisgICBJbmRleCBDb25k OiAoYiA9IDUpCisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkOCBXSEVSRSBi ID0gNSBPUkRFUiBCWSBhOworIGEgfCBiIAorLS0tKy0tLQorIDAgfCA1CisgMSB8IDUKKyAyIHwg NQorIDMgfCA1CisgNCB8IDUKKyA1IHwgNQorIDYgfCA1CisgNyB8IDUKKyA4IHwgNQorIDkgfCA1 CisoMTAgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIgRlJPTSBza2lw X29pZDggV0hFUkUgYiA9IDUgT1JERVIgQlkgYSBERVNDOworICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRl eCBPbmx5IFNjYW4gQmFja3dhcmQgdXNpbmcgc2tpcF9vaWQ4X2FfYl9pZHggb24gc2tpcF9vaWQ4 CisgICBJbmRleCBDb25kOiAoYiA9IDUpCisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9NIHNr aXBfb2lkOCBXSEVSRSBiID0gNSBPUkRFUiBCWSBhIERFU0M7CisgYSB8IGIgCistLS0rLS0tCisg OSB8IDUKKyA4IHwgNQorIDcgfCA1CisgNiB8IDUKKyA1IHwgNQorIDQgfCA1CisgMyB8IDUKKyAy IHwgNQorIDEgfCA1CisgMCB8IDUKKygxMCByb3dzKQorCitEUk9QIFRBQkxFIHNraXBfb2lkODsK Ky0tIGJvb2w6IGJ0Ym9vbHNraXBzdXBwb3J0LCBib29sX2RlY3JlbWVudCwgYm9vbF9pbmNyZW1l bnQKK0NSRUFURSBUQUJMRSBza2lwX2Jvb2wgKGEgYm9vbCwgYiBpbnQ0KTsKK0lOU0VSVCBJTlRP IHNraXBfYm9vbCBTRUxFQ1QgKGkgJSAyID0gMCksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwKSBpOworQ1JFQVRFIElOREVYIE9OIHNraXBfYm9vbCAoYSwgYik7CitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfYm9vbCBXSEVSRSBiID0gNTAgT1JERVIgQlkg YTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNraXBfYm9vbF9hX2JfaWR4IG9uIHNraXBfYm9vbAor ICAgSW5kZXggQ29uZDogKGIgPSA1MCkKKygyIHJvd3MpCisKK1NFTEVDVCBhLCBiIEZST00gc2tp cF9ib29sIFdIRVJFIGIgPSA1MCBPUkRFUiBCWSBhOworIGEgfCBiICAKKy0tLSstLS0tCisgdCB8 IDUwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00gc2tp cF9ib29sIFdIRVJFIGIgPSA1MCBPUkRFUiBCWSBhIERFU0M7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IE9ubHkgU2NhbiBCYWNrd2FyZCB1c2luZyBza2lwX2Jvb2xfYV9iX2lkeCBvbiBza2lwX2Jv b2wKKyAgIEluZGV4IENvbmQ6IChiID0gNTApCisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9N IHNraXBfYm9vbCBXSEVSRSBiID0gNTAgT1JERVIgQlkgYSBERVNDOworIGEgfCBiICAKKy0tLSst LS0tCisgdCB8IDUwCisoMSByb3cpCisKK0RST1AgVEFCTEUgc2tpcF9ib29sOworLS0gImNoYXIi OiBidGNoYXJza2lwc3VwcG9ydCwgY2hhcl9kZWNyZW1lbnQsIGNoYXJfaW5jcmVtZW50CitDUkVB VEUgVEFCTEUgc2tpcF9jaGFyIChhICJjaGFyIiwgYiBpbnQ0KTsKK0lOU0VSVCBJTlRPIHNraXBf Y2hhciBTRUxFQ1QgY2hyKGFzY2lpKCdhJykgKyAoaSAlIDI2KSk6OiJjaGFyIiwgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitDUkVBVEUgSU5ERVggT04gc2tpcF9jaGFyIChhLCBi KTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9jaGFyIFdIRVJF IGIgPSA1MCBPUkRFUiBCWSBhOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2tpcF9jaGFyX2FfYl9p ZHggb24gc2tpcF9jaGFyCisgICBJbmRleCBDb25kOiAoYiA9IDUwKQorKDIgcm93cykKKworU0VM RUNUIGEsIGIgRlJPTSBza2lwX2NoYXIgV0hFUkUgYiA9IDUwIE9SREVSIEJZIGE7CisgYSB8IGIg IAorLS0tKy0tLS0KKyB5IHwgNTAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIGEsIGIgRlJPTSBza2lwX2NoYXIgV0hFUkUgYiA9IDUwIE9SREVSIEJZIGEgREVTQzsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIEJhY2t3YXJkIHVzaW5nIHNraXBfY2hhcl9h X2JfaWR4IG9uIHNraXBfY2hhcgorICAgSW5kZXggQ29uZDogKGIgPSA1MCkKKygyIHJvd3MpCisK K1NFTEVDVCBhLCBiIEZST00gc2tpcF9jaGFyIFdIRVJFIGIgPSA1MCBPUkRFUiBCWSBhIERFU0M7 CisgYSB8IGIgIAorLS0tKy0tLS0KKyB5IHwgNTAKKygxIHJvdykKKworRFJPUCBUQUJMRSBza2lw X2NoYXI7CistLSBvaWQ6IGJ0b2lkc2tpcHN1cHBvcnQsIG9pZF9kZWNyZW1lbnQsIG9pZF9pbmNy ZW1lbnQKK0NSRUFURSBUQUJMRSBza2lwX29pZCAoYSBvaWQsIGIgaW50NCk7CitJTlNFUlQgSU5U TyBza2lwX29pZCBTRUxFQ1QgKGkgLyAxMCk6Om9pZCwgaSAlIDEwIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMCkgaTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX29pZCAoYSwgYik7CitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkIFdIRVJFIGIgPSA1IE9SREVS IEJZIGEgREVTQzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gQmFja3dhcmQgdXNpbmcg c2tpcF9vaWRfYV9iX2lkeCBvbiBza2lwX29pZAorICAgSW5kZXggQ29uZDogKGIgPSA1KQorKDIg cm93cykKKworU0VMRUNUIGEsIGIgRlJPTSBza2lwX29pZCBXSEVSRSBiID0gNSBPUkRFUiBCWSBh IERFU0M7CisgYSB8IGIgCistLS0rLS0tCisgOSB8IDUKKyA4IHwgNQorIDcgfCA1CisgNiB8IDUK KyA1IHwgNQorIDQgfCA1CisgMyB8IDUKKyAyIHwgNQorIDEgfCA1CisgMCB8IDUKKygxMCByb3dz KQorCitEUk9QIFRBQkxFIHNraXBfb2lkOworLS0gaW50MjogYnRpbnQyc2tpcHN1cHBvcnQsIGlu dDJfZGVjcmVtZW50LCBpbnQyX2luY3JlbWVudAorQ1JFQVRFIFRBQkxFIHNraXBfaW50MiAoYSBp bnQyLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9pbnQyIFNFTEVDVCAoaSAvIDEwKTo6aW50 MiwgaSAlIDEwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBJTkRFWCBP TiBza2lwX2ludDIgKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIgRlJP TSBza2lwX2ludDIgV0hFUkUgYiA9IDUgT1JERVIgQlkgYTsKKyAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5n IHNraXBfaW50Ml9hX2JfaWR4IG9uIHNraXBfaW50MgorICAgSW5kZXggQ29uZDogKGIgPSA1KQor KDIgcm93cykKKworU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDIgV0hFUkUgYiA9IDUgT1JERVIg QlkgYTsKKyBhIHwgYiAKKy0tLSstLS0KKyAwIHwgNQorIDEgfCA1CisgMiB8IDUKKyAzIHwgNQor IDQgfCA1CisgNSB8IDUKKyA2IHwgNQorIDcgfCA1CisgOCB8IDUKKyA5IHwgNQorKDEwIHJvd3Mp CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9pbnQyIFdIRVJF IGIgPSA1IE9SREVSIEJZIGEgREVTQzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2Fu IEJhY2t3YXJkIHVzaW5nIHNraXBfaW50Ml9hX2JfaWR4IG9uIHNraXBfaW50MgorICAgSW5kZXgg Q29uZDogKGIgPSA1KQorKDIgcm93cykKKworU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDIgV0hF UkUgYiA9IDUgT1JERVIgQlkgYSBERVNDOworIGEgfCBiIAorLS0tKy0tLQorIDkgfCA1CisgOCB8 IDUKKyA3IHwgNQorIDYgfCA1CisgNSB8IDUKKyA0IHwgNQorIDMgfCA1CisgMiB8IDUKKyAxIHwg NQorIDAgfCA1CisoMTAgcm93cykKKworRFJPUCBUQUJMRSBza2lwX2ludDI7CistLQorLS0gQm91 bmRhcnkgY2FzZXM6IGV4ZXJjaXNlIHRoZSAqX2luY3JlbWVudCBvdmVyZmxvdyAvICpfZGVjcmVt ZW50CistLSB1bmRlcmZsb3cgYnJhbmNoZXMgaW4gc2tpcC1zY2FuIGhlbHBlcnMuCistLQorLS0g aW50MiBib3VuZGFyaWVzIChpbnQyX2luY3JlbWVudCBvdmVyZmxvdyBhdCBJTlQyX01BWCwgaW50 Ml9kZWNyZW1lbnQKKy0tIHVuZGVyZmxvdyBhdCBJTlQyX01JTikKK0NSRUFURSBUQUJMRSBza2lw X2ludDJfbWF4IChhIGludDIsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX2ludDJfbWF4IFZB TFVFUyAoMzI3NjU6OmludDIsIDEpLCAoMzI3NjY6OmludDIsIDEpLCAoMzI3Njc6OmludDIsIDEp OworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50Ml9tYXggKGEsIGIpOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50Ml9tYXggV0hFUkUgYiA9IDEgT1JERVIgQlkg YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBza2lwX2ludDJfbWF4X2Ff Yl9pZHggb24gc2tpcF9pbnQyX21heAorICAgSW5kZXggQ29uZDogKGIgPSAxKQorKDIgcm93cykK KworU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDJfbWF4IFdIRVJFIGIgPSAxIE9SREVSIEJZIGE7 CisgICBhICAgfCBiIAorLS0tLS0tLSstLS0KKyAzMjc2NSB8IDEKKyAzMjc2NiB8IDEKKyAzMjc2 NyB8IDEKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgc2tpcF9pbnQyX21heDsKK0NSRUFURSBUQUJM RSBza2lwX2ludDJfbWluIChhIGludDIsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX2ludDJf bWluIFZBTFVFUyAoKC0zMjc2Nik6OmludDIsIDEpLCAoKC0zMjc2Nyk6OmludDIsIDEpLCAoKC0z Mjc2OCk6OmludDIsIDEpOworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50Ml9taW4gKGEsIGIpOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50Ml9taW4gV0hFUkUg YiA9IDEgT1JERVIgQlkgYSBERVNDOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggT25seSBTY2FuIEJhY2t3YXJkIHVzaW5nIHNraXBfaW50Ml9taW5fYV9iX2lkeCBvbiBz a2lwX2ludDJfbWluCisgICBJbmRleCBDb25kOiAoYiA9IDEpCisoMiByb3dzKQorCitTRUxFQ1Qg YSwgYiBGUk9NIHNraXBfaW50Ml9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkgYSBERVNDOworICAg YSAgICB8IGIgCistLS0tLS0tLSstLS0KKyAtMzI3NjYgfCAxCisgLTMyNzY3IHwgMQorIC0zMjc2 OCB8IDEKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgc2tpcF9pbnQyX21pbjsKKy0tIGludDQgYm91 bmRhcmllcworQ1JFQVRFIFRBQkxFIHNraXBfaW50NF9tYXggKGEgaW50NCwgYiBpbnQ0KTsKK0lO U0VSVCBJTlRPIHNraXBfaW50NF9tYXggVkFMVUVTICgyMTQ3NDgzNjQ1LCAxKSwgKDIxNDc0ODM2 NDYsIDEpLCAoMjE0NzQ4MzY0NywgMSk7CitDUkVBVEUgSU5ERVggT04gc2tpcF9pbnQ0X21heCAo YSwgYik7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBhLCBiIEZST00gc2tpcF9pbnQ0X21h eCBXSEVSRSBiID0gMSBPUkRFUiBCWSBhOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2Fu IHVzaW5nIHNraXBfaW50NF9tYXhfYV9iX2lkeCBvbiBza2lwX2ludDRfbWF4CisgICBJbmRleCBD b25kOiAoYiA9IDEpCisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50NF9tYXgg V0hFUkUgYiA9IDEgT1JERVIgQlkgYTsKKyAgICAgYSAgICAgIHwgYiAKKy0tLS0tLS0tLS0tLSst LS0KKyAyMTQ3NDgzNjQ1IHwgMQorIDIxNDc0ODM2NDYgfCAxCisgMjE0NzQ4MzY0NyB8IDEKKygz IHJvd3MpCisKK0RST1AgVEFCTEUgc2tpcF9pbnQ0X21heDsKK0NSRUFURSBUQUJMRSBza2lwX2lu dDRfbWluIChhIGludDQsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX2ludDRfbWluIFZBTFVF UyAoLTIxNDc0ODM2NDYsIDEpLCAoLTIxNDc0ODM2NDcsIDEpLCAoLTIxNDc0ODM2NDgsIDEpOwor Q1JFQVRFIElOREVYIE9OIHNraXBfaW50NF9taW4gKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50NF9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkgYSBE RVNDOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIEJh Y2t3YXJkIHVzaW5nIHNraXBfaW50NF9taW5fYV9iX2lkeCBvbiBza2lwX2ludDRfbWluCisgICBJ bmRleCBDb25kOiAoYiA9IDEpCisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50 NF9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkgYSBERVNDOworICAgICAgYSAgICAgIHwgYiAKKy0t LS0tLS0tLS0tLS0rLS0tCisgLTIxNDc0ODM2NDYgfCAxCisgLTIxNDc0ODM2NDcgfCAxCisgLTIx NDc0ODM2NDggfCAxCisoMyByb3dzKQorCitEUk9QIFRBQkxFIHNraXBfaW50NF9taW47CistLSBp bnQ4IGJvdW5kYXJpZXMKK0NSRUFURSBUQUJMRSBza2lwX2ludDhfbWF4IChhIGludDgsIGIgaW50 NCk7CitJTlNFUlQgSU5UTyBza2lwX2ludDhfbWF4IFZBTFVFUyAoOTIyMzM3MjAzNjg1NDc3NTgw NTo6aW50OCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkyMjMzNzIw MzY4NTQ3NzU4MDY6OmludDgsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICg5MjIzMzcyMDM2ODU0Nzc1ODA3OjppbnQ4LCAxKTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2lu dDhfbWF4IChhLCBiKTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGEsIGIgRlJPTSBza2lw X2ludDhfbWF4IFdIRVJFIGIgPSAxIE9SREVSIEJZIGE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBP bmx5IFNjYW4gdXNpbmcgc2tpcF9pbnQ4X21heF9hX2JfaWR4IG9uIHNraXBfaW50OF9tYXgKKyAg IEluZGV4IENvbmQ6IChiID0gMSkKKygyIHJvd3MpCisKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9p bnQ4X21heCBXSEVSRSBiID0gMSBPUkRFUiBCWSBhOworICAgICAgICAgIGEgICAgICAgICAgfCBi IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLQorIDkyMjMzNzIwMzY4NTQ3NzU4MDUgfCAxCisg OTIyMzM3MjAzNjg1NDc3NTgwNiB8IDEKKyA5MjIzMzcyMDM2ODU0Nzc1ODA3IHwgMQorKDMgcm93 cykKKworRFJPUCBUQUJMRSBza2lwX2ludDhfbWF4OworQ1JFQVRFIFRBQkxFIHNraXBfaW50OF9t aW4gKGEgaW50OCwgYiBpbnQ0KTsKK0lOU0VSVCBJTlRPIHNraXBfaW50OF9taW4gVkFMVUVTICgo LTkyMjMzNzIwMzY4NTQ3NzU4MDYpOjppbnQ4LCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKC05MjIzMzcyMDM2ODU0Nzc1ODA3KTo6aW50OCwgMSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCgtOTIyMzM3MjAzNjg1NDc3NTgwOCk6OmludDgsIDEp OworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50OF9taW4gKGEsIGIpOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50OF9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkg YSBERVNDOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2Fu IEJhY2t3YXJkIHVzaW5nIHNraXBfaW50OF9taW5fYV9iX2lkeCBvbiBza2lwX2ludDhfbWluCisg ICBJbmRleCBDb25kOiAoYiA9IDEpCisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBf aW50OF9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkgYSBERVNDOworICAgICAgICAgIGEgICAgICAg ICAgIHwgYiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tCisgLTkyMjMzNzIwMzY4NTQ3NzU4 MDYgfCAxCisgLTkyMjMzNzIwMzY4NTQ3NzU4MDcgfCAxCisgLTkyMjMzNzIwMzY4NTQ3NzU4MDgg fCAxCisoMyByb3dzKQorCitEUk9QIFRBQkxFIHNraXBfaW50OF9taW47CistLSBvaWQgYm91bmRh cmllcyAob2lkX2luY3JlbWVudCBvdmVyZmxvdyBhdCBPSURfTUFYLCBvaWRfZGVjcmVtZW50IHVu ZGVyZmxvdyBhdCAwKQorQ1JFQVRFIFRBQkxFIHNraXBfb2lkX21heCAoYSBvaWQsIGIgaW50NCk7 CitJTlNFUlQgSU5UTyBza2lwX29pZF9tYXggVkFMVUVTICg0Mjk0OTY3MjkzOjpvaWQsIDEpLCAo NDI5NDk2NzI5NDo6b2lkLCAxKSwgKDQyOTQ5NjcyOTU6Om9pZCwgMSk7CitDUkVBVEUgSU5ERVgg T04gc2tpcF9vaWRfbWF4IChhLCBiKTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGEsIGIg RlJPTSBza2lwX29pZF9tYXggV0hFUkUgYiA9IDEgT1JERVIgQlkgYTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5k ZXggT25seSBTY2FuIHVzaW5nIHNraXBfb2lkX21heF9hX2JfaWR4IG9uIHNraXBfb2lkX21heAor ICAgSW5kZXggQ29uZDogKGIgPSAxKQorKDIgcm93cykKKworU0VMRUNUIGEsIGIgRlJPTSBza2lw X29pZF9tYXggV0hFUkUgYiA9IDEgT1JERVIgQlkgYTsKKyAgICAgYSAgICAgIHwgYiAKKy0tLS0t LS0tLS0tLSstLS0KKyA0Mjk0OTY3MjkzIHwgMQorIDQyOTQ5NjcyOTQgfCAxCisgNDI5NDk2NzI5 NSB8IDEKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgc2tpcF9vaWRfbWF4OworQ1JFQVRFIFRBQkxF IHNraXBfb2lkX21pbiAoYSBvaWQsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX29pZF9taW4g VkFMVUVTICgwOjpvaWQsIDEpLCAoMTo6b2lkLCAxKSwgKDI6Om9pZCwgMSk7CitDUkVBVEUgSU5E RVggT04gc2tpcF9vaWRfbWluIChhLCBiKTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGEs IGIgRlJPTSBza2lwX29pZF9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkgYSBERVNDOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gQmFja3dhcmQgdXNpbmcgc2tp cF9vaWRfbWluX2FfYl9pZHggb24gc2tpcF9vaWRfbWluCisgICBJbmRleCBDb25kOiAoYiA9IDEp CisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkX21pbiBXSEVSRSBiID0gMSBP UkRFUiBCWSBhIERFU0M7CisgYSB8IGIgCistLS0rLS0tCisgMiB8IDEKKyAxIHwgMQorIDAgfCAx CisoMyByb3dzKQorCitEUk9QIFRBQkxFIHNraXBfb2lkX21pbjsKKy0tIG9pZDggYm91bmRhcmll cyAodWludDY0IHJhbmdlKQorQ1JFQVRFIFRBQkxFIHNraXBfb2lkOF9tYXggKGEgb2lkOCwgYiBp bnQ0KTsKK0lOU0VSVCBJTlRPIHNraXBfb2lkOF9tYXggVkFMVUVTICgnMTg0NDY3NDQwNzM3MDk1 NTE2MTMnOjpvaWQ4LCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzE4 NDQ2NzQ0MDczNzA5NTUxNjE0Jzo6b2lkOCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCcxODQ0Njc0NDA3MzcwOTU1MTYxNSc6Om9pZDgsIDEpOworQ1JFQVRFIElOREVY IE9OIHNraXBfb2lkOF9tYXggKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgYSwg YiBGUk9NIHNraXBfb2lkOF9tYXggV0hFUkUgYiA9IDEgT1JERVIgQlkgYTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBza2lwX29pZDhfbWF4X2FfYl9pZHggb24gc2tpcF9v aWQ4X21heAorICAgSW5kZXggQ29uZDogKGIgPSAxKQorKDIgcm93cykKKworU0VMRUNUIGEsIGIg RlJPTSBza2lwX29pZDhfbWF4IFdIRVJFIGIgPSAxIE9SREVSIEJZIGE7CisgICAgICAgICAgYSAg ICAgICAgICAgfCBiIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0KKyAxODQ0Njc0NDA3Mzcw OTU1MTYxMyB8IDEKKyAxODQ0Njc0NDA3MzcwOTU1MTYxNCB8IDEKKyAxODQ0Njc0NDA3MzcwOTU1 MTYxNSB8IDEKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgc2tpcF9vaWQ4X21heDsKK0NSRUFURSBU QUJMRSBza2lwX29pZDhfbWluIChhIG9pZDgsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX29p ZDhfbWluIFZBTFVFUyAoMDo6b2lkOCwgMSksICgxOjpvaWQ4LCAxKSwgKDI6Om9pZDgsIDEpOwor Q1JFQVRFIElOREVYIE9OIHNraXBfb2lkOF9taW4gKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkOF9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkgYSBE RVNDOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIEJh Y2t3YXJkIHVzaW5nIHNraXBfb2lkOF9taW5fYV9iX2lkeCBvbiBza2lwX29pZDhfbWluCisgICBJ bmRleCBDb25kOiAoYiA9IDEpCisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lk OF9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkgYSBERVNDOworIGEgfCBiIAorLS0tKy0tLQorIDIg fCAxCisgMSB8IDEKKyAwIHwgMQorKDMgcm93cykKKworRFJPUCBUQUJMRSBza2lwX29pZDhfbWlu OworLS0gImNoYXIiIGJvdW5kYXJpZXMgKHVpbnQ4IGJ5dGUgcmFuZ2U6IGNoYXJfaW5jcmVtZW50 IG92ZXJmbG93IGF0IDI1NSwKKy0tIGNoYXJfZGVjcmVtZW50IHVuZGVyZmxvdyBhdCAwKS4gICJj aGFyIiBpbnB1dCBjYXN0IGFjY2VwdHMgLTEyOC4uMTI3IGZvcgorLS0gYSBzaWduZWQgaW50MSwg c28gYnl0ZXMgMjU0IGFuZCAyNTUgYXJlIHdyaXR0ZW4gYXMgLTIgYW5kIC0xLgorQ1JFQVRFIFRB QkxFIHNraXBfY2hhcl9tYXggKGEgImNoYXIiLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9j aGFyX21heCBWQUxVRVMgKCgtMyk6OiJjaGFyIiwgMSksICgoLTIpOjoiY2hhciIsIDEpLCAoKC0x KTo6ImNoYXIiLCAxKTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2NoYXJfbWF4IChhLCBiKTsKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGEsIGIgRlJPTSBza2lwX2NoYXJfbWF4IFdIRVJFIGIg PSAxIE9SREVSIEJZIGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2tp cF9jaGFyX21heF9hX2JfaWR4IG9uIHNraXBfY2hhcl9tYXgKKyAgIEluZGV4IENvbmQ6IChiID0g MSkKKygyIHJvd3MpCisKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9jaGFyX21heCBXSEVSRSBiID0g MSBPUkRFUiBCWSBhOworICBhICAgfCBiIAorLS0tLS0tKy0tLQorIFwzNzUgfCAxCisgXDM3NiB8 IDEKKyBcMzc3IHwgMQorKDMgcm93cykKKworRFJPUCBUQUJMRSBza2lwX2NoYXJfbWF4OworQ1JF QVRFIFRBQkxFIHNraXBfY2hhcl9taW4gKGEgImNoYXIiLCBiIGludDQpOworSU5TRVJUIElOVE8g c2tpcF9jaGFyX21pbiBWQUxVRVMgKDA6OiJjaGFyIiwgMSksICgxOjoiY2hhciIsIDEpLCAoMjo6 ImNoYXIiLCAxKTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2NoYXJfbWluIChhLCBiKTsKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUIGEsIGIgRlJPTSBza2lwX2NoYXJfbWluIFdIRVJFIGIgPSAx IE9SREVSIEJZIGEgREVTQzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IE9ubHkgU2NhbiBCYWNrd2FyZCB1c2luZyBza2lwX2NoYXJfbWluX2FfYl9pZHggb24gc2tpcF9j aGFyX21pbgorICAgSW5kZXggQ29uZDogKGIgPSAxKQorKDIgcm93cykKKworU0VMRUNUIGEsIGIg RlJPTSBza2lwX2NoYXJfbWluIFdIRVJFIGIgPSAxIE9SREVSIEJZIGEgREVTQzsKKyAgYSAgIHwg YiAKKy0tLS0tLSstLS0KKyBceDAyIHwgMQorIFx4MDEgfCAxCisgICAgICB8IDEKKygzIHJvd3Mp CisKK0RST1AgVEFCTEUgc2tpcF9jaGFyX21pbjsKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOworUkVT RVQgZW5hYmxlX2JpdG1hcHNjYW47CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9i dHJlZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9pbmRleC5zcWwKaW5k ZXggNmFhYWEzODZhYmMuLjk1ZDMwYTkxOWYyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9idHJlZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5k ZXguc3FsCkBAIC00MzgsMyArNDM4LDE4NSBAQCBDUkVBVEUgVEFCTEUgYnRyZWVfcGFydCAoaWQg aW50NCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CiBDUkVBVEUgSU5ERVggYnRyZWVfcGFydF9p ZHggT04gYnRyZWVfcGFydChpZCk7CiBBTFRFUiBJTkRFWCBidHJlZV9wYXJ0X2lkeCBBTFRFUiBD T0xVTU4gaWQgU0VUIChuX2Rpc3RpbmN0PTEwMCk7CiBEUk9QIFRBQkxFIGJ0cmVlX3BhcnQ7CisK Ky0tCistLSBUZXN0IGJ0cmVlIHNraXAgc2NhbiBzdXBwb3J0IGZvciB0eXBlcyB0aGF0IGN1cnJl bnRseSBsYWNrIHRlc3QgY292ZXJhZ2UKKy0tIChleGVyY2lzZXMgYnRYWFhza2lwc3VwcG9ydCwg WFhYX2RlY3JlbWVudCwgWFhYX2luY3JlbWVudCBmdW5jdGlvbnMpCistLQorU0VUIGVuYWJsZV9z ZXFzY2FuID0gb2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb2ZmOworCistLSBpbnQ4OiBi dGludDhza2lwc3VwcG9ydCwgaW50OF9kZWNyZW1lbnQsIGludDhfaW5jcmVtZW50CitDUkVBVEUg VEFCTEUgc2tpcF9pbnQ4IChhIGludDgsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX2ludDgg U0VMRUNUIGkgLyAxMCwgaSAlIDEwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0NS RUFURSBJTkRFWCBPTiBza2lwX2ludDggKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIGEsIGIgRlJPTSBza2lwX2ludDggV0hFUkUgYiA9IDUgT1JERVIgQlkgYTsKK1NFTEVDVCBh LCBiIEZST00gc2tpcF9pbnQ4IFdIRVJFIGIgPSA1IE9SREVSIEJZIGE7CitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50OCBXSEVSRSBiID0gNSBPUkRFUiBCWSBh IERFU0M7CitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50OCBXSEVSRSBiID0gNSBPUkRFUiBCWSBh IERFU0M7CitEUk9QIFRBQkxFIHNraXBfaW50ODsKKworLS0gb2lkODogYnRvaWQ4c2tpcHN1cHBv cnQsIG9pZDhfZGVjcmVtZW50LCBvaWQ4X2luY3JlbWVudAorQ1JFQVRFIFRBQkxFIHNraXBfb2lk OCAoYSBvaWQ4LCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9vaWQ4IFNFTEVDVCAoaSAvIDEw KTo6aW50ODo6b2lkOCwgaSAlIDEwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0NS RUFURSBJTkRFWCBPTiBza2lwX29pZDggKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIGEsIGIgRlJPTSBza2lwX29pZDggV0hFUkUgYiA9IDUgT1JERVIgQlkgYTsKK1NFTEVDVCBh LCBiIEZST00gc2tpcF9vaWQ4IFdIRVJFIGIgPSA1IE9SREVSIEJZIGE7CitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkOCBXSEVSRSBiID0gNSBPUkRFUiBCWSBh IERFU0M7CitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkOCBXSEVSRSBiID0gNSBPUkRFUiBCWSBh IERFU0M7CitEUk9QIFRBQkxFIHNraXBfb2lkODsKKworLS0gYm9vbDogYnRib29sc2tpcHN1cHBv cnQsIGJvb2xfZGVjcmVtZW50LCBib29sX2luY3JlbWVudAorQ1JFQVRFIFRBQkxFIHNraXBfYm9v bCAoYSBib29sLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9ib29sIFNFTEVDVCAoaSAlIDIg PSAwKSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitDUkVBVEUgSU5ERVggT04g c2tpcF9ib29sIChhLCBiKTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00g c2tpcF9ib29sIFdIRVJFIGIgPSA1MCBPUkRFUiBCWSBhOworU0VMRUNUIGEsIGIgRlJPTSBza2lw X2Jvb2wgV0hFUkUgYiA9IDUwIE9SREVSIEJZIGE7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgYSwgYiBGUk9NIHNraXBfYm9vbCBXSEVSRSBiID0gNTAgT1JERVIgQlkgYSBERVNDOworU0VM RUNUIGEsIGIgRlJPTSBza2lwX2Jvb2wgV0hFUkUgYiA9IDUwIE9SREVSIEJZIGEgREVTQzsKK0RS T1AgVEFCTEUgc2tpcF9ib29sOworCistLSAiY2hhciI6IGJ0Y2hhcnNraXBzdXBwb3J0LCBjaGFy X2RlY3JlbWVudCwgY2hhcl9pbmNyZW1lbnQKK0NSRUFURSBUQUJMRSBza2lwX2NoYXIgKGEgImNo YXIiLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9jaGFyIFNFTEVDVCBjaHIoYXNjaWkoJ2En KSArIChpICUgMjYpKTo6ImNoYXIiLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsK K0NSRUFURSBJTkRFWCBPTiBza2lwX2NoYXIgKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGEsIGIgRlJPTSBza2lwX2NoYXIgV0hFUkUgYiA9IDUwIE9SREVSIEJZIGE7CitTRUxF Q1QgYSwgYiBGUk9NIHNraXBfY2hhciBXSEVSRSBiID0gNTAgT1JERVIgQlkgYTsKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9jaGFyIFdIRVJFIGIgPSA1MCBPUkRF UiBCWSBhIERFU0M7CitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfY2hhciBXSEVSRSBiID0gNTAgT1JE RVIgQlkgYSBERVNDOworRFJPUCBUQUJMRSBza2lwX2NoYXI7CisKKy0tIG9pZDogYnRvaWRza2lw c3VwcG9ydCwgb2lkX2RlY3JlbWVudCwgb2lkX2luY3JlbWVudAorQ1JFQVRFIFRBQkxFIHNraXBf b2lkIChhIG9pZCwgYiBpbnQ0KTsKK0lOU0VSVCBJTlRPIHNraXBfb2lkIFNFTEVDVCAoaSAvIDEw KTo6b2lkLCBpICUgMTAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworQ1JFQVRFIElO REVYIE9OIHNraXBfb2lkIChhLCBiKTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBi IEZST00gc2tpcF9vaWQgV0hFUkUgYiA9IDUgT1JERVIgQlkgYSBERVNDOworU0VMRUNUIGEsIGIg RlJPTSBza2lwX29pZCBXSEVSRSBiID0gNSBPUkRFUiBCWSBhIERFU0M7CitEUk9QIFRBQkxFIHNr aXBfb2lkOworCistLSBpbnQyOiBidGludDJza2lwc3VwcG9ydCwgaW50Ml9kZWNyZW1lbnQsIGlu dDJfaW5jcmVtZW50CitDUkVBVEUgVEFCTEUgc2tpcF9pbnQyIChhIGludDIsIGIgaW50NCk7CitJ TlNFUlQgSU5UTyBza2lwX2ludDIgU0VMRUNUIChpIC8gMTApOjppbnQyLCBpICUgMTAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50MiAoYSwg Yik7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50MiBXSEVS RSBiID0gNSBPUkRFUiBCWSBhOworU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDIgV0hFUkUgYiA9 IDUgT1JERVIgQlkgYTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00gc2tp cF9pbnQyIFdIRVJFIGIgPSA1IE9SREVSIEJZIGEgREVTQzsKK1NFTEVDVCBhLCBiIEZST00gc2tp cF9pbnQyIFdIRVJFIGIgPSA1IE9SREVSIEJZIGEgREVTQzsKK0RST1AgVEFCTEUgc2tpcF9pbnQy OworCistLQorLS0gQm91bmRhcnkgY2FzZXM6IGV4ZXJjaXNlIHRoZSAqX2luY3JlbWVudCBvdmVy ZmxvdyAvICpfZGVjcmVtZW50CistLSB1bmRlcmZsb3cgYnJhbmNoZXMgaW4gc2tpcC1zY2FuIGhl bHBlcnMuCistLQorLS0gaW50MiBib3VuZGFyaWVzIChpbnQyX2luY3JlbWVudCBvdmVyZmxvdyBh dCBJTlQyX01BWCwgaW50Ml9kZWNyZW1lbnQKKy0tIHVuZGVyZmxvdyBhdCBJTlQyX01JTikKK0NS RUFURSBUQUJMRSBza2lwX2ludDJfbWF4IChhIGludDIsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBz a2lwX2ludDJfbWF4IFZBTFVFUyAoMzI3NjU6OmludDIsIDEpLCAoMzI3NjY6OmludDIsIDEpLCAo MzI3Njc6OmludDIsIDEpOworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50Ml9tYXggKGEsIGIpOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50Ml9tYXggV0hFUkUg YiA9IDEgT1JERVIgQlkgYTsKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9pbnQyX21heCBXSEVSRSBi ID0gMSBPUkRFUiBCWSBhOworRFJPUCBUQUJMRSBza2lwX2ludDJfbWF4OworCitDUkVBVEUgVEFC TEUgc2tpcF9pbnQyX21pbiAoYSBpbnQyLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9pbnQy X21pbiBWQUxVRVMgKCgtMzI3NjYpOjppbnQyLCAxKSwgKCgtMzI3NjcpOjppbnQyLCAxKSwgKCgt MzI3NjgpOjppbnQyLCAxKTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2ludDJfbWluIChhLCBiKTsK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDJfbWluIFdIRVJF IGIgPSAxIE9SREVSIEJZIGEgREVTQzsKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9pbnQyX21pbiBX SEVSRSBiID0gMSBPUkRFUiBCWSBhIERFU0M7CitEUk9QIFRBQkxFIHNraXBfaW50Ml9taW47CisK Ky0tIGludDQgYm91bmRhcmllcworQ1JFQVRFIFRBQkxFIHNraXBfaW50NF9tYXggKGEgaW50NCwg YiBpbnQ0KTsKK0lOU0VSVCBJTlRPIHNraXBfaW50NF9tYXggVkFMVUVTICgyMTQ3NDgzNjQ1LCAx KSwgKDIxNDc0ODM2NDYsIDEpLCAoMjE0NzQ4MzY0NywgMSk7CitDUkVBVEUgSU5ERVggT04gc2tp cF9pbnQ0X21heCAoYSwgYik7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBhLCBiIEZST00g c2tpcF9pbnQ0X21heCBXSEVSRSBiID0gMSBPUkRFUiBCWSBhOworU0VMRUNUIGEsIGIgRlJPTSBz a2lwX2ludDRfbWF4IFdIRVJFIGIgPSAxIE9SREVSIEJZIGE7CitEUk9QIFRBQkxFIHNraXBfaW50 NF9tYXg7CisKK0NSRUFURSBUQUJMRSBza2lwX2ludDRfbWluIChhIGludDQsIGIgaW50NCk7CitJ TlNFUlQgSU5UTyBza2lwX2ludDRfbWluIFZBTFVFUyAoLTIxNDc0ODM2NDYsIDEpLCAoLTIxNDc0 ODM2NDcsIDEpLCAoLTIxNDc0ODM2NDgsIDEpOworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50NF9t aW4gKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50 NF9taW4gV0hFUkUgYiA9IDEgT1JERVIgQlkgYSBERVNDOworU0VMRUNUIGEsIGIgRlJPTSBza2lw X2ludDRfbWluIFdIRVJFIGIgPSAxIE9SREVSIEJZIGEgREVTQzsKK0RST1AgVEFCTEUgc2tpcF9p bnQ0X21pbjsKKworLS0gaW50OCBib3VuZGFyaWVzCitDUkVBVEUgVEFCTEUgc2tpcF9pbnQ4X21h eCAoYSBpbnQ4LCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9pbnQ4X21heCBWQUxVRVMgKDky MjMzNzIwMzY4NTQ3NzU4MDU6OmludDgsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICg5MjIzMzcyMDM2ODU0Nzc1ODA2OjppbnQ4LCAxKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoOTIyMzM3MjAzNjg1NDc3NTgwNzo6aW50OCwgMSk7CitDUkVBVEUg SU5ERVggT04gc2tpcF9pbnQ4X21heCAoYSwgYik7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVD VCBhLCBiIEZST00gc2tpcF9pbnQ4X21heCBXSEVSRSBiID0gMSBPUkRFUiBCWSBhOworU0VMRUNU IGEsIGIgRlJPTSBza2lwX2ludDhfbWF4IFdIRVJFIGIgPSAxIE9SREVSIEJZIGE7CitEUk9QIFRB QkxFIHNraXBfaW50OF9tYXg7CisKK0NSRUFURSBUQUJMRSBza2lwX2ludDhfbWluIChhIGludDgs IGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX2ludDhfbWluIFZBTFVFUyAoKC05MjIzMzcyMDM2 ODU0Nzc1ODA2KTo6aW50OCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KCgtOTIyMzM3MjAzNjg1NDc3NTgwNyk6OmludDgsIDEpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgoLTkyMjMzNzIwMzY4NTQ3NzU4MDgpOjppbnQ4LCAxKTsKK0NSRUFURSBJ TkRFWCBPTiBza2lwX2ludDhfbWluIChhLCBiKTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNU IGEsIGIgRlJPTSBza2lwX2ludDhfbWluIFdIRVJFIGIgPSAxIE9SREVSIEJZIGEgREVTQzsKK1NF TEVDVCBhLCBiIEZST00gc2tpcF9pbnQ4X21pbiBXSEVSRSBiID0gMSBPUkRFUiBCWSBhIERFU0M7 CitEUk9QIFRBQkxFIHNraXBfaW50OF9taW47CisKKy0tIG9pZCBib3VuZGFyaWVzIChvaWRfaW5j cmVtZW50IG92ZXJmbG93IGF0IE9JRF9NQVgsIG9pZF9kZWNyZW1lbnQgdW5kZXJmbG93IGF0IDAp CitDUkVBVEUgVEFCTEUgc2tpcF9vaWRfbWF4IChhIG9pZCwgYiBpbnQ0KTsKK0lOU0VSVCBJTlRP IHNraXBfb2lkX21heCBWQUxVRVMgKDQyOTQ5NjcyOTM6Om9pZCwgMSksICg0Mjk0OTY3Mjk0Ojpv aWQsIDEpLCAoNDI5NDk2NzI5NTo6b2lkLCAxKTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX29pZF9t YXggKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lk X21heCBXSEVSRSBiID0gMSBPUkRFUiBCWSBhOworU0VMRUNUIGEsIGIgRlJPTSBza2lwX29pZF9t YXggV0hFUkUgYiA9IDEgT1JERVIgQlkgYTsKK0RST1AgVEFCTEUgc2tpcF9vaWRfbWF4OworCitD UkVBVEUgVEFCTEUgc2tpcF9vaWRfbWluIChhIG9pZCwgYiBpbnQ0KTsKK0lOU0VSVCBJTlRPIHNr aXBfb2lkX21pbiBWQUxVRVMgKDA6Om9pZCwgMSksICgxOjpvaWQsIDEpLCAoMjo6b2lkLCAxKTsK K0NSRUFURSBJTkRFWCBPTiBza2lwX29pZF9taW4gKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkX21pbiBXSEVSRSBiID0gMSBPUkRFUiBCWSBhIERF U0M7CitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkX21pbiBXSEVSRSBiID0gMSBPUkRFUiBCWSBh IERFU0M7CitEUk9QIFRBQkxFIHNraXBfb2lkX21pbjsKKworLS0gb2lkOCBib3VuZGFyaWVzICh1 aW50NjQgcmFuZ2UpCitDUkVBVEUgVEFCTEUgc2tpcF9vaWQ4X21heCAoYSBvaWQ4LCBiIGludDQp OworSU5TRVJUIElOVE8gc2tpcF9vaWQ4X21heCBWQUxVRVMgKCcxODQ0Njc0NDA3MzcwOTU1MTYx Myc6Om9pZDgsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnMTg0NDY3 NDQwNzM3MDk1NTE2MTQnOjpvaWQ4LCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoJzE4NDQ2NzQ0MDczNzA5NTUxNjE1Jzo6b2lkOCwgMSk7CitDUkVBVEUgSU5ERVggT04g c2tpcF9vaWQ4X21heCAoYSwgYik7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBhLCBiIEZS T00gc2tpcF9vaWQ4X21heCBXSEVSRSBiID0gMSBPUkRFUiBCWSBhOworU0VMRUNUIGEsIGIgRlJP TSBza2lwX29pZDhfbWF4IFdIRVJFIGIgPSAxIE9SREVSIEJZIGE7CitEUk9QIFRBQkxFIHNraXBf b2lkOF9tYXg7CisKK0NSRUFURSBUQUJMRSBza2lwX29pZDhfbWluIChhIG9pZDgsIGIgaW50NCk7 CitJTlNFUlQgSU5UTyBza2lwX29pZDhfbWluIFZBTFVFUyAoMDo6b2lkOCwgMSksICgxOjpvaWQ4 LCAxKSwgKDI6Om9pZDgsIDEpOworQ1JFQVRFIElOREVYIE9OIHNraXBfb2lkOF9taW4gKGEsIGIp OworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkOF9taW4gV0hF UkUgYiA9IDEgT1JERVIgQlkgYSBERVNDOworU0VMRUNUIGEsIGIgRlJPTSBza2lwX29pZDhfbWlu IFdIRVJFIGIgPSAxIE9SREVSIEJZIGEgREVTQzsKK0RST1AgVEFCTEUgc2tpcF9vaWQ4X21pbjsK KworLS0gImNoYXIiIGJvdW5kYXJpZXMgKHVpbnQ4IGJ5dGUgcmFuZ2U6IGNoYXJfaW5jcmVtZW50 IG92ZXJmbG93IGF0IDI1NSwKKy0tIGNoYXJfZGVjcmVtZW50IHVuZGVyZmxvdyBhdCAwKS4gICJj aGFyIiBpbnB1dCBjYXN0IGFjY2VwdHMgLTEyOC4uMTI3IGZvcgorLS0gYSBzaWduZWQgaW50MSwg c28gYnl0ZXMgMjU0IGFuZCAyNTUgYXJlIHdyaXR0ZW4gYXMgLTIgYW5kIC0xLgorQ1JFQVRFIFRB QkxFIHNraXBfY2hhcl9tYXggKGEgImNoYXIiLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9j aGFyX21heCBWQUxVRVMgKCgtMyk6OiJjaGFyIiwgMSksICgoLTIpOjoiY2hhciIsIDEpLCAoKC0x KTo6ImNoYXIiLCAxKTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2NoYXJfbWF4IChhLCBiKTsKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGEsIGIgRlJPTSBza2lwX2NoYXJfbWF4IFdIRVJFIGIg PSAxIE9SREVSIEJZIGE7CitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfY2hhcl9tYXggV0hFUkUgYiA9 IDEgT1JERVIgQlkgYTsKK0RST1AgVEFCTEUgc2tpcF9jaGFyX21heDsKKworQ1JFQVRFIFRBQkxF IHNraXBfY2hhcl9taW4gKGEgImNoYXIiLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9jaGFy X21pbiBWQUxVRVMgKDA6OiJjaGFyIiwgMSksICgxOjoiY2hhciIsIDEpLCAoMjo6ImNoYXIiLCAx KTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2NoYXJfbWluIChhLCBiKTsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIGEsIGIgRlJPTSBza2lwX2NoYXJfbWluIFdIRVJFIGIgPSAxIE9SREVSIEJZ IGEgREVTQzsKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9jaGFyX21pbiBXSEVSRSBiID0gMSBPUkRF UiBCWSBhIERFU0M7CitEUk9QIFRBQkxFIHNraXBfY2hhcl9taW47CisKK1JFU0VUIGVuYWJsZV9z ZXFzY2FuOworUkVTRVQgZW5hYmxlX2JpdG1hcHNjYW47Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0x NTUpCgo= --0000000000008151460653861270--