Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sjYDp-001jl3-P3 for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Aug 2024 06:01:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sjYDn-00Fe9A-UK for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Aug 2024 06:01:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sjYDn-00Fe8o-1r for pgsql-hackers@lists.postgresql.org; Thu, 29 Aug 2024 06:01:28 +0000 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sjYDk-001xyT-4T for pgsql-hackers@lists.postgresql.org; Thu, 29 Aug 2024 06:01:26 +0000 Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-2f406034874so2832301fa.1 for ; Wed, 28 Aug 2024 23:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724911282; x=1725516082; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=gjuo9o7Q9DPmocRgw8WbVkAwuaYAYcW35EoYXa2Ihyw=; b=BqfP7hHCNZPoeBz9f5C6AoALGLuP0plnG6tvRYV9jkK+KksC/nYbbLAmjk9Ja+2vlG D2t+zwIalsJoQZs0XguN6zLCAW/UqB2cREgXj/8I/DhhFdhIlRgm6M2XJuhA9GqiHzc0 0waXK956exBQrerxpLLIizskegqJ7qXvNLKub1tAyU0hs04hQBHFHk3f8MS2y7C1q+a5 L8rbn0U3GOE3PAKjrOLsEUa2kR/zKn4+1Ld2Y0LlWOZ+x4qLTbpSUiPHxIgv6PW8mNAg eYFRldoAx74wROOOxLMYL2CxCV6uKMx9IYuA/ARRp4G5yS8w/6fhkWk9FV+bQpdBbod0 cPog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724911282; x=1725516082; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gjuo9o7Q9DPmocRgw8WbVkAwuaYAYcW35EoYXa2Ihyw=; b=tIrFCUtIyx1gRrfgpA/BPQphvK49PT6xo4gKDl8IiwhQ6Z9kG+CWupCGBcNKwNlK8w XVmTlqi1ZrUCga1s5dBNQS/9/vkHcL5CMYvetqpgasw52/DLF3QrlC73LaPZY6NhEp4P wIiDX1kbZ7DbWN+s6UmTWg02S90QQEb6LUASSWvXfNxJYpvcHPgprFUEe1h/yDBZmWZ7 2AMEVaJ0ufSBM5Q4gR+IRCiVhQeCI2Xg8mFjgQfT31WnQuxclbqXMC+isb9mspKgnAqb E5nlCEIpmMztclZG2YEP4Ljd+tzmgGd/zSAbe3Z2RmZoZ8t/AhvJfTMse5wNu5gaJctf EnXw== X-Forwarded-Encrypted: i=1; AJvYcCXroEfoDxwFMO+r6v/i4hMgB1/IQeSK1QbaRK5OPuvrxob44HhcJXdriqwP5l/j0BfJVigvclZE27i5Xjfp@lists.postgresql.org X-Gm-Message-State: AOJu0Ywq7L+Jgp67i2VLmTJ5O3IixLhAggI2m6Ddp0M4QG+u9yBg8j5m W8nCg2oA1ksDtPZ2AvdEk0J9FvERTuasdLTjsKYKL03MeOMod+gGw/gbSxHOL3SrQtO/AV2DvYC mCrPhymvjk7PCNlUDSahMQIq8e/k= X-Google-Smtp-Source: AGHT+IH/o6iejFeUmXDg9OlaR8n113zHmWuQ+P4EvsqpeRCLEt3WyNmq/AgYIYWJixJj8j+swjTXjVEagQILSt/u2to= X-Received: by 2002:a2e:702:0:b0:2f5:1fa7:ac3b with SMTP id 38308e7fff4ca-2f6105cce27mr10285201fa.17.1724911281668; Wed, 28 Aug 2024 23:01:21 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Thu, 29 Aug 2024 11:31:09 +0530 Message-ID: Subject: Re: Introduce XID age and inactive timeout based replication slot invalidation To: Amit Kapila Cc: Ajin Cherian , Bertrand Drouvot , shveta malik , Masahiko Sawada , Nathan Bossart , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000036aace0620cc345b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000036aace0620cc345b Content-Type: multipart/alternative; boundary="00000000000036aacd0620cc3459" --00000000000036aacd0620cc3459 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Thanks for looking into this. On Mon, Aug 26, 2024 at 4:35=E2=80=AFPM Amit Kapila wrote: > > Few comments on 0001: > 1. > @@ -651,6 +651,13 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid > > + /* > + * Skip the sync if the local slot is already invalidated. We do this > + * beforehand to avoid slot acquire and release. > + */ > > I was wondering why you have added this new check as part of this > patch. If you see the following comments in the related code, you will > know why we haven't done this previously. Removed. Can deal with optimization separately. > 2. > + */ > + InvalidateObsoleteReplicationSlots(RS_INVAL_INACTIVE_TIMEOUT, > + 0, InvalidOid, InvalidTransactionId); > > Why do we want to call this for shutdown case (when is_shutdown is > true)? I understand trying to invalidate slots during regular > checkpoint but not sure if we need it at the time of shutdown. Changed it to invalidate only for non-shutdown checkpoints. inactive_timeout invalidation isn't critical for shutdown unlike wal_removed which can help shutdown by freeing up some disk space. > The > other point is can we try to check the performance impact with 100s of > slots as mentioned in the code comments? I first checked how much does the wal_removed invalidation check add to the checkpoint (see 2nd and 3rd column). I then checked how much inactive_timeout invalidation check adds to the checkpoint (see 4th column), it is not more than wal_remove invalidation check. I then checked how much the wal_removed invalidation check adds for replication slots that have already been invalidated due to inactive_timeout (see 5th column), looks like not much. | # of slots | HEAD (no invalidation) ms | HEAD (wal_removed) ms | PATCHED (inactive_timeout) ms | PATCHED (inactive_timeout+wal_removed) ms | |------------|----------------------------|-----------------------|--------= -----------------------|------------------------------------------| | 100 | 18.591 | 370.586 | 359.299 | 373.882 | | 1000 | 15.722 | 4834.901 | 5081.751 | 5072.128 | | 10000 | 19.261 | 59801.062 | 61270.406 | 60270.099 | Having said that, I'm okay to implement the optimization specified. Thoughts? + /* + * NB: We will make another pass over replication slots for + * invalidation checks to keep the code simple. Testing shows that + * there is no noticeable overhead (when compared with wal_removed + * invalidation) even if we were to do inactive_timeout invalidation + * of thousands of replication slots here. If it is ever proven that + * this assumption is wrong, we will have to perform the invalidation + * checks in the above for loop with the following changes: + * + * - Acquire ControlLock lock once before the loop. + * + * - Call InvalidatePossiblyObsoleteSlot for each slot. + * + * - Handle the cases in which ControlLock gets released just like + * InvalidateObsoleteReplicationSlots does. + * + * - Avoid saving slot info to disk two times for each invalidated + * slot. Please see the attached v43 patches addressing the above review comments. --=20 Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --00000000000036aacd0620cc3459 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Thanks for looking into this.

