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 1uvonG-0023Dk-8V for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Sep 2025 03:13:19 +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 1uvonF-009A4h-6Z for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Sep 2025 03:13:17 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uvonE-009A4Z-RM for pgsql-hackers@lists.postgresql.org; Tue, 09 Sep 2025 03:13:17 +0000 Received: from mail-vk1-xa34.google.com ([2607:f8b0:4864:20::a34]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uvonB-001JRY-1m for pgsql-hackers@postgresql.org; Tue, 09 Sep 2025 03:13:16 +0000 Received: by mail-vk1-xa34.google.com with SMTP id 71dfb90a1353d-544b58831c8so1528733e0c.0 for ; Mon, 08 Sep 2025 20:13:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757387593; x=1757992393; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=bSjDej819FVqNuQO0zaOEbZHg7pLukXjp9b+HDh+720=; b=XyII6OdTTpI0sM0h7csPd2BeklICIC9+2AqqZ/rf1SeDmwP+OP7JCGarqm+LmzBbue GuvzEUmlJUtI4EEhbUTYaaD0IVftqbDwTKn8qKZajtbE+evWNnILAiDN3dpJWGrNEFd6 THI6RjZTQLtWj89y9gStWD6k2bD1wilzovdIA1agVNyuXZwrBP67eQI8DsvuiyZ3Cb1I F4h3QaGo4wu2LO3xiPfDFIVnxolSfUGUkRuLthIfgkyKIrn+vV1NZCmKlOP7FhpyJXiS NuFdA0IinvVaMmoAOAP7QSqG8ND9SDZRPAVFk0LEB+gFt7dvB3hEWTJMnW9aBnXtPsRs xAsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757387593; x=1757992393; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bSjDej819FVqNuQO0zaOEbZHg7pLukXjp9b+HDh+720=; b=ZQ6xUOxrgJ89BbeeXGw7+5BLv5p4DG/4AHfjdeVxfG2WvrchJ29zuA/miP4x2cRCr5 gqX+1ut8nbdSKIGrWU+O/GXNNXumpmxhoBxfpPJqepU19HlvAq7FX0N8NEywq1+4t2yW CzVlytP6wcUS7KP9+LDEs95ju6okKTdIGqTZScwNIN13x8jfEepdmhBf4aOG1GY7Su3x lQ7oPf3Jm31TSx4BDiSmI+QuLpDUav8m3ppeuTK2LhCNTp34onIur+7IPeXjary4YRgr MExo+232MknOw0asu2QcFsle0Bm/OFsiDx9JLuZ45mkMHL0Nl/KX2bCitkYot2FlJUS6 ZbsA== X-Gm-Message-State: AOJu0YwWDwaLvPSvJZqZaTAIDl1v+qZmocWpjRm8JDqFdLuPrUZZ5Llr u8BCZAo+zqZq8xxkFxgLzTjOaAKYgZSE9/r/HxiELGCOCmbR85FdYqc1mGVhX8xPWIm5/gFceNr NDx6eAQ+HsFKsjKgC3TSBNUapn6gHo8Z6gdA7Dm425w== X-Gm-Gg: ASbGncuBJYuEjLjJUQNHTBbiepOiv3p0l5zpPyQt8mK4SOEJkrbVSMX72OyyYAkAkSA 5E7BPSLsWBbRoqWpR3a22hBW9PY/EIFhZIvTpKAJHuAJ+TNjFosAYL0pGwMtjsa4IftikVgfyhV oMkbiXWEH5l1LjHjf48jX368DQwYDFHioZ0J0GD9M+KpKZx+QGyuoNmdpJ58JPPVmCGhqA7lo3b +aP4eBY0yVotGIbtg== X-Google-Smtp-Source: AGHT+IFWgnu7v7TQ2tPA3g0fKdADv2YolCTm2A4vQHYTLl7PmHzEGOyIB246AHqhhGKRNjn0xjEOo3u8nZMdKuw+pFU= X-Received: by 2002:a05:6122:8288:b0:544:9a46:7c85 with SMTP id 71dfb90a1353d-5472a3f9a07mr2926596e0c.4.1757387592718; Mon, 08 Sep 2025 20:13:12 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Tue, 9 Sep 2025 11:12:36 +0800 X-Gm-Features: AS18NWAv8oQilWL2RWXt-FDWL849n8TseMG-CNhdi8omZJ6_K4YiUw2155C44cc Message-ID: Subject: Re: let ALTER TABLE DROP COLUMN drop whole-row referenced object To: PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000003279c3063e55af88" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003279c3063e55af88 Content-Type: text/plain; charset="UTF-8" hi. I found a new way to solve this problem. CREATE TABLE ts (a int, c int, b int constraint cc check((ts = ROW(1,1,1))), constraint cc1 check((ts.a = 1))); for constraint cc, there is no extra dependency between column a and constraint cc. see find_expr_references_walker below comments: /* * A whole-row Var references no specific columns, so adds no new * dependency. (We assume that there is a whole-table dependency * arising from each underlying rangetable entry. While we could * record such a dependency when finding a whole-row Var that * references a relation directly, it's quite unclear how to extend * that to whole-row Vars for JOINs, so it seems better to leave the * responsibility with the range table. Note that this poses some * risks for identifying dependencies of stand-alone expressions: * whole-table references may need to be created separately.) */ Ideally, for constraint "cc", there should be three pg_depend entries corresponding to column a, column b, and column c, but those entries are missing, but we didn't. so, in ATExecDropColumn, instead of adding another object to the deletion list (``add_exact_object_address(&object, addrs)``) like what we did v1, we first call recordDependencyOn to explicitly record the dependency between constraint cc and column a, and then rely on performMultipleDeletions to handle the deletion properly demo: CREATE TABLE ts (a int, c int, b int constraint cc check((ts = ROW(1,1,1))), constraint cc1 check((ts.a = 1))); CREATE INDEX tsi on ts (a) where a = 1; CREATE INDEX tsi2 on ts ((a is null)); CREATE INDEX tsi3 on ts ((ts is null)); CREATE INDEX tsi4 on ts (b) where ts is not null; CREATE POLICY p1 ON ts USING (ts >= ROW(1,1,1)); CREATE POLICY p2 ON ts USING (ts.a = 1); ALTER TABLE ts DROP COLUMN a CASCADE; will drop above all indexes, constraints and policies on the table ts. --0000000000003279c3063e55af88 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-ALTER-TABLE-DROP-COLUMN-drop-wholerow-referenced-object.patch" Content-Disposition: attachment; filename="v2-0001-ALTER-TABLE-DROP-COLUMN-drop-wholerow-referenced-object.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfbz62ro0 RnJvbSAwYmZlNWRkNmNjMzEzZWFjNzVhODFhYWYxMjJlZjA5MGZkZDI2YTk4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgOSBTZXAgMjAyNSAxMDo1NDo1NiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg MS8xXSBBTFRFUiBUQUJMRSBEUk9QIENPTFVNTiBkcm9wIHdob2xlcm93IHJlZmVyZW5jZWQKIG9i amVjdAoKQ1JFQVRFIFRBQkxFIHRzIChhIGludCwgYyBpbnQsIGIgaW50CiAgICBjb25zdHJhaW50 IGNjIGNoZWNrKCh0cyA9IFJPVygxLDEsMSkpKSwKICAgIGNvbnN0cmFpbnQgY2MxIGNoZWNrKCh0 cy5hID0gMSkpKTsKQ1JFQVRFIElOREVYIHRzaSBvbiB0cyAoYSkgd2hlcmUgYSA9IDE7CkNSRUFU RSBJTkRFWCB0c2kyIG9uIHRzICgoYSBpcyBudWxsKSk7CkNSRUFURSBJTkRFWCB0c2kzIG9uIHRz ICgodHMgaXMgbnVsbCkpOwpDUkVBVEUgSU5ERVggdHNpNCBvbiB0cyAoYikgd2hlcmUgdHMgaXMg bm90IG51bGw7CkNSRUFURSBQT0xJQ1kgcDEgT04gdHMgVVNJTkcgKHRzID49IFJPVygxLDEsMSkp OwpDUkVBVEUgUE9MSUNZIHAyIE9OIHRzIFVTSU5HICh0cy5hID0gMSk7CgpBTFRFUiBUQUJMRSB0 cyBEUk9QIENPTFVNTiBhIENBU0NBREU7CndpbGwgZHJvcCBhYm92ZSBhbGwgaW5kZXhlcywgY29u c3RyYWludHMgYW5kIHBvbGljaWVzIG9uIHRoZSB0YWJsZSB0cy4KCm5vdwpcZCB0cwogICAgICAg ICAgICAgICAgIFRhYmxlICJwdWJsaWMudHMiCiBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9u IHwgTnVsbGFibGUgfCBEZWZhdWx0Ci0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLQogYyAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAg IHwKIGIgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8CgpkaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQ0p1ZnhHQTZLVlF5N0RiSEdMVnc5czlLS21wR3ladDVN RTZDN2tFZmpEcHIyd1pDd0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jICAgICAgICAgIHwgMjA2ICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29uc3RyYWludHMub3V0IHwgIDE3ICsrCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dCAgICB8ICAyNSArKysKIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcm93c2VjdXJpdHkub3V0IHwgIDIxICsrKwogc3JjL3Rlc3QvcmVncmVzcy9z cWwvY29uc3RyYWludHMuc3FsICAgICAgfCAgMTEgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2lu ZGV4aW5nLnNxbCAgICAgICAgIHwgICA5ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3Vy aXR5LnNxbCAgICAgIHwgICA5ICsKIDcgZmlsZXMgY2hhbmdlZCwgMjk4IGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDA4MmEzNTc1ZDYyLi5iMjFmMjBjYThmZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTkyNTYsNyArOTI1NiwxNSBAQCBBVEV4ZWNE cm9wQ29sdW1uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFt ZSwKIAlBdHRyTnVtYmVyCWF0dG51bTsKIAlMaXN0CSAgICpjaGlsZHJlbjsKIAlPYmplY3RBZGRy ZXNzIG9iamVjdDsKKwlPYmplY3RBZGRyZXNzIHRtcG9iamVjdDsKIAlib29sCQlpc19leHByOwor CU5vZGUJICAgKmV4cHI7CisJTGlzdAkgICAqaW5kZXhsaXN0ID0gTklMOworCVR1cGxlQ29uc3Ry ICpjb25zdHIgPSBSZWxhdGlvbkdldERlc2NyKHJlbCktPmNvbnN0cjsKKwlSZWxhdGlvbglwZ19w b2xpY3k7CisJU2NhbktleURhdGEgc2tleVsxXTsKKwlTeXNTY2FuRGVzYyBzc2NhbjsKKwlIZWFw VHVwbGUJcG9saWN5X3R1cGxlOwogCiAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9uIGNoZWNr IHdhcyBkb25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwogCWlmIChyZWN1cnNpbmcpCkBA IC05MzI5LDYgKzkzMzcsMjA0IEBAIEFURXhlY0Ryb3BDb2x1bW4oTGlzdCAqKndxdWV1ZSwgUmVs YXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLAogCiAJUmVsZWFzZVN5c0NhY2hlKHR1cGxl KTsKIAorCXRtcG9iamVjdC5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCXRtcG9iamVj dC5vYmplY3RJZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwl0bXBvYmplY3Qub2JqZWN0U3Vi SWQgPSBhdHRudW07CisKKwkvKgorCSAqIEFMVEVSIFRBQkxFIERST1AgQ09MVU1OIGFsc28gbmVl ZCBkcm9wIGluZGV4ZXMgb3IgY29uc3RyYWludHMgdGhhdAorCSAqIGluY2x1ZGUgd2hvbGUtcm93 IHJlZmVyZW5jZSBleHByZXNzaW9ucy4gSG93ZXZlciwgdGhlcmUgaXMgbm8gZGlyZWN0CisJICog ZGVwZW5kZW5jeSBiZXR3ZWVuIHdob2xlLXJvdyBWYXIgcmVmZXJlbmNlcyBhbmQgaW5kaXZpZHVh bCB0YWJsZSBjb2x1bW5zLAorCSAqIGFuZCBhZGRpbmcgc3VjaCBkZXBlbmRlbmNpZXMgd291bGQg bGVhZCB0byBjYXRhbG9nIGJsb2F0IChzZWUKKwkgKiBmaW5kX2V4cHJfcmVmZXJlbmNlc193YWxr ZXIpLgorCSAqIFRoZXJlZm9yZSwgaGVyZSwgd2UgZXhwbGljaXRseSB1c2UgcmVjb3JkRGVwZW5k ZW5jeU9uIHRvIGNyZWF0ZSBhCisJICogZGVwZW5kZW5jeSBiZXR3ZWVuIHRoZSB0YWJsZSBjb2x1 bW4gYW5kIGFueSBjb25zdHJhaW50IG9yIGluZGV4IHRoYXQKKwkgKiBjb250YWlucyB3aG9sZS1y b3cgVmFyIHJlZmVyZW5jZXMuCisJICogTGF0ZXIgcGVyZm9ybU11bHRpcGxlRGVsZXRpb25zIHdp bGwgZG8gdGhlIGpvYi4KKwkqLworCWlmIChjb25zdHIgJiYgY29uc3RyLT5udW1fY2hlY2sgPiAw KQorCXsKKwkJQ29uc3RyQ2hlY2sgKmNoZWNrID0gY29uc3RyLT5jaGVjazsKKworCQlmb3IgKGlu dCBpID0gMDsgaSA8IGNvbnN0ci0+bnVtX2NoZWNrOyBpKyspCisJCXsKKwkJCUJpdG1hcHNldCAg KmV4cHJfYXR0cnMgPSBOVUxMOworCQkJY2hhcgkgICAqY29uc3RyX25hbWUgPSBjaGVja1tpXS5j Y25hbWU7CisKKwkJCWV4cHIgPSBzdHJpbmdUb05vZGUoY2hlY2tbaV0uY2NiaW4pOworCisJCQkv KiBGaW5kIGFsbCBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgKi8KKwkJCXB1bGxfdmFyYXR0bm9zKGV4 cHIsIDEsICZleHByX2F0dHJzKTsKKworCQkJaWYgKGJtc19pc19tZW1iZXIoMCAtIEZpcnN0TG93 SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsIGV4cHJfYXR0cnMpKQorCQkJeworCQkJCVJlbGF0 aW9uCWNvbkRlc2M7CisJCQkJU3lzU2NhbkRlc2MgY29uc2NhbjsKKwkJCQlTY2FuS2V5RGF0YSBz a2V5WzNdOworCQkJCUhlYXBUdXBsZQljb250dXBsZTsKKworCQkJCS8qIFNlYXJjaCBmb3IgYSBw Z19jb25zdHJhaW50IGVudHJ5IHdpdGggc2FtZSBuYW1lIGFuZCByZWxhdGlvbiAqLworCQkJCWNv bkRlc2MgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJCQkJU2NhbktleUluaXQoJnNrZXlbMF0sCisJCQkJCQkJQW51bV9wZ19jb25zdHJhaW50 X2NvbnJlbGlkLAorCQkJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJ CQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSkpOworCQkJCVNjYW5LZXlJ bml0KCZza2V5WzFdLAorCQkJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJ CQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCQkJT2JqZWN0SWRHZXREYXR1 bShJbnZhbGlkT2lkKSk7CisJCQkJU2NhbktleUluaXQoJnNrZXlbMl0sCisJCQkJCQkJQW51bV9w Z19jb25zdHJhaW50X2Nvbm5hbWUsCisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX05B TUVFUSwKKwkJCQkJCQlDU3RyaW5nR2V0RGF0dW0oY29uc3RyX25hbWUpKTsKKworCQkJCWNvbnNj YW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uRGVzYywgQ29uc3RyYWludFJlbGlkVHlwaWROYW1l SW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkJCQkJIE5VTEwsIDMsIHNrZXkpOworCQkJCWlmICghSGVh cFR1cGxlSXNWYWxpZChjb250dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoY29uc2NhbikpKQorCQkJ CQllbG9nKEVSUk9SLCAiY29uc3RyYWludCBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMg bm90IGV4aXN0IiwKKwkJCQkJCSBjb25zdHJfbmFtZSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSk7CisKKwkJCQlvYmplY3QuY2xhc3NJZCA9IENvbnN0cmFpbnRSZWxhdGlvbklkOworCQkJ CW9iamVjdC5vYmplY3RJZCA9ICgoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29udHVw bGUpKS0+b2lkOworCQkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisKKwkJCQkvKiByZWNvcmQg ZGVwZW5kZW5jeSBmb3IgY29uc3RyYWludHMgdGhhdCByZWZlcmVuY2VzIHdob2xlLXJvdyAqLwor CQkJCXJlY29yZERlcGVuZGVuY3lPbigmb2JqZWN0LCAmdG1wb2JqZWN0LCBERVBFTkRFTkNZX0FV VE8pOworCisJCQkJc3lzdGFibGVfZW5kc2Nhbihjb25zY2FuKTsKKwkJCQl0YWJsZV9jbG9zZShj b25EZXNjLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQl9CisJfQorCisJaW5kZXhsaXN0ID0g UmVsYXRpb25HZXRJbmRleExpc3QocmVsKTsKKwlmb3JlYWNoX29pZChpbmRleG9pZCwgaW5kZXhs aXN0KQorCXsKKwkJSGVhcFR1cGxlCWluZGV4VHVwbGU7CisJCUZvcm1fcGdfaW5kZXggaW5kZXhT dHJ1Y3Q7CisJCU5vZGUJICAgKm5vZGU7CisJCWJvb2wJCWZvdW5kX3dob2xlX3JvdyA9IGZhbHNl OworCisJCWluZGV4VHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwgT2JqZWN0SWRH ZXREYXR1bShpbmRleG9pZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaW5kZXhUdXBsZSkp CisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggJXUiLCBpbmRl eG9pZCk7CisJCWluZGV4U3RydWN0ID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChpbmRleFR1 cGxlKTsKKworCQlpZiAoIWhlYXBfYXR0aXNudWxsKGluZGV4VHVwbGUsIEFudW1fcGdfaW5kZXhf aW5kcHJlZCwgTlVMTCkpCisJCXsKKwkJCURhdHVtCQlwcmVkRGF0dW07CisJCQljaGFyCSAgICpw cmVkU3RyaW5nOworCQkJQml0bWFwc2V0ICAqZXhwcl9hdHRycyA9IE5VTEw7CisKKwkJCS8qIENv bnZlcnQgdGV4dCBzdHJpbmcgdG8gbm9kZSB0cmVlICovCisJCQlwcmVkRGF0dW0gPSBTeXNDYWNo ZUdldEF0dHJOb3ROdWxsKElOREVYUkVMSUQsIGluZGV4VHVwbGUsCisJCQkJCQkJCQkJCSAgIEFu dW1fcGdfaW5kZXhfaW5kcHJlZCk7CisJCQlwcmVkU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmlu ZyhwcmVkRGF0dW0pOworCQkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5n KTsKKwkJCXBmcmVlKHByZWRTdHJpbmcpOworCisJCQlwdWxsX3ZhcmF0dG5vcyhub2RlLCAxLCAm ZXhwcl9hdHRycyk7CisJCQlpZiAoYm1zX2lzX21lbWJlcigwIC0gRmlyc3RMb3dJbnZhbGlkSGVh cEF0dHJpYnV0ZU51bWJlciwgZXhwcl9hdHRycykpCisJCQl7CisJCQkJb2JqZWN0LmNsYXNzSWQg PSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQkJb2JqZWN0Lm9iamVjdElkID0gaW5kZXhTdHJ1Y3Qt PmluZGV4cmVsaWQ7CisJCQkJb2JqZWN0Lm9iamVjdFN1YklkID0gMDsKKwkJCQkvKiByZWNvcmQg ZGVwZW5kZW5jeSBmb3IgaW5kZXhlcyB0aGF0IHJlZmVyZW5jZXMgd2hvbGUtcm93ICovCisJCQkJ cmVjb3JkRGVwZW5kZW5jeU9uKCZvYmplY3QsICZ0bXBvYmplY3QsIERFUEVOREVOQ1lfQVVUTyk7 CisJCQkJZm91bmRfd2hvbGVfcm93ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQkKKwkJaWYgKCFmb3Vu ZF93aG9sZV9yb3cgJiYgIWhlYXBfYXR0aXNudWxsKGluZGV4VHVwbGUsIEFudW1fcGdfaW5kZXhf aW5kZXhwcnMsIE5VTEwpKQorCQl7CisJCQlEYXR1bQkJZXhwckRhdHVtOworCQkJY2hhcgkgICAq ZXhwclN0cmluZzsKKwkJCUJpdG1hcHNldCAgKmV4cHJfYXR0cnMgPSBOVUxMOworCisJCQkvKiBD b252ZXJ0IHRleHQgc3RyaW5nIHRvIG5vZGUgdHJlZSAqLworCQkJZXhwckRhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyTm90TnVsbChJTkRFWFJFTElELCBpbmRleFR1cGxlLAorCQkJCQkJCQkJCQkgICBB bnVtX3BnX2luZGV4X2luZGV4cHJzKTsKKwkJCWV4cHJTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3Ry aW5nKGV4cHJEYXR1bSk7CisJCQlub2RlID0gKE5vZGUgKikgc3RyaW5nVG9Ob2RlKGV4cHJTdHJp bmcpOworCQkJcGZyZWUoZXhwclN0cmluZyk7CisKKwkJCXB1bGxfdmFyYXR0bm9zKG5vZGUsIDEs ICZleHByX2F0dHJzKTsKKworCQkJaWYgKGJtc19pc19tZW1iZXIoMCAtIEZpcnN0TG93SW52YWxp ZEhlYXBBdHRyaWJ1dGVOdW1iZXIsIGV4cHJfYXR0cnMpKQorCQkJeworCQkJCW9iamVjdC5jbGFz c0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJCW9iamVjdC5vYmplY3RJZCA9IGluZGV4U3Ry dWN0LT5pbmRleHJlbGlkOworCQkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJCQkJLyogcmVj b3JkIGRlcGVuZGVuY3kgZm9yIGluZGV4ZXMgdGhhdCByZWZlcmVuY2VzIHdob2xlLXJvdyAqLwor CQkJCXJlY29yZERlcGVuZGVuY3lPbigmb2JqZWN0LCAmdG1wb2JqZWN0LCBERVBFTkRFTkNZX0FV VE8pOworCQkJfQorCQl9CisJCVJlbGVhc2VTeXNDYWNoZShpbmRleFR1cGxlKTsKKwl9CisKKwlw Z19wb2xpY3kgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJU2NhbktleUluaXQoJnNrZXlbMF0sCisJCQkJQW51bV9wZ19wb2xpY3lfcG9scmVsaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0o UmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJc3NjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdf cG9saWN5LAorCQkJCQkJCSAgIFBvbGljeVBvbHJlbGlkUG9sbmFtZUluZGV4SWQsIHRydWUsIE5V TEwsIDEsCisJCQkJCQkJICAgc2tleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChwb2xp Y3lfdHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNzY2FuKSkpCisJeworCQlEYXR1bQkJZGF0dW07 CisJCWJvb2wJCWlzbnVsbDsKKwkJY2hhcgkgICAqc3RyX3ZhbHVlOworCQlCaXRtYXBzZXQgICpl eHByX2F0dHJzID0gTlVMTDsKKworCQlGb3JtX3BnX3BvbGljeSBwb2xpY3kgPSAoRm9ybV9wZ19w b2xpY3kpIEdFVFNUUlVDVChwb2xpY3lfdHVwbGUpOworCQkvKiBHZXQgcG9saWN5IHF1YWwgKi8K KwkJZGF0dW0gPSBoZWFwX2dldGF0dHIocG9saWN5X3R1cGxlLCBBbnVtX3BnX3BvbGljeV9wb2xx dWFsLAorCQkJCQkJCSBSZWxhdGlvbkdldERlc2NyKHBnX3BvbGljeSksICZpc251bGwpOworCQlp ZiAoIWlzbnVsbCkKKwkJeworCQkJc3RyX3ZhbHVlID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1 bSk7CisJCQlleHByID0gKE5vZGUgKikgc3RyaW5nVG9Ob2RlKHN0cl92YWx1ZSk7CisJCQlwZnJl ZShzdHJfdmFsdWUpOworCisJCQlwdWxsX3ZhcmF0dG5vcyhleHByLCAxLCAmZXhwcl9hdHRycyk7 CisJCQlpZiAoYm1zX2lzX21lbWJlcigwIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51 bWJlciwgZXhwcl9hdHRycykpCisJCQl7CisJCQkJb2JqZWN0LmNsYXNzSWQgPSBQb2xpY3lSZWxh dGlvbklkOworCQkJCW9iamVjdC5vYmplY3RJZCA9IHBvbGljeS0+b2lkOworCQkJCW9iamVjdC5v YmplY3RTdWJJZCA9IDA7CisKKwkJCQlyZWNvcmREZXBlbmRlbmN5T24oJm9iamVjdCwgJnRtcG9i amVjdCwgREVQRU5ERU5DWV9OT1JNQUwpOworCQkJCS8qIHdlIG9ubHkgbmVlZCBvbmUgZGVwZW5k ZW5jeSBlbnRyeSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJZGF0dW0gPSBoZWFw X2dldGF0dHIocG9saWN5X3R1cGxlLCBBbnVtX3BnX3BvbGljeV9wb2x3aXRoY2hlY2ssCisJCQkJ CQkJIFJlbGF0aW9uR2V0RGVzY3IocGdfcG9saWN5KSwgJmlzbnVsbCk7CisJCWlmICghaXNudWxs KQorCQl7CisJCQlzdHJfdmFsdWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKwkJCWV4 cHIgPSAoTm9kZSAqKSBzdHJpbmdUb05vZGUoc3RyX3ZhbHVlKTsKKwkJCXBmcmVlKHN0cl92YWx1 ZSk7CisKKwkJCXB1bGxfdmFyYXR0bm9zKGV4cHIsIDEsICZleHByX2F0dHJzKTsKKwkJCWlmIChi bXNfaXNfbWVtYmVyKDAgLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyLCBleHBy X2F0dHJzKSkKKwkJCXsKKwkJCQlvYmplY3QuY2xhc3NJZCA9IFBvbGljeVJlbGF0aW9uSWQ7CisJ CQkJb2JqZWN0Lm9iamVjdElkID0gcG9saWN5LT5vaWQ7CisJCQkJb2JqZWN0Lm9iamVjdFN1Yklk ID0gMDsKKworCQkJCXJlY29yZERlcGVuZGVuY3lPbigmb2JqZWN0LCAmdG1wb2JqZWN0LCBERVBF TkRFTkNZX05PUk1BTCk7CisJCQl9CisJCX0KKwl9CisJc3lzdGFibGVfZW5kc2Nhbihzc2Nhbik7 CisJdGFibGVfY2xvc2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOworCUNvbW1hbmRDb3Vu dGVySW5jcmVtZW50KCk7CisKIAkvKgogCSAqIFByb3BhZ2F0ZSB0byBjaGlsZHJlbiBhcyBhcHBy b3ByaWF0ZS4gIFVubGlrZSBtb3N0IG90aGVyIEFMVEVSCiAJICogcm91dGluZXMsIHdlIGhhdmUg dG8gZG8gdGhpcyBvbmUgbGV2ZWwgb2YgcmVjdXJzaW9uIGF0IGEgdGltZTsgd2UgY2FuJ3QKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29uc3RyYWludHMub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50cy5vdXQKaW5kZXggMzU5MGQzMjc0ZjAu LmNlMmZiMDI5NzFmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0 cmFpbnRzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91 dApAQCAtMjU0LDYgKzI1NCwyMyBAQCBFUlJPUjogIHN5c3RlbSBjb2x1bW4gImN0aWQiIHJlZmVy ZW5jZSBpbiBjaGVjayBjb25zdHJhaW50IGlzIGludmFsaWQKIExJTkUgMzogICAgICAgQ0hFQ0sg KE5PVCAoaXNfY2FwaXRhbCBBTkQgY3RpZDo6dGV4dCA9ICdzeXNfY29sX2NoZWNrLi4uCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIC0tCistLSBEcm9wIGNvbHVt biBhbHNvIGRyb3AgdGhlIGFzc29jaWF0ZWQgQ2hlY2sgY29uc3RyYWludHMgYW5kIHdob2xlLXJv dyByZWZlcmVuY2VkIGNoZWNrIGNvbnN0cmFpbnQKKy0tCitDUkVBVEUgVEFCTEUgRFJPUF9DT0xf Q0hFQ0tfVEJMICgKKyAgICBjaXR5IHRleHQsIHN0YXRlIHRleHQsIGlzX2NhcGl0YWwgYm9vbCwg YWx0aXR1ZGUgaW50LAorICAgIENPTlNUUkFJTlQgY2MgQ0hFQ0sgKGNpdHkgaXMgbm90IG51bGwp LAorICAgIENPTlNUUkFJTlQgY2MxIENIRUNLIChEUk9QX0NPTF9DSEVDS19UQkwgaXMgbm90IG51 bGwpKTsKK0FMVEVSIFRBQkxFIERST1BfQ09MX0NIRUNLX1RCTCBEUk9QIENPTFVNTiBjaXR5Owor XGQgRFJPUF9DT0xfQ0hFQ0tfVEJMCisgICAgICAgICAgIFRhYmxlICJwdWJsaWMuZHJvcF9jb2xf Y2hlY2tfdGJsIgorICAgQ29sdW1uICAgfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUg fCBEZWZhdWx0IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLQorIHN0YXRlICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAg fCAKKyBpc19jYXBpdGFsIHwgYm9vbGVhbiB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYWx0 aXR1ZGUgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorCitEUk9QIFRBQkxF IERST1BfQ09MX0NIRUNLX1RCTDsKKy0tCiAtLSBDaGVjayBpbmhlcml0YW5jZSBvZiBkZWZhdWx0 cyBhbmQgY29uc3RyYWludHMKIC0tCiBDUkVBVEUgVEFCTEUgSU5TRVJUX0NISUxEIChjeCBJTlQg ZGVmYXVsdCA0MiwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhp bmcub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQKaW5kZXggNGQy OWZiODUyOTMuLmVjMzI1NDNjMWU0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2luZGV4aW5nLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5n Lm91dApAQCAtNjU0LDYgKzY1NCwzMSBAQCBhbHRlciB0YWJsZSBpZHhwYXJ0MiBkcm9wIGNvbHVt biBjOwogIGIgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAogCiBkcm9w IHRhYmxlIGlkeHBhcnQsIGlkeHBhcnQyOworY3JlYXRlIHRhYmxlIGlkeHBhcnQgKGEgaW50LCBi IGludCwgYyBpbnQpOworY3JlYXRlIGluZGV4IG9uIGlkeHBhcnQoYyk7CitjcmVhdGUgaW5kZXgg b24gaWR4cGFydCgoaWR4cGFydCBpcyBub3QgbnVsbCkpOworY3JlYXRlIGluZGV4IG9uIGlkeHBh cnQoYSkgd2hlcmUgaWR4cGFydCBpcyBub3QgbnVsbDsKK1xkIGlkeHBhcnQKKyAgICAgICAgICAg ICAgVGFibGUgInB1YmxpYy5pZHhwYXJ0IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24g fCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAg ICAgfCAKKyBiICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBjICAg ICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImlk eHBhcnRfYV9pZHgiIGJ0cmVlIChhKSBXSEVSRSBpZHhwYXJ0LiogSVMgTk9UIE5VTEwKKyAgICAi aWR4cGFydF9jX2lkeCIgYnRyZWUgKGMpCisgICAgImlkeHBhcnRfZXhwcl9pZHgiIGJ0cmVlICgo aWR4cGFydC4qIElTIE5PVCBOVUxMKSkKKworYWx0ZXIgdGFibGUgaWR4cGFydCBkcm9wIGNvbHVt biBjOworXGQgaWR4cGFydAorICAgICAgICAgICAgICBUYWJsZSAicHVibGljLmlkeHBhcnQiCisg Q29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQorIGEgICAgICB8 IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIGIgICAgICB8IGludGVnZXIgfCAg ICAgICAgICAgfCAgICAgICAgICB8IAorCitkcm9wIHRhYmxlIGlkeHBhcnQ7CiAtLSBWZXJpZnkg dGhhdCBleHByZXNzaW9uIGluZGV4ZXMgaW5oZXJpdCBjb3JyZWN0bHkKIGNyZWF0ZSB0YWJsZSBp ZHhwYXJ0IChhIGludCwgYiBpbnQpIHBhcnRpdGlvbiBieSByYW5nZSAoYSk7CiBjcmVhdGUgdGFi bGUgaWR4cGFydDEgKGxpa2UgaWR4cGFydCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93 c2VjdXJpdHkub3V0CmluZGV4IDhjODc5NTA5MzEzLi5mZWJlNjUzOGU0NyAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQKQEAgLTI2LDYgKzI2LDI3IEBAIEdSQU5U IHJlZ3Jlc3NfcmxzX2dyb3VwMiBUTyByZWdyZXNzX3Jsc19jYXJvbDsKIENSRUFURSBTQ0hFTUEg cmVncmVzc19ybHNfc2NoZW1hOwogR1JBTlQgQUxMIE9OIFNDSEVNQSByZWdyZXNzX3Jsc19zY2hl bWEgdG8gcHVibGljOwogU0VUIHNlYXJjaF9wYXRoID0gcmVncmVzc19ybHNfc2NoZW1hOworLS1j aGVjayBkcm9wIGNvbHVtbiBhbHNvIGRyb3Agd2hvbGUtcm93IHJlZmVyZW5jZXMgcG9saWN5CitD UkVBVEUgVEFCTEUgcmxzX3RibCAoYSBpbnQsIGIgaW50LCBjIGludCwgQ09OU1RSQUlOVCBjYzEg Q0hFQ0sgKHJsc190YmwgSVMgTk9UIE5VTEwpKTsKK0NSRUFURSBQT0xJQ1kgcDEgT04gcmxzX3Ri bCBVU0lORyAocmxzX3RibCA+PSBST1coMSwxLDEpKTsKK0NSRUFURSBQT0xJQ1kgcDIgT04gcmxz X3RibCBVU0lORyAocmxzX3RibC5iID0gMSk7CitBTFRFUiBUQUJMRSBybHNfdGJsIERST1AgQ09M VU1OIGI7CitFUlJPUjogIGNhbm5vdCBkcm9wIGNvbHVtbiBiIG9mIHRhYmxlIHJsc190YmwgYmVj YXVzZSBvdGhlciBvYmplY3RzIGRlcGVuZCBvbiBpdAorREVUQUlMOiAgcG9saWN5IHAxIG9uIHRh YmxlIHJsc190YmwgZGVwZW5kcyBvbiBjb2x1bW4gYiBvZiB0YWJsZSBybHNfdGJsCitwb2xpY3kg cDIgb24gdGFibGUgcmxzX3RibCBkZXBlbmRzIG9uIGNvbHVtbiBiIG9mIHRhYmxlIHJsc190YmwK K0hJTlQ6ICBVc2UgRFJPUCAuLi4gQ0FTQ0FERSB0byBkcm9wIHRoZSBkZXBlbmRlbnQgb2JqZWN0 cyB0b28uCitBTFRFUiBUQUJMRSBybHNfdGJsIERST1AgQ09MVU1OIGIgQ0FTQ0FERTsKK05PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gMiBvdGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2Nh ZGVzIHRvIHBvbGljeSBwMSBvbiB0YWJsZSBybHNfdGJsCitkcm9wIGNhc2NhZGVzIHRvIHBvbGlj eSBwMiBvbiB0YWJsZSBybHNfdGJsCitcZCBybHNfdGJsCisgICAgICAgIFRhYmxlICJyZWdyZXNz X3Jsc19zY2hlbWEucmxzX3RibCIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVs bGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwg CisgYyAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisKK0RST1AgVEFC TEUgcmxzX3RibDsKIC0tIHNldHVwIG9mIG1hbGljaW91cyBmdW5jdGlvbgogQ1JFQVRFIE9SIFJF UExBQ0UgRlVOQ1RJT04gZl9sZWFrKHRleHQpIFJFVFVSTlMgYm9vbAogICAgIENPU1QgMC4wMDAw MDAxIExBTkdVQUdFIHBscGdzcWwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Nv bnN0cmFpbnRzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFpbnRzLnNxbAppbmRl eCAxZjZkYzhmZDY5Zi4uNTQ1ZjhmYTE3YTMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvbnN0cmFpbnRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb25zdHJhaW50 cy5zcWwKQEAgLTE2NSw2ICsxNjUsMTcgQEAgQ1JFQVRFIFRBQkxFIFNZU19DT0xfQ0hFQ0tfVEJM IChjaXR5IHRleHQsIHN0YXRlIHRleHQsIGlzX2NhcGl0YWwgYm9vbCwKICAgICAgICAgICAgICAg ICAgIGFsdGl0dWRlIGludCwKIAkJCQkgIENIRUNLIChOT1QgKGlzX2NhcGl0YWwgQU5EIGN0aWQ6 OnRleHQgPSAnc3lzX2NvbF9jaGVja190YmwnKSkpOwogCistLQorLS0gRHJvcCBjb2x1bW4gYWxz byBkcm9wIHRoZSBhc3NvY2lhdGVkIENoZWNrIGNvbnN0cmFpbnRzIGFuZCB3aG9sZS1yb3cgcmVm ZXJlbmNlZCBjaGVjayBjb25zdHJhaW50CistLQorQ1JFQVRFIFRBQkxFIERST1BfQ09MX0NIRUNL X1RCTCAoCisgICAgY2l0eSB0ZXh0LCBzdGF0ZSB0ZXh0LCBpc19jYXBpdGFsIGJvb2wsIGFsdGl0 dWRlIGludCwKKyAgICBDT05TVFJBSU5UIGNjIENIRUNLIChjaXR5IGlzIG5vdCBudWxsKSwKKyAg ICBDT05TVFJBSU5UIGNjMSBDSEVDSyAoRFJPUF9DT0xfQ0hFQ0tfVEJMIGlzIG5vdCBudWxsKSk7 CitBTFRFUiBUQUJMRSBEUk9QX0NPTF9DSEVDS19UQkwgRFJPUCBDT0xVTU4gY2l0eTsKK1xkIERS T1BfQ09MX0NIRUNLX1RCTAorRFJPUCBUQUJMRSBEUk9QX0NPTF9DSEVDS19UQkw7CisKIC0tCiAt LSBDaGVjayBpbmhlcml0YW5jZSBvZiBkZWZhdWx0cyBhbmQgY29uc3RyYWludHMKIC0tCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmRleGluZy5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9pbmRleGluZy5zcWwKaW5kZXggYjVjYjAxYzJkNzAuLjgyNTYyNWIwMWI2IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmRleGluZy5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvaW5kZXhpbmcuc3FsCkBAIC0yOTUsNiArMjk1LDE1IEBAIGFsdGVyIHRhYmxl IGlkeHBhcnQyIGRyb3AgY29sdW1uIGM7CiBcZCBpZHhwYXJ0MgogZHJvcCB0YWJsZSBpZHhwYXJ0 LCBpZHhwYXJ0MjsKIAorY3JlYXRlIHRhYmxlIGlkeHBhcnQgKGEgaW50LCBiIGludCwgYyBpbnQp OworY3JlYXRlIGluZGV4IG9uIGlkeHBhcnQoYyk7CitjcmVhdGUgaW5kZXggb24gaWR4cGFydCgo aWR4cGFydCBpcyBub3QgbnVsbCkpOworY3JlYXRlIGluZGV4IG9uIGlkeHBhcnQoYSkgd2hlcmUg aWR4cGFydCBpcyBub3QgbnVsbDsKK1xkIGlkeHBhcnQKK2FsdGVyIHRhYmxlIGlkeHBhcnQgZHJv cCBjb2x1bW4gYzsKK1xkIGlkeHBhcnQKK2Ryb3AgdGFibGUgaWR4cGFydDsKKwogLS0gVmVyaWZ5 IHRoYXQgZXhwcmVzc2lvbiBpbmRleGVzIGluaGVyaXQgY29ycmVjdGx5CiBjcmVhdGUgdGFibGUg aWR4cGFydCAoYSBpbnQsIGIgaW50KSBwYXJ0aXRpb24gYnkgcmFuZ2UgKGEpOwogY3JlYXRlIHRh YmxlIGlkeHBhcnQxIChsaWtlIGlkeHBhcnQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcm93c2VjdXJpdHkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcm93c2VjdXJpdHku c3FsCmluZGV4IDIxYWMwY2E1MWVlLi4yMTc4NGY4NjI0NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcm93c2VjdXJpdHkuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jv d3NlY3VyaXR5LnNxbApAQCAtMzUsNiArMzUsMTUgQEAgQ1JFQVRFIFNDSEVNQSByZWdyZXNzX3Js c19zY2hlbWE7CiBHUkFOVCBBTEwgT04gU0NIRU1BIHJlZ3Jlc3NfcmxzX3NjaGVtYSB0byBwdWJs aWM7CiBTRVQgc2VhcmNoX3BhdGggPSByZWdyZXNzX3Jsc19zY2hlbWE7CiAKKy0tY2hlY2sgZHJv cCBjb2x1bW4gYWxzbyBkcm9wIHdob2xlLXJvdyByZWZlcmVuY2VzIHBvbGljeQorQ1JFQVRFIFRB QkxFIHJsc190YmwgKGEgaW50LCBiIGludCwgYyBpbnQsIENPTlNUUkFJTlQgY2MxIENIRUNLIChy bHNfdGJsIElTIE5PVCBOVUxMKSk7CitDUkVBVEUgUE9MSUNZIHAxIE9OIHJsc190YmwgVVNJTkcg KHJsc190YmwgPj0gUk9XKDEsMSwxKSk7CitDUkVBVEUgUE9MSUNZIHAyIE9OIHJsc190YmwgVVNJ TkcgKHJsc190YmwuYiA9IDEpOworQUxURVIgVEFCTEUgcmxzX3RibCBEUk9QIENPTFVNTiBiOwor QUxURVIgVEFCTEUgcmxzX3RibCBEUk9QIENPTFVNTiBiIENBU0NBREU7CitcZCBybHNfdGJsCitE Uk9QIFRBQkxFIHJsc190Ymw7CisKIC0tIHNldHVwIG9mIG1hbGljaW91cyBmdW5jdGlvbgogQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZl9sZWFrKHRleHQpIFJFVFVSTlMgYm9vbAogICAgIENP U1QgMC4wMDAwMDAxIExBTkdVQUdFIHBscGdzcWwKLS0gCjIuMzQuMQoK --0000000000003279c3063e55af88--