From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28898 invoked by alias); 4 Jun 2012 22:29:34 -0000 Received: (qmail 28860 invoked by uid 22791); 4 Jun 2012 22:29:27 -0000 X-SWARE-Spam-Status: No, hits=-5.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_AV,TW_CF,TW_CP,TW_FN,TW_MX,TW_TM,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-yw0-f47.google.com (HELO mail-yw0-f47.google.com) (209.85.213.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 04 Jun 2012 22:29:05 +0000 Received: by yhjj56 with SMTP id j56so3581418yhj.20 for ; Mon, 04 Jun 2012 15:29:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=UW5farL2mQACYG+3XJ1hROcHsjgmOMpoQYuktzdybAY=; b=JV+FtWkqk74rDdHD9nbl3M/ISgezaCJ2rdX+SJGb+g1N/2Rpn8/la23Xx97DT2Dpjm kvUQaomQrrYtsFIpIB47wflHloiOq06CADBNjAUpxuFcrH5/zhTRIpNL2zaStGQzHM+V HHw9qd9WeCuHNWI0goZcsQLO/EK3u2glTiMbgxn83Yf+S+x4moHxZbFSnwc1uA2wYiyT oZrbuU7mjofRHdHVYiEGcnilZ/GlKkj93x/J5TU6LXs6G0OjViY3OPY3asznfTa0fCo/ D1oK2Sw8Xx/9bKqZs2WoLpDAtpHABdutzYjHzu5Hn/Y9HoZNTldcA72mU4LHSb2dpHyU 66Vw== Received: by 10.60.30.194 with SMTP id u2mr13482938oeh.5.1338848944482; Mon, 04 Jun 2012 15:29:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.60.30.194 with SMTP id u2mr13482920oeh.5.1338848944324; Mon, 04 Jun 2012 15:29:04 -0700 (PDT) Received: by 10.182.101.202 with HTTP; Mon, 4 Jun 2012 15:29:04 -0700 (PDT) In-Reply-To: References: <20120307004630.A503DB21B6@azwildcat.mtv.corp.google.com> Date: Mon, 04 Jun 2012 22:29:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: "H.J. Lu" Cc: Richard Guenther , Jan Hubicka , Uros Bizjak , reply@codereview.appspotmail.com, gcc-patches@gcc.gnu.org, David Li Content-Type: multipart/mixed; boundary=e89a8ff1c7cebbfedb04c1ad0f4a X-System-Of-Record: true X-Gm-Message-State: ALoCoQkCwJ5E1VNMJKbVAApwTVLqlDcBas6wJzh+twRmCATn/AYf+rmYaPLnLkuib0W3mhcn1B8/es0ZeuVq4gtAHOpzhtxC8wWqMivdHdJVrekrmaFjAKeDgWC3N9V2wEjm0ZSXA6bzAlj7ue9/9YKNb93S5mZhew== X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-06/txt/msg00258.txt.bz2 --e89a8ff1c7cebbfedb04c1ad0f4a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1924 Bug fixed and new patch attached. Patch also available for review at http://codereview.appspot.com/5752064 Thanks, -Sri. On Mon, Jun 4, 2012 at 2:36 PM, H.J. Lu wrote: > On Mon, Jun 4, 2012 at 11:59 AM, Sriraman Tallam wr= ote: >> Hi, >> >> =A0 Attaching updated patch for function multiversioning which brings >> in plenty of changes. >> >> * As suggested by Richard earlier, I have made cgraph aware of >> function versions. All nodes of function versions are chained and the >> dispatcher bodies are created on demand while building cgraph edges. >> The dispatcher body will be created if and only if there is a call or >> reference to a versioned function. Previously, I was maintaining the >> list of versions separately in a hash map, all that is gone now. >> * Now, the file multiverison.c has some helper routines that are used >> in the context of function versioning. There are no new passes and no >> new globals. >> * More tests, updated existing tests. >> * Fixed lots of bugs. >> * Updated patch description. >> >> Patch attached. Patch also available for review at >> http://codereview.appspot.com/5752064 >> >> Please let me know what you think, >> > > Build failed in libstdc++-v3: > > /export/build/gnu/gcc/build-x86_64-linux/x86_64-unknown-linux-gnu/libstdc= ++-v3/include/bits/locale_classes.h:546:59: > internal compiler error: tree check: expected function_decl, have > identifier_node in tourney, at cp/call.c:8498 > =A0for (size_t __i =3D 0; __ret && __i < _S_categories_size - 1; ++__i) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ^ > Please submit a full bug report, > with preprocessed source if appropriate. > See for instructions. > make[5]: *** [x86_64-unknown-linux-gnu/bits/stdc++.h.gch/O2g.gch] Erro > > on Linux/x86-64. > > > -- > H.J. --e89a8ff1c7cebbfedb04c1ad0f4a Content-Type: text/plain; charset=US-ASCII; name="mv_fe_patch.txt" Content-Disposition: attachment; filename="mv_fe_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h3242qfu0 Content-length: 100679 Ck92ZXJ2aWV3IG9mIHRoZSBwYXRjaCB3aGljaCBhZGRzIGZyb250LWVuZCBz dXBwb3J0IHRvIHNwZWNpZnkgZnVuY3Rpb24gdmVyc2lvbnMuCgpFeGFtcGxl OgoKaW50IGZvbyAoKTsgIC8qIERlZmF1bHQgdmVyc2lvbiAqLwppbnQgZm9v ICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImF2eCxwb3BjbnQiKSkpOy8q U3BlY2lhbGl6ZWQgZm9yIGF2eCBhbmQgcG9wY250ICovCmludCBmb28gKCkg X19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1jb3JlMixzc3NlMyIpKSk7 LypTcGVjaWFsaXplZCBmb3IgY29yZTIgYW5kIHNzc2UzKi8KCmludCBtYWlu ICgpCnsKIGludCAoKnApKCkgPSAmZm9vOwogcmV0dXJuIGZvbyAoKSArICgq cCkoKTsKfQoKaW50IGZvbyAoKQp7CiByZXR1cm4gMDsKfQoKaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoImF2eCxwb3BjbnQiKSkpCmZvbyAoKQp7CiBy ZXR1cm4gMDsKfQoKaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9 Y29yZTIsc3NzZTMiKSkpCmZvbyAoKQp7CiByZXR1cm4gMDsKfQoKVGhlIGFi b3ZlIGV4YW1wbGUgaGFzIGZvbyBkZWZpbmVkIDMgdGltZXMsIGJ1dCBhbGwg MyBkZWZpbml0aW9ucyBvZiBmb28gYXJlCmRpZmZlcmVudCB2ZXJzaW9ucyBv ZiB0aGUgc2FtZSBmdW5jdGlvbi4gVGhlIGNhbGwgdG8gZm9vIGluIG1haW4s IGRpcmVjdGx5IGFuZAp2aWEgYSBwb2ludGVyLCBhcmUgY2FsbHMgdG8gdGhl IG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbiBmb28gd2hpY2ggaXMgZGlzcGF0 Y2hlZAp0byB0aGUgcmlnaHQgZm9vIGF0IHJ1bi10aW1lLgoKV2hhdCBkb2Vz IHRoZSBwYXRjaCBkbz8KCiogVHJhY2tpbmcgZGVjbHMgdGhhdCBjb3JyZXNw b25kIHRvIGZ1bmN0aW9uIHZlcnNpb25zIG9mIGZ1bmN0aW9uCm5hbWUsIHNh eSAiZm9vIjoKCldoZW4gdGhlIGZyb250LWVuZCBzZWVzIG1vcmUgdGhhbiBv bmUgZGVjbCBmb3IgImZvbyIsIHdpdGggYXRsZWFzdCBvbmUgZGVjbAp0YWdn ZWQgd2l0aCAidGFyZ2V0IiAgYXR0cmlidXRlcywgaXQgbWFya3MgaXQgYXMg ZnVuY3Rpb24gdmVyc2lvbnMuIFRvCnByZXZlbnQgZHVwbGljYXRlIGRlZmlu aXRpb24gZXJyb3JzIHdpdGggb3RoZXIgdmVyc2lvbnMgb2YgImZvbyIsCiJk ZWNsc19tYXRjaCIgZnVuY3Rpb24gaW4gY3AvZGVjbC5jIGlzIG1hZGUgdG8g cmV0dXJuIGZhbHNlIHdoZW4gMiBkZWNscyBoYXZlCnRoZSBzYW1lIHNpZ25h dHVyZSBidXQgZGlmZmVyZW50IHRhcmdldCBhdHRyaWJ1dGVzLiBUaGlzIHdp bGwgbWFrZSBhbGwgZnVuY3Rpb24KdmVyc2lvbnMgb2YgImZvbyIgdG8gYmUg YWRkZWQgdG8gdGhlIG92ZXJsb2FkIGxpc3Qgb2YgImZvbyIuCgoqIENoYW5n ZSB0aGUgYXNzZW1ibGVyIG5hbWVzIG9mIHRoZSBmdW5jdGlvbiB2ZXJzaW9u cy4KClRoZSBmcm9udC1lbmQgY2hhbmdlcyB0aGUgYXNzZW1ibGVyIG5hbWVz IG9mIHRoZSBmdW5jdGlvbiB2ZXJzaW9ucyBieSBzdWZmaXhpbmcKdGhlIHNv cnRlZCBsaXN0IG9mIGFyZ3MgdG8gInRhcmdldCIgdG8gdGhlIGZ1bmN0aW9u IG5hbWUgb2YgImZvbyIuIEZvciBleGFtcGxlLApoZSBhc3NlbWJsZXIgbmFt ZSBvZiAidm9pZCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNz ZTQiKSkpIiB3aWxsCmJlY29tZSBfWjNmb292LnNzZTQuCgoqIE92ZXJsb2Fk IHJlc29sdXRpb246CgogRnVuY3Rpb24gImJ1aWxkX292ZXJfY2FsbCIgaW4g Y3AvY2FsbC5jIHNlZXMgYSBjYWxsIHRvIGZ1bmN0aW9uCiJmb28iLCB3aGlj aCBpcyBtdWx0aS12ZXJzaW9uZWQuIFRoZSBvdmVybG9hZCByZXNvbHV0aW9u IGhhcHBlbnMgaW4KZnVuY3Rpb24gImpvdXN0IiBpbiAiY3AvY2FsbC5jIi4g SGVyZSwgdGhlIGNhbGwgdG8gImZvbyIgaGFzIGFsbApwb3NzaWJsZSB2ZXJz aW9ucyBvZiAiZm9vIiBhcyBjYW5kaWRhdGVzLiBBbGwgdGhlIGNhbmRpZGF0 ZXMgb2YgImZvbyIgYXJlCnN0b3JlZCBpbiB0aGUgY2dyYXBoIGRhdGEgc3Ry dWN0dXJlcy4gRWFjaCB2ZXJzaW9uIG9mIGZvbyBpcyBjaGFpbmVkIGluIGEg CmRvdWJseS1saW5rZWQgbGlzdCB3aXRoIHRoZSBkZWZhdWx0IGZ1bmN0aW9u IGFzIHRoZSBmaXJzdCBlbGVtZW50LiAgVGhpcyBhbGxvd3MKYW55IHBhc3Mg dG8gYWNjZXNzIGFsbCB0aGUgc2VtYW50aWNhbGx5IGlkZW50aWNhbCB2ZXJz aW9ucy4gQWxzbywgYSBkaXNwYXRjaGVyCmRlY2wgaXMgY3JlYXRlZCB3aGlj aCBzaG91bGQgYmUgY2FsbGVkIGFuZCBhdCBydW4tdGltZSB3aWxsIGRpc3Bh dGNoIHRoZSByaWdodApmdW5jdGlvbiB2ZXJzaW9uLgoKQWxzbywgaW4gam91 c3QsIHdoZXJlIG92ZXJsb2FkIHJlc29sdXRpb24gaGFwcGVucywgYSBtdWx0 aXZlcnNpb25lZCBmdW5jdGlvbgpyZXNvbHV0aW9uIGlzIG1hZGUgdG8gcmV0 dXJuIHRoZSBtb3N0IHNwZWNpYWxpemVkIHZlcnNpb24uICBUaGlzIGlzIHRo ZSB2ZXJzaW9uCnRoYXQgd2lsbCBiZSBjaGVja2VkIGZvciBkaXNwYXRjaGlu ZyBmaXJzdCBhbmQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdGFyZ2V0LgpOb3cs IGlmIHRoZSBjYWxsZXIgY2FuIGlubGluZSB0aGlzIGZ1bmN0aW9uIHZlcnNp b24gdGhlbiBhIGRpcmVjdCBjYWxsIGlzIG1hZGUKdG8gdGhpcyBmdW5jdGlv biB2ZXJzaW9uIHJhdGhlciB0aGFuIGdvIHRocm91Z2ggdGhlIGRpc3BhdGNo ZXIuIFdoZW4gYSBkaXJlY3QKY2FsbCBjYW5ub3QgYmUgbWFkZSwgYSBjYWxs IHRvIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGlzIGNyZWF0ZWQuCgoqIENy ZWF0aW5nIHRoZSBkaXNwYXRjaGVyIGJvZHkuCgpUaGUgZGlzcGF0Y2hlciBi b2R5LCBjYWxsZWQgdGhlIHJlc29sdmVyIGlzIG1hZGUgb25seSB3aGVuIHRo ZXJlIGlzIGEgY2FsbCB0byBhCm11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uIGRp c3BhdGNoZXIgb3IgdGhlIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiBpcyB0YWtl bi4gVGhpcwppcyBnZW5lcmF0ZWQgZHVyaW5nIGJ1aWxkX2NncmFwaF9lZGdl cyBmb3IgYSBjYWxsIG9yIGNncmFwaF9tYXJrX2FkZHJlc3NfdGFrZW4KZm9y IGEgcG9pbnRlciByZWZlcmVuY2UuCgoqIERpc3BhdGNoIG9yZGVyaW5nLgoK VGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9ucyBhcmUg Y2hlY2tlZCBkdXJpbmcgZGlzcGF0Y2ggaXMgYmFzZWQKb24gYSBwcmlvcml0 eSB2YWx1ZSBhc3NpZ25lZCBmb3IgdGhlIElTQSB0aGF0IGlzIGNhdGVyZWQu IE1vcmUgc3BlY2lhbGl6ZWQgCnZlcnNpb25zIGFyZSBjaGVja2VkIGZvciBk aXNwYXRjaGluZyBmaXJzdC4gIFRoaXMgaXMgdG8gbWl0aWdhdGUgdGhlIGFt YmlndWl0eQp0aGF0IGNhbiBhcmlzZSB3aGVuIG1vcmUgdGhhbiBvbmUgZnVu Y3Rpb24gdmVyc2lvbiBpcyB2YWxpZCBmb3IgZXhlY3V0aW9uIG9uCmEgcGFy dGljdWxhciBwbGF0Zm9ybS4gIFRoaXMgaXMgbm90IGEgcGVyZmVjdCBzb2x1 dGlvbiBhbmQgaW4gZnV0dXJlLCB0aGUgdXNlcgpzaG91bGQgYmUgYWxsb3dl ZCB0byBhc3NpZ24gYSBkaXNwYXRjaGluZyBwcmlvcml0eSB2YWx1ZSB0byBl YWNoIHZlcnNpb24uCgoKCSogZG9jL3RtLnRleGkuaW4gKFRBUkdFVF9ESVNQ QVRDSF9WRVJTSU9OKTogTmV3IGhvb2sgZGVzY3JpcHRpb24uCgkoVEFSR0VU X0NPTVBBUkVfVkVSU0lPTlMpOiBOZXcgaG9vayBkZXNjcmlwdGlvbi4KCSog ZG9jL3RtLnRleGk6IFJlZ2VuZXJhdGUuCgkqIGNncmFwaGJ1aWxkLmMgKGJ1 aWxkX2NncmFwaF9lZGdlcyk6IEdlbmVyYXRlIGJvZHkgb2YgbXVsdGl2ZXJz aW9uCglmdW5jdGlvbiBkaXNwYXRjaGVyLgoJKiBjLWZhbWlseS9jLWNvbW1v bi5jIChoYW5kbGVfdGFyZ2V0X2F0dHJpYnV0ZSk6IEFsd2F5cyBrZWVwIHRh cmdldAoJYXR0cmlidXRlcyB0YWdnZWQuCgkqIHRhcmdldC5kZWYgKGRpc3Bh dGNoX3ZlcnNpb24pOiBOZXcgdGFyZ2V0IGhvb2suCgkoY29tcGFyZV92ZXJz aW9ucyk6IE5ldyBob29rLgoJKiBjZ3JhcGguYyAoY2dyYXBoX21hcmtfYWRk cmVzc190YWtlbl9ub2RlKTogR2VuZXJhdGUgYm9keSBvZiBtdWx0aXZlcnNp b24KCWZ1bmN0aW9uIGRpc3BhdGNoZXIuCgkqIGNncmFwaC5oIChjZ3JhcGhf bm9kZSk6IE5ldyBtZW1iZXJzIGRpc3BhdGNoZXJfZm5kZWNsLCByZXNvbHZl cl9mbmRlY2wsCglwcmV2X2Z1bmN0aW9uX3ZlcnNpb24sIG5leHRfZnVuY3Rp b25fdmVyc2lvbiwgZGlzcGF0Y2hlcl9mdW5jdGlvbi4KCShpc19kZWZhdWx0 X2Z1bmN0aW9uX3ZlcnNpb24pOiBOZXcgZnVuY3Rpb24uCgkobWFya19mdW5j dGlvbl9hc192ZXJzaW9uKTogTmV3IGZ1bmN0aW9uLgoJKGhhc19kaWZmZXJl bnRfdmVyc2lvbl9hdHRyaWJ1dGVzKTogTmV3IGZ1bmN0aW9uLgoJKGZ1bmN0 aW9uX3RhcmdldF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRf ZGlzcGF0Y2hlcl9mb3JfZnVuY3Rpb25fdmVyc2lvbnMpOiBOZXcgZnVuY3Rp b24uCgkoYnVpbGRfcmVzb2x2ZXJfZm9yX2Z1bmN0aW9uX3ZlcnNpb25zKTog TmV3IGZ1bmN0aW9uLgoJKiB0cmVlLmggKERFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEKTogTmV3IG1hY3JvLgoJKHRyZWVfZnVuY3Rpb25fZGVjbCk6IE5ldyBi aXQtZmllbGQgdmVyc2lvbmVkX2Z1bmN0aW9uLgoJKiBtdWx0aXZlcnNpb24u YzogTmV3IGZpbGUuCgkqIHRlc3RzdWl0ZS9nKysuZGcvbXYxLkM6IE5ldyB0 ZXN0LgoJKiB0ZXN0c3VpdGUvZysrLmRnL212Mi5DOiBOZXcgdGVzdC4KCSog dGVzdHN1aXRlL2crKy5kZy9tdjMuQzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0 ZS9nKysuZGcvbXY0LkM6IE5ldyB0ZXN0LgoJKiBjcC9jbGFzcy5jOgoJKGFk ZF9tZXRob2QpOiBDaGFuZ2UgYXNzZW1ibGVyIG5hbWVzIG9mIGZ1bmN0aW9u IHZlcnNpb25zLgoJKHJlc29sdmVfYWRkcmVzc19vZl9vdmVybG9hZGVkX2Z1 bmN0aW9uKTogU2F2ZSBhbGwgZnVuY3Rpb24KCXZlcnNpb24gY2FuZGlkYXRl cy4gQ3JlYXRlIGRpc3BhdGNoZXIgZGVjbCBhbmQgcmV0dXJuIGFkZHJlc3Mg b2YKCWRpc3BhdGNoZXIgaW5zdGVhZC4KCSogY3AvZGVjbC5jIChkZWNsc19t YXRjaCk6IE1ha2UgZGVjbHMgdW5tYXRjaGVkIGZvciB2ZXJzaW9uZWQKCWZ1 bmN0aW9ucy4KCShkdXBsaWNhdGVfZGVjbHMpOiBSZW1vdmUgYW1iaWd1aXR5 IGZvciB2ZXJzaW9uZWQgZnVuY3Rpb25zLiAKCShjeHhfY29tZGF0X2dyb3Vw KTogTWFrZSBjb21kYXQgZ3JvdXAgb2YgdmVyc2lvbmVkIGZ1bmN0aW9ucyBi ZSB0aGUKCXNhbWUuCgkqIGNwL2Vycm9yLmMgKGR1bXBfZXhjZXB0aW9uX3Nw ZWMpOiBEdW1wIGFzc2VtYmxlciBuYW1lIGZvciBmdW5jdGlvbgoJdmVyc2lv bnMuCgkqIGNwL3NlbWFudGljcy5jIChleHBhbmRfb3JfZGVmZXJfZm5fMSk6 IE1hcmsgYXMgbmVlZGVkIHZlcnNpb25lZAoJZnVuY3Rpb25zIHRoYXQgYXJl IGFsc28gbWFya2VkIGlubGluZS4KCSogY3AvZGVjbDIuYzooY2hlY2tfY2xh c3Nmbik6IENoZWNrIGF0dHJpYnV0ZXMgb2YgdmVyc2lvbmVkIGZ1bmN0aW9u cwoJZm9yIG1hdGNoLgoJKiBjcC9jYWxsLmM6IChidWlsZF9uZXdfZnVuY3Rp b25fY2FsbCk6IENoZWNrIGlmIHZlcnNpb25lZCBmdW5jdGlvbnMKCWhhdmUg YSBkZWZhdWx0IHZlcnNpb24uCgkoYnVpbGRfb3Zlcl9jYWxsKTogTWFrZSBj YWxscyB0byBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbnMKCXRvIGNhbGwgdGhl IGRpc3BhdGNoZXIuCgkoam91c3QpOiBGb3IgY2FsbHMgdG8gbXVsdGktdmVy c2lvbmVkIGZ1bmN0aW9ucywgbWFrZSB0aGUgbW9zdAoJc3BlY2lhbGl6ZWQg ZnVuY3Rpb24gdmVyc2lvbiB3aW4uCgkodG91cm5leSk6IEdlbmVyYXRlIGRp c3BhdGNoZXIgZGVjbCBmb3IgZnVuY3Rpb24gdmVyc2lvbnMuCgkqIGNwL21h bmdsZS5jICh3cml0ZV91bnF1YWxpZmllZF9uYW1lKTogVXNlIGFzc2VtYmxl ciBuYW1lIGZvcgoJdmVyc2lvbmVkIGZ1bmN0aW9ucy4KCSogTWFrZWZpbGUu aW46IEFkZCBtdWx0aXZlcnNpb24ubwoJKiBjb25maWcvaTM4Ni9pMzg2LmMg KGFkZF9jb25kaXRpb25fdG9fYmIpOiBOZXcgZnVuY3Rpb24uCgkoZ2V0X2J1 aWx0aW5fY29kZV9mb3JfdmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCShpeDg2 X2NvbXBhcmVfdmVyc2lvbnMpOiBOZXcgZnVuY3Rpb24uCgkoZmVhdHVyZV9j b21wYXJlKTogTmV3IGZ1bmN0aW9uLgoJKGl4ODZfZGlzcGF0Y2hfdmVyc2lv bik6IE5ldyBmdW5jdGlvbi4KCShUQVJHRVRfRElTUEFUQ0hfVkVSU0lPTik6 IE5ldyBtYWNyby4KCShUQVJHRVRfQ09NUEFSRV9WRVJTSU9OKTogTmV3IG1h Y3JvLgoKSW5kZXg6IGdjYy9kb2MvdG0udGV4aQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvZG9jL3RtLnRleGkJKHJldmlzaW9uIDE4ODIwOSkK KysrIGdjYy9kb2MvdG0udGV4aQkod29ya2luZyBjb3B5KQpAQCAtMTEwMDEs NiArMTEwMDEsMjEgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVyIHRyZWUgY29u dGFpbmluZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQuICBJZiBAdmFy e2lnbm9yZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgog QGVuZCBkZWZ0eXBlZm4KIAorQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGlu dCBUQVJHRVRfRElTUEFUQ0hfVkVSU0lPTiAodHJlZSBAdmFye2Rpc3BhdGNo X2RlY2x9LCB2b2lkICpAdmFye2ZuZGVjbHN9LCBiYXNpY19ibG9jayAqQHZh cntlbXB0eV9iYn0pCitGb3IgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uLCB0 aGlzIGhvb2sgc2V0cyB1cCB0aGUgZGlzcGF0Y2hlci4KK0B2YXJ7ZGlzcGF0 Y2hfZGVjbH0gaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRv IGRpc3BhdGNoIHRoZQordmVyc2lvbi4gQHZhcntmbmRlY2xzfSBhcmUgdGhl IGZ1bmN0aW9uIGNob2ljZXMgZm9yIGRpc3BhdGNoLgorQHZhcntlbXB0eV9i Yn0gaXMgYW4gYmFzaWMgYmxvY2sgaW4gQHZhcntkaXNwYXRjaF9kZWNsfSB3 aGVyZSB0aGUKK2NvZGUgdG8gZG8gdGhlIGRpc3BhdGNoIHdpbGwgYmUgYWRk ZWQuCitAZW5kIGRlZnR5cGVmbgorCitAZGVmdHlwZWZuIHtUYXJnZXQgSG9v a30gaW50IFRBUkdFVF9DT01QQVJFX1ZFUlNJT05TICh0cmVlIEB2YXJ7ZGVj bDF9LCB0cmVlIEB2YXJ7ZGVjbDJ9KQorVGhpcyBob29rIGlzIHVzZWQgdG8g Y29tcGFyZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZXMgaW4gdHdvIGZ1bmN0aW9u cyB0bworZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbidzIGZlYXR1cmVzIGdl dCBoaWdoZXIgcHJpb3JpdHkuICBUaGlzIGlzIHVzZWQKK2R1cmluZyBtdWx0 aS12ZXJzaW9uaW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG9yZGVyIG9mIGRpc3Bh dGNoaW5nLiBAdmFye2RlY2wxfQorYW5kIEB2YXJ7ZGVjbDJ9IGFyZSB0aGUg dHdvIGZ1bmN0aW9uIGRlY2xzIHRoYXQgd2lsbCBiZSBjb21wYXJlZC4KK0Bl bmQgZGVmdHlwZWZuCisKIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB7Y29u c3QgY2hhciAqfSBUQVJHRVRfSU5WQUxJRF9XSVRISU5fRE9MT09QIChjb25z dF9ydHggQHZhcntpbnNufSkKIAogVGFrZSBhbiBpbnN0cnVjdGlvbiBpbiBA dmFye2luc259IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2YWxpZCB3aXRo aW4gYQpJbmRleDogZ2NjL2RvYy90bS50ZXhpLmluCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9kb2MvdG0udGV4aS5pbgkocmV2aXNpb24gMTg4 MjA5KQorKysgZ2NjL2RvYy90bS50ZXhpLmluCSh3b3JraW5nIGNvcHkpCkBA IC0xMDg3OSw2ICsxMDg3OSwyMSBAQCBUaGUgcmVzdWx0IGlzIGFub3RoZXIg dHJlZSBjb250YWluaW5nIGEgc2ltcGxpZmllZAogY2FsbCdzIHJlc3VsdC4g IElmIEB2YXJ7aWdub3JlfSBpcyB0cnVlIHRoZSB2YWx1ZSB3aWxsIGJlIGln bm9yZWQuCiBAZW5kIGRlZnR5cGVmbgogCitAaG9vayBUQVJHRVRfRElTUEFU Q0hfVkVSU0lPTgorRm9yIG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbiwgdGhp cyBob29rIHNldHMgdXAgdGhlIGRpc3BhdGNoZXIuCitAdmFye2Rpc3BhdGNo X2RlY2x9IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBk aXNwYXRjaCB0aGUKK3ZlcnNpb24uIEB2YXJ7Zm5kZWNsc30gYXJlIHRoZSBm dW5jdGlvbiBjaG9pY2VzIGZvciBkaXNwYXRjaC4KK0B2YXJ7ZW1wdHlfYmJ9 IGlzIGFuIGJhc2ljIGJsb2NrIGluIEB2YXJ7ZGlzcGF0Y2hfZGVjbH0gd2hl cmUgdGhlCitjb2RlIHRvIGRvIHRoZSBkaXNwYXRjaCB3aWxsIGJlIGFkZGVk LgorQGVuZCBkZWZ0eXBlZm4KKworQGhvb2sgVEFSR0VUX0NPTVBBUkVfVkVS U0lPTlMKK1RoaXMgaG9vayBpcyB1c2VkIHRvIGNvbXBhcmUgdGhlIHRhcmdl dCBhdHRyaWJ1dGVzIGluIHR3byBmdW5jdGlvbnMgdG8KK2ZpZ3VyZSBvdXQg d2hpY2ggZnVuY3Rpb24ncyBmZWF0dXJlcyBnZXQgaGlnaGVyIHByaW9yaXR5 LiAgVGhpcyBpcyB1c2VkCitkdXJpbmcgbXVsdGktdmVyc2lvbmluZyB0byBm aWd1cmUgb3V0IHRoZSBvcmRlciBvZiBkaXNwYXRjaGluZy4gQHZhcntkZWNs MX0KK2FuZCBAdmFye2RlY2wyfSBhcmUgdGhlIHR3byBmdW5jdGlvbiBkZWNs cyB0aGF0IHdpbGwgYmUgY29tcGFyZWQuCitAZW5kIGRlZnR5cGVmbgorCiBA aG9vayBUQVJHRVRfSU5WQUxJRF9XSVRISU5fRE9MT09QCiAKIFRha2UgYW4g aW5zdHJ1Y3Rpb24gaW4gQHZhcntpbnNufSBhbmQgcmV0dXJuIE5VTEwgaWYg aXQgaXMgdmFsaWQgd2l0aGluIGEKSW5kZXg6IGdjYy9jZ3JhcGhidWlsZC5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jZ3JhcGhidWlsZC5j CShyZXZpc2lvbiAxODgyMDkpCisrKyBnY2MvY2dyYXBoYnVpbGQuYwkod29y a2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw2IEBAIG1hcmtfc3RvcmUgKGdp bXBsZSBzdG10LCB0cmVlIHQsIHZvaWQgKmRhdGEpCiAgICAgIH0KICAgcmV0 dXJuIGZhbHNlOwogfQotCiAvKiBDcmVhdGUgY2dyYXBoIGVkZ2VzIGZvciBm dW5jdGlvbiBjYWxscy4KICAgIEFsc28gbG9vayBmb3IgZnVuY3Rpb25zIGFu ZCB2YXJpYWJsZXMgaGF2aW5nIGFkZHJlc3NlcyB0YWtlbi4gICovCiAKQEAg LTMxNiw2ICszMTUsMjAgQEAgYnVpbGRfY2dyYXBoX2VkZ2VzICh2b2lkKQog CSAgICAgIGludCBmcmVxID0gY29tcHV0ZV9jYWxsX3N0bXRfYmJfZnJlcXVl bmN5IChjdXJyZW50X2Z1bmN0aW9uX2RlY2wsCiAJCQkJCQkJIGJiKTsKIAkg ICAgICBkZWNsID0gZ2ltcGxlX2NhbGxfZm5kZWNsIChzdG10KTsKKwkgICAg ICAvKiBJZiBhIGNhbGwgdG8gYSBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbiBk aXNwYXRjaGVyIGlzIGZvdW5kLAorCQkgZ2VuZXJhdGUgdGhlIGJvZHkgdG8g ZGlzcGF0Y2ggdGhlIHJpZ2h0IGZ1bmN0aW9uCisJCSBhdCBydW4tdGltZS4g ICovCisJICAgICAgaWYgKGRlY2wgJiYgY2dyYXBoX2dldF9ub2RlIChkZWNs KQorCQkgICYmIGNncmFwaF9nZXRfbm9kZSAoZGVjbCktPmRpc3BhdGNoZXJf ZnVuY3Rpb24pCisJCXsKKwkJICB0cmVlIHJlc29sdmVyX2RlY2w7CisJCSAg c3RydWN0IGNncmFwaF9ub2RlICpjdXJyX25vZGUgPSBjZ3JhcGhfZ2V0X25v ZGUgKGRlY2wpOworCQkgIGdjY19hc3NlcnQgKGN1cnJfbm9kZS0+bmV4dF9m dW5jdGlvbl92ZXJzaW9uKTsKKwkJICByZXNvbHZlcl9kZWNsCisJCSAgICA9 IGJ1aWxkX3Jlc29sdmVyX2Zvcl9mdW5jdGlvbl92ZXJzaW9ucyAoY3Vycl9u b2RlKTsKKwkJICBnY2NfYXNzZXJ0IChyZXNvbHZlcl9kZWNsKTsKKwkJfQor CiAJICAgICAgaWYgKGRlY2wpCiAJCWNncmFwaF9jcmVhdGVfZWRnZSAobm9k ZSwgY2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZGVjbCksCiAJCQkJICAgIHN0 bXQsIGJiLT5jb3VudCwgZnJlcSk7CkluZGV4OiBnY2MvYy1mYW1pbHkvYy1j b21tb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvYy1mYW1p bHkvYy1jb21tb24uYwkocmV2aXNpb24gMTg4MjA5KQorKysgZ2NjL2MtZmFt aWx5L2MtY29tbW9uLmMJKHdvcmtpbmcgY29weSkKQEAgLTgyNDUsOSArODI0 NSwxNSBAQCBoYW5kbGVfdGFyZ2V0X2F0dHJpYnV0ZSAodHJlZSAqbm9kZSwg dHJlZSBuYW1lLCB0cgogICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVz LCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CiAgICAgICAqbm9f YWRkX2F0dHJzID0gdHJ1ZTsKICAgICB9Ci0gIGVsc2UgaWYgKCEgdGFyZ2V0 bS50YXJnZXRfb3B0aW9uLnZhbGlkX2F0dHJpYnV0ZV9wICgqbm9kZSwgbmFt ZSwgYXJncywKLQkJCQkJCSAgICAgIGZsYWdzKSkKLSAgICAqbm9fYWRkX2F0 dHJzID0gdHJ1ZTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFdoZW4gYSB0 YXJnZXQgYXR0cmlidXRlIGlzIGludmFsaWQsIGl0IG1heSBhbHNvIGJlIGJl Y2F1c2UgdGhlCisJIHRhcmdldCBmb3IgdGhlIGNvbXBpbGF0aW9uIHVuaXQg YW5kIHRoZSBhdHRyaWJ1dGUgbWF0Y2guICBGb3IKKyAgICAgICAgIGluc3Rh bmNlLCB0YXJnZXQgYXR0cmlidXRlICJ4eHgiIGlzIGludmFsaWQgd2hlbiAt bXh4eCBpcyB1c2VkLgorICAgICAgICAgV2hlbiB1c2VkIHdpdGggbXVsdGl2 ZXJzaW9uaW5nLCByZW1vdmluZyB0aGUgYXR0cmlidXRlIGNhbiBsZWFkCisg ICAgICAgICB0byBkdXBsaWNhdGUgZGVmaW5pdGlvbnMuICBTbywga2VlcCB0 aGUgYXR0cmlidXRlIHRhZ2dlZC4gICovCisgICAgICB0YXJnZXRtLnRhcmdl dF9vcHRpb24udmFsaWRfYXR0cmlidXRlX3AgKCpub2RlLCBuYW1lLCBhcmdz LCBmbGFncyk7CisgICAgfQogCiAgIHJldHVybiBOVUxMX1RSRUU7CiB9Cklu ZGV4OiBnY2MvdGFyZ2V0LmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvdGFyZ2V0LmRlZgkocmV2aXNpb24gMTg4MjA5KQorKysgZ2NjL3Rh cmdldC5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTEyNDksNiArMTI0OSwyNCBA QCBERUZIT09LCiAgdHJlZSwgKHRyZWUgZm5kZWNsLCBpbnQgbl9hcmdzLCB0 cmVlICphcmdwLCBib29sIGlnbm9yZSksCiAgaG9va190cmVlX3RyZWVfaW50 X3RyZWVwX2Jvb2xfbnVsbCkKIAorLyogVGFyZ2V0IGhvb2sgdG8gZ2VuZXJh dGUgdGhlIGRpc3BhdGNoaW5nIGNvZGUgZm9yIGNhbGxzIHRvIG11bHRpLXZl cnNpb25lZAorICAgZnVuY3Rpb25zLiAgRElTUEFUQ0hfREVDTCBpcyB0aGUg ZnVuY3Rpb24gdGhhdCB3aWxsIGhhdmUgdGhlIGRpc3BhdGNoaW5nCisgICBs b2dpYy4gIEZOREVDTFMgYXJlIHRoZSBsaXN0IG9mIGNob2ljZXMgZm9yIGRp c3BhdGNoIGFuZCBFTVBUWV9CQiBpcyB0aGUKKyAgIGJhc2ljIGJsb2NrIGlu IERJU1BBVENIX0RFQ0wgd2hpY2ggd2lsbCBjb250YWluIHRoZSBjb2RlLiAg Ki8KK0RFRkhPT0sKKyhkaXNwYXRjaF92ZXJzaW9uLAorICIiLAorIGludCwg KHRyZWUgZGlzcGF0Y2hfZGVjbCwgdm9pZCAqZm5kZWNscywgYmFzaWNfYmxv Y2sgKmVtcHR5X2JiKSwgTlVMTCkKKworLyogVGFyZ2V0IGhvb2sgdG8gY29t cGFyZSB0aGUgcHJpb3JpdHkgb2YgdGFyZ2V0IGZlYXR1cmVzIGluIGZ1bmN0 aW9uIERFQ0wxCisgICBhbmQgREVDTDIuICBJdCByZXR1cm5zIHBvc2l0aXZl IHZhbHVlIGlmIERFQ0wxIGlzIGhpZ2hlciBwcmlvcml0eSwKKyAgIG5lZ2F0 aXZlIHZhbHVlIGlmIERFQ0wyIGlzIGhpZ2hlciBwcmlvcml0eSBhbmQgMCBp ZiB0aGV5IGFyZSB0aGUKKyAgIHNhbWUuICAqLworREVGSE9PSworKGNvbXBh cmVfdmVyc2lvbnMsCisgIiIsCisgaW50LCAodHJlZSBkZWNsMSwgdHJlZSBk ZWNsMiksIE5VTEwpCisKIC8qIFJldHVybnMgYSBjb2RlIGZvciBhIHRhcmdl dC1zcGVjaWZpYyBidWlsdGluIHRoYXQgaW1wbGVtZW50cwogICAgcmVjaXBy b2NhbCBvZiB0aGUgZnVuY3Rpb24sIG9yIE5VTExfVFJFRSBpZiBub3QgYXZh aWxhYmxlLiAgKi8KIERFRkhPT0sKSW5kZXg6IGdjYy9jZ3JhcGguYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY2dyYXBoLmMJKHJldmlzaW9u IDE4ODIwOSkKKysrIGdjYy9jZ3JhcGguYwkod29ya2luZyBjb3B5KQpAQCAt MTI3Nyw2ICsxMjc3LDE0IEBAIGNncmFwaF9tYXJrX2FkZHJlc3NfdGFrZW5f bm9kZSAoc3RydWN0IGNncmFwaF9ub2RlCiAgIG5vZGUtPnN5bWJvbC5hZGRy ZXNzX3Rha2VuID0gMTsKICAgbm9kZSA9IGNncmFwaF9mdW5jdGlvbl9vcl90 aHVua19ub2RlIChub2RlLCBOVUxMKTsKICAgbm9kZS0+c3ltYm9sLmFkZHJl c3NfdGFrZW4gPSAxOworICAvKiBJZiB0aGUgYWRkcmVzcyBvZiBhIG11bHRp dmVyc2lvbmVkIGZ1bmN0aW9uIGRpc3BhdGNoZXIgaXMgdGFrZW4sCisgICAg IGdlbmVyYXRlIHRoZSBib2R5IHRvIGRpc3BhdGNoIHRoZSByaWdodCBmdW5j dGlvbiBhdCBydW4tdGltZS4gIFRoaXMKKyAgICAgaXMgbmVlZGVkIGFzIHRo ZSBhZGRyZXNzIGNhbiBiZSB1c2VkIHRvIGRvIGFuIGluZGlyZWN0IGNhbGwu ICAqLworICBpZiAobm9kZS0+ZGlzcGF0Y2hlcl9mdW5jdGlvbikKKyAgICB7 CisgICAgICBnY2NfYXNzZXJ0IChub2RlLT5uZXh0X2Z1bmN0aW9uX3ZlcnNp b24pOworICAgICAgYnVpbGRfcmVzb2x2ZXJfZm9yX2Z1bmN0aW9uX3ZlcnNp b25zIChub2RlKTsKKyAgICB9CiB9CiAKIC8qIFJldHVybiBsb2NhbCBpbmZv IGZvciB0aGUgY29tcGlsZWQgZnVuY3Rpb24uICAqLwpJbmRleDogZ2NjL2Nn cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jZ3JhcGgu aAkocmV2aXNpb24gMTg4MjA5KQorKysgZ2NjL2NncmFwaC5oCSh3b3JraW5n IGNvcHkpCkBAIC0yMjAsNiArMjIwLDE5IEBAIHN0cnVjdCBHVFkoKCkpIGNn cmFwaF9ub2RlIHsKICAgc3RydWN0IGNncmFwaF9ub2RlICpwcmV2X3NpYmxp bmdfY2xvbmU7CiAgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2xvbmVzOwogICBz dHJ1Y3QgY2dyYXBoX25vZGUgKmNsb25lX29mOworCisgIC8qIElmIHRoaXMg bm9kZSBjb3JyZXNwb25kcyB0byBhIGZ1bmN0aW9uIHZlcnNpb24sIHRoaXMg cG9pbnRzCisgICAgIHRvIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uLiAgKi8K KyAgdHJlZSBkaXNwYXRjaGVyX2ZuZGVjbDsKKyAgLyogSWYgdGhpcyBub2Rl IGlzIGEgZGlzcGF0Y2hlciBmb3IgZnVuY3Rpb24gdmVyc2lvbnMsIHRoaXMg cG9pbnRzCisgICAgIHRvIHJlc29sdmVyIGZ1bmN0aW9uLiAgKi8KKyAgdHJl ZSByZXNvbHZlcl9mbmRlY2w7CisgIC8qIENoYWlucyBhbGwgdGhlIHNlbWFu dGljYWxseSBpZGVudGljYWwgZnVuY3Rpb24gdmVyc2lvbnMuICBUaGUKKyAg ICAgZmlyc3QgZnVuY3Rpb24gaW4gdGhpcyBjaGFpbiBpcyB0aGUgZGVmYXVs dCBmdW5jdGlvbi4gICovCisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqcHJldl9m dW5jdGlvbl92ZXJzaW9uOworICAvKiBJZiB0aGlzIG5vZGUgaXMgYSBkaXNw YXRjaGVyIGZvciBmdW5jdGlvbiB2ZXJzaW9ucywgdGhpcyBhbHNvIHBvaW50 cworICAgICB0byB0aGUgZGVmYXVsdCBmdW5jdGlvbiB2ZXJzaW9uLiAgKi8K KyAgc3RydWN0IGNncmFwaF9ub2RlICpuZXh0X2Z1bmN0aW9uX3ZlcnNpb247 CiAgIC8qIEZvciBmdW5jdGlvbnMgd2l0aCBtYW55IGNhbGxzIHNpdGVzIGl0 IGhvbGRzIG1hcCBmcm9tIGNhbGwgZXhwcmVzc2lvbgogICAgICB0byB0aGUg ZWRnZSB0byBzcGVlZCB1cCBjZ3JhcGhfZWRnZSBmdW5jdGlvbi4gICovCiAg IGh0YWJfdCBHVFkoKHBhcmFtX2lzIChzdHJ1Y3QgY2dyYXBoX2VkZ2UpKSkg Y2FsbF9zaXRlX2hhc2g7CkBAIC0yNzEsNiArMjg0LDcgQEAgc3RydWN0IEdU WSgoKSkgY2dyYXBoX25vZGUgewogICAvKiA/PyBXZSBzaG91bGQgYmUgYWJs ZSB0byByZW1vdmUgdGhpcy4gIFdlIGhhdmUgZW5vdWdoIGJpdHMgaW4KICAg ICAgY2dyYXBoIHRvIGNhbGN1bGF0ZSBpdC4gICovCiAgIHVuc2lnbmVkIHRt X2Nsb25lIDogMTsKKyAgdW5zaWduZWQgZGlzcGF0Y2hlcl9mdW5jdGlvbiA6 IDE7CiB9OwogCiB0eXBlZGVmIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2dyYXBo X25vZGVfcHRyOwpAQCAtNjM2LDYgKzY1MCwyMiBAQCB2b2lkIGNncmFwaF9y ZWJ1aWxkX3JlZmVyZW5jZXMgKHZvaWQpOwogaW50IGNvbXB1dGVfY2FsbF9z dG10X2JiX2ZyZXF1ZW5jeSAodHJlZSwgYmFzaWNfYmxvY2sgYmIpOwogdm9p ZCByZWNvcmRfcmVmZXJlbmNlc19pbl9pbml0aWFsaXplciAodHJlZSwgYm9v bCk7CiAKKy8qIEluIG11bHRpdmVyc2lvbi5jICAqLworLyogUmV0dXJucyB0 cnVlIGlmIERFQ0wgaXMgYSBmdW5jdGlvbiB2ZXJzaW9uIGFuZCBpcyB0aGUg ZGVmYXVsdCB2ZXJzaW9uLiAgKi8KK2Jvb2wgaXNfZGVmYXVsdF9mdW5jdGlv bl92ZXJzaW9uICh0cmVlIGRlY2wpOwordm9pZCBtYXJrX2Z1bmN0aW9uX2Fz X3ZlcnNpb24gKHRyZWUpOworLyogUmV0dXJucyB0cnVlIGlmIHRoZSAidGFy Z2V0IiBhdHRyaWJ1dGUgc3RyaW5ncyBvZiBERUNMMSBhbmQgREVDTDIKKyAg IGRvbnQgbWF0Y2guICAqLworYm9vbCBoYXNfZGlmZmVyZW50X3ZlcnNpb25f YXR0cmlidXRlcyAoY29uc3QgdHJlZSBkZWNsMSwgY29uc3QgdHJlZSBkZWNs Mik7CisvKiBSZXR1cm4gdGhlIHRhcmdldCBhdHRyaWJ1dGUgaWYgZGVjbCBp cyBGVU5DVElPTl9ERUNMLiAqLwordHJlZSBmdW5jdGlvbl90YXJnZXRfYXR0 cmlidXRlIChjb25zdCB0cmVlIGRlY2wpOworLyogQnVpbGRzIHRoZSBkaXNw YXRjaGVyIGRlY2wgZm9yIGZ1bmN0aW9uIHZlcnNpb25zIGluIFZFQy4gICov Cit0cmVlIGJ1aWxkX2Rpc3BhdGNoZXJfZm9yX2Z1bmN0aW9uX3ZlcnNpb25z IChWRUMgKHRyZWUsaGVhcCkgKnZlYyk7CisvKiBCdWlsZHMgdGhlIHJlc29s dmVyIGZ1bmN0aW9uIHdoaWNoIHBpY2tzIHRoZSByaWdodCBmdW5jdGlvbiB2 ZXJzaW9uIGF0CisgICBydW4tdGltZS4gIE5PREUgaXMgdGhlIGNncmFwaCBu b2RlIG9mIHRoZSBkaXNwYXRjaGVyIHdoaWNoIHBvaW50cyB0bworICAgdGhl IHZhcmlvdXMgZnVuY3Rpb24gdmVyc2lvbnMgdG8gYmUgcmVzb2x2ZWQuICAq LwordHJlZSBidWlsZF9yZXNvbHZlcl9mb3JfZnVuY3Rpb25fdmVyc2lvbnMg KHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSk7CisKIC8qIEluIGlwYS5jICAq LwogYm9vbCBzeW10YWJfcmVtb3ZlX3VucmVhY2hhYmxlX25vZGVzIChib29s LCBGSUxFICopOwogY2dyYXBoX25vZGVfc2V0IGNncmFwaF9ub2RlX3NldF9u ZXcgKHZvaWQpOwpJbmRleDogZ2NjL3RyZWUuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdHJlZS5oCShyZXZpc2lvbiAxODgyMDkpCisrKyBn Y2MvdHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTIzLDYgKzM1MjMsMTIg QEAgZXh0ZXJuIFZFQyh0cmVlLCBnYykgKipkZWNsX2RlYnVnX2FyZ3NfaW5z ZXJ0ICh0cmUKICNkZWZpbmUgREVDTF9GVU5DVElPTl9TUEVDSUZJQ19PUFRJ TUlaQVRJT04oTk9ERSkgXAogICAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5P REUpLT5mdW5jdGlvbl9kZWNsLmZ1bmN0aW9uX3NwZWNpZmljX29wdGltaXph dGlvbikKIAorLyogSW4gRlVOQ1RJT05fREVDTCwgdGhpcyBpcyBzZXQgaWYg dGhpcyBmdW5jdGlvbiBoYXMgb3RoZXIgdmVyc2lvbnMgZ2VuZXJhdGVkCisg ICB1c2luZyAidGFyZ2V0IiBhdHRyaWJ1dGVzLiAgVGhlIGRlZmF1bHQgdmVy c2lvbiBpcyB0aGUgb25lIHdoaWNoIGRvZXMgbm90CisgICBoYXZlIGFueSAi dGFyZ2V0IiBhdHRyaWJ1dGUgc2V0LiAqLworI2RlZmluZSBERUNMX0ZVTkNU SU9OX1ZFUlNJT05FRChOT0RFKVwKKyAgIChGVU5DVElPTl9ERUNMX0NIRUNL IChOT0RFKS0+ZnVuY3Rpb25fZGVjbC52ZXJzaW9uZWRfZnVuY3Rpb24pCisK IC8qIEZVTkNUSU9OX0RFQ0wgaW5oZXJpdHMgZnJvbSBERUNMX05PTl9DT01N T04gYmVjYXVzZSBvZiB0aGUgdXNlIG9mIHRoZQogICAgYXJndW1lbnRzL3Jl c3VsdC9zYXZlZF90cmVlIGZpZWxkcyBieSBmcm9udCBlbmRzLiAgIEl0IHdh cyBlaXRoZXIgaW5oZXJpdAogICAgRlVOQ1RJT05fREVDTCBmcm9tIG5vbl9j b21tb24sIG9yIGluaGVyaXQgbm9uX2NvbW1vbiBmcm9tIEZVTkNUSU9OX0RF Q0wsCkBAIC0zNTY3LDggKzM1NzMsOCBAQCBzdHJ1Y3QgR1RZKCgpKSB0cmVl X2Z1bmN0aW9uX2RlY2wgewogICB1bnNpZ25lZCBsb29waW5nX2NvbnN0X29y X3B1cmVfZmxhZyA6IDE7CiAgIHVuc2lnbmVkIGhhc19kZWJ1Z19hcmdzX2Zs YWcgOiAxOwogICB1bnNpZ25lZCB0bV9jbG9uZV9mbGFnIDogMTsKLQotICAv KiAxIGJpdCBsZWZ0ICovCisgIHVuc2lnbmVkIHZlcnNpb25lZF9mdW5jdGlv biA6IDE7CisgIC8qIE5vIGJpdHMgbGVmdC4gICovCiB9OwogCiAvKiBUaGUg c291cmNlIGxhbmd1YWdlIG9mIHRoZSB0cmFuc2xhdGlvbi11bml0LiAgKi8K SW5kZXg6IGdjYy9tdWx0aXZlcnNpb24uYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvbXVsdGl2ZXJzaW9uLmMJKHJldmlzaW9uIDApCisrKyBn Y2MvbXVsdGl2ZXJzaW9uLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcy IEBACisvKiBGdW5jdGlvbiBNdWx0aXZlcnNpb25pbmcuCisgICBDb3B5cmln aHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisg ICBDb250cmlidXRlZCBieSBTcmlyYW1hbiBUYWxsYW0gKHRtc3JpcmFtQGdv b2dsZS5jb20pCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0ND IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl CitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKwor WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICovCisKKy8qIFRoaXMgZmlsZSBjb250YWlucyBy b3V0aW5lcyBmb3IgaGFuZGxpbmcgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb25z LgorCisgICBGdW5jdGlvbiB2ZXJzaW9ucyBhcmUgY3JlYXRlZCBieSB1c2lu ZyB0aGUgc2FtZSBmdW5jdGlvbiBzaWduYXR1cmUgYnV0CisgICBhbHNvIHRh Z2dpbmcgYXR0cmlidXRlICJ0YXJnZXQiIHRvIHNwZWNpZnkgdGhlIHBsYXRm b3JtIHR5cGUgZm9yIHdoaWNoCisgICB0aGUgdmVyc2lvbiBtdXN0IGJlIGV4 ZWN1dGVkLiAgSGVyZSBpcyBhbiBleGFtcGxlOgorCisgICBpbnQgZm9vICgp CisgICB7CisgICAgIHByaW50ZiAoIkV4ZWN1dGUgYXMgZGVmYXVsdCIpOwor ICAgICByZXR1cm4gMDsKKyAgIH0KKworICAgaW50ICBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0ICgiYXJjaD1jb3JlaTciKSkpCisgICBmb28gKCkKKyAgIHsK KyAgICAgcHJpbnRmICgiRXhlY3V0ZSBmb3IgY29yZWk3Iik7CisgICAgIHJl dHVybiAwOworICAgfQorICAgCisgICBpbnQgbWFpbiAoKQorICAgeworICAg ICByZXR1cm4gZm9vICgpOworICAgfSAKKworICAgVGhlIGNhbGwgdG8gZm9v IGluIG1haW4gaXMgcmVwbGFjZWQgd2l0aCBhIGNhbGwgdG8gYSBkaXNwYXRj aGVyIGZ1bmN0aW9uCisgICB0aGF0IGNvbnRhaW5zIHRoZSByZXNvbHZlciBj b2RlIHRvIGNhbGwgdGhlIGNvcnJlY3QgZnVuY3Rpb24gdmVyc2lvbiBhdAor ICAgcnVuLXRpbWUuICAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp bmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKyNp bmNsdWRlICJ0bS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJs YW5naG9va3MuaCIKKyNpbmNsdWRlICJmbGFncy5oIgorI2luY2x1ZGUgImNn cmFwaC5oIgorI2luY2x1ZGUgImRpYWdub3N0aWMuaCIKKyNpbmNsdWRlICJ0 b3BsZXYuaCIKKyNpbmNsdWRlICJwYXJhbXMuaCIKKyNpbmNsdWRlICJjb3Zl cmFnZS5oIgorI2luY2x1ZGUgImdnYy5oIgorI2luY2x1ZGUgImJhc2ljLWJs b2NrLmgiCisjaW5jbHVkZSAidG9wbGV2LmgiCisjaW5jbHVkZSAidHJlZS1k dW1wLmgiCisjaW5jbHVkZSAib3V0cHV0LmgiCisjaW5jbHVkZSAiZ2ltcGxl LXByZXR0eS1wcmludC5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1 ZGUgInRyZWUtZmxvdy5oIgorCisvKiBDb21wYXJhdG9yIGZ1bmN0aW9uIHRv IGJlIHVzZWQgaW4gcXNvcnQgcm91dGluZSB0byBzb3J0IGF0dHJpYnV0ZQor ICAgc3BlY2lmaWNhdGlvbiBzdHJpbmdzIHRvICJ0YXJnZXQiLiAgKi8KKwor c3RhdGljIGludAorYXR0cl9zdHJjbXAgKGNvbnN0IHZvaWQgKnYxLCBjb25z dCB2b2lkICp2MikKK3sKKyAgY29uc3QgY2hhciAqYzEgPSAqKGNoYXIgKmNv bnN0Kil2MTsKKyAgY29uc3QgY2hhciAqYzIgPSAqKGNoYXIgKmNvbnN0Kil2 MjsKKyAgcmV0dXJuIHN0cmNtcCAoYzEsIGMyKTsKK30KKworLyogU1RSIGlz IHRoZSBhcmd1bWVudCB0byB0YXJnZXQgYXR0cmlidXRlLiAgVGhpcyBmdW5j dGlvbiB0b2tlbml6ZXMKKyAgIHRoZSBjb21tYSBzZXBhcmF0ZWQgYXJndW1l bnRzLCBzb3J0cyB0aGVtIGFuZCByZXR1cm5zIGEgc3RyaW5nIHdoaWNoCisg ICBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29tbWEgc2VwYXJh dGVkIGFyZ3VtZW50cy4gICovCisKK3N0YXRpYyBjaGFyICoKK3NvcnRlZF9h dHRyX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKQoreworICBjaGFyICoqYXJn cyA9IE5VTEw7CisgIGNoYXIgKmF0dHJfc3RyLCAqcmV0X3N0cjsKKyAgY2hh ciAqYXR0ciA9IE5VTEw7CisgIHVuc2lnbmVkIGludCBhcmdudW0gPSAxOwor ICB1bnNpZ25lZCBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgc3RybGVu IChzdHIpOyBpKyspCisgICAgaWYgKHN0cltpXSA9PSAnLCcpCisgICAgICBh cmdudW0rKzsKKworICBhdHRyX3N0ciA9IChjaGFyICopeG1hbGxvYyAoc3Ry bGVuIChzdHIpICsgMSk7CisgIHN0cmNweSAoYXR0cl9zdHIsIHN0cik7CisK KyAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAoYXR0cl9zdHIpOyBpKyspCisg ICAgaWYgKGF0dHJfc3RyW2ldID09ICc9JykKKyAgICAgIGF0dHJfc3RyW2ld ID0gJ18nOworCisgIGlmIChhcmdudW0gPT0gMSkKKyAgICByZXR1cm4gYXR0 cl9zdHI7CisKKyAgYXJncyA9IChjaGFyICoqKXhtYWxsb2MgKGFyZ251bSAq IHNpemVvZiAoY2hhciAqKSk7CisKKyAgaSA9IDA7CisgIGF0dHIgPSBzdHJ0 b2sgKGF0dHJfc3RyLCAiLCIpOworICB3aGlsZSAoYXR0ciAhPSBOVUxMKQor ICAgIHsKKyAgICAgIGFyZ3NbaV0gPSBhdHRyOworICAgICAgaSsrOworICAg ICAgYXR0ciA9IHN0cnRvayAoTlVMTCwgIiwiKTsKKyAgICB9CisKKyAgcXNv cnQgKGFyZ3MsIGFyZ251bSwgc2l6ZW9mIChjaGFyKiksIGF0dHJfc3RyY21w KTsKKworICByZXRfc3RyID0gKGNoYXIgKil4bWFsbG9jIChzdHJsZW4gKHN0 cikgKyAxKTsKKyAgc3RyY3B5IChyZXRfc3RyLCBhcmdzWzBdKTsKKyAgZm9y IChpID0gMTsgaSA8IGFyZ251bTsgaSsrKQorICAgIHsKKyAgICAgIHN0cmNh dCAocmV0X3N0ciwgIl8iKTsKKyAgICAgIHN0cmNhdCAocmV0X3N0ciwgYXJn c1tpXSk7CisgICAgfQorCisgIGZyZWUgKGFyZ3MpOworICBmcmVlIChhdHRy X3N0cik7CisgIHJldHVybiByZXRfc3RyOworfQorCisvKiBSZXR1cm5zIHRy dWUgd2hlbiBvbmx5IG9uZSBvZiBERUNMMSBhbmQgREVDTDIgaXMgbWFya2Vk IHdpdGggInRhcmdldCIKKyAgIG9yIGlmIHRoZSAidGFyZ2V0IiBhdHRyaWJ1 dGUgc3RyaW5ncyBvZiBERUNMMSBhbmQgREVDTDIgZG9udCBtYXRjaC4gICov CisKK2Jvb2wKK2hhc19kaWZmZXJlbnRfdmVyc2lvbl9hdHRyaWJ1dGVzIChj b25zdCB0cmVlIGRlY2wxLCBjb25zdCB0cmVlIGRlY2wyKQoreworICB0cmVl IGF0dHIxLCBhdHRyMjsKKyAgY2hhciAqYzEsICpjMjsKKyAgYm9vbCByZXQg PSBmYWxzZTsKKworICBpZiAoVFJFRV9DT0RFIChkZWNsMSkgIT0gRlVOQ1RJ T05fREVDTAorICAgICAgfHwgVFJFRV9DT0RFIChkZWNsMikgIT0gRlVOQ1RJ T05fREVDTCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgYXR0cjEgPSBmdW5j dGlvbl90YXJnZXRfYXR0cmlidXRlIChkZWNsMSk7CisgIGF0dHIyID0gZnVu Y3Rpb25fdGFyZ2V0X2F0dHJpYnV0ZSAoZGVjbDIpOworCisgIGlmIChhdHRy MSA9PSBOVUxMX1RSRUUgJiYgYXR0cjIgPT0gTlVMTF9UUkVFKQorICAgIHJl dHVybiBmYWxzZTsKKworICBpZiAoKGF0dHIxID09IE5VTExfVFJFRSAmJiBh dHRyMiAhPSBOVUxMX1RSRUUpCisgICAgICB8fCAoYXR0cjEgIT0gTlVMTF9U UkVFICYmIGF0dHIyID09IE5VTExfVFJFRSkpCisgICAgcmV0dXJuIHRydWU7 CisKKyAgYzEgPSBzb3J0ZWRfYXR0cl9zdHJpbmcgKAorCVRSRUVfU1RSSU5H X1BPSU5URVIgKFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0dHIxKSkpKTsK KyAgYzIgPSBzb3J0ZWRfYXR0cl9zdHJpbmcgKAorCVRSRUVfU1RSSU5HX1BP SU5URVIgKFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0dHIyKSkpKTsKKwor ICBpZiAoc3RyY21wIChjMSwgYzIpICE9IDApCisgICAgIHJldCA9IHRydWU7 CisKKyAgZnJlZSAoYzEpOworICBmcmVlIChjMik7CisKKyAgcmV0dXJuIHJl dDsKK30KKworLyogSWYgdGhpcyBkZWNsIGNvcnJlc3BvbmRzIHRvIGEgZnVu Y3Rpb24gYW5kIGhhcyAidGFyZ2V0IiBhdHRyaWJ1dGUsCisgICBhcHBlbmQg dGhlIGF0dHJpYnV0ZSBzdHJpbmcgdG8gaXRzIGFzc2VtYmxlciBuYW1lLiAg Ki8KKworc3RhdGljIHZvaWQKK3ZlcnNpb25fYXNzZW1ibGVyX25hbWUgKGNv bnN0IHRyZWUgZGVjbCkKK3sKKyAgdHJlZSB2ZXJzaW9uX2F0dHI7CisgIGNv bnN0IGNoYXIgKm9yaWdfbmFtZSwgKnZlcnNpb25fc3RyaW5nLCAqYXR0cl9z dHI7CisgIGNoYXIgKmFzc2VtYmxlcl9uYW1lOworICB0cmVlIGFzc2VtYmxl cl9uYW1lX3RyZWU7CisgIAorICBpZiAoVFJFRV9DT0RFIChkZWNsKSAhPSBG VU5DVElPTl9ERUNMKQorICAgIHJldHVybjsKKworICBpZiAoREVDTF9ERUNM QVJFRF9JTkxJTkVfUCAoZGVjbCkKKyAgICAgICYmIGxvb2t1cF9hdHRyaWJ1 dGUgKCJnbnVfaW5saW5lIiwKKwkJCSAgIERFQ0xfQVRUUklCVVRFUyAoZGVj bCkpKQorICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVj bCksCisJICAgICAgIkZ1bmN0aW9uIHZlcnNpb25zIGNhbm5vdCBiZSBtYXJr ZWQgYXMgZ251X2lubGluZSwiCisJICAgICAgIiBib2RpZXMgaGF2ZSB0byBi ZSBnZW5lcmF0ZWRcbiIpOworCisgIGlmIChERUNMX1ZJUlRVQUxfUCAoZGVj bCkKKyAgICAgIHx8IERFQ0xfVklOREVYIChkZWNsKSkKKyAgICBlcnJvcl9h dCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLAorCSAgICAgICJWaXJ0 dWFsIGZ1bmN0aW9uIHZlcnNpb25pbmcgbm90IHN1cHBvcnRlZFxuIik7CisK KyAgdmVyc2lvbl9hdHRyID0gZnVuY3Rpb25fdGFyZ2V0X2F0dHJpYnV0ZSAo ZGVjbCk7CisgIC8qIHRhcmdldCBhdHRyaWJ1dGUgc3RyaW5nIGlzIE5VTEwg Zm9yIGRlZmF1bHQgZnVuY3Rpb25zLiAgKi8KKyAgaWYgKHZlcnNpb25fYXR0 ciA9PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuOworCisgIG9yaWdfbmFtZSA9 IElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVj bCkpOworICB2ZXJzaW9uX3N0cmluZworICAgID0gVFJFRV9TVFJJTkdfUE9J TlRFUiAoVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAodmVyc2lvbl9hdHRyKSkp OworCisgIGF0dHJfc3RyID0gc29ydGVkX2F0dHJfc3RyaW5nICh2ZXJzaW9u X3N0cmluZyk7CisgIGFzc2VtYmxlcl9uYW1lID0gKGNoYXIgKikgeG1hbGxv YyAoc3RybGVuIChvcmlnX25hbWUpCisJCQkJICAgICArIHN0cmxlbiAoYXR0 cl9zdHIpICsgMik7CisKKyAgc3ByaW50ZiAoYXNzZW1ibGVyX25hbWUsICIl cy4lcyIsIG9yaWdfbmFtZSwgYXR0cl9zdHIpOworICBpZiAoZHVtcF9maWxl KQorICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIkFzc2VtYmxlciBuYW1lIHNl dCB0byAlcyBmb3IgZnVuY3Rpb24gdmVyc2lvbiAlc1xuIiwKKwkgICAgIGFz c2VtYmxlcl9uYW1lLCBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAo ZGVjbCkpKTsKKworICBhc3NlbWJsZXJfbmFtZV90cmVlID0gZ2V0X2lkZW50 aWZpZXIgKGFzc2VtYmxlcl9uYW1lKTsKKworICBTRVRfREVDTF9BU1NFTUJM RVJfTkFNRSAoZGVjbCwgYXNzZW1ibGVyX25hbWVfdHJlZSk7CisgIFNFVF9E RUNMX1JUTCAoZGVjbCwgTlVMTCk7Cit9CisKK3ZvaWQKK21hcmtfZnVuY3Rp b25fYXNfdmVyc2lvbiAoY29uc3QgdHJlZSBkZWNsKQoreworICBpZiAoREVD TF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpKQorICAgIHJldHVybjsKKyAg REVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpID0gMTsKKyAgdmVyc2lv bl9hc3NlbWJsZXJfbmFtZSAoZGVjbCk7Cit9CisKKy8qIFJldHVybnMgdGFy Z2V0IGF0dHJpYnV0ZSB0cmVlIERFQ0wgaXMgYSBGVU5DVElPTl9ERUNMLCBy ZXR1cm5zCisgICBOVUxMIG90aGVyd2lzZS4gICovCisKK3RyZWUKK2Z1bmN0 aW9uX3RhcmdldF9hdHRyaWJ1dGUgKGNvbnN0IHRyZWUgZGVjbCkKK3sKKyAg aWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTCkKKyAgICBy ZXR1cm4gbG9va3VwX2F0dHJpYnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklC VVRFUyAoZGVjbCkpOworICByZXR1cm4gTlVMTDsKK30KKworLyogUmV0dXJu cyB0cnVlIGlmIGRlY2wgaXMgbXVsdGktdmVyc2lvbmVkIGFuZCBERUNMIGlz IHRoZSBkZWZhdWx0IGZ1bmN0aW9uLAorICAgdGhhdCBpcyBpdCBpcyBub3Qg dGFnZ2VkIHdpdGggInRhcmdldCIgYXR0cmlidXRlLiAgKi8KKworYm9vbAor aXNfZGVmYXVsdF9mdW5jdGlvbl92ZXJzaW9uIChjb25zdCB0cmVlIGRlY2wp Cit7CisgIHJldHVybiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9E RUNMCisJICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbCkKKwkg ICYmIChmdW5jdGlvbl90YXJnZXRfYXR0cmlidXRlIChkZWNsKSA9PSBOVUxM X1RSRUUpKTsKK30KKworLyogTWFrZXMgYSBmdW5jdGlvbiBhdHRyaWJ1dGUg b2YgdGhlIGZvcm0gTkFNRShBUkdfTkFNRSkgYW5kIGNoYWlucworICAgaXQg dG8gQ0hBSU4uICAqLworCitzdGF0aWMgdHJlZQorbWFrZV9hdHRyaWJ1dGUg KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZ19uYW1lLCB0cmVl IGNoYWluKQoreworICB0cmVlIGF0dHJfbmFtZTsKKyAgdHJlZSBhdHRyX2Fy Z19uYW1lOworICB0cmVlIGF0dHJfYXJnczsKKyAgdHJlZSBhdHRyOworCisg IGF0dHJfbmFtZSA9IGdldF9pZGVudGlmaWVyIChuYW1lKTsKKyAgYXR0cl9h cmdfbmFtZSA9IGJ1aWxkX3N0cmluZyAoc3RybGVuIChhcmdfbmFtZSksIGFy Z19uYW1lKTsKKyAgYXR0cl9hcmdzID0gdHJlZV9jb25zIChOVUxMX1RSRUUs IGF0dHJfYXJnX25hbWUsIE5VTExfVFJFRSk7CisgIGF0dHIgPSB0cmVlX2Nv bnMgKGF0dHJfbmFtZSwgYXR0cl9hcmdzLCBjaGFpbik7CisgIHJldHVybiBh dHRyOworfQorCisvKiBSZXR1cm4gYSBuZXcgbmFtZSBieSBhcHBlbmRpbmcg U1VGRklYIHRvIHRoZSBERUNMIG5hbWUuICBJZgorICAgbWFrZV91bmlxdWUg aXMgdHJ1ZSwgYXBwZW5kIHRoZSBmdWxsIHBhdGggbmFtZS4gICovCisKK3N0 YXRpYyBjaGFyICoKK21ha2VfbmFtZSAodHJlZSBkZWNsLCBjb25zdCBjaGFy ICpzdWZmaXgsIGJvb2wgbWFrZV91bmlxdWUpCit7CisgIGNoYXIgKmdsb2Jh bF92YXJfbmFtZTsKKyAgaW50IG5hbWVfbGVuOworICBjb25zdCBjaGFyICpu YW1lOworICBjb25zdCBjaGFyICp1bmlxdWVfbmFtZSA9IE5VTEw7CisKKyAg bmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9BU1NFTUJMRVJfTkFN RSAoZGVjbCkpOworCisgIC8qIEdldCBhIHVuaXF1ZSBuYW1lIHRoYXQgY2Fu IGJlIHVzZWQgZ2xvYmFsbHkgd2l0aG91dCBhbnkgY2hhbmNlcworICAgICBv ZiBjb2xsaXNpb24gYXQgbGluayB0aW1lLiAgKi8KKyAgaWYgKG1ha2VfdW5p cXVlKQorICAgIHVuaXF1ZV9uYW1lID0gSURFTlRJRklFUl9QT0lOVEVSIChn ZXRfZmlsZV9mdW5jdGlvbl9uYW1lICgiXDAiKSk7CisKKyAgbmFtZV9sZW4g PSBzdHJsZW4gKG5hbWUpICsgc3RybGVuIChzdWZmaXgpICsgMjsKKworICBp ZiAobWFrZV91bmlxdWUpCisgICAgbmFtZV9sZW4gKz0gc3RybGVuICh1bmlx dWVfbmFtZSkgKyAxOworICBnbG9iYWxfdmFyX25hbWUgPSAoY2hhciAqKSB4 bWFsbG9jIChuYW1lX2xlbik7CisKKyAgLyogVXNlICcuJyB0byBjb25jYXRl bmF0ZSBuYW1lcyBhcyBpdCBpcyBkZW1hbmdsZXIgZnJpZW5kbHkuICAqLwor ICBpZiAobWFrZV91bmlxdWUpCisgICAgICBzbnByaW50ZiAoZ2xvYmFsX3Zh cl9uYW1lLCBuYW1lX2xlbiwgIiVzLiVzLiVzIiwgbmFtZSwKKwkJdW5pcXVl X25hbWUsIHN1ZmZpeCk7CisgIGVsc2UKKyAgICAgIHNucHJpbnRmIChnbG9i YWxfdmFyX25hbWUsIG5hbWVfbGVuLCAiJXMuJXMiLCBuYW1lLCBzdWZmaXgp OworCisgIHJldHVybiBnbG9iYWxfdmFyX25hbWU7Cit9CisKKworLyogTWFr ZSB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gZGVjbCB0byBkaXNwYXRjaCB0aGUg dmVyc2lvbnMgb2YKKyAgIGEgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uLCAg REVGQVVMVF9ERUNMLiAgQ3JlYXRlIGFuCisgICBlbXB0eSBiYXNpYyBibG9j ayBpbiB0aGUgcmVzb2x2ZXIgYW5kIHN0b3JlIHRoZSBwb2ludGVyIGluCisg ICBFTVBUWV9CQi4gIFJldHVybiB0aGUgZGVjbCBvZiB0aGUgcmVzb2x2ZXIg ZnVuY3Rpb24uICAqLworCitzdGF0aWMgdHJlZQorbWFrZV9yZXNvbHZlcl9m dW5jIChjb25zdCB0cmVlIGRlZmF1bHRfZGVjbCwKKwkJICAgIGNvbnN0IHRy ZWUgZGlzcGF0Y2hfZGVjbCwKKwkJICAgIGJhc2ljX2Jsb2NrICplbXB0eV9i YikKK3sKKyAgY2hhciAqcmVzb2x2ZXJfbmFtZTsKKyAgdHJlZSBkZWNsLCB0 eXBlLCBkZWNsX25hbWUsIHQ7CisgIGJhc2ljX2Jsb2NrIG5ld19iYjsKKyAg dHJlZSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworICBib29sIGlzX3Vu aXEgPSBmYWxzZTsKKworICAvKiBJRlVOQydzIGhhdmUgdG8gYmUgZ2xvYmFs bHkgdmlzaWJsZS4gIFNvLCBpZiB0aGUgZGVmYXVsdF9kZWNsIGlzCisgICAg IG5vdCwgdGhlbiB0aGUgbmFtZSBvZiB0aGUgSUZVTkMgc2hvdWxkIGJlIG1h ZGUgdW5pcXVlLiAgKi8KKyAgaWYgKFRSRUVfUFVCTElDIChkZWZhdWx0X2Rl Y2wpID09IDApCisgICAgaXNfdW5pcSA9IHRydWU7CisKKyAgLyogQXBwZW5k IHRoZSBmaWxlbmFtZSB0byB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gaWYgdGhl IHZlcnNpb25zIGFyZQorICAgICBub3QgZXh0ZXJuYWxseSB2aXNpYmxlLiAg VGhpcyBpcyBiZWNhdXNlIHRoZSByZXNvbHZlciBmdW5jdGlvbiBoYXMKKyAg ICAgdG8gYmUgZXh0ZXJuYWxseSB2aXNpYmxlIGZvciB0aGUgbG9hZGVyIHRv IGZpbmQgaXQuICBTbywgYXBwZW5kaW5nCisgICAgIHRoZSBmaWxlbmFtZSB3 aWxsIHByZXZlbnQgY29uZmxpY3RzIHdpdGggYSByZXNvbHZlciBmdW5jdGlv biBmcm9tCisgICAgIGFub3RoZXIgbW9kdWxlIHdoaWNoIGlzIGJhc2VkIG9u IHRoZSBzYW1lIHZlcnNpb24gbmFtZS4gICovCisgIHJlc29sdmVyX25hbWUg PSBtYWtlX25hbWUgKGRlZmF1bHRfZGVjbCwgInJlc29sdmVyIiwgaXNfdW5p cSk7CisKKyAgLyogVGhlIHJlc29sdmVyIGZ1bmN0aW9uIHNob3VsZCByZXR1 cm4gYSAodm9pZCAqKS4gKi8KKyAgdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5 cGVfbGlzdCAocHRyX3R5cGVfbm9kZSwgTlVMTF9UUkVFKTsKKworICBkZWNs ID0gYnVpbGRfZm5fZGVjbCAocmVzb2x2ZXJfbmFtZSwgdHlwZSk7CisgIGRl Y2xfbmFtZSA9IGdldF9pZGVudGlmaWVyIChyZXNvbHZlcl9uYW1lKTsKKyAg U0VUX0RFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wsIGRlY2xfbmFtZSk7CisK KyAgREVDTF9OQU1FIChkZWNsKSA9IGRlY2xfbmFtZTsKKyAgVFJFRV9VU0VE IChkZWNsKSA9IDE7CisgIERFQ0xfQVJUSUZJQ0lBTCAoZGVjbCkgPSAxOwor ICBERUNMX0lHTk9SRURfUCAoZGVjbCkgPSAwOworICAvKiBJRlVOQyByZXNv bHZlcnMgaGF2ZSB0byBiZSBleHRlcm5hbGx5IHZpc2libGUuICAqLworICBU UkVFX1BVQkxJQyAoZGVjbCkgPSAxOworICBERUNMX1VOSU5MSU5BQkxFIChk ZWNsKSA9IDE7CisKKyAgREVDTF9FWFRFUk5BTCAoZGVjbCkgPSAwOworICBE RUNMX0VYVEVSTkFMIChkaXNwYXRjaF9kZWNsKSA9IDA7CisKKyAgREVDTF9D T05URVhUIChkZWNsKSA9IE5VTExfVFJFRTsKKyAgREVDTF9JTklUSUFMIChk ZWNsKSA9IG1ha2Vfbm9kZSAoQkxPQ0spOworICBERUNMX1NUQVRJQ19DT05T VFJVQ1RPUiAoZGVjbCkgPSAwOworICBUUkVFX1JFQURPTkxZIChkZWNsKSA9 IDA7CisgIERFQ0xfUFVSRV9QIChkZWNsKSA9IDA7CisKKyAgaWYgKERFQ0xf Q09NREFUX0dST1VQIChkZWZhdWx0X2RlY2wpKQorICAgIHsKKyAgICAgIERF Q0xfQ09NREFUIChkZWNsKSA9IERFQ0xfQ09NREFUIChkZWZhdWx0X2RlY2wp OworICAgICAgbWFrZV9kZWNsX29uZV9vbmx5IChkZWNsLCBERUNMX0NPTURB VF9HUk9VUCAoZGVmYXVsdF9kZWNsKSk7CisgICAgfQorICBlbHNlIGlmIChU UkVFX1BVQkxJQyAoZGVmYXVsdF9kZWNsKSkKKyAgICB7CisgICAgICAvKiBJ biB0aGlzIGNhc2UsIGVhY2ggdHJhbnNsYXRpb24gdW5pdCB3aXRoIGEgY2Fs bCB0byB0aGlzCisJIHZlcnNpb25lZCBmdW5jdGlvbiB3aWxsIHB1dCBvdXQg YSByZXNvbHZlci4gIEVuc3VyZSBpdAorCSBpcyBjb21kYXQgdG8ga2VlcCBq dXN0IG9uZSBjb3B5LiAgKi8KKyAgICAgIERFQ0xfQ09NREFUIChkZWNsKSA9 IDE7CisgICAgICBtYWtlX2RlY2xfb25lX29ubHkgKGRlY2wsIERFQ0xfQVNT RU1CTEVSX05BTUUgKGRlY2wpKTsKKyAgICB9CisgIC8qIEJ1aWxkIHJlc3Vs dCBkZWNsIGFuZCBhZGQgdG8gZnVuY3Rpb25fZGVjbC4gKi8KKyAgdCA9IGJ1 aWxkX2RlY2wgKFVOS05PV05fTE9DQVRJT04sIFJFU1VMVF9ERUNMLCBOVUxM X1RSRUUsIHB0cl90eXBlX25vZGUpOworICBERUNMX0FSVElGSUNJQUwgKHQp ID0gMTsKKyAgREVDTF9JR05PUkVEX1AgKHQpID0gMTsKKyAgREVDTF9SRVNV TFQgKGRlY2wpID0gdDsKKworICBnaW1wbGlmeV9mdW5jdGlvbl90cmVlIChk ZWNsKTsKKyAgb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJlbnRf ZnVuY3Rpb25fZGVjbDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9GVU5D VElPTiAoZGVjbCkpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBkZWNs OworICBnaW1wbGVfcmVnaXN0ZXJfY2ZnX2hvb2tzICgpOworICBpbml0X2Vt cHR5X3RyZWVfY2ZnX2Zvcl9mdW5jdGlvbiAoREVDTF9TVFJVQ1RfRlVOQ1RJ T04gKGRlY2wpKTsKKyAgY2Z1bi0+Y3Vycl9wcm9wZXJ0aWVzIHw9CisgICAg KFBST1BfZ2ltcGxlX2xjZiB8IFBST1BfZ2ltcGxlX2xlaCB8IFBST1BfY2Zn IHwgUFJPUF9yZWZlcmVuY2VkX3ZhcnMgfAorICAgICBQUk9QX2dpbXBsZV9h bnkpOworICBuZXdfYmIgPSBjcmVhdGVfZW1wdHlfYmIgKEVOVFJZX0JMT0NL X1BUUik7CisgIG1ha2VfZWRnZSAoRU5UUllfQkxPQ0tfUFRSLCBuZXdfYmIs IEVER0VfRkFMTFRIUlUpOworICBtYWtlX2VkZ2UgKG5ld19iYiwgRVhJVF9C TE9DS19QVFIsIDApOworICAqZW1wdHlfYmIgPSBuZXdfYmI7CisKKyAgY2dy YXBoX2FkZF9uZXdfZnVuY3Rpb24gKGRlY2wsIHRydWUpOworICBjZ3JhcGhf Y2FsbF9mdW5jdGlvbl9pbnNlcnRpb25faG9va3MgKGNncmFwaF9nZXRfY3Jl YXRlX25vZGUgKGRlY2wpKTsKKworICBpZiAoREVDTF9DT01EQVRfR1JPVVAg KGRlZmF1bHRfZGVjbCkpCisgICAgeworICAgICAgZ2NjX2Fzc2VydCAoY2dy YXBoX2dldF9ub2RlIChkZWZhdWx0X2RlY2wpKTsKKyAgICAgIHN5bXRhYl9h ZGRfdG9fc2FtZV9jb21kYXRfZ3JvdXAgKAorCShzeW10YWJfbm9kZSkgY2dy YXBoX2dldF9ub2RlIChkZWNsKSwKKwkoc3ltdGFiX25vZGUpIGNncmFwaF9n ZXRfbm9kZSAoZGVmYXVsdF9kZWNsKSk7CisgICAgfQorCisgIHBvcF9jZnVu ICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBvbGRfY3VycmVudF9m dW5jdGlvbl9kZWNsOworCisgIGdjY19hc3NlcnQgKGRpc3BhdGNoX2RlY2wg IT0gTlVMTCk7CisgIC8qIE1hcmsgZGlzcGF0Y2hfZGVjbCBhcyAiaWZ1bmMi IHdpdGggcmVzb2x2ZXIgYXMgcmVzb2x2ZXJfbmFtZS4gICovCisgIERFQ0xf QVRUUklCVVRFUyAoZGlzcGF0Y2hfZGVjbCkgCisgICAgPSBtYWtlX2F0dHJp YnV0ZSAoImlmdW5jIiwgcmVzb2x2ZXJfbmFtZSwgREVDTF9BVFRSSUJVVEVT IChkaXNwYXRjaF9kZWNsKSk7CisKKyAgLyogQ3JlYXRlIHRoZSBhbGlhcyBm b3IgZGlzcGF0Y2ggdG8gcmVzb2x2ZXIgaGVyZS4gICovCisgIGNncmFwaF9j cmVhdGVfZnVuY3Rpb25fYWxpYXMgKGRpc3BhdGNoX2RlY2wsIGRlY2wpOwor ICByZXR1cm4gZGVjbDsKK30KKworLyogR2VuZXJhdGUgdGhlIGRpc3BhdGNo aW5nIGNvZGUgYm9keSB0byBkaXNwYXRjaCBtdWx0aS12ZXJzaW9uZWQgZnVu Y3Rpb24KKyAgIERFQ0wuICBUaGUgdGFyZ2V0IGhvb2sgaXMgY2FsbGVkIHRv IHByb2Nlc3MgdGhlICJ0YXJnZXQiIGF0dHJpYnV0ZXMgYW5kCisgICBwcm92 aWRlIHRoZSBjb2RlIHRvIGRpc3BhdGNoIHRoZSByaWdodCBmdW5jdGlvbiBh dCBydW4tdGltZS4gIE5PREUgcG9pbnRzCisgICB0byB0aGUgZGlzcGF0Y2hl ciBkZWNsIHdob3NlIGJvZHkgd2lsbCBiZSBjcmVhdGVkLiAgKi8KKwordHJl ZSAKK2J1aWxkX3Jlc29sdmVyX2Zvcl9mdW5jdGlvbl92ZXJzaW9ucyAoc3Ry dWN0IGNncmFwaF9ub2RlICpub2RlKQoreworICB0cmVlIHJlc29sdmVyX2Rl Y2w7CisgIGJhc2ljX2Jsb2NrIGVtcHR5X2JiOworICBWRUMgKHRyZWUsIGhl YXApICpmbl92ZXJfdmVjID0gTlVMTDsKKyAgdHJlZSBvbGRfY3VycmVudF9m dW5jdGlvbl9kZWNsOworICB0cmVlIGRlZmF1bHRfdmVyX2RlY2w7CisgIHN0 cnVjdCBjZ3JhcGhfbm9kZSAqdmVyc247CisKKyAgaWYgKG5vZGUtPnJlc29s dmVyX2ZuZGVjbCkKKyAgICByZXR1cm4gbm9kZS0+cmVzb2x2ZXJfZm5kZWNs OworCisgIGRlZmF1bHRfdmVyX2RlY2wgPSBub2RlLT5uZXh0X2Z1bmN0aW9u X3ZlcnNpb24tPnN5bWJvbC5kZWNsOworICByZXNvbHZlcl9kZWNsID0gbWFr ZV9yZXNvbHZlcl9mdW5jIChkZWZhdWx0X3Zlcl9kZWNsLAorCQkJICAJCSAg ICBub2RlLT5zeW1ib2wuZGVjbCwKKwkJCQkJICAgICZlbXB0eV9iYik7Cisg IG5vZGUtPnJlc29sdmVyX2ZuZGVjbCA9IHJlc29sdmVyX2RlY2w7CisKKyAg b2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJlbnRfZnVuY3Rpb25f ZGVjbDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9GVU5DVElPTiAocmVz b2x2ZXJfZGVjbCkpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSByZXNv bHZlcl9kZWNsOworCisgIGZuX3Zlcl92ZWMgPSBWRUNfYWxsb2MgKHRyZWUs IGhlYXAsIDIpOworCisgIGZvciAodmVyc24gPSBub2RlLT5uZXh0X2Z1bmN0 aW9uX3ZlcnNpb247IHZlcnNuOworICAgICAgIHZlcnNuID0gdmVyc24tPm5l eHRfZnVuY3Rpb25fdmVyc2lvbikKKyAgICB7CisgICAgICAvKiBDaGVjayBm b3IgdmlydHVhbCBmdW5jdGlvbnMgaGVyZSBhZ2FpbiwgYXMgYnkgdGhpcyB0 aW1lIGl0IHNob3VsZAorCSBoYXZlIGJlZW4gZGV0ZXJtaW5lZCBpZiB0aGlz IGZ1bmN0aW9uIG5lZWRzIGEgdnRhYmxlIGluZGV4IG9yCisJIG5vdC4gIFRo aXMgaGFwcGVucyBmb3IgbWV0aG9kcyBpbiBkZXJpdmVkIGNsYXNzZXMgdGhh dCBvdmVycmlkZQorCSB2aXJ0dWFsIG1ldGhvZHMgaW4gYmFzZSBjbGFzc2Vz IGJ1dCBhcmUgbm90IGV4cGxpY2l0bHkgbWFya2VkIGFzCisJIHZpcnR1YWwu ICAqLworICAgICAgaWYgKERFQ0xfVklOREVYICh2ZXJzbi0+c3ltYm9sLmRl Y2wpKQorICAgICAgICBlcnJvcl9hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04g KHZlcnNuLT5zeW1ib2wuZGVjbCksCisJCSAgIlZpcnR1YWwgZnVuY3Rpb24g bXVsdGl2ZXJzaW9uaW5nIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgIFZFQ19z YWZlX3B1c2ggKHRyZWUsIGhlYXAsIGZuX3Zlcl92ZWMsIHZlcnNuLT5zeW1i b2wuZGVjbCk7CisgICAgfQorCisgIGdjY19hc3NlcnQgKHRhcmdldG0uZGlz cGF0Y2hfdmVyc2lvbik7CisgIHRhcmdldG0uZGlzcGF0Y2hfdmVyc2lvbiAo cmVzb2x2ZXJfZGVjbCwgZm5fdmVyX3ZlYywgJmVtcHR5X2JiKTsKKworICBy ZWJ1aWxkX2NncmFwaF9lZGdlcyAoKTsgCisgIHBvcF9jZnVuICgpOworICBj dXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBvbGRfY3VycmVudF9mdW5jdGlvbl9k ZWNsOworICByZXR1cm4gcmVzb2x2ZXJfZGVjbDsKK30KKworLyogTWFrZSBh IGRpc3BhdGNoZXIgZGVjbGFyYXRpb24gZm9yIHRoZSBtdWx0aS12ZXJzaW9u ZWQgZnVuY3Rpb24gREVDTC4KKyAgIENhbGxzIHRvIERFQ0wgZnVuY3Rpb24g d2lsbCBiZSByZXBsYWNlZCB3aXRoIGNhbGxzIHRvIHRoZSBkaXNwYXRjaGVy LgorICAgUmV0dXJuIHRoZSBkZWNsIGNyZWF0ZWQuICAqLworCitzdGF0aWMg dHJlZQorbWFrZV9kaXNwYXRjaGVyX2RlY2wgKGNvbnN0IHRyZWUgZGVjbCkK K3sKKyAgdHJlZSBmdW5jX2RlY2w7CisgIGNoYXIgKmZ1bmNfbmFtZSwgKnJl c29sdmVyX25hbWU7CisgIHRyZWUgZm5fdHlwZSwgZnVuY190eXBlOworICBi b29sIGlzX3VuaXEgPSBmYWxzZTsKKworICBpZiAoVFJFRV9QVUJMSUMgKGRl Y2wpID09IDApCisgICAgaXNfdW5pcSA9IHRydWU7CisKKyAgZnVuY19uYW1l ID0gbWFrZV9uYW1lIChkZWNsLCAiaWZ1bmMiLCBpc191bmlxKTsKKyAgcmVz b2x2ZXJfbmFtZSA9IG1ha2VfbmFtZSAoZGVjbCwgInJlc29sdmVyIiwgaXNf dW5pcSk7CisgIGdjY19hc3NlcnQgKHJlc29sdmVyX25hbWUpOworCisgIGZu X3R5cGUgPSBUUkVFX1RZUEUgKGRlY2wpOworICBmdW5jX3R5cGUgPSBidWls ZF9mdW5jdGlvbl90eXBlIChUUkVFX1RZUEUgKGZuX3R5cGUpLAorCQkJCSAg ICBUWVBFX0FSR19UWVBFUyAoZm5fdHlwZSkpOworICAKKyAgZnVuY19kZWNs ID0gYnVpbGRfZm5fZGVjbCAoZnVuY19uYW1lLCBmdW5jX3R5cGUpOworICBU UkVFX1VTRUQgKGZ1bmNfZGVjbCkgPSAxOworICBERUNMX0NPTlRFWFQgKGZ1 bmNfZGVjbCkgPSBOVUxMX1RSRUU7CisgIERFQ0xfSU5JVElBTCAoZnVuY19k ZWNsKSA9IGVycm9yX21hcmtfbm9kZTsKKyAgREVDTF9BUlRJRklDSUFMIChm dW5jX2RlY2wpID0gMTsKKyAgLyogTWFyayB0aGlzIGZ1bmMgYXMgZXh0ZXJu YWwsIHRoZSByZXNvbHZlciB3aWxsIGZsaXAgaXQgYWdhaW4gaWYKKyAgICAg aXQgZ2V0cyBnZW5lcmF0ZWQuICAqLworICBERUNMX0VYVEVSTkFMIChmdW5j X2RlY2wpID0gMTsKKyAgLyogVGhpcyB3aWxsIGJlIG9mIHR5cGUgSUZVTkNz IGhhdmUgdG8gYmUgZXh0ZXJuYWxseSB2aXNpYmxlLiAgKi8KKyAgVFJFRV9Q VUJMSUMgKGZ1bmNfZGVjbCkgPSAxOworCisgIHJldHVybiBmdW5jX2RlY2w7 ICAKK30KKwordHJlZQorYnVpbGRfZGlzcGF0Y2hlcl9mb3JfZnVuY3Rpb25f dmVyc2lvbnMgKFZFQyAodHJlZSxoZWFwKSAqZm5fdmVyX3ZlYykKK3sKKyAg c3RydWN0IGNncmFwaF9ub2RlICpub2RlID0gTlVMTDsKKyAgc3RydWN0IGNn cmFwaF9ub2RlICpkZWZhdWx0X25vZGUgPSBOVUxMOworICBzdHJ1Y3QgY2dy YXBoX25vZGUgKmN1cnJfbm9kZSA9IE5VTEw7CisgIGludCBpeDsKKyAgdHJl ZSBlbGU7CisgIHRyZWUgZGlzcGF0Y2hfZGVjbCA9IE5VTEw7CisKKyAgZ2Nj X2Fzc2VydCAoZm5fdmVyX3ZlYyAhPSBOVUxMKTsKKworICAvKiBGaW5kIHRo ZSBkZWZhdWx0IHZlcnNpb24uICAqLworICBmb3IgKGl4ID0gMDsgVkVDX2l0 ZXJhdGUgKHRyZWUsIGZuX3Zlcl92ZWMsIGl4LCBlbGUpOyArK2l4KQorICAg IHsKKyAgICAgIGlmIChpc19kZWZhdWx0X2Z1bmN0aW9uX3ZlcnNpb24gKGVs ZSkpCisJeworCSAgZGVmYXVsdF9ub2RlID0gY2dyYXBoX2dldF9jcmVhdGVf bm9kZSAoZWxlKTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgLyogSWYg dGhlcmUgaXMgbm8gZGVmYXVsdCBub2RlLCBqdXN0IHJldHVybiBOVUxMLiAg Ki8KKyAgaWYgKCFkZWZhdWx0X25vZGUpCisgICAgcmV0dXJuIE5VTEw7CisK KyAgaWYgKGRlZmF1bHRfbm9kZS0+ZGlzcGF0Y2hlcl9mbmRlY2wpCisgICAg cmV0dXJuIGRlZmF1bHRfbm9kZS0+ZGlzcGF0Y2hlcl9mbmRlY2w7CisKKyNp ZiBkZWZpbmVkIChBU01fT1VUUFVUX1RZUEVfRElSRUNUSVZFKSAmJiBIQVZF X0dOVV9JTkRJUkVDVF9GVU5DVElPTgorICAvKiBSaWdodCBub3csIHRoZSBk aXNwYXRjaGluZyBpcyBkb25lIHZpYSBpZnVuYy4gICovCisgIGRpc3BhdGNo X2RlY2wgPSBtYWtlX2Rpc3BhdGNoZXJfZGVjbCAoZGVmYXVsdF9ub2RlLT5z eW1ib2wuZGVjbCk7IAorI2Vsc2UKKyAgZXJyb3JfYXQgKERFQ0xfU09VUkNF X0xPQ0FUSU9OIChkZWZhdWx0X25vZGUtPnN5bWJvbC5kZWNsKSwKKwkgICAg Ik11bHRpdmVyc2lvbmluZyBuZWVkcyBpZnVuYyB3aGljaCBpcyBub3Qgc3Vw cG9ydGVkICIKKwkgICAgImluIHRoaXMgY29uZmlndXJhdGlvbiIpOworI2Vu ZGlmCisgIGRlZmF1bHRfbm9kZS0+ZGlzcGF0Y2hlcl9mbmRlY2wgPSBkaXNw YXRjaF9kZWNsOworICBjdXJyX25vZGUgPSBjZ3JhcGhfZ2V0X2NyZWF0ZV9u b2RlIChkaXNwYXRjaF9kZWNsKTsKKyAgZ2NjX2Fzc2VydCAoY3Vycl9ub2Rl KTsKKyAgY3Vycl9ub2RlLT5kaXNwYXRjaGVyX2Z1bmN0aW9uID0gMTsKKyAg Y2dyYXBoX21hcmtfYWRkcmVzc190YWtlbl9ub2RlIChkZWZhdWx0X25vZGUp OworCisgIGZvciAoaXggPSAwOyBWRUNfaXRlcmF0ZSAodHJlZSwgZm5fdmVy X3ZlYywgaXgsIGVsZSk7ICsraXgpCisgICAgeworICAgICAgbm9kZSA9IGNn cmFwaF9nZXRfY3JlYXRlX25vZGUgKGVsZSk7CisgICAgICBnY2NfYXNzZXJ0 IChub2RlICE9IE5VTEwgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGVs ZSkpOworICAgICAgaWYgKG5vZGUgPT0gZGVmYXVsdF9ub2RlKQorCWNvbnRp bnVlOworICAgICAgZ2NjX2Fzc2VydCAoZnVuY3Rpb25fdGFyZ2V0X2F0dHJp YnV0ZSAoZWxlKSAhPSBOVUxMX1RSRUUpOworICAgICAgaWYgKGN1cnJfbm9k ZS0+bmV4dF9mdW5jdGlvbl92ZXJzaW9uKQorIAl7CisJICBub2RlLT5uZXh0 X2Z1bmN0aW9uX3ZlcnNpb24gPSBjdXJyX25vZGUtPm5leHRfZnVuY3Rpb25f dmVyc2lvbjsKKwkgIGN1cnJfbm9kZS0+bmV4dF9mdW5jdGlvbl92ZXJzaW9u LT5wcmV2X2Z1bmN0aW9uX3ZlcnNpb24gPSBub2RlOworCX0KKyAgICAgIGN1 cnJfbm9kZS0+bmV4dF9mdW5jdGlvbl92ZXJzaW9uID0gbm9kZTsKKyAgICAg IG5vZGUtPnByZXZfZnVuY3Rpb25fdmVyc2lvbiA9IGN1cnJfbm9kZTsKKyAg ICAgIG5vZGUtPmRpc3BhdGNoZXJfZm5kZWNsID0gZGlzcGF0Y2hfZGVjbDsK KyAgICB9CisKKyAgLyogVGhlIGRlZmF1bHQgdmVyc2lvbiBzaG91bGQgYmUg dGhlIGZpcnN0IG5vZGUuICAqLworICBkZWZhdWx0X25vZGUtPm5leHRfZnVu Y3Rpb25fdmVyc2lvbiA9IGN1cnJfbm9kZS0+bmV4dF9mdW5jdGlvbl92ZXJz aW9uOworICBjdXJyX25vZGUtPm5leHRfZnVuY3Rpb25fdmVyc2lvbi0+cHJl dl9mdW5jdGlvbl92ZXJzaW9uID0gZGVmYXVsdF9ub2RlOworICBjdXJyX25v ZGUtPm5leHRfZnVuY3Rpb25fdmVyc2lvbiA9IGRlZmF1bHRfbm9kZTsKKyAg CisgIHJldHVybiBkaXNwYXRjaF9kZWNsOyAKK30KSW5kZXg6IGdjYy9jZ3Jh cGh1bml0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NncmFw aHVuaXQuYwkocmV2aXNpb24gMTg4MjA5KQorKysgZ2NjL2NncmFwaHVuaXQu Ywkod29ya2luZyBjb3B5KQpAQCAtOTM5LDcgKzkzOSw3IEBAIGNncmFwaF9h bmFseXplX2Z1bmN0aW9ucyAodm9pZCkKIAogCSAgICAgIGZvciAoZWRnZSA9 IGNub2RlLT5jYWxsZWVzOyBlZGdlOyBlZGdlID0gZWRnZS0+bmV4dF9jYWxs ZWUpCiAJCWlmIChlZGdlLT5jYWxsZWUtPmxvY2FsLmZpbmFsaXplZCkKLQkJ ICBlbnF1ZXVlX25vZGUgKChzeW10YWJfbm9kZSllZGdlLT5jYWxsZWUpOwor ICAgICAgICAgICAgICAgICBlbnF1ZXVlX25vZGUgKChzeW10YWJfbm9kZSll ZGdlLT5jYWxsZWUpOwogCiAJICAgICAgLyogSWYgZGVjbCBpcyBhIGNsb25l IG9mIGFuIGFic3RyYWN0IGZ1bmN0aW9uLCBtYXJrIHRoYXQgYWJzdHJhY3QK IAkJIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgcmVsZWFzZSBpdHMgYm9k eS4gVGhlIERFQ0xfSU5JVElBTCgpIG9mIHRoYXQKSW5kZXg6IGdjYy90ZXN0 c3VpdGUvZysrLmRnL212Mi5DCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy90ZXN0c3VpdGUvZysrLmRnL212Mi5DCShyZXZpc2lvbiAwKQorKysg Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXYyLkMJKHJldmlzaW9uIDApCkBAIC0w LDAgKzEsMTE5IEBACisvKiBUZXN0IGNhc2UgdG8gY2hlY2sgaWYgTXVsdGl2 ZXJzaW9uaW5nIGNob29zZXMgdGhlIGNvcnJlY3QKKyAgIGRpc3BhdGNoaW5n IG9yZGVyIHdoZW4gdmVyc2lvbnMgYXJlIGZvciB2YXJpb3VzIElTQXMuICAq LworLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSot KiB9IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1pZnVuYyAiIiB9ICAqLworLyog eyBkZy1vcHRpb25zICItTzIiIH0gKi8KKworI2luY2x1ZGUgPGFzc2VydC5o PgorCisvKiBEZWZhdWx0IHZlcnNpb24uICAqLworaW50IGZvbyAoKTsKKy8q IFRoZSBkaXNwYXRjaCBjaGVja3Mgc2hvdWxkIGJlIGluIHRoZSBleGFjdCBy ZXZlcnNlIG9yZGVyIG9mIHRoZQorICAgZGVjbGFyYXRpb25zIGJlbG93LiAg Ki8KK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoIm1teCIp KSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJzc2Ui KSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgic3Nl MiIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJz c2UzIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAo InNzc2UzIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCAoInNzZTQuMSIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQgKCJzc2U0LjIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0ICgicG9wY250IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCAoImF2eCIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmli dXRlX18gKCh0YXJnZXQgKCJhdngyIikpKTsKKworaW50IG1haW4gKCkKK3sK KworICBpbnQgdmFsID0gZm9vICgpOworCisgIGlmIChfX2J1aWx0aW5fY3B1 X3N1cHBvcnRzICgiYXZ4MiIpKQorICAgIGFzc2VydCAodmFsID09IDEpOwor ICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgiYXZ4IikpCisg ICAgYXNzZXJ0ICh2YWwgPT0gMik7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfc3VwcG9ydHMgKCJwb3BjbnQiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAz KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTQu MiIpKQorICAgIGFzc2VydCAodmFsID09IDQpOworICBlbHNlIGlmIChfX2J1 aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlNC4xIikpCisgICAgYXNzZXJ0ICh2 YWwgPT0gNSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMg KCJzc3NlMyIpKQorICAgIGFzc2VydCAodmFsID09IDYpOworICBlbHNlIGlm IChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlMyIpKQorICAgIGFzc2Vy dCAodmFsID09IDcpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBv cnRzICgic3NlMiIpKQorICAgIGFzc2VydCAodmFsID09IDgpOworICBlbHNl IGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlIikpCisgICAgYXNz ZXJ0ICh2YWwgPT0gOSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3Vw cG9ydHMgKCJtbXgiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAxMCk7CisgIGVs c2UKKyAgICBhc3NlcnQgKHZhbCA9PSAwKTsKKworICByZXR1cm4gMDsKK30K KworaW50Citmb28gKCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBfX2F0 dHJpYnV0ZV9fICgodGFyZ2V0KCJtbXgiKSkpCitmb28gKCkKK3sKKyAgcmV0 dXJuIDEwOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3Nl IikpKQorZm9vICgpCit7CisgIHJldHVybiA5OworfQorCitpbnQgX19hdHRy aWJ1dGVfXyAoKHRhcmdldCgic3NlMiIpKSkKK2ZvbyAoKQoreworICByZXR1 cm4gODsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzZTMi KSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDc7Cit9CisKK2ludCBfX2F0dHJp YnV0ZV9fICgodGFyZ2V0KCJzc3NlMyIpKSkKK2ZvbyAoKQoreworICByZXR1 cm4gNjsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzZTQu MSIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gNTsKK30KKworaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoInNzZTQuMiIpKSkKK2ZvbyAoKQoreworICBy ZXR1cm4gNDsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInBv cGNudCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMzsKK30KKworaW50IF9f YXR0cmlidXRlX18gKCh0YXJnZXQoImF2eCIpKSkKK2ZvbyAoKQoreworICBy ZXR1cm4gMjsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImF2 eDIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDE7Cit9CkluZGV4OiBnY2Mv dGVzdHN1aXRlL2crKy5kZy9tdjQuQwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjQuQwkocmV2aXNpb24gMCkK KysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL212NC5DCShyZXZpc2lvbiAwKQpA QCAtMCwwICsxLDIzIEBACisvKiBUZXN0IGNhc2UgdG8gY2hlY2sgaWYgdGhl IGNvbXBpbGVyIGdlbmVyYXRlcyBhbiBlcnJvciBtZXNzYWdlCisgICB3aGVu IHRoZSBkZWZhdWx0IHZlcnNpb24gb2YgYSBtdWx0aXZlcnNpb25lZCBmdW5j dGlvbiBpcyBhYnNlbnQKKyAgIGFuZCBpdHMgcG9pbnRlciBpcyB0YWtlbi4g ICovCisKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBpPzg2LSotKiB4 ODZfNjQtKi0qIH0gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIiIH0gKi8K KworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJzc2UiKSkpCitmb28g KCkKK3sKKyAgcmV0dXJuIDE7Cit9CitpbnQgX19hdHRyaWJ1dGVfXyAoKHRh cmdldCAoInBvcGNudCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMDsKK30K KworaW50IG1haW4gKCkKK3sKKyAgaW50ICgqcCkoKSA9ICZmb287IC8qIHsg ZGctZXJyb3IgIlBvaW50ZXIgdG8gYSBtdWx0aXZlcnNpb25lZCBmdW5jdGlv biB3aXRob3V0IGEgZGVmYXVsdCBpcyBub3QgYWxsb3dlZCIge30gfSAqLwor ICByZXR1cm4gKHApKCk7Cit9CkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5k Zy9tdjEuQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1 aXRlL2crKy5kZy9tdjEuQwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3Vp dGUvZysrLmRnL212MS5DCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMiBA QAorLyogVGVzdCBjYXNlIHRvIGNoZWNrIGlmIE11bHRpdmVyc2lvbmluZyB3 b3Jrcy4gICovCisvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotKiB4 ODZfNjQtKi0qIH0gfSAqLworLyogeyBkZy1yZXF1aXJlLWlmdW5jICIiIH0g ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZlBJQyIgfSAqLworCisjaW5j bHVkZSA8YXNzZXJ0Lmg+CisKKy8qIERlZmF1bHQgdmVyc2lvbi4gICovCitp bnQgZm9vICgpOworLyogVGhlIG90aGVyIHZlcnNpb25zIG9mIGZvby4gIE1p eCB1cCB0aGUgb3JkZXJpbmcgYW5kIAorICAgY2hlY2sgaWYgdGhlIGRpc3Bh dGNoaW5nIGRvZXMgaXQgaW4gdGhlIG9yZGVyIG9mIHByaW9yaXR5LiAqLwor LyogQ2hlY2sgY29tYmluYXRpb24gb2YgdGFyZ2V0IGF0dHJpYnV0ZXMuICAq LworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNv cmVpNyxwb3BjbnQiKSkpOworLyogVGhlIHRhcmdldCBvcGVyYW5kcyBpbiB0 aGlzIGRlY2xhcmF0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBhcmUgcmUtb3Jk ZXJlZC4KKyAgIFRoaXMgc2hvdWxkIHN0aWxsIHdvcmsuICAqLworaW50IGZv byAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc3NlMyxhdngyIikpKTsK KworLyogQ2hlY2sgZm9yIGFsbCB0YXJnZXQgYXR0cmlidXRlcyBmb3Igd2hp Y2ggZGlzcGF0Y2hlcnMgYXJlIGF2YWlsYWJsZS4gICovCisvKiBDaGVjayBh cmNoPSAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFy Y2g9Y29yZTIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJn ZXQoImFyY2g9Y29yZWk3IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVf XygodGFyZ2V0KCJhcmNoPWF0b20iKSkpOworLyogQ2hlY2sgSVNBcyAgKi8K K2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJzc2UzIikpKTsK K2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJzc2UyIikpKTsK K2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJzc2UiKSkpOwor aW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImF2eCIpKSk7Citp bnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgic3NlNC4yIikpKTsK K2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJwb3BjbnQiKSkp OworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoInNzZTQuMSIp KSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgic3NzZTMi KSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoIm1teCIp KSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgiYXZ4MiIp KSk7CisvKiBDaGVjayBtb3JlIGFyY2g9LiAgKi8KK2ludCBmb28gKCkgX19h dHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWFtZGZhbTEwIikpKTsKK2ludCBm b28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWJkdmVyMSIpKSk7 CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgiYXJjaD1iZHZl cjIiKSkpOworCitpbnQgKCpwKSgpID0gJmZvbzsKK2ludCBtYWluICgpCit7 CisgIGludCB2YWwgPSBmb28gKCk7CisgIGFzc2VydCAodmFsID09ICAoKnAp KCkpOworCisgIC8qIENoZWNrIGluIHRoZSBleGFjdCBzYW1lIG9yZGVyIGlu IHdoaWNoIHRoZSBkaXNwYXRjaGluZworICAgICBpcyBleHBlY3RlZCB0byBo YXBwZW4uICAqLworICBpZiAoX19idWlsdGluX2NwdV9pcyAoImJkdmVyMSIp KQorICAgIGFzc2VydCAodmFsID09IDEpOworICBlbHNlIGlmIChfX2J1aWx0 aW5fY3B1X2lzICgiYmR2ZXIyIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMik7 CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJhdngyIikK KwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NzZTMiKSkKKyAg ICBhc3NlcnQgKHZhbCA9PSAzKTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2Nw dV9zdXBwb3J0cyAoImF2eDIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA0KTsK KyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoImF2eCIpKQor ICAgIGFzc2VydCAodmFsID09IDUpOworICBlbHNlIGlmIChfX2J1aWx0aW5f Y3B1X2lzICgiY29yZWk3IikKKwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBv cnRzICgicG9wY250IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gNik7CisgIGVs c2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJwb3BjbnQiKSkKKyAg ICBhc3NlcnQgKHZhbCA9PSA3KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2Nw dV9pcyAoImNvcmVpNyIpKQorICAgIGFzc2VydCAodmFsID09IDgpOworICBl bHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlNC4yIikpCisg ICAgYXNzZXJ0ICh2YWwgPT0gOSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfc3VwcG9ydHMgKCJzc2U0LjEiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAx MCk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJhbWRmYW0xMGgi KSkKKyAgICBhc3NlcnQgKHZhbCA9PSAxMSk7CisgIGVsc2UgaWYgKF9fYnVp bHRpbl9jcHVfaXMgKCJjb3JlMiIpKQorICAgIGFzc2VydCAodmFsID09IDEy KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9pcyAoImF0b20iKSkKKyAg ICBhc3NlcnQgKHZhbCA9PSAxMyk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfc3VwcG9ydHMgKCJzc3NlMyIpKQorICAgIGFzc2VydCAodmFsID09IDE0 KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTMi KSkKKyAgICBhc3NlcnQgKHZhbCA9PSAxNSk7CisgIGVsc2UgaWYgKF9fYnVp bHRpbl9jcHVfc3VwcG9ydHMgKCJzc2UyIikpCisgICAgYXNzZXJ0ICh2YWwg PT0gMTYpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgi c3NlIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMTcpOworICBlbHNlIGlmIChf X2J1aWx0aW5fY3B1X3N1cHBvcnRzICgibW14IikpCisgICAgYXNzZXJ0ICh2 YWwgPT0gMTgpOworICBlbHNlCisgICAgYXNzZXJ0ICh2YWwgPT0gMCk7Cisg IAorICByZXR1cm4gMDsKK30KKworaW50IGZvbyAoKQoreworICByZXR1cm4g MDsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9Y29y ZWk3LHBvcGNudCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gNjsKK30KKwor aW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImF2eDIsc3NzZTMiKSkpCitm b28gKCkKK3sKKyAgcmV0dXJuIDM7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0KCJhcmNoPWNvcmUyIikpKQorZm9vICgpCit7CisgIHJldHVy biAxMjsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9 Y29yZWk3IikpKQorZm9vICgpCit7CisgIHJldHVybiA4OworfQorCitpbnQg X19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1hdG9tIikpKQorZm9vICgp Cit7CisgIHJldHVybiAxMzsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoInNzZTMiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDE1OworfQor CitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3NlMiIpKSkKK2ZvbyAo KQoreworICByZXR1cm4gMTY7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgo dGFyZ2V0KCJzc2UiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDE3OworfQor CitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXZ4IikpKQorZm9vICgp Cit7CisgIHJldHVybiA1OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRh cmdldCgic3NlNC4yIikpKQorZm9vICgpCit7CisgIHJldHVybiA5OworfQor CitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgicG9wY250IikpKQorZm9v ICgpCit7CisgIHJldHVybiA3OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAo KHRhcmdldCgic3NlNC4xIikpKQorZm9vICgpCit7CisgIHJldHVybiAxMDsK K30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzc2UzIikpKQor Zm9vICgpCit7CisgIHJldHVybiAxNDsKK30KKworaW50IF9fYXR0cmlidXRl X18gKCh0YXJnZXQoIm1teCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTg7 Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhdngyIikpKQor Zm9vICgpCit7CisgIHJldHVybiA0OworfQorCitpbnQgX19hdHRyaWJ1dGVf XyAoKHRhcmdldCgiYXJjaD1hbWRmYW0xMCIpKSkKK2ZvbyAoKQoreworICBy ZXR1cm4gMTE7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJh cmNoPWJkdmVyMSIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTsKK30KKwor aW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9YmR2ZXIyIikpKQor Zm9vICgpCit7CisgIHJldHVybiAyOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvbXYzLkMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvbXYzLkMJKHJldmlzaW9uIDApCisrKyBnY2Mv dGVzdHN1aXRlL2crKy5kZy9tdjMuQwkocmV2aXNpb24gMCkKQEAgLTAsMCAr MSwzNyBAQAorLyogVGVzdCBjYXNlIHRvIGNoZWNrIGlmIGEgY2FsbCB0byBh IG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uCisgICBpcyByZXBsYWNlZCB3aXRo IGEgZGlyZWN0IGNhbGwgdG8gdGhlIHBhcnRpY3VsYXIgdmVyc2lvbiB3aGVu CisgICB0aGUgbW9zdCBzcGVjaWFsaXplZCB2ZXJzaW9uJ3MgdGFyZ2V0IGF0 dHJpYnV0ZXMgbWF0Y2ggdGhlCisgICBjYWxsZXIuICAKKyAgCisgICBJbiB0 aGlzIHByb2dyYW0sIGZvbyBpcyBtdWx0aXZlcnNpb25lZCBidXQgdGhlcmUg aXMgbm8gZGVmYXVsdAorICAgZnVuY3Rpb24uICBUaGlzIGlzIGFuIGVycm9y IGlmIHRoZSBjYWxsIGhhcyB0byBnbyB0aHJvdWdoIGEKKyAgIGRpc3BhdGNo ZXIuICBIb3dldmVyLCB0aGUgY2FsbCB0byBmb28gaW4gYmFyIGNhbiBiZSBy ZXBsYWNlZAorICAgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIHRoZSBwb3BjbnQg dmVyc2lvbiBvZiBmb28uICBIZW5jZSwgdGhpcworICAgdGVzdCBzaG91bGQg cGFzcy4gICovCisKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi0q IHg4Nl82NC0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAq LworCisKKy8qIERlZmF1bHQgdmVyc2lvbi4gICovCitpbnQgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCAoInNzZSIpKSkKK2ZvbyAoKQoreworICByZXR1cm4g MTsKK30KK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgicG9wY250Iikp KQorZm9vICgpCit7CisgIHJldHVybiAwOworfQorCitpbnQgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCAoInBvcGNudCIpKSkKK2JhciAoKQoreworICByZXR1 cm4gZm9vICgpOworfQorCitpbnQgbWFpbiAoKQoreworICByZXR1cm4gYmFy ICgpOworfQpJbmRleDogZ2NjL2NwL2NsYXNzLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjL2NwL2NsYXNzLmMJKHJldmlzaW9uIDE4ODIwOSkK KysrIGdjYy9jcC9jbGFzcy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkyLDcg KzEwOTIsMjAgQEAgYWRkX21ldGhvZCAodHJlZSB0eXBlLCB0cmVlIG1ldGhv ZCwgdHJlZSB1c2luZ19kZWMKIAkgICAgICB8fCBzYW1lX3R5cGVfcCAoVFJF RV9UWVBFIChmbl90eXBlKSwKIAkJCSAgICAgIFRSRUVfVFlQRSAobWV0aG9k X3R5cGUpKSkpCiAJewotCSAgaWYgKHVzaW5nX2RlY2wpCisJICAvKiBGb3Ig ZnVuY3Rpb24gdmVyc2lvbnMsIHRoZWlyIHBhcm1zIGFuZCB0eXBlcyBtYXRj aAorCSAgICAgYnV0IHRoZXkgYXJlIG5vdCBkdXBsaWNhdGVzLiAgUmVjb3Jk IGZ1bmN0aW9uIHZlcnNpb25zCisJICAgICBhcyBhbmQgd2hlbiB0aGV5IGFy ZSBmb3VuZC4gICovCisJICBpZiAoVFJFRV9DT0RFIChmbikgPT0gRlVOQ1RJ T05fREVDTAorCSAgICAgICYmIFRSRUVfQ09ERSAobWV0aG9kKSA9PSBGVU5D VElPTl9ERUNMCisJICAgICAgJiYgKGZ1bmN0aW9uX3RhcmdldF9hdHRyaWJ1 dGUgKGZuKQorCQkgIHx8IGZ1bmN0aW9uX3RhcmdldF9hdHRyaWJ1dGUgKG1l dGhvZCkpCisJICAgICAgJiYgaGFzX2RpZmZlcmVudF92ZXJzaW9uX2F0dHJp YnV0ZXMgKGZuLCBtZXRob2QpKQorIAkgICAgeworCSAgICAgIG1hcmtfZnVu Y3Rpb25fYXNfdmVyc2lvbiAoZm4pOworCSAgICAgIG1hcmtfZnVuY3Rpb25f YXNfdmVyc2lvbiAobWV0aG9kKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAg fQorCSAgZWxzZSBpZiAodXNpbmdfZGVjbCkKIAkgICAgewogCSAgICAgIGlm IChERUNMX0NPTlRFWFQgKGZuKSA9PSB0eXBlKQogCQkvKiBEZWZlciB0byB0 aGUgbG9jYWwgZnVuY3Rpb24uICAqLwpAQCAtNjg2Miw2ICs2ODc1LDcgQEAg cmVzb2x2ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rpb24gKHRyZWUg dGFyZ2UKICAgdHJlZSBtYXRjaGVzID0gTlVMTF9UUkVFOwogICB0cmVlIGZu OwogICB0cmVlIHRhcmdldF9mbl90eXBlOworICBWRUMgKHRyZWUsIGhlYXAp ICpmbl92ZXJfdmVjID0gTlVMTDsKIAogICAvKiBCeSB0aGUgdGltZSB3ZSBn ZXQgaGVyZSwgd2Ugc2hvdWxkIGJlIHNlZWluZyBvbmx5IHJlYWwKICAgICAg cG9pbnRlci10by1tZW1iZXIgdHlwZXMsIG5vdCB0aGUgaW50ZXJuYWwgUE9J TlRFUl9UWVBFIHRvCkBAIC02OTI2LDkgKzY5NDAsMTkgQEAgcmVzb2x2ZV9h ZGRyZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rpb24gKHRyZWUgdGFyZ2UKIAkg IGlmIChERUNMX0FOVElDSVBBVEVEIChmbikpCiAJICAgIGNvbnRpbnVlOwog Ci0JICAvKiBTZWUgaWYgdGhlcmUncyBhIG1hdGNoLiAgKi8KKwkgIC8qIFNl ZSBpZiB0aGVyZSdzIGEgbWF0Y2guICAgRm9yIGZ1bmN0aW9ucyB0aGF0IGFy ZSBtdWx0aS12ZXJzaW9uZWQsCisJICAgICBhbGwgdGhlIHZlcnNpb25zIG1h dGNoLiAgKi8KIAkgIGlmIChzYW1lX3R5cGVfcCAodGFyZ2V0X2ZuX3R5cGUs IHN0YXRpY19mbl90eXBlIChmbikpKQotCSAgICBtYXRjaGVzID0gdHJlZV9j b25zIChmbiwgTlVMTF9UUkVFLCBtYXRjaGVzKTsKKwkgICAgeworCSAgICAg IG1hdGNoZXMgPSB0cmVlX2NvbnMgKGZuLCBOVUxMX1RSRUUsIG1hdGNoZXMp OworCSAgICAgIC8qSWYgdmVyc2lvbmVkLCBwdXNoIGFsbCBwb3NzaWJsZSB2 ZXJzaW9ucyBpbnRvIGEgdmVjdG9yLiAgKi8KKwkgICAgICBpZiAoREVDTF9G VU5DVElPTl9WRVJTSU9ORUQgKGZuKSkKKwkJeworCQkgIGlmIChmbl92ZXJf dmVjID09IE5VTEwpCisJCSAgIGZuX3Zlcl92ZWMgPSBWRUNfYWxsb2MgKHRy ZWUsIGhlYXAsIDIpOworCQkgIFZFQ19zYWZlX3B1c2ggKHRyZWUsIGhlYXAs IGZuX3Zlcl92ZWMsIGZuKTsgCisJCX0KKwkgICAgfQogCX0KICAgICB9CiAK QEAgLTcwMjMsMTAgKzcwNDcsMTUgQEAgcmVzb2x2ZV9hZGRyZXNzX29mX292 ZXJsb2FkZWRfZnVuY3Rpb24gKHRyZWUgdGFyZ2UKICAgICAgIHRyZWUgbWF0 Y2g7CiAKICAgICAgIGZuID0gVFJFRV9QVVJQT1NFIChtYXRjaGVzKTsKLSAg ICAgIGZvciAobWF0Y2ggPSBUUkVFX0NIQUlOIChtYXRjaGVzKTsgbWF0Y2g7 IG1hdGNoID0gVFJFRV9DSEFJTiAobWF0Y2gpKQotCWlmICghZGVjbHNfbWF0 Y2ggKGZuLCBUUkVFX1BVUlBPU0UgKG1hdGNoKSkpCi0JICBicmVhazsKIAor ICAgICAgLyogRm9yIG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbnMsIG1vcmUg dGhhbiBvbmUgbWF0Y2ggaXMganVzdCBmaW5lLiAgKi8KKyAgICAgIGlmIChE RUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pKQorCW1hdGNoID0gTlVMTF9U UkVFOworICAgICAgZWxzZQorICAgICAgICBmb3IgKG1hdGNoID0gVFJFRV9D SEFJTiAobWF0Y2hlcyk7IG1hdGNoOyBtYXRjaCA9IFRSRUVfQ0hBSU4gKG1h dGNoKSkKKyAgCSAgaWYgKCFkZWNsc19tYXRjaCAoZm4sIFRSRUVfUFVSUE9T RSAobWF0Y2gpKSkKKwkgICAgYnJlYWs7CisKICAgICAgIGlmIChtYXRjaCkK IAl7CiAJICBpZiAoZmxhZ3MgJiB0Zl9lcnJvcikKQEAgLTcwODksNiArNzEx OCwyOCBAQCByZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlv biAodHJlZSB0YXJnZQogICAgICAgcGVyZm9ybV9vcl9kZWZlcl9hY2Nlc3Nf Y2hlY2sgKGFjY2Vzc19wYXRoLCBmbiwgZm4pOwogICAgIH0KIAorICAvKiBJ ZiBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIG11bHRpLXZlcnNp b25lZCBpcyByZXF1ZXN0ZWQsIHRoZQorICAgICBwb2ludGVyIHRvIHRoZSBk aXNwYXRjaGVyIGZ1bmN0aW9uIGlzIHJldHVybmVkIGluc3RlYWQuICBUaGlz IHdvcmtzCisgICAgIHdlbGwgYmVjYXVzZSBpbmRpcmVjdGx5IGNhbGxpbmcg dGhlIGZ1bmN0aW9uIHdpbGwgZGlzcGF0Y2ggdGhlIHJpZ2h0CisgICAgIGZ1 bmN0aW9uIHZlcnNpb24gYXQgcnVuLXRpbWUuIEFsc28sIHRoZSBmdW5jdGlv biBhZGRyZXNzIGlzIGtlcHQKKyAgICAgdW5pcXVlLiAgKi8KKyAgaWYgKERF Q0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikpCisgICAgeworICAgICAgdHJl ZSBkaXNwYXRjaGVyX2RlY2w7CisgICAgICBnY2NfYXNzZXJ0IChmbl92ZXJf dmVjICE9IE5VTEwpOworICAgICAgZGlzcGF0Y2hlcl9kZWNsID0gYnVpbGRf ZGlzcGF0Y2hlcl9mb3JfZnVuY3Rpb25fdmVyc2lvbnMgKGZuX3Zlcl92ZWMp OworICAgICAgaWYgKCFkaXNwYXRjaGVyX2RlY2wpCisJeworCSAgZXJyb3Jf YXQgKGlucHV0X2xvY2F0aW9uLCAiUG9pbnRlciB0byBhIG11bHRpdmVyc2lv bmVkIGZ1bmN0aW9uIgorCQkgICAgIiB3aXRob3V0IGEgZGVmYXVsdCBpcyBu b3QgYWxsb3dlZCIpOworCSAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKwl9 CisgICAgICByZXRyb2ZpdF9sYW5nX2RlY2wgKGRpc3BhdGNoZXJfZGVjbCk7 CisgICAgICBtYXJrX3VzZWQgKGZuKTsKKyAgICAgIFZFQ19mcmVlICh0cmVl LCBoZWFwLCBmbl92ZXJfdmVjKTsKKyAgICAgIGZuID0gZGlzcGF0Y2hlcl9k ZWNsOworICAgIH0KKwogICBpZiAoVFlQRV9QVFJGTl9QICh0YXJnZXRfdHlw ZSkgfHwgVFlQRV9QVFJNRU1GVU5DX1AgKHRhcmdldF90eXBlKSkKICAgICBy ZXR1cm4gY3BfYnVpbGRfYWRkcl9leHByIChmbiwgZmxhZ3MpOwogICBlbHNl CkluZGV4OiBnY2MvY3AvZGVjbC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy9jcC9kZWNsLmMJKHJldmlzaW9uIDE4ODIwOSkKKysrIGdjYy9j cC9kZWNsLmMJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKICNpbmNsdWRlICJwb2ludGVyLXNldC5oIgogI2luY2x1ZGUgInNwbGF5 LXRyZWUuaCIKICNpbmNsdWRlICJwbHVnaW4uaCIKKyNpbmNsdWRlICJjZ3Jh cGguaCIKIAogLyogUG9zc2libGUgY2FzZXMgb2YgYmFkIHNwZWNpZmllcnMg dHlwZSB1c2VkIGJ5IGJhZF9zcGVjaWZpZXJzLiAqLwogZW51bSBiYWRfc3Bl Y19wbGFjZSB7CkBAIC05NzMsNiArOTc0LDE5IEBAIGRlY2xzX21hdGNoICh0 cmVlIG5ld2RlY2wsIHRyZWUgb2xkZGVjbCkKICAgICAgIGlmICh0MSAhPSB0 MikKIAlyZXR1cm4gMDsKIAorICAgICAgLyogVGhlIGRlY2xzIGRvbnQgbWF0 Y2ggaWYgdGhleSBjb3JyZXNwb25kIHRvIHR3byBkaWZmZXJlbnQgdmVyc2lv bnMKKwkgb2YgdGhlIHNhbWUgZnVuY3Rpb24uICAqLworICAgICAgaWYgKGNv bXBwYXJtcyAocDEsIHAyKQorCSAgJiYgc2FtZV90eXBlX3AgKFRSRUVfVFlQ RSAoZjEpLCBUUkVFX1RZUEUgKGYyKSkgCisJICAmJiBoYXNfZGlmZmVyZW50 X3ZlcnNpb25fYXR0cmlidXRlcyAobmV3ZGVjbCwgb2xkZGVjbCkpCisJewor CSAgLyogT25lIG9mIHRoZSBkZWNscyBjb3VsZCBiZSB0aGUgZGVmYXVsdCB3 aXRob3V0IHRoZSAidGFyZ2V0IgorCSAgICAgYXR0cmlidXRlLiBTZXQgaXQg dG8gYmUgYSB2ZXJzaW9uZWQgZnVuY3Rpb24gaGVyZS4gICovCisJICBtYXJr X2Z1bmN0aW9uX2FzX3ZlcnNpb24gKG5ld2RlY2wpOworCSAgbWFya19mdW5j dGlvbl9hc192ZXJzaW9uIChvbGRkZWNsKTsKKwkgIHJldHVybiAwOworCX0K KwogICAgICAgaWYgKENQX0RFQ0xfQ09OVEVYVCAobmV3ZGVjbCkgIT0gQ1Bf REVDTF9DT05URVhUIChvbGRkZWNsKQogCSAgJiYgISAoREVDTF9FWFRFUk5f Q19QIChuZXdkZWNsKQogCQkmJiBERUNMX0VYVEVSTl9DX1AgKG9sZGRlY2wp KSkKQEAgLTE0OTAsNyArMTUwNCwxMSBAQCBkdXBsaWNhdGVfZGVjbHMgKHRy ZWUgbmV3ZGVjbCwgdHJlZSBvbGRkZWNsLCBib29sCiAJICAgICAgZXJyb3Ig KCJwcmV2aW91cyBkZWNsYXJhdGlvbiAlcSsjRCBoZXJlIiwgb2xkZGVjbCk7 CiAJICAgICAgcmV0dXJuIE5VTExfVFJFRTsKIAkgICAgfQotCSAgZWxzZSBp ZiAoY29tcHBhcm1zIChUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFIChuZXdk ZWNsKSksCisJICAvKiBGb3IgZnVuY3Rpb24gdmVyc2lvbnMsIHBhcmFtcyBh bmQgdHlwZXMgbWF0Y2gsIGJ1dCB0aGV5CisJICAgICBhcmUgbm90IGFtYmln dW91cy4gICovCisJICBlbHNlIGlmICgoIURFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEIChuZXdkZWNsKQorCQkgICAgJiYgIURFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEIChvbGRkZWNsKSkKKwkJICAgJiYgY29tcHBhcm1zIChUWVBFX0FSR19U WVBFUyAoVFJFRV9UWVBFIChuZXdkZWNsKSksCiAJCQkgICAgICBUWVBFX0FS R19UWVBFUyAoVFJFRV9UWVBFIChvbGRkZWNsKSkpKQogCSAgICB7CiAJICAg ICAgZXJyb3IgKCJuZXcgZGVjbGFyYXRpb24gJXEjRCIsIG5ld2RlY2wpOwpA QCAtMjI2Miw2ICsyMjgwLDExIEBAIGR1cGxpY2F0ZV9kZWNscyAodHJlZSBu ZXdkZWNsLCB0cmVlIG9sZGRlY2wsIGJvb2wKICAgZWxzZSBpZiAoREVDTF9Q UkVTRVJWRV9QIChuZXdkZWNsKSkKICAgICBERUNMX1BSRVNFUlZFX1AgKG9s ZGRlY2wpID0gMTsKIAorICAvKiBJZiB0aGUgb2xkZGVjbCBpcyBhIHZlcnNp b24sIHNvIGlzIHRoZSBuZXdkZWNsLiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAo bmV3ZGVjbCkgPT0gRlVOQ1RJT05fREVDTAorICAgICAgJiYgREVDTF9GVU5D VElPTl9WRVJTSU9ORUQgKG9sZGRlY2wpKQorICAgIERFQ0xfRlVOQ1RJT05f VkVSU0lPTkVEIChuZXdkZWNsKSA9IDE7CisKICAgaWYgKFRSRUVfQ09ERSAo bmV3ZGVjbCkgPT0gRlVOQ1RJT05fREVDTCkKICAgICB7CiAgICAgICBpbnQg ZnVuY3Rpb25fc2l6ZTsKQEAgLTE0MDQ0LDcgKzE0MDY3LDExIEBAIGN4eF9j b21kYXRfZ3JvdXAgKHRyZWUgZGVjbCkKIAkgIGVsc2UKIAkgICAgYnJlYWs7 CiAJfQotICAgICAgbmFtZSA9IERFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wp OworICAgICAgaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVD TAorCSAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpKQorCW5h bWUgPSBERUNMX05BTUUgKGRlY2wpOworICAgICAgZWxzZQorICAgICAgICBu YW1lID0gREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCk7CiAgICAgfQogCiAg IHJldHVybiBuYW1lOwpJbmRleDogZ2NjL2NwL2Vycm9yLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjL2NwL2Vycm9yLmMJKHJldmlzaW9uIDE4 ODIwOSkKKysrIGdjYy9jcC9lcnJvci5jCSh3b3JraW5nIGNvcHkpCkBAIC0x NTM5LDggKzE1MzksMTUgQEAgZHVtcF9leGNlcHRpb25fc3BlYyAodHJlZSB0 LCBpbnQgZmxhZ3MpCiBzdGF0aWMgdm9pZAogZHVtcF9mdW5jdGlvbl9uYW1l ICh0cmVlIHQsIGludCBmbGFncykKIHsKLSAgdHJlZSBuYW1lID0gREVDTF9O QU1FICh0KTsKKyAgdHJlZSBuYW1lOwogCisgIC8qIEZvciBmdW5jdGlvbiB2 ZXJzaW9ucywgdXNlIHRoZSBhc3NlbWJsZXIgbmFtZSBhcyB0aGUgZGVjbCBu YW1lIGlzCisgICAgIHRoZSBzYW1lIGZvciBhbGwgdmVyc2lvbnMuICAqLwor ICBpZiAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKHQpKQorICAgIG5hbWUg PSBERUNMX0FTU0VNQkxFUl9OQU1FICh0KTsKKyAgZWxzZQorICAgIG5hbWUg PSBERUNMX05BTUUgKHQpOworCiAgIC8qIFdlIGNhbiBnZXQgaGVyZSB3aXRo IGEgZGVjbCB0aGF0IHdhcyBzeW50aGVzaXplZCBieSBsYW5ndWFnZS0KICAg ICAgaW5kZXBlbmRlbnQgbWFjaGluZXJ5IChlLmcuIGNvdmVyYWdlLmMpIGlu IHdoaWNoIGNhc2UgaXQgd29uJ3QKICAgICAgaGF2ZSBhIGxhbmdfc3BlY2lm aWMgc3RydWN0dXJlIGF0dGFjaGVkIGFuZCBERUNMX0NPTlNUUlVDVE9SX1AK SW5kZXg6IGdjYy9jcC9zZW1hbnRpY3MuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvY3Avc2VtYW50aWNzLmMJKHJldmlzaW9uIDE4ODIwOSkK KysrIGdjYy9jcC9zZW1hbnRpY3MuYwkod29ya2luZyBjb3B5KQpAQCAtMzc4 MCw4ICszNzgwLDExIEBAIGV4cGFuZF9vcl9kZWZlcl9mbl8xICh0cmVlIGZu KQogICAgICAgLyogSWYgdGhlIHVzZXIgd2FudHMgdXMgdG8ga2VlcCBhbGwg aW5saW5lIGZ1bmN0aW9ucywgdGhlbiBtYXJrCiAJIHRoaXMgZnVuY3Rpb24g YXMgbmVlZGVkIHNvIHRoYXQgZmluaXNoX2ZpbGUgd2lsbCBtYWtlIHN1cmUg dG8KIAkgb3V0cHV0IGl0IGxhdGVyLiAgU2ltaWxhcmx5LCBhbGwgZGxsZXhw b3J0J2QgZnVuY3Rpb25zIG11c3QKLQkgYmUgZW1pdHRlZDsgdGhlcmUgbWF5 IGJlIGNhbGxlcnMgaW4gb3RoZXIgRExMcy4gICovCi0gICAgICBpZiAoKGZs YWdfa2VlcF9pbmxpbmVfZnVuY3Rpb25zCisJIGJlIGVtaXR0ZWQ7IHRoZXJl IG1heSBiZSBjYWxsZXJzIGluIG90aGVyIERMTHMuCisJIEFsc28sIG1hcmsg dGhpcyBmdW5jdGlvbiBhcyBuZWVkZWQgaWYgaXQgaXMgbWFya2VkIGlubGlu ZSBidXQKKwkgaXMgYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24uICAqLwor ICAgICAgaWYgKCgoZmxhZ19rZWVwX2lubGluZV9mdW5jdGlvbnMKKwkgICAg fHwgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGZuKSkKIAkgICAmJiBERUNM X0RFQ0xBUkVEX0lOTElORV9QIChmbikKIAkgICAmJiAhREVDTF9SRUFMTFlf RVhURVJOIChmbikpCiAJICB8fCAoZmxhZ19rZWVwX2lubGluZV9kbGxleHBv cnQKSW5kZXg6IGdjYy9jcC9kZWNsMi5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy9jcC9kZWNsMi5jCShyZXZpc2lvbiAxODgyMDkpCisrKyBn Y2MvY3AvZGVjbDIuYwkod29ya2luZyBjb3B5KQpAQCAtNjc0LDkgKzY3NCwx MyBAQCBjaGVja19jbGFzc2ZuICh0cmVlIGN0eXBlLCB0cmVlIGZ1bmN0aW9u LCB0cmVlIHRlbQogCSAgaWYgKGlzX3RlbXBsYXRlICE9IChUUkVFX0NPREUg KGZuZGVjbCkgPT0gVEVNUExBVEVfREVDTCkpCiAJICAgIGNvbnRpbnVlOwog CisJICAvKiBXaGlsZSBmaW5kaW5nIGEgbWF0Y2gsIHNhbWUgdHlwZXMgYW5k IHBhcmFtcyBhcmUgbm90IGVub3VnaAorCSAgICAgaWYgdGhlIGZ1bmN0aW9u IGlzIHZlcnNpb25lZC4gIEFsc28gY2hlY2sgdmVyc2lvbiAoInRhcmdldCIp CisJICAgICBhdHRyaWJ1dGVzLiAgKi8KIAkgIGlmIChzYW1lX3R5cGVfcCAo VFJFRV9UWVBFIChUUkVFX1RZUEUgKGZ1bmN0aW9uKSksCiAJCQkgICBUUkVF X1RZUEUgKFRSRUVfVFlQRSAoZm5kZWNsKSkpCiAJICAgICAgJiYgY29tcHBh cm1zIChwMSwgcDIpCisJICAgICAgJiYgIWhhc19kaWZmZXJlbnRfdmVyc2lv bl9hdHRyaWJ1dGVzIChmdW5jdGlvbiwgZm5kZWNsKQogCSAgICAgICYmICgh aXNfdGVtcGxhdGUKIAkJICB8fCBjb21wX3RlbXBsYXRlX3Bhcm1zICh0ZW1w bGF0ZV9wYXJtcywKIAkJCQkJICBERUNMX1RFTVBMQVRFX1BBUk1TIChmbmRl Y2wpKSkKSW5kZXg6IGdjYy9jcC9jYWxsLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2NwL2NhbGwuYwkocmV2aXNpb24gMTg4MjA5KQorKysg Z2NjL2NwL2NhbGwuYwkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA QCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYg bm90IHNlZQogI2luY2x1ZGUgImxhbmdob29rcy5oIgogI2luY2x1ZGUgImMt ZmFtaWx5L2Mtb2JqYy5oIgogI2luY2x1ZGUgInRpbWV2YXIuaCIKKyNpbmNs dWRlICJjZ3JhcGguaCIKIAogLyogVGhlIHZhcmlvdXMga2luZHMgb2YgY29u dmVyc2lvbi4gICovCiAKQEAgLTM5MDQsNiArMzkwNSwxNiBAQCBidWlsZF9u ZXdfZnVuY3Rpb25fY2FsbCAodHJlZSBmbiwgVkVDKHRyZWUsZ2MpICoqYQog ICAgIHsKICAgICAgIGlmIChjb21wbGFpbiAmIHRmX2Vycm9yKQogCXsKKwkg IC8qIElmIHRoZSBjYWxsIGlzIHRvIGEgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rp b24gd2l0aG91dAorCSAgICAgYSBkZWZhdWx0IHZlcnNpb24sIG92ZXJsb2Fk IHJlc29sdXRpb24gd2lsbCBmYWlsLiAgKi8KKwkgIGlmIChjYW5kaWRhdGVz CisJICAgICAgJiYgVFJFRV9DT0RFIChjYW5kaWRhdGVzLT5mbikgPT0gRlVO Q1RJT05fREVDTAorCSAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVE IChjYW5kaWRhdGVzLT5mbikpCisJICAgIGVycm9yX2F0IChsb2NhdGlvbl9v ZiAoREVDTF9OQU1FIChPVkxfQ1VSUkVOVCAoZm4pKSksCisJCSAgICAgICJD YWxsIHRvIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uICU8JUQoJUEpJT4gd2l0 aCIKKwkJICAgICAgIiBubyBkZWZhdWx0IHZlcnNpb24iLCBERUNMX05BTUUg KE9WTF9DVVJSRU5UIChmbikpLAorCQkgICAgICBidWlsZF90cmVlX2xpc3Rf dmVjICgqYXJncykpOworCiAJICBpZiAoIWFueV92aWFibGVfcCAmJiBjYW5k aWRhdGVzICYmICEgY2FuZGlkYXRlcy0+bmV4dAogCSAgICAgICYmIChUUkVF X0NPREUgKGNhbmRpZGF0ZXMtPmZuKSA9PSBGVU5DVElPTl9ERUNMKSkKIAkg ICAgcmV0dXJuIGNwX2J1aWxkX2Z1bmN0aW9uX2NhbGxfdmVjIChjYW5kaWRh dGVzLT5mbiwgYXJncywgY29tcGxhaW4pOwpAQCAtNjgzMiw2ICs2ODQzLDMw IEBAIGJ1aWxkX292ZXJfY2FsbCAoc3RydWN0IHpfY2FuZGlkYXRlICpjYW5k LCBpbnQgZmxhCiAgIGlmICghYWxyZWFkeV91c2VkKQogICAgIG1hcmtfdXNl ZCAoZm4pOwogCisgIC8qIEZvciBjYWxscyB0byBhIG11bHRpLXZlcnNpb25l ZCBmdW5jdGlvbiwgb3ZlcmxvYWQgcmVzb2x1dGlvbgorICAgICByZXR1cm5z IHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBoaWdoZXN0IHRhcmdldCBwcmlvcml0 eSwgdGhhdCBpcywKKyAgICAgdGhlIHZlcnNpb24gdGhhdCB3aWxsIGNoZWNr ZWQgZm9yIGRpc3BhdGNoaW5nIGZpcnN0LiAgSWYgdGhpcworICAgICB2ZXJz aW9uIGlzIGlubGluYWJsZSwgYSBkaXJlY3QgY2FsbCBjYW4gYmUgbWFkZSBv dGhlcndpc2UgaXQKKyAgICAgc2hvdWxkIGdvIHRocm91Z2ggdGhlIGRpc3Bh dGNoZXIuICAqLworCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo Zm4pCisgICAgICAmJiAhdGFyZ2V0bS50YXJnZXRfb3B0aW9uLmNhbl9pbmxp bmVfcCAoY3VycmVudF9mdW5jdGlvbl9kZWNsLCBmbikpCisgICAgeworICAg ICAgdHJlZSBkaXNwYXRjaGVyX2RlY2wgPSBOVUxMOworICAgICAgc3RydWN0 IGNncmFwaF9ub2RlICpub2RlID0gY2dyYXBoX2dldF9ub2RlIChmbik7Cisg ICAgICBpZiAobm9kZSAhPSBOVUxMKQorICAgICAgICBkaXNwYXRjaGVyX2Rl Y2wgPSBjZ3JhcGhfZ2V0X25vZGUgKGZuKS0+ZGlzcGF0Y2hlcl9mbmRlY2w7 CisgICAgICBpZiAoZGlzcGF0Y2hlcl9kZWNsID09IE5VTEwpCisJeworCSAg ZXJyb3JfYXQgKGlucHV0X2xvY2F0aW9uLCAiQ2FsbCB0byBtdWx0aXZlcnNp b25lZCBmdW5jdGlvbiIKKwkJICAgICIgd2l0aG91dCBhIGRlZmF1bHQgaXMg bm90IGFsbG93ZWQiKTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIHJl dHJvZml0X2xhbmdfZGVjbCAoZGlzcGF0Y2hlcl9kZWNsKTsKKyAgICAgIGdj Y19hc3NlcnQgKGRpc3BhdGNoZXJfZGVjbCAhPSBOVUxMKTsKKyAgICAgIGZu ID0gZGlzcGF0Y2hlcl9kZWNsOworICAgIH0KKwogICBpZiAoREVDTF9WSU5E RVggKGZuKSAmJiAoZmxhZ3MgJiBMT09LVVBfTk9OVklSVFVBTCkgPT0gMCkK ICAgICB7CiAgICAgICB0cmVlIHQ7CkBAIC04MDg5LDYgKzgxMjQsMjkgQEAg am91c3QgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2FuZDEsIHN0cnVjdCB6X2Nh bmRpZGEKICAgc2l6ZV90IGk7CiAgIHNpemVfdCBsZW47CiAKKyAgLyogRm9y IENhbmRpZGF0ZXMgb2YgYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24sICBt YWtlIHRoZSB2ZXJzaW9uIHdpdGgKKyAgICAgdGhlIG1vc3Qgc3BlY2lhbGl6 ZWQgdGFyZ2V0IGF0dHJpYnV0ZXMsIGhpZ2hlc3QgcHJpb3JpdHkgd2luLiAg VGhpcworICAgICB2ZXJzaW9uIHdpbGwgYmUgY2hlY2tlZCBmb3IgZGlzcGF0 Y2hpbmcgZmlyc3QuICBJZiB0aGlzIHZlcnNpb24gY2FuCisgICAgIGJlIGlu bGluZWQgaW50byB0aGUgY2FsbGVyIHRoZSBmcm9udC1lbmQgd2lsbCBzaW1w bHkgbWFrZSBhIGRpcmVjdAorICAgICBjYWxsIHRvIHRoaXMgZnVuY3Rpb24u ICAqLworCisgIGlmICgoVFJFRV9DT0RFIChjYW5kMS0+Zm4pID09IEZVTkNU SU9OX0RFQ0wKKyAgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo Y2FuZDEtPmZuKSkKKyAgICAgIHx8KFRSRUVfQ09ERSAoY2FuZDItPmZuKSA9 PSBGVU5DVElPTl9ERUNMCisJICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVE IChjYW5kMi0+Zm4pKSkKKyAgICB7CisgICAgICAvKiBCb3RoIGZ1bmN0aW9u cyBtdXN0IGJlIG1hcmtlZCB2ZXJzaW9uZWQuICAqLworICAgICAgZ2NjX2Fz c2VydCAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGNhbmQxLT5mbikKKwkJ ICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoY2FuZDItPmZuKSk7CisK KyAgICAgIC8qIEFsd2F5cyBtYWtlIHRoZSB2ZXJzaW9uIHdpdGggdGhlIGhp Z2hlciBwcmlvcml0eSwgbW9yZQorCSBzcGVjaWFsaXplZCwgd2luLiAgKi8K KyAgICAgIGlmICh0YXJnZXRtLmNvbXBhcmVfdmVyc2lvbnMgKGNhbmQxLT5m biwgY2FuZDItPmZuKSA+PSAwKQorCXJldHVybiAxOworICAgICAgZWxzZQor CXJldHVybiAtMTsKKyAgICB9CisKICAgLyogQ2FuZGlkYXRlcyB0aGF0IGlu dm9sdmUgYmFkIGNvbnZlcnNpb25zIGFyZSBhbHdheXMgd29yc2UgdGhhbiB0 aG9zZQogICAgICB0aGF0IGRvbid0LiAgKi8KICAgaWYgKGNhbmQxLT52aWFi bGUgPiBjYW5kMi0+dmlhYmxlKQpAQCAtODQzNCw2ICs4NDkyLDIxIEBAIHRv dXJuZXkgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2FuZGlkYXRlcywgdHN1YnN0 X2ZsCiAgIGludCBmYXRlOwogICBpbnQgY2hhbXBfY29tcGFyZWRfdG9fcHJl ZGVjZXNzb3IgPSAwOwogCisgIC8qIEZvciBtdWx0aXZlcnNpb25lZCBmdW5j dGlvbnMsIGFnZ3JlZ2F0ZSBhbGwgdGhlIHZlcnNpb25zIGhlcmUgZm9yCisg ICAgIGdlbmVyYXRpbmcgdGhlIGRpc3BhdGNoZXIgYm9keSBsYXRlciBpZiBu ZWNlc3NhcnkuICAqLworCisgIGlmIChUUkVFX0NPREUgKGNhbmRpZGF0ZXMt PmZuKSA9PSBGVU5DVElPTl9ERUNMCisgICAgICAmJiBERUNMX0ZVTkNUSU9O X1ZFUlNJT05FRCAoY2FuZGlkYXRlcy0+Zm4pKQorICAgIHsKKyAgICAgIFZF QyAodHJlZSwgaGVhcCkgKmZuX3Zlcl92ZWMgPSBOVUxMOworICAgICAgc3Ry dWN0IHpfY2FuZGlkYXRlICp2ZXIgPSBjYW5kaWRhdGVzOworICAgICAgZm5f dmVyX3ZlYyA9IFZFQ19hbGxvYyAodHJlZSwgaGVhcCwgMik7CisgICAgICBm b3IgKDt2ZXI7IHZlciA9IHZlci0+bmV4dCkKKyAgICAgICAgVkVDX3NhZmVf cHVzaCAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYywgdmVyLT5mbik7CisgICAg ICBidWlsZF9kaXNwYXRjaGVyX2Zvcl9mdW5jdGlvbl92ZXJzaW9ucyAoZm5f dmVyX3ZlYyk7CisgICAgICBWRUNfZnJlZSAodHJlZSwgaGVhcCwgZm5fdmVy X3ZlYyk7CisgICAgfQorCiAgIC8qIFdhbGsgdGhyb3VnaCB0aGUgbGlzdCBv bmNlLCBjb21wYXJpbmcgZWFjaCBjdXJyZW50IGNoYW1wIHRvIHRoZSBuZXh0 CiAgICAgIGNhbmRpZGF0ZSwga25vY2tpbmcgb3V0IGEgY2FuZGlkYXRlIG9y IHR3byB3aXRoIGVhY2ggY29tcGFyaXNvbi4gICovCiAKSW5kZXg6IGdjYy9j cC9tYW5nbGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3Av bWFuZ2xlLmMJKHJldmlzaW9uIDE4ODIwOSkKKysrIGdjYy9jcC9tYW5nbGUu Ywkod29ya2luZyBjb3B5KQpAQCAtMTI0NSw3ICsxMjQ1LDEyIEBAIHdyaXRl X3VucXVhbGlmaWVkX25hbWUgKGNvbnN0IHRyZWUgZGVjbCkKICAgICB7CiAg ICAgICBNQU5HTEVfVFJBQ0VfVFJFRSAoImxvY2FsLXNvdXJjZS1uYW1lIiwg ZGVjbCk7CiAgICAgICB3cml0ZV9jaGFyICgnTCcpOwotICAgICAgd3JpdGVf c291cmNlX25hbWUgKERFQ0xfTkFNRSAoZGVjbCkpOworICAgICAgaWYgKFRS RUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTAorCSAgJiYgREVDTF9G VU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpCisJICAmJiBERUNMX0FTU0VNQkxF Ul9OQU1FX1NFVF9QIChkZWNsKSkKKwl3cml0ZV9zb3VyY2VfbmFtZSAoREVD TF9BU1NFTUJMRVJfTkFNRSAoZGVjbCkpOworICAgICAgZWxzZQorCXdyaXRl X3NvdXJjZV9uYW1lIChERUNMX05BTUUgKGRlY2wpKTsKICAgICAgIC8qIFRo ZSBkZWZhdWx0IGRpc2NyaW1pbmF0b3IgaXMgMSwgYW5kIHRoYXQncyBhbGwg d2UgZXZlciB1c2UsCiAJIHNvIHRoZXJlJ3Mgbm8gY29kZSB0byBvdXRwdXQg b25lIGhlcmUuICAqLwogICAgIH0KQEAgLTEyNjAsNyArMTI2NSwxNCBAQCB3 cml0ZV91bnF1YWxpZmllZF9uYW1lIChjb25zdCB0cmVlIGRlY2wpCiAgICAg ICAgICAgICAgICAmJiBMQU1CREFfVFlQRV9QICh0eXBlKSkKICAgICAgICAg d3JpdGVfY2xvc3VyZV90eXBlX25hbWUgKHR5cGUpOwogICAgICAgZWxzZQot ICAgICAgICB3cml0ZV9zb3VyY2VfbmFtZSAoREVDTF9OQU1FIChkZWNsKSk7 CisJeworCSAgaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVD TAorCSAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKQor CSAgICAgICYmIERFQ0xfQVNTRU1CTEVSX05BTUVfU0VUX1AgKGRlY2wpKQor CSAgICB3cml0ZV9zb3VyY2VfbmFtZSAoREVDTF9BU1NFTUJMRVJfTkFNRSAo ZGVjbCkpOworCSAgZWxzZQorCSAgICB3cml0ZV9zb3VyY2VfbmFtZSAoREVD TF9OQU1FIChkZWNsKSk7CisJfQogICAgIH0KIH0KIApJbmRleDogZ2NjL01h a2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9NYWtl ZmlsZS5pbgkocmV2aXNpb24gMTg4MjA5KQorKysgZ2NjL01ha2VmaWxlLmlu CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEyLDYgKzEzMTIsNyBAQCBPQkpTID0g XAogCW1jZi5vIFwKIAltb2RlLXN3aXRjaGluZy5vIFwKIAltb2R1bG8tc2No ZWQubyBcCisJbXVsdGl2ZXJzaW9uLm8gXAogCW9tZWdhLm8gXAogCW9tcC1s b3cubyBcCiAJb3B0YWJzLm8gXApAQCAtMzA0NCw2ICszMDQ1LDExIEBAIHJl ZS5vIDogcmVlLmMgJChDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVz LmgKICAgICQoREZfSCkgJChUSU1FVkFSX0gpICQoVFJFRV9QQVNTX0gpICQo UkVDT0dfSCkgJChFWFBSX0gpIFwKICAgICQoUkVHU19IKSAkKFRSRUVfSCkg JChUTV9QX0gpIGluc24tY29uZmlnLmggJChJTlNOX0FUVFJfSCkgJChESUFH Tk9TVElDX0NPUkVfSCkgXAogICAgJChUQVJHRVRfSCkgJChPUFRBQlNfSCkg aW5zbi1jb2Rlcy5oIHJ0bGhvb2tzLWRlZi5oICQoUEFSQU1TX0gpICQoQ0dS QVBIX0gpCittdWx0aXZlcnNpb24ubyA6IG11bHRpdmVyc2lvbi5jICQoQ09O RklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oICQoVE1fSCkgXAorICAg JChUUkVFX0gpIGxhbmdob29rcy5oICQoVFJFRV9JTkxJTkVfSCkgJChGTEFH U19IKSAkKENHUkFQSF9IKSBpbnRsLmggXAorICAgJChESUFHTk9TVElDX0gp ICQoRklCSEVBUF9IKSAkKFBBUkFNU19IKSAkKFRJTUVWQVJfSCkgdHJlZS1w YXNzLmggXAorICAgJChIQVNIVEFCX0gpICQoQ09WRVJBR0VfSCkgJChHR0Nf SCkgJChUUkVFX0ZMT1dfSCkgJChSVExfSCkgJChJUEFfUFJPUF9IKSBcCisg ICAkKEJBU0lDX0JMT0NLX0gpICQoVE9QTEVWX0gpICQoVFJFRV9EVU1QX0gp IGlwYS1pbmxpbmUuaAogY3Byb3AubyA6IGNwcm9wLmMgJChDT05GSUdfSCkg JChTWVNURU1fSCkgY29yZXR5cGVzLmggJChUTV9IKSAkKFJUTF9IKSBcCiAg ICAkKFJFR1NfSCkgaGFyZC1yZWctc2V0LmggJChGTEFHU19IKSBpbnNuLWNv bmZpZy5oIFwKICAgICQoUkVDT0dfSCkgJChFWFBSX0gpICQoQkFTSUNfQkxP Q0tfSCkgJChGVU5DVElPTl9IKSB0b3BsZXYuaCAkKERJQUdOT1NUSUNfQ09S RV9IKSBcCkluZGV4OiBnY2MvY29uZmlnL2kzODYvaTM4Ni5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy9jb25maWcvaTM4Ni9pMzg2LmMJKHJl dmlzaW9uIDE4ODIwOSkKKysrIGdjYy9jb25maWcvaTM4Ni9pMzg2LmMJKHdv cmtpbmcgY29weSkKQEAgLTI3NzMyLDYgKzI3NzMyLDQ3MyBAQCBpeDg2X2lu aXRfbW14X3NzZV9idWlsdGlucyAodm9pZCkKICAgICB9CiB9CiAKKworLyog VGhpcyBhZGRzIGEgY29uZGl0aW9uIHRvIHRoZSBiYXNpY19ibG9jayBORVdf QkIgaW4gZnVuY3Rpb24gRlVOQ1RJT05fREVDTAorICAgdG8gcmV0dXJuIGEg cG9pbnRlciB0byBWRVJTSU9OX0RFQ0wgaWYgdGhlIG91dGNvbWUgb2YgdGhl IGV4cHJlc3Npb24KKyAgIGZvcm1lZCBieSBQUkVESUNBVEVfQ0hBSU4gaXMg dHJ1ZS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZHVyaW5nCisg ICB2ZXJzaW9uIGRpc3BhdGNoIHRvIGRlY2lkZSB3aGljaCBmdW5jdGlvbiB2 ZXJzaW9uIHRvIGV4ZWN1dGUuICBJdCByZXR1cm5zCisgICB0aGUgYmFzaWMg YmxvY2sgYXQgdGhlIGVuZCB0byB3aGljaCBtb3JlIGNvbmRpdGlvbnMgY2Fu IGJlIGFkZGVkLiAgKi8KKworc3RhdGljIGJhc2ljX2Jsb2NrCithZGRfY29u ZGl0aW9uX3RvX2JiICh0cmVlIGZ1bmN0aW9uX2RlY2wsIHRyZWUgdmVyc2lv bl9kZWNsLAorCQkgICAgIHRyZWUgcHJlZGljYXRlX2NoYWluLCBiYXNpY19i bG9jayBuZXdfYmIpCit7CisgIGdpbXBsZSByZXR1cm5fc3RtdDsKKyAgdHJl ZSBjb252ZXJ0X2V4cHIsIHJlc3VsdF92YXI7CisgIGdpbXBsZSBjb252ZXJ0 X3N0bXQ7CisgIGdpbXBsZSBjYWxsX2NvbmRfc3RtdDsKKyAgZ2ltcGxlIGlm X2Vsc2Vfc3RtdDsKKworICBiYXNpY19ibG9jayBiYjEsIGJiMiwgYmIzOwor ICBlZGdlIGUxMiwgZTIzOworCisgIHRyZWUgY29uZF92YXIsIGFuZF9leHBy X3ZhciA9IE5VTExfVFJFRTsKKyAgZ2ltcGxlX3NlcSBnc2VxOworCisgIHRy ZWUgb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgdHJlZSBwcmVkaWNh dGVfZGVjbCwgcHJlZGljYXRlX2FyZzsKKworICBvbGRfY3VycmVudF9mdW5j dGlvbl9kZWNsID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICBwdXNoX2Nm dW4gKERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChmdW5jdGlvbl9kZWNsKSk7Cisg IGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGZ1bmN0aW9uX2RlY2w7CisKKyAg Z2NjX2Fzc2VydCAobmV3X2JiICE9IE5VTEwpOworICBnc2VxID0gYmJfc2Vx IChuZXdfYmIpOworCisKKyAgY29udmVydF9leHByID0gYnVpbGQxIChDT05W RVJUX0VYUFIsIHB0cl90eXBlX25vZGUsCisJICAgICAJCSBidWlsZF9mb2xk X2FkZHJfZXhwciAodmVyc2lvbl9kZWNsKSk7CisgIHJlc3VsdF92YXIgPSBj cmVhdGVfdG1wX3ZhciAocHRyX3R5cGVfbm9kZSwgTlVMTCk7CisgIGNvbnZl cnRfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKHJlc3VsdF92YXIsIGNv bnZlcnRfZXhwcik7IAorICByZXR1cm5fc3RtdCA9IGdpbXBsZV9idWlsZF9y ZXR1cm4gKHJlc3VsdF92YXIpOworCisgIGlmIChwcmVkaWNhdGVfY2hhaW4g PT0gTlVMTF9UUkVFKQorICAgIHsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3N0 bXQgKCZnc2VxLCBjb252ZXJ0X3N0bXQpOworICAgICAgZ2ltcGxlX3NlcV9h ZGRfc3RtdCAoJmdzZXEsIHJldHVybl9zdG10KTsKKyAgICAgIHNldF9iYl9z ZXEgKG5ld19iYiwgZ3NlcSk7CisgICAgICBnaW1wbGVfc2V0X2JiIChjb252 ZXJ0X3N0bXQsIG5ld19iYik7CisgICAgICBnaW1wbGVfc2V0X2JiIChyZXR1 cm5fc3RtdCwgbmV3X2JiKTsKKyAgICAgIHBvcF9jZnVuICgpOworICAgICAg Y3VycmVudF9mdW5jdGlvbl9kZWNsID0gb2xkX2N1cnJlbnRfZnVuY3Rpb25f ZGVjbDsKKyAgICAgIHJldHVybiBuZXdfYmI7CisgICAgfQorCisgIHdoaWxl IChwcmVkaWNhdGVfY2hhaW4gIT0gTlVMTCkKKyAgICB7CisgICAgICBjb25k X3ZhciA9IGNyZWF0ZV90bXBfdmFyIChpbnRlZ2VyX3R5cGVfbm9kZSwgTlVM TCk7CisgICAgICBwcmVkaWNhdGVfZGVjbCA9IFRSRUVfUFVSUE9TRSAocHJl ZGljYXRlX2NoYWluKTsKKyAgICAgIHByZWRpY2F0ZV9hcmcgPSBUUkVFX1ZB TFVFIChwcmVkaWNhdGVfY2hhaW4pOworICAgICAgY2FsbF9jb25kX3N0bXQg PSBnaW1wbGVfYnVpbGRfY2FsbCAocHJlZGljYXRlX2RlY2wsIDEsIHByZWRp Y2F0ZV9hcmcpOworICAgICAgZ2ltcGxlX2NhbGxfc2V0X2xocyAoY2FsbF9j b25kX3N0bXQsIGNvbmRfdmFyKTsKKworICAgICAgZ2ltcGxlX3NldF9ibG9j ayAoY2FsbF9jb25kX3N0bXQsIERFQ0xfSU5JVElBTCAoZnVuY3Rpb25fZGVj bCkpOworICAgICAgZ2ltcGxlX3NldF9iYiAoY2FsbF9jb25kX3N0bXQsIG5l d19iYik7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgY2Fs bF9jb25kX3N0bXQpOworCisgICAgICBwcmVkaWNhdGVfY2hhaW4gPSBUUkVF X0NIQUlOIChwcmVkaWNhdGVfY2hhaW4pOworICAgICAgCisgICAgICBpZiAo YW5kX2V4cHJfdmFyID09IE5VTEwpCisgICAgICAgIGFuZF9leHByX3ZhciA9 IGNvbmRfdmFyOworICAgICAgZWxzZQorCXsKKwkgIGdpbXBsZSBhc3NpZ25f c3RtdDsKKwkgIC8qIFVzZSBNSU5fRVhQUiB0byBjaGVjayBpZiBhbnkgaW50 ZWdlciBpcyB6ZXJvPy4KKwkgICAgIGFuZF9leHByX3ZhciA9IG1pbl9leHBy IDxjb25kX3ZhciwgYW5kX2V4cHJfdmFyPiAgKi8KKwkgIGFzc2lnbl9zdG10 ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoYW5kX2V4cHJfdmFyLAorCQkJICBi dWlsZDIgKE1JTl9FWFBSLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkgIGNv bmRfdmFyLCBhbmRfZXhwcl92YXIpKTsKKworCSAgZ2ltcGxlX3NldF9ibG9j ayAoYXNzaWduX3N0bXQsIERFQ0xfSU5JVElBTCAoZnVuY3Rpb25fZGVjbCkp OworCSAgZ2ltcGxlX3NldF9iYiAoYXNzaWduX3N0bXQsIG5ld19iYik7CisJ ICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgYXNzaWduX3N0bXQpOwor CX0KKyAgICB9CisKKyAgaWZfZWxzZV9zdG10ID0gZ2ltcGxlX2J1aWxkX2Nv bmQgKEdUX0VYUFIsIGFuZF9leHByX3ZhciwKKwkgIAkJICAgICAgICAgICAg aW50ZWdlcl96ZXJvX25vZGUsCisJCQkJICAgIE5VTExfVFJFRSwgTlVMTF9U UkVFKTsKKyAgZ2ltcGxlX3NldF9ibG9jayAoaWZfZWxzZV9zdG10LCBERUNM X0lOSVRJQUwgKGZ1bmN0aW9uX2RlY2wpKTsKKyAgZ2ltcGxlX3NldF9iYiAo aWZfZWxzZV9zdG10LCBuZXdfYmIpOworICBnaW1wbGVfc2VxX2FkZF9zdG10 ICgmZ3NlcSwgaWZfZWxzZV9zdG10KTsKKworICBnaW1wbGVfc2VxX2FkZF9z dG10ICgmZ3NlcSwgY29udmVydF9zdG10KTsKKyAgZ2ltcGxlX3NlcV9hZGRf c3RtdCAoJmdzZXEsIHJldHVybl9zdG10KTsKKyAgc2V0X2JiX3NlcSAobmV3 X2JiLCBnc2VxKTsKKworICBiYjEgPSBuZXdfYmI7CisgIGUxMiA9IHNwbGl0 X2Jsb2NrIChiYjEsIGlmX2Vsc2Vfc3RtdCk7CisgIGJiMiA9IGUxMi0+ZGVz dDsKKyAgZTEyLT5mbGFncyAmPSB+RURHRV9GQUxMVEhSVTsKKyAgZTEyLT5m bGFncyB8PSBFREdFX1RSVUVfVkFMVUU7CisKKyAgZTIzID0gc3BsaXRfYmxv Y2sgKGJiMiwgcmV0dXJuX3N0bXQpOworCisgIGdpbXBsZV9zZXRfYmIgKGNv bnZlcnRfc3RtdCwgYmIyKTsKKyAgZ2ltcGxlX3NldF9iYiAocmV0dXJuX3N0 bXQsIGJiMik7CisKKyAgYmIzID0gZTIzLT5kZXN0OworICBtYWtlX2VkZ2Ug KGJiMSwgYmIzLCBFREdFX0ZBTFNFX1ZBTFVFKTsgCisKKyAgcmVtb3ZlX2Vk Z2UgKGUyMyk7CisgIG1ha2VfZWRnZSAoYmIyLCBFWElUX0JMT0NLX1BUUiwg MCk7CisKKyAgcG9wX2NmdW4gKCk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVj bCA9IG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisKKyAgcmV0dXJuIGJi MzsKK30KKworLyogVGhpcyBwYXJzZXMgdGhlIGF0dHJpYnV0ZSBhcmd1bWVu dHMgdG8gdGFyZ2V0IGluIERFQ0wgYW5kIGRldGVybWluZXMKKyAgIHRoZSBy aWdodCBidWlsdGluIHRvIHVzZSB0byBtYXRjaCB0aGUgcGxhdGZvcm0gc3Bl Y2lmaWNhdGlvbi4KKyAgIEZvciBub3csIG9ubHkgb25lIHRhcmdldCBhcmd1 bWVudCAoImFyY2g9IiBvciAiPC1tPnh4eCIpIGlzIGFsbG93ZWQuCisgICBJ dCByZXR1cm5zIHRoZSBwcmlvcml0eSB2YWx1ZSBmb3IgdGhpcyB2ZXJzaW9u IGRlY2wuICBJZiBQUkVESUNBVEVfTElTVAorICAgaXMgbm90IE5VTEwsIGl0 IHN0b3JlcyB0aGUgbGlzdCBvZiBjcHUgZmVhdHVyZXMgdGhhdCBuZWVkIHRv IGJlIGNoZWNrZWQKKyAgIGJlZm9yZSBkaXNwYXRjaGluZyB0aGlzIGZ1bmN0 aW9uLiAgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAorZ2V0X2J1aWx0aW5f Y29kZV9mb3JfdmVyc2lvbiAodHJlZSBkZWNsLCB0cmVlICpwcmVkaWNhdGVf bGlzdCkKK3sKKyAgdHJlZSBhdHRyczsKKyAgc3RydWN0IGNsX3RhcmdldF9v cHRpb24gY3VyX3RhcmdldDsKKyAgdHJlZSB0YXJnZXRfbm9kZTsKKyAgc3Ry dWN0IGNsX3RhcmdldF9vcHRpb24gKm5ld190YXJnZXQ7CisgIGNvbnN0IGNo YXIgKmFyZ19zdHIgPSBOVUxMOworICBjb25zdCBjaGFyICphdHRyc19zdHIg PSBOVUxMOworICBjaGFyICp0b2tfc3RyID0gTlVMTDsKKyAgY2hhciAqdG9r ZW47CisgIHVuc2lnbmVkIGludCBwcmlvcml0eSA9IDA7CisKKyAgLyogUHJp b3JpdHkgb2YgaTM4NiBmZWF0dXJlcywgZ3JlYXRlciB2YWx1ZSBpcyBoaWdo ZXIgcHJpb3JpdHkuICAgVGhpcyBpcworICAgICB1c2VkIHRvIGRlY2lkZSB0 aGUgb3JkZXIgaW4gd2hpY2ggZnVuY3Rpb24gZGlzcGF0Y2ggbXVzdCBoYXBw ZW4uICBGb3IKKyAgICAgaW5zdGFuY2UsIGEgdmVyc2lvbiBzcGVjaWFsaXpl ZCBmb3IgU1NFNC4yIHNob3VsZCBiZSBjaGVja2VkIGZvciBkaXNwYXRjaAor ICAgICBiZWZvcmUgYSB2ZXJzaW9uIGZvciBTU0UzLCBhcyBTU0U0LjIgaW1w bGllcyBTU0UzLiAgKi8KKyAgZW51bSBmZWF0dXJlX3ByaW9yaXR5CisgIHsK KyAgICBQX1pFUk8gPSAwLAorICAgIFBfTU1YLAorICAgIFBfU1NFLAorICAg IFBfU1NFMiwKKyAgICBQX1NTRTMsCisgICAgUF9TU1NFMywKKyAgICBQX1BS T0NfU1NTRTMsCisgICAgUF9TU0U0X2EsCisgICAgUF9QUk9DX1NTRTRfYSwK KyAgICBQX1NTRTRfMSwKKyAgICBQX1NTRTRfMiwKKyAgICBQX1BST0NfU1NF NF8yLAorICAgIFBfUE9QQ05ULAorICAgIFBfQVZYLAorICAgIFBfQVZYMiwK KyAgICBQX0ZNQSwKKyAgICBQX1BST0NfRk1BCisgIH07CisKKyAgLyogVGhl c2UgYXJlIHRoZSB0YXJnZXQgYXR0cmlidXRlIHN0cmluZ3MgZm9yIHdoaWNo IGEgZGlzcGF0Y2hlciBpcworICAgICBhdmFpbGFibGUsIGZyb20gZm9sZF9i dWlsdGluX2NwdS4gICovCisKKyAgc3RhdGljIHN0cnVjdCBfZmVhdHVyZV9s aXN0CisgICAgeworICAgICAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsKKyAg ICAgIGNvbnN0IGVudW0gZmVhdHVyZV9wcmlvcml0eSBwcmlvcml0eTsKKyAg ICB9CisgIGNvbnN0IGZlYXR1cmVfbGlzdFtdID0KKyAgICB7CisgICAgICB7 Im1teCIsIFBfTU1YfSwKKyAgICAgIHsic3NlIiwgUF9TU0V9LAorICAgICAg eyJzc2UyIiwgUF9TU0UyfSwKKyAgICAgIHsic3NlMyIsIFBfU1NFM30sCisg ICAgICB7InNzc2UzIiwgUF9TU1NFM30sCisgICAgICB7InNzZTQuMSIsIFBf U1NFNF8xfSwKKyAgICAgIHsic3NlNC4yIiwgUF9TU0U0XzJ9LAorICAgICAg eyJwb3BjbnQiLCBQX1BPUENOVH0sCisgICAgICB7ImF2eCIsIFBfQVZYfSwK KyAgICAgIHsiYXZ4MiIsIFBfQVZYMn0KKyAgICB9OworCisKKyAgc3RhdGlj IHVuc2lnbmVkIGludCBOVU1fRkVBVFVSRVMKKyAgICA9IHNpemVvZiAoZmVh dHVyZV9saXN0KSAvIHNpemVvZiAoc3RydWN0IF9mZWF0dXJlX2xpc3QpOwor CisgIHVuc2lnbmVkIGludCBpOworCisgIHRyZWUgcHJlZGljYXRlX2NoYWlu ID0gTlVMTF9UUkVFOworICB0cmVlIHByZWRpY2F0ZV9kZWNsLCBwcmVkaWNh dGVfYXJnOworCisgIGF0dHJzID0gbG9va3VwX2F0dHJpYnV0ZSAoInRhcmdl dCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpOworICBnY2NfYXNzZXJ0IChh dHRycyAhPSBOVUxMKTsKKworICBhdHRycyA9IFRSRUVfVkFMVUUgKFRSRUVf VkFMVUUgKGF0dHJzKSk7CisKKyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChh dHRycykgPT0gU1RSSU5HX0NTVCk7CisgIGF0dHJzX3N0ciA9IFRSRUVfU1RS SU5HX1BPSU5URVIgKGF0dHJzKTsKKworCisgIC8qIEhhbmRsZSBhcmNoPSBp ZiBzcGVjaWZpZWQuICBGb3IgcHJpb3JpdHksIHNldCBpdCB0byBiZSAxIG1v cmUgdGhhbgorICAgICB0aGUgYmVzdCBpbnN0cnVjdGlvbiBzZXQgdGhlIHBy b2Nlc3NvciBjYW4gaGFuZGxlLiAgRm9yIGluc3RhbmNlLCBpZgorICAgICB0 aGVyZSBpcyBhIHZlcnNpb24gZm9yIGF0b20gYW5kIGEgdmVyc2lvbiBmb3Ig c3NzZTMgKHRoZSBoaWdoZXN0IElTQQorICAgICBwcmlvcml0eSBmb3IgYXRv bSksIHRoZSBhdG9tIHZlcnNpb24gbXVzdCBiZSBjaGVja2VkIGZvciBkaXNw YXRjaAorICAgICBiZWZvcmUgdGhlIHNzc2UzIHZlcnNpb24uICovCisgIGlm IChzdHJzdHIgKGF0dHJzX3N0ciwgImFyY2g9IikgIT0gTlVMTCkKKyAgICB7 CisgICAgICBjbF90YXJnZXRfb3B0aW9uX3NhdmUgKCZjdXJfdGFyZ2V0LCAm Z2xvYmFsX29wdGlvbnMpOworICAgICAgdGFyZ2V0X25vZGUgPSBpeDg2X3Zh bGlkX3RhcmdldF9hdHRyaWJ1dGVfdHJlZSAoYXR0cnMpOworICAgIAorICAg ICAgZ2NjX2Fzc2VydCAodGFyZ2V0X25vZGUpOworICAgICAgbmV3X3Rhcmdl dCA9IFRSRUVfVEFSR0VUX09QVElPTiAodGFyZ2V0X25vZGUpOworICAgICAg Z2NjX2Fzc2VydCAobmV3X3RhcmdldCk7CisgICAgICAKKyAgICAgIGlmIChu ZXdfdGFyZ2V0LT5hcmNoX3NwZWNpZmllZCAmJiBuZXdfdGFyZ2V0LT5hcmNo ID4gMCkKKwl7CisJICBzd2l0Y2ggKG5ld190YXJnZXQtPmFyY2gpCisJICAg IHsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQ09SRTJfMzI6CisJICAgIGNhc2Ug UFJPQ0VTU09SX0NPUkUyXzY0OgorCSAgICAgIGFyZ19zdHIgPSAiY29yZTIi OworCSAgICAgIHByaW9yaXR5ID0gUF9QUk9DX1NTU0UzOworCSAgICAgIGJy ZWFrOworCSAgICBjYXNlIFBST0NFU1NPUl9DT1JFSTdfMzI6CisJICAgIGNh c2UgUFJPQ0VTU09SX0NPUkVJN182NDoKKwkgICAgICBhcmdfc3RyID0gImNv cmVpNyI7CisJICAgICAgcHJpb3JpdHkgPSBQX1BST0NfU1NFNF8yOworCSAg ICAgIGJyZWFrOworCSAgICBjYXNlIFBST0NFU1NPUl9BVE9NOgorCSAgICAg IGFyZ19zdHIgPSAiYXRvbSI7CisJICAgICAgcHJpb3JpdHkgPSBQX1BST0Nf U1NTRTM7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgUFJPQ0VTU09SX0FN REZBTTEwOgorCSAgICAgIGFyZ19zdHIgPSAiYW1kZmFtMTBoIjsKKwkgICAg ICBwcmlvcml0eSA9IFBfUFJPQ19TU0U0X2E7CisJICAgICAgYnJlYWs7CisJ ICAgIGNhc2UgUFJPQ0VTU09SX0JEVkVSMToKKwkgICAgICBhcmdfc3RyID0g ImJkdmVyMSI7CisJICAgICAgcHJpb3JpdHkgPSBQX1BST0NfRk1BOworCSAg ICAgIGJyZWFrOworCSAgICBjYXNlIFBST0NFU1NPUl9CRFZFUjI6CisJICAg ICAgYXJnX3N0ciA9ICJiZHZlcjIiOworCSAgICAgIHByaW9yaXR5ID0gUF9Q Uk9DX0ZNQTsKKwkgICAgICBicmVhazsKKwkgICAgfSAgCisJfSAgICAKKyAg ICAKKyAgICAgIGNsX3RhcmdldF9vcHRpb25fcmVzdG9yZSAoJmdsb2JhbF9v cHRpb25zLCAmY3VyX3RhcmdldCk7CisJCisgICAgICBpZiAocHJlZGljYXRl X2xpc3QgJiYgYXJnX3N0ciA9PSBOVUxMKQorCXsKKwkgIGVycm9yX2F0IChE RUNMX1NPVVJDRV9MT0NBVElPTiAoZGVjbCksCisJICAgIAkiTm8gZGlzcGF0 Y2hlciBmb3VuZCBmb3IgdGhlIHZlcnNpb25pbmcgYXR0cmlidXRlcyIpOwor CSAgcmV0dXJuIDA7CisJfQorICAgIAorICAgICAgaWYgKHByZWRpY2F0ZV9s aXN0KQorCXsKKyAgICAgICAgICBwcmVkaWNhdGVfZGVjbCA9IGl4ODZfYnVp bHRpbnMgWyhpbnQpIElYODZfQlVJTFRJTl9DUFVfSVNdOworICAgICAgICAg IC8qIEZvciBhIEMgc3RyaW5nIGxpdGVyYWwgdGhlIGxlbmd0aCBpbmNsdWRl cyB0aGUgdHJhaWxpbmcgTlVMTC4gICovCisgICAgICAgICAgcHJlZGljYXRl X2FyZyA9IGJ1aWxkX3N0cmluZ19saXRlcmFsIChzdHJsZW4gKGFyZ19zdHIp ICsgMSwgYXJnX3N0cik7CisgICAgICAgICAgcHJlZGljYXRlX2NoYWluID0g dHJlZV9jb25zIChwcmVkaWNhdGVfZGVjbCwgcHJlZGljYXRlX2FyZywKKwkJ CQkgICAgICAgcHJlZGljYXRlX2NoYWluKTsKKwl9CisgICAgfQorCisgIC8q IFByb2Nlc3MgZmVhdHVyZSBuYW1lLiAgKi8KKyAgdG9rX3N0ciA9ICAoY2hh ciAqKSB4bWFsbG9jIChzdHJsZW4gKGF0dHJzX3N0cikgKyAxKTsKKyAgc3Ry Y3B5ICh0b2tfc3RyLCBhdHRyc19zdHIpOworICB0b2tlbiA9IHN0cnRvayAo dG9rX3N0ciwgIiwiKTsKKyAgcHJlZGljYXRlX2RlY2wgPSBpeDg2X2J1aWx0 aW5zIFsoaW50KSBJWDg2X0JVSUxUSU5fQ1BVX1NVUFBPUlRTXTsKKworICB3 aGlsZSAodG9rZW4gIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBEbyBub3Qg cHJvY2VzcyAiYXJjaD0iICAqLworICAgICAgaWYgKHN0cm5jbXAgKHRva2Vu LCAiYXJjaD0iLCA1KSA9PSAwKQorCXsKKwkgIHRva2VuID0gc3RydG9rIChO VUxMLCAiLCIpOworCSAgY29udGludWU7CisJfQorICAgICAgZm9yIChpID0g MDsgaSA8IE5VTV9GRUFUVVJFUzsgKytpKQorCXsKKwkgIGlmIChzdHJjbXAg KHRva2VuLCBmZWF0dXJlX2xpc3RbaV0ubmFtZSkgPT0gMCkKKwkgICAgewor CSAgICAgIGlmIChwcmVkaWNhdGVfbGlzdCkKKwkJeworCQkgIHByZWRpY2F0 ZV9hcmcgPSBidWlsZF9zdHJpbmdfbGl0ZXJhbCAoCisJCQkJICBzdHJsZW4g KGZlYXR1cmVfbGlzdFtpXS5uYW1lKSArIDEsCisJCQkJICBmZWF0dXJlX2xp c3RbaV0ubmFtZSk7CisJCSAgcHJlZGljYXRlX2NoYWluID0gdHJlZV9jb25z IChwcmVkaWNhdGVfZGVjbCwgcHJlZGljYXRlX2FyZywKKwkJCQkJICAgICAg IHByZWRpY2F0ZV9jaGFpbik7CisJCX0KKwkgICAgICAvKiBGaW5kIHRoZSBt YXhpbXVtIHByaW9yaXR5IGZlYXR1cmUuICAqLworCSAgICAgIGlmIChmZWF0 dXJlX2xpc3RbaV0ucHJpb3JpdHkgPiBwcmlvcml0eSkKKwkJcHJpb3JpdHkg PSBmZWF0dXJlX2xpc3RbaV0ucHJpb3JpdHk7CisKKwkgICAgICBicmVhazsK KwkgICAgfQorCX0KKyAgICAgIGlmIChwcmVkaWNhdGVfbGlzdCAmJiBpID09 IE5VTV9GRUFUVVJFUykKKwl7CisJICBlcnJvcl9hdCAoREVDTF9TT1VSQ0Vf TE9DQVRJT04gKGRlY2wpLAorCQkgICAgIk5vIGRpc3BhdGNoZXIgZm91bmQg Zm9yICVzIiwgdG9rZW4pOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgdG9r ZW4gPSBzdHJ0b2sgKE5VTEwsICIsIik7CisgICAgfQorICBmcmVlICh0b2tf c3RyKTsKKworICBpZiAocHJlZGljYXRlX2xpc3QgJiYgcHJlZGljYXRlX2No YWluID09IE5VTExfVFJFRSkKKyAgICB7CisgICAgICBlcnJvcl9hdCAoREVD TF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLAorCSAgICAgICAgIk5vIGRpc3Bh dGNoZXIgZm91bmQgZm9yIHRoZSB2ZXJzaW9uaW5nIGF0dHJpYnV0ZXMgOiAl cyIsCisJICAgICAgICBhdHRyc19zdHIpOworICAgICAgcmV0dXJuIDA7Cisg ICAgfQorICBlbHNlIGlmIChwcmVkaWNhdGVfbGlzdCkKKyAgICB7CisgICAg ICBwcmVkaWNhdGVfY2hhaW4gPSBucmV2ZXJzZSAocHJlZGljYXRlX2NoYWlu KTsKKyAgICAgICpwcmVkaWNhdGVfbGlzdCA9IHByZWRpY2F0ZV9jaGFpbjsK KyAgICB9CisKKyAgcmV0dXJuIHByaW9yaXR5OyAKK30KKworLyogVGhpcyBj b21wYXJlcyB0aGUgcHJpb3JpdHkgb2YgdGFyZ2V0IGZlYXR1cmVzIGluIGZ1 bmN0aW9uIERFQ0wxCisgICBhbmQgREVDTDIuICBJdCByZXR1cm5zIHBvc2l0 aXZlIHZhbHVlIGlmIERFQ0wxIGlzIGhpZ2hlciBwcmlvcml0eSwKKyAgIG5l Z2F0aXZlIHZhbHVlIGlmIERFQ0wyIGlzIGhpZ2hlciBwcmlvcml0eSBhbmQg MCBpZiB0aGV5IGFyZSB0aGUKKyAgIHNhbWUuICAqLworCitzdGF0aWMgaW50 CitpeDg2X2NvbXBhcmVfdmVyc2lvbnMgKHRyZWUgZGVjbDEsIHRyZWUgZGVj bDIpCit7CisgIHVuc2lnbmVkIGludCBwcmlvcml0eTEgPSAwOworICB1bnNp Z25lZCBpbnQgcHJpb3JpdHkyID0gMDsKKworICBpZiAobG9va3VwX2F0dHJp YnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbDEpKSAhPSBO VUxMKQorICAgIHByaW9yaXR5MSA9IGdldF9idWlsdGluX2NvZGVfZm9yX3Zl cnNpb24gKGRlY2wxLCBOVUxMKTsKKworICBpZiAobG9va3VwX2F0dHJpYnV0 ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbDIpKSAhPSBOVUxM KQorICAgIHByaW9yaXR5MiA9IGdldF9idWlsdGluX2NvZGVfZm9yX3ZlcnNp b24gKGRlY2wyLCBOVUxMKTsKKworICByZXR1cm4gKGludClwcmlvcml0eTEg LSAoaW50KXByaW9yaXR5MjsKK30KKyAKK3N0YXRpYyBpbnQKK2ZlYXR1cmVf Y29tcGFyZSAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQorewor ICB0eXBlZGVmIHN0cnVjdCBfZnVuY3Rpb25fdmVyc2lvbl9pbmZvCisgICAg eworICAgICAgdHJlZSB2ZXJzaW9uX2RlY2w7CisgICAgICB0cmVlIHByZWRp Y2F0ZV9jaGFpbjsKKyAgICAgIHVuc2lnbmVkIGludCBkaXNwYXRjaF9wcmlv cml0eTsKKyAgICB9IGZ1bmN0aW9uX3ZlcnNpb25faW5mbzsKKworICBjb25z dCBmdW5jdGlvbl92ZXJzaW9uX2luZm8gYzEgPSAqKGNvbnN0IGZ1bmN0aW9u X3ZlcnNpb25faW5mbyAqKXYxOworICBjb25zdCBmdW5jdGlvbl92ZXJzaW9u X2luZm8gYzIgPSAqKGNvbnN0IGZ1bmN0aW9uX3ZlcnNpb25faW5mbyAqKXYy OworICByZXR1cm4gKGMyLmRpc3BhdGNoX3ByaW9yaXR5IC0gYzEuZGlzcGF0 Y2hfcHJpb3JpdHkpOworfQorCisvKiBUaGlzIGlzIHRoZSB0YXJnZXQgaG9v ayB0byBnZW5lcmF0ZSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yCisgICBt dWx0aS12ZXJzaW9uZWQgZnVuY3Rpb25zLiAgRElTUEFUQ0hfREVDTCBpcyB0 aGUgZnVuY3Rpb24gd2hpY2ggd2lsbAorICAgY29udGFpbiB0aGUgZGlzcGF0 Y2ggbG9naWMuICBGTkRFQ0xTIGFyZSB0aGUgZnVuY3Rpb24gY2hvaWNlcyBm b3IKKyAgIGRpc3BhdGNoLCBhbmQgaXMgYSB0cmVlIGNoYWluLiAgRU1QVFlf QkIgaXMgdGhlIGJhc2ljIGJsb2NrIHBvaW50ZXIKKyAgIGluIERJU1BBVENI X0RFQ0wgaW4gd2hpY2ggdGhlIGRpc3BhdGNoIGNvZGUgaXMgZ2VuZXJhdGVk LiAgKi8KKworc3RhdGljIGludAoraXg4Nl9kaXNwYXRjaF92ZXJzaW9uICh0 cmVlIGRpc3BhdGNoX2RlY2wsCisJCSAgICAgICB2b2lkICpmbmRlY2xzX3As CisJCSAgICAgICBiYXNpY19ibG9jayAqZW1wdHlfYmIpCit7CisgIHRyZWUg ZGVmYXVsdF9kZWNsOworICBnaW1wbGUgaWZ1bmNfY3B1X2luaXRfc3RtdDsK KyAgZ2ltcGxlX3NlcSBnc2VxOworICB0cmVlIG9sZF9jdXJyZW50X2Z1bmN0 aW9uX2RlY2w7CisgIGludCBpeDsKKyAgdHJlZSBlbGU7CisgIFZFQyAodHJl ZSwgaGVhcCkgKmZuZGVjbHM7CisgIHVuc2lnbmVkIGludCBudW1fdmVyc2lv bnMgPSAwOworICB1bnNpZ25lZCBpbnQgYWN0dWFsX3ZlcnNpb25zID0gMDsK KyAgdW5zaWduZWQgaW50IGk7CisKKyAgc3RydWN0IF9mdW5jdGlvbl92ZXJz aW9uX2luZm8KKyAgICB7CisgICAgICB0cmVlIHZlcnNpb25fZGVjbDsKKyAg ICAgIHRyZWUgcHJlZGljYXRlX2NoYWluOworICAgICAgdW5zaWduZWQgaW50 IGRpc3BhdGNoX3ByaW9yaXR5OworICAgIH0qZnVuY3Rpb25fdmVyc2lvbl9p bmZvOworCisgIGdjY19hc3NlcnQgKGRpc3BhdGNoX2RlY2wgIT0gTlVMTAor CSAgICAgICYmIGZuZGVjbHNfcCAhPSBOVUxMCisJICAgICAgJiYgZW1wdHlf YmIgIT0gTlVMTCk7CisKKyAgLypmbmRlY2xzX3AgaXMgYWN0dWFsbHkgYSB2 ZWN0b3IuICAqLworICBmbmRlY2xzID0gKFZFQyAodHJlZSwgaGVhcCkgKilm bmRlY2xzX3A7CisKKyAgLyogQXRsZWFzdCBvbmUgbW9yZSB2ZXJzaW9uIG90 aGVyIHRoYW4gdGhlIGRlZmF1bHQuICAqLworICBudW1fdmVyc2lvbnMgPSBW RUNfbGVuZ3RoICh0cmVlLCBmbmRlY2xzKTsKKyAgZ2NjX2Fzc2VydCAobnVt X3ZlcnNpb25zID49IDIpOworCisgIGZ1bmN0aW9uX3ZlcnNpb25faW5mbyA9 IChzdHJ1Y3QgX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqKQorICAgIHhtYWxs b2MgKChudW1fdmVyc2lvbnMgLSAxKSAqIHNpemVvZiAoc3RydWN0IF9mdW5j dGlvbl92ZXJzaW9uX2luZm8pKTsKKworICAvKiBUaGUgZmlyc3QgdmVyc2lv biBpbiB0aGUgdmVjdG9yIGlzIHRoZSBkZWZhdWx0IGRlY2wuICAqLworICBk ZWZhdWx0X2RlY2wgPSBWRUNfaW5kZXggKHRyZWUsIGZuZGVjbHMsIDApOwor CisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBjdXJyZW50X2Z1bmN0 aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1RfRlVOQ1RJT04g KGRpc3BhdGNoX2RlY2wpKTsKKyAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0g ZGlzcGF0Y2hfZGVjbDsKKworICBnc2VxID0gYmJfc2VxICgqZW1wdHlfYmIp OworICAvKiBGdW5jdGlvbiB2ZXJzaW9uIGRpc3BhdGNoIGlzIHZpYSBJRlVO Qy4gIElGVU5DIHJlc29sdmVycyBmaXJlIGJlZm9yZQorICAgICBjb25zdHJ1 Y3RvcnMsIHNvIGV4cGxpY2l0eSBjYWxsIF9fYnVpbHRpbl9jcHVfaW5pdCBo ZXJlLiAgKi8KKyAgaWZ1bmNfY3B1X2luaXRfc3RtdCA9IGdpbXBsZV9idWls ZF9jYWxsX3ZlYyAoCisgICAgICAgICAgICAgICAgICAgICBpeDg2X2J1aWx0 aW5zIFsoaW50KSBJWDg2X0JVSUxUSU5fQ1BVX0lOSVRdLCBOVUxMKTsKKyAg Z2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGlmdW5jX2NwdV9pbml0X3N0 bXQpOworICBnaW1wbGVfc2V0X2JiIChpZnVuY19jcHVfaW5pdF9zdG10LCAq ZW1wdHlfYmIpOworICBzZXRfYmJfc2VxICgqZW1wdHlfYmIsIGdzZXEpOwor CisgIHBvcF9jZnVuICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBv bGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworCisKKyAgZm9yIChpeCA9IDE7 IFZFQ19pdGVyYXRlICh0cmVlLCBmbmRlY2xzLCBpeCwgZWxlKTsgKytpeCkK KyAgICB7CisgICAgICB0cmVlIHZlcnNpb25fZGVjbCA9IGVsZTsKKyAgICAg IHRyZWUgcHJlZGljYXRlX2NoYWluID0gTlVMTF9UUkVFOworICAgICAgdW5z aWduZWQgaW50IHByaW9yaXR5OworICAgICAgLyogR2V0IGF0dHJpYnV0ZSBz dHJpbmcsIHBhcnNlIGl0IGFuZCBmaW5kIHRoZSByaWdodCBwcmVkaWNhdGUg ZGVjbC4KKyAgICAgICAgIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gY291bGQg YmUgYSBsZW5ndGh5IGNvbWJpbmF0aW9uIG9mIG1hbnkKKwkgZmVhdHVyZXMs IGxpa2UgYXJjaC10eXBlIGFuZCB2YXJpb3VzIGlzYS12YXJpYW50cy4gICov CisgICAgICBwcmlvcml0eSA9IGdldF9idWlsdGluX2NvZGVfZm9yX3ZlcnNp b24gKHZlcnNpb25fZGVjbCwKKwkgCQkJICAgICAgICAgICAgICAgJnByZWRp Y2F0ZV9jaGFpbik7CisKKyAgICAgIGlmIChwcmVkaWNhdGVfY2hhaW4gPT0g TlVMTF9UUkVFKQorCWNvbnRpbnVlOworCisgICAgICBhY3R1YWxfdmVyc2lv bnMrKzsKKyAgICAgIGZ1bmN0aW9uX3ZlcnNpb25faW5mbyBbaXggLSAxXS52 ZXJzaW9uX2RlY2wgPSB2ZXJzaW9uX2RlY2w7CisgICAgICBmdW5jdGlvbl92 ZXJzaW9uX2luZm8gW2l4IC0gMV0ucHJlZGljYXRlX2NoYWluID0gcHJlZGlj YXRlX2NoYWluOworICAgICAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvIFtpeCAt IDFdLmRpc3BhdGNoX3ByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgfQorCisg IC8qIFNvcnQgdGhlIHZlcnNpb25zIGFjY29yZGluZyB0byBkZXNjZW5kaW5n IG9yZGVyIG9mIGRpc3BhdGNoIHByaW9yaXR5LiAgVGhlCisgICAgIHByaW9y aXR5IGlzIGJhc2VkIG9uIHRoZSBJU0EuICBUaGlzIGlzIG5vdCBhIHBlcmZl Y3Qgc29sdXRpb24uICBUaGVyZQorICAgICBjb3VsZCBzdGlsbCBiZSBhbWJp Z3VpdHkuICBJZiBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHZlcnNpb24gaXMg c3VpdGFibGUKKyAgICAgdG8gZXhlY3V0ZSwgIHdoaWNoIG9uZSBzaG91bGQg YmUgZGlzcGF0Y2hlZD8gIEluIGZ1dHVyZSwgYWxsb3cgdGhlIHVzZXIKKyAg ICAgdG8gc3BlY2lmeSBhIGRpc3BhdGNoICBwcmlvcml0eSBuZXh0IHRvIHRo ZSB2ZXJzaW9uLiAgKi8KKyAgcXNvcnQgKGZ1bmN0aW9uX3ZlcnNpb25faW5m bywgYWN0dWFsX3ZlcnNpb25zLAorICAgICAgICAgc2l6ZW9mIChzdHJ1Y3Qg X2Z1bmN0aW9uX3ZlcnNpb25faW5mbyksIGZlYXR1cmVfY29tcGFyZSk7CisK KyAgZm9yICAoaSA9IDA7IGkgPCBhY3R1YWxfdmVyc2lvbnM7ICsraSkKKyAg ICAqZW1wdHlfYmIgPSBhZGRfY29uZGl0aW9uX3RvX2JiIChkaXNwYXRjaF9k ZWNsLAorCQkJCSAgICAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvW2ldLnZlcnNp b25fZGVjbCwKKwkJCQkgICAgIGZ1bmN0aW9uX3ZlcnNpb25faW5mb1tpXS5w cmVkaWNhdGVfY2hhaW4sCisJCQkJICAgICAqZW1wdHlfYmIpOworCisgIC8q IGRpc3BhdGNoIGRlZmF1bHQgdmVyc2lvbiBhdCB0aGUgZW5kLiAgKi8KKyAg KmVtcHR5X2JiID0gYWRkX2NvbmRpdGlvbl90b19iYiAoZGlzcGF0Y2hfZGVj bCwgZGVmYXVsdF9kZWNsLAorCQkJCSAgIE5VTEwsICplbXB0eV9iYik7CisK KyAgZnJlZSAoZnVuY3Rpb25fdmVyc2lvbl9pbmZvKTsKKyAgcmV0dXJuIDA7 Cit9CisKIC8qIFRoaXMgYnVpbGRzIHRoZSBwcm9jZXNzb3JfbW9kZWwgc3Ry dWN0IHR5cGUgZGVmaW5lZCBpbgogICAgbGliZ2NjL2NvbmZpZy9pMzg2L2Nw dWluZm8uYyAgKi8KIApAQCAtMzk2NzMsNiArNDAxNDAsMTIgQEAgaXg4Nl9t ZW1tb2RlbF9jaGVjayAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB2YWwpCiAj dW5kZWYgVEFSR0VUX0ZPTERfQlVJTFRJTgogI2RlZmluZSBUQVJHRVRfRk9M RF9CVUlMVElOIGl4ODZfZm9sZF9idWlsdGluCiAKKyN1bmRlZiBUQVJHRVRf RElTUEFUQ0hfVkVSU0lPTgorI2RlZmluZSBUQVJHRVRfRElTUEFUQ0hfVkVS U0lPTiBpeDg2X2Rpc3BhdGNoX3ZlcnNpb24KKworI3VuZGVmIFRBUkdFVF9D T01QQVJFX1ZFUlNJT05TCisjZGVmaW5lIFRBUkdFVF9DT01QQVJFX1ZFUlNJ T05TIGl4ODZfY29tcGFyZV92ZXJzaW9ucworCiAjdW5kZWYgVEFSR0VUX0VO VU1fVkFfTElTVF9QCiAjZGVmaW5lIFRBUkdFVF9FTlVNX1ZBX0xJU1RfUCBp eDg2X2VudW1fdmFfbGlzdAogCg== --e89a8ff1c7cebbfedb04c1ad0f4a--