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.94.2) (envelope-from ) id 1vAEVb-00FzwX-7o for pgsql-hackers@arkaria.postgresql.org; Sat, 18 Oct 2025 21:30:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vAEVZ-0099Vj-Iv for pgsql-hackers@arkaria.postgresql.org; Sat, 18 Oct 2025 21:30:36 +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.94.2) (envelope-from ) id 1vAEVZ-0099Va-2v for pgsql-hackers@lists.postgresql.org; Sat, 18 Oct 2025 21:30:36 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vAEVV-002xE2-21 for pgsql-hackers@lists.postgresql.org; Sat, 18 Oct 2025 21:30:35 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b5dfff01511so75633166b.2 for ; Sat, 18 Oct 2025 14:30:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760823032; x=1761427832; 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=fXHwFfrwznleIMSbUeoCMzvGe1/0wMxo6ZpTE1+qhzQ=; b=bSvaqxxuh3m5kpZlUqM1rv0Q6/55TmEtv5M/nNR3zCp0eJKYd1IIJS9gVjCLAIVWnO daqpGvoNbDL6YbJ+tAIo4RJvQiJmZ9TUIUsifUTphnwYpftccKPA2NAVTdNMFaV5Ijlh PkasvWyenOS5SjKoAzl+6f8tEqt+8n9uls5TabfPpGNB+nS+O5l0LRt72qcX2Ah94mT8 HHWDrrOIhMgnWhs7hWaL5oUJzjS6RreF7/6E7C03KwbzOsEJuenaTv5UOeFWLha08Ayu WqH5wva0YKbUa5lLbuDfDroOkxmgOVYaEtoAUxg43tYOgZQ0l0lkYsvVDnm3MbAC881Y BBLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760823032; x=1761427832; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fXHwFfrwznleIMSbUeoCMzvGe1/0wMxo6ZpTE1+qhzQ=; b=CN46RSPNjNRBL8a4x5bPkdG62C+PbuEOAUzL5KxwrWpG3ZYP7DfwcMQg3eOExz2cc1 ylITeLAV/5dPpP8m+uFLe4HRaoaPeBrQu3Fa/8s6H8ym7cPUGbpNEF9BCZw16ofNzY0h SCBTPGW8VzJ2QKLXKk1X85W8NbphNhfP58nJxUbZ6hj4nM7uWgAYsgzZ+WI4rwXaW5+s Z9t0oIjgHZi+/jH+6rfMuh/Q21Cg1chYL35M9Pkdi1hVUp5LyDGExeaKbTrrnA1LuSI/ kbysDCSLnIF+DoWACHqlMn2ylSN+tJi1/WySvSrh36LVatnRprRXZad0dCoHSJH7QjWF pgpA== X-Forwarded-Encrypted: i=1; AJvYcCWuKWfoTpv3mW3pckjaboHRtlj6cTqkGZdC/wtjfGxfcNyLUhbs9RhFS5wYl3d51rxv893IEiRxnYmbQ+vk@lists.postgresql.org X-Gm-Message-State: AOJu0YwmErIiWlOicuJu19fr0XxEpSy65ufFZmMncOG8gWlbJhI/+eO2 CrOD4XJ0JZuac9HAxE6TlmdptZkgpqEcUgyE8iUZ9iIQbMT5kpxwd2B+APExdcg75FTB1F+lokb m0okz0RHVRunvEjQrH8LS9xaQ6F61a1qZNM5M X-Gm-Gg: ASbGncsEgQeyl2hdkyS7zgzXxA2bWsmwe3Lwf9Hu2lef/AvLO7pCoy4ksd/LKhu5jq1 9CQ01wMvHxKaHOkORsES/8XHcPnw3SWkY75w7M+0e0kDHhKuDjhycm8jEMT9b9HEcax347faT/K +nxJHNPevwaCGDFxFhG6dUTGvpA241NHP4X8wHsQvnoIaZWa2QfHk6LQr8jtL9X1O3v2Ul5deIs ivyPya+6yxZfmOtauPB6FLfxEbSsam8a/obaQbCBClZoO4Mx+ryL2LTVcEbCw== X-Google-Smtp-Source: AGHT+IHmpC5v6sx70+610CZMkg2D+KHuy+GQ7X0uemiyD34Q2ped4KAUvX8LMT86X6jZCdeFHfLsM+0DsMOeg+t397M= X-Received: by 2002:a05:6402:35d3:b0:63c:d42:5949 with SMTP id 4fb4d7f45d1cf-63c1f6c0f71mr4323590a12.5.1760823031751; Sat, 18 Oct 2025 14:30:31 -0700 (PDT) MIME-Version: 1.0 References: <20250911054220.3784-1-root@ip-172-31-36-228.ec2.internal> In-Reply-To: From: Andrew Kim Date: Sat, 18 Oct 2025 14:30:21 -0700 X-Gm-Features: AS18NWDipZS-pYjKvTCeLbHNKxIsKLN793u9-rzz2HorXnY_qJfEfLH8ItfOeD8 Message-ID: Subject: Re: Proposal for enabling auto-vectorization for checksum calculations To: Oleg Tselebrovskiy Cc: John Naylor , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000521a080641758fb8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000521a080641758fb8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Oleg, Thank you very much for the detailed and constructive feedback on v6 patch. It was extremely helpful in refining the architecture and ensuring compliance with PostgreSQL coding standards. I have updated the patch to V7, which I believe addresses all of your points, including the critical architectural concerns regarding file organization and linking. Key Changes and Feedback Resolution in V7 The architecture is now consolidated in the src/port module. 1. Compiler Flags (Unroll/Vectorize)Resolved: Compiler flags (CFLAGS_UNROLL_LOOPS) are now correctly placed and applied to checksum.c in src/port/Makefile and src/port/meson. 2. Header OrganizationResolved: checksum.h and checksum_impl.h have been moved from src/include/storage/ to src/include/port/ for consistent module organization. 3. External Program CompatibilityResolved: checksum_impl.h is now fully self-contained. It provides the static inline implementations (pg_checksum_block_default, pg_checksum_block_avx2) and all required constants, ensuring external tools can calculate checksums without linking to the backend library. 4. Duplicate FilesResolved: The redundant src/backend/storage/page/checksum.c file has been removed, consolidating all implementation logic into src/port/checksum.c. 5. Function NamingResolved: The dispatch pattern now uses pg_checksum_block_choose, aligning with the established naming conventions (e.g., CRC32C module). The implementations use the clear names pg_checksum_block_default and pg_checksum_block_avx2. 7. Documentation/CommentsResolved: Comprehensive documentation, including the detailed FNV-1a algorithm comments, has been restored to the portable implementation (pg_checksum_block_default). Best regards, Andrew Kim On Fri, Oct 17, 2025 at 3:53=E2=80=AFAM Oleg Tselebrovskiy wrote: > > Greetings! > > I've also tried to use AVX2 to speedup checksums and I've found your > approach quite interesting > > But I see some issues with v6 patch > > 1) checksum.c was moved to src/port, but special meson rules are left in > src/backend/storage/page/meson.build. As a result, assembly code for > moved src/port/checksum.c doesn't use -funroll-loops and > -ftree-vectorize (latter isn't probably needed now, due to the nature of > the patch). The same is true for src/port/Makefile, there are no > instructions to use CFLAGS_UNROLL_LOOPS and CFLAGS_VECTORIZE > > 2) checksum.c was moved to src/port, but checksum.h and checksum_impl.h > are left in src/include/storage. I think they both should be moved to > src/include/port, as John Naylor suggested in his review of v5 > > 3) checksum_impl.h now doesn't provide any code, so including it in > external programs won't allow checksum calculation. I think that all > code should be in checksum_impl.h, and external programs could just > define USE_AVX2_WITH_RUNTIME_CHECK (probably using similar checks as we > are) to use AVX2 implementation. If not - then they will default to > default realisation > > 4) I don't understand why do we need to check for AVX2 intrinsics if we > don't use those in code (at least I don't see them directly)? As in > review of v5, couldn't test functions in configure, config/c-compiler.m4 > and ./meson.build just be {return 0;} or {return 1;}? > > 5) Why do we need both src/backend/storage/page/checksum.c and > src/port/checksum.c? > > 6) > > +/* Function declarations for ISA-specific implementations */ > > +uint32 pg_checksum_block_default(const PGChecksummablePage *page); > > +#ifdef USE_AVX2_WITH_RUNTIME_CHECK > > +uint32 pg_checksum_block_avx2(const PGChecksummablePage *page); > > +#endif > > What is "ISA-specific implementations" in this comment? Maybe I'm just > not familiar with the term? Or is it an artifact from macro > implementation? > > 7) Why remove all comments from code of pg_checksum_block_default? I > could understand if you just removed comments from > pg_checksum_block_avx2, since it just duplicates code (though I > personally would leave all the comments even when duplicating code), but > I don't understand removing comments from pg_checksum_block_default > > 8) It might be a personal taste, but pg_checksum_block_dispatch looks > more like "choose" function from src/port/pg_crc32c_sse42_choose.c and > alike. "dispatch" from src/include/port/pg_crc32c looks a little > different - we don't choose function pointer once there, we choose > between inlined computation and calling a function with runtime check. > So I'd suggest changing name of pg_checksum_block_dispatch to > pg_checksum_block_choose > > Other than those, I think the core of this patch is good > > Oleg Tselebrovskiy, PostgresPro --000000000000521a080641758fb8 Content-Type: application/octet-stream; name="v7-0001-Enable-autovectorizing-pg_checksum_block-with-AVX2-runtime-detection.patch" Content-Disposition: attachment; filename="v7-0001-Enable-autovectorizing-pg_checksum_block-with-AVX2-runtime-detection.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgwse2u90 RnJvbSBmZTdkMmU0MDYxMDQyYzRmZDMwYzljNzA5NTg4OWZjZjc3N2JlMTA1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcga2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogU2F0LCAxOCBPY3QgMjAyNSAxMjoxMzo1MCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMS8yXSBF bmFibGUgYXV0b3ZlY3Rvcml6aW5nIHBnX2NoZWNrc3VtX2Jsb2NrIHdpdGggQVZYMgogcnVudGlt ZS1kZXRlY3Rpb24KCiAgICAgICAgMS4gQ29tcGlsZXIgZmxhZ3M6IE1vdmVkIENGTEFHU19VTlJP TExfTE9PUFMgYW5kIENGTEFHU19WRUNUT1JJWkUgdG8KICAgICAgICAgICBwcm9wZXIgcG9ydCBt b2R1bGUgYnVpbGQgZmlsZXMKCiAgICAgICAgMi4gSGVhZGVyIG9yZ2FuaXphdGlvbjogUmVsb2Nh dGVkIGhlYWRlcnMgZnJvbSBzcmMvaW5jbHVkZS9zdG9yYWdlLwogICAgICAgICAgIHRvIHNyYy9p bmNsdWRlL3BvcnQvIGZvciBjb3JyZWN0IG1vZHVsZSBjbGFzc2lmaWNhdGlvbgoKICAgICAgICAz LiBFeHRlcm5hbCBjb21wYXRpYmlsaXR5OiBNYWRlIGNoZWNrc3VtX2ltcGwuaCBmdWxseSBzZWxm LWNvbnRhaW5lZCB3aXRoCiAgICAgICAgICAgaW5saW5lIGltcGxlbWVudGF0aW9ucywgcmVxdWly ZWQgY29uc3RhbnRzLCBhbmQgZXh0ZXJuYWwgaW50ZXJmYWNlCgogICAgICAgIDQuIFNpbXBsaWZp ZWQgQVZYMiBkZXRlY3Rpb246IFJlcGxhY2VkIGNvbXBsZXggQ1BVSUQgbG9naWMgd2l0aAogICAg ICAgICAgIF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMoJ2F2eDInKQoKICAgICAgICA1LiBGaWxlIGNv bnNvbGlkYXRpb246IFJlbW92ZWQgZHVwbGljYXRlIGJhY2tlbmQvc3RvcmFnZS9wYWdlL2NoZWNr c3VtLmMsCiAgICAgICAgICAgbW92ZWQgcGdfY2hlY2tzdW1fcGFnZSB0byB1bmlmaWVkIHBvcnQg aW1wbGVtZW50YXRpb24KCiAgICAgICAgNi4gRG9jdW1lbnRhdGlvbjogUmVzdG9yZWQgY29tcHJl aGVuc2l2ZSBhbGdvcml0aG0gY29tbWVudHMKCiAgICAgICAgNy4gQ29tbWVudCBjbGFyaXR5OiBS ZXBsYWNlZCBjb25mdXNpbmcgSVNBLXNwZWNpZmljIHJlZmVyZW5jZXMKLS0tCiBjb25maWcvYy1j b21waWxlci5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzEgKysrKysKIGNvbmZpZ3Vy ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MiArKysrKysrKwogY29u ZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsrCiBtZXNv bi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjggKysrKysKIHNy Yy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMgICAgICAgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9wYWdlL01ha2VmaWxlICAgICAgICAgICAgIHwgICA0IC0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9wYWdlL2NoZWNrc3VtLmMgICAgICAgICAgIHwgIDIyIC0tLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvcGFnZS9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgOSAtLQogc3JjL2Jp bi9wZ19jaGVja3N1bXMvcGdfY2hlY2tzdW1zLmMgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmlu L3BnX3VwZ3JhZGUvZmlsZS5jICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNs dWRlL3BnX2NvbmZpZy5oLmluICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVk ZS97c3RvcmFnZSA9PiBwb3J0fS9jaGVja3N1bS5oICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRl L3tzdG9yYWdlID0+IHBvcnR9L2NoZWNrc3VtX2ltcGwuaCB8IDEwNCArKysrKysrKy0tLS0tLS0t CiBzcmMvcG9ydC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwog c3JjL3BvcnQvY2hlY2tzdW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTE2ICsrKysr KysrKysrKysrKysrKwogc3JjL3BvcnQvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICA1ICstCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMgICAgICAg ICAgfCAgIDIgKy0KIHNyYy90b29scy9wZ2luY2x1ZGUvaGVhZGVyc2NoZWNrICAgICAgICAgICAg ICB8ICAgMiArLQogMTkgZmlsZXMgY2hhbmdlZCwgMzEwIGluc2VydGlvbnMoKyksIDk3IGRlbGV0 aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9jaGVj a3N1bS5jCiByZW5hbWUgc3JjL2luY2x1ZGUve3N0b3JhZ2UgPT4gcG9ydH0vY2hlY2tzdW0uaCAo OTQlKQogcmVuYW1lIHNyYy9pbmNsdWRlL3tzdG9yYWdlID0+IHBvcnR9L2NoZWNrc3VtX2ltcGwu aCAoNzclKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wb3J0L2NoZWNrc3VtLmMKCmRpZmYgLS1n aXQgYS9jb25maWcvYy1jb21waWxlci5tNCBiL2NvbmZpZy9jLWNvbXBpbGVyLm00CmluZGV4IDIz NmE1OWU4NTM2Li5iY2MxMzk4ZDUxYSAxMDA2NDQKLS0tIGEvY29uZmlnL2MtY29tcGlsZXIubTQK KysrIGIvY29uZmlnL2MtY29tcGlsZXIubTQKQEAgLTcxMSw2ICs3MTEsMzcgQEAgZmkKIHVuZGVm aW5lKFtBY19jYWNoZXZhcl0pZG5sCiBdKSMgUEdBQ19YU0FWRV9JTlRSSU5TSUNTCiAKKyMgUEdB Q19BVlgyX1NVUFBPUlQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sg aWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIEFWWDIgaW4gYXR0cmlidXRlKCh0YXJnZXQpKQorIyBh bmQgdXNpbmcgQVZYMiBpbnRyaW5zaWNzIGluIHRob3NlIGZ1bmN0aW9ucworIworIyBJZiB0aGUg aW50cmluc2ljcyBhcmUgc3VwcG9ydGVkLCBzZXRzIHBnYWNfYXZ4Ml9zdXBwb3J0LgorQUNfREVG VU4oW1BHQUNfQVZYMl9TVVBQT1JUXSwKK1tkZWZpbmUoW0FjX2NhY2hldmFyXSwgW0FTX1RSX1NI KFtwZ2FjX2N2X2F2eDJfc3VwcG9ydF0pXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgQVZYMiBz dXBwb3J0XSwgW0FjX2NhY2hldmFyXSwKK1tBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFN KFsjaW5jbHVkZSA8aW1taW50cmluLmg+CisgICAgI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICNp ZiBkZWZpbmVkKF9faGFzX2F0dHJpYnV0ZSkgJiYgX19oYXNfYXR0cmlidXRlICh0YXJnZXQpCisg ICAgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhdngyIikpKQorICAgICNlbmRpZgorICAgIHN0YXRp YyBpbnQgYXZ4Ml90ZXN0KHZvaWQpCisgICAgeworICAgICAgY29uc3QgY2hhciBidWZAPDpAc2l6 ZW9mKF9fbTI1NmkpQDo+QDsKKyAgICAgIF9fbTI1NmkgYWNjdW0gPSBfbW0yNTZfbG9hZHVfc2ky NTYoKGNvbnN0IF9fbTI1NmkgKikgYnVmKTsKKwkgIGFjY3VtID0gX21tMjU2X2FkZF9lcGkzMihh Y2N1bSwgYWNjdW0pOworICAgICAgaW50IHJlc3VsdCA9IF9tbTI1Nl9leHRyYWN0X2VwaTMyKGFj Y3VtLCAwKTsKKyAgICAgIHJldHVybiAoaW50KSByZXN1bHQ7CisgICAgfV0sCisgIFtyZXR1cm4g YXZ4Ml90ZXN0KCk7XSldLAorICBbQWNfY2FjaGV2YXI9eWVzXSwKKyAgW0FjX2NhY2hldmFyPW5v XSldKQoraWYgdGVzdCB4IiRBY19jYWNoZXZhciIgPSB4InllcyI7IHRoZW4KKyAgcGdhY19hdngy X3N1cHBvcnQ9eWVzCitmaQordW5kZWZpbmUoW0FjX2NhY2hldmFyXSlkbmwKK10pIyBQR0FDX0FW WDJfU1VQUE9SVAorCiAjIFBHQUNfQVZYNTEyX1BPUENOVF9JTlRSSU5TSUNTCiAjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0 aGUgQVZYLTUxMiBwb3Bjb3VudCBpbnN0cnVjdGlvbnMgdXNpbmcgdGhlCmRpZmYgLS1naXQgYS9j b25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggMjJjZDg2NjE0N2IuLjIwOTg0OWM3NzNjIDEwMDc1 NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xNzU2Miw2ICsxNzU2Miw1OCBA QCAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1hTQVZFX0lOVFJJTlNJQ1MgMSIgPj5jb25mZGVmcy5o CiAKIGZpCiAKKyMgQ2hlY2sgZm9yIEFWWDIgdGFyZ2V0IGFuZCBpbnRyaW5zaWMgc3VwcG9ydAor IworaWYgdGVzdCB4IiRob3N0X2NwdSIgPSB4Ing4Nl82NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQVZYMiBzdXBwb3J0IiA+ JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBVlgyIHN1cHBvcnQuLi4gIiA+JjY7IH0KK2lm ICR7cGdhY19jdl9hdngyX3N1cHBvcnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8aW1taW50cmluLmg+ CisgICAgI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICNpZiBkZWZpbmVkKF9faGFzX2F0dHJpYnV0 ZSkgJiYgX19oYXNfYXR0cmlidXRlICh0YXJnZXQpCisgICAgX19hdHRyaWJ1dGVfXygodGFyZ2V0 KCJhdngyIikpKQorICAgICNlbmRpZgorICAgIHN0YXRpYyBpbnQgYXZ4Ml90ZXN0KHZvaWQpCisg ICAgeworICAgICAgY29uc3QgY2hhciBidWZbc2l6ZW9mKF9fbTI1NmkpXTsKKyAgICAgIF9fbTI1 NmkgYWNjdW0gPSBfbW0yNTZfbG9hZHVfc2kyNTYoKGNvbnN0IF9fbTI1NmkgKikgYnVmKTsKKwkg IGFjY3VtID0gX21tMjU2X2FkZF9lcGkzMihhY2N1bSwgYWNjdW0pOworICAgICAgaW50IHJlc3Vs dCA9IF9tbTI1Nl9leHRyYWN0X2VwaTMyKGFjY3VtLCAwKTsKKyAgICAgIHJldHVybiAoaW50KSBy ZXN1bHQ7CisgICAgfQoraW50CittYWluICgpCit7CityZXR1cm4gYXZ4Ml90ZXN0KCk7CisgIDsK KyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0 aGVuIDoKKyAgcGdhY19jdl9hdngyX3N1cHBvcnQ9eWVzCitlbHNlCisgIHBnYWNfY3ZfYXZ4Ml9z dXBwb3J0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHBnYWNfY3ZfYXZ4Ml9z dXBwb3J0IiA+JjUKKyRhc19lY2hvICIkcGdhY19jdl9hdngyX3N1cHBvcnQiID4mNjsgfQoraWYg dGVzdCB4IiRwZ2FjX2N2X2F2eDJfc3VwcG9ydCIgPSB4InllcyI7IHRoZW4KKyAgcGdhY19hdngy X3N1cHBvcnQ9eWVzCitmaQorCisgIGlmIHRlc3QgeCIkcGdhY19hdngyX3N1cHBvcnQiID0geCJ5 ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVD SyAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorZmkKKwogIyBDaGVjayBmb3IgQVZYLTUxMiBwb3Bj b3VudCBpbnRyaW5zaWNzCiAjCiBpZiB0ZXN0IHgiJGhvc3RfY3B1IiA9IHgieDg2XzY0IjsgdGhl bgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IGU0NDk0M2Fh NmZlLi5jMDYxYjFhODU0YyAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3Vy ZS5hYwpAQCAtMjA5MSw2ICsyMDkxLDE1IEBAIGlmIHRlc3QgeCIkcGdhY194c2F2ZV9pbnRyaW5z aWNzIiA9IHgieWVzIjsgdGhlbgogICBBQ19ERUZJTkUoSEFWRV9YU0FWRV9JTlRSSU5TSUNTLCAx LCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgWFNBVkUgaW50cmluc2ljcy5dKQogZmkKIAorIyBD aGVjayBmb3IgQVZYMiB0YXJnZXQgYW5kIGludHJpbnNpYyBzdXBwb3J0CisjCitpZiB0ZXN0IHgi JGhvc3RfY3B1IiA9IHgieDg2XzY0IjsgdGhlbgorICBQR0FDX0FWWDJfU1VQUE9SVCgpCisgIGlm IHRlc3QgeCIkcGdhY19hdngyX3N1cHBvcnQiID0geCJ5ZXMiOyB0aGVuCisgICAgQUNfREVGSU5F KFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSywgMSwgW0RlZmluZSB0byAxIHRvIHVzZSBBVlgy IGluc3RydWN0aW9ucyB3aXRoIGEgcnVudGltZSBjaGVjay5dKQorICBmaQorZmkKKwogIyBDaGVj ayBmb3IgQVZYLTUxMiBwb3Bjb3VudCBpbnRyaW5zaWNzCiAjCiBpZiB0ZXN0IHgiJGhvc3RfY3B1 IiA9IHgieDg2XzY0IjsgdGhlbgpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWls ZAppbmRleCAzOTU0MTZhNjA2MC4uYTM3ZWY4OGJmMTYgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxk CisrKyBiL21lc29uLmJ1aWxkCkBAIC0yMjkyLDYgKzIyOTIsMzQgQEAgaW50IG1haW4odm9pZCkK IAogZW5kaWYKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisjIENoZWNrIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIEFWWDIg c3VwcG9ydAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKK2lmIGhvc3RfY3B1ID09ICd4ODZfNjQnCisKKyAgcHJvZyA9ICcn JworI2luY2x1ZGUgPGltbWludHJpbi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2lmIGRlZmlu ZWQoX19oYXNfYXR0cmlidXRlKSAmJiBfX2hhc19hdHRyaWJ1dGUgKHRhcmdldCkKK19fYXR0cmli dXRlX18oKHRhcmdldCgiYXZ4MiIpKSkKKyNlbmRpZgoraW50IG1haW4odm9pZCkKK3sKKyAgY29u c3QgY2hhciBidWZbc2l6ZW9mKF9fbTI1NmkpXTsKKyAgX19tMjU2aSBhY2N1bSA9IF9tbTI1Nl9s b2FkdV9zaTI1NigoY29uc3QgX19tMjU2aSAqKSBidWYpOworICBhY2N1bSA9IF9tbTI1Nl9hZGRf ZXBpMzIoYWNjdW0sIGFjY3VtKTsKKyAgaW50IHJlc3VsdCA9IF9tbTI1Nl9leHRyYWN0X2VwaTMy KGFjY3VtLCAwKTsKKyAgcmV0dXJuIChpbnQpIHJlc3VsdDsKK30KKycnJworCisgIGlmIGNjLmxp bmtzKHByb2csIG5hbWU6ICdBVlgyIHN1cHBvcnQnLCBhcmdzOiB0ZXN0X2NfYXJncykKKyAgICBj ZGF0YS5zZXQoJ1VTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSycsIDEpCisgIGVuZGlmCisKK2Vu ZGlmCisKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCiAjIENoZWNrIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIEFWWC01MTIg cG9wY291bnQgaW50cmluc2ljcy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNl YmFja3VwLmMgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCmluZGV4IGJiN2Q5MGFh NWQ5Li5kODRjZWQ0YjQ3YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNr dXAuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCkBAIC0zOSw3ICszOSw3 IEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vd2Fsc2VuZGVyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5o IgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtX2ltcGwuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcmVpbml0LmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL3BhZ2UvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvTWFrZWZpbGUK aW5kZXggZGE1MzliMTEzYTYuLjVkOGEzZDJmNWFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL3BhZ2UvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL01ha2Vm aWxlCkBAIC0xNCwxMCArMTQsNiBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZp bGUuZ2xvYmFsCiAKIE9CSlMgPSAgXAogCWJ1ZnBhZ2UubyBcCi0JY2hlY2tzdW0ubyBcCiAJaXRl bXB0ci5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKLQot IyBQcm92aWRlIHNwZWNpYWwgb3B0aW1pemF0aW9uIGZsYWdzIGZvciBjaGVja3N1bS5jCi1jaGVj a3N1bS5vOiBDRkxBR1MgKz0gJHtDRkxBR1NfVU5ST0xMX0xPT1BTfSAke0NGTEFHU19WRUNUT1JJ WkV9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwppbmRleCBkYmI0OWVkOTE5Ny4uYjhmODg5 ZWZiODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwpAQCAtMTgsNyArMTgsNyBAQAog I2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCisjaW5jbHVkZSAi cG9ydC9jaGVja3N1bS5oIgogI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAi dXRpbHMvbWVtdXRpbHMuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdl L2NoZWNrc3VtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvY2hlY2tzdW0uYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkxMzQ1OWI1YTMuLjAwMDAwMDAwMDAwCi0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9jaGVja3N1bS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIg KzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogY2hlY2tzdW0uYwotICoJICBDaGVj a3N1bSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YSBwYWdlcy4KLSAqCi0gKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK LSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCi0gKgotICogSURFTlRJRklDQVRJT04KLSAqCSAgc3JjL2JhY2tlbmQv c3RvcmFnZS9wYWdlL2NoZWNrc3VtLmMKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2lu Y2x1ZGUgInBvc3RncmVzLmgiCi0KLSNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCi0vKgot ICogVGhlIGFjdHVhbCBjb2RlIGlzIGluIHN0b3JhZ2UvY2hlY2tzdW1faW1wbC5oLiAgVGhpcyBp cyBkb25lIHNvIHRoYXQKLSAqIGV4dGVybmFsIHByb2dyYW1zIGNhbiBpbmNvcnBvcmF0ZSB0aGUg Y2hlY2tzdW0gY29kZSBieSAjaW5jbHVkZSdpbmcKLSAqIHRoYXQgZmlsZSBmcm9tIHRoZSBleHBv cnRlZCBQb3N0Z3JlcyBoZWFkZXJzLiAgKENvbXBhcmUgb3VyIENSQyBjb2RlLikKLSAqLwotI2lu Y2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW1faW1wbC5oIgkvKiBJV1lVIHByYWdtYToga2VlcCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxkIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxkCmluZGV4IDExMmYwMGZmMzY1Li5jZjkyYThm NTVmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxkCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9tZXNvbi5idWlsZApAQCAtMSwxNCArMSw1IEBA CiAjIENvcHlyaWdodCAoYykgMjAyMi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAogCi1jaGVja3N1bV9iYWNrZW5kX2xpYiA9IHN0YXRpY19saWJyYXJ5KCdjaGVja3N1 bV9iYWNrZW5kX2xpYicsCi0gICdjaGVja3N1bS5jJywKLSAgZGVwZW5kZW5jaWVzOiBiYWNrZW5k X2J1aWxkX2RlcHMsCi0gIGt3YXJnczogaW50ZXJuYWxfbGliX2FyZ3MsCi0gIGNfYXJnczogdmVj dG9yaXplX2NmbGFncyArIHVucm9sbF9sb29wc19jZmxhZ3MsCi0pCi0KLWJhY2tlbmRfbGlua193 aXRoICs9IGNoZWNrc3VtX2JhY2tlbmRfbGliCi0KIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygK ICAgJ2J1ZnBhZ2UuYycsCiAgICdpdGVtcHRyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19j aGVja3N1bXMvcGdfY2hlY2tzdW1zLmMgYi9zcmMvYmluL3BnX2NoZWNrc3Vtcy9wZ19jaGVja3N1 bXMuYwppbmRleCBmMjBiZTgyODYyYS4uNTIzMWViMzMyMDcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfY2hlY2tzdW1zL3BnX2NoZWNrc3Vtcy5jCisrKyBiL3NyYy9iaW4vcGdfY2hlY2tzdW1zL3Bn X2NoZWNrc3Vtcy5jCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIK ICNpbmNsdWRlICJwZ19nZXRvcHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKLSNp bmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bV9p bXBsLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgorI2luY2x1ZGUgInBvcnQvY2hlY2tz dW1faW1wbC5oIgogCiAKIHN0YXRpYyBpbnQ2NCBmaWxlc19zY2FubmVkID0gMDsKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfdXBncmFkZS9maWxlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5j CmluZGV4IDkxZWQxNmFjYjA4Li4wODQzOTJhZTU0ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191 cGdyYWRlL2ZpbGUuYworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jCkBAIC0yNCw4ICsy NCw4IEBACiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVybS5oIgogI2luY2x1ZGUgInBnX3VwZ3Jh ZGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2No ZWNrc3VtLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bV9pbXBsLmgiCisjaW5jbHVkZSAi cG9ydC9jaGVja3N1bS5oIgorI2luY2x1ZGUgInBvcnQvY2hlY2tzdW1faW1wbC5oIgogCiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiBiL3NyYy9pbmNsdWRlL3Bn X2NvbmZpZy5oLmluCmluZGV4IGM0ZGM1ZDcyYmRiLi45ODdmOWI1Yzc3YyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KKysrIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmgu aW4KQEAgLTY3NSw2ICs2NzUsOSBAQAogLyogRGVmaW5lIHRvIDEgdG8gdXNlIEFWWC01MTIgQ1JD IGFsZ29yaXRobXMgd2l0aCBhIHJ1bnRpbWUgY2hlY2suICovCiAjdW5kZWYgVVNFX0FWWDUxMl9D UkMzMkNfV0lUSF9SVU5USU1FX0NIRUNLCiAKKy8qIERlZmluZSB0byAxIHRvIHVzZSBBVlgyIGlu c3RydWN0aW9ucyB3aXRoIGEgcnVudGltZSBjaGVjay4gKi8KKyN1bmRlZiBVU0VfQVZYMl9XSVRI X1JVTlRJTUVfQ0hFQ0sKKwogLyogRGVmaW5lIHRvIDEgdG8gdXNlIEFWWC01MTIgcG9wY291bnQg aW5zdHJ1Y3Rpb25zIHdpdGggYSBydW50aW1lIGNoZWNrLiAqLwogI3VuZGVmIFVTRV9BVlg1MTJf UE9QQ05UX1dJVEhfUlVOVElNRV9DSEVDSwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9y YWdlL2NoZWNrc3VtLmggYi9zcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3VtLmgKc2ltaWxhcml0eSBp bmRleCA5NCUKcmVuYW1lIGZyb20gc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bS5oCnJlbmFt ZSB0byBzcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3VtLmgKaW5kZXggMjVkMTNhNzk4ZDEuLmMyZmFl ZDgzZWRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtLmgKKysrIGIv c3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bS5oCkBAIC02LDcgKzYsNyBAQAogICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQogICoKLSAqIHNyYy9pbmNsdWRlL3N0b3JhZ2UvY2hlY2tzdW0u aAorICogc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bS5oCiAgKgogICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvY2hlY2tzdW1faW1wbC5oIGIv c3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bV9pbXBsLmgKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVu YW1lIGZyb20gc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bV9pbXBsLmgKcmVuYW1lIHRvIHNy Yy9pbmNsdWRlL3BvcnQvY2hlY2tzdW1faW1wbC5oCmluZGV4IGRhODdkNjFiYTUyLi4zNTdiMjA4 OWYwMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bV9pbXBsLmgKKysr IGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bV9pbXBsLmgKQEAgLTUsMTMgKzUsMTMgQEAKICAq CiAgKiBUaGlzIGZpbGUgZXhpc3RzIGZvciB0aGUgYmVuZWZpdCBvZiBleHRlcm5hbCBwcm9ncmFt cyB0aGF0IG1heSB3aXNoIHRvCiAgKiBjaGVjayBQb3N0Z3JlcyBwYWdlIGNoZWNrc3Vtcy4gIFRo ZXkgY2FuICNpbmNsdWRlIHRoaXMgdG8gZ2V0IHRoZSBjb2RlCi0gKiByZWZlcmVuY2VkIGJ5IHN0 b3JhZ2UvY2hlY2tzdW0uaC4gIChOb3RlOiB5b3UgbWF5IG5lZWQgdG8gcmVkZWZpbmUKKyAqIHJl ZmVyZW5jZWQgYnkgcG9ydC9jaGVja3N1bS5oLiAgKE5vdGU6IHlvdSBtYXkgbmVlZCB0byByZWRl ZmluZQogICogQXNzZXJ0KCkgYXMgZW1wdHkgdG8gY29tcGlsZSB0aGlzIHN1Y2Nlc3NmdWxseSBl eHRlcm5hbGx5LikKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCiAgKgotICog c3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bV9pbXBsLmgKKyAqIHNyYy9pbmNsdWRlL3BvcnQv Y2hlY2tzdW1faW1wbC5oCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KQEAgLTEwMSwxMiAr MTAxLDE1IEBACiAgKi8KIAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgorI2luY2x1ZGUg InBnX2NvbmZpZy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBmb3IgbWVtY3B5ICovCiAKIC8q IG51bWJlciBvZiBjaGVja3N1bXMgdG8gY2FsY3VsYXRlIGluIHBhcmFsbGVsICovCiAjZGVmaW5l IE5fU1VNUyAzMgogLyogcHJpbWUgbXVsdGlwbGllciBvZiBGTlYtMWEgaGFzaCAqLwogI2RlZmlu ZSBGTlZfUFJJTUUgMTY3Nzc2MTkKIAorCiAvKiBVc2UgYSB1bmlvbiBzbyB0aGF0IHRoaXMgY29k ZSBpcyB2YWxpZCB1bmRlciBzdHJpY3QgYWxpYXNpbmcgKi8KIHR5cGVkZWYgdW5pb24KIHsKQEAg LTEzOSw3NyArMTQyLDc2IEBAIGRvIHsgXAogfSB3aGlsZSAoMCkKIAogLyoKLSAqIEJsb2NrIGNo ZWNrc3VtIGFsZ29yaXRobS4gIFRoZSBwYWdlIG11c3QgYmUgYWRlcXVhdGVseSBhbGlnbmVkCi0g KiAoYXQgbGVhc3Qgb24gNC1ieXRlIGJvdW5kYXJ5KS4KKyAqIERlZmF1bHQgY2hlY2tzdW0gaW1w bGVtZW50YXRpb24gKGFsd2F5cyBhdmFpbGFibGUpCiAgKi8KLXN0YXRpYyB1aW50MzIKLXBnX2No ZWNrc3VtX2Jsb2NrKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpCitzdGF0aWMgaW5s aW5lIHVpbnQzMgorcGdfY2hlY2tzdW1fYmxvY2tfZGVmYXVsdF9pbXBsKGNvbnN0IFBHQ2hlY2tz dW1tYWJsZVBhZ2UgKnBhZ2UpCiB7Ci0JdWludDMyCQlzdW1zW05fU1VNU107Ci0JdWludDMyCQly ZXN1bHQgPSAwOwotCXVpbnQzMgkJaSwKLQkJCQlqOwotCi0JLyogZW5zdXJlIHRoYXQgdGhlIHNp emUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBhbGdvcml0aG0gKi8KLQlBc3NlcnQoc2l6ZW9mKFBH Q2hlY2tzdW1tYWJsZVBhZ2UpID09IEJMQ0tTWik7CisJdWludDMyIHN1bXNbTl9TVU1TXSwgcmVz dWx0ID0gMDsKKwl1aW50MzIgaSwgajsKIAotCS8qIGluaXRpYWxpemUgcGFydGlhbCBjaGVja3N1 bXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBvZmZzZXRzICovCisJLyogSW5pdGlhbGl6ZSBlYWNo IHBhcmFsbGVsIGNoZWNrc3VtIHdpdGggZGlmZmVyZW50IGJhc2Ugb2Zmc2V0cyAqLwogCW1lbWNw eShzdW1zLCBjaGVja3N1bUJhc2VPZmZzZXRzLCBzaXplb2YoY2hlY2tzdW1CYXNlT2Zmc2V0cykp OwogCi0JLyogbWFpbiBjaGVja3N1bSBjYWxjdWxhdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCAo dWludDMyKSAoQkxDS1NaIC8gKHNpemVvZih1aW50MzIpICogTl9TVU1TKSk7IGkrKykKKwkvKiBN YWluIGNoZWNrc3VtIGNhbGN1bGF0aW9uIGxvb3AgLSBwcm9jZXNzIHBhZ2UgZGF0YSBpbiBwYXJh bGxlbCAqLworCWZvciAoaSA9IDA7IGkgPCAodWludDMyKShCTENLU1ogLyAoc2l6ZW9mKHVpbnQz MikgKiBOX1NVTVMpKTsgaSsrKQogCQlmb3IgKGogPSAwOyBqIDwgTl9TVU1TOyBqKyspCiAJCQlD SEVDS1NVTV9DT01QKHN1bXNbal0sIHBhZ2UtPmRhdGFbaV1bal0pOwogCi0JLyogZmluYWxseSBh ZGQgaW4gdHdvIHJvdW5kcyBvZiB6ZXJvZXMgZm9yIGFkZGl0aW9uYWwgbWl4aW5nICovCisJLyog VHdvIGZpbmFsIHJvdW5kcyB3aXRoIHplcm8gdG8gbWl4IHJlbWFpbmluZyBiaXRzICovCiAJZm9y IChpID0gMDsgaSA8IDI7IGkrKykKIAkJZm9yIChqID0gMDsgaiA8IE5fU1VNUzsgaisrKQogCQkJ Q0hFQ0tTVU1fQ09NUChzdW1zW2pdLCAwKTsKIAotCS8qIHhvciBmb2xkIHBhcnRpYWwgY2hlY2tz dW1zIHRvZ2V0aGVyICovCisJLyogQ29tYmluZSBhbGwgcGFyYWxsZWwgY2hlY2tzdW1zIHdpdGgg WE9SIHRvIGdldCBmaW5hbCByZXN1bHQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTl9TVU1TOyBpKysp CiAJCXJlc3VsdCBePSBzdW1zW2ldOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmZGVmIFVT RV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSwogLyoKLSAqIENvbXB1dGUgdGhlIGNoZWNrc3VtIGZv ciBhIFBvc3RncmVzIHBhZ2UuCi0gKgotICogVGhlIHBhZ2UgbXVzdCBiZSBhZGVxdWF0ZWx5IGFs aWduZWQgKGF0IGxlYXN0IG9uIGEgNC1ieXRlIGJvdW5kYXJ5KS4KLSAqIEJld2FyZSBhbHNvIHRo YXQgdGhlIGNoZWNrc3VtIGZpZWxkIG9mIHRoZSBwYWdlIGlzIHRyYW5zaWVudGx5IHplcm9lZC4K LSAqCi0gKiBUaGUgY2hlY2tzdW0gaW5jbHVkZXMgdGhlIGJsb2NrIG51bWJlciAodG8gZGV0ZWN0 IHRoZSBjYXNlIHdoZXJlIGEgcGFnZSBpcwotICogc29tZWhvdyBtb3ZlZCB0byBhIGRpZmZlcmVu dCBsb2NhdGlvbiksIHRoZSBwYWdlIGhlYWRlciAoZXhjbHVkaW5nIHRoZQotICogY2hlY2tzdW0g aXRzZWxmKSwgYW5kIHRoZSBwYWdlIGRhdGEuCisgKiBBVlgyIG9wdGltaXplZCBpbXBsZW1lbnRh dGlvbiAobWF5IG5vdCBiZSBhdmFpbGFibGUgb24gYWxsIHN5c3RlbXMpCiAgKi8KLXVpbnQxNgot cGdfY2hlY2tzdW1fcGFnZShjaGFyICpwYWdlLCBCbG9ja051bWJlciBibGtubykKK3BnX2F0dHJp YnV0ZV90YXJnZXQoImF2eDIiKQorc3RhdGljIGlubGluZSB1aW50MzIKK3BnX2NoZWNrc3VtX2Js b2NrX2F2eDJfaW1wbChjb25zdCBQR0NoZWNrc3VtbWFibGVQYWdlICpwYWdlKQogewotCVBHQ2hl Y2tzdW1tYWJsZVBhZ2UgKmNwYWdlID0gKFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKikgcGFnZTsKLQl1 aW50MTYJCXNhdmVfY2hlY2tzdW07Ci0JdWludDMyCQljaGVja3N1bTsKLQotCS8qIFdlIG9ubHkg Y2FsY3VsYXRlIHRoZSBjaGVja3N1bSBmb3IgcHJvcGVybHktaW5pdGlhbGl6ZWQgcGFnZXMgKi8K LQlBc3NlcnQoIVBhZ2VJc05ldygoUGFnZSkgcGFnZSkpOwotCi0JLyoKLQkgKiBTYXZlIHBkX2No ZWNrc3VtIGFuZCB0ZW1wb3JhcmlseSBzZXQgaXQgdG8gemVybywgc28gdGhhdCB0aGUgY2hlY2tz dW0KLQkgKiBjYWxjdWxhdGlvbiBpc24ndCBhZmZlY3RlZCBieSB0aGUgb2xkIGNoZWNrc3VtIHN0 b3JlZCBvbiB0aGUgcGFnZS4KLQkgKiBSZXN0b3JlIGl0IGFmdGVyLCBiZWNhdXNlIGFjdHVhbGx5 IHVwZGF0aW5nIHRoZSBjaGVja3N1bSBpcyBOT1QgcGFydCBvZgotCSAqIHRoZSBBUEkgb2YgdGhp cyBmdW5jdGlvbi4KKwkvKiBGb3Igbm93LCBBVlgyIGltcGxlbWVudGF0aW9uIGlzIGlkZW50aWNh bCB0byBkZWZhdWx0CisJICogVGhlIGNvbXBpbGVyIHdpbGwgYXV0by12ZWN0b3JpemUgdGhpcyB3 aXRoIHByb3BlciBmbGFncworCSAqIEZ1dHVyZSB2ZXJzaW9ucyBjb3VsZCB1c2UgZXhwbGljaXQg QVZYMiBpbnRyaW5zaWNzIGhlcmUKIAkgKi8KLQlzYXZlX2NoZWNrc3VtID0gY3BhZ2UtPnBoZHIu cGRfY2hlY2tzdW07Ci0JY3BhZ2UtPnBoZHIucGRfY2hlY2tzdW0gPSAwOwotCWNoZWNrc3VtID0g cGdfY2hlY2tzdW1fYmxvY2soY3BhZ2UpOwotCWNwYWdlLT5waGRyLnBkX2NoZWNrc3VtID0gc2F2 ZV9jaGVja3N1bTsKKwlyZXR1cm4gcGdfY2hlY2tzdW1fYmxvY2tfZGVmYXVsdF9pbXBsKHBhZ2Up OworfQorI2VuZGlmCiAKLQkvKiBNaXggaW4gdGhlIGJsb2NrIG51bWJlciB0byBkZXRlY3QgdHJh bnNwb3NlZCBwYWdlcyAqLwotCWNoZWNrc3VtIF49IGJsa25vOworLyogRnVuY3Rpb24gZGVjbGFy YXRpb25zIGZvciBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbnMgKi8KK3VpbnQzMiBwZ19jaGVja3N1 bV9ibG9ja19kZWZhdWx0KGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpOworI2lmZGVm IFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSwordWludDMyIHBnX2NoZWNrc3VtX2Jsb2NrX2F2 eDIoY29uc3QgUEdDaGVja3N1bW1hYmxlUGFnZSAqcGFnZSk7CisjZW5kaWYKIAotCS8qCi0JICog UmVkdWNlIHRvIGEgdWludDE2ICh0byBmaXQgaW4gdGhlIHBkX2NoZWNrc3VtIGZpZWxkKSB3aXRo IGFuIG9mZnNldCBvZgotCSAqIG9uZS4gVGhhdCBhdm9pZHMgY2hlY2tzdW1zIG9mIHplcm8sIHdo aWNoIHNlZW1zIGxpa2UgYSBnb29kIGlkZWEuCi0JICovCi0JcmV0dXJuICh1aW50MTYpICgoY2hl Y2tzdW0gJSA2NTUzNSkgKyAxKTsKK3VpbnQzMiBwZ19jaGVja3N1bV9ibG9ja19jaG9vc2UoY29u c3QgUEdDaGVja3N1bW1hYmxlUGFnZSAqcGFnZSk7CitleHRlcm4gdWludDMyICgqcGdfY2hlY2tz dW1fYmxvY2spKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpOworCisvKgorICogU2lt cGxlIGludGVyZmFjZSBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMKKyAqIERlZmluZSBVU0VfQVZYMl9X SVRIX1JVTlRJTUVfQ0hFQ0sgYmVmb3JlIGluY2x1ZGluZyB0byBlbmFibGUgQVZYMiBpZiBhdmFp bGFibGUKKyAqLworI2lmbmRlZiBQR19DSEVDS1NVTV9FWFRFUk5BTF9JTlRFUkZBQ0UKKyNkZWZp bmUgUEdfQ0hFQ0tTVU1fRVhURVJOQUxfSU5URVJGQUNFCisKK3N0YXRpYyBpbmxpbmUgdWludDMy CitwZ19jaGVja3N1bV9ibG9ja19zaW1wbGUoY29uc3QgUEdDaGVja3N1bW1hYmxlUGFnZSAqcGFn ZSkKK3sKKyNpZmRlZiBVU0VfQVZYMl9XSVRIX1JVTlRJTUVfQ0hFQ0sKKwkvKiBFeHRlcm5hbCBw cm9ncmFtcyBjYW4gdXNlIEFWWDIgaWYgdGhleSBkZWZpbmUgdGhlIG1hY3JvIGFuZCBoYXZlIENQ VSBzdXBwb3J0ICovCisJaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMoImF2eDIiKSkKKwkJcmV0 dXJuIHBnX2NoZWNrc3VtX2Jsb2NrX2F2eDJfaW1wbChwYWdlKTsKKwllbHNlCisjZW5kaWYKKwkJ cmV0dXJuIHBnX2NoZWNrc3VtX2Jsb2NrX2RlZmF1bHRfaW1wbChwYWdlKTsKIH0KKworI2VuZGlm IC8qIFBHX0NIRUNLU1VNX0VYVEVSTkFMX0lOVEVSRkFDRSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bv cnQvTWFrZWZpbGUgYi9zcmMvcG9ydC9NYWtlZmlsZQppbmRleCA0Mjc0OTQ5ZGZhNC4uNDMwYjdi YmJjYjYgMTAwNjQ0Ci0tLSBhL3NyYy9wb3J0L01ha2VmaWxlCisrKyBiL3NyYy9wb3J0L01ha2Vm aWxlCkBAIC00OCw2ICs0OCw3IEBAIE9CSlMgPSBcCiAJcGdfbnVtYS5vIFwKIAlwZ19wb3Bjb3Vu dF9hYXJjaDY0Lm8gXAogCXBnX3BvcGNvdW50X2F2eDUxMi5vIFwKKwljaGVja3N1bS5vIFwKIAlw Z19zdHJvbmdfcmFuZG9tLm8gXAogCXBnY2hlY2tkaXIubyBcCiAJcGdta2RpcnAubyBcCkBAIC05 MCw2ICs5MSwxMSBAQCBwZ19jcmMzMmNfYXJtdjgubzogQ0ZMQUdTKz0kKENGTEFHU19DUkMpCiBw Z19jcmMzMmNfYXJtdjhfc2hsaWIubzogQ0ZMQUdTKz0kKENGTEFHU19DUkMpCiBwZ19jcmMzMmNf YXJtdjhfc3J2Lm86IENGTEFHUys9JChDRkxBR1NfQ1JDKQogCisjIGFsbCB2ZXJzaW9ucyBvZiBj aGVja3N1bS5vIG5lZWQgdmVjdG9yaXphdGlvbiBhbmQgdW5yb2xsLWxvb3BzIGZsYWdzCitjaGVj a3N1bS5vOiBDRkxBR1MrPSQoQ0ZMQUdTX1ZFQ1RPUklaRSkgJChDRkxBR1NfVU5ST0xMX0xPT1BT KQorY2hlY2tzdW1fc2hsaWIubzogQ0ZMQUdTKz0kKENGTEFHU19WRUNUT1JJWkUpICQoQ0ZMQUdT X1VOUk9MTF9MT09QUykKK2NoZWNrc3VtX3Nydi5vOiBDRkxBR1MrPSQoQ0ZMQUdTX1ZFQ1RPUkla RSkgJChDRkxBR1NfVU5ST0xMX0xPT1BTKQorCiAjCiAjIFNoYXJlZCBsaWJyYXJ5IHZlcnNpb25z IG9mIG9iamVjdCBmaWxlcwogIwpkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvY2hlY2tzdW0uYyBiL3Ny Yy9wb3J0L2NoZWNrc3VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmRmMWExYjRjZTgzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvcnQvY2hlY2tzdW0uYwpAQCAt MCwwICsxLDExNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY2hlY2tzdW0uYworICoJ ICBDaGVja3N1bSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YSBwYWdlcyB3aXRoIEFWWDIgb3B0aW1p emF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBjb25zb2xpZGF0ZXMgYWxsIGNoZWNrc3VtLXJlbGF0 ZWQgZnVuY3Rpb25hbGl0eSBpbmNsdWRpbmc6CisgKiAtIFJ1bnRpbWUgQ1BVIGZlYXR1cmUgZGV0 ZWN0aW9uCisgKiAtIERlZmF1bHQgYW5kIEFWWDItb3B0aW1pemVkIGltcGxlbWVudGF0aW9ucwor ICogLSBGdW5jdGlvbiBkaXNwYXRjaCBsb2dpYworICogLSBQYWdlIGNoZWNrc3VtIGNhbGN1bGF0 aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkgIHNyYy9wb3J0L2NoZWNrc3VtLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgImMuaCIKKyNpbmNsdWRlICJwb3J0L2NoZWNrc3VtX2ltcGwuaCIKKwor I2lmbmRlZiBGUk9OVEVORAorI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9idWZwYWdlLmgiCisjZW5kaWYKKworCisKKy8qCisgKiBDaGVjayBmb3IgQVZYMiBzdXBwb3J0 IHVzaW5nIEdDQyBidWlsdGluCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorYXZ4Ml9hdmFpbGFi bGUodm9pZCkKK3sKKyNpZmRlZiBVU0VfQVZYMl9XSVRIX1JVTlRJTUVfQ0hFQ0sKKwlyZXR1cm4g X19idWlsdGluX2NwdV9zdXBwb3J0cygiYXZ4MiIpOworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7Cisj ZW5kaWYKK30KKworLyogZGVmYXVsdCBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbiAqLwordWludDMy CitwZ19jaGVja3N1bV9ibG9ja19kZWZhdWx0KGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBh Z2UpCit7CisJcmV0dXJuIHBnX2NoZWNrc3VtX2Jsb2NrX2RlZmF1bHRfaW1wbChwYWdlKTsKK30K KworI2lmZGVmIFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSworcGdfYXR0cmlidXRlX3Rhcmdl dCgiYXZ4MiIpCit1aW50MzIKK3BnX2NoZWNrc3VtX2Jsb2NrX2F2eDIoY29uc3QgUEdDaGVja3N1 bW1hYmxlUGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcGdfY2hlY2tzdW1fYmxvY2tfYXZ4Ml9pbXBs KHBhZ2UpOworfQorI2VuZGlmCisKKy8qIEZ1bmN0aW9uIHBvaW50ZXIgLSBleHRlcm5hbCBsaW5r YWdlIChkZWNsYXJlZCBleHRlcm4gaW4gaGVhZGVyKSAqLwordWludDMyICgqcGdfY2hlY2tzdW1f YmxvY2spKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpID0gcGdfY2hlY2tzdW1fYmxv Y2tfY2hvb3NlOworCisvKiBDaG9vc2UgdGhlIGJlc3QgYXZhaWxhYmxlIGNoZWNrc3VtIGltcGxl bWVudGF0aW9uICovCit1aW50MzIgcGdfY2hlY2tzdW1fYmxvY2tfY2hvb3NlKGNvbnN0IFBHQ2hl Y2tzdW1tYWJsZVBhZ2UgKnBhZ2UpCit7CisjaWZkZWYgVVNFX0FWWDJfV0lUSF9SVU5USU1FX0NI RUNLCisJaWYgKGF2eDJfYXZhaWxhYmxlKCkpCisJeworCQlwZ19jaGVja3N1bV9ibG9jayA9IHBn X2NoZWNrc3VtX2Jsb2NrX2F2eDI7CisJCXJldHVybiBwZ19jaGVja3N1bV9ibG9jayhwYWdlKTsK Kwl9CisjZW5kaWYKKwkvKiBmYWxsYmFjayAqLworCXBnX2NoZWNrc3VtX2Jsb2NrID0gcGdfY2hl Y2tzdW1fYmxvY2tfZGVmYXVsdDsKKwlyZXR1cm4gcGdfY2hlY2tzdW1fYmxvY2socGFnZSk7Cit9 CisKKy8qCisgKiBDb21wdXRlIHRoZSBjaGVja3N1bSBmb3IgYSBQb3N0Z3JlcyBwYWdlLgorICoK KyAqIFRoZSBwYWdlIG11c3QgYmUgYWRlcXVhdGVseSBhbGlnbmVkIChhdCBsZWFzdCBvbiBhIDQt Ynl0ZSBib3VuZGFyeSkuCisgKiBCZXdhcmUgYWxzbyB0aGF0IHRoZSBjaGVja3N1bSBmaWVsZCBv ZiB0aGUgcGFnZSBpcyB0cmFuc2llbnRseSB6ZXJvZWQuCisgKgorICogVGhlIGNoZWNrc3VtIGlu Y2x1ZGVzIHRoZSBibG9jayBudW1iZXIgKHRvIGRldGVjdCB0aGUgY2FzZSB3aGVyZSBhIHBhZ2Ug aXMKKyAqIHNvbWVob3cgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24pLCB0aGUgcGFnZSBo ZWFkZXIgKGV4Y2x1ZGluZyB0aGUKKyAqIGNoZWNrc3VtIGl0c2VsZiksIGFuZCB0aGUgcGFnZSBk YXRhLgorICovCit1aW50MTYKK3BnX2NoZWNrc3VtX3BhZ2UoY2hhciAqcGFnZSwgQmxvY2tOdW1i ZXIgYmxrbm8pCit7CisJUEdDaGVja3N1bW1hYmxlUGFnZSAqY3BhZ2UgPSAoUEdDaGVja3N1bW1h YmxlUGFnZSAqKSBwYWdlOworCXVpbnQxNiBzYXZlX2NoZWNrc3VtOworCXVpbnQzMiBjaGVja3N1 bTsKKworCS8qIFdlIG9ubHkgY2FsY3VsYXRlIHRoZSBjaGVja3N1bSBmb3IgcHJvcGVybHktaW5p dGlhbGl6ZWQgcGFnZXMgKi8KKwlBc3NlcnQoIVBhZ2VJc05ldygoUGFnZSkgcGFnZSkpOworCisJ LyoKKwkgKiBTYXZlIHBkX2NoZWNrc3VtIGFuZCB0ZW1wb3JhcmlseSBzZXQgaXQgdG8gemVybywg c28gdGhhdCB0aGUgY2hlY2tzdW0KKwkgKiBjYWxjdWxhdGlvbiBpc24ndCBhZmZlY3RlZCBieSB0 aGUgb2xkIGNoZWNrc3VtIHN0b3JlZCBvbiB0aGUgcGFnZS4KKwkgKiBSZXN0b3JlIGl0IGFmdGVy LCBiZWNhdXNlIGFjdHVhbGx5IHVwZGF0aW5nIHRoZSBjaGVja3N1bSBpcyBOT1QgcGFydCBvZgor CSAqIHRoZSBBUEkgb2YgdGhpcyBmdW5jdGlvbi4KKwkgKi8KKwlzYXZlX2NoZWNrc3VtID0gY3Bh Z2UtPnBoZHIucGRfY2hlY2tzdW07CisJY3BhZ2UtPnBoZHIucGRfY2hlY2tzdW0gPSAwOworCWNo ZWNrc3VtID0gcGdfY2hlY2tzdW1fYmxvY2soY3BhZ2UpOworCWNwYWdlLT5waGRyLnBkX2NoZWNr c3VtID0gc2F2ZV9jaGVja3N1bTsKKworCS8qIE1peCBpbiB0aGUgYmxvY2sgbnVtYmVyIHRvIGRl dGVjdCB0cmFuc3Bvc2VkIHBhZ2VzICovCisJY2hlY2tzdW0gXj0gYmxrbm87CisKKwkvKgorCSAq IFJlZHVjZSB0byBhIHVpbnQxNiAodG8gZml0IGluIHRoZSBwZF9jaGVja3N1bSBmaWVsZCkgd2l0 aCBhbiBvZmZzZXQgb2YKKwkgKiBvbmUuIFRoYXQgYXZvaWRzIGNoZWNrc3VtcyBvZiB6ZXJvLCB3 aGljaCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhLgorCSAqLworCXJldHVybiAodWludDE2KSgoY2hl Y2tzdW0gJSA2NTUzNSkgKyAxKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9wb3J0L21lc29uLmJ1aWxk IGIvc3JjL3BvcnQvbWVzb24uYnVpbGQKaW5kZXggZmM3YjA1OWZlZTUuLjIwNzQ1NTNmOWE1IDEw MDY0NAotLS0gYS9zcmMvcG9ydC9tZXNvbi5idWlsZAorKysgYi9zcmMvcG9ydC9tZXNvbi5idWls ZApAQCAtMTAyLDEwICsxMDIsMTEgQEAgcmVwbGFjZV9mdW5jc19wb3MgPSBbCiAKICAgIyBnZW5l cmljIGZhbGxiYWNrCiAgIFsncGdfY3JjMzJjX3NiOCcsICdVU0VfU0xJQ0lOR19CWV84X0NSQzMy QyddLAorCiBdCiAKLXBncG9ydF9jZmxhZ3MgPSB7J2NyYyc6IGNmbGFnc19jcmN9Ci1wZ3BvcnRf c291cmNlc19jZmxhZ3MgPSB7J2NyYyc6IFtdfQorcGdwb3J0X2NmbGFncyA9IHsnY3JjJzogY2Zs YWdzX2NyYywgJ2NoZWNrc3VtJzogdW5yb2xsX2xvb3BzX2NmbGFncyArIHZlY3Rvcml6ZV9jZmxh Z3N9CitwZ3BvcnRfc291cmNlc19jZmxhZ3MgPSB7J2NyYyc6IFtdLCAnY2hlY2tzdW0nOiBbZmls ZXMoJ2NoZWNrc3VtLmMnKV19CiAKIGZvcmVhY2ggZiA6IHJlcGxhY2VfZnVuY3NfbmVnCiAgIGZ1 bmMgPSBmLmdldCgwKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0 X2Fpby5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCmluZGV4IGM1NWNm NmMwYWFjLi4xNzVlNDkxYzBiYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fp by90ZXN0X2Fpby5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwpA QCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYWlvX2ludGVybmFsLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu aCIKLSNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1 bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2su aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3Bn aW5jbHVkZS9oZWFkZXJzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2hlYWRlcnNjaGVjawpp bmRleCBhNTJhNTU4MGJkYy4uMzVhYzBjYWFhNDMgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2lu Y2x1ZGUvaGVhZGVyc2NoZWNrCisrKyBiL3NyYy90b29scy9wZ2luY2x1ZGUvaGVhZGVyc2NoZWNr CkBAIC0xNjcsNyArMTY3LDcgQEAgZG8KIAl0ZXN0ICIkZiIgPSBzcmMvdGVzdC9pc29sYXRpb24v c3BlY3BhcnNlLmggJiYgY29udGludWUKIAogCSMgVGhpcyBwcm9kdWNlcyBhICJubyBwcmV2aW91 cyBwcm90b3R5cGUiIHdhcm5pbmcuCi0JISAkY3BsdXNwbHVzICYmIHRlc3QgIiRmIiA9IHNyYy9p bmNsdWRlL3N0b3JhZ2UvY2hlY2tzdW1faW1wbC5oICYmIGNvbnRpbnVlCisJISAkY3BsdXNwbHVz ICYmIHRlc3QgIiRmIiA9IHNyYy9pbmNsdWRlL3BvcnQvY2hlY2tzdW1faW1wbC5oICYmIGNvbnRp bnVlCiAKIAkjIFNlY3Rpb25NZW1vcnlNYW5hZ2VyLmggaXMgQysrCiAJdGVzdCAiJGYiID0gc3Jj L2luY2x1ZGUvaml0L1NlY3Rpb25NZW1vcnlNYW5hZ2VyLmggJiYgY29udGludWUKLS0gCjIuNDMu MAoK --000000000000521a080641758fb8 Content-Type: application/octet-stream; name="v7-0002-Benchmark-code-for-postgres-checksums.patch" Content-Disposition: attachment; filename="v7-0002-Benchmark-code-for-postgres-checksums.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgwse4r51 RnJvbSAyZmJhZmQ4M2YwMTMzYjU3MzdhNDdjOTIyNmRkNzJmODZjMmViOTk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcga2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogU2F0LCAxOCBPY3QgMjAyNSAxMzoxMzowNSAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBC ZW5jaG1hcmsgY29kZSBmb3IgcG9zdGdyZXMgY2hlY2tzdW1zCgotLS0KIGNvbnRyaWIvbWVzb24u YnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIGNvbnRyaWIvcGFnZWluc3Bl Y3QvcmF3cGFnZS5jICAgICAgICAgICAgICAgICB8ICAyICstCiBjb250cmliL3BnX2NoZWNrc3Vt X2JlbmNoL21lc29uLmJ1aWxkICAgICAgICAgfCAyMyArKysrKysrKysrKysrCiAuLi4vcGdfY2hl Y2tzdW1fYmVuY2gtLTEuMC5zcWwgICAgICAgICAgICAgICAgfCAgOCArKysrKwogY29udHJpYi9w Z19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC5jIHwgMzQgKysrKysrKysrKysrKysr KysrKwogLi4uL3BnX2NoZWNrc3VtX2JlbmNoLmNvbnRyb2wgICAgICAgICAgICAgICAgIHwgIDQg KysrCiAuLi4vc3FsL3BnX2NoZWNrc3VtX2JlbmNoLnNxbCAgICAgICAgICAgICAgICAgfCAxNyAr KysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDg4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL21lc29uLmJ1 aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVj a3N1bV9iZW5jaC0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY2hlY2tz dW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guY29udHJvbAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvc3FsL3BnX2NoZWNrc3VtX2JlbmNoLnNx bAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxk CmluZGV4IGVkMzBlZTdkNjM5Li5mZTUxNDlhYWRmZiAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNv bi5idWlsZAorKysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC0xMiw2ICsxMiw3IEBAIGNvbnRy aWJfZG9jX2FyZ3MgPSB7CiAgICdpbnN0YWxsX2Rpcic6IGNvbnRyaWJfZG9jX2RpciwKIH0KIAor c3ViZGlyKCdwZ19jaGVja3N1bV9iZW5jaCcpCiBzdWJkaXIoJ2FtY2hlY2snKQogc3ViZGlyKCdh dXRoX2RlbGF5JykKIHN1YmRpcignYXV0b19leHBsYWluJykKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGFnZWluc3BlY3QvcmF3cGFnZS5jIGIvY29udHJpYi9wYWdlaW5zcGVjdC9yYXdwYWdlLmMKaW5k ZXggYWVmNDQyYjVkYjMuLjdiZWI3NzY1ZGE5IDEwMDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNw ZWN0L3Jhd3BhZ2UuYworKysgYi9jb250cmliL3BhZ2VpbnNwZWN0L3Jhd3BhZ2UuYwpAQCAtMjMs NyArMjMsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhZ2VpbnNwZWN0 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2NoZWNr c3VtLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL21lc29uLmJ1aWxkIGIvY29u dHJpYi9wZ19jaGVja3N1bV9iZW5jaC9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMzJjY2Q5ZWZhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX2NoZWNrc3VtX2JlbmNoL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMjMgQEAKKyMgQ29weXJp Z2h0IChjKSAyMDIyLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisK K3BnX2NoZWNrc3VtX2JlbmNoX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3BnX2NoZWNrc3VtX2JlbmNo LmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfY2hlY2tzdW1fYmVu Y2hfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6 IFsKKyAgICAnLS1OQU1FJywgJ3BnX2NoZWNrc3VtX2JlbmNoJywKKyAgICAnLS1GSUxFREVTQycs ICdwZ19jaGVja3N1bV9iZW5jaCcsXSkKK2VuZGlmCisKK3BnX2NoZWNrc3VtX2JlbmNoID0gc2hh cmVkX21vZHVsZSgncGdfY2hlY2tzdW1fYmVuY2gnLAorICBwZ19jaGVja3N1bV9iZW5jaF9zb3Vy Y2VzLAorICBrd2FyZ3M6IGNvbnRyaWJfbW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0g cGdfY2hlY2tzdW1fYmVuY2gKKworaW5zdGFsbF9kYXRhKAorICAncGdfY2hlY2tzdW1fYmVuY2gt LTEuMC5zcWwnLAorICAncGdfY2hlY2tzdW1fYmVuY2guY29udHJvbCcsCisgIGt3YXJnczogY29u dHJpYl9kYXRhX2FyZ3MsCispCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNo L3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3FsIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9w Z19jaGVja3N1bV9iZW5jaC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNWYxM2NiZTNjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNr c3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3FsCkBAIC0wLDAgKzEsOCBAQAorLyog Y29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC0tMS4wLnNxbCAqLwor CistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2 aWEgQ1JFQVRFIEVYVEVOU0lPTgorLS0gXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX2No ZWNrc3VtX2JlbmNoIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9O IGRyaXZlX3BnX2NoZWNrc3VtKHBhZ2VfY291bnQgaW50KQorCVJFVFVSTlMgcGdfY2F0YWxvZy52 b2lkCisJQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guYyBiL2NvbnRyaWIvcGdfY2hl Y2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZTViMTUwZTZiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmMKQEAgLTAsMCArMSwzNCBAQAorI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgInBvcnQvY2hl Y2tzdW1faW1wbC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4K KworUEdfTU9EVUxFX01BR0lDOworCisjZGVmaW5lIFJFUEVBVFMgMTAwMDAwMAorCitQR19GVU5D VElPTl9JTkZPX1YxKGRyaXZlX3BnX2NoZWNrc3VtKTsKK0RhdHVtCitkcml2ZV9wZ19jaGVja3N1 bShQR19GVU5DVElPTl9BUkdTKQoreworCWludCBwYWdlX2NvdW50ID0gUEdfR0VUQVJHX0lOVDMy KDApOworCisJUEdDaGVja3N1bW1hYmxlUGFnZSAqIHBhZ2VzID0gcGFsbG9jKHBhZ2VfY291bnQg KiBzaXplb2YoUEdDaGVja3N1bW1hYmxlUGFnZSkpOworCXNyYW5kKDApOworCWZvciAoc2l6ZV90 IGkgPSAwOyBpIDwgcGFnZV9jb3VudCAqIHNpemVvZihQR0NoZWNrc3VtbWFibGVQYWdlKTsgaSsr KXsKKwkJY2hhciAqIGJ5dGVfcHRyID0gKGNoYXIgKikgcGFnZXM7CisJCWJ5dGVfcHRyW2ldID0g cmFuZCgpICUgMjU2OworCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgUkVQRUFUUzsgaSsrKXsK KwkJY29uc3QgUEdDaGVja3N1bW1hYmxlUGFnZSAqIHRlc3RfcGFnZSA9IHBhZ2VzICsgKGkgJSBw YWdlX2NvdW50KTsKKwkJdm9sYXRpbGUgdWludDMyIHJlc3VsdCA9IHBnX2NoZWNrc3VtX2Jsb2Nr KHRlc3RfcGFnZSk7CisJCSh2b2lkKSByZXN1bHQ7CisJfQorCisJcGZyZWUoKHZvaWQgKikgcGFn ZXMpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY2hl Y2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guY29udHJvbCBiL2NvbnRyaWIvcGdfY2hlY2tz dW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNGE0ZTJjOTM2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmNvbnRyb2wKQEAgLTAsMCArMSw0 IEBACitjb21tZW50ID0gJ3BnX2NoZWNrc3VtIGJlbmNobWFyaycKK2RlZmF1bHRfdmVyc2lvbiA9 ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19jaGVja3N1bV9iZW5jaCcKK3Jl bG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9z cWwvcGdfY2hlY2tzdW1fYmVuY2guc3FsIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9zcWwv cGdfY2hlY2tzdW1fYmVuY2guc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi40YjM0NzY5OTk1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1f YmVuY2gvc3FsL3BnX2NoZWNrc3VtX2JlbmNoLnNxbApAQCAtMCwwICsxLDE3IEBACitDUkVBVEUg RVhURU5TSU9OIHBnX2NoZWNrc3VtX2JlbmNoOworCitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0o LTEpOworCitcdGltaW5nIG9uCisKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxKTsKK1NFTEVD VCBkcml2ZV9wZ19jaGVja3N1bSgyKTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSg0KTsKK1NF TEVDVCBkcml2ZV9wZ19jaGVja3N1bSg4KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxNik7 CitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0oMzIpOworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3Vt KDY0KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxMjgpOworU0VMRUNUIGRyaXZlX3BnX2No ZWNrc3VtKDI1Nik7CitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0oNTEyKTsKK1NFTEVDVCBkcml2 ZV9wZ19jaGVja3N1bSgxMDI0KTsKLS0gCjIuNDMuMAoK --000000000000521a080641758fb8--