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 1nSgN8-00078t-8G for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Mar 2022 14:36:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nSgN6-0007zk-BH for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Mar 2022 14:36:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nSgN5-0007zb-Pc for pgsql-hackers@lists.postgresql.org; Fri, 11 Mar 2022 14:35:59 +0000 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nSgN3-00066f-FK for pgsql-hackers@postgresql.org; Fri, 11 Mar 2022 14:35:59 +0000 Received: by mail-pf1-x42c.google.com with SMTP id d19so701313pfv.7 for ; Fri, 11 Mar 2022 06:35:57 -0800 (PST) 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=OcuzmxtMKEN2KPHf28mYuZIk7KM1F1Qt3uRCAKKAxnI=; b=LHHKRomIFtmgDOYQThidR16Ag/ooR80gPqeim90Hmz3P29ARa0ID+Q2Qgljy3zLgI/ ElSTaTuk5j7LLGTyL7BJDsPpiPvqfZGOxTfJNLrDYnh2YxRXLh3R9Ll0qHH1iXk6dU7A sxWWQAqFNSTaDQcdnZ/OTQB6NukzSasdhXfL8qXTfvoPT9+Zo3yf5pGA9GFUXiOqhi5T gIMccGFsrrGb+45+xinNR6lRADY7TRqEhACL+kjZ+DRjm5Jp1xEiSXUN3KuE5UU2M93M 0KV+CnNZF3NNoNnR5/1o0c7cUpbULxTsMtn6h4RK7nhr+s2+8VW/k/3MKYgzl2zyGqo5 ctIw== 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=OcuzmxtMKEN2KPHf28mYuZIk7KM1F1Qt3uRCAKKAxnI=; b=LUkogRYnQ3us8chLSgeXjHkIDFFYTQMoox0ZkptAtNu6/Z2iteL23RPjk5GEicrje0 Rm3Ka4WHcHiOeH7uClmUUmPXb90FMhrUsqRKGORwiqjOps0pypsUOzk4nqaHbsiCADx1 gp+P4J+aaaegcyEO6oId1YGUzox1T/BGqqY7s0GnkNWb+a7evgNtubk+aqGcinWw5uNI DQtC1jqMIUFvggrNrmJX6cg+E+Sm1To4JLAla6Ckx8MEIjaKmojw8XFp4J1fL+8qam4F DWOD6rIflN+WQHY21g6vxuuofClHV1tquzOougQWNYonmFt4YIEIbNL8fNS8xlL3jjpG a5eQ== X-Gm-Message-State: AOAM531Q9pRg21U1HupCktw8SzAA9CT64NP2i3ZFnClKaWAWMrRwZQxH Eeq3EuAO3za0ZNlwAnPf2Aj1bLdYCUaavSvSG9E= X-Google-Smtp-Source: ABdhPJxMP1HRaw4ps7Gn/QMDp+taCAAA6FVaNf/yZlrgrhxnzBDXSAzVMli0yfkJRs1nbS9boezYwXJIs5tCx8KPD8s= X-Received: by 2002:a62:7981:0:b0:4f7:9e4:96e4 with SMTP id u123-20020a627981000000b004f709e496e4mr10641694pfc.4.1647009354290; Fri, 11 Mar 2022 06:35:54 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Amit Langote Date: Fri, 11 Mar 2022 23:35:37 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Robert Haas Cc: PostgreSQL-development , "David Rowley *EXTERN*" Content-Type: multipart/mixed; boundary="00000000000081364e05d9f23fae" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000081364e05d9f23fae Content-Type: text/plain; charset="UTF-8" On Mon, Mar 7, 2022 at 11:18 PM Amit Langote wrote: > On Fri, Feb 11, 2022 at 7:02 AM Robert Haas wrote: > > I don't love PlanPrepOutput the way you have it. I think one of the > > basic design issues for this patch is: should we think of the prep > > phase as specifically pruning, or is it general prep and pruning is > > the first thing for which we're going to use it? If it's really a > > pre-pruning phase, we could name it that way instead of calling it > > "prep". If it's really a general prep phase, then why does > > PlanPrepOutput contain initially_valid_subnodes as a field? One could > > imagine letting each prep function decide what kind of prep node it > > would like to return, with partition pruning being just one of the > > options. But is that a useful generalization of the basic concept, or > > just pretending that a special-purpose mechanism is more general than > > it really is? > > While it can feel like the latter TBH, I'm inclined to keep > ExecutorPrep generalized. What bothers me about about the > alternative of calling the new phase something less generalized like > ExecutorDoInitPruning() is that that makes the somewhat elaborate API > changes needed for the phase's output to put into QueryDesc, through > which it ultimately reaches the main executor, seem less worthwhile. > > I agree that PlanPrepOutput design needs to be likewise generalized, > maybe like you suggest -- using PlanInitPruningOutput, a child class > of PlanPrepOutput, to return the prep output for plan nodes that > support pruning. > > Thoughts? So I decided to agree with you after all about limiting the scope of this new executor interface, or IOW call it what it is. I have named it ExecutorGetLockRels() to go with the only use case we know for it -- get the set of relations for AcquireExecutorLocks() to lock to validate a plan tree. Its result returned in a node named ExecLockRelsInfo, which contains the set of relations scanned in the plan tree (lockrels) and a list of PlanInitPruningOutput nodes for all nodes that undergo pruning. > > + return CreateQueryDesc(pstmt, NULL, /* XXX pass ExecPrepOutput too? */ > > > > It seems to me that we should do what the XXX suggests. It doesn't > > seem nice if the parallel workers could theoretically decide to prune > > a different set of nodes than the leader. > > OK, will fix. Done. This required adding nodeToString() and stringToNode() support for the nodes produced by the new executor function that wasn't there before. > > Somewhere, we're going to need to document the idea that this may > > permit us to execute a plan that isn't actually fully valid, but that > > we expect to survive because we'll never do anything with the parts of > > it that aren't. Maybe that should be added to the executor README, or > > maybe there's some better place, but I don't think that should remain > > something that's just implicit. > > Agreed. I'd added a description of the new prep phase to executor > README, though the text didn't mention this particular bit. Will fix > to mention it. Rewrote the comments above ExecutorGetLockRels() (previously ExecutorPrep()) and the executor README text to be explicit about the fact that not locking some relations effectively invalidates pruned parts of the plan tree. > > This is not a full review, just some initial thoughts looking through this. > > Thanks again. Will post a new version soon after a bit more polishing. Attached is v5, now broken into 3 patches: 0001: Some refactoring of runtime pruning code 0002: Add a plan_tree_walker 0003: Teach AcquireExecutorLocks to skip locking pruned relations -- Amit Langote EDB: http://www.enterprisedb.com --00000000000081364e05d9f23fae Content-Type: application/octet-stream; name="v5-0002-Add-a-plan_tree_walker.patch" Content-Disposition: attachment; filename="v5-0002-Add-a-plan_tree_walker.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l0mitdz21 RnJvbSAyMmZmMzFjN2IwNTJlYWJiMzJmNGE1MjljNDhmZTQ4MTgwMzMyMTU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAzIE1hciAyMDIyIDE2OjA0OjEzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2NSAyLzNd IEFkZCBhIHBsYW5fdHJlZV93YWxrZXIoKQoKTGlrZSBwbGFuc3RhdGVfdHJlZV93YWxrZXIoKSBi dXQgZm9yIHVuaW5pdGlhbGl6ZWQgcGxhbiB0cmVlcy4KLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9u b2RlRnVuY3MuYyB8IDExNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv aW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3MuaCB8ICAgMyArCiAyIGZpbGVzIGNoYW5nZWQsIDExOSBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCA0N2QwNTY0ZmEyLi5jZGY5Mzdm MTI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtMzEsNiArMzEsMTAgQEAgc3RhdGljIGJvb2wg cGxhbnN0YXRlX3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMsIGJvb2wgKCp3YWxrZXIpICgpLAog CQkJCQkJCQkJdm9pZCAqY29udGV4dCk7CiBzdGF0aWMgYm9vbCBwbGFuc3RhdGVfd2Fsa19tZW1i ZXJzKFBsYW5TdGF0ZSAqKnBsYW5zdGF0ZXMsIGludCBucGxhbnMsCiAJCQkJCQkJCSAgIGJvb2wg KCp3YWxrZXIpICgpLCB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHBsYW5fd2Fsa19zdWJw bGFucyhMaXN0ICpwbGFucywKKwkJCQkgICBib29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgICB2b2lk ICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHBsYW5fd2Fsa19tZW1iZXJzKExpc3QgKnBsYW5zLCBi b29sICgqd2Fsa2VyKSAoKSwgdm9pZCAqY29udGV4dCk7CiAKIAogLyoKQEAgLTQxNDgsMyArNDE1 MiwxMTUgQEAgcGxhbnN0YXRlX3dhbGtfbWVtYmVycyhQbGFuU3RhdGUgKipwbGFuc3RhdGVzLCBp bnQgbnBsYW5zLAogCiAJcmV0dXJuIGZhbHNlOwogfQorCisvKgorICogcGxhbl90cmVlX3dhbGtl ciAtLS0gd2FsayBwbGFudHJlZXMKKyAqCisgKiBUaGUgd2Fsa2VyIGhhcyBhbHJlYWR5IHZpc2l0 ZWQgdGhlIGN1cnJlbnQgbm9kZSwgYW5kIHNvIHdlIG5lZWQgb25seQorICogcmVjdXJzZSBpbnRv IGFueSBzdWItbm9kZXMgaXQgaGFzLgorICovCitib29sCitwbGFuX3RyZWVfd2Fsa2VyKFBsYW4g KnBsYW4sCisJCQkJIGJvb2wgKCp3YWxrZXIpICgpLAorCQkJCSB2b2lkICpjb250ZXh0KQorewor CS8qIEd1YXJkIGFnYWluc3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBjb21wbGV4IHBs YW4gdHJlZXMgKi8KKwljaGVja19zdGFja19kZXB0aCgpOworCisJLyogaW5pdFBsYW4tcyAqLwor CWlmIChwbGFuX3dhbGtfc3VicGxhbnMocGxhbi0+aW5pdFBsYW4sIHdhbGtlciwgY29udGV4dCkp CisJCXJldHVybiB0cnVlOworCisJLyogbGVmdHRyZWUgKi8KKwlpZiAob3V0ZXJQbGFuKHBsYW4p KQorCXsKKwkJaWYgKHdhbGtlcihvdXRlclBsYW4ocGxhbiksIGNvbnRleHQpKQorCQkJcmV0dXJu IHRydWU7CisJfQorCisJLyogcmlnaHR0cmVlICovCisJaWYgKGlubmVyUGxhbihwbGFuKSkKKwl7 CisJCWlmICh3YWxrZXIoaW5uZXJQbGFuKHBsYW4pLCBjb250ZXh0KSkKKwkJCXJldHVybiB0cnVl OworCX0KKworCS8qIHNwZWNpYWwgY2hpbGQgcGxhbnMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGxh bikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJaWYgKHBsYW5fd2Fsa19tZW1iZXJzKCgoQXBw ZW5kICopIHBsYW4pLT5hcHBlbmRwbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNvbnRleHQpKQor CQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCWlm IChwbGFuX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5tZXJnZXBsYW5zLAor CQkJCQkJCQkgIHdhbGtlciwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKEJpdG1hcEFu ZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJCSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwT3I6CisJCQlpZiAocGxh bl93YWxrX21lbWJlcnMoKChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJ CSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNl IFRfQ3VzdG9tU2NhbjoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKEN1c3RvbVNjYW4gKikg cGxhbiktPmN1c3RvbV9wbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNvbnRleHQpKQorCQkJCXJl dHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQlpZiAod2Fs a2VyKCgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5zdWJwbGFuLCBjb250ZXh0KSkKKwkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCisvKgorICogV2FsayBhIGxpc3Qgb2YgU3ViUGxhbnMgKG9yIGluaXRQbGFu cywgd2hpY2ggYWxzbyB1c2UgU3ViUGxhbiBub2RlcykuCisgKi8KK3N0YXRpYyBib29sCitwbGFu X3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMsCisJCQkJICAgYm9vbCAoKndhbGtlcikgKCksCisJ CQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlQbGFubmVkU3RtdCAq cGxhbm5lZHN0bXQgPSAoUGxhbm5lZFN0bXQgKikgY29udGV4dDsKKworCWZvcmVhY2gobGMsIHBs YW5zKQorCXsKKwkJU3ViUGxhbiAqc3AgPSBsZmlyc3Rfbm9kZShTdWJQbGFuLCBsYyk7CisJCVBs YW4gKnAgPSBsaXN0X250aChwbGFubmVkc3RtdC0+c3VicGxhbnMsIHNwLT5wbGFuX2lkIC0gMSk7 CisKKwkJaWYgKHdhbGtlcihwLCBjb250ZXh0KSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJl dHVybiBmYWxzZTsKK30KKworLyoKKyAqIFdhbGsgdGhlIGNvbnN0aXR1ZW50IHBsYW5zIG9mIGEg TW9kaWZ5VGFibGUsIEFwcGVuZCwgTWVyZ2VBcHBlbmQsCisgKiBCaXRtYXBBbmQsIG9yIEJpdG1h cE9yIG5vZGUuCisgKi8KK3N0YXRpYyBib29sCitwbGFuX3dhbGtfbWVtYmVycyhMaXN0ICpwbGFu cywgYm9vbCAoKndhbGtlcikgKCksIHZvaWQgKmNvbnRleHQpCit7CisJTGlzdENlbGwgKmxjOwor CisJZm9yZWFjaChsYywgcGxhbnMpCisJeworCQlpZiAod2Fsa2VyKGxmaXJzdChsYyksIGNvbnRl eHQpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZUZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rl RnVuY3MuaAppbmRleCA5M2M2MGJkZTY2Li5mY2ExMDdhZDY1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9ub2RlRnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3Mu aApAQCAtMTU4LDUgKzE1OCw4IEBAIGV4dGVybiBib29sIHJhd19leHByZXNzaW9uX3RyZWVfd2Fs a2VyKE5vZGUgKm5vZGUsIGJvb2wgKCp3YWxrZXIpICgpLAogc3RydWN0IFBsYW5TdGF0ZTsKIGV4 dGVybiBib29sIHBsYW5zdGF0ZV90cmVlX3dhbGtlcihzdHJ1Y3QgUGxhblN0YXRlICpwbGFuc3Rh dGUsIGJvb2wgKCp3YWxrZXIpICgpLAogCQkJCQkJCQkgIHZvaWQgKmNvbnRleHQpOworc3RydWN0 IFBsYW47CitleHRlcm4gYm9vbCBwbGFuX3RyZWVfd2Fsa2VyKHN0cnVjdCBQbGFuICpwbGFuLCBi b29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgdm9pZCAqY29udGV4dCk7CiAKICNlbmRpZgkJCQkJCQkv KiBOT0RFRlVOQ1NfSCAqLwotLSAKMi4yNC4xCgo= --00000000000081364e05d9f23fae Content-Type: application/octet-stream; name="v5-0003-Teach-AcquireExecutorLocks-to-skip-locking-pruned.patch" Content-Disposition: attachment; filename="v5-0003-Teach-AcquireExecutorLocks-to-skip-locking-pruned.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l0mitdyk0 RnJvbSA2MmZkOGNhODg3ZjYyZGNkODkwMTBiZjQ0NzU1MjllYjE2ZjA3ZDUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjUgMy8z XSBUZWFjaCBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIHNraXAgbG9ja2luZyBwcnVuZWQKIHBh cnRpdGlvbnMKCkluc3RlYWQgb2YgbG9ja2luZyBhbGwgcmVsYXRpb25zIGxpc3RlZCBpbiB0aGUg cmFuZ2UgdGFibGUsIHRoaXMKYXNrcyB0aGUgbmV3IGV4ZWN1dG9yIGZ1bmN0aW9uIEV4ZWN1dG9y R2V0TG9ja1JlbHMoKSB0byByZXR1cm4gYSBzZXQKb2YgcmVsYXRpb25zICh0aGVpciBSVCBpbmRl eGVzKSB0byBsb2NrIG9yIHNpbXBseSB1c2UgdGhlIHNldApnaXZlbiBieSBQbGFubmVkU3RtdC5s b2NrcmVscy4gIFRvIHdpdCwgRXhlY3V0b3JHZXRMb2NrUmVscygpIG11c3QgYmUKY2FsbGVkIGlm IHNvbWUgbm9kZXMgaW4gdGhlIHBsYW4gdHJlZSBjb250YWluIGluaXRpYWwgcHJ1bmluZyBzdGVw cwoocHJ1bmluZyBzdGVwcyBjb250YWluaW5nIGV4cHJlc3Npb25zIHRoYXQgY2FuIGJlIGNvbXB1 dGVkIGJlZm9yZQpiZWZvcmUgdGhlIGV4ZWN1dG9yIHByb3BlciBoYXMgc3RhcnRlZCksIHdoaWNo IHJlc3VsdHMgaW4gdGhlIGxvY2tyZWxzCnNldCB0byBiZSBjb21wdXRlZCBzdWNoIHRoYXQgYW55 IHN1YnBsYW5zIHRoYXQgYXJlIHBydW5lZCBhcyByZXN1bHQgb2YKZG9pbmcgaW5pdGlhbCBwcnVu aW5nIGRvIG5vdCBjb250cmlidXRlIGFueSByZWxhdGlvbnMgdG8gdGhlIHNldC4KVGhhdCBjYW4g cmVzdWx0IGluIGEgbXVjaCBzbWFsbGVyIGxvY2tyZWxzIHNldCB3aGVuIHRoZSBwbGFuIGNvbnRh aW5zCnRob3VzYW5kcyBvZiBjaGlsZCBzdWJwbGFucywgb2Ygd2hpY2ggb25seSBhIHNtYWxsIG51 bWJlciByZW1haW4KYWZ0ZXIgcHJ1bmluZy4KClRoZSByZXN1bHQgb2YgZG9pbmcgdGhlIGluaXRp YWwgcHJ1bmluZyBkdXJpbmcgRXhlY3V0b3JHZXRMb2NrUmVscygpCmlzIHByZXNlcnZlZCBmb3Ig dXNlIGxhdGVyIGR1cmluZyBhY3R1YWwgZXhlY3V0aW9uIGJ5IGNyZWF0aW5nIGEKYSBuZXcgbm9k ZSBjYWxsZWQgUGxhbkluaXRQcnVuaW5nT3V0cHV0IGZvciBlYWNoIHBsYW4gbm9kZSB0aGF0CnVu ZGVyZ29lcyBwcnVuaW5nIGFuZCBhIHNldCBvZiB0aG9zZSBmb3IgdGhlIHdob2xlIHBsYW4gdHJl ZSBhcmUKcHV0IGludG8gYW5vdGhlciBuZXcgbm9kZSBFeGVjTG9ja1JlbHNJbmZvIHRoYXQgcmVw cmVzZW50cyB0aGUgb3V0cHV0Cm9mIGEgZ2l2ZW4gRXhlY3V0b3JHZXRMb2NrUmVscygpIGludm9j YXRpb24uICBFeGVjTG9ja1JlbHNJbmZvcyBhcmUKcGFzc2VkIGRvd24gdGhlIGV4ZWN1dG9yIGFs b25nc2lkZSB0aGUgUGxhbm5lZFN0bXRzLiAgVGhpcwphcnJhbmdlbWVudCBlbnN1cmVzIHRoYXQg dGhlIHNldCBvZiBwbGFuIHRyZWUgbm9kZXMgdGhhdApBY3F1aXJlRXhlY3V0b3JMb2NrcygpIGhh cyBhY3F1aXJlZCBsb2NrcyB0byBwcm90ZWN0IGFuZCB0aGUgb25lCnRoYXQgdGhlIGV4ZWN1dG9y IHdpbGwgaW5pdGlhbGl6ZSBhbmQgZXhlY3V0ZSBhcmUgb25lIGFuZCB0aGUgc2FtZS4KLS0tCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYyAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRl bnNpb24uYyAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAg ICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyAgICAgIHwg ICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAgICAgIHwgIDE3ICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUgICAgICAgICAgICB8ICAyMiArKy0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgICAgICAgIHwgMTgxICsrKysrKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jICAgIHwgIDI3ICsrLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgfCAyMzMgKysrKysrKysrKysrKysrKysr KysrLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgICAgICAgfCAgIDggKwog c3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgIHwgIDQyICsrKystCiBzcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyB8ICA0MiArKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1vZGlmeVRhYmxlLmMgfCAgMjQgKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9zcGku YyAgICAgICAgICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAg ICAgICAgfCAgNTAgKysrKystCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAg ICB8ICA0MSArKysrKwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICAgfCAg MzggKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgfCAgIDMgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgfCAgMTAgKysKIHNyYy9iYWNr ZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYyAgIHwgIDM3ICsrKy0KIHNyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYyAgICAgICAgICAgIHwgIDE1ICstCiBzcmMvYmFja2VuZC90Y29wL3BxdWVy eS5jICAgICAgICAgICAgICB8ICAyMSArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5j YWNoZS5jICAgIHwgMjIwICsrKysrKysrKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC91dGls cy9tbWdyL3BvcnRhbG1lbS5jICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBs YWluLmggICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlv bi5oICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCAgICAgICAgfCAg IDIgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgfCAgIDIgKwogc3Jj L2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFwcGVuZC5oICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUv ZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmggfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Iv bm9kZU1vZGlmeVRhYmxlLmggfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg ICAgICAgICAgfCAgODcgKysrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oICAgICAg ICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICB8 ICAgNyArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICB8ICAxOCArKwog c3JjL2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNs dWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAgICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL3V0aWxz L3BvcnRhbC5oICAgICAgICAgICAgIHwgICA1ICsKIDQxIGZpbGVzIGNoYW5nZWQsIDExMDggaW5z ZXJ0aW9ucygrKSwgMTA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5kZXggNTVj MzhiMDRjNC4uZDQwM2ViMjMwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eXRvLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAgLTU0Miw3ICs1NDIs NyBAQCBCZWdpbkNvcHlUbyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCSgoRFJfY29weSAqKSBkZXN0 KS0+Y3N0YXRlID0gY3N0YXRlOwogCiAJCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyByZXF1ZXN0aW5n IG5vIG91dHB1dCAqLwotCQljc3RhdGUtPnF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFu LCBwc3RhdGUtPnBfc291cmNldGV4dCwKKwkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVy eURlc2MocGxhbiwgTlVMTCwgcHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQkJCUdldEFj dGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJCQkJCUludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJCQkJ ZGVzdCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9j cmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwppbmRleCA5YWJiYjZi NTU1Li5mNjYwN2YyNDU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVh cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKQEAgLTMyNSw3ICszMjUs NyBAQCBFeGVjQ3JlYXRlVGFibGVBcyhQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVRhYmxlQXNT dG10ICpzdG10LAogCQlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJCS8qIENy ZWF0ZSBhIFF1ZXJ5RGVzYywgcmVkaXJlY3Rpbmcgb3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZl ciAqLwotCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5wX3NvdXJj ZXRleHQsCisJCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBwc3RhdGUt PnBfc291cmNldGV4dCwKIAkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFw c2hvdCwKIAkJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIDApOwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMKaW5kZXggZGU4MTM3OWRhMy4uYTlkYzZkMTc1NSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYwpAQCAtNDA3LDcgKzQwNyw3IEBAIEV4cGxhaW5PbmVRdWVyeShRdWVyeSAqcXVlcnksIGlu dCBjdXJzb3JPcHRpb25zLAogCQl9CiAKIAkJLyogcnVuIGl0IChpZiBuZWVkZWQpIGFuZCBwcm9k dWNlIG91dHB1dCAqLwotCQlFeHBsYWluT25lUGxhbihwbGFuLCBpbnRvLCBlcywgcXVlcnlTdHJp bmcsIHBhcmFtcywgcXVlcnlFbnYsCisJCUV4cGxhaW5PbmVQbGFuKHBsYW4sIE5VTEwsIGludG8s IGVzLCBxdWVyeVN0cmluZywgcGFyYW1zLCBxdWVyeUVudiwKIAkJCQkJICAgJnBsYW5kdXJhdGlv biwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCkpOwogCX0KIH0KQEAgLTUxNSw3ICs1 MTUsOCBAQCBFeHBsYWluT25lVXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAq aW50bywgRXhwbGFpblN0YXRlICplcywKICAqIHRvIGNhbGwgaXQuCiAgKi8KIHZvaWQKLUV4cGxh aW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhw bGFpblN0YXRlICplcywKK0V4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwg RXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbywKKwkJCSAgIEludG9DbGF1c2UgKmlu dG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCQkgICBjb25zdCBjaGFyICpxdWVyeVN0cmluZywgUGFy YW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkgICBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwgY29u c3QgaW5zdHJfdGltZSAqcGxhbmR1cmF0aW9uLAogCQkJICAgY29uc3QgQnVmZmVyVXNhZ2UgKmJ1 ZnVzYWdlKQpAQCAtNTYzLDcgKzU2NCw3IEBAIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAkJZGVzdCA9 IE5vbmVfUmVjZWl2ZXI7CiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeSAq LwotCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwgcXVlcnlTdHJpbmcs CisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10LCBleGVjbG9ja3JlbHNp bmZvLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNu YXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCBpbnN0cnVtZW50X29wdGlv bik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKaW5kZXggMTAxMzc5MGRiYi4uMDA4YjhjZTBl OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKQEAgLTc0MSw4ICs3NDEsMTAgQEAgZXhlY3V0 ZV9zcWxfc3RyaW5nKGNvbnN0IGNoYXIgKnNxbCkKIAkJUmF3U3RtdCAgICAqcGFyc2V0cmVlID0g bGZpcnN0X25vZGUoUmF3U3RtdCwgbGMxKTsKIAkJTWVtb3J5Q29udGV4dCBwZXJfcGFyc2V0cmVl X2NvbnRleHQsCiAJCQkJCW9sZGNvbnRleHQ7Ci0JCUxpc3QJICAgKnN0bXRfbGlzdDsKLQkJTGlz dENlbGwgICAqbGMyOworCQlMaXN0CSAgICpzdG10X2xpc3QsCisJCQkJICAgKmV4ZWNsb2NrcmVs c2luZm9fbGlzdDsKKwkJTGlzdENlbGwgICAqbGMyLAorCQkJCSAgICpsYzM7CiAKIAkJLyoKIAkJ ICogV2UgZG8gdGhlIHdvcmsgZm9yIGVhY2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29u dGV4dCwgdG8KQEAgLTc2MiwxMSArNzY0LDEzIEBAIGV4ZWN1dGVfc3FsX3N0cmluZyhjb25zdCBj aGFyICpzcWwpCiAJCQkJCQkJCQkJICAgTlVMTCwKIAkJCQkJCQkJCQkgICAwLAogCQkJCQkJCQkJ CSAgIE5VTEwpOwotCQlzdG10X2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMoc3RtdF9saXN0LCBzcWws IENVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIE5VTEwpOworCQlzdG10X2xpc3QgPSBwZ19wbGFuX3F1 ZXJpZXMoc3RtdF9saXN0LCBzcWwsIENVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIE5VTEwsCisJCQkJ CQkJCQkmZXhlY2xvY2tyZWxzaW5mb19saXN0KTsKIAotCQlmb3JlYWNoKGxjMiwgc3RtdF9saXN0 KQorCQlmb3Jib3RoKGxjMiwgc3RtdF9saXN0LCBsYzMsIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCkK IAkJewogCQkJUGxhbm5lZFN0bXQgKnN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMy KTsKKwkJCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8gPSBsZmlyc3Rfbm9kZShF eGVjTG9ja1JlbHNJbmZvLCBsYzMpOwogCiAJCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwog CkBAIC03NzcsNiArNzgxLDcgQEAgZXhlY3V0ZV9zcWxfc3RyaW5nKGNvbnN0IGNoYXIgKnNxbCkK IAkJCQlRdWVyeURlc2MgICpxZGVzYzsKIAogCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0 bXQsCisJCQkJCQkJCQkJZXhlY2xvY2tyZWxzaW5mbywKIAkJCQkJCQkJCQlzcWwsCiAJCQkJCQkJ CQkJR2V0QWN0aXZlU25hcHNob3QoKSwgTlVMTCwKIAkJCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxM LCAwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwppbmRleCAwNWU3YjYwMDU5Li40ZWY0NGFhZjIzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvbWF0dmlldy5jCkBAIC00MTYsNyArNDE2LDcgQEAgcmVmcmVzaF9tYXR2aWV3 X2RhdGFmaWxsKERlc3RSZWNlaXZlciAqZGVzdCwgUXVlcnkgKnF1ZXJ5LAogCVVwZGF0ZUFjdGl2 ZVNuYXBzaG90Q29tbWFuZElkKCk7CiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MsIHJlZGlyZWN0 aW5nIG91dHB1dCB0byBvdXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQlxdWVyeURlc2MgPSBDcmVhdGVR dWVyeURlc2MocGxhbiwgcXVlcnlTdHJpbmcsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNj KHBsYW4sIE5VTEwsIHF1ZXJ5U3RyaW5nLAogCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJ bnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCWRlc3QsIE5VTEwsIE5VTEwsIDApOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wb3J0YWxjbWRzLmMKaW5kZXggOTkwMmM1YzU2Ni4uODVlNzNkZGRlZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3BvcnRhbGNtZHMuYwpAQCAtMTA3LDYgKzEwNyw3IEBAIFBlcmZvcm1DdXJzb3JPcGVu KFBhcnNlU3RhdGUgKnBzdGF0ZSwgRGVjbGFyZUN1cnNvclN0bXQgKmNzdG10LCBQYXJhbUxpc3RJ bmZvIHBhCiAJCQkJCSAgcXVlcnlTdHJpbmcsCiAJCQkJCSAgQ01EVEFHX1NFTEVDVCwJLyogY3Vy c29yJ3MgcXVlcnkgaXMgYWx3YXlzIGEgU0VMRUNUICovCiAJCQkJCSAgbGlzdF9tYWtlMShwbGFu KSwKKwkJCQkJICBsaXN0X21ha2UxKE5VTEwpLAkvKiBubyBFeGVjTG9ja1JlbHNJbmZvIHRvIHBh c3MgKi8KIAkJCQkJICBOVUxMKTsKIAogCS8qLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5j CmluZGV4IDgwNzM4NTQ3ZWQuLmJiYmY4YmJjYmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3ByZXBhcmUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKQEAg LTE1NSw2ICsxNTUsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCVByZXBh cmVkU3RhdGVtZW50ICplbnRyeTsKIAlDYWNoZWRQbGFuICpjcGxhbjsKIAlMaXN0CSAgICpwbGFu X2xpc3Q7CisJTGlzdAkgICAqcGxhbl9leGVjbG9ja3JlbHNpbmZvX2xpc3Q7CiAJUGFyYW1MaXN0 SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IE5VTEw7CiAJUG9ydGFs CQlwb3J0YWw7CkBAIC0xOTUsNiArMTk2LDcgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQgaW5jcmVtZW50IHBsYW4gcmVmY291bnQg Zm9yIHBvcnRhbCAqLwogCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxhbnNvdXJjZSwg cGFyYW1MSSwgTlVMTCwgTlVMTCk7CiAJcGxhbl9saXN0ID0gY3BsYW4tPnN0bXRfbGlzdDsKKwlw bGFuX2V4ZWNsb2NrcmVsc2luZm9fbGlzdCA9IGNwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2xpc3Q7 CiAKIAkvKgogCSAqIERPIE5PVCBhZGQgYW55IGxvZ2ljIHRoYXQgY291bGQgcG9zc2libHkgdGhy b3cgYW4gZXJyb3IgYmV0d2VlbgpAQCAtMjA0LDcgKzIwNiw3IEBAIEV4ZWN1dGVRdWVyeShQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCQkJCSAgTlVMTCwKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJ CSAgZW50cnktPnBsYW5zb3VyY2UtPmNvbW1hbmRUYWcsCi0JCQkJCSAgcGxhbl9saXN0LAorCQkJ CQkgIHBsYW5fbGlzdCwgcGxhbl9leGVjbG9ja3JlbHNpbmZvX2xpc3QsCiAJCQkJCSAgY3BsYW4p OwogCiAJLyoKQEAgLTU3Niw3ICs1NzgsOSBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVT dG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAljb25z dCBjaGFyICpxdWVyeV9zdHJpbmc7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqcGxh bl9saXN0OwotCUxpc3RDZWxsICAgKnA7CisJTGlzdAkgICAqcGxhbl9leGVjbG9ja3JlbHNpbmZv X2xpc3Q7CisJTGlzdENlbGwgICAqcCwKKwkJCSAgICpwZTsKIAlQYXJhbUxpc3RJbmZvIHBhcmFt TEkgPSBOVUxMOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gTlVMTDsKIAlpbnN0cl90aW1lCXBsYW5z dGFydDsKQEAgLTYzMiwxNSArNjM2LDE4IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0 bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCX0KIAog CXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisJcGxhbl9leGVjbG9ja3JlbHNpbmZvX2xp c3QgPSBjcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCiAJLyogRXhwbGFpbiBlYWNoIHF1 ZXJ5ICovCi0JZm9yZWFjaChwLCBwbGFuX2xpc3QpCisJZm9yYm90aChwLCBwbGFuX2xpc3QsIHBl LCBwbGFuX2V4ZWNsb2NrcmVsc2luZm9fbGlzdCkKIAl7CiAJCVBsYW5uZWRTdG10ICpwc3RtdCA9 IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBwKTsKKwkJRXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xv Y2tyZWxzaW5mbyA9IGxmaXJzdF9ub2RlKEV4ZWNMb2NrUmVsc0luZm8sIHBlKTsKIAogCQlpZiAo cHN0bXQtPmNvbW1hbmRUeXBlICE9IENNRF9VVElMSVRZKQotCQkJRXhwbGFpbk9uZVBsYW4ocHN0 bXQsIGludG8sIGVzLCBxdWVyeV9zdHJpbmcsIHBhcmFtTEksIHF1ZXJ5RW52LAotCQkJCQkJICAg JnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCkpOworCQkJRXhw bGFpbk9uZVBsYW4ocHN0bXQsIGV4ZWNsb2NrcmVsc2luZm8sIGludG8sIGVzLCBxdWVyeV9zdHJp bmcsCisJCQkJCQkgICBwYXJhbUxJLCBxdWVyeUVudiwgJnBsYW5kdXJhdGlvbiwKKwkJCQkJCSAg IChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKIAkJZWxzZQogCQkJRXhwbGFpbk9u ZVV0aWxpdHkocHN0bXQtPnV0aWxpdHlTdG10LCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAogCQkJ CQkJCSAgcGFyYW1MSSwgcXVlcnlFbnYpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvUkVBRE1FIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FCmluZGV4IGJmNWU3MDg2MGQu LjI3MzQxYTI4MTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQorKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKQEAgLTU5LDExICs1OSwyMCBAQCBzdGF0ZSB0 cmVlLiAgUmVhZC1vbmx5IHBsYW4gdHJlZXMgbWFrZSBsaWZlIG11Y2ggc2ltcGxlciBmb3IgcGxh biBjYWNoaW5nIGFuZAogcmV1c2UuCiAKIEEgY29ycmVzcG9uZGluZyBleGVjdXRvciBzdGF0ZSBu b2RlIG1heSBub3QgYmUgY3JlYXRlZCBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cAotaWYgdGhlIGV4 ZWN1dG9yIGRldGVybWluZXMgdGhhdCBhbiBlbnRpcmUgc3VicGxhbiBpcyBub3QgcmVxdWlyZWQg ZHVlIHRvCi1leGVjdXRpb24gdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBkZXRlcm1pbmluZyB0aGF0 IG5vIG1hdGNoaW5nIHJlY29yZHMgd2lsbCBiZQotZm91bmQgdGhlcmUuICBUaGlzIGN1cnJlbnRs eSBvbmx5IG9jY3VycyBmb3IgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2Rlcy4gIEluCi10aGlz IGNhc2UgdGhlIG5vbi1yZXF1aXJlZCBzdWJwbGFucyBhcmUgaWdub3JlZCBhbmQgdGhlIGV4ZWN1 dG9yIHN0YXRlJ3MKLXN1Ym5vZGUgYXJyYXkgd2lsbCBiZWNvbWUgb3V0IG9mIHNlcXVlbmNlIHRv IHRoZSBwbGFuJ3Mgc3VicGxhbiBsaXN0LgoraWYgdGhlIEV4ZWN1dG9yR2V0TG9ja1JlbHMoKSBk ZXRlcm1pbmVzIHRoYXQgYW4gZW50aXJlIHN1YnBsYW4gaXMgbm90IHJlcXVpcmVkCitkdWUgdG8g aW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZyBkZXRlcm1pbmluZyB0aGF0IG5vIG1hdGNoaW5nIHJl Y29yZHMgd2lsbCBiZQorZm91bmQgdGhlcmUsIHdoaWxlIGFsc28gc2tpcHBpbmcgdGhlIGxvY2tp bmcgb2YgcmVsYXRpb24ocykgdGhhdCB3b3VsZCBiZQorc2Nhbm5lZCBieSB0aGUgc3VicGxhbiB3 ZXJlIGl0IG5vdCBwcnVuZWQuICBUaGlzIGN1cnJlbnRseSBvbmx5IG9jY3VycyBmb3IKK0FwcGVu ZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMgKHNlZSBFeGVjR2V0W01lcmdlXUFwcGVuZExvY2tSZWxz KCkpLiAgSW4gdGhpcworY2FzZSwgdGhlIG5vbi1yZXF1aXJlZCBzdWJwbGFucyBhcmUgaWdub3Jl ZCBhbmQgdGhlIGV4ZWN1dG9yIHN0YXRlJ3Mgc3Vibm9kZQorYXJyYXkgd2lsbCBiZWNvbWUgb3V0 IG9mIHNlcXVlbmNlIHRvIHRoZSBwbGFuJ3Mgc3VicGxhbiBsaXN0LgorRXhlY3V0b3JHZXRMb2Nr UmVscygpIHR5cGljYWxseSBydW5zIGJlZm9yZSB0aGUgZXhlY3V0aW9uIHN0YXJ0cywgZm9yIGV4 YW1wbGUsCithcyBwYXJ0IG9mIGNoZWNraW5nIGlmIGEgY2FjaGVkIGdlbmVyaWMgcGxhbiBpcyBz dGlsbCB2YWxpZCwgdGhvdWdoIHRoZQorcmVzdWx0IGl0IHByb2R1Y2VzIChFeGVjTG9ja1JlbHNJ bmZvKSBpcyBtYWRlIGF2YWlsYWJsZSB0byBFeGVjdXRvclN0YXJ0KCkgdmlhCit0aGUgUXVlcnlE ZXNjLiAgRXhlY0luaXROb2RlKCkgb24gdGhlIHBsYW4gbm9kZXMgd2hvc2UgY2hpbGQgc3VicGxh bnMgbWF5IGhhdmUKK2JlZW4gcHJ1bmVkIGFzIHBhcnQgb2YgRXhlY3V0b3JHZXRMb2NrUmVscygp IG11c3QgbG9vayB1cCB0aGUgc3Vydml2aW5nIHNldCBvZgorc3VicGxhbnMgdG8gaW5pdGlhbGl6 ZSBpbiB0aGUgRXhlY0xvY2tSZWxzSW5mbywgaW5zdGVhZCBvZiByZWl0ZXJhdGluZyB0aGUKK2lu aXRpYWwgcHJ1bmluZyBjb21wdXRhdGlvbi4KIAogRWFjaCBQbGFuIG5vZGUgbWF5IGhhdmUgZXhw cmVzc2lvbiB0cmVlcyBhc3NvY2lhdGVkIHdpdGggaXQsIHRvIHJlcHJlc2VudAogaXRzIHRhcmdl dCBsaXN0LCBxdWFsaWZpY2F0aW9uIGNvbmRpdGlvbnMsIGV0Yy4gIFRoZXNlIHRyZWVzIGFyZSBh bHNvCkBAIC0yNDcsNiArMjU2LDkgQEAgUXVlcnkgUHJvY2Vzc2luZyBDb250cm9sIEZsb3cKIAog VGhpcyBpcyBhIHNrZXRjaCBvZiBjb250cm9sIGZsb3cgZm9yIGZ1bGwgcXVlcnkgcHJvY2Vzc2lu ZzoKIAorICBbIEV4ZWN1dG9yR2V0TG9ja1JlbHMgXSAtLS0gYW4gb3B0aW9uYWwgc3RlcCB0byB3 YWxrIG92ZXIgdGhlIHBsYW4gdHJlZQorCQl0byBwcm9kdWNlIGFuIEV4ZWNMb2NrUmVsc0luZm8g dG8gYmUgcGFzc2VkIHRvIENyZWF0ZVF1ZXJ5RGVzYworCiAJQ3JlYXRlUXVlcnlEZXNjCiAKIAlF eGVjdXRvclN0YXJ0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCA1NDlkOWViNjk2Li4zYjFm NTg4MzIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTQ4LDExICs0OCwxNSBAQAogI2lu Y2x1ZGUgImNvbW1hbmRzL21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgi CiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2RlYnVnLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivbm9k ZUFwcGVuZC5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIgorI2luY2x1 ZGUgImV4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVT dWJwbGFuLmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0 LmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIK QEAgLTEwMCw5ICsxMDQsMTg0IEBAIHN0YXRpYyBjaGFyICpFeGVjQnVpbGRTbG90VmFsdWVEZXNj cmlwdGlvbihPaWQgcmVsb2lkLAogCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqbW9kaWZpZWRDb2xz LAogCQkJCQkJCQkJCSAgIGludCBtYXhmaWVsZGxlbik7CiBzdGF0aWMgdm9pZCBFdmFsUGxhblF1 YWxTdGFydChFUFFTdGF0ZSAqZXBxc3RhdGUsIFBsYW4gKnBsYW5UcmVlKTsKK3N0YXRpYyBib29s IEV4ZWNHZXRTY2FuTG9ja1JlbHMoU2NhbiAqc2NhbiwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAq Y29udGV4dCk7CiAKIC8qIGVuZCBvZiBsb2NhbCBkZWNscyAqLwogCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJ RXhlY3V0b3JHZXRMb2NrUmVscworICoKKyAqCQlGaWd1cmUgb3V0IHRoZSBzZXQgb2YgcmVsYXRp b25zIHRvIGxvY2sgdG8gYmUgYWJsZSB0byBleGVjdXRlIGEgZ2l2ZW4KKyAqCQlwbGFuLCBhZnRl ciB0YWtpbmcgaW50byBhY2NvdW50IHRoZSByZXN1bHQgb2YgcGVyZm9ybWluZyBhbnkgaW5pdGlh bAorICoJCXBydW5pbmcgc3RlcHMgcHJlc2VudCBpbiB0aGUgcGxhbi4gIFBlcmZvcm1pbmcgdGhv c2UgcHJ1bmluZyBzdGVwcworICoJCXdvdWxkIGVmZmVjdGl2ZWx5IGludmFsaWRhdGUgdGhlIHBy dW5lZCBzdWJwbGFucyAodGhhdCBpcywgd2lsbCBub3QKKyAqCQliZSBsb29rZWQgYXQgZHVyaW5n IHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZSBwYXJlbnQgcGxhbiksIHNvIHRoZQorICoJCXJl bGF0aW9ucyB0aGF0IHRob3NlIHN1YnBsYW5zIHNjYW4gbmVlZCBub3QgYmUgbG9ja2VkLgorICoK KyAqIEFsb25nIHdpdGggdGhlIHNldCBvZiBSVCBpbmRleGVzIG9mIHJlbGF0aW9ucyB0aGF0IG11 c3QgYmUgbG9ja2VkLCB0aGUKKyAqIHJldHVybmVkIHN0cnVjdCBhbHNvIGNvbnRhaW5zIHRoZSBp bmZvcm1hdGlvbiBsb29rIHVwIFBsYW5Jbml0UHJ1bmluZ091dHB1dAorICogbm9kZXMsIGNvbnRh aW5pbmcgdGhlIHJlc3VsdCBvZiBwZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmluZyAoaWRlbnRpdGll cyBvZgorICogc3Vydml2aW5nIHBhcnRpdGlvbiBzdWJub2RlcyksIGZvciBlYWNoIHBsYW4gbm9k ZSB0aGF0IHVuZGVyZ29lcyBwcnVuaW5nLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBhcnJhbmdl IHRvIHBhc3Mgb24gdGhlIHJldHVybmVkIHN0cnVjdCBkb3duIHRvIHRoZQorICogZXhlY3V0b3Is IHNvIHRoYXQgdGhlIGxhdHRlciBjYW4gcmV1c2UgdGhlIHJlc3VsdCBvZiBpbml0aWFsIHBydW5p bmcgdG8KKyAqIGluaXRpYWxpemUgdGhlIHNhbWUgc2V0IG9mIHN1cnZpdmluZyBzdWJwbGFucywg aW5zdGVhZCBvZiBkb2luZyB0aGUgcHJ1bmluZworICogYWdhaW4gYnkgaXRzZWxmLgorICoKKyAq IFRoaXMgbG9ja3MgcmVsYXRpb25zIHdob3NlIGluZm9ybWF0aW9uIGlzIHBlcnVzZWQgdG8gZG8g dGhlIHBydW5pbmcuIEZvcgorICogZXhhbXBsZSwgYSBwYXJ0aXRpb25lZCB0YWJsZSBiZWZvcmUg cGVydXNpbmcgaXRzIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvCisgKiBjb250YWluZWQgaW4gYW4g QXBwZW5kIG5vZGUgdG8gZG8gcHJ1bmluZyBpbiBFeGVjR2V0QXBwZW5kTG9ja1JlbHMoKS4KKyAq LworRXhlY0xvY2tSZWxzSW5mbyAqCitFeGVjdXRvckdldExvY2tSZWxzKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMpCit7CisJaW50CQludW1QbGFuTm9kZXMg PSBwbGFubmVkc3RtdC0+bnVtUGxhbk5vZGVzOworCUV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgY29u dGV4dDsKKwlFeGVjTG9ja1JlbHNJbmZvICpyZXN1bHQ7CisJTGlzdENlbGwgKmxjOworCisJLyog T25seSBnZXQgaGVyZSBpZiB0aGVyZSBpcyBhbnkgcHJ1bmluZyB0byBkby4gKi8KKwlBc3NlcnQo cGxhbm5lZHN0bXQtPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcpOworCisJY29udGV4dC5zdG10ID0g cGxhbm5lZHN0bXQ7CisJY29udGV4dC5wYXJhbXMgPSBwYXJhbXM7CisKKwkvKiBHbyBkbyBpbml0 IHBydW5pbmcgYW5kIGZpbGwgbG9ja3JlbHMuICovCisJY29udGV4dC5sb2NrcmVscyA9IE5VTEw7 CisJY29udGV4dC5pbml0UHJ1bmluZ091dHB1dHMgPSBOSUw7CisJY29udGV4dC5pcG9JbmRleGVz ID0gcGFsbG9jMChzaXplb2YoaW50KSAqIG51bVBsYW5Ob2Rlcyk7CisJZm9yZWFjaChsYywgcGxh bm5lZHN0bXQtPnN1YnBsYW5zKQorCXsKKwkJUGxhbiAqc3VicGxhbiA9IGxmaXJzdChsYyk7CisK KwkJKHZvaWQpIEV4ZWNHZXRMb2NrUmVscyhzdWJwbGFuLCAmY29udGV4dCk7CisJfQorCisJKHZv aWQpIEV4ZWNHZXRMb2NrUmVscyhwbGFubmVkc3RtdC0+cGxhblRyZWUsICZjb250ZXh0KTsKKwor CXJlc3VsdCA9IG1ha2VOb2RlKEV4ZWNMb2NrUmVsc0luZm8pOworCXJlc3VsdC0+bG9ja3JlbHMg PSBjb250ZXh0LmxvY2tyZWxzOworCXJlc3VsdC0+bnVtUGxhbk5vZGVzID0gbnVtUGxhbk5vZGVz OworCXJlc3VsdC0+aW5pdFBydW5pbmdPdXRwdXRzID0gY29udGV4dC5pbml0UHJ1bmluZ091dHB1 dHM7CisJcmVzdWx0LT5pcG9JbmRleGVzID0gY29udGV4dC5pcG9JbmRleGVzOworCisJcmV0dXJu IHJlc3VsdDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFeGVjR2V0TG9ja1JlbHMKKyAq CQlSZWN1cnNpdmVseSBmaW5kIHJlbGF0aW9ucyB0byBsb2NrIGluIHRoZSBwbGFuIHRyZWUgcm9v dGVkIGF0ICdub2RlJywKKyAqCQlwZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmluZyBpZiB0aGUgbm9k ZSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdG8KKyAqCQlkbyBzbworICoKKyAqCQknbm9kZScg aXMgdGhlIGN1cnJlbnQgbm9kZSBvZiB0aGUgcGxhbiBwcm9kdWNlZCBieSB0aGUgcXVlcnkgcGxh bm5lcgorICoJCSdjb250ZXh0JyBjb250YWlucyB0aGUgUGxhbm5lZFN0bXQgYW5kIHRoZSBpbmZv cm1hdGlvbiBhYm91dCBFWFRFUk4KKyAqCQkJcGFyYW1ldGVycyB0byB1c2UgZm9yIHBhcnRpdGlv biBwcnVuaW5nIGFuZCBhbHNvIHdoZXJlIHRvIGFkZCB0aGUKKyAqCQkJcmVzdWx0IC0tIGxvY2ty ZWxzIGFuZCBQbGFuSW5pdFBydW5pbmdPdXRwdXQgbm9kZXMKKyAqCisgKiBOT1RFOiBFeGVjR2V0 TG9ja1JlbHMgc3Vicm91dGluZSBmb3IgYSBnaXZlbiBub2RlIG11c3QgYWRkIHRoZSBSVCBpbmRl eGVzIG9mCisgKiBhbnkgcmVsYXRpb25zIHRoYXQgaXQgbWFuaXB1bGF0ZXMgdG8gcmVzdWx0LT5s b2NrcmVscy4gIElmIHRoZSBub2RlIG5lZWRzCisgKiBpbml0aWFsIHBydW5pbmcsIGl0IG11c3Qg YWRkIHRoZSByZXN1bHRpbmcgUGxhbkluaXRQcnVuaW5nT3V0cHV0IG5vZGUgdG8KKyAqIGNvbnRl eHQgdXNpbmcgdGhlIEV4ZWNTdG9yZVBsYW5Jbml0UHJ1bmluZ091dHB1dCgpIG1hY3JvLgorICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KK2Jvb2wKK0V4ZWNHZXRMb2NrUmVscyhQbGFuICpub2RlLCBF eGVjR2V0TG9ja1JlbHNDb250ZXh0ICpjb250ZXh0KQoreworCS8qIERvIG5vdGhpbmcgd2hlbiB3 ZSBnZXQgdG8gdGhlIGVuZCBvZiBhIGxlYWYgb24gdHJlZS4gKi8KKwlpZiAobm9kZSA9PSBOVUxM KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBzdGFjayBh dmFpbGFibGUuICovCisJY2hlY2tfc3RhY2tfZGVwdGgoKTsKKworCXN3aXRjaCAobm9kZVRhZyhu b2RlKSkKKwl7CisJCWNhc2UgVF9BcHBlbmQ6CisJCQlpZiAoRXhlY0dldEFwcGVuZExvY2tSZWxz KChBcHBlbmQgKikgbm9kZSwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJaWYgKEV4ZWNHZXRNZXJnZUFwcGVuZExvY2tSZWxz KChNZXJnZUFwcGVuZCAqKSBub2RlLCBjb250ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9TZXFTY2FuOgorCQljYXNlIFRfU2FtcGxlU2NhbjoKKwkJY2FzZSBU X0luZGV4U2NhbjoKKwkJY2FzZSBUX0luZGV4T25seVNjYW46CisJCWNhc2UgVF9CaXRtYXBJbmRl eFNjYW46CisJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKKwkJY2FzZSBUX1RpZFNjYW46CisJCWNh c2UgVF9UaWRSYW5nZVNjYW46CisJCWNhc2UgVF9Gb3JlaWduU2NhbjoKKwkJY2FzZSBUX1N1YnF1 ZXJ5U2NhbjoKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCQlpZiAoRXhlY0dldFNjYW5Mb2NrUmVs cygoU2NhbiAqKSBub2RlLCBjb250ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9Nb2RpZnlUYWJsZToKKwkJCWlmIChFeGVjR2V0TW9kaWZ5VGFibGVMb2NrUmVs cygoTW9kaWZ5VGFibGUgKikgbm9kZSwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQkv KiBwbGFuX3RyZWVfd2Fsa2VyKCkgd2lsbCB2aXNpdCB0aGUgc3VicGxhbiAob3V0ZXJOb2RlKSAq LworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBwbGFu X3RyZWVfd2Fsa2VyKG5vZGUsIEV4ZWNHZXRMb2NrUmVscywgKHZvaWQgKikgY29udGV4dCk7Cit9 CisKKy8qCisgKiBFeGVjR2V0U2NhbkxvY2tSZWxzCisgKiAJCURvIEV4ZWNHZXRMb2NrUmVscygp J3Mgd29yayBmb3IgYSBTY2FuIHBsYW4KKyAqLworc3RhdGljIGJvb2wKK0V4ZWNHZXRTY2FuTG9j a1JlbHMoU2NhbiAqc2NhbiwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29udGV4dCkKK3sKKwlz d2l0Y2ggKG5vZGVUYWcoc2NhbikpCisJeworCQljYXNlIFRfRm9yZWlnblNjYW46CisJCQl7CisJ CQkJRm9yZWlnblNjYW4gKmZzY2FuID0gKEZvcmVpZ25TY2FuICopIHNjYW47CisKKwkJCQljb250 ZXh0LT5sb2NrcmVscyA9IGJtc19hZGRfbWVtYmVycyhjb250ZXh0LT5sb2NrcmVscywKKwkJCQkJ CQkJCQkJCQlmc2Nhbi0+ZnNfcmVsaWRzKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgVF9T dWJxdWVyeVNjYW46CisJCQl7CisJCQkJU3VicXVlcnlTY2FuICpzc2NhbiA9IChTdWJxdWVyeVNj YW4gKikgc2NhbjsKKworCQkJCSh2b2lkKSBFeGVjR2V0TG9ja1JlbHMoKFBsYW4gKikgc3NjYW4t PnN1YnBsYW4sIGNvbnRleHQpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBUX0N1c3RvbVNj YW46CisJCQl7CisJCQkJQ3VzdG9tU2NhbiAqY3NjYW4gPSAoQ3VzdG9tU2NhbiAqKSBzY2FuOwor CQkJCUxpc3RDZWxsICpsYzsKKworCQkJCWNvbnRleHQtPmxvY2tyZWxzID0gYm1zX2FkZF9tZW1i ZXJzKGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJCQkJCQkJCWNzY2FuLT5jdXN0b21fcmVsaWRz KTsKKwkJCQlmb3JlYWNoKGxjLCBjc2Nhbi0+Y3VzdG9tX3BsYW5zKQorCQkJCXsKKwkJCQkJKHZv aWQpIEV4ZWNHZXRMb2NrUmVscygoUGxhbiAqKSBsZmlyc3QobGMpLCBjb250ZXh0KTsKKwkJCQl9 CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJY29udGV4dC0+bG9ja3JlbHMgPSBi bXNfYWRkX21lbWJlcihjb250ZXh0LT5sb2NrcmVscywKKwkJCQkJCQkJCQkJICAgc2Nhbi0+c2Nh bnJlbGlkKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiB0cnVlOworfQogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKgkJRXhlY3V0b3JTdGFydApAQCAtODA0LDYgKzk4Myw3IEBAIEluaXRQbGFuKFF1ZXJ5RGVz YyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewogCUNtZFR5cGUJCW9wZXJhdGlvbiA9IHF1ZXJ5 RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IHF1ZXJ5RGVzYy0+ cGxhbm5lZHN0bXQ7CisJRXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbyA9IHF1ZXJ5 RGVzYy0+ZXhlY2xvY2tyZWxzaW5mbzsKIAlQbGFuCSAgICpwbGFuID0gcGxhbm5lZHN0bXQtPnBs YW5UcmVlOwogCUxpc3QJICAgKnJhbmdlVGFibGUgPSBwbGFubmVkc3RtdC0+cnRhYmxlOwogCUVT dGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7CkBAIC04MjMsNiArMTAwMyw3IEBA IEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCUV4ZWNJbml0UmFu Z2VUYWJsZShlc3RhdGUsIHJhbmdlVGFibGUpOwogCiAJZXN0YXRlLT5lc19wbGFubmVkc3RtdCA9 IHBsYW5uZWRzdG10OworCWVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbyA9IGV4ZWNsb2NrcmVs c2luZm87CiAKIAkvKgogCSAqIE5leHQsIGJ1aWxkIHRoZSBFeGVjUm93TWFyayBhcnJheSBmcm9t IHRoZSBQbGFuUm93TWFyayhzKSwgaWYgYW55LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwu YwppbmRleCA1ZGQ4YWI3ZGIyLi5mMjdmODVhYjRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUGFyYWxsZWwuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy YWxsZWwuYwpAQCAtNjYsNiArNjYsNyBAQAogI2RlZmluZSBQQVJBTExFTF9LRVlfUVVFUllfVEVY VAkJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDA4KQogI2RlZmluZSBQQVJBTExFTF9LRVlf SklUX0lOU1RSVU1FTlRBVElPTiBVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMDkpCiAjZGVm aW5lIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UJCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAw MEEpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9FWEVDTE9DS1JFTFNJTkZPCVVJTlQ2NENPTlNUKDB4 RTAwMDAwMDAwMDAwMDAwQikKIAogI2RlZmluZSBQQVJBTExFTF9UVVBMRV9RVUVVRV9TSVpFCQk2 NTUzNgogCkBAIC0xODIsOCArMTgzLDEwIEBAIEV4ZWNTZXJpYWxpemVQbGFuKFBsYW4gKnBsYW4s IEVTdGF0ZSAqZXN0YXRlKQogCXBzdG10LT50cmFuc2llbnRQbGFuID0gZmFsc2U7CiAJcHN0bXQt PmRlcGVuZHNPblJvbGUgPSBmYWxzZTsKIAlwc3RtdC0+cGFyYWxsZWxNb2RlTmVlZGVkID0gZmFs c2U7CisJcHN0bXQtPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcgPSBmYWxzZTsKIAlwc3RtdC0+cGxh blRyZWUgPSBwbGFuOwogCXBzdG10LT5ydGFibGUgPSBlc3RhdGUtPmVzX3JhbmdlX3RhYmxlOwor CXBzdG10LT5sb2NrcmVscyA9IE5VTEw7CiAJcHN0bXQtPnJlc3VsdFJlbGF0aW9ucyA9IE5JTDsK IAlwc3RtdC0+YXBwZW5kUmVsYXRpb25zID0gTklMOwogCkBAIC01OTYsMTIgKzU5OSwxNSBAQCBF eGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUs CiAJRml4ZWRQYXJhbGxlbEV4ZWN1dG9yU3RhdGUgKmZwZXM7CiAJY2hhcgkgICAqcHN0bXRfZGF0 YTsKIAljaGFyCSAgICpwc3RtdF9zcGFjZTsKKwljaGFyCSAgICpleGVjbG9ja3JlbHNpbmZvX2Rh dGE7CisJY2hhcgkgICAqZXhlY2xvY2tyZWxzaW5mb19zcGFjZTsKIAljaGFyCSAgICpwYXJhbWxp c3RpbmZvX3NwYWNlOwogCUJ1ZmZlclVzYWdlICpidWZ1c2FnZV9zcGFjZTsKIAlXYWxVc2FnZSAg ICp3YWx1c2FnZV9zcGFjZTsKIAlTaGFyZWRFeGVjdXRvckluc3RydW1lbnRhdGlvbiAqaW5zdHJ1 bWVudGF0aW9uID0gTlVMTDsKIAlTaGFyZWRKaXRJbnN0cnVtZW50YXRpb24gKmppdF9pbnN0cnVt ZW50YXRpb24gPSBOVUxMOwogCWludAkJCXBzdG10X2xlbjsKKwlpbnQJCQlleGVjbG9ja3JlbHNp bmZvX2xlbjsKIAlpbnQJCQlwYXJhbWxpc3RpbmZvX2xlbjsKIAlpbnQJCQlpbnN0cnVtZW50YXRp b25fbGVuID0gMDsKIAlpbnQJCQlqaXRfaW5zdHJ1bWVudGF0aW9uX2xlbiA9IDA7CkBAIC02MzAs NiArNjM2LDcgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVT dGF0ZSAqZXN0YXRlLAogCiAJLyogRml4IHVwIGFuZCBzZXJpYWxpemUgcGxhbiB0byBiZSBzZW50 IHRvIHdvcmtlcnMuICovCiAJcHN0bXRfZGF0YSA9IEV4ZWNTZXJpYWxpemVQbGFuKHBsYW5zdGF0 ZS0+cGxhbiwgZXN0YXRlKTsKKwlleGVjbG9ja3JlbHNpbmZvX2RhdGEgPSBub2RlVG9TdHJpbmco ZXN0YXRlLT5lc19leGVjbG9ja3JlbHNpbmZvKTsKIAogCS8qIENyZWF0ZSBhIHBhcmFsbGVsIGNv bnRleHQuICovCiAJcGN4dCA9IENyZWF0ZVBhcmFsbGVsQ29udGV4dCgicG9zdGdyZXMiLCAiUGFy YWxsZWxRdWVyeU1haW4iLCBud29ya2Vycyk7CkBAIC02NTYsNiArNjYzLDExIEBAIEV4ZWNJbml0 UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAlzaG1f dG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBzdG10X2xlbik7CiAJc2htX3Rv Y19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwogCisJLyogRXN0aW1hdGUgc3Bh Y2UgZm9yIHNlcmlhbGl6ZWQgRXhlY0xvY2tSZWxzSW5mby4gKi8KKwlleGVjbG9ja3JlbHNpbmZv X2xlbiA9IHN0cmxlbihleGVjbG9ja3JlbHNpbmZvX2RhdGEpICsgMTsKKwlzaG1fdG9jX2VzdGlt YXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIGV4ZWNsb2NrcmVsc2luZm9fbGVuKTsKKwlzaG1f dG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisKIAkvKiBFc3RpbWF0ZSBz cGFjZSBmb3Igc2VyaWFsaXplZCBQYXJhbUxpc3RJbmZvLiAqLwogCXBhcmFtbGlzdGluZm9fbGVu ID0gRXN0aW1hdGVQYXJhbUxpc3RTcGFjZShlc3RhdGUtPmVzX3BhcmFtX2xpc3RfaW5mbyk7CiAJ c2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJhbWxpc3RpbmZvX2xl bik7CkBAIC03NTAsNiArNzYyLDEyIEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAltZW1jcHkocHN0bXRfc3BhY2UsIHBzdG10X2Rh dGEsIHBzdG10X2xlbik7CiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlf UExBTk5FRFNUTVQsIHBzdG10X3NwYWNlKTsKIAorCS8qIFN0b3JlIHNlcmlhbGl6ZWQgRXhlY0xv Y2tSZWxzSW5mbyAqLworCWV4ZWNsb2NrcmVsc2luZm9fc3BhY2UgPSBzaG1fdG9jX2FsbG9jYXRl KHBjeHQtPnRvYywgZXhlY2xvY2tyZWxzaW5mb19sZW4pOworCW1lbWNweShleGVjbG9ja3JlbHNp bmZvX3NwYWNlLCBleGVjbG9ja3JlbHNpbmZvX2RhdGEsIGV4ZWNsb2NrcmVsc2luZm9fbGVuKTsK KwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9FWEVDTE9DS1JFTFNJTkZP LAorCQkJCSAgIGV4ZWNsb2NrcmVsc2luZm9fc3BhY2UpOworCiAJLyogU3RvcmUgc2VyaWFsaXpl ZCBQYXJhbUxpc3RJbmZvLiAqLwogCXBhcmFtbGlzdGluZm9fc3BhY2UgPSBzaG1fdG9jX2FsbG9j YXRlKHBjeHQtPnRvYywgcGFyYW1saXN0aW5mb19sZW4pOwogCXNobV90b2NfaW5zZXJ0KHBjeHQt PnRvYywgUEFSQUxMRUxfS0VZX1BBUkFNTElTVElORk8sIHBhcmFtbGlzdGluZm9fc3BhY2UpOwpA QCAtMTIzMSw4ICsxMjQ5LDEwIEBAIEV4ZWNQYXJhbGxlbEdldFF1ZXJ5RGVzYyhzaG1fdG9jICp0 b2MsIERlc3RSZWNlaXZlciAqcmVjZWl2ZXIsCiAJCQkJCQkgaW50IGluc3RydW1lbnRfb3B0aW9u cykKIHsKIAljaGFyCSAgICpwc3RtdHNwYWNlOworCWNoYXIJICAgKmV4ZWNsb2NrcmVsc2luZm9z cGFjZTsKIAljaGFyCSAgICpwYXJhbXNwYWNlOwogCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlFeGVj TG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvOwogCVBhcmFtTGlzdEluZm8gcGFyYW1MSTsK IAljaGFyCSAgICpxdWVyeVN0cmluZzsKIApAQCAtMTI0MywxMiArMTI2MywxNyBAQCBFeGVjUGFy YWxsZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAog CXBzdG10c3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9QTEFOTkVEU1RN VCwgZmFsc2UpOwogCXBzdG10ID0gKFBsYW5uZWRTdG10ICopIHN0cmluZ1RvTm9kZShwc3RtdHNw YWNlKTsKIAorCS8qIFJlY29uc3RydWN0IGxlYWRlci1zdXBwbGllZCBFeGVjTG9ja1JlbHNJbmZv LiAqLworCWV4ZWNsb2NrcmVsc2luZm9zcGFjZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxM RUxfS0VZX0VYRUNMT0NLUkVMU0lORk8sCisJCQkJCQkJCQkJICBmYWxzZSk7CisJZXhlY2xvY2ty ZWxzaW5mbyA9IChFeGVjTG9ja1JlbHNJbmZvICopIHN0cmluZ1RvTm9kZShleGVjbG9ja3JlbHNp bmZvc3BhY2UpOworCiAJLyogUmVjb25zdHJ1Y3QgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbXNw YWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgZmFs c2UpOwogCXBhcmFtTEkgPSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNwYWNlKTsKIAogCS8qIENy ZWF0ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5LiAqLwotCXJldHVybiBDcmVhdGVRdWVyeURl c2MocHN0bXQsCisJcmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwgZXhlY2xvY2tyZWxzaW5m bywKIAkJCQkJCSAgIHF1ZXJ5U3RyaW5nLAogCQkJCQkJICAgR2V0QWN0aXZlU25hcHNob3QoKSwg SW52YWxpZFNuYXBzaG90LAogCQkJCQkJICAgcmVjZWl2ZXIsIHBhcmFtTEksIE5VTEwsIGluc3Ry dW1lbnRfb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy dGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggMjE5 NTNmMjUzYi4uZGI4YzRjZDcxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpA QCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAicGFyc2Vy L3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgiCiAjaW5j bHVkZSAicGFydGl0aW9uaW5nL3BhcnRkZXNjLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3Bh cnRwcnVuZS5oIgpAQCAtMTgzLDggKzE4NCwxNCBAQCBzdGF0aWMgY2hhciAqRXhlY0J1aWxkU2xv dFBhcnRpdGlvbktleURlc2NyaXB0aW9uKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJCSAgaW50 IG1heGZpZWxkbGVuKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFydGl0aW9uX2NvbG5vcyhMaXN0 ICpjb2xub3MsIFJlc3VsdFJlbEluZm8gKmxlYWZfcGFydF9ycmkpOwogc3RhdGljIFBhcnRpdGlv blBydW5lU3RhdGUgKkV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLAotCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0aXRpb25wcnVuZWluZm8p Owotc3RhdGljIEJpdG1hcHNldCAqRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQYXJ0 aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKTsKKwkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5m byAqcGFydGl0aW9ucHJ1bmVpbmZvLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9pbml0aWFsX3N0 ZXBzLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9leGVjX3N0ZXBzLAorCQkJCQkJCSAgTGlzdCAq cnRhYmxlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkJICBQYXJ0aXRpb25EaXJlY3Rv cnkgcGFydGRpciwKKwkJCQkJCQkgIEJpdG1hcHNldCAqKnBhcmVudHJlbGlkcyk7CitzdGF0aWMg Qml0bWFwc2V0ICpFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5l U3RhdGUgKnBydW5lc3RhdGUsCisJCQkJCQkJCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZv KTsKIHN0YXRpYyB2b2lkIEV4ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250 ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkgICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkJCQkg ICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNjLApAQCAtMTQ4Myw4ICsxNDkwLDkgQEAgYWRqdXN0X3Bh cnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJp KQogICogY29uc2lkZXJlZCB0byBiZSBhIHN0YWJsZSBleHByZXNzaW9uLCBpdCBjYW4gY2hhbmdl IHZhbHVlIGZyb20gb25lIHBsYW4KICAqIG5vZGUgc2NhbiB0byB0aGUgbmV4dCBkdXJpbmcgcXVl cnkgZXhlY3V0aW9uLiAgU3RhYmxlIGNvbXBhcmlzb24KICAqIGV4cHJlc3Npb25zIHRoYXQgZG9u J3QgaW52b2x2ZSBzdWNoIFBhcmFtcyBhbGxvdyBwYXJ0aXRpb24gcHJ1bmluZyB0byBiZQotICog ZG9uZSBvbmNlIGR1cmluZyBleGVjdXRvciBzdGFydHVwLiAgRXhwcmVzc2lvbnMgdGhhdCBkbyBp bnZvbHZlIHN1Y2ggUGFyYW1zCi0gKiByZXF1aXJlIHVzIHRvIHBydW5lIHNlcGFyYXRlbHkgZm9y IGVhY2ggc2NhbiBvZiB0aGUgcGFyZW50IHBsYW4gbm9kZS4KKyAqIGRvbmUgb25jZSBkdXJpbmcg ZXhlY3V0b3Igc3RhcnR1cCBvciBldmVuIGJlZm9yZSBkdXJpbmcgRXhlY3V0b3JHZXRMb2NrUmVs cygpLgorICogRXhwcmVzc2lvbnMgdGhhdCBkbyBpbnZvbHZlIHN1Y2ggUGFyYW1zIHJlcXVpcmUg dXMgdG8gcHJ1bmUgc2VwYXJhdGVseSBmb3IKKyAqIGVhY2ggc2NhbiBvZiB0aGUgcGFyZW50IHBs YW4gbm9kZS4KICAqCiAgKiBOb3RlIHRoYXQgcHJ1bmluZyBhd2F5IHVubmVlZGVkIHN1YnBsYW5z IGR1cmluZyBleGVjdXRvciBzdGFydHVwIGhhcyB0aGUKICAqIGFkZGVkIGJlbmVmaXQgb2Ygbm90 IGhhdmluZyB0byBpbml0aWFsaXplIHRoZSB1bm5lZWRlZCBzdWJwbGFucyBhdCBhbGwuCkBAIC0x NTAzLDYgKzE1MTEsMTAgQEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBS ZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKQogICoJCXVwZGF0ZWQgdG8gYWNjb3VudCBmb3Ig aW5pdGlhbCBwcnVuaW5nIGhhdmluZyBlbGltaW5hdGVkIHNvbWUgb2YgdGhlCiAgKgkJc3VicGxh bnMsIGlmIGFueS4KICAqCisgKiBFeGVjR2V0TG9ja1JlbHNEb0luaXRpYWxQcnVuaW5nOgorICog CQlEbyBpbml0aWFsIHBydW5pbmcgYXMgcGFydCBvZiBFeGVjR2V0TG9ja1JlbHMoKSBvbiB0aGUg cGFyZW50IHBsYW4KKyAqIAkJbm9kZQorICoKICAqIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFuczoK ICAqCQlSZXR1cm5zIGluZGV4ZXMgb2YgbWF0Y2hpbmcgc3VicGxhbnMgYWZ0ZXIgZXZhbHVhdGlu ZyBhbGwgYXZhaWxhYmxlCiAgKgkJZXhwcmVzc2lvbnMsIHRoYXQgaXMsIHVzaW5nIGV4ZWN1dGlv biBwcnVuaW5nIHN0ZXBzLiAgVGhpcyBmdW5jdGlvbiBjYW4KQEAgLTE1MzEsMjIgKzE1NDMsNTcg QEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogewogCVBh cnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJRVN0YXRlICplc3RhdGUgPSBwbGFuc3Rh dGUtPnN0YXRlOworCVBsYW4gICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKKwlQbGFuSW5pdFBy dW5pbmdPdXRwdXQgKmluaXRQcnVuaW5nT3V0cHV0ID0gTlVMTDsKKwlib29sCWRvX3BydW5pbmcg PSAocHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmcgfHwKKwkJCQkJCSAgcHJ1bmVpbmZvLT5u ZWVkc19leGVjX3BydW5pbmcpOwogCi0JLyogV2UgbWF5IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250 ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLwotCUV4ZWNBc3NpZ25FeHByQ29udGV4 dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisJaWYgKGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbykK Kwl7CisJCWluaXRQcnVuaW5nT3V0cHV0ID0gKFBsYW5Jbml0UHJ1bmluZ091dHB1dCAqKQorCQkJ RXhlY0ZldGNoUGxhbkluaXRQcnVuaW5nT3V0cHV0KGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5m bywgcGxhbik7CiAKLQkvKgotCSAqIENyZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBm b3IgcHJ1bmluZy4KLQkgKi8KLQlwcnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUocGxhbnN0YXRlLCBwcnVuZWluZm8pOworCQlBc3NlcnQoaW5pdFBydW5pbmdPdXRwdXQg IT0gTlVMTCAmJgorCQkJICAgSXNBKGluaXRQcnVuaW5nT3V0cHV0LCBQbGFuSW5pdFBydW5pbmdP dXRwdXQpKTsKKwkJLyogTm8gbmVlZCB0byBkbyBpbml0aWFsIHBydW5pbmcgYWdhaW4sIG9ubHkg ZXhlYyBwcnVuaW5nLiAqLworCQlkb19wcnVuaW5nID0gcHJ1bmVpbmZvLT5uZWVkc19leGVjX3By dW5pbmc7CisJfQorCisJcHJ1bmVzdGF0ZSA9IE5VTEw7CisJaWYgKGRvX3BydW5pbmcpCisJewor CQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0 aW9uIGV4cHJzICovCisJCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7 CisKKwkJLyogRm9yIGRhdGEgcmVhZGluZywgZXhlY3V0b3IgYWx3YXlzIG9taXRzIGRldGFjaGVk IHBhcnRpdGlvbnMgKi8KKwkJaWYgKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBO VUxMKQorCQkJZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID0KKwkJCQlDcmVhdGVQYXJ0 aXRpb25EaXJlY3RvcnkoZXN0YXRlLT5lc19xdWVyeV9jeHQsIGZhbHNlKTsKKworCQkvKgorCQkg KiBDcmVhdGUgdGhlIHdvcmtpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIHBydW5pbmcuICBObyBuZWVk IHRvIGNvbnNpZGVyCisJCSAqIGluaXRpYWwgcHJ1bmluZyBzdGVwcyBpZiB3ZSBoYXZlIGEgUGxh bkluaXRQcnVuaW5nT3V0cHV0LgorCQkgKi8KKwkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0 aXRpb25QcnVuZVN0YXRlKHBsYW5zdGF0ZSwgcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkJICAgaW5p dFBydW5pbmdPdXRwdXQgPT0gTlVMTCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSAgIE5JTCwgcGxhbnN0 YXRlLT5wc19FeHByQ29udGV4dCwKKwkJCQkJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfcGFydGl0aW9u X2RpcmVjdG9yeSwKKwkJCQkJCQkJCQkJCSAgIE5VTEwpOworCX0KIAogCS8qCiAJICogUGVyZm9y bSBhbiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuZSwgaWYgcmVxdWlyZWQuCiAJICovCi0JaWYgKHBy dW5lc3RhdGUtPmRvX2luaXRpYWxfcHJ1bmUpCisJaWYgKGluaXRQcnVuaW5nT3V0cHV0KQorCXsK KwkJLyogRXhlY3V0b3JHZXRMb2NrUmVscygpIGFscmVhZHkgZGlkIGl0IGZvciB1cyEgKi8KKwkJ KmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IGluaXRQcnVuaW5nT3V0cHV0LT5pbml0aWFsbHlf dmFsaWRfc3VicGxhbnM7CisJfQorCWVsc2UgaWYgKHBydW5lc3RhdGUgJiYgcHJ1bmVzdGF0ZS0+ ZG9faW5pdGlhbF9wcnVuZSkKIAl7CiAJCS8qIERldGVybWluZSB3aGljaCBzdWJwbGFucyBzdXJ2 aXZlIGluaXRpYWwgcHJ1bmluZyAqLwotCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gRXhl Y0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlKTsKKwkJKmluaXRpYWxseV92 YWxpZF9zdWJwbGFucyA9IEV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0 ZSwKKwkJCQkJCQkJCQkJCQkJCQkJcHJ1bmVpbmZvKTsKIAl9CiAJZWxzZQogCXsKQEAgLTE1NjQs NyArMTYxMSw3IEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKIAkgKiBpbnZhbGlkIGRhdGEgaW4gcHJ1bmVzdGF0ZSwgYmVjYXVzZSB0aGF0IGRhdGEgd29u J3QgYmUgY29uc3VsdGVkIGFnYWluCiAJICogKGNmIGluaXRpYWwgQXNzZXJ0IGluIEV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucykuCiAJICovCi0JaWYgKHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUg JiYKKwlpZiAocHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmCiAJCWJt c19udW1fbWVtYmVycygqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKSA8IG5fdG90YWxfc3VicGxh bnMpCiAJCUV4ZWNQYXJ0aXRpb25QcnVuZUZpeFN1YlBsYW5JbmRleGVzKHBydW5lc3RhdGUsCiAJ CQkJCQkJCQkJCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMsCkBAIC0xNTczLDEyICsxNjIwLDgz IEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAlyZXR1 cm4gcHJ1bmVzdGF0ZTsKIH0KIAorLyoKKyAqIEV4ZWNHZXRMb2NrUmVsc0RvSW5pdGlhbFBydW5p bmcKKyAqCQlQZXJmb3JtIGluaXRpYWwgcHJ1bmluZyBhcyBwYXJ0IG9mIGRvaW5nIEV4ZWNHZXRM b2NrUmVscygpIG9uIHRoZSBwYXJlbnQKKyAqCQlwbGFuIG5vZGUKKyAqLworQml0bWFwc2V0ICoK K0V4ZWNHZXRMb2NrUmVsc0RvSW5pdGlhbFBydW5pbmcoUGxhbiAqcGxhbiwgRXhlY0dldExvY2tS ZWxzQ29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8pCit7CisJTGlzdAkJICpydGFibGUgPSBjb250ZXh0LT5zdG10LT5ydGFibGU7CisJUGFyYW1M aXN0SW5mbyBwYXJhbXMgPSBjb250ZXh0LT5wYXJhbXM7CisJRXhwckNvbnRleHQJICplY29udGV4 dDsKKwlQYXJ0aXRpb25EaXJlY3RvcnkgcGRpcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQs CisJCQkJICB0bXBjb250ZXh0OworCUJpdG1hcHNldAkgKnBhcmVudHJlbGlkczsKKwlQYXJ0aXRp b25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCVBsYW5Jbml0UHJ1bmluZ091dHB1dCAqaW5pdFBy dW5pbmdPdXRwdXQ7CisKKwkvKgorCSAqIEEgdGVtcG9yYXJ5IGNvbnRleHQgdG8gYWxsb2NhdGUg c3R1ZmYgbmVlZGRlZCB0byBydW4gdGhlIHBydW5pbmcgc3RlcHMuCisJICovCisJdG1wY29udGV4 dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJ CSAgICJpbml0aWFsIHBydW5pbmcgd29ya2luZyBkYXRhIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1w Y29udGV4dCk7CisKKwkvKgorCSAqIFBhcnRpdGlvbkRpcmVjdG9yeSB0byBsb29rIHVwIHBhcnRp dGlvbiBkZXNjcmlwdG9ycywgd2hpY2ggb21pdHMKKwkgKiBkZXRhY2hlZCBwYXJ0aXRpb25zLCBq dXN0IGxpa2UgaW4gdGhlIGV4ZWN1dG9yIHByb3Blci4KKwkgKi8KKwlwZGlyID0gQ3JlYXRlUGFy dGl0aW9uRGlyZWN0b3J5KEN1cnJlbnRNZW1vcnlDb250ZXh0LCBmYWxzZSk7CisKKwkvKgorCSAq IFdlIGRvbid0IHlldCBoYXZlIGEgUGxhblN0YXRlIGZvciB0aGUgcGFyZW50IHBsYW4gbm9kZSwg c28gbXVzdCBjcmVhdGUKKwkgKiBhIHN0YW5kYWxvbmUgRXhwckNvbnRleHQgdG8gZXZhbHVhdGUg cHJ1bmluZyBleHByZXNzaW9ucywgZXF1aXBwZWQgd2l0aAorCSAqIHRoZSBpbmZvcm1hdGlvbiBh Ym91dCB0aGUgRVhURVJOIHBhcmFtZXRlcnMgdGhhdCB0aGUgY2FsbGVyIHBhc3NlZCB1cy4KKwkg KiBOb3RlIHRoYXQgdGhhdCdzIG9rYXkgYmVjYXVzZSB0aGUgaW5pdGlhbCBwcnVuaW5nIHN0ZXBz IGRvIG5vdCBjb250YWluCisJICogYW55dGhpbmcgdGhhdCByZXF1aXJlcyB0aGUgZXhlY3V0aW9u IHRvIGhhdmUgc3RhcnRlZC4KKwkgKi8KKwllY29udGV4dCA9IENyZWF0ZVN0YW5kYWxvbmVFeHBy Q29udGV4dCgpOworCWVjb250ZXh0LT5lY3h0X3BhcmFtX2xpc3RfaW5mbyA9IHBhcmFtczsKKwlw cnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoTlVMTCwgcHJ1bmVpbmZv LAorCQkJCQkJCQkJCQkgICB0cnVlLCBmYWxzZSwKKwkJCQkJCQkJCQkJICAgcnRhYmxlLCBlY29u dGV4dCwKKwkJCQkJCQkJCQkJICAgcGRpciwgJnBhcmVudHJlbGlkcyk7CisJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJLyogRG8gdGhlIHBydW5pbmcgYW5kIHBvcHVsYXRl IGEgUGxhbkluaXRQcnVuaW5nT3V0cHV0IGZvciB0aGlzIG5vZGUuICovCisJaW5pdFBydW5pbmdP dXRwdXQgPSBtYWtlTm9kZShQbGFuSW5pdFBydW5pbmdPdXRwdXQpOworCWluaXRQcnVuaW5nT3V0 cHV0LT5pbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPQorCQlFeGVjRmluZEluaXRpYWxNYXRjaGlu Z1N1YlBsYW5zKHBydW5lc3RhdGUsIHBydW5laW5mbyk7CisJRXhlY1N0b3JlUGxhbkluaXRQcnVu aW5nT3V0cHV0KGNvbnRleHQsIGluaXRQcnVuaW5nT3V0cHV0LCBwbGFuKTsKKworCS8qCisJICog UmVwb3J0IHBhcmVudCBwYXJ0aXRpb25lZCB0YWJsZXMgYXMgbG9ja2luZyB0YXJnZXRzLCB0aG91 Z2ggdGhleQorCSAqIHdvdWxkIGFscmVhZHkgYmUgbG9ja2VkIGJ5IEV4ZWNDcmVhdGVQYXJ0aXRp b25QcnVuZVN0YXRlKCkuCisJICovCisJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhwYXJlbnRyZWxp ZHMpID4gMCk7CisJY29udGV4dC0+bG9ja3JlbHMgPSBibXNfYWRkX21lbWJlcnMoY29udGV4dC0+ bG9ja3JlbHMsIHBhcmVudHJlbGlkcyk7CisKKwlGcmVlRXhwckNvbnRleHQoZWNvbnRleHQsIHRy dWUpOworCURlc3Ryb3lQYXJ0aXRpb25EaXJlY3RvcnkocGRpcik7CisJTWVtb3J5Q29udGV4dERl bGV0ZSh0bXBjb250ZXh0KTsKKworCXJldHVybiBpbml0UHJ1bmluZ091dHB1dC0+aW5pdGlhbGx5 X3ZhbGlkX3N1YnBsYW5zOworfQorCiAvKgogICogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUKICAqCQlCdWlsZCB0aGUgZGF0YSBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGNhbGxpbmcKICAq CQlFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zIGFuZCBFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMuCiAgKgotICogJ3BsYW5zdGF0ZScgaXMgdGhlIHBhcmVudCBwbGFuIG5vZGUncyBleGVj dXRpb24gc3RhdGUuCisgKiAncGxhbnN0YXRlJywgaWYgbm90IE5VTEwsIGlzIHRoZSBwYXJlbnQg cGxhbiBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlLiAgSXQKKyAqIGNhbiBiZSBOVUxMIGlmIGJlaW5n IGNhbGxlZCBiZWZvcmUgRXhlY3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlLAorICogJ3J0YWJs ZScgKHJhbmdlIHRhYmxlKSwgJ2Vjb250ZXh0JywgYW5kICdwYXJ0ZGlyJyBtdXN0IGJlIGV4cGxp Y2l0bHkKKyAqIHByb3ZpZGVkLgogICoKICAqICdwYXJ0aXRpb25wcnVuZWluZm8nIGlzIGEgUGFy dGl0aW9uUHJ1bmVJbmZvIGFzIGdlbmVyYXRlZCBieQogICogbWFrZV9wYXJ0aXRpb25fcHJ1bmVp bmZvLiAgSGVyZSB3ZSBidWlsZCBhIFBhcnRpdGlvblBydW5lU3RhdGUgY29udGFpbmluZyBhCkBA IC0xNTkwLDI2ICsxNzA4LDM1IEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwKICAqIGFzIGNoaWxkcmVuLiAgVGhlIGRhdGEgc3RvcmVkIGluIGVhY2ggUGFy dGl0aW9uZWRSZWxQcnVuaW5nRGF0YSBjYW4gYmUKICAqIHJlLXVzZWQgZWFjaCB0aW1lIHdlIHJl LWV2YWx1YXRlIHdoaWNoIHBhcnRpdGlvbnMgbWF0Y2ggdGhlIHBydW5pbmcgc3RlcHMKICAqIHBy b3ZpZGVkIGluIGVhY2ggUGFydGl0aW9uZWRSZWxQcnVuZUluZm8uCisgKgorICogVGhlIFJUIGlu ZGV4ZXMgb2YgcGFyZW50IHBhcnRpdGlvbmVkIHRhYmxlIHRoYXQgYXJlIGxvY2tlZCBoZXJlIHRv IHBlcnVzZQorICogdGhlaXIgUGFydGl0aW9uZWRSZWxQcnVuaW5nSW5mbyBhcmUgcmV0dXJuZWQg aW4gKnBhcmVudHJlbGlkcyBpZiBhc2tlZAorICogZm9yIGJ5IHRoZSBjYWxsZXIuCiAgKi8KIHN0 YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICoKIEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRl KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0 aXRpb25wcnVuZWluZm8pCisJCQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRpdGlvbnBy dW5laW5mbywKKwkJCQkJCQkgIGJvb2wgY29uc2lkZXJfaW5pdGlhbF9zdGVwcywKKwkJCQkJCQkg IGJvb2wgY29uc2lkZXJfZXhlY19zdGVwcywKKwkJCQkJCQkgIExpc3QgKnJ0YWJsZSwgRXhwckNv bnRleHQgKmVjb250ZXh0LAorCQkJCQkJCSAgUGFydGl0aW9uRGlyZWN0b3J5IHBhcnRkaXIsCisJ CQkJCQkJICBCaXRtYXBzZXQgKipwYXJlbnRyZWxpZHMpCiB7Ci0JRVN0YXRlCSAgICplc3RhdGUg PSBwbGFuc3RhdGUtPnN0YXRlOworCUVTdGF0ZQkgICAqZXN0YXRlID0gcGxhbnN0YXRlID8gcGxh bnN0YXRlLT5zdGF0ZSA6IE5VTEw7CiAJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsK IAlpbnQJCQluX3BhcnRfaGllcmFyY2hpZXM7CiAJTGlzdENlbGwgICAqbGM7CiAJaW50CQkJaTsK LQlFeHByQ29udGV4dAkqZWNvbnRleHQgPSBwbGFuc3RhdGUtPnBzX0V4cHJDb250ZXh0OwogCi0J LyogRm9yIGRhdGEgcmVhZGluZywgZXhlY3V0b3IgYWx3YXlzIG9taXRzIGRldGFjaGVkIHBhcnRp dGlvbnMgKi8KLQlpZiAoZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID09IE5VTEwpCi0J CWVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9Ci0JCQlDcmVhdGVQYXJ0aXRpb25EaXJl Y3RvcnkoZXN0YXRlLT5lc19xdWVyeV9jeHQsIGZhbHNlKTsKKwlBc3NlcnQoKGVzdGF0ZSAhPSBO VUxMKSB8fAorCQkJKHBhcnRkaXIgIT0gTlVMTCAmJiBlY29udGV4dCAhPSBOVUxMICYmIHJ0YWJs ZSAhPSBOSUwpKTsKIAogCW5fcGFydF9oaWVyYXJjaGllcyA9IGxpc3RfbGVuZ3RoKHBhcnRpdGlv bnBydW5laW5mby0+cHJ1bmVfaW5mb3MpOwogCUFzc2VydChuX3BhcnRfaGllcmFyY2hpZXMgPiAw KTsKIAorCWlmIChwYXJlbnRyZWxpZHMpCisJCSpwYXJlbnRyZWxpZHMgPSBOVUxMOworCiAJLyoK IAkgKiBBbGxvY2F0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUKIAkgKi8KQEAgLTE2NTYsMTkgKzE3ODMs NTggQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUs CiAJCQlQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyAqcGluZm8gPSBsZmlyc3Rfbm9kZShQYXJ0aXRp b25lZFJlbFBydW5lSW5mbywgbGMyKTsKIAkJCVBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnBw cnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFbal07CiAJCQlSZWxhdGlvbglwYXJ0 cmVsOworCQkJYm9vbAkJY2xvc2VfcGFydHJlbCA9IGZhbHNlOwogCQkJUGFydGl0aW9uRGVzYyBw YXJ0ZGVzYzsKIAkJCVBhcnRpdGlvbktleSBwYXJ0a2V5OwogCiAJCQkvKgotCQkJICogV2UgY2Fu IHJlbHkgb24gdGhlIGNvcGllcyBvZiB0aGUgcGFydGl0aW9uZWQgdGFibGUncyBwYXJ0aXRpb24K LQkJCSAqIGtleSBhbmQgcGFydGl0aW9uIGRlc2NyaXB0b3IgYXBwZWFyaW5nIGluIGl0cyByZWxj YWNoZSBlbnRyeSwKLQkJCSAqIGJlY2F1c2UgdGhhdCBlbnRyeSB3aWxsIGJlIGhlbGQgb3BlbiBh bmQgbG9ja2VkIGZvciB0aGUKLQkJCSAqIGR1cmF0aW9uIG9mIHRoaXMgZXhlY3V0b3IgcnVuLgor CQkJICogTXVzdCBvcGVuIHRoZSByZWxhdGlvbiBieSBvdXJzZWx2ZXMgd2hlbiBjYWxsZWQgYmVm b3JlIHRoZQorCQkJICogZXhlY3V0aW9uIGhhcyBzdGFydGVkLCBzdWNoIGFzLCB3aGVuIGNhbGxl ZCBkdXJpbmcKKwkJCSAqIEV4ZWN1dG9yR2V0TG9ja1JlbHMoKSBvbiBhIGNhY2hlZCBwbGFuLiAg SW4gdGhhdCBjYXNlLAorCQkJICogc3ViLXBhcnRpdGlvbnMgbXVzdCBiZSBsb2NrZWQsIGJlY2F1 c2UgQWNxdWlyZVBsYW5uZXJMb2NrcygpCisJCQkgKiB3b3VsZCBub3QgaGF2ZSBzZWVuIHRoZW0u ICgxc3QgcmVsYXRpb24gaW4gYSBwYXJ0cmVscHJ1bmVpbmZvcworCQkJICogbGlzdCBpcyBhbHdh eXMgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgYXBwZWFyaW5nIGluIHRoZQorCQkJICogcXVl cnksIHdoaWNoIEFjcXVpcmVQbGFubmVyTG9ja3MoKSB3b3VsZCBoYXZlIGxvY2tlZDsgdGhlCisJ CQkgKiBBc3NlcnQgaW4gcmVsYXRpb25fb3BlbigpIGd1YXJkcyB0aGF0IGFzc3VtcHRpb24uKQor CQkJICovCisJCQlpZiAoZXN0YXRlID09IE5VTEwpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAq cnRlID0gcnRfZmV0Y2gocGluZm8tPnJ0aW5kZXgsIHJ0YWJsZSk7CisJCQkJaW50CQlsb2NrbW9k ZSA9IChqID09IDApID8gTm9Mb2NrIDogcnRlLT5yZWxsb2NrbW9kZTsKKworCQkJCXBhcnRyZWwg PSB0YWJsZV9vcGVuKHJ0ZS0+cmVsaWQsIGxvY2ttb2RlKTsKKwkJCQljbG9zZV9wYXJ0cmVsID0g dHJ1ZTsKKworCQkJCS8qCisJCQkJICogQWxzbyByZXBvcnQgdGhlIHBhcnRpdGlvbmVkIHRhYmxl IGFzIGhhdmluZyBiZWVuIGxvY2tlZC4KKwkJCQkgKiBYWFggLSBhY3R1YWxseSwgKnBhcmVudHJl bGlkcyBzZXQgaXMgbGF0ZXIgbWVyZ2VkIGJ5IHRoZQorCQkJCSAqIGNhbGxlciBpbnRvIHRoZSBz ZXQgb2YgcmVsYXRpb25zICJ0by1iZSBsb2NrZWQiIGJ5CisJCQkJICogQWNxdWlyZUV4ZWN1dG9y TG9ja3MoKSwgdGh1cyBjYXVzaW5nIHRoZSBsb2NrIG9uIHRoaXMKKwkJCQkgKiB0YWJsZSB0byBi ZSByZXF1ZXN0ZWQgYWdhaW4uCisJCQkJICovCisJCQkJQXNzZXJ0KHBhcmVudHJlbGlkcyAhPSBO VUxMKTsKKwkJCQkqcGFyZW50cmVsaWRzID0gYm1zX2FkZF9tZW1iZXIoKnBhcmVudHJlbGlkcywg cGluZm8tPnJ0aW5kZXgpOworCQkJfQorCQkJZWxzZQorCQkJCXBhcnRyZWwgPSBFeGVjR2V0UmFu Z2VUYWJsZVJlbGF0aW9uKGVzdGF0ZSwgcGluZm8tPnJ0aW5kZXgpOworCisJCQkvKgorCQkJICog V2UgY2FuIHJlbHkgb24gdGhlIGNvcHkgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0 aW9uCisJCQkgKiBrZXkgZnJvbSBpbiBpdHMgcmVsY2FjaGUgZW50cnksIGJlY2F1c2UgaXQgY2Fu J3QgY2hhbmdlIChvcgorCQkJICogZ2V0IGRlc3Ryb3llZCkgYXMgbG9uZyBhcyB0aGUgcmVsYXRp b24gaXMgbG9ja2VkLiAgUGFydGl0aW9uCisJCQkgKiBkZXNjcmlwdG9yIGlzIHRha2VuIGZyb20g dGhlIFBhcnRpdGlvbkRpcmVjdG9yeSBhc3NvY2lhdGVkIHdpdGgKKwkJCSAqIHRoZSB0YWJsZSB0 aGF0IGlzIGhlbGQgb3BlbiBsb25nIGVub3VnaCBmb3IgdGhlIGRlc2NyaXB0b3IgdG8KKwkJCSAq IHJlbWFpbiB2YWxpZCB3aGlsZSBpdCdzIHVzZWQgdG8gcGVyZm9ybSB0aGUgcHJ1bmluZyBzdGVw cy4KIAkJCSAqLwotCQkJcGFydHJlbCA9IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oZXN0YXRl LCBwaW5mby0+cnRpbmRleCk7CiAJCQlwYXJ0a2V5ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25LZXko cGFydHJlbCk7Ci0JCQlwYXJ0ZGVzYyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChlc3RhdGUt PmVzX3BhcnRpdGlvbl9kaXJlY3RvcnksCi0JCQkJCQkJCQkJCQlwYXJ0cmVsKTsKKwkJCXBhcnRk ZXNjID0gUGFydGl0aW9uRGlyZWN0b3J5TG9va3VwKHBhcnRkaXIsIHBhcnRyZWwpOworCisJCQkv KgorCQkJICogTXVzdCBjbG9zZSBwYXJ0cmVsLCBrZWVwaW5nIHRoZSBsb2NrIHRha2VuLCBpZiB3 ZSdyZSBub3QgdXNpbmcKKwkJCSAqIEVTdGF0ZSdzIGVudHJ5LgorCQkJICovCisJCQlpZiAoY2xv c2VfcGFydHJlbCkKKwkJCQl0YWJsZV9jbG9zZShwYXJ0cmVsLCBOb0xvY2spOwogCiAJCQkvKgog CQkJICogSW5pdGlhbGl6ZSB0aGUgc3VicGxhbl9tYXAgYW5kIHN1YnBhcnRfbWFwLgpAQCAtMTc3 MCw3ICsxOTM2LDcgQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpw bGFuc3RhdGUsCiAJCQkgKiBJbml0aWFsaXplIHBydW5pbmcgY29udGV4dHMgYXMgbmVlZGVkLgog CQkJICovCiAJCQlwcHJ1bmUtPmluaXRpYWxfcHJ1bmluZ19zdGVwcyA9IHBpbmZvLT5pbml0aWFs X3BydW5pbmdfc3RlcHM7Ci0JCQlpZiAocGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcykKKwkJ CWlmIChjb25zaWRlcl9pbml0aWFsX3N0ZXBzICYmIHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3Rl cHMpCiAJCQl7CiAJCQkJRXhlY0luaXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5pbml0aWFsX2Nv bnRleHQsCiAJCQkJCQkJCQkgICBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLApAQCAtMTc4 MCw3ICsxOTQ2LDcgQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpw bGFuc3RhdGUsCiAJCQkJcHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSA9IHRydWU7CiAJCQl9 CiAJCQlwcHJ1bmUtPmV4ZWNfcHJ1bmluZ19zdGVwcyA9IHBpbmZvLT5leGVjX3BydW5pbmdfc3Rl cHM7Ci0JCQlpZiAocGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcykKKwkJCWlmIChjb25zaWRlcl9l eGVjX3N0ZXBzICYmIHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMpCiAJCQl7CiAJCQkJRXhlY0lu aXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5leGVjX2NvbnRleHQsCiAJCQkJCQkJCQkgICBwaW5m by0+ZXhlY19wcnVuaW5nX3N0ZXBzLApAQCAtMTg5OSw3ICsyMDY1LDggQEAgRXhlY0luaXRQcnVu aW5nQ29udGV4dChQYXJ0aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAgKiBpcyByZXF1aXJl ZC4KICAqLwogc3RhdGljIEJpdG1hcHNldCAqCi1FeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBs YW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUpCitFeGVjRmluZEluaXRpYWxNYXRj aGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCisJCQkJCQkJCVBh cnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogewogCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5V TEw7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtMTkwOSw4ICsyMDc2LDggQEAgRXhl Y0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0 YXRlKQogCUFzc2VydChwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKTsKIAogCS8qCi0JICog U3dpdGNoIHRvIGEgdGVtcCBjb250ZXh0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIHRoZSBl eGVjdXRvcidzCi0JICogcXVlcnktbGlmZXNwYW4gbWVtb3J5IGNvbnRleHQuCisJICogU3dpdGNo IHRvIGEgdGVtcCBjb250ZXh0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIHRoZSBsb25nZXIt dGVybQorCSAqIG1lbW9yeSBjb250ZXh0LgogCSAqLwogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8ocHJ1bmVzdGF0ZS0+cHJ1bmVfY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1V0aWxzLmMKaW5kZXggOWRmMWY4MWVhOC4uNzI0NmY5MTc1ZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1V0aWxzLmMKQEAgLTExOSw2ICsxMTksNyBAQCBDcmVhdGVFeGVjdXRvclN0YXRlKHZvaWQpCiAJ ZXN0YXRlLT5lc19yZWxhdGlvbnMgPSBOVUxMOwogCWVzdGF0ZS0+ZXNfcm93bWFya3MgPSBOVUxM OwogCWVzdGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBOVUxMOworCWVzdGF0ZS0+ZXNfZXhlY2xvY2ty ZWxzaW5mbyA9IE5VTEw7CiAKIAllc3RhdGUtPmVzX2p1bmtGaWx0ZXIgPSBOVUxMOwogCkBAIC03 ODUsNiArNzg2LDEzIEBAIEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oRVN0YXRlICplc3RhdGUs IEluZGV4IHJ0aSkKIAogCUFzc2VydChydGkgPiAwICYmIHJ0aSA8PSBlc3RhdGUtPmVzX3Jhbmdl X3RhYmxlX3NpemUpOwogCisJLyoKKwkgKiBBIGNyb3NzLWNoZWNrIHRoYXQgQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoKSBoYXNuJ3QgbWlzc2VkIGFueSByZWxhdGlvbnMKKwkgKiBpdCBtdXN0IG5vdCBo YXZlLgorCSAqLworCUFzc2VydChlc3RhdGUtPmVzX2V4ZWNsb2NrcmVsc2luZm8gPT0gTlVMTCB8 fAorCQkgICBibXNfaXNfbWVtYmVyKHJ0aSwgZXN0YXRlLT5lc19leGVjbG9ja3JlbHNpbmZvLT5s b2NrcmVscykpOworCiAJcmVsID0gZXN0YXRlLT5lc19yZWxhdGlvbnNbcnRpIC0gMV07CiAJaWYg KHJlbCA9PSBOVUxMKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0 aW9ucy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKaW5kZXggZjk0NjBhZTUw Ni4uYTIxODJhNmIxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25z LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTg0NCw3ICs4NDQs NyBAQCBwb3N0cXVlbF9zdGFydChleGVjdXRpb25fc3RhdGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hl UHRyIGZjYWNoZSkKIAllbHNlCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCi0JZXMtPnFkID0g Q3JlYXRlUXVlcnlEZXNjKGVzLT5zdG10LAorCWVzLT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+ c3RtdCwgTlVMTCwKIAkJCQkJCQkgZmNhY2hlLT5zcmMsCiAJCQkJCQkJIEdldEFjdGl2ZVNuYXBz aG90KCksCiAJCQkJCQkJIEludmFsaWRTbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YwppbmRleCA1YjZkM2ViMjNiLi45NjY2MTVmNjcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jCkBAIC05NCw2ICs5NCw0NSBAQCBzdGF0aWMgYm9vbCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0 KEFwcGVuZFN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3VsdCk7CiBzdGF0aWMgdm9p ZCBFeGVjQXBwZW5kQXN5bmNFdmVudFdhaXQoQXBwZW5kU3RhdGUgKm5vZGUpOwogc3RhdGljIHZv aWQgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBwZW5kU3RhdGUgKm5vZGUpOwogCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgkJRXhlY0dldEFwcGVuZExvY2tSZWxzCisgKgkJCURvIEV4ZWNHZXRMb2NrUmVs cygpJ3Mgd29yayBmb3IgYW4gQXBwZW5kIHBsYW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAorRXhl Y0dldEFwcGVuZExvY2tSZWxzKEFwcGVuZCAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAq Y29udGV4dCkKK3sKKwlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IG5vZGUtPnBhcnRf cHJ1bmVfaW5mbzsKKworCWlmIChwcnVuZWluZm8gJiYgcHJ1bmVpbmZvLT5uZWVkc19pbml0X3By dW5pbmcpCisJeworCQlMaXN0CSAgICpzdWJwbGFucyA9IG5vZGUtPmFwcGVuZHBsYW5zOworCQlC aXRtYXBzZXQgICp2YWxpZHN1YnBsYW5zOworCQlpbnQJCQlpOworCisJCXZhbGlkc3VicGxhbnMg PSBFeGVjR2V0TG9ja1JlbHNEb0luaXRpYWxQcnVuaW5nKChQbGFuICopIG5vZGUsCisJCQkJCQkJ CQkJCQkJCWNvbnRleHQsIHBydW5laW5mbyk7CisKKwkJLyogUHJlcCB0aGUgc3Vydml2aW5nIHN1 YnBsYW5zLiAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2YWxp ZHN1YnBsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJUGxhbiAgICpzdWJwbGFuID0gbGlzdF9udGgo c3VicGxhbnMsIGkpOworCisJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sIGNvbnRl eHQpOworCQl9CisKKwkJLyogZG9uZSB3aXRoIHRoaXMgbm9kZSAqLworCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwkvKgorCSAqIExvb2sgYXQgYWxsIHN1YnBsYW5zLCB3aGljaCB0aGUgY2FsbGVyIHdv dWxkIGRvIGJ5IGNhbGxpbmcKKwkgKiBwbGFuX3RyZWVfd2Fsa2VyKCkgb24gdGhlIG5vZGUuCisJ ICovCisJcmV0dXJuIGZhbHNlOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRBcHBlbmQK ICAqCkBAIC0xNTUsNyArMTk0LDggQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFs aWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKIAkJICogbGF0ZXIgY2FsbHMgdG8g RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19l eGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCWlmIChhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3Rh dGUgPT0gTlVMTCB8fAorCQkJKCFhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNf cHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMg PSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwogCX0KIAllbHNlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDlhOWYyOWU4NDUuLjg2OWI4MzZhMTQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC01NCw2ICs1NCw0NSBA QCB0eXBlZGVmIGludDMyIFNsb3ROdW1iZXI7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNN ZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgaW50CWhlYXBfY29tcGFyZV9z bG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpOwogCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJRXhl Y0dldE1lcmdlQXBwZW5kTG9ja1JlbHMKKyAqCQkJRG8gRXhlY0dldExvY2tSZWxzKCkncyB3b3Jr IGZvciBhIE1lcmdlQXBwZW5kIHBsYW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAorRXhlY0dldE1l cmdlQXBwZW5kTG9ja1JlbHMoTWVyZ2VBcHBlbmQgKm5vZGUsIEV4ZWNHZXRMb2NrUmVsc0NvbnRl eHQgKmNvbnRleHQpCit7CisJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8gPSBub2RlLT5w YXJ0X3BydW5lX2luZm87CisKKwlpZiAocHJ1bmVpbmZvICYmIHBydW5laW5mby0+bmVlZHNfaW5p dF9wcnVuaW5nKQorCXsKKwkJTGlzdAkgICAqc3VicGxhbnMgPSBub2RlLT5tZXJnZXBsYW5zOwor CQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5zOworCQlpbnQJCQlpOworCisJCXZhbGlkc3VicGxh bnMgPSBFeGVjR2V0TG9ja1JlbHNEb0luaXRpYWxQcnVuaW5nKChQbGFuICopIG5vZGUsCisJCQkJ CQkJCQkJCQkJCWNvbnRleHQsIHBydW5laW5mbyk7CisKKwkJLyogUHJlcCB0aGUgc3Vydml2aW5n IHN1YnBsYW5zLiAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2 YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJUGxhbiAgICpzdWJwbGFuID0gbGlzdF9u dGgoc3VicGxhbnMsIGkpOworCisJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sIGNv bnRleHQpOworCQl9CisKKwkJLyogZG9uZSB3aXRoIHRoaXMgbm9kZSAqLworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwkvKgorCSAqIExvb2sgYXQgYWxsIHN1YnBsYW5zLCB3aGljaCB0aGUgY2FsbGVy IHdvdWxkIGRvIGJ5IGNhbGxpbmcKKwkgKiBwbGFuX3RyZWVfd2Fsa2VyKCkgb24gdGhlIG5vZGUu CisJICovCisJcmV0dXJuIGZhbHNlOworfQorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjSW5pdE1l cmdlQXBwZW5kCkBAIC0xMDMsNyArMTQyLDggQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFw cGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW4sIHdl IGNhbiBmaWxsIGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJCSAq IGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlmICgh cHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQlpZiAobWVyZ2VzdGF0 ZS0+bXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFtZXJnZXN0YXRlLT5tc19wcnVuZV9z dGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKSkKIAkJCW1lcmdlc3RhdGUtPm1zX3Zh bGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAl9CiAJ ZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCA1ZWM2OTlhOWJk Li5jODYwMDQ1ZmNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5 VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAt MjcwMCw2ICsyNzAwLDMwIEBAIEV4ZWNMb29rdXBSZXN1bHRSZWxCeU9pZChNb2RpZnlUYWJsZVN0 YXRlICpub2RlLCBPaWQgcmVzdWx0b2lkLAogCXJldHVybiBOVUxMOwogfQogCisvKgorICogRXhl Y0dldE1vZGlmeVRhYmxlTG9ja1JlbHMKKyAqIAkJRG8gRXhlY0dldExvY2tSZWxzKCkncyB3b3Jr IGZvciBhIE1vZGlmeVRhYmxlIHBsYW4KKyAqLworYm9vbAorRXhlY0dldE1vZGlmeVRhYmxlTG9j a1JlbHMoTW9kaWZ5VGFibGUgKnBsYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQp Cit7CisJTGlzdENlbGwgKmxjOworCisJaWYgKHBsYW4tPnJvb3RSZWxhdGlvbiA+IDApCisJCWNv bnRleHQtPmxvY2tyZWxzID0gYm1zX2FkZF9tZW1iZXIoY29udGV4dC0+bG9ja3JlbHMsCisJCQkJ CQkJCQkJICAgcGxhbi0+cm9vdFJlbGF0aW9uKTsKKwljb250ZXh0LT5sb2NrcmVscyA9IGJtc19h ZGRfbWVtYmVyKGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJCQkJICAgcGxhbi0+bm9taW5hbFJl bGF0aW9uKTsKKwlmb3JlYWNoKGxjLCBwbGFuLT5yZXN1bHRSZWxhdGlvbnMpCisJeworCQljb250 ZXh0LT5sb2NrcmVscyA9IGJtc19hZGRfbWVtYmVyKGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJ CQkJCSAgIGxmaXJzdF9pbnQobGMpKTsKKwl9CisKKwkvKiBjYWxsZXIgd2lsbCBsb29rIGF0IHRo ZSBzb3VyY2Ugc3VicGxhbiAqLworCXJldHVybiBmYWxzZTsKK30KKwogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJ CUV4ZWNJbml0TW9kaWZ5VGFibGUKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMKaW5kZXggYTgyZTk4 NjY2Ny4uMjEwNzAwOTU5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMKQEAgLTE1NzgsNiArMTU3OCw3IEBAIFNQ SV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4s CiAJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZTsKIAlDYWNoZWRQbGFuICpjcGxhbjsKIAlM aXN0CSAgICpzdG10X2xpc3Q7CisJTGlzdAkgICAqZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCWNo YXIJICAgKnF1ZXJ5X3N0cmluZzsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKIAlNZW1vcnlDb250ZXh0 IG9sZGNvbnRleHQ7CkBAIC0xNjU5LDYgKzE2NjAsNyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJu YWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCS8qIFJlcGxhbiBpZiBuZWVk ZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiByZWZjb3VudCBmb3IgcG9ydGFsICovCiAJY3BsYW4gPSBH ZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIF9TUElfY3VycmVudC0+cXVl cnlFbnYpOwogCXN0bXRfbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisJZXhlY2xvY2tyZWxzaW5m b19saXN0ID0gY3BsYW4tPmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKIAogCWlmICghcGxhbi0+c2F2 ZWQpCiAJewpAQCAtMTY3MCw2ICsxNjcyLDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNv bnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkJICovCiAJCW9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8ocG9ydGFsLT5wb3J0YWxDb250ZXh0KTsKIAkJc3RtdF9saXN0 ID0gY29weU9iamVjdChzdG10X2xpc3QpOworCQlleGVjbG9ja3JlbHNpbmZvX2xpc3QgPSBjb3B5 T2JqZWN0KGV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKIAkJUmVsZWFzZUNhY2hlZFBsYW4oY3BsYW4sIE5VTEwpOwogCQljcGxhbiA9 IE5VTEw7CQkJLyogcG9ydGFsIHNob3VsZG4ndCBkZXBlbmQgb24gY3BsYW4gKi8KQEAgLTE2ODMs NiArMTY4Niw3IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBT UElQbGFuUHRyIHBsYW4sCiAJCQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJCQkgIHBsYW5zb3VyY2Ut PmNvbW1hbmRUYWcsCiAJCQkJCSAgc3RtdF9saXN0LAorCQkJCQkgIGV4ZWNsb2NrcmVsc2luZm9f bGlzdCwKIAkJCQkJICBjcGxhbik7CiAKIAkvKgpAQCAtMjQ3Myw3ICsyNDc3LDkgQEAgX1NQSV9l eGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0 aW9ucywKIAl7CiAJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UgPSAoQ2FjaGVkUGxhblNv dXJjZSAqKSBsZmlyc3QobGMxKTsKIAkJTGlzdAkgICAqc3RtdF9saXN0OwotCQlMaXN0Q2VsbCAg ICpsYzI7CisJCUxpc3QJICAgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKKwkJTGlzdENlbGwgICAq bGMyLAorCQkJCSAgICpsYzM7CiAKIAkJc3BpY2FsbGJhY2thcmcucXVlcnkgPSBwbGFuc291cmNl LT5xdWVyeV9zdHJpbmc7CiAKQEAgLTI1NTIsNiArMjU1OCw3IEBAIF9TUElfZXhlY3V0ZV9wbGFu KFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQkJ CQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKIAogCQlzdG10X2xpc3Qg PSBjcGxhbi0+c3RtdF9saXN0OworCQlleGVjbG9ja3JlbHNpbmZvX2xpc3QgPSBjcGxhbi0+ZXhl Y2xvY2tyZWxzaW5mb19saXN0OwogCiAJCS8qCiAJCSAqIElmIHdlIHdlcmVuJ3QgZ2l2ZW4gYSBz cGVjaWZpYyBzbmFwc2hvdCB0byB1c2UsIGFuZCB0aGUgc3RhdGVtZW50CkBAIC0yNTg5LDkgKzI1 OTYsMTAgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVj dXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCX0KIAkJfQogCi0JCWZvcmVhY2gobGMyLCBzdG10X2xp c3QpCisJCWZvcmJvdGgobGMyLCBzdG10X2xpc3QsIGxjMywgZXhlY2xvY2tyZWxzaW5mb19saXN0 KQogCQl7CiAJCQlQbGFubmVkU3RtdCAqc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBs YzIpOworCQkJRXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbyA9IGxmaXJzdF9ub2Rl KEV4ZWNMb2NrUmVsc0luZm8sIGxjMyk7CiAJCQlib29sCQljYW5TZXRUYWcgPSBzdG10LT5jYW5T ZXRUYWc7CiAJCQlEZXN0UmVjZWl2ZXIgKmRlc3Q7CiAKQEAgLTI2NjMsNyArMjY3MSw3IEBAIF9T UElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMg Km9wdGlvbnMsCiAJCQkJZWxzZQogCQkJCQlzbmFwID0gSW52YWxpZFNuYXBzaG90OwogCi0JCQkJ cWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwKKwkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVz YyhzdG10LCBleGVjbG9ja3JlbHNpbmZvLAogCQkJCQkJCQkJCXBsYW5zb3VyY2UtPnF1ZXJ5X3N0 cmluZywKIAkJCQkJCQkJCQlzbmFwLCBjcm9zc2NoZWNrX3NuYXBzaG90LAogCQkJCQkJCQkJCWRl c3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNr ZW5kL25vZGVzL2NvcHlmdW5jcy5jCmluZGV4IGQ0Zjg0NTVhMmIuLjY4YzY2NDA3MGMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25v ZGVzL2NvcHlmdW5jcy5jCkBAIC02OCw2ICs2OCwxMyBAQAogCQl9IFwKIAl9IHdoaWxlICgwKQog CisvKiBDb3B5IGEgZmllbGQgdGhhdCBpcyBhbiBhcnJheSB3aXRoIG51bUVsZW0gaW50cyAqLwor I2RlZmluZSBDT1BZX0lOVF9BUlJBWShmbGRuYW1lLCBudW1FbGVtKSBcCisJZG8geyBcCisJCW5l d25vZGUtPmZsZG5hbWUgPSAobnVtRWxlbSkgPiAwID8gcGFsbG9jKChudW1FbGVtKSAqIHNpemVv ZihpbnQpKSA6IE5VTEw7IFwKKwkJbWVtY3B5KG5ld25vZGUtPmZsZG5hbWUsIGZyb20tPmZsZG5h bWUsIHNpemVvZihpbnQpICogKG51bUVsZW0pKTsgXAorCX0gd2hpbGUgKDApCisKIC8qIENvcHkg YSBwYXJzZSBsb2NhdGlvbiBmaWVsZCAoZm9yIENvcHksIHRoaXMgaXMgc2FtZSBhcyBzY2FsYXIg Y2FzZSkgKi8KICNkZWZpbmUgQ09QWV9MT0NBVElPTl9GSUVMRChmbGRuYW1lKSBcCiAJKG5ld25v ZGUtPmZsZG5hbWUgPSBmcm9tLT5mbGRuYW1lKQpAQCAtOTQsOSArMTAxLDEyIEBAIF9jb3B5UGxh bm5lZFN0bXQoY29uc3QgUGxhbm5lZFN0bXQgKmZyb20pCiAJQ09QWV9TQ0FMQVJfRklFTEQodHJh bnNpZW50UGxhbik7CiAJQ09QWV9TQ0FMQVJfRklFTEQoZGVwZW5kc09uUm9sZSk7CiAJQ09QWV9T Q0FMQVJfRklFTEQocGFyYWxsZWxNb2RlTmVlZGVkKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChjb250 YWluc0luaXRpYWxQcnVuaW5nKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChqaXRGbGFncyk7CiAJQ09Q WV9OT0RFX0ZJRUxEKHBsYW5UcmVlKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChudW1QbGFuTm9kZXMp OwogCUNPUFlfTk9ERV9GSUVMRChydGFibGUpOworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKGxvY2ty ZWxzKTsKIAlDT1BZX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsKIAlDT1BZX05PREVfRklF TEQoYXBwZW5kUmVsYXRpb25zKTsKIAlDT1BZX05PREVfRklFTEQoc3VicGxhbnMpOwpAQCAtMTI3 OCw2ICsxMjg4LDggQEAgX2NvcHlQYXJ0aXRpb25QcnVuZUluZm8oY29uc3QgUGFydGl0aW9uUHJ1 bmVJbmZvICpmcm9tKQogCVBhcnRpdGlvblBydW5lSW5mbyAqbmV3bm9kZSA9IG1ha2VOb2RlKFBh cnRpdGlvblBydW5lSW5mbyk7CiAKIAlDT1BZX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOworCUNP UFlfU0NBTEFSX0ZJRUxEKG5lZWRzX2luaXRfcHJ1bmluZyk7CisJQ09QWV9TQ0FMQVJfRklFTEQo bmVlZHNfZXhlY19wcnVuaW5nKTsKIAlDT1BZX0JJVE1BUFNFVF9GSUVMRChvdGhlcl9zdWJwbGFu cyk7CiAKIAlyZXR1cm4gbmV3bm9kZTsKQEAgLTQ5NDEsNiArNDk1MywzMyBAQCBfY29weUV4dGVu c2libGVOb2RlKGNvbnN0IEV4dGVuc2libGVOb2RlICpmcm9tKQogCXJldHVybiBuZXdub2RlOwog fQogCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKgkJCQkJZXhlY25vZGVzLmggY29weSBmdW5jdGlvbnMKKyAqICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAqLworc3RhdGljIEV4ZWNMb2NrUmVsc0luZm8gKgorX2NvcHlFeGVjTG9ja1JlbHNJ bmZvKGNvbnN0IEV4ZWNMb2NrUmVsc0luZm8gKmZyb20pCit7CisJRXhlY0xvY2tSZWxzSW5mbyAq bmV3bm9kZSA9IG1ha2VOb2RlKEV4ZWNMb2NrUmVsc0luZm8pOworCisJQ09QWV9CSVRNQVBTRVRf RklFTEQobG9ja3JlbHMpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG51bVBsYW5Ob2Rlcyk7CisJQ09Q WV9OT0RFX0ZJRUxEKGluaXRQcnVuaW5nT3V0cHV0cyk7CisJQ09QWV9JTlRfQVJSQVkoaXBvSW5k ZXhlcywgZnJvbS0+bnVtUGxhbk5vZGVzKTsKKworCXJldHVybiBuZXdub2RlOworfQorCitzdGF0 aWMgUGxhbkluaXRQcnVuaW5nT3V0cHV0ICoKK19jb3B5UGxhbkluaXRQcnVuaW5nT3V0cHV0KGNv bnN0IFBsYW5Jbml0UHJ1bmluZ091dHB1dCAqZnJvbSkKK3sKKwlQbGFuSW5pdFBydW5pbmdPdXRw dXQgKm5ld25vZGUgPSBtYWtlTm9kZShQbGFuSW5pdFBydW5pbmdPdXRwdXQpOworCisJQ09QWV9C SVRNQVBTRVRfRklFTEQoaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKKworCXJldHVybiBuZXdu b2RlOworfQorCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJdmFsdWUuaCBjb3B5IGZ1bmN0aW9ucwogICog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgpAQCAtNDk5NSw3ICs1MDM0LDYgQEAgX2NvcHlCaXRTdHJpbmcoY29uc3QgQml0U3Ry aW5nICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQogCi0KIHN0YXRpYyBGb3JlaWduS2V5Q2Fj aGVJbmZvICoKIF9jb3B5Rm9yZWlnbktleUNhY2hlSW5mbyhjb25zdCBGb3JlaWduS2V5Q2FjaGVJ bmZvICpmcm9tKQogewpAQCAtNTk0NCw2ICs1OTgyLDE2IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0 IHZvaWQgKmZyb20pCiAJCQlyZXR2YWwgPSBfY29weVB1YmxpY2F0aW9uVGFibGUoZnJvbSk7CiAJ CQlicmVhazsKIAorCQkJLyoKKwkJCSAqIEVYRUNVVElPTiBOT0RFUworCQkJICovCisJCWNhc2Ug VF9FeGVjTG9ja1JlbHNJbmZvOgorCQkJcmV0dmFsID0gX2NvcHlFeGVjTG9ja1JlbHNJbmZvKGZy b20pOworCQkJYnJlYWs7CisJCWNhc2UgVF9QbGFuSW5pdFBydW5pbmdPdXRwdXQ6CisJCQlyZXR2 YWwgPSBfY29weVBsYW5Jbml0UHJ1bmluZ091dHB1dChmcm9tKTsKKwkJCWJyZWFrOworCiAJCQkv KgogCQkJICogTUlTQ0VMTEFORU9VUyBOT0RFUwogCQkJICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRl eCA2YmRhZDQ2MmM3Li5lMGUwOWQ3YWJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9v dXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTMxMiw5ICsz MTIsMTIgQEAgX291dFBsYW5uZWRTdG10KFN0cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVkU3Rt dCAqbm9kZSkKIAlXUklURV9CT09MX0ZJRUxEKHRyYW5zaWVudFBsYW4pOwogCVdSSVRFX0JPT0xf RklFTEQoZGVwZW5kc09uUm9sZSk7CiAJV1JJVEVfQk9PTF9GSUVMRChwYXJhbGxlbE1vZGVOZWVk ZWQpOworCVdSSVRFX0JPT0xfRklFTEQoY29udGFpbnNJbml0aWFsUHJ1bmluZyk7CiAJV1JJVEVf SU5UX0ZJRUxEKGppdEZsYWdzKTsKIAlXUklURV9OT0RFX0ZJRUxEKHBsYW5UcmVlKTsKKwlXUklU RV9JTlRfRklFTEQobnVtUGxhbk5vZGVzKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJ0YWJsZSk7CisJ V1JJVEVfQklUTUFQU0VUX0ZJRUxEKGxvY2tyZWxzKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJlc3Vs dFJlbGF0aW9ucyk7CiAJV1JJVEVfTk9ERV9GSUVMRChhcHBlbmRSZWxhdGlvbnMpOwogCVdSSVRF X05PREVfRklFTEQoc3VicGxhbnMpOwpAQCAtMTAwNCw2ICsxMDA3LDggQEAgX291dFBhcnRpdGlv blBydW5lSW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGFydGl0aW9uUHJ1bmVJbmZvICpub2Rl KQogCVdSSVRFX05PREVfVFlQRSgiUEFSVElUSU9OUFJVTkVJTkZPIik7CiAKIAlXUklURV9OT0RF X0ZJRUxEKHBydW5lX2luZm9zKTsKKwlXUklURV9CT09MX0ZJRUxEKG5lZWRzX2luaXRfcHJ1bmlu Zyk7CisJV1JJVEVfQk9PTF9GSUVMRChuZWVkc19leGVjX3BydW5pbmcpOwogCVdSSVRFX0JJVE1B UFNFVF9GSUVMRChvdGhlcl9zdWJwbGFucyk7CiB9CiAKQEAgLTIyNzQsNiArMjI3OSw3IEBAIF9v dXRQbGFubmVyR2xvYmFsKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVyR2xvYmFsICpub2Rl KQogCVdSSVRFX05PREVfRklFTEQoc3VicGxhbnMpOwogCVdSSVRFX0JJVE1BUFNFVF9GSUVMRChy ZXdpbmRQbGFuSURzKTsKIAlXUklURV9OT0RFX0ZJRUxEKGZpbmFscnRhYmxlKTsKKwlXUklURV9C SVRNQVBTRVRfRklFTEQobG9ja3JlbHMpOwogCVdSSVRFX05PREVfRklFTEQoZmluYWxyb3dtYXJr cyk7CiAJV1JJVEVfTk9ERV9GSUVMRChyZXN1bHRSZWxhdGlvbnMpOwogCVdSSVRFX05PREVfRklF TEQoYXBwZW5kUmVsYXRpb25zKTsKQEAgLTI2OTcsNiArMjcwMywzMSBAQCBfb3V0RXh0ZW5zaWJs ZU5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEV4dGVuc2libGVOb2RlICpub2RlKQogCW1ldGhv ZHMtPm5vZGVPdXQoc3RyLCBub2RlKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgor ICoJU3R1ZmYgZnJvbSBleGVjbm9kZXMuaAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor c3RhdGljIHZvaWQKK19vdXRFeGVjTG9ja1JlbHNJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBF eGVjTG9ja1JlbHNJbmZvICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiRVhFQ0xPQ0tSRUxT SU5GTyIpOworCisJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGxvY2tyZWxzKTsKKwlXUklURV9JTlRf RklFTEQobnVtUGxhbk5vZGVzKTsKKwlXUklURV9OT0RFX0ZJRUxEKGluaXRQcnVuaW5nT3V0cHV0 cyk7CisJV1JJVEVfSU5UX0FSUkFZKGlwb0luZGV4ZXMsIG5vZGUtPm51bVBsYW5Ob2Rlcyk7Cit9 CisKK3N0YXRpYyB2b2lkCitfb3V0UGxhbkluaXRQcnVuaW5nT3V0cHV0KFN0cmluZ0luZm8gc3Ry LCBjb25zdCBQbGFuSW5pdFBydW5pbmdPdXRwdXQgKm5vZGUpCit7CisJV1JJVEVfTk9ERV9UWVBF KCJQQVJUSVRJT05JTklUUFJVTklOR09VVFBVVCIpOworCisJV1JJVEVfQklUTUFQU0VUX0ZJRUxE KGluaXRpYWxseV92YWxpZF9zdWJwbGFucyk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgog ICoKICAqCVN0dWZmIGZyb20gcGFyc2Vub2Rlcy5oLgpAQCAtNDUzOCw2ICs0NTY5LDE2IEBAIG91 dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCQlfb3V0UGFydGl0aW9u UmFuZ2VEYXR1bShzdHIsIG9iaik7CiAJCQkJYnJlYWs7CiAKKwkJCQkvKgorCQkJCSAqIEVYRUNV VElPTiBOT0RFUworCQkJCSAqLworCQkJY2FzZSBUX0V4ZWNMb2NrUmVsc0luZm86CisJCQkJX291 dEV4ZWNMb2NrUmVsc0luZm8oc3RyLCBvYmopOworCQkJCWJyZWFrOworCQkJY2FzZSBUX1BsYW5J bml0UHJ1bmluZ091dHB1dDoKKwkJCQlfb3V0UGxhbkluaXRQcnVuaW5nT3V0cHV0KHN0ciwgb2Jq KTsKKwkJCQlicmVhazsKKwogCQkJZGVmYXVsdDoKIAogCQkJCS8qCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5j CmluZGV4IDNmNjhmN2MxOGQuLjQxZGVkNzJjNGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25v ZGVzL3JlYWRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0x NTg1LDkgKzE1ODUsMTIgQEAgX3JlYWRQbGFubmVkU3RtdCh2b2lkKQogCVJFQURfQk9PTF9GSUVM RCh0cmFuc2llbnRQbGFuKTsKIAlSRUFEX0JPT0xfRklFTEQoZGVwZW5kc09uUm9sZSk7CiAJUkVB RF9CT09MX0ZJRUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CisJUkVBRF9CT09MX0ZJRUxEKGNvbnRh aW5zSW5pdGlhbFBydW5pbmcpOwogCVJFQURfSU5UX0ZJRUxEKGppdEZsYWdzKTsKIAlSRUFEX05P REVfRklFTEQocGxhblRyZWUpOworCVJFQURfSU5UX0ZJRUxEKG51bVBsYW5Ob2Rlcyk7CiAJUkVB RF9OT0RFX0ZJRUxEKHJ0YWJsZSk7CisJUkVBRF9CSVRNQVBTRVRfRklFTEQobG9ja3JlbHMpOwog CVJFQURfTk9ERV9GSUVMRChyZXN1bHRSZWxhdGlvbnMpOwogCVJFQURfTk9ERV9GSUVMRChhcHBl bmRSZWxhdGlvbnMpOwogCVJFQURfTk9ERV9GSUVMRChzdWJwbGFucyk7CkBAIC0yNTM0LDYgKzI1 MzcsOCBAQCBfcmVhZFBhcnRpdGlvblBydW5lSW5mbyh2b2lkKQogCVJFQURfTE9DQUxTKFBhcnRp dGlvblBydW5lSW5mbyk7CiAKIAlSRUFEX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOworCVJFQURf Qk9PTF9GSUVMRChuZWVkc19pbml0X3BydW5pbmcpOworCVJFQURfQk9PTF9GSUVMRChuZWVkc19l eGVjX3BydW5pbmcpOwogCVJFQURfQklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBsYW5zKTsKIAog CVJFQURfRE9ORSgpOwpAQCAtMjcwMyw2ICsyNzA4LDM1IEBAIF9yZWFkUGFydGl0aW9uUmFuZ2VE YXR1bSh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisvKgorICogX3JlYWRFeGVjTG9ja1JlbHNJ bmZvCisgKi8KK3N0YXRpYyBFeGVjTG9ja1JlbHNJbmZvICoKK19yZWFkRXhlY0xvY2tSZWxzSW5m byh2b2lkKQoreworCVJFQURfTE9DQUxTKEV4ZWNMb2NrUmVsc0luZm8pOworCisJUkVBRF9CSVRN QVBTRVRfRklFTEQobG9ja3JlbHMpOworCVJFQURfSU5UX0ZJRUxEKG51bVBsYW5Ob2Rlcyk7CisJ UkVBRF9OT0RFX0ZJRUxEKGluaXRQcnVuaW5nT3V0cHV0cyk7CisJUkVBRF9JTlRfQVJSQVkoaXBv SW5kZXhlcywgbG9jYWxfbm9kZS0+bnVtUGxhbk5vZGVzKTsKKworCVJFQURfRE9ORSgpOworfQor CisvKgorICogX3JlYWRQbGFuSW5pdFBydW5pbmdPdXRwdXQKKyAqLworc3RhdGljIFBsYW5Jbml0 UHJ1bmluZ091dHB1dCAqCitfcmVhZFBsYW5Jbml0UHJ1bmluZ091dHB1dCh2b2lkKQoreworCVJF QURfTE9DQUxTKFBsYW5Jbml0UHJ1bmluZ091dHB1dCk7CisKKwlSRUFEX0JJVE1BUFNFVF9GSUVM RChpbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpOworCisJUkVBRF9ET05FKCk7Cit9CisKIC8qCiAg KiBwYXJzZU5vZGVTdHJpbmcKICAqCkBAIC0yOTc0LDYgKzMwMDgsMTAgQEAgcGFyc2VOb2RlU3Ry aW5nKHZvaWQpCiAJCXJldHVybl92YWx1ZSA9IF9yZWFkUGFydGl0aW9uQm91bmRTcGVjKCk7CiAJ ZWxzZSBpZiAoTUFUQ0goIlBBUlRJVElPTlJBTkdFREFUVU0iLCAxOSkpCiAJCXJldHVybl92YWx1 ZSA9IF9yZWFkUGFydGl0aW9uUmFuZ2VEYXR1bSgpOworCWVsc2UgaWYgKE1BVENIKCJFWEVDTE9D S1JFTFNJTkZPIiwgMTYpKQorCQlyZXR1cm5fdmFsdWUgPSBfcmVhZEV4ZWNMb2NrUmVsc0luZm8o KTsKKwllbHNlIGlmIChNQVRDSCgiUEFSVElUSU9OSU5JVFBSVU5JTkdPVVRQVVQiLCAyNikpCisJ CXJldHVybl92YWx1ZSA9IF9yZWFkUGxhbkluaXRQcnVuaW5nT3V0cHV0KCk7CiAJZWxzZQogCXsK IAkJZWxvZyhFUlJPUiwgImJhZGx5IGZvcm1hdHRlZCBub2RlIHN0cmluZyBcIiUuMzJzXCIuLi4i LCB0b2tlbik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggYmQwOWY4NWFl YS4uOWU0MWJiZDIyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNTE3 LDggKzUxNywxMSBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnRyYW5zaWVudFBsYW4g PSBnbG9iLT50cmFuc2llbnRQbGFuOwogCXJlc3VsdC0+ZGVwZW5kc09uUm9sZSA9IGdsb2ItPmRl cGVuZHNPblJvbGU7CiAJcmVzdWx0LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBnbG9iLT5wYXJhbGxl bE1vZGVOZWVkZWQ7CisJcmVzdWx0LT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gZ2xvYi0+Y29u dGFpbnNJbml0aWFsUHJ1bmluZzsKIAlyZXN1bHQtPnBsYW5UcmVlID0gdG9wX3BsYW47CisJcmVz dWx0LT5udW1QbGFuTm9kZXMgPSBnbG9iLT5sYXN0UGxhbk5vZGVJZDsKIAlyZXN1bHQtPnJ0YWJs ZSA9IGdsb2ItPmZpbmFscnRhYmxlOworCXJlc3VsdC0+bG9ja3JlbHMgPSBnbG9iLT5sb2NrcmVs czsKIAlyZXN1bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAly ZXN1bHQtPmFwcGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQt PnN1YnBsYW5zID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMKaW5kZXggYTdiMTFiN2YwMy4uY2VlOGM1NzBmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYwpAQCAtNDgzLDYgKzQ4Myw3IEBAIHN0YXRpYyB2b2lkCiBhZGRfcnRlX3RvX2Zs YXRfcnRhYmxlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIHsKIAlS YW5nZVRibEVudHJ5ICpuZXdydGU7CisJSW5kZXgJCXJ0aSA9IGxpc3RfbGVuZ3RoKGdsb2ItPmZp bmFscnRhYmxlKSArIDE7CiAKIAkvKiBmbGF0IGNvcHkgdG8gZHVwbGljYXRlIGFsbCB0aGUgc2Nh bGFyIGZpZWxkcyAqLwogCW5ld3J0ZSA9IChSYW5nZVRibEVudHJ5ICopIHBhbGxvYyhzaXplb2Yo UmFuZ2VUYmxFbnRyeSkpOwpAQCAtNTE3LDcgKzUxOCwxMCBAQCBhZGRfcnRlX3RvX2ZsYXRfcnRh YmxlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAkgKiBidXQgaXQg d291bGQgcHJvYmFibHkgY29zdCBtb3JlIGN5Y2xlcyB0aGFuIGl0IHdvdWxkIHNhdmUuCiAJICov CiAJaWYgKG5ld3J0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pCisJeworCQlnbG9iLT5sb2Nr cmVscyA9IGJtc19hZGRfbWVtYmVyKGdsb2ItPmxvY2tyZWxzLCBydGkpOwogCQlnbG9iLT5yZWxh dGlvbk9pZHMgPSBsYXBwZW5kX29pZChnbG9iLT5yZWxhdGlvbk9pZHMsIG5ld3J0ZS0+cmVsaWQp OworCX0KIH0KIAogLyoKQEAgLTE1NDgsNiArMTU1Miw5IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNl cyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQlwaW5mby0+cnRpbmRleCArPSBydG9mZnNldDsKIAkJ CX0KIAkJfQorCisJCWlmIChhcGxhbi0+cGFydF9wcnVuZV9pbmZvLT5uZWVkc19pbml0X3BydW5p bmcpCisJCQlyb290LT5nbG9iLT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gdHJ1ZTsKIAl9CiAK IAkvKiBXZSBkb24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUgb3IgcmlnaHR0cmVlIC4u LiAqLwpAQCAtMTYyMCw2ICsxNjI3LDkgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJcGluZm8tPnJ0aW5kZXggKz0gcnRvZmZzZXQ7CiAJCQl9CiAJ CX0KKworCQlpZiAobXBsYW4tPnBhcnRfcHJ1bmVfaW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nKQor CQkJcm9vdC0+Z2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyA9IHRydWU7CiAJfQogCiAJLyog V2UgZG9uJ3QgbmVlZCB0byByZWN1cnNlIHRvIGxlZnR0cmVlIG9yIHJpZ2h0dHJlZSAuLi4gKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYyBiL3NyYy9i YWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwppbmRleCA3MDgwY2IyNWQ5Li4zMzIyZGM3 OWYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKKysr IGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCkBAIC0xNDQsNyArMTQ0LDkg QEAgc3RhdGljIExpc3QgKm1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZv ICpyb290LAogCQkJCQkJCQkJCSAgIExpc3QgKnBydW5lcXVhbCwKIAkJCQkJCQkJCQkgICBCaXRt YXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJICAgaW50ICpyZWxpZF9zdWJwbGFuX21hcCwK LQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxhbnMpOworCQkJCQkJCQkJCSAg IEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJCQkgICBib29sICpuZWVkc19p bml0X3BydW5pbmcsCisJCQkJCQkJCQkJICAgYm9vbCAqbmVlZHNfZXhlY19wcnVuaW5nKTsKIHN0 YXRpYyB2b2lkIGdlbl9wYXJ0cHJ1bmVfc3RlcHMoUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1 c2VzLAogCQkJCQkJCQlQYXJ0Q2xhdXNlVGFyZ2V0IHRhcmdldCwKIAkJCQkJCQkJR2VuZXJhdGVQ cnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KTsKQEAgLTIzMCw2ICsyMzIsOCBAQCBtYWtlX3Bh cnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJl bCwKIAlpbnQJCSAgICpyZWxpZF9zdWJwbGFuX21hcDsKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJ CQlpOworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmluZyA9IGZhbHNlOworCWJvb2wJCW5lZWRzX2V4 ZWNfcHJ1bmluZyA9IGZhbHNlOwogCiAJLyoKIAkgKiBTY2FuIHRoZSBzdWJwYXRocyB0byBzZWUg d2hpY2ggb25lcyBhcmUgc2NhbnMgb2YgcGFydGl0aW9uIGNoaWxkCkBAIC0zMDksMTIgKzMxMywx NiBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnBhcmVudHJlbCwKIAkJQml0bWFwc2V0ICAqcGFydHJlbGlkcyA9IChCaXRtYXBzZXQgKikg bGZpcnN0KGxjKTsKIAkJTGlzdAkgICAqcGluZm9saXN0OwogCQlCaXRtYXBzZXQgICptYXRjaGVk c3VicGxhbnMgPSBOVUxMOworCQlib29sCQlwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmluZzsKKwkJ Ym9vbAkJcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmc7CiAKIAkJcGluZm9saXN0ID0gbWFrZV9w YXJ0aXRpb25lZHJlbF9wcnVuZWluZm8ocm9vdCwgcGFyZW50cmVsLAogCQkJCQkJCQkJCQkJICBw cnVuZXF1YWwsCiAJCQkJCQkJCQkJCQkgIHBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJCQkgIHJlbGlk X3N1YnBsYW5fbWFwLAotCQkJCQkJCQkJCQkJICAmbWF0Y2hlZHN1YnBsYW5zKTsKKwkJCQkJCQkJ CQkJCSAgJm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJCQkJCSAgJnBhcnRyZWxfbmVlZHNfaW5p dF9wcnVuaW5nLAorCQkJCQkJCQkJCQkJICAmcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmcpOwog CiAJCS8qIFdoZW4gcHJ1bmluZyBpcyBwb3NzaWJsZSwgcmVjb3JkIHRoZSBtYXRjaGVkIHN1YnBs YW5zICovCiAJCWlmIChwaW5mb2xpc3QgIT0gTklMKQpAQCAtMzIzLDYgKzMzMSwxMCBAQCBtYWtl X3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVu dHJlbCwKIAkJCWFsbG1hdGNoZWRzdWJwbGFucyA9IGJtc19qb2luKG1hdGNoZWRzdWJwbGFucywK IAkJCQkJCQkJCQkgIGFsbG1hdGNoZWRzdWJwbGFucyk7CiAJCX0KKwkJaWYgKCFuZWVkc19pbml0 X3BydW5pbmcpCisJCQluZWVkc19pbml0X3BydW5pbmcgPSBwYXJ0cmVsX25lZWRzX2luaXRfcHJ1 bmluZzsKKwkJaWYgKCFuZWVkc19leGVjX3BydW5pbmcpCisJCQluZWVkc19leGVjX3BydW5pbmcg PSBwYXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZzsKIAl9CiAKIAlwZnJlZShyZWxpZF9zdWJwbGFu X21hcCk7CkBAIC0zMzcsNiArMzQ5LDggQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJLyogRWxzZSBidWlsZCB0aGUg cmVzdWx0IGRhdGEgc3RydWN0dXJlICovCiAJcHJ1bmVpbmZvID0gbWFrZU5vZGUoUGFydGl0aW9u UHJ1bmVJbmZvKTsKIAlwcnVuZWluZm8tPnBydW5lX2luZm9zID0gcHJ1bmVyZWxpbmZvczsKKwlw cnVuZWluZm8tPm5lZWRzX2luaXRfcHJ1bmluZyA9IG5lZWRzX2luaXRfcHJ1bmluZzsKKwlwcnVu ZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmluZyA9IG5lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCS8qCiAJ ICogU29tZSBzdWJwbGFucyBtYXkgbm90IGJlbG9uZyB0byBhbnkgb2YgdGhlIGlkZW50aWZpZWQg cGFydGl0aW9uZWQgcmVscy4KQEAgLTQzNSwxMyArNDQ5LDE4IEBAIGFkZF9wYXJ0X3JlbGlkcyhM aXN0ICphbGxwYXJ0cmVsaWRzLCBCaXRtYXBzZXQgKnBhcnRyZWxpZHMpCiAgKiBJZiB3ZSBjYW5u b3QgZmluZCBhbnkgdXNlZnVsIHJ1bi10aW1lIHBydW5pbmcgc3RlcHMsIHJldHVybiBOSUwuCiAg KiBIb3dldmVyLCBvbiBzdWNjZXNzLCBlYWNoIHJlbCBpZGVudGlmaWVkIGluIHBhcnRyZWxpZHMg d2lsbCBoYXZlCiAgKiBhbiBlbGVtZW50IGluIHRoZSByZXN1bHQgbGlzdCwgZXZlbiBpZiBzb21l IG9mIHRoZW0gYXJlIHVzZWxlc3MuCisgKiAqbmVlZHNfaW5pdF9wcnVuaW5nIGFuZCAqbmVlZHNf ZXhlY19wcnVuaW5nIGFyZSBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAqIHJldHVybmVkIFBh cnRpdGlvbmVkUmVsUHJ1bmVJbmZvcyBjb250YWlucyBwcnVuaW5nIHN0ZXBzIHRoYXQgY2FuIGJl CisgKiBwZXJmb3JtZWQgYmVmb3JlIGFuZCBhZnRlciBleGVjdXRpb24gYmVnaW5zLCByZXNwZWN0 aXZlbHkuCiAgKi8KIHN0YXRpYyBMaXN0ICoKIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZv KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJCQkJICBMaXN0 ICpwcnVuZXF1YWwsCiAJCQkJCQkJICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJICBp bnQgKnJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBs YW5zKQorCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCSAgYm9v bCAqbmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJCSAgYm9vbCAqbmVlZHNfZXhlY19wcnVuaW5n KQogewogCVJlbE9wdEluZm8gKnRhcmdldHBhcnQgPSBOVUxMOwogCUxpc3QJICAgKnBpbmZvbGlz dCA9IE5JTDsKQEAgLTQ1Miw2ICs0NzEsMTAgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWlu Zm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCQlydGk7 CiAJaW50CQkJaTsKIAorCS8qIFdpbGwgZmluZCBvdXQgYmVsb3cuICovCisJKm5lZWRzX2luaXRf cHJ1bmluZyA9IGZhbHNlOworCSpuZWVkc19leGVjX3BydW5pbmcgPSBmYWxzZTsKKwogCS8qCiAJ ICogRXhhbWluZSBlYWNoIHBhcnRpdGlvbmVkIHJlbCwgY29uc3RydWN0aW5nIGEgdGVtcG9yYXJ5 IGFycmF5IHRvIG1hcAogCSAqIGZyb20gcGxhbm5lciByZWxpZHMgdG8gaW5kZXggb2YgdGhlIHBh cnRpdGlvbmVkIHJlbCwgYW5kIGJ1aWxkaW5nIGEKQEAgLTUzOSw2ICs1NjIsOSBAQCBtYWtlX3Bh cnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFy ZW50cmVsLAogCQkgKiBleGVjdXRvciBwZXItc2NhbiBwcnVuaW5nIHN0ZXBzLiAgVGhpcyBmaXJz dCBwYXNzIGNyZWF0ZXMgc3RhcnR1cAogCQkgKiBwcnVuaW5nIHN0ZXBzIGFuZCBkZXRlY3RzIHdo ZXRoZXIgdGhlcmUncyBhbnkgcG9zc2libHktdXNlZnVsIHF1YWxzCiAJCSAqIHRoYXQgd291bGQg cmVxdWlyZSBwZXItc2NhbiBwcnVuaW5nLgorCQkgKgorCQkgKiBJbiB0aGUgZmlyc3QgcGFzcywg d2Ugbm90ZSB3aGV0aGVyIHRoZSAybmQgcGFzcyBpcyBuZWNlc3NhcnkgYnkKKwkJICogYnkgbm90 aW5nIHRoZSBwcmVzZW5jZSBvZiBFWEVDIHBhcmFtZXRlcnMuCiAJCSAqLwogCQlnZW5fcGFydHBy dW5lX3N0ZXBzKHN1YnBhcnQsIHBhcnRwcnVuZXF1YWwsIFBBUlRUQVJHRVRfSU5JVElBTCwKIAkJ CQkJCQkmY29udGV4dCk7CkBAIC02MTMsNiArNjM5LDExIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxf cHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCXBp bmZvLT5leGVjcGFyYW1pZHMgPSBleGVjcGFyYW1pZHM7CiAJCS8qIFJlbWFpbmluZyBmaWVsZHMg d2lsbCBiZSBmaWxsZWQgaW4gdGhlIG5leHQgbG9vcCAqLwogCisJCWlmICghKm5lZWRzX2luaXRf cHJ1bmluZykKKwkJCSpuZWVkc19pbml0X3BydW5pbmcgPSAoaW5pdGlhbF9wcnVuaW5nX3N0ZXBz ICE9IE5JTCk7CisJCWlmICghKm5lZWRzX2V4ZWNfcHJ1bmluZykKKwkJCSpuZWVkc19leGVjX3By dW5pbmcgPSAoZXhlY19wcnVuaW5nX3N0ZXBzICE9IE5JTCk7CisKIAkJcGluZm9saXN0ID0gbGFw cGVuZChwaW5mb2xpc3QsIHBpbmZvKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCBiYTJmY2Zl YjRhLi4wODVlYjNmMjA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC05NDUsMTUgKzk0NSwxNyBAQCBw Z19wbGFuX3F1ZXJ5KFF1ZXJ5ICpxdWVyeXRyZWUsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywg aW50IGN1cnNvck9wdGlvbnMsCiAgKiBGb3Igbm9ybWFsIG9wdGltaXphYmxlIHN0YXRlbWVudHMs IGludm9rZSB0aGUgcGxhbm5lci4gIEZvciB1dGlsaXR5CiAgKiBzdGF0ZW1lbnRzLCBqdXN0IG1h a2UgYSB3cmFwcGVyIFBsYW5uZWRTdG10IG5vZGUuCiAgKgotICogVGhlIHJlc3VsdCBpcyBhIGxp c3Qgb2YgUGxhbm5lZFN0bXQgbm9kZXMuCisgKiBUaGUgcmVzdWx0IGlzIGEgbGlzdCBvZiBQbGFu bmVkU3RtdCBub2Rlcy4gIEFsc28sIGEgTlVMTCBpcyBhcHBlbmRlZCB0bworICogKmV4ZWNsb2Nr cmVsc2luZm9fbGlzdCBmb3IgZWFjaCBQbGFubmVkU3RtdCBhZGRlZCB0byB0aGUgcmV0dXJuZWQg bGlzdC4KICAqLwogTGlzdCAqCiBwZ19wbGFuX3F1ZXJpZXMoTGlzdCAqcXVlcnl0cmVlcywgY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKLQkJCQlQYXJhbUxpc3RJ bmZvIGJvdW5kUGFyYW1zKQorCQkJCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIExpc3QgKipl eGVjbG9ja3JlbHNpbmZvX2xpc3QpCiB7CiAJTGlzdAkgICAqc3RtdF9saXN0ID0gTklMOwogCUxp c3RDZWxsICAgKnF1ZXJ5X2xpc3Q7CiAKKwkqZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gTklMOwog CWZvcmVhY2gocXVlcnlfbGlzdCwgcXVlcnl0cmVlcykKIAl7CiAJCVF1ZXJ5CSAgICpxdWVyeSA9 IGxmaXJzdF9ub2RlKFF1ZXJ5LCBxdWVyeV9saXN0KTsKQEAgLTk3Nyw2ICs5NzksNyBAQCBwZ19w bGFuX3F1ZXJpZXMoTGlzdCAqcXVlcnl0cmVlcywgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBp bnQgY3Vyc29yT3B0aW9ucywKIAkJfQogCiAJCXN0bXRfbGlzdCA9IGxhcHBlbmQoc3RtdF9saXN0 LCBzdG10KTsKKwkJKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCA9IGxhcHBlbmQoKmV4ZWNsb2NrcmVs c2luZm9fbGlzdCwgTlVMTCk7CiAJfQogCiAJcmV0dXJuIHN0bXRfbGlzdDsKQEAgLTEwODAsNyAr MTA4Myw4IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJ UXVlcnlDb21wbGV0aW9uIHFjOwogCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVfY29udGV4 dCA9IE5VTEw7CiAJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0LAotCQkJCSAgICpwbGFudHJlZV9s aXN0OworCQkJCSAgICpwbGFudHJlZV9saXN0LAorCQkJCSAgICpwbGFudHJlZV9leGVjbG9ja3Jl bHNpbmZvX2xpc3Q7CiAJCVBvcnRhbAkJcG9ydGFsOwogCQlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVy OwogCQlpbnQxNgkJZm9ybWF0OwpAQCAtMTE2Nyw3ICsxMTcxLDggQEAgZXhlY19zaW1wbGVfcXVl cnkoY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nKQogCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7 CiAKIAkJcGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgcXVl cnlfc3RyaW5nLAotCQkJCQkJCQkJCUNVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIE5VTEwpOworCQkJ CQkJCQkJCUNVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIE5VTEwsCisJCQkJCQkJCQkJJnBsYW50cmVl X2V4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CiAKIAkJLyoKIAkJICogRG9uZSB3aXRoIHRoZSBzbmFw c2hvdCB1c2VkIGZvciBwYXJzaW5nL3BsYW5uaW5nLgpAQCAtMTIwMyw2ICsxMjA4LDcgQEAgZXhl Y19zaW1wbGVfcXVlcnkoY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nKQogCQkJCQkJICBxdWVyeV9z dHJpbmcsCiAJCQkJCQkgIGNvbW1hbmRUYWcsCiAJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJ CQkgIHBsYW50cmVlX2V4ZWNsb2NrcmVsc2luZm9fbGlzdCwKIAkJCQkJCSAgTlVMTCk7CiAKIAkJ LyoKQEAgLTE5OTEsNiArMTk5Nyw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5w dXRfbWVzc2FnZSkKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcHNyYy0+Y29tbWFuZFRh ZywKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0LAorCQkJCQkgIGNwbGFuLT5leGVjbG9ja3JlbHNp bmZvX2xpc3QsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1 c2VkIGZvciBwYXJhbWV0ZXIgSS9PIGFuZCBwYXJzaW5nL3BsYW5uaW5nICovCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwpp bmRleCA1ZjkwNzgzMWEzLi45NzJkZGMwMTRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29w L3BxdWVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKQEAgLTM1LDcgKzM1LDcg QEAKIFBvcnRhbAkJQWN0aXZlUG9ydGFsID0gTlVMTDsKIAogCi1zdGF0aWMgdm9pZCBQcm9jZXNz UXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCitzdGF0aWMgdm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5l ZFN0bXQgKnBsYW4sIEV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCiAJCQkJCQkg Y29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJ CQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTY1LDYgKzY1LDcgQEAgc3RhdGlj IHZvaWQgRG9Qb3J0YWxSZXdpbmQoUG9ydGFsIHBvcnRhbCk7CiAgKi8KIFF1ZXJ5RGVzYyAqCiBD cmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCUV4ZWNMb2NrUmVs c0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCiAJCQkJY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJ CQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlTbmFwc2hvdCBjcm9zc2NoZWNrX3NuYXBzaG90LApA QCAtNzcsNiArNzgsNyBAQCBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10 LAogCiAJcWQtPm9wZXJhdGlvbiA9IHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZTsJLyogb3BlcmF0 aW9uICovCiAJcWQtPnBsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CS8qIHBsYW4gKi8KKwlxZC0+ ZXhlY2xvY2tyZWxzaW5mbyA9IGV4ZWNsb2NrcmVsc2luZm87CQkvKiBFeGVjdXRvckdldExvY2tS ZWxzKCkgb3V0cHV0IGZvciBwbGFuICovCiAJcWQtPnNvdXJjZVRleHQgPSBzb3VyY2VUZXh0Owkv KiBxdWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hv dCk7CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sgc25hcHNob3QgKi8KQEAgLTEyMiw2ICsx MjQsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKgkJUE9SVEFMX09ORV9S RVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFsCiAgKgogICoJcGxhbjogdGhl IHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglleGVjbG9ja3JlbHNpbmZvOiBFeGVjdXRvckdl dExvY2tSZWxzKCkgb3V0cHV0IGZvciB0aGUgcGxhbiB0cmVlCiAgKglzb3VyY2VUZXh0OiB0aGUg c291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglwYXJhbXM6IGFueSBwYXJhbWV0ZXJzIG5lZWRl ZAogICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1bHRzCkBAIC0xMzQsNiArMTM3LDcgQEAgRnJl ZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICovCiBzdGF0aWMgdm9pZAogUHJvY2Vzc1F1 ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorCQkJIEV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVs c2luZm8sCiAJCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCSBQYXJhbUxpc3RJbmZvIHBh cmFtcywKIAkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTE0NSw3ICsxNDksNyBA QCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCiAJLyoKIAkgKiBDcmVhdGUgdGhlIFF1 ZXJ5RGVzYyBvYmplY3QKIAkgKi8KLQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwg c291cmNlVGV4dCwKKwlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgZXhlY2xvY2ty ZWxzaW5mbywgc291cmNlVGV4dCwKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxp ZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApAQCAtNDkw LDYgKzQ5NCw3IEBAIFBvcnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFy YW1zLAogCQkJCSAqIHRoZSBkZXN0aW5hdGlvbiB0byBEZXN0Tm9uZS4KIAkJCQkgKi8KIAkJCQlx dWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MobGluaXRpYWxfbm9kZShQbGFubmVkU3RtdCwgcG9y dGFsLT5zdG10cyksCisJCQkJCQkJCQkJCWxpbml0aWFsX25vZGUoRXhlY0xvY2tSZWxzSW5mbywg cG9ydGFsLT5leGVjbG9ja3JlbHNpbmZvcyksCiAJCQkJCQkJCQkJCXBvcnRhbC0+c291cmNlVGV4 dCwKIAkJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkJCQkJSW52YWxpZFNu YXBzaG90LApAQCAtMTE5MCw3ICsxMTk1LDggQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRh bCwKIAkJCSAgIFF1ZXJ5Q29tcGxldGlvbiAqcWMpCiB7CiAJYm9vbAkJYWN0aXZlX3NuYXBzaG90 X3NldCA9IGZhbHNlOwotCUxpc3RDZWxsICAgKnN0bXRsaXN0X2l0ZW07CisJTGlzdENlbGwgICAq c3RtdGxpc3RfaXRlbSwKKwkJCSAgICpleGVjbG9ja3JlbHNpbmZvbGlzdF9pdGVtOwogCiAJLyoK IAkgKiBJZiB0aGUgZGVzdGluYXRpb24gaXMgRGVzdFJlbW90ZUV4ZWN1dGUsIGNoYW5nZSB0byBE ZXN0Tm9uZS4gIFRoZQpAQCAtMTIxMSw5ICsxMjE3LDEyIEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRh bCBwb3J0YWwsCiAJICogTG9vcCB0byBoYW5kbGUgdGhlIGluZGl2aWR1YWwgcXVlcmllcyBnZW5l cmF0ZWQgZnJvbSBhIHNpbmdsZSBwYXJzZXRyZWUKIAkgKiBieSBhbmFseXNpcyBhbmQgcmV3cml0 ZS4KIAkgKi8KLQlmb3JlYWNoKHN0bXRsaXN0X2l0ZW0sIHBvcnRhbC0+c3RtdHMpCisJZm9yYm90 aChzdG10bGlzdF9pdGVtLCBwb3J0YWwtPnN0bXRzLAorCQkJZXhlY2xvY2tyZWxzaW5mb2xpc3Rf aXRlbSwgcG9ydGFsLT5leGVjbG9ja3JlbHNpbmZvcykKIAl7CiAJCVBsYW5uZWRTdG10ICpwc3Rt dCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBzdG10bGlzdF9pdGVtKTsKKwkJRXhlY0xvY2tS ZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbyA9IGxmaXJzdF9ub2RlKEV4ZWNMb2NrUmVsc0luZm8s CisJCQkJCQkJCQkJCSAgIGV4ZWNsb2NrcmVsc2luZm9saXN0X2l0ZW0pOwogCiAJCS8qCiAJCSAq IElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgaW4gcHJpb3IgY29tbWFuZCwgcXVpdApAQCAtMTI3 MSw3ICsxMjgwLDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWlmIChwc3Rt dC0+Y2FuU2V0VGFnKQogCQkJewogCQkJCS8qIHN0YXRlbWVudCBjYW4gc2V0IHRhZyBzdHJpbmcg Ki8KLQkJCQlQcm9jZXNzUXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBleGVj bG9ja3JlbHNpbmZvLAogCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJIHBvcnRh bC0+cG9ydGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApAQCAtMTI4MCw3ICsx Mjg5LDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWVsc2UKIAkJCXsKIAkJ CQkvKiBzdG10IGFkZGVkIGJ5IHJld3JpdGUgY2Fubm90IHNldCB0YWcgKi8KLQkJCQlQcm9jZXNz UXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBleGVjbG9ja3JlbHNpbmZvLAog CQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1z LAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcGxhbmNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUu YwppbmRleCA0Y2Y2ZGI1MDRmLi5jNDBhNmYxOWQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFu Y2FjaGUuYwpAQCAtOTksMTQgKzk5LDE1IEBAIHN0YXRpYyBkbGlzdF9oZWFkIGNhY2hlZF9leHBy ZXNzaW9uX2xpc3QgPSBETElTVF9TVEFUSUNfSU5JVChjYWNoZWRfZXhwcmVzc2lvbl9sCiBzdGF0 aWMgdm9pZCBSZWxlYXNlR2VuZXJpY1BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7 CiBzdGF0aWMgTGlzdCAqUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBs YW5zb3VyY2UsCiAJCQkJCQkJCSAgIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKLXN0YXRp YyBib29sIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKK3N0 YXRpYyBib29sIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQ YXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBDYWNoZWRQbGFuICpCdWlsZENhY2hl ZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJCQkJ CSAgIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52 KTsKIHN0YXRpYyBib29sIGNob29zZV9jdXN0b21fcGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlLAogCQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOwogc3RhdGljIGRv dWJsZSBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFu bmVyKTsKIHN0YXRpYyBRdWVyeSAqUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMp Owotc3RhdGljIHZvaWQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29s IGFjcXVpcmUpOworc3RhdGljIExpc3QgKkFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRf bGlzdCwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CitzdGF0aWMgdm9pZCBSZWxlYXNlRXhl Y3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIExpc3QgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7 CiBzdGF0aWMgdm9pZCBBY3F1aXJlUGxhbm5lckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBh Y3F1aXJlKTsKIHN0YXRpYyB2b2lkIFNjYW5RdWVyeUZvckxvY2tzKFF1ZXJ5ICpwYXJzZXRyZWUs IGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgYm9vbCBTY2FuUXVlcnlXYWxrZXIoTm9kZSAqbm9kZSwg Ym9vbCAqYWNxdWlyZSk7CkBAIC03ODIsNiArNzgzLDQ3IEBAIFJldmFsaWRhdGVDYWNoZWRRdWVy eShDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogCXJldHVybiB0bGlzdDsKIH0KIAorLyoK KyAqIENhY2hlZFBsYW5TYXZlRXhlY0xvY2tSZWxzSW5mb3MKKyAqCQlTYXZlIHRoZSBsaXN0IGNv bnRhaW5pbmcgRXhlY0xvY2tSZWxzSW5mbyBub2RlcyBpbiB0aGUgZ2l2ZW4gQ2FjaGVkUGxhbgor ICoKKyAqIFRoZSBwcm92aWRlZCBsaXN0IGlzIGNvcGllZCBpbnRvIGEgZGVkaWNhdGVkIGNvbnRl eHQgdGhhdCBpcyBhIGNoaWxkIG9mCisgKiBwbGFuLT5jb250ZXh0LgorICovCitzdGF0aWMgdm9p ZAorQ2FjaGVkUGxhblNhdmVFeGVjTG9ja1JlbHNJbmZvcyhDYWNoZWRQbGFuICpwbGFuLCBMaXN0 ICpleGVjbG9ja3JlbHNpbmZvX2xpc3QpCit7CisJTWVtb3J5Q29udGV4dAlleGVjbG9ja3JlbHNp bmZvX2NvbnRleHQgPSBwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2NvbnRleHQsCisJCQkJCW9sZGNv bnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKwlMaXN0CQkgICAqZXhlY2xvY2tyZWxzaW5m b19saXN0X2NvcHk7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgZGVkaWNhdGVkIGNvbnRleHQgaWYg bm90IGFscmVhZHkgZG9uZSwgc2F2aW5nIGl0IGFzIGEgY2hpbGQKKwkgKiBvZiB0aGUgQ2FjaGVk UGxhbidzIGNvbnRleHQuCisJICovCisJaWYgKGV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCA9PSBO VUxMKQorCXsKKwkJZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3Jl YXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJICJDYWNoZWRQbGFuIGV4ZWNs b2NrcmVsc2luZm8gbGlzdCIsCisJCQkJCQkJCQkJCQkgQUxMT0NTRVRfU1RBUlRfU01BTExfU0la RVMpOworCQlNZW1vcnlDb250ZXh0U2V0UGFyZW50KGV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCwg cGxhbi0+Y29udGV4dCk7CisJCU1lbW9yeUNvbnRleHRTZXRJZGVudGlmaWVyKGV4ZWNsb2NrcmVs c2luZm9fY29udGV4dCwgcGxhbi0+Y29udGV4dC0+aWRlbnQpOworCQlwbGFuLT5leGVjbG9ja3Jl bHNpbmZvX2NvbnRleHQgPSBleGVjbG9ja3JlbHNpbmZvX2NvbnRleHQ7CisJfQorCWVsc2UKKwl7 CisJCS8qIEp1c3QgY2xlYXIgZXhpc3RpbmcgY29udGVudHMgYnkgcmVzZXR0aW5nIHRoZSBjb250 ZXh0LiAqLworCQlBc3NlcnQoTWVtb3J5Q29udGV4dElzVmFsaWQoZXhlY2xvY2tyZWxzaW5mb19j b250ZXh0KSk7CisJCU1lbW9yeUNvbnRleHRSZXNldChleGVjbG9ja3JlbHNpbmZvX2NvbnRleHQp OworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhleGVjbG9ja3JlbHNpbmZvX2NvbnRleHQp OworCWV4ZWNsb2NrcmVsc2luZm9fbGlzdF9jb3B5ID0gY29weU9iamVjdChleGVjbG9ja3JlbHNp bmZvX2xpc3QpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXBsYW4t PmV4ZWNsb2NrcmVsc2luZm9fbGlzdCA9IGV4ZWNsb2NrcmVsc2luZm9fbGlzdF9jb3B5OworfQor CiAvKgogICogQ2hlY2tDYWNoZWRQbGFuOiBzZWUgaWYgdGhlIENhY2hlZFBsYW5Tb3VyY2UncyBn ZW5lcmljIHBsYW4gaXMgdmFsaWQuCiAgKgpAQCAtNzkwLDkgKzgzMiwxNyBAQCBSZXZhbGlkYXRl Q2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqCiAgKiBPbiBhICJ0 cnVlIiByZXR1cm4sIHdlIGhhdmUgYWNxdWlyZWQgdGhlIGxvY2tzIG5lZWRlZCB0byBydW4gdGhl IHBsYW4uCiAgKiAoV2UgbXVzdCBkbyB0aGlzIGZvciB0aGUgInRydWUiIHJlc3VsdCB0byBiZSBy YWNlLWNvbmRpdGlvbi1mcmVlLikKKyAqCisgKiBJZiB0aGUgQ2FjaGVkUGxhbiBpcyB2YWxpZCwg dGhpcyBjYWxscyBFeGVjdXRvckdldExvY2tSZWxzIG9uIGVhY2gKKyAqIFBsYW5uZWRTdG10IGNv bnRhaW5lZCBpbiBpdCB0byBkZXRlcm1pbmUgdGhlIHNldCBvZiByZWxhdGlvbnMgdG8gbG9jayBi eQorICogQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4gIFJlc3VsdGluZyBFeGVjTG9ja1JlbHNJbmZv IG5vZGVzLCBhbGxvY2F0ZWQgaW4gYQorICogY2hpbGQgY29udGV4dCBvZiB0aGUgY29udGV4dCBj b250YWluaW5nIHRoZSBwbGFuIGl0c2VsZiwgYXJlIGFkZGVkIGludG8KKyAqIHBsYW4tPmV4ZWNs b2NrcmVsc2luZm9fbGlzdC4gIEV4ZWNMb2NrUmVsc0luZm8gbm9kZXMgdGhhdCBtYXkgYmUgcHJl c2VudAorICogaW4gdGhlIGxpc3QgZnJvbSB0aGUgbGFzdCBpbnZvY2F0aW9uIG9mIENoZWNrQ2Fj aGVkUGxhbigpIG9uIHRoZSBzYW1lCisgKiBDYWNoZWRQbGFuIGFyZSBkZWxldGVkLgogICovCiBz dGF0aWMgYm9vbAotQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Up CitDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0 SW5mbyBib3VuZFBhcmFtcykKIHsKIAlDYWNoZWRQbGFuICpwbGFuID0gcGxhbnNvdXJjZS0+Z3Bs YW47CiAKQEAgLTgyMCwxMyArODcwLDIyIEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291 cmNlICpwbGFuc291cmNlKQogCSAqLwogCWlmIChwbGFuLT5pc192YWxpZCkKIAl7CisJCUxpc3Qg ICAqZXhlY2xvY2tyZWxzaW5mb19saXN0OworCiAJCS8qCiAJCSAqIFBsYW4gbXVzdCBoYXZlIHBv c2l0aXZlIHJlZmNvdW50IGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBieQogCQkgKiBwbGFuc291 cmNlOyBzbyBubyBuZWVkIHRvIGZlYXIgaXQgZGlzYXBwZWFycyB1bmRlciB1cyBoZXJlLgogCQkg Ki8KIAkJQXNzZXJ0KHBsYW4tPnJlZmNvdW50ID4gMCk7CiAKLQkJQWNxdWlyZUV4ZWN1dG9yTG9j a3MocGxhbi0+c3RtdF9saXN0LCB0cnVlKTsKKwkJLyoKKwkJICogTG9jayByZWxhdGlvbnMgc2Nh bm5lZCBieSB0aGUgcGxhbi4gIFRoaXMgYWxzbyBpbnZva2VzCisJCSAqIEV4ZWN1dG9yR2V0TG9j a1JlbHMoKSB0byBkbyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIG9uIHRoZSBwbGFuCisJCSAq IHRyZWUgaWZmIHNvbWUgbm9kZXMgaW4gaXQgYXJlIG1hcmtlZCBhcyBuZWVkaW5nIGl0LiAgUmVs YXRpb25zIHdob3NlCisJCSAqIHNjYW4gbm9kZXMgYXJlIHBydW5lZCBhcyBhIHJlc3VsdCBvZiB0 aGF0IGFyZSBub3QgbG9ja2VkIGhlcmUuCisJCSAqLworCQlleGVjbG9ja3JlbHNpbmZvX2xpc3Qg PSBBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsCisJCQkJCQkJCQkJCQkJYm91 bmRQYXJhbXMpOwogCiAJCS8qCiAJCSAqIElmIHBsYW4gd2FzIHRyYW5zaWVudCwgY2hlY2sgdG8g c2VlIGlmIFRyYW5zYWN0aW9uWG1pbiBoYXMKQEAgLTg0NCwxMSArOTAzLDE0IEBAIENoZWNrQ2Fj aGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCQlpZiAocGxhbi0+aXNfdmFs aWQpCiAJCXsKIAkJCS8qIFN1Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCBhbmQgbG9ja2VkIHRoZSBx dWVyeS4gKi8KKworCQkJLyogUmVtZW1iZXIgRXhlY0xvY2tSZWxzSW5mb3MgaW4gdGhlIENhY2hl ZFBsYW4uICovCisJCQlDYWNoZWRQbGFuU2F2ZUV4ZWNMb2NrUmVsc0luZm9zKHBsYW4sIGV4ZWNs b2NrcmVsc2luZm9fbGlzdCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCiAJCS8qIE9vcHMsIHRo ZSByYWNlIGNhc2UgaGFwcGVuZWQuICBSZWxlYXNlIHVzZWxlc3MgbG9ja3MuICovCi0JCUFjcXVp cmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgZmFsc2UpOworCQlSZWxlYXNlRXhlY3V0 b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CiAJfQogCiAJ LyoKQEAgLTg4MCw3ICs5NDIsOCBAQCBCdWlsZENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywg UXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCiB7CiAJQ2FjaGVkUGxhbiAqcGxhbjsKLQlMaXN0 CSAgICpwbGlzdDsKKwlMaXN0CSAgICpwbGlzdCwKKwkJCSAgICpleGVjbG9ja3JlbHNpbmZvX2xp c3Q7CiAJYm9vbAkJc25hcHNob3Rfc2V0OwogCWJvb2wJCWlzX3RyYW5zaWVudDsKIAlNZW1vcnlD b250ZXh0IHBsYW5fY29udGV4dDsKQEAgLTkzMyw3ICs5OTYsOCBAQCBCdWlsZENhY2hlZFBsYW4o Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJICogR2VuZXJhdGUg dGhlIHBsYW4uCiAJICovCiAJcGxpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocWxpc3QsIHBsYW5zb3Vy Y2UtPnF1ZXJ5X3N0cmluZywKLQkJCQkJCQlwbGFuc291cmNlLT5jdXJzb3Jfb3B0aW9ucywgYm91 bmRQYXJhbXMpOworCQkJCQkJCXBsYW5zb3VyY2UtPmN1cnNvcl9vcHRpb25zLCBib3VuZFBhcmFt cywKKwkJCQkJCQkmZXhlY2xvY2tyZWxzaW5mb19saXN0KTsKIAogCS8qIFJlbGVhc2Ugc25hcHNo b3QgaWYgd2UgZ290IG9uZSAqLwogCWlmIChzbmFwc2hvdF9zZXQpCkBAIC0xMDAyLDYgKzEwNjYs MTEgQEAgQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3Qg KnFsaXN0LAogCXBsYW4tPmlzX3NhdmVkID0gZmFsc2U7CiAJcGxhbi0+aXNfdmFsaWQgPSB0cnVl OwogCisJLyogU2F2ZSB0aGUgZHVtbXkgRXhlY0xvY2tSZWxzSW5mbyBsaXN0LiAqLworCXBsYW4t PmV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCA9IE5VTEw7CisJQ2FjaGVkUGxhblNhdmVFeGVjTG9j a1JlbHNJbmZvcyhwbGFuLCBleGVjbG9ja3JlbHNpbmZvX2xpc3QpOworCUFzc2VydChNZW1vcnlD b250ZXh0SXNWYWxpZChwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2NvbnRleHQpKTsKKwogCS8qIGFz c2lnbiBnZW5lcmF0aW9uIG51bWJlciB0byBuZXcgcGxhbiAqLwogCXBsYW4tPmdlbmVyYXRpb24g PSArKyhwbGFuc291cmNlLT5nZW5lcmF0aW9uKTsKIApAQCAtMTE2MCw3ICsxMjI5LDcgQEAgR2V0 Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJv dW5kUGFyYW1zLAogCiAJaWYgKCFjdXN0b21wbGFuKQogCXsKLQkJaWYgKENoZWNrQ2FjaGVkUGxh bihwbGFuc291cmNlKSkKKwkJaWYgKENoZWNrQ2FjaGVkUGxhbihwbGFuc291cmNlLCBib3VuZFBh cmFtcykpCiAJCXsKIAkJCS8qIFdlIHdhbnQgYSBnZW5lcmljIHBsYW4sIGFuZCB3ZSBhbHJlYWR5 IGhhdmUgYSB2YWxpZCBvbmUgKi8KIAkJCXBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKQEAgLTEz NjYsNyArMTQzNSw2IEBAIENhY2hlZFBsYW5BbGxvd3NTaW1wbGVWYWxpZGl0eUNoZWNrKENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJZm9yZWFjaChsYywgcGxhbi0+c3RtdF9saXN0KQog CXsKIAkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQs IGxjKTsKLQkJTGlzdENlbGwgICAqbGMyOwogCiAJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5 cGUgPT0gQ01EX1VUSUxJVFkpCiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xMzc1LDEzICsxNDQzLDgg QEAgQ2FjaGVkUGxhbkFsbG93c1NpbXBsZVZhbGlkaXR5Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSwKIAkJICogV2UgaGF2ZSB0byBncm92ZWwgdGhyb3VnaCB0aGUgcnRhYmxlIGJl Y2F1c2UgaXQncyBsaWtlbHkgdG8gY29udGFpbgogCQkgKiBhbiBSVEVfUkVTVUxUIHJlbGF0aW9u LCByYXRoZXIgdGhhbiBiZWluZyB0b3RhbGx5IGVtcHR5LgogCQkgKi8KLQkJZm9yZWFjaChsYzIs IHBsYW5uZWRzdG10LT5ydGFibGUpCi0JCXsKLQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5n ZVRibEVudHJ5ICopIGxmaXJzdChsYzIpOwotCi0JCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9S RUxBVElPTikKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJaWYgKCFibXNfaXNfZW1wdHkocGxh bm5lZHN0bXQtPmxvY2tyZWxzKSkKKwkJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKgpAQCAtMTcz NywxNyArMTgwMCwyMiBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cykKIAog LyoKICAqIEFjcXVpcmVFeGVjdXRvckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgZXhl Y3V0aW9uIG9mIGEgY2FjaGVkIHBsYW47Ci0gKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBp cyBmYWxzZS4KKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBvZiBFeGVjTG9ja1JlbHNJbmZvIG5vZGVz IGNvbnRhaW5pbmcgb25lIGVsZW1lbnQgZm9yIGVhY2gKKyAqIFBsYW5uZWRTdG10IGluIHN0bXRf bGlzdDsgTlVMTCB3aGVuIHRoZSBsYXR0ZXIgaXMgdXRpbGl0eSBzdGF0ZW1lbnQgb3IKKyAqIGl0 cyBjb250YWluc0luaXRpYWxQcnVuaW5nIGlzIGZhbHNlLgogICovCi1zdGF0aWMgdm9pZAotQWNx dWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCitzdGF0aWMg TGlzdCAqCitBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIFBhcmFtTGlzdElu Zm8gYm91bmRQYXJhbXMpCiB7CiAJTGlzdENlbGwgICAqbGMxOworCUxpc3QJICAgKmV4ZWNsb2Nr cmVsc2luZm9fbGlzdCA9IE5JTDsKIAogCWZvcmVhY2gobGMxLCBzdG10X2xpc3QpCiAJewogCQlQ bGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMxKTsK LQkJTGlzdENlbGwgICAqbGMyOworCQlFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZv ID0gTlVMTDsKKwkJaW50CQkJcnRpOwogCiAJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUg PT0gQ01EX1VUSUxJVFkpCiAJCXsKQEAgLTE3NjEsMjcgKzE4MjksMTEzIEBAIEFjcXVpcmVFeGVj dXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQogCQkJUXVlcnkJICAgKnF1 ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQtPnV0aWxpdHlTdG10KTsKIAog CQkJaWYgKHF1ZXJ5KQotCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCBhY3F1aXJlKTsKLQkJ CWNvbnRpbnVlOworCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCB0cnVlKTsKIAkJfQotCi0J CWZvcmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQllbHNlCiAJCXsKLQkJCVJhbmdl VGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJzdChsYzIpOwotCi0JCQlpZiAo cnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKLQkJCQljb250aW51ZTsKKwkJCUJpdG1hcHNl dCAgICpsb2NrcmVsczsKIAogCQkJLyoKLQkJCSAqIEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5 cGUgb2YgbG9jayBvbiBlYWNoIHJlbGF0aW9uIE9JRC4gTm90ZQotCQkJICogdGhhdCB3ZSBkb24n dCBhY3R1YWxseSB0cnkgdG8gb3BlbiB0aGUgcmVsLCBhbmQgaGVuY2Ugd2lsbCBub3QKLQkJCSAq IGZhaWwgaWYgaXQncyBiZWVuIGRyb3BwZWQgZW50aXJlbHkgLS0tIHdlJ2xsIGp1c3QgdHJhbnNp ZW50bHkKLQkJCSAqIGFjcXVpcmUgYSBub24tY29uZmxpY3RpbmcgbG9jay4KKwkJCSAqIEZpZ3Vy ZSBvdXQgdGhlIHNldCBvZiByZWxhdGlvbnMgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGxvY2tlZAor CQkJICogYmVmb3JlIGV4ZWN1dGluZyB0aGUgcGxhbi4KIAkJCSAqLwotCQkJaWYgKGFjcXVpcmUp CisJCQlpZiAoIXBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5nKQorCQkJeworCQkJ CS8qCisJCQkJICogSWYgdGhlIHBsYW4gY29udGFpbnMgbm8gaW5pdGlhbCBwcnVuaW5nIHN0ZXBz LCB0aGUgZXhlY3V0b3IKKwkJCQkgKiB3b3VsZCBqdXN0IG5lZWQgdG8gbG9jayB3aGF0ZXZlciBy ZWxhdGlvbnMgdGhlIHBsYW5uZXIgd291bGQKKwkJCQkgKiBoYXZlIGxvY2tlZCB0byBtYWtlIHRo ZSBwbGFuLgorCQkJCSAqLworCQkJCWxvY2tyZWxzID0gcGxhbm5lZHN0bXQtPmxvY2tyZWxzOwor CQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogQXNrIHRoZSBleGVjdXRvciB0byBw ZXJmb3JtIGluaXRpYWwgcHJ1bmluZyBzdGVwcyB0byBza2lwCisJCQkJICogcmVsYXRpb25zIHRo YXQgYXJlIHBydW5lZCBhd2F5LgorCQkJCSAqLworCQkJCWV4ZWNsb2NrcmVsc2luZm8gPSBFeGVj dXRvckdldExvY2tSZWxzKHBsYW5uZWRzdG10LCBib3VuZFBhcmFtcyk7CisJCQkJbG9ja3JlbHMg PSBleGVjbG9ja3JlbHNpbmZvLT5sb2NrcmVsczsKKwkJCX0KKworCQkJcnRpID0gLTE7CisJCQl3 aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihsb2NrcmVscywgcnRpKSkgPj0gMCkKKwkJCXsK KwkJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBsYW5uZWRzdG10LT5ydGFi bGUpOworCisJCQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOworCisJCQkJ LyoKKwkJCQkgKiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGxvY2sgb24gZWFjaCBy ZWxhdGlvbiBPSUQuCisJCQkJICogTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHRyeSB0byBv cGVuIHRoZSByZWwsIGFuZCBoZW5jZQorCQkJCSAqIHdpbGwgbm90IGZhaWwgaWYgaXQncyBiZWVu IGRyb3BwZWQgZW50aXJlbHkgLS0tIHdlJ2xsIGp1c3QKKwkJCQkgKiB0cmFuc2llbnRseSBhY3F1 aXJlIGEgbm9uLWNvbmZsaWN0aW5nIGxvY2suCisJCQkJICovCiAJCQkJTG9ja1JlbGF0aW9uT2lk KHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICog UmVtZW1iZXIgRXhlY0xvY2tSZWxzSW5mbyBmb3IgbGF0ZXIgYWRkaW5nIHRvIHRoZSBRdWVyeURl c2MgdGhhdAorCQkgKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXhlY3V0b3Igd2hlbiBleGVjdXRp bmcgdGhpcyBwbGFuLiAgTWF5IGJlCisJCSAqIE5VTEwsIGJ1dCBtdXN0IGtlZXAgdGhlIGxpc3Qg dGhlIHNhbWUgbGVuZ3RoIGFzIHN0bXRfbGlzdC4KKwkJICovCisJCWV4ZWNsb2NrcmVsc2luZm9f bGlzdCA9IGxhcHBlbmQoZXhlY2xvY2tyZWxzaW5mb19saXN0LAorCQkJCQkJCQkJCWV4ZWNsb2Nr cmVsc2luZm8pOworCX0KKworCXJldHVybiBleGVjbG9ja3JlbHNpbmZvX2xpc3Q7Cit9CisKKy8q CisgKiBSZWxlYXNlRXhlY3V0b3JMb2NrcworICogCQlSZWxlYXNlIGxvY2tzIHRoYXQgd291bGQn dmUgYmVlbiBhY3F1aXJlZCBieSBhbiBlYXJsaWVyIGNhbGwgdG8KKyAqIAkJQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoKQorICovCitzdGF0aWMgdm9pZAorUmVsZWFzZUV4ZWN1dG9yTG9ja3MoTGlzdCAq c3RtdF9saXN0LCBMaXN0ICpleGVjbG9ja3JlbHNpbmZvX2xpc3QpCit7CisJTGlzdENlbGwgICAq bGMxLAorCQkJICAgKmxjMjsKKworCWZvcmJvdGgobGMxLCBzdG10X2xpc3QsIGxjMiwgZXhlY2xv Y2tyZWxzaW5mb19saXN0KQorCXsKKwkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0 X25vZGUoUGxhbm5lZFN0bXQsIGxjMSk7CisJCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVs c2luZm8gPSBsZmlyc3Rfbm9kZShFeGVjTG9ja1JlbHNJbmZvLCBsYzIpOworCQlpbnQJCQlydGk7 CisKKwkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJewor CQkJLyoKKwkJCSAqIElnbm9yZSB1dGlsaXR5IHN0YXRlbWVudHMsIGV4Y2VwdCB0aG9zZSAoc3Vj aCBhcyBFWFBMQUlOKSB0aGF0CisJCQkgKiBjb250YWluIGEgcGFyc2VkLWJ1dC1ub3QtcGxhbm5l ZCBxdWVyeS4gIE5vdGU6IGl0J3Mgb2theSB0byB1c2UKKwkJCSAqIFNjYW5RdWVyeUZvckxvY2tz LCBldmVuIHRob3VnaCB0aGUgcXVlcnkgaGFzbid0IGJlZW4gdGhyb3VnaAorCQkJICogcnVsZSBy ZXdyaXRpbmcsIGJlY2F1c2UgcmV3cml0aW5nIGRvZXNuJ3QgY2hhbmdlIHRoZSBxdWVyeQorCQkJ ICogcmVwcmVzZW50YXRpb24uCisJCQkgKi8KKwkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0aWxpdHlD b250YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CisKKwkJCWlmIChxdWVyeSkK KwkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgZmFsc2UpOworCQl9CisJCWVsc2UKKwkJewor CQkJQml0bWFwc2V0ICAgKmxvY2tyZWxzOworCisJCQlpZiAoZXhlY2xvY2tyZWxzaW5mbyA9PSBO VUxMKQorCQkJCWxvY2tyZWxzID0gcGxhbm5lZHN0bXQtPmxvY2tyZWxzOwogCQkJZWxzZQorCQkJ CWxvY2tyZWxzID0gZXhlY2xvY2tyZWxzaW5mby0+bG9ja3JlbHM7CisKKwkJCXJ0aSA9IC0xOwor CQkJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIobG9ja3JlbHMsIHJ0aSkpID49IDApCisJ CQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBwbGFubmVkc3RtdC0+ cnRhYmxlKTsKKworCQkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKTsKKwog CQkJCVVubG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJ fQogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxt ZW0uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKaW5kZXggZDU0OWY2NmQ0 YS4uODk2ZjUxYmUwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxt ZW0uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jCkBAIC0yODUsNiAr Mjg1LDcgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAkJCQkgIGNvbnN0IGNo YXIgKnNvdXJjZVRleHQsCiAJCQkJICBDb21tYW5kVGFnIGNvbW1hbmRUYWcsCiAJCQkJICBMaXN0 ICpzdG10cywKKwkJCQkgIExpc3QgKmV4ZWNsb2NrcmVsc2luZm9zLAogCQkJCSAgQ2FjaGVkUGxh biAqY3BsYW4pCiB7CiAJQXNzZXJ0QXJnKFBvcnRhbElzVmFsaWQocG9ydGFsKSk7CkBAIC0yOTks NiArMzAwLDcgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAlwb3J0YWwtPnFj Lm5wcm9jZXNzZWQgPSAwOwogCXBvcnRhbC0+Y29tbWFuZFRhZyA9IGNvbW1hbmRUYWc7CiAJcG9y dGFsLT5zdG10cyA9IHN0bXRzOworCXBvcnRhbC0+ZXhlY2xvY2tyZWxzaW5mb3MgPSBleGVjbG9j a3JlbHNpbmZvczsKIAlwb3J0YWwtPmNwbGFuID0gY3BsYW47CiAJcG9ydGFsLT5zdGF0dXMgPSBQ T1JUQUxfREVGSU5FRDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxh aW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA2NjY5NzdmYjFmLi5m ZWY3NWJhMTQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC04Nyw3ICs4Nyw4IEBAIGV4dGVy biB2b2lkIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICpp bnRvLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs CiAJCQkJCQkJICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlF bnYpOwogCi1leHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0 bXQsIEludG9DbGF1c2UgKmludG8sCitleHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVk U3RtdCAqcGxhbm5lZHN0bXQsIEV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCisJ CQkJCQkgICBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFpblN0YXRlICplcywgY29u c3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVl cnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBpbnN0cl90aW1lICpwbGFu ZHVyYXRpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9u LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5kZXggZmQ1NzM1YTk0 Ni4uZGVkMTliOGNiYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRp dGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaApAQCAtMTI0 LDQgKzEyNCw2IEBAIGV4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlv blBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZv ICpwcnVuZWluZm8sCiAJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5z KTsKIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25Q cnVuZVN0YXRlICpwcnVuZXN0YXRlKTsKK2V4dGVybiBCaXRtYXBzZXQgKkV4ZWNHZXRMb2NrUmVs c0RvSW5pdGlhbFBydW5pbmcoUGxhbiAqcGxhbiwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29u dGV4dCwKKwkJCQkJCQkJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pOwogI2VuZGlmCQkJ CQkJCS8qIEVYRUNQQVJUSVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY2Rlc2MuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKaW5kZXggZTc5 ZTJjMDAxZi4uNDMzODQ2MzQ3OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y2Rlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCkBAIC0zNSw2ICsz NSw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCS8qIFRoZXNlIGZpZWxkcyBhcmUgcHJv dmlkZWQgYnkgQ3JlYXRlUXVlcnlEZXNjICovCiAJQ21kVHlwZQkJb3BlcmF0aW9uOwkJLyogQ01E X1NFTEVDVCwgQ01EX1VQREFURSwgZXRjLiAqLwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdDsJ LyogcGxhbm5lcidzIG91dHB1dCAoY291bGQgYmUgdXRpbGl0eSwgdG9vKSAqLworCUV4ZWNMb2Nr UmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm87CS8qIEV4ZWN1dG9yR2V0TG9ja1JlbHMoKSdzIG91 dHB1dCBnaXZlbiBwbGFubmVkc3RtdCAqLwogCWNvbnN0IGNoYXIgKnNvdXJjZVRleHQ7CQkvKiBz b3VyY2UgdGV4dCBvZiB0aGUgcXVlcnkgKi8KIAlTbmFwc2hvdAlzbmFwc2hvdDsJCS8qIHNuYXBz aG90IHRvIHVzZSBmb3IgcXVlcnkgKi8KIAlTbmFwc2hvdAljcm9zc2NoZWNrX3NuYXBzaG90Owkv KiBjcm9zc2NoZWNrIGZvciBSSSB1cGRhdGUvZGVsZXRlICovCkBAIC01Nyw2ICs1OCw3IEBAIHR5 cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCiAvKiBpbiBwcXVlcnkuYyAqLwogZXh0ZXJuIFF1ZXJ5 RGVzYyAqQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJ ICBFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvLAogCQkJCQkJCQkgIGNvbnN0IGNo YXIgKnNvdXJjZVRleHQsCiAJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCSAg U25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4 IDM0NDM5OWY2YTguLjU5NTlkNjcyMjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtMTg1 LDYgKzE4NSw4IEBAIEV4ZWNHZXRKdW5rQXR0cmlidXRlKFR1cGxlVGFibGVTbG90ICpzbG90LCBB dHRyTnVtYmVyIGF0dG5vLCBib29sICppc051bGwpCiAvKgogICogcHJvdG90eXBlcyBmcm9tIGZ1 bmN0aW9ucyBpbiBleGVjTWFpbi5jCiAgKi8KK2V4dGVybiBFeGVjTG9ja1JlbHNJbmZvICpFeGVj dXRvckdldExvY2tSZWxzKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgUGFyYW1MaXN0SW5mbyBw YXJhbXMpOworZXh0ZXJuIGJvb2wgRXhlY0dldExvY2tSZWxzKFBsYW4gKm5vZGUsIEV4ZWNHZXRM b2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwogZXh0ZXJuIHZvaWQgRXhlY3V0b3JTdGFydChRdWVy eURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBzdGFuZGFyZF9FeGVj dXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lk IEV4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3Ivbm9kZUFwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5oCmluZGV4IDRjYjc4ZWU1YjYuLmI1MzUzNWMyYTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL25vZGVBcHBlbmQuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQXBw ZW5kLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNp bmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKIAorZXh0ZXJuIGJvb2wgRXhlY0dldEFwcGVuZExv Y2tSZWxzKEFwcGVuZCAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29udGV4dCk7CiBl eHRlcm4gQXBwZW5kU3RhdGUgKkV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZEFwcGVuZChBcHBlbmRTdGF0 ZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBFeGVjUmVTY2FuQXBwZW5kKEFwcGVuZFN0YXRlICpub2Rl KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKaW5kZXggOTdmZTNiMDY2NS4u OGViNGU5ZGY5MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKQEAgLTE2 LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgogCitleHRlcm4gYm9v bCBFeGVjR2V0TWVyZ2VBcHBlbmRMb2NrUmVscyhNZXJnZUFwcGVuZCAqbm9kZSwgRXhlY0dldExv Y2tSZWxzQ29udGV4dCAqY29udGV4dCk7CiBleHRlcm4gTWVyZ2VBcHBlbmRTdGF0ZSAqRXhlY0lu aXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxh Z3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5v ZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUg Km5vZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxl LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaAppbmRleCAxZDIyNWJj ODhkLi41MDA2NDk5MDg4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9k aWZ5VGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaApA QCAtMTksNiArMTksNyBAQCBleHRlcm4gdm9pZCBFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChS ZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkJICAgRVN0YXRlICplc3RhdGUs IFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCQkJICAgQ21kVHlwZSBjbWR0eXBlKTsKIAor ZXh0ZXJuIGJvb2wgRXhlY0dldE1vZGlmeVRhYmxlTG9ja1JlbHMoTW9kaWZ5VGFibGUgKnBsYW4s IEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwogZXh0ZXJuIE1vZGlmeVRhYmxlU3Rh dGUgKkV4ZWNJbml0TW9kaWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIEV4ZWNFbmRNb2RpZnlUYWJsZShNb2RpZnlUYWJs ZVN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNSZVNjYW5Nb2RpZnlUYWJsZShNb2RpZnlU YWJsZVN0YXRlICpub2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggZGQ5NWRjNDBjNy4uNzE4 NjAzZDQwMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTU3MCw2ICs1NzAsNyBAQCB0eXBlZGVm IHN0cnVjdCBFU3RhdGUKIAlzdHJ1Y3QgRXhlY1Jvd01hcmsgKiplc19yb3dtYXJrczsJLyogQXJy YXkgb2YgcGVyLXJhbmdlLXRhYmxlLWVudHJ5CiAJCQkJCQkJCQkJICogRXhlY1Jvd01hcmtzLCBv ciBOVUxMIGlmIG5vbmUgKi8KIAlQbGFubmVkU3RtdCAqZXNfcGxhbm5lZHN0bXQ7CS8qIGxpbmsg dG8gdG9wIG9mIHBsYW4gdHJlZSAqLworCXN0cnVjdCBFeGVjTG9ja1JlbHNJbmZvICplc19leGVj bG9ja3JlbHNpbmZvOyAvKiBRdWVyeURlc2MuZXhlY2xvY2tyZWxzaW5mbyAqLwogCWNvbnN0IGNo YXIgKmVzX3NvdXJjZVRleHQ7CS8qIFNvdXJjZSB0ZXh0IGZyb20gUXVlcnlEZXNjICovCiAKIAlK dW5rRmlsdGVyICplc19qdW5rRmlsdGVyOwkvKiB0b3AtbGV2ZWwganVuayBmaWx0ZXIsIGlmIGFu eSAqLwpAQCAtOTU4LDYgKzk1OSw5MiBAQCB0eXBlZGVmIHN0cnVjdCBEb21haW5Db25zdHJhaW50 U3RhdGUKICAqLwogdHlwZWRlZiBUdXBsZVRhYmxlU2xvdCAqKCpFeGVjUHJvY05vZGVNdGQpIChz dHJ1Y3QgUGxhblN0YXRlICpwc3RhdGUpOwogCisvKi0tLS0tLS0tLS0tLS0tLS0KKyAqIEV4ZWNM b2NrUmVsc0luZm8KKyAqCisgKiBSZXN1bHQgb2YgcGVyZm9ybWluZyBFeGVjdXRvckdldExvY2tS ZWxzKCkgZm9yIGEgZ2l2ZW4gUGxhbm5lZFN0bXQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRXhlY0xv Y2tSZWxzSW5mbworeworCU5vZGVUYWcJCXR5cGU7CisKKwkvKgorCSAqIFJlbGF0aW9ucyB0aGF0 IG11c3QgYmUgbG9ja2VkIHRvIGV4ZWN1dGUgdGhlIHBsYW4gdHJlZSBjb250YWluZWQgaW4KKwkg KiB0aGUgUGxhbm5lZFN0bXQuCisJICovCisJQml0bWFwc2V0ICAqbG9ja3JlbHM7CisKKwkvKiBQ bGFubmVkU3RtdC5udW1QbGFuTm9kZXMgKi8KKwlpbnQJCQludW1QbGFuTm9kZXM7CisKKwkvKgor CSAqIExpc3Qgb2YgUGxhbkluaXRQcnVuaW5nT3V0cHV0LCBlYWNoIHJlcHJlc2VudGluZyB0aGUg b3V0cHV0IG9mCisJICogcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgb24gYSBnaXZlbiBwbGFu IG5vZGUsIGZvciBhbGwgbm9kZXMgaW4gdGhlCisJICogcGxhbiB0cmVlIHRoYXQgaGF2ZSBiZWVu IG1hcmtlZCBhcyBuZWVkaW5nIGluaXRpYWwgcHJ1bmluZy4KKwkgKgorCSAqICdpcG9JbmRleGVz JyBpcyBhbiBhcnJheSBvZiAnbnVtUGxhbk5vZGVzJyBlbGVtZW50cywgaW5kZXhlZCB3aXRoCisJ ICogcGxhbl9ub2RlX2lkIG9mIHRoZSBpbmRpdmlkdWFsIG5vZGVzIGluIHRoZSBwbGFuIHRyZWUs IGVhY2ggYSAxLWJhc2VkCisJICogaW5kZXggaW50byAnaW5pdFBydW5pbmdPdXRwdXRzJyBsaXN0 IGZvciBhIGdpdmVuIHBsYW4gbm9kZS4gIDAgbWVhbnMKKwkgKiB0aGF0IGEgZ2l2ZW4gcGxhbiBu b2RlIGhhcyBubyBlbnRyeSBpbiB0aGUgbGlzdCBiZWNhdXNlIG9mIG5vdCBuZWVkaW5nCisJICog YW55IGluaXRpYWwgcHJ1bmluZyBkb25lIG9uIGl0LgorCSAqLworCUxpc3QJICAgKmluaXRQcnVu aW5nT3V0cHV0czsKKwlpbnQJCSAgICppcG9JbmRleGVzOworfSBFeGVjTG9ja1JlbHNJbmZvOwor CisvKi0tLS0tLS0tLS0tLS0tLS0KKyAqIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQKKyAqCisgKiBD b250ZXh0IGluZm9ybWF0aW9uIGZvciBwZXJmb3JtaW5nIEV4ZWN1dG9yR2V0TG9ja1JlbHMoKSBv biBhIGdpdmVuIHBsYW4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRXhlY0dldExvY2tSZWxzQ29udGV4 dAoreworCU5vZGVUYWcJCXR5cGU7CisKKwlQbGFubmVkU3RtdAkgICAqc3RtdDsJCS8qIHRhcmdl dCBwbGFuICovCisJUGFyYW1MaXN0SW5mbwlwYXJhbXM7CQkvKiBFWFRFUk4gcGFyYW1ldGVycyB0 byBwcnVuZSB3aXRoICovCisKKwkvKiBPdXRwdXQgcGFyYW1ldGVycyBmb3IgRXhlY0dldExvY2tS ZWxzIGFuZCBpdHMgc3Vicm91dGluZXMuICovCisJQml0bWFwc2V0CSAgICpsb2NrcmVsczsKKwor CS8qIFNlZSBhYm92ZSBjb21tZW50LiAqLworCUxpc3QJCSAgICppbml0UHJ1bmluZ091dHB1dHM7 CisJaW50CQkJICAgKmlwb0luZGV4ZXM7Cit9IEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQ7CisKKyNk ZWZpbmUgRXhlY1N0b3JlUGxhbkluaXRQcnVuaW5nT3V0cHV0KHByZXBjeHQsIGluaXRQcnVuaW5n T3V0cHV0LCBwbGFubm9kZSkgXAorCWRvIHsgXAorCQkocHJlcGN4dCktPmluaXRQcnVuaW5nT3V0 cHV0cyA9IGxhcHBlbmQoKHByZXBjeHQpLT5pbml0UHJ1bmluZ091dHB1dHMsIGluaXRQcnVuaW5n T3V0cHV0KTsgXAorCQkocHJlcGN4dCktPmlwb0luZGV4ZXNbKHBsYW5ub2RlKS0+cGxhbl9ub2Rl X2lkXSA9IGxpc3RfbGVuZ3RoKChwcmVwY3h0KS0+aW5pdFBydW5pbmdPdXRwdXRzKTsgXAorCX0g d2hpbGUgKDApCisKKyNkZWZpbmUgRXhlY0ZldGNoUGxhbkluaXRQcnVuaW5nT3V0cHV0KHByZXBy ZXMsIHBsYW5ub2RlKSBcCisJCSgoKHByZXByZXMpICE9IE5VTEwgJiYgKHByZXByZXMpLT5pbml0 UHJ1bmluZ091dHB1dHMgIT0gTklMKSA/IFwKKwkJIGxpc3RfbnRoKChwcmVwcmVzKS0+aW5pdFBy dW5pbmdPdXRwdXRzLCBcCisJCQkJICAocHJlcHJlcyktPmlwb0luZGV4ZXNbKHBsYW5ub2RlKS0+ cGxhbl9ub2RlX2lkXSAtIDEpIDogTlVMTCkKKworLyogLS0tLS0tLS0tLS0tLS0tCisgKiBQbGFu SW5pdFBydW5pbmdPdXRwdXQKKyAqCisgKiBOb2RlIHRvIHJlbWVtYmVyIHRoZSByZXN1bHQgb2Yg cGVyZm9ybWluZyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIHN0ZXBzCisgKiBkdXJpbmcgRXhl Y3V0b3JHZXRMb2NrUmVscygpIG9uIG5vZGVzIHRoYXQgc3VwcG9ydCBwcnVuaW5nLgorICoKKyAq IEV4ZWNMb2NrUmVsc0RvSW5pdFBydW5pbmcoKSwgd2hpY2ggcnVucyBkdXJpbmcgRXhlY3V0b3JH ZXRMb2NrUmVscygpLAorICogY3JlYXRlcyBpdCBhbmQgc3RvcmVzIGl0IGluIHRoZSBjb3JyZXNw b25kaW5nIEV4ZWNMb2NrUmVsc0luZm8uCisgKgorICogRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5n KCksIHdoaWNoIHJ1bnMgZHVyaW5nIEV4ZWN1b3JTdGFydCgpLCBmZXRjaGVzIGl0CisgKiBmcm9t IHRoZSBFU3RhdGUncyBFeGVjTG9ja1JlbHNJbmZvIChpZiBhbnkpIGFuZCB1c2VzIHRoZSB2YWx1 ZSBvZgorICogaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zIGNvbnRhaW5lZCBpbiBpdCBhcy1pcyB0 byBzZWxlY3QgdGhlIHN1YnBsYW5zIHRvIGJlCisgKiBpbml0aWFsaXplZCBmb3IgZXhlY3V0aW9u LCBpbnN0ZWFkIG9mIHJlLWV2YWx1YXRpbmcgdGhhdCBieSBwZXJmb3JtaW5nCisgKiBpbml0aWFs IHBydW5pbmcgYWdhaW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IFBsYW5Jbml0UHJ1bmluZ091dHB1 dAoreworCU5vZGVUYWcJCXR5cGU7CisKKwlCaXRtYXBzZXQgICppbml0aWFsbHlfdmFsaWRfc3Vi cGxhbnM7Cit9IFBsYW5Jbml0UHJ1bmluZ091dHB1dDsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQog ICoJCVBsYW5TdGF0ZSBub2RlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggNWQwNzVmMGMzNC4uZDM2NWZj NDQwMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC05Niw2ICs5NiwxMSBAQCB0eXBlZGVmIGVudW0gTm9kZVRh ZwogCVRfUGFydGl0aW9uUHJ1bmVTdGVwQ29tYmluZSwKIAlUX1BsYW5JbnZhbEl0ZW0sCiAKKwkv KiBUQUdTIEZPUiBFWEVDVVRPUiBQUkVQIE5PREVTIChleGVjbm9kZXMuaCkgKi8KKwlUX0V4ZWNH ZXRMb2NrUmVsc0NvbnRleHQsCisJVF9FeGVjTG9ja1JlbHNJbmZvLAorCVRfUGxhbkluaXRQcnVu aW5nT3V0cHV0LAorCiAJLyoKIAkgKiBUQUdTIEZPUiBQTEFOIFNUQVRFIE5PREVTIChleGVjbm9k ZXMuaCkKIAkgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAxZjM4NDViM2ZlLi45NmM2NTJlYmFm IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTAxLDYgKzEwMSw5IEBAIHR5cGVkZWYgc3RydWN0 IFBsYW5uZXJHbG9iYWwKIAogCUxpc3QJICAgKmZpbmFscnRhYmxlOwkvKiAiZmxhdCIgcmFuZ2V0 YWJsZSBmb3IgZXhlY3V0b3IgKi8KIAorCUJpdG1hcHNldCAgKmxvY2tyZWxzOwkvKiBJbmRleGVz IG9mIFJURV9SRUxBVElPTiBlbnRyaWVzIGluIHJhbmdlCisJCQkJCQkJCSAqIHRhYmxlICovCisK IAlMaXN0CSAgICpmaW5hbHJvd21hcmtzOwkvKiAiZmxhdCIgbGlzdCBvZiBQbGFuUm93TWFya3Mg Ki8KIAogCUxpc3QJICAgKnJlc3VsdFJlbGF0aW9uczsJLyogImZsYXQiIGxpc3Qgb2YgaW50ZWdl ciBSVCBpbmRleGVzICovCkBAIC0xMjksNiArMTMyLDEwIEBAIHR5cGVkZWYgc3RydWN0IFBsYW5u ZXJHbG9iYWwKIAogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwkvKiB3b3JzdCBQUk9QQVJBTExF TCBoYXphcmQgbGV2ZWwgKi8KIAorCWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5pbmc7CS8qIERv IHNvbWUgUGxhbiBub2RlcyBpbiB0aGUgdHJlZQorCQkJCQkJCQkJCSAqIGhhdmUgaW5pdGlhbCAo cHJlLWV4ZWMpIHBydW5pbmcKKwkJCQkJCQkJCQkgKiBzdGVwcz8gKi8KKwogCVBhcnRpdGlvbkRp cmVjdG9yeSBwYXJ0aXRpb25fZGlyZWN0b3J5OyAvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8K IH0gUGxhbm5lckdsb2JhbDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCAwYjUxOGNlNmIyLi41 YThjMzRiZGY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtNTksMTIgKzU5LDIxIEBAIHR5cGVk ZWYgc3RydWN0IFBsYW5uZWRTdG10CiAKIAlib29sCQlwYXJhbGxlbE1vZGVOZWVkZWQ7IC8qIHBh cmFsbGVsIG1vZGUgcmVxdWlyZWQgdG8gZXhlY3V0ZT8gKi8KIAorCWJvb2wJCWNvbnRhaW5zSW5p dGlhbFBydW5pbmc7CS8qIERvIHNvbWUgUGxhbiBub2RlcyBpbiB0aGUgdHJlZQorCQkJCQkJCQkJ CSAqIGhhdmUgaW5pdGlhbCAocHJlLWV4ZWMpIHBydW5pbmcKKwkJCQkJCQkJCQkgKiBzdGVwcz8g Ki8KKwogCWludAkJCWppdEZsYWdzOwkJLyogd2hpY2ggZm9ybXMgb2YgSklUIHNob3VsZCBiZSBw ZXJmb3JtZWQgKi8KIAogCXN0cnVjdCBQbGFuICpwbGFuVHJlZTsJCS8qIHRyZWUgb2YgUGxhbiBu b2RlcyAqLwogCisJaW50CQkJbnVtUGxhbk5vZGVzOwkvKiBudW1iZXIgb2Ygbm9kZXMgaW4gcGxh blRyZWUgKi8KKwogCUxpc3QJICAgKnJ0YWJsZTsJCQkvKiBsaXN0IG9mIFJhbmdlVGJsRW50cnkg bm9kZXMgKi8KIAorCUJpdG1hcHNldCAgKmxvY2tyZWxzOwkvKiBJbmRleGVzIG9mIFJURV9SRUxB VElPTiBlbnRyaWVzIGluIHJhbmdlCisJCQkJCQkJCSAqIHRhYmxlICovCisKIAkvKiBydGFibGUg aW5kZXhlcyBvZiB0YXJnZXQgcmVsYXRpb25zIGZvciBJTlNFUlQvVVBEQVRFL0RFTEVURSAqLwog CUxpc3QJICAgKnJlc3VsdFJlbGF0aW9uczsJLyogaW50ZWdlciBsaXN0IG9mIFJUIGluZGV4ZXMs IG9yIE5JTCAqLwogCkBAIC0xMTcyLDYgKzExODEsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhblJv d01hcmsKICAqIHBydW5lX2luZm9zCQkJTGlzdCBvZiBMaXN0cyBjb250YWluaW5nIFBhcnRpdGlv bmVkUmVsUHJ1bmVJbmZvIG5vZGVzLAogICoJCQkJCQlvbmUgc3VibGlzdCBwZXIgcnVuLXRpbWUt cHJ1bmFibGUgcGFydGl0aW9uIGhpZXJhcmNoeQogICoJCQkJCQlhcHBlYXJpbmcgaW4gdGhlIHBh cmVudCBwbGFuIG5vZGUncyBzdWJwbGFucy4KKyAqCisgKiBuZWVkc19pbml0X3BydW5pbmcJRG9l cyBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvcyBpbgorICoJCQkJCQlwcnVuZV9p bmZvcyBoYXZlIGl0cyBpbml0aWFsX3BydW5pbmdfc3RlcHMgc2V0PworICoKKyAqIG5lZWRzX2V4 ZWNfcHJ1bmluZwlEb2VzIGFueSBvZiB0aGUgUGFydGl0aW9uZWRSZWxQcnVuZUluZm9zIGluCisg KgkJCQkJCXBydW5lX2luZm9zIGhhdmUgaXRzIGV4ZWNfcHJ1bmluZ19zdGVwcyBzZXQ/CisgKgog ICogb3RoZXJfc3VicGxhbnMJCUluZGV4ZXMgb2YgYW55IHN1YnBsYW5zIHRoYXQgYXJlIG5vdCBh Y2NvdW50ZWQgZm9yCiAgKgkJCQkJCWJ5IGFueSBvZiB0aGUgUGFydGl0aW9uZWRSZWxQcnVuZUlu Zm8gbm9kZXMgaW4KICAqCQkJCQkJInBydW5lX2luZm9zIi4gIFRoZXNlIHN1YnBsYW5zIG11c3Qg bm90IGJlIHBydW5lZC4KQEAgLTExODAsNiArMTE5Niw4IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRp dGlvblBydW5lSW5mbwogewogCU5vZGVUYWcJCXR5cGU7CiAJTGlzdAkgICAqcHJ1bmVfaW5mb3M7 CisJYm9vbAkJbmVlZHNfaW5pdF9wcnVuaW5nOworCWJvb2wJCW5lZWRzX2V4ZWNfcHJ1bmluZzsK IAlCaXRtYXBzZXQgICpvdGhlcl9zdWJwbGFuczsKIH0gUGFydGl0aW9uUHJ1bmVJbmZvOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmggYi9zcmMvaW5jbHVkZS90Y29w L3Rjb3Bwcm90LmgKaW5kZXggOTIyOTFhNzUwZC4uYmY4MGM1M2JlZCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3Qu aApAQCAtNjQsNyArNjQsNyBAQCBleHRlcm4gUGxhbm5lZFN0bXQgKnBnX3BsYW5fcXVlcnkoUXVl cnkgKnF1ZXJ5dHJlZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCQkgIFBhcmFt TGlzdEluZm8gYm91bmRQYXJhbXMpOwogZXh0ZXJuIExpc3QgKnBnX3BsYW5fcXVlcmllcyhMaXN0 ICpxdWVyeXRyZWVzLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCiAJCQkJCQkJIGludCBjdXJz b3JPcHRpb25zLAotCQkJCQkJCSBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKKwkJCQkJCQkg UGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywgTGlzdCAqKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7 CiAKIGV4dGVybiBib29sIGNoZWNrX21heF9zdGFja19kZXB0aChpbnQgKm5ld3ZhbCwgdm9pZCAq KmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKTsKIGV4dGVybiB2b2lkIGFzc2lnbl9tYXhfc3RhY2tf ZGVwdGgoaW50IG5ld3ZhbCwgdm9pZCAqZXh0cmEpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvcGxhbmNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAppbmRleCA5 NWI5OWUzZDI1Li4yYTg0N2Y1NGRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wbGFu Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaApAQCAtMTQ4LDYgKzE0 OCw5IEBAIHR5cGVkZWYgc3RydWN0IENhY2hlZFBsYW4KIHsKIAlpbnQJCQltYWdpYzsJCQkvKiBz aG91bGQgZXF1YWwgQ0FDSEVEUExBTl9NQUdJQyAqLwogCUxpc3QJICAgKnN0bXRfbGlzdDsJCS8q IGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCisJTGlzdAkgICAqZXhlY2xvY2tyZWxzaW5mb19saXN0 OwkvKiBsaXN0IG9mIEV4ZWN1dG9yR2V0TG9ja1JlbHNSZXN1bHQgd2l0aCBvbmUKKwkJCQkJCQkJ CSAqIGVsZW1lbnQgZm9yIGVhY2ggb2Ygc3RtdF9saXN0OyBOSUwKKwkJCQkJCQkJCSAqIGlmIG5v dCBhIGdlbmVyaWMgcGxhbiAqLwogCWJvb2wJCWlzX29uZXNob3Q7CQkvKiBpcyBpdCBhICJvbmVz aG90IiBwbGFuPyAqLwogCWJvb2wJCWlzX3NhdmVkOwkJLyogaXMgQ2FjaGVkUGxhbiBpbiBhIGxv bmctbGl2ZWQgY29udGV4dD8gKi8KIAlib29sCQlpc192YWxpZDsJCS8qIGlzIHRoZSBzdG10X2xp c3QgY3VycmVudGx5IHZhbGlkPyAqLwpAQCAtMTU4LDYgKzE2MSw4IEBAIHR5cGVkZWYgc3RydWN0 IENhY2hlZFBsYW4KIAlpbnQJCQlnZW5lcmF0aW9uOwkJLyogcGFyZW50J3MgZ2VuZXJhdGlvbiBu dW1iZXIgZm9yIHRoaXMgcGxhbiAqLwogCWludAkJCXJlZmNvdW50OwkJLyogY291bnQgb2YgbGl2 ZSByZWZlcmVuY2VzIHRvIHRoaXMgc3RydWN0ICovCiAJTWVtb3J5Q29udGV4dCBjb250ZXh0OwkJ LyogY29udGV4dCBjb250YWluaW5nIHRoaXMgQ2FjaGVkUGxhbiAqLworCU1lbW9yeUNvbnRleHQg ZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0OwkvKiBjb250ZXh0IGNvbnRhaW5pbmcgZXhlY2xvY2ty ZWxzaW5mb19saXN0LAorCQkJCQkJCQkJICogYSBjaGlsZCBvZiB0aGUgYWJvdmUgY29udGV4dCAq LwogfSBDYWNoZWRQbGFuOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9y dGFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaAppbmRleCBhZWRkYmRhZmU1Li45YWJh Y2U2NzM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9wb3J0YWwuaApAQCAtMTM3LDYgKzEzNywxMCBAQCB0eXBlZGVmIHN0cnVj dCBQb3J0YWxEYXRhCiAJQ29tbWFuZFRhZwljb21tYW5kVGFnOwkJLyogY29tbWFuZCB0YWcgZm9y IG9yaWdpbmFsIHF1ZXJ5ICovCiAJUXVlcnlDb21wbGV0aW9uIHFjOwkJCS8qIGNvbW1hbmQgY29t cGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAqLwogCUxpc3QJICAgKnN0bXRzOwkJCS8q IGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCisJTGlzdAkgICAqZXhlY2xvY2tyZWxzaW5mb3M7CS8q IGxpc3Qgb2YgRXhlY3V0b3JHZXRMb2NrUmVsc1Jlc3VsdHMgd2l0aCBvbmUgZWxlbWVudAorCQkJ CQkJCQkgKiBmb3IgZWFjaCBvZiAnc3RtdHMnOyBzYW1lIGFzCisJCQkJCQkJCSAqIGNwbGFuLT5l eGVjbG9ja3JlbHNpbmZvX2xpc3QgaWYgY3BsYW4gaXMKKwkJCQkJCQkJICogbm90IE5VTEwgKi8K IAlDYWNoZWRQbGFuICpjcGxhbjsJCQkvKiBDYWNoZWRQbGFuLCBpZiBzdG10cyBhcmUgZnJvbSBv bmUgKi8KIAogCVBhcmFtTGlzdEluZm8gcG9ydGFsUGFyYW1zOyAvKiBwYXJhbXMgdG8gcGFzcyB0 byBxdWVyeSAqLwpAQCAtMjQxLDYgKzI0NSw3IEBAIGV4dGVybiB2b2lkIFBvcnRhbERlZmluZVF1 ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJCQkJCQkJICBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJ CQkJCSAgQ29tbWFuZFRhZyBjb21tYW5kVGFnLAogCQkJCQkJCSAgTGlzdCAqc3RtdHMsCisJCQkJ CQkJICBMaXN0ICpleGVjbG9ja3JlbHNpbmZvcywKIAkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFu KTsKIGV4dGVybiBQbGFubmVkU3RtdCAqUG9ydGFsR2V0UHJpbWFyeVN0bXQoUG9ydGFsIHBvcnRh bCk7CiBleHRlcm4gdm9pZCBQb3J0YWxDcmVhdGVIb2xkU3RvcmUoUG9ydGFsIHBvcnRhbCk7Ci0t IAoyLjI0LjEKCg== --00000000000081364e05d9f23fae Content-Type: application/octet-stream; name="v5-0001-Some-refactoring-of-runtime-pruning-code.patch" Content-Disposition: attachment; filename="v5-0001-Some-refactoring-of-runtime-pruning-code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l0mitdz52 RnJvbSAxMTY0MDE1ZDg1NjExNTFkMWZiNWQ4NjFiMjM2OTYxZTIzNzEwMmZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyIE1hciAyMDIyIDE1OjE3OjU1ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2NSAxLzNd IFNvbWUgcmVmYWN0b3Jpbmcgb2YgcnVudGltZSBwcnVuaW5nIGNvZGUKClRoaXMgZG9lcyB0d28g dGhpbmdzIG1haW5seToKCiogTW92ZSB0aGUgZXhlY3V0aW9uIHBydW5pbmcgaW5pdGlhbGl6YXRp b24gc3RlcHMgdGhhdCBhcmUgY29tbW9uCmJldHdlZW4gYm90aCBFeGVjSW5pdEFwcGVuZCgpIGFu ZCBFeGVjSW5pdE1lcmdlQXBwZW5kKCkgaW50byBhIG5ldwpmdW5jdGlvbiBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoKSBkZWZpbmVkIGluIGV4ZWNQYXJ0aXRpb24uYy4KVGh1cywgRXhlY0ZpbmRJ bml0aWFsTWF0Y2hpbmdTdWJQbGFucygpIG5lZWQgbm90IGJlIGV4cG9ydGVkLgoKKiBBZGQgYW4g RXhwckNvbnRleHQgZmllbGQgdG8gUGFydGl0aW9uUHJ1bmVDb250ZXh0IHRvIHJlbW92ZSB0aGUK aW1wbGljaXQgYXNzdW1wdGlvbiBpbiB0aGUgcnVudGltZSBwcnVuaW5nIGNvZGUgdGhhdCB0aGUg RXhwckNvbnRleHQKdG8gdXNlIHRvIGNvbXB1dGUgcHJ1bmluZyBleHByZXNzaW9ucyB0aGF0IG5l ZWQgb25lIGNhbiBhbHdheXMgcmVseQpvbiB0aGUgUGxhblN0YXRlIHByb3ZpZGluZyBpdC4gIEEg ZnV0dXJlIHBhdGNoIHdpbGwgYWxsb3cgcnVudGltZQpwcnVuaW5nIChhdCBsZWFzdCB0aGUgaW5p dGlhbCBwcnVuaW5nIHN0ZXBzKSB0byBiZSBwZXJmb3JtZWQgd2l0aG91dAp0aGUgY29ycmVzcG9u ZGluZyBQbGFuU3RhdGUgeWV0IGhhdmluZyBiZWVuIGNyZWF0ZWQsIHNvIHRoaXMgd2lsbApoZWxw LgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMzQwICsrKysr KysrKysrKysrKystLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAg ICAgIHwgIDMzICstLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgfCAg MzIgKy0tCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMgICB8ICAyMCArLQog c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgfCAgIDkgKy0KIHNyYy9pbmNs dWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCAgIHwgICAyICsKIDYgZmlsZXMgY2hhbmdlZCwg MjU1IGluc2VydGlvbnMoKyksIDE4MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UGFydGl0aW9uLmMKaW5kZXggOTBlZDE0ODVkMS4uMjE5NTNmMjUzYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQYXJ0aXRpb24uYwpAQCAtMTgyLDExICsxODIsMTggQEAgc3RhdGljIGNoYXIgKkV4 ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiAJCQkJCQkJ CQkJCQkgIGJvb2wgKmlzbnVsbCwKIAkJCQkJCQkJCQkJCSAgaW50IG1heGZpZWxkbGVuKTsKIHN0 YXRpYyBMaXN0ICphZGp1c3RfcGFydGl0aW9uX2NvbG5vcyhMaXN0ICpjb2xub3MsIFJlc3VsdFJl bEluZm8gKmxlYWZfcGFydF9ycmkpOworc3RhdGljIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWND cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkJCSAg UGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0aXRpb25wcnVuZWluZm8pOworc3RhdGljIEJpdG1hcHNl dCAqRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpw cnVuZXN0YXRlKTsKIHN0YXRpYyB2b2lkIEV4ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFydGl0aW9u UHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkgICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAog CQkJCQkJCQkgICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNjLAogCQkJCQkJCQkgICBQYXJ0aXRpb25L ZXkgcGFydGtleSwKLQkJCQkJCQkJICAgUGxhblN0YXRlICpwbGFuc3RhdGUpOworCQkJCQkJCQkg ICBQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKKwkJCQkJCQkJICAgRXhwckNvbnRleHQgKmVjb250ZXh0 KTsKK3N0YXRpYyB2b2lkIEV4ZWNQYXJ0aXRpb25QcnVuZUZpeFN1YlBsYW5JbmRleGVzKFBhcnRp dGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCisJCQkJCQkJCQlCaXRtYXBzZXQgKmluaXRpYWxs eV92YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCWludCBuX3RvdGFsX3N1YnBsYW5zKTsKIHN0YXRp YyB2b2lkIGZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0 YSAqcHJ1bmVkYXRhLAogCQkJCQkJCQkJCSAgIFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnBw cnVuZSwKIAkJCQkJCQkJCQkgICBib29sIGluaXRpYWxfcHJ1bmUsCkBAIC0xNDg1LDMwICsxNDky LDg3IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0UmVsSW5m byAqbGVhZl9wYXJ0X3JyaSkKICAqCiAgKiBGdW5jdGlvbnM6CiAgKgotICogRXhlY0NyZWF0ZVBh cnRpdGlvblBydW5lU3RhdGU6Ci0gKgkJQ3JlYXRlcyB0aGUgUGFydGl0aW9uUHJ1bmVTdGF0ZSBy ZXF1aXJlZCBieSBlYWNoIG9mIHRoZSB0d28gcHJ1bmluZwotICoJCWZ1bmN0aW9ucy4gIERldGFp bHMgc3RvcmVkIGluY2x1ZGUgaG93IHRvIG1hcCB0aGUgcGFydGl0aW9uIGluZGV4Ci0gKgkJcmV0 dXJuZWQgYnkgdGhlIHBhcnRpdGlvbiBwcnVuaW5nIGNvZGUgaW50byBzdWJwbGFuIGluZGV4ZXMu Ci0gKgotICogRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFuczoKLSAqCQlSZXR1cm5zIGlu ZGV4ZXMgb2YgbWF0Y2hpbmcgc3VicGxhbnMuICBQYXJ0aXRpb24gcHJ1bmluZyBpcyBhdHRlbXB0 ZWQKLSAqCQl3aXRob3V0IGFueSBldmFsdWF0aW9uIG9mIGV4cHJlc3Npb25zIGNvbnRhaW5pbmcg UEFSQU1fRVhFQyBQYXJhbXMuCi0gKgkJVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBkdXJp bmcgZXhlY3V0b3Igc3RhcnR1cCBmb3IgdGhlIHBhcmVudAotICoJCXBsYW4gYmVmb3JlIHRoZSBz dWJwbGFucyB0aGVtc2VsdmVzIGFyZSBpbml0aWFsaXplZC4gIFN1YnBsYW5zIHdoaWNoCi0gKgkJ YXJlIGZvdW5kIG5vdCB0byBtYXRjaCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcmVtb3ZlZCBm cm9tIHRoZQotICoJCXBsYW4ncyBsaXN0IG9mIHN1YnBsYW5zIGR1cmluZyBleGVjdXRpb24sIGFz IHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYQotICoJCXJlbWFwIG9mIHRoZSBwYXJ0aXRpb24gaW5k ZXggdG8gc3VicGxhbiBpbmRleCBtYXAgYW5kIHRoZSBuZXdseQotICoJCWNyZWF0ZWQgbWFwIHBy b3ZpZGVzIGluZGV4ZXMgb25seSBmb3Igc3VicGxhbnMgd2hpY2ggcmVtYWluIGFmdGVyCi0gKgkJ Y2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICogRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nOgorICoJ CVNldHMgdXAgcnVuLXRpbWUgcHJ1bmluZyBkYXRhIHN0cnVjdHVyZSAoUGFydGl0aW9uUHJ1bmVT dGF0ZSkgdGhhdCBpcworICoJCW5lZWRlZCBieSBlYWNoIG9mIHRoZSB0d28gcHJ1bmluZyBmdW5j dGlvbnMuICBBbHNvIGRldGVybWluZXMgdGhlIHNldAorICoJCW9mIGluaXRpYWxseSB2YWxpZCBz dWJwbGFucyBieSBwZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmluZyBzdGVwcywKKyAqCQl0ZWxsaW5n IHRoZSBjYWxsZXIgKHN1Y2ggYXMgRXhlY0luaXRBcHBlbmQpIHRvIGluaXRpYWxpemUgb25seSB0 aG9zZQorICoJCWZvciBleGVjdXRpb24uICBNYXBzIGluIFBhcnRpdGlvblBydW5lU3RhdGUgdGhh dCBhcmUgdXNlZCB0byBtYXAgdGhlCisgKgkJcGFydGl0aW9uIGluZGV4ZXMgcmV0dXJuZWQgYnkg cGFydHBydW5lLmMgZnVuY3Rpb25zIGludG8gdGhlIGluZGV4ZXMKKyAqCQlvZiBwYXJ0aXRpb24n cyBzdWJwbGFucyBpbiB0aGUgcGFyZW50IG5vZGUgKHN1Y2ggYXMgQXBwZW5kKSBhcmUKKyAqCQl1 cGRhdGVkIHRvIGFjY291bnQgZm9yIGluaXRpYWwgcHJ1bmluZyBoYXZpbmcgZWxpbWluYXRlZCBz b21lIG9mIHRoZQorICoJCXN1YnBsYW5zLCBpZiBhbnkuCiAgKgogICogRXhlY0ZpbmRNYXRjaGlu Z1N1YlBsYW5zOgogICoJCVJldHVybnMgaW5kZXhlcyBvZiBtYXRjaGluZyBzdWJwbGFucyBhZnRl ciBldmFsdWF0aW5nIGFsbCBhdmFpbGFibGUKLSAqCQlleHByZXNzaW9ucy4gIFRoaXMgZnVuY3Rp b24gY2FuIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBleGVjdXRpb24gYW5kCi0gKgkJbXVzdCBiZSBj YWxsZWQgYWdhaW4gZWFjaCB0aW1lIHRoZSB2YWx1ZSBvZiBhIFBhcmFtIGxpc3RlZCBpbgotICoJ CVBhcnRpdGlvblBydW5lU3RhdGUncyAnZXhlY3BhcmFtaWRzJyBjaGFuZ2VzLgorICoJCWV4cHJl c3Npb25zLCB0aGF0IGlzLCB1c2luZyBleGVjdXRpb24gcHJ1bmluZyBzdGVwcy4gIFRoaXMgZnVu Y3Rpb24gY2FuCisgKgkJY2FuIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBleGVjdXRpb24gYW5kIG11 c3QgYmUgY2FsbGVkIGFnYWluIGVhY2ggdGltZQorICoJCXRoZSB2YWx1ZSBvZiBhIFBhcmFtIGxp c3RlZCBpbiBQYXJ0aXRpb25QcnVuZVN0YXRlJ3MgJ2V4ZWNwYXJhbWlkcycKKyAqCQljaGFuZ2Vz LgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorLyoKKyAqIEV4ZWNJbml0UGFydGl0aW9uUHJ1 bmluZworICogCQlJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlIG5lZWRlZCBmb3IgcnVuLXRpbWUg cGFydGl0aW9uIHBydW5pbmcKKyAqCisgKiBJbml0aWFsIHBydW5pbmcgY2FuIGJlIGRvbmUgaW1t ZWRpYXRlbHksIHNvIGl0IGlzIGRvbmUgaGVyZSBpZiBuZWVkZWQgYW5kCisgKiB0aGUgc2V0IG9m IHN1cnZpdmluZyBwYXJ0aXRpb24gc3VicGxhbnMnIGluZGV4ZXMgYXJlIGFkZGVkIHRvIHRoZSBv dXRwdXQKKyAqIHBhcmFtZXRlciAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zLiAgSWYgc3VicGxh bnMgYXJlIGluZGVlZCBwcnVuZWQsCisgKiBzdWJwbGFuX21hcCBhcnJheXMgY29udGFpbmVkIGlu IHRoZSByZXR1cm5lZCBQYXJ0aXRpb25QcnVuZVN0YXRlIGFyZQorICogcmUtc2VxdWVuY2VkIHRv IG5vdCBjb3VudCB0aG9zZSwgdGhvdWdoIG9ubHkgaWYgdGhlIG1hcHMgd2lsbCBiZSBuZWVkZWQK KyAqIGZvciBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBwcnVuaW5nIHBhc3Nlcy4KKyAqLworUGFydGl0 aW9uUHJ1bmVTdGF0ZSAqCitFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFu c3RhdGUsCisJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMsCisJCQkJCQkgUGFydGl0aW9uUHJ1 bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1 YnBsYW5zKQoreworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CisJRVN0YXRlICpl c3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCisJLyogV2UgbWF5IG5lZWQgYW4gZXhwcmVzc2lv biBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLworCUV4ZWNBc3NpZ25FeHBy Q29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgd29ya2lu ZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4KKwkgKi8KKwlwcnVuZXN0YXRlID0gRXhlY0Ny ZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVuZWluZm8pOworCisJLyoKKwkg KiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lLCBpZiByZXF1aXJlZC4KKwkgKi8K KwlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKKwl7CisJCS8qIERldGVybWluZSB3 aGljaCBzdWJwbGFucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmluZyAqLworCQkqaW5pdGlhbGx5X3Zh bGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRl KTsKKwl9CisJZWxzZQorCXsKKwkJLyogV2UnbGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJw bGFucyAqLworCQlBc3NlcnQobl90b3RhbF9zdWJwbGFucyA+IDApOworCQkqaW5pdGlhbGx5X3Zh bGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLAorCQkJCQkJCQkJCQkJICBuX3Rv dGFsX3N1YnBsYW5zIC0gMSk7CisJfQorCisJLyoKKwkgKiBSZS1zZXF1ZW5jZSBzdWJwbGFuIGlu ZGV4ZXMgY29udGFpbmVkIGluIHBydW5lc3RhdGUgdG8gYWNjb3VudCBmb3IgYW55CisJICogdGhh dCB3ZXJlIHJlbW92ZWQgYWJvdmUgZHVlIHRvIGluaXRpYWwgcHJ1bmluZy4KKwkgKgorCSAqIFdl IGNhbiBzYWZlbHkgc2tpcCB0aGlzIHdoZW4gIWRvX2V4ZWNfcHJ1bmUsIGV2ZW4gdGhvdWdoIHRo YXQgbGVhdmVzCisJICogaW52YWxpZCBkYXRhIGluIHBydW5lc3RhdGUsIGJlY2F1c2UgdGhhdCBk YXRhIHdvbid0IGJlIGNvbnN1bHRlZCBhZ2FpbgorCSAqIChjZiBpbml0aWFsIEFzc2VydCBpbiBF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMpLgorCSAqLworCWlmIChwcnVuZXN0YXRlLT5kb19leGVj X3BydW5lICYmCisJCWJtc19udW1fbWVtYmVycygqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKSA8 IG5fdG90YWxfc3VicGxhbnMpCisJCUV4ZWNQYXJ0aXRpb25QcnVuZUZpeFN1YlBsYW5JbmRleGVz KHBydW5lc3RhdGUsCisJCQkJCQkJCQkJCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMsCisJCQkJ CQkJCQkJCW5fdG90YWxfc3VicGxhbnMpOworCisJcmV0dXJuIHBydW5lc3RhdGU7Cit9CisKIC8q CiAgKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZQogICoJCUJ1aWxkIHRoZSBkYXRhIHN0 cnVjdHVyZSByZXF1aXJlZCBmb3IgY2FsbGluZwpAQCAtMTUyNyw3ICsxNTkxLDcgQEAgYWRqdXN0 X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRf cnJpKQogICogcmUtdXNlZCBlYWNoIHRpbWUgd2UgcmUtZXZhbHVhdGUgd2hpY2ggcGFydGl0aW9u cyBtYXRjaCB0aGUgcHJ1bmluZyBzdGVwcwogICogcHJvdmlkZWQgaW4gZWFjaCBQYXJ0aXRpb25l ZFJlbFBydW5lSW5mby4KICAqLwotUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCitzdGF0aWMgUGFydGl0 aW9uUHJ1bmVTdGF0ZSAqCiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUg KnBsYW5zdGF0ZSwKIAkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcGFydGl0aW9ucHJ1bmVp bmZvKQogewpAQCAtMTUzNiw2ICsxNjAwLDcgQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNoaWVzOwogCUxp c3RDZWxsICAgKmxjOwogCWludAkJCWk7CisJRXhwckNvbnRleHQJKmVjb250ZXh0ID0gcGxhbnN0 YXRlLT5wc19FeHByQ29udGV4dDsKIAogCS8qIEZvciBkYXRhIHJlYWRpbmcsIGV4ZWN1dG9yIGFs d2F5cyBvbWl0cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCiAJaWYgKGVzdGF0ZS0+ZXNfcGFydGl0 aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQpAQCAtMTcwOSw3ICsxNzc0LDggQEAgRXhlY0NyZWF0ZVBh cnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQl7CiAJCQkJRXhlY0lu aXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5pbml0aWFsX2NvbnRleHQsCiAJCQkJCQkJCQkgICBw aW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLAotCQkJCQkJCQkJICAgcGFydGRlc2MsIHBhcnRr ZXksIHBsYW5zdGF0ZSk7CisJCQkJCQkJCQkgICBwYXJ0ZGVzYywgcGFydGtleSwgcGxhbnN0YXRl LAorCQkJCQkJCQkJICAgZWNvbnRleHQpOwogCQkJCS8qIFJlY29yZCB3aGV0aGVyIGluaXRpYWwg cHJ1bmluZyBpcyBuZWVkZWQgYXQgYW55IGxldmVsICovCiAJCQkJcHJ1bmVzdGF0ZS0+ZG9faW5p dGlhbF9wcnVuZSA9IHRydWU7CiAJCQl9CkBAIC0xNzE4LDcgKzE3ODQsOCBAQCBFeGVjQ3JlYXRl UGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCXsKIAkJCQlFeGVj SW5pdFBydW5pbmdDb250ZXh0KCZwcHJ1bmUtPmV4ZWNfY29udGV4dCwKIAkJCQkJCQkJCSAgIHBp bmZvLT5leGVjX3BydW5pbmdfc3RlcHMsCi0JCQkJCQkJCQkgICBwYXJ0ZGVzYywgcGFydGtleSwg cGxhbnN0YXRlKTsKKwkJCQkJCQkJCSAgIHBhcnRkZXNjLCBwYXJ0a2V5LCBwbGFuc3RhdGUsCisJ CQkJCQkJCQkgICBlY29udGV4dCk7CiAJCQkJLyogUmVjb3JkIHdoZXRoZXIgZXhlYyBwcnVuaW5n IGlzIG5lZWRlZCBhdCBhbnkgbGV2ZWwgKi8KIAkJCQlwcnVuZXN0YXRlLT5kb19leGVjX3BydW5l ID0gdHJ1ZTsKIAkJCX0KQEAgLTE3NDYsNyArMTgxMyw4IEBAIEV4ZWNJbml0UHJ1bmluZ0NvbnRl eHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkgICBMaXN0ICpwcnVuaW5n X3N0ZXBzLAogCQkJCQkgICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNjLAogCQkJCQkgICBQYXJ0aXRp b25LZXkgcGFydGtleSwKLQkJCQkJICAgUGxhblN0YXRlICpwbGFuc3RhdGUpCisJCQkJCSAgIFBs YW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkgICBFeHByQ29udGV4dCAqZWNvbnRleHQpCiB7CiAJ aW50CQkJbl9zdGVwczsKIAlpbnQJCQlwYXJ0bmF0dHM7CkBAIC0xNzY3LDYgKzE4MzUsNyBAQCBF eGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAog CWNvbnRleHQtPnBwY2NvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKIAljb250ZXh0LT5w bGFuc3RhdGUgPSBwbGFuc3RhdGU7CisJY29udGV4dC0+ZXhwcmNvbnRleHQgPSBlY29udGV4dDsK IAogCS8qIEluaXRpYWxpemUgZXhwcmVzc2lvbiBzdGF0ZSBmb3IgZWFjaCBleHByZXNzaW9uIHdl IG5lZWQgKi8KIAljb250ZXh0LT5leHByc3RhdGVzID0gKEV4cHJTdGF0ZSAqKikKQEAgLTE3OTUs OCArMTg2NCwyMCBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4 dCAqY29udGV4dCwKIAkJCQkJCQkJCQkJCQkJc3RlcC0+c3RlcC5zdGVwX2lkLAogCQkJCQkJCQkJ CQkJCQlrZXlubyk7CiAKLQkJCQljb250ZXh0LT5leHByc3RhdGVzW3N0YXRlaWR4XSA9Ci0JCQkJ CUV4ZWNJbml0RXhwcihleHByLCBjb250ZXh0LT5wbGFuc3RhdGUpOworCQkJCS8qCisJCQkJICog V2hlbiBwbGFuc3RhdGUgaXMgTlVMTCwgcHJ1bmluZ19zdGVwcyBpcyBrbm93biBub3QgdG8KKwkJ CQkgKiBjb250YWluIGFueSBleHByZXNzaW9ucyB0aGF0IGRlcGVuZCBvbiB0aGUgcGFyZW50IHBs YW4uCisJCQkJICogSW5mb3JtYXRpb24gb2YgYW55IGF2YWlsYWJsZSBFWFRFUk4gcGFyYW1ldGVy cyBtdXN0IGJlCisJCQkJICogcGFzc2VkIGV4cGxpY2l0bHkgaW4gdGhhdCBjYXNlLCB3aGljaCB0 aGUgY2FsbGVyIG11c3QKKwkJCQkgKiBoYXZlIG1hZGUgYXZhaWxhYmxlIHZpYSBlY29udGV4dC4K KwkJCQkgKi8KKwkJCQlpZiAocGxhbnN0YXRlID09IE5VTEwpCisJCQkJCWNvbnRleHQtPmV4cHJz dGF0ZXNbc3RhdGVpZHhdID0KKwkJCQkJCUV4ZWNJbml0RXhwcldpdGhQYXJhbXMoZXhwciwKKwkJ CQkJCQkJCQkJICAgZWNvbnRleHQtPmVjeHRfcGFyYW1fbGlzdF9pbmZvKTsKKwkJCQllbHNlCisJ CQkJCWNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdID0KKwkJCQkJCUV4ZWNJbml0RXhwcihl eHByLCBjb250ZXh0LT5wbGFuc3RhdGUpOwogCQkJfQogCQkJa2V5bm8rKzsKIAkJfQpAQCAtMTgx NiwxMSArMTg5Nyw5IEBAIEV4ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250 ZXh0ICpjb250ZXh0LAogICoKICAqIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgJ3BydW5l c3RhdGUnLCBhbmQgb25seSBpZiBpbml0aWFsIHBydW5pbmcKICAqIGlzIHJlcXVpcmVkLgotICoK LSAqICduc3VicGxhbnMnIG11c3QgYmUgcGFzc2VkIGFzIHRoZSB0b3RhbCBudW1iZXIgb2YgdW5w cnVuZWQgc3VicGxhbnMuCiAgKi8KLUJpdG1hcHNldCAqCi1FeGVjRmluZEluaXRpYWxNYXRjaGlu Z1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsIGludCBuc3VicGxhbnMp CitzdGF0aWMgQml0bWFwc2V0ICoKK0V4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFy dGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSkKIHsKIAlCaXRtYXBzZXQgICpyZXN1bHQgPSBO VUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKQEAgLTE4NDUsMTQgKzE5MjQsMjAgQEAg RXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVu ZXN0YXRlLCBpbnQgbnN1YnBsYW5zKQogCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1 bmU7CiAKIAkJcHJ1bmVkYXRhID0gcHJ1bmVzdGF0ZS0+cGFydHBydW5lZGF0YVtpXTsKKworCQkv KgorCQkgKiBXZSBwYXNzIHRoZSAxc3QgaXRlbSBiZWxvbmdpbmcgdG8gdGhlIHJvb3QgdGFibGUg b2YgdGhlIGhpZXJhcmNoeQorCQkgKiBhbmQgZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNl KCkgdGFrZXMgY2FyZSBvZiByZWN1cnNpbmcgdG8KKwkJICogb3RoZXIgKGxvd2VyLWxldmVsKSBw YXJlbnRzIGFzIG5lZWRlZC4KKwkJICovCiAJCXBwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxw cnVuZWRhdGFbMF07CiAKIAkJLyogUGVyZm9ybSBwcnVuaW5nIHdpdGhvdXQgdXNpbmcgUEFSQU1f RVhFQyBQYXJhbXMgKi8KIAkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0 YSwgcHBydW5lLCB0cnVlLCAmcmVzdWx0KTsKIAotCQkvKiBFeHByZXNzaW9uIGV2YWwgbWF5IGhh dmUgdXNlZCBzcGFjZSBpbiBub2RlJ3MgcHNfRXhwckNvbnRleHQgdG9vICovCisJCS8qIEV4cHJl c3Npb24gZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNlIGluIEV4cHJDb250ZXh0IHRvbyAqLwogCQlp ZiAocHBydW5lLT5pbml0aWFsX3BydW5pbmdfc3RlcHMpCi0JCQlSZXNldEV4cHJDb250ZXh0KHBw cnVuZS0+aW5pdGlhbF9jb250ZXh0LnBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQpOworCQkJUmVz ZXRFeHByQ29udGV4dChwcHJ1bmUtPmluaXRpYWxfY29udGV4dC5leHByY29udGV4dCk7CiAJfQog CiAJLyogQWRkIGluIGFueSBzdWJwbGFucyB0aGF0IHBhcnRpdGlvbiBwcnVuaW5nIGRpZG4ndCBh Y2NvdW50IGZvciAqLwpAQCAtMTg2NSwxMTggKzE5NTAsMTIwIEBAIEV4ZWNGaW5kSW5pdGlhbE1h dGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwgaW50IG5zdWJw bGFucykKIAogCU1lbW9yeUNvbnRleHRSZXNldChwcnVuZXN0YXRlLT5wcnVuZV9jb250ZXh0KTsK IAorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBFeGVjUGFydGl0aW9uUHJ1bmVGaXhTdWJQ bGFuSW5kZXhlcworICoJCUZpeCBtYXBwaW5nIG9mIHBhcnRpdGlvbiBpbmRleGVzIHRvIHN1YnBs YW4gaW5kZXhlcyBjb250YWluZWQgaW4KKyAqCQlwcnVuZXN0YXRlIGJ5IGNvbnNpZGVyaW5nIHRo ZSBuZXcgbGlzdCBvZiBzdWJwbGFucyB0aGF0IHN1cnZpdmVkCisgKgkJaW5pdGlhbCBwcnVuaW5n CisgKgorICogU3VicGxhbnMgd291bGQgYmUgcHJldmlvdXNseSBpbmRleGVkIDAuLihuX3RvdGFs X3N1YnBsYW5zIC0gMSksIHRob3VnaAorICogbm93IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGluZGV4 IHJhbmdlIDAuLm51bShpbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpLgorICovCitzdGF0aWMgdm9p ZAorRXhlY1BhcnRpdGlvblBydW5lRml4U3ViUGxhbkluZGV4ZXMoUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVzdGF0ZSwKKwkJCQkJCQkJCUJpdG1hcHNldCAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBs YW5zLAorCQkJCQkJCQkJaW50IG5fdG90YWxfc3VicGxhbnMpCit7CisJaW50CQkgICAqbmV3X3N1 YnBsYW5faW5kZXhlczsKKwlCaXRtYXBzZXQgICpuZXdfb3RoZXJfc3VicGxhbnM7CisJaW50CQkJ aTsKKwlpbnQJCQluZXdpZHg7CisKIAkvKgotCSAqIElmIGV4ZWMtdGltZSBwcnVuaW5nIGlzIHJl cXVpcmVkIGFuZCB3ZSBwcnVuZWQgc3VicGxhbnMgYWJvdmUsIHRoZW4gd2UKLQkgKiBtdXN0IHJl LXNlcXVlbmNlIHRoZSBzdWJwbGFuIGluZGV4ZXMgc28gdGhhdCBFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMKLQkgKiBwcm9wZXJseSByZXR1cm5zIHRoZSBpbmRleGVzIGZyb20gdGhlIHN1YnBsYW5z IHdoaWNoIHdpbGwgcmVtYWluIGFmdGVyCi0JICogZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24u Ci0JICoKLQkgKiBXZSBjYW4gc2FmZWx5IHNraXAgdGhpcyB3aGVuICFkb19leGVjX3BydW5lLCBl dmVuIHRob3VnaCB0aGF0IGxlYXZlcwotCSAqIGludmFsaWQgZGF0YSBpbiBwcnVuZXN0YXRlLCBi ZWNhdXNlIHRoYXQgZGF0YSB3b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KLQkgKiAoY2YgaW5pdGlh bCBBc3NlcnQgaW4gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKS4KKwkgKiBGaXJzdCB3ZSBtdXN0 IGJ1aWxkIGEgdGVtcG9yYXJ5IGFycmF5IHdoaWNoIG1hcHMgb2xkIHN1YnBsYW4KKwkgKiBpbmRl eGVzIHRvIG5ldyBvbmVzLiAgRm9yIGNvbnZlbmllbmNlIG9mIGluaXRpYWxpemF0aW9uLCB3ZSB1 c2UKKwkgKiAxLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBhcnJheSBhbmQgbGVhdmUgcHJ1bmVkIGl0 ZW1zIGFzIDAuCiAJICovCi0JaWYgKHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgYm1zX251 bV9tZW1iZXJzKHJlc3VsdCkgPCBuc3VicGxhbnMpCisJbmV3X3N1YnBsYW5faW5kZXhlcyA9IChp bnQgKikgcGFsbG9jMChzaXplb2YoaW50KSAqIG5fdG90YWxfc3VicGxhbnMpOworCW5ld2lkeCA9 IDE7CisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihpbml0aWFsbHlfdmFs aWRfc3VicGxhbnMsIGkpKSA+PSAwKQogCXsKLQkJaW50CQkgICAqbmV3X3N1YnBsYW5faW5kZXhl czsKLQkJQml0bWFwc2V0ICAqbmV3X290aGVyX3N1YnBsYW5zOwotCQlpbnQJCQlpOwotCQlpbnQJ CQluZXdpZHg7CisJCUFzc2VydChpIDwgbl90b3RhbF9zdWJwbGFucyk7CisJCW5ld19zdWJwbGFu X2luZGV4ZXNbaV0gPSBuZXdpZHgrKzsKKwl9CiAKLQkJLyoKLQkJICogRmlyc3Qgd2UgbXVzdCBi dWlsZCBhIHRlbXBvcmFyeSBhcnJheSB3aGljaCBtYXBzIG9sZCBzdWJwbGFuCi0JCSAqIGluZGV4 ZXMgdG8gbmV3IG9uZXMuICBGb3IgY29udmVuaWVuY2Ugb2YgaW5pdGlhbGl6YXRpb24sIHdlIHVz ZQotCQkgKiAxLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBhcnJheSBhbmQgbGVhdmUgcHJ1bmVkIGl0 ZW1zIGFzIDAuCi0JCSAqLwotCQluZXdfc3VicGxhbl9pbmRleGVzID0gKGludCAqKSBwYWxsb2Mw KHNpemVvZihpbnQpICogbnN1YnBsYW5zKTsKLQkJbmV3aWR4ID0gMTsKLQkJaSA9IC0xOwotCQl3 aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVzdWx0LCBpKSkgPj0gMCkKLQkJewotCQkJQXNz ZXJ0KGkgPCBuc3VicGxhbnMpOwotCQkJbmV3X3N1YnBsYW5faW5kZXhlc1tpXSA9IG5ld2lkeCsr OwotCQl9CisJLyoKKwkgKiBOb3cgd2UgY2FuIHVwZGF0ZSBlYWNoIFBhcnRpdGlvbmVkUmVsUHJ1 bmVJbmZvJ3Mgc3VicGxhbl9tYXAgd2l0aAorCSAqIG5ldyBzdWJwbGFuIGluZGV4ZXMuICBXZSBt dXN0IGFsc28gcmVjb21wdXRlIGl0cyBwcmVzZW50X3BhcnRzCisJICogYml0bWFwLgorCSAqLwor CWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5lZGF0YTsgaSsrKQorCXsK KwkJUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSA9IHBydW5lc3RhdGUtPnBhcnRwcnVu ZWRhdGFbaV07CisJCWludAkJCWo7CiAKIAkJLyoKLQkJICogTm93IHdlIGNhbiB1cGRhdGUgZWFj aCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbydzIHN1YnBsYW5fbWFwIHdpdGgKLQkJICogbmV3IHN1 YnBsYW4gaW5kZXhlcy4gIFdlIG11c3QgYWxzbyByZWNvbXB1dGUgaXRzIHByZXNlbnRfcGFydHMK LQkJICogYml0bWFwLgorCQkgKiBXaXRoaW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZvcm0gdGhp cyBsb29wIGluIGJhY2stdG8tZnJvbnQKKwkJICogb3JkZXIgc28gdGhhdCB3ZSBkZXRlcm1pbmUg cHJlc2VudF9wYXJ0cyBmb3IgdGhlIGxvd2VzdC1sZXZlbAorCQkgKiBwYXJ0aXRpb25lZCB0YWJs ZXMgZmlyc3QuICBUaGlzIHdheSB3ZSBjYW4gdGVsbCB3aGV0aGVyIGEKKwkJICogc3ViLXBhcnRp dGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3ZQorCQkg KiBjYW4gZXhjbHVkZSBpdCBmcm9tIHRoZSBjdXJyZW50IGxldmVsJ3MgcHJlc2VudF9wYXJ0cy4K IAkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5lZGF0YTsg aSsrKQorCQlmb3IgKGogPSBwcnVuZWRhdGEtPm51bV9wYXJ0cmVscHJ1bmVkYXRhIC0gMTsgaiA+ PSAwOyBqLS0pCiAJCXsKLQkJCVBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEgPSBwcnVu ZXN0YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwotCQkJaW50CQkJajsKKwkJCVBhcnRpdGlvbmVkUmVs UHJ1bmluZ0RhdGEgKnBwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFbal07CisJ CQlpbnQJCQlucGFydHMgPSBwcHJ1bmUtPm5wYXJ0czsKKwkJCWludAkJCWs7CiAKLQkJCS8qCi0J CQkgKiBXaXRoaW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZvcm0gdGhpcyBsb29wIGluIGJhY2st dG8tZnJvbnQKLQkJCSAqIG9yZGVyIHNvIHRoYXQgd2UgZGV0ZXJtaW5lIHByZXNlbnRfcGFydHMg Zm9yIHRoZSBsb3dlc3QtbGV2ZWwKLQkJCSAqIHBhcnRpdGlvbmVkIHRhYmxlcyBmaXJzdC4gIFRo aXMgd2F5IHdlIGNhbiB0ZWxsIHdoZXRoZXIgYQotCQkJICogc3ViLXBhcnRpdGlvbmVkIHRhYmxl J3MgcGFydGl0aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3ZQotCQkJICogY2FuIGV4Y2x1 ZGUgaXQgZnJvbSB0aGUgY3VycmVudCBsZXZlbCdzIHByZXNlbnRfcGFydHMuCi0JCQkgKi8KLQkJ CWZvciAoaiA9IHBydW5lZGF0YS0+bnVtX3BhcnRyZWxwcnVuZWRhdGEgLSAxOyBqID49IDA7IGot LSkKLQkJCXsKLQkJCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUgPSAmcHJ1bmVk YXRhLT5wYXJ0cmVscHJ1bmVkYXRhW2pdOwotCQkJCWludAkJCW5wYXJ0cyA9IHBwcnVuZS0+bnBh cnRzOwotCQkJCWludAkJCWs7CisJCQkvKiBXZSBqdXN0IHJlYnVpbGQgcHJlc2VudF9wYXJ0cyBm cm9tIHNjcmF0Y2ggKi8KKwkJCWJtc19mcmVlKHBwcnVuZS0+cHJlc2VudF9wYXJ0cyk7CisJCQlw cHJ1bmUtPnByZXNlbnRfcGFydHMgPSBOVUxMOwogCi0JCQkJLyogV2UganVzdCByZWJ1aWxkIHBy ZXNlbnRfcGFydHMgZnJvbSBzY3JhdGNoICovCi0JCQkJYm1zX2ZyZWUocHBydW5lLT5wcmVzZW50 X3BhcnRzKTsKLQkJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPSBOVUxMOworCQkJZm9yIChrID0g MDsgayA8IG5wYXJ0czsgaysrKQorCQkJeworCQkJCWludAkJCW9sZGlkeCA9IHBwcnVuZS0+c3Vi cGxhbl9tYXBba107CisJCQkJaW50CQkJc3ViaWR4OwogCi0JCQkJZm9yIChrID0gMDsgayA8IG5w YXJ0czsgaysrKQorCQkJCS8qCisJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24gZXhpc3RlZCBhcyBh IHN1YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCisJCQkJICogb2xkIHN1YnBsYW4gaW5kZXggdG8gdGhl IG5ldyBzdWJwbGFuIGluZGV4LiAgVGhlIG5ldworCQkJCSAqIGluZGV4IG1heSBiZWNvbWUgLTEg aWYgdGhlIHBhcnRpdGlvbiB3YXMgcHJ1bmVkIGFib3ZlLAorCQkJCSAqIG9yIGl0IG1heSBqdXN0 IGNvbWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bworCQkJCSAqIHNvbWUgc3Vi cGxhbnMgYmVpbmcgcmVtb3ZlZCBlYXJsaWVyIGluIHRoZSBsaXN0LiAgSWYKKwkJCQkgKiBpdCdz IGEgc3VicGFydGl0aW9uLCBhZGQgaXQgdG8gcHJlc2VudF9wYXJ0cyB1bmxlc3MKKwkJCQkgKiBp dCdzIGVudGlyZWx5IHBydW5lZC4KKwkJCQkgKi8KKwkJCQlpZiAob2xkaWR4ID49IDApCiAJCQkJ ewotCQkJCQlpbnQJCQlvbGRpZHggPSBwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdOwotCQkJCQlpbnQJ CQlzdWJpZHg7Ci0KLQkJCQkJLyoKLQkJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24gZXhpc3RlZCBh cyBhIHN1YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCi0JCQkJCSAqIG9sZCBzdWJwbGFuIGluZGV4IHRv IHRoZSBuZXcgc3VicGxhbiBpbmRleC4gIFRoZSBuZXcKLQkJCQkJICogaW5kZXggbWF5IGJlY29t ZSAtMSBpZiB0aGUgcGFydGl0aW9uIHdhcyBwcnVuZWQgYWJvdmUsCi0JCQkJCSAqIG9yIGl0IG1h eSBqdXN0IGNvbWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bwotCQkJCQkgKiBz b21lIHN1YnBsYW5zIGJlaW5nIHJlbW92ZWQgZWFybGllciBpbiB0aGUgbGlzdC4gIElmCi0JCQkJ CSAqIGl0J3MgYSBzdWJwYXJ0aXRpb24sIGFkZCBpdCB0byBwcmVzZW50X3BhcnRzIHVubGVzcwot CQkJCQkgKiBpdCdzIGVudGlyZWx5IHBydW5lZC4KLQkJCQkJICovCi0JCQkJCWlmIChvbGRpZHgg Pj0gMCkKLQkJCQkJewotCQkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5zdWJwbGFucyk7Ci0JCQkJCQlw cHJ1bmUtPnN1YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhdIC0gMTsK KwkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5fdG90YWxfc3VicGxhbnMpOworCQkJCQlwcHJ1bmUtPnN1 YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhdIC0gMTsKIAotCQkJCQkJ aWYgKG5ld19zdWJwbGFuX2luZGV4ZXNbb2xkaWR4XSA+IDApCi0JCQkJCQkJcHBydW5lLT5wcmVz ZW50X3BhcnRzID0KLQkJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50X3BhcnRz LCBrKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmICgoc3ViaWR4ID0gcHBydW5lLT5zdWJwYXJ0X21h cFtrXSkgPj0gMCkKLQkJCQkJewotCQkJCQkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqc3Vi cHJ1bmU7CisJCQkJCWlmIChuZXdfc3VicGxhbl9pbmRleGVzW29sZGlkeF0gPiAwKQorCQkJCQkJ cHBydW5lLT5wcmVzZW50X3BhcnRzID0KKwkJCQkJCQlibXNfYWRkX21lbWJlcihwcHJ1bmUtPnBy ZXNlbnRfcGFydHMsIGspOworCQkJCX0KKwkJCQllbHNlIGlmICgoc3ViaWR4ID0gcHBydW5lLT5z dWJwYXJ0X21hcFtrXSkgPj0gMCkKKwkJCQl7CisJCQkJCVBhcnRpdGlvbmVkUmVsUHJ1bmluZ0Rh dGEgKnN1YnBydW5lOwogCi0JCQkJCQlzdWJwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVu ZWRhdGFbc3ViaWR4XTsKKwkJCQkJc3VicHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVk YXRhW3N1YmlkeF07CiAKLQkJCQkJCWlmICghYm1zX2lzX2VtcHR5KHN1YnBydW5lLT5wcmVzZW50 X3BhcnRzKSkKLQkJCQkJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPQotCQkJCQkJCQlibXNfYWRk X21lbWJlcihwcHJ1bmUtPnByZXNlbnRfcGFydHMsIGspOwotCQkJCQl9CisJCQkJCWlmICghYm1z X2lzX2VtcHR5KHN1YnBydW5lLT5wcmVzZW50X3BhcnRzKSkKKwkJCQkJCXBwcnVuZS0+cHJlc2Vu dF9wYXJ0cyA9CisJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50X3BhcnRzLCBr KTsKIAkJCQl9CiAJCQl9CiAJCX0KKwl9CiAKLQkJLyoKLQkJICogV2UgbXVzdCBhbHNvIHJlY29t cHV0ZSB0aGUgb3RoZXJfc3VicGxhbnMgc2V0LCBzaW5jZSBpbmRleGVzIGluIGl0Ci0JCSAqIG1h eSBjaGFuZ2UuCi0JCSAqLwotCQluZXdfb3RoZXJfc3VicGxhbnMgPSBOVUxMOwotCQlpID0gLTE7 Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwcnVuZXN0YXRlLT5vdGhlcl9zdWJwbGFu cywgaSkpID49IDApCi0JCQluZXdfb3RoZXJfc3VicGxhbnMgPSBibXNfYWRkX21lbWJlcihuZXdf b3RoZXJfc3VicGxhbnMsCi0JCQkJCQkJCQkJCQluZXdfc3VicGxhbl9pbmRleGVzW2ldIC0gMSk7 Ci0KLQkJYm1zX2ZyZWUocHJ1bmVzdGF0ZS0+b3RoZXJfc3VicGxhbnMpOwotCQlwcnVuZXN0YXRl LT5vdGhlcl9zdWJwbGFucyA9IG5ld19vdGhlcl9zdWJwbGFuczsKKwkvKgorCSAqIFdlIG11c3Qg YWxzbyByZWNvbXB1dGUgdGhlIG90aGVyX3N1YnBsYW5zIHNldCwgc2luY2UgaW5kZXhlcyBpbiBp dAorCSAqIG1heSBjaGFuZ2UuCisJICovCisJbmV3X290aGVyX3N1YnBsYW5zID0gTlVMTDsKKwlp ID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBydW5lc3RhdGUtPm90aGVyX3N1 YnBsYW5zLCBpKSkgPj0gMCkKKwkJbmV3X290aGVyX3N1YnBsYW5zID0gYm1zX2FkZF9tZW1iZXIo bmV3X290aGVyX3N1YnBsYW5zLAorCQkJCQkJCQkJCQluZXdfc3VicGxhbl9pbmRleGVzW2ldIC0g MSk7CiAKLQkJcGZyZWUobmV3X3N1YnBsYW5faW5kZXhlcyk7Ci0JfQorCWJtc19mcmVlKHBydW5l c3RhdGUtPm90aGVyX3N1YnBsYW5zKTsKKwlwcnVuZXN0YXRlLT5vdGhlcl9zdWJwbGFucyA9IG5l d19vdGhlcl9zdWJwbGFuczsKIAotCXJldHVybiByZXN1bHQ7CisJcGZyZWUobmV3X3N1YnBsYW5f aW5kZXhlcyk7CiB9CiAKIC8qCkBAIC0yMDE4LDExICsyMTA1LDE2IEBAIEV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKQogCQlwcnVuZWRhdGEg PSBwcnVuZXN0YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwogCQlwcHJ1bmUgPSAmcHJ1bmVkYXRhLT5w YXJ0cmVscHJ1bmVkYXRhWzBdOwogCisJCS8qCisJCSAqIFdlIHBhc3MgdGhlIDFzdCBpdGVtIGJl bG9uZ2luZyB0byB0aGUgcm9vdCB0YWJsZSBvZiB0aGUgaGllcmFyY2h5CisJCSAqIGFuZCBmaW5k X21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoKSB0YWtlcyBjYXJlIG9mIHJlY3Vyc2luZyB0bwor CQkgKiBvdGhlciAobG93ZXItbGV2ZWwpIHBhcmVudHMgYXMgbmVlZGVkLgorCQkgKi8KIAkJZmlu ZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCBmYWxzZSwgJnJl c3VsdCk7CiAKLQkJLyogRXhwcmVzc2lvbiBldmFsIG1heSBoYXZlIHVzZWQgc3BhY2UgaW4gbm9k ZSdzIHBzX0V4cHJDb250ZXh0IHRvbyAqLworCQkvKiBFeHByZXNzaW9uIGV2YWwgbWF5IGhhdmUg dXNlZCBzcGFjZSBpbiBFeHByQ29udGV4dCB0b28gKi8KIAkJaWYgKHBwcnVuZS0+ZXhlY19wcnVu aW5nX3N0ZXBzKQotCQkJUmVzZXRFeHByQ29udGV4dChwcHJ1bmUtPmV4ZWNfY29udGV4dC5wbGFu c3RhdGUtPnBzX0V4cHJDb250ZXh0KTsKKwkJCVJlc2V0RXhwckNvbnRleHQocHBydW5lLT5leGVj X2NvbnRleHQuZXhwcmNvbnRleHQpOwogCX0KIAogCS8qIEFkZCBpbiBhbnkgc3VicGxhbnMgdGhh dCBwYXJ0aXRpb24gcHJ1bmluZyBkaWRuJ3QgYWNjb3VudCBmb3IgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVBcHBlbmQuYwppbmRleCA3OTM3ZjFjODhmLi41YjZkM2ViMjNiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUFwcGVuZC5jCkBAIC0xMzgsMzAgKzEzOCwxNyBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQg Km5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVT dGF0ZSAqcHJ1bmVzdGF0ZTsKIAotCQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRl eHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCi0JCUV4ZWNBc3NpZ25FeHByQ29udGV4 dChlc3RhdGUsICZhcHBlbmRzdGF0ZS0+cHMpOwotCi0JCS8qIENyZWF0ZSB0aGUgd29ya2luZyBk YXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQ YXJ0aXRpb25QcnVuZVN0YXRlKCZhcHBlbmRzdGF0ZS0+cHMsCi0JCQkJCQkJCQkJCQkgICBub2Rl LT5wYXJ0X3BydW5lX2luZm8pOworCQkvKgorCQkgKiBTZXQgdXAgcHJ1bmluZyBkYXRhIHN0cnVj dHVyZS4gIEluaXRpYWwgcHJ1bmluZyBzdGVwcywgaWYgYW55LCBhcmUKKwkJICogcGVyZm9ybWVk IGFzIHBhcnQgb2YgdGhlIHNldHVwLCBhZGRpbmcgdGhlIHNldCBvZiBpbmRleGVzIG9mCisJCSAq IHN1cnZpdmluZyBzdWJwbGFucyB0byAndmFsaWRzdWJwbGFucycuCisJCSAqLworCQlwcnVuZXN0 YXRlID0gRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKCZhcHBlbmRzdGF0ZS0+cHMsCisJCQkJCQkJ CQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAorCQkJCQkJCQkJCQkgIG5vZGUt PnBhcnRfcHJ1bmVfaW5mbywKKwkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CiAJCWFwcGVu ZHN0YXRlLT5hc19wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7Ci0KLQkJLyogUGVyZm9ybSBhbiBp bml0aWFsIHBhcnRpdGlvbiBwcnVuZSwgaWYgcmVxdWlyZWQuICovCi0JCWlmIChwcnVuZXN0YXRl LT5kb19pbml0aWFsX3BydW5lKQotCQl7Ci0JCQkvKiBEZXRlcm1pbmUgd2hpY2ggc3VicGxhbnMg c3Vydml2ZSBpbml0aWFsIHBydW5pbmcgKi8KLQkJCXZhbGlkc3VicGxhbnMgPSBFeGVjRmluZElu aXRpYWxNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsCi0JCQkJCQkJCQkJCQkJCQlsaXN0X2xl bmd0aChub2RlLT5hcHBlbmRwbGFucykpOwotCi0JCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnMo dmFsaWRzdWJwbGFucyk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBXZSdsbCBuZWVkIHRvIGlu aXRpYWxpemUgYWxsIHN1YnBsYW5zICovCi0JCQlucGxhbnMgPSBsaXN0X2xlbmd0aChub2RlLT5h cHBlbmRwbGFucyk7Ci0JCQlBc3NlcnQobnBsYW5zID4gMCk7Ci0JCQl2YWxpZHN1YnBsYW5zID0g Ym1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKLQkJfQorCQlucGxhbnMgPSBibXNf bnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CiAKIAkJLyoKIAkJICogV2hlbiBubyBydW4tdGlt ZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCA0MThmODlkZWE4Li45YTlmMjllODQ1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtODYsMjkgKzg2LDE3IEBA IEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKIAotCQkv KiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9u IGV4cHJzICovCi0JCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsICZtZXJnZXN0YXRlLT5w cyk7Ci0KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCZtZXJn ZXN0YXRlLT5wcywKLQkJCQkJCQkJCQkJCSAgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mbyk7CisJCS8q CisJCSAqIFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgSW5pdGlhbCBwcnVuaW5nIHN0 ZXBzLCBpZiBhbnksIGFyZQorCQkgKiBwZXJmb3JtZWQgYXMgcGFydCBvZiB0aGUgc2V0dXAsIGFk ZGluZyB0aGUgc2V0IG9mIGluZGV4ZXMgb2YKKwkJICogc3Vydml2aW5nIHN1YnBsYW5zIHRvICd2 YWxpZHN1YnBsYW5zJy4KKwkJICovCisJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvblBy dW5pbmcoJm1lcmdlc3RhdGUtPnBzLAorCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5vZGUtPm1l cmdlcGxhbnMpLAorCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mbywKKwkJCQkJCQkJ CQkJICAmdmFsaWRzdWJwbGFucyk7CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gcHJ1 bmVzdGF0ZTsKLQotCQkvKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lLCBpZiBy ZXF1aXJlZC4gKi8KLQkJaWYgKHBydW5lc3RhdGUtPmRvX2luaXRpYWxfcHJ1bmUpCi0JCXsKLQkJ CS8qIERldGVybWluZSB3aGljaCBzdWJwbGFucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmluZyAqLwot CQkJdmFsaWRzdWJwbGFucyA9IEV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVz dGF0ZSwKLQkJCQkJCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMpKTsKLQot CQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwotCQl9Ci0JCWVsc2UK LQkJewotCQkJLyogV2UnbGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAqLwotCQkJ bnBsYW5zID0gbGlzdF9sZW5ndGgobm9kZS0+bWVyZ2VwbGFucyk7Ci0JCQlBc3NlcnQobnBsYW5z ID4gMCk7Ci0JCQl2YWxpZHN1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMg LSAxKTsKLQkJfQorCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CiAK IAkJLyoKIAkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVy ZSdzIGF0IGxlYXN0IG9uZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3Bh cnRwcnVuZS5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCmluZGV4IDFi YzAwODI2YzEuLjcwODBjYjI1ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmlu Zy9wYXJ0cHJ1bmUuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMK QEAgLTc5OCw2ICs3OTgsNyBAQCBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMoUmVsT3B0SW5m byAqcmVsKQogCiAJLyogVGhlc2UgYXJlIG5vdCB2YWxpZCB3aGVuIGJlaW5nIGNhbGxlZCBmcm9t IHRoZSBwbGFubmVyICovCiAJY29udGV4dC5wbGFuc3RhdGUgPSBOVUxMOworCWNvbnRleHQuZXhw cmNvbnRleHQgPSBOVUxMOwogCWNvbnRleHQuZXhwcnN0YXRlcyA9IE5VTEw7CiAKIAkvKiBBY3R1 YWwgcHJ1bmluZyBoYXBwZW5zIGhlcmUuICovCkBAIC04MDgsOCArODA5LDggQEAgcHJ1bmVfYXBw ZW5kX3JlbF9wYXJ0aXRpb25zKFJlbE9wdEluZm8gKnJlbCkKICAqIGdldF9tYXRjaGluZ19wYXJ0 aXRpb25zCiAgKgkJRGV0ZXJtaW5lIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIHBhcnRpdGlvbiBw cnVuaW5nCiAgKgotICogTm90ZTogY29udGV4dC0+cGxhbnN0YXRlIG11c3QgYmUgc2V0IHRvIGEg dmFsaWQgUGxhblN0YXRlIHdoZW4gdGhlCi0gKiBwcnVuaW5nX3N0ZXBzIHdlcmUgZ2VuZXJhdGVk IHdpdGggYSB0YXJnZXQgb3RoZXIgdGhhbiBQQVJUVEFSR0VUX1BMQU5ORVIuCisgKiBOb3RlOiBj b250ZXh0LT5leHByY29udGV4dCBtdXN0IGJlIHZhbGlkIHdoZW4gdGhlIHBydW5pbmdfc3RlcHMg d2VyZQorICogZ2VuZXJhdGVkIHdpdGggYSB0YXJnZXQgb3RoZXIgdGhhbiBQQVJUVEFSR0VUX1BM QU5ORVIuCiAgKgogICogUmV0dXJucyBhIEJpdG1hcHNldCBvZiB0aGUgUmVsT3B0SW5mby0+cGFy dF9yZWxzIGluZGV4ZXMgb2YgdGhlIHN1cnZpdmluZwogICogcGFydGl0aW9ucy4KQEAgLTM2NTQs NyArMzY1NSw3IEBAIG1hdGNoX2Jvb2xlYW5fcGFydGl0aW9uX2NsYXVzZShPaWQgcGFydG9wZmFt aWx5LCBFeHByICpjbGF1c2UsIEV4cHIgKnBhcnRrZXksCiAgKiBleHByc3RhdGUgYXJyYXkuCiAg KgogICogTm90ZSB0aGF0IHRoZSBldmFsdWF0ZWQgcmVzdWx0IG1heSBiZSBpbiB0aGUgcGVyLXR1 cGxlIG1lbW9yeSBjb250ZXh0IG9mCi0gKiBjb250ZXh0LT5wbGFuc3RhdGUtPnBzX0V4cHJDb250 ZXh0LCBhbmQgd2UgbWF5IGhhdmUgbGVha2VkIG90aGVyIG1lbW9yeQorICogY29udGV4dC0+ZXhw cmNvbnRleHQsIGFuZCB3ZSBtYXkgaGF2ZSBsZWFrZWQgb3RoZXIgbWVtb3J5CiAgKiB0aGVyZSB0 b28uICBUaGlzIG1lbW9yeSBtdXN0IGJlIHJlY292ZXJlZCBieSByZXNldHRpbmcgdGhhdCBFeHBy Q29udGV4dAogICogYWZ0ZXIgd2UncmUgZG9uZSB3aXRoIHRoZSBwcnVuaW5nIG9wZXJhdGlvbiAo c2VlIGV4ZWNQYXJ0aXRpb24uYykuCiAgKi8KQEAgLTM2NzcsMTMgKzM2NzgsMTggQEAgcGFydGtl eV9kYXR1bV9mcm9tX2V4cHIoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQlFeHBy Q29udGV4dCAqZWN0eDsKIAogCQkvKgotCQkgKiBXZSBzaG91bGQgbmV2ZXIgc2VlIGEgbm9uLUNv bnN0IGluIGEgc3RlcCB1bmxlc3Mgd2UncmUgcnVubmluZyBpbgotCQkgKiB0aGUgZXhlY3V0b3Iu CisJCSAqIFdlIHNob3VsZCBuZXZlciBzZWUgYSBub24tQ29uc3QgaW4gYSBzdGVwIHVubGVzcyB0 aGUgY2FsbGVyIGhhcworCQkgKiBwYXNzZWQgYSB2YWxpZCBFeHByQ29udGV4dC4KKwkJICoKKwkJ ICogV2hlbiBjb250ZXh0LT5wbGFuc3RhdGUgaXMgdmFsaWQsIGNvbnRleHQtPmV4cHJjb250ZXh0 IGlzIHNhbWUKKwkJICogYXMgY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dC4KIAkJ ICovCi0JCUFzc2VydChjb250ZXh0LT5wbGFuc3RhdGUgIT0gTlVMTCk7CisJCUFzc2VydChjb250 ZXh0LT5wbGFuc3RhdGUgIT0gTlVMTCB8fCBjb250ZXh0LT5leHByY29udGV4dCAhPSBOVUxMKTsK KwkJQXNzZXJ0KGNvbnRleHQtPnBsYW5zdGF0ZSA9PSBOVUxMIHx8CisJCQkgICAoY29udGV4dC0+ ZXhwcmNvbnRleHQgPT0gY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCkpOwogCiAJ CWV4cHJzdGF0ZSA9IGNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdOwotCQllY3R4ID0gY29u dGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dDsKKwkJZWN0eCA9IGNvbnRleHQtPmV4cHJj b250ZXh0OwogCQkqdmFsdWUgPSBFeGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0KGV4cHJzdGF0ZSwg ZWN0eCwgaXNudWxsKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5k ZXggNjAzZDhiZWNjNC4uZmQ1NzM1YTk0NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRp b24uaApAQCAtMTE5LDEwICsxMTksOSBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0ZpbmRQ YXJ0aXRpb24oTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAkJCQkJCQkJCQlFU3RhdGUgKmVz dGF0ZSk7CiBleHRlcm4gdm9pZCBFeGVjQ2xlYW51cFR1cGxlUm91dGluZyhNb2RpZnlUYWJsZVN0 YXRlICptdHN0YXRlLAogCQkJCQkJCQkJUGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGUpOwot ZXh0ZXJuIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRl KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5m byAqcGFydGl0aW9ucHJ1bmVpbmZvKTsKK2V4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVj SW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkgaW50IG5f dG90YWxfc3VicGxhbnMsCisJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJ CQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKIGV4dGVybiBCaXRt YXBzZXQgKkV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVu ZXN0YXRlKTsKLWV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxh bnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkJCSAgaW50IG5z dWJwbGFucyk7Ci0KICNlbmRpZgkJCQkJCQkvKiBFWEVDUEFSVElUSU9OX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCBiL3NyYy9pbmNsdWRlL3Bh cnRpdGlvbmluZy9wYXJ0cHJ1bmUuaAppbmRleCBlZTExYjZmZWFlLi45MDY4NGVmYTI1IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCkBAIC00MSw2ICs0MSw3IEBAIHN0cnVjdCBS ZWxPcHRJbmZvOwogICoJCQkJCXN1YnNpZGlhcnkgZGF0YSwgc3VjaCBhcyB0aGUgRm1nckluZm9z LgogICogcGxhbnN0YXRlCQlQb2ludHMgdG8gdGhlIHBhcmVudCBwbGFuIG5vZGUncyBQbGFuU3Rh dGUgd2hlbiBjYWxsZWQKICAqCQkJCQlkdXJpbmcgZXhlY3V0aW9uOyBOVUxMIHdoZW4gY2FsbGVk IGZyb20gdGhlIHBsYW5uZXIuCisgKiBleHByY29udGV4dAkJRXhwckNvbnRleHQgdG8gdXNlIHdo ZW4gZXZhbHVhdGluZyBwcnVuaW5nIGV4cHJlc3Npb25zCiAgKiBleHByc3RhdGVzCQlBcnJheSBv ZiBFeHByU3RhdGVzLCBpbmRleGVkIGFzIHBlciBQcnVuZUN4dFN0YXRlSWR4OyBvbmUKICAqCQkJ CQlmb3IgZWFjaCBwYXJ0aXRpb24ga2V5IGluIGVhY2ggcHJ1bmluZyBzdGVwLiAgQWxsb2NhdGVk IGlmCiAgKgkJCQkJcGxhbnN0YXRlIGlzIG5vbi1OVUxMLCBvdGhlcndpc2UgTlVMTC4KQEAgLTU2 LDYgKzU3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVDb250ZXh0CiAJRm1ncklu Zm8gICAqc3RlcGNtcGZ1bmNzOwogCU1lbW9yeUNvbnRleHQgcHBjY29udGV4dDsKIAlQbGFuU3Rh dGUgICpwbGFuc3RhdGU7CisJRXhwckNvbnRleHQgKmV4cHJjb250ZXh0OwogCUV4cHJTdGF0ZSAq KmV4cHJzdGF0ZXM7CiB9IFBhcnRpdGlvblBydW5lQ29udGV4dDsKIAotLSAKMi4yNC4xCgo= --00000000000081364e05d9f23fae--