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 1whkrV-000OyI-2W for pgsql-bugs@arkaria.postgresql.org; Thu, 09 Jul 2026 09:16:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whkrU-00CAjf-10 for pgsql-bugs@arkaria.postgresql.org; Thu, 09 Jul 2026 09:16:05 +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 1whkrT-00CAjX-2c for pgsql-bugs@lists.postgresql.org; Thu, 09 Jul 2026 09:16:04 +0000 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whkrS-00000000IHv-2NNE for pgsql-bugs@lists.postgresql.org; Thu, 09 Jul 2026 09:16:03 +0000 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-448df16ab34so265182fac.1 for ; Thu, 09 Jul 2026 02:16:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783588562; cv=none; d=google.com; s=arc-20260327; b=RpXU5kwFp0h4ki52PQ6RdoWv3waKgKMLERxwunyVpJvM0WOqvlc984N5ca2gkIaBJT Lz2MptL7tEh4RTdWVuUa6iQwgl4Vbg/VWBWVRGjKTAoPXqp9cjnSzYRNGyG3uyEkfuwC awaX5saV1eEnjNEw+aHtRCpx/y1uObhuOOaCkmBFfZ14n7vtQ+rowaBhA3KuFtX3P7Vu CuNbKwZrACo3S8jkBQpIEoSQw5O7kd4clChrZY3WjGmcYZS9veoYZv9BxWY+ONiZZ8oF ZXVoIEoce4dCtRmmsG1vLy4732cbYd+DSqUXl+6cyOcEkOBH6huszDYR92kqA/vW80c8 P2Hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=VCOfbJH6nEiMEFHtPGFwdQcwdLZR+6UsMuyyWc6AlGE=; fh=/gQe77b11iMZdcPj/nJr/Ghqi6rQp5FPrPbdO93bmOA=; b=ak3MJWKxg1RznnmS07IktRoJYMibK3GzCX0l4x3VeZuM3/7adXqMXHRn2GO/8Wjgcg f9X00dSY42rVwXjldzILxCJfNo+BXe2PRQT4A0xdGbhzOr7oEp4Z1QdgUhV1AtS+mwZ0 QEY/DsoIJv9Yx4qSCNMzCf6Fm3zDHuGeDXC1jE5M9WkziynnnnQcrEv4JpITU0ai88Gw eVgHadbS0KNpTCUKReKExSc8yi3MNpgEpASeNzBlNROTGwE8MYOIOgI8FabCCY7ZHslv VqfInUzEVtBRUAUBuyLT+3Z77ybkFFkjsNp3pbC4USmeS9DHdslXowSPnIkN38JJS00d Qk+g==; 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=gmail.com; s=20251104; t=1783588562; x=1784193362; darn=lists.postgresql.org; h=content-type:to:subject:message-id:date:from:mime-version:from:to :cc:subject:date:message-id:reply-to:content-type; bh=VCOfbJH6nEiMEFHtPGFwdQcwdLZR+6UsMuyyWc6AlGE=; b=nZwtKJPX8ewfoKIrAcN4PijCL3cxJiB7yy6sXbkWCtfK6JepSesa3atIWvg2o1JUIf P4lB/lrir+cLSgzI7Io8cjqDDEXQcpdyhF8csq2SVS4zQYpiJi5U6NIpoboDsVMkWmIe 6EWQHWlu2BHoYRh04FUfvCe1iVxONMolTcSkihNFyNw/WJGbXeHJ563RHZ3dk4zueQcw USl/0MmwaCjjsMZ0KGUP1gCMFiwBG3L4lFrLNU3z+0dhc/QVVpiudtnWevyknFEFl3Dw cSZBlvzQg4HhyuEZLkXrTS4farojNOOIa+97UiCv6yhl6Kaz301rIgw/K+gqQpRFgeqL Kq4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783588562; x=1784193362; h=content-type:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=VCOfbJH6nEiMEFHtPGFwdQcwdLZR+6UsMuyyWc6AlGE=; b=It3bOc1wWVIeDih8CSNGzGsr7gTx/QoEG+TgORpMxqwDUGoHPSF4YWaHuWDRMCDgbr XyV9e9T9dMY9iLjxxyL1NOhwBc8oH1rsuiPF5M/biVVx6Zxl22qd9LhWWAYEb20lyL7E 1/1LruEMv4J/cmZpnDf6cj2Taqfu4pVeHI3sw0QHR8Y8tQVZrjDZG3lHaN6FjmDMNZa2 cHY76LeFZyjOfeI09iCYjq/ss//xKREdl8Nx70q6OouLsdNOt8N6czN136oijNrUY/xF W/u0ll98XQmra1JSDHU3kvtE+ChoZtP3OTHTFGXI3QQLO9XFzFMp+ZbYd1zX9IKMi9Xh bRCw== X-Gm-Message-State: AOJu0YysHYo0gZcdIimlOt1cuJ1qYpGW0JWM8PbOSUH532fp4bHmFHbp /S5P/WDp2ZHSveoDTv9ruNqhRsynIUR9JDIKIVCqLYoQd6v7ljO3JdL8tXBI2rikn+TXwbiO65n /pz2mziTDqdPRmQIwReXjfPr1RgXSCyQZF7o5wVE= X-Gm-Gg: AfdE7cnsj5q4w1k/+w8ZZhSC/BNf6LkOFy6GjfRuU3E9Qw1H7OassOOT5sGHSOURFzo kOhxqLKZYpdjZdWIIIOJCPvodSsWPYPJ0sxLLYqDpe9QY3vmr8qC+En5PFC7+gTSm7GQHQlKZpq NqDF5X5z8Mq5t2+0VNIbkwWlVGll5VokjCGu5M5Jr2vPjo3KF7ztpHnfWypfBUe7LQ+a9ldqAV3 ToMkFTk0mMXWoukRNfXCt1oVLbAQXnZ4f5GJP502/ZRDkLd82BHc2XHzM1rpgp9Bp8GBCSiV4hc yhN96qY= X-Received: by 2002:a05:6820:1622:b0:6a3:7ba7:f594 with SMTP id 006d021491bc7-6a37ba82975mr2054003eaf.72.1783588561911; Thu, 09 Jul 2026 02:16:01 -0700 (PDT) MIME-Version: 1.0 From: Vismay Tiwari Date: Thu, 9 Jul 2026 14:45:50 +0530 X-Gm-Features: AVVi8CcPVH7IaeW9ySkzyH5CHoXhxdVFD9DhwaiTUiiXKUiRqyu7y2CC_M6BrfI Message-ID: Subject: Re: BUG #19507: Auto-named partition table constraint conflicts To: pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000a89d1806562a12be" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a89d1806562a12be Content-Type: text/plain; charset="UTF-8" Hi, Thanks for the report, Marko. I could reproduce both cases on current master. The root of it is that when the constraint name is auto-generated for the partitioned parent, ChooseConstraintName only checks for a clash within the parent's own schema. So a partition sitting in another schema that already has a constraint by that name isn't noticed, and the name then collides once it's propagated down. A same-schema partition doesn't trip this, because the namespace-scoped lookup already sees that one and picks a non-conflicting name; that makes it specific to partitions in other schemas. The attached patch gathers the constraint names already present on the descendants and passes them to ChooseConstraintName as names to avoid, so the generated name comes out unique across the whole hierarchy. I deliberately kept those names out of the checknames/nnnames lists, since those also drive the duplicate check for explicitly-named constraints, and folding them in would break legitimate merges of same-named inherited constraints. It's guarded on relhassubclass, so there's no extra work for tables without children. I added a regression test in constraints.sql covering both the SET NOT NULL and ADD CHECK cases; make check passes. One thing I didn't chase down: foreign-key names go through a similar auto-naming path, so they may have the same issue. I haven't tested that, so I'm flagging it in case it's worth a look. Regards, Vismay Tiwari --000000000000a89d1806562a12be Content-Type: application/octet-stream; name="v1-0001-Avoid-auto-generated-constraint-name-collisions-a.patch" Content-Disposition: attachment; filename="v1-0001-Avoid-auto-generated-constraint-name-collisions-a.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrdaiahc0 RnJvbSAyY2RmYTM2NGI5NDA5YzdiZmUyYzQ1YWJjYWRmMmUwYTRiMmNhZTViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB2aXNtYXl0aXdhcmkgPHZpc21heS50QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCA5IEp1bCAyMDI2IDE0OjE5OjQ3ICswNTMwClN1YmplY3Q6IFtQQVRDSCB2MV0gQXZv aWQgYXV0by1nZW5lcmF0ZWQgY29uc3RyYWludCBuYW1lIGNvbGxpc2lvbnMgYWNyb3NzCiBwYXJ0 aXRpb25zCgpXaGVuIGEgTk9UIE5VTEwgb3IgQ0hFQ0sgY29uc3RyYWludCBpcyBhZGRlZCB0byBh IHBhcnRpdGlvbmVkIHRhYmxlIChvcgpvdGhlciBpbmhlcml0YW5jZSBwYXJlbnQpIHdpdGhvdXQg YW4gZXhwbGljaXQgbmFtZSwgdGhlIHBhcmVudCBwaWNrcyBhIG5hbWUKd2l0aCBDaG9vc2VDb25z dHJhaW50TmFtZSBhbmQgdGhlbiBwcm9wYWdhdGVzIHRoYXQgc2FtZSBuYW1lIGRvd24gdG8gYWxs IG9mCml0cyBjaGlsZHJlbi4gIENob29zZUNvbnN0cmFpbnROYW1lIG9ubHkgY2hlY2tzIGZvciBh IGNsYXNoIHdpdGhpbiB0aGUKcGFyZW50J3Mgb3duIHNjaGVtYSwgc28gaWYgYSBjaGlsZCBsaXZp bmcgaW4gYW5vdGhlciBzY2hlbWEgYWxyZWFkeSBoYXMgYQpjb25zdHJhaW50IGJ5IHRoZSBnZW5l cmF0ZWQgbmFtZSwgcHJvcGFnYXRpb24gZmFpbHMgd2l0aAoKICAgIEVSUk9SOiAgY29uc3RyYWlu dCAiLi4uIiBmb3IgcmVsYXRpb24gIi4uLiIgYWxyZWFkeSBleGlzdHMKCmV2ZW4gdGhvdWdoIHRo ZSB1c2VyIG5ldmVyIGNob3NlIHRoZSBjb2xsaWRpbmcgbmFtZS4gIEEgY2hpbGQgaW4gdGhlICpz YW1lKgpzY2hlbWEgZG9lcyBub3QgdHJpZ2dlciB0aGlzLCBiZWNhdXNlIENob29zZUNvbnN0cmFp bnROYW1lJ3MgbmFtZXNwYWNlLXNjb3BlZApzY2FuIGFscmVhZHkgc2VlcyBpdCBhbmQgcGlja3Mg YSBub24tY29uZmxpY3RpbmcgbmFtZTsgdGhlIHByb2JsZW0gaXMKc3BlY2lmaWMgdG8gZGVzY2Vu ZGFudHMgaW4gb3RoZXIgc2NoZW1hcy4KCkZpeCBieSBnYXRoZXJpbmcgdGhlIGNvbnN0cmFpbnQg bmFtZXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSByZWxhdGlvbidzCmRlc2NlbmRhbnRzIGFuZCBw YXNzaW5nIHRoZW0gdG8gQ2hvb3NlQ29uc3RyYWludE5hbWUgYXMgYWRkaXRpb25hbCBuYW1lcyB0 bwphdm9pZCwgc28gdGhlIGdlbmVyYXRlZCBuYW1lIGlzIHVuaXF1ZSBhY3Jvc3MgdGhlIHdob2xl IGhpZXJhcmNoeSByYXRoZXIKdGhhbiBvbmx5IHdpdGhpbiB0aGUgcGFyZW50J3Mgc2NoZW1hLiAg VGhlIGRlc2NlbmRhbnQgbmFtZXMgYXJlIGZlZCBvbmx5IHRvCnRoZSBuYW1lIGdlbmVyYXRvcjsg dGhleSBhcmUgZGVsaWJlcmF0ZWx5IGtlcHQgb3V0IG9mIHRoZSBjaGVja25hbWVzL25ubmFtZXMK bGlzdHMsIHdoaWNoIGFsc28gc2VydmUgYXMgdGhlIGR1cGxpY2F0ZSBjaGVjayBmb3IgZXhwbGlj aXRseS1uYW1lZApjb25zdHJhaW50cyBpbiB0aGUgc2FtZSBjb21tYW5kLCBzbyBsZWdpdGltYXRl IG1lcmdlcyBvZiBzYW1lLW5hbWVkCmluaGVyaXRlZCBjb25zdHJhaW50cyBrZWVwIHdvcmtpbmcu CgpSZXBvcnRlZC1ieTogTWFya28gR3J1amljCkJ1ZzogIzE5NTA3CkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vMTk1MDctNzhlZWM3NzIxM2I1Mjg0ZkBwb3N0Z3Jlc3FsLm9yZwotLS0K IHNyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jICAgICAgICAgICAgICAgIHwgMjEgKysrKysrKysK IHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29uc3RyYWludC5jICAgICAgIHwgNjAgKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAg IHwgMTQgKysrKystCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCAgICAgICB8 ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29uc3RyYWludHMub3V0IHwgMzMgKysr KysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29uc3RyYWludHMuc3FsICAgICAgfCAy NyArKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDE1NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL2hlYXAuYwppbmRleCA4ODA4NzY1Li5jMzA0NzA0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAu YwpAQCAtMjQxOSw2ICsyNDE5LDcgQEAgQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhSZWxhdGlv biByZWwsCiAJaW50CQkJbnVtY2hlY2tzOwogCUxpc3QJICAgKmNoZWNrbmFtZXM7CiAJTGlzdAkg ICAqbm5uYW1lczsKKwlMaXN0CSAgICppbmhlcml0ZWRfbmFtZXM7CiAJTm9kZQkgICAqZXhwcjsK IAlDb29rZWRDb25zdHJhaW50ICpjb29rZWQ7CiAKQEAgLTI0OTksNiArMjUwMCwyMiBAQCBBZGRS ZWxhdGlvbk5ld0NvbnN0cmFpbnRzKFJlbGF0aW9uIHJlbCwKIAludW1jaGVja3MgPSBudW1vbGRj aGVja3M7CiAJY2hlY2tuYW1lcyA9IE5JTDsKIAlubm5hbWVzID0gTklMOworCisJLyoKKwkgKiBJ ZiB0aGUgcmVsYXRpb24gaGFzIGluaGVyaXRhbmNlIGNoaWxkcmVuIChmb3IgZXhhbXBsZSwgaXQg aXMgYQorCSAqIHBhcnRpdGlvbmVkIHRhYmxlKSwgYSBjb25zdHJhaW50IG5hbWUgd2UgZ2VuZXJh dGUgYXV0b21hdGljYWxseSB3aWxsIGJlCisJICogcHJvcGFnYXRlZCBkb3duIHRvIHRob3NlIGNo aWxkcmVuLCB3aGljaCBtYXkgbGl2ZSBpbiBvdGhlciBzY2hlbWFzLgorCSAqIENob29zZUNvbnN0 cmFpbnROYW1lIGFscmVhZHkgYXZvaWRzIG5hbWVzIHVzZWQgYnkgc2FtZS1zY2hlbWEgY2hpbGRy ZW4KKwkgKiAodmlhIGl0cyBuYW1lc3BhY2Utc2NvcGVkIGNoZWNrKSwgYnV0IG5vdCBvbmVzIGlu IG90aGVyIHNjaGVtYXMsIHNvCisJICogZ2F0aGVyIHRoZSBjb25zdHJhaW50IG5hbWVzIHByZXNl bnQgb24gZGVzY2VuZGFudCB0YWJsZXMgYW5kIHBhc3MgdGhlbQorCSAqIHRvIENob29zZUNvbnN0 cmFpbnROYW1lIGJlbG93LiAgVGhhdCBrZWVwcyB0aGUgZ2VuZXJhdGVkIG5hbWUgdW5pcXVlCisJ ICogYWNyb3NzIHRoZSB3aG9sZSBoaWVyYXJjaHkgcmF0aGVyIHRoYW4ganVzdCB0aGlzIHJlbGF0 aW9uJ3Mgc2NoZW1hLgorCSAqIE5vdGUgd2UgbXVzdCBub3QgZm9sZCB0aGVzZSBpbnRvIGNoZWNr bmFtZXMvbm5uYW1lcywgd2hpY2ggZG91YmxlIGFzIHRoZQorCSAqIGR1cGxpY2F0ZSBjaGVjayBm b3IgZXhwbGljaXRseS1uYW1lZCBjb25zdHJhaW50cyBpbiB0aGlzIHNhbWUgY29tbWFuZC4KKwkg Ki8KKwlpbmhlcml0ZWRfbmFtZXMgPSBOSUw7CisJaWYgKHJlbC0+cmRfcmVsLT5yZWxoYXNzdWJj bGFzcykKKwkJaW5oZXJpdGVkX25hbWVzID0gR2V0SW5oZXJpdGVkQ29uc3RyYWludE5hbWVzKFJl bGF0aW9uR2V0UmVsaWQocmVsKSk7CiAJZm9yZWFjaF9ub2RlKENvbnN0cmFpbnQsIGNkZWYsIG5l d0NvbnN0cmFpbnRzKQogCXsKIAkJT2lkCQkJY29uc3RyT2lkOwpAQCAtMjU5Niw2ICsyNjEzLDgg QEAgQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCSAg Y29sbmFtZSwKIAkJCQkJCQkJCQkJICAiY2hlY2siLAogCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0 TmFtZXNwYWNlKHJlbCksCisJCQkJCQkJCQkJCSAgaW5oZXJpdGVkX25hbWVzID8KKwkJCQkJCQkJ CQkJICBsaXN0X2NvbmNhdF9jb3B5KGNoZWNrbmFtZXMsIGluaGVyaXRlZF9uYW1lcykgOgogCQkJ CQkJCQkJCQkgIGNoZWNrbmFtZXMpOwogCiAJCQkJLyogc2F2ZSBuYW1lIGZvciBmdXR1cmUgY2hl Y2tzICovCkBAIC0yNjgwLDYgKzI2OTksOCBAQCBBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKFJl bGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJICBzdHJWYWwobGluaXRpYWwoY2RlZi0+a2V5cykpLAog CQkJCQkJCQkJCQkgICJub3RfbnVsbCIsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXROYW1lc3Bh Y2UocmVsKSwKKwkJCQkJCQkJCQkJICBpbmhlcml0ZWRfbmFtZXMgPworCQkJCQkJCQkJCQkgIGxp c3RfY29uY2F0X2NvcHkobm5uYW1lcywgaW5oZXJpdGVkX25hbWVzKSA6CiAJCQkJCQkJCQkJCSAg bm5uYW1lcyk7CiAJCQlubm5hbWVzID0gbGFwcGVuZChubm5hbWVzLCBubm5hbWUpOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2NvbnN0cmFpbnQuYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfY29uc3RyYWludC5jCmluZGV4IGIxMjc2NWEuLmNkZmY4NGEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29uc3RyYWludC5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfY29uc3RyYWludC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY2F0 YWxvZy9pbmRleGluZy5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWNjZXNzLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhl cml0cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKQEAgLTU3OSw2ICs1 ODAsNjUgQEAgQ2hvb3NlQ29uc3RyYWludE5hbWUoY29uc3QgY2hhciAqbmFtZTEsIGNvbnN0IGNo YXIgKm5hbWUyLAogCXJldHVybiBjb25uYW1lOwogfQogCisvKgorICogQ29sbGVjdCB0aGUgbmFt ZXMgb2YgdGhlIGNvbnN0cmFpbnRzIGRlZmluZWQgb24gdGhlIGluaGVyaXRhbmNlIGNoaWxkcmVu CisgKiAoaW5jbHVkaW5nIHBhcnRpdGlvbnMsIHJlY3Vyc2l2ZWx5KSBvZiB0aGUgZ2l2ZW4gcmVs YXRpb24uCisgKgorICogVGhpcyBpcyBtZWFudCBmb3IgdXNlIHdoZW4gYXV0b21hdGljYWxseSBn ZW5lcmF0aW5nIGEgY29uc3RyYWludCBuYW1lIGZvciBhCisgKiByZWxhdGlvbiB3aG9zZSBjb25z dHJhaW50IHdpbGwgYmUgcHJvcGFnYXRlZCB0byBpdHMgY2hpbGRyZW4uICBTdWNoIGNoaWxkcmVu CisgKiBtYXkgbGl2ZSBpbiBvdGhlciBzY2hlbWFzLCB3aGVyZSBDaG9vc2VDb25zdHJhaW50TmFt ZSdzIG5hbWVzcGFjZS1zY29wZWQKKyAqIHVuaXF1ZW5lc3MgY2hlY2sgd291bGQgbm90IG5vdGlj ZSBhbiBleGlzdGluZyBjb25zdHJhaW50IG9mIHRoZSBzYW1lIG5hbWUuCisgKiBQYXNzaW5nIHRo ZSByZXR1cm5lZCBsaXN0IHRvIENob29zZUNvbnN0cmFpbnROYW1lIChkaXJlY3RseSwgb3IgYnkg c2VlZGluZworICogdGhlIG5hbWUgbGlzdHMgdHJhY2tlZCB3aGlsZSBzZXZlcmFsIGNvbnN0cmFp bnRzIGFyZSBjcmVhdGVkIGF0IG9uY2UpIG1ha2VzCisgKiB0aGUgZ2VuZXJhdGVkIG5hbWUgdW5p cXVlIGFjcm9zcyB0aGUgd2hvbGUgaGllcmFyY2h5LCBub3QganVzdCBvdXIgc2NoZW1hLgorICoK KyAqIE5vIGxvY2tzIGFyZSB0YWtlbiBvbiB0aGUgY2hpbGQgcmVsYXRpb25zIGhlcmUgKG9ubHkg Y2F0YWxvZyBhY2Nlc3MgaXMKKyAqIHBlcmZvcm1lZCk7IGEgY2FsbGVyIGRvaW5nIERETCBhbHJl YWR5IGhvbGRzIGEgc3VpdGFibGUgbG9jayBvbiB0aGUKKyAqIGhpZXJhcmNoeS4gIFRoZSByZXR1 cm5lZCBzdHJpbmdzIGFyZSBwYWxsb2MnZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dC4K KyAqLworTGlzdCAqCitHZXRJbmhlcml0ZWRDb25zdHJhaW50TmFtZXMoT2lkIHJlbGlkKQorewor CUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKwlMaXN0CSAgICpjaGlsZHJlbjsKKwlMaXN0Q2VsbCAg ICpsYzsKKwlSZWxhdGlvbglwZ19jb25zdHJhaW50OworCisJY2hpbGRyZW4gPSBmaW5kX2FsbF9p bmhlcml0b3JzKHJlbGlkLCBOb0xvY2ssIE5VTEwpOworCisJcGdfY29uc3RyYWludCA9IHRhYmxl X29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlmb3JlYWNo KGxjLCBjaGlsZHJlbikKKwl7CisJCU9pZAkJCWNoaWxkcmVsaWQgPSBsZmlyc3Rfb2lkKGxjKTsK KwkJU3lzU2NhbkRlc2Mgc2NhbjsKKwkJU2NhbktleURhdGEga2V5OworCQlIZWFwVHVwbGUJdHVw OworCisJCS8qIGZpbmRfYWxsX2luaGVyaXRvcnMgaW5jbHVkZXMgdGhlIHJlbGF0aW9uIGl0c2Vs Zjsgc2tpcCBpdCAqLworCQlpZiAoY2hpbGRyZWxpZCA9PSByZWxpZCkKKwkJCWNvbnRpbnVlOwor CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwK KwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERh dHVtKGNoaWxkcmVsaWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19jb25zdHJh aW50LCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5V TEwsIDEsICZrZXkpOworCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9n ZXRuZXh0KHNjYW4pKSkKKwkJeworCQkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3Bn X2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0dXApOworCisJCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3Vs dCwgcHN0cmR1cChOYW1lU3RyKGNvbi0+Y29ubmFtZSkpKTsKKwkJfQorCQlzeXN0YWJsZV9lbmRz Y2FuKHNjYW4pOworCX0KKworCXRhYmxlX2Nsb3NlKHBnX2NvbnN0cmFpbnQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogRmluZCBhbmQgcmV0dXJuIGEg Y29weSBvZiB0aGUgcGdfY29uc3RyYWludCB0dXBsZSB0aGF0IGltcGxlbWVudHMgYQogICogKHBv c3NpYmx5IG5vdCB2YWxpZCkgbm90LW51bGwgY29uc3RyYWludCBmb3IgdGhlIGdpdmVuIGNvbHVt biBvZiB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggY2I5M2MzZS4uZmIyZTE2MyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTgxNzQsMTEgKzgxNzQsMjMgQEAgQVRFeGVj U2V0Tm90TnVsbChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNoYXIgKmNvbk5hbWUsIGNo YXIgKmNvbE5hbWUsCiAJICovCiAJaWYgKCFyZWN1cnNpbmcpCiAJeworCQlMaXN0CSAgICpvdGhl cnMgPSBOSUw7CisKIAkJQXNzZXJ0KGNvbk5hbWUgPT0gTlVMTCk7CisKKwkJLyoKKwkJICogSWYg dGhpcyB0YWJsZSBoYXMgaW5oZXJpdGFuY2UgY2hpbGRyZW4sIHRoZSBuYW1lIHdlIGNob29zZSB3 aWxsIGJlCisJCSAqIHByb3BhZ2F0ZWQgdG8gdGhlbSAocG9zc2libHkgYWNyb3NzIHNjaGVtYXMp LCBzbyBhdm9pZCBvbmUgdGhhdAorCQkgKiBjb2xsaWRlcyB3aXRoIGEgY29uc3RyYWludCBhbHJl YWR5IHByZXNlbnQgb24gYSBkZXNjZW5kYW50OworCQkgKiBDaG9vc2VDb25zdHJhaW50TmFtZSBi eSBpdHNlbGYgb25seSBjaGVja3MgdGhpcyB0YWJsZSdzIHNjaGVtYS4KKwkJICovCisJCWlmIChy ZWwtPnJkX3JlbC0+cmVsaGFzc3ViY2xhc3MpCisJCQlvdGhlcnMgPSBHZXRJbmhlcml0ZWRDb25z dHJhaW50TmFtZXMoUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwogCQljb25OYW1lID0gQ2hvb3Nl Q29uc3RyYWludE5hbWUoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKIAkJCQkJCQkJCSAg IGNvbE5hbWUsICJub3RfbnVsbCIsCiAJCQkJCQkJCQkgICBSZWxhdGlvbkdldE5hbWVzcGFjZShy ZWwpLAotCQkJCQkJCQkJICAgTklMKTsKKwkJCQkJCQkJCSAgIG90aGVycyk7CiAJfQogCiAJY29u c3RyYWludCA9IG1ha2VOb3ROdWxsQ29uc3RyYWludChtYWtlU3RyaW5nKGNvbE5hbWUpKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29uc3RyYWludC5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19jb25zdHJhaW50LmgKaW5kZXggMWI3ZmVkZi4uM2I0NDIyOSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb25zdHJhaW50LmgKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19jb25zdHJhaW50LmgKQEAgLTI2Miw2ICsyNjIsNyBAQCBleHRlcm4gYm9v bCBDb25zdHJhaW50TmFtZUV4aXN0cyhjb25zdCBjaGFyICpjb25uYW1lLCBPaWQgbmFtZXNwYWNl aWQpOwogZXh0ZXJuIGNoYXIgKkNob29zZUNvbnN0cmFpbnROYW1lKGNvbnN0IGNoYXIgKm5hbWUx LCBjb25zdCBjaGFyICpuYW1lMiwKIAkJCQkJCQkJICBjb25zdCBjaGFyICpsYWJlbCwgT2lkIG5h bWVzcGFjZWlkLAogCQkJCQkJCQkgIExpc3QgKm90aGVycyk7CitleHRlcm4gTGlzdCAqR2V0SW5o ZXJpdGVkQ29uc3RyYWludE5hbWVzKE9pZCByZWxpZCk7CiAKIGV4dGVybiBIZWFwVHVwbGUgZmlu ZE5vdE51bGxDb25zdHJhaW50QXR0bnVtKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pOwog ZXh0ZXJuIEhlYXBUdXBsZSBmaW5kTm90TnVsbENvbnN0cmFpbnQoT2lkIHJlbGlkLCBjb25zdCBj aGFyICpjb2xuYW1lKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29u c3RyYWludHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50cy5vdXQK aW5kZXggODNmOTdmNi4uYTYzYjVmMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jb25zdHJhaW50cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25z dHJhaW50cy5vdXQKQEAgLTE3OTEsNiArMTc5MSwzOSBAQCBDT01NRU5UIE9OIENPTlNUUkFJTlQg Y29uc3RyX3BhcmVudDJfYV9ub3RfbnVsbCBPTiBjb25zdHJfcGFyZW50MiBJUyAndGhpcyBjb25z dAogQ09NTUVOVCBPTiBDT05TVFJBSU5UIGNvbnN0cl9wYXJlbnQyX2Ffbm90X251bGwgT04gY29u c3RyX2NoaWxkMiBJUyAndGhpcyBjb25zdHJhaW50IGlzIHZhbGlkJzsKIERFQUxMT0NBVEUgZ2V0 X25uY29uc3RyYWludF9pbmZvOwogLS0gZW5kIE5PVCBOVUxMIE5PVCBWQUxJRAorLS0gQW4gYXV0 by1nZW5lcmF0ZWQgY29uc3RyYWludCBuYW1lIGZvciBhIHBhcnRpdGlvbmVkIHRhYmxlIG11c3Qg bm90IGNvbGxpZGUKKy0tIHdpdGggYSBjb25zdHJhaW50IHRoYXQgYWxyZWFkeSBleGlzdHMgb24g YSBwYXJ0aXRpb24gaW4gYW5vdGhlciBzY2hlbWE6IHRoZQorLS0gcGFyZW50IGNob29zZXMgdGhl IG5hbWUsIGJ1dCBDaG9vc2VDb25zdHJhaW50TmFtZSBvbmx5IGNoZWNrcyBmb3IgYSBjbGFzaAor LS0gd2l0aGluIHRoZSBwYXJlbnQncyBvd24gc2NoZW1hIChidWcgIzE5NTA3KS4KK0NSRUFURSBT Q0hFTUEgcmVncmVzc19jb25fcGFydDsKKy0tIHBhcmVudCBTRVQgTk9UIE5VTEwsIHdoZW4gYSBw YXJ0aXRpb24gaW4gYW5vdGhlciBzY2hlbWEgYWxyZWFkeSBoYXMgYQorLS0gY29uc3RyYWludCBi eSB0aGUgYXV0by1nZW5lcmF0ZWQgbm90LW51bGwgbmFtZQorQ1JFQVRFIFRBQkxFIGNvbl9wdDEg KGEgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEpOworQ1JFQVRFIFRBQkxFIHJlZ3Jlc3NfY29u X3BhcnQuY29uX3B0MV8xIFBBUlRJVElPTiBPRiBjb25fcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkg VE8gKDEwKTsKK0FMVEVSIFRBQkxFIHJlZ3Jlc3NfY29uX3BhcnQuY29uX3B0MV8xIEFERCBDT05T VFJBSU5UIGNvbl9wdDFfYV9ub3RfbnVsbCBDSEVDSyAoYSBJUyBOT1QgTlVMTCk7CitBTFRFUiBU QUJMRSBjb25fcHQxIEFMVEVSIENPTFVNTiBhIFNFVCBOT1QgTlVMTDsKKy0tIHBhcmVudCBBREQg Q0hFQ0ssIHdoZW4gc3VjaCBhIHBhcnRpdGlvbiBhbHJlYWR5IGhhcyBhIGNvbnN0cmFpbnQgYnkg dGhlCistLSBhdXRvLWdlbmVyYXRlZCBjaGVjayBuYW1lCitDUkVBVEUgVEFCTEUgY29uX3B0MiAo YSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CitDUkVBVEUgVEFCTEUgcmVncmVzc19jb25f cGFydC5jb25fcHQyXzEgUEFSVElUSU9OIE9GIGNvbl9wdDIgRk9SIFZBTFVFUyBGUk9NICgxKSBU TyAoMTApOworQUxURVIgVEFCTEUgcmVncmVzc19jb25fcGFydC5jb25fcHQyXzEgQUREIENPTlNU UkFJTlQgY29uX3B0Ml9hX2NoZWNrIENIRUNLIChhID4gMTAwKTsKK0FMVEVSIFRBQkxFIGNvbl9w dDIgQUREIENIRUNLIChhID4gMCk7CistLSB0aGUgcGFyZW50J3MgYXV0by1nZW5lcmF0ZWQgbmFt ZXMgd2VyZSB1bmlxdWlmaWVkIHRvIGF2b2lkIHRoZSBjb2xsaXNpb24KK1NFTEVDVCBjb25yZWxp ZDo6cmVnY2xhc3M6OnRleHQgQVMgcGFydGl0aW9uLCBjb25uYW1lLCBjb250eXBlCisgIEZST00g cGdfY29uc3RyYWludAorIFdIRVJFIGNvbnJlbGlkIElOICgncmVncmVzc19jb25fcGFydC5jb25f cHQxXzEnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgJ3JlZ3Jlc3NfY29uX3BhcnQu Y29uX3B0Ml8xJzo6cmVnY2xhc3MpCisgT1JERVIgQlkgMSwgMjsKKyAgICAgICAgIHBhcnRpdGlv biAgICAgICAgICB8ICAgICAgIGNvbm5hbWUgICAgICAgfCBjb250eXBlIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tCisgcmVncmVz c19jb25fcGFydC5jb25fcHQxXzEgfCBjb25fcHQxX2Ffbm90X251bGwgIHwgYworIHJlZ3Jlc3Nf Y29uX3BhcnQuY29uX3B0MV8xIHwgY29uX3B0MV9hX25vdF9udWxsMSB8IG4KKyByZWdyZXNzX2Nv bl9wYXJ0LmNvbl9wdDJfMSB8IGNvbl9wdDJfYV9jaGVjayAgICAgfCBjCisgcmVncmVzc19jb25f cGFydC5jb25fcHQyXzEgfCBjb25fcHQyX2FfY2hlY2sxICAgIHwgYworKDQgcm93cykKKworRFJP UCBUQUJMRSBjb25fcHQxLCBjb25fcHQyOworRFJPUCBTQ0hFTUEgcmVncmVzc19jb25fcGFydDsK IC0tIENvbW1lbnRzCiAtLSBTZXR1cCBhIGxvdy1sZXZlbCByb2xlIHRvIGVuZm9yY2Ugbm9uLXN1 cGVydXNlciBjaGVja3MuCiBDUkVBVEUgUk9MRSByZWdyZXNzX2NvbnN0cmFpbnRfY29tbWVudHM7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb25zdHJhaW50cy5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jb25zdHJhaW50cy5zcWwKaW5kZXggOTcwNTk2Mi4uMWFhODM5NyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29uc3RyYWludHMuc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFpbnRzLnNxbApAQCAtMTA3Miw2ICsxMDcyLDMzIEBA IERFQUxMT0NBVEUgZ2V0X25uY29uc3RyYWludF9pbmZvOwogLS0gZW5kIE5PVCBOVUxMIE5PVCBW QUxJRAogCiAKKy0tIEFuIGF1dG8tZ2VuZXJhdGVkIGNvbnN0cmFpbnQgbmFtZSBmb3IgYSBwYXJ0 aXRpb25lZCB0YWJsZSBtdXN0IG5vdCBjb2xsaWRlCistLSB3aXRoIGEgY29uc3RyYWludCB0aGF0 IGFscmVhZHkgZXhpc3RzIG9uIGEgcGFydGl0aW9uIGluIGFub3RoZXIgc2NoZW1hOiB0aGUKKy0t IHBhcmVudCBjaG9vc2VzIHRoZSBuYW1lLCBidXQgQ2hvb3NlQ29uc3RyYWludE5hbWUgb25seSBj aGVja3MgZm9yIGEgY2xhc2gKKy0tIHdpdGhpbiB0aGUgcGFyZW50J3Mgb3duIHNjaGVtYSAoYnVn ICMxOTUwNykuCitDUkVBVEUgU0NIRU1BIHJlZ3Jlc3NfY29uX3BhcnQ7CistLSBwYXJlbnQgU0VU IE5PVCBOVUxMLCB3aGVuIGEgcGFydGl0aW9uIGluIGFub3RoZXIgc2NoZW1hIGFscmVhZHkgaGFz IGEKKy0tIGNvbnN0cmFpbnQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIG5vdC1udWxsIG5hbWUKK0NS RUFURSBUQUJMRSBjb25fcHQxIChhIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChhKTsKK0NSRUFU RSBUQUJMRSByZWdyZXNzX2Nvbl9wYXJ0LmNvbl9wdDFfMSBQQVJUSVRJT04gT0YgY29uX3B0MSBG T1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCk7CitBTFRFUiBUQUJMRSByZWdyZXNzX2Nvbl9wYXJ0 LmNvbl9wdDFfMSBBREQgQ09OU1RSQUlOVCBjb25fcHQxX2Ffbm90X251bGwgQ0hFQ0sgKGEgSVMg Tk9UIE5VTEwpOworQUxURVIgVEFCTEUgY29uX3B0MSBBTFRFUiBDT0xVTU4gYSBTRVQgTk9UIE5V TEw7CistLSBwYXJlbnQgQUREIENIRUNLLCB3aGVuIHN1Y2ggYSBwYXJ0aXRpb24gYWxyZWFkeSBo YXMgYSBjb25zdHJhaW50IGJ5IHRoZQorLS0gYXV0by1nZW5lcmF0ZWQgY2hlY2sgbmFtZQorQ1JF QVRFIFRBQkxFIGNvbl9wdDIgKGEgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEpOworQ1JFQVRF IFRBQkxFIHJlZ3Jlc3NfY29uX3BhcnQuY29uX3B0Ml8xIFBBUlRJVElPTiBPRiBjb25fcHQyIEZP UiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKK0FMVEVSIFRBQkxFIHJlZ3Jlc3NfY29uX3BhcnQu Y29uX3B0Ml8xIEFERCBDT05TVFJBSU5UIGNvbl9wdDJfYV9jaGVjayBDSEVDSyAoYSA+IDEwMCk7 CitBTFRFUiBUQUJMRSBjb25fcHQyIEFERCBDSEVDSyAoYSA+IDApOworLS0gdGhlIHBhcmVudCdz IGF1dG8tZ2VuZXJhdGVkIG5hbWVzIHdlcmUgdW5pcXVpZmllZCB0byBhdm9pZCB0aGUgY29sbGlz aW9uCitTRUxFQ1QgY29ucmVsaWQ6OnJlZ2NsYXNzOjp0ZXh0IEFTIHBhcnRpdGlvbiwgY29ubmFt ZSwgY29udHlwZQorICBGUk9NIHBnX2NvbnN0cmFpbnQKKyBXSEVSRSBjb25yZWxpZCBJTiAoJ3Jl Z3Jlc3NfY29uX3BhcnQuY29uX3B0MV8xJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAg ICdyZWdyZXNzX2Nvbl9wYXJ0LmNvbl9wdDJfMSc6OnJlZ2NsYXNzKQorIE9SREVSIEJZIDEsIDI7 CitEUk9QIFRBQkxFIGNvbl9wdDEsIGNvbl9wdDI7CitEUk9QIFNDSEVNQSByZWdyZXNzX2Nvbl9w YXJ0OworCisKIC0tIENvbW1lbnRzCiAtLSBTZXR1cCBhIGxvdy1sZXZlbCByb2xlIHRvIGVuZm9y Y2Ugbm9uLXN1cGVydXNlciBjaGVja3MuCiBDUkVBVEUgUk9MRSByZWdyZXNzX2NvbnN0cmFpbnRf Y29tbWVudHM7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000a89d1806562a12be--