Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p60YD-0001Yk-An for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Dec 2022 02:34:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p60YC-0007Pq-3Y for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Dec 2022 02:34:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p60YB-0007Pg-Iy for pgsql-hackers@lists.postgresql.org; Fri, 16 Dec 2022 02:34:15 +0000 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p60Y8-0004GU-Pp for pgsql-hackers@postgresql.org; Fri, 16 Dec 2022 02:34:15 +0000 Received: by mail-pl1-x635.google.com with SMTP id x2so914042plb.13 for ; Thu, 15 Dec 2022 18:34:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=g/wzo87tGEDSsraq8QMiuuZhqkwCkEahHV6Rd5LY8kI=; b=OT+Vd9SVLPnO6KoplxpjZn7REM7IYB3CQDHrL8oHPOAKJOswIcVwfat20vbFxwK9x+ a4cyVv1AyqeOUe342nnK6sliyYgERLSYlQHcbqScSC6KFjdPxq6lCNyyUQ0jGAaafJv4 Wc507JJAlOEGEBKSLBVj7R6whBsyS7gL+XYfXe/GlrDka7JSr+uXumz4IG8VAs3vW+NS 2HA9PdIfkznTXOL4Q0ATX4M1BKRVK/7Wi5dXxOQ6+PuRz8/6amjUiVewyyM3D/JWhWmI mYQ4Ovrkv+dV7KxSMNRl7y4xRdtsXQQMoJ46u/wqyTxU+z7XbXePANPirdErqaVx2FfA J2Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=g/wzo87tGEDSsraq8QMiuuZhqkwCkEahHV6Rd5LY8kI=; b=akgX7OUOENzQMjekVb/NAQTY4N/1u2xqv0D3KMegadlV+wLwsOj5MKmoSXMFc4OTYY Nz0DZneM9jYT2zzlvWzib4tJmHv0QUyU86et0Nt7DtXSmHYbFUTkL5ygvNX+edTBoxem 6LPa/+St4WUzB62oix9zYzQpF5sGR5InHUEvzwcAsXk7BUG8Vp2+qza8krZM1EmCEb6k Y4MjtaBGAczyHVST9Qdw8HaW8w4vyVw6QJr8DbffXmsMCBZEg2mvOULb5KtZx98hPAd8 WxUTY/51O5vYCPhSbyTEb4AkQNJYso+Iomku49NEw/XwDHkxF7T3JDM21oNThdDoEXkY UtqQ== X-Gm-Message-State: AFqh2kqvifZTkpXckAhOm76p0HnKXhsajl7+HSLm6zfYcUWcxMdVEE7g NzqahOL3J2enUOuHP8xPBYDrWdnR6+lrnviSWvA= X-Google-Smtp-Source: AMrXdXvSWKnPJ7V7wU3JRe8YZB+/7bXvOKtP07QWq8SXHt+KYkt9E3N+FNC5kJ5NqwwPgLG7Qs+fJXHtAV0xoYtdt/k= X-Received: by 2002:a17:90a:ce84:b0:213:d08f:a483 with SMTP id g4-20020a17090ace8400b00213d08fa483mr923662pju.21.1671158050360; Thu, 15 Dec 2022 18:34:10 -0800 (PST) MIME-Version: 1.0 References: <20221212172407.veic522x37kmroli@alvherre.pgsql> In-Reply-To: From: Amit Langote Date: Fri, 16 Dec 2022 11:33:53 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Alvaro Herrera Cc: Robert Haas , Jacob Champion , David Rowley , Tom Lane , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000f51b4805efe8cd0f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f51b4805efe8cd0f Content-Type: text/plain; charset="UTF-8" On Wed, Dec 14, 2022 at 5:35 PM Amit Langote wrote: > I have moved the original functionality of GetCachedPlan() to > GetCachedPlanInternal(), turning the former into a sort of controller > as described shortly. The latter's CheckCachedPlan() part now only > locks the "minimal" set of, non-prunable, relations, making a note of > whether the plan contains any prunable subnodes and thus prunable > relations whose locking is deferred to the caller, GetCachedPlan(). > GetCachedPlan(), as a sort of controller as mentioned before, does the > pruning if needed on the minimally valid plan returned by > GetCachedPlanInternal(), locks the partitions that survive, and redoes > the whole thing if the locking of partitions invalidates the plan. After sleeping on it, I realized this doesn't have to be that complicated. Rather than turn GetCachedPlan() into a wrapper for handling deferred partition locking as outlined above, I could have changed it more simply as follows to get the same thing done: if (!customplan) { - if (CheckCachedPlan(plansource)) + bool hasUnlockedParts = false; + + if (CheckCachedPlan(plansource, &hasUnlockedParts) && + hasUnlockedParts && + CachedPlanLockPartitions(plansource, boundParams, owner, extra)) { /* We want a generic plan, and we already have a valid one */ plan = plansource->gplan; Attached updated patch does it like that. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com --000000000000f51b4805efe8cd0f Content-Type: application/octet-stream; name="v30-0002-In-GetCachedPlan-only-lock-unpruned-partitions.patch" Content-Disposition: attachment; filename="v30-0002-In-GetCachedPlan-only-lock-unpruned-partitions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpwbgee1 RnJvbSA0MTc2ODQzNjI4ZWYyOWMxZmYxNzNhZDBkZmJkZDEzZjdkMDdjMjI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMwIDIv Ml0gSW4gR2V0Q2FjaGVkUGxhbigpLCBvbmx5IGxvY2sgdW5wcnVuZWQgcGFydGl0aW9ucwoKVGhp cyBkb2VzIHR3byB0aGluZ3MgbWFpbmx5OgoKKiBUaGUgcGxhbm5lciBub3cgcmVtb3ZlcyB0aGUg UlQgaW5kZXhlcyBvZiAiaW5pdGlhbGx5IHBydW5hYmxlIgpwYXJ0aXRpb25zIGZyb20gUGxhbm5l ZFN0bXQubWluTG9ja1JlbGlkcyBzdWNoIHRoYXQgdGhlIHNldCBvbmx5CmNvbnRhaW5zIHRoZSBy ZWxhdGlvbnMgbm90IHN1YmplY3QgdG8gaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZy4gIFNvLApB Y3F1aXJlRXhlY3V0b3JMb2NrcyBvbmx5IGxvY2tzIGEgc3Vic2V0IG9mIHRoZSByZWxhdGlvbnMg Y29udGFpbmVkCmluIGEgcGxhbiwgZGVmZXJyaW5nIHRoZSBsb2NraW5nIG9mIHBydW5hYmxlIHJl bGF0aW9ucyB0byB0aGUgY2FsbGVyLgoKKiBHZXRDYWNoZWRQbGFucygpLCBpZiB0aGVyZSBhcmUg cHJ1bmFibGUgcmVsYXRpb25zIGluIHRoZSBwbGFuLApwZXJmb3JtcyB0aGUgaW5pdGlhbCBwYXJ0 aXRpb24gcHJ1bmluZyB1c2luZyBhdmFpbGFibGUgRVhURVJOIHBhcmFtcwphbmQgbG9ja3MgdGhl IHBhcnRpdGlvbnMgcmVtYWluaW5nIGFmdGVyIHRoYXQsIHNvIHRoZSB0aGUgQ2FjaGVkUGxhbgp0 aGF0J3MgcmV0dXJuZWQgaXMgdmFsaWQgaW4gYSByYWNlLWZyZWUgbWFubmVyIGluY2x1ZGluZyBm b3IgYW55CnBhcnRpdGlvbnMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgZHVyaW5nIGV4ZWN1dGlvbi4K ClRvIG1ha2UgdGhlIHBydW5pbmcgcG9zc2libGUgYmVmb3JlIGVudGVyaW5nIEV4ZWN1dG9yU3Rh cnQoKSwgdGhpcwphbHNvIGFkZHMgYSBFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZygpLCB3 aGljaCBjYW4gYmUgY2FsbGVkIGJ5CkdldENhY2hlZFBsYW4oKSBmb3IgYSBnaXZlbiBQbGFubmVk U3RtdC4KClRoZSByZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5n IHRoaXMgd2F5IGlzIG1hZGUKYXZhaWxhYmxlIHRvIHRoZSBhY3R1YWwgZXhlY3V0aW9uIHZpYSBQ YXJ0aXRpb25QcnVuZVJlc3VsdCwgb2Ygd2hpY2gKdGhlcmUgaXMgb25lIGZvciBldmVyeSBQYXJ0 dGlvblBydW5lSW5mbyBjb250YWluZWQgaW4gdGhlIFBsYW5uZWRTdG10LgpMaXN0IG9mIFBhcnRp dGlvblBydW5lUmVzdWx0IGZvciBhIGdpdmVuIFBsYW5uZWRTdG10IGFyZSByZXR1cm5lZCB0bwp0 byB0aGUgY2FsbGVycyBvZiBHZXRDYWNoZWRQbGFuKCkgdmlhIGl0cyBuZXcgb3V0cHV0IHBhcmFt ZXRlciBvZiB0eXBlCkNhY2hlZFBsYW5FeHRyYSwgd2hvc2UgbWVtYmVycyBjdXJyZW50bHkgb25s eSBpbmNsdWRlIHNhaWQgTGlzdC4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyAg ICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAg fCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgIHwgICA3ICst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyAgICAgICB8ICAgMiArLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3ByZXBhcmUuYyAgICAgICAgIHwgIDI4ICsrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L1JFQURNRSAgICAgICAgICAgIHwgIDMxICsrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNN YWluLmMgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5j ICAgIHwgIDI1ICsrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgfCAy MTUgKysrKysrKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0 aWxzLmMgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgICAg ICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgIHwgIDEx ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyB8ICAgNSArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAgICAgfCAgMzEgKysrLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgfCAgMzYgKysrKysKIHNyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYyAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC90Y29wL3BxdWVy eS5jICAgICAgICAgICAgICB8ICAyOCArKystCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFu Y2FjaGUuYyAgICB8IDIwNCArKysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvdXRp bHMvbW1nci9wb3J0YWxtZW0uYyAgICAgfCAgMTYgKysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4 cGxhaW4uaCAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0 aW9uLmggICB8ICAgNyArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCAgICAgICAg fCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgfCAgIDEgKwog c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNs dWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgIHwgIDMxICsrKy0KIHNyYy9pbmNsdWRlL3V0 aWxzL3BsYW5jYWNoZS5oICAgICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVkZS91dGlscy9wb3J0 YWwuaCAgICAgICAgICAgICB8ICAgMyArCiAyOCBmaWxlcyBjaGFuZ2VkLCA2NDAgaW5zZXJ0aW9u cygrKSwgODMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weXRvLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwppbmRleCBmMjZjYzBkMTYy Li40MDFhMjI4MGEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwpAQCAtNTU4LDcgKzU1OCw3IEBAIEJl Z2luQ29weVRvKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJKChEUl9jb3B5ICopIGRlc3QpLT5jc3Rh dGUgPSBjc3RhdGU7CiAKIAkJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIHJlcXVlc3Rpbmcgbm8gb3V0 cHV0ICovCi0JCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0 ZS0+cF9zb3VyY2V0ZXh0LAorCQljc3RhdGUtPnF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhw bGFuLCBOSUwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFw c2hvdCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQkJCWRlc3QsIE5V TEwsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggMTUyYzI5YjU1MS4uOTQy NDQ5NTQ0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zMjUsNyArMzI1LDcgQEAgRXhl Y0NyZWF0ZVRhYmxlQXMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVUYWJsZUFzU3RtdCAqc3Rt dCwKIAkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKIAogCQkvKiBDcmVhdGUgYSBR dWVyeURlc2MsIHJlZGlyZWN0aW5nIG91dHB1dCB0byBvdXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQkJ cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAor CQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTklMLCBwc3RhdGUtPnBfc291cmNl dGV4dCwKIAkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJ CQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIDApOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMK aW5kZXggZjg2OTgzYzY2MC4uMmYyYjU1ODYwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAt NDA3LDcgKzQwNyw3IEBAIEV4cGxhaW5PbmVRdWVyeShRdWVyeSAqcXVlcnksIGludCBjdXJzb3JP cHRpb25zLAogCQl9CiAKIAkJLyogcnVuIGl0IChpZiBuZWVkZWQpIGFuZCBwcm9kdWNlIG91dHB1 dCAqLwotCQlFeHBsYWluT25lUGxhbihwbGFuLCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFt cywgcXVlcnlFbnYsCisJCUV4cGxhaW5PbmVQbGFuKHBsYW4sIE5JTCwgaW50bywgZXMsIHF1ZXJ5 U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52LAogCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1 ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CiAJfQogfQpAQCAtNTE1LDcgKzUxNSw4IEBAIEV4 cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBs YWluU3RhdGUgKmVzLAogICogdG8gY2FsbCBpdC4KICAqLwogdm9pZAotRXhwbGFpbk9uZVBsYW4o UGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUg KmVzLAorRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBMaXN0ICpwYXJ0 X3BydW5lX3Jlc3VsdHMsCisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVz LAogCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAog CQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5k dXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSkKQEAgLTU2Myw3ICs1 NjQsNyBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1 c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCiAJ LyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnkgKi8KLQlxdWVyeURlc2MgPSBDcmVh dGVRdWVyeURlc2MocGxhbm5lZHN0bXQsIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0 ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwgcGFydF9wcnVuZV9yZXN1bHRzLCBxdWVyeVN0cmluZywK IAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlk ZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCBpbnN0cnVtZW50X29wdGlvbik7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXh0ZW5zaW9uLmMKaW5kZXggY2YxYjFjYTU3MS4uOTA0Y2JjYmE0YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXh0ZW5zaW9uLmMKQEAgLTc3OSw3ICs3NzksNyBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29uc3Qg Y2hhciAqc3FsKQogCQkJewogCQkJCVF1ZXJ5RGVzYyAgKnFkZXNjOwogCi0JCQkJcWRlc2MgPSBD cmVhdGVRdWVyeURlc2Moc3RtdCwKKwkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LCBO SUwsCiAJCQkJCQkJCQkJc3FsLAogCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIE5VTEws CiAJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKaW5k ZXggOGJhMjQzNmE3MS4uMDQ5YTkwZjQ5ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpAQCAtNDA5 LDcgKzQwOSw3IEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIgKmRlc3Qs IFF1ZXJ5ICpxdWVyeSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJLyog Q3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2Vp dmVyICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHF1ZXJ5U3RyaW5nLAor CXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOSUwsIHF1ZXJ5U3RyaW5nLAogCQkJ CQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCWRlc3Qs IE5VTEwsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVw YXJlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKaW5kZXggOWUyOTU4NGQ5My4u NzI5Mzg0YTlhNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwpAQCAtMTU0LDYgKzE1NCw3IEBAIEV4 ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUsCiB7CiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVu dHJ5OwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUNhY2hlZFBsYW5FeHRyYSAqY3BsYW5fZXh0cmEg PSBOVUxMOwogCUxpc3QJICAgKnBsYW5fbGlzdDsKIAlQYXJhbUxpc3RJbmZvIHBhcmFtTEkgPSBO VUxMOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gTlVMTDsKQEAgLTE5Myw3ICsxOTQsMTEgQEAgRXhl Y3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCSAgIGVudHJ5LT5wbGFuc291 cmNlLT5xdWVyeV9zdHJpbmcpOwogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVu dCBwbGFuIHJlZmNvdW50IGZvciBwb3J0YWwgKi8KLQljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50 cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIE5VTEwpOworCWNwbGFuID0gR2V0Q2FjaGVk UGxhbihlbnRyeS0+cGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgTlVMTCwKKwkJCQkJCSAgJmNw bGFuX2V4dHJhKTsKKwlBc3NlcnQoY3BsYW5fZXh0cmEgPT0gTlVMTCB8fAorCQkgICAobGlzdF9s ZW5ndGgoY3BsYW4tPnN0bXRfbGlzdCkgPT0KKwkJCWxpc3RfbGVuZ3RoKGNwbGFuX2V4dHJhLT5w YXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCkpKTsKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0 OwogCiAJLyoKQEAgLTIwNyw2ICsyMTIsOSBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkgIHBsYW5fbGlzdCwKIAkJCQkJICBjcGxhbik7CiAKKwlpZiAoY3BsYW5fZXh0 cmEpCisJCVBvcnRhbFNhdmVDYWNoZWRQbGFuRXh0cmEocG9ydGFsLCBjcGxhbl9leHRyYSk7CisK IAkvKgogCSAqIEZvciBDUkVBVEUgVEFCTEUgLi4uIEFTIEVYRUNVVEUsIHdlIG11c3QgdmVyaWZ5 IHRoYXQgdGhlIHByZXBhcmVkCiAJICogc3RhdGVtZW50IGlzIG9uZSB0aGF0IHByb2R1Y2VzIHR1 cGxlcy4gIEN1cnJlbnRseSB3ZSBpbnNpc3QgdGhhdCBpdCBiZQpAQCAtNTc1LDYgKzU4Myw3IEBA IEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICpp bnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCVByZXBhcmVkU3RhdGVtZW50ICplbnRyeTsKIAljb25z dCBjaGFyICpxdWVyeV9zdHJpbmc7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CisJQ2FjaGVkUGxhbkV4 dHJhICpjcGxhbl9leHRyYSA9IE5VTEw7CiAJTGlzdAkgICAqcGxhbl9saXN0OwogCUxpc3RDZWxs ICAgKnA7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKQEAgLTYxOSw3ICs2MjgsMTEg QEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2Ug KmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQgYWNx dWlyZSBhIHRyYW5zaWVudCByZWZjb3VudCAqLwogCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRy eS0+cGxhbnNvdXJjZSwgcGFyYW1MSSwKLQkJCQkJCSAgQ3VycmVudFJlc291cmNlT3duZXIsIHF1 ZXJ5RW52KTsKKwkJCQkJCSAgQ3VycmVudFJlc291cmNlT3duZXIsIHF1ZXJ5RW52LAorCQkJCQkJ ICAmY3BsYW5fZXh0cmEpOworCUFzc2VydChjcGxhbl9leHRyYSA9PSBOVUxMIHx8CisJCSAgIChs aXN0X2xlbmd0aChjcGxhbi0+c3RtdF9saXN0KSA9PQorCQkJbGlzdF9sZW5ndGgoY3BsYW5fZXh0 cmEtPnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KSkpOwogCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVO VChwbGFuZHVyYXRpb24pOwogCUlOU1RSX1RJTUVfU1VCVFJBQ1QocGxhbmR1cmF0aW9uLCBwbGFu c3RhcnQpOwpAQCAtNjM3LDEwICs2NTAsMTcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRl U3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJZm9y ZWFjaChwLCBwbGFuX2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9k ZShQbGFubmVkU3RtdCwgcCk7CisJCUxpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0cyA9IE5JTDsKKwor CQlpZiAoY3BsYW5fZXh0cmEpCisJCQlwYXJ0X3BydW5lX3Jlc3VsdHMgPSBsaXN0X250aF9ub2Rl KExpc3QsCisJCQkJCQkJCQkJCSAgIGNwbGFuX2V4dHJhLT5wYXJ0X3BydW5lX3Jlc3VsdHNfbGlz dCwKKwkJCQkJCQkJCQkJICAgZm9yZWFjaF9jdXJyZW50X2luZGV4KHApKTsKIAogCQlpZiAocHN0 bXQtPmNvbW1hbmRUeXBlICE9IENNRF9VVElMSVRZKQotCQkJRXhwbGFpbk9uZVBsYW4ocHN0bXQs IGludG8sIGVzLCBxdWVyeV9zdHJpbmcsIHBhcmFtTEksIHF1ZXJ5RW52LAotCQkJCQkJICAgJnBs YW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCkpOworCQkJRXhwbGFp bk9uZVBsYW4ocHN0bXQsIHBhcnRfcHJ1bmVfcmVzdWx0cywgaW50bywgZXMsIHF1ZXJ5X3N0cmlu ZywKKwkJCQkJCSAgIHBhcmFtTEksIHF1ZXJ5RW52LCAmcGxhbmR1cmF0aW9uLAorCQkJCQkJICAg KGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCkpOwogCQllbHNlCiAJCQlFeHBsYWluT25l VXRpbGl0eShwc3RtdC0+dXRpbGl0eVN0bXQsIGludG8sIGVzLCBxdWVyeV9zdHJpbmcsCiAJCQkJ CQkJICBwYXJhbUxJLCBxdWVyeUVudik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9SRUFETUUgYi9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKaW5kZXggMTc3NzVhNDllMi4u MjIyMmIzZWQ2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQpAQCAtNjMsNyArNjMsMzYgQEAgaWYgdGhlIGV4 ZWN1dG9yIGRldGVybWluZXMgdGhhdCBhbiBlbnRpcmUgc3VicGxhbiBpcyBub3QgcmVxdWlyZWQg ZHVlIHRvCiBleGVjdXRpb24gdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBkZXRlcm1pbmluZyB0aGF0 IG5vIG1hdGNoaW5nIHJlY29yZHMgd2lsbCBiZQogZm91bmQgdGhlcmUuICBUaGlzIGN1cnJlbnRs eSBvbmx5IG9jY3VycyBmb3IgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2Rlcy4gIEluCiB0aGlz IGNhc2UgdGhlIG5vbi1yZXF1aXJlZCBzdWJwbGFucyBhcmUgaWdub3JlZCBhbmQgdGhlIGV4ZWN1 dG9yIHN0YXRlJ3MKLXN1Ym5vZGUgYXJyYXkgd2lsbCBiZWNvbWUgb3V0IG9mIHNlcXVlbmNlIHRv IHRoZSBwbGFuJ3Mgc3VicGxhbiBsaXN0Lgorc3Vibm9kZSBhcnJheSB3aWxsIGJlY29tZSBvdXQg b2Ygc2VxdWVuY2UgdG8gdGhlIHBsYW4ncyBzdWJwbGFuIGxpc3QuICBOb3RlCit0aGF0IHRoaXMg aXMgcmVmZXJyZWQgdG8gYXMgImluaXRpYWwiIHBydW5pbmcsIGJlY2F1c2UgaXQgbmVlZHMgdG8g b2NjdXIgb25seQorb25jZSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBzdGFydHVwLCBhbmQgdXNlcyBh IHNldCBvZiBwcnVuaW5nIHN0ZXBzIGNhbGxlZAoraW5pdGlhbCBwcnVuaW5nIHN0ZXBzIChzZWUg UGFydGl0aW9uZWRSZWxQcnVuZUluZm8uaW5pdGlhbF9wcnVuaW5nX3N0ZXBzKS4KKworQWN0dWFs bHksICJpbml0aWFsIiBwcnVuaW5nIG1heSBvY2N1ciBldmVuIGJlZm9yZSB0aGUgZXhlY3V0aW9u IHN0YXJ0dXAgaW4KK2luIHNvbWUgY2FzZXMuICBGb3IgZXhhbXBsZSwgd2hlbiBhIGNhY2hlZCBn ZW5lcmljIHBsYW4gaXMgdmFsaWRhdGVkIGZvcgorZXhlY3V0aW9uLCB3aGljaCB3b3JrcyBieSBs b2NraW5nIGFsbCB0aGUgcmVsYXRpb25zIHRoYXQgd2lsbCBiZSBzY2FubmVkIGJ5Cit0aGF0IHBs YW4gZHVyaW5nIGV4ZWN1dGlvbi4gIElmIHRoZSBnZW5lcmljIHBsYW4gY29udGFpbnMgcGxhbiBu b2RlcyB0aGF0IGhhdmUKK3BydW5hYmxlIGNoaWxkIHN1Ym5vZGVzLCB0aGVuIHRoaXMgdmFsaWRh dGlvbiBsb2NraW5nIGlzIHBlcmZvcm1lZCBhZnRlcgorcHJ1bmluZyBjaGlsZCBzdWJub2RlcyB0 aGF0IG5lZWQgbm90IGJlIHNjYW5uZWQgZHVyaW5nIGV4ZWN1dGlvbiwgdGhhdCBpcywKK3VzaW5n IGluaXRpYWwgcHJ1bmluZyBzdGVwcy4gIFdoZW4gc3VjaCBhIGdlbmVyaWMgcGxhbiBpcyBmb3J3 YXJkZWQgZm9yCitleGVjdXRpb24sIGl0IG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIHNldCBv ZiBQYXJ0aXRpb25QcnVuZVJlc3VsdCBub2RlcyB0aGF0Citjb250YWluIHRoZSByZXN1bHQgb2Yg dGhhdCBwcnVuaW5nLCB3aGljaCBiYXNpY2FsbHkgY29uc2lzdHMgb2YgYSBiaXRtYXBzZXQgb2YK K2NoaWxkIHN1Ym5vZGUgaW5kZXhlcyB0aGF0IHN1cnZpdmVkIHRoZSBwcnVuaW5nIGFuZCB0aHVz IHdob3NlIHJlbGF0aW9ucyB3b3VsZAoraGF2ZSBiZWVuIGxvY2tlZCBmb3IgZXhlY3V0aW9uLiAg VGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UsIHVubGlrZSB0aGUKK3BsYW4tdGltZSBwcnVuaW5n IGFuZCBhY3R1YWwgZXhlY3V0b3Itc3RhcnR1cCBwcnVuaW5nLCB0aGlzIGRvZXMgbm90IGFjdHVh bGx5CityZW1vdmUgdGhlIHBydW5lZCBzdWJub2RlcyBmcm9tIHRoZSBwbGFuIHRyZWUsIGJ1dCBv bmx5IG1hcmtzIHRoZW0gYXMgYmVpbmcKK3BydW5lZC4gIFNvLCB0aGUgZXhlY3V0b3IgY29kZSAo Y29yZSBvciB0aGlyZCBwYXJ0eSksIGVzcGVjaWFsbHkgb25lIHRoYXQgcnVucworYmVmb3JlIEV4 ZWN1dG9yU3RhcnQoKSBhbmQgdGh1cyBsb29rcyBhdCBiYXJlIFBsYW4gdHJlZXMgKG5vdCBQbGFu U3RhdGUgdHJlZXMpCittdXN0IGJld2FyZSBvZiBwbGFuIG5vZGVzIHRoYXQgbWF5IGFjdHVhbGx5 IGhhdmUgYmVlbiBwcnVuZWQgYW5kIHRodXMgc3ViamVjdAordG8gYmVpbmcgaW52YWxpZGF0ZWQg YnkgY29uY3VycmVudCBzY2hlbWEgY2hhbmdlcy4gIEZvciBwbGFuIG5vZGVzIHRoYXQgY2FuCito YXZlIHBydW5hYmxlIGNoaWxkIHN1Ym5vZGVzIGFuZCB0aHVzIGNvbnRhaW4gYSBQYXJ0aXRpb25Q cnVuZUluZm8sIHN1Y2ggY29kZQorbXVzdCBhbHdheXMgY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRp bmcgUGFydGl0aW9uUHJ1bmVSZXN1bHQgZXhpc3RzCitpbiBFU3RhdGUuZXNfcGFydF9wcnVuZV9y ZXN1bHRzIGF0IGdpdmVuIHBhcnRfcHJ1bmVfaW5kZXggYW5kIHVzZSB0aGF0IHRvCitkZWNpZGUg d2hpY2ggc3VicGxhbnMgYXJlIHZhbGlkIGZvciBleGVjdXRpb24gaW5zdGVhZCBvZiByZWRvaW5n IHRoZSBwcnVuaW5nLgorTm90ZSB0aGF0IHRoYXQgaXMgbm90IGp1c3QgYSBwZXJmb3JtYW5jZSBv cHRpbWl6YXRpb24gYnV0IGFsc28gbmVjZXNzYXJ5IHRvCithdm9pZCBwb3NzaWJseSBlbmRpbmcg dXAgY29uc2lkZXJpbmcgYSBkaWZmZXJlbnQgc2V0IG9mIGNoaWxkIHN1Ym5vZGVzIGFzIHZhbGlk Cit0aGFuIHRoZSBzZXQgQ2FjaGVkUGxhbkxvY2tQYXJ0aXRpb25zKCkgd291bGQgaGF2ZSBsb2Nr ZWQgdGhlIHJlbGF0aW9ucyBvZiwgaWYKK3RoZSBwcnVuaW5nIHN0ZXBzIHByb2R1Y2UgYSBkaWZm ZXJlbnQgcmVzdWx0IHdoZW4gZXhlY3V0ZWQgbXVsdGlwbGUgdGltZXMuCiAKIEVhY2ggUGxhbiBu b2RlIG1heSBoYXZlIGV4cHJlc3Npb24gdHJlZXMgYXNzb2NpYXRlZCB3aXRoIGl0LCB0byByZXBy ZXNlbnQKIGl0cyB0YXJnZXQgbGlzdCwgcXVhbGlmaWNhdGlvbiBjb25kaXRpb25zLCBldGMuICBU aGVzZSB0cmVlcyBhcmUgYWxzbwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggMmMyYjNhODg3 NC4uMjI5ZjYxZjcyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4u YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC03OTgsNiArNzk4LDcg QEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiB7CiAJQ21kVHlw ZQkJb3BlcmF0aW9uID0gcXVlcnlEZXNjLT5vcGVyYXRpb247CiAJUGxhbm5lZFN0bXQgKnBsYW5u ZWRzdG10ID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdDsKKwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jl c3VsdHMgPSBxdWVyeURlc2MtPnBhcnRfcHJ1bmVfcmVzdWx0czsKIAlQbGFuCSAgICpwbGFuID0g cGxhbm5lZHN0bXQtPnBsYW5UcmVlOwogCUxpc3QJICAgKnJhbmdlVGFibGUgPSBwbGFubmVkc3Rt dC0+cnRhYmxlOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7CkBAIC04 MTksNiArODIwLDcgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Mp CiAKIAllc3RhdGUtPmVzX3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CiAJZXN0YXRlLT5lc19w YXJ0X3BydW5lX2luZm9zID0gcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ ZXNfcGFydF9wcnVuZV9yZXN1bHRzID0gcGFydF9wcnVuZV9yZXN1bHRzOwogCiAJLyoKIAkgKiBO ZXh0LCBidWlsZCB0aGUgRXhlY1Jvd01hcmsgYXJyYXkgZnJvbSB0aGUgUGxhblJvd01hcmsocyks IGlmIGFueS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKaW5kZXggNjVjNGI2M2JiZC4u OTc0NWViYTBhZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVs LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKQEAgLTY2LDYgKzY2 LDcgQEAKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1FVRVJZX1RFWFQJCVVJTlQ2NENPTlNUKDB4RTAw MDAwMDAwMDAwMDAwOCkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX0pJVF9JTlNUUlVNRU5UQVRJT04g VUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDA5KQogI2RlZmluZSBQQVJBTExFTF9LRVlfV0FM X1VTQUdFCQkJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDBBKQorI2RlZmluZSBQQVJBTExF TF9LRVlfUEFSVElUSU9OX1BSVU5FX1JFU1VMVFMJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAw MDBCKQogCiAjZGVmaW5lIFBBUkFMTEVMX1RVUExFX1FVRVVFX1NJWkUJCTY1NTM2CiAKQEAgLTU5 OSwxMiArNjAwLDE1IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBFU3RhdGUgKmVzdGF0ZSwKIAlGaXhlZFBhcmFsbGVsRXhlY3V0b3JTdGF0ZSAqZnBlczsKIAlj aGFyCSAgICpwc3RtdF9kYXRhOwogCWNoYXIJICAgKnBzdG10X3NwYWNlOworCWNoYXIJICAgKnBh cnRfcHJ1bmVfcmVzdWx0c19kYXRhOworCWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19zcGFj ZTsKIAljaGFyCSAgICpwYXJhbWxpc3RpbmZvX3NwYWNlOwogCUJ1ZmZlclVzYWdlICpidWZ1c2Fn ZV9zcGFjZTsKIAlXYWxVc2FnZSAgICp3YWx1c2FnZV9zcGFjZTsKIAlTaGFyZWRFeGVjdXRvcklu c3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudGF0aW9uID0gTlVMTDsKIAlTaGFyZWRKaXRJbnN0cnVt ZW50YXRpb24gKmppdF9pbnN0cnVtZW50YXRpb24gPSBOVUxMOwogCWludAkJCXBzdG10X2xlbjsK KwlpbnQJCQlwYXJ0X3BydW5lX3Jlc3VsdHNfbGVuOwogCWludAkJCXBhcmFtbGlzdGluZm9fbGVu OwogCWludAkJCWluc3RydW1lbnRhdGlvbl9sZW4gPSAwOwogCWludAkJCWppdF9pbnN0cnVtZW50 YXRpb25fbGVuID0gMDsKQEAgLTYzMyw2ICs2MzcsNyBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAKIAkvKiBGaXggdXAgYW5kIHNl cmlhbGl6ZSBwbGFuIHRvIGJlIHNlbnQgdG8gd29ya2Vycy4gKi8KIAlwc3RtdF9kYXRhID0gRXhl Y1NlcmlhbGl6ZVBsYW4ocGxhbnN0YXRlLT5wbGFuLCBlc3RhdGUpOworCXBhcnRfcHJ1bmVfcmVz dWx0c19kYXRhID0gbm9kZVRvU3RyaW5nKGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzKTsK IAogCS8qIENyZWF0ZSBhIHBhcmFsbGVsIGNvbnRleHQuICovCiAJcGN4dCA9IENyZWF0ZVBhcmFs bGVsQ29udGV4dCgicG9zdGdyZXMiLCAiUGFyYWxsZWxRdWVyeU1haW4iLCBud29ya2Vycyk7CkBA IC02NTksNiArNjY0LDExIEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3Rp bWF0b3IsIHBzdG10X2xlbik7CiAJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0 b3IsIDEpOwogCisJLyogRXN0aW1hdGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQgTGlzdCBvZiBQYXJ0 aXRpb25QcnVuZVJlc3VsdC4gKi8KKwlwYXJ0X3BydW5lX3Jlc3VsdHNfbGVuID0gc3RybGVuKHBh cnRfcHJ1bmVfcmVzdWx0c19kYXRhKSArIDE7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4 dC0+ZXN0aW1hdG9yLCBwYXJ0X3BydW5lX3Jlc3VsdHNfbGVuKTsKKwlzaG1fdG9jX2VzdGltYXRl X2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisKIAkvKiBFc3RpbWF0ZSBzcGFjZSBmb3Igc2Vy aWFsaXplZCBQYXJhbUxpc3RJbmZvLiAqLwogCXBhcmFtbGlzdGluZm9fbGVuID0gRXN0aW1hdGVQ YXJhbUxpc3RTcGFjZShlc3RhdGUtPmVzX3BhcmFtX2xpc3RfaW5mbyk7CiAJc2htX3RvY19lc3Rp bWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJhbWxpc3RpbmZvX2xlbik7CkBAIC03NTMs NiArNzYzLDEyIEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBF U3RhdGUgKmVzdGF0ZSwKIAltZW1jcHkocHN0bXRfc3BhY2UsIHBzdG10X2RhdGEsIHBzdG10X2xl bik7CiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUExBTk5FRFNUTVQs IHBzdG10X3NwYWNlKTsKIAorCS8qIFN0b3JlIHNlcmlhbGl6ZWQgTGlzdCBvZiBQYXJ0aXRpb25Q cnVuZVJlc3VsdCAqLworCXBhcnRfcHJ1bmVfcmVzdWx0c19zcGFjZSA9IHNobV90b2NfYWxsb2Nh dGUocGN4dC0+dG9jLCBwYXJ0X3BydW5lX3Jlc3VsdHNfbGVuKTsKKwltZW1jcHkocGFydF9wcnVu ZV9yZXN1bHRzX3NwYWNlLCBwYXJ0X3BydW5lX3Jlc3VsdHNfZGF0YSwgcGFydF9wcnVuZV9yZXN1 bHRzX2xlbik7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUEFSVElU SU9OX1BSVU5FX1JFU1VMVFMsCisJCQkJICAgcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlKTsKKwog CS8qIFN0b3JlIHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX3Nw YWNlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVuKTsKIAlz aG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBwYXJh bWxpc3RpbmZvX3NwYWNlKTsKQEAgLTEyMzQsOCArMTI1MCwxMCBAQCBFeGVjUGFyYWxsZWxHZXRR dWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCQkJCQkJIGlu dCBpbnN0cnVtZW50X29wdGlvbnMpCiB7CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsKKwljaGFyCSAg ICpwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2U7CiAJY2hhcgkgICAqcGFyYW1zcGFjZTsKIAlQbGFu bmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRzOwogCVBhcmFtTGlz dEluZm8gcGFyYW1MSTsKIAljaGFyCSAgICpxdWVyeVN0cmluZzsKIApAQCAtMTI0NiwxMiArMTI2 NCwxNyBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2 ZXIgKnJlY2VpdmVyLAogCXBzdG10c3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVM X0tFWV9QTEFOTkVEU1RNVCwgZmFsc2UpOwogCXBzdG10ID0gKFBsYW5uZWRTdG10ICopIHN0cmlu Z1RvTm9kZShwc3RtdHNwYWNlKTsKIAorCS8qIFJlY29uc3RydWN0IGxlYWRlci1zdXBwbGllZCBQ YXJ0aXRpb25QcnVuZVJlc3VsdC4gKi8KKwlwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UgPQorCQlz aG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9QQVJUSVRJT05fUFJVTkVfUkVTVUxUUywg ZmFsc2UpOworCXBhcnRfcHJ1bmVfcmVzdWx0cyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShwYXJ0 X3BydW5lX3Jlc3VsdHNfc3BhY2UpOworCiAJLyogUmVjb25zdHJ1Y3QgUGFyYW1MaXN0SW5mby4g Ki8KIAlwYXJhbXNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSQU1M SVNUSU5GTywgZmFsc2UpOwogCXBhcmFtTEkgPSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNwYWNl KTsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5LiAqLwotCXJldHVybiBD cmVhdGVRdWVyeURlc2MocHN0bXQsCisJcmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwgcGFy dF9wcnVuZV9yZXN1bHRzLAogCQkJCQkJICAgcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBHZXRBY3Rp dmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkgICByZWNlaXZlciwgcGFyYW1M SSwgTlVMTCwgaW5zdHJ1bWVudF9vcHRpb25zKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRp b24uYwppbmRleCA1YjYyMTU3NzEyLi5kY2QyYmIwZjkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNp bmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRi b3VuZHMuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGRlc2MuaCIKICNpbmNsdWRlICJw YXJ0aXRpb25pbmcvcGFydHBydW5lLmgiCkBAIC0xODUsNyArMTg2LDExIEBAIHN0YXRpYyBjaGFy ICpFeGVjQnVpbGRTbG90UGFydGl0aW9uS2V5RGVzY3JpcHRpb24oUmVsYXRpb24gcmVsLAogc3Rh dGljIExpc3QgKmFkanVzdF9wYXJ0aXRpb25fY29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0UmVs SW5mbyAqbGVhZl9wYXJ0X3JyaSk7CiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xu b3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1hcCk7CiBzdGF0aWMgUGFy dGl0aW9uUHJ1bmVTdGF0ZSAqQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBs YW5zdGF0ZSwKLQkJCQkJCQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKTsK KwkJCQkJCQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJCQkJCQkJ CQkJCSAgYm9vbCBjb25zaWRlcl9pbml0aWFsX3N0ZXBzLAorCQkJCQkJCQkJCQkJCSAgYm9vbCBj b25zaWRlcl9leGVjX3N0ZXBzLAorCQkJCQkJCQkJCQkJCSAgTGlzdCAqcnRhYmxlLCBFeHByQ29u dGV4dCAqZWNvbnRleHQsCisJCQkJCQkJCQkJCQkJICBQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGRp cik7CiBzdGF0aWMgdm9pZCBJbml0UGFydGl0aW9uUHJ1bmVDb250ZXh0KFBhcnRpdGlvblBydW5l Q29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCSAgTGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJ CQkJCSAgUGFydGl0aW9uRGVzYyBwYXJ0ZGVzYywKQEAgLTE5OCw3ICsyMDMsOCBAQCBzdGF0aWMg dm9pZCBQYXJ0aXRpb25QcnVuZUZpeFN1YlBsYW5NYXAoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1 bmVzdGF0ZSwKIHN0YXRpYyB2b2lkIGZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0 aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCQkJCQkJCQkJCSAgIFBhcnRpdGlvbmVkUmVs UHJ1bmluZ0RhdGEgKnBwcnVuZSwKIAkJCQkJCQkJCQkgICBib29sIGluaXRpYWxfcHJ1bmUsCi0J CQkJCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFucyk7CisJCQkJCQkJCQkJICAgQml0 bWFwc2V0ICoqdmFsaWRzdWJwbGFucywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKipzY2FuX2xl YWZwYXJ0X3J0aXMpOwogCiAKIC8qCkBAIC0xNzQyLDcgKzE3NDgsOCBAQCBhZGp1c3RfcGFydGl0 aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKQogICog Y29uc2lkZXJlZCB0byBiZSBhIHN0YWJsZSBleHByZXNzaW9uLCBpdCBjYW4gY2hhbmdlIHZhbHVl IGZyb20gb25lIHBsYW4KICAqIG5vZGUgc2NhbiB0byB0aGUgbmV4dCBkdXJpbmcgcXVlcnkgZXhl Y3V0aW9uLiAgU3RhYmxlIGNvbXBhcmlzb24KICAqIGV4cHJlc3Npb25zIHRoYXQgZG9uJ3QgaW52 b2x2ZSBzdWNoIFBhcmFtcyBhbGxvdyBwYXJ0aXRpb24gcHJ1bmluZyB0byBiZQotICogZG9uZSBv bmNlIGR1cmluZyBleGVjdXRvciBzdGFydHVwLiAgRXhwcmVzc2lvbnMgdGhhdCBkbyBpbnZvbHZl IHN1Y2ggUGFyYW1zCisgKiBkb25lIG9uY2UgZHVyaW5nIGV4ZWN1dG9yIHN0YXJ0dXAgb3IgZXZl biBiZWZvcmUgdGhhdCwgc3VjaCBhcyB3aGVuIGNhbGxlZAorICogZnJvbSBDYWNoZWRQbGFuTG9j a1BhcnRpdGlvbnMoKS4gIEV4cHJlc3Npb25zIHRoYXQgZG8gaW52b2x2ZSBzdWNoIFBhcmFtcwog ICogcmVxdWlyZSB1cyB0byBwcnVuZSBzZXBhcmF0ZWx5IGZvciBlYWNoIHNjYW4gb2YgdGhlIHBh cmVudCBwbGFuIG5vZGUuCiAgKgogICogTm90ZSB0aGF0IHBydW5pbmcgYXdheSB1bm5lZWRlZCBz dWJwbGFucyBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBoYXMgdGhlCkBAIC0xNzYwLDYgKzE3Njcs MTIgQEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0 ck1hcCAqYXR0ck1hcCkKICAqCQlhY2NvdW50IGZvciBpbml0aWFsIHBydW5pbmcgcG9zc2libHkg aGF2aW5nIGVsaW1pbmF0ZWQgc29tZSBvZiB0aGUKICAqCQlzdWJwbGFucy4KICAqCisgKiBFeGVj UGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZzoKKyAqCQlEbyBpbml0aWFsIHBydW5pbmcgd2l0aCB0 aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIGEgZ2l2ZW4KKyAqCQlQYXJ0aXRpb25QcnVuZUlu Zm8gdG8gZGV0ZXJtaW5lIHRoZSBzZXQgb2YgdGhlIHBhcmVudCBwbGFuIG5vZGUncworICoJCWNo aWxkIHN1Ym5vZGVzIHRoYXQgYXJlIHZhbGlkIGZvciBleGVjdXRpb24gYW5kIGFsc28gdGhlIHNl dCBvZiB0aGUgUlQKKyAqCQlpbmRleGVzIG9mIGxlYWYgcGFydGl0aW9ucyBzY2FubmVkIGJ5IHRo b3NlIHN1Ym5vZGVzLgorICoKICAqIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFuczoKICAqCQlSZXR1 cm5zIGluZGV4ZXMgb2YgbWF0Y2hpbmcgc3VicGxhbnMgYWZ0ZXIgZXZhbHVhdGluZyB0aGUgZXhw cmVzc2lvbnMKICAqCQl0aGF0IGFyZSBzYWZlIHRvIGV2YWx1YXRlIGF0IGEgZ2l2ZW4gcG9pbnQu ICBUaGlzIGZ1bmN0aW9uIGlzIGZpcnN0CkBAIC0xNzgwLDggKzE3OTMsMTAgQEAgYWRqdXN0X3Bh cnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1hcCkK ICAqCiAgKiBPbiByZXR1cm4sICppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgaXMgYXNzaWduZWQg dGhlIHNldCBvZiBpbmRleGVzIG9mCiAgKiBjaGlsZCBzdWJwbGFucyB0aGF0IG11c3QgYmUgaW5p dGlhbGl6ZWQgYWxvbmcgd2l0aCB0aGUgcGFyZW50IHBsYW4gbm9kZS4KLSAqIEluaXRpYWwgcHJ1 bmluZyBpcyBwZXJmb3JtZWQgaGVyZSBpZiBuZWVkZWQgYW5kIGluIHRoYXQgY2FzZSBvbmx5IHRo ZQotICogc3Vydml2aW5nIHN1YnBsYW5zJyBpbmRleGVzIGFyZSBhZGRlZC4KKyAqIFRoYXQgc2V0 IGlzIGNvbXB1dGVkIGJ5IGVpdGhlciBwZXJmb3JtaW5nIHRoZSAiaW5pdGlhbCBwcnVuaW5nIiBo ZXJlIG9yCisgKiByZXVzaW5nIHRoZSBvbmUgcHJlc2VudCBpbiBFU3RhdGUuZXNfcGFydF9wcnVu ZV9yZXN1bHRzW3BhcnRfcHJ1bmVfaW5kZXhdCisgKiBpZiBpdCBoYXMgYmVlbiBzZXQsIHdoaWNo IGl0IHdvdWxkIGJlIGlmIENhY2hlZFBsYW5Mb2NrUGFydGl0aW9ucygpIHdvdWxkCisgKiBoYXZl IGRvbmUgdGhlIGluaXRpYWwgcHJ1bmluZy4KICAqCiAgKiBJZiBzdWJwbGFucyBhcmUgaW5kZWVk IHBydW5lZCwgc3VicGxhbl9tYXAgYXJyYXlzIGNvbnRhaW5lZCBpbiB0aGUgcmV0dXJuZWQKICAq IFBhcnRpdGlvblBydW5lU3RhdGUgYXJlIHJlLXNlcXVlbmNlZCB0byBub3QgY291bnQgdGhvc2Us IHRob3VnaCBvbmx5IGlmIHRoZQpAQCAtMTc5NCw5ICsxODA5LDEwIEBAIEV4ZWNJbml0UGFydGl0 aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCSBCaXRtYXBzZXQgKnJvb3Rf cGFyZW50X3JlbGlkcywKIAkJCQkJCSBCaXRtYXBzZXQgKippbml0aWFsbHlfdmFsaWRfc3VicGxh bnMpCiB7Ci0JUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKKwlQYXJ0aXRpb25QcnVu ZVN0YXRlICpwcnVuZXN0YXRlID0gTlVMTDsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IHBsYW5zdGF0 ZS0+c3RhdGU7CiAJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm87CisJUGFydGl0aW9uUHJ1 bmVSZXN1bHQgKnBydW5lcmVzdWx0ID0gTlVMTDsKIAogCS8qIE9idGFpbiB0aGUgcHJ1bmVpbmZv IHdlIG5lZWQsIGFuZCBtYWtlIHN1cmUgaXQncyB0aGUgcmlnaHQgb25lICovCiAJcHJ1bmVpbmZv ID0gbGlzdF9udGgoZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zLCBwYXJ0X3BydW5lX2luZGV4 KTsKQEAgLTE4MTIsMjAgKzE4MjgsNjIgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLAogCS8qIFdlIG1heSBuZWVkIGFuIGV4cHJlc3Npb24gY29udGV4dCB0 byBldmFsdWF0ZSBwYXJ0aXRpb24gZXhwcnMgKi8KIAlFeGVjQXNzaWduRXhwckNvbnRleHQoZXN0 YXRlLCBwbGFuc3RhdGUpOwogCi0JLyogQ3JlYXRlIHRoZSB3b3JraW5nIGRhdGEgc3RydWN0dXJl IGZvciBwcnVuaW5nICovCi0JcHJ1bmVzdGF0ZSA9IENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUo cGxhbnN0YXRlLCBwcnVuZWluZm8pOworCS8qIEluaXRpYWwgcHJ1bmluZyBhbHJlYWR5IGRvbmUg aWYgZXNfcGFydF9wcnVuZV9yZXN1bHRzIGhhcyBiZWVuIHNldC4gKi8KKwlpZiAoZXN0YXRlLT5l c19wYXJ0X3BydW5lX3Jlc3VsdHMpCisJeworCQlwcnVuZXJlc3VsdCA9IGxpc3RfbnRoX25vZGUo UGFydGl0aW9uUHJ1bmVSZXN1bHQsCisJCQkJCQkJCQllc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVz dWx0cywKKwkJCQkJCQkJCXBhcnRfcHJ1bmVfaW5kZXgpOworCQlpZiAoIWJtc19lcXVhbChyb290 X3BhcmVudF9yZWxpZHMsIHBydW5laW5mby0+cm9vdF9wYXJlbnRfcmVsaWRzKSkKKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJPUiksCisJCQkJCWVy cm1zZ19pbnRlcm5hbCgibWlzbWF0Y2hpbmcgUGFydGl0aW9uUHJ1bmVJbmZvIGFuZCBQYXJ0aXRp b25QcnVuZVJlc3VsdCBhdCBwYXJ0X3BydW5lX2luZGV4ICVkIiwKKwkJCQkJCQkJCXBhcnRfcHJ1 bmVfaW5kZXgpLAorCQkJCQllcnJkZXRhaWxfaW50ZXJuYWwoInBydW5yZXN1bHQgcmVsaWRzICVz LCBwcnVuZWluZm8gcmVsaWRzICVzIiwKKwkJCQkJCQkJCSAgIGJtc1RvU3RyaW5nKHBydW5lcmVz dWx0LT5yb290X3BhcmVudF9yZWxpZHMpLAorCQkJCQkJCQkJICAgYm1zVG9TdHJpbmcocHJ1bmVp bmZvLT5yb290X3BhcmVudF9yZWxpZHMpKSk7CisJfQorCisJaWYgKHBydW5lcmVzdWx0ID09IE5V TEwgfHwgcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcpCisJeworCQkvKiBXZSBtYXkgbmVl ZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCisJ CUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisKKwkJLyogRm9yIGRh dGEgcmVhZGluZywgZXhlY3V0b3IgYWx3YXlzIG9taXRzIGRldGFjaGVkIHBhcnRpdGlvbnMgKi8K KwkJaWYgKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQorCQkJZXN0YXRl LT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID0KKwkJCQlDcmVhdGVQYXJ0aXRpb25EaXJlY3Rvcnko ZXN0YXRlLT5lc19xdWVyeV9jeHQsIGZhbHNlKTsKKworCQkvKgorCQkgKiBDcmVhdGUgdGhlIHdv cmtpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIHBydW5pbmcuICBObyBuZWVkIHRvIGNvbnNpZGVyCisJ CSAqIGluaXRpYWwgcHJ1bmluZyBzdGVwcyBpZiB3ZSBoYXZlIGEgUGFydGl0aW9uUHJ1bmVSZXN1 bHQuCisJCSAqLworCQlwcnVuZXN0YXRlID0gQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShwbGFu c3RhdGUsIHBydW5laW5mbywKKwkJCQkJCQkJCQkJICAgcHJ1bmVyZXN1bHQgPT0gTlVMTCwKKwkJ CQkJCQkJCQkJICAgcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcsCisJCQkJCQkJCQkJCSAg IE5JTCwgcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCwKKwkJCQkJCQkJCQkJICAgZXN0YXRlLT5l c19wYXJ0aXRpb25fZGlyZWN0b3J5KTsKKwl9CiAKIAkvKgogCSAqIFBlcmZvcm0gYW4gaW5pdGlh bCBwYXJ0aXRpb24gcHJ1bmUgcGFzcywgaWYgcmVxdWlyZWQuCiAJICovCi0JaWYgKHBydW5lc3Rh dGUtPmRvX2luaXRpYWxfcHJ1bmUpCi0JCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBFeGVj RmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSk7CisJaWYgKHBydW5lcmVzdWx0 KQorCXsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IGJtc19jb3B5KHBydW5lcmVzdWx0 LT52YWxpZF9zdWJwbGFuX29mZnMpOworCX0KKwllbHNlIGlmIChwcnVuZXN0YXRlICYmIHBydW5l c3RhdGUtPmRvX2luaXRpYWxfcHJ1bmUpCisJeworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5z ID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsIHRydWUsCisJCQkJCQkJCQkJ CQkJCQkgTlVMTCk7CisJfQogCWVsc2UKIAl7Ci0JCS8qIE5vIHBydW5pbmcsIHNvIHdlJ2xsIG5l ZWQgdG8gaW5pdGlhbGl6ZSBhbGwgc3VicGxhbnMgKi8KKwkJLyogTm8gaW5pdGlhbCBwcnVuaW5n LCBzbyB3ZSdsbCBuZWVkIHRvIGluaXRpYWxpemUgYWxsIHN1YnBsYW5zICovCiAJCUFzc2VydChu X3RvdGFsX3N1YnBsYW5zID4gMCk7CiAJCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBibXNf YWRkX3JhbmdlKE5VTEwsIDAsCiAJCQkJCQkJCQkJCQkgIG5fdG90YWxfc3VicGxhbnMgLSAxKTsK KwkJcmV0dXJuIHBydW5lc3RhdGU7CiAJfQogCiAJLyoKQEAgLTE4MzMsNyArMTg5MSw4IEBAIEV4 ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkgKiB0aGF0IHdl cmUgcmVtb3ZlZCBhYm92ZSBkdWUgdG8gaW5pdGlhbCBwcnVuaW5nLiAgTm8gbmVlZCB0byBkbyB0 aGlzIGlmCiAJICogbm8gc3RlcHMgd2VyZSByZW1vdmVkLgogCSAqLwotCWlmIChibXNfbnVtX21l bWJlcnMoKmluaXRpYWxseV92YWxpZF9zdWJwbGFucykgPCBuX3RvdGFsX3N1YnBsYW5zKQorCWlm IChwcnVuZXN0YXRlICYmCisJCWJtc19udW1fbWVtYmVycygqaW5pdGlhbGx5X3ZhbGlkX3N1YnBs YW5zKSA8IG5fdG90YWxfc3VicGxhbnMpCiAJewogCQkvKgogCQkgKiBXZSBjYW4gc2FmZWx5IHNr aXAgdGhpcyB3aGVuICFkb19leGVjX3BydW5lLCBldmVuIHRob3VnaCB0aGF0CkBAIC0xODQ5LDEx ICsxOTA4LDU4IEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKIAlyZXR1cm4gcHJ1bmVzdGF0ZTsKIH0KIAorLyoKKyAqIEV4ZWNQYXJ0aXRpb25Eb0luaXRp YWxQcnVuaW5nCisgKgkJUGVyZm9ybSBpbml0aWFsIHBydW5pbmcgdXNpbmcgZ2l2ZW4gUGFydGl0 aW9uUHJ1bmVJbmZvIHRvIGRldGVybWluZQorICoJCXRoZSBzZXQgb2YgdGhlIHBhcmVudCBwbGFu IG5vZGUncyBjaGlsZCBzdWJub2RlcyB0aGF0IGFyZSB2YWxpZCBmb3IKKyAqCQlleGVjdXRpb24K KyAqCisgKiBPbiByZXR1cm4sICpzY2FuX2xlYWZwYXJ0X3J0aXMgd2lsbCBjb250YWluIHRoZSBS VCBpbmRleGVzIG9mIGxlYWYKKyAqIHBhcnRpdGlvbnMgc2Nhbm5lZCBieSB0aG9zZSB2YWxpZCBz dWJub2Rlcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBzaGFyZSBzdGF0ZSB3aXRo IHRoZSBhY3R1YWwgZXhlY3V0aW9uLCBzbyBtdXN0IGRvCisgKiB3aXRoIHRoZSBpbmZvcm1hdGlv biBwcmVzZW50IGluIHRoZSBQbGFubmVkU3RtdC4gIEZvciBleGFtcGxlLCB0aGVyZSBpc24ndAor ICogYSBQbGFuU3RhdGUgZm9yIHRoZSBwYXJlbnQgcGxhbiBub2RlIHlldCwgc28gd2UgbXVzdCBj cmVhdGUgYSBzdGFuZGFsb25lCisgKiBFeHByQ29udGV4dCB0byBldmFsdWF0ZSBwcnVuaW5nIGV4 cHJlc3Npb25zLCBlcXVpcHBlZCB3aXRoIHRoZSBpbmZvcm1hdGlvbgorICogYWJvdXQgdGhlIEVY VEVSTiBwYXJhbWV0ZXJzIHRoYXQgd2UgZG8gaGF2ZS4gIE5vdGUgdGhhdCB0aGF0J3Mgb2theSBi ZWNhdXNlCisgKiB0aGUgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGRvIG5vdCBjb250YWluIGFueXRo aW5nIHRoYXQgd291bGQgcmVxdWlyZSB0aGUKKyAqIGV4ZWN1dGlvbiB0byBoYXZlIHN0YXJ0ZWQu ICBMaWtld2lzZSwgd2UgY3JlYXRlIG91ciBvd24gUGFydGl0aW9uRGlyZWN0b3J5CisgKiB0byBs b29rIHVwIHRoZSBQYXJ0aXRpb25EZXNjcyB0byB1c2UuCisgKi8KK0JpdG1hcHNldCAqCitFeGVj UGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIFBhcmFt TGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8s CisJCQkJCQkJICBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpCit7CisJTGlzdAkJICpy dGFibGUgPSBwbGFubmVkc3RtdC0+cnRhYmxlOworCUV4cHJDb250ZXh0CSAqZWNvbnRleHQ7CisJ UGFydGl0aW9uRGlyZWN0b3J5IHBkaXI7CisJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0 ZTsKKwlCaXRtYXBzZXQJICp2YWxpZF9zdWJwbGFuX29mZnM7CisKKwkvKiBEb24ndCBvbWl0IGRl dGFjaGVkIHBhcnRpdGlvbnMsIGp1c3QgbGlrZSBkdXJpbmcgZXhlY3V0aW9uIHByb3Blci4gKi8K KwlwZGlyID0gQ3JlYXRlUGFydGl0aW9uRGlyZWN0b3J5KEN1cnJlbnRNZW1vcnlDb250ZXh0LCBm YWxzZSk7CisJZWNvbnRleHQgPSBDcmVhdGVTdGFuZGFsb25lRXhwckNvbnRleHQoKTsKKwllY29u dGV4dC0+ZWN4dF9wYXJhbV9saXN0X2luZm8gPSBwYXJhbXM7CisJcHJ1bmVzdGF0ZSA9IENyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoTlVMTCwgcHJ1bmVpbmZvLCB0cnVlLCBmYWxzZSwKKwkJCQkJ CQkJCQkgICBydGFibGUsIGVjb250ZXh0LCBwZGlyKTsKKwl2YWxpZF9zdWJwbGFuX29mZnMgPSBF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSAg c2Nhbl9sZWFmcGFydF9ydGlzKTsKKworCUZyZWVFeHByQ29udGV4dChlY29udGV4dCwgdHJ1ZSk7 CisJRGVzdHJveVBhcnRpdGlvbkRpcmVjdG9yeShwZGlyKTsKKworCXJldHVybiB2YWxpZF9zdWJw bGFuX29mZnM7Cit9CisKIC8qCiAgKiBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlCiAgKgkJQnVp bGQgdGhlIGRhdGEgc3RydWN0dXJlIHJlcXVpcmVkIGZvciBjYWxsaW5nIEV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucwogICoKLSAqICdwbGFuc3RhdGUnIGlzIHRoZSBwYXJlbnQgcGxhbiBub2RlJ3Mg ZXhlY3V0aW9uIHN0YXRlLgorICogJ3BsYW5zdGF0ZScsIGlmIG5vdCBOVUxMLCBpcyB0aGUgcGFy ZW50IHBsYW4gbm9kZSdzIGV4ZWN1dGlvbiBzdGF0ZS4gIEl0CisgKiBjYW4gYmUgTlVMTCBpZiBi ZWluZyBjYWxsZWQgYmVmb3JlIEV4ZWN1dG9yU3RhcnQoKSwgaW4gd2hpY2ggY2FzZSwKKyAqICdy dGFibGUnIChyYW5nZSB0YWJsZSksICdlY29udGV4dCcsIGFuZCAncGFydGRpcicgbXVzdCBiZSBl eHBsaWNpdGx5CisgKiBwcm92aWRlZC4KICAqCiAgKiAncHJ1bmVpbmZvJyBpcyBhIFBhcnRpdGlv blBydW5lSW5mbyBhcyBnZW5lcmF0ZWQgYnkKICAqIG1ha2VfcGFydGl0aW9uX3BydW5laW5mby4g IEhlcmUgd2UgYnVpbGQgYSBQYXJ0aXRpb25QcnVuZVN0YXRlIGNvbnRhaW5pbmcgYQpAQCAtMTg2 NywxOSArMTk3MywyMSBAQCBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFu c3RhdGUsCiAgKiBQYXJ0aXRpb25lZFJlbFBydW5lSW5mby4KICAqLwogc3RhdGljIFBhcnRpdGlv blBydW5lU3RhdGUgKgotQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5z dGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCitDcmVhdGVQYXJ0aXRpb25QcnVu ZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8g KnBydW5laW5mbywKKwkJCQkJCSAgYm9vbCBjb25zaWRlcl9pbml0aWFsX3N0ZXBzLAorCQkJCQkJ ICBib29sIGNvbnNpZGVyX2V4ZWNfc3RlcHMsCisJCQkJCQkgIExpc3QgKnJ0YWJsZSwgRXhwckNv bnRleHQgKmVjb250ZXh0LAorCQkJCQkJICBQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGRpcikKIHsK LQlFU3RhdGUJICAgKmVzdGF0ZSA9IHBsYW5zdGF0ZS0+c3RhdGU7CisJRVN0YXRlCSAgICplc3Rh dGUgPSBwbGFuc3RhdGUgPyBwbGFuc3RhdGUtPnN0YXRlIDogTlVMTDsKIAlQYXJ0aXRpb25QcnVu ZVN0YXRlICpwcnVuZXN0YXRlOwogCWludAkJCW5fcGFydF9oaWVyYXJjaGllczsKIAlMaXN0Q2Vs bCAgICpsYzsKIAlpbnQJCQlpOwotCUV4cHJDb250ZXh0ICplY29udGV4dCA9IHBsYW5zdGF0ZS0+ cHNfRXhwckNvbnRleHQ7CiAKLQkvKiBGb3IgZGF0YSByZWFkaW5nLCBleGVjdXRvciBhbHdheXMg b21pdHMgZGV0YWNoZWQgcGFydGl0aW9ucyAqLwotCWlmIChlc3RhdGUtPmVzX3BhcnRpdGlvbl9k aXJlY3RvcnkgPT0gTlVMTCkKLQkJZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID0KLQkJ CUNyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShlc3RhdGUtPmVzX3F1ZXJ5X2N4dCwgZmFsc2UpOwor CUFzc2VydCgoZXN0YXRlICE9IE5VTEwpIHx8CisJCQkocGFydGRpciAhPSBOVUxMICYmIGVjb250 ZXh0ICE9IE5VTEwgJiYgcnRhYmxlICE9IE5JTCkpOwogCiAJbl9wYXJ0X2hpZXJhcmNoaWVzID0g bGlzdF9sZW5ndGgocHJ1bmVpbmZvLT5wcnVuZV9pbmZvcyk7CiAJQXNzZXJ0KG5fcGFydF9oaWVy YXJjaGllcyA+IDApOwpAQCAtMTkzNCwxNSArMjA0MiwzOSBAQCBDcmVhdGVQYXJ0aXRpb25QcnVu ZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5m bykKIAkJCVBhcnRpdGlvbktleSBwYXJ0a2V5OwogCiAJCQkvKgotCQkJICogV2UgY2FuIHJlbHkg b24gdGhlIGNvcGllcyBvZiB0aGUgcGFydGl0aW9uZWQgdGFibGUncyBwYXJ0aXRpb24KLQkJCSAq IGtleSBhbmQgcGFydGl0aW9uIGRlc2NyaXB0b3IgYXBwZWFyaW5nIGluIGl0cyByZWxjYWNoZSBl bnRyeSwKLQkJCSAqIGJlY2F1c2UgdGhhdCBlbnRyeSB3aWxsIGJlIGhlbGQgb3BlbiBhbmQgbG9j a2VkIGZvciB0aGUKLQkJCSAqIGR1cmF0aW9uIG9mIHRoaXMgZXhlY3V0b3IgcnVuLgorCQkJICog TXVzdCBvcGVuIHRoZSByZWxhdGlvbiBieSBvdXJzZWx2ZXMgd2hlbiBjYWxsZWQgYmVmb3JlIHRo ZQorCQkJICogZXhlY3V0aW9uIGhhcyBzdGFydGVkLCBzdWNoIGFzLCB3aGVuIGNhbGxlZCBmcm9t CisJCQkgKiBDYWNoZWRQbGFuTG9ja1BhcnRpdGlvbnMoKS4gIEluIHRoYXQgY2FzZSwgc3ViLXBh cnRpdGlvbnMgbXVzdAorCQkJICogYmUgbG9ja2VkLCBiZWNhdXNlIEFjcXVpcmVQbGFubmVyTG9j a3MoKSB3b3VsZCBoYXZlIGxvY2tlZCBvbmx5CisJCQkgKiB0aGUgcm9vdCBwYXJlbnQuCisJCQkg Ki8KKwkJCWlmIChlc3RhdGUgPT0gTlVMTCkKKwkJCXsKKwkJCQlSYW5nZVRibEVudHJ5ICpydGUg PSBydF9mZXRjaChwaW5mby0+cnRpbmRleCwgcnRhYmxlKTsKKwkJCQlpbnQJCWxvY2ttb2RlID0g KGogPT0gMCkgPyBOb0xvY2sgOiBydGUtPnJlbGxvY2ttb2RlOworCisJCQkJcGFydHJlbCA9IHRh YmxlX29wZW4ocnRlLT5yZWxpZCwgbG9ja21vZGUpOworCQkJfQorCQkJZWxzZQorCQkJCXBhcnRy ZWwgPSBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKGVzdGF0ZSwgcGluZm8tPnJ0aW5kZXgpOwor CisJCQkvKgorCQkJICogV2UgY2FuIHJlbHkgb24gdGhlIGNvcHkgb2YgdGhlIHBhcnRpdGlvbmVk IHRhYmxlJ3MgcGFydGl0aW9uCisJCQkgKiBrZXkgZnJvbSBpbiBpdHMgcmVsY2FjaGUgZW50cnks IGJlY2F1c2UgaXQgY2FuJ3QgY2hhbmdlIChvcgorCQkJICogZ2V0IGRlc3Ryb3llZCkgYXMgbG9u ZyBhcyB0aGUgcmVsYXRpb24gaXMgbG9ja2VkLiAgUGFydGl0aW9uCisJCQkgKiBkZXNjcmlwdG9y IGlzIHRha2VuIGZyb20gdGhlIFBhcnRpdGlvbkRpcmVjdG9yeSBhc3NvY2lhdGVkIHdpdGgKKwkJ CSAqIHRoZSB0YWJsZSB0aGF0IGlzIGhlbGQgb3BlbiBsb25nIGVub3VnaCBmb3IgdGhlIGRlc2Ny aXB0b3IgdG8KKwkJCSAqIHJlbWFpbiB2YWxpZCB3aGlsZSBpdCdzIHVzZWQgdG8gcGVyZm9ybSB0 aGUgcHJ1bmluZyBzdGVwcy4KIAkJCSAqLwotCQkJcGFydHJlbCA9IEV4ZWNHZXRSYW5nZVRhYmxl UmVsYXRpb24oZXN0YXRlLCBwaW5mby0+cnRpbmRleCk7CiAJCQlwYXJ0a2V5ID0gUmVsYXRpb25H ZXRQYXJ0aXRpb25LZXkocGFydHJlbCk7Ci0JCQlwYXJ0ZGVzYyA9IFBhcnRpdGlvbkRpcmVjdG9y eUxvb2t1cChlc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnksCi0JCQkJCQkJCQkJCQlwYXJ0 cmVsKTsKKwkJCXBhcnRkZXNjID0gUGFydGl0aW9uRGlyZWN0b3J5TG9va3VwKHBhcnRkaXIsIHBh cnRyZWwpOworCisJCQkvKgorCQkJICogTXVzdCBjbG9zZSBwYXJ0cmVsLCBrZWVwaW5nIHRoZSBs b2NrIHRha2VuLCBpZiB3ZSdyZSBub3QgdXNpbmcKKwkJCSAqIEVTdGF0ZSdzIGVudHJ5LgorCQkJ ICovCisJCQlpZiAoZXN0YXRlID09IE5VTEwpCisJCQkJdGFibGVfY2xvc2UocGFydHJlbCwgTm9M b2NrKTsKIAogCQkJLyoKIAkJCSAqIEluaXRpYWxpemUgdGhlIHN1YnBsYW5fbWFwIGFuZCBzdWJw YXJ0X21hcC4KQEAgLTIwNTAsNyArMjE4Miw3IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJ ICogSW5pdGlhbGl6ZSBwcnVuaW5nIGNvbnRleHRzIGFzIG5lZWRlZC4KIAkJCSAqLwogCQkJcHBy dW5lLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgPSBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBz OwotCQkJaWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMpCisJCQlpZiAoY29uc2lkZXJf aW5pdGlhbF9zdGVwcyAmJiBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzKQogCQkJewogCQkJ CUluaXRQYXJ0aXRpb25QcnVuZUNvbnRleHQoJnBwcnVuZS0+aW5pdGlhbF9jb250ZXh0LAogCQkJ CQkJCQkJCSAgcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcywKQEAgLTIwNjAsNyArMjE5Miw3 IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRp dGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJCXBydW5lc3RhdGUtPmRvX2luaXRpYWxfcHJ1 bmUgPSB0cnVlOwogCQkJfQogCQkJcHBydW5lLT5leGVjX3BydW5pbmdfc3RlcHMgPSBwaW5mby0+ ZXhlY19wcnVuaW5nX3N0ZXBzOwotCQkJaWYgKHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMpCisJ CQlpZiAoY29uc2lkZXJfZXhlY19zdGVwcyAmJiBwaW5mby0+ZXhlY19wcnVuaW5nX3N0ZXBzKQog CQkJewogCQkJCUluaXRQYXJ0aXRpb25QcnVuZUNvbnRleHQoJnBwcnVuZS0+ZXhlY19jb250ZXh0 LAogCQkJCQkJCQkJCSAgcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcywKQEAgLTIyODgsMTAgKzI0 MjAsMTQgQEAgUGFydGl0aW9uUHJ1bmVGaXhTdWJQbGFuTWFwKFBhcnRpdGlvblBydW5lU3RhdGUg KnBydW5lc3RhdGUsCiAgKiBQYXNzIGluaXRpYWxfcHJ1bmUgaWYgUEFSQU1fRVhFQyBQYXJhbXMg Y2Fubm90IHlldCBiZSBldmFsdWF0ZWQuICBUaGlzCiAgKiBkaWZmZXJlbnRpYXRlcyB0aGUgaW5p dGlhbCBleGVjdXRvci10aW1lIHBydW5pbmcgc3RlcCBmcm9tIGxhdGVyCiAgKiBydW50aW1lIHBy dW5pbmcuCisgKgorICogUlQgaW5kZXhlcyBvZiBsZWFmIHBhcnRpdGlvbnMgc2Nhbm5lZCBieSB0 aGUgY2hvc2VuIHN1YnBsYW5zIGFyZSBhZGRlZCB0bworICogKnNjYW5fbGVhZnBhcnRfcnRpcyBp ZiB0aGUgcG9pbnRlciBpcyBub24tTlVMTC4KICAqLwogQml0bWFwc2V0ICoKIEV4ZWNGaW5kTWF0 Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAotCQkJCQkJIGJv b2wgaW5pdGlhbF9wcnVuZSkKKwkJCQkJCSBib29sIGluaXRpYWxfcHJ1bmUsCisJCQkJCQkgQml0 bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9ydGlzKQogewogCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5V TEw7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtMjMyNiw3ICsyNDYyLDcgQEAgRXhl Y0ZpbmRNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAJ CSAqLwogCQlwcHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVkYXRhWzBdOwogCQlmaW5k X21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UocHJ1bmVkYXRhLCBwcHJ1bmUsIGluaXRpYWxfcHJ1 bmUsCi0JCQkJCQkJCQkgICAmcmVzdWx0KTsKKwkJCQkJCQkJCSAgICZyZXN1bHQsIHNjYW5fbGVh ZnBhcnRfcnRpcyk7CiAKIAkJLyogRXhwcmVzc2lvbiBldmFsIG1heSBoYXZlIHVzZWQgc3BhY2Ug aW4gRXhwckNvbnRleHQgdG9vICovCiAJCWlmIChwcHJ1bmUtPmV4ZWNfcHJ1bmluZ19zdGVwcykK QEAgLTIzNDAsNiArMjQ3Niw4IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25Q cnVuZVN0YXRlICpwcnVuZXN0YXRlLAogCiAJLyogQ29weSByZXN1bHQgb3V0IG9mIHRoZSB0ZW1w IGNvbnRleHQgYmVmb3JlIHdlIHJlc2V0IGl0ICovCiAJcmVzdWx0ID0gYm1zX2NvcHkocmVzdWx0 KTsKKwlpZiAoc2Nhbl9sZWFmcGFydF9ydGlzKQorCQkqc2Nhbl9sZWFmcGFydF9ydGlzID0gYm1z X2NvcHkoKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiAKIAlNZW1vcnlDb250ZXh0UmVzZXQocHJ1bmVz dGF0ZS0+cHJ1bmVfY29udGV4dCk7CiAKQEAgLTIzNTAsMTMgKzI0ODgsMTUgQEAgRXhlY0ZpbmRN YXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAgKiBmaW5k X21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UKICAqCQlSZWN1cnNpdmUgd29ya2VyIGZ1bmN0aW9u IGZvciBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMKICAqCi0gKiBBZGRzIHZhbGlkIChub24tcHJ1 bmFibGUpIHN1YnBsYW4gSURzIHRvICp2YWxpZHN1YnBsYW5zCisgKiBBZGRzIHZhbGlkIChub24t cHJ1bmFibGUpIHN1YnBsYW4gSURzIHRvICp2YWxpZHN1YnBsYW5zIGFuZCBSVCBpbmRleGVzIG9m CisgKiBvZiB0aGUgY29ycmVzcG9uZGluZyBsZWFmIHBhcnRpdGlvbnMgdG8gKnNjYW5fbGVhZnBh cnRfcnRpcyAoaWYgYXNrZWQgZm9yKS4KICAqLwogc3RhdGljIHZvaWQKIGZpbmRfbWF0Y2hpbmdf c3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCQkJCQkJ CSAgIFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSwKIAkJCQkJCQkgICBib29sIGlu aXRpYWxfcHJ1bmUsCi0JCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFucykKKwkJCQkJ CQkgICBCaXRtYXBzZXQgKip2YWxpZHN1YnBsYW5zLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqKnNj YW5fbGVhZnBhcnRfcnRpcykKIHsKIAlCaXRtYXBzZXQgICpwYXJ0c2V0OwogCWludAkJCWk7CkBA IC0yMzgzLDggKzI1MjMsMTQgQEAgZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKFBhcnRp dGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEsCiAJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVy KHBhcnRzZXQsIGkpKSA+PSAwKQogCXsKIAkJaWYgKHBwcnVuZS0+c3VicGxhbl9tYXBbaV0gPj0g MCkKKwkJewogCQkJKnZhbGlkc3VicGxhbnMgPSBibXNfYWRkX21lbWJlcigqdmFsaWRzdWJwbGFu cywKIAkJCQkJCQkJCQkJcHBydW5lLT5zdWJwbGFuX21hcFtpXSk7CisJCQlBc3NlcnQocHBydW5l LT5ydGlfbWFwW2ldID4gMCk7CisJCQlpZiAoc2Nhbl9sZWFmcGFydF9ydGlzKQorCQkJCSpzY2Fu X2xlYWZwYXJ0X3J0aXMgPSBibXNfYWRkX21lbWJlcigqc2Nhbl9sZWFmcGFydF9ydGlzLAorCQkJ CQkJCQkJCQkJCSBwcHJ1bmUtPnJ0aV9tYXBbaV0pOworCQl9CiAJCWVsc2UKIAkJewogCQkJaW50 CQkJcGFydGlkeCA9IHBwcnVuZS0+c3VicGFydF9tYXBbaV07CkBAIC0yMzkyLDcgKzI1MzgsOCBA QCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBy dW5lZGF0YSwKIAkJCWlmIChwYXJ0aWR4ID49IDApCiAJCQkJZmluZF9tYXRjaGluZ19zdWJwbGFu c19yZWN1cnNlKHBydW5lZGF0YSwKIAkJCQkJCQkJCQkJICAgJnBydW5lZGF0YS0+cGFydHJlbHBy dW5lZGF0YVtwYXJ0aWR4XSwKLQkJCQkJCQkJCQkJICAgaW5pdGlhbF9wcnVuZSwgdmFsaWRzdWJw bGFucyk7CisJCQkJCQkJCQkJCSAgIGluaXRpYWxfcHJ1bmUsIHZhbGlkc3VicGxhbnMsCisJCQkJ CQkJCQkJCSAgIHNjYW5fbGVhZnBhcnRfcnRpcyk7CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggODdmNGQ1M2NhNy4uN2QzNmM5NzJkMyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1V0aWxzLmMKQEAgLTEzOSw2ICsxMzksNyBAQCBDcmVhdGVFeGVjdXRvclN0 YXRlKHZvaWQpCiAJZXN0YXRlLT5lc19wYXJhbV9leGVjX3ZhbHMgPSBOVUxMOwogCiAJZXN0YXRl LT5lc19xdWVyeUVudiA9IE5VTEw7CisJZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdHMgPSBO SUw7CiAKIAllc3RhdGUtPmVzX3F1ZXJ5X2N4dCA9IHFjb250ZXh0OwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1 bmN0aW9ucy5jCmluZGV4IGRjMTM2MjUxNzEuLmJmZmI0MmNlNzEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1 bmN0aW9ucy5jCkBAIC04NDIsNyArODQyLDcgQEAgcG9zdHF1ZWxfc3RhcnQoZXhlY3V0aW9uX3N0 YXRlICplcywgU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJZWxzZQogCQlkZXN0ID0gTm9u ZV9SZWNlaXZlcjsKIAotCWVzLT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwKKwllcy0+ cWQgPSBDcmVhdGVRdWVyeURlc2MoZXMtPnN0bXQsIE5JTCwKIAkJCQkJCQkgZmNhY2hlLT5zcmMs CiAJCQkJCQkJIEdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJIEludmFsaWRTbmFwc2hvdCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRleCA5OTgzMDE5OGJkLi4zYjkxNzU4NGRlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC0xNTYsNyArMTU2LDggQEAgRXhlY0luaXRB cHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICogc3Vi cGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRp bmcKIAkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8K LQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCWlmIChh cHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFhcHBlbmRzdGF0ZS0+ YXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQlhcHBlbmRz dGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAt IDEpOwogCX0KIAllbHNlCkBAIC01NzgsNyArNTc5LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9s b2NhbGx5KEFwcGVuZFN0YXRlICpub2RlKQogCQl9CiAJCWVsc2UgaWYgKG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zID09IE5VTEwpCiAJCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhl Y0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQkJ RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVM TCk7CiAKIAkJd2hpY2hwbGFuID0gLTE7CiAJfQpAQCAtNjQzLDcgKzY0NCw3IEBAIGNob29zZV9u ZXh0X3N1YnBsYW5fZm9yX2xlYWRlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJaWYgKG5vZGUtPmFz X3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCXsKIAkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5z ID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZh bHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUs IGZhbHNlLCBOVUxMKTsKIAogCQkJLyoKIAkJCSAqIE1hcmsgZWFjaCBpbnZhbGlkIHBsYW4gYXMg ZmluaXNoZWQgdG8gYWxsb3cgdGhlIGxvb3AgYmVsb3cgdG8KQEAgLTcxOCw3ICs3MTksNyBAQCBj aG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJZWxzZSBp ZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAl7CiAJCW5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9z dGF0ZSwgZmFsc2UpOworCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5l X3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAJCW1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5pc2hl ZChub2RlKTsKIAl9CiAKQEAgLTg2OSw3ICs4NzAsNyBAQCBFeGVjQXBwZW5kQXN5bmNCZWdpbihB cHBlbmRTdGF0ZSAqbm9kZSkKIAlpZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkK IAl7CiAJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQ bGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAKIAkJY2xhc3NpZnlf bWF0Y2hpbmdfc3VicGxhbnMobm9kZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VB cHBlbmQuYwppbmRleCBmMzcwZjlmMjg3Li5jY2ZhMDgzOTQ1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtMTA0LDcgKzEwNCw4IEBAIEV4ZWNJbml0TWVyZ2VBcHBl bmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkgKiBz dWJwbGFuLCB3ZSBjYW4gZmlsbCBtc192YWxpZF9zdWJwbGFucyBpbW1lZGlhdGVseSwgcHJldmVu dGluZwogCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAJCSAq LwotCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKKwkJaWYg KG1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID09IE5VTEwgfHwKKwkJCSghbWVyZ2VzdGF0ZS0+ bXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQltZXJnZXN0 YXRlLT5tc192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0g MSk7CiAJfQogCWVsc2UKQEAgLTIxOSw3ICsyMjAsNyBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0 YXRlICpwc3RhdGUpCiAJCSAqLwogCQlpZiAobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPT0gTlVM TCkKIAkJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMobm9kZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5n U3ViUGxhbnMobm9kZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKIAogCQkvKgogCQkg KiBGaXJzdCB0aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxp ZCBzdWJwbGFuLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9zcGkuYwppbmRleCBmZDU3OTZmMWI5Li4yZWNiOTE5M2FhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9zcGkuYwpAQCAtMTU3Nyw2ICsxNTc3LDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFs KGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIHsKIAlDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlOwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUNhY2hlZFBsYW5FeHRyYSAqY3Bs YW5fZXh0cmE7CiAJTGlzdAkgICAqc3RtdF9saXN0OwogCWNoYXIJICAgKnF1ZXJ5X3N0cmluZzsK IAlTbmFwc2hvdAlzbmFwc2hvdDsKQEAgLTE2NTcsNyArMTY1OCwxMSBAQCBTUElfY3Vyc29yX29w ZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCSAqLwogCiAJ LyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0 YWwgKi8KLQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwg X1NQSV9jdXJyZW50LT5xdWVyeUVudik7CisJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3Vy Y2UsIHBhcmFtTEksIE5VTEwsIF9TUElfY3VycmVudC0+cXVlcnlFbnYsCisJCQkJCQkgICZjcGxh bl9leHRyYSk7CisJQXNzZXJ0KGNwbGFuX2V4dHJhID09IE5VTEwgfHwKKwkJICAgKGxpc3RfbGVu Z3RoKGNwbGFuLT5zdG10X2xpc3QpID09CisJCQlsaXN0X2xlbmd0aChjcGxhbl9leHRyYS0+cGFy dF9wcnVuZV9yZXN1bHRzX2xpc3QpKSk7CiAJc3RtdF9saXN0ID0gY3BsYW4tPnN0bXRfbGlzdDsK IAogCWlmICghcGxhbi0+c2F2ZWQpCkBAIC0xNjg1LDYgKzE2OTAsOSBAQCBTUElfY3Vyc29yX29w ZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCQkJCQkgIHN0 bXRfbGlzdCwKIAkJCQkJICBjcGxhbik7CiAKKwlpZiAoY3BsYW5fZXh0cmEpCisJCVBvcnRhbFNh dmVDYWNoZWRQbGFuRXh0cmEocG9ydGFsLCBjcGxhbl9leHRyYSk7CisKIAkvKgogCSAqIFNldCB1 cCBvcHRpb25zIGZvciBwb3J0YWwuICBEZWZhdWx0IFNDUk9MTCB0eXBlIGlzIGNob3NlbiB0aGUg c2FtZSB3YXkKIAkgKiBhcyBQZXJmb3JtQ3Vyc29yT3BlbiBkb2VzIGl0LgpAQCAtMjA2Nyw2ICsy MDc1LDcgQEAgU1BJX3BsYW5fZ2V0X2NhY2hlZF9wbGFuKFNQSVBsYW5QdHIgcGxhbikKIHsKIAlD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlOwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUNhY2hl ZFBsYW5FeHRyYSAqY3BsYW5fZXh0cmEgPSBOVUxMOwogCVNQSUNhbGxiYWNrQXJnIHNwaWNhbGxi YWNrYXJnOwogCUVycm9yQ29udGV4dENhbGxiYWNrIHNwaWVycmNvbnRleHQ7CiAKQEAgLTIwOTIs OCArMjEwMSwxMiBAQCBTUElfcGxhbl9nZXRfY2FjaGVkX3BsYW4oU1BJUGxhblB0ciBwbGFuKQog CS8qIEdldCB0aGUgZ2VuZXJpYyBwbGFuIGZvciB0aGUgcXVlcnkgKi8KIAljcGxhbiA9IEdldENh Y2hlZFBsYW4ocGxhbnNvdXJjZSwgTlVMTCwKIAkJCQkJCSAgcGxhbi0+c2F2ZWQgPyBDdXJyZW50 UmVzb3VyY2VPd25lciA6IE5VTEwsCi0JCQkJCQkgIF9TUElfY3VycmVudC0+cXVlcnlFbnYpOwor CQkJCQkJICBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52LAorCQkJCQkJICAmY3BsYW5fZXh0cmEpOwog CUFzc2VydChjcGxhbiA9PSBwbGFuc291cmNlLT5ncGxhbik7CisJQXNzZXJ0KGNwbGFuX2V4dHJh ID09IE5VTEwgfHwKKwkJICAgKGxpc3RfbGVuZ3RoKGNwbGFuLT5zdG10X2xpc3QpID09CisJCQls aXN0X2xlbmd0aChjcGxhbl9leHRyYS0+cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpKSk7CiAKIAkv KiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KIAllcnJvcl9jb250ZXh0X3N0YWNrID0g c3BpZXJyY29udGV4dC5wcmV2aW91czsKQEAgLTIzOTksNiArMjQxMiw3IEBAIF9TUElfZXhlY3V0 ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMs CiAJU1BJQ2FsbGJhY2tBcmcgc3BpY2FsbGJhY2thcmc7CiAJRXJyb3JDb250ZXh0Q2FsbGJhY2sg c3BpZXJyY29udGV4dDsKIAlDYWNoZWRQbGFuICpjcGxhbiA9IE5VTEw7CisJQ2FjaGVkUGxhbkV4 dHJhICpjcGxhbl9leHRyYSA9IE5VTEw7CiAJTGlzdENlbGwgICAqbGMxOwogCiAJLyoKQEAgLTI1 NDksOCArMjU2MywxMiBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0 IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkgKiBwbGFuLCB0aGUgcmVmY291bnQgbXVz dCBiZSBiYWNrZWQgYnkgdGhlIHBsYW5fb3duZXIuCiAJCSAqLwogCQljcGxhbiA9IEdldENhY2hl ZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9ucy0+cGFyYW1zLAotCQkJCQkJCSAgcGxhbl9vd25lciwg X1NQSV9jdXJyZW50LT5xdWVyeUVudik7CisJCQkJCQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJl bnQtPnF1ZXJ5RW52LAorCQkJCQkJCSAgJmNwbGFuX2V4dHJhKTsKIAorCQlBc3NlcnQoY3BsYW5f ZXh0cmEgPT0gTlVMTCB8fAorCQkJICAgKGxpc3RfbGVuZ3RoKGNwbGFuLT5zdG10X2xpc3QpID09 CisJCQkJbGlzdF9sZW5ndGgoY3BsYW5fZXh0cmEtPnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KSkp OwogCQlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwogCiAJCS8qCkBAIC0yNTkyLDkgKzI2 MTAsMTQgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVj dXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJZm9yZWFjaChsYzIsIHN0bXRfbGlzdCkKIAkJewogCQkJ UGxhbm5lZFN0bXQgKnN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMyKTsKKwkJCUxp c3QJICAgKnBhcnRfcHJ1bmVfcmVzdWx0cyA9IE5JTDsKIAkJCWJvb2wJCWNhblNldFRhZyA9IHN0 bXQtPmNhblNldFRhZzsKIAkJCURlc3RSZWNlaXZlciAqZGVzdDsKIAorCQkJaWYgKGNwbGFuX2V4 dHJhKQorCQkJCXBhcnRfcHJ1bmVfcmVzdWx0cyA9IGxpc3RfbnRoX25vZGUoTGlzdCwKKwkJCQkJ CQkJCQkJCSAgIGNwbGFuX2V4dHJhLT5wYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCwKKwkJCQkJCQkJ CQkJCSAgIGZvcmVhY2hfY3VycmVudF9pbmRleChsYzIpKTsKIAkJCS8qCiAJCQkgKiBSZXNldCBv dXRwdXQgc3RhdGUuICAoTm90ZSB0aGF0IGlmIGEgbm9uLVNQSSByZWNlaXZlciBpcyB1c2VkLAog CQkJICogX1NQSV9jdXJyZW50LT5wcm9jZXNzZWQgd2lsbCBzdGF5IHplcm8sIGFuZCB0aGF0J3Mg d2hhdCB3ZSdsbApAQCAtMjY2Myw3ICsyNjg2LDcgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxh blB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQllbHNlCiAJ CQkJCXNuYXAgPSBJbnZhbGlkU25hcHNob3Q7CiAKLQkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVz YyhzdG10LAorCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0bXQsIHBhcnRfcHJ1bmVfcmVz dWx0cywKIAkJCQkJCQkJCQlwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCiAJCQkJCQkJCQkJc25h cCwgY3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJCQlkZXN0LApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCmluZGV4IGVkNDNkNTkzNmQuLmRiMjdjYWUyOTcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTM3Miw2ICszNzIsNyBAQCBzZXRfcGxhbl9yZWZl cmVuY2VzKFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuKQogCXsKIAkJUGFydGl0aW9uUHJ1 bmVJbmZvICpwcnVuZWluZm8gPSBsZmlyc3QobGMpOwogCQlMaXN0Q2VsbCAgICpsOworCQlCaXRt YXBzZXQgICpsZWFmcGFydF9ydGlzID0gTlVMTDsKIAogCQlwcnVuZWluZm8tPnJvb3RfcGFyZW50 X3JlbGlkcyA9CiAJCQlvZmZzZXRfcmVsaWRfc2V0KHBydW5laW5mby0+cm9vdF9wYXJlbnRfcmVs aWRzLCBydG9mZnNldCk7CkBAIC0zODMsMTcgKzM4NCw1MiBAQCBzZXRfcGxhbl9yZWZlcmVuY2Vz KFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuKQogCQkJZm9yZWFjaChsMiwgcHJ1bmVfaW5m b3MpCiAJCQl7CiAJCQkJUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gKnBpbmZvID0gbGZpcnN0KGwy KTsKKwkJCQlpbnQJCWk7CiAKIAkJCQkvKiBSVCBpbmRleCBvZiB0aGUgdGFibGUgdG8gd2hpY2gg dGhlIHBpbmZvIGJlbG9uZ3MuICovCiAJCQkJcGluZm8tPnJ0aW5kZXggKz0gcnRvZmZzZXQ7CisK KwkJCQkvKiBBbHNvIG9mIHRoZSBsZWFmIHBhcnRpdGlvbnMgdGhhdCBtaWdodCBiZSBzY2FubmVk LiAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBwaW5mby0+bnBhcnRzOyBpKyspCisJCQkJeworCQkJ CQlpZiAocGluZm8tPnJ0aV9tYXBbaV0gPiAwICYmIHBpbmZvLT5zdWJwbGFuX21hcFtpXSA+PSAw KQorCQkJCQl7CisJCQkJCQlwaW5mby0+cnRpX21hcFtpXSArPSBydG9mZnNldDsKKwkJCQkJCWxl YWZwYXJ0X3J0aXMgPSBibXNfYWRkX21lbWJlcihsZWFmcGFydF9ydGlzLAorCQkJCQkJCQkJCQkJ CSAgIHBpbmZvLT5ydGlfbWFwW2ldKTsKKwkJCQkJfQorCQkJCX0KIAkJCX0KIAogCQl9CiAKKwkJ aWYgKHBydW5laW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nKQorCQl7CisJCQlnbG9iLT5jb250YWlu c0luaXRpYWxQcnVuaW5nID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIERlbGV0ZSB0aGUgbGVhZiBw YXJ0aXRpb24gUlRJcyBmcm9tIHRoZSBzZXQgb2YgcmVsYXRpb25zIHRvIGJlCisJCQkgKiBsb2Nr ZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4gIFRoZSBhY3R1YWwgc2V0IG9mIGxlYWYKKwkJ CSAqIHBhcnRpdGlvbnMgdG8gYmUgbG9ja2VkIGlzIGNvbXB1dGVkIGJ5CisJCQkgKiBDYWNoZWRQ bGFuTG9ja1BhcnRpdGlvbnMoKS4KKwkJCSAqLworCQkJZ2xvYi0+bWluTG9ja1JlbGlkcyA9IGJt c19kZWxfbWVtYmVycyhnbG9iLT5taW5Mb2NrUmVsaWRzLAorCQkJCQkJCQkJCQkJICBsZWFmcGFy dF9ydGlzKTsKKwkJfQorCiAJCWdsb2ItPnBhcnRQcnVuZUluZm9zID0gbGFwcGVuZChnbG9iLT5w YXJ0UHJ1bmVJbmZvcywgcHJ1bmVpbmZvKTsKIAkJZ2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmlu ZyB8PSBwcnVuZWluZm8tPm5lZWRzX2luaXRfcHJ1bmluZzsKIAl9CiAKKwkvKgorCSAqIEl0IHNl ZW1zIHdvcnRoIGRvaW5nIGEgYm1zX2NvcHkoKSBvbiBnbG9iLT5taW5Mb2NrUmVsaWRzIGlmIHdl IGRlbGV0ZWQKKwkgKiBiaXRzIGZyb20gaXQgYWJvdmUgdG8gZ2V0IHJpZCBvZiBhbnkgZW1wdHkg dGFpbCBiaXRzLiAgSXQgc2VlbXMgYmV0dGVyCisJICogZm9yIHRoZSBsb29wIG92ZXIgdGhpcyBz ZXQgaW4gQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSB0byBub3QgaGF2ZSB0byBnbworCSAqIHRocm91 Z2ggdGhvc2UgdXNlbGVzcyBiaXQgd29yZHMuCisJICovCisJaWYgKGdsb2ItPmNvbnRhaW5zSW5p dGlhbFBydW5pbmcpCisJCWdsb2ItPm1pbkxvY2tSZWxpZHMgPSBibXNfY29weShnbG9iLT5taW5M b2NrUmVsaWRzKTsKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCAw MWQyNjRiNWFiLi5lMTFlMDc2NThkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xNTk4LDYgKzE1OTgs NyBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJaW50MTYJ ICAgKnJmb3JtYXRzID0gTlVMTDsKIAlDYWNoZWRQbGFuU291cmNlICpwc3JjOwogCUNhY2hlZFBs YW4gKmNwbGFuOworCUNhY2hlZFBsYW5FeHRyYSAqY3BsYW5fZXh0cmEgPSBOVUxMOwogCVBvcnRh bAkJcG9ydGFsOwogCWNoYXIJICAgKnF1ZXJ5X3N0cmluZzsKIAljaGFyCSAgICpzYXZlZF9zdG10 X25hbWU7CkBAIC0xOTcyLDcgKzE5NzMsMTAgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5m byBpbnB1dF9tZXNzYWdlKQogCSAqIHdpbGwgYmUgZ2VuZXJhdGVkIGluIE1lc3NhZ2VDb250ZXh0 LiAgVGhlIHBsYW4gcmVmY291bnQgd2lsbCBiZQogCSAqIGFzc2lnbmVkIHRvIHRoZSBQb3J0YWws IHNvIGl0IHdpbGwgYmUgcmVsZWFzZWQgYXQgcG9ydGFsIGRlc3RydWN0aW9uLgogCSAqLwotCWNw bGFuID0gR2V0Q2FjaGVkUGxhbihwc3JjLCBwYXJhbXMsIE5VTEwsIE5VTEwpOworCWNwbGFuID0g R2V0Q2FjaGVkUGxhbihwc3JjLCBwYXJhbXMsIE5VTEwsIE5VTEwsICZjcGxhbl9leHRyYSk7CisJ QXNzZXJ0KGNwbGFuX2V4dHJhID09IE5VTEwgfHwKKwkJICAgKGxpc3RfbGVuZ3RoKGNwbGFuLT5z dG10X2xpc3QpID09CisJCQlsaXN0X2xlbmd0aChjcGxhbl9leHRyYS0+cGFydF9wcnVuZV9yZXN1 bHRzX2xpc3QpKSk7CiAKIAkvKgogCSAqIE5vdyB3ZSBjYW4gZGVmaW5lIHRoZSBwb3J0YWwuCkBA IC0xOTg3LDYgKzE5OTEsOSBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21l c3NhZ2UpCiAJCQkJCSAgY3BsYW4tPnN0bXRfbGlzdCwKIAkJCQkJICBjcGxhbik7CiAKKwlpZiAo Y3BsYW5fZXh0cmEpCisJCVBvcnRhbFNhdmVDYWNoZWRQbGFuRXh0cmEocG9ydGFsLCBjcGxhbl9l eHRyYSk7CisKIAkvKiBEb25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcmFtZXRlciBJ L08gYW5kIHBhcnNpbmcvcGxhbm5pbmcgKi8KIAlpZiAoc25hcHNob3Rfc2V0KQogCQlQb3BBY3Rp dmVTbmFwc2hvdCgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKaW5kZXggNTJlMmRiNjQ1Mi4uMzJlNmI3Yjc2NyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYworKysgYi9zcmMvYmFja2VuZC90Y29w L3BxdWVyeS5jCkBAIC0zNSw3ICszNSw3IEBACiBQb3J0YWwJCUFjdGl2ZVBvcnRhbCA9IE5VTEw7 CiAKIAotc3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorc3RhdGlj IHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLCBMaXN0ICpwYXJ0X3BydW5lX3Jl c3VsdHMsCiAJCQkJCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCSBQYXJhbUxpc3RJ bmZvIHBhcmFtcywKIAkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTY1LDYg KzY1LDcgQEAgc3RhdGljIHZvaWQgRG9Qb3J0YWxSZXdpbmQoUG9ydGFsIHBvcnRhbCk7CiAgKi8K IFF1ZXJ5RGVzYyAqCiBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAor CQkJCUxpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0cywKIAkJCQljb25zdCBjaGFyICpzb3VyY2VUZXh0 LAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCVNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNo b3QsCkBAIC03Nyw2ICs3OCw3IEBAIENyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqcGxhbm5l ZHN0bXQsCiAKIAlxZC0+b3BlcmF0aW9uID0gcGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlOwkvKiBv cGVyYXRpb24gKi8KIAlxZC0+cGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsJLyogcGxhbiAqLwor CXFkLT5wYXJ0X3BydW5lX3Jlc3VsdHMgPSBwYXJ0X3BydW5lX3Jlc3VsdHM7CiAJcWQtPnNvdXJj ZVRleHQgPSBzb3VyY2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0gUmVn aXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sgc25h cHNob3QgKi8KQEAgLTEyMiw2ICsxMjQsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRl c2MpCiAgKgkJUE9SVEFMX09ORV9SRVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9y dGFsCiAgKgogICoJcGxhbjogdGhlIHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglwYXJ0X3By dW5lX3Jlc3VsdHM6IHBydW5pbmcgcmVzdWx0cyByZXR1cm5lZCBieSBDYWNoZWRQbGFuTG9ja1Bh cnRpdGlvbnMoKQogICoJc291cmNlVGV4dDogdGhlIHNvdXJjZSB0ZXh0IG9mIHRoZSBxdWVyeQog ICoJcGFyYW1zOiBhbnkgcGFyYW1ldGVycyBuZWVkZWQKICAqCWRlc3Q6IHdoZXJlIHRvIHNlbmQg cmVzdWx0cwpAQCAtMTM0LDYgKzEzNyw3IEBAIEZyZWVRdWVyeURlc2MoUXVlcnlEZXNjICpxZGVz YykKICAqLwogc3RhdGljIHZvaWQKIFByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwKKwkJ CSBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdHMsCiAJCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwK IAkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVu diwKQEAgLTE0NSw3ICsxNDksNyBAQCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCiAJ LyoKIAkgKiBDcmVhdGUgdGhlIFF1ZXJ5RGVzYyBvYmplY3QKIAkgKi8KLQlxdWVyeURlc2MgPSBD cmVhdGVRdWVyeURlc2MocGxhbiwgc291cmNlVGV4dCwKKwlxdWVyeURlc2MgPSBDcmVhdGVRdWVy eURlc2MocGxhbiwgcGFydF9wcnVuZV9yZXN1bHRzLCBzb3VyY2VUZXh0LAogCQkJCQkJCQlHZXRB Y3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCWRlc3QsIHBhcmFtcywg cXVlcnlFbnYsIDApOwogCkBAIC00OTEsOCArNDk1LDEzIEBAIFBvcnRhbFN0YXJ0KFBvcnRhbCBw b3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJCS8qCiAJCQkJICogQ3JlYXRlIFF1ZXJ5 RGVzYyBpbiBwb3J0YWwncyBjb250ZXh0OyBmb3IgdGhlIG1vbWVudCwgc2V0CiAJCQkJICogdGhl IGRlc3RpbmF0aW9uIHRvIERlc3ROb25lLgorCQkJCSAqCisJCQkJICogVGhlcmUgaXMgbm8gUGFy dGl0aW9uUHJ1bmVSZXN1bHQgdW5sZXNzIHRoZSBQbGFubmVkU3RtdCBpcworCQkJCSAqIGZyb20g YSBDYWNoZWRQbGFuLgogCQkJCSAqLwogCQkJCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhs aW5pdGlhbF9ub2RlKFBsYW5uZWRTdG10LCBwb3J0YWwtPnN0bXRzKSwKKwkJCQkJCQkJCQkJcG9y dGFsLT5jcGxhbl9leHRyYSA9PSBOVUxMID8gTklMIDoKKwkJCQkJCQkJCQkJbGluaXRpYWwocG9y dGFsLT5jcGxhbl9leHRyYS0+cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpLAogCQkJCQkJCQkJCQlw b3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJ CQkJCQkJCUludmFsaWRTbmFwc2hvdCwKQEAgLTEyMjUsNiArMTIzNCw4IEBAIFBvcnRhbFJ1bk11 bHRpKFBvcnRhbCBwb3J0YWwsCiAKIAkJaWYgKHBzdG10LT51dGlsaXR5U3RtdCA9PSBOVUxMKQog CQl7CisJCQlMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdHMgPSBOSUw7CisKIAkJCS8qCiAJCQkgKiBw cm9jZXNzIGEgcGxhbm5hYmxlIHF1ZXJ5LgogCQkJICovCkBAIC0xMjcxLDEwICsxMjgyLDE5IEBA IFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJCQllbHNlCiAJCQkJVXBkYXRlQWN0aXZl U25hcHNob3RDb21tYW5kSWQoKTsKIAorCQkJLyoKKwkJCSAqIERldGVybWluZSBpZiB0aGVyZSdz IGEgY29ycmVzcG9uZGluZyBMaXN0IG9mIFBhcnRpdGlvblBydW5lUmVzdWx0CisJCQkgKiBmb3Ig dGhpcyBQbGFubmVkU3RtdC4KKwkJCSAqLworCQkJaWYgKHBvcnRhbC0+Y3BsYW5fZXh0cmEpCisJ CQkJcGFydF9wcnVuZV9yZXN1bHRzID0gbGlzdF9udGhfbm9kZShMaXN0LAorCQkJCQkJCQkJCQkJ ICAgcG9ydGFsLT5jcGxhbl9leHRyYS0+cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QsCisJCQkJCQkJ CQkJCQkgICBmb3JlYWNoX2N1cnJlbnRfaW5kZXgoc3RtdGxpc3RfaXRlbSkpOworCiAJCQlpZiAo cHN0bXQtPmNhblNldFRhZykKIAkJCXsKIAkJCQkvKiBzdGF0ZW1lbnQgY2FuIHNldCB0YWcgc3Ry aW5nICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAorCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwg cGFydF9wcnVuZV9yZXN1bHRzLAogCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJ IHBvcnRhbC0+cG9ydGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApAQCAtMTI4 Myw3ICsxMzAzLDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWVsc2UKIAkJ CXsKIAkJCQkvKiBzdG10IGFkZGVkIGJ5IHJld3JpdGUgY2Fubm90IHNldCB0YWcgKi8KLQkJCQlQ cm9jZXNzUXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBwYXJ0X3BydW5lX3Jl c3VsdHMsCiAJCQkJCQkJIHBvcnRhbC0+c291cmNlVGV4dCwKIAkJCQkJCQkgcG9ydGFsLT5wb3J0 YWxQYXJhbXMsCiAJCQkJCQkJIHBvcnRhbC0+cXVlcnlFbnYsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Bs YW5jYWNoZS5jCmluZGV4IDMzOWJiNjAzZjcuLjE2Yjk4NjlmYWUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3BsYW5jYWNoZS5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5z YW0uaCIKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUg Im9wdGltaXplci9vcHRpbWl6ZXIuaCIKQEAgLTk5LDE0ICsxMDAsMTggQEAgc3RhdGljIGRsaXN0 X2hlYWQgY2FjaGVkX2V4cHJlc3Npb25fbGlzdCA9IERMSVNUX1NUQVRJQ19JTklUKGNhY2hlZF9l eHByZXNzaW9uX2wKIHN0YXRpYyB2b2lkIFJlbGVhc2VHZW5lcmljUGxhbihDYWNoZWRQbGFuU291 cmNlICpwbGFuc291cmNlKTsKIHN0YXRpYyBMaXN0ICpSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkJICAgUXVlcnlFbnZpcm9ubWVudCAq cXVlcnlFbnYpOwotc3RhdGljIGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2UpOworc3RhdGljIGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3Vy Y2UgKnBsYW5zb3VyY2UsIGJvb2wgKmhhc1VubG9ja2VkUGFydHMpOwogc3RhdGljIENhY2hlZFBs YW4gKkJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBMaXN0ICpx bGlzdCwKIAkJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywgUXVlcnlFbnZpcm9u bWVudCAqcXVlcnlFbnYpOwogc3RhdGljIGJvb2wgY2hvb3NlX2N1c3RvbV9wbGFuKENhY2hlZFBs YW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFt cyk7CiBzdGF0aWMgZG91YmxlIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwgYm9v bCBpbmNsdWRlX3BsYW5uZXIpOwogc3RhdGljIFF1ZXJ5ICpRdWVyeUxpc3RHZXRQcmltYXJ5U3Rt dChMaXN0ICpzdG10cyk7Ci1zdGF0aWMgdm9pZCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpz dG10X2xpc3QsIGJvb2wgYWNxdWlyZSk7CitzdGF0aWMgYm9vbCBBY3F1aXJlRXhlY3V0b3JMb2Nr cyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSk7CitzdGF0aWMgYm9vbCBDYWNoZWRQbGFu TG9ja1BhcnRpdGlvbnMoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKKwkJCQkJCSBQYXJh bUxpc3RJbmZvIGJvdW5kUGFyYW1zLAorCQkJCQkJIFJlc291cmNlT3duZXIgb3duZXIsCisJCQkJ CQkgQ2FjaGVkUGxhbkV4dHJhICoqZXh0cmEpOwogc3RhdGljIHZvaWQgQWNxdWlyZVBsYW5uZXJM b2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgdm9pZCBTY2FuUXVl cnlGb3JMb2NrcyhRdWVyeSAqcGFyc2V0cmVlLCBib29sIGFjcXVpcmUpOwogc3RhdGljIGJvb2wg U2NhblF1ZXJ5V2Fsa2VyKE5vZGUgKm5vZGUsIGJvb2wgKmFjcXVpcmUpOwpAQCAtNzgzLDE2ICs3 ODgsMjMgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsCiB9CiAKIC8qCi0gKiBDaGVja0NhY2hlZFBsYW46IHNlZSBpZiB0aGUgQ2FjaGVkUGxhblNv dXJjZSdzIGdlbmVyaWMgcGxhbiBpcyB2YWxpZC4KKyAqIENoZWNrQ2FjaGVkUGxhbjogc2VlIGlm IHRoZSBDYWNoZWRQbGFuU291cmNlJ3MgZ2VuZXJpYyBwbGFuIGlzIHZhbGlkIGFuZAorICogc2V0 ICpoYXNVbmxvY2tlZFBhcnRzIGlmIGFueSBQbGFubmVkU3RtdCBjb250YWlucyAiaW5pdGlhbGx5 IiBwcnVuYWJsZQorICogc3Vibm9kZXM7IHBhcnRpdGlvbnMgYXJlIG5vdCBsb2NrZWQgdGlsbCBp bml0aWFsIHBydW5pbmcgaXMgZG9uZS4KICAqCiAgKiBDYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkg Y2FsbGVkIFJldmFsaWRhdGVDYWNoZWRRdWVyeSB0byB2ZXJpZnkgdGhhdCB0aGUKICAqIHF1ZXJ5 dHJlZSBpcyB1cCB0byBkYXRlLgogICoKLSAqIE9uIGEgInRydWUiIHJldHVybiwgd2UgaGF2ZSBh Y3F1aXJlZCB0aGUgbG9ja3MgbmVlZGVkIHRvIHJ1biB0aGUgcGxhbi4KKyAqIE9uIGEgInRydWUi IHJldHVybiwgd2UgaGF2ZSBhY3F1aXJlZCB0aGUgbWluaW1hbCBzZXQgb2YgbG9ja3MgbmVlZGVk IHRvIHJ1bgorICogdGhlIHBsYW4sIHRoYXQgaXMsIGV4Y2x1ZGluZyBwYXJ0aXRpb25zIHRoYXQg YXJlIHN1YmplY3QgdG8gYmVpbmcgcHJ1bmVkCisgKiBiZWZvcmUgZXhlY3V0aW9uLiAgVGhlIGNh bGxlciBtdXN0IGxvY2sgcGFydGl0aW9ucyBhZnRlciBwcnVuaW5nIHRob3NlIGFuZAorICogbG9j a2luZyB0aGUgb25lcyB0aGF0IHJlbWFpbiBiZWZvcmUgYWN0dWFsbHkgdGVsbGluZyB0aGUgd29y bGQgdGhhdCB0aGUKKyAqIHBsYW4gaXMgInZhbGlkIi4KKyAqCiAgKiAoV2UgbXVzdCBkbyB0aGlz IGZvciB0aGUgInRydWUiIHJlc3VsdCB0byBiZSByYWNlLWNvbmRpdGlvbi1mcmVlLikKICAqLwog c3RhdGljIGJvb2wKLUNoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl KQorQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIGJvb2wgKmhh c1VubG9ja2VkUGFydHMpCiB7CiAJQ2FjaGVkUGxhbiAqcGxhbiA9IHBsYW5zb3VyY2UtPmdwbGFu OwogCkBAIC04MjYsNyArODM4LDcgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2UpCiAJCSAqLwogCQlBc3NlcnQocGxhbi0+cmVmY291bnQgPiAwKTsKIAotCQlB Y3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIHRydWUpOworCQkqaGFzVW5sb2Nr ZWRQYXJ0cyA9IEFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgdHJ1ZSk7CiAK IAkJLyoKIAkJICogSWYgcGxhbiB3YXMgdHJhbnNpZW50LCBjaGVjayB0byBzZWUgaWYgVHJhbnNh Y3Rpb25YbWluIGhhcwpAQCAtODQ4LDcgKzg2MCw3IEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQ bGFuU291cmNlICpwbGFuc291cmNlKQogCQl9CiAKIAkJLyogT29wcywgdGhlIHJhY2UgY2FzZSBo YXBwZW5lZC4gIFJlbGVhc2UgdXNlbGVzcyBsb2Nrcy4gKi8KLQkJQWNxdWlyZUV4ZWN1dG9yTG9j a3MocGxhbi0+c3RtdF9saXN0LCBmYWxzZSk7CisJCSh2b2lkKSBBY3F1aXJlRXhlY3V0b3JMb2Nr cyhwbGFuLT5zdG10X2xpc3QsIGZhbHNlKTsKIAl9CiAKIAkvKgpAQCAtMTEyMCwxNCArMTEzMiwx NyBAQCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFu bmVyKQogfQogCiAvKgotICogR2V0Q2FjaGVkUGxhbjogZ2V0IGEgY2FjaGVkIHBsYW4gZnJvbSBh IENhY2hlZFBsYW5Tb3VyY2UuCisgKiBHZXRDYWNoZWRQbGFuOiBnZXQgYSBjYWNoZWQgcGxhbiBm cm9tIGEgQ2FjaGVkUGxhblNvdXJjZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaGlkZXMgdGhlIGxv Z2ljIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRvIHVzZSBhIGdlbmVyaWMKICAqIHBsYW4gb3IgYSBj dXN0b20gcGxhbiBmb3IgdGhlIGdpdmVuIHBhcmFtZXRlcnM6IHRoZSBjYWxsZXIgZG9lcyBub3Qg a25vdwogICogd2hpY2ggaXQgd2lsbCBnZXQuCiAgKgogICogT24gcmV0dXJuLCB0aGUgcGxhbiBp cyB2YWxpZCBhbmQgd2UgaGF2ZSBzdWZmaWNpZW50IGxvY2tzIHRvIGJlZ2luCi0gKiBleGVjdXRp b24uCisgKiBleGVjdXRpb24uICBJZiB0aGUgcGxhbiBpcyBhIGdlbmVyaWMgcGxhbiBjb250YWlu aW5nIHBydW5hYmxlIHBhcnRpdGlvbnMsCisgKiB0aGUgbG9ja3Mgb24gcGFydGl0aW9ucyBhcmUg dGFrZW4gYWZ0ZXIgdGhlIHBydW5pbmcgYW5kIHRoZSByZXN1bHQgb2YgdGhhdAorICogcHJ1bmlu ZyBpcyBzYXZlZCBpbiAqZXh0cmEtPnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0IGZvciB0aGUgY2Fs bGVyIHRvIHBhc3MKKyAqIHRvIHRoZSBleGVjdXRvciwgYWxvbmcgd2l0aCBwbGFuLT5zdG10X2xp c3QuCiAgKgogICogT24gcmV0dXJuLCB0aGUgcmVmY291bnQgb2YgdGhlIHBsYW4gaGFzIGJlZW4g aW5jcmVtZW50ZWQ7IGEgbGF0ZXIKICAqIFJlbGVhc2VDYWNoZWRQbGFuKCkgY2FsbCBpcyBleHBl Y3RlZC4gIElmICJvd25lciIgaXMgbm90IE5VTEwgdGhlbgpAQCAtMTEzOSwxMiArMTE1NCwxNiBA QCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVy KQogICovCiBDYWNoZWRQbGFuICoKIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKLQkJCSAgUmVzb3VyY2VPd25lciBv d25lciwgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCisJCQkgIFJlc291cmNlT3duZXIgb3du ZXIsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJICBDYWNoZWRQbGFuRXh0cmEgKipl eHRyYSkKIHsKIAlDYWNoZWRQbGFuICpwbGFuID0gTlVMTDsKIAlMaXN0CSAgICpxbGlzdDsKIAli b29sCQljdXN0b21wbGFuOwogCisJQXNzZXJ0KGV4dHJhICE9IE5VTEwpOworCSpleHRyYSA9IE5V TEw7CisKIAkvKiBBc3NlcnQgY2FsbGVyIGlzIGRvaW5nIHRoaW5ncyBpbiBhIHNhbmUgb3JkZXIg Ki8KIAlBc3NlcnQocGxhbnNvdXJjZS0+bWFnaWMgPT0gQ0FDSEVEUExBTlNPVVJDRV9NQUdJQyk7 CiAJQXNzZXJ0KHBsYW5zb3VyY2UtPmlzX2NvbXBsZXRlKTsKQEAgLTExNjAsNyArMTE3OSwxMSBA QCBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdElu Zm8gYm91bmRQYXJhbXMsCiAKIAlpZiAoIWN1c3RvbXBsYW4pCiAJewotCQlpZiAoQ2hlY2tDYWNo ZWRQbGFuKHBsYW5zb3VyY2UpKQorCQlib29sCWhhc1VubG9ja2VkUGFydHMgPSBmYWxzZTsKKwor CQlpZiAoQ2hlY2tDYWNoZWRQbGFuKHBsYW5zb3VyY2UsICZoYXNVbmxvY2tlZFBhcnRzKSAmJgor CQkJaGFzVW5sb2NrZWRQYXJ0cyAmJgorCQkJQ2FjaGVkUGxhbkxvY2tQYXJ0aXRpb25zKHBsYW5z b3VyY2UsIGJvdW5kUGFyYW1zLCBvd25lciwgZXh0cmEpKQogCQl7CiAJCQkvKiBXZSB3YW50IGEg Z2VuZXJpYyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgb25lICovCiAJCQlwbGFu ID0gcGxhbnNvdXJjZS0+Z3BsYW47CkBAIC0xMjgyLDYgKzEzMDUsMTQ3IEBAIFJlbGVhc2VDYWNo ZWRQbGFuKENhY2hlZFBsYW4gKnBsYW4sIFJlc291cmNlT3duZXIgb3duZXIpCiAJfQogfQogCisv KgorICogRm9yIGVhY2ggUGxhbm5lZFN0bXQgaW4gdGhlIGdlbmVyaWMgcGxhbiwgZG8gdGhlICJp bml0aWFsIiBwYXJ0aXRpb24gcHJ1bmluZworICogaWYgbmVlZGVkIGFuZCBsb2NrIG9ubHkgcGFy dGl0aW9ucyB0aGF0IHN1cnZpdmUuCisgKgorICogT24gcmV0dXJuLCAoKmV4dHJhKS0+cGFydF9w cnVuZV9yZXN1bHRzX2xpc3Qgd2lsbCBjb250YWluIGFuIGVsZW1lbnQgZm9yCisgKiBlYWNoIFBs YW5uZWRTdG10IGluIHRoZSBnZW5lcmljIHBsYW4ncyBzdG10X2xpc3QsIHdoaWNoIGlzIGEgTklM IGlmIHRoZQorICogUGxhbm5lZFN0bXQgZG9lcyBub3QgY29udGFpbiBhbnkgUGFydGl0aW9uUHJ1 bmVJbmZvcyByZXF1aXJpbmcgaW5pdGlhbAorICogcHJ1bmluZyBvciBhIExpc3Qgb2YgUGFydGl0 aW9uUHJ1bmVSZXN1bHQgY29udGFpbmluZyBlbGVtZW50cyBjb3JyZXNwb25kaW5nCisgKiB0byB0 aGUgUGFydGl0aW9uUHJ1bmVJbmZvcyBpbiBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcy4KKyAq Lworc3RhdGljIGJvb2wKK0NhY2hlZFBsYW5Mb2NrUGFydGl0aW9ucyhDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlLAorCQkJCQkJIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCisJCQkJCQkg UmVzb3VyY2VPd25lciBvd25lciwKKwkJCQkJCSBDYWNoZWRQbGFuRXh0cmEgKipleHRyYSkKK3sK KwlDYWNoZWRQbGFuICpwbGFuID0gcGxhbnNvdXJjZS0+Z3BsYW47CisJTGlzdAkgICAqcGFydF9w cnVuZV9yZXN1bHRzX2xpc3QgPSBOSUw7CisJTGlzdAkgICAqbG9ja2VkUmVsaWRzX3Blcl9zdG10 ID0gTklMOworCUxpc3RDZWxsICAgKmxjMSwKKwkJCSAgICpsYzI7CisJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0LAorCQkJdG1wY29udGV4dDsKKworCS8qCisJICogV29uJ3QgYmUgaGVyZSB3aXRo b3V0IENoZWNrQ2FjaGVkUGxhbigpIGhhdmluZyB2YWxpZGF0ZWQgYSBnZW5lcmljCisJICogcGxh bi4KKwkgKi8KKwlBc3NlcnQocGxhbnNvdXJjZS0+Z3BsYW4gIT0gTlVMTCk7CisKKwkvKgorCSAq IENyZWF0ZSBhIHRlbXBvcmFyeSBjb250ZXh0IGZvciBtZW1vcnkgYWxsb2NhdGlvbnMgcmVxdWly ZWQgd2hpbGUKKwkgKiBleGVjdXRpbmcgcGFydGl0aW9uIHBydW5pbmcgc3RlcHMuCisJICovCisJ dG1wY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJCSAgICJDYWNoZWRQbGFuTG9ja1BhcnRpdGlvbnMoKSB3b3JraW5nIGRhdGEiLAor CQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyh0bXBjb250ZXh0KTsKKwlmb3JlYWNoKGxjMSwgcGxhbi0+c3RtdF9s aXN0KQorCXsKKwkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5l ZFN0bXQsIGxjMSk7CisJCUJpdG1hcHNldCAgKmxvY2tQYXJ0UmVsaWRzID0gTlVMTDsKKwkJaW50 CQkJcnRpOworCQlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdHMgPSBOSUw7CisJCUJpdG1hcHNl dCAgKmxvY2tlZFJlbGlkcyA9IE5VTEw7CisKKwkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlw ZSA9PSBDTURfVVRJTElUWSkKKwkJeworCQkJLyoKKwkJCSAqIElnbm9yZSB1dGlsaXR5IHN0YXRl bWVudHMsIGJlY2F1c2UgQWNxdWlyZUV4ZWN1dG9yTG9ja3Mgb24gdGhlCisJCQkgKiBwYXJlbnQg Q2FjaGVkUGxhbiB3b3VsZCBoYXZlIGRlYWx0IHdpdGggdGhlc2UuICBUaG91Z2gsIGRvIGxldAor CQkJICogdGhlIGNhbGxlciBrbm93IHRoYXQgbm8gcHJ1bmluZyBpcyBhcHBsaWNhYmxlIHRvIHRo aXMgc3RhdGVtZW50LgorCQkJICovCisJCQlwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCA9IGxhcHBl bmQocGFydF9wcnVuZV9yZXN1bHRzX2xpc3QsIE5JTCk7CisJCQlsb2NrZWRSZWxpZHNfcGVyX3N0 bXQgPSBsYXBwZW5kKGxvY2tlZFJlbGlkc19wZXJfc3RtdCwgTlVMTCk7CisJCQljb250aW51ZTsK KwkJfQorCisJCS8qIEZpZ3VyZSBvdXQgdGhlIHBhcnRpdGlvbnMgdGhhdCB3b3VsZCBuZWVkIHRv IGJlIGxvY2tlZC4gKi8KKwkJaWYgKHBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5n KQorCQl7CisJCQlmb3JlYWNoKGxjMiwgcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zKQorCQkJ eworCQkJCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvID0gbGZpcnN0X25vZGUoUGFydGl0 aW9uUHJ1bmVJbmZvLCBsYzIpOworCQkJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwcnVuZXJlc3Vs dCA9IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lUmVzdWx0KTsKKworCQkJCXBydW5lcmVzdWx0LT5y b290X3BhcmVudF9yZWxpZHMgPQorCQkJCQlibXNfY29weShwcnVuZWluZm8tPnJvb3RfcGFyZW50 X3JlbGlkcyk7CisJCQkJcHJ1bmVyZXN1bHQtPnZhbGlkX3N1YnBsYW5fb2ZmcyA9CisJCQkJCUV4 ZWNQYXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nKHBsYW5uZWRzdG10LCBib3VuZFBhcmFtcywKKwkJ CQkJCQkJCQkJCSAgcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkJICAmbG9ja1BhcnRSZWxpZHMpOwor CQkJCXBhcnRfcHJ1bmVfcmVzdWx0cyA9IGxhcHBlbmQocGFydF9wcnVuZV9yZXN1bHRzLCBwcnVu ZXJlc3VsdCk7CisJCQl9CisJCX0KKworCQkvKiBMb2NrICdlbS4gKi8KKwkJcnRpID0gLTE7CisJ CXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKGxvY2tQYXJ0UmVsaWRzLCBydGkpKSA+IDAp CisJCXsKKwkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcGxhbm5lZHN0bXQt PnJ0YWJsZSk7CisKKwkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKTsKKwor CQkJLyoKKwkJCSAqIEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgbG9jayBvbiBlYWNo IHJlbGF0aW9uIE9JRC4gTm90ZQorCQkJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxseSB0cnkgdG8g b3BlbiB0aGUgcmVsLCBhbmQgaGVuY2Ugd2lsbCBub3QKKwkJCSAqIGZhaWwgaWYgaXQncyBiZWVu IGRyb3BwZWQgZW50aXJlbHkgLS0tIHdlJ2xsIGp1c3QgdHJhbnNpZW50bHkKKwkJCSAqIGFjcXVp cmUgYSBub24tY29uZmxpY3RpbmcgbG9jay4KKwkJCSAqLworCQkJTG9ja1JlbGF0aW9uT2lkKHJ0 ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJbG9ja2VkUmVsaWRzID0gYm1zX2FkZF9t ZW1iZXIobG9ja2VkUmVsaWRzLCBydGkpOworCQl9CisKKwkJcGFydF9wcnVuZV9yZXN1bHRzX2xp c3QgPSBsYXBwZW5kKHBhcnRfcHJ1bmVfcmVzdWx0c19saXN0LAorCQkJCQkJCQkJCSAgcGFydF9w cnVuZV9yZXN1bHRzKTsKKwkJbG9ja2VkUmVsaWRzX3Blcl9zdG10ID0gbGFwcGVuZChsb2NrZWRS ZWxpZHNfcGVyX3N0bXQsCisJCQkJCQkJCQkJbG9ja2VkUmVsaWRzKTsKKwl9CisKKwkvKgorCSAq IElmIHRoZSBwbGFuIGlzIHN0aWxsIHZhbGlkLCBzZXQgKmV4dHJhLCByZXR1cm5pbmcgaW4gaXQg YSBjb3B5IHRoZQorCSAqIHBydW5pbmcgcmVzdWx0cyBvYnRhaW5lZCBhYm92ZSBhbGxvY2F0ZWQg aW4gdGhlIGNhbGxlcidzIGNvbnRleHQuCisJICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworCWlmIChwbGFuLT5pc192YWxpZCkKKwl7CisJCSpleHRyYSA9IChDYWNoZWRQ bGFuRXh0cmEgKikgcGFsbG9jKHNpemVvZihDYWNoZWRQbGFuRXh0cmEpKTsKKwkJKCpleHRyYSkt PnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0ID0gY29weU9iamVjdChwYXJ0X3BydW5lX3Jlc3VsdHNf bGlzdCk7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFJlbGVhc2UgdGhlIG5vdyB1c2VsZXNz IGxvY2tzLiAgTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgd2hhdAorCQkgKiBDaGVja0Nh Y2hlZFBsYW4oKSBkb2VzIHdoZW4gdGhlIGxvY2tzIHRha2VuIGJ5CisJCSAqIEFjcXVpcmVFeGVj dXRvckxvY2tzKCkgY2F1c2VzIHRoZSBwbGFuIHRvIGJlIGludmFsaWRhdGVkLgorCQkgKi8KKwkJ Zm9yYm90aChsYzEsIHBsYW4tPnN0bXRfbGlzdCwgbGMyLCBsb2NrZWRSZWxpZHNfcGVyX3N0bXQp CisJCXsKKwkJCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IGxmaXJzdChsYzEpOworCQkJQml0 bWFwc2V0ICpsb2NrZWRSZWxpZHMgPSBsZmlyc3QobGMyKTsKKwkJCWludAkJcnRpOworCisJCQlp ZiAocGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQkJCWNvbnRpbnVl OworCQkJcnRpID0gLTE7CisJCQl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihsb2NrZWRS ZWxpZHMsIHJ0aSkpID4gMCkKKwkJCXsKKwkJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRj aChydGksIHBsYW5uZWRzdG10LT5ydGFibGUpOworCisJCQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9 PSBSVEVfUkVMQVRJT04pOworCQkJCVVubG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+ cmVsbG9ja21vZGUpOworCQkJfQorCQl9CisJfQorCisJLyogQ2xlYXIgdXAgdGhlIHRlbXBvcmFy eSBjb250ZXh0LiAqLworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY29udGV4dCk7CisJcmV0dXJu IHBsYW4tPmlzX3ZhbGlkOworfQorCiAvKgogICogQ2FjaGVkUGxhbkFsbG93c1NpbXBsZVZhbGlk aXR5Q2hlY2s6IGNhbiB3ZSB1c2UgQ2FjaGVkUGxhbklzU2ltcGx5VmFsaWQ/CiAgKgpAQCAtMTcz OCwxMSArMTkwMiwxNiBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cykKIC8q CiAgKiBBY3F1aXJlRXhlY3V0b3JMb2NrczogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIGV4ZWN1 dGlvbiBvZiBhIGNhY2hlZCBwbGFuOwogICogb3IgcmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMg ZmFsc2UuCisgKgorICogSWYgc29tZSBQbGFubmVkU3RtdChzKSBjb250YWluICJpbml0aWFsbHkg cHJ1bmFibGUiIHBhcnRpdGlvbnMsIHRoZXkgYXJlIG5vdAorICogbG9ja2VkIGhlcmUuIEluc3Rl YWQsIHRoZSBjYWxsZXIgaXMgaW5mb3JtZWQgb2YgdGhlaXIgZXhpc3RlbmNlIHNvIHRoYXQgaXQK KyAqIGNhbiBsb2NrIHRoZW0gYWZ0ZXIgZG9pbmcgdGhlIGluaXRpYWwgcHJ1bmluZy4KICAqLwot c3RhdGljIHZvaWQKK3N0YXRpYyBib29sCiBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10 X2xpc3QsIGJvb2wgYWNxdWlyZSkKIHsKIAlMaXN0Q2VsbCAgICpsYzE7CisJYm9vbAkJaGFzVW5s b2NrZWRQYXJ0cyA9IGZhbHNlOwogCiAJZm9yZWFjaChsYzEsIHN0bXRfbGlzdCkKIAl7CkBAIC0x NzYzLDEwICsxOTMyLDE3IEBAIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwg Ym9vbCBhY3F1aXJlKQogCiAJCQlBc3NlcnQocGxhbm5lZHN0bXQtPm1pbkxvY2tSZWxpZHMgPT0g TlVMTCk7CiAJCQlpZiAocXVlcnkpCi0JCQkJU2NhblF1ZXJ5Rm9yTG9ja3MocXVlcnksIGFjcXVp cmUpOworCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCB0cnVlKTsKIAkJCWNvbnRpbnVlOwog CQl9CiAKKwkJLyoKKwkJICogSWYgcGFydGl0aW9ucyBjYW4gYmUgcHJ1bmVkIGJlZm9yZSBleGVj dXRpb24sIGRlZmVyIHRoZWlyIGxvY2tpbmcgdG8KKwkJICogdGhlIGNhbGxlci4KKwkJICovCisJ CWlmIChwbGFubmVkc3RtdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZykKKwkJCWhhc1VubG9ja2Vk UGFydHMgPSB0cnVlOworCiAJCWFsbExvY2tSZWxpZHMgPSBwbGFubmVkc3RtdC0+bWluTG9ja1Jl bGlkczsKIAkJcnRpID0gLTE7CiAJCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKGFsbExv Y2tSZWxpZHMsIHJ0aSkpID4gMCkKQEAgLTE3ODgsNiArMTk2NCw4IEBAIEFjcXVpcmVFeGVjdXRv ckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQogCQkJCVVubG9ja1JlbGF0aW9u T2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOwogCQl9CiAJfQorCisJcmV0dXJuIGhh c1VubG9ja2VkUGFydHM7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t bWdyL3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwppbmRl eCA3YjFhZTZmZGNmLi45NGE5ZGI4NGUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t bWdyL3BvcnRhbG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMK QEAgLTMwMyw2ICszMDMsMjIgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAlw b3J0YWwtPnN0YXR1cyA9IFBPUlRBTF9ERUZJTkVEOwogfQogCisvKgorICogQ29waWVzIHRoZSBn aXZlbiBDYWNoZWRQbGFuRXh0cmEgc3RydWN0IGludG8gdGhlIHBvcnRhbC4KKyAqLwordm9pZAor UG9ydGFsU2F2ZUNhY2hlZFBsYW5FeHRyYShQb3J0YWwgcG9ydGFsLCBDYWNoZWRQbGFuRXh0cmEg KmV4dHJhKQoreworCU1lbW9yeUNvbnRleHQJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KHBvcnRhbC0+cG9ydGFsQ29udGV4dCk7CisKKwlBc3NlcnQocG9ydGFsLT5jcGxhbl9leHRyYSA9 PSBOVUxMICYmIGV4dHJhICE9IE5VTEwpOworCXBvcnRhbC0+Y3BsYW5fZXh0cmEgPSAoQ2FjaGVk UGxhbkV4dHJhICopCisJCXBhbGxvYyhzaXplb2YoQ2FjaGVkUGxhbkV4dHJhKSk7CisJcG9ydGFs LT5jcGxhbl9leHRyYS0+cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QgPQorCQljb3B5T2JqZWN0KGV4 dHJhLT5wYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7Cit9CisKIC8qCiAgKiBQb3J0YWxSZWxlYXNlQ2FjaGVkUGxhbgogICoJCVJlbGVhc2Ug YSBwb3J0YWwncyByZWZlcmVuY2UgdG8gaXRzIGNhY2hlZCBwbGFuLCBpZiBhbnkuCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggYi9zcmMvaW5jbHVkZS9jb21tYW5k cy9leHBsYWluLmgKaW5kZXggOWViZGUwODlhZS4uMjY5Y2M0ZDU2MiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4 cGxhaW4uaApAQCAtODcsNyArODcsOSBAQCBleHRlcm4gdm9pZCBFeHBsYWluT25lVXRpbGl0eShO b2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAqaW50bywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0 ZSAqZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkJCSAgUGFyYW1MaXN0SW5mbyBw YXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKIAotZXh0ZXJuIHZvaWQgRXhwbGFp bk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLAorZXh0 ZXJuIHZvaWQgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJ ICAgTGlzdCAqcGFydF9wcnVuZV9yZXN1bHRzLAorCQkJCQkJICAgSW50b0NsYXVzZSAqaW50bywK IAkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJ CQkJICAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAog CQkJCQkJICAgY29uc3QgaW5zdHJfdGltZSAqcGxhbmR1cmF0aW9uLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5oCmluZGV4IGFlZWFlYjc4ODQuLjRiOThkMGQyZWYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjUGFydGl0aW9uLmgKQEAgLTEyOSw1ICsxMjksMTAgQEAgZXh0ZXJuIFBhcnRp dGlvblBydW5lU3RhdGUgKkV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5z dGF0ZSwKIAkJCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyb290X3BhcmVudF9yZWxpZHMsCiAJCQkJ CQkJCQkJCQkJIEJpdG1hcHNldCAqKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyk7CiBleHRlcm4g Qml0bWFwc2V0ICpFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAq cHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkgICBib29sIGluaXRpYWxfcHJ1bmUpOworCQkJCQkJCQkJ CSAgIGJvb2wgaW5pdGlhbF9wcnVuZSwKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKipzY2FuX2xl YWZwYXJ0X3J0aXMpOworZXh0ZXJuIEJpdG1hcHNldCAqRXhlY1BhcnRpdGlvbkRvSW5pdGlhbFBy dW5pbmcoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQlQYXJhbUxpc3RJbmZvIHBh cmFtcywKKwkJCQkJCQkJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkJCUJp dG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiAjZW5kaWYJCQkJCQkJLyogRVhFQ1BBUlRJ VElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAppbmRleCBlNzllMmMwMDFmLi41YTdkMDc1 NzUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKQEAgLTM1LDYgKzM1LDggQEAgdHlwZWRlZiBz dHJ1Y3QgUXVlcnlEZXNjCiAJLyogVGhlc2UgZmllbGRzIGFyZSBwcm92aWRlZCBieSBDcmVhdGVR dWVyeURlc2MgKi8KIAlDbWRUeXBlCQlvcGVyYXRpb247CQkvKiBDTURfU0VMRUNULCBDTURfVVBE QVRFLCBldGMuICovCiAJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10OwkvKiBwbGFubmVyJ3Mgb3V0 cHV0IChjb3VsZCBiZSB1dGlsaXR5LCB0b28pICovCisJTGlzdAkJKnBhcnRfcHJ1bmVfcmVzdWx0 czsgLyogUGFydGl0aW9uUHJ1bmVSZXN1bHRzIHJldHVybmVkIGJ5CisJCQkJCQkJCQkgICogQ2Fj aGVkUGxhbkxvY2tQYXJ0aXRpb25zKCkgKi8KIAljb25zdCBjaGFyICpzb3VyY2VUZXh0OwkJLyog c291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5ICovCiAJU25hcHNob3QJc25hcHNob3Q7CQkvKiBzbmFw c2hvdCB0byB1c2UgZm9yIHF1ZXJ5ICovCiAJU25hcHNob3QJY3Jvc3NjaGVja19zbmFwc2hvdDsJ LyogY3Jvc3NjaGVjayBmb3IgUkkgdXBkYXRlL2RlbGV0ZSAqLwpAQCAtNTcsNiArNTksNyBAQCB0 eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAogLyogaW4gcHF1ZXJ5LmMgKi8KIGV4dGVybiBRdWVy eURlc2MgKkNyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJ CSAgTGlzdCAqcGFydF9wcnVuZV9yZXN1bHRzLAogCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNvdXJj ZVRleHQsCiAJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCSAgU25hcHNob3Qg Y3Jvc3NjaGVja19zbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggOWE2NGE4MzBhMi4u ZjEzNzQwNTdlNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTYxNyw2ICs2MTcsNyBAQCB0eXBl ZGVmIHN0cnVjdCBFU3RhdGUKIAlMaXN0CSAgICplc19ydGVwZXJtaW5mb3M7CS8qIExpc3Qgb2Yg UlRFUGVybWlzc2lvbkluZm8gKi8KIAlQbGFubmVkU3RtdCAqZXNfcGxhbm5lZHN0bXQ7CS8qIGxp bmsgdG8gdG9wIG9mIHBsYW4gdHJlZSAqLwogCUxpc3QJICAgKmVzX3BhcnRfcHJ1bmVfaW5mb3M7 CS8qIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zICovCisJTGlzdAkgICAqZXNfcGFydF9wcnVu ZV9yZXN1bHRzOyAvKiBRdWVyeURlc2MucGFydF9wcnVuZV9yZXN1bHRzICovCiAJY29uc3QgY2hh ciAqZXNfc291cmNlVGV4dDsJLyogU291cmNlIHRleHQgZnJvbSBRdWVyeURlc2MgKi8KIAogCUp1 bmtGaWx0ZXIgKmVzX2p1bmtGaWx0ZXI7CS8qIHRvcC1sZXZlbCBqdW5rIGZpbHRlciwgaWYgYW55 ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDQzMzdlN2FhMzQuLjEwZjEyZTc4MGUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCkBAIC0xMzQsOCArMTM0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5l ckdsb2JhbAogCWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5pbmc7CiAKIAkvKgotCSAqIEluZGV4 ZXMgb2YgYWxsIHJhbmdlIHRhYmxlIGVudHJpZXM7IGZvciBBY3F1aXJlRXhlY3V0b3JMb2Nrcygp J3MKLQkgKiBwZXJ1c2FsLgorCSAqIEluZGV4ZXMgb2YgYWxsIHJhbmdlIHRhYmxlIGVudHJpZXMg ZXhjZXB0IHRob3NlIG9mIGxlYWYgcGFydGl0aW9ucworCSAqIHNjYW5uZWQgYnkgcHJ1bmFibGUg c3VicGxhbnM7IGZvciBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHBlcnVzYWwuCiAJICovCiAJQml0 bWFwc2V0ICAqbWluTG9ja1JlbGlkczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBlYjBhMDA3 OTQ2Li5hYjhiYzc0ZTRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtODIsNyArODIsOSBAQCB0 eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCUxpc3QJICAgKnBlcm1JbmZvczsJCS8qIGxpc3Qg b2YgUlRFUGVybWlzc2lvbkluZm8gbm9kZXMgZm9yIHJ0YWJsZQogCQkJCQkJCQkgKiBlbnRyaWVz IG5lZWRpbmcgb25lICovCiAKLQlCaXRtYXBzZXQgICptaW5Mb2NrUmVsaWRzOwkvKiBJbmRleGVz IG9mIGFsbCByYW5nZSB0YWJsZSBlbnRyaWVzOyBmb3IKKwlCaXRtYXBzZXQgICptaW5Mb2NrUmVs aWRzOwkvKiBJbmRleGVzIG9mIGFsbCByYW5nZSB0YWJsZSBlbnRyaWVzIGV4Y2VwdAorCQkJCQkJ CQkgKiB0aG9zZSBvZiBsZWFmIHBhcnRpdGlvbnMgc2Nhbm5lZCBieQorCQkJCQkJCQkgKiBwcnVu YWJsZSBzdWJwbGFuczsgZm9yCiAJCQkJCQkJCSAqIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkncyBw ZXJ1c2FsICovCiAKIAkvKiBydGFibGUgaW5kZXhlcyBvZiB0YXJnZXQgcmVsYXRpb25zIGZvciBJ TlNFUlQvVVBEQVRFL0RFTEVURS9NRVJHRSAqLwpAQCAtMTU3NSw2ICsxNTc3LDMzIEBAIHR5cGVk ZWYgc3RydWN0IFBhcnRpdGlvblBydW5lU3RlcENvbWJpbmUKIAlMaXN0CSAgICpzb3VyY2Vfc3Rl cGlkczsKIH0gUGFydGl0aW9uUHJ1bmVTdGVwQ29tYmluZTsKIAorLyotLS0tLS0tLS0tLS0tLS0t CisgKiBQYXJ0aXRpb25QcnVuZVJlc3VsdAorICoKKyAqIFRoZSByZXN1bHQgb2YgcGVyZm9ybWlu ZyBFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZygpIG9uIGEgZ2l2ZW4KKyAqIFBhcnRpdGlv blBydW5lSW5mby4KKyAqCisgKiByb290X3BhcmVudF9yZWxpZHMgaXMgc2FtZSBhcyBQYXJ0aXRp b25QcnVuZUluZm8ucm9vdF9wYXJlbnRfcmVsaWRzLiAgSXQncworICogdGhlcmUgZm9yIGNyb3Nz LWNoZWNraW5nIGluIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZygpIHRoYXQgdGhlCisgKiBQYXJ0 aXRpb25QcnVuZVJlc3VsdCBhbmQgdGhlIFBhcnRpdGlvblBydW5lSW5mbyBhdCBhIGdpdmVuIGlu ZGV4IGluCisgKiBFU3RhdGUuZXNfcGFydF9wcnVuZV9yZXN1bHRzIGFuZCBFU3RhdGUuZXNfcGFy dF9wcnVuZV9pbmZvcywgcmVzcGVjdGl2ZWx5LAorICogYmVsb25nIHRvIHRoZSBzYW1lIHBhcmVu dCBwbGFuIG5vZGUuCisgKgorICogdmFsaWRfc3VicGxhbnNfb2ZmcyBjb250YWlucyB0aGUgaW5k ZXhlcyBvZiBzdWJwbGFucyByZW1haW5pbmcgYWZ0ZXIKKyAqIHBlcmZvcm1pbmcgaW5pdGlhbCBw cnVuaW5nIGJ5IGNhbGxpbmcgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKCkgb24gdGhlCisgKiBQ YXJ0aXRpb25QcnVuZUluZm8uCisgKgorICogVGhpcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSByZXN1 bHQgb2YgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZyB0aGF0IGlzCisgKiBwZWZvcm1lZCBiZWZv cmUgdGhlIGV4ZWN1dGlvbiBoYXMgc3RhcnRlZCwgc3VjaCBhcyBpbgorICogQ2FjaGVkUGxhbkxv Y2tQYXJ0aXRpb25zKCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFBhcnRpdGlvblBydW5lUmVzdWx0 Cit7CisJTm9kZVRhZwkJdHlwZTsKKworCUJpdG1hcHNldAkgICAqcm9vdF9wYXJlbnRfcmVsaWRz OworCUJpdG1hcHNldAkgICAqdmFsaWRfc3VicGxhbl9vZmZzOworfSBQYXJ0aXRpb25QcnVuZVJl c3VsdDsKIAogLyoKICAqIFBsYW4gaW52YWxpZGF0aW9uIGluZm8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgK aW5kZXggMDQ5OTYzNWY1OS4uNGFjNjZkMjc2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvcGxhbmNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKQEAgLTE2 MCw2ICsxNjAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkUGxhbgogCU1lbW9yeUNvbnRleHQg Y29udGV4dDsJCS8qIGNvbnRleHQgY29udGFpbmluZyB0aGlzIENhY2hlZFBsYW4gKi8KIH0gQ2Fj aGVkUGxhbjsKIAorLyoKKyAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gcGFzcyB0aGUgZXhl Y3V0b3Igd2hlbiBleGVjdXRpbmcgYSBDYWNoZWRQbGFuLgorICovCit0eXBlZGVmIHN0cnVjdCBD YWNoZWRQbGFuRXh0cmEKK3sKKwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdDsKK30g Q2FjaGVkUGxhbkV4dHJhOworCiAvKgogICogQ2FjaGVkRXhwcmVzc2lvbiBpcyBhIGxvdy1vdmVy aGVhZCBtZWNoYW5pc20gZm9yIGNhY2hpbmcgdGhlIHBsYW5uZWQgZm9ybQogICogb2Ygc3RhbmRh bG9uZSBzY2FsYXIgZXhwcmVzc2lvbnMuICBXaGlsZSBzdWNoIGV4cHJlc3Npb25zIGFyZSBub3Qg dXN1YWxseQpAQCAtMjIwLDcgKzIyOCw4IEBAIGV4dGVybiBMaXN0ICpDYWNoZWRQbGFuR2V0VGFy Z2V0TGlzdChDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogZXh0ZXJuIENhY2hlZFBsYW4g KkdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkJIFBh cmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAJCQkJCQkJCSBSZXNvdXJjZU93bmVyIG93bmVyLAot CQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworCQkJCQkJCQkgUXVlcnlFbnZp cm9ubWVudCAqcXVlcnlFbnYsCisJCQkJCQkJCSBDYWNoZWRQbGFuRXh0cmEgKipleHRyYSk7CiBl eHRlcm4gdm9pZCBSZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFuICpwbGFuLCBSZXNvdXJjZU93 bmVyIG93bmVyKTsKIAogZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbkFsbG93c1NpbXBsZVZhbGlkaXR5 Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL3BvcnRhbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKaW5kZXggYWVk ZGJkYWZlNS4uNDliYjAwY2RhNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFs LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKQEAgLTEzOCw2ICsxMzgsOCBAQCB0 eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJUXVlcnlDb21wbGV0aW9uIHFjOwkJCS8qIGNvbW1h bmQgY29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAqLwogCUxpc3QJICAgKnN0bXRz OwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCiAJQ2FjaGVkUGxhbiAqY3BsYW47CQkJLyog Q2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCisJQ2FjaGVkUGxhbkV4dHJhICpj cGxhbl9leHRyYTsJLyogQ2FjaGVkUGxhbkV4dHJhIGZvciBjcGxhbiBpbiBQb3J0YWwncworCQkJ CQkJCQkJICogbWVtb3J5ICovCiAKIAlQYXJhbUxpc3RJbmZvIHBvcnRhbFBhcmFtczsgLyogcGFy YW1zIHRvIHBhc3MgdG8gcXVlcnkgKi8KIAlRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudjsgLyog ZW52aXJvbm1lbnQgZm9yIHF1ZXJ5ICovCkBAIC0yNDIsNiArMjQ0LDcgQEAgZXh0ZXJuIHZvaWQg UG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAkJCQkJCQkgIENvbW1hbmRUYWcgY29t bWFuZFRhZywKIAkJCQkJCQkgIExpc3QgKnN0bXRzLAogCQkJCQkJCSAgQ2FjaGVkUGxhbiAqY3Bs YW4pOworZXh0ZXJuIHZvaWQgUG9ydGFsU2F2ZUNhY2hlZFBsYW5FeHRyYShQb3J0YWwgcG9ydGFs LCBDYWNoZWRQbGFuRXh0cmEgKmV4dHJhKTsKIGV4dGVybiBQbGFubmVkU3RtdCAqUG9ydGFsR2V0 UHJpbWFyeVN0bXQoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxDcmVhdGVIb2xk U3RvcmUoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxIYXNoVGFibGVEZWxldGVB bGwodm9pZCk7Ci0tIAoyLjM1LjMKCg== --000000000000f51b4805efe8cd0f Content-Type: application/octet-stream; name="v30-0001-Preparatory-refactoring-before-reworking-CachedP.patch" Content-Disposition: attachment; filename="v30-0001-Preparatory-refactoring-before-reworking-CachedP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpwbge80 RnJvbSAyMmM2NGIzZDFhZGUwY2IwZjQxM2MxN2Q4NGE5YmIwZGQ0ZTZkNzM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAxMyBEZWMgMjAyMiAxMTo1ODowNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMwIDEv Ml0gUHJlcGFyYXRvcnkgcmVmYWN0b3JpbmcgYmVmb3JlIHJld29ya2luZyBDYWNoZWRQbGFuCiBs b2NraW5nCgpSZW1lbWJlciB0aGUgUlQgaW5kZXhlcyBvZiBSVEVzIHRoYXQgQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoKSBtdXN0Cmxvb2sgYXQgdG8gY29uc2lkZXIgbG9ja2luZyBpbiBhIGJpdG1hcHNl dCwgc28gdGhhdCBuc3RlYWQgb2YgbG9vcGluZwpvdmVyIHRoZSByYW5nZSB0YWJsZSB0byBmaW5k IHRob3NlIFJURXMsIGl0IGNhbiBsb29rIHRoZW0gdXAgdXNpbmcKdGhlIFJUIGluZGV4ZXMgc2V0 IGluIHRoZSBiaXRtYXBzZXQuCgpUaGlzIGFsc28gYWRkcyBzb21lIGV4dHJhIGluZm9ybWF0aW9u IHJlbGF0ZWQgdG8gZXhlY3V0aW9uLXRpbWUKcHJ1bmluZyB0byB0aGUgcmVsZXZhbnQgcGxhbiBu b2Rlcy4KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgfCAgMSArCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgfCAgNiArKysrCiBzcmMvYmFja2Vu ZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAgICAgfCAgOCArKysrLS0KIHNyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3BsYW5uZXIuYyB8ICAyICsrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9z ZXRyZWZzLmMgfCAxMiArKysrKysrKwogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVu ZS5jIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcGxhbmNhY2hlLmMgIHwgMTAgKysrKystLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5oIHwgIDIgKysKIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggICAgICAgICAg ICB8ICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICB8IDExICsrKysr KysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgfCAxOSArKysrKysrKysr KysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMDYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IGE1YjhlNDNlYzUuLjY1YzRiNjNi YmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC0xODIsNiArMTgyLDcgQEAg RXhlY1NlcmlhbGl6ZVBsYW4oUGxhbiAqcGxhbiwgRVN0YXRlICplc3RhdGUpCiAJcHN0bXQtPnRy YW5zaWVudFBsYW4gPSBmYWxzZTsKIAlwc3RtdC0+ZGVwZW5kc09uUm9sZSA9IGZhbHNlOwogCXBz dG10LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBmYWxzZTsKKwlwc3RtdC0+Y29udGFpbnNJbml0aWFs UHJ1bmluZyA9IGZhbHNlOwkvKiB3b3JrZXJzIG5lZWQgbm90IGtub3chICovCiAJcHN0bXQtPnBs YW5UcmVlID0gcGxhbjsKIAlwc3RtdC0+cGFydFBydW5lSW5mb3MgPSBlc3RhdGUtPmVzX3BhcnRf cHJ1bmVfaW5mb3M7CiAJcHN0bXQtPnJ0YWJsZSA9IGVzdGF0ZS0+ZXNfcmFuZ2VfdGFibGU7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggNzZkNzliOTc0MS4uNWI2MjE1Nzcx MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpAQCAtMTk1Niw2ICsxOTU2LDcg QEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0 aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQlBc3NlcnQocGFydGRlc2MtPm5wYXJ0cyA+PSBw aW5mby0+bnBhcnRzKTsKIAkJCXBwcnVuZS0+bnBhcnRzID0gcGFydGRlc2MtPm5wYXJ0czsKIAkJ CXBwcnVuZS0+c3VicGxhbl9tYXAgPSBwYWxsb2Moc2l6ZW9mKGludCkgKiBwYXJ0ZGVzYy0+bnBh cnRzKTsKKwkJCXBwcnVuZS0+cnRpX21hcCA9IHBhbGxvYyhzaXplb2YoSW5kZXgpICogcGFydGRl c2MtPm5wYXJ0cyk7CiAJCQlpZiAocGFydGRlc2MtPm5wYXJ0cyA9PSBwaW5mby0+bnBhcnRzKQog CQkJewogCQkJCS8qCkBAIC0xOTY2LDYgKzE5NjcsOCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykK IAkJCQlwcHJ1bmUtPnN1YnBhcnRfbWFwID0gcGluZm8tPnN1YnBhcnRfbWFwOwogCQkJCW1lbWNw eShwcHJ1bmUtPnN1YnBsYW5fbWFwLCBwaW5mby0+c3VicGxhbl9tYXAsCiAJCQkJCSAgIHNpemVv ZihpbnQpICogcGluZm8tPm5wYXJ0cyk7CisJCQkJbWVtY3B5KHBwcnVuZS0+cnRpX21hcCwgcGlu Zm8tPnJ0aV9tYXAsCisJCQkJCSAgIHNpemVvZihpbnQpICogcGluZm8tPm5wYXJ0cyk7CiAKIAkJ CQkvKgogCQkJCSAqIERvdWJsZS1jaGVjayB0aGF0IHRoZSBsaXN0IG9mIHVucHJ1bmVkIHJlbGF0 aW9ucyBoYXMgbm90CkBAIC0yMDE2LDYgKzIwMTksOCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykK IAkJCQkJCQlwaW5mby0+c3VicGxhbl9tYXBbcGRfaWR4XTsKIAkJCQkJCXBwcnVuZS0+c3VicGFy dF9tYXBbcHBfaWR4XSA9CiAJCQkJCQkJcGluZm8tPnN1YnBhcnRfbWFwW3BkX2lkeF07CisJCQkJ CQlwcHJ1bmUtPnJ0aV9tYXBbcHBfaWR4XSA9CisJCQkJCQkJcGluZm8tPnJ0aV9tYXBbcGRfaWR4 XTsKIAkJCQkJCXBkX2lkeCsrOwogCQkJCQl9CiAJCQkJCWVsc2UKQEAgLTIwMjMsNiArMjAyOCw3 IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRp dGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJCQkJLyogdGhpcyBwYXJ0ZGVzYyBlbnRyeSBp cyBub3QgaW4gdGhlIHBsYW4gKi8KIAkJCQkJCXBwcnVuZS0+c3VicGxhbl9tYXBbcHBfaWR4XSA9 IC0xOwogCQkJCQkJcHBydW5lLT5zdWJwYXJ0X21hcFtwcF9pZHhdID0gLTE7CisJCQkJCQlwcHJ1 bmUtPnJ0aV9tYXBbcHBfaWR4XSA9IDA7CiAJCQkJCX0KIAkJCQl9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNz LmMKaW5kZXggOTY2Yjc1ZjVhNi4uMTE2MTY3MWZhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAg LTE1OCw2ICsxNTgsMTEgQEAKIAl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsJCS8qIHNraXAg OmZsZG5hbWUgKi8gXAogCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFkSW50Q29scyhsZW4pCiAK Ky8qIFJlYWQgYW4gSW5kZXggYXJyYXkgKi8KKyNkZWZpbmUgUkVBRF9JTkRFWF9BUlJBWShmbGRu YW1lLCBsZW4pIFwKKwl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsJCS8qIHNraXAgOmZsZG5h bWUgKi8gXAorCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFkSW5kZXhDb2xzKGxlbikKKwogLyog UmVhZCBhIGJvb2wgYXJyYXkgKi8KICNkZWZpbmUgUkVBRF9CT09MX0FSUkFZKGZsZG5hbWUsIGxl bikgXAogCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOwkJLyogc2tpcCA6ZmxkbmFtZSAqLyBc CkBAIC03OTYsNyArODAxLDYgQEAgZm5uYW1lKGludCBudW1Db2xzKSBcCiAgKi8KIFJFQURfU0NB TEFSX0FSUkFZKHJlYWRBdHRyTnVtYmVyQ29scywgaW50MTYsIGF0b2kpCiBSRUFEX1NDQUxBUl9B UlJBWShyZWFkT2lkQ29scywgT2lkLCBhdG9vaWQpCi0vKiBvdXRmdW5jcy5jIGhhcyB3cml0ZUlu ZGV4Q29scywgYnV0IHdlIGRvbid0IHlldCBuZWVkIHRoYXQgaGVyZSAqLwotLyogUkVBRF9TQ0FM QVJfQVJSQVkocmVhZEluZGV4Q29scywgSW5kZXgsIGF0b3VpKSAqLworUkVBRF9TQ0FMQVJfQVJS QVkocmVhZEluZGV4Q29scywgSW5kZXgsIGF0b3VpKQogUkVBRF9TQ0FMQVJfQVJSQVkocmVhZElu dENvbHMsIGludCwgYXRvaSkKIFJFQURfU0NBTEFSX0FSUkFZKHJlYWRCb29sQ29scywgYm9vbCwg c3RydG9ib29sKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDVkZDRmOTI3 MjAuLjYyMGIxNjNlZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTUy Myw4ICs1MjMsMTAgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIg KnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbGxlbE1vZGVO ZWVkZWQgPSBnbG9iLT5wYXJhbGxlbE1vZGVOZWVkZWQ7CiAJcmVzdWx0LT5wbGFuVHJlZSA9IHRv cF9wbGFuOwogCXJlc3VsdC0+cGFydFBydW5lSW5mb3MgPSBnbG9iLT5wYXJ0UHJ1bmVJbmZvczsK KwlyZXN1bHQtPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcgPSBnbG9iLT5jb250YWluc0luaXRpYWxQ cnVuaW5nOwogCXJlc3VsdC0+cnRhYmxlID0gZ2xvYi0+ZmluYWxydGFibGU7CiAJcmVzdWx0LT5w ZXJtSW5mb3MgPSBnbG9iLT5maW5hbHJ0ZXBlcm1pbmZvczsKKwlyZXN1bHQtPm1pbkxvY2tSZWxp ZHMgPSBnbG9iLT5taW5Mb2NrUmVsaWRzOwogCXJlc3VsdC0+cmVzdWx0UmVsYXRpb25zID0gZ2xv Yi0+cmVzdWx0UmVsYXRpb25zOwogCXJlc3VsdC0+YXBwZW5kUmVsYXRpb25zID0gZ2xvYi0+YXBw ZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3VicGxhbnMgPSBnbG9iLT5zdWJwbGFuczsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCA1OTZmMWZiYzhlLi5lZDQzZDU5MzZkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0yNzksNiArMjc5LDE2IEBAIHNl dF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJICovCiAJ YWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUocm9vdCwgZmFsc2UpOwogCisJLyoKKwkgKiBBZGQgdGhl IHF1ZXJ5J3MgYWRqdXN0ZWQgcmFuZ2Ugb2YgUlQgaW5kZXhlcyB0byBnbG9iLT5taW5Mb2NrUmVs aWRzLgorCSAqIFRoZSBhZGp1c3RlZCBSVCBpbmRleGVzIG9mIHBydW5hYmxlIHJlbGF0aW9ucyB3 aWxsIGJlIGRlbGV0ZWQgZnJvbSB0aGUKKwkgKiBzZXQgYmVsb3cgd2hlcmUgUGFydGl0aW9uUHJ1 bmVJbmZvcyBhcmUgcHJvY2Vzc2VkLgorCSAqLworCWdsb2ItPm1pbkxvY2tSZWxpZHMgPQorCQli bXNfYWRkX3JhbmdlKGdsb2ItPm1pbkxvY2tSZWxpZHMsCisJCQkJCSAgcnRvZmZzZXQgKyAxLAor CQkJCQkgIHJ0b2Zmc2V0ICsgbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJsZSkpOworCiAJ LyoKIAkgKiBBZGp1c3QgUlQgaW5kZXhlcyBvZiBQbGFuUm93TWFya3MgYW5kIGFkZCB0byBmaW5h bCByb3dtYXJrcyBsaXN0CiAJICovCkBAIC0zNzcsOSArMzg3LDExIEBAIHNldF9wbGFuX3JlZmVy ZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJCQkJLyogUlQgaW5kZXggb2Yg dGhlIHRhYmxlIHRvIHdoaWNoIHRoZSBwaW5mbyBiZWxvbmdzLiAqLwogCQkJCXBpbmZvLT5ydGlu ZGV4ICs9IHJ0b2Zmc2V0OwogCQkJfQorCiAJCX0KIAogCQlnbG9iLT5wYXJ0UHJ1bmVJbmZvcyA9 IGxhcHBlbmQoZ2xvYi0+cGFydFBydW5lSW5mb3MsIHBydW5laW5mbyk7CisJCWdsb2ItPmNvbnRh aW5zSW5pdGlhbFBydW5pbmcgfD0gcHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmc7CiAJfQog CiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9w YXJ0cHJ1bmUuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwppbmRleCBk NDhmNjc4NGMxLi41NjI3MGQ3NjcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25p bmcvcGFydHBydW5lLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5j CkBAIC0xNDQsNyArMTQ0LDkgQEAgc3RhdGljIExpc3QgKm1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1 bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCSAgIExpc3QgKnBydW5lcXVhbCwK IAkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJICAgaW50ICpy ZWxpZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxh bnMpOworCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJ CQkgICBib29sICpuZWVkc19pbml0X3BydW5pbmcsCisJCQkJCQkJCQkJICAgYm9vbCAqbmVlZHNf ZXhlY19wcnVuaW5nKTsKIHN0YXRpYyB2b2lkIGdlbl9wYXJ0cHJ1bmVfc3RlcHMoUmVsT3B0SW5m byAqcmVsLCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQlQYXJ0Q2xhdXNlVGFyZ2V0IHRhcmdldCwK IAkJCQkJCQkJR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KTsKQEAgLTIzNCw2 ICsyMzYsOCBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCSAgICpyZWxpZF9zdWJwbGFuX21hcDsKIAlMaXN0 Q2VsbCAgICpsYzsKIAlpbnQJCQlpOworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmluZyA9IGZhbHNl OworCWJvb2wJCW5lZWRzX2V4ZWNfcHJ1bmluZyA9IGZhbHNlOwogCiAJLyoKIAkgKiBTY2FuIHRo ZSBzdWJwYXRocyB0byBzZWUgd2hpY2ggb25lcyBhcmUgc2NhbnMgb2YgcGFydGl0aW9uIGNoaWxk CkBAIC0zMTMsMTIgKzMxNywxNiBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJQml0bWFwc2V0ICAqcGFydHJlbGlk cyA9IChCaXRtYXBzZXQgKikgbGZpcnN0KGxjKTsKIAkJTGlzdAkgICAqcGluZm9saXN0OwogCQlC aXRtYXBzZXQgICptYXRjaGVkc3VicGxhbnMgPSBOVUxMOworCQlib29sCQlwYXJ0cmVsX25lZWRz X2luaXRfcHJ1bmluZzsKKwkJYm9vbAkJcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmc7CiAKIAkJ cGluZm9saXN0ID0gbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8ocm9vdCwgcGFyZW50cmVs LAogCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwsCiAJCQkJCQkJCQkJCQkgIHBhcnRyZWxpZHMsCiAJ CQkJCQkJCQkJCQkgIHJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJCQkJCQkJICAmbWF0Y2hlZHN1 YnBsYW5zKTsKKwkJCQkJCQkJCQkJCSAgJm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJCQkJCSAg JnBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJCQkJCQkJICAmcGFydHJlbF9uZWVk c19leGVjX3BydW5pbmcpOwogCiAJCS8qIFdoZW4gcHJ1bmluZyBpcyBwb3NzaWJsZSwgcmVjb3Jk IHRoZSBtYXRjaGVkIHN1YnBsYW5zICovCiAJCWlmIChwaW5mb2xpc3QgIT0gTklMKQpAQCAtMzI3 LDYgKzMzNSw5IEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJYWxsbWF0Y2hlZHN1YnBsYW5zID0gYm1zX2pvaW4o bWF0Y2hlZHN1YnBsYW5zLAogCQkJCQkJCQkJCSAgYWxsbWF0Y2hlZHN1YnBsYW5zKTsKIAkJfQor CisJCW5lZWRzX2luaXRfcHJ1bmluZyB8PSBwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmluZzsKKwkJ bmVlZHNfZXhlY19wcnVuaW5nIHw9IHBhcnRyZWxfbmVlZHNfZXhlY19wcnVuaW5nOwogCX0KIAog CXBmcmVlKHJlbGlkX3N1YnBsYW5fbWFwKTsKQEAgLTM0Miw2ICszNTMsOCBAQCBtYWtlX3BhcnRp dGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwK IAlwcnVuZWluZm8gPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZUluZm8pOwogCXBydW5laW5mby0+ cm9vdF9wYXJlbnRfcmVsaWRzID0gcGFyZW50cmVsLT5yZWxpZHM7CiAJcHJ1bmVpbmZvLT5wcnVu ZV9pbmZvcyA9IHBydW5lcmVsaW5mb3M7CisJcHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmcg PSBuZWVkc19pbml0X3BydW5pbmc7CisJcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcgPSBu ZWVkc19leGVjX3BydW5pbmc7CiAKIAkvKgogCSAqIFNvbWUgc3VicGxhbnMgbWF5IG5vdCBiZWxv bmcgdG8gYW55IG9mIHRoZSBpZGVudGlmaWVkIHBhcnRpdGlvbmVkIHJlbHMuCkBAIC00NDIsMTMg KzQ1NSwxOSBAQCBhZGRfcGFydF9yZWxpZHMoTGlzdCAqYWxscGFydHJlbGlkcywgQml0bWFwc2V0 ICpwYXJ0cmVsaWRzKQogICogSWYgd2UgY2Fubm90IGZpbmQgYW55IHVzZWZ1bCBydW4tdGltZSBw cnVuaW5nIHN0ZXBzLCByZXR1cm4gTklMLgogICogSG93ZXZlciwgb24gc3VjY2VzcywgZWFjaCBy ZWwgaWRlbnRpZmllZCBpbiBwYXJ0cmVsaWRzIHdpbGwgaGF2ZQogICogYW4gZWxlbWVudCBpbiB0 aGUgcmVzdWx0IGxpc3QsIGV2ZW4gaWYgc29tZSBvZiB0aGVtIGFyZSB1c2VsZXNzLgorICogKm5l ZWRzX2luaXRfcHJ1bmluZyBhbmQgKm5lZWRzX2V4ZWNfcHJ1bmluZyBhcmUgc2V0IHRvIGluZGlj YXRlIHdoZXRoZXIKKyAqIHRoZSBwcnVuaW5nIHN0ZXBzIGNvbnRhaW5lZCBpbiB0aGUgcmV0dXJu ZWQgUGFydGl0aW9uZWRSZWxQcnVuZUluZm9zCisgKiBjYW4gYmUgcGVyZm9ybWVkIGR1cmluZyBl eGVjdXRvciBzdGFydHVwIGFuZCBkdXJpbmcgZXhlY3V0aW9uLAorICogcmVzcGVjdGl2ZWx5Lgog ICovCiBzdGF0aWMgTGlzdCAqCiBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJCQkJCSAgTGlzdCAqcHJ1bmVx dWFsLAogCQkJCQkJCSAgQml0bWFwc2V0ICpwYXJ0cmVsaWRzLAogCQkJCQkJCSAgaW50ICpyZWxp ZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucykKKwkJ CQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkgIGJvb2wgKm5lZWRz X2luaXRfcHJ1bmluZywKKwkJCQkJCQkgIGJvb2wgKm5lZWRzX2V4ZWNfcHJ1bmluZykKIHsKIAlS ZWxPcHRJbmZvICp0YXJnZXRwYXJ0ID0gTlVMTDsKIAlMaXN0CSAgICpwaW5mb2xpc3QgPSBOSUw7 CkBAIC00NTksNiArNDc4LDEwIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJaW50CQkJcnRpOwogCWludAkJ CWk7CiAKKwkvKiBXaWxsIGZpbmQgb3V0IGJlbG93LiAqLworCSpuZWVkc19pbml0X3BydW5pbmcg PSBmYWxzZTsKKwkqbmVlZHNfZXhlY19wcnVuaW5nID0gZmFsc2U7CisKIAkvKgogCSAqIEV4YW1p bmUgZWFjaCBwYXJ0aXRpb25lZCByZWwsIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBhcnJheSB0 byBtYXAKIAkgKiBmcm9tIHBsYW5uZXIgcmVsaWRzIHRvIGluZGV4IG9mIHRoZSBwYXJ0aXRpb25l ZCByZWwsIGFuZCBidWlsZGluZyBhCkBAIC01NDYsNiArNTY5LDkgQEAgbWFrZV9wYXJ0aXRpb25l ZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwK IAkJICogZXhlY3V0b3IgcGVyLXNjYW4gcHJ1bmluZyBzdGVwcy4gIFRoaXMgZmlyc3QgcGFzcyBj cmVhdGVzIHN0YXJ0dXAKIAkJICogcHJ1bmluZyBzdGVwcyBhbmQgZGV0ZWN0cyB3aGV0aGVyIHRo ZXJlJ3MgYW55IHBvc3NpYmx5LXVzZWZ1bCBxdWFscwogCQkgKiB0aGF0IHdvdWxkIHJlcXVpcmUg cGVyLXNjYW4gcHJ1bmluZy4KKwkJICoKKwkJICogSW4gdGhlIGZpcnN0IHBhc3MsIHdlIG5vdGUg d2hldGhlciB0aGUgMm5kIHBhc3MgaXMgbmVjZXNzYXJ5IGJ5CisJCSAqIG5vdGluZyB0aGUgcHJl c2VuY2Ugb2YgRVhFQyBwYXJhbWV0ZXJzLgogCQkgKi8KIAkJZ2VuX3BhcnRwcnVuZV9zdGVwcyhz dWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBQQVJUVEFSR0VUX0lOSVRJQUwsCiAJCQkJCQkJJmNvbnRl eHQpOwpAQCAtNjIwLDYgKzY0NiwxMiBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5mby0+ZXhlY3Bh cmFtaWRzID0gZXhlY3BhcmFtaWRzOwogCQkvKiBSZW1haW5pbmcgZmllbGRzIHdpbGwgYmUgZmls bGVkIGluIHRoZSBuZXh0IGxvb3AgKi8KIAorCQkvKiByZWNvcmQgd2hpY2ggdHlwZXMgb2YgcHJ1 bmluZyBzdGVwcyB3ZSd2ZSBzZWVuIHNvIGZhciAqLworCQlpZiAoaW5pdGlhbF9wcnVuaW5nX3N0 ZXBzICE9IE5JTCkKKwkJCSpuZWVkc19pbml0X3BydW5pbmcgPSB0cnVlOworCQlpZiAoZXhlY19w cnVuaW5nX3N0ZXBzICE9IE5JTCkKKwkJCSpuZWVkc19leGVjX3BydW5pbmcgPSB0cnVlOworCiAJ CXBpbmZvbGlzdCA9IGxhcHBlbmQocGluZm9saXN0LCBwaW5mbyk7CiAJfQogCkBAIC02NDcsNiAr Njc5LDcgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJaW50CQkgICAqc3VicGxhbl9tYXA7CiAJCWludAkJ ICAgKnN1YnBhcnRfbWFwOwogCQlPaWQJCSAgICpyZWxpZF9tYXA7CisJCUluZGV4CSAgICpydGlf bWFwOwogCiAJCS8qCiAJCSAqIENvbnN0cnVjdCB0aGUgc3VicGxhbiBhbmQgc3VicGFydCBtYXBz IGZvciB0aGlzIHBhcnRpdGlvbmluZyBsZXZlbC4KQEAgLTY1OSw2ICs2OTIsNyBAQCBtYWtlX3Bh cnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFy ZW50cmVsLAogCQlzdWJwYXJ0X21hcCA9IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAqIHNpemVvZihp bnQpKTsKIAkJbWVtc2V0KHN1YnBhcnRfbWFwLCAtMSwgbnBhcnRzICogc2l6ZW9mKGludCkpOwog CQlyZWxpZF9tYXAgPSAoT2lkICopIHBhbGxvYzAobnBhcnRzICogc2l6ZW9mKE9pZCkpOworCQly dGlfbWFwID0gKEluZGV4ICopIHBhbGxvYzAobnBhcnRzICogc2l6ZW9mKEluZGV4KSk7CiAJCXBy ZXNlbnRfcGFydHMgPSBOVUxMOwogCiAJCWkgPSAtMTsKQEAgLTY3Myw2ICs3MDcsNyBAQCBtYWtl X3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cGFyZW50cmVsLAogCQkJc3VicGxhbl9tYXBbaV0gPSBzdWJwbGFuaWR4ID0gcmVsaWRfc3VicGxh bl9tYXBbcGFydHJlbC0+cmVsaWRdIC0gMTsKIAkJCXN1YnBhcnRfbWFwW2ldID0gc3VicGFydGlk eCA9IHJlbGlkX3N1YnBhcnRfbWFwW3BhcnRyZWwtPnJlbGlkXSAtIDE7CiAJCQlyZWxpZF9tYXBb aV0gPSBwbGFubmVyX3J0X2ZldGNoKHBhcnRyZWwtPnJlbGlkLCByb290KS0+cmVsaWQ7CisJCQly dGlfbWFwW2ldID0gcGFydHJlbC0+cmVsaWQ7CiAJCQlpZiAoc3VicGxhbmlkeCA+PSAwKQogCQkJ ewogCQkJCXByZXNlbnRfcGFydHMgPSBibXNfYWRkX21lbWJlcihwcmVzZW50X3BhcnRzLCBpKTsK QEAgLTY5Nyw2ICs3MzIsNyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5mby0+c3VicGxhbl9tYXAg PSBzdWJwbGFuX21hcDsKIAkJcGluZm8tPnN1YnBhcnRfbWFwID0gc3VicGFydF9tYXA7CiAJCXBp bmZvLT5yZWxpZF9tYXAgPSByZWxpZF9tYXA7CisJCXBpbmZvLT5ydGlfbWFwID0gcnRpX21hcDsK IAl9CiAKIAlwZnJlZShyZWxpZF9zdWJwYXJ0X21hcCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5j YWNoZS5jCmluZGV4IGNjOTQzMjA1ZDMuLjMzOWJiNjAzZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3BsYW5jYWNoZS5jCkBAIC0xNzQ3LDcgKzE3NDcsOCBAQCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhM aXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIAlmb3JlYWNoKGxjMSwgc3RtdF9saXN0KQog CXsKIAkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQs IGxjMSk7Ci0JCUxpc3RDZWxsICAgKmxjMjsKKwkJQml0bWFwc2V0ICAqYWxsTG9ja1JlbGlkczsK KwkJaW50CQkJcnRpOwogCiAJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUgPT0gQ01EX1VU SUxJVFkpCiAJCXsKQEAgLTE3NjAsMTQgKzE3NjEsMTcgQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3Mo TGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAJCQkgKi8KIAkJCVF1ZXJ5CSAgICpxdWVy eSA9IFV0aWxpdHlDb250YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CiAKKwkJ CUFzc2VydChwbGFubmVkc3RtdC0+bWluTG9ja1JlbGlkcyA9PSBOVUxMKTsKIAkJCWlmIChxdWVy eSkKIAkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgYWNxdWlyZSk7CiAJCQljb250aW51ZTsK IAkJfQogCi0JCWZvcmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQlhbGxMb2NrUmVs aWRzID0gcGxhbm5lZHN0bXQtPm1pbkxvY2tSZWxpZHM7CisJCXJ0aSA9IC0xOworCQl3aGlsZSAo KHJ0aSA9IGJtc19uZXh0X21lbWJlcihhbGxMb2NrUmVsaWRzLCBydGkpKSA+IDApCiAJCXsKLQkJ CVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJzdChsYzIpOworCQkJ UmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBwbGFubmVkc3RtdC0+cnRhYmxlKTsK IAogCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCiAJCQkJY29udGludWU7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5kZXggMTdmYWJjMThjOS4uYWVlYWViNzg4 NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaApAQCAtNDUsNiArNDUsNyBAQCBl eHRlcm4gdm9pZCBFeGVjQ2xlYW51cFR1cGxlUm91dGluZyhNb2RpZnlUYWJsZVN0YXRlICptdHN0 YXRlLAogICogbnBhcnRzCQkJCQkJTGVuZ3RoIG9mIHN1YnBsYW5fbWFwW10gYW5kIHN1YnBhcnRf bWFwW10uCiAgKiBzdWJwbGFuX21hcAkJCQkJU3VicGxhbiBpbmRleCBieSBwYXJ0aXRpb24gaW5k ZXgsIG9yIC0xLgogICogc3VicGFydF9tYXAJCQkJCVN1YnBhcnQgaW5kZXggYnkgcGFydGl0aW9u IGluZGV4LCBvciAtMS4KKyAqIHJ0aV9tYXAJCQkJCQlSYW5nZSB0YWJsZSBpbmRleCBieSBwYXJ0 aXRpb24gaW5kZXgsIG9yIDAuCiAgKiBwcmVzZW50X3BhcnRzCQkJCUEgQml0bWFwc2V0IG9mIHRo ZSBwYXJ0aXRpb24gaW5kZXhlcyB0aGF0IHdlCiAgKgkJCQkJCQkJaGF2ZSBzdWJwbGFucyBvciBz dWJwYXJ0cyBmb3IuCiAgKiBpbml0aWFsX3BydW5pbmdfc3RlcHMJCUxpc3Qgb2YgUGFydGl0aW9u UHJ1bmVTdGVwcyB1c2VkIHRvCkBAIC02MSw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRp dGlvbmVkUmVsUHJ1bmluZ0RhdGEKIAlpbnQJCQlucGFydHM7CiAJaW50CQkgICAqc3VicGxhbl9t YXA7CiAJaW50CQkgICAqc3VicGFydF9tYXA7CisJSW5kZXgJICAgKnJ0aV9tYXA7CiAJQml0bWFw c2V0ICAqcHJlc2VudF9wYXJ0czsKIAlMaXN0CSAgICppbml0aWFsX3BydW5pbmdfc3RlcHM7CiAJ TGlzdAkgICAqZXhlY19wcnVuaW5nX3N0ZXBzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9k ZXMvbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggMWYzMzkwMjk0Ny4u YzJmMjU0NGRmNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC0yMTgsNiArMjE4LDcgQEAgZXh0ZXJuIHN0cnVj dCBCaXRtYXBzZXQgKnJlYWRCaXRtYXBzZXQodm9pZCk7CiBleHRlcm4gdWludHB0cl90IHJlYWRE YXR1bShib29sIHR5cGJ5dmFsKTsKIGV4dGVybiBib29sICpyZWFkQm9vbENvbHMoaW50IG51bUNv bHMpOwogZXh0ZXJuIGludCAqcmVhZEludENvbHMoaW50IG51bUNvbHMpOworZXh0ZXJuIEluZGV4 ICpyZWFkSW5kZXhDb2xzKGludCBudW1Db2xzKTsKIGV4dGVybiBPaWQgKnJlYWRPaWRDb2xzKGlu dCBudW1Db2xzKTsKIGV4dGVybiBpbnQxNiAqcmVhZEF0dHJOdW1iZXJDb2xzKGludCBudW1Db2xz KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA2NTRkYmE2MWFhLi40MzM3ZTdhYTM0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaApAQCAtMTI4LDYgKzEyOCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFu bmVyR2xvYmFsCiAJLyogTGlzdCBvZiBQYXJ0aXRpb25QcnVuZUluZm8gY29udGFpbmVkIGluIHRo ZSBwbGFuICovCiAJTGlzdAkgICAqcGFydFBydW5lSW5mb3M7CiAKKwkvKgorCSAqIERvIGFueSBv ZiB0aG9zZSBQYXJ0aXRpb25QcnVuZUluZm9zIGhhdmUgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGlu IHRoZW0/CisJICovCisJYm9vbAkJY29udGFpbnNJbml0aWFsUHJ1bmluZzsKKworCS8qCisJICog SW5kZXhlcyBvZiBhbGwgcmFuZ2UgdGFibGUgZW50cmllczsgZm9yIEFjcXVpcmVFeGVjdXRvckxv Y2tzKCkncworCSAqIHBlcnVzYWwuCisJICovCisJQml0bWFwc2V0ICAqbWluTG9ja1JlbGlkczsK KwogCS8qIE9JRHMgb2YgcmVsYXRpb25zIHRoZSBwbGFuIGRlcGVuZHMgb24gKi8KIAlMaXN0CSAg ICpyZWxhdGlvbk9pZHM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggYmRkZmU4NjE5MS4uZWIw YTAwNzk0NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTczLDExICs3MywxOCBAQCB0eXBlZGVm IHN0cnVjdCBQbGFubmVkU3RtdAogCUxpc3QJICAgKnBhcnRQcnVuZUluZm9zOyAvKiBMaXN0IG9m IFBhcnRpdGlvblBydW5lSW5mbyBjb250YWluZWQgaW4gdGhlCiAJCQkJCQkJCSAqIHBsYW4gKi8K IAorCWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5pbmc7CS8qIERvIGFueSBvZiB0aG9zZSBQYXJ0 aXRpb25QcnVuZUluZm9zCisJCQkJCQkJCQkJICogaGF2ZSBpbml0aWFsIHBydW5pbmcgc3RlcHMg aW4gdGhlbT8KKwkJCQkJCQkJCQkgKi8KKwogCUxpc3QJICAgKnJ0YWJsZTsJCQkvKiBsaXN0IG9m IFJhbmdlVGJsRW50cnkgbm9kZXMgKi8KIAogCUxpc3QJICAgKnBlcm1JbmZvczsJCS8qIGxpc3Qg b2YgUlRFUGVybWlzc2lvbkluZm8gbm9kZXMgZm9yIHJ0YWJsZQogCQkJCQkJCQkgKiBlbnRyaWVz IG5lZWRpbmcgb25lICovCiAKKwlCaXRtYXBzZXQgICptaW5Mb2NrUmVsaWRzOwkvKiBJbmRleGVz IG9mIGFsbCByYW5nZSB0YWJsZSBlbnRyaWVzOyBmb3IKKwkJCQkJCQkJICogQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoKSdzIHBlcnVzYWwgKi8KKwogCS8qIHJ0YWJsZSBpbmRleGVzIG9mIHRhcmdldCBy ZWxhdGlvbnMgZm9yIElOU0VSVC9VUERBVEUvREVMRVRFL01FUkdFICovCiAJTGlzdAkgICAqcmVz dWx0UmVsYXRpb25zOwkvKiBpbnRlZ2VyIGxpc3Qgb2YgUlQgaW5kZXhlcywgb3IgTklMICovCiAK QEAgLTE0MTcsNiArMTQyNCwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFuUm93TWFyawogICogcHJ1 bmVfaW5mb3MJCQlMaXN0IG9mIExpc3RzIGNvbnRhaW5pbmcgUGFydGl0aW9uZWRSZWxQcnVuZUlu Zm8gbm9kZXMsCiAgKgkJCQkJCW9uZSBzdWJsaXN0IHBlciBydW4tdGltZS1wcnVuYWJsZSBwYXJ0 aXRpb24gaGllcmFyY2h5CiAgKgkJCQkJCWFwcGVhcmluZyBpbiB0aGUgcGFyZW50IHBsYW4gbm9k ZSdzIHN1YnBsYW5zLgorICoKKyAqIG5lZWRzX2luaXRfcHJ1bmluZwlEb2VzIGFueSBvZiB0aGUg UGFydGl0aW9uZWRSZWxQcnVuZUluZm9zIGluCisgKgkJCQkJCXBydW5lX2luZm9zIGhhdmUgaXRz IGluaXRpYWxfcHJ1bmluZ19zdGVwcyBzZXQ/CisgKgorICogbmVlZHNfZXhlY19wcnVuaW5nCURv ZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJCQkJcHJ1bmVf aW5mb3MgaGF2ZSBpdHMgZXhlY19wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCiAgKiBvdGhlcl9zdWJw bGFucwkJSW5kZXhlcyBvZiBhbnkgc3VicGxhbnMgdGhhdCBhcmUgbm90IGFjY291bnRlZCBmb3IK ICAqCQkJCQkJYnkgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyBub2RlcyBpbgog ICoJCQkJCQkicHJ1bmVfaW5mb3MiLiAgVGhlc2Ugc3VicGxhbnMgbXVzdCBub3QgYmUgcHJ1bmVk LgpAQCAtMTQyOCw2ICsxNDQyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZv CiAJTm9kZVRhZwkJdHlwZTsKIAlCaXRtYXBzZXQgICpyb290X3BhcmVudF9yZWxpZHM7CiAJTGlz dAkgICAqcHJ1bmVfaW5mb3M7CisJYm9vbAkJbmVlZHNfaW5pdF9wcnVuaW5nOworCWJvb2wJCW5l ZWRzX2V4ZWNfcHJ1bmluZzsKIAlCaXRtYXBzZXQgICpvdGhlcl9zdWJwbGFuczsKIH0gUGFydGl0 aW9uUHJ1bmVJbmZvOwogCkBAIC0xNDcyLDYgKzE0ODgsOSBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0 aXRpb25lZFJlbFBydW5lSW5mbwogCS8qIHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24gaW5kZXgs IG9yIDAgKi8KIAlPaWQJCSAgICpyZWxpZF9tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnBh cnRzKSk7CiAKKwkvKiBSYW5nZSB0YWJsZSBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIDAu ICovCisJSW5kZXgJICAgKnJ0aV9tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnBhcnRzKSk7 CisKIAkvKgogCSAqIGluaXRpYWxfcHJ1bmluZ19zdGVwcyBzaG93cyBob3cgdG8gcHJ1bmUgZHVy aW5nIGV4ZWN1dG9yIHN0YXJ0dXAgKGkuZS4sCiAJICogd2l0aG91dCB1c2Ugb2YgYW55IFBBUkFN X0VYRUMgUGFyYW1zKTsgaXQgaXMgTklMIGlmIG5vIHN0YXJ0dXAgcHJ1bmluZwotLSAKMi4zNS4z Cgo= --000000000000f51b4805efe8cd0f--