On Mon, Au= g 26, 2024 at 4:35=E2=80=AFPM Amit Kapila <amit.kapila16@gmail.com> wrote:
>
> Few co= mments on 0001:
> 1.
> @@ -651,6 +651,13 @@ synchronize_one_slo= t(RemoteSlot *remote_slot, Oid
>
> + /*
> + * Skip the sy= nc if the local slot is already invalidated. We do this
> + * beforeh= and to avoid slot acquire and release.
> + */
>
> I was w= ondering why you have added this new check as part of this
> patch. I= f you see the following comments in the related code, you will
> know= why we haven't done this previously.

Removed. Can deal with opt= imization separately.

> 2.
> + */
> + InvalidateObsol= eteReplicationSlots(RS_INVAL_INACTIVE_TIMEOUT,
> + =C2=A0 =C2=A00, In= validOid, InvalidTransactionId);
>
> Why do we want to call thi= s for shutdown case (when is_shutdown is
> true)? I understand trying= to invalidate slots during regular
> checkpoint but not sure if we n= eed it at the time of shutdown.

Changed it to invalidate only for no= n-shutdown checkpoints. inactive_timeout invalidation isn't critical fo= r shutdown unlike wal_removed which can help shutdown by freeing up some di= sk space.

> The
> other point is can we try to check the pe= rformance impact with 100s of
> slots as mentioned in the code commen= ts?

I first checked how much does the wal_removed invalidation check= add to the checkpoint (see 2nd and 3rd column). I then checked how much in= active_timeout invalidation check adds to the checkpoint (see 4th column), = it is not more than wal_remove invalidation check. I then checked how much = the wal_removed invalidation check adds for replication slots that have alr= eady been invalidated due to inactive_timeout (see 5th column), looks like = not much.

| # of slots | HEAD (no invalidat= ion) ms | HEAD (wal_removed) ms | PATCHED (inactive_timeout) ms | PATCHED (= inactive_timeout+wal_removed) ms |
|------------|-----------------------= -----|-----------------------|-------------------------------|-------------= -----------------------------|
| 100 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 18.591= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 37= 0.586 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 359.299 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 373.88= 2 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
| 1000 =C2=A0 =C2=A0 =C2= =A0 | 15.722 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 | 4834.901 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 5081.7= 51 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0| 5072.128 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |
| 10000 =C2=A0= =C2=A0 =C2=A0| 19.261 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 | 59801.062 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 6= 1270.406 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 | 60270.099=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |

Having= said that, I'm okay to implement the optimization specified. Thoughts?=

+ /*
+ * NB: We will make another pass over replication slots= for
+ * invalidation checks to keep the code simple. Testing shows th= at
+ * there is no noticeable overhead (when compared with wal_removed=
+ * invalidation) even if we were to do inactive_timeout invalidation=
+ * of thousands of replication slots here. If it is ever proven that=
+ * this assumption is wrong, we will have to perform the invalidatio= n
+ * checks in the above for loop with the following changes:
+ = *
+ * - Acquire ControlLock lock once before the loop.
+ *
+ = * - Call InvalidatePossiblyObsoleteSlot for each slot.
+ *
+ * -= Handle the cases in which ControlLock gets released just like
+ * Inv= alidateObsoleteReplicationSlots does.
+ *
+ * - Avoid saving slot= info to disk two times for each invalidated
+ * slot.

Please s= ee the attached v43 patches addressing the above review comments.

--=
Bharath Rupireddy
PostgreSQL Contributors Team
RDS Open Source D= atabases
Amazon Web Services: https:/= /aws.amazon.com
--00000000000036aacd0620cc3459-- --00000000000036aace0620cc345b Content-Type: application/octet-stream; name="v43-0002-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="v43-0002-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m0evlj241 RnJvbSBiYjI4ZTdiYTdiYTc4M2IwYzkwODQxMjc3NGIxZDZlYTRjY2E2ZGM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjkgQXVnIDIwMjQgMDU6MTE6MzEgKzAw MDAKU3ViamVjdDogW1BBVENIIHY0MyAyLzJdIEFkZCBYSUQgYWdlIGJhc2VkIHJlcGxpY2F0aW9u IHNsb3QgaW52YWxpZGF0aW9uCgpUaWxsIG5vdywgcG9zdGdyZXMgaGFzIHRoZSBhYmlsaXR5IHRv IGludmFsaWRhdGUgaW5hY3RpdmUKcmVwbGljYXRpb24gc2xvdHMgYmFzZWQgb24gdGhlIGFtb3Vu dCBvZiBXQUwgKHNldCB2aWEKbWF4X3Nsb3Rfd2FsX2tlZXBfc2l6ZSBHVUMpIHRoYXQgd2lsbCBi ZSBuZWVkZWQgZm9yIHRoZSBzbG90cyBpbgpjYXNlIHRoZXkgYmVjb21lIGFjdGl2ZS4gSG93ZXZl ciwgY2hvb3NpbmcgYSBkZWZhdWx0IHZhbHVlIGZvcgptYXhfc2xvdF93YWxfa2VlcF9zaXplIGlz IHRyaWNreS4gQmVjYXVzZSB0aGUgYW1vdW50IG9mIFdBTCBhCmN1c3RvbWVyIGdlbmVyYXRlcywg YW5kIHRoZWlyIGFsbG9jYXRlZCBzdG9yYWdlIHdpbGwgdmFyeSBncmVhdGx5CmluIHByb2R1Y3Rp b24sIG1ha2luZyBpdCBkaWZmaWN1bHQgdG8gcGluIGRvd24gYSBvbmUtc2l6ZS1maXRzLWFsbAp2 YWx1ZS4gSXQgaXMgb2Z0ZW4gZWFzeSBmb3IgZGV2ZWxvcGVycyB0byBzZXQgYW4gWElEIGFnZSAo YWdlIG9mCnNsb3QncyB4bWluIG9yIGNhdGFsb2dfeG1pbikgb2Ygc2F5IDEgb3IgMS41IGJpbGxp b24sIGFmdGVyIHdoaWNoCnRoZSBzbG90cyBnZXQgaW52YWxpZGF0ZWQuCgpUbyBhY2hpZXZlIHRo ZSBhYm92ZSwgcG9zdGdyZXMgaW50cm9kdWNlcyBhIEdVQyBhbGxvd2luZyB1c2VycwpzZXQgc2xv dCBYSUQgYWdlLiBUaGUgcmVwbGljYXRpb24gc2xvdHMgd2hvc2UgeG1pbiBvciBjYXRhbG9nX3ht aW4KaGFzIHJlYWNoZWQgdGhlIGFnZSBzcGVjaWZpZWQgYnkgdGhpcyBzZXR0aW5nIGdldCBpbnZh bGlkYXRlZC4KClRoZSBpbnZhbGlkYXRpb24gY2hlY2sgaGFwcGVucyBhdCB2YXJpb3VzIGxvY2F0 aW9ucyB0byBoZWxwIGJlaW5nCmFzIGxhdGVzdCBhcyBwb3NzaWJsZSwgdGhlc2UgbG9jYXRpb25z IGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKLSBXaGVuZXZlciB0aGUgc2xvdCBpcyBhY3F1aXJlZCBh bmQgdGhlIHNsb3QgYWNxdWlzaXRpb24gZXJyb3JzCm91dCBpZiBpbnZhbGlkYXRlZC4KClRoZSBp bnZhbGlkYXRpb24gY2hlY2sgaGFwcGVucyBhdCB2YXJpb3VzIGxvY2F0aW9ucyB0byBoZWxwIGJl aW5nYXMgbGF0ZXN0IGFzIHBvc3NpYmxlLCB0aGVzZSBsb2NhdGlvbnMgaW5jbHVkZSB0aGUgZm9s bG93aW5nOgotIFdoZW5ldmVyIHRoZSBzbG90IGlzIGFjcXVpcmVkIGFuZCB0aGUgc2xvdCBhY3F1 aXNpdGlvbiBlcnJvcnMKb3V0IGlmIGludmFsaWRhdGVkLgotIER1cmluZyBjaGVja3BvaW50Ci0g RHVyaW5nIHZhY3V1bSAoYm90aCBjb21tYW5kLWJhc2VkIGFuZCBhdXRvdmFjdXVtKQoKQXV0aG9y OiBCaGFyYXRoIFJ1cGlyZWRkeQpSZXZpZXdlZC1ieTogQmVydHJhbmQgRHJvdXZvdCwgQW1pdCBL YXBpbGEsIFNodmV0YSBNYWxpawpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkL0NBTGoyQUNXNGFVZS1fdUZRT2pkV0NFTi14WG9MR2htdlJGbkw4U053X1Ra NW5KZSthd0BtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3Fs Lm9yZy9tZXNzYWdlLWlkLzIwMjQwMzI3MTUwNTU3LkdBMzk5NDkzNyU0MG5hdGhhbnhwczEzCkRp c2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0ElMkJUZ21v YVJFQ2NueXF4QXhVaFA1ZGsyUzRIWCUzRHBHaC1wLVBrQTN1YyUyQmpHXzloaU13JTQwbWFpbC5n bWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAg ICAgfCAgMjYgKysKIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAgICAg ICB8ICAgOCArCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICAgICAg fCAgNjYgKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jICAgICAgICAgICAgICAg IHwgMTU3ICsrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAg ICAgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmggICAgICAgICAgICAg ICAgfCAgIDMgKwogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTBfaW52YWxpZGF0ZV9zbG90cy5wbCAg IHwgMzIxICsrKysrKysrKysrKysrKysrLQogOCBmaWxlcyBjaGFuZ2VkLCA1NzIgaW5zZXJ0aW9u cygrKSwgMjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDExMzMwM2E1MDEuLmE2NWM0OWQ5 ZmEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKQEAgLTQ1ODksNiArNDU4OSwzMiBAQCByZXN0b3JlX2NvbW1hbmQgPSAn Y29weSAiQzpcXHNlcnZlclxcYXJjaGl2ZWRpclxcJWYiICIlcCInICAjIFdpbmRvd3MKICAgICAg IDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkg aWQ9Imd1Yy1yZXBsaWNhdGlvbi1zbG90LXhpZC1hZ2UiIHhyZWZsYWJlbD0icmVwbGljYXRpb25f c2xvdF94aWRfYWdlIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPnJlcGxpY2F0aW9uX3Nsb3RfeGlk X2FnZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4K KyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5yZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2U8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+ CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAg IEludmFsaWRhdGUgcmVwbGljYXRpb24gc2xvdHMgd2hvc2UgPGxpdGVyYWw+eG1pbjwvbGl0ZXJh bD4gKHRoZSBvbGRlc3QKKyAgICAgICAgdHJhbnNhY3Rpb24gdGhhdCB0aGlzIHNsb3QgbmVlZHMg dGhlIGRhdGFiYXNlIHRvIHJldGFpbikgb3IKKyAgICAgICAgPGxpdGVyYWw+Y2F0YWxvZ194bWlu PC9saXRlcmFsPiAodGhlIG9sZGVzdCB0cmFuc2FjdGlvbiBhZmZlY3RpbmcgdGhlCisgICAgICAg IHN5c3RlbSBjYXRhbG9ncyB0aGF0IHRoaXMgc2xvdCBuZWVkcyB0aGUgZGF0YWJhc2UgdG8gcmV0 YWluKSBoYXMgcmVhY2hlZAorICAgICAgICB0aGUgYWdlIHNwZWNpZmllZCBieSB0aGlzIHNldHRp bmcuIEEgdmFsdWUgb2YgemVybyAod2hpY2ggaXMgZGVmYXVsdCkKKyAgICAgICAgZGlzYWJsZXMg dGhpcyBmZWF0dXJlLiBVc2VycyBjYW4gc2V0IHRoaXMgdmFsdWUgYW55d2hlcmUgZnJvbSB6ZXJv IHRvCisgICAgICAgIHR3byBiaWxsaW9uLiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQg aW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxl IG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAgICAgICBsaW5lLgorICAgICAgIDwvcGFyYT4K KworICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGludmFsaWRhdGlvbiBjaGVjayBoYXBwZW5z IGVpdGhlciB3aGVuIHRoZSBzbG90IGlzIGFjcXVpcmVkCisgICAgICAgIGZvciB1c2Ugb3IgZHVy aW5nIHZhY3V1bSBvciBkdXJpbmcgY2hlY2twb2ludC4KKyAgICAgICA8L3BhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlk PSJndWMtdHJhY2stY29tbWl0LXRpbWVzdGFtcCIgeHJlZmxhYmVsPSJ0cmFja19jb21taXRfdGlt ZXN0YW1wIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX2NvbW1pdF90aW1lc3RhbXA8L3Zh cm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvc3lzdGVt LXZpZXdzLnNnbWwKaW5kZXggOWUwMGY3ZDE4NC4uYTRmMWFiNTI3NSAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmll d3Muc2dtbApAQCAtMjYyNSw2ICsyNjI1LDE0IEBAIFNFTEVDVCAqIEZST00gcGdfbG9ja3MgcGwg TEVGVCBKT0lOIHBnX3ByZXBhcmVkX3hhY3RzIHBweAogICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9 Imd1Yy1yZXBsaWNhdGlvbi1zbG90LWluYWN0aXZlLXRpbWVvdXQiLz4gcGFyYW1ldGVyLgogICAg ICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8bGl0ZXJhbD54aWRfYWdlZDwvbGl0ZXJhbD4gbWVh bnMgdGhhdCB0aGUgc2xvdCdzCisgICAgICAgICAgPGxpdGVyYWw+eG1pbjwvbGl0ZXJhbD4gb3Ig PGxpdGVyYWw+Y2F0YWxvZ194bWluPC9saXRlcmFsPgorICAgICAgICAgIGhhcyByZWFjaGVkIHRo ZSBhZ2Ugc3BlY2lmaWVkIGJ5CisgICAgICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLXJlcGxpY2F0 aW9uLXNsb3QteGlkLWFnZSIvPiBwYXJhbWV0ZXIuCisgICAgICAgICA8L3BhcmE+CisgICAgICAg IDwvbGlzdGl0ZW0+CiAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICA8L3BhcmE+PC9lbnRy eT4KICAgICAgPC9yb3c+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0u YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4IDdkOGU5ZDIwNDUuLmM5MDlj MGQwMDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlcl9p bnRlcm5hbHMuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKQEAgLTEx Niw2ICsxMTcsNyBAQCBzdGF0aWMgYm9vbCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIg KnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIHN0YXRpYyBkb3VibGUgY29tcHV0ZV9w YXJhbGxlbF9kZWxheSh2b2lkKTsKIHN0YXRpYyBWYWNPcHRWYWx1ZSBnZXRfdmFjb3B0dmFsX2Zy b21fYm9vbGVhbihEZWZFbGVtICpkZWYpOwogc3RhdGljIGJvb2wgdmFjX3RpZF9yZWFwZWQoSXRl bVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUpOworc3RhdGljIHZvaWQgdHJ5X3JlcGxpY2F0 aW9uX3Nsb3RfaW52YWxpZGF0aW9uKHZvaWQpOwogCiAvKgogICogR1VDIGNoZWNrIGZ1bmN0aW9u IHRvIGVuc3VyZSBHVUMgdmFsdWUgc3BlY2lmaWVkIGlzIHdpdGhpbiB0aGUgYWxsb3dhYmxlCkBA IC00NTIsNiArNDU0LDYxIEBAIEV4ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBWYWN1dW1T dG10ICp2YWNzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAJTWVtb3J5Q29udGV4dERlbGV0ZSh2YWNf Y29udGV4dCk7CiB9CiAKKy8qCisgKiBUcnkgaW52YWxpZGF0aW5nIHJlcGxpY2F0aW9uIHNsb3Rz IGJhc2VkIG9uIGN1cnJlbnQgcmVwbGljYXRpb24gc2xvdCB4bWluCisgKiBsaW1pdHMgb25jZSBl dmVyeSB2YWN1dW0gY3ljbGUuCisgKi8KK3N0YXRpYyB2b2lkCit0cnlfcmVwbGljYXRpb25fc2xv dF9pbnZhbGlkYXRpb24odm9pZCkKK3sKKwlUcmFuc2FjdGlvbklkIG1pbl9zbG90X3htaW47CisJ VHJhbnNhY3Rpb25JZCBtaW5fc2xvdF9jYXRhbG9nX3htaW47CisJYm9vbAkJY2FuX2ludmFsaWRh dGUgPSBmYWxzZTsKKwlUcmFuc2FjdGlvbklkIGN1dG9mZjsKKwlUcmFuc2FjdGlvbklkIGN1cnI7 CisKKwljdXJyID0gUmVhZE5leHRUcmFuc2FjdGlvbklkKCk7CisKKwkvKgorCSAqIFRoZSBjdXRv ZmYgY2FuIHRlbGwgaG93IGZhciB3ZSBjYW4gZ28gYmFjayBmcm9tIHRoZSBjdXJyZW50IHRyYW5z YWN0aW9uCisJICogaWQgdGlsbCB0aGUgYWdlLiBBbmQgdGhlbiwgd2UgY2hlY2sgd2hldGhlciBv ciBub3QgdGhlIHhtaW4gb3IKKwkgKiBjYXRhbG9nX3htaW4gZmFsbHMgd2l0aGluIHRoZSBjdXRv ZmY7IGlmIHllcywgcmV0dXJuIHRydWUsIG90aGVyd2lzZQorCSAqIGZhbHNlLgorCSAqLworCWN1 dG9mZiA9IGN1cnIgLSByZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2U7CisKKwlpZiAoIVRyYW5zYWN0 aW9uSWRJc05vcm1hbChjdXRvZmYpKQorCQljdXRvZmYgPSBGaXJzdE5vcm1hbFRyYW5zYWN0aW9u SWQ7CisKKwlQcm9jQXJyYXlHZXRSZXBsaWNhdGlvblNsb3RYbWluKCZtaW5fc2xvdF94bWluLCAm bWluX3Nsb3RfY2F0YWxvZ194bWluKTsKKworCS8qCisJICogQ3VycmVudCByZXBsaWNhdGlvbiBz bG90IHhtaW4gbGltaXRzIGNhbiBuZXZlciBiZSBsYXJnZXIgdGhhbiB0aGUKKwkgKiBjdXJyZW50 IHRyYW5zYWN0aW9uIGlkIGV2ZW4gaW4gdGhlIGNhc2Ugb2YgdHJhbnNhY3Rpb24gSUQgd3JhcGFy b3VuZC4KKwkgKi8KKwlBc3NlcnQobWluX3Nsb3RfeG1pbiA8PSBjdXJyKTsKKwlBc3NlcnQobWlu X3Nsb3RfY2F0YWxvZ194bWluIDw9IGN1cnIpOworCisJaWYgKFRyYW5zYWN0aW9uSWRJc05vcm1h bChtaW5fc2xvdF94bWluKSAmJgorCQlUcmFuc2FjdGlvbklkUHJlY2VkZXNPckVxdWFscyhtaW5f c2xvdF94bWluLCBjdXRvZmYpKQorCQljYW5faW52YWxpZGF0ZSA9IHRydWU7CisJZWxzZSBpZiAo VHJhbnNhY3Rpb25JZElzTm9ybWFsKG1pbl9zbG90X2NhdGFsb2dfeG1pbikgJiYKKwkJCSBUcmFu c2FjdGlvbklkUHJlY2VkZXNPckVxdWFscyhtaW5fc2xvdF9jYXRhbG9nX3htaW4sIGN1dG9mZikp CisJCWNhbl9pbnZhbGlkYXRlID0gdHJ1ZTsKKworCWlmIChjYW5faW52YWxpZGF0ZSkKKwl7CisJ CS8qCisJCSAqIE5vdGUgdGhhdCBJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzIGlz IGFsc28gY2FsbGVkIGFzIHBhcnQKKwkJICogb2YgQ0hFQ0tQT0lOVCwgYW5kIGVtaXR0aW5nIEVS Uk9ScyBmcm9tIHdpdGhpbiBpcyBhdm9pZGVkIGFscmVhZHkuCisJCSAqIFRoZXJlZm9yZSwgdGhl cmUgaXMgbm8gY29uY2VybiBoZXJlIHRoYXQgYW55IEVSUk9SIGZyb20KKwkJICogaW52YWxpZGF0 aW5nIHJlcGxpY2F0aW9uIHNsb3RzIGJsb2NrcyBWQUNVVU0uCisJCSAqLworCQlJbnZhbGlkYXRl T2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKFJTX0lOVkFMX1hJRF9BR0UsIDAsCisJCQkJCQkJCQkJ ICAgSW52YWxpZE9pZCwgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCX0KK30KKwogLyoKICAqIElu dGVybmFsIGVudHJ5IHBvaW50IGZvciBhdXRvdmFjdXVtIGFuZCB0aGUgVkFDVVVNIC8gQU5BTFla RSBjb21tYW5kcy4KICAqCkBAIC00ODMsNiArNTQwLDcgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9u cywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwK IAljb25zdCBjaGFyICpzdG10dHlwZTsKIAl2b2xhdGlsZSBib29sIGluX291dGVyX3hhY3QsCiAJ CQkJdXNlX293bl94YWN0czsKKwlzdGF0aWMgYm9vbCBmaXJzdF90aW1lID0gdHJ1ZTsKIAogCUFz c2VydChwYXJhbXMgIT0gTlVMTCk7CiAKQEAgLTU5NCw2ICs2NTIsMTQgQEAgdmFjdXVtKExpc3Qg KnJlbGF0aW9ucywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJz dHJhdGVneSwKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJfQogCisJaWYgKHBhcmFt cy0+b3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0gJiYKKwkJZmlyc3RfdGltZSAmJgorCQlyZXBsaWNh dGlvbl9zbG90X3hpZF9hZ2UgPiAwKQorCXsKKwkJdHJ5X3JlcGxpY2F0aW9uX3Nsb3RfaW52YWxp ZGF0aW9uKCk7CisJCWZpcnN0X3RpbWUgPSBmYWxzZTsKKwl9CisKIAkvKiBUdXJuIHZhY3V1bSBj b3N0IGFjY291bnRpbmcgb24gb3Igb2ZmLCBhbmQgc2V0L2NsZWFyIGluX3ZhY3V1bSAqLwogCVBH X1RSWSgpOwogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCA3MDA5MzUwMGZhLi41MzBjMTIx YzJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCkBAIC0xMDgsMTAgKzEwOCwxMSBAQCBjb25zdCBj aGFyICpjb25zdCBTbG90SW52YWxpZGF0aW9uQ2F1c2VzW10gPSB7CiAJW1JTX0lOVkFMX0hPUkla T05dID0gInJvd3NfcmVtb3ZlZCIsCiAJW1JTX0lOVkFMX1dBTF9MRVZFTF0gPSAid2FsX2xldmVs X2luc3VmZmljaWVudCIsCiAJW1JTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVRdID0gImluYWN0aXZl X3RpbWVvdXQiLAorCVtSU19JTlZBTF9YSURfQUdFXSA9ICJ4aWRfYWdlZCIsCiB9OwogCiAvKiBN YXhpbXVtIG51bWJlciBvZiBpbnZhbGlkYXRpb24gY2F1c2VzICovCi0jZGVmaW5lCVJTX0lOVkFM X01BWF9DQVVTRVMgUlNfSU5WQUxfSU5BQ1RJVkVfVElNRU9VVAorI2RlZmluZQlSU19JTlZBTF9N QVhfQ0FVU0VTIFJTX0lOVkFMX1hJRF9BR0UKIAogU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihT bG90SW52YWxpZGF0aW9uQ2F1c2VzKSA9PSAoUlNfSU5WQUxfTUFYX0NBVVNFUyArIDEpLAogCQkJ CSAiYXJyYXkgbGVuZ3RoIG1pc21hdGNoIik7CkBAIC0xNDIsNiArMTQzLDcgQEAgUmVwbGljYXRp b25TbG90ICpNeVJlcGxpY2F0aW9uU2xvdCA9IE5VTEw7CiBpbnQJCQltYXhfcmVwbGljYXRpb25f c2xvdHMgPSAxMDsgLyogdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlcGxpY2F0aW9uCiAJCQkJCQkJ CQkJICogc2xvdHMgKi8KIGludAkJCXJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCA9 IDA7CitpbnQJCQlyZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2UgPSAwOwogCiAvKgogICogVGhpcyBH VUMgbGlzdHMgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIHN0YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMg dGhhdApAQCAtMTYwLDYgKzE2Miw5IEBAIHN0YXRpYyBYTG9nUmVjUHRyIHNzX29sZGVzdF9mbHVz aF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAogc3RhdGljIHZvaWQgUmVwbGljYXRpb25TbG90 U2htZW1FeGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgUmVwbGljYXRpb25T bG90RHJvcFB0cihSZXBsaWNhdGlvblNsb3QgKnNsb3QpOworc3RhdGljIGJvb2wgUmVwbGljYXRp b25TbG90SXNYSURBZ2VkKFJlcGxpY2F0aW9uU2xvdCAqc2xvdCwKKwkJCQkJCQkJCSBUcmFuc2Fj dGlvbklkICp4bWluLAorCQkJCQkJCQkJIFRyYW5zYWN0aW9uSWQgKmNhdGFsb2dfeG1pbik7CiAK IHN0YXRpYyBib29sIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBsaWNhdGlvblNs b3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJCQkJCQkJCQkgICBSZXBsaWNhdGlvblNsb3Qg KnMsCkBAIC02MzYsOCArNjQxLDggQEAgcmV0cnk6CiAJICogZ2V0cyBpbnZhbGlkYXRlZCBub3cg b3IgaGFzIGJlZW4gaW52YWxpZGF0ZWQgcHJldmlvdXNseSwgYmVjYXVzZQogCSAqIHRoZXJlJ3Mg bm8gdXNlIGluIGFjcXVpcmluZyB0aGUgaW52YWxpZGF0ZWQgc2xvdC4KIAkgKgotCSAqIFhYWDog Q3VycmVudGx5IHdlIGNoZWNrIGZvciBpbmFjdGl2ZV90aW1lb3V0IGludmFsaWRhdGlvbiBoZXJl LiBXZQotCSAqIG1pZ2h0IG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGludmFsaWRhdGlvbnMgdG9v LgorCSAqIFhYWDogQ3VycmVudGx5IHdlIGNoZWNrIGZvciBpbmFjdGl2ZV90aW1lb3V0IGFuZCB4 aWRfYWdlZCBpbnZhbGlkYXRpb25zCisJICogaGVyZS4gV2UgbWlnaHQgbmVlZCB0byBjaGVjayBm b3Igb3RoZXIgaW52YWxpZGF0aW9ucyB0b28uCiAJICovCiAJaWYgKGNoZWNrX2Zvcl9pbnZhbGlk YXRpb24pCiAJewpAQCAtNjQ4LDYgKzY1MywyMiBAQCByZXRyeToKIAkJCQkJCQkJCQkJCQkgICBJ bnZhbGlkVHJhbnNhY3Rpb25JZCwKIAkJCQkJCQkJCQkJCQkgICAmaW52YWxpZGF0ZWQpOwogCisJ CWlmICghaW52YWxpZGF0ZWQgJiYgcmVsZWFzZWRfbG9jaykKKwkJeworCQkJLyogVGhlIHNsb3Qg aXMgc3RpbGwgb3VycyAqLworCQkJQXNzZXJ0KHMtPmFjdGl2ZV9waWQgPT0gTXlQcm9jUGlkKTsK KworCQkJLyogUmVhY3F1aXJlIHRoZSBDb250cm9sTG9jayAqLworCQkJTFdMb2NrQWNxdWlyZShS ZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hBUkVEKTsKKwkJCXJlbGVhc2VkX2xvY2sg PSBmYWxzZTsKKwkJfQorCisJCWlmICghaW52YWxpZGF0ZWQpCisJCQlyZWxlYXNlZF9sb2NrID0g SW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJTX0lOVkFMX1hJRF9BR0UsCisJCQkJCQkJ CQkJCQkJCSAgIHMsIDAsIEludmFsaWRPaWQsCisJCQkJCQkJCQkJCQkJCSAgIEludmFsaWRUcmFu c2FjdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgICAmaW52YWxpZGF0ZWQpOworCiAJCS8qCiAJCSAq IElmIHRoZSBzbG90IGhhcyBiZWVuIGludmFsaWRhdGVkLCByZWNhbGN1bGF0ZSB0aGUgcmVzb3Vy Y2UgbGltaXRzLgogCQkgKi8KQEAgLTY1Nyw3ICs2NzgsOCBAQCByZXRyeToKIAkJCVJlcGxpY2F0 aW9uU2xvdHNDb21wdXRlUmVxdWlyZWRMU04oKTsKIAkJfQogCi0JCWlmIChzLT5kYXRhLmludmFs aWRhdGVkID09IFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQpCisJCWlmIChzLT5kYXRhLmludmFs aWRhdGVkID09IFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQgfHwKKwkJCXMtPmRhdGEuaW52YWxp ZGF0ZWQgPT0gUlNfSU5WQUxfWElEX0FHRSkKIAkJewogCQkJLyoKIAkJCSAqIFJlbGVhc2UgdGhl IGxvY2sgaWYgaXQgaGFzbid0IGJlZW4gYWxyZWFkeSwgdG8gZW5zdXJlIHNtb290aApAQCAtNjY1 LDcgKzY4NywxMCBAQCByZXRyeToKIAkJCSAqLwogCQkJaWYgKCFyZWxlYXNlZF9sb2NrKQogCQkJ CUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25TbG90Q29udHJvbExvY2spOworCQl9CiAKKwkJaWYg KHMtPmRhdGEuaW52YWxpZGF0ZWQgPT0gUlNfSU5WQUxfSU5BQ1RJVkVfVElNRU9VVCkKKwkJewog CQkJQXNzZXJ0KHMtPmluYWN0aXZlX3NpbmNlID4gMCk7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKQEAg LTY3NSw2ICs3MDAsMjAgQEAgcmV0cnk6CiAJCQkJCQkJICAgdGltZXN0YW1wdHpfdG9fc3RyKHMt PmluYWN0aXZlX3NpbmNlKSwKIAkJCQkJCQkgICByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3Rp bWVvdXQpKSk7CiAJCX0KKworCQlpZiAocy0+ZGF0YS5pbnZhbGlkYXRlZCA9PSBSU19JTlZBTF9Y SURfQUdFKQorCQl7CisJCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQocy0+ZGF0YS54bWlu KSB8fAorCQkJCSAgIFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHMtPmRhdGEuY2F0YWxvZ194bWluKSk7 CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5f UFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygiY2FuIG5vIGxvbmdlciBnZXQgY2hh bmdlcyBmcm9tIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIiwKKwkJCQkJCQlOYW1lU3RyKHMtPmRh dGEubmFtZSkpLAorCQkJCQkgZXJyZGV0YWlsKCJUaGUgc2xvdCdzIHhtaW4gJXUgb3IgY2F0YWxv Z194bWluICV1IGhhcyByZWFjaGVkIHRoZSBhZ2UgJWQgc3BlY2lmaWVkIGJ5IFwicmVwbGljYXRp b25fc2xvdF94aWRfYWdlXCIuIiwKKwkJCQkJCQkgICBzLT5kYXRhLnhtaW4sCisJCQkJCQkJICAg cy0+ZGF0YS5jYXRhbG9nX3htaW4sCisJCQkJCQkJICAgcmVwbGljYXRpb25fc2xvdF94aWRfYWdl KSkpOworCQl9CiAJfQogCiAJaWYgKCFyZWxlYXNlZF9sb2NrKQpAQCAtMTU2Nyw3ICsxNjA2LDkg QEAgUmVwb3J0U2xvdEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVz ZSBjYXVzZSwKIAkJCQkJICAgWExvZ1JlY1B0ciByZXN0YXJ0X2xzbiwKIAkJCQkJICAgWExvZ1Jl Y1B0ciBvbGRlc3RMU04sCiAJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhv cml6b24sCi0JCQkJCSAgIFRpbWVzdGFtcFR6IGluYWN0aXZlX3NpbmNlKQorCQkJCQkgICBUaW1l c3RhbXBUeiBpbmFjdGl2ZV9zaW5jZSwKKwkJCQkJICAgVHJhbnNhY3Rpb25JZCB4bWluLAorCQkJ CQkgICBUcmFuc2FjdGlvbklkIGNhdGFsb2dfeG1pbikKIHsKIAlTdHJpbmdJbmZvRGF0YSBlcnJf ZGV0YWlsOwogCWJvb2wJCWhpbnQgPSBmYWxzZTsKQEAgLTE2MDQsNiArMTY0NSwyMCBAQCBSZXBv cnRTbG90SW52YWxpZGF0aW9uKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNl LAogCQkJCQkJCSB0aW1lc3RhbXB0el90b19zdHIoaW5hY3RpdmVfc2luY2UpLAogCQkJCQkJCSBy ZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQpOwogCQkJYnJlYWs7CisJCWNhc2UgUlNf SU5WQUxfWElEX0FHRToKKwkJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWluKSB8fAor CQkJCSAgIFRyYW5zYWN0aW9uSWRJc1ZhbGlkKGNhdGFsb2dfeG1pbikpOworCisJCQlpZiAoVHJh bnNhY3Rpb25JZElzVmFsaWQoeG1pbikpCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJyX2RldGFp bCwgXygiVGhlIHNsb3QncyB4bWluICV1IGhhcyByZWFjaGVkIHRoZSBhZ2UgJWQgc3BlY2lmaWVk IGJ5IFwicmVwbGljYXRpb25fc2xvdF94aWRfYWdlXCIuIiksCisJCQkJCQkJCSB4bWluLAorCQkJ CQkJCQkgcmVwbGljYXRpb25fc2xvdF94aWRfYWdlKTsKKwkJCWVsc2UgaWYgKFRyYW5zYWN0aW9u SWRJc1ZhbGlkKGNhdGFsb2dfeG1pbikpCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJyX2RldGFp bCwgXygiVGhlIHNsb3QncyBjYXRhbG9nX3htaW4gJXUgaGFzIHJlYWNoZWQgdGhlIGFnZSAlZCBz cGVjaWZpZWQgYnkgXCJyZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2VcIi4iKSwKKwkJCQkJCQkJIGNh dGFsb2dfeG1pbiwKKwkJCQkJCQkJIHJlcGxpY2F0aW9uX3Nsb3RfeGlkX2FnZSk7CisKKwkJCWJy ZWFrOwogCQljYXNlIFJTX0lOVkFMX05PTkU6CiAJCQlwZ191bnJlYWNoYWJsZSgpOwogCX0KQEAg LTE2NDgsNiArMTcwMyw4IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBsaWNh dGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAlYTG9nUmVjUHRyCWluaXRpYWxfcmVz dGFydF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAlSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRp b25DYXVzZSBpbnZhbGlkYXRpb25fY2F1c2VfcHJldiBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkg PSBSU19JTlZBTF9OT05FOwogCVRpbWVzdGFtcFR6IGluYWN0aXZlX3NpbmNlID0gMDsKKwlUcmFu c2FjdGlvbklkIGFnZWRfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVRyYW5zYWN0aW9u SWQgYWdlZF9jYXRhbG9nX3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAogCWZvciAoOzsp CiAJewpAQCAtMTc2NCw2ICsxODIxLDE2IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xv dChSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJCQkJCUFzc2VydChz LT5hY3RpdmVfcGlkID09IDApOwogCQkJCQl9CiAJCQkJCWJyZWFrOworCQkJCWNhc2UgUlNfSU5W QUxfWElEX0FHRToKKwkJCQkJaWYgKFJlcGxpY2F0aW9uU2xvdElzWElEQWdlZChzLCAmYWdlZF94 bWluLCAmYWdlZF9jYXRhbG9nX3htaW4pKQorCQkJCQl7CisJCQkJCQlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoYWdlZF94bWluKSB8fAorCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWRJc1ZhbGlk KGFnZWRfY2F0YWxvZ194bWluKSk7CisKKwkJCQkJCWludmFsaWRhdGlvbl9jYXVzZSA9IGNhdXNl OworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJYnJlYWs7CiAJCQkJY2FzZSBSU19JTlZBTF9O T05FOgogCQkJCQlwZ191bnJlYWNoYWJsZSgpOwogCQkJfQpAQCAtMTg1Miw3ICsxOTE5LDggQEAg SW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlv bkNhdXNlIGNhdXNlLAogCQkJCVJlcG9ydFNsb3RJbnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2Nh dXNlLCB0cnVlLCBhY3RpdmVfcGlkLAogCQkJCQkJCQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNu LAogCQkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJ CQkJCSAgIGluYWN0aXZlX3NpbmNlKTsKKwkJCQkJCQkJCSAgIGluYWN0aXZlX3NpbmNlLCBhZ2Vk X3htaW4sCisJCQkJCQkJCQkgICBhZ2VkX2NhdGFsb2dfeG1pbik7CiAKIAkJCQlpZiAoTXlCYWNr ZW5kVHlwZSA9PSBCX1NUQVJUVVApCiAJCQkJCSh2b2lkKSBTZW5kUHJvY1NpZ25hbChhY3RpdmVf cGlkLApAQCAtMTg5OSw3ICsxOTY3LDggQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90 KFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJUmVwb3J0U2xvdElu dmFsaWRhdGlvbihpbnZhbGlkYXRpb25fY2F1c2UsIGZhbHNlLCBhY3RpdmVfcGlkLAogCQkJCQkJ CQkgICBzbG90bmFtZSwgcmVzdGFydF9sc24sCiAJCQkJCQkJCSAgIG9sZGVzdExTTiwgc25hcHNo b3RDb25mbGljdEhvcml6b24sCi0JCQkJCQkJCSAgIGluYWN0aXZlX3NpbmNlKTsKKwkJCQkJCQkJ ICAgaW5hY3RpdmVfc2luY2UsIGFnZWRfeG1pbiwKKwkJCQkJCQkJICAgYWdlZF9jYXRhbG9nX3ht aW4pOwogCiAJCQkvKiBkb25lIHdpdGggdGhpcyBzbG90IGZvciBub3cgKi8KIAkJCWJyZWFrOwpA QCAtMTkyMyw2ICsxOTkyLDcgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJlcGxp Y2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogICogICBkYjsgZGJvaWQgbWF5IGJl IEludmFsaWRPaWQgZm9yIHNoYXJlZCByZWxhdGlvbnMKICAqIC0gUlNfSU5WQUxfV0FMX0xFVkVM OiBpcyBsb2dpY2FsCiAgKiAtIFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQ6IGluYWN0aXZlIHRp bWVvdXQgb2NjdXJzCisgKiAtIFJTX0lOVkFMX1hJRF9BR0U6IHNsb3QncyB4bWluIG9yIGNhdGFs b2dfeG1pbiBoYXMgcmVhY2hlZCB0aGUgYWdlCiAgKgogICogTkIgLSB0aGlzIHJ1bnMgYXMgcGFy dCBvZiBjaGVja3BvaW50LCBzbyBhdm9pZCByYWlzaW5nIGVycm9ycyBpZiBwb3NzaWJsZS4KICAq LwpAQCAtMjA0MywxMCArMjExMywxMSBAQCBDaGVja1BvaW50UmVwbGljYXRpb25TbG90cyhib29s IGlzX3NodXRkb3duKQogCQkgKiBOQjogV2Ugd2lsbCBtYWtlIGFub3RoZXIgcGFzcyBvdmVyIHJl cGxpY2F0aW9uIHNsb3RzIGZvcgogCQkgKiBpbnZhbGlkYXRpb24gY2hlY2tzIHRvIGtlZXAgdGhl IGNvZGUgc2ltcGxlLiBUZXN0aW5nIHNob3dzIHRoYXQKIAkJICogdGhlcmUgaXMgbm8gbm90aWNl YWJsZSBvdmVyaGVhZCAod2hlbiBjb21wYXJlZCB3aXRoIHdhbF9yZW1vdmVkCi0JCSAqIGludmFs aWRhdGlvbikgZXZlbiBpZiB3ZSB3ZXJlIHRvIGRvIGluYWN0aXZlX3RpbWVvdXQgaW52YWxpZGF0 aW9uCi0JCSAqIG9mIHRob3VzYW5kcyBvZiByZXBsaWNhdGlvbiBzbG90cyBoZXJlLiBJZiBpdCBp cyBldmVyIHByb3ZlbiB0aGF0Ci0JCSAqIHRoaXMgYXNzdW1wdGlvbiBpcyB3cm9uZywgd2Ugd2ls bCBoYXZlIHRvIHBlcmZvcm0gdGhlIGludmFsaWRhdGlvbgotCQkgKiBjaGVja3MgaW4gdGhlIGFi b3ZlIGZvciBsb29wIHdpdGggdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgorCQkgKiBpbnZhbGlkYXRp b24pIGV2ZW4gaWYgd2Ugd2VyZSB0byBkbyBpbmFjdGl2ZV90aW1lb3V0L3hpZF9hZ2VkCisJCSAq IGludmFsaWRhdGlvbiBvZiB0aG91c2FuZHMgb2YgcmVwbGljYXRpb24gc2xvdHMgaGVyZS4gSWYg aXQgaXMgZXZlcgorCQkgKiBwcm92ZW4gdGhhdCB0aGlzIGFzc3VtcHRpb24gaXMgd3JvbmcsIHdl IHdpbGwgaGF2ZSB0byBwZXJmb3JtIHRoZQorCQkgKiBpbnZhbGlkYXRpb24gY2hlY2tzIGluIHRo ZSBhYm92ZSBmb3IgbG9vcCB3aXRoIHRoZSBmb2xsb3dpbmcKKwkJICogY2hhbmdlczoKIAkJICoK IAkJICogLSBBY3F1aXJlIENvbnRyb2xMb2NrIGxvY2sgb25jZSBiZWZvcmUgdGhlIGxvb3AuCiAJ CSAqCkBAIC0yMDU4LDE2ICsyMTI5LDc4IEBAIENoZWNrUG9pbnRSZXBsaWNhdGlvblNsb3RzKGJv b2wgaXNfc2h1dGRvd24pCiAJCSAqIC0gQXZvaWQgc2F2aW5nIHNsb3QgaW5mbyB0byBkaXNrIHR3 byB0aW1lcyBmb3IgZWFjaCBpbnZhbGlkYXRlZAogCQkgKiBzbG90LgogCQkgKgotCQkgKiBYWFg6 IFNob3VsZCB3ZSBtb3ZlIGluYWN0aXZlX3RpbWVvdXQgaW5hdmFsaWRhdGlvbiBjaGVjayBjbG9z ZXIgdG8KKwkJICogWFhYOiBTaG91bGQgd2UgbW92ZSB0aGVzZSBpbmF2YWxpZGF0aW9uIGNoZWNr cyBjbG9zZXIgdG8KIAkJICogd2FsX3JlbW92ZWQgaW4gQ3JlYXRlQ2hlY2tQb2ludCBhbmQgQ3Jl YXRlUmVzdGFydFBvaW50PwogCQkgKi8KIAkJSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25T bG90cyhSU19JTlZBTF9JTkFDVElWRV9USU1FT1VULAogCQkJCQkJCQkJCSAgIDAsCiAJCQkJCQkJ CQkJICAgSW52YWxpZE9pZCwKIAkJCQkJCQkJCQkgICBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisK KwkJSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9YSURfQUdFLAor CQkJCQkJCQkJCSAgIDAsCisJCQkJCQkJCQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkgICBJ bnZhbGlkVHJhbnNhY3Rpb25JZCk7CiAJfQogfQogCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRo ZSBnaXZlbiByZXBsaWNhdGlvbiBzbG90J3MgeG1pbiBvciBjYXRhbG9nX3htaW4gYWdlIGlzCisg KiBtb3JlIHRoYW4gcmVwbGljYXRpb25fc2xvdF94aWRfYWdlLgorICoKKyAqIE5vdGUgdGhhdCB0 aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcmVwbGljYXRpb24gc2xvdCdzIHNwaW5sb2NrIHRvIGF2 b2lkCisgKiByYWNlIGNvbmRpdGlvbnMgd2hpbGUgdGhpcyBmdW5jdGlvbiByZWFkcyB4bWluIGFu ZCBjYXRhbG9nX3htaW4uCisgKi8KK3N0YXRpYyBib29sCitSZXBsaWNhdGlvblNsb3RJc1hJREFn ZWQoUmVwbGljYXRpb25TbG90ICpzbG90LCBUcmFuc2FjdGlvbklkICp4bWluLAorCQkJCQkJIFRy YW5zYWN0aW9uSWQgKmNhdGFsb2dfeG1pbikKK3sKKwlUcmFuc2FjdGlvbklkIGN1dG9mZjsKKwlU cmFuc2FjdGlvbklkIGN1cnI7CisKKwlpZiAocmVwbGljYXRpb25fc2xvdF94aWRfYWdlID09IDAp CisJCXJldHVybiBmYWxzZTsKKworCWN1cnIgPSBSZWFkTmV4dFRyYW5zYWN0aW9uSWQoKTsKKwor CS8qCisJICogUmVwbGljYXRpb24gc2xvdCdzIHhtaW4gYW5kIGNhdGFsb2dfeG1pbiBjYW4gbmV2 ZXIgYmUgbGFyZ2VyIHRoYW4gdGhlCisJICogY3VycmVudCB0cmFuc2FjdGlvbiBpZCBldmVuIGlu IHRoZSBjYXNlIG9mIHRyYW5zYWN0aW9uIElEIHdyYXBhcm91bmQuCisJICovCisJQXNzZXJ0KHNs b3QtPmRhdGEueG1pbiA8PSBjdXJyKTsKKwlBc3NlcnQoc2xvdC0+ZGF0YS5jYXRhbG9nX3htaW4g PD0gY3Vycik7CisKKwkvKgorCSAqIFRoZSBjdXRvZmYgY2FuIHRlbGwgaG93IGZhciB3ZSBjYW4g Z28gYmFjayBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uCisJICogaWQgdGlsbCB0aGUgYWdl LiBBbmQgdGhlbiwgd2UgY2hlY2sgd2hldGhlciBvciBub3QgdGhlIHhtaW4gb3IKKwkgKiBjYXRh bG9nX3htaW4gZmFsbHMgd2l0aGluIHRoZSBjdXRvZmY7IGlmIHllcywgcmV0dXJuIHRydWUsIG90 aGVyd2lzZQorCSAqIGZhbHNlLgorCSAqLworCWN1dG9mZiA9IGN1cnIgLSByZXBsaWNhdGlvbl9z bG90X3hpZF9hZ2U7CisKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1hbChjdXRvZmYpKQorCQlj dXRvZmYgPSBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQ7CisKKwkqeG1pbiA9IEludmFsaWRUcmFu c2FjdGlvbklkOworCSpjYXRhbG9nX3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKworCWlm IChUcmFuc2FjdGlvbklkSXNOb3JtYWwoc2xvdC0+ZGF0YS54bWluKSAmJgorCQlUcmFuc2FjdGlv bklkUHJlY2VkZXNPckVxdWFscyhzbG90LT5kYXRhLnhtaW4sIGN1dG9mZikpCisJeworCQkqeG1p biA9IHNsb3QtPmRhdGEueG1pbjsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKFRyYW5zYWN0 aW9uSWRJc05vcm1hbChzbG90LT5kYXRhLmNhdGFsb2dfeG1pbikgJiYKKwkJVHJhbnNhY3Rpb25J ZFByZWNlZGVzT3JFcXVhbHMoc2xvdC0+ZGF0YS5jYXRhbG9nX3htaW4sIGN1dG9mZikpCisJewor CQkqY2F0YWxvZ194bWluID0gc2xvdC0+ZGF0YS5jYXRhbG9nX3htaW47CisJCXJldHVybiB0cnVl OworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIExvYWQgYWxsIHJlcGxpY2F0aW9u IHNsb3RzIGZyb20gZGlzayBpbnRvIG1lbW9yeSBhdCBzZXJ2ZXIgc3RhcnR1cC4gVGhpcwogICog bmVlZHMgdG8gYmUgcnVuIGJlZm9yZSB3ZSBzdGFydCBjcmFzaCByZWNvdmVyeS4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggODYxNjkyYzY4My4uNWQxMGRkMWM4YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTMwNDAsNiArMzA0MCwxNiBAQCBzdHJ1Y3Qg Y29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0s CiAKKwl7CisJCXsicmVwbGljYXRpb25fc2xvdF94aWRfYWdlIiwgUEdDX1NJR0hVUCwgUkVQTElD QVRJT05fU0VORElORywKKwkJCWdldHRleHRfbm9vcCgiQWdlIG9mIHRoZSB0cmFuc2FjdGlvbiBJ RCBhdCB3aGljaCBhIHJlcGxpY2F0aW9uIHNsb3QgZ2V0cyBpbnZhbGlkYXRlZC4iKSwKKwkJCWdl dHRleHRfbm9vcCgiVGhlIHRyYW5zYWN0aW9uIGlzIHRoZSBvbGRlc3QgdHJhbnNhY3Rpb24gKGlu Y2x1ZGluZyB0aGUgb25lIGFmZmVjdGluZyB0aGUgc3lzdGVtIGNhdGFsb2dzKSB0aGF0IGEgcmVw bGljYXRpb24gc2xvdCBuZWVkcyB0aGUgZGF0YWJhc2UgdG8gcmV0YWluLiIpCisJCX0sCisJCSZy ZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2UsCisJCTAsIDAsIDIwMDAwMDAwMDAsCisJCU5VTEwsIE5V TEwsIE5VTEwKKwl9LAorCiAJewogCQl7ImNvbW1pdF9kZWxheSIsIFBHQ19TVVNFVCwgV0FMX1NF VFRJTkdTLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBkZWxheSBpbiBtaWNyb3NlY29uZHMg YmV0d2VlbiB0cmFuc2FjdGlvbiBjb21taXQgYW5kICIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBkZWNhM2E0YWViLi4zZmI2ODEzMTk1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0z MzYsNiArMzM2LDcgQEAKICN0cmFja19jb21taXRfdGltZXN0YW1wID0gb2ZmCSMgY29sbGVjdCB0 aW1lc3RhbXAgb2YgdHJhbnNhY3Rpb24gY29tbWl0CiAJCQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJl c3RhcnQpCiAjcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0ID0gMAkjIGluIHNlY29u ZHM7IDAgZGlzYWJsZXMKKyNyZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2UgPSAwCiAKICMgLSBQcmlt YXJ5IFNlcnZlciAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3Qu aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaAppbmRleCBkZDU2YTc3NTQ3Li41ZWE3 M2Y5MzMxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCkBAIC01NSw2ICs1NSw4IEBAIHR5cGVkZWYg ZW51bSBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZQogCVJTX0lOVkFMX1dBTF9MRVZF TCwKIAkvKiBpbmFjdGl2ZSBzbG90IHRpbWVvdXQgaGFzIG9jY3VycmVkICovCiAJUlNfSU5WQUxf SU5BQ1RJVkVfVElNRU9VVCwKKwkvKiBzbG90J3MgeG1pbiBvciBjYXRhbG9nX3htaW4gaGFzIHJl YWNoZWQgdGhlIGFnZSAqLworCVJTX0lOVkFMX1hJRF9BR0UsCiB9IFJlcGxpY2F0aW9uU2xvdElu dmFsaWRhdGlvbkNhdXNlOwogCiBleHRlcm4gUEdETExJTVBPUlQgY29uc3QgY2hhciAqY29uc3Qg U2xvdEludmFsaWRhdGlvbkNhdXNlc1tdOwpAQCAtMjMzLDYgKzIzNSw3IEBAIGV4dGVybiBQR0RM TElNUE9SVCBSZXBsaWNhdGlvblNsb3QgKk15UmVwbGljYXRpb25TbG90OwogZXh0ZXJuIFBHRExM SU1QT1JUIGludCBtYXhfcmVwbGljYXRpb25fc2xvdHM7CiBleHRlcm4gUEdETExJTVBPUlQgY2hh ciAqc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IHJl cGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dDsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQg cmVwbGljYXRpb25fc2xvdF94aWRfYWdlOwogCiAvKiBzaG1lbSBpbml0aWFsaXphdGlvbiBmdW5j dGlvbnMgKi8KIGV4dGVybiBTaXplIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUodm9pZCk7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1MF9pbnZhbGlkYXRlX3Nsb3RzLnBsIGIv c3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTBfaW52YWxpZGF0ZV9zbG90cy5wbAppbmRleCA0NjYzMDE5 YzE2Li4xODMwMGNmZWNhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1MF9pbnZh bGlkYXRlX3Nsb3RzLnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDUwX2ludmFsaWRhdGVf c2xvdHMucGwKQEAgLTg5LDcgKzg5LDcgQEAgJHByaW1hcnktPnJlbG9hZDsKICMgdGhhdCBub2Jv ZHkgaGFzIGFjcXVpcmVkIHRoYXQgc2xvdCB5ZXQsIHNvIGR1ZSB0bwogIyByZXBsaWNhdGlvbl9z bG90X2luYWN0aXZlX3RpbWVvdXQgc2V0dGluZyBhYm92ZSBpdCBtdXN0IGdldCBpbnZhbGlkYXRl ZC4KIHdhaXRfZm9yX3Nsb3RfaW52YWxpZGF0aW9uKCRwcmltYXJ5LCAnbHN1YjFfc3luY19zbG90 JywgJGxvZ3N0YXJ0LAotCSRpbmFjdGl2ZV90aW1lb3V0KTsKKwkkaW5hY3RpdmVfdGltZW91dCwg J2luYWN0aXZlX3RpbWVvdXQnKTsKIAogIyBTZXQgdGltZW91dCBvbiB0aGUgc3RhbmRieSBhbHNv IHRvIGNoZWNrIHRoZSBzeW5jZWQgc2xvdHMgZG9uJ3QgZ2V0CiAjIGludmFsaWRhdGVkIGR1ZSB0 byB0aW1lb3V0IG9uIHRoZSBzdGFuZGJ5LgpAQCAtMTI5LDcgKzEyOSw3IEBAICRzdGFuZGJ5MS0+ c3RvcDsKIAogIyBXYWl0IGZvciB0aGUgc3RhbmRieSdzIHJlcGxpY2F0aW9uIHNsb3QgdG8gYmVj b21lIGluYWN0aXZlCiB3YWl0X2Zvcl9zbG90X2ludmFsaWRhdGlvbigkcHJpbWFyeSwgJ3NiMV9z bG90JywgJGxvZ3N0YXJ0LAotCSRpbmFjdGl2ZV90aW1lb3V0KTsKKwkkaW5hY3RpdmVfdGltZW91 dCwgJ2luYWN0aXZlX3RpbWVvdXQnKTsKIAogIyBUZXN0Y2FzZSBlbmQ6IEludmFsaWRhdGUgc3Ry ZWFtaW5nIHN0YW5kYnkncyBzbG90IGFzIHdlbGwgYXMgbG9naWNhbCBmYWlsb3ZlcgogIyBzbG90 IG9uIHByaW1hcnkgZHVlIHRvIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dC4gQWxz bywgY2hlY2sgdGhlCkBAIC0xOTcsMTUgKzE5NywyODAgQEAgJHN1YnNjcmliZXItPnN0b3A7CiAj IFdhaXQgZm9yIHRoZSByZXBsaWNhdGlvbiBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZSBhbmQgdGhl biBpbnZhbGlkYXRlZCBkdWUgdG8KICMgdGltZW91dC4KIHdhaXRfZm9yX3Nsb3RfaW52YWxpZGF0 aW9uKCRwdWJsaXNoZXIsICdsc3ViMV9zbG90JywgJGxvZ3N0YXJ0LAotCSRpbmFjdGl2ZV90aW1l b3V0KTsKKwkkaW5hY3RpdmVfdGltZW91dCwgJ2luYWN0aXZlX3RpbWVvdXQnKTsKIAogIyBUZXN0 Y2FzZSBlbmQ6IEludmFsaWRhdGUgbG9naWNhbCBzdWJzY3JpYmVyJ3Mgc2xvdCBkdWUgdG8KICMg cmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0LgogIyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQogCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0OiBJbnZhbGlkYXRl IHN0cmVhbWluZyBzdGFuZGJ5J3Mgc2xvdCBkdWUgdG8gcmVwbGljYXRpb25fc2xvdF94aWRfYWdl CisjIEdVQy4KKworIyBQcmVwYXJlIGZvciB0aGUgbmV4dCB0ZXN0CiskcHJpbWFyeS0+c2FmZV9w c3FsKAorCSdwb3N0Z3JlcycsIHFxWworICAgIEFMVEVSIFNZU1RFTSBTRVQgcmVwbGljYXRpb25f c2xvdF9pbmFjdGl2ZV90aW1lb3V0IFRPICcwJzsKK10pOworJHByaW1hcnktPnJlbG9hZDsKKwor IyBDcmVhdGUgYSBzdGFuZGJ5IGxpbmtpbmcgdG8gdGhlIHByaW1hcnkgdXNpbmcgdGhlIHJlcGxp Y2F0aW9uIHNsb3QKK215ICRzdGFuZGJ5MiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygnc3RhbmRieTInKTsKKyRzdGFuZGJ5Mi0+aW5pdF9mcm9tX2JhY2t1cCgkcHJpbWFyeSwgJGJh Y2t1cF9uYW1lLCBoYXNfc3RyZWFtaW5nID0+IDEpOworCisjIEVuYWJsZSBoc19mZWVkYmFjay4g VGhlIHNsb3Qgc2hvdWxkIGdhaW4gYW4geG1pbi4gV2Ugc2V0IHRoZSBzdGF0dXMgaW50ZXJ2YWwK KyMgc28gd2UnbGwgc2VlIHRoZSByZXN1bHRzIHByb21wdGx5LgorJHN0YW5kYnkyLT5hcHBlbmRf Y29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXsKK3ByaW1hcnlfc2xvdF9uYW1lID0gJ3NiMl9z bG90JworaG90X3N0YW5kYnlfZmVlZGJhY2sgPSBvbgord2FsX3JlY2VpdmVyX3N0YXR1c19pbnRl cnZhbCA9IDEKK30pOworCiskcHJpbWFyeS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWwor ICAgIFNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxfcmVwbGljYXRpb25fc2xvdChzbG90X25hbWUg Oj0gJ3NiMl9zbG90JywgaW1tZWRpYXRlbHlfcmVzZXJ2ZSA6PSB0cnVlKTsKK10pOworCiskc3Rh bmRieTItPnN0YXJ0OworCisjIENyZWF0ZSBzb21lIGNvbnRlbnQgb24gcHJpbWFyeSB0byBtb3Zl IHhtaW4KKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRh Yl9pbnQgQVMgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDEwKSBBUyBhIik7CisKKyMgV2FpdCB1 bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2ggZGF0YQorJHByaW1hcnktPndhaXRfZm9y X2NhdGNodXAoJHN0YW5kYnkyKTsKKworJHByaW1hcnktPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bv c3RncmVzJywgcXFbCisJU0VMRUNUIHhtaW4gSVMgTk9UIE5VTEwgQU5EIGNhdGFsb2dfeG1pbiBJ UyBOVUxMCisJCUZST00gcGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlvbl9zbG90cworCQlXSEVSRSBz bG90X25hbWUgPSAnc2IyX3Nsb3QnOworXSkgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3Ig c2xvdCBzYjJfc2xvdCB4bWluIHRvIGFkdmFuY2UiOworCiskcHJpbWFyeS0+c2FmZV9wc3FsKAor CSdwb3N0Z3JlcycsIHFxWworCUFMVEVSIFNZU1RFTSBTRVQgcmVwbGljYXRpb25fc2xvdF94aWRf YWdlID0gNTAwOworXSk7CiskcHJpbWFyeS0+cmVsb2FkOworCisjIFN0b3Agc3RhbmRieSB0byBt YWtlIHRoZSByZXBsaWNhdGlvbiBzbG90J3MgeG1pbiBvbiBwcmltYXJ5IHRvIGFnZQorJHN0YW5k YnkyLT5zdG9wOworCiskbG9nc3RhcnQgPSAtcyAkcHJpbWFyeS0+bG9nZmlsZTsKKworIyBEbyBz b21lIHdvcmsgdG8gYWR2YW5jZSB4aWRzIG9uIHByaW1hcnkKK2FkdmFuY2VfeGlkcygkcHJpbWFy eSwgJ3RhYl9pbnQnKTsKKworIyBXYWl0IGZvciB0aGUgcmVwbGljYXRpb24gc2xvdCB0byBiZWNv bWUgaW5hY3RpdmUgYW5kIHRoZW4gaW52YWxpZGF0ZWQgZHVlIHRvCisjIFhJRCBhZ2UuCit3YWl0 X2Zvcl9zbG90X2ludmFsaWRhdGlvbigkcHJpbWFyeSwgJ3NiMl9zbG90JywgJGxvZ3N0YXJ0LCAw LCAneGlkX2FnZWQnKTsKKworIyBUZXN0Y2FzZSBlbmQ6IEludmFsaWRhdGUgc3RyZWFtaW5nIHN0 YW5kYnkncyBzbG90IGR1ZSB0byByZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2UKKyMgR1VDLgorIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNl IHN0YXJ0OiBJbnZhbGlkYXRlIGxvZ2ljYWwgc3Vic2NyaWJlcidzIHNsb3QgZHVlIHRvCisjIHJl cGxpY2F0aW9uX3Nsb3RfeGlkX2FnZSBHVUMuCisKKyRwdWJsaXNoZXIgPSAkcHJpbWFyeTsKKyRw dWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlBTFRFUiBTWVNURU0gU0VU IHJlcGxpY2F0aW9uX3Nsb3RfeGlkX2FnZSA9IDUwMDsKK10pOworJHB1Ymxpc2hlci0+cmVsb2Fk OworCiskc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAor aG90X3N0YW5kYnlfZmVlZGJhY2sgPSBvbgord2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCA9 IDEKKykpOworJHN1YnNjcmliZXItPnN0YXJ0OworCisjIENyZWF0ZSB0YWJsZXMKKyRwdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRlc3RfdGJsMiAoaWQgaW50 KSIpOworJHN1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRl c3RfdGJsMiAoaWQgaW50KSIpOworCisjIEluc2VydCBzb21lIGRhdGEKKyRwdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3RibDIgVkFMVUVTIChnZW5l cmF0ZV9zZXJpZXMoMSwgNSkpOyIpOworCisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KKyRw dWJsaXNoZXJfY29ubnN0ciA9ICRwdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jl cyc7CiskcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1YjIgRk9SIFRBQkxFIHRlc3RfdGJsMiIpOworCiskc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMiBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1YjIgV0lUSCAoc2xvdF9uYW1lID0gJ2xzdWIy X3Nsb3QnKSIKKyk7CisKKyRzdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygk cHVibGlzaGVyLCAnc3ViMicpOworCiskcmVzdWx0ID0KKyAgJHN1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YmwyIik7CisKK2lzKCRy ZXN1bHQsIHFxKDUpLCAiY2hlY2sgaW5pdGlhbCBjb3B5IHdhcyBkb25lIik7CisKKyRwdWJsaXNo ZXItPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUIHhtaW4gSVMg TlVMTCBBTkQgY2F0YWxvZ194bWluIElTIE5PVCBOVUxMCisJRlJPTSBwZ19jYXRhbG9nLnBnX3Jl cGxpY2F0aW9uX3Nsb3RzCisJV0hFUkUgc2xvdF9uYW1lID0gJ2xzdWIyX3Nsb3QnOworXSkgb3Ig ZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2xvdCBsc3ViMl9zbG90IGNhdGFsb2dfeG1pbiB0 byBhZHZhbmNlIjsKKworJGxvZ3N0YXJ0ID0gLXMgJHB1Ymxpc2hlci0+bG9nZmlsZTsKKworIyBT dG9wIHN1YnNjcmliZXIgdG8gbWFrZSB0aGUgcmVwbGljYXRpb24gc2xvdCBvbiBwdWJsaXNoZXIg aW5hY3RpdmUKKyRzdWJzY3JpYmVyLT5zdG9wOworCisjIERvIHNvbWUgd29yayB0byBhZHZhbmNl IHhpZHMgb24gcHVibGlzaGVyCithZHZhbmNlX3hpZHMoJHB1Ymxpc2hlciwgJ3Rlc3RfdGJsMicp OworCisjIFdhaXQgZm9yIHRoZSByZXBsaWNhdGlvbiBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZSBh bmQgdGhlbiBpbnZhbGlkYXRlZCBkdWUgdG8KKyMgWElEIGFnZS4KK3dhaXRfZm9yX3Nsb3RfaW52 YWxpZGF0aW9uKCRwdWJsaXNoZXIsICdsc3ViMl9zbG90JywgJGxvZ3N0YXJ0LCAwLAorCSd4aWRf YWdlZCcpOworCisjIFRlc3RjYXNlIGVuZDogSW52YWxpZGF0ZSBsb2dpY2FsIHN1YnNjcmliZXIn cyBzbG90IGR1ZSB0bworIyByZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2UgR1VDLgorIyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0 OiBJbnZhbGlkYXRlIGxvZ2ljYWwgc2xvdCBvbiBzdGFuZGJ5IHRoYXQncyBiZWluZyBzeW5jZWQg ZnJvbQorIyB0aGUgcHJpbWFyeSBkdWUgdG8gcmVwbGljYXRpb25fc2xvdF94aWRfYWdlIEdVQy4K KworJHB1Ymxpc2hlciA9ICRwcmltYXJ5OworCisjIFByZXBhcmUgZm9yIHRoZSBuZXh0IHRlc3QK KyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlBTFRFUiBTWVNURU0g U0VUIHJlcGxpY2F0aW9uX3Nsb3RfeGlkX2FnZSA9IDA7CitdKTsKKyRwdWJsaXNoZXItPnJlbG9h ZDsKKworIyBDcmVhdGUgYSBzdGFuZGJ5IGxpbmtpbmcgdG8gdGhlIHByaW1hcnkgdXNpbmcgdGhl IHJlcGxpY2F0aW9uIHNsb3QKK215ICRzdGFuZGJ5MyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygnc3RhbmRieTMnKTsKKyRzdGFuZGJ5My0+aW5pdF9mcm9tX2JhY2t1cCgkcHJpbWFy eSwgJGJhY2t1cF9uYW1lLCBoYXNfc3RyZWFtaW5nID0+IDEpOworCiskc3RhbmRieTMtPmFwcGVu ZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKK2hvdF9zdGFuZGJ5X2ZlZWRiYWNrID0g b24KK3ByaW1hcnlfc2xvdF9uYW1lID0gJ3NiM19zbG90JworcHJpbWFyeV9jb25uaW5mbyA9ICck Y29ubnN0cl8xIGRibmFtZT1wb3N0Z3JlcycKKykpOworCiskcHJpbWFyeS0+c2FmZV9wc3FsKAor CSdwb3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxfcmVwbGljYXRp b25fc2xvdChzbG90X25hbWUgOj0gJ3NiM19zbG90JywgaW1tZWRpYXRlbHlfcmVzZXJ2ZSA6PSB0 cnVlKTsKK10pOworCiskc3RhbmRieTMtPnN0YXJ0OworCitteSAkc3RhbmRieTNfbG9nc3RhcnQg PSAtcyAkc3RhbmRieTMtPmxvZ2ZpbGU7CisKKyMgV2FpdCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBs YXllZCBlbm91Z2ggZGF0YQorJHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnkzKTsK KworJHN1YnNjcmliZXItPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKK2hv dF9zdGFuZGJ5X2ZlZWRiYWNrID0gb24KK3dhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgPSAx CispKTsKKyRzdWJzY3JpYmVyLT5zdGFydDsKKworIyBDcmVhdGUgdGFibGVzCiskcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3RibDMgKGlkIGludCki KTsKKyRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0 X3RibDMgKGlkIGludCkiKTsKKworIyBJbnNlcnQgc29tZSBkYXRhCiskcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVzdF90YmwzIFZBTFVFUyAoZ2VuZXJh dGVfc2VyaWVzKDEsIDUpKTsiKTsKKworIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uCiskcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjMg Rk9SIFRBQkxFIHRlc3RfdGJsMyIpOworCiskc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMyBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nv bm5zdHInIFBVQkxJQ0FUSU9OIHB1YjMgV0lUSCAoc2xvdF9uYW1lID0gJ2xzdWIzX3N5bmNfc2xv dCcsIGZhaWxvdmVyID0gdHJ1ZSkiCispOworCiskc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2Ny aXB0aW9uX3N5bmMoJHB1Ymxpc2hlciwgJ3N1YjMnKTsKKworJHJlc3VsdCA9CisgICRzdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGJs MyIpOworCitpcygkcmVzdWx0LCBxcSg1KSwgImNoZWNrIGluaXRpYWwgY29weSB3YXMgZG9uZSIp OworCiskcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNF TEVDVCB4bWluIElTIE5VTEwgQU5EIGNhdGFsb2dfeG1pbiBJUyBOT1QgTlVMTAorCUZST00gcGdf Y2F0YWxvZy5wZ19yZXBsaWNhdGlvbl9zbG90cworCVdIRVJFIHNsb3RfbmFtZSA9ICdsc3ViM19z eW5jX3Nsb3QnOworXSkKKyAgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2xvdCBsc3Vi M19zeW5jX3Nsb3QgY2F0YWxvZ194bWluIHRvIGFkdmFuY2UiOworCisjIFN5bmNocm9uaXplIHRo ZSBwcmltYXJ5IHNlcnZlciBzbG90cyB0byB0aGUgc3RhbmRieQorJHN0YW5kYnkzLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19zeW5jX3JlcGxpY2F0aW9uX3Nsb3RzKCk7Iik7CisK KyMgQ29uZmlybSB0aGF0IHRoZSBsb2dpY2FsIGZhaWxvdmVyIHNsb3QgaXMgY3JlYXRlZCBvbiB0 aGUgc3RhbmRieSBhbmQgaXMKKyMgZmxhZ2dlZCBhcyAnc3luY2VkJyBhbmQgaGFzIGdvdCBjYXRh bG9nX3htaW4gZnJvbSB0aGUgcHJpbWFyeS4KK2lzKCAkc3RhbmRieTMtPnNhZmVfcHNxbCgKKwkJ J3Bvc3RncmVzJywKKwkJcXtTRUxFQ1QgY291bnQoKikgPSAxIEZST00gcGdfcmVwbGljYXRpb25f c2xvdHMKKwkJICBXSEVSRSBzbG90X25hbWUgPSAnbHN1YjNfc3luY19zbG90JyBBTkQgc3luY2Vk IEFORCBOT1QgdGVtcG9yYXJ5IEFORAorCQkJeG1pbiBJUyBOVUxMIEFORCBjYXRhbG9nX3htaW4g SVMgTk9UIE5VTEw7fQorCSksCisJInQiLAorCSdsb2dpY2FsIHNsb3QgaGFzIHN5bmNlZCBhcyB0 cnVlIG9uIHN0YW5kYnknKTsKKworbXkgJHByaW1hcnlfY2F0YWxvZ194bWluID0gJHByaW1hcnkt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY2F0YWxvZ194bWluIEZST00gcGdfcmVw bGljYXRpb25fc2xvdHMgV0hFUkUgc2xvdF9uYW1lID0gJ2xzdWIzX3N5bmNfc2xvdCcgQU5EIGNh dGFsb2dfeG1pbiBJUyBOT1QgTlVMTDsiCispOworCitteSAkc3RhYmRieTNfY2F0YWxvZ194bWlu ID0gJHN0YW5kYnkzLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNhdGFsb2dfeG1p biBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzIFdIRVJFIHNsb3RfbmFtZSA9ICdsc3ViM19zeW5j X3Nsb3QnIEFORCBjYXRhbG9nX3htaW4gSVMgTk9UIE5VTEw7IgorKTsKKworaXMoJHByaW1hcnlf Y2F0YWxvZ194bWluLCAkc3RhYmRieTNfY2F0YWxvZ194bWluLAorCSJjaGVjayBjYXRhbG9nX3ht aW4gYXJlIHNhbWUgZm9yIHByaW1hcnkgc2xvdCBhbmQgc3luY2VkIHNsb3QiKTsKKworIyBFbmFi bGUgWElEIGFnZSBiYXNlZCBpbnZhbGlkYXRpb24gb24gdGhlIHN0YW5kYnkuIE5vdGUgdGhhdCB3 ZSBkaXNhYmxlZCB0aGUKKyMgc2FtZSBvbiB0aGUgcHJpbWFyeSB0byBjaGVjayBpZiB0aGUgaW52 YWxpZGF0aW9uIG9jY3VycyBmb3Igc3luY2VkIHNsb3Qgb24KKyMgdGhlIHN0YW5kYnkuCiskc3Rh bmRieTMtPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlBTFRFUiBTWVNURU0gU0VUIHJl cGxpY2F0aW9uX3Nsb3RfeGlkX2FnZSA9IDUwMDsKK10pOworJHN0YW5kYnkzLT5yZWxvYWQ7CisK KyRsb2dzdGFydCA9IC1zICRzdGFuZGJ5My0+bG9nZmlsZTsKKworIyBEbyBzb21lIHdvcmsgdG8g YWR2YW5jZSB4aWRzIG9uIHByaW1hcnkKK2FkdmFuY2VfeGlkcygkcHJpbWFyeSwgJ3Rlc3RfdGJs MycpOworCisjIFdhaXQgZm9yIHN0YW5kYnkgdG8gY2F0Y2ggdXAgd2l0aCB0aGUgYWJvdmUgd29y aworJHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnkzKTsKKworIyBXYWl0IGZvciB0 aGUgcmVwbGljYXRpb24gc2xvdCB0byBiZWNvbWUgaW5hY3RpdmUgYW5kIHRoZW4gaW52YWxpZGF0 ZWQgZHVlIHRvCisjIFhJRCBhZ2UuCit3YWl0X2Zvcl9zbG90X2ludmFsaWRhdGlvbigkc3RhbmRi eTMsICdsc3ViM19zeW5jX3Nsb3QnLCAkbG9nc3RhcnQsIDAsCisJJ3hpZF9hZ2VkJyk7CisKKyMg Tm90ZSB0aGF0IHRoZSByZXBsaWNhdGlvbiBzbG90IG9uIHRoZSBwcmltYXJ5IGlzIHN0aWxsIGFj dGl2ZQorJHJlc3VsdCA9ICRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IENPVU5UKHNsb3RfbmFtZSkgPSAxIEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMgV0hFUkUgc2xv dF9uYW1lID0gJ2xzdWIzX3N5bmNfc2xvdCcgQU5EIGludmFsaWRhdGlvbl9yZWFzb24gSVMgTlVM TDsiCispOworCitpcygkcmVzdWx0LCAndCcsICJjaGVjayBsc3ViM19zeW5jX3Nsb3QgaXMgc3Rp bGwgYWN0aXZlIG9uIHByaW1hcnkiKTsKKworIyBUZXN0Y2FzZSBlbmQ6IEludmFsaWRhdGUgbG9n aWNhbCBzbG90IG9uIHN0YW5kYnkgdGhhdCdzIGJlaW5nIHN5bmNlZCBmcm9tCisjIHRoZSBwcmlt YXJ5IGR1ZSB0byByZXBsaWNhdGlvbl9zbG90X3hpZF9hZ2UgR1VDLgorIyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCiBzdWIgd2FpdF9mb3Jfc2xvdF9pbnZhbGlkYXRpb24KIHsKLQlteSAoJG5vZGUs ICRzbG90X25hbWUsICRvZmZzZXQsICRpbmFjdGl2ZV90aW1lb3V0KSA9IEBfOworCW15ICgkbm9k ZSwgJHNsb3RfbmFtZSwgJG9mZnNldCwgJGluYWN0aXZlX3RpbWVvdXQsICRyZWFzb24pID0gQF87 CiAJbXkgJG5hbWUgPSAkbm9kZS0+bmFtZTsKIAogCSMgV2FpdCBmb3IgdGhlIHJlcGxpY2F0aW9u IHNsb3QgdG8gYmVjb21lIGluYWN0aXZlCkBAIC0yMzEsMTQgKzQ5NiwxNSBAQCBzdWIgd2FpdF9m b3Jfc2xvdF9pbnZhbGlkYXRpb24KIAkjIGZvciB0aGUgc2xvdCB0byBnZXQgaW52YWxpZGF0ZWQu CiAJc2xlZXAoJGluYWN0aXZlX3RpbWVvdXQpOwogCi0JY2hlY2tfZm9yX3Nsb3RfaW52YWxpZGF0 aW9uX2luX3NlcnZlcl9sb2coJG5vZGUsICRzbG90X25hbWUsICRvZmZzZXQpOworCWNoZWNrX2Zv cl9zbG90X2ludmFsaWRhdGlvbl9pbl9zZXJ2ZXJfbG9nKCRub2RlLCAkc2xvdF9uYW1lLCAkb2Zm c2V0LAorCQkkcmVhc29uKTsKIAogCSMgV2FpdCBmb3IgdGhlIGluYWN0aXZlIHJlcGxpY2F0aW9u IHNsb3QgdG8gYmUgaW52YWxpZGF0ZWQKIAkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKIAkJJ3Bv c3RncmVzJywgcXFbCiAJCVNFTEVDVCBDT1VOVChzbG90X25hbWUpID0gMSBGUk9NIHBnX3JlcGxp Y2F0aW9uX3Nsb3RzCiAJCQlXSEVSRSBzbG90X25hbWUgPSAnJHNsb3RfbmFtZScgQU5ECi0JCQlp bnZhbGlkYXRpb25fcmVhc29uID0gJ2luYWN0aXZlX3RpbWVvdXQnOworCQkJaW52YWxpZGF0aW9u X3JlYXNvbiA9ICckcmVhc29uJzsKIAldKQogCSAgb3IgZGllCiAJICAiVGltZWQgb3V0IHdoaWxl IHdhaXRpbmcgZm9yIGluYWN0aXZlIHNsb3QgJHNsb3RfbmFtZSB0byBiZSBpbnZhbGlkYXRlZCBv biBub2RlICRuYW1lIjsKQEAgLTI2MiwxNSArNTI4LDMzIEBAIHN1YiB3YWl0X2Zvcl9zbG90X2lu dmFsaWRhdGlvbgogIyBDaGVjayBmb3IgaW52YWxpZGF0aW9uIG9mIHNsb3QgaW4gc2VydmVyIGxv Zwogc3ViIGNoZWNrX2Zvcl9zbG90X2ludmFsaWRhdGlvbl9pbl9zZXJ2ZXJfbG9nCiB7Ci0JbXkg KCRub2RlLCAkc2xvdF9uYW1lLCAkb2Zmc2V0KSA9IEBfOworCW15ICgkbm9kZSwgJHNsb3RfbmFt ZSwgJG9mZnNldCwgJHJlYXNvbikgPSBAXzsKIAlteSAkbmFtZSA9ICRub2RlLT5uYW1lOwogCW15 ICRpbnZhbGlkYXRlZCA9IDA7CisJbXkgJGlzcmVjb3ZlcnkgPQorCSAgJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2lzX2luX3JlY292ZXJ5KCkiKTsKKworCWNob21wKCRp c3JlY292ZXJ5KTsKIAogCWZvciAobXkgJGkgPSAwOyAkaSA8IDEwICogJFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQ7ICRpKyspCiAJewotCQkkbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7CisJCWlmICgkcmVhc29uIGVxICd4aWRfYWdlZCcg JiYgJGlzcmVjb3ZlcnkgZXEgJ2YnKQorCQl7CisJCQkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJWQUNVVU0iKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNIRUNLUE9JTlQiKTsKKwkJfQorCiAJCWlmICgkbm9kZS0+bG9nX2NvbnRhaW5z KAogCQkJCSJpbnZhbGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBcIiRzbG90X25h bWVcIiIsCisJCQkJJG9mZnNldCkKKwkJCXx8ICRub2RlLT5sb2dfY29udGFpbnMoCisJCQkJIlRo ZSBzbG90J3MgeG1pbiAuKiBoYXMgcmVhY2hlZCB0aGUgYWdlIC4qIHNwZWNpZmllZCBieSBcInJl cGxpY2F0aW9uX3Nsb3RfeGlkX2FnZVwiLiIsCisJCQkJJG9mZnNldCkKKwkJCXx8ICRub2RlLT5s b2dfY29udGFpbnMoCisJCQkJIlRoZSBzbG90J3MgY2F0YWxvZ194bWluIC4qIGhhcyByZWFjaGVk IHRoZSBhZ2UgLiogc3BlY2lmaWVkIGJ5IFwicmVwbGljYXRpb25fc2xvdF94aWRfYWdlXCIuIiwK IAkJCQkkb2Zmc2V0KSkKIAkJewogCQkJJGludmFsaWRhdGVkID0gMTsKQEAgLTI4Myw0ICs1Njcs MjUgQEAgc3ViIGNoZWNrX2Zvcl9zbG90X2ludmFsaWRhdGlvbl9pbl9zZXJ2ZXJfbG9nCiAJKTsK IH0KIAorIyBEbyBzb21lIHdvcmsgZm9yIGFkdmFuY2luZyB4aWRzIG9uIGEgZ2l2ZW4gbm9kZQor c3ViIGFkdmFuY2VfeGlkcworeworCW15ICgkbm9kZSwgJHRhYmxlX25hbWUpID0gQF87CisKKwkk bm9kZS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxcVsKKwkJZG8gXCRcJAorCQliZWdpbgor CQlmb3IgaSBpbiAxMDAwMC4uMTEwMDAgbG9vcAorCQkJLS0gdXNlIGFuIGV4Y2VwdGlvbiBibG9j ayBzbyB0aGF0IGVhY2ggaXRlcmF0aW9uIGVhdHMgYW4gWElECisJCQliZWdpbgorCQkJaW5zZXJ0 IGludG8gJHRhYmxlX25hbWUgdmFsdWVzIChpKTsKKwkJCWV4Y2VwdGlvbgorCQkJd2hlbiBkaXZp c2lvbl9ieV96ZXJvIHRoZW4gbnVsbDsKKwkJCWVuZDsKKwkJZW5kIGxvb3A7CisJCWVuZFwkXCQ7 CisJXSk7Cit9CisKIGRvbmVfdGVzdGluZygpOwotLSAKMi40My4wCgo= --00000000000036aace0620cc345b Content-Type: application/octet-stream; name="v43-0001-Add-inactive_timeout-based-replication-slot-inva.patch" Content-Disposition: attachment; filename="v43-0001-Add-inactive_timeout-based-replication-slot-inva.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m0evlj200 RnJvbSA4YzAzNWJjZjk0ZGI0OWQwOWJiZmIyNzUwMThkZTMyODZlODUyMmQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjkgQXVnIDIwMjQgMDU6MDE6MTggKzAw MDAKU3ViamVjdDogW1BBVENIIHY0MyAxLzJdIEFkZCBpbmFjdGl2ZV90aW1lb3V0IGJhc2VkIHJl cGxpY2F0aW9uIHNsb3QKIGludmFsaWRhdGlvbgoKVGlsbCBub3csIHBvc3RncmVzIGhhcyB0aGUg YWJpbGl0eSB0byBpbnZhbGlkYXRlIGluYWN0aXZlCnJlcGxpY2F0aW9uIHNsb3RzIGJhc2VkIG9u IHRoZSBhbW91bnQgb2YgV0FMIChzZXQgdmlhCm1heF9zbG90X3dhbF9rZWVwX3NpemUgR1VDKSB0 aGF0IHdpbGwgYmUgbmVlZGVkIGZvciB0aGUgc2xvdHMgaW4KY2FzZSB0aGV5IGJlY29tZSBhY3Rp dmUuIEhvd2V2ZXIsIGNob29zaW5nIGEgZGVmYXVsdCB2YWx1ZSBmb3IKbWF4X3Nsb3Rfd2FsX2tl ZXBfc2l6ZSBpcyB0cmlja3kuIEJlY2F1c2UgdGhlIGFtb3VudCBvZiBXQUwgYQpjdXN0b21lciBn ZW5lcmF0ZXMsIGFuZCB0aGVpciBhbGxvY2F0ZWQgc3RvcmFnZSB3aWxsIHZhcnkgZ3JlYXRseQpp biBwcm9kdWN0aW9uLCBtYWtpbmcgaXQgZGlmZmljdWx0IHRvIHBpbiBkb3duIGEgb25lLXNpemUt Zml0cy1hbGwKdmFsdWUuIEl0IGlzIG9mdGVuIGVhc3kgZm9yIGRldmVsb3BlcnMgdG8gc2V0IGEg dGltZW91dCBvZiBzYXkgMQpvciAyIG9yIDMgZGF5cywgYWZ0ZXIgd2hpY2ggdGhlIGluYWN0aXZl IHNsb3RzIGdldCBpbnZhbGlkYXRlZC4KClRvIGFjaGlldmUgdGhlIGFib3ZlLCBwb3N0Z3JlcyBp bnRyb2R1Y2VzIGEgR1VDIGFsbG93aW5nIHVzZXJzCnNldCBpbmFjdGl2ZSB0aW1lb3V0LiBUaGUg cmVwbGljYXRpb24gc2xvdHMgdGhhdCBhcmUgaW5hY3RpdmUKZm9yIGxvbmdlciB0aGFuIHNwZWNp ZmllZCBhbW91bnQgb2YgdGltZSBnZXQgaW52YWxpZGF0ZWQuCgpUaGUgaW52YWxpZGF0aW9uIGNo ZWNrIGhhcHBlbnMgYXQgdmFyaW91cyBsb2NhdGlvbnMgdG8gaGVscCBiZWluZwphcyBsYXRlc3Qg YXMgcG9zc2libGUsIHRoZXNlIGxvY2F0aW9ucyBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6Ci0gV2hl bmV2ZXIgdGhlIHNsb3QgaXMgYWNxdWlyZWQgYW5kIHRoZSBzbG90IGFjcXVpc2l0aW9uIGVycm9y cwpvdXQgaWYgaW52YWxpZGF0ZWQuCi0gRHVyaW5nIGNoZWNrcG9pbnQKCk5vdGUgdGhhdCB0aGlz IG5ldyBpbnZhbGlkYXRpb24gbWVjaGFuaXNtIHdvbid0IGtpY2staW4gZm9yIHRoZQpzbG90cyB0 aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgc3luY2VkIGZyb20gdGhlIHByaW1hcnkgdG8gdGhlCnN0 YW5kYnksIGJlY2F1c2Ugc3VjaCBzeW5jZWQgc2xvdHMgYXJlIHR5cGljYWxseSBjb25zaWRlcmVk IG5vdAphY3RpdmUgKGZvciB0aGVtIHRvIGJlIGxhdGVyIGNvbnNpZGVyZWQgYXMgaW5hY3RpdmUp IGFzIHRoZXkgZG9uJ3QKcGVyZm9ybSBsb2dpY2FsIGRlY29kaW5nIHRvIHByb2R1Y2UgdGhlIGNo YW5nZXMuCgpBdXRob3I6IEJoYXJhdGggUnVwaXJlZGR5ClJldmlld2VkLWJ5OiBCZXJ0cmFuZCBE cm91dm90LCBBbWl0IEthcGlsYQpSZXZpZXdlZC1ieTogQWppbiBDaGVyaWFuLCBTaHZldGEgTWFs aWsKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUxq MkFDVzRhVWUtX3VGUU9qZFdDRU4teFhvTEdobXZSRm5MOFNOd19UWjVuSmUrYXdAbWFpbC5nbWFp bC5jb20KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9D QSUyQlRnbW9aVGJhYUVqU1pVRzFGTDBtenhBZE4zcW1Ya3NPM085X1BaaEV1WFRrVm5SUSU0MG1h aWwuZ21haWwuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3Nh Z2UtaWQvMjAyNDAzMjYwODQxLjVqY3Y3aWhuaWNjeSU0MGFsdmhlcnJlLnBnc3FsCi0tLQogZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDMzICsrCiBkb2Mv c3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwgICAgICAgICAgICAgICAgfCAgIDcgKwogLi4uL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgICAgfCAgIDQgKy0KIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAgICAgICB8IDE4MyArKysrKysrKysrLQog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdGZ1bmNzLmMgICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyAgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9wZ191cGdyYWRlX3N1cHBvcnQuYyAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEyICsKIHNyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9zbG90LmggICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0 L3JlY292ZXJ5L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9y ZWNvdmVyeS90LzA1MF9pbnZhbGlkYXRlX3Nsb3RzLnBsICAgfCAyODYgKysrKysrKysrKysrKysr KysrCiAxMyBmaWxlcyBjaGFuZ2VkLCA1MjMgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTBfaW52YWxpZGF0ZV9z bG90cy5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbAppbmRleCAxMmZlYWM2MDg3Li4xMTMzMDNhNTAxIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s CkBAIC00NTU2LDYgKzQ1NTYsMzkgQEAgcmVzdG9yZV9jb21tYW5kID0gJ2NvcHkgIkM6XFxzZXJ2 ZXJcXGFyY2hpdmVkaXJcXCVmIiAiJXAiJyAgIyBXaW5kb3dzCiAgICAgICA8L2xpc3RpdGVtPgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcmVwbGlj YXRpb24tc2xvdC1pbmFjdGl2ZS10aW1lb3V0IiB4cmVmbGFiZWw9InJlcGxpY2F0aW9uX3Nsb3Rf aW5hY3RpdmVfdGltZW91dCI+CisgICAgICA8dGVybT48dmFybmFtZT5yZXBsaWNhdGlvbl9zbG90 X2luYWN0aXZlX3RpbWVvdXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAg IDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cmVwbGljYXRpb25fc2xvdF9p bmFjdGl2ZV90aW1lb3V0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFy eT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBJbnZhbGlkYXRlcyByZXBsaWNhdGlvbiBzbG90cyB0aGF0 IGFyZSBpbmFjdGl2ZSBmb3IgbG9uZ2VyIHRoYW4KKyAgICAgICAgc3BlY2lmaWVkIGFtb3VudCBv ZiB0aW1lLiBJZiB0aGlzIHZhbHVlIGlzIHNwZWNpZmllZCB3aXRob3V0IHVuaXRzLAorICAgICAg ICBpdCBpcyB0YWtlbiBhcyBzZWNvbmRzLiBBIHZhbHVlIG9mIHplcm8gKHdoaWNoIGlzIGRlZmF1 bHQpIGRpc2FibGVzCisgICAgICAgIHRoZSB0aW1lb3V0IG1lY2hhbmlzbS4gVGhpcyBwYXJhbWV0 ZXIgY2FuIG9ubHkgYmUgc2V0IGluCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5j b25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2VydmVyCisgICAgICAgIGNvbW1hbmQgbGlu ZS4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBpbnZhbGlk YXRpb24gY2hlY2sgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGUgc2xvdCBpcyBhY3F1aXJlZAorICAg ICAgICBmb3IgdXNlIG9yIGR1cmluZyBhIGNoZWNrcG9pbnQuIFRoZSB0aW1lIHNpbmNlIHRoZSBz bG90IGhhcyBiZWNvbWUKKyAgICAgICAgaW5hY3RpdmUgaXMga25vd24gZnJvbSBpdHMKKyAgICAg ICAgPHN0cnVjdGZpZWxkPmluYWN0aXZlX3NpbmNlPC9zdHJ1Y3RmaWVsZD4gdmFsdWUgdXNpbmcg d2hpY2ggdGhlCisgICAgICAgIHRpbWVvdXQgaXMgbWVhc3VyZWQuCisgICAgICAgPC9wYXJhPgor CisgICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhhdCB0aGUgaW5hY3RpdmUgdGltZW91dCBp bnZhbGlkYXRpb24gbWVjaGFuaXNtIGlzIG5vdAorICAgICAgICBhcHBsaWNhYmxlIGZvciBzbG90 cyBvbiB0aGUgc3RhbmRieSB0aGF0IGFyZSBiZWluZyBzeW5jZWQgZnJvbSBhCisgICAgICAgIHBy aW1hcnkgc2VydmVyICh3aG9zZSA8c3RydWN0ZmllbGQ+c3luY2VkPC9zdHJ1Y3RmaWVsZD4gZmll bGQgaXMKKyAgICAgICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4pLgorICAgICAgIDwvcGFyYT4K KyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9Imd1Yy10cmFjay1jb21taXQtdGltZXN0YW1wIiB4cmVmbGFiZWw9InRyYWNrX2Nv bW1pdF90aW1lc3RhbXAiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfY29tbWl0X3RpbWVz dGFtcDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCBiL2RvYy9zcmMvc2dt bC9zeXN0ZW0tdmlld3Muc2dtbAppbmRleCA2MzRhNGMwZmFiLi45ZTAwZjdkMTg0IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3N5 c3RlbS12aWV3cy5zZ21sCkBAIC0yNjE4LDYgKzI2MTgsMTMgQEAgU0VMRUNUICogRlJPTSBwZ19s b2NrcyBwbCBMRUZUIEpPSU4gcGdfcHJlcGFyZWRfeGFjdHMgcHB4CiAgICAgICAgICAgcGVyZm9y bSBsb2dpY2FsIGRlY29kaW5nLiAgSXQgaXMgc2V0IG9ubHkgZm9yIGxvZ2ljYWwgc2xvdHMuCiAg ICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxsaXRlcmFsPmluYWN0aXZlX3RpbWVvdXQ8L2xp dGVyYWw+IG1lYW5zIHRoYXQgdGhlIHNsb3QgaGFzIGJlZW4KKyAgICAgICAgICBpbmFjdGl2ZSBm b3IgdGhlIGR1cmF0aW9uIHNwZWNpZmllZCBieQorICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1 Yy1yZXBsaWNhdGlvbi1zbG90LWluYWN0aXZlLXRpbWVvdXQiLz4gcGFyYW1ldGVyLgorICAgICAg ICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0Pgog ICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKaW5kZXggYjRkZDVjY2U3NS4uNTZmYzFhNDVh OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVu Y3MuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5j CkBAIC0xOTcsNyArMTk3LDcgQEAgcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzX2d1dHMoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgY29uZmlybSwgYm9vbCBiaW4KIAllbHNlCiAJCWVu ZF9vZl93YWwgPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOwogCi0JUmVwbGljYXRpb25TbG90 QWNxdWlyZShOYW1lU3RyKCpuYW1lKSwgdHJ1ZSk7CisJUmVwbGljYXRpb25TbG90QWNxdWlyZShO YW1lU3RyKCpuYW1lKSwgdHJ1ZSwgdHJ1ZSk7CiAKIAlQR19UUlkoKTsKIAl7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKaW5kZXggNzZkZTAxNzYzNS4uNzU4ZjAz NThiMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3lu Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYwpAQCAt NDQ4LDcgKzQ0OCw3IEBAIGRyb3BfbG9jYWxfb2Jzb2xldGVfc2xvdHMoTGlzdCAqcmVtb3RlX3Ns b3RfbGlzdCkKIAogCQkJaWYgKHN5bmNlZF9zbG90KQogCQkJewotCQkJCVJlcGxpY2F0aW9uU2xv dEFjcXVpcmUoTmFtZVN0cihsb2NhbF9zbG90LT5kYXRhLm5hbWUpLCB0cnVlKTsKKwkJCQlSZXBs aWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIobG9jYWxfc2xvdC0+ZGF0YS5uYW1lKSwgdHJ1ZSwg ZmFsc2UpOwogCQkJCVJlcGxpY2F0aW9uU2xvdERyb3BBY3F1aXJlZCgpOwogCQkJfQogCkBAIC02 NjcsNyArNjY3LDcgQEAgc3luY2hyb25pemVfb25lX3Nsb3QoUmVtb3RlU2xvdCAqcmVtb3RlX3Ns b3QsIE9pZCByZW1vdGVfZGJpZCkKIAkJICogcHJlLWNoZWNrIHRvIGVuc3VyZSB0aGF0IGF0IGxl YXN0IG9uZSBvZiB0aGUgc2xvdCBwcm9wZXJ0aWVzIGlzCiAJCSAqIGNoYW5nZWQgYmVmb3JlIGFj cXVpcmluZyB0aGUgc2xvdC4KIAkJICovCi0JCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUocmVtb3Rl X3Nsb3QtPm5hbWUsIHRydWUpOworCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKHJlbW90ZV9zbG90 LT5uYW1lLCB0cnVlLCBmYWxzZSk7CiAKIAkJQXNzZXJ0KHNsb3QgPT0gTXlSZXBsaWNhdGlvblNs b3QpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5kZXggYzI5MDMzOWFmNS4uNzAwOTM1MDBmYSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwpAQCAtMTA3LDEwICsxMDcsMTEgQEAgY29uc3QgY2hhciAq Y29uc3QgU2xvdEludmFsaWRhdGlvbkNhdXNlc1tdID0gewogCVtSU19JTlZBTF9XQUxfUkVNT1ZF RF0gPSAid2FsX3JlbW92ZWQiLAogCVtSU19JTlZBTF9IT1JJWk9OXSA9ICJyb3dzX3JlbW92ZWQi LAogCVtSU19JTlZBTF9XQUxfTEVWRUxdID0gIndhbF9sZXZlbF9pbnN1ZmZpY2llbnQiLAorCVtS U19JTlZBTF9JTkFDVElWRV9USU1FT1VUXSA9ICJpbmFjdGl2ZV90aW1lb3V0IiwKIH07CiAKIC8q IE1heGltdW0gbnVtYmVyIG9mIGludmFsaWRhdGlvbiBjYXVzZXMgKi8KLSNkZWZpbmUJUlNfSU5W QUxfTUFYX0NBVVNFUyBSU19JTlZBTF9XQUxfTEVWRUwKKyNkZWZpbmUJUlNfSU5WQUxfTUFYX0NB VVNFUyBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUCiAKIFN0YXRpY0Fzc2VydERlY2wobGVuZ3Ro b2YoU2xvdEludmFsaWRhdGlvbkNhdXNlcykgPT0gKFJTX0lOVkFMX01BWF9DQVVTRVMgKyAxKSwK IAkJCQkgImFycmF5IGxlbmd0aCBtaXNtYXRjaCIpOwpAQCAtMTQwLDYgKzE0MSw3IEBAIFJlcGxp Y2F0aW9uU2xvdCAqTXlSZXBsaWNhdGlvblNsb3QgPSBOVUxMOwogLyogR1VDIHZhcmlhYmxlcyAq LwogaW50CQkJbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gMTA7IC8qIHRoZSBtYXhpbXVtIG51bWJl ciBvZiByZXBsaWNhdGlvbgogCQkJCQkJCQkJCSAqIHNsb3RzICovCitpbnQJCQlyZXBsaWNhdGlv bl9zbG90X2luYWN0aXZlX3RpbWVvdXQgPSAwOwogCiAvKgogICogVGhpcyBHVUMgbGlzdHMgc3Ry ZWFtaW5nIHJlcGxpY2F0aW9uIHN0YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMgdGhhdApAQCAtMTU5 LDYgKzE2MSwxMyBAQCBzdGF0aWMgWExvZ1JlY1B0ciBzc19vbGRlc3RfZmx1c2hfbHNuID0gSW52 YWxpZFhMb2dSZWNQdHI7CiBzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3RTaG1lbUV4aXQoaW50 IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3REcm9wUHRyKFJl cGxpY2F0aW9uU2xvdCAqc2xvdCk7CiAKK3N0YXRpYyBib29sIEludmFsaWRhdGVQb3NzaWJseU9i c29sZXRlU2xvdChSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKKwkJCQkJ CQkJCQkgICBSZXBsaWNhdGlvblNsb3QgKnMsCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBvbGRl c3RMU04sCisJCQkJCQkJCQkJICAgT2lkIGRib2lkLAorCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9u SWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCQkJICAgYm9vbCAqaW52YWxpZGF0 ZWQpOworCiAvKiBpbnRlcm5hbCBwZXJzaXN0ZW5jeSBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lk IFJlc3RvcmVTbG90RnJvbURpc2soY29uc3QgY2hhciAqbmFtZSk7CiBzdGF0aWMgdm9pZCBDcmVh dGVTbG90T25EaXNrKFJlcGxpY2F0aW9uU2xvdCAqc2xvdCk7CkBAIC01MzUsMTIgKzU0NCwxNyBA QCBSZXBsaWNhdGlvblNsb3ROYW1lKGludCBpbmRleCwgTmFtZSBuYW1lKQogICoKICAqIEFuIGVy cm9yIGlzIHJhaXNlZCBpZiBub3dhaXQgaXMgdHJ1ZSBhbmQgdGhlIHNsb3QgaXMgY3VycmVudGx5 IGluIHVzZS4gSWYKICAqIG5vd2FpdCBpcyBmYWxzZSwgd2Ugc2xlZXAgdW50aWwgdGhlIHNsb3Qg aXMgcmVsZWFzZWQgYnkgdGhlIG93bmluZyBwcm9jZXNzLgorICoKKyAqIEFuIGVycm9yIGlzIHJh aXNlZCBpZiBjaGVja19mb3JfaW52YWxpZGF0aW9uIGlzIHRydWUgYW5kIHRoZSBzbG90IGdldHMK KyAqIGludmFsaWRhdGVkIG5vdyBvciBoYXMgYmVlbiBpbnZhbGlkYXRlZCBwcmV2aW91c2x5Lgog ICovCiB2b2lkCi1SZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wg bm93YWl0KQorUmVwbGljYXRpb25TbG90QWNxdWlyZShjb25zdCBjaGFyICpuYW1lLCBib29sIG5v d2FpdCwKKwkJCQkJICAgYm9vbCBjaGVja19mb3JfaW52YWxpZGF0aW9uKQogewogCVJlcGxpY2F0 aW9uU2xvdCAqczsKIAlpbnQJCQlhY3RpdmVfcGlkOworCWJvb2wJCXJlbGVhc2VkX2xvY2sgPSBm YWxzZTsKIAogCUFzc2VydChuYW1lICE9IE5VTEwpOwogCkBAIC02MTUsNiArNjI5LDU3IEBAIHJl dHJ5OgogCS8qIFdlIG1hZGUgdGhpcyBzbG90IGFjdGl2ZSwgc28gaXQncyBvdXJzIG5vdy4gKi8K IAlNeVJlcGxpY2F0aW9uU2xvdCA9IHM7CiAKKwlMV0xvY2tBY3F1aXJlKFJlcGxpY2F0aW9uU2xv dENvbnRyb2xMb2NrLCBMV19TSEFSRUQpOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgYWNxdWly ZWQgc2xvdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZC4gRXJyb3Igb3V0IGlmIGl0CisJICogZ2V0 cyBpbnZhbGlkYXRlZCBub3cgb3IgaGFzIGJlZW4gaW52YWxpZGF0ZWQgcHJldmlvdXNseSwgYmVj YXVzZQorCSAqIHRoZXJlJ3Mgbm8gdXNlIGluIGFjcXVpcmluZyB0aGUgaW52YWxpZGF0ZWQgc2xv dC4KKwkgKgorCSAqIFhYWDogQ3VycmVudGx5IHdlIGNoZWNrIGZvciBpbmFjdGl2ZV90aW1lb3V0 IGludmFsaWRhdGlvbiBoZXJlLiBXZQorCSAqIG1pZ2h0IG5lZWQgdG8gY2hlY2sgZm9yIG90aGVy IGludmFsaWRhdGlvbnMgdG9vLgorCSAqLworCWlmIChjaGVja19mb3JfaW52YWxpZGF0aW9uKQor CXsKKwkJYm9vbAkJaW52YWxpZGF0ZWQgPSBmYWxzZTsKKworCQlyZWxlYXNlZF9sb2NrID0gSW52 YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQsCisJ CQkJCQkJCQkJCQkJICAgcywgMCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJCQkgICBJbnZhbGlk VHJhbnNhY3Rpb25JZCwKKwkJCQkJCQkJCQkJCQkgICAmaW52YWxpZGF0ZWQpOworCisJCS8qCisJ CSAqIElmIHRoZSBzbG90IGhhcyBiZWVuIGludmFsaWRhdGVkLCByZWNhbGN1bGF0ZSB0aGUgcmVz b3VyY2UgbGltaXRzLgorCQkgKi8KKwkJaWYgKGludmFsaWRhdGVkKQorCQl7CisJCQlSZXBsaWNh dGlvblNsb3RzQ29tcHV0ZVJlcXVpcmVkWG1pbihmYWxzZSk7CisJCQlSZXBsaWNhdGlvblNsb3Rz Q29tcHV0ZVJlcXVpcmVkTFNOKCk7CisJCX0KKworCQlpZiAocy0+ZGF0YS5pbnZhbGlkYXRlZCA9 PSBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUKQorCQl7CisJCQkvKgorCQkJICogUmVsZWFzZSB0 aGUgbG9jayBpZiBpdCBoYXNuJ3QgYmVlbiBhbHJlYWR5LCB0byBlbnN1cmUgc21vb3RoCisJCQkg KiBjbGVhbnVwIG9uIGVycm9yLgorCQkJICovCisJCQlpZiAoIXJlbGVhc2VkX2xvY2spCisJCQkJ TFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jayk7CisKKwkJCUFzc2VydChz LT5pbmFjdGl2ZV9zaW5jZSA+IDApOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2co ImNhbiBubyBsb25nZXIgZ2V0IGNoYW5nZXMgZnJvbSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiIs CisJCQkJCQkJTmFtZVN0cihzLT5kYXRhLm5hbWUpKSwKKwkJCQkJIGVycmRldGFpbCgiVGhpcyBz bG90IGhhcyBiZWVuIGludmFsaWRhdGVkIGJlY2F1c2UgaXQgd2FzIGluYWN0aXZlIHNpbmNlICVz IGZvciBtb3JlIHRoYW4gJWQgc2Vjb25kcyBzcGVjaWZpZWQgYnkgXCJyZXBsaWNhdGlvbl9zbG90 X2luYWN0aXZlX3RpbWVvdXRcIi4iLAorCQkJCQkJCSAgIHRpbWVzdGFtcHR6X3RvX3N0cihzLT5p bmFjdGl2ZV9zaW5jZSksCisJCQkJCQkJICAgcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1l b3V0KSkpOworCQl9CisJfQorCisJaWYgKCFyZWxlYXNlZF9sb2NrKQorCQlMV0xvY2tSZWxlYXNl KFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrKTsKKwogCS8qCiAJICogVGhlIGNhbGwgdG8gcGdz dGF0X2FjcXVpcmVfcmVwbHNsb3QoKSBwcm90ZWN0cyBhZ2FpbnN0IHN0YXRzIGZvciBhCiAJICog ZGlmZmVyZW50IHNsb3QsIGZyb20gYmVmb3JlIGEgcmVzdGFydCBvciBzdWNoLCBiZWluZyBwcmVz ZW50IGR1cmluZwpAQCAtNzg1LDcgKzg1MCw3IEBAIFJlcGxpY2F0aW9uU2xvdERyb3AoY29uc3Qg Y2hhciAqbmFtZSwgYm9vbCBub3dhaXQpCiB7CiAJQXNzZXJ0KE15UmVwbGljYXRpb25TbG90ID09 IE5VTEwpOwogCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShuYW1lLCBub3dhaXQpOworCVJlcGxp Y2F0aW9uU2xvdEFjcXVpcmUobmFtZSwgbm93YWl0LCBmYWxzZSk7CiAKIAkvKgogCSAqIERvIG5v dCBhbGxvdyB1c2VycyB0byBkcm9wIHRoZSBzbG90cyB3aGljaCBhcmUgY3VycmVudGx5IGJlaW5n IHN5bmNlZApAQCAtODEyLDcgKzg3Nyw3IEBAIFJlcGxpY2F0aW9uU2xvdEFsdGVyKGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IGJvb2wgKmZhaWxvdmVyLAogCUFzc2VydChNeVJlcGxpY2F0aW9uU2xv dCA9PSBOVUxMKTsKIAlBc3NlcnQoZmFpbG92ZXIgfHwgdHdvX3BoYXNlKTsKIAotCVJlcGxpY2F0 aW9uU2xvdEFjcXVpcmUobmFtZSwgZmFsc2UpOworCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUobmFt ZSwgZmFsc2UsIHRydWUpOwogCiAJaWYgKFNsb3RJc1BoeXNpY2FsKE15UmVwbGljYXRpb25TbG90 KSkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTE1MDEsNyArMTU2Niw4IEBAIFJlcG9ydFNsb3RJbnZh bGlkYXRpb24oUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQkJCSAg IE5hbWVEYXRhIHNsb3RuYW1lLAogCQkJCQkgICBYTG9nUmVjUHRyIHJlc3RhcnRfbHNuLAogCQkJ CQkgICBYTG9nUmVjUHRyIG9sZGVzdExTTiwKLQkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hv dENvbmZsaWN0SG9yaXpvbikKKwkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0 SG9yaXpvbiwKKwkJCQkJICAgVGltZXN0YW1wVHogaW5hY3RpdmVfc2luY2UpCiB7CiAJU3RyaW5n SW5mb0RhdGEgZXJyX2RldGFpbDsKIAlib29sCQloaW50ID0gZmFsc2U7CkBAIC0xNTMxLDYgKzE1 OTcsMTMgQEAgUmVwb3J0U2xvdEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRp b25DYXVzZSBjYXVzZSwKIAkJY2FzZSBSU19JTlZBTF9XQUxfTEVWRUw6CiAJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZlcnJfZGV0YWlsLCBfKCJMb2dpY2FsIGRlY29kaW5nIG9uIHN0YW5kYnkg cmVxdWlyZXMgXCJ3YWxfbGV2ZWxcIiA+PSBcImxvZ2ljYWxcIiBvbiB0aGUgcHJpbWFyeSBzZXJ2 ZXIuIikpOwogCQkJYnJlYWs7CisJCWNhc2UgUlNfSU5WQUxfSU5BQ1RJVkVfVElNRU9VVDoKKwkJ CUFzc2VydChpbmFjdGl2ZV9zaW5jZSA+IDApOworCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJyX2Rl dGFpbCwKKwkJCQkJCQkgXygiVGhlIHNsb3QgaGFzIGJlZW4gaW5hY3RpdmUgc2luY2UgJXMgZm9y IG1vcmUgdGhhbiAlZCBzZWNvbmRzIHNwZWNpZmllZCBieSBcInJlcGxpY2F0aW9uX3Nsb3RfaW5h Y3RpdmVfdGltZW91dFwiLiIpLAorCQkJCQkJCSB0aW1lc3RhbXB0el90b19zdHIoaW5hY3RpdmVf c2luY2UpLAorCQkJCQkJCSByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQpOworCQkJ YnJlYWs7CiAJCWNhc2UgUlNfSU5WQUxfTk9ORToKIAkJCXBnX3VucmVhY2hhYmxlKCk7CiAJfQpA QCAtMTU3NCw2ICsxNjQ3LDcgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJlcGxp Y2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCVRyYW5zYWN0aW9uSWQgaW5pdGlh bF9jYXRhbG9nX2VmZmVjdGl2ZV94bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJWExvZ1Jl Y1B0cglpbml0aWFsX3Jlc3RhcnRfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJUmVwbGljYXRp b25TbG90SW52YWxpZGF0aW9uQ2F1c2UgaW52YWxpZGF0aW9uX2NhdXNlX3ByZXYgUEdfVVNFRF9G T1JfQVNTRVJUU19PTkxZID0gUlNfSU5WQUxfTk9ORTsKKwlUaW1lc3RhbXBUeiBpbmFjdGl2ZV9z aW5jZSA9IDA7CiAKIAlmb3IgKDs7KQogCXsKQEAgLTE1ODEsNiArMTY1NSw3IEBAIEludmFsaWRh dGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBj YXVzZSwKIAkJTmFtZURhdGEJc2xvdG5hbWU7CiAJCWludAkJCWFjdGl2ZV9waWQgPSAwOwogCQlS ZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBpbnZhbGlkYXRpb25fY2F1c2UgPSBSU19J TlZBTF9OT05FOworCQlUaW1lc3RhbXBUeiBub3cgPSAwOwogCiAJCUFzc2VydChMV0xvY2tIZWxk QnlNZUluTW9kZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hBUkVEKSk7CiAKQEAg LTE1OTEsNiArMTY2NiwxOCBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QoUmVwbGlj YXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQlicmVhazsKIAkJfQogCisJCWlm IChjYXVzZSA9PSBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUICYmCisJCQkocmVwbGljYXRpb25f c2xvdF9pbmFjdGl2ZV90aW1lb3V0ID4gMCAmJgorCQkJIHMtPmluYWN0aXZlX3NpbmNlID4gMCAm JgorCQkJICEoUmVjb3ZlcnlJblByb2dyZXNzKCkgJiYgcy0+ZGF0YS5zeW5jZWQpKSkKKwkJewor CQkJLyoKKwkJCSAqIFdlIGdldCB0aGUgY3VycmVudCB0aW1lIGJlZm9yZWhhbmQgdG8gYXZvaWQg c3lzdGVtIGNhbGwgd2hpbGUKKwkJCSAqIGhvbGRpbmcgdGhlIHNwaW5sb2NrLgorCQkJICovCisJ CQlub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJCX0KKwogCQkvKgogCQkgKiBDaGVjayBp ZiB0aGUgc2xvdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZC4gSWYgaXQgbmVlZHMgdG8gYmUKIAkJ ICogaW52YWxpZGF0ZWQsIGFuZCBpcyBub3QgY3VycmVudGx5IGFjcXVpcmVkLCBhY3F1aXJlIGl0 IGFuZCBtYXJrIGl0CkBAIC0xNjQ0LDYgKzE3MzEsMzkgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jz b2xldGVTbG90KFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJCQlp ZiAoU2xvdElzTG9naWNhbChzKSkKIAkJCQkJCWludmFsaWRhdGlvbl9jYXVzZSA9IGNhdXNlOwog CQkJCQlicmVhazsKKwkJCQljYXNlIFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQ6CisKKwkJCQkJ LyoKKwkJCQkJICogUXVpY2sgZXhpdCBpZiBpbmFjdGl2ZSB0aW1lb3V0IGludmFsaWRhdGlvbiBt ZWNoYW5pc20KKwkJCQkJICogaXMgZGlzYWJsZWQgb3Igc2xvdCBpcyBjdXJyZW50bHkgYmVpbmcg dXNlZCBvciB0aGUgc2xvdAorCQkJCQkgKiBvbiBzdGFuZGJ5IGlzIGN1cnJlbnRseSBiZWluZyBz eW5jZWQgZnJvbSB0aGUgcHJpbWFyeS4KKwkJCQkJICoKKwkJCQkJICogTm90ZSB0aGF0IHdlIGRv bid0IGludmFsaWRhdGUgc3luY2VkIHNsb3RzIGJlY2F1c2UsCisJCQkJCSAqIHRoZXkgYXJlIHR5 cGljYWxseSBjb25zaWRlcmVkIG5vdCBhY3RpdmUgYXMgdGhleSBkb24ndAorCQkJCQkgKiBwZXJm b3JtIGxvZ2ljYWwgZGVjb2RpbmcgdG8gcHJvZHVjZSB0aGUgY2hhbmdlcy4KKwkJCQkJICovCisJ CQkJCWlmIChyZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgPT0gMCB8fAorCQkJCQkJ cy0+aW5hY3RpdmVfc2luY2UgPT0gMCB8fAorCQkJCQkJKFJlY292ZXJ5SW5Qcm9ncmVzcygpICYm IHMtPmRhdGEuc3luY2VkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCS8qCisJCQkJCSAqIENoZWNr IGlmIHRoZSBzbG90IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGR1ZSB0bworCQkJCQkgKiByZXBs aWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgR1VDLgorCQkJCQkgKi8KKwkJCQkJaWYgKFRp bWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHMtPmluYWN0aXZlX3NpbmNlLCBub3csCisJCQkJCQkJ CQkJCQkgICByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgKiAxMDAwKSkKKwkJCQkJ eworCQkJCQkJaW52YWxpZGF0aW9uX2NhdXNlID0gY2F1c2U7CisJCQkJCQlpbmFjdGl2ZV9zaW5j ZSA9IHMtPmluYWN0aXZlX3NpbmNlOworCisJCQkJCQkvKgorCQkJCQkJICogSW52YWxpZGF0aW9u IGR1ZSB0byBpbmFjdGl2ZSB0aW1lb3V0IGltcGxpZXMgdGhhdAorCQkJCQkJICogbm8gb25lIGlz IHVzaW5nIHRoZSBzbG90LgorCQkJCQkJICovCisJCQkJCQlBc3NlcnQocy0+YWN0aXZlX3BpZCA9 PSAwKTsKKwkJCQkJfQorCQkJCQlicmVhazsKIAkJCQljYXNlIFJTX0lOVkFMX05PTkU6CiAJCQkJ CXBnX3VucmVhY2hhYmxlKCk7CiAJCQl9CkBAIC0xNjY5LDExICsxNzg5LDE0IEBAIEludmFsaWRh dGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBj YXVzZSwKIAkJYWN0aXZlX3BpZCA9IHMtPmFjdGl2ZV9waWQ7CiAKIAkJLyoKLQkJICogSWYgdGhl IHNsb3QgY2FuIGJlIGFjcXVpcmVkLCBkbyBzbyBhbmQgbWFyayBpdCBpbnZhbGlkYXRlZAotCQkg KiBpbW1lZGlhdGVseS4gIE90aGVyd2lzZSB3ZSdsbCBzaWduYWwgdGhlIG93bmluZyBwcm9jZXNz LCBiZWxvdywgYW5kCi0JCSAqIHJldHJ5LgorCQkgKiBJZiB0aGUgc2xvdCBjYW4gYmUgYWNxdWly ZWQsIGRvIHNvIG9yIGlmIHRoZSBzbG90IGlzIGFscmVhZHkgb3VycywKKwkJICogdGhlbiBtYXJr IGl0IGludmFsaWRhdGVkLiAgT3RoZXJ3aXNlIHdlJ2xsIHNpZ25hbCB0aGUgb3duaW5nCisJCSAq IHByb2Nlc3MsIGJlbG93LCBhbmQgcmV0cnkuCiAJCSAqLwotCQlpZiAoYWN0aXZlX3BpZCA9PSAw KQorCQlpZiAoYWN0aXZlX3BpZCA9PSAwIHx8CisJCQkoTXlSZXBsaWNhdGlvblNsb3QgIT0gTlVM TCAmJgorCQkJIE15UmVwbGljYXRpb25TbG90ID09IHMgJiYKKwkJCSBhY3RpdmVfcGlkID09IE15 UHJvY1BpZCkpCiAJCXsKIAkJCU15UmVwbGljYXRpb25TbG90ID0gczsKIAkJCXMtPmFjdGl2ZV9w aWQgPSBNeVByb2NQaWQ7CkBAIC0xNzI4LDcgKzE4NTEsOCBAQCBJbnZhbGlkYXRlUG9zc2libHlP YnNvbGV0ZVNsb3QoUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQl7 CiAJCQkJUmVwb3J0U2xvdEludmFsaWRhdGlvbihpbnZhbGlkYXRpb25fY2F1c2UsIHRydWUsIGFj dGl2ZV9waWQsCiAJCQkJCQkJCQkgICBzbG90bmFtZSwgcmVzdGFydF9sc24sCi0JCQkJCQkJCQkg ICBvbGRlc3RMU04sIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uKTsKKwkJCQkJCQkJCSAgIG9sZGVz dExTTiwgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCQkgICBpbmFjdGl2ZV9zaW5j ZSk7CiAKIAkJCQlpZiAoTXlCYWNrZW5kVHlwZSA9PSBCX1NUQVJUVVApCiAJCQkJCSh2b2lkKSBT ZW5kUHJvY1NpZ25hbChhY3RpdmVfcGlkLApAQCAtMTc3NCw3ICsxODk4LDggQEAgSW52YWxpZGF0 ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNh dXNlLAogCiAJCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwgZmFs c2UsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwKLQkJCQkJ CQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbik7CisJCQkJCQkJCSAgIG9s ZGVzdExTTiwgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCSAgIGluYWN0aXZlX3Np bmNlKTsKIAogCQkJLyogZG9uZSB3aXRoIHRoaXMgc2xvdCBmb3Igbm93ICovCiAJCQlicmVhazsK QEAgLTE3OTcsNiArMTkyMiw3IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBs aWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKICAqIC0gUlNfSU5WQUxfSE9SSVpP TjogcmVxdWlyZXMgYSBzbmFwc2hvdCA8PSB0aGUgZ2l2ZW4gaG9yaXpvbiBpbiB0aGUgZ2l2ZW4K ICAqICAgZGI7IGRib2lkIG1heSBiZSBJbnZhbGlkT2lkIGZvciBzaGFyZWQgcmVsYXRpb25zCiAg KiAtIFJTX0lOVkFMX1dBTF9MRVZFTDogaXMgbG9naWNhbAorICogLSBSU19JTlZBTF9JTkFDVElW RV9USU1FT1VUOiBpbmFjdGl2ZSB0aW1lb3V0IG9jY3VycwogICoKICAqIE5CIC0gdGhpcyBydW5z IGFzIHBhcnQgb2YgY2hlY2twb2ludCwgc28gYXZvaWQgcmFpc2luZyBlcnJvcnMgaWYgcG9zc2li bGUuCiAgKi8KQEAgLTE4NDksNyArMTk3NSw4IEBAIHJlc3RhcnQ6CiB9CiAKIC8qCi0gKiBGbHVz aCBhbGwgcmVwbGljYXRpb24gc2xvdHMgdG8gZGlzay4KKyAqIEZsdXNoIGFsbCByZXBsaWNhdGlv biBzbG90cyB0byBkaXNrLiBBbHNvLCBpbnZhbGlkYXRlIHNsb3RzIGR1cmluZworICogbm9uLXNo dXRkb3duIGNoZWNrcG9pbnQuCiAgKgogICogSXQgaXMgY29udmVuaWVudCB0byBmbHVzaCBkaXJ0 eSByZXBsaWNhdGlvbiBzbG90cyBhdCB0aGUgdGltZSBvZiBjaGVja3BvaW50LgogICogQWRkaXRp b25hbGx5LCBpbiBjYXNlIG9mIGEgc2h1dGRvd24gY2hlY2twb2ludCwgd2UgYWxzbyBpZGVudGlm eSB0aGUgc2xvdHMKQEAgLTE5MDcsNiArMjAzNCwzOCBAQCBDaGVja1BvaW50UmVwbGljYXRpb25T bG90cyhib29sIGlzX3NodXRkb3duKQogCQlTYXZlU2xvdFRvUGF0aChzLCBwYXRoLCBMT0cpOwog CX0KIAlMV0xvY2tSZWxlYXNlKFJlcGxpY2F0aW9uU2xvdEFsbG9jYXRpb25Mb2NrKTsKKworCWlm ICghaXNfc2h1dGRvd24pCisJeworCQllbG9nKERFQlVHMSwgInBlcmZvcm1pbmcgcmVwbGljYXRp b24gc2xvdCBpbnZhbGlkYXRpb24gY2hlY2tzIik7CisKKwkJLyoKKwkJICogTkI6IFdlIHdpbGwg bWFrZSBhbm90aGVyIHBhc3Mgb3ZlciByZXBsaWNhdGlvbiBzbG90cyBmb3IKKwkJICogaW52YWxp ZGF0aW9uIGNoZWNrcyB0byBrZWVwIHRoZSBjb2RlIHNpbXBsZS4gVGVzdGluZyBzaG93cyB0aGF0 CisJCSAqIHRoZXJlIGlzIG5vIG5vdGljZWFibGUgb3ZlcmhlYWQgKHdoZW4gY29tcGFyZWQgd2l0 aCB3YWxfcmVtb3ZlZAorCQkgKiBpbnZhbGlkYXRpb24pIGV2ZW4gaWYgd2Ugd2VyZSB0byBkbyBp bmFjdGl2ZV90aW1lb3V0IGludmFsaWRhdGlvbgorCQkgKiBvZiB0aG91c2FuZHMgb2YgcmVwbGlj YXRpb24gc2xvdHMgaGVyZS4gSWYgaXQgaXMgZXZlciBwcm92ZW4gdGhhdAorCQkgKiB0aGlzIGFz c3VtcHRpb24gaXMgd3JvbmcsIHdlIHdpbGwgaGF2ZSB0byBwZXJmb3JtIHRoZSBpbnZhbGlkYXRp b24KKwkJICogY2hlY2tzIGluIHRoZSBhYm92ZSBmb3IgbG9vcCB3aXRoIHRoZSBmb2xsb3dpbmcg Y2hhbmdlczoKKwkJICoKKwkJICogLSBBY3F1aXJlIENvbnRyb2xMb2NrIGxvY2sgb25jZSBiZWZv cmUgdGhlIGxvb3AuCisJCSAqCisJCSAqIC0gQ2FsbCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0 ZVNsb3QgZm9yIGVhY2ggc2xvdC4KKwkJICoKKwkJICogLSBIYW5kbGUgdGhlIGNhc2VzIGluIHdo aWNoIENvbnRyb2xMb2NrIGdldHMgcmVsZWFzZWQganVzdCBsaWtlCisJCSAqIEludmFsaWRhdGVP YnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMgZG9lcy4KKwkJICoKKwkJICogLSBBdm9pZCBzYXZpbmcg c2xvdCBpbmZvIHRvIGRpc2sgdHdvIHRpbWVzIGZvciBlYWNoIGludmFsaWRhdGVkCisJCSAqIHNs b3QuCisJCSAqCisJCSAqIFhYWDogU2hvdWxkIHdlIG1vdmUgaW5hY3RpdmVfdGltZW91dCBpbmF2 YWxpZGF0aW9uIGNoZWNrIGNsb3NlciB0bworCQkgKiB3YWxfcmVtb3ZlZCBpbiBDcmVhdGVDaGVj a1BvaW50IGFuZCBDcmVhdGVSZXN0YXJ0UG9pbnQ/CisJCSAqLworCQlJbnZhbGlkYXRlT2Jzb2xl dGVSZXBsaWNhdGlvblNsb3RzKFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQsCisJCQkJCQkJCQkJ ICAgMCwKKwkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCSAgIEludmFsaWRUcmFu c2FjdGlvbklkKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9zbG90ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5jcy5jCmlu ZGV4IGM3YmZiYjE1ZTAuLmIxYjdiMDc1YmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Nsb3RmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5j cy5jCkBAIC01NDAsNyArNTQwLDcgQEAgcGdfcmVwbGljYXRpb25fc2xvdF9hZHZhbmNlKFBHX0ZV TkNUSU9OX0FSR1MpCiAJCW1vdmV0byA9IE1pbihtb3ZldG8sIEdldFhMb2dSZXBsYXlSZWNQdHIo TlVMTCkpOwogCiAJLyogQWNxdWlyZSB0aGUgc2xvdCBzbyB3ZSAib3duIiBpdCAqLwotCVJlcGxp Y2F0aW9uU2xvdEFjcXVpcmUoTmFtZVN0cigqc2xvdG5hbWUpLCB0cnVlKTsKKwlSZXBsaWNhdGlv blNsb3RBY3F1aXJlKE5hbWVTdHIoKnNsb3RuYW1lKSwgdHJ1ZSwgdHJ1ZSk7CiAKIAkvKiBBIHNs b3Qgd2hvc2UgcmVzdGFydF9sc24gaGFzIG5ldmVyIGJlZW4gcmVzZXJ2ZWQgY2Fubm90IGJlIGFk dmFuY2VkICovCiAJaWYgKFhMb2dSZWNQdHJJc0ludmFsaWQoTXlSZXBsaWNhdGlvblNsb3QtPmRh dGEucmVzdGFydF9sc24pKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fs c2VuZGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwppbmRleCBjNWYx MDA5ZjM3Li42MWEwZTM4NzE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpAQCAt ODQ0LDcgKzg0NCw3IEBAIFN0YXJ0UmVwbGljYXRpb24oU3RhcnRSZXBsaWNhdGlvbkNtZCAqY21k KQogCiAJaWYgKGNtZC0+c2xvdG5hbWUpCiAJewotCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNt ZC0+c2xvdG5hbWUsIHRydWUpOworCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNtZC0+c2xvdG5h bWUsIHRydWUsIHRydWUpOwogCQlpZiAoU2xvdElzTG9naWNhbChNeVJlcGxpY2F0aW9uU2xvdCkp CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5f UFJFUkVRVUlTSVRFX1NUQVRFKSwKQEAgLTE0NjIsNyArMTQ2Miw3IEBAIFN0YXJ0TG9naWNhbFJl cGxpY2F0aW9uKFN0YXJ0UmVwbGljYXRpb25DbWQgKmNtZCkKIAogCUFzc2VydCghTXlSZXBsaWNh dGlvblNsb3QpOwogCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShjbWQtPnNsb3RuYW1lLCB0cnVl KTsKKwlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNtZC0+c2xvdG5hbWUsIHRydWUsIHRydWUpOwog CiAJLyoKIAkgKiBGb3JjZSBhIGRpc2Nvbm5lY3QsIHNvIHRoYXQgdGhlIGRlY29kaW5nIGNvZGUg ZG9lc24ndCBuZWVkIHRvIGNhcmUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z191cGdyYWRlX3N1cHBvcnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ191cGdyYWRlX3N1 cHBvcnQuYwppbmRleCBjNTRiMDhmZTE4Li44Mjk1NmQ1OGQzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvcGdfdXBncmFkZV9zdXBwb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3BnX3VwZ3JhZGVfc3VwcG9ydC5jCkBAIC0yOTksNyArMjk5LDcgQEAgYmluYXJ5X3Vw Z3JhZGVfbG9naWNhbF9zbG90X2hhc19jYXVnaHRfdXAoUEdfRlVOQ1RJT05fQVJHUykKIAlzbG90 X25hbWUgPSBQR19HRVRBUkdfTkFNRSgwKTsKIAogCS8qIEFjcXVpcmUgdGhlIGdpdmVuIHNsb3Qg Ki8KLQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKnNsb3RfbmFtZSksIHRydWUpOwor CVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoTmFtZVN0cigqc2xvdF9uYW1lKSwgdHJ1ZSwgZmFsc2Up OwogCiAJQXNzZXJ0KFNsb3RJc0xvZ2ljYWwoTXlSZXBsaWNhdGlvblNsb3QpKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBhZjIyN2IxZjI0Li44NjE2OTJjNjgzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMzAyOCw2ICszMDI4LDE4IEBAIHN0cnVj dCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJ fSwKIAorCXsKKwkJeyJyZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQiLCBQR0NfU0lH SFVQLCBSRVBMSUNBVElPTl9TRU5ESU5HLAorCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBhbW91 bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBpbnZhbGlkYXRpbmcgYW4gIgorCQkJCQkJICJpbmFj dGl2ZSByZXBsaWNhdGlvbiBzbG90LiIpLAorCQkJTlVMTCwKKwkJCUdVQ19VTklUX1MKKwkJfSwK KwkJJnJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCwKKwkJMCwgMCwgSU5UX01BWCwK KwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsiY29tbWl0X2RlbGF5IiwgUEdDX1NV U0VULCBXQUxfU0VUVElOR1MsCiAJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIGRlbGF5IGluIG1p Y3Jvc2Vjb25kcyBiZXR3ZWVuIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgIgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDY2N2UwZGM0MGEuLmRl Y2EzYTRhZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5j b25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKQEAgLTMzNSw2ICszMzUsNyBAQAogI3dhbF9zZW5kZXJfdGltZW91dCA9IDYwcwkjIGlu IG1pbGxpc2Vjb25kczsgMCBkaXNhYmxlcwogI3RyYWNrX2NvbW1pdF90aW1lc3RhbXAgPSBvZmYJ IyBjb2xsZWN0IHRpbWVzdGFtcCBvZiB0cmFuc2FjdGlvbiBjb21taXQKIAkJCQkjIChjaGFuZ2Ug cmVxdWlyZXMgcmVzdGFydCkKKyNyZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgPSAw CSMgaW4gc2Vjb25kczsgMCBkaXNhYmxlcwogCiAjIC0gUHJpbWFyeSBTZXJ2ZXIgLQogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9zbG90LmgKaW5kZXggYzJlZTE0OWZkNi4uZGQ1NmE3NzU0NyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Nsb3QuaApAQCAtNTMsNiArNTMsOCBAQCB0eXBlZGVmIGVudW0gUmVwbGljYXRpb25TbG90 SW52YWxpZGF0aW9uQ2F1c2UKIAlSU19JTlZBTF9IT1JJWk9OLAogCS8qIHdhbF9sZXZlbCBpbnN1 ZmZpY2llbnQgZm9yIHNsb3QgKi8KIAlSU19JTlZBTF9XQUxfTEVWRUwsCisJLyogaW5hY3RpdmUg c2xvdCB0aW1lb3V0IGhhcyBvY2N1cnJlZCAqLworCVJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQs CiB9IFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlOwogCiBleHRlcm4gUEdETExJTVBP UlQgY29uc3QgY2hhciAqY29uc3QgU2xvdEludmFsaWRhdGlvbkNhdXNlc1tdOwpAQCAtMjMwLDYg KzIzMiw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBSZXBsaWNhdGlvblNsb3QgKk15UmVwbGljYXRp b25TbG90OwogLyogR1VDcyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcmVwbGljYXRp b25fc2xvdHM7CiBleHRlcm4gUEdETExJTVBPUlQgY2hhciAqc3luY2hyb25pemVkX3N0YW5kYnlf c2xvdHM7CitleHRlcm4gUEdETExJTVBPUlQgaW50IHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVf dGltZW91dDsKIAogLyogc2htZW0gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCiBleHRlcm4g U2l6ZSBSZXBsaWNhdGlvblNsb3RzU2htZW1TaXplKHZvaWQpOwpAQCAtMjQ2LDcgKzI0OSw4IEBA IGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BBY3F1aXJlZCh2b2lkKTsKIGV4dGVybiB2 b2lkIFJlcGxpY2F0aW9uU2xvdEFsdGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGJvb2wgKmZh aWxvdmVyLAogCQkJCQkJCQkgY29uc3QgYm9vbCAqdHdvX3BoYXNlKTsKIAotZXh0ZXJuIHZvaWQg UmVwbGljYXRpb25TbG90QWNxdWlyZShjb25zdCBjaGFyICpuYW1lLCBib29sIG5vd2FpdCk7Citl eHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wg bm93YWl0LAorCQkJCQkJCQkgICBib29sIGNoZWNrX2Zvcl9pbnZhbGlkYXRpb24pOwogZXh0ZXJu IHZvaWQgUmVwbGljYXRpb25TbG90UmVsZWFzZSh2b2lkKTsKIGV4dGVybiB2b2lkIFJlcGxpY2F0 aW9uU2xvdENsZWFudXAoYm9vbCBzeW5jZWRfb25seSk7CiBleHRlcm4gdm9pZCBSZXBsaWNhdGlv blNsb3RTYXZlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVp bGQgYi9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAppbmRleCA3MTI5MjRjMmZhLi4zMDFi ZTBmNmMxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAorKysgYi9z cmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZApAQCAtMTAsNiArMTAsNyBAQCB0ZXN0cyArPSB7 CiAgICAgICAgJ2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzJzogZ2V0X29wdGlvbignaW5qZWN0aW9u X3BvaW50cycpID8gJ3llcycgOiAnbm8nLAogICAgIH0sCiAgICAgJ3Rlc3RzJzogWworICAgICAg J3QvMDUwX2ludmFsaWRhdGVfc2xvdHMucGwnLAogICAgICAgJ3QvMDAxX3N0cmVhbV9yZXAucGwn LAogICAgICAgJ3QvMDAyX2FyY2hpdmluZy5wbCcsCiAgICAgICAndC8wMDNfcmVjb3ZlcnlfdGFy Z2V0cy5wbCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1MF9pbnZhbGlkYXRl X3Nsb3RzLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTBfaW52YWxpZGF0ZV9zbG90cy5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40NjYzMDE5YzE2Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTBfaW52YWxpZGF0ZV9zbG90cy5wbApA QCAtMCwwICsxLDI4NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBmb3IgcmVwbGljYXRpb24gc2xvdHMgaW52YWxp ZGF0aW9uCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsK K3VzZSBUZXN0OjpNb3JlOwordXNlIFRpbWU6OkhpUmVzIHF3KHVzbGVlcCk7CisKKyMgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IEludmFsaWRhdGUgc3RyZWFtaW5nIHN0 YW5kYnkncyBzbG90IGFzIHdlbGwgYXMgbG9naWNhbAorIyBmYWlsb3ZlciBzbG90IG9uIHByaW1h cnkgZHVlIHRvIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dC4gQWxzbywKKyMgY2hl Y2sgdGhlIGxvZ2ljYWwgZmFpbG92ZXIgc2xvdCBzeW5jZWQgb24gdG8gdGhlIHN0YW5kYnkgZG9l c24ndCBpbnZhbGlkYXRlCisjIHRoZSBzbG90IG9uIGl0cyBvd24sIGJ1dCBnZXRzIHRoZSBpbnZh bGlkYXRlZCBzdGF0ZSBmcm9tIHRoZSByZW1vdGUgc2xvdCBvbgorIyB0aGUgcHJpbWFyeS4KKwor IyBJbml0aWFsaXplIHByaW1hcnkgbm9kZQorbXkgJHByaW1hcnkgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKKyRwcmltYXJ5LT5pbml0KGFsbG93c19zdHJlYW1p bmcgPT4gJ2xvZ2ljYWwnKTsKKworIyBBdm9pZCBjaGVja3BvaW50IGR1cmluZyB0aGUgdGVzdCwg b3RoZXJ3aXNlLCB0aGUgdGVzdCBjYW4gZ2V0IHVucHJlZGljdGFibGUKKyRwcmltYXJ5LT5hcHBl bmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXsKK2NoZWNrcG9pbnRfdGltZW91dCA9IDFo CithdXRvdmFjdXVtID0gb2ZmCit9KTsKKyRwcmltYXJ5LT5zdGFydDsKKworIyBUYWtlIGJhY2t1 cAorbXkgJGJhY2t1cF9uYW1lID0gJ215X2JhY2t1cCc7CiskcHJpbWFyeS0+YmFja3VwKCRiYWNr dXBfbmFtZSk7CisKKyMgQ3JlYXRlIGEgc3RhbmRieSBsaW5raW5nIHRvIHRoZSBwcmltYXJ5IHVz aW5nIHRoZSByZXBsaWNhdGlvbiBzbG90CitteSAkc3RhbmRieTEgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnkxJyk7Ciskc3RhbmRieTEtPmluaXRfZnJvbV9iYWNrdXAo JHByaW1hcnksICRiYWNrdXBfbmFtZSwgaGFzX3N0cmVhbWluZyA9PiAxKTsKKworbXkgJGNvbm5z dHJfMSA9ICRwcmltYXJ5LT5jb25uc3RyOworJHN0YW5kYnkxLT5hcHBlbmRfY29uZigKKwkncG9z dGdyZXNxbC5jb25mJywgcXEoCitob3Rfc3RhbmRieV9mZWVkYmFjayA9IG9uCitwcmltYXJ5X3Ns b3RfbmFtZSA9ICdzYjFfc2xvdCcKK3ByaW1hcnlfY29ubmluZm8gPSAnJGNvbm5zdHJfMSBkYm5h bWU9cG9zdGdyZXMnCispKTsKKworIyBDcmVhdGUgc3luYyBzbG90IG9uIHRoZSBwcmltYXJ5Cisk cHJpbWFyeS0+cHNxbCgncG9zdGdyZXMnLAorCXF7U0VMRUNUIHBnX2NyZWF0ZV9sb2dpY2FsX3Jl cGxpY2F0aW9uX3Nsb3QoJ2xzdWIxX3N5bmNfc2xvdCcsICd0ZXN0X2RlY29kaW5nJywgZmFsc2Us IGZhbHNlLCB0cnVlKTt9CispOworCiskcHJpbWFyeS0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jlcycs IHFxWworICAgIFNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxfcmVwbGljYXRpb25fc2xvdChzbG90 X25hbWUgOj0gJ3NiMV9zbG90JywgaW1tZWRpYXRlbHlfcmVzZXJ2ZSA6PSB0cnVlKTsKK10pOwor Ciskc3RhbmRieTEtPnN0YXJ0OworCitteSAkc3RhbmRieTFfbG9nc3RhcnQgPSAtcyAkc3RhbmRi eTEtPmxvZ2ZpbGU7CisKKyMgV2FpdCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2gg ZGF0YQorJHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnkxKTsKKworIyBTeW5jaHJv bml6ZSB0aGUgcHJpbWFyeSBzZXJ2ZXIgc2xvdHMgdG8gdGhlIHN0YW5kYnkKKyRzdGFuZGJ5MS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfc3luY19yZXBsaWNhdGlvbl9zbG90cygp OyIpOworCisjIENvbmZpcm0gdGhhdCB0aGUgbG9naWNhbCBmYWlsb3ZlciBzbG90IGlzIGNyZWF0 ZWQgb24gdGhlIHN0YW5kYnkgYW5kIGlzCisjIGZsYWdnZWQgYXMgJ3N5bmNlZCcuCitpcyggJHN0 YW5kYnkxLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsCisJCXF7U0VMRUNUIGNvdW50KCopID0g MSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJCSAgV0hFUkUgc2xvdF9uYW1lID0gJ2xzdWIx X3N5bmNfc2xvdCcgQU5EIHN5bmNlZCBBTkQgTk9UIHRlbXBvcmFyeTt9CisJKSwKKwkidCIsCisJ J2xvZ2ljYWwgc2xvdCBsc3ViMV9zeW5jX3Nsb3QgaGFzIHN5bmNlZCBhcyB0cnVlIG9uIHN0YW5k YnknKTsKKworbXkgJGxvZ3N0YXJ0ID0gLXMgJHByaW1hcnktPmxvZ2ZpbGU7CitteSAkaW5hY3Rp dmVfdGltZW91dCA9IDI7CisKKyMgU2V0IHRpbWVvdXQgc28gdGhhdCB0aGUgbmV4dCBjaGVja3Bv aW50IHdpbGwgaW52YWxpZGF0ZSB0aGUgaW5hY3RpdmUKKyMgcmVwbGljYXRpb24gc2xvdC4KKyRw cmltYXJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAgQUxURVIgU1lTVEVNIFNF VCByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgVE8gJyR7aW5hY3RpdmVfdGltZW91 dH1zJzsKK10pOworJHByaW1hcnktPnJlbG9hZDsKKworIyBXYWl0IGZvciB0aGUgbG9naWNhbCBm YWlsb3ZlciBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZSBvbiB0aGUgcHJpbWFyeS4gTm90ZQorIyB0 aGF0IG5vYm9keSBoYXMgYWNxdWlyZWQgdGhhdCBzbG90IHlldCwgc28gZHVlIHRvCisjIHJlcGxp Y2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBzZXR0aW5nIGFib3ZlIGl0IG11c3QgZ2V0IGlu dmFsaWRhdGVkLgord2FpdF9mb3Jfc2xvdF9pbnZhbGlkYXRpb24oJHByaW1hcnksICdsc3ViMV9z eW5jX3Nsb3QnLCAkbG9nc3RhcnQsCisJJGluYWN0aXZlX3RpbWVvdXQpOworCisjIFNldCB0aW1l b3V0IG9uIHRoZSBzdGFuZGJ5IGFsc28gdG8gY2hlY2sgdGhlIHN5bmNlZCBzbG90cyBkb24ndCBn ZXQKKyMgaW52YWxpZGF0ZWQgZHVlIHRvIHRpbWVvdXQgb24gdGhlIHN0YW5kYnkuCiskc3RhbmRi eTEtPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBBTFRFUiBTWVNURU0gU0VUIHJl cGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBUTyAnMnMnOworXSk7Ciskc3RhbmRieTEt PnJlbG9hZDsKKworIyBOb3csIHN5bmMgdGhlIGxvZ2ljYWwgZmFpbG92ZXIgc2xvdCBmcm9tIHRo ZSByZW1vdGUgc2xvdCBvbiB0aGUgcHJpbWFyeS4KKyMgTm90ZSB0aGF0IHRoZSByZW1vdGUgc2xv dCBoYXMgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkIGR1ZSB0byBpbmFjdGl2ZQorIyB0aW1lb3V0 LiBOb3csIHRoZSBzdGFuZGJ5IG11c3QgYWxzbyBzZWUgaXQgYXMgaW52YWxpZGF0ZWQuCiskc3Rh bmRieTEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX3N5bmNfcmVwbGljYXRpb25f c2xvdHMoKTsiKTsKKworIyBXYWl0IGZvciB0aGUgaW5hY3RpdmUgcmVwbGljYXRpb24gc2xvdCB0 byBiZSBpbnZhbGlkYXRlZC4KKyRzdGFuZGJ5MS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdy ZXMnLCBxcVsKKwlTRUxFQ1QgQ09VTlQoc2xvdF9uYW1lKSA9IDEgRlJPTSBwZ19yZXBsaWNhdGlv bl9zbG90cworCQlXSEVSRSBzbG90X25hbWUgPSAnbHN1YjFfc3luY19zbG90JyBBTkQKKwkJaW52 YWxpZGF0aW9uX3JlYXNvbiA9ICdpbmFjdGl2ZV90aW1lb3V0JzsKK10pCisgIG9yIGRpZQorICAi VGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHJlcGxpY2F0aW9uIHNsb3QgbHN1YjFfc3luY19z bG90IGludmFsaWRhdGlvbiB0byBiZSBzeW5jZWQgb24gc3RhbmRieSI7CisKKyMgU3luY2VkIHNs b3QgbXVzdG4ndCBnZXQgaW52YWxpZGF0ZWQgb24gdGhlIHN0YW5kYnkgZXZlbiBhZnRlciBhIGNo ZWNrcG9pbnQsCisjIGl0IG11c3Qgc3luYyBpbnZhbGlkYXRpb24gZnJvbSB0aGUgcHJpbWFyeS4g U28sIHdlIG11c3Qgbm90IHNlZSB0aGUgc2xvdCdzCisjIGludmFsaWRhdGlvbiBtZXNzYWdlIGlu IHNlcnZlciBsb2cuCiskc3RhbmRieTEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ0hFQ0tQT0lO VCIpOworb2soICEkc3RhbmRieTEtPmxvZ19jb250YWlucygKKwkJImludmFsaWRhdGluZyBvYnNv bGV0ZSByZXBsaWNhdGlvbiBzbG90IFwibHN1YjFfc3luY19zbG90XCIiLAorCQkkc3RhbmRieTFf bG9nc3RhcnQpLAorCSdjaGVjayB0aGF0IHN5bmVkIHNsb3QgbHN1YjFfc3luY19zbG90IGhhcyBu b3QgYmVlbiBpbnZhbGlkYXRlZCBvbiB0aGUgc3RhbmRieScKKyk7CisKKyMgU3RvcCBzdGFuZGJ5 IHRvIG1ha2UgdGhlIHN0YW5kYnkncyByZXBsaWNhdGlvbiBzbG90IG9uIHRoZSBwcmltYXJ5IGlu YWN0aXZlCiskc3RhbmRieTEtPnN0b3A7CisKKyMgV2FpdCBmb3IgdGhlIHN0YW5kYnkncyByZXBs aWNhdGlvbiBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZQord2FpdF9mb3Jfc2xvdF9pbnZhbGlkYXRp b24oJHByaW1hcnksICdzYjFfc2xvdCcsICRsb2dzdGFydCwKKwkkaW5hY3RpdmVfdGltZW91dCk7 CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIHN0cmVhbWluZyBzdGFuZGJ5J3Mgc2xvdCBh cyB3ZWxsIGFzIGxvZ2ljYWwgZmFpbG92ZXIKKyMgc2xvdCBvbiBwcmltYXJ5IGR1ZSB0byByZXBs aWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQuIEFsc28sIGNoZWNrIHRoZQorIyBsb2dpY2Fs IGZhaWxvdmVyIHNsb3Qgc3luY2VkIG9uIHRvIHRoZSBzdGFuZGJ5IGRvZXNuJ3QgaW52YWxpZGF0 ZSB0aGUgc2xvdCBvbgorIyBpdHMgb3duLCBidXQgZ2V0cyB0aGUgaW52YWxpZGF0ZWQgc3RhdGUg ZnJvbSB0aGUgcmVtb3RlIHNsb3Qgb24gdGhlIHByaW1hcnkuCisjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IEludmFsaWRh dGUgbG9naWNhbCBzdWJzY3JpYmVyJ3Mgc2xvdCBkdWUgdG8KKyMgcmVwbGljYXRpb25fc2xvdF9p bmFjdGl2ZV90aW1lb3V0LgorCitteSAkcHVibGlzaGVyID0gJHByaW1hcnk7CisKKyMgUHJlcGFy ZSBmb3IgdGhlIG5leHQgdGVzdAorJHB1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jlcycs IHFxWworICAgIEFMVEVSIFNZU1RFTSBTRVQgcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1l b3V0IFRPICcwJzsKK10pOworJHB1Ymxpc2hlci0+cmVsb2FkOworCisjIENyZWF0ZSBzdWJzY3Jp YmVyIG5vZGUKK215ICRzdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3 KCdzdWInKTsKKyRzdWJzY3JpYmVyLT5pbml0OworJHN1YnNjcmliZXItPnN0YXJ0OworCisjIENy ZWF0ZSB0YWJsZXMKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRlc3RfdGJsIChpZCBpbnQpIik7Ciskc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdGVzdF90YmwgKGlkIGludCkiKTsKKworIyBJbnNlcnQgc29tZSBk YXRhCiskcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVz dF90YmwgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMSwgNSkpOyIpOworCisjIFNldHVwIGxvZ2lj YWwgcmVwbGljYXRpb24KK215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRwdWJsaXNoZXItPmNvbm5z dHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CiskcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBQVUJMSUNBVElPTiBwdWIgRk9SIEFMTCBUQUJMRVMiKTsKKyRwdWJsaXNoZXIt PnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1QgcGdfY3JlYXRlX2xvZ2lj YWxfcmVwbGljYXRpb25fc2xvdChzbG90X25hbWUgOj0gJ2xzdWIxX3Nsb3QnLCBwbHVnaW4gOj0g J3Bnb3V0cHV0Jyk7CitdKTsKKworJHN1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIn IFBVQkxJQ0FUSU9OIHB1YiBXSVRIIChzbG90X25hbWUgPSAnbHN1YjFfc2xvdCcsIGNyZWF0ZV9z bG90ID0gZmFsc2UpIgorKTsKKworJHN1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9z eW5jKCRwdWJsaXNoZXIsICdzdWInKTsKKworbXkgJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGJsIik7CisK K2lzKCRyZXN1bHQsIHFxKDUpLCAiY2hlY2sgaW5pdGlhbCBjb3B5IHdhcyBkb25lIik7CisKKyMg UHJlcGFyZSBmb3IgdGhlIG5leHQgdGVzdAorJHB1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0 Z3JlcycsIHFxWworICAgIEFMVEVSIFNZU1RFTSBTRVQgcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2 ZV90aW1lb3V0IFRPICcgJHtpbmFjdGl2ZV90aW1lb3V0fXMnOworXSk7CiskcHVibGlzaGVyLT5y ZWxvYWQ7CisKKyRsb2dzdGFydCA9IC1zICRwdWJsaXNoZXItPmxvZ2ZpbGU7CisKKyMgU3RvcCBz dWJzY3JpYmVyIHRvIG1ha2UgdGhlIHJlcGxpY2F0aW9uIHNsb3Qgb24gcHVibGlzaGVyIGluYWN0 aXZlCiskc3Vic2NyaWJlci0+c3RvcDsKKworIyBXYWl0IGZvciB0aGUgcmVwbGljYXRpb24gc2xv dCB0byBiZWNvbWUgaW5hY3RpdmUgYW5kIHRoZW4gaW52YWxpZGF0ZWQgZHVlIHRvCisjIHRpbWVv dXQuCit3YWl0X2Zvcl9zbG90X2ludmFsaWRhdGlvbigkcHVibGlzaGVyLCAnbHN1YjFfc2xvdCcs ICRsb2dzdGFydCwKKwkkaW5hY3RpdmVfdGltZW91dCk7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZh bGlkYXRlIGxvZ2ljYWwgc3Vic2NyaWJlcidzIHNsb3QgZHVlIHRvCisjIHJlcGxpY2F0aW9uX3Ns b3RfaW5hY3RpdmVfdGltZW91dC4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3ViIHdhaXRf Zm9yX3Nsb3RfaW52YWxpZGF0aW9uCit7CisJbXkgKCRub2RlLCAkc2xvdF9uYW1lLCAkb2Zmc2V0 LCAkaW5hY3RpdmVfdGltZW91dCkgPSBAXzsKKwlteSAkbmFtZSA9ICRub2RlLT5uYW1lOworCisJ IyBXYWl0IGZvciB0aGUgcmVwbGljYXRpb24gc2xvdCB0byBiZWNvbWUgaW5hY3RpdmUKKwkkbm9k ZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXFbCisJCVNFTEVDVCBDT1VOVChz bG90X25hbWUpID0gMSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJCQlXSEVSRSBzbG90X25h bWUgPSAnJHNsb3RfbmFtZScgQU5EIGFjdGl2ZSA9ICdmJzsKKwldKQorCSAgb3IgZGllCisJICAi VGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHNsb3QgJHNsb3RfbmFtZSB0byBiZWNvbWUgaW5h Y3RpdmUgb24gbm9kZSAkbmFtZSI7CisKKwkjIFdhaXQgZm9yIHRoZSByZXBsaWNhdGlvbiBzbG90 IGluZm8gdG8gYmUgdXBkYXRlZAorCSRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdy ZXMnLCBxcVsKKwkJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAxIEZST00gcGdfcmVwbGljYXRp b25fc2xvdHMKKwkJCVdIRVJFIGluYWN0aXZlX3NpbmNlIElTIE5PVCBOVUxMCisJCQkJQU5EIHNs b3RfbmFtZSA9ICckc2xvdF9uYW1lJyBBTkQgYWN0aXZlID0gJ2YnOworCV0pCisJICBvciBkaWUK KwkgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgaW5mbyBvZiBzbG90ICRzbG90X25hbWUg dG8gYmUgdXBkYXRlZCBvbiBub2RlICRuYW1lIjsKKworCSMgU2xlZXAgYXQgbGVhc3QgJGluYWN0 aXZlX3RpbWVvdXQgZHVyYXRpb24gdG8gYXZvaWQgbXVsdGlwbGUgY2hlY2twb2ludHMKKwkjIGZv ciB0aGUgc2xvdCB0byBnZXQgaW52YWxpZGF0ZWQuCisJc2xlZXAoJGluYWN0aXZlX3RpbWVvdXQp OworCisJY2hlY2tfZm9yX3Nsb3RfaW52YWxpZGF0aW9uX2luX3NlcnZlcl9sb2coJG5vZGUsICRz bG90X25hbWUsICRvZmZzZXQpOworCisJIyBXYWl0IGZvciB0aGUgaW5hY3RpdmUgcmVwbGljYXRp b24gc2xvdCB0byBiZSBpbnZhbGlkYXRlZAorCSRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkn cG9zdGdyZXMnLCBxcVsKKwkJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAxIEZST00gcGdfcmVw bGljYXRpb25fc2xvdHMKKwkJCVdIRVJFIHNsb3RfbmFtZSA9ICckc2xvdF9uYW1lJyBBTkQKKwkJ CWludmFsaWRhdGlvbl9yZWFzb24gPSAnaW5hY3RpdmVfdGltZW91dCc7CisJXSkKKwkgIG9yIGRp ZQorCSAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBpbmFjdGl2ZSBzbG90ICRzbG90X25h bWUgdG8gYmUgaW52YWxpZGF0ZWQgb24gbm9kZSAkbmFtZSI7CisKKwkjIENoZWNrIHRoYXQgdGhl IGludmFsaWRhdGVkIHNsb3QgY2Fubm90IGJlIGFjcXVpcmVkCisJbXkgKCRyZXN1bHQsICRzdGRv dXQsICRzdGRlcnIpOworCisJKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBz cWwoCisJCSdwb3N0Z3JlcycsIHFxWworCQkJU0VMRUNUIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2 YW5jZSgnJHNsb3RfbmFtZScsICcwLzEnKTsKKwldKTsKKworCW9rKCAkc3RkZXJyID1+CisJCSAg L2NhbiBubyBsb25nZXIgZ2V0IGNoYW5nZXMgZnJvbSByZXBsaWNhdGlvbiBzbG90ICIkc2xvdF9u YW1lIi8sCisJCSJkZXRlY3RlZCBlcnJvciB1cG9uIHRyeWluZyB0byBhY3F1aXJlIGludmFsaWRh dGVkIHNsb3QgJHNsb3RfbmFtZSBvbiBub2RlICRuYW1lIgorCSAgKQorCSAgb3IgZGllCisJICAi Y291bGQgbm90IGRldGVjdCBlcnJvciB1cG9uIHRyeWluZyB0byBhY3F1aXJlIGludmFsaWRhdGVk IHNsb3QgJHNsb3RfbmFtZSBvbiBub2RlICRuYW1lIjsKK30KKworIyBDaGVjayBmb3IgaW52YWxp ZGF0aW9uIG9mIHNsb3QgaW4gc2VydmVyIGxvZworc3ViIGNoZWNrX2Zvcl9zbG90X2ludmFsaWRh dGlvbl9pbl9zZXJ2ZXJfbG9nCit7CisJbXkgKCRub2RlLCAkc2xvdF9uYW1lLCAkb2Zmc2V0KSA9 IEBfOworCW15ICRuYW1lID0gJG5vZGUtPm5hbWU7CisJbXkgJGludmFsaWRhdGVkID0gMDsKKwor CWZvciAobXkgJGkgPSAwOyAkaSA8IDEwICogJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1l b3V0X2RlZmF1bHQ7ICRpKyspCisJeworCQkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD SEVDS1BPSU5UIik7CisJCWlmICgkbm9kZS0+bG9nX2NvbnRhaW5zKAorCQkJCSJpbnZhbGlkYXRp bmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBcIiRzbG90X25hbWVcIiIsCisJCQkJJG9mZnNl dCkpCisJCXsKKwkJCSRpbnZhbGlkYXRlZCA9IDE7CisJCQlsYXN0OworCQl9CisJCXVzbGVlcCgx MDBfMDAwKTsKKwl9CisJb2soJGludmFsaWRhdGVkLAorCQkiY2hlY2sgdGhhdCBzbG90ICRzbG90 X25hbWUgaW52YWxpZGF0aW9uIGhhcyBiZWVuIGxvZ2dlZCBvbiBub2RlICRuYW1lIgorCSk7Cit9 CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi40My4wCgo= --00000000000036aace0620cc345b--