Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jDcKS-00030T-Jv for pgsql-hackers@arkaria.postgresql.org; Sun, 15 Mar 2020 23:05:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jDcKQ-0003Lv-Ea for pgsql-hackers@arkaria.postgresql.org; Sun, 15 Mar 2020 23:05:54 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jDcKP-0003Kj-GQ for pgsql-hackers@lists.postgresql.org; Sun, 15 Mar 2020 23:05:54 +0000 Received: from mail-pj1-x1043.google.com ([2607:f8b0:4864:20::1043]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jDcKG-00023G-35 for pgsql-hackers@postgresql.org; Sun, 15 Mar 2020 23:05:52 +0000 Received: by mail-pj1-x1043.google.com with SMTP id o23so1434272pjp.0 for ; Sun, 15 Mar 2020 16:05:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=vrFgI4J0qqePZCpEyihxZ3NYyrdzd/t09e/+FXs25cQ=; b=eVBjnj6RlXhMQNzU1ImCVIQx88uS7VJxQUgTw4lif6yQIpsgfa2xoOEPPJ+qT9Wk6U YrkretRq9gZi7gMoencPj/+o4eYhMWgJlc0tJJhLfWrESB7mp+qg1UzMCNNg1vfP5GWg /yOb+Vs91SoQdQDkKZ61Jcp8GzGlR+Pe2ewcxiEVbv2ebMouCmvDuxIKc9lEkEeVAez0 yXHbGrxlEyegGmibwKzcM2vYUGyqdbb95oORk/CPWYGv28L/djKf6eguEiQeTYCFGJgu KLhFq4m1RpOAcga5MtC1G3yOL7cl4n+ilUqW2b3vwg0fQ/8SEq9vBcXalBwy86ygGEYe h5Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=vrFgI4J0qqePZCpEyihxZ3NYyrdzd/t09e/+FXs25cQ=; b=DCwoRH2hrk6kBkqZzmrpXk32CvGZpfEORSLd2TtK2O2sdxg1/g74YNZcXtPo7ZtlMJ 6vHw1TX/NjHmouoxtZ2TrG4+G94mNHKSzTJAOTibKrh/fbrHoWixTE2lLvYo+5wi8JVj 3M5bC8P6Gp0tJ29L1VXRdYRAYY6+jVepDlkGpSm07Tn4g6Qi7uO5CN8Gt+xolY9Vz3cE gHge39XDbFDdqF19gRIT0iOI2kAl6Vn+gbxhxttL9XpzvANZzucGzUl2cRzgrOboj6Hi XUwarAWPkBqpoemgeWQC15OR/jeH6SYn0IkltAtIpPDv2vfCN+st7e5/dl9xbFz8IXN5 ZH/w== X-Gm-Message-State: ANhLgQ2QDNiHecYWXiXNGddmrew9R9tcRZ7hPY5+k+/DCp821z7w58+3 v2jwlu2reBuyA5sWH/lp0U1EmQ== X-Google-Smtp-Source: ADFU+vvRvQ9fw9Lx62EWxXxg0DH3rRAqbz+rtlo8FOPkQPMaov2tcyFXAbpT7VWBQVG31EF1TOC0hw== X-Received: by 2002:a17:90a:bf83:: with SMTP id d3mr22632472pjs.77.1584313542426; Sun, 15 Mar 2020 16:05:42 -0700 (PDT) Received: from jdavis.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id j21sm17466183pji.13.2020.03.15.16.05.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 15 Mar 2020 16:05:40 -0700 (PDT) Message-ID: Subject: Re: Memory-Bounded Hash Aggregation From: Jeff Davis To: Justin Pryzby Cc: Andres Freund , Tomas Vondra , Melanie Plageman , Heikki Linnakangas , Taylor Vesely , Adam Lee , Melanie Plageman , pgsql-hackers@postgresql.org Date: Sun, 15 Mar 2020 16:05:37 -0700 In-Reply-To: <20200312210146.GG29065@telsasoft.com> References: <20200218185749.srk733n4z57lzxf2@development> <7612ea4d636b6341d0606f4e852d584798e04901.camel@j-davis.com> <20200219191636.gvdywx32kwbix6kd@development> <20200221202212.ssb2qpmdgrnx52sj@alap3.anarazel.de> <9759ab2d0c2c28a175e11efe1788d37dc7e1b768.camel@j-davis.com> <20200222180020.ej5gvfcaf2semgji@alap3.anarazel.de> <5c371df7cee903e8cd4c685f90c6c72086d3a2dc.camel@j-davis.com> <20200224232928.45bcjmdxgnobijgi@alap3.anarazel.de> <6e7c269b9a84ff75fefcad8ab2d4758f03581e98.camel@j-davis.com> <20200312210146.GG29065@telsasoft.com> Content-Type: multipart/mixed; boundary="=-PJdh5WWrYPEO8+eUfG4k" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-PJdh5WWrYPEO8+eUfG4k Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Thu, 2020-03-12 at 16:01 -0500, Justin Pryzby wrote: > I don't understand what's meant by "the chosen plan". > Should it say, "at execution ..." instead of "execution time" ? I removed that wording; hopefully it's more clear without it? > Either remove "plan types" for consistency with > enable_groupingsets_hash_disk, > Or add it there. Maybe it should say "when the memory usage would > OTHERWISE BE > expected to exceed.." I added "plan types". I don't think "otherwise be..." would quite work there. "Otherwise" sounds to me like it's referring to another plan type (e.g. Sort+GroupAgg), and that doesn't fit. It's probably best to leave that level of detail out of the docs. I think the main use case for enable_hashagg_disk is for users who experience some plan changes and want the old behavior which favors Sort when there are a lot of groups. > +show_hashagg_info(AggState *aggstate, ExplainState *es) > +{ > + Agg *agg = (Agg *)aggstate->ss.ps.plan; > + long memPeakKb = (aggstate->hash_mem_peak + 1023) / 1024; > > I see this partially duplicates my patch [0] to show memory stats for ... > You added hash_mem_peak and hash_batches_used to struct AggState. > In my 0001 patch, I added instrumentation to struct TupleHashTable I replied in that thread and I'm not sure that tracking the memory in the TupleHashTable is the right approach. The group keys and the transition state data can't be estimated easily that way. Perhaps we can do that if the THT owns the memory contexts (and can call MemoryContextMemAllocated()), rather than using passed-in ones, but that might require more discussion. (I'm open to that idea, by the way.) Also, my patch also considers the buffer space, so would that be a third memory number? For now, I think I'll leave the way I report it in a simpler form and we can change it later as we sort out these details. That leaves mine specific to HashAgg, but we can always refactor it later. I did change my code to put the metacontext in a child context of its own so that I could call MemoryContextMemAllocated() on it to include it in the memory total, and that will make reporting it separately easier when we want to do so. > + if (from_tape) > + partition_mem += HASHAGG_READ_BUFFER_SIZE; > + partition_mem = npartitions * HASHAGG_WRITE_BUFFER_SIZE; > > => That looks wrong ; should say += ? Good catch! Fixed. Regards, Jeff Davis --=-PJdh5WWrYPEO8+eUfG4k Content-Disposition: attachment; filename="hashagg-20200315.patch" Content-Type: text/x-patch; name="hashagg-20200315.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAppbmRleCAzY2FjMzQwZjMyMy4uOWY3Zjc3MzY2NjUgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTQ0 NjIsNiArNDQ2MiwyMyBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9z eW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC9saXN0aXRl bT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVu YWJsZS1ncm91cGluZ3NldHMtaGFzaC1kaXNrIiB4cmVmbGFiZWw9ImVuYWJsZV9ncm91cGluZ3Nl dHNfaGFzaF9kaXNrIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9ncm91cGluZ3NldHNf aGFzaF9kaXNrPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0 ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmVuYWJsZV9ncm91cGluZ3NldHNfaGFzaF9k aXNrPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwv aW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9m IGhhc2hlZCBhZ2dyZWdhdGlvbiBwbGFuCisgICAgICAgIHR5cGVzIGZvciBncm91cGluZyBzZXRz IHdoZW4gdGhlIHRvdGFsIHNpemUgb2YgdGhlIGhhc2ggdGFibGVzIGlzCisgICAgICAgIGV4cGVj dGVkIHRvIGV4Y2VlZCA8dmFybmFtZT53b3JrX21lbTwvdmFybmFtZT4uICBTZWUgPHhyZWYKKyAg ICAgICAgbGlua2VuZD0icXVlcmllcy1ncm91cGluZy1zZXRzIi8+LiAgVGhlIGRlZmF1bHQgaXMK KyAgICAgICAgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlk PSJndWMtZW5hYmxlLWhhc2hhZ2ciIHhyZWZsYWJlbD0iZW5hYmxlX2hhc2hhZ2ciPgogICAgICAg PHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2hhc2hhZ2c8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90 eXBlPikKICAgICAgIDxpbmRleHRlcm0+CkBAIC00NDc2LDYgKzQ0OTMsMjEgQEAgQU5ZIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxh Y2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5Pgog CisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaGFzaGFnZy1kaXNrIiB4cmVmbGFi ZWw9ImVuYWJsZV9oYXNoYWdnX2Rpc2siPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2hh c2hhZ2dfZGlzazwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4 dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5lbmFibGVfaGFzaGFnZ19kaXNrPC92YXJu YW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJt PgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAg ICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9mIGhhc2hlZCBh Z2dyZWdhdGlvbiBwbGFuCisgICAgICAgIHR5cGVzIHdoZW4gdGhlIG1lbW9yeSB1c2FnZSBpcyBl eHBlY3RlZCB0byBleGNlZWQKKyAgICAgICAgPHZhcm5hbWU+d29ya19tZW08L3Zhcm5hbWU+LiAg VGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAg ICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9Imd1Yy1lbmFibGUtaGFzaGpvaW4iIHhyZWZsYWJlbD0iZW5hYmxlX2hhc2hqb2luIj4K ICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9oYXNoam9pbjwvdmFybmFtZT4gKDx0eXBlPmJv b2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRl eCBkOTAxZGM0YTUwZS4uNTgxNDFkODM5M2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEw NCw2ICsxMDQsNyBAQCBzdGF0aWMgdm9pZCBzaG93X3RhYmxlc2FtcGxlKFRhYmxlU2FtcGxlQ2xh dXNlICp0c2MsIFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCSBMaXN0ICphbmNlc3RvcnMs IEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19zb3J0X2luZm8oU29ydFN0YXRl ICpzb3J0c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNoX2lu Zm8oSGFzaFN0YXRlICpoYXNoc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQg c2hvd19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmhhc2hzdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7 CiBzdGF0aWMgdm9pZCBzaG93X3RpZGJpdG1hcF9pbmZvKEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBs YW5zdGF0ZSwKIAkJCQkJCQkJRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2lu c3RydW1lbnRhdGlvbl9jb3VudChjb25zdCBjaGFyICpxbGFiZWwsIGludCB3aGljaCwKQEAgLTE4 ODIsNiArMTg4Myw3IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICph bmNlc3RvcnMsCiAJCWNhc2UgVF9BZ2c6CiAJCQlzaG93X2FnZ19rZXlzKGNhc3ROb2RlKEFnZ1N0 YXRlLCBwbGFuc3RhdGUpLCBhbmNlc3RvcnMsIGVzKTsKIAkJCXNob3dfdXBwZXJfcXVhbChwbGFu LT5xdWFsLCAiRmlsdGVyIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKKwkJCXNob3dfaGFz aGFnZ19pbmZvKChBZ2dTdGF0ZSAqKSBwbGFuc3RhdGUsIGVzKTsKIAkJCWlmIChwbGFuLT5xdWFs KQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVy IiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKQEAgLTI3NjksNiArMjc3MSw0MSBA QCBzaG93X2hhc2hfaW5mbyhIYXNoU3RhdGUgKmhhc2hzdGF0ZSwgRXhwbGFpblN0YXRlICplcykK IAl9CiB9CiAKKy8qCisgKiBTaG93IGluZm9ybWF0aW9uIG9uIGhhc2ggYWdncmVnYXRlIG1lbW9y eSB1c2FnZSBhbmQgYmF0Y2hlcy4KKyAqLworc3RhdGljIHZvaWQKK3Nob3dfaGFzaGFnZ19pbmZv KEFnZ1N0YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRlICplcykKK3sKKwlBZ2cJCSphZ2cJICAg PSAoQWdnICopYWdnc3RhdGUtPnNzLnBzLnBsYW47CisJbG9uZwkgbWVtUGVha0tiID0gKGFnZ3N0 YXRlLT5oYXNoX21lbV9wZWFrICsgMTAyMykgLyAxMDI0OworCisJQXNzZXJ0KElzQShhZ2dzdGF0 ZSwgQWdnU3RhdGUpKTsKKworCWlmIChhZ2ctPmFnZ3N0cmF0ZWd5ICE9IEFHR19IQVNIRUQgJiYK KwkJYWdnLT5hZ2dzdHJhdGVneSAhPSBBR0dfTUlYRUQpCisJCXJldHVybjsKKworCWlmIChlcy0+ Y29zdHMgJiYgYWdnc3RhdGUtPmhhc2hfcGxhbm5lZF9wYXJ0aXRpb25zID4gMCkKKwl7CisJCUV4 cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlBsYW5uZWQgUGFydGl0aW9ucyIsIE5VTEwsCisJCQkJCQkJ ICAgYWdnc3RhdGUtPmhhc2hfcGxhbm5lZF9wYXJ0aXRpb25zLCBlcyk7CisJfQorCisJaWYgKCFl cy0+YW5hbHl6ZSkKKwkJcmV0dXJuOworCisJLyogRVhQTEFJTiBBTkFMWVpFICovCisJRXhwbGFp blByb3BlcnR5SW50ZWdlcigiUGVhayBNZW1vcnkgVXNhZ2UiLCAia0IiLCBtZW1QZWFrS2IsIGVz KTsKKwlpZiAoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlc191c2VkID4gMCkKKwl7CisJCUV4cGxhaW5Q cm9wZXJ0eUludGVnZXIoIkRpc2sgVXNhZ2UiLCAia0IiLAorCQkJCQkJCSAgIGFnZ3N0YXRlLT5o YXNoX2Rpc2tfdXNlZCwgZXMpOworCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJIYXNoQWdnIEJh dGNoZXMiLCBOVUxMLAorCQkJCQkJCSAgIGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXNfdXNlZCwgZXMp OworCX0KK30KKwogLyoKICAqIElmIGl0J3MgRVhQTEFJTiBBTkFMWVpFLCBzaG93IGV4YWN0L2xv c3N5IHBhZ2VzIGZvciBhIEJpdG1hcEhlYXBTY2FuIG5vZGUKICAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFn Zy5jCmluZGV4IDdhZWJiMjQ3ZDg4Li4yZDhlZmI3NzMxYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUFnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cu YwpAQCAtMTk0LDYgKzE5NCwyOSBAQAogICoJICB0cmFuc2l0aW9uIHZhbHVlcy4gIGhhc2hjb250 ZXh0IGlzIHRoZSBzaW5nbGUgY29udGV4dCBjcmVhdGVkIHRvIHN1cHBvcnQKICAqCSAgYWxsIGhh c2ggdGFibGVzLgogICoKKyAqCSAgU3BpbGxpbmcgVG8gRGlzaworICoKKyAqCSAgV2hlbiBwZXJm b3JtaW5nIGhhc2ggYWdncmVnYXRpb24sIGlmIHRoZSBoYXNoIHRhYmxlIG1lbW9yeSBleGNlZWRz IHRoZQorICoJICBsaW1pdCAoc2VlIGhhc2hfYWdnX2NoZWNrX2xpbWl0cygpKSwgd2UgZW50ZXIg InNwaWxsIG1vZGUiLiBJbiBzcGlsbAorICoJICBtb2RlLCB3ZSBhZHZhbmNlIHRoZSB0cmFuc2l0 aW9uIHN0YXRlcyBvbmx5IGZvciBncm91cHMgYWxyZWFkeSBpbiB0aGUKKyAqCSAgaGFzaCB0YWJs ZS4gRm9yIHR1cGxlcyB0aGF0IHdvdWxkIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGhhc2ggdGFibGUK KyAqCSAgZW50cmllcyAoYW5kIGluaXRpYWxpemUgbmV3IHRyYW5zaXRpb24gc3RhdGVzKSwgd2Ug aW5zdGVhZCBzcGlsbCB0aGVtIHRvCisgKgkgIGRpc2sgdG8gYmUgcHJvY2Vzc2VkIGxhdGVyLiBU aGUgdHVwbGVzIGFyZSBzcGlsbGVkIGluIGEgcGFydGl0aW9uZWQKKyAqCSAgbWFubmVyLCBzbyB0 aGF0IHN1YnNlcXVlbnQgYmF0Y2hlcyBhcmUgc21hbGxlciBhbmQgbGVzcyBsaWtlbHkgdG8gZXhj ZWVkCisgKgkgIHdvcmtfbWVtIChpZiBhIGJhdGNoIGRvZXMgZXhjZWVkIHdvcmtfbWVtLCBpdCBt dXN0IGJlIHNwaWxsZWQKKyAqCSAgcmVjdXJzaXZlbHkpLgorICoKKyAqCSAgU3BpbGxlZCBkYXRh IGlzIHdyaXR0ZW4gdG8gbG9naWNhbCB0YXBlcy4gVGhlc2UgcHJvdmlkZSBiZXR0ZXIgY29udHJv bAorICoJICBvdmVyIG1lbW9yeSB1c2FnZSwgZGlzayBzcGFjZSwgYW5kIHRoZSBudW1iZXIgb2Yg ZmlsZXMgdGhhbiBpZiB3ZSB3ZXJlCisgKgkgIHRvIHVzZSBhIEJ1ZkZpbGUgZm9yIGVhY2ggc3Bp bGwuCisgKgorICoJICBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdHJhbnNpdGlvbiBzdGF0 ZXMgdG8gc3RhcnQgc21hbGwgYnV0IHRoZW4KKyAqCSAgZ3JvdyB2ZXJ5IGxhcmdlOyBmb3IgaW5z dGFuY2UgaW4gdGhlIGNhc2Ugb2YgQVJSQVlfQUdHLiBJbiBzdWNoIGNhc2VzLAorICoJICBpdCdz IHN0aWxsIHBvc3NpYmxlIHRvIHNpZ25pZmljYW50bHkgZXhjZWVkIHdvcmtfbWVtLiBXZSB0cnkg dG8gYXZvaWQKKyAqCSAgdGhpcyBzaXR1YXRpb24gYnkgZXN0aW1hdGluZyB3aGF0IHdpbGwgZml0 IGluIHRoZSBhdmFpbGFibGUgbWVtb3J5LCBhbmQKKyAqCSAgaW1wb3NpbmcgYSBsaW1pdCBvbiB0 aGUgbnVtYmVyIG9mIGdyb3VwcyBzZXBhcmF0ZWx5IGZyb20gdGhlIGFtb3VudCBvZgorICoJICBt ZW1vcnkgY29uc3VtZWQuCisgKgogICogICAgVHJhbnNpdGlvbiAvIENvbWJpbmUgZnVuY3Rpb24g aW52b2NhdGlvbjoKICAqCiAgKiAgICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucyB0cmFuc2l0aW9u IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGNvbWJpbmUKQEAgLTIzMywxMiArMjU2LDEwMSBAQAogI2lu Y2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9keW5haGFzaC5oIgogI2luY2x1ZGUg InV0aWxzL2V4cGFuZGVkZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9sb2d0YXBlLmgiCiAjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNp bmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R1cGxlc29ydC5oIgog CisvKgorICogQ29udHJvbCBob3cgbWFueSBwYXJ0aXRpb25zIGFyZSBjcmVhdGVkIHdoZW4gc3Bp bGxpbmcgSGFzaEFnZyB0bworICogZGlzay4KKyAqCisgKiBIQVNIQUdHX1BBUlRJVElPTl9GQUNU T1IgaXMgbXVsdGlwbGllZCBieSB0aGUgZXN0aW1hdGVkIG51bWJlciBvZgorICogcGFydGl0aW9u cyBuZWVkZWQgc3VjaCB0aGF0IGVhY2ggcGFydGl0aW9uIHdpbGwgZml0IGluIG1lbW9yeS4gVGhl IGZhY3RvcgorICogaXMgc2V0IGhpZ2hlciB0aGFuIG9uZSBiZWNhdXNlIHRoZXJlJ3Mgbm90IGEg aGlnaCBjb3N0IHRvIGhhdmluZyBhIGZldyB0b28KKyAqIG1hbnkgcGFydGl0aW9ucywgYW5kIGl0 IG1ha2VzIGl0IGxlc3MgbGlrZWx5IHRoYXQgYSBwYXJ0aXRpb24gd2lsbCBuZWVkIHRvCisgKiBi ZSBzcGlsbGVkIHJlY3Vyc2l2ZWx5LiBBbm90aGVyIGJlbmVmaXQgb2YgaGF2aW5nIG1vcmUsIHNt YWxsZXIgcGFydGl0aW9ucworICogaXMgdGhhdCBzbWFsbCBoYXNoIHRhYmxlcyBtYXkgcGVyZm9y bSBiZXR0ZXIgdGhhbiBsYXJnZSBvbmVzIGR1ZSB0byBtZW1vcnkKKyAqIGNhY2hpbmcgZWZmZWN0 cy4KKyAqCisgKiBXZSBhbHNvIHNwZWNpZnkgYSBtaW4gYW5kIG1heCBudW1iZXIgb2YgcGFydGl0 aW9ucyBwZXIgc3BpbGwuIFRvbyBmZXcgbWlnaHQKKyAqIG1lYW4gYSBsb3Qgb2Ygd2FzdGVkIEkv TyBmcm9tIHJlcGVhdGVkIHNwaWxsaW5nIG9mIHRoZSBzYW1lIHR1cGxlcy4gVG9vCisgKiBtYW55 IHdpbGwgcmVzdWx0IGluIGxvdHMgb2YgbWVtb3J5IHdhc3RlZCBidWZmZXJpbmcgdGhlIHNwaWxs IGZpbGVzICh3aGljaAorICogY291bGQgaW5zdGVhZCBiZSBzcGVudCBvbiBhIGxhcmdlciBoYXNo IHRhYmxlKS4KKyAqCisgKiBGb3IgcmVhZGluZyBmcm9tIHRhcGVzLCB0aGUgYnVmZmVyIHNpemUg bXVzdCBiZSBhIG11bHRpcGxlIG9mCisgKiBCTENLU1ouIExhcmdlciB2YWx1ZXMgaGVscCB3aGVu IHJlYWRpbmcgZnJvbSBtdWx0aXBsZSB0YXBlcyBjb25jdXJyZW50bHksCisgKiBidXQgdGhhdCBk b2Vzbid0IGhhcHBlbiBpbiBIYXNoQWdnLCBzbyB3ZSBzaW1wbHkgdXNlIEJMQ0tTWi4gV3JpdGlu ZyB0byBhCisgKiB0YXBlIGFsd2F5cyB1c2VzIGEgYnVmZmVyIG9mIHNpemUgQkxDS1NaLgorICov CisjZGVmaW5lIEhBU0hBR0dfUEFSVElUSU9OX0ZBQ1RPUiAxLjUwCisjZGVmaW5lIEhBU0hBR0df TUlOX1BBUlRJVElPTlMgNAorI2RlZmluZSBIQVNIQUdHX01BWF9QQVJUSVRJT05TIDI1NgorI2Rl ZmluZSBIQVNIQUdHX01JTl9CVUNLRVRTIDI1NgorI2RlZmluZSBIQVNIQUdHX1JFQURfQlVGRkVS X1NJWkUgQkxDS1NaCisjZGVmaW5lIEhBU0hBR0dfV1JJVEVfQlVGRkVSX1NJWkUgQkxDS1NaCisK Ky8qCisgKiBUcmFjayBhbGwgdGFwZXMgbmVlZGVkIGZvciBhIEhhc2hBZ2cgdGhhdCBzcGlsbHMu IFdlIGRvbid0IGtub3cgdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiB0YXBlcyBuZWVkZWQgYXQg dGhlIHN0YXJ0IG9mIHRoZSBhbGdvcml0aG0gKGJlY2F1c2UgaXQgY2FuCisgKiByZWN1cnNlKSwg c28gb25lIHRhcGUgc2V0IGlzIGFsbG9jYXRlZCBhbmQgZXh0ZW5kZWQgYXMgbmVlZGVkIGZvciBu ZXcKKyAqIHRhcGVzLiBXaGVuIGEgcGFydGljdWxhciB0YXBlIGlzIGFscmVhZHkgcmVhZCwgcmV3 aW5kIGl0IGZvciB3cml0ZSBtb2RlIGFuZAorICogcHV0IGl0IGluIHRoZSBmcmVlIGxpc3QuCisg KgorICogVGFwZXMnIGJ1ZmZlcnMgY2FuIHRha2UgdXAgc3Vic3RhbnRpYWwgbWVtb3J5IHdoZW4g bWFueSB0YXBlcyBhcmUgb3BlbiBhdAorICogb25jZS4gV2Ugb25seSBuZWVkIG9uZSB0YXBlIG9w ZW4gYXQgYSB0aW1lIGluIHJlYWQgbW9kZSAodXNpbmcgYSBidWZmZXIKKyAqIHRoYXQncyBhIG11 bHRpcGxlIG9mIEJMQ0tTWik7IGJ1dCB3ZSBuZWVkIG9uZSB0YXBlIG9wZW4gaW4gd3JpdGUgbW9k ZSAoZWFjaAorICogcmVxdWlyaW5nIGEgYnVmZmVyIG9mIHNpemUgQkxDS1NaKSBmb3IgZWFjaCBw YXJ0aXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IEhhc2hUYXBlSW5mbworeworCUxvZ2ljYWxU YXBlU2V0CSp0YXBlc2V0OworCWludAkJCQkgbnRhcGVzOworCWludAkJCQkqZnJlZXRhcGVzOwor CWludAkJCQkgbmZyZWV0YXBlczsKKwlpbnQJCQkJIGZyZWV0YXBlc19hbGxvYzsKK30gSGFzaFRh cGVJbmZvOworCisvKgorICogUmVwcmVzZW50cyBwYXJ0aXRpb25lZCBzcGlsbCBkYXRhIGZvciBh IHNpbmdsZSBoYXNodGFibGUuIENvbnRhaW5zIHRoZQorICogbmVjZXNzYXJ5IGluZm9ybWF0aW9u IHRvIHJvdXRlIHR1cGxlcyB0byB0aGUgY29ycmVjdCBwYXJ0aXRpb24sIGFuZCB0bworICogdHJh bnNmb3JtIHRoZSBzcGlsbGVkIGRhdGEgaW50byBuZXcgYmF0Y2hlcy4KKyAqCisgKiBUaGUgaGln aCBiaXRzIGFyZSB1c2VkIGZvciBwYXJ0aXRpb24gc2VsZWN0aW9uICh3aGVuIHJlY3Vyc2luZywg d2UgaWdub3JlCisgKiB0aGUgYml0cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHVzZWQgZm9yIHBh cnRpdGlvbiBzZWxlY3Rpb24gYXQgYW4gZWFybGllcgorICogbGV2ZWwpLgorICovCit0eXBlZGVm IHN0cnVjdCBIYXNoQWdnU3BpbGwKK3sKKwlMb2dpY2FsVGFwZVNldCAqdGFwZXNldDsJLyogYm9y cm93ZWQgcmVmZXJlbmNlIHRvIHRhcGUgc2V0ICovCisJaW50CQkgbnBhcnRpdGlvbnM7CQkvKiBu dW1iZXIgb2YgcGFydGl0aW9ucyAqLworCWludAkJKnBhcnRpdGlvbnM7CQkvKiBzcGlsbCBwYXJ0 aXRpb24gdGFwZSBudW1iZXJzICovCisJaW50NjQgICAqbnR1cGxlczsJCQkvKiBudW1iZXIgb2Yg dHVwbGVzIGluIGVhY2ggcGFydGl0aW9uICovCisJdWludDMyICAgbWFzazsJCQkJLyogbWFzayB0 byBmaW5kIHBhcnRpdGlvbiBmcm9tIGhhc2ggdmFsdWUgKi8KKwlpbnQgICAgICBzaGlmdDsJCQkJ LyogYWZ0ZXIgbWFza2luZywgc2hpZnQgYnkgdGhpcyBhbW91bnQgKi8KK30gSGFzaEFnZ1NwaWxs OworCisvKgorICogUmVwcmVzZW50cyB3b3JrIHRvIGJlIGRvbmUgZm9yIG9uZSBwYXNzIG9mIGhh c2ggYWdncmVnYXRpb24gKHdpdGggb25seSBvbmUKKyAqIGdyb3VwaW5nIHNldCkuCisgKgorICog QWxzbyB0cmFja3MgdGhlIGJpdHMgb2YgdGhlIGhhc2ggYWxyZWFkeSB1c2VkIGZvciBwYXJ0aXRp b24gc2VsZWN0aW9uIGJ5CisgKiBlYXJsaWVyIGl0ZXJhdGlvbnMsIHNvIHRoYXQgdGhpcyBiYXRj aCBjYW4gdXNlIG5ldyBiaXRzLiBJZiBhbGwgYml0cyBoYXZlCisgKiBhbHJlYWR5IGJlZW4gdXNl ZCwgbm8gcGFydGl0aW9uaW5nIHdpbGwgYmUgZG9uZSAoYW55IHNwaWxsZWQgZGF0YSB3aWxsIGdv CisgKiB0byBhIHNpbmdsZSBvdXRwdXQgdGFwZSkuCisgKi8KK3R5cGVkZWYgc3RydWN0IEhhc2hB Z2dCYXRjaAoreworCWludAkJCQkgc2V0bm87CQkJLyogZ3JvdXBpbmcgc2V0ICovCisJaW50CQkJ CSB1c2VkX2JpdHM7CQkvKiBudW1iZXIgb2YgYml0cyBvZiBoYXNoIGFscmVhZHkgdXNlZCAqLwor CUxvZ2ljYWxUYXBlU2V0CSp0YXBlc2V0OwkJLyogYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRhcGUg c2V0ICovCisJaW50CQkJCSBpbnB1dF90YXBlbnVtOwkvKiBpbnB1dCBwYXJ0aXRpb24gdGFwZSAq LworCWludDY0CQkJIGlucHV0X3R1cGxlczsJLyogbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGlzIGJh dGNoICovCit9IEhhc2hBZ2dCYXRjaDsKKwogc3RhdGljIHZvaWQgc2VsZWN0X2N1cnJlbnRfc2V0 KEFnZ1N0YXRlICphZ2dzdGF0ZSwgaW50IHNldG5vLCBib29sIGlzX2hhc2gpOwogc3RhdGljIHZv aWQgaW5pdGlhbGl6ZV9waGFzZShBZ2dTdGF0ZSAqYWdnc3RhdGUsIGludCBuZXdwaGFzZSk7CiBz dGF0aWMgVHVwbGVUYWJsZVNsb3QgKmZldGNoX2lucHV0X3R1cGxlKEFnZ1N0YXRlICphZ2dzdGF0 ZSk7CkBAIC0yNzUsMTEgKzM4Nyw0MyBAQCBzdGF0aWMgQml0bWFwc2V0ICpmaW5kX3VuYWdncmVn YXRlZF9jb2xzKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CiBzdGF0aWMgYm9vbCBmaW5kX3VuYWdncmVn YXRlZF9jb2xzX3dhbGtlcihOb2RlICpub2RlLCBCaXRtYXBzZXQgKipjb2xub3MpOwogc3RhdGlj IHZvaWQgYnVpbGRfaGFzaF90YWJsZXMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyB2b2lk IGJ1aWxkX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlLCBpbnQgc2V0bm8sIGxvbmcgbmJ1 Y2tldHMpOworc3RhdGljIHZvaWQgaGFzaGFnZ19yZWNvbXBpbGVfZXhwcmVzc2lvbnMoQWdnU3Rh dGUgKmFnZ3N0YXRlLCBib29sIG1pbnNsb3QsCisJCQkJCQkJCQkJICBib29sIG51bGxjaGVjayk7 CitzdGF0aWMgbG9uZyBoYXNoX2Nob29zZV9udW1fYnVja2V0cyhkb3VibGUgaGFzaGVudHJ5c2l6 ZSwKKwkJCQkJCQkJCWxvbmcgZXN0aW1hdGVkX25idWNrZXRzLAorCQkJCQkJCQkJU2l6ZSBtZW1v cnkpOworc3RhdGljIGludCBoYXNoX2Nob29zZV9udW1fcGFydGl0aW9ucyh1aW50NjQgaW5wdXRf Z3JvdXBzLAorCQkJCQkJCQkJICBkb3VibGUgaGFzaGVudHJ5c2l6ZSwKKwkJCQkJCQkJCSAgaW50 IHVzZWRfYml0cywKKwkJCQkJCQkJCSAgaW50ICpsb2cyX25wYXJ0aXR0aW9ucyk7CiBzdGF0aWMg QWdnU3RhdGVQZXJHcm91cCBsb29rdXBfaGFzaF9lbnRyeShBZ2dTdGF0ZSAqYWdnc3RhdGUsIHVp bnQzMiBoYXNoKTsKIHN0YXRpYyB2b2lkIGxvb2t1cF9oYXNoX2VudHJpZXMoQWdnU3RhdGUgKmFn Z3N0YXRlKTsKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqYWdnX3JldHJpZXZlX2RpcmVjdChBZ2dT dGF0ZSAqYWdnc3RhdGUpOwogc3RhdGljIHZvaWQgYWdnX2ZpbGxfaGFzaF90YWJsZShBZ2dTdGF0 ZSAqYWdnc3RhdGUpOworc3RhdGljIGJvb2wgYWdnX3JlZmlsbF9oYXNoX3RhYmxlKEFnZ1N0YXRl ICphZ2dzdGF0ZSk7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRyaWV2ZV9oYXNoX3Rh YmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRy aWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeShBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIHZv aWQgaGFzaF9hZ2dfY2hlY2tfbGltaXRzKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CitzdGF0aWMgdm9p ZCBoYXNoX2FnZ19lbnRlcl9zcGlsbF9tb2RlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CitzdGF0aWMg dm9pZCBoYXNoX2FnZ191cGRhdGVfbWV0cmljcyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIGJvb2wgZnJv bV90YXBlLAorCQkJCQkJCQkJaW50IG5wYXJ0aXRpb25zKTsKK3N0YXRpYyB2b2lkIGhhc2hhZ2df ZmluaXNoX2luaXRpYWxfc3BpbGxzKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CitzdGF0aWMgdm9pZCBo YXNoYWdnX3Jlc2V0X3NwaWxsX3N0YXRlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CitzdGF0aWMgSGFz aEFnZ0JhdGNoICpoYXNoYWdnX2JhdGNoX25ldyhMb2dpY2FsVGFwZVNldCAqdGFwZXNldCwKKwkJ CQkJCQkJCSAgIGludCBpbnB1dF90YXBlbnVtLCBpbnQgc2V0bm8sCisJCQkJCQkJCQkgICBpbnQ2 NCBpbnB1dF90dXBsZXMsIGludCB1c2VkX2JpdHMpOworc3RhdGljIE1pbmltYWxUdXBsZSBoYXNo YWdnX2JhdGNoX3JlYWQoSGFzaEFnZ0JhdGNoICpiYXRjaCwgdWludDMyICpoYXNocCk7CitzdGF0 aWMgdm9pZCBoYXNoYWdnX3NwaWxsX2luaXQoSGFzaEFnZ1NwaWxsICpzcGlsbCwgSGFzaFRhcGVJ bmZvICp0YXBlaW5mbywKKwkJCQkJCQkgICBpbnQgdXNlZF9iaXRzLCB1aW50NjQgaW5wdXRfdHVw bGVzLAorCQkJCQkJCSAgIGRvdWJsZSBoYXNoZW50cnlzaXplKTsKK3N0YXRpYyBTaXplIGhhc2hh Z2dfc3BpbGxfdHVwbGUoSGFzaEFnZ1NwaWxsICpzcGlsbCwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CisJCQkJCQkJCXVpbnQzMiBoYXNoKTsKK3N0YXRpYyB2b2lkIGhhc2hhZ2dfc3BpbGxfZmluaXNo KEFnZ1N0YXRlICphZ2dzdGF0ZSwgSGFzaEFnZ1NwaWxsICpzcGlsbCwKKwkJCQkJCQkJIGludCBz ZXRubyk7CitzdGF0aWMgdm9pZCBoYXNoYWdnX3RhcGVpbmZvX2luaXQoQWdnU3RhdGUgKmFnZ3N0 YXRlKTsKK3N0YXRpYyB2b2lkIGhhc2hhZ2dfdGFwZWluZm9fYXNzaWduKEhhc2hUYXBlSW5mbyAq dGFwZWluZm8sIGludCAqZGVzdCwKKwkJCQkJCQkJCWludCBuZGVzdCk7CitzdGF0aWMgdm9pZCBo YXNoYWdnX3RhcGVpbmZvX3JlbGVhc2UoSGFzaFRhcGVJbmZvICp0YXBlaW5mbywgaW50IHRhcGVu dW0pOwogc3RhdGljIERhdHVtIEdldEFnZ0luaXRWYWwoRGF0dW0gdGV4dEluaXRWYWwsIE9pZCB0 cmFuc3R5cGUpOwogc3RhdGljIHZvaWQgYnVpbGRfcGVydHJhbnNfZm9yX2FnZ3JlZihBZ2dTdGF0 ZVBlclRyYW5zIHBlcnRyYW5zLAogCQkJCQkJCQkJICBBZ2dTdGF0ZSAqYWdnc3RhdGUsIEVTdGF0 ZSAqZXN0YXRlLApAQCAtMTI3NSw5ICsxNDE5LDkgQEAgZmluZF91bmFnZ3JlZ2F0ZWRfY29sc193 YWxrZXIoTm9kZSAqbm9kZSwgQml0bWFwc2V0ICoqY29sbm9zKQogICogV2UgaGF2ZSBhIHNlcGFy YXRlIGhhc2h0YWJsZSBhbmQgYXNzb2NpYXRlZCBwZXJoYXNoIGRhdGEgc3RydWN0dXJlIGZvciBl YWNoCiAgKiBncm91cGluZyBzZXQgZm9yIHdoaWNoIHdlJ3JlIGRvaW5nIGhhc2hpbmcuCiAgKgot ICogVGhlIGNvbnRlbnRzIG9mIHRoZSBoYXNoIHRhYmxlcyBhbHdheXMgbGl2ZSBpbiB0aGUgaGFz aGNvbnRleHQncyBwZXItdHVwbGUKLSAqIG1lbW9yeSBjb250ZXh0ICh0aGVyZSBpcyBvbmx5IG9u ZSBvZiB0aGVzZSBmb3IgYWxsIHRhYmxlcyB0b2dldGhlciwgc2luY2UKLSAqIHRoZXkgYXJlIGFs bCByZXNldCBhdCB0aGUgc2FtZSB0aW1lKS4KKyAqIFRoZSBoYXNoIHRhYmxlcyBhbmQgdGhlaXIg Y29udGVudHMgYWx3YXlzIGxpdmUgaW4gdGhlIGhhc2hjb250ZXh0J3MKKyAqIHBlci10dXBsZSBt ZW1vcnkgY29udGV4dCAodGhlcmUgaXMgb25seSBvbmUgb2YgdGhlc2UgZm9yIGFsbCB0YWJsZXMK KyAqIHRvZ2V0aGVyLCBzaW5jZSB0aGV5IGFyZSBhbGwgcmVzZXQgYXQgdGhlIHNhbWUgdGltZSku CiAgKi8KIHN0YXRpYyB2b2lkCiBidWlsZF9oYXNoX3RhYmxlcyhBZ2dTdGF0ZSAqYWdnc3RhdGUp CkBAIC0xMjg3LDE0ICsxNDMxLDI3IEBAIGJ1aWxkX2hhc2hfdGFibGVzKEFnZ1N0YXRlICphZ2dz dGF0ZSkKIAlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVtX2hhc2hlczsgKytz ZXRubykKIAl7CiAJCUFnZ1N0YXRlUGVySGFzaCBwZXJoYXNoID0gJmFnZ3N0YXRlLT5wZXJoYXNo W3NldG5vXTsKKwkJbG9uZwkJCW5idWNrZXRzOworCQlTaXplCQkJbWVtb3J5OworCisJCWlmIChw ZXJoYXNoLT5oYXNodGFibGUgIT0gTlVMTCkKKwkJeworCQkJUmVzZXRUdXBsZUhhc2hUYWJsZShw ZXJoYXNoLT5oYXNodGFibGUpOworCQkJY29udGludWU7CisJCX0KIAogCQlBc3NlcnQocGVyaGFz aC0+YWdnbm9kZS0+bnVtR3JvdXBzID4gMCk7CiAKLQkJaWYgKHBlcmhhc2gtPmhhc2h0YWJsZSkK LQkJCVJlc2V0VHVwbGVIYXNoVGFibGUocGVyaGFzaC0+aGFzaHRhYmxlKTsKLQkJZWxzZQotCQkJ YnVpbGRfaGFzaF90YWJsZShhZ2dzdGF0ZSwgc2V0bm8sIHBlcmhhc2gtPmFnZ25vZGUtPm51bUdy b3Vwcyk7CisJCW1lbW9yeSA9IGFnZ3N0YXRlLT5oYXNoX21lbV9saW1pdCAvIGFnZ3N0YXRlLT5u dW1faGFzaGVzOworCisJCS8qIGNob29zZSByZWFzb25hYmxlIG51bWJlciBvZiBidWNrZXRzIHBl ciBoYXNodGFibGUgKi8KKwkJbmJ1Y2tldHMgPSBoYXNoX2Nob29zZV9udW1fYnVja2V0cygKKwkJ CWFnZ3N0YXRlLT5oYXNoZW50cnlzaXplLCBwZXJoYXNoLT5hZ2dub2RlLT5udW1Hcm91cHMsIG1l bW9yeSk7CisKKwkJYnVpbGRfaGFzaF90YWJsZShhZ2dzdGF0ZSwgc2V0bm8sIG5idWNrZXRzKTsK IAl9CisKKwlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQgPSAwOwogfQogCiAvKgpAQCAt MTMwNCw3ICsxNDYxLDcgQEAgc3RhdGljIHZvaWQKIGJ1aWxkX2hhc2hfdGFibGUoQWdnU3RhdGUg KmFnZ3N0YXRlLCBpbnQgc2V0bm8sIGxvbmcgbmJ1Y2tldHMpCiB7CiAJQWdnU3RhdGVQZXJIYXNo IHBlcmhhc2ggPSAmYWdnc3RhdGUtPnBlcmhhc2hbc2V0bm9dOwotCU1lbW9yeUNvbnRleHQJbWV0 YWN4dCA9IGFnZ3N0YXRlLT5zcy5wcy5zdGF0ZS0+ZXNfcXVlcnlfY3h0OworCU1lbW9yeUNvbnRl eHQJbWV0YWN4dCA9IGFnZ3N0YXRlLT5oYXNoX21ldGFjeHQ7CiAJTWVtb3J5Q29udGV4dAloYXNo Y3h0ID0gYWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnk7CiAJTWVt b3J5Q29udGV4dAl0bXBjeHQJPSBhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9wZXJfdHVwbGVf bWVtb3J5OwogCVNpemUgICAgICAgICAgICBhZGRpdGlvbmFsc2l6ZTsKQEAgLTE0ODcsMTQgKzE2 NDQsMzI2IEBAIGhhc2hfYWdnX2VudHJ5X3NpemUoaW50IG51bUFnZ3MsIFNpemUgdHVwbGVXaWR0 aCwgU2l6ZSB0cmFuc2l0aW9uU3BhY2UpCiAJCXRyYW5zaXRpb25TcGFjZTsKIH0KIAorLyoKKyAq IGhhc2hhZ2dfcmVjb21waWxlX2V4cHJlc3Npb25zKCkKKyAqCisgKiBJZGVudGlmaWVzIHRoZSBy aWdodCBwaGFzZSwgY29tcGlsZXMgdGhlIHJpZ2h0IGV4cHJlc3Npb24gZ2l2ZW4gdGhlCisgKiBh cmd1bWVudHMsIGFuZCB0aGVuIHNldHMgcGhhc2UtPmV2YWxmdW5jIHRvIHRoYXQgZXhwcmVzc2lv bi4KKyAqCisgKiBEaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24g YXJlIG5lZWRlZCBkZXBlbmRpbmcgb24KKyAqIHdoZXRoZXIgaGFzaCBhZ2dyZWdhdGlvbiBoYXMg c3BpbGxlZCBvciBub3QsIGFuZCB3aGV0aGVyIGl0J3MgcmVhZGluZyBmcm9tCisgKiB0aGUgb3V0 ZXIgcGxhbiBvciBhIHRhcGUuIEJlZm9yZSBzcGlsbGluZyB0byBkaXNrLCB0aGUgZXhwcmVzc2lv biByZWFkcworICogZnJvbSB0aGUgb3V0ZXIgcGxhbiBhbmQgZG9lcyBub3QgbmVlZCB0byBwZXJm b3JtIGEgTlVMTCBjaGVjay4gQWZ0ZXIKKyAqIEhhc2hBZ2cgYmVnaW5zIHRvIHNwaWxsLCBuZXcg Z3JvdXBzIHdpbGwgbm90IGJlIGNyZWF0ZWQgaW4gdGhlIGhhc2ggdGFibGUsCisgKiBhbmQgdGhl IEFnZ1N0YXRlUGVyR3JvdXAgYXJyYXkgbWF5IGJlIE5VTEw7IHRoZXJlZm9yZSB3ZSBuZWVkIHRv IGFkZCBhIG51bGwKKyAqIHBvaW50ZXIgY2hlY2sgdG8gdGhlIGV4cHJlc3Npb24uIFRoZW4sIHdo ZW4gcmVhZGluZyBzcGlsbGVkIGRhdGEgZnJvbSBhCisgKiB0YXBlLCB3ZSBjaGFuZ2UgdGhlIG91 dGVyIHNsb3QgdHlwZSB0byBiZSBhIGZpeGVkIG1pbmltYWwgdHVwbGUgc2xvdC4KKyAqCisgKiBJ dCB3b3VsZCBiZSB3YXN0ZWZ1bCB0byByZWNvbXBpbGUgZXZlcnkgdGltZSwgc28gY2FjaGUgdGhl IGNvbXBpbGVkCisgKiBleHByZXNzaW9ucyBpbiB0aGUgQWdnU3RhdGVQZXJQaGFzZSwgYW5kIHJl dXNlIHdoZW4gYXBwcm9wcmlhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3JlY29tcGls ZV9leHByZXNzaW9ucyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIGJvb2wgbWluc2xvdCwgYm9vbCBudWxs Y2hlY2spCit7CisJQWdnU3RhdGVQZXJQaGFzZQkJIHBoYXNlOworCWludAkJCQkJCSBpID0gbWlu c2xvdCA/IDEgOiAwOworCWludAkJCQkJCSBqID0gbnVsbGNoZWNrID8gMSA6IDA7CisKKwlBc3Nl cnQoYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19IQVNIRUQgfHwKKwkJICAgYWdnc3RhdGUt PmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCk7CisKKwlpZiAoYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5 ID09IEFHR19IQVNIRUQpCisJCXBoYXNlID0gJmFnZ3N0YXRlLT5waGFzZXNbMF07CisJZWxzZSAv KiBBR0dfTUlYRUQgKi8KKwkJcGhhc2UgPSAmYWdnc3RhdGUtPnBoYXNlc1sxXTsKKworCWlmIChw aGFzZS0+ZXZhbHRyYW5zX2NhY2hlW2ldW2pdID09IE5VTEwpCisJeworCQljb25zdCBUdXBsZVRh YmxlU2xvdE9wcyAqb3V0ZXJvcHMJPSBhZ2dzdGF0ZS0+c3MucHMub3V0ZXJvcHM7CisJCWJvb2wJ CQkJCSBvdXRlcmZpeGVkID0gYWdnc3RhdGUtPnNzLnBzLm91dGVyb3BzZml4ZWQ7CisJCWJvb2wJ CQkJCSBkb2hhc2gJCT0gdHJ1ZTsKKwkJYm9vbAkJCQkJIGRvc29ydDsKKworCQlkb3NvcnQgPSBh Z2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX01JWEVEID8gdHJ1ZSA6IGZhbHNlOworCisJCS8q IHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgb3V0ZXJvcHMgd2hpbGUgY29tcGlsaW5nIHRoZSBleHBy ZXNzaW9uICovCisJCWlmIChtaW5zbG90KQorCQl7CisJCQlhZ2dzdGF0ZS0+c3MucHMub3V0ZXJv cHMgPSAmVFRTT3BzTWluaW1hbFR1cGxlOworCQkJYWdnc3RhdGUtPnNzLnBzLm91dGVyb3BzZml4 ZWQgPSB0cnVlOworCQl9CisKKwkJcGhhc2UtPmV2YWx0cmFuc19jYWNoZVtpXVtqXSA9IEV4ZWNC dWlsZEFnZ1RyYW5zKAorCQkJYWdnc3RhdGUsIHBoYXNlLCBkb3NvcnQsIGRvaGFzaCwgbnVsbGNo ZWNrKTsKKworCQkvKiBjaGFuZ2UgYmFjayAqLworCQlhZ2dzdGF0ZS0+c3MucHMub3V0ZXJvcHMg PSBvdXRlcm9wczsKKwkJYWdnc3RhdGUtPnNzLnBzLm91dGVyb3BzZml4ZWQgPSBvdXRlcmZpeGVk OworCX0KKworCXBoYXNlLT5ldmFsdHJhbnMgPSBwaGFzZS0+ZXZhbHRyYW5zX2NhY2hlW2ldW2pd OworfQorCisvKgorICogU2V0IGxpbWl0cyB0aGF0IHRyaWdnZXIgc3BpbGxpbmcgdG8gYXZvaWQg ZXhjZWVkaW5nIHdvcmtfbWVtLiBDb25zaWRlciB0aGUKKyAqIG51bWJlciBvZiBwYXJ0aXRpb25z IHdlIGV4cGVjdCB0byBjcmVhdGUgKGlmIHdlIGRvIHNwaWxsKS4KKyAqCisgKiBUaGVyZSBhcmUg dHdvIGxpbWl0czogYSBtZW1vcnkgbGltaXQsIGFuZCBhbHNvIGFuIG5ncm91cHMgbGltaXQuIFRo ZQorICogbmdyb3VwcyBsaW1pdCBiZWNvbWVzIGltcG9ydGFudCB3aGVuIHdlIGV4cGVjdCB0cmFu c2l0aW9uIHZhbHVlcyB0byBncm93CisgKiBzdWJzdGFudGlhbGx5IGxhcmdlciB0aGFuIHRoZSBp bml0aWFsIHZhbHVlLgorICovCit2b2lkCitoYXNoX2FnZ19zZXRfbGltaXRzKGRvdWJsZSBoYXNo ZW50cnlzaXplLCB1aW50NjQgaW5wdXRfZ3JvdXBzLCBpbnQgdXNlZF9iaXRzLAorCQkJCQlTaXpl ICptZW1fbGltaXQsIHVpbnQ2NCAqbmdyb3Vwc19saW1pdCwKKwkJCQkJaW50ICpudW1fcGFydGl0 aW9ucykKK3sKKwlpbnQgbnBhcnRpdGlvbnM7CisJU2l6ZSBwYXJ0aXRpb25fbWVtOworCisJLyog aWYgbm90IGV4cGVjdGVkIHRvIHNwaWxsLCB1c2UgYWxsIG9mIHdvcmtfbWVtICovCisJaWYgKGlu cHV0X2dyb3VwcyAqIGhhc2hlbnRyeXNpemUgPCB3b3JrX21lbSAqIDEwMjRMKQorCXsKKwkJKm1l bV9saW1pdCA9IHdvcmtfbWVtICogMTAyNEw7CisJCSpuZ3JvdXBzX2xpbWl0ID0gKm1lbV9saW1p dCAvIGhhc2hlbnRyeXNpemU7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENhbGN1bGF0ZSBl eHBlY3RlZCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBzcGlsbGluZywgd2hpY2ggaXMgdGhlIHNp emUKKwkgKiBvZiB0aGUgYnVmZmVycyBuZWVkZWQgZm9yIGFsbCB0aGUgdGFwZXMgdGhhdCBuZWVk IHRvIGJlIG9wZW4gYXQKKwkgKiBvbmNlLiBUaGVuLCBzdWJ0cmFjdCB0aGF0IGZyb20gdGhlIG1l bW9yeSBhdmFpbGFibGUgZm9yIGhvbGRpbmcgaGFzaAorCSAqIHRhYmxlcy4KKwkgKi8KKwlucGFy dGl0aW9ucyA9IGhhc2hfY2hvb3NlX251bV9wYXJ0aXRpb25zKGlucHV0X2dyb3VwcywKKwkJCQkJ CQkJCQkJIGhhc2hlbnRyeXNpemUsCisJCQkJCQkJCQkJCSB1c2VkX2JpdHMsCisJCQkJCQkJCQkJ CSBOVUxMKTsKKwlpZiAobnVtX3BhcnRpdGlvbnMgIT0gTlVMTCkKKwkJKm51bV9wYXJ0aXRpb25z ID0gbnBhcnRpdGlvbnM7CisKKwlwYXJ0aXRpb25fbWVtID0KKwkJSEFTSEFHR19SRUFEX0JVRkZF Ul9TSVpFICsKKwkJSEFTSEFHR19XUklURV9CVUZGRVJfU0laRSAqIG5wYXJ0aXRpb25zOworCisJ LyoKKwkgKiBEb24ndCBzZXQgdGhlIGxpbWl0IGJlbG93IDMvNCBvZiB3b3JrX21lbS4gSW4gdGhh dCBjYXNlLCB3ZSBhcmUgYXQgdGhlCisJICogbWluaW11bSBudW1iZXIgb2YgcGFydGl0aW9ucywg c28gd2UgYXJlbid0IGdvaW5nIHRvIGRyYW1hdGljYWxseSBleGNlZWQKKwkgKiB3b3JrIG1lbSBh bnl3YXkuCisJICovCisJaWYgKHdvcmtfbWVtICogMTAyNEwgPiA0ICogcGFydGl0aW9uX21lbSkK KwkJKm1lbV9saW1pdCA9IHdvcmtfbWVtICogMTAyNEwgLSBwYXJ0aXRpb25fbWVtOworCWVsc2UK KwkJKm1lbV9saW1pdCA9IHdvcmtfbWVtICogMTAyNEwgKiAwLjc1OworCisJaWYgKCptZW1fbGlt aXQgPiBoYXNoZW50cnlzaXplKQorCQkqbmdyb3Vwc19saW1pdCA9ICptZW1fbGltaXQgLyBoYXNo ZW50cnlzaXplOworCWVsc2UKKwkJKm5ncm91cHNfbGltaXQgPSAxOworfQorCisvKgorICogaGFz aF9hZ2dfY2hlY2tfbGltaXRzCisgKgorICogQWZ0ZXIgYWRkaW5nIGEgbmV3IGdyb3VwIHRvIHRo ZSBoYXNoIHRhYmxlLCBjaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gZW50ZXIKKyAqIHNwaWxsIG1v ZGUuIEFsbG9jYXRpb25zIG1heSBoYXBwZW4gd2l0aG91dCBhZGRpbmcgbmV3IGdyb3VwcyAoZm9y IGluc3RhbmNlLAorICogaWYgdGhlIHRyYW5zaXRpb24gc3RhdGUgc2l6ZSBncm93cyksIHNvIHRo aXMgY2hlY2sgaXMgaW1wZXJmZWN0LgorICovCitzdGF0aWMgdm9pZAoraGFzaF9hZ2dfY2hlY2tf bGltaXRzKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwl1aW50NjQgbmdyb3VwcyA9IGFnZ3N0YXRl LT5oYXNoX25ncm91cHNfY3VycmVudDsKKwlTaXplIG1ldGFfbWVtID0gTWVtb3J5Q29udGV4dE1l bUFsbG9jYXRlZCgKKwkJYWdnc3RhdGUtPmhhc2hfbWV0YWN4dCwgdHJ1ZSk7CisJU2l6ZSBoYXNo X21lbSA9IE1lbW9yeUNvbnRleHRNZW1BbGxvY2F0ZWQoCisJCWFnZ3N0YXRlLT5oYXNoY29udGV4 dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5LCB0cnVlKTsKKworCS8qCisJICogRG9uJ3Qgc3BpbGwg dW5sZXNzIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGdyb3VwIGluIHRoZSBoYXNoIHRhYmxlIHNvIHdl CisJICogY2FuIGJlIHN1cmUgdG8gbWFrZSBwcm9ncmVzcyBldmVuIGluIGVkZ2UgY2FzZXMuCisJ ICovCisJaWYgKGFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCA+IDAgJiYKKwkJKG1ldGFf bWVtICsgaGFzaF9tZW0gPiBhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgfHwKKwkJIG5ncm91cHMg PiBhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2xpbWl0KSkKKwl7CisJCWhhc2hfYWdnX2VudGVyX3Nw aWxsX21vZGUoYWdnc3RhdGUpOworCX0KK30KKworLyoKKyAqIEVudGVyICJzcGlsbCBtb2RlIiwg bWVhbmluZyB0aGF0IG5vIG5ldyBncm91cHMgYXJlIGFkZGVkIHRvIGFueSBvZiB0aGUgaGFzaAor ICogdGFibGVzLiBUdXBsZXMgdGhhdCB3b3VsZCBjcmVhdGUgYSBuZXcgZ3JvdXAgYXJlIGluc3Rl YWQgc3BpbGxlZCwgYW5kCisgKiBwcm9jZXNzZWQgbGF0ZXIuCisgKi8KK3N0YXRpYyB2b2lkCito YXNoX2FnZ19lbnRlcl9zcGlsbF9tb2RlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlhZ2dzdGF0 ZS0+aGFzaF9zcGlsbF9tb2RlID0gdHJ1ZTsKKwloYXNoYWdnX3JlY29tcGlsZV9leHByZXNzaW9u cyhhZ2dzdGF0ZSwgYWdnc3RhdGUtPnRhYmxlX2ZpbGxlZCwgdHJ1ZSk7CisKKwlpZiAoIWFnZ3N0 YXRlLT5oYXNoX2V2ZXJfc3BpbGxlZCkKKwl7CisJCUFzc2VydChhZ2dzdGF0ZS0+aGFzaF90YXBl aW5mbyA9PSBOVUxMKTsKKwkJQXNzZXJ0KGFnZ3N0YXRlLT5oYXNoX3NwaWxscyA9PSBOVUxMKTsK KworCQlhZ2dzdGF0ZS0+aGFzaF9ldmVyX3NwaWxsZWQgPSB0cnVlOworCisJCWhhc2hhZ2dfdGFw ZWluZm9faW5pdChhZ2dzdGF0ZSk7CisKKwkJYWdnc3RhdGUtPmhhc2hfc3BpbGxzID0gcGFsbG9j KAorCQkJc2l6ZW9mKEhhc2hBZ2dTcGlsbCkgKiBhZ2dzdGF0ZS0+bnVtX2hhc2hlcyk7CisKKwkJ Zm9yIChpbnQgc2V0bm8gPSAwOyBzZXRubyA8IGFnZ3N0YXRlLT5udW1faGFzaGVzOyBzZXRubysr KQorCQl7CisJCQlBZ2dTdGF0ZVBlckhhc2gJIHBlcmhhc2ggPSAmYWdnc3RhdGUtPnBlcmhhc2hb c2V0bm9dOworCQkJSGFzaEFnZ1NwaWxsCSpzcGlsbAkgPSAmYWdnc3RhdGUtPmhhc2hfc3BpbGxz W3NldG5vXTsKKworCQkJaGFzaGFnZ19zcGlsbF9pbml0KHNwaWxsLCBhZ2dzdGF0ZS0+aGFzaF90 YXBlaW5mbywgMCwKKwkJCQkJCQkgICBwZXJoYXNoLT5hZ2dub2RlLT5udW1Hcm91cHMsCisJCQkJ CQkJICAgYWdnc3RhdGUtPmhhc2hlbnRyeXNpemUpOworCQl9CisJfQorfQorCisvKgorICogVXBk YXRlIG1ldHJpY3MgYWZ0ZXIgZmlsbGluZyB0aGUgaGFzaCB0YWJsZS4KKyAqCisgKiBJZiByZWFk aW5nIGZyb20gdGhlIG91dGVyIHBsYW4sIGZyb21fdGFwZSBzaG91bGQgYmUgZmFsc2U7IGlmIHJl YWRpbmcgZnJvbQorICogYW5vdGhlciB0YXBlLCBmcm9tX3RhcGUgc2hvdWxkIGJlIHRydWUuCisg Ki8KK3N0YXRpYyB2b2lkCitoYXNoX2FnZ191cGRhdGVfbWV0cmljcyhBZ2dTdGF0ZSAqYWdnc3Rh dGUsIGJvb2wgZnJvbV90YXBlLCBpbnQgbnBhcnRpdGlvbnMpCit7CisJU2l6ZQltZXRhX21lbTsK KwlTaXplCWhhc2hfbWVtOworCVNpemUJYnVmZmVyX21lbTsKKwlTaXplCXRvdGFsX21lbTsKKwor CWlmIChhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgIT0gQUdHX01JWEVEICYmCisJCWFnZ3N0YXRlLT5h Z2dzdHJhdGVneSAhPSBBR0dfSEFTSEVEKQorCQlyZXR1cm47CisKKwkvKiBtZW1vcnkgZm9yIHRo ZSBoYXNoIHRhYmxlIGl0c2VsZiAqLworCW1ldGFfbWVtID0gTWVtb3J5Q29udGV4dE1lbUFsbG9j YXRlZChhZ2dzdGF0ZS0+aGFzaF9tZXRhY3h0LCB0cnVlKTsKKworCS8qIG1lbW9yeSBmb3IgdGhl IGdyb3VwIGtleXMgYW5kIHRyYW5zaXRpb24gc3RhdGVzICovCisJaGFzaF9tZW0gPSBNZW1vcnlD b250ZXh0TWVtQWxsb2NhdGVkKAorCQlhZ2dzdGF0ZS0+aGFzaGNvbnRleHQtPmVjeHRfcGVyX3R1 cGxlX21lbW9yeSwgdHJ1ZSk7CisKKwkvKiBtZW1vcnkgZm9yIHJlYWQvd3JpdGUgdGFwZSBidWZm ZXJzLCBpZiBzcGlsbGVkICovCisJYnVmZmVyX21lbSA9IG5wYXJ0aXRpb25zICogSEFTSEFHR19X UklURV9CVUZGRVJfU0laRTsKKwlpZiAoZnJvbV90YXBlKQorCQlidWZmZXJfbWVtICs9IEhBU0hB R0dfUkVBRF9CVUZGRVJfU0laRTsKKworCS8qIHVwZGF0ZSBwZWFrIG1lbSAqLworCXRvdGFsX21l bSA9IG1ldGFfbWVtICsgaGFzaF9tZW0gKyBidWZmZXJfbWVtOworCWlmICh0b3RhbF9tZW0gPiBh Z2dzdGF0ZS0+aGFzaF9tZW1fcGVhaykKKwkJYWdnc3RhdGUtPmhhc2hfbWVtX3BlYWsgPSB0b3Rh bF9tZW07CisKKwkvKiB1cGRhdGUgZGlzayB1c2FnZSAqLworCWlmIChhZ2dzdGF0ZS0+aGFzaF90 YXBlaW5mbyAhPSBOVUxMKQorCXsKKwkJdWludDY0CWRpc2tfdXNlZCA9IExvZ2ljYWxUYXBlU2V0 QmxvY2tzKAorCQkJYWdnc3RhdGUtPmhhc2hfdGFwZWluZm8tPnRhcGVzZXQpICogKEJMQ0tTWiAv IDEwMjQpOworCisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9kaXNrX3VzZWQgPCBkaXNrX3VzZWQpCisJ CQlhZ2dzdGF0ZS0+aGFzaF9kaXNrX3VzZWQgPSBkaXNrX3VzZWQ7CisJfQorCisJLyogdXBkYXRl IGhhc2hlbnRyeXNpemUgZXN0aW1hdGUgYmFzZWQgb24gY29udGVudHMgKi8KKwlpZiAoYWdnc3Rh dGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50ID4gMCkKKwl7CisJCWFnZ3N0YXRlLT5oYXNoZW50cnlz aXplID0KKwkJCWhhc2hfbWVtIC8gKGRvdWJsZSlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJl bnQ7CisJfQorfQorCisvKgorICogQ2hvb3NlIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgYnVja2V0 cyBmb3IgdGhlIGluaXRpYWwgaGFzaCB0YWJsZSBzaXplLgorICovCitzdGF0aWMgbG9uZworaGFz aF9jaG9vc2VfbnVtX2J1Y2tldHMoZG91YmxlIGhhc2hlbnRyeXNpemUsIGxvbmcgbmdyb3Vwcywg U2l6ZSBtZW1vcnkpCit7CisJbG9uZwltYXhfbmJ1Y2tldHM7CisJbG9uZwluYnVja2V0cyA9IG5n cm91cHM7CisKKwltYXhfbmJ1Y2tldHMgPSBtZW1vcnkgLyBoYXNoZW50cnlzaXplOworCisJLyoK KwkgKiBMZWF2ZSByb29tIGZvciBzbG9wIHRvIGF2b2lkIGEgY2FzZSB3aGVyZSB0aGUgaW5pdGlh bCBoYXNoIHRhYmxlIHNpemUKKwkgKiBleGNlZWRzIHRoZSBtZW1vcnkgbGltaXQgKHRob3VnaCB0 aGF0IG1heSBzdGlsbCBoYXBwZW4gaW4gZWRnZSBjYXNlcykuCisJICovCisJbWF4X25idWNrZXRz ICo9IDAuNzU7CisKKwlpZiAobmJ1Y2tldHMgPiBtYXhfbmJ1Y2tldHMpCisJCW5idWNrZXRzID0g bWF4X25idWNrZXRzOworCWlmIChuYnVja2V0cyA8IEhBU0hBR0dfTUlOX0JVQ0tFVFMpCisJCW5i dWNrZXRzID0gSEFTSEFHR19NSU5fQlVDS0VUUzsKKwlyZXR1cm4gbmJ1Y2tldHM7Cit9CisKKy8q CisgKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIHRvIGNyZWF0ZSB3aGVuIHNw aWxsaW5nLCB3aGljaCB3aWxsCisgKiBhbHdheXMgYmUgYSBwb3dlciBvZiB0d28uIElmIGxvZzJf bnBhcnRpdGlvbnMgaXMgbm9uLU5VTEwsIHNldAorICogKmxvZzJfbnBhcnRpdGlvbnMgdG8gdGhl IGxvZzIoKSBvZiB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK2hh c2hfY2hvb3NlX251bV9wYXJ0aXRpb25zKHVpbnQ2NCBpbnB1dF9ncm91cHMsIGRvdWJsZSBoYXNo ZW50cnlzaXplLAorCQkJCQkJICAgaW50IHVzZWRfYml0cywgaW50ICpsb2cyX25wYXJ0aXRpb25z KQoreworCVNpemUJbWVtX3dhbnRlZDsKKwlpbnQJCXBhcnRpdGlvbl9saW1pdDsKKwlpbnQJCW5w YXJ0aXRpb25zOworCWludAkJcGFydGl0aW9uX2JpdHM7CisKKwkvKgorCSAqIEF2b2lkIGNyZWF0 aW5nIHNvIG1hbnkgcGFydGl0aW9ucyB0aGF0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIG9mIHRo ZQorCSAqIG9wZW4gcGFydGl0aW9uIGZpbGVzIGFyZSBncmVhdGVyIHRoYW4gMS80IG9mIHdvcmtf bWVtLgorCSAqLworCXBhcnRpdGlvbl9saW1pdCA9CisJCSh3b3JrX21lbSAqIDEwMjRMICogMC4y NSAtIEhBU0hBR0dfUkVBRF9CVUZGRVJfU0laRSkgLworCQlIQVNIQUdHX1dSSVRFX0JVRkZFUl9T SVpFOworCisJbWVtX3dhbnRlZCA9IEhBU0hBR0dfUEFSVElUSU9OX0ZBQ1RPUiAqIGlucHV0X2dy b3VwcyAqIGhhc2hlbnRyeXNpemU7CisKKwkvKiBtYWtlIGVub3VnaCBwYXJ0aXRpb25zIHNvIHRo YXQgZWFjaCBvbmUgaXMgbGlrZWx5IHRvIGZpdCBpbiBtZW1vcnkgKi8KKwlucGFydGl0aW9ucyA9 IDEgKyAobWVtX3dhbnRlZCAvICh3b3JrX21lbSAqIDEwMjRMKSk7CisKKwlpZiAobnBhcnRpdGlv bnMgPiBwYXJ0aXRpb25fbGltaXQpCisJCW5wYXJ0aXRpb25zID0gcGFydGl0aW9uX2xpbWl0Owor CisJaWYgKG5wYXJ0aXRpb25zIDwgSEFTSEFHR19NSU5fUEFSVElUSU9OUykKKwkJbnBhcnRpdGlv bnMgPSBIQVNIQUdHX01JTl9QQVJUSVRJT05TOworCWlmIChucGFydGl0aW9ucyA+IEhBU0hBR0df TUFYX1BBUlRJVElPTlMpCisJCW5wYXJ0aXRpb25zID0gSEFTSEFHR19NQVhfUEFSVElUSU9OUzsK KworCS8qIGNlaWwobG9nMihucGFydGl0aW9ucykpICovCisJcGFydGl0aW9uX2JpdHMgPSBteV9s b2cyKG5wYXJ0aXRpb25zKTsKKworCS8qIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGV4aGF1c3Qg dGhlIGhhc2ggYml0cyAqLworCWlmIChwYXJ0aXRpb25fYml0cyArIHVzZWRfYml0cyA+PSAzMikK KwkJcGFydGl0aW9uX2JpdHMgPSAzMiAtIHVzZWRfYml0czsKKworCWlmIChsb2cyX25wYXJ0aXRp b25zICE9IE5VTEwpCisJCSpsb2cyX25wYXJ0aXRpb25zID0gcGFydGl0aW9uX2JpdHM7CisKKwkv KiBudW1iZXIgb2YgcGFydGl0aW9ucyB3aWxsIGJlIGEgcG93ZXIgb2YgdHdvICovCisJbnBhcnRp dGlvbnMgPSAxTCA8PCBwYXJ0aXRpb25fYml0czsKKworCXJldHVybiBucGFydGl0aW9uczsKK30K KwogLyoKICAqIEZpbmQgb3IgY3JlYXRlIGEgaGFzaHRhYmxlIGVudHJ5IGZvciB0aGUgdHVwbGUg Z3JvdXAgY29udGFpbmluZyB0aGUgY3VycmVudAogICogdHVwbGUgKGFscmVhZHkgc2V0IGluIHRt cGNvbnRleHQncyBvdXRlcnR1cGxlIHNsb3QpLCBpbiB0aGUgY3VycmVudCBncm91cGluZwogICog c2V0ICh3aGljaCB0aGUgY2FsbGVyIG11c3QgaGF2ZSBzZWxlY3RlZCAtIG5vdGUgdGhhdCBpbml0 aWFsaXplX2FnZ3JlZ2F0ZQogICogZGVwZW5kcyBvbiB0aGlzKS4KICAqCi0gKiBXaGVuIGNhbGxl ZCwgQ3VycmVudE1lbW9yeUNvbnRleHQgc2hvdWxkIGJlIHRoZSBwZXItcXVlcnkgY29udGV4dC4g VGhlCi0gKiBhbHJlYWR5LWNhbGN1bGF0ZWQgaGFzaCB2YWx1ZSBmb3IgdGhlIHR1cGxlIG11c3Qg YmUgc3BlY2lmaWVkLgorICogV2hlbiBjYWxsZWQsIEN1cnJlbnRNZW1vcnlDb250ZXh0IHNob3Vs ZCBiZSB0aGUgcGVyLXF1ZXJ5IGNvbnRleHQuCisgKgorICogSWYgdGhlIGhhc2ggdGFibGUgaXMg YXQgdGhlIG1lbW9yeSBsaW1pdCwgdGhlbiBvbmx5IGZpbmQgZXhpc3RpbmcgaGFzaHRhYmxlCisg KiBlbnRyaWVzOyBkb24ndCBjcmVhdGUgbmV3IG9uZXMuIElmIGEgdHVwbGUncyBncm91cCBpcyBu b3QgYWxyZWFkeSBwcmVzZW50CisgKiBpbiB0aGUgaGFzaCB0YWJsZSBmb3IgdGhlIGN1cnJlbnQg Z3JvdXBpbmcgc2V0LCByZXR1cm4gTlVMTCBhbmQgdGhlIGNhbGxlcgorICogd2lsbCBzcGlsbCBp dCB0byBkaXNrLgogICovCiBzdGF0aWMgQWdnU3RhdGVQZXJHcm91cAogbG9va3VwX2hhc2hfZW50 cnkoQWdnU3RhdGUgKmFnZ3N0YXRlLCB1aW50MzIgaGFzaCkKQEAgLTE1MDIsMTYgKzE5NzEsMjYg QEAgbG9va3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRlLCB1aW50MzIgaGFzaCkKIAlB Z2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0ZS0+Y3Vy cmVudF9zZXRdOwogCVR1cGxlVGFibGVTbG90ICpoYXNoc2xvdCA9IHBlcmhhc2gtPmhhc2hzbG90 OwogCVR1cGxlSGFzaEVudHJ5RGF0YSAqZW50cnk7Ci0JYm9vbAkJaXNuZXc7CisJYm9vbAkJCWlz bmV3ID0gZmFsc2U7CisJYm9vbAkJICAgKnBfaXNuZXc7CisKKwkvKiBpZiBoYXNoIHRhYmxlIGFs cmVhZHkgc3BpbGxlZCwgZG9uJ3QgY3JlYXRlIG5ldyBlbnRyaWVzICovCisJcF9pc25ldyA9IGFn Z3N0YXRlLT5oYXNoX3NwaWxsX21vZGUgPyBOVUxMIDogJmlzbmV3OwogCiAJLyogZmluZCBvciBj cmVhdGUgdGhlIGhhc2h0YWJsZSBlbnRyeSB1c2luZyB0aGUgZmlsdGVyZWQgdHVwbGUgKi8KLQll bnRyeSA9IExvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaChwZXJoYXNoLT5oYXNodGFibGUsIGhhc2hz bG90LCAmaXNuZXcsCisJZW50cnkgPSBMb29rdXBUdXBsZUhhc2hFbnRyeUhhc2gocGVyaGFzaC0+ aGFzaHRhYmxlLCBoYXNoc2xvdCwgcF9pc25ldywKIAkJCQkJCQkJCSBoYXNoKTsKIAorCWlmIChl bnRyeSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwogCWlmIChpc25ldykKIAl7Ci0JCUFnZ1N0 YXRlUGVyR3JvdXAgcGVyZ3JvdXA7Ci0JCWludAkJCXRyYW5zbm87CisJCUFnZ1N0YXRlUGVyR3Jv dXAJcGVyZ3JvdXA7CisJCWludAkJCQkJdHJhbnNubzsKKworCQlhZ2dzdGF0ZS0+aGFzaF9uZ3Jv dXBzX2N1cnJlbnQrKzsKKwkJaGFzaF9hZ2dfY2hlY2tfbGltaXRzKGFnZ3N0YXRlKTsKIAogCQlw ZXJncm91cCA9IChBZ2dTdGF0ZVBlckdyb3VwKQogCQkJTWVtb3J5Q29udGV4dEFsbG9jKHBlcmhh c2gtPmhhc2h0YWJsZS0+dGFibGVjeHQsCkBAIC0xNTM5LDIzICsyMDE4LDQ4IEBAIGxvb2t1cF9o YXNoX2VudHJ5KEFnZ1N0YXRlICphZ2dzdGF0ZSwgdWludDMyIGhhc2gpCiAgKiByZXR1cm5pbmcg YW4gYXJyYXkgb2YgcGVyZ3JvdXAgcG9pbnRlcnMgc3VpdGFibGUgZm9yIGFkdmFuY2VfYWdncmVn YXRlcy4KICAqCiAgKiBCZSBhd2FyZSB0aGF0IGxvb2t1cF9oYXNoX2VudHJ5IGNhbiByZXNldCB0 aGUgdG1wY29udGV4dC4KKyAqCisgKiBTb21lIGVudHJpZXMgbWF5IGJlIGxlZnQgTlVMTCBpZiB3 ZSBoYXZlIHJlYWNoZWQgdGhlIGxpbWl0IGFuZCBoYXZlIGJlZ3VuCisgKiB0byBzcGlsbC4gVGhl IHNhbWUgdHVwbGUgd2lsbCBiZWxvbmcgdG8gZGlmZmVyZW50IGdyb3VwcyBmb3IgZWFjaCBzZXQs IHNvCisgKiBtYXkgbWF0Y2ggYSBncm91cCBhbHJlYWR5IGluIG1lbW9yeSBmb3Igb25lIHNldCBh bmQgbWF0Y2ggYSBncm91cCBub3QgaW4KKyAqIG1lbW9yeSBmb3IgYW5vdGhlciBzZXQuIElmIHdl IGhhdmUgYmVndW4gdG8gc3BpbGwgYW5kIGEgdHVwbGUgZG9lc24ndCBtYXRjaAorICogYSBncm91 cCBpbiBtZW1vcnkgZm9yIGEgcGFydGljdWxhciBzZXQsIGl0IHdpbGwgYmUgc3BpbGxlZC4KKyAq CisgKiBOQjogSXQncyBwb3NzaWJsZSB0byBzcGlsbCB0aGUgc2FtZSB0dXBsZSBmb3Igc2V2ZXJh bCBkaWZmZXJlbnQgZ3JvdXBpbmcKKyAqIHNldHMuIFRoaXMgbWF5IHNlZW0gd2FzdGVmdWwsIGJ1 dCBpdCdzIGFjdHVhbGx5IGEgdHJhZGUtb2ZmOiBpZiB3ZSBzcGlsbAorICogdGhlIHR1cGxlIG11 bHRpcGxlIHRpbWVzIGZvciBtdWx0aXBsZSBncm91cGluZyBzZXRzLCBpdCBjYW4gYmUgcGFydGl0 aW9uZWQKKyAqIGZvciBlYWNoIGdyb3VwaW5nIHNldCwgbWFraW5nIHRoZSByZWZpbGxpbmcgb2Yg dGhlIGhhc2ggdGFibGUgdmVyeQorICogZWZmaWNpZW50LgogICovCiBzdGF0aWMgdm9pZAogbG9v a3VwX2hhc2hfZW50cmllcyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiB7Ci0JaW50CQkJbnVtSGFzaGVz ID0gYWdnc3RhdGUtPm51bV9oYXNoZXM7CiAJQWdnU3RhdGVQZXJHcm91cCAqcGVyZ3JvdXAgPSBh Z2dzdGF0ZS0+aGFzaF9wZXJncm91cDsKIAlpbnQJCQlzZXRubzsKIAotCWZvciAoc2V0bm8gPSAw OyBzZXRubyA8IG51bUhhc2hlczsgc2V0bm8rKykKKwlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBh Z2dzdGF0ZS0+bnVtX2hhc2hlczsgc2V0bm8rKykKIAl7Ci0JCUFnZ1N0YXRlUGVySGFzaCBwZXJo YXNoID0gJmFnZ3N0YXRlLT5wZXJoYXNoW3NldG5vXTsKKwkJQWdnU3RhdGVQZXJIYXNoCXBlcmhh c2ggPSAmYWdnc3RhdGUtPnBlcmhhc2hbc2V0bm9dOwogCQl1aW50MzIJCQloYXNoOwogCiAJCXNl bGVjdF9jdXJyZW50X3NldChhZ2dzdGF0ZSwgc2V0bm8sIHRydWUpOwogCQlwcmVwYXJlX2hhc2hf c2xvdChhZ2dzdGF0ZSk7CiAJCWhhc2ggPSBUdXBsZUhhc2hUYWJsZUhhc2gocGVyaGFzaC0+aGFz aHRhYmxlLCBwZXJoYXNoLT5oYXNoc2xvdCk7CiAJCXBlcmdyb3VwW3NldG5vXSA9IGxvb2t1cF9o YXNoX2VudHJ5KGFnZ3N0YXRlLCBoYXNoKTsKKworCQkvKiBjaGVjayB0byBzZWUgaWYgd2UgbmVl ZCB0byBzcGlsbCB0aGUgdHVwbGUgZm9yIHRoaXMgZ3JvdXBpbmcgc2V0ICovCisJCWlmIChwZXJn cm91cFtzZXRub10gPT0gTlVMTCkKKwkJeworCQkJSGFzaEFnZ1NwaWxsCSpzcGlsbAkgPSAmYWdn c3RhdGUtPmhhc2hfc3BpbGxzW3NldG5vXTsKKwkJCVR1cGxlVGFibGVTbG90CSpzbG90CSA9IGFn Z3N0YXRlLT50bXBjb250ZXh0LT5lY3h0X291dGVydHVwbGU7CisKKwkJCWlmIChzcGlsbC0+cGFy dGl0aW9ucyA9PSBOVUxMKQorCQkJCWhhc2hhZ2dfc3BpbGxfaW5pdChzcGlsbCwgYWdnc3RhdGUt Pmhhc2hfdGFwZWluZm8sIDAsCisJCQkJCQkJCSAgIHBlcmhhc2gtPmFnZ25vZGUtPm51bUdyb3Vw cywKKwkJCQkJCQkJICAgYWdnc3RhdGUtPmhhc2hlbnRyeXNpemUpOworCisJCQloYXNoYWdnX3Nw aWxsX3R1cGxlKHNwaWxsLCBzbG90LCBoYXNoKTsKKwkJfQogCX0KIH0KIApAQCAtMTg3OCw2ICsy MzgyLDEyIEBAIGFnZ19yZXRyaWV2ZV9kaXJlY3QoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCQkJCQlp ZiAoVHVwSXNOdWxsKG91dGVyc2xvdCkpCiAJCQkJCXsKIAkJCQkJCS8qIG5vIG1vcmUgb3V0ZXIt cGxhbiB0dXBsZXMgYXZhaWxhYmxlICovCisKKwkJCQkJCS8qIGlmIHdlIGJ1aWx0IGhhc2ggdGFi bGVzLCBmaW5hbGl6ZSBhbnkgc3BpbGxzICovCisJCQkJCQlpZiAoYWdnc3RhdGUtPmFnZ3N0cmF0 ZWd5ID09IEFHR19NSVhFRCAmJgorCQkJCQkJCWFnZ3N0YXRlLT5jdXJyZW50X3BoYXNlID09IDEp CisJCQkJCQkJaGFzaGFnZ19maW5pc2hfaW5pdGlhbF9zcGlsbHMoYWdnc3RhdGUpOworCiAJCQkJ CQlpZiAoaGFzR3JvdXBpbmdTZXRzKQogCQkJCQkJewogCQkJCQkJCWFnZ3N0YXRlLT5pbnB1dF9k b25lID0gdHJ1ZTsKQEAgLTE5ODAsNiArMjQ5MCwxMCBAQCBhZ2dfZmlsbF9oYXNoX3RhYmxlKEFn Z1N0YXRlICphZ2dzdGF0ZSkKIAkJUmVzZXRFeHByQ29udGV4dChhZ2dzdGF0ZS0+dG1wY29udGV4 dCk7CiAJfQogCisJLyogZmluYWxpemUgc3BpbGxzLCBpZiBhbnkgKi8KKwloYXNoYWdnX2Zpbmlz aF9pbml0aWFsX3NwaWxscyhhZ2dzdGF0ZSk7CisKKwlhZ2dzdGF0ZS0+aW5wdXRfZG9uZSA9IHRy dWU7CiAJYWdnc3RhdGUtPnRhYmxlX2ZpbGxlZCA9IHRydWU7CiAJLyogSW5pdGlhbGl6ZSB0byB3 YWxrIHRoZSBmaXJzdCBoYXNoIHRhYmxlICovCiAJc2VsZWN0X2N1cnJlbnRfc2V0KGFnZ3N0YXRl LCAwLCB0cnVlKTsKQEAgLTE5ODcsMTEgKzI1MDEsMTcxIEBAIGFnZ19maWxsX2hhc2hfdGFibGUo QWdnU3RhdGUgKmFnZ3N0YXRlKQogCQkJCQkJICAgJmFnZ3N0YXRlLT5wZXJoYXNoWzBdLmhhc2hp dGVyKTsKIH0KIAorLyoKKyAqIElmIGFueSBkYXRhIHdhcyBzcGlsbGVkIGR1cmluZyBoYXNoIGFn Z3JlZ2F0aW9uLCByZXNldCB0aGUgaGFzaCB0YWJsZSBhbmQKKyAqIHJlcHJvY2VzcyBvbmUgYmF0 Y2ggb2Ygc3BpbGxlZCBkYXRhLiBBZnRlciByZXByb2Nlc3NpbmcgYSBiYXRjaCwgdGhlIGhhc2gK KyAqIHRhYmxlIHdpbGwgYWdhaW4gY29udGFpbiBkYXRhLCByZWFkeSB0byBiZSBjb25zdW1lZCBi eQorICogYWdnX3JldHJpZXZlX2hhc2hfdGFibGVfaW5fbWVtb3J5KCkuCisgKgorICogU2hvdWxk IG9ubHkgYmUgY2FsbGVkIGFmdGVyIGFsbCBpbiBtZW1vcnkgaGFzaCB0YWJsZSBlbnRyaWVzIGhh dmUgYmVlbgorICogZmluYWxpemVkIGFuZCBlbWl0dGVkLgorICoKKyAqIFJldHVybiBmYWxzZSB3 aGVuIGlucHV0IGlzIGV4aGF1c3RlZCBhbmQgdGhlcmUncyBubyBtb3JlIHdvcmsgdG8gYmUgZG9u ZTsKKyAqIG90aGVyd2lzZSByZXR1cm4gdHJ1ZS4KKyAqLworc3RhdGljIGJvb2wKK2FnZ19yZWZp bGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJSGFzaEFnZ0JhdGNoCSpiYXRj aDsKKwlIYXNoQWdnU3BpbGwJIHNwaWxsOworCUhhc2hUYXBlSW5mbwkqdGFwZWluZm8gPSBhZ2dz dGF0ZS0+aGFzaF90YXBlaW5mbzsKKwl1aW50NjQJCQkgbmdyb3Vwc19lc3RpbWF0ZTsKKworCWlm IChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzID09IE5JTCkKKwkJcmV0dXJuIGZhbHNlOworCisJYmF0 Y2ggPSBsaW5pdGlhbChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzKTsKKwlhZ2dzdGF0ZS0+aGFzaF9i YXRjaGVzID0gbGlzdF9kZWxldGVfZmlyc3QoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisKKwkv KgorCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZ3JvdXBzIGZvciB0aGlzIGJhdGNoIGFzIHRo ZSB0b3RhbCBudW1iZXIgb2YKKwkgKiB0dXBsZXMgaW4gaXRzIGlucHV0IGZpbGUuIEFsdGhvdWdo IHRoYXQncyBhIHdvcnN0IGNhc2UsIGl0J3Mgbm90IGJhZAorCSAqIGhlcmUgZm9yIHR3byByZWFz b25zOiAoMSkgb3ZlcmVzdGltYXRpbmcgaXMgYmV0dGVyIHRoYW4KKwkgKiB1bmRlcmVzdGltYXRp bmc7IGFuZCAoMikgd2UndmUgYWxyZWFkeSBzY2FubmVkIHRoZSByZWxhdGlvbiBvbmNlLCBzbwor CSAqIGl0J3MgbGlrZWx5IHRoYXQgd2UndmUgYWxyZWFkeSBmaW5hbGl6ZWQgbWFueSBvZiB0aGUg Y29tbW9uIHZhbHVlcy4KKwkgKi8KKwluZ3JvdXBzX2VzdGltYXRlID0gYmF0Y2gtPmlucHV0X3R1 cGxlczsKKworCWhhc2hhZ2dfc3BpbGxfaW5pdCgmc3BpbGwsIHRhcGVpbmZvLCBiYXRjaC0+dXNl ZF9iaXRzLAorCQkJCQkgICBuZ3JvdXBzX2VzdGltYXRlLCBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6 ZSk7CisKKwloYXNoX2FnZ19zZXRfbGltaXRzKGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplLCBuZ3Jv dXBzX2VzdGltYXRlLAorCQkJCQkJYmF0Y2gtPnVzZWRfYml0cywgJmFnZ3N0YXRlLT5oYXNoX21l bV9saW1pdCwKKwkJCQkJCSZhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2xpbWl0LCBOVUxMKTsKKwor CS8qIHRoZXJlIGNvdWxkIGJlIHJlc2lkdWFsIHBlcmdyb3VwIHBvaW50ZXJzOyBjbGVhciB0aGVt ICovCisJZm9yIChpbnQgc2V0b2ZmID0gMDsKKwkJIHNldG9mZiA8IGFnZ3N0YXRlLT5tYXhzZXRz ICsgYWdnc3RhdGUtPm51bV9oYXNoZXM7CisJCSBzZXRvZmYrKykKKwkJYWdnc3RhdGUtPmFsbF9w ZXJncm91cHNbc2V0b2ZmXSA9IE5VTEw7CisKKwkvKiBmcmVlIG1lbW9yeSBhbmQgcmVzZXQgaGFz aCB0YWJsZXMgKi8KKwlSZVNjYW5FeHByQ29udGV4dChhZ2dzdGF0ZS0+aGFzaGNvbnRleHQpOwor CWZvciAoaW50IHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVtX2hhc2hlczsgc2V0bm8r KykKKwkJUmVzZXRUdXBsZUhhc2hUYWJsZShhZ2dzdGF0ZS0+cGVyaGFzaFtzZXRub10uaGFzaHRh YmxlKTsKKworCWFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCA9IDA7CisKKwkvKgorCSAq IEluIEFHR19NSVhFRCBtb2RlLCBoYXNoIGFnZ3JlZ2F0aW9uIGhhcHBlbnMgaW4gcGhhc2UgMSBh bmQgdGhlIG91dHB1dAorCSAqIGhhcHBlbnMgaW4gcGhhc2UgMC4gU28sIHdlIHN3aXRjaCB0byBw aGFzZSAxIHdoZW4gcHJvY2Vzc2luZyBhIGJhdGNoLAorCSAqIGFuZCBiYWNrIHRvIHBoYXNlIDAg YWZ0ZXIgdGhlIGJhdGNoIGlzIGRvbmUuCisJICovCisJQXNzZXJ0KGFnZ3N0YXRlLT5jdXJyZW50 X3BoYXNlID09IDApOworCWlmIChhZ2dzdGF0ZS0+cGhhc2UtPmFnZ3N0cmF0ZWd5ID09IEFHR19N SVhFRCkKKwl7CisJCWFnZ3N0YXRlLT5jdXJyZW50X3BoYXNlID0gMTsKKwkJYWdnc3RhdGUtPnBo YXNlID0gJmFnZ3N0YXRlLT5waGFzZXNbYWdnc3RhdGUtPmN1cnJlbnRfcGhhc2VdOworCX0KKwor CXNlbGVjdF9jdXJyZW50X3NldChhZ2dzdGF0ZSwgYmF0Y2gtPnNldG5vLCB0cnVlKTsKKworCS8q CisJICogU3BpbGxlZCB0dXBsZXMgYXJlIGFsd2F5cyByZWFkIGJhY2sgYXMgTWluaW1hbFR1cGxl cywgd2hpY2ggbWF5IGJlCisJICogZGlmZmVyZW50IGZyb20gdGhlIG91dGVyIHBsYW4sIHNvIHJl Y29tcGlsZSB0aGUgYWdncmVnYXRlIGV4cHJlc3Npb25zLgorCSAqCisJICogV2Ugc3RpbGwgbmVl ZCB0aGUgTlVMTCBjaGVjaywgYmVjYXVzZSB3ZSBhcmUgb25seSBwcm9jZXNzaW5nIG9uZQorCSAq IGdyb3VwaW5nIHNldCBhdCBhIHRpbWUgYW5kIHRoZSByZXN0IHdpbGwgYmUgTlVMTC4KKwkgKi8K KwloYXNoYWdnX3JlY29tcGlsZV9leHByZXNzaW9ucyhhZ2dzdGF0ZSwgdHJ1ZSwgdHJ1ZSk7CisK KwlMb2dpY2FsVGFwZVJld2luZEZvclJlYWQodGFwZWluZm8tPnRhcGVzZXQsIGJhdGNoLT5pbnB1 dF90YXBlbnVtLAorCQkJCQkJCSBIQVNIQUdHX1JFQURfQlVGRkVSX1NJWkUpOworCWZvciAoOzsp IHsKKwkJVHVwbGVUYWJsZVNsb3QJKnNsb3QgPSBhZ2dzdGF0ZS0+aGFzaF9zcGlsbF9zbG90Owor CQlNaW5pbWFsVHVwbGUJIHR1cGxlOworCQl1aW50MzIJCQkgaGFzaDsKKworCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOworCisJCXR1cGxlID0gaGFzaGFnZ19iYXRjaF9yZWFkKGJhdGNoLCAmaGFz aCk7CisJCWlmICh0dXBsZSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJRXhlY1N0b3JlTWluaW1h bFR1cGxlKHR1cGxlLCBzbG90LCB0cnVlKTsKKwkJYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRf b3V0ZXJ0dXBsZSA9IHNsb3Q7CisKKwkJcHJlcGFyZV9oYXNoX3Nsb3QoYWdnc3RhdGUpOworCQlh Z2dzdGF0ZS0+aGFzaF9wZXJncm91cFtiYXRjaC0+c2V0bm9dID0gbG9va3VwX2hhc2hfZW50cnko YWdnc3RhdGUsIGhhc2gpOworCisJCS8qIGlmIHRoZXJlJ3Mgbm8gbWVtb3J5IGZvciBhIG5ldyBn cm91cCwgc3BpbGwgKi8KKwkJaWYgKGFnZ3N0YXRlLT5oYXNoX3Blcmdyb3VwW2JhdGNoLT5zZXRu b10gPT0gTlVMTCkKKwkJCWhhc2hhZ2dfc3BpbGxfdHVwbGUoJnNwaWxsLCBzbG90LCBoYXNoKTsK KworCQkvKiBBZHZhbmNlIHRoZSBhZ2dyZWdhdGVzIChvciBjb21iaW5lIGZ1bmN0aW9ucykgKi8K KwkJYWR2YW5jZV9hZ2dyZWdhdGVzKGFnZ3N0YXRlKTsKKworCQkvKgorCQkgKiBSZXNldCBwZXIt aW5wdXQtdHVwbGUgY29udGV4dCBhZnRlciBlYWNoIHR1cGxlLCBidXQgbm90ZSB0aGF0IHRoZQor CQkgKiBoYXNoIGxvb2t1cHMgZG8gdGhpcyB0b28KKwkJICovCisJCVJlc2V0RXhwckNvbnRleHQo YWdnc3RhdGUtPnRtcGNvbnRleHQpOworCX0KKworCWhhc2hhZ2dfdGFwZWluZm9fcmVsZWFzZSh0 YXBlaW5mbywgYmF0Y2gtPmlucHV0X3RhcGVudW0pOworCisJLyogY2hhbmdlIGJhY2sgdG8gcGhh c2UgMCAqLworCWFnZ3N0YXRlLT5jdXJyZW50X3BoYXNlID0gMDsKKwlhZ2dzdGF0ZS0+cGhhc2Ug PSAmYWdnc3RhdGUtPnBoYXNlc1thZ2dzdGF0ZS0+Y3VycmVudF9waGFzZV07CisKKwloYXNoX2Fn Z191cGRhdGVfbWV0cmljcyhhZ2dzdGF0ZSwgdHJ1ZSwgc3BpbGwubnBhcnRpdGlvbnMpOworCWhh c2hhZ2dfc3BpbGxfZmluaXNoKGFnZ3N0YXRlLCAmc3BpbGwsIGJhdGNoLT5zZXRubyk7CisJYWdn c3RhdGUtPmhhc2hfc3BpbGxfbW9kZSA9IGZhbHNlOworCisJLyogcHJlcGFyZSB0byB3YWxrIHRo ZSBmaXJzdCBoYXNoIHRhYmxlICovCisJc2VsZWN0X2N1cnJlbnRfc2V0KGFnZ3N0YXRlLCBiYXRj aC0+c2V0bm8sIHRydWUpOworCVJlc2V0VHVwbGVIYXNoSXRlcmF0b3IoYWdnc3RhdGUtPnBlcmhh c2hbYmF0Y2gtPnNldG5vXS5oYXNodGFibGUsCisJCQkJCQkgICAmYWdnc3RhdGUtPnBlcmhhc2hb YmF0Y2gtPnNldG5vXS5oYXNoaXRlcik7CisKKwlwZnJlZShiYXRjaCk7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKwogLyoKICAqIEV4ZWNBZ2cgZm9yIGhhc2hlZCBjYXNlOiByZXRyaWV2aW5nIGdyb3Vw cyBmcm9tIGhhc2ggdGFibGUKKyAqCisgKiBBZnRlciBleGhhdXN0aW5nIGluLW1lbW9yeSB0dXBs ZXMsIGFsc28gdHJ5IHJlZmlsbGluZyB0aGUgaGFzaCB0YWJsZSB1c2luZworICogcHJldmlvdXNs eS1zcGlsbGVkIHR1cGxlcy4gT25seSByZXR1cm5zIE5VTEwgYWZ0ZXIgYWxsIGluLW1lbW9yeSBh bmQKKyAqIHNwaWxsZWQgdHVwbGVzIGFyZSBleGhhdXN0ZWQuCiAgKi8KIHN0YXRpYyBUdXBsZVRh YmxlU2xvdCAqCiBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7 CisJVHVwbGVUYWJsZVNsb3QgKnJlc3VsdCA9IE5VTEw7CisKKwl3aGlsZSAocmVzdWx0ID09IE5V TEwpCisJeworCQlyZXN1bHQgPSBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnkoYWdn c3RhdGUpOworCQlpZiAocmVzdWx0ID09IE5VTEwpCisJCXsKKwkJCWlmICghYWdnX3JlZmlsbF9o YXNoX3RhYmxlKGFnZ3N0YXRlKSkKKwkJCXsKKwkJCQlhZ2dzdGF0ZS0+YWdnX2RvbmUgPSB0cnVl OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoK KyAqIFJldHJpZXZlIHRoZSBncm91cHMgZnJvbSB0aGUgaW4tbWVtb3J5IGhhc2ggdGFibGVzIHdp dGhvdXQgY29uc2lkZXJpbmcgYW55CisgKiBzcGlsbGVkIHR1cGxlcy4KKyAqLworc3RhdGljIFR1 cGxlVGFibGVTbG90ICoKK2FnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeShBZ2dTdGF0 ZSAqYWdnc3RhdGUpCiB7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwogCUFnZ1N0YXRlUGVyQWdn IHBlcmFnZzsKQEAgLTIwMjAsNyArMjY5NCw3IEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFn Z1N0YXRlICphZ2dzdGF0ZSkKIAkgKiBXZSBsb29wIHJldHJpZXZpbmcgZ3JvdXBzIHVudGlsIHdl IGZpbmQgb25lIHNhdGlzZnlpbmcKIAkgKiBhZ2dzdGF0ZS0+c3MucHMucXVhbAogCSAqLwotCXdo aWxlICghYWdnc3RhdGUtPmFnZ19kb25lKQorCWZvciAoOzspCiAJewogCQlUdXBsZVRhYmxlU2xv dCAqaGFzaHNsb3QgPSBwZXJoYXNoLT5oYXNoc2xvdDsKIAkJaW50CQkJaTsKQEAgLTIwNTEsOCAr MjcyNSw2IEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJ CX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBObyBtb3JlIGhhc2h0YWJsZXMsIHNvIGRvbmUgKi8K LQkJCQlhZ2dzdGF0ZS0+YWdnX2RvbmUgPSB0cnVlOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQog CQl9CkBAIC0yMTA5LDYgKzI3ODEsMzE1IEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0 YXRlICphZ2dzdGF0ZSkKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgSGFz aFRhcGVJbmZvCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3RhcGVpbmZvX2luaXQoQWdnU3Rh dGUgKmFnZ3N0YXRlKQoreworCUhhc2hUYXBlSW5mbwkqdGFwZWluZm8JPSBwYWxsb2Moc2l6ZW9m KEhhc2hUYXBlSW5mbykpOworCWludAkJCQkgaW5pdF90YXBlcyA9IDE2OwkvKiBleHBhbmRlZCBk eW5hbWljYWxseSAqLworCisJdGFwZWluZm8tPnRhcGVzZXQgPSBMb2dpY2FsVGFwZVNldENyZWF0 ZShpbml0X3RhcGVzLCBOVUxMLCBOVUxMLCAtMSk7CisJdGFwZWluZm8tPm50YXBlcyA9IGluaXRf dGFwZXM7CisJdGFwZWluZm8tPm5mcmVldGFwZXMgPSBpbml0X3RhcGVzOworCXRhcGVpbmZvLT5m cmVldGFwZXNfYWxsb2MgPSBpbml0X3RhcGVzOworCXRhcGVpbmZvLT5mcmVldGFwZXMgPSBwYWxs b2MoaW5pdF90YXBlcyAqIHNpemVvZihpbnQpKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGluaXRf dGFwZXM7IGkrKykKKwkJdGFwZWluZm8tPmZyZWV0YXBlc1tpXSA9IGk7CisKKwlhZ2dzdGF0ZS0+ aGFzaF90YXBlaW5mbyA9IHRhcGVpbmZvOworfQorCisvKgorICogQXNzaWduIHVudXNlZCB0YXBl cyB0byBzcGlsbCBwYXJ0aXRpb25zLCBleHRlbmRpbmcgdGhlIHRhcGUgc2V0IGlmCisgKiBuZWNl c3NhcnkuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3RhcGVpbmZvX2Fzc2lnbihIYXNoVGFw ZUluZm8gKnRhcGVpbmZvLCBpbnQgKnBhcnRpdGlvbnMsCisJCQkJCQlpbnQgbnBhcnRpdGlvbnMp Cit7CisJaW50IHBhcnRpZHggPSAwOworCisJLyogdXNlIGZyZWUgdGFwZXMgaWYgYXZhaWxhYmxl ICovCisJd2hpbGUgKHBhcnRpZHggPCBucGFydGl0aW9ucyAmJiB0YXBlaW5mby0+bmZyZWV0YXBl cyA+IDApCisJCXBhcnRpdGlvbnNbcGFydGlkeCsrXSA9IHRhcGVpbmZvLT5mcmVldGFwZXNbLS10 YXBlaW5mby0+bmZyZWV0YXBlc107CisKKwlpZiAocGFydGlkeCA8IG5wYXJ0aXRpb25zKQorCXsK KwkJTG9naWNhbFRhcGVTZXRFeHRlbmQodGFwZWluZm8tPnRhcGVzZXQsIG5wYXJ0aXRpb25zIC0g cGFydGlkeCk7CisKKwkJd2hpbGUgKHBhcnRpZHggPCBucGFydGl0aW9ucykKKwkJCXBhcnRpdGlv bnNbcGFydGlkeCsrXSA9IHRhcGVpbmZvLT5udGFwZXMrKzsKKwl9Cit9CisKKy8qCisgKiBBZnRl ciBhIHRhcGUgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuIHRvIGFuZCB0aGVuIHJlYWQsIHRoaXMg ZnVuY3Rpb24KKyAqIHJld2luZHMgaXQgZm9yIHdyaXRpbmcgYW5kIGFkZHMgaXQgdG8gdGhlIGZy ZWUgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hhZ2dfdGFwZWluZm9fcmVsZWFzZShIYXNo VGFwZUluZm8gKnRhcGVpbmZvLCBpbnQgdGFwZW51bSkKK3sKKwlMb2dpY2FsVGFwZVJld2luZEZv cldyaXRlKHRhcGVpbmZvLT50YXBlc2V0LCB0YXBlbnVtKTsKKwlpZiAodGFwZWluZm8tPmZyZWV0 YXBlc19hbGxvYyA9PSB0YXBlaW5mby0+bmZyZWV0YXBlcykKKwl7CisJCXRhcGVpbmZvLT5mcmVl dGFwZXNfYWxsb2MgPDw9IDE7CisJCXRhcGVpbmZvLT5mcmVldGFwZXMgPSByZXBhbGxvYygKKwkJ CXRhcGVpbmZvLT5mcmVldGFwZXMsIHRhcGVpbmZvLT5mcmVldGFwZXNfYWxsb2MgKiBzaXplb2Yo aW50KSk7CisJfQorCXRhcGVpbmZvLT5mcmVldGFwZXNbdGFwZWluZm8tPm5mcmVldGFwZXMrK10g PSB0YXBlbnVtOworfQorCisvKgorICogaGFzaGFnZ19zcGlsbF9pbml0CisgKgorICogQ2FsbGVk IGFmdGVyIHdlIGRldGVybWluZWQgdGhhdCBzcGlsbGluZyBpcyBuZWNlc3NhcnkuIENob29zZXMg dGhlIG51bWJlcgorICogb2YgcGFydGl0aW9ucyB0byBjcmVhdGUsIGFuZCBpbml0aWFsaXplcyB0 aGVtLgorICovCitzdGF0aWMgdm9pZAoraGFzaGFnZ19zcGlsbF9pbml0KEhhc2hBZ2dTcGlsbCAq c3BpbGwsIEhhc2hUYXBlSW5mbyAqdGFwZWluZm8sIGludCB1c2VkX2JpdHMsCisJCQkJICAgdWlu dDY0IGlucHV0X2dyb3VwcywgZG91YmxlIGhhc2hlbnRyeXNpemUpCit7CisJaW50CQlucGFydGl0 aW9uczsKKwlpbnQgICAgIHBhcnRpdGlvbl9iaXRzOworCisJbnBhcnRpdGlvbnMgPSBoYXNoX2No b29zZV9udW1fcGFydGl0aW9ucygKKwkJaW5wdXRfZ3JvdXBzLCBoYXNoZW50cnlzaXplLCB1c2Vk X2JpdHMsICZwYXJ0aXRpb25fYml0cyk7CisKKwlzcGlsbC0+cGFydGl0aW9ucyA9IHBhbGxvYzAo c2l6ZW9mKGludCkgKiBucGFydGl0aW9ucyk7CisJc3BpbGwtPm50dXBsZXMgPSBwYWxsb2MwKHNp emVvZihpbnQ2NCkgKiBucGFydGl0aW9ucyk7CisKKwloYXNoYWdnX3RhcGVpbmZvX2Fzc2lnbih0 YXBlaW5mbywgc3BpbGwtPnBhcnRpdGlvbnMsIG5wYXJ0aXRpb25zKTsKKworCXNwaWxsLT50YXBl c2V0ID0gdGFwZWluZm8tPnRhcGVzZXQ7CisJc3BpbGwtPnNoaWZ0ID0gMzIgLSB1c2VkX2JpdHMg LSBwYXJ0aXRpb25fYml0czsKKwlzcGlsbC0+bWFzayA9IChucGFydGl0aW9ucyAtIDEpIDw8IHNw aWxsLT5zaGlmdDsKKwlzcGlsbC0+bnBhcnRpdGlvbnMgPSBucGFydGl0aW9uczsKK30KKworLyoK KyAqIGhhc2hhZ2dfc3BpbGxfdHVwbGUKKyAqCisgKiBObyByb29tIGZvciBuZXcgZ3JvdXBzIGlu IHRoZSBoYXNoIHRhYmxlLiBTYXZlIGZvciBsYXRlciBpbiB0aGUgYXBwcm9wcmlhdGUKKyAqIHBh cnRpdGlvbi4KKyAqLworc3RhdGljIFNpemUKK2hhc2hhZ2dfc3BpbGxfdHVwbGUoSGFzaEFnZ1Nw aWxsICpzcGlsbCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIHVpbnQzMiBoYXNoKQoreworCUxvZ2lj YWxUYXBlU2V0CQkqdGFwZXNldCA9IHNwaWxsLT50YXBlc2V0OworCWludAkJCQkJIHBhcnRpdGlv bjsKKwlNaW5pbWFsVHVwbGUJCSB0dXBsZTsKKwlpbnQJCQkJCSB0YXBlbnVtOworCWludAkJCQkJ IHRvdGFsX3dyaXR0ZW4gPSAwOworCWJvb2wJCQkJIHNob3VsZEZyZWU7CisKKwlBc3NlcnQoc3Bp bGwtPnBhcnRpdGlvbnMgIT0gTlVMTCk7CisKKwkvKiBYWFg6IG1heSBjb250YWluIHVubmVjZXNz YXJ5IGF0dHJpYnV0ZXMsIHNob3VsZCBwcm9qZWN0ICovCisJdHVwbGUgPSBFeGVjRmV0Y2hTbG90 TWluaW1hbFR1cGxlKHNsb3QsICZzaG91bGRGcmVlKTsKKworCXBhcnRpdGlvbiA9IChoYXNoICYg c3BpbGwtPm1hc2spID4+IHNwaWxsLT5zaGlmdDsKKwlzcGlsbC0+bnR1cGxlc1twYXJ0aXRpb25d Kys7CisKKwl0YXBlbnVtID0gc3BpbGwtPnBhcnRpdGlvbnNbcGFydGl0aW9uXTsKKworCUxvZ2lj YWxUYXBlV3JpdGUodGFwZXNldCwgdGFwZW51bSwgKHZvaWQgKikgJmhhc2gsIHNpemVvZih1aW50 MzIpKTsKKwl0b3RhbF93cml0dGVuICs9IHNpemVvZih1aW50MzIpOworCisJTG9naWNhbFRhcGVX cml0ZSh0YXBlc2V0LCB0YXBlbnVtLCAodm9pZCAqKSB0dXBsZSwgdHVwbGUtPnRfbGVuKTsKKwl0 b3RhbF93cml0dGVuICs9IHR1cGxlLT50X2xlbjsKKworCWlmIChzaG91bGRGcmVlKQorCQlwZnJl ZSh0dXBsZSk7CisKKwlyZXR1cm4gdG90YWxfd3JpdHRlbjsKK30KKworLyoKKyAqIGhhc2hhZ2df YmF0Y2hfbmV3CisgKgorICogQ29uc3RydWN0IGEgSGFzaEFnZ0JhdGNoIGl0ZW0sIHdoaWNoIHJl cHJlc2VudHMgb25lIGl0ZXJhdGlvbiBvZiBIYXNoQWdnIHRvCisgKiBiZSBkb25lLgorICovCitz dGF0aWMgSGFzaEFnZ0JhdGNoICoKK2hhc2hhZ2dfYmF0Y2hfbmV3KExvZ2ljYWxUYXBlU2V0ICp0 YXBlc2V0LCBpbnQgdGFwZW51bSwgaW50IHNldG5vLAorCQkJCSAgaW50NjQgaW5wdXRfdHVwbGVz LCBpbnQgdXNlZF9iaXRzKQoreworCUhhc2hBZ2dCYXRjaCAqYmF0Y2ggPSBwYWxsb2MwKHNpemVv ZihIYXNoQWdnQmF0Y2gpKTsKKworCWJhdGNoLT5zZXRubyA9IHNldG5vOworCWJhdGNoLT51c2Vk X2JpdHMgPSB1c2VkX2JpdHM7CisJYmF0Y2gtPnRhcGVzZXQgPSB0YXBlc2V0OworCWJhdGNoLT5p bnB1dF90YXBlbnVtID0gdGFwZW51bTsKKwliYXRjaC0+aW5wdXRfdHVwbGVzID0gaW5wdXRfdHVw bGVzOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogcmVhZF9zcGlsbGVkX3R1cGxlCisg KiAJCXJlYWQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIGJhdGNoIGZpbGUuICBSZXR1cm4gTlVMTCBp ZiBubyBtb3JlLgorICovCitzdGF0aWMgTWluaW1hbFR1cGxlCitoYXNoYWdnX2JhdGNoX3JlYWQo SGFzaEFnZ0JhdGNoICpiYXRjaCwgdWludDMyICpoYXNocCkKK3sKKwlMb2dpY2FsVGFwZVNldCAq dGFwZXNldCA9IGJhdGNoLT50YXBlc2V0OworCWludAkJCQl0YXBlbnVtID0gYmF0Y2gtPmlucHV0 X3RhcGVudW07CisJTWluaW1hbFR1cGxlCXR1cGxlOworCXVpbnQzMgkJCXRfbGVuOworCXNpemVf dAkJCW5yZWFkOworCXVpbnQzMgkJCWhhc2g7CisKKwlucmVhZCA9IExvZ2ljYWxUYXBlUmVhZCh0 YXBlc2V0LCB0YXBlbnVtLCAmaGFzaCwgc2l6ZW9mKHVpbnQzMikpOworCWlmIChucmVhZCA9PSAw KQorCQlyZXR1cm4gTlVMTDsKKwlpZiAobnJlYWQgIT0gc2l6ZW9mKHVpbnQzMikpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygi dW5leHBlY3RlZCBFT0YgZm9yIHRhcGUgJWQ6IHJlcXVlc3RlZCAlenUgYnl0ZXMsIHJlYWQgJXp1 IGJ5dGVzIiwKKwkJCQkJCXRhcGVudW0sIHNpemVvZih1aW50MzIpLCBucmVhZCkpKTsKKwlpZiAo aGFzaHAgIT0gTlVMTCkKKwkJKmhhc2hwID0gaGFzaDsKKworCW5yZWFkID0gTG9naWNhbFRhcGVS ZWFkKHRhcGVzZXQsIHRhcGVudW0sICZ0X2xlbiwgc2l6ZW9mKHRfbGVuKSk7CisJaWYgKG5yZWFk ICE9IHNpemVvZih1aW50MzIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coInVuZXhwZWN0ZWQgRU9GIGZvciB0YXBlICVkOiBy ZXF1ZXN0ZWQgJXp1IGJ5dGVzLCByZWFkICV6dSBieXRlcyIsCisJCQkJCQl0YXBlbnVtLCBzaXpl b2YodWludDMyKSwgbnJlYWQpKSk7CisKKwl0dXBsZSA9IChNaW5pbWFsVHVwbGUpIHBhbGxvYyh0 X2xlbik7CisJdHVwbGUtPnRfbGVuID0gdF9sZW47CisKKwlucmVhZCA9IExvZ2ljYWxUYXBlUmVh ZCh0YXBlc2V0LCB0YXBlbnVtLAorCQkJCQkJCSh2b2lkICopKChjaGFyICopdHVwbGUgKyBzaXpl b2YodWludDMyKSksCisJCQkJCQkJdF9sZW4gLSBzaXplb2YodWludDMyKSk7CisJaWYgKG5yZWFk ICE9IHRfbGVuIC0gc2l6ZW9mKHVpbnQzMikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygidW5leHBlY3RlZCBFT0YgZm9yIHRh cGUgJWQ6IHJlcXVlc3RlZCAlenUgYnl0ZXMsIHJlYWQgJXp1IGJ5dGVzIiwKKwkJCQkJCXRhcGVu dW0sIHRfbGVuIC0gc2l6ZW9mKHVpbnQzMiksIG5yZWFkKSkpOworCisJcmV0dXJuIHR1cGxlOwor fQorCisvKgorICogaGFzaGFnZ19maW5pc2hfaW5pdGlhbF9zcGlsbHMKKyAqCisgKiBBZnRlciBh IEhhc2hBZ2dCYXRjaCBoYXMgYmVlbiBwcm9jZXNzZWQsIGl0IG1heSBoYXZlIHNwaWxsZWQgdHVw bGVzIHRvCisgKiBkaXNrLiBJZiBzbywgdHVybiB0aGUgc3BpbGxlZCBwYXJ0aXRpb25zIGludG8g bmV3IGJhdGNoZXMgdGhhdCBtdXN0IGxhdGVyCisgKiBiZSBleGVjdXRlZC4KKyAqLworc3RhdGlj IHZvaWQKK2hhc2hhZ2dfZmluaXNoX2luaXRpYWxfc3BpbGxzKEFnZ1N0YXRlICphZ2dzdGF0ZSkK K3sKKwlpbnQgc2V0bm87CisJaW50IHRvdGFsX25wYXJ0aXRpb25zID0gMDsKKworCWlmIChhZ2dz dGF0ZS0+aGFzaF9zcGlsbHMgIT0gTlVMTCkKKwl7CisJCWZvciAoc2V0bm8gPSAwOyBzZXRubyA8 IGFnZ3N0YXRlLT5udW1faGFzaGVzOyBzZXRubysrKQorCQl7CisJCQlIYXNoQWdnU3BpbGwgKnNw aWxsID0gJmFnZ3N0YXRlLT5oYXNoX3NwaWxsc1tzZXRub107CisJCQl0b3RhbF9ucGFydGl0aW9u cyArPSBzcGlsbC0+bnBhcnRpdGlvbnM7CisJCQloYXNoYWdnX3NwaWxsX2ZpbmlzaChhZ2dzdGF0 ZSwgc3BpbGwsIHNldG5vKTsKKwkJfQorCisJCS8qCisJCSAqIFdlJ3JlIG5vdCBwcm9jZXNzaW5n IHR1cGxlcyBmcm9tIG91dGVyIHBsYW4gYW55IG1vcmU7IG9ubHkKKwkJICogcHJvY2Vzc2luZyBi YXRjaGVzIG9mIHNwaWxsZWQgdHVwbGVzLiBUaGUgaW5pdGlhbCBzcGlsbCBzdHJ1Y3R1cmVzCisJ CSAqIGFyZSBubyBsb25nZXIgbmVlZGVkLgorCQkgKi8KKwkJcGZyZWUoYWdnc3RhdGUtPmhhc2hf c3BpbGxzKTsKKwkJYWdnc3RhdGUtPmhhc2hfc3BpbGxzID0gTlVMTDsKKwl9CisKKwloYXNoX2Fn Z191cGRhdGVfbWV0cmljcyhhZ2dzdGF0ZSwgZmFsc2UsIHRvdGFsX25wYXJ0aXRpb25zKTsKKwlh Z2dzdGF0ZS0+aGFzaF9zcGlsbF9tb2RlID0gZmFsc2U7Cit9CisKKy8qCisgKiBoYXNoYWdnX3Nw aWxsX2ZpbmlzaAorICoKKyAqIFRyYW5zZm9ybSBzcGlsbCBwYXJ0aXRpb25zIGludG8gbmV3IGJh dGNoZXMuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3NwaWxsX2ZpbmlzaChBZ2dTdGF0ZSAq YWdnc3RhdGUsIEhhc2hBZ2dTcGlsbCAqc3BpbGwsIGludCBzZXRubykKK3sKKwlpbnQgaTsKKwlp bnQgdXNlZF9iaXRzID0gMzIgLSBzcGlsbC0+c2hpZnQ7CisKKwlpZiAoc3BpbGwtPm5wYXJ0aXRp b25zID09IDApCisJCXJldHVybjsJLyogZGlkbid0IHNwaWxsICovCisKKwlmb3IgKGkgPSAwOyBp IDwgc3BpbGwtPm5wYXJ0aXRpb25zOyBpKyspCisJeworCQlpbnQJCQkJIHRhcGVudW0gPSBzcGls bC0+cGFydGl0aW9uc1tpXTsKKwkJSGFzaEFnZ0JhdGNoICAgICpuZXdfYmF0Y2g7CisKKwkJLyog aWYgdGhlIHBhcnRpdGlvbiBpcyBlbXB0eSwgZG9uJ3QgY3JlYXRlIGEgbmV3IGJhdGNoIG9mIHdv cmsgKi8KKwkJaWYgKHNwaWxsLT5udHVwbGVzW2ldID09IDApCisJCQljb250aW51ZTsKKworCQlu ZXdfYmF0Y2ggPSBoYXNoYWdnX2JhdGNoX25ldyhhZ2dzdGF0ZS0+aGFzaF90YXBlaW5mby0+dGFw ZXNldCwKKwkJCQkJCQkJCSAgdGFwZW51bSwgc2V0bm8sIHNwaWxsLT5udHVwbGVzW2ldLAorCQkJ CQkJCQkJICB1c2VkX2JpdHMpOworCQlhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzID0gbGNvbnMobmV3 X2JhdGNoLCBhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzKTsKKwkJYWdnc3RhdGUtPmhhc2hfYmF0Y2hl c191c2VkKys7CisJfQorCisJcGZyZWUoc3BpbGwtPm50dXBsZXMpOworCXBmcmVlKHNwaWxsLT5w YXJ0aXRpb25zKTsKK30KKworLyoKKyAqIEZyZWUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gYSBzcGls bGVkIEhhc2hBZ2cuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3Jlc2V0X3NwaWxsX3N0YXRl KEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlMaXN0Q2VsbCAqbGM7CisKKwkvKiBmcmVlIHNwaWxs cyBmcm9tIGluaXRpYWwgcGFzcyAqLworCWlmIChhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgIT0gTlVM TCkKKwl7CisJCWludCBzZXRubzsKKworCQlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0 ZS0+bnVtX2hhc2hlczsgc2V0bm8rKykKKwkJeworCQkJSGFzaEFnZ1NwaWxsICpzcGlsbCA9ICZh Z2dzdGF0ZS0+aGFzaF9zcGlsbHNbc2V0bm9dOworCQkJaWYgKHNwaWxsLT5udHVwbGVzICE9IE5V TEwpCisJCQkJcGZyZWUoc3BpbGwtPm50dXBsZXMpOworCQkJaWYgKHNwaWxsLT5wYXJ0aXRpb25z ICE9IE5VTEwpCisJCQkJcGZyZWUoc3BpbGwtPnBhcnRpdGlvbnMpOworCQl9CisJCXBmcmVlKGFn Z3N0YXRlLT5oYXNoX3NwaWxscyk7CisJCWFnZ3N0YXRlLT5oYXNoX3NwaWxscyA9IE5VTEw7CisJ fQorCisJLyogZnJlZSBiYXRjaGVzICovCisJZm9yZWFjaChsYywgYWdnc3RhdGUtPmhhc2hfYmF0 Y2hlcykKKwl7CisJCUhhc2hBZ2dCYXRjaCAqYmF0Y2ggPSAoSGFzaEFnZ0JhdGNoKikgbGZpcnN0 KGxjKTsKKwkJcGZyZWUoYmF0Y2gpOworCX0KKwlsaXN0X2ZyZWUoYWdnc3RhdGUtPmhhc2hfYmF0 Y2hlcyk7CisJYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyA9IE5JTDsKKworCS8qIGNsb3NlIHRhcGUg c2V0ICovCisJaWYgKGFnZ3N0YXRlLT5oYXNoX3RhcGVpbmZvICE9IE5VTEwpCisJeworCQlIYXNo VGFwZUluZm8JKnRhcGVpbmZvID0gYWdnc3RhdGUtPmhhc2hfdGFwZWluZm87CisKKwkJTG9naWNh bFRhcGVTZXRDbG9zZSh0YXBlaW5mby0+dGFwZXNldCk7CisJCXBmcmVlKHRhcGVpbmZvLT5mcmVl dGFwZXMpOworCQlwZnJlZSh0YXBlaW5mbyk7CisJCWFnZ3N0YXRlLT5oYXNoX3RhcGVpbmZvID0g TlVMTDsKKwl9Cit9CisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0KICAqIEV4ZWNJbml0QWdnCiAg KgpAQCAtMjUxOCw5ICszNDk5LDM2IEBAIEV4ZWNJbml0QWdnKEFnZyAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJICovCiAJaWYgKHVzZV9oYXNoaW5nKQogCXsKKwkJUGxhbiAg ICpvdXRlcnBsYW4gPSBvdXRlclBsYW4obm9kZSk7CisJCXVpbnQ2NAl0b3RhbEdyb3VwcyA9IDA7 CisJCWludCAJaTsKKworCQlhZ2dzdGF0ZS0+aGFzaF9tZXRhY3h0ID0gQWxsb2NTZXRDb250ZXh0 Q3JlYXRlKAorCQkJYWdnc3RhdGUtPnNzLnBzLnN0YXRlLT5lc19xdWVyeV9jeHQsCisJCQkiSGFz aEFnZyBtZXRhIGNvbnRleHQiLAorCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCWFnZ3N0 YXRlLT5oYXNoX3NwaWxsX3Nsb3QgPSBFeGVjSW5pdEV4dHJhVHVwbGVTbG90KAorCQkJZXN0YXRl LCBzY2FuRGVzYywgJlRUU09wc01pbmltYWxUdXBsZSk7CisKIAkJLyogdGhpcyBpcyBhbiBhcnJh eSBvZiBwb2ludGVycywgbm90IHN0cnVjdHVyZXMgKi8KIAkJYWdnc3RhdGUtPmhhc2hfcGVyZ3Jv dXAgPSBwZXJncm91cHM7CiAKKwkJYWdnc3RhdGUtPmhhc2hlbnRyeXNpemUgPSBoYXNoX2FnZ19l bnRyeV9zaXplKAorCQkJYWdnc3RhdGUtPm51bXRyYW5zLCBvdXRlcnBsYW4tPnBsYW5fd2lkdGgs IG5vZGUtPnRyYW5zaXRpb25TcGFjZSk7CisKKwkJLyoKKwkJICogQ29uc2lkZXIgYWxsIG9mIHRo ZSBncm91cGluZyBzZXRzIHRvZ2V0aGVyIHdoZW4gc2V0dGluZyB0aGUgbGltaXRzCisJCSAqIGFu ZCBlc3RpbWF0aW5nIHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucy4gVGhpcyBjYW4gYmUgaW5hY2N1 cmF0ZQorCQkgKiB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZ3JvdXBpbmcgc2V0LCBidXQg c2hvdWxkIHN0aWxsIGJlCisJCSAqIHJlYXNvbmFibGUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBp IDwgYWdnc3RhdGUtPm51bV9oYXNoZXM7IGkrKykKKwkJCXRvdGFsR3JvdXBzID0gYWdnc3RhdGUt PnBlcmhhc2hbaV0uYWdnbm9kZS0+bnVtR3JvdXBzOworCisJCWhhc2hfYWdnX3NldF9saW1pdHMo YWdnc3RhdGUtPmhhc2hlbnRyeXNpemUsIHRvdGFsR3JvdXBzLCAwLAorCQkJCQkJCSZhZ2dzdGF0 ZS0+aGFzaF9tZW1fbGltaXQsCisJCQkJCQkJJmFnZ3N0YXRlLT5oYXNoX25ncm91cHNfbGltaXQs CisJCQkJCQkJJmFnZ3N0YXRlLT5oYXNoX3BsYW5uZWRfcGFydGl0aW9ucyk7CiAJCWZpbmRfaGFz aF9jb2x1bW5zKGFnZ3N0YXRlKTsKIAkJYnVpbGRfaGFzaF90YWJsZXMoYWdnc3RhdGUpOwogCQlh Z2dzdGF0ZS0+dGFibGVfZmlsbGVkID0gZmFsc2U7CkBAIC0yOTMxLDYgKzM5MzksOCBAQCBFeGVj SW5pdEFnZyhBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQlwaGFzZS0+ ZXZhbHRyYW5zID0gRXhlY0J1aWxkQWdnVHJhbnMoYWdnc3RhdGUsIHBoYXNlLCBkb3NvcnQsIGRv aGFzaCwKIAkJCQkJCQkJCQkJIGZhbHNlKTsKIAorCQkvKiBjYWNoZSBjb21waWxlZCBleHByZXNz aW9uIGZvciBvdXRlciBzbG90IHdpdGhvdXQgTlVMTCBjaGVjayAqLworCQlwaGFzZS0+ZXZhbHRy YW5zX2NhY2hlWzBdWzBdID0gcGhhc2UtPmV2YWx0cmFuczsKIAl9CiAKIAlyZXR1cm4gYWdnc3Rh dGU7CkBAIC0zNDI0LDYgKzQ0MzQsMTQgQEAgRXhlY0VuZEFnZyhBZ2dTdGF0ZSAqbm9kZSkKIAlp ZiAobm9kZS0+c29ydF9vdXQpCiAJCXR1cGxlc29ydF9lbmQobm9kZS0+c29ydF9vdXQpOwogCisJ aGFzaGFnZ19yZXNldF9zcGlsbF9zdGF0ZShub2RlKTsKKworCWlmIChub2RlLT5oYXNoX21ldGFj eHQgIT0gTlVMTCkKKwl7CisJCU1lbW9yeUNvbnRleHREZWxldGUobm9kZS0+aGFzaF9tZXRhY3h0 KTsKKwkJbm9kZS0+aGFzaF9tZXRhY3h0ID0gTlVMTDsKKwl9CisKIAlmb3IgKHRyYW5zbm8gPSAw OyB0cmFuc25vIDwgbm9kZS0+bnVtdHJhbnM7IHRyYW5zbm8rKykKIAl7CiAJCUFnZ1N0YXRlUGVy VHJhbnMgcGVydHJhbnMgPSAmbm9kZS0+cGVydHJhbnNbdHJhbnNub107CkBAIC0zNDc5LDEyICs0 NDk3LDEzIEBAIEV4ZWNSZVNjYW5BZ2coQWdnU3RhdGUgKm5vZGUpCiAJCQlyZXR1cm47CiAKIAkJ LyoKLQkJICogSWYgd2UgZG8gaGF2ZSB0aGUgaGFzaCB0YWJsZSwgYW5kIHRoZSBzdWJwbGFuIGRv ZXMgbm90IGhhdmUgYW55Ci0JCSAqIHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQgbm9uZSBvZiBvdXIg b3duIHBhcmFtZXRlciBjaGFuZ2VzIGFmZmVjdAotCQkgKiBpbnB1dCBleHByZXNzaW9ucyBvZiB0 aGUgYWdncmVnYXRlZCBmdW5jdGlvbnMsIHRoZW4gd2UgY2FuIGp1c3QKLQkJICogcmVzY2FuIHRo ZSBleGlzdGluZyBoYXNoIHRhYmxlOyBubyBuZWVkIHRvIGJ1aWxkIGl0IGFnYWluLgorCQkgKiBJ ZiB3ZSBkbyBoYXZlIHRoZSBoYXNoIHRhYmxlLCBhbmQgaXQgbmV2ZXIgc3BpbGxlZCwgYW5kIHRo ZSBzdWJwbGFuCisJCSAqIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQg bm9uZSBvZiBvdXIgb3duIHBhcmFtZXRlcgorCQkgKiBjaGFuZ2VzIGFmZmVjdCBpbnB1dCBleHBy ZXNzaW9ucyBvZiB0aGUgYWdncmVnYXRlZCBmdW5jdGlvbnMsIHRoZW4KKwkJICogd2UgY2FuIGp1 c3QgcmVzY2FuIHRoZSBleGlzdGluZyBoYXNoIHRhYmxlOyBubyBuZWVkIHRvIGJ1aWxkIGl0CisJ CSAqIGFnYWluLgogCQkgKi8KLQkJaWYgKG91dGVyUGxhbi0+Y2hnUGFyYW0gPT0gTlVMTCAmJgor CQlpZiAob3V0ZXJQbGFuLT5jaGdQYXJhbSA9PSBOVUxMICYmICFub2RlLT5oYXNoX2V2ZXJfc3Bp bGxlZCAmJgogCQkJIWJtc19vdmVybGFwKG5vZGUtPnNzLnBzLmNoZ1BhcmFtLCBhZ2dub2RlLT5h Z2dQYXJhbXMpKQogCQl7CiAJCQlSZXNldFR1cGxlSGFzaEl0ZXJhdG9yKG5vZGUtPnBlcmhhc2hb MF0uaGFzaHRhYmxlLApAQCAtMzU0MSwxMSArNDU2MCwxOSBAQCBFeGVjUmVTY2FuQWdnKEFnZ1N0 YXRlICpub2RlKQogCSAqLwogCWlmIChub2RlLT5hZ2dzdHJhdGVneSA9PSBBR0dfSEFTSEVEIHx8 IG5vZGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCkKIAl7CisJCWhhc2hhZ2dfcmVzZXRfc3Bp bGxfc3RhdGUobm9kZSk7CisKKwkJbm9kZS0+aGFzaF9ldmVyX3NwaWxsZWQgPSBmYWxzZTsKKwkJ bm9kZS0+aGFzaF9zcGlsbF9tb2RlID0gZmFsc2U7CisJCW5vZGUtPmhhc2hfbmdyb3Vwc19jdXJy ZW50ID0gMDsKKwogCQlSZVNjYW5FeHByQ29udGV4dChub2RlLT5oYXNoY29udGV4dCk7CiAJCS8q IFJlYnVpbGQgYW4gZW1wdHkgaGFzaCB0YWJsZSAqLwogCQlidWlsZF9oYXNoX3RhYmxlcyhub2Rl KTsKIAkJbm9kZS0+dGFibGVfZmlsbGVkID0gZmFsc2U7CiAJCS8qIGl0ZXJhdG9yIHdpbGwgYmUg cmVzZXQgd2hlbiB0aGUgdGFibGUgaXMgZmlsbGVkICovCisKKwkJaGFzaGFnZ19yZWNvbXBpbGVf ZXhwcmVzc2lvbnMobm9kZSwgZmFsc2UsIGZhbHNlKTsKIAl9CiAKIAlpZiAobm9kZS0+YWdnc3Ry YXRlZ3kgIT0gQUdHX0hBU0hFRCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmlu ZGV4IGI1YTAwMzM3MjFmLi44Y2Y2OTRiNjFkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9j b3N0c2l6ZS5jCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWls cy5oIgogI2luY2x1ZGUgImFjY2Vzcy90c21hcGkuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVj dXRvci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBZ2cuaCIKICNpbmNsdWRlICJleGVjdXRv ci9ub2RlSGFzaC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21h a2VmdW5jcy5oIgpAQCAtMTI4LDYgKzEyOSw4IEBAIGJvb2wJCWVuYWJsZV9iaXRtYXBzY2FuID0g dHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9zb3J0ID0g dHJ1ZTsKIGJvb2wJCWVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9oYXNoYWdn X2Rpc2sgPSB0cnVlOworYm9vbAkJZW5hYmxlX2dyb3VwaW5nc2V0c19oYXNoX2Rpc2sgPSBmYWxz ZTsKIGJvb2wJCWVuYWJsZV9uZXN0bG9vcCA9IHRydWU7CiBib29sCQllbmFibGVfbWF0ZXJpYWwg PSB0cnVlOwogYm9vbAkJZW5hYmxlX21lcmdlam9pbiA9IHRydWU7CkBAIC0yMTUzLDcgKzIxNTYs NyBAQCBjb3N0X2FnZyhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJIGludCBudW1H cm91cENvbHMsIGRvdWJsZSBudW1Hcm91cHMsCiAJCSBMaXN0ICpxdWFscywKIAkJIENvc3QgaW5w dXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCi0JCSBkb3VibGUgaW5wdXRf dHVwbGVzKQorCQkgZG91YmxlIGlucHV0X3R1cGxlcywgZG91YmxlIGlucHV0X3dpZHRoKQogewog CWRvdWJsZQkJb3V0cHV0X3R1cGxlczsKIAlDb3N0CQlzdGFydHVwX2Nvc3Q7CkBAIC0yMjI4LDE0 ICsyMjMxLDc5IEBAIGNvc3RfYWdnKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJ c3RhcnR1cF9jb3N0ICs9IGRpc2FibGVfY29zdDsKIAkJc3RhcnR1cF9jb3N0ICs9IGFnZ2Nvc3Rz LT50cmFuc0Nvc3Quc3RhcnR1cDsKIAkJc3RhcnR1cF9jb3N0ICs9IGFnZ2Nvc3RzLT50cmFuc0Nv c3QucGVyX3R1cGxlICogaW5wdXRfdHVwbGVzOworCQkvKiBjb3N0IG9mIGNvbXB1dGluZyBoYXNo IHZhbHVlICovCiAJCXN0YXJ0dXBfY29zdCArPSAoY3B1X29wZXJhdG9yX2Nvc3QgKiBudW1Hcm91 cENvbHMpICogaW5wdXRfdHVwbGVzOwogCQlzdGFydHVwX2Nvc3QgKz0gYWdnY29zdHMtPmZpbmFs Q29zdC5zdGFydHVwOworCiAJCXRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJCXRvdGFsX2Nv c3QgKz0gYWdnY29zdHMtPmZpbmFsQ29zdC5wZXJfdHVwbGUgKiBudW1Hcm91cHM7CisJCS8qIGNv c3Qgb2YgcmV0cmlldmluZyBmcm9tIGhhc2ggdGFibGUgKi8KIAkJdG90YWxfY29zdCArPSBjcHVf dHVwbGVfY29zdCAqIG51bUdyb3VwczsKIAkJb3V0cHV0X3R1cGxlcyA9IG51bUdyb3VwczsKIAl9 CiAKKwkvKgorCSAqIEFkZCB0aGUgZGlzayBjb3N0cyBvZiBoYXNoIGFnZ3JlZ2F0aW9uIHRoYXQg c3BpbGxzIHRvIGRpc2suCisJICoKKwkgKiBHcm91cHMgdGhhdCBnbyBpbnRvIHRoZSBoYXNoIHRh YmxlIHN0YXkgaW4gbWVtb3J5IHVudGlsIGZpbmFsaXplZCwKKwkgKiBzbyBzcGlsbGluZyBhbmQg cmVwcm9jZXNzaW5nIHR1cGxlcyBkb2Vzbid0IGluY3VyIGFkZGl0aW9uYWwKKwkgKiBpbnZvY2F0 aW9ucyBvZiB0cmFuc0Nvc3Qgb3IgZmluYWxDb3N0LiBGdXJ0aGVybW9yZSwgdGhlIGNvbXB1dGVk CisJICogaGFzaCB2YWx1ZSBpcyBzdG9yZWQgd2l0aCB0aGUgc3BpbGxlZCB0dXBsZXMsIHNvIHdl IGRvbid0IGluY3VyCisJICogZXh0cmEgaW52b2NhdGlvbnMgb2YgdGhlIGhhc2ggZnVuY3Rpb24u CisJICoKKwkgKiBIYXNoIEFnZyBiZWdpbnMgcmV0dXJuaW5nIHR1cGxlcyBhZnRlciB0aGUgZmly c3QgYmF0Y2ggaXMKKwkgKiBjb21wbGV0ZS4gQWNjcnVlIHdyaXRlcyAoc3BpbGxlZCB0dXBsZXMp IHRvIHN0YXJ0dXBfY29zdCBhbmQgdG8KKwkgKiB0b3RhbF9jb3N0OyBhY2NydWUgcmVhZHMgb25s eSB0byB0b3RhbF9jb3N0LgorCSAqLworCWlmIChhZ2dzdHJhdGVneSA9PSBBR0dfSEFTSEVEIHx8 IGFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCkKKwl7CisJCWRvdWJsZQlwYWdlc193cml0dGVuID0g MC4wOworCQlkb3VibGUJcGFnZXNfcmVhZAkgID0gMC4wOworCQlkb3VibGUJaGFzaGVudHJ5c2l6 ZTsKKwkJZG91YmxlCW5iYXRjaGVzOworCQlTaXplCW1lbV9saW1pdDsKKwkJdWludDY0CW5ncm91 cHNfbGltaXQ7CisJCWludAkJbnVtX3BhcnRpdGlvbnM7CisKKworCQkvKgorCQkgKiBFc3RpbWF0 ZSBudW1iZXIgb2YgYmF0Y2hlcyBiYXNlZCBvbiB0aGUgY29tcHV0ZWQgbGltaXRzLiBJZiBsZXNz CisJCSAqIHRoYW4gb3IgZXF1YWwgdG8gb25lLCBhbGwgZ3JvdXBzIGFyZSBleHBlY3RlZCB0byBm aXQgaW4gbWVtb3J5OworCQkgKiBvdGhlcndpc2Ugd2UgZXhwZWN0IHRvIHNwaWxsLgorCQkgKi8K KwkJaGFzaGVudHJ5c2l6ZSA9IGhhc2hfYWdnX2VudHJ5X3NpemUoCisJCQlhZ2djb3N0cy0+bnVt QWdncywgaW5wdXRfd2lkdGgsIGFnZ2Nvc3RzLT50cmFuc2l0aW9uU3BhY2UpOworCQloYXNoX2Fn Z19zZXRfbGltaXRzKGhhc2hlbnRyeXNpemUsIG51bUdyb3VwcywgMCwgJm1lbV9saW1pdCwKKwkJ CQkJCQkmbmdyb3Vwc19saW1pdCwgJm51bV9wYXJ0aXRpb25zKTsKKworCQluYmF0Y2hlcyA9IE1h eCggKG51bUdyb3VwcyAqIGhhc2hlbnRyeXNpemUpIC8gbWVtX2xpbWl0LAorCQkJCQkJbnVtR3Jv dXBzIC8gbmdyb3Vwc19saW1pdCApOworCisJCS8qCisJCSAqIEVzdGltYXRlIG51bWJlciBvZiBw YWdlcyByZWFkIGFuZCB3cml0dGVuLiBGb3IgZWFjaCBsZXZlbCBvZgorCQkgKiByZWN1cnNpb24s IGEgdHVwbGUgbXVzdCBiZSB3cml0dGVuIGFuZCB0aGVuIGxhdGVyIHJlYWQuCisJCSAqLworCQlp ZiAobmJhdGNoZXMgPiAxLjApCisJCXsKKwkJCWRvdWJsZSBkZXB0aDsKKwkJCWRvdWJsZSBwYWdl czsKKworCQkJcGFnZXMgPSByZWxhdGlvbl9ieXRlX3NpemUoaW5wdXRfdHVwbGVzLCBpbnB1dF93 aWR0aCkgLyBCTENLU1o7CisKKwkJCS8qCisJCQkgKiBUaGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMg Y2FuIGNoYW5nZSBhdCBkaWZmZXJlbnQgbGV2ZWxzIG9mCisJCQkgKiByZWN1cnNpb247IGJ1dCBm b3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgY2FsY3VsYXRpb24gYXNzdW1lIGl0CisJCQkgKiBzdGF5 cyBjb25zdGFudC4KKwkJCSAqLworCQkJZGVwdGggPSBjZWlsKCBsb2cobmJhdGNoZXMgLSAxKSAv IGxvZyhudW1fcGFydGl0aW9ucykgKTsKKwkJCXBhZ2VzX3dyaXR0ZW4gPSBwYWdlc19yZWFkID0g cGFnZXMgKiBkZXB0aDsKKwkJfQorCisJCXN0YXJ0dXBfY29zdCArPSBwYWdlc193cml0dGVuICog cmFuZG9tX3BhZ2VfY29zdDsKKwkJdG90YWxfY29zdCArPSBwYWdlc193cml0dGVuICogcmFuZG9t X3BhZ2VfY29zdDsKKwkJdG90YWxfY29zdCArPSBwYWdlc19yZWFkICogc2VxX3BhZ2VfY29zdDsK Kwl9CisKIAkvKgogCSAqIElmIHRoZXJlIGFyZSBxdWFscyAoSEFWSU5HIHF1YWxzKSwgYWNjb3Vu dCBmb3IgdGhlaXIgY29zdCBhbmQKIAkgKiBzZWxlY3Rpdml0eS4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYwppbmRleCBiNDRlZmQ2MzE0Yy4uZWIyNWMyZjQ3MDcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTQyNTgsMTEgKzQyNTgsMTIgQEAgY29uc2lkZXJf Z3JvdXBpbmdzZXRzX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkgIGROdW1H cm91cHMgLSBleGNsdWRlX2dyb3Vwcyk7CiAKIAkJLyoKLQkJICogZ2QtPnJvbGx1cHMgaXMgZW1w dHkgaWYgd2UgaGF2ZSBvbmx5IHVuc29ydGFibGUgY29sdW1ucyB0byB3b3JrCi0JCSAqIHdpdGgu ICBPdmVycmlkZSB3b3JrX21lbSBpbiB0aGF0IGNhc2U7IG90aGVyd2lzZSwgd2UnbGwgcmVseSBv biB0aGUKLQkJICogc29ydGVkLWlucHV0IGNhc2UgdG8gZ2VuZXJhdGUgdXNhYmxlIG1peGVkIHBh dGhzLgorCQkgKiBJZiB3ZSBoYXZlIHNvcnRhYmxlIGNvbHVtbnMgdG8gd29yayB3aXRoIChnZC0+ cm9sbHVwcyBpcyBub24tZW1wdHkpCisJCSAqIGFuZCBlbmFibGVfZ3JvdXBpbmdzZXRzX2hhc2hf ZGlzayBpcyBkaXNhYmxlZCwgZG9uJ3QgZ2VuZXJhdGUKKwkJICogaGFzaC1iYXNlZCBwYXRocyB0 aGF0IHdpbGwgZXhjZWVkIHdvcmtfbWVtLgogCQkgKi8KLQkJaWYgKGhhc2hzaXplID4gd29ya19t ZW0gKiAxMDI0TCAmJiBnZC0+cm9sbHVwcykKKwkJaWYgKCFlbmFibGVfZ3JvdXBpbmdzZXRzX2hh c2hfZGlzayAmJgorCQkJaGFzaHNpemUgPiB3b3JrX21lbSAqIDEwMjRMICYmIGdkLT5yb2xsdXBz KQogCQkJcmV0dXJuOwkJCQkvKiBub3BlLCB3b24ndCBmaXQgKi8KIAogCQkvKgpAQCAtNjUyOCw3 ICs2NTI5LDggQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJICogd2VyZSB1bmFibGUgdG8gc29ydCBhYm92ZSwg dGhlbiB3ZSdkIGJldHRlciBnZW5lcmF0ZSBhIFBhdGgsIHNvCiAJCQkgKiB0aGF0IHdlIGF0IGxl YXN0IGhhdmUgb25lLgogCQkJICovCi0JCQlpZiAoaGFzaGFnZ3RhYmxlc2l6ZSA8IHdvcmtfbWVt ICogMTAyNEwgfHwKKwkJCWlmIChlbmFibGVfaGFzaGFnZ19kaXNrIHx8CisJCQkJaGFzaGFnZ3Rh Ymxlc2l6ZSA8IHdvcmtfbWVtICogMTAyNEwgfHwKIAkJCQlncm91cGVkX3JlbC0+cGF0aGxpc3Qg PT0gTklMKQogCQkJewogCQkJCS8qCkBAIC02NTYxLDcgKzY1NjMsOCBAQCBhZGRfcGF0aHNfdG9f Z3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJ CQkJCQkJCQkJCQkJCSAgYWdnX2ZpbmFsX2Nvc3RzLAogCQkJCQkJCQkJCQkJCQkgIGROdW1Hcm91 cHMpOwogCi0JCQlpZiAoaGFzaGFnZ3RhYmxlc2l6ZSA8IHdvcmtfbWVtICogMTAyNEwpCisJCQlp ZiAoZW5hYmxlX2hhc2hhZ2dfZGlzayB8fAorCQkJCWhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21l bSAqIDEwMjRMKQogCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQogCQkJCQkJIGNy ZWF0ZV9hZ2dfcGF0aChyb290LAogCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKQEAgLTY4MzAsNyAr NjgzMyw3IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290 LAogCQkgKiBUZW50YXRpdmVseSBwcm9kdWNlIGEgcGFydGlhbCBIYXNoQWdnIFBhdGgsIGRlcGVu ZGluZyBvbiBpZiBpdAogCQkgKiBsb29rcyBhcyBpZiB0aGUgaGFzaCB0YWJsZSB3aWxsIGZpdCBp biB3b3JrX21lbS4KIAkJICovCi0JCWlmIChoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0gKiAx MDI0TCAmJgorCQlpZiAoKGVuYWJsZV9oYXNoYWdnX2Rpc2sgfHwgaGFzaGFnZ3RhYmxlc2l6ZSA8 IHdvcmtfbWVtICogMTAyNEwpICYmCiAJCQljaGVhcGVzdF90b3RhbF9wYXRoICE9IE5VTEwpCiAJ CXsKIAkJCWFkZF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwgKFBhdGggKikKQEAgLTY4NTcs NyArNjg2MCw3IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJICAgZE51bVBhcnRpYWxQYXJ0aWFsR3JvdXBzKTsKIAogCQkvKiBEbyB0 aGUgc2FtZSBmb3IgcGFydGlhbCBwYXRocy4gKi8KLQkJaWYgKGhhc2hhZ2d0YWJsZXNpemUgPCB3 b3JrX21lbSAqIDEwMjRMICYmCisJCWlmICgoZW5hYmxlX2hhc2hhZ2dfZGlzayB8fCBoYXNoYWdn dGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0TCkgJiYKIAkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0 aCAhPSBOVUxMKQogCQl7CiAJCQlhZGRfcGFydGlhbF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3Jl bCwgKFBhdGggKikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKaW5kZXggMWEy M2UxODk3MGQuLjk1MWFlZDgwZTdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cHJlcC9wcmVwdW5pb24uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYwpAQCAtMTA3Miw3ICsxMDcyLDcgQEAgY2hvb3NlX2hhc2hlZF9zZXRvcChQbGFubmVySW5m byAqcm9vdCwgTGlzdCAqZ3JvdXBDbGF1c2VzLAogCQkJIG51bUdyb3VwQ29scywgZE51bUdyb3Vw cywKIAkJCSBOSUwsCiAJCQkgaW5wdXRfcGF0aC0+c3RhcnR1cF9jb3N0LCBpbnB1dF9wYXRoLT50 b3RhbF9jb3N0LAotCQkJIGlucHV0X3BhdGgtPnJvd3MpOworCQkJIGlucHV0X3BhdGgtPnJvd3Ms IGlucHV0X3BhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsKIAogCS8qCiAJICogTm93IGZvciB0aGUg c29ydGVkIGNhc2UuICBOb3RlIHRoYXQgdGhlIGlucHV0IGlzICphbHdheXMqIHVuc29ydGVkLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggZDljZTUxNjIxMTYuLjhiYTgx MjJlZTJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTE3MDQsNyAr MTcwNCw4IEBAIGNyZWF0ZV91bmlxdWVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLCBQYXRoICpzdWJwYXRoLAogCQkJCQkgTklMLAogCQkJCQkgc3VicGF0aC0+c3RhcnR1 cF9jb3N0LAogCQkJCQkgc3VicGF0aC0+dG90YWxfY29zdCwKLQkJCQkJIHJlbC0+cm93cyk7CisJ CQkJCSByZWwtPnJvd3MsCisJCQkJCSBzdWJwYXRoLT5wYXRodGFyZ2V0LT53aWR0aCk7CiAJfQog CiAJaWYgKHNqaW5mby0+c2VtaV9jYW5fYnRyZWUgJiYgc2ppbmZvLT5zZW1pX2Nhbl9oYXNoKQpA QCAtMjk1OCw3ICsyOTU5LDcgQEAgY3JlYXRlX2FnZ19wYXRoKFBsYW5uZXJJbmZvICpyb290LAog CQkJIGxpc3RfbGVuZ3RoKGdyb3VwQ2xhdXNlKSwgbnVtR3JvdXBzLAogCQkJIHF1YWwsCiAJCQkg c3VicGF0aC0+c3RhcnR1cF9jb3N0LCBzdWJwYXRoLT50b3RhbF9jb3N0LAotCQkJIHN1YnBhdGgt PnJvd3MpOworCQkJIHN1YnBhdGgtPnJvd3MsIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsK IAogCS8qIGFkZCB0bGlzdCBldmFsIGNvc3QgZm9yIGVhY2ggb3V0cHV0IHJvdyAqLwogCXBhdGhu b2RlLT5wYXRoLnN0YXJ0dXBfY29zdCArPSB0YXJnZXQtPmNvc3Quc3RhcnR1cDsKQEAgLTMwNjks NyArMzA3MCw4IEBAIGNyZWF0ZV9ncm91cGluZ3NldHNfcGF0aChQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJIGhhdmluZ19xdWFsLAogCQkJCQkgc3VicGF0aC0+c3RhcnR1cF9jb3N0LAogCQkJCQkg c3VicGF0aC0+dG90YWxfY29zdCwKLQkJCQkJIHN1YnBhdGgtPnJvd3MpOworCQkJCQkgc3VicGF0 aC0+cm93cywKKwkJCQkJIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsKIAkJCWlzX2ZpcnN0 ID0gZmFsc2U7CiAJCQlpZiAoIXJvbGx1cC0+aXNfaGFzaGVkKQogCQkJCWlzX2ZpcnN0X3NvcnQg PSBmYWxzZTsKQEAgLTMwOTIsNyArMzA5NCw4IEBAIGNyZWF0ZV9ncm91cGluZ3NldHNfcGF0aChQ bGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCSByb2xsdXAtPm51bUdyb3VwcywKIAkJCQkJCSBoYXZp bmdfcXVhbCwKIAkJCQkJCSAwLjAsIDAuMCwKLQkJCQkJCSBzdWJwYXRoLT5yb3dzKTsKKwkJCQkJ CSBzdWJwYXRoLT5yb3dzLAorCQkJCQkJIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsKIAkJ CQlpZiAoIXJvbGx1cC0+aXNfaGFzaGVkKQogCQkJCQlpc19maXJzdF9zb3J0ID0gZmFsc2U7CiAJ CQl9CkBAIC0zMTE3LDcgKzMxMjAsOCBAQCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkgaGF2aW5nX3F1YWwsCiAJCQkJCQkgc29ydF9wYXRoLnN0YXJ0 dXBfY29zdCwKIAkJCQkJCSBzb3J0X3BhdGgudG90YWxfY29zdCwKLQkJCQkJCSBzb3J0X3BhdGgu cm93cyk7CisJCQkJCQkgc29ydF9wYXRoLnJvd3MsCisJCQkJCQkgc3VicGF0aC0+cGF0aHRhcmdl dC0+d2lkdGgpOwogCQkJfQogCiAJCQlwYXRobm9kZS0+cGF0aC50b3RhbF9jb3N0ICs9IGFnZ19w YXRoLnRvdGFsX2Nvc3Q7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA0YzZkNjQ4NjYyMy4uNjRkYTg4 ODIwODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtOTk5LDYgKzk5OSwyNiBAQCBzdGF0aWMgc3Ry dWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJdHJ1ZSwKIAkJTlVMTCwg TlVMTCwgTlVMTAogCX0sCisJeworCQl7ImVuYWJsZV9oYXNoYWdnX2Rpc2siLCBQR0NfVVNFUlNF VCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxh bm5lcidzIHVzZSBvZiBoYXNoZWQgYWdncmVnYXRpb24gcGxhbnMgdGhhdCBhcmUgZXhwZWN0ZWQg dG8gZXhjZWVkIHdvcmtfbWVtLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBMQUlOCisJCX0sCisJ CSZlbmFibGVfaGFzaGFnZ19kaXNrLAorCQl0cnVlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwK Kwl7CisJCXsiZW5hYmxlX2dyb3VwaW5nc2V0c19oYXNoX2Rpc2siLCBQR0NfVVNFUlNFVCwgUVVF UllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxhbm5lcidz IHVzZSBvZiBoYXNoZWQgYWdncmVnYXRpb24gcGxhbnMgZm9yIGdyb3VwaW5nc2V0cyB3aGVuIHRo ZSB0b3RhbCBzaXplIG9mIHRoZSBoYXNoIHRhYmxlcyBpcyBleHBlY3RlZCB0byBleGNlZWQgd29y a19tZW0uIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4KKwkJfSwKKwkJJmVuYWJsZV9ncm91 cGluZ3NldHNfaGFzaF9kaXNrLAorCQlmYWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJ ewogCQl7ImVuYWJsZV9tYXRlcmlhbCIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVUSE9E LAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHRoZSBwbGFubmVyJ3MgdXNlIG9mIG1hdGVyaWFs aXphdGlvbi4iKSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBZ2cuaCBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBZ2cuaAppbmRleCAyNjQ5MTZmOWE5Mi4uYTViOGEw MDRkMWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBZ2cuaAorKysgYi9z cmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQWdnLmgKQEAgLTI4MCw2ICsyODAsMTEgQEAgdHlwZWRl ZiBzdHJ1Y3QgQWdnU3RhdGVQZXJQaGFzZURhdGEKIAlTb3J0CSAgICpzb3J0bm9kZTsJCS8qIFNv cnQgbm9kZSBmb3IgaW5wdXQgb3JkZXJpbmcgZm9yIHBoYXNlICovCiAKIAlFeHByU3RhdGUgICpl dmFsdHJhbnM7CQkvKiBldmFsdWF0aW9uIG9mIHRyYW5zaXRpb24gZnVuY3Rpb25zICAqLworCisJ LyogY2FjaGVkIHZhcmlhbnRzIG9mIHRoZSBjb21waWxlZCBleHByZXNzaW9uICovCisJRXhwclN0 YXRlICAqZXZhbHRyYW5zX2NhY2hlCisJCQkJWzJdCQkvKiAwOiBvdXRlcm9wczsgMTogVFRTT3Bz TWluaW1hbFR1cGxlICovCisJCQkJWzJdOwkvKiAwOiBubyBOVUxMIGNoZWNrOyAxOiB3aXRoIE5V TEwgY2hlY2sgKi8KIH0JCQlBZ2dTdGF0ZVBlclBoYXNlRGF0YTsKIAogLyoKQEAgLTMxMSw1ICsz MTYsOCBAQCBleHRlcm4gdm9pZCBFeGVjUmVTY2FuQWdnKEFnZ1N0YXRlICpub2RlKTsKIAogZXh0 ZXJuIFNpemUgaGFzaF9hZ2dfZW50cnlfc2l6ZShpbnQgbnVtQWdncywgU2l6ZSB0dXBsZVdpZHRo LAogCQkJCQkJCQlTaXplIHRyYW5zaXRpb25TcGFjZSk7CitleHRlcm4gdm9pZCBoYXNoX2FnZ19z ZXRfbGltaXRzKGRvdWJsZSBoYXNoZW50cnlzaXplLCB1aW50NjQgaW5wdXRfZ3JvdXBzLAorCQkJ CQkJCQlpbnQgdXNlZF9iaXRzLCBTaXplICptZW1fbGltaXQsCisJCQkJCQkJCXVpbnQ2NCAqbmdy b3Vwc19saW1pdCwgaW50ICpudW1fcGFydGl0aW9ucyk7CiAKICNlbmRpZgkJCQkJCQkvKiBOT0RF QUdHX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggY2QzZGRmNzgxZjEuLjNkMjdkNTBmMDkw IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMjA3OSwxMiArMjA3OSwzMiBAQCB0eXBlZGVmIHN0 cnVjdCBBZ2dTdGF0ZQogCS8qIHRoZXNlIGZpZWxkcyBhcmUgdXNlZCBpbiBBR0dfSEFTSEVEIGFu ZCBBR0dfTUlYRUQgbW9kZXM6ICovCiAJYm9vbAkJdGFibGVfZmlsbGVkOwkvKiBoYXNoIHRhYmxl IGZpbGxlZCB5ZXQ/ICovCiAJaW50CQkJbnVtX2hhc2hlczsKKwlNZW1vcnlDb250ZXh0CWhhc2hf bWV0YWN4dDsJLyogbWVtb3J5IGZvciBoYXNoIHRhYmxlIGl0c2VsZiAqLworCXN0cnVjdCBIYXNo VGFwZUluZm8gKmhhc2hfdGFwZWluZm87IC8qIG1ldGFkYXRhIGZvciBzcGlsbCB0YXBlcyAqLwor CXN0cnVjdCBIYXNoQWdnU3BpbGwgKmhhc2hfc3BpbGxzOyAvKiBIYXNoQWdnU3BpbGwgZm9yIGVh Y2ggZ3JvdXBpbmcgc2V0LAorCQkJCQkJCQkJCSBleGlzdHMgb25seSBkdXJpbmcgZmlyc3QgcGFz cyAqLworCVR1cGxlVGFibGVTbG90ICpoYXNoX3NwaWxsX3Nsb3Q7IC8qIHNsb3QgZm9yIHJlYWRp bmcgZnJvbSBzcGlsbCBmaWxlcyAqLworCUxpc3QJICAgKmhhc2hfYmF0Y2hlczsJLyogaGFzaCBi YXRjaGVzIHJlbWFpbmluZyB0byBiZSBwcm9jZXNzZWQgKi8KKwlib29sCQloYXNoX2V2ZXJfc3Bp bGxlZDsJLyogZXZlciBzcGlsbGVkIGR1cmluZyB0aGlzIGV4ZWN1dGlvbj8gKi8KKwlib29sCQlo YXNoX3NwaWxsX21vZGU7CS8qIHdlIGhpdCBhIGxpbWl0IGR1cmluZyB0aGUgY3VycmVudCBiYXRj aAorCQkJCQkJCQkJICAgYW5kIHdlIG11c3Qgbm90IGNyZWF0ZSBuZXcgZ3JvdXBzICovCisJU2l6 ZQkJaGFzaF9tZW1fbGltaXQ7CS8qIGxpbWl0IGJlZm9yZSBzcGlsbGluZyBoYXNoIHRhYmxlICov CisJdWludDY0CQloYXNoX25ncm91cHNfbGltaXQ7CS8qIGxpbWl0IGJlZm9yZSBzcGlsbGluZyBo YXNoIHRhYmxlICovCisJaW50CQkJaGFzaF9wbGFubmVkX3BhcnRpdGlvbnM7IC8qIG51bWJlciBv ZiBwYXJ0aXRpb25zIHBsYW5uZWQKKwkJCQkJCQkJCQkJZm9yIGZpcnN0IHBhc3MgKi8KKwlkb3Vi bGUJCWhhc2hlbnRyeXNpemU7CS8qIGVzdGltYXRlIHJldmlzZWQgZHVyaW5nIGV4ZWN1dGlvbiAq LworCVNpemUJCWhhc2hfbWVtX3BlYWs7CS8qIHBlYWsgaGFzaCB0YWJsZSBtZW1vcnkgdXNhZ2Ug Ki8KKwl1aW50NjQJCWhhc2hfbmdyb3Vwc19jdXJyZW50OwkvKiBudW1iZXIgb2YgZ3JvdXBzIGN1 cnJlbnRseSBpbgorCQkJCQkJCQkJCSAgIG1lbW9yeSBpbiBhbGwgaGFzaCB0YWJsZXMgKi8KKwl1 aW50NjQJCWhhc2hfZGlza191c2VkOyAvKiBrQiBvZiBkaXNrIHNwYWNlIHVzZWQgKi8KKwlpbnQJ CQloYXNoX2JhdGNoZXNfdXNlZDsJLyogYmF0Y2hlcyB1c2VkIGR1cmluZyBlbnRpcmUgZXhlY3V0 aW9uICovCisKIAlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaDsJLyogYXJyYXkgb2YgcGVyLWhhc2h0 YWJsZSBkYXRhICovCiAJQWdnU3RhdGVQZXJHcm91cCAqaGFzaF9wZXJncm91cDsJLyogZ3JvdXBp bmcgc2V0IGluZGV4ZWQgYXJyYXkgb2YKIAkJCQkJCQkJCQkgKiBwZXItZ3JvdXAgcG9pbnRlcnMg Ki8KIAogCS8qIHN1cHBvcnQgZm9yIGV2YWx1YXRpb24gb2YgYWdnIGlucHV0IGV4cHJlc3Npb25z OiAqLwotI2RlZmluZSBGSUVMRE5PX0FHR1NUQVRFX0FMTF9QRVJHUk9VUFMgMzQKKyNkZWZpbmUg RklFTEROT19BR0dTVEFURV9BTExfUEVSR1JPVVBTIDQ5CiAJQWdnU3RhdGVQZXJHcm91cCAqYWxs X3Blcmdyb3VwczsJLyogYXJyYXkgb2YgZmlyc3QgLT5wZXJncm91cHMsIHRoYW4KIAkJCQkJCQkJ CQkgKiAtPmhhc2hfcGVyZ3JvdXAgKi8KIAlQcm9qZWN0aW9uSW5mbyAqY29tYmluZWRwcm9qOwkv KiBwcm9qZWN0aW9uIG1hY2hpbmVyeSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggY2IwMTJiYTE5 ODAuLjczNWJhMDk2NTAzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5o CisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTU0LDYgKzU0LDggQEAgZXh0 ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9z b3J0OwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2hhc2hhZ2c7CitleHRlcm4gUEdE TExJTVBPUlQgYm9vbCBlbmFibGVfaGFzaGFnZ19kaXNrOworZXh0ZXJuIFBHRExMSU1QT1JUIGJv b2wgZW5hYmxlX2dyb3VwaW5nc2V0c19oYXNoX2Rpc2s7CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfbmVzdGxvb3A7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfbWF0ZXJp YWw7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfbWVyZ2Vqb2luOwpAQCAtMTE0LDcg KzExNiw3IEBAIGV4dGVybiB2b2lkIGNvc3RfYWdnKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkgaW50IG51bUdyb3VwQ29scywgZG91YmxlIG51bUdyb3VwcywKIAkJCQkJIExp c3QgKnF1YWxzLAogCQkJCQkgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90 YWxfY29zdCwKLQkJCQkJIGRvdWJsZSBpbnB1dF90dXBsZXMpOworCQkJCQkgZG91YmxlIGlucHV0 X3R1cGxlcywgZG91YmxlIGlucHV0X3dpZHRoKTsKIGV4dGVybiB2b2lkIGNvc3Rfd2luZG93YWdn KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJICAgTGlzdCAqd2luZG93RnVu Y3MsIGludCBudW1QYXJ0Q29scywgaW50IG51bU9yZGVyQ29scywKIAkJCQkJCSAgIENvc3QgaW5w dXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9hZ2dyZWdhdGVzLm91dAppbmRleCBmNDU3YjViMTUwZi4uMDA3MzA3MmEzNjggMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dApAQCAtMjM1NywzICsyMzU3 LDE4NyBAQCBleHBsYWluIChjb3N0cyBvZmYpCiAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gb25lawogKDggcm93cykKIAorLS0KKy0tIEhhc2ggQWdncmVnYXRpb24gU3BpbGwgdGVzdHMK Ky0tCitzZXQgZW5hYmxlX3NvcnQ9ZmFsc2U7CitzZXQgd29ya19tZW09JzY0a0InOworc2VsZWN0 IHVuaXF1ZTEsIGNvdW50KCopLCBzdW0odHdvdGhvdXNhbmQpIGZyb20gdGVuazEKK2dyb3VwIGJ5 IHVuaXF1ZTEKK2hhdmluZyBzdW0oZml2ZXRob3VzKSA+IDQ5NzUKK29yZGVyIGJ5IHN1bSh0d290 aG91c2FuZCk7CisgdW5pcXVlMSB8IGNvdW50IHwgc3VtICAKKy0tLS0tLS0tLSstLS0tLS0tKy0t LS0tLQorICAgIDQ5NzYgfCAgICAgMSB8ICA5NzYKKyAgICA0OTc3IHwgICAgIDEgfCAgOTc3Cisg ICAgNDk3OCB8ICAgICAxIHwgIDk3OAorICAgIDQ5NzkgfCAgICAgMSB8ICA5NzkKKyAgICA0OTgw IHwgICAgIDEgfCAgOTgwCisgICAgNDk4MSB8ICAgICAxIHwgIDk4MQorICAgIDQ5ODIgfCAgICAg MSB8ICA5ODIKKyAgICA0OTgzIHwgICAgIDEgfCAgOTgzCisgICAgNDk4NCB8ICAgICAxIHwgIDk4 NAorICAgIDQ5ODUgfCAgICAgMSB8ICA5ODUKKyAgICA0OTg2IHwgICAgIDEgfCAgOTg2CisgICAg NDk4NyB8ICAgICAxIHwgIDk4NworICAgIDQ5ODggfCAgICAgMSB8ICA5ODgKKyAgICA0OTg5IHwg ICAgIDEgfCAgOTg5CisgICAgNDk5MCB8ICAgICAxIHwgIDk5MAorICAgIDQ5OTEgfCAgICAgMSB8 ICA5OTEKKyAgICA0OTkyIHwgICAgIDEgfCAgOTkyCisgICAgNDk5MyB8ICAgICAxIHwgIDk5Mwor ICAgIDQ5OTQgfCAgICAgMSB8ICA5OTQKKyAgICA0OTk1IHwgICAgIDEgfCAgOTk1CisgICAgNDk5 NiB8ICAgICAxIHwgIDk5NgorICAgIDQ5OTcgfCAgICAgMSB8ICA5OTcKKyAgICA0OTk4IHwgICAg IDEgfCAgOTk4CisgICAgNDk5OSB8ICAgICAxIHwgIDk5OQorICAgIDk5NzYgfCAgICAgMSB8IDE5 NzYKKyAgICA5OTc3IHwgICAgIDEgfCAxOTc3CisgICAgOTk3OCB8ICAgICAxIHwgMTk3OAorICAg IDk5NzkgfCAgICAgMSB8IDE5NzkKKyAgICA5OTgwIHwgICAgIDEgfCAxOTgwCisgICAgOTk4MSB8 ICAgICAxIHwgMTk4MQorICAgIDk5ODIgfCAgICAgMSB8IDE5ODIKKyAgICA5OTgzIHwgICAgIDEg fCAxOTgzCisgICAgOTk4NCB8ICAgICAxIHwgMTk4NAorICAgIDk5ODUgfCAgICAgMSB8IDE5ODUK KyAgICA5OTg2IHwgICAgIDEgfCAxOTg2CisgICAgOTk4NyB8ICAgICAxIHwgMTk4NworICAgIDk5 ODggfCAgICAgMSB8IDE5ODgKKyAgICA5OTg5IHwgICAgIDEgfCAxOTg5CisgICAgOTk5MCB8ICAg ICAxIHwgMTk5MAorICAgIDk5OTEgfCAgICAgMSB8IDE5OTEKKyAgICA5OTkyIHwgICAgIDEgfCAx OTkyCisgICAgOTk5MyB8ICAgICAxIHwgMTk5MworICAgIDk5OTQgfCAgICAgMSB8IDE5OTQKKyAg ICA5OTk1IHwgICAgIDEgfCAxOTk1CisgICAgOTk5NiB8ICAgICAxIHwgMTk5NgorICAgIDk5OTcg fCAgICAgMSB8IDE5OTcKKyAgICA5OTk4IHwgICAgIDEgfCAxOTk4CisgICAgOTk5OSB8ICAgICAx IHwgMTk5OQorKDQ4IHJvd3MpCisKK3NldCB3b3JrX21lbSB0byBkZWZhdWx0Oworc2V0IGVuYWJs ZV9zb3J0IHRvIGRlZmF1bHQ7CistLQorLS0gQ29tcGFyZSByZXN1bHRzIGJldHdlZW4gcGxhbnMg dXNpbmcgc29ydGluZyBhbmQgcGxhbnMgdXNpbmcgaGFzaAorLS0gYWdncmVnYXRpb24uIEZvcmNl IHNwaWxsaW5nIGluIGJvdGggY2FzZXMgYnkgc2V0dGluZyB3b3JrX21lbSBsb3cuCistLQorc2V0 IHdvcmtfbWVtPSc2NGtCJzsKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCitzZXQg ZW5hYmxlX2hhc2hhZ2cgPSBmYWxzZTsKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CitleHBsYWlu IChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBj MiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisg IGdyb3VwIGJ5IGclMTAwMDAwOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAoKGcgJSAxMDAwMDApKQorICAg LT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiAoKGcgJSAxMDAwMDApKQorICAgICAgICAgLT4g IEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyg1IHJvd3MpCisKK2NyZWF0ZSB0 YWJsZSBhZ2dfZ3JvdXBfMSBhcworc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJp YykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5 OSkgZworICBncm91cCBieSBnJTEwMDAwMDsKK2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMiBhcwor c2VsZWN0ICogZnJvbQorICAodmFsdWVzICgxMDApLCAoMzAwKSwgKDUwMCkpIGFzIHIoYSksCisg IGxhdGVyYWwgKAorICAgIHNlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwKKyAgICAgICAgICAg YXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMyLAorCSAgIGNvdW50KCopIGFzIGMzCisgICAgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICAgIHdoZXJlIGcgPCByLmEKKyAgICBncm91 cCBieSBnLzIpIGFzIHM7CitzZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKK2NyZWF0ZSB0 YWJsZSBhZ2dfZ3JvdXBfMyBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBzdW0oNzo6 aW50NCkgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5 OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF80IGFzCitzZWxl Y3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwgY291 bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBi eSBnLzI7CistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBoYXNoIGFnZ3JlZ2F0aW9uCitzZXQgZW5h YmxlX2hhc2hhZ2cgPSB0cnVlOworc2V0IGVuYWJsZV9zb3J0ID0gZmFsc2U7CitzZXQgaml0X2Fi b3ZlX2Nvc3QgPSAwOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGclMTAwMDAwIGFzIGMx LCBzdW0oZzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVf c2VyaWVzKDAsIDE5OTk5OSkgZworICBncm91cCBieSBnJTEwMDAwMDsKKyAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAoZyAlIDEwMDAw MCkKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoMyByb3dzKQor CitjcmVhdGUgdGFibGUgYWdnX2hhc2hfMSBhcworc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0o Zzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDAsIDE5OTk5OSkgZworICBncm91cCBieSBnJTEwMDAwMDsKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFz aF8yIGFzCitzZWxlY3QgKiBmcm9tCisgICh2YWx1ZXMgKDEwMCksICgzMDApLCAoNTAwKSkgYXMg cihhKSwKKyAgbGF0ZXJhbCAoCisgICAgc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLAorICAg ICAgICAgICBhcnJheV9hZ2coZzo6bnVtZXJpYykgYXMgYzIsCisJICAgY291bnQoKikgYXMgYzMK KyAgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgICAgd2hlcmUgZyA8IHIuYQor ICAgIGdyb3VwIGJ5IGcvMikgYXMgczsKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0Owor Y3JlYXRlIHRhYmxlIGFnZ19oYXNoXzMgYXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwg c3VtKDc6OmludDQpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3Nlcmll cygwLCAxOTk5KSBnCisgIGdyb3VwIGJ5IGcvMjsKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF80IGFz CitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBj MiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBn cm91cCBieSBnLzI7CitzZXQgZW5hYmxlX3NvcnQgPSB0cnVlOworc2V0IHdvcmtfbWVtIHRvIGRl ZmF1bHQ7CistLSBDb21wYXJlIGdyb3VwIGFnZ3JlZ2F0aW9uIHJlc3VsdHMgdG8gaGFzaCBhZ2dy ZWdhdGlvbiByZXN1bHRzCisoc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8xIGV4Y2VwdCBzZWxlY3Qg KiBmcm9tIGFnZ19ncm91cF8xKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19ncm91 cF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzEpOworIGMxIHwgYzIgfCBjMyAKKy0t LS0rLS0tLSstLS0tCisoMCByb3dzKQorCisoc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8yIGV4Y2Vw dCBzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8yKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9t IGFnZ19ncm91cF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzIpOworIGEgfCBjMSB8 IGMyIHwgYzMgCistLS0rLS0tLSstLS0tKy0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBmcm9t IGFnZ19oYXNoXzMgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzMpCisgIHVuaW9uIGFs bAorKHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzMgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hh c2hfMyk7CisgYzEgfCBjMiB8IGMzIAorLS0tLSstLS0tKy0tLS0KKygwIHJvd3MpCisKKyhzZWxl Y3QgKiBmcm9tIGFnZ19oYXNoXzQgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzQpCisg IHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzQgZXhjZXB0IHNlbGVjdCAqIGZy b20gYWdnX2hhc2hfNCk7CisgYzEgfCBjMiB8IGMzIAorLS0tLSstLS0tKy0tLS0KKygwIHJvd3Mp CisKK2Ryb3AgdGFibGUgYWdnX2dyb3VwXzE7Citkcm9wIHRhYmxlIGFnZ19ncm91cF8yOworZHJv cCB0YWJsZSBhZ2dfZ3JvdXBfMzsKK2Ryb3AgdGFibGUgYWdnX2dyb3VwXzQ7Citkcm9wIHRhYmxl IGFnZ19oYXNoXzE7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzI7Citkcm9wIHRhYmxlIGFnZ19oYXNo XzM7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2dyb3VwaW5nc2V0cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dy b3VwaW5nc2V0cy5vdXQKaW5kZXggYzFmODAyYzg4YTcuLmRiZTUxNDBiNTU4IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dyb3VwaW5nc2V0cy5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ncm91cGluZ3NldHMub3V0CkBAIC0xNjMzLDQgKzE2MzMsMTI2 IEBAIHNlbGVjdCB2fHwnYScsIGNhc2Ugd2hlbiBncm91cGluZyh2fHwnYScpID0gMSB0aGVuIDEg ZWxzZSAwIGVuZCwgY291bnQoKikKICAgICAgICAgICB8ICAgIDEgfCAgICAgMgogKDQgcm93cykK IAorLS0KKy0tIENvbXBhcmUgcmVzdWx0cyBiZXR3ZWVuIHBsYW5zIHVzaW5nIHNvcnRpbmcgYW5k IHBsYW5zIHVzaW5nIGhhc2gKKy0tIGFnZ3JlZ2F0aW9uLiBGb3JjZSBzcGlsbGluZyBpbiBib3Ro IGNhc2VzIGJ5IHNldHRpbmcgd29ya19tZW0gbG93CistLSBhbmQgdHVybmluZyBvbiBlbmFibGVf Z3JvdXBpbmdzZXRzX2hhc2hfZGlzay4KKy0tCitTRVQgZW5hYmxlX2dyb3VwaW5nc2V0c19oYXNo X2Rpc2sgPSB0cnVlOworU0VUIHdvcmtfbWVtPSc2NGtCJzsKKy0tIFByb2R1Y2UgcmVzdWx0cyB3 aXRoIHNvcnRpbmcuCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSBmYWxzZTsKK3NldCBqaXRfYWJvdmVf Y29zdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwg c3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBn JTEwMDAgYXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisgICBmcm9tIGdl bmVyYXRlX3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxn MTApOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAoKGcu ZyAlIDEwMDApKSwgKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICBHcm91cCBLZXk6ICgo Zy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpCisgICBHcm91cCBLZXk6ICgoZy5nICUgMTAwMCkp CisgICBHcm91cCBLZXk6ICgpCisgICBTb3J0IEtleTogKChnLmcgJSAxMDApKSwgKChnLmcgJSAx MCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICAgIEdy b3VwIEtleTogKChnLmcgJSAxMDApKQorICAgU29ydCBLZXk6ICgoZy5nICUgMTApKSwgKChnLmcg JSAxMDAwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwKSksICgoZy5nICUgMTAwMCkpCisg ICAgIEdyb3VwIEtleTogKChnLmcgJSAxMCkpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBL ZXk6ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgICAgICAg IC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoMTQgcm93cykKKworY3Jl YXRlIHRhYmxlIGdzX2dyb3VwXzEgYXMKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6 bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBh cyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVf c2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7Citz ZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKK2NyZWF0ZSB0YWJsZSBnc19ncm91cF8yIGFz CitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4 KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnLzIwIGFzIGcxMDAwLCBnLzIwMCBhcyBnMTAwLCBn LzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitn cm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CitjcmVhdGUgdGFibGUgZ3NfZ3JvdXBfMyBh cworc2VsZWN0IGcxMDAsIGcxMCwgYXJyYXlfYWdnKGcpIGFzIGEsIGNvdW50KCopIGFzIGMsIG1h eChnOjp0ZXh0KSBhcyBtIGZyb20KKyAgKHNlbGVjdCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMg ZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBn cm91cGluZyBzZXRzIChnMTAwLGcxMCk7CistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBoYXNoIGFn Z3JlZ2F0aW9uLgorc2V0IGVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK3NldCBlbmFibGVfc29ydCA9 IGZhbHNlOworc2V0IHdvcmtfbWVtPSc2NGtCJzsKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7Citl eHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVy aWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnJTEwMDAgYXMgZzEw MDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3Nlcmll cygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOworICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNaXhlZEFnZ3JlZ2F0 ZQorICAgSGFzaCBLZXk6IChnLmcgJSAxMDAwKSwgKGcuZyAlIDEwMCksIChnLmcgJSAxMCkKKyAg IEhhc2ggS2V5OiAoZy5nICUgMTAwMCksIChnLmcgJSAxMDApCisgICBIYXNoIEtleTogKGcuZyAl IDEwMDApCisgICBIYXNoIEtleTogKGcuZyAlIDEwMCksIChnLmcgJSAxMCkKKyAgIEhhc2ggS2V5 OiAoZy5nICUgMTAwKQorICAgSGFzaCBLZXk6IChnLmcgJSAxMCksIChnLmcgJSAxMDAwKQorICAg SGFzaCBLZXk6IChnLmcgJSAxMCkKKyAgIEdyb3VwIEtleTogKCkKKyAgIC0+ICBGdW5jdGlvbiBT Y2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoMTAgcm93cykKKworY3JlYXRlIHRhYmxlIGdzX2hh c2hfMSBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQo KiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFzIGcxMDAwLCBnJTEwMCBh cyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OTkp IGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKK3NldCBqaXRfYWJvdmVfY29z dCB0byBkZWZhdWx0OworY3JlYXRlIHRhYmxlIGdzX2hhc2hfMiBhcworc2VsZWN0IGcxMDAwLCBn MTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisg IChzZWxlY3QgZy8yMCBhcyBnMTAwMCwgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwgZwor ICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEw MDAsZzEwMCxnMTApOworY3JlYXRlIHRhYmxlIGdzX2hhc2hfMyBhcworc2VsZWN0IGcxMDAsIGcx MCwgYXJyYXlfYWdnKGcpIGFzIGEsIGNvdW50KCopIGFzIGMsIG1heChnOjp0ZXh0KSBhcyBtIGZy b20KKyAgKHNlbGVjdCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdl bmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBncm91cGluZyBzZXRzIChnMTAw LGcxMCk7CitzZXQgZW5hYmxlX3NvcnQgPSB0cnVlOworc2V0IHdvcmtfbWVtIHRvIGRlZmF1bHQ7 CistLSBDb21wYXJlIHJlc3VsdHMKKyhzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMSBleGNlcHQgc2Vs ZWN0ICogZnJvbSBnc19ncm91cF8xKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGdzX2dy b3VwXzEgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8xKTsKKyBnMTAwMCB8IGcxMDAgfCBn MTAgfCBzdW0gfCBjb3VudCB8IG1heCAKKy0tLS0tLS0rLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0t LS0rLS0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMiBleGNlcHQgc2Vs ZWN0ICogZnJvbSBnc19ncm91cF8yKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGdzX2dy b3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8yKTsKKyBnMTAwMCB8IGcxMDAgfCBn MTAgfCBzdW0gfCBjb3VudCB8IG1heCAKKy0tLS0tLS0rLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0t LS0rLS0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9t IGdzX2hhc2hfMyBleGNlcHQKKyAgc2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxjLG0gZnJvbSBn c19ncm91cF8zKQorICAgIHVuaW9uIGFsbAorKHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSksYyxt IGZyb20gZ3NfZ3JvdXBfMyBleGNlcHQKKyAgc2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxjLG0g ZnJvbSBnc19oYXNoXzMpOworIGcxMDAgfCBnMTAgfCB1bm5lc3QgfCBjIHwgbSAKKy0tLS0tLSst LS0tLSstLS0tLS0tLSstLS0rLS0tCisoMCByb3dzKQorCitkcm9wIHRhYmxlIGdzX2dyb3VwXzE7 Citkcm9wIHRhYmxlIGdzX2dyb3VwXzI7Citkcm9wIHRhYmxlIGdzX2dyb3VwXzM7Citkcm9wIHRh YmxlIGdzX2hhc2hfMTsKK2Ryb3AgdGFibGUgZ3NfaGFzaF8yOworZHJvcCB0YWJsZSBnc19oYXNo XzM7CitTRVQgZW5hYmxlX2dyb3VwaW5nc2V0c19oYXNoX2Rpc2sgVE8gREVGQVVMVDsKIC0tIGVu ZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0CmluZGV4 IGYzNjk2YzZkMWRlLi4xMWM2ZjUwZmJmYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dApAQCAtMTQ4LDYgKzE0OCw2OCBAQCBTRUxFQ1QgY291bnQo KikgRlJPTQogICAgICA0CiAoMSByb3cpCiAKKy0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2Vl biBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlv bi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4K Ky0tCitTRVQgd29ya19tZW09JzY0a0InOworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGlu Zy4KK1NFVCBlbmFibGVfaGFzaGFnZz1GQUxTRTsKK1NFVCBqaXRfYWJvdmVfY29zdD0wOworRVhQ TEFJTiAoY29zdHMgb2ZmKQorU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3Nl cmllcygwLDk5OTkpIGc7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFVuaXF1ZQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiAoKGcgJSAxMDAwKSkK KyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoNCByb3dz KQorCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMSBBUworU0VMRUNUIERJU1RJTkNUIGcl MTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CitTRVQgaml0X2Fib3ZlX2Nvc3Qg VE8gREVGQVVMVDsKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ncm91cF8yIEFTCitTRUxFQ1QgRElT VElOQ1QgKGclMTAwMCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworU0VU IGVuYWJsZV9oYXNoYWdnPVRSVUU7CistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBoYXNoIGFnZ3Jl Z2F0aW9uLgorU0VUIGVuYWJsZV9zb3J0PUZBTFNFOworU0VUIGppdF9hYm92ZV9jb3N0PTA7CitF WFBMQUlOIChjb3N0cyBvZmYpCitTRUxFQ1QgRElTVElOQ1QgZyUxMDAwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDAsOTk5OSkgZzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaEFn Z3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAoZyAlIDEwMDApCisgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBnZW5lcmF0ZV9zZXJpZXMgZworKDMgcm93cykKKworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2hh c2hfMSBBUworU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5 OTkpIGc7CitTRVQgaml0X2Fib3ZlX2Nvc3QgVE8gREVGQVVMVDsKK0NSRUFURSBUQUJMRSBkaXN0 aW5jdF9oYXNoXzIgQVMKK1NFTEVDVCBESVNUSU5DVCAoZyUxMDAwKTo6dGV4dCBGUk9NIGdlbmVy YXRlX3NlcmllcygwLDk5OTkpIGc7CitTRVQgZW5hYmxlX3NvcnQ9VFJVRTsKK1NFVCB3b3JrX21l bSBUTyBERUZBVUxUOworLS0gQ29tcGFyZSByZXN1bHRzCisoU0VMRUNUICogRlJPTSBkaXN0aW5j dF9oYXNoXzEgRVhDRVBUIFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3JvdXBfMSkKKyAgVU5JT04g QUxMCisoU0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9N IGRpc3RpbmN0X2hhc2hfMSk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisoMCByb3dzKQorCiso U0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEgRVhDRVBUIFNFTEVDVCAqIEZST00gZGlzdGlu Y3RfZ3JvdXBfMSkKKyAgVU5JT04gQUxMCisoU0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8x IEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2hhc2hfMSk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisoMCByb3dzKQorCitEUk9QIFRBQkxFIGRpc3RpbmN0X2hhc2hfMTsKK0RST1AgVEFC TEUgZGlzdGluY3RfaGFzaF8yOworRFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91cF8xOworRFJPUCBU QUJMRSBkaXN0aW5jdF9ncm91cF8yOwogLS0KIC0tIEFsc28sIHNvbWUgdGVzdHMgb2YgSVMgRElT VElOQ1QgRlJPTSwgd2hpY2ggZG9lc24ndCBxdWl0ZSBkZXNlcnZlIGl0cwogLS0gdmVyeSBvd24g cmVncmVzc2lvbiBmaWxlLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRl eCBhMWM5MGViOTA1Ny4uNzE1ODQyYjg3YWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lz dmlld3Mub3V0CkBAIC03NCw3ICs3NCw5IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdf c2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLQogIGVuYWJsZV9iaXRtYXBzY2FuICAgICAgICAgICAgICB8 IG9uCiAgZW5hYmxlX2dhdGhlcm1lcmdlICAgICAgICAgICAgIHwgb24KKyBlbmFibGVfZ3JvdXBp bmdzZXRzX2hhc2hfZGlzayAgfCBvZmYKICBlbmFibGVfaGFzaGFnZyAgICAgICAgICAgICAgICAg fCBvbgorIGVuYWJsZV9oYXNoYWdnX2Rpc2sgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2hhc2hq b2luICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAgICAgICAgICAg fCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCkBAIC04OSw3ICs5MSw3 IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtl ICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJs ZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAg ICAgICAgIHwgb24KLSgxNyByb3dzKQorKDE5IHJvd3MpCiAKIC0tIFRlc3QgdGhhdCB0aGUgcGdf dGltZXpvbmVfbmFtZXMgYW5kIHBnX3RpbWV6b25lX2FiYnJldnMgdmlld3MgYXJlCiAtLSBtb3Jl LW9yLWxlc3Mgd29ya2luZy4gIFdlIGNhbid0IHRlc3QgdGhlaXIgY29udGVudHMgaW4gYW55IGdy ZWF0IGRldGFpbApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5z cWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbAppbmRleCAzZTU5M2YyZDYx NS4uMDI1NzgzMzBhNmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0 ZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCkBAIC0xMDMy LDMgKzEwMzIsMTM0IEBAIHNlbGVjdCB2fHwnYScsIGNhc2Ugd2hlbiB2fHwnYScgPSAnYWEnIHRo ZW4gMSBlbHNlIDAgZW5kLCBjb3VudCgqKQogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3Qg MSBmcm9tIHRlbmsxCiAgICB3aGVyZSAoaHVuZHJlZCwgdGhvdXNhbmQpIGluIChzZWxlY3QgdHdv dGhvdXNhbmQsIHR3b3Rob3VzYW5kIGZyb20gb25layk7CisKKy0tCistLSBIYXNoIEFnZ3JlZ2F0 aW9uIFNwaWxsIHRlc3RzCistLQorCitzZXQgZW5hYmxlX3NvcnQ9ZmFsc2U7CitzZXQgd29ya19t ZW09JzY0a0InOworCitzZWxlY3QgdW5pcXVlMSwgY291bnQoKiksIHN1bSh0d290aG91c2FuZCkg ZnJvbSB0ZW5rMQorZ3JvdXAgYnkgdW5pcXVlMQoraGF2aW5nIHN1bShmaXZldGhvdXMpID4gNDk3 NQorb3JkZXIgYnkgc3VtKHR3b3Rob3VzYW5kKTsKKworc2V0IHdvcmtfbWVtIHRvIGRlZmF1bHQ7 CitzZXQgZW5hYmxlX3NvcnQgdG8gZGVmYXVsdDsKKworLS0KKy0tIENvbXBhcmUgcmVzdWx0cyBi ZXR3ZWVuIHBsYW5zIHVzaW5nIHNvcnRpbmcgYW5kIHBsYW5zIHVzaW5nIGhhc2gKKy0tIGFnZ3Jl Z2F0aW9uLiBGb3JjZSBzcGlsbGluZyBpbiBib3RoIGNhc2VzIGJ5IHNldHRpbmcgd29ya19tZW0g bG93LgorLS0KKworc2V0IHdvcmtfbWVtPSc2NGtCJzsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdp dGggc29ydGluZy4KKworc2V0IGVuYWJsZV9oYXNoYWdnID0gZmFsc2U7CisKK3NldCBqaXRfYWJv dmVfY29zdCA9IDA7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnJTEwMDAwMCBhcyBj MSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRl X3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7CisKK2NyZWF0ZSB0YWJs ZSBhZ2dfZ3JvdXBfMSBhcworc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJpYykg YXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5OSkg ZworICBncm91cCBieSBnJTEwMDAwMDsKKworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF8yIGFzCitz ZWxlY3QgKiBmcm9tCisgICh2YWx1ZXMgKDEwMCksICgzMDApLCAoNTAwKSkgYXMgcihhKSwKKyAg bGF0ZXJhbCAoCisgICAgc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLAorICAgICAgICAgICBh cnJheV9hZ2coZzo6bnVtZXJpYykgYXMgYzIsCisJICAgY291bnQoKikgYXMgYzMKKyAgICBmcm9t IGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgICAgd2hlcmUgZyA8IHIuYQorICAgIGdyb3Vw IGJ5IGcvMikgYXMgczsKKworc2V0IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7CisKK2NyZWF0 ZSB0YWJsZSBhZ2dfZ3JvdXBfMyBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBzdW0o Nzo6aW50NCkgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAs IDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworCitjcmVhdGUgdGFibGUgYWdnX2dyb3VwXzQgYXMK K3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgYXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMy LCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdy b3VwIGJ5IGcvMjsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggaGFzaCBhZ2dyZWdhdGlvbgor CitzZXQgZW5hYmxlX2hhc2hhZ2cgPSB0cnVlOworc2V0IGVuYWJsZV9zb3J0ID0gZmFsc2U7CisK K3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBn JTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBm cm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7CisK K2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8xIGFzCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShn OjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworCitjcmVhdGUgdGFibGUgYWdnX2hh c2hfMiBhcworc2VsZWN0ICogZnJvbQorICAodmFsdWVzICgxMDApLCAoMzAwKSwgKDUwMCkpIGFz IHIoYSksCisgIGxhdGVyYWwgKAorICAgIHNlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwKKyAg ICAgICAgICAgYXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMyLAorCSAgIGNvdW50KCopIGFzIGMz CisgICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICAgIHdoZXJlIGcgPCByLmEK KyAgICBncm91cCBieSBnLzIpIGFzIHM7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0 OworCitjcmVhdGUgdGFibGUgYWdnX2hhc2hfMyBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFz IGMxLCBzdW0oNzo6aW50NCkgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVf c2VyaWVzKDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworCitjcmVhdGUgdGFibGUgYWdnX2hh c2hfNCBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBhcnJheV9hZ2coZzo6bnVtZXJp YykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTkp IGcKKyAgZ3JvdXAgYnkgZy8yOworCitzZXQgZW5hYmxlX3NvcnQgPSB0cnVlOworc2V0IHdvcmtf bWVtIHRvIGRlZmF1bHQ7CisKKy0tIENvbXBhcmUgZ3JvdXAgYWdncmVnYXRpb24gcmVzdWx0cyB0 byBoYXNoIGFnZ3JlZ2F0aW9uIHJlc3VsdHMKKworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMSBl eGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMSkKKyAgdW5pb24gYWxsCisoc2VsZWN0ICog ZnJvbSBhZ2dfZ3JvdXBfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8xKTsKKworKHNl bGVjdCAqIGZyb20gYWdnX2hhc2hfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMikK KyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMiBleGNlcHQgc2VsZWN0ICog ZnJvbSBhZ2dfaGFzaF8yKTsKKworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMyBleGNlcHQgc2Vs ZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMykKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2df Z3JvdXBfMyBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8zKTsKKworKHNlbGVjdCAqIGZy b20gYWdnX2hhc2hfNCBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfNCkKKyAgdW5pb24g YWxsCisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfNCBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2df aGFzaF80KTsKKworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfMTsKK2Ryb3AgdGFibGUgYWdnX2dyb3Vw XzI7Citkcm9wIHRhYmxlIGFnZ19ncm91cF8zOworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfNDsKK2Ry b3AgdGFibGUgYWdnX2hhc2hfMTsKK2Ryb3AgdGFibGUgYWdnX2hhc2hfMjsKK2Ryb3AgdGFibGUg YWdnX2hhc2hfMzsKK2Ryb3AgdGFibGUgYWdnX2hhc2hfNDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2dyb3VwaW5nc2V0cy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncm91 cGluZ3NldHMuc3FsCmluZGV4IDk1YWMzZmI1MmY2Li40NzhmNDllY2FiNSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JvdXBpbmdzZXRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9ncm91cGluZ3NldHMuc3FsCkBAIC00NDEsNCArNDQxLDEwNyBAQCBzZWxlY3Qgdnx8 J2EnLCBjYXNlIHdoZW4gZ3JvdXBpbmcodnx8J2EnKSA9IDEgdGhlbiAxIGVsc2UgMCBlbmQsIGNv dW50KCopCiAgIGZyb20gdW5uZXN0KGFycmF5WzEsMV0sIGFycmF5WydhJywnYiddKSB1KGksdikK ICBncm91cCBieSByb2xsdXAoaSwgdnx8J2EnKSBvcmRlciBieSAxLDM7CiAKKy0tCistLSBDb21w YXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBo YXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0 aW5nIHdvcmtfbWVtIGxvdworLS0gYW5kIHR1cm5pbmcgb24gZW5hYmxlX2dyb3VwaW5nc2V0c19o YXNoX2Rpc2suCistLQorCitTRVQgZW5hYmxlX2dyb3VwaW5nc2V0c19oYXNoX2Rpc2sgPSB0cnVl OworU0VUIHdvcmtfbWVtPSc2NGtCJzsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGlu Zy4KKworc2V0IGVuYWJsZV9oYXNoYWdnID0gZmFsc2U7CisKK3NldCBqaXRfYWJvdmVfY29zdCA9 IDA7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0o Zzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAw MCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJh dGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7 CisKK2NyZWF0ZSB0YWJsZSBnc19ncm91cF8xIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwg c3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBn JTEwMDAgYXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisgICBmcm9tIGdl bmVyYXRlX3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxn MTApOworCitzZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKKworY3JlYXRlIHRhYmxlIGdz X2dyb3VwXzIgYXMKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNv dW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGcvMjAgYXMgZzEwMDAsIGcvMjAw IGFzIGcxMDAsIGcvMjAwMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5 OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKKworY3JlYXRlIHRhYmxl IGdzX2dyb3VwXzMgYXMKK3NlbGVjdCBnMTAwLCBnMTAsIGFycmF5X2FnZyhnKSBhcyBhLCBjb3Vu dCgqKSBhcyBjLCBtYXgoZzo6dGV4dCkgYXMgbSBmcm9tCisgIChzZWxlY3QgZy8yMDAgYXMgZzEw MCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykg cworZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAoZzEwMCxnMTApOworCistLSBQcm9kdWNlIHJlc3Vs dHMgd2l0aCBoYXNoIGFnZ3JlZ2F0aW9uLgorCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSB0cnVlOwor c2V0IGVuYWJsZV9zb3J0ID0gZmFsc2U7CitzZXQgd29ya19tZW09JzY0a0InOworCitzZXQgaml0 X2Fib3ZlX2Nvc3QgPSAwOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZzEwMDAsIGcx MDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAg KHNlbGVjdCBnJTEwMDAgYXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisg ICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEw MDAsZzEwMCxnMTApOworCitjcmVhdGUgdGFibGUgZ3NfaGFzaF8xIGFzCitzZWxlY3QgZzEwMDAs IGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20K KyAgKHNlbGVjdCBnJTEwMDAgYXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBn CisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAo ZzEwMDAsZzEwMCxnMTApOworCitzZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKKworY3Jl YXRlIHRhYmxlIGdzX2hhc2hfMiBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpu dW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZy8yMCBhcyBn MTAwMCwgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOworCitj cmVhdGUgdGFibGUgZ3NfaGFzaF8zIGFzCitzZWxlY3QgZzEwMCwgZzEwLCBhcnJheV9hZ2coZykg YXMgYSwgY291bnQoKikgYXMgYywgbWF4KGc6OnRleHQpIGFzIG0gZnJvbQorICAoc2VsZWN0IGcv MjAwIGFzIGcxMDAsIGcvMjAwMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAs MTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGcxMDAsZzEwKTsKKworc2V0IGVu YWJsZV9zb3J0ID0gdHJ1ZTsKK3NldCB3b3JrX21lbSB0byBkZWZhdWx0OworCistLSBDb21wYXJl IHJlc3VsdHMKKworKHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9t IGdzX2dyb3VwXzEpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMSBleGNl cHQgc2VsZWN0ICogZnJvbSBnc19oYXNoXzEpOworCisoc2VsZWN0ICogZnJvbSBnc19oYXNoXzIg ZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMikKKyAgdW5pb24gYWxsCisoc2VsZWN0ICog ZnJvbSBnc19ncm91cF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMik7CisKKyhzZWxl Y3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2hhc2hfMyBleGNlcHQKKyAgc2VsZWN0 IGcxMDAsZzEwLHVubmVzdChhKSxjLG0gZnJvbSBnc19ncm91cF8zKQorICAgIHVuaW9uIGFsbAor KHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSksYyxtIGZyb20gZ3NfZ3JvdXBfMyBleGNlcHQKKyAg c2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxjLG0gZnJvbSBnc19oYXNoXzMpOworCitkcm9wIHRh YmxlIGdzX2dyb3VwXzE7Citkcm9wIHRhYmxlIGdzX2dyb3VwXzI7Citkcm9wIHRhYmxlIGdzX2dy b3VwXzM7Citkcm9wIHRhYmxlIGdzX2hhc2hfMTsKK2Ryb3AgdGFibGUgZ3NfaGFzaF8yOworZHJv cCB0YWJsZSBnc19oYXNoXzM7CisKK1NFVCBlbmFibGVfZ3JvdXBpbmdzZXRzX2hhc2hfZGlzayBU TyBERUZBVUxUOworCiAtLSBlbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Nl bGVjdF9kaXN0aW5jdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Qu c3FsCmluZGV4IGE2MDVlODY0NDllLi4zMzEwMjc0NGViZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9zZWxlY3RfZGlzdGluY3Quc3FsCkBAIC00NSw2ICs0NSw2OCBAQCBTRUxFQ1QgY291bnQoKikg RlJPTQogU0VMRUNUIGNvdW50KCopIEZST00KICAgKFNFTEVDVCBESVNUSU5DVCB0d28sIGZvdXIs IHR3byBGUk9NIHRlbmsxKSBzczsKIAorLS0KKy0tIENvbXBhcmUgcmVzdWx0cyBiZXR3ZWVuIHBs YW5zIHVzaW5nIHNvcnRpbmcgYW5kIHBsYW5zIHVzaW5nIGhhc2gKKy0tIGFnZ3JlZ2F0aW9uLiBG b3JjZSBzcGlsbGluZyBpbiBib3RoIGNhc2VzIGJ5IHNldHRpbmcgd29ya19tZW0gbG93LgorLS0K KworU0VUIHdvcmtfbWVtPSc2NGtCJzsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGlu Zy4KKworU0VUIGVuYWJsZV9oYXNoYWdnPUZBTFNFOworCitTRVQgaml0X2Fib3ZlX2Nvc3Q9MDsK KworRVhQTEFJTiAoY29zdHMgb2ZmKQorU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVy YXRlX3NlcmllcygwLDk5OTkpIGc7CisKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ncm91cF8xIEFT CitTRUxFQ1QgRElTVElOQ1QgZyUxMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsK KworU0VUIGppdF9hYm92ZV9jb3N0IFRPIERFRkFVTFQ7CisKK0NSRUFURSBUQUJMRSBkaXN0aW5j dF9ncm91cF8yIEFTCitTRUxFQ1QgRElTVElOQ1QgKGclMTAwMCk6OnRleHQgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMCw5OTk5KSBnOworCitTRVQgZW5hYmxlX2hhc2hhZ2c9VFJVRTsKKworLS0gUHJv ZHVjZSByZXN1bHRzIHdpdGggaGFzaCBhZ2dyZWdhdGlvbi4KKworU0VUIGVuYWJsZV9zb3J0PUZB TFNFOworCitTRVQgaml0X2Fib3ZlX2Nvc3Q9MDsKKworRVhQTEFJTiAoY29zdHMgb2ZmKQorU0VM RUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisKK0NS RUFURSBUQUJMRSBkaXN0aW5jdF9oYXNoXzEgQVMKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworCitTRVQgaml0X2Fib3ZlX2Nvc3QgVE8gREVG QVVMVDsKKworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2hhc2hfMiBBUworU0VMRUNUIERJU1RJTkNU IChnJTEwMDApOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VUIGVu YWJsZV9zb3J0PVRSVUU7CisKK1NFVCB3b3JrX21lbSBUTyBERUZBVUxUOworCistLSBDb21wYXJl IHJlc3VsdHMKKworKFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xIEVYQ0VQVCBTRUxFQ1Qg KiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEpCisgIFVOSU9OIEFMTAorKFNFTEVDVCAqIEZST00gZGlz dGluY3RfZ3JvdXBfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEpOworCiso U0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEgRVhDRVBUIFNFTEVDVCAqIEZST00gZGlzdGlu Y3RfZ3JvdXBfMSkKKyAgVU5JT04gQUxMCisoU0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8x IEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2hhc2hfMSk7CisKK0RST1AgVEFCTEUgZGlz dGluY3RfaGFzaF8xOworRFJPUCBUQUJMRSBkaXN0aW5jdF9oYXNoXzI7CitEUk9QIFRBQkxFIGRp c3RpbmN0X2dyb3VwXzE7CitEUk9QIFRBQkxFIGRpc3RpbmN0X2dyb3VwXzI7CisKIC0tCiAtLSBB bHNvLCBzb21lIHRlc3RzIG9mIElTIERJU1RJTkNUIEZST00sIHdoaWNoIGRvZXNuJ3QgcXVpdGUg ZGVzZXJ2ZSBpdHMKIC0tIHZlcnkgb3duIHJlZ3Jlc3Npb24gZmlsZS4K --=-PJdh5WWrYPEO8+eUfG4k--