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 1s4vKQ-001xW7-Bb for pgsql-hackers@arkaria.postgresql.org; Thu, 09 May 2024 04:24:22 +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 1s4vKN-004g8X-L0 for pgsql-hackers@arkaria.postgresql.org; Thu, 09 May 2024 04:24:19 +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.94.2) (envelope-from ) id 1s4vKM-004g8P-Ug for pgsql-hackers@lists.postgresql.org; Thu, 09 May 2024 04:24:19 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1s4vKG-0007QE-QT for pgsql-hackers@lists.postgresql.org; Thu, 09 May 2024 04:24:18 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-1ecddf96313so3356165ad.2 for ; Wed, 08 May 2024 21:24:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20230601.gappssmtp.com; s=20230601; t=1715228651; x=1715833451; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=CwVTAGRPtWXU/TgoOayDgL9TmQeY8cC8lcXtRM2Db80=; b=o5aMWQtTV771+tPDy8CIR7249ZIcj+G3HBHYfQLlEFkCCtFwXI5rieE16x7tM9FOam gWnlqRyXLLudIF4yUTPRM5kp2YRULOkmflwLXAYb0Ub5hHA6i1LQaqwZM9MhFDSjdwSK bN+8JKnI5TqbXqBhCbRY2R8gadjShGMR/c5Y7+qqFdzfmSMqV00gUXImLpvDTeSMixLC jVvsCCR20zkChVEgNthQ/eLDo1vernnWBa0jkwr1cDG+ZehbFe23sFLH4WAdoqQqE+FY 0BVswtmqGdaxyTz3zIrg/yCVfuA3jZif0xhqGwIZmdoY0mHG+ugSaPyhAUgtVBG0MXYZ eo4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715228651; x=1715833451; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=CwVTAGRPtWXU/TgoOayDgL9TmQeY8cC8lcXtRM2Db80=; b=tHmiEuZKOnW4Ee0Dcg8kNC8TulUbEfphgIvgMO5tQk7g/8SfoUA4hh+JkYuzP/43zQ Nf39AB+Y2HSO22kaXWIEXYNc7P4POUmza/Uzxe7tY/F6U/VIpFMTR4byAmm8r+VxT5jl 0hPm94PhSOk7pArTZz+GwyuCZkLGFWNF5CbbQn26sQEObiOuZgmSUCc6PkpsxYuMDElN kn37FYXxod6beI53N3PyY/bk2O2+AjhUzJ+x9dRqS6KdX6SZkidiElcfFO0vI3RnVJFF /c5DbCDNC4ys2weSmOKR4scWIPCb9fFk4DKT9MAiIad7q0lCRBrTe3gQtNs4KDljDjWc 44vA== X-Forwarded-Encrypted: i=1; AJvYcCUPTomubGuNjkHPmv2KYaf+RTF4sEFHL92lyKjgDp/6Mo/qdk/MrXpBM9FNEdWONcgYn1XoBrvHFi0vyJLcYsZY0zWKcx39RZ3XtwZfnsofXTOR X-Gm-Message-State: AOJu0Yxf2Iz7oT6/kH/iKc5TBP/YmpawcjZ9rVZIo/1zB/Cgw2DlIsCr RE0vWB/tmLH0TPEeFGUvhzj86gyxIcJKu78m1plASIuglTKpm4UyS8tG/FDwWq0= X-Google-Smtp-Source: AGHT+IHn7LU+J4Szhj/ikI9IvzwWcc9k43k2VqwHkXL8Oig6oHg4ZwS25798aJSysGbadPkckJHWfQ== X-Received: by 2002:a17:903:230b:b0:1e3:e243:1995 with SMTP id d9443c01a7336-1eeb018380fmr65696725ad.1.1715228651241; Wed, 08 May 2024 21:24:11 -0700 (PDT) Received: from [192.168.2.139] ([50.39.255.79]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-1ef0c134c13sm3769315ad.238.2024.05.08.21.24.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 May 2024 21:24:10 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------JSeIbkkoa09sNr3mUtNaPYN2" Message-ID: <1426589a-83cb-4a89-bf40-713970c07e63@illuminatedcomputing.com> Date: Wed, 8 May 2024 21:24:09 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: SQL:2011 application time To: Peter Eisentraut , Robert Haas Cc: jian he , PostgreSQL Hackers References: <85dd3ad0-fa79-46e8-a08b-c426c76825f3@eisentraut.org> <49c07eac-18ec-4aff-929c-e81b87df1092@eisentraut.org> <1edb3b79-a4bc-43b1-80aa-2e090472fe32@eisentraut.org> <47550967-260b-4180-9791-b224859fe63e@illuminatedcomputing.com> <1b2ab118-82c1-4e79-a094-04dab382e2c4@illuminatedcomputing.com> <3775839b-3f0f-4c8a-ac03-a253222e6a4b@illuminatedcomputing.com> <731ef81e-d4c3-41c6-ba8f-f6131f4f6407@eisentraut.org> Content-Language: en-US From: Paul Jungwirth In-Reply-To: <731ef81e-d4c3-41c6-ba8f-f6131f4f6407@eisentraut.org> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------JSeIbkkoa09sNr3mUtNaPYN2 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Here are a couple new patches, rebased to e305f715, addressing Peter's feedback. I'm still working on integrating jian he's suggestions for the last patch, so I've omitted that one here. On 5/8/24 06:51, Peter Eisentraut wrote: > About v2-0001-Fix-ON-CONFLICT-DO-NOTHING-UPDATE-for-temporal-in.patch, I think the > ideas are right, but I wonder if we can fine-tune the new conditionals a bit. > > --- a/src/backend/executor/execIndexing.c > +++ b/src/backend/executor/execIndexing.c > @@ -210,7 +210,7 @@ ExecOpenIndices(ResultRelInfo *resultRelInfo, bool speculative) >                  * If the indexes are to be used for speculative insertion, add extra >                  * information required by unique index entries. >                  */ > -               if (speculative && ii->ii_Unique) > +               if (speculative && ii->ii_Unique && !ii->ii_HasWithoutOverlaps) >                         BuildSpeculativeIndexInfo(indexDesc, ii); > > Here, I think we could check !indexDesc->rd_index->indisexclusion instead.  So we > wouldn't need ii_HasWithoutOverlaps. Okay. > Or we could push this into BuildSpeculativeIndexInfo(); it could just skip the rest > if an exclusion constraint is passed, on the theory that all the speculative index > info is already present in that case. I like how BuildSpeculativeIndexInfo starts with an Assert that it's given a unique index, so I've left the check outside the function. This seems cleaner anyway: the function stays more focused. > --- a/src/backend/optimizer/util/plancat.c > +++ b/src/backend/optimizer/util/plancat.c > @@ -815,7 +815,7 @@ infer_arbiter_indexes(PlannerInfo *root) >          */ >         if (indexOidFromConstraint == idxForm->indexrelid) >         { > -           if (!idxForm->indisunique && onconflict->action == ONCONFLICT_UPDATE) > +           if ((!idxForm->indisunique || idxForm->indisexclusion) && onconflict->action == > ONCONFLICT_UPDATE) >                 ereport(ERROR, >                         (errcode(ERRCODE_WRONG_OBJECT_TYPE), >                          errmsg("ON CONFLICT DO UPDATE not supported with exclusion constraints"))); > > Shouldn't this use only idxForm->indisexclusion anyway?  Like > > +           if (idxForm->indisexclusion && onconflict->action == ONCONFLICT_UPDATE) > > That matches what the error message is reporting afterwards. Agreed. >          * constraints), so index under consideration can be immediately >          * skipped if it's not unique >          */ > -       if (!idxForm->indisunique) > +       if (!idxForm->indisunique || idxForm->indisexclusion) >             goto next; > > Maybe here we need a comment.  Or make that a separate statement, like Yes, that is nice. Done. Yours, -- Paul ~{:-) pj@illuminatedcomputing.com --------------JSeIbkkoa09sNr3mUtNaPYN2 Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Fix-ON-CONFLICT-DO-NOTHING-UPDATE-for-temporal-in.patch" Content-Disposition: attachment; filename*0="v2-0001-Fix-ON-CONFLICT-DO-NOTHING-UPDATE-for-temporal-in.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwZWJlMmU2ZDZjZDhkYzZmODEyMGZlOTNiOTAyNGNmODA0NzJmOGNjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWlu YXRlZGNvbXB1dGluZy5jb20+CkRhdGU6IFN1biwgMjQgTWFyIDIwMjQgMjE6NDY6MzAgLTA3 MDAKU3ViamVjdDogW1BBVENIIHYyIDEvMl0gRml4IE9OIENPTkZMSUNUIERPIE5PVEhJTkcv VVBEQVRFIGZvciB0ZW1wb3JhbCBpbmRleGVzCgpBIFBSSU1BUlkgS0VZIG9yIFVOSVFVRSBj b25zdHJhaW50IHdpdGggV0lUSE9VVCBPVkVSTEFQUyB3aWxsIGJlIGEgR2lTVAppbmRleCwg bm90IGEgQi1UcmVlLCBidXQgaXQgd2lsbCBzdGlsbCBoYXZlIGluZGlzdW5pcXVlIHNldC4g VGhlIGNvZGUKZm9yIE9OIENPTkZMSUNUIGZhaWxzIGlmIGl0IHNlZXMgYSBub24tYnRyZWUg aW5kZXggdGhhdCBoYXMgaW5kaXN1bmlxdWUuClRoaXMgY29tbWl0IGZpeGVzIHRoYXQgYW5k IGFkZHMgc29tZSB0ZXN0cy4gQnV0IG5vdyB0aGF0IHdlIGNhbid0IGp1c3QKdGVzdCBpbmRp c3VuaXF1ZSwgd2UgYWxzbyBuZWVkIHNvbWUgZXh0cmEgY2hlY2tzIHRvIHByZXZlbnQgRE8g VVBEQVRFCmZyb20gcnVubmluZyBhZ2FpbnN0IGEgV0lUSE9VVCBPVkVSTEFQUyBjb25zdHJh aW50IChiZWNhdXNlIHRoZSBjb25mbGljdApjb3VsZCBoYXBwZW4gYWdhaW5zdCBtb3JlIHRo YW4gb25lIHJvdywgYW5kIHdlJ2Qgb25seSB1cGRhdGUgb25lKS4KLS0tCiBzcmMvYmFja2Vu ZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgICAgfCAgIDkgKy0KIHNyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMSArCiAuLi4v cmVncmVzcy9leHBlY3RlZC93aXRob3V0X292ZXJsYXBzLm91dCAgICAgfCAxNzYgKysrKysr KysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC93aXRob3V0X292ZXJsYXBzLnNx bCAgICAgfCAxMTMgKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMzAwIGluc2VydGlv bnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDVhODU2OGM1 NWM5Li4xZmQ1NDNjYzU1MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRl eC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtMjQ0Myw2ICsyNDQz LDcgQEAgQnVpbGRJbmRleEluZm8oUmVsYXRpb24gaW5kZXgpCiAJCQkJCQkJCSAmaWktPmlp X0V4Y2x1c2lvbk9wcywKIAkJCQkJCQkJICZpaS0+aWlfRXhjbHVzaW9uUHJvY3MsCiAJCQkJ CQkJCSAmaWktPmlpX0V4Y2x1c2lvblN0cmF0cyk7CisJCWlpLT5paV9IYXNXaXRob3V0T3Zl cmxhcHMgPSBpaS0+aWlfVW5pcXVlOwogCX0KIAogCXJldHVybiBpaTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggOWYwNWIzNjU0YzEuLjU5YWNmNjdhMzZhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtMjEwLDcgKzIxMCw3IEBA IEV4ZWNPcGVuSW5kaWNlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBib29sIHNw ZWN1bGF0aXZlKQogCQkgKiBJZiB0aGUgaW5kZXhlcyBhcmUgdG8gYmUgdXNlZCBmb3Igc3Bl Y3VsYXRpdmUgaW5zZXJ0aW9uLCBhZGQgZXh0cmEKIAkJICogaW5mb3JtYXRpb24gcmVxdWly ZWQgYnkgdW5pcXVlIGluZGV4IGVudHJpZXMuCiAJCSAqLwotCQlpZiAoc3BlY3VsYXRpdmUg JiYgaWktPmlpX1VuaXF1ZSkKKwkJaWYgKHNwZWN1bGF0aXZlICYmIGlpLT5paV9VbmlxdWUg JiYgIWluZGV4RGVzYy0+cmRfaW5kZXgtPmluZGlzZXhjbHVzaW9uKQogCQkJQnVpbGRTcGVj dWxhdGl2ZUluZGV4SW5mbyhpbmRleERlc2MsIGlpKTsKIAogCQlyZWxhdGlvbkRlc2NzW2ld ID0gaW5kZXhEZXNjOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4 IDEzMGY4Mzg2MjlmLi43NzVjM2UyNmNkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BsYW5jYXQuYwpAQCAtODE1LDcgKzgxNSw3IEBAIGluZmVyX2FyYml0ZXJfaW5kZXhlcyhQ bGFubmVySW5mbyAqcm9vdCkKIAkJICovCiAJCWlmIChpbmRleE9pZEZyb21Db25zdHJhaW50 ID09IGlkeEZvcm0tPmluZGV4cmVsaWQpCiAJCXsKLQkJCWlmICghaWR4Rm9ybS0+aW5kaXN1 bmlxdWUgJiYgb25jb25mbGljdC0+YWN0aW9uID09IE9OQ09ORkxJQ1RfVVBEQVRFKQorCQkJ aWYgKGlkeEZvcm0tPmluZGlzZXhjbHVzaW9uICYmIG9uY29uZmxpY3QtPmFjdGlvbiA9PSBP TkNPTkZMSUNUX1VQREFURSkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiAJCQkJCQkgZXJybXNnKCJPTiBDT05GTElD VCBETyBVUERBVEUgbm90IHN1cHBvcnRlZCB3aXRoIGV4Y2x1c2lvbiBjb25zdHJhaW50cyIp KSk7CkBAIC04NDAsNiArODQwLDEzIEBAIGluZmVyX2FyYml0ZXJfaW5kZXhlcyhQbGFubmVy SW5mbyAqcm9vdCkKIAkJaWYgKCFpZHhGb3JtLT5pbmRpc3VuaXF1ZSkKIAkJCWdvdG8gbmV4 dDsKIAorCQkvKgorCQkgKiBTby1jYWxsZWQgdW5pcXVlIGNvbnN0cmFpbnRzIHdpdGggV0lU SE9VVCBPVkVSTEFQUyBhcmUgcmVhbGx5CisJCSAqIGV4Y2x1c2lvbiBjb25zdHJhaW50cywg c28gc2tpcCB0aG9zZSB0b28uCisJCSAqLworCQlpZiAoaWR4Rm9ybS0+aW5kaXNleGNsdXNp b24pCisJCQlnb3RvIG5leHQ7CisKIAkJLyogQnVpbGQgQk1TIHJlcHJlc2VudGF0aW9uIG9m IHBsYWluIChub24gZXhwcmVzc2lvbikgaW5kZXggYXR0cnMgKi8KIAkJaW5kZXhlZEF0dHJz ID0gTlVMTDsKIAkJZm9yIChuYXR0ID0gMDsgbmF0dCA8IGlkeEZvcm0tPmluZG5rZXlhdHRz OyBuYXR0KyspCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDhiYzQyMWU3YzA1Li40ZmI3 ZTNiMjg0YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTIwNCw2ICsyMDQsNyBAQCB0 eXBlZGVmIHN0cnVjdCBJbmRleEluZm8KIAlib29sCQlpaV9TdW1tYXJpemluZzsKIAlpbnQJ CQlpaV9QYXJhbGxlbFdvcmtlcnM7CiAJT2lkCQkJaWlfQW07CisJYm9vbAkJaWlfSGFzV2l0 aG91dE92ZXJsYXBzOwogCXZvaWQJICAgKmlpX0FtQ2FjaGU7CiAJTWVtb3J5Q29udGV4dCBp aV9Db250ZXh0OwogfSBJbmRleEluZm87CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3dpdGhvdXRfb3ZlcmxhcHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC93aXRob3V0X292ZXJsYXBzLm91dAppbmRleCBhYmMyMmQwMTEzZi4uZTJmMmExY2Jl MjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0aG91dF9vdmVy bGFwcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aXRob3V0X292ZXJs YXBzLm91dApAQCAtNDUzLDYgKzQ1MywxODIgQEAgRFJPUCBUQUJMRSB0ZW1wb3JhbF9wYXJ0 aXRpb25lZDsKIEFMVEVSIFRBQkxFIHRlbXBvcmFsX3JuZyBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHRlbXBvcmFsX3JuZ19wazsKIEVSUk9SOiAgY2Fubm90IHVzZSBub24tdW5p cXVlIGluZGV4ICJ0ZW1wb3JhbF9ybmdfcGsiIGFzIHJlcGxpY2EgaWRlbnRpdHkKIC0tCist LSBPTiBDT05GTElDVAorLS0KK1RSVU5DQVRFIHRlbXBvcmFsX3JuZzsKK0lOU0VSVCBJTlRP IHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5n ZSgnMjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJykpOworLS0gd2l0aCBhIGNvbmZsaWN0CitJ TlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMikn LCBkYXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCBE TyBOT1RISU5HOworLS0gaWQgbWF0Y2hlcyBidXQgbm8gY29uZmxpY3QKK0lOU0VSVCBJTlRP IHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5n ZSgnMjAxMC0wMS0wMScsICcyMDIwLTAxLTAxJykpIE9OIENPTkZMSUNUIERPIE5PVEhJTkc7 CistLSBkYXRlIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3Jh bF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzIsMyknLCBkYXRlcmFuZ2UoJzIwMDUt MDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCBETyBOT1RISU5HOworU0VMRUNU ICogRlJPTSB0ZW1wb3JhbF9ybmcgT1JERVIgQlkgaWQsIHZhbGlkX2F0OworICBpZCAgIHwg ICAgICAgIHZhbGlkX2F0ICAgICAgICAgCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBbMSwyKSB8IFsyMDAwLTAxLTAxLDIwMTAtMDEtMDEpCisgWzEsMikgfCBbMjAx MC0wMS0wMSwyMDIwLTAxLTAxKQorIFsyLDMpIHwgWzIwMDUtMDEtMDEsMjAwNi0wMS0wMSkK KygzIHJvd3MpCisKK1RSVU5DQVRFIHRlbXBvcmFsX3JuZzsKK0lOU0VSVCBJTlRPIHRlbXBv cmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5nZSgnMjAw MC0wMS0wMScsICcyMDEwLTAxLTAxJykpOworLS0gd2l0aCBhIGNvbmZsaWN0CitJTlNFUlQg SU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRl cmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCAoaWQsIHZh bGlkX2F0KSBETyBOT1RISU5HOworRVJST1I6ICB0aGVyZSBpcyBubyB1bmlxdWUgb3IgZXhj bHVzaW9uIGNvbnN0cmFpbnQgbWF0Y2hpbmcgdGhlIE9OIENPTkZMSUNUIHNwZWNpZmljYXRp b24KKy0tIGlkIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3Jh bF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMTAt MDEtMDEnLCAnMjAyMC0wMS0wMScpKSBPTiBDT05GTElDVCAoaWQsIHZhbGlkX2F0KSBETyBO T1RISU5HOworRVJST1I6ICB0aGVyZSBpcyBubyB1bmlxdWUgb3IgZXhjbHVzaW9uIGNvbnN0 cmFpbnQgbWF0Y2hpbmcgdGhlIE9OIENPTkZMSUNUIHNwZWNpZmljYXRpb24KKy0tIGRhdGUg bWF0Y2hlcyBidXQgbm8gY29uZmxpY3QKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZyAoaWQs IHZhbGlkX2F0KSBWQUxVRVMgKCdbMiwzKScsIGRhdGVyYW5nZSgnMjAwNS0wMS0wMScsICcy MDA2LTAxLTAxJykpIE9OIENPTkZMSUNUIChpZCwgdmFsaWRfYXQpIERPIE5PVEhJTkc7CitF UlJPUjogIHRoZXJlIGlzIG5vIHVuaXF1ZSBvciBleGNsdXNpb24gY29uc3RyYWludCBtYXRj aGluZyB0aGUgT04gQ09ORkxJQ1Qgc3BlY2lmaWNhdGlvbgorU0VMRUNUICogRlJPTSB0ZW1w b3JhbF9ybmcgT1JERVIgQlkgaWQsIHZhbGlkX2F0OworICBpZCAgIHwgICAgICAgIHZhbGlk X2F0ICAgICAgICAgCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBbMSwy KSB8IFsyMDAwLTAxLTAxLDIwMTAtMDEtMDEpCisoMSByb3cpCisKK1RSVU5DQVRFIHRlbXBv cmFsX3JuZzsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxV RVMgKCdbMSwyKScsIGRhdGVyYW5nZSgnMjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJykpOwor LS0gd2l0aCBhIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxp ZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0w MS0wMScpKSBPTiBDT05GTElDVCBPTiBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZ19wayBETyBO T1RISU5HOworLS0gaWQgbWF0Y2hlcyBidXQgbm8gY29uZmxpY3QKK0lOU0VSVCBJTlRPIHRl bXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5nZSgn MjAxMC0wMS0wMScsICcyMDIwLTAxLTAxJykpIE9OIENPTkZMSUNUIE9OIENPTlNUUkFJTlQg dGVtcG9yYWxfcm5nX3BrIERPIE5PVEhJTkc7CistLSBkYXRlIG1hdGNoZXMgYnV0IG5vIGNv bmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVT ICgnWzIsMyknLCBkYXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBD T05GTElDVCBPTiBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZ19wayBETyBOT1RISU5HOworU0VM RUNUICogRlJPTSB0ZW1wb3JhbF9ybmcgT1JERVIgQlkgaWQsIHZhbGlkX2F0OworICBpZCAg IHwgICAgICAgIHZhbGlkX2F0ICAgICAgICAgCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBbMSwyKSB8IFsyMDAwLTAxLTAxLDIwMTAtMDEtMDEpCisgWzEsMikgfCBb MjAxMC0wMS0wMSwyMDIwLTAxLTAxKQorIFsyLDMpIHwgWzIwMDUtMDEtMDEsMjAwNi0wMS0w MSkKKygzIHJvd3MpCisKK1RSVU5DQVRFIHRlbXBvcmFsX3JuZzsKK0lOU0VSVCBJTlRPIHRl bXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5nZSgn MjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJykpOworLS0gd2l0aCBhIGNvbmZsaWN0CitJTlNF UlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBk YXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCAoaWQs IHZhbGlkX2F0KSBETyBVUERBVEUgU0VUIGlkID0gRVhDTFVERUQuaWQgKyAnWzIsMyknOwor RVJST1I6ICB0aGVyZSBpcyBubyB1bmlxdWUgb3IgZXhjbHVzaW9uIGNvbnN0cmFpbnQgbWF0 Y2hpbmcgdGhlIE9OIENPTkZMSUNUIHNwZWNpZmljYXRpb24KKy0tIGlkIG1hdGNoZXMgYnV0 IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkg VkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMTAtMDEtMDEnLCAnMjAyMC0wMS0wMScp KSBPTiBDT05GTElDVCAoaWQsIHZhbGlkX2F0KSBETyBVUERBVEUgU0VUIGlkID0gRVhDTFVE RUQuaWQgKyAnWzMsNCknOworRVJST1I6ICB0aGVyZSBpcyBubyB1bmlxdWUgb3IgZXhjbHVz aW9uIGNvbnN0cmFpbnQgbWF0Y2hpbmcgdGhlIE9OIENPTkZMSUNUIHNwZWNpZmljYXRpb24K Ky0tIGRhdGUgbWF0Y2hlcyBidXQgbm8gY29uZmxpY3QKK0lOU0VSVCBJTlRPIHRlbXBvcmFs X3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMiwzKScsIGRhdGVyYW5nZSgnMjAwNS0w MS0wMScsICcyMDA2LTAxLTAxJykpIE9OIENPTkZMSUNUIChpZCwgdmFsaWRfYXQpIERPIFVQ REFURSBTRVQgaWQgPSBFWENMVURFRC5pZCArICdbNCw1KSc7CitFUlJPUjogIHRoZXJlIGlz IG5vIHVuaXF1ZSBvciBleGNsdXNpb24gY29uc3RyYWludCBtYXRjaGluZyB0aGUgT04gQ09O RkxJQ1Qgc3BlY2lmaWNhdGlvbgorU0VMRUNUICogRlJPTSB0ZW1wb3JhbF9ybmcgT1JERVIg QlkgaWQsIHZhbGlkX2F0OworICBpZCAgIHwgICAgICAgIHZhbGlkX2F0ICAgICAgICAgCist LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBbMSwyKSB8IFsyMDAwLTAxLTAx LDIwMTAtMDEtMDEpCisoMSByb3cpCisKK1RSVU5DQVRFIHRlbXBvcmFsX3JuZzsKK0lOU0VS VCBJTlRPIHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRh dGVyYW5nZSgnMjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJykpOworLS0gd2l0aCBhIGNvbmZs aWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgn WzEsMiknLCBkYXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05G TElDVCBPTiBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZ19wayBETyBVUERBVEUgU0VUIGlkID0g RVhDTFVERUQuaWQgKyAnWzIsMyknOworRVJST1I6ICBPTiBDT05GTElDVCBETyBVUERBVEUg bm90IHN1cHBvcnRlZCB3aXRoIGV4Y2x1c2lvbiBjb25zdHJhaW50cworLS0gaWQgbWF0Y2hl cyBidXQgbm8gY29uZmxpY3QKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlk X2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5nZSgnMjAxMC0wMS0wMScsICcyMDIwLTAx LTAxJykpIE9OIENPTkZMSUNUIE9OIENPTlNUUkFJTlQgdGVtcG9yYWxfcm5nX3BrIERPIFVQ REFURSBTRVQgaWQgPSBFWENMVURFRC5pZCArICdbMyw0KSc7CitFUlJPUjogIE9OIENPTkZM SUNUIERPIFVQREFURSBub3Qgc3VwcG9ydGVkIHdpdGggZXhjbHVzaW9uIGNvbnN0cmFpbnRz CistLSBkYXRlIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3Jh bF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzIsMyknLCBkYXRlcmFuZ2UoJzIwMDUt MDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCBPTiBDT05TVFJBSU5UIHRlbXBv cmFsX3JuZ19wayBETyBVUERBVEUgU0VUIGlkID0gRVhDTFVERUQuaWQgKyAnWzQsNSknOwor RVJST1I6ICBPTiBDT05GTElDVCBETyBVUERBVEUgbm90IHN1cHBvcnRlZCB3aXRoIGV4Y2x1 c2lvbiBjb25zdHJhaW50cworU0VMRUNUICogRlJPTSB0ZW1wb3JhbF9ybmcgT1JERVIgQlkg aWQsIHZhbGlkX2F0OworICBpZCAgIHwgICAgICAgIHZhbGlkX2F0ICAgICAgICAgCistLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBbMSwyKSB8IFsyMDAwLTAxLTAxLDIw MTAtMDEtMDEpCisoMSByb3cpCisKKy0tIHdpdGggYSBVTklRVUUgY29uc3RyYWludDoKK0NS RUFURSBUQUJMRSB0ZW1wb3JhbDMgKAorCWlkIGludDRyYW5nZSwKKwl2YWxpZF9hdCBkYXRl cmFuZ2UsCisJQ09OU1RSQUlOVCB0ZW1wb3JhbDNfdXEgVU5JUVVFIChpZCwgdmFsaWRfYXQg V0lUSE9VVCBPVkVSTEFQUykKKyk7CitUUlVOQ0FURSB0ZW1wb3JhbDM7CitJTlNFUlQgSU5U TyB0ZW1wb3JhbDMgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2Uo JzIwMDAtMDEtMDEnLCAnMjAxMC0wMS0wMScpKTsKKy0tIHdpdGggYSBjb25mbGljdAorSU5T RVJUIElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0 ZXJhbmdlKCcyMDA1LTAxLTAxJywgJzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgRE8gTk9U SElORzsKKy0tIGlkIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1w b3JhbDMgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMTAt MDEtMDEnLCAnMjAyMC0wMS0wMScpKSBPTiBDT05GTElDVCBETyBOT1RISU5HOworLS0gZGF0 ZSBtYXRjaGVzIGJ1dCBubyBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWwzIChpZCwg dmFsaWRfYXQpIFZBTFVFUyAoJ1syLDMpJywgZGF0ZXJhbmdlKCcyMDA1LTAxLTAxJywgJzIw MDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgRE8gTk9USElORzsKK1NFTEVDVCAqIEZST00gdGVt cG9yYWwzIE9SREVSIEJZIGlkLCB2YWxpZF9hdDsKKyAgaWQgICB8ICAgICAgICB2YWxpZF9h dCAgICAgICAgIAorLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWzEsMikg fCBbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKQorIFsxLDIpIHwgWzIwMTAtMDEtMDEsMjAyMC0w MS0wMSkKKyBbMiwzKSB8IFsyMDA1LTAxLTAxLDIwMDYtMDEtMDEpCisoMyByb3dzKQorCitU UlVOQ0FURSB0ZW1wb3JhbDM7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2YWxpZF9h dCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDAtMDEtMDEnLCAnMjAxMC0wMS0w MScpKTsKKy0tIHdpdGggYSBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWwzIChpZCwg dmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDA1LTAxLTAxJywgJzIw MDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgKGlkLCB2YWxpZF9hdCkgRE8gTk9USElORzsKK0VS Uk9SOiAgdGhlcmUgaXMgbm8gdW5pcXVlIG9yIGV4Y2x1c2lvbiBjb25zdHJhaW50IG1hdGNo aW5nIHRoZSBPTiBDT05GTElDVCBzcGVjaWZpY2F0aW9uCistLSBpZCBtYXRjaGVzIGJ1dCBu byBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVF UyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDEwLTAxLTAxJywgJzIwMjAtMDEtMDEnKSkgT04g Q09ORkxJQ1QgKGlkLCB2YWxpZF9hdCkgRE8gTk9USElORzsKK0VSUk9SOiAgdGhlcmUgaXMg bm8gdW5pcXVlIG9yIGV4Y2x1c2lvbiBjb25zdHJhaW50IG1hdGNoaW5nIHRoZSBPTiBDT05G TElDVCBzcGVjaWZpY2F0aW9uCistLSBkYXRlIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJ TlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzIsMyknLCBk YXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCAoaWQs IHZhbGlkX2F0KSBETyBOT1RISU5HOworRVJST1I6ICB0aGVyZSBpcyBubyB1bmlxdWUgb3Ig ZXhjbHVzaW9uIGNvbnN0cmFpbnQgbWF0Y2hpbmcgdGhlIE9OIENPTkZMSUNUIHNwZWNpZmlj YXRpb24KK1NFTEVDVCAqIEZST00gdGVtcG9yYWwzIE9SREVSIEJZIGlkLCB2YWxpZF9hdDsK KyAgaWQgICB8ICAgICAgICB2YWxpZF9hdCAgICAgICAgIAorLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgWzEsMikgfCBbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKQorKDEg cm93KQorCitUUlVOQ0FURSB0ZW1wb3JhbDM7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlk LCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDAtMDEtMDEnLCAn MjAxMC0wMS0wMScpKTsKKy0tIHdpdGggYSBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9y YWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDA1LTAx LTAxJywgJzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgT04gQ09OU1RSQUlOVCB0ZW1wb3Jh bDNfdXEgRE8gTk9USElORzsKKy0tIGlkIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNF UlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRl cmFuZ2UoJzIwMTAtMDEtMDEnLCAnMjAyMC0wMS0wMScpKSBPTiBDT05GTElDVCBPTiBDT05T VFJBSU5UIHRlbXBvcmFsM191cSBETyBOT1RISU5HOworLS0gZGF0ZSBtYXRjaGVzIGJ1dCBu byBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVF UyAoJ1syLDMpJywgZGF0ZXJhbmdlKCcyMDA1LTAxLTAxJywgJzIwMDYtMDEtMDEnKSkgT04g Q09ORkxJQ1QgT04gQ09OU1RSQUlOVCB0ZW1wb3JhbDNfdXEgRE8gTk9USElORzsKK1NFTEVD VCAqIEZST00gdGVtcG9yYWwzIE9SREVSIEJZIGlkLCB2YWxpZF9hdDsKKyAgaWQgICB8ICAg ICAgICB2YWxpZF9hdCAgICAgICAgIAorLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgWzEsMikgfCBbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKQorIFsxLDIpIHwgWzIwMTAt MDEtMDEsMjAyMC0wMS0wMSkKKyBbMiwzKSB8IFsyMDA1LTAxLTAxLDIwMDYtMDEtMDEpCiso MyByb3dzKQorCitUUlVOQ0FURSB0ZW1wb3JhbDM7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMg KGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDAtMDEtMDEn LCAnMjAxMC0wMS0wMScpKTsKKy0tIHdpdGggYSBjb25mbGljdAorSU5TRVJUIElOVE8gdGVt cG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDA1 LTAxLTAxJywgJzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgKGlkLCB2YWxpZF9hdCkgRE8g VVBEQVRFIFNFVCBpZCA9IEVYQ0xVREVELmlkICsgJ1syLDMpJzsKK0VSUk9SOiAgdGhlcmUg aXMgbm8gdW5pcXVlIG9yIGV4Y2x1c2lvbiBjb25zdHJhaW50IG1hdGNoaW5nIHRoZSBPTiBD T05GTElDVCBzcGVjaWZpY2F0aW9uCistLSBpZCBtYXRjaGVzIGJ1dCBubyBjb25mbGljdAor SU5TRVJUIElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywg ZGF0ZXJhbmdlKCcyMDEwLTAxLTAxJywgJzIwMjAtMDEtMDEnKSkgT04gQ09ORkxJQ1QgKGlk LCB2YWxpZF9hdCkgRE8gVVBEQVRFIFNFVCBpZCA9IEVYQ0xVREVELmlkICsgJ1szLDQpJzsK K0VSUk9SOiAgdGhlcmUgaXMgbm8gdW5pcXVlIG9yIGV4Y2x1c2lvbiBjb25zdHJhaW50IG1h dGNoaW5nIHRoZSBPTiBDT05GTElDVCBzcGVjaWZpY2F0aW9uCistLSBkYXRlIG1hdGNoZXMg YnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2YWxpZF9hdCkg VkFMVUVTICgnWzIsMyknLCBkYXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScp KSBPTiBDT05GTElDVCAoaWQsIHZhbGlkX2F0KSBETyBVUERBVEUgU0VUIGlkID0gRVhDTFVE RUQuaWQgKyAnWzQsNSknOworRVJST1I6ICB0aGVyZSBpcyBubyB1bmlxdWUgb3IgZXhjbHVz aW9uIGNvbnN0cmFpbnQgbWF0Y2hpbmcgdGhlIE9OIENPTkZMSUNUIHNwZWNpZmljYXRpb24K K1NFTEVDVCAqIEZST00gdGVtcG9yYWwzIE9SREVSIEJZIGlkLCB2YWxpZF9hdDsKKyAgaWQg ICB8ICAgICAgICB2YWxpZF9hdCAgICAgICAgIAorLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgWzEsMikgfCBbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKQorKDEgcm93KQor CitUUlVOQ0FURSB0ZW1wb3JhbDM7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2YWxp ZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDAtMDEtMDEnLCAnMjAxMC0w MS0wMScpKTsKKy0tIHdpdGggYSBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWwzIChp ZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDA1LTAxLTAxJywg JzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgT04gQ09OU1RSQUlOVCB0ZW1wb3JhbDNfdXEg RE8gVVBEQVRFIFNFVCBpZCA9IEVYQ0xVREVELmlkICsgJ1syLDMpJzsKK0VSUk9SOiAgT04g Q09ORkxJQ1QgRE8gVVBEQVRFIG5vdCBzdXBwb3J0ZWQgd2l0aCBleGNsdXNpb24gY29uc3Ry YWludHMKKy0tIGlkIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1w b3JhbDMgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMTAt MDEtMDEnLCAnMjAyMC0wMS0wMScpKSBPTiBDT05GTElDVCBPTiBDT05TVFJBSU5UIHRlbXBv cmFsM191cSBETyBVUERBVEUgU0VUIGlkID0gRVhDTFVERUQuaWQgKyAnWzMsNCknOworRVJS T1I6ICBPTiBDT05GTElDVCBETyBVUERBVEUgbm90IHN1cHBvcnRlZCB3aXRoIGV4Y2x1c2lv biBjb25zdHJhaW50cworLS0gZGF0ZSBtYXRjaGVzIGJ1dCBubyBjb25mbGljdAorSU5TRVJU IElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1syLDMpJywgZGF0ZXJh bmdlKCcyMDA1LTAxLTAxJywgJzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgT04gQ09OU1RS QUlOVCB0ZW1wb3JhbDNfdXEgRE8gVVBEQVRFIFNFVCBpZCA9IEVYQ0xVREVELmlkICsgJ1s0 LDUpJzsKK0VSUk9SOiAgT04gQ09ORkxJQ1QgRE8gVVBEQVRFIG5vdCBzdXBwb3J0ZWQgd2l0 aCBleGNsdXNpb24gY29uc3RyYWludHMKK1NFTEVDVCAqIEZST00gdGVtcG9yYWwzIE9SREVS IEJZIGlkLCB2YWxpZF9hdDsKKyAgaWQgICB8ICAgICAgICB2YWxpZF9hdCAgICAgICAgIAor LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWzEsMikgfCBbMjAwMC0wMS0w MSwyMDEwLTAxLTAxKQorKDEgcm93KQorCitEUk9QIFRBQkxFIHRlbXBvcmFsMzsKKy0tCiAt LSB0ZXN0IEZLIGRlcGVuZGVuY2llcwogLS0KIC0tIGNhbid0IGRyb3AgYSByYW5nZSByZWZl cmVuY2VkIGJ5IGFuIEZLLCB1bmxlc3Mgd2l0aCBDQVNDQURFCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC93aXRob3V0X292ZXJsYXBzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3dpdGhvdXRfb3ZlcmxhcHMuc3FsCmluZGV4IGQ0YWUwM2FlNTI5Li41ZDQxYTZi ZDYyOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aG91dF9vdmVybGFw cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aG91dF9vdmVybGFwcy5zcWwK QEAgLTMxOSw2ICszMTksMTE5IEBAIERST1AgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWQ7 CiAtLSAoc2hvdWxkIGZhaWwpCiBBTFRFUiBUQUJMRSB0ZW1wb3JhbF9ybmcgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCB0ZW1wb3JhbF9ybmdfcGs7CiAKKy0tCistLSBPTiBDT05G TElDVAorLS0KKworVFJVTkNBVEUgdGVtcG9yYWxfcm5nOworSU5TRVJUIElOVE8gdGVtcG9y YWxfcm5nIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDAw LTAxLTAxJywgJzIwMTAtMDEtMDEnKSk7CistLSB3aXRoIGEgY29uZmxpY3QKK0lOU0VSVCBJ TlRPIHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVy YW5nZSgnMjAwNS0wMS0wMScsICcyMDA2LTAxLTAxJykpIE9OIENPTkZMSUNUIERPIE5PVEhJ Tkc7CistLSBpZCBtYXRjaGVzIGJ1dCBubyBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9y YWxfcm5nIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDEw LTAxLTAxJywgJzIwMjAtMDEtMDEnKSkgT04gQ09ORkxJQ1QgRE8gTk9USElORzsKKy0tIGRh dGUgbWF0Y2hlcyBidXQgbm8gY29uZmxpY3QKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZyAo aWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMiwzKScsIGRhdGVyYW5nZSgnMjAwNS0wMS0wMScs ICcyMDA2LTAxLTAxJykpIE9OIENPTkZMSUNUIERPIE5PVEhJTkc7CitTRUxFQ1QgKiBGUk9N IHRlbXBvcmFsX3JuZyBPUkRFUiBCWSBpZCwgdmFsaWRfYXQ7CisKK1RSVU5DQVRFIHRlbXBv cmFsX3JuZzsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxV RVMgKCdbMSwyKScsIGRhdGVyYW5nZSgnMjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJykpOwor LS0gd2l0aCBhIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxp ZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0w MS0wMScpKSBPTiBDT05GTElDVCAoaWQsIHZhbGlkX2F0KSBETyBOT1RISU5HOworLS0gaWQg bWF0Y2hlcyBidXQgbm8gY29uZmxpY3QKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZyAoaWQs IHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5nZSgnMjAxMC0wMS0wMScsICcy MDIwLTAxLTAxJykpIE9OIENPTkZMSUNUIChpZCwgdmFsaWRfYXQpIERPIE5PVEhJTkc7Cist LSBkYXRlIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9y bmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzIsMyknLCBkYXRlcmFuZ2UoJzIwMDUtMDEt MDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCAoaWQsIHZhbGlkX2F0KSBETyBOT1RI SU5HOworU0VMRUNUICogRlJPTSB0ZW1wb3JhbF9ybmcgT1JERVIgQlkgaWQsIHZhbGlkX2F0 OworCitUUlVOQ0FURSB0ZW1wb3JhbF9ybmc7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmcg KGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDAtMDEtMDEn LCAnMjAxMC0wMS0wMScpKTsKKy0tIHdpdGggYSBjb25mbGljdAorSU5TRVJUIElOVE8gdGVt cG9yYWxfcm5nIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcy MDA1LTAxLTAxJywgJzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgT04gQ09OU1RSQUlOVCB0 ZW1wb3JhbF9ybmdfcGsgRE8gTk9USElORzsKKy0tIGlkIG1hdGNoZXMgYnV0IG5vIGNvbmZs aWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgn WzEsMiknLCBkYXRlcmFuZ2UoJzIwMTAtMDEtMDEnLCAnMjAyMC0wMS0wMScpKSBPTiBDT05G TElDVCBPTiBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZ19wayBETyBOT1RISU5HOworLS0gZGF0 ZSBtYXRjaGVzIGJ1dCBubyBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nIChp ZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1syLDMpJywgZGF0ZXJhbmdlKCcyMDA1LTAxLTAxJywg JzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgT04gQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmdf cGsgRE8gTk9USElORzsKK1NFTEVDVCAqIEZST00gdGVtcG9yYWxfcm5nIE9SREVSIEJZIGlk LCB2YWxpZF9hdDsKKworVFJVTkNBVEUgdGVtcG9yYWxfcm5nOworSU5TRVJUIElOVE8gdGVt cG9yYWxfcm5nIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcy MDAwLTAxLTAxJywgJzIwMTAtMDEtMDEnKSk7CistLSB3aXRoIGEgY29uZmxpY3QKK0lOU0VS VCBJTlRPIHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRh dGVyYW5nZSgnMjAwNS0wMS0wMScsICcyMDA2LTAxLTAxJykpIE9OIENPTkZMSUNUIChpZCwg dmFsaWRfYXQpIERPIFVQREFURSBTRVQgaWQgPSBFWENMVURFRC5pZCArICdbMiwzKSc7Cist LSBpZCBtYXRjaGVzIGJ1dCBubyBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5n IChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDEwLTAxLTAx JywgJzIwMjAtMDEtMDEnKSkgT04gQ09ORkxJQ1QgKGlkLCB2YWxpZF9hdCkgRE8gVVBEQVRF IFNFVCBpZCA9IEVYQ0xVREVELmlkICsgJ1szLDQpJzsKKy0tIGRhdGUgbWF0Y2hlcyBidXQg bm8gY29uZmxpY3QKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBW QUxVRVMgKCdbMiwzKScsIGRhdGVyYW5nZSgnMjAwNS0wMS0wMScsICcyMDA2LTAxLTAxJykp IE9OIENPTkZMSUNUIChpZCwgdmFsaWRfYXQpIERPIFVQREFURSBTRVQgaWQgPSBFWENMVURF RC5pZCArICdbNCw1KSc7CitTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsX3JuZyBPUkRFUiBCWSBp ZCwgdmFsaWRfYXQ7CisKK1RSVU5DQVRFIHRlbXBvcmFsX3JuZzsKK0lOU0VSVCBJTlRPIHRl bXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5nZSgn MjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJykpOworLS0gd2l0aCBhIGNvbmZsaWN0CitJTlNF UlQgSU5UTyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBk YXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCBPTiBD T05TVFJBSU5UIHRlbXBvcmFsX3JuZ19wayBETyBVUERBVEUgU0VUIGlkID0gRVhDTFVERUQu aWQgKyAnWzIsMyknOworLS0gaWQgbWF0Y2hlcyBidXQgbm8gY29uZmxpY3QKK0lOU0VSVCBJ TlRPIHRlbXBvcmFsX3JuZyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVy YW5nZSgnMjAxMC0wMS0wMScsICcyMDIwLTAxLTAxJykpIE9OIENPTkZMSUNUIE9OIENPTlNU UkFJTlQgdGVtcG9yYWxfcm5nX3BrIERPIFVQREFURSBTRVQgaWQgPSBFWENMVURFRC5pZCAr ICdbMyw0KSc7CistLSBkYXRlIG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5U TyB0ZW1wb3JhbF9ybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzIsMyknLCBkYXRlcmFu Z2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCBPTiBDT05TVFJB SU5UIHRlbXBvcmFsX3JuZ19wayBETyBVUERBVEUgU0VUIGlkID0gRVhDTFVERUQuaWQgKyAn WzQsNSknOworU0VMRUNUICogRlJPTSB0ZW1wb3JhbF9ybmcgT1JERVIgQlkgaWQsIHZhbGlk X2F0OworCistLSB3aXRoIGEgVU5JUVVFIGNvbnN0cmFpbnQ6CisKK0NSRUFURSBUQUJMRSB0 ZW1wb3JhbDMgKAorCWlkIGludDRyYW5nZSwKKwl2YWxpZF9hdCBkYXRlcmFuZ2UsCisJQ09O U1RSQUlOVCB0ZW1wb3JhbDNfdXEgVU5JUVVFIChpZCwgdmFsaWRfYXQgV0lUSE9VVCBPVkVS TEFQUykKKyk7CitUUlVOQ0FURSB0ZW1wb3JhbDM7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMg KGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDAtMDEtMDEn LCAnMjAxMC0wMS0wMScpKTsKKy0tIHdpdGggYSBjb25mbGljdAorSU5TRVJUIElOVE8gdGVt cG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDA1 LTAxLTAxJywgJzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgRE8gTk9USElORzsKKy0tIGlk IG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2 YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMTAtMDEtMDEnLCAnMjAy MC0wMS0wMScpKSBPTiBDT05GTElDVCBETyBOT1RISU5HOworLS0gZGF0ZSBtYXRjaGVzIGJ1 dCBubyBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZB TFVFUyAoJ1syLDMpJywgZGF0ZXJhbmdlKCcyMDA1LTAxLTAxJywgJzIwMDYtMDEtMDEnKSkg T04gQ09ORkxJQ1QgRE8gTk9USElORzsKK1NFTEVDVCAqIEZST00gdGVtcG9yYWwzIE9SREVS IEJZIGlkLCB2YWxpZF9hdDsKKworVFJVTkNBVEUgdGVtcG9yYWwzOworSU5TRVJUIElOVE8g dGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcy MDAwLTAxLTAxJywgJzIwMTAtMDEtMDEnKSk7CistLSB3aXRoIGEgY29uZmxpY3QKK0lOU0VS VCBJTlRPIHRlbXBvcmFsMyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVy YW5nZSgnMjAwNS0wMS0wMScsICcyMDA2LTAxLTAxJykpIE9OIENPTkZMSUNUIChpZCwgdmFs aWRfYXQpIERPIE5PVEhJTkc7CistLSBpZCBtYXRjaGVzIGJ1dCBubyBjb25mbGljdAorSU5T RVJUIElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0 ZXJhbmdlKCcyMDEwLTAxLTAxJywgJzIwMjAtMDEtMDEnKSkgT04gQ09ORkxJQ1QgKGlkLCB2 YWxpZF9hdCkgRE8gTk9USElORzsKKy0tIGRhdGUgbWF0Y2hlcyBidXQgbm8gY29uZmxpY3QK K0lOU0VSVCBJTlRPIHRlbXBvcmFsMyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMiwzKScs IGRhdGVyYW5nZSgnMjAwNS0wMS0wMScsICcyMDA2LTAxLTAxJykpIE9OIENPTkZMSUNUIChp ZCwgdmFsaWRfYXQpIERPIE5PVEhJTkc7CitTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsMyBPUkRF UiBCWSBpZCwgdmFsaWRfYXQ7CisKK1RSVU5DQVRFIHRlbXBvcmFsMzsKK0lOU0VSVCBJTlRP IHRlbXBvcmFsMyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMSwyKScsIGRhdGVyYW5nZSgn MjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJykpOworLS0gd2l0aCBhIGNvbmZsaWN0CitJTlNF UlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRl cmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAwNi0wMS0wMScpKSBPTiBDT05GTElDVCBPTiBDT05T VFJBSU5UIHRlbXBvcmFsM191cSBETyBOT1RISU5HOworLS0gaWQgbWF0Y2hlcyBidXQgbm8g Y29uZmxpY3QKK0lOU0VSVCBJTlRPIHRlbXBvcmFsMyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMg KCdbMSwyKScsIGRhdGVyYW5nZSgnMjAxMC0wMS0wMScsICcyMDIwLTAxLTAxJykpIE9OIENP TkZMSUNUIE9OIENPTlNUUkFJTlQgdGVtcG9yYWwzX3VxIERPIE5PVEhJTkc7CistLSBkYXRl IG1hdGNoZXMgYnV0IG5vIGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2 YWxpZF9hdCkgVkFMVUVTICgnWzIsMyknLCBkYXRlcmFuZ2UoJzIwMDUtMDEtMDEnLCAnMjAw Ni0wMS0wMScpKSBPTiBDT05GTElDVCBPTiBDT05TVFJBSU5UIHRlbXBvcmFsM191cSBETyBO T1RISU5HOworU0VMRUNUICogRlJPTSB0ZW1wb3JhbDMgT1JERVIgQlkgaWQsIHZhbGlkX2F0 OworCitUUlVOQ0FURSB0ZW1wb3JhbDM7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2 YWxpZF9hdCkgVkFMVUVTICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMDAtMDEtMDEnLCAnMjAx MC0wMS0wMScpKTsKKy0tIHdpdGggYSBjb25mbGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWwz IChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sxLDIpJywgZGF0ZXJhbmdlKCcyMDA1LTAxLTAx JywgJzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgKGlkLCB2YWxpZF9hdCkgRE8gVVBEQVRF IFNFVCBpZCA9IEVYQ0xVREVELmlkICsgJ1syLDMpJzsKKy0tIGlkIG1hdGNoZXMgYnV0IG5v IGNvbmZsaWN0CitJTlNFUlQgSU5UTyB0ZW1wb3JhbDMgKGlkLCB2YWxpZF9hdCkgVkFMVUVT ICgnWzEsMiknLCBkYXRlcmFuZ2UoJzIwMTAtMDEtMDEnLCAnMjAyMC0wMS0wMScpKSBPTiBD T05GTElDVCAoaWQsIHZhbGlkX2F0KSBETyBVUERBVEUgU0VUIGlkID0gRVhDTFVERUQuaWQg KyAnWzMsNCknOworLS0gZGF0ZSBtYXRjaGVzIGJ1dCBubyBjb25mbGljdAorSU5TRVJUIElO VE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1syLDMpJywgZGF0ZXJhbmdl KCcyMDA1LTAxLTAxJywgJzIwMDYtMDEtMDEnKSkgT04gQ09ORkxJQ1QgKGlkLCB2YWxpZF9h dCkgRE8gVVBEQVRFIFNFVCBpZCA9IEVYQ0xVREVELmlkICsgJ1s0LDUpJzsKK1NFTEVDVCAq IEZST00gdGVtcG9yYWwzIE9SREVSIEJZIGlkLCB2YWxpZF9hdDsKKworVFJVTkNBVEUgdGVt cG9yYWwzOworSU5TRVJUIElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAo J1sxLDIpJywgZGF0ZXJhbmdlKCcyMDAwLTAxLTAxJywgJzIwMTAtMDEtMDEnKSk7CistLSB3 aXRoIGEgY29uZmxpY3QKK0lOU0VSVCBJTlRPIHRlbXBvcmFsMyAoaWQsIHZhbGlkX2F0KSBW QUxVRVMgKCdbMSwyKScsIGRhdGVyYW5nZSgnMjAwNS0wMS0wMScsICcyMDA2LTAxLTAxJykp IE9OIENPTkZMSUNUIE9OIENPTlNUUkFJTlQgdGVtcG9yYWwzX3VxIERPIFVQREFURSBTRVQg aWQgPSBFWENMVURFRC5pZCArICdbMiwzKSc7CistLSBpZCBtYXRjaGVzIGJ1dCBubyBjb25m bGljdAorSU5TRVJUIElOVE8gdGVtcG9yYWwzIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoJ1sx LDIpJywgZGF0ZXJhbmdlKCcyMDEwLTAxLTAxJywgJzIwMjAtMDEtMDEnKSkgT04gQ09ORkxJ Q1QgT04gQ09OU1RSQUlOVCB0ZW1wb3JhbDNfdXEgRE8gVVBEQVRFIFNFVCBpZCA9IEVYQ0xV REVELmlkICsgJ1szLDQpJzsKKy0tIGRhdGUgbWF0Y2hlcyBidXQgbm8gY29uZmxpY3QKK0lO U0VSVCBJTlRPIHRlbXBvcmFsMyAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKCdbMiwzKScsIGRh dGVyYW5nZSgnMjAwNS0wMS0wMScsICcyMDA2LTAxLTAxJykpIE9OIENPTkZMSUNUIE9OIENP TlNUUkFJTlQgdGVtcG9yYWwzX3VxIERPIFVQREFURSBTRVQgaWQgPSBFWENMVURFRC5pZCAr ICdbNCw1KSc7CitTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsMyBPUkRFUiBCWSBpZCwgdmFsaWRf YXQ7CisKK0RST1AgVEFCTEUgdGVtcG9yYWwzOworCiAtLQogLS0gdGVzdCBGSyBkZXBlbmRl bmNpZXMKIC0tCi0tIAoyLjQ1LjAKCg== --------------JSeIbkkoa09sNr3mUtNaPYN2 Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-Don-t-treat-WITHOUT-OVERLAPS-indexes-as-unique-in.patch" Content-Disposition: attachment; filename*0="v2-0002-Don-t-treat-WITHOUT-OVERLAPS-indexes-as-unique-in.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlZGMzZDQxMTJmYjYwMTEyYTMzNzVlOTMxNmUwNTZlNjE1ODE5NzFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWlu YXRlZGNvbXB1dGluZy5jb20+CkRhdGU6IFR1ZSwgMiBBcHIgMjAyNCAxNTozOTowNCAtMDcw MApTdWJqZWN0OiBbUEFUQ0ggdjIgMi8yXSBEb24ndCB0cmVhdCBXSVRIT1VUIE9WRVJMQVBT IGluZGV4ZXMgYXMgdW5pcXVlIGluCiBwbGFubmVyCgpCZWNhdXNlIHRoZSBzcGVjaWFsIHJh bmdldHlwZSAnZW1wdHknIG5ldmVyIG92ZXJsYXBzIGFub3RoZXIgdmFsdWUsIGl0CmlzIHBv c3NpYmxlIGZvciBXSVRIT1VUIE9WRVJMQVBTIHRhYmxlcyB0byBoYXZlIHR3byByb3dzIHdp dGggdGhlIHNhbWUKa2V5LCBkZXNwaXRlIGJlaW5nIGluZGlzdW5pcXVlLCBpZiB0aGUgYXBw bGljYXRpb24tdGltZSByYW5nZSBpcwonZW1wdHknLiBTbyB0byBiZSBzYWZlIHdlIHNob3Vs ZCBub3QgdHJlYXQgV0lUSE9VVCBPVkVSTEFQUyBpbmRleGVzIGFzCnVuaXF1ZSBpbiBhbnkg cHJvb2ZzLgoKVGhpcyBzdGlsbCBuZWVkcyBhIHRlc3QsIGJ1dCBJJ20gaGF2aW5nIHRyb3Vi bGUgZmluZGluZyBhIHF1ZXJ5IHRoYXQKZ2l2ZXMgd3JvbmcgcmVzdWx0cy4KLS0tCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICB8IDUgKysrLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jIHwgNiArKystLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICAgIHwgMSArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICB8IDIgKysKIDQgZmlsZXMgY2hhbmdl ZCwgOSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IGMwZmNjN2Q3OGRmLi43MjM0NmY3OGViZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0zNDk4LDEzICszNDk4 LDE0IEBAIHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZm9yKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCiAKIAkJLyoKIAkJICogSWYgdGhlIGluZGV4IGlzIG5vdCB1 bmlxdWUsIG9yIG5vdCBpbW1lZGlhdGVseSBlbmZvcmNlZCwgb3IgaWYgaXQncwotCQkgKiBh IHBhcnRpYWwgaW5kZXgsIGl0J3MgdXNlbGVzcyBoZXJlLiAgV2UncmUgdW5hYmxlIHRvIG1h a2UgdXNlIG9mCisJCSAqIGEgcGFydGlhbCBpbmRleCwgb3IgaWYgaXQncyBhIFdJVEhPVVQg T1ZFUkxBUFMgaW5kZXggKHNvIG5vdAorCQkgKiBsaXRlcmFsbHkgdW5pcXVlKSwgaXQncyB1 c2VsZXNzIGhlcmUuICBXZSdyZSB1bmFibGUgdG8gbWFrZSB1c2Ugb2YKIAkJICogcHJlZE9L IHBhcnRpYWwgdW5pcXVlIGluZGV4ZXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQKIAkJICogY2hl Y2tfaW5kZXhfcHJlZGljYXRlcygpIGFsc28gbWFrZXMgdXNlIG9mIGpvaW4gcHJlZGljYXRl cyB0bwogCQkgKiBkZXRlcm1pbmUgaWYgdGhlIHBhcnRpYWwgaW5kZXggaXMgdXNhYmxlLiBI ZXJlIHdlIG5lZWQgcHJvb2ZzIHRoYXQKIAkJICogaG9sZCB0cnVlIGJlZm9yZSBhbnkgam9p bnMgYXJlIGV2YWx1YXRlZC4KIAkJICovCi0JCWlmICghaW5kLT51bmlxdWUgfHwgIWluZC0+ aW1tZWRpYXRlIHx8IGluZC0+aW5kcHJlZCAhPSBOSUwpCisJCWlmICghaW5kLT51bmlxdWUg fHwgIWluZC0+aW1tZWRpYXRlIHx8IGluZC0+aW5kcHJlZCAhPSBOSUwgfHwgaW5kLT5oYXNw ZXJpb2QpCiAJCQljb250aW51ZTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9hbmFseXplam9pbnMuYwppbmRleCBhYTcyNTkyNTY3NS4uZWJjYTA0OWZkNWIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCkBAIC04MDAs OCArODAwLDggQEAgcmVsX3N1cHBvcnRzX2Rpc3RpbmN0bmVzcyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsKQogCQkgKiBGb3IgYSBwbGFpbiByZWxhdGlvbiwgd2Ugb25s eSBrbm93IGhvdyB0byBwcm92ZSB1bmlxdWVuZXNzIGJ5CiAJCSAqIHJlZmVyZW5jZSB0byB1 bmlxdWUgaW5kZXhlcy4gIE1ha2Ugc3VyZSB0aGVyZSdzIGF0IGxlYXN0IG9uZQogCQkgKiBz dWl0YWJsZSB1bmlxdWUgaW5kZXguICBJdCBtdXN0IGJlIGltbWVkaWF0ZWx5IGVuZm9yY2Vk LCBhbmQgbm90IGEKLQkJICogcGFydGlhbCBpbmRleC4gKEtlZXAgdGhlc2UgY29uZGl0aW9u cyBpbiBzeW5jIHdpdGgKLQkJICogcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IhKQor CQkgKiBwYXJ0aWFsIGluZGV4LCBhbmQgbm90IFdJVEhPVVQgT1ZFUkxBUFMgKEtlZXAgdGhl c2UgY29uZGl0aW9ucworCQkgKiBpbiBzeW5jIHdpdGggcmVsYXRpb25faGFzX3VuaXF1ZV9p bmRleF9mb3IhKQogCQkgKi8KIAkJTGlzdENlbGwgICAqbGM7CiAKQEAgLTgwOSw3ICs4MDks NyBAQCByZWxfc3VwcG9ydHNfZGlzdGluY3RuZXNzKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwpCiAJCXsKIAkJCUluZGV4T3B0SW5mbyAqaW5kID0gKEluZGV4T3B0SW5m byAqKSBsZmlyc3QobGMpOwogCi0JCQlpZiAoaW5kLT51bmlxdWUgJiYgaW5kLT5pbW1lZGlh dGUgJiYgaW5kLT5pbmRwcmVkID09IE5JTCkKKwkJCWlmIChpbmQtPnVuaXF1ZSAmJiBpbmQt PmltbWVkaWF0ZSAmJiBpbmQtPmluZHByZWQgPT0gTklMICYmICFpbmQtPmhhc3BlcmlvZCkK IAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Bs YW5jYXQuYwppbmRleCA3NzVjM2UyNmNkOC4uMTQ2MDI5NTc3YmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTQ1Nyw2ICs0NTcsNyBAQCBnZXRfcmVsYXRp b25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wg aW5ocGFyZW50LAogCQkJaW5mby0+cHJlZE9LID0gZmFsc2U7CS8qIHNldCBsYXRlciwgaW4g aW5keHBhdGguYyAqLwogCQkJaW5mby0+dW5pcXVlID0gaW5kZXgtPmluZGlzdW5pcXVlOwog CQkJaW5mby0+aW1tZWRpYXRlID0gaW5kZXgtPmluZGltbWVkaWF0ZTsKKwkJCWluZm8tPmhh c3BlcmlvZCA9IGluZGV4LT5pbmRpc3VuaXF1ZSAmJiBpbmRleC0+aW5kaXNleGNsdXNpb247 CiAJCQlpbmZvLT5oeXBvdGhldGljYWwgPSBmYWxzZTsKIAogCQkJLyoKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKaW5kZXggMTRlZjI5NmFiNzIuLmUyNGE0NWYwY2Q1IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaApAQCAtMTE3Niw2ICsxMTc2LDggQEAgc3RydWN0IEluZGV4T3B0SW5mbwog CWJvb2wJCXVuaXF1ZTsKIAkvKiBpcyB1bmlxdWVuZXNzIGVuZm9yY2VkIGltbWVkaWF0ZWx5 PyAqLwogCWJvb2wJCWltbWVkaWF0ZTsKKwkvKiB0cnVlIGlmIGluZGV4IGhhcyBXSVRIT1VU IE9WRVJMQVBTICovCisJYm9vbAkJaGFzcGVyaW9kOwogCS8qIHRydWUgaWYgaW5kZXggZG9l c24ndCByZWFsbHkgZXhpc3QgKi8KIAlib29sCQloeXBvdGhldGljYWw7CiAKLS0gCjIuNDUu MAoK --------------JSeIbkkoa09sNr3mUtNaPYN2--