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 1w5oML-003eXI-2L for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Mar 2026 17:19:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5oMK-004AQD-0p for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Mar 2026 17:19:04 +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 1w5oMJ-004AQ4-2l for pgsql-hackers@lists.postgresql.org; Thu, 26 Mar 2026 17:19:04 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5oMG-00000001K5T-2Py4 for pgsql-hackers@postgresql.org; Thu, 26 Mar 2026 17:19:04 +0000 Received: by mail-ed1-x530.google.com with SMTP id 4fb4d7f45d1cf-65c4152313fso1594870a12.1 for ; Thu, 26 Mar 2026 10:19:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774545540; cv=none; d=google.com; s=arc-20240605; b=JdrVFLl5dPqTHWiE9/vRMTgqODPbCvhSkMx7v2AMzPqkfqA774Dk3uiCQoMK1DKLWQ OGhcpjekE2s3LQ7GxjON3Z+R14NYrNunfMOD4sfyOg00taqrgZ/0JysTUUKwrkUrbyk5 6KGsHsyJSdwcWRa9lTQ8h6D5LXtSoq8SdFbQCGxJUKY1HNeu7DRh4vgAeNxEMjms6aWy OPWWHjJB5VenBsIrFhU7R0zxwX8jwX5zIUTwnfZAMXvwd34p6dGBN2qY2P0fBtoDsxCJ rTxoJcX/4KM0cbUbKCcokT8t0yN0RZf5ANjjKC+QUkB3teckCkQ+iABDxP9cWQ3Th+Oa w0Eg== 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=s6GiM4dCW5DISdZywSeRJ+mVe3htFh2TYi3p9925/KU=; fh=6Xm8EKZxgRBihmihPyAmvU6IVZUFbvWtkjIZLhI0bME=; b=ITgeVgs1WZlu11ZK98LkFCygGXPzd9DB0KX2cjiVMOTUMv34shE8hIeLv0kGNxf+zD OVBhhREeh/BiAPSMpdRsr2AX1sFOIN87TSHrSgVEnlK6XvMzOawkmpRwmUyTAIhPt1rx e/34eJWwLoJuc6TYE8O//EzSuiSFBwuEvYDRgrvokDy/kJ/SUgeYFRAKb6Cokzc9yfMH OyvI0GnjPN4pTDDLUOyl6z4jjDJmigBv/Ir3cnz0xe1sroDbmZ0eZH6/YtpbubFFt90f MPrd0FKUBbHrlXNa89otGa8p9hfmTetHuIiv2aS6EF33vJ0pEAoNdRzQr/tSCHJ6UdOl KY7w==; 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=1774545540; x=1775150340; 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=s6GiM4dCW5DISdZywSeRJ+mVe3htFh2TYi3p9925/KU=; b=SRIkxgOIOd+aq1C0mv1+i2WP/kU1JfmE2Lynhu5Yq6Gh5lBpd2pUL7aoiAstceo4Ch rdIpb8yaq/C72mlZsLUXZSEvrF4B4KXDCaK413J1vvql575OPFMQPe5EDhNjNJhTV2u7 bdFK67oOgIeSohcNI/6duDMMmc1Kk00W2bP+vO8b6rtLnen9y9x/DKcZy0LoQXSrCx1g xbBTbQapdcKpK6tVp4wZbFaylPgrLdXcQFCGmiTg3IlZ6FMBTrCCJC+7lJDdV0jDBsBb Aib5Fir/kK4X7fXwUL/T07i667w7WfRBbDrckP9B4QkvpEd4U3LBxoGp+/z51wGfhmYj w/hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774545540; x=1775150340; 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=s6GiM4dCW5DISdZywSeRJ+mVe3htFh2TYi3p9925/KU=; b=sq2qT7nnh/JS1CaMElIed/UVgNBTU8IRIb3894YIL6Exvka3WPnWafR0D7bWWByRRa c929UzxSeIRMnR6YmEKEPt0AYHw8Wz8c4v4eFEhNKPswsgwnHDuQz2/jjLHIJtWW6lHd 8MTSoaC0StIUsaEQmMSqyPwkZve/EV2HRQQj1MaUFQ8vafkYH0T4tVXl05sXll39/KEv GDy6vDSAvXYpK0hmRSsPb9fg5MJHImCgrodpdbw/odVVShbbUmMKXzNX/69KvONoY5Yj mk9O+bD34geN0LkBYR2zHQ9ATmHY5Qhbjjq27L48DK/VzjOdyRKXVRDCHmK5Gmd+OfPd 1XjQ== X-Forwarded-Encrypted: i=1; AJvYcCWRuC8TfBfJHqHsUhSOBqVH+QTwweloC8H3lnylUqD7Vtr7I5aVEdQ9z+PW+3fZHtGzqKd3Fq8UEpVRGyOU@postgresql.org X-Gm-Message-State: AOJu0YxTw2mAhhd0utJGsEyBiDdd9h1jk6xIjjVUDSGP+ULZu+IZ25fZ Uta1tAI5BAfbyOveV0+VJe8Fiud+ilhzcYMBhLMhmWcNCu7DMXjeyVW3lzi/932UHM8djaczkFe bGyske7zrcuCBZlfZX5hKiwlM6kf/+vGGO7haHrvLhQ== X-Gm-Gg: ATEYQzxsf3o8+uQN9Buw1T71k6JkwzB/xD9O0ocsPkyqkracEeLUTlcBUIFJ9PgHg7z pXYT2fYvur+DLbl2XYl4LM+i0+a1/Z8oP6ysB6kqE562ScvQo237ASpJ3jMlq6wyQODZlPOV8mV tKFDQfEldqoSc7L6x+gWslSUnIPsqaPeQo5RYs0bVWfVe/qSGEFNFncbLiQAe0b1/ndQZzzVH8G Mh4sgZDiHrsirDpQV/YXPucr1W3Ac2YGtw4aVyN7WChZAxrS1u7VccRJq4RXrvZNNGVSW37TekQ QwDjtg== X-Received: by 2002:a05:6402:4389:b0:663:4315:7271 with SMTP id 4fb4d7f45d1cf-66a826b1645mr4955682a12.23.1774545539484; Thu, 26 Mar 2026 10:18:59 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Sami Imseih Date: Thu, 26 Mar 2026 12:18:44 -0500 X-Gm-Features: AQROBzBoLXSIXsmWCLEz-YvC8AzGCMWB-zo6u-xi0RJ4cS9oUuO0EY10NJh8YAM Message-ID: Subject: Re: Refactor query normalization into core query jumbling To: Lukas Fittl Cc: Michael Paquier , zengman , pgsql-hackers , Julien Rouhaud Content-Type: multipart/mixed; boundary="000000000000851758064df09490" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000851758064df09490 Content-Type: text/plain; charset="UTF-8" > 1) I think "SetConstantLengths" should be renamed to > "GetConstantLengths", or "CalculateConstantLengths" in 0002, since > we're no longer modifying JumbleState Makes sense. I renamed it to ComputeConstantLengths; as this will reflect that it's more than a getter function, and it's doing actual work. Compute also seems more consistent with other function names we have out there. > 2) I wonder if we should export this function in 0002 - that would > specifically help pg_tracing, which also wants to extract inline > parameter values in addition to replacing them with a $n parameter > reference marker - I could also see that being useful for any other > extension that's interested in pulling out parameter values > I've also done some testing with two previously mentioned extensions, > pg_stat_monitor [0] and pg_tracing [1]. Both look like they can be > adapted to the new method with their regression tests succeeding. That did cross my mind. I agree with this. Both of those changes belong in 0002. See the attached v7. -- Sami Imseih Amazon Web Services (AWS) --000000000000851758064df09490 Content-Type: application/octet-stream; name="v7-0001-pg_stat_statements-Move-query-normalization-to-co.patch" Content-Disposition: attachment; filename="v7-0001-pg_stat_statements-Move-query-normalization-to-co.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn7qil3o1 RnJvbSBlNWQ0NDFjNGU0OTMyYjc0NTMyOTNjNjg5YzI4NjdjMWQ5ZDFkNTNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogVGh1LCAxOCBEZWMgMjAyNSAxODo1OTozMSArMDAwMApTdWJqZWN0OiBb UEFUQ0ggdjcgMS8yXSBwZ19zdGF0X3N0YXRlbWVudHM6IE1vdmUgcXVlcnkgbm9ybWFsaXphdGlv biB0byBjb3JlCgpwZ19zdGF0X3N0YXRlbWVudHMgd2FzIG1vZGlmeWluZyBjb3JlIGdlbmVyYXRl ZCBKdW1ibGVTdGF0ZSBpbnN0YW5jZXMKYnkgY2FsbGluZyBmaWxsX2luX2NvbnN0YW50X2xlbmd0 aHMoKSB2aWEgZ2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeSgpCnRvIHBvcHVsYXRlIGNvbnN0YW50 IGxlbmd0aHMuIFRoaXMgY3JlYXRlcyBwcm9ibGVtcyBzaW5jZSBleHRlbnNpb25zCnNob3VsZCBu b3QgbW9kaWZ5IHNoYXJlZCBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IG1heSBiZSB1c2VkIGJ5 Cm90aGVyIGV4dGVuc2lvbnMsIGFuZCB0aGlzIGNvdWxkIGJlIGNvbnNpZGVyZWQgYSBsYXllcmlu ZyB2aW9sYXRpb24uCgpNb3ZlIHF1ZXJ5IG5vcm1hbGl6YXRpb24gZnVuY3Rpb25zIHRvIGNvcmUg YXMgYSBnbG9iYWwgZnVuY3Rpb24gdG8KZml4IHRoaXMuIEV4dGVuc2lvbnMgbm93IGNhbGwgR2Vu ZXJhdGVOb3JtYWxpemVkUXVlcnkoKSBpbnN0ZWFkIG9mCmRpcmVjdGx5IG1vZGlmeWluZyBKdW1i bGVTdGF0ZS4KClRoaXMgY2hhbmdlIGFsc28gYWRkcmVzc2VzIGNvZGUgZHVwbGljYXRpb24sIGFz IHNldmVyYWwgZXh0ZW5zaW9ucwpoYXZlIGJlZW4gY29weWluZyBnZW5lcmF0ZV9ub3JtYWxpemVk X3F1ZXJ5KCkgdG8gaW1wbGVtZW50IHRoZWlyIG93bgpub3JtYWxpemF0aW9uLiBUaGUgbmV3IGNv cmUgQVBJIHByb3ZpZGVzIGEgc2luZ2xlLCBjb25zaXN0ZW50CmltcGxlbWVudGF0aW9uIGZvciBh bGwgZXh0ZW5zaW9ucyB0byB1c2UuCgpGdW5jdGlvbnMgYXJlIHJlbmFtZWQgdG8gbWF0Y2ggY29y ZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbW1lbnRzCmFyZSB1cGRhdGVkIGZvciBjbGFyaXR5 LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUE1UlowdFpwNXFVMGlrWkVFcUpu eHZkU05HaDFEV3Y4MHNiLWs0UUFVbWlNb09wX1FAbWFpbC5nbWFpbC5jb20KLS0tCiAuLi4vcGdf c3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCAyNzMgKy0tLS0tLS0tLS0t LS0tLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgICAgICAgICAgfCAy NTMgKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaCAgICAg ICAgICAgICAgIHwgICAyICsKIDMgZmlsZXMgY2hhbmdlZCwgMjY1IGluc2VydGlvbnMoKyksIDI2 MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9w Z19zdGF0X3N0YXRlbWVudHMuYyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRf c3RhdGVtZW50cy5jCmluZGV4IDZjYjE0ODI0ZWMzLi5jOTMzODQ0MmQ5NiAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTUwLDcgKzUw LDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKLSNpbmNsdWRlICJj b21tb24vaW50LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUg ImZ1bmNhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCkBAIC01OSw3ICs1OCw2IEBACiAjaW5j bHVkZSAibm9kZXMvcXVlcnlqdW1ibGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5o IgogI2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCi0jaW5jbHVkZSAicGFyc2VyL3NjYW5uZXIu aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKQEAgLTM3OCwxMSArMzc2LDYgQEAgc3RhdGljIGNoYXIgKnF0ZXh0 X2ZldGNoKFNpemUgcXVlcnlfb2Zmc2V0LCBpbnQgcXVlcnlfbGVuLAogc3RhdGljIGJvb2wgbmVl ZF9nY19xdGV4dHModm9pZCk7CiBzdGF0aWMgdm9pZCBnY19xdGV4dHModm9pZCk7CiBzdGF0aWMg VGltZXN0YW1wVHogZW50cnlfcmVzZXQoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIGludDY0IHF1ZXJ5 aWQsIGJvb2wgbWlubWF4X29ubHkpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX25vcm1hbGl6ZWRf cXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCi0JCQkJCQkJCQkg ICBpbnQgcXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9wKTsKLXN0YXRpYyB2b2lkIGZpbGxfaW5f Y29uc3RhbnRfbGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwK LQkJCQkJCQkJCSBpbnQgcXVlcnlfbG9jKTsKLXN0YXRpYyBpbnQJY29tcF9sb2NhdGlvbihjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKIAogCiAvKgpAQCAtMTM2MCw5ICsxMzUzLDE2IEBA IHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCWlmIChqc3Rh dGUpCiAJCXsKIAkJCUxXTG9ja1JlbGVhc2UocGdzcy0+bG9jayk7Ci0JCQlub3JtX3F1ZXJ5ID0g Z2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeShqc3RhdGUsIHF1ZXJ5LAotCQkJCQkJCQkJCQkJICAg cXVlcnlfbG9jYXRpb24sCi0JCQkJCQkJCQkJCQkgICAmcXVlcnlfbGVuKTsKKworCQkJLyoKKwkJ CSAqIGdlbmVyYXRlIHRoZSBub3JtYWxpemVkIHF1ZXJ5LiBOb3RlIHRoYXQgdGhlIG5vcm1hbGl6 ZWQKKwkJCSAqIHJlcHJlc2VudGF0aW9uIG1heSB3ZWxsIHZhcnkgZGVwZW5kaW5nIG9uIGp1c3Qg d2hpY2gKKwkJCSAqICJlcXVpdmFsZW50IiBxdWVyeSBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgaGFz aHRhYmxlIGVudHJ5LiBXZQorCQkJICogYXNzdW1lIHRoaXMgaXMgT0suCisJCQkgKi8KKwkJCW5v cm1fcXVlcnkgPSBHZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShqc3RhdGUsIHF1ZXJ5LAorCQkJCQkJ CQkJCQkJIHF1ZXJ5X2xvY2F0aW9uLAorCQkJCQkJCQkJCQkJICZxdWVyeV9sZW4pOwogCQkJTFdM b2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19TSEFSRUQpOwogCQl9CiAKQEAgLTI4MjQsMjU2ICsy ODI0LDMgQEAgcmVsZWFzZV9sb2NrOgogCiAJcmV0dXJuIHN0YXRzX3Jlc2V0OwogfQotCi0vKgot ICogR2VuZXJhdGUgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHF1ZXJ5IHN0cmluZyB0aGF0 IHdpbGwgYmUgdXNlZCB0bwotICogcmVwcmVzZW50IGFsbCBzaW1pbGFyIHF1ZXJpZXMuCi0gKgot ICogTm90ZSB0aGF0IHRoZSBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uIG1heSB3ZWxsIHZhcnkg ZGVwZW5kaW5nIG9uCi0gKiBqdXN0IHdoaWNoICJlcXVpdmFsZW50IiBxdWVyeSBpcyB1c2VkIHRv IGNyZWF0ZSB0aGUgaGFzaHRhYmxlIGVudHJ5LgotICogV2UgYXNzdW1lIHRoaXMgaXMgT0suCi0g KgotICogSWYgcXVlcnlfbG9jID4gMCwgdGhlbiAicXVlcnkiIGhhcyBiZWVuIGFkdmFuY2VkIGJ5 IHRoYXQgbXVjaCBjb21wYXJlZCB0bwotICogdGhlIG9yaWdpbmFsIHN0cmluZyBzdGFydCwgc28g d2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlIHByb3ZpZGVkIGxvY2F0aW9ucwotICogdG8gY29tcGVu c2F0ZS4gIChUaGlzIGxldHMgdXMgYXZvaWQgcmUtc2Nhbm5pbmcgc3RhdGVtZW50cyBiZWZvcmUg dGhlIG9uZQotICogb2YgaW50ZXJlc3QsIHNvIGl0J3Mgd29ydGggZG9pbmcuKQotICoKLSAqICpx dWVyeV9sZW5fcCBjb250YWlucyB0aGUgaW5wdXQgc3RyaW5nIGxlbmd0aCwgYW5kIGlzIHVwZGF0 ZWQgd2l0aAotICogdGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoIG9uIGV4aXQuICBUaGUgcmVzdWx0 aW5nIHN0cmluZyBtaWdodCBiZSBsb25nZXIKLSAqIG9yIHNob3J0ZXIgZGVwZW5kaW5nIG9uIHdo YXQgaGFwcGVucyB3aXRoIHJlcGxhY2VtZW50IG9mIGNvbnN0YW50cy4KLSAqCi0gKiBSZXR1cm5z IGEgcGFsbG9jJ2Qgc3RyaW5nLgotICovCi1zdGF0aWMgY2hhciAqCi1nZW5lcmF0ZV9ub3JtYWxp emVkX3F1ZXJ5KEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAotCQkJCQkJ ICBpbnQgcXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9wKQotewotCWNoYXIJICAgKm5vcm1fcXVl cnk7Ci0JaW50CQkJcXVlcnlfbGVuID0gKnF1ZXJ5X2xlbl9wOwotCWludAkJCW5vcm1fcXVlcnlf YnVmbGVuLAkvKiBTcGFjZSBhbGxvd2VkIGZvciBub3JtX3F1ZXJ5ICovCi0JCQkJbGVuX3RvX3dy dCwJCS8qIExlbmd0aCAoaW4gYnl0ZXMpIHRvIHdyaXRlICovCi0JCQkJcXVlcl9sb2MgPSAwLAkv KiBTb3VyY2UgcXVlcnkgYnl0ZSBsb2NhdGlvbiAqLwotCQkJCW5fcXVlcl9sb2MgPSAwLCAvKiBO b3JtYWxpemVkIHF1ZXJ5IGJ5dGUgbG9jYXRpb24gKi8KLQkJCQlsYXN0X29mZiA9IDAsCS8qIE9m ZnNldCBmcm9tIHN0YXJ0IGZvciBwcmV2aW91cyB0b2sgKi8KLQkJCQlsYXN0X3Rva19sZW4gPSAw OwkvKiBMZW5ndGggKGluIGJ5dGVzKSBvZiB0aGF0IHRvayAqLwotCWludAkJCW51bV9jb25zdGFu dHNfcmVwbGFjZWQgPSAwOwotCi0JLyoKLQkgKiBHZXQgY29uc3RhbnRzJyBsZW5ndGhzIChjb3Jl IHN5c3RlbSBvbmx5IGdpdmVzIHVzIGxvY2F0aW9ucykuICBOb3RlCi0JICogdGhpcyBhbHNvIGVu c3VyZXMgdGhlIGl0ZW1zIGFyZSBzb3J0ZWQgYnkgbG9jYXRpb24uCi0JICovCi0JZmlsbF9pbl9j b25zdGFudF9sZW5ndGhzKGpzdGF0ZSwgcXVlcnksIHF1ZXJ5X2xvYyk7Ci0KLQkvKgotCSAqIEFs bG93IGZvciAkbiBzeW1ib2xzIHRvIGJlIGxvbmdlciB0aGFuIHRoZSBjb25zdGFudHMgdGhleSBy ZXBsYWNlLgotCSAqIENvbnN0YW50cyBtdXN0IHRha2UgYXQgbGVhc3Qgb25lIGJ5dGUgaW4gdGV4 dCBmb3JtLCB3aGlsZSBhICRuIHN5bWJvbAotCSAqIGNlcnRhaW5seSBpc24ndCBtb3JlIHRoYW4g MTEgYnl0ZXMsIGV2ZW4gaWYgbiByZWFjaGVzIElOVF9NQVguICBXZQotCSAqIGNvdWxkIHJlZmlu ZSB0aGF0IGxpbWl0IGJhc2VkIG9uIHRoZSBtYXggdmFsdWUgb2YgbiBmb3IgdGhlIGN1cnJlbnQK LQkgKiBxdWVyeSwgYnV0IGl0IGhhcmRseSBzZWVtcyB3b3J0aCBhbnkgZXh0cmEgZWZmb3J0IHRv IGRvIHNvLgotCSAqLwotCW5vcm1fcXVlcnlfYnVmbGVuID0gcXVlcnlfbGVuICsganN0YXRlLT5j bG9jYXRpb25zX2NvdW50ICogMTA7Ci0KLQkvKiBBbGxvY2F0ZSByZXN1bHQgYnVmZmVyICovCi0J bm9ybV9xdWVyeSA9IHBhbGxvYyhub3JtX3F1ZXJ5X2J1ZmxlbiArIDEpOwotCi0JZm9yIChpbnQg aSA9IDA7IGkgPCBqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQ7IGkrKykKLQl7Ci0JCWludAkJCW9m ZiwJCS8qIE9mZnNldCBmcm9tIHN0YXJ0IGZvciBjdXIgdG9rICovCi0JCQkJCXRva19sZW47CS8q IExlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoYXQgdG9rICovCi0KLQkJLyoKLQkJICogSWYgd2UgaGF2 ZSBhbiBleHRlcm5hbCBwYXJhbSBhdCB0aGlzIGxvY2F0aW9uLCBidXQgbm8gbGlzdHMgYXJlCi0J CSAqIGJlaW5nIHNxdWFzaGVkIGFjcm9zcyB0aGUgcXVlcnksIHRoZW4gd2Ugc2tpcCBoZXJlOyB0 aGlzIHdpbGwgbWFrZQotCQkgKiB1cyBwcmludCB0aGUgY2hhcmFjdGVycyBmb3VuZCBpbiB0aGUg b3JpZ2luYWwgcXVlcnkgdGhhdCByZXByZXNlbnQKLQkJICogdGhlIHBhcmFtZXRlciBpbiB0aGUg bmV4dCBpdGVyYXRpb24gKG9yIGFmdGVyIHRoZSBsb29wIGlzIGRvbmUpLAotCQkgKiB3aGljaCBp cyBhIGJpdCBvZGQgYnV0IHNlZW1zIHRvIHdvcmsgb2theSBpbiBtb3N0IGNhc2VzLgotCQkgKi8K LQkJaWYgKGpzdGF0ZS0+Y2xvY2F0aW9uc1tpXS5leHRlcm5fcGFyYW0gJiYgIWpzdGF0ZS0+aGFz X3NxdWFzaGVkX2xpc3RzKQotCQkJY29udGludWU7Ci0KLQkJb2ZmID0ganN0YXRlLT5jbG9jYXRp b25zW2ldLmxvY2F0aW9uOwotCi0JCS8qIEFkanVzdCByZWNvcmRlZCBsb2NhdGlvbiBpZiB3ZSdy ZSBkZWFsaW5nIHdpdGggcGFydGlhbCBzdHJpbmcgKi8KLQkJb2ZmIC09IHF1ZXJ5X2xvYzsKLQot CQl0b2tfbGVuID0ganN0YXRlLT5jbG9jYXRpb25zW2ldLmxlbmd0aDsKLQotCQlpZiAodG9rX2xl biA8IDApCi0JCQljb250aW51ZTsJCQkvKiBpZ25vcmUgYW55IGR1cGxpY2F0ZXMgKi8KLQotCQkv KiBDb3B5IG5leHQgY2h1bmsgKHdoYXQgcHJlY2VkZXMgdGhlIG5leHQgY29uc3RhbnQpICovCi0J CWxlbl90b193cnQgPSBvZmYgLSBsYXN0X29mZjsKLQkJbGVuX3RvX3dydCAtPSBsYXN0X3Rva19s ZW47Ci0JCUFzc2VydChsZW5fdG9fd3J0ID49IDApOwotCQltZW1jcHkobm9ybV9xdWVyeSArIG5f cXVlcl9sb2MsIHF1ZXJ5ICsgcXVlcl9sb2MsIGxlbl90b193cnQpOwotCQluX3F1ZXJfbG9jICs9 IGxlbl90b193cnQ7Ci0KLQkJLyoKLQkJICogQW5kIGluc2VydCBhIHBhcmFtIHN5bWJvbCBpbiBw bGFjZSBvZiB0aGUgY29uc3RhbnQgdG9rZW47IGFuZCwgaWYKLQkJICogd2UgaGF2ZSBhIHNxdWFz aGFibGUgbGlzdCwgaW5zZXJ0IGEgcGxhY2Vob2xkZXIgY29tbWVudCBzdGFydGluZwotCQkgKiBm cm9tIHRoZSBsaXN0J3Mgc2Vjb25kIHZhbHVlLgotCQkgKi8KLQkJbl9xdWVyX2xvYyArPSBzcHJp bnRmKG5vcm1fcXVlcnkgKyBuX3F1ZXJfbG9jLCAiJCVkJXMiLAotCQkJCQkJCSAgbnVtX2NvbnN0 YW50c19yZXBsYWNlZCArIDEgKyBqc3RhdGUtPmhpZ2hlc3RfZXh0ZXJuX3BhcmFtX2lkLAotCQkJ CQkJCSAganN0YXRlLT5jbG9jYXRpb25zW2ldLnNxdWFzaGVkID8gIiAvKiwgLi4uICovIiA6ICIi KTsKLQkJbnVtX2NvbnN0YW50c19yZXBsYWNlZCsrOwotCi0JCS8qIG1vdmUgZm9yd2FyZCAqLwot CQlxdWVyX2xvYyA9IG9mZiArIHRva19sZW47Ci0JCWxhc3Rfb2ZmID0gb2ZmOwotCQlsYXN0X3Rv a19sZW4gPSB0b2tfbGVuOwotCX0KLQotCS8qCi0JICogV2UndmUgY29waWVkIHVwIHVudGlsIHRo ZSBsYXN0IGlnbm9yYWJsZSBjb25zdGFudC4gIENvcHkgb3ZlciB0aGUKLQkgKiByZW1haW5pbmcg Ynl0ZXMgb2YgdGhlIG9yaWdpbmFsIHF1ZXJ5IHN0cmluZy4KLQkgKi8KLQlsZW5fdG9fd3J0ID0g cXVlcnlfbGVuIC0gcXVlcl9sb2M7Ci0KLQlBc3NlcnQobGVuX3RvX3dydCA+PSAwKTsKLQltZW1j cHkobm9ybV9xdWVyeSArIG5fcXVlcl9sb2MsIHF1ZXJ5ICsgcXVlcl9sb2MsIGxlbl90b193cnQp OwotCW5fcXVlcl9sb2MgKz0gbGVuX3RvX3dydDsKLQotCUFzc2VydChuX3F1ZXJfbG9jIDw9IG5v cm1fcXVlcnlfYnVmbGVuKTsKLQlub3JtX3F1ZXJ5W25fcXVlcl9sb2NdID0gJ1wwJzsKLQotCSpx dWVyeV9sZW5fcCA9IG5fcXVlcl9sb2M7Ci0JcmV0dXJuIG5vcm1fcXVlcnk7Ci19Ci0KLS8qCi0g KiBHaXZlbiBhIHZhbGlkIFNRTCBzdHJpbmcgYW5kIGFuIGFycmF5IG9mIGNvbnN0YW50LWxvY2F0 aW9uIHJlY29yZHMsCi0gKiBmaWxsIGluIHRoZSB0ZXh0dWFsIGxlbmd0aHMgb2YgdGhvc2UgY29u c3RhbnRzLgotICoKLSAqIFRoZSBjb25zdGFudHMgbWF5IHVzZSBhbnkgYWxsb3dlZCBjb25zdGFu dCBzeW50YXgsIHN1Y2ggYXMgZmxvYXQgbGl0ZXJhbHMsCi0gKiBiaXQtc3RyaW5ncywgc2luZ2xl LXF1b3RlZCBzdHJpbmdzIGFuZCBkb2xsYXItcXVvdGVkIHN0cmluZ3MuICBUaGlzIGlzCi0gKiBh Y2NvbXBsaXNoZWQgYnkgdXNpbmcgdGhlIHB1YmxpYyBBUEkgZm9yIHRoZSBjb3JlIHNjYW5uZXIu Ci0gKgotICogSXQgaXMgdGhlIGNhbGxlcidzIGpvYiB0byBlbnN1cmUgdGhhdCB0aGUgc3RyaW5n IGlzIGEgdmFsaWQgU1FMIHN0YXRlbWVudAotICogd2l0aCBjb25zdGFudHMgYXQgdGhlIGluZGlj YXRlZCBsb2NhdGlvbnMuICBTaW5jZSBpbiBwcmFjdGljZSB0aGUgc3RyaW5nCi0gKiBoYXMgYWxy ZWFkeSBiZWVuIHBhcnNlZCwgYW5kIHRoZSBsb2NhdGlvbnMgdGhhdCB0aGUgY2FsbGVyIHByb3Zp ZGVzIHdpbGwKLSAqIGhhdmUgb3JpZ2luYXRlZCBmcm9tIHdpdGhpbiB0aGUgYXV0aG9yaXRhdGl2 ZSBwYXJzZXIsIHRoaXMgc2hvdWxkIG5vdCBiZQotICogYSBwcm9ibGVtLgotICoKLSAqIE11bHRp cGxlIGNvbnN0YW50cyBjYW4gaGF2ZSB0aGUgc2FtZSBsb2NhdGlvbi4gIFdlIHJlc2V0IGxlbmd0 aHMgb2YgdGhvc2UKLSAqIHBhc3QgdGhlIGZpcnN0IHRvIC0xIHNvIHRoYXQgdGhleSBjYW4gbGF0 ZXIgYmUgaWdub3JlZC4KLSAqCi0gKiBJZiBxdWVyeV9sb2MgPiAwLCB0aGVuICJxdWVyeSIgaGFz IGJlZW4gYWR2YW5jZWQgYnkgdGhhdCBtdWNoIGNvbXBhcmVkIHRvCi0gKiB0aGUgb3JpZ2luYWwg c3RyaW5nIHN0YXJ0LCBzbyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgcHJvdmlkZWQgbG9jYXRp b25zCi0gKiB0byBjb21wZW5zYXRlLiAgKFRoaXMgbGV0cyB1cyBhdm9pZCByZS1zY2FubmluZyBz dGF0ZW1lbnRzIGJlZm9yZSB0aGUgb25lCi0gKiBvZiBpbnRlcmVzdCwgc28gaXQncyB3b3J0aCBk b2luZy4pCi0gKgotICogTi5CLiBUaGVyZSBpcyBhbiBhc3N1bXB0aW9uIHRoYXQgYSAnLScgY2hh cmFjdGVyIGF0IGEgQ29uc3QgbG9jYXRpb24gYmVnaW5zCi0gKiBhIG5lZ2F0aXZlIG51bWVyaWMg Y29uc3RhbnQuICBUaGlzIHByZWNsdWRlcyB0aGVyZSBldmVyIGJlaW5nIGFub3RoZXIKLSAqIHJl YXNvbiBmb3IgYSBjb25zdGFudCB0byBzdGFydCB3aXRoIGEgJy0nLgotICovCi1zdGF0aWMgdm9p ZAotZmlsbF9pbl9jb25zdGFudF9sZW5ndGhzKEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNo YXIgKnF1ZXJ5LAotCQkJCQkJIGludCBxdWVyeV9sb2MpCi17Ci0JTG9jYXRpb25MZW4gKmxvY3M7 Ci0JY29yZV95eXNjYW5fdCB5eXNjYW5uZXI7Ci0JY29yZV95eV9leHRyYV90eXBlIHl5ZXh0cmE7 Ci0JY29yZV9ZWVNUWVBFIHl5bHZhbDsKLQlZWUxUWVBFCQl5eWxsb2M7Ci0KLQkvKgotCSAqIFNv cnQgdGhlIHJlY29yZHMgYnkgbG9jYXRpb24gc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyB0aGVtIGlu IG9yZGVyIHdoaWxlCi0JICogc2Nhbm5pbmcgdGhlIHF1ZXJ5IHRleHQuCi0JICovCi0JaWYgKGpz dGF0ZS0+Y2xvY2F0aW9uc19jb3VudCA+IDEpCi0JCXFzb3J0KGpzdGF0ZS0+Y2xvY2F0aW9ucywg anN0YXRlLT5jbG9jYXRpb25zX2NvdW50LAotCQkJICBzaXplb2YoTG9jYXRpb25MZW4pLCBjb21w X2xvY2F0aW9uKTsKLQlsb2NzID0ganN0YXRlLT5jbG9jYXRpb25zOwotCi0JLyogaW5pdGlhbGl6 ZSB0aGUgZmxleCBzY2FubmVyIC0tLSBzaG91bGQgbWF0Y2ggcmF3X3BhcnNlcigpICovCi0JeXlz Y2FubmVyID0gc2Nhbm5lcl9pbml0KHF1ZXJ5LAotCQkJCQkJCSAmeXlleHRyYSwKLQkJCQkJCQkg JlNjYW5LZXl3b3JkcywKLQkJCQkJCQkgU2NhbktleXdvcmRUb2tlbnMpOwotCi0JLyogU2VhcmNo IGZvciBlYWNoIGNvbnN0YW50LCBpbiBzZXF1ZW5jZSAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwg anN0YXRlLT5jbG9jYXRpb25zX2NvdW50OyBpKyspCi0JewotCQlpbnQJCQlsb2M7Ci0JCWludAkJ CXRvazsKLQotCQkvKiBJZ25vcmUgY29uc3RhbnRzIGFmdGVyIHRoZSBmaXJzdCBvbmUgaW4gdGhl IHNhbWUgbG9jYXRpb24gKi8KLQkJaWYgKGkgPiAwICYmIGxvY3NbaV0ubG9jYXRpb24gPT0gbG9j c1tpIC0gMV0ubG9jYXRpb24pCi0JCXsKLQkJCWxvY3NbaV0ubGVuZ3RoID0gLTE7Ci0JCQljb250 aW51ZTsKLQkJfQotCi0JCWlmIChsb2NzW2ldLnNxdWFzaGVkKQotCQkJY29udGludWU7CQkJLyog c3F1YXNoYWJsZSBsaXN0LCBpZ25vcmUgKi8KLQotCQkvKiBBZGp1c3QgcmVjb3JkZWQgbG9jYXRp b24gaWYgd2UncmUgZGVhbGluZyB3aXRoIHBhcnRpYWwgc3RyaW5nICovCi0JCWxvYyA9IGxvY3Nb aV0ubG9jYXRpb24gLSBxdWVyeV9sb2M7Ci0JCUFzc2VydChsb2MgPj0gMCk7Ci0KLQkJLyoKLQkJ ICogV2UgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uIGZvciBhIGNvbnN0YW50IHRoYXQncyBub3QgYSBk dXBlLiBMZXgKLQkJICogdG9rZW5zIHVudGlsIHdlIGZpbmQgdGhlIGRlc2lyZWQgY29uc3RhbnQu Ci0JCSAqLwotCQlmb3IgKDs7KQotCQl7Ci0JCQl0b2sgPSBjb3JlX3l5bGV4KCZ5eWx2YWwsICZ5 eWxsb2MsIHl5c2Nhbm5lcik7Ci0KLQkJCS8qIFdlIHNob3VsZCBub3QgaGl0IGVuZC1vZi1zdHJp bmcsIGJ1dCBpZiB3ZSBkbywgYmVoYXZlIHNhbmVseSAqLwotCQkJaWYgKHRvayA9PSAwKQotCQkJ CWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBmb3ItbG9vcCAqLwotCi0JCQkvKgotCQkJICogV2Ug c2hvdWxkIGZpbmQgdGhlIHRva2VuIHBvc2l0aW9uIGV4YWN0bHksIGJ1dCBpZiB3ZSBzb21laG93 Ci0JCQkgKiBydW4gcGFzdCBpdCwgd29yayB3aXRoIHRoYXQuCi0JCQkgKi8KLQkJCWlmICh5eWxs b2MgPj0gbG9jKQotCQkJewotCQkJCWlmIChxdWVyeVtsb2NdID09ICctJykKLQkJCQl7Ci0JCQkJ CS8qCi0JCQkJCSAqIEl0J3MgYSBuZWdhdGl2ZSB2YWx1ZSAtIHRoaXMgaXMgdGhlIG9uZSBhbmQg b25seSBjYXNlCi0JCQkJCSAqIHdoZXJlIHdlIHJlcGxhY2UgbW9yZSB0aGFuIGEgc2luZ2xlIHRv a2VuLgotCQkJCQkgKgotCQkJCQkgKiBEbyBub3QgY29tcGVuc2F0ZSBmb3IgdGhlIGNvcmUgc3lz dGVtJ3Mgc3BlY2lhbC1jYXNlCi0JCQkJCSAqIGFkanVzdG1lbnQgb2YgbG9jYXRpb24gdG8gdGhh dCBvZiB0aGUgbGVhZGluZyAnLScKLQkJCQkJICogb3BlcmF0b3IgaW4gdGhlIGV2ZW50IG9mIGEg bmVnYXRpdmUgY29uc3RhbnQuICBJdCBpcwotCQkJCQkgKiBhbHNvIHVzZWZ1bCBmb3Igb3VyIHB1 cnBvc2VzIHRvIHN0YXJ0IGZyb20gdGhlIG1pbnVzCi0JCQkJCSAqIHN5bWJvbC4gIEluIHRoaXMg d2F5LCBxdWVyaWVzIGxpa2UgInNlbGVjdCAqIGZyb20gZm9vCi0JCQkJCSAqIHdoZXJlIGJhciA9 IDEiIGFuZCAic2VsZWN0ICogZnJvbSBmb28gd2hlcmUgYmFyID0gLTIiCi0JCQkJCSAqIHdpbGwg aGF2ZSBpZGVudGljYWwgbm9ybWFsaXplZCBxdWVyeSBzdHJpbmdzLgotCQkJCQkgKi8KLQkJCQkJ dG9rID0gY29yZV95eWxleCgmeXlsdmFsLCAmeXlsbG9jLCB5eXNjYW5uZXIpOwotCQkJCQlpZiAo dG9rID09IDApCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIGlubmVyIGZvci1sb29wICovCi0JCQkJ fQotCi0JCQkJLyoKLQkJCQkgKiBXZSBub3cgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGZs ZXggaGFzIHBsYWNlZCBhIHplcm8KLQkJCQkgKiBieXRlIGFmdGVyIHRoZSB0ZXh0IG9mIHRoZSBj dXJyZW50IHRva2VuIGluIHNjYW5idWYuCi0JCQkJICovCi0JCQkJbG9jc1tpXS5sZW5ndGggPSBz dHJsZW4oeXlleHRyYS5zY2FuYnVmICsgbG9jKTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5u ZXIgZm9yLWxvb3AgKi8KLQkJCX0KLQkJfQotCi0JCS8qIElmIHdlIGhpdCBlbmQtb2Ytc3RyaW5n LCBnaXZlIHVwLCBsZWF2aW5nIHJlbWFpbmluZyBsZW5ndGhzIC0xICovCi0JCWlmICh0b2sgPT0g MCkKLQkJCWJyZWFrOwotCX0KLQotCXNjYW5uZXJfZmluaXNoKHl5c2Nhbm5lcik7Ci19Ci0KLS8q Ci0gKiBjb21wX2xvY2F0aW9uOiBjb21wYXJhdG9yIGZvciBxc29ydGluZyBMb2NhdGlvbkxlbiBz dHJ1Y3RzIGJ5IGxvY2F0aW9uCi0gKi8KLXN0YXRpYyBpbnQKLWNvbXBfbG9jYXRpb24oY29uc3Qg dm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKLXsKLQlpbnQJCQlsID0gKChjb25zdCBMb2NhdGlvbkxl biAqKSBhKS0+bG9jYXRpb247Ci0JaW50CQkJciA9ICgoY29uc3QgTG9jYXRpb25MZW4gKikgYikt PmxvY2F0aW9uOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIobCwgcik7Ci19CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9x dWVyeWp1bWJsZWZ1bmNzLmMKaW5kZXggODdkYjhkYzFhMzIuLmM5OTdhMWVmNjA5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tl bmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCkBAIC00MCwxMCArNDAsMTIgQEAKICNpbmNsdWRl ICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgogI2luY2x1 ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJjb21tb24vaW50LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAibm9k ZXMvcXVlcnlqdW1ibGUuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJwYXJzZXIvc2Nhbm5lci5oIgogI2luY2x1ZGUgInBhcnNlci9zY2Fuc3VwLmgiCiAKICNkZWZp bmUgSlVNQkxFX1NJWkUJCQkJMTAyNAkvKiBxdWVyeSBzZXJpYWxpemF0aW9uIGJ1ZmZlciBzaXpl ICovCkBAIC03NzMsMyArNzc1LDI1NCBAQCBfanVtYmxlUmFuZ2VUYmxFbnRyeV9lcmVmKEp1bWJs ZVN0YXRlICpqc3RhdGUsCiAJICovCiAJSlVNQkxFX1NUUklORyhhbGlhc25hbWUpOwogfQorCisv KgorICogQ29tcExvY2F0aW9uOiBjb21wYXJhdG9yIGZvciBxc29ydGluZyBMb2NhdGlvbkxlbiBz dHJ1Y3RzIGJ5IGxvY2F0aW9uCisgKi8KK3N0YXRpYyBpbnQKK0NvbXBMb2NhdGlvbihjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWludAkJCWwgPSAoKGNvbnN0IExvY2F0aW9uTGVu ICopIGEpLT5sb2NhdGlvbjsKKwlpbnQJCQlyID0gKChjb25zdCBMb2NhdGlvbkxlbiAqKSBiKS0+ bG9jYXRpb247CisKKwlyZXR1cm4gcGdfY21wX3MzMihsLCByKTsKK30KKworLyoKKyAqIEdpdmVu IGEgdmFsaWQgU1FMIHN0cmluZyBhbmQgYW4gYXJyYXkgb2YgY29uc3RhbnQtbG9jYXRpb24gcmVj b3JkcywKKyAqIGZpbGwgaW4gdGhlIHRleHR1YWwgbGVuZ3RocyBvZiB0aG9zZSBjb25zdGFudHMg aW4gSnVtYmxlU3RhdGUuCisgKgorICogVGhlIGNvbnN0YW50cyBtYXkgdXNlIGFueSBhbGxvd2Vk IGNvbnN0YW50IHN5bnRheCwgc3VjaCBhcyBmbG9hdCBsaXRlcmFscywKKyAqIGJpdC1zdHJpbmdz LCBzaW5nbGUtcXVvdGVkIHN0cmluZ3MgYW5kIGRvbGxhci1xdW90ZWQgc3RyaW5ncy4gIFRoaXMg aXMKKyAqIGFjY29tcGxpc2hlZCBieSB1c2luZyB0aGUgcHVibGljIEFQSSBmb3IgdGhlIGNvcmUg c2Nhbm5lci4KKyAqCisgKiBNdWx0aXBsZSBjb25zdGFudHMgY2FuIGhhdmUgdGhlIHNhbWUgbG9j YXRpb24uICBXZSByZXNldCBsZW5ndGhzIG9mIHRob3NlCisgKiBwYXN0IHRoZSBmaXJzdCB0byAt MSBzbyB0aGF0IHRoZXkgY2FuIGxhdGVyIGJlIGlnbm9yZWQuCisgKgorICogSWYgcXVlcnlfbG9j ID4gMCwgdGhlbiAicXVlcnkiIGhhcyBiZWVuIGFkdmFuY2VkIGJ5IHRoYXQgbXVjaCBjb21wYXJl ZCB0bworICogdGhlIG9yaWdpbmFsIHN0cmluZyBzdGFydCwgYXMgaXMgdGhlIGNhc2Ugd2l0aCBt dWx0aS1zdGF0ZW1lbnQgc3RyaW5ncywgc28KKyAqIHdlIG5lZWQgdG8gdHJhbnNsYXRlIHRoZSBw cm92aWRlZCBsb2NhdGlvbnMgdG8gY29tcGVuc2F0ZS4gIChUaGlzIGxldHMgdXMKKyAqIGF2b2lk IHJlLXNjYW5uaW5nIHN0YXRlbWVudHMgYmVmb3JlIHRoZSBvbmUgb2YgaW50ZXJlc3QsIHNvIGl0 J3Mgd29ydGggZG9pbmcuKQorICoKKyAqIE4uQi4gVGhlcmUgaXMgYW4gYXNzdW1wdGlvbiB0aGF0 IGEgJy0nIGNoYXJhY3RlciBhdCBhIENvbnN0IGxvY2F0aW9uIGJlZ2lucworICogYSBuZWdhdGl2 ZSBudW1lcmljIGNvbnN0YW50LiAgVGhpcyBwcmVjbHVkZXMgdGhlcmUgZXZlciBiZWluZyBhbm90 aGVyCisgKiByZWFzb24gZm9yIGEgY29uc3RhbnQgdG8gc3RhcnQgd2l0aCBhICctJy4KKyAqLwor c3RhdGljIHZvaWQKK1NldENvbnN0YW50TGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25z dCBjaGFyICpxdWVyeSwKKwkJCQkgICBpbnQgcXVlcnlfbG9jKQoreworCUxvY2F0aW9uTGVuICps b2NzOworCWNvcmVfeXlzY2FuX3QgeXlzY2FubmVyOworCWNvcmVfeXlfZXh0cmFfdHlwZSB5eWV4 dHJhOworCWNvcmVfWVlTVFlQRSB5eWx2YWw7CisJWVlMVFlQRQkJeXlsbG9jOworCisJLyoKKwkg KiBTb3J0IHRoZSByZWNvcmRzIGJ5IGxvY2F0aW9uIHNvIHRoYXQgd2UgY2FuIHByb2Nlc3MgdGhl bSBpbiBvcmRlciB3aGlsZQorCSAqIHNjYW5uaW5nIHRoZSBxdWVyeSB0ZXh0LgorCSAqLworCWlm IChqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQgPiAxKQorCQlxc29ydChqc3RhdGUtPmNsb2NhdGlv bnMsIGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudCwKKwkJCSAgc2l6ZW9mKExvY2F0aW9uTGVuKSwg Q29tcExvY2F0aW9uKTsKKwlsb2NzID0ganN0YXRlLT5jbG9jYXRpb25zOworCisJLyogaW5pdGlh bGl6ZSB0aGUgZmxleCBzY2FubmVyIC0tLSBzaG91bGQgbWF0Y2ggcmF3X3BhcnNlcigpICovCisJ eXlzY2FubmVyID0gc2Nhbm5lcl9pbml0KHF1ZXJ5LAorCQkJCQkJCSAmeXlleHRyYSwKKwkJCQkJ CQkgJlNjYW5LZXl3b3JkcywKKwkJCQkJCQkgU2NhbktleXdvcmRUb2tlbnMpOworCisJLyogU2Vh cmNoIGZvciBlYWNoIGNvbnN0YW50LCBpbiBzZXF1ZW5jZSAqLworCWZvciAoaW50IGkgPSAwOyBp IDwganN0YXRlLT5jbG9jYXRpb25zX2NvdW50OyBpKyspCisJeworCQlpbnQJCQlsb2M7CisJCWlu dAkJCXRvazsKKworCQkvKiBJZ25vcmUgY29uc3RhbnRzIGFmdGVyIHRoZSBmaXJzdCBvbmUgaW4g dGhlIHNhbWUgbG9jYXRpb24gKi8KKwkJaWYgKGkgPiAwICYmIGxvY3NbaV0ubG9jYXRpb24gPT0g bG9jc1tpIC0gMV0ubG9jYXRpb24pCisJCXsKKwkJCWxvY3NbaV0ubGVuZ3RoID0gLTE7CisJCQlj b250aW51ZTsKKwkJfQorCisJCWlmIChsb2NzW2ldLnNxdWFzaGVkKQorCQkJY29udGludWU7CQkJ Lyogc3F1YXNoYWJsZSBsaXN0LCBpZ25vcmUgKi8KKworCQkvKgorCQkgKiBBZGp1c3QgdGhlIGNv bnN0YW50J3MgbG9jYXRpb24gdXNpbmcgdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIGxvY2F0aW9uCisJ CSAqIG9mIHRoZSBjdXJyZW50IHN0YXRlbWVudC4gVGhpcyBhbGxvd3MgdXMgdG8gYXZvaWQgc2Nh bm5pbmcgYQorCQkgKiBtdWx0aS1zdGF0ZW1lbnQgc3RyaW5nIGZyb20gdGhlIGJlZ2lubmluZy4K KwkJICovCisJCWxvYyA9IGxvY3NbaV0ubG9jYXRpb24gLSBxdWVyeV9sb2M7CisJCUFzc2VydChs b2MgPj0gMCk7CisKKwkJLyoKKwkJICogV2UgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uIGZvciBhIGNv bnN0YW50IHRoYXQncyBub3QgYSBkdXBlLiBMZXgKKwkJICogdG9rZW5zIHVudGlsIHdlIGZpbmQg dGhlIGRlc2lyZWQgY29uc3RhbnQuCisJCSAqLworCQlmb3IgKDs7KQorCQl7CisJCQl0b2sgPSBj b3JlX3l5bGV4KCZ5eWx2YWwsICZ5eWxsb2MsIHl5c2Nhbm5lcik7CisKKwkJCS8qIFdlIHNob3Vs ZCBub3QgaGl0IGVuZC1vZi1zdHJpbmcsIGJ1dCBpZiB3ZSBkbywgYmVoYXZlIHNhbmVseSAqLwor CQkJaWYgKHRvayA9PSAwKQorCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBmb3ItbG9vcCAq LworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIGZpbmQgdGhlIHRva2VuIHBvc2l0aW9uIGV4YWN0 bHksIGJ1dCBpZiB3ZSBzb21laG93CisJCQkgKiBydW4gcGFzdCBpdCwgd29yayB3aXRoIHRoYXQu CisJCQkgKi8KKwkJCWlmICh5eWxsb2MgPj0gbG9jKQorCQkJeworCQkJCWlmIChxdWVyeVtsb2Nd ID09ICctJykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEl0J3MgYSBuZWdhdGl2ZSB2YWx1ZSAt IHRoaXMgaXMgdGhlIG9uZSBhbmQgb25seSBjYXNlCisJCQkJCSAqIHdoZXJlIHdlIHJlcGxhY2Ug bW9yZSB0aGFuIGEgc2luZ2xlIHRva2VuLgorCQkJCQkgKgorCQkJCQkgKiBEbyBub3QgY29tcGVu c2F0ZSBmb3IgdGhlIHNwZWNpYWwtY2FzZSBhZGp1c3RtZW50IG9mCisJCQkJCSAqIGxvY2F0aW9u IHRvIHRoYXQgb2YgdGhlIGxlYWRpbmcgJy0nIG9wZXJhdG9yIGluIHRoZQorCQkJCQkgKiBldmVu dCBvZiBhIG5lZ2F0aXZlIGNvbnN0YW50IChzZWUgZG9OZWdhdGUoKSBpbgorCQkJCQkgKiBncmFt LnkpLiAgSXQgaXMgYWxzbyB1c2VmdWwgZm9yIG91ciBwdXJwb3NlcyB0byBzdGFydAorCQkJCQkg KiBmcm9tIHRoZSBtaW51cyBzeW1ib2wuICBJbiB0aGlzIHdheSwgcXVlcmllcyBsaWtlCisJCQkJ CSAqICJzZWxlY3QgKiBmcm9tIGZvbyB3aGVyZSBiYXIgPSAxIiBhbmQgInNlbGVjdCAqIGZyb20K KwkJCQkJICogZm9vIHdoZXJlIGJhciA9IC0yIiB3aWxsIGhhdmUgaWRlbnRpY2FsIG5vcm1hbGl6 ZWQKKwkJCQkJICogcXVlcnkgc3RyaW5ncy4KKwkJCQkJICovCisJCQkJCXRvayA9IGNvcmVfeXls ZXgoJnl5bHZhbCwgJnl5bGxvYywgeXlzY2FubmVyKTsKKwkJCQkJaWYgKHRvayA9PSAwKQorCQkJ CQkJYnJlYWs7CS8qIG91dCBvZiBpbm5lciBmb3ItbG9vcCAqLworCQkJCX0KKworCQkJCS8qCisJ CQkJICogV2Ugbm93IHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBmbGV4IGhhcyBwbGFjZWQg YSB6ZXJvCisJCQkJICogYnl0ZSBhZnRlciB0aGUgdGV4dCBvZiB0aGUgY3VycmVudCB0b2tlbiBp biBzY2FuYnVmLgorCQkJCSAqLworCQkJCWxvY3NbaV0ubGVuZ3RoID0gc3RybGVuKHl5ZXh0cmEu c2NhbmJ1ZiArIGxvYyk7CisJCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIGZvci1sb29wICov CisJCQl9CisJCX0KKworCQkvKiBJZiB3ZSBoaXQgZW5kLW9mLXN0cmluZywgZ2l2ZSB1cCwgbGVh dmluZyByZW1haW5pbmcgbGVuZ3RocyAtMSAqLworCQlpZiAodG9rID09IDApCisJCQlicmVhazsK Kwl9CisKKwlzY2FubmVyX2ZpbmlzaCh5eXNjYW5uZXIpOworfQorCisvKgorICogR2VuZXJhdGUg YSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHF1ZXJ5IHN0cmluZyB0aGF0IHdpbGwgYmUgdXNl ZCB0bworICogcmVwcmVzZW50IGFsbCBzaW1pbGFyIHF1ZXJpZXMuCisgKgorICogKnF1ZXJ5X2xl bl9wIGNvbnRhaW5zIHRoZSBpbnB1dCBzdHJpbmcgbGVuZ3RoLCBhbmQgaXMgdXBkYXRlZCB3aXRo CisgKiB0aGUgcmVzdWx0IHN0cmluZyBsZW5ndGggb24gZXhpdC4gIFRoZSByZXN1bHRpbmcgc3Ry aW5nIG1pZ2h0IGJlIGxvbmdlcgorICogb3Igc2hvcnRlciBkZXBlbmRpbmcgb24gd2hhdCBoYXBw ZW5zIHdpdGggcmVwbGFjZW1lbnQgb2YgY29uc3RhbnRzLgorICoKKyAqIFNpbWlsYXIgdG8gU2V0 Q29uc3RhbnRMZW5ndGhzLCB3ZSBtdXN0IGFsc28gdHJhbnNsYXRlIHRoZSBwcm92aWRlZCBsb2Nh dGlvbgorICogdG8gY29tcGVuc2F0ZSBmb3IgbXVsdGktc3RhdGVtZW50IHN0cmluZ3MuCisgKgor ICogSXQgaXMgdGhlIGNhbGxlcidzIGpvYiB0byBlbnN1cmUgdGhhdCB0aGUgc3RyaW5nIGlzIGEg dmFsaWQgU1FMIHN0YXRlbWVudAorICogd2l0aCB0aGUgY29ycmVjdCBjb25zdGFudCBsb2NhdGlv bnMgaW4ganN0YXRlLT5jbG9jYXRpb25zLiBTaW5jZSBpbgorICogcHJhY3RpY2UgdGhlIHN0cmlu ZyBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZCB1c2luZyB0aGUgYXV0aG9yaXRhdGl2ZSBwYXJzZXIK KyAqIGFuZCB0aGUgbG9jYXRpb25zIGFyZSBzZXQgYnkgY29yZSBxdWVyeSBqdW1ibGluZywgdGhp cyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4KKyAqCisgKiBSZXR1cm5zIGEgcGFsbG9jJ2Qgc3Ry aW5nLgorICovCitjaGFyICoKK0dlbmVyYXRlTm9ybWFsaXplZFF1ZXJ5KEp1bWJsZVN0YXRlICpq c3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAorCQkJCQkJaW50IHF1ZXJ5X2xvYywgaW50ICpxdWVy eV9sZW5fcCkKK3sKKwljaGFyCSAgICpub3JtX3F1ZXJ5OworCWludAkJCXF1ZXJ5X2xlbiA9ICpx dWVyeV9sZW5fcDsKKwlpbnQJCQlub3JtX3F1ZXJ5X2J1ZmxlbiwJLyogU3BhY2UgYWxsb3dlZCBm b3Igbm9ybV9xdWVyeSAqLworCQkJCWxlbl90b193cnQsCQkvKiBMZW5ndGggKGluIGJ5dGVzKSB0 byB3cml0ZSAqLworCQkJCXF1ZXJfbG9jID0gMCwJLyogU291cmNlIHF1ZXJ5IGJ5dGUgbG9jYXRp b24gKi8KKwkJCQluX3F1ZXJfbG9jID0gMCwgLyogTm9ybWFsaXplZCBxdWVyeSBieXRlIGxvY2F0 aW9uICovCisJCQkJbGFzdF9vZmYgPSAwLAkvKiBPZmZzZXQgZnJvbSBzdGFydCBmb3IgcHJldmlv dXMgdG9rICovCisJCQkJbGFzdF90b2tfbGVuID0gMDsJLyogTGVuZ3RoIChpbiBieXRlcykgb2Yg dGhhdCB0b2sgKi8KKwlpbnQJCQludW1fY29uc3RhbnRzX3JlcGxhY2VkID0gMDsKKworCS8qCisJ ICogU2V0IGNvbnN0YW50cycgbGVuZ3RocyBpbiBKdW1ibGVTdGF0ZSwgYXMgb25seSBsb2NhdGlv bnMgYXJlIHNldCBkdXJpbmcKKwkgKiBEb0p1bWJsZSgpLiBOb3RlIHRoaXMgYWxzbyBlbnN1cmVz IHRoZSBpdGVtcyBhcmUgc29ydGVkIGJ5IGxvY2F0aW9uLgorCSAqLworCVNldENvbnN0YW50TGVu Z3Rocyhqc3RhdGUsIHF1ZXJ5LCBxdWVyeV9sb2MpOworCisJLyoKKwkgKiBBbGxvdyBmb3IgJG4g c3ltYm9scyB0byBiZSBsb25nZXIgdGhhbiB0aGUgY29uc3RhbnRzIHRoZXkgcmVwbGFjZS4KKwkg KiBDb25zdGFudHMgbXVzdCB0YWtlIGF0IGxlYXN0IG9uZSBieXRlIGluIHRleHQgZm9ybSwgd2hp bGUgYSAkbiBzeW1ib2wKKwkgKiBjZXJ0YWlubHkgaXNuJ3QgbW9yZSB0aGFuIDExIGJ5dGVzLCBl dmVuIGlmIG4gcmVhY2hlcyBJTlRfTUFYLiAgV2UKKwkgKiBjb3VsZCByZWZpbmUgdGhhdCBsaW1p dCBiYXNlZCBvbiB0aGUgbWF4IHZhbHVlIG9mIG4gZm9yIHRoZSBjdXJyZW50CisJICogcXVlcnks IGJ1dCBpdCBoYXJkbHkgc2VlbXMgd29ydGggYW55IGV4dHJhIGVmZm9ydCB0byBkbyBzby4KKwkg Ki8KKwlub3JtX3F1ZXJ5X2J1ZmxlbiA9IHF1ZXJ5X2xlbiArIGpzdGF0ZS0+Y2xvY2F0aW9uc19j b3VudCAqIDEwOworCisJLyogQWxsb2NhdGUgcmVzdWx0IGJ1ZmZlciAqLworCW5vcm1fcXVlcnkg PSBwYWxsb2Mobm9ybV9xdWVyeV9idWZsZW4gKyAxKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwg anN0YXRlLT5jbG9jYXRpb25zX2NvdW50OyBpKyspCisJeworCQlpbnQJCQlvZmYsCQkvKiBPZmZz ZXQgZnJvbSBzdGFydCBmb3IgY3VyIHRvayAqLworCQkJCQl0b2tfbGVuOwkvKiBMZW5ndGggKGlu IGJ5dGVzKSBvZiB0aGF0IHRvayAqLworCisJCS8qCisJCSAqIElmIHdlIGhhdmUgYW4gZXh0ZXJu YWwgcGFyYW0gYXQgdGhpcyBsb2NhdGlvbiwgYnV0IG5vIGxpc3RzIGFyZQorCQkgKiBiZWluZyBz cXVhc2hlZCBhY3Jvc3MgdGhlIHF1ZXJ5LCB0aGVuIHdlIHNraXAgaGVyZTsgdGhpcyB3aWxsIG1h a2UKKwkJICogdXMgcHJpbnQgdGhlIGNoYXJhY3RlcnMgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHF1 ZXJ5IHRoYXQgcmVwcmVzZW50CisJCSAqIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIG5leHQgaXRlcmF0 aW9uIChvciBhZnRlciB0aGUgbG9vcCBpcyBkb25lKSwKKwkJICogd2hpY2ggaXMgYSBiaXQgb2Rk IGJ1dCBzZWVtcyB0byB3b3JrIG9rYXkgaW4gbW9zdCBjYXNlcy4KKwkJICovCisJCWlmIChqc3Rh dGUtPmNsb2NhdGlvbnNbaV0uZXh0ZXJuX3BhcmFtICYmICFqc3RhdGUtPmhhc19zcXVhc2hlZF9s aXN0cykKKwkJCWNvbnRpbnVlOworCisJCW9mZiA9IGpzdGF0ZS0+Y2xvY2F0aW9uc1tpXS5sb2Nh dGlvbjsKKworCQkvKiBBZGp1c3QgdGhlIGNvbnN0YW50J3MgbG9jYXRpb24gKHNlZSBTZXRDb25z dGFudExlbmd0aHMpICovCisJCW9mZiAtPSBxdWVyeV9sb2M7CisKKwkJdG9rX2xlbiA9IGpzdGF0 ZS0+Y2xvY2F0aW9uc1tpXS5sZW5ndGg7CisKKwkJaWYgKHRva19sZW4gPCAwKQorCQkJY29udGlu dWU7CQkJLyogaWdub3JlIGFueSBkdXBsaWNhdGVzICovCisKKwkJLyogQ29weSBuZXh0IGNodW5r ICh3aGF0IHByZWNlZGVzIHRoZSBuZXh0IGNvbnN0YW50KSAqLworCQlsZW5fdG9fd3J0ID0gb2Zm IC0gbGFzdF9vZmY7CisJCWxlbl90b193cnQgLT0gbGFzdF90b2tfbGVuOworCQlBc3NlcnQobGVu X3RvX3dydCA+PSAwKTsKKwkJbWVtY3B5KG5vcm1fcXVlcnkgKyBuX3F1ZXJfbG9jLCBxdWVyeSAr IHF1ZXJfbG9jLCBsZW5fdG9fd3J0KTsKKwkJbl9xdWVyX2xvYyArPSBsZW5fdG9fd3J0OworCisJ CS8qCisJCSAqIEFuZCBpbnNlcnQgYSBwYXJhbSBzeW1ib2wgaW4gcGxhY2Ugb2YgdGhlIGNvbnN0 YW50IHRva2VuOyBhbmQsIGlmCisJCSAqIHdlIGhhdmUgYSBzcXVhc2hhYmxlIGxpc3QsIGluc2Vy dCBhIHBsYWNlaG9sZGVyIGNvbW1lbnQgc3RhcnRpbmcKKwkJICogZnJvbSB0aGUgbGlzdCdzIHNl Y29uZCB2YWx1ZS4KKwkJICovCisJCW5fcXVlcl9sb2MgKz0gc3ByaW50Zihub3JtX3F1ZXJ5ICsg bl9xdWVyX2xvYywgIiQlZCVzIiwKKwkJCQkJCQkgIG51bV9jb25zdGFudHNfcmVwbGFjZWQgKyAx ICsganN0YXRlLT5oaWdoZXN0X2V4dGVybl9wYXJhbV9pZCwKKwkJCQkJCQkgIGpzdGF0ZS0+Y2xv Y2F0aW9uc1tpXS5zcXVhc2hlZCA/ICIgLyosIC4uLiAqLyIgOiAiIik7CisJCW51bV9jb25zdGFu dHNfcmVwbGFjZWQrKzsKKworCQkvKiBtb3ZlIGZvcndhcmQgKi8KKwkJcXVlcl9sb2MgPSBvZmYg KyB0b2tfbGVuOworCQlsYXN0X29mZiA9IG9mZjsKKwkJbGFzdF90b2tfbGVuID0gdG9rX2xlbjsK Kwl9CisKKwkvKgorCSAqIFdlJ3ZlIGNvcGllZCB1cCB1bnRpbCB0aGUgbGFzdCBpZ25vcmFibGUg Y29uc3RhbnQuICBDb3B5IG92ZXIgdGhlCisJICogcmVtYWluaW5nIGJ5dGVzIG9mIHRoZSBvcmln aW5hbCBxdWVyeSBzdHJpbmcuCisJICovCisJbGVuX3RvX3dydCA9IHF1ZXJ5X2xlbiAtIHF1ZXJf bG9jOworCisJQXNzZXJ0KGxlbl90b193cnQgPj0gMCk7CisJbWVtY3B5KG5vcm1fcXVlcnkgKyBu X3F1ZXJfbG9jLCBxdWVyeSArIHF1ZXJfbG9jLCBsZW5fdG9fd3J0KTsKKwluX3F1ZXJfbG9jICs9 IGxlbl90b193cnQ7CisKKwlBc3NlcnQobl9xdWVyX2xvYyA8PSBub3JtX3F1ZXJ5X2J1Zmxlbik7 CisJbm9ybV9xdWVyeVtuX3F1ZXJfbG9jXSA9ICdcMCc7CisKKwkqcXVlcnlfbGVuX3AgPSBuX3F1 ZXJfbG9jOworCXJldHVybiBub3JtX3F1ZXJ5OworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcXVlcnlqdW1ibGUuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKaW5k ZXggOWY4MTg5MzAwM2MuLmUzNTRmODU3YzM3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9xdWVyeWp1bWJsZS5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKQEAg LTkxLDYgKzkxLDggQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21wdXRlX3F1ZXJ5X2lkOwog CiAKIGV4dGVybiBjb25zdCBjaGFyICpDbGVhblF1ZXJ5dGV4dChjb25zdCBjaGFyICpxdWVyeSwg aW50ICpsb2NhdGlvbiwgaW50ICpsZW4pOworZXh0ZXJuIGNoYXIgKkdlbmVyYXRlTm9ybWFsaXpl ZFF1ZXJ5KEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAorCQkJCQkJCQkJ IGludCBxdWVyeV9sb2MsIGludCAqcXVlcnlfbGVuX3ApOwogZXh0ZXJuIEp1bWJsZVN0YXRlICpK dW1ibGVRdWVyeShRdWVyeSAqcXVlcnkpOwogZXh0ZXJuIHZvaWQgRW5hYmxlUXVlcnlJZCh2b2lk KTsKIAotLSAKMi40Ny4zCgo= --000000000000851758064df09490 Content-Type: application/octet-stream; name="v7-0002-Make-JumbleState-const-in-post_parse_analyze-hook.patch" Content-Disposition: attachment; filename="v7-0002-Make-JumbleState-const-in-post_parse_analyze-hook.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn7qil360 RnJvbSA0MjM2MGEzMDZiZmVkNmI4OTliZDAzZTYwYzY5YjMxZGI1OWUyZWMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogVHVlLCA2IEphbiAyMDI2IDE5OjI5OjAxICswMDAwClN1YmplY3Q6IFtQ QVRDSCB2NyAyLzJdIE1ha2UgSnVtYmxlU3RhdGUgY29uc3QgaW4gcG9zdF9wYXJzZV9hbmFseXpl IGhvb2sKCkNoYW5nZSB0aGUgcG9zdF9wYXJzZV9hbmFseXplX2hvb2tfdHlwZSBzaWduYXR1cmUg dG8gdGFrZSBhIGNvbnN0Ckp1bWJsZVN0YXRlIHBhcmFtZXRlciwgcHJldmVudGluZyBob29rcyBm cm9tIG1vZGlmeWluZyB0aGUganVtYmxlCnN0YXRlIGR1cmluZyBxdWVyeSBhbmFseXNpcy4gVGhp cyBpbXByb3ZlcyBBUEkgc2FmZXR5IGJ5IG1ha2luZyBpdApjbGVhciB0aGF0IGhvb2tzIHNob3Vs ZCBvbmx5IHJlYWQgZnJvbSB0aGUganVtYmxlIHN0YXRlLCBub3QgbW9kaWZ5Cml0LgoKVXBkYXRl IHBnX3N0YXRfc3RhdGVtZW50cyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIG5l dyBjb25zdApzaWduYXR1cmUuIFJlZmFjdG9yIFNldENvbnN0YW50TGVuZ3RocygpIHRvIHJldHVy biBhIG5ld2x5IGFsbG9jYXRlZApMb2NhdGlvbkxlbiBhcnJheSBpbnN0ZWFkIG9mIG1vZGlmeWlu ZyB0aGUgSnVtYmxlU3RhdGUsIGFuZCB1cGRhdGUKR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoKSB0 byB3b3JrIHdpdGggdGhlIGNvbnN0IEp1bWJsZVN0YXRlIGFuZAptYW5hZ2UgdGhlIHJldHVybmVk IGFycmF5IHByb3Blcmx5LgoKQWxzbywgcmVuYW1lIFNldENvbnN0YW50TGVuZ3RocygpIHRvIENv bXB1dGVDb25zdGFudExlbmd0aHMoKSBhcyBpdCBpcwpubyBsb25nZXIgc2V0dGluZyBjb25zdGFu dCBsZW5ndGhzLCBhbmQgaXQncyBhbHNvIGNvbXB1dGluZyBsZW5ndGhzCmJhc2VkIG9uIHRyYXZl cnNpbmcgdGhyb3VnaCB0aGUgTG9jYXRpb25MZW4gZGF0YS4KCkZ1cnRoZXJtb3JlLCBDb21wdXRl Q29uc3RhbnRMZW5ndGhzIGlzIGFsc28gZXhwb3J0ZWQgdG8gYWxsb3cgcGx1Zy1pbnMKdGhhdCB3 aXNoIHRvIHBlcmZvcm0gY3VzdG9tIHByb2Nlc3Npbmcgb2YgbGl0ZXJhbHMgZnJvbSBhIHF1ZXJ5 LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUE1UlowdFpwNXFVMGlrWkVFcUpu eHZkU05HaDFEV3Y4MHNiLWs0UUFVbWlNb09wX1FAbWFpbC5nbWFpbC5jb20KLS0tCiAuLi4vcGdf c3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCAgOCArLS0KIHNyYy9iYWNr ZW5kL25vZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYyAgICAgICAgICB8IDUwICsrKysrKysrKysrKy0t LS0tLS0KIHNyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmggICAgICAgICAgICAgICB8ICA0 ICstCiBzcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oICAgICAgICAgICAgICAgICAgfCAgMiAr LQogNCBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMu YyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCmluZGV4 IGM5MzM4NDQyZDk2Li4zODZhMTQxOTIzMiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTMzMyw3ICszMzMsNyBAQCBzdGF0aWMgdm9p ZCBwZ3NzX3NobWVtX3JlcXVlc3Qodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX3N0YXJ0 dXAodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX3NodXRkb3duKGludCBjb2RlLCBEYXR1 bSBhcmcpOwogc3RhdGljIHZvaWQgcGdzc19wb3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAq cHN0YXRlLCBRdWVyeSAqcXVlcnksCi0JCQkJCQkJCQlKdW1ibGVTdGF0ZSAqanN0YXRlKTsKKwkJ CQkJCQkJCWNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUpOwogc3RhdGljIFBsYW5uZWRTdG10ICpw Z3NzX3BsYW5uZXIoUXVlcnkgKnBhcnNlLAogCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlfc3Ry aW5nLAogCQkJCQkJCQkgaW50IGN1cnNvck9wdGlvbnMsCkBAIC0zNTcsNyArMzU3LDcgQEAgc3Rh dGljIHZvaWQgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJZCwKIAkJ CQkJICAgY29uc3QgQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLAogCQkJCQkgICBjb25zdCBXYWxVc2Fn ZSAqd2FsdXNhZ2UsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBKaXRJbnN0cnVtZW50YXRpb24gKmpp dHVzYWdlLAotCQkJCQkgICBKdW1ibGVTdGF0ZSAqanN0YXRlLAorCQkJCQkgICBjb25zdCBKdW1i bGVTdGF0ZSAqanN0YXRlLAogCQkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2gs CiAJCQkJCSAgIGludCBwYXJhbGxlbF93b3JrZXJzX2xhdW5jaGVkLAogCQkJCQkgICBQbGFubmVk U3RtdE9yaWdpbiBwbGFuT3JpZ2luKTsKQEAgLTgzMyw3ICs4MzMsNyBAQCBlcnJvcjoKICAqIFBv c3QtcGFyc2UtYW5hbHlzaXMgaG9vazogbWFyayBxdWVyeSB3aXRoIGEgcXVlcnlJZAogICovCiBz dGF0aWMgdm9pZAotcGdzc19wb3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBR dWVyeSAqcXVlcnksIEp1bWJsZVN0YXRlICpqc3RhdGUpCitwZ3NzX3Bvc3RfcGFyc2VfYW5hbHl6 ZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVyeSwgY29uc3QgSnVtYmxlU3RhdGUgKmpz dGF0ZSkKIHsKIAlpZiAocHJldl9wb3N0X3BhcnNlX2FuYWx5emVfaG9vaykKIAkJcHJldl9wb3N0 X3BhcnNlX2FuYWx5emVfaG9vayhwc3RhdGUsIHF1ZXJ5LCBqc3RhdGUpOwpAQCAtMTI5MCw3ICsx MjkwLDcgQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJZCwKIAkJ ICAgY29uc3QgQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLAogCQkgICBjb25zdCBXYWxVc2FnZSAqd2Fs dXNhZ2UsCiAJCSAgIGNvbnN0IHN0cnVjdCBKaXRJbnN0cnVtZW50YXRpb24gKmppdHVzYWdlLAot CQkgICBKdW1ibGVTdGF0ZSAqanN0YXRlLAorCQkgICBjb25zdCBKdW1ibGVTdGF0ZSAqanN0YXRl LAogCQkgICBpbnQgcGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2gsCiAJCSAgIGludCBwYXJhbGxl bF93b3JrZXJzX2xhdW5jaGVkLAogCQkgICBQbGFubmVkU3RtdE9yaWdpbiBwbGFuT3JpZ2luKQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCmluZGV4IGM5OTdhMWVmNjA5Li5hZjk0MTc3 OTdhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYwpAQCAtNzg5LDggKzc4OSwx MCBAQCBDb21wTG9jYXRpb24oY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIH0KIAogLyoK LSAqIEdpdmVuIGEgdmFsaWQgU1FMIHN0cmluZyBhbmQgYW4gYXJyYXkgb2YgY29uc3RhbnQtbG9j YXRpb24gcmVjb3JkcywKLSAqIGZpbGwgaW4gdGhlIHRleHR1YWwgbGVuZ3RocyBvZiB0aG9zZSBj b25zdGFudHMgaW4gSnVtYmxlU3RhdGUuCisgKiBHaXZlbiBhIHZhbGlkIFNRTCBzdHJpbmcgYW5k IGFuIGFycmF5IG9mIGNvbnN0YW50LWxvY2F0aW9uIHJlY29yZHMsIHJldHVybgorICogdGhlIHRl eHR1YWwgbGVuZ3RocyBvZiB0aG9zZSBjb25zdGFudHMgaW4gYSBuZXdseSBhbGxvY2F0ZWQgTG9j YXRpb25MZW4KKyAqIGFycmF5LCBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBjb25zdGFudHMuIEl0 IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eQorICogdG8gcGZyZWUgdGhlIHJlc3VsdCwg aWYgbmVjZXNzYXJ5LgogICoKICAqIFRoZSBjb25zdGFudHMgbWF5IHVzZSBhbnkgYWxsb3dlZCBj b25zdGFudCBzeW50YXgsIHN1Y2ggYXMgZmxvYXQgbGl0ZXJhbHMsCiAgKiBiaXQtc3RyaW5ncywg c2luZ2xlLXF1b3RlZCBzdHJpbmdzIGFuZCBkb2xsYXItcXVvdGVkIHN0cmluZ3MuICBUaGlzIGlz CkBAIC04MDgsOSArODEwLDkgQEAgQ29tcExvY2F0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZv aWQgKmIpCiAgKiBhIG5lZ2F0aXZlIG51bWVyaWMgY29uc3RhbnQuICBUaGlzIHByZWNsdWRlcyB0 aGVyZSBldmVyIGJlaW5nIGFub3RoZXIKICAqIHJlYXNvbiBmb3IgYSBjb25zdGFudCB0byBzdGFy dCB3aXRoIGEgJy0nLgogICovCi1zdGF0aWMgdm9pZAotU2V0Q29uc3RhbnRMZW5ndGhzKEp1bWJs ZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAotCQkJCSAgIGludCBxdWVyeV9sb2Mp CitMb2NhdGlvbkxlbiAqCitDb21wdXRlQ29uc3RhbnRMZW5ndGhzKGNvbnN0IEp1bWJsZVN0YXRl ICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAorCQkJCQkgICBpbnQgcXVlcnlfbG9jKQogewog CUxvY2F0aW9uTGVuICpsb2NzOwogCWNvcmVfeXlzY2FuX3QgeXlzY2FubmVyOwpAQCAtODE4LDE0 ICs4MjAsMjAgQEAgU2V0Q29uc3RhbnRMZW5ndGhzKEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0 IGNoYXIgKnF1ZXJ5LAogCWNvcmVfWVlTVFlQRSB5eWx2YWw7CiAJWVlMVFlQRQkJeXlsbG9jOwog CisJaWYgKGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKwor CS8qIENvcHkgY29uc3RhbnQgbG9jYXRpb25zIHRvIGF2b2lkIG1vZGlmeWluZyBqc3RhdGUgKi8K Kwlsb2NzID0gcGFsbG9jX2FycmF5KExvY2F0aW9uTGVuLCBqc3RhdGUtPmNsb2NhdGlvbnNfY291 bnQpOworCW1lbWNweShsb2NzLCBqc3RhdGUtPmNsb2NhdGlvbnMsIGpzdGF0ZS0+Y2xvY2F0aW9u c19jb3VudCAqIHNpemVvZihMb2NhdGlvbkxlbikpOworCiAJLyoKIAkgKiBTb3J0IHRoZSByZWNv cmRzIGJ5IGxvY2F0aW9uIHNvIHRoYXQgd2UgY2FuIHByb2Nlc3MgdGhlbSBpbiBvcmRlciB3aGls ZQogCSAqIHNjYW5uaW5nIHRoZSBxdWVyeSB0ZXh0LgogCSAqLwogCWlmIChqc3RhdGUtPmNsb2Nh dGlvbnNfY291bnQgPiAxKQotCQlxc29ydChqc3RhdGUtPmNsb2NhdGlvbnMsIGpzdGF0ZS0+Y2xv Y2F0aW9uc19jb3VudCwKKwkJcXNvcnQobG9jcywganN0YXRlLT5jbG9jYXRpb25zX2NvdW50LAog CQkJICBzaXplb2YoTG9jYXRpb25MZW4pLCBDb21wTG9jYXRpb24pOwotCWxvY3MgPSBqc3RhdGUt PmNsb2NhdGlvbnM7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBmbGV4IHNjYW5uZXIgLS0tIHNob3Vs ZCBtYXRjaCByYXdfcGFyc2VyKCkgKi8KIAl5eXNjYW5uZXIgPSBzY2FubmVyX2luaXQocXVlcnks CkBAIC05MTAsNiArOTE4LDggQEAgU2V0Q29uc3RhbnRMZW5ndGhzKEp1bWJsZVN0YXRlICpqc3Rh dGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCX0KIAogCXNjYW5uZXJfZmluaXNoKHl5c2Nhbm5lcik7 CisKKwlyZXR1cm4gbG9jczsKIH0KIAogLyoKQEAgLTkyMCw3ICs5MzAsNyBAQCBTZXRDb25zdGFu dExlbmd0aHMoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAgKiB0aGUg cmVzdWx0IHN0cmluZyBsZW5ndGggb24gZXhpdC4gIFRoZSByZXN1bHRpbmcgc3RyaW5nIG1pZ2h0 IGJlIGxvbmdlcgogICogb3Igc2hvcnRlciBkZXBlbmRpbmcgb24gd2hhdCBoYXBwZW5zIHdpdGgg cmVwbGFjZW1lbnQgb2YgY29uc3RhbnRzLgogICoKLSAqIFNpbWlsYXIgdG8gU2V0Q29uc3RhbnRM ZW5ndGhzLCB3ZSBtdXN0IGFsc28gdHJhbnNsYXRlIHRoZSBwcm92aWRlZCBsb2NhdGlvbgorICog U2ltaWxhciB0byBDb21wdXRlQ29uc3RhbnRMZW5ndGhzLCB3ZSBtdXN0IGFsc28gdHJhbnNsYXRl IHRoZSBwcm92aWRlZCBsb2NhdGlvbgogICogdG8gY29tcGVuc2F0ZSBmb3IgbXVsdGktc3RhdGVt ZW50IHN0cmluZ3MuCiAgKgogICogSXQgaXMgdGhlIGNhbGxlcidzIGpvYiB0byBlbnN1cmUgdGhh dCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgU1FMIHN0YXRlbWVudApAQCAtOTMxLDcgKzk0MSw3IEBA IFNldENvbnN0YW50TGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVy eSwKICAqIFJldHVybnMgYSBwYWxsb2MnZCBzdHJpbmcuCiAgKi8KIGNoYXIgKgotR2VuZXJhdGVO b3JtYWxpemVkUXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCitH ZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShjb25zdCBKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBj aGFyICpxdWVyeSwKIAkJCQkJCWludCBxdWVyeV9sb2MsIGludCAqcXVlcnlfbGVuX3ApCiB7CiAJ Y2hhcgkgICAqbm9ybV9xdWVyeTsKQEAgLTk0MywxMiArOTUzLDE0IEBAIEdlbmVyYXRlTm9ybWFs aXplZFF1ZXJ5KEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCWxh c3Rfb2ZmID0gMCwJLyogT2Zmc2V0IGZyb20gc3RhcnQgZm9yIHByZXZpb3VzIHRvayAqLwogCQkJ CWxhc3RfdG9rX2xlbiA9IDA7CS8qIExlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoYXQgdG9rICovCiAJ aW50CQkJbnVtX2NvbnN0YW50c19yZXBsYWNlZCA9IDA7CisJTG9jYXRpb25MZW4gKmxvY3MgPSBO VUxMOwogCiAJLyoKLQkgKiBTZXQgY29uc3RhbnRzJyBsZW5ndGhzIGluIEp1bWJsZVN0YXRlLCBh cyBvbmx5IGxvY2F0aW9ucyBhcmUgc2V0IGR1cmluZwotCSAqIERvSnVtYmxlKCkuIE5vdGUgdGhp cyBhbHNvIGVuc3VyZXMgdGhlIGl0ZW1zIGFyZSBzb3J0ZWQgYnkgbG9jYXRpb24uCisJICogRGV0 ZXJtaW5lIGNvbnN0YW50cycgbGVuZ3Rocywgd2hpY2ggYXJlIG5vdCBzZXQgZHVyaW5nIERvSnVt YmxlKCksIGFuZAorCSAqIHJldHVybiBhIHNvcnRlZCBjb3B5IG9mIGpzdGF0ZSdzIExvY2F0aW9u TGVuIGRhdGEgd2l0aCBsZW5ndGhzIGZpbGxlZAorCSAqIGluLgogCSAqLwotCVNldENvbnN0YW50 TGVuZ3Rocyhqc3RhdGUsIHF1ZXJ5LCBxdWVyeV9sb2MpOworCWxvY3MgPSBDb21wdXRlQ29uc3Rh bnRMZW5ndGhzKGpzdGF0ZSwgcXVlcnksIHF1ZXJ5X2xvYyk7CiAKIAkvKgogCSAqIEFsbG93IGZv ciAkbiBzeW1ib2xzIHRvIGJlIGxvbmdlciB0aGFuIHRoZSBjb25zdGFudHMgdGhleSByZXBsYWNl LgpAQCAtOTc0LDE1ICs5ODYsMTUgQEAgR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoSnVtYmxlU3Rh dGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJCSAqIHRoZSBwYXJhbWV0ZXIgaW4gdGhl IG5leHQgaXRlcmF0aW9uIChvciBhZnRlciB0aGUgbG9vcCBpcyBkb25lKSwKIAkJICogd2hpY2gg aXMgYSBiaXQgb2RkIGJ1dCBzZWVtcyB0byB3b3JrIG9rYXkgaW4gbW9zdCBjYXNlcy4KIAkJICov Ci0JCWlmIChqc3RhdGUtPmNsb2NhdGlvbnNbaV0uZXh0ZXJuX3BhcmFtICYmICFqc3RhdGUtPmhh c19zcXVhc2hlZF9saXN0cykKKwkJaWYgKGxvY3NbaV0uZXh0ZXJuX3BhcmFtICYmICFqc3RhdGUt Pmhhc19zcXVhc2hlZF9saXN0cykKIAkJCWNvbnRpbnVlOwogCi0JCW9mZiA9IGpzdGF0ZS0+Y2xv Y2F0aW9uc1tpXS5sb2NhdGlvbjsKKwkJb2ZmID0gbG9jc1tpXS5sb2NhdGlvbjsKIAotCQkvKiBB ZGp1c3QgdGhlIGNvbnN0YW50J3MgbG9jYXRpb24gKHNlZSBTZXRDb25zdGFudExlbmd0aHMpICov CisJCS8qIEFkanVzdCB0aGUgY29uc3RhbnQncyBsb2NhdGlvbiAoc2VlIENvbXB1dGVDb25zdGFu dExlbmd0aHMpICovCiAJCW9mZiAtPSBxdWVyeV9sb2M7CiAKLQkJdG9rX2xlbiA9IGpzdGF0ZS0+ Y2xvY2F0aW9uc1tpXS5sZW5ndGg7CisJCXRva19sZW4gPSBsb2NzW2ldLmxlbmd0aDsKIAogCQlp ZiAodG9rX2xlbiA8IDApCiAJCQljb250aW51ZTsJCQkvKiBpZ25vcmUgYW55IGR1cGxpY2F0ZXMg Ki8KQEAgLTEwMDEsNyArMTAxMyw3IEBAIEdlbmVyYXRlTm9ybWFsaXplZFF1ZXJ5KEp1bWJsZVN0 YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkgKi8KIAkJbl9xdWVyX2xvYyArPSBz cHJpbnRmKG5vcm1fcXVlcnkgKyBuX3F1ZXJfbG9jLCAiJCVkJXMiLAogCQkJCQkJCSAgbnVtX2Nv bnN0YW50c19yZXBsYWNlZCArIDEgKyBqc3RhdGUtPmhpZ2hlc3RfZXh0ZXJuX3BhcmFtX2lkLAot CQkJCQkJCSAganN0YXRlLT5jbG9jYXRpb25zW2ldLnNxdWFzaGVkID8gIiAvKiwgLi4uICovIiA6 ICIiKTsKKwkJCQkJCQkgIGxvY3NbaV0uc3F1YXNoZWQgPyAiIC8qLCAuLi4gKi8iIDogIiIpOwog CQludW1fY29uc3RhbnRzX3JlcGxhY2VkKys7CiAKIAkJLyogbW92ZSBmb3J3YXJkICovCkBAIC0x MDEwLDYgKzEwMjIsMTAgQEAgR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoSnVtYmxlU3RhdGUgKmpz dGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJCWxhc3RfdG9rX2xlbiA9IHRva19sZW47CiAJfQog CisJLyogQ2xlYW4gdXAgdGVtcG9yYXJ5IGxvY2F0aW9uIGFycmF5IGJlZm9yZSBhbnkgYXNzZXJ0 aW9ucyAqLworCWlmIChsb2NzKQorCQlwZnJlZShsb2NzKTsKKwogCS8qCiAJICogV2UndmUgY29w aWVkIHVwIHVudGlsIHRoZSBsYXN0IGlnbm9yYWJsZSBjb25zdGFudC4gIENvcHkgb3ZlciB0aGUK IAkgKiByZW1haW5pbmcgYnl0ZXMgb2YgdGhlIG9yaWdpbmFsIHF1ZXJ5IHN0cmluZy4KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9xdWVyeWp1bWJsZS5oCmluZGV4IGUzNTRmODU3YzM3Li44MzY0ZDU4ZTRjYiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9xdWVyeWp1bWJsZS5oCkBAIC05MSw4ICs5MSwxMCBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50 IGNvbXB1dGVfcXVlcnlfaWQ7CiAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKkNsZWFuUXVlcnl0ZXh0 KGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQgKmxvY2F0aW9uLCBpbnQgKmxlbik7Ci1leHRlcm4gY2hh ciAqR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hh ciAqcXVlcnksCitleHRlcm4gY2hhciAqR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoY29uc3QgSnVt YmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJCQkJCQkJCQkgaW50IHF1ZXJ5 X2xvYywgaW50ICpxdWVyeV9sZW5fcCk7CitleHRlcm4gTG9jYXRpb25MZW4gKkNvbXB1dGVDb25z dGFudExlbmd0aHMoY29uc3QgSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnks CisJCQkJCQkJCQkJICAgaW50IHF1ZXJ5X2xvYyk7CiBleHRlcm4gSnVtYmxlU3RhdGUgKkp1bWJs ZVF1ZXJ5KFF1ZXJ5ICpxdWVyeSk7CiBleHRlcm4gdm9pZCBFbmFibGVRdWVyeUlkKHZvaWQpOwog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oIGIvc3JjL2luY2x1ZGUv cGFyc2VyL2FuYWx5emUuaAppbmRleCBlMTAyNzBmZjBmZi4uYjJkYjZmYTRlOGMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3BhcnNlci9hbmFseXplLmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2Vy L2FuYWx5emUuaApAQCAtMjEsNyArMjEsNyBAQAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQg Y29udHJvbCBhdCBlbmQgb2YgcGFyc2UgYW5hbHlzaXMgKi8KIHR5cGVkZWYgdm9pZCAoKnBvc3Rf cGFyc2VfYW5hbHl6ZV9ob29rX3R5cGUpIChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJ CSAgUXVlcnkgKnF1ZXJ5LAotCQkJCQkJCQkJCQkgIEp1bWJsZVN0YXRlICpqc3RhdGUpOworCQkJ CQkJCQkJCQkgIGNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUpOwogZXh0ZXJuIFBHRExMSU1QT1JU IHBvc3RfcGFyc2VfYW5hbHl6ZV9ob29rX3R5cGUgcG9zdF9wYXJzZV9hbmFseXplX2hvb2s7CiAK IAotLSAKMi40Ny4zCgo= --000000000000851758064df09490--