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 1vsj0I-00GaeP-1c for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 14:58:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsj0G-00GBnT-0O for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 14:58:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsj0F-00GBnL-1l for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 14:58:11 +0000 Received: from mail-ot1-x32c.google.com ([2607:f8b0:4864:20::32c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vsj0B-00000001ELk-2daw for pgsql-hackers@postgresql.org; Wed, 18 Feb 2026 14:58:10 +0000 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7d1890f7ee4so3215475a34.0 for ; Wed, 18 Feb 2026 06:58:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771426687; cv=none; d=google.com; s=arc-20240605; b=PtWicSQH0JxytwLyPgGf5HOYQh+cvXnwRM0Dk3rFf4tmDtLJaUi65YSgM3iMd5mrgB hzei69qB13N/g/7PQmS1NRS6Jf6RYt3kK9Z/4qebl4QRamPlszft7S7/t/WjAb2l40UG yyeXC+QHoSTyBBTTGwdzOCXVVBGPvIvY/44xv8958FWkFSYycufaqczKhwzs5DxsszSn ex4p8Q5ilHPi2e5iDLVb2wLNubxd61lNcRGOqF4PNisDf+cGol27O++SF/jOW+WZN4FC assKyglqnzzJTlSZQ9M0lPBNnvA+NIcXoAp6RTv6qPSrL8ok+5BgPtkh8pRFRVBVxJYU vC5Q== 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=V9aBYWPz21dnzT8ZlfbxjO9RTzXnyTWTosKv9Iq/Z5s=; fh=oh+lhmPl9liGRtLiS6thjZhEsOpMnIfKwfPena4J69A=; b=CSzjH9IT1h14fajSgTUdffbceRGMwohInITlDMpQXQg8sz7got8P9qEiqOe8rpNMQL EbQD6jWhQLWqZc/vwz80RM1/s5OQ6CM1G+Mvm8/dUtCbKt+tAGXECjsEAdVCn9N8u/uH aSAAhGf8h92nL+1NbVboDRXhBhii7wSTAGtwkJuJHXs1suzHVtgRjdDYnD2VJ9Gt/Hqa E3jekNj41njSc6Kb2yVys9DXxg3TuNl+l0hcflxzeMmPDo6BYO6sQ18SIHegXGvHc+zE C41hkpJGX4rIu1G9cRWti2FLypqXxr3er0T1JGXIvTd05cIo1brPbcgMiVuj3eFqSjwi BzvQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tigerdata.com; s=google; t=1771426687; x=1772031487; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=V9aBYWPz21dnzT8ZlfbxjO9RTzXnyTWTosKv9Iq/Z5s=; b=VP8asMb52UsI2A+kDNzRZk+4CO8pDl6zYYcdfN4CR5yx1sIwfBkwyiYnCF/nm+4+Df o5PvWR34VW6gPwWcZPirezAeUFJ2Q/BBXMU1oHgqXugfaySynN972UvLo9K8yipOUeL2 Buf7q7f1jqor1mvLhAJbfiGN5bCP2pyXJo9DRk2EGrNYI54Ci1embioJ05Aby7pjAQ1V Ce1lVjkcYRlZKlCXniU0jXre/MKMPnqm2dQ8qPyJFNoMP6I5O3yRJbdS9cFzO7sMha8Z sFqPz0fbRC7kOIA+NJad3/6XWoR+6WGIDmUCtnW4zxTo5OMUjOyna6Cbo5XS702No4eh LtAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771426687; x=1772031487; 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=V9aBYWPz21dnzT8ZlfbxjO9RTzXnyTWTosKv9Iq/Z5s=; b=STagPO1qxqJbN47UBYPVAjTJHog+6dM5r/juZOComCNbFftWIkd4X/1Z0qTMZ/JnaJ bF8C1CYBz9e9T/FicEEYh90InxZle8qVpgppTlBqwB9NUDG1hA9WkyjxhpcLgbltOmGr mozFyFIx6CviI81/ZdeZC7hpmSMdRvKO/hZFThq9/G/tWLfpdB+0yK0hpbzuN2k7Exr8 4yFyj5OjIQwfVbd//wafN7uzTyb2Qn+EK2kzGK6Paa0VQqmV1RUcsAUJ4vbIURoPb5/Z IReQZ0UzD6kb78NshTKd9k0jNWARE+Tjenkz5AM0QLIdvg2/HPxYoC0XJIOio2O/yzsM JIYw== X-Gm-Message-State: AOJu0Yzx/JdH4D26eV5pxxp2PnfgrcWGYo8HaXVqsE1RAfM0HVVNe9Jw XHFIGmUshJOwumC6WH3ujJ9Gf7+vD7rYShEcB1/LX392cPxA9vAhg0IYPKrKrP7Yse21GISZT12 zwJnFHauBOpFJqAsp6XxOVCxGRg9tIpeRx4BpbW2fxzoQTvy3uaq9gVnMNQ== X-Gm-Gg: AZuq6aLm8VY6KproWWWLsEwRYI8w2hUUM12fbGSWAZ67+zX9M/g9GN3NH0+fRbyDVQk X7TX8YdSKavY8icvyy/GSL4E5Fb9lyMDSLxzhwFEzSdaCU/NeIkVyVQ6IKkotQX4PxjUfaCfROS FyF9Emi/WdpClBZp1jiz/unsX634SI0ZPxBJAQRGHE5fd5DGrIQZbJG9bsNcLWPkDG4zAqt0LEq mJBHanAFGLo0wwaxs7jd+mLxXJxuTyY1qdGnpk5lavFvdLcl/iDgCGeLvNzb7nb9wPQZ9vw1QlZ 2EdAzXiSX8QPCjdFtggR/dkh1uVQ09SdcFV9OfB2XF+8F0K8WGBtU9r0pHaN3KP2NYutBg== X-Received: by 2002:a05:6830:3492:b0:7cf:da7d:5040 with SMTP id 46e09a7af769-7d4c30255e4mr10083301a34.14.1771426687203; Wed, 18 Feb 2026 06:58:07 -0800 (PST) MIME-Version: 1.0 References: <1791665551.452444.1761209220211.ref@mail.yahoo.com> <18022523-0F8F-4C07-AFF5-57DC9086D78E@yandex-team.ru> <1895971769.8343.1761240853939@mail.yahoo.com> <574624399.175025.1761290201491@mail.yahoo.com> <953203149.383019.1761345585325@mail.yahoo.com> <6F76FA61-E2DC-44EF-9504-889D9BDB4EBD@yandex-team.ru> <1154454839.957923.1761604611424@mail.yahoo.com> <87ldkv8cog.fsf@wibble.ilmari.org> <87ikfz7zcu.fsf@wibble.ilmari.org> <9CB824CC-70DC-4165-AC6A-9664F47209EE@yandex-team.ru> In-Reply-To: From: Aleksander Alekseev Date: Wed, 18 Feb 2026 17:57:55 +0300 X-Gm-Features: AaiRm50zDgS9IUwjk0c71qGYtg4izXUB1i6RZeJUoy5arA1kuY4HCsx3UxP95kM Message-ID: Subject: Re: Add uuid_to_base32hex() and base32hex_to_uuid() built-in functions To: pgsql-hackers Cc: Andrey Borodin , Masahiko Sawada , =?UTF-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= Content-Type: multipart/mixed; boundary="000000000000717612064b1a6a7f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000717612064b1a6a7f Content-Type: text/plain; charset="UTF-8" Hi, > I only rebased v3 and improved the commit messages, but I didn't > account for Masahiko Sawada's feedback for 0002. Andrey, are you still > working on this or others can pick it up? > > The patch is not on the commitfest, so I'm about to add it. Here is patch v5 where I accounted for the previous feedback from Masahiko Sawada and also made some other changes, see below. > How about the error message like "invalid input length for type uuid"? > I think "uuid" should be lower case as it indicates PostgreSQL uuid > data type, and it's better to use %s format instead of directly > writing "uuid" (see string_to_uuid() for example). Makes sense. Fixed. > As for the errdetail message, should we add "bytea" also after "got %d"? You probably meant "got %d bytes", not "got %d bytea". I believe the current message is fine, but maybe native speakers will correct us. > We already have tests for casting bytes to integer data types in > strings.sql. I suggest moving the casting tests from bytea to uuid > into therel. I disagree on the grounds that there are zero tests related to UUID in strings.sql; uuid.sql is a more appropriate place for these tests IMO. However if someone seconds the idea we can easily move the tests at any time. > For the uuid.sql file, we could add a test to verify that > a UUID value remains unchanged when it's cast to bytea and back to > UUID. For example, > > SELECT v = v::bytea::uuid as matched FROM gen_random_uuid() v; Good point. Added. > base32hex_encode() doesn't seem to add '=' paddings, but is it > intentional? I don't see any description in RFC 4648 that we can omit > '=' paddings. You are right, both base32 and base32hex should add paddings; substring() can be used if necessary. Fixed. > I think the patch should add tests not only for uuid data type but > also for general cases like other encodings. Yes, and the good place for these tests would be closer to other tests for encode() and decode() i.e. strings.sql. Fixed. While working on it I noticed some inconsistencies between base32hex implementation and our current implementation of base64. As an example, we don't allow `=` input: ``` =# SELECT decode('=', 'base64'); ERROR: unexpected "=" while decoding base64 sequence ``` ... while base32hex did. I fixed such inconsistencies too. > In uuid.sql tests, how about adding some tests to check if base32hex > maintains the sortability of UUIDv7 data? Agree. Added. > I think we should update the documentation in the uuid section about > casting data between bytea and uuid. For references, we have a similar > description for bytea and integer[1]. Fair point. Fixed. -- Best regards, Aleksander Alekseev --000000000000717612064b1a6a7f Content-Type: text/x-patch; charset="UTF-8"; name="v5-0001-Allow-explicit-casting-between-bytea-and-UUID.patch" Content-Disposition: attachment; filename="v5-0001-Allow-explicit-casting-between-bytea-and-UUID.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mls5htfr0 RnJvbSAwMmJiMjEwMWIzOTM1ODcyOTRjYjNhOTNiZDc2NjA5MWNhMWNkMzJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/RGFnZmlubj0yMElsbWFyaT0yME1hbm5zPUMz PUE1a2VyPz0gPGlsbWFyaUBpbG1hcmkub3JnPgpEYXRlOiBUdWUsIDI4IE9jdCAyMDI1IDE2OjMz OjE3ICswMDAwClN1YmplY3Q6IFtQQVRDSCB2NSAxLzJdIEFsbG93IGV4cGxpY2l0IGNhc3Rpbmcg YmV0d2VlbiBieXRlYSBhbmQgVVVJRApNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRl eHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoK VGhpcyBlbmFibGVzIHVzaW5nIGVuY29kZSgpIGFuZCBkZWNvZGUoKSB0byBjb252ZXJ0IFVVSURz IHRvIGFuZCBmcm9tCmFsdGVybmF0aXZlIGZvcm1hdHMsIHN1Y2ggYXMgYmFzZTY0LgoKQXV0aG9y OglEYWdmaW5uIElsbWFyaSBNYW5uc8Ola2VyIDxpbG1hcmlAaWxtYXJpLm9yZz4KQXV0aG9yOiBB bGVrc2FuZGVyIEFsZWtzZWV2IDxhbGVrc2FuZGVyQHRpZ2VyZGF0YS5jb20+ClJldmlld2VkLWJ5 OiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFu ZHJleSBCb3JvZGluIDx4NG1tbUB5YW5kZXgtdGVhbS5ydT4KUmV2aWV3ZWQtYnk6IEplbHRlIEZl bm5lbWEtTmlvIDxwb3N0Z3Jlc0BqZWx0ZWYubmw+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdy LmVzL20vQ0FKN2M2VE9yYW1yMVVUTGN5QjEyOExXTXFpdGExWTclM0RhcnEzS0hhVSUzRHFpa2Y1 eUtPUSU0MG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2RhdGF0eXBlLnNnbWwgICAg ICAgICB8IDExICsrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYnl0ZWEuYyAgICAg IHwgMjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X2Nhc3QuZGF0ICAgIHwgIDYgKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 ICAgIHwgIDcgKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91dWlkLm91dCB8IDIy ICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3V1aWQuc3FsICAg ICAgfCAgNSArKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL2RhdGF0eXBlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZGF0YXR5cGUu c2dtbAppbmRleCAzMDE3YzY3NDA0MC4uZjgyNjRiMTE5YWIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9kYXRhdHlwZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9kYXRhdHlwZS5zZ21sCkBAIC00 NDM5LDYgKzQ0MzksMTcgQEAgYTBlZS1iYzk5LTljMGItNGVmOC1iYjZkLTZiYjktYmQzOC0wYTEx CiAgICAgT3V0cHV0IGlzIGFsd2F5cyBpbiB0aGUgc3RhbmRhcmQgZm9ybS4KICAgIDwvcGFyYT4K IAorICAgPHBhcmE+CisgICBJdCBpcyBwb3NzaWJsZSB0byBjYXN0IDx0eXBlPnV1aWQ8L3R5cGU+ IHZhbHVlcyB0byBhbmQgZnJvbSB0eXBlCisgICA8dHlwZT5ieXRlYTwvdHlwZT4uIFRoaXMgYWxs b3dzIHVzaW5nIDxsaXRlcmFsPmVuY29kZSgpPC9saXRlcmFsPgorICAgYW5kIDxsaXRlcmFsPmRl Y29kZSgpPC9saXRlcmFsPiBmdW5jdGlvbnMgZm9yIDx0eXBlPnV1aWQ8L3R5cGU+LgorICAgU29t ZSBleGFtcGxlczoKKzxwcm9ncmFtbGlzdGluZz4KK2VuY29kZSgnMWVhM2Q2NGMtYmM0MC00Y2Mz LTg0YmItNmIxMWVlMzFlNWMyJzo6dXVpZDo6Ynl0ZWEsICdiYXNlNjQnKQorZGVjb2RlKCdIcVBX VEx4QVRNT0V1MnNSN2pIbHdnPT0nLCAnYmFzZTY0Jyk6OnV1aWQKKzwvcHJvZ3JhbWxpc3Rpbmc+ CisgICA8L3BhcmE+CisKICAgIDxwYXJhPgogICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJmdW5jdGlv bnMtdXVpZCIvPiBmb3IgaG93IHRvIGdlbmVyYXRlIGEgVVVJRCBpbgogICAgIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvYnl0ZWEuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ieXRlYS5jCmluZGV4IGZkNzY2 MmQ0MWVlLi40ZGM4MzY3MWFhNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2J5 dGVhLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2J5dGVhLmMKQEAgLTI4LDYgKzI4LDcg QEAKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgog I2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCisjaW5jbHVkZSAidXRpbHMvdXVpZC5oIgog I2luY2x1ZGUgInZhcmF0dC5oIgogCiAvKiBHVUMgdmFyaWFibGUgKi8KQEAgLTEzNDAsMyArMTM0 MSwyOSBAQCBpbnQ4X2J5dGVhKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJcmV0dXJuIGludDhzZW5k KGZjaW5mbyk7CiB9CisKKy8qIENhc3QgYnl0ZWEgLT4gdXVpZCAqLworRGF0dW0KK2J5dGVhX3V1 aWQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlieXRlYQkgICAqdiA9IFBHX0dFVEFSR19CWVRFQV9Q UCgwKTsKKwlpbnQJCQlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUih2KTsKKwlwZ191dWlkX3QgICp1 dWlkOworCisJaWYgKGxlbiAhPSBVVUlEX0xFTikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfQklOQVJZX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNn KCJpbnZhbGlkIGlucHV0IGxlbmd0aCBmb3IgdHlwZSAlcyIsICJ1dWlkIiksCisJCQkJIGVycmRl dGFpbCgiRXhwZWN0ZWQgJWQgYnl0ZXMsIGdvdCAlZC4iLCBVVUlEX0xFTiwgbGVuKSkpOworCisJ dXVpZCA9IChwZ191dWlkX3QgKikgcGFsbG9jKHNpemVvZihwZ191dWlkX3QpKTsKKwltZW1jcHko dXVpZC0+ZGF0YSwgVkFSREFUQV9BTlkodiksIFVVSURfTEVOKTsKKwlQR19SRVRVUk5fVVVJRF9Q KHV1aWQpOworfQorCisvKiBDYXN0IHV1aWQgLT4gYnl0ZWE7IGNhbiBqdXN0IHVzZSB1dWlkX3Nl bmQoKSAqLworRGF0dW0KK3V1aWRfYnl0ZWEoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlyZXR1cm4g dXVpZF9zZW5kKGZjaW5mbyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X2Nhc3QuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jYXN0LmRhdAppbmRleCA5YjFjZmIx YjU5MC4uYTdiNmQ4MTJjNWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY2Fz dC5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jYXN0LmRhdApAQCAtMzYyLDYgKzM2 MiwxMiBAQAogeyBjYXN0c291cmNlID0+ICdieXRlYScsIGNhc3R0YXJnZXQgPT4gJ2ludDgnLCBj YXN0ZnVuYyA9PiAnaW50OChieXRlYSknLAogICBjYXN0Y29udGV4dCA9PiAnZScsIGNhc3RtZXRo b2QgPT4gJ2YnIH0sCiAKKyMgQWxsb3cgZXhwbGljaXQgY29lcmNpb25zIGJldHdlZW4gYnl0ZWEg YW5kIHV1aWQgdHlwZQoreyBjYXN0c291cmNlID0+ICdieXRlYScsIGNhc3R0YXJnZXQgPT4gJ3V1 aWQnLCBjYXN0ZnVuYyA9PiAndXVpZChieXRlYSknLAorICBjYXN0Y29udGV4dCA9PiAnZScsIGNh c3RtZXRob2QgPT4gJ2YnIH0sCit7IGNhc3Rzb3VyY2UgPT4gJ3V1aWQnLCBjYXN0dGFyZ2V0ID0+ ICdieXRlYScsIGNhc3RmdW5jID0+ICdieXRlYSh1dWlkKScsCisgIGNhc3Rjb250ZXh0ID0+ICdl JywgY2FzdG1ldGhvZCA9PiAnZicgfSwKKwogIyBBbGxvdyBleHBsaWNpdCBjb2VyY2lvbnMgYmV0 d2VlbiBpbnQ0IGFuZCAiY2hhciIKIHsgY2FzdHNvdXJjZSA9PiAnY2hhcicsIGNhc3R0YXJnZXQg PT4gJ2ludDQnLCBjYXN0ZnVuYyA9PiAnaW50NChjaGFyKScsCiAgIGNhc3Rjb250ZXh0ID0+ICdl JywgY2FzdG1ldGhvZCA9PiAnZicgfSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDgzZjY1 MDFkZjM4Li5kMmIzMDM5MDY3MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjA4LDYg KzEyMDgsMTMgQEAKICAgcHJvbmFtZSA9PiAnaW50OCcsIHByb3JldHR5cGUgPT4gJ2ludDgnLCBw cm9hcmd0eXBlcyA9PiAnYnl0ZWEnLAogICBwcm9zcmMgPT4gJ2J5dGVhX2ludDgnIH0sCiAKK3sg b2lkID0+ICc5ODgwJywgZGVzY3IgPT4gJ2NvbnZlcnQgdXVpZCB0byBieXRlYScsCisgIHByb25h bWUgPT4gJ2J5dGVhJywgcHJvcmV0dHlwZSA9PiAnYnl0ZWEnLCBwcm9hcmd0eXBlcyA9PiAndXVp ZCcsCisgIHByb3NyYyA9PiAndXVpZF9ieXRlYScgfSwKK3sgb2lkID0+ICc5ODgxJywgZGVzY3Ig PT4gJ2NvbnZlcnQgYnl0ZWEgdG8gdXVpZCcsCisgIHByb25hbWUgPT4gJ3V1aWQnLCBwcm9yZXR0 eXBlID0+ICd1dWlkJywgcHJvYXJndHlwZXMgPT4gJ2J5dGVhJywKKyAgcHJvc3JjID0+ICdieXRl YV91dWlkJyB9LAorCiB7IG9pZCA9PiAnNDQ5JywgZGVzY3IgPT4gJ2hhc2gnLAogICBwcm9uYW1l ID0+ICdoYXNoaW50MicsIHByb3JldHR5cGUgPT4gJ2ludDQnLCBwcm9hcmd0eXBlcyA9PiAnaW50 MicsCiAgIHByb3NyYyA9PiAnaGFzaGludDInIH0sCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3V1aWQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91dWlkLm91 dAppbmRleCA5NTM5MjAwM2I4Ni4uZDE1N2VmN2QwYjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdXVpZC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91 dWlkLm91dApAQCAtMzA1LDUgKzMwNSwyNyBAQCBTRUxFQ1QgdXVpZF9leHRyYWN0X3RpbWVzdGFt cCgnMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExJyk7ICAtLSBudWxsCiAgCiAo MSByb3cpCiAKKy0tIGNhc3RzCitTRUxFQ1QgJzViMzUzODBhLTcxNDMtNDkxMi05YjU1LWYzMjI2 OTljNjc3MCc6OnV1aWQ6OmJ5dGVhOworICAgICAgICAgICAgICAgYnl0ZWEgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBceDViMzUzODBhNzE0 MzQ5MTI5YjU1ZjMyMjY5OWM2NzcwCisoMSByb3cpCisKK1NFTEVDVCAnXHgwMTlhMmY4NTljZWQ3 MjI1Yjk5ZDljNTUwNDRhMjU2Myc6OmJ5dGVhOjp1dWlkOworICAgICAgICAgICAgICAgICB1dWlk ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgMDE5YTJmODUtOWNlZC03MjI1LWI5OWQtOWM1NTA0NGEyNTYzCisoMSByb3cpCisKK1NFTEVD VCAnXHgxMjM0NTY3ODkwYWJjZGVmJzo6Ynl0ZWE6OnV1aWQ7IC0tIGVycm9yCitFUlJPUjogIGlu dmFsaWQgaW5wdXQgbGVuZ3RoIGZvciB0eXBlIHV1aWQKK0RFVEFJTDogIEV4cGVjdGVkIDE2IGJ5 dGVzLCBnb3QgOC4KK1NFTEVDVCB2ID0gdjo6Ynl0ZWE6OnV1aWQgYXMgbWF0Y2hlZCBGUk9NIGdl bl9yYW5kb21fdXVpZCgpIHY7CisgbWF0Y2hlZCAKKy0tLS0tLS0tLQorIHQKKygxIHJvdykKKwog LS0gY2xlYW4gdXAKIERST1AgVEFCTEUgZ3VpZDEsIGd1aWQyLCBndWlkMyBDQVNDQURFOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdXVpZC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC91dWlkLnNxbAppbmRleCA0NjUxNTNhMDM0MS4uZjUxMmY0ZGVhMWQgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3V1aWQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3V1aWQuc3FsCkBAIC0xNDYsNiArMTQ2LDExIEBAIFNFTEVDVCB1dWlkX2V4dHJhY3RfdGltZXN0 YW1wKCcwMTdGMjJFMi03OUIwLTdDQzMtOThDNC1EQzBDMEMwNzM5OEYnKSA9ICdUdWVzZGF5CiBT RUxFQ1QgdXVpZF9leHRyYWN0X3RpbWVzdGFtcChnZW5fcmFuZG9tX3V1aWQoKSk7ICAtLSBudWxs CiBTRUxFQ1QgdXVpZF9leHRyYWN0X3RpbWVzdGFtcCgnMTExMTExMTEtMTExMS0xMTExLTExMTEt MTExMTExMTExMTExJyk7ICAtLSBudWxsCiAKKy0tIGNhc3RzCitTRUxFQ1QgJzViMzUzODBhLTcx NDMtNDkxMi05YjU1LWYzMjI2OTljNjc3MCc6OnV1aWQ6OmJ5dGVhOworU0VMRUNUICdceDAxOWEy Zjg1OWNlZDcyMjViOTlkOWM1NTA0NGEyNTYzJzo6Ynl0ZWE6OnV1aWQ7CitTRUxFQ1QgJ1x4MTIz NDU2Nzg5MGFiY2RlZic6OmJ5dGVhOjp1dWlkOyAtLSBlcnJvcgorU0VMRUNUIHYgPSB2OjpieXRl YTo6dXVpZCBhcyBtYXRjaGVkIEZST00gZ2VuX3JhbmRvbV91dWlkKCkgdjsKIAogLS0gY2xlYW4g dXAKIERST1AgVEFCTEUgZ3VpZDEsIGd1aWQyLCBndWlkMyBDQVNDQURFOwotLSAKMi40My4wCgo= --000000000000717612064b1a6a7f Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0002-Add-base32hex-encoding-support-to-encode-and-deco.patch" Content-Disposition: attachment; filename="v5-0002-Add-base32hex-encoding-support-to-encode-and-deco.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mls5htg41 RnJvbSA4NTdlYzM4MmNmMmEyMjA3NDhlMTFkNmJlZDI4YzhiMDA2MjgyNTg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgQm9yb2RpbiA8YW1ib3JvZGluQGFjbS5vcmc+CkRh dGU6IFdlZCwgMjkgT2N0IDIwMjUgMTU6NTM6MTIgKzA0MDAKU3ViamVjdDogW1BBVENIIHY1IDIv Ml0gQWRkIGJhc2UzMmhleCBlbmNvZGluZyBzdXBwb3J0IHRvIGVuY29kZSgpIGFuZAogZGVjb2Rl KCkKCkltcGxlbWVudCBiYXNlMzJoZXggZW5jb2RpbmcvZGVjb2RpbmcgcGVyIFJGQyA0NjQ4IFNl Y3Rpb24gNyBmb3IKZW5jb2RlKCkgYW5kIGRlY29kZSgpIGZ1bmN0aW9ucy4gVGhpcyBlbmNvZGlu ZyB1c2VzIHRoZSBleHRlbmRlZCBoZXgKYWxwaGFiZXQgKDAtOSwgQS1WKSB3aGljaCBwcmVzZXJ2 ZXMgc29ydCBvcmRlci4KClRoZSBlbmNvZGUoKSBmdW5jdGlvbiBwcm9kdWNlcyBwYWRkZWQgb3V0 cHV0LCB3aGlsZSBkZWNvZGUoKSBhY2NlcHRzCmJvdGggcGFkZGVkIGFuZCB1bnBhZGRlZCBpbnB1 dC4gRGVjb2RpbmcgaXMgY2FzZS1pbnNlbnNpdGl2ZS4KCkF1dGhvcjogQW5kcmV5IEJvcm9kaW4g PHg0bW1tQHlhbmRleC10ZWFtLnJ1PgpBdXRob3I6IEFsZWtzYW5kZXIgQWxla3NlZXYgPGFsZWtz YW5kZXJAdGlnZXJkYXRhLmNvbT4KUmV2aWV3ZWQtYnk6IE1hc2FoaWtvIFNhd2FkYSA8c2F3YWRh Lm1zaGtAZ21haWwuY29tPgpTdWdnZXN0ZWQtYnk6IFNlcmdleSBQcm9raG9yZW5rbyA8c2VyZ2V5 cHJva2hvcmVua29AeWFob28uY29tLmF1PgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9t L0NBSjdjNlRPcmFtcjFVVExjeUIxMjhMV01xaXRhMVk3JTNEYXJxM0tIYVUlM0RxaWtmNXlLT1El NDBtYWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYmluYXJ5c3RyaW5n LnNnbWwgfCAgMjUgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2VuY29kZS5jICAgICAgICAg ICB8IDE1OCArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zdHJpbmdzLm91dCAgICB8IDEwNyArKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvdXVpZC5vdXQgICAgICAgfCAgMTYgKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9z dHJpbmdzLnNxbCAgICAgICAgIHwgIDI5ICsrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC91dWlk LnNxbCAgICAgICAgICAgIHwgICA5ICsrCiA2IGZpbGVzIGNoYW5nZWQsIDM0MiBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMt YmluYXJ5c3RyaW5nLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWJpbmFyeXN0cmluZy5z Z21sCmluZGV4IGIyNTYzODFlMDFmLi41MWJlMDQ2M2VlYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2Z1bmMvZnVuYy1iaW5hcnlzdHJpbmcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9m dW5jLWJpbmFyeXN0cmluZy5zZ21sCkBAIC03MjksNiArNzI5LDcgQEAKICAgICAgICA8cGFyYW1l dGVyPmZvcm1hdDwvcGFyYW1ldGVyPiB2YWx1ZXMgYXJlOgogICAgICAgIDxsaW5rIGxpbmtlbmQ9 ImVuY29kZS1mb3JtYXQtYmFzZTY0Ij48bGl0ZXJhbD5iYXNlNjQ8L2xpdGVyYWw+PC9saW5rPiwK ICAgICAgICA8bGluayBsaW5rZW5kPSJlbmNvZGUtZm9ybWF0LWJhc2U2NHVybCI+PGxpdGVyYWw+ YmFzZTY0dXJsPC9saXRlcmFsPjwvbGluaz4sCisgICAgICAgPGxpbmsgbGlua2VuZD0iZW5jb2Rl LWZvcm1hdC1iYXNlMzJoZXgiPjxsaXRlcmFsPmJhc2UzMmhleDwvbGl0ZXJhbD48L2xpbms+LAog ICAgICAgIDxsaW5rIGxpbmtlbmQ9ImVuY29kZS1mb3JtYXQtZXNjYXBlIj48bGl0ZXJhbD5lc2Nh cGU8L2xpdGVyYWw+PC9saW5rPiwKICAgICAgICA8bGluayBsaW5rZW5kPSJlbmNvZGUtZm9ybWF0 LWhleCI+PGxpdGVyYWw+aGV4PC9saXRlcmFsPjwvbGluaz4uCiAgICAgICA8L3BhcmE+CkBAIC04 MDQsNiArODA1LDMwIEBACiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAK KyAgICA8dmFybGlzdGVudHJ5IGlkPSJlbmNvZGUtZm9ybWF0LWJhc2UzMmhleCI+CisgICAgIDx0 ZXJtPmJhc2UzMmhleAorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT5iYXNlMzJo ZXggZm9ybWF0PC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+PC90ZXJtPgorICAgICA8bGlz dGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgPGxpdGVyYWw+YmFzZTMyaGV4PC9saXRl cmFsPiBmb3JtYXQgaXMgdGhhdCBvZgorICAgICAgIDx1bGluayB1cmw9Imh0dHBzOi8vZGF0YXRy YWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNDY0OCNzZWN0aW9uLTciPgorICAgICAgIFJGQyA0 NjQ4IFNlY3Rpb24gNzwvdWxpbms+LiAgSXQgdXNlcyB0aGUgZXh0ZW5kZWQgaGV4IGFscGhhYmV0 CisgICAgICAgKDAtOSwgQS1WKSB3aGljaCBwcmVzZXJ2ZXMgc29ydCBvcmRlciB3aGVuIGVuY29k aW5nIGJpbmFyeSBkYXRhLgorICAgICAgIFRoZSA8ZnVuY3Rpb24+ZW5jb2RlPC9mdW5jdGlvbj4g ZnVuY3Rpb24gcHJvZHVjZXMgcGFkZGVkIG91dHB1dCwKKyAgICAgICB3aGlsZSA8ZnVuY3Rpb24+ ZGVjb2RlPC9mdW5jdGlvbj4gYWNjZXB0cyBib3RoIHBhZGRlZCBhbmQgdW5wYWRkZWQKKyAgICAg ICBpbnB1dC4gRGVjb2RpbmcgaXMgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgaWdub3JlcyB3aGl0ZXNw YWNlIGNoYXJhY3RlcnMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlz IGZvcm1hdCBjYW4gYmUgdXNlZCBmb3IgZW5jb2RpbmcgVVVJRHMgaW4gYSBjb21wYWN0LCBzb3J0 YWJsZSBmb3JtYXQ6CisgICAgICAgPGxpdGVyYWw+c3Vic3RyaW5nKGVuY29kZSh1dWlkX3ZhbHVl IDo6IGJ5dGVhLCAnYmFzZTMyaGV4JykgZnJvbSAxIGZvciAyNik8L2xpdGVyYWw+CisgICAgICAg cHJvZHVjZXMgYSAyNi1jaGFyYWN0ZXIgc3RyaW5nIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCAz Ni1jaGFyYWN0ZXIKKyAgICAgICBVVUlEIHJlcHJlc2VudGF0aW9uLgorICAgICAgPC9wYXJhPgor ICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgPHZhcmxpc3RlbnRy eSBpZD0iZW5jb2RlLWZvcm1hdC1lc2NhcGUiPgogICAgICA8dGVybT5lc2NhcGUKICAgICAgPGlu ZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYwppbmRleCBmNWY4MzVlOTQ0YS4uNjE1M2E1Y2I1 ZjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvZW5jb2RlLmMKQEAgLTgyNSw2ICs4MjUsMTU4IEBAIGVzY19kZWNf bGVuKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbikKIAlyZXR1cm4gbGVuOwogfQogCisv KgorICogQkFTRTMySEVYCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTMyaGV4X3RhYmxl W10gPSAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVYiOworCitzdGF0aWMgdWludDY0 CitiYXNlMzJoZXhfZW5jX2xlbihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCit7CisJ LyogNSBieXRlcyBlbmNvZGUgdG8gOCBjaGFyYWN0ZXJzLCByb3VuZCB1cCB0byBtdWx0aXBsZSBv ZiA4IGZvciBwYWRkaW5nICovCisJcmV0dXJuICgodWludDY0KSBzcmNsZW4gKyA0KSAvIDUgKiA4 OworfQorCitzdGF0aWMgdWludDY0CitiYXNlMzJoZXhfZGVjX2xlbihjb25zdCBjaGFyICpzcmMs IHNpemVfdCBzcmNsZW4pCit7CisJLyogRGVjb2RlIGxlbmd0aCBpcyAoc3JjbGVuICogNSkgLyA4 LCBidXQgd2UgbWF5IGhhdmUgcGFkZGluZyAqLworCXJldHVybiAoKHVpbnQ2NCkgc3JjbGVuICog NSkgLyA4OworfQorCitzdGF0aWMgdWludDY0CitiYXNlMzJoZXhfZW5jb2RlKGNvbnN0IGNoYXIg KnNyYywgc2l6ZV90IHNyY2xlbiwgY2hhciAqZHN0KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmRhdGEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzcmM7CisJdWludDY0CQliaXRzX2J1ZmZl ciA9IDA7CisJaW50CQkJYml0c19pbl9idWZmZXIgPSAwOworCXVpbnQ2NAkJb3V0cHV0X3BvcyA9 IDA7CisJc2l6ZV90CQlpOworCisJZm9yIChpID0gMDsgaSA8IHNyY2xlbjsgaSsrKQorCXsKKwkJ LyogQWRkIDggYml0cyB0byB0aGUgYnVmZmVyICovCisJCWJpdHNfYnVmZmVyID0gKGJpdHNfYnVm ZmVyIDw8IDgpIHwgZGF0YVtpXTsKKwkJYml0c19pbl9idWZmZXIgKz0gODsKKworCQkvKiBFeHRy YWN0IDUtYml0IGNodW5rcyB3aGlsZSB3ZSBoYXZlIGVub3VnaCBiaXRzICovCisJCXdoaWxlIChi aXRzX2luX2J1ZmZlciA+PSA1KQorCQl7CisJCQliaXRzX2luX2J1ZmZlciAtPSA1OworCQkJLyog RXh0cmFjdCB0b3AgNSBiaXRzICovCisJCQlkc3Rbb3V0cHV0X3BvcysrXSA9IGJhc2UzMmhleF90 YWJsZVsoYml0c19idWZmZXIgPj4gYml0c19pbl9idWZmZXIpICYgMHgxRl07CisJCQkvKiBDbGVh ciB0aGUgZXh0cmFjdGVkIGJpdHMgYnkgbWFza2luZyAqLworCQkJYml0c19idWZmZXIgJj0gKCgx VUxMIDw8IGJpdHNfaW5fYnVmZmVyKSAtIDEpOworCQl9CisJfQorCisJLyogSGFuZGxlIHJlbWFp bmluZyBiaXRzIChpZiBhbnkpICovCisJaWYgKGJpdHNfaW5fYnVmZmVyID4gMCkKKwl7CisJCWRz dFtvdXRwdXRfcG9zKytdID0gYmFzZTMyaGV4X3RhYmxlWyhiaXRzX2J1ZmZlciA8PCAoNSAtIGJp dHNfaW5fYnVmZmVyKSkgJiAweDFGXTsKKwl9CisKKwkvKiBBZGQgcGFkZGluZyB0byBtYWtlIGxl bmd0aCBhIG11bHRpcGxlIG9mIDggKHBlciBSRkMgNDY0OCkgKi8KKwl3aGlsZSAob3V0cHV0X3Bv cyAlIDggIT0gMCkKKwl7CisJCWRzdFtvdXRwdXRfcG9zKytdID0gJz0nOworCX0KKworCXJldHVy biBvdXRwdXRfcG9zOworfQorCitzdGF0aWMgdWludDY0CitiYXNlMzJoZXhfZGVjb2RlKGNvbnN0 IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgY2hhciAqZHN0KQoreworCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzcmM7CisJdWludDY0CQliaXRz X2J1ZmZlciA9IDA7CisJaW50CQkJYml0c19pbl9idWZmZXIgPSAwOworCXVpbnQ2NAkJb3V0cHV0 X3BvcyA9IDA7CisJc2l6ZV90CQlpOworCWludAkJCXBvcyA9IDA7CQkvKiBwb3NpdGlvbiB3aXRo aW4gOC1jaGFyYWN0ZXIgZ3JvdXAgKDAtNykgKi8KKwlib29sCQllbmQgPSBmYWxzZTsJLyogaGF2 ZSB3ZSBzZWVuIHBhZGRpbmc/ICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc3JjbGVuOyBpKyspCisJ eworCQl1bnNpZ25lZCBjaGFyIGMgPSBkYXRhW2ldOworCQlpbnQJCQl2YWw7CisKKwkJLyogU2tp cCB3aGl0ZXNwYWNlICovCisJCWlmIChjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4n IHx8IGMgPT0gJ1xyJykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjID09ICc9JykKKwkJeworCQkJ LyoKKwkJCSAqIFBhZGRpbmcgaXMgb25seSB2YWxpZCBhdCBwb3NpdGlvbnMgMiwgNCwgNSwgb3Ig NyB3aXRoaW4gYW4KKwkJCSAqIDgtY2hhcmFjdGVyIGdyb3VwIChjb3JyZXNwb25kaW5nIHRvIDEs IDIsIDMsIG9yIDQgaW5wdXQgYnl0ZXMpLgorCQkJICogV2Ugb25seSBjaGVjayB0aGUgcG9zaXRp b24gZm9yIHRoZSBmaXJzdCAnPScgY2hhcmFjdGVyLgorCQkJICovCisJCQlpZiAoIWVuZCkKKwkJ CXsKKwkJCQlpZiAocG9zICE9IDIgJiYgcG9zICE9IDQgJiYgcG9zICE9IDUgJiYgcG9zICE9IDcp CisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkJIGVycm1zZygidW5leHBlY3RlZCBcIj1cIiB3aGlsZSBk ZWNvZGluZyAlcyBzZXF1ZW5jZSIsCisJCQkJCQkJCQkiYmFzZTMyaGV4IikpKTsKKwkJCQllbmQg PSB0cnVlOworCQkJfQorCQkJcG9zKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vIGRh dGEgY2hhcmFjdGVycyBhbGxvd2VkIGFmdGVyIHBhZGRpbmcgKi8KKwkJaWYgKGVuZCkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQkgZXJybXNnKCJpbnZhbGlkIHN5bWJvbCBcIiUuKnNcIiBmb3VuZCB3aGlsZSBk ZWNvZGluZyAlcyBzZXF1ZW5jZSIsCisJCQkJCQkJcGdfbWJsZW4oKGNvbnN0IGNoYXIgKikgJmMp LCAoY29uc3QgY2hhciAqKSAmYywKKwkJCQkJCQkiYmFzZTMyaGV4IikpKTsKKworCQkvKiBEZWNv ZGUgYmFzZTMyaGV4IGNoYXJhY3RlciAoMC05LCBBLVYsIGNhc2UtaW5zZW5zaXRpdmUpICovCisJ CWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKKwkJCXZhbCA9IGMgLSAnMCc7CisJCWVsc2UgaWYg KGMgPj0gJ0EnICYmIGMgPD0gJ1YnKQorCQkJdmFsID0gYyAtICdBJyArIDEwOworCQllbHNlIGlm IChjID49ICdhJyAmJiBjIDw9ICd2JykKKwkJCXZhbCA9IGMgLSAnYScgKyAxMDsKKwkJZWxzZQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJCSBlcnJtc2coImludmFsaWQgc3ltYm9sIFwiJS4qc1wiIGZvdW5kIHdo aWxlIGRlY29kaW5nICVzIHNlcXVlbmNlIiwKKwkJCQkJCQlwZ19tYmxlbigoY29uc3QgY2hhciAq KSAmYyksIChjb25zdCBjaGFyICopICZjLAorCQkJCQkJCSJiYXNlMzJoZXgiKSkpOworCisJCS8q IEFkZCA1IGJpdHMgdG8gYnVmZmVyICovCisJCWJpdHNfYnVmZmVyID0gKGJpdHNfYnVmZmVyIDw8 IDUpIHwgdmFsOworCQliaXRzX2luX2J1ZmZlciArPSA1OworCQlwb3MrKzsKKworCQkvKiBFeHRy YWN0IDgtYml0IGJ5dGVzIHdoZW4gd2UgaGF2ZSBlbm91Z2ggYml0cyAqLworCQl3aGlsZSAoYml0 c19pbl9idWZmZXIgPj0gOCkKKwkJeworCQkJYml0c19pbl9idWZmZXIgLT0gODsKKwkJCWRzdFtv dXRwdXRfcG9zKytdID0gKHVuc2lnbmVkIGNoYXIpIChiaXRzX2J1ZmZlciA+PiBiaXRzX2luX2J1 ZmZlcik7CisJCQkvKiBDbGVhciB0aGUgZXh0cmFjdGVkIGJpdHMgKi8KKwkJCWJpdHNfYnVmZmVy ICY9ICgoMVVMTCA8PCBiaXRzX2luX2J1ZmZlcikgLSAxKTsKKwkJfQorCisJCS8qIFJlc2V0IHBv c2l0aW9uIGFmdGVyIGVhY2ggY29tcGxldGUgOC1jaGFyYWN0ZXIgZ3JvdXAgKi8KKwkJaWYgKHBv cyA9PSA4KQorCQkJcG9zID0gMDsKKwl9CisKKwkvKiBWZXJpZnkgbm8gZXh0cmEgYml0cyByZW1h aW4gKHBhZGRpbmcgYml0cyBzaG91bGQgYmUgemVybykgKi8KKwlpZiAoYml0c19pbl9idWZmZXIg PiAwICYmIChiaXRzX2J1ZmZlciAmICgoMVVMTCA8PCBiaXRzX2luX2J1ZmZlcikgLSAxKSkgIT0g MCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIGJhc2UzMmhleCBlbmQgc2VxdWVuY2Ui KSwKKwkJCQkgZXJyaGludCgiSW5wdXQgZGF0YSBoYXMgbm9uLXplcm8gcGFkZGluZyBiaXRzLiIp KSk7CisKKwlyZXR1cm4gb3V0cHV0X3BvczsKK30KKwogLyoKICAqIENvbW1vbgogICovCkBAIC04 NTQsNiArMTAwNiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CiAJCQlwZ19iYXNlNjR1cmxfZW5j X2xlbiwgcGdfYmFzZTY0dXJsX2RlY19sZW4sIHBnX2Jhc2U2NHVybF9lbmNvZGUsIHBnX2Jhc2U2 NHVybF9kZWNvZGUKIAkJfQogCX0sCisJeworCQkiYmFzZTMyaGV4IiwKKwkJeworCQkJYmFzZTMy aGV4X2VuY19sZW4sIGJhc2UzMmhleF9kZWNfbGVuLCBiYXNlMzJoZXhfZW5jb2RlLCBiYXNlMzJo ZXhfZGVjb2RlCisJCX0KKwl9LAogCXsKIAkJImVzY2FwZSIsCiAJCXsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RyaW5ncy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N0cmluZ3Mub3V0CmluZGV4IGYzODY4OGI1YzM3Li45MTA3NTc1MzdlNyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdHJpbmdzLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N0cmluZ3Mub3V0CkBAIC0yNjA1LDkgKzI2MDUsMTE0IEBAIFNF TEVDVCBkZWNvZGUoJzAwJywgJ2ludmFsaWQnKTsgICAgICAgICAgIC0tIGVycm9yCiBFUlJPUjog IHVucmVjb2duaXplZCBlbmNvZGluZzogImludmFsaWQiCiBISU5UOiAgVmFsaWQgZW5jb2Rpbmdz IGFyZSAiYmFzZTY0IiwgImJhc2U2NHVybCIsICJlc2NhcGUiLCBhbmQgImhleCIuCiAtLQotLS0g YmFzZTY0dXJsIGVuY29kaW5nL2RlY29kaW5nCistLSBiYXNlMzJoZXggZW5jb2RpbmcvZGVjb2Rp bmcKIC0tCiBTRVQgYnl0ZWFfb3V0cHV0IFRPIGhleDsKK1NFTEVDVCBlbmNvZGUoJycsICdiYXNl MzJoZXgnKTsgIC0tICcnCisgZW5jb2RlIAorLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU IGVuY29kZSgnXHgxMScsICdiYXNlMzJoZXgnKTsgIC0tICcyND09PT09PScKKyAgZW5jb2RlICAK Ky0tLS0tLS0tLS0KKyAyND09PT09PQorKDEgcm93KQorCitTRUxFQ1QgZW5jb2RlKCdceDExMjIn LCAnYmFzZTMyaGV4Jyk7ICAtLSAnMjRIMD09PT0nCisgIGVuY29kZSAgCistLS0tLS0tLS0tCisg MjRIMD09PT0KKygxIHJvdykKKworU0VMRUNUIGVuY29kZSgnXHgxMTIyMzMnLCAnYmFzZTMyaGV4 Jyk7ICAtLSAnMjRIMzY9PT0nCisgIGVuY29kZSAgCistLS0tLS0tLS0tCisgMjRIMzY9PT0KKygx IHJvdykKKworU0VMRUNUIGVuY29kZSgnXHgxMTIyMzM0NCcsICdiYXNlMzJoZXgnKTsgIC0tICcy NEgzNkgwPScKKyAgZW5jb2RlICAKKy0tLS0tLS0tLS0KKyAyNEgzNkgwPQorKDEgcm93KQorCitT RUxFQ1QgZW5jb2RlKCdceDExMjIzMzQ0NTUnLCAnYmFzZTMyaGV4Jyk7ICAtLSAnMjRIMzZIMkwn CisgIGVuY29kZSAgCistLS0tLS0tLS0tCisgMjRIMzZIMkwKKygxIHJvdykKKworU0VMRUNUIGVu Y29kZSgnXHgxMTIyMzM0NDU1NjYnLCAnYmFzZTMyaGV4Jyk7ICAtLSAnMjRIMzZIMkxDTz09PT09 PScKKyAgICAgIGVuY29kZSAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgMjRIMzZIMkxDTz09 PT09PQorKDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCcnLCAnYmFzZTMyaGV4Jyk7ICAtLSAnJwor IGRlY29kZSAKKy0tLS0tLS0tCisgXHgKKygxIHJvdykKKworU0VMRUNUIGRlY29kZSgnMjQ9PT09 PT0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDExCisgZGVjb2RlIAorLS0tLS0tLS0KKyBceDExCiso MSByb3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0SDA9PT09JywgJ2Jhc2UzMmhleCcpOyAgLS0gXHgx MTIyCisgZGVjb2RlIAorLS0tLS0tLS0KKyBceDExMjIKKygxIHJvdykKKworU0VMRUNUIGRlY29k ZSgnMjRIMzY9PT0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDExMjIzMworICBkZWNvZGUgIAorLS0t LS0tLS0tLQorIFx4MTEyMjMzCisoMSByb3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0SDM2SDA9Jywg J2Jhc2UzMmhleCcpOyAgLS0gXHgxMTIyMzM0NAorICAgZGVjb2RlICAgCistLS0tLS0tLS0tLS0K KyBceDExMjIzMzQ0CisoMSByb3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0SDM2SDJMJywgJ2Jhc2Uz MmhleCcpOyAgLS0gXHgxMTIyMzM0NDU1CisgICAgZGVjb2RlICAgIAorLS0tLS0tLS0tLS0tLS0K KyBceDExMjIzMzQ0NTUKKygxIHJvdykKKworU0VMRUNUIGRlY29kZSgnMjRIMzZIMkxDTz09PT09 PScsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMjMzNDQ1NTY2CisgICAgIGRlY29kZSAgICAgCist LS0tLS0tLS0tLS0tLS0tCisgXHgxMTIyMzM0NDU1NjYKKygxIHJvdykKKworU0VMRUNUIGRlY29k ZSgnMjQnLCAnYmFzZTMyaGV4Jyk7ICAtLSBPSywgcGFkZGluZyBgPWAgYXJlIG9wdGlvbmFsCisg ZGVjb2RlIAorLS0tLS0tLS0KKyBceDExCisoMSByb3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0aDM2 aDJsY28nLCAnYmFzZTMyaGV4Jyk7ICAtLSBPSywgdGhlIGVuY29kaW5nIGlzIGNhc2UtaW5zZW5z aXRpdmUKKyAgICAgZGVjb2RlICAgICAKKy0tLS0tLS0tLS0tLS0tLS0KKyBceDExMjIzMzQ0NTU2 NgorKDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCc9JywgJ2Jhc2UzMmhleCcpOyAgLS0gZXJyb3IK K0VSUk9SOiAgdW5leHBlY3RlZCAiPSIgd2hpbGUgZGVjb2RpbmcgYmFzZTMyaGV4IHNlcXVlbmNl CitTRUxFQ1QgZGVjb2RlKCdXJywgJ2Jhc2UzMmhleCcpOyAgLS0gZXJyb3IKK0VSUk9SOiAgaW52 YWxpZCBzeW1ib2wgIlciIGZvdW5kIHdoaWxlIGRlY29kaW5nIGJhc2UzMmhleCBzZXF1ZW5jZQor U0VMRUNUIGRlY29kZSgnMjRIMzZIMD0yNCcsICdiYXNlMzJoZXgnKTsgLS0gZXJyb3IKK0VSUk9S OiAgaW52YWxpZCBzeW1ib2wgIjIiIGZvdW5kIHdoaWxlIGRlY29kaW5nIGJhc2UzMmhleCBzZXF1 ZW5jZQorLS0KKy0tIGJhc2U2NHVybCBlbmNvZGluZy9kZWNvZGluZworLS0KIC0tIFNpbXBsZSBl bmNvZGluZy9kZWNvZGluZwogU0VMRUNUIGVuY29kZSgnXHg2OWI3M2VmZicsICdiYXNlNjR1cmwn KTsgIC0tIGFiYy1fdwogIGVuY29kZSAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvdXVpZC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3V1aWQub3V0CmluZGV4 IGQxNTdlZjdkMGIzLi5kZjI1YTZhYTVjNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC91dWlkLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3V1aWQub3V0 CkBAIC0zMjcsNSArMzI3LDIxIEBAIFNFTEVDVCB2ID0gdjo6Ynl0ZWE6OnV1aWQgYXMgbWF0Y2hl ZCBGUk9NIGdlbl9yYW5kb21fdXVpZCgpIHY7CiAgdAogKDEgcm93KQogCistLSBtYWtlIHN1cmUg YmFzZTMyaGV4IGVuY29kaW5nIHdvcmtzIHdpdGggVVVJRHMgYW5kIHByZXNlcnZlcyBvcmRlcmlu ZworU0VMRUNUIG9yaWcsIGVuY29kZShvcmlnIDo6IGJ5dGVhLCAnYmFzZTMyaGV4JykgQVMgZW5j CitGUk9NIHVubmVzdChBUlJBWVsKKyAgICAnMTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0 MTc0MDAwJywKKyAgICAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJywKKyAg ICAnMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExJywKKyAgICAnZmZmZmZmZmYt ZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmJ10gOjogdXVpZFtdCispIEFTIG9yaWcgT1JERVIg QlkgZW5jOworICAgICAgICAgICAgICAgICBvcmlnICAgICAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgZW5jICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDAwMDAwMDAwLTAw MDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCB8IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwPT09 PT09CisgMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExIHwgMjQ4SDI0OEgyNDhI MjQ4SDI0OEgyNDhIMjQ9PT09PT0KKyAxMjNlNDU2Ny1lODliLTEyZDMtYTQ1Ni00MjY2MTQxNzQw MDAgfCAyOFY0QVBWOEpDOUQ3OTJNODlKMTg1UTAwMD09PT09PQorIGZmZmZmZmZmLWZmZmYtZmZm Zi1mZmZmLWZmZmZmZmZmZmZmZiB8IFZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZTPT09PT09Ciso NCByb3dzKQorCiAtLSBjbGVhbiB1cAogRFJPUCBUQUJMRSBndWlkMSwgZ3VpZDIsIGd1aWQzIENB U0NBREU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdHJpbmdzLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0cmluZ3Muc3FsCmluZGV4IGQ4YTA5NzM3NjY4Li5iNTIzN2U4 NTE3MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RyaW5ncy5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RyaW5ncy5zcWwKQEAgLTgzNSwxMCArODM1LDM3IEBAIFNF TEVDVCBlbmNvZGUoJ1x4MDEnOjpieXRlYSwgJ2ludmFsaWQnKTsgIC0tIGVycm9yCiBTRUxFQ1Qg ZGVjb2RlKCcwMCcsICdpbnZhbGlkJyk7ICAgICAgICAgICAtLSBlcnJvcgogCiAtLQotLS0gYmFz ZTY0dXJsIGVuY29kaW5nL2RlY29kaW5nCistLSBiYXNlMzJoZXggZW5jb2RpbmcvZGVjb2RpbmcK IC0tCiBTRVQgYnl0ZWFfb3V0cHV0IFRPIGhleDsKIAorU0VMRUNUIGVuY29kZSgnJywgJ2Jhc2Uz MmhleCcpOyAgLS0gJycKK1NFTEVDVCBlbmNvZGUoJ1x4MTEnLCAnYmFzZTMyaGV4Jyk7ICAtLSAn MjQ9PT09PT0nCitTRUxFQ1QgZW5jb2RlKCdceDExMjInLCAnYmFzZTMyaGV4Jyk7ICAtLSAnMjRI MD09PT0nCitTRUxFQ1QgZW5jb2RlKCdceDExMjIzMycsICdiYXNlMzJoZXgnKTsgIC0tICcyNEgz Nj09PScKK1NFTEVDVCBlbmNvZGUoJ1x4MTEyMjMzNDQnLCAnYmFzZTMyaGV4Jyk7ICAtLSAnMjRI MzZIMD0nCitTRUxFQ1QgZW5jb2RlKCdceDExMjIzMzQ0NTUnLCAnYmFzZTMyaGV4Jyk7ICAtLSAn MjRIMzZIMkwnCitTRUxFQ1QgZW5jb2RlKCdceDExMjIzMzQ0NTU2NicsICdiYXNlMzJoZXgnKTsg IC0tICcyNEgzNkgyTENPPT09PT09JworCitTRUxFQ1QgZGVjb2RlKCcnLCAnYmFzZTMyaGV4Jyk7 ICAtLSAnJworU0VMRUNUIGRlY29kZSgnMjQ9PT09PT0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDEx CitTRUxFQ1QgZGVjb2RlKCcyNEgwPT09PScsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMgorU0VM RUNUIGRlY29kZSgnMjRIMzY9PT0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDExMjIzMworU0VMRUNU IGRlY29kZSgnMjRIMzZIMD0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDExMjIzMzQ0CitTRUxFQ1Qg ZGVjb2RlKCcyNEgzNkgyTCcsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMjMzNDQ1NQorU0VMRUNU IGRlY29kZSgnMjRIMzZIMkxDTz09PT09PScsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMjMzNDQ1 NTY2CisKK1NFTEVDVCBkZWNvZGUoJzI0JywgJ2Jhc2UzMmhleCcpOyAgLS0gT0ssIHBhZGRpbmcg YD1gIGFyZSBvcHRpb25hbAorU0VMRUNUIGRlY29kZSgnMjRoMzZoMmxjbycsICdiYXNlMzJoZXgn KTsgIC0tIE9LLCB0aGUgZW5jb2RpbmcgaXMgY2FzZS1pbnNlbnNpdGl2ZQorU0VMRUNUIGRlY29k ZSgnPScsICdiYXNlMzJoZXgnKTsgIC0tIGVycm9yCitTRUxFQ1QgZGVjb2RlKCdXJywgJ2Jhc2Uz MmhleCcpOyAgLS0gZXJyb3IKK1NFTEVDVCBkZWNvZGUoJzI0SDM2SDA9MjQnLCAnYmFzZTMyaGV4 Jyk7IC0tIGVycm9yCisKKworLS0KKy0tIGJhc2U2NHVybCBlbmNvZGluZy9kZWNvZGluZworLS0K KwogLS0gU2ltcGxlIGVuY29kaW5nL2RlY29kaW5nCiBTRUxFQ1QgZW5jb2RlKCdceDY5YjczZWZm JywgJ2Jhc2U2NHVybCcpOyAgLS0gYWJjLV93CiBTRUxFQ1QgZGVjb2RlKCdhYmMtX3cnLCAnYmFz ZTY0dXJsJyk7ICAgICAgLS0gXHg2OWI3M2VmZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdXVpZC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC91dWlkLnNxbAppbmRleCBmNTEy ZjRkZWExZC4uMjc4YTU3NzNhZGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3V1 aWQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3V1aWQuc3FsCkBAIC0xNTIsNSArMTUy LDE0IEBAIFNFTEVDVCAnXHgwMTlhMmY4NTljZWQ3MjI1Yjk5ZDljNTUwNDRhMjU2Myc6OmJ5dGVh Ojp1dWlkOwogU0VMRUNUICdceDEyMzQ1Njc4OTBhYmNkZWYnOjpieXRlYTo6dXVpZDsgLS0gZXJy b3IKIFNFTEVDVCB2ID0gdjo6Ynl0ZWE6OnV1aWQgYXMgbWF0Y2hlZCBGUk9NIGdlbl9yYW5kb21f dXVpZCgpIHY7CiAKKy0tIG1ha2Ugc3VyZSBiYXNlMzJoZXggZW5jb2Rpbmcgd29ya3Mgd2l0aCBV VUlEcyBhbmQgcHJlc2VydmVzIG9yZGVyaW5nCitTRUxFQ1Qgb3JpZywgZW5jb2RlKG9yaWcgOjog Ynl0ZWEsICdiYXNlMzJoZXgnKSBBUyBlbmMKK0ZST00gdW5uZXN0KEFSUkFZWworICAgICcxMjNl NDU2Ny1lODliLTEyZDMtYTQ1Ni00MjY2MTQxNzQwMDAnLAorICAgICcwMDAwMDAwMC0wMDAwLTAw MDAtMDAwMC0wMDAwMDAwMDAwMDAnLAorICAgICcxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTEx MTExMTExMTEnLAorICAgICdmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYnXSA6 OiB1dWlkW10KKykgQVMgb3JpZyBPUkRFUiBCWSBlbmM7CisKIC0tIGNsZWFuIHVwCiBEUk9QIFRB QkxFIGd1aWQxLCBndWlkMiwgZ3VpZDMgQ0FTQ0FERTsKLS0gCjIuNDMuMAoK --000000000000717612064b1a6a7f--