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 1vnzBC-00EQCJ-1c for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Feb 2026 13:13:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vnzBB-00H1TA-1O for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Feb 2026 13:13:53 +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 1vnzBA-00H1Sz-2f for pgsql-hackers@lists.postgresql.org; Thu, 05 Feb 2026 13:13:52 +0000 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vnzB8-00000000gRT-2s57 for pgsql-hackers@lists.postgresql.org; Thu, 05 Feb 2026 13:13:51 +0000 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-65941c07e8dso1522922a12.1 for ; Thu, 05 Feb 2026 05:13:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770297227; cv=none; d=google.com; s=arc-20240605; b=iLNjTf4CPQ+JF/bEWq5tB/DVqo+QiWdYnV2XgxCeBFuUU1imiUjxrvAZmVQWRMGSyQ 9Z66M1uZCI9ruNqBGYhZDpJ63kOKxKY/3o6AmNgL6PTpk2Hj7yTYdUStnUaGOUySnhy9 VgDaiZTIqEHxwvb2ohotTl1+nG1idSbQByDOBrnIXS/1X6A/Q/hkyTSA4FsjybMBjjL+ 4BtIcA/Il7pRfqAkjrorD+EaGrIfhCXcgMcEmHI9J55JhxZzDxYr9m4S+EjwUUduqVb9 icqdl2Ntl9s5zqD4SolK54LL9EFLfn9no9UW2VCRIwe5TxBF8UPtCxkg5Ff7BRohu67W rqvg== 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=JTb/1pzNdK1VD3wAxSac4CJ/HUUdAXHW0BBhJPNzvRk=; fh=rvSywt+oOhuy+6d+NtB+ekHWkLKwioSyhwYLROb2RmE=; b=DHqDudRZixMbkBLN10o+nEu2Xw3gGQCfhmtUrqg9vIQ3+59LUlqRMSgp0Agr/GipJK xvGZT836q0UatQdYOKCSp/puQn8YKRfjGnK2vNlLb17AZOHMEVE7y1Qfc9lzszTrK8ek hu3S85HFYvNVNH8Li3DTqo2F9JNrzJnzQBaT7ZBsOmOacI2QuNlZ93/HVrKCkBOWZHjk W5ELsK3lcEw9TXBJvJg8vcL+p/iajQ9siLSqUyeEzzgF9sWDJa2WXJCNqRPkO63imj3t S/nNGlglUTHT/oo+R4wlv/ntMXbHtSbxCexOtVWuS8/+VLbedkTkx1IHvqrVFGinpr3w A8hw==; 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=cybertec.at; s=google; t=1770297227; x=1770902027; 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=JTb/1pzNdK1VD3wAxSac4CJ/HUUdAXHW0BBhJPNzvRk=; b=O/xeDWydQk6pwqrRWqrG0u3pK8uD5SKP+JffJj02N2IrhBzgUgq7DM7Q7Ke7LXqK22 Vir8S3KsWJ+6Qasm98T/wp0Ick8oa74Xmb9P92+ocu225XlsuRGJXBvaWjrrRXWNs21N s5gMMs6bXwvrQyPV3KS0SGtIa8tMdYePl9+KnlsDXGpvbV2z18OFWy/Dlf66x9qW1+C0 eV1QtjGseEzTNCQ8ts266iEK4CvOohu5DzkwZkTZL1g6tyAwssb8QHYY2zf5bw1juNmI U/YtlBHhye0xrZY1MW6YpKv23/8MucE+O27jWhmdVjsOIWn2OZBtORV4lb2NtlzfTogM bXmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770297227; x=1770902027; 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=JTb/1pzNdK1VD3wAxSac4CJ/HUUdAXHW0BBhJPNzvRk=; b=eaVZqFzAvqKc3SkO1oo4dKuD2xA7+PHjYhAUSCUnCUZNIUXWvO10TSi0OSddYe9vXf ZtAgpDnZB/T1gddcMSfeOsZySQdmEDsD6aEzZ0IQTWSV61Sz56oQJn0m/FTQFmyox7Jb 1OTDll/Ix3Jl7j4tGPBBGWTDzWV3Bz4NMqUWzwsZdrnT8d1eJJQeanoNo0fPDUuMjti7 w2X4Y/Y5kkoEESRAAaNsY5fi2rkVC1rilq4UpUKxBefHL3Z5FBxH6hyhinkTzhsltoeP aRAZaUgFCCkTZKMlk8ZHvuOKxsVetKoxsO1CXgBCd5ZJm5OdeZ2LHhxxamVYSQ7Lcezo PsWQ== X-Forwarded-Encrypted: i=1; AJvYcCW7G8V1YqJNtwe65/MnPUCpMFSGb3H6cdrv+oP56ITWAxa8OkhhppKGXNWBKNDbZKO06XC2lVKQHDdyEusq@lists.postgresql.org X-Gm-Message-State: AOJu0Yy796LYEfWGP6L1QOBaibL7iUEIv+M0JDRV41t1QXGWkcJ6DEmv wC/Y128GgYTdMzDPXiHntHBvqJnH/djFkUWV+NtUdlaFx8Vl+eIfBMSfuKoFgc0kbSBEoVGVTSM 0rG9iSDvajiiXJcMz73Gl+uVDbWWjyyJxvZqd1/1t/w== X-Gm-Gg: AZuq6aKfIZMIjeSJmiMhJkZ2bn4PTL2echo8Kv+j2KhImq9yS9h2unyOI2MGluGY1tn B6TF8qX3vl58fwkl00jdWLKjOFcQHqlP76uxEhYJHluGIGuPr+CKdXjLt3E0e54bpudx50whqnA o2mWW8bvIJ+vpHNcGBXBD9ChGAV9IgBpyMNjcAz1jrPOcjiigMXkYjxIQMRbDggEwPt+tbMWa5p YQFxSiyxQ7QeniW+Pa5BoMziHtGQiWEnPAA5fj6feK2AXldOfZcQPI9sVN1dePuFwHNHMw= X-Received: by 2002:a17:906:ee8e:b0:b8e:92e:d30b with SMTP id a640c23a62f3a-b8e9f086a2amr495038766b.21.1770297227470; Thu, 05 Feb 2026 05:13:47 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Pavlo Golub Date: Thu, 5 Feb 2026 14:13:36 +0100 X-Gm-Features: AZwV_QgDAO8U00BcPnthGpJwRI9Nbci9sgNgnf3t5cD1acOzo5unR6G-2Snyut0 Message-ID: Subject: Re: [PATCH] Add pg_current_vxact_id() function to expose virtual transaction IDs To: assam258@gmail.com Cc: Michael Paquier , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000641bd2064a137113" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000641bd2064a137113 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi hackers, Thank you a lot for the feedback on this patch. And sorry for the delay with the answer. I'd like to address Michael's concern that pg_current_vxact_id() is merely a convenience feature when pg_locks can provide the same information. I believe there are stronger technical and design reasons for this function beyond reducing typing. pg_current_vxact_id() complexity is O(1) with direct memory reads and no locks, while querying pg_locks requires O(n) where n is the number of locks, among these operations are constructing tuples then filtering. For me it's obviously more work. The proposed function is essentially free compared to pg_locks querying. As for the usage pattern this is how Postgres codebase is built from the very beginning. PostgreSQL has many established patterns where both SQL commands and functions exist for the same purpose, providing programmatic access even when an alternative exists, e.g. NOTIFY vs pg_notify(), SHOW vs current_setting(), pg_stat_activity vs pg_current_xact_id() vs pg_current_xact_id_if_assigned(), pg_stat_activity vs pg_backend_pid(), etc. I see a clear pattern where Postgres provides function APIs fir frequently needed info, even if it's theoretically possible to get that info through other means. My main concern though is about semantic clarity. I see a huge problem that one needs to query pg_locks to get VXID. Why would I want to query the lock subsystem to get transaction ID? That's very confusing. pg_current_vxact_id() is semantically precise: "What is my transaction's VXID?" We immediately have the direct answer from MyProc without indirection through unrelated subsystems, which is pretty obvious to anyone reading the code. Having pg_current_vxact_id() increases API consistency. VXIDs deserve the same treatment because they're fundamental to Postgres transaction tracking and they uniquely identify every transaction (unlike XIDs). I could day VXIDs are universal and that's why I think the current asymmetry is odd: - get XID: SELECT pg_current_xact_id() - get PID: SELECT pg_backend_pid() - get VXID: SELECT ... FROM pg_locks WHERE ... LIMIT 1 (why?) Plus taking into account the minimal implementation and support costs we should apply it. 20 lines of code without new infrastructure or data structures changes sounds like a solid and maintainable piece. No runtime overhead, no maintenance burden, simplest function without locks or side effects. I've prepared v3 of the patch addrressing Henson's code review: - Added #define VXID_FMT "%d/%u" to lock.h - Updated lockfuncs.c, elog.c, and xid8funcs.c to use it - Use "localXID" (not "localTransactionId") in user docs I'd appreciate thoughts from others in the community on whether this reasoning is compelling. Best regards, Pavlo Golub On Fri, Jan 9, 2026 at 4:15=E2=80=AFAM Henson Choi wro= te: > > > > 2026=EB=85=84 1=EC=9B=94 9=EC=9D=BC (=EA=B8=88) AM 9:25, Michael Paquier = =EB=8B=98=EC=9D=B4 =EC=9E=91=EC=84=B1: >> >> On Mon, Dec 08, 2025 at 12:09:58PM +0000, Pavlo Golub wrote: >> > Virtual transaction IDs are fundamental to PostgreSQL's transaction >> > tracking, >> > appearing in pg_locks.virtualtransaction, log output via %v placeholde= r, and >> > internal transaction management. However, there's currently no direct = SQL >> > function to retrieve the current VXID, forcing applications to query >> > pg_locks >> > or parse log files to obtain this information. >> >> This is replacing one SQL in a given session by another, as a session >> currently running a transaction can query itself pg_locks and match an >> entry with its own pg_backend_pid(). Hence I don't see the need for >> this function, except simplicity in retrieving a session's state with >> less characters typed at the end? > > > I see this as a tradeoff between minor convenience and negligible > addition cost. > > The community should decide whether this tradeoff is worth it. > >> >> Thoughts and opinions from others are welcome. I'm always OK to be >> outvoted. >> -- >> Michael > > > Best regards, > Henson Choi > --000000000000641bd2064a137113 Content-Type: application/x-patch; name="v3-0001-add-pg_current_vxact_id-function.patch" Content-Disposition: attachment; filename="v3-0001-add-pg_current_vxact_id-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml9ge3dh0 RnJvbSBmM2M4NmQ5Nzc2MjkyNDRiNGRlNDVlYjBjNjExYmRiZWUwMzY4NTA1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXZsbyBHb2x1YiA8cGF2bG8uZ29sdWJAY3liZXJ0ZWMuYXQ+ CkRhdGU6IFRodSwgNSBGZWIgMjAyNiAxMjoxNTo0MCArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIEFk ZCBwZ19jdXJyZW50X3Z4YWN0X2lkKCkgZnVuY3Rpb24KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBw Z19jdXJyZW50X3Z4YWN0X2lkKCkgdG8gZXhwb3NlIHRoZSBjdXJyZW50CmJhY2tlbmQncyB2aXJ0 dWFsIHRyYW5zYWN0aW9uIElEIGFzIHRleHQgaW4gdGhlIGZvcm1hdCAncHJvY051bWJlci9seGlk JwooZS5nLiwgJzMvNDInKS4KClZpcnR1YWwgdHJhbnNhY3Rpb24gSURzIGFyZSBhbHdheXMgYXNz aWduZWQgdG8gZXZlcnkgdHJhbnNhY3Rpb24sIHVubGlrZQpyZWd1bGFyIFhJRHMgd2hpY2ggYXJl IG9ubHkgYXNzaWduZWQgd2hlbiBhIHRyYW5zYWN0aW9uIG1vZGlmaWVzIGRhdGEuClRoaXMgbWFr ZXMgVlhJRHMgdXNlZnVsIGZvciB0cmFja2luZyBhbmQgY29ycmVsYXRpbmcgYWxsIHRyYW5zYWN0 aW9ucywKaW5jbHVkaW5nIHJlYWQtb25seSBvbmVzLgoKVGhlIFZYSUQgZm9ybWF0IG1hdGNoZXMg d2hhdCdzIHVzZWQgaW46Ci0gZWxvZyAldiBwbGFjZWhvbGRlciBmb3IgbG9nZ2luZwotIHBnX2xv Y2tzLnZpcnR1YWx0cmFuc2FjdGlvbiBjb2x1bW4KLSBJbnRlcm5hbCBQb3N0Z3JlU1FMIHRyYW5z YWN0aW9uIHRyYWNraW5nCgpUaGUgZnVuY3Rpb24gcmV0dXJucyBOVUxMIGR1cmluZyByZWNvdmVy eSBvciB3aGVuIG5vIHZhbGlkIFZYSUQgZXhpc3RzLgoKQ2hhbmdlcyBpbiB2MzoKLSBBZGQgVlhJ RF9GTVQgbWFjcm8gdG8gbG9jay5oIHRvIGVsaW1pbmF0ZSBmb3JtYXQgc3RyaW5nIGR1cGxpY2F0 aW9uCi0gVXBkYXRlIGxvY2tmdW5jcy5jLCBlbG9nLmMsIGFuZCB4aWQ4ZnVuY3MuYyB0byB1c2Ug VlhJRF9GTVQKLSBGaXggZG9jdW1lbnRhdGlvbiB0byB1c2UgJ2xvY2FsWElEJyB0ZXJtaW5vbG9n eSBmb3IgY29uc2lzdGVuY3kKLSBBZGQgY29tcHJlaGVuc2l2ZSByZWdyZXNzaW9uIHRlc3RzIGlu IHhpZC5zcWwKLSBBZGQgZG9jdW1lbnRhdGlvbiBpbiBmdW5jLWluZm8uc2dtbCBhbmQgeGFjdC5z Z21sCi0gVXNlIE9JRCA5NTM4IChpbiBkZXZlbG9wbWVudCByYW5nZSA4MDAwLTk5OTkpCgpBZGRy ZXNzZXMgcmV2aWV3IGNvbW1lbnRzIGZyb20gSGVuc29uIENob2kuCgpEaXNjdXNzaW9uOiBodHRw czovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBQUFlX3pCVWQzZXBWcWNEQU1WbUxE dDQtZGh4Vlk1VzA5JTJCZ3A1TkRfUC0tYjkwZWVBJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mv c3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAgfCAyMiArKysrKysrKysrKysrKysrKysrKysK IGRvYy9zcmMvc2dtbC94YWN0LnNnbWwgICAgICAgICAgICB8ICA0ICsrKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9sb2NrZnVuY3MuYyB8ICAyICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQveGlk OGZ1bmNzLmMgfCAyNiArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGls cy9lcnJvci9lbG9nLmMgICAgfCAgNCArKy0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0ICAgfCAgMyArKysKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oICAgICAgICB8ICA3ICsr KysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveGlkLm91dCB8IDMyICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3hpZC5zcWwgICAgICB8 IDEzICsrKysrKysrKysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMTA5IGluc2VydGlvbnMoKyksIDQg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNn bWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAppbmRleCAyOTRmNDVlODJhMy4u NGVmZTAxZDYzYjkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCkBAIC0yODY0LDYgKzI4NjQs MjggQEAgYWNsICAgICAgfCB7cG9zdGdyZXM9YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdy ZXN9CiAgICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KIAorICAgICAgPHJvdz4K KyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19z aWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfY3Vy cmVudF92eGFjdF9pZDwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxm dW5jdGlvbj5wZ19jdXJyZW50X3Z4YWN0X2lkPC9mdW5jdGlvbj4gKCkKKyAgICAgICAgPHJldHVy bnZhbHVlPnRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCB2aXJ0dWFsIHRyYW5zYWN0aW9uIElEIChWWElE KSBpbiB0aGUKKyAgICAgICAgZm9ybWF0IDxsaXRlcmFsPnByb2NOdW1iZXIvbG9jYWxYSUQ8L2xp dGVyYWw+CisgICAgICAgIChmb3IgZXhhbXBsZSwgPGxpdGVyYWw+My80MjwvbGl0ZXJhbD4pLgor ICAgICAgICBWaXJ0dWFsIHRyYW5zYWN0aW9uIElEIGlzIGFsd2F5cyBhc3NpZ25lZCB3aGVuIGEg dHJhbnNhY3Rpb24gc3RhcnRzLAorICAgICAgICB1bmxpa2UgcmVndWxhciB0cmFuc2FjdGlvbiBJ RHMgd2hpY2ggYXJlIG9ubHkgYXNzaWduZWQgd2hlbiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24g cGVyZm9ybXMgYSBkYXRhYmFzZSB3cml0ZS4gIFZYSURzIGFyZSBzZXNzaW9uLXNjb3BlZCBhbmQK KyAgICAgICAgZG8gbm90IHBlcnNpc3QgYWNyb3NzIHNlcnZlciByZXN0YXJ0cy4gIFRoZXkgYXJl IHByaW1hcmlseSB1c2VmdWwgZm9yCisgICAgICAgIGNvcnJlbGF0aW5nIHRyYW5zYWN0aW9ucyB3 aXRoIGxvZyBlbnRyaWVzIHRoYXQgdXNlIHRoZSA8bGl0ZXJhbD4ldjwvbGl0ZXJhbD4gcGxhY2Vo b2xkZXIKKyAgICAgICAgaW4gPHhyZWYgbGlua2VuZD0iZ3VjLWxvZy1saW5lLXByZWZpeCIvPi4K KyAgICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InRyYW5zYWN0aW9uLWlkIi8+IGZvciBkZXRhaWxz LgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAgICAgIDxyb3c+CiAg ICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2ln bmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC94 YWN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwveGFjdC5zZ21sCmluZGV4IDNhYTdlZTEzODNlLi40YTU3 NTMxNzhlMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3hhY3Quc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwveGFjdC5zZ21sCkBAIC0zMSw3ICszMSw5IEBACiAgICA8bGl0ZXJhbD5sb2NhbFhJRDwv bGl0ZXJhbD4uICBGb3IgZXhhbXBsZSwgdGhlIHZpcnR1YWwgdHJhbnNhY3Rpb24KICAgIElEIDxs aXRlcmFsPjQvMTI1MzI8L2xpdGVyYWw+IGhhcyBhIDxsaXRlcmFsPnByb2NOdW1iZXI8L2xpdGVy YWw+CiAgICBvZiA8bGl0ZXJhbD40PC9saXRlcmFsPiBhbmQgYSA8bGl0ZXJhbD5sb2NhbFhJRDwv bGl0ZXJhbD4gb2YKLSAgIDxsaXRlcmFsPjEyNTMyPC9saXRlcmFsPi4KKyAgIDxsaXRlcmFsPjEy NTMyPC9saXRlcmFsPi4gIFRoZSBmdW5jdGlvbgorICAgPGZ1bmN0aW9uPnBnX2N1cnJlbnRfdnhh Y3RfaWQ8L2Z1bmN0aW9uPiByZXR1cm5zIHRoZSBjdXJyZW50CisgICB0cmFuc2FjdGlvbidzIFZY SUQuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9sb2NrZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYwppbmRl eCA5ZGFkZDZkYTY3Mi4uMzY3NzJmZmQzZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9sb2NrZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMK QEAgLTgwLDcgKzgwLDcgQEAgVlhJREdldERhdHVtKFByb2NOdW1iZXIgcHJvY051bWJlciwgTG9j YWxUcmFuc2FjdGlvbklkIGx4aWQpCiAJICovCiAJY2hhcgkJdnhpZHN0clszMl07CiAKLQlzbnBy aW50Zih2eGlkc3RyLCBzaXplb2YodnhpZHN0ciksICIlZC8ldSIsIHByb2NOdW1iZXIsIGx4aWQp OworCXNucHJpbnRmKHZ4aWRzdHIsIHNpemVvZih2eGlkc3RyKSwgVlhJRF9GTVQsIHByb2NOdW1i ZXIsIGx4aWQpOwogCiAJcmV0dXJuIENTdHJpbmdHZXRUZXh0RGF0dW0odnhpZHN0cik7CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQveGlkOGZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQveGlkOGZ1bmNzLmMKaW5kZXggYzYwN2U3OGQ5YWMuLmJjOWUxMDc2Y2M5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQveGlkOGZ1bmNzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3hpZDhmdW5jcy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi bGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9y YWdlL2x3bG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jbnVtYmVyLmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKQEAgLTM2MCw2ICszNjEsMzEgQEAgcGdfY3VycmVudF94YWN0 X2lkX2lmX2Fzc2lnbmVkKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX0ZVTExUUkFOU0FD VElPTklEKHRvcGZ4aWQpOwogfQogCisvKgorICogcGdfY3VycmVudF92eGFjdF9pZCgpIHJldHVy bnMgdGV4dAorICoKKyAqCVJldHVybiB0aGUgY3VycmVudCB2aXJ0dWFsIHRyYW5zYWN0aW9uIElE ICh2eGlkKS4KKyAqCXZ4aWQgaXMgYWx3YXlzIGFzc2lnbmVkIGFuZCBhdmFpbGFibGUsIHVubGlr ZSByZWd1bGFyIHRyYW5zYWN0aW9uIElEcy4KKyAqCVJldHVybnMgTlVMTCBpZiBubyB2YWxpZCB2 eGlkIGV4aXN0cyAoZS5nLiwgZHVyaW5nIHN0YXJ0dXAvcmVjb3ZlcnkpLgorICovCitEYXR1bQor cGdfY3VycmVudF92eGFjdF9pZChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJCXZ4aWRzdHJb MzJdOworCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBoYXZlIGEgdmFsaWQgdnhpZC4gIFRoZSB2eGlk IGZvcm1hdCBtYXRjaGVzIHdoYXQncyB1c2VkCisJICogaW4gZWxvZy5jIGZvciB0aGUgJXYgcGxh Y2Vob2xkZXIgYW5kIGluIHBnX2xvY2tzLnZpcnR1YWx0cmFuc2FjdGlvbi4KKwkgKi8KKwlpZiAo TXlQcm9jID09IE5VTEwgfHwgTXlQcm9jLT52eGlkLnByb2NOdW1iZXIgPT0gSU5WQUxJRF9QUk9D X05VTUJFUikKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCXNucHJpbnRmKHZ4aWRzdHIsIHNpemVv Zih2eGlkc3RyKSwgVlhJRF9GTVQsCisJCQkgTXlQcm9jLT52eGlkLnByb2NOdW1iZXIsIE15UHJv Yy0+dnhpZC5seGlkKTsKKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KHZ4aWRz dHIpKTsKK30KKwogLyoKICAqIHBnX2N1cnJlbnRfc25hcHNob3QoKSByZXR1cm5zIHBnX3NuYXBz aG90CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jCmluZGV4IGU2YTRlZjk5MDU5Li5mZDY0YTQ4NDdl ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYwpAQCAtMzE4MSwxMiArMzE4MSwxMiBAQCBsb2dfc3Rh dHVzX2Zvcm1hdChTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqZm9ybWF0LCBFcnJvckRhdGEg KmVkYXRhKQogCQkJCQl7CiAJCQkJCQljaGFyCQlzdHJmYnVmWzEyOF07CiAKLQkJCQkJCXNucHJp bnRmKHN0cmZidWYsIHNpemVvZihzdHJmYnVmKSAtIDEsICIlZC8ldSIsCisJCQkJCQlzbnByaW50 ZihzdHJmYnVmLCBzaXplb2Yoc3RyZmJ1ZikgLSAxLCBWWElEX0ZNVCwKIAkJCQkJCQkJIE15UHJv Yy0+dnhpZC5wcm9jTnVtYmVyLCBNeVByb2MtPnZ4aWQubHhpZCk7CiAJCQkJCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiUqcyIsIHBhZGRpbmcsIHN0cmZidWYpOwogCQkJCQl9CiAJCQkJCWVsc2UK LQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJWQvJXUiLCBNeVByb2MtPnZ4aWQucHJvY051 bWJlciwgTXlQcm9jLT52eGlkLmx4aWQpOworCQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsIFZY SURfRk1ULCBNeVByb2MtPnZ4aWQucHJvY051bWJlciwgTXlQcm9jLT52eGlkLmx4aWQpOwogCQkJ CX0KIAkJCQllbHNlIGlmIChwYWRkaW5nICE9IDApCiAJCQkJCWFwcGVuZFN0cmluZ0luZm9TcGFj ZXMoYnVmLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggODNmNjUwMWRmMzguLmZiMmY5MzI0 YjAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEwNjkyLDYgKzEwNjkyLDkgQEAKIHsg b2lkID0+ICc1MDY2JywgZGVzY3IgPT4gJ2NvbW1pdCBzdGF0dXMgb2YgdHJhbnNhY3Rpb24nLAog ICBwcm9uYW1lID0+ICdwZ194YWN0X3N0YXR1cycsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcmV0 dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd4aWQ4JywgcHJvc3JjID0+ICdwZ194 YWN0X3N0YXR1cycgfSwKK3sgb2lkID0+ICc5NTM4JywgZGVzY3IgPT4gJ2dldCBjdXJyZW50IHZp cnR1YWwgdHJhbnNhY3Rpb24gSUQnLAorICBwcm9uYW1lID0+ICdwZ19jdXJyZW50X3Z4YWN0X2lk JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9wYXJhbGxlbCA9PiAndScsCisgIHByb3JldHR5cGUg PT4gJ3RleHQnLCBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwZ19jdXJyZW50X3Z4YWN0 X2lkJyB9LAogCiAjIHJlY29yZCBjb21wYXJpc29uIHVzaW5nIG5vcm1hbCBjb21wYXJpc29uIHJ1 bGVzCiB7IG9pZCA9PiAnMjk4MScsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xv Y2suaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCmluZGV4IDU1ZmZhYTVlNGE1Li45NjIw MDliZGUwOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9sb2NrLmgKQEAgLTY0LDYgKzY0LDEzIEBAIHR5cGVkZWYgc3RydWN0 CiAJTG9jYWxUcmFuc2FjdGlvbklkIGxvY2FsVHJhbnNhY3Rpb25JZDsJLyogbHhpZCBmcm9tIFBH UFJPQyAqLwogfSBWaXJ0dWFsVHJhbnNhY3Rpb25JZDsKIAorLyoKKyAqIEZvcm1hdCBzdHJpbmcg Zm9yIFZYSUQgZGlzcGxheS4KKyAqIFVzZWQgYnkgZWxvZy5jICgldiBwbGFjZWhvbGRlciksIGxv Y2tmdW5jcy5jIChWWElER2V0RGF0dW0pLAorICogYW5kIHhpZDhmdW5jcy5jIChwZ19jdXJyZW50 X3Z4YWN0X2lkKS4KKyAqLworI2RlZmluZSBWWElEX0ZNVCAiJWQvJXUiCisKICNkZWZpbmUgSW52 YWxpZExvY2FsVHJhbnNhY3Rpb25JZAkJMAogI2RlZmluZSBMb2NhbFRyYW5zYWN0aW9uSWRJc1Zh bGlkKGx4aWQpICgobHhpZCkgIT0gSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZCkKICNkZWZpbmUg VmlydHVhbFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHZ4aWQpIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQveGlkLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveGlk Lm91dAppbmRleCAxY2U3ODI2Y2Y5MC4uNTU2NDljYzQzNTggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQveGlkLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3hpZC5vdXQKQEAgLTQ2Myw2ICs0NjMsMzggQEAgU0VMRUNUIHBnX2N1cnJlbnRfeGFjdF9pZF9p Zl9hc3NpZ25lZCgpIElTIE5PVCBESVNUSU5DVCBGUk9NIHhpZDggOidwZ19jdXJyZW50X3gKICB0 CiAoMSByb3cpCiAKK0NPTU1JVDsKKy0tIHRlc3QgcGdfY3VycmVudF92eGFjdF9pZAorQkVHSU47 CitTRUxFQ1QgcGdfY3VycmVudF92eGFjdF9pZCgpIElTIE5PVCBOVUxMIEFTIHZ4aWRfYXNzaWdu ZWQ7CisgdnhpZF9hc3NpZ25lZCAKKy0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VM RUNUIHBnX2N1cnJlbnRfdnhhY3RfaWQoKSB+ICdeXGQrL1xkKyQnIEFTIHZ4aWRfZm9ybWF0X29r OworIHZ4aWRfZm9ybWF0X29rIAorLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VM RUNUIHBnX2N1cnJlbnRfdnhhY3RfaWQoKSBBUyB2eGlkMSBcZ3NldAorU0VMRUNUIHBnX2N1cnJl bnRfdnhhY3RfaWQoKSA9IDondnhpZDEnIEFTIHZ4aWRfc3RhYmxlOworIHZ4aWRfc3RhYmxlIAor LS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworQ09NTUlUOworLS0gc3RhcnQgbmV3IHRyYW5z YWN0aW9uLCB2eGlkIHNob3VsZCBjaGFuZ2UKK0JFR0lOOworU0VMRUNUIHBnX2N1cnJlbnRfdnhh Y3RfaWQoKSBBUyB2eGlkMiBcZ3NldAorU0VMRUNUIDondnhpZDInIDw+IDondnhpZDEnIEFTIHZ4 aWRfY2hhbmdlZDsKKyB2eGlkX2NoYW5nZWQgCistLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykK KwogQ09NTUlUOwogLS0gdGVzdCB4aWQgc3RhdHVzIGZ1bmN0aW9ucwogQkVHSU47CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC94aWQuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv eGlkLnNxbAppbmRleCA5ZjcxNmIzNjUzYS4uNWE0OGY5MTRhMWYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3hpZC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwveGlkLnNx bApAQCAtMTMyLDYgKzEzMiwxOSBAQCBTRUxFQ1QgcGdfY3VycmVudF94YWN0X2lkKCkgXGdzZXQK IFNFTEVDVCBwZ19jdXJyZW50X3hhY3RfaWRfaWZfYXNzaWduZWQoKSBJUyBOT1QgRElTVElOQ1Qg RlJPTSB4aWQ4IDoncGdfY3VycmVudF94YWN0X2lkJzsKIENPTU1JVDsKIAorLS0gdGVzdCBwZ19j dXJyZW50X3Z4YWN0X2lkCitCRUdJTjsKK1NFTEVDVCBwZ19jdXJyZW50X3Z4YWN0X2lkKCkgSVMg Tk9UIE5VTEwgQVMgdnhpZF9hc3NpZ25lZDsKK1NFTEVDVCBwZ19jdXJyZW50X3Z4YWN0X2lkKCkg fiAnXlxkKy9cZCskJyBBUyB2eGlkX2Zvcm1hdF9vazsKK1NFTEVDVCBwZ19jdXJyZW50X3Z4YWN0 X2lkKCkgQVMgdnhpZDEgXGdzZXQKK1NFTEVDVCBwZ19jdXJyZW50X3Z4YWN0X2lkKCkgPSA6J3Z4 aWQxJyBBUyB2eGlkX3N0YWJsZTsKK0NPTU1JVDsKKy0tIHN0YXJ0IG5ldyB0cmFuc2FjdGlvbiwg dnhpZCBzaG91bGQgY2hhbmdlCitCRUdJTjsKK1NFTEVDVCBwZ19jdXJyZW50X3Z4YWN0X2lkKCkg QVMgdnhpZDIgXGdzZXQKK1NFTEVDVCA6J3Z4aWQyJyA8PiA6J3Z4aWQxJyBBUyB2eGlkX2NoYW5n ZWQ7CitDT01NSVQ7CisKIC0tIHRlc3QgeGlkIHN0YXR1cyBmdW5jdGlvbnMKIEJFR0lOOwogU0VM RUNUIHBnX2N1cnJlbnRfeGFjdF9pZCgpIEFTIGNvbW1pdHRlZCBcZ3NldAotLSAKMi41Mi4wCgo= --000000000000641bd2064a137113--