Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vtqQA-00014L-1V for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Feb 2026 17:05:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vtqQ9-00AGJT-0Q for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Feb 2026 17:05:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vtqQ8-00AGJK-0Z for pgsql-hackers@lists.postgresql.org; Sat, 21 Feb 2026 17:05:32 +0000 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vtqQ1-00000000XRC-2sQE for pgsql-hackers@lists.postgresql.org; Sat, 21 Feb 2026 17:05:30 +0000 Received: by mail-qt1-x82b.google.com with SMTP id d75a77b69052e-506a321cc53so33896031cf.3 for ; Sat, 21 Feb 2026 09:05:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1771693524; x=1772298324; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=RDcLipJVvR9BvGBM7MyWjYSBWdQ/fj1N+dE6pKz1o1U=; b=qfPQ3nJaCoUCw3A9RQ87+hSk4NPU8X1Av1ZEl+fHgNd+awi4DkGc7KY0TwKL8MY3Mr aOlBf7fiew+D5ysY8my7urT2TFB+gygrwyYVi+ZwugS5UveDo0+AtAso0II2IduLDD6c c3k8em7Uxgsetd8EOd8O1s5gSy4KPIhFHo0kl4smK6BAIcLOuLuzPiJ+aOB8wPavJxwY 4q4tV8Gt5mAfhazsUlWme8Ut+jEp8hesNtFpQZh2fsnCpX2gV8FtmG9yC7xIE5M5fcj5 oWIVCOuOYMiuVIA4Nwx0Acg6ta9OOPFH5krq5+BJGXZ1w/BBYOkVVjeJii0YONgUGZ6Z ZVkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771693524; x=1772298324; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RDcLipJVvR9BvGBM7MyWjYSBWdQ/fj1N+dE6pKz1o1U=; b=jIqNUjYVqXVDCpO3Q0qCI4wKqDVr/CdNP27FJnFLHq6MPtftGopa1x50m28ETGBuEZ Jrbny54UW1ra0kl8IRs2zdf3QN7e20vXLfAovAe2MSUIMud7SfB3+zkQp4wLCPxOKPq/ kc4h3qpVmTre6G9C6zj61EWFb2ZracBZvUdejfeVpPV2xlhQwvbT5Psf1rSbJfM2gSQU 0oRa+x6UWreNTI/ZsUlLpa9bh4Mj7GZjvfEf9uSdZY4/GLSF8xkUSJiOxWyxh5yeUSHf lEo0HBEOPtvRQ3n1GsOmdSAG0sWkGCwYZK15o27Y2B0BqP+R7HyihoxshrVLQMWZd0W9 9FBA== X-Forwarded-Encrypted: i=1; AJvYcCUx331bHsb3fAPwms/RIuPZaA+qjRe2jybONRajkMUjCL+OTpVsWZrIxMHurckdirMZb12Xnct29yrzIHee@lists.postgresql.org X-Gm-Message-State: AOJu0YxqlqQthlXpxSqrpH4ArFjZsYbexCXjijfWjxtSeWfsILiXsmxN 3fhF4ydexOwm7jscJc/upQwC3rFWTGLlmfl7jBSXnIPYL+kSVWQF8jCo24rrS+uQ23o= X-Gm-Gg: AZuq6aKLBIQAlbSTNDOhlZ11+RPbXtfl6cMAS+NylFPjqSqUxODAQMYT/TrVkUezSvW I43ch16rfn6iqvmzLFyomXfWFGB7nIGdi8S2lofxlvO7pUUaPTLD1ZOvbvQkPnP0aoPlYGSIU6s 67c9SrMbPCB/2hRbCNwOIUgvOZVnsGkBBdqt9TWBWgVObuokPXFzr+MIaVakUk4zgCkzQwDdrUW M7/wQvjGIpxf8o+u0zKVa8ovadMvqQt9J8at2G1W8z3+122CCoJR3ePHJHN7wfuNFCWu9kpQ8lr SZfzRXjYFr128OBE9fkdZ/tN8mabrRDHOnCmMiESLryi7wQCIHXQfayvJHRY1xrlnZ0XBmAFnS4 NzCXxkZNCJR5ThEdmIG8xuoJsqWXNR8/n8r4BtkU0paj/iomTPGt3yUFoB/uhJ9OMZG7lqYZRIH CJjAkzt9DOlLxHpITSsRQA2nARB6uuRg== X-Received: by 2002:a05:622a:413:b0:501:3d11:18cb with SMTP id d75a77b69052e-5070bd13ff9mr49888391cf.73.1771693524054; Sat, 21 Feb 2026 09:05:24 -0800 (PST) Received: from ?IPV6:2605:a601:a6b0:500::1cb? ([2605:a601:a6b0:500::1cb]) by smtp.googlemail.com with ESMTPSA id d75a77b69052e-5070d6a2299sm21170981cf.19.2026.02.21.09.05.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 21 Feb 2026 09:05:23 -0800 (PST) Content-Type: multipart/mixed; boundary="------------vi6F0jS0hmsfsIWlSfgQuxFI" Message-ID: <59d3616f-6d6d-40d5-87e2-e019e350b52d@dunslane.net> Date: Sat, 21 Feb 2026 12:05:21 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall To: jian he , Mahendra Singh Thalor Cc: tushar , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <4022765f-38ee-48a3-b246-615b3f8e1c23@dunslane.net> From: Andrew Dunstan Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAlwQTAQgAQQIbAwIX gAIZAQULCQgHAwUVCgkICwUWAgMBAAIeBRYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNGd BQkdEO8nAAoJEJn6f8tZ/DuBq74H/jkTR4Zi3stbw+xC7v2u3QozssK7MYPL2AsVfh7OealS h182fiWXpfvmmAB7WUHbhk9GC2RAOnHI/2d2jgKaMLAHsGYOT0YopTVIwRY43fCw/mK67yxc wmDcX+zyKfLaivNbf5A7QPLNwda98bEAMSJ8Sn652Uc6cA8t3uKGsVzbRBQOoYzjgvBCfSrE 9ql3PDNg0l4BfAqabd2f70ZUm9VAMEPrgv/v2xI7M2XiL4g5BVmqLCOwxLM8RMCotCuoweUr VO43DeBCIDwLxotMJKvGWDjBzQYlU1NPUAtNcz/gN9ITUe1VUGjyvGj4u1lxBOcQQUw7l1+T 5moZ4iZxXzvOwE0ETspYWQEIANGc4zQULOxhbqO2dyD51YhqCNRmm9oKWaqf+wmW4tpDe/VV cxAnNizd4LWCHfzpb5cHAtGkOPePMfzWVf6nvdF7d3eglbtf59+zG7O7llV0xSSoFiieQBsr GvqDInXYX/4mRRXMtyhM353/tixC9RWLs1oofyYmCPPXXY7h9R7en3B8BoVrRFcdzlIY/NFN hFGW/9dkEiGjgna2Rk6e15kln4ZvFBWUg23p93w/pqXcxY6+k/8TEk+C4R+M6w7o2PLGOjdZ +kPiUcw5H85zf/yZJwQXzisXaNduwWB6Vads9YC9dj6kPR1c4VGRqAaYL++LAEOqrlvm2Tvq QqZRtnEAEQEAAcLAfAQYAQgAJgIbDBYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNI2BQkd EODdAAoJEJn6f8tZ/DuBfw0IAKTsfD40teP/pp+bsLLMSxPXUYrrprTj7WFB5v61p6dkpSr/ qXmMlyahdxQFaPmfVgVirB1Vk/kHiWNnnGjfUV9nB2Zg9LI0Xb9/ts3LsUiRWXzG3tkMY6XL vsVOxW4XFRND9l2q+WW93aZ1DZl+fqWfYgMvsusFRhmGFOKTRfKPta2Pkv+AhA24N4+PrR5p bU4k2MO8PAGiK8eaYKGFG1bHKuAvoDoF7WXJ3FHxuWqLnKEt4dfOLm5pAe3zq1Lt6q8azT9i QWGpSAK5vQUWQHBHpiDjdPeqKZ6HiAXIIKfSmb+jrvXBqoP+D6/K7rUjG2aXiRtTIAXms9sm VRu7cmw= In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------vi6F0jS0hmsfsIWlSfgQuxFI Content-Type: multipart/alternative; boundary="------------AsezZcbgvea9TxgmWPgGFFhf" --------------AsezZcbgvea9TxgmWPgGFFhf Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2026-02-20 Fr 9:15 PM, jian he wrote: > Hi. > > RestoreOptions *tmpopts = (RestoreOptions *) > pg_malloc0(sizeof(RestoreOptions)); > need change to > RestoreOptions *tmpopts = pg_malloc0_object(RestoreOptions); Fixed > > + > + If the dump was taken in a non-plain-text format, use > + pg_restore to restore the databases: > + > +$ pg_restore db.out -d postgres -C > + > + This will restore all databases. To restore only some databases, use > + the option to skip those not wanted. > + > > The change above was added to pg_dumpall.sgml, which seems inappropriate; > it would be more correct to place it in pg_restore.sgml. I don't agree. The previous paragraph mentions using psql to restore a text dump, so mentioning pg_restore for a non-text dump seems reasonable. But I have added a para to the pg_restore docs explaining how it processes pg_dumpall archives. > > + > + > + > + > + > + Restore only global objects (roles and tablespaces), no databases. > + > + > + This option is only relevant when restoring from an archive > made using pg_dumpall. > + Note: cannot be used with > , > + , > , or . > + > + > + > + > cannot be used with --data-only, > --schema-only, --statistics-only, --statistics. > We should also mention that. Fixed > > In doc/src/sgml/ref/pg_restore.sgml > "when restoring from an archive made using pg_dumpall." > It would be better using > "when restoring from a non-plain-text archive made using pg_dumpall." > that would be aligned with pg_dumpall.sgml. > > > > > > > Dump only global objects (roles and tablespaces), no databases. > + Note: cannot be used with > + with non-text dump format. > > Elsewhere, we use the term “non-plain-text,” so we should use > “non-plain-text” here as well instead of “non-text,” for consistency. > > In doc/src/sgml/ref/pg_restore.sgml, We did not mention that many > options cannot be used with pg_restore when performing a > non-plain-text restore. > Like: > "-l/--list" > "-L/--use-list" > "--strict-names" > "--no-schema" > "-a/--data-only" > "--statistics-only" > --section does not include "--pre-data" Fixed, but ... What about options like these?:   n/--schema   N/--exclude-schema   t/--table   T/--trigger   I/--index   P/--function   -filter We're not currently doing anything about those, but do they make sense when restoring a pg_dumpall archive? > > pg_restore --clean --format=directory will produce DROP DATABASE will > process global objects, > it will also produce DROP DATABASE when processing each individual database. > To prevent errors during a subsequent restore, we can require > pg_restore --clean option must be used together with --if-exists when > restoring a non-plain-text dump. We could. Or we could just turn it on (and document that it will be turned on) in this case. I'd rather not force people to use lots of flags. Patch attached with the above noted fixes. It also adds a header comment to map.dat and has pg_restore ignore comment lines (anything that doesn't begin with a digit). cheers andrew -- Andrew Dunstan EDB:https://www.enterprisedb.com --------------AsezZcbgvea9TxgmWPgGFFhf Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit


On 2026-02-20 Fr 9:15 PM, jian he wrote:
Hi.

        RestoreOptions *tmpopts = (RestoreOptions *)
pg_malloc0(sizeof(RestoreOptions));
need change to
        RestoreOptions *tmpopts = pg_malloc0_object(RestoreOptions);


Fixed



+  <para>
+   If the dump was taken in a non-plain-text format, use
+   <application>pg_restore</application> to restore the databases:
+<screen>
+<prompt>$</prompt> <userinput>pg_restore db.out -d postgres -C</userinput>
+</screen>
+   This will restore all databases. To restore only some databases, use
+   the <option>--exclude-database</option> option to skip those not wanted.
+  </para>

The change above was added to pg_dumpall.sgml, which seems inappropriate;
it would be more correct to place it in pg_restore.sgml.


I don't agree. The previous paragraph mentions using psql to restore a text dump, so mentioning pg_restore for a non-text dump seems reasonable.

But I have added a para to the pg_restore docs explaining how it processes pg_dumpall archives.



+     <varlistentry>
+      <term><option>-g</option></term>
+      <term><option>--globals-only</option></term>
+      <listitem>
+       <para>
+        Restore only global objects (roles and tablespaces), no databases.
+       </para>
+       <para>
+        This option is only relevant when restoring from an archive
made using <application>pg_dumpall</application>.
+        Note: <option>--globals-only</option> cannot be used with
<option>--exit-on-error</option>,
+              <option>--single-transaction</option>,
<option>--clean</option>, or <option>--transaction-size</option>.
+       </para>
+      </listitem>
+     </varlistentry>
+
<option>--globals-only</option> cannot be used with --data-only,
--schema-only, --statistics-only, --statistics.
We should also mention that.


Fixed



In doc/src/sgml/ref/pg_restore.sgml
"when restoring from an archive made using pg_dumpall."
It  would be better using
"when restoring from a non-plain-text archive made using pg_dumpall."
that would be aligned with pg_dumpall.sgml.

      <varlistentry>
       <term><option>-g</option></term>
       <term><option>--globals-only</option></term>
       <listitem>
        <para>
         Dump only global objects (roles and tablespaces), no databases.
+        Note: <option>--globals-only</option> cannot be used with
+        <option>--clean</option> with non-text dump format.
        </para>
Elsewhere, we use the term “non-plain-text,” so we should use
“non-plain-text” here as well instead of “non-text,” for consistency.

In doc/src/sgml/ref/pg_restore.sgml, We did not mention that many
options cannot be used with pg_restore when performing a
non-plain-text restore.
Like:
"-l/--list"
"-L/--use-list"
"--strict-names"
"--no-schema"
"-a/--data-only"
"--statistics-only"
--section does not include "--pre-data"


Fixed, but ...


What about options like these?:

  n/--schema
  N/--exclude-schema
  t/--table
  T/--trigger
  I/--index
  P/--function
  -filter

We're not currently doing anything about those, but do they make sense when restoring a pg_dumpall archive?



pg_restore --clean --format=directory will produce DROP DATABASE will
process global objects,
it will also produce DROP DATABASE when processing each individual database.
To prevent errors during a subsequent restore, we can require
pg_restore --clean option must be used together with --if-exists when
restoring a non-plain-text dump.


We could. Or we could just turn it on (and document that it will be turned on) in this case. I'd rather not force people to use lots of flags.


