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 1wZ0sI-000hct-2O for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 06:32:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZ0sH-00AFW1-1h for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 06:32:45 +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 1wZ0sH-00AFVs-0V for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 06:32:45 +0000 Received: from mail-vs1-xe34.google.com ([2607:f8b0:4864:20::e34]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wZ0sE-00000000T9s-3N7R for pgsql-hackers@postgresql.org; Mon, 15 Jun 2026 06:32:44 +0000 Received: by mail-vs1-xe34.google.com with SMTP id ada2fe7eead31-6c6f47198e3so2358198137.1 for ; Sun, 14 Jun 2026 23:32:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781505161; cv=none; d=google.com; s=arc-20240605; b=hv87X598zJRGlb1LdKwwXiv4oyAZxwMBiATi7fcgi5VrST4punMq4ho5i8U03dqVz9 fMq2jeJzGkJ04uASUuiDDnynJB0CQynrmFyn6Udybonm77oapjh6nhLQ70RLooMEN+DT FWy3B8FDNAxJpkRSwt6Hy6yJgDnMwpKWbZ4HPr5H2HA7rBhbk+f5xQDLUipSm50vpzZ9 mBmmAMaw8+VjNJrNklT8VZRSg+4GeOTAu+ohd2ff8m+HNJPWNLGNp+WGmIJxTsFu7IwB WKKuHsz8MvQ2MOWgqpHJ7FTqbmdgsR+pS8UpkRt3UZsF5roo6ubsFvi+QFc2sVjLS9hr mZyw== 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=9pNuy6054fRKMPlMgZUEJuvRtDYvAIqcVzxG8YriPUY=; fh=EKyFvCu0yi1MBVfhkJtHZD0rp+szgzqOmWWUNTOkqaA=; b=bH92pYkgpaIqAktLyFb1TO0os2kn6Eq8k4LGcHf3FI+UtZwLJyqDvYXyqXIdmFO53F AIvpdXj6oXQbnzGobT2QxFIh80Q8HtgfNPPg16GQYVk7zq6/2qLH1Gkfk9NkPq8xIKt4 H1nzbnfZk7o/7dLJYWfw1Pve7rDt+mo4NGRkkcHOtyqXsafABO1TAlUY1yActOPuFyVV Dil5AuwKkhZKpXGydAHbXKv45SUe2xQg1yVmpWXm+Q+deyue6VM1GxYOvYEHnYgdJr5G O5ZzYcZVaoxErvWAPB1htaNvb1+4QmhIroM5s8A26RuZyyngpLRC69Xlze6PeMVlIwjl FCxQ==; 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=1781505161; x=1782109961; 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=9pNuy6054fRKMPlMgZUEJuvRtDYvAIqcVzxG8YriPUY=; b=m5Lahz9L91Uj4an5cTeUlAq2vf8olH9zfyWhLeEl8bTJswcf32QrnrbM13wDrtDZvZ 3EXBbtUwpPDjI397TQYGTHY8ej9YFqVv7jD1dphzZP3M1SRLQPTEDJOkDtMu8HoG1zUb BCpaLCniYbpJGIXNZQxewp3vUA57KoD5k0b5PAhYzqfgqBKxsoRBoEnId2CS+AYM9w8x wYEWiAcPsye0Fgoe+8bpAFVTtjJYZmA2gJcvKu86kxlzUy2nE8nugLZ6b+skOc1tM7mI eu9AfCVsMduJyzhtzvzTFESisTWteUHuD+wpP1fNdZjutjbPhryAWfGkOOjQ1uW3tVme ktxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781505161; x=1782109961; 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=9pNuy6054fRKMPlMgZUEJuvRtDYvAIqcVzxG8YriPUY=; b=K3QE6HjOKGuJRUlJPyuFgxGNx9d6g+f4n/L9uHMJDNO5KOXeUtYrKUf3R6I63AV6l9 YbPcctoWCRgjL//hQdgtwz+Atbgj2ZLxcCQyn8jnUIJRhbHDJV5UK1WBrZ1EAUxeermN UlbeIFdPVJrdxpzOMwSPmx0y96KKeCWcewrbnKNkatz5fVjdjGLSFP1MsBwd4H6uMiDM FdPj3D09yD0zgHbLpqNoF0RWYe1FwsQJXiF47m2Nl3DNsScxlhCQtvt1zpu4xHiADB0H I1wVgDxZ2ZL4bKNvDGwYZS/cTo0DJ2vzo/MkU3QtDVmqJHGda4gT/2kEf3U/ueG5WnBS msRg== X-Forwarded-Encrypted: i=1; AFNElJ/pc7nbSj0byGeJLVOSPtcGYHNHQls9X0rAZ6tDExf8BjZAM836M9VjNw0Zu/GOm3nkYGbjgtYadOaUCCg0@postgresql.org X-Gm-Message-State: AOJu0YxZrzujK0sp71BOxmdxyI05YZ+ogGhXV+JyhkzyrYLW5Nebv731 7cV62+BYkvta9862xxhYStD+NUz54quD6qdOBgY2BepQD6jg4IARzo6q78BHS6Gdb68ohveJ72t snSLQtiWF/kPGL+UhjnK5wesx9F0c3Mg= X-Gm-Gg: Acq92OEvvFndLqQMVQppveiNRu21FrBxD/PMLpqLsmBdrrdRy4qbHTRXObOkOE2SEoS DB1nSiVhKaQd+KkdQRN2+tu7a77btATgxNlCdGtB2Gt6e2rws+Qt+4qYqU1gM1oaHFAjlO3bPxU tFe1SH+t23QH62Zd3y9kBYleCl53eGbgbRiPPNhKPDJS7HObnXxpDrcy60Fj+cQ0OECPClv3iKd Uz8+HGwqZXjwvfIrPBrd9DGeJ29OevP1p1WTcG+ht2Rfkn53RE7PiJE2YEzs8ViZmvCswUvzZzf j7jL7shWFy9Kuk3Zmcnoztj0rjWTa54tmreQqnXT036BmYHF8vSaz09UlcozZZa9iXVspITjiF4 a/p8S+iDp0gD78NJIfjscG65eBewGh9Od60n4eMObw5v3l7h3QKq1WaF74ZXkaKg2l86DyMUbPt gkwatfElVPzi4BQmigjfP8qtQdSQ== X-Received: by 2002:a05:6102:4189:b0:613:3fff:febc with SMTP id ada2fe7eead31-71e899924cbmr4521460137.2.1781505160414; Sun, 14 Jun 2026 23:32:40 -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: Mon, 15 Jun 2026 14:32:01 +0800 X-Gm-Features: AVVi8CczzFx0u_ziwroRmyiBKfuBi3rb7H_3PlfhXH_qDb3JzHjRNMFL7Id9WkY 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="00000000000040ac19065444fe02" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000040ac19065444fe02 Content-Type: text/plain; charset="UTF-8" Hi. More review based on https://github.com/assam258-5892/postgres/commits/RPR remove_unused_subquery_outputs `````` if (dvar->varno == var->varno && dvar->varattno == var->varattno && dvar->varlevelsup == var->varlevelsup) { needed_by_define = true; break; } `````` dvar, var both can be whole-row Vars, but this seems to work for whole-row vars. We need some simple regress tests for cases where both are whole-row vars or one of them is a whole-row var. I've attached a patch with some refactoring. The below is detailed commit message. -------------------------------------------------------------------- RPRNavExpr->resulttype should also marked as pg_node_attr(query_jumble_ignore) collectPatternVariables is not needed. The parser already ensures every DEFINE variable appears in PATTERN, so there is nothing to filter. Also, we don't really do anything special (like make a dummy Const) regarding PATTERN variables that not appearing in the DEFINE clause. See nfa_evaluate_row the for loop break. buildDefineVariableList is trivial. No need to export it as an external function. Rename WindowAggState.defineClauseList to defineClauseExprs Minor refactoring of regress test comments. Flatten a needlessly nested block in show_window_def(). Replace a post-loop ListCell NULL check in remove_unused_subquery_outputs() with a boolean flag. Reduce the number of arguments in make_windowagg. -------------------------------------------------------------------- -- jian https://www.enterprisedb.com/ --00000000000040ac19065444fe02 Content-Type: application/octet-stream; name="v48-0001-v48-misc-refactoring.nocfbot" Content-Disposition: attachment; filename="v48-0001-v48-misc-refactoring.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqeu4ow70 RnJvbSBlNjdlYzJmZmY2MDg4MjBkNjgxOGQzNGJhM2UwOTQyODZmNmI2OWZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTUgSnVuIDIwMjYgMTQ6MDA6MTIgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 OCAxLzFdIHY0OCBtaXNjIHJlZmFjdG9yaW5nCgpSUFJOYXZFeHByLT5yZXN1bHR0eXBlIHNob3Vs ZCBhbHNvIG1hcmtlZCBhcyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSkKCmNvbGxl Y3RQYXR0ZXJuVmFyaWFibGVzIGlzIG5vdCBuZWVkZWQuClRoZSBwYXJzZXIgYWxyZWFkeSBlbnN1 cmVzIGV2ZXJ5IERFRklORSB2YXJpYWJsZSBhcHBlYXJzIGluIFBBVFRFUk4sIHNvIHRoZXJlIGlz IG5vdGhpbmcgdG8gZmlsdGVyLgpBbHNvLCB3ZSBkb24ndCByZWFsbHkgZG8gYW55dGhpbmcgc3Bl Y2lhbCAobGlrZSBtYWtlIGEgZHVtbXkgQ29uc3QpIHJlZ2FyZGluZwpQQVRURVJOIHZhcmlhYmxl cyB0aGF0IG5vdCBhcHBlYXJpbmcgaW4gdGhlIERFRklORSBjbGF1c2UuClNlZSBuZmFfZXZhbHVh dGVfcm93IHRoZSBmb3IgbG9vcCBicmVhay4KCmJ1aWxkRGVmaW5lVmFyaWFibGVMaXN0IGlzIHRy aXZpYWwuIE5vIG5lZWQgdG8gZXhwb3J0IGl0IGFzIGFuIGV4dGVybmFsIGZ1bmN0aW9uLgoKUmVu YW1lIFdpbmRvd0FnZ1N0YXRlLmRlZmluZUNsYXVzZUxpc3QgdG8gZGVmaW5lQ2xhdXNlRXhwcnMK TWlub3IgcmVmYWN0b3Jpbmcgb2YgcmVncmVzcyB0ZXN0IGNvbW1lbnRzLgpGbGF0dGVuIGEgbmVl ZGxlc3NseSBuZXN0ZWQgYmxvY2sgaW4gc2hvd193aW5kb3dfZGVmKCkuClJlcGxhY2UgYSBwb3N0 LWxvb3AgTGlzdENlbGwgTlVMTCBjaGVjayBpbiByZW1vdmVfdW51c2VkX3N1YnF1ZXJ5X291dHB1 dHMoKSB3aXRoIGEgYm9vbGVhbiBmbGFnLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYyAgICAgICAgICAgICAgICB8IDk0ICsrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL1JFQURNRS5ycHIgICAgICAgICAgICAgICB8ICA1ICstCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUlBSLmMgICAgICAgICAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVdpbmRvd0FnZy5jICAgICAgICAgIHwgMzkgKysrKy0tLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8IDEzICsrLQogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAgIHwgMjAgKy0tLQogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jICAgICAgIHwgMjQgKysrLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3Jwci5jICAgICAgICAgICAgICB8IDc3IC0tLS0tLS0tLS0tLS0tLQog c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgIDIgKy0KIHNy Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgICAgICB8ICAyICstCiBzcmMv aW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgMyArLQogc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3Jwci5oICAgICAgICAgICAgICAgICAgIHwgIDMgLQogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9ycHJfaW50ZWdyYXRpb24ub3V0IHwgMjkgKystLS0tCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9ycHJfaW50ZWdyYXRpb24uc3FsICAgICAgfCAzMSArKy0tLS0KIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8IDI0ICsrKysrCiAxNSBm aWxlcyBjaGFuZ2VkLCAxMzMgaW5zZXJ0aW9ucygrKSwgMjM1IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYwppbmRleCA3MGZkN2YzODZhLi42OTZiZGI5YzhiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXhwbGFpbi5jCkBAIC0zMjEyLDc3ICszMjEyLDczIEBAIHNob3dfd2luZG93X2RlZihXaW5kb3dB Z2dTdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJ LyogU2hvdyBSb3cgUGF0dGVybiBSZWNvZ25pdGlvbiBwYXR0ZXJuIGlmIHByZXNlbnQgKi8KIAlp ZiAod2FnZy0+cnBQYXR0ZXJuICE9IE5VTEwpCiAJeworCQlSUFJOYXZPZmZzZXRLaW5kIG1heEtp bmQgPSB3YWdnLT5uYXZNYXhPZmZzZXRLaW5kOworCQlpbnQ2NAkJbWF4T2Zmc2V0ID0gd2FnZy0+ bmF2TWF4T2Zmc2V0OworCQlSUFJOYXZPZmZzZXRLaW5kIGZpcnN0S2luZCA9IHdhZ2ctPm5hdkZp cnN0T2Zmc2V0S2luZDsKKwkJaW50NjQJCWZpcnN0T2Zmc2V0ID0gd2FnZy0+bmF2Rmlyc3RPZmZz ZXQ7CisKIAkJY2hhcgkgICAqcGF0dGVyblN0ciA9IGRlcGFyc2VfcnByX3BhdHRlcm4od2FnZy0+ cnBQYXR0ZXJuKTsKIAotCQlpZiAocGF0dGVyblN0ciAhPSBOVUxMKQotCQl7Ci0JCQlFeHBsYWlu UHJvcGVydHlUZXh0KCJQYXR0ZXJuIiwgcGF0dGVyblN0ciwgZXMpOwotCQkJcGZyZWUocGF0dGVy blN0cik7Ci0JCX0KKwkJRXhwbGFpblByb3BlcnR5VGV4dCgiUGF0dGVybiIsIHBhdHRlcm5TdHIs IGVzKTsKKworCQlwZnJlZShwYXR0ZXJuU3RyKTsKIAogCQkvKgogCQkgKiBTaG93IG5hdmlnYXRp b24gb2Zmc2V0cyBmb3IgdHVwbGVzdG9yZSB0cmltLiAgRm9yIEVYUExBSU4gQU5BTFlaRSwKIAkJ ICogdXNlIHRoZSBleGVjdXRvci1yZXNvbHZlZCB2YWx1ZXMgKHdoaWNoIG1heSBkaWZmZXIgZnJv bSB0aGUgcGxhbgogCQkgKiB3aGVuIE5FRURTX0VWQUwgd2FzIHJlc29sdmVkIHRvIEZJWEVEIG9y IFJFVEFJTl9BTEwgYXQgaW5pdCkuCiAJCSAqLworCQlpZiAoZXMtPmFuYWx5emUpCiAJCXsKLQkJ CVJQUk5hdk9mZnNldEtpbmQgbWF4S2luZCA9IHdhZ2ctPm5hdk1heE9mZnNldEtpbmQ7Ci0JCQlp bnQ2NAkJbWF4T2Zmc2V0ID0gd2FnZy0+bmF2TWF4T2Zmc2V0OwotCQkJUlBSTmF2T2Zmc2V0S2lu ZCBmaXJzdEtpbmQgPSB3YWdnLT5uYXZGaXJzdE9mZnNldEtpbmQ7Ci0JCQlpbnQ2NAkJZmlyc3RP ZmZzZXQgPSB3YWdnLT5uYXZGaXJzdE9mZnNldDsKKwkJCW1heEtpbmQgPSBwbGFuc3RhdGUtPm5h dk1heE9mZnNldEtpbmQ7CisJCQltYXhPZmZzZXQgPSBwbGFuc3RhdGUtPm5hdk1heE9mZnNldDsK KwkJCWZpcnN0S2luZCA9IHBsYW5zdGF0ZS0+bmF2Rmlyc3RPZmZzZXRLaW5kOworCQkJZmlyc3RP ZmZzZXQgPSBwbGFuc3RhdGUtPm5hdkZpcnN0T2Zmc2V0OworCQl9CiAKLQkJCWlmIChlcy0+YW5h bHl6ZSkKLQkJCXsKLQkJCQltYXhLaW5kID0gcGxhbnN0YXRlLT5uYXZNYXhPZmZzZXRLaW5kOwot CQkJCW1heE9mZnNldCA9IHBsYW5zdGF0ZS0+bmF2TWF4T2Zmc2V0OwotCQkJCWZpcnN0S2luZCA9 IHBsYW5zdGF0ZS0+bmF2Rmlyc3RPZmZzZXRLaW5kOwotCQkJCWZpcnN0T2Zmc2V0ID0gcGxhbnN0 YXRlLT5uYXZGaXJzdE9mZnNldDsKLQkJCX0KKwkJc3dpdGNoIChtYXhLaW5kKQorCQl7CisJCQlj YXNlIFJQUl9OQVZfT0ZGU0VUX05FRURTX0VWQUw6CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgi TmF2IE1hcmsgTG9va2JhY2siLCAicnVudGltZSIsIGVzKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug UlBSX05BVl9PRkZTRVRfUkVUQUlOX0FMTDoKKwkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJOYXYg TWFyayBMb29rYmFjayIsICJyZXRhaW4gYWxsIiwgZXMpOworCQkJCWJyZWFrOworCQkJY2FzZSBS UFJfTkFWX09GRlNFVF9GSVhFRDoKKwkJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJOYXYgTWFy ayBMb29rYmFjayIsIE5VTEwsCisJCQkJCQkJCQkgICBtYXhPZmZzZXQsIGVzKTsKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBSUFIgbmF2IG9m ZnNldCBraW5kOiAlZCIsCisJCQkJCSBtYXhLaW5kKTsKKwkJCQlicmVhazsKKwkJfQogCi0JCQlz d2l0Y2ggKG1heEtpbmQpCisJCWlmICh3YWdnLT5oYXNGaXJzdE5hdikKKwkJeworCQkJc3dpdGNo IChmaXJzdEtpbmQpCiAJCQl7CiAJCQkJY2FzZSBSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFMOgot CQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJOYXYgTWFyayBMb29rYmFjayIsICJydW50aW1lIiwg ZXMpOworCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJOYXYgTWFyayBMb29rYWhlYWQiLCAicnVu dGltZSIsCisJCQkJCQkJCQkJZXMpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIFJQUl9OQVZfT0ZG U0VUX1JFVEFJTl9BTEw6Ci0JCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIk5hdiBNYXJrIExvb2ti YWNrIiwgInJldGFpbiBhbGwiLCBlcyk7CisJCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIk5hdiBN YXJrIExvb2thaGVhZCIsICJyZXRhaW4gYWxsIiwKKwkJCQkJCQkJCQllcyk7CiAJCQkJCWJyZWFr OwogCQkJCWNhc2UgUlBSX05BVl9PRkZTRVRfRklYRUQ6Ci0JCQkJCUV4cGxhaW5Qcm9wZXJ0eUlu dGVnZXIoIk5hdiBNYXJrIExvb2tiYWNrIiwgTlVMTCwKLQkJCQkJCQkJCQkgICBtYXhPZmZzZXQs IGVzKTsKKwkJCQkJaWYgKGZpcnN0T2Zmc2V0ID09IFBHX0lOVDY0X01BWCkKKwkJCQkJCUV4cGxh aW5Qcm9wZXJ0eVRleHQoIk5hdiBNYXJrIExvb2thaGVhZCIsICJpbmZpbml0ZSIsCisJCQkJCQkJ CQkJCWVzKTsKKwkJCQkJZWxzZQorCQkJCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiTmF2IE1h cmsgTG9va2FoZWFkIiwgTlVMTCwKKwkJCQkJCQkJCQkJICAgZmlyc3RPZmZzZXQsIGVzKTsKIAkJ CQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBS UFIgbmF2IG9mZnNldCBraW5kOiAlZCIsCi0JCQkJCQkgbWF4S2luZCk7CisJCQkJCQkgZmlyc3RL aW5kKTsKIAkJCQkJYnJlYWs7CiAJCQl9Ci0KLQkJCWlmICh3YWdnLT5oYXNGaXJzdE5hdikKLQkJ CXsKLQkJCQlzd2l0Y2ggKGZpcnN0S2luZCkKLQkJCQl7Ci0JCQkJCWNhc2UgUlBSX05BVl9PRkZT RVRfTkVFRFNfRVZBTDoKLQkJCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIk5hdiBNYXJrIExvb2th aGVhZCIsICJydW50aW1lIiwKLQkJCQkJCQkJCQkJZXMpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNh c2UgUlBSX05BVl9PRkZTRVRfUkVUQUlOX0FMTDoKLQkJCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQo Ik5hdiBNYXJrIExvb2thaGVhZCIsICJyZXRhaW4gYWxsIiwKLQkJCQkJCQkJCQkJZXMpOwotCQkJ CQkJYnJlYWs7Ci0JCQkJCWNhc2UgUlBSX05BVl9PRkZTRVRfRklYRUQ6Ci0JCQkJCQlpZiAoZmly c3RPZmZzZXQgPT0gUEdfSU5UNjRfTUFYKQotCQkJCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIk5h diBNYXJrIExvb2thaGVhZCIsICJpbmZpbml0ZSIsCi0JCQkJCQkJCQkJCQllcyk7Ci0JCQkJCQll bHNlCi0JCQkJCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiTmF2IE1hcmsgTG9va2FoZWFkIiwg TlVMTCwKLQkJCQkJCQkJCQkJCSAgIGZpcnN0T2Zmc2V0LCBlcyk7Ci0JCQkJCQlicmVhazsKLQkJ CQkJZGVmYXVsdDoKLQkJCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgUlBSIG5hdiBvZmZz ZXQga2luZDogJWQiLAotCQkJCQkJCSBmaXJzdEtpbmQpOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQot CQkJfQogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1F LnJwciBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRS5ycHIKaW5kZXggMDBhZjg2NjgxYi4u NzEzYWQ4NGUxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FLnJwcgor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUucnByCkBAIC0xODgsNyArMTg4LDYgQEAg Q2hhcHRlciBJViAgQ29tcGlsYXRpb24gUGhhc2UKIElWLTEuIEVudHJ5IFBvaW50CiAKICAgY3Jl YXRlX3dpbmRvd2FnZ19wbGFuKCkgKGNyZWF0ZXBsYW4uYykKLSAgICArLS0gYnVpbGREZWZpbmVW YXJpYWJsZUxpc3QoKSAgICBCdWlsZCB2YXJpYWJsZSBuYW1lIGxpc3QgZnJvbSBERUZJTkUKICAg ICArLS0gYnVpbGRSUFJQYXR0ZXJuKCkgICAgICAgICAgIE5GQSBjb21waWxhdGlvbiAoNiBwaGFz ZXMpCiAKIElWLTIuIFRoZSA2IFBoYXNlcyBvZiBidWlsZFJQUlBhdHRlcm4oKQpAQCAtMTQ2OCw4 ICsxNDY3LDYgQEAgQXBwZW5kaXggQS4gS2V5IEZ1bmN0aW9uIEluZGV4CiAgIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgIHRyYW5zZm9ybVJQUiAgICAgICAgICAgICAgICAgIHBhcnNlX3Jwci5jICAgICAg ICAgICBQYXJzZXIgZW50cnkgcG9pbnQKICAgdHJhbnNmb3JtRGVmaW5lQ2xhdXNlICAgICAgICAg cGFyc2VfcnByLmMgICAgICAgICAgIERFRklORSB0cmFuc2Zvcm1hdGlvbgotICBjb2xsZWN0UGF0 dGVyblZhcmlhYmxlcyAgICAgICBycHIuYyAgICAgICAgICAgICAgICAgVmFyaWFibGUgY29sbGVj dGlvbgotICBidWlsZERlZmluZVZhcmlhYmxlTGlzdCAgICAgICBycHIuYyAgICAgICAgICAgICAg ICAgREVGSU5FIHZhcmlhYmxlIGxpc3QKICAgYnVpbGRSUFJQYXR0ZXJuICAgICAgICAgICAgICAg cnByLmMgICAgICAgICAgICAgICAgIE5GQSBjb21waWxhdGlvbiBtYWluCiAgIG9wdGltaXplUlBS UGF0dGVybiAgICAgICAgICAgIHJwci5jICAgICAgICAgICAgICAgICBBU1Qgb3B0aW1pemF0aW9u CiAgIGZpbGxSUFJQYXR0ZXJuICAgICAgICAgICAgICAgIHJwci5jICAgICAgICAgICAgICAgICBO RkEgZWxlbWVudCBnZW5lcmF0aW9uCkBAIC0xNTM4LDcgKzE1MzUsNyBAQCBBcHBlbmRpeCBCLiBE YXRhIFN0cnVjdHVyZSBSZWxhdGlvbnNoaXAgRGlhZ3JhbQogICAgIHwtLS0gcnBTa2lwVG86IFJQ U2tpcFRvIChBRlRFUiBNQVRDSCBTS0lQIG1vZGUpCiAgICAgfC0tLSBycFBhdHRlcm46IFJQUlBh dHRlcm4qIChjb3BpZWQgZnJvbSBwbGFuKQogICAgIHwtLS0gZGVmaW5lVmFyaWFibGVMaXN0OiBM aXN0PFN0cmluZz4gKHZhcmlhYmxlIG5hbWVzLCBERUZJTkUgb3JkZXIpCi0gICAgfC0tLSBkZWZp bmVDbGF1c2VMaXN0OiBMaXN0PEV4cHJTdGF0ZT4KKyAgICB8LS0tIGRlZmluZUNsYXVzZUV4cHJz OiBMaXN0PEV4cHJTdGF0ZT4KICAgICB8LS0tIG5mYVZhck1hdGNoZWQ6IGJvb2xbXSAocGVyLXJv dyBjYWNoZSkKICAgICB8LS0tIGRlZmluZU1hdGNoU3RhcnREZXBlbmRlbnQ6IEJpdG1hcHNldCog KG1hdGNoX3N0YXJ0X2RlcGVuZGVudAogICAgIHwgICAgICAgIERFRklORSB2YXJzOyBzZWUgVkkt NCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSUFIuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNSUFIuYwppbmRleCBiMzI2YTU4YmJmLi4xMjJhMDllNjZkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUlBSLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1JQUi5jCkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBuZmFfcmVldmFsdWF0ZV9k ZXBlbmRlbnRfdmFycyhXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIFJQUk5GQUNvbnRleHQgKmN0 eCwKIAkvKiBJbnZhbGlkYXRlIG5hdl9zbG90IGNhY2hlIHNpbmNlIG1hdGNoX3N0YXJ0IGNoYW5n ZWQgKi8KIAl3aW5zdGF0ZS0+bmF2X3Nsb3RfcG9zID0gLTE7CiAKLQlmb3JlYWNoX3B0cihFeHBy U3RhdGUsIGV4cHJTdGF0ZSwgd2luc3RhdGUtPmRlZmluZUNsYXVzZUxpc3QpCisJZm9yZWFjaF9w dHIoRXhwclN0YXRlLCBleHByU3RhdGUsIHdpbnN0YXRlLT5kZWZpbmVDbGF1c2VFeHBycykKIAl7 CiAJCWludAkJCXZhcklkeCA9IGZvcmVhY2hfY3VycmVudF9pbmRleChleHByU3RhdGUpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKaW5kZXggY2I2YTQ4NGI3ZC4uMjVkMWFkMjE0 MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYwpAQCAtMzA3NiwyNyArMzA3Niwy NiBAQCBFeGVjSW5pdFdpbmRvd0FnZyhXaW5kb3dBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCiAJLyogU2V0IHVwIHJvdyBwYXR0ZXJuIHJlY29nbml0aW9uIERFRklORSBj bGF1c2UgKi8KIAl3aW5zdGF0ZS0+ZGVmaW5lVmFyaWFibGVMaXN0ID0gTklMOwotCXdpbnN0YXRl LT5kZWZpbmVDbGF1c2VMaXN0ID0gTklMOwotCWlmIChub2RlLT5kZWZpbmVDbGF1c2UgIT0gTklM KQorCXdpbnN0YXRlLT5kZWZpbmVDbGF1c2VFeHBycyA9IE5JTDsKKworCS8qCisJICogQ29tcGls ZSBERUZJTkUgY2xhdXNlIGV4cHJlc3Npb25zLiAgUFJFVi9ORVhUIG5hdmlnYXRpb24gaXMgaGFu ZGxlZCBieQorCSAqIEVFT1BfUlBSX05BVl9TRVQvUkVTVE9SRSBvcGNvZGVzIGVtaXR0ZWQgZHVy aW5nIEV4ZWNJbml0RXhwciwgc28gbm8KKwkgKiB2YXJubyByZXdyaXRpbmcgaXMgbmVlZGVkIGhl cmUuCisJICovCisJZm9yZWFjaF9ub2RlKFRhcmdldEVudHJ5LCB0ZSwgbm9kZS0+ZGVmaW5lQ2xh dXNlKQogCXsKLQkJLyoKLQkJICogQ29tcGlsZSBERUZJTkUgY2xhdXNlIGV4cHJlc3Npb25zLiAg UFJFVi9ORVhUIG5hdmlnYXRpb24gaXMgaGFuZGxlZAotCQkgKiBieSBFRU9QX1JQUl9OQVZfU0VU L1JFU1RPUkUgb3Bjb2RlcyBlbWl0dGVkIGR1cmluZyBFeGVjSW5pdEV4cHIsIHNvCi0JCSAqIG5v IHZhcm5vIHJld3JpdGluZyBpcyBuZWVkZWQgaGVyZS4KLQkJICovCi0JCWZvcmVhY2hfbm9kZShU YXJnZXRFbnRyeSwgdGUsIG5vZGUtPmRlZmluZUNsYXVzZSkKLQkJewotCQkJY2hhcgkgICAqbmFt ZSA9IHRlLT5yZXNuYW1lOwotCQkJRXhwcgkgICAqZXhwciA9IHRlLT5leHByOwotCQkJRXhwclN0 YXRlICAqZXhwczsKKwkJY2hhcgkgICAqbmFtZSA9IHRlLT5yZXNuYW1lOworCQlFeHByU3RhdGUg ICpleHByczsKIAotCQkJd2luc3RhdGUtPmRlZmluZVZhcmlhYmxlTGlzdCA9Ci0JCQkJbGFwcGVu ZCh3aW5zdGF0ZS0+ZGVmaW5lVmFyaWFibGVMaXN0LAotCQkJCQkJbWFrZVN0cmluZyhwc3RyZHVw KG5hbWUpKSk7Ci0JCQlleHBzID0gRXhlY0luaXRFeHByKGV4cHIsIChQbGFuU3RhdGUgKikgd2lu c3RhdGUpOwotCQkJd2luc3RhdGUtPmRlZmluZUNsYXVzZUxpc3QgPQotCQkJCWxhcHBlbmQod2lu c3RhdGUtPmRlZmluZUNsYXVzZUxpc3QsIGV4cHMpOwotCQl9CisJCXdpbnN0YXRlLT5kZWZpbmVW YXJpYWJsZUxpc3QgPQorCQkJbGFwcGVuZCh3aW5zdGF0ZS0+ZGVmaW5lVmFyaWFibGVMaXN0LAor CQkJCQltYWtlU3RyaW5nKHBzdHJkdXAobmFtZSkpKTsKKworCQlleHBycyA9IEV4ZWNJbml0RXhw cih0ZS0+ZXhwciwgKFBsYW5TdGF0ZSAqKSB3aW5zdGF0ZSk7CisKKwkJd2luc3RhdGUtPmRlZmlu ZUNsYXVzZUV4cHJzID0KKwkJCWxhcHBlbmQod2luc3RhdGUtPmRlZmluZUNsYXVzZUV4cHJzLCBl eHBycyk7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSBORkEgZnJlZSBsaXN0cyBmb3Igcm93IHBhdHRl cm4gbWF0Y2hpbmcgKi8KQEAgLTQ1OTgsNyArNDU5Nyw3IEBAIG5mYV9ldmFsdWF0ZV9yb3coV2lu ZG93T2JqZWN0IHdpbm9iaiwgaW50NjQgcG9zLCBib29sICp2YXJNYXRjaGVkKQogCS8qIEludmFs aWRhdGUgbmF2X3Nsb3QgY2FjaGUgc28gUFJFVi9ORVhUIHJlLWZldGNoIGZvciBuZXcgcm93ICov CiAJd2luc3RhdGUtPm5hdl9zbG90X3BvcyA9IC0xOwogCi0JZm9yZWFjaF9wdHIoRXhwclN0YXRl LCBleHByU3RhdGUsIHdpbnN0YXRlLT5kZWZpbmVDbGF1c2VMaXN0KQorCWZvcmVhY2hfcHRyKEV4 cHJTdGF0ZSwgZXhwclN0YXRlLCB3aW5zdGF0ZS0+ZGVmaW5lQ2xhdXNlRXhwcnMpCiAJewogCQlE YXR1bQkJcmVzdWx0OwogCQlib29sCQlpc251bGw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxs cGF0aHMuYwppbmRleCBmM2M5ZjNjMGJkLi5iMjg5ZTQ2YTk1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2FsbHBhdGhzLmMKQEAgLTQ4MDcsMjAgKzQ4MDcsMTkgQEAgcmVtb3ZlX3VudXNlZF9z dWJxdWVyeV9vdXRwdXRzKFF1ZXJ5ICpzdWJxdWVyeSwgUmVsT3B0SW5mbyAqcmVsLAogCQkgKi8K IAkJaWYgKElzQSh0ZXhwciwgV2luZG93RnVuYykpCiAJCXsKKwkJCWJvb2wJaXNfcnByID0gZmFs c2U7CiAJCQlXaW5kb3dGdW5jICp3ZnVuYyA9IChXaW5kb3dGdW5jICopIHRleHByOwotCQkJTGlz dENlbGwgICAqd2xjOwogCi0JCQlmb3JlYWNoKHdsYywgc3VicXVlcnktPndpbmRvd0NsYXVzZSkK KwkJCWZvcmVhY2hfbm9kZShXaW5kb3dDbGF1c2UsIHdjLCBzdWJxdWVyeS0+d2luZG93Q2xhdXNl KQogCQkJewotCQkJCVdpbmRvd0NsYXVzZSAqd2MgPSBsZmlyc3Rfbm9kZShXaW5kb3dDbGF1c2Us IHdsYyk7Ci0KLQkJCQlpZiAod2MtPndpbnJlZiA9PSB3ZnVuYy0+d2lucmVmICYmCi0JCQkJCXdj LT5kZWZpbmVDbGF1c2UgIT0gTklMKQorCQkJCWlmICh3Yy0+d2lucmVmID09IHdmdW5jLT53aW5y ZWYgJiYgd2MtPmRlZmluZUNsYXVzZSAhPSBOSUwpCiAJCQkJeworCQkJCQlpc19ycHIgPSB0cnVl OwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAod2xjICE9IE5VTEwpCisKKwkJCWlm IChpc19ycHIpCiAJCQkJY29udGludWU7CiAJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nv c3RzaXplLmMKaW5kZXggODI0NzJjM2ZlOS4uMDJiMjVmNmYwOCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0zMjM1LDI2ICszMjM1LDE0IEBAIGNvc3Rfd2luZG93YWdn KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCWlmICh3aW5jbGF1c2UtPnJw UGF0dGVybikKIAl7Ci0JCUxpc3QJICAgKnBhdHRlcm5fdmFyczsKIAkJUXVhbENvc3QJZGVmY29z dHM7CiAKLQkJcGF0dGVybl92YXJzID0gY29sbGVjdFBhdHRlcm5WYXJpYWJsZXMod2luY2xhdXNl LT5ycFBhdHRlcm4pOwotCi0JCWZvcmVhY2hfbm9kZShTdHJpbmcsIHB2LCBwYXR0ZXJuX3ZhcnMp CisJCWZvcmVhY2hfbm9kZShUYXJnZXRFbnRyeSwgZGVmLCB3aW5jbGF1c2UtPmRlZmluZUNsYXVz ZSkKIAkJewotCQkJY2hhcgkgICAqcHRuYW1lID0gc3RyVmFsKHB2KTsKLQotCQkJZm9yZWFjaF9u b2RlKFRhcmdldEVudHJ5LCBkZWYsIHdpbmNsYXVzZS0+ZGVmaW5lQ2xhdXNlKQotCQkJewotCQkJ CWlmICghc3RyY21wKHB0bmFtZSwgZGVmLT5yZXNuYW1lKSkKLQkJCQl7Ci0JCQkJCWNvc3RfcXVh bF9ldmFsX25vZGUoJmRlZmNvc3RzLCAoTm9kZSAqKSBkZWYtPmV4cHIsIHJvb3QpOwotCQkJCQlz dGFydHVwX2Nvc3QgKz0gZGVmY29zdHMuc3RhcnR1cDsKLQkJCQkJdG90YWxfY29zdCArPSBkZWZj b3N0cy5wZXJfdHVwbGUgKiBpbnB1dF90dXBsZXM7Ci0JCQkJfQotCQkJfQorCQkJY29zdF9xdWFs X2V2YWxfbm9kZSgmZGVmY29zdHMsIChOb2RlICopIGRlZi0+ZXhwciwgcm9vdCk7CisJCQlzdGFy dHVwX2Nvc3QgKz0gZGVmY29zdHMuc3RhcnR1cDsKKwkJCXRvdGFsX2Nvc3QgKz0gZGVmY29zdHMu cGVyX3R1cGxlICogaW5wdXRfdHVwbGVzOwogCQl9Ci0JCWxpc3RfZnJlZV9kZWVwKHBhdHRlcm5f dmFycyk7CiAJfQogCiAJZm9yZWFjaChsYywgd2luZG93RnVuY3MpCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggY2NhNDEyNmU1MS4uOGJmMmU4OTkwNiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMjkwLDkgKzI5MCw4IEBAIHN0 YXRpYyBNZW1vaXplICptYWtlX21lbW9pemUoUGxhbiAqbGVmdHRyZWUsIE9pZCAqaGFzaG9wZXJh dG9ycywKIHN0YXRpYyBXaW5kb3dBZ2cgKm1ha2Vfd2luZG93YWdnKExpc3QgKnRsaXN0LCBXaW5k b3dDbGF1c2UgKndjLAogCQkJCQkJCQkgaW50IHBhcnROdW1Db2xzLCBBdHRyTnVtYmVyICpwYXJ0 Q29sSWR4LCBPaWQgKnBhcnRPcGVyYXRvcnMsIE9pZCAqcGFydENvbGxhdGlvbnMsCiAJCQkJCQkJ CSBpbnQgb3JkTnVtQ29scywgQXR0ck51bWJlciAqb3JkQ29sSWR4LCBPaWQgKm9yZE9wZXJhdG9y cywgT2lkICpvcmRDb2xsYXRpb25zLAotCQkJCQkJCQkgTGlzdCAqcnVuQ29uZGl0aW9uLCBSUFNr aXBUbyBycFNraXBUbywKKwkJCQkJCQkJIExpc3QgKnJ1bkNvbmRpdGlvbiwKIAkJCQkJCQkJIFJQ UlBhdHRlcm4gKmNvbXBpbGVkUGF0dGVybiwKLQkJCQkJCQkJIExpc3QgKmRlZmluZUNsYXVzZSwK IAkJCQkJCQkJIEJpdG1hcHNldCAqZGVmaW5lTWF0Y2hTdGFydERlcGVuZGVudCwKIAkJCQkJCQkJ IFJQUk5hdk9mZnNldEtpbmQgbmF2TWF4T2Zmc2V0S2luZCwgaW50NjQgbmF2TWF4T2Zmc2V0LAog CQkJCQkJCQkgYm9vbCBoYXNGaXJzdE5hdiwKQEAgLTI4MjIsNyArMjgyMSw2IEBAIGNyZWF0ZV93 aW5kb3dhZ2dfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgV2luZG93QWdnUGF0aCAqYmVzdF9wYXRo KQogCU9pZAkJICAgKm9yZENvbGxhdGlvbnM7CiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdAkgICAq ZGVmaW5lVmFyaWFibGVMaXN0ID0gTklMOwotCUxpc3QJICAgKmZpbHRlcmVkRGVmaW5lQ2xhdXNl ID0gTklMOwogCVJQUlBhdHRlcm4gKmNvbXBpbGVkUGF0dGVybiA9IE5VTEw7CiAJQml0bWFwc2V0 ICAqbWF0Y2hTdGFydERlcGVuZGVudCA9IE5VTEw7CiAJUlBSTmF2T2Zmc2V0S2luZCBuYXZNYXhP ZmZzZXRLaW5kID0gUlBSX05BVl9PRkZTRVRfRklYRUQ7CkBAIC0yODg5LDggKzI4ODcsOSBAQCBj cmVhdGVfd2luZG93YWdnX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFdpbmRvd0FnZ1BhdGggKmJl c3RfcGF0aCkKIAkJICogcmVqZWN0cyBERUZJTkUgdmFyaWFibGVzIG5vdCB1c2VkIGluIFBBVFRF Uk4sIHNvIG5vIGZpbHRlcmluZyBpcwogCQkgKiBuZWVkZWQuCiAJCSAqLwotCQlidWlsZERlZmlu ZVZhcmlhYmxlTGlzdCh3Yy0+ZGVmaW5lQ2xhdXNlLCAmZGVmaW5lVmFyaWFibGVMaXN0KTsKLQkJ ZmlsdGVyZWREZWZpbmVDbGF1c2UgPSB3Yy0+ZGVmaW5lQ2xhdXNlOworCQlmb3JlYWNoX25vZGUo VGFyZ2V0RW50cnksIHRlLCB3Yy0+ZGVmaW5lQ2xhdXNlKQorCQkJZGVmaW5lVmFyaWFibGVMaXN0 ID0gbGFwcGVuZChkZWZpbmVWYXJpYWJsZUxpc3QsCisJCQkJCQkJCQkJbWFrZVN0cmluZyhwc3Ry ZHVwKHRlLT5yZXNuYW1lKSkpOwogCiAJCS8qCiAJCSAqIFdhbGsgREVGSU5FIG9uY2U6IGNvbGxl Y3QgbmF2IG9mZnNldHMgKGZvciB0dXBsZXN0b3JlIHRyaW0pIGFuZCB0aGUKQEAgLTI5MjMsMTMg KzI5MjIsMTMgQEAgY3JlYXRlX3dpbmRvd2FnZ19wbGFuKFBsYW5uZXJJbmZvICpyb290LCBXaW5k b3dBZ2dQYXRoICpiZXN0X3BhdGgpCiAJCQkJCQkgIG9yZE9wZXJhdG9ycywKIAkJCQkJCSAgb3Jk Q29sbGF0aW9ucywKIAkJCQkJCSAgYmVzdF9wYXRoLT5ydW5Db25kaXRpb24sCi0JCQkJCQkgIHdj LT5ycFNraXBUbywKIAkJCQkJCSAgY29tcGlsZWRQYXR0ZXJuLAotCQkJCQkJICBmaWx0ZXJlZERl ZmluZUNsYXVzZSwKIAkJCQkJCSAgbWF0Y2hTdGFydERlcGVuZGVudCwKLQkJCQkJCSAgbmF2TWF4 T2Zmc2V0S2luZCwgbmF2TWF4T2Zmc2V0LAorCQkJCQkJICBuYXZNYXhPZmZzZXRLaW5kLAorCQkJ CQkJICBuYXZNYXhPZmZzZXQsCiAJCQkJCQkgIGhhc0ZpcnN0TmF2LAotCQkJCQkJICBuYXZGaXJz dE9mZnNldEtpbmQsIG5hdkZpcnN0T2Zmc2V0LAorCQkJCQkJICBuYXZGaXJzdE9mZnNldEtpbmQs CisJCQkJCQkgIG5hdkZpcnN0T2Zmc2V0LAogCQkJCQkJICBiZXN0X3BhdGgtPnF1YWwsCiAJCQkJ CQkgIGJlc3RfcGF0aC0+dG9wd2luZG93LAogCQkJCQkJICBzdWJwbGFuKTsKQEAgLTcwMDAsOSAr Njk5OSw4IEBAIHN0YXRpYyBXaW5kb3dBZ2cgKgogbWFrZV93aW5kb3dhZ2coTGlzdCAqdGxpc3Qs IFdpbmRvd0NsYXVzZSAqd2MsCiAJCQkgICBpbnQgcGFydE51bUNvbHMsIEF0dHJOdW1iZXIgKnBh cnRDb2xJZHgsIE9pZCAqcGFydE9wZXJhdG9ycywgT2lkICpwYXJ0Q29sbGF0aW9ucywKIAkJCSAg IGludCBvcmROdW1Db2xzLCBBdHRyTnVtYmVyICpvcmRDb2xJZHgsIE9pZCAqb3JkT3BlcmF0b3Jz LCBPaWQgKm9yZENvbGxhdGlvbnMsCi0JCQkgICBMaXN0ICpydW5Db25kaXRpb24sIFJQU2tpcFRv IHJwU2tpcFRvLAorCQkJICAgTGlzdCAqcnVuQ29uZGl0aW9uLAogCQkJICAgUlBSUGF0dGVybiAq Y29tcGlsZWRQYXR0ZXJuLAotCQkJICAgTGlzdCAqZGVmaW5lQ2xhdXNlLAogCQkJICAgQml0bWFw c2V0ICpkZWZpbmVNYXRjaFN0YXJ0RGVwZW5kZW50LAogCQkJICAgUlBSTmF2T2Zmc2V0S2luZCBu YXZNYXhPZmZzZXRLaW5kLCBpbnQ2NCBuYXZNYXhPZmZzZXQsCiAJCQkgICBib29sIGhhc0ZpcnN0 TmF2LApAQCAtNzAzNCwxMiArNzAzMiwxMiBAQCBtYWtlX3dpbmRvd2FnZyhMaXN0ICp0bGlzdCwg V2luZG93Q2xhdXNlICp3YywKIAlub2RlLT5pblJhbmdlQXNjID0gd2MtPmluUmFuZ2VBc2M7CiAJ bm9kZS0+aW5SYW5nZU51bGxzRmlyc3QgPSB3Yy0+aW5SYW5nZU51bGxzRmlyc3Q7CiAJbm9kZS0+ dG9wV2luZG93ID0gdG9wV2luZG93OwotCW5vZGUtPnJwU2tpcFRvID0gcnBTa2lwVG87CisJbm9k ZS0+cnBTa2lwVG8gPSB3Yy0+cnBTa2lwVG87CiAKIAkvKiBTdG9yZSBjb21waWxlZCBwYXR0ZXJu IGZvciBORkEgZXhlY3V0aW9uICovCiAJbm9kZS0+cnBQYXR0ZXJuID0gY29tcGlsZWRQYXR0ZXJu OwogCi0Jbm9kZS0+ZGVmaW5lQ2xhdXNlID0gZGVmaW5lQ2xhdXNlOworCW5vZGUtPmRlZmluZUNs YXVzZSA9IHdjLT5kZWZpbmVDbGF1c2U7CiAKIAkvKiBTdG9yZSBwcmUtY29tcHV0ZWQgbWF0Y2hf c3RhcnQgZGVwZW5kZW5jeSBiaXRtYXBzZXQgKi8KIAlub2RlLT5kZWZpbmVNYXRjaFN0YXJ0RGVw ZW5kZW50ID0gZGVmaW5lTWF0Y2hTdGFydERlcGVuZGVudDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3Jwci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcnBy LmMKaW5kZXggMTc1Nzc3YThmZi4uZmI1MjYwYzc4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcnByLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcnBy LmMKQEAgLTk4LDkgKzk4LDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUFic29yYmFiaWxpdHlSZWN1 cnNpdmUoUlBSUGF0dGVybiAqcGF0dGVybiwKIAkJCQkJCQkJCQkgIGJvb2wgKmhhc0Fic29yYmFi bGUpOwogc3RhdGljIHZvaWQgY29tcHV0ZUFic29yYmFiaWxpdHkoUlBSUGF0dGVybiAqcGF0dGVy bik7CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RQYXR0ZXJuVmFyaWFibGVzUmVjdXJzaXZlKFJQUlBh dHRlcm5Ob2RlICpub2RlLAotCQkJCQkJCQkJCQkgTGlzdCAqKnZhck5hbWVzKTsKLQogLyoKICAq IHJwclBhdHRlcm5FcXVhbAogICoJCUNvbXBhcmUgdHdvIFJQUlBhdHRlcm5Ob2RlIHRyZWVzIGZv ciBlcXVhbGl0eS4KQEAgLTE4MjYsNTkgKzE4MjMsNiBAQCBjb21wdXRlQWJzb3JiYWJpbGl0eShS UFJQYXR0ZXJuICpwYXR0ZXJuKQogCXBhdHRlcm4tPmlzQWJzb3JiYWJsZSA9IGhhc0Fic29yYmFi bGU7CiB9CiAKLS8qCi0gKiBjb2xsZWN0UGF0dGVyblZhcmlhYmxlc1JlY3Vyc2l2ZQotICoJCVJl Y3Vyc2l2ZWx5IGNvbGxlY3QgdmFyaWFibGUgbmFtZXMgZnJvbSBwYXR0ZXJuIEFTVC4KLSAqLwot c3RhdGljIHZvaWQKLWNvbGxlY3RQYXR0ZXJuVmFyaWFibGVzUmVjdXJzaXZlKFJQUlBhdHRlcm5O b2RlICpub2RlLCBMaXN0ICoqdmFyTmFtZXMpCi17Ci0JQXNzZXJ0KG5vZGUgIT0gTlVMTCk7Ci0K LQljaGVja19zdGFja19kZXB0aCgpOwotCi0Jc3dpdGNoIChub2RlLT5ub2RlVHlwZSkKLQl7Ci0J CWNhc2UgUlBSX1BBVFRFUk5fVkFSOgotCQkJLyogQWRkIHZhcmlhYmxlIGlmIG5vdCBhbHJlYWR5 IGluIGxpc3QgKi8KLQkJCWZvcmVhY2hfbm9kZShTdHJpbmcsIHZhcm5hbWUsICp2YXJOYW1lcykK LQkJCXsKLQkJCQlpZiAoc3RyY21wKHN0clZhbCh2YXJuYW1lKSwgbm9kZS0+dmFyTmFtZSkgPT0g MCkKLQkJCQkJcmV0dXJuOwkJLyogQWxyZWFkeSBjb2xsZWN0ZWQgKi8KLQkJCX0KLQkJCSp2YXJO YW1lcyA9IGxhcHBlbmQoKnZhck5hbWVzLCBtYWtlU3RyaW5nKHBzdHJkdXAobm9kZS0+dmFyTmFt ZSkpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUlBSX1BBVFRFUk5fU0VROgotCQljYXNlIFJQUl9Q QVRURVJOX0FMVDoKLQkJY2FzZSBSUFJfUEFUVEVSTl9HUk9VUDoKLQkJCWZvcmVhY2hfbm9kZShS UFJQYXR0ZXJuTm9kZSwgY2hpbGQsIG5vZGUtPmNoaWxkcmVuKQotCQkJewotCQkJCWNvbGxlY3RQ YXR0ZXJuVmFyaWFibGVzUmVjdXJzaXZlKGNoaWxkLCB2YXJOYW1lcyk7Ci0JCQl9Ci0JCQlicmVh azsKLQl9Ci19Ci0KLS8qCi0gKiBjb2xsZWN0UGF0dGVyblZhcmlhYmxlcwotICoJCUNvbGxlY3Qg dW5pcXVlIHZhcmlhYmxlIG5hbWVzIHVzZWQgaW4gUEFUVEVSTiBjbGF1c2UuCi0gKgotICogUmV0 dXJucyBhIGxpc3Qgb2YgU3RyaW5nIG5vZGVzIGNvbnRhaW5pbmcgdmFyaWFibGUgbmFtZXMuCi0g KiBVc2VkIHRvIGZpbHRlciBkZWZpbmVDbGF1c2UgYmVmb3JlIHZhcklkIGFzc2lnbm1lbnQuCi0g Ki8KLUxpc3QgKgotY29sbGVjdFBhdHRlcm5WYXJpYWJsZXMoUlBSUGF0dGVybk5vZGUgKnBhdHRl cm4pCi17Ci0JTGlzdAkgICAqdmFyTmFtZXMgPSBOSUw7Ci0KLQkvKiBDYWxsZXIgZW5zdXJlcyBw YXR0ZXJuIGlzIG5vdCBOVUxMICovCi0JQXNzZXJ0KHBhdHRlcm4gIT0gTlVMTCk7Ci0KLQljb2xs ZWN0UGF0dGVyblZhcmlhYmxlc1JlY3Vyc2l2ZShwYXR0ZXJuLCAmdmFyTmFtZXMpOwotCXJldHVy biB2YXJOYW1lczsKLX0KLQogLyoKICAqIHJwcl92b2xhdGlsZV9mdW5jX2NoZWNrZXIKICAqCQlj aGVja19mdW5jdGlvbnNfaW5fbm9kZSBjYWxsYmFjazogdHJ1ZSBpZiBmdW5jaWQgaXMgVk9MQVRJ TEUuCkBAIC0xOTU1LDI3ICsxODk5LDYgQEAgdmFsaWRhdGVfcnByX2RlZmluZV92b2xhdGlsaXR5 KExpc3QgKmRlZmluZUNsYXVzZSkKIAl9CiB9CiAKLS8qCi0gKiBidWlsZERlZmluZVZhcmlhYmxl TGlzdAotICoJCUJ1aWxkIGRlZmluZVZhcmlhYmxlTGlzdCBmcm9tIGRlZmluZUNsYXVzZS4KLSAq Ci0gKiBUaGUgcGFyc2VyIGFscmVhZHkgZW5zdXJlcyB0aGF0IGFsbCBERUZJTkUgdmFyaWFibGVz IGFwcGVhciBpbiBQQVRURVJOLAotICogc28gbm8gZmlsdGVyaW5nIGlzIG5lZWRlZCBoZXJlLgot ICoKLSAqIFNldHMgKmRlZmluZVZhcmlhYmxlTGlzdCB0byBsaXN0IG9mIHZhcmlhYmxlIG5hbWVz IChTdHJpbmcgbm9kZXMpLgotICovCi12b2lkCi1idWlsZERlZmluZVZhcmlhYmxlTGlzdChMaXN0 ICpkZWZpbmVDbGF1c2UsIExpc3QgKipkZWZpbmVWYXJpYWJsZUxpc3QpCi17Ci0JKmRlZmluZVZh cmlhYmxlTGlzdCA9IE5JTDsKLQotCWZvcmVhY2hfbm9kZShUYXJnZXRFbnRyeSwgdGUsIGRlZmlu ZUNsYXVzZSkKLQl7Ci0JCSpkZWZpbmVWYXJpYWJsZUxpc3QgPSBsYXBwZW5kKCpkZWZpbmVWYXJp YWJsZUxpc3QsCi0JCQkJCQkJCQkgIG1ha2VTdHJpbmcocHN0cmR1cCh0ZS0+cmVzbmFtZSkpKTsK LQl9Ci19Ci0KIC8qCiAgKiBidWlsZFJQUlBhdHRlcm4KICAqCQlDb21waWxlIHBhdHRlcm4gQVNU IHRvIGZsYXQgYnl0ZWNvZGUgYXJyYXkuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDc5MmFhM2Yw ZDAuLmQ1ZGZmODZkZDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0yNjU3LDcgKzI2NTcsNyBA QCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dBZ2dTdGF0ZQogCXN0cnVjdCBSUFJQYXR0ZXJuICpycFBh dHRlcm47CS8qIGNvbXBpbGVkIHBhdHRlcm4gZm9yIE5GQSBleGVjdXRpb24gKi8KIAlMaXN0CSAg ICpkZWZpbmVWYXJpYWJsZUxpc3Q7IC8qIGxpc3Qgb2Ygcm93IHBhdHRlcm4gZGVmaW5pdGlvbgog CQkJCQkJCQkJICogdmFyaWFibGVzIChsaXN0IG9mIFN0cmluZykgKi8KLQlMaXN0CSAgICpkZWZp bmVDbGF1c2VMaXN0OwkvKiBleHByZXNzaW9uIGZvciByb3cgcGF0dGVybiBkZWZpbml0aW9uCisJ TGlzdAkgICAqZGVmaW5lQ2xhdXNlRXhwcnM7CS8qIGV4cHJlc3Npb24gZm9yIHJvdyBwYXR0ZXJu IGRlZmluaXRpb24KIAkJCQkJCQkJCSAqIHNlYXJjaCBjb25kaXRpb25zIEV4cHJTdGF0ZSBsaXN0 ICovCiAJUlBSTkZBQ29udGV4dCAqbmZhQ29udGV4dDsJLyogYWN0aXZlIG1hdGNoaW5nIGNvbnRl eHRzIChoZWFkKSAqLwogCVJQUk5GQUNvbnRleHQgKm5mYUNvbnRleHRUYWlsOwkvKiB0YWlsIG9m IGFjdGl2ZSBjb250ZXh0cyAoZm9yIHJldmVyc2UKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCAz MjY2YzExYTcxLi43MmRhMzJhZTI4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC02MTksNyAr NjE5LDcgQEAgdHlwZWRlZiBlbnVtIFJQUlBhdHRlcm5Ob2RlVHlwZQogfSBSUFJQYXR0ZXJuTm9k ZVR5cGU7CiAKIC8qCi0gKiBSUFJQYXR0ZXJuTm9kZSAtIFJvdyBQYXR0ZXJuIFJlY29nbml0aW9u IHBhdHRlcm4gQVNUIG5vZGUKKyAqIFJQUlBhdHRlcm5Ob2RlIC0gUm93IFBhdHRlcm4gUmVjb2du aXRpb24gcGF0dGVybiBjbGF1c2UKICAqLwogdHlwZWRlZiBzdHJ1Y3QgUlBSUGF0dGVybk5vZGUK IHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggZDcxMzhmNTE0MS4uODRjYWYwNzMzZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcHJpbW5vZGVzLmgKQEAgLTY5NSw3ICs2OTUsOCBAQCB0eXBlZGVmIHN0cnVjdCBSUFJOYXZF eHByCiAJRXhwcgkgICAqb2Zmc2V0X2FyZzsJCS8qIG9mZnNldCBleHByZXNzaW9uLCBvciBOVUxM IGZvciBkZWZhdWx0ICovCiAJRXhwcgkgICAqY29tcG91bmRfb2Zmc2V0X2FyZzsJLyogb3V0ZXIg b2Zmc2V0IGZvciBjb21wb3VuZCBuYXYsIG9yCiAJCQkJCQkJCQkJICogTlVMTCBpZiBzaW1wbGUg Ki8KLQlPaWQJCQlyZXN1bHR0eXBlOwkJLyogcmVzdWx0IHR5cGUgKHNhbWUgYXMgYXJnJ3MgdHlw ZSkgKi8KKwkvKiByZXN1bHQgdHlwZSAoc2FtZSBhcyBhcmcncyB0eXBlKSAqLworCU9pZAkJCXJl c3VsdHR5cGUgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwogCS8qIE9JRCBvZiBj b2xsYXRpb24gb2YgcmVzdWx0ICovCiAJT2lkCQkJcmVzdWx0Y29sbGlkIHBnX25vZGVfYXR0cihx dWVyeV9qdW1ibGVfaWdub3JlKTsKIAkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93 biAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Jwci5oIGIvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3Jwci5oCmluZGV4IDgwMmQyZjFkZDYuLjMxODY2MjQ1ZjcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9ycHIuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcnByLmgKQEAgLTY2LDEwICs2Niw3IEBACiAjZGVmaW5lIFJQUkVsZW1Jc0ZpbihlKQkJCSgo ZSktPnZhcklkID09IFJQUl9WQVJJRF9GSU4pCiAjZGVmaW5lIFJQUkVsZW1DYW5Ta2lwKGUpCQko KGUpLT5taW4gPT0gMCkKIAotZXh0ZXJuIExpc3QgKmNvbGxlY3RQYXR0ZXJuVmFyaWFibGVzKFJQ UlBhdHRlcm5Ob2RlICpwYXR0ZXJuKTsKIGV4dGVybiB2b2lkIHZhbGlkYXRlX3Jwcl9kZWZpbmVf dm9sYXRpbGl0eShMaXN0ICpkZWZpbmVDbGF1c2UpOwotZXh0ZXJuIHZvaWQgYnVpbGREZWZpbmVW YXJpYWJsZUxpc3QoTGlzdCAqZGVmaW5lQ2xhdXNlLAotCQkJCQkJCQkJTGlzdCAqKmRlZmluZVZh cmlhYmxlTGlzdCk7CiBleHRlcm4gUlBSUGF0dGVybiAqYnVpbGRSUFJQYXR0ZXJuKFJQUlBhdHRl cm5Ob2RlICpwYXR0ZXJuLCBMaXN0ICpkZWZpbmVWYXJpYWJsZUxpc3QsCiAJCQkJCQkJCSAgIFJQ U2tpcFRvIHJwU2tpcFRvLCBpbnQgZnJhbWVPcHRpb25zLAogCQkJCQkJCQkgICBib29sIGhhc01h dGNoU3RhcnREZXBlbmRlbnQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ycHJfaW50ZWdyYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHJfaW50 ZWdyYXRpb24ub3V0CmluZGV4IDgwYTMyY2NhOWEuLmVmNTM3Mzk2YjcgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByX2ludGVncmF0aW9uLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3Jwcl9pbnRlZ3JhdGlvbi5vdXQKQEAgLTI0MCw5ICsyNDAsOSBA QCBPUkRFUiBCWSBpZDsKIC0tIG11c3QgdGhlcmVmb3JlIHlpZWxkIHR3byBzZXBhcmF0ZSBXaW5k b3dBZ2cgbm9kZXMuICBJbmxpbmUgc3BlY3MKIC0tIGFyZSB1c2VkIGhlcmUgYmVjYXVzZSBkZWR1 cCBvbmx5IGFwcGxpZXMgdG8gaW5saW5lIHdpbmRvd3MuCiAtLSBCYXNlbGluZTogdHdvIGlubGlu ZSBSUFIgd2luZG93cyB0aGF0IGFyZSBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsCi0tLSAoc2FtZSBP UkRFUiBCWSwgZnJhbWUsIFBBVFRFUk4sIGFuZCBERUZJTkUpIGFyZSBkZWR1cGVkIGJ5IHRoZQot LS0gcGFyc2VyIGludG8gYSBzaW5nbGUgV2luZG93QWdnIG5vZGUsIGNvbmZpcm1pbmcgdGhhdCBw YXJzZXItbGV2ZWwKLS0tIGRlZHVwIGlzIGFjdGl2ZSBmb3IgUlBSIHdpbmRvd3Mgd2hvc2UgREVG SU5FIG1hdGNoZXMuCistLSAoc2FtZSBQQVJUSVRJT04gQlksIE9SREVSIEJZLCBmcmFtZSwgUEFU VEVSTiwgYW5kIERFRklORSkgYXJlIGRlZHVwZWQgYnkgdGhlCistLSBwYXJzZXIgaW50byBhIHNp bmdsZSBXaW5kb3dBZ2cgbm9kZSwgY29uZmlybWluZyB0aGF0IHBhcnNlci1sZXZlbCBkZWR1cCBp cworLS0gYWN0aXZlIGZvciBSUFIgd2luZG93cyB3aG9zZSBERUZJTkUgbWF0Y2hlcy4KIEVYUExB SU4gKENPU1RTIE9GRikKIFNFTEVDVAogICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIGlkCkBA IC0zMjUsMTUgKzMyNSwxMCBAQCBPUkRFUiBCWSBpZDsKIC0tIEE1LiBVbnVzZWQgd2luZG93IHJl bW92YWwgcHJldmVudGlvbgogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSBWZXJpZnkgdGhhdCByZW1vdmVfdW51c2VkX3N1 YnF1ZXJ5X291dHB1dHMoKSBkb2VzIG5vdCBkcm9wIGFuIFJQUgotLS0gd2luZG93IGZ1bmN0aW9u IGV2ZW4gd2hlbiB0aGUgb3V0ZXIgcXVlcnkgZG9lcyBub3QgcmVmZXJlbmNlIGl0cwotLS0gcmVz dWx0LiAgVGhlIFJQUiBXaW5kb3dBZ2cgbm9kZSBpcyByZXNwb25zaWJsZSBmb3IgcGVyZm9ybWlu ZyBwYXR0ZXJuCi0tLSBtYXRjaGluZywgc28gcmVtb3ZpbmcgdGhlIHdpbmRvdyBmdW5jdGlvbiB3 b3VsZCBzaWxlbnRseSBza2lwIHRoZQotLS0gcGF0dGVybiBtYXRjaCBldmVuIHRob3VnaCB0aGUg c3Vycm91bmRpbmcgcXVlcnkgc3RpbGwgZGVwZW5kcyBvbgotLS0gUlBSIHNlbWFudGljcy4KLS0t IFRoZSBvdXRlciBxdWVyeSBpZ25vcmVzIHRoZSBwZXItcm93IHdpbmRvdyByZXN1bHQsIHlldCBw YXR0ZXJuCi0tLSBtYXRjaGluZyBtdXN0IHN0aWxsIGV4ZWN1dGUuICBUaGUgcGxhbiBtdXN0IHN0 aWxsIGNvbnRhaW4gYQotLS0gV2luZG93QWdnIG5vZGUgYmVsb3cgdGhlIG91dGVyIEFnZ3JlZ2F0 ZTsgaWYgdGhlIHdpbmRvdyB3ZXJlCi0tLSByZW1vdmVkLCBvbmx5IEFnZ3JlZ2F0ZSArIFNlcSBT Y2FuIHdvdWxkIGFwcGVhci4KKy0tIHdpbmRvdyBmdW5jdGlvbiB3aGVuIHRoZSBvdXRlciBxdWVy eSBkb2VzIG5vdCByZWZlcmVuY2UgaXRzIHJlc3VsdC4KKy0tIFRoZSBXaW5kb3dBZ2cgbm9kZSBw ZXJmb3JtcyB0aGUgcGF0dGVybiBtYXRjaCBpdHNlbGY7IHdpdGhvdXQgaXQsCistLSB0aGUgbWF0 Y2ggd291bGQgYmUgc2lsZW50bHkgc2tpcHBlZC4gIFRoZSBwbGFuIG11c3QgY29udGFpbiBhCist LSBXaW5kb3dBZ2cgbm9kZSBiZW5lYXRoIHRoZSBvdXRlciBBZ2dyZWdhdGUuCiBFWFBMQUlOIChD T1NUUyBPRkYpCiBTRUxFQ1QgY291bnQoKikgRlJPTSAoCiAgICAgU0VMRUNUIGNvdW50KCopIE9W RVIgdyBGUk9NIHJwcl9pbnRlZwpAQCAtNTg3LDEwICs1ODIsOCBAQCBXSEVSRSBjbnQgPiAwOwog LS0gRVhQTEFJTiBWRVJCT1NFIGlzIHRoZXJlZm9yZSBleHBlY3RlZCB0byBzaG93IGEgY2xlYW4g dGFyZ2V0bGlzdCBvbgogLS0gdGhlIG91dGVyIFdpbmRvd0FnZywgd2l0aCBubyBERUZJTkUtZGVy aXZlZCBleHByZXNzaW9uIGxlYWtpbmcgaW4uCiAtLSBOb3RlOiBjb2x1bW5zIHJlZmVyZW5jZWQg YnkgREVGSU5FIChlLmcuLCAidmFsIikgbWF5IGFwcGVhciBhcwotLS0gcmVzanVuayBlbnRyaWVz IGluIHVwcGVyIFdpbmRvd0FnZyB0YXJnZXRsaXN0cyAtLSB0aGF0IGlzIGEKLS0tIGhhcm1sZXNz IGJ5cHJvZHVjdCBvZiB0aGUgY29sdW1uIGd1YXJkJ3MgYnJvYWQgc2NvcGUgYW5kIGRvZXMgbm90 Ci0tLSBhZmZlY3QgY2xpZW50IG91dHB1dC4gIFRoZSBjbGFpbSBoZXJlIGlzIGxpbWl0ZWQgdG8g dGhlIGZ1bGwKLS0tIERFRklORSBib29sZWFuIGV4cHJlc3Npb24uCistLSByZXNqdW5rIGVudHJp ZXMgaW4gdXBwZXIgV2luZG93QWdnIHRhcmdldGxpc3RzIC0tIGJ1dCB0aGF0IGlzIGEgaGFybWxl c3MuCistLSBUaGUgY2xhaW0gaGVyZSBpcyBsaW1pdGVkIHRvIHRoZSBmdWxsIERFRklORSBib29s ZWFuIGV4cHJlc3Npb24uCiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCiBTRUxFQ1QKICAg ICBjb3VudCgqKSBPVkVSIHdfcnByIEFTIHJwcl9jbnQsCkBAIC02MjAsMTAgKzYxMyw2IEBAIFdJ TkRPVwogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBpZCwgdmFsCiAoMTMgcm93cykKIAot LS0gRXhlY3V0aW5nIHRoZSBzYW1lIHF1ZXJ5IHNob3dzIHRoZSBjbGllbnQgcmVzdWx0IGlzIGxp bWl0ZWQgdG8KLS0tIHRoZSB0d28gcHJvamVjdGVkIGNvbHVtbnM7ICJpZCIgYW5kICJ2YWwiIHRo YXQgYXBwZWFyZWQgaW4gdGhlCi0tLSB1cHBlciBXaW5kb3dBZ2cgT3V0cHV0IGxpbmUgYXJlIHJl c2p1bmstb25seSBhbmQgZG8gbm90IHJlYWNoCi0tLSB0aGUgY2xpZW50LgogU0VMRUNUCiAgICAg Y291bnQoKikgT1ZFUiB3X3JwciBBUyBycHJfY250LAogICAgIGNvdW50KCopIE9WRVIgd19ub3Jt YWwgQVMgbm9ybWFsX2NudApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcnByX2lu dGVncmF0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jwcl9pbnRlZ3JhdGlvbi5zcWwK aW5kZXggMWQ2MDc1MjY1Yi4uNjI2MzRkMGYwMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcnByX2ludGVncmF0aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ycHJf aW50ZWdyYXRpb24uc3FsCkBAIC0xNjYsOSArMTY2LDkgQEAgT1JERVIgQlkgaWQ7CiAtLSBhcmUg dXNlZCBoZXJlIGJlY2F1c2UgZGVkdXAgb25seSBhcHBsaWVzIHRvIGlubGluZSB3aW5kb3dzLgog CiAtLSBCYXNlbGluZTogdHdvIGlubGluZSBSUFIgd2luZG93cyB0aGF0IGFyZSBzdHJ1Y3R1cmFs bHkgaWRlbnRpY2FsCi0tLSAoc2FtZSBPUkRFUiBCWSwgZnJhbWUsIFBBVFRFUk4sIGFuZCBERUZJ TkUpIGFyZSBkZWR1cGVkIGJ5IHRoZQotLS0gcGFyc2VyIGludG8gYSBzaW5nbGUgV2luZG93QWdn IG5vZGUsIGNvbmZpcm1pbmcgdGhhdCBwYXJzZXItbGV2ZWwKLS0tIGRlZHVwIGlzIGFjdGl2ZSBm b3IgUlBSIHdpbmRvd3Mgd2hvc2UgREVGSU5FIG1hdGNoZXMuCistLSAoc2FtZSBQQVJUSVRJT04g QlksIE9SREVSIEJZLCBmcmFtZSwgUEFUVEVSTiwgYW5kIERFRklORSkgYXJlIGRlZHVwZWQgYnkg dGhlCistLSBwYXJzZXIgaW50byBhIHNpbmdsZSBXaW5kb3dBZ2cgbm9kZSwgY29uZmlybWluZyB0 aGF0IHBhcnNlci1sZXZlbCBkZWR1cCBpcworLS0gYWN0aXZlIGZvciBSUFIgd2luZG93cyB3aG9z ZSBERUZJTkUgbWF0Y2hlcy4KIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVAogICAgIGNvdW50 KCopIE9WRVIgKE9SREVSIEJZIGlkCkBAIC0yMTQsMTYgKzIxNCwxMCBAQCBPUkRFUiBCWSBpZDsK IC0tIEE1LiBVbnVzZWQgd2luZG93IHJlbW92YWwgcHJldmVudGlvbgogLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSBWZXJp ZnkgdGhhdCByZW1vdmVfdW51c2VkX3N1YnF1ZXJ5X291dHB1dHMoKSBkb2VzIG5vdCBkcm9wIGFu IFJQUgotLS0gd2luZG93IGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgb3V0ZXIgcXVlcnkgZG9lcyBu b3QgcmVmZXJlbmNlIGl0cwotLS0gcmVzdWx0LiAgVGhlIFJQUiBXaW5kb3dBZ2cgbm9kZSBpcyBy ZXNwb25zaWJsZSBmb3IgcGVyZm9ybWluZyBwYXR0ZXJuCi0tLSBtYXRjaGluZywgc28gcmVtb3Zp bmcgdGhlIHdpbmRvdyBmdW5jdGlvbiB3b3VsZCBzaWxlbnRseSBza2lwIHRoZQotLS0gcGF0dGVy biBtYXRjaCBldmVuIHRob3VnaCB0aGUgc3Vycm91bmRpbmcgcXVlcnkgc3RpbGwgZGVwZW5kcyBv bgotLS0gUlBSIHNlbWFudGljcy4KLQotLS0gVGhlIG91dGVyIHF1ZXJ5IGlnbm9yZXMgdGhlIHBl ci1yb3cgd2luZG93IHJlc3VsdCwgeWV0IHBhdHRlcm4KLS0tIG1hdGNoaW5nIG11c3Qgc3RpbGwg ZXhlY3V0ZS4gIFRoZSBwbGFuIG11c3Qgc3RpbGwgY29udGFpbiBhCi0tLSBXaW5kb3dBZ2cgbm9k ZSBiZWxvdyB0aGUgb3V0ZXIgQWdncmVnYXRlOyBpZiB0aGUgd2luZG93IHdlcmUKLS0tIHJlbW92 ZWQsIG9ubHkgQWdncmVnYXRlICsgU2VxIFNjYW4gd291bGQgYXBwZWFyLgorLS0gd2luZG93IGZ1 bmN0aW9uIHdoZW4gdGhlIG91dGVyIHF1ZXJ5IGRvZXMgbm90IHJlZmVyZW5jZSBpdHMgcmVzdWx0 LgorLS0gVGhlIFdpbmRvd0FnZyBub2RlIHBlcmZvcm1zIHRoZSBwYXR0ZXJuIG1hdGNoIGl0c2Vs Zjsgd2l0aG91dCBpdCwKKy0tIHRoZSBtYXRjaCB3b3VsZCBiZSBzaWxlbnRseSBza2lwcGVkLiAg VGhlIHBsYW4gbXVzdCBjb250YWluIGEKKy0tIFdpbmRvd0FnZyBub2RlIGJlbmVhdGggdGhlIG91 dGVyIEFnZ3JlZ2F0ZS4KIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBjb3VudCgqKSBGUk9N ICgKICAgICBTRUxFQ1QgY291bnQoKikgT1ZFUiB3IEZST00gcnByX2ludGVnCkBAIC0zOTksMTEg KzM5Myw4IEBAIFdIRVJFIGNudCA+IDA7CiAtLSBFWFBMQUlOIFZFUkJPU0UgaXMgdGhlcmVmb3Jl IGV4cGVjdGVkIHRvIHNob3cgYSBjbGVhbiB0YXJnZXRsaXN0IG9uCiAtLSB0aGUgb3V0ZXIgV2lu ZG93QWdnLCB3aXRoIG5vIERFRklORS1kZXJpdmVkIGV4cHJlc3Npb24gbGVha2luZyBpbi4KIC0t IE5vdGU6IGNvbHVtbnMgcmVmZXJlbmNlZCBieSBERUZJTkUgKGUuZy4sICJ2YWwiKSBtYXkgYXBw ZWFyIGFzCi0tLSByZXNqdW5rIGVudHJpZXMgaW4gdXBwZXIgV2luZG93QWdnIHRhcmdldGxpc3Rz IC0tIHRoYXQgaXMgYQotLS0gaGFybWxlc3MgYnlwcm9kdWN0IG9mIHRoZSBjb2x1bW4gZ3VhcmQn cyBicm9hZCBzY29wZSBhbmQgZG9lcyBub3QKLS0tIGFmZmVjdCBjbGllbnQgb3V0cHV0LiAgVGhl IGNsYWltIGhlcmUgaXMgbGltaXRlZCB0byB0aGUgZnVsbAotLS0gREVGSU5FIGJvb2xlYW4gZXhw cmVzc2lvbi4KLQorLS0gcmVzanVuayBlbnRyaWVzIGluIHVwcGVyIFdpbmRvd0FnZyB0YXJnZXRs aXN0cyAtLSBidXQgdGhhdCBpcyBhIGhhcm1sZXNzLgorLS0gVGhlIGNsYWltIGhlcmUgaXMgbGlt aXRlZCB0byB0aGUgZnVsbCBERUZJTkUgYm9vbGVhbiBleHByZXNzaW9uLgogRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKQogU0VMRUNUCiAgICAgY291bnQoKikgT1ZFUiB3X3JwciBBUyBycHJf Y250LApAQCAtNDE3LDEwICs0MDgsNiBAQCBXSU5ET1cKICAgICB3X25vcm1hbCBBUyAoT1JERVIg QlkgaWQKICAgICAgICAgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9M TE9XSU5HKTsKIAotLS0gRXhlY3V0aW5nIHRoZSBzYW1lIHF1ZXJ5IHNob3dzIHRoZSBjbGllbnQg cmVzdWx0IGlzIGxpbWl0ZWQgdG8KLS0tIHRoZSB0d28gcHJvamVjdGVkIGNvbHVtbnM7ICJpZCIg YW5kICJ2YWwiIHRoYXQgYXBwZWFyZWQgaW4gdGhlCi0tLSB1cHBlciBXaW5kb3dBZ2cgT3V0cHV0 IGxpbmUgYXJlIHJlc2p1bmstb25seSBhbmQgZG8gbm90IHJlYWNoCi0tLSB0aGUgY2xpZW50Lgog U0VMRUNUCiAgICAgY291bnQoKikgT1ZFUiB3X3JwciBBUyBycHJfY250LAogICAgIGNvdW50KCop IE9WRVIgd19ub3JtYWwgQVMgbm9ybWFsX2NudApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCBmOWViMjNlNTJjLi5iNTAwYWU1Njc3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAt NTMzLDYgKzUzMyw3IEBAIENvbnN0cmFpbnQKIENvbnN0cmFpbnRDYXRlZ29yeQogQ29uc3RyYWlu dEluZm8KIENvbnN0cmFpbnRzU2V0U3RtdAorQ29udGFpblJQUkNvbnRleHQKIENvbnRyb2xEYXRh CiBDb250cm9sRmlsZURhdGEKIENvbnZJbmZvCkBAIC02NjMsNyArNjY0LDEwIEBAIERlY29kaW5n V29ya2VyU2hhcmVkCiBEZWZFbGVtCiBEZWZFbGVtQWN0aW9uCiBEZWZhdWx0QUNMSW5mbworRGVm aW5lTWV0YWRhdGFDb250ZXh0CitEZWZpbmVQaGFzZQogRGVmaW5lU3RtdAorRGVmaW5lV2Fsa0N0 eAogRGVmbkR1bXBlclB0cgogRGVsZXRlU3RtdAogRGVwZW5kZW5jaWVzUGFyc2VTdGF0ZQpAQCAt NzYyLDYgKzc2Niw3IEBAIEVycm9yRGF0YQogRXJyb3JTYXZlQ29udGV4dAogRXN0aW1hdGVEU01G b3JlaWduU2Nhbl9mdW5jdGlvbgogRXN0aW1hdGlvbkluZm8KK0V2YWxEZWZpbmVPZmZzZXRzQ29u dGV4dAogRXZlbnRUcmlnZ2VyQ2FjaGVFbnRyeQogRXZlbnRUcmlnZ2VyQ2FjaGVJdGVtCiBFdmVu dFRyaWdnZXJDYWNoZVN0YXRlVHlwZQpAQCAtMTgzMiw2ICsxODM3LDggQEAgTmFtZWRMV0xvY2tU cmFuY2hlUmVxdWVzdAogTmFtZWRUdXBsZXN0b3JlU2NhbgogTmFtZWRUdXBsZXN0b3JlU2NhblN0 YXRlCiBOYW1lc3BhY2VJbmZvCitOYXZUcmF2ZXJzYWwKK05hdlZpc2l0Rm4KIE5lc3RMb29wCiBO ZXN0TG9vcFBhcmFtCiBOZXN0TG9vcFN0YXRlCkBAIC0xODQxLDYgKzE4NDgsNyBAQCBOZXdDb25z dHJhaW50CiBOZXh0U2FtcGxlQmxvY2tfZnVuY3Rpb24KIE5leHRTYW1wbGVUdXBsZV9mdW5jdGlv bgogTmV4dFZhbHVlRXhwcgorTkZBTGVuZ3RoU3RhdHMKIE5vZGUKIE5vZGVJbnN0cnVtZW50YXRp b24KIE5vZGVUYWcKQEAgLTI1MjQsNiArMjUzMiwyMiBAQCBSSV9Db25zdHJhaW50SW5mbwogUklf RmFzdFBhdGhFbnRyeQogUklfUXVlcnlIYXNoRW50cnkKIFJJX1F1ZXJ5S2V5CitSUENvbW1vblN5 bnRheAorUlBSRGVwdGgKK1JQUkVsZW1GbGFncworUlBSRWxlbUlkeAorUlBSTkZBQ29udGV4dAor UlBSTkZBU3RhdGUKK1JQUk5hdkV4cHIKK1JQUk5hdktpbmQKK1JQUk5hdk9mZnNldEtpbmQKK1JQ UlBhdHRlcm4KK1JQUlBhdHRlcm5FbGVtZW50CitSUFJQYXR0ZXJuTm9kZQorUlBSUGF0dGVybk5v ZGVUeXBlCitSUFJRdWFudGl0eQorUlBSVmFySWQKK1JQU2tpcFRvCiBSVEVLaW5kCiBSVEVQZXJt aXNzaW9uSW5mbwogUldDb25mbGljdAotLSAKMi4zNC4xCgo= --00000000000040ac19065444fe02--