Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rVivp-000wmC-83 for pgsql-hackers@arkaria.postgresql.org; Fri, 02 Feb 2024 02:05:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rVivo-0094Wf-BT for pgsql-hackers@arkaria.postgresql.org; Fri, 02 Feb 2024 02:05:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rVivm-0094WX-D5 for pgsql-hackers@lists.postgresql.org; Fri, 02 Feb 2024 02:05:28 +0000 Received: from fhigh4-smtp.messagingengine.com ([103.168.172.155]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rVivg-004ccF-Ri for pgsql-hackers@lists.postgresql.org; Fri, 02 Feb 2024 02:05:25 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailfhigh.nyi.internal (Postfix) with ESMTP id D43DD114009F; Thu, 1 Feb 2024 21:05:18 -0500 (EST) Received: from imap49 ([10.202.2.99]) by compute2.internal (MEProxy); Thu, 01 Feb 2024 21:05:18 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eulerto.com; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1706839518; x=1706925918; bh=Frbq4prmMO +B3Vuaf4TUqfGG2V1R5jB4PZ3WrfapYUs=; b=knxPLJaDFyoduvUVZe8kq1Vz6M iQ5HaEzTQN+qxPtLmOoGgcF7OKl6PhAz1KXXXpURYLBYRbz/E2hbbQPdTScL1uDs XHQWaWnxOEKjEq8CedDuBamdKg4W2Uq/JPX8yAfyRLgxek4zlexGVkkfxEwd0Zr/ Z+BIPHT0zDYv+U2xd68evd2Dwp/7FRBf2WvCS1S4wjx0BoLHA+C681ZyHfe8Jf6K TOJrtL7fmA2W4TCy2fVQ7Qxq/6fb3BiK2m2O0jXTdumL+QMzAhRqIH6NRK1t9gM6 GBbq9Ku81QnOTOx7V7N4K1ivx0Pyk+6Sot/7GOPW9L4JsxyZhc4Mo0XBkxHw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1706839518; x=1706925918; bh=Frbq4prmMO+B3Vuaf4TUqfGG2V1R 5jB4PZ3WrfapYUs=; b=j13XukfDD2lFmoXrGffV2uk8AD9o/xCMomklFSWneeYR cjiOB38frN59EHQgTfC7yUSxCV2j+ZfsKc6MfzVpDipJXubbmW5TKvgJhxRUknn0 KLFbK8ux0NrIt7zfPZ3iGUTvmShf1eSLzBybzmtDiLudf39+DXvH0OiddNnOKPRi wZZfX9eLiH9wdw6U4gRfVFrM99yUYSRaTKyfd9zkhN8WqqWYl0SaqMfVPy7XDvZc Z/XlOR1Wn/mweFfzlrKzICgpcZpO2vWF1uQ2ewP5irYG2E5gqcS+JOq4vA3OoAEx RSxTN1wg9fB6VJ+k9YFsWGeDFrHm600Lvh+vf+iP7Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrfeduvddgfeefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfggfkjghffffhvfevufgtsehmtderreerreejnecuhfhrohhmpedfgfhu lhgvrhcuvfgrvhgvihhrrgdfuceovghulhgvrhesvghulhgvrhhtohdrtghomheqnecugg ftrfgrthhtvghrnhepfeefleefkeejvedvudeggfehtdfhtedvkedvledttdevgfejgedv ieeufeeigedvnecuffhomhgrihhnpehpohhsthhgrhgvshhqlhdrohhrghdpvghnthgvrh hprhhishgvuggsrdgtohhmnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehm rghilhhfrhhomhepvghulhgvrhesvghulhgvrhhtohdrtghomh X-ME-Proxy: Feedback-ID: i0c21471d:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id 6AB2A15A0092; Thu, 1 Feb 2024 21:05:18 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-144-ge5821d614e-fm-20240125.002-ge5821d61 MIME-Version: 1.0 Message-Id: <8d8d9960-8130-4216-b0e4-adf36b8b1c43@app.fastmail.com> In-Reply-To: References: <9a9c7e65-c47b-4400-a63e-ac6169c0860e@app.fastmail.com> Date: Thu, 01 Feb 2024 23:04:15 -0300 From: "Euler Taveira" To: "kuroda.hayato@fujitsu.com" , =?UTF-8?Q?Fabr=C3=ADzio_de_Royes_Mello?= Cc: "pgsql-hackers@lists.postgresql.org" , "vignesh C" , "Michael Paquier" , "Peter Eisentraut" , "Andres Freund" , "Ashutosh Bapat" , "Amit Kapila" , "Shlok Kyal" Subject: Re: speed up a logical replica setup Content-Type: multipart/mixed; boundary=2ea4945c2cd1415f9fa750494ab6ec06 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --2ea4945c2cd1415f9fa750494ab6ec06 Content-Type: multipart/alternative; boundary=15bf8685b9c04aa5bf061ce342e542ff --15bf8685b9c04aa5bf061ce342e542ff Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: quoted-printable On Thu, Feb 1, 2024, at 9:47 AM, Hayato Kuroda (Fujitsu) wrote: > I made fix patches to solve reported issues by Fabr=C3=ADzio. >=20 > * v13-0001: Same as v11-0001 made by Euler. > * v13-0002: Fixes ERRORs while dropping replication slots [1]. > If you want to see codes which we get agreement, please app= ly until 0002. > =3D=3D=3D experimental patches =3D=3D=3D > * v13-0003: Avoids to use replication connections. The issue [2] was s= olved on my env. > * v13-0004: Removes -P option and use primary_conninfo instead. > * v13-0005: Refactors data structures Thanks for rebasing the proposed patches. I'm attaching a new patch. As I said in the previous email [1] I fixed some issues from your previo= us review: * use pg_fatal() if possible. There are some cases that it couldn't repl= ace pg_log_error() + exit(1) because it requires a hint. * pg_resetwal output. Send standard output to /dev/null to avoid extra m= essage. * check privileges. Make sure the current role can execute CREATE SUBSCR= IPTION and pg_replication_origin_advance(). * log directory. Refactor code that setup the log file used as server lo= g. * run with restricted token (Windows). * v13-0002. Merged. * v13-0003. I applied a modified version. I returned only the required information for each query. * group command-line options into a new struct CreateSubscriberOptions. = The exception is the dry_run option. * rename functions that obtain system identifier. WIP I'm still working on the data structures to group options. I don't like = the way it was grouped in v13-0005. There is too many levels to reach database n= ame. The setup_subscriber() function requires the 3 data structures. The documentation update is almost there. I will include the modificatio= ns in the next patch. Regarding v13-0004, it seems a good UI that's why I wrote a comment abou= t it. However, it comes with a restriction that requires a similar HBA rule fo= r both regular and replication connections. Is it an acceptable restriction? We= might paint ourselves into the corner. A reasonable proposal is not to remove = this option. Instead, it should be optional. If it is not provided, primary_c= onninfo is used. [1] https://www.postgresql.org/message-id/80ce3f65-7ca3-471e-b1a4-24ac52= 9ff4ea%40app.fastmail.com -- Euler Taveira EDB https://www.enterprisedb.com/ --15bf8685b9c04aa5bf061ce342e542ff Content-Type: text/html;charset=utf-8 Content-Transfer-Encoding: quoted-printable
On Thu, Feb 1, = 2024, at 9:47 AM, Hayato Kuroda (Fujitsu) wrote:
I made fix patches to solve report= ed issues by Fabr=C3=ADzio.

* v13-0001: Sam= e as v11-0001 made by Euler.
* v13-0002: Fixes ERRORs whil= e dropping replication slots [1].
    =        If you want to see codes which we g= et agreement, please apply until 0002.
=3D=3D=3D experimen= tal patches =3D=3D=3D
* v13-0003: Avoids to use replicatio= n connections. The issue [2] was solved on my env.
* v13-0= 004: Removes -P option and use primary_conninfo instead.
*= v13-0005: Refactors data structures

Thanks for rebasing the proposed patches. I'm attaching a new pat= ch.

As I said in the previous email [1] I f= ixed some issues from your previous review:

* use pg_fatal() if possible. There are some cases that it couldn't rep= lace
  pg_log_error() + exit(1) because it requires a= hint.
* pg_resetwal output. Send standard output to /dev/= null to avoid extra message.
* check privileges. Make sure= the current role can execute CREATE SUBSCRIPTION
  a= nd pg_replication_origin_advance().
* log directory. Refac= tor code that setup the log file used as server log.
* run= with restricted token (Windows).
* v13-0002. Merged.
<= /div>
* v13-0003. I applied a modified version. I returned only the = required
  information for each query.
= * group command-line options into a new struct CreateSubscriberOptions. = The
  exception is the dry_run option.
= * rename functions that obtain system identifier.

WIP

I'm still working on the data st= ructures to group options. I don't like the way
it was gro= uped in v13-0005. There is too many levels to reach database name.
The setup_subscriber() function requires the 3 data structures.=

The documentation update is almost there. = I will include the modifications in
the next patch.

Regarding v13-0004, it seems a good UI that's why= I wrote a comment about it.
However, it comes with a rest= riction that requires a similar HBA rule for both
regular = and replication connections. Is it an acceptable restriction? We might
paint ourselves into the corner. A reasonable proposal is n= ot to remove this
option. Instead, it should be optional. = If it is not provided, primary_conninfo
is used.
=



--
Euler = Taveira
<= /div>

--15bf8685b9c04aa5bf061ce342e542ff-- --2ea4945c2cd1415f9fa750494ab6ec06 Content-Disposition: attachment; filename*0="v14-0001-Creates-a-new-logical-replica-from-a-standby-ser.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v14-0001-Creates-a-new-logical-replica-from-a-standby-ser.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: BASE64 RnJvbSAyNjY2YjVmNjYwYzY0ZDY5OWEwYmU0NDBjMzcwMWM3YmUwMGVjMzA5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdWxlciBUYXZlaXJhIDxldWxlci50YXZlaXJhQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgNSBKdW4gMjAyMyAxNDozOTo0MCAtMDQwMApT dWJqZWN0OiBbUEFUQ0ggdjE0XSBDcmVhdGVzIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSBmcm9t IGEgc3RhbmRieSBzZXJ2ZXIKCkEgbmV3IHRvb2wgY2FsbGVkIHBnX2NyZWF0ZXN1YnNjcmli ZXIgY2FuIGNvbnZlcnQgYSBwaHlzaWNhbCByZXBsaWNhIGludG8gYQpsb2dpY2FsIHJlcGxp Y2EuIEl0IHJ1bnMgb24gdGhlIHRhcmdldCBzZXJ2ZXIgYW5kIHNob3VsZCBiZSBhYmxlIHRv CmNvbm5lY3QgdG8gdGhlIHNvdXJjZSBzZXJ2ZXIgKHB1Ymxpc2hlcikgYW5kIHRoZSB0YXJn ZXQgc2VydmVyCihzdWJzY3JpYmVyKS4KClRoZSBjb252ZXJzaW9uIHJlcXVpcmVzIGEgZmV3 IHN0ZXBzLiBDaGVjayBpZiB0aGUgdGFyZ2V0IGRhdGEgZGlyZWN0b3J5CmhhcyB0aGUgc2Ft ZSBzeXN0ZW0gaWRlbnRpZmllciB0aGFuIHRoZSBzb3VyY2UgZGF0YSBkaXJlY3RvcnkuIFN0 b3AgdGhlCnRhcmdldCBzZXJ2ZXIgaWYgaXQgaXMgcnVubmluZyBhcyBhIHN0YW5kYnkgc2Vy dmVyLiBDcmVhdGUgb25lCnJlcGxpY2F0aW9uIHNsb3QgcGVyIHNwZWNpZmllZCBkYXRhYmFz ZSBvbiB0aGUgc291cmNlIHNlcnZlci4gT25lCmFkZGl0aW9uYWwgcmVwbGljYXRpb24gc2xv dCBpcyBjcmVhdGVkIGF0IHRoZSBlbmQgdG8gZ2V0IHRoZSBjb25zaXN0ZW50CkxTTiAoVGhp cyBjb25zaXN0ZW50IExTTiB3aWxsIGJlIHVzZWQgYXMgKGEpIGEgc3RvcHBpbmcgcG9pbnQg Zm9yIHRoZQpyZWNvdmVyeSBwcm9jZXNzIGFuZCAoYikgYSBzdGFydGluZyBwb2ludCBmb3Ig dGhlIHN1YnNjcmlwdGlvbnMpLiBXcml0ZQpyZWNvdmVyeSBwYXJhbWV0ZXJzIGludG8gdGhl IHRhcmdldCBkYXRhIGRpcmVjdG9yeSBhbmQgc3RhcnQgdGhlIHRhcmdldApzZXJ2ZXIgKFdh aXQgdW50aWwgdGhlIHRhcmdldCBzZXJ2ZXIgaXMgcHJvbW90ZWQpLiBDcmVhdGUgb25lCnB1 YmxpY2F0aW9uIChGT1IgQUxMIFRBQkxFUykgcGVyIHNwZWNpZmllZCBkYXRhYmFzZSBvbiB0 aGUgc291cmNlCnNlcnZlci4gQ3JlYXRlIG9uZSBzdWJzY3JpcHRpb24gcGVyIHNwZWNpZmll ZCBkYXRhYmFzZSBvbiB0aGUgdGFyZ2V0CnNlcnZlciAoVXNlIHJlcGxpY2F0aW9uIHNsb3Qg YW5kIHB1YmxpY2F0aW9uIGNyZWF0ZWQgaW4gYSBwcmV2aW91cyBzdGVwLgpEb24ndCBlbmFi bGUgdGhlIHN1YnNjcmlwdGlvbnMgeWV0KS4gU2V0cyB0aGUgcmVwbGljYXRpb24gcHJvZ3Jl c3MgdG8KdGhlIGNvbnNpc3RlbnQgTFNOIHRoYXQgd2FzIGdvdCBpbiBhIHByZXZpb3VzIHN0 ZXAuIEVuYWJsZSB0aGUKc3Vic2NyaXB0aW9uIGZvciBlYWNoIHNwZWNpZmllZCBkYXRhYmFz ZSBvbiB0aGUgdGFyZ2V0IHNlcnZlci4KU3RvcCB0aGUgdGFyZ2V0IHNlcnZlci4gQ2hhbmdl IHRoZSBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIHRoZSB0YXJnZXQKc2VydmVyLgoKRGVwZW5k aW5nIG9uIHlvdXIgd29ya2xvYWQgYW5kIGRhdGFiYXNlIHNpemUsIGNyZWF0aW5nIGEgbG9n aWNhbCByZXBsaWNhCmNvdWxkbid0IGJlIGFuIG9wdGlvbiBkdWUgdG8gcmVzb3VyY2UgY29u c3RyYWludHMgKFdBTCBiYWNrbG9nIHNob3VsZCBiZQphdmFpbGFibGUgdW50aWwgYWxsIHRh YmxlIGRhdGEgaXMgc3luY2hyb25pemVkKS4gVGhlIGluaXRpYWwgZGF0YSBjb3B5CmFuZCB0 aGUgcmVwbGljYXRpb24gcHJvZ3Jlc3MgdGVuZHMgdG8gYmUgZmFzdGVyIG9uIGEgcGh5c2lj YWwgcmVwbGljYS4KVGhlIHB1cnBvc2Ugb2YgdGhpcyB0b29sIGlzIHRvIHNwZWVkIHVwIGEg bG9naWNhbCByZXBsaWNhIHNldHVwLgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMu c2dtbCAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVh dGVzdWJzY3JpYmVyLnNnbWwgICAgIHwgIDMyMCArKysKIGRvYy9zcmMvc2dtbC9yZWZlcmVu Y2Uuc2dtbCAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2Jpbi9wZ19iYXNlYmFj a3VwLy5naXRpZ25vcmUgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmluL3BnX2Jhc2Vi YWNrdXAvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICA4ICstCiBzcmMvYmluL3BnX2Jh c2ViYWNrdXAvbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDE5ICsKIHNyYy9iaW4vcGdf YmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMgICB8IDE4NzYgKysrKysrKysrKysr KysrKysKIC4uLi90LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVyLnBsICAgICAgICAgICAgICB8 ICAgNDQgKwogLi4uL3QvMDQxX3BnX2NyZWF0ZXN1YnNjcmliZXJfc3RhbmRieS5wbCAgICAg IHwgIDEzOSArKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg ICAgIHwgICAgMiArCiAxMCBmaWxlcyBjaGFuZ2VkLCAyNDEwIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Mvc3JjL3NnbWwvcmVmL3BnX2Ny ZWF0ZXN1YnNjcmliZXIuc2dtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfYmFz ZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5wbAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MV9wZ19jcmVhdGVzdWJz Y3JpYmVyX3N0YW5kYnkucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZp bGVzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKaW5kZXggNGE0Mjk5 OWIxOC4uYTJiNWVlYTBlMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxl cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbApAQCAtMjE0LDYg KzIxNCw3IEBAIENvbXBsZXRlIGxpc3Qgb2YgdXNhYmxlIHNnbWwgc291cmNlIGZpbGVzIGlu IHRoaXMgZGlyZWN0b3J5LgogPCFFTlRJVFkgcGdSZXNldHdhbCAgICAgICAgIFNZU1RFTSAi cGdfcmVzZXR3YWwuc2dtbCI+CiA8IUVOVElUWSBwZ1Jlc3RvcmUgICAgICAgICAgU1lTVEVN ICJwZ19yZXN0b3JlLnNnbWwiPgogPCFFTlRJVFkgcGdSZXdpbmQgICAgICAgICAgIFNZU1RF TSAicGdfcmV3aW5kLnNnbWwiPgorPCFFTlRJVFkgcGdDcmVhdGVTdWJzY3JpYmVyIFNZU1RF TSAicGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sIj4KIDwhRU5USVRZIHBnVmVyaWZ5QmFja3Vw ICAgICBTWVNURU0gInBnX3ZlcmlmeWJhY2t1cC5zZ21sIj4KIDwhRU5USVRZIHBndGVzdGZz eW5jICAgICAgICBTWVNURU0gInBndGVzdGZzeW5jLnNnbWwiPgogPCFFTlRJVFkgcGd0ZXN0 dGltaW5nICAgICAgIFNZU1RFTSAicGd0ZXN0dGltaW5nLnNnbWwiPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL3BnX2NyZWF0ZXN1YnNjcmliZXIuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi5mNTIzODc3MWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwKQEAgLTAsMCArMSwzMjAgQEAK KzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sCitQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9ImFwcC1wZ2NyZWF0 ZXN1YnNjcmliZXIiPgorIDxpbmRleHRlcm0gem9uZT0iYXBwLXBnY3JlYXRlc3Vic2NyaWJl ciI+CisgIDxwcmltYXJ5PnBnX2NyZWF0ZXN1YnNjcmliZXI8L3ByaW1hcnk+CisgPC9pbmRl eHRlcm0+CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0bGU+PGFwcGxpY2F0aW9uPnBn X2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPjwvcmVmZW50cnl0aXRsZT4KKyAgPG1h bnZvbG51bT4xPC9tYW52b2xudW0+CisgIDxyZWZtaXNjaW5mbz5BcHBsaWNhdGlvbjwvcmVm bWlzY2luZm8+CisgPC9yZWZtZXRhPgorCisgPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPnBn X2NyZWF0ZXN1YnNjcmliZXI8L3JlZm5hbWU+CisgIDxyZWZwdXJwb3NlPmNvbnZlcnQgYSBw aHlzaWNhbCByZXBsaWNhIGludG8gYSBuZXcgbG9naWNhbCByZXBsaWNhPC9yZWZwdXJwb3Nl PgorIDwvcmVmbmFtZWRpdj4KKworIDxyZWZzeW5vcHNpc2Rpdj4KKyAgPGNtZHN5bm9wc2lz PgorICAgPGNvbW1hbmQ+cGdfY3JlYXRlc3Vic2NyaWJlcjwvY29tbWFuZD4KKyAgIDxhcmcg cmVwPSJyZXBlYXQiPjxyZXBsYWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPjwvYXJnPgor ICAgPGdyb3VwIGNob2ljZT0icGxhaW4iPgorICAgIDxncm91cCBjaG9pY2U9InJlcSI+Cisg ICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tRDwvb3B0aW9uPiA8L2FyZz4KKyAg ICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tcGdkYXRhPC9vcHRpb24+PC9hcmc+ CisgICAgPC9ncm91cD4KKyAgICA8cmVwbGFjZWFibGU+ZGF0YWRpcjwvcmVwbGFjZWFibGU+ CisgICAgPGdyb3VwIGNob2ljZT0icmVxIj4KKyAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48 b3B0aW9uPi1QPC9vcHRpb24+PC9hcmc+CisgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9w dGlvbj4tLXB1Ymxpc2hlci1zZXJ2ZXI8L29wdGlvbj48L2FyZz4KKyAgICA8L2dyb3VwPgor ICAgIDxyZXBsYWNlYWJsZT5jb25uc3RyPC9yZXBsYWNlYWJsZT4KKyAgICA8Z3JvdXAgY2hv aWNlPSJyZXEiPgorICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LVM8L29wdGlv bj48L2FyZz4KKyAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tc3Vic2NyaWJl ci1zZXJ2ZXI8L29wdGlvbj48L2FyZz4KKyAgICA8L2dyb3VwPgorICAgIDxyZXBsYWNlYWJs ZT5jb25uc3RyPC9yZXBsYWNlYWJsZT4KKyAgICA8Z3JvdXAgY2hvaWNlPSJyZXEiPgorICAg ICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LWQ8L29wdGlvbj48L2FyZz4KKyAgICAg PGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tZGF0YWJhc2U8L29wdGlvbj48L2FyZz4K KyAgICA8L2dyb3VwPgorICAgIDxyZXBsYWNlYWJsZT5kYm5hbWU8L3JlcGxhY2VhYmxlPgor ICAgPC9ncm91cD4KKyAgPC9jbWRzeW5vcHNpcz4KKyA8L3JlZnN5bm9wc2lzZGl2PgorCisg PHJlZnNlY3QxPgorICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorICA8cGFyYT4KKyAg ICA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGNyZWF0 ZXMgYSBuZXcgbG9naWNhbAorICAgIHJlcGxpY2EgZnJvbSBhIHBoeXNpY2FsIHN0YW5kYnkg c2VydmVyLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGFwcGxpY2F0aW9uPnBn X2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBzaG91bGQgYmUgcnVuIGF0IHRoZSB0 YXJnZXQKKyAgIHNlcnZlci4gVGhlIHNvdXJjZSBzZXJ2ZXIgKGtub3duIGFzIHB1Ymxpc2hl ciBzZXJ2ZXIpIHNob3VsZCBhY2NlcHQgbG9naWNhbAorICAgcmVwbGljYXRpb24gY29ubmVj dGlvbnMgZnJvbSB0aGUgdGFyZ2V0IHNlcnZlciAoa25vd24gYXMgc3Vic2NyaWJlciBzZXJ2 ZXIpLgorICAgVGhlIHRhcmdldCBzZXJ2ZXIgc2hvdWxkIGFjY2VwdCBsb2NhbCBsb2dpY2Fs IHJlcGxpY2F0aW9uIGNvbm5lY3Rpb24uCisgIDwvcGFyYT4KKyA8L3JlZnNlY3QxPgorCisg PHJlZnNlY3QxPgorICA8dGl0bGU+T3B0aW9uczwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAg IDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gYWNjZXB0 cyB0aGUgZm9sbG93aW5nCisgICAgY29tbWFuZC1saW5lIGFyZ3VtZW50czoKKworICAgIDx2 YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9u Pi1EIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kaXJlY3Rvcnk8L3JlcGxhY2Vh YmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1wZ2RhdGE9PHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRpcmVjdG9yeTwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaGUgdGFyZ2V0IGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGEgY2x1c3RlciBkaXJlY3Rv cnkgZnJvbSBhIHBoeXNpY2FsCisgICAgICAgIHJlcGxpY2EuCisgICAgICAgPC9wYXJhPgor ICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmNvbm5zdHI8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LS1wdWJsaXNoZXItc2VydmVyPTxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5jb25uc3RyPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb25uZWN0aW9uIHN0 cmluZyB0byB0aGUgcHVibGlzaGVyLiBGb3IgZGV0YWlscyBzZWUgPHhyZWYgbGlua2VuZD0i bGlicHEtY29ubnN0cmluZyIvPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVt PgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAg PHRlcm0+PG9wdGlvbj4tUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29ubnN0 cjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4t LXN1YnNjcmliZXItc2VydmVyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb25u c3RyPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb25uZWN0aW9uIHN0cmluZyB0byB0aGUgc3Vi c2NyaWJlci4gRm9yIGRldGFpbHMgc2VlIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLWNvbm5zdHJp bmciLz4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+ LWQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRibmFtZTwvcmVwbGFjZWFibGU+ PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWRhdGFiYXNlPTxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kYm5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhl IGRhdGFiYXNlIG5hbWUgdG8gY3JlYXRlIHRoZSBzdWJzY3JpcHRpb24uIE11bHRpcGxlIGRh dGFiYXNlcyBjYW4gYmUKKyAgICAgICAgc2VsZWN0ZWQgYnkgd3JpdGluZyBtdWx0aXBsZSA8 b3B0aW9uPi1kPC9vcHRpb24+IHN3aXRjaGVzLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT48b3B0aW9uPi1uPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+ PG9wdGlvbj4tLWRyeS1ydW48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIERvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IG1v ZGlmeWluZyB0aGUgdGFyZ2V0IGRpcmVjdG9yeS4KKyAgICAgICA8L3BhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+PG9wdGlvbj4tcjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LS1yZXRhaW48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFJldGFpbiBsb2cgZmlsZSBldmVuIGFmdGVyIHN1Y2Nl c3NmdWwgY29tcGxldGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0 ZXJtPjxvcHRpb24+LXQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNlY29uZHM8 L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8dGVybT48b3B0aW9uPi0t cmVjb3ZlcnktdGltZW91dD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2Vjb25k czwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgdG8g d2FpdCBmb3IgcmVjb3ZlcnkgdG8gZW5kLiBTZXR0aW5nIHRvIDAKKyAgICAgICAgZGlzYWJs ZXMuIFRoZSBkZWZhdWx0IGlzIDAuCisgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAg ICA8dGVybT48b3B0aW9uPi12PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlv bj4tLXZlcmJvc2U8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAg PHBhcmE+CisgICAgICAgIEVuYWJsZXMgdmVyYm9zZSBtb2RlLiBUaGlzIHdpbGwgY2F1c2UK KyAgICAgICAgPGFwcGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9u PiB0byBvdXRwdXQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgICAgICAgYW5kIGRldGFpbGVkIGlu Zm9ybWF0aW9uIGFib3V0IGVhY2ggc3RlcCB0byBzdGFuZGFyZCBlcnJvci4KKyAgICAgICAg UmVwZWF0aW5nIHRoZSBvcHRpb24gY2F1c2VzIGFkZGl0aW9uYWwgZGVidWctbGV2ZWwgbWVz c2FnZXMgdG8gYXBwZWFyIG9uCisgICAgICAgIHN0YW5kYXJkIGVycm9yLgorICAgICAgIDwv cGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwv dmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBPdGhlciBvcHRp b25zIGFyZSBhbHNvIGF2YWlsYWJsZToKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+PG9wdGlvbj4tVjwvb3B0aW9uPjwvdGVybT4K KyAgICAgICA8dGVybT48b3B0aW9uPi0tdmVyc2lvbjwvb3B0aW9uPjwvdGVybT4KKyAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgUHJpbnQgdGhlIDxhcHBsaWNh dGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gdmVyc2lvbiBhbmQgZXhp dC4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT48b3B0aW9uPi0/ PC9vcHRpb24+PC90ZXJtPgorICAgICAgIDx0ZXJtPjxvcHRpb24+LS1oZWxwPC9vcHRpb24+ PC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICBTaG93 IGhlbHAgYWJvdXQgPGFwcGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0 aW9uPiBjb21tYW5kCisgICAgICAgbGluZSBhcmd1bWVudHMsIGFuZCBleGl0LgorICAgICAg IDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICAgIDwvdmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworIDxy ZWZzZWN0MT4KKyAgPHRpdGxlPk5vdGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoZSB0 cmFuc2Zvcm1hdGlvbiBwcm9jZWVkcyBpbiB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICA8L3Bh cmE+CisKKyAgPHByb2NlZHVyZT4KKyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAgICA8YXBw bGljYXRpb24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGNoZWNrcyBpZiB0 aGUgZ2l2ZW4gdGFyZ2V0IGRhdGEKKyAgICAgZGlyZWN0b3J5IGhhcyB0aGUgc2FtZSBzeXN0 ZW0gaWRlbnRpZmllciB0aGFuIHRoZSBzb3VyY2UgZGF0YSBkaXJlY3RvcnkuCisgICAgIFNp bmNlIGl0IHVzZXMgdGhlIHJlY292ZXJ5IHByb2Nlc3MgYXMgb25lIG9mIHRoZSBzdGVwcywg aXQgc3RhcnRzIHRoZQorICAgICB0YXJnZXQgc2VydmVyIGFzIGEgcmVwbGljYSBmcm9tIHRo ZSBzb3VyY2Ugc2VydmVyLiBJZiB0aGUgc3lzdGVtCisgICAgIGlkZW50aWZpZXIgaXMgbm90 IHRoZSBzYW1lLCA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRp b24+IHdpbGwKKyAgICAgdGVybWluYXRlIHdpdGggYW4gZXJyb3IuCisgICAgPC9wYXJhPgor ICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgPGFwcGxpY2F0aW9u PnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjaGVja3MgaWYgdGhlIHRhcmdl dCBkYXRhCisgICAgIGRpcmVjdG9yeSBpcyB1c2VkIGJ5IGEgcGh5c2ljYWwgcmVwbGljYS4g U3RvcCB0aGUgcGh5c2ljYWwgcmVwbGljYSBpZiBpdCBpcworICAgICBydW5uaW5nLiBPbmUg b2YgdGhlIG5leHQgc3RlcHMgaXMgdG8gYWRkIHNvbWUgcmVjb3ZlcnkgcGFyYW1ldGVycyB0 aGF0CisgICAgIHJlcXVpcmVzIGEgc2VydmVyIHN0YXJ0LiBUaGlzIHN0ZXAgYXZvaWRzIGFu IGVycm9yLgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBh cmE+CisgICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlv bj4gY3JlYXRlcyBvbmUgcmVwbGljYXRpb24gc2xvdCBmb3IKKyAgICAgZWFjaCBzcGVjaWZp ZWQgZGF0YWJhc2Ugb24gdGhlIHNvdXJjZSBzZXJ2ZXIuIFRoZSByZXBsaWNhdGlvbiBzbG90 IG5hbWUKKyAgICAgY29udGFpbnMgYSA8bGl0ZXJhbD5wZ19jcmVhdGVzdWJzY3JpYmVyPC9s aXRlcmFsPiBwcmVmaXguIFRoZXNlIHJlcGxpY2F0aW9uCisgICAgIHNsb3RzIHdpbGwgYmUg dXNlZCBieSB0aGUgc3Vic2NyaXB0aW9ucyBpbiBhIGZ1dHVyZSBzdGVwLiAgQSB0ZW1wb3Jh cnkKKyAgICAgcmVwbGljYXRpb24gc2xvdCBpcyB1c2VkIHRvIGdldCBhIGNvbnNpc3RlbnQg c3RhcnQgbG9jYXRpb24uIFRoaXMKKyAgICAgY29uc2lzdGVudCBMU04gd2lsbCBiZSB1c2Vk IGFzIGEgc3RvcHBpbmcgcG9pbnQgaW4gdGhlIDx4cmVmCisgICAgIGxpbmtlbmQ9Imd1Yy1y ZWNvdmVyeS10YXJnZXQtbHNuIi8+IHBhcmFtZXRlciBhbmQgYnkgdGhlCisgICAgIHN1YnNj cmlwdGlvbnMgYXMgYSByZXBsaWNhdGlvbiBzdGFydGluZyBwb2ludC4gSXQgZ3VhcmFudGVl cyB0aGF0IG5vCisgICAgIHRyYW5zYWN0aW9uIHdpbGwgYmUgbG9zdC4KKyAgICA8L3BhcmE+ CisgICA8L3N0ZXA+CisKKyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAgICA8YXBwbGljYXRp b24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHdyaXRlcyByZWNvdmVyeSBw YXJhbWV0ZXJzIGludG8KKyAgICAgdGhlIHRhcmdldCBkYXRhIGRpcmVjdG9yeSBhbmQgc3Rh cnQgdGhlIHRhcmdldCBzZXJ2ZXIuIEl0IHNwZWNpZmllcyBhIExTTgorICAgICAoY29uc2lz dGVudCBMU04gdGhhdCB3YXMgb2J0YWluZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXApIG9mIHdy aXRlLWFoZWFkCisgICAgIGxvZyBsb2NhdGlvbiB1cCB0byB3aGljaCByZWNvdmVyeSB3aWxs IHByb2NlZWQuIEl0IGFsc28gc3BlY2lmaWVzCisgICAgIDxsaXRlcmFsPnByb21vdGU8L2xp dGVyYWw+IGFzIHRoZSBhY3Rpb24gdGhhdCB0aGUgc2VydmVyIHNob3VsZCB0YWtlIG9uY2UK KyAgICAgdGhlIHJlY292ZXJ5IHRhcmdldCBpcyByZWFjaGVkLiBUaGlzIHN0ZXAgZmluaXNo ZXMgb25jZSB0aGUgc2VydmVyIGVuZHMKKyAgICAgc3RhbmRieSBtb2RlIGFuZCBpcyBhY2Nl cHRpbmcgcmVhZC13cml0ZSBvcGVyYXRpb25zLgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4K KworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIE5leHQsIDxhcHBsaWNhdGlvbj5wZ19j cmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gY3JlYXRlcyBvbmUgcHVibGljYXRpb24K KyAgICAgZm9yIGVhY2ggc3BlY2lmaWVkIGRhdGFiYXNlIG9uIHRoZSBzb3VyY2Ugc2VydmVy LiBFYWNoIHB1YmxpY2F0aW9uCisgICAgIHJlcGxpY2F0ZXMgY2hhbmdlcyBmb3IgYWxsIHRh YmxlcyBpbiB0aGUgZGF0YWJhc2UuIFRoZSBwdWJsaWNhdGlvbiBuYW1lCisgICAgIGNvbnRh aW5zIGEgPGxpdGVyYWw+cGdfY3JlYXRlc3Vic2NyaWJlcjwvbGl0ZXJhbD4gcHJlZml4LiBU aGVzZSBwdWJsaWNhdGlvbgorICAgICB3aWxsIGJlIHVzZWQgYnkgYSBjb3JyZXNwb25kaW5n IHN1YnNjcmlwdGlvbiBpbiBhIG5leHQgc3RlcC4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+ CisKKyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAgICA8YXBwbGljYXRpb24+cGdfY3JlYXRl c3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGNyZWF0ZXMgb25lIHN1YnNjcmlwdGlvbiBmb3IK KyAgICAgZWFjaCBzcGVjaWZpZWQgZGF0YWJhc2Ugb24gdGhlIHRhcmdldCBzZXJ2ZXIuIEVh Y2ggc3Vic2NyaXB0aW9uIG5hbWUKKyAgICAgY29udGFpbnMgYSA8bGl0ZXJhbD5wZ19jcmVh dGVzdWJzY3JpYmVyPC9saXRlcmFsPiBwcmVmaXguIFRoZSByZXBsaWNhdGlvbiBzbG90Cisg ICAgIG5hbWUgaXMgaWRlbnRpY2FsIHRvIHRoZSBzdWJzY3JpcHRpb24gbmFtZS4gSXQgZG9l cyBub3QgY29weSBleGlzdGluZyBkYXRhCisgICAgIGZyb20gdGhlIHNvdXJjZSBzZXJ2ZXIu IEl0IGRvZXMgbm90IGNyZWF0ZSBhIHJlcGxpY2F0aW9uIHNsb3QuIEluc3RlYWQsIGl0Cisg ICAgIHVzZXMgdGhlIHJlcGxpY2F0aW9uIHNsb3QgdGhhdCB3YXMgY3JlYXRlZCBpbiBhIHBy ZXZpb3VzIHN0ZXAuIFRoZQorICAgICBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBidXQgaXQg aXMgbm90IGVuYWJsZWQgeWV0LiBUaGUgcmVhc29uIGlzIHRoZQorICAgICByZXBsaWNhdGlv biBwcm9ncmVzcyBtdXN0IGJlIHNldCB0byB0aGUgY29uc2lzdGVudCBMU04gYnV0IHJlcGxp Y2F0aW9uCisgICAgIG9yaWdpbiBuYW1lIGNvbnRhaW5zIHRoZSBzdWJzY3JpcHRpb24gb2lk IGluIGl0cyBuYW1lLiBIZW5jZSwgdGhlCisgICAgIHN1YnNjcmlwdGlvbiB3aWxsIGJlIGVu YWJsZWQgaW4gYSBzZXBhcmF0ZSBzdGVwLgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4KKwor ICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJz Y3JpYmVyPC9hcHBsaWNhdGlvbj4gc2V0cyB0aGUgcmVwbGljYXRpb24gcHJvZ3Jlc3MgdG8K KyAgICAgdGhlIGNvbnNpc3RlbnQgTFNOIHRoYXQgd2FzIG9idGFpbmVkIGluIGEgcHJldmlv dXMgc3RlcC4gV2hlbiB0aGUgdGFyZ2V0CisgICAgIHNlcnZlciBzdGFydGVkIHRoZSByZWNv dmVyeSBwcm9jZXNzLCBpdCBjYXVnaHQgdXAgdG8gdGhlIGNvbnNpc3RlbnQgTFNOLgorICAg ICBUaGlzIGlzIHRoZSBleGFjdCBMU04gdG8gYmUgdXNlZCBhcyBhIGluaXRpYWwgbG9jYXRp b24gZm9yIGVhY2gKKyAgICAgc3Vic2NyaXB0aW9uLgorICAgIDwvcGFyYT4KKyAgIDwvc3Rl cD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIEZpbmFsbHksIDxhcHBsaWNhdGlv bj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gZW5hYmxlcyB0aGUgc3Vic2Ny aXB0aW9uCisgICAgIGZvciBlYWNoIHNwZWNpZmllZCBkYXRhYmFzZSBvbiB0aGUgdGFyZ2V0 IHNlcnZlci4gVGhlIHN1YnNjcmlwdGlvbiBzdGFydHMKKyAgICAgc3RyZWFtaW5nIGZyb20g dGhlIGNvbnNpc3RlbnQgTFNOLgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4KKworICAgPHN0 ZXA+CisgICAgPHBhcmE+CisgICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVy PC9hcHBsaWNhdGlvbj4gc3RvcHMgdGhlIHRhcmdldCBzZXJ2ZXIgdG8gY2hhbmdlCisgICAg IGl0cyBzeXN0ZW0gaWRlbnRpZmllci4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisgIDwv cHJvY2VkdXJlPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5FeGFt cGxlczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUbyBjcmVhdGUgYSBsb2dpY2FsIHJlcGxp Y2EgZm9yIGRhdGFiYXNlcyA8bGl0ZXJhbD5ocjwvbGl0ZXJhbD4gYW5kCisgICA8bGl0ZXJh bD5maW5hbmNlPC9saXRlcmFsPiBmcm9tIGEgcGh5c2ljYWwgcmVwbGljYSBhdCA8bGl0ZXJh bD5mb288L2xpdGVyYWw+OgorPHNjcmVlbj4KKzxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlu cHV0PnBnX2NyZWF0ZXN1YnNjcmliZXIgLUQgL3Vzci9sb2NhbC9wZ3NxbC9kYXRhIC1QICJo b3N0PWZvbyIgLVMgImhvc3Q9bG9jYWxob3N0IiAtZCBociAtZCBmaW5hbmNlPC91c2VyaW5w dXQ+Cis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0 MT4KKyAgPHRpdGxlPlNlZSBBbHNvPC90aXRsZT4KKworICA8c2ltcGxlbGlzdCB0eXBlPSJp bmxpbmUiPgorICAgPG1lbWJlcj48eHJlZiBsaW5rZW5kPSJhcHAtcGdiYXNlYmFja3VwIi8+ PC9tZW1iZXI+CisgIDwvc2ltcGxlbGlzdD4KKyA8L3JlZnNlY3QxPgorCis8L3JlZmVudHJ5 PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZmVyZW5jZS5zZ21sCmluZGV4IGFhOTRmNmFkZjYuLmM1ZWRkMjQ0ZWYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmZXJlbmNlLnNnbWwKQEAgLTI4NSw2ICsyODUsNyBAQAogICAgJnBnQ3RsOwogICAgJnBn UmVzZXR3YWw7CiAgICAmcGdSZXdpbmQ7CisgICAmcGdDcmVhdGVTdWJzY3JpYmVyOwogICAg JnBndGVzdGZzeW5jOwogICAgJnBndGVzdHRpbWluZzsKICAgICZwZ3VwZ3JhZGU7CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvLmdpdGlnbm9yZSBiL3NyYy9iaW4vcGdf YmFzZWJhY2t1cC8uZ2l0aWdub3JlCmluZGV4IDI2MDQ4YmRiZDguLmIzYTZmNWEyZmUgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC8uZ2l0aWdub3JlCisrKyBiL3NyYy9i aW4vcGdfYmFzZWJhY2t1cC8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNiBAQAogL3BnX2Jhc2Vi YWNrdXAKIC9wZ19yZWNlaXZld2FsCiAvcGdfcmVjdmxvZ2ljYWwKKy9wZ19jcmVhdGVzdWJz Y3JpYmVyCiAKIC90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNr dXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvTWFrZWZpbGUKaW5kZXggYWJm YjY0NDBlYy4uZGVkNDM0YjY4MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3Vw L01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9NYWtlZmlsZQpAQCAtNDQs NyArNDQsNyBAQCBCQk9CSlMgPSBcCiAJYmJzdHJlYW1lcl90YXIubyBcCiAJYmJzdHJlYW1l cl96c3RkLm8KIAotYWxsOiBwZ19iYXNlYmFja3VwIHBnX3JlY2VpdmV3YWwgcGdfcmVjdmxv Z2ljYWwKK2FsbDogcGdfYmFzZWJhY2t1cCBwZ19yZWNlaXZld2FsIHBnX3JlY3Zsb2dpY2Fs IHBnX2NyZWF0ZXN1YnNjcmliZXIKIAogcGdfYmFzZWJhY2t1cDogJChCQk9CSlMpICQoT0JK UykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0 aWxzCiAJJChDQykgJChDRkxBR1MpICQoQkJPQkpTKSAkKE9CSlMpICQoTERGTEFHUykgJChM REZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQpAQCAtNTUsMTAgKzU1LDE0IEBAIHBnX3Jl Y2VpdmV3YWw6IHBnX3JlY2VpdmV3YWwubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJt YWtlLWxpYnBncG9ydCBzdWJtYWtlCiBwZ19yZWN2bG9naWNhbDogcGdfcmVjdmxvZ2ljYWwu byAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxp YnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZWN2bG9naWNhbC5vICQoT0JKUykg JChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKK3BnX2NyZWF0 ZXN1YnNjcmliZXI6ICQoV0lOMzJSRVMpIHBnX2NyZWF0ZXN1YnNjcmliZXIubyB8IHN1Ym1h a2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKEND KSAkKENGTEFHUykgJF4gJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAk KFgpCisKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycwogCSQoSU5TVEFMTF9QUk9HUkFNKSBw Z19iYXNlYmFja3VwJChYKSAnJChERVNURElSKSQoYmluZGlyKS9wZ19iYXNlYmFja3VwJChY KScKIAkkKElOU1RBTExfUFJPR1JBTSkgcGdfcmVjZWl2ZXdhbCQoWCkgJyQoREVTVERJUikk KGJpbmRpcikvcGdfcmVjZWl2ZXdhbCQoWCknCiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX3Jl Y3Zsb2dpY2FsJChYKSAnJChERVNURElSKSQoYmluZGlyKS9wZ19yZWN2bG9naWNhbCQoWCkn CisJJChJTlNUQUxMX1BST0dSQU0pIHBnX2NyZWF0ZXN1YnNjcmliZXIkKFgpICckKERFU1RE SVIpJChiaW5kaXIpL3BnX2NyZWF0ZXN1YnNjcmliZXIkKFgpJwogCiBpbnN0YWxsZGlyczoK IAkkKE1LRElSX1ApICckKERFU1RESVIpJChiaW5kaXIpJwpAQCAtNjcsMTAgKzcxLDEyIEBA IHVuaW5zdGFsbDoKIAlybSAtZiAnJChERVNURElSKSQoYmluZGlyKS9wZ19iYXNlYmFja3Vw JChYKScKIAlybSAtZiAnJChERVNURElSKSQoYmluZGlyKS9wZ19yZWNlaXZld2FsJChYKScK IAlybSAtZiAnJChERVNURElSKSQoYmluZGlyKS9wZ19yZWN2bG9naWNhbCQoWCknCisJcm0g LWYgJyQoREVTVERJUikkKGJpbmRpcikvcGdfY3JlYXRlc3Vic2NyaWJlciQoWCknCiAKIGNs ZWFuIGRpc3RjbGVhbjoKIAlybSAtZiBwZ19iYXNlYmFja3VwJChYKSBwZ19yZWNlaXZld2Fs JChYKSBwZ19yZWN2bG9naWNhbCQoWCkgXAogCQkkKEJCT0JKUykgcGdfcmVjZWl2ZXdhbC5v IHBnX3JlY3Zsb2dpY2FsLm8gXAorCQlwZ19jcmVhdGVzdWJzY3JpYmVyJChYKSBwZ19jcmVh dGVzdWJzY3JpYmVyLm8gXAogCQkkKE9CSlMpCiAJcm0gLXJmIHRtcF9jaGVjawogCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3Bn X2Jhc2ViYWNrdXAvbWVzb24uYnVpbGQKaW5kZXggZjdlNjBlNjY3MC4uMzQ1YTJkNmZjZCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9iaW4vcGdfYmFzZWJhY2t1cC9tZXNvbi5idWlsZApAQCAtNzUsNiArNzUsMjMgQEAgcGdf cmVjdmxvZ2ljYWwgPSBleGVjdXRhYmxlKCdwZ19yZWN2bG9naWNhbCcsCiApCiBiaW5fdGFy Z2V0cyArPSBwZ19yZWN2bG9naWNhbAogCitwZ19jcmVhdGVzdWJzY3JpYmVyX3NvdXJjZXMg PSBmaWxlcygKKyAgJ3BnX2NyZWF0ZXN1YnNjcmliZXIuYycKKykKKworaWYgaG9zdF9zeXN0 ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX2NyZWF0ZXN1YnNjcmliZXJfc291cmNlcyArPSByY19i aW5fZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKwknLS1OQU1FJywg J3BnX2NyZWF0ZXN1YnNjcmliZXInLAorCSctLUZJTEVERVNDJywgJ3BnX2NyZWF0ZXN1YnNj cmliZXIgLSBjcmVhdGUgYSBuZXcgbG9naWNhbCByZXBsaWNhIGZyb20gYSBzdGFuZGJ5IHNl cnZlcicsXSkKK2VuZGlmCisKK3BnX2NyZWF0ZXN1YnNjcmliZXIgPSBleGVjdXRhYmxlKCdw Z19jcmVhdGVzdWJzY3JpYmVyJywKKyAgcGdfY3JlYXRlc3Vic2NyaWJlcl9zb3VyY2VzLAor ICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcV0sCisgIGt3YXJnczogZGVm YXVsdF9iaW5fYXJncywKKykKK2Jpbl90YXJnZXRzICs9IHBnX2NyZWF0ZXN1YnNjcmliZXIK KwogdGVzdHMgKz0gewogICAnbmFtZSc6ICdwZ19iYXNlYmFja3VwJywKICAgJ3NkJzogbWVz b24uY3VycmVudF9zb3VyY2VfZGlyKCksCkBAIC04OSw2ICsxMDYsOCBAQCB0ZXN0cyArPSB7 CiAgICAgICAndC8wMTFfaW5fcGxhY2VfdGFibGVzcGFjZS5wbCcsCiAgICAgICAndC8wMjBf cGdfcmVjZWl2ZXdhbC5wbCcsCiAgICAgICAndC8wMzBfcGdfcmVjdmxvZ2ljYWwucGwnLAor ICAgICAgJ3QvMDQwX3BnX2NyZWF0ZXN1YnNjcmliZXIucGwnLAorICAgICAgJ3QvMDQxX3Bn X2NyZWF0ZXN1YnNjcmliZXJfc3RhbmRieS5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMgYi9z cmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjI4YTgyOTAyYjMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jCkBAIC0w LDAgKzEsMTg3NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfY3JlYXRl c3Vic2NyaWJlci5jCisgKgkgIENyZWF0ZSBhIG5ldyBsb2dpY2FsIHJlcGxpY2EgZnJvbSBh IHN0YW5kYnkgc2VydmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDI0LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJ c3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2lu Y2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lz L3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKwor I2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0 aGlkX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJj b21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGlscy5o IgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vZmls ZV91dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCisjaW5jbHVkZSAiY29t bW9uL3Jlc3RyaWN0ZWRfdG9rZW4uaCIKKyNpbmNsdWRlICJmZV91dGlscy9yZWNvdmVyeV9n ZW4uaCIKKyNpbmNsdWRlICJmZV91dGlscy9zaW1wbGVfbGlzdC5oIgorI2luY2x1ZGUgImdl dG9wdF9sb25nLmgiCisjaW5jbHVkZSAidXRpbHMvcGlkZmlsZS5oIgorCisjZGVmaW5lCVBH U19PVVRQVVRfRElSCSJwZ19jcmVhdGVzdWJzY3JpYmVyX291dHB1dC5kIgorCisvKiBDb21t YW5kLWxpbmUgb3B0aW9ucyAqLwordHlwZWRlZiBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9w dGlvbnMKK3sKKwljaGFyCSAgICpzdWJzY3JpYmVyX2RpcjsJCQkvKiBzdGFuZGJ5L3N1YnNj cmliZXIgZGF0YSBkaXJlY3RvcnkgKi8KKwljaGFyCSAgICpwdWJfY29ubmluZm9fc3RyOwkJ LyogcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nICovCisJY2hhcgkgICAqc3ViX2Nvbm5p bmZvX3N0cjsJCS8qIHN1YnNjcmliZXIgY29ubmVjdGlvbiBzdHJpbmcgKi8KKwlTaW1wbGVT dHJpbmdMaXN0IGRhdGFiYXNlX25hbWVzOwkvKiBsaXN0IG9mIGRhdGFiYXNlIG5hbWVzICov CisJYm9vbAkJcmV0YWluOwkJCQkJLyogcmV0YWluIGxvZyBmaWxlPyAqLworCWludAkJCXJl Y292ZXJ5X3RpbWVvdXQ7CQkvKiBzdG9wIHJlY292ZXJ5IGFmdGVyIHRoaXMgdGltZSAqLwor fSBDcmVhdGVTdWJzY3JpYmVyT3B0aW9uczsKKwordHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJl cEluZm8KK3sKKwlPaWQJCQlvaWQ7CQkJLyogZGF0YWJhc2UgT0lEICovCisJY2hhcgkgICAq ZGJuYW1lOwkJCS8qIGRhdGFiYXNlIG5hbWUgKi8KKwljaGFyCSAgICpwdWJjb25uaW5mbzsJ LyogcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nICovCisJY2hhcgkgICAqc3ViY29ubmlu Zm87CS8qIHN1YnNjcmliZXIgY29ubmVjdGlvbiBzdHJpbmcgKi8KKwljaGFyCSAgICpwdWJu YW1lOwkJLyogcHVibGljYXRpb24gbmFtZSAqLworCWNoYXIJICAgKnN1Ym5hbWU7CQkvKiBz dWJzY3JpcHRpb24gbmFtZSAoYWxzbyByZXBsaWNhdGlvbiBzbG90CisJCQkJCQkJCSAqIG5h bWUpICovCisKKwlib29sCQltYWRlX3JlcGxzbG90OwkvKiByZXBsaWNhdGlvbiBzbG90IHdh cyBjcmVhdGVkICovCisJYm9vbAkJbWFkZV9wdWJsaWNhdGlvbjsJLyogcHVibGljYXRpb24g d2FzIGNyZWF0ZWQgKi8KKwlib29sCQltYWRlX3N1YnNjcmlwdGlvbjsJLyogc3Vic2NyaXB0 aW9uIHdhcyBjcmVhdGVkICovCit9IExvZ2ljYWxSZXBJbmZvOworCitzdGF0aWMgdm9pZCBj bGVhbnVwX29iamVjdHNfYXRleGl0KHZvaWQpOworc3RhdGljIHZvaWQgdXNhZ2UoKTsKK3N0 YXRpYyBjaGFyICpnZXRfYmFzZV9jb25uaW5mbyhjaGFyICpjb25uaW5mbywgY2hhciAqZGJu YW1lLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm5vZGVyb2xlKTsKK3N0YXRpYyBib29sIGdl dF9leGVjX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CitzdGF0aWMgYm9vbCBjaGVja19kYXRh X2RpcmVjdG9yeShjb25zdCBjaGFyICpkYXRhZGlyKTsKK3N0YXRpYyBjaGFyICpjb25jYXRf Y29ubmluZm9fZGJuYW1lKGNvbnN0IGNoYXIgKmNvbm5pbmZvLCBjb25zdCBjaGFyICpkYm5h bWUpOworc3RhdGljIExvZ2ljYWxSZXBJbmZvICpzdG9yZV9wdWJfc3ViX2luZm8oU2ltcGxl U3RyaW5nTGlzdCBkYm5hbWVzLCBjb25zdCBjaGFyICpwdWJfYmFzZV9jb25uaW5mbywgY29u c3QgY2hhciAqc3ViX2Jhc2VfY29ubmluZm8pOworc3RhdGljIFBHY29ubiAqY29ubmVjdF9k YXRhYmFzZShjb25zdCBjaGFyICpjb25uaW5mbyk7CitzdGF0aWMgdm9pZCBkaXNjb25uZWN0 X2RhdGFiYXNlKFBHY29ubiAqY29ubik7CitzdGF0aWMgdWludDY0IGdldF9wcmltYXJ5X3N5 c2lkKGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKK3N0YXRpYyB1aW50NjQgZ2V0X3N0YW5kYnlf c3lzaWQoY29uc3QgY2hhciAqZGF0YWRpcik7CitzdGF0aWMgdm9pZCBtb2RpZnlfc3Vic2Ny aWJlcl9zeXNpZChjb25zdCBjaGFyICpwZ19yZXNldHdhbF9wYXRoLCBDcmVhdGVTdWJzY3Jp YmVyT3B0aW9ucyBvcHQpOworc3RhdGljIGJvb2wgY2hlY2tfcHVibGlzaGVyKExvZ2ljYWxS ZXBJbmZvICpkYmluZm8pOworc3RhdGljIGJvb2wgc2V0dXBfcHVibGlzaGVyKExvZ2ljYWxS ZXBJbmZvICpkYmluZm8pOworc3RhdGljIGJvb2wgY2hlY2tfc3Vic2NyaWJlcihMb2dpY2Fs UmVwSW5mbyAqZGJpbmZvKTsKK3N0YXRpYyBib29sIHNldHVwX3N1YnNjcmliZXIoTG9naWNh bFJlcEluZm8gKmRiaW5mbywgY29uc3QgY2hhciAqY29uc2lzdGVudF9sc24pOworc3RhdGlj IGNoYXIgKmNyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoUEdjb25uICpjb25uLCBM b2dpY2FsUmVwSW5mbyAqZGJpbmZvLAorCQkJCQkJCQkJCQkgY2hhciAqc2xvdF9uYW1lKTsK K3N0YXRpYyB2b2lkIGRyb3BfcmVwbGljYXRpb25fc2xvdChQR2Nvbm4gKmNvbm4sIExvZ2lj YWxSZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKnNsb3RfbmFtZSk7CitzdGF0aWMgY2hh ciAqc2V0dXBfc2VydmVyX2xvZ2ZpbGUoY29uc3QgY2hhciAqZGF0YWRpcik7CitzdGF0aWMg dm9pZCBzdGFydF9zdGFuZGJ5X3NlcnZlcihjb25zdCBjaGFyICpwZ19jdGxfcGF0aCwgY29u c3QgY2hhciAqZGF0YWRpciwgY29uc3QgY2hhciAqbG9nZmlsZSk7CitzdGF0aWMgdm9pZCBz dG9wX3N0YW5kYnlfc2VydmVyKGNvbnN0IGNoYXIgKnBnX2N0bF9wYXRoLCBjb25zdCBjaGFy ICpkYXRhZGlyKTsKK3N0YXRpYyB2b2lkIHBnX2N0bF9zdGF0dXMoY29uc3QgY2hhciAqcGdf Y3RsX2NtZCwgaW50IHJjLCBpbnQgYWN0aW9uKTsKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2Vu ZF9yZWNvdmVyeShjb25zdCBjaGFyICpjb25uaW5mbywgQ3JlYXRlU3Vic2NyaWJlck9wdGlv bnMgb3B0KTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4s IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworc3RhdGljIHZvaWQgZHJvcF9wdWJsaWNhdGlv bihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworc3RhdGljIHZvaWQg Y3JlYXRlX3N1YnNjcmlwdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmlu Zm8pOworc3RhdGljIHZvaWQgZHJvcF9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dp Y2FsUmVwSW5mbyAqZGJpbmZvKTsKK3N0YXRpYyB2b2lkIHNldF9yZXBsaWNhdGlvbl9wcm9n cmVzcyhQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIg Kmxzbik7CitzdGF0aWMgdm9pZCBlbmFibGVfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwg TG9naWNhbFJlcEluZm8gKmRiaW5mbyk7CisKKyNkZWZpbmUJVVNFQ19QRVJfU0VDCTEwMDAw MDAKKyNkZWZpbmUJV0FJVF9JTlRFUlZBTAkxCQkvKiAxIHNlY29uZCAqLworCisvKiBPcHRp b25zICovCitzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7CisKK3N0YXRpYyBjaGFyICpw cmltYXJ5X3Nsb3RfbmFtZSA9IE5VTEw7CitzdGF0aWMgYm9vbCBkcnlfcnVuID0gZmFsc2U7 CisKK3N0YXRpYyBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworc3RhdGljIGNoYXIgKnBnX2N0 bF9wYXRoID0gTlVMTDsKK3N0YXRpYyBjaGFyICpwZ19yZXNldHdhbF9wYXRoID0gTlVMTDsK Kworc3RhdGljIExvZ2ljYWxSZXBJbmZvICpkYmluZm87CitzdGF0aWMgaW50CW51bV9kYnMg PSAwOworCitlbnVtIFdhaXRQTVJlc3VsdAoreworCVBPU1RNQVNURVJfUkVBRFksCisJUE9T VE1BU1RFUl9TVEFOREJZLAorCVBPU1RNQVNURVJfU1RJTExfU1RBUlRJTkcsCisJUE9TVE1B U1RFUl9GQUlMRUQKK307CisKKworLyoKKyAqIENsZWFudXAgb2JqZWN0cyB0aGF0IHdlcmUg Y3JlYXRlZCBieSBwZ19jcmVhdGVzdWJzY3JpYmVyIGlmIHRoZXJlIGlzIGFuIGVycm9yLgor ICoKKyAqIFJlcGxpY2F0aW9uIHNsb3RzLCBwdWJsaWNhdGlvbnMgYW5kIHN1YnNjcmlwdGlv bnMgYXJlIGNyZWF0ZWQuIERlcGVuZGluZyBvbgorICogdGhlIHN0ZXAgaXQgZmFpbGVkLCBp dCBzaG91bGQgcmVtb3ZlIHRoZSBhbHJlYWR5IGNyZWF0ZWQgb2JqZWN0cyBpZiBpdCBpcwor ICogcG9zc2libGUgKHNvbWV0aW1lcyBpdCB3b24ndCB3b3JrIGR1ZSB0byBhIGNvbm5lY3Rp b24gaXNzdWUpLgorICovCitzdGF0aWMgdm9pZAorY2xlYW51cF9vYmplY3RzX2F0ZXhpdCh2 b2lkKQoreworCVBHY29ubgkgICAqY29ubjsKKwlpbnQJCQlpOworCisJaWYgKHN1Y2Nlc3Mp CisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZGJzOyBpKyspCisJeworCQlp ZiAoZGJpbmZvW2ldLm1hZGVfc3Vic2NyaXB0aW9uKQorCQl7CisJCQljb25uID0gY29ubmVj dF9kYXRhYmFzZShkYmluZm9baV0uc3ViY29ubmluZm8pOworCQkJaWYgKGNvbm4gIT0gTlVM TCkKKwkJCXsKKwkJCQlkcm9wX3N1YnNjcmlwdGlvbihjb25uLCAmZGJpbmZvW2ldKTsKKwkJ CQlpZiAoZGJpbmZvW2ldLm1hZGVfcHVibGljYXRpb24pCisJCQkJCWRyb3BfcHVibGljYXRp b24oY29ubiwgJmRiaW5mb1tpXSk7CisJCQkJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsK KwkJCX0KKwkJfQorCisJCWlmIChkYmluZm9baV0ubWFkZV9wdWJsaWNhdGlvbiB8fCBkYmlu Zm9baV0ubWFkZV9yZXBsc2xvdCkKKwkJeworCQkJY29ubiA9IGNvbm5lY3RfZGF0YWJhc2Uo ZGJpbmZvW2ldLnB1YmNvbm5pbmZvKTsKKwkJCWlmIChjb25uICE9IE5VTEwpCisJCQl7CisJ CQkJaWYgKGRiaW5mb1tpXS5tYWRlX3B1YmxpY2F0aW9uKQorCQkJCQlkcm9wX3B1YmxpY2F0 aW9uKGNvbm4sICZkYmluZm9baV0pOworCQkJCWlmIChkYmluZm9baV0ubWFkZV9yZXBsc2xv dCkKKwkJCQkJZHJvcF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9baV0sIGRiaW5m b1tpXS5zdWJuYW1lKTsKKwkJCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCQkJfQor CQl9CisJfQorfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKwlwcmludGYoXygi JXMgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIHJlcGxpY2EgZnJvbSBhIHN0YW5kYnkgc2VydmVy LlxuXG4iKSwKKwkJICAgcHJvZ25hbWUpOworCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKKwlw cmludGYoXygiICAlcyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygi XG5PcHRpb25zOlxuIikpOworCXByaW50ZihfKCIgLUQsIC0tcGdkYXRhPURBVEFESVIgICAg ICAgICAgICAgICAgbG9jYXRpb24gZm9yIHRoZSBzdWJzY3JpYmVyIGRhdGEgZGlyZWN0b3J5 XG4iKSk7CisJcHJpbnRmKF8oIiAtUCwgLS1wdWJsaXNoZXItc2VydmVyPUNPTk5TVFIgICAg ICBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmdcbiIpKTsKKwlwcmludGYoXygiIC1TLCAt LXN1YnNjcmliZXItc2VydmVyPUNPTk5TVFIgICAgIHN1YnNjcmliZXIgY29ubmVjdGlvbiBz dHJpbmdcbiIpKTsKKwlwcmludGYoXygiIC1kLCAtLWRhdGFiYXNlPURCTkFNRSAgICAgICAg ICAgICAgIGRhdGFiYXNlIHRvIGNyZWF0ZSBhIHN1YnNjcmlwdGlvblxuIikpOworCXByaW50 ZihfKCIgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgICAgICAgICAgICAgc3RvcCBiZWZvcmUg bW9kaWZ5aW5nIGFueXRoaW5nXG4iKSk7CisJcHJpbnRmKF8oIiAtdCwgLS1yZWNvdmVyeS10 aW1lb3V0PVNFQ1MgICAgICAgICBzZWNvbmRzIHRvIHdhaXQgZm9yIHJlY292ZXJ5IHRvIGVu ZFxuIikpOworCXByaW50ZihfKCIgLXIsIC0tcmV0YWluICAgICAgICAgICAgICAgICAgICAg ICAgcmV0YWluIGxvZyBmaWxlIGFmdGVyIHN1Y2Nlc3NcbiIpKTsKKwlwcmludGYoXygiIC12 LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCB2ZXJib3NlIG1lc3Nh Z2VzXG4iKSk7CisJcHJpbnRmKF8oIiAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgICAg ICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CisJcHJp bnRmKF8oIiAtPywgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93IHRoaXMg aGVscCwgdGhlbiBleGl0XG4iKSk7CisJcHJpbnRmKF8oIlxuUmVwb3J0IGJ1Z3MgdG8gPCVz Pi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CisJcHJpbnRmKF8oIiVzIGhvbWUgcGFnZTog PCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOworfQorCisvKgorICogVmFs aWRhdGUgYSBjb25uZWN0aW9uIHN0cmluZy4gUmV0dXJucyBhIGJhc2UgY29ubmVjdGlvbiBz dHJpbmcgdGhhdCBpcyBhCisgKiBjb25uZWN0aW9uIHN0cmluZyB3aXRob3V0IGEgZGF0YWJh c2UgbmFtZS4KKyAqIFNpbmNlIHdlIG1pZ2h0IHByb2Nlc3MgbXVsdGlwbGUgZGF0YWJhc2Vz LCBlYWNoIGRhdGFiYXNlIG5hbWUgd2lsbCBiZQorICogYXBwZW5kZWQgdG8gdGhpcyBiYXNl IGNvbm5lY3Rpb24gc3RyaW5nIHRvIHByb3ZpZGUgYSBmaW5hbCBjb25uZWN0aW9uIHN0cmlu Zy4KKyAqIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgKGRibmFtZSkgaXMgbm90IG51bGwsIHJl dHVybnMgZGJuYW1lIGlmIHRoZSBwcm92aWRlZAorICogY29ubmVjdGlvbiBzdHJpbmcgY29u dGFpbnMgaXQuIElmIG9wdGlvbiAtLWRhdGFiYXNlIGlzIG5vdCBwcm92aWRlZCwgdXNlcwor ICogZGJuYW1lIGFzIHRoZSBvbmx5IGRhdGFiYXNlIHRvIHNldHVwIHRoZSBsb2dpY2FsIHJl cGxpY2EuCisgKiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0 aGUgcmV0dXJuZWQgY29ubmVjdGlvbiBzdHJpbmcgYW5kCisgKiBkYm5hbWUuCisgKi8KK3N0 YXRpYyBjaGFyICoKK2dldF9iYXNlX2Nvbm5pbmZvKGNoYXIgKmNvbm5pbmZvLCBjaGFyICpk Ym5hbWUsIGNvbnN0IGNoYXIgKm5vZGVyb2xlKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVM TDsKKwlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29wdDsKKwljaGFyCSAgICplcnJtc2cgPSBO VUxMOworCWNoYXIJICAgKnJldDsKKwlpbnQJCQlpOworCisJcGdfbG9nX2luZm8oInZhbGlk YXRpbmcgY29ubmVjdGlvbiBzdHJpbmcgb24gJXMiLCBub2Rlcm9sZSk7CisKKwljb25uX29w dHMgPSBQUWNvbm5pbmZvUGFyc2UoY29ubmluZm8sICZlcnJtc2cpOworCWlmIChjb25uX29w dHMgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IHBhcnNlIGNvbm5l Y3Rpb24gc3RyaW5nOiAlcyIsIGVycm1zZyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWkg PSAwOworCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9 IE5VTEw7IGNvbm5fb3B0KyspCisJeworCQlpZiAoc3RyY21wKGNvbm5fb3B0LT5rZXl3b3Jk LCAiZGJuYW1lIikgPT0gMCAmJiBjb25uX29wdC0+dmFsICE9IE5VTEwpCisJCXsKKwkJCWlm IChkYm5hbWUpCisJCQkJZGJuYW1lID0gcGdfc3RyZHVwKGNvbm5fb3B0LT52YWwpOworCQkJ Y29udGludWU7CisJCX0KKworCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5f b3B0LT52YWxbMF0gIT0gJ1wwJykKKwkJeworCQkJaWYgKGkgPiAwKQorCQkJCWFwcGVuZFBR RXhwQnVmZmVyQ2hhcihidWYsICcgJyk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIl cz0lcyIsIGNvbm5fb3B0LT5rZXl3b3JkLCBjb25uX29wdC0+dmFsKTsKKwkJCWkrKzsKKwkJ fQorCX0KKworCXJldCA9IHBnX3N0cmR1cChidWYtPmRhdGEpOworCisJZGVzdHJveVBRRXhw QnVmZmVyKGJ1Zik7CisJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBHZXQgdGhlIGFic29sdXRlIHBhdGggZnJvbSBvdGhlciBQb3N0 Z3JlU1FMIGJpbmFyaWVzIChwZ19jdGwgYW5kCisgKiBwZ19yZXNldHdhbCkgdGhhdCBpcyB1 c2VkIGJ5IGl0LgorICovCitzdGF0aWMgYm9vbAorZ2V0X2V4ZWNfcGF0aChjb25zdCBjaGFy ICpwYXRoKQoreworCWludAkJCXJjOworCisJcGdfY3RsX3BhdGggPSBwZ19tYWxsb2MoTUFY UEdQQVRIKTsKKwlyYyA9IGZpbmRfb3RoZXJfZXhlYyhwYXRoLCAicGdfY3RsIiwKKwkJCQkJ CSAicGdfY3RsIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJT04gIlxuIiwKKwkJCQkJCSBwZ19j dGxfcGF0aCk7CisJaWYgKHJjIDwgMCkKKwl7CisJCWNoYXIJCWZ1bGxfcGF0aFtNQVhQR1BB VEhdOworCisJCWlmIChmaW5kX215X2V4ZWMocGF0aCwgZnVsbF9wYXRoKSA8IDApCisJCQlz dHJsY3B5KGZ1bGxfcGF0aCwgcHJvZ25hbWUsIHNpemVvZihmdWxsX3BhdGgpKTsKKwkJaWYg KHJjID09IC0xKQorCQkJcGdfbG9nX2Vycm9yKCJUaGUgcHJvZ3JhbSBcIiVzXCIgaXMgbmVl ZGVkIGJ5ICVzIGJ1dCB3YXMgbm90IGZvdW5kIGluIHRoZVxuIgorCQkJCQkJICJzYW1lIGRp cmVjdG9yeSBhcyBcIiVzXCIuXG4iCisJCQkJCQkgIkNoZWNrIHlvdXIgaW5zdGFsbGF0aW9u LiIsCisJCQkJCQkgInBnX2N0bCIsIHByb2duYW1lLCBmdWxsX3BhdGgpOworCQllbHNlCisJ CQlwZ19sb2dfZXJyb3IoIlRoZSBwcm9ncmFtIFwiJXNcIiB3YXMgZm91bmQgYnkgXCIlc1wi XG4iCisJCQkJCQkgImJ1dCB3YXMgbm90IHRoZSBzYW1lIHZlcnNpb24gYXMgJXMuXG4iCisJ CQkJCQkgIkNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLiIsCisJCQkJCQkgInBnX2N0bCIsIGZ1 bGxfcGF0aCwgcHJvZ25hbWUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcGdfbG9nX2Rl YnVnKCJwZ19jdGwgcGF0aCBpczogJXMiLCBwZ19jdGxfcGF0aCk7CisKKwlwZ19yZXNldHdh bF9wYXRoID0gcGdfbWFsbG9jKE1BWFBHUEFUSCk7CisJcmMgPSBmaW5kX290aGVyX2V4ZWMo cGF0aCwgInBnX3Jlc2V0d2FsIiwKKwkJCQkJCSAicGdfcmVzZXR3YWwgKFBvc3RncmVTUUwp ICIgUEdfVkVSU0lPTiAiXG4iLAorCQkJCQkJIHBnX3Jlc2V0d2FsX3BhdGgpOworCWlmIChy YyA8IDApCisJeworCQljaGFyCQlmdWxsX3BhdGhbTUFYUEdQQVRIXTsKKworCQlpZiAoZmlu ZF9teV9leGVjKHBhdGgsIGZ1bGxfcGF0aCkgPCAwKQorCQkJc3RybGNweShmdWxsX3BhdGgs IHByb2duYW1lLCBzaXplb2YoZnVsbF9wYXRoKSk7CisJCWlmIChyYyA9PSAtMSkKKwkJCXBn X2xvZ19lcnJvcigiVGhlIHByb2dyYW0gXCIlc1wiIGlzIG5lZWRlZCBieSAlcyBidXQgd2Fz IG5vdCBmb3VuZCBpbiB0aGVcbiIKKwkJCQkJCSAic2FtZSBkaXJlY3RvcnkgYXMgXCIlc1wi LlxuIgorCQkJCQkJICJDaGVjayB5b3VyIGluc3RhbGxhdGlvbi4iLAorCQkJCQkJICJwZ19y ZXNldHdhbCIsIHByb2duYW1lLCBmdWxsX3BhdGgpOworCQllbHNlCisJCQlwZ19sb2dfZXJy b3IoIlRoZSBwcm9ncmFtIFwiJXNcIiB3YXMgZm91bmQgYnkgXCIlc1wiXG4iCisJCQkJCQkg ImJ1dCB3YXMgbm90IHRoZSBzYW1lIHZlcnNpb24gYXMgJXMuXG4iCisJCQkJCQkgIkNoZWNr IHlvdXIgaW5zdGFsbGF0aW9uLiIsCisJCQkJCQkgInBnX3Jlc2V0d2FsIiwgZnVsbF9wYXRo LCBwcm9nbmFtZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwZ19sb2dfZGVidWcoInBn X3Jlc2V0d2FsIHBhdGggaXM6ICVzIiwgcGdfcmVzZXR3YWxfcGF0aCk7CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworLyoKKyAqIElzIGl0IGEgY2x1c3RlciBkaXJlY3Rvcnk/IFRoZXNlIGFy ZSBwcmVsaW1pbmFyeSBjaGVja3MuIEl0IGlzIGZhciBmcm9tCisgKiBtYWtpbmcgYW4gYWNj dXJhdGUgY2hlY2suIElmIGl0IGlzIG5vdCBhIGNsb25lIGZyb20gdGhlIHB1Ymxpc2hlciwg aXQgd2lsbAorICogZXZlbnR1YWxseSBmYWlsIGluIGEgZnV0dXJlIHN0ZXAuCisgKi8KK3N0 YXRpYyBib29sCitjaGVja19kYXRhX2RpcmVjdG9yeShjb25zdCBjaGFyICpkYXRhZGlyKQor eworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJY2hhcgkJdmVyc2lvbmZpbGVbTUFYUEdQQVRI XTsKKworCXBnX2xvZ19pbmZvKCJjaGVja2luZyBpZiBkaXJlY3RvcnkgXCIlc1wiIGlzIGEg Y2x1c3RlciBkYXRhIGRpcmVjdG9yeSIsCisJCQkJZGF0YWRpcik7CisKKwlpZiAoc3RhdChk YXRhZGlyLCAmc3RhdGJ1ZikgIT0gMCkKKwl7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJ CQlwZ19sb2dfZXJyb3IoImRhdGEgZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBleGlzdCIs IGRhdGFkaXIpOworCQllbHNlCisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBhY2Nlc3Mg ZGlyZWN0b3J5IFwiJXNcIjogJXMiLCBkYXRhZGlyLCBzdHJlcnJvcihlcnJubykpOworCisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwlzbnByaW50Zih2ZXJzaW9uZmlsZSwgTUFYUEdQQVRI LCAiJXMvUEdfVkVSU0lPTiIsIGRhdGFkaXIpOworCWlmIChzdGF0KHZlcnNpb25maWxlLCAm c3RhdGJ1ZikgIT0gMCAmJiBlcnJubyA9PSBFTk9FTlQpCisJeworCQlwZ19sb2dfZXJyb3Io ImRpcmVjdG9yeSBcIiVzXCIgaXMgbm90IGEgZGF0YWJhc2UgY2x1c3RlciBkaXJlY3Rvcnki LCBkYXRhZGlyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQor CisvKgorICogQXBwZW5kIGRhdGFiYXNlIG5hbWUgaW50byBhIGJhc2UgY29ubmVjdGlvbiBz dHJpbmcuCisgKgorICogZGJuYW1lIGlzIHRoZSBvbmx5IHBhcmFtZXRlciB0aGF0IGNoYW5n ZXMgc28gaXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBiYXNlCisgKiBjb25uZWN0aW9uIHN0 cmluZy4gVGhpcyBmdW5jdGlvbiBjb25jYXRlbmF0ZXMgZGJuYW1lIHRvIGJ1aWxkIGEgInJl YWwiCisgKiBjb25uZWN0aW9uIHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorY29uY2F0 X2Nvbm5pbmZvX2RibmFtZShjb25zdCBjaGFyICpjb25uaW5mbywgY29uc3QgY2hhciAqZGJu YW1lKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJY2hh cgkgICAqcmV0OworCisJQXNzZXJ0KGNvbm5pbmZvICE9IE5VTEwpOworCisJYXBwZW5kUFFF eHBCdWZmZXJTdHIoYnVmLCBjb25uaW5mbyk7CisJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAi IGRibmFtZT0lcyIsIGRibmFtZSk7CisKKwlyZXQgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsK KwlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBTdG9yZSBwdWJsaWNhdGlvbiBhbmQgc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uLgorICov CitzdGF0aWMgTG9naWNhbFJlcEluZm8gKgorc3RvcmVfcHViX3N1Yl9pbmZvKFNpbXBsZVN0 cmluZ0xpc3QgZGJuYW1lcywgY29uc3QgY2hhciAqcHViX2Jhc2VfY29ubmluZm8sIGNvbnN0 IGNoYXIgKnN1Yl9iYXNlX2Nvbm5pbmZvKQoreworCUxvZ2ljYWxSZXBJbmZvICpkYmluZm87 CisJU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGw7CisJaW50CQkJaSA9IDA7CisKKwlkYmlu Zm8gPSAoTG9naWNhbFJlcEluZm8gKikgcGdfbWFsbG9jKG51bV9kYnMgKiBzaXplb2YoTG9n aWNhbFJlcEluZm8pKTsKKworCWZvciAoY2VsbCA9IGRibmFtZXMuaGVhZDsgY2VsbDsgY2Vs bCA9IGNlbGwtPm5leHQpCisJeworCQljaGFyCSAgICpjb25uaW5mbzsKKworCQkvKiBQdWJs aXNoZXIuICovCisJCWNvbm5pbmZvID0gY29uY2F0X2Nvbm5pbmZvX2RibmFtZShwdWJfYmFz ZV9jb25uaW5mbywgY2VsbC0+dmFsKTsKKwkJZGJpbmZvW2ldLnB1YmNvbm5pbmZvID0gY29u bmluZm87CisJCWRiaW5mb1tpXS5kYm5hbWUgPSBjZWxsLT52YWw7CisJCWRiaW5mb1tpXS5t YWRlX3JlcGxzbG90ID0gZmFsc2U7CisJCWRiaW5mb1tpXS5tYWRlX3B1YmxpY2F0aW9uID0g ZmFsc2U7CisJCWRiaW5mb1tpXS5tYWRlX3N1YnNjcmlwdGlvbiA9IGZhbHNlOworCQkvKiBv dGhlciBzdHJ1Y3QgZmllbGRzIHdpbGwgYmUgZmlsbGVkIGxhdGVyLiAqLworCisJCS8qIFN1 YnNjcmliZXIuICovCisJCWNvbm5pbmZvID0gY29uY2F0X2Nvbm5pbmZvX2RibmFtZShzdWJf YmFzZV9jb25uaW5mbywgY2VsbC0+dmFsKTsKKwkJZGJpbmZvW2ldLnN1YmNvbm5pbmZvID0g Y29ubmluZm87CisKKwkJaSsrOworCX0KKworCXJldHVybiBkYmluZm87Cit9CisKK3N0YXRp YyBQR2Nvbm4gKgorY29ubmVjdF9kYXRhYmFzZShjb25zdCBjaGFyICpjb25uaW5mbykKK3sK KwlQR2Nvbm4JICAgKmNvbm47CisJUEdyZXN1bHQgICAqcmVzOworCisJY29ubiA9IFBRY29u bmVjdGRiKGNvbm5pbmZvKTsKKwlpZiAoUFFzdGF0dXMoY29ubikgIT0gQ09OTkVDVElPTl9P SykKKwl7CisJCXBnX2xvZ19lcnJvcigiY29ubmVjdGlvbiB0byBkYXRhYmFzZSBmYWlsZWQ6 ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkv KiBzZWN1cmUgc2VhcmNoX3BhdGggKi8KKwlyZXMgPSBQUWV4ZWMoY29ubiwgQUxXQVlTX1NF Q1VSRV9TRUFSQ0hfUEFUSF9TUUwpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBH UkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNsZWFyIHNl YXJjaF9wYXRoOiAlcyIsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQlyZXR1cm4g TlVMTDsKKwl9CisJUFFjbGVhcihyZXMpOworCisJcmV0dXJuIGNvbm47Cit9CisKK3N0YXRp YyB2b2lkCitkaXNjb25uZWN0X2RhdGFiYXNlKFBHY29ubiAqY29ubikKK3sKKwlBc3NlcnQo Y29ubiAhPSBOVUxMKTsKKworCVBRZmluaXNoKGNvbm4pOworfQorCisvKgorICogT2J0YWlu IHRoZSBzeXN0ZW0gaWRlbnRpZmllciB1c2luZyB0aGUgcHJvdmlkZWQgY29ubmVjdGlvbi4g SXQgd2lsbCBiZSB1c2VkCisgKiB0byBjb21wYXJlIGlmIGEgZGF0YSBkaXJlY3RvcnkgaXMg YSBjbG9uZSBvZiBhbm90aGVyIG9uZS4KKyAqLworc3RhdGljIHVpbnQ2NAorZ2V0X3ByaW1h cnlfc3lzaWQoY29uc3QgY2hhciAqY29ubmluZm8pCit7CisJUEdjb25uCSAgICpjb25uOwor CVBHcmVzdWx0ICAgKnJlczsKKwl1aW50NjQJCXN5c2lkOworCisJcGdfbG9nX2luZm8oImdl dHRpbmcgc3lzdGVtIGlkZW50aWZpZXIgZnJvbSBwdWJsaXNoZXIiKTsKKworCWNvbm4gPSBj b25uZWN0X2RhdGFiYXNlKGNvbm5pbmZvKTsKKwlpZiAoY29ubiA9PSBOVUxMKQorCQlleGl0 KDEpOworCisJcmVzID0gUFFleGVjKGNvbm4sICJTRUxFQ1Qgc3lzdGVtX2lkZW50aWZpZXIg RlJPTSBwZ19jb250cm9sX3N5c3RlbSgpIik7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykg IT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJUFFjbGVhcihyZXMpOworCQlkaXNjb25uZWN0 X2RhdGFiYXNlKGNvbm4pOworCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzeXN0ZW0gaWRl bnRpZmllcjogJXMiLCBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwl9CisJaWYgKFBR bnR1cGxlcyhyZXMpICE9IDEpCisJeworCQlQUWNsZWFyKHJlcyk7CisJCWRpc2Nvbm5lY3Rf ZGF0YWJhc2UoY29ubik7CisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHN5c3RlbSBpZGVu dGlmaWVyOiBnb3QgJWQgcm93cywgZXhwZWN0ZWQgJWQgcm93IiwKKwkJCQkgUFFudHVwbGVz KHJlcyksIDEpOworCX0KKworCXN5c2lkID0gc3RydG91NjQoUFFnZXR2YWx1ZShyZXMsIDAs IDApLCBOVUxMLCAxMCk7CisKKwlwZ19sb2dfaW5mbygic3lzdGVtIGlkZW50aWZpZXIgaXMg JWxsdSBvbiBwdWJsaXNoZXIiLCAodW5zaWduZWQgbG9uZyBsb25nKSBzeXNpZCk7CisKKwlQ UWNsZWFyKHJlcyk7CisJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKworCXJldHVybiBz eXNpZDsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgc3lzdGVtIGlkZW50aWZpZXIgZnJvbSBj b250cm9sIGZpbGUuIEl0IHdpbGwgYmUgdXNlZCB0byBjb21wYXJlCisgKiBpZiBhIGRhdGEg ZGlyZWN0b3J5IGlzIGEgY2xvbmUgb2YgYW5vdGhlciBvbmUuIFRoaXMgcm91dGluZSBpcyB1 c2VkIGxvY2FsbHkKKyAqIGFuZCBhdm9pZHMgYSBjb25uZWN0aW9uLgorICovCitzdGF0aWMg dWludDY0CitnZXRfc3RhbmRieV9zeXNpZChjb25zdCBjaGFyICpkYXRhZGlyKQoreworCUNv bnRyb2xGaWxlRGF0YSAqY2Y7CisJYm9vbAkJY3JjX29rOworCXVpbnQ2NAkJc3lzaWQ7CisK KwlwZ19sb2dfaW5mbygiZ2V0dGluZyBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIHN1YnNjcmli ZXIiKTsKKworCWNmID0gZ2V0X2NvbnRyb2xmaWxlKGRhdGFkaXIsICZjcmNfb2spOworCWlm ICghY3JjX29rKQorCQlwZ19mYXRhbCgiY29udHJvbCBmaWxlIGFwcGVhcnMgdG8gYmUgY29y cnVwdCIpOworCisJc3lzaWQgPSBjZi0+c3lzdGVtX2lkZW50aWZpZXI7CisKKwlwZ19sb2df aW5mbygic3lzdGVtIGlkZW50aWZpZXIgaXMgJWxsdSBvbiBzdWJzY3JpYmVyIiwgKHVuc2ln bmVkIGxvbmcgbG9uZykgc3lzaWQpOworCisJcGZyZWUoY2YpOworCisJcmV0dXJuIHN5c2lk OworfQorCisvKgorICogTW9kaWZ5IHRoZSBzeXN0ZW0gaWRlbnRpZmllci4gU2luY2UgYSBz dGFuZGJ5IHNlcnZlciBwcmVzZXJ2ZXMgdGhlIHN5c3RlbQorICogaWRlbnRpZmllciwgaXQg bWFrZXMgc2Vuc2UgdG8gY2hhbmdlIGl0IHRvIGF2b2lkIHNpdHVhdGlvbnMgaW4gd2hpY2gg V0FMCisgKiBmaWxlcyBmcm9tIG9uZSBvZiB0aGUgc3lzdGVtcyBtaWdodCBiZSB1c2VkIGlu IHRoZSBvdGhlciBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCittb2RpZnlfc3Vic2NyaWJlcl9z eXNpZChjb25zdCBjaGFyICpwZ19yZXNldHdhbF9wYXRoLCBDcmVhdGVTdWJzY3JpYmVyT3B0 aW9ucyBvcHQpCit7CisJQ29udHJvbEZpbGVEYXRhICpjZjsKKwlib29sCQljcmNfb2s7CisJ c3RydWN0IHRpbWV2YWwgdHY7CisKKwljaGFyCSAgICpjbWRfc3RyOworCWludAkJCXJjOwor CisJcGdfbG9nX2luZm8oIm1vZGlmeWluZyBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIHN1YnNj cmliZXIiKTsKKworCWNmID0gZ2V0X2NvbnRyb2xmaWxlKG9wdC5zdWJzY3JpYmVyX2Rpciwg JmNyY19vayk7CisJaWYgKCFjcmNfb2spCisJCXBnX2ZhdGFsKCJjb250cm9sIGZpbGUgYXBw ZWFycyB0byBiZSBjb3JydXB0Iik7CisKKwkvKgorCSAqIFNlbGVjdCBhIG5ldyBzeXN0ZW0g aWRlbnRpZmllci4KKwkgKgorCSAqIFhYWCB0aGlzIGNvZGUgd2FzIGV4dHJhY3RlZCBmcm9t IEJvb3RTdHJhcFhMT0coKS4KKwkgKi8KKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlj Zi0+c3lzdGVtX2lkZW50aWZpZXIgPSAoKHVpbnQ2NCkgdHYudHZfc2VjKSA8PCAzMjsKKwlj Zi0+c3lzdGVtX2lkZW50aWZpZXIgfD0gKCh1aW50NjQpIHR2LnR2X3VzZWMpIDw8IDEyOwor CWNmLT5zeXN0ZW1faWRlbnRpZmllciB8PSBnZXRwaWQoKSAmIDB4RkZGOworCisJaWYgKCFk cnlfcnVuKQorCQl1cGRhdGVfY29udHJvbGZpbGUob3B0LnN1YnNjcmliZXJfZGlyLCBjZiwg dHJ1ZSk7CisKKwlwZ19sb2dfaW5mbygic3lzdGVtIGlkZW50aWZpZXIgaXMgJWxsdSBvbiBz dWJzY3JpYmVyIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2YtPnN5c3RlbV9pZGVudGlmaWVy KTsKKworCXBnX2xvZ19pbmZvKCJydW5uaW5nIHBnX3Jlc2V0d2FsIG9uIHRoZSBzdWJzY3Jp YmVyIik7CisKKwljbWRfc3RyID0gcHNwcmludGYoIlwiJXNcIiAtRCBcIiVzXCIgPiBcIiVz XCIiLCBwZ19yZXNldHdhbF9wYXRoLCBvcHQuc3Vic2NyaWJlcl9kaXIsIERFVk5VTEwpOwor CisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIGNtZF9zdHIpOworCisJaWYgKCFk cnlfcnVuKQorCXsKKwkJcmMgPSBzeXN0ZW0oY21kX3N0cik7CisJCWlmIChyYyA9PSAwKQor CQkJcGdfbG9nX2luZm8oInN1YnNjcmliZXIgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdGhlIHN5 c3RlbSBpZGVudGlmaWVyIik7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJzdWJzY3JpYmVyIGZh aWxlZCB0byBjaGFuZ2Ugc3lzdGVtIGlkZW50aWZpZXI6IGV4aXQgY29kZTogJWQiLCByYyk7 CisJfQorCisJcGZyZWUoY2YpOworfQorCisvKgorICogQ3JlYXRlIHRoZSBwdWJsaWNhdGlv bnMgYW5kIHJlcGxpY2F0aW9uIHNsb3RzIGluIHByZXBhcmF0aW9uIGZvciBsb2dpY2FsCisg KiByZXBsaWNhdGlvbi4KKyAqLworc3RhdGljIGJvb2wKK3NldHVwX3B1Ymxpc2hlcihMb2dp Y2FsUmVwSW5mbyAqZGJpbmZvKQoreworCVBHY29ubgkgICAqY29ubjsKKwlQR3Jlc3VsdCAg ICpyZXM7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9kYnM7IGkrKykKKwl7CisJCWNo YXIJCXB1Ym5hbWVbTkFNRURBVEFMRU5dOworCQljaGFyCQlyZXBsc2xvdG5hbWVbTkFNRURB VEFMRU5dOworCisJCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1tpXS5wdWJjb25u aW5mbyk7CisJCWlmIChjb25uID09IE5VTEwpCisJCQlleGl0KDEpOworCisJCXJlcyA9IFBR ZXhlYyhjb25uLAorCQkJCQkgIlNFTEVDVCBvaWQgRlJPTSBwZ19jYXRhbG9nLnBnX2RhdGFi YXNlIFdIRVJFIGRhdG5hbWUgPSBjdXJyZW50X2RhdGFiYXNlKCkiKTsKKwkJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCQl7CisJCQlwZ19sb2dfZXJy b3IoImNvdWxkIG5vdCBvYnRhaW4gZGF0YWJhc2UgT0lEOiAlcyIsIFBRcmVzdWx0RXJyb3JN ZXNzYWdlKHJlcykpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJaWYgKFBRbnR1cGxl cyhyZXMpICE9IDEpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBk YXRhYmFzZSBPSUQ6IGdvdCAlZCByb3dzLCBleHBlY3RlZCAlZCByb3dzIiwKKwkJCQkJCSBQ UW50dXBsZXMocmVzKSwgMSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBSZW1l bWJlciBkYXRhYmFzZSBPSUQuICovCisJCWRiaW5mb1tpXS5vaWQgPSBzdHJ0b3VsKFBRZ2V0 dmFsdWUocmVzLCAwLCAwKSwgTlVMTCwgMTApOworCisJCVBRY2xlYXIocmVzKTsKKworCQkv KgorCQkgKiBCdWlsZCB0aGUgcHVibGljYXRpb24gbmFtZS4gVGhlIG5hbWUgbXVzdCBub3Qg ZXhjZWVkIE5BTUVEQVRBTEVOIC0KKwkJICogMS4gVGhpcyBjdXJyZW50IHNjaGVtYSB1c2Vz IGEgbWF4aW11bSBvZiAzMSBjaGFyYWN0ZXJzICgyMCArIDEwICsKKwkJICogJ1wwJykuCisJ CSAqLworCQlzbnByaW50ZihwdWJuYW1lLCBzaXplb2YocHVibmFtZSksICJwZ19jcmVhdGVz dWJzY3JpYmVyXyV1IiwgZGJpbmZvW2ldLm9pZCk7CisJCWRiaW5mb1tpXS5wdWJuYW1lID0g cGdfc3RyZHVwKHB1Ym5hbWUpOworCisJCS8qCisJCSAqIENyZWF0ZSBwdWJsaWNhdGlvbiBv biBwdWJsaXNoZXIuIFRoaXMgc3RlcCBzaG91bGQgYmUgZXhlY3V0ZWQKKwkJICogKmJlZm9y ZSogcHJvbW90aW5nIHRoZSBzdWJzY3JpYmVyIHRvIGF2b2lkIGFueSB0cmFuc2FjdGlvbnMg YmV0d2VlbgorCQkgKiBjb25zaXN0ZW50IExTTiBhbmQgdGhlIG5ldyBwdWJsaWNhdGlvbiBy b3dzIChzdWNoIHRyYW5zYWN0aW9ucworCQkgKiB3b3VsZG4ndCBzZWUgdGhlIG5ldyBwdWJs aWNhdGlvbiByb3dzIHJlc3VsdGluZyBpbiBhbiBlcnJvcikuCisJCSAqLworCQljcmVhdGVf cHVibGljYXRpb24oY29ubiwgJmRiaW5mb1tpXSk7CisKKwkJLyoKKwkJICogQnVpbGQgdGhl IHJlcGxpY2F0aW9uIHNsb3QgbmFtZS4gVGhlIG5hbWUgbXVzdCBub3QgZXhjZWVkCisJCSAq IE5BTUVEQVRBTEVOIC0gMS4gVGhpcyBjdXJyZW50IHNjaGVtYSB1c2VzIGEgbWF4aW11bSBv ZiA0MgorCQkgKiBjaGFyYWN0ZXJzICgyMCArIDEwICsgMSArIDEwICsgJ1wwJykuIFBJRCBp cyBpbmNsdWRlZCB0byByZWR1Y2UgdGhlCisJCSAqIHByb2JhYmlsaXR5IG9mIGNvbGxpc2lv bi4gQnkgZGVmYXVsdCwgc3Vic2NyaXB0aW9uIG5hbWUgaXMgdXNlZCBhcworCQkgKiByZXBs aWNhdGlvbiBzbG90IG5hbWUuCisJCSAqLworCQlzbnByaW50ZihyZXBsc2xvdG5hbWUsIHNp emVvZihyZXBsc2xvdG5hbWUpLAorCQkJCSAicGdfY3JlYXRlc3Vic2NyaWJlcl8ldV8lZCIs CisJCQkJIGRiaW5mb1tpXS5vaWQsCisJCQkJIChpbnQpIGdldHBpZCgpKTsKKwkJZGJpbmZv W2ldLnN1Ym5hbWUgPSBwZ19zdHJkdXAocmVwbHNsb3RuYW1lKTsKKworCQkvKiBDcmVhdGUg cmVwbGljYXRpb24gc2xvdCBvbiBwdWJsaXNoZXIuICovCisJCWlmIChjcmVhdGVfbG9naWNh bF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9baV0sIHJlcGxzbG90bmFtZSkgIT0g TlVMTCB8fCBkcnlfcnVuKQorCQkJcGdfbG9nX2luZm8oImNyZWF0ZSByZXBsaWNhdGlvbiBz bG90IFwiJXNcIiBvbiBwdWJsaXNoZXIiLCByZXBsc2xvdG5hbWUpOworCQllbHNlCisJCQly ZXR1cm4gZmFsc2U7CisKKwkJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKwl9CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIElzIHRoZSBwcmltYXJ5IHNlcnZlciByZWFkeSBm b3IgbG9naWNhbCByZXBsaWNhdGlvbj8KKyAqLworc3RhdGljIGJvb2wKK2NoZWNrX3B1Ymxp c2hlcihMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQoreworCVBHY29ubgkgICAqY29ubjsKKwlQ R3Jlc3VsdCAgICpyZXM7CisJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKKworCWNoYXIJICAgKndhbF9sZXZlbDsKKwlpbnQJCQltYXhfcmVwc2xvdHM7CisJaW50 CQkJY3VyX3JlcHNsb3RzOworCWludAkJCW1heF93YWxzZW5kZXJzOworCWludAkJCWN1cl93 YWxzZW5kZXJzOworCisJcGdfbG9nX2luZm8oImNoZWNraW5nIHNldHRpbmdzIG9uIHB1Ymxp c2hlciIpOworCisJLyoKKwkgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHJlcXVpcmVzIGEgZmV3 IHBhcmFtZXRlcnMgdG8gYmUgc2V0IG9uIHB1Ymxpc2hlci4KKwkgKiBTaW5jZSB0aGVzZSBw YXJhbWV0ZXJzIGFyZSBub3QgYSByZXF1aXJlbWVudCBmb3IgcGh5c2ljYWwgcmVwbGljYXRp b24sCisJICogd2Ugc2hvdWxkIGNoZWNrIGl0IHRvIG1ha2Ugc3VyZSBpdCB3b24ndCBmYWls LgorCSAqCisJICogd2FsX2xldmVsID0gbG9naWNhbCBtYXhfcmVwbGljYXRpb25fc2xvdHMg Pj0gY3VycmVudCArIG51bWJlciBvZiBkYnMgdG8KKwkgKiBiZSBjb252ZXJ0ZWQgbWF4X3dh bF9zZW5kZXJzID49IGN1cnJlbnQgKyBudW1iZXIgb2YgZGJzIHRvIGJlIGNvbnZlcnRlZAor CSAqLworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7 CisJaWYgKGNvbm4gPT0gTlVMTCkKKwkJZXhpdCgxKTsKKworCXJlcyA9IFBRZXhlYyhjb25u LAorCQkJCSAiV0lUSCB3bCBBUyAoU0VMRUNUIHNldHRpbmcgQVMgd2FsbGV2ZWwgRlJPTSBw Z19zZXR0aW5ncyBXSEVSRSBuYW1lID0gJ3dhbF9sZXZlbCcpLCIKKwkJCQkgIiAgICAgdG90 YWxfbXJzIEFTIChTRUxFQ1Qgc2V0dGluZyBBUyB0bXJzIEZST00gcGdfc2V0dGluZ3MgV0hF UkUgbmFtZSA9ICdtYXhfcmVwbGljYXRpb25fc2xvdHMnKSwiCisJCQkJICIgICAgIGN1cl9t cnMgQVMgKFNFTEVDVCBjb3VudCgqKSBBUyBjbXJzIEZST00gcGdfcmVwbGljYXRpb25fc2xv dHMpLCIKKwkJCQkgIiAgICAgdG90YWxfbXdzIEFTIChTRUxFQ1Qgc2V0dGluZyBBUyB0bXdz IEZST00gcGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdtYXhfd2FsX3NlbmRlcnMnKSwiCisJ CQkJICIgICAgIGN1cl9td3MgQVMgKFNFTEVDVCBjb3VudCgqKSBBUyBjbXdzIEZST00gcGdf c3RhdF9hY3Rpdml0eSBXSEVSRSBiYWNrZW5kX3R5cGUgPSAnd2Fsc2VuZGVyJykiCisJCQkJ ICJTRUxFQ1Qgd2FsbGV2ZWwsIHRtcnMsIGNtcnMsIHRtd3MsIGNtd3MgRlJPTSB3bCwgdG90 YWxfbXJzLCBjdXJfbXJzLCB0b3RhbF9td3MsIGN1cl9td3MiKTsKKworCWlmIChQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigi Y291bGQgbm90IG9idGFpbiBwdWJsaXNoZXIgc2V0dGluZ3M6ICVzIiwgUFFyZXN1bHRFcnJv ck1lc3NhZ2UocmVzKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwl3YWxfbGV2ZWwgPSBz dHJkdXAoUFFnZXR2YWx1ZShyZXMsIDAsIDApKTsKKwltYXhfcmVwc2xvdHMgPSBhdG9pKFBR Z2V0dmFsdWUocmVzLCAwLCAxKSk7CisJY3VyX3JlcHNsb3RzID0gYXRvaShQUWdldHZhbHVl KHJlcywgMCwgMikpOworCW1heF93YWxzZW5kZXJzID0gYXRvaShQUWdldHZhbHVlKHJlcywg MCwgMykpOworCWN1cl93YWxzZW5kZXJzID0gYXRvaShQUWdldHZhbHVlKHJlcywgMCwgNCkp OworCisJUFFjbGVhcihyZXMpOworCisJcGdfbG9nX2RlYnVnKCJzdWJzY3JpYmVyOiB3YWxf bGV2ZWw6ICVzIiwgd2FsX2xldmVsKTsKKwlwZ19sb2dfZGVidWcoInN1YnNjcmliZXI6IG1h eF9yZXBsaWNhdGlvbl9zbG90czogJWQiLCBtYXhfcmVwc2xvdHMpOworCXBnX2xvZ19kZWJ1 Zygic3Vic2NyaWJlcjogY3VycmVudCByZXBsaWNhdGlvbiBzbG90czogJWQiLCBjdXJfcmVw c2xvdHMpOworCXBnX2xvZ19kZWJ1Zygic3Vic2NyaWJlcjogbWF4X3dhbF9zZW5kZXJzOiAl ZCIsIG1heF93YWxzZW5kZXJzKTsKKwlwZ19sb2dfZGVidWcoInN1YnNjcmliZXI6IGN1cnJl bnQgd2FsIHNlbmRlcnM6ICVkIiwgY3VyX3dhbHNlbmRlcnMpOworCisJLyoKKwkgKiBJZiBz dGFuZGJ5IHNldHMgcHJpbWFyeV9zbG90X25hbWUsIGNoZWNrIGlmIHRoaXMgcmVwbGljYXRp b24gc2xvdCBpcyBpbgorCSAqIHVzZSBvbiBwcmltYXJ5IGZvciBXQUwgcmV0ZW50aW9uIHB1 cnBvc2VzLiBUaGlzIHJlcGxpY2F0aW9uIHNsb3QgaGFzIG5vCisJICogdXNlIGFmdGVyIHRo ZSB0cmFuc2Zvcm1hdGlvbiwgaGVuY2UsIGl0IHdpbGwgYmUgcmVtb3ZlZCBhdCB0aGUgZW5k IG9mCisJICogdGhpcyBwcm9jZXNzLgorCSAqLworCWlmIChwcmltYXJ5X3Nsb3RfbmFtZSkK Kwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKKwkJCQkJCSAgIlNFTEVDVCAxIEZST00g cGdfcmVwbGljYXRpb25fc2xvdHMgV0hFUkUgYWN0aXZlIEFORCBzbG90X25hbWUgPSAnJXMn IiwgcHJpbWFyeV9zbG90X25hbWUpOworCisJCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczog JXMiLCBzdHItPmRhdGEpOworCisJCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOwor CQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJCXsKKwkJ CXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiByZXBsaWNhdGlvbiBzbG90IGluZm9y bWF0aW9uOiAlcyIsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQkJcmV0dXJuIGZh bHNlOworCQl9CisKKwkJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEpCisJCXsKKwkJCXBnX2xv Z19lcnJvcigiY291bGQgbm90IG9idGFpbiByZXBsaWNhdGlvbiBzbG90IGluZm9ybWF0aW9u OiBnb3QgJWQgcm93cywgZXhwZWN0ZWQgJWQgcm93IiwKKwkJCQkJCSBQUW50dXBsZXMocmVz KSwgMSk7CisJCQlwZ19mcmVlKHByaW1hcnlfc2xvdF9uYW1lKTsgLyogaXQgaXMgbm90IGJl aW5nIHVzZWQuICovCisJCQlwcmltYXJ5X3Nsb3RfbmFtZSA9IE5VTEw7CisJCQlyZXR1cm4g ZmFsc2U7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwZ19sb2dfaW5mbygicHJpbWFyeSBoYXMg cmVwbGljYXRpb24gc2xvdCBcIiVzXCIiLCBwcmltYXJ5X3Nsb3RfbmFtZSk7CisJCX0KKwor CQlQUWNsZWFyKHJlcyk7CisJfQorCisJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKwor CWlmIChzdHJjbXAod2FsX2xldmVsLCAibG9naWNhbCIpICE9IDApCisJeworCQlwZ19sb2df ZXJyb3IoInB1Ymxpc2hlciByZXF1aXJlcyB3YWxfbGV2ZWwgPj0gbG9naWNhbCIpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKG1heF9yZXBzbG90cyAtIGN1cl9yZXBzbG90cyA8 IG51bV9kYnMpCisJeworCQlwZ19sb2dfZXJyb3IoInB1Ymxpc2hlciByZXF1aXJlcyAlZCBy ZXBsaWNhdGlvbiBzbG90cywgYnV0IG9ubHkgJWQgcmVtYWluIiwgbnVtX2RicywgbWF4X3Jl cHNsb3RzIC0gY3VyX3JlcHNsb3RzKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIkNvbnNpZGVy IGluY3JlYXNpbmcgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzIHRvIGF0IGxlYXN0ICVkLiIsIGN1 cl9yZXBzbG90cyArIG51bV9kYnMpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKG1h eF93YWxzZW5kZXJzIC0gY3VyX3dhbHNlbmRlcnMgPCBudW1fZGJzKQorCXsKKwkJcGdfbG9n X2Vycm9yKCJwdWJsaXNoZXIgcmVxdWlyZXMgJWQgd2FsIHNlbmRlciBwcm9jZXNzZXMsIGJ1 dCBvbmx5ICVkIHJlbWFpbiIsIG51bV9kYnMsIG1heF93YWxzZW5kZXJzIC0gY3VyX3dhbHNl bmRlcnMpOworCQlwZ19sb2dfZXJyb3JfaGludCgiQ29uc2lkZXIgaW5jcmVhc2luZyBtYXhf d2FsX3NlbmRlcnMgdG8gYXQgbGVhc3QgJWQuIiwgY3VyX3dhbHNlbmRlcnMgKyBudW1fZGJz KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICog SXMgdGhlIHN0YW5kYnkgc2VydmVyIHJlYWR5IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uPwor ICovCitzdGF0aWMgYm9vbAorY2hlY2tfc3Vic2NyaWJlcihMb2dpY2FsUmVwSW5mbyAqZGJp bmZvKQoreworCVBHY29ubgkgICAqY29ubjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJUFFFeHBC dWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCWludAkJCW1heF9scndvcmtl cnM7CisJaW50CQkJbWF4X3JlcHNsb3RzOworCWludAkJCW1heF93cHJvY3M7CisKKwlwZ19s b2dfaW5mbygiY2hlY2tpbmcgc2V0dGluZ3Mgb24gc3Vic2NyaWJlciIpOworCisJY29ubiA9 IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvWzBdLnN1YmNvbm5pbmZvKTsKKwlpZiAoY29ubiA9 PSBOVUxMKQorCQlleGl0KDEpOworCisJLyoKKwkgKiBTdWJzY3JpcHRpb25zIGNhbiBvbmx5 IGJlIGNyZWF0ZWQgYnkgcm9sZXMgdGhhdCBoYXZlIHRoZSBwcml2aWxlZ2VzIG9mCisJICog cGdfY3JlYXRlX3N1YnNjcmlwdGlvbiByb2xlIGFuZCBDUkVBVEUgcHJpdmlsZWdlcyBvbiB0 aGUgc3BlY2lmaWVkCisJICogZGF0YWJhc2UuCisJICovCisJYXBwZW5kUFFFeHBCdWZmZXIo c3RyLCAiU0VMRUNUIHBnX2hhc19yb2xlKGN1cnJlbnRfdXNlciwgJXUsICdNRU1CRVInKSwg aGFzX2RhdGFiYXNlX3ByaXZpbGVnZShjdXJyZW50X3VzZXIsICclcycsICdDUkVBVEUnKSwg aGFzX2Z1bmN0aW9uX3ByaXZpbGVnZShjdXJyZW50X3VzZXIsICdwZ19jYXRhbG9nLnBnX3Jl cGxpY2F0aW9uX29yaWdpbl9hZHZhbmNlKHRleHQsIHBnX2xzbiknLCAnRVhFQ1VURScpIiwg Uk9MRV9QR19DUkVBVEVfU1VCU0NSSVBUSU9OLCBkYmluZm9bMF0uZGJuYW1lKTsKKworCXBn X2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCisJcmVzID0gUFFl eGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4g YWNjZXNzIHByaXZpbGVnZSBpbmZvcm1hdGlvbjogJXMiLCBQUXJlc3VsdEVycm9yTWVzc2Fn ZShyZXMpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzdHJjbXAoUFFnZXR2YWx1 ZShyZXMsIDAsIDApLCAidCIpICE9IDApCisJeworCQlwZ19sb2dfZXJyb3IoInBlcm1pc3Np b24gZGVuaWVkIHRvIGNyZWF0ZSBzdWJzY3JpcHRpb24iKTsKKwkJcGdfbG9nX2Vycm9yX2hp bnQoIk9ubHkgcm9sZXMgd2l0aCBwcml2aWxlZ2VzIG9mIHRoZSBcIiVzXCIgcm9sZSBtYXkg Y3JlYXRlIHN1YnNjcmlwdGlvbnMuIiwKKwkJCQkJCSAgInBnX2NyZWF0ZV9zdWJzY3JpcHRp b24iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoc3RyY21wKFBRZ2V0dmFsdWUocmVz LCAwLCAxKSwgInQiKSAhPSAwKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJwZXJtaXNzaW9uIGRl bmllZCBmb3IgZGF0YWJhc2UgJXMiLCBkYmluZm9bMF0uZGJuYW1lKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKwlpZiAoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCAwLCAxKSwgInQiKSAhPSAw KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJwZXJtaXNzaW9uIGRlbmllZCBmb3IgZnVuY3Rpb24g XCIlc1wiIiwgInBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fb3JpZ2luX2FkdmFuY2UodGV4 dCwgcGdfbHNuKSIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZGVzdHJveVBRRXhwQnVm ZmVyKHN0cik7CisJUFFjbGVhcihyZXMpOworCisJLyoKKwkgKiBMb2dpY2FsIHJlcGxpY2F0 aW9uIHJlcXVpcmVzIGEgZmV3IHBhcmFtZXRlcnMgdG8gYmUgc2V0IG9uIHN1YnNjcmliZXIu CisJICogU2luY2UgdGhlc2UgcGFyYW1ldGVycyBhcmUgbm90IGEgcmVxdWlyZW1lbnQgZm9y IHBoeXNpY2FsIHJlcGxpY2F0aW9uLAorCSAqIHdlIHNob3VsZCBjaGVjayBpdCB0byBtYWtl IHN1cmUgaXQgd29uJ3QgZmFpbC4KKwkgKgorCSAqIG1heF9yZXBsaWNhdGlvbl9zbG90cyA+ PSBudW1iZXIgb2YgZGJzIHRvIGJlIGNvbnZlcnRlZAorCSAqIG1heF9sb2dpY2FsX3JlcGxp Y2F0aW9uX3dvcmtlcnMgPj0gbnVtYmVyIG9mIGRicyB0byBiZSBjb252ZXJ0ZWQKKwkgKiBt YXhfd29ya2VyX3Byb2Nlc3NlcyA+PSAxICsgbnVtYmVyIG9mIGRicyB0byBiZSBjb252ZXJ0 ZWQKKwkgKi8KKwlyZXMgPSBQUWV4ZWMoY29ubiwKKwkJCQkgIlNFTEVDVCBzZXR0aW5nIEZS T00gcGdfc2V0dGluZ3MgV0hFUkUgbmFtZSBJTiAoJ21heF9sb2dpY2FsX3JlcGxpY2F0aW9u X3dvcmtlcnMnLCAnbWF4X3JlcGxpY2F0aW9uX3Nsb3RzJywgJ21heF93b3JrZXJfcHJvY2Vz c2VzJywgJ3ByaW1hcnlfc2xvdF9uYW1lJykgT1JERVIgQlkgbmFtZSIpOworCisJaWYgKFBR cmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vy cm9yKCJjb3VsZCBub3Qgb2J0YWluIHN1YnNjcmliZXIgc2V0dGluZ3M6ICVzIiwgUFFyZXN1 bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwltYXhfbHJ3 b3JrZXJzID0gYXRvaShQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCW1heF9yZXBzbG90cyA9 IGF0b2koUFFnZXR2YWx1ZShyZXMsIDEsIDApKTsKKwltYXhfd3Byb2NzID0gYXRvaShQUWdl dHZhbHVlKHJlcywgMiwgMCkpOworCWlmIChzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIDMsIDAp LCAiIikgIT0gMCkKKwkJcHJpbWFyeV9zbG90X25hbWUgPSBwZ19zdHJkdXAoUFFnZXR2YWx1 ZShyZXMsIDMsIDApKTsKKworCXBnX2xvZ19kZWJ1Zygic3Vic2NyaWJlcjogbWF4X2xvZ2lj YWxfcmVwbGljYXRpb25fd29ya2VyczogJWQiLCBtYXhfbHJ3b3JrZXJzKTsKKwlwZ19sb2df ZGVidWcoInN1YnNjcmliZXI6IG1heF9yZXBsaWNhdGlvbl9zbG90czogJWQiLCBtYXhfcmVw c2xvdHMpOworCXBnX2xvZ19kZWJ1Zygic3Vic2NyaWJlcjogbWF4X3dvcmtlcl9wcm9jZXNz ZXM6ICVkIiwgbWF4X3dwcm9jcyk7CisJcGdfbG9nX2RlYnVnKCJzdWJzY3JpYmVyOiBwcmlt YXJ5X3Nsb3RfbmFtZTogJXMiLCBwcmltYXJ5X3Nsb3RfbmFtZSk7CisKKwlQUWNsZWFyKHJl cyk7CisKKwlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCisJaWYgKG1heF9yZXBzbG90 cyA8IG51bV9kYnMpCisJeworCQlwZ19sb2dfZXJyb3IoInN1YnNjcmliZXIgcmVxdWlyZXMg JWQgcmVwbGljYXRpb24gc2xvdHMsIGJ1dCBvbmx5ICVkIHJlbWFpbiIsIG51bV9kYnMsIG1h eF9yZXBzbG90cyk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJDb25zaWRlciBpbmNyZWFzaW5n IG1heF9yZXBsaWNhdGlvbl9zbG90cyB0byBhdCBsZWFzdCAlZC4iLCBudW1fZGJzKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCWlmIChtYXhfbHJ3b3JrZXJzIDwgbnVtX2RicykKKwl7 CisJCXBnX2xvZ19lcnJvcigic3Vic2NyaWJlciByZXF1aXJlcyAlZCBsb2dpY2FsIHJlcGxp Y2F0aW9uIHdvcmtlcnMsIGJ1dCBvbmx5ICVkIHJlbWFpbiIsIG51bV9kYnMsIG1heF9scndv cmtlcnMpOworCQlwZ19sb2dfZXJyb3JfaGludCgiQ29uc2lkZXIgaW5jcmVhc2luZyBtYXhf bG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzIHRvIGF0IGxlYXN0ICVkLiIsIG51bV9kYnMp OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKG1heF93cHJvY3MgPCBudW1fZGJzICsg MSkKKwl7CisJCXBnX2xvZ19lcnJvcigic3Vic2NyaWJlciByZXF1aXJlcyAlZCB3b3JrZXIg cHJvY2Vzc2VzLCBidXQgb25seSAlZCByZW1haW4iLCBudW1fZGJzICsgMSwgbWF4X3dwcm9j cyk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJDb25zaWRlciBpbmNyZWFzaW5nIG1heF93b3Jr ZXJfcHJvY2Vzc2VzIHRvIGF0IGxlYXN0ICVkLiIsIG51bV9kYnMgKyAxKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQ3JlYXRlIHRoZSBz dWJzY3JpcHRpb25zLCBhZGp1c3QgdGhlIGluaXRpYWwgbG9jYXRpb24gZm9yIGxvZ2ljYWwg cmVwbGljYXRpb24gYW5kCisgKiBlbmFibGUgdGhlIHN1YnNjcmlwdGlvbnMuIFRoYXQncyB0 aGUgbGFzdCBzdGVwIGZvciBsb2dpY2FsIHJlcGxpYXRpb24gc2V0dXAuCisgKi8KK3N0YXRp YyBib29sCitzZXR1cF9zdWJzY3JpYmVyKExvZ2ljYWxSZXBJbmZvICpkYmluZm8sIGNvbnN0 IGNoYXIgKmNvbnNpc3RlbnRfbHNuKQoreworCVBHY29ubgkgICAqY29ubjsKKworCWZvciAo aW50IGkgPSAwOyBpIDwgbnVtX2RiczsgaSsrKQorCXsKKwkJLyogQ29ubmVjdCB0byBzdWJz Y3JpYmVyLiAqLworCQljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9baV0uc3ViY29u bmluZm8pOworCQlpZiAoY29ubiA9PSBOVUxMKQorCQkJZXhpdCgxKTsKKworCQkvKgorCQkg KiBTaW5jZSB0aGUgcHVibGljYXRpb24gd2FzIGNyZWF0ZWQgYmVmb3JlIHRoZSBjb25zaXN0 ZW50IExTTiwgaXQgaXMKKwkJICogYXZhaWxhYmxlIG9uIHRoZSBzdWJzY3JpYmVyIHdoZW4g dGhlIHBoeXNpY2FsIHJlcGxpY2EgaXMgcHJvbW90ZWQuCisJCSAqIFJlbW92ZSBwdWJsaWNh dGlvbnMgZnJvbSB0aGUgc3Vic2NyaWJlciBiZWNhdXNlIGl0IGhhcyBubyB1c2UuCisJCSAq LworCQlkcm9wX3B1YmxpY2F0aW9uKGNvbm4sICZkYmluZm9baV0pOworCisJCWNyZWF0ZV9z dWJzY3JpcHRpb24oY29ubiwgJmRiaW5mb1tpXSk7CisKKwkJLyogU2V0IHRoZSByZXBsaWNh dGlvbiBwcm9ncmVzcyB0byB0aGUgY29ycmVjdCBMU04uICovCisJCXNldF9yZXBsaWNhdGlv bl9wcm9ncmVzcyhjb25uLCAmZGJpbmZvW2ldLCBjb25zaXN0ZW50X2xzbik7CisKKwkJLyog RW5hYmxlIHN1YnNjcmlwdGlvbi4gKi8KKwkJZW5hYmxlX3N1YnNjcmlwdGlvbihjb25uLCAm ZGJpbmZvW2ldKTsKKworCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCX0KKworCXJl dHVybiB0cnVlOworfQorCisvKgorICogQ3JlYXRlIGEgbG9naWNhbCByZXBsaWNhdGlvbiBz bG90IGFuZCByZXR1cm5zIGEgY29uc2lzdGVudCBMU04uIFRoZSByZXR1cm5lZAorICogTFNO IG1pZ2h0IGJlIHVzZWQgdG8gY2F0Y2ggdXAgdGhlIHN1YnNjcmliZXIgdXAgdG8gdGhlIHJl cXVpcmVkIHBvaW50LgorICoKKyAqIENyZWF0ZVJlcGxpY2F0aW9uU2xvdCgpIGlzIG5vdCB1 c2VkIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgb25lLXJvdworICogcmVzdWx0 IHNldCB0aGF0IGNvbnRhaW5zIHRoZSBjb25zaXN0ZW50IExTTi4KKyAqLworc3RhdGljIGNo YXIgKgorY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdChQR2Nvbm4gKmNvbm4sIExv Z2ljYWxSZXBJbmZvICpkYmluZm8sCisJCQkJCQkJCWNoYXIgKnNsb3RfbmFtZSkKK3sKKwlQ UUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAgKnJl cyA9IE5VTEw7CisJY2hhcgkgICAqbHNuID0gTlVMTDsKKwlib29sCQl0cmFuc2llbnRfcmVw bHNsb3QgPSBmYWxzZTsKKworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJLyoKKwkgKiBJ ZiBubyBzbG90IG5hbWUgaXMgaW5mb3JtZWQsIGl0IGlzIGEgdHJhbnNpZW50IHJlcGxpY2F0 aW9uIHNsb3QgdXNlZAorCSAqIG9ubHkgZm9yIGNhdGNoIHVwIHB1cnBvc2VzLgorCSAqLwor CWlmIChzbG90X25hbWVbMF0gPT0gJ1wwJykKKwl7CisJCXNucHJpbnRmKHNsb3RfbmFtZSwg TkFNRURBVEFMRU4sICJwZ19jcmVhdGVzdWJzY3JpYmVyXyVkX3N0YXJ0cG9pbnQiLAorCQkJ CSAoaW50KSBnZXRwaWQoKSk7CisJCXRyYW5zaWVudF9yZXBsc2xvdCA9IHRydWU7CisJfQor CisJcGdfbG9nX2luZm8oImNyZWF0aW5nIHRoZSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBv biBkYXRhYmFzZSBcIiVzXCIiLCBzbG90X25hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFw cGVuZFBRRXhwQnVmZmVyKHN0ciwgIlNFTEVDVCBsc24gRlJPTSBwZ19jcmVhdGVfbG9naWNh bF9yZXBsaWNhdGlvbl9zbG90KCclcycsICclcycsICVzLCBmYWxzZSwgZmFsc2UpIiwKKwkJ CQkJICBzbG90X25hbWUsICJwZ291dHB1dCIsIHRyYW5zaWVudF9yZXBsc2xvdCA/ICJ0cnVl IiA6ICJmYWxzZSIpOworCisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ ZGF0YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3Ry LT5kYXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09L KQorCQl7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgcmVwbGljYXRpb24g c2xvdCBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsIHNsb3RfbmFtZSwgZGJpbmZv LT5kYm5hbWUsCisJCQkJCQkgUFFyZXN1bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJCQlyZXR1 cm4gbHNuOworCQl9CisJfQorCisJLyogZm9yIGNsZWFudXAgcHVycG9zZXMgKi8KKwlpZiAo IXRyYW5zaWVudF9yZXBsc2xvdCkKKwkJZGJpbmZvLT5tYWRlX3JlcGxzbG90ID0gdHJ1ZTsK KworCWlmICghZHJ5X3J1bikKKwl7CisJCWxzbiA9IHBnX3N0cmR1cChQUWdldHZhbHVlKHJl cywgMCwgMCkpOworCQlQUWNsZWFyKHJlcyk7CisJfQorCisJZGVzdHJveVBRRXhwQnVmZmVy KHN0cik7CisKKwlyZXR1cm4gbHNuOworfQorCitzdGF0aWMgdm9pZAorZHJvcF9yZXBsaWNh dGlvbl9zbG90KFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbywgY29uc3Qg Y2hhciAqc2xvdF9uYW1lKQoreworCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CisJUEdyZXN1bHQgICAqcmVzOworCisJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisK KwlwZ19sb2dfaW5mbygiZHJvcHBpbmcgdGhlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9u IGRhdGFiYXNlIFwiJXNcIiIsIHNsb3RfbmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCisJYXBw ZW5kUFFFeHBCdWZmZXIoc3RyLCAiU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgn JXMnKSIsIHNsb3RfbmFtZSk7CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwg c3RyLT5kYXRhKTsKKworCWlmICghZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhjb25u LCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBM RVNfT0spCisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBkcm9wIHJlcGxpY2F0aW9uIHNs b3QgXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIjogJXMiLCBzbG90X25hbWUsIGRiaW5mby0+ ZGJuYW1lLAorCQkJCQkJIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCQlQUWNsZWFyKHJl cyk7CisJfQorCisJZGVzdHJveVBRRXhwQnVmZmVyKHN0cik7Cit9CisKKy8qCisgKiBDcmVh dGUgYSBkaXJlY3RvcnkgdG8gc3RvcmUgYW55IGxvZyBpbmZvcm1hdGlvbi4gQWRqdXN0IHRo ZSBwZXJtaXNzaW9ucy4KKyAqIFJldHVybiBhIGZpbGUgbmFtZSAoZnVsbCBwYXRoKSB0aGF0 J3MgdXNlZCBieSB0aGUgc3RhbmRieSBzZXJ2ZXIgd2hlbiBpdCBpcworICogcnVuLgorICov CitzdGF0aWMgY2hhciAqCitzZXR1cF9zZXJ2ZXJfbG9nZmlsZShjb25zdCBjaGFyICpkYXRh ZGlyKQoreworCWNoYXIJCXRpbWVidWZbMTI4XTsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lOwor CXRpbWVfdAkJdHQ7CisJaW50CQkJbGVuOworCWNoYXIJICAgKmJhc2VfZGlyOworCWNoYXIJ ICAgKmZpbGVuYW1lOworCisJYmFzZV9kaXIgPSAoY2hhciAqKSBwZ19tYWxsb2MwKE1BWFBH UEFUSCk7CisJbGVuID0gc25wcmludGYoYmFzZV9kaXIsIE1BWFBHUEFUSCwgIiVzLyVzIiwg ZGF0YWRpciwgUEdTX09VVFBVVF9ESVIpOworCWlmIChsZW4gPj0gTUFYUEdQQVRIKQorCQlw Z19mYXRhbCgiZGlyZWN0b3J5IHBhdGggZm9yIHN1YnNjcmliZXIgaXMgdG9vIGxvbmciKTsK KworCWlmICghR2V0RGF0YURpcmVjdG9yeUNyZWF0ZVBlcm0oZGF0YWRpcikpCisJCXBnX2Zh dGFsKCJjb3VsZCBub3QgcmVhZCBwZXJtaXNzaW9ucyBvZiBkaXJlY3RvcnkgXCIlc1wiOiAl bSIsCisJCQkJIGRhdGFkaXIpOworCisJaWYgKG1rZGlyKGJhc2VfZGlyLCBwZ19kaXJfY3Jl YXRlX21vZGUpIDwgMCAmJiBlcnJubyAhPSBFRVhJU1QpCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgYmFzZV9kaXIpOworCisJLyogYXBw ZW5kIHRpbWVzdGFtcCB3aXRoIElTTyA4NjAxIGZvcm1hdC4gKi8KKwlnZXR0aW1lb2ZkYXko JnRpbWUsIE5VTEwpOworCXR0ID0gKHRpbWVfdCkgdGltZS50dl9zZWM7CisJc3RyZnRpbWUo dGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYpLCAiJVklbSVkVCVIJU0lUyIsIGxvY2FsdGltZSgm dHQpKTsKKwlzbnByaW50Zih0aW1lYnVmICsgc3RybGVuKHRpbWVidWYpLCBzaXplb2YodGlt ZWJ1ZikgLSBzdHJsZW4odGltZWJ1ZiksCisJCQkgIi4lMDNkIiwgKGludCkgKHRpbWUudHZf dXNlYyAvIDEwMDApKTsKKworCWZpbGVuYW1lID0gKGNoYXIgKikgcGdfbWFsbG9jMChNQVhQ R1BBVEgpOworCWxlbiA9IHNucHJpbnRmKGZpbGVuYW1lLCBNQVhQR1BBVEgsICIlcy8lcy9z ZXJ2ZXJfc3RhcnRfJXMubG9nIiwgZGF0YWRpciwgUEdTX09VVFBVVF9ESVIsIHRpbWVidWYp OworCWlmIChsZW4gPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgibG9nIGZpbGUgcGF0aCBp cyB0b28gbG9uZyIpOworCisJcmV0dXJuIGZpbGVuYW1lOworfQorCitzdGF0aWMgdm9pZAor c3RhcnRfc3RhbmRieV9zZXJ2ZXIoY29uc3QgY2hhciAqcGdfY3RsX3BhdGgsIGNvbnN0IGNo YXIgKmRhdGFkaXIsIGNvbnN0IGNoYXIgKmxvZ2ZpbGUpCit7CisJY2hhcgkgICAqcGdfY3Rs X2NtZDsKKwlpbnQJCQlyYzsKKworCXBnX2N0bF9jbWQgPSBwc3ByaW50ZigiXCIlc1wiIHN0 YXJ0IC1EIFwiJXNcIiAtcyAtbCBcIiVzXCIiLCBwZ19jdGxfcGF0aCwgZGF0YWRpciwgbG9n ZmlsZSk7CisJcmMgPSBzeXN0ZW0ocGdfY3RsX2NtZCk7CisJcGdfY3RsX3N0YXR1cyhwZ19j dGxfY21kLCByYywgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wX3N0YW5kYnlfc2VydmVy KGNvbnN0IGNoYXIgKnBnX2N0bF9wYXRoLCBjb25zdCBjaGFyICpkYXRhZGlyKQoreworCWNo YXIJICAgKnBnX2N0bF9jbWQ7CisJaW50CQkJcmM7CisKKwlwZ19jdGxfY21kID0gcHNwcmlu dGYoIlwiJXNcIiBzdG9wIC1EIFwiJXNcIiAtcyIsIHBnX2N0bF9wYXRoLCBkYXRhZGlyKTsK KwlyYyA9IHN5c3RlbShwZ19jdGxfY21kKTsKKwlwZ19jdGxfc3RhdHVzKHBnX2N0bF9jbWQs IHJjLCAwKTsKK30KKworLyoKKyAqIFJlcG9ydHMgYSBzdWl0YWJsZSBtZXNzYWdlIGlmIHBn X2N0bCBmYWlscy4KKyAqLworc3RhdGljIHZvaWQKK3BnX2N0bF9zdGF0dXMoY29uc3QgY2hh ciAqcGdfY3RsX2NtZCwgaW50IHJjLCBpbnQgYWN0aW9uKQoreworCWlmIChyYyAhPSAwKQor CXsKKwkJaWYgKFdJRkVYSVRFRChyYykpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigicGdfY3Rs IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlZCIsIFdFWElUU1RBVFVTKHJjKSk7CisJCX0KKwkJ ZWxzZSBpZiAoV0lGU0lHTkFMRUQocmMpKQorCQl7CisjaWYgZGVmaW5lZChXSU4zMikKKwkJ CXBnX2xvZ19lcnJvcigicGdfY3RsIHdhcyB0ZXJtaW5hdGVkIGJ5IGV4Y2VwdGlvbiAweCVY IiwgV1RFUk1TSUcocmMpKTsKKwkJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlNlZSBDIGluY2x1 ZGUgZmlsZSBcIm50c3RhdHVzLmhcIiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgaGV4YWRl Y2ltYWwgdmFsdWUuIik7CisjZWxzZQorCQkJcGdfbG9nX2Vycm9yKCJwZ19jdGwgd2FzIHRl cm1pbmF0ZWQgYnkgc2lnbmFsICVkOiAlcyIsCisJCQkJCQkgV1RFUk1TSUcocmMpLCBwZ19z dHJzaWduYWwoV1RFUk1TSUcocmMpKSk7CisjZW5kaWYKKwkJfQorCQllbHNlCisJCXsKKwkJ CXBnX2xvZ19lcnJvcigicGdfY3RsIGV4aXRlZCB3aXRoIHVucmVjb2duaXplZCBzdGF0dXMg JWQiLCByYyk7CisJCX0KKworCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJUaGUgZmFpbGVkIGNv bW1hbmQgd2FzOiAlcyIsIHBnX2N0bF9jbWQpOworCQlleGl0KDEpOworCX0KKworCWlmIChh Y3Rpb24pCisJCXBnX2xvZ19pbmZvKCJwb3N0bWFzdGVyIHdhcyBzdGFydGVkIik7CisJZWxz ZQorCQlwZ19sb2dfaW5mbygicG9zdG1hc3RlciB3YXMgc3RvcHBlZCIpOworfQorCisvKgor ICogUmV0dXJucyBhZnRlciB0aGUgc2VydmVyIGZpbmlzaGVzIHRoZSByZWNvdmVyeSBwcm9j ZXNzLgorICoKKyAqIElmIHJlY292ZXJ5X3RpbWVvdXQgb3B0aW9uIGlzIHNldCwgdGVybWlu YXRlIGFibm9ybWFsbHkgd2l0aG91dCBmaW5pc2hpbmcKKyAqIHRoZSByZWNvdmVyeSBwcm9j ZXNzLiBCeSBkZWZhdWx0LCBpdCB3YWl0cyBmb3JldmVyLgorICovCitzdGF0aWMgdm9pZAor d2FpdF9mb3JfZW5kX3JlY292ZXJ5KGNvbnN0IGNoYXIgKmNvbm5pbmZvLCBDcmVhdGVTdWJz Y3JpYmVyT3B0aW9ucyBvcHQpCit7CisJUEdjb25uCSAgICpjb25uOworCVBHcmVzdWx0ICAg KnJlczsKKwlpbnQJCQlzdGF0dXMgPSBQT1NUTUFTVEVSX1NUSUxMX1NUQVJUSU5HOworCWlu dAkJCXRpbWVyID0gMDsKKworCXBnX2xvZ19pbmZvKCJ3YWl0aW5nIHRoZSBwb3N0bWFzdGVy IHRvIHJlYWNoIHRoZSBjb25zaXN0ZW50IHN0YXRlIik7CisKKwljb25uID0gY29ubmVjdF9k YXRhYmFzZShjb25uaW5mbyk7CisJaWYgKGNvbm4gPT0gTlVMTCkKKwkJZXhpdCgxKTsKKwor CWZvciAoOzspCisJeworCQlib29sCQlpbl9yZWNvdmVyeTsKKworCQlyZXMgPSBQUWV4ZWMo Y29ubiwgIlNFTEVDVCBwZ19jYXRhbG9nLnBnX2lzX2luX3JlY292ZXJ5KCkiKTsKKworCQlp ZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJCQlwZ19mYXRh bCgiY291bGQgbm90IG9idGFpbiByZWNvdmVyeSBwcm9ncmVzcyIpOworCisJCWlmIChQUW50 dXBsZXMocmVzKSAhPSAxKQorCQkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgcmVzdWx0IGZyb20g cGdfaXNfaW5fcmVjb3ZlcnkgZnVuY3Rpb24iKTsKKworCQlpbl9yZWNvdmVyeSA9IChzdHJj bXAoUFFnZXR2YWx1ZShyZXMsIDAsIDApLCAidCIpID09IDApOworCisJCVBRY2xlYXIocmVz KTsKKworCQkvKgorCQkgKiBEb2VzIHRoZSByZWNvdmVyeSBwcm9jZXNzIGZpbmlzaD8gSW4g ZHJ5IHJ1biBtb2RlLCB0aGVyZSBpcyBubworCQkgKiByZWNvdmVyeSBtb2RlLiBCYWlsIG91 dCBhcyB0aGUgcmVjb3ZlcnkgcHJvY2VzcyBoYXMgZW5kZWQuCisJCSAqLworCQlpZiAoIWlu X3JlY292ZXJ5IHx8IGRyeV9ydW4pCisJCXsKKwkJCXN0YXR1cyA9IFBPU1RNQVNURVJfUkVB RFk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEJhaWwgb3V0IGFmdGVyIHJlY292 ZXJ5X3RpbWVvdXQgc2Vjb25kcyBpZiB0aGlzIG9wdGlvbiBpcyBzZXQuCisJCSAqLworCQlp ZiAob3B0LnJlY292ZXJ5X3RpbWVvdXQgPiAwICYmIHRpbWVyID49IG9wdC5yZWNvdmVyeV90 aW1lb3V0KQorCQl7CisJCQlzdG9wX3N0YW5kYnlfc2VydmVyKHBnX2N0bF9wYXRoLCBvcHQu c3Vic2NyaWJlcl9kaXIpOworCQkJcGdfZmF0YWwoInJlY292ZXJ5IHRpbWVkIG91dCIpOwor CQl9CisKKwkJLyogS2VlcCB3YWl0aW5nLiAqLworCQlwZ191c2xlZXAoV0FJVF9JTlRFUlZB TCAqIFVTRUNfUEVSX1NFQyk7CisKKwkJdGltZXIgKz0gV0FJVF9JTlRFUlZBTDsKKwl9CisK KwlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCisJaWYgKHN0YXR1cyA9PSBQT1NUTUFT VEVSX1NUSUxMX1NUQVJUSU5HKQorCQlwZ19mYXRhbCgic2VydmVyIGRpZCBub3QgZW5kIHJl Y292ZXJ5Iik7CisKKwlwZ19sb2dfaW5mbygicG9zdG1hc3RlciByZWFjaGVkIHRoZSBjb25z aXN0ZW50IHN0YXRlIik7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBwdWJsaWNhdGlvbiB0aGF0 IGluY2x1ZGVzIGFsbCB0YWJsZXMgaW4gdGhlIGRhdGFiYXNlLgorICovCitzdGF0aWMgdm9p ZAorY3JlYXRlX3B1YmxpY2F0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRi aW5mbykKK3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBH cmVzdWx0ICAgKnJlczsKKworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJLyogQ2hlY2sg aWYgdGhlIHB1YmxpY2F0aW9uIG5lZWRzIHRvIGJlIGNyZWF0ZWQuICovCisJYXBwZW5kUFFF eHBCdWZmZXIoc3RyLAorCQkJCQkgICJTRUxFQ1QgcHViYWxsdGFibGVzIEZST00gcGdfY2F0 YWxvZy5wZ19wdWJsaWNhdGlvbiBXSEVSRSBwdWJuYW1lID0gJyVzJyIsCisJCQkJCSAgZGJp bmZvLT5wdWJuYW1lKTsKKwlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlQUWNsZWFy KHJlcyk7CisJCVBRZmluaXNoKGNvbm4pOworCQlwZ19mYXRhbCgiY291bGQgbm90IG9idGFp biBwdWJsaWNhdGlvbiBpbmZvcm1hdGlvbjogJXMiLAorCQkJCSBQUXJlc3VsdEVycm9yTWVz c2FnZShyZXMpKTsKKwl9CisKKwlpZiAoUFFudHVwbGVzKHJlcykgPT0gMSkKKwl7CisJCS8q CisJCSAqIElmIHB1YmxpY2F0aW9uIG5hbWUgYWxyZWFkeSBleGlzdHMgYW5kIHB1YmFsbHRh YmxlcyBpcyB0cnVlLCBsZXQncworCQkgKiB1c2UgaXQuIEEgcHJldmlvdXMgcnVuIG9mIHBn X2NyZWF0ZXN1YnNjcmliZXIgbXVzdCBoYXZlIGNyZWF0ZWQKKwkJICogdGhpcyBwdWJsaWNh dGlvbi4gQmFpbCBvdXQuCisJCSAqLworCQlpZiAoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCAw LCAwKSwgInQiKSA9PSAwKQorCQl7CisJCQlwZ19sb2dfaW5mbygicHVibGljYXRpb24gXCIl c1wiIGFscmVhZHkgZXhpc3RzIiwgZGJpbmZvLT5wdWJuYW1lKTsKKwkJCXJldHVybjsKKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBVbmZvcnR1bmF0ZWx5LCBpZiBpdCByZWFj aGVzIHRoaXMgY29kZSBwYXRoLCBpdCB3aWxsIGFsd2F5cworCQkJICogZmFpbCAodW5sZXNz IHlvdSBkZWNpZGUgdG8gY2hhbmdlIHRoZSBleGlzdGluZyBwdWJsaWNhdGlvbgorCQkJICog bmFtZSkuIFRoYXQncyBiYWQgYnV0IGl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCB0aGUgdXNl ciB3aWxsCisJCQkgKiBjaG9vc2UgYSBuYW1lIHdpdGggcGdfY3JlYXRlc3Vic2NyaWJlcl8g cHJlZml4IGZvbGxvd2VkIGJ5IHRoZQorCQkJICogZXhhY3QgZGF0YWJhc2Ugb2lkIGluIHdo aWNoIHB1YmFsbHRhYmxlcyBpcyBmYWxzZS4KKwkJCSAqLworCQkJcGdfbG9nX2Vycm9yKCJw dWJsaWNhdGlvbiBcIiVzXCIgZG9lcyBub3QgcmVwbGljYXRlIGNoYW5nZXMgZm9yIGFsbCB0 YWJsZXMiLAorCQkJCQkJIGRiaW5mby0+cHVibmFtZSk7CisJCQlwZ19sb2dfZXJyb3JfaGlu dCgiQ29uc2lkZXIgcmVuYW1pbmcgdGhpcyBwdWJsaWNhdGlvbi4iKTsKKwkJCVBRY2xlYXIo cmVzKTsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCVBR Y2xlYXIocmVzKTsKKwlyZXNldFBRRXhwQnVmZmVyKHN0cik7CisKKwlwZ19sb2dfaW5mbygi Y3JlYXRpbmcgcHVibGljYXRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIGRiaW5m by0+cHVibmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3Ry LCAiQ1JFQVRFIFBVQkxJQ0FUSU9OICVzIEZPUiBBTEwgVEFCTEVTIiwgZGJpbmZvLT5wdWJu YW1lKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOwor CisJaWYgKCFkcnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7 CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXsK KwkJCVBRZmluaXNoKGNvbm4pOworCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgcHVi bGljYXRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIjogJXMiLAorCQkJCQkgZGJpbmZv LT5wdWJuYW1lLCBkYmluZm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQl9 CisJfQorCisJLyogZm9yIGNsZWFudXAgcHVycG9zZXMgKi8KKwlkYmluZm8tPm1hZGVfcHVi bGljYXRpb24gPSB0cnVlOworCisJaWYgKCFkcnlfcnVuKQorCQlQUWNsZWFyKHJlcyk7CisK KwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIFJlbW92ZSBwdWJsaWNh dGlvbiBpZiBpdCBjb3VsZG4ndCBmaW5pc2ggYWxsIHN0ZXBzLgorICovCitzdGF0aWMgdm9p ZAorZHJvcF9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmlu Zm8pCit7CisJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQR3Jl c3VsdCAgICpyZXM7CisKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCXBnX2xvZ19pbmZv KCJkcm9wcGluZyBwdWJsaWNhdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwgZGJp bmZvLT5wdWJuYW1lLCBkYmluZm8tPmRibmFtZSk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlcihz dHIsICJEUk9QIFBVQkxJQ0FUSU9OICVzIiwgZGJpbmZvLT5wdWJuYW1lKTsKKworCXBnX2xv Z19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCisJaWYgKCFkcnlfcnVu KQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisJCWlmIChQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCQlwZ19sb2dfZXJyb3IoImNv dWxkIG5vdCBkcm9wIHB1YmxpY2F0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCI6ICVz IiwgZGJpbmZvLT5wdWJuYW1lLCBkYmluZm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29u bikpOworCisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlkZXN0cm95UFFFeHBCdWZmZXIoc3Ry KTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHN1YnNjcmlwdGlvbiB3aXRoIHNvbWUgcHJlZGVm aW5lZCBvcHRpb25zLgorICoKKyAqIEEgcmVwbGljYXRpb24gc2xvdCB3YXMgYWxyZWFkeSBj cmVhdGVkIGluIGEgcHJldmlvdXMgc3RlcC4gTGV0J3MgdXNlIGl0LiBCeQorICogZGVmYXVs dCwgdGhlIHN1YnNjcmlwdGlvbiBuYW1lIGlzIHVzZWQgYXMgcmVwbGljYXRpb24gc2xvdCBu YW1lLiBJdCBpcworICogbm90IHJlcXVpcmVkIHRvIGNvcHkgZGF0YS4gVGhlIHN1YnNjcmlw dGlvbiB3aWxsIGJlIGNyZWF0ZWQgYnV0IGl0IHdpbGwgbm90CisgKiBiZSBlbmFibGVkIG5v dy4gVGhhdCdzIGJlY2F1c2UgdGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIG11c3QgYmUgc2V0 IGFuZCB0aGUKKyAqIHJlcGxpY2F0aW9uIG9yaWdpbiBuYW1lIChvbmUgb2YgdGhlIGZ1bmN0 aW9uIGFyZ3VtZW50cykgY29udGFpbnMgdGhlCisgKiBzdWJzY3JpcHRpb24gT0lEIGluIGl0 cyBuYW1lLiBPbmNlIHRoZSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCwKKyAqIHNldF9yZXBs aWNhdGlvbl9wcm9ncmVzcygpIGNhbiBvYnRhaW4gdGhlIGNob3NlbiBvcmlnaW4gbmFtZSBh bmQgc2V0IHVwIGl0cworICogaW5pdGlhbCBsb2NhdGlvbi4KKyAqLworc3RhdGljIHZvaWQK K2NyZWF0ZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJp bmZvKQoreworCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUEdy ZXN1bHQgICAqcmVzOworCisJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisKKwlwZ19sb2dfaW5m bygiY3JlYXRpbmcgc3Vic2NyaXB0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLCBk YmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVy KHN0ciwKKwkJCQkJICAiQ1JFQVRFIFNVQlNDUklQVElPTiAlcyBDT05ORUNUSU9OICclcycg UFVCTElDQVRJT04gJXMgIgorCQkJCQkgICJXSVRIIChjcmVhdGVfc2xvdCA9IGZhbHNlLCBj b3B5X2RhdGEgPSBmYWxzZSwgZW5hYmxlZCA9IGZhbHNlKSIsCisJCQkJCSAgZGJpbmZvLT5z dWJuYW1lLCBkYmluZm8tPnB1YmNvbm5pbmZvLCBkYmluZm8tPnB1Ym5hbWUpOworCisJcGdf bG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlpZiAoIWRyeV9y dW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJeworCQkJUFFmaW5pc2go Y29ubik7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBzdWJzY3JpcHRpb24gXCIl c1wiIG9uIGRhdGFiYXNlIFwiJXNcIjogJXMiLAorCQkJCQkgZGJpbmZvLT5zdWJuYW1lLCBk YmluZm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQl9CisJfQorCisJLyog Zm9yIGNsZWFudXAgcHVycG9zZXMgKi8KKwlkYmluZm8tPm1hZGVfc3Vic2NyaXB0aW9uID0g dHJ1ZTsKKworCWlmICghZHJ5X3J1bikKKwkJUFFjbGVhcihyZXMpOworCisJZGVzdHJveVBR RXhwQnVmZmVyKHN0cik7Cit9CisKKy8qCisgKiBSZW1vdmUgc3Vic2NyaXB0aW9uIGlmIGl0 IGNvdWxkbid0IGZpbmlzaCBhbGwgc3RlcHMuCisgKi8KK3N0YXRpYyB2b2lkCitkcm9wX3N1 YnNjcmlwdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCit7CisJ UFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQR3Jlc3VsdCAgICpy ZXM7CisKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCXBnX2xvZ19pbmZvKCJkcm9wcGlu ZyBzdWJzY3JpcHRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIGRiaW5mby0+c3Vi bmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLCAiRFJP UCBTVUJTQ1JJUFRJT04gJXMiLCBkYmluZm8tPnN1Ym5hbWUpOworCisJcGdfbG9nX2RlYnVn KCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJewor CQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90 IGRyb3Agc3Vic2NyaXB0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCI6ICVzIiwgZGJp bmZvLT5zdWJuYW1lLCBkYmluZm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwor CisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30K KworLyoKKyAqIFNldHMgdGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIHRvIHRoZSBjb25zaXN0 ZW50IExTTi4KKyAqCisgKiBUaGUgc3Vic2NyaWJlciBjYXVnaHQgdXAgdG8gdGhlIGNvbnNp c3RlbnQgTFNOIHByb3ZpZGVkIGJ5IHRoZSB0ZW1wb3JhcnkKKyAqIHJlcGxpY2F0aW9uIHNs b3QuIFRoZSBnb2FsIGlzIHRvIHNldCB1cCB0aGUgaW5pdGlhbCBsb2NhdGlvbiBmb3IgdGhl IGxvZ2ljYWwKKyAqIHJlcGxpY2F0aW9uIHRoYXQgaXMgdGhlIGV4YWN0IExTTiB0aGF0IHRo ZSBzdWJzY3JpYmVyIHdhcyBwcm9tb3RlZC4gT25jZSB0aGUKKyAqIHN1YnNjcmlwdGlvbiBp cyBlbmFibGVkIGl0IHdpbGwgc3RhcnQgc3RyZWFtaW5nIGZyb20gdGhhdCBsb2NhdGlvbiBv bndhcmRzLgorICogSW4gZHJ5IHJ1biBtb2RlLCB0aGUgc3Vic2NyaXB0aW9uIE9JRCBhbmQg TFNOIGFyZSBzZXQgdG8gaW52YWxpZCB2YWx1ZXMgZm9yCisgKiBwcmludGluZyBwdXJwb3Nl cy4KKyAqLworc3RhdGljIHZvaWQKK3NldF9yZXBsaWNhdGlvbl9wcm9ncmVzcyhQR2Nvbm4g KmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKmxzbikKK3sKKwlQ UUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAgKnJl czsKKwlPaWQJCQlzdWJvaWQ7CisJY2hhcgkJb3JpZ2lubmFtZVtOQU1FREFUQUxFTl07CisJ Y2hhcgkJbHNuc3RyWzE3ICsgMV07IC8qIE1BWFBHX0xTTkxFTiA9IDE3ICovCisKKwlBc3Nl cnQoY29ubiAhPSBOVUxMKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKKwkJCQkJICAi U0VMRUNUIG9pZCBGUk9NIHBnX2NhdGFsb2cucGdfc3Vic2NyaXB0aW9uIFdIRVJFIHN1Ym5h bWUgPSAnJXMnIiwgZGJpbmZvLT5zdWJuYW1lKTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBz dHItPmRhdGEpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19P SykKKwl7CisJCVBRY2xlYXIocmVzKTsKKwkJUFFmaW5pc2goY29ubik7CisJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb2J0YWluIHN1YnNjcmlwdGlvbiBPSUQ6ICVzIiwKKwkJCQkgUFFyZXN1 bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJfQorCisJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEg JiYgIWRyeV9ydW4pCisJeworCQlQUWNsZWFyKHJlcyk7CisJCVBRZmluaXNoKGNvbm4pOwor CQlwZ19mYXRhbCgiY291bGQgbm90IG9idGFpbiBzdWJzY3JpcHRpb24gT0lEOiBnb3QgJWQg cm93cywgZXhwZWN0ZWQgJWQgcm93cyIsCisJCQkJIFBRbnR1cGxlcyhyZXMpLCAxKTsKKwl9 CisKKwlpZiAoZHJ5X3J1bikKKwl7CisJCXN1Ym9pZCA9IEludmFsaWRPaWQ7CisJCXNucHJp bnRmKGxzbnN0ciwgc2l6ZW9mKGxzbnN0ciksICIlWC8lWCIsIExTTl9GT1JNQVRfQVJHUygo WExvZ1JlY1B0cikgSW52YWxpZFhMb2dSZWNQdHIpKTsKKwl9CisJZWxzZQorCXsKKwkJc3Vi b2lkID0gc3RydG91bChQUWdldHZhbHVlKHJlcywgMCwgMCksIE5VTEwsIDEwKTsKKwkJc25w cmludGYobHNuc3RyLCBzaXplb2YobHNuc3RyKSwgIiVzIiwgbHNuKTsKKwl9CisKKwkvKgor CSAqIFRoZSBvcmlnaW4gbmFtZSBpcyBkZWZpbmVkIGFzIHBnXyV1LiAldSBpcyB0aGUgc3Vi c2NyaXB0aW9uIE9JRC4gU2VlCisJICogQXBwbHlXb3JrZXJNYWluKCkuCisJICovCisJc25w cmludGYob3JpZ2lubmFtZSwgc2l6ZW9mKG9yaWdpbm5hbWUpLCAicGdfJXUiLCBzdWJvaWQp OworCisJUFFjbGVhcihyZXMpOworCisJcGdfbG9nX2luZm8oInNldHRpbmcgdGhlIHJlcGxp Y2F0aW9uIHByb2dyZXNzIChub2RlIG5hbWUgXCIlc1wiIDsgTFNOICVzKSBvbiBkYXRhYmFz ZSBcIiVzXCIiLAorCQkJCW9yaWdpbm5hbWUsIGxzbnN0ciwgZGJpbmZvLT5kYm5hbWUpOwor CisJcmVzZXRQUUV4cEJ1ZmZlcihzdHIpOworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKKwkJ CQkJICAiU0VMRUNUIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fb3JpZ2luX2FkdmFuY2Uo JyVzJywgJyVzJykiLCBvcmlnaW5uYW1lLCBsc25zdHIpOworCisJcGdfbG9nX2RlYnVnKCJj b21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJeworCQly ZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJl cykgIT0gUEdSRVNfVFVQTEVTX09LKQorCQl7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgc2V0IHJlcGxpY2F0aW9uIHByb2dyZXNzIGZvciB0aGUgc3Vi c2NyaXB0aW9uIFwiJXNcIjogJXMiLAorCQkJCQkgZGJpbmZvLT5zdWJuYW1lLCBQUXJlc3Vs dEVycm9yTWVzc2FnZShyZXMpKTsKKwkJfQorCisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlk ZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIEVuYWJsZXMgdGhlIHN1YnNj cmlwdGlvbi4KKyAqCisgKiBUaGUgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkIGluIGEgcHJl dmlvdXMgc3RlcCBidXQgaXQgd2FzIGRpc2FibGVkLiBBZnRlcgorICogYWRqdXN0aW5nIHRo ZSBpbml0aWFsIGxvY2F0aW9uLCBlbmFibGluZyB0aGUgc3Vic2NyaXB0aW9uIGlzIHRoZSBs YXN0IHN0ZXAKKyAqIG9mIHRoaXMgc2V0dXAuCisgKi8KK3N0YXRpYyB2b2lkCitlbmFibGVf c3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKK3sK KwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAg KnJlczsKKworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJcGdfbG9nX2luZm8oImVuYWJs aW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwgZGJpbmZvLT5z dWJuYW1lLCBkYmluZm8tPmRibmFtZSk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsICJB TFRFUiBTVUJTQ1JJUFRJT04gJXMgRU5BQkxFIiwgZGJpbmZvLT5zdWJuYW1lKTsKKworCXBn X2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCisJaWYgKCFkcnlf cnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisJCWlmIChQUXJl c3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXsKKwkJCVBRZmluaXNo KGNvbm4pOworCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBlbmFibGUgc3Vic2NyaXB0aW9uIFwi JXNcIjogJXMiLCBkYmluZm8tPnN1Ym5hbWUsCisJCQkJCSBQUWVycm9yTWVzc2FnZShjb25u KSk7CisJCX0KKworCQlQUWNsZWFyKHJlcyk7CisJfQorCisJZGVzdHJveVBRRXhwQnVmZmVy KHN0cik7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3Rh dGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPQorCXsKKwkJeyJoZWxwIiwgbm9f YXJndW1lbnQsIE5VTEwsICc/J30sCisJCXsidmVyc2lvbiIsIG5vX2FyZ3VtZW50LCBOVUxM LCAnVid9LAorCQl7InBnZGF0YSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnRCd9LAor CQl7InB1Ymxpc2hlci1zZXJ2ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwK KwkJeyJzdWJzY3JpYmVyLXNlcnZlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUyd9 LAorCQl7ImRhdGFiYXNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJ30sCisJCXsi ZHJ5LXJ1biIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnbid9LAorCQl7InJlY292ZXJ5LXRpbWVv dXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3QnfSwKKwkJeyJyZXRhaW4iLCBub19h cmd1bWVudCwgTlVMTCwgJ3InfSwKKwkJeyJ2ZXJib3NlIiwgbm9fYXJndW1lbnQsIE5VTEws ICd2J30sCisJCXtOVUxMLCAwLCBOVUxMLCAwfQorCX07CisKKwlDcmVhdGVTdWJzY3JpYmVy T3B0aW9ucyBvcHQ7CisKKwlpbnQJCQljOworCWludAkJCW9wdGlvbl9pbmRleDsKKworCWNo YXIJICAgKnNlcnZlcl9zdGFydF9sb2c7CisKKwljaGFyCSAgICpwdWJfYmFzZV9jb25uaW5m byA9IE5VTEw7CisJY2hhcgkgICAqc3ViX2Jhc2VfY29ubmluZm8gPSBOVUxMOworCWNoYXIJ ICAgKmRibmFtZV9jb25uaW5mbyA9IE5VTEw7CisJY2hhcgkJdGVtcF9yZXBsc2xvdFtOQU1F REFUQUxFTl0gPSB7MH07CisKKwl1aW50NjQJCXB1Yl9zeXNpZDsKKwl1aW50NjQJCXN1Yl9z eXNpZDsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJUEdjb25uCSAgICpjb25uOworCWNo YXIJICAgKmNvbnNpc3RlbnRfbHNuOworCisJUFFFeHBCdWZmZXIgcmVjb3Zlcnljb25mY29u dGVudHMgPSBOVUxMOworCisJY2hhcgkJcGlkZmlsZVtNQVhQR1BBVEhdOworCisJcGdfbG9n Z2luZ19pbml0KGFyZ3ZbMF0pOworCXBnX2xvZ2dpbmdfc2V0X2xldmVsKFBHX0xPR19XQVJO SU5HKTsKKwlwcm9nbmFtZSA9IGdldF9wcm9nbmFtZShhcmd2WzBdKTsKKwlzZXRfcGdsb2Nh bGVfcGdzZXJ2aWNlKGFyZ3ZbMF0sIFBHX1RFWFRET01BSU4oInBnX2NyZWF0ZXN1YnNjcmli ZXIiKSk7CisKKwlpZiAoYXJnYyA+IDEpCisJeworCQlpZiAoc3RyY21wKGFyZ3ZbMV0sICIt LWhlbHAiKSA9PSAwIHx8IHN0cmNtcChhcmd2WzFdLCAiLT8iKSA9PSAwKQorCQl7CisJCQl1 c2FnZSgpOworCQkJZXhpdCgwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoYXJndlsxXSwg Ii1WIikgPT0gMAorCQkJCSB8fCBzdHJjbXAoYXJndlsxXSwgIi0tdmVyc2lvbiIpID09IDAp CisJCXsKKwkJCXB1dHMoInBnX2NyZWF0ZXN1YnNjcmliZXIgKFBvc3RncmVTUUwpICIgUEdf VkVSU0lPTik7CisJCQlleGl0KDApOworCQl9CisJfQorCisJbWVtc2V0KCZvcHQsIDAsIHNp emVvZihDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucykpOworCisJLyogRGVmYXVsdCBzZXR0aW5n cyAqLworCW9wdC5zdWJzY3JpYmVyX2RpciA9IE5VTEw7CisJb3B0LnB1Yl9jb25uaW5mb19z dHIgPSBOVUxMOworCW9wdC5zdWJfY29ubmluZm9fc3RyID0gTlVMTDsKKwlvcHQuZGF0YWJh c2VfbmFtZXMgPSAoU2ltcGxlU3RyaW5nTGlzdCkKKwl7CisJCU5VTEwsIE5VTEwKKwl9Owor CW9wdC5yZXRhaW4gPSBmYWxzZTsKKwlvcHQucmVjb3ZlcnlfdGltZW91dCA9IDA7CisKKwkv KgorCSAqIERvbid0IGFsbG93IGl0IHRvIGJlIHJ1biBhcyByb290LiBJdCB1c2VzIHBnX2N0 bCB3aGljaCBkb2VzIG5vdCBhbGxvdworCSAqIGl0IGVpdGhlci4KKwkgKi8KKyNpZm5kZWYg V0lOMzIKKwlpZiAoZ2V0ZXVpZCgpID09IDApCisJeworCQlwZ19sb2dfZXJyb3IoImNhbm5v dCBiZSBleGVjdXRlZCBieSBcInJvb3RcIiIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiWW91 IG11c3QgcnVuICVzIGFzIHRoZSBQb3N0Z3JlU1FMIHN1cGVydXNlci4iLAorCQkJCQkJICBw cm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorI2VuZGlmCisKKwlnZXRfcmVzdHJpY3RlZF90 b2tlbigpOworCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIkQ6UDpT OmQ6bnJ0OnYiLAorCQkJCQkJCWxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCkpICE9IC0x KQorCXsKKwkJc3dpdGNoIChjKQorCQl7CisJCQljYXNlICdEJzoKKwkJCQlvcHQuc3Vic2Ny aWJlcl9kaXIgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1An OgorCQkJCW9wdC5wdWJfY29ubmluZm9fc3RyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJ YnJlYWs7CisJCQljYXNlICdTJzoKKwkJCQlvcHQuc3ViX2Nvbm5pbmZvX3N0ciA9IHBnX3N0 cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnZCc6CisJCQkJLyogSWdub3Jl IGR1cGxpY2F0ZWQgZGF0YWJhc2UgbmFtZXMuICovCisJCQkJaWYgKCFzaW1wbGVfc3RyaW5n X2xpc3RfbWVtYmVyKCZvcHQuZGF0YWJhc2VfbmFtZXMsIG9wdGFyZykpCisJCQkJeworCQkJ CQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZvcHQuZGF0YWJhc2VfbmFtZXMsIG9wdGFy Zyk7CisJCQkJCW51bV9kYnMrKzsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoK KwkJCQlkcnlfcnVuID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3InOgorCQkJCW9w dC5yZXRhaW4gPSB0cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSAndCc6CisJCQkJb3B0LnJl Y292ZXJ5X3RpbWVvdXQgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICd2 JzoKKwkJCQlwZ19sb2dnaW5nX2luY3JlYXNlX3ZlcmJvc2l0eSgpOworCQkJCWJyZWFrOwor CQkJZGVmYXVsdDoKKwkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQgYSBjb21w bGFpbnQgKi8KKwkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9y IG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJCWV4aXQoMSk7CisJCX0KKwl9 CisKKwkvKgorCSAqIEFueSBub24tb3B0aW9uIGFyZ3VtZW50cz8KKwkgKi8KKwlpZiAob3B0 aW5kIDwgYXJnYykKKwl7CisJCXBnX2xvZ19lcnJvcigidG9vIG1hbnkgY29tbWFuZC1saW5l IGFyZ3VtZW50cyAoZmlyc3QgaXMgXCIlc1wiKSIsCisJCQkJCSBhcmd2W29wdGluZF0pOwor CQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3Jt YXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0KDEpOworCX0KKworCS8qCisJICogUmVxdWly ZWQgYXJndW1lbnRzCisJICovCisJaWYgKG9wdC5zdWJzY3JpYmVyX2RpciA9PSBOVUxMKQor CXsKKwkJcGdfbG9nX2Vycm9yKCJubyBzdWJzY3JpYmVyIGRhdGEgZGlyZWN0b3J5IHNwZWNp ZmllZCIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1v cmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0KDEpOworCX0KKworCS8qCisJ ICogUGFyc2UgY29ubmVjdGlvbiBzdHJpbmcuIEJ1aWxkIGEgYmFzZSBjb25uZWN0aW9uIHN0 cmluZyB0aGF0IG1pZ2h0IGJlCisJICogcmV1c2VkIGJ5IG11bHRpcGxlIGRhdGFiYXNlcy4K KwkgKi8KKwlpZiAob3B0LnB1Yl9jb25uaW5mb19zdHIgPT0gTlVMTCkKKwl7CisJCS8qCisJ CSAqIFRPRE8gdXNlIHByaW1hcnlfY29ubmluZm8gKGlmIGF2YWlsYWJsZSkgZnJvbSBzdWJz Y3JpYmVyIGFuZAorCQkgKiBleHRyYWN0IHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0cmluZy4g QXNzdW1lIHRoYXQgdGhlcmUgYXJlCisJCSAqIGlkZW50aWNhbCBlbnRyaWVzIGZvciBwaHlz aWNhbCBhbmQgbG9naWNhbCByZXBsaWNhdGlvbi4gSWYgdGhlcmUgaXMKKwkJICogbm90LCB3 ZSB3b3VsZCBmYWlsIGFueXdheS4KKwkJICovCisJCXBnX2xvZ19lcnJvcigibm8gcHVibGlz aGVyIGNvbm5lY3Rpb24gc3RyaW5nIHNwZWNpZmllZCIpOworCQlwZ19sb2dfZXJyb3JfaGlu dCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUp OworCQlleGl0KDEpOworCX0KKwlwdWJfYmFzZV9jb25uaW5mbyA9IGdldF9iYXNlX2Nvbm5p bmZvKG9wdC5wdWJfY29ubmluZm9fc3RyLCBkYm5hbWVfY29ubmluZm8sCisJCQkJCQkJCQkJ ICAicHVibGlzaGVyIik7CisJaWYgKHB1Yl9iYXNlX2Nvbm5pbmZvID09IE5VTEwpCisJCWV4 aXQoMSk7CisKKwlpZiAob3B0LnN1Yl9jb25uaW5mb19zdHIgPT0gTlVMTCkKKwl7CisJCXBn X2xvZ19lcnJvcigibm8gc3Vic2NyaWJlciBjb25uZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQi KTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGlu Zm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJc3ViX2Jhc2VfY29u bmluZm8gPSBnZXRfYmFzZV9jb25uaW5mbyhvcHQuc3ViX2Nvbm5pbmZvX3N0ciwgTlVMTCwg InN1YnNjcmliZXIiKTsKKwlpZiAoc3ViX2Jhc2VfY29ubmluZm8gPT0gTlVMTCkKKwkJZXhp dCgxKTsKKworCWlmIChvcHQuZGF0YWJhc2VfbmFtZXMuaGVhZCA9PSBOVUxMKQorCXsKKwkJ cGdfbG9nX2luZm8oIm5vIGRhdGFiYXNlIHdhcyBzcGVjaWZpZWQiKTsKKworCQkvKgorCQkg KiBJZiAtLWRhdGFiYXNlIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQsIHRyeSB0byBvYnRhaW4g dGhlIGRibmFtZSBmcm9tCisJCSAqIHRoZSBwdWJsaXNoZXIgY29ubmluZm8uIElmIGRibmFt ZSBwYXJhbWV0ZXIgaXMgbm90IGF2YWlsYWJsZSwgZXJyb3IKKwkJICogb3V0LgorCQkgKi8K KwkJaWYgKGRibmFtZV9jb25uaW5mbykKKwkJeworCQkJc2ltcGxlX3N0cmluZ19saXN0X2Fw cGVuZCgmb3B0LmRhdGFiYXNlX25hbWVzLCBkYm5hbWVfY29ubmluZm8pOworCQkJbnVtX2Ri cysrOworCisJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgXCIlc1wiIHdhcyBleHRyYWN0ZWQg ZnJvbSB0aGUgcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nIiwKKwkJCQkJCWRibmFtZV9j b25uaW5mbyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm5vIGRhdGFi YXNlIG5hbWUgc3BlY2lmaWVkIik7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMg LS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJZXhpdCgx KTsKKwkJfQorCX0KKworCS8qCisJICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHBnX2N0 bCBhbmQgcGdfcmVzZXR3YWwgb24gdGhlIHN1YnNjcmliZXIuCisJICovCisJaWYgKCFnZXRf ZXhlY19wYXRoKGFyZ3ZbMF0pKQorCQlleGl0KDEpOworCisJLyogcnVkaW1lbnRhcnkgY2hl Y2sgZm9yIGEgZGF0YSBkaXJlY3RvcnkuICovCisJaWYgKCFjaGVja19kYXRhX2RpcmVjdG9y eShvcHQuc3Vic2NyaWJlcl9kaXIpKQorCQlleGl0KDEpOworCisJLyogU3RvcmUgZGF0YWJh c2UgaW5mb3JtYXRpb24gZm9yIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gKi8KKwlkYmlu Zm8gPSBzdG9yZV9wdWJfc3ViX2luZm8ob3B0LmRhdGFiYXNlX25hbWVzLCBwdWJfYmFzZV9j b25uaW5mbywgc3ViX2Jhc2VfY29ubmluZm8pOworCisJLyogUmVnaXN0ZXIgYSBmdW5jdGlv biB0byBjbGVhbiB1cCBvYmplY3RzIGluIGNhc2Ugb2YgZmFpbHVyZS4gKi8KKwlhdGV4aXQo Y2xlYW51cF9vYmplY3RzX2F0ZXhpdCk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBzdWJz Y3JpYmVyIGRhdGEgZGlyZWN0b3J5IGhhcyB0aGUgc2FtZSBzeXN0ZW0gaWRlbnRpZmllcgor CSAqIHRoYW4gdGhlIHB1Ymxpc2hlciBkYXRhIGRpcmVjdG9yeS4KKwkgKi8KKwlwdWJfc3lz aWQgPSBnZXRfcHJpbWFyeV9zeXNpZChkYmluZm9bMF0ucHViY29ubmluZm8pOworCXN1Yl9z eXNpZCA9IGdldF9zdGFuZGJ5X3N5c2lkKG9wdC5zdWJzY3JpYmVyX2Rpcik7CisJaWYgKHB1 Yl9zeXNpZCAhPSBzdWJfc3lzaWQpCisJCXBnX2ZhdGFsKCJzdWJzY3JpYmVyIGRhdGEgZGly ZWN0b3J5IGlzIG5vdCBhIGNvcHkgb2YgdGhlIHNvdXJjZSBkYXRhYmFzZSBjbHVzdGVyIik7 CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSB0byBzdG9yZSBhbnkg ZGF0YSBnZW5lcmF0ZWQgYnkgdGhpcyB0b29sLgorCSAqLworCXNlcnZlcl9zdGFydF9sb2cg PSBzZXR1cF9zZXJ2ZXJfbG9nZmlsZShvcHQuc3Vic2NyaWJlcl9kaXIpOworCisJLyogc3Vi c2NyaWJlciBQSUQgZmlsZS4gKi8KKwlzbnByaW50ZihwaWRmaWxlLCBNQVhQR1BBVEgsICIl cy9wb3N0bWFzdGVyLnBpZCIsIG9wdC5zdWJzY3JpYmVyX2Rpcik7CisKKwkvKgorCSAqIFRo ZSBzdGFuZGJ5IHNlcnZlciBtdXN0IGJlIHJ1bm5pbmcuIFRoYXQncyBiZWNhdXNlIHNvbWUg Y2hlY2tzIHdpbGwgYmUKKwkgKiBkb25lIChpcyBpdCByZWFkeSBmb3IgYSBsb2dpY2FsIHJl cGxpY2F0aW9uIHNldHVwPykuIEFmdGVyIHRoYXQsIHN0b3AKKwkgKiB0aGUgc3Vic2NyaWJl ciBpbiBwcmVwYXJhdGlvbiB0byBtb2RpZnkgc29tZSByZWNvdmVyeSBwYXJhbWV0ZXJzIHRo YXQKKwkgKiByZXF1aXJlIGEgcmVzdGFydC4KKwkgKi8KKwlpZiAoc3RhdChwaWRmaWxlLCAm c3RhdGJ1ZikgPT0gMCkKKwl7CisJCS8qCisJCSAqIENoZWNrIGlmIHRoZSBzdGFuZGJ5IHNl cnZlciBpcyByZWFkeSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbi4KKwkJICovCisJCWlmICgh Y2hlY2tfc3Vic2NyaWJlcihkYmluZm8pKQorCQkJZXhpdCgxKTsKKworCQkvKgorCQkgKiBD aGVjayBpZiB0aGUgcHJpbWFyeSBzZXJ2ZXIgaXMgcmVhZHkgZm9yIGxvZ2ljYWwgcmVwbGlj YXRpb24uIFRoaXMKKwkJICogcm91dGluZSBjaGVja3MgaWYgYSByZXBsaWNhdGlvbiBzbG90 IGlzIGluIHVzZSBvbiBwcmltYXJ5IHNvIGl0CisJCSAqIHJlbGllcyBvbiBjaGVja19zdWJz Y3JpYmVyKCkgdG8gb2J0YWluIHRoZSBwcmltYXJ5X3Nsb3RfbmFtZS4KKwkJICogVGhhdCdz IHdoeSBpdCBpcyBjYWxsZWQgYWZ0ZXIgaXQuCisJCSAqLworCQlpZiAoIWNoZWNrX3B1Ymxp c2hlcihkYmluZm8pKQorCQkJZXhpdCgxKTsKKworCQkvKgorCQkgKiBDcmVhdGUgdGhlIHJl cXVpcmVkIG9iamVjdHMgZm9yIGVhY2ggZGF0YWJhc2Ugb24gcHVibGlzaGVyLiBUaGlzCisJ CSAqIHN0ZXAgaXMgaGVyZSBtYWlubHkgYmVjYXVzZSBpZiB3ZSBzdG9wIHRoZSBzdGFuZGJ5 IHdlIGNhbm5vdCB2ZXJpZnkKKwkJICogaWYgdGhlIHByaW1hcnkgc2xvdCBpcyBpbiB1c2Uu IFdlIGNvdWxkIHVzZSBhbiBleHRyYSBjb25uZWN0aW9uIGZvcgorCQkgKiBpdCBidXQgaXQg ZG9lc24ndCBzZWVtIHdvcnRoLgorCQkgKi8KKwkJaWYgKCFzZXR1cF9wdWJsaXNoZXIoZGJp bmZvKSkKKwkJCWV4aXQoMSk7CisKKwkJLyogU3RvcCB0aGUgc3RhbmRieSBzZXJ2ZXIuICov CisJCXBnX2xvZ19pbmZvKCJzdGFuZGJ5IGlzIHVwIGFuZCBydW5uaW5nIik7CisJCXBnX2xv Z19pbmZvKCJzdG9wcGluZyB0aGUgc2VydmVyIHRvIHN0YXJ0IHRoZSB0cmFuc2Zvcm1hdGlv biBzdGVwcyIpOworCQlzdG9wX3N0YW5kYnlfc2VydmVyKHBnX2N0bF9wYXRoLCBvcHQuc3Vi c2NyaWJlcl9kaXIpOworCX0KKwllbHNlCisJeworCQlwZ19sb2dfZXJyb3IoInN0YW5kYnkg aXMgbm90IHJ1bm5pbmciKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlN0YXJ0IHRoZSBzdGFu ZGJ5IGFuZCB0cnkgYWdhaW4uIik7CisJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBDcmVh dGUgYSB0ZW1wb3JhcnkgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90IHRvIGdldCBhIGNvbnNp c3RlbnQgTFNOLgorCSAqCisJICogVGhpcyBjb25zaXN0ZW50IExTTiB3aWxsIGJlIHVzZWQg bGF0ZXIgdG8gYWR2YW5jZWQgdGhlIHJlY2VudGx5IGNyZWF0ZWQKKwkgKiByZXBsaWNhdGlv biBzbG90cy4gSXQgaXMgb2sgdG8gdXNlIGEgdGVtcG9yYXJ5IHJlcGxpY2F0aW9uIHNsb3Qg aGVyZQorCSAqIGJlY2F1c2UgaXQgd2lsbCBoYXZlIGEgc2hvcnQgbGlmZXRpbWUgYW5kIGl0 IGlzIG9ubHkgdXNlZCBhcyBhIG1hcmsgdG8KKwkgKiBzdGFydCB0aGUgbG9naWNhbCByZXBs aWNhdGlvbi4KKwkgKgorCSAqIFhYWCB3ZSBzaG91bGQgcHJvYmFibHkgdXNlIHRoZSBsYXN0 IGNyZWF0ZWQgcmVwbGljYXRpb24gc2xvdCB0byBnZXQgYQorCSAqIGNvbnNpc3RlbnQgTFNO IGJ1dCBpdCBzaG91bGQgYmUgY2hhbmdlZCBhZnRlciBhZGRpbmcgcGdfYmFzZWJhY2t1cAor CSAqIHN1cHBvcnQuCisJICovCisJY29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvWzBd LnB1YmNvbm5pbmZvKTsKKwlpZiAoY29ubiA9PSBOVUxMKQorCQlleGl0KDEpOworCWNvbnNp c3RlbnRfbHNuID0gY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdChjb25uLCAmZGJp bmZvWzBdLAorCQkJCQkJCQkJCQkJCSB0ZW1wX3JlcGxzbG90KTsKKworCS8qCisJICogV3Jp dGUgcmVjb3ZlcnkgcGFyYW1ldGVycy4KKwkgKgorCSAqIERlc3BpdGUgb2YgdGhlIHJlY292 ZXJ5IHBhcmFtZXRlcnMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdWJzY3JpYmVyLAorCSAq IHVzZSBhIHB1Ymxpc2hlciBjb25uZWN0aW9uIGZvciB0aGUgZm9sbHdpbmcgcmVjb3Zlcnkg ZnVuY3Rpb25zLiBUaGUKKwkgKiBjb25uZWN0aW9uIGlzIG9ubHkgdXNlZCB0byBjaGVjayB0 aGUgY3VycmVudCBzZXJ2ZXIgdmVyc2lvbiAocGh5c2ljYWwKKwkgKiByZXBsaWNhLCBzYW1l IHNlcnZlciB2ZXJzaW9uKS4gVGhlIHN1YnNjcmliZXIgaXMgbm90IHJ1bm5pbmcgeWV0LiBJ bgorCSAqIGRyeSBydW4gbW9kZSwgdGhlIHJlY292ZXJ5IHBhcmFtZXRlcnMgKndvbid0KiBi ZSB3cml0dGVuLiBBbiBpbnZhbGlkCisJICogTFNOIGlzIHVzZWQgZm9yIHByaW50aW5nIHB1 cnBvc2VzLgorCSAqLworCXJlY292ZXJ5Y29uZmNvbnRlbnRzID0gR2VuZXJhdGVSZWNvdmVy eUNvbmZpZyhjb25uLCBOVUxMKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZj b250ZW50cywgInJlY292ZXJ5X3RhcmdldF9pbmNsdXNpdmUgPSB0cnVlXG4iKTsKKwlhcHBl bmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywgInJlY292ZXJ5X3RhcmdldF9h Y3Rpb24gPSBwcm9tb3RlXG4iKTsKKworCWlmIChkcnlfcnVuKQorCXsKKwkJYXBwZW5kUFFF eHBCdWZmZXIocmVjb3Zlcnljb25mY29udGVudHMsICIjIGRyeSBydW4gbW9kZSIpOworCQlh cHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywgInJlY292ZXJ5X3Rhcmdl dF9sc24gPSAnJVgvJVgnXG4iLAorCQkJCQkJICBMU05fRk9STUFUX0FSR1MoKFhMb2dSZWNQ dHIpIEludmFsaWRYTG9nUmVjUHRyKSk7CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZFBRRXhw QnVmZmVyKHJlY292ZXJ5Y29uZmNvbnRlbnRzLCAicmVjb3ZlcnlfdGFyZ2V0X2xzbiA9ICcl cydcbiIsCisJCQkJCQkgIGNvbnNpc3RlbnRfbHNuKTsKKwkJV3JpdGVSZWNvdmVyeUNvbmZp Zyhjb25uLCBvcHQuc3Vic2NyaWJlcl9kaXIsIHJlY292ZXJ5Y29uZmNvbnRlbnRzKTsKKwl9 CisJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKworCXBnX2xvZ19kZWJ1ZygicmVjb3Zl cnkgcGFyYW1ldGVyczpcbiVzIiwgcmVjb3Zlcnljb25mY29udGVudHMtPmRhdGEpOworCisJ LyoKKwkgKiBTdGFydCBzdWJzY3JpYmVyIGFuZCB3YWl0IHVudGlsIGFjY2VwdGluZyBjb25u ZWN0aW9ucy4KKwkgKi8KKwlwZ19sb2dfaW5mbygic3RhcnRpbmcgdGhlIHN1YnNjcmliZXIi KTsKKwlzdGFydF9zdGFuZGJ5X3NlcnZlcihwZ19jdGxfcGF0aCwgb3B0LnN1YnNjcmliZXJf ZGlyLCBzZXJ2ZXJfc3RhcnRfbG9nKTsKKworCS8qCisJICogV2FpdGluZyB0aGUgc3Vic2Ny aWJlciB0byBiZSBwcm9tb3RlZC4KKwkgKi8KKwl3YWl0X2Zvcl9lbmRfcmVjb3ZlcnkoZGJp bmZvWzBdLnN1YmNvbm5pbmZvLCBvcHQpOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIHN1YnNj cmlwdGlvbiBmb3IgZWFjaCBkYXRhYmFzZSBvbiBzdWJzY3JpYmVyLiBJdCBkb2VzIG5vdAor CSAqIGVuYWJsZSBpdCBpbW1lZGlhdGVseSBiZWNhdXNlIGl0IG5lZWRzIHRvIGFkanVzdCB0 aGUgbG9naWNhbAorCSAqIHJlcGxpY2F0aW9uIHN0YXJ0IHBvaW50IHRvIHRoZSBMU04gcmVw b3J0ZWQgYnkgY29uc2lzdGVudF9sc24gKHNlZQorCSAqIHNldF9yZXBsaWNhdGlvbl9wcm9n cmVzcykuIEl0IGFsc28gY2xlYW5zIHVwIHB1YmxpY2F0aW9ucyBjcmVhdGVkIGJ5CisJICog dGhpcyB0b29sIGFuZCByZXBsaWNhdGlvbiB0byB0aGUgc3RhbmRieS4KKwkgKi8KKwlpZiAo IXNldHVwX3N1YnNjcmliZXIoZGJpbmZvLCBjb25zaXN0ZW50X2xzbikpCisJCWV4aXQoMSk7 CisKKwkvKgorCSAqIElmIHRoZSBwcmltYXJ5X3Nsb3RfbmFtZSBleGlzdHMgb24gcHJpbWFy eSwgZHJvcCBpdC4KKwkgKgorCSAqIFhYWCB3ZSBtaWdodCBub3QgZmFpbCBoZXJlLiBJbnN0 ZWFkLCB3ZSBwcm92aWRlIGEgd2FybmluZyBzbyB0aGUgdXNlcgorCSAqIGV2ZW50dWFsbHkg ZHJvcHMgdGhpcyByZXBsaWNhdGlvbiBzbG90IGxhdGVyLgorCSAqLworCWlmIChwcmltYXJ5 X3Nsb3RfbmFtZSAhPSBOVUxMKQorCXsKKwkJY29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoZGJp bmZvWzBdLnB1YmNvbm5pbmZvKTsKKwkJaWYgKGNvbm4gIT0gTlVMTCkKKwkJeworCQkJZHJv cF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9bMF0sIHByaW1hcnlfc2xvdF9uYW1l KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBnX2xvZ193YXJuaW5nKCJjb3VsZCBub3QgZHJv cCByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBvbiBwcmltYXJ5IiwgcHJpbWFyeV9zbG90X25h bWUpOworCQkJcGdfbG9nX3dhcm5pbmdfaGludCgiRHJvcCB0aGlzIHJlcGxpY2F0aW9uIHNs b3Qgc29vbiB0byBhdm9pZCByZXRlbnRpb24gb2YgV0FMIGZpbGVzLiIpOworCQl9CisJCWRp c2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CisJfQorCisJLyoKKwkgKiBTdG9wIHRoZSBzdWJz Y3JpYmVyLgorCSAqLworCXBnX2xvZ19pbmZvKCJzdG9wcGluZyB0aGUgc3Vic2NyaWJlciIp OworCXN0b3Bfc3RhbmRieV9zZXJ2ZXIocGdfY3RsX3BhdGgsIG9wdC5zdWJzY3JpYmVyX2Rp cik7CisKKwkvKgorCSAqIENoYW5nZSBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIHN1YnNjcmli ZXIuCisJICovCisJbW9kaWZ5X3N1YnNjcmliZXJfc3lzaWQocGdfcmVzZXR3YWxfcGF0aCwg b3B0KTsKKworCS8qCisJICogVGhlIGxvZyBmaWxlIGlzIGtlcHQgaWYgcmV0YWluIG9wdGlv biBpcyBzcGVjaWZpZWQgb3IgdGhpcyB0b29sIGRvZXMKKwkgKiBub3QgcnVuIHN1Y2Nlc3Nm dWxseS4gT3RoZXJ3aXNlLCBsb2cgZmlsZSBpcyByZW1vdmVkLgorCSAqLworCWlmICghb3B0 LnJldGFpbikKKwkJdW5saW5rKHNlcnZlcl9zdGFydF9sb2cpOworCisJc3VjY2VzcyA9IHRy dWU7CisKKwlwZ19sb2dfaW5mbygiRG9uZSEiKTsKKworCXJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX2NyZWF0ZXN1YnNjcmliZXIu cGwgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5w bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wZjAyYjFiZmFjCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX2NyZWF0 ZXN1YnNjcmliZXIucGwKQEAgLTAsMCArMSw0NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMKKyMgVGVzdCBjaGVj a2luZyBvcHRpb25zIG9mIHBnX2NyZWF0ZXN1YnNjcmliZXIuCisjCisKK3VzZSBzdHJpY3Q7 Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVz dDo6TW9yZTsKKworcHJvZ3JhbV9oZWxwX29rKCdwZ19jcmVhdGVzdWJzY3JpYmVyJyk7Citw cm9ncmFtX3ZlcnNpb25fb2soJ3BnX2NyZWF0ZXN1YnNjcmliZXInKTsKK3Byb2dyYW1fb3B0 aW9uc19oYW5kbGluZ19vaygncGdfY3JlYXRlc3Vic2NyaWJlcicpOworCitteSAkZGF0YWRp ciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworCitjb21tYW5kX2ZhaWxz KFsncGdfY3JlYXRlc3Vic2NyaWJlciddLAorCSdubyBzdWJzY3JpYmVyIGRhdGEgZGlyZWN0 b3J5IHNwZWNpZmllZCcpOworY29tbWFuZF9mYWlscygKKwlbCisJCSdwZ19jcmVhdGVzdWJz Y3JpYmVyJywKKwkJJy0tcGdkYXRhJywgJGRhdGFkaXIKKwldLAorCSdubyBwdWJsaXNoZXIg Y29ubmVjdGlvbiBzdHJpbmcgc3BlY2lmaWVkJyk7Citjb21tYW5kX2ZhaWxzKAorCVsKKwkJ J3BnX2NyZWF0ZXN1YnNjcmliZXInLAorCQknLS1kcnktcnVuJywKKwkJJy0tcGdkYXRhJywg JGRhdGFkaXIsCisJCSctLXB1Ymxpc2hlci1zZXJ2ZXInLCAnZGJuYW1lPXBvc3RncmVzJwor CV0sCisJJ25vIHN1YnNjcmliZXIgY29ubmVjdGlvbiBzdHJpbmcgc3BlY2lmaWVkJyk7Citj b21tYW5kX2ZhaWxzKAorCVsKKwkJJ3BnX2NyZWF0ZXN1YnNjcmliZXInLAorCQknLS12ZXJi b3NlJywKKwkJJy0tcGdkYXRhJywgJGRhdGFkaXIsCisJCSctLXB1Ymxpc2hlci1zZXJ2ZXIn LCAnZGJuYW1lPXBvc3RncmVzJywKKwkJJy0tc3Vic2NyaWJlci1zZXJ2ZXInLCAnZGJuYW1l PXBvc3RncmVzJworCV0sCisJJ25vIGRhdGFiYXNlIG5hbWUgc3BlY2lmaWVkJyk7CisKK2Rv bmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQx X3BnX2NyZWF0ZXN1YnNjcmliZXJfc3RhbmRieS5wbCBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1 cC90LzA0MV9wZ19jcmVhdGVzdWJzY3JpYmVyX3N0YW5kYnkucGwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTM0YmM1M2E3NgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MV9wZ19jcmVhdGVzdWJzY3JpYmVyX3N0YW5k YnkucGwKQEAgLTAsMCArMSwxMzkgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjCisjIFRlc3QgdXNpbmcgYSBzdGFu ZGJ5IHNlcnZlciBhcyB0aGUgc3Vic2NyaWJlci4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlX3A7CitteSAkbm9k ZV9mOworbXkgJG5vZGVfczsKK215ICRyZXN1bHQ7CisKKyMgU2V0IHVwIG5vZGUgUCBhcyBw cmltYXJ5Ciskbm9kZV9wID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2Rl X3AnKTsKKyRub2RlX3AtPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwor JG5vZGVfcC0+c3RhcnQ7CisKKyMgU2V0IHVwIG5vZGUgRiBhcyBhYm91dC10by1mYWlsIG5v ZGUKKyMgVGhlIGV4dHJhIG9wdGlvbiBmb3JjZXMgaXQgdG8gaW5pdGlhbGl6ZSBhIG5ldyBj bHVzdGVyIGluc3RlYWQgb2YgY29weWluZyBhCisjIHByZXZpb3VzbHkgaW5pdGRiJ3MgY2x1 c3Rlci4KKyRub2RlX2YgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGVf ZicpOworJG5vZGVfZi0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJywgZXh0 cmEgPT4gWyAnLS1uby1pbnN0cnVjdGlvbnMnIF0pOworJG5vZGVfZi0+c3RhcnQ7CisKKyMg T24gbm9kZSBQCisjIC0gY3JlYXRlIGRhdGFiYXNlcworIyAtIGNyZWF0ZSB0ZXN0IHRhYmxl cworIyAtIGluc2VydCBhIHJvdworJG5vZGVfcC0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jlcycs IHEoCisJQ1JFQVRFIERBVEFCQVNFIHBnMTsKKwlDUkVBVEUgREFUQUJBU0UgcGcyOworKSk7 Ciskbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMScsICdDUkVBVEUgVEFCTEUgdGJsMSAoYSB0ZXh0 KScpOworJG5vZGVfcC0+c2FmZV9wc3FsKCdwZzEnLCAiSU5TRVJUIElOVE8gdGJsMSBWQUxV RVMoJ2ZpcnN0IHJvdycpIik7Ciskbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMicsICdDUkVBVEUg VEFCTEUgdGJsMiAoYSB0ZXh0KScpOworCisjIFNldCB1cCBub2RlIFMgYXMgc3RhbmRieSBs aW5raW5nIHRvIG5vZGUgUAorJG5vZGVfcC0+YmFja3VwKCdiYWNrdXBfMScpOworJG5vZGVf cyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZV9zJyk7Ciskbm9kZV9z LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3AsICdiYWNrdXBfMScsIGhhc19zdHJlYW1pbmcg PT4gMSk7Ciskbm9kZV9zLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ2xvZ19t aW5fbWVzc2FnZXMgPSBkZWJ1ZzInKTsKKyRub2RlX3MtPnNldF9zdGFuZGJ5X21vZGUoKTsK KyRub2RlX3MtPnN0YXJ0OworCisjIEluc2VydCBhbm90aGVyIHJvdyBvbiBub2RlIFAgYW5k IHdhaXQgbm9kZSBTIHRvIGNhdGNoIHVwCiskbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMScsICJJ TlNFUlQgSU5UTyB0YmwxIFZBTFVFUygnc2Vjb25kIHJvdycpIik7Ciskbm9kZV9wLT53YWl0 X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkbm9kZV9zKTsKKworIyBSdW4gcGdfY3JlYXRlc3Vic2Ny aWJlciBvbiBhYm91dC10by1mYWlsIG5vZGUgRgorY29tbWFuZF9mYWlscygKKwlbCisJCSdw Z19jcmVhdGVzdWJzY3JpYmVyJywgJy0tdmVyYm9zZScsCisJCSctLXBnZGF0YScsICRub2Rl X2YtPmRhdGFfZGlyLAorCQknLS1wdWJsaXNoZXItc2VydmVyJywgJG5vZGVfcC0+Y29ubnN0 cigncGcxJyksCisJCSctLXN1YnNjcmliZXItc2VydmVyJywgJG5vZGVfZi0+Y29ubnN0cign cGcxJyksCisJCSctLWRhdGFiYXNlJywgJ3BnMScsCisJCSctLWRhdGFiYXNlJywgJ3BnMicK KwldLAorCSdzdWJzY3JpYmVyIGRhdGEgZGlyZWN0b3J5IGlzIG5vdCBhIGNvcHkgb2YgdGhl IHNvdXJjZSBkYXRhYmFzZSBjbHVzdGVyJyk7CisKKyMgZHJ5IHJ1biBtb2RlIG9uIG5vZGUg UworY29tbWFuZF9vaygKKwlbCisJCSdwZ19jcmVhdGVzdWJzY3JpYmVyJywgJy0tdmVyYm9z ZScsICctLWRyeS1ydW4nLAorCQknLS1wZ2RhdGEnLCAkbm9kZV9zLT5kYXRhX2RpciwKKwkJ Jy0tcHVibGlzaGVyLXNlcnZlcicsICRub2RlX3AtPmNvbm5zdHIoJ3BnMScpLAorCQknLS1z dWJzY3JpYmVyLXNlcnZlcicsICRub2RlX3MtPmNvbm5zdHIoJ3BnMScpLAorCQknLS1kYXRh YmFzZScsICdwZzEnLAorCQknLS1kYXRhYmFzZScsICdwZzInCisJXSwKKwkncnVuIHBnX2Ny ZWF0ZXN1YnNjcmliZXIgLS1kcnktcnVuIG9uIG5vZGUgUycpOworCisjIFBJRCBzZXRzIHRv IHVuZGVmaW5lZCBiZWNhdXNlIHN1YnNjcmliZXIgd2FzIHN0b3BwZWQgYmVoaW5kIHRoZSBz Y2VuZXMuCisjIFN0YXJ0IHN1YnNjcmliZXIKKyRub2RlX3MtPntfcGlkfSA9IHVuZGVmOwor JG5vZGVfcy0+c3RhcnQ7CisjIENoZWNrIGlmIG5vZGUgUyBpcyBzdGlsbCBhIHN0YW5kYnkK K2lzKCRub2RlX3MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHBnX2lzX2luX3Jl Y292ZXJ5KCknKSwKKwkndCcsICdzdGFuZGJ5IGlzIGluIHJlY292ZXJ5Jyk7CisKKyMgUnVu IHBnX2NyZWF0ZXN1YnNjcmliZXIgb24gbm9kZSBTCitjb21tYW5kX29rKAorCVsKKwkJJ3Bn X2NyZWF0ZXN1YnNjcmliZXInLCAnLS12ZXJib3NlJywKKwkJJy0tcGdkYXRhJywgJG5vZGVf cy0+ZGF0YV9kaXIsCisJCSctLXB1Ymxpc2hlci1zZXJ2ZXInLCAkbm9kZV9wLT5jb25uc3Ry KCdwZzEnKSwKKwkJJy0tc3Vic2NyaWJlci1zZXJ2ZXInLCAkbm9kZV9zLT5jb25uc3RyKCdw ZzEnKSwKKwkJJy0tZGF0YWJhc2UnLCAncGcxJywKKwkJJy0tZGF0YWJhc2UnLCAncGcyJwor CV0sCisJJ3J1biBwZ19jcmVhdGVzdWJzY3JpYmVyIG9uIG5vZGUgUycpOworCisjIEluc2Vy dCByb3dzIG9uIFAKKyRub2RlX3AtPnNhZmVfcHNxbCgncGcxJywgIklOU0VSVCBJTlRPIHRi bDEgVkFMVUVTKCd0aGlyZCByb3cnKSIpOworJG5vZGVfcC0+c2FmZV9wc3FsKCdwZzInLCAi SU5TRVJUIElOVE8gdGJsMiBWQUxVRVMoJ3JvdyAxJykiKTsKKworIyBQSUQgc2V0cyB0byB1 bmRlZmluZWQgYmVjYXVzZSBzdWJzY3JpYmVyIHdhcyBzdG9wcGVkIGJlaGluZCB0aGUgc2Nl bmVzLgorIyBTdGFydCBzdWJzY3JpYmVyCiskbm9kZV9zLT57X3BpZH0gPSB1bmRlZjsKKyRu b2RlX3MtPnN0YXJ0OworCisjIEdldCBzdWJzY3JpcHRpb24gbmFtZXMKKyRyZXN1bHQgPSAk bm9kZV9zLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJU0VMRUNUIHN1Ym5hbWUg RlJPTSBwZ19zdWJzY3JpcHRpb24gV0hFUkUgc3VibmFtZSB+ICdecGdfY3JlYXRlc3Vic2Ny aWJlcl8nCispKTsKK215IEBzdWJuYW1lcyA9IHNwbGl0KCJcbiIsICRyZXN1bHQpOworCisj IFdhaXQgc3Vic2NyaWJlciB0byBjYXRjaCB1cAorJG5vZGVfcy0+d2FpdF9mb3Jfc3Vic2Ny aXB0aW9uX3N5bmMoJG5vZGVfcCwgJHN1Ym5hbWVzWzBdKTsKKyRub2RlX3MtPndhaXRfZm9y X3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3AsICRzdWJuYW1lc1sxXSk7CisKKyMgQ2hlY2sg cmVzdWx0IG9uIGRhdGFiYXNlIHBnMQorJHJlc3VsdCA9ICRub2RlX3MtPnNhZmVfcHNxbCgn cGcxJywgJ1NFTEVDVCAqIEZST00gdGJsMScpOworaXMoICRyZXN1bHQsIHFxKGZpcnN0IHJv dworc2Vjb25kIHJvdwordGhpcmQgcm93KSwKKwknbG9naWNhbCByZXBsaWNhdGlvbiB3b3Jr cyBvbiBkYXRhYmFzZSBwZzEnKTsKKworIyBDaGVjayByZXN1bHQgb24gZGF0YWJhc2UgcGcy CiskcmVzdWx0ID0gJG5vZGVfcy0+c2FmZV9wc3FsKCdwZzInLCAnU0VMRUNUICogRlJPTSB0 YmwyJyk7CitpcyggJHJlc3VsdCwgcXEocm93IDEpLAorCSdsb2dpY2FsIHJlcGxpY2F0aW9u IHdvcmtzIG9uIGRhdGFiYXNlIHBnMicpOworCisjIERpZmZlcmVudCBzeXN0ZW0gaWRlbnRp Zmllcj8KK215ICRzeXNpZF9wID0gJG5vZGVfcC0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdT RUxFQ1Qgc3lzdGVtX2lkZW50aWZpZXIgRlJPTSBwZ19jb250cm9sX3N5c3RlbSgpJyk7Citt eSAkc3lzaWRfcyA9ICRub2RlX3MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHN5 c3RlbV9pZGVudGlmaWVyIEZST00gcGdfY29udHJvbF9zeXN0ZW0oKScpOworb2soJHN5c2lk X3AgIT0gJHN5c2lkX3MsICdzeXN0ZW0gaWRlbnRpZmllciB3YXMgY2hhbmdlZCcpOworCisj IGNsZWFuIHVwCiskbm9kZV9wLT50ZWFyZG93bl9ub2RlOworJG5vZGVfcy0+dGVhcmRvd25f bm9kZTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cmlu ZGV4IDkxNDMzZDQzOWIuLjEwMjk3MTE2NGYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC01MTcsNiArNTE3LDcgQEAgQ3JlYXRlU2VxU3RtdAogQ3JlYXRlU3RhdHNTdG10 CiBDcmVhdGVTdG10CiBDcmVhdGVTdG10Q29udGV4dAorQ3JlYXRlU3Vic2NyaWJlck9wdGlv bnMKIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQKIENyZWF0ZVRhYmxlQXNTdG10CiBDcmVhdGVU YWJsZVNwYWNlU3RtdApAQCAtMTUwNSw2ICsxNTA2LDcgQEAgTG9naWNhbFJlcEJlZ2luRGF0 YQogTG9naWNhbFJlcENvbW1pdERhdGEKIExvZ2ljYWxSZXBDb21taXRQcmVwYXJlZFR4bkRh dGEKIExvZ2ljYWxSZXBDdHhTdHJ1Y3QKK0xvZ2ljYWxSZXBJbmZvCiBMb2dpY2FsUmVwTXNn VHlwZQogTG9naWNhbFJlcFBhcnRNYXBFbnRyeQogTG9naWNhbFJlcFByZXBhcmVkVHhuRGF0 YQotLSAKMi4zMC4yCgo= --2ea4945c2cd1415f9fa750494ab6ec06--