Patch attached with the above noted fixes. It also adds a header comment to map.dat and has pg_restore ignore comment lines (anything that doesn't begin with a digit).


cheers


andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com
--------------AsezZcbgvea9TxgmWPgGFFhf-- --------------vi6F0jS0hmsfsIWlSfgQuxFI Content-Type: text/x-patch; charset=UTF-8; name="v18-21022026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename*0="v18-21022026-Non-text-modes-for-pg_dumpall-correspondingly-c"; filename*1="hange.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggODgzNGI3ZWMxNDEuLjQ5ZTVjOTli MDllIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsMTAgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAgPHJlZm5hbWU+ cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRvIGEg c2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisKKyAgPHJlZnB1cnBvc2U+CisgICBleHBvcnQg YSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0 ZXIgYXMgYW4gU1FMIHNjcmlwdCBvciB0byBvdGhlciBmb3JtYXRzCisgIDwvcmVmcHVycG9z ZT4KICA8L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zMyw3ICszNiw3 IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlv bj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5nIG91 dAogICAgKDxxdW90ZT5kdW1waW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdy ZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8gb25l IHNjcmlwdCBmaWxlLiAgVGhlIHNjcmlwdCBmaWxlIGNvbnRhaW5zCisgICBvZiBhIGNsdXN0 ZXIgaW50byBhbiBTUUwgc2NyaXB0IGZpbGUgb3IgYW4gYXJjaGl2ZS4gIFRoZSBvdXRwdXQg Y29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29tbWFuZHMgdGhhdCBjYW4g YmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAgbGlua2VuZD0iYXBwLXBzcWwiLz4gdG8g cmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0aGlzIGJ5CiAgICBjYWxsaW5nIDx4 cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2ggZGF0YWJhc2UgaW4gdGhlIGNs dXN0ZXIuCkBAIC01MiwxMSArNTUsMTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0IHdpbGwgYmUgd3JpdHRl biB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgUGxhaW4gdGV4dCBTUUwg c2NyaXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0 aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4gb3B0 aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZpbGUu CiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1hdHMg d2lsbCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCisgICA8b3B0 aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyByZXF1 aXJlZCBpbiB0aGlzIGNhc2UuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgPGFwcGxpY2F0 aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVyYWwK ICAgdGltZXMgdG8gdGhlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g c2VydmVyIChvbmNlIHBlcgpAQCAtMTMxLDE2ICsxMzksOTMgQEAgUG9zdGdyZVNRTCBkb2N1 bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBz cGVjaWZpZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5k YXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAgICBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBv bWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFpbi4KICAgICAg ICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0PTxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmeSB0aGUgZm9ybWF0 IG9mIGR1bXAgZmlsZXMuICBJbiBwbGFpbiBmb3JtYXQsIGFsbCB0aGUgZHVtcCBkYXRhIGlz CisgICAgICAgIHNlbnQgaW4gYSBzaW5nbGUgdGV4dCBzdHJlYW0uIFRoaXMgaXMgdGhlIGRl ZmF1bHQuCisKKyAgICAgICAgSW4gYWxsIG90aGVyIG1vZGVzLCA8YXBwbGljYXRpb24+cGdf ZHVtcGFsbDwvYXBwbGljYXRpb24+IGZpcnN0IGNyZWF0ZXMgdHdvIGZpbGVzLAorICAgICAg ICA8ZmlsZW5hbWU+dG9jLmdsbzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWFwLmRhdDwv ZmlsZW5hbWU+LCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHNwZWNpZmllZCBieSA8b3B0 aW9uPi0tZmlsZTwvb3B0aW9uPi4KKyAgICAgICAgVGhlIGZpcnN0IGZpbGUgY29udGFpbnMg Z2xvYmFsIGRhdGEgKHJvbGVzIGFuZCB0YWJsZXNwYWNlcykgaW4gY3VzdG9tIGZvcm1hdC4g VGhlIHNlY29uZAorICAgICAgICBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiBkYXRhYmFz ZSBPSURzIGFuZCBuYW1lcy4gVGhlc2UgZmlsZXMgYXJlIHVzZWQgYnkKKyAgICAgICAgPGFw cGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPi4gRGF0YSBmb3IgaW5kaXZpZHVh bCBkYXRhYmFzZXMgaXMgcGxhY2VkIGluCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGF0YWJh c2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LCBuYW1lZCB1c2luZyB0aGUgZGF0YWJhc2Un cyBPSUQuCisKKyAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAg ICA8dGVybT48bGl0ZXJhbD5kaXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgZGlyZWN0 b3J5LWZvcm1hdCBhcmNoaXZlcyBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3Vp dGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGRpcmVjdG9yeQorICAgICAg ICAgICB3aWxsIGhhdmUgZGF0YWJhc2UgPHR5cGU+b2lkPC90eXBlPiBhcyBpdHMgbmFtZS4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+ PGxpdGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5w bGFpbjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxl ICh0aGUgZGVmYXVsdCkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRl bT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZv cm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBm b3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxs IGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC5kbXA8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5k Ym9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhl IGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAg ICAgICAgPHRlcm0+PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hp dmUgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBp bnRvIHBnX3Jlc3RvcmUuIFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQg PGZpbGVuYW1lPmRib2lkLnRhcjwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBl PiBpcyB0aGUKKyAgICAgICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2Uu CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICBTZWUg PHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZGV0YWlscyBvbiBob3cgdGhlCisg ICAgICAgdmFyaW91cyBub24tcGxhaW4tdGV4dCBhcmNoaXZlIGZvcm1hdHMgd29yay4KKwor ICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRy eT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0 aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlv bj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIER1 bXAgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwgbm8gZGF0 YWJhc2VzLgorICAgICAgICBOb3RlOiA8b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+ IGNhbm5vdCBiZSB1c2VkIHdpdGgKKyAgICAgICAgPG9wdGlvbj4tLWNsZWFuPC9vcHRpb24+ IHdpdGggbm9uLXRleHQgZHVtcCBmb3JtYXQuCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9s aXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC05MzYsMTMgKzEwMjEsMjEgQEAg ZXhjbHVkZSBkYXRhYmFzZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+UEFUVEVS TjwvcmVwbGFjZWFibGU+CiAgPHJlZnNlY3QxIGlkPSJhcHAtcGctZHVtcGFsbC1leCI+CiAg IDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CiAgIDxwYXJhPgotICAgVG8gZHVtcCBhbGwgZGF0 YWJhc2VzOgotCisgICBUbyBkdW1wIGFsbCBkYXRhYmFzZXMgaW4gcGxhaW4gdGV4dCBmb3Jt YXQgKHRoZSBkZWZhdWx0KToKIDxzY3JlZW4+CiA8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJp bnB1dD5wZ19kdW1wYWxsICZndDsgZGIub3V0PC91c2VyaW5wdXQ+CiA8L3NjcmVlbj4KICAg PC9wYXJhPgogCisgIDxwYXJhPgorICAgVG8gZHVtcCBhbGwgZGF0YWJhc2VzIHVzaW5nIG90 aGVyIGZvcm1hdHM6Cis8c2NyZWVuPgorPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+ cGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLWYgZGIub3V0PC91c2VyaW5wdXQ+Cis8 cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PWN1c3Rv bSAtZiBkYi5vdXQ8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0 PnBnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC1mIGRiLm91dDwvdXNlcmlucHV0PgorPC9zY3Jl ZW4+CisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgIFRvIHJlc3RvcmUgZGF0YWJhc2Uocykg ZnJvbSB0aGlzIGZpbGUsIHlvdSBjYW4gdXNlOgogPHNjcmVlbj4KQEAgLTk1Niw2ICsxMDQ5 LDE2IEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PlBBVFRFUk48L3JlcGxhY2VhYmxlPgogICAgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQgdG8g ZHJvcCBvdGhlciBkYXRhYmFzZXMgaW1tZWRpYXRlbHksIGFuZCB0aGF0CiAgICB3aWxsIGZh aWwgZm9yIHRoZSBkYXRhYmFzZSB5b3UgYXJlIGNvbm5lY3RlZCB0by4KICAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgSWYgdGhlIGR1bXAgd2FzIHRha2VuIGluIGEgbm9uLXBsYWluLXRl eHQgZm9ybWF0LCB1c2UKKyAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlv bj4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzOgorPHNjcmVlbj4KKzxwcm9tcHQ+JDwvcHJv bXB0PiA8dXNlcmlucHV0PnBnX3Jlc3RvcmUgZGIub3V0IC1kIHBvc3RncmVzIC1DPC91c2Vy aW5wdXQ+Cis8L3NjcmVlbj4KKyAgIFRoaXMgd2lsbCByZXN0b3JlIGFsbCBkYXRhYmFzZXMu ICBUbyByZXN0b3JlIG9ubHkgc29tZSBkYXRhYmFzZXMsIHVzZQorICAgdGhlIDxvcHRpb24+ LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IG9wdGlvbiB0byBza2lwIHRob3NlIG5vdCB3 YW50ZWQuCisgIDwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwv cmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCA0MjBhMzA4YTdjNy4uM2Q1NTMxY2ZhOTYgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgogCiAg IDxyZWZwdXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQg YnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcyBmcm9tIGFyY2hp dmVzCisgICBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4g b3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZw dXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIApAQCAtMzgsMTMgKzM5LDE0IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3Rv cmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZyBhCi0gICA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4gYXJj aGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9u ZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGF0YWJhc2Ugb3IgY2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKKyAgIGNy ZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlu a2VuZD0iYXBwLXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAog ICAgZm9ybWF0cy4gIEl0IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byBy ZWNvbnN0cnVjdCB0aGUKLSAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQg dGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCi0gICBhcmNoaXZlIGZpbGVzIGFsc28gYWxs b3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bworICAgZGF0YWJh c2Ugb3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdh cyBzYXZlZC4gVGhlCisgICBhcmNoaXZlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19y ZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KICAgIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGF0IGlz IHJlc3RvcmVkLCBvciBldmVuIHRvIHJlb3JkZXIgdGhlIGl0ZW1zCi0gICBwcmlvciB0byBi ZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIGRlc2lnbmVkIHRvIGJlCisg ICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZm9ybWF0cyBhcmUgZGVz aWduZWQgdG8gYmUKICAgIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgogICA8L3Bh cmE+CiAKQEAgLTUyLDE0ICs1NCwzNCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAg IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2FuIG9wZXJhdGUgaW4g dHdvIG1vZGVzLgogICAgSWYgYSBkYXRhYmFzZSBuYW1lIGlzIHNwZWNpZmllZCwgPGFwcGxp Y2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgY29ubmVjdHMgdG8gdGhhdCBk YXRhYmFzZSBhbmQgcmVzdG9yZXMgYXJjaGl2ZSBjb250ZW50cyBkaXJlY3RseSBpbnRvCi0g ICB0aGUgZGF0YWJhc2UuICBPdGhlcndpc2UsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNR TAotICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIGlzIGNy ZWF0ZWQgYW5kIHdyaXR0ZW4KKyAgIHRoZSBkYXRhYmFzZS4KKyAgIFdoZW4gcmVzdG9yaW5n IGZyb20gYSBkdW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPiwKKyAgIGVhY2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGVuIHRoZSBy ZXN0b3JhdGlvbiB3aWxsIGJlIHJ1biBpbiB0aGF0CisgICBkYXRhYmFzZS4KKworICAgT3Ro ZXJ3aXNlLCB3aGVuIGEgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBhIHNjcmlw dCBjb250YWluaW5nIHRoZSBTUUwKKyAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxk IHRoZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KICAgIHRv IGEgZmlsZSBvciBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIHNjcmlwdCBvdXRwdXQgaXMgZXF1 aXZhbGVudCB0bwotICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBwbGlj YXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+LgorICAgdGhlIHBsYWluIHRleHQgb3V0cHV0 IGZvcm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8 YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorCiAgICBTb21lIG9mIHRo ZSBvcHRpb25zIGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQgYXJlIHRoZXJlZm9yZSBhbmFsb2dv dXMgdG8KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3B0aW9ucy4K ICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgQSBub24tcGxhaW4tdGV4dCBhcmNoaXZlIG1h ZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPgorICAgaXMg YSBkaXJlY3RvcnkgY29udGFpbmluZyBhIDxmaWxlbmFtZT50b2MuZ2xvPC9maWxlbmFtZT4g ZmlsZSB3aXRoIGdsb2JhbAorICAgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwg YSA8ZmlsZW5hbWU+bWFwLmRhdDwvZmlsZW5hbWU+IGZpbGUKKyAgIGxpc3RpbmcgdGhlIGRh dGFiYXNlcywgYW5kIGEgc3ViZGlyZWN0b3J5IGZvciBlYWNoIGRhdGFiYXNlIGNvbnRhaW5p bmcKKyAgIGl0cyBhcmNoaXZlLiAgV2hlbiByZXN0b3Jpbmcgc3VjaCBhbiBhcmNoaXZlLAor ICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBmaXJzdCByZXN0b3Jl cyBnbG9iYWwgb2JqZWN0cyBmcm9tCisgICA8ZmlsZW5hbWU+dG9jLmdsbzwvZmlsZW5hbWU+ LCB0aGVuIHByb2Nlc3NlcyBlYWNoIGRhdGFiYXNlIGxpc3RlZCBpbgorICAgPGZpbGVuYW1l Pm1hcC5kYXQ8L2ZpbGVuYW1lPi4gIExpbmVzIGluIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxl bmFtZT4gY2FuCisgICBiZSBjb21tZW50ZWQgb3V0IHdpdGggPGxpdGVyYWw+IzwvbGl0ZXJh bD4gdG8gc2tpcCByZXN0b3Jpbmcgc3BlY2lmaWMKKyAgIGRhdGFiYXNlcy4KKyAgPC9wYXJh PgorCiAgIDxwYXJhPgogICAgT2J2aW91c2x5LCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwv YXBwbGljYXRpb24+IGNhbm5vdCByZXN0b3JlIGluZm9ybWF0aW9uCiAgICB0aGF0IGlzIG5v dCBwcmVzZW50IGluIHRoZSBhcmNoaXZlIGZpbGUuICBGb3IgaW5zdGFuY2UsIGlmIHRoZQpA QCAtMTUyLDYgKzE3NCw4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBj b21tYW5kcyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAgICAgICAgQWNjZXNzIHBy aXZpbGVnZXMgZm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28gcmVzdG9yZWQsCiAg ICAgICAgIHVubGVzcyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlzIHNwZWNpZmllZC4K KyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJlZCB3aGVuIHJl c3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAgICAgICAgZnJvbSBhIG5vbi1wbGFpbi10 ZXh0IGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGlj YXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtMjQ3LDYgKzI3 MSwyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVy bT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWds b2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQg dGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxw YXJhPgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9y aW5nIGZyb20gYSBub24tcGxhaW4tdGV4dCBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0 aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAgICAgICAgTm90ZTogPG9wdGlvbj4t LWdsb2JhbHMtb25seTwvb3B0aW9uPiBjYW5ub3QgYmUgdXNlZCB3aXRoCisgICAgICAgIDxv cHRpb24+LS1kYXRhLW9ubHk8L29wdGlvbj4sCisgICAgICAgIDxvcHRpb24+LS1zY2hlbWEt b25seTwvb3B0aW9uPiwKKyAgICAgICAgPG9wdGlvbj4tLXN0YXRpc3RpY3Mtb25seTwvb3B0 aW9uPiwKKyAgICAgICAgPG9wdGlvbj4tLXN0YXRpc3RpY3M8L29wdGlvbj4sCisgICAgICAg IDxvcHRpb24+LS1leGl0LW9uLWVycm9yPC9vcHRpb24+LAorICAgICAgICA8b3B0aW9uPi0t c2luZ2xlLXRyYW5zYWN0aW9uPC9vcHRpb24+LAorICAgICAgICA8b3B0aW9uPi0tY2xlYW48 L29wdGlvbj4sIG9yCisgICAgICAgIDxvcHRpb24+LS10cmFuc2FjdGlvbi1zaXplPC9vcHRp b24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1J IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgpAQCAtNTgxLDYgKzYyNywyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAg IDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90 ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3Qg cmVzdG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAg IE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxl CisgICAgICAgIDxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVz LiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJu PC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEg cGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8 YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+ CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVy bnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhj bHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBw YXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAg cXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQg ZXhwYW5zaW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhp cyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGEgbm9uLXBs YWluLXRleHQgYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9h cHBsaWNhdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAg PC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxv cHRpb24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1l PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CkBAIC0x MTI1LDYgKzExOTMsMTQgQEAgQ1JFQVRFIERBVEFCQVNFIGZvbyBXSVRIIFRFTVBMQVRFIHRl bXBsYXRlMDsKICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAKKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgV2hlbiByZXN0b3JpbmcgZnJvbSBhIG5vbi1wbGFp bi10ZXh0IGFyY2hpdmUgbWFkZSB1c2luZworICAgICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBh bGw8L2FwcGxpY2F0aW9uPiwgdGhlIDxvcHRpb24+LS1zZWN0aW9uPC9vcHRpb24+CisgICAg ICBvcHRpb24gbWF5IGJlIHVzZWQsIGJ1dCBtdXN0IGluY2x1ZGUgPG9wdGlvbj5wcmUtZGF0 YTwvb3B0aW9uPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisKICAgIDwvaXRl bWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9t ZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA3OWJkNTAz Njg0MS4uN2M5YTQ3NTk2M2IgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5i dWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEwMyw2ICsxMDMs NyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbCcsCiAg ICAgICAndC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9wZ19k dW1wX2NvbXByZXNzLnBsJywKKwkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0 LzAxMF9kdW1wX2Nvbm5zdHIucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmlu ZGV4IDU2Y2IyYzFmMzJkLi4yOWZhMjFhMWNjMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BhcmFsbGVsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMz Myw2ICszMzMsMTYgQEAgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlv bl9leGl0X25pY2VseShhcmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZv KTsKIH0KIAorLyoKKyAqIFdoZW4gcGdfcmVzdG9yZSByZXN0b3JlcyBtdWx0aXBsZSBkYXRh YmFzZXMsIHRoZW4gdXBkYXRlIGFscmVhZHkgYWRkZWQgZW50cnkKKyAqIGludG8gYXJyYXkg Zm9yIGNsZWFudXAuCisgKi8KK3ZvaWQKK3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZl KEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKK30KKwogLyoK ICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9yIHNodXR0aW5nIGRvd24gZGF0YWJhc2Ug Y29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vzc2VzIGNsZWFubHkuCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwLmgKaW5kZXggMmY4ZDk3OTljMzAuLmZkYTkxMmJhMGE5IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cC5oCkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlv bnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8K IAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpB SFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0 ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRh KTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2ZSAq T3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQg Zm10KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCA3YWZjYzA4 NTljOC4uZmFhMDhjZWRhYTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIGludAlSZXN0b3JpbmdUb0RCKEFyY2hpdmVI YW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFI KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0 IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJCQkgIGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisJCQkJCSAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLCBib29sIGFwcGVu ZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKQEAgLTMzOSw5ICsz MzksMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpCiAJ CVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAqLworLyoKKyAqIFJl c3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFwcGVu ZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRp cGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwogdm9p ZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2 ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFy Y2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1Ymxp Yy5yb3B0OwpAQCAtNDU4LDcgKzQ2Myw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUg fHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05f Tk9ORSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Np b25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXBy ZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBv c3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTc2MSw2ICs3NjYsMTUg QEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCQkJaWYgKCh0ZS0+cmVxcyAmIChS RVFfU0NIRU1BIHwgUkVRX0RBVEEgfCBSRVFfU1RBVFMpKSA9PSAwKQogCQkJCWNvbnRpbnVl OwkJLyogaWdub3JlIGlmIG5vdCB0byBiZSBkdW1wZWQgYXQgYWxsICovCiAKKwkJCS8qIFNr aXAgaWYgbm8tdGFibGVzcGFjZSBpcyBnaXZlbi4gKi8KKwkJCWlmIChyb3B0LT5ub1RhYmxl c3BhY2UgJiYgdGUgJiYgdGUtPmRlc2MgJiYKKwkJCQkoc3RyY21wKHRlLT5kZXNjLCAiVEFC TEVTUEFDRSIpID09IDApKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBTa2lwIERST1AgREFU QUJBU0UvUk9MRVMvVEFCTEVTUEFDRSBpZiB3ZSBkaWRuJ3Qgc3BlY2lmeSAtLWNsZWFuICov CisJCQlpZiAoIXJvcHQtPmRyb3BTY2hlbWEgJiYgdGUgJiYgdGUtPnRhZyAmJiAoc3RyY21w KHRlLT50YWcsICJEUk9QX0dMT0JBTCIpID09IDApKQorCQkJCWNvbnRpbnVlOworCiAJCQlz d2l0Y2ggKF90b2NFbnRyeVJlc3RvcmVQYXNzKHRlKSkKIAkJCXsKIAkJCQljYXNlIFJFU1RP UkVfUEFTU19NQUlOOgpAQCAtMTMxNiw3ICsxMzMwLDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFy Y2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxl bmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9u X3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Np b25fc3BlYywgZmFsc2UpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0 YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNy ZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY5MSwxMSArMTcwNSwxNSBAQCBhcmNocHJpbnRmKEFy Y2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKQogCiAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogICogU3R1ZmYgYmVsb3cgaGVyZSBzaG91bGQgYmUgJ3ByaXZhdGUn IHRvIHRoZSBhcmNoaXZlciByb3V0aW5lcworICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNl dCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1w CisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBh bGwuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQK IFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0J CSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQor CQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywK KwkJICBib29sIGFwcGVuZF9kYXRhKQogewogCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwog CWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0xNzE1LDcgKzE3MzMsNyBAQCBTZXRPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVsc2UKIAkJZm4gPSBm aWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwlp ZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCiAJCW1vZGUg PSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsKQEAgLTIzOTEs NyArMjQwOSw3IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNo aXZlRm9ybWF0IGZtdCwKIAogCS8qIGluaXRpYWxpemUgZm9yIGJhY2t3YXJkcyBjb21wYXRp YmxlIHN0cmluZyBwcm9jZXNzaW5nICovCiAJQUgtPnB1YmxpYy5lbmNvZGluZyA9IDA7CS8q IFBHX1NRTF9BU0NJSSAqLwotCUFILT5wdWJsaWMuc3RkX3N0cmluZ3MgPSBmYWxzZTsKKwlB SC0+cHVibGljLnN0ZF9zdHJpbmdzID0gdHJ1ZTsKIAogCS8qIHNxbCBlcnJvciBoYW5kbGlu ZyAqLwogCUFILT5wdWJsaWMuZXhpdF9vbl9lcnJvciA9IHRydWU7CkBAIC0zMDI3LDYgKzMw NDUsMTYgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9jRW50cnkgKnRlLCB0ZVNlY3Rpb24gY3Vy U2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCQlyZXR1cm4gMDsKIAl9CiAKKwkvKgor CSAqIEdsb2JhbCBvYmplY3QgVE9DIGVudHJpZXMgKGUuZy4sIFJPTEVzIG9yIFRBQkxFU1BB Q0VzKSBtdXN0IG5vdCBiZQorCSAqIGlnbm9yZWQuCisJICovCisJaWYgKHN0cmNtcCh0ZS0+ ZGVzYywgIlJPTEUiKSA9PSAwIHx8CisJCXN0cmNtcCh0ZS0+ZGVzYywgIlJPTEUgUFJPUEVS VElFUyIpID09IDAgfHwKKwkJc3RyY21wKHRlLT5kZXNjLCAiVEFCTEVTUEFDRSIpID09IDAg fHwKKwkJc3RyY21wKHRlLT5kZXNjLCAiRFJPUF9HTE9CQUwiKSA9PSAwKQorCQlyZXR1cm4g UkVRX1NDSEVNQTsKKwogCS8qCiAJICogUHJvY2VzcyBleGNsdXNpb25zIHRoYXQgYWZmZWN0 IGNlcnRhaW4gY2xhc3NlcyBvZiBUT0MgZW50cmllcy4KIAkgKi8KQEAgLTMwNjIsNiArMzA5 MCwxNCBAQCBfdG9jRW50cnlSZXF1aXJlZChUb2NFbnRyeSAqdGUsIHRlU2VjdGlvbiBjdXJT ZWN0aW9uLCBBcmNoaXZlSGFuZGxlICpBSCkKIAkJaWYgKHJvcHQtPm5vX3N1YnNjcmlwdGlv bnMgJiYKIAkJCXN0cm5jbXAodGUtPnRhZywgIlNVQlNDUklQVElPTiIsIHN0cmxlbigiU1VC U0NSSVBUSU9OIikpID09IDApCiAJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBHbG9iYWwg b2JqZWN0IFRPQyBlbnRyaWVzIChlLmcuLCBST0xFcyBvciBUQUJMRVNQQUNFcykgYXJlIHRy ZWF0ZWQgYXMKKwkJICogUkVRX1NDSEVNQTsgZm9sbG93IHRoaXMgY29udmVudGlvbiBmb3Ig dGhlaXIgYXNzb2NpYXRlZCBjb21tZW50cy4KKwkJICovCisJCWlmIChzdHJuY21wKHRlLT5k ZXNjLCAiUk9MRSIsIHN0cmxlbigiUk9MRSIpKSA9PSAwIHx8CisJCQlzdHJuY21wKHRlLT5k ZXNjLCAiVEFCTEVTUEFDRSIsIHN0cmxlbigiVEFCTEVTUEFDRSIpKSA9PSAwKQorCQkJcmV0 dXJuIFJFUV9TQ0hFTUE7CiAJfQogCiAJLyoKQEAgLTMwOTEsNiArMzEyNywxNCBAQCBfdG9j RW50cnlSZXF1aXJlZChUb2NFbnRyeSAqdGUsIHRlU2VjdGlvbiBjdXJTZWN0aW9uLCBBcmNo aXZlSGFuZGxlICpBSCkKIAkJaWYgKHJvcHQtPm5vX3N1YnNjcmlwdGlvbnMgJiYKIAkJCXN0 cm5jbXAodGUtPnRhZywgIlNVQlNDUklQVElPTiIsIHN0cmxlbigiU1VCU0NSSVBUSU9OIikp ID09IDApCiAJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBHbG9iYWwgb2JqZWN0IFRPQyBl bnRyaWVzIChlLmcuLCBST0xFcyBvciBUQUJMRVNQQUNFcykgYXJlIHRyZWF0ZWQgYXMKKwkJ ICogUkVRX1NDSEVNQTsgZm9sbG93IHRoaXMgY29udmVudGlvbiBmb3IgdGhlaXIgYXNzb2Np YXRlZCBTRUNVUklUWSBMQUJFTHMuCisJCSAqLworCQlpZiAoc3RybmNtcCh0ZS0+dGFnLCAi Uk9MRSIsIHN0cmxlbigiUk9MRSIpKSA9PSAwIHx8CisJCQlzdHJuY21wKHRlLT50YWcsICJU QUJMRVNQQUNFIiwgc3RybGVuKCJUQUJMRVNQQUNFIikpID09IDApCisJCQlyZXR1cm4gUkVR X1NDSEVNQTsKIAl9CiAKIAkvKiBJZiBpdCdzIGEgc3Vic2NyaXB0aW9uLCBtYXliZSBpZ25v cmUgaXQgKi8KQEAgLTM4NjUsNiArMzkwOSw5IEBAIF9nZXRPYmplY3REZXNjcmlwdGlvbihQ UUV4cEJ1ZmZlciBidWYsIGNvbnN0IFRvY0VudHJ5ICp0ZSkKIAllbHNlIGlmIChzdHJjbXAo dHlwZSwgIkNBU1QiKSA9PSAwIHx8CiAJCQkgc3RyY21wKHR5cGUsICJDSEVDSyBDT05TVFJB SU5UIikgPT0gMCB8fAogCQkJIHN0cmNtcCh0eXBlLCAiQ09OU1RSQUlOVCIpID09IDAgfHwK KwkJCSBzdHJjbXAodHlwZSwgIkRST1BfR0xPQkFMIikgPT0gMCB8fAorCQkJIHN0cmNtcCh0 eXBlLCAiUk9MRSBQUk9QRVJUSUVTIikgPT0gMCB8fAorCQkJIHN0cmNtcCh0eXBlLCAiUk9M RSIpID09IDAgfHwKIAkJCSBzdHJjbXAodHlwZSwgIkRBVEFCQVNFIFBST1BFUlRJRVMiKSA9 PSAwIHx8CiAJCQkgc3RyY21wKHR5cGUsICJERUZBVUxUIikgPT0gMCB8fAogCQkJIHN0cmNt cCh0eXBlLCAiRksgQ09OU1RSQUlOVCIpID09IDAgfHwKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuaAppbmRleCAzMjViNTNmYzliZC4uMzY1MDczYjNlYWUgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTM5NCw2ICszOTQsNyBAQCBzdHJ1 Y3QgX3RvY0VudHJ5CiAKIGV4dGVybiBpbnQJcGFyYWxsZWxfcmVzdG9yZShBcmNoaXZlSGFu ZGxlICpBSCwgVG9jRW50cnkgKnRlKTsKIGV4dGVybiB2b2lkIG9uX2V4aXRfY2xvc2VfYXJj aGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV9vbl9leGl0X2Nsb3Nl X2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKIAogZXh0ZXJuIHZvaWQgd2Fybl9vcl9leGl0X2hv cnJpYmx5KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRy aWJ1dGVfcHJpbnRmKDIsIDMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3Rhci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBi NWJhM2I0NmRkOS4uZDk0ZDBkZTJhNWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfdGFyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpA QCAtODI2LDcgKzgyNiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ CXNhdlZlcmJvc2UgPSBBSC0+cHVibGljLnZlcmJvc2U7CiAJCUFILT5wdWJsaWMudmVyYm9z ZSA9IDA7CiAKLQkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgpOworCQlSZXN0b3Jl QXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCwgZmFsc2UpOwogCiAJCVNldEFyY2hpdmVPcHRpb25z KChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5k ZXggNDk1OTgzMDQzMzUuLmQzZDBjYWM5OGRmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTEyOTIs NyArMTI5Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5v dy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJ UmVzdG9yZUFyY2hpdmUoZm91dCwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwog CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCA5ODM4OWQyMDM0Yy4uNWExMTRkMDkxODUgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMSwxMyArMSwyMCBAQAogLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKgogICogcGdfZHVtcGFsbC5jCisgKgkgIHBnX2R1bXBhbGwgZHVtcHMgYWxs IGRhdGFiYXNlcyBhbmQgZ2xvYmFsIG9iamVjdHMgKHJvbGVzIGFuZAorICoJICB0YWJsZXNw YWNlcykgZnJvbSBhIFBvc3RncmVTUUwgY2x1c3Rlci4KKyAqCisgKgkgIEZvciB0ZXh0IGZv cm1hdCBvdXRwdXQsIGdsb2JhbHMgYXJlIHdyaXR0ZW4gZGlyZWN0bHkgYW5kIHBnX2R1bXAg aXMKKyAqCSAgaW52b2tlZCBmb3IgZWFjaCBkYXRhYmFzZSwgd2l0aCBhbGwgb3V0cHV0IGdv aW5nIHRvIHN0ZG91dCBvciBhIGZpbGUuCisgKgorICoJICBGb3Igbm9uLXRleHQgZm9ybWF0 cyAoY3VzdG9tLCBkaXJlY3RvcnksIHRhciksIGEgZGlyZWN0b3J5IGlzIGNyZWF0ZWQKKyAq CSAgY29udGFpbmluZyBhIHRvYy5nbG8gZmlsZSB3aXRoIGdsb2JhbCBvYmplY3RzLCBhIG1h cC5kYXQgZmlsZSBtYXBwaW5nCisgKgkgIGRhdGFiYXNlIE9JRHMgdG8gbmFtZXMsIGFuZCBh IGRhdGFiYXNlcy8gc3ViZGlyZWN0b3J5IHdpdGggaW5kaXZpZHVhbAorICoJICBwZ19kdW1w IGFyY2hpdmVzIGZvciBlYWNoIGRhdGFiYXNlLgogICoKICAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAog ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz aXR5IG9mIENhbGlmb3JuaWEKICAqCi0gKiBwZ19kdW1wYWxsIGZvcmNlcyBhbGwgcGdfZHVt cCBvdXRwdXQgdG8gYmUgdGV4dCwgc2luY2UgaXQgYWxzbyBvdXRwdXRzCi0gKiB0ZXh0IGlu dG8gdGhlIHNhbWUgb3V0cHV0IHN0cmVhbS4KLSAqCiAgKiBzcmMvYmluL3BnX2R1bXAvcGdf ZHVtcGFsbC5jCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMCw2ICszNyw3IEBA CiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVy LmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJj aGl2ZXIuaCIKIAogLyogdmVyc2lvbiBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19k dW1wICovCiAjZGVmaW5lIFBHRFVNUF9WRVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FM KSAiIFBHX1ZFUlNJT04gIlxuIgpAQCAtNjcsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCBkcm9w REJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKIHN0YXRpYyB2b2lkIGR1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hh ciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29u c3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hh ciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlKTsKIHN0 YXRpYyB2b2lkIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBjb25z dCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hh ciAqb2JqdHlwZSwgY29uc3QgY2hhciAqb2JqbmFtZSwKQEAgLTc2LDYgKzg0LDggQEAgc3Rh dGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVy eSk7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwg U2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAgIFNpbXBsZVN0cmluZ0xp c3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKTsKK3N0YXRpYyBBcmNo aXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpOworc3RhdGlj IGludAljcmVhdGVEdW1wSWQodm9pZCk7CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01B WFBHUEFUSF07CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0czsKQEAgLTEyMyw2ICsx MzMsMTEgQEAgc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9wYXR0 ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNl X2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKIHN0YXRpYyBjaGFyICpyZXN0cmlj dF9rZXk7CitzdGF0aWMgQXJjaGl2ZSAqZm91dCA9IE5VTEw7CitzdGF0aWMgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9Oworc3RhdGljIGludAlk dW1wSWRWYWwgPSAwOworc3RhdGljIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBh cmNoTnVsbDsKK3N0YXRpYyBjb25zdCBDYXRhbG9nSWQgbmlsQ2F0YWxvZ0lkID0gezAsIDB9 OwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTE0OCw2ICsxNjMs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19h cmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQs IE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJ CXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJ ICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9y dCBvcHRpb24gbGV0dGVyCkBAIC0xOTcsNiArMjEzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xl ID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCWNvbnN0IGNo YXIgKmZvcm1hdF9uYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRS SV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNf b25seSA9IGZhbHNlOwpAQCAtMjA3LDYgKzIyNCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAlpbnQJCQljLAogCQkJCXJldDsKIAlpbnQJCQlvcHRpbmRleDsKKwlEdW1w T3B0aW9ucyBkb3B0OwogCiAJcGdfbG9nZ2luZ19pbml0KGFyZ3ZbMF0pOwogCXBnX2xvZ2dp bmdfc2V0X2xldmVsKFBHX0xPR19XQVJOSU5HKTsKQEAgLTI0NCw4ICsyNjIsOSBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJfQogCiAJcGdkdW1wb3B0cyA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CisJSW5pdER1bXBPcHRpb25zKCZkb3B0KTsKIAotCXdoaWxlICgoYyA9 IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3V3gi LCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCXdoaWxlICgoYyA9IGdldG9w dF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxv bmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsK QEAgLTI3Myw3ICsyOTIsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRT aGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNh c2UgJ0YnOgorCQkJCWZvcm1hdF9uYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJl YWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFr OwpAQCAtMzEzLDYgKzMzNCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAog CQkJY2FzZSAnVSc6CiAJCQkJcGd1c2VyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJZG9w dC5jcGFyYW1zLnVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAK IAkJCWNhc2UgJ3YnOgpAQCAtNDM0LDYgKzQ1NiwzMiBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIAorCS8qIEdldCBmb3JtYXQgZm9y IGR1bXAuICovCisJYXJjaER1bXBGb3JtYXQgPSBwYXJzZUR1bXBGb3JtYXQoZm9ybWF0X25h bWUpOworCisJLyoKKwkgKiBJZiBhIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3BlY2lmaWVkLCBh IGZpbGUgbmFtZSBpcyBhbHNvIHJlcXVpcmVkIGFzIHRoZQorCSAqIHBhdGggdG8gdGhlIG1h aW4gZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAm JgorCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJ cGdfbG9nX2Vycm9yKCJvcHRpb24gJXM9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uICVzIiwKKwkJ CQkJICItRi8tLWZvcm1hdCIsICItZi8tLWZpbGUiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQo IlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsK KwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJLyogcmVzdHJpY3Qta2V5IGlzIG9ubHkgc3Vw cG9ydGVkIHdpdGggLS1mb3JtYXQ9cGxhaW4gKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwgJiYgcmVzdHJpY3Rfa2V5KQorCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBv bmx5IGJlIHVzZWQgd2l0aCAlcz1wbGFpbiIsCisJCQkJICItLXJlc3RyaWN0LWtleSIsICIt LWZvcm1hdCIpOworCisJLyogLS1jbGVhbiBhbmQgLWcvLS1nbG9iYWxzLW9ubHkgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXIgaW4gbm9uLXRleHQgZHVtcCAqLworCWlmIChhcmNoRHVtcEZv cm1hdCAhPSBhcmNoTnVsbCAmJiBvdXRwdXRfY2xlYW4gJiYgZ2xvYmFsc19vbmx5KQorCQlw Z19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgaW4g bm9uLXRleHQgZHVtcCIsCisJCQkJICItLWNsZWFuIiwgIi1nLy0tZ2xvYmFscy1vbmx5Iik7 CisKIAkvKgogCSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkIGluIHRo ZSBkdW1wLCBzd2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVhbGx5 IHVzZWZ1bCwganVzdCBtb3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNDk0 LDYgKzU0MiwyNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHNlcXVl bmNlX2RhdGEpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLS1zZXF1 ZW5jZS1kYXRhIik7CiAKKwkvKgorCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVp cmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dC4gIElmIHJlcXVpcmVkLAorCSAqIHRoZW4gY3Jl YXRlIG5ldyBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hO dWxsKQorCXsKKwkJQXNzZXJ0KGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVj dG9yeSBvciBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3Jl YXRlX29yX29wZW5fZGlyKGZpbGVuYW1lKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5hbWUpCisJ eworCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwK KwkJCQkJIGZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgog CSAqIElmIHlvdSBkb24ndCBwcm92aWRlIGEgcmVzdHJpY3Qga2V5LCBvbmUgd2lsbCBiZSBh cHBvaW50ZWQgZm9yIHlvdS4KIAkgKi8KQEAgLTU0MywxOSArNjEyLDYgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCWV4cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRh dGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMsCiAJCQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9u YW1lcyk7CiAKLQkvKgotCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBv dGhlcndpc2UgdXNlIHN0ZG91dAotCSAqLwotCWlmIChmaWxlbmFtZSkKLQl7Ci0JCU9QRiA9 IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7Ci0JCWlmICghT1BGKQotCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkgZmls ZW5hbWUpOwotCX0KLQllbHNlCi0JCU9QRiA9IHN0ZG91dDsKLQogCS8qCiAJICogU2V0IHRo ZSBjbGllbnQgZW5jb2RpbmcgaWYgcmVxdWVzdGVkLgogCSAqLwpAQCAtNTkzLDM1ICs2NDks MTExIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAocXVvdGVfYWxsX2lk ZW50aWZpZXJzKQogCQlleGVjdXRlQ29tbWFuZChjb25uLCAiU0VUIHF1b3RlX2FsbF9pZGVu dGlmaWVycyA9IHRydWUiKTsKIAotCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwg ZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iKTsKLQlpZiAodmVyYm9zZSkKLQkJZHVt cFRpbWVzdGFtcCgiU3RhcnRlZCBvbiIpOwotCi0JLyoKLQkgKiBFbnRlciByZXN0cmljdGVk IG1vZGUgdG8gYmxvY2sgYW55IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQot CSAqIG1hbGljaW91cyBzb3VyY2UgbWlnaHQgdHJ5IHRvIGluamVjdCBhIHZhcmlldHkgb2Yg dGhpbmdzIHZpYSBib2d1cwotCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2Ug Y2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KLQkgKiBhZmZlY3RpbmcgdGhlIGRl c3RpbmF0aW9uIGF0IHJlc3RvcmUgdGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKLQkgKiBtZXRh LWNvbW1hbmRzIHNvIHRoYXQgdGhlIGNsaWVudCBtYWNoaW5lIHRoYXQgcnVucyBwc3FsIHdp dGggdGhlIGR1bXAKLQkgKiBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgotCSAqLwotCWZw cmludGYoT1BGLCAiXFxyZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOwotCi0JLyoK LQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQg c2VydmVkIG5vIHB1cnBvc2UKLQkgKiBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3Ig aW5zdGFsbGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKLQkgKiBkYXRhYmFzZS4gIEV2ZXJ5 dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgot CSAqIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUu Ci0JICovCi0KLQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0 IGNsdXN0ZXIgKi8KLQlmcHJpbnRmKE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3Jl YWRfb25seSA9IG9mZjtcblxuIik7Ci0KLQkvKiBSZXBsaWNhdGUgZW5jb2RpbmcgYW5kIHN0 YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyBpbiBvdXRwdXQgKi8KLQlmcHJpbnRmKE9QRiwg IlNFVCBjbGllbnRfZW5jb2RpbmcgPSAnJXMnO1xuIiwKKwkvKiBjcmVhdGUgYSBhcmNoaXZl IGZpbGUgZm9yIGdsb2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwpCisJeworCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCQljaGFyICAgICAgICAgICAgZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKwkJY29uc3Qg Y2hhciAqZW5jbmFtZTsKKworCQkvKiBTZXQgZmlsZSBwYXRoIGZvciBnbG9iYWwgc3FsIGNv bW1hbmRzLiAqLworCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9j LmdsbyIsIGZpbGVuYW1lKTsKKworCQkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLworCQlm b3V0ID0gQ3JlYXRlQXJjaGl2ZShnbG9iYWxfcGF0aCwgYXJjaEN1c3RvbSwgY29tcHJlc3Np b25fc3BlYywKKwkJCQlkb3N5bmMsIGFyY2hNb2RlV3JpdGUsIE5VTEwsIERBVEFfRElSX1NZ TkNfTUVUSE9EX0ZTWU5DKTsKKworCQkvKiBNYWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxl IHJpZ2h0IGF3YXkgKi8KKwkJU2V0QXJjaGl2ZU9wdGlvbnMoZm91dCwgJmRvcHQsIE5VTEwp OworCisJCSgoQXJjaGl2ZUhhbmRsZSAqKSBmb3V0KS0+Y29ubmVjdGlvbiA9IGNvbm47CisJ CSgoQXJjaGl2ZUhhbmRsZSAqKSBmb3V0KS0+cHVibGljLm51bVdvcmtlcnMgPSAxOworCisJ CS8qIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGhvb2sgKi8KKwkJb25fZXhpdF9jbG9zZV9hcmNo aXZlKGZvdXQpOworCisJCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kgdG8g YmUgKi8KKwkJZm91dC0+dmVyYm9zZSA9IHZlcmJvc2U7CisKKwkJLyoKKwkJICogV2UgYWxs b3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciBy ZWxlYXNlCisJCSAqIG9mIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJz aW9uIGNoZWNrIGluCisJCSAqIHBnX2R1bXBhbGwuYy4pCisJCSAqLworCQlmb3V0LT5taW5S ZW1vdGVWZXJzaW9uID0gOTAyMDA7CisJCWZvdXQtPm1heFJlbW90ZVZlcnNpb24gPSAoUEdf VkVSU0lPTl9OVU0gLyAxMDApICogMTAwICsgOTk7CisJCWZvdXQtPm51bVdvcmtlcnMgPSAx OworCisJCS8qIER1bXAgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkuICovCisJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRf b25seSA9IG9mZjtcblxuIik7CisJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkgbmlsQ2F0 YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVt cCBJRCAqLworCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSAiZGVmYXVsdF90cmFuc2FjdGlv bl9yZWFkX29ubHkiLAorCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJkZWZhdWx0X3RyYW5z YWN0aW9uX3JlYWRfb25seSIsCisJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9E QVRBLAorCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gcXJ5LT5kYXRhKSk7CisJCXJlc2V0UFFF eHBCdWZmZXIocXJ5KTsKKworCQkvKiBQdXQgdGhlIGNvcnJlY3QgZW5jb2RpbmcgaW50byB0 aGUgYXJjaGl2ZSAqLworCQllbmNuYW1lID0gcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGlu Zyk7CisKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiU0VUIGNsaWVudF9lbmNvZGlu ZyA9ICIpOworCQlhcHBlbmRTdHJpbmdMaXRlcmFsQUgocXJ5LCBlbmNuYW1lLCBmb3V0KTsK KwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiO1xuIik7CisJCUFyY2hpdmVFbnRyeShm b3V0LAorCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCSBjcmVh dGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSAi Y2xpZW50X2VuY29kaW5nIiwKKwkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiY2xpZW50X2Vu Y29kaW5nIiwKKwkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJ CQkJCSAgLmNyZWF0ZVN0bXQgPSBxcnktPmRhdGEpKTsKKwkJcmVzZXRQUUV4cEJ1ZmZlcihx cnkpOworCisJCS8qIFB1dCB0aGUgY29ycmVjdCBlc2NhcGUgc3RyaW5nIGJlaGF2aW9yIGlu dG8gdGhlIGFyY2hpdmUuICovCisJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIlNFVCBzdGFu ZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAnb24nO1xuIik7CisJCUFyY2hpdmVFbnRyeShm b3V0LAorCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCSBjcmVh dGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSAi c3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzIiwKKwkJCQkJCQkJICAuZGVzY3JpcHRpb24g PSAic3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzIiwKKwkJCQkJCQkJICAuc2VjdGlvbiA9 IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBxcnktPmRhdGEp KTsKKwkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJfQorCWVsc2UKKwl7CisJCWZwcmlu dGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxu XG4iKTsKKworCQlpZiAodmVyYm9zZSkKKwkJCWR1bXBUaW1lc3RhbXAoIlN0YXJ0ZWQgb24i KTsKKworCQkvKgorCQkgKiBFbnRlciByZXN0cmljdGVkIG1vZGUgdG8gYmxvY2sgYW55IHVu ZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQorCQkgKiBtYWxpY2lvdXMgc291cmNl IG1pZ2h0IHRyeSB0byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2aWEgYm9ndXMKKwkJ ICogcmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNo IHNvdXJjZXMgZnJvbQorCQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0IHJlc3Rv cmUgdGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKKwkJICogbWV0YS1jb21tYW5kcyBzbyB0aGF0 IHRoZSBjbGllbnQgbWFjaGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRoZSBkdW1wCisJCSAq IG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCisJCSAqLworCQlmcHJpbnRmKE9QRiwgIlxc cmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKworCQkvKgorCQkgKiBXZSB1c2Vk IHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5vIHB1 cnBvc2UKKwkJICogb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MgZm9yIGluc3RhbGxhdGlv bnMgd2l0aG91dCBhIHBvc3RncmVzCisJCSAqIGRhdGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdy ZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwgc28gd2hpY2hldmVyCisJCSAqIGRhdGFi YXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCisJCSAqLwor CisJCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRlIHRvIHRoZSB0YXJnZXQgY2x1c3Rl ciAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25s eSA9IG9mZjtcblxuIik7CisKKwkJLyogUmVwbGljYXRlIGVuY29kaW5nIGFuZCBzdGFuZGFy ZF9jb25mb3JtaW5nX3N0cmluZ3MgaW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BGLCAiU0VU IGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAogCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihl bmNvZGluZykpOwotCWZwcmludGYoT1BGLCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3Ry aW5ncyA9IG9uO1xuIik7Ci0JZnByaW50ZihPUEYsICJcbiIpOworCQlmcHJpbnRmKE9QRiwg IlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSBvbjtcbiIpOworCQlmcHJpbnRm KE9QRiwgIlxuIik7CisJfQogCiAJaWYgKCFkYXRhX29ubHkgJiYgIXN0YXRpc3RpY3Nfb25s eSAmJiAhbm9fc2NoZW1hKQogCXsKQEAgLTYzMCw4ICs3NjIsMTQgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQkgKiBkZXBlbmRlbmN5IGFuYWx5c2lzIGJlY2F1c2UgZGF0 YWJhc2VzIG5ldmVyIGRlcGVuZCBvbiBlYWNoIG90aGVyLAogCQkgKiBhbmQgdGFibGVzcGFj ZXMgbmV2ZXIgZGVwZW5kIG9uIGVhY2ggb3RoZXIuICBSb2xlcyBjb3VsZCBoYXZlCiAJCSAq IGdyYW50cyB0byBlYWNoIG90aGVyLCBidXQgRFJPUCBST0xFIHdpbGwgY2xlYW4gdGhvc2Ug dXAgc2lsZW50bHkuCisJCSAqCisJCSAqIEZvciBub24tdGV4dCBmb3JtYXRzLCBwZ19kdW1w YWxsIHVuY29uZGl0aW9uYWxseSBwcm9jZXNzIC0tY2xlYW4KKwkJICogb3B0aW9uLiBJbiBj b250cmFzdCwgcGdfcmVzdG9yZSBvbmx5IGFwcGxpZXMgaXQgaWYgdGhlIHVzZXIKKwkJICog ZXhwbGljaXRseSBwcm92aWRlcyB0aGUgZmxhZy4gIFRoaXMgZGlzY3JlcGFuY3kgcmVzb2x2 ZXMgY29ybmVyIGNhc2VzCisJCSAqIHdoZXJlIHBnX3Jlc3RvcmUgcmVxdWlyZXMgY2xlYW51 cCBpbnN0cnVjdGlvbnMgdGhhdCBtYXkgYmUgbWlzc2luZworCQkgKiBmcm9tIGEgc3RhbmRh cmQgcGdfZHVtcGFsbCBvdXRwdXQuCiAJCSAqLwotCQlpZiAob3V0cHV0X2NsZWFuKQorCQlp ZiAob3V0cHV0X2NsZWFuIHx8IGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQogCQl7CiAJ CQlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25s eSkKIAkJCQlkcm9wREJzKGNvbm4pOwpAQCAtNjY1LDI4ICs4MDMsNDUgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCQkJZHVtcFRhYmxlc3BhY2VzKGNvbm4pOwogCX0KIAot CS8qCi0JICogRXhpdCByZXN0cmljdGVkIG1vZGUganVzdCBiZWZvcmUgZHVtcGluZyB0aGUg ZGF0YWJhc2VzLiAgcGdfZHVtcCB3aWxsCi0JICogaGFuZGxlIGVudGVyaW5nIHJlc3RyaWN0 ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KLQkgKi8KLQlmcHJpbnRmKE9QRiwgIlxc dW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwl7CisJCS8qCisJCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1 c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAKKwkJICogd2lsbCBo YW5kbGUgZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgor CQkgKi8KKwkJZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rf a2V5KTsKKwl9CiAKIAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFi bGVzcGFjZXNfb25seSkKIAkJZHVtcERhdGFiYXNlcyhjb25uKTsKIAotCVBRZmluaXNoKGNv bm4pOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwl7CisJCVBRZmluaXNo KGNvbm4pOworCisJCWlmICh2ZXJib3NlKQorCQkJZHVtcFRpbWVzdGFtcCgiQ29tcGxldGVk IG9uIik7CisJCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1 c3RlciBkdW1wIGNvbXBsZXRlXG4tLVxuXG4iKTsKIAotCWlmICh2ZXJib3NlKQotCQlkdW1w VGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsKLQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0 Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CisJCWlm IChmaWxlbmFtZSkKKwkJeworCQkJZmNsb3NlKE9QRik7CiAKLQlpZiAoZmlsZW5hbWUpCisJ CQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8K KwkJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKKwkJCQko dm9pZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKKwkJfQorCX0KKwllbHNlCiAJ ewotCQlmY2xvc2UoT1BGKTsKKwkJUmVzdG9yZU9wdGlvbnMgKnJvcHQ7CisKKwkJcm9wdCA9 IE5ld1Jlc3RvcmVPcHRpb25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0 LCByb3B0KTsKIAotCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBu b3QgZmF0YWwgKi8KLQkJaWYgKGRvc3luYykKLQkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxl bmFtZSwgZmFsc2UpOworCQkvKiBNYXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJlIG91dHB1 dCAqLworCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9zZUFy Y2hpdmUoZm91dCk7CiAJfQogCiAJZXhpdF9uaWNlbHkoMCk7CkBAIC02OTYsMTIgKzg1MSwx NCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2 b2lkKQogewotCXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBj bHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8o IiVzIGV4cG9ydHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNj cmlwdCBvciB0byBvdGhlciBmb3JtYXRzLlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50Zihf KCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLlxuIiksIHByb2du YW1lKTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpcbiIpKTsKIAlwcmludGYo XygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1dCBmaWxlIG5hbWVcbiIp KTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAgIG91dHB1dCBm aWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCSAiICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxuIikpOwogCXBy aW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBtb2RlXG4i KSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRwdXQg dmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1s b2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBm b3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC03OTYsMjQgKzk1Myw0NSBAQCBkcm9wUm9sZXMo UEdjb25uICpjb25uKQogCiAJaV9yb2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJvbG5hbWUi KTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4g MCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICItLVxu LS0gRHJvcCByb2xlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVz KHJlcyk7IGkrKykKIAl7CiAJCWNvbnN0IGNoYXIgKnJvbGVuYW1lOworCQlQUUV4cEJ1ZmZl ciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJCXJvbGVuYW1lID0gUFFnZXR2 YWx1ZShyZXMsIGksIGlfcm9sbmFtZSk7CiAKLQkJZnByaW50ZihPUEYsICJEUk9QIFJPTEUg JXMlcztcbiIsCi0JCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCi0JCQkJZm10 SWQocm9sZW5hbWUpKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQl7 CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgJXMlcztcbiIsCisJ CQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAorCQkJCQlmbXRJZChyb2xlbmFt ZSkpOworCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCX0KKwkJZWxz ZQorCQl7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgSUYgRVhJ U1RTICVzO1xuIiwKKwkJCQkJZm10SWQocm9sZW5hbWUpKTsKKworCQkJQXJjaGl2ZUVudHJ5 KGZvdXQsCisJCQkJCW5pbENhdGFsb2dJZCwgIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJY3Jl YXRlRHVtcElkKCksICAgICAgICAvKiBkdW1wIElEICovCisJCQkJCUFSQ0hJVkVfT1BUUygu dGFnID0gIkRST1BfR0xPQkFMIiwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9ICJEUk9QX0dMT0JB TCIsCisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkuY3JlYXRl U3RtdCA9IGRlbFFyeS0+ZGF0YSkpOworCQl9CisKKwkJZGVzdHJveVBRRXhwQnVmZmVyKGRl bFFyeSk7CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYp OwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAgLTgyMyw2ICsx MDAxLDggQEAgc3RhdGljIHZvaWQKIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUFFF eHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQUUV4cEJ1ZmZlciBjb21t ZW50X2J1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgc2VjbGFiZWxf YnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJ aV9vaWQsCiAJCQkJaV9yb2xuYW1lLApAQCAtODk0LDcgKzEwNzQsNyBAQCBkdW1wUm9sZXMo UEdjb25uICpjb25uKQogCWlfcm9sY29tbWVudCA9IFBRZm51bWJlcihyZXMsICJyb2xjb21t ZW50Iik7CiAJaV9pc19jdXJyZW50X3VzZXIgPSBQUWZudW1iZXIocmVzLCAiaXNfY3VycmVu dF91c2VyIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMo cmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BG LCAiLS1cbi0tIFJvbGVzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBs ZXMocmVzKTsgaSsrKQpAQCAtOTEzLDYgKzEwOTMsOCBAQCBkdW1wUm9sZXMoUEdjb25uICpj b25uKQogCQl9CiAKIAkJcmVzZXRQUUV4cEJ1ZmZlcihidWYpOworCQlyZXNldFBRRXhwQnVm ZmVyKGNvbW1lbnRfYnVmKTsKKwkJcmVzZXRQUUV4cEJ1ZmZlcihzZWNsYWJlbF9idWYpOwog CiAJCWlmIChiaW5hcnlfdXBncmFkZSkKIAkJewpAQCAtOTg5LDE3ICsxMTcxLDUzIEBAIGR1 bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAKIAkJaWYgKCFub19jb21tZW50cyAmJiAhUFFnZXRp c251bGwocmVzLCBpLCBpX3JvbGNvbW1lbnQpKQogCQl7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZl cihidWYsICJDT01NRU5UIE9OIFJPTEUgJXMgSVMgIiwgZm10SWQocm9sZW5hbWUpKTsKLQkJ CWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGJ1ZiwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9s Y29tbWVudCksIGNvbm4pOwotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVmLCAiO1xuIik7 CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjb21tZW50X2J1ZiwgIkNPTU1FTlQgT04gUk9MRSAl cyBJUyAiLCBmbXRJZChyb2xlbmFtZSkpOworCQkJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4o Y29tbWVudF9idWYsIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbGNvbW1lbnQpLCBjb25uKTsK KwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGNvbW1lbnRfYnVmLCAiO1xuIik7CiAJCX0KIAog CQlpZiAoIW5vX3NlY3VyaXR5X2xhYmVscykKIAkJCWJ1aWxkU2hTZWNMYWJlbHMoY29ubiwg InBnX2F1dGhpZCIsIGF1dGhfb2lkLAogCQkJCQkJCSAiUk9MRSIsIHJvbGVuYW1lLAotCQkJ CQkJCSBidWYpOworCQkJCQkJCSBzZWNsYWJlbF9idWYpOwogCi0JCWZwcmludGYoT1BGLCAi JXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJ CXsKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQkJZnByaW50ZihPUEYs ICIlcyIsIGNvbW1lbnRfYnVmLT5kYXRhKTsKKworCQkJaWYgKHNlY2xhYmVsX2J1Zi0+ZGF0 YVswXSAhPSAnXDAnKQorCQkJCWZwcmludGYoT1BGLCAiJXMiLCBzZWNsYWJlbF9idWYtPmRh dGEpOworCQl9CisJCWVsc2UKKwkJeworCQkJY2hhcgkgICAqdGFnID0gcHNwcmludGYoIiVz ICVzIiwgIlJPTEUiLCBmbXRJZChyb2xlbmFtZSkpOworCisJCQlBcmNoaXZlRW50cnkoZm91 dCwKKwkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBjcmVh dGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0g dGFnLAorCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiUk9MRSIsCisJCQkJCQkJCQkgIC5z ZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBi dWYtPmRhdGEpKTsKKwkJCWlmIChjb21tZW50X2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJ CUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cg SUQgKi8KKwkJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJCQkg QVJDSElWRV9PUFRTKC50YWcgPSB0YWcsCisJCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAi Q09NTUVOVCIsCisJCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJ CQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGNvbW1lbnRfYnVmLT5kYXRhKSk7CisKKwkJCWlm IChzZWNsYWJlbF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlBcmNoaXZlRW50cnkoZm91 dCwKKwkJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkJIGNy ZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFn ID0gdGFnLAorCQkJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlNFQ1VSSVRZIExBQkVMIiwK KwkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCQkg IC5jcmVhdGVTdG10ID0gc2VjbGFiZWxfYnVmLT5kYXRhKSk7CisJCX0KIAl9CiAKIAkvKgpA QCAtMTAwNyw3ICsxMjI1LDcgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkgKiBXZSBk byBpdCB0aGlzIHdheSBiZWNhdXNlIGNvbmZpZyBzZXR0aW5ncyBmb3Igcm9sZXMgY291bGQg bWVudGlvbiB0aGUKIAkgKiBuYW1lcyBvZiBvdGhlciByb2xlcy4KIAkgKi8KLQlpZiAoUFFu dHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25m aWd1cmF0aW9uc1xuLS1cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMp OyBpKyspCkBAIC0xMDE1LDkgKzEyMzMsMTIgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikK IAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiAKIAlk ZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoY29tbWVudF9i dWYpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzZWNsYWJlbF9idWYpOwogfQogCiAKQEAgLTEw MzEsNiArMTI1Miw3IEBAIHN0YXRpYyB2b2lkCiBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25u ICpjb25uKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJ UFFFeHBCdWZmZXIgcXVlcnlidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCVBRRXhwQnVm ZmVyIG9wdGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUEdyZXN1bHQgICAqcmVzOwog CWludAkJCXN0YXJ0ID0gMCwKQEAgLTEwOTMsNyArMTMxNSw3IEBAIGR1bXBSb2xlTWVtYmVy c2hpcChQR2Nvbm4gKmNvbm4pCiAJaV9pbmhlcml0X29wdGlvbiA9IFBRZm51bWJlcihyZXMs ICJpbmhlcml0X29wdGlvbiIpOwogCWlfc2V0X29wdGlvbiA9IFBRZm51bWJlcihyZXMsICJz ZXRfb3B0aW9uIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBs ZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYo T1BGLCAiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOwogCiAJLyoKQEAgLTEy MjksOCArMTQ1MSw5IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAKIAkJ CQkvKiBHZW5lcmF0ZSB0aGUgYWN0dWFsIEdSQU5UIHN0YXRlbWVudC4gKi8KIAkJCQlyZXNl dFBRRXhwQnVmZmVyKG9wdGJ1Zik7Ci0JCQkJZnByaW50ZihPUEYsICJHUkFOVCAlcyIsIGZt dElkKHJvbGUpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIiBUTyAlcyIsIGZtdElkKG1lbWJlcikp OworCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnlidWYpOworCQkJCWFwcGVuZFBRRXhwQnVm ZmVyKHF1ZXJ5YnVmLCAiR1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7CisJCQkJYXBwZW5kUFFF eHBCdWZmZXIocXVlcnlidWYsICIgVE8gJXMiLCBmbXRJZChtZW1iZXIpKTsKIAkJCQlpZiAo KmFkbWluX29wdGlvbiA9PSAndCcpCiAJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKG9wdGJ1 ZiwgIkFETUlOIE9QVElPTiIpOwogCQkJCWlmIChkdW1wX2dyYW50X29wdGlvbnMpCkBAIC0x MjUxLDEwICsxNDc0LDIxIEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJ CQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKG9wdGJ1ZiwgIlNFVCBGQUxTRSIpOwogCQkJCX0K IAkJCQlpZiAob3B0YnVmLT5kYXRhWzBdICE9ICdcMCcpCi0JCQkJCWZwcmludGYoT1BGLCAi IFdJVEggJXMiLCBvcHRidWYtPmRhdGEpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVy eWJ1ZiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKIAkJCQlpZiAoZHVtcF9ncmFudG9y cykKLQkJCQkJZnByaW50ZihPUEYsICIgR1JBTlRFRCBCWSAlcyIsIGZtdElkKGdyYW50b3Ip KTsKLQkJCQlmcHJpbnRmKE9QRiwgIjtcbiIpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihx dWVyeWJ1ZiwgIiBHUkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVu ZFBRRXhwQnVmZmVyKHF1ZXJ5YnVmLCAiO1xuIik7CisKKwkJCQlpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaE51bGwpCisJCQkJCWZwcmludGYoT1BGLCAiJXMiLCBxdWVyeWJ1Zi0+ZGF0 YSk7CisJCQkJZWxzZQorCQkJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCQkJIG5pbENh dGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8q IGR1bXAgSUQgKi8KKwkJCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gZm10SWQocm9sZSks CisJCQkJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlJPTEUgUFJPUEVSVElFUyIsCisJCQkJ CQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJCQkgIC5j cmVhdGVTdG10ID0gcXVlcnlidWYtPmRhdGEpKTsKIAkJCX0KIAkJfQogCkBAIC0xMjY1LDgg KzE0OTksMTEgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAogCVBRY2xl YXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKwlkZXN0cm95UFFFeHBCdWZm ZXIocXVlcnlidWYpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihvcHRidWYpOwogCi0JZnByaW50 ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMjkzLDcgKzE1MzAsNyBAQCBkdW1w Um9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5w Z19wYXJhbWV0ZXJfYWNsICIKIAkJCQkJICAgIk9SREVSIEJZIDEiKTsKIAotCWlmIChQUW50 dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2aWxl Z2VzIG9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIik7CiAKIAlmb3IgKGkg PSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKQEAgLTEzMTgsMTQgKzE1NTUsMjUgQEAg ZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQlleGl0X25pY2VseSgxKTsKIAkJ fQogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsK KwkJZWxzZQorCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkv KiBjYXRhbG9nIElEICovCisJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8K KwkJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IGZtdElkKHBhcm93bmVyKSwKKwkJCQkJCQkJ CSAgLmRlc2NyaXB0aW9uID0gIlJPTEUgUFJPUEVSVElFUyIsCisJCQkJCQkJCQkgIC5zZWN0 aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBidWYt PmRhdGEpKTsKIAogCQlmcmVlKGZwYXJuYW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1 Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCisJ aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4i KTsKIH0KIAogCkBAIC0xMzQ3LDIxICsxNTk1LDQxIEBAIGRyb3BUYWJsZXNwYWNlcyhQR2Nv bm4gKmNvbm4pCiAJCQkJCSAgICJXSEVSRSBzcGNuYW1lICF+ICdecGdfJyAiCiAJCQkJCSAg ICJPUkRFUiBCWSAxIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50 dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIpOwogCiAJZm9yIChp ID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpzcGNuYW1l ID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQlQUUV4cEJ1ZmZlcglkZWxRcnkgPSBjcmVh dGVQUUV4cEJ1ZmZlcigpOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBUQUJMRVNQQUNFICVz JXM7XG4iLAotCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAotCQkJCWZtdElk KHNwY25hbWUpKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQl7CisJ CQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIs CisJCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAorCQkJCQlmbXRJZChzcGNu YW1lKSk7CisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJfQorCQll bHNlCisJCXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgVEFCTEVTUEFD RSBJRiBFWElTVFMgJXM7XG4iLAorCQkJCQlmbXRJZChzcGNuYW1lKSk7CisJCQlBcmNoaXZl RW50cnkoZm91dCwKKwkJCQkJbmlsQ2F0YWxvZ0lkLCAgLyogY2F0YWxvZyBJRCAqLworCQkJ CQljcmVhdGVEdW1wSWQoKSwgICAgICAgIC8qIGR1bXAgSUQgKi8KKwkJCQkJQVJDSElWRV9P UFRTKC50YWcgPSAiRFJPUF9HTE9CQUwiLAorCQkJCQkJLmRlc2NyaXB0aW9uID0gIkRST1Bf R0xPQkFMIiwKKwkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCS5j cmVhdGVTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCX0KKworCQlkZXN0cm95UFFFeHBCdWZm ZXIoZGVsUXJ5KTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxu XG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BG LCAiXG5cbiIpOwogfQogCiAvKgpAQCAtMTM3MSw2ICsxNjM5LDggQEAgc3RhdGljIHZvaWQK IGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUEdyZXN1bHQgICAqcmVzOwor CVBRRXhwQnVmZmVyIGNvbW1lbnRfYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQUUV4 cEJ1ZmZlciBzZWNsYWJlbF9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCWludAkJCWk7 CiAKIAkvKgpAQCAtMTM4Nyw3ICsxNjU3LDcgQEAgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAq Y29ubikKIAkJCQkJICAgIldIRVJFIHNwY25hbWUgIX4gJ15wZ18nICIKIAkJCQkJICAgIk9S REVSIEJZIDEiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxl cyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihP UEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8 IFBRbnR1cGxlcyhyZXMpOyBpKyspCkBAIC0xNDA2LDYgKzE2NzYsOSBAQCBkdW1wVGFibGVz cGFjZXMoUEdjb25uICpjb25uKQogCQkvKiBuZWVkZWQgZm9yIGJ1aWxkQUNMQ29tbWFuZHMo KSAqLwogCQlmc3BjbmFtZSA9IHBnX3N0cmR1cChmbXRJZChzcGNuYW1lKSk7CiAKKwkJcmVz ZXRQUUV4cEJ1ZmZlcihjb21tZW50X2J1Zik7CisJCXJlc2V0UFFFeHBCdWZmZXIoc2VjbGFi ZWxfYnVmKTsKKwogCQlpZiAoYmluYXJ5X3VwZ3JhZGUpCiAJCXsKIAkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKGJ1ZiwgIlxuLS0gRm9yIGJpbmFyeSB1cGdyYWRlLCBtdXN0IHByZXNlcnZl IHBnX3RhYmxlc3BhY2Ugb2lkXG4iKTsKQEAgLTE0NDcsMjQgKzE3MjAsNjcgQEAgZHVtcFRh Ymxlc3BhY2VzKFBHY29ubiAqY29ubikKIAogCQlpZiAoIW5vX2NvbW1lbnRzICYmIHNwY2Nv bW1lbnQgJiYgc3BjY29tbWVudFswXSAhPSAnXDAnKQogCQl7Ci0JCQlhcHBlbmRQUUV4cEJ1 ZmZlcihidWYsICJDT01NRU5UIE9OIFRBQkxFU1BBQ0UgJXMgSVMgIiwgZnNwY25hbWUpOwot CQkJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4oYnVmLCBzcGNjb21tZW50LCBjb25uKTsKLQkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKGJ1ZiwgIjtcbiIpOworCQkJYXBwZW5kUFFFeHBCdWZm ZXIoY29tbWVudF9idWYsICJDT01NRU5UIE9OIFRBQkxFU1BBQ0UgJXMgSVMgIiwgZnNwY25h bWUpOworCQkJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4oY29tbWVudF9idWYsIHNwY2NvbW1l bnQsIGNvbm4pOworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoY29tbWVudF9idWYsICI7XG4i KTsKIAkJfQogCiAJCWlmICghbm9fc2VjdXJpdHlfbGFiZWxzKQogCQkJYnVpbGRTaFNlY0xh YmVscyhjb25uLCAicGdfdGFibGVzcGFjZSIsIHNwY29pZCwKIAkJCQkJCQkgIlRBQkxFU1BB Q0UiLCBzcGNuYW1lLAotCQkJCQkJCSBidWYpOworCQkJCQkJCSBzZWNsYWJlbF9idWYpOwog Ci0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaE51bGwpCisJCXsKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEp OworCisJCQlpZiAoY29tbWVudF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlmcHJpbnRm KE9QRiwgIiVzIiwgY29tbWVudF9idWYtPmRhdGEpOworCisJCQlpZiAoc2VjbGFiZWxfYnVm LT5kYXRhWzBdICE9ICdcMCcpCisJCQkJZnByaW50ZihPUEYsICIlcyIsIHNlY2xhYmVsX2J1 Zi0+ZGF0YSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQljaGFyCSAgICp0YWcgPSBwc3ByaW50 ZigiJXMgJXMiLCAiVEFCTEVTUEFDRSIsIGZtdElkKGZzcGNuYW1lKSk7CisKKwkJCUFyY2hp dmVFbnRyeShmb3V0LAorCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLwor CQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkgQVJDSElWRV9P UFRTKC50YWcgPSB0YWcsCisJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJUQUJMRVNQQUNF IiwKKwkJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJ ICAuY3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0YSkpOworCisJCQlpZiAoY29tbWVudF9idWYtPmRh dGFbMF0gIT0gJ1wwJykKKwkJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCQkgbmlsQ2F0 YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBk dW1wIElEICovCisJCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAorCQkJCQkJCQkJ CSAgLmRlc2NyaXB0aW9uID0gIkNPTU1FTlQiLAorCQkJCQkJCQkJCSAgLnNlY3Rpb24gPSBT RUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBjb21tZW50X2J1 Zi0+ZGF0YSkpOworCisJCQlpZiAoc2VjbGFiZWxfYnVmLT5kYXRhWzBdICE9ICdcMCcpCisJ CQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxv ZyBJRCAqLworCQkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJ CSBBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9 ICJTRUNVUklUWSBMQUJFTCIsCisJCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJF X0RBVEEsCisJCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHNlY2xhYmVsX2J1Zi0+ZGF0YSkp OworCQl9CiAKIAkJZnJlZShmc3BjbmFtZSk7CiAJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYp OwogCX0KIAogCVBRY2xlYXIocmVzKTsKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlkZXN0 cm95UFFFeHBCdWZmZXIoY29tbWVudF9idWYpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzZWNs YWJlbF9idWYpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJp bnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNDg3LDEyICsxODAzLDEzIEBAIGRyb3BE QnMoUEdjb25uICpjb25uKQogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRj b25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgZGF0bmFtZSIpOwogCi0JaWYg KFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIGRh dGFiYXNlcyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsKIAog CWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAq ZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQlQUUV4cEJ1ZmZlciBkZWxRcnkg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJCS8qCiAJCSAqIFNraXAgInBvc3RncmVzIiBh bmQgInRlbXBsYXRlMSI7IGR1bXBEYXRhYmFzZXMoKSB3aWxsIGRlYWwgd2l0aApAQCAtMTUw MywxNSArMTgyMCwzNSBAQCBkcm9wREJzKFBHY29ubiAqY29ubikKIAkJCXN0cmNtcChkYm5h bWUsICJ0ZW1wbGF0ZTAiKSAhPSAwICYmCiAJCQlzdHJjbXAoZGJuYW1lLCAicG9zdGdyZXMi KSAhPSAwKQogCQl7Ci0JCQlmcHJpbnRmKE9QRiwgIkRST1AgREFUQUJBU0UgJXMlcztcbiIs Ci0JCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAotCQkJCQlmbXRJZChkYm5h bWUpKTsKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCXsKKwkJCQlh cHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIERBVEFCQVNFICVzJXM7XG4iLAorCQkJ CQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCisJCQkJCQlmbXRJZChkYm5hbWUp KTsKKwkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIERBVEFCQVNF IElGIEVYSVNUUyAlcztcbiIsCisJCQkJCQlmbXRJZChkYm5hbWUpKTsKKworCQkJCUFyY2hp dmVFbnRyeShmb3V0LAorCQkJCQkJbmlsQ2F0YWxvZ0lkLCAgLyogY2F0YWxvZyBJRCAqLwor CQkJCQkJY3JlYXRlRHVtcElkKCksICAgICAgICAvKiBkdW1wIElEICovCisJCQkJCQlBUkNI SVZFX09QVFMoLnRhZyA9ICJEUk9QX0dMT0JBTCIsCisJCQkJCQkJLmRlc2NyaXB0aW9uID0g IkRST1BfR0xPQkFMIiwKKwkJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJ CQkJCQkJLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsKKwkJCX0KKworCQkJZGVzdHJv eVBRRXhwQnVmZmVyKGRlbFFyeSk7CiAJCX0KIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTE1MzMsNyArMTg3MCw3IEBA IGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAK IAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhKTsKIAotCWlmIChQUW50dXBs ZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKIAl7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKIApAQCAtMTU0OCw3 ICsxODg1LDE3IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq dXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29ubiwgUFFnZXR2YWx1ZShy ZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5VTEwsIE5VTEwsCiAJ CQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisKKwkJ aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIs IGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJIG5p bENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkv KiBkdW1wIElEICovCisJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSB1c2VybmFtZSwKKwkJ CQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlJPTEUgUFJPUEVSVElFUyIsCisJCQkJCQkJCQkg IC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQg PSBidWYtPmRhdGEpKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CkBAIC0xNjE4LDYgKzE5NjUs OSBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIHsKIAlQR3Jlc3VsdCAgICpyZXM7 CiAJaW50CQkJaTsKKwljaGFyCQlkYl9zdWJkaXJbTUFYUEdQQVRIXTsKKwljaGFyCQlkYmZp bGVwYXRoW01BWFBHUEFUSF07CisJRklMRQkgICAqbWFwX2ZpbGUgPSBOVUxMOwogCiAJLyoK IAkgKiBTa2lwIGRhdGFiYXNlcyBtYXJrZWQgbm90IGRhdGFsbG93Y29ubiwgc2luY2Ugd2Un ZCBiZSB1bmFibGUgdG8gY29ubmVjdApAQCAtMTYzMSwxOSArMTk4MSw1OSBAQCBkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1v ZGUgd2l0aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJ CQkgICAiU0VMRUNUIGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAi CiAJCQkJCSAgICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxs b3djb25uIEFORCBkYXRjb25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRh dG5hbWUgPD4gJ3RlbXBsYXRlMScpLCBkYXRuYW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJl cykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7 CiAKKwkvKgorCSAqIElmIGRpcmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZp ZWQsIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9y eSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgb3Igc3ViZGlyZWN0b3J5CisJICogd2ls bCBiZSBjcmVhdGVkIGluIHRoYXQgc3ViZGlyZWN0b3J5IGJ5IHBnX2R1bXAuCisJICovCisJ aWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgkJbWFwX2ZpbGVf cGF0aFtNQVhQR1BBVEhdOworCQljaGFyICAgICAgICptYXBfcHJlYW1ibGVbXSA9IHsKKwkJ CSIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyIsCisJCQkiIyBtYXAuZGF0IiwKKwkJCSIjIiwKKwkJCSIjIFRoaXMg ZmlsZSBtYXBzIG9pZHMgdG8gZGF0YWJhc2UgbmFtZXMiLAorCQkJIiMiLAorCQkJIiMgcGdf cmVzdG9yZSB3aWxsIHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgbGlzdGVkIGhlcmUsIHVu bGVzcyIsCisJCQkiIyBvdGhlcndpc2UgZXhjbHVkZWQuIFlvdSBjYW4gYWxzbyBpbmhpYml0 IHJlc3RvcmF0aW9uIG9mIGEiLAorCQkJIiMgZGF0YWJhc2UgYnkgcmVtb3ZpbmcgdGhlIGxp bmUgb3IgY29tbWVudGluZyBvdXQgdGhlIGxpbmUgd2l0aCIKKwkJCSIjIGEgIyBtYXJrLiIs CisJCQkiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMiLAorCQkJTlVMTAorCQl9OworCisJCXNucHJpbnRmKGRiX3N1 YmRpciwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgZmlsZW5hbWUpOworCisJCS8qIENy ZWF0ZSBhIHN1YmRpcmVjdG9yeSB3aXRoICdkYXRhYmFzZXMnIG5hbWUgdW5kZXIgbWFpbiBk aXJlY3RvcnkuICovCisJCWlmIChta2RpcihkYl9zdWJkaXIsIHBnX2Rpcl9jcmVhdGVfbW9k ZSkgIT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVz XCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQ R1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIG1hcCBm aWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBfZmlsZSA9IGZvcGVu KG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmlsZV9wYXRo KTsKKworCQlmb3IgKGNoYXIgKipsaW5lID0gbWFwX3ByZWFtYmxlOyAqbGluZTsgbGluZSsr KQorCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzXG4iLCAqbGluZSk7CisJfQorCiAJZm9yIChp ID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUg PSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKLQkJY29u c3QgY2hhciAqY3JlYXRlX29wdHM7CisJCWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVz LCBpLCAxKTsKKwkJY29uc3QgY2hhciAqY3JlYXRlX29wdHMgPSAiIjsKIAkJaW50CQkJcmV0 OwogCiAJCS8qIFNraXAgdGVtcGxhdGUwLCBldmVuIGlmIGl0J3Mgbm90IG1hcmtlZCAhZGF0 YWxsb3djb25uLiAqLwpAQCAtMTY2MCw3ICsyMDUwLDEwIEBAIGR1bXBEYXRhYmFzZXMoUEdj b25uICpjb25uKQogCQlwZ19sb2dfaW5mbygiZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBk Ym5hbWUpOwogCiAJCXNhbml0aXplZCA9IHNhbml0aXplX2xpbmUoZGJuYW1lLCB0cnVlKTsK LQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIs IHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJ ZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNh bml0aXplZCk7CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCiAJCS8qCkBAIC0xNjc1LDI0ICsy MDY4LDQwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl7CiAJCQlpZiAob3V0 cHV0X2NsZWFuKQogCQkJCWNyZWF0ZV9vcHRzID0gIi0tY2xlYW4gLS1jcmVhdGUiOwotCQkJ ZWxzZQotCQkJewotCQkJCWNyZWF0ZV9vcHRzID0gIiI7Ci0JCQkJLyogU2luY2UgcGdfZHVt cCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLworCQkJLyogU2lu Y2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLwor CQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCQkJZnByaW50ZihP UEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKLQkJCX0KKwkJCWVsc2UKKwkJCQlj cmVhdGVfb3B0cyA9ICIiOwogCQl9CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0gIi0tY3Jl YXRlIjsKIAotCQlpZiAoZmlsZW5hbWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVt cChkYm5hbWUsIGNyZWF0ZV9vcHRzKTsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSBw bGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkg KiB0aGUgbWFwLmRhdCBmaWxlLgorCQkgKi8KKwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFy Y2hOdWxsKQorCQl7CisJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJ CQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiLmRtcCIs IGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hU YXIpCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNc Ii50YXIiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNlCisJCQkJc25wcmludGYoZGJmaWxl cGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRpciwgb2lkKTsKKwor CQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1lIGluIG1hcCBm aWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIGRibmFtZSk7 CisJCX0KKworCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJmaWxl cGF0aCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBv biBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCi0JCWlmIChmaWxlbmFt ZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQl7 CiAJCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYp CkBAIC0xNzAxLDYgKzIxMTAsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ CX0KIAl9CiAKKwkvKiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAh PSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0K IApAQCAtMTcxMCw3ICsyMTIzLDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAg KiBSdW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8K IHN0YXRpYyBpbnQKLXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIg KmNyZWF0ZV9vcHRzKQorcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hh ciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSkKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29u bnN0cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTcxOSwxNyArMjEzMiwzNiBA QCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0 cykKIAlpbml0UFFFeHBCdWZmZXIoJmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1ZmZlcigm Y21kKTsKIAotCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19k dW1wX2JpbiwKLQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkv KgotCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxh aW4tYXBwZW5kIHBnX2R1bXAKLQkgKiBmb3JtYXQuCisJICogSWYgdGhpcyBpcyBub3QgYSBw bGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCisJICog Zm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkg Ki8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZh ICIpOworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBR RXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJ CQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgZGJmaWxlLCBjcmVhdGVfb3B0cyk7CisKKwkJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3RvcnkpCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3RvcnkgIik7CisJCWVsc2UgaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21k LCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD10 YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAg Iik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdf ZHVtcF9iaW4sCisJCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKwor CQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVk IHBsYWluLWFwcGVuZCBwZ19kdW1wCisJCSAqIGZvcm1hdC4KKwkJICovCisJCWlmIChmaWxl bmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNl CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgog CSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3Rl ZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE4NzQsMyArMjMwNiw0NyBAQCByZWFkX2R1bXBh bGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0 dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogcGFyc2VEdW1w Rm9ybWF0CisgKgorICogVGhpcyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLwor c3RhdGljIEFyY2hpdmVGb3JtYXQKK3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3Jt YXQpCit7CisJQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJj YXNlY21wKGZvcm1hdCwgImMiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0 b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjdXN0b20iKSA9PSAwKQor CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNt cChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5 OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZGlyZWN0b3J5IikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7 CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQg PSBhcmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBvdXRwdXQgZm9y bWF0IFwiJXNcIjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0 XCIiLAorCQkJCSBmb3JtYXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQorCisv KgorICogY3JlYXRlRHVtcElkCisgKgorICogUmV0dXJuIHRoZSBuZXh0IGR1bXBJZC4KKyAq Lworc3RhdGljIGludAorY3JlYXRlRHVtcElkKHZvaWQpCit7CisJcmV0dXJuICsrZHVtcElk VmFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5kZXggODRiOGQ0MTBjOWUuLjM3ZjMwZTY1 NDIxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogcGdf cmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxpdHkgZXh0cmFjdGluZyBwb3N0 Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNy ZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZyb20gYSBiYWNrdXAg YXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2 ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVhZCB0aGUgYmFj a3VwIGFyY2hpdmUgYW5kCkBAIC00MSwxMiArNDEsMTYgQEAKICNpbmNsdWRlICJwb3N0Z3Jl c19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgog I2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAK KyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAj aW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxz LmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmls dGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5o IgpAQCAtNTQsMTggKzU4LDQxIEBACiAKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKTsKIHN0YXRpYyB2b2lkIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cyk7CitzdGF0aWMgYm9vbCBmaWxl X2V4aXN0c19pbl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxl bmFtZSk7CitzdGF0aWMgaW50CXJlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlu cHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkJCQkgaW50IG51bVdv cmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpOworc3RhdGljIGludAlyZXN0b3JlX2dsb2JhbF9v YmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRz KTsKKworc3RhdGljIGludAlyZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5w dXRGaWxlU3BlYywKKwkJCQkJCQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0 dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7CitzdGF0aWMg aW50CWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJ CQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0 cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVf b2lkX2xpc3RfZnJvbV9tZmlsZShjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgICBT aW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworCisvKgorICogU3RvcmVzIGEgZGF0 YWJhc2UgT0lEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLgorICovCit0eXBlZGVmIHN0 cnVjdCBEYk9pZE5hbWUKK3sKKwlPaWQJCQlvaWQ7CisJY2hhcgkJc3RyW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07IC8qIG51bGwtdGVybWluYXRlZCBzdHJpbmcgaGVyZSAqLworfQkJCURi T2lkTmFtZTsKKwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVJl c3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9jb2RlOwogCWlu dAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0 RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29u bHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vycm9ycyA9IDA7CisJYm9vbAkJZ2xvYmFsc19vbmx5 ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zID0ge05V TEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGlj IGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKIAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9 IDA7CkBAIC04OSw2ICsxMTYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ eyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwgTlVMTCwgJ0MnfSwK IAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2JhbHMtb25seSIsIDAs IE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJleGl0LW9u LWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEsIE5VTEws ICdOJ30sCkBAIC0xNDIsNiArMTcwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHks IDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJeyJy ZXN0cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCisJCXsiZXhjbHVk ZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA3fSwKIAogCQl7TlVMTCwg MCwgTlVMTCwgMH0KIAl9OwpAQCAtMTcwLDcgKzE5OSw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywg YXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAor CXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6Z2g6STpq OmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywgTlVMTCkp ICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAtMTk3LDExICsyMjYsMTQgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJ CQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsK KwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25seSBnbG9iYWwgc3FsIGNvbW1hbmRz LiAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQljYXNlICdo JzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5w Z2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAnaic6 CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwogCQkJCWlmICghb3B0aW9uX3BhcnNl X2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJCQkJCQkJICBQR19NQVhfSk9CUywK QEAgLTMyMSw2ICszNTMsMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJ b3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAK KwkJCWNhc2UgNzoJCQkJLyogZGF0YWJhc2UgcGF0dGVybnMgdG8gc2tpcCAqLworCQkJCXNp bXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7 CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFk eSBlbWl0dGVkIGEgY29tcGxhaW50ICovCiAJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBc IiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKQEAgLTM0 Nyw2ICszODMsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKCFvcHRz LT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMtPnRvY1N1bW1h cnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1kYm5hbWUgYW5kIC1mLy0tZmlsZSBtdXN0 IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBO VUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9uICVzIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggJXMiLAorCQkJCQkgIi0tZXhjbHVkZS1kYXRh YmFzZSIsICItZy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5 IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQll eGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1k IGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMu ZGJuYW1lKQogCXsKQEAgLTQyMCw2ICs0NjQsMzEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0 b2dldGhlciIsCiAJCQkJICItMS8tLXNpbmdsZS10cmFuc2FjdGlvbiIsICItLXRyYW5zYWN0 aW9uLXNpemUiKTsKIAorCWlmIChvcHRzLT5zaW5nbGVfdHhuICYmIGdsb2JhbHNfb25seSkK KwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVy IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJ CQkiLS1zaW5nbGUtdHJhbnNhY3Rpb24iLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKworCWlm IChvcHRzLT50eG5fc2l6ZSAmJiBnbG9iYWxzX29ubHkpCisJCXBnX2ZhdGFsKCJvcHRpb25z ICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aGVuIHJlc3RvcmluZyBhbiBh cmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJIi0tdHJhbnNhY3Rpb24tc2l6 ZSIsICItZy8tLWdsb2JhbHMtb25seSIpOworCisJaWYgKG9wdHMtPmV4aXRfb25fZXJyb3Ig JiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5 IHBnX2R1bXBhbGwiLAorCQkJCSItLWV4aXQtb24tZXJyb3IiLCAiLWcvLS1nbG9iYWxzLW9u bHkiKTsKKworCWlmIChkYXRhX29ubHkgJiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgi b3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCSAiLWEv LS1kYXRhLW9ubHkiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwlpZiAoc2NoZW1hX29ubHkg JiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCSAiLXMvLS1zY2hlbWEtb25seSIsICItZy8tLWds b2JhbHMtb25seSIpOworCWlmIChzdGF0aXN0aWNzX29ubHkgJiYgZ2xvYmFsc19vbmx5KQor CQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIi LAorCQkJCSAiLS1zdGF0aXN0aWNzLW9ubHkiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwlp ZiAod2l0aF9zdGF0aXN0aWNzICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlv bnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi0tc3RhdGlz dGljcyIsICItZy8tLWdsb2JhbHMtb25seSIpOworCiAJLyoKIAkgKiAtQyBpcyBub3QgY29t cGF0aWJsZSB3aXRoIC0xLCBiZWNhdXNlIHdlIGNhbid0IGNyZWF0ZSBhIGRhdGFiYXNlIGlu c2lkZQogCSAqIGEgdHJhbnNhY3Rpb24gYmxvY2suCkBAIC00ODUsNiArNTU0LDE3MyBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5hbWUpOwog CX0KIAorCS8qCisJICogSWYgdG9jLmdsbyBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9y ZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tCisJICogbWFwLmRhdCwgYnV0IHNraXAgcmVzdG9y aW5nIHRob3NlIG1hdGNoaW5nIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8K KwlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmCisJCShmaWxlX2V4aXN0c19pbl9kaXJl Y3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5nbG8iKSkpCisJeworCQljaGFyCQlnbG9iYWxf cGF0aFtNQVhQR1BBVEhdOworCQlSZXN0b3JlT3B0aW9ucyAqdG1wb3B0cyA9IHBnX21hbGxv YzBfb2JqZWN0KFJlc3RvcmVPcHRpb25zKTsKKworCQlvcHRzLT5mb3JtYXQgPSBhcmNoVW5r bm93bjsKKworCQltZW1jcHkodG1wb3B0cywgb3B0cywgc2l6ZW9mKFJlc3RvcmVPcHRpb25z KSk7CisKKwkJLyoKKwkJICogQ2FuIG9ubHkgdXNlIC0tbGlzdCBvciAtLXVzZS1saXN0IG9w dGlvbnMgd2l0aCBhIHNpbmdsZSBkYXRhYmFzZQorCQkgKiBkdW1wLgorCQkgKi8KKwkJaWYg KG9wdHMtPnRvY1N1bW1hcnkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1 c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwK KwkJCQkJICItbC8tLWxpc3QiKTsKKwkJaWYgKG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRh bCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJICItTC8tLXVzZS1saXN0Iik7CisKKwkJ aWYgKG9wdHMtPnN0cmljdF9uYW1lcykKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90 IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBh bGwiLAorCQkJCQkiLS1zdHJpY3QtbmFtZXMiKTsKKwkJaWYgKGdsb2JhbHNfb25seSAmJiBv cHRzLT5kcm9wU2NoZW1hKQorCQkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wYWxsIiwKKwkJCQkJIi0tY2xlYW4iLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsK KworCQlpZiAobm9fc2NoZW1hKQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3QgYmUg dXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIs CisJCQkJCSAiLS1uby1zY2hlbWEiKTsKKworCQlpZiAoZGF0YV9vbmx5KQorCQkJcGdfZmF0 YWwoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZl IGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSAiLWEvLS1kYXRhLW9ubHkiKTsKKwor CQlpZiAoc3RhdGlzdGljc19vbmx5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3Qg YmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFs bCIsCisJCQkJCSAiLS1zdGF0aXN0aWNzLW9ubHkiKTsKKworCQlpZiAoIShvcHRzLT5kdW1w U2VjdGlvbnMgJiBEVU1QX1BSRV9EQVRBKSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fu bm90IGV4Y2x1ZGUgJXMgd2hlbiByZXN0b3JpbmcgYSBwZ19kdW1wYWxsIGFyY2hpdmUiLAor CQkJCQkgIi0tc2VjdGlvbiIsICItLXByZS1kYXRhIik7CisKKwkJLyoKKwkJICogVG8gcmVz dG9yZSBmcm9tIGEgcGdfZHVtcGFsbCBhcmNoaXZlLCAtQyAoY3JlYXRlIGRhdGFiYXNlKSBv cHRpb24KKwkJICogbXVzdCBiZSBzcGVjaWZpZWQgdW5sZXNzIHdlIGFyZSBvbmx5IHJlc3Rv cmluZyBnbG9iYWxzLgorCQkgKi8KKwkJaWYgKCFnbG9iYWxzX29ubHkgJiYgb3B0cy0+Y3Jl YXRlREIgIT0gMSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJvcHRpb24gJXMgbXVzdCBiZSBz cGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBh bGwiLAorCQkJCQkJICItQy8tLWNyZWF0ZSIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRy eSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJ CXBnX2xvZ19lcnJvcl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVzdG9y ZWQgdXNpbmcgdGhlaXIgc3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgx KTsKKwkJfQorCisJCS8qCisJCSAqIEFsd2F5cyByZXN0b3JlIGdsb2JhbCBvYmplY3RzLCBl dmVuIGlmIC0tZXhjbHVkZS1kYXRhYmFzZSByZXN1bHRzIGluCisJCSAqIHplcm8gZGF0YWJh c2VzIHRvIHByb2Nlc3MuIElmICdnbG9iYWxzLW9ubHknIGlzIHNldCwgZXhpdAorCQkgKiBp bW1lZGlhdGVseS4KKwkJICovCisJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgs ICIlcy90b2MuZ2xvIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkJbl9lcnJvcnMgPSByZXN0b3Jl X2dsb2JhbF9vYmplY3RzKGdsb2JhbF9wYXRoLCB0bXBvcHRzKTsKKworCQlpZiAoZ2xvYmFs c19vbmx5KQorCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3RvcmluZyBza2lwcGVkIGJl Y2F1c2Ugb3B0aW9uICVzIHdhcyBzcGVjaWZpZWQiLAorCQkJCQkJIi1nLy0tZ2xvYmFscy1v bmx5Iik7CisJCWVsc2UKKwkJeworCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFz ZXMgZnJvbSBtYXAuZGF0ICovCisJCQluX2Vycm9ycyA9IG5fZXJyb3JzICsgcmVzdG9yZV9h bGxfZGF0YWJhc2VzKGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJ CQkJCQkJCSBvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVy biBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9w YXR0ZXJucyk7CisJfQorCWVsc2UKKwl7CisJCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhl YWQgIT0gTlVMTCkKKwkJeworCQkJc2ltcGxlX3N0cmluZ19saXN0X2Rlc3Ryb3koJmRiX2V4 Y2x1ZGVfcGF0dGVybnMpOworCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW4gYmUgdXNlZCBv bmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwK KwkJCQkJICItLWV4Y2x1ZGUtZGF0YWJhc2UiKTsKKwkJfQorCisJCWlmIChnbG9iYWxzX29u bHkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0 b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1nLy0t Z2xvYmFscy1vbmx5Iik7CisKKwkJLyogUHJvY2VzcyBpZiB0b2MuZ2xvIGZpbGUgZG9lcyBu b3QgZXhpc3QuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRG aWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgZmFsc2UpOworCX0KKworCS8qIERvbmUsIHBy aW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlp ZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24g cmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAw OworfQorCisvKgorICogcmVzdG9yZV9nbG9iYWxfb2JqZWN0cworICoKKyAqIFRoaXMgcmVz dG9yZSBhbGwgZ2xvYmFsIG9iamVjdHMuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfZ2xv YmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMg Km9wdHMpCit7CisJQXJjaGl2ZSAgICAqQUg7CisJaW50CQkJbmVycm9yID0gMDsKKworCS8q IFNldCBmb3JtYXQgYXMgY3VzdG9tIHNvIHRoYXQgdG9jLmdsbyBmaWxlIGNhbiBiZSByZWFk LiAqLworCW9wdHMtPmZvcm1hdCA9IGFyY2hDdXN0b207CisJb3B0cy0+dHhuX3NpemUgPSAw OworCisJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwor CisJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOworCisJb25fZXhpdF9jbG9z ZV9hcmNoaXZlKEFIKTsKKworCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kg dG8gYmUgKi8KKwlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CisKKwkvKiBEb24ndCBv dXRwdXQgVE9DIGVudHJ5IGNvbW1lbnRzIHdoZW4gcmVzdG9yaW5nIGdsb2JhbHMgKi8KKwko KEFyY2hpdmVIYW5kbGUgKikgQUgpLT5ub1RvY0NvbW1lbnRzID0gMTsKKworCUFILT5leGl0 X29uX2Vycm9yID0gZmFsc2U7CisKKwkvKiBQYXJhbGxlbCBleGVjdXRpb24gaXMgbm90IHN1 cHBvcnRlZCBmb3IgZ2xvYmFsIG9iamVjdCByZXN0b3JhdGlvbi4gKi8KKwlBSC0+bnVtV29y a2VycyA9IDE7CisKKwlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKKwlSZXN0 b3JlQXJjaGl2ZShBSCwgZmFsc2UpOworCisJbmVycm9yID0gQUgtPm5fZXJyb3JzOworCisJ LyogQUggbWF5IGJlIGZyZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KKwlDbG9zZUFyY2hpdmUo QUgpOworCisJcmV0dXJuIG5lcnJvcjsKK30KKworLyoKKyAqIHJlc3RvcmVfb25lX2RhdGFi YXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5k YXQgZmlsZS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRv aW5nIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfb25lX2RhdGFiYXNlKGNv bnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkg aW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpCit7CisJQXJjaGl2ZSAgICAqQUg7 CisJaW50CQkJbl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMs IG9wdHMtPmZvcm1hdCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7 CkBAIC00OTIsOSArNzI4LDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCS8q CiAJICogV2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24geWV0IGJ1dCB0aGF0IGRvZXNuJ3Qg bWF0dGVyLiBUaGUgY29ubmVjdGlvbgogCSAqIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgYW5k IGlmIHdlIHRlcm1pbmF0ZSB0aHJvdWdoIGV4aXRfbmljZWx5KCkgd2hpbGUKLQkgKiBpdCdz IHN0aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9w LgorCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0 IGJlIGEgbm8tb3AuIElmIHdlIGFyZQorCSAqIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFz ZXMsIHRoZW4gb25seSB1cGRhdGUgQVggaGFuZGxlIGZvciBjbGVhbnVwIGFzCisJICogdGhl IHByZXZpb3VzIGVudHJ5IHdhcyBhbHJlYWR5IGluIHRoZSBhcnJheSBhbmQgd2UgaGFkIGNs b3NlZCBwcmV2aW91cworCSAqIGNvbm5lY3Rpb24sIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUg YXJyYXkgc2xvdC4KIAkgKi8KLQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWlmICgh YXBwZW5kX2RhdGEpCisJCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJZWxzZQorCQly ZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CiAKIAkvKiBMZXQgdGhlIGFyY2hp dmVyIGtub3cgaG93IG5vaXN5IHRvIGJlICovCiAJQUgtPnZlcmJvc2UgPSBvcHRzLT52ZXJi b3NlOwpAQCAtNTE0LDI1ICs3NTYsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJZWxzZQogCXsKIAkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJl c3RvcmVBcmNoaXZlKEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRhKTsK IAl9CiAKLQkvKiBkb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8K LQlpZiAoQUgtPm5fZXJyb3JzKQotCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQg b24gcmVzdG9yZTogJWQiLCBBSC0+bl9lcnJvcnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJy b3JzOwogCiAJLyogQUggbWF5IGJlIGZyZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0 X2NvZGUgPSBBSC0+bl9lcnJvcnMgPyAxIDogMDsKLQogCUNsb3NlQXJjaGl2ZShBSCk7CiAK LQlyZXR1cm4gZXhpdF9jb2RlOworCXJldHVybiBuX2Vycm9yczsKIH0KIAogc3RhdGljIHZv aWQKIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogewotCXByaW50ZihfKCIlcyByZXN0 b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkg cGdfZHVtcC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgcmVzdG9yZXMgUG9z dGdyZVNRTCBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcyBjcmVhdGVkIGJ5IHBnX2R1bXAgb3Ig cGdfZHVtcGFsbC5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7 CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gW0ZJTEVdXG4iKSwgcHJvZ25hbWUpOwog CkBAIC01NTAsNiArNzg4LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJp bnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkgZGF0 YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1D LCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2Vc biIpKTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQg b24gZXJyb3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAt ZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0 cywgbm8gZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAg ICAgICAgICAgICByZXN0b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWos IC0tam9icz1OVU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMg dG8gcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1F ICAgICAgdXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAt NTY2LDYgKzgwNSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50Zihf KCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0 cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAg ICAgICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsK IAlwcmludGYoXygiICAtLWVuYWJsZS1yb3ctc2VjdXJpdHkgICAgICAgIGVuYWJsZSByb3cg c2VjdXJpdHlcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVS TiAgIGRvIG5vdCByZXN0b3JlIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UocylcbiIpKTsKIAlw cmludGYoXygiICAtLWZpbHRlcj1GSUxFTkFNRSAgICAgICAgICAgIHJlc3RvcmUgb3Igc2tp cCBvYmplY3RzIGJhc2VkIG9uIGV4cHJlc3Npb25zXG4iCiAJCQkgIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbiBGSUxFTkFNRVxuIikpOwogCXByaW50ZihfKCIgIC0taWYt ZXhpc3RzICAgICAgICAgICAgICAgICAgdXNlIElGIEVYSVNUUyB3aGVuIGRyb3BwaW5nIG9i amVjdHNcbiIpKTsKQEAgLTYwMSw4ICs4NDEsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9n bmFtZSkKIAlwcmludGYoXygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJP TEUgYmVmb3JlIHJlc3RvcmVcbiIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9w dGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29t YmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3Qg bXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwg LVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZVxu IgorCQkJICJjb21iaW5lZCBhbmQgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIHRvIHNlbGVj dCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50ZihfKCJcbklmIG5vIGlucHV0IGZp bGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLlxuXG4i KSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdS RVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05B TUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTcwNywzICs5NDcsNDI1IEBAIHJlYWRfcmVzdG9yZV9m aWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAog CWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUg Z2l2ZW4gZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3Ry dWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYo YnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkK KwkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOwor CisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkp OworfQorCisvKgorICogZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlCisgKgorICogVGhp cyB3aWxsIG1hcmsgZm9yIHNraXBwaW5nIGFueSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9s aXN0IHRoYXQgcGF0dGVybiBtYXRjaCBhbgorICogZW50cnkgaW4gdGhlIGRiX2V4Y2x1ZGVf cGF0dGVybnMgbGlzdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YWJhc2Ug dG8gYmUgcmVzdG9yZWQuCisgKgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lc19saXN0 X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJCVNpbXBsZVB0ckxpc3QgKmRibmFt ZV9vaWRfbGlzdCwKKwkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVy bnMpCit7CisJaW50CQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVyIHF1ZXJ5OworCVBR RXhwQnVmZmVyIGRiX2xpdDsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9IGNyZWF0 ZVBRRXhwQnVmZmVyKCk7CisJZGJfbGl0ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCS8q CisJICogUHJvY2VzcyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBzcGVjaWZpZWQg dG8gc2tpcCByZXN0b3JpbmcsIHRoZW4KKwkgKiByZW1vdmUgZGJuYW1lIGZyb20gbGlzdC4K KwkgKi8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9s aXN0LT5oZWFkOworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJewor CQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOwor CQlib29sICAgICAgICAgICAgc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisKKwkJcmVzZXRQ UUV4cEJ1ZmZlcihxdWVyeSk7CisJCXJlc2V0UFFFeHBCdWZmZXIoZGJfbGl0KTsKKworCQlh cHBlbmRTdHJpbmdMaXRlcmFsQ29ubihkYl9saXQsIGRiaWRuYW1lLT5zdHIsIGNvbm4pOwor CisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKnBhdF9jZWxsID0gZGJfZXhjbHVkZV9w YXR0ZXJucy5oZWFkOyBwYXRfY2VsbDsgcGF0X2NlbGwgPSBwYXRfY2VsbC0+bmV4dCkKKwkJ eworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoIHRoZW4gd2UgZG9u J3QgbmVlZCB0byB0cnkgYSBwYXR0ZXJuCisJCQkgKiBtYXRjaAorCQkJICovCisJCQlpZiAo cGdfc3RyY2FzZWNtcChkYmlkbmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFsKSA9PSAwKQorCQkJ CXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkvKiBPdGhlcndpc2UsIHRyeSBhIHBhdHRl cm4gbWF0Y2ggaWYgdGhlcmUgaXMgYSBjb25uZWN0aW9uICovCisJCQllbHNlCisJCQl7CisJ CQkJaW50CQkJZG90Y250OworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJT RUxFQ1QgMSAiKTsKKwkJCQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4oY29ubiwgcXVlcnksIHBh dF9jZWxsLT52YWwsIGZhbHNlLAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgZGJfbGl0LT5k YXRhLAorCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJCWlm IChkb3RjbnQgPiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFs aWZpZWQgbmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgZGJp ZG5hbWUtPnN0cik7CisJCQkJCVBRZmluaXNoKGNvbm4pOworCQkJCQlleGl0X25pY2VseSgx KTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEp OworCisJCQkJaWYgKFBRbnR1cGxlcyhyZXMpKQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0 b3JlID0gdHJ1ZTsKKwkJCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIG5hbWUgXCIlc1wiIG1h dGNoZXMgLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm4gXCIlc1wiIiwgZGJpZG5hbWUtPnN0 ciwgcGF0X2NlbGwtPnZhbCk7CisJCQkJfQorCisJCQkJUFFjbGVhcihyZXMpOworCQkJCXJl c2V0UFFFeHBCdWZmZXIocXVlcnkpOworCQkJfQorCisJCQlpZiAoc2tpcF9kYl9yZXN0b3Jl KQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogTWFyayBkYiB0byBiZSBza2lwcGVk IG9yIGluY3JlbWVudCB0aGUgY291bnRlciBvZiBkYnMgdG8gYmUKKwkJICogcmVzdG9yZWQK KwkJICovCisJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJl eGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisJCQlkYmlkbmFt ZS0+b2lkID0gSW52YWxpZE9pZDsKKwkJfQorCQllbHNlCisJCQljb3VudF9kYisrOworCX0K KworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGRi X2xpdCk7CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29p ZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBs aW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5h bWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBu dW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitzdGF0aWMg aW50CitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY2hhciAqZHVtcGRpcnBhdGgs IFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBs aW5lYnVmOworCUZJTEUJICAgKnBmaWxlOworCWNoYXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQ QVRIXTsKKwlpbnQJCQljb3VudCA9IDA7CisJaW50CQkJbGVuOworCisKKwkvKgorCSAqIElm IHRoZXJlIGlzIG5vIG1hcC5kYXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhl cmUgYXMgdGhlcmUgaXMKKwkgKiBubyBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlm ICghZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGR1bXBkaXJwYXRoLCAibWFwLmRhdCIpKQor CXsKKwkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3RvcmluZyBpcyBza2lwcGVkIGJlY2F1 c2UgZmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QgaW4gZGlyZWN0b3J5IFwiJXNcIiIsICJt YXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlsZW4gPSBzdHJs ZW4oZHVtcGRpcnBhdGgpOworCisJLyogVHJpbSBzbGFzaCBmcm9tIGRpcmVjdG9yeSBuYW1l LiAqLworCXdoaWxlIChsZW4gPiAxICYmIGR1bXBkaXJwYXRoW2xlbiAtIDFdID09ICcvJykK Kwl7CisJCWR1bXBkaXJwYXRoW2xlbiAtIDFdID0gJ1wwJzsKKwkJbGVuLS07CisJfQorCisJ c25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGR1bXBk aXJwYXRoKTsKKworCS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9wZW4o bWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmlsZV9w YXRoKTsKKworCWluaXRTdHJpbmdJbmZvKCZsaW5lYnVmKTsKKworCS8qIEFwcGVuZCBhbGwg dGhlIGRibmFtZS9kYl9vaWQgY29tYmluYXRpb25zIHRvIHRoZSBsaXN0LiAqLworCXdoaWxl IChwZ19nZXRfbGluZV9idWYocGZpbGUsICZsaW5lYnVmKSkKKwl7CisJCU9pZAkJCWRiX29p ZCA9IEludmFsaWRPaWQ7CisJCWNoYXIJICAgKmRibmFtZTsKKwkJRGJPaWROYW1lICAqZGJp ZG5hbWU7CisJCWludAkJCW5hbWVsZW47CisJCWNoYXIJICAgKnAgPSBsaW5lYnVmLmRhdGE7 CisKKwkJLyogbG9vayBmb3IgdGhlIGRib2lkLiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5z aWduZWQgY2hhcikgKnApKQorCQkJcCsrOworCisJCS8qIGlnbm9yZSBsaW5lcyB0aGF0IGRv bid0IGJlZ2luIHdpdGggYSBkaWdpdCAqLworCQlpZiAocCA9PSBsaW5lYnVmLmRhdGEpCisJ CQljb250aW51ZTsKKworCQlpZiAoKnAgPT0gJyAnKQorCQl7CisJCQlzc2NhbmYobGluZWJ1 Zi5kYXRhLCAiJXUiLCAmZGJfb2lkKTsKKwkJCXArKzsKKwkJfQorCisJCS8qIGRibmFtZSBp cyB0aGUgcmVzdCBvZiB0aGUgbGluZSAqLworCQlkYm5hbWUgPSBwOworCQluYW1lbGVuID0g c3RybGVuKGRibmFtZSk7CisKKwkJLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZSAqLworCQlp ZiAobmFtZWxlbiA+IDAgJiYgZGJuYW1lW25hbWVsZW4gLSAxXSA9PSAnXG4nKQorCQkJZGJu YW1lWy0tbmFtZWxlbl0gPSAnXDAnOworCisJCS8qIFJlcG9ydCBlcnJvciBhbmQgZXhpdCBp ZiB0aGUgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAoIU9pZElzVmFs aWQoZGJfb2lkKSB8fCBuYW1lbGVuIDwgMSkKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGVudHJ5 IGluIGZpbGUgXCIlc1wiIG9uIGxpbmUgJWQiLCBtYXBfZmlsZV9wYXRoLAorCQkJCQkgY291 bnQgKyAxKTsKKworCQlkYmlkbmFtZSA9IHBnX21hbGxvYyhvZmZzZXRvZihEYk9pZE5hbWUs IHN0cikgKyBuYW1lbGVuICsgMSk7CisJCWRiaWRuYW1lLT5vaWQgPSBkYl9vaWQ7CisJCXN0 cmxjcHkoZGJpZG5hbWUtPnN0ciwgZGJuYW1lLCBuYW1lbGVuICsgMSk7CisKKwkJcGdfbG9n X2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gZmlsZSBcIiVzXCIi LAorCQkJCQlkYmlkbmFtZS0+c3RyLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCXNp bXBsZV9wdHJfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYmlkbmFtZSk7CisJCWNv dW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmls ZSk7CisKKwlwZnJlZShsaW5lYnVmLmRhdGEpOworCisJcmV0dXJuIGNvdW50OworfQorCisv KgorICogcmVzdG9yZV9hbGxfZGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUg ZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFz ZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVz dG9yaW5nIGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1 ZGUtZGF0YWJhc2Ugb3B0aW9uLgorICoKKyAqIHJldHVybnMsIG51bWJlciBvZiBlcnJvcnMg d2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9hbGxfZGF0 YWJhc2VzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsCisJCQkJCSAgU2ltcGxlU3RyaW5n TGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJ ICBpbnQgbnVtV29ya2VycykKK3sKKwlTaW1wbGVQdHJMaXN0IGRibmFtZV9vaWRfbGlzdCA9 IHtOVUxMLCBOVUxMfTsKKwlpbnQJCQludW1fZGJfcmVzdG9yZSA9IDA7CisJaW50CQkJbnVt X3RvdGFsX2RiOworCWludAkJCW5fZXJyb3JzX3RvdGFsID0gMDsKKwljaGFyCSAgICpjb25u ZWN0ZWRfZGIgPSBOVUxMOworCVBHY29ubgkgICAqY29ubiA9IE5VTEw7CisJUmVzdG9yZU9w dGlvbnMgKm9yaWdpbmFsX29wdHMgPSBwZ19tYWxsb2MwX29iamVjdChSZXN0b3JlT3B0aW9u cyk7CisJUmVzdG9yZU9wdGlvbnMgKnRtcG9wdHMgPSBwZ19tYWxsb2MwX29iamVjdChSZXN0 b3JlT3B0aW9ucyk7CisKKwltZW1jcHkob3JpZ2luYWxfb3B0cywgb3B0cywgc2l6ZW9mKFJl c3RvcmVPcHRpb25zKSk7CisKKwkvKiBTYXZlIGRiIG5hbWUgdG8gcmV1c2UgaXQgZm9yIGFs bCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQljb25u ZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51bV90b3RhbF9kYiA9IGdl dF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZSgoY2hhciopIGlucHV0RmlsZVNwZWMsICZk Ym5hbWVfb2lkX2xpc3QpOworCisJcGdfbG9nX2luZm8obmdldHRleHQoImZvdW5kICVkIGRh dGFiYXNlIG5hbWUgaW4gXCIlc1wiIiwKKwkJCQkJCSAiZm91bmQgJWQgZGF0YWJhc2UgbmFt ZXMgaW4gXCIlc1wiIiwKKwkJCQkJCSBudW1fdG90YWxfZGIpLAorCQkJCW51bV90b3RhbF9k YiwgIm1hcC5kYXQiKTsKKworCS8qCisJICogSWYgZXhjbHVkZS1wYXR0ZXJucyBpcyBnaXZl biwgdGhlbiBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZSB0byBwcm9jZXNzCisJICogaXQuCisJ ICovCisJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCXsKKwkJaWYg KG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQl7CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNl KG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJ CQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUs IFRSSV9ERUZBVUxULAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdfZmF0YWwoImNvdWxkIG5v dCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMtPmNwYXJhbXMuZGJuYW1lKTsK KwkJfQorCisJCWlmICghY29ubikKKwkJeworCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBj b25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJwb3N0Z3JlcyIpOworCisJCQljb25uID0g Q29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0 LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2Vy bmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJ CWlmICghY29ubikKKwkJCXsKKwkJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3Qg dG8gZGF0YWJhc2UgXCIlc1wiIiwgInRlbXBsYXRlMSIpOworCisJCQkJY29ubiA9IENvbm5l Y3REYXRhYmFzZSgidGVtcGxhdGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJ CQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFt ZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpOworCQkJCWlmICghY29ubikKKwkJCQl7CisJCQkJCXBnX2xvZ19l cnJvcigiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2VzIFwicG9zdGdyZXNcIiBvciBc InRlbXBsYXRlMVwiXG4iCisJCQkJCQkJCSAiUGxlYXNlIHNwZWNpZnkgYW4gYWx0ZXJuYXRp dmUgZGF0YWJhc2UuIik7CisJCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhl bHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCQkJCWV4aXRfbmlj ZWx5KDEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogZmlsdGVyIHRoZSBk YiBsaXN0IGFjY29yZGluZyB0byB0aGUgZXhjbHVkZSBwYXR0ZXJucworCSAqLworCW51bV9k Yl9yZXN0b3JlID0gZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKGNvbm4sICZkYm5hbWVf b2lkX2xpc3QsCisJCQkJCQkJCQkJCQkgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkvKiBD bG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9uZSB3aXRoIGV4Y2x1ZGUtZGF0 YWJhc2UgcGF0dGVybnMuICovCisJUFFmaW5pc2goY29ubik7CisKKwkvKiBFeGl0IGlmIG5v IGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChudW1fZGJfcmVzdG9yZSA9PSAw KQorCXsKKwkJcGdfbG9nX2luZm8obmdldHRleHQoIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3Rv cmluZyBvdXQgb2YgJWQgZGF0YWJhc2UiLAorCQkJCQkJCSAibm8gZGF0YWJhc2UgbmVlZHMg cmVzdG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpLAorCQkJCQlu dW1fdG90YWxfZGIpOworCQlwZ19mcmVlKG9yaWdpbmFsX29wdHMpOworCQlwZ19mcmVlKHRt cG9wdHMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0byByZXN0 b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUs IG51bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNl cyB0byByZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFz ZSBzd2l0Y2goZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkg Ki8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0 LmhlYWQ7CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURi T2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNo YXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBH UEFUSF07CisJCWNoYXIJCWRiZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9lcnJv cnM7CisKKwkJLyogaWdub3JlIGRicyBtYXJrZWQgZm9yIHNraXBwaW5nICovCisJCWlmIChk YmlkbmFtZS0+b2lkID09IEludmFsaWRPaWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkg KiBTaW5jZSBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBtYXkgbW9kaWZ5IFJlc3RvcmVPcHRpb25z IGR1cmluZyB0aGUKKwkJICogcHJldmlvdXMgcmVzdG9yZSwgd2UgbXVzdCBwcm92aWRlIGEg ZnJlc2ggY29weSBvZiB0aGUgb3JpZ2luYWwKKwkJICogIm9wdHMiIGZvciBlYWNoIGNhbGwg dG8gcmVzdG9yZV9vbmVfZGF0YWJhc2UuCisJCSAqLworCQltZW1jcHkodG1wb3B0cywgb3Jp Z2luYWxfb3B0cywgc2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7CisKKwkJLyoKKwkJICogV2Ug bmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSBy ZXN0b3JlZAorCQkgKiBpbnRvIGFuIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQg d2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAodG1wb3B0cy0+Y3BhcmFt cy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKHRtcG9wdHMtPmNwYXJhbXMub3Zl cnJpZGVfZGJuYW1lKTsKKwkJCXRtcG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0g TlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcmRicGF0aCwgTUFYUEdQQVRILCAiJXMv ZGF0YWJhc2VzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkJLyoKKwkJICogTG9vayBmb3IgdGhl IGRhdGFiYXNlIGR1bXAgZmlsZS9kaXIuIElmIHRoZXJlIGlzIGFuIHtvaWR9LnRhciBvcgor CQkgKiB7b2lkfS5kbXAgZmlsZSwgdXNlIGl0LiBPdGhlcndpc2UgdHJ5IHRvIHVzZSBhIGRp cmVjdG9yeSBjYWxsZWQKKwkJICoge29pZH0KKwkJICovCisJCXNucHJpbnRmKGRiZmlsZW5h bWUsIE1BWFBHUEFUSCwgIiV1LnRhciIsIGRiaWRuYW1lLT5vaWQpOworCQlpZiAoZmlsZV9l eGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQlzbnBy aW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUudGFyIiwgaW5w dXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCWVsc2UKKwkJeworCQkJc25wcmludGYo ZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXUuZG1wIiwgZGJpZG5hbWUtPm9pZCk7CisKKwkJ CWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1l KSkKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMv JXUuZG1wIiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCQllbHNlCisJCQkJ c25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgaW5w dXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCX0KKworCQlwZ19sb2dfaW5mbygicmVz dG9yaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIpOworCisJCS8qIElmIGRh dGFiYXNlIGlzIGFscmVhZHkgY3JlYXRlZCwgdGhlbiBkb24ndCBzZXQgY3JlYXRlREIgZmxh Zy4gKi8KKwkJaWYgKHRtcG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQl7CisJCQlQR2Nvbm4J ICAgKnRlc3RfY29ubjsKKworCQkJdGVzdF9jb25uID0gQ29ubmVjdERhdGFiYXNlKGRiaWRu YW1lLT5zdHIsIE5VTEwsIHRtcG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkJCXRt cG9wdHMtPmNwYXJhbXMucGdwb3J0LCB0bXBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklf REVGQVVMVCwKKwkJCQkJCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpOworCQkJaWYgKHRlc3RfY29ubikKKwkJCXsKKwkJCQlQUWZpbmlzaCh0ZXN0X2Nv bm4pOworCisJCQkJLyogVXNlIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZSBmb3IgY29ubmVj dGlvbi4gKi8KKwkJCQl0bXBvcHRzLT5jcmVhdGVEQiA9IDA7CisJCQkJdG1wb3B0cy0+Y3Bh cmFtcy5kYm5hbWUgPSBkYmlkbmFtZS0+c3RyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CS8qIFdlJ2xsIGhhdmUgdG8gY3JlYXRlIGl0ICovCisJCQkJdG1wb3B0cy0+Y3JlYXRlREIg PSAxOworCQkJCXRtcG9wdHMtPmNwYXJhbXMuZGJuYW1lID0gY29ubmVjdGVkX2RiOworCQkJ fQorCQl9CisKKwkJLyogUmVzdG9yZSB0aGUgc2luZ2xlIGRhdGFiYXNlLiAqLworCQluX2Vy cm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1YmRpcnBhdGgsIHRtcG9wdHMsIG51bVdv cmtlcnMsIHRydWUpOworCisJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3JzOworCisJCS8q IFByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgc2luZ2xlIGRhdGFi YXNlIHJlc3RvcmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJCXBnX2xvZ193YXJuaW5nKCJl cnJvcnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlkbmFt ZS0+c3RyLCBuX2Vycm9ycyk7CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQg ZGF0YWJhc2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJh c2VzIGlzICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRi b2lkIGxpc3QuICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRfbGlz dCk7CisKKwlwZ19mcmVlKG9yaWdpbmFsX29wdHMpOworCXBnX2ZyZWUodG1wb3B0cyk7CisK KwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKaW5k ZXggYWI5MzEwZWI0MmIuLmE4OTViYzMxNGIwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvdC8wMDFfYmFzaWMucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs CkBAIC0yNDQsNCArMjQ0LDU5IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfZHVtcGFs bDogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3 aXRoIC1nLy0tZ2xvYmFscy1vbmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsg J3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVy cm9yOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1wYWxs OiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2Uo CisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICdkJywgJy0tcmVzdHJpY3Qta2V5PXV1 JywgJy1mIGR1bXBmaWxlJyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlvbiAt LXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1mb3JtYXQ9cGxhaW5cRS8s CisJJ3BnX2R1bXBhbGw6IC0tcmVzdHJpY3Qta2V5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBw bGFpbiBkdW1wIGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVt cGFsbCcsICctLWZvcm1hdCcsICdkJywgJy0tZ2xvYmFscy1vbmx5JywgJy0tY2xlYW4nLCAn LWYnLCAnZHVtcGZpbGUnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogb3B0aW9ucyAt LWNsZWFuIGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIg aW4gbm9uLXRleHQgZHVtcFxFLywKKwkncGdfZHVtcGFsbDogLS1jbGVhbiBhbmQgLWcvLS1n bG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgaW4gbm9uLXRleHQgZHVtcCcp OworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcs ICdkJyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlvbiAtRlwvLS1mb3JtYXQ9 ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mXC8tLWZpbGVcRS8sCisJJ3BnX2R1bXBhbGw6IG5v bi1wbGFpbiBmb3JtYXQgcmVxdWlyZXMgLS1maWxlIG9wdGlvbicpOworCitjb21tYW5kX2Zh aWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywg Jy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVy cm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVy IHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1l eGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9i YWxzLW9ubHknCispOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScs ICctLWRhdGEtb25seScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIv XFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtYVwvLS1kYXRhLW9ubHkgYW5kIC1nXC8t LWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwkncGdfcmVzdG9y ZTogZXJyb3I6IG9wdGlvbnMgLWEvLS1kYXRhLW9ubHkgYW5kIC1nLy0tZ2xvYmFscy1vbmx5 IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJworKTsKKworY29tbWFuZF9mYWlsc19saWtlKAor CVsgJ3BnX3Jlc3RvcmUnLCAnLS1zY2hlbWEtb25seScsICctLWdsb2JhbHMtb25seScsICct ZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtc1wvLS1z Y2hlbWEtb25seSBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0 aGVyXEUvLAorCSdwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtcy8tLXNjaGVtYS1vbmx5 IGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicKKyk7CisK K2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tc3RhdGlzdGljcy1v bmx5JywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3Rv cmU6IGVycm9yOiBvcHRpb25zIC0tc3RhdGlzdGljcy1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxz LW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCisJJ3BnX3Jlc3RvcmU6IGVycm9y OiBvcHRpb25zIC0tc3RhdGlzdGljcy1vbmx5IGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5u b3QgYmUgdXNlZCB0b2dldGhlcicKKyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdw Z19yZXN0b3JlJywgJy0tZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAnLWQnLCAneHh4JywgJ2R1 bXBkaXInIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1k YXRhYmFzZSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3Jl YXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJh c2UgaXMgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wJworKTsKKwor Y29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1nbG9iYWxzLW9ubHkn LCAnLWQnLCAneHh4JywgJ2R1bXBkaXInIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjog b3B0aW9uIC1nXC8tLWdsb2JhbHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9y aW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIG9wdGlv biAtLWdsb2JhbHMtb25seSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCB0aGUgZHVtcCBv ZiBwZ19kdW1wJworKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdf ZHVtcGFsbC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTBm ZGQyZTkxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdf ZHVtcGFsbC5wbApAQCAtMCwwICsxLDYyMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAy NiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsK K3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9y ZTsKKworbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsK K215ICRydW5fZGIgPSAncG9zdGdyZXMnOworbXkgJHNlcCA9ICR3aW5kb3dzX29zID8gIlxc IiA6ICIvIjsKKworIyBUYWJsZXNwYWNlIGxvY2F0aW9ucyB1c2VkIGJ5ICJyZXN0b3JlX3Rh Ymxlc3BhY2UiIHRlc3QgY2FzZS4KK215ICR0YWJsZXNwYWNlMSA9ICIke3RlbXBkaXJ9JHtz ZXB9dGJsMSI7CitteSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1wZGlyfSR7c2VwfXRibDIiOwor bWtkaXIoJHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMSAkISI7Citt a2RpcigkdGFibGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UyICQhIjsKKwor IyBlc2NhcGUgdGFibGVzcGFjZSBsb2NhdGlvbnMgb24gV2luZG93cy4KK215ICR0YWJsZXNw YWNlMl9vcmlnID0gJHRhYmxlc3BhY2UyOworJHRhYmxlc3BhY2UxID0gJHdpbmRvd3Nfb3Mg PyAoJHRhYmxlc3BhY2UxID1+IHMvXFwvXFxcXC9ncikgOiAkdGFibGVzcGFjZTE7CiskdGFi bGVzcGFjZTIgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTIgPX4gcy9cXC9cXFxcL2dy KSA6ICR0YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19kdW1wYWxsIHdpbGwgYmUgZXhlY3V0 ZWQuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZScp OworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmlu aXRpb24gb2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisjCisjIEVhY2gg b2YgdGhlc2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFyZSB1c2Vk IGZvciBmYWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFuZCBy ZXN0b3JlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0Lgor IworIyBUaGUgInNldHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0IGNvbnRh aW5zIFNRTCBjb21tYW5kcyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBleGVj dXRlIHRoZSB0ZXN0cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBvZgor IyBhbnkgdGVzdCBleGVjdXRpb24uCisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVzdG9y ZV9jbWQiIGFyZSB0aGUgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUKKyMg InJlc3RvcmVfY21kIiBtdXN0IGhhdmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJl c3RvcmUgb3V0cHV0IHNvIHRoYXQgd2UKKyMgY2FuIGFzc2VydCBvbiBpdC4KKyMKKyMgVGhl ICJsaWtlIiBhbmQgInVubGlrZSIgaXMgYSByZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1hdGNo IHRoZSBwZ19yZXN0b3JlCisjIG91dHB1dC4gSXQgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBv ZiB0aGVuIGZpbGxlZCBwZXIgdGVzdCBjYXNlcyBidXQgaXQgYWxzbworIyBjYW4gaGF2ZSBi b3RoLiBTZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3QgY2FzZSBmb3IgZXhhbXBsZS4K K215ICVwZ2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3JlX3JvbGVzID0+IHsKKwkJc2V0dXBf c3FsID0+ICcKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZUFRFRCBQQVNTV09S RCBcJ2FkbWluXCcgU1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBkdW1wYWxsMiBXSVRIIFJF UExJQ0FUSU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9jbWQgPT4gWworCQkJ J3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZp bGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0 b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzLnNxbCIsCisJ CQkiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisJCQlc cypcUUNSRUFURSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVtcGFs bDIgV0lUSCBOT1NVUEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5P TE9HSU4gUkVQTElDQVRJT04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQor CQkveG0KKwl9LAorCisJcmVzdG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ ICIKKwkJQ1JFQVRFIFJPTEUgdGFwOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVS IHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJs MiBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29z dD0xLjApOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9y ZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3Rv cmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJCSIkdGVtcGRpci9y ZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJFIiBhcyBvcHRpb25hbCBz aW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJIyBXaW5k b3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9X TkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMl9vcmlnJztcRQorCQkJ XG5cUUFMVEVSIFRBQkxFU1BBQ0UgdGJsMiBTRVQgKHNlcV9wYWdlX2Nvc3Q9MS4wKTtcRQor CQkveG0sCisJfSwKKworCXJlc3RvcmVfZ3JhbnRzID0+IHsKKwkJc2V0dXBfc3FsID0+ICIK KwkJQ1JFQVRFIERBVEFCQVNFIHRhcGdyYW50c2RiOworCQlDUkVBVEUgU0NIRU1BIHByaXZh dGU7CisJCUNSRUFURSBTRVFVRU5DRSBzZXJpYWwgU1RBUlQgMTAxOworCQlDUkVBVEUgRlVO Q1RJT04gZm4oKSBSRVRVUk5TIHZvaWQgQVMgXCRcJAorCQlCRUdJTgorCQlFTkQ7CisJCVwk XCQgTEFOR1VBR0UgcGxwZ3NxbDsKKwkJQ1JFQVRFIFJPTEUgc3VwZXI7CisJCUNSRUFURSBS T0xFIGdyYW50MTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQyOworCQlDUkVBVEUgUk9MRSBncmFu dDM7CisJCUNSRUFURSBST0xFIGdyYW50NDsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ1OworCQlD UkVBVEUgUk9MRSBncmFudDY7CisJCUNSRUFURSBST0xFIGdyYW50NzsKKwkJQ1JFQVRFIFJP TEUgZ3JhbnQ4OworCisJCUNSRUFURSBUQUJMRSB0IChpZCBpbnQpOworCQlJTlNFUlQgSU5U TyB0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJR1JBTlQgU0VMRUNUIE9OIFRB QkxFIHQgVE8gZ3JhbnQxOworCQlHUkFOVCBJTlNFUlQgT04gVEFCTEUgdCBUTyBncmFudDI7 CisJCUdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIFRBQkxFIHQgdG8gZ3JhbnQzOworCQlHUkFO VCBDT05ORUNULCBDUkVBVEUgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0Owor CQlHUkFOVCBVU0FHRSwgQ1JFQVRFIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTsKKwkJ R1JBTlQgVVNBR0UsIFNFTEVDVCwgVVBEQVRFIE9OIFNFUVVFTkNFIHNlcmlhbCBUTyBncmFu dDY7CisJCUdSQU5UIHN1cGVyIFRPIGdyYW50NzsKKwkJR1JBTlQgRVhFQ1VURSBPTiBGVU5D VElPTiBmbigpIFRPIGdyYW50ODsKKwkJIiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1 bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ ICIkdGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsK KwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScs CisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMuc3FsIiwKKwkJCSIk dGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5c UUdSQU5UIEFMTCBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7XEUKKwkJCSguKlxuKSoK KwkJCVxuXFFHUkFOVCBBTEwgT04gRlVOQ1RJT04gcHVibGljLmZuKCkgVE8gZ3JhbnQ4O1xF CisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIFNFUVVFTkNFIHB1YmxpYy5zZXJp YWwgVE8gZ3JhbnQ2O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgU0VMRUNUIE9OIFRB QkxFIHB1YmxpYy50IFRPIGdyYW50MTtcRQorCQkJXG5cUUdSQU5UIElOU0VSVCBPTiBUQUJM RSBwdWJsaWMudCBUTyBncmFudDI7XEUKKwkJCVxuXFFHUkFOVCBBTEwgT04gVEFCTEUgcHVi bGljLnQgVE8gZ3JhbnQzO1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQ1JFQVRFLENP Tk5FQ1QgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0O1xFCisJCS94bSwKKwl9 LAorCisJZXhjbHVkaW5nX2RhdGFiYXNlcyA9PiB7CisJCXNldHVwX3NxbCA9PiAnQ1JFQVRF IERBVEFCQVNFIGRiMTsKKwkJXGMgZGIxCisJCUNSRUFURSBUQUJMRSB0MSAoaWQgaW50KTsK KwkJSU5TRVJUIElOVE8gdDEgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRF IFRBQkxFIHQyIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MiBWQUxVRVMgKDEpLCAoMiks ICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYjI7CisJCVxjIGRiMgorCQlDUkVB VEUgVEFCTEUgdDMgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQzIFZBTFVFUyAoMSksICgy KSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0NCAoaWQgaW50KTsKKwkJSU5TRVJUIElO VE8gdDQgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0Ug ZGJleDM7CisJCVxjIGRiZXgzCisJCUNSRUFURSBUQUJMRSB0NSAoaWQgaW50KTsKKwkJSU5T RVJUIElOVE8gdDUgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxF IHQ2IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NiBWQUxVRVMgKDEpLCAoMiksICgzKSwg KDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYmV4NDsKKwkJXGMgZGJleDQKKwkJQ1JFQVRF IFRBQkxFIHQ3IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NyBWQUxVRVMgKDEpLCAoMiks ICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDggKGlkIGludCk7CisJCUlOU0VSVCBJTlRP IHQ4IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRi NTsKKwkJXGMgZGI1CisJCUNSRUFURSBUQUJMRSB0OSAoaWQgaW50KTsKKwkJSU5TRVJUIElO VE8gdDkgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQxMCAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDEwIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7 CisJCScsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1h dCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5n X2RhdGFiYXNlcyIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAnZGJleConLAorCQld LAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1m b3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1 ZGluZ19kYXRhYmFzZXMuc3FsIiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdkYjUn LAorCQkJIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMiLAorCQldLAorCQlsaWtlID0+ IHFyL14KKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIxXEUKKwkJCSguKlxuKSoKKwkJCVxu XFFDUkVBVEUgVEFCTEUgcHVibGljLnQxIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFU RSBUQUJMRSBwdWJsaWMudDIgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERBVEFC QVNFIGRiMlxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MyAo XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ0ICgveG0sCisJ CXVubGlrZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiM1xFCisJCQkoLipc bikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NSAoXEUKKwkJCSguKlxuKSoKKwkJ CVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ2IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNS RUFURSBEQVRBQkFTRSBkYjRcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBw dWJsaWMudDcgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50 OCAoXEUKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGI1XEUKKwkJCSguKlxuKSoKKwkJCVxu XFFDUkVBVEUgVEFCTEUgcHVibGljLnQ5IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFU RSBUQUJMRSBwdWJsaWMudDEwIChcRQorCQkveG0sCisJfSwKKworCWZvcm1hdF9kaXJlY3Rv cnkgPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyZWN0b3J5 KGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9kaXJl Y3RvcnkgVkFMVUVTICgxLCB0cnVlLCAnbmFtZTEnKSwgKDIsIGZhbHNlLCAnbmFtZTInKTsi LAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9kaXJlY3Rv cnkiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycs CisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1w ZGlyL2Zvcm1hdF9kaXJlY3Rvcnkuc3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRfZGlyZWN0 b3J5IiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eXG5cUUNPUFkgcHVibGljLmZvcm1hdF9kaXJl Y3RvcnkgKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWZvcm1hdF90YXIgPT4g eworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfdGFyKGEgaW50LCBiIGJv b2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF90YXIgVkFMVUVTICgxLCBm YWxzZSwgJ25hbWUzJyksICgyLCB0cnVlLCAnbmFtZTQnKTsiLAorCQlkdW1wX2NtZCA9PiBb CisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICd0YXInLAorCQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBb CisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICd0YXInLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90YXIuc3FsIiwKKwkJCSIkdGVtcGRpci9m b3JtYXRfdGFyIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eXG5cUUNPUFkgcHVibGljLmZvcm1h dF90YXIgKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWZvcm1hdF9jdXN0b20g PT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfY3VzdG9tKGEgaW50 LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9jdXN0b20gVkFM VUVTICgxLCBmYWxzZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFtZTYnKTsiLAorCQlkdW1w X2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdjdXN0b20n LAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAorCQly ZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQn ID0+ICdjdXN0b20nLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20u c3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJbGlrZSA9PiBx ci9eIFxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfY3VzdG9tIChhLCBiLCBjKSBGUk9NIHN0ZGlu Oy94bQorCX0sCisKKwlkdW1wX2dsb2JhbHNfb25seSA9PiB7CisJCXNldHVwX3NxbCA9PiAi Q1JFQVRFIFRBQkxFIGZvcm1hdF9kaXIoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJ SU5TRVJUIElOVE8gZm9ybWF0X2RpciBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIs IHRydWUsICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywK KwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1nbG9iYWxzLW9ubHknLAor CQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5IiwKKwkJXSwKKwkJ cmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLCAnLS1nbG9iYWxzLW9u bHknLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIk dGVtcGRpci9kdW1wX2dsb2JhbHNfb25seS5zcWwiLAorCQkJIiR0ZW1wZGlyL2R1bXBfZ2xv YmFsc19vbmx5IiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKyAgICAgICAgICAgIF5ccypcUUNS RUFURSBST0xFIGR1bXBhbGw7XEVccypcbgorCQkJL3htCisJfSwpOworCisjIEZpcnN0IGV4 ZWN1dGUgdGhlIHNldHVwX3NxbAorZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVt cGFsbF9ydW5zKQoreworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntzZXR1cF9zcWx9 KQorCXsKKwkJJG5vZGUtPnNhZmVfcHNxbCgkcnVuX2RiLCAkcGdkdW1wYWxsX3J1bnN7JHJ1 bn0tPntzZXR1cF9zcWx9KTsKKwl9Cit9CisKKyMgRXhlY3V0ZSB0aGUgdGVzdHMKK2ZvcmVh Y2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVucykKK3sKKwkjIENyZWF0ZSBh IG5ldyB0YXJnZXQgY2x1c3RlciB0byBwZ19yZXN0b3JlIGVhY2ggdGVzdCBjYXNlIHJ1biBz byB0aGF0IHdlCisJIyBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgY2xlYW51cCBm cm9tIHRoZSB0YXJnZXQgY2x1c3RlciBhZnRlciBlYWNoCisJIyBydW4uCisJbXkgJHRhcmdl dF9ub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJ0YXJnZXRfJHJ1biIp OworCSR0YXJnZXRfbm9kZS0+aW5pdDsKKwkkdGFyZ2V0X25vZGUtPnN0YXJ0OworCisJIyBE dW1wYWxsIGZyb20gbm9kZSBjbHVzdGVyLgorCSRub2RlLT5jb21tYW5kX29rKFxAeyAkcGdk dW1wYWxsX3J1bnN7JHJ1bn0tPntkdW1wX2NtZH0gfSwKKwkJIiRydW46IHBnX2R1bXBhbGwg cnVucyIpOworCisJIyBSZXN0b3JlIHRoZSBkdW1wIG9uICJ0YXJnZXRfbm9kZSIgY2x1c3Rl ci4KKwlteSBAcmVzdG9yZV9jbWQgPSAoCisJCUB7ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e3Jlc3RvcmVfY21kfSB9LAorCQknLS1ob3N0JywgJHRhcmdldF9ub2RlLT5ob3N0LCAnLS1w b3J0JywgJHRhcmdldF9ub2RlLT5wb3J0KTsKKworCW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9 IHJ1bl9jb21tYW5kKFxAcmVzdG9yZV9jbWQpOworCisJIyBwZ19yZXN0b3JlIC0tZmlsZSBv dXRwdXQgZmlsZS4KKwlteSAkb3V0cHV0X2ZpbGUgPSBzbHVycF9maWxlKCIkdGVtcGRpci8k e3J1bn0uc3FsIik7CisKKwlpZiAoICAgISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtl fSkKKwkJJiYgISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KSkKKwl7CisJCWRp ZSAibWlzc2luZyBcImxpa2VcIiBvciBcInVubGlrZVwiIGluIHRlc3QgXCIkcnVuXCIiOwor CX0KKworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSkKKwl7CisJCWxpa2Uo JG91dHB1dF9maWxlLCAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSwgInNob3VsZCBk dW1wICRydW4iKTsKKwl9CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtl fSkKKwl7CisJCXVubGlrZSgKKwkJCSRvdXRwdXRfZmlsZSwKKwkJCSRwZ2R1bXBhbGxfcnVu c3skcnVufS0+e3VubGlrZX0sCisJCQkic2hvdWxkIG5vdCBkdW1wICRydW4iKTsKKwl9Cit9 CisKKyMgU29tZSBuZWdhdGl2ZSB0ZXN0IGNhc2Ugd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwg YW5kIHJlc3RvcmUgdXNpbmcgcGdfcmVzdG9yZQorIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAt QyBpcyBub3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCisk bm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRl bXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSct LWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jl c3RvcmU6IGVycm9yOiBvcHRpb24gLUNcLy0tY3JlYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdo ZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdX aGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBh bGwnKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiBcbC8tLWxpc3Qgb3B0aW9uIGlzIHVz ZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2Uo CisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1D JywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tbGlzdCcsCisJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBvcHRpb24gLWxcLy0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3Rvcmlu ZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtLWxpc3Qg aXMgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMg cmVwb3J0IGFuIGVycm9yIHdoZW4gLUwvLS11c2UtbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRo IGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJ CSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQkn LS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS11c2UtbGlzdCcgPT4gJ3VzZScsCisJCSct LWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jl c3RvcmU6IGVycm9yOiBvcHRpb24gLUxcLy0tdXNlLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hl biByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1do ZW4gLUwvLS11c2UtbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBn X2R1bXBhbGwnKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLXN0cmljdC1uYW1lcyBv cHRpb24gaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRf ZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9j dXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1zdHJpY3Qt bmFtZXMnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0s CisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tc3RyaWN0LW5hbWVzIGNhbm5v dCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1w YWxsXEUvLAorCSdXaGVuIC0tc3RyaWN0LW5hbWVzIGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3 aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0t Y2xlYW4gYW5kIC1nLy0tZ2xvYmFscy1vbmx5IGFyZSB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0 aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWwor CQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJ Jy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tY2xlYW4nLAorCQknLS1nbG9iYWxzLW9u bHknLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJ cXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLWNsZWFuIGFuZCAtZ1wvLS1nbG9i YWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3JpbmcgYW4gYXJj aGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLS1jbGVhbiBhbmQgLWcv LS1nbG9iYWxzLW9ubHkgYXJlIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdf ZHVtcGFsbCcKKyk7CisKKyMgcmVwb3J0IGFuIGVycm9yIHdoZW4gbm9uLWV4aXN0IGRhdGFi YXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtl KAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICct QycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctZCcgPT4gJ2RicHEnLAorCV0s CisJcXIvXFFGQVRBTDogIGRhdGFiYXNlICJkYnBxIiBkb2VzIG5vdCBleGlzdFxFLywKKwkn V2hlbiBub24tZXhpc3RlbnQgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24gaW4g cGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcKKyk7CisKKyMgcmVwb3J0IGFu IGVycm9yIHdoZW4gLS1uby1zY2hlbWEgaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFs bAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJ IiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0 b20nLAorCQknLS1uby1zY2hlbWEnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3Jf dGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tbm8t c2NoZW1hIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0tbm8tc2NoZW1hIGlzIHVzZWQgaW4gcGdf cmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHJlcG9ydCBhbiBlcnJv ciB3aGVuIC0tZGF0YS1vbmx5IGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRu b2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVt cGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywK KwkJJy0tZGF0YS1vbmx5JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Qu c3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtYVwvLS1kYXRh LW9ubHkgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVk IGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLS1kYXRhLW9ubHkgaXMgdXNlZCBpbiBwZ19y ZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgcmVwb3J0IGFuIGVycm9y IHdoZW4gLS1zdGF0aXN0aWNzLW9ubHkgaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFs bAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJ IiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0 b20nLAorCQknLS1zdGF0aXN0aWNzLW9ubHknLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIv ZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9u IC0tc3RhdGlzdGljcy1vbmx5IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFy Y2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0tc3RhdGlzdGljcy1v bmx5IGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOwor CisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tc2VjdGlvbiBleGNsdWRlcyBwcmUtZGF0YSB3 aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlb CisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAor CQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1zZWN0aW9uJyA9PiAncG9zdC1kYXRh JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFy L1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLXNlY3Rpb24gY2Fubm90IGV4Y2x1ZGUg LS1wcmUtZGF0YSB3aGVuIHJlc3RvcmluZyBhIHBnX2R1bXBhbGwgYXJjaGl2ZVxFLywKKwkn V2hlbiAtLXNlY3Rpb249cG9zdC1kYXRhIGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1 bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tZ2xvYmFs cy1vbmx5IGFuZCAtLWRhdGEtb25seSBhcmUgdXNlZCB0b2dldGhlcgorJG5vZGUtPmNvbW1h bmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1h dF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1nbG9i YWxzLW9ubHknLAorCQknLS1kYXRhLW9ubHknLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIv ZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9u cyAtYVwvLS1kYXRhLW9ubHkgYW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNl ZCB0b2dldGhlclxFLywKKwknV2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS1kYXRhLW9ubHkg YXJlIHVzZWQgdG9nZXRoZXInKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWdsb2Jh bHMtb25seSBhbmQgLS1zY2hlbWEtb25seSBhcmUgdXNlZCB0b2dldGhlcgorJG5vZGUtPmNv bW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zv cm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1n bG9iYWxzLW9ubHknLAorCQknLS1zY2hlbWEtb25seScsCisJCSctLWZpbGUnID0+ICIkdGVt cGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBv cHRpb25zIC1zXC8tLXNjaGVtYS1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXJcRS8sCisJJ1doZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tc2No ZW1hLW9ubHkgYXJlIHVzZWQgdG9nZXRoZXInKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hl biAtLWdsb2JhbHMtb25seSBhbmQgLS1zdGF0aXN0aWNzLW9ubHkgYXJlIHVzZWQgdG9nZXRo ZXIKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJ CSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3Vz dG9tJywKKwkJJy0tZ2xvYmFscy1vbmx5JywKKwkJJy0tc3RhdGlzdGljcy1vbmx5JywKKwkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLS1zdGF0aXN0aWNzLW9ubHkgYW5kIC1nXC8tLWds b2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwknV2hlbiAtLWdsb2Jh bHMtb25seSBhbmQgLS1zdGF0aXN0aWNzLW9ubHkgYXJlIHVzZWQgdG9nZXRoZXInKTsKKwor IyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS1zdGF0aXN0aWNz IGFyZSB1c2VkIHRvZ2V0aGVyCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJ J3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSct LWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctLWdsb2JhbHMtb25seScsCisJCSctLXN0YXRp c3RpY3MnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0s CisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLXN0YXRpc3RpY3MgYW5kIC1n XC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwknV2hlbiAt LWdsb2JhbHMtb25seSBhbmQgLS1zdGF0aXN0aWNzIGFyZSB1c2VkIHRvZ2V0aGVyJyk7CisK KyMgcmVwb3J0IGFuIGVycm9yIHdoZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tZXhpdC1vbi1l cnJvciBhcmUgdXNlZCB0b2dldGhlcgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlb CisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAor CQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1nbG9iYWxzLW9ubHknLAorCQknLS1l eGl0LW9uLWVycm9yJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3Fs IiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLS1leGl0LW9uLWVy cm9yIGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8s CisJJ1doZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tZXhpdC1vbi1lcnJvciBhcmUgdXNlZCB0 b2dldGhlcicpOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tZ2xvYmFscy1vbmx5IGFu ZCAtLXNpbmdsZS10cmFuc2FjdGlvbiBhcmUgdXNlZCB0b2dldGhlcgorJG5vZGUtPmNvbW1h bmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1h dF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1nbG9i YWxzLW9ubHknLAorCQknLS1zaW5nbGUtdHJhbnNhY3Rpb24nLAorCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJv cjogb3B0aW9ucyAtLXNpbmdsZS10cmFuc2FjdGlvbiBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5 IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyXEUvLAorCSdXaGVuIC0tZ2xvYmFscy1vbmx5IGFu ZCAtLXNpbmdsZS10cmFuc2FjdGlvbiBhcmUgdXNlZCB0b2dldGhlcicpOworCisjIHJlcG9y dCBhbiBlcnJvciB3aGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLXRyYW5zYWN0aW9uLXNpemUg YXJlIHVzZWQgdG9nZXRoZXIKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkn cGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0t Zm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZ2xvYmFscy1vbmx5JywKKwkJJy0tdHJhbnNh Y3Rpb24tc2l6ZScgPT4gJzEwMCcsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90 ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25zIC0tdHJh bnNhY3Rpb24tc2l6ZSBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRv Z2V0aGVyXEUvLAorCSdXaGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLXRyYW5zYWN0aW9uLXNp emUgYXJlIHVzZWQgdG9nZXRoZXInKTsKKworIyB2ZXJpZnkgbWFwLmRhdCBwcmVhbWJsZSBl eGlzdHMKK215ICRtYXBfZGF0X2NvbnRlbnQgPSBzbHVycF9maWxlKCIkdGVtcGRpci9mb3Jt YXRfZGlyZWN0b3J5L21hcC5kYXQiKTsKK2xpa2UoCisJJG1hcF9kYXRfY29udGVudCwKKwlx ci9eIyBtYXBcLmRhdFxuLiojIFRoaXMgZmlsZSBtYXBzIG9pZHMgdG8gZGF0YWJhc2UgbmFt ZXMvbXMsCisJJ21hcC5kYXQgY29udGFpbnMgZXhwZWN0ZWQgcHJlYW1ibGUnKTsKKworIyB2 ZXJpZnkgY29tbWVudGluZyBvdXQgYSBsaW5lIGluIG1hcC5kYXQgc2tpcHMgdGhhdCBkYXRh YmFzZQorJG5vZGUtPnNhZmVfcHNxbCgkcnVuX2RiLCAnQ1JFQVRFIERBVEFCQVNFIGNvbW1l bnRfdGVzdF9kYjsKK1xjIGNvbW1lbnRfdGVzdF9kYgorQ1JFQVRFIFRBQkxFIGNvbW1lbnRf dGVzdF90YWJsZSAoaWQgaW50KTsnKTsKKworJG5vZGUtPmNvbW1hbmRfb2soCisJWworCQkn cGdfZHVtcGFsbCcsCisJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9jb21tZW50X3Rlc3QiLAorCV0sCisJJ3BnX2R1bXBhbGwgZm9yIGNv bW1lbnQgdGVzdCcpOworCisjIE1vZGlmeSBtYXAuZGF0IHRvIGNvbW1lbnQgb3V0IHRoZSBj b21tZW50X3Rlc3RfZGIgZW50cnkKK215ICRtYXBfY29udGVudCA9IHNsdXJwX2ZpbGUoIiR0 ZW1wZGlyL2NvbW1lbnRfdGVzdC9tYXAuZGF0Iik7CiskbWFwX2NvbnRlbnQgPX4gcy9eKFxk KyBjb21tZW50X3Rlc3RfZGIpJC8jICQxL207CitvcGVuKG15ICRmaCwgJz4nLCAiJHRlbXBk aXIvY29tbWVudF90ZXN0L21hcC5kYXQiKQorICBvciBkaWUgIkNhbm5vdCBvcGVuIG1hcC5k YXQ6ICQhIjsKK3ByaW50ICRmaCAkbWFwX2NvbnRlbnQ7CitjbG9zZSgkZmgpOworCisjIENy ZWF0ZSBhIHRhcmdldCBub2RlIGFuZCByZXN0b3JlIC0gY29tbWVudGVkIGRiIHNob3VsZCBi ZSBza2lwcGVkCitteSAkdGFyZ2V0X2NvbW1lbnQgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoInRhcmdldF9jb21tZW50Iik7CiskdGFyZ2V0X2NvbW1lbnQtPmluaXQ7Cisk dGFyZ2V0X2NvbW1lbnQtPnN0YXJ0OworCiskbm9kZS0+Y29tbWFuZF9vaygKKwlbCisJCSdw Z19yZXN0b3JlJywgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJJy0t ZmlsZScgPT4gIiR0ZW1wZGlyL2NvbW1lbnRfdGVzdF9yZXN0b3JlLnNxbCIsCisJCSctLWhv c3QnLCAkdGFyZ2V0X2NvbW1lbnQtPmhvc3QsCisJCSctLXBvcnQnLCAkdGFyZ2V0X2NvbW1l bnQtPnBvcnQsCisJCSIkdGVtcGRpci9jb21tZW50X3Rlc3QiLAorCV0sCisJJ3BnX3Jlc3Rv cmUgd2l0aCBjb21tZW50ZWQgb3V0IGRhdGFiYXNlIGluIG1hcC5kYXQnKTsKKworbXkgJHJl c3RvcmVfb3V0cHV0ID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvY29tbWVudF90ZXN0X3Jlc3Rv cmUuc3FsIik7Cit1bmxpa2UoCisJJHJlc3RvcmVfb3V0cHV0LAorCXFyL0NSRUFURSBEQVRB QkFTRSBjb21tZW50X3Rlc3RfZGIvLAorCSdjb21tZW50ZWQgb3V0IGRhdGFiYXNlIGluIG1h cC5kYXQgaXMgbm90IHJlc3RvcmVkJyk7CisKKyRub2RlLT5zdG9wKCdmYXN0Jyk7CisKK2Rv bmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAyNDE5NDU3 MzRlYy4uMWE4OWVmOTRiZWMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC02 MDAsNiArNjAwLDcgQEAgQ3VzdG9tU2Nhbk1ldGhvZHMKIEN1c3RvbVNjYW5TdGF0ZQogQ3lj bGVDdHIKIERCU3RhdGUKK0RiT2lkTmFtZQogRENIQ2FjaGVFbnRyeQogREVBRExPQ0tfSU5G TwogREVDb3VudEl0ZW0K --------------vi6F0jS0hmsfsIWlSfgQuxFI--