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 1wZic0-001Ei0-36 for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Jun 2026 05:14:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZibz-004KZZ-2t for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Jun 2026 05:14:51 +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.96) (envelope-from ) id 1wZibz-004KZQ-1m for pgsql-hackers@lists.postgresql.org; Wed, 17 Jun 2026 05:14:51 +0000 Received: from mail-vs1-xe30.google.com ([2607:f8b0:4864:20::e30]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wZibx-00000000qui-0uMa for pgsql-hackers@postgresql.org; Wed, 17 Jun 2026 05:14:51 +0000 Received: by mail-vs1-xe30.google.com with SMTP id ada2fe7eead31-6cb414a5d50so4315740137.3 for ; Tue, 16 Jun 2026 22:14:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781673287; cv=none; d=google.com; s=arc-20240605; b=Df83tWe96QgT33s/Zp47YBihSA8rHhQKNXRYlEqV7UQ3e/fpJpnzi3PgupFvDx5Uz7 YIGboIQ9l7L6QCMmaFuvfF6WXdBlGHHT6Egi6qFkXSAFlZYsET6WIaqNu85VhRpi1Ycn tIcMXnPvw0+cy4xviBOCG7kMBN4ZOoY8Geh7iBouobWgmRNFweb0JJd4+HVe+Dqbs2aO KBW2fDTawFOXjXzwRHm9WW/poP/5jfvY4gcMbuW88//TTkG9iZpk3ByUZF3WGJJB2Q0Z sBKdBvMXxyzTv5wQQJaQHapKtw1Qwj/iaQCUPABNY+yJq0ZawpOQf4nrR2yg/2aeglop G5ag== 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=SrbNpQG/D/jMViv8zrybQmoYrzjpbvXZdEUNJp4BgJE=; fh=ldBRyeZx1WyZ0y6bg/St1sVtTbBRb7MagEQY9q1kvIc=; b=E/i2LQ+2BA9DzxQQi409AnMGo0d/oiHvF2ifS+gGrVv0aqkHJ/crGVVmYVRZjL7Wwp 8tmA4pxZtKtUM6PALxz8Ph+iJFiv4W3If05+lUXwEwtAZfuCAQTtTdKrQHSthlpkRWRQ 9ALpOnHBtIL4/tSieYm8P9Bf84tBMrYXX2Va2mOnwy0fqY1AwyUXqtIznSbCyYnWX3kz H0rFa9m7PYkSoN6uAnZfZEc/l9wwZ+Oaq9KuOHjnvJG01lY+3WzhAhluKsjCNYA+2vWZ YH3jiGYK6D7OSzIhvYhpH8nKT1mgscU0SCS9h+JIF4oU5n1VuS0Dr97dQChlebwhaoGR KNQQ==; darn=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=1781673287; x=1782278087; darn=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=SrbNpQG/D/jMViv8zrybQmoYrzjpbvXZdEUNJp4BgJE=; b=Y1Uv+zYr/4pDOmKK3sC/3SehTnkW0lKrv+AumQZo25QFh4A85Js/TOxBQqY2sUQGdm t6TYPNLPKPnUkz7K3uzyRGQ47spkIJk+Lt6BGtrDByFOUzvK49DTFlRz5BoYtY0lsqFA /4IX+Y9m4d9sQSaB7uhstd2szbjeBqIHFJrBQmH4DPPBFEcMCVdNmXKEPl+NkXqkp+4+ 0yNocx1yP+BaKiWx0A6snOtZ474tmix8++joqtJYZR/awRe/UV7XOUMpfQ9Crq7EQoRH HG0YQ9N/FTKk4pWS74AEetu6XFuVhw8pQ37nlcVEp3Cs0uMrocexIIiq+dSkXGEP/O7F PcWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781673287; x=1782278087; 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=SrbNpQG/D/jMViv8zrybQmoYrzjpbvXZdEUNJp4BgJE=; b=E0oezmKRwwsebEysDq6GDNXoOZX/7G4CwDcbWXTSZF2g2/f+lpWLL98/GqycfPC22q enoIuhoiaYaQwKezHM4fbStpvh8aq0JTrAim5y4vuoDnbBO9U8MkmQExIckd2gLsdbfp pzNChnfepkkr+ipYRdeBo2sVHxiROkYXLznW6cCirGfbxV9oEnrct1gAkxz/xcLser/e AvHGU4KTeIAnvx/l+NPluvEc8lXyxlbGzbdAlQvgmnz0KrNCqAUx5zxAyRYBtFjibHGW 7yTR8Ijv1dmtnd67L6EJcFXcreUVJ0sDHxgMFb1dGYXj+6wDohAtLWgoRdsxuJJy7xcL R0zQ== X-Forwarded-Encrypted: i=1; AFNElJ/hSwPHsLfpBCXeP/Xm5e1BkmV+JoPcklAwcAng4sIihZ8ehgqrawKL4wDwbj9YDCMNNeuLra/YE4fikFCV@postgresql.org X-Gm-Message-State: AOJu0YyWGITgWiArnA4escuz6g7pwthbshxvRGtyLvq6Lg770fn6ZYe3 fX0ZEcGnHccy9+0xyPc4Mo+woKAYaCZy6ZSNknLK6w4NgAvuCxZgXvCqBXK3pjpRVS90A/iFG6r nqjEHeorKNJ4xSvHjvnzofbx56CZqRTY= X-Gm-Gg: Acq92OFRS05/HV4/p42g5AgJKSsABFC/qlx7FfyqSj4czRnXdRL28itDNse7plHR3sF B9IDsCpdYkQPGhqg1dP22YOVHWxvHhHxci0iOCUweTzdq7Ovo1nAbbvItJaJTcCNsfJjM2QeFKR rrtRpCkg+7bF9bhHogiBn6JqRmyNIDRq0h1RgWViUkT9ZdOxQYjs5HV2Z0yX3oxkMle+OznGmWG DmhkwFT4VvU98vauI5obZ08k3x33MV32wKMVkVeJwG2JDOaGGK0ti9CRCTqQ0jT+Dd+LvOM9lxK wAv2no4q77T4i7td6gsdRf/OEinkLyY1MUp4M+ScEpiVsuSINqIXnDKXwhNHvpH63tRRm6/VZkG zG+uZusCZd5+dBX+HwotNsY3bAs8mXHSLRzTK43LWTTXGHdMTNR6m5gFzB0JEYD0Zt2F7FRr7ZX TQz0ykbXpkwtAq5zk= X-Received: by 2002:a05:6102:2b9a:b0:633:34c6:6ace with SMTP id ada2fe7eead31-7246d52fd34mr1252707137.26.1781673286942; Tue, 16 Jun 2026 22:14:46 -0700 (PDT) MIME-Version: 1.0 References: <20260604.132108.405136284364833955.ishii@postgresql.org> <20260609.171307.1883356507067957349.ishii@postgresql.org> In-Reply-To: From: jian he Date: Wed, 17 Jun 2026 13:14:09 +0800 X-Gm-Features: AVVi8Ce9e0KnmGQkJzTPMnYwW8Dz_i5I_VPbo2ZunCjHe1nruHaK9KbsWcT9p3I Message-ID: Subject: Re: Row pattern recognition To: assam258@gmail.com Cc: Tatsuo Ishii , zsolt.parragi@percona.com, sjjang112233@gmail.com, vik@postgresfriends.org, er@xs4all.nl, jacob.champion@enterprisedb.com, david.g.johnston@gmail.com, peter@eisentraut.org, li.evan.chao@gmail.com, pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="0000000000005fe39006546c2319" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005fe39006546c2319 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jun 15, 2026 at 2:32=E2=80=AFPM jian he wrote: > > Hi. > > More review based on https://github.com/assam258-5892/postgres/commits/RP= R > /* arity: a value expression and an optional offset */ Typo: arity I've attached a patch with some refactoring. Please note that the inline comments have not yet been updated to match this refactoring. The below is detailed commit message. ---------------------------------------------------------------------------= --------------------- Simplify ParseFuncOrColumn: It now routes to ParseRPRNavCall exclusively when ParseExprKind is EXPR_KIND_RPR_DEFINE *and* not column projection *and* list_length(funcname) =3D=3D 1. Original behavior is preserved otherwise. Centralize error handling: Treat RPR navigation as FUNCDETAIL_NORMAL to reuse the common error handlin= g in ParseFuncOrColumn, effectively stripping redundant error checks from ParseRPRNavCall. Other miscellaneous code cleanups and minor refactoring. ---------------------------------------------------------------------------= --------------------- -- jian https://www.enterprisedb.com/ --0000000000005fe39006546c2319 Content-Type: application/octet-stream; name="v48-0001-Refactor-ParseFuncOrColumn-and-ParseRPRNavCall.nocfbot" Content-Disposition: attachment; filename="v48-0001-Refactor-ParseFuncOrColumn-and-ParseRPRNavCall.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqhm8ngf0 RnJvbSBkNTg0NTFlYzdjYzA0NzgzZTc3ZWE2ZjRjZWI5Yzk2YzJhMzNkYjEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTcgSnVuIDIwMjYgMTM6MDg6MjggKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 OCAxLzFdIFJlZmFjdG9yIFBhcnNlRnVuY09yQ29sdW1uIGFuZCBQYXJzZVJQUk5hdkNhbGwKClNp bXBsaWZ5IFBhcnNlRnVuY09yQ29sdW1uOgpJdCBub3cgcm91dGVzIHRvIFBhcnNlUlBSTmF2Q2Fs bCBleGNsdXNpdmVseSB3aGVuIFBhcnNlRXhwcktpbmQgaXMKRVhQUl9LSU5EX1JQUl9ERUZJTkUg YW5kIG5vdCBjb2x1bW4gcHJvamVjdGlvbiBhbmQgbGlzdF9sZW5ndGgoZnVuY25hbWUpID09IDEu Ck9yaWdpbmFsIGJlaGF2aW9yIGlzIHByZXNlcnZlZCBvdGhlcndpc2UuCgpDZW50cmFsaXplIGVy cm9yIGhhbmRsaW5nOgpUcmVhdCBSUFIgbmF2aWdhdGlvbiBhcyBGVU5DREVUQUlMX05PUk1BTCB0 byByZXVzZSB0aGUgY29tbW9uIGVycm9yIGhhbmRsaW5nIGluClBhcnNlRnVuY09yQ29sdW1uLCBl ZmZlY3RpdmVseSBzdHJpcHBpbmcgcmVkdW5kYW50IGVycm9yIGNoZWNrcyBmcm9tClBhcnNlUlBS TmF2Q2FsbC4KCk90aGVyIG1pc2NlbGxhbmVvdXMgY29kZSBjbGVhbnVwcyBhbmQgbWlub3IgcmVm YWN0b3JpbmcuCi0tLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYyAgICAgICAgfCAy MjUgKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y cHJfYmFzZS5vdXQgfCAgMTYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jwcl9iYXNlLnNxbCAg ICAgIHwgIDEzICsrCiAzIGZpbGVzIGNoYW5nZWQsIDEyNSBpbnNlcnRpb25zKCspLCAxMjkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYyBi L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9mdW5jLmMKaW5kZXggMGI5ZDY3NmQ2NC4uNTBkN2Jl NThhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYworKysgYi9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCkBAIC0xMjQsNiArMTI0LDcgQEAgUGFyc2VG dW5jT3JDb2x1bW4oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpmdW5jbmFtZSwgTGlzdCAqZmFy Z3MsCiAJaW50CQkJZmdjX2ZsYWdzOwogCWNoYXIJCWFnZ2tpbmQgPSAwOwogCVBhcnNlQ2FsbGJh Y2tTdGF0ZSBwY2JzdGF0ZTsKKwlib29sCQljb3VsZF9iZV9ycHJfbmF2ID0gZmFsc2U7CiAKIAkv KgogCSAqIElmIHRoZXJlJ3MgYW4gYWdncmVnYXRlIGZpbHRlciwgdHJhbnNmb3JtIGl0IHVzaW5n IHRyYW5zZm9ybVdoZXJlQ2xhdXNlCkBAIC0yMjAsMjIgKzIyMSwxOSBAQCBQYXJzZUZ1bmNPckNv bHVtbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKmZ1bmNuYW1lLCBMaXN0ICpmYXJncywKIAkJ QXNzZXJ0KGZpcnN0X2FyZyAhPSBOVUxMKTsKIAl9CiAKLQkvKgotCSAqIEluc2lkZSBhbiBSUFIg REVGSU5FIGNsYXVzZSwgYW4gdW5xdWFsaWZpZWQgY2FsbCB0byBvbmUgb2YgdGhlIHJvdwotCSAq IHBhdHRlcm4gbmF2aWdhdGlvbiBuYW1lcyBQUkVWL05FWFQvRklSU1QvTEFTVCBhbHdheXMgZGVu b3RlcyB0aGUKLQkgKiBuYXZpZ2F0aW9uIG9wZXJhdGlvbiwgcmVnYXJkbGVzcyBvZiB3aGF0IGZ1 bmN0aW9ucyBleGlzdCAtLSB0aGUgbmFtZXMKLQkgKiBhcmUgcmVjb2duaXplZCBoZXJlLCBiZWZv cmUgYW55IGNhdGFsb2cgbG9va3VwLCB3aXRoIG5vIGZhbGxiYWNrIHRvCi0JICogZnVuY3Rpb24g cmVzb2x1dGlvbi4gIEEgc2NoZW1hLXF1YWxpZmllZCBjYWxsIGlzIHRoZSBleHBsaWNpdCB3YXkg dG8KLQkgKiByZWFjaCBhbiBvcmRpbmFyeSBmdW5jdGlvbiBvZiBvbmUgb2YgdGhlc2UgbmFtZXMu Ci0JICovCi0JaWYgKCFpc19jb2x1bW4gJiYgIXByb2NfY2FsbCAmJgotCQlwc3RhdGUtPnBfZXhw cl9raW5kID09IEVYUFJfS0lORF9SUFJfREVGSU5FICYmCi0JCWxpc3RfbGVuZ3RoKGZ1bmNuYW1l KSA9PSAxKQorCWlmIChwc3RhdGUtPnBfZXhwcl9raW5kID09IEVYUFJfS0lORF9SUFJfREVGSU5F KQogCXsKLQkJcmV0dmFsID0gUGFyc2VSUFJOYXZDYWxsKHBzdGF0ZSwgZnVuY25hbWUsIGZhcmdz LCBhcmduYW1lcywgZm4sCi0JCQkJCQkJCSBsb2NhdGlvbik7Ci0JCWlmIChyZXR2YWwpCi0JCQly ZXR1cm4gcmV0dmFsOworCQlpZiAoIWlzX2NvbHVtbiAmJiAhcHJvY19jYWxsICYmCisJCQlsaXN0 X2xlbmd0aChmdW5jbmFtZSkgPT0gMSkKKwkJeworCQkJY29uc3QgY2hhciAqbmFtZSA9IHN0clZh bChsaW5pdGlhbChmdW5jbmFtZSkpOworCisJCQlpZiAoc3RyY21wKG5hbWUsICJwcmV2IikgPT0g MCB8fAorCQkJCShzdHJjbXAobmFtZSwgIm5leHQiKSA9PSAwKSB8fAorCQkJCShzdHJjbXAobmFt ZSwgImZpcnN0IikgPT0gMCkgfHwKKwkJCQkoc3RyY21wKG5hbWUsICJsYXN0IikgPT0gMCkpCisJ CQkJY291bGRfYmVfcnByX25hdiA9IHRydWU7CisJCX0KIAl9CiAKIAkvKgpAQCAtMjg0LDI3ICsy ODIsNiBAQCBQYXJzZUZ1bmNPckNvbHVtbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKmZ1bmNu YW1lLCBMaXN0ICpmYXJncywKIAkgKiBvcmRpbmFyeSBmdW5jdGlvbiAoYXMgaGFwcGVucyBvdXRz aWRlIGEgREVGSU5FIGNsYXVzZSkgaXMgc3RpbGwgb3BlbgogCSAqIGZvciBkaXNjdXNzaW9uLgog CSAqLwotCWlmIChpc19jb2x1bW4gJiYgcHN0YXRlLT5wX2V4cHJfa2luZCA9PSBFWFBSX0tJTkRf UlBSX0RFRklORSkKLQl7Ci0JCWNvbnN0IGNoYXIgKm5hdm5hbWUgPSBOVUxMOwotCi0JCWlmIChz dHJjbXAoc3RyVmFsKGxsYXN0KGZ1bmNuYW1lKSksICJwcmV2IikgPT0gMCkKLQkJCW5hdm5hbWUg PSAiUFJFViI7Ci0JCWVsc2UgaWYgKHN0cmNtcChzdHJWYWwobGxhc3QoZnVuY25hbWUpKSwgIm5l eHQiKSA9PSAwKQotCQkJbmF2bmFtZSA9ICJORVhUIjsKLQkJZWxzZSBpZiAoc3RyY21wKHN0clZh bChsbGFzdChmdW5jbmFtZSkpLCAiZmlyc3QiKSA9PSAwKQotCQkJbmF2bmFtZSA9ICJGSVJTVCI7 Ci0JCWVsc2UgaWYgKHN0cmNtcChzdHJWYWwobGxhc3QoZnVuY25hbWUpKSwgImxhc3QiKSA9PSAw KQotCQkJbmF2bmFtZSA9ICJMQVNUIjsKLQotCQlpZiAobmF2bmFtZSAhPSBOVUxMKQotCQkJZXJl cG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCQkg ZXJybXNnKCJjYW5ub3QgdXNlIHJvdyBwYXR0ZXJuIG5hdmlnYXRpb24gZnVuY3Rpb24gJXMgaW4g YXR0cmlidXRlIG5vdGF0aW9uIiwKLQkJCQkJCQluYXZuYW1lKSwKLQkJCQkJIGVycmhpbnQoIlRv IGNhbGwgYW4gb3JkaW5hcnkgZnVuY3Rpb24gb2YgdGhpcyBuYW1lLCBzY2hlbWEtcXVhbGlmeSBp dC4iKSwKLQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGxvY2F0aW9uKSkpOwotCX0K IAogCS8qCiAJICogZnVuY19nZXRfZGV0YWlsIGxvb2tzIHVwIHRoZSBmdW5jdGlvbiBpbiB0aGUg Y2F0YWxvZ3MsIGRvZXMKQEAgLTMyMSwxNyArMjk4LDI2IEBAIFBhcnNlRnVuY09yQ29sdW1uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqZnVuY25hbWUsIExpc3QgKmZhcmdzLAogCSAqIHdpdGgg ZGVmYXVsdCBhcmd1bWVudHMuCiAJICovCiAKLQlzZXR1cF9wYXJzZXJfZXJycG9zaXRpb25fY2Fs bGJhY2soJnBjYnN0YXRlLCBwc3RhdGUsIGxvY2F0aW9uKTsKKwlpZiAoIWNvdWxkX2JlX3Jwcl9u YXYpCisJeworCQlzZXR1cF9wYXJzZXJfZXJycG9zaXRpb25fY2FsbGJhY2soJnBjYnN0YXRlLCBw c3RhdGUsIGxvY2F0aW9uKTsKIAotCWZkcmVzdWx0ID0gZnVuY19nZXRfZGV0YWlsKGZ1bmNuYW1l LCBmYXJncywgYXJnbmFtZXMsIG5hcmdzLAotCQkJCQkJCSAgIGFjdHVhbF9hcmdfdHlwZXMsCi0J CQkJCQkJICAgIWZ1bmNfdmFyaWFkaWMsIHRydWUsIHByb2NfY2FsbCwKLQkJCQkJCQkgICAmZmdj X2ZsYWdzLAotCQkJCQkJCSAgICZmdW5jaWQsICZyZXR0eXBlLCAmcmV0c2V0LAotCQkJCQkJCSAg ICZudmFyZ3MsICZ2YXR5cGUsCi0JCQkJCQkJICAgJmRlY2xhcmVkX2FyZ190eXBlcywgJmFyZ2Rl ZmF1bHRzKTsKKwkJZmRyZXN1bHQgPSBmdW5jX2dldF9kZXRhaWwoZnVuY25hbWUsIGZhcmdzLCBh cmduYW1lcywgbmFyZ3MsCisJCQkJCQkJCSAgIGFjdHVhbF9hcmdfdHlwZXMsCisJCQkJCQkJCSAg ICFmdW5jX3ZhcmlhZGljLCB0cnVlLCBwcm9jX2NhbGwsCisJCQkJCQkJCSAgICZmZ2NfZmxhZ3Ms CisJCQkJCQkJCSAgICZmdW5jaWQsICZyZXR0eXBlLCAmcmV0c2V0LAorCQkJCQkJCQkgICAmbnZh cmdzLCAmdmF0eXBlLAorCQkJCQkJCQkgICAmZGVjbGFyZWRfYXJnX3R5cGVzLCAmYXJnZGVmYXVs dHMpOwogCi0JY2FuY2VsX3BhcnNlcl9lcnJwb3NpdGlvbl9jYWxsYmFjaygmcGNic3RhdGUpOwor CQljYW5jZWxfcGFyc2VyX2VycnBvc2l0aW9uX2NhbGxiYWNrKCZwY2JzdGF0ZSk7CisJfQorCWVs c2UKKwl7CisJCUFzc2VydCghcHJvY19jYWxsKTsKKworCQlmZHJlc3VsdCA9IEZVTkNERVRBSUxf Tk9STUFMOworCX0KIAogCS8qCiAJICogQ2hlY2sgZm9yIHZhcmlvdXMgd3Jvbmcta2luZC1vZi1y b3V0aW5lIGNhc2VzLgpAQCAtNzA2LDYgKzY5MiwyMiBAQCBQYXJzZUZ1bmNPckNvbHVtbihQYXJz ZVN0YXRlICpwc3RhdGUsIExpc3QgKmZ1bmNuYW1lLCBMaXN0ICpmYXJncywKIAkJCQkJIHBhcnNl cl9lcnJwb3NpdGlvbihwc3RhdGUsIGxvY2F0aW9uKSkpOwogCX0KIAorCWlmIChjb3VsZF9iZV9y cHJfbmF2KQorCXsKKwkJLyoKKwkJICogSW5zaWRlIGFuIFJQUiBERUZJTkUgY2xhdXNlLCBhbiB1 bnF1YWxpZmllZCBjYWxsIHRvIG9uZSBvZiB0aGUgcm93CisJCSAqIHBhdHRlcm4gbmF2aWdhdGlv biBuYW1lcyBQUkVWL05FWFQvRklSU1QvTEFTVCBhbHdheXMgZGVub3RlcyB0aGUKKwkJICogbmF2 aWdhdGlvbiBvcGVyYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBmdW5jdGlvbnMgZXhpc3QgLS0g dGhlCisJCSAqIG5hbWVzIGFyZSByZWNvZ25pemVkIGhlcmUsIGJlZm9yZSBhbnkgY2F0YWxvZyBs b29rdXAsIHdpdGggbm8KKwkJICogZmFsbGJhY2sgdG8gZnVuY3Rpb24gcmVzb2x1dGlvbi4gIEEg c2NoZW1hLXF1YWxpZmllZCBjYWxsIGlzIHRoZQorCQkgKiBleHBsaWNpdCB3YXkgdG8gcmVhY2gg YW4gb3JkaW5hcnkgZnVuY3Rpb24gb2Ygb25lIG9mIHRoZXNlIG5hbWVzLgorCQkgKi8KKwkJcmV0 dXJuIFBhcnNlUlBSTmF2Q2FsbChwc3RhdGUsIGZ1bmNuYW1lLCBmYXJncywKKwkJCQkJCQkgICBh cmduYW1lcywKKwkJCQkJCQkgICBmbiwKKwkJCQkJCQkgICBsb2NhdGlvbik7CisJfQorCiAJLyoK IAkgKiBJZiB0aGVyZSBhcmUgZGVmYXVsdCBhcmd1bWVudHMsIHdlIGhhdmUgdG8gaW5jbHVkZSB0 aGVpciB0eXBlcyBpbgogCSAqIGFjdHVhbF9hcmdfdHlwZXMgZm9yIHRoZSBwdXJwb3NlIG9mIGNo ZWNraW5nIGdlbmVyaWMgdHlwZSBjb25zaXN0ZW5jeS4KQEAgLTIwOTgsOCArMjEwMCw2IEBAIEZ1 bmNOYW1lQXNUeXBlKExpc3QgKmZ1bmNuYW1lKQogICogdG8gdW5xdWFsaWZpZWQgbmFtZXMpIGlz IHRoZSBkb2N1bWVudGVkIHdheSB0byByZWFjaCBzdWNoIGEgZnVuY3Rpb24KICAqIGluc3RlYWQu CiAgKgotICogUmV0dXJucyB0aGUgUlBSTmF2RXhwciwgb3IgTlVMTCBpZiBmdW5jbmFtZSBpcyBu b3QgYSBuYXZpZ2F0aW9uIG5hbWUsIGluCi0gKiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgcmVzb2x2 ZXMgaXQgYXMgYW4gb3JkaW5hcnkgZnVuY3Rpb24uCiAgKi8KIHN0YXRpYyBOb2RlICoKIFBhcnNl UlBSTmF2Q2FsbChQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKmZ1bmNuYW1lLCBMaXN0ICpmYXJn cywKQEAgLTIxMzQsNyArMjEzNCwxMCBAQCBQYXJzZVJQUk5hdkNhbGwoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBMaXN0ICpmdW5jbmFtZSwgTGlzdCAqZmFyZ3MsCiAJCW5hdm5hbWUgPSAiTEFTVCI7CiAJ fQogCWVsc2UKKwl7CisJCXBnX3VucmVhY2hhYmxlKCk7CiAJCXJldHVybiBOVUxMOworCX0KIAog CS8qCiAJICogT25jZSB0aGUgbmFtZSBtYXRjaGVzIHdlIG5ldmVyIGZhbGwgYmFjayB0byBmdW5j dGlvbiByZXNvbHV0aW9uLCBzbyBhbnkKQEAgLTIxNDMsNzcgKzIxNDYsNDMgQEAgUGFyc2VSUFJO YXZDYWxsKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqZnVuY25hbWUsIExpc3QgKmZhcmdzLAog CSAqIGV4aXN0aW5nIG1lc3NhZ2VzIHNvIHRoZSB1c2VyLXZpc2libGUgdGV4dCBhbmQgdHJhbnNs YXRpb25zIGFyZQogCSAqIHVuY2hhbmdlZC4KIAkgKi8KLQlpZiAoZm4tPmFnZ19zdGFyKQotCQll cmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAot CQkJCSBlcnJtc2coIiVzKCopIHNwZWNpZmllZCwgYnV0ICVzIGlzIG5vdCBhbiBhZ2dyZWdhdGUg ZnVuY3Rpb24iLAotCQkJCQkJTmFtZUxpc3RUb1N0cmluZyhmdW5jbmFtZSksCi0JCQkJCQlOYW1l TGlzdFRvU3RyaW5nKGZ1bmNuYW1lKSksCi0JCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUs IGxvY2F0aW9uKSkpOwotCWlmIChmbi0+YWdnX2Rpc3RpbmN0KQotCQllcmVwb3J0KEVSUk9SLAot CQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAotCQkJCSBlcnJtc2coIkRJ U1RJTkNUIHNwZWNpZmllZCwgYnV0ICVzIGlzIG5vdCBhbiBhZ2dyZWdhdGUgZnVuY3Rpb24iLAot CQkJCQkJTmFtZUxpc3RUb1N0cmluZyhmdW5jbmFtZSkpLAotCQkJCSBwYXJzZXJfZXJycG9zaXRp b24ocHN0YXRlLCBsb2NhdGlvbikpKTsKLQlpZiAoZm4tPmFnZ193aXRoaW5fZ3JvdXApCi0JCWVy ZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCi0J CQkJIGVycm1zZygiV0lUSElOIEdST1VQIHNwZWNpZmllZCwgYnV0ICVzIGlzIG5vdCBhbiBhZ2dy ZWdhdGUgZnVuY3Rpb24iLAotCQkJCQkJTmFtZUxpc3RUb1N0cmluZyhmdW5jbmFtZSkpLAotCQkJ CSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsKLQlpZiAoZm4tPmFnZ19v cmRlciAhPSBOSUwpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9O R19PQkpFQ1RfVFlQRSksCi0JCQkJIGVycm1zZygiT1JERVIgQlkgc3BlY2lmaWVkLCBidXQgJXMg aXMgbm90IGFuIGFnZ3JlZ2F0ZSBmdW5jdGlvbiIsCi0JCQkJCQlOYW1lTGlzdFRvU3RyaW5nKGZ1 bmNuYW1lKSksCi0JCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGxvY2F0aW9uKSkpOwot CWlmIChmbi0+YWdnX2ZpbHRlcikKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX1dST05HX09CSkVDVF9UWVBFKSwKLQkJCQkgZXJybXNnKCJGSUxURVIgc3BlY2lmaWVkLCBi dXQgJXMgaXMgbm90IGFuIGFnZ3JlZ2F0ZSBmdW5jdGlvbiIsCi0JCQkJCQlOYW1lTGlzdFRvU3Ry aW5nKGZ1bmNuYW1lKSksCi0JCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGxvY2F0aW9u KSkpOwotCWlmIChmbi0+b3ZlcikKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX1dST05HX09CSkVDVF9UWVBFKSwKLQkJCQkgZXJybXNnKCJPVkVSIHNwZWNpZmllZCwgYnV0 ICVzIGlzIG5vdCBhIHdpbmRvdyBmdW5jdGlvbiBub3IgYW4gYWdncmVnYXRlIGZ1bmN0aW9uIiwK LQkJCQkJCU5hbWVMaXN0VG9TdHJpbmcoZnVuY25hbWUpKSwKLQkJCQkgcGFyc2VyX2VycnBvc2l0 aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7CiAJaWYgKGZuLT5mdW5jX3ZhcmlhZGljKQogCQllcmVw b3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJCQkgZXJy bXNnKCJjYW5ub3QgdXNlIFZBUklBRElDIHdpdGggcm93IHBhdHRlcm4gbmF2aWdhdGlvbiBmdW5j dGlvbiAlcyIsCi0JCQkJCQluYXZuYW1lKSwKLQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0 ZSwgbG9jYXRpb24pKSk7CisJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJ ZXJybXNnKCJjYW5ub3QgdXNlIFZBUklBRElDIHdpdGggcm93IHBhdHRlcm4gbmF2aWdhdGlvbiBm dW5jdGlvbiAlcyIsCisJCQkJCSAgIG5hdm5hbWUpLAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihw c3RhdGUsIGxvY2F0aW9uKSk7CisKIAlpZiAoYXJnbmFtZXMgIT0gTklMKQogCQllcmVwb3J0KEVS Uk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkg ZXJybXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9wZXJhdGlvbnMgY2Fubm90IHVzZSBuYW1l ZCBhcmd1bWVudHMiKSwKLQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24p KSk7CisJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJy bXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9wZXJhdGlvbnMgY2Fubm90IHVzZSBuYW1lZCBh cmd1bWVudHMiKSwKKwkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpOwor CiAJaWYgKGZuLT5pZ25vcmVfbnVsbHMgIT0gTk9fTlVMTFRSRUFUTUVOVCkKIAkJZXJlcG9ydChF UlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKLQkJCQkgZXJy bXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9wZXJhdGlvbnMgZG8gbm90IGFjY2VwdCBSRVNQ RUNUL0lHTk9SRSBOVUxMUyIpLAotCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2Nh dGlvbikpKTsKKwkJCQllcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCWVy cm1zZygicm93IHBhdHRlcm4gbmF2aWdhdGlvbiBvcGVyYXRpb25zIGRvIG5vdCBhY2NlcHQgUkVT UEVDVC9JR05PUkUgTlVMTFMiKSwKKwkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2Nh dGlvbikpOwogCiAJLyogYXJpdHk6IGEgdmFsdWUgZXhwcmVzc2lvbiBhbmQgYW4gb3B0aW9uYWwg b2Zmc2V0ICovCiAJaWYgKG5hcmdzID09IDApCiAJCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCSBlcnJtc2coInRvbyBmZXcgYXJndW1lbnRz IGZvciByb3cgcGF0dGVybiBuYXZpZ2F0aW9uIGZ1bmN0aW9uICVzIiwKLQkJCQkJCW5hdm5hbWUp LAotCQkJCSBlcnJkZXRhaWwoIiVzIHRha2VzIGEgdmFsdWUgZXhwcmVzc2lvbiBhbmQgYW4gb3B0 aW9uYWwgb2Zmc2V0IGFyZ3VtZW50LiIsCi0JCQkJCQkgICBuYXZuYW1lKSwKLQkJCQkgcGFyc2Vy X2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7CisJCQkJZXJyY29kZShFUlJDT0RFX1NZ TlRBWF9FUlJPUiksCisJCQkJZXJybXNnKCJ0b28gZmV3IGFyZ3VtZW50cyBmb3Igcm93IHBhdHRl cm4gbmF2aWdhdGlvbiBmdW5jdGlvbiAlcyIsCisJCQkJCSAgIG5hdm5hbWUpLAorCQkJCWVycmRl dGFpbCgiJXMgdGFrZXMgYSB2YWx1ZSBleHByZXNzaW9uIGFuZCBhbiBvcHRpb25hbCBvZmZzZXQg YXJndW1lbnQuIiwKKwkJCQkJCSAgbmF2bmFtZSksCisJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBz dGF0ZSwgbG9jYXRpb24pKTsKKwogCWlmIChuYXJncyA+IDIpCiAJCWVyZXBvcnQoRVJST1IsCi0J CQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCSBlcnJtc2coInRvbyBtYW55 IGFyZ3VtZW50cyBmb3Igcm93IHBhdHRlcm4gbmF2aWdhdGlvbiBmdW5jdGlvbiAlcyIsCi0JCQkJ CQluYXZuYW1lKSwKLQkJCQkgZXJyZGV0YWlsKCIlcyB0YWtlcyBhIHZhbHVlIGV4cHJlc3Npb24g YW5kIGFuIG9wdGlvbmFsIG9mZnNldCBhcmd1bWVudC4iLAotCQkJCQkJICAgbmF2bmFtZSksCi0J CQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGxvY2F0aW9uKSkpOworCQkJCWVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCWVycm1zZygidG9vIG1hbnkgYXJndW1lbnRzIGZv ciByb3cgcGF0dGVybiBuYXZpZ2F0aW9uIGZ1bmN0aW9uICVzIiwKKwkJCQkJICAgbmF2bmFtZSks CisJCQkJZXJyZGV0YWlsKCIlcyB0YWtlcyBhIHZhbHVlIGV4cHJlc3Npb24gYW5kIGFuIG9wdGlv bmFsIG9mZnNldCBhcmd1bWVudC4iLAorCQkJCQkJICBuYXZuYW1lKSwKKwkJCQlwYXJzZXJfZXJy cG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpOwogCiAJLyoKIAkgKiBSZXNvbHZlIGEgc3RpbGwt dW5rbm93biBmaXJzdCBhcmd1bWVudCB0byB0ZXh0LCB0aGUgc2FtZSB3YXkgdGhlCkBAIC0yMjI0 LDM5ICsyMTkzLDQxIEBAIFBhcnNlUlBSTmF2Q2FsbChQYXJzZVN0YXRlICpwc3RhdGUsIExpc3Qg KmZ1bmNuYW1lLCBMaXN0ICpmYXJncywKIAkgKi8KIAlhcmcgPSBsaW5pdGlhbChmYXJncyk7CiAJ aWYgKGV4cHJUeXBlKGFyZykgPT0gVU5LTk9XTk9JRCkKLQkJYXJnID0gY29lcmNlX3RvX2NvbW1v bl90eXBlKHBzdGF0ZSwgYXJnLCBURVhUT0lELCBuYXZuYW1lKTsKKwkJYXJnID0gY29lcmNlX3Rv X3RhcmdldF90eXBlKHBzdGF0ZSwgYXJnLCBVTktOT1dOT0lELAorCQkJCQkJCQkJVEVYVE9JRCwg LTEsCisJCQkJCQkJCQlDT0VSQ0lPTl9JTVBMSUNJVCwKKwkJCQkJCQkJCUNPRVJDRV9JTVBMSUNJ VF9DQVNULCAtMSk7CiAKIAluYXZleHByID0gbWFrZU5vZGUoUlBSTmF2RXhwcik7CiAJbmF2ZXhw ci0+a2luZCA9IGtpbmQ7CiAJbmF2ZXhwci0+YXJnID0gKEV4cHIgKikgYXJnOworCW5hdmV4cHIt Pm9mZnNldF9hcmcgPSBOVUxMOwogCi0JLyogYW4gZXhwbGljaXQgb2Zmc2V0IGlzIGNvZXJjZWQg dG8gaW50OCwgd2hpY2ggdGhlIGV4ZWN1dG9yIHJlYWRzICovCisJLyogY29tcG91bmRfb2Zmc2V0 X2FyZyBpcyBwb3B1bGF0ZWQgaW4gZGVmaW5lX3dhbGtlciAqLworCW5hdmV4cHItPmNvbXBvdW5k X29mZnNldF9hcmcgPSBOVUxMOworCisJLyogVGhlIG9mZnNldCBhcmd1bWVudCBtdXN0IGJlIGNv ZXJjaWJsZSB0byBpbnQ4ICovCiAJaWYgKG5hcmdzID09IDIpCiAJewogCQlOb2RlCSAgICpvZmZz ZXQgPSBsc2Vjb25kKGZhcmdzKTsKLQkJT2lkCQkJb2ZmdHlwZSA9IGV4cHJUeXBlKG9mZnNldCk7 CisJCU5vZGUJICAgKm5ld29mZnNldDsKIAotCQlpZiAob2ZmdHlwZSAhPSBJTlQ4T0lEKQotCQl7 Ci0JCQlOb2RlCSAgICpuZXdvZmZzZXQ7CisJCW5ld29mZnNldCA9IGNvZXJjZV90b190YXJnZXRf dHlwZShwc3RhdGUsIG9mZnNldCwgZXhwclR5cGUob2Zmc2V0KSwKKwkJCQkJCQkJCQkgIElOVDhP SUQsIC0xLAorCQkJCQkJCQkJCSAgQ09FUkNJT05fSU1QTElDSVQsCisJCQkJCQkJCQkJICBDT0VS Q0VfSU1QTElDSVRfQ0FTVCwgLTEpOwogCi0JCQluZXdvZmZzZXQgPSBjb2VyY2VfdG9fdGFyZ2V0 X3R5cGUocHN0YXRlLCBvZmZzZXQsIG9mZnR5cGUsCi0JCQkJCQkJCQkJCSAgSU5UOE9JRCwgLTEs IENPRVJDSU9OX0lNUExJQ0lULAotCQkJCQkJCQkJCQkgIENPRVJDRV9JTVBMSUNJVF9DQVNULCAt MSk7Ci0JCQlpZiAobmV3b2Zmc2V0ID09IE5VTEwpCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAotCQkJCQkJIGVycm1zZygib2Zm c2V0IGFyZ3VtZW50IG9mICVzIG11c3QgYmUgdHlwZSAlcywgbm90IHR5cGUgJXMiLAotCQkJCQkJ CQluYXZuYW1lLCAiYmlnaW50IiwgZm9ybWF0X3R5cGVfYmUob2ZmdHlwZSkpLAotCQkJCQkJIHBh cnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihvZmZzZXQpKSkpOwotCQkJb2Zm c2V0ID0gbmV3b2Zmc2V0OwotCQl9Ci0JCW5hdmV4cHItPm9mZnNldF9hcmcgPSAoRXhwciAqKSBv ZmZzZXQ7CisJCWlmIChuZXdvZmZzZXQgPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CWVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCWVycm1zZygiJXMgb2Zm c2V0IGFyZ3VtZW50IG9mIHR5cGUgJXMgY2Fubm90IGJlIGNvZXJjZWQgdG8gdGhlIGV4cGVjdGVk ICVzIiwKKwkJCQkJCSAgIG5hdm5hbWUsIGZvcm1hdF90eXBlX2JlKGV4cHJUeXBlKG9mZnNldCkp LCBmb3JtYXRfdHlwZV9iZShJTlQ4T0lEKSksCisJCQkJCWVycmhpbnQoIllvdSB3aWxsIG5lZWQg dG8gcmV3cml0ZSBvciBjYXN0IHRoZSBleHByZXNzaW9uLiIpLAorCQkJCQlwYXJzZXJfZXJycG9z aXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24ob2Zmc2V0KSkpOworCisJCW5hdmV4cHItPm9mZnNl dF9hcmcgPSAoRXhwciAqKSBuZXdvZmZzZXQ7CiAJfQotCWVsc2UKLQkJbmF2ZXhwci0+b2Zmc2V0 X2FyZyA9IE5VTEw7CiAKLQkvKiBjb21wb3VuZF9vZmZzZXRfYXJnIHN0YXlzIE5VTEw7IGRlZmlu ZV93YWxrZXIgZmxhdHRlbmluZyBmaWxscyBpdCBpbiAqLwogCW5hdmV4cHItPnJlc3VsdHR5cGUg PSBleHByVHlwZShhcmcpOwogCS8qIHJlc3VsdGNvbGxpZCB3aWxsIGJlIHNldCBieSBwYXJzZV9j b2xsYXRlLmMgKi8KIAluYXZleHByLT5sb2NhdGlvbiA9IGxvY2F0aW9uOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHJfYmFzZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Jwcl9iYXNlLm91dAppbmRleCBlZTc0ODUzYTlmLi41ZmJlYzkzYmFiIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwcl9iYXNlLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwcl9iYXNlLm91dApAQCAtMTg5OCw2ICsxODk4LDE5IEBA IFNFTEVDVCBpZCwgdmFsLCBjb3VudCgqKSBPVkVSIHcgQVMgY250LCBsYXN0X3ZhbHVlKGlkKSBP VkVSIHcgQVMgbGFzdF9pZAogICA1IHwgMTUwIHwgICAwIHwgICAgICAgIAogKDUgcm93cykKIAor LS0gKHZhbCkucHJldiBpcyBpbnRlcnByZXRlZCBhcyBhIGNhbGwgdG8gdGhlIChub3Qgc2NoZW1h LXF1YWxpZmllZCkgZnVuY3Rpb24KKy0tIHByZXYgd2l0aCB2YWwgYXMgaXRzIGFyZ3VtZW50CitT RUxFQ1QgY291bnQoKikgT1ZFUiB3CitGUk9NIG50CitXSU5ET1cgdyBBUyAoCisgICAgUk9XUyBC RVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgICAgUEFUVEVSTiAo U1RBUlQgVVArKQorICAgIERFRklORSBTVEFSVCBBUyBUUlVFLCBVUCBBUyAodmFsKS5wcmV2IElT IE5PVCBOVUxMKTsKK0VSUk9SOiAgdm9sYXRpbGUgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBp biBERUZJTkUgY2xhdXNlCitMSU5FIDY6ICAgICBERUZJTkUgU1RBUlQgQVMgVFJVRSwgVVAgQVMg KHZhbCkucHJldiBJUyBOT1QgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4KKy0tIHJwcl9uYXZucy5wcmV2KHZhbCkgaXMgaW50ZXJwcmV0ZWQgYXMgYSBj YWxsIHRvIHRoZSBzY2hlbWEtcXVhbGlmaWVkIGZ1bmN0aW9uCistLSBycHJfbmF2bnMucHJldigp LCBwYXNzaW5nIHRoZSB2YWwgKChjb2x1bW4gb2YgdGFibGUgbnQpIGFzIGl0cyBhcmd1bWVudC4K IFNFTEVDVCBpZCwgdmFsLCBjb3VudCgqKSBPVkVSIHcgQVMgY250LCBsYXN0X3ZhbHVlKGlkKSBP VkVSIHcgQVMgbGFzdF9pZAogICBGUk9NIG50CiAgIFdJTkRPVyB3IEFTIChQQVJUSVRJT04gQlkg ZyBPUkRFUiBCWSBpZApAQCAtMjEyOSwxMCArMjE0Miw5IEBAIFNFTEVDVCBjb3VudCgqKSBPVkVS IHcgRlJPTSBjdAogICBXSU5ET1cgdyBBUyAoT1JERVIgQlkgaWQKICAgICBST1dTIEJFVFdFRU4g Q1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcgSU5JVElBTAogICAgIFBBVFRFUk4g KEErKSBERUZJTkUgQSBBUyAocCkucHJldiA+IDApOwotRVJST1I6ICBjYW5ub3QgdXNlIHJvdyBw YXR0ZXJuIG5hdmlnYXRpb24gZnVuY3Rpb24gUFJFViBpbiBhdHRyaWJ1dGUgbm90YXRpb24KK0VS Uk9SOiAgY29sdW1uICJwcmV2IiBub3QgZm91bmQgaW4gZGF0YSB0eXBlIHJwcl9uYXZuc19wYWly CiBMSU5FIDQ6ICAgICBQQVRURVJOIChBKykgREVGSU5FIEEgQVMgKHApLnByZXYgPiAwKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgotSElOVDogIFRvIGNhbGwgYW4g b3JkaW5hcnkgZnVuY3Rpb24gb2YgdGhpcyBuYW1lLCBzY2hlbWEtcXVhbGlmeSBpdC4KIC0tIE5h dmlnYXRpb24gb2Zmc2V0IG11c3Qgbm90IGNvbnRhaW4gYSBuYXZpZ2F0aW9uIG9wZXJhdGlvbgog U0VMRUNUIGlkLCB2YWwKICAgRlJPTSBudApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvcnByX2Jhc2Uuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcnByX2Jhc2Uuc3FsCmluZGV4 IDFkMGNjY2Y3MTkuLjNiZTZkZTM4Y2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3Jwcl9iYXNlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ycHJfYmFzZS5zcWwKQEAg LTEzNTIsNiArMTM1MiwxOCBAQCBTRUxFQ1QgaWQsIHZhbCwgY291bnQoKikgT1ZFUiB3IEFTIGNu dCwgbGFzdF92YWx1ZShpZCkgT1ZFUiB3IEFTIGxhc3RfaWQKICAgICBQQVRURVJOIChTVEFSVCBV UCspCiAgICAgREVGSU5FIFNUQVJUIEFTIFRSVUUsIFVQIEFTIHZhbCA+IFBSRVYodmFsKSkKICAg T1JERVIgQlkgaWQ7CisKKy0tICh2YWwpLnByZXYgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjYWxsIHRv IHRoZSAobm90IHNjaGVtYS1xdWFsaWZpZWQpIGZ1bmN0aW9uCistLSBwcmV2IHdpdGggdmFsIGFz IGl0cyBhcmd1bWVudAorU0VMRUNUIGNvdW50KCopIE9WRVIgdworRlJPTSBudAorV0lORE9XIHcg QVMgKAorICAgIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lO RworICAgIFBBVFRFUk4gKFNUQVJUIFVQKykKKyAgICBERUZJTkUgU1RBUlQgQVMgVFJVRSwgVVAg QVMgKHZhbCkucHJldiBJUyBOT1QgTlVMTCk7CisKKy0tIHJwcl9uYXZucy5wcmV2KHZhbCkgaXMg aW50ZXJwcmV0ZWQgYXMgYSBjYWxsIHRvIHRoZSBzY2hlbWEtcXVhbGlmaWVkIGZ1bmN0aW9uCist LSBycHJfbmF2bnMucHJldigpLCBwYXNzaW5nIHRoZSB2YWwgKChjb2x1bW4gb2YgdGFibGUgbnQp IGFzIGl0cyBhcmd1bWVudC4KIFNFTEVDVCBpZCwgdmFsLCBjb3VudCgqKSBPVkVSIHcgQVMgY250 LCBsYXN0X3ZhbHVlKGlkKSBPVkVSIHcgQVMgbGFzdF9pZAogICBGUk9NIG50CiAgIFdJTkRPVyB3 IEFTIChQQVJUSVRJT04gQlkgZyBPUkRFUiBCWSBpZApAQCAtMTM2MCw2ICsxMzcyLDcgQEAgU0VM RUNUIGlkLCB2YWwsIGNvdW50KCopIE9WRVIgdyBBUyBjbnQsIGxhc3RfdmFsdWUoaWQpIE9WRVIg dyBBUyBsYXN0X2lkCiAgICAgREVGSU5FIEEgQVMgcnByX25hdm5zLnByZXYodmFsKSA9IC05OTkp CiAgIE9SREVSIEJZIGlkOwogRFJPUCBGVU5DVElPTiBwcmV2KGludGVnZXIpOworCiAtLSBJTU1V VEFCTEU6IHVucXVhbGlmaWVkIGlzIG5hdjsgcXVhbGlmaWVkIGlzIHRoZSBlc2NhcGUgaGF0Y2gg YW5kIHN1Y2NlZWRzCiBDUkVBVEUgRlVOQ1RJT04gcHJldihpbnRlZ2VyKSBSRVRVUk5TIGludGVn ZXIgQVMgJ1NFTEVDVCAtOTk5JwogICBMQU5HVUFHRSBzcWwgSU1NVVRBQkxFOwotLSAKMi4zNC4x Cgo= --0000000000005fe39006546c2319--