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 1wReIy-002YUV-2l for pgsql-hackers@arkaria.postgresql.org; Mon, 25 May 2026 23:01:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wReIu-002LWt-2L for pgsql-hackers@arkaria.postgresql.org; Mon, 25 May 2026 23:01:49 +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 1wReIu-002LWk-0d for pgsql-hackers@lists.postgresql.org; Mon, 25 May 2026 23:01:49 +0000 Received: from mail-oi1-x22d.google.com ([2607:f8b0:4864:20::22d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wReIs-00000000lbB-0Yzg for pgsql-hackers@lists.postgresql.org; Mon, 25 May 2026 23:01:47 +0000 Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-4854c4040acso1955837b6e.0 for ; Mon, 25 May 2026 16:01:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779750104; cv=none; d=google.com; s=arc-20240605; b=NeKu7bPE5SQVVgmOFZ4CZUtqiAE6+uLUAClVY46+ZIO3dpGBGo/VNoOxQ6QWRFtIi/ 0AUiAzTmZeaJTH0icV3F0kIGKgD0cqvlFVwSL0zdrhf9RS5y+6HavQnJ0DzeFmQTx96G WitD0Y8S2fzmr1rqhSzroui89QIBVgUZUlNdWpf1FOleVIlsKK7Fv8NbUFG7bxzGeoLS cn1uFCI5rOj2PCexGkM0CyoYNVPZOYB/ieqXQ/b+C1HOmgVBDuwGmolaaZEY5QZz41gY dVbcuquZ157TpYw+eUdkALe40SgEs4eGB+5YCltNyIOyWuuJnRRdAjoxtK5c+AGW5Obl Q8dg== 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=sTkIL7UELRALmWzhKF1mMrKMz6o5WvdVeGmBUQlqdsg=; fh=difWPyZhf+FMfWnUHiBJsrLSKQJL23D1+3HP+YAZNos=; b=dAQl5m/4Rj3d5ZsvBosx9/MG6ywl090X9/EvMe62EF3CSoZWZXZaoWMbi0irfwpqlk f+gDr6fxsW70PW9Fk7hPDYjerg4ei34f82a+JDtlBD4XA+yo5mXS5171GQiaR6D/ovgO PeTJLPbppxEV0Yy00LtrWYtCBMrxiw3ClBQ5ZjvzcCsJaHW5/jTTPMLlppsjdMmH9zC1 2lXGb8yHA4rzRYvA+3a+78vcKWwWsS8c4M3fbRLfbV4+1nu4yIECtjz9Q2LmJaT1Gdp3 K9T4ikjW9iKFOSSkO7Ie/+QEGAC7aQfzHNCiDmlxGaE+ZwZ+HiOL8znb3qSIo8FDWKLv 8AAw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20251104.gappssmtp.com; s=20251104; t=1779750104; x=1780354904; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=sTkIL7UELRALmWzhKF1mMrKMz6o5WvdVeGmBUQlqdsg=; b=B+5Xbh0lbjZdqC3p8y5A9ikKaKMN6giCcSYvgQ7DldSOFpNOMYk19YaalfIr40OFQw wkrjPeVzUgJ35w9jYLYnIrLO/yKCl2RK2BQpNkuj8VUl2+9GZIiIFjj4oya0yOG3/ky4 hCrk6C2vPsaAHzEzAX0yl/SznhsjNfGr1fJsMqfMf1FvWcOMPDGYElQ3ZQKkbyVRoGNf GOCTm0lYAkqQyU+T2IzWLpLlta1npl0gAaSDYUkYvY+aK/7eNhAu/CtaNUIqDd7tBac8 y0zrbViusIR0enbLzlqnSAnzr8W54Z4SuVjB+ci3tNvCY9KsLpOnmiiJTmvwQlk1a3qw Bwjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779750104; x=1780354904; 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=sTkIL7UELRALmWzhKF1mMrKMz6o5WvdVeGmBUQlqdsg=; b=fpLK2AOCcoBoEbF4iPWwVwPimzE1CtEy8JPS4NnpLbGGB0mv6bqUy7sPz60OdsBMKk PqfDmBaTHcLviHzlaKwxkw822fr1qKCL95YmW3rkmMC+lPqCQdCYzTZr3pYP7Ydqpwtm hGP0bYfJidHnvLh/s5cL8WEGGcFWQkxt5bt/pRz9jUGIsux3T62xwML9iSiVs61UZEaV lB8GDws7vvS+5QoqnymaCVawJ8VFCSJx5r+fLUX2oiwqtU1GSex/3MMjlBQtL+WD4j0O c8hop5QkNLXKba58Gn3ITyCGJsfFVQkn3tXiCtjzhMi0lJ37ArFZro5fy9aRnDE1jjA0 sELQ== X-Gm-Message-State: AOJu0Yzy/rac+0HETP6oNTwISQxGjOkJukIg/ZQR6mm9QYB6Nwz9beIg SHsG65Cu8BDKoMd4NyKSuKGm1cDCR5c2bsN93cPCJQar12N71PNW+5rjkwzHWZ1q02+I2m8N8vN xKBs1LrG3uggxxDHoVPpy0YxLHNOXg17zcY++VdrKgPA/PwVh/xDgszqF7A== X-Gm-Gg: Acq92OGNt7bxLcZ+AzX/mhC7NA5qjvIpaVCsyrQiznY2rDqmeWlnSw6XuWfNKN89Fad ryUFfIsQ02vC52JumygxwZpe1jQDkxoBjRnO4a+MvPKsKUG9zOanESY7yoxHemff/OZuYxLiLnm unenDec/QzivObqdIpSX7Bn0szMz3u21hlDdYfOoplTlZIA0hY8VITXmv/+duAWkGv23SnrFb3g tnNmyaj/oQ1TDrwCzhQxqYmfRS0RKrfPd9O9EthR5hLmTpsVbVrsjcxtZkpW4fpH6MOiwxSEDM6 j1SCvJTMLeqronw= X-Received: by 2002:a05:6808:23cc:b0:467:d71:7f1a with SMTP id 5614622812f47-4852de4cb49mr9206669b6e.21.1779750104014; Mon, 25 May 2026 16:01:44 -0700 (PDT) MIME-Version: 1.0 References: <4245F94D-84F1-4E05-BF81-C458A6CF9901@gmail.com> <260A544F-FBD6-40CC-9449-5987049DD2D4@gmail.com> In-Reply-To: <260A544F-FBD6-40CC-9449-5987049DD2D4@gmail.com> From: Paul A Jungwirth Date: Mon, 25 May 2026 16:01:31 -0700 X-Gm-Features: AVHnY4KOCBDfblkT6w7yDfBpw5rlbspKpZ0wgyVdhi8NOejASxBFhcRVt5s4K2Q Message-ID: Subject: Re: Fix bug of UPDATE/DELETE FOR PORTION OF with inheritance tables To: Chao Li Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000bd52e30652ac5ca6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bd52e30652ac5ca6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, May 8, 2026 at 10:48=E2=80=AFPM Chao Li wr= ote: > > > On May 7, 2026, at 11:40, Chao Li wrote: > > After looking into the code, I found that leftover row insertion only c= onsiders the partitioned-table case, where leftovers need to be inserted th= rough the root relation for partition routing. Plain inheritance is differe= nt, leftover rows should be inserted back into the actual child relation. > > > > While debugging this, I also noticed another issue around mapping the r= ange column=E2=80=99s attnum. In multiple-inheritance cases, the range colu= mn=E2=80=99s attnum in a child table may be different from the one in its p= arent, so we need to use the child=E2=80=99s actual attnum. > > > > Please see the attached patch for the fix details and the new tests. Si= nce I believe this bug was introduced in 19, I=E2=80=99m going to add it to= the open items. > > > > Best regards, > > -- > > Chao Li (Evan) > > HighGo Software Co., Ltd. > > https://www.highgo.com/ > > > > > > > > > > > > Merged into [1]. > > [1] https://postgr.es/m/CAHg+QDcd=3Dt69gLf9yQexO07EJ2mx0Z70NFHo6h94X1EDA= =3DhM0g@mail.gmail.com Here is a new patch for this. I don't think it makes sense to combine it with the other fix anymore. Per [1], we are now checking for UPDATE permission on the FOR PORTION OF column, so most of that other patch went away, and the fix here can be done independently. That's what v2 here does. I didn't really change anything from the v12-0002 patch on that other thread, except for moving some tests into the other patch (since they had nothing to do with traditional inheritance). The patch here now passes, whether applied to master directly or applied on top of v13 from the updatedCols fix. (Combining them will give a rebase conflict in the test files, but it's pretty trivial to fix.) [1] https://www.postgresql.org/message-id/CA%2BrenyXyLfvtvVv--hGWGTgzFP%3D-= %2BdPLy4RWvEmioAPyJMM%2Buw%40mail.gmail.com Yours, --=20 Paul ~{:-) pj@illuminatedcomputing.com --000000000000bd52e30652ac5ca6 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-Fix-FOR-PORTION-OF-with-partitions-and-inheritanc.patch" Content-Disposition: attachment; filename="v2-0001-Fix-FOR-PORTION-OF-with-partitions-and-inheritanc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mplt7yop0 RnJvbSA0NTJhYzQ2YTNhZWJlMWU4NGYzZTQwYWJlZGQ2M2Y2NDk4NWVhZmExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWluYXRlZGNv bXB1dGluZy5jb20+CkRhdGU6IE1vbiwgMjUgTWF5IDIwMjYgMTU6NDQ6MzMgLTA3MDAKU3ViamVj dDogW1BBVENIIHYyXSBGaXggRk9SIFBPUlRJT04gT0Ygd2l0aCBwYXJ0aXRpb25zIGFuZCBpbmhl cml0YW5jZQoKLSBGaXhlZCBpbnNlcnRpbmcgbGVmdG92ZXJzIHdpdGggdHJhZGl0aW9uYWwgdGFi bGUgaW5oZXJpdGFuY2UuIFNpbmNlIHRoZXJlIGlzCiAgbm8gdHVwbGUgcm91dGluZywgd2UgbXVz dCBhZGQgdGhlbSBkaXJlY3RseSB0byB0aGUgY2hpbGQgdGFibGUuIEFsc28gdGhpcwogIHByZXNl cnZlcyBleHRyYSBjb2x1bW5zIGluIHRoYXQgdGFibGUuCi0gQWRkZWQgRXhlY0luaXRGb3JQb3J0 aW9uT2YuIFRoaXMgc2V0cyB1cCBleGVjdXRvciBzdGF0ZSBmb3IgY2hpbGQgcGFydGl0aW9ucy4K ICBQcmV2aW91c2x5IHdlIGRpZCB0aGlzIGluIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMsIGJ1 dCBkb2luZyBpdCBlYXJsaWVyIGxldHMKICB1cyB1c2UgdGhlIGNoaWxkLT5wYXJlbnQgYXR0ciBt YXBwaW5nIGluIHVwZGF0ZWRDb2xzICh1c2VkIHRvIHJlY29tcHV0ZQogIEdFTkVSQVRFRCBTVE9S RUQgY29sdW1ucyBhbmQgY2FsbCBVUERBVEUgT0YgdHJpZ2dlcnMsIGlmIHRoZSBjb2x1bW4gaGFz CiAgY2hhbmdlZCkuCi0gQ2xhcmlmaWVkIGEgY29tbWVudCBhYm91dCB0aGUgcmFuZ2V0eXBlIHN0 b3JlZCBpbiBGb3JQb3J0aW9uT2ZTdGF0ZS4KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuYyAgICAgICB8IDE1MSArKysrKysrKysrKysrLS0tLS0tCiBzcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQgfCAxMzEgKysrKysrKysrKysrKysrKwog c3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yX3BvcnRpb25fb2Yuc3FsICAgICAgfCAgNzMgKysrKysr KysrCiA0IGZpbGVzIGNoYW5nZWQsIDMxMCBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IDQ3OGNiMDE3ODNjLi44 NDE1YTJhNGQxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTE5 OSw2ICsxOTksOCBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZU5vdE1hdGNoZWQo TW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogc3RhdGljIHZvaWQgRXhlY1NldHVwVHJhbnNp dGlvbkNhcHR1cmVTdGF0ZShNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLCBFU3RhdGUgKmVzdGF0 ZSk7CiBzdGF0aWMgdm9pZCBmaXJlQlNUcmlnZ2VycyhNb2RpZnlUYWJsZVN0YXRlICpub2RlKTsK IHN0YXRpYyB2b2lkIGZpcmVBU1RyaWdnZXJzKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpOworc3Rh dGljIHZvaWQgRXhlY0luaXRGb3JQb3J0aW9uT2YoTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwg RVN0YXRlICplc3RhdGUsCisJCQkJCQkJCSBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvKTsK IAogCiAvKgpAQCAtMTQxMCw3ICsxNDEyLDYgQEAgRXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhN b2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9 IGNvbnRleHQtPm10c3RhdGU7CiAJTW9kaWZ5VGFibGUgKm5vZGUgPSAoTW9kaWZ5VGFibGUgKikg bXRzdGF0ZS0+cHMucGxhbjsKIAlGb3JQb3J0aW9uT2ZFeHByICpmb3JQb3J0aW9uT2YgPSAoRm9y UG9ydGlvbk9mRXhwciAqKSBub2RlLT5mb3JQb3J0aW9uT2Y7Ci0JQXR0ck51bWJlcglyYW5nZUF0 dG5vOwogCURhdHVtCQlvbGRSYW5nZTsKIAlUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGU7CiAJRm9y UG9ydGlvbk9mU3RhdGUgKmZwb1N0YXRlOwpAQCAtMTQyNSwzNyArMTQyNiwxMCBAQCBFeGVjRm9y UG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAlSZXR1cm5T ZXRJbmZvIHJzaTsKIAlib29sCQlkaWRJbml0ID0gZmFsc2U7CiAJYm9vbAkJc2hvdWxkRnJlZSA9 IGZhbHNlOworCVJlc3VsdFJlbEluZm8gKnJvb3RSZWxJbmZvID0gbXRzdGF0ZS0+cm9vdFJlc3Vs dFJlbEluZm87CiAKIAlMT0NBTF9GQ0lORk8oZmNpbmZvLCAyKTsKIAotCWlmICghcmVzdWx0UmVs SW5mby0+cmlfZm9yUG9ydGlvbk9mKQotCXsKLQkJLyoKLQkJICogSWYgd2UgZG9uJ3QgaGF2ZSBh IEZvclBvcnRpb25PZlN0YXRlIHlldCwgd2UgbXVzdCBiZSBhIHBhcnRpdGlvbgotCQkgKiBjaGls ZCBiZWluZyBoaXQgZm9yIHRoZSBmaXJzdCB0aW1lLiBNYWtlIGEgY29weSBmcm9tIHRoZSByb290 LCB3aXRoCi0JCSAqIG91ciBvd24gVHVwbGVUYWJsZVNsb3QuIFdlIGRvIHRoaXMgbGF6aWx5IHNv IHRoYXQgd2UgZG9uJ3QgcGF5IHRoZQotCQkgKiBwcmljZSBvZiB1bnVzZWQgcGFydGl0aW9ucy4K LQkJICovCi0JCUZvclBvcnRpb25PZlN0YXRlICpsZWFmU3RhdGUgPSBtYWtlTm9kZShGb3JQb3J0 aW9uT2ZTdGF0ZSk7Ci0KLQkJaWYgKCFtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mbykKLQkJCWVs b2coRVJST1IsICJubyByb290IHJlbGF0aW9uIGJ1dCByaV9mb3JQb3J0aW9uT2YgaXMgdW5pbml0 aWFsaXplZCIpOwotCi0JCWZwb1N0YXRlID0gbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm8tPnJp X2ZvclBvcnRpb25PZjsKLQkJQXNzZXJ0KGZwb1N0YXRlKTsKLQotCQlsZWFmU3RhdGUtPmZwX3Jh bmdlTmFtZSA9IGZwb1N0YXRlLT5mcF9yYW5nZU5hbWU7Ci0JCWxlYWZTdGF0ZS0+ZnBfcmFuZ2VU eXBlID0gZnBvU3RhdGUtPmZwX3JhbmdlVHlwZTsKLQkJbGVhZlN0YXRlLT5mcF9yYW5nZUF0dG5v ID0gZnBvU3RhdGUtPmZwX3JhbmdlQXR0bm87Ci0JCWxlYWZTdGF0ZS0+ZnBfdGFyZ2V0UmFuZ2Ug PSBmcG9TdGF0ZS0+ZnBfdGFyZ2V0UmFuZ2U7Ci0JCWxlYWZTdGF0ZS0+ZnBfTGVmdG92ZXIgPSBm cG9TdGF0ZS0+ZnBfTGVmdG92ZXI7Ci0JCS8qIEVhY2ggcGFydGl0aW9uIG5lZWRzIGEgc2xvdCBt YXRjaGluZyBpdHMgdHVwbGUgZGVzY3JpcHRvciAqLwotCQlsZWFmU3RhdGUtPmZwX0V4aXN0aW5n ID0KLQkJCXRhYmxlX3Nsb3RfY3JlYXRlKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywK LQkJCQkJCQkgICZtdHN0YXRlLT5wcy5zdGF0ZS0+ZXNfdHVwbGVUYWJsZSk7Ci0KLQkJcmVzdWx0 UmVsSW5mby0+cmlfZm9yUG9ydGlvbk9mID0gbGVhZlN0YXRlOwotCX0KIAlmcG9TdGF0ZSA9IHJl c3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZjsKIAlvbGR0dXBsZVNsb3QgPSBmcG9TdGF0ZS0+ ZnBfRXhpc3Rpbmc7CiAJbGVmdG92ZXJTbG90ID0gZnBvU3RhdGUtPmZwX0xlZnRvdmVyOwpAQCAt MTQ3NiwyMSArMTQ1MCwxMyBAQCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxl Q29udGV4dCAqY29udGV4dCwKIAlpZiAoIXRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKHJl c3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywgdHVwbGVpZCwgU25hcHNob3RBbnksIG9sZHR1 cGxlU2xvdCkpCiAJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gZmV0Y2ggdHVwbGUgZm9yIEZPUiBQ T1JUSU9OIE9GIik7CiAKLQkvKgotCSAqIEdldCB0aGUgb2xkIHJhbmdlIG9mIHRoZSByZWNvcmQg YmVpbmcgdXBkYXRlZC9kZWxldGVkLiBNdXN0IHJlYWQgd2l0aAotCSAqIHRoZSBhdHRubyBvZiB0 aGUgbGVhZiBwYXJ0aXRpb24gYmVpbmcgdXBkYXRlZC4KLQkgKi8KLQotCXJhbmdlQXR0bm8gPSBm b3JQb3J0aW9uT2YtPnJhbmdlVmFyLT52YXJhdHRubzsKLQlpZiAocmVzdWx0UmVsSW5mby0+cmlf Um9vdFJlc3VsdFJlbEluZm8pCi0JCW1hcCA9IEV4ZWNHZXRDaGlsZFRvUm9vdE1hcChyZXN1bHRS ZWxJbmZvKTsKLQlpZiAobWFwICE9IE5VTEwpCi0JCXJhbmdlQXR0bm8gPSBtYXAtPmF0dHJNYXAt PmF0dG51bXNbcmFuZ2VBdHRubyAtIDFdOwogCXNsb3RfZ2V0YWxsYXR0cnMob2xkdHVwbGVTbG90 KTsKIAotCWlmIChvbGR0dXBsZVNsb3QtPnR0c19pc251bGxbcmFuZ2VBdHRubyAtIDFdKQorCS8q IEdldCB0aGUgb2xkIHJhbmdlIG9mIHRoZSByZWNvcmQgYmVpbmcgdXBkYXRlZC9kZWxldGVkLiAq LworCisJaWYgKG9sZHR1cGxlU2xvdC0+dHRzX2lzbnVsbFtmcG9TdGF0ZS0+ZnBfcmFuZ2VBdHRu byAtIDFdKQogCQllbG9nKEVSUk9SLCAiZm91bmQgYSBOVUxMIHJhbmdlIGluIGEgdGVtcG9yYWwg dGFibGUiKTsKLQlvbGRSYW5nZSA9IG9sZHR1cGxlU2xvdC0+dHRzX3ZhbHVlc1tyYW5nZUF0dG5v IC0gMV07CisJb2xkUmFuZ2UgPSBvbGR0dXBsZVNsb3QtPnR0c192YWx1ZXNbZnBvU3RhdGUtPmZw X3JhbmdlQXR0bm8gLSAxXTsKIAogCS8qCiAJICogR2V0IHRoZSByYW5nZSdzIHR5cGUgY2FjaGUg ZW50cnkuIFRoaXMgaXMgd29ydGggY2FjaGluZyBmb3IgdGhlIHdob2xlCkBAIC0xNTI4LDEyICsx NDk0LDIwIEBAIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoTW9kaWZ5VGFibGVDb250ZXh0ICpj b250ZXh0LAogCWZjaW5mby0+YXJnc1sxXS5pc251bGwgPSBmYWxzZTsKIAogCS8qCi0JICogSWYg dGhlcmUgYXJlIHBhcnRpdGlvbnMsIHdlIG11c3QgaW5zZXJ0IGludG8gdGhlIHJvb3QgdGFibGUs IHNvIHdlIGdldAotCSAqIHR1cGxlIHJvdXRpbmcuIFdlIGFscmVhZHkgc2V0IHVwIGxlZnRvdmVy U2xvdCB3aXRoIHRoZSByb290IHR1cGxlCi0JICogZGVzY3JpcHRvci4KKwkgKiBGb3IgcGFydGl0 aW9uZWQgdGFibGVzLCB3ZSBtdXN0IHJlYWQgbGVmdG92ZXJzIHdpdGggdGhlIHR1cGxlCisJICog ZGVzY3JpcHRvciBvZiB0aGUgY2hpbGQgdGFibGUsIGJ1dCBpbnNlcnQgaW50byB0aGUgcm9vdCB0 YWJsZSB0byBlbmFibGUKKwkgKiB0dXBsZSByb3V0aW5nLiAgU28gbGVmdG92ZXJTbG90IGlzIGNv bmZpZ3VyZWQgd2l0aCB0aGUgcm9vdCdzIHR1cGxlCisJICogZGVzY3JpcHRvci4gIEhvd2V2ZXIs IGZvciB0cmFkaXRpb25hbCB0YWJsZSBpbmhlcml0YW5jZSwgd2UgZG9uJ3QgbmVlZAorCSAqIHR1 cGxlIHJvdXRpbmcgYW5kIGp1c3QgaW5zZXJ0IGRpcmVjdGx5IGludG8gdGhlIGNoaWxkIHRhYmxl IHRvIHByZXNlcnZlCisJICogY2hpbGQtc3BlY2lmaWMgY29sdW1ucy4gIEluIHRoYXQgY2FzZSwg bGVmdG92ZXJTbG90IHVzZXMgdGhlIGNoaWxkJ3MKKwkgKiAocmVzdWx0UmVsSW5mbykgdHVwbGUg ZGVzY3JpcHRvci4KIAkgKi8KLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfUm9vdFJlc3VsdFJlbElu Zm8pCisJaWYgKHJvb3RSZWxJbmZvICYmCisJCXJvb3RSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2Mt PnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJbWFw ID0gRXhlY0dldENoaWxkVG9Sb290TWFwKHJlc3VsdFJlbEluZm8pOwogCQlyZXN1bHRSZWxJbmZv ID0gcmVzdWx0UmVsSW5mby0+cmlfUm9vdFJlc3VsdFJlbEluZm87CisJfQogCiAJLyoKIAkgKiBJ bnNlcnQgYSBsZWZ0b3ZlciBmb3IgZWFjaCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgd2l0aG91dF9w b3J0aW9uIGhlbHBlcgpAQCAtMTYwMiw4ICsxNTc2LDggQEAgRXhlY0ZvclBvcnRpb25PZkxlZnRv dmVycyhNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCQlkaWRJbml0ID0gdHJ1ZTsKIAkJ fQogCi0JCWxlZnRvdmVyU2xvdC0+dHRzX3ZhbHVlc1tmb3JQb3J0aW9uT2YtPnJhbmdlVmFyLT52 YXJhdHRubyAtIDFdID0gbGVmdG92ZXI7Ci0JCWxlZnRvdmVyU2xvdC0+dHRzX2lzbnVsbFtmb3JQ b3J0aW9uT2YtPnJhbmdlVmFyLT52YXJhdHRubyAtIDFdID0gZmFsc2U7CisJCWxlZnRvdmVyU2xv dC0+dHRzX3ZhbHVlc1tyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YtPmZwX3JhbmdlQXR0 bm8gLSAxXSA9IGxlZnRvdmVyOworCQlsZWZ0b3ZlclNsb3QtPnR0c19pc251bGxbcmVzdWx0UmVs SW5mby0+cmlfZm9yUG9ydGlvbk9mLT5mcF9yYW5nZUF0dG5vIC0gMV0gPSBmYWxzZTsKIAkJRXhl Y01hdGVyaWFsaXplU2xvdChsZWZ0b3ZlclNsb3QpOwogCiAJCS8qCkBAIC00Nzc4LDYgKzQ3NTIs MTggQEAgRXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkJCQkJCQkJCQkJCQkg ZmFsc2UsIHRydWUpOwogCQl9CiAKKwkJLyoKKwkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhIEZvclBv cnRpb25PZlN0YXRlIHlldCwgd2UgbXVzdCBiZSBhIHBhcnRpdGlvbiBvcgorCQkgKiBpbmhlcml0 YW5jZSBjaGlsZCBiZWluZyBoaXQgZm9yIHRoZSBmaXJzdCB0aW1lLiBNYWtlIGEgY29weSBmcm9t CisJCSAqIHRoZSByb290LCB3aXRoIG91ciBvd24gVHVwbGVUYWJsZVNsb3QuIFdlIGRvIHRoaXMg bGF6aWx5IHNvIHRoYXQgd2UKKwkJICogZG9uJ3QgcGF5IHRoZSBwcmljZSBvZiB1bnVzZWQgcGFy dGl0aW9ucy4KKwkJICovCisJCWlmICgoKChNb2RpZnlUYWJsZSAqKSBjb250ZXh0Lm10c3RhdGUt PnBzLnBsYW4pLT5mb3JQb3J0aW9uT2YpICYmCisJCQkhcmVzdWx0UmVsSW5mby0+cmlfZm9yUG9y dGlvbk9mKQorCQl7CisJCQlFeGVjSW5pdEZvclBvcnRpb25PZihjb250ZXh0Lm10c3RhdGUsIGVz dGF0ZSwgcmVzdWx0UmVsSW5mbyk7CisJCX0KKwogCQkvKgogCQkgKiBJZiByZXN1bHRSZWxJbmZv LT5yaV91c2VzRmR3RGlyZWN0TW9kaWZ5IGlzIHRydWUsIGFsbCB3ZSBuZWVkIHRvIGRvCiAJCSAq IGhlcmUgaXMgY29tcHV0ZSB0aGUgUkVUVVJOSU5HIGV4cHJlc3Npb25zLgpAQCAtNTg2MSwzICs1 ODQ3LDc0IEBAIEV4ZWNSZVNjYW5Nb2RpZnlUYWJsZShNb2RpZnlUYWJsZVN0YXRlICpub2RlKQog CSAqLwogCWVsb2coRVJST1IsICJFeGVjUmVTY2FuTW9kaWZ5VGFibGUgaXMgbm90IGltcGxlbWVu dGVkIik7CiB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCSBFeGVjSW5pdEZvclBvcnRpb25PZgorICoKKyAq CSBJbml0aWFsaXplcyByZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YgZm9yIGNoaWxkIHRh Ymxlcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNJbml0Rm9yUG9ydGlvbk9m KE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAorCQkJCQkgUmVzdWx0 UmVsSW5mbyAqcmVzdWx0UmVsSW5mbykKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlGb3JQ b3J0aW9uT2ZTdGF0ZSAqbGVhZlN0YXRlOworCVJlc3VsdFJlbEluZm8gKnJvb3RSZWxJbmZvID0g bXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm87CisJRm9yUG9ydGlvbk9mU3RhdGUgKmZwb1N0YXRl OworCVR1cGxlQ29udmVyc2lvbk1hcCAqbWFwOworCisJaWYgKCFyb290UmVsSW5mbykKKwkJZWxv ZyhFUlJPUiwgIm5vIHJvb3QgcmVsYXRpb24gYnV0IHJpX2ZvclBvcnRpb25PZiBpcyB1bmluaXRp YWxpemVkIik7CisKKwlmcG9TdGF0ZSA9IG10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvLT5yaV9m b3JQb3J0aW9uT2Y7CisKKwkvKiBUaGluZ3MgYnVpbHQgaGVyZSBoYXZlIHRvIGxhc3QgZm9yIHRo ZSBxdWVyeSBkdXJhdGlvbi4gKi8KKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0 YXRlLT5lc19xdWVyeV9jeHQpOworCisJbGVhZlN0YXRlID0gbWFrZU5vZGUoRm9yUG9ydGlvbk9m U3RhdGUpOworCisJbGVhZlN0YXRlLT5mcF9yYW5nZU5hbWUgPSBmcG9TdGF0ZS0+ZnBfcmFuZ2VO YW1lOworCWxlYWZTdGF0ZS0+ZnBfcmFuZ2VUeXBlID0gZnBvU3RhdGUtPmZwX3JhbmdlVHlwZTsK KwlsZWFmU3RhdGUtPmZwX3RhcmdldFJhbmdlID0gZnBvU3RhdGUtPmZwX3RhcmdldFJhbmdlOwor CW1hcCA9IEV4ZWNHZXRDaGlsZFRvUm9vdE1hcChyZXN1bHRSZWxJbmZvKTsKKworCS8qCisJICog ZnBfcmFuZ2VBdHRubyBtdXN0IG1hdGNoIHRoZSB0dXBsZSBsYXlvdXQgdXNlZCBmb3IgcmVhZGlu ZyB0aGUgb2xkCisJICogcmFuZ2UgdmFsdWUuICBUaGUgcXVlcnkgdXNlcyB0aGUgdGFyZ2V0IHJl bGF0aW9uJ3MgYXR0bm8sIHNvIHRyYW5zbGF0ZQorCSAqIGl0IHRvIHRoZSBjaGlsZCBhdHRubyB3 aGVuIHRoZSBjaGlsZCBoYXMgYSBkaWZmZXJlbnQgY29sdW1uIGxheW91dC4KKwkgKi8KKwlpZiAo bWFwKQorCQlsZWFmU3RhdGUtPmZwX3JhbmdlQXR0bm8gPSBtYXAtPmF0dHJNYXAtPmF0dG51bXNb ZnBvU3RhdGUtPmZwX3JhbmdlQXR0bm8gLSAxXTsKKwllbHNlCisJCWxlYWZTdGF0ZS0+ZnBfcmFu Z2VBdHRubyA9IGZwb1N0YXRlLT5mcF9yYW5nZUF0dG5vOworCisJLyoKKwkgKiBGb3IgcGFydGl0 aW9uZWQgdGFibGVzIHdlIG11c3QgcmVhZCB0aGUgbGVmdG92ZXJzIHVzaW5nIHRoZSBjaGlsZAor CSAqIHRhYmxlJ3MgdHVwbGUgZGVzY3JpcHRvciwgYnV0IHRoZW4gaW5zZXJ0IHRoZW0gaW50byB0 aGUgcm9vdCB0YWJsZQorCSAqICh1c2luZyBpdHMgdHVwbGUgZGVzY3JpcHRvcikgc28gd2UgZ2V0 IHR1cGxlIHJvdXRpbmcuCisJICoKKwkgKiBGb3IgdHJhZGl0aW9uYWwgdGFibGUgaW5oZXJpdGFu Y2UsIHdlIHJlYWQgYW5kIGluc2VydCBkaXJlY3RseSBpbnRvCisJICogdGhpcyByZXN1bHRSZWxJ bmZvOyBubyB0dXBsZSByb3V0aW5nIHRvIHRoZSBwYXJlbnQgaXMgcmVxdWlyZWQuCisJICovCisJ aWYgKHJvb3RSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJbGVhZlN0YXRlLT5mcF9MZWZ0b3ZlciA9IGZw b1N0YXRlLT5mcF9MZWZ0b3ZlcjsKKwl9CisJZWxzZQorCXsKKwkJbGVhZlN0YXRlLT5mcF9MZWZ0 b3ZlciA9CisJCQlFeGVjSW5pdEV4dHJhVHVwbGVTbG90KG10c3RhdGUtPnBzLnN0YXRlLAorCQkJ CQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYyks CisJCQkJCQkJCSAgICZUVFNPcHNWaXJ0dWFsKTsKKwl9CisKKwkvKiBFYWNoIGNoaWxkIHJlbGF0 aW9uIG5lZWRzIGEgc2xvdCBtYXRjaGluZyBpdHMgdHVwbGUgZGVzY3JpcHRvciAqLworCWxlYWZT dGF0ZS0+ZnBfRXhpc3RpbmcgPQorCQl0YWJsZV9zbG90X2NyZWF0ZShyZXN1bHRSZWxJbmZvLT5y aV9SZWxhdGlvbkRlc2MsCisJCQkJCQkgICZtdHN0YXRlLT5wcy5zdGF0ZS0+ZXNfdHVwbGVUYWJs ZSk7CisKKwlyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YgPSBsZWFmU3RhdGU7CisKKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXgg MTMzNTkxODBkMjUuLjUzYzEzODMxMGRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNDc3LDcg KzQ3Nyw4IEBAIHR5cGVkZWYgc3RydWN0IEZvclBvcnRpb25PZlN0YXRlCiAJTm9kZVRhZwkJdHlw ZTsKIAogCWNoYXIJICAgKmZwX3JhbmdlTmFtZTsJLyogdGhlIGNvbHVtbiBuYW1lZCBpbiBGT1Ig UE9SVElPTiBPRiAqLwotCU9pZAkJCWZwX3JhbmdlVHlwZTsJLyogdGhlIHR5cGUgb2YgdGhlIEZP UiBQT1JUSU9OIE9GIGV4cHJlc3Npb24gKi8KKwlPaWQJCQlmcF9yYW5nZVR5cGU7CS8qIHRoZSBi YXNlIHR5cGUgKG5vdCBkb21haW4pIG9mIHRoZSBGT1IKKwkJCQkJCQkJICogUE9SVElPTiBPRiBl eHByZXNzaW9uICovCiAJaW50CQkJZnBfcmFuZ2VBdHRubzsJLyogdGhlIGF0dG5vIG9mIHRoZSBy YW5nZSBjb2x1bW4gKi8KIAlEYXR1bQkJZnBfdGFyZ2V0UmFuZ2U7IC8qIHRoZSByYW5nZS9tdWx0 aXJhbmdlIGZyb20gRk9SIFBPUlRJT04gT0YgKi8KIAlUeXBlQ2FjaGVFbnRyeSAqZnBfbGVmdG92 ZXJzdHlwY2FjaGU7CS8qIHR5cGUgY2FjaGUgZW50cnkgb2YgdGhlIHJhbmdlICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9wb3J0aW9uX29mLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0CmluZGV4IDBjMGEyMDVjNDRi Li4zNjQ1Y2FlNThmZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3Jf cG9ydGlvbl9vZi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JfcG9ydGlv bl9vZi5vdXQKQEAgLTIxNTIsNCArMjE1MiwxMzUgQEAgU0VMRUNUICogRlJPTSBmcG9fcnVsZSBP UkRFUiBCWSBmMTsKICgyIHJvd3MpCiAKIERST1AgVEFCTEUgZnBvX3J1bGU7CistLSBVUERBVEUv REVMRVRFIEZPUiBQT1JUSU9OIE9GIHdpdGggdGFibGUgaW5oZXJpdGFuY2UKKy0tIExlZnRvdmVy IHJvd3MgbXVzdCBzdGF5IGluIHRoZSBjaGlsZCB0YWJsZSwgcHJlc2VydmluZyBjaGlsZC1zcGVj aWZpYyBjb2x1bW5zLgorQ1JFQVRFIFRBQkxFIGZwb19pbmhfcGFyZW50ICgKKyAgaWQgaW50NHJh bmdlLAorICB2YWxpZF9hdCBkYXRlcmFuZ2UsCisgIG5hbWUgdGV4dAorKTsKK0NSRUFURSBUQUJM RSBmcG9faW5oX2NoaWxkICgKKyAgZGVzY3JpcHRpb24gdGV4dAorKSBJTkhFUklUUyAoZnBvX2lu aF9wYXJlbnQpOworLS0gVXBkYXRlIHRhcmdldHMgdGhlIHBhcmVudDsgdGhlIG1hdGNoaW5nIHJv dyBsaXZlcyBpbiB0aGUgY2hpbGQuCitJTlNFUlQgSU5UTyBmcG9faW5oX2NoaWxkIChpZCwgdmFs aWRfYXQsIG5hbWUsIGRlc2NyaXB0aW9uKSBWQUxVRVMKKyAgKCdbMSwyKScsICdbMjAxOC0wMS0w MSwyMDE5LTAxLTAxKScsICdvbmUnLCAnaW5pdGlhbCcpOworVVBEQVRFIGZwb19pbmhfcGFyZW50 IEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0IEZST00gJzIwMTgtMDQtMDEnIFRPICcyMDE4LTEwLTAx JworICBTRVQgbmFtZSA9ICdvbmVeMSc7CistLSBBbGwgdGhyZWUgcm93cyBzaG91bGQgYmUgaW4g dGhlIGNoaWxkLCB3aXRoIGRlc2NyaXB0aW9uIHByZXNlcnZlZC4KK1NFTEVDVCB0YWJsZW9pZDo6 cmVnY2xhc3MsICogRlJPTSBmcG9faW5oX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKKyAgIHRh Ymxlb2lkICAgIHwgIGlkICAgfCAgICAgICAgdmFsaWRfYXQgICAgICAgICB8IG5hbWUgIAorLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tCisg ZnBvX2luaF9jaGlsZCB8IFsxLDIpIHwgWzIwMTgtMDEtMDEsMjAxOC0wNC0wMSkgfCBvbmUKKyBm cG9faW5oX2NoaWxkIHwgWzEsMikgfCBbMjAxOC0wNC0wMSwyMDE4LTEwLTAxKSB8IG9uZV4xCisg ZnBvX2luaF9jaGlsZCB8IFsxLDIpIHwgWzIwMTgtMTAtMDEsMjAxOS0wMS0wMSkgfCBvbmUKKygz IHJvd3MpCisKK1NFTEVDVCAqIEZST00gZnBvX2luaF9jaGlsZCBPUkRFUiBCWSB2YWxpZF9hdDsK KyAgaWQgICB8ICAgICAgICB2YWxpZF9hdCAgICAgICAgIHwgbmFtZSAgfCBkZXNjcmlwdGlvbiAK Ky0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0K KyBbMSwyKSB8IFsyMDE4LTAxLTAxLDIwMTgtMDQtMDEpIHwgb25lICAgfCBpbml0aWFsCisgWzEs MikgfCBbMjAxOC0wNC0wMSwyMDE4LTEwLTAxKSB8IG9uZV4xIHwgaW5pdGlhbAorIFsxLDIpIHwg WzIwMTgtMTAtMDEsMjAxOS0wMS0wMSkgfCBvbmUgICB8IGluaXRpYWwKKygzIHJvd3MpCisKKy0t IE5vIHJvd3Mgc2hvdWxkIGhhdmUgbGVha2VkIGludG8gdGhlIHBhcmVudC4KK1NFTEVDVCAqIEZS T00gT05MWSBmcG9faW5oX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKKyBpZCB8IHZhbGlkX2F0 IHwgbmFtZSAKKy0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKKy0tIFNhbWUgdGVz dCBmb3IgREVMRVRFIGluc3RlYWQgb2YgVVBEQVRFOgorVFJVTkNBVEUgZnBvX2luaF9jaGlsZCwg ZnBvX2luaF9wYXJlbnQ7CitJTlNFUlQgSU5UTyBmcG9faW5oX2NoaWxkIChpZCwgdmFsaWRfYXQs IG5hbWUsIGRlc2NyaXB0aW9uKSBWQUxVRVMKKyAgKCdbMSwyKScsICdbMjAxOC0wMS0wMSwyMDE5 LTAxLTAxKScsICdvbmUnLCAnaW5pdGlhbCcpOworREVMRVRFIEZST00gZnBvX2luaF9wYXJlbnQg Rk9SIFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAnMjAxOC0wNC0wMScgVE8gJzIwMTgtMTAtMDEn OworLS0gQm90aCByb3dzIHNob3VsZCBiZSBpbiB0aGUgY2hpbGQsIHdpdGggZGVzY3JpcHRpb24g cHJlc2VydmVkLgorU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgKiBGUk9NIGZwb19pbmhfcGFy ZW50IE9SREVSIEJZIHZhbGlkX2F0OworICAgdGFibGVvaWQgICAgfCAgaWQgICB8ICAgICAgICB2 YWxpZF9hdCAgICAgICAgIHwgbmFtZSAKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tCisgZnBvX2luaF9jaGlsZCB8IFsxLDIpIHwgWzIwMTgt MDEtMDEsMjAxOC0wNC0wMSkgfCBvbmUKKyBmcG9faW5oX2NoaWxkIHwgWzEsMikgfCBbMjAxOC0x MC0wMSwyMDE5LTAxLTAxKSB8IG9uZQorKDIgcm93cykKKworU0VMRUNUICogRlJPTSBmcG9faW5o X2NoaWxkIE9SREVSIEJZIHZhbGlkX2F0OworICBpZCAgIHwgICAgICAgIHZhbGlkX2F0ICAgICAg ICAgfCBuYW1lIHwgZGVzY3JpcHRpb24gCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBbMSwyKSB8IFsyMDE4LTAxLTAxLDIwMTgtMDQtMDEp IHwgb25lICB8IGluaXRpYWwKKyBbMSwyKSB8IFsyMDE4LTEwLTAxLDIwMTktMDEtMDEpIHwgb25l ICB8IGluaXRpYWwKKygyIHJvd3MpCisKKy0tIE5vIHJvd3Mgc2hvdWxkIGhhdmUgbGVha2VkIGlu dG8gdGhlIHBhcmVudC4KK1NFTEVDVCAqIEZST00gT05MWSBmcG9faW5oX3BhcmVudCBPUkRFUiBC WSB2YWxpZF9hdDsKKyBpZCB8IHZhbGlkX2F0IHwgbmFtZSAKKy0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKygwIHJvd3MpCisKK0RST1AgVEFCTEUgZnBvX2luaF9wYXJlbnQgQ0FTQ0FERTsKK05PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZnBvX2luaF9jaGlsZAorLS0gVVBEQVRFIEZPUiBQ T1JUSU9OIE9GIHdpdGggbXVsdGlwbGUgaW5oZXJpdGFuY2UKKy0tIExlZnRvdmVyIHJvd3MgbXVz dCBzdGF5IGluIHRoZSBjaGlsZCB0YWJsZSwgZXZlbiBpZiB0aGUgcmFuZ2UgY29sdW1uJ3MKKy0t IGF0dG51bSBkaWZmZXJzIGJldHdlZW4gdGhlIHRhcmdldCBwYXJlbnQgYW5kIGNoaWxkLgorQ1JF QVRFIFRBQkxFIHRlbXBvcmFsX3BhcmVudCAoCisgIGlkIGludCwKKyAgdmFsaWRfYXQgZGF0ZXJh bmdlLAorICBuYW1lIHRleHQKKyk7CitDUkVBVEUgVEFCTEUgb3RoZXJfcGFyZW50ICgKKyAgcHJl Zml4IHRleHQsCisgIG5vdGUgdGV4dAorKTsKK0NSRUFURSBUQUJMRSBtaV9jaGlsZCAoKSBJTkhF UklUUyAob3RoZXJfcGFyZW50LCB0ZW1wb3JhbF9wYXJlbnQpOworSU5TRVJUIElOVE8gbWlfY2hp bGQgKHByZWZpeCwgbm90ZSwgaWQsIHZhbGlkX2F0LCBuYW1lKSBWQUxVRVMKKyAgKCdwZngnLCAn bWVtbycsIDEsIGRhdGVyYW5nZSgnMjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJyksICdvbGQnKTsK K1VQREFURSB0ZW1wb3JhbF9wYXJlbnQgRk9SIFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAnMjAw MS0wMS0wMScgVE8gJzIwMDItMDEtMDEnCisgIFNFVCBuYW1lID0gJ25ldycKKyAgV0hFUkUgaWQg PSAxOworU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgKiBGUk9NIHRlbXBvcmFsX3BhcmVudCBP UkRFUiBCWSB2YWxpZF9hdDsKKyB0YWJsZW9pZCB8IGlkIHwgICAgICAgIHZhbGlkX2F0ICAgICAg ICAgfCBuYW1lIAorLS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tCisgbWlfY2hpbGQgfCAgMSB8IFsyMDAwLTAxLTAxLDIwMDEtMDEtMDEpIHwgb2xkCisgbWlf Y2hpbGQgfCAgMSB8IFsyMDAxLTAxLTAxLDIwMDItMDEtMDEpIHwgbmV3CisgbWlfY2hpbGQgfCAg MSB8IFsyMDAyLTAxLTAxLDIwMTAtMDEtMDEpIHwgb2xkCisoMyByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIG1pX2NoaWxkIE9SREVSIEJZIHZhbGlkX2F0OworIHByZWZpeCB8IG5vdGUgfCBpZCB8ICAg ICAgICB2YWxpZF9hdCAgICAgICAgIHwgbmFtZSAKKy0tLS0tLS0tKy0tLS0tLSstLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tCisgcGZ4ICAgIHwgbWVtbyB8ICAxIHwgWzIwMDAt MDEtMDEsMjAwMS0wMS0wMSkgfCBvbGQKKyBwZnggICAgfCBtZW1vIHwgIDEgfCBbMjAwMS0wMS0w MSwyMDAyLTAxLTAxKSB8IG5ldworIHBmeCAgICB8IG1lbW8gfCAgMSB8IFsyMDAyLTAxLTAxLDIw MTAtMDEtMDEpIHwgb2xkCisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIE9OTFkgdGVtcG9yYWxf cGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworIGlkIHwgdmFsaWRfYXQgfCBuYW1lIAorLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworVFJVTkNBVEUgbWlfY2hpbGQsIG90aGVyX3Bh cmVudCwgdGVtcG9yYWxfcGFyZW50OworSU5TRVJUIElOVE8gbWlfY2hpbGQgKHByZWZpeCwgbm90 ZSwgaWQsIHZhbGlkX2F0LCBuYW1lKSBWQUxVRVMKKyAgKCdwZngnLCAnbWVtbycsIDEsIGRhdGVy YW5nZSgnMjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJyksICdvbGQnKTsKK0RFTEVURSBGUk9NIHRl bXBvcmFsX3BhcmVudCBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBGUk9NICcyMDAxLTAxLTAxJyBU TyAnMjAwMi0wMS0wMScKKyAgV0hFUkUgaWQgPSAxOworU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFz cywgKiBGUk9NIHRlbXBvcmFsX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKKyB0YWJsZW9pZCB8 IGlkIHwgICAgICAgIHZhbGlkX2F0ICAgICAgICAgfCBuYW1lIAorLS0tLS0tLS0tLSstLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tCisgbWlfY2hpbGQgfCAgMSB8IFsyMDAwLTAx LTAxLDIwMDEtMDEtMDEpIHwgb2xkCisgbWlfY2hpbGQgfCAgMSB8IFsyMDAyLTAxLTAxLDIwMTAt MDEtMDEpIHwgb2xkCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIG1pX2NoaWxkIE9SREVSIEJZ IHZhbGlkX2F0OworIHByZWZpeCB8IG5vdGUgfCBpZCB8ICAgICAgICB2YWxpZF9hdCAgICAgICAg IHwgbmFtZSAKKy0tLS0tLS0tKy0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tCisgcGZ4ICAgIHwgbWVtbyB8ICAxIHwgWzIwMDAtMDEtMDEsMjAwMS0wMS0wMSkgfCBv bGQKKyBwZnggICAgfCBtZW1vIHwgIDEgfCBbMjAwMi0wMS0wMSwyMDEwLTAxLTAxKSB8IG9sZAor KDIgcm93cykKKworU0VMRUNUICogRlJPTSBPTkxZIHRlbXBvcmFsX3BhcmVudCBPUkRFUiBCWSB2 YWxpZF9hdDsKKyBpZCB8IHZhbGlkX2F0IHwgbmFtZSAKKy0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KygwIHJvd3MpCisKK0RST1AgVEFCTEUgdGVtcG9yYWxfcGFyZW50IENBU0NBREU7CitOT1RJQ0U6 ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIG1pX2NoaWxkCiBSRVNFVCBkYXRlc3R5bGU7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JfcG9ydGlvbl9vZi5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9mb3JfcG9ydGlvbl9vZi5zcWwKaW5kZXggZmQ3OWE5Yjc4ZTcuLjhhYTQ1 YmZkODE0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JfcG9ydGlvbl9vZi5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yX3BvcnRpb25fb2Yuc3FsCkBAIC0xMzk4 LDQgKzEzOTgsNzcgQEAgU0VMRUNUICogRlJPTSBmcG9fcnVsZSBPUkRFUiBCWSBmMTsKIAogRFJP UCBUQUJMRSBmcG9fcnVsZTsKIAorLS0gVVBEQVRFL0RFTEVURSBGT1IgUE9SVElPTiBPRiB3aXRo IHRhYmxlIGluaGVyaXRhbmNlCistLSBMZWZ0b3ZlciByb3dzIG11c3Qgc3RheSBpbiB0aGUgY2hp bGQgdGFibGUsIHByZXNlcnZpbmcgY2hpbGQtc3BlY2lmaWMgY29sdW1ucy4KK0NSRUFURSBUQUJM RSBmcG9faW5oX3BhcmVudCAoCisgIGlkIGludDRyYW5nZSwKKyAgdmFsaWRfYXQgZGF0ZXJhbmdl LAorICBuYW1lIHRleHQKKyk7CitDUkVBVEUgVEFCTEUgZnBvX2luaF9jaGlsZCAoCisgIGRlc2Ny aXB0aW9uIHRleHQKKykgSU5IRVJJVFMgKGZwb19pbmhfcGFyZW50KTsKKworLS0gVXBkYXRlIHRh cmdldHMgdGhlIHBhcmVudDsgdGhlIG1hdGNoaW5nIHJvdyBsaXZlcyBpbiB0aGUgY2hpbGQuCitJ TlNFUlQgSU5UTyBmcG9faW5oX2NoaWxkIChpZCwgdmFsaWRfYXQsIG5hbWUsIGRlc2NyaXB0aW9u KSBWQUxVRVMKKyAgKCdbMSwyKScsICdbMjAxOC0wMS0wMSwyMDE5LTAxLTAxKScsICdvbmUnLCAn aW5pdGlhbCcpOworVVBEQVRFIGZwb19pbmhfcGFyZW50IEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0 IEZST00gJzIwMTgtMDQtMDEnIFRPICcyMDE4LTEwLTAxJworICBTRVQgbmFtZSA9ICdvbmVeMSc7 CistLSBBbGwgdGhyZWUgcm93cyBzaG91bGQgYmUgaW4gdGhlIGNoaWxkLCB3aXRoIGRlc2NyaXB0 aW9uIHByZXNlcnZlZC4KK1NFTEVDVCB0YWJsZW9pZDo6cmVnY2xhc3MsICogRlJPTSBmcG9faW5o X3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKK1NFTEVDVCAqIEZST00gZnBvX2luaF9jaGlsZCBP UkRFUiBCWSB2YWxpZF9hdDsKKy0tIE5vIHJvd3Mgc2hvdWxkIGhhdmUgbGVha2VkIGludG8gdGhl IHBhcmVudC4KK1NFTEVDVCAqIEZST00gT05MWSBmcG9faW5oX3BhcmVudCBPUkRFUiBCWSB2YWxp ZF9hdDsKKworLS0gU2FtZSB0ZXN0IGZvciBERUxFVEUgaW5zdGVhZCBvZiBVUERBVEU6CitUUlVO Q0FURSBmcG9faW5oX2NoaWxkLCBmcG9faW5oX3BhcmVudDsKK0lOU0VSVCBJTlRPIGZwb19pbmhf Y2hpbGQgKGlkLCB2YWxpZF9hdCwgbmFtZSwgZGVzY3JpcHRpb24pIFZBTFVFUworICAoJ1sxLDIp JywgJ1syMDE4LTAxLTAxLDIwMTktMDEtMDEpJywgJ29uZScsICdpbml0aWFsJyk7CitERUxFVEUg RlJPTSBmcG9faW5oX3BhcmVudCBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBGUk9NICcyMDE4LTA0 LTAxJyBUTyAnMjAxOC0xMC0wMSc7CistLSBCb3RoIHJvd3Mgc2hvdWxkIGJlIGluIHRoZSBjaGls ZCwgd2l0aCBkZXNjcmlwdGlvbiBwcmVzZXJ2ZWQuCitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNz LCAqIEZST00gZnBvX2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CitTRUxFQ1QgKiBGUk9N IGZwb19pbmhfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CistLSBObyByb3dzIHNob3VsZCBoYXZl IGxlYWtlZCBpbnRvIHRoZSBwYXJlbnQuCitTRUxFQ1QgKiBGUk9NIE9OTFkgZnBvX2luaF9wYXJl bnQgT1JERVIgQlkgdmFsaWRfYXQ7CisKK0RST1AgVEFCTEUgZnBvX2luaF9wYXJlbnQgQ0FTQ0FE RTsKKworLS0gVVBEQVRFIEZPUiBQT1JUSU9OIE9GIHdpdGggbXVsdGlwbGUgaW5oZXJpdGFuY2UK Ky0tIExlZnRvdmVyIHJvd3MgbXVzdCBzdGF5IGluIHRoZSBjaGlsZCB0YWJsZSwgZXZlbiBpZiB0 aGUgcmFuZ2UgY29sdW1uJ3MKKy0tIGF0dG51bSBkaWZmZXJzIGJldHdlZW4gdGhlIHRhcmdldCBw YXJlbnQgYW5kIGNoaWxkLgorQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX3BhcmVudCAoCisgIGlkIGlu dCwKKyAgdmFsaWRfYXQgZGF0ZXJhbmdlLAorICBuYW1lIHRleHQKKyk7CitDUkVBVEUgVEFCTEUg b3RoZXJfcGFyZW50ICgKKyAgcHJlZml4IHRleHQsCisgIG5vdGUgdGV4dAorKTsKK0NSRUFURSBU QUJMRSBtaV9jaGlsZCAoKSBJTkhFUklUUyAob3RoZXJfcGFyZW50LCB0ZW1wb3JhbF9wYXJlbnQp OworCitJTlNFUlQgSU5UTyBtaV9jaGlsZCAocHJlZml4LCBub3RlLCBpZCwgdmFsaWRfYXQsIG5h bWUpIFZBTFVFUworICAoJ3BmeCcsICdtZW1vJywgMSwgZGF0ZXJhbmdlKCcyMDAwLTAxLTAxJywg JzIwMTAtMDEtMDEnKSwgJ29sZCcpOworCitVUERBVEUgdGVtcG9yYWxfcGFyZW50IEZPUiBQT1JU SU9OIE9GIHZhbGlkX2F0IEZST00gJzIwMDEtMDEtMDEnIFRPICcyMDAyLTAxLTAxJworICBTRVQg bmFtZSA9ICduZXcnCisgIFdIRVJFIGlkID0gMTsKKworU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFz cywgKiBGUk9NIHRlbXBvcmFsX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKK1NFTEVDVCAqIEZS T00gbWlfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CitTRUxFQ1QgKiBGUk9NIE9OTFkgdGVtcG9y YWxfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworCitUUlVOQ0FURSBtaV9jaGlsZCwgb3RoZXJf cGFyZW50LCB0ZW1wb3JhbF9wYXJlbnQ7CitJTlNFUlQgSU5UTyBtaV9jaGlsZCAocHJlZml4LCBu b3RlLCBpZCwgdmFsaWRfYXQsIG5hbWUpIFZBTFVFUworICAoJ3BmeCcsICdtZW1vJywgMSwgZGF0 ZXJhbmdlKCcyMDAwLTAxLTAxJywgJzIwMTAtMDEtMDEnKSwgJ29sZCcpOworCitERUxFVEUgRlJP TSB0ZW1wb3JhbF9wYXJlbnQgRk9SIFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAnMjAwMS0wMS0w MScgVE8gJzIwMDItMDEtMDEnCisgIFdIRVJFIGlkID0gMTsKKworU0VMRUNUIHRhYmxlb2lkOjpy ZWdjbGFzcywgKiBGUk9NIHRlbXBvcmFsX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKK1NFTEVD VCAqIEZST00gbWlfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CitTRUxFQ1QgKiBGUk9NIE9OTFkg dGVtcG9yYWxfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworCitEUk9QIFRBQkxFIHRlbXBvcmFs X3BhcmVudCBDQVNDQURFOworCiBSRVNFVCBkYXRlc3R5bGU7Ci0tIAoyLjQ3LjMKCg== --000000000000bd52e30652ac5ca6--