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 1uR2me-005Da3-Bd for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jun 2025 05:53:28 +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 1uR2mc-00FcV7-5c for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jun 2025 05:53:26 +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 1uR2mb-00FcUz-Pa for pgsql-hackers@lists.postgresql.org; Mon, 16 Jun 2025 05:53:26 +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 1uR2ma-002Iop-12 for pgsql-hackers@lists.postgresql.org; Mon, 16 Jun 2025 05:53:26 +0000 Received: by mail-vk1-xa34.google.com with SMTP id 71dfb90a1353d-53164bd0df3so126187e0c.0 for ; Sun, 15 Jun 2025 22:53:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750053202; x=1750658002; 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=LcbNvbnfC5M6j7PXgmwMitVXbnK5QXt3gU6lUI3jpl4=; b=VWajR1TYWVEGf1QOW27AbbWJErs8a2GjFvJcHOf3Yx7BdE5wKwDw674JknJy929wXi YO1GjBhqfaF6/cQJwUf36QkMESjhFQtIeX9l9Arfc3jk3kYKtmqcM3kxYImlJYre1cvj 0N6dC+MCaam7lVDa0uDLTBzLoodFb5zWiSIJcvzq1b5hG6cj0aLKEpZkouZO9LIr0KOV Ck5Hqa+jPhiUZNWAFBw5cnyPUnQfp4DImubClXWGsMr9XFxgrfouNXuONhSnEBAo2wvv yde3X+9Sy4VAWvZM+LeU54IeKLFVzZk7GeK5zVkoPEpGbaTN3c8XRZrrR93wxnOGBwSE Lt6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750053202; x=1750658002; h=cc: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=LcbNvbnfC5M6j7PXgmwMitVXbnK5QXt3gU6lUI3jpl4=; b=C3lldRo/KkzvYcq/oKigXX696Gr+KJJGcrNhFJ7Hu7dB9jWcqwufSgBBRK0rBGJFDW Jme8kNeypdiB/ueIserlaeCEch4Bh7qxvVpkhGFSfI5djxqr9TwRUXMApve6gRctAOpP h8ENj7acofaW2HAUQmhZHdRGrvGUsAoOMLREquAl+V4/p9veXEGwrekLhBYSXlyiQWMW rSKhRF558o1Zx/MO0p7EZyotLOltvmKyJXAqYci8zoRKF9StQmuQu9JGJXctxqTxVaxF sMvddKJh28Nf6iwaNmUzZB02ywZU4pNojw58w1VeyD3uGeemlZDvlNLwzFXr1odcbUC+ GCbg== X-Gm-Message-State: AOJu0YwUzub64b9GwbIAkpEXA2Ju+2HwWjbB0F40zdlfaCrr0HlZnqdQ uox2LpzaPBqQLfpoislyY6YWMywTa+7V2h0lFHYhFPJDZdcmdrRxVSsIvDbUTdxNF4NtmH+wF60 QWwPFlY402+Q4n/xJbYQtnQ6J2P91OoA= X-Gm-Gg: ASbGncsbmPhnJSbAw51hyQIr2j96HK+kW+KulHYDGYyYHdRbAfPaYSj0UPkxPOWTTOU IBHgHmy5nMdOhp4YIle8eDN4NfvhfFm/wxBFejrnmgW/koh02yudMYoikLXM+p7oXadENLXOQ5d yV0Tr2ytAg6dpsV2OgAcKJQVabcmr4NgY70sxRZo6sCIlafMMNfcXYYTWHUQGSU0FHsp45WsiaA TY= X-Google-Smtp-Source: AGHT+IFGC6UvvxcgWtoM8urtrR4pG6BE85RUNZAhADzqcX5oxEkzNh1Lr3E82RsLiD1rXNQB9VqbRQe0GEzwRvBbDQE= X-Received: by 2002:a05:6122:3708:b0:531:312c:a710 with SMTP id 71dfb90a1353d-53149b60c93mr5537579e0c.6.1750053202016; Sun, 15 Jun 2025 22:53:22 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <7fdaf3e8-4c05-4739-bee6-98acc068d1c7@postgrespro.ru> <4433b492-9e97-4334-96d9-ddaaa5083099@postgrespro.ru> <67ecf5fb-e63d-4284-be75-d0479eef81aa@postgrespro.ru> <884bcf9e-d6e3-4b0c-8dcb-7f2110070ac9@postgrespro.ru> <1e74c9fd-830e-4544-b0de-e49ea4b04029@postgrespro.ru> <9c1b75f1-5c40-4a86-9a61-a4b3f1d7ec60@postgrespro.ru> <7e1c67b8-ceba-4a04-964a-853eedeb02cc@postgrespro.ru> In-Reply-To: <7e1c67b8-ceba-4a04-964a-853eedeb02cc@postgrespro.ru> From: jian he Date: Mon, 16 Jun 2025 13:52:45 +0800 X-Gm-Features: AX0GCFuJa_WhULbJDaghHgPY1v19PyS08U94W-zgKr6NNNOU0LLtS2mCfEXxwnY Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000071ef540637aa0386" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000071ef540637aa0386 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable hi. static void checkPartition(Relation rel, Oid partRelOid) function name checkPartition is not ideal, maybe we can change it to CheckPartitionForMerge or MergePartitionCheck. (attached v45-002 is error message refactoring for checkPartition, I didn't change the name though.) For the command: ALTER TABLE pk MERGE PARTITIONS (pk_1, pk_2) INTO pk_1; Acquiring AccessExclusiveLock on the partitions to be merged (pk_1, pk_2) during transformPartitionCmdForMerge should be fine, IMHO. Here=E2=80=99s why: * The merged partitions (pk_1, pk_2) will be dropped in the end, so acquiri= ng AccessExclusiveLock is unavoidable for ALTER TABLE MERGE PARTITIONS. * Taking an AccessShareLock first, then later acquiring AccessExclusiveLock in ATExecMergePartitions unnecessarily wastes resources. (acquire two locks, one stronger should be enough) * Acquiring AccessExclusiveLock first helps avoid potential anomalies caused by concurrent operations. The attached patch refactors transformPartitionCmdForMerge and ATExecMergePartitions based on the idea of acquiring AccessExclusiveLock on= the to be merged partitions during transformPartitionCmdForMerge + * Callback allows caller to check permissions or acquire additional locks + * prior to grabbing the relation lock. Please see the above comments in RangeVarGetRelidExtended. + /* + * Search DEFAULT partition in the list. Lock partitions before + * calculating the boundary for resulting partition. + */ + partOid =3D RangeVarGetRelid(name, AccessShareLock, false); so the above transformPartitionCmdForMerge does not check if the currently user have permission or not, directly take a lock on RangeVar, name, which is a bug, we should first do permission check then acquire a lock. --00000000000071ef540637aa0386 Content-Type: application/octet-stream; name="v45-0001-refactor-ATExecMergePartitions-transformPartitionCmdF.no-cfbot" Content-Disposition: attachment; filename="v45-0001-refactor-ATExecMergePartitions-transformPartitionCmdF.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mbyofcml0 RnJvbSA5N2Y0MzcyYjZjMWY0ZWIyODJiN2EzZTA5ZTg2MGFiZTlhMjdjYWUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFN1biwgMTUgSnVuIDIwMjUgMjI6MjQ6MjYgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NSAxLzJdIHJlZmFjdG9yIEFURXhlY01lcmdlUGFydGl0aW9ucywKIHRyYW5zZm9ybVBhcnRpdGlv bkNtZEZvck1lcmdlCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsg Y2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpGb3IgdGhlIGNv bW1hbmQ6CkFMVEVSIFRBQkxFIHBrIE1FUkdFIFBBUlRJVElPTlMgKHBrXzEsIHBrXzIpIElOVE8g cGtfMTsKCkkgYmVsaWV2ZSB3ZSBzaG91bGQgYWNxdWlyZSBBY2Nlc3NFeGNsdXNpdmVMb2NrIG9u IHRoZSBwYXJ0aXRpb25zIHRvIGJlIG1lcmdlZAoocGtfMSwgcGtfMikgZHVyaW5nIHRyYW5zZm9y bVBhcnRpdGlvbkNtZEZvck1lcmdlLiBIZXJl4oCZcyB3aHk6CgoqIFRoZSBtZXJnZWQgcGFydGl0 aW9ucyAocGtfMSwgcGtfMikgd2lsbCBiZSBkcm9wcGVkIGluIHRoZSBlbmQsIHNvIGFjcXVpcmlu ZwpBY2Nlc3NFeGNsdXNpdmVMb2NrIGlzIHVuYXZvaWRhYmxlIGZvciBBTFRFUiBUQUJMRSBNRVJH RSBQQVJUSVRJT05TLgoqIFRha2luZyBhbiBBY2Nlc3NTaGFyZUxvY2sgZmlyc3QsIGFuZCB0aGVu IGxhdGVyIGFjcXVpcmluZyBBY2Nlc3NFeGNsdXNpdmVMb2NrIGluCkFURXhlY01lcmdlUGFydGl0 aW9ucyB1bm5lY2Vzc2FyaWx5IHdhc3RlIHJlc291cmNlcy4KKiBBY3F1aXJpbmcgQWNjZXNzRXhj bHVzaXZlTG9jayBmaXJzdCBoZWxwcyBhdm9pZCBwb3RlbnRpYWwgYW5vbWFsaWVzIGNhdXNlZCBi eSBjb25jdXJyZW50IG9wZXJhdGlvbnMuCgorIHBhcnRPaWQgPSBSYW5nZVZhckdldFJlbGlkKG5h bWUsIEFjY2Vzc1NoYXJlTG9jaywgZmFsc2UpOwppZiBjdXJyZW50IHVzZXIgZG9uJ3Qgb3duZSB0 aGUgdGFibGUgKG5hbWUpLCB0aGVuIGhlIGNhbiBub3QgbG9jayB0aGUgdGFibGUuCnRodXMgdGhl IGFib3ZlIGNvZGUgaW4gdHJhbnNmb3JtUGFydGl0aW9uQ21kRm9yTWVyZ2UgbmVlZCByZWZhY3Rv cgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgfCA3NCArKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMg fCAxOCArKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspLCAzNiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDdlNzcwM2M3OTk3Li5lM2Ji ZmQ5MjgzYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTIyNTQzLDEzICsyMjU0Mywx MyBAQCBjcmVhdGVQYXJ0aXRpb25UYWJsZShMaXN0ICoqd3F1ZXVlLCBSYW5nZVZhciAqbmV3UGFy dE5hbWUsCiB9CiAKIC8qCi0gKiBtb3ZlTWVyZ2VkVGFibGVzUm93czogc2NhbiBwYXJ0aXRpb25z IHRvIGJlIG1lcmdlZCAobWVyZ2luZ1BhcnRpdGlvbnNMaXN0KQorICogbW92ZU1lcmdlZFRhYmxl c1Jvd3M6IHNjYW4gcGFydGl0aW9ucyB0byBiZSBtZXJnZWQgKG1lcmdpbmdQYXJ0aXRpb25zKQog ICogb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIChyZWwpIGFuZCBtb3ZlIHJvd3MgaW50byB0aGUg bmV3IHBhcnRpdGlvbgogICogKG5ld1BhcnRSZWwpLiBXZSBhbHNvIHJlZXZhdWxhdGUgY2hlY2sg Y29uc3RyYWludHMgYWdhaW5zdCB0aGVzZSByb3dzLgogICovCiBzdGF0aWMgdm9pZAogbW92ZU1l cmdlZFRhYmxlc1Jvd3MoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLAotCQkJCQkgTGlzdCAq bWVyZ2luZ1BhcnRpdGlvbnNMaXN0LCBSZWxhdGlvbiBuZXdQYXJ0UmVsKQorCQkJCQkgTGlzdCAq bWVyZ2luZ1BhcnRpdGlvbnMsIFJlbGF0aW9uIG5ld1BhcnRSZWwpCiB7CiAJQ29tbWFuZElkCW15 Y2lkOwogCUVTdGF0ZQkgICAqZXN0YXRlOwpAQCAtMjI1ODAsMTIgKzIyNTgwLDE1IEBAIG1vdmVN ZXJnZWRUYWJsZXNSb3dzKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwKIAkvKiBDcmVhdGUg bmVjZXNzYXJ5IHR1cGxlIHNsb3QuICovCiAJZHN0c2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKG5l d1BhcnRSZWwsIE5VTEwpOwogCi0JZm9yZWFjaF9wdHIoUmVsYXRpb25EYXRhLCBtZXJnaW5nUGFy dGl0aW9uLCBtZXJnaW5nUGFydGl0aW9uc0xpc3QpCisJZm9yZWFjaF9vaWQobWVyZ2luZ19vaWQs IG1lcmdpbmdQYXJ0aXRpb25zKQogCXsKIAkJVHVwbGVUYWJsZVNsb3QgKnNyY3Nsb3Q7CiAJCVR1 cGxlQ29udmVyc2lvbk1hcCAqdHVwbGVfbWFwOwogCQlUYWJsZVNjYW5EZXNjIHNjYW47CiAJCVNu YXBzaG90CXNuYXBzaG90OworCQlSZWxhdGlvbiAJbWVyZ2luZ1BhcnRpdGlvbjsKKworCQltZXJn aW5nUGFydGl0aW9uID0gdGFibGVfb3BlbihtZXJnaW5nX29pZCwgTm9Mb2NrKTsKIAogCQkvKiBD cmVhdGUgdHVwbGUgc2xvdCBmb3IgbmV3IHBhcnRpdGlvbi4gKi8KIAkJc3Jjc2xvdCA9IHRhYmxl X3Nsb3RfY3JlYXRlKG1lcmdpbmdQYXJ0aXRpb24sIE5VTEwpOwpAQCAtMjI2NTksNiArMjI2NjIs NyBAQCBtb3ZlTWVyZ2VkVGFibGVzUm93cyhMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsCiAJ CQlmcmVlX2NvbnZlcnNpb25fbWFwKHR1cGxlX21hcCk7CiAKIAkJRXhlY0Ryb3BTaW5nbGVUdXBs ZVRhYmxlU2xvdChzcmNzbG90KTsKKwkJdGFibGVfY2xvc2UobWVyZ2luZ1BhcnRpdGlvbiwgTm9M b2NrKTsKIAl9CiAKIAlGcmVlRXhlY3V0b3JTdGF0ZShlc3RhdGUpOwpAQCAtMjI3MDksNyArMjI3 MTMsNyBAQCBBVEV4ZWNNZXJnZVBhcnRpdGlvbnMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxl SW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJCQkJCSAgUGFydGl0aW9uQ21kICpjbWQsIEFsdGVy VGFibGVVdGlsaXR5Q29udGV4dCAqY29udGV4dCkKIHsKIAlSZWxhdGlvbgluZXdQYXJ0UmVsOwot CUxpc3QJICAgKm1lcmdpbmdQYXJ0aXRpb25zTGlzdCA9IE5JTDsKKwlMaXN0CSAgICptZXJnaW5n UGFydGl0aW9ucyA9IE5JTDsKIAlPaWQJCQlkZWZhdWx0UGFydE9pZDsKIAlPaWQJCQlleGlzdGlu Z1JlbGlkOwogCU9pZAkJCW93bmVySWQgPSBJbnZhbGlkT2lkOwpAQCAtMjI3MTgsMTggKzIyNzIy LDIxIEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJ bmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAlpbnQJCQlzYXZlX25lc3RsZXZlbDsKIAogCS8qCi0J ICogTG9jayBhbGwgbWVyZ2VkIHBhcnRpdGlvbnMsIGNoZWNrIHRoZW0gYW5kIGNyZWF0ZSBsaXN0 IHdpdGggcGFydGl0aW9ucwotCSAqIGNvbnRleHRzLgotCSAqLworCSAqIENoZWNrIG93bmVyc2hp cCBvZiBtZXJnZWQgcGFydGl0aW9ucyDigJQgcGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCBvd25l cnMKKwkgKiBjYW5ub3QgYmUgbWVyZ2VkLiBBbHNvLCBjb2xsZWN0IHRoZSBPSURzIG9mIHRoZXNl IHBhcnRpdGlvbnMgZHVyaW5nIHRoZQorCSAqIGNoZWNrLgorCSovCiAJZm9yZWFjaF9ub2RlKFJh bmdlVmFyLCBuYW1lLCBjbWQtPnBhcnRsaXN0KQogCXsKIAkJUmVsYXRpb24JbWVyZ2luZ1BhcnRp dGlvbjsKIAogCQkvKgotCQkgKiBXZSBhcmUgZ29pbmcgdG8gZGV0YWNoIGFuZCByZW1vdmUgdGhp cyBwYXJ0aXRpb246IG5lZWQgdG8gdXNlCi0JCSAqIGV4Y2x1c2l2ZSBsb2NrIGZvciBwcmV2ZW50 aW5nIERNTC1xdWVyaWVzIHRvIHRoZSBwYXJ0aXRpb24uCisJCSAqIFdlIGFyZSBnb2luZyB0byBk ZXRhY2ggYW5kIHJlbW92ZSB0aGlzIHBhcnRpdGlvbi4gIFdlIGFscmVhZHkgdG9vaworCQkgKiBB Y2Nlc3NFeGNsdXNpdmVMb2NrIGxvY2sgb24gdHJhbnNmb3JtUGFydGl0aW9uQ21kRm9yTWVyZ2Us IHNvIGhlcmUsCisJCSAqIE5vTG9jayBpcyBmaW5lLgogCQkgKi8KLQkJbWVyZ2luZ1BhcnRpdGlv biA9IHRhYmxlX29wZW5ydihuYW1lLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJbWVyZ2luZ1Bh cnRpdGlvbiA9IHRhYmxlX29wZW5ydl9leHRlbmRlZChuYW1lLCBOb0xvY2ssIGZhbHNlKTsKKwkJ QXNzZXJ0KENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKG1lcmdpbmdQYXJ0aXRpb24sIEFjY2Vzc0V4 Y2x1c2l2ZUxvY2ssIGZhbHNlKSk7CiAKIAkJaWYgKE9pZElzVmFsaWQob3duZXJJZCkpCiAJCXsK QEAgLTIyNzQzLDggKzIyNzUwLDEwIEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1 ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkJCW93bmVySWQgPSBt ZXJnaW5nUGFydGl0aW9uLT5yZF9yZWwtPnJlbG93bmVyOwogCiAJCS8qIFN0b3JlIGEgbmV4dCBt ZXJnaW5nIHBhcnRpdGlvbiBpbnRvIHRoZSBsaXN0LiAqLwotCQltZXJnaW5nUGFydGl0aW9uc0xp c3QgPSBsYXBwZW5kKG1lcmdpbmdQYXJ0aXRpb25zTGlzdCwKLQkJCQkJCQkJCQltZXJnaW5nUGFy dGl0aW9uKTsKKwkJbWVyZ2luZ1BhcnRpdGlvbnMgPSBsYXBwZW5kX29pZChtZXJnaW5nUGFydGl0 aW9ucywKKwkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKG1lcmdpbmdQYXJ0aXRpb24pKTsKKwor CQl0YWJsZV9jbG9zZShtZXJnaW5nUGFydGl0aW9uLCBOb0xvY2spOwogCX0KIAogCS8qCkBAIC0y Mjc2NCwxOCArMjI3NzMsMTggQEAgQVRFeGVjTWVyZ2VQYXJ0aXRpb25zKExpc3QgKip3cXVldWUs IEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCSAqLwogCWlmIChPaWRJc1Zh bGlkKGV4aXN0aW5nUmVsaWQpKQogCXsKLQkJUmVsYXRpb24Jc2FtZU5hbWVQYXJ0aXRpb24gPSBO VUxMOworCQlPaWQJCW5ld19wYXJ0aXRpb24gPSBJbnZhbGlkT2lkOwogCi0JCWZvcmVhY2hfcHRy KFJlbGF0aW9uRGF0YSwgbWVyZ2luZ1BhcnRpdGlvbiwgbWVyZ2luZ1BhcnRpdGlvbnNMaXN0KQor CQlmb3JlYWNoX29pZChtZXJnaW5nUGFydGl0aW9uLCBtZXJnaW5nUGFydGl0aW9ucykKIAkJewot CQkJaWYgKFJlbGF0aW9uR2V0UmVsaWQobWVyZ2luZ1BhcnRpdGlvbikgPT0gZXhpc3RpbmdSZWxp ZCkKKwkJCWlmIChtZXJnaW5nUGFydGl0aW9uID09IGV4aXN0aW5nUmVsaWQpCiAJCQl7Ci0JCQkJ c2FtZU5hbWVQYXJ0aXRpb24gPSBtZXJnaW5nUGFydGl0aW9uOworCQkJCW5ld19wYXJ0aXRpb24g PSBtZXJnaW5nUGFydGl0aW9uOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAKLQkJaWYgKHNhbWVO YW1lUGFydGl0aW9uKQorCQlpZiAoT2lkSXNWYWxpZChuZXdfcGFydGl0aW9uKSkKIAkJewogCQkJ LyoKIAkJCSAqIFRoZSBuZXcgcGFydGl0aW9uIGhhcyB0aGUgc2FtZSBuYW1lIGFzIG9uZSBvZiBt ZXJnaW5nCkBAIC0yMjc5Miw4ICsyMjgwMSw3IEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0 ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkJCSAqIGlu IHRoZSBmdXR1cmUgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byBldmVudHVhbGx5IGRyb3AgdGhlCiAJ CQkgKiBleGlzdGluZyBwYXJ0aXRpb24gYW55d2F5LgogCQkJICovCi0JCQlSZW5hbWVSZWxhdGlv bkludGVybmFsKFJlbGF0aW9uR2V0UmVsaWQoc2FtZU5hbWVQYXJ0aXRpb24pLAotCQkJCQkJCQkg ICB0bXBSZWxOYW1lLCB0cnVlLCBmYWxzZSk7CisJCQlSZW5hbWVSZWxhdGlvbkludGVybmFsKG5l d19wYXJ0aXRpb24sIHRtcFJlbE5hbWUsIHRydWUsIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdl IG11c3QgYnVtcCB0aGUgY29tbWFuZCBjb3VudGVyIHRvIG1ha2UgdGhlIG5ldyBwYXJ0aXRpb24K QEAgLTIyODIyLDE0ICsyMjgzMCwyMyBAQCBBVEV4ZWNNZXJnZVBhcnRpdGlvbnMoTGlzdCAqKndx dWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJICogbWVyZ2UgcHJv Y2VzcyAobW92ZU1lcmdlZFRhYmxlc1Jvd3MpIGNhbiBiZSB0aW1lLWNvbnN1bWluZywgcGVyZm9y bWluZyBhbgogCSAqIGVhcmx5IGNoZWNrIG9uIHRoZSBkcm9wIGVsaWdpYmlsaXR5IG9mIG9sZCBw YXJ0aXRpb25zIGlzIHByZWZlcmFibGUuCiAJICovCi0JZm9yZWFjaF9wdHIoUmVsYXRpb25EYXRh LCBtZXJnaW5nUGFydGl0aW9uLCBtZXJnaW5nUGFydGl0aW9uc0xpc3QpCisJZm9yZWFjaF9vaWQo bWVyZ2luZ1BhcnRpdGlvbiwgbWVyZ2luZ1BhcnRpdGlvbnMpCisJeworCQlSZWxhdGlvbgljaGls ZF9yZWw7CisKKwkJY2hpbGRfcmVsID0gdGFibGVfb3BlbihtZXJnaW5nUGFydGl0aW9uLCBOb0xv Y2spOworCisJCWRldGFjaFBhcnRpdGlvblRhYmxlKHJlbCwgY2hpbGRfcmVsLCBkZWZhdWx0UGFy dE9pZCk7CisKKwkJdGFibGVfY2xvc2UoY2hpbGRfcmVsLCBOb0xvY2spOworCX0KKworCWZvcmVh Y2hfb2lkKG1lcmdpbmdQYXJ0aXRpb24sIG1lcmdpbmdQYXJ0aXRpb25zKQogCXsKIAkJT2JqZWN0 QWRkcmVzcyBvYmplY3Q7CiAKLQkJZGV0YWNoUGFydGl0aW9uVGFibGUocmVsLCBtZXJnaW5nUGFy dGl0aW9uLCBkZWZhdWx0UGFydE9pZCk7Ci0KIAkJLyogR2V0IG9pZCBvZiB0aGUgbGF0ZXIgdG8g YmUgZHJvcHBlZCByZWxhdGlvbiAqLwotCQlvYmplY3Qub2JqZWN0SWQgPSBSZWxhdGlvbkdldFJl bGlkKG1lcmdpbmdQYXJ0aXRpb24pOworCQlvYmplY3Qub2JqZWN0SWQgPSBtZXJnaW5nUGFydGl0 aW9uOwogCQlvYmplY3QuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKIAkJb2JqZWN0Lm9i amVjdFN1YklkID0gMDsKIApAQCAtMjI4NTQsMjQgKzIyODcxLDE5IEBAIEFURXhlY01lcmdlUGFy dGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJl bCwKIAlSZXN0cmljdFNlYXJjaFBhdGgoKTsKIAogCS8qIENvcHkgZGF0YSBmcm9tIG1lcmdlZCBw YXJ0aXRpb25zIHRvIG5ldyBwYXJ0aXRpb24uICovCi0JbW92ZU1lcmdlZFRhYmxlc1Jvd3Mod3F1 ZXVlLCByZWwsIG1lcmdpbmdQYXJ0aXRpb25zTGlzdCwgbmV3UGFydFJlbCk7CisJbW92ZU1lcmdl ZFRhYmxlc1Jvd3Mod3F1ZXVlLCByZWwsIG1lcmdpbmdQYXJ0aXRpb25zLCBuZXdQYXJ0UmVsKTsK IAogCS8qIERyb3AgdGhlIGN1cnJlbnQgcGFydGl0aW9ucyBiZWZvcmUgYXR0YWNoaW5nIHRoZSBu ZXcgb25lLiAqLwotCWZvcmVhY2hfcHRyKFJlbGF0aW9uRGF0YSwgbWVyZ2luZ1BhcnRpdGlvbiwg bWVyZ2luZ1BhcnRpdGlvbnNMaXN0KQorCWZvcmVhY2hfb2lkKG1lcmdpbmdQYXJ0aXRpb24sIG1l cmdpbmdQYXJ0aXRpb25zKQogCXsKIAkJT2JqZWN0QWRkcmVzcyBvYmplY3Q7CiAKLQkJLyogR2V0 IHJlbGF0aW9uIGlkIGJlZm9yZSB0YWJsZV9jbG9zZSgpIGNhbGwuICovCi0JCW9iamVjdC5vYmpl Y3RJZCA9IFJlbGF0aW9uR2V0UmVsaWQobWVyZ2luZ1BhcnRpdGlvbik7CisJCW9iamVjdC5vYmpl Y3RJZCA9IG1lcmdpbmdQYXJ0aXRpb247CiAJCW9iamVjdC5jbGFzc0lkID0gUmVsYXRpb25SZWxh dGlvbklkOwogCQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOwogCi0JCS8qIEtlZXAgdGhlIGxvY2sg dW50aWwgY29tbWl0LiAqLwotCQl0YWJsZV9jbG9zZShtZXJnaW5nUGFydGl0aW9uLCBOb0xvY2sp OwotCiAJCXBlcmZvcm1EZWxldGlvbigmb2JqZWN0LCBEUk9QX1JFU1RSSUNULCAwKTsKIAl9Ci0J bGlzdF9mcmVlKG1lcmdpbmdQYXJ0aXRpb25zTGlzdCk7CiAKIAkvKgogCSAqIEF0dGFjaCBhIG5l dyBwYXJ0aXRpb24gdG8gdGhlIHBhcnRpdGlvbmVkIHRhYmxlLiB3cXVldWUgPSBOVUxMOgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV91dGlsY21kLmMKaW5kZXggZGEyOTE5ODY0NDYuLmViOGE5MzdlMWU4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCisrKyBiL3NyYy9i YWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKQEAgLTM1MDAsNyArMzUwMCw3IEBAIGNoZWNr UGFydGl0aW9uKFJlbGF0aW9uIHJlbCwgT2lkIHBhcnRSZWxPaWQpCiB7CiAJUmVsYXRpb24JcGFy dFJlbDsKIAotCXBhcnRSZWwgPSByZWxhdGlvbl9vcGVuKHBhcnRSZWxPaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJcGFydFJlbCA9IHRhYmxlX29wZW4ocGFydFJlbE9pZCwgTm9Mb2NrKTsKIAogCWlm IChwYXJ0UmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTikKIAkJZXJlcG9y dChFUlJPUiwKQEAgLTM1MjYsNyArMzUyNiw3IEBAIGNoZWNrUGFydGl0aW9uKFJlbGF0aW9uIHJl bCwgT2lkIHBhcnRSZWxPaWQpCiAJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwg Z2V0X3JlbGtpbmRfb2JqdHlwZShwYXJ0UmVsLT5yZF9yZWwtPnJlbGtpbmQpLAogCQkJCQkgICBS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwYXJ0UmVsKSk7CiAKLQlyZWxhdGlvbl9jbG9zZShwYXJ0 UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKHBhcnRSZWwsIE5vTG9jayk7CiB9 CiAKIC8qCkBAIC0zNTc3LDEwICszNTc3LDE4IEBAIHRyYW5zZm9ybVBhcnRpdGlvbkNtZEZvck1l cmdlKENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIFBhcnRpdGlvbkNtZCAqcGFydGNtZCkKIAkJfQog CiAJCS8qCi0JCSAqIFNlYXJjaCBERUZBVUxUIHBhcnRpdGlvbiBpbiB0aGUgbGlzdC4gTG9jayBw YXJ0aXRpb25zIGJlZm9yZQotCQkgKiBjYWxjdWxhdGluZyB0aGUgYm91bmRhcnkgZm9yIHJlc3Vs dGluZyBwYXJ0aXRpb24uCisJCSAqIFNlYXJjaCBERUZBVUxUIHBhcnRpdGlvbiBpbiB0aGUgbGlz dC4gT3BlbiBhbmQgbG9jayBwYXJ0aXRpb25zIGJlZm9yZQorCQkgKiBjYWxjdWxhdGluZyB0aGUg Ym91bmRhcnkgZm9yIHJlc3VsdGluZyBwYXJ0aXRpb24sIHdlIGFsc28gY2hlY2sgZm9yCisJCSAq IG93bmVyc2hpcCBhbG9uZyB0aGUgd2F5LiAgV2UgbmVlZCB0byB1c2UgQWNjZXNzRXhjbHVzaXZl TG9jayBoZXJlLAorCQkgKiBiZWNhdXNlIHRoZXNlIG1lcmdlZCBwYXJ0aXRpb25zIHdpbGwgYmUg ZGV0YWNoZWQgdGhlbiBkcm9wcGVkIGluCisJCSAqIEFURXhlY01lcmdlUGFydGl0aW9ucy4KIAkJ ICovCi0JCXBhcnRPaWQgPSBSYW5nZVZhckdldFJlbGlkKG5hbWUsIEFjY2Vzc1NoYXJlTG9jaywg ZmFsc2UpOworCQlwYXJ0T2lkID0gUmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVkKG5hbWUsCisJCQkJ CQkJCQkJICAgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJCQkgICBmYWxzZSwKKwkJCQkJ CQkJCQkgICBSYW5nZVZhckNhbGxiYWNrT3duc1JlbGF0aW9uLAorCQkJCQkJCQkJCSAgIE5VTEwp OworCiAJCWlmIChwYXJ0T2lkID09IGRlZmF1bHRQYXJ0T2lkKQogCQkJaXNEZWZhdWx0UGFydCA9 IHRydWU7CiAKLS0gCjIuMzQuMQoK --00000000000071ef540637aa0386 Content-Type: application/octet-stream; name="v45-0002-error-message-refactoring.no-cfbot" Content-Disposition: attachment; filename="v45-0002-error-message-refactoring.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mbyofcmu1 RnJvbSBiNzNjYzBhZmQ2MWI1ODhhMTc1MjhmNTk5MDEzMzRjMTgzOWZjMzNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTYgSnVuIDIwMjUgMTE6NTQ6NDEgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NSAyLzJdIGVycm9yIG1lc3NhZ2UgcmVmYWN0b3JpbmcKCi0tLQogc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX3V0aWxjbWQuYyAgICAgICAgICAgIHwgMjAgKysrKysrKystLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRib3VuZHMuYyAgICAgICAgIHwgIDMgKystCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQgfCAxOCArKysrKysrKysr KystLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCBlYjhhOTM3ZTFlOC4uNGZlOWNk MzMzMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKKysr IGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwpAQCAtMzQ5Myw3ICszNDkzLDcg QEAgdHJhbnNmb3JtUnVsZVN0bXQoUnVsZVN0bXQgKnN0bXQsIGNvbnN0IGNoYXIgKnF1ZXJ5U3Ry aW5nLAogCiAvKgogICogY2hlY2tQYXJ0aXRpb24KLSAqCQlDaGVjayB0aGF0IHBhcnRSZWxPaWQg aXMgYW4gb2lkIG9mIHBhcnRpdGlvbiBvZiB0aGUgcGFyZW50IHRhYmxlIHJlbAorICogQ2hlY2sg d2hldGhlciBwYXJ0UmVsT2lkIGlzIGEgbGVhZiBwYXJ0aXRpb24gb2YgdGhlIHBhcmVudCB0YWJs ZSAocmVsKS4KICAqLwogc3RhdGljIHZvaWQKIGNoZWNrUGFydGl0aW9uKFJlbGF0aW9uIHJlbCwg T2lkIHBhcnRSZWxPaWQpCkBAIC0zNTA1LDI2ICszNTA1LDIyIEBAIGNoZWNrUGFydGl0aW9uKFJl bGF0aW9uIHJlbCwgT2lkIHBhcnRSZWxPaWQpCiAJaWYgKHBhcnRSZWwtPnJkX3JlbC0+cmVsa2lu ZCAhPSBSRUxLSU5EX1JFTEFUSU9OKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCWVycmNvZGUoRVJS Q09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCi0JCQkJZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgdGFi bGUiLAotCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwYXJ0UmVsKSkpOworCQkJCWVy cm1zZygiXCIlc1wiIGlzIG5vdCBhIHRhYmxlIiwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocGFy dFJlbCkpLAorCQkJCWVycmhpbnQoIkFMVEVSIFRBQkxFIC4uLiBNRVJHRSBQQVJUSVRJT05TIGNh biBvbmx5IG1lcmdlIHBhcnRpdGlvbnMgZG9uJ3QgaGF2ZSBzdWItcGFydGl0aW9ucyIpKTsKIAog CWlmICghcGFydFJlbC0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbikKIAkJZXJlcG9ydChFUlJPUiwK IAkJCQllcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAotCQkJCWVycm1zZygiXCIl c1wiIGlzIG5vdCBhIHBhcnRpdGlvbiIsCi0JCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHBhcnRSZWwpKSk7CisJCQkJZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgcGFydGl0aW9uIG9mIHBh cnRpdGlvbmVkIHRhYmxlIFwiJXNcIiIsCisJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHBhcnRSZWwpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKKwkJCQllcnJoaW50KCJB TFRFUiBUQUJMRSAuLi4gTUVSR0UgUEFSVElUSU9OUyBjYW4gb25seSBtZXJnZSBwYXJ0aXRpb25z IGRvbid0IGhhdmUgc3ViLXBhcnRpdGlvbnMiKSk7CiAKIAlpZiAoZ2V0X3BhcnRpdGlvbl9wYXJl bnQocGFydFJlbE9pZCwgZmFsc2UpICE9IFJlbGF0aW9uR2V0UmVsaWQocmVsKSkKIAkJZXJlcG9y dChFUlJPUiwKIAkJCQllcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX1RBQkxFKSwKIAkJCQllcnJt c2coInJlbGF0aW9uIFwiJXNcIiBpcyBub3QgYSBwYXJ0aXRpb24gb2YgcmVsYXRpb24gXCIlc1wi IiwKLQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocGFydFJlbCksCi0JCQkJCSAgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKLQotCS8qIFBlcm1pc3Npb25zIGNoZWNrcyAq LwotCWlmICghb2JqZWN0X293bmVyY2hlY2soUmVsYXRpb25SZWxhdGlvbklkLCBSZWxhdGlvbkdl dFJlbGlkKHBhcnRSZWwpLCBHZXRVc2VySWQoKSkpCi0JCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNL X05PVF9PV05FUiwgZ2V0X3JlbGtpbmRfb2JqdHlwZShwYXJ0UmVsLT5yZF9yZWwtPnJlbGtpbmQp LAotCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwYXJ0UmVsKSk7CisJCQkJCSAgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHBhcnRSZWwpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKSwKKwkJCQllcnJoaW50KCJBTFRFUiBUQUJMRSAuLi4gTUVSR0UgUEFSVElUSU9OUyBjYW4g b25seSBtZXJnZSBwYXJ0aXRpb25zIGRvbid0IGhhdmUgc3ViLXBhcnRpdGlvbnMiKSk7CiAKIAl0 YWJsZV9jbG9zZShwYXJ0UmVsLCBOb0xvY2spOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFydGl0aW9uaW5nL3BhcnRib3VuZHMuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0 Ym91bmRzLmMKaW5kZXggMjY2NGM3YjcwOTEuLjlmN2MwMWI3ZmE4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnRp dGlvbmluZy9wYXJ0Ym91bmRzLmMKQEAgLTUwMjgsOCArNTAyOCw5IEBAIGNoZWNrX3R3b19wYXJ0 aXRpb25zX2JvdW5kc19yYW5nZShSZWxhdGlvbiBwYXJlbnQsCiAKIAkJZXJlcG9ydChFUlJPUiwK IAkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCi0JCQkJZXJy bXNnKCJsb3dlciBib3VuZCBvZiBwYXJ0aXRpb24gXCIlc1wiIGNvbmZsaWN0cyB3aXRoIHVwcGVy IGJvdW5kIG9mIHByZXZpb3VzIHBhcnRpdGlvbiBcIiVzXCIiLAorCQkJCWVycm1zZygibG93ZXIg Ym91bmQgb2YgcGFydGl0aW9uIFwiJXNcIiBpcyBub3QgZXF1YWwgdG8gdGhlIHVwcGVyIGJvdW5k IG9mIHBhcnRpdGlvbiBcIiVzXCIiLAogCQkJCQkgICBzZWNvbmRfbmFtZS0+cmVsbmFtZSwgZmly c3RfbmFtZS0+cmVsbmFtZSksCisJCQkJZXJyaGludCgiQUxURVIgVEFCTEUgLi4uIE1FUkdFIFBB UlRJVElPTlMgcmVxdWlyZXMgdGhlIHBhcnRpdGlvbiBib3VuZHMgdG8gYmUgYWRqYWNlbnQuIiks CiAJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGF0dW0tPmxvY2F0aW9uKSk7CiAJfQog fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0CmluZGV4 IDRiZmM0ZjdiNWZmLi4yMGZhNmMxMzY4MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcGFydGl0aW9uX21lcmdlLm91dApAQCAtMjksMTQgKzI5LDE3IEBAIExJTkUgMTogLi4uZSBN RVJHRSBQQVJUSVRJT05TIChzYWxlc19mZWIyMDIyLCBzYWxlc19tYXIyMDIyLCBzYWxlc19mZWIy Li4uCiAtLSBFUlJPUjogICJzYWxlc19hcHIyMDIyIiBpcyBub3QgYSB0YWJsZQogQUxURVIgVEFC TEUgc2FsZXNfcmFuZ2UgTUVSR0UgUEFSVElUSU9OUyAoc2FsZXNfZmViMjAyMiwgc2FsZXNfbWFy MjAyMiwgc2FsZXNfYXByMjAyMikgSU5UTyBzYWxlc19mZWJfbWFyX2FwcjIwMjI7CiBFUlJPUjog ICJzYWxlc19hcHIyMDIyIiBpcyBub3QgYSB0YWJsZQorSElOVDogIEFMVEVSIFRBQkxFIC4uLiBN RVJHRSBQQVJUSVRJT05TIGNhbiBvbmx5IG1lcmdlIHBhcnRpdGlvbnMgZG9uJ3QgaGF2ZSBzdWIt cGFydGl0aW9ucwogLS0gRVJST1I6ICBsb3dlciBib3VuZCBvZiBwYXJ0aXRpb24gInNhbGVzX21h cjIwMjIiIGNvbmZsaWN0cyB3aXRoIHVwcGVyIGJvdW5kIG9mIHByZXZpb3VzIHBhcnRpdGlvbiAi c2FsZXNfamFuMjAyMiIKIC0tIChzcGFjZSBiZXR3ZWVuIHNlY3Rpb25zIHNhbGVzX2phbjIwMjIg YW5kIHNhbGVzX21hcjIwMjIpCiBBTFRFUiBUQUJMRSBzYWxlc19yYW5nZSBNRVJHRSBQQVJUSVRJ T05TIChzYWxlc19qYW4yMDIyLCBzYWxlc19tYXIyMDIyKSBJTlRPIHNhbGVzX2phbl9tYXIyMDIy OwotRVJST1I6ICBsb3dlciBib3VuZCBvZiBwYXJ0aXRpb24gInNhbGVzX21hcjIwMjIiIGNvbmZs aWN0cyB3aXRoIHVwcGVyIGJvdW5kIG9mIHByZXZpb3VzIHBhcnRpdGlvbiAic2FsZXNfamFuMjAy MiIKK0VSUk9SOiAgbG93ZXIgYm91bmQgb2YgcGFydGl0aW9uICJzYWxlc19tYXIyMDIyIiBpcyBu b3QgZXF1YWwgdG8gdGhlIHVwcGVyIGJvdW5kIG9mIHBhcnRpdGlvbiAic2FsZXNfamFuMjAyMiIK K0hJTlQ6ICBBTFRFUiBUQUJMRSAuLi4gTUVSR0UgUEFSVElUSU9OUyByZXF1aXJlcyB0aGUgcGFy dGl0aW9uIGJvdW5kcyB0byBiZSBhZGphY2VudC4KIC0tIEVSUk9SOiAgbG93ZXIgYm91bmQgb2Yg cGFydGl0aW9uICJzYWxlc19qYW4yMDIyIiBjb25mbGljdHMgd2l0aCB1cHBlciBib3VuZCBvZiBw cmV2aW91cyBwYXJ0aXRpb24gInNhbGVzX2RlYzIwMjEiCiAtLSAoc3BhY2UgYmV0d2VlbiBzZWN0 aW9ucyBzYWxlc19kZWMyMDIxIGFuZCBzYWxlc19qYW4yMDIyKQogQUxURVIgVEFCTEUgc2FsZXNf cmFuZ2UgTUVSR0UgUEFSVElUSU9OUyAoc2FsZXNfZGVjMjAyMSwgc2FsZXNfamFuMjAyMiwgc2Fs ZXNfZmViMjAyMikgSU5UTyBzYWxlc19kZWNfamFuX2ZlYjIwMjI7Ci1FUlJPUjogIGxvd2VyIGJv dW5kIG9mIHBhcnRpdGlvbiAic2FsZXNfamFuMjAyMiIgY29uZmxpY3RzIHdpdGggdXBwZXIgYm91 bmQgb2YgcHJldmlvdXMgcGFydGl0aW9uICJzYWxlc19kZWMyMDIxIgorRVJST1I6ICBsb3dlciBi b3VuZCBvZiBwYXJ0aXRpb24gInNhbGVzX2phbjIwMjIiIGlzIG5vdCBlcXVhbCB0byB0aGUgdXBw ZXIgYm91bmQgb2YgcGFydGl0aW9uICJzYWxlc19kZWMyMDIxIgorSElOVDogIEFMVEVSIFRBQkxF IC4uLiBNRVJHRSBQQVJUSVRJT05TIHJlcXVpcmVzIHRoZSBwYXJ0aXRpb24gYm91bmRzIHRvIGJl IGFkamFjZW50LgogLS0gRVJST1I6ICBwYXJ0aXRpb24gd2l0aCBuYW1lICJzYWxlc19mZWIyMDIy IiBpcyBhbHJlYWR5IHVzZWQKIEFMVEVSIFRBQkxFIHNhbGVzX3JhbmdlIE1FUkdFIFBBUlRJVElP TlMgKHNhbGVzX2ZlYjIwMjIsIHNhbGVzX21hcjIwMjIsIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1h LnNhbGVzX2ZlYjIwMjIpIElOVE8gc2FsZXNfZmViX21hcl9hcHIyMDIyOwogRVJST1I6ICBwYXJ0 aXRpb24gd2l0aCBuYW1lICJzYWxlc19mZWIyMDIyIiBpcyBhbHJlYWR5IHVzZWQKQEAgLTYxMSwx MyArNjE0LDE2IEBAIENSRUFURSBUQUJMRSBzYWxlc19leHRlcm5hbCAoTElLRSBzYWxlc19saXN0 KTsKIENSRUFURSBUQUJMRSBzYWxlc19leHRlcm5hbDIgKHZjaCBWQVJDSEFSKDUpKTsKIC0tIEVS Uk9SOiAgInNhbGVzX2V4dGVybmFsIiBpcyBub3QgYSBwYXJ0aXRpb24KIEFMVEVSIFRBQkxFIHNh bGVzX2xpc3QgTUVSR0UgUEFSVElUSU9OUyAoc2FsZXNfd2VzdCwgc2FsZXNfZWFzdCwgc2FsZXNf ZXh0ZXJuYWwpIElOVE8gc2FsZXNfYWxsOwotRVJST1I6ICAic2FsZXNfZXh0ZXJuYWwiIGlzIG5v dCBhIHBhcnRpdGlvbgorRVJST1I6ICAic2FsZXNfZXh0ZXJuYWwiIGlzIG5vdCBhIHBhcnRpdGlv biBvZiBwYXJ0aXRpb25lZCB0YWJsZSAic2FsZXNfbGlzdCIKK0hJTlQ6ICBBTFRFUiBUQUJMRSAu Li4gTUVSR0UgUEFSVElUSU9OUyBjYW4gb25seSBtZXJnZSBwYXJ0aXRpb25zIGRvbid0IGhhdmUg c3ViLXBhcnRpdGlvbnMKIC0tIEVSUk9SOiAgInNhbGVzX2V4dGVybmFsMiIgaXMgbm90IGEgcGFy dGl0aW9uCiBBTFRFUiBUQUJMRSBzYWxlc19saXN0IE1FUkdFIFBBUlRJVElPTlMgKHNhbGVzX3dl c3QsIHNhbGVzX2Vhc3QsIHNhbGVzX2V4dGVybmFsMikgSU5UTyBzYWxlc19hbGw7Ci1FUlJPUjog ICJzYWxlc19leHRlcm5hbDIiIGlzIG5vdCBhIHBhcnRpdGlvbgorRVJST1I6ICAic2FsZXNfZXh0 ZXJuYWwyIiBpcyBub3QgYSBwYXJ0aXRpb24gb2YgcGFydGl0aW9uZWQgdGFibGUgInNhbGVzX2xp c3QiCitISU5UOiAgQUxURVIgVEFCTEUgLi4uIE1FUkdFIFBBUlRJVElPTlMgY2FuIG9ubHkgbWVy Z2UgcGFydGl0aW9ucyBkb24ndCBoYXZlIHN1Yi1wYXJ0aXRpb25zCiAtLSBFUlJPUjogIHJlbGF0 aW9uICJzYWxlc19ub3JkMiIgaXMgbm90IGEgcGFydGl0aW9uIG9mIHJlbGF0aW9uICJzYWxlc19s aXN0IgogQUxURVIgVEFCTEUgc2FsZXNfbGlzdCBNRVJHRSBQQVJUSVRJT05TIChzYWxlc193ZXN0 LCBzYWxlc19ub3JkMiwgc2FsZXNfZWFzdCkgSU5UTyBzYWxlc19hbGw7CiBFUlJPUjogIHJlbGF0 aW9uICJzYWxlc19ub3JkMiIgaXMgbm90IGEgcGFydGl0aW9uIG9mIHJlbGF0aW9uICJzYWxlc19s aXN0IgorSElOVDogIEFMVEVSIFRBQkxFIC4uLiBNRVJHRSBQQVJUSVRJT05TIGNhbiBvbmx5IG1l cmdlIHBhcnRpdGlvbnMgZG9uJ3QgaGF2ZSBzdWItcGFydGl0aW9ucwogRFJPUCBUQUJMRSBzYWxl c19leHRlcm5hbDI7CiBEUk9QIFRBQkxFIHNhbGVzX2V4dGVybmFsOwogRFJPUCBUQUJMRSBzYWxl c19saXN0MjsKQEAgLTc1OSw5ICs3NjUsMTEgQEAgQ1JFQVRFIFRBQkxFIHQzIChpIGludCwgdCB0 ZXh0KTsKIC0tIEVSUk9SOiAgcmVsYXRpb24gInQxcDEiIGlzIG5vdCBhIHBhcnRpdGlvbiBvZiBy ZWxhdGlvbiAidDIiCiBBTFRFUiBUQUJMRSB0MiBNRVJHRSBQQVJUSVRJT05TICh0MXAxLCB0MnBh KSBJTlRPIHQycDsKIEVSUk9SOiAgcmVsYXRpb24gInQxcDEiIGlzIG5vdCBhIHBhcnRpdGlvbiBv ZiByZWxhdGlvbiAidDIiCitISU5UOiAgQUxURVIgVEFCTEUgLi4uIE1FUkdFIFBBUlRJVElPTlMg Y2FuIG9ubHkgbWVyZ2UgcGFydGl0aW9ucyBkb24ndCBoYXZlIHN1Yi1wYXJ0aXRpb25zCiAtLSBF UlJPUjogICJ0MyIgaXMgbm90IGEgcGFydGl0aW9uCiBBTFRFUiBUQUJMRSB0MiBNRVJHRSBQQVJU SVRJT05TICh0MnBhLCB0MykgSU5UTyB0MnA7Ci1FUlJPUjogICJ0MyIgaXMgbm90IGEgcGFydGl0 aW9uCitFUlJPUjogICJ0MyIgaXMgbm90IGEgcGFydGl0aW9uIG9mIHBhcnRpdGlvbmVkIHRhYmxl ICJ0MiIKK0hJTlQ6ICBBTFRFUiBUQUJMRSAuLi4gTUVSR0UgUEFSVElUSU9OUyBjYW4gb25seSBt ZXJnZSBwYXJ0aXRpb25zIGRvbid0IGhhdmUgc3ViLXBhcnRpdGlvbnMKIERST1AgVEFCTEUgdDM7 CiBEUk9QIFRBQkxFIHQyOwogRFJPUCBUQUJMRSB0MTsKLS0gCjIuMzQuMQoK --00000000000071ef540637aa0386--