Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vf1w3-003FpB-1e for pgsql-hackers@arkaria.postgresql.org; Sun, 11 Jan 2026 20:21:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vf1w1-00CMRb-1I for pgsql-hackers@arkaria.postgresql.org; Sun, 11 Jan 2026 20:21:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vf1w0-00CMRR-1a for pgsql-hackers@lists.postgresql.org; Sun, 11 Jan 2026 20:21:13 +0000 Received: from mail-qv1-xf29.google.com ([2607:f8b0:4864:20::f29]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vf1vy-005a0T-1Q for pgsql-hackers@lists.postgresql.org; Sun, 11 Jan 2026 20:21:11 +0000 Received: by mail-qv1-xf29.google.com with SMTP id 6a1803df08f44-88a2b99d8c5so51140936d6.1 for ; Sun, 11 Jan 2026 12:21:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fittl.com; s=google; t=1768162869; x=1768767669; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=CGj7pZRAooIJKttUK7pufnxPNiM9qpzFIrJOX2NzmYs=; b=m7JlNmqOGUimP3PpfrLUR9h5p7p4gAqyPR/wiQGABNTMpxagGKYFE3c05Wnvu71Tiu zA+Mz6tYhdronWgKAH8GaBRLob54Y0fm4TKupmNopSPM5B0gQvnx6bsMlfVpl8FwyGZC /XxV4jKZLESSqBl1+0plZYWTLN3rFHQFga9Uw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768162869; x=1768767669; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=CGj7pZRAooIJKttUK7pufnxPNiM9qpzFIrJOX2NzmYs=; b=utNlsj9N298kvqgLdXFGoZQ8IeTk7QnGSK6/iUiPTP3FKj7r6q/BGBFXEHHEw69pbv dcIsn5CVu+MOQzzT9GmgDc6Dz0OlSNsEal8HUa9fcB2a5ZY7GeAq3P+oHraH6+knde/q wuoyjW+WDaU38cq0oiN1pOsX+fwBEBwh+4HoZ6DAphM3V4r48QAATe0dwF05CsbGxK5n uRwY1owNkrXbHz12zh14NH+v4T20mI0GNpSrlQtOnxWVOsjHjrnzcR/MO9kha1DqxNyF Ul5F5d1nNV+qfldGfcMNYfr3eL1jaU0DGhklSlgw+WY51hxzJUzs2Vq1ZwheoLzK2WVN Mo/Q== X-Forwarded-Encrypted: i=1; AJvYcCU6f+/lshbO+5sxT1d+pPiOsj0VWRa+o0N0f6/NO8o6JbdEzfz8CZYURU6pmYBwZjco2Sxs2KJxVPtZth90@lists.postgresql.org X-Gm-Message-State: AOJu0YynViQ/y91P0N0jkzbs4Bb6BqafXQlTnS6AMoaYC6E28/N9yEns 9o2Bh3Xldw4qHjyRqzhzB5IoMTvmFs1AUU/l67x8eLcXVZqt2ncMGAtleHjRp9fdgnecCraqTJ+ JCeJs0wPZbawBe4cjMzXZUGUWKw5LopyI1/kSamlh X-Gm-Gg: AY/fxX6rMdTjoUPaL+uhXALw81hTylbV5n/tvFOSDKJrW0m7oWuXTO1CjfO0+zQplYk 0OqvXacOTqrShXXyfsqIoM6ob4GWLxkKDCqDBdOxFuYAdkX0Ziy8YbDjKl4U5W100Yh8MzH7Obz V33WzRwt/xc/15K0JSEoQPBOFiHxx00FhwO0XOb2vUwACN7OJn7Q+G8kNidknttE48q8JmrEMUJ xVXc3xXL1DTMPNLZ4AU7YkItM2ok0E+2cYMMi0ige/KvxefVbmqaRqT26/7iBqoGcCcT8h/+rwJ TniSf9l587CKU5T5CgnPXY5u9lIk X-Google-Smtp-Source: AGHT+IE8eNWfOYzMhXZdnRwbURfbgebQrm2BkXXe+FAAvTURcHrAuNUT6hG2ZMjxxr5T8BKkHJvI633poGWf8XSNUyc= X-Received: by 2002:a05:6214:570d:b0:888:586a:cd89 with SMTP id 6a1803df08f44-89084275795mr205798866d6.34.1768162868954; Sun, 11 Jan 2026 12:21:08 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Lukas Fittl Date: Sun, 11 Jan 2026 12:20:32 -0800 X-Gm-Features: AZwV_QjwTKR52peo7Hh1pclp71cmwsmGUYJssSWvQYIelHrtAUA0tEPYLKDyxlA Message-ID: Subject: Re: pg_plan_advice To: Robert Haas Cc: Jacob Champion , Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000b68c0b0648227f18" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b68c0b0648227f18 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jan 6, 2026 at 11:36=E2=80=AFAM Robert Haas = wrote: > > On Mon, Dec 29, 2025 at 8:15=E2=80=AFPM Lukas Fittl wro= te: > > For 0001, I'm not sure the following comment is correct: > > > > > /* When recursing =3D true, it's an unplanned or dummy subquery. */ > > > rtinfo->dummy =3D recursing; > > > > Later in that function we only recurse if its a dummy subquery - in the= case of an unplanned subquery (rel->subroot =3D=3D NULL) > > add_rtes_to_flat_rtable won't be called again (instead the relation RTE= s are directly added to the finalrtable). Maybe we can > > clarify that comment as "When recursing =3D true, it's a dummy subquery= or its children.". > > Presumably, a child of an unplanned or dummy subquery will also be > unplanned or dummy, so I'm not sure I understand the need to clarify > here. I think I was more trying to argue that unplanned subqueries are not actually being considered here, since the recursing flag will never be true for an unplanned subquery. The "or its children" part was more to capture my understanding, and seems fine to omit too. > > I also noticed that this currently doesn't support cases where multiple= nodes are elided, e.g. with multi-level table partitioning: > > ... > I'm not really sure there's a problem here. We definitely do not want > to end up with something like "Elided Node RTIs: 1 2". What I've found > experimentally is that it's often important to preserve relid sets, > but you need to preserve them as sets, not individually. I hesitate a lit= tle bit > to design something without a use case in mind, but maybe you have > one? It just seemed inconsistent to me, but I think I follow your argument as to why just adding it to the set isn't correct. I don't have a particular use case beyond advice/hint application in mind, so if this works in your assessment and is not an oversight, that sounds good to me. > > > For 0003: > > > > I also find the "cars" variable suffix a bit hard to understand, but no= t sure a comment next to the variables is that useful. > > Separately, the noise generated by all the additional "_cars" variables= isn't great. > > > > I wonder a little bit if we couldn't introduce a better abstraction her= e, e.g. a struct "AppendPathInput" that contains the > > two related lists, and gets populated by accumulate_append_subpath/get_= singleton_append_subpath and then > > passed to create_append_path as a single argument. > > I spent some time thinking about this day and haven't been quite able > to come up with something that I like. The problem is that > pa_partial_subpaths and pa_nonpartial_subpaths share a single > child_append_relid_sets variable, namely pa_subpath_cars, and > accumulate_append_subpaths gets called with that as the last argument > and different things for the previous two. One thing I tried was > making the AppendPathInput struct contain three lists rather than two, > but then accumulate_append_subpath() needs an argument that makes it > work in one of three different modes: > > Mode 1: normal -- add everything to the "normal" list > Mode 2: building parallel-aware append with partial path -- add things > to the "normal" list except for parallel-aware appends which need to > be split between the normal and special lists > Mode 3: building parallel-aware append with non-partial path -- add > things to the "special" list > Yeah, the difference in these modes makes this a bit challenging. I wonder a bit if we shouldn't instead focus on this being about the inputs to create_append_path (and the 4 different variants of calling it in add_paths_to_append_rel), and make sure we group some of them together in a struct, but still pass the individual fields of that struct to accumulate_append_subpaths. I've sketched out what I mean in the attached (once as a patch on top of v8, and then again as a separate patch that's combined with v8/0003). That makes add_paths_to_append_rel easier to understand (to me at least), at a slight increase in complexity in cases where we call create_append_path without passing child_append_relid_sets or partial subpaths. Thanks, Lukas --=20 Lukas Fittl --000000000000b68c0b0648227f18 Content-Type: application/octet-stream; name="alternate-v8-0003-changes.nocf" Content-Disposition: attachment; filename="alternate-v8-0003-changes.nocf" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mka6hp0x0 RnJvbSAyMDA3YmZkNzMwNmQ4MjRiNWM3OGNmZTU5Y2EyODE4NTBkNWJlY2JhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBT dW4sIDExIEphbiAyMDI2IDEyOjA4OjIyIC0wODAwClN1YmplY3Q6IFtQQVRDSF0gV0lQOiBSZXdv cmsgY2hpbGQgYXBwZW5kIHJlbGlkcyB0byBiZSBwYXNzZWQgdmlhIHN0cnVjdAoKLS0tCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICB8IDE4NyArKysrKysrKysrKy0tLS0t LS0tLS0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jICB8ICAgNSAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgfCAgIDggKy0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jIHwgIDQyICsrKy0tLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgfCAgMjcgKystLQogc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmggICAgICAgfCAgMTAgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgIHwgICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMo KyksIDE0NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpp bmRleCA2YjlhZDFjOGFhNy4uOWZmNTI2ODViYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv YWxscGF0aHMuYwpAQCAtMTM5MCw3ICsxMzkwLDYgQEAgc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCiAJfQogfQogCi0KIC8qCiAgKiBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbAogICoJCUdlbmVyYXRlIHBhdGhzIGZvciB0aGUgZ2l2ZW4g YXBwZW5kIHJlbGF0aW9uIGdpdmVuIHRoZSBzZXQgb2Ygbm9uLWR1bW15CkBAIC0xNDA2LDI2ICsx NDA1LDIxIEBAIHZvaWQKIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQlMaXN0ICpsaXZlX2NoaWxkcmVscykKIHsKLQlMaXN0 CSAgICpzdWJwYXRocyA9IE5JTDsKLQlib29sCQlzdWJwYXRoc192YWxpZCA9IHRydWU7Ci0JTGlz dAkgICAqc3VicGF0aF9jYXJzID0gTklMOwotCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aHMgPSBO SUw7Ci0JYm9vbAkJc3RhcnR1cF9zdWJwYXRoc192YWxpZCA9IHRydWU7Ci0JTGlzdAkgICAqc3Rh cnR1cF9zdWJwYXRoX2NhcnMgPSBOSUw7Ci0JTGlzdAkgICAqcGFydGlhbF9zdWJwYXRocyA9IE5J TDsKLQlMaXN0CSAgICpwYXJ0aWFsX3N1YnBhdGhfY2FycyA9IE5JTDsKLQlMaXN0CSAgICpwYV9w YXJ0aWFsX3N1YnBhdGhzID0gTklMOwotCUxpc3QJICAgKnBhX25vbnBhcnRpYWxfc3VicGF0aHMg PSBOSUw7Ci0JTGlzdAkgICAqcGFfc3VicGF0aF9jYXJzID0gTklMOwotCWJvb2wJCXBhcnRpYWxf c3VicGF0aHNfdmFsaWQgPSB0cnVlOwotCWJvb2wJCXBhX3N1YnBhdGhzX3ZhbGlkOworCUFwcGVu ZFBhdGhJbnB1dCB1bnBhcmFtZXRlcml6ZWQgPSB7MH07CisJQXBwZW5kUGF0aElucHV0IHN0YXJ0 dXAgPSB7MH07CisJQXBwZW5kUGF0aElucHV0IHBhcnRpYWxfb25seSA9IHswfTsKKwlBcHBlbmRQ YXRoSW5wdXQgcGFyYWxsZWxfYXBwZW5kID0gezB9OworCWJvb2wJCXVucGFyYW1ldGVyaXplZF92 YWxpZCA9IHRydWU7CisJYm9vbAkJc3RhcnR1cF92YWxpZCA9IHRydWU7CisJYm9vbAkJcGFydGlh bF9vbmx5X3ZhbGlkID0gdHJ1ZTsKKwlib29sCQlwYXJhbGxlbF9hcHBlbmRfdmFsaWQgPSB0cnVl OwogCUxpc3QJICAgKmFsbF9jaGlsZF9wYXRoa2V5cyA9IE5JTDsKIAlMaXN0CSAgICphbGxfY2hp bGRfb3V0ZXJzID0gTklMOwogCUxpc3RDZWxsICAgKmw7CiAJZG91YmxlCQlwYXJ0aWFsX3Jvd3Mg PSAtMTsKIAogCS8qIElmIGFwcHJvcHJpYXRlLCBjb25zaWRlciBwYXJhbGxlbCBhcHBlbmQgKi8K LQlwYV9zdWJwYXRoc192YWxpZCA9IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgJiYgcmVsLT5jb25z aWRlcl9wYXJhbGxlbDsKKwlwYXJhbGxlbF9hcHBlbmRfdmFsaWQgPSBlbmFibGVfcGFyYWxsZWxf YXBwZW5kICYmIHJlbC0+Y29uc2lkZXJfcGFyYWxsZWw7CiAKIAkvKgogCSAqIEZvciBldmVyeSBu b24tZHVtbXkgY2hpbGQsIHJlbWVtYmVyIHRoZSBjaGVhcGVzdCBwYXRoLiAgQWxzbywgaWRlbnRp ZnkKQEAgLTE0NDksOSArMTQ0Myw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCWlmIChjaGlsZHJlbC0+cGF0aGxpc3QgIT0g TklMICYmCiAJCQljaGlsZHJlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aC0+cGFyYW1faW5mbyA9PSBO VUxMKQogCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGlsZHJlbC0+Y2hlYXBlc3RfdG90 YWxfcGF0aCwKLQkJCQkJCQkJCSAgJnN1YnBhdGhzLCBOVUxMLCAmc3VicGF0aF9jYXJzKTsKKwkJ CQkJCQkJCSAgJnVucGFyYW1ldGVyaXplZC5zdWJwYXRocywgTlVMTCwgJnVucGFyYW1ldGVyaXpl ZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCWVsc2UKLQkJCXN1YnBhdGhzX3ZhbGlkID0g ZmFsc2U7CisJCQl1bnBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBX aGVuIHRoZSBwbGFubmVyIGlzIGNvbnNpZGVyaW5nIGNoZWFwIHN0YXJ0dXAgcGxhbnMsIHdlJ2xs IGFsc28KQEAgLTE0NzcsMTIgKzE0NzEsMTIgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCS8qIGNoZWFwZXN0X3N0YXJ0dXBf cGF0aCBtdXN0IG5vdCBiZSBhIHBhcmFtZXRlcml6ZWQgcGF0aC4gKi8KIAkJCUFzc2VydChjaGVh cGVzdF9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwpOwogCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3Vi cGF0aChjaGVhcGVzdF9wYXRoLAotCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywKKwkJCQkJ CQkJCSAgJnN0YXJ0dXAuc3VicGF0aHMsCiAJCQkJCQkJCQkgIE5VTEwsCi0JCQkJCQkJCQkgICZz dGFydHVwX3N1YnBhdGhfY2Fycyk7CisJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzKTsKIAkJfQogCQllbHNlCi0JCQlzdGFydHVwX3N1YnBhdGhzX3ZhbGlkID0gZmFs c2U7CisJCQlzdGFydHVwX3ZhbGlkID0gZmFsc2U7CiAKIAogCQkvKiBTYW1lIGlkZWEsIGJ1dCBm b3IgYSBwYXJ0aWFsIHBsYW4uICovCkBAIC0xNDkwLDE3ICsxNDg0LDE3IEBAIGFkZF9wYXRoc190 b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJ CWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhs aXN0KTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRo LAotCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRocywgTlVMTCwKLQkJCQkJCQkJCSAgJnBhcnRp YWxfc3VicGF0aF9jYXJzKTsKKwkJCQkJCQkJCSAgJnBhcnRpYWxfb25seS5wYXJ0aWFsX3N1YnBh dGhzLCBOVUxMLAorCQkJCQkJCQkJICAmcGFydGlhbF9vbmx5LmNoaWxkX2FwcGVuZF9yZWxpZF9z ZXRzKTsKIAkJfQogCQllbHNlCi0JCQlwYXJ0aWFsX3N1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CisJ CQlwYXJ0aWFsX29ubHlfdmFsaWQgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBTYW1lIGlkZWEsIGJ1 dCBmb3IgYSBwYXJhbGxlbCBhcHBlbmQgbWl4aW5nIHBhcnRpYWwgYW5kIG5vbi1wYXJ0aWFsCiAJ CSAqIHBhdGhzLgogCQkgKi8KLQkJaWYgKHBhX3N1YnBhdGhzX3ZhbGlkKQorCQlpZiAocGFyYWxs ZWxfYXBwZW5kX3ZhbGlkKQogCQl7CiAJCQlQYXRoCSAgICpucHBhdGggPSBOVUxMOwogCkBAIC0x NTEwLDcgKzE1MDQsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9PSBOVUxM ICYmIG5wcGF0aCA9PSBOVUxMKQogCQkJewogCQkJCS8qIE5laXRoZXIgYSBwYXJ0aWFsIG5vciBh IHBhcmFsbGVsLXNhZmUgcGF0aD8gIEZvcmdldCBpdC4gKi8KLQkJCQlwYV9zdWJwYXRoc192YWxp ZCA9IGZhbHNlOworCQkJCXBhcmFsbGVsX2FwcGVuZF92YWxpZCA9IGZhbHNlOwogCQkJfQogCQkJ ZWxzZSBpZiAobnBwYXRoID09IE5VTEwgfHwKIAkJCQkJIChjaGVhcGVzdF9wYXJ0aWFsX3BhdGgg IT0gTlVMTCAmJgpAQCAtMTUxOSw5ICsxNTEzLDkgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkvKiBQYXJ0aWFsIHBhdGgg aXMgY2hlYXBlciBvciB0aGUgb25seSBvcHRpb24uICovCiAJCQkJQXNzZXJ0KGNoZWFwZXN0X3Bh cnRpYWxfcGF0aCAhPSBOVUxMKTsKIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFw ZXN0X3BhcnRpYWxfcGF0aCwKLQkJCQkJCQkJCQkgICZwYV9wYXJ0aWFsX3N1YnBhdGhzLAotCQkJ CQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJICAmcGFfc3VicGF0 aF9jYXJzKTsKKwkJCQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQucGFydGlhbF9zdWJwYXRocywK KwkJCQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFy YWxsZWxfYXBwZW5kLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCX0KIAkJCWVsc2UKIAkJ CXsKQEAgLTE1MzksOSArMTUzMyw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogZmlndXJlIHRoYXQgb3V0LgogCQkJ CSAqLwogCQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgobnBwYXRoLAotCQkJCQkJCQkJCSAg JnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFyYWxsZWxfYXBwZW5kLnN1 YnBhdGhzLAogCQkJCQkJCQkJCSAgTlVMTCwKLQkJCQkJCQkJCQkgICZwYV9zdWJwYXRoX2NhcnMp OworCQkJCQkJCQkJCSAgJnBhcmFsbGVsX2FwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7 CiAJCQl9CiAJCX0KIApAQCAtMTYxNSwzMCArMTYwOSwyOCBAQCBhZGRfcGF0aHNfdG9fYXBwZW5k X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIHVucGFyYW1ldGVy aXplZCBBcHBlbmQgcGF0aCBmb3IgdGhlIHJlbC4gIChOb3RlOiB0aGlzIGlzIGNvcnJlY3QgZXZl bgogCSAqIGlmIHdlIGhhdmUgemVybyBvciBvbmUgbGl2ZSBzdWJwYXRoIGR1ZSB0byBjb25zdHJh aW50IGV4Y2x1c2lvbi4pCiAJICovCi0JaWYgKHN1YnBhdGhzX3ZhbGlkKQotCQlhZGRfcGF0aChy ZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLAotCQkJ CQkJCQkJCQkJICBOSUwsIHN1YnBhdGhfY2FycywKKwlpZiAodW5wYXJhbWV0ZXJpemVkX3ZhbGlk KQorCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWws IHVucGFyYW1ldGVyaXplZCwKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwKIAkJ CQkJCQkJCQkJCSAgLTEpKTsKIAogCS8qIGJ1aWxkIGFuIEFwcGVuZFBhdGggZm9yIHRoZSBjaGVh cCBzdGFydHVwIHBhdGhzLCBpZiB2YWxpZCAqLwotCWlmIChzdGFydHVwX3N1YnBhdGhzX3ZhbGlk KQotCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWws IHN0YXJ0dXBfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkgIE5JTCwgc3RhcnR1cF9zdWJwYXRoX2Nh cnMsCisJaWYgKHN0YXJ0dXBfdmFsaWQpCisJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRl X2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgc3RhcnR1cCwKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxM LCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBwZW5kIG9mIHVub3Jk ZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCiAJICogaXQgcGFyYWxs ZWwtYXdhcmUgaWYgcG9zc2libGUuCiAJICovCi0JaWYgKHBhcnRpYWxfc3VicGF0aHNfdmFsaWQg JiYgcGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcnRpYWxfb25seV92YWxpZCAmJiBw YXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCiAJewogCQlBcHBlbmRQYXRoICph cHBlbmRwYXRoOwogCQlMaXN0Q2VsbCAgICpsYzsKIAkJaW50CQkJcGFyYWxsZWxfd29ya2VycyA9 IDA7CiAKIAkJLyogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Ygd29ya2VycyByZXF1ZXN0ZWQg Zm9yIGFueSBzdWJwYXRoLiAqLwotCQlmb3JlYWNoKGxjLCBwYXJ0aWFsX3N1YnBhdGhzKQorCQlm b3JlYWNoKGxjLCBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocykKIAkJewogCQkJUGF0aAkg ICAqcGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTE2NjUsOCArMTY1Nyw3IEBAIGFkZF9wYXRoc190 b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCUFzc2Vy dChwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKIAkJLyogR2VuZXJhdGUgYSBwYXJ0aWFsIGFwcGVu ZCBwYXRoLiAqLwotCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwg TklMLCBwYXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCXBhcnRpYWxfc3VicGF0aF9jYXJzLAor CQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFydGlhbF9vbmx5 LAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJCQllbmFi bGVfcGFyYWxsZWxfYXBwZW5kLAogCQkJCQkJCQkJCS0xKTsKQEAgLTE2ODcsNyArMTY3OCw3IEBA IGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJICogYSBub24tcGFydGlhbCBwYXRoIHRoYXQgaXMgc3Vic3RhbnRpYWxseSBjaGVhcGVy IHRoYW4gYW55IHBhcnRpYWwgcGF0aDsKIAkgKiBvdGhlcndpc2UsIHdlIHNob3VsZCB1c2UgdGhl IGFwcGVuZCBwYXRoIGFkZGVkIGluIHRoZSBwcmV2aW91cyBzdGVwLikKIAkgKi8KLQlpZiAocGFf c3VicGF0aHNfdmFsaWQgJiYgcGFfbm9ucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBh cmFsbGVsX2FwcGVuZF92YWxpZCAmJiBwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMgIT0gTklMKQog CXsKIAkJQXBwZW5kUGF0aCAqYXBwZW5kcGF0aDsKIAkJTGlzdENlbGwgICAqbGM7CkBAIC0xNjk3 LDcgKzE2ODgsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsLAogCQkgKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJz IHJlcXVlc3RlZCBmb3IgYW55IHBhcnRpYWwKIAkJICogc3VicGF0aC4KIAkJICovCi0JCWZvcmVh Y2gobGMsIHBhX3BhcnRpYWxfc3VicGF0aHMpCisJCWZvcmVhY2gobGMsIHBhcmFsbGVsX2FwcGVu ZC5wYXJ0aWFsX3N1YnBhdGhzKQogCQl7CiAJCQlQYXRoCSAgICpwYXRoID0gbGZpcnN0KGxjKTsK IApAQCAtMTcxNSw5ICsxNzA2LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkgICBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyKTsKIAkJQXNzZXJ0KHBhcmFsbGVsX3dvcmtlcnMgPiAwKTsKIAotCQlhcHBl bmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFfbm9ucGFydGlhbF9zdWJw YXRocywKLQkJCQkJCQkJCQlwYV9wYXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCXBhX3N1YnBh dGhfY2FycywKKwkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHBh cmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsIHRy dWUsCiAJCQkJCQkJCQkJcGFydGlhbF9yb3dzKTsKIAkJYWRkX3BhcnRpYWxfcGF0aChyZWwsIChQ YXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTcyNyw3ICsxNzE2LDcgQEAgYWRkX3BhdGhzX3RvX2Fw cGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBBbHNvIGJ1 aWxkIHVucGFyYW1ldGVyaXplZCBvcmRlcmVkIGFwcGVuZCBwYXRocyBiYXNlZCBvbiB0aGUgY29s bGVjdGVkCiAJICogbGlzdCBvZiBjaGlsZCBwYXRoa2V5cy4KIAkgKi8KLQlpZiAoc3VicGF0aHNf dmFsaWQpCisJaWYgKHVucGFyYW1ldGVyaXplZF92YWxpZCkKIAkJZ2VuZXJhdGVfb3JkZXJlZGFw cGVuZF9wYXRocyhyb290LCByZWwsIGxpdmVfY2hpbGRyZWxzLAogCQkJCQkJCQkJIGFsbF9jaGls ZF9wYXRoa2V5cyk7CiAKQEAgLTE3NDgsMTEgKzE3MzcsMTAgQEAgYWRkX3BhdGhzX3RvX2FwcGVu ZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAl7CiAJCVJlbGlkcwkJ cmVxdWlyZWRfb3V0ZXIgPSAoUmVsaWRzKSBsZmlyc3QobCk7CiAJCUxpc3RDZWxsICAgKmxjcjsK KwkJQXBwZW5kUGF0aElucHV0IHBhcmFtZXRlcml6ZWQgPSB7MH07CisJCWJvb2wJCXBhcmFtZXRl cml6ZWRfdmFsaWQgPSB0cnVlOwogCiAJCS8qIFNlbGVjdCB0aGUgY2hpbGQgcGF0aHMgZm9yIGFu IEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXphdGlvbiAqLwotCQlzdWJwYXRocyA9IE5JTDsK LQkJc3VicGF0aF9jYXJzID0gTklMOwotCQlzdWJwYXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVh Y2gobGNyLCBsaXZlX2NoaWxkcmVscykKIAkJewogCQkJUmVsT3B0SW5mbyAqY2hpbGRyZWwgPSAo UmVsT3B0SW5mbyAqKSBsZmlyc3QobGNyKTsKQEAgLTE3NjEsNyArMTc0OSw3IEBAIGFkZF9wYXRo c190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlp ZiAoY2hpbGRyZWwtPnBhdGhsaXN0ID09IE5JTCkKIAkJCXsKIAkJCQkvKiBmYWlsZWQgdG8gbWFr ZSBhIHN1aXRhYmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJCQlzdWJwYXRoc192YWxpZCA9 IGZhbHNlOworCQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxzZTsKIAkJCQlicmVhazsKIAkJ CX0KIApAQCAtMTc3MSwxNiArMTc1OSwxNiBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN1YnBhdGggPT0gTlVMTCkK IAkJCXsKIAkJCQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRhYmxlIHBhdGggZm9yIHRoaXMgY2hp bGQgKi8KLQkJCQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJCXBhcmFtZXRlcml6ZWRfdmFs aWQgPSBmYWxzZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBh dGgoc3VicGF0aCwgJnN1YnBhdGhzLCBOVUxMLAotCQkJCQkJCQkJICAmc3VicGF0aF9jYXJzKTsK KwkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0aCwgJnBhcmFtZXRlcml6ZWQuc3Vi cGF0aHMsIE5VTEwsCisJCQkJCQkJCQkgICZwYXJhbWV0ZXJpemVkLmNoaWxkX2FwcGVuZF9yZWxp ZF9zZXRzKTsKIAkJfQogCi0JCWlmIChzdWJwYXRoc192YWxpZCkKKwkJaWYgKHBhcmFtZXRlcml6 ZWRfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBjcmVhdGVfYXBwZW5k X3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLCBzdWJwYXRoX2NhcnMsCisJCQkJCSBjcmVh dGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBwYXJhbWV0ZXJpemVkLAogCQkJCQkJCQkJCU5JTCwg cmVxdWlyZWRfb3V0ZXIsIDAsIGZhbHNlLAogCQkJCQkJCQkJCS0xKSk7CiAJfQpAQCAtMTgwMSwx NCArMTc4OSwxNiBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsLAogCQl7CiAJCQlQYXRoCSAgICpwYXRoID0gKFBhdGggKikgbGZpcnN0 KGwpOwogCQkJQXBwZW5kUGF0aCAqYXBwZW5kcGF0aDsKKwkJCUFwcGVuZFBhdGhJbnB1dCBhcHBl bmQgPSB7MH07CisKKwkJCWFwcGVuZC5wYXJ0aWFsX3N1YnBhdGhzID0gbGlzdF9tYWtlMShwYXRo KTsKKwkJCWFwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGxpc3RfbWFrZTEocmVsLT5y ZWxpZHMpOwogCiAJCQkvKiBza2lwIHBhdGhzIHdpdGggbm8gcGF0aGtleXMuICovCiAJCQlpZiAo cGF0aC0+cGF0aGtleXMgPT0gTklMKQogCQkJCWNvbnRpbnVlOwogCi0JCQlhcHBlbmRwYXRoID0g Y3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgTklMLCBsaXN0X21ha2UxKHBhdGgpLAotCQkJ CQkJCQkJCQlsaXN0X21ha2UxKHJlbC0+cmVsaWRzKSwKLQkJCQkJCQkJCQkJTklMLCBOVUxMLAor CQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIGFwcGVuZCwgTklM LCBOVUxMLAogCQkJCQkJCQkJCQlwYXRoLT5wYXJhbGxlbF93b3JrZXJzLCB0cnVlLAogCQkJCQkJ CQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQkJYWRkX3BhcnRpYWxfcGF0aChyZWwsIChQYXRoICopIGFw cGVuZHBhdGgpOwpAQCAtMTg5MCwxMiArMTg4MCw5IEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRf cGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAlmb3JlYWNoKGxjcCwg YWxsX2NoaWxkX3BhdGhrZXlzKQogCXsKIAkJTGlzdAkgICAqcGF0aGtleXMgPSAoTGlzdCAqKSBs Zmlyc3QobGNwKTsKLQkJTGlzdAkgICAqc3RhcnR1cF9zdWJwYXRocyA9IE5JTDsKLQkJTGlzdAkg ICAqc3RhcnR1cF9zdWJwYXRoX2NhcnMgPSBOSUw7Ci0JCUxpc3QJICAgKnRvdGFsX3N1YnBhdGhz ID0gTklMOwotCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRoX2NhcnMgPSBOSUw7Ci0JCUxpc3QJICAg KmZyYWN0aW9uYWxfc3VicGF0aHMgPSBOSUw7Ci0JCUxpc3QJICAgKmZyYWN0aW9uYWxfc3VicGF0 aF9jYXJzID0gTklMOworCQlBcHBlbmRQYXRoSW5wdXQgc3RhcnR1cCA9IHswfTsKKwkJQXBwZW5k UGF0aElucHV0IHRvdGFsID0gezB9OworCQlBcHBlbmRQYXRoSW5wdXQgZnJhY3Rpb25hbCA9IHsw fTsKIAkJYm9vbAkJc3RhcnR1cF9uZXFfdG90YWwgPSBmYWxzZTsKIAkJYm9vbAkJZnJhY3Rpb25f bmVxX3RvdGFsID0gZmFsc2U7CiAJCWJvb2wJCW1hdGNoX3BhcnRpdGlvbl9vcmRlcjsKQEAgLTIw NjAsMjEgKzIwNDcsMjEgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCSAqLwogCQkJCWNoZWFwZXN0X3N0YXJ0dXAg PQogCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXAsCi0J CQkJCQkJCQkJCQkgJnN0YXJ0dXBfc3VicGF0aF9jYXJzKTsKKwkJCQkJCQkJCQkJCSAmc3RhcnR1 cC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQkJY2hlYXBlc3RfdG90YWwgPQogCQkJCQln ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3RvdGFsLAotCQkJCQkJCQkJCQkJ ICZ0b3RhbF9zdWJwYXRoX2NhcnMpOworCQkJCQkJCQkJCQkJICZ0b3RhbC5jaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyk7CiAKLQkJCQlzdGFydHVwX3N1YnBhdGhzID0gbGFwcGVuZChzdGFydHVwX3N1 YnBhdGhzLCBjaGVhcGVzdF9zdGFydHVwKTsKLQkJCQl0b3RhbF9zdWJwYXRocyA9IGxhcHBlbmQo dG90YWxfc3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKKwkJCQlzdGFydHVwLnN1YnBhdGhzID0g bGFwcGVuZChzdGFydHVwLnN1YnBhdGhzLCBjaGVhcGVzdF9zdGFydHVwKTsKKwkJCQl0b3RhbC5z dWJwYXRocyA9IGxhcHBlbmQodG90YWwuc3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKIAogCQkJ CWlmIChjaGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCXsKIAkJCQkJY2hlYXBlc3RfZnJhY3Rpb25h bCA9CiAJCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X2ZyYWN0aW9u YWwsCi0JCQkJCQkJCQkJCQkJICZmcmFjdGlvbmFsX3N1YnBhdGhfY2Fycyk7Ci0JCQkJCWZyYWN0 aW9uYWxfc3VicGF0aHMgPQotCQkJCQkJbGFwcGVuZChmcmFjdGlvbmFsX3N1YnBhdGhzLCBjaGVh cGVzdF9mcmFjdGlvbmFsKTsKKwkJCQkJCQkJCQkJCQkgJmZyYWN0aW9uYWwuY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMpOworCQkJCQlmcmFjdGlvbmFsLnN1YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQo ZnJhY3Rpb25hbC5zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQogCQkJfQog CQkJZWxzZQpAQCAtMjA4NCwxNiArMjA3MSwxNiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogY2hpbGQgcGF0 aHMgZm9yIHRoZSBNZXJnZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9z dWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywg TlVMTCwKLQkJCQkJCQkJCQkgICZzdGFydHVwX3N1YnBhdGhfY2Fycyk7CisJCQkJCQkJCQkJICAm c3RhcnR1cC5zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzKTsKIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3Rv dGFsLAotCQkJCQkJCQkJCSAgJnRvdGFsX3N1YnBhdGhzLCBOVUxMLAotCQkJCQkJCQkJCSAgJnRv dGFsX3N1YnBhdGhfY2Fycyk7CisJCQkJCQkJCQkJICAmdG90YWwuc3VicGF0aHMsIE5VTEwsCisJ CQkJCQkJCQkJICAmdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCiAJCQkJaWYgKGNo ZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBl c3RfZnJhY3Rpb25hbCwKLQkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbF9zdWJwYXRocywgTlVMTCwK LQkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMpOworCQkJCQkJCQkJCQkgICZm cmFjdGlvbmFsLnN1YnBhdGhzLCBOVUxMLAorCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsLmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCX0KIAkJfQogCkBAIC0yMTAzLDkgKzIwOTAsNyBAQCBn ZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkvKiBXZSBvbmx5IG5lZWQgQXBwZW5kICovCiAJCQlhZGRfcGF0aChyZWwsIChQ YXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJ CQkJCQkJCQkJCSAgc3RhcnR1cF9zdWJwYXRocywKLQkJCQkJCQkJCQkJCQkgIE5JTCwKLQkJCQkJ CQkJCQkJCQkgIHN0YXJ0dXBfc3VicGF0aF9jYXJzLAorCQkJCQkJCQkJCQkJCSAgc3RhcnR1cCwK IAkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJ CQkJCQkgIDAsCkBAIC0yMTE0LDQ5ICsyMDk5LDQ1IEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRf cGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChzdGFydHVw X25lcV90b3RhbCkKIAkJCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0 aChyb290LAogCQkJCQkJCQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkJCQkJCQkJICB0b3RhbF9zdWJw YXRocywKLQkJCQkJCQkJCQkJCQkJICBOSUwsCi0JCQkJCQkJCQkJCQkJCSAgdG90YWxfc3VicGF0 aF9jYXJzLAorCQkJCQkJCQkJCQkJCQkgIHRvdGFsLAogCQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlz LAogCQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJCQkJCQkJCSAgMCwKIAkJCQkJCQkJCQkJ CQkJICBmYWxzZSwKIAkJCQkJCQkJCQkJCQkJICAtMSkpOwogCi0JCQlpZiAoZnJhY3Rpb25hbF9z dWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCi0JCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAq KSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwKLQkJCQkJCQkJCQkJCQkJICByZWwsCi0JCQkJCQkJ CQkJCQkJCSAgZnJhY3Rpb25hbF9zdWJwYXRocywKLQkJCQkJCQkJCQkJCQkJICBOSUwsCi0JCQkJ CQkJCQkJCQkJCSAgZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMsCi0JCQkJCQkJCQkJCQkJCSAgcGF0 aGtleXMsCi0JCQkJCQkJCQkJCQkJCSAgTlVMTCwKLQkJCQkJCQkJCQkJCQkJICAwLAotCQkJCQkJ CQkJCQkJCQkgIGZhbHNlLAotCQkJCQkJCQkJCQkJCQkgIC0xKSk7CisJCQlpZiAoZnJhY3Rpb25h bC5zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCisJCQkJYWRkX3BhdGgocmVsLCAoUGF0 aCAqKSAocm9vdCwKKwkJCQkJCQkJCQlyZWwsCisJCQkJCQkJCQkJZnJhY3Rpb25hbCwKKwkJCQkJ CQkJCQlwYXRoa2V5cywKKwkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCTAsCisJCQkJCQkJCQkJ ZmFsc2UsCisJCQkJCQkJCQkJLTEpKTsKIAkJfQogCQllbHNlCiAJCXsKIAkJCS8qIFdlIG5lZWQg TWVyZ2VBcHBlbmQgKi8KIAkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2Fw cGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJCQlyZWwsCi0JCQkJCQkJCQkJCQkJCQlzdGFy dHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJCQkJc3RhcnR1cF9zdWJwYXRoX2NhcnMsCisJCQkJ CQkJCQkJCQkJCQlzdGFydHVwLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJc3RhcnR1cC5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJCQkJ CQkJCQkJTlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRoKHJl bCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJ CQkJcmVsLAotCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJCQkJ CXRvdGFsX3N1YnBhdGhfY2FycywKKwkJCQkJCQkJCQkJCQkJCQl0b3RhbC5zdWJwYXRocywKKwkJ CQkJCQkJCQkJCQkJCQl0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJCQkJ CQkJCQlwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJCQlOVUxMKSk7CiAKLQkJCWlmIChmcmFjdGlv bmFsX3N1YnBhdGhzICYmIGZyYWN0aW9uX25lcV90b3RhbCkKKwkJCWlmIChmcmFjdGlvbmFsLnN1 YnBhdGhzICYmIGZyYWN0aW9uX25lcV90b3RhbCkKIAkJCQlhZGRfcGF0aChyZWwsIChQYXRoICop IGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCQkJCXJlbCwKLQkJ CQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJCQkJCWZyYWN0 aW9uYWxfc3VicGF0aF9jYXJzLAorCQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWwuc3VicGF0aHMs CisJCQkJCQkJCQkJCQkJCQkJZnJhY3Rpb25hbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJ CQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJCQlOVUxMKSk7CiAJCX0KQEAg LTIzNjAsNiArMjM0MSw4IEBAIGdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0 aCwgTGlzdCAqKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKQogc3RhdGljIHZvaWQKIHNldF9kdW1t eV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQogeworCUFwcGVuZFBhdGhJbnB1dCBpbiA9 IHswfTsKKwogCS8qIFNldCBkdW1teSBzaXplIGVzdGltYXRlcyAtLS0gd2UgbGVhdmUgYXR0cl93 aWR0aHNbXSBhcyB6ZXJvZXMgKi8KIAlyZWwtPnJvd3MgPSAwOwogCXJlbC0+cmVsdGFyZ2V0LT53 aWR0aCA9IDA7CkBAIC0yMzY5LDcgKzIzNTIsNyBAQCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJl bE9wdEluZm8gKnJlbCkKIAlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CiAKIAkvKiBTZXQg dXAgdGhlIGR1bW15IHBhdGggKi8KLQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBl bmRfcGF0aChOVUxMLCByZWwsIE5JTCwgTklMLCBOSUwsCisJYWRkX3BhdGgocmVsLCAoUGF0aCAq KSBjcmVhdGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBpbiwKIAkJCQkJCQkJCQkJICBOSUwsIHJl bC0+bGF0ZXJhbF9yZWxpZHMsCiAJCQkJCQkJCQkJCSAgMCwgZmFsc2UsIC0xKSk7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCmluZGV4IGU5NDAyMWI2ODgwLi40NDNlMmRjYTdj MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCkBAIC0xNTEzLDYgKzE1MTMs NyBAQCB2b2lkCiBtYXJrX2R1bW15X3JlbChSZWxPcHRJbmZvICpyZWwpCiB7CiAJTWVtb3J5Q29u dGV4dCBvbGRjb250ZXh0OworCUFwcGVuZFBhdGhJbnB1dCBpbiA9IHswfTsKIAogCS8qIEFscmVh ZHkgbWFya2VkPyAqLwogCWlmIChpc19kdW1teV9yZWwocmVsKSkKQEAgLTE1MjksOCArMTUzMCw4 IEBAIG1hcmtfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIAlyZWwtPnBhcnRpYWxfcGF0aGxp c3QgPSBOSUw7CiAKIAkvKiBTZXQgdXAgdGhlIGR1bW15IHBhdGggKi8KLQlhZGRfcGF0aChyZWws IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIE5JTCwgTklMLAotCQkJCQkJ CQkJCQkgIE5JTCwgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAorCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwgaW4sCisJCQkJCQkJCQkJCSAgTklM LCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZhbHNlLCAtMSkpOwogCiAJ LyogU2V0IG9yIHVwZGF0ZSBjaGVhcGVzdF90b3RhbF9wYXRoIGFuZCByZWxhdGVkIGZpZWxkcyAq LwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGQ5MDViNjRiOWNhLi5kNGJm OGE5NTVkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDA2Miw3ICs0 MDYyLDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICogbWlnaHQgZ2V0IGJldHdlZW4gMCBhbmQg TiBvdXRwdXQgcm93cy4gT2ZmaGFuZCBJIHRoaW5rIHRoYXQncwogCQkgKiBkZXNpcmVkLikKIAkJ ICovCi0JCUxpc3QJICAgKnBhdGhzID0gTklMOworCQlBcHBlbmRQYXRoSW5wdXQgYXBwZW5kID0g ezB9OwogCiAJCXdoaWxlICgtLW5yb3dzID49IDApCiAJCXsKQEAgLTQwNzAsMTQgKzQwNzAsMTIg QEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQljcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgocm9vdCwg Z3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCiAJCQkJCQkJ CQkJIChMaXN0ICopIHBhcnNlLT5oYXZpbmdRdWFsKTsKLQkJCXBhdGhzID0gbGFwcGVuZChwYXRo cywgcGF0aCk7CisJCQlhcHBlbmQuc3VicGF0aHMgPSBsYXBwZW5kKGFwcGVuZC5zdWJwYXRocywg cGF0aCk7CiAJCX0KIAkJcGF0aCA9IChQYXRoICopCiAJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9v dCwKIAkJCQkJCQkgICBncm91cGVkX3JlbCwKLQkJCQkJCQkgICBwYXRocywKLQkJCQkJCQkgICBO SUwsCi0JCQkJCQkJICAgTklMLAorCQkJCQkJCSAgIGFwcGVuZCwKIAkJCQkJCQkgICBOSUwsCiAJ CQkJCQkJICAgTlVMTCwKIAkJCQkJCQkgICAwLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVw dW5pb24uYwppbmRleCA2ZTc2NzgzMTI2Yi4uZjUwYzI5NmUzZDkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wcmVwL3ByZXB1bmlvbi5jCkBAIC02OTYsOSArNjk2LDkgQEAgZ2VuZXJhdGVfdW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCUxpc3RDZWxs ICAgKmxjOwogCUxpc3RDZWxsICAgKmxjMjsKIAlMaXN0Q2VsbCAgICpsYzM7Ci0JTGlzdAkgICAq Y2hlYXBlc3RfcGF0aGxpc3QgPSBOSUw7Ci0JTGlzdAkgICAqb3JkZXJlZF9wYXRobGlzdCA9IE5J TDsKLQlMaXN0CSAgICpwYXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCUFwcGVuZFBhdGhJbnB1dCBj aGVhcGVzdCA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgb3JkZXJlZCA9IHswfTsKKwlBcHBlbmRQ YXRoSW5wdXQgcGFydGlhbCA9IHswfTsKIAlib29sCQlwYXJ0aWFsX3BhdGhzX3ZhbGlkID0gdHJ1 ZTsKIAlib29sCQljb25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAJTGlzdAkgICAqcmVsbGlzdDsK QEAgLTc4Myw3ICs3ODMsNyBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10 ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCWlmIChpc19kdW1teV9yZWwocmVsKSkKIAkJCWNv bnRpbnVlOwogCi0JCWNoZWFwZXN0X3BhdGhsaXN0ID0gbGFwcGVuZChjaGVhcGVzdF9wYXRobGlz dCwKKwkJY2hlYXBlc3Quc3VicGF0aHMgPSBsYXBwZW5kKGNoZWFwZXN0LnN1YnBhdGhzLAogCQkJ CQkJCQkJcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoKTsKIAogCQlpZiAodHJ5X3NvcnRlZCkKQEAg LTc5NSw3ICs3OTUsNyBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpv cCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgZmFsc2UpOwogCiAJCQlpZiAo b3JkZXJlZF9wYXRoICE9IE5VTEwpCi0JCQkJb3JkZXJlZF9wYXRobGlzdCA9IGxhcHBlbmQob3Jk ZXJlZF9wYXRobGlzdCwgb3JkZXJlZF9wYXRoKTsKKwkJCQlvcmRlcmVkLnN1YnBhdGhzID0gbGFw cGVuZChvcmRlcmVkLnN1YnBhdGhzLCBvcmRlcmVkX3BhdGgpOwogCQkJZWxzZQogCQkJewogCQkJ CS8qCkBAIC04MTgsMjAgKzgxOCwyMCBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRp b25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQllbHNlIGlmIChyZWwtPnBhcnRpYWxf cGF0aGxpc3QgPT0gTklMKQogCQkJCXBhcnRpYWxfcGF0aHNfdmFsaWQgPSBmYWxzZTsKIAkJCWVs c2UKLQkJCQlwYXJ0aWFsX3BhdGhsaXN0ID0gbGFwcGVuZChwYXJ0aWFsX3BhdGhsaXN0LAotCQkJ CQkJCQkJCSAgIGxpbml0aWFsKHJlbC0+cGFydGlhbF9wYXRobGlzdCkpOworCQkJCXBhcnRpYWwu cGFydGlhbF9zdWJwYXRocyA9IGxhcHBlbmQocGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzLAorCQkJ CQkJCQkJCQkJICAgbGluaXRpYWwocmVsLT5wYXJ0aWFsX3BhdGhsaXN0KSk7CiAJCX0KIAl9CiAK IAkvKiBCdWlsZCByZXN1bHQgcmVsYXRpb24uICovCiAJcmVzdWx0X3JlbCA9IGZldGNoX3VwcGVy X3JlbChyb290LCBVUFBFUlJFTF9TRVRPUCwgcmVsaWRzKTsKIAlyZXN1bHRfcmVsLT5yZWx0YXJn ZXQgPSBjcmVhdGVfc2V0b3BfcGF0aHRhcmdldChyb290LCB0bGlzdCwKLQkJCQkJCQkJCQkJCQlj aGVhcGVzdF9wYXRobGlzdCk7CisJCQkJCQkJCQkJCQkJY2hlYXBlc3Quc3VicGF0aHMpOwogCXJl c3VsdF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gY29uc2lkZXJfcGFyYWxsZWw7CiAJcmVzdWx0 X3JlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCiAJ LyogSWYgYWxsIFVOSU9OIGNoaWxkcmVuIHdlcmUgZHVtbXkgcmVscywgbWFrZSB0aGUgcmVzdWx0 aW5nIHJlbCBkdW1teSAqLwotCWlmIChjaGVhcGVzdF9wYXRobGlzdCA9PSBOSUwpCisJaWYgKGNo ZWFwZXN0LnN1YnBhdGhzID09IE5JTCkKIAl7CiAJCW1hcmtfZHVtbXlfcmVsKHJlc3VsdF9yZWwp OwogCkBAIC04NDIsOCArODQyLDggQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0T3BlcmF0aW9u U3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCSAqIEFwcGVuZCB0aGUgY2hpbGQgcmVzdWx0 cyB0b2dldGhlciB1c2luZyB0aGUgY2hlYXBlc3QgcGF0aHMgZnJvbSBlYWNoCiAJICogdW5pb24g Y2hpbGQuCiAJICovCi0JYXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVzdWx0X3JlbCwgY2hlYXBlc3RfcGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5JTCwg TlVMTCwgMCwgZmFsc2UsIC0xKTsKKwlhcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0 aChyb290LCByZXN1bHRfcmVsLCBjaGVhcGVzdCwKKwkJCQkJCQkJCQlOSUwsIE5VTEwsIDAsIGZh bHNlLCAtMSk7CiAKIAkvKgogCSAqIEVzdGltYXRlIG51bWJlciBvZiBncm91cHMuICBGb3Igbm93 IHdlIGp1c3QgYXNzdW1lIHRoZSBvdXRwdXQgaXMgdW5pcXVlCkBAIC04NjIsNyArODYyLDcgQEAg Z2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpy b290LAogCQlpbnQJCQlwYXJhbGxlbF93b3JrZXJzID0gMDsKIAogCQkvKiBGaW5kIHRoZSBoaWdo ZXN0IG51bWJlciBvZiB3b3JrZXJzIHJlcXVlc3RlZCBmb3IgYW55IHN1YnBhdGguICovCi0JCWZv cmVhY2gobGMsIHBhcnRpYWxfcGF0aGxpc3QpCisJCWZvcmVhY2gobGMsIHBhcnRpYWwucGFydGlh bF9zdWJwYXRocykKIAkJewogCQkJUGF0aAkgICAqc3VicGF0aCA9IGxmaXJzdChsYyk7CiAKQEAg LTg4MSwxNSArODgxLDE1IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJaWYgKGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQpCiAJ CXsKIAkJCXBhcmFsbGVsX3dvcmtlcnMgPSBNYXgocGFyYWxsZWxfd29ya2VycywKLQkJCQkJCQkJ ICAgcGdfbGVmdG1vc3Rfb25lX3BvczMyKGxpc3RfbGVuZ3RoKHBhcnRpYWxfcGF0aGxpc3QpKSAr IDEpOworCQkJCQkJCQkgICBwZ19sZWZ0bW9zdF9vbmVfcG9zMzIobGlzdF9sZW5ndGgocGFydGlh bC5wYXJ0aWFsX3N1YnBhdGhzKSkgKyAxKTsKIAkJCXBhcmFsbGVsX3dvcmtlcnMgPSBNaW4ocGFy YWxsZWxfd29ya2VycywKIAkJCQkJCQkJICAgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl cik7CiAJCX0KIAkJQXNzZXJ0KHBhcmFsbGVsX3dvcmtlcnMgPiAwKTsKIAogCQlwYXBhdGggPSAo UGF0aCAqKQotCQkJY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIE5JTCwgcGFy dGlhbF9wYXRobGlzdCwKLQkJCQkJCQkgICBOSUwsIE5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vy cywKKwkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBwYXJ0aWFsLAorCQkJ CQkJCSAgIE5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkgICBlbmFibGVfcGFy YWxsZWxfYXBwZW5kLCAtMSk7CiAJCWdwYXRoID0gKFBhdGggKikKIAkJCWNyZWF0ZV9nYXRoZXJf cGF0aChyb290LCByZXN1bHRfcmVsLCBwYXBhdGgsCkBAIC05MDEsNyArOTAxLDcgQEAgZ2VuZXJh dGVfdW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAog CQlkb3VibGUJCWROdW1Hcm91cHM7CiAJCWJvb2wJCWNhbl9zb3J0ID0gZ3JvdXBpbmdfaXNfc29y dGFibGUoZ3JvdXBMaXN0KTsKIAkJYm9vbAkJY2FuX2hhc2ggPSBncm91cGluZ19pc19oYXNoYWJs ZShncm91cExpc3QpOwotCQlQYXRoCSAgICpmaXJzdF9wYXRoID0gbGluaXRpYWwoY2hlYXBlc3Rf cGF0aGxpc3QpOworCQlQYXRoCSAgICpmaXJzdF9wYXRoID0gbGluaXRpYWwoY2hlYXBlc3Quc3Vi cGF0aHMpOwogCiAJCS8qCiAJCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgVU5JT04gb3V0cHV0 IHJvd3MuICBJbiB0aGUgY2FzZSB3aGVuIG9ubHkgYQpAQCAtOTExLDcgKzkxMSw3IEBAIGdlbmVy YXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJICogY29udGFpbiBWYXJzIHdpdGggdmFybm89PTAsIHdoaWNoIGVzdGltYXRlX251bV9ncm91 cHMoKSB3b3VsZG4ndAogCQkgKiBsaWtlLgogCQkgKi8KLQkJaWYgKGxpc3RfbGVuZ3RoKGNoZWFw ZXN0X3BhdGhsaXN0KSA9PSAxICYmCisJCWlmIChsaXN0X2xlbmd0aChjaGVhcGVzdC5zdWJwYXRo cykgPT0gMSAmJgogCQkJZmlyc3RfcGF0aC0+cGFyZW50LT5yZWxvcHRraW5kICE9IFJFTE9QVF9V UFBFUl9SRUwpCiAJCXsKIAkJCWROdW1Hcm91cHMgPSBlc3RpbWF0ZV9udW1fZ3JvdXBzKHJvb3Qs CkBAIC0xMDE3LDcgKzEwMTcsNyBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25T dG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVf bWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKLQkJCQkJ CQkJCQkJCQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgb3JkZXJlZC5zdWJwYXRo cywKIAkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1bmlvbl9wYXRoa2V5cywKIAkJ CQkJCQkJCQkJCQkgTlVMTCk7CkBAIC0xMjE3LDYgKzEyMTcsOSBAQCBnZW5lcmF0ZV9ub251bmlv bl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQlpZiAo b3AtPmFsbCkKIAkJCXsKIAkJCQlQYXRoCSAgICphcGF0aDsKKwkJCQlBcHBlbmRQYXRoSW5wdXQg YXBwZW5kID0gezB9OworCisJCQkJYXBwZW5kLnN1YnBhdGhzID0gbGlzdF9tYWtlMShscGF0aCk7 CiAKIAkJCQkvKgogCQkJCSAqIEVYQ0VQVCBBTEw6IElmIHRoZSByaWdodC1oYW5kIGlucHV0IGlz IGR1bW15IHRoZW4gd2UgY2FuCkBAIC0xMjI2LDggKzEyMjksNyBAQCBnZW5lcmF0ZV9ub251bmlv bl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICog bGVmdCBpbnB1dC4gIFRoZSBBcHBlbmQgd2lsbCBiZSByZW1vdmVkIGluIHNldHJlZnMuYy4KIAkJ CQkgKi8KIAkJCQlhcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1 bHRfcmVsLAotCQkJCQkJCQkJCQkJCWxpc3RfbWFrZTEobHBhdGgpLAotCQkJCQkJCQkJCQkJCU5J TCwgTklMLCBOSUwsIE5VTEwsIDAsCisJCQkJCQkJCQkJCQkJYXBwZW5kLCBOSUwsIE5VTEwsIDAs CiAJCQkJCQkJCQkJCQkJZmFsc2UsIC0xKTsKIAogCQkJCWFkZF9wYXRoKHJlc3VsdF9yZWwsIGFw YXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDMxMDE3NWI2YjIx Li5kY2E1NDU5YWVhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0 aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC0x MzAwLDggKzEzMDAsNyBAQCBjcmVhdGVfdGlkcmFuZ2VzY2FuX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIEFwcGVuZFBhdGggKgogY3JlYXRlX2FwcGVuZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCQkJCSAgIFJlbE9wdEluZm8gKnJlbCwKLQkJCQkgICBMaXN0ICpz dWJwYXRocywgTGlzdCAqcGFydGlhbF9zdWJwYXRocywKLQkJCQkgICBMaXN0ICpjaGlsZF9hcHBl bmRfcmVsaWRfc2V0cywKKwkJCQkgICBBcHBlbmRQYXRoSW5wdXQgaW5wdXQsCiAJCQkJICAgTGlz dCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRlciwKIAkJCQkgICBpbnQgcGFyYWxsZWxf d29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJCQkgICBkb3VibGUgcm93cykKQEAgLTEz MTEsNyArMTMxMCw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAog CUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxsZWxfd29ya2VycyA+IDApOwogCi0JcGF0 aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7 CisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gaW5wdXQuY2hpbGRfYXBwZW5k X3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0FwcGVuZDsKIAlwYXRo bm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHRhcmdldCA9IHJl bC0+cmVsdGFyZ2V0OwpAQCAtMTMyNyw3ICsxMzI2LDcgQEAgY3JlYXRlX2FwcGVuZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCSAqIG9uIHRoZSBzaW1wbGVyIGdldF9hcHBlbmRyZWxfcGFyYW1w YXRoaW5mby4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gZG9pbmcKIAkgKiB0aGUgbW9yZSBleHBlbnNp dmUgdGhpbmcgZm9yIGEgZHVtbXkgcGF0aCwgZWl0aGVyLgogCSAqLwotCWlmIChyZWwtPnJlbG9w dGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwgJiYgcm9vdCAmJiBzdWJwYXRocyAhPSBOSUwpCisJaWYg KHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCAmJiByb290ICYmIGlucHV0LnN1YnBh dGhzICE9IE5JTCkKIAkJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IGdldF9iYXNlcmVsX3Bh cmFtcGF0aGluZm8ocm9vdCwKIAkJCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCQkJ ICByZXF1aXJlZF9vdXRlcik7CkBAIC0xMzU4LDExICsxMzU3LDExIEBAIGNyZWF0ZV9hcHBlbmRf cGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJICovCiAJCUFzc2VydChwYXRoa2V5cyA9PSBOSUwp OwogCi0JCWxpc3Rfc29ydChzdWJwYXRocywgYXBwZW5kX3RvdGFsX2Nvc3RfY29tcGFyZSk7Ci0J CWxpc3Rfc29ydChwYXJ0aWFsX3N1YnBhdGhzLCBhcHBlbmRfc3RhcnR1cF9jb3N0X2NvbXBhcmUp OworCQlsaXN0X3NvcnQoaW5wdXQuc3VicGF0aHMsIGFwcGVuZF90b3RhbF9jb3N0X2NvbXBhcmUp OworCQlsaXN0X3NvcnQoaW5wdXQucGFydGlhbF9zdWJwYXRocywgYXBwZW5kX3N0YXJ0dXBfY29z dF9jb21wYXJlKTsKIAl9Ci0JcGF0aG5vZGUtPmZpcnN0X3BhcnRpYWxfcGF0aCA9IGxpc3RfbGVu Z3RoKHN1YnBhdGhzKTsKLQlwYXRobm9kZS0+c3VicGF0aHMgPSBsaXN0X2NvbmNhdChzdWJwYXRo cywgcGFydGlhbF9zdWJwYXRocyk7CisJcGF0aG5vZGUtPmZpcnN0X3BhcnRpYWxfcGF0aCA9IGxp c3RfbGVuZ3RoKGlucHV0LnN1YnBhdGhzKTsKKwlwYXRobm9kZS0+c3VicGF0aHMgPSBsaXN0X2Nv bmNhdChpbnB1dC5zdWJwYXRocywgaW5wdXQucGFydGlhbF9zdWJwYXRocyk7CiAKIAkvKgogCSAq IEFwcGx5IHF1ZXJ5LXdpZGUgTElNSVQgaWYga25vd24gYW5kIHBhdGggaXMgZm9yIHNvbGUgYmFz ZSByZWxhdGlvbi4KQEAgLTM5MzgsMTEgKzM5MzcsMTIgQEAgcmVwYXJhbWV0ZXJpemVfcGF0aChQ bGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJY2FzZSBUX0FwcGVuZDoKIAkJCXsKIAkJ CQlBcHBlbmRQYXRoICphcGF0aCA9IChBcHBlbmRQYXRoICopIHBhdGg7Ci0JCQkJTGlzdAkgICAq Y2hpbGRwYXRocyA9IE5JTDsKLQkJCQlMaXN0CSAgICpwYXJ0aWFscGF0aHMgPSBOSUw7CisJCQkJ QXBwZW5kUGF0aElucHV0IG5ld19hcHBlbmQgPSB7MH07CiAJCQkJaW50CQkJaTsKIAkJCQlMaXN0 Q2VsbCAgICpsYzsKIAorCQkJCW5ld19hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBh cGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKIAkJCQkvKiBSZXBhcmFtZXRlcml6ZSB0 aGUgY2hpbGRyZW4gKi8KIAkJCQlpID0gMDsKIAkJCQlmb3JlYWNoKGxjLCBhcGF0aC0+c3VicGF0 aHMpCkBAIC0zOTU2LDE0ICszOTU2LDEzIEBAIHJlcGFyYW1ldGVyaXplX3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQkJLyogV2UgaGF2 ZSB0byByZS1zcGxpdCB0aGUgcmVndWxhciBhbmQgcGFydGlhbCBwYXRocyAqLwogCQkJCQlpZiAo aSA8IGFwYXRoLT5maXJzdF9wYXJ0aWFsX3BhdGgpCi0JCQkJCQljaGlsZHBhdGhzID0gbGFwcGVu ZChjaGlsZHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnN1YnBhdGhzID0gbGFwcGVu ZChuZXdfYXBwZW5kLnN1YnBhdGhzLCBzcGF0aCk7CiAJCQkJCWVsc2UKLQkJCQkJCXBhcnRpYWxw YXRocyA9IGxhcHBlbmQocGFydGlhbHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnBh cnRpYWxfc3VicGF0aHMgPSBsYXBwZW5kKG5ld19hcHBlbmQucGFydGlhbF9zdWJwYXRocywgc3Bh dGgpOwogCQkJCQlpKys7CiAJCQkJfQogCQkJCXJldHVybiAoUGF0aCAqKQotCQkJCQljcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBwYXJ0aWFscGF0aHMsCi0JCQkJCQkJ CQkgICBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCWNyZWF0ZV9hcHBlbmRf cGF0aChyb290LCByZWwsIG5ld19hcHBlbmQsCiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXRo a2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxlbF93 b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRobm9kZS5oCmluZGV4IGRjOGNhYjJiN2U2Li44ZGNhMGNjNjdlOCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmgKQEAgLTc3LDkgKzc3LDE1IEBAIGV4dGVybiBUaWRSYW5nZVBhdGgg KmNyZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJ ICBMaXN0ICp0aWRyYW5nZXF1YWxzLAogCQkJCQkJCQkJCQkgIFJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkJCQkJCQkJICBpbnQgcGFyYWxsZWxfd29ya2Vycyk7CisKK3R5cGVkZWYgc3RydWN0 IEFwcGVuZFBhdGhJbnB1dAoreworCUxpc3QJICAgKnN1YnBhdGhzOworCUxpc3QJICAgKnBhcnRp YWxfc3VicGF0aHM7CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7Cit9IEFwcGVu ZFBhdGhJbnB1dDsKIGV4dGVybiBBcHBlbmRQYXRoICpjcmVhdGVfYXBwZW5kX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKLQkJCQkJCQkJCSAgTGlzdCAqc3VicGF0aHMs IExpc3QgKnBhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkgIExpc3QgKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzLAorCQkJCQkJCQkJICBBcHBlbmRQYXRoSW5wdXQgaW5wdXQsCiAJCQkJCQkJCQkg IExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGludCBw YXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3VibGUg cm93cyk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDJjNGYzNTBiZWJlLi4zODM4MmI0 YzkxZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyNSw2ICsxMjUsNyBAQCBBbmxJ bmRleERhdGEKIEFueUFycmF5VHlwZQogQXBwZW5kCiBBcHBlbmRQYXRoCitBcHBlbmRQYXRoSW5w dXQKIEFwcGVuZFJlbEluZm8KIEFwcGVuZFN0YXRlCiBBcHBseUVycm9yQ2FsbGJhY2tBcmcKLS0g CjIuNDcuMQoK --000000000000b68c0b0648227f18 Content-Type: application/octet-stream; name="alternate-v8-0003-Store-information-about-Append-node-consolidation.nocf" Content-Disposition: attachment; filename="alternate-v8-0003-Store-information-about-Append-node-consolidation.nocf" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mka6hp171 RnJvbSA4NzkwYzczZTQ1YWUwZmRhNzYyZGRmMjU0NTY2YTA2NzI1NjNjYWY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY4IDMv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAg ICAgICAgICB8ICAgNCArLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j ICAgICAgIHwgIDU2ICsrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j ICAgICAgICAgfCAyMDEgKysrKysrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9qb2lucmVscy5jICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2NyZWF0ZXBsYW4uYyAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jICAgICAgICB8ICA0MyArKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wYXRobm9kZS5jICAgICAgICAgfCAgMjYgKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgICAgICAgICAgfCAgMTAgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggICAgICAgICAgICAgICAgIHwgIDExICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9k ZS5oICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgICAgICAgICAgICAgIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDI1NiBpbnNlcnRpb25z KCspLCAxMTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFp bi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4 cGVjdGVkL3BnX292ZXJleHBsYWluLm91dAppbmRleCBjYTlhMjNlYTYxZi4uYTM3N2ZiMjU3MWQg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CkBAIC0xMDQsNiArMTA0LDcgQEAgJCQpOwogICAgICAgICAgICAgICAgUGFyYWxsZWwg U2FmZTogdHJ1ZQogICAgICAgICAgICAgICAgUGxhbiBOb2RlIElEOiAyCiAgICAgICAgICAgICAg ICBBcHBlbmQgUlRJczogMQorICAgICAgICAgICAgICAgQ2hpbGQgQXBwZW5kIFJUSXM6IG5vbmUK ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBicmFzc2ljYSB2ZWdldGFibGVzXzEKICAg ICAgICAgICAgICAgICAgICAgIERpc2FibGVkIE5vZGVzOiAwCiAgICAgICAgICAgICAgICAgICAg ICBQYXJhbGxlbCBTYWZlOiB0cnVlCkBAIC0xNDIsNyArMTQzLDcgQEAgJCQpOwogICAgUmVsYXRp b24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVMb2Nr CiAgVW5wcnVuYWJsZSBSVElzOiAxIDMgNAotKDUzIHJvd3MpCisoNTQgcm93cykKIAogLS0gVGVz dCBhIGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0LgogU0VMRUNUIGV4cGxhaW5fZmlsdGVyKCQkCkBA IC0xOTcsNiArMTk4LDcgQEAgJCQpOwogICAgICAgICAgICAgICAgPGV4dFBhcmFtPm5vbmU8L2V4 dFBhcmFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8YWxs UGFyYW0+bm9uZTwvYWxsUGFyYW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAg ICAgICAgICAgIDxBcHBlbmQtUlRJcz4xPC9BcHBlbmQtUlRJcz4gICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICAgICAgICAgICAgPENoaWxkLUFwcGVuZC1SVElzPm5vbmU8L0NoaWxkLUFw cGVuZC1SVElzPiAgICAgICAgICArCiAgICAgICAgICAgICAgICA8U3VicGxhbnMtUmVtb3ZlZD4w PC9TdWJwbGFucy1SZW1vdmVkPiAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxQbGFu cz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAg ICAgICAgICAgICA8UGxhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICArCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWlu LmMgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggZTAxODRi YTMxNGEuLjM2ZTZhYWMwZTJjIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3Bn X292ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFp bi5jCkBAIC01NCw2ICs1NCw4IEBAIHN0YXRpYyB2b2lkIG92ZXJleHBsYWluX2FsaWFzKGNvbnN0 IGNoYXIgKnFsYWJlbCwgQWxpYXMgKmFsaWFzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7 CiBzdGF0aWMgdm9pZCBvdmVyZXhwbGFpbl9iaXRtYXBzZXQoY29uc3QgY2hhciAqcWxhYmVsLCBC aXRtYXBzZXQgKmJtcywKIAkJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lk IG92ZXJleHBsYWluX2JpdG1hcHNldF9saXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqYm1z X2xpc3QsCisJCQkJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIG92ZXJl eHBsYWluX2ludGxpc3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpsaXN0LAogCQkJCQkJCQlF eHBsYWluU3RhdGUgKmVzKTsKIApAQCAtMjMyLDExICsyMzQsMTcgQEAgb3ZlcmV4cGxhaW5fcGVy X25vZGVfaG9vayhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCW92 ZXJleHBsYWluX2JpdG1hcHNldCgiQXBwZW5kIFJUSXMiLAogCQkJCQkJCQkJICAoKEFwcGVuZCAq KSBwbGFuKS0+YXBwcmVsaWRzLAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0 bWFwc2V0X2xpc3QoIkNoaWxkIEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKEFwcGVuZCAq KSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJCQkJICAgZXMpOwogCQkJ CWJyZWFrOwogCQkJY2FzZSBUX01lcmdlQXBwZW5kOgogCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dCgiQXBwZW5kIFJUSXMiLAogCQkJCQkJCQkJICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcHBy ZWxpZHMsCiAJCQkJCQkJCQkgIGVzKTsKKwkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXRfbGlzdCgi Q2hpbGQgQXBwZW5kIFJUSXMiLAorCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQgKikgcGxhbikt PmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVhazsK IAkJCWNhc2UgVF9SZXN1bHQ6CiAKQEAgLTgxNSw2ICs4MjMsNTQgQEAgb3ZlcmV4cGxhaW5fYml0 bWFwc2V0KGNvbnN0IGNoYXIgKnFsYWJlbCwgQml0bWFwc2V0ICpibXMsIEV4cGxhaW5TdGF0ZSAq ZXMpCiAJcGZyZWUoYnVmLmRhdGEpOwogfQogCisvKgorICogRW1pdCBhIHRleHQgcHJvcGVydHkg ZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2YgYSBsaXN0IG9mIGJpdG1hcHNldHMuCisgKiBJZiBh IGJpdG1hcHNldCBjb250YWlucyBleGFjdGx5IDEgbWVtYmVyLCB3ZSBqdXN0IHByaW50IGFuIGlu dGVnZXI7CisgKiBvdGhlcndpc2UsIHdlIHN1cnJvdW5kIHRoZSBsaXN0IG9mIG1lbWJlcnMgYnkg cGFyZW50aGVzZXMuCisgKgorICogSWYgdGhlcmUgYXJlIG5vIGJpdG1hcHNldHMgaW4gdGhlIGxp c3QsIHdlIHByaW50IHRoZSB3b3JkICJub25lIi4KKyAqLworc3RhdGljIHZvaWQKK292ZXJleHBs YWluX2JpdG1hcHNldF9saXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqYm1zX2xpc3QsCisJ CQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWlu aXRTdHJpbmdJbmZvKCZidWYpOworCisJZm9yZWFjaF9ub2RlKEJpdG1hcHNldCwgYm1zLCBibXNf bGlzdCkKKwl7CisJCWlmIChibXNfbWVtYmVyc2hpcChibXMpID09IEJNU19TSU5HTEVUT04pCisJ CQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIgJWQiLCBibXNfc2luZ2xldG9uX21lbWJlcihibXMp KTsKKwkJZWxzZQorCQl7CisJCQlpbnQJCQl4ID0gLTE7CisJCQlib29sCQlmaXJzdCA9IHRydWU7 CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIiAoIik7CisJCQl3aGlsZSAoKHgg PSBibXNfbmV4dF9tZW1iZXIoYm1zLCB4KSkgPj0gMCkKKwkJCXsKKwkJCQlpZiAoZmlyc3QpCisJ CQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJZWxzZQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigm YnVmLCAnICcpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVkIiwgeCk7CisJCQl9CisJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKScpOworCQl9CisJfQorCisJaWYgKGJ1Zi5s ZW4gPT0gMCkKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxhYmVsLCAibm9uZSIsIGVzKTsK KwkJcmV0dXJuOworCX0KKworCUFzc2VydChidWYuZGF0YVswXSA9PSAnICcpOworCUV4cGxhaW5Q cm9wZXJ0eVRleHQocWxhYmVsLCBidWYuZGF0YSArIDEsIGVzKTsKKwlwZnJlZShidWYuZGF0YSk7 Cit9CisKIC8qCiAgKiBFbWl0IGEgdGV4dCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSBjb250ZW50 cyBvZiBhIGxpc3Qgb2YgaW50ZWdlcnMsIE9JRHMsCiAgKiBvciBYSURzIC0tIGVpdGhlciBhIHNw YWNlLXNlcGFyYXRlZCBsaXN0IG9mIGludGVnZXIgbWVtYmVycywgb3IgdGhlIHdvcmQKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDZlNjQxYzE0NmEzLi4wYzE4YTlmMjlj YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0xMjgsOCArMTI4LDEw IEBAIHN0YXRpYyBQYXRoICpnZXRfY2hlYXBlc3RfcGFyYW1ldGVyaXplZF9jaGlsZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJICAgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsK IHN0YXRpYyB2b2lkIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwKIAkJCQkJ CQkJCSAgTGlzdCAqKnN1YnBhdGhzLAotCQkJCQkJCQkJICBMaXN0ICoqc3BlY2lhbF9zdWJwYXRo cyk7Ci1zdGF0aWMgUGF0aCAqZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRo KTsKKwkJCQkJCQkJCSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkgIExpc3Qg KipjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CitzdGF0aWMgUGF0aCAqZ2V0X3NpbmdsZXRvbl9h cHBlbmRfc3VicGF0aChQYXRoICpwYXRoLAorCQkJCQkJCQkJCSAgTGlzdCAqKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzKTsKIHN0YXRpYyB2b2lkIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0 SW5mbyAqcmVsKTsKIHN0YXRpYyB2b2lkIHNldF9zdWJxdWVyeV9wYXRobGlzdChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkgIEluZGV4IHJ0aSwgUmFuZ2VUYmxF bnRyeSAqcnRlKTsKQEAgLTEzODgsNyArMTM5MCw2IEBAIHNldF9ncm91cGVkX3JlbF9wYXRobGlz dChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogCX0KIH0KIAotCiAvKgogICog YWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwKICAqCQlHZW5lcmF0ZSBwYXRocyBmb3IgdGhlIGdpdmVu IGFwcGVuZCByZWxhdGlvbiBnaXZlbiB0aGUgc2V0IG9mIG5vbi1kdW1teQpAQCAtMTQwNCwyMiAr MTQwNSwyMSBAQCB2b2lkCiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJTGlzdCAqbGl2ZV9jaGlsZHJlbHMpCiB7Ci0JTGlz dAkgICAqc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOwotCUxp c3QJICAgKnN0YXJ0dXBfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3RhcnR1cF9zdWJwYXRoc192 YWxpZCA9IHRydWU7Ci0JTGlzdAkgICAqcGFydGlhbF9zdWJwYXRocyA9IE5JTDsKLQlMaXN0CSAg ICpwYV9wYXJ0aWFsX3N1YnBhdGhzID0gTklMOwotCUxpc3QJICAgKnBhX25vbnBhcnRpYWxfc3Vi cGF0aHMgPSBOSUw7Ci0JYm9vbAkJcGFydGlhbF9zdWJwYXRoc192YWxpZCA9IHRydWU7Ci0JYm9v bAkJcGFfc3VicGF0aHNfdmFsaWQ7CisJQXBwZW5kUGF0aElucHV0IHVucGFyYW1ldGVyaXplZCA9 IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgc3RhcnR1cCA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQg cGFydGlhbF9vbmx5ID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJhbGxlbF9hcHBlbmQgPSB7 MH07CisJYm9vbAkJdW5wYXJhbWV0ZXJpemVkX3ZhbGlkID0gdHJ1ZTsKKwlib29sCQlzdGFydHVw X3ZhbGlkID0gdHJ1ZTsKKwlib29sCQlwYXJ0aWFsX29ubHlfdmFsaWQgPSB0cnVlOworCWJvb2wJ CXBhcmFsbGVsX2FwcGVuZF92YWxpZCA9IHRydWU7CiAJTGlzdAkgICAqYWxsX2NoaWxkX3BhdGhr ZXlzID0gTklMOwogCUxpc3QJICAgKmFsbF9jaGlsZF9vdXRlcnMgPSBOSUw7CiAJTGlzdENlbGwg ICAqbDsKIAlkb3VibGUJCXBhcnRpYWxfcm93cyA9IC0xOwogCiAJLyogSWYgYXBwcm9wcmlhdGUs IGNvbnNpZGVyIHBhcmFsbGVsIGFwcGVuZCAqLwotCXBhX3N1YnBhdGhzX3ZhbGlkID0gZW5hYmxl X3BhcmFsbGVsX2FwcGVuZCAmJiByZWwtPmNvbnNpZGVyX3BhcmFsbGVsOworCXBhcmFsbGVsX2Fw cGVuZF92YWxpZCA9IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgJiYgcmVsLT5jb25zaWRlcl9wYXJh bGxlbDsKIAogCS8qCiAJICogRm9yIGV2ZXJ5IG5vbi1kdW1teSBjaGlsZCwgcmVtZW1iZXIgdGhl IGNoZWFwZXN0IHBhdGguICBBbHNvLCBpZGVudGlmeQpAQCAtMTQ0Myw5ICsxNDQzLDkgQEAgYWRk X3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJaWYgKGNoaWxkcmVsLT5wYXRobGlzdCAhPSBOSUwgJiYKIAkJCWNoaWxkcmVsLT5jaGVhcGVz dF90b3RhbF9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwpCiAJCQlhY2N1bXVsYXRlX2FwcGVuZF9z dWJwYXRoKGNoaWxkcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLAotCQkJCQkJCQkJICAmc3VicGF0 aHMsIE5VTEwpOworCQkJCQkJCQkJICAmdW5wYXJhbWV0ZXJpemVkLnN1YnBhdGhzLCBOVUxMLCAm dW5wYXJhbWV0ZXJpemVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJZWxzZQotCQkJc3Vi cGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCXVucGFyYW1ldGVyaXplZF92YWxpZCA9IGZhbHNlOwog CiAJCS8qCiAJCSAqIFdoZW4gdGhlIHBsYW5uZXIgaXMgY29uc2lkZXJpbmcgY2hlYXAgc3RhcnR1 cCBwbGFucywgd2UnbGwgYWxzbwpAQCAtMTQ3MSwxMSArMTQ3MSwxMiBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJLyogY2hl YXBlc3Rfc3RhcnR1cF9wYXRoIG11c3Qgbm90IGJlIGEgcGFyYW1ldGVyaXplZCBwYXRoLiAqLwog CQkJQXNzZXJ0KGNoZWFwZXN0X3BhdGgtPnBhcmFtX2luZm8gPT0gTlVMTCk7CiAJCQlhY2N1bXVs YXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhdGgsCi0JCQkJCQkJCQkgICZzdGFydHVwX3N1 YnBhdGhzLAotCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCSAgJnN0YXJ0dXAuc3VicGF0aHMs CisJCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVuZF9yZWxp ZF9zZXRzKTsKIAkJfQogCQllbHNlCi0JCQlzdGFydHVwX3N1YnBhdGhzX3ZhbGlkID0gZmFsc2U7 CisJCQlzdGFydHVwX3ZhbGlkID0gZmFsc2U7CiAKIAogCQkvKiBTYW1lIGlkZWEsIGJ1dCBmb3Ig YSBwYXJ0aWFsIHBsYW4uICovCkBAIC0xNDgzLDE2ICsxNDg0LDE3IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCWNo ZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhsaXN0 KTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAot CQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkgICZwYXJ0aWFs X29ubHkucGFydGlhbF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnBhcnRpYWxfb25seS5j aGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAkJZWxzZQotCQkJcGFydGlhbF9zdWJwYXRo c192YWxpZCA9IGZhbHNlOworCQkJcGFydGlhbF9vbmx5X3ZhbGlkID0gZmFsc2U7CiAKIAkJLyoK IAkJICogU2FtZSBpZGVhLCBidXQgZm9yIGEgcGFyYWxsZWwgYXBwZW5kIG1peGluZyBwYXJ0aWFs IGFuZCBub24tcGFydGlhbAogCQkgKiBwYXRocy4KIAkJICovCi0JCWlmIChwYV9zdWJwYXRoc192 YWxpZCkKKwkJaWYgKHBhcmFsbGVsX2FwcGVuZF92YWxpZCkKIAkJewogCQkJUGF0aAkgICAqbnBw YXRoID0gTlVMTDsKIApAQCAtMTUwMiw3ICsxNTA0LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9y ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChjaGVhcGVzdF9w YXJ0aWFsX3BhdGggPT0gTlVMTCAmJiBucHBhdGggPT0gTlVMTCkKIAkJCXsKIAkJCQkvKiBOZWl0 aGVyIGEgcGFydGlhbCBub3IgYSBwYXJhbGxlbC1zYWZlIHBhdGg/ICBGb3JnZXQgaXQuICovCi0J CQkJcGFfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCQlwYXJhbGxlbF9hcHBlbmRfdmFsaWQg PSBmYWxzZTsKIAkJCX0KIAkJCWVsc2UgaWYgKG5wcGF0aCA9PSBOVUxMIHx8CiAJCQkJCSAoY2hl YXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwgJiYKQEAgLTE1MTEsOCArMTUxMyw5IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJLyogUGFydGlhbCBwYXRoIGlzIGNoZWFwZXIgb3IgdGhlIG9ubHkgb3B0aW9uLiAqLwogCQkJ CUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCk7CiAJCQkJYWNjdW11bGF0ZV9h cHBlbmRfc3VicGF0aChjaGVhcGVzdF9wYXJ0aWFsX3BhdGgsCi0JCQkJCQkJCQkJICAmcGFfcGFy dGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgICZwYV9ub25wYXJ0aWFsX3N1YnBhdGhzKTsKKwkJ CQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQucGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCQkg ICZwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFyYWxsZWxfYXBwZW5k LmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE1MzAs OCArMTUzMyw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkJICogZmlndXJlIHRoYXQgb3V0LgogCQkJCSAqLwogCQkJCWFj Y3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgobnBwYXRoLAotCQkJCQkJCQkJCSAgJnBhX25vbnBhcnRp YWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCQkgICZwYXJhbGxlbF9h cHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCSAgJnBhcmFsbGVs X2FwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCX0KIApAQCAtMTYwNSwy OCArMTYwOSwyOCBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsLAogCSAqIHVucGFyYW1ldGVyaXplZCBBcHBlbmQgcGF0aCBmb3IgdGhl IHJlbC4gIChOb3RlOiB0aGlzIGlzIGNvcnJlY3QgZXZlbgogCSAqIGlmIHdlIGhhdmUgemVybyBv ciBvbmUgbGl2ZSBzdWJwYXRoIGR1ZSB0byBjb25zdHJhaW50IGV4Y2x1c2lvbi4pCiAJICovCi0J aWYgKHN1YnBhdGhzX3ZhbGlkKQotCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBl bmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLCBOSUwsCisJaWYgKHVucGFyYW1ldGVyaXplZF92 YWxpZCkKKwkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVsLCB1bnBhcmFtZXRlcml6ZWQsCiAJCQkJCQkJCQkJCQkgIE5JTCwgTlVMTCwgMCwgZmFsc2Us CiAJCQkJCQkJCQkJCQkgIC0xKSk7CiAKIAkvKiBidWlsZCBhbiBBcHBlbmRQYXRoIGZvciB0aGUg Y2hlYXAgc3RhcnR1cCBwYXRocywgaWYgdmFsaWQgKi8KLQlpZiAoc3RhcnR1cF9zdWJwYXRoc192 YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVsLCBzdGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJICBOSUwsIE5JTCwgTlVMTCwgMCwg ZmFsc2UsIC0xKSk7CisJaWYgKHN0YXJ0dXBfdmFsaWQpCisJCWFkZF9wYXRoKHJlbCwgKFBhdGgg KikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgc3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAg TklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBwZW5k IG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCiAJICog aXQgcGFyYWxsZWwtYXdhcmUgaWYgcG9zc2libGUuCiAJICovCi0JaWYgKHBhcnRpYWxfc3VicGF0 aHNfdmFsaWQgJiYgcGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcnRpYWxfb25seV92 YWxpZCAmJiBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCiAJewogCQlBcHBl bmRQYXRoICphcHBlbmRwYXRoOwogCQlMaXN0Q2VsbCAgICpsYzsKIAkJaW50CQkJcGFyYWxsZWxf d29ya2VycyA9IDA7CiAKIAkJLyogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Ygd29ya2VycyBy ZXF1ZXN0ZWQgZm9yIGFueSBzdWJwYXRoLiAqLwotCQlmb3JlYWNoKGxjLCBwYXJ0aWFsX3N1YnBh dGhzKQorCQlmb3JlYWNoKGxjLCBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocykKIAkJewog CQkJUGF0aAkgICAqcGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTE2NTMsNyArMTY1Nyw3IEBAIGFk ZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCUFzc2VydChwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKIAkJLyogR2VuZXJhdGUgYSBwYXJ0 aWFsIGFwcGVuZCBwYXRoLiAqLwotCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRoKHJv b3QsIHJlbCwgTklMLCBwYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0gY3JlYXRlX2Fw cGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFydGlhbF9vbmx5LAogCQkJCQkJCQkJCU5JTCwgTlVMTCwg cGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJCQllbmFibGVfcGFyYWxsZWxfYXBwZW5kLAogCQkJ CQkJCQkJCS0xKTsKQEAgLTE2NzQsNyArMTY3OCw3IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVs KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogYSBub24tcGFydGlhbCBw YXRoIHRoYXQgaXMgc3Vic3RhbnRpYWxseSBjaGVhcGVyIHRoYW4gYW55IHBhcnRpYWwgcGF0aDsK IAkgKiBvdGhlcndpc2UsIHdlIHNob3VsZCB1c2UgdGhlIGFwcGVuZCBwYXRoIGFkZGVkIGluIHRo ZSBwcmV2aW91cyBzdGVwLikKIAkgKi8KLQlpZiAocGFfc3VicGF0aHNfdmFsaWQgJiYgcGFfbm9u cGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcmFsbGVsX2FwcGVuZF92YWxpZCAmJiBw YXJhbGxlbF9hcHBlbmQuc3VicGF0aHMgIT0gTklMKQogCXsKIAkJQXBwZW5kUGF0aCAqYXBwZW5k cGF0aDsKIAkJTGlzdENlbGwgICAqbGM7CkBAIC0xNjg0LDcgKzE2ODgsNyBAQCBhZGRfcGF0aHNf dG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkgKiBG aW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJlcXVlc3RlZCBmb3IgYW55IHBhcnRp YWwKIAkJICogc3VicGF0aC4KIAkJICovCi0JCWZvcmVhY2gobGMsIHBhX3BhcnRpYWxfc3VicGF0 aHMpCisJCWZvcmVhY2gobGMsIHBhcmFsbGVsX2FwcGVuZC5wYXJ0aWFsX3N1YnBhdGhzKQogCQl7 CiAJCQlQYXRoCSAgICpwYXRoID0gbGZpcnN0KGxjKTsKIApAQCAtMTcwMiw4ICsxNzA2LDcgQEAg YWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkgICBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyKTsKIAkJQXNzZXJ0 KHBhcmFsbGVsX3dvcmtlcnMgPiAwKTsKIAotCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9w YXRoKHJvb3QsIHJlbCwgcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQlwYV9wYXJ0 aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJl bCwgcGFyYWxsZWxfYXBwZW5kLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vy cywgdHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlhbF9wYXRoKHJl bCwgKFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzEzLDcgKzE3MTYsNyBAQCBhZGRfcGF0aHNf dG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIEFs c28gYnVpbGQgdW5wYXJhbWV0ZXJpemVkIG9yZGVyZWQgYXBwZW5kIHBhdGhzIGJhc2VkIG9uIHRo ZSBjb2xsZWN0ZWQKIAkgKiBsaXN0IG9mIGNoaWxkIHBhdGhrZXlzLgogCSAqLwotCWlmIChzdWJw YXRoc192YWxpZCkKKwlpZiAodW5wYXJhbWV0ZXJpemVkX3ZhbGlkKQogCQlnZW5lcmF0ZV9vcmRl cmVkYXBwZW5kX3BhdGhzKHJvb3QsIHJlbCwgbGl2ZV9jaGlsZHJlbHMsCiAJCQkJCQkJCQkgYWxs X2NoaWxkX3BhdGhrZXlzKTsKIApAQCAtMTczNCwxMCArMTczNywxMCBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXsKIAkJUmVs aWRzCQlyZXF1aXJlZF9vdXRlciA9IChSZWxpZHMpIGxmaXJzdChsKTsKIAkJTGlzdENlbGwgICAq bGNyOworCQlBcHBlbmRQYXRoSW5wdXQgcGFyYW1ldGVyaXplZCA9IHswfTsKKwkJYm9vbAkJcGFy YW1ldGVyaXplZF92YWxpZCA9IHRydWU7CiAKIAkJLyogU2VsZWN0IHRoZSBjaGlsZCBwYXRocyBm b3IgYW4gQXBwZW5kIHdpdGggdGhpcyBwYXJhbWV0ZXJpemF0aW9uICovCi0JCXN1YnBhdGhzID0g TklMOwotCQlzdWJwYXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBsaXZlX2NoaWxk cmVscykKIAkJewogCQkJUmVsT3B0SW5mbyAqY2hpbGRyZWwgPSAoUmVsT3B0SW5mbyAqKSBsZmly c3QobGNyKTsKQEAgLTE3NDYsNyArMTc0OSw3IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlpZiAoY2hpbGRyZWwtPnBhdGhs aXN0ID09IE5JTCkKIAkJCXsKIAkJCQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRhYmxlIHBhdGgg Zm9yIHRoaXMgY2hpbGQgKi8KLQkJCQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJCXBhcmFt ZXRlcml6ZWRfdmFsaWQgPSBmYWxzZTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMTc1NiwxNSAr MTc1OSwxNiBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCQkJaWYgKHN1YnBhdGggPT0gTlVMTCkKIAkJCXsKIAkJCQkvKiBmYWls ZWQgdG8gbWFrZSBhIHN1aXRhYmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJCQlzdWJwYXRo c192YWxpZCA9IGZhbHNlOworCQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxzZTsKIAkJCQli cmVhazsKIAkJCX0KLQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0aCwgJnN1YnBh dGhzLCBOVUxMKTsKKwkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0aCwgJnBhcmFt ZXRlcml6ZWQuc3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkgICZwYXJhbWV0ZXJpemVkLmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCi0JCWlmIChzdWJwYXRoc192YWxpZCkKKwkJaWYg KHBhcmFtZXRlcml6ZWRfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJCQkgY3JlYXRl X2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFyYW1ldGVyaXplZCwKIAkJCQkJCQkJCQlOSUwsIHJl cXVpcmVkX291dGVyLCAwLCBmYWxzZSwKIAkJCQkJCQkJCQktMSkpOwogCX0KQEAgLTE3ODUsMTMg KzE3ODksMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCwKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IChQYXRoICopIGxmaXJzdChs KTsKIAkJCUFwcGVuZFBhdGggKmFwcGVuZHBhdGg7CisJCQlBcHBlbmRQYXRoSW5wdXQgYXBwZW5k ID0gezB9OworCisJCQlhcHBlbmQucGFydGlhbF9zdWJwYXRocyA9IGxpc3RfbWFrZTEocGF0aCk7 CisJCQlhcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBsaXN0X21ha2UxKHJlbC0+cmVs aWRzKTsKIAogCQkJLyogc2tpcCBwYXRocyB3aXRoIG5vIHBhdGhrZXlzLiAqLwogCQkJaWYgKHBh dGgtPnBhdGhrZXlzID09IE5JTCkKIAkJCQljb250aW51ZTsKIAotCQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRoKSwKLQkJCQkJ CQkJCQkJTklMLCBOVUxMLAorCQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290 LCByZWwsIGFwcGVuZCwgTklMLCBOVUxMLAogCQkJCQkJCQkJCQlwYXRoLT5wYXJhbGxlbF93b3Jr ZXJzLCB0cnVlLAogCQkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQkJYWRkX3BhcnRpYWxfcGF0 aChyZWwsIChQYXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTg3Myw5ICsxODgwLDkgQEAgZ2VuZXJh dGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCWZvcmVhY2gobGNwLCBhbGxfY2hpbGRfcGF0aGtleXMpCiAJewogCQlMaXN0CSAgICpwYXRo a2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwotCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhz ID0gTklMOwotCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRocyA9IE5JTDsKLQkJTGlzdAkgICAqZnJh Y3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJQXBwZW5kUGF0aElucHV0IHN0YXJ0dXAgPSB7MH07 CisJCUFwcGVuZFBhdGhJbnB1dCB0b3RhbCA9IHswfTsKKwkJQXBwZW5kUGF0aElucHV0IGZyYWN0 aW9uYWwgPSB7MH07CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3RvdGFsID0gZmFsc2U7CiAJCWJvb2wJ CWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29sCQltYXRjaF9wYXJ0aXRpb25fb3Jk ZXI7CkBAIC0yMDM4LDE2ICsyMDQ1LDIzIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkgKiBqdXN0IGEgc2luZ2xl IHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55dGhpbmcKIAkJCQkgKiB1c2VmdWwp LgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBnZXRfc2luZ2xldG9uX2FwcGVuZF9z dWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFwZXN0X3RvdGFsID0gZ2V0X3Npbmds ZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7CisJCQkJY2hlYXBlc3Rfc3RhcnR1 cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3Rfc3RhcnR1cCwK KwkJCQkJCQkJCQkJCSAmc3RhcnR1cC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CisJCQkJY2hl YXBlc3RfdG90YWwgPQorCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3RvdGFsLAorCQkJCQkJCQkJCQkJICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAK LQkJCQlzdGFydHVwX3N1YnBhdGhzID0gbGFwcGVuZChzdGFydHVwX3N1YnBhdGhzLCBjaGVhcGVz dF9zdGFydHVwKTsKLQkJCQl0b3RhbF9zdWJwYXRocyA9IGxhcHBlbmQodG90YWxfc3VicGF0aHMs IGNoZWFwZXN0X3RvdGFsKTsKKwkJCQlzdGFydHVwLnN1YnBhdGhzID0gbGFwcGVuZChzdGFydHVw LnN1YnBhdGhzLCBjaGVhcGVzdF9zdGFydHVwKTsKKwkJCQl0b3RhbC5zdWJwYXRocyA9IGxhcHBl bmQodG90YWwuc3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKIAogCQkJCWlmIChjaGVhcGVzdF9m cmFjdGlvbmFsKQogCQkJCXsKLQkJCQkJY2hlYXBlc3RfZnJhY3Rpb25hbCA9IGdldF9zaW5nbGV0 b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCk7Ci0JCQkJCWZyYWN0aW9uYWxf c3VicGF0aHMgPSBsYXBwZW5kKGZyYWN0aW9uYWxfc3VicGF0aHMsIGNoZWFwZXN0X2ZyYWN0aW9u YWwpOworCQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0KKwkJCQkJCWdldF9zaW5nbGV0b25fYXBw ZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCwKKwkJCQkJCQkJCQkJCQkgJmZyYWN0aW9u YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOworCQkJCQlmcmFjdGlvbmFsLnN1YnBhdGhzID0K KwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbC5zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7 CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1NywxMyArMjA3MSwxNiBAQCBnZW5lcmF0ZV9v cmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJnZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1 bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3Rh cnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmc3RhcnR1cC5zdWJwYXRocywgTlVM TCwKKwkJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCQlh Y2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3RvdGFsLAotCQkJCQkJCQkJCSAgJnRv dGFsX3N1YnBhdGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkgICZ0b3RhbC5zdWJwYXRocywgTlVMTCwK KwkJCQkJCQkJCQkgICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAKIAkJCQlpZiAo Y2hlYXBlc3RfZnJhY3Rpb25hbCkKIAkJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVh cGVzdF9mcmFjdGlvbmFsLAotCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxM KTsKKwkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbC5zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkJ ICAmZnJhY3Rpb25hbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCX0KIApAQCAt MjA3Myw4ICsyMDkwLDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJLyogV2Ugb25seSBuZWVkIEFwcGVuZCAqLwog CQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJ CQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkJCQkJCQkgIHN0YXJ0dXBfc3VicGF0aHMsCi0JCQkJCQkJ CQkJCQkJICBOSUwsCisJCQkJCQkJCQkJCQkJICBzdGFydHVwLAogCQkJCQkJCQkJCQkJCSAgcGF0 aGtleXMsCiAJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIwODMs NDQgKzIwOTksNDUgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFk ZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCSAgcmVsLAotCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJ CQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkJICB0b3RhbCwKIAkJCQkJCQkJCQkJCQkJICBwYXRoa2V5 cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCQkgIDAsCiAJCQkJCQkJCQkJ CQkJCSAgZmFsc2UsCiAJCQkJCQkJCQkJCQkJCSAgLTEpKTsKIAotCQkJaWYgKGZyYWN0aW9uYWxf c3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQotCQkJCWFkZF9wYXRoKHJlbCwgKFBhdGgg KikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJCQkJ CQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkJCSAgTklMLAotCQkJ CQkJCQkJCQkJCQkgIHBhdGhrZXlzLAotCQkJCQkJCQkJCQkJCQkgIE5VTEwsCi0JCQkJCQkJCQkJ CQkJCSAgMCwKLQkJCQkJCQkJCQkJCQkJICBmYWxzZSwKLQkJCQkJCQkJCQkJCQkJICAtMSkpOwor CQkJaWYgKGZyYWN0aW9uYWwuc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQorCQkJCWFk ZF9wYXRoKHJlbCwgKFBhdGggKikgKHJvb3QsCisJCQkJCQkJCQkJcmVsLAorCQkJCQkJCQkJCWZy YWN0aW9uYWwsCisJCQkJCQkJCQkJcGF0aGtleXMsCisJCQkJCQkJCQkJTlVMTCwKKwkJCQkJCQkJ CQkwLAorCQkJCQkJCQkJCWZhbHNlLAorCQkJCQkJCQkJCS0xKSk7CiAJCX0KIAkJZWxzZQogCQl7 CiAJCQkvKiBXZSBuZWVkIE1lcmdlQXBwZW5kICovCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICop IGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCQkJcmVsLAotCQkJ CQkJCQkJCQkJCQkJc3RhcnR1cF9zdWJwYXRocywKKwkJCQkJCQkJCQkJCQkJCXN0YXJ0dXAuc3Vi cGF0aHMsCisJCQkJCQkJCQkJCQkJCQlzdGFydHVwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAog CQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQlOVUxMKSk7CiAJCQlpZiAo c3RhcnR1cF9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVy Z2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkJCQlyZWwsCi0JCQkJCQkJCQkJCQkJ CQkJdG90YWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwuc3VicGF0aHMsCisJCQkJ CQkJCQkJCQkJCQkJdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJCQkJ CQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQkJTlVMTCkpOwogCi0JCQlpZiAoZnJhY3Rpb25h bF9zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCisJCQlpZiAoZnJhY3Rpb25hbC5zdWJw YXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBj cmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkJCQlyZWwsCi0JCQkJ CQkJCQkJCQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocywKKwkJCQkJCQkJCQkJCQkJCQlmcmFjdGlv bmFsLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWwuY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsCiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQkJTlVM TCkpOwogCQl9CkBAIC0yMjIzLDcgKzIyNDAsOCBAQCBnZXRfY2hlYXBlc3RfcGFyYW1ldGVyaXpl ZF9jaGlsZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAgKiBwYXRo cykuCiAgKi8KIHN0YXRpYyB2b2lkCi1hY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBh dGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCithY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNp YWxfc3VicGF0aHMsCisJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cykKIHsK IAlpZiAoSXNBKHBhdGgsIEFwcGVuZFBhdGgpKQogCXsKQEAgLTIyMzIsNiArMjI1MCw4IEBAIGFj Y3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBMaXN0 ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJaWYgKCFhcGF0aC0+cGF0aC5wYXJhbGxlbF9hd2FyZSB8 fCBhcGF0aC0+Zmlyc3RfcGFydGlhbF9wYXRoID09IDApCiAJCXsKIAkJCSpzdWJwYXRocyA9IGxp c3RfY29uY2F0KCpzdWJwYXRocywgYXBhdGgtPnN1YnBhdGhzKTsKKwkJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgt PnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCQllbHNlIGlmIChzcGVjaWFsX3N1 YnBhdGhzICE9IE5VTEwpCkBAIC0yMjQ2LDYgKzIyNjYsOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9z dWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0 aHMpCiAJCQkJCQkJCQkJCQkgIGFwYXRoLT5maXJzdF9wYXJ0aWFsX3BhdGgpOwogCQkJKnNwZWNp YWxfc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3BlY2lhbF9zdWJwYXRocywKIAkJCQkJCQkJCQkJ bmV3X3NwZWNpYWxfc3VicGF0aHMpOworCQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJ CQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMp OwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMjI1NCw2ICsyMjc2LDggQEAgYWNjdW11bGF0ZV9h cHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFs X3N1YnBhdGhzKQogCQlNZXJnZUFwcGVuZFBhdGggKm1wYXRoID0gKE1lcmdlQXBwZW5kUGF0aCAq KSBwYXRoOwogCiAJCSpzdWJwYXRocyA9IGxpc3RfY29uY2F0KCpzdWJwYXRocywgbXBhdGgtPnN1 YnBhdGhzKTsKKwkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCWxhcHBlbmQoKmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCXJldHVybjsKIAl9 CiAKQEAgLTIyNjUsMTAgKzIyODksMTUgQEAgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRo ICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKQogICoJCVJl dHVybnMgdGhlIHNpbmdsZSBzdWJwYXRoIG9mIGFuIEFwcGVuZC9NZXJnZUFwcGVuZCwgb3IganVz dAogICoJCXJldHVybiAncGF0aCcgaWYgaXQncyBub3QgYSBzaW5nbGUgc3ViLXBhdGggQXBwZW5k L01lcmdlQXBwZW5kLgogICoKKyAqIEFzIGEgc2lkZSBlZmZlY3QsIHdoZW5ldmVyIHdlIHJldHVy biBhIHNpbmdsZSBzdWJwYXRoIHJhdGhlciB0aGFuIHRoZQorICogb3JpZ2luYWwgcGF0aCwgYWRk IHRoZSByZWxpZCBzZXQgZm9yIHRoZSBvcmlnaW5hbCBwYXRoIHRvCisgKiBjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cywgc28gdGhhdCB0aG9zZSByZWxpZHMgZG9uJ3QgZW50aXJlbHkgZGlzYXBwZWFy CisgKiBmcm9tIHRoZSBmaW5hbCBwbGFuLgorICoKICAqIE5vdGU6ICdwYXRoJyBtdXN0IG5vdCBi ZSBhIHBhcmFsbGVsLWF3YXJlIHBhdGguCiAgKi8KIHN0YXRpYyBQYXRoICoKLWdldF9zaW5nbGV0 b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKK2dldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBh dGgoUGF0aCAqcGF0aCwgTGlzdCAqKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKQogewogCUFzc2Vy dCghcGF0aC0+cGFyYWxsZWxfYXdhcmUpOwogCkBAIC0yMjc3LDE0ICsyMzA2LDIyIEBAIGdldF9z aW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKIAkJQXBwZW5kUGF0aCAqYXBhdGgg PSAoQXBwZW5kUGF0aCAqKSBwYXRoOwogCiAJCWlmIChsaXN0X2xlbmd0aChhcGF0aC0+c3VicGF0 aHMpID09IDEpCisJCXsKKwkJCSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVu ZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRzKTsKIAkJCXJl dHVybiAoUGF0aCAqKSBsaW5pdGlhbChhcGF0aC0+c3VicGF0aHMpOworCQl9CiAJfQogCWVsc2Ug aWYgKElzQShwYXRoLCBNZXJnZUFwcGVuZFBhdGgpKQogCXsKIAkJTWVyZ2VBcHBlbmRQYXRoICpt cGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQlpZiAobGlzdF9sZW5ndGgobXBh dGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQor CQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlk cyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwobXBhdGgtPnN1YnBhdGhzKTsKKwkJfQog CX0KIAogCXJldHVybiBwYXRoOwpAQCAtMjMwNCw2ICsyMzQxLDggQEAgZ2V0X3NpbmdsZXRvbl9h cHBlbmRfc3VicGF0aChQYXRoICpwYXRoKQogc3RhdGljIHZvaWQKIHNldF9kdW1teV9yZWxfcGF0 aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQogeworCUFwcGVuZFBhdGhJbnB1dCBpbiA9IHswfTsKKwog CS8qIFNldCBkdW1teSBzaXplIGVzdGltYXRlcyAtLS0gd2UgbGVhdmUgYXR0cl93aWR0aHNbXSBh cyB6ZXJvZXMgKi8KIAlyZWwtPnJvd3MgPSAwOwogCXJlbC0+cmVsdGFyZ2V0LT53aWR0aCA9IDA7 CkBAIC0yMzEzLDcgKzIzNTIsNyBAQCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8g KnJlbCkKIAlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CiAKIAkvKiBTZXQgdXAgdGhlIGR1 bW15IHBhdGggKi8KLQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChO VUxMLCByZWwsIE5JTCwgTklMLAorCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVu ZF9wYXRoKE5VTEwsIHJlbCwgaW4sCiAJCQkJCQkJCQkJCSAgTklMLCByZWwtPmxhdGVyYWxfcmVs aWRzLAogCQkJCQkJCQkJCQkgIDAsIGZhbHNlLCAtMSkpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvam9pbnJlbHMuYwppbmRleCAyNjE1NjUxYzA3My4uNDQzZTJkY2E3YzAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTUxMyw2ICsxNTEzLDcgQEAgdm9pZAogbWFy a19kdW1teV9yZWwoUmVsT3B0SW5mbyAqcmVsKQogewogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKKwlBcHBlbmRQYXRoSW5wdXQgaW4gPSB7MH07CiAKIAkvKiBBbHJlYWR5IG1hcmtlZD8gKi8K IAlpZiAoaXNfZHVtbXlfcmVsKHJlbCkpCkBAIC0xNTI5LDcgKzE1MzAsNyBAQCBtYXJrX2R1bW15 X3JlbChSZWxPcHRJbmZvICpyZWwpCiAJcmVsLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOwogCiAJ LyogU2V0IHVwIHRoZSBkdW1teSBwYXRoICovCi0JYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVh dGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBOSUwsIE5JTCwKKwlhZGRfcGF0aChyZWwsIChQYXRo ICopIGNyZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIGluLAogCQkJCQkJCQkJCQkgIE5JTCwg cmVsLT5sYXRlcmFsX3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IGFmNDFjYTY5OTI5Li40YWMx ZmIxZThmMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTI2 NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBBcHBl bmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFuLT5wbGFuLmxlZnR0cmVlID0gTlVM TDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJcGxhbi0+YXBwcmVsaWRzID0gcmVs LT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBiZXN0X3BhdGgtPmNo aWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhrZXlzICE9IE5JTCkKIAl7CkBAIC0x NDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPmxlZnR0cmVlID0gTlVMTDsK IAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRz OworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVzdF9wYXRoLT5jaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBzb3J0IGNvbHVtbiBpbmZvLCBhbmQg YWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vcGxhbm5lci5jCmluZGV4IDEyNGI1NmI1MjFhLi41Yjc4YmQ0ZmYzNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAxMiw3ICs0MDEyLDcgQEAgY3JlYXRlX2RlZ2Vu ZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0 X3JlbCwKIAkJICogbWlnaHQgZ2V0IGJldHdlZW4gMCBhbmQgTiBvdXRwdXQgcm93cy4gT2ZmaGFu ZCBJIHRoaW5rIHRoYXQncwogCQkgKiBkZXNpcmVkLikKIAkJICovCi0JCUxpc3QJICAgKnBhdGhz ID0gTklMOworCQlBcHBlbmRQYXRoSW5wdXQgYXBwZW5kID0gezB9OwogCiAJCXdoaWxlICgtLW5y b3dzID49IDApCiAJCXsKQEAgLTQwMjAsMTMgKzQwMjAsMTIgQEAgY3JlYXRlX2RlZ2VuZXJhdGVf Z3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwK IAkJCQljcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgocm9vdCwgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJ CQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCiAJCQkJCQkJCQkJIChMaXN0ICopIHBhcnNlLT5o YXZpbmdRdWFsKTsKLQkJCXBhdGhzID0gbGFwcGVuZChwYXRocywgcGF0aCk7CisJCQlhcHBlbmQu c3VicGF0aHMgPSBsYXBwZW5kKGFwcGVuZC5zdWJwYXRocywgcGF0aCk7CiAJCX0KIAkJcGF0aCA9 IChQYXRoICopCiAJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkgICBncm91cGVk X3JlbCwKLQkJCQkJCQkgICBwYXRocywKLQkJCQkJCQkgICBOSUwsCisJCQkJCQkJICAgYXBwZW5k LAogCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJCQkJCSAgIDAsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IDc4Yzk1YzM2ZGQ1Li5mNTBjMjk2ZTNk OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTY5Niw5ICs2OTYs OSBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdENlbGwgICAqbGMyOwogCUxpc3RDZWxs ICAgKmxjMzsKLQlMaXN0CSAgICpjaGVhcGVzdF9wYXRobGlzdCA9IE5JTDsKLQlMaXN0CSAgICpv cmRlcmVkX3BhdGhsaXN0ID0gTklMOwotCUxpc3QJICAgKnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7 CisJQXBwZW5kUGF0aElucHV0IGNoZWFwZXN0ID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBvcmRl cmVkID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJ0aWFsID0gezB9OwogCWJvb2wJCXBhcnRp YWxfcGF0aHNfdmFsaWQgPSB0cnVlOwogCWJvb2wJCWNvbnNpZGVyX3BhcmFsbGVsID0gdHJ1ZTsK IAlMaXN0CSAgICpyZWxsaXN0OwpAQCAtNzgzLDcgKzc4Myw3IEBAIGdlbmVyYXRlX3VuaW9uX3Bh dGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJaWYgKGlzX2R1 bW15X3JlbChyZWwpKQogCQkJY29udGludWU7CiAKLQkJY2hlYXBlc3RfcGF0aGxpc3QgPSBsYXBw ZW5kKGNoZWFwZXN0X3BhdGhsaXN0LAorCQljaGVhcGVzdC5zdWJwYXRocyA9IGxhcHBlbmQoY2hl YXBlc3Quc3VicGF0aHMsCiAJCQkJCQkJCQlyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgpOwogCiAJ CWlmICh0cnlfc29ydGVkKQpAQCAtNzk1LDcgKzc5NSw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhz KFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCQkJ ICBmYWxzZSk7CiAKIAkJCWlmIChvcmRlcmVkX3BhdGggIT0gTlVMTCkKLQkJCQlvcmRlcmVkX3Bh dGhsaXN0ID0gbGFwcGVuZChvcmRlcmVkX3BhdGhsaXN0LCBvcmRlcmVkX3BhdGgpOworCQkJCW9y ZGVyZWQuc3VicGF0aHMgPSBsYXBwZW5kKG9yZGVyZWQuc3VicGF0aHMsIG9yZGVyZWRfcGF0aCk7 CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoKQEAgLTgxOCwyMCArODE4LDIwIEBAIGdlbmVyYXRlX3Vu aW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCWVs c2UgaWYgKHJlbC0+cGFydGlhbF9wYXRobGlzdCA9PSBOSUwpCiAJCQkJcGFydGlhbF9wYXRoc192 YWxpZCA9IGZhbHNlOwogCQkJZWxzZQotCQkJCXBhcnRpYWxfcGF0aGxpc3QgPSBsYXBwZW5kKHBh cnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJCQkJICAgbGluaXRpYWwocmVsLT5wYXJ0aWFsX3BhdGhs aXN0KSk7CisJCQkJcGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzID0gbGFwcGVuZChwYXJ0aWFsLnBh cnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkgICBsaW5pdGlhbChyZWwtPnBhcnRpYWxfcGF0 aGxpc3QpKTsKIAkJfQogCX0KIAogCS8qIEJ1aWxkIHJlc3VsdCByZWxhdGlvbi4gKi8KIAlyZXN1 bHRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsIFVQUEVSUkVMX1NFVE9QLCByZWxpZHMpOwog CXJlc3VsdF9yZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9zZXRvcF9wYXRodGFyZ2V0KHJvb3QsIHRs aXN0LAotCQkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhdGhsaXN0KTsKKwkJCQkJCQkJCQkJCQljaGVh cGVzdC5zdWJwYXRocyk7CiAJcmVzdWx0X3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSBjb25zaWRl cl9wYXJhbGxlbDsKIAlyZXN1bHRfcmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1cGxl X2ZyYWN0aW9uID4gMCk7CiAKIAkvKiBJZiBhbGwgVU5JT04gY2hpbGRyZW4gd2VyZSBkdW1teSBy ZWxzLCBtYWtlIHRoZSByZXN1bHRpbmcgcmVsIGR1bW15ICovCi0JaWYgKGNoZWFwZXN0X3BhdGhs aXN0ID09IE5JTCkKKwlpZiAoY2hlYXBlc3Quc3VicGF0aHMgPT0gTklMKQogCXsKIAkJbWFya19k dW1teV9yZWwocmVzdWx0X3JlbCk7CiAKQEAgLTg0Miw4ICs4NDIsOCBAQCBnZW5lcmF0ZV91bmlv bl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogQXBw ZW5kIHRoZSBjaGlsZCByZXN1bHRzIHRvZ2V0aGVyIHVzaW5nIHRoZSBjaGVhcGVzdCBwYXRocyBm cm9tIGVhY2gKIAkgKiB1bmlvbiBjaGlsZC4KIAkgKi8KLQlhcGF0aCA9IChQYXRoICopIGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVhcGVzdF9wYXRobGlzdCwKLQkJCQkJ CQkJCQlOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2UsIC0xKTsKKwlhcGF0aCA9IChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVhcGVzdCwKKwkJCQkJCQkJCQlO SUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CiAKIAkvKgogCSAqIEVzdGltYXRlIG51bWJlciBvZiBn cm91cHMuICBGb3Igbm93IHdlIGp1c3QgYXNzdW1lIHRoZSBvdXRwdXQgaXMgdW5pcXVlCkBAIC04 NjIsNyArODYyLDcgQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3As IFBsYW5uZXJJbmZvICpyb290LAogCQlpbnQJCQlwYXJhbGxlbF93b3JrZXJzID0gMDsKIAogCQkv KiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJlcXVlc3RlZCBmb3IgYW55IHN1 YnBhdGguICovCi0JCWZvcmVhY2gobGMsIHBhcnRpYWxfcGF0aGxpc3QpCisJCWZvcmVhY2gobGMs IHBhcnRpYWwucGFydGlhbF9zdWJwYXRocykKIAkJewogCQkJUGF0aAkgICAqc3VicGF0aCA9IGxm aXJzdChsYyk7CiAKQEAgLTg4MSwxNCArODgxLDE0IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNl dE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJaWYgKGVuYWJsZV9wYXJh bGxlbF9hcHBlbmQpCiAJCXsKIAkJCXBhcmFsbGVsX3dvcmtlcnMgPSBNYXgocGFyYWxsZWxfd29y a2VycywKLQkJCQkJCQkJICAgcGdfbGVmdG1vc3Rfb25lX3BvczMyKGxpc3RfbGVuZ3RoKHBhcnRp YWxfcGF0aGxpc3QpKSArIDEpOworCQkJCQkJCQkgICBwZ19sZWZ0bW9zdF9vbmVfcG9zMzIobGlz dF9sZW5ndGgocGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzKSkgKyAxKTsKIAkJCXBhcmFsbGVsX3dv cmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJICAgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlcik7CiAJCX0KIAkJQXNzZXJ0KHBhcmFsbGVsX3dvcmtlcnMgPiAwKTsK IAogCQlwYXBhdGggPSAoUGF0aCAqKQotCQkJY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlc3Vs dF9yZWwsIE5JTCwgcGFydGlhbF9wYXRobGlzdCwKKwkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290 LCByZXN1bHRfcmVsLCBwYXJ0aWFsLAogCQkJCQkJCSAgIE5JTCwgTlVMTCwgcGFyYWxsZWxfd29y a2VycywKIAkJCQkJCQkgICBlbmFibGVfcGFyYWxsZWxfYXBwZW5kLCAtMSk7CiAJCWdwYXRoID0g KFBhdGggKikKQEAgLTkwMSw3ICs5MDEsNyBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVy YXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCWRvdWJsZQkJZE51bUdyb3VwczsK IAkJYm9vbAkJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJsZShncm91cExpc3QpOwogCQli b29sCQljYW5faGFzaCA9IGdyb3VwaW5nX2lzX2hhc2hhYmxlKGdyb3VwTGlzdCk7Ci0JCVBhdGgJ ICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdF9wYXRobGlzdCk7CisJCVBhdGgJICAg KmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdC5zdWJwYXRocyk7CiAKIAkJLyoKIAkJICog RXN0aW1hdGUgdGhlIG51bWJlciBvZiBVTklPTiBvdXRwdXQgcm93cy4gIEluIHRoZSBjYXNlIHdo ZW4gb25seSBhCkBAIC05MTEsNyArOTExLDcgQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0T3Bl cmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkgKiBjb250YWluIFZhcnMgd2l0 aCB2YXJubz09MCwgd2hpY2ggZXN0aW1hdGVfbnVtX2dyb3VwcygpIHdvdWxkbid0CiAJCSAqIGxp a2UuCiAJCSAqLwotCQlpZiAobGlzdF9sZW5ndGgoY2hlYXBlc3RfcGF0aGxpc3QpID09IDEgJiYK KwkJaWYgKGxpc3RfbGVuZ3RoKGNoZWFwZXN0LnN1YnBhdGhzKSA9PSAxICYmCiAJCQlmaXJzdF9w YXRoLT5wYXJlbnQtPnJlbG9wdGtpbmQgIT0gUkVMT1BUX1VQUEVSX1JFTCkKIAkJewogCQkJZE51 bUdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKQEAgLTEwMTcsNyArMTAxNyw4IEBA IGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAq cm9vdCwKIAogCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290 LAogCQkJCQkJCQkJCQkJCSByZXN1bHRfcmVsLAotCQkJCQkJCQkJCQkJCSBvcmRlcmVkX3BhdGhs aXN0LAorCQkJCQkJCQkJCQkJCSBvcmRlcmVkLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCSBOSUws CiAJCQkJCQkJCQkJCQkJIHVuaW9uX3BhdGhrZXlzLAogCQkJCQkJCQkJCQkJCSBOVUxMKTsKIApA QCAtMTIxNiw2ICsxMjE3LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25fcGF0aHMoU2V0T3BlcmF0aW9u U3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJaWYgKG9wLT5hbGwpCiAJCQl7CiAJCQkJ UGF0aAkgICAqYXBhdGg7CisJCQkJQXBwZW5kUGF0aElucHV0IGFwcGVuZCA9IHswfTsKKworCQkJ CWFwcGVuZC5zdWJwYXRocyA9IGxpc3RfbWFrZTEobHBhdGgpOwogCiAJCQkJLyoKIAkJCQkgKiBF WENFUFQgQUxMOiBJZiB0aGUgcmlnaHQtaGFuZCBpbnB1dCBpcyBkdW1teSB0aGVuIHdlIGNhbgpA QCAtMTIyNCw4ICsxMjI4LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25fcGF0aHMoU2V0T3BlcmF0aW9u U3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAqIGJldHdlZW4gdGhlIHNldCBvcCB0 YXJnZXRsaXN0IGFuZCB0aGUgdGFyZ2V0bGlzdCBvZiB0aGUKIAkJCQkgKiBsZWZ0IGlucHV0LiAg VGhlIEFwcGVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gc2V0cmVmcy5jLgogCQkJCSAqLwotCQkJCWFw YXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIGxpc3Rf bWFrZTEobHBhdGgpLAotCQkJCQkJCQkJCQkJCU5JTCwgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEp OworCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlc3VsdF9y ZWwsCisJCQkJCQkJCQkJCQkJYXBwZW5kLCBOSUwsIE5VTEwsIDAsCisJCQkJCQkJCQkJCQkJZmFs c2UsIC0xKTsKIAogCQkJCWFkZF9wYXRoKHJlc3VsdF9yZWwsIGFwYXRoKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggMmU5YmVjZjMxMTYuLmRhMzA2Y2QzOWViIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTEzMDAsNyArMTMwMCw3IEBA IGNyZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAogQXBwZW5kUGF0aCAqCiBjcmVhdGVfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJICAgUmVsT3B0SW5mbyAqcmVsLAotCQkJCSAgIExpc3QgKnN1YnBhdGhzLCBMaXN0ICpw YXJ0aWFsX3N1YnBhdGhzLAorCQkJCSAgIEFwcGVuZFBhdGhJbnB1dCBpbnB1dCwKIAkJCQkgICBM aXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyLAogCQkJCSAgIGludCBwYXJhbGxl bF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCSAgIGRvdWJsZSByb3dzKQpAQCAt MTMxMCw2ICsxMzEwLDcgQEAgY3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAog CiAJQXNzZXJ0KCFwYXJhbGxlbF9hd2FyZSB8fCBwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKKwlw YXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBpbnB1dC5jaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfQXBwZW5kOwogCXBhdGhub2Rl LT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5wYXRodGFyZ2V0ID0gcmVsLT5y ZWx0YXJnZXQ7CkBAIC0xMzI1LDcgKzEzMjYsNyBAQCBjcmVhdGVfYXBwZW5kX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsCiAJICogb24gdGhlIHNpbXBsZXIgZ2V0X2FwcGVuZHJlbF9wYXJhbXBhdGhp bmZvLiAgVGhlcmUncyBubyBwb2ludCBpbiBkb2luZwogCSAqIHRoZSBtb3JlIGV4cGVuc2l2ZSB0 aGluZyBmb3IgYSBkdW1teSBwYXRoLCBlaXRoZXIuCiAJICovCi0JaWYgKHJlbC0+cmVsb3B0a2lu ZCA9PSBSRUxPUFRfQkFTRVJFTCAmJiByb290ICYmIHN1YnBhdGhzICE9IE5JTCkKKwlpZiAocmVs LT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMICYmIHJvb3QgJiYgaW5wdXQuc3VicGF0aHMg IT0gTklMKQogCQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gZ2V0X2Jhc2VyZWxfcGFyYW1w YXRoaW5mbyhyb290LAogCQkJCQkJCQkJCQkJCQkJICByZWwsCiAJCQkJCQkJCQkJCQkJCQkgIHJl cXVpcmVkX291dGVyKTsKQEAgLTEzNTYsMTEgKzEzNTcsMTEgQEAgY3JlYXRlX2FwcGVuZF9wYXRo KFBsYW5uZXJJbmZvICpyb290LAogCQkgKi8KIAkJQXNzZXJ0KHBhdGhrZXlzID09IE5JTCk7CiAK LQkJbGlzdF9zb3J0KHN1YnBhdGhzLCBhcHBlbmRfdG90YWxfY29zdF9jb21wYXJlKTsKLQkJbGlz dF9zb3J0KHBhcnRpYWxfc3VicGF0aHMsIGFwcGVuZF9zdGFydHVwX2Nvc3RfY29tcGFyZSk7CisJ CWxpc3Rfc29ydChpbnB1dC5zdWJwYXRocywgYXBwZW5kX3RvdGFsX2Nvc3RfY29tcGFyZSk7CisJ CWxpc3Rfc29ydChpbnB1dC5wYXJ0aWFsX3N1YnBhdGhzLCBhcHBlbmRfc3RhcnR1cF9jb3N0X2Nv bXBhcmUpOwogCX0KLQlwYXRobm9kZS0+Zmlyc3RfcGFydGlhbF9wYXRoID0gbGlzdF9sZW5ndGgo c3VicGF0aHMpOwotCXBhdGhub2RlLT5zdWJwYXRocyA9IGxpc3RfY29uY2F0KHN1YnBhdGhzLCBw YXJ0aWFsX3N1YnBhdGhzKTsKKwlwYXRobm9kZS0+Zmlyc3RfcGFydGlhbF9wYXRoID0gbGlzdF9s ZW5ndGgoaW5wdXQuc3VicGF0aHMpOworCXBhdGhub2RlLT5zdWJwYXRocyA9IGxpc3RfY29uY2F0 KGlucHV0LnN1YnBhdGhzLCBpbnB1dC5wYXJ0aWFsX3N1YnBhdGhzKTsKIAogCS8qCiAJICogQXBw bHkgcXVlcnktd2lkZSBMSU1JVCBpZiBrbm93biBhbmQgcGF0aCBpcyBmb3Igc29sZSBiYXNlIHJl bGF0aW9uLgpAQCAtMTQ3Miw2ICsxNDczLDcgQEAgTWVyZ2VBcHBlbmRQYXRoICoKIGNyZWF0ZV9t ZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCSBSZWxPcHRJbmZvICpy ZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlzdCAqY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJCQkgUmVsaWRzIHJlcXVpcmVk X291dGVyKQogewpAQCAtMTQ4Nyw2ICsxNDg5LDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRo KFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNfaXNfZW1wdHkocmVsLT5sYXRl cmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291dGVyKSk7CiAKKwlwYXRobm9k ZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAlw YXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7CiAJcGF0aG5vZGUtPnBhdGgu cGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSByZWwtPnJlbHRhcmdl dDsKQEAgLTM5MjYsMTEgKzM5MjksMTIgQEAgcmVwYXJhbWV0ZXJpemVfcGF0aChQbGFubmVySW5m byAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJY2FzZSBUX0FwcGVuZDoKIAkJCXsKIAkJCQlBcHBlbmRQ YXRoICphcGF0aCA9IChBcHBlbmRQYXRoICopIHBhdGg7Ci0JCQkJTGlzdAkgICAqY2hpbGRwYXRo cyA9IE5JTDsKLQkJCQlMaXN0CSAgICpwYXJ0aWFscGF0aHMgPSBOSUw7CisJCQkJQXBwZW5kUGF0 aElucHV0IG5ld19hcHBlbmQgPSB7MH07CiAJCQkJaW50CQkJaTsKIAkJCQlMaXN0Q2VsbCAgICps YzsKIAorCQkJCW5ld19hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBhcGF0aC0+Y2hp bGRfYXBwZW5kX3JlbGlkX3NldHM7CisKIAkJCQkvKiBSZXBhcmFtZXRlcml6ZSB0aGUgY2hpbGRy ZW4gKi8KIAkJCQlpID0gMDsKIAkJCQlmb3JlYWNoKGxjLCBhcGF0aC0+c3VicGF0aHMpCkBAIC0z OTQ0LDEzICszOTQ4LDEzIEBAIHJlcGFyYW1ldGVyaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3Qs IFBhdGggKnBhdGgsCiAJCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQkJLyogV2UgaGF2ZSB0byByZS1z cGxpdCB0aGUgcmVndWxhciBhbmQgcGFydGlhbCBwYXRocyAqLwogCQkJCQlpZiAoaSA8IGFwYXRo LT5maXJzdF9wYXJ0aWFsX3BhdGgpCi0JCQkJCQljaGlsZHBhdGhzID0gbGFwcGVuZChjaGlsZHBh dGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnN1YnBhdGhzID0gbGFwcGVuZChuZXdfYXBw ZW5kLnN1YnBhdGhzLCBzcGF0aCk7CiAJCQkJCWVsc2UKLQkJCQkJCXBhcnRpYWxwYXRocyA9IGxh cHBlbmQocGFydGlhbHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnBhcnRpYWxfc3Vi cGF0aHMgPSBsYXBwZW5kKG5ld19hcHBlbmQucGFydGlhbF9zdWJwYXRocywgc3BhdGgpOwogCQkJ CQlpKys7CiAJCQkJfQogCQkJCXJldHVybiAoUGF0aCAqKQotCQkJCQljcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBwYXJ0aWFscGF0aHMsCisJCQkJCWNyZWF0ZV9hcHBl bmRfcGF0aChyb290LCByZWwsIG5ld19hcHBlbmQsCiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5w YXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxl bF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCmluZGV4IDUyYmU1MWY1Yjg4Li5hNWY5NTM1ODg2NyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKQEAgLTIxNzIsNiArMjE3MiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBDdXN0b21QYXRo CiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJwYXRocycgY29udGFpbnMgbm9uLXBhcnRpYWwg c3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRpYWwgc3VicGF0aHMuCiAgKgorICogV2hlbmV2 ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgpIGFsbG93cyB1cyB0byBjb25zb2xpZGF0ZSBt dWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBwYXRocyBkb3duIHRvIG9uZSwgd2Ugc3RvcmUg dGhlIFJUSSBzZXRzIGZvciB0aGUgb21pdHRlZAorICogcGF0aHMgaW4gY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMuIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgcGxhbm5pbmcgb3IKKyAqIGV4ZWN1 dGlvbjsgd2UgZG8gaXQgZm9yIHRoZSBiZW5lZml0IG9mIGNvZGUgdGhhdCB3YW50cyB0byBpbnNw ZWN0IHRoZQorICogZmluYWwgcGxhbiBhbmQgdW5kZXJzdGFuZCBob3cgaXQgY2FtZSB0byBiZS4K KyAqCiAgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBmb3IgInN1YnBhdGhzIiB0byBjb250YWluIG9u bHkgb25lLCBvciBldmVuIG5vLAogICogZWxlbWVudHMuICBUaGVzZSBjYXNlcyBhcmUgb3B0aW1p emVkIGR1cmluZyBjcmVhdGVfYXBwZW5kX3BsYW4uCiAgKiBJbiBwYXJ0aWN1bGFyLCBhbiBBcHBl bmRQYXRoIHdpdGggbm8gc3VicGF0aHMgaXMgYSAiZHVtbXkiIHBhdGggdGhhdApAQCAtMjE4Nyw2 ICsyMTkzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUGF0aAogCS8qIEluZGV4IG9mIGZpcnN0 IHBhcnRpYWwgcGF0aCBpbiBzdWJwYXRoczsgbGlzdF9sZW5ndGgoc3VicGF0aHMpIGlmIG5vbmUg Ki8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BhdGg7CiAJQ2FyZGluYWxpdHkgbGltaXRfdHVwbGVz OwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBsZXMsIG9yIC0xICovCisJTGlzdAkgICAqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IEFwcGVuZFBhdGg7CiAKICNkZWZpbmUgSVNfRFVNTVlf QVBQRU5EKHApIFwKQEAgLTIyMDMsMTIgKzIyMTAsMTUgQEAgZXh0ZXJuIGJvb2wgaXNfZHVtbXlf cmVsKFJlbE9wdEluZm8gKnJlbCk7CiAvKgogICogTWVyZ2VBcHBlbmRQYXRoIHJlcHJlc2VudHMg YSBNZXJnZUFwcGVuZCBwbGFuLCBpZSwgdGhlIG1lcmdpbmcgb2Ygc29ydGVkCiAgKiByZXN1bHRz IGZyb20gc2V2ZXJhbCBtZW1iZXIgcGxhbnMgdG8gcHJvZHVjZSBzaW1pbGFybHktc29ydGVkIG91 dHB1dC4KKyAqCisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyBoYXMgdGhlIHNhbWUgbWVhbmlu ZyBoZXJlIGFzIGZvciBBcHBlbmRQYXRoLgogICovCiB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVu ZFBhdGgKIHsKIAlQYXRoCQlwYXRoOwogCUxpc3QJICAgKnN1YnBhdGhzOwkJLyogbGlzdCBvZiBj b21wb25lbnQgUGF0aHMgKi8KIAlDYXJkaW5hbGl0eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGlt aXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKIH0gTWVyZ2VBcHBlbmRQYXRoOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRl eCAwYWQwZmY0MDRjOS4uNDg1YmVjNWFhYmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0zOTQs OSArMzk0LDE2IEBAIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87CQkvKiBmb3J3YXJkIHJlZmVy ZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIHR5cGVkZWYgc3RydWN0IEFwcGVuZAogewogCVBsYW4J CXBsYW47CisKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2RlICov CiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOworCisJLyogc2V0cyBvZiBSVElzIG9mIGFwcGVuZHJl bHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAgICphcHBlbmRwbGFu czsKKwogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCiAJaW50CQkJbmFzeW5jcGxhbnM7 CiAKQEAgLTQyNiw2ICs0MzMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIAkvKiBS VElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAq YXBwcmVsaWRzOwogCisJLyogc2V0cyBvZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVk IGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisK KwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAgICptZXJnZXBsYW5zOwogCiAJLyogdGhlc2Ug ZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8gaW4gc3RydWN0IFNvcnQ6ICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDliMmM0YjNlN2VmLi43OWRhZDA1ZWEwNiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTY5LDE0ICs2OSwyMiBAQCBleHRlcm4gVGlk UmFuZ2VQYXRoICpjcmVhdGVfdGlkcmFuZ2VzY2FuX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJ CQkJCQkJCQkJCSAgTGlzdCAqdGlkcmFuZ2VxdWFscywKIAkJCQkJCQkJCQkJICBSZWxpZHMgcmVx dWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCSAgaW50IHBhcmFsbGVsX3dvcmtlcnMpOworCit0eXBl ZGVmIHN0cnVjdCBBcHBlbmRQYXRoSW5wdXQKK3sKKwlMaXN0CSAgICpzdWJwYXRoczsKKwlMaXN0 CSAgICpwYXJ0aWFsX3N1YnBhdGhzOworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz OworfSBBcHBlbmRQYXRoSW5wdXQ7CiBleHRlcm4gQXBwZW5kUGF0aCAqY3JlYXRlX2FwcGVuZF9w YXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCi0JCQkJCQkJCQkgIExpc3Qg KnN1YnBhdGhzLCBMaXN0ICpwYXJ0aWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBBcHBlbmRQYXRo SW5wdXQgaW5wdXQsCiAJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRf b3V0ZXIsCiAJCQkJCQkJCQkgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3 YXJlLAogCQkJCQkJCQkJICBkb3VibGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBlbmRQYXRoICpj cmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkg UmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJ CQkJIExpc3QgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJIExpc3QgKnBh dGhrZXlzLAogCQkJCQkJCQkJCQkJIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBleHRlcm4gR3Jv dXBSZXN1bHRQYXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8gKnJvb3Qs CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDViMDBiMWRhM2Y5Li4yODZkOTRiMDc3OSAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyNSw2ICsxMjUsNyBAQCBBbmxJbmRleERh dGEKIEFueUFycmF5VHlwZQogQXBwZW5kCiBBcHBlbmRQYXRoCitBcHBlbmRQYXRoSW5wdXQKIEFw cGVuZFJlbEluZm8KIEFwcGVuZFN0YXRlCiBBcHBseUVycm9yQ2FsbGJhY2tBcmcKLS0gCjIuNDcu MQoK --000000000000b68c0b0648227f18--