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 1va7WK-003tGc-0c for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Dec 2025 07:18:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1va7WI-00FkSd-00 for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Dec 2025 07:18:22 +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 1va7WH-00FkST-23 for pgsql-hackers@lists.postgresql.org; Mon, 29 Dec 2025 07:18:22 +0000 Received: from mail-vs1-xe32.google.com ([2607:f8b0:4864:20::e32]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1va7WF-003MRy-2Z for pgsql-hackers@postgresql.org; Mon, 29 Dec 2025 07:18:22 +0000 Received: by mail-vs1-xe32.google.com with SMTP id ada2fe7eead31-5eb8f9be588so3135910137.3 for ; Sun, 28 Dec 2025 23:18:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766992698; x=1767597498; 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=bhFSHwbINsv5dh5rdKZPugEhAxUJTJNzu/6/2PmJjz4=; b=MH73OV5cElTODWiqeUlOPCHvMaxIpz/isJsHcWENYEIRutl979Y4Hj4AZI7l6hFlGh vOhiYk0FYteplGbVEuf2bv2HD9uH+MnajjG6a2TzCdW9j1UKHPIQjdn9RfQOqiL/ZIDz 8TNym8qAnNcps+Uvn0nR/MyY3xpD3r5eCi8xQz1jaKHQ0AQqi4BMmm+D4vYNuoZV/ZJk p0h1sKIFsqkbq4l9vclxWSZhdMFUw7LKYkbSNLctBfwHCY8f6HTxx3XKpFrJrx3UDEop yk7Xd2yPPDN3h6JCKc0+1gLhv2ddlrOIibwALAXWUvtLig6XJvLPAhqGMaKznWULCf62 /1mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766992698; x=1767597498; 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=bhFSHwbINsv5dh5rdKZPugEhAxUJTJNzu/6/2PmJjz4=; b=kCVhXgplFK89xSfG9OjVZN8daUUPWaLUG4UF1k4Kwlez10WaFiISyi160xd651Ogsb gGivsFD5n5MUioM/z42TbbQ0cvgOO0XyF5hCRMJRGLu4FB4idM3WipONFJ4rIkeUMmUK FmdosakdOcG8YrQd1QQcvyiq88+XWjaMw3xE37fAgtJlBDhCa2ClwSM+vLReO61hpXkU /mvJOaaaL+ijHYD/dKcLOwcmwUHOBEUimtfaR32vTnLFhSUSPIegl5WUSAzdZ/YKu24+ DTm1aIKWvw89v4uzktXtMGjpwekCLiMPnURNA8K+wh1IkYwnAZUcxOz5r8tGXirwYoD6 DpUA== X-Gm-Message-State: AOJu0YzW5YOEdRWPkEIsdEGxoSaRnjleuyPXX+KJxuO+kF8wsswrZxIJ 4vRk75RX/WjryL7ZYRAFYcs68JjrEZD7/DYbEfDqfLPNMK4rP275MF+239oln17Q4jJW1FQV/XS 2q7oc/vTGHvF12rlnPuapTU0yHm8KegE= X-Gm-Gg: AY/fxX7qfuPjH/W6T7utZ8I/I7TJfd90sDbDV0VpFffmBscGlS2OJWf0lhuXiPzVMQ4 Kuhblt6I+SDydcxL7yx5hltvjwFlsJwI6Nxj8Czu3V3kEEmCzi1+zMAHSCSKpTZj1E/fmKjH0ES 0JmylprWgim6e7wcZZ7MckXzSmAECxmJhMDsqJxnKWbtaGhEvIMRdFeOFXD4+2zF+JFQVghrB1A GGJgIi/H437XNaTkEXkubH+Ukw+duBrYtBStWTqmYoos3Z/ub0OLE1hCuHu8oSIrKEUxS7Wcm8M AN1CELc+0HEp50K1ZI45ojAgifpakl8yk8mPwW8BG+wb5s2JGk5f9i/jEODZHKRHyJrA5Hiok0s FTNEGj4IClMkV14D04IqqwfzA5g4B36mLxObjfpwynNWlQaPL6i3Hrvap3fJBhbyWYs9dLedm7Q LYaKLU7EzEQA== X-Google-Smtp-Source: AGHT+IH6IZWjUjQ1bZa0Php5pdqSlpCFI752umMGG72y4wOXX0oyHkeOhs84mu3pkZ6AB08Tb0RlgbkN1HEfM9MdB7I= X-Received: by 2002:a05:6102:6a81:b0:5db:e6fa:f7fe with SMTP id ada2fe7eead31-5eb1a7e67cdmr8618674137.24.1766992698292; Sun, 28 Dec 2025 23:18:18 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Mon, 29 Dec 2025 15:17:42 +0800 X-Gm-Features: AQt7F2pioq4d7aoRWDZfwZgJ-tP07P1VxykQVmH1LLE_qHv_-DQDvg751sXfPPI Message-ID: Subject: Re: domain for WITHOUT OVERLAPS To: Paul A Jungwirth Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000001a51a90647120c3e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001a51a90647120c3e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Dec 23, 2025 at 11:25=E2=80=AFAM Paul A Jungwirth wrote: > > > diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cac= he/typcache.c > > index 6a347698edf..e27ca1466f2 100644 > > --- a/src/backend/utils/cache/typcache.c > > +++ b/src/backend/utils/cache/typcache.c > > @@ -944,6 +944,8 @@ lookup_type_cache(Oid type_id, int flags) > > typentry->domainBaseTypmod =3D -1; > > typentry->domainBaseType =3D > > getBaseTypeAndTypmod(type_id, &typentry->domainBaseTypmod)= ; > > + typentry->domainBaseTyptype =3D > > + get_typtype(typentry->domainBaseType); > > } > > if ((flags & TYPECACHE_DOMAIN_CONSTR_INFO) && > > (typentry->flags & TCFLAGS_CHECKED_DOMAIN_CONSTRAINTS) =3D=3D = 0 && > > Is there any performance concern about adding this lookup? > From what I can tell we don't use TYPECACHE_DOMAIN_BASE_INFO very > often, so it is probably okay. > We can get here in the executor from ExecEvalWholeRowVar, but that > seems acceptable to me. > > hi. To make WITHOUT OVERLAPS work with domains, ExecWithoutOverlapsNotEmpty req= uires the base type=E2=80=99s typtype. I do not see a viable alternative approach= . We can cache the base type's typtype in TypeCacheEntry->domainBaseTyptype. ``` if ((flags & TYPECACHE_DOMAIN_BASE_INFO) && typentry->domainBaseType =3D=3D InvalidOid && typentry->typtype =3D=3D TYPTYPE_DOMAIN) { typentry->domainBaseTypmod =3D -1; typentry->domainBaseType =3D getBaseTypeAndTypmod(type_id, &typentry->domainBaseTypmod); typentry->domainBaseTyptype =3D get_typtype(typentry->domainBaseType); } ``` We look up the domain base type=E2=80=99s typtype only once. On subsequent lookup_type_cache call, typentry->domainBaseType already is a valid OID, so= the IF branch above will not be reached. so. I don't see any performance issues here. > > Also testing a range over a domain (in WITHOUT OVERLAPS position) would b= e good. > I do not think we need extensive foreign key=E2=80=93related tests, because check_exclusion_or_unique_constraint is only invoked for data changes on th= e primary key side. So, I kept only a single foreign key=E2=80=93related test= . The attached patch should address all of your comments. I think you will like attached regress tests. -- jian https://www.enterprisedb.com/ --0000000000001a51a90647120c3e Content-Type: text/x-patch; charset="UTF-8"; name="v3-0001-Add-support-for-domain-types-in-WITHOUT-OVERLAPS.patch" Content-Disposition: attachment; filename="v3-0001-Add-support-for-domain-types-in-WITHOUT-OVERLAPS.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjqtqs120 RnJvbSAwNDExOThmMmZiNjY3NDA2MDY3NTk4MGU0YmZjYTZmZjE2MDc0ZjEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjkgRGVjIDIwMjUgMTU6MTU6MjMgKzA4MDAKU3ViamVjdDogW1BBVENIIHYz IDEvMV0gQWRkIHN1cHBvcnQgZm9yIGRvbWFpbiB0eXBlcyBpbiBXSVRIT1VUIE9WRVJMQVBTCgpU aGlzIGNvbW1pdCBhbGxvd3MgZG9tYWluIHR5cGVzIHRvIHdvcmsgd2l0aCB0aGUgV0lUSE9VVCBP VkVSTEFQUyBjb25zdHJhaW50LgpEb21haW5zIG92ZXIgcmFuZ2UgdHlwZXMgYW5kIGRvbWFpbnMg b3ZlciBtdWx0aXJhbmdlIHR5cGVzIGFyZSBib3RoIHN1cHBvcnRlZC4KVXNlci1kZWZpbmVkIHJh bmdlIHR5cGVzIHdob3NlIHN1YnR5cGUgaXMgYSBkb21haW4gYXJlIGFsc28gc3VwcG9ydGVkLgoK Y29tbWl0ZmVzdDogaHR0cHM6Ly9jb21taXRmZXN0LnBvc3RncmVzcWwub3JnL3BhdGNoLzYyODEK ZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUNKdWZ4R29BbU5fMGlKPWhqVEcwdkdw T1NPeXktdll5ZkUrLXEwQVd4cnEyX3A1WFFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV91dGlsY21kLmMgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91 dGlscy9jYWNoZS90eXBjYWNoZS5jICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRp bHMvdHlwY2FjaGUuaCAgICAgICAgICAgICAgICAgIHwgICA1ICstCiAuLi4vcmVncmVzcy9leHBl Y3RlZC93aXRob3V0X292ZXJsYXBzLm91dCAgICAgfCAxMjggKysrKysrKysrKysrKysrKystCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC93aXRob3V0X292ZXJsYXBzLnNxbCAgICAgfCAxMDQgKysrKysr KysrKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwgMjQzIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCAwYjNhMzFmMTcwMy4uNjdl ZGRjYWMwZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC03NTIsMTMgKzc1 MiwxOSBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVh cCwgUmVsYXRpb24gaW5kZXgsCiAKIAkJaWYgKCFpc251bGxbaW5kbmtleWF0dHMgLSAxXSkKIAkJ eworCQkJY2hhciAJCXR5cHR5cGU7CiAJCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IoaGVhcCk7CiAJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1 cGRlc2MsIGF0dG5vIC0gMSk7Ci0JCQlUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUgPSBsb29rdXBf dHlwZV9jYWNoZShhdHQtPmF0dHR5cGlkLCAwKTsKKwkJCVR5cGVDYWNoZUVudHJ5ICp0eXBjYWNo ZSA9IGxvb2t1cF90eXBlX2NhY2hlKGF0dC0+YXR0dHlwaWQsIFRZUEVDQUNIRV9ET01BSU5fQkFT RV9JTkZPKTsKKworCQkJaWYgKE9pZElzVmFsaWQodHlwY2FjaGUtPmRvbWFpbkJhc2VUeXBlKSkK KwkJCQl0eXB0eXBlID0gdHlwY2FjaGUtPmRvbWFpbkJhc2VUeXB0eXBlOworCQkJZWxzZQorCQkJ CXR5cHR5cGUgPSB0eXBjYWNoZS0+dHlwdHlwZTsKIAogCQkJRXhlY1dpdGhvdXRPdmVybGFwc05v dEVtcHR5KGhlYXAsIGF0dC0+YXR0bmFtZSwKIAkJCQkJCQkJCQl2YWx1ZXNbaW5kbmtleWF0dHMg LSAxXSwKLQkJCQkJCQkJCQl0eXBjYWNoZS0+dHlwdHlwZSwgYXR0LT5hdHR0eXBpZCk7CisJCQkJ CQkJCQkJdHlwdHlwZSwgYXR0LT5hdHR0eXBpZCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdXRpbGNtZC5jCmluZGV4IDJiN2IwODRmMjE2Li4zMzM2MGJhMDc2MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYworKysgYi9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfdXRpbGNtZC5jCkBAIC0yNzk1LDYgKzI3OTUsOCBAQCB0cmFuc2Zvcm1JbmRleENv bnN0cmFpbnQoQ29uc3RyYWludCAqY29uc3RyYWludCwgQ3JlYXRlU3RtdENvbnRleHQgKmN4dCkK IAkJCQkJaWYgKCFPaWRJc1ZhbGlkKHR5cGlkKSAmJiBjb2x1bW4pCiAJCQkJCQl0eXBpZCA9IHR5 cGVuYW1lVHlwZUlkKE5VTEwsIGNvbHVtbi0+dHlwZU5hbWUpOwogCisJCQkJCXR5cGlkID0gZ2V0 QmFzZVR5cGUodHlwaWQpOworCiAJCQkJCWlmICghT2lkSXNWYWxpZCh0eXBpZCkgfHwgISh0eXBl X2lzX3JhbmdlKHR5cGlkKSB8fCB0eXBlX2lzX211bHRpcmFuZ2UodHlwaWQpKSkKIAkJCQkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gp LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvdHlwY2FjaGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3R5cGNhY2hlLmMKaW5kZXggMGMxN2Q5OWQwMjEuLjgzOWQxZTNl YmNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS90eXBjYWNoZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3R5cGNhY2hlLmMKQEAgLTk0NCw2ICs5NDQsOCBAQCBs b29rdXBfdHlwZV9jYWNoZShPaWQgdHlwZV9pZCwgaW50IGZsYWdzKQogCQl0eXBlbnRyeS0+ZG9t YWluQmFzZVR5cG1vZCA9IC0xOwogCQl0eXBlbnRyeS0+ZG9tYWluQmFzZVR5cGUgPQogCQkJZ2V0 QmFzZVR5cGVBbmRUeXBtb2QodHlwZV9pZCwgJnR5cGVudHJ5LT5kb21haW5CYXNlVHlwbW9kKTsK KwkJdHlwZW50cnktPmRvbWFpbkJhc2VUeXB0eXBlID0KKwkJCWdldF90eXB0eXBlKHR5cGVudHJ5 LT5kb21haW5CYXNlVHlwZSk7CiAJfQogCWlmICgoZmxhZ3MgJiBUWVBFQ0FDSEVfRE9NQUlOX0NP TlNUUl9JTkZPKSAmJgogCQkodHlwZW50cnktPmZsYWdzICYgVENGTEFHU19DSEVDS0VEX0RPTUFJ Tl9DT05TVFJBSU5UUykgPT0gMCAmJgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdHlw Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R5cGNhY2hlLmgKaW5kZXggMWNiMzBmMTgxOGMu LjJhZDc1MjhjMTk1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy90eXBjYWNoZS5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3R5cGNhY2hlLmgKQEAgLTEwOSwxMSArMTA5LDEyIEBAIHR5 cGVkZWYgc3RydWN0IFR5cGVDYWNoZUVudHJ5CiAJc3RydWN0IFR5cGVDYWNoZUVudHJ5ICpybmd0 eXBlOyAvKiBtdWx0aXJhbmdlJ3MgcmFuZ2UgdW5kZXJseWluZyB0eXBlICovCiAKIAkvKgotCSAq IERvbWFpbidzIGJhc2UgdHlwZSBhbmQgdHlwbW9kIGlmIGl0J3MgYSBkb21haW4gdHlwZS4gIFpl cm9lcyBpZiBub3QKLQkgKiBkb21haW4sIG9yIGlmIGluZm9ybWF0aW9uIGhhc24ndCBiZWVuIHJl cXVlc3RlZC4KKwkgKiBEb21haW4ncyBiYXNlIHR5cGUsIHR5cG1vZCwgYW5kIHR5cHR5cGUgaWYg aXQncyBhIGRvbWFpbiB0eXBlLgorCSAqIFplcm9lcyBpZiBub3QgZG9tYWluLCBvciBpZiBpbmZv cm1hdGlvbiBoYXNuJ3QgYmVlbiByZXF1ZXN0ZWQuCiAJICovCiAJT2lkCQkJZG9tYWluQmFzZVR5 cGU7CiAJaW50MzIJCWRvbWFpbkJhc2VUeXBtb2Q7CisJY2hhcgkJZG9tYWluQmFzZVR5cHR5cGU7 CiAKIAkvKgogCSAqIERvbWFpbiBjb25zdHJhaW50IGRhdGEgaWYgaXQncyBhIGRvbWFpbiB0eXBl LiAgTlVMTCBpZiBub3QgZG9tYWluLCBvcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC93aXRob3V0X292ZXJsYXBzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv d2l0aG91dF9vdmVybGFwcy5vdXQKaW5kZXggZjMxNDRiZGMzOWMuLjQ4NTMzMDJjYWU1IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpdGhvdXRfb3ZlcmxhcHMub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0aG91dF9vdmVybGFwcy5vdXQKQEAgLTE2 Miw3ICsxNjIsMTI5IEBAIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmczICgKICk7CiBBTFRFUiBU QUJMRSB0ZW1wb3JhbF9ybmczIERST1AgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmczX3BrOwogRFJP UCBUQUJMRSB0ZW1wb3JhbF9ybmczOwotRFJPUCBUWVBFIHRleHRyYW5nZTI7CistLQorLS0gdGVz dHMgZm9yIHJhbmdlIG92ZXIgZG9tYWluLCBtdWx0aXJhbmdlIG92ZXIgYSBkb21haW4sIGN1c3Rv bSByYW5nZSB0eXBlIG92ZXIKKy0tIGRvbWFpbiwgY3VzdG9tIG11bHRpIHJhbmdlIHR5cGUgb3Zl ciBkb21haW4uCistLQorQ1JFQVRFIERPTUFJTiBpbnQ0X2QgYXMgaW50ZWdlciBjaGVjayAodmFs dWUgPD4gMTApOworQ1JFQVRFIFRZUEUgaW50NF9kX3JhbmdlIGFzIHJhbmdlIChzdWJ0eXBlID0g aW50NF9kKTsKK0NSRUFURSBET01BSU4gaW50NG11bHRpcmFuZ2VfZCBhcyBpbnQ0bXVsdGlyYW5n ZSBjaGVjayAodmFsdWUgPD4gJ3tbMTAsMTEpfScpOworQ1JFQVRFIERPTUFJTiBpbnQ0cmFuZ2Vf ZCBBUyBpbnQ0cmFuZ2UgQ0hFQ0sgKFZBTFVFIDw+ICdbMTAsMTEpJyk7CitDUkVBVEUgRE9NQUlO IHRleHRyYW5nZTJfZCBBUyB0ZXh0cmFuZ2UyIENIRUNLIChWQUxVRSA8PiAnW2MsZCknKTsKK0NS RUFURSBET01BSU4gdGV4dHJhbmdlMl9kZCBBUyB0ZXh0cmFuZ2UyX2Q7CitDUkVBVEUgRE9NQUlO IHRleHRtdWx0aXJhbmdlMl9kIEFTIHRleHRtdWx0aXJhbmdlMiBDSEVDSyAoVkFMVUUgPD4gJ3tb YyxkKX0nKTsKKy0tIEl0IGlzIGEgcmFuZ2UgdHlwZSByYXRoZXIgdGhhbiBhIGRvbWFpbiB0eXBl OyBob3dldmVyLCB0aGUgcmFuZ2UgdHlwZeKAmXMKKy0tIHN1YnR5cGUgaXMgYSBkb21haW4gdHlw ZS4KK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmc0ICgKKyAgaWQgaW50NHJhbmdlX2QsCisgIHZh bGlkX2F0IGludDRfZF9yYW5nZSwKKyAgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmc0X3BrIFBSSU1B UlkgS0VZKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJMQVBTKQorKTsKK0lOU0VSVCBJTlRPIHRl bXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMiknLCAnWzEwLDExKScpOyAtLWVycm9yCitFUlJPUjog IHZhbHVlIGZvciBkb21haW4gaW50NF9kIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgImludDRf ZF9jaGVjayIKK0xJTkUgMTogSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwy KScsICdbMTAsMTEpJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxMCwxMSkn LCAnWzEsMiknKTsgLS1lcnJvcgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGludDRyYW5nZV9k IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgImludDRyYW5nZV9kX2NoZWNrIgorSU5TRVJUIElO VE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwxMSknLCAnWzksMTApJyk7IC0tZXJyb3IKK0VS Uk9SOiAgdmFsdWUgZm9yIGRvbWFpbiBpbnQ0X2QgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAi aW50NF9kX2NoZWNrIgorTElORSAxOiBJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAo J1sxLDExKScsICdbOSwxMCknKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBeCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sx LDIpJywgJ1sxLDEzKScpLCAoJ1sxLDIpJywgJ1syLDUpJyk7IC0tZXJyb3IKK0VSUk9SOiAgY29u ZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJhaW50ICJ0ZW1wb3Jh bF9ybmc0X3BrIgorREVUQUlMOiAgS2V5IChpZCwgdmFsaWRfYXQpPShbMSwyKSwgWzIsNSkpIGNv bmZsaWN0cyB3aXRoIGV4aXN0aW5nIGtleSAoaWQsIHZhbGlkX2F0KT0oWzEsMiksIFsxLDEzKSku CitEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzQ7CistLVRoZSBkb21haW4gaXMgYSByYW5nZSB0eXBl LCBhbmQgaXRzIGJhc2UgdHlwZSBpcyBhIGJ1aWx0LWluIHJhbmdlIHR5cGUuCitDUkVBVEUgVEFC TEUgdGVtcG9yYWxfcm5nNCAoCisgIGlkIGludDRyYW5nZV9kLAorICB2YWxpZF9hdCBpbnQ0cmFu Z2VfZCwKKyAgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmc0X3BrIFVOSVFVRSAoaWQsIHZhbGlkX2F0 IFdJVEhPVVQgT1ZFUkxBUFMpCispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMg KCdbMSwyKScsICdbMTAsMTEpJyk7IC0tZXJyb3IKK0VSUk9SOiAgdmFsdWUgZm9yIGRvbWFpbiBp bnQ0cmFuZ2VfZCB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJpbnQ0cmFuZ2VfZF9jaGVjayIK K0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMiknLCAnWzMsMTMpJyksICgn WzEsMiknLCAnWzIsMTMpJyk7IC0tZXJyb3IKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVl IHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJhaW50ICJ0ZW1wb3JhbF9ybmc0X3BrIgorREVUQUlM OiAgS2V5IChpZCwgdmFsaWRfYXQpPShbMSwyKSwgWzIsMTMpKSBjb25mbGljdHMgd2l0aCBleGlz dGluZyBrZXkgKGlkLCB2YWxpZF9hdCk9KFsxLDIpLCBbMywxMykpLgorRFJPUCBUQUJMRSB0ZW1w b3JhbF9ybmc0OworLS1UaGUgZG9tYWluIGlzIGEgcmFuZ2UgdHlwZSwgYW5kIGl0cyBiYXNlIHR5 cGUgaXMgYSB1c2VyLWRlZmluZWQgcmFuZ2UgdHlwZS4KK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9y bmc0ICgKKyAgaWQgaW50NHJhbmdlX2QsCisgIHZhbGlkX2F0IHRleHRyYW5nZTJfZGQsCisgIENP TlNUUkFJTlQgdGVtcG9yYWxfcm5nNF9wayBVTklRVUUgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9W RVJMQVBTKQorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMiknLCBO VUxMKSwgKE5VTEwsICdbMSwyKScpOworSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMg KCdbMSwyKScsICdbYyxkKScpOyAtLWVycm9yCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gdGV4 dHJhbmdlMl9kZCB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXh0cmFuZ2UyX2RfY2hlY2si CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ1thLGQpJyk7CitJ TlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ1tiLGMpJyk7IC0tZXJy b3IKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25z dHJhaW50ICJ0ZW1wb3JhbF9ybmc0X3BrIgorREVUQUlMOiAgS2V5IChpZCwgdmFsaWRfYXQpPShb MSwyKSwgW2IsYykpIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGtleSAoaWQsIHZhbGlkX2F0KT0o WzEsMiksIFthLGQpKS4KK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEwLDEx KScsIE5VTEwpOyAtLWVycm9yCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gaW50NHJhbmdlX2Qg dmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAiaW50NHJhbmdlX2RfY2hlY2siCitJTlNFUlQgSU5U TyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1syLDMpJywgJ1tCLEMpJyksICgnWzIsMyknLCAnW0Es QyknKTsgLS1lcnJvcgorRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhj bHVzaW9uIGNvbnN0cmFpbnQgInRlbXBvcmFsX3JuZzRfcGsiCitERVRBSUw6ICBLZXkgKGlkLCB2 YWxpZF9hdCk9KFsyLDMpLCBbQSxDKSkgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5IChpZCwg dmFsaWRfYXQpPShbMiwzKSwgW0IsQykpLgorLS0gSXQgaXMgYSBtdWx0aXJhbmdlIHR5cGUgcmF0 aGVyIHRoYW4gYSBkb21haW4gdHlwZTsgaG93ZXZlciwgdGhlIG11bHRpcmFuZ2UKKy0tIHR5cGXi gJlzIHN1YnR5cGUgaXMgYSBkb21haW4gdHlwZS4KK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9tbHRy bmc0ICgKKyAgaWQgIGludDRyYW5nZV9kLAorICB2YWxpZF9hdCBpbnQ0X2RfbXVsdGlyYW5nZSwK KyAgQ09OU1RSQUlOVCB0ZW1wb3JhbF9tbHRybmc0X3BrIFBSSU1BUlkgS0VZIChpZCwgdmFsaWRf YXQgV0lUSE9VVCBPVkVSTEFQUykKKyk7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmc0IFZB TFVFUyAoJ1sxLDIpJywgJ3tbMTAsMTEpfScpOyAtLWVycm9yCitFUlJPUjogIHZhbHVlIGZvciBk b21haW4gaW50NF9kIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgImludDRfZF9jaGVjayIKK0xJ TkUgMTogSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5nNCBWQUxVRVMgKCdbMSwyKScsICd7WzEw LDExKX0nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF4KK0lOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAn e1szLDEzKX0nKSwgKCdbMSwyKScsICd7WzIsMTMpfScpOyAtLWVycm9yCitFUlJPUjogIGNvbmZs aWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAidGVtcG9yYWxf bWx0cm5nNF9wayIKK0RFVEFJTDogIEtleSAoaWQsIHZhbGlkX2F0KT0oWzEsMiksIHtbMiwxMyl9 KSBjb25mbGljdHMgd2l0aCBleGlzdGluZyBrZXkgKGlkLCB2YWxpZF9hdCk9KFsxLDIpLCB7WzMs MTMpfSkuCitEUk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZzQ7CistLVRoZSBkb21haW4gaXMgYSBt dWx0aXJhbmdlIHR5cGUsIGFuZCBpdHMgYmFzZSB0eXBlIGlzIGEgYnVpbHQtaW4gbXVsdGlyYW5n ZQorLS10eXBlLgorQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX21sdHJuZzQgKAorICBpZCAgaW50NHJh bmdlX2QsCisgIHZhbGlkX2F0IGludDRtdWx0aXJhbmdlX2QsCisgIENPTlNUUkFJTlQgdGVtcG9y YWxfbWx0cm5nNF9wayBQUklNQVJZIEtFWSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMp CispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5nNCBWQUxVRVMgKCdbMSwyKScsICd7WzEw LDExKX0nKTsgLS1lcnJvcgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGludDRtdWx0aXJhbmdl X2QgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAiaW50NG11bHRpcmFuZ2VfZF9jaGVjayIKK0lO U0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAne1szLDEzKX0nKSwg KCdbMSwyKScsICd7WzIsMTMpfScpOyAtLWVycm9yCitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2 YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAidGVtcG9yYWxfbWx0cm5nNF9wayIK K0RFVEFJTDogIEtleSAoaWQsIHZhbGlkX2F0KT0oWzEsMiksIHtbMiwxMyl9KSBjb25mbGljdHMg d2l0aCBleGlzdGluZyBrZXkgKGlkLCB2YWxpZF9hdCk9KFsxLDIpLCB7WzMsMTMpfSkuCitEUk9Q IFRBQkxFIHRlbXBvcmFsX21sdHJuZzQ7CistLVRoZSBkb21haW4gaXMgYSBtdWx0aXJhbmdlIHR5 cGUsIGFuZCBpdHMgYmFzZSB0eXBlIGlzIGEgdXNlci1kZWZpbmVkCistLW11bHRpcmFuZ2UgdHlw ZS4KK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9tbHRybmc0ICgKKyAgaWQgaW50NHJhbmdlX2QsCisg IHZhbGlkX2F0IHRleHRtdWx0aXJhbmdlMl9kLAorICBDT05TVFJBSU5UIHRlbXBvcmFsX21sdHJu ZzRfcGsgUFJJTUFSWSBLRVkgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJMQVBTKQorKTsKK0lO U0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAne1tjLGQpfScpOyAt LWVycm9yCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gdGV4dG11bHRpcmFuZ2UyX2QgdmlvbGF0 ZXMgY2hlY2sgY29uc3RyYWludCAidGV4dG11bHRpcmFuZ2UyX2RfY2hlY2siCitJTlNFUlQgSU5U TyB0ZW1wb3JhbF9tbHRybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ3tbYSxnKX0nKTsKK0lOU0VSVCBJ TlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAne1tiLGMpfScpOyAtLWVycm9y CitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3Ry YWludCAidGVtcG9yYWxfbWx0cm5nNF9wayIKK0RFVEFJTDogIEtleSAoaWQsIHZhbGlkX2F0KT0o WzEsMiksIHtbYixjKX0pIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGtleSAoaWQsIHZhbGlkX2F0 KT0oWzEsMiksIHtbYSxnKX0pLgorSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5nNCBWQUxVRVMg KCdbMiwzKScsICd7W0IsQyl9JyksICgnWzIsMyknLCAne1tBLEMpfScpOyAtLWVycm9yCitFUlJP UjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAi dGVtcG9yYWxfbWx0cm5nNF9wayIKK0RFVEFJTDogIEtleSAoaWQsIHZhbGlkX2F0KT0oWzIsMyks IHtbQSxDKX0pIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGtleSAoaWQsIHZhbGlkX2F0KT0oWzIs MyksIHtbQixDKX0pLgorLS0tLW5vdyB0ZXN0IGZvcmVpZ24ga2V5CitDUkVBVEUgVEFCTEUgdGVt cG9yYWxfbWx0cm5nZmsgKAorICBwYXJlbnRfaWQgaW50NHJhbmdlX2QsCisgIGlkIGludDRyYW5n ZSwKKyAgdmFsaWRfYXQgdGV4dG11bHRpcmFuZ2UyX2QpOworQUxURVIgVEFCTEUgdGVtcG9yYWxf bWx0cm5nZmsKKyAgQUREIENPTlNUUkFJTlQgdGVtcG9yYWxfbWx0cm5nZmtfZmsKKyAgICBGT1JF SUdOIEtFWSAocGFyZW50X2lkLCBQRVJJT0QgdmFsaWRfYXQpCisgICAgUkVGRVJFTkNFUyB0ZW1w b3JhbF9tbHRybmc0OworSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5nZmsgVkFMVUVTICgnWzEs MiknLCAnWzIsMyknLCAne1tkLGUpfScpOworVVBEQVRFIHRlbXBvcmFsX21sdHJuZzQgU0VUIHZh bGlkX2F0ID0gJ3tbYyxkKX0nOyAtLWVycm9yCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gdGV4 dG11bHRpcmFuZ2UyX2QgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGV4dG11bHRpcmFuZ2Uy X2RfY2hlY2siCitVUERBVEUgdGVtcG9yYWxfbWx0cm5nNCBTRVQgdmFsaWRfYXQgPSAne1thLGgp fSc7CitVUERBVEUgdGVtcG9yYWxfbWx0cm5nNCBTRVQgdmFsaWRfYXQgPSAne1tmLGcpfSc7IC0t ZXJyb3IKK0VSUk9SOiAgdXBkYXRlIG9yIGRlbGV0ZSBvbiB0YWJsZSAidGVtcG9yYWxfbWx0cm5n NCIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAidGVtcG9yYWxfbWx0cm5nZmtfZmsi IG9uIHRhYmxlICJ0ZW1wb3JhbF9tbHRybmdmayIKK0RFVEFJTDogIEtleSAoaWQsIHZhbGlkX2F0 KT0oWzEsMiksIHtbYSxoKX0pIGlzIHN0aWxsIHJlZmVyZW5jZWQgZnJvbSB0YWJsZSAidGVtcG9y YWxfbWx0cm5nZmsiLgorRFJPUCBUQUJMRSB0ZW1wb3JhbF9tbHRybmc0LCB0ZW1wb3JhbF9tbHRy bmdmaywgdGVtcG9yYWxfcm5nNDsKIC0tIFBLIHdpdGggb25lIGNvbHVtbiBwbHVzIGEgbXVsdGly YW5nZToKIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9tbHRybmcgKAogICBpZCBpbnQ0cmFuZ2UsCkBA IC0zMDEsNyArNDIzLDYgQEAgU0VMRUNUIHBnX2dldF9pbmRleGRlZihjb25pbmRpZCwgMCwgdHJ1 ZSkgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbm5hbWUgPSAndGUKIAogRFJPUCBUQUJMRSB0 ZW1wb3JhbF9ybmczOwogLS0gVU5JUVVFIHdpdGggYSBjdXN0b20gcmFuZ2UgdHlwZToKLUNSRUFU RSBUWVBFIHRleHRyYW5nZTIgQVMgcmFuZ2UgKHN1YnR5cGU9dGV4dCwgY29sbGF0aW9uPSJDIik7 CiBDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nMyAoCiAgIGlkIGludDRyYW5nZSwKICAgdmFsaWRf YXQgdGV4dHJhbmdlMiwKQEAgLTMwOSw2ICs0MzAsOSBAQCBDUkVBVEUgVEFCTEUgdGVtcG9yYWxf cm5nMyAoCiApOwogQUxURVIgVEFCTEUgdGVtcG9yYWxfcm5nMyBEUk9QIENPTlNUUkFJTlQgdGVt cG9yYWxfcm5nM191cTsKIERST1AgVEFCTEUgdGVtcG9yYWxfcm5nMzsKK0RST1AgVFlQRSBpbnQ0 X2RfcmFuZ2U7CitEUk9QIERPTUFJTiBpbnQ0cmFuZ2VfZCwgdGV4dHJhbmdlMl9kZCwgdGV4dHJh bmdlMl9kLAorICAgICAgICAgICAgdGV4dG11bHRpcmFuZ2UyX2QsIGludDRtdWx0aXJhbmdlX2Qs IGludDRfZDsKIERST1AgVFlQRSB0ZXh0cmFuZ2UyOwogLS0KIC0tIHRlc3QgQUxURVIgVEFCTEUg QUREIENPTlNUUkFJTlQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpdGhvdXRf b3ZlcmxhcHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aG91dF9vdmVybGFwcy5zcWwK aW5kZXggNGFhY2EyNDJiYmUuLjU1Yjg5YjA4NjIyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC93aXRob3V0X292ZXJsYXBzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC93 aXRob3V0X292ZXJsYXBzLnNxbApAQCAtMTAwLDcgKzEwMCwxMDUgQEAgQ1JFQVRFIFRBQkxFIHRl bXBvcmFsX3JuZzMgKAogKTsKIEFMVEVSIFRBQkxFIHRlbXBvcmFsX3JuZzMgRFJPUCBDT05TVFJB SU5UIHRlbXBvcmFsX3JuZzNfcGs7CiBEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzM7Ci1EUk9QIFRZ UEUgdGV4dHJhbmdlMjsKKworLS0KKy0tIHRlc3RzIGZvciByYW5nZSBvdmVyIGRvbWFpbiwgbXVs dGlyYW5nZSBvdmVyIGEgZG9tYWluLCBjdXN0b20gcmFuZ2UgdHlwZSBvdmVyCistLSBkb21haW4s IGN1c3RvbSBtdWx0aSByYW5nZSB0eXBlIG92ZXIgZG9tYWluLgorLS0KK0NSRUFURSBET01BSU4g aW50NF9kIGFzIGludGVnZXIgY2hlY2sgKHZhbHVlIDw+IDEwKTsKK0NSRUFURSBUWVBFIGludDRf ZF9yYW5nZSBhcyByYW5nZSAoc3VidHlwZSA9IGludDRfZCk7CitDUkVBVEUgRE9NQUlOIGludDRt dWx0aXJhbmdlX2QgYXMgaW50NG11bHRpcmFuZ2UgY2hlY2sgKHZhbHVlIDw+ICd7WzEwLDExKX0n KTsKK0NSRUFURSBET01BSU4gaW50NHJhbmdlX2QgQVMgaW50NHJhbmdlIENIRUNLIChWQUxVRSA8 PiAnWzEwLDExKScpOworQ1JFQVRFIERPTUFJTiB0ZXh0cmFuZ2UyX2QgQVMgdGV4dHJhbmdlMiBD SEVDSyAoVkFMVUUgPD4gJ1tjLGQpJyk7CitDUkVBVEUgRE9NQUlOIHRleHRyYW5nZTJfZGQgQVMg dGV4dHJhbmdlMl9kOworQ1JFQVRFIERPTUFJTiB0ZXh0bXVsdGlyYW5nZTJfZCBBUyB0ZXh0bXVs dGlyYW5nZTIgQ0hFQ0sgKFZBTFVFIDw+ICd7W2MsZCl9Jyk7CisKKy0tIEl0IGlzIGEgcmFuZ2Ug dHlwZSByYXRoZXIgdGhhbiBhIGRvbWFpbiB0eXBlOyBob3dldmVyLCB0aGUgcmFuZ2UgdHlwZeKA mXMKKy0tIHN1YnR5cGUgaXMgYSBkb21haW4gdHlwZS4KK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9y bmc0ICgKKyAgaWQgaW50NHJhbmdlX2QsCisgIHZhbGlkX2F0IGludDRfZF9yYW5nZSwKKyAgQ09O U1RSQUlOVCB0ZW1wb3JhbF9ybmc0X3BrIFBSSU1BUlkgS0VZKGlkLCB2YWxpZF9hdCBXSVRIT1VU IE9WRVJMQVBTKQorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMikn LCAnWzEwLDExKScpOyAtLWVycm9yCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAo J1sxMCwxMSknLCAnWzEsMiknKTsgLS1lcnJvcgorSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBW QUxVRVMgKCdbMSwxMSknLCAnWzksMTApJyk7IC0tZXJyb3IKK0lOU0VSVCBJTlRPIHRlbXBvcmFs X3JuZzQgVkFMVUVTICgnWzEsMiknLCAnWzEsMTMpJyksICgnWzEsMiknLCAnWzIsNSknKTsgLS1l cnJvcgorRFJPUCBUQUJMRSB0ZW1wb3JhbF9ybmc0OworCistLVRoZSBkb21haW4gaXMgYSByYW5n ZSB0eXBlLCBhbmQgaXRzIGJhc2UgdHlwZSBpcyBhIGJ1aWx0LWluIHJhbmdlIHR5cGUuCitDUkVB VEUgVEFCTEUgdGVtcG9yYWxfcm5nNCAoCisgIGlkIGludDRyYW5nZV9kLAorICB2YWxpZF9hdCBp bnQ0cmFuZ2VfZCwKKyAgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmc0X3BrIFVOSVFVRSAoaWQsIHZh bGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpCispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBW QUxVRVMgKCdbMSwyKScsICdbMTAsMTEpJyk7IC0tZXJyb3IKK0lOU0VSVCBJTlRPIHRlbXBvcmFs X3JuZzQgVkFMVUVTICgnWzEsMiknLCAnWzMsMTMpJyksICgnWzEsMiknLCAnWzIsMTMpJyk7IC0t ZXJyb3IKK0RST1AgVEFCTEUgdGVtcG9yYWxfcm5nNDsKKworLS1UaGUgZG9tYWluIGlzIGEgcmFu Z2UgdHlwZSwgYW5kIGl0cyBiYXNlIHR5cGUgaXMgYSB1c2VyLWRlZmluZWQgcmFuZ2UgdHlwZS4K K0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmc0ICgKKyAgaWQgaW50NHJhbmdlX2QsCisgIHZhbGlk X2F0IHRleHRyYW5nZTJfZGQsCisgIENPTlNUUkFJTlQgdGVtcG9yYWxfcm5nNF9wayBVTklRVUUg KGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJMQVBTKQorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFs X3JuZzQgVkFMVUVTICgnWzEsMiknLCBOVUxMKSwgKE5VTEwsICdbMSwyKScpOworSU5TRVJUIElO VE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwyKScsICdbYyxkKScpOyAtLWVycm9yCitJTlNF UlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ1thLGQpJyk7CitJTlNFUlQg SU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ1tiLGMpJyk7IC0tZXJyb3IKK0lO U0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEwLDExKScsIE5VTEwpOyAtLWVycm9y CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1syLDMpJywgJ1tCLEMpJyksICgn WzIsMyknLCAnW0EsQyknKTsgLS1lcnJvcgorCistLSBJdCBpcyBhIG11bHRpcmFuZ2UgdHlwZSBy YXRoZXIgdGhhbiBhIGRvbWFpbiB0eXBlOyBob3dldmVyLCB0aGUgbXVsdGlyYW5nZQorLS0gdHlw ZeKAmXMgc3VidHlwZSBpcyBhIGRvbWFpbiB0eXBlLgorQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX21s dHJuZzQgKAorICBpZCAgaW50NHJhbmdlX2QsCisgIHZhbGlkX2F0IGludDRfZF9tdWx0aXJhbmdl LAorICBDT05TVFJBSU5UIHRlbXBvcmFsX21sdHJuZzRfcGsgUFJJTUFSWSBLRVkgKGlkLCB2YWxp ZF9hdCBXSVRIT1VUIE9WRVJMQVBTKQorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZzQg VkFMVUVTICgnWzEsMiknLCAne1sxMCwxMSl9Jyk7IC0tZXJyb3IKK0lOU0VSVCBJTlRPIHRlbXBv cmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAne1szLDEzKX0nKSwgKCdbMSwyKScsICd7WzIs MTMpfScpOyAtLWVycm9yCitEUk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZzQ7CisKKy0tVGhlIGRv bWFpbiBpcyBhIG11bHRpcmFuZ2UgdHlwZSwgYW5kIGl0cyBiYXNlIHR5cGUgaXMgYSBidWlsdC1p biBtdWx0aXJhbmdlCistLXR5cGUuCitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5nNCAoCisg IGlkICBpbnQ0cmFuZ2VfZCwKKyAgdmFsaWRfYXQgaW50NG11bHRpcmFuZ2VfZCwKKyAgQ09OU1RS QUlOVCB0ZW1wb3JhbF9tbHRybmc0X3BrIFBSSU1BUlkgS0VZIChpZCwgdmFsaWRfYXQgV0lUSE9V VCBPVkVSTEFQUykKKyk7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmc0IFZBTFVFUyAoJ1sx LDIpJywgJ3tbMTAsMTEpfScpOyAtLWVycm9yCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmc0 IFZBTFVFUyAoJ1sxLDIpJywgJ3tbMywxMyl9JyksICgnWzEsMiknLCAne1syLDEzKX0nKTsgLS1l cnJvcgorRFJPUCBUQUJMRSB0ZW1wb3JhbF9tbHRybmc0OworCistLVRoZSBkb21haW4gaXMgYSBt dWx0aXJhbmdlIHR5cGUsIGFuZCBpdHMgYmFzZSB0eXBlIGlzIGEgdXNlci1kZWZpbmVkCistLW11 bHRpcmFuZ2UgdHlwZS4KK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9tbHRybmc0ICgKKyAgaWQgaW50 NHJhbmdlX2QsCisgIHZhbGlkX2F0IHRleHRtdWx0aXJhbmdlMl9kLAorICBDT05TVFJBSU5UIHRl bXBvcmFsX21sdHJuZzRfcGsgUFJJTUFSWSBLRVkgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJM QVBTKQorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAn e1tjLGQpfScpOyAtLWVycm9yCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmc0IFZBTFVFUyAo J1sxLDIpJywgJ3tbYSxnKX0nKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVT ICgnWzEsMiknLCAne1tiLGMpfScpOyAtLWVycm9yCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRy bmc0IFZBTFVFUyAoJ1syLDMpJywgJ3tbQixDKX0nKSwgKCdbMiwzKScsICd7W0EsQyl9Jyk7IC0t ZXJyb3IKKworLS0tLW5vdyB0ZXN0IGZvcmVpZ24ga2V5CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxf bWx0cm5nZmsgKAorICBwYXJlbnRfaWQgaW50NHJhbmdlX2QsCisgIGlkIGludDRyYW5nZSwKKyAg dmFsaWRfYXQgdGV4dG11bHRpcmFuZ2UyX2QpOworQUxURVIgVEFCTEUgdGVtcG9yYWxfbWx0cm5n ZmsKKyAgQUREIENPTlNUUkFJTlQgdGVtcG9yYWxfbWx0cm5nZmtfZmsKKyAgICBGT1JFSUdOIEtF WSAocGFyZW50X2lkLCBQRVJJT0QgdmFsaWRfYXQpCisgICAgUkVGRVJFTkNFUyB0ZW1wb3JhbF9t bHRybmc0OworCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmdmayBWQUxVRVMgKCdbMSwyKScs ICdbMiwzKScsICd7W2QsZSl9Jyk7CitVUERBVEUgdGVtcG9yYWxfbWx0cm5nNCBTRVQgdmFsaWRf YXQgPSAne1tjLGQpfSc7IC0tZXJyb3IKK1VQREFURSB0ZW1wb3JhbF9tbHRybmc0IFNFVCB2YWxp ZF9hdCA9ICd7W2EsaCl9JzsKK1VQREFURSB0ZW1wb3JhbF9tbHRybmc0IFNFVCB2YWxpZF9hdCA9 ICd7W2YsZyl9JzsgLS1lcnJvcgorCitEUk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZzQsIHRlbXBv cmFsX21sdHJuZ2ZrLCB0ZW1wb3JhbF9ybmc0OwogCiAtLSBQSyB3aXRoIG9uZSBjb2x1bW4gcGx1 cyBhIG11bHRpcmFuZ2U6CiBDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5nICgKQEAgLTE3MCw3 ICsyNjgsNiBAQCBTRUxFQ1QgcGdfZ2V0X2luZGV4ZGVmKGNvbmluZGlkLCAwLCB0cnVlKSBGUk9N IHBnX2NvbnN0cmFpbnQgV0hFUkUgY29ubmFtZSA9ICd0ZQogRFJPUCBUQUJMRSB0ZW1wb3JhbF9y bmczOwogCiAtLSBVTklRVUUgd2l0aCBhIGN1c3RvbSByYW5nZSB0eXBlOgotQ1JFQVRFIFRZUEUg dGV4dHJhbmdlMiBBUyByYW5nZSAoc3VidHlwZT10ZXh0LCBjb2xsYXRpb249IkMiKTsKIENSRUFU RSBUQUJMRSB0ZW1wb3JhbF9ybmczICgKICAgaWQgaW50NHJhbmdlLAogICB2YWxpZF9hdCB0ZXh0 cmFuZ2UyLApAQCAtMTc4LDYgKzI3NSw5IEBAIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmczICgK ICk7CiBBTFRFUiBUQUJMRSB0ZW1wb3JhbF9ybmczIERST1AgQ09OU1RSQUlOVCB0ZW1wb3JhbF9y bmczX3VxOwogRFJPUCBUQUJMRSB0ZW1wb3JhbF9ybmczOworRFJPUCBUWVBFIGludDRfZF9yYW5n ZTsKK0RST1AgRE9NQUlOIGludDRyYW5nZV9kLCB0ZXh0cmFuZ2UyX2RkLCB0ZXh0cmFuZ2UyX2Qs CisgICAgICAgICAgICB0ZXh0bXVsdGlyYW5nZTJfZCwgaW50NG11bHRpcmFuZ2VfZCwgaW50NF9k OwogRFJPUCBUWVBFIHRleHRyYW5nZTI7CiAKIC0tCi0tIAoyLjM0LjEKCg== --0000000000001a51a90647120c3e--