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 1ncNV0-0005tS-9n for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Apr 2022 08:28:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ncNUz-0006mh-1F for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Apr 2022 08:28:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ncNUy-0006mY-2s for pgsql-hackers@lists.postgresql.org; Thu, 07 Apr 2022 08:28:12 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ncNUu-0004qP-TL for pgsql-hackers@postgresql.org; Thu, 07 Apr 2022 08:28:11 +0000 Received: by mail-ed1-x533.google.com with SMTP id d10so5568994edj.0 for ; Thu, 07 Apr 2022 01:28:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=JREguUdUk0aiJu7JUtasiUK1SmOCh3LoLsPn2UC6Wu0=; b=iKmHp1lG0S2n4gPkFGHhXlKX5dph4oc7zvfen7qZxmduJWF2dRjwafJcNamli8oPOg d0GuNRdXbeAu2Q7RLn2lPeo32srVTeLHEYrA6bJb/+FsN2XjUYB1edweLsBhxjWBRHVw mKlkQWclJfBULrFWDO7BMztqvcEkZJxllxl8xWjRg56ZYAVeVM7FmHFb38v2wmlCvm4X 2DENcCq4jUTX81FDUP0hHlIHaUD66bBp4MdxAq25bhceK+WFJE4DuDodDZ07xot5afEI MglUJWzIsOgpjwCCJVIGBrA9JSw74KW9IQc03trEEouHIdCVlYVro+yhQwAoyRnAC2kx eLvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=JREguUdUk0aiJu7JUtasiUK1SmOCh3LoLsPn2UC6Wu0=; b=vd16ZIZlkGU0b4nVWP0zYVHebP5v+RDqJGuDDXY8Hc4/1JluVj1yyxcg439GO45Y9W jHaaV24Dp5AaXvFiFXm67WCRi2EELGWju2SUotsMgBDazwwLleNPTmrxYWAR0FGyM/8L SosQefPLICLBlG85xY9FlyVHDdHXkoc/Tk5EVzikOoaBmmH3FKmMu1HTFCWYEX17p3RE TQ3FOTBMKQOaUVN4aVivNNh1sX5ewYtoLc03f+vU9uTR98QmAgYxXv8lLPOW4FI+UCpu ckZWYBnYTjPKZQuC48u4KMfIBrWgPdM4fyr8HApV5qXn7i/j4paZpD0sVOAnJL4T7hcE /ZaQ== X-Gm-Message-State: AOAM531/d5C6tZJWIKh9JMHGjQ8WHoVViFlsbP3g36XX9yu27YPcfgnY /UltKFwi9mbyoxWpzUNNUELS3LIwSFBh+o/jw5M= X-Google-Smtp-Source: ABdhPJwSu4GJZBiR85wF+AeQzr3ycxJl+4jYBUyhnKtJssUKt6p1Q1Z3vByhxjn6B67q+Npdh9J2QeRhnytOrP9b6V0= X-Received: by 2002:a05:6402:f03:b0:41c:fb79:2ef3 with SMTP id i3-20020a0564020f0300b0041cfb792ef3mr5614732eda.271.1649320087404; Thu, 07 Apr 2022 01:28:07 -0700 (PDT) MIME-Version: 1.0 References: <215356.1647286703@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Thu, 7 Apr 2022 17:27:50 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: David Rowley Cc: Robert Haas , Tom Lane , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000ee6d2305dc0c41d2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ee6d2305dc0c41d2 Content-Type: text/plain; charset="UTF-8" On Wed, Apr 6, 2022 at 4:20 PM Amit Langote wrote: > And here is a version like that that passes make check-world. Maybe > still a WIP as I think comments could use more editing. > > Here's how the new implementation works: > > AcquireExecutorLocks() calls ExecutorDoInitialPruning(), which in turn > iterates over a list of PartitionPruneInfos in a given PlannedStmt > coming from a CachedPlan. For each PartitionPruneInfo, > ExecPartitionDoInitialPruning() is called, which sets up > PartitionPruneState and performs initial pruning steps present in the > PartitionPruneInfo. The resulting bitmapsets of valid subplans, one > for each PartitionPruneInfo, are collected in a list and added to a > result node called PartitionPruneResult. It represents the result of > performing initial pruning on all PartitionPruneInfos found in a plan. > A list of PartitionPruneResults is passed along with the PlannedStmt > to the executor, which is referenced when initializing > Append/MergeAppend nodes. > > PlannedStmt.minLockRelids defined by the planner contains the RT > indexes of all the entries in the range table minus those of the leaf > partitions whose subplans are subject to removal due to initial > pruning. AcquireExecutoLocks() adds back the RT indexes of only those > leaf partitions whose subplans survive ExecutorDoInitialPruning(). To > get the leaf partition RT indexes from the PartitionPruneInfo, a new > rti_map array is added to PartitionedRelPruneInfo. > > There's only one patch this time. Patches that added partitioned_rels > and plan_tree_walker() are no longer necessary. Here's an updated version. In Particular, I removed part_prune_results list from PortalData, in favor of anything that needs to look at the list can instead get it from the CachedPlan (PortalData.cplan). This makes things better in 2 ways: * All the changes that were needed to produce the list to be pass to PortalDefineQuery() are now unnecessary (especially ugly ones were those made to pg_plan_queries()'s interface) * The cases in which the PartitionPruneResult being added to a QueryDesc can be assumed to be valid is more clearly define now; it's the cases where the portal's CachedPlan is also valid, that is, if the accompanying PlannedStmt is a cached one. -- Amit Langote EDB: http://www.enterprisedb.com --000000000000ee6d2305dc0c41d2 Content-Type: application/octet-stream; name="v12-0001-Optimize-AcquireExecutorLocks-to-skip-pruned-par.patch" Content-Disposition: attachment; filename="v12-0001-Optimize-AcquireExecutorLocks-to-skip-pruned-par.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1oqj3hz0 RnJvbSBmNTVhNjIyMzgzYzkwYzNmMzAwZGVkZTBkMDQyNDdmN2NmMmQ5ZTc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEyXSBP cHRpbWl6ZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIHNraXAgcHJ1bmVkIHBhcnRpdGlvbnMK Ci0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXh0ZW5zaW9uLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9t YXR2aWV3LmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUu YyAgICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FICAgICAgICAg ICAgIHwgIDI4ICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgIHwg IDQ2ICsrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgICAgfCAgMjgg KystCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgICAgfCAyMzggKysrKysr KysrKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYyAgICAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMgICAgICAgfCAgMTYgKy0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jICB8ICAgOSArLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9ub2Rl cy9jb3B5ZnVuY3MuYyAgICAgICAgICAgfCAgMzMgKysrLQogc3JjL2JhY2tlbmQvbm9kZXMvb3V0 ZnVuY3MuYyAgICAgICAgICAgIHwgIDM2ICsrKy0KIHNyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5j cy5jICAgICAgICAgICB8ICA1NiArKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyB8ICAyMCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j ICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICB8IDEw NCArKysrKysrKy0tLQogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jICAgIHwg IDQxICsrKy0KIHNyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgICAgICAgICAgICAgICB8ICAyOCAr Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jICAgICB8IDIzNiArKysrKysr KysrKysrKysrKysrKy0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oICAgICAgICAg IHwgICAzICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggICAgfCAgMTIg Ky0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmggICAgICAgICB8ICAgMyArCiBzcmMv aW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgIHwgIDE1ICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9u b2Rlcy5oICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgIHwgIDE1ICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAg ICAgICAgfCAgMzkgKysrLQogc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggICAgICAgICAg IHwgICA3ICsKIDMzIGZpbGVzIGNoYW5nZWQsIDkxOSBpbnNlcnRpb25zKCspLCAxNDQgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwppbmRleCA1NWMzOGIwNGM0Li5kNDAzZWIyMzA5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5dG8uYwpAQCAtNTQyLDcgKzU0Miw3IEBAIEJlZ2luQ29weVRvKFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAkJKChEUl9jb3B5ICopIGRlc3QpLT5jc3RhdGUgPSBjc3RhdGU7CiAK IAkJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIHJlcXVlc3Rpbmcgbm8gb3V0cHV0ICovCi0JCWNzdGF0 ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0 LAorCQljc3RhdGUtPnF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBwc3Rh dGUtPnBfc291cmNldGV4dCwKIAkJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJ CQkJCQkJSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IDlhYmJiNmI1NTUuLmY2NjA3ZjI0NTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtMzI1LDcgKzMyNSw3IEBAIEV4ZWNDcmVhdGVUYWJsZUFz KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQsCiAJCVVwZGF0ZUFj dGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7CiAKIAkJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRp cmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JCXF1ZXJ5RGVzYyA9IENy ZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwc3RhdGUtPnBfc291cmNldGV4dCwKKwkJcXVlcnlEZXNjID0g Q3JlYXRlUXVlcnlEZXNjKHBsYW4sIE5VTEwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJ CQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQkJZGVzdCwg cGFyYW1zLCBxdWVyeUVudiwgMCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCAxZTU3MDFi OGViLi43YmE5ODUyZTUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC00MDcsNyArNDA3LDcg QEAgRXhwbGFpbk9uZVF1ZXJ5KFF1ZXJ5ICpxdWVyeSwgaW50IGN1cnNvck9wdGlvbnMsCiAJCX0K IAogCQkvKiBydW4gaXQgKGlmIG5lZWRlZCkgYW5kIHByb2R1Y2Ugb3V0cHV0ICovCi0JCUV4cGxh aW5PbmVQbGFuKHBsYW4sIGludG8sIGVzLCBxdWVyeVN0cmluZywgcGFyYW1zLCBxdWVyeUVudiwK KwkJRXhwbGFpbk9uZVBsYW4ocGxhbiwgTlVMTCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJh bXMsIHF1ZXJ5RW52LAogCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMgPyAmYnVm dXNhZ2UgOiBOVUxMKSk7CiAJfQogfQpAQCAtNTE1LDcgKzUxNSw4IEBAIEV4cGxhaW5PbmVVdGls aXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVz LAogICogdG8gY2FsbCBpdC4KICAqLwogdm9pZAotRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAorRXhwbGFp bk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBQYXJ0aXRpb25QcnVuZVJlc3VsdCAq cGFydF9wcnVuZV9yZXN1bHQsCisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUg KmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8gcGFyYW1z LAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3RpbWUgKnBs YW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSkKQEAgLTU2Myw3 ICs1NjQsNyBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9D bGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwog CiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnkgKi8KLQlxdWVyeURlc2MgPSBD cmVhdGVRdWVyeURlc2MocGxhbm5lZHN0bXQsIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENy ZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwgcGFydF9wcnVuZV9yZXN1bHQsIHF1ZXJ5U3RyaW5n LAogCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJ CWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIGluc3RydW1lbnRfb3B0aW9uKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9leHRlbnNpb24uYwppbmRleCAxMDEzNzkwZGJiLi41NDczNGEzYTkzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9leHRlbnNpb24uYwpAQCAtNzc2LDcgKzc3Niw3IEBAIGV4ZWN1dGVfc3FsX3N0cmluZyhjb25z dCBjaGFyICpzcWwpCiAJCQl7CiAJCQkJUXVlcnlEZXNjICAqcWRlc2M7CiAKLQkJCQlxZGVzYyA9 IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LAorCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0bXQs IE5VTEwsCiAJCQkJCQkJCQkJc3FsLAogCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIE5V TEwsCiAJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMK aW5kZXggOWFiMjQ4ZDI1ZS4uMmJlMTc4MmJjNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpAQCAt NDE2LDcgKzQxNiw3IEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIgKmRl c3QsIFF1ZXJ5ICpxdWVyeSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJ LyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJl Y2VpdmVyICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHF1ZXJ5U3RyaW5n LAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBxdWVyeVN0cmluZywK IAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlk ZXN0LCBOVUxMLCBOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCmluZGV4IDgwNzM4NTQ3 ZWQuLjQ1MDM5ZTY0YmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKQEAgLTU3Niw3ICs1NzYsOSBA QCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAq aW50bywgRXhwbGFpblN0YXRlICplcywKIAljb25zdCBjaGFyICpxdWVyeV9zdHJpbmc7CiAJQ2Fj aGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqcGxhbl9saXN0OwotCUxpc3RDZWxsICAgKnA7CisJ TGlzdAkgICAqcGxhbl9wYXJ0X3BydW5lX3Jlc3VsdF9saXN0OworCUxpc3RDZWxsICAgKnAsCisJ CQkgICAqcHA7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVz dGF0ZSA9IE5VTEw7CiAJaW5zdHJfdGltZQlwbGFuc3RhcnQ7CkBAIC02MzIsMTUgKzYzNCwxOCBA QCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAq aW50bywgRXhwbGFpblN0YXRlICplcywKIAl9CiAKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9s aXN0OworCXBsYW5fcGFydF9wcnVuZV9yZXN1bHRfbGlzdCA9IGNwbGFuLT5wYXJ0X3BydW5lX3Jl c3VsdF9saXN0OwogCiAJLyogRXhwbGFpbiBlYWNoIHF1ZXJ5ICovCi0JZm9yZWFjaChwLCBwbGFu X2xpc3QpCisJZm9yYm90aChwLCBwbGFuX2xpc3QsIHBwLCBwbGFuX3BhcnRfcHJ1bmVfcmVzdWx0 X2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3Rt dCwgcCk7CisJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCA9IGxmaXJz dF9ub2RlKFBhcnRpdGlvblBydW5lUmVzdWx0LCBwcCk7CiAKIAkJaWYgKHBzdG10LT5jb21tYW5k VHlwZSAhPSBDTURfVVRJTElUWSkKLQkJCUV4cGxhaW5PbmVQbGFuKHBzdG10LCBpbnRvLCBlcywg cXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBxdWVyeUVudiwKLQkJCQkJCSAgICZwbGFuZHVyYXRpb24s IChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKKwkJCUV4cGxhaW5PbmVQbGFuKHBz dG10LCBwYXJ0X3BydW5lX3Jlc3VsdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywKKwkJCQkJCSAg IHBhcmFtTEksIHF1ZXJ5RW52LCAmcGxhbmR1cmF0aW9uLAorCQkJCQkJICAgKGVzLT5idWZmZXJz ID8gJmJ1ZnVzYWdlIDogTlVMTCkpOwogCQllbHNlCiAJCQlFeHBsYWluT25lVXRpbGl0eShwc3Rt dC0+dXRpbGl0eVN0bXQsIGludG8sIGVzLCBxdWVyeV9zdHJpbmcsCiAJCQkJCQkJICBwYXJhbUxJ LCBxdWVyeUVudik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUgYi9z cmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKaW5kZXggMGI1MTgzZmM0YS4uODQxOGU3NThkYSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL1JFQURNRQpAQCAtNjUsNiArNjUsMzAgQEAgZm91bmQgdGhlcmUuICBUaGlzIGN1 cnJlbnRseSBvbmx5IG9jY3VycyBmb3IgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2Rlcy4gIElu CiB0aGlzIGNhc2UgdGhlIG5vbi1yZXF1aXJlZCBzdWJwbGFucyBhcmUgaWdub3JlZCBhbmQgdGhl IGV4ZWN1dG9yIHN0YXRlJ3MKIHN1Ym5vZGUgYXJyYXkgd2lsbCBiZWNvbWUgb3V0IG9mIHNlcXVl bmNlIHRvIHRoZSBwbGFuJ3Mgc3VicGxhbiBsaXN0LgogCitBY3R1YWxseSwgdGhlIHNvLWNhbGxl ZCBleGVjdXRpb24gdGltZSBwcnVuaW5nIG1heSBhbHNvIG9jY3VyIGV2ZW4gYmVmb3JlIHRoZQor ZXhlY3V0aW9uIGhhcyBzdGFydGVkLiAgT25lIGNhc2Ugd2hlcmUgdGhhdCBvY2N1cnMgaXMgd2hl biBhIGNhY2hlZCBnZW5lcmljCitwbGFuIGlzIGJlaW5nIHZhbGlkYXRlZCBmb3IgZXhlY3V0aW9u IGJ5IHBsYW5jYWNoZS5jOiBHZXRDYWNoZWRQbGFuKCksIHdoaWNoCitwcm9jZWVkcyBieSBsb2Nr aW5nIGFsbCB0aGUgcmVsYXRpb25zIHRoYXQgd2lsbCBiZSBzY2FubmVkIGJ5IHRoYXQgcGxhbi4g IElmCit0aGUgZ2VuZXJpYyBwbGFuIGhhcyBub2RlcyB0aGF0IGNvbnRhaW4gc28tY2FsbGVkIGlu aXRpYWwgcHJ1bmluZyBzdGVwcyAoYQorc3Vic2V0IG9mIGV4ZWN1dGlvbiBwcnVuaW5nIHN0ZXBz IHRoYXQgZG8gbm90IGRlcGVuZCBvbiBmdWxsLWZsZWRnZWQgZXhlY3V0aW9uCitoYXZpbmcgc3Rh cnRlZCksIHRoZXkgYXJlIHBlcmZvcm1lZCBhdCB0aGlzIHBvaW50IHRvIGZpZ3VyZSBvdXQgdGhl IG1pbmltYWwKK3NldCBvZiBjaGlsZCBzdWJwbGFucyB0aGF0IHNhdGlzZnkgdGhvc2UgcHJ1bmlu ZyBpbnN0cnVjdGlvbnMgYW5kIHRoZSByZXN1bHQKK29mIHBlcmZvcm1pbmcgdGhhdCBwcnVuaW5n IGlzIHNhdmVkIGluIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBnZXRzIHBhc3NlZCB0bwordGhlIGV4 ZWN1dG9yIGFsb25nc2lkZSB0aGUgcGxhbiB0cmVlLiAgUmVsYXRpb25zIHNjYW5uZWQgYnkgb25s eSB0aG9zZQorc3Vydml2aW5nIHN1YnBsYW5zIGFyZSB0aGVuIGxvY2tlZCB3aGlsZSB0aG9zZSBz Y2FubmVkIGJ5IHRoZSBwcnVuZWQgc3VicGxhbnMKK2FyZSBub3QsIGV2ZW4gdGhvdWdoIHRoZSBw cnVuZWQgc3VicGxhbnMgdGhlbXNlbHZlcyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUKK3BsYW4g dHJlZS4gU28sIGl0IGlzIGltcGVyYXRpdmUgdGhhdCB0aGUgZXhlY3V0b3IgYW5kIGFueSB0aGly ZCBwYXJ0eSBjb2RlCitpbnZva2VkIGJ5IGl0IHRoYXQgZ2V0cyBwYXNzZWQgdGhlIHBsYW4gdHJl ZSBsb29rIGF0IHRoZSBpbml0aWFsIHBydW5pbmcgcmVzdWx0CittYWRlIGF2YWlsYWJsZSB2aWEg dGhlIGFmb3JlbWVudGlvbmVkIGRhdGEgc3RydWN0dXJlIHRvIGRldGVybWluZSB3aGV0aGVyIG9y Citub3QgYSBwYXJ0aWN1bGFyIHN1YnBsYW4gaXMgdmFsaWQuICBUaGUgZGF0YSBzdHJ1Y3R1cmUg YmFzaWNhbGx5IGNvbnNpc3RzIG9mCithIFBhcnRpdGlvblBydW5lUmVzdWx0IG5vZGUgcGFzc2Vk IHRocm91Z2ggdGhlIFF1ZXJ5RGVzYyAoc3Vic2VxdWVudGx5IGFkZGVkCit0byBFU3RhdGUpIGNv bnRhaW5pbmcgYSBsaXN0IG9mIGJpdG1hcHNldHMgd2l0aCBvbmUgZWxlbWVudCBmb3IgZXZlcnkK K1BhcnRpdGlvblBydW5lSW5mbyBmb3VuZCBpbiBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcy4g IFRoZSBsaXN0IGlzIGluZGV4ZWQKK3dpdGggcGFydF9wcnVuZV9pbmRleCBvZiB0aGUgaW5kaXZp ZHVhbCBQYXJ0aXRpb25QcnVuZUluZm9zIHRoYXQncyBzdG9yZWQgaW4KK3RoZSBwYXJlbnQgcGxh biBub2RlcyB0byB3aGljaCBhIGdpdmVuIFBhcnRpdGlvblBydW5lSW5mbyBiZWxvbmdzLiAgRWFj aAorYml0bWFwc2V0IG9mIHRoZSBpbmRleGVzIG9mIHRoZSBjaGlsZCBzdWJwbGFucyBvZiB0aGUg Z2l2ZW4gcGFyZW50IHBsYW4KK25vZGUgdGhhdCBzdXJ2aXZlIGluaXRpYWwgcGFydGlpdG9uIHBy dW5pbmcuCisKIEVhY2ggUGxhbiBub2RlIG1heSBoYXZlIGV4cHJlc3Npb24gdHJlZXMgYXNzb2Np YXRlZCB3aXRoIGl0LCB0byByZXByZXNlbnQKIGl0cyB0YXJnZXQgbGlzdCwgcXVhbGlmaWNhdGlv biBjb25kaXRpb25zLCBldGMuICBUaGVzZSB0cmVlcyBhcmUgYWxzbwogcmVhZC1vbmx5IHRvIHRo ZSBleGVjdXRvciwgYnV0IHRoZSBleGVjdXRvciBzdGF0ZSBmb3IgZXhwcmVzc2lvbiBldmFsdWF0 aW9uCkBAIC0yODYsNiArMzEwLDEwIEBAIFF1ZXJ5IFByb2Nlc3NpbmcgQ29udHJvbCBGbG93CiAK IFRoaXMgaXMgYSBza2V0Y2ggb2YgY29udHJvbCBmbG93IGZvciBmdWxsIHF1ZXJ5IHByb2Nlc3Np bmc6CiAKKyAgWyBFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcgXSAtLS0gYW4gb3B0aW9uYWwgc3Rl cCB0byBwZXJmb3JtIGluaXRpYWwKKwkJcGFydGl0aW9uIHBydW5pbmcgb24gdGhlIHBsYW4gdHJl ZSB0aGUgcmVzdWx0IG9mIHdoaWNoIGlzIHBhc3NlZAorCQl0byB0aGUgZXhlY3V0b3IgdmlhIFF1 ZXJ5RGVzYworCiAJQ3JlYXRlUXVlcnlEZXNjCiAKIAlFeGVjdXRvclN0YXJ0CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYwppbmRleCBlZjJmZDQ2MDkyLi4wNWNjOTlkZjhmIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNNYWluLmMKQEAgLTQ5LDExICs0OSwxMyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL21hdHZpZXcu aCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y2RlYnVnLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL25vZGVTdWJwbGFuLmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNp bmNsdWRlICJqaXQvaml0LmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJz dG9yYWdlL2xtZ3IuaCIKQEAgLTEwNCw2ICsxMDYsNDcgQEAgc3RhdGljIHZvaWQgRXZhbFBsYW5R dWFsU3RhcnQoRVBRU3RhdGUgKmVwcXN0YXRlLCBQbGFuICpwbGFuVHJlZSk7CiAKIC8qIGVuZCBv ZiBsb2NhbCBkZWNscyAqLwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJRXhlY3V0b3JEb0luaXRpYWxQcnVu aW5nCisgKgorICoJCVBlcmZvcm1zIGluaXRpYWwgcGFydGl0aW9uIHBydW5pbmcgdG8gZmlndXJl IG91dCB0aGUgbWluaW1hbCBzZXQgb2YKKyAqCQlzdWJwbGFucyB0byBiZSBleGVjdXRlZCBhbmQg dGhlIHNldCBvZiBSVCBpbmRleGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKgkJbGVhZiBwYXJ0 aXRpb25zCisgKgorICogUmV0dXJuZWQgUGFydGl0aW9uUHJ1bmVSZXN1bHQgbXVzdCBiZSBzdWJz ZXF1ZW50bHkgcGFzc2VkIHRvIHRoZSBleGVjdXRvcgorICogc28gdGhhdCBpdCBjYW4gcmV1c2Ug dGhlIHJlc3VsdCBvZiBwcnVuaW5nLiAgSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUKKyAqIGhhcyB0 aGUgc2FtZSB2aWV3IG9mIHdoaWNoIHBhcnRpdGlvbnMgYXJlIGluaXRpYWxseSBwcnVuZWQgKGJ5 IG5vdCBkb2luZworICogdGhlIHBydW5pbmcgYWdhaW4gaXRzZWxmKSBvciBvdGhlcndpc2UgaXQg cmlza3MgaW5pdGlhbGl6aW5nIHN1YnBsYW5zIHdob3NlCisgKiBwYXJ0aXRpb25zIHdvdWxkIG5v dCBoYXZlIGJlZW4gbG9ja2VkLgorICoKKyAqIE5vdGU6IFBhcnRpdGlvbmVkIHRhYmxlcyBtZW50 aW9uZWQgaW4gUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gbm9kZXMgdGhhdAorICogZHJpdmUgdGhl IHBydW5pbmcgd2lsbCBiZSBsb2NrZWQgYmVmb3JlIGRvaW5nIHRoZSBwcnVuaW5nLgorICovCitQ YXJ0aXRpb25QcnVuZVJlc3VsdCAqCitFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcoUGxhbm5lZFN0 bXQgKnBsYW5uZWRzdG10LCBQYXJhbUxpc3RJbmZvIHBhcmFtcykKK3sKKwlQYXJ0aXRpb25QcnVu ZVJlc3VsdCAqcmVzdWx0OworCUxpc3RDZWxsICpsYzsKKworCS8qIE9ubHkgZ2V0IGhlcmUgaWYg dGhlcmUgaXMgYW55IHBydW5pbmcgdG8gZG8uICovCisJQXNzZXJ0KHBsYW5uZWRzdG10LT5jb250 YWluc0luaXRpYWxQcnVuaW5nKTsKKworCXJlc3VsdCA9IG1ha2VOb2RlKFBhcnRpdGlvblBydW5l UmVzdWx0KTsKKwlmb3JlYWNoKGxjLCBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3MpCisJewor CQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdChsYyk7CisJCUJpdG1hcHNl dCAqdmFsaWRfc3VicGxhbl9vZmZzOworCisJCXZhbGlkX3N1YnBsYW5fb2ZmcyA9CisJCQlFeGVj UGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZyhwbGFubmVkc3RtdCwgcGFyYW1zLCBwcnVuZWluZm8s CisJCQkJCQkJCQkJICAmcmVzdWx0LT5zY2FuX2xlYWZwYXJ0X3J0aXMpOworCQlyZXN1bHQtPnZh bGlkX3N1YnBsYW5fb2Zmc19saXN0ID0KKwkJCWxhcHBlbmQocmVzdWx0LT52YWxpZF9zdWJwbGFu X29mZnNfbGlzdCwKKwkJCQkJdmFsaWRfc3VicGxhbl9vZmZzKTsKKwl9CisKKwlyZXR1cm4gcmVz dWx0OworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY3V0b3JTdGFydApAQCAtODA2LDYgKzg0OSw3 IEBAIEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewogCUNtZFR5 cGUJCW9wZXJhdGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7CisJUGFydGl0aW9uUHJ1bmVSZXN1bHQg KnBhcnRfcHJ1bmVfcmVzdWx0ID0gcXVlcnlEZXNjLT5wYXJ0X3BydW5lX3Jlc3VsdDsKIAlQbGFu CSAgICpwbGFuID0gcGxhbm5lZHN0bXQtPnBsYW5UcmVlOwogCUxpc3QJICAgKnJhbmdlVGFibGUg PSBwbGFubmVkc3RtdC0+cnRhYmxlOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5l c3RhdGU7CkBAIC04MjUsNiArODY5LDggQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2Ms IGludCBlZmxhZ3MpCiAJRXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSk7CiAK IAllc3RhdGUtPmVzX3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CisJZXN0YXRlLT5lc19wYXJ0 X3BydW5lX2luZm9zID0gcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ZXNf cGFydF9wcnVuZV9yZXN1bHQgPSBwYXJ0X3BydW5lX3Jlc3VsdDsKIAogCS8qCiAJICogTmV4dCwg YnVpbGQgdGhlIEV4ZWNSb3dNYXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBh bnkuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IDlhMGQ1ZDU5ZWYuLjgwNWY4 NmM1MDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC02Niw2ICs2Niw3IEBA CiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAw MDAwMDAwMDgpCiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2 NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FH RQkJCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZ X1BBUlRJVElPTlBSVU5FUkVTVUxUCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQikKIAog I2RlZmluZSBQQVJBTExFTF9UVVBMRV9RVUVVRV9TSVpFCQk2NTUzNgogCkBAIC0xODIsNyArMTgz LDkgQEAgRXhlY1NlcmlhbGl6ZVBsYW4oUGxhbiAqcGxhbiwgRVN0YXRlICplc3RhdGUpCiAJcHN0 bXQtPnRyYW5zaWVudFBsYW4gPSBmYWxzZTsKIAlwc3RtdC0+ZGVwZW5kc09uUm9sZSA9IGZhbHNl OwogCXBzdG10LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBmYWxzZTsKKwlwc3RtdC0+Y29udGFpbnNJ bml0aWFsUHJ1bmluZyA9IGZhbHNlOwogCXBzdG10LT5wbGFuVHJlZSA9IHBsYW47CisJcHN0bXQt PnBhcnRQcnVuZUluZm9zID0gZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zOwogCXBzdG10LT5y dGFibGUgPSBlc3RhdGUtPmVzX3JhbmdlX3RhYmxlOwogCXBzdG10LT5yZXN1bHRSZWxhdGlvbnMg PSBOSUw7CiAJcHN0bXQtPmFwcGVuZFJlbGF0aW9ucyA9IE5JTDsKQEAgLTU5NiwxMiArNTk5LDE1 IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVz dGF0ZSwKIAlGaXhlZFBhcmFsbGVsRXhlY3V0b3JTdGF0ZSAqZnBlczsKIAljaGFyCSAgICpwc3Rt dF9kYXRhOwogCWNoYXIJICAgKnBzdG10X3NwYWNlOworCWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVz dWx0X2RhdGE7CisJY2hhcgkgICAqcGFydF9wcnVuZV9yZXN1bHRfc3BhY2U7CiAJY2hhcgkgICAq cGFyYW1saXN0aW5mb19zcGFjZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7CiAJV2Fs VXNhZ2UgICAqd2FsdXNhZ2Vfc3BhY2U7CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50YXRpb24g Kmluc3RydW1lbnRhdGlvbiA9IE5VTEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9uICpqaXRf aW5zdHJ1bWVudGF0aW9uID0gTlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CisJaW50CQkJcGFydF9w cnVuZV9yZXN1bHRfbGVuOwogCWludAkJCXBhcmFtbGlzdGluZm9fbGVuOwogCWludAkJCWluc3Ry dW1lbnRhdGlvbl9sZW4gPSAwOwogCWludAkJCWppdF9pbnN0cnVtZW50YXRpb25fbGVuID0gMDsK QEAgLTYzMCw2ICs2MzYsNyBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5z dGF0ZSwgRVN0YXRlICplc3RhdGUsCiAKIAkvKiBGaXggdXAgYW5kIHNlcmlhbGl6ZSBwbGFuIHRv IGJlIHNlbnQgdG8gd29ya2Vycy4gKi8KIAlwc3RtdF9kYXRhID0gRXhlY1NlcmlhbGl6ZVBsYW4o cGxhbnN0YXRlLT5wbGFuLCBlc3RhdGUpOworCXBhcnRfcHJ1bmVfcmVzdWx0X2RhdGEgPSBub2Rl VG9TdHJpbmcoZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdCk7CiAKIAkvKiBDcmVhdGUgYSBw YXJhbGxlbCBjb250ZXh0LiAqLwogCXBjeHQgPSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3Rn cmVzIiwgIlBhcmFsbGVsUXVlcnlNYWluIiwgbndvcmtlcnMpOwpAQCAtNjU2LDYgKzY2MywxMSBA QCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3Rh dGUsCiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwc3RtdF9sZW4p OwogCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKIAorCS8qIEVz dGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIFBhcnRpdGlvblBydW5lUmVzdWx0LiAqLworCXBh cnRfcHJ1bmVfcmVzdWx0X2xlbiA9IHN0cmxlbihwYXJ0X3BydW5lX3Jlc3VsdF9kYXRhKSArIDE7 CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJ0X3BydW5lX3Jl c3VsdF9sZW4pOworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsK KwogCS8qIEVzdGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIFBhcmFtTGlzdEluZm8uICovCiAJ cGFyYW1saXN0aW5mb19sZW4gPSBFc3RpbWF0ZVBhcmFtTGlzdFNwYWNlKGVzdGF0ZS0+ZXNfcGFy YW1fbGlzdF9pbmZvKTsKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3Is IHBhcmFtbGlzdGluZm9fbGVuKTsKQEAgLTc1MCw2ICs3NjIsMTIgQEAgRXhlY0luaXRQYXJhbGxl bFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAogCW1lbWNweShwc3Rt dF9zcGFjZSwgcHN0bXRfZGF0YSwgcHN0bXRfbGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50 b2MsIFBBUkFMTEVMX0tFWV9QTEFOTkVEU1RNVCwgcHN0bXRfc3BhY2UpOwogCisJLyogU3RvcmUg c2VyaWFsaXplZCBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqLworCXBhcnRfcHJ1bmVfcmVzdWx0X3Nw YWNlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcnRfcHJ1bmVfcmVzdWx0X2xlbik7 CisJbWVtY3B5KHBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNlLCBwYXJ0X3BydW5lX3Jlc3VsdF9kYXRh LCBwYXJ0X3BydW5lX3Jlc3VsdF9sZW4pOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFS QUxMRUxfS0VZX1BBUlRJVElPTlBSVU5FUkVTVUxULAorCQkJCSAgIHBhcnRfcHJ1bmVfcmVzdWx0 X3NwYWNlKTsKKwogCS8qIFN0b3JlIHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJh bWxpc3RpbmZvX3NwYWNlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGlu Zm9fbGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJ U1RJTkZPLCBwYXJhbWxpc3RpbmZvX3NwYWNlKTsKQEAgLTEyMzEsOCArMTI0OSwxMCBAQCBFeGVj UGFyYWxsZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVy LAogCQkJCQkJIGludCBpbnN0cnVtZW50X29wdGlvbnMpCiB7CiAJY2hhcgkgICAqcHN0bXRzcGFj ZTsKKwljaGFyCSAgICpwYXJ0X3BydW5lX3Jlc3VsdF9zcGFjZTsKIAljaGFyCSAgICpwYXJhbXNw YWNlOwogCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9w cnVuZV9yZXN1bHQ7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJOwogCWNoYXIJICAgKnF1ZXJ5U3Ry aW5nOwogCkBAIC0xMjQzLDEyICsxMjYzLDE4IEBAIEV4ZWNQYXJhbGxlbEdldFF1ZXJ5RGVzYyhz aG1fdG9jICp0b2MsIERlc3RSZWNlaXZlciAqcmVjZWl2ZXIsCiAJcHN0bXRzcGFjZSA9IHNobV90 b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1BMQU5ORURTVE1ULCBmYWxzZSk7CiAJcHN0bXQg PSAoUGxhbm5lZFN0bXQgKikgc3RyaW5nVG9Ob2RlKHBzdG10c3BhY2UpOwogCisJLyogUmVjb25z dHJ1Y3QgbGVhZGVyLXN1cHBsaWVkIFBhcnRpdGlvblBydW5lUmVzdWx0LiAqLworCXBhcnRfcHJ1 bmVfcmVzdWx0X3NwYWNlID0KKwkJc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFS VElUSU9OUFJVTkVSRVNVTFQsIGZhbHNlKTsKKwlwYXJ0X3BydW5lX3Jlc3VsdCA9IChQYXJ0aXRp b25QcnVuZVJlc3VsdCAqKQorCQlzdHJpbmdUb05vZGUocGFydF9wcnVuZV9yZXN1bHRfc3BhY2Up OworCiAJLyogUmVjb25zdHJ1Y3QgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbXNwYWNlID0gc2ht X3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgZmFsc2UpOwogCXBh cmFtTEkgPSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNwYWNlKTsKIAogCS8qIENyZWF0ZSBhIFF1 ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5LiAqLwotCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQs CisJcmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwgcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJ CQkgICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRT bmFwc2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29w dGlvbnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDYxNWJkODA5NzMu LjMwMzc3NDJiOGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRp b24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKQEAgLTI1LDYg KzI1LDcgQEAKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRy ZWUuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5oIgogI2luY2x1ZGUgInBh cnRpdGlvbmluZy9wYXJ0ZGVzYy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0cHJ1bmUu aCIKQEAgLTE4NSw3ICsxODYsMTEgQEAgc3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRp b25LZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRp dGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsK IHN0YXRpYyBMaXN0ICphZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29s bm9zLCBBdHRyTWFwICphdHRyTWFwKTsKIHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpDcmVh dGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCQkJCQkJ CSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pOworCQkJCQkJCQkJCQkJCSAgUGFydGl0 aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2lu aXRpYWxfc3RlcHMsCisJCQkJCQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2V4ZWNfc3RlcHMsCisJ CQkJCQkJCQkJCQkJICBMaXN0ICpydGFibGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwKKwkJCQkJ CQkJCQkJCQkgIFBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0ZGlyKTsKIHN0YXRpYyB2b2lkIEluaXRQ YXJ0aXRpb25QcnVuZUNvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJ CQkJCQkJICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkJCQkJICBQYXJ0aXRpb25EZXNjIHBh cnRkZXNjLApAQCAtMTk4LDcgKzIwMyw4IEBAIHN0YXRpYyB2b2lkIFBhcnRpdGlvblBydW5lRml4 U3ViUGxhbk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogc3RhdGljIHZvaWQg ZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKFBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVu ZWRhdGEsCiAJCQkJCQkJCQkJICAgUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqcHBydW5lLAog CQkJCQkJCQkJCSAgIGJvb2wgaW5pdGlhbF9wcnVuZSwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQg Kip2YWxpZHN1YnBsYW5zKTsKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKip2YWxpZHN1YnBsYW5z LAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiAKIAogLyoK QEAgLTE1ODcsOCArMTU5MywxMCBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAo TGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKQogICogY29uc2lkZXJlZCB0byBiZSBhIHN0 YWJsZSBleHByZXNzaW9uLCBpdCBjYW4gY2hhbmdlIHZhbHVlIGZyb20gb25lIHBsYW4KICAqIG5v ZGUgc2NhbiB0byB0aGUgbmV4dCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uLiAgU3RhYmxlIGNvbXBh cmlzb24KICAqIGV4cHJlc3Npb25zIHRoYXQgZG9uJ3QgaW52b2x2ZSBzdWNoIFBhcmFtcyBhbGxv dyBwYXJ0aXRpb24gcHJ1bmluZyB0byBiZQotICogZG9uZSBvbmNlIGR1cmluZyBleGVjdXRvciBz dGFydHVwLiAgRXhwcmVzc2lvbnMgdGhhdCBkbyBpbnZvbHZlIHN1Y2ggUGFyYW1zCi0gKiByZXF1 aXJlIHVzIHRvIHBydW5lIHNlcGFyYXRlbHkgZm9yIGVhY2ggc2NhbiBvZiB0aGUgcGFyZW50IHBs YW4gbm9kZS4KKyAqIGRvbmUgb25jZSBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBvciBkdXJpbmcg RXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgdGhhdAorICogcnVucyBhcyBwYXJ0IG9mIHBlcmZv cm1pbmcgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSBvbiBhIGdpdmVuIHBsYW4gdHJlZS4KKyAqIEV4 cHJlc3Npb25zIHRoYXQgZG8gaW52b2x2ZSBzdWNoIFBhcmFtcyByZXF1aXJlIHVzIHRvIHBydW5l IHNlcGFyYXRlbHkgZm9yCisgKiBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBwbGFuIG5vZGUuCiAg KgogICogTm90ZSB0aGF0IHBydW5pbmcgYXdheSB1bm5lZWRlZCBzdWJwbGFucyBkdXJpbmcgZXhl Y3V0b3Igc3RhcnR1cCBoYXMgdGhlCiAgKiBhZGRlZCBiZW5lZml0IG9mIG5vdCBoYXZpbmcgdG8g aW5pdGlhbGl6ZSB0aGUgdW5uZWVkZWQgc3VicGxhbnMgYXQgYWxsLgpAQCAtMTYwNSw2ICsxNjEz LDEzIEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0 dHJNYXAgKmF0dHJNYXApCiAgKgkJYWNjb3VudCBmb3IgaW5pdGlhbCBwcnVuaW5nIHBvc3NpYmx5 IGhhdmluZyBlbGltaW5hdGVkIHNvbWUgb2YgdGhlCiAgKgkJc3VicGxhbnMuCiAgKgorICogRXhl Y1BhcnRpdGlvbkRvSW5pdGlhbFBydW5pbmc6CisgKgkJRG8gaW5pdGlhbCBwcnVuaW5nIHdpdGgg dGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBhIGdpdmVuCisgKgkJUGFydGl0aW9uUHJ1bmVJ bmZvIHRvIGRldGVybWluZSB0aGUgbWluaW1hbCBzZXQgb2YgY2hpbGQgc3VicGxhbnMKKyAqCQl0 byBiZSBleGVjdXRlZCBvZiB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byB3aGljaCB0aGUgUGFydGl0 aW9uUHJ1bmVJbmZvCisgKgkJYmVsb25ncyBhbmQgYWxzbyB0aGUgc2V0IG9mIHRoZSBSVCBpbmRl eGVzIG9mIGxlYWYgcGFydGl0aW9ucyB0aGF0IHdpbGwKKyAqCQliZSBzY2FubmVkIHdpdGggdGhv c2Ugc3VicGxhbnMuCisgKgogICogRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zOgogICoJCVJldHVy bnMgaW5kZXhlcyBvZiBtYXRjaGluZyBzdWJwbGFucyBhZnRlciBldmFsdWF0aW5nIHRoZSBleHBy ZXNzaW9ucwogICoJCXRoYXQgYXJlIHNhZmUgdG8gZXZhbHVhdGUgYXQgYSBnaXZlbiBwb2ludC4g IFRoaXMgZnVuY3Rpb24gaXMgZmlyc3QKQEAgLTE2MjIsOCArMTYzNyw5IEBAIGFkanVzdF9wYXJ0 aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAg KgogICogT24gcmV0dXJuLCAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zIGlzIGFzc2lnbmVkIHRo ZSBzZXQgb2YgaW5kZXhlcyBvZgogICogY2hpbGQgc3VicGxhbnMgdGhhdCBtdXN0IGJlIGluaXRp YWxpemVkIGFsb25nIHdpdGggdGhlIHBhcmVudCBwbGFuIG5vZGUuCi0gKiBJbml0aWFsIHBydW5p bmcgaXMgcGVyZm9ybWVkIGhlcmUgaWYgbmVlZGVkIGFuZCBpbiB0aGF0IGNhc2Ugb25seSB0aGUK LSAqIHN1cnZpdmluZyBzdWJwbGFucycgaW5kZXhlcyBhcmUgYWRkZWQuCisgKiBJbml0aWFsIHBy dW5pbmcgaXMgcGVyZm9ybWVkIGhlcmUgaWYgbmVlZGVkICh1bmxlc3MgaXQgaGFzIGFscmVhZHkg YmVlbiBkb25lCisgKiBieSBFeGVjRG9Jbml0aWFsUHJ1bmluZygpKSwgYW5kIGluIHRoYXQgY2Fz ZSBvbmx5IHRoZSBzdXJ2aXZpbmcgc3VicGxhbnMnCisgKiBpbmRleGVzIGFyZSBhZGRlZC4KICAq CiAgKiBJZiBzdWJwbGFucyBhcmUgaW5kZWVkIHBydW5lZCwgc3VicGxhbl9tYXAgYXJyYXlzIGNv bnRhaW5lZCBpbiB0aGUgcmV0dXJuZWQKICAqIFBhcnRpdGlvblBydW5lU3RhdGUgYXJlIHJlLXNl cXVlbmNlZCB0byBub3QgY291bnQgdGhvc2UsIHRob3VnaCBvbmx5IGlmIHRoZQpAQCAtMTYzMiwy MyArMTY0OCw1OSBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29s bm9zLCBBdHRyTWFwICphdHRyTWFwKQogUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCiBFeGVjSW5pdFBh cnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkgaW50IG5fdG90YWxf c3VicGxhbnMsCi0JCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkg aW50IHBhcnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlk X3N1YnBsYW5zKQogewotCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJRVN0YXRl CSAgICplc3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCVBhcnRpdGlvblBydW5lSW5mbyAgKnBy dW5laW5mbyA9IGxpc3RfbnRoKGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvcywKKwkJCQkJCQkJ CQkJICBwYXJ0X3BydW5lX2luZGV4KTsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcHJ1bmVyZXN1 bHQgPSBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0OworCVBhcnRpdGlvblBydW5lU3RhdGUg KnBydW5lc3RhdGU7CisJYm9vbAlkb19wcnVuaW5nID0gKHBydW5laW5mby0+bmVlZHNfaW5pdF9w cnVuaW5nIHx8CisJCQkJCQkgIHBydW5laW5mby0+bmVlZHNfZXhlY19wcnVuaW5nKTsKIAotCS8q IFdlIG1heSBuZWVkIGFuIGV4cHJlc3Npb24gY29udGV4dCB0byBldmFsdWF0ZSBwYXJ0aXRpb24g ZXhwcnMgKi8KLQlFeGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOworCS8q CisJICogTm8gbmVlZCB0byBkbyBpbml0aWFsIHBydW5pbmcgaWYgaXQgd2FzIGRvbmUgYWxyZWFk eSBieQorCSAqIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpLCB3aGljaCBpdCB3b3VsZCBiZSBp ZiBlc19wYXJ0X3BydW5lX3Jlc3VsdAorCSAqIGhhcyBiZWVuIHNldC4KKwkgKi8KKwlpZiAocHJ1 bmVyZXN1bHQpCisJCWRvX3BydW5pbmcgPSBwcnVuZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmluZzsK KworCXBydW5lc3RhdGUgPSBOVUxMOworCWlmIChkb19wcnVuaW5nKQorCXsKKwkJLyogV2UgbWF5 IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAq LworCQlFeGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOwogCi0JLyogQ3Jl YXRlIHRoZSB3b3JraW5nIGRhdGEgc3RydWN0dXJlIGZvciBwcnVuaW5nICovCi0JcHJ1bmVzdGF0 ZSA9IENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVuZWluZm8pOworCQkv KiBGb3IgZGF0YSByZWFkaW5nLCBleGVjdXRvciBhbHdheXMgb21pdHMgZGV0YWNoZWQgcGFydGl0 aW9ucyAqLworCQlpZiAoZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID09IE5VTEwpCisJ CQllc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQorCQkJCUNyZWF0ZVBhcnRpdGlvbkRp cmVjdG9yeShlc3RhdGUtPmVzX3F1ZXJ5X2N4dCwgZmFsc2UpOworCisJCS8qCisJCSAqIENyZWF0 ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gIE5vIG5lZWQgdG8gY29u c2lkZXIKKwkJICogaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGlmIHdlIGhhdmUgYSBQYXJ0aXRpb25Q cnVuZVJlc3VsdC4KKwkJICovCisJCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKHBsYW5zdGF0ZSwgcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkgICBwcnVuZXJlc3VsdCA9PSBO VUxMLCB0cnVlLAorCQkJCQkJCQkJCQkgICBOSUwsIHBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQs CisJCQkJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSk7CisJfQogCiAJ LyoKIAkgKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lIHBhc3MsIGlmIHJlcXVp cmVkLgogCSAqLwotCWlmIChwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQotCQkqaW5pdGlh bGx5X3ZhbGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUs IHRydWUpOworCWlmIChwcnVuZXJlc3VsdCkKKwl7CisJCSppbml0aWFsbHlfdmFsaWRfc3VicGxh bnMgPQorCQkJbGlzdF9udGgocHJ1bmVyZXN1bHQtPnZhbGlkX3N1YnBsYW5fb2Zmc19saXN0LCBw YXJ0X3BydW5lX2luZGV4KTsKKwl9CisJZWxzZSBpZiAocHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRl LT5kb19pbml0aWFsX3BydW5lKQorCXsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IEV4 ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCB0cnVlLAorCQkJCQkJCQkJCQkJCQkJ IE5VTEwpOworCX0KIAllbHNlCiAJewogCQkvKiBObyBwcnVuaW5nLCBzbyB3ZSdsbCBuZWVkIHRv IGluaXRpYWxpemUgYWxsIHN1YnBsYW5zICovCkBAIC0xNjY5LDcgKzE3MjEsNyBAQCBFeGVjSW5p dFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCSAqIGxlYXZlcyBpbnZh bGlkIGRhdGEgaW4gcHJ1bmVzdGF0ZSwgYmVjYXVzZSB0aGF0IGRhdGEgd29uJ3QgYmUKIAkJICog Y29uc3VsdGVkIGFnYWluIChjZiBpbml0aWFsIEFzc2VydCBpbiBFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMpLgogCQkgKi8KLQkJaWYgKHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUpCisJCWlmIChw cnVuZXN0YXRlICYmIHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUpCiAJCQlQYXJ0aXRpb25QcnVu ZUZpeFN1YlBsYW5NYXAocHJ1bmVzdGF0ZSwKIAkJCQkJCQkJCQkqaW5pdGlhbGx5X3ZhbGlkX3N1 YnBsYW5zLAogCQkJCQkJCQkJCW5fdG90YWxfc3VicGxhbnMpOwpAQCAtMTY3OCwxMSArMTczMCw3 MiBAQCBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJcmV0 dXJuIHBydW5lc3RhdGU7CiB9CiAKKy8qCisgKiBFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmlu ZworICoJCVBlcmZvcm0gaW5pdGlhbCBwcnVuaW5nIHVzaW5nIGdpdmVuIFBhcnRpdGlvblBydW5l SW5mbyB0byBkZXRlcm1pbmUKKyAqCQl0aGUgbWluaW1hbCBzZXQgb2YgY2hpbGQgc3VicGxhbnMg dG8gYmUgZXhlY3V0ZWQgb2YgdGhlIHBhcmVudCBwbGFuCisgKgkJbm9kZSB0byB3aGljaCB0aGUg UGFydGl0aW9uUHJ1bmVJbmZvIGJlbG9uZ3MgYW5kIGFsc28gdGhlIHNldCBvZiBSVAorICoJCWlu ZGV4ZXMgb2YgbGVhZiBwYXJ0aXRpb25zIHRoYXQgd2lsbCBzY2FubmVkIHdpdGggdGhvc2Ugc3Vi cGxhbnMuCisgKi8KK0JpdG1hcHNldCAqCitFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZyhQ bGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCSAg UGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkJICBCaXRtYXBzZXQgKipzY2Fu X2xlYWZwYXJ0X3J0aXMpCit7CisJTGlzdAkJICpydGFibGUgPSBwbGFubmVkc3RtdC0+cnRhYmxl OworCUV4cHJDb250ZXh0CSAqZWNvbnRleHQ7CisJUGFydGl0aW9uRGlyZWN0b3J5IHBkaXI7CisJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0LAorCQkJCSAgdG1wY29udGV4dDsKKwlQYXJ0aXRpb25Q cnVuZVN0YXRlICpwcnVuZXN0YXRlOworCUJpdG1hcHNldAkgKnZhbGlkX3N1YnBsYW5fb2ZmczsK KworCS8qCisJICogQSB0ZW1wb3JhcnkgY29udGV4dCB0byBhbGxvY2F0ZSBzdHVmZiBuZWVkZGVk IHRvIHJ1biB0aGUgcHJ1bmluZyBzdGVwcy4KKwkgKi8KKwl0bXBjb250ZXh0ID0gQWxsb2NTZXRD b250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJICAgImluaXRpYWwg cHJ1bmluZyB3b3JraW5nIGRhdGEiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpF Uyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjb250ZXh0KTsKKwor CS8qCisJICogUGFydGl0aW9uRGlyZWN0b3J5IHRvIGxvb2sgdXAgcGFydGl0aW9uIGRlc2NyaXB0 b3JzLCB3aGljaCBvbWl0cworCSAqIGRldGFjaGVkIHBhcnRpdGlvbnMsIGp1c3QgbGlrZSBpbiB0 aGUgZXhlY3V0b3IgcHJvcGVyLgorCSAqLworCXBkaXIgPSBDcmVhdGVQYXJ0aXRpb25EaXJlY3Rv cnkoQ3VycmVudE1lbW9yeUNvbnRleHQsIGZhbHNlKTsKKworCS8qCisJICogV2UgZG9uJ3QgeWV0 IGhhdmUgYSBQbGFuU3RhdGUgZm9yIHRoZSBwYXJlbnQgcGxhbiBub2RlLCBzbyBtdXN0IGNyZWF0 ZQorCSAqIGEgc3RhbmRhbG9uZSBFeHByQ29udGV4dCB0byBldmFsdWF0ZSBwcnVuaW5nIGV4cHJl c3Npb25zLCBlcXVpcHBlZCB3aXRoCisJICogdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFWFRF Uk4gcGFyYW1ldGVycyB0aGF0IHRoZSBjYWxsZXIgcGFzc2VkIHVzLgorCSAqIE5vdGUgdGhhdCB0 aGF0J3Mgb2theSBiZWNhdXNlIHRoZSBpbml0aWFsIHBydW5pbmcgc3RlcHMgZG8gbm90IGNvbnRh aW4KKwkgKiBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIHRoZSBleGVjdXRpb24gdG8gaGF2ZSBzdGFy dGVkLgorCSAqLworCWVjb250ZXh0ID0gQ3JlYXRlU3RhbmRhbG9uZUV4cHJDb250ZXh0KCk7CisJ ZWNvbnRleHQtPmVjeHRfcGFyYW1fbGlzdF9pbmZvID0gcGFyYW1zOworCXBydW5lc3RhdGUgPSBD cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKE5VTEwsIHBydW5laW5mbywgdHJ1ZSwgZmFsc2UsCisJ CQkJCQkJCQkJICAgcnRhYmxlLCBlY29udGV4dCwgcGRpcik7CisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCisJLyogRG8gdGhlIGluaXRpYWwgcHJ1bmluZy4gKi8KKwl2YWxp ZF9zdWJwbGFuX29mZnMgPSBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1 ZSwKKwkJCQkJCQkJCQkJCSAgc2Nhbl9sZWFmcGFydF9ydGlzKTsKKworCUZyZWVFeHByQ29udGV4 dChlY29udGV4dCwgdHJ1ZSk7CisJRGVzdHJveVBhcnRpdGlvbkRpcmVjdG9yeShwZGlyKTsKKwlN ZW1vcnlDb250ZXh0RGVsZXRlKHRtcGNvbnRleHQpOworCisJcmV0dXJuIHZhbGlkX3N1YnBsYW5f b2ZmczsKK30KKwogLyoKICAqIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUKICAqCQlCdWlsZCB0 aGUgZGF0YSBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGNhbGxpbmcgRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zCiAgKgotICogJ3BsYW5zdGF0ZScgaXMgdGhlIHBhcmVudCBwbGFuIG5vZGUncyBleGVj dXRpb24gc3RhdGUuCisgKiAncGxhbnN0YXRlJywgaWYgbm90IE5VTEwsIGlzIHRoZSBwYXJlbnQg cGxhbiBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlLiAgSXQKKyAqIGNhbiBiZSBOVUxMIGlmIGJlaW5n IGNhbGxlZCBiZWZvcmUgRXhlY3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlLAorICogJ3J0YWJs ZScgKHJhbmdlIHRhYmxlKSwgJ2Vjb250ZXh0JywgYW5kICdwYXJ0ZGlyJyBtdXN0IGJlIGV4cGxp Y2l0bHkKKyAqIHByb3ZpZGVkLgogICoKICAqICdwcnVuZWluZm8nIGlzIGEgUGFydGl0aW9uUHJ1 bmVJbmZvIGFzIGdlbmVyYXRlZCBieQogICogbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvLiAgSGVy ZSB3ZSBidWlsZCBhIFBhcnRpdGlvblBydW5lU3RhdGUgY29udGFpbmluZyBhCkBAIC0xNjk2LDE5 ICsxODA5LDIxIEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKICAqIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvLgogICovCiBzdGF0aWMgUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqCi1DcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKK0NyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1 bmVpbmZvLAorCQkJCQkJICBib29sIGNvbnNpZGVyX2luaXRpYWxfc3RlcHMsCisJCQkJCQkgIGJv b2wgY29uc2lkZXJfZXhlY19zdGVwcywKKwkJCQkJCSAgTGlzdCAqcnRhYmxlLCBFeHByQ29udGV4 dCAqZWNvbnRleHQsCisJCQkJCQkgIFBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0ZGlyKQogewotCUVT dGF0ZQkgICAqZXN0YXRlID0gcGxhbnN0YXRlLT5zdGF0ZTsKKwlFU3RhdGUJICAgKmVzdGF0ZSA9 IHBsYW5zdGF0ZSA/IHBsYW5zdGF0ZS0+c3RhdGUgOiBOVUxMOwogCVBhcnRpdGlvblBydW5lU3Rh dGUgKnBydW5lc3RhdGU7CiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNoaWVzOwogCUxpc3RDZWxsICAg KmxjOwogCWludAkJCWk7Ci0JRXhwckNvbnRleHQgKmVjb250ZXh0ID0gcGxhbnN0YXRlLT5wc19F eHByQ29udGV4dDsKIAotCS8qIEZvciBkYXRhIHJlYWRpbmcsIGV4ZWN1dG9yIGFsd2F5cyBvbWl0 cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCi0JaWYgKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVj dG9yeSA9PSBOVUxMKQotCQllc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQotCQkJQ3Jl YXRlUGFydGl0aW9uRGlyZWN0b3J5KGVzdGF0ZS0+ZXNfcXVlcnlfY3h0LCBmYWxzZSk7CisJQXNz ZXJ0KChlc3RhdGUgIT0gTlVMTCkgfHwKKwkJCShwYXJ0ZGlyICE9IE5VTEwgJiYgZWNvbnRleHQg IT0gTlVMTCAmJiBydGFibGUgIT0gTklMKSk7CiAKIAluX3BhcnRfaGllcmFyY2hpZXMgPSBsaXN0 X2xlbmd0aChwcnVuZWluZm8tPnBydW5lX2luZm9zKTsKIAlBc3NlcnQobl9wYXJ0X2hpZXJhcmNo aWVzID4gMCk7CkBAIC0xNzU5LDE5ICsxODc0LDQ4IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQog CQkJUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gKnBpbmZvID0gbGZpcnN0X25vZGUoUGFydGl0aW9u ZWRSZWxQcnVuZUluZm8sIGxjMik7CiAJCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1 bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVkYXRhW2pdOwogCQkJUmVsYXRpb24JcGFydHJl bDsKKwkJCWJvb2wJCWNsb3NlX3BhcnRyZWwgPSBmYWxzZTsKIAkJCVBhcnRpdGlvbkRlc2MgcGFy dGRlc2M7CiAJCQlQYXJ0aXRpb25LZXkgcGFydGtleTsKIAogCQkJLyoKLQkJCSAqIFdlIGNhbiBy ZWx5IG9uIHRoZSBjb3BpZXMgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCi0J CQkgKiBrZXkgYW5kIHBhcnRpdGlvbiBkZXNjcmlwdG9yIGFwcGVhcmluZyBpbiBpdHMgcmVsY2Fj aGUgZW50cnksCi0JCQkgKiBiZWNhdXNlIHRoYXQgZW50cnkgd2lsbCBiZSBoZWxkIG9wZW4gYW5k IGxvY2tlZCBmb3IgdGhlCi0JCQkgKiBkdXJhdGlvbiBvZiB0aGlzIGV4ZWN1dG9yIHJ1bi4KKwkJ CSAqIE11c3Qgb3BlbiB0aGUgcmVsYXRpb24gYnkgb3Vyc2VsdmVzIHdoZW4gY2FsbGVkIGJlZm9y ZSB0aGUKKwkJCSAqIGV4ZWN1dGlvbiBoYXMgc3RhcnRlZCwgc3VjaCBhcywgd2hlbiBjYWxsZWQg ZHVyaW5nCisJCQkgKiBFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcoKSBvbiBhIGNhY2hlZCBwbGFu LiAgSW4gdGhhdCBjYXNlLAorCQkJICogc3ViLXBhcnRpdGlvbnMgbXVzdCBiZSBsb2NrZWQsIGJl Y2F1c2UgQWNxdWlyZVBsYW5uZXJMb2NrcygpCisJCQkgKiB3b3VsZCBub3QgaGF2ZSBzZWVuIHRo ZW0uICgxc3QgcmVsYXRpb24gaW4gYSBwYXJ0cmVscHJ1bmVpbmZvcworCQkJICogbGlzdCBpcyBh bHdheXMgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgYXBwZWFyaW5nIGluIHRoZQorCQkJICog cXVlcnksIHdoaWNoIEFjcXVpcmVQbGFubmVyTG9ja3MoKSB3b3VsZCBoYXZlIGxvY2tlZDsgdGhl CisJCQkgKiBBc3NlcnQgaW4gcmVsYXRpb25fb3BlbigpIGd1YXJkcyB0aGF0IGFzc3VtcHRpb24u KQorCQkJICovCisJCQlpZiAoZXN0YXRlID09IE5VTEwpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRy eSAqcnRlID0gcnRfZmV0Y2gocGluZm8tPnJ0aW5kZXgsIHJ0YWJsZSk7CisJCQkJaW50CQlsb2Nr bW9kZSA9IChqID09IDApID8gTm9Mb2NrIDogcnRlLT5yZWxsb2NrbW9kZTsKKworCQkJCXBhcnRy ZWwgPSB0YWJsZV9vcGVuKHJ0ZS0+cmVsaWQsIGxvY2ttb2RlKTsKKwkJCQljbG9zZV9wYXJ0cmVs ID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlwYXJ0cmVsID0gRXhlY0dldFJhbmdlVGFibGVS ZWxhdGlvbihlc3RhdGUsIHBpbmZvLT5ydGluZGV4KTsKKworCQkJLyoKKwkJCSAqIFdlIGNhbiBy ZWx5IG9uIHRoZSBjb3B5IG9mIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSdzIHBhcnRpdGlvbgorCQkJ ICoga2V5IGZyb20gaW4gaXRzIHJlbGNhY2hlIGVudHJ5LCBiZWNhdXNlIGl0IGNhbid0IGNoYW5n ZSAob3IKKwkJCSAqIGdldCBkZXN0cm95ZWQpIGFzIGxvbmcgYXMgdGhlIHJlbGF0aW9uIGlzIGxv Y2tlZC4gIFBhcnRpdGlvbgorCQkJICogZGVzY3JpcHRvciBpcyB0YWtlbiBmcm9tIHRoZSBQYXJ0 aXRpb25EaXJlY3RvcnkgYXNzb2NpYXRlZCB3aXRoCisJCQkgKiB0aGUgdGFibGUgdGhhdCBpcyBo ZWxkIG9wZW4gbG9uZyBlbm91Z2ggZm9yIHRoZSBkZXNjcmlwdG9yIHRvCisJCQkgKiByZW1haW4g dmFsaWQgd2hpbGUgaXQncyB1c2VkIHRvIHBlcmZvcm0gdGhlIHBydW5pbmcgc3RlcHMuCiAJCQkg Ki8KLQkJCXBhcnRyZWwgPSBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKGVzdGF0ZSwgcGluZm8t PnJ0aW5kZXgpOwogCQkJcGFydGtleSA9IFJlbGF0aW9uR2V0UGFydGl0aW9uS2V5KHBhcnRyZWwp OwotCQkJcGFydGRlc2MgPSBQYXJ0aXRpb25EaXJlY3RvcnlMb29rdXAoZXN0YXRlLT5lc19wYXJ0 aXRpb25fZGlyZWN0b3J5LAotCQkJCQkJCQkJCQkJcGFydHJlbCk7CisJCQlwYXJ0ZGVzYyA9IFBh cnRpdGlvbkRpcmVjdG9yeUxvb2t1cChwYXJ0ZGlyLCBwYXJ0cmVsKTsKKworCQkJLyoKKwkJCSAq IE11c3QgY2xvc2UgcGFydHJlbCwga2VlcGluZyB0aGUgbG9jayB0YWtlbiwgaWYgd2UncmUgbm90 IHVzaW5nCisJCQkgKiBFU3RhdGUncyBlbnRyeS4KKwkJCSAqLworCQkJaWYgKGNsb3NlX3BhcnRy ZWwpCisJCQkJdGFibGVfY2xvc2UocGFydHJlbCwgTm9Mb2NrKTsKIAogCQkJLyoKIAkJCSAqIElu aXRpYWxpemUgdGhlIHN1YnBsYW5fbWFwIGFuZCBzdWJwYXJ0X21hcC4KQEAgLTE3ODUsNiArMTky OSw3IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBh cnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJQXNzZXJ0KHBhcnRkZXNjLT5ucGFydHMg Pj0gcGluZm8tPm5wYXJ0cyk7CiAJCQlwcHJ1bmUtPm5wYXJ0cyA9IHBhcnRkZXNjLT5ucGFydHM7 CiAJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwID0gcGFsbG9jKHNpemVvZihpbnQpICogcGFydGRlc2Mt Pm5wYXJ0cyk7CisJCQlwcHJ1bmUtPnJ0aV9tYXAgPSBwYWxsb2Moc2l6ZW9mKEluZGV4KSAqIHBh cnRkZXNjLT5ucGFydHMpOwogCQkJaWYgKHBhcnRkZXNjLT5ucGFydHMgPT0gcGluZm8tPm5wYXJ0 cykKIAkJCXsKIAkJCQkvKgpAQCAtMTc5NSw2ICsxOTQwLDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8pCiAJCQkJcHBydW5lLT5zdWJwYXJ0X21hcCA9IHBpbmZvLT5zdWJwYXJ0X21hcDsKIAkJCQlt ZW1jcHkocHBydW5lLT5zdWJwbGFuX21hcCwgcGluZm8tPnN1YnBsYW5fbWFwLAogCQkJCQkgICBz aXplb2YoaW50KSAqIHBpbmZvLT5ucGFydHMpOworCQkJCW1lbWNweShwcHJ1bmUtPnJ0aV9tYXAs IHBpbmZvLT5ydGlfbWFwLAorCQkJCQkgICBzaXplb2YoaW50KSAqIHBpbmZvLT5ucGFydHMpOwog CiAJCQkJLyoKIAkJCQkgKiBEb3VibGUtY2hlY2sgdGhhdCB0aGUgbGlzdCBvZiB1bnBydW5lZCBy ZWxhdGlvbnMgaGFzIG5vdApAQCAtMTg0NSw2ICsxOTkyLDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8pCiAJCQkJCQkJcGluZm8tPnN1YnBsYW5fbWFwW3BkX2lkeF07CiAJCQkJCQlwcHJ1bmUtPnN1 YnBhcnRfbWFwW3BwX2lkeF0gPQogCQkJCQkJCXBpbmZvLT5zdWJwYXJ0X21hcFtwZF9pZHhdOwor CQkJCQkJcHBydW5lLT5ydGlfbWFwW3BwX2lkeF0gPQorCQkJCQkJCXBpbmZvLT5ydGlfbWFwW3Bk X2lkeF07CiAJCQkJCQlwZF9pZHgrKzsKIAkJCQkJfQogCQkJCQllbHNlCkBAIC0xODUyLDYgKzIw MDEsNyBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQ YXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCQkJCS8qIHRoaXMgcGFydGRlc2MgZW50 cnkgaXMgbm90IGluIHRoZSBwbGFuICovCiAJCQkJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwW3BwX2lk eF0gPSAtMTsKIAkJCQkJCXBwcnVuZS0+c3VicGFydF9tYXBbcHBfaWR4XSA9IC0xOworCQkJCQkJ cHBydW5lLT5ydGlfbWFwW3BwX2lkeF0gPSAwOwogCQkJCQl9CiAJCQkJfQogCkBAIC0xODczLDcg KzIwMjMsNyBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCSAqIEluaXRpYWxpemUgcHJ1bmlu ZyBjb250ZXh0cyBhcyBuZWVkZWQuCiAJCQkgKi8KIAkJCXBwcnVuZS0+aW5pdGlhbF9wcnVuaW5n X3N0ZXBzID0gcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwczsKLQkJCWlmIChwaW5mby0+aW5p dGlhbF9wcnVuaW5nX3N0ZXBzKQorCQkJaWYgKGNvbnNpZGVyX2luaXRpYWxfc3RlcHMgJiYgcGlu Zm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFydGl0aW9uUHJ1bmVD b250ZXh0KCZwcHJ1bmUtPmluaXRpYWxfY29udGV4dCwKIAkJCQkJCQkJCQkgIHBpbmZvLT5pbml0 aWFsX3BydW5pbmdfc3RlcHMsCkBAIC0xODgzLDcgKzIwMzMsNyBAQCBDcmVhdGVQYXJ0aXRpb25Q cnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5l aW5mbykKIAkJCQlwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lID0gdHJ1ZTsKIAkJCX0KIAkJ CXBwcnVuZS0+ZXhlY19wcnVuaW5nX3N0ZXBzID0gcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwczsK LQkJCWlmIChwaW5mby0+ZXhlY19wcnVuaW5nX3N0ZXBzKQorCQkJaWYgKGNvbnNpZGVyX2V4ZWNf c3RlcHMgJiYgcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFydGl0 aW9uUHJ1bmVDb250ZXh0KCZwcHJ1bmUtPmV4ZWNfY29udGV4dCwKIAkJCQkJCQkJCQkgIHBpbmZv LT5leGVjX3BydW5pbmdfc3RlcHMsCkBAIC0yMTExLDEwICsyMjYxLDE0IEBAIFBhcnRpdGlvblBy dW5lRml4U3ViUGxhbk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogICogUGFz cyBpbml0aWFsX3BydW5lIGlmIFBBUkFNX0VYRUMgUGFyYW1zIGNhbm5vdCB5ZXQgYmUgZXZhbHVh dGVkLiAgVGhpcwogICogZGlmZmVyZW50aWF0ZXMgdGhlIGluaXRpYWwgZXhlY3V0b3ItdGltZSBw cnVuaW5nIHN0ZXAgZnJvbSBsYXRlcgogICogcnVudGltZSBwcnVuaW5nLgorICoKKyAqIFJUIGlu ZGV4ZXMgb2YgbGVhZiBwYXJ0aXRpb25zIHNjYW5uZWQgYnkgdGhlIGNob3NlbiBzdWJwbGFucyBh cmUgYWRkZWQgdG8KKyAqICpzY2FuX2xlYWZwYXJ0X3J0aXMgaWYgdGhlIHBvaW50ZXIgaXMgbm9u LU5VTEwuCiAgKi8KIEJpdG1hcHNldCAqCiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0 aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCSBib29sIGluaXRpYWxfcHJ1bmUpCisJ CQkJCQkgYm9vbCBpbml0aWFsX3BydW5lLAorCQkJCQkJIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBh cnRfcnRpcykKIHsKIAlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKQEAgLTIxNDksNyArMjMwMyw3IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogCQkgKi8KIAkJcHBydW5lID0gJnBy dW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVswXTsKIAkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19y ZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCBpbml0aWFsX3BydW5lLAotCQkJCQkJCQkJICAgJnJl c3VsdCk7CisJCQkJCQkJCQkgICAmcmVzdWx0LCBzY2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAJCS8q IEV4cHJlc3Npb24gZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNlIGluIEV4cHJDb250ZXh0IHRvbyAq LwogCQlpZiAocHBydW5lLT5leGVjX3BydW5pbmdfc3RlcHMpCkBAIC0yMTYzLDYgKzIzMTcsOCBA QCBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0 ZSwKIAogCS8qIENvcHkgcmVzdWx0IG91dCBvZiB0aGUgdGVtcCBjb250ZXh0IGJlZm9yZSB3ZSBy ZXNldCBpdCAqLwogCXJlc3VsdCA9IGJtc19jb3B5KHJlc3VsdCk7CisJaWYgKHNjYW5fbGVhZnBh cnRfcnRpcykKKwkJKnNjYW5fbGVhZnBhcnRfcnRpcyA9IGJtc19jb3B5KCpzY2FuX2xlYWZwYXJ0 X3J0aXMpOwogCiAJTWVtb3J5Q29udGV4dFJlc2V0KHBydW5lc3RhdGUtPnBydW5lX2NvbnRleHQp OwogCkBAIC0yMTczLDEzICsyMzI5LDE1IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0 aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogICogZmluZF9tYXRjaGluZ19zdWJwbGFuc19y ZWN1cnNlCiAgKgkJUmVjdXJzaXZlIHdvcmtlciBmdW5jdGlvbiBmb3IgRXhlY0ZpbmRNYXRjaGlu Z1N1YlBsYW5zCiAgKgotICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElEcyB0 byAqdmFsaWRzdWJwbGFucworICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElE cyB0byAqdmFsaWRzdWJwbGFucyBhbmQgUlQgaW5kZXhlcyBvZgorICogb2YgdGhlIGNvcnJlc3Bv bmRpbmcgbGVhZiBwYXJ0aXRpb25zIHRvICpzY2FuX2xlYWZwYXJ0X3J0aXMgKGlmIGFza2VkIGZv cikuCiAgKi8KIHN0YXRpYyB2b2lkCiBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFy dGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSwKIAkJCQkJCQkgICBQYXJ0aXRpb25lZFJlbFBy dW5pbmdEYXRhICpwcHJ1bmUsCiAJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAotCQkJCQkJ CSAgIEJpdG1hcHNldCAqKnZhbGlkc3VicGxhbnMpCisJCQkJCQkJICAgQml0bWFwc2V0ICoqdmFs aWRzdWJwbGFucywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpCiB7 CiAJQml0bWFwc2V0ICAqcGFydHNldDsKIAlpbnQJCQlpOwpAQCAtMjIwNiw4ICsyMzY0LDEzIEBA IGZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1 bmVkYXRhLAogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0c2V0LCBpKSkgPj0gMCkK IAl7CiAJCWlmIChwcHJ1bmUtPnN1YnBsYW5fbWFwW2ldID49IDApCisJCXsKIAkJCSp2YWxpZHN1 YnBsYW5zID0gYm1zX2FkZF9tZW1iZXIoKnZhbGlkc3VicGxhbnMsCiAJCQkJCQkJCQkJCXBwcnVu ZS0+c3VicGxhbl9tYXBbaV0pOworCQkJaWYgKHNjYW5fbGVhZnBhcnRfcnRpcyAmJiBwcHJ1bmUt PnJ0aV9tYXBbaV0gPiAwKQorCQkJCSpzY2FuX2xlYWZwYXJ0X3J0aXMgPSBibXNfYWRkX21lbWJl cigqc2Nhbl9sZWFmcGFydF9ydGlzLAorCQkJCQkJCQkJCQkJCSBwcHJ1bmUtPnJ0aV9tYXBbaV0p OworCQl9CiAJCWVsc2UKIAkJewogCQkJaW50CQkJcGFydGlkeCA9IHBwcnVuZS0+c3VicGFydF9t YXBbaV07CkBAIC0yMjE1LDcgKzIzNzgsOCBAQCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vy c2UoUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSwKIAkJCWlmIChwYXJ0aWR4ID49IDAp CiAJCQkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwKIAkJCQkJCQkJ CQkJICAgJnBydW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVtwYXJ0aWR4XSwKLQkJCQkJCQkJCQkJ ICAgaW5pdGlhbF9wcnVuZSwgdmFsaWRzdWJwbGFucyk7CisJCQkJCQkJCQkJCSAgIGluaXRpYWxf cHJ1bmUsIHZhbGlkc3VicGxhbnMsCisJCQkJCQkJCQkJCSAgIHNjYW5fbGVhZnBhcnRfcnRpcyk7 CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggOWRm MWY4MWVhOC4uNjM5MTQ1YWJlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKQEAgLTExOSw2 ICsxMTksNyBAQCBDcmVhdGVFeGVjdXRvclN0YXRlKHZvaWQpCiAJZXN0YXRlLT5lc19yZWxhdGlv bnMgPSBOVUxMOwogCWVzdGF0ZS0+ZXNfcm93bWFya3MgPSBOVUxMOwogCWVzdGF0ZS0+ZXNfcGxh bm5lZHN0bXQgPSBOVUxMOworCWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHQgPSBOVUxMOwog CiAJZXN0YXRlLT5lc19qdW5rRmlsdGVyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMu YwppbmRleCBmOTQ2MGFlNTA2Li5hMjE4MmE2YjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9mdW5jdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMu YwpAQCAtODQ0LDcgKzg0NCw3IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMs IFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCWVsc2UKIAkJZGVzdCA9IE5vbmVfUmVjZWl2 ZXI7CiAKLQllcy0+cWQgPSBDcmVhdGVRdWVyeURlc2MoZXMtPnN0bXQsCisJZXMtPnFkID0gQ3Jl YXRlUXVlcnlEZXNjKGVzLT5zdG10LCBOVUxMLAogCQkJCQkJCSBmY2FjaGUtPnNyYywKIAkJCQkJ CQkgR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkgSW52YWxpZFNuYXBzaG90LApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IDM1N2UxMGExZDcuLjA5ZjI2NjU4ZTIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQXBwZW5kLmMKQEAgLTk0LDYgKzk0LDcgQEAgc3RhdGljIGJvb2wgRXhlY0Fw cGVuZEFzeW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1 bHQpOwogc3RhdGljIHZvaWQgRXhlY0FwcGVuZEFzeW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRlICpu b2RlKTsKIHN0YXRpYyB2b2lkIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRl ICpub2RlKTsKIAorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRBcHBlbmQKICAqCkBAIC0xMzQs NyArMTM1LDcgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwg aW50IGVmbGFncykKIAlhcHBlbmRzdGF0ZS0+YXNfYmVndW4gPSBmYWxzZTsKIAogCS8qIElmIHJ1 bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93 ICovCi0JaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5mbyAhPSBOVUxMKQorCWlmIChub2RlLT5wYXJ0 X3BydW5lX2luZGV4ID49IDApCiAJewogCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRl OwogCkBAIC0xNDUsNyArMTQ2LDcgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICovCiAJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBh cnRpdGlvblBydW5pbmcoJmFwcGVuZHN0YXRlLT5wcywKIAkJCQkJCQkJCQkJICBsaXN0X2xlbmd0 aChub2RlLT5hcHBlbmRwbGFucyksCi0JCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmZv LAorCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkJCQkJCSAgJnZh bGlkc3VicGxhbnMpOwogCQlhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0YXRl OwogCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CkBAIC0xNTUsNyAr MTU2LDggQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50 IGVmbGFncykKIAkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3VicGxhbnMgaW1t ZWRpYXRlbHksIHByZXZlbnRpbmcKIAkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGlu Z1N1YlBsYW5zLgogCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5w bGFucyA+IDApCisJCWlmIChhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAor CQkJKCFhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5z ID4gMCkpCiAJCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3Jhbmdl KE5VTEwsIDAsIG5wbGFucyAtIDEpOwogCX0KIAllbHNlCkBAIC01NzcsNyArNTc5LDcgQEAgY2hv b3NlX25leHRfc3VicGxhbl9sb2NhbGx5KEFwcGVuZFN0YXRlICpub2RlKQogCQl9CiAJCWVsc2Ug aWYgKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCQlub2RlLT5hc192YWxpZF9z dWJwbGFucyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0 YXRlLCBmYWxzZSk7CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5l X3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAKIAkJd2hpY2hwbGFuID0gLTE7CiAJfQpAQCAtNjQyLDcg KzY0NCw3IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX2xlYWRlcihBcHBlbmRTdGF0ZSAqbm9k ZSkKIAkJaWYgKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCXsKIAkJCW5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+ YXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9k ZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKIAogCQkJLyoKIAkJCSAqIE1hcmsgZWFj aCBpbnZhbGlkIHBsYW4gYXMgZmluaXNoZWQgdG8gYWxsb3cgdGhlIGxvb3AgYmVsb3cgdG8KQEAg LTcxNyw3ICs3MTksNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3Rh dGUgKm5vZGUpCiAJZWxzZSBpZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAl7 CiAJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAJCW1hcmtfaW52YWxpZF9z dWJwbGFuc19hc19maW5pc2hlZChub2RlKTsKIAl9CiAKQEAgLTg2OCw3ICs4NzAsNyBAQCBFeGVj QXBwZW5kQXN5bmNCZWdpbihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlpZiAobm9kZS0+YXNfdmFsaWRf c3VicGxhbnMgPT0gTlVMTCkKIAl7CiAJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4 ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJ RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVM TCk7CiAKIAkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobm9kZSk7CiAJfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCBlY2Y5MDUyZTAzLi43NzA4Y2ZmZmRhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtODIsNyArODIsNyBAQCBF eGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50 IGVmbGFncykKIAltZXJnZXN0YXRlLT5wcy5FeGVjUHJvY05vZGUgPSBFeGVjTWVyZ2VBcHBlbmQ7 CiAKIAkvKiBJZiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNl dCB0aGF0IHVwIG5vdyAqLwotCWlmIChub2RlLT5wYXJ0X3BydW5lX2luZm8gIT0gTlVMTCkKKwlp ZiAobm9kZS0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVzdGF0ZTsKIApAQCAtOTMsNyArOTMsNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1l cmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICovCiAJCXBy dW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoJm1lcmdlc3RhdGUtPnBzLAogCQkJ CQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMpLAotCQkJCQkJCQkJCQkgIG5v ZGUtPnBhcnRfcHJ1bmVfaW5mbywKKwkJCQkJCQkJCQkJICBub2RlLT5wYXJ0X3BydW5lX2luZGV4 LAogCQkJCQkJCQkJCQkgICZ2YWxpZHN1YnBsYW5zKTsKIAkJbWVyZ2VzdGF0ZS0+bXNfcHJ1bmVf c3RhdGUgPSBwcnVuZXN0YXRlOwogCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJw bGFucyk7CkBAIC0xMDMsNyArMTAzLDggQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVu ZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW4sIHdlIGNh biBmaWxsIGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJCSAqIGxh dGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlmICghcHJ1 bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQlpZiAobWVyZ2VzdGF0ZS0+ bXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFtZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0 ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKSkKIAkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlk X3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAl9CiAJZWxz ZQpAQCAtMjE4LDcgKzIxOSw3IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkK IAkJICovCiAJCWlmIChub2RlLT5tc192YWxpZF9zdWJwbGFucyA9PSBOVUxMKQogCQkJbm9kZS0+ bXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5t c19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2Rl LT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCiAJCS8qCiAJCSAqIEZpcnN0IHRpbWUg dGhyb3VnaDogcHVsbCB0aGUgZmlyc3QgdHVwbGUgZnJvbSBlYWNoIHZhbGlkIHN1YnBsYW4sCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL3NwaS5jCmluZGV4IDA0MmE1ZjhiMGEuLjA1ZGIyZTlkZTEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCkBA IC0yNDczLDcgKzI0NzMsOSBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNv bnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCXsKIAkJQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSA9IChDYWNoZWRQbGFuU291cmNlICopIGxmaXJzdChsYzEpOwogCQlMaXN0CSAg ICpzdG10X2xpc3Q7Ci0JCUxpc3RDZWxsICAgKmxjMjsKKwkJTGlzdAkgICAqcGFydF9wcnVuZV9y ZXN1bHRfbGlzdDsKKwkJTGlzdENlbGwgICAqbGMyLAorCQkJCSAgICpsYzM7CiAKIAkJc3BpY2Fs bGJhY2thcmcucXVlcnkgPSBwbGFuc291cmNlLT5xdWVyeV9zdHJpbmc7CiAKQEAgLTI1NTIsNiAr MjU1NCw3IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhl Y3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQkJCQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQt PnF1ZXJ5RW52KTsKIAogCQlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OworCQlwYXJ0X3By dW5lX3Jlc3VsdF9saXN0ID0gY3BsYW4tPnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3Q7CiAKIAkJLyoK IAkJICogSWYgd2Ugd2VyZW4ndCBnaXZlbiBhIHNwZWNpZmljIHNuYXBzaG90IHRvIHVzZSwgYW5k IHRoZSBzdGF0ZW1lbnQKQEAgLTI1ODksOSArMjU5MiwxMCBAQCBfU1BJX2V4ZWN1dGVfcGxhbihT UElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkJfQog CQl9CiAKLQkJZm9yZWFjaChsYzIsIHN0bXRfbGlzdCkKKwkJZm9yYm90aChsYzIsIHN0bXRfbGlz dCwgbGMzLCBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KQogCQl7CiAJCQlQbGFubmVkU3RtdCAqc3Rt dCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYzIpOworCQkJUGFydGl0aW9uUHJ1bmVSZXN1 bHQgKnBhcnRfcHJ1bmVfcmVzdWx0ID0gbGZpcnN0X25vZGUoUGFydGl0aW9uUHJ1bmVSZXN1bHQs IGxjMyk7CiAJCQlib29sCQljYW5TZXRUYWcgPSBzdG10LT5jYW5TZXRUYWc7CiAJCQlEZXN0UmVj ZWl2ZXIgKmRlc3Q7CiAKQEAgLTI2NjMsNyArMjY2Nyw3IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQ SVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQkJZWxz ZQogCQkJCQlzbmFwID0gSW52YWxpZFNuYXBzaG90OwogCi0JCQkJcWRlc2MgPSBDcmVhdGVRdWVy eURlc2Moc3RtdCwKKwkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LCBwYXJ0X3BydW5l X3Jlc3VsdCwKIAkJCQkJCQkJCQlwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCiAJCQkJCQkJCQkJ c25hcCwgY3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJCQlkZXN0LApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVu Y3MuYwppbmRleCA0NmExOTQzZDk3Li5jNWM3MDU5M2RlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpA QCAtOTYsNyArOTYsMTAgQEAgX2NvcHlQbGFubmVkU3RtdChjb25zdCBQbGFubmVkU3RtdCAqZnJv bSkKIAlDT1BZX1NDQUxBUl9GSUVMRChwYXJhbGxlbE1vZGVOZWVkZWQpOwogCUNPUFlfU0NBTEFS X0ZJRUxEKGppdEZsYWdzKTsKIAlDT1BZX05PREVfRklFTEQocGxhblRyZWUpOworCUNPUFlfTk9E RV9GSUVMRChwYXJ0UHJ1bmVJbmZvcyk7CisJQ09QWV9TQ0FMQVJfRklFTEQoY29udGFpbnNJbml0 aWFsUHJ1bmluZyk7CiAJQ09QWV9OT0RFX0ZJRUxEKHJ0YWJsZSk7CisJQ09QWV9CSVRNQVBTRVRf RklFTEQobWluTG9ja1JlbGlkcyk7CiAJQ09QWV9OT0RFX0ZJRUxEKHJlc3VsdFJlbGF0aW9ucyk7 CiAJQ09QWV9OT0RFX0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7CiAJQ09QWV9OT0RFX0ZJRUxEKHN1 YnBsYW5zKTsKQEAgLTI1Myw3ICsyNTYsNyBAQCBfY29weUFwcGVuZChjb25zdCBBcHBlbmQgKmZy b20pCiAJQ09QWV9OT0RFX0ZJRUxEKGFwcGVuZHBsYW5zKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChu YXN5bmNwbGFucyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoZmlyc3RfcGFydGlhbF9wbGFuKTsKLQlD T1BZX05PREVfRklFTEQocGFydF9wcnVuZV9pbmZvKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChwYXJ0 X3BydW5lX2luZGV4KTsKIAogCXJldHVybiBuZXdub2RlOwogfQpAQCAtMjgxLDcgKzI4NCw3IEBA IF9jb3B5TWVyZ2VBcHBlbmQoY29uc3QgTWVyZ2VBcHBlbmQgKmZyb20pCiAJQ09QWV9QT0lOVEVS X0ZJRUxEKHNvcnRPcGVyYXRvcnMsIGZyb20tPm51bUNvbHMgKiBzaXplb2YoT2lkKSk7CiAJQ09Q WV9QT0lOVEVSX0ZJRUxEKGNvbGxhdGlvbnMsIGZyb20tPm51bUNvbHMgKiBzaXplb2YoT2lkKSk7 CiAJQ09QWV9QT0lOVEVSX0ZJRUxEKG51bGxzRmlyc3QsIGZyb20tPm51bUNvbHMgKiBzaXplb2Yo Ym9vbCkpOwotCUNPUFlfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCUNPUFlfU0NBTEFS X0ZJRUxEKHBhcnRfcHJ1bmVfaW5kZXgpOwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CkBAIC0xMjgw LDYgKzEyODMsOCBAQCBfY29weVBhcnRpdGlvblBydW5lSW5mbyhjb25zdCBQYXJ0aXRpb25QcnVu ZUluZm8gKmZyb20pCiAJUGFydGl0aW9uUHJ1bmVJbmZvICpuZXdub2RlID0gbWFrZU5vZGUoUGFy dGl0aW9uUHJ1bmVJbmZvKTsKIAogCUNPUFlfTk9ERV9GSUVMRChwcnVuZV9pbmZvcyk7CisJQ09Q WV9TQ0FMQVJfRklFTEQobmVlZHNfaW5pdF9wcnVuaW5nKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChu ZWVkc19leGVjX3BydW5pbmcpOwogCUNPUFlfQklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBsYW5z KTsKIAogCXJldHVybiBuZXdub2RlOwpAQCAtMTI5Niw2ICsxMzAxLDcgQEAgX2NvcHlQYXJ0aXRp b25lZFJlbFBydW5lSW5mbyhjb25zdCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyAqZnJvbSkKIAlD T1BZX1BPSU5URVJfRklFTEQoc3VicGxhbl9tYXAsIGZyb20tPm5wYXJ0cyAqIHNpemVvZihpbnQp KTsKIAlDT1BZX1BPSU5URVJfRklFTEQoc3VicGFydF9tYXAsIGZyb20tPm5wYXJ0cyAqIHNpemVv ZihpbnQpKTsKIAlDT1BZX1BPSU5URVJfRklFTEQocmVsaWRfbWFwLCBmcm9tLT5ucGFydHMgKiBz aXplb2YoT2lkKSk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKHJ0aV9tYXAsIGZyb20tPm5wYXJ0cyAq IHNpemVvZihJbmRleCkpOwogCUNPUFlfTk9ERV9GSUVMRChpbml0aWFsX3BydW5pbmdfc3RlcHMp OwogCUNPUFlfTk9ERV9GSUVMRChleGVjX3BydW5pbmdfc3RlcHMpOwogCUNPUFlfQklUTUFQU0VU X0ZJRUxEKGV4ZWNwYXJhbWlkcyk7CkBAIC01NDY5LDYgKzU0NzUsMjEgQEAgX2NvcHlFeHRlbnNp YmxlTm9kZShjb25zdCBFeHRlbnNpYmxlTm9kZSAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsKIH0K IAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICoJCQkJCWV4ZWNub2Rlcy5oIGNvcHkgZnVuY3Rpb25zCisgKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKi8KK3N0YXRpYyBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqCitfY29weVBhcnRpdGlvblBy dW5lUmVzdWx0KGNvbnN0IFBhcnRpdGlvblBydW5lUmVzdWx0ICpmcm9tKQoreworCVBhcnRpdGlv blBydW5lUmVzdWx0ICpuZXdub2RlID0gbWFrZU5vZGUoUGFydGl0aW9uUHJ1bmVSZXN1bHQpOwor CisJQ09QWV9CSVRNQVBTRVRfRklFTEQoc2Nhbl9sZWFmcGFydF9ydGlzKTsKKwlDT1BZX05PREVf RklFTEQodmFsaWRfc3VicGxhbl9vZmZzX2xpc3QpOworCisJcmV0dXJuIG5ld25vZGU7Cit9CisK IC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKICAqCQkJCQl2YWx1ZS5oIGNvcHkgZnVuY3Rpb25zCiAgKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBA IC01NTIzLDcgKzU1NDQsNiBAQCBfY29weUJpdFN0cmluZyhjb25zdCBCaXRTdHJpbmcgKmZyb20p CiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKLQogc3RhdGljIEZvcmVpZ25LZXlDYWNoZUluZm8gKgog X2NvcHlGb3JlaWduS2V5Q2FjaGVJbmZvKGNvbnN0IEZvcmVpZ25LZXlDYWNoZUluZm8gKmZyb20p CiB7CkBAIC02NTY1LDYgKzY1ODUsMTMgQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJv bSkKIAkJCXJldHZhbCA9IF9jb3B5UHVibGljYXRpb25UYWJsZShmcm9tKTsKIAkJCWJyZWFrOwog CisJCQkvKgorCQkJICogRVhFQ1VUSU9OIE5PREVTCisJCQkgKi8KKwkJY2FzZSBUX1BhcnRpdGlv blBydW5lUmVzdWx0OgorCQkJcmV0dmFsID0gX2NvcHlQYXJ0aXRpb25QcnVuZVJlc3VsdChmcm9t KTsKKwkJCWJyZWFrOworCiAJCQkvKgogCQkJICogTUlTQ0VMTEFORU9VUyBOT0RFUwogCQkJICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvb3V0ZnVuY3MuYwppbmRleCAxM2UxNjQzNTMwLi5jYTU0MDIyZmVlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMKQEAgLTMxNCw3ICszMTQsMTAgQEAgX291dFBsYW5uZWRTdG10KFN0cmluZ0luZm8g c3RyLCBjb25zdCBQbGFubmVkU3RtdCAqbm9kZSkKIAlXUklURV9CT09MX0ZJRUxEKHBhcmFsbGVs TW9kZU5lZWRlZCk7CiAJV1JJVEVfSU5UX0ZJRUxEKGppdEZsYWdzKTsKIAlXUklURV9OT0RFX0ZJ RUxEKHBsYW5UcmVlKTsKKwlXUklURV9OT0RFX0ZJRUxEKHBhcnRQcnVuZUluZm9zKTsKKwlXUklU RV9CT09MX0ZJRUxEKGNvbnRhaW5zSW5pdGlhbFBydW5pbmcpOwogCVdSSVRFX05PREVfRklFTEQo cnRhYmxlKTsKKwlXUklURV9CSVRNQVBTRVRfRklFTEQobWluTG9ja1JlbGlkcyk7CiAJV1JJVEVf Tk9ERV9GSUVMRChyZXN1bHRSZWxhdGlvbnMpOwogCVdSSVRFX05PREVfRklFTEQoYXBwZW5kUmVs YXRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKHN1YnBsYW5zKTsKQEAgLTQ0Myw3ICs0NDYsNyBA QCBfb3V0QXBwZW5kKFN0cmluZ0luZm8gc3RyLCBjb25zdCBBcHBlbmQgKm5vZGUpCiAJV1JJVEVf Tk9ERV9GSUVMRChhcHBlbmRwbGFucyk7CiAJV1JJVEVfSU5UX0ZJRUxEKG5hc3luY3BsYW5zKTsK IAlXUklURV9JTlRfRklFTEQoZmlyc3RfcGFydGlhbF9wbGFuKTsKLQlXUklURV9OT0RFX0ZJRUxE KHBhcnRfcHJ1bmVfaW5mbyk7CisJV1JJVEVfSU5UX0ZJRUxEKHBhcnRfcHJ1bmVfaW5kZXgpOwog fQogCiBzdGF0aWMgdm9pZApAQCAtNDYwLDcgKzQ2Myw3IEBAIF9vdXRNZXJnZUFwcGVuZChTdHJp bmdJbmZvIHN0ciwgY29uc3QgTWVyZ2VBcHBlbmQgKm5vZGUpCiAJV1JJVEVfT0lEX0FSUkFZKHNv cnRPcGVyYXRvcnMsIG5vZGUtPm51bUNvbHMpOwogCVdSSVRFX09JRF9BUlJBWShjb2xsYXRpb25z LCBub2RlLT5udW1Db2xzKTsKIAlXUklURV9CT09MX0FSUkFZKG51bGxzRmlyc3QsIG5vZGUtPm51 bUNvbHMpOwotCVdSSVRFX05PREVfRklFTEQocGFydF9wcnVuZV9pbmZvKTsKKwlXUklURV9JTlRf RklFTEQocGFydF9wcnVuZV9pbmRleCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDA2LDYgKzEw MDksOCBAQCBfb3V0UGFydGl0aW9uUHJ1bmVJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQYXJ0 aXRpb25QcnVuZUluZm8gKm5vZGUpCiAJV1JJVEVfTk9ERV9UWVBFKCJQQVJUSVRJT05QUlVORUlO Rk8iKTsKIAogCVdSSVRFX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOworCVdSSVRFX0JPT0xfRklF TEQobmVlZHNfaW5pdF9wcnVuaW5nKTsKKwlXUklURV9CT09MX0ZJRUxEKG5lZWRzX2V4ZWNfcHJ1 bmluZyk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBsYW5zKTsKIH0KIApAQCAt MTAyMCw2ICsxMDI1LDcgQEAgX291dFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvKFN0cmluZ0luZm8g c3RyLCBjb25zdCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyAqbm9kZSkKIAlXUklURV9JTlRfQVJS QVkoc3VicGxhbl9tYXAsIG5vZGUtPm5wYXJ0cyk7CiAJV1JJVEVfSU5UX0FSUkFZKHN1YnBhcnRf bWFwLCBub2RlLT5ucGFydHMpOwogCVdSSVRFX09JRF9BUlJBWShyZWxpZF9tYXAsIG5vZGUtPm5w YXJ0cyk7CisJV1JJVEVfSU5ERVhfQVJSQVkocnRpX21hcCwgbm9kZS0+bnBhcnRzKTsKIAlXUklU RV9OT0RFX0ZJRUxEKGluaXRpYWxfcHJ1bmluZ19zdGVwcyk7CiAJV1JJVEVfTk9ERV9GSUVMRChl eGVjX3BydW5pbmdfc3RlcHMpOwogCVdSSVRFX0JJVE1BUFNFVF9GSUVMRChleGVjcGFyYW1pZHMp OwpAQCAtMjQyMCw2ICsyNDI2LDkgQEAgX291dFBsYW5uZXJHbG9iYWwoU3RyaW5nSW5mbyBzdHIs IGNvbnN0IFBsYW5uZXJHbG9iYWwgKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChmaW5hbHJvd21h cmtzKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJlc3VsdFJlbGF0aW9ucyk7CiAJV1JJVEVfTk9ERV9G SUVMRChhcHBlbmRSZWxhdGlvbnMpOworCVdSSVRFX05PREVfRklFTEQocGFydFBydW5lSW5mb3Mp OworCVdSSVRFX0JPT0xfRklFTEQoY29udGFpbnNJbml0aWFsUHJ1bmluZyk7CisJV1JJVEVfQklU TUFQU0VUX0ZJRUxEKG1pbkxvY2tSZWxpZHMpOwogCVdSSVRFX05PREVfRklFTEQocmVsYXRpb25P aWRzKTsKIAlXUklURV9OT0RFX0ZJRUxEKGludmFsSXRlbXMpOwogCVdSSVRFX05PREVfRklFTEQo cGFyYW1FeGVjVHlwZXMpOwpAQCAtMjQ4Nyw2ICsyNDk2LDcgQEAgX291dFBsYW5uZXJJbmZvKFN0 cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVySW5mbyAqbm9kZSkKIAlXUklURV9CSVRNQVBTRVRf RklFTEQoY3VyT3V0ZXJSZWxzKTsKIAlXUklURV9OT0RFX0ZJRUxEKGN1ck91dGVyUGFyYW1zKTsK IAlXUklURV9CT09MX0ZJRUxEKHBhcnRDb2xzVXBkYXRlZCk7CisJV1JJVEVfTk9ERV9GSUVMRChw YXJ0UHJ1bmVJbmZvcyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yODQwLDYgKzI4NTAsMjEgQEAg X291dEV4dGVuc2libGVOb2RlKFN0cmluZ0luZm8gc3RyLCBjb25zdCBFeHRlbnNpYmxlTm9kZSAq bm9kZSkKIAltZXRob2RzLT5ub2RlT3V0KHN0ciwgbm9kZSk7CiB9CiAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgorICoKKyAqCVN0dWZmIGZyb20gZXhlY25vZGVzLmgKKyAqCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKK3N0YXRpYyB2b2lkCitfb3V0UGFydGl0aW9uUHJ1bmVSZXN1bHQoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IFBhcnRpdGlvblBydW5lUmVzdWx0ICpub2RlKQoreworCVdSSVRFX05P REVfVFlQRSgiUEFSVElUSU9OUFJVTkVSRVNVTFQiKTsKKworCVdSSVRFX0JJVE1BUFNFVF9GSUVM RChzY2FuX2xlYWZwYXJ0X3J0aXMpOworCVdSSVRFX05PREVfRklFTEQodmFsaWRfc3VicGxhbl9v ZmZzX2xpc3QpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKglTdHVmZiBmcm9t IHBhcnNlbm9kZXMuaC4KQEAgLTQ3NDgsNiArNDc3MywxMyBAQCBvdXROb2RlKFN0cmluZ0luZm8g c3RyLCBjb25zdCB2b2lkICpvYmopCiAJCQkJX291dEpzb25UYWJsZVNpYmxpbmcoc3RyLCBvYmop OwogCQkJCWJyZWFrOwogCisJCQkJLyoKKwkJCQkgKiBFWEVDVVRJT04gTk9ERVMKKwkJCQkgKi8K KwkJCWNhc2UgVF9QYXJ0aXRpb25QcnVuZVJlc3VsdDoKKwkJCQlfb3V0UGFydGl0aW9uUHJ1bmVS ZXN1bHQoc3RyLCBvYmopOworCQkJCWJyZWFrOworCiAJCQlkZWZhdWx0OgogCiAJCQkJLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9k ZXMvcmVhZGZ1bmNzLmMKaW5kZXggNDhmNzIxNmM5ZS4uYWNjZTVlMjljYyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVh ZGZ1bmNzLmMKQEAgLTE2NCw2ICsxNjQsMTEgQEAKIAl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3Ro KTsJCS8qIHNraXAgOmZsZG5hbWUgKi8gXAogCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFkSW50 Q29scyhsZW4pCiAKKy8qIFJlYWQgYW4gSW5kZXggYXJyYXkgKi8KKyNkZWZpbmUgUkVBRF9JTkRF WF9BUlJBWShmbGRuYW1lLCBsZW4pIFwKKwl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsJCS8q IHNraXAgOmZsZG5hbWUgKi8gXAorCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFkSW5kZXhDb2xz KGxlbikKKwogLyogUmVhZCBhIGJvb2wgYXJyYXkgKi8KICNkZWZpbmUgUkVBRF9CT09MX0FSUkFZ KGZsZG5hbWUsIGxlbikgXAogCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOwkJLyogc2tpcCA6 ZmxkbmFtZSAqLyBcCkBAIC0xODE0LDcgKzE4MTksMTAgQEAgX3JlYWRQbGFubmVkU3RtdCh2b2lk KQogCVJFQURfQk9PTF9GSUVMRChwYXJhbGxlbE1vZGVOZWVkZWQpOwogCVJFQURfSU5UX0ZJRUxE KGppdEZsYWdzKTsKIAlSRUFEX05PREVfRklFTEQocGxhblRyZWUpOworCVJFQURfTk9ERV9GSUVM RChwYXJ0UHJ1bmVJbmZvcyk7CisJUkVBRF9CT09MX0ZJRUxEKGNvbnRhaW5zSW5pdGlhbFBydW5p bmcpOwogCVJFQURfTk9ERV9GSUVMRChydGFibGUpOworCVJFQURfQklUTUFQU0VUX0ZJRUxEKG1p bkxvY2tSZWxpZHMpOwogCVJFQURfTk9ERV9GSUVMRChyZXN1bHRSZWxhdGlvbnMpOwogCVJFQURf Tk9ERV9GSUVMRChhcHBlbmRSZWxhdGlvbnMpOwogCVJFQURfTk9ERV9GSUVMRChzdWJwbGFucyk7 CkBAIC0xOTQ2LDcgKzE5NTQsNyBAQCBfcmVhZEFwcGVuZCh2b2lkKQogCVJFQURfTk9ERV9GSUVM RChhcHBlbmRwbGFucyk7CiAJUkVBRF9JTlRfRklFTEQobmFzeW5jcGxhbnMpOwogCVJFQURfSU5U X0ZJRUxEKGZpcnN0X3BhcnRpYWxfcGxhbik7Ci0JUkVBRF9OT0RFX0ZJRUxEKHBhcnRfcHJ1bmVf aW5mbyk7CisJUkVBRF9JTlRfRklFTEQocGFydF9wcnVuZV9pbmRleCk7CiAKIAlSRUFEX0RPTkUo KTsKIH0KQEAgLTE5NjgsNyArMTk3Niw3IEBAIF9yZWFkTWVyZ2VBcHBlbmQodm9pZCkKIAlSRUFE X09JRF9BUlJBWShzb3J0T3BlcmF0b3JzLCBsb2NhbF9ub2RlLT5udW1Db2xzKTsKIAlSRUFEX09J RF9BUlJBWShjb2xsYXRpb25zLCBsb2NhbF9ub2RlLT5udW1Db2xzKTsKIAlSRUFEX0JPT0xfQVJS QVkobnVsbHNGaXJzdCwgbG9jYWxfbm9kZS0+bnVtQ29scyk7Ci0JUkVBRF9OT0RFX0ZJRUxEKHBh cnRfcHJ1bmVfaW5mbyk7CisJUkVBRF9JTlRfRklFTEQocGFydF9wcnVuZV9pbmRleCk7CiAKIAlS RUFEX0RPTkUoKTsKIH0KQEAgLTI3NjMsNiArMjc3MSw4IEBAIF9yZWFkUGFydGl0aW9uUHJ1bmVJ bmZvKHZvaWQpCiAJUkVBRF9MT0NBTFMoUGFydGl0aW9uUHJ1bmVJbmZvKTsKIAogCVJFQURfTk9E RV9GSUVMRChwcnVuZV9pbmZvcyk7CisJUkVBRF9CT09MX0ZJRUxEKG5lZWRzX2luaXRfcHJ1bmlu Zyk7CisJUkVBRF9CT09MX0ZJRUxEKG5lZWRzX2V4ZWNfcHJ1bmluZyk7CiAJUkVBRF9CSVRNQVBT RVRfRklFTEQob3RoZXJfc3VicGxhbnMpOwogCiAJUkVBRF9ET05FKCk7CkBAIC0yNzc5LDYgKzI3 ODksNyBAQCBfcmVhZFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvKHZvaWQpCiAJUkVBRF9JTlRfQVJS QVkoc3VicGxhbl9tYXAsIGxvY2FsX25vZGUtPm5wYXJ0cyk7CiAJUkVBRF9JTlRfQVJSQVkoc3Vi cGFydF9tYXAsIGxvY2FsX25vZGUtPm5wYXJ0cyk7CiAJUkVBRF9PSURfQVJSQVkocmVsaWRfbWFw LCBsb2NhbF9ub2RlLT5ucGFydHMpOworCVJFQURfSU5ERVhfQVJSQVkocnRpX21hcCwgbG9jYWxf bm9kZS0+bnBhcnRzKTsKIAlSRUFEX05PREVfRklFTEQoaW5pdGlhbF9wcnVuaW5nX3N0ZXBzKTsK IAlSRUFEX05PREVfRklFTEQoZXhlY19wcnVuaW5nX3N0ZXBzKTsKIAlSRUFEX0JJVE1BUFNFVF9G SUVMRChleGVjcGFyYW1pZHMpOwpAQCAtMjkzMiw2ICsyOTQzLDIxIEBAIF9yZWFkUGFydGl0aW9u UmFuZ2VEYXR1bSh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisKKy8qCisgKiBfcmVhZFBhcnRp dGlvblBydW5lUmVzdWx0CisgKi8KK3N0YXRpYyBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqCitfcmVh ZFBhcnRpdGlvblBydW5lUmVzdWx0KHZvaWQpCit7CisJUkVBRF9MT0NBTFMoUGFydGl0aW9uUHJ1 bmVSZXN1bHQpOworCisJUkVBRF9CSVRNQVBTRVRfRklFTEQoc2Nhbl9sZWFmcGFydF9ydGlzKTsK KwlSRUFEX05PREVfRklFTEQodmFsaWRfc3VicGxhbl9vZmZzX2xpc3QpOworCisJUkVBRF9ET05F KCk7Cit9CisKIC8qCiAgKiBwYXJzZU5vZGVTdHJpbmcKICAqCkBAIC0zMjI5LDYgKzMyNTUsOCBA QCBwYXJzZU5vZGVTdHJpbmcodm9pZCkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRKc29uVGFibGVQ YXJlbnQoKTsKIAllbHNlIGlmIChNQVRDSCgiSlNPTlRBQlNOT0RFIiwgMTIpKQogCQlyZXR1cm5f dmFsdWUgPSBfcmVhZEpzb25UYWJsZVNpYmxpbmcoKTsKKwllbHNlIGlmIChNQVRDSCgiUEFSVElU SU9OUFJVTkVSRVNVTFQiLCAyMCkpCisJCXJldHVybl92YWx1ZSA9IF9yZWFkUGFydGl0aW9uUHJ1 bmVSZXN1bHQoKTsKIAllbHNlCiAJewogCQllbG9nKEVSUk9SLCAiYmFkbHkgZm9ybWF0dGVkIG5v ZGUgc3RyaW5nIFwiJS4zMnNcIi4uLiIsIHRva2VuKTsKQEAgLTMzNzIsNiArMzQwMCwzMCBAQCBy ZWFkSW50Q29scyhpbnQgbnVtQ29scykKIAlyZXR1cm4gaW50X3ZhbHM7CiB9CiAKKy8qCisgKiBy ZWFkSW5kZXhDb2xzCisgKi8KK0luZGV4ICoKK3JlYWRJbmRleENvbHMoaW50IG51bUNvbHMpCit7 CisJaW50CQkJdG9rZW5MZW5ndGgsCisJCQkJaTsKKwljb25zdCBjaGFyICp0b2tlbjsKKwlJbmRl eAkgICAqaW5kZXhfdmFsczsKKworCWlmIChudW1Db2xzIDw9IDApCisJCXJldHVybiBOVUxMOwor CisJaW5kZXhfdmFscyA9IChJbmRleCAqKSBwYWxsb2MobnVtQ29scyAqIHNpemVvZihJbmRleCkp OworCWZvciAoaSA9IDA7IGkgPCBudW1Db2xzOyBpKyspCisJeworCQl0b2tlbiA9IHBnX3N0cnRv aygmdG9rZW5MZW5ndGgpOworCQlpbmRleF92YWxzW2ldID0gYXRvdWkodG9rZW4pOworCX0KKwor CXJldHVybiBpbmRleF92YWxzOworfQorCiAvKgogICogcmVhZEJvb2xDb2xzCiAgKi8KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCA1MTU5MWJiODEyLi40NTNmNzIw NzU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xMzY2LDcg KzEzNjYsMTUgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBBcHBlbmRQ YXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFuLT5hcHBlbmRwbGFucyA9IHN1YnBsYW5z OwogCXBsYW4tPm5hc3luY3BsYW5zID0gbmFzeW5jcGxhbnM7CiAJcGxhbi0+Zmlyc3RfcGFydGlh bF9wbGFuID0gYmVzdF9wYXRoLT5maXJzdF9wYXJ0aWFsX3BhdGg7Ci0JcGxhbi0+cGFydF9wcnVu ZV9pbmZvID0gcGFydHBydW5laW5mbzsKKworCWlmIChwYXJ0cHJ1bmVpbmZvKQorCXsKKwkJcm9v dC0+cGFydFBydW5lSW5mb3MgPSBsYXBwZW5kKHJvb3QtPnBhcnRQcnVuZUluZm9zLCBwYXJ0cHJ1 bmVpbmZvKTsKKwkJLyogV2lsbCBiZSB1cGRhdGVkIGxhdGVyIGluIHNldF9wbGFuX3JlZmVyZW5j ZXMoKS4gKi8KKwkJcGxhbi0+cGFydF9wcnVuZV9pbmRleCA9IGxpc3RfbGVuZ3RoKHJvb3QtPnBh cnRQcnVuZUluZm9zKSAtIDE7CisJfQorCWVsc2UKKwkJcGxhbi0+cGFydF9wcnVuZV9pbmRleCA9 IC0xOwogCiAJY29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxhbi0+cGxhbiwgKFBhdGggKikgYmVz dF9wYXRoKTsKIApAQCAtMTUyOCw3ICsxNTM2LDE1IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxh bihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJfQogCiAJ bm9kZS0+bWVyZ2VwbGFucyA9IHN1YnBsYW5zOwotCW5vZGUtPnBhcnRfcHJ1bmVfaW5mbyA9IHBh cnRwcnVuZWluZm87CisKKwlpZiAocGFydHBydW5laW5mbykKKwl7CisJCXJvb3QtPnBhcnRQcnVu ZUluZm9zID0gbGFwcGVuZChyb290LT5wYXJ0UHJ1bmVJbmZvcywgcGFydHBydW5laW5mbyk7CisJ CS8qIFdpbGwgYmUgdXBkYXRlZCBsYXRlciBpbiBzZXRfcGxhbl9yZWZlcmVuY2VzKCkuICovCisJ CW5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPSBsaXN0X2xlbmd0aChyb290LT5wYXJ0UHJ1bmVJbmZv cykgLSAxOworCX0KKwllbHNlCisJCW5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPSAtMTsKIAogCS8q CiAJICogSWYgcHJlcGFyZV9zb3J0X2Zyb21fcGF0aGtleXMgYWRkZWQgc29ydCBjb2x1bW5zLCBi dXQgd2Ugd2VyZSB0b2xkIHRvCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXgg YjI1NjljNWQwYy4uMmFhMDUxZDg2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIu YwpAQCAtNTE4LDcgKzUxOCwxMCBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPmRlcGVu ZHNPblJvbGUgPSBnbG9iLT5kZXBlbmRzT25Sb2xlOwogCXJlc3VsdC0+cGFyYWxsZWxNb2RlTmVl ZGVkID0gZ2xvYi0+cGFyYWxsZWxNb2RlTmVlZGVkOwogCXJlc3VsdC0+cGxhblRyZWUgPSB0b3Bf cGxhbjsKKwlyZXN1bHQtPnBhcnRQcnVuZUluZm9zID0gZ2xvYi0+cGFydFBydW5lSW5mb3M7CisJ cmVzdWx0LT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gZ2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1 bmluZzsKIAlyZXN1bHQtPnJ0YWJsZSA9IGdsb2ItPmZpbmFscnRhYmxlOworCXJlc3VsdC0+bWlu TG9ja1JlbGlkcyA9IGdsb2ItPm1pbkxvY2tSZWxpZHM7CiAJcmVzdWx0LT5yZXN1bHRSZWxhdGlv bnMgPSBnbG9iLT5yZXN1bHRSZWxhdGlvbnM7CiAJcmVzdWx0LT5hcHBlbmRSZWxhdGlvbnMgPSBn bG9iLT5hcHBlbmRSZWxhdGlvbnM7CiAJcmVzdWx0LT5zdWJwbGFucyA9IGdsb2ItPnN1YnBsYW5z OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IDc1MTk3MjMwODEuLmZjNjY5 ODZlMWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTI1MSw3ICsyNTEs NyBAQCBzZXRfcGxhbl9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuKQog CVBsYW4JICAgKnJlc3VsdDsKIAlQbGFubmVyR2xvYmFsICpnbG9iID0gcm9vdC0+Z2xvYjsKIAlp bnQJCQlydG9mZnNldCA9IGxpc3RfbGVuZ3RoKGdsb2ItPmZpbmFscnRhYmxlKTsKLQlMaXN0Q2Vs bCAgICpsYzsKKwlMaXN0Q2VsbCAqbGM7CiAKIAkvKgogCSAqIEFkZCBhbGwgdGhlIHF1ZXJ5J3Mg UlRFcyB0byB0aGUgZmxhdHRlbmVkIHJhbmdldGFibGUuICBUaGUgbGl2ZSBvbmVzCkBAIC0yNjAs NiArMjYwLDE2IEBAIHNldF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4g KnBsYW4pCiAJICovCiAJYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUocm9vdCwgZmFsc2UpOwogCisJ LyoKKwkgKiBBZGQgdGhlIHF1ZXJ5J3MgYWRqdXN0ZWQgcmFuZ2Ugb2YgUlQgaW5kZXhlcyB0byBn bG9iLT5taW5Mb2NrUmVsaWRzLgorCSAqIFRoZSBhZGp1c3RlZCBSVCBpbmRleGVzIG9mIHBydW5h YmxlIHJlbGF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQgZnJvbSB0aGUKKwkgKiBzZXQgYmVsb3cgd2hl cmUgUGFydGl0aW9uUHJ1bmVJbmZvcyBhcmUgcHJvY2Vzc2VkLgorCSAqLworCWdsb2ItPm1pbkxv Y2tSZWxpZHMgPQorCQlibXNfYWRkX3JhbmdlKGdsb2ItPm1pbkxvY2tSZWxpZHMsCisJCQkJCSAg cnRvZmZzZXQgKyAxLAorCQkJCQkgIHJ0b2Zmc2V0ICsgbGlzdF9sZW5ndGgocm9vdC0+cGFyc2Ut PnJ0YWJsZSkpOworCiAJLyoKIAkgKiBBZGp1c3QgUlQgaW5kZXhlcyBvZiBQbGFuUm93TWFya3Mg YW5kIGFkZCB0byBmaW5hbCByb3dtYXJrcyBsaXN0CiAJICovCkBAIC0zMzgsNiArMzQ4LDU2IEBA IHNldF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJCX0K IAl9CiAKKwkvKiBBbHNvIGZpeCB1cCB0aGUgaW5mb3JtYXRpb24gaW4gUGFydGl0aW9uUHJ1bmVJ bmZvcy4gKi8KKwlmb3JlYWNoIChsYywgcm9vdC0+cGFydFBydW5lSW5mb3MpCisJeworCQlQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdChsYyk7CisJCUJpdG1hcHNldCAqbGVh ZnBhcnRfcnRpcyA9IE5VTEw7CisJCUxpc3RDZWxsICAqbDsKKworCQlmb3JlYWNoKGwsIHBydW5l aW5mby0+cHJ1bmVfaW5mb3MpCisJCXsKKwkJCUxpc3QJICAgKnBydW5lX2luZm9zID0gbGZpcnN0 KGwpOworCQkJTGlzdENlbGwgICAqbDI7CisKKwkJCWZvcmVhY2gobDIsIHBydW5lX2luZm9zKQor CQkJeworCQkJCVBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxmaXJzdChsMik7CisJ CQkJaW50CQlpOworCisJCQkJLyogUlQgaW5kZXggb2YgdGhlIHBhcnRpdGlvbmUgdGFibGUuICov CisJCQkJcGluZm8tPnJ0aW5kZXggKz0gcnRvZmZzZXQ7CisKKwkJCQkvKiBBbmQgYWxzbyB0aG9z ZSBvZiB0aGUgbGVhZiBwYXJ0aXRpb25zLiAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBwaW5mby0+ bnBhcnRzOyBpKyspCisJCQkJeworCQkJCQlpZiAocGluZm8tPnJ0aV9tYXBbaV0gPiAwKQorCQkJ CQl7CisJCQkJCQlwaW5mby0+cnRpX21hcFtpXSArPSBydG9mZnNldDsKKwkJCQkJCWxlYWZwYXJ0 X3J0aXMgPSBibXNfYWRkX21lbWJlcihsZWFmcGFydF9ydGlzLAorCQkJCQkJCQkJCQkJCSAgIHBp bmZvLT5ydGlfbWFwW2ldKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChwcnVu ZWluZm8tPm5lZWRzX2luaXRfcHJ1bmluZykKKwkJeworCQkJZ2xvYi0+Y29udGFpbnNJbml0aWFs UHJ1bmluZyA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBEZWxldGUgdGhlIGxlYWYgcGFydGl0aW9u IFJUSXMgZnJvbSB0aGUgZ2xvYmFsIHNldCBvZiByZWxhdGlvbnMKKwkJCSAqIHRvIGJlIGxvY2tl ZCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwbGFuLiAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKQorCQkJ ICogd2lsbCBmaW5kIHRoZSBvbmVzIHRvIGFkZCB0byB0aGUgc2V0IGFmdGVyIHBlcmZvcm1pbmcg aW5pdGlhbAorCQkJICogcHJ1bmluZy4KKwkJCSAqLworCQkJZ2xvYi0+bWluTG9ja1JlbGlkcyA9 IGJtc19kZWxfbWVtYmVycyhnbG9iLT5taW5Mb2NrUmVsaWRzLAorCQkJCQkJCQkJCQkJICBsZWFm cGFydF9ydGlzKTsKKwkJfQorCisJCWdsb2ItPnBhcnRQcnVuZUluZm9zID0gbGFwcGVuZChnbG9i LT5wYXJ0UHJ1bmVJbmZvcywgcHJ1bmVpbmZvKTsKKwl9CisKIAlyZXR1cm4gcmVzdWx0OwogfQog CkBAIC0xNjEwLDIxICsxNjcwLDEyIEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5m byAqcm9vdCwKIAogCWFwbGFuLT5hcHByZWxpZHMgPSBvZmZzZXRfcmVsaWRfc2V0KGFwbGFuLT5h cHByZWxpZHMsIHJ0b2Zmc2V0KTsKIAotCWlmIChhcGxhbi0+cGFydF9wcnVuZV9pbmZvKQotCXsK LQkJZm9yZWFjaChsLCBhcGxhbi0+cGFydF9wcnVuZV9pbmZvLT5wcnVuZV9pbmZvcykKLQkJewot CQkJTGlzdAkgICAqcHJ1bmVfaW5mb3MgPSBsZmlyc3QobCk7Ci0JCQlMaXN0Q2VsbCAgICpsMjsK LQotCQkJZm9yZWFjaChsMiwgcHJ1bmVfaW5mb3MpCi0JCQl7Ci0JCQkJUGFydGl0aW9uZWRSZWxQ cnVuZUluZm8gKnBpbmZvID0gbGZpcnN0KGwyKTsKLQotCQkJCXBpbmZvLT5ydGluZGV4ICs9IHJ0 b2Zmc2V0OwotCQkJfQotCQl9Ci0JfQorCS8qCisJICogUGFydGl0aW9uUHJ1bmVJbmZvcyB3aWxs IGJlIGFkZGVkIHRvIGEgbGlzdCBpbiBQbGFubmVyR2xvYmFsLCBzbyB1cGRhdGUKKwkgKiB0aGUg aW5kZXguCisJICovCisJaWYgKGFwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJCWFwbGFu LT5wYXJ0X3BydW5lX2luZGV4ICs9IGxpc3RfbGVuZ3RoKHJvb3QtPmdsb2ItPnBhcnRQcnVuZUlu Zm9zKTsKIAogCS8qIFdlIGRvbid0IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBvciByaWdo dHRyZWUgLi4uICovCiAJQXNzZXJ0KGFwbGFuLT5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwpAQCAt MTY4MiwyMSArMTczMywxMiBAQCBzZXRfbWVyZ2VhcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5m byAqcm9vdCwKIAogCW1wbGFuLT5hcHByZWxpZHMgPSBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5h cHByZWxpZHMsIHJ0b2Zmc2V0KTsKIAotCWlmIChtcGxhbi0+cGFydF9wcnVuZV9pbmZvKQotCXsK LQkJZm9yZWFjaChsLCBtcGxhbi0+cGFydF9wcnVuZV9pbmZvLT5wcnVuZV9pbmZvcykKLQkJewot CQkJTGlzdAkgICAqcHJ1bmVfaW5mb3MgPSBsZmlyc3QobCk7Ci0JCQlMaXN0Q2VsbCAgICpsMjsK LQotCQkJZm9yZWFjaChsMiwgcHJ1bmVfaW5mb3MpCi0JCQl7Ci0JCQkJUGFydGl0aW9uZWRSZWxQ cnVuZUluZm8gKnBpbmZvID0gbGZpcnN0KGwyKTsKLQotCQkJCXBpbmZvLT5ydGluZGV4ICs9IHJ0 b2Zmc2V0OwotCQkJfQotCQl9Ci0JfQorCS8qCisJICogUGFydGl0aW9uUHJ1bmVJbmZvcyB3aWxs IGJlIGFkZGVkIHRvIGEgbGlzdCBpbiBQbGFubmVyR2xvYmFsLCBzbyB1cGRhdGUKKwkgKiB0aGUg aW5kZXguCisJICovCisJaWYgKG1wbGFuLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJCW1wbGFu LT5wYXJ0X3BydW5lX2luZGV4ICs9IGxpc3RfbGVuZ3RoKHJvb3QtPmdsb2ItPnBhcnRQcnVuZUlu Zm9zKTsKIAogCS8qIFdlIGRvbid0IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBvciByaWdo dHRyZWUgLi4uICovCiAJQXNzZXJ0KG1wbGFuLT5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jIGIvc3JjL2JhY2tl bmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCmluZGV4IDlkM2MwNWFlZDMuLjBlYWZmMTVlZDAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYworKysgYi9z cmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKQEAgLTE0NCw3ICsxNDQsOSBAQCBz dGF0aWMgTGlzdCAqbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJICAgTGlzdCAqcHJ1bmVxdWFsLAogCQkJCQkJCQkJCSAgIEJpdG1hcHNl dCAqcGFydHJlbGlkcywKIAkJCQkJCQkJCQkgICBpbnQgKnJlbGlkX3N1YnBsYW5fbWFwLAotCQkJ CQkJCQkJCSAgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucyk7CisJCQkJCQkJCQkJICAgQml0 bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCQkJCSAgIGJvb2wgKm5lZWRzX2luaXRf cHJ1bmluZywKKwkJCQkJCQkJCQkgICBib29sICpuZWVkc19leGVjX3BydW5pbmcpOwogc3RhdGlj IHZvaWQgZ2VuX3BhcnRwcnVuZV9zdGVwcyhSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVzZXMs CiAJCQkJCQkJCVBhcnRDbGF1c2VUYXJnZXQgdGFyZ2V0LAogCQkJCQkJCQlHZW5lcmF0ZVBydW5p bmdTdGVwc0NvbnRleHQgKmNvbnRleHQpOwpAQCAtMjMwLDYgKzIzMiw4IEBAIG1ha2VfcGFydGl0 aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAog CWludAkJICAgKnJlbGlkX3N1YnBsYW5fbWFwOwogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7 CisJYm9vbAkJbmVlZHNfaW5pdF9wcnVuaW5nID0gZmFsc2U7CisJYm9vbAkJbmVlZHNfZXhlY19w cnVuaW5nID0gZmFsc2U7CiAKIAkvKgogCSAqIFNjYW4gdGhlIHN1YnBhdGhzIHRvIHNlZSB3aGlj aCBvbmVzIGFyZSBzY2FucyBvZiBwYXJ0aXRpb24gY2hpbGQKQEAgLTMwOSwxMiArMzEzLDE2IEBA IG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cGFyZW50cmVsLAogCQlCaXRtYXBzZXQgICpwYXJ0cmVsaWRzID0gKEJpdG1hcHNldCAqKSBsZmly c3QobGMpOwogCQlMaXN0CSAgICpwaW5mb2xpc3Q7CiAJCUJpdG1hcHNldCAgKm1hdGNoZWRzdWJw bGFucyA9IE5VTEw7CisJCWJvb2wJCXBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nOworCQlib29s CQlwYXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCQlwaW5mb2xpc3QgPSBtYWtlX3BhcnRp dGlvbmVkcmVsX3BydW5laW5mbyhyb290LCBwYXJlbnRyZWwsCiAJCQkJCQkJCQkJCQkgIHBydW5l cXVhbCwKIAkJCQkJCQkJCQkJCSAgcGFydHJlbGlkcywKIAkJCQkJCQkJCQkJCSAgcmVsaWRfc3Vi cGxhbl9tYXAsCi0JCQkJCQkJCQkJCQkgICZtYXRjaGVkc3VicGxhbnMpOworCQkJCQkJCQkJCQkJ ICAmbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCQkJCQkJICAmcGFydHJlbF9uZWVkc19pbml0X3By dW5pbmcsCisJCQkJCQkJCQkJCQkgICZwYXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZyk7CiAKIAkJ LyogV2hlbiBwcnVuaW5nIGlzIHBvc3NpYmxlLCByZWNvcmQgdGhlIG1hdGNoZWQgc3VicGxhbnMg Ki8KIAkJaWYgKHBpbmZvbGlzdCAhPSBOSUwpCkBAIC0zMjMsNiArMzMxLDEwIEBAIG1ha2VfcGFy dGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVs LAogCQkJYWxsbWF0Y2hlZHN1YnBsYW5zID0gYm1zX2pvaW4obWF0Y2hlZHN1YnBsYW5zLAogCQkJ CQkJCQkJCSAgYWxsbWF0Y2hlZHN1YnBsYW5zKTsKIAkJfQorCQlpZiAoIW5lZWRzX2luaXRfcHJ1 bmluZykKKwkJCW5lZWRzX2luaXRfcHJ1bmluZyA9IHBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5n OworCQlpZiAoIW5lZWRzX2V4ZWNfcHJ1bmluZykKKwkJCW5lZWRzX2V4ZWNfcHJ1bmluZyA9IHBh cnRyZWxfbmVlZHNfZXhlY19wcnVuaW5nOwogCX0KIAogCXBmcmVlKHJlbGlkX3N1YnBsYW5fbWFw KTsKQEAgLTMzNyw2ICszNDksOCBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkvKiBFbHNlIGJ1aWxkIHRoZSByZXN1 bHQgZGF0YSBzdHJ1Y3R1cmUgKi8KIAlwcnVuZWluZm8gPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVu ZUluZm8pOwogCXBydW5laW5mby0+cHJ1bmVfaW5mb3MgPSBwcnVuZXJlbGluZm9zOworCXBydW5l aW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nID0gbmVlZHNfaW5pdF9wcnVuaW5nOworCXBydW5laW5m by0+bmVlZHNfZXhlY19wcnVuaW5nID0gbmVlZHNfZXhlY19wcnVuaW5nOwogCiAJLyoKIAkgKiBT b21lIHN1YnBsYW5zIG1heSBub3QgYmVsb25nIHRvIGFueSBvZiB0aGUgaWRlbnRpZmllZCBwYXJ0 aXRpb25lZCByZWxzLgpAQCAtNDM1LDEzICs0NDksMTggQEAgYWRkX3BhcnRfcmVsaWRzKExpc3Qg KmFsbHBhcnRyZWxpZHMsIEJpdG1hcHNldCAqcGFydHJlbGlkcykKICAqIElmIHdlIGNhbm5vdCBm aW5kIGFueSB1c2VmdWwgcnVuLXRpbWUgcHJ1bmluZyBzdGVwcywgcmV0dXJuIE5JTC4KICAqIEhv d2V2ZXIsIG9uIHN1Y2Nlc3MsIGVhY2ggcmVsIGlkZW50aWZpZWQgaW4gcGFydHJlbGlkcyB3aWxs IGhhdmUKICAqIGFuIGVsZW1lbnQgaW4gdGhlIHJlc3VsdCBsaXN0LCBldmVuIGlmIHNvbWUgb2Yg dGhlbSBhcmUgdXNlbGVzcy4KKyAqICpuZWVkc19pbml0X3BydW5pbmcgYW5kICpuZWVkc19leGVj X3BydW5pbmcgYXJlIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICogcmV0dXJuZWQgUGFydGl0 aW9uZWRSZWxQcnVuZUluZm9zIGNvbnRhaW5zIHBydW5pbmcgc3RlcHMgdGhhdCBjYW4gYmUKKyAq IHBlcmZvcm1lZCBiZWZvcmUgYW5kIGFmdGVyIGV4ZWN1dGlvbiBiZWdpbnMsIHJlc3BlY3RpdmVs eS4KICAqLwogc3RhdGljIExpc3QgKgogbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJCQkJCQkgIExpc3QgKnBy dW5lcXVhbCwKIAkJCQkJCQkgIEJpdG1hcHNldCAqcGFydHJlbGlkcywKIAkJCQkJCQkgIGludCAq cmVsaWRfc3VicGxhbl9tYXAsCi0JCQkJCQkJICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxhbnMp CisJCQkJCQkJICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxhbnMsCisJCQkJCQkJICBib29sICpu ZWVkc19pbml0X3BydW5pbmcsCisJCQkJCQkJICBib29sICpuZWVkc19leGVjX3BydW5pbmcpCiB7 CiAJUmVsT3B0SW5mbyAqdGFyZ2V0cGFydCA9IE5VTEw7CiAJTGlzdAkgICAqcGluZm9saXN0ID0g TklMOwpAQCAtNDUyLDYgKzQ3MSwxMCBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCWludAkJCXJ0aTsKIAlp bnQJCQlpOwogCisJLyogV2lsbCBmaW5kIG91dCBiZWxvdy4gKi8KKwkqbmVlZHNfaW5pdF9wcnVu aW5nID0gZmFsc2U7CisJKm5lZWRzX2V4ZWNfcHJ1bmluZyA9IGZhbHNlOworCiAJLyoKIAkgKiBF eGFtaW5lIGVhY2ggcGFydGl0aW9uZWQgcmVsLCBjb25zdHJ1Y3RpbmcgYSB0ZW1wb3JhcnkgYXJy YXkgdG8gbWFwCiAJICogZnJvbSBwbGFubmVyIHJlbGlkcyB0byBpbmRleCBvZiB0aGUgcGFydGl0 aW9uZWQgcmVsLCBhbmQgYnVpbGRpbmcgYQpAQCAtNTM5LDYgKzU2Miw5IEBAIG1ha2VfcGFydGl0 aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRy ZWwsCiAJCSAqIGV4ZWN1dG9yIHBlci1zY2FuIHBydW5pbmcgc3RlcHMuICBUaGlzIGZpcnN0IHBh c3MgY3JlYXRlcyBzdGFydHVwCiAJCSAqIHBydW5pbmcgc3RlcHMgYW5kIGRldGVjdHMgd2hldGhl ciB0aGVyZSdzIGFueSBwb3NzaWJseS11c2VmdWwgcXVhbHMKIAkJICogdGhhdCB3b3VsZCByZXF1 aXJlIHBlci1zY2FuIHBydW5pbmcuCisJCSAqCisJCSAqIEluIHRoZSBmaXJzdCBwYXNzLCB3ZSBu b3RlIHdoZXRoZXIgdGhlIDJuZCBwYXNzIGlzIG5lY2Vzc2FyeSBieQorCQkgKiBieSBub3Rpbmcg dGhlIHByZXNlbmNlIG9mIEVYRUMgcGFyYW1ldGVycy4KIAkJICovCiAJCWdlbl9wYXJ0cHJ1bmVf c3RlcHMoc3VicGFydCwgcGFydHBydW5lcXVhbCwgUEFSVFRBUkdFVF9JTklUSUFMLAogCQkJCQkJ CSZjb250ZXh0KTsKQEAgLTYxMyw2ICs2MzksMTEgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVu ZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJcGluZm8t PmV4ZWNwYXJhbWlkcyA9IGV4ZWNwYXJhbWlkczsKIAkJLyogUmVtYWluaW5nIGZpZWxkcyB3aWxs IGJlIGZpbGxlZCBpbiB0aGUgbmV4dCBsb29wICovCiAKKwkJaWYgKCEqbmVlZHNfaW5pdF9wcnVu aW5nKQorCQkJKm5lZWRzX2luaXRfcHJ1bmluZyA9IChpbml0aWFsX3BydW5pbmdfc3RlcHMgIT0g TklMKTsKKwkJaWYgKCEqbmVlZHNfZXhlY19wcnVuaW5nKQorCQkJKm5lZWRzX2V4ZWNfcHJ1bmlu ZyA9IChleGVjX3BydW5pbmdfc3RlcHMgIT0gTklMKTsKKwogCQlwaW5mb2xpc3QgPSBsYXBwZW5k KHBpbmZvbGlzdCwgcGluZm8pOwogCX0KIApAQCAtNjQwLDYgKzY3MSw3IEBAIG1ha2VfcGFydGl0 aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRy ZWwsCiAJCWludAkJICAgKnN1YnBsYW5fbWFwOwogCQlpbnQJCSAgICpzdWJwYXJ0X21hcDsKIAkJ T2lkCQkgICAqcmVsaWRfbWFwOworCQlJbmRleAkgICAqcnRpX21hcDsKIAogCQkvKgogCQkgKiBD b25zdHJ1Y3QgdGhlIHN1YnBsYW4gYW5kIHN1YnBhcnQgbWFwcyBmb3IgdGhpcyBwYXJ0aXRpb25p bmcgbGV2ZWwuCkBAIC02NTIsNiArNjg0LDcgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWlu Zm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJc3VicGFydF9t YXAgPSAoaW50ICopIHBhbGxvYyhucGFydHMgKiBzaXplb2YoaW50KSk7CiAJCW1lbXNldChzdWJw YXJ0X21hcCwgLTEsIG5wYXJ0cyAqIHNpemVvZihpbnQpKTsKIAkJcmVsaWRfbWFwID0gKE9pZCAq KSBwYWxsb2MwKG5wYXJ0cyAqIHNpemVvZihPaWQpKTsKKwkJcnRpX21hcCA9IChJbmRleCAqKSBw YWxsb2MwKG5wYXJ0cyAqIHNpemVvZihJbmRleCkpOwogCQlwcmVzZW50X3BhcnRzID0gTlVMTDsK IAogCQlpID0gLTE7CkBAIC02NjYsNiArNjk5LDcgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVu ZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJCXN1YnBs YW5fbWFwW2ldID0gc3VicGxhbmlkeCA9IHJlbGlkX3N1YnBsYW5fbWFwW3BhcnRyZWwtPnJlbGlk XSAtIDE7CiAJCQlzdWJwYXJ0X21hcFtpXSA9IHN1YnBhcnRpZHggPSByZWxpZF9zdWJwYXJ0X21h cFtwYXJ0cmVsLT5yZWxpZF0gLSAxOwogCQkJcmVsaWRfbWFwW2ldID0gcGxhbm5lcl9ydF9mZXRj aChwYXJ0cmVsLT5yZWxpZCwgcm9vdCktPnJlbGlkOworCQkJcnRpX21hcFtpXSA9IHBhcnRyZWwt PnJlbGlkOwogCQkJaWYgKHN1YnBsYW5pZHggPj0gMCkKIAkJCXsKIAkJCQlwcmVzZW50X3BhcnRz ID0gYm1zX2FkZF9tZW1iZXIocHJlc2VudF9wYXJ0cywgaSk7CkBAIC02OTAsNiArNzI0LDcgQEAg bWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnBhcmVudHJlbCwKIAkJcGluZm8tPnN1YnBsYW5fbWFwID0gc3VicGxhbl9tYXA7CiAJCXBp bmZvLT5zdWJwYXJ0X21hcCA9IHN1YnBhcnRfbWFwOwogCQlwaW5mby0+cmVsaWRfbWFwID0gcmVs aWRfbWFwOworCQlwaW5mby0+cnRpX21hcCA9IHJ0aV9tYXA7CiAJfQogCiAJcGZyZWUocmVsaWRf c3VicGFydF9tYXApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKaW5kZXggNWFhNWEzNTBmMy4uMTYzYmE5NTZjNCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYworKysgYi9zcmMvYmFja2VuZC90Y29w L3BxdWVyeS5jCkBAIC0zNSw3ICszNSw3IEBACiBQb3J0YWwJCUFjdGl2ZVBvcnRhbCA9IE5VTEw7 CiAKIAotc3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorc3RhdGlj IHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLCBQYXJ0aXRpb25QcnVuZVJlc3Vs dCAqcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJ CQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVy eUVudiwKQEAgLTY1LDYgKzY1LDcgQEAgc3RhdGljIHZvaWQgRG9Qb3J0YWxSZXdpbmQoUG9ydGFs IHBvcnRhbCk7CiAgKi8KIFF1ZXJ5RGVzYyAqCiBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LAorCQkJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3Vs dCwKIAkJCQljb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAog CQkJCVNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCkBAIC03Nyw2ICs3OCw4IEBAIENyZWF0 ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCiAKIAlxZC0+b3BlcmF0aW9uID0g cGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlOwkvKiBvcGVyYXRpb24gKi8KIAlxZC0+cGxhbm5lZHN0 bXQgPSBwbGFubmVkc3RtdDsJLyogcGxhbiAqLworCXFkLT5wYXJ0X3BydW5lX3Jlc3VsdCA9IHBh cnRfcHJ1bmVfcmVzdWx0OwkvKiBFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcoKQorCQkJCQkJCQkJ CQkJICogb3V0cHV0IGZvciBwbGFuICovCiAJcWQtPnNvdXJjZVRleHQgPSBzb3VyY2VUZXh0Owkv KiBxdWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hv dCk7CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sgc25hcHNob3QgKi8KQEAgLTEyMiw2ICsx MjUsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKgkJUE9SVEFMX09ORV9S RVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFsCiAgKgogICoJcGxhbjogdGhl IHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglwYXJ0X3BydW5lX3Jlc3VsdDogRXhlY3V0b3JE b0luaXRpYWxQcnVuaW5nKCkgb3V0cHV0IGZvciB0aGUgcGxhbiB0cmVlCiAgKglzb3VyY2VUZXh0 OiB0aGUgc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglwYXJhbXM6IGFueSBwYXJhbWV0ZXJz IG5lZWRlZAogICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1bHRzCkBAIC0xMzQsNiArMTM4LDcg QEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICovCiBzdGF0aWMgdm9pZAogUHJv Y2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorCQkJIFBhcnRpdGlvblBydW5lUmVzdWx0ICpw YXJ0X3BydW5lX3Jlc3VsdCwKIAkJCSBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJIFBhcmFt TGlzdEluZm8gcGFyYW1zLAogCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LApAQCAtMTQ1 LDcgKzE1MCw3IEBAIFByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwKIAkvKgogCSAqIENy ZWF0ZSB0aGUgUXVlcnlEZXNjIG9iamVjdAogCSAqLwotCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5 RGVzYyhwbGFuLCBzb3VyY2VUZXh0LAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFu LCBwYXJ0X3BydW5lX3Jlc3VsdCwgc291cmNlVGV4dCwKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNo b3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAw KTsKIApAQCAtNDkxLDggKzQ5NiwxNCBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJh bUxpc3RJbmZvIHBhcmFtcywKIAkJCQkvKgogCQkJCSAqIENyZWF0ZSBRdWVyeURlc2MgaW4gcG9y dGFsJ3MgY29udGV4dDsgZm9yIHRoZSBtb21lbnQsIHNldAogCQkJCSAqIHRoZSBkZXN0aW5hdGlv biB0byBEZXN0Tm9uZS4KKwkJCQkgKgorCQkJCSAqIFRoZXJlIGlzIG5vIFBhcnRpdGlvblBydW5l UmVzdWx0IHVubGVzcyB0aGUgUGxhbm5lZFN0bXQgaXMKKwkJCQkgKiBmcm9tIGEgQ2FjaGVkUGxh bi4KIAkJCQkgKi8KIAkJCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MobGluaXRpYWxfbm9k ZShQbGFubmVkU3RtdCwgcG9ydGFsLT5zdG10cyksCisJCQkJCQkJCQkJCXBvcnRhbC0+Y3BsYW4g PT0gTlVMTCA/IE5VTEwgOgorCQkJCQkJCQkJCQlsaW5pdGlhbF9ub2RlKFBhcnRpdGlvblBydW5l UmVzdWx0LAorCQkJCQkJCQkJCQlwb3J0YWwtPmNwbGFuLT5wYXJ0X3BydW5lX3Jlc3VsdF9saXN0 KSwKIAkJCQkJCQkJCQkJcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVT bmFwc2hvdCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCkBAIC0xMTk0LDYgKzEyMDUs OSBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogewogCWJvb2wJCWFjdGl2ZV9zbmFw c2hvdF9zZXQgPSBmYWxzZTsKIAlMaXN0Q2VsbCAgICpzdG10bGlzdF9pdGVtOworCWludAkJCWk7 CisJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRzID0gcG9ydGFsLT5jcGxhbiA9PSBOVUxMID8g TklMOgorCQkJCQkJCQkJIHBvcnRhbC0+Y3BsYW4tPnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3Q7CiAK IAkvKgogCSAqIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBEZXN0UmVtb3RlRXhlY3V0ZSwgY2hhbmdl IHRvIERlc3ROb25lLiAgVGhlCkBAIC0xMjE0LDkgKzEyMjgsMTUgQEAgUG9ydGFsUnVuTXVsdGko UG9ydGFsIHBvcnRhbCwKIAkgKiBMb29wIHRvIGhhbmRsZSB0aGUgaW5kaXZpZHVhbCBxdWVyaWVz IGdlbmVyYXRlZCBmcm9tIGEgc2luZ2xlIHBhcnNldHJlZQogCSAqIGJ5IGFuYWx5c2lzIGFuZCBy ZXdyaXRlLgogCSAqLworCWkgPSAwOwogCWZvcmVhY2goc3RtdGxpc3RfaXRlbSwgcG9ydGFsLT5z dG10cykKIAl7CiAJCVBsYW5uZWRTdG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10 LCBzdG10bGlzdF9pdGVtKTsKKwkJUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVz dWx0ID0gcGFydF9wcnVuZV9yZXN1bHRzID8KKwkJCQkJCQkJCQkJCSAgbGlzdF9udGgocGFydF9w cnVuZV9yZXN1bHRzLCBpKSA6CisJCQkJCQkJCQkJCQkgIE5VTEw7CisKKwkJaSsrOwogCiAJCS8q CiAJCSAqIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgaW4gcHJpb3IgY29tbWFuZCwgcXVpdApA QCAtMTI3NCw3ICsxMjk0LDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWlm IChwc3RtdC0+Y2FuU2V0VGFnKQogCQkJewogCQkJCS8qIHN0YXRlbWVudCBjYW4gc2V0IHRhZyBz dHJpbmcgKi8KLQkJCQlQcm9jZXNzUXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10 LCBwYXJ0X3BydW5lX3Jlc3VsdCwKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJ CSBwb3J0YWwtPnBvcnRhbFBhcmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVyeUVudiwKQEAgLTEy ODMsNyArMTMwMyw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJCQllbHNlCiAJ CQl7CiAJCQkJLyogc3RtdCBhZGRlZCBieSByZXdyaXRlIGNhbm5vdCBzZXQgdGFnICovCi0JCQkJ UHJvY2Vzc1F1ZXJ5KHBzdG10LAorCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwgcGFydF9wcnVuZV9y ZXN1bHQsCiAJCQkJCQkJIHBvcnRhbC0+c291cmNlVGV4dCwKIAkJCQkJCQkgcG9ydGFsLT5wb3J0 YWxQYXJhbXMsCiAJCQkJCQkJIHBvcnRhbC0+cXVlcnlFbnYsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Bs YW5jYWNoZS5jCmluZGV4IDRjZjZkYjUwNGYuLjIxNjQwMWJjZmIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3BsYW5jYWNoZS5jCkBAIC05OSwxNCArOTksMTYgQEAgc3RhdGljIGRsaXN0X2hlYWQgY2Fj aGVkX2V4cHJlc3Npb25fbGlzdCA9IERMSVNUX1NUQVRJQ19JTklUKGNhY2hlZF9leHByZXNzaW9u X2wKIHN0YXRpYyB2b2lkIFJlbGVhc2VHZW5lcmljUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlKTsKIHN0YXRpYyBMaXN0ICpSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYp Owotc3RhdGljIGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UpOworc3RhdGljIGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOwogc3RhdGljIENhY2hlZFBsYW4gKkJ1 aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwK IAkJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAq cXVlcnlFbnYpOworc3RhdGljIHZvaWQgQ2FjaGVkUGxhblNhdmVQYXJ0aXRpb25QcnVuZVJlc3Vs dHMoQ2FjaGVkUGxhbiAqcGxhbiwgTGlzdCAqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CiBzdGF0 aWMgYm9vbCBjaG9vc2VfY3VzdG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwK IAkJCQkJCQkgICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3VibGUgY2Fj aGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcik7CiBz dGF0aWMgUXVlcnkgKlF1ZXJ5TGlzdEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsKLXN0YXRp YyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJl KTsKK3N0YXRpYyBMaXN0ICpBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIFBh cmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOworc3RhdGljIHZvaWQgUmVsZWFzZUV4ZWN1dG9yTG9j a3MoTGlzdCAqc3RtdF9saXN0LCBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKIHN0YXRp YyB2b2lkIEFjcXVpcmVQbGFubmVyTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUp Owogc3RhdGljIHZvaWQgU2NhblF1ZXJ5Rm9yTG9ja3MoUXVlcnkgKnBhcnNldHJlZSwgYm9vbCBh Y3F1aXJlKTsKIHN0YXRpYyBib29sIFNjYW5RdWVyeVdhbGtlcihOb2RlICpub2RlLCBib29sICph Y3F1aXJlKTsKQEAgLTc5MCw5ICs3OTIsMjEgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAgKgogICogT24gYSAidHJ1ZSIgcmV0dXJuLCB3ZSBo YXZlIGFjcXVpcmVkIHRoZSBsb2NrcyBuZWVkZWQgdG8gcnVuIHRoZSBwbGFuLgogICogKFdlIG11 c3QgZG8gdGhpcyBmb3IgdGhlICJ0cnVlIiByZXN1bHQgdG8gYmUgcmFjZS1jb25kaXRpb24tZnJl ZS4pCisgKgorICogSWYgdGhlIENhY2hlZFBsYW4gaXMgdmFsaWQsIHRoaXMgbWF5IGluIHNvbWUg Y2FzZXMgY2FsbAorICogRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgb24gZWFjaCBQbGFubmVk U3RtdCBjb250YWluZWQgaW4gaXQgdG8gZGV0ZXJtaW5lCisgKiB0aGUgc2V0IG9mIHJlbGF0aW9u cyB0byBiZSBsb2NrZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSwgaW5zdGVhZCBvZiBqdXN0 CisgKiBzY2FubmluZyBpdHMgcmFuZ2UgdGFibGUsIHdoaWNoIGlzIGRvbmUgdG8gcHJ1bmUgYXdh eSBhbnkgbm9kZXMgaW4gdGhlIHRyZWUKKyAqIHRoYXQgbmVlZCBub3QgYmUgZXhlY3V0ZWQgYmFz ZWQgb24gdGhlIHJlc3VsdCBvZiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nLgorICogVGhlIHJl c3VsdCBvZiBwcnVuaW5nIHdoaWNoIGNvbnNpc3RzIG9mIExpc3Qgb2YgTGlzdHMgb2YgYml0bWFw c2V0cyBvZiBjaGlsZAorICogc3VicGxhbiBpbmRleGVzLCBhbGxvY2F0ZWQgaW4gYSBjaGlsZCBj b250ZXh0IG9mIHRoZSBjb250ZXh0IGNvbnRhaW5pbmcgdGhlCisgKiBwbGFuIGl0c2VsZiwgYXJl IGFkZGVkIGludG8gcGxhbi0+cGFydF9wcnVuZV9yZXN1bHRzLiAgVGhlIHByZXZpb3VzIGNvbnRl bnRzCisgKiBvZiB0aGUgbGlzdCBmcm9tIHRoZSBsYXN0IGludm9jYXRpb24gb24gdGhlIHNhbWUg Q2FjaGVkUGxhbiBhcmUgZGVsZXRlZCwKKyAqIGJlY2F1c2UgdGhleSB3b3VsZCBubyBsb25nZXIg YmUgdmFsaWQgZ2l2ZW4gdGhlIGZyZXNoIHNldCBvZiBwYXJhbWV0ZXIKKyAqIHZhbHVlcyB3aGlj aCBtYXkgYmUgdXNlZCBhcyBwcnVuaW5nIHBhcmFtZXRlcnMuCiAgKi8KIHN0YXRpYyBib29sCi1D aGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKK0NoZWNrQ2FjaGVk UGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFy YW1zKQogewogCUNhY2hlZFBsYW4gKnBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKIApAQCAtODIw LDEzICs4MzQsMjQgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UpCiAJICovCiAJaWYgKHBsYW4tPmlzX3ZhbGlkKQogCXsKKwkJTGlzdCAgICpwYXJ0X3BydW5l X3Jlc3VsdF9saXN0OworCiAJCS8qCiAJCSAqIFBsYW4gbXVzdCBoYXZlIHBvc2l0aXZlIHJlZmNv dW50IGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBieQogCQkgKiBwbGFuc291cmNlOyBzbyBubyBu ZWVkIHRvIGZlYXIgaXQgZGlzYXBwZWFycyB1bmRlciB1cyBoZXJlLgogCQkgKi8KIAkJQXNzZXJ0 KHBsYW4tPnJlZmNvdW50ID4gMCk7CiAKLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3Rt dF9saXN0LCB0cnVlKTsKKwkJLyoKKwkJICogTG9jayByZWxhdGlvbnMgc2Nhbm5lZCBieSB0aGUg cGxhbi4gIElmIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpCisJCSAqIGFza2VkIHRvIG9taXQg c29tZSByZWxhdGlvbnMgYmVjYXVzZSB0aGUgcGxhbiBub2RlcyB0aGF0IHNjYW4gdGhlbQorCQkg KiB3ZXJlIGZvdW5kIHRvIGJlIHBydW5lZCwgdGhlIGV4ZWN1dG9yIHdpbGwgYmUgaW5mb3JtZWQg b2YgdGhlCisJCSAqIG9taXNzaW9uIG9mIHRoZSBwbGFuIG5vZGVzIHRoZW1zZWx2ZXMgdmlhIHBh cnRfcHJ1bmVfcmVzdWx0X2xpc3QKKwkJICogdGhhdCBpcyBwYXNzZWQgdG8gaXQgYWxvbmcgd2l0 aCB0aGUgbGlzdCBvZiBQbGFubmVkU3RtdHMsIHNvIHRoYXQKKwkJICogaXQgZG9lc24ndCBhY2Np ZGVudGFsbHkgdHJ5IHRvIGV4ZWN1dGUgdGhvc2Ugbm9kZXMuCisJCSAqLworCQlwYXJ0X3BydW5l X3Jlc3VsdF9saXN0ID0gQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LAorCQkJ CQkJCQkJCQkJCSAgIGJvdW5kUGFyYW1zKTsKIAogCQkvKgogCQkgKiBJZiBwbGFuIHdhcyB0cmFu c2llbnQsIGNoZWNrIHRvIHNlZSBpZiBUcmFuc2FjdGlvblhtaW4gaGFzCkBAIC04NDQsMTEgKzg2 OSwxNCBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAkJ aWYgKHBsYW4tPmlzX3ZhbGlkKQogCQl7CiAJCQkvKiBTdWNjZXNzZnVsbHkgcmV2YWxpZGF0ZWQg YW5kIGxvY2tlZCB0aGUgcXVlcnkuICovCisKKwkJCS8qIFJlbWVtYmVyIHBydW5pbmcgcmVzdWx0 cyBpbiB0aGUgQ2FjaGVkUGxhbi4gKi8KKwkJCUNhY2hlZFBsYW5TYXZlUGFydGl0aW9uUHJ1bmVS ZXN1bHRzKHBsYW4sIHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpOwogCQkJcmV0dXJuIHRydWU7CiAJ CX0KIAogCQkvKiBPb3BzLCB0aGUgcmFjZSBjYXNlIGhhcHBlbmVkLiAgUmVsZWFzZSB1c2VsZXNz IGxvY2tzLiAqLwotCQlBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIGZhbHNl KTsKKwkJUmVsZWFzZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCBwYXJ0X3BydW5lX3Jl c3VsdF9saXN0KTsKIAl9CiAKIAkvKgpAQCAtODgwLDEwICs5MDgsMTIgQEAgQnVpbGRDYWNoZWRQ bGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAogCQkJCVBhcmFt TGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQogewogCUNh Y2hlZFBsYW4gKnBsYW47Ci0JTGlzdAkgICAqcGxpc3Q7CisJTGlzdAkgICAqcGxpc3QsCisJCQkg ICAqZHVtbXlfcGFydF9wcnVuZV9yZXN1bHRfbGlzdDsKIAlib29sCQlzbmFwc2hvdF9zZXQ7CiAJ Ym9vbAkJaXNfdHJhbnNpZW50OwotCU1lbW9yeUNvbnRleHQgcGxhbl9jb250ZXh0OworCU1lbW9y eUNvbnRleHQgcGxhbl9jb250ZXh0LAorCQkJCSAgcGFydF9wcnVuZV9yZXN1bHRfY29udGV4dDsK IAlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OwogCUxpc3RDZWxs ICAgKmxjOwogCkBAIC05NjIsNiArOTkyLDE2IEBAIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFu U291cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAllbHNlCiAJCXBsYW5fY29udGV4dCA9 IEN1cnJlbnRNZW1vcnlDb250ZXh0OwogCisJLyoKKwkgKiBBbHNvIGNyZWF0ZSBhIGRlZGljYXRl ZCBjb250ZXh0IGZvciBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LCBtYWtpbmcgaXQKKwkgKiBhIGNo aWxkIG9mIHBsYW5fY29udGV4dC4KKwkgKi8KKwlwYXJ0X3BydW5lX3Jlc3VsdF9jb250ZXh0ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJ CSAgIkNhY2hlZFBsYW4gcGFydF9wcnVuZV9yZXN1bHRzIGxpc3QiLAorCQkJCQkJCQkJCQkJCSAg QUxMT0NTRVRfU1RBUlRfU01BTExfU0laRVMpOworCU1lbW9yeUNvbnRleHRTZXRQYXJlbnQocGFy dF9wcnVuZV9yZXN1bHRfY29udGV4dCwgcGxhbl9jb250ZXh0KTsKKwlNZW1vcnlDb250ZXh0U2V0 SWRlbnRpZmllcihwYXJ0X3BydW5lX3Jlc3VsdF9jb250ZXh0LCBwbGFuX2NvbnRleHQtPmlkZW50 KTsKKwogCS8qCiAJICogQ3JlYXRlIGFuZCBmaWxsIHRoZSBDYWNoZWRQbGFuIHN0cnVjdCB3aXRo aW4gdGhlIG5ldyBjb250ZXh0LgogCSAqLwpAQCAtOTc3LDEwICsxMDE3LDIwIEBAIEJ1aWxkQ2Fj aGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAlwbGFu LT5wbGFuUm9sZUlkID0gR2V0VXNlcklkKCk7CiAJcGxhbi0+ZGVwZW5kc09uUm9sZSA9IHBsYW5z b3VyY2UtPmRlcGVuZHNPblJMUzsKIAlpc190cmFuc2llbnQgPSBmYWxzZTsKKwlkdW1teV9wYXJ0 X3BydW5lX3Jlc3VsdF9saXN0ID0gTklMOwogCWZvcmVhY2gobGMsIHBsaXN0KQogCXsKIAkJUGxh bm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjKTsKIAor CQkvKgorCQkgKiBSZWFsIHZhbHVlcyB3aWxsIGJlIGFkZGVkIGR1cmluZyBzdWJzZXF1ZW50IENo ZWNrQ2FjaGVkUGxhbigpIGNhbGxzCisJCSAqIG9uIHRoaXMgcGxhbiwgYnV0IG11c3QgYWRkICJz b21ldGhpbmciIGZvciBub3csIGJlY2FzdWUgdXNlcnMgb2YKKwkJICogQ2FjaGVkUGxhbiBleHBl Y3Qgc3RtdF9saXN0IGFuZCBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0IHRvIGhhdmUKKwkJICogdGhl IHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLgorCQkgKi8KKwkJZHVtbXlfcGFydF9wcnVuZV9yZXN1 bHRfbGlzdCA9IGxhcHBlbmQoZHVtbXlfcGFydF9wcnVuZV9yZXN1bHRfbGlzdCwKKwkJCQkJCQkJ CQkJICAgTlVMTCk7CisKIAkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJ TElUWSkKIAkJCWNvbnRpbnVlOwkJCS8qIElnbm9yZSB1dGlsaXR5IHN0YXRlbWVudHMgKi8KIApA QCAtMTAwMiw2ICsxMDUyLDEzIEBAIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpw bGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAlwbGFuLT5pc19zYXZlZCA9IGZhbHNlOwogCXBsYW4t PmlzX3ZhbGlkID0gdHJ1ZTsKIAorCS8qCisJICogV2hpbGUgc3RpbGwgZHVtbXksIHNhdmUgdGhl IGxpc3Qgc28gdGhhdCBpdCBpcyBkaXNjYXJkZWQgb24gbmV4dCB1c2Ugb2YKKwkgKiB0aGUgQ2Fj aGVkUGxhbi4KKwkgKi8KKwlwbGFuLT5wYXJ0X3BydW5lX3Jlc3VsdF9jb250ZXh0ID0gcGFydF9w cnVuZV9yZXN1bHRfY29udGV4dDsKKwlDYWNoZWRQbGFuU2F2ZVBhcnRpdGlvblBydW5lUmVzdWx0 cyhwbGFuLCBkdW1teV9wYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKKwogCS8qIGFzc2lnbiBnZW5l cmF0aW9uIG51bWJlciB0byBuZXcgcGxhbiAqLwogCXBsYW4tPmdlbmVyYXRpb24gPSArKyhwbGFu c291cmNlLT5nZW5lcmF0aW9uKTsKIApAQCAtMTE2MCw3ICsxMjE3LDcgQEAgR2V0Q2FjaGVkUGxh bihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1z LAogCiAJaWYgKCFjdXN0b21wbGFuKQogCXsKLQkJaWYgKENoZWNrQ2FjaGVkUGxhbihwbGFuc291 cmNlKSkKKwkJaWYgKENoZWNrQ2FjaGVkUGxhbihwbGFuc291cmNlLCBib3VuZFBhcmFtcykpCiAJ CXsKIAkJCS8qIFdlIHdhbnQgYSBnZW5lcmljIHBsYW4sIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSB2 YWxpZCBvbmUgKi8KIAkJCXBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKQEAgLTE1ODYsNiArMTY0 MywzNiBAQCBDb3B5Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCXJl dHVybiBuZXdzb3VyY2U7CiB9CiAKKy8qCisgKiBDYWNoZWRQbGFuU2F2ZVBhcnRpdGlvblBydW5l UmVzdWx0cworICoJCVNhdmUgdGhlIGxpc3QgY29udGFpbmluZyBQYXJ0aXRpb25QcnVuZVJlc3Vs dCBub2RlcyBpbnRvIHRoZSBnaXZlbgorICoJCUNhY2hlZFBsYW4KKyAqCisgKiBUaGV5IG11c3Qg YmUgaGFuZ2VkIG9uIHRvIGZvciB0aGUgZHVyYXRpb24gb2YgYSBnaXZlbiBleGVjdXRpb24gb2Yg dGhlCisgKiBDYWNoZWRQbGFuLiAgVGhlIHByb3ZpZGVkIGxpc3QgaXMgY29waWVkIGludG8gYSBk ZWRpY2F0ZWQgY29udGV4dCB0aGF0IGlzCisgKiBhIGNoaWxkIG9mIHBsYW4tPmNvbnRleHQgYWZ0 ZXIgZHJvcHBpbmcgdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIHRoZSBsaXN0LAorICogYmVjYXVz ZSBhbnkgUGFydGl0aW9uUHJ1bmVSZXN1bHQgY29udGFpbmVkIHRoZXJlaW4gd291bGQgbm8gbG9u Z2VyIGJlCisgKiB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgZXhlY3V0aW9uLgorICovCitzdGF0aWMg dm9pZAorQ2FjaGVkUGxhblNhdmVQYXJ0aXRpb25QcnVuZVJlc3VsdHMoQ2FjaGVkUGxhbiAqcGxh biwKKwkJCQkJCQkJCUxpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpCit7CisJTWVtb3J5Q29u dGV4dAlwYXJ0X3BydW5lX3Jlc3VsdF9jb250ZXh0ID0gcGxhbi0+cGFydF9wcnVuZV9yZXN1bHRf Y29udGV4dCwKKwkJCQkJb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCUxpc3QJ CSAgICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0X2NvcHk7CisKKwkvKiBGaXJzdCBjbGVhciB0aGUg ZXhpc3RpbmcgY29udGVudHMgb2YgdGhlIGxpc3QuICovCisJQXNzZXJ0KE1lbW9yeUNvbnRleHRJ c1ZhbGlkKHBhcnRfcHJ1bmVfcmVzdWx0X2NvbnRleHQpKTsKKwlNZW1vcnlDb250ZXh0UmVzZXQo cGFydF9wcnVuZV9yZXN1bHRfY29udGV4dCk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGFy dF9wcnVuZV9yZXN1bHRfY29udGV4dCk7CisJcGFydF9wcnVuZV9yZXN1bHRfbGlzdF9jb3B5ID0g Y29weU9iamVjdChwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisKKwlwbGFuLT5wYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gcGFydF9w cnVuZV9yZXN1bHRfbGlzdF9jb3B5OworfQorCiAvKgogICogQ2FjaGVkUGxhbklzVmFsaWQ6IHRl c3Qgd2hldGhlciB0aGUgcmV3cml0dGVuIHF1ZXJ5dHJlZSB3aXRoaW4gYQogICogQ2FjaGVkUGxh blNvdXJjZSBpcyBjdXJyZW50bHkgdmFsaWQgKHRoYXQgaXMsIG5vdCBtYXJrZWQgYXMgYmVpbmcg aW4gbmVlZApAQCAtMTczNywxNyArMTgyNCwyMSBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChM aXN0ICpzdG10cykKIAogLyoKICAqIEFjcXVpcmVFeGVjdXRvckxvY2tzOiBhY3F1aXJlIGxvY2tz IG5lZWRlZCBmb3IgZXhlY3V0aW9uIG9mIGEgY2FjaGVkIHBsYW47Ci0gKiBvciByZWxlYXNlIHRo ZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4KKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBvZiBQYXJ0aXRp b25QcnVuZVJlc3VsdCBub2RlcyBjb250YWluaW5nIG9uZSBlbGVtZW50IGZvciBlYWNoCisgKiBQ bGFubmVkU3RtdCBpbiBzdG10X2xpc3Qgb3IgTlVMTCBpZiB0aGUgbGF0dGVyIGlzIHV0aWxpdHkg c3RhdGVtZW50IG9yIGl0cworICogY29udGFpbnNJbml0aWFsUHJ1bmluZyBpcyBmYWxzZS4KICAq Lwotc3RhdGljIHZvaWQKLUFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9v bCBhY3F1aXJlKQorc3RhdGljIExpc3QgKgorQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3Rt dF9saXN0LCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKQogewogCUxpc3RDZWxsICAgKmxjMTsK KwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gTklMOwogCiAJZm9yZWFjaChsYzEs IHN0bXRfbGlzdCkKIAl7CiAJCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IGxmaXJzdF9ub2Rl KFBsYW5uZWRTdG10LCBsYzEpOwotCQlMaXN0Q2VsbCAgICpsYzI7CisJCVBhcnRpdGlvblBydW5l UmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCA9IE5VTEw7CiAKIAkJaWYgKHBsYW5uZWRzdG10LT5j b21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKIAkJewpAQCAtMTc2MSwyNyArMTg1MiwxMjIgQEAg QWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAJCQlR dWVyeQkgICAqcXVlcnkgPSBVdGlsaXR5Q29udGFpbnNRdWVyeShwbGFubmVkc3RtdC0+dXRpbGl0 eVN0bXQpOwogCiAJCQlpZiAocXVlcnkpCi0JCQkJU2NhblF1ZXJ5Rm9yTG9ja3MocXVlcnksIGFj cXVpcmUpOwotCQkJY29udGludWU7CisJCQkJU2NhblF1ZXJ5Rm9yTG9ja3MocXVlcnksIHRydWUp OwogCQl9Ci0KLQkJZm9yZWFjaChsYzIsIHBsYW5uZWRzdG10LT5ydGFibGUpCisJCWVsc2UKIAkJ ewotCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0KGxjMik7 Ci0KLQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQotCQkJCWNvbnRpbnVlOwor CQkJQml0bWFwc2V0ICAqbG9ja1JlbGlkczsKKwkJCWludAkJCXJ0aTsKIAogCQkJLyoKLQkJCSAq IEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgbG9jayBvbiBlYWNoIHJlbGF0aW9uIE9J RC4gTm90ZQotCQkJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxseSB0cnkgdG8gb3BlbiB0aGUgcmVs LCBhbmQgaGVuY2Ugd2lsbCBub3QKLQkJCSAqIGZhaWwgaWYgaXQncyBiZWVuIGRyb3BwZWQgZW50 aXJlbHkgLS0tIHdlJ2xsIGp1c3QgdHJhbnNpZW50bHkKLQkJCSAqIGFjcXVpcmUgYSBub24tY29u ZmxpY3RpbmcgbG9jay4KKwkJCSAqIEZpZ3VyZSBvdXQgdGhlIHNldCBvZiByZWxhdGlvbnMgdGhh dCB3b3VsZCBuZWVkIHRvIGJlIGxvY2tlZAorCQkJICogYmVmb3JlIGV4ZWN1dGluZyB0aGUgcGxh bi4KIAkJCSAqLwotCQkJaWYgKGFjcXVpcmUpCisJCQlpZiAocGxhbm5lZHN0bXQtPmNvbnRhaW5z SW5pdGlhbFBydW5pbmcpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBPYnRhaW4gdGhlIHNldCBvZiBw YXJ0aXRpb25zIHRvIGJlIGxvY2tlZCBmcm9tIHRoZQorCQkJCSAqIFBhcnRpdGlvblBydW5lSW5m b3MgYnkgY29uc2lkZXJpbmcgdGhlIHJlc3VsdCBvZiBwZXJmb3JtaW5nCisJCQkJICogaW5pdGlh bCBwYXJ0aXRpb24gcHJ1bmluZy4KKwkJCQkgKi8KKwkJCQlQYXJ0aXRpb25QcnVuZVJlc3VsdCAq cGFydF9wcnVuZV9yZXN1bHQgPQorCQkJCQlFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcocGxhbm5l ZHN0bXQsIGJvdW5kUGFyYW1zKTsKKworCQkJCWxvY2tSZWxpZHMgPSBibXNfdW5pb24ocGxhbm5l ZHN0bXQtPm1pbkxvY2tSZWxpZHMsCisJCQkJCQkJCQkgICBwYXJ0X3BydW5lX3Jlc3VsdC0+c2Nh bl9sZWFmcGFydF9ydGlzKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlsb2NrUmVsaWRzID0gcGxhbm5l ZHN0bXQtPm1pbkxvY2tSZWxpZHM7CisKKwkJCXJ0aSA9IC0xOworCQkJd2hpbGUgKChydGkgPSBi bXNfbmV4dF9tZW1iZXIobG9ja1JlbGlkcywgcnRpKSkgPiAwKQorCQkJeworCQkJCVJhbmdlVGJs RW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcGxhbm5lZHN0bXQtPnJ0YWJsZSk7CisKKwkJCQlp ZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCQkJY29udGludWU7CisKKwkJCQkv KgorCQkJCSAqIEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgbG9jayBvbiBlYWNoIHJl bGF0aW9uIE9JRC4KKwkJCQkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJ5IHRvIG9w ZW4gdGhlIHJlbCwgYW5kIGhlbmNlCisJCQkJICogd2lsbCBub3QgZmFpbCBpZiBpdCdzIGJlZW4g ZHJvcHBlZCBlbnRpcmVseSAtLS0gd2UnbGwganVzdAorCQkJCSAqIHRyYW5zaWVudGx5IGFjcXVp cmUgYSBub24tY29uZmxpY3RpbmcgbG9jay4KKwkJCQkgKi8KIAkJCQlMb2NrUmVsYXRpb25PaWQo cnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBS ZW1lbWJlciBQYXJ0aXRpb25QcnVuZVJlc3VsdCBmb3IgbGF0ZXIgYWRkaW5nIHRvIHRoZSBRdWVy eURlc2MgdGhhdAorCQkgKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXhlY3V0b3Igd2hlbiBleGVj dXRpbmcgdGhpcyBwbGFuLiAgTWF5IGJlCisJCSAqIE5VTEwsIGJ1dCBtdXN0IGtlZXAgdGhlIGxp c3QgdGhlIHNhbWUgbGVuZ3RoIGFzIHN0bXRfbGlzdC4KKwkJICovCisJCXBhcnRfcHJ1bmVfcmVz dWx0X2xpc3QgPSBsYXBwZW5kKHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QsCisJCQkJCQkJCQkJIHBh cnRfcHJ1bmVfcmVzdWx0KTsKKwl9CisKKwlyZXR1cm4gcGFydF9wcnVuZV9yZXN1bHRfbGlzdDsK K30KKworLyoKKyAqIFJlbGVhc2VFeGVjdXRvckxvY2tzCisgKiAJCVJlbGVhc2UgbG9ja3MgdGhh dCB3b3VsZCd2ZSBiZWVuIGFjcXVpcmVkIGJ5IGFuIGVhcmxpZXIgY2FsbCB0bworICogCQlBY3F1 aXJlRXhlY3V0b3JMb2NrcygpCisgKi8KK3N0YXRpYyB2b2lkCitSZWxlYXNlRXhlY3V0b3JMb2Nr cyhMaXN0ICpzdG10X2xpc3QsIExpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpCit7CisJTGlz dENlbGwgICAqbGMxLAorCQkJICAgKmxjMjsKKworCWZvcmJvdGgobGMxLCBzdG10X2xpc3QsIGxj MiwgcGFydF9wcnVuZV9yZXN1bHRfbGlzdCkKKwl7CisJCVBsYW5uZWRTdG10ICpwbGFubmVkc3Rt dCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYzEpOworCQlQYXJ0aXRpb25QcnVuZVJlc3Vs dCAqcGFydF9wcnVuZV9yZXN1bHQgPSBsZmlyc3Rfbm9kZShQYXJ0aXRpb25QcnVuZVJlc3VsdCwg bGMyKTsKKworCQlpZiAocGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQor CQl7CisJCQkvKgorCQkJICogSWdub3JlIHV0aWxpdHkgc3RhdGVtZW50cywgZXhjZXB0IHRob3Nl IChzdWNoIGFzIEVYUExBSU4pIHRoYXQKKwkJCSAqIGNvbnRhaW4gYSBwYXJzZWQtYnV0LW5vdC1w bGFubmVkIHF1ZXJ5LiAgTm90ZTogaXQncyBva2F5IHRvIHVzZQorCQkJICogU2NhblF1ZXJ5Rm9y TG9ja3MsIGV2ZW4gdGhvdWdoIHRoZSBxdWVyeSBoYXNuJ3QgYmVlbiB0aHJvdWdoCisJCQkgKiBy dWxlIHJld3JpdGluZywgYmVjYXVzZSByZXdyaXRpbmcgZG9lc24ndCBjaGFuZ2UgdGhlIHF1ZXJ5 CisJCQkgKiByZXByZXNlbnRhdGlvbi4KKwkJCSAqLworCQkJUXVlcnkJICAgKnF1ZXJ5ID0gVXRp bGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQtPnV0aWxpdHlTdG10KTsKKworCQkJaWYgKHF1 ZXJ5KQorCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCBmYWxzZSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQlCaXRtYXBzZXQgICpsb2NrUmVsaWRzOworCQkJaW50CQkJcnRpOworCisJCQlpZiAo cGFydF9wcnVuZV9yZXN1bHQgPT0gTlVMTCkKKwkJCXsKKwkJCQlBc3NlcnQoIXBsYW5uZWRzdG10 LT5jb250YWluc0luaXRpYWxQcnVuaW5nKTsKKwkJCQlsb2NrUmVsaWRzID0gcGxhbm5lZHN0bXQt Pm1pbkxvY2tSZWxpZHM7CisJCQl9CiAJCQllbHNlCisJCQl7CisJCQkJQXNzZXJ0KHBsYW5uZWRz dG10LT5jb250YWluc0luaXRpYWxQcnVuaW5nKTsKKwkJCQlsb2NrUmVsaWRzID0gYm1zX3VuaW9u KHBsYW5uZWRzdG10LT5taW5Mb2NrUmVsaWRzLAorCQkJCQkJCQkJICAgcGFydF9wcnVuZV9yZXN1 bHQtPnNjYW5fbGVhZnBhcnRfcnRpcyk7CisJCQl9CisKKwkJCXJ0aSA9IC0xOworCQkJd2hpbGUg KChydGkgPSBibXNfbmV4dF9tZW1iZXIobG9ja1JlbGlkcywgcnRpKSkgPj0gMCkKKwkJCXsKKwkJ CQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBsYW5uZWRzdG10LT5ydGFibGUp OworCisJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJCWNvbnRpbnVl OworCisJCQkJLyogU2VlIHRoZSBjb21tZW50IGluIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkuICov CiAJCQkJVW5sb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CisJ CQl9CisKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxh aW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA2NjY5NzdmYjFmLi4z NDk3NWM2OWVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC04Nyw3ICs4Nyw4IEBAIGV4dGVy biB2b2lkIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICpp bnRvLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs CiAJCQkJCQkJICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlF bnYpOwogCi1leHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0 bXQsIEludG9DbGF1c2UgKmludG8sCitleHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVk U3RtdCAqcGxhbm5lZHN0bXQsIFBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3Vs LAorCQkJCQkJICAgSW50b0NsYXVzZSAqaW50bywKIAkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMs IGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBwYXJhbXMs IFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAogCQkJCQkJICAgY29uc3QgaW5zdHJfdGltZSAq cGxhbmR1cmF0aW9uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRp dGlvbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCmluZGV4IDcwODQz NWU5NTIuLmJkODc3NjQwMmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQ YXJ0aXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKQEAg LTQ1LDYgKzQ1LDcgQEAgZXh0ZXJuIHZvaWQgRXhlY0NsZWFudXBUdXBsZVJvdXRpbmcoTW9kaWZ5 VGFibGVTdGF0ZSAqbXRzdGF0ZSwKICAqIG5wYXJ0cwkJCQkJCUxlbmd0aCBvZiBzdWJwbGFuX21h cFtdIGFuZCBzdWJwYXJ0X21hcFtdLgogICogc3VicGxhbl9tYXAJCQkJCVN1YnBsYW4gaW5kZXgg YnkgcGFydGl0aW9uIGluZGV4LCBvciAtMS4KICAqIHN1YnBhcnRfbWFwCQkJCQlTdWJwYXJ0IGlu ZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgLTEuCisgKiBydGlfbWFwCQkJCQkJUmFuZ2UgdGFi bGUgaW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCBvciAwLgogICogcHJlc2VudF9wYXJ0cwkJCQlB IEJpdG1hcHNldCBvZiB0aGUgcGFydGl0aW9uIGluZGV4ZXMgdGhhdCB3ZQogICoJCQkJCQkJCWhh dmUgc3VicGxhbnMgb3Igc3VicGFydHMgZm9yLgogICogaW5pdGlhbF9wcnVuaW5nX3N0ZXBzCQlM aXN0IG9mIFBhcnRpdGlvblBydW5lU3RlcHMgdXNlZCB0bwpAQCAtNjEsNiArNjIsNyBAQCB0eXBl ZGVmIHN0cnVjdCBQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhCiAJaW50CQkJbnBhcnRzOwogCWlu dAkJICAgKnN1YnBsYW5fbWFwOwogCWludAkJICAgKnN1YnBhcnRfbWFwOworCUluZGV4CSAgICpy dGlfbWFwOwogCUJpdG1hcHNldCAgKnByZXNlbnRfcGFydHM7CiAJTGlzdAkgICAqaW5pdGlhbF9w cnVuaW5nX3N0ZXBzOwogCUxpc3QJICAgKmV4ZWNfcHJ1bmluZ19zdGVwczsKQEAgLTEyMyw5ICsx MjUsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZQogCiBleHRlcm4gUGFy dGl0aW9uUHJ1bmVTdGF0ZSAqRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLAogCQkJCQkJCQkJCQkJCSBpbnQgbl90b3RhbF9zdWJwbGFucywKLQkJCQkJCQkJCQkJ CQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkJCQkJCQkJIGludCBwYXJ0 X3BydW5lX2luZGV4LAogCQkJCQkJCQkJCQkJCSBCaXRtYXBzZXQgKippbml0aWFsbHlfdmFsaWRf c3VicGxhbnMpOwogZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKFBh cnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCi0JCQkJCQkJCQkJICAgYm9vbCBpbml0aWFs X3BydW5lKTsKLQorCQkJCQkJCQkJCSAgIGJvb2wgaW5pdGlhbF9wcnVuZSwKKwkJCQkJCQkJCQkg ICBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpOworZXh0ZXJuIEJpdG1hcHNldCAqRXhl Y1BhcnRpdGlvbkRvSW5pdGlhbFBydW5pbmcoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJ CQkJCQlQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJUGFydGl0aW9uUHJ1bmVJbmZvICpw cnVuZWluZm8sCisJCQkJCQkJCUJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiAjZW5k aWYJCQkJCQkJLyogRVhFQ1BBUlRJVElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjZGVzYy5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAppbmRl eCBlNzllMmMwMDFmLi42MGQ1NjQ0OTA4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjZGVzYy5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKQEAgLTM1 LDYgKzM1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnlEZXNjCiAJLyogVGhlc2UgZmllbGRzIGFy ZSBwcm92aWRlZCBieSBDcmVhdGVRdWVyeURlc2MgKi8KIAlDbWRUeXBlCQlvcGVyYXRpb247CQkv KiBDTURfU0VMRUNULCBDTURfVVBEQVRFLCBldGMuICovCiAJUGxhbm5lZFN0bXQgKnBsYW5uZWRz dG10OwkvKiBwbGFubmVyJ3Mgb3V0cHV0IChjb3VsZCBiZSB1dGlsaXR5LCB0b28pICovCisJUGFy dGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWx0OyAvKiBFeGVjdXRvckRvSW5pdGlh bFBydW5pbmcoKSdzCisJCQkJCQkJCQkJCSAgKiBvdXRwdXQgZm9yIHBsYW5uZWRzdG10ICovCiAJ Y29uc3QgY2hhciAqc291cmNlVGV4dDsJCS8qIHNvdXJjZSB0ZXh0IG9mIHRoZSBxdWVyeSAqLwog CVNuYXBzaG90CXNuYXBzaG90OwkJLyogc25hcHNob3QgdG8gdXNlIGZvciBxdWVyeSAqLwogCVNu YXBzaG90CWNyb3NzY2hlY2tfc25hcHNob3Q7CS8qIGNyb3NzY2hlY2sgZm9yIFJJIHVwZGF0ZS9k ZWxldGUgKi8KQEAgLTU3LDYgKzU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnlEZXNjCiAKIC8q IGluIHBxdWVyeS5jICovCiBleHRlcm4gUXVlcnlEZXNjICpDcmVhdGVRdWVyeURlc2MoUGxhbm5l ZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkgIFBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0 X3BydW5lX3Jlc3VsdCwKIAkJCQkJCQkJICBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCQkJ CQkgIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkgIFNuYXBzaG90IGNyb3NzY2hlY2tfc25h cHNob3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA4NzM3NzJmMTg4Li41N2RjMGU4MDc3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTE4NSw2ICsxODUsOCBAQCBFeGVjR2V0SnVu a0F0dHJpYnV0ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgQXR0ck51bWJlciBhdHRubywgYm9vbCAq aXNOdWxsKQogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMgaW4gZXhlY01haW4uYwog ICovCitleHRlcm4gUGFydGl0aW9uUHJ1bmVSZXN1bHQgKkV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmlu ZyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCQkJCQkJICBQYXJhbUxpc3RJbmZv IHBhcmFtcyk7CiBleHRlcm4gdm9pZCBFeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNj LCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlE ZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY3V0b3JSdW4oUXVl cnlEZXNjICpxdWVyeURlc2MsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGNiYmNmZjgxZDIuLmI1 YTdmZDdlMTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC01OTYsNiArNTk2LDggQEAgdHlwZWRl ZiBzdHJ1Y3QgRVN0YXRlCiAJc3RydWN0IEV4ZWNSb3dNYXJrICoqZXNfcm93bWFya3M7CS8qIEFy cmF5IG9mIHBlci1yYW5nZS10YWJsZS1lbnRyeQogCQkJCQkJCQkJCSAqIEV4ZWNSb3dNYXJrcywg b3IgTlVMTCBpZiBub25lICovCiAJUGxhbm5lZFN0bXQgKmVzX3BsYW5uZWRzdG10OwkvKiBsaW5r IHRvIHRvcCBvZiBwbGFuIHRyZWUgKi8KKwlMaXN0CQkqZXNfcGFydF9wcnVuZV9pbmZvczsJLyog UGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MgKi8KKwlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVSZXN1 bHQgKmVzX3BhcnRfcHJ1bmVfcmVzdWx0OyAvKiBRdWVyeURlc2MucGFydF9wcnVuZV9yZXN1bHQg Ki8KIAljb25zdCBjaGFyICplc19zb3VyY2VUZXh0OwkvKiBTb3VyY2UgdGV4dCBmcm9tIFF1ZXJ5 RGVzYyAqLwogCiAJSnVua0ZpbHRlciAqZXNfanVua0ZpbHRlcjsJLyogdG9wLWxldmVsIGp1bmsg ZmlsdGVyLCBpZiBhbnkgKi8KQEAgLTk4NCw2ICs5ODYsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgRG9t YWluQ29uc3RyYWludFN0YXRlCiAgKi8KIHR5cGVkZWYgVHVwbGVUYWJsZVNsb3QgKigqRXhlY1By b2NOb2RlTXRkKSAoc3RydWN0IFBsYW5TdGF0ZSAqcHN0YXRlKTsKIAorLyotLS0tLS0tLS0tLS0t LS0tCisgKiBQYXJ0aXRpb25QcnVuZVJlc3VsdAorICoKKyAqIFJlc3VsdCBvZiBFeGVjdXRvckRv SW5pdGlhbFBydW5pbmcoKSBpbnZvY2F0aW9uIG9uIGEgZ2l2ZW4gcGxhbi4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVSZXN1bHQKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJQml0 bWFwc2V0CSAgICpzY2FuX2xlYWZwYXJ0X3J0aXM7CisJTGlzdAkJICAgKnZhbGlkX3N1YnBsYW5f b2Zmc19saXN0OworfSBQYXJ0aXRpb25QcnVuZVJlc3VsdDsKKwogLyogLS0tLS0tLS0tLS0tLS0t LQogICoJCVBsYW5TdGF0ZSBub2RlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggMzAwODI0MjU4ZS4uZGUz MTJiOTIxNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC05Nyw2ICs5Nyw5IEBAIHR5cGVkZWYgZW51bSBOb2Rl VGFnCiAJVF9QYXJ0aXRpb25QcnVuZVN0ZXBDb21iaW5lLAogCVRfUGxhbkludmFsSXRlbSwKIAor CS8qIFRBR1MgRk9SIEVYRUNVVE9SIFBSRVAgTk9ERVMgKGV4ZWNub2Rlcy5oKSAqLworCVRfUGFy dGl0aW9uUHJ1bmVSZXN1bHQsCisKIAkvKgogCSAqIFRBR1MgRk9SIFBMQU4gU1RBVEUgTk9ERVMg KGV4ZWNub2Rlcy5oKQogCSAqCkBAIC02NzMsNiArNjc2LDcgQEAgZXh0ZXJuIHN0cnVjdCBCaXRt YXBzZXQgKnJlYWRCaXRtYXBzZXQodm9pZCk7CiBleHRlcm4gdWludHB0cl90IHJlYWREYXR1bShi b29sIHR5cGJ5dmFsKTsKIGV4dGVybiBib29sICpyZWFkQm9vbENvbHMoaW50IG51bUNvbHMpOwog ZXh0ZXJuIGludCAqcmVhZEludENvbHMoaW50IG51bUNvbHMpOworZXh0ZXJuIEluZGV4ICpyZWFk SW5kZXhDb2xzKGludCBudW1Db2xzKTsKIGV4dGVybiBPaWQgKnJlYWRPaWRDb2xzKGludCBudW1D b2xzKTsKIGV4dGVybiBpbnQxNiAqcmVhZEF0dHJOdW1iZXJDb2xzKGludCBudW1Db2xzKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaAppbmRleCA2Y2JjYjY3YmRmLi5mMjAzOTA3MWM5IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaApAQCAtMTA3LDYgKzEwNywxOCBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xv YmFsCiAKIAlMaXN0CSAgICphcHBlbmRSZWxhdGlvbnM7CS8qICJmbGF0IiBsaXN0IG9mIEFwcGVu ZFJlbEluZm9zICovCiAKKwlMaXN0CSAgICpwYXJ0UHJ1bmVJbmZvczsJCS8qIExpc3Qgb2YgUGFy dGl0aW9uUHJ1bmVJbmZvIGNvbnRhaW5lZCBpbgorCQkJCQkJCQkJICogdGhlIHBsYW4gKi8KKwor CWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5pbmc7CS8qIERvIGFueSBvZiB0aG9zZSBQYXJ0aXRp b25QcnVuZUluZm9zCisJCQkJCQkJCQkJICogaGF2ZSBpbml0aWFsIChwcmUtZXhlYykgcHJ1bmlu ZworCQkJCQkJCQkJCSAqIHN0ZXBzIGluIHRoZW0/ICovCisKKwlCaXRtYXBzZXQgICptaW5Mb2Nr UmVsaWRzOwkvKiBSVCBpbmRleGVzIG9mIFJURV9SRUxBVElPTiBlbnRyaWVzIHRoYXQKKwkJCQkJ CQkJICogbXVzdCBhbHdheXMgYmUgbG9ja2VkIHRvIGV4ZWN1dGUgdGhlIHBsYW47CisJCQkJCQkJ CSAqIHRob3NlIHNjYW5uZWQgYnkgaW5pdGlhbC1wcnVuYWJsZSBwbGFuCisJCQkJCQkJCSAqIG5v ZGVzIGFyZSBub3QgaW5jbHVkZWQgKi8KKwogCUxpc3QJICAgKnJlbGF0aW9uT2lkczsJLyogT0lE cyBvZiByZWxhdGlvbnMgdGhlIHBsYW4gZGVwZW5kcyBvbiAqLwogCiAJTGlzdAkgICAqaW52YWxJ dGVtczsJCS8qIG90aGVyIGRlcGVuZGVuY2llcywgYXMgUGxhbkludmFsSXRlbXMgKi8KQEAgLTM3 Nyw2ICszODksOSBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAogCS8qIERvZXMgdGhpcyBxdWVyeSBt b2RpZnkgYW55IHBhcnRpdGlvbiBrZXkgY29sdW1ucz8gKi8KIAlib29sCQlwYXJ0Q29sc1VwZGF0 ZWQ7CisKKwkvKiBQYXJ0aXRpb25QcnVuZUluZm9zIGFkZGVkIGluIHRoaXMgcXVlcnkncyBwbGFu LiAqLworCUxpc3QJICAgKnBhcnRQcnVuZUluZm9zOwogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o CmluZGV4IDEwZGQzNWYwMTEuLmVjZGM5NTBmZGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC02 NCw4ICs2NCwxOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCiAJc3RydWN0IFBsYW4g KnBsYW5UcmVlOwkJLyogdHJlZSBvZiBQbGFuIG5vZGVzICovCiAKKwlMaXN0CSAgICpwYXJ0UHJ1 bmVJbmZvczsJLyogTGlzdCBvZiBQYXJ0aXRpb25QcnVuZUluZm8gY29udGFpbmVkIGluCisJCQkJ CQkJCSAqIHRoZSBwbGFuICovCisKKwlib29sCQljb250YWluc0luaXRpYWxQcnVuaW5nOwkvKiBE byBhbnkgb2YgdGhvc2UgUGFydGl0aW9uUHJ1bmVJbmZvcworCQkJCQkJCQkJCSAqIGhhdmUgaW5p dGlhbCAocHJlLWV4ZWMpIHBydW5pbmcKKwkJCQkJCQkJCQkgKiBzdGVwcyBpbiB0aGVtPyAqLwor CiAJTGlzdAkgICAqcnRhYmxlOwkJCS8qIGxpc3Qgb2YgUmFuZ2VUYmxFbnRyeSBub2RlcyAqLwog CisJQml0bWFwc2V0ICAqbWluTG9ja1JlbGlkczsJLyogUlQgaW5kZXhlcyBvZiBSVEVfUkVMQVRJ T04gZW50cmllcyB0aGF0CisJCQkJCQkJCSAqIG11c3QgYmUgbG9ja2VkLCBleGNlcHQgdGhvc2Ug c2Nhbm5lZCBieQorCQkJCQkJCQkgKiBpbml0aWFsLXBydW5hYmxlIHBsYW4gbm9kZXMgKi8KKwog CS8qIHJ0YWJsZSBpbmRleGVzIG9mIHRhcmdldCByZWxhdGlvbnMgZm9yIElOU0VSVC9VUERBVEUv REVMRVRFICovCiAJTGlzdAkgICAqcmVzdWx0UmVsYXRpb25zOwkvKiBpbnRlZ2VyIGxpc3Qgb2Yg UlQgaW5kZXhlcywgb3IgTklMICovCiAKQEAgLTI2Miw4ICsyNzMsMTIgQEAgdHlwZWRlZiBzdHJ1 Y3QgQXBwZW5kCiAJICovCiAJaW50CQkJZmlyc3RfcGFydGlhbF9wbGFuOwogCi0JLyogSW5mbyBm b3IgcnVuLXRpbWUgc3VicGxhbiBwcnVuaW5nOyBOVUxMIGlmIHdlJ3JlIG5vdCBkb2luZyB0aGF0 ICovCi0Jc3RydWN0IFBhcnRpdGlvblBydW5lSW5mbyAqcGFydF9wcnVuZV9pbmZvOworCS8qCisJ ICogSW5kZXggb2YgdGhpcyBwbGFuJ3MgUGFydGl0aW9uUHJ1bmVJbmZvIGluIFBsYW5uZWRTdG10 LnBhcnRfcHJ1bmVfaW5mb3MKKwkgKiB0byBiZSB1c2VkIGZvciBydW4tdGltZSBzdWJwbGFuIHBy dW5pbmc7IC0xIGlmIHJ1bi10aW1lIHBydW5pbmcgaXMKKwkgKiBub3QgbmVlZGVkLgorCSAqLwor CWludAkJCXBhcnRfcHJ1bmVfaW5kZXg7CiB9IEFwcGVuZDsKIAogLyogLS0tLS0tLS0tLS0tLS0t LQpAQCAtMjgyLDggKzI5NywxMyBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCU9pZAkJ ICAgKnNvcnRPcGVyYXRvcnM7CS8qIE9JRHMgb2Ygb3BlcmF0b3JzIHRvIHNvcnQgdGhlbSBieSAq LwogCU9pZAkJICAgKmNvbGxhdGlvbnM7CQkvKiBPSURzIG9mIGNvbGxhdGlvbnMgKi8KIAlib29s CSAgICpudWxsc0ZpcnN0OwkJLyogTlVMTFMgRklSU1QvTEFTVCBkaXJlY3Rpb25zICovCi0JLyog SW5mbyBmb3IgcnVuLXRpbWUgc3VicGxhbiBwcnVuaW5nOyBOVUxMIGlmIHdlJ3JlIG5vdCBkb2lu ZyB0aGF0ICovCi0Jc3RydWN0IFBhcnRpdGlvblBydW5lSW5mbyAqcGFydF9wcnVuZV9pbmZvOwor CisJLyoKKwkgKiBJbmRleCBvZiB0aGlzIHBsYW4ncyBQYXJ0aXRpb25QcnVuZUluZm8gaW4gUGxh bm5lZFN0bXQucGFydF9wcnVuZV9pbmZvcworCSAqIHRvIGJlIHVzZWQgZm9yIHJ1bi10aW1lIHN1 YnBsYW4gcHJ1bmluZzsgLTEgaWYgcnVuLXRpbWUgcHJ1bmluZyBpcworCSAqIG5vdCBuZWVkZWQu CisJICovCisJaW50CQkJcGFydF9wcnVuZV9pbmRleDsKIH0gTWVyZ2VBcHBlbmQ7CiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0KQEAgLTExODcsNiArMTIwNywxMyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFu Um93TWFyawogICogcHJ1bmVfaW5mb3MJCQlMaXN0IG9mIExpc3RzIGNvbnRhaW5pbmcgUGFydGl0 aW9uZWRSZWxQcnVuZUluZm8gbm9kZXMsCiAgKgkJCQkJCW9uZSBzdWJsaXN0IHBlciBydW4tdGlt ZS1wcnVuYWJsZSBwYXJ0aXRpb24gaGllcmFyY2h5CiAgKgkJCQkJCWFwcGVhcmluZyBpbiB0aGUg cGFyZW50IHBsYW4gbm9kZSdzIHN1YnBsYW5zLgorICoKKyAqIG5lZWRzX2luaXRfcHJ1bmluZwlE b2VzIGFueSBvZiB0aGUgUGFydGl0aW9uZWRSZWxQcnVuZUluZm9zIGluCisgKgkJCQkJCXBydW5l X2luZm9zIGhhdmUgaXRzIGluaXRpYWxfcHJ1bmluZ19zdGVwcyBzZXQ/CisgKgorICogbmVlZHNf ZXhlY19wcnVuaW5nCURvZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4K KyAqCQkJCQkJcHJ1bmVfaW5mb3MgaGF2ZSBpdHMgZXhlY19wcnVuaW5nX3N0ZXBzIHNldD8KKyAq CiAgKiBvdGhlcl9zdWJwbGFucwkJSW5kZXhlcyBvZiBhbnkgc3VicGxhbnMgdGhhdCBhcmUgbm90 IGFjY291bnRlZCBmb3IKICAqCQkJCQkJYnkgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5l SW5mbyBub2RlcyBpbgogICoJCQkJCQkicHJ1bmVfaW5mb3MiLiAgVGhlc2Ugc3VicGxhbnMgbXVz dCBub3QgYmUgcHJ1bmVkLgpAQCAtMTE5NSw2ICsxMjIyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFy dGl0aW9uUHJ1bmVJbmZvCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlMaXN0CSAgICpwcnVuZV9pbmZv czsKKwlCaXRtYXBzZXQgICpsZWFmcGFydF9ydGlzOworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmlu ZzsKKwlib29sCQluZWVkc19leGVjX3BydW5pbmc7CiAJQml0bWFwc2V0ICAqb3RoZXJfc3VicGxh bnM7CiB9IFBhcnRpdGlvblBydW5lSW5mbzsKIApAQCAtMTIyNSw2ICsxMjU1LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGFydGl0aW9uZWRSZWxQcnVuZUluZm8KIAlpbnQJCSAgICpzdWJwbGFuX21hcDsJ Lyogc3VicGxhbiBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0xICovCiAJaW50CQkgICAq c3VicGFydF9tYXA7CS8qIHN1YnBhcnQgaW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCBvciAtMSAq LwogCU9pZAkJICAgKnJlbGlkX21hcDsJCS8qIHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24gaW5k ZXgsIG9yIDAgKi8KKwlJbmRleAkgICAqcnRpX21hcDsJCS8qIFJhbmdlIHRhYmxlIGluZGV4IGJ5 IHBhcnRpdGlvbiBpbmRleCwgMC4gKi8KIAogCS8qCiAJICogaW5pdGlhbF9wcnVuaW5nX3N0ZXBz IHNob3dzIGhvdyB0byBwcnVuZSBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCAoaS5lLiwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv cGxhbmNhY2hlLmgKaW5kZXggOTViOTllM2QyNS4uZmQ3ZjEyOWFlYSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNh Y2hlLmgKQEAgLTE0OCw2ICsxNDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBDYWNoZWRQbGFuCiB7CiAJ aW50CQkJbWFnaWM7CQkJLyogc2hvdWxkIGVxdWFsIENBQ0hFRFBMQU5fTUFHSUMgKi8KIAlMaXN0 CSAgICpzdG10X2xpc3Q7CQkvKiBsaXN0IG9mIFBsYW5uZWRTdG10cyAqLworCUxpc3QJICAgKnBh cnRfcHJ1bmVfcmVzdWx0X2xpc3Q7CS8qIGxpc3Qgb2YgUGFydGl0aW9uUHJ1bmVSZXN1bHQgd2l0 aAorCQkJCQkJCQkJCSAqIG9uZSBlbGVtZW50IGZvciBlYWNoIG9mIHN0bXRfbGlzdDsKKwkJCQkJ CQkJCQkgKiBOSUwgaWYgbm90IGEgZ2VuZXJpYyBwbGFuICovCiAJYm9vbAkJaXNfb25lc2hvdDsJ CS8qIGlzIGl0IGEgIm9uZXNob3QiIHBsYW4/ICovCiAJYm9vbAkJaXNfc2F2ZWQ7CQkvKiBpcyBD YWNoZWRQbGFuIGluIGEgbG9uZy1saXZlZCBjb250ZXh0PyAqLwogCWJvb2wJCWlzX3ZhbGlkOwkJ LyogaXMgdGhlIHN0bXRfbGlzdCBjdXJyZW50bHkgdmFsaWQ/ICovCkBAIC0xNTgsNiArMTYxLDEw IEBAIHR5cGVkZWYgc3RydWN0IENhY2hlZFBsYW4KIAlpbnQJCQlnZW5lcmF0aW9uOwkJLyogcGFy ZW50J3MgZ2VuZXJhdGlvbiBudW1iZXIgZm9yIHRoaXMgcGxhbiAqLwogCWludAkJCXJlZmNvdW50 OwkJLyogY291bnQgb2YgbGl2ZSByZWZlcmVuY2VzIHRvIHRoaXMgc3RydWN0ICovCiAJTWVtb3J5 Q29udGV4dCBjb250ZXh0OwkJLyogY29udGV4dCBjb250YWluaW5nIHRoaXMgQ2FjaGVkUGxhbiAq LworCU1lbW9yeUNvbnRleHQgcGFydF9wcnVuZV9yZXN1bHRfY29udGV4dDsgLyogY29udGV4dCBj b250YWluaW5nCisJCQkJCQkJCQkJCSAgKiBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LAorCQkJCQkJ CQkJCQkgICogYSBjaGlsZCBvZiB0aGUgYWJvdmUKKwkJCQkJCQkJCQkJICAqIGNvbnRleHQgKi8K IH0gQ2FjaGVkUGxhbjsKIAogLyoKLS0gCjIuMjQuMQoK --000000000000ee6d2305dc0c41d2--