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 1snGVX-002F2J-Vz for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Sep 2024 11:55:09 +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 1snGVX-00DK1X-AG for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Sep 2024 11:55:07 +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 1snGVW-00DK1O-JC for pgsql-hackers@lists.postgresql.org; Sun, 08 Sep 2024 11:55:06 +0000 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1snGVT-0008Os-2w for pgsql-hackers@lists.postgresql.org; Sun, 08 Sep 2024 11:55:05 +0000 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2f7502f09fdso20675211fa.1 for ; Sun, 08 Sep 2024 04:55:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1725796501; x=1726401301; 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=frKp6iMtNlID4wzL9w5oo8sK2VUkDb6fK6ANs6Pg44g=; b=URCYW8N7UyTa+FKG1f3GCFDgOQnriIHYocW9xaBUBFFhwegLMw4mnuW+fggnS0GQ5B EXqkXGVJIK8NqQS6bJFmAEd6c9Ny3EGaS59GwG0AxxmjhH2LjqeVNC3UrgvnR1F1eFiH QccX2SaDHt2ii/q6L2ps3P0dM7dh5HYMK27/eEIdy1oPUrcZa4Ldq541A9BYCbLYF0xV 8+66sSg0iHMOmBGpGLofRMlb+CIbEjeZWqBSrxqF60j7VIeEgtaZv3ww48WmiQ16azO2 MhpHTFzUSpUZ9lEFS8PeI/Rn/ldZV2wBxxiRmZQgB+e5YhJx0AiBcCN92zatzuB6R/QA nzqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725796501; x=1726401301; 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=frKp6iMtNlID4wzL9w5oo8sK2VUkDb6fK6ANs6Pg44g=; b=JXl/+hER0g/WwEq5vusEmin9Q/KXV4nPl7C48Z4+9p2y1Y+dZI58soDfozAJMXLjhL i6VB8dFDec9S5uuIL7Tha2Xkcg8m37VWsygFXd/b8Ic/LKFhstqdRfYD6RQnwuq45ui3 me59oNy6QlvFqwoKZFL35/+Wo05zIzup9Ll+TazKjFNfVfW4hDR2bq+nOGsuTfqT6EDY rnFz15VzwCr7/w+Snmnn6nx01k/0GpVXIRFhMf33phT4Ew/yv9vtapDfBRwbayI/6f7D B/k0n4AYPrxvmOmrgVT6tmS8kiSIWjT7AhC9Ntg/KbyqVzVKiQgANIGsAMUdUGbTbYCn tLGw== X-Forwarded-Encrypted: i=1; AJvYcCVsJRnQM2RMl+0Ug8nRnUvwBli2g59ic704qFhBXkfhpt/PdXAN0nNTJVL3efI85XBRnwdPsTLnIT6dYBsR@lists.postgresql.org X-Gm-Message-State: AOJu0Yx2/eqVwUhF5jmBtJyPmcAJ+tZMF1IYHLjZ3XHjP83CClB3/gUe qT30eBkYhXE41A84FQyolw44PJOox1sifzWDMh8sdSfIGGUu//nwndCFI8bKN8gXmVLddDM85rF UGaFt35APmtPb1XdHcE7vdxHMTFg= X-Google-Smtp-Source: AGHT+IGRLDgs3WH6g6cLPavKDAOeSd4R99O5wUHDgFhxxw6Kzn+iSx4o/LTPFAimvZi8LUe+2HFo/iPFjqaxHwiGwkA= X-Received: by 2002:a2e:b88f:0:b0:2f3:aac3:c2a5 with SMTP id 38308e7fff4ca-2f751a1aaa2mr30498781fa.17.1725796500193; Sun, 08 Sep 2024 04:55:00 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Sun, 8 Sep 2024 17:24:47 +0530 Message-ID: Subject: Re: Introduce XID age and inactive timeout based replication slot invalidation To: Peter Smith Cc: Amit Kapila , Ajin Cherian , Bertrand Drouvot , shveta malik , Masahiko Sawada , Nathan Bossart , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000005965a706219a4ff0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005965a706219a4ff0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Thanks for reviewing. On Mon, Sep 2, 2024 at 1:37=E2=80=AFPM Peter Smith = wrote: > > Commit message. > > 1. > Because such synced slots are typically considered not > active (for them to be later considered as inactive) as they don't > perform logical decoding to produce the changes. > > This sentence is bad grammar. The docs have the same wording, so > please see my doc review comment #4 suggestion below. +1 > 2. > + > + Invalidates replication slots that are inactive for longer than > + specified amount of time. If this value is specified without uni= ts, > + it is taken as seconds. A value of zero (which is default) disab= les > + the timeout mechanism. This parameter can only be set in > + the postgresql.conf file or on the server > + command line. > + > + > > nit - This is OK as-is, but OTOH why not make the wording consistent > with the previous GUC description? (e.g. see my v43 [1] #2 review > comment) +1. > 3. > + > + This invalidation check happens either when the slot is acquired > + for use or during checkpoint. The time since the slot has become > + inactive is known from its > + inactive_since value using which the > + timeout is measured. > + > + > > I felt this is slightly misleading because slot acquiring has nothing > to do with setting the slot invalidation anymore. Furthermore, the 2nd > sentence is bad grammar. > > nit - IMO something simple like the following rewording can address > both of those points: > > Slot invalidation due to inactivity timeout occurs during checkpoint. > The duration of slot inactivity is calculated using the slot's > inactive_since field value. +1. > 4. > + Because such synced slots are typically considered not active > + (for them to be later considered as inactive) as they don't perf= orm > + logical decoding to produce the changes. > > That sentence has bad grammar. > > nit =E2=80=93 suggest a much simpler replacement: > Synced slots are always considered to be inactive because they don't > perform logical decoding to produce changes. +1. > 5. > +#define IsInactiveTimeoutSlotInvalidationApplicable(s) \ > > 5a. > I felt this would be better implemented as an inline function. Then it > can be commented on properly to explain the parts of the condition. > e.g. the large comment currently in InvalidatePossiblyObsoleteSlot() > would be more appropriate in this function. +1. > 5b. > The name is very long. Can't it be something shorter/simpler like: > 'IsSlotATimeoutCandidate()' > > ~~~ Missing inactive in the above suggested name. Used SlotInactiveTimeoutCheckAllowed, similar to XLogInsertAllowed. > 6. ReplicationSlotAcquire > > -ReplicationSlotAcquire(const char *name, bool nowait) > +ReplicationSlotAcquire(const char *name, bool nowait, > + bool check_for_invalidation) > > nit - Previously this new parameter really did mean to "check" for > [and set the slot] invalidation. But now I suggest renaming it to > 'error_if_invalid' to properly reflect the new usage. And also in the > slot.h. +1. > 7. > + /* > + * Error out if the slot has been invalidated previously. Because there'= s > + * no use in acquiring the invalidated slot. > + */ > > nit - The comment is contrary to the code. If there was no reason to > skip this error, then you would not have the new parameter allowing > you to skip this error. I suggest just repeating the same comment as > in the function header. +1. > 8. ReportSlotInvalidation > > nit - Added some blank lines for consistency. +1. > 9. InvalidatePossiblyObsoleteSlot > > 9a. > Consistency is good (commit message, docs and code comments for this), > but the added sentence has bad grammar. Please see the docs review > comment #4 above for some alternate phrasing. +1. > 9b. > Now that this logic is moved into a macro (I suggested it should be an > inline function) IMO this comment does not belong here anymore because > it is commenting code that you cannot see. Instead, this comment (or > something like it) should be as comments within the new function. > > =3D=3D=3D=3D=3D=3D > src/include/replication/slot.h +1. > 10. > +extern void ReplicationSlotAcquire(const char *name, bool nowait, > + bool check_for_invalidation); > > Change the new param name as described in the earlier review comment. +1. > Please refer to the attached file which implements some of the nits > mentioned above. Merged the diff into v45. Thanks. On Tue, Sep 3, 2024 at 12:26=E2=80=AFPM Peter Smith = wrote: > > TEST CASE #1 > > 1. > +# Wait for the inactive replication slot to be invalidated. > > Is that comment correct? IIUC the synced slot should *already* be > invalidated from the primary, so here we are not really "waiting" for > it to be invalidated; Instead, we are just "confirming" that the > synchronized slot is already invalidated with the correct reason as > expected. Modified the comment. > 2. > +# Synced slot mustn't get invalidated on the standby even after a checkp= oint, > +# it must sync invalidation from the primary. So, we must not see the sl= ot's > +# invalidation message in server log. > > This test case seemed bogus, for a couple of reasons: > > 2a. IIUC this 'lsub1_sync_slot' is the same one that is already > invalid (from the primary), so nobody should be surprised that an > already invalid slot doesn't get flagged as invalid again. i.e. > Shouldn't your test scenario here be done using a valid synced slot? +1. Added another test case for checking the synced slot not getting invalidated despite inactive timeout being set. > 2b. AFAICT it was only moments above this CHECKPOINT where you > assigned the standby inactivity timeout to 2s. So even if there was > some bug invalidating synced slots I don't think you gave it enough > time to happen -- e.g. I doubt 2s has elapsed yet. Added sleep(timeout+1) before the checkpoint. > 3. > +# Stop standby to make the standby's replication slot on the primary ina= ctive > +$standby1->stop; > + > +# Wait for the standby's replication slot to become inactive > > TEST CASE #2 > > 4. > +# Stop subscriber to make the replication slot on publisher inactive > +$subscriber->stop; > + > +# Wait for the replication slot to become inactive and then invalidated = due to > +# timeout. > +wait_for_slot_invalidation($publisher, 'lsub1_slot', $logstart, > + $inactive_timeout); > > IIUC, this is just like comment #3 above. Both these (the stop and the > wait) seem to belong together, so I think maybe a single bigger > explanatory comment covering both parts would help for understanding. Done. > 5. > +# Testcase end: Invalidate logical subscriber's slot due to > +# replication_slot_inactive_timeout. > +# =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > > IMO the rest of the comment after "Testcase end" isn't very useful. Removed. > =3D=3D=3D=3D=3D=3D > sub wait_for_slot_invalidation > > 6. > +sub wait_for_slot_invalidation > +{ > > An explanatory header comment for this subroutine would be helpful. Done. > 7. > + # Wait for the replication slot to become inactive > + $node->poll_query_until( > > Why are there are 2 separate poll_query_until's here? Can't those be > combined into just one? Ah. My bad. Removed. > ~~~ > > 8. > + # Sleep at least $inactive_timeout duration to avoid multiple checkpoin= ts > + # for the slot to get invalidated. > + sleep($inactive_timeout); > + > > Maybe this special sleep to prevent too many CHECKPOINTs should be > moved to be inside the other subroutine, which is actually doing those > CHECKPOINTs. Done. > 9. > + # Wait for the inactive replication slot to be invalidated > + "Timed out while waiting for inactive slot $slot_name to be > invalidated on node $name"; > + > > The comment seems misleading. IIUC you are not "waiting" for the > invalidation here, because it is the other subroutine doing the > waiting for the invalidation message in the logs. Instead, here I > think you are just confirming the 'invalidation_reason' got set > correctly. The comment should say what it is really doing. Modified. > sub check_for_slot_invalidation_in_server_log > > 10. > +# Check for invalidation of slot in server log > +sub check_for_slot_invalidation_in_server_log > +{ > > I think the main function of this subroutine is the CHECKPOINT and the > waiting for the server log to say invalidation happened. It is doing a > loop of a) CHECKPOINT then b) inspecting the server log for the slot > invalidation, and c) waiting for a bit. Repeat 10 times. > > A comment describing the logic for this subroutine would be helpful. > > The most important side-effect of this function is the CHECKPOINT > because without that nothing will ever get invalidated due to > inactivity, but this key point is not obvious from the subroutine > name. > > IMO it would be better to name this differently to reflect what it is > really doing: > e.g. "CHECKPOINT_and_wait_for_slot_invalidation_in_server_log" That would be too long. Changed the function name to trigger_slot_invalidation() which is appropriate. Please find the v45 patch. Addressed above and Shveta's review comments [1]= . Amit's comments [2] and [3] are still pending. [1] https://www.postgresql.org/message-id/CAJpy0uC8Dg-0JS3NRUwVUemgz5Ar2v3_= EQQFXyAigWSEQ8U47Q%40mail.gmail.com [2] https://www.postgresql.org/message-id/CAA4eK1K7DdT_5HnOWs5tVPYC%3D-h%2B= m85wu7k-7RVJaJ7zMxprWQ%40mail.gmail.com [3] https://www.postgresql.org/message-id/CAA4eK1%2Bkt-QRr1RP%3DD%3D4_tp%2B= S%2BCErQ6rNe7KVYEyZ3f6PYXpvw%40mail.gmail.com -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --0000000000005965a706219a4ff0 Content-Type: application/octet-stream; name="v45-0001-Add-inactive_timeout-based-replication-slot-inva.patch" Content-Disposition: attachment; filename="v45-0001-Add-inactive_timeout-based-replication-slot-inva.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m0tio1kx0 RnJvbSA2MGE1YmViMzU1ZWYyYzljMjM5MmUwMjI5YWYwYTI0MjkzODgyZjUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFN1biwgOCBTZXAgMjAyNCAxMTozMzowNSArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjQ1XSBBZGQgaW5hY3RpdmVfdGltZW91dCBiYXNlZCByZXBsaWNh dGlvbiBzbG90IGludmFsaWRhdGlvbgoKVGlsbCBub3csIHBvc3RncmVzIGhhcyB0aGUgYWJpbGl0 eSB0byBpbnZhbGlkYXRlIGluYWN0aXZlCnJlcGxpY2F0aW9uIHNsb3RzIGJhc2VkIG9uIHRoZSBh bW91bnQgb2YgV0FMIChzZXQgdmlhCm1heF9zbG90X3dhbF9rZWVwX3NpemUgR1VDKSB0aGF0IHdp bGwgYmUgbmVlZGVkIGZvciB0aGUgc2xvdHMgaW4KY2FzZSB0aGV5IGJlY29tZSBhY3RpdmUuIEhv d2V2ZXIsIGNob29zaW5nIGEgZGVmYXVsdCB2YWx1ZSBmb3IKdGhpcyBHVUMgaXMgYSBiaXQgdHJp Y2t5LiBCZWNhdXNlIHRoZSBhbW91bnQgb2YgV0FMIGEgZGF0YWJhc2UKZ2VuZXJhdGVzLCBhbmQg dGhlIGFsbG9jYXRlZCBzdG9yYWdlIGZvciBpbnN0YW5jZSB3aWxsIHZhcnkKZ3JlYXRseSBpbiBw cm9kdWN0aW9uLCBtYWtpbmcgaXQgZGlmZmljdWx0IHRvIHBpbiBkb3duIGEKb25lLXNpemUtZml0 cy1hbGwgdmFsdWUuCgpJdCBpcyBvZnRlbiBlYXN5IGZvciB1c2VycyB0byBzZXQgYSB0aW1lb3V0 IG9mIHNheSAxIG9yIDIgb3IgbgpkYXlzLCBhZnRlciB3aGljaCBhbGwgdGhlIGluYWN0aXZlIHNs b3RzIGdldCBpbnZhbGlkYXRlZC4gVGhpcwpjb21taXQgaW50cm9kdWNlcyBhIEdVQyBuYW1lZCBy ZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQuCldoZW4gc2V0LCBwb3N0Z3JlcyBpbnZh bGlkYXRlcyBzbG90cyAoZHVyaW5nIG5vbi1zaHV0ZG93bgpjaGVja3BvaW50cykgdGhhdCBhcmUg aW5hY3RpdmUgZm9yIGxvbmdlciB0aGFuIHRoaXMgYW1vdW50IG9mCnRpbWUuCgpOb3RlIHRoYXQg dGhlIGluYWN0aXZlIHRpbWVvdXQgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSBpcyBub3QKYXBwbGlj YWJsZSBmb3Igc2xvdHMgb24gdGhlIHN0YW5kYnkgc2VydmVyIHRoYXQgYXJlIGJlaW5nIHN5bmNl ZApmcm9tIHRoZSBwcmltYXJ5IHNlcnZlciAoaS5lLiwgc3RhbmRieSBzbG90cyBoYXZpbmcgJ3N5 bmNlZCcgZmllbGQKJ3RydWUnKS4gU3luY2VkIHNsb3RzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0 byBiZSBpbmFjdGl2ZSBiZWNhdXNlCnRoZXkgZG9uJ3QgcGVyZm9ybSBsb2dpY2FsIGRlY29kaW5n IHRvIHByb2R1Y2UgY2hhbmdlcy4KCkF1dGhvcjogQmhhcmF0aCBSdXBpcmVkZHkKUmV2aWV3ZWQt Ynk6IEJlcnRyYW5kIERyb3V2b3QsIEFtaXQgS2FwaWxhClJldmlld2VkLWJ5OiBBamluIENoZXJp YW4sIFNodmV0YSBNYWxpaywgUGV0ZXIgU21pdGgKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9z dGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUxqMkFDVzRhVWUtX3VGUU9qZFdDRU4teFhvTEdobXZS Rm5MOFNOd19UWjVuSmUrYXdAbWFpbC5nbWFpbC5jb20KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cu cG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQSUyQlRnbW9aVGJhYUVqU1pVRzFGTDBtenhBZE4z cW1Ya3NPM085X1BaaEV1WFRrVm5SUSU0MG1haWwuZ21haWwuY29tCkRpc2N1c3Npb246IGh0dHBz Oi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvMjAyNDAzMjYwODQxLjVqY3Y3aWhuaWNj eSU0MGFsdmhlcnJlLnBnc3FsCi0tLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAg ICAgICAgICAgICAgIHwgIDM1ICsrCiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwgICAg ICAgICAgICAgICAgfCAgIDcgKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNz LmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3Rz eW5jLmMgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAg ICAgICAgICB8IDE3MSArKysrKysrKy0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90ZnVu Y3MuYyAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRl ci5jICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX3VwZ3JhZGVf c3VwcG9ydC5jICAgIHwgICAyICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YyAgICAgICAgICAgfCAgMTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAg ICAgICAgICB8ICAyNCArLQogc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlY292ZXJ5L3QvMDUwX2ludmFsaWRhdGVfc2xvdHMu cGwgICB8IDMyMSArKysrKysrKysrKysrKysrKysKIDEzIGZpbGVzIGNoYW5nZWQsIDU2MCBpbnNl cnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9y ZWNvdmVyeS90LzA1MF9pbnZhbGlkYXRlX3Nsb3RzLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDBhZWMxMWY0 NDMuLjI3YjIyODVkYTEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTQ1NTYsNiArNDU1Niw0MSBAQCByZXN0b3Jl X2NvbW1hbmQgPSAnY29weSAiQzpcXHNlcnZlclxcYXJjaGl2ZWRpclxcJWYiICIlcCInICAjIFdp bmRvd3MKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1yZXBsaWNhdGlvbi1zbG90LWluYWN0aXZlLXRpbWVvdXQiIHhy ZWZsYWJlbD0icmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0Ij4KKyAgICAgIDx0ZXJt Pjx2YXJuYW1lPnJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dDwvdmFybmFtZT4gKDx0 eXBlPmludGVnZXI8L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48 dmFybmFtZT5yZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQ8L3Zhcm5hbWU+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8 L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEludmFsaWRh dGUgcmVwbGljYXRpb24gc2xvdHMgdGhhdCBhcmUgaW5hY3RpdmUgZm9yIGxvbmdlciB0aGFuIHRo aXMKKyAgICAgICAgYW1vdW50IG9mIHRpbWUuIElmIHRoaXMgdmFsdWUgaXMgc3BlY2lmaWVkIHdp dGhvdXQgdW5pdHMsCisgICAgICAgIGl0IGlzIHRha2VuIGFzIHNlY29uZHMuIEEgdmFsdWUgb2Yg emVybyAod2hpY2ggaXMgZGVmYXVsdCkgZGlzYWJsZXMKKyAgICAgICAgdGhlIGluYWN0aXZlIHRp bWVvdXQgaW52YWxpZGF0aW9uIG1lY2hhbmlzbS4gVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkKKyAg ICAgICAgYmUgc2V0IGluIHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4g ZmlsZSBvciBvbiB0aGUKKyAgICAgICAgc2VydmVyIGNvbW1hbmQgbGluZS4KKyAgICAgICA8L3Bh cmE+CisKKyAgICAgICA8cGFyYT4KKyAgICAgICAgU2xvdCBpbnZhbGlkYXRpb24gZHVlIHRvIGlu YWN0aXZpdHkgdGltZW91dCBvY2N1cnMgZHVyaW5nIGNoZWNrcG9pbnQuCisgICAgICAgIFRoZSBk dXJhdGlvbiBvZiBzbG90IGluYWN0aXZpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgc2xvdCdz CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InZpZXctcGctcmVwbGljYXRpb24tc2xvdHMiPnBnX3Jl cGxpY2F0aW9uX3Nsb3RzPC9saW5rPi48c3RydWN0ZmllbGQ+aW5hY3RpdmVfc2luY2U8L3N0cnVj dGZpZWxkPgorICAgICAgICB2YWx1ZS4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4K KyAgICAgICAgTm90ZSB0aGF0IHRoZSBpbmFjdGl2ZSB0aW1lb3V0IGludmFsaWRhdGlvbiBtZWNo YW5pc20gaXMgbm90CisgICAgICAgIGFwcGxpY2FibGUgZm9yIHNsb3RzIG9uIHRoZSBzdGFuZGJ5 IHNlcnZlciB0aGF0IGFyZSBiZWluZyBzeW5jZWQKKyAgICAgICAgZnJvbSBwcmltYXJ5IHNlcnZl ciAoaS5lLiwgc3RhbmRieSBzbG90cyBoYXZpbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0idmll dy1wZy1yZXBsaWNhdGlvbi1zbG90cyI+cGdfcmVwbGljYXRpb25fc2xvdHM8L2xpbms+LjxzdHJ1 Y3RmaWVsZD5zeW5jZWQ8L3N0cnVjdGZpZWxkPgorICAgICAgICB2YWx1ZSA8bGl0ZXJhbD50cnVl PC9saXRlcmFsPikuCisgICAgICAgIFN5bmNlZCBzbG90cyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQg dG8gYmUgaW5hY3RpdmUgYmVjYXVzZSB0aGV5IGRvbid0CisgICAgICAgIHBlcmZvcm0gbG9naWNh bCBkZWNvZGluZyB0byBwcm9kdWNlIGNoYW5nZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9s aXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i Z3VjLXRyYWNrLWNvbW1pdC10aW1lc3RhbXAiIHhyZWZsYWJlbD0idHJhY2tfY29tbWl0X3RpbWVz dGFtcCI+CiAgICAgICA8dGVybT48dmFybmFtZT50cmFja19jb21taXRfdGltZXN0YW1wPC92YXJu YW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12 aWV3cy5zZ21sCmluZGV4IDYzNGE0YzBmYWIuLjU2MzM0MjllZWYgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdz LnNnbWwKQEAgLTI2MTgsNiArMjYxOCwxMyBAQCBTRUxFQ1QgKiBGUk9NIHBnX2xvY2tzIHBsIExF RlQgSk9JTiBwZ19wcmVwYXJlZF94YWN0cyBwcHgKICAgICAgICAgICBwZXJmb3JtIGxvZ2ljYWwg ZGVjb2RpbmcuICBJdCBpcyBzZXQgb25seSBmb3IgbG9naWNhbCBzbG90cy4KICAgICAgICAgIDwv cGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg PHBhcmE+CisgICAgICAgICAgPGxpdGVyYWw+aW5hY3RpdmVfdGltZW91dDwvbGl0ZXJhbD4gbWVh bnMgdGhhdCB0aGUgc2xvdCBoYXMgYmVlbgorICAgICAgICAgIGluYWN0aXZlIGZvciBsb25nZXIg dGhhbiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAgICAgIDx4cmVm IGxpbmtlbmQ9Imd1Yy1yZXBsaWNhdGlvbi1zbG90LWluYWN0aXZlLXRpbWVvdXQiLz4gcGFyYW1l dGVyLgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRl bWl6ZWRsaXN0PgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKaW5kZXggYjRkZDVjY2U3 NS4uNTZmYzFhNDVhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sb2dpY2FsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWxmdW5jcy5jCkBAIC0xOTcsNyArMTk3LDcgQEAgcGdfbG9naWNhbF9zbG90X2dldF9jaGFu Z2VzX2d1dHMoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgY29uZmlybSwgYm9vbCBiaW4K IAllbHNlCiAJCWVuZF9vZl93YWwgPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOwogCi0JUmVw bGljYXRpb25TbG90QWNxdWlyZShOYW1lU3RyKCpuYW1lKSwgdHJ1ZSk7CisJUmVwbGljYXRpb25T bG90QWNxdWlyZShOYW1lU3RyKCpuYW1lKSwgdHJ1ZSwgdHJ1ZSk7CiAKIAlQR19UUlkoKTsKIAl7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKaW5kZXggZjk2NDll ZWMxYS4uNmNjN2E3MzllYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9zbG90c3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xv dHN5bmMuYwpAQCAtNDQ4LDcgKzQ0OCw3IEBAIGRyb3BfbG9jYWxfb2Jzb2xldGVfc2xvdHMoTGlz dCAqcmVtb3RlX3Nsb3RfbGlzdCkKIAogCQkJaWYgKHN5bmNlZF9zbG90KQogCQkJewotCQkJCVJl cGxpY2F0aW9uU2xvdEFjcXVpcmUoTmFtZVN0cihsb2NhbF9zbG90LT5kYXRhLm5hbWUpLCB0cnVl KTsKKwkJCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIobG9jYWxfc2xvdC0+ZGF0YS5u YW1lKSwgdHJ1ZSwgZmFsc2UpOwogCQkJCVJlcGxpY2F0aW9uU2xvdERyb3BBY3F1aXJlZCgpOwog CQkJfQogCkBAIC02NjcsNyArNjY3LDcgQEAgc3luY2hyb25pemVfb25lX3Nsb3QoUmVtb3RlU2xv dCAqcmVtb3RlX3Nsb3QsIE9pZCByZW1vdGVfZGJpZCkKIAkJICogcHJlLWNoZWNrIHRvIGVuc3Vy ZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgc2xvdCBwcm9wZXJ0aWVzIGlzCiAJCSAqIGNoYW5n ZWQgYmVmb3JlIGFjcXVpcmluZyB0aGUgc2xvdC4KIAkJICovCi0JCVJlcGxpY2F0aW9uU2xvdEFj cXVpcmUocmVtb3RlX3Nsb3QtPm5hbWUsIHRydWUpOworCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJl KHJlbW90ZV9zbG90LT5uYW1lLCB0cnVlLCBmYWxzZSk7CiAKIAkJQXNzZXJ0KHNsb3QgPT0gTXlS ZXBsaWNhdGlvblNsb3QpOwogCkBAIC0xNTQzLDkgKzE1NDMsNyBAQCB1cGRhdGVfc3luY2VkX3Ns b3RzX2luYWN0aXZlX3NpbmNlKHZvaWQpCiAJCQlpZiAobm93ID09IDApCiAJCQkJbm93ID0gR2V0 Q3VycmVudFRpbWVzdGFtcCgpOwogCi0JCQlTcGluTG9ja0FjcXVpcmUoJnMtPm11dGV4KTsKLQkJ CXMtPmluYWN0aXZlX3NpbmNlID0gbm93OwotCQkJU3BpbkxvY2tSZWxlYXNlKCZzLT5tdXRleCk7 CisJCQlSZXBsaWNhdGlvblNsb3RTZXRJbmFjdGl2ZVNpbmNlKHMsICZub3csIHRydWUpOwogCQl9 CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5kZXggMGEwMzc3NjE1Ni4uZDkyYjkyYmZlZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwpAQCAtMTA3LDEwICsxMDcsMTEgQEAgY29uc3QgY2hhciAq Y29uc3QgU2xvdEludmFsaWRhdGlvbkNhdXNlc1tdID0gewogCVtSU19JTlZBTF9XQUxfUkVNT1ZF RF0gPSAid2FsX3JlbW92ZWQiLAogCVtSU19JTlZBTF9IT1JJWk9OXSA9ICJyb3dzX3JlbW92ZWQi LAogCVtSU19JTlZBTF9XQUxfTEVWRUxdID0gIndhbF9sZXZlbF9pbnN1ZmZpY2llbnQiLAorCVtS U19JTlZBTF9JTkFDVElWRV9USU1FT1VUXSA9ICJpbmFjdGl2ZV90aW1lb3V0IiwKIH07CiAKIC8q IE1heGltdW0gbnVtYmVyIG9mIGludmFsaWRhdGlvbiBjYXVzZXMgKi8KLSNkZWZpbmUJUlNfSU5W QUxfTUFYX0NBVVNFUyBSU19JTlZBTF9XQUxfTEVWRUwKKyNkZWZpbmUJUlNfSU5WQUxfTUFYX0NB VVNFUyBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUCiAKIFN0YXRpY0Fzc2VydERlY2wobGVuZ3Ro b2YoU2xvdEludmFsaWRhdGlvbkNhdXNlcykgPT0gKFJTX0lOVkFMX01BWF9DQVVTRVMgKyAxKSwK IAkJCQkgImFycmF5IGxlbmd0aCBtaXNtYXRjaCIpOwpAQCAtMTQwLDYgKzE0MSw3IEBAIFJlcGxp Y2F0aW9uU2xvdCAqTXlSZXBsaWNhdGlvblNsb3QgPSBOVUxMOwogLyogR1VDIHZhcmlhYmxlcyAq LwogaW50CQkJbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gMTA7IC8qIHRoZSBtYXhpbXVtIG51bWJl ciBvZiByZXBsaWNhdGlvbgogCQkJCQkJCQkJCSAqIHNsb3RzICovCitpbnQJCQlyZXBsaWNhdGlv bl9zbG90X2luYWN0aXZlX3RpbWVvdXQgPSAwOwogCiAvKgogICogVGhpcyBHVUMgbGlzdHMgc3Ry ZWFtaW5nIHJlcGxpY2F0aW9uIHN0YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMgdGhhdApAQCAtMTU5 LDYgKzE2MSwxNCBAQCBzdGF0aWMgWExvZ1JlY1B0ciBzc19vbGRlc3RfZmx1c2hfbHNuID0gSW52 YWxpZFhMb2dSZWNQdHI7CiBzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3RTaG1lbUV4aXQoaW50 IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3REcm9wUHRyKFJl cGxpY2F0aW9uU2xvdCAqc2xvdCk7CiAKK3N0YXRpYyBib29sIEludmFsaWRhdGVQb3NzaWJseU9i c29sZXRlU2xvdChSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKKwkJCQkJ CQkJCQkgICBSZXBsaWNhdGlvblNsb3QgKnMsCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBvbGRl c3RMU04sCisJCQkJCQkJCQkJICAgT2lkIGRib2lkLAorCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9u SWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCQkJICAgYm9vbCAqaW52YWxpZGF0 ZWQpOworc3RhdGljIGlubGluZSBib29sIFNsb3RJbmFjdGl2ZVRpbWVvdXRDaGVja0FsbG93ZWQo UmVwbGljYXRpb25TbG90ICpzKTsKKwogLyogaW50ZXJuYWwgcGVyc2lzdGVuY3kgZnVuY3Rpb25z ICovCiBzdGF0aWMgdm9pZCBSZXN0b3JlU2xvdEZyb21EaXNrKGNvbnN0IGNoYXIgKm5hbWUpOwog c3RhdGljIHZvaWQgQ3JlYXRlU2xvdE9uRGlzayhSZXBsaWNhdGlvblNsb3QgKnNsb3QpOwpAQCAt NTM1LDkgKzU0NSwxMiBAQCBSZXBsaWNhdGlvblNsb3ROYW1lKGludCBpbmRleCwgTmFtZSBuYW1l KQogICoKICAqIEFuIGVycm9yIGlzIHJhaXNlZCBpZiBub3dhaXQgaXMgdHJ1ZSBhbmQgdGhlIHNs b3QgaXMgY3VycmVudGx5IGluIHVzZS4gSWYKICAqIG5vd2FpdCBpcyBmYWxzZSwgd2Ugc2xlZXAg dW50aWwgdGhlIHNsb3QgaXMgcmVsZWFzZWQgYnkgdGhlIG93bmluZyBwcm9jZXNzLgorICoKKyAq IEFuIGVycm9yIGlzIHJhaXNlZCBpZiBlcnJvcl9pZl9pbnZhbGlkIGlzIHRydWUgYW5kIHRoZSBz bG90IGhhcyBiZWVuCisgKiBpbnZhbGlkYXRlZCBwcmV2aW91c2x5LgogICovCiB2b2lkCi1SZXBs aWNhdGlvblNsb3RBY3F1aXJlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbm93YWl0KQorUmVwbGlj YXRpb25TbG90QWNxdWlyZShjb25zdCBjaGFyICpuYW1lLCBib29sIG5vd2FpdCwgYm9vbCBlcnJv cl9pZl9pbnZhbGlkKQogewogCVJlcGxpY2F0aW9uU2xvdCAqczsKIAlpbnQJCQlhY3RpdmVfcGlk OwpAQCAtNjE1LDYgKzYyOCwyMSBAQCByZXRyeToKIAkvKiBXZSBtYWRlIHRoaXMgc2xvdCBhY3Rp dmUsIHNvIGl0J3Mgb3VycyBub3cuICovCiAJTXlSZXBsaWNhdGlvblNsb3QgPSBzOwogCisJLyoK KwkgKiBBbiBlcnJvciBpcyByYWlzZWQgaWYgZXJyb3JfaWZfaW52YWxpZCBpcyB0cnVlIGFuZCB0 aGUgc2xvdCBoYXMgYmVlbgorCSAqIGludmFsaWRhdGVkIHByZXZpb3VzbHkuCisJICovCisJaWYg KGVycm9yX2lmX2ludmFsaWQgJiYgcy0+ZGF0YS5pbnZhbGlkYXRlZCA9PSBSU19JTlZBTF9JTkFD VElWRV9USU1FT1VUKQorCXsKKwkJQXNzZXJ0KHMtPmluYWN0aXZlX3NpbmNlID4gMCk7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJ U0lURV9TVEFURSksCisJCQkJIGVycm1zZygiY2FuIG5vIGxvbmdlciBnZXQgY2hhbmdlcyBmcm9t IHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIiwKKwkJCQkJCU5hbWVTdHIocy0+ZGF0YS5uYW1lKSks CisJCQkJIGVycmRldGFpbCgiVGhpcyBzbG90IGhhcyBiZWVuIGludmFsaWRhdGVkIGJlY2F1c2Ug aXQgd2FzIGluYWN0aXZlIGZvciBsb25nZXIgdGhhbiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlY2lm aWVkIGJ5IFwiJXNcIi4iLAorCQkJCQkJICAgInJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGlt ZW91dC4iKSkpOworCX0KKwogCS8qCiAJICogVGhlIGNhbGwgdG8gcGdzdGF0X2FjcXVpcmVfcmVw bHNsb3QoKSBwcm90ZWN0cyBhZ2FpbnN0IHN0YXRzIGZvciBhCiAJICogZGlmZmVyZW50IHNsb3Qs IGZyb20gYmVmb3JlIGEgcmVzdGFydCBvciBzdWNoLCBiZWluZyBwcmVzZW50IGR1cmluZwpAQCAt NzAzLDE2ICs3MzEsMTIgQEAgUmVwbGljYXRpb25TbG90UmVsZWFzZSh2b2lkKQogCQkgKi8KIAkJ U3BpbkxvY2tBY3F1aXJlKCZzbG90LT5tdXRleCk7CiAJCXNsb3QtPmFjdGl2ZV9waWQgPSAwOwot CQlzbG90LT5pbmFjdGl2ZV9zaW5jZSA9IG5vdzsKKwkJUmVwbGljYXRpb25TbG90U2V0SW5hY3Rp dmVTaW5jZShzbG90LCAmbm93LCBmYWxzZSk7CiAJCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+bXV0 ZXgpOwogCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmc2xvdC0+YWN0aXZlX2N2KTsKIAl9 CiAJZWxzZQotCXsKLQkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5tdXRleCk7Ci0JCXNsb3QtPmlu YWN0aXZlX3NpbmNlID0gbm93OwotCQlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPm11dGV4KTsKLQl9 CisJCVJlcGxpY2F0aW9uU2xvdFNldEluYWN0aXZlU2luY2Uoc2xvdCwgJm5vdywgdHJ1ZSk7CiAK IAlNeVJlcGxpY2F0aW9uU2xvdCA9IE5VTEw7CiAKQEAgLTc4NSw3ICs4MDksNyBAQCBSZXBsaWNh dGlvblNsb3REcm9wKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbm93YWl0KQogewogCUFzc2VydChN eVJlcGxpY2F0aW9uU2xvdCA9PSBOVUxMKTsKIAotCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUobmFt ZSwgbm93YWl0KTsKKwlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKG5hbWUsIG5vd2FpdCwgZmFsc2Up OwogCiAJLyoKIAkgKiBEbyBub3QgYWxsb3cgdXNlcnMgdG8gZHJvcCB0aGUgc2xvdHMgd2hpY2gg YXJlIGN1cnJlbnRseSBiZWluZyBzeW5jZWQKQEAgLTgxMiw3ICs4MzYsNyBAQCBSZXBsaWNhdGlv blNsb3RBbHRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBib29sICpmYWlsb3ZlciwKIAlBc3Nl cnQoTXlSZXBsaWNhdGlvblNsb3QgPT0gTlVMTCk7CiAJQXNzZXJ0KGZhaWxvdmVyIHx8IHR3b19w aGFzZSk7CiAKLQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKG5hbWUsIGZhbHNlKTsKKwlSZXBsaWNh dGlvblNsb3RBY3F1aXJlKG5hbWUsIGZhbHNlLCB0cnVlKTsKIAogCWlmIChTbG90SXNQaHlzaWNh bChNeVJlcGxpY2F0aW9uU2xvdCkpCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xNTAxLDcgKzE1MjUs OCBAQCBSZXBvcnRTbG90SW52YWxpZGF0aW9uKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNh dXNlIGNhdXNlLAogCQkJCQkgICBOYW1lRGF0YSBzbG90bmFtZSwKIAkJCQkJICAgWExvZ1JlY1B0 ciByZXN0YXJ0X2xzbiwKIAkJCQkJICAgWExvZ1JlY1B0ciBvbGRlc3RMU04sCi0JCQkJCSAgIFRy YW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24pCisJCQkJCSAgIFRyYW5zYWN0aW9u SWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCSAgIFRpbWVzdGFtcFR6IGluYWN0aXZl X3NpbmNlKQogewogCVN0cmluZ0luZm9EYXRhIGVycl9kZXRhaWw7CiAJYm9vbAkJaGludCA9IGZh bHNlOwpAQCAtMTUzMSw2ICsxNTU2LDE1IEBAIFJlcG9ydFNsb3RJbnZhbGlkYXRpb24oUmVwbGlj YXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCWNhc2UgUlNfSU5WQUxfV0FMX0xF VkVMOgogCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZXJyX2RldGFpbCwgXygiTG9naWNhbCBk ZWNvZGluZyBvbiBzdGFuZGJ5IHJlcXVpcmVzIFwid2FsX2xldmVsXCIgPj0gXCJsb2dpY2FsXCIg b24gdGhlIHByaW1hcnkgc2VydmVyLiIpKTsKIAkJCWJyZWFrOworCisJCWNhc2UgUlNfSU5WQUxf SU5BQ1RJVkVfVElNRU9VVDoKKwkJCUFzc2VydChpbmFjdGl2ZV9zaW5jZSA+IDApOworCQkJYXBw ZW5kU3RyaW5nSW5mbygmZXJyX2RldGFpbCwKKwkJCQkJCQkgXygiVGhlIHNsb3QgaGFzIGJlZW4g aW5hY3RpdmUgc2luY2UgJXMgZm9yIGxvbmdlciB0aGFuIHRoZSBhbW91bnQgb2YgdGltZSBzcGVj aWZpZWQgYnkgXCIlc1wiLiIpLAorCQkJCQkJCSB0aW1lc3RhbXB0el90b19zdHIoaW5hY3RpdmVf c2luY2UpLAorCQkJCQkJCSAicmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0Iik7CisJ CQlicmVhazsKKwogCQljYXNlIFJTX0lOVkFMX05PTkU6CiAJCQlwZ191bnJlYWNoYWJsZSgpOwog CX0KQEAgLTE1NDcsNiArMTU4MSwyOCBAQCBSZXBvcnRTbG90SW52YWxpZGF0aW9uKFJlcGxpY2F0 aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCXBmcmVlKGVycl9kZXRhaWwuZGF0YSk7 CiB9CiAKKy8qCisgKiBJcyB0aGlzIHJlcGxpY2F0aW9uIHNsb3QgYWxsb3dlZCBmb3IgaW5hY3Rp dmUgdGltZW91dCBpbnZhbGlkYXRpb24gY2hlY2s/CisgKgorICogQ2hlY2sgaWYgaW5hY3RpdmUg dGltZW91dCBpbnZhbGlkYXRpb24gbWVjaGFuaXNtIGlzIGRpc2FibGVkIG9yIHNsb3QgaXMKKyAq IGN1cnJlbnRseSBiZWluZyB1c2VkIG9yIHNlcnZlciBpcyBpbiByZWNvdmVyeSBtb2RlIG9yIHNs b3Qgb24gc3RhbmRieSBpcworICogY3VycmVudGx5IGJlaW5nIHN5bmNlZCBmcm9tIHRoZSBwcmlt YXJ5LgorICoKKyAqIE5vdGUgdGhhdCB0aGUgaW5hY3RpdmUgdGltZW91dCBpbnZhbGlkYXRpb24g bWVjaGFuaXNtIGlzIG5vdAorICogYXBwbGljYWJsZSBmb3Igc2xvdHMgb24gdGhlIHN0YW5kYnkg c2VydmVyIHRoYXQgYXJlIGJlaW5nIHN5bmNlZAorICogZnJvbSB0aGUgcHJpbWFyeSBzZXJ2ZXIg KGkuZS4sIHN0YW5kYnkgc2xvdHMgaGF2aW5nICdzeW5jZWQnIGZpZWxkICd0cnVlJykuCisgKiBT eW5jZWQgc2xvdHMgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGluYWN0aXZlIGJlY2F1c2Ug dGhleSBkb24ndAorICogcGVyZm9ybSBsb2dpY2FsIGRlY29kaW5nIHRvIHByb2R1Y2UgY2hhbmdl cy4KKyAqLworc3RhdGljIGlubGluZSBib29sCitTbG90SW5hY3RpdmVUaW1lb3V0Q2hlY2tBbGxv d2VkKFJlcGxpY2F0aW9uU2xvdCAqcykKK3sKKwlyZXR1cm4gKHJlcGxpY2F0aW9uX3Nsb3RfaW5h Y3RpdmVfdGltZW91dCA+IDAgJiYKKwkJCXMtPmluYWN0aXZlX3NpbmNlID4gMCAmJgorCQkJIVJl Y292ZXJ5SW5Qcm9ncmVzcygpICYmCisJCQkhcy0+ZGF0YS5zeW5jZWQpOworfQorCiAvKgogICog SGVscGVyIGZvciBJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzCiAgKgpAQCAtMTU3 NCw2ICsxNjMwLDcgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJlcGxpY2F0aW9u U2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCVRyYW5zYWN0aW9uSWQgaW5pdGlhbF9jYXRh bG9nX2VmZmVjdGl2ZV94bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJWExvZ1JlY1B0cglp bml0aWFsX3Jlc3RhcnRfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJUmVwbGljYXRpb25TbG90 SW52YWxpZGF0aW9uQ2F1c2UgaW52YWxpZGF0aW9uX2NhdXNlX3ByZXYgUEdfVVNFRF9GT1JfQVNT RVJUU19PTkxZID0gUlNfSU5WQUxfTk9ORTsKKwlUaW1lc3RhbXBUeiBpbmFjdGl2ZV9zaW5jZSA9 IDA7CiAKIAlmb3IgKDs7KQogCXsKQEAgLTE1ODEsNiArMTYzOCw3IEBAIEludmFsaWRhdGVQb3Nz aWJseU9ic29sZXRlU2xvdChSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwK IAkJTmFtZURhdGEJc2xvdG5hbWU7CiAJCWludAkJCWFjdGl2ZV9waWQgPSAwOwogCQlSZXBsaWNh dGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBpbnZhbGlkYXRpb25fY2F1c2UgPSBSU19JTlZBTF9O T05FOworCQlUaW1lc3RhbXBUeiBub3cgPSAwOwogCiAJCUFzc2VydChMV0xvY2tIZWxkQnlNZUlu TW9kZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hBUkVEKSk7CiAKQEAgLTE1OTEs NiArMTY0OSwxNiBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QoUmVwbGljYXRpb25T bG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQlicmVhazsKIAkJfQogCisJCWlmIChjYXVz ZSA9PSBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUICYmCisJCQlTbG90SW5hY3RpdmVUaW1lb3V0 Q2hlY2tBbGxvd2VkKHMpKQorCQl7CisJCQkvKgorCQkJICogV2UgZ2V0IHRoZSBjdXJyZW50IHRp bWUgYmVmb3JlaGFuZCB0byBhdm9pZCBzeXN0ZW0gY2FsbCB3aGlsZQorCQkJICogaG9sZGluZyB0 aGUgc3BpbmxvY2suCisJCQkgKi8KKwkJCW5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwkJ fQorCiAJCS8qCiAJCSAqIENoZWNrIGlmIHRoZSBzbG90IG5lZWRzIHRvIGJlIGludmFsaWRhdGVk LiBJZiBpdCBuZWVkcyB0byBiZQogCQkgKiBpbnZhbGlkYXRlZCwgYW5kIGlzIG5vdCBjdXJyZW50 bHkgYWNxdWlyZWQsIGFjcXVpcmUgaXQgYW5kIG1hcmsgaXQKQEAgLTE2NDQsNiArMTcxMiwyOCBA QCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QoUmVwbGljYXRpb25TbG90SW52YWxpZGF0 aW9uQ2F1c2UgY2F1c2UsCiAJCQkJCWlmIChTbG90SXNMb2dpY2FsKHMpKQogCQkJCQkJaW52YWxp ZGF0aW9uX2NhdXNlID0gY2F1c2U7CiAJCQkJCWJyZWFrOworCQkJCWNhc2UgUlNfSU5WQUxfSU5B Q1RJVkVfVElNRU9VVDoKKworCQkJCQlpZiAoIVNsb3RJbmFjdGl2ZVRpbWVvdXRDaGVja0FsbG93 ZWQocykpCisJCQkJCQlicmVhazsKKworCQkJCQkvKgorCQkJCQkgKiBDaGVjayBpZiB0aGUgc2xv dCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBkdWUgdG8KKwkJCQkJICogcmVwbGljYXRpb25fc2xv dF9pbmFjdGl2ZV90aW1lb3V0IEdVQy4KKwkJCQkJICovCisJCQkJCWlmIChUaW1lc3RhbXBEaWZm ZXJlbmNlRXhjZWVkcyhzLT5pbmFjdGl2ZV9zaW5jZSwgbm93LAorCQkJCQkJCQkJCQkJICAgcmVw bGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0ICogMTAwMCkpCisJCQkJCXsKKwkJCQkJCWlu dmFsaWRhdGlvbl9jYXVzZSA9IGNhdXNlOworCQkJCQkJaW5hY3RpdmVfc2luY2UgPSBzLT5pbmFj dGl2ZV9zaW5jZTsKKworCQkJCQkJLyoKKwkJCQkJCSAqIEludmFsaWRhdGlvbiBkdWUgdG8gaW5h Y3RpdmUgdGltZW91dCBpbXBsaWVzIHRoYXQKKwkJCQkJCSAqIG5vIG9uZSBpcyB1c2luZyB0aGUg c2xvdC4KKwkJCQkJCSAqLworCQkJCQkJQXNzZXJ0KHMtPmFjdGl2ZV9waWQgPT0gMCk7CisJCQkJ CX0KKwkJCQkJYnJlYWs7CiAJCQkJY2FzZSBSU19JTlZBTF9OT05FOgogCQkJCQlwZ191bnJlYWNo YWJsZSgpOwogCQkJfQpAQCAtMTY2OSwxMSArMTc1OSwxMyBAQCBJbnZhbGlkYXRlUG9zc2libHlP YnNvbGV0ZVNsb3QoUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCWFj dGl2ZV9waWQgPSBzLT5hY3RpdmVfcGlkOwogCiAJCS8qCi0JCSAqIElmIHRoZSBzbG90IGNhbiBi ZSBhY3F1aXJlZCwgZG8gc28gYW5kIG1hcmsgaXQgaW52YWxpZGF0ZWQKLQkJICogaW1tZWRpYXRl bHkuICBPdGhlcndpc2Ugd2UnbGwgc2lnbmFsIHRoZSBvd25pbmcgcHJvY2VzcywgYmVsb3csIGFu ZAotCQkgKiByZXRyeS4KKwkJICogSWYgdGhlIHNsb3QgY2FuIGJlIGFjcXVpcmVkLCBkbyBzbyBh bmQgbWFyayBpdCBhcyBpbnZhbGlkYXRlZC4gSWYKKwkJICogdGhlIHNsb3QgaXMgYWxyZWFkeSBv dXJzLCBtYXJrIGl0IGFzIGludmFsaWRhdGVkLiBPdGhlcndpc2UsIHdlJ2xsCisJCSAqIHNpZ25h bCB0aGUgb3duaW5nIHByb2Nlc3MgYmVsb3cgYW5kIHJldHJ5LgogCQkgKi8KLQkJaWYgKGFjdGl2 ZV9waWQgPT0gMCkKKwkJaWYgKGFjdGl2ZV9waWQgPT0gMCB8fAorCQkJKE15UmVwbGljYXRpb25T bG90ID09IHMgJiYKKwkJCSBhY3RpdmVfcGlkID09IE15UHJvY1BpZCkpCiAJCXsKIAkJCU15UmVw bGljYXRpb25TbG90ID0gczsKIAkJCXMtPmFjdGl2ZV9waWQgPSBNeVByb2NQaWQ7CkBAIC0xNzI4 LDcgKzE4MjAsOCBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QoUmVwbGljYXRpb25T bG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQl7CiAJCQkJUmVwb3J0U2xvdEludmFsaWRh dGlvbihpbnZhbGlkYXRpb25fY2F1c2UsIHRydWUsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCQkgICBz bG90bmFtZSwgcmVzdGFydF9sc24sCi0JCQkJCQkJCQkgICBvbGRlc3RMU04sIHNuYXBzaG90Q29u ZmxpY3RIb3Jpem9uKTsKKwkJCQkJCQkJCSAgIG9sZGVzdExTTiwgc25hcHNob3RDb25mbGljdEhv cml6b24sCisJCQkJCQkJCQkgICBpbmFjdGl2ZV9zaW5jZSk7CiAKIAkJCQlpZiAoTXlCYWNrZW5k VHlwZSA9PSBCX1NUQVJUVVApCiAJCQkJCSh2b2lkKSBTZW5kUHJvY1NpZ25hbChhY3RpdmVfcGlk LApAQCAtMTc3NCw3ICsxODY3LDggQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJl cGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCiAJCQlSZXBvcnRTbG90SW52 YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwgZmFsc2UsIGFjdGl2ZV9waWQsCiAJCQkJCQkJ CSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwKLQkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hv dENvbmZsaWN0SG9yaXpvbik7CisJCQkJCQkJCSAgIG9sZGVzdExTTiwgc25hcHNob3RDb25mbGlj dEhvcml6b24sCisJCQkJCQkJCSAgIGluYWN0aXZlX3NpbmNlKTsKIAogCQkJLyogZG9uZSB3aXRo IHRoaXMgc2xvdCBmb3Igbm93ICovCiAJCQlicmVhazsKQEAgLTE3OTcsNiArMTg5MSw3IEBAIElu dmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25D YXVzZSBjYXVzZSwKICAqIC0gUlNfSU5WQUxfSE9SSVpPTjogcmVxdWlyZXMgYSBzbmFwc2hvdCA8 PSB0aGUgZ2l2ZW4gaG9yaXpvbiBpbiB0aGUgZ2l2ZW4KICAqICAgZGI7IGRib2lkIG1heSBiZSBJ bnZhbGlkT2lkIGZvciBzaGFyZWQgcmVsYXRpb25zCiAgKiAtIFJTX0lOVkFMX1dBTF9MRVZFTDog aXMgbG9naWNhbAorICogLSBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUOiBpbmFjdGl2ZSB0aW1l b3V0IG9jY3VycwogICoKICAqIE5CIC0gdGhpcyBydW5zIGFzIHBhcnQgb2YgY2hlY2twb2ludCwg c28gYXZvaWQgcmFpc2luZyBlcnJvcnMgaWYgcG9zc2libGUuCiAgKi8KQEAgLTE4NDksNyArMTk0 NCw4IEBAIHJlc3RhcnQ6CiB9CiAKIC8qCi0gKiBGbHVzaCBhbGwgcmVwbGljYXRpb24gc2xvdHMg dG8gZGlzay4KKyAqIEZsdXNoIGFsbCByZXBsaWNhdGlvbiBzbG90cyB0byBkaXNrLiBBbHNvLCBp bnZhbGlkYXRlIG9ic29sZXRlIHNsb3RzIGR1cmluZworICogbm9uLXNodXRkb3duIGNoZWNrcG9p bnQuCiAgKgogICogSXQgaXMgY29udmVuaWVudCB0byBmbHVzaCBkaXJ0eSByZXBsaWNhdGlvbiBz bG90cyBhdCB0aGUgdGltZSBvZiBjaGVja3BvaW50LgogICogQWRkaXRpb25hbGx5LCBpbiBjYXNl IG9mIGEgc2h1dGRvd24gY2hlY2twb2ludCwgd2UgYWxzbyBpZGVudGlmeSB0aGUgc2xvdHMKQEAg LTE5MDcsNiArMjAwMywzOCBAQCBDaGVja1BvaW50UmVwbGljYXRpb25TbG90cyhib29sIGlzX3No dXRkb3duKQogCQlTYXZlU2xvdFRvUGF0aChzLCBwYXRoLCBMT0cpOwogCX0KIAlMV0xvY2tSZWxl YXNlKFJlcGxpY2F0aW9uU2xvdEFsbG9jYXRpb25Mb2NrKTsKKworCWlmICghaXNfc2h1dGRvd24p CisJeworCQllbG9nKERFQlVHMSwgInBlcmZvcm1pbmcgcmVwbGljYXRpb24gc2xvdCBpbnZhbGlk YXRpb24gY2hlY2tzIik7CisKKwkJLyoKKwkJICogTkI6IFdlIHdpbGwgbWFrZSBhbm90aGVyIHBh c3Mgb3ZlciByZXBsaWNhdGlvbiBzbG90cyBmb3IKKwkJICogaW52YWxpZGF0aW9uIGNoZWNrcyB0 byBrZWVwIHRoZSBjb2RlIHNpbXBsZS4gVGVzdGluZyBzaG93cyB0aGF0CisJCSAqIHRoZXJlIGlz IG5vIG5vdGljZWFibGUgb3ZlcmhlYWQgKHdoZW4gY29tcGFyZWQgd2l0aCB3YWxfcmVtb3ZlZAor CQkgKiBpbnZhbGlkYXRpb24pIGV2ZW4gaWYgd2Ugd2VyZSB0byBkbyBpbmFjdGl2ZV90aW1lb3V0 IGludmFsaWRhdGlvbgorCQkgKiBvZiB0aG91c2FuZHMgb2YgcmVwbGljYXRpb24gc2xvdHMgaGVy ZS4gSWYgaXQgaXMgZXZlciBwcm92ZW4gdGhhdAorCQkgKiB0aGlzIGFzc3VtcHRpb24gaXMgd3Jv bmcsIHdlIHdpbGwgaGF2ZSB0byBwZXJmb3JtIHRoZSBpbnZhbGlkYXRpb24KKwkJICogY2hlY2tz IGluIHRoZSBhYm92ZSBmb3IgbG9vcCB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKwkJICoK KwkJICogLSBBY3F1aXJlIENvbnRyb2xMb2NrIGxvY2sgb25jZSBiZWZvcmUgdGhlIGxvb3AuCisJ CSAqCisJCSAqIC0gQ2FsbCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QgZm9yIGVhY2gg c2xvdC4KKwkJICoKKwkJICogLSBIYW5kbGUgdGhlIGNhc2VzIGluIHdoaWNoIENvbnRyb2xMb2Nr IGdldHMgcmVsZWFzZWQganVzdCBsaWtlCisJCSAqIEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0 aW9uU2xvdHMgZG9lcy4KKwkJICoKKwkJICogLSBBdm9pZCBzYXZpbmcgc2xvdCBpbmZvIHRvIGRp c2sgdHdvIHRpbWVzIGZvciBlYWNoIGludmFsaWRhdGVkCisJCSAqIHNsb3QuCisJCSAqCisJCSAq IFhYWDogU2hvdWxkIHdlIG1vdmUgaW5hY3RpdmVfdGltZW91dCBpbnZhbGlkYXRpb24gY2hlY2sg Y2xvc2VyIHRvCisJCSAqIHdhbF9yZW1vdmVkIGluIENyZWF0ZUNoZWNrUG9pbnQgYW5kIENyZWF0 ZVJlc3RhcnRQb2ludD8KKwkJICovCisJCUludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xv dHMoUlNfSU5WQUxfSU5BQ1RJVkVfVElNRU9VVCwKKwkJCQkJCQkJCQkgICAwLAorCQkJCQkJCQkJ CSAgIEludmFsaWRPaWQsCisJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCX0K IH0KIAogLyoKQEAgLTIyMDEsNiArMjMyOSw3IEBAIFJlc3RvcmVTbG90RnJvbURpc2soY29uc3Qg Y2hhciAqbmFtZSkKIAlib29sCQlyZXN0b3JlZCA9IGZhbHNlOwogCWludAkJCXJlYWRCeXRlczsK IAlwZ19jcmMzMmMJY2hlY2tzdW07CisJVGltZXN0YW1wVHogbm93ID0gMDsKIAogCS8qIG5vIG5l ZWQgdG8gbG9jayBoZXJlLCBubyBjb25jdXJyZW50IGFjY2VzcyBhbGxvd2VkIHlldCAqLwogCkBA IC0yMzg4LDEyICsyNTE3LDE2IEBAIFJlc3RvcmVTbG90RnJvbURpc2soY29uc3QgY2hhciAqbmFt ZSkKIAkJc2xvdC0+aW5fdXNlID0gdHJ1ZTsKIAkJc2xvdC0+YWN0aXZlX3BpZCA9IDA7CiAKKwkJ LyogVXNlIHRoZSBzYW1lIGluYWN0aXZlX3NpbmNlIHRpbWUgZm9yIGFsbCB0aGUgc2xvdHMuICov CisJCWlmIChub3cgPT0gMCkKKwkJCW5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwogCQkv KgogCQkgKiBTZXQgdGhlIHRpbWUgc2luY2UgdGhlIHNsb3QgaGFzIGJlY29tZSBpbmFjdGl2ZSBh ZnRlciBsb2FkaW5nIHRoZQogCQkgKiBzbG90IGZyb20gdGhlIGRpc2sgaW50byBtZW1vcnkuIFdo b2V2ZXIgYWNxdWlyZXMgdGhlIHNsb3QgaS5lLgogCQkgKiBtYWtlcyB0aGUgc2xvdCBhY3RpdmUg d2lsbCByZXNldCBpdC4KIAkJICovCi0JCXNsb3QtPmluYWN0aXZlX3NpbmNlID0gR2V0Q3VycmVu dFRpbWVzdGFtcCgpOworCQlSZXBsaWNhdGlvblNsb3RTZXRJbmFjdGl2ZVNpbmNlKHNsb3QsICZu b3csIGZhbHNlKTsKIAogCQlyZXN0b3JlZCA9IHRydWU7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9zbG90ZnVuY3MuYwppbmRleCBjN2JmYmIxNWUwLi5iMWI3YjA3NWJkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9zbG90ZnVuY3MuYwpAQCAtNTQwLDcgKzU0MCw3IEBAIHBnX3JlcGxpY2F0aW9u X3Nsb3RfYWR2YW5jZShQR19GVU5DVElPTl9BUkdTKQogCQltb3ZldG8gPSBNaW4obW92ZXRvLCBH ZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpKTsKIAogCS8qIEFjcXVpcmUgdGhlIHNsb3Qgc28gd2Ug Im93biIgaXQgKi8KLQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKnNsb3RuYW1lKSwg dHJ1ZSk7CisJUmVwbGljYXRpb25TbG90QWNxdWlyZShOYW1lU3RyKCpzbG90bmFtZSksIHRydWUs IHRydWUpOwogCiAJLyogQSBzbG90IHdob3NlIHJlc3RhcnRfbHNuIGhhcyBuZXZlciBiZWVuIHJl c2VydmVkIGNhbm5vdCBiZSBhZHZhbmNlZCAqLwogCWlmIChYTG9nUmVjUHRySXNJbnZhbGlkKE15 UmVwbGljYXRpb25TbG90LT5kYXRhLnJlc3RhcnRfbHNuKSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fs c2VuZGVyLmMKaW5kZXggYzVmMTAwOWYzNy4uNjFhMGUzODcxNSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2Fsc2VuZGVyLmMKQEAgLTg0NCw3ICs4NDQsNyBAQCBTdGFydFJlcGxpY2F0aW9uKFN0YXJ0 UmVwbGljYXRpb25DbWQgKmNtZCkKIAogCWlmIChjbWQtPnNsb3RuYW1lKQogCXsKLQkJUmVwbGlj YXRpb25TbG90QWNxdWlyZShjbWQtPnNsb3RuYW1lLCB0cnVlKTsKKwkJUmVwbGljYXRpb25TbG90 QWNxdWlyZShjbWQtPnNsb3RuYW1lLCB0cnVlLCB0cnVlKTsKIAkJaWYgKFNsb3RJc0xvZ2ljYWwo TXlSZXBsaWNhdGlvblNsb3QpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJS Q09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCkBAIC0xNDYyLDcgKzE0NjIs NyBAQCBTdGFydExvZ2ljYWxSZXBsaWNhdGlvbihTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQpCiAK IAlBc3NlcnQoIU15UmVwbGljYXRpb25TbG90KTsKIAotCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUo Y21kLT5zbG90bmFtZSwgdHJ1ZSk7CisJUmVwbGljYXRpb25TbG90QWNxdWlyZShjbWQtPnNsb3Ru YW1lLCB0cnVlLCB0cnVlKTsKIAogCS8qCiAJICogRm9yY2UgYSBkaXNjb25uZWN0LCBzbyB0aGF0 IHRoZSBkZWNvZGluZyBjb2RlIGRvZXNuJ3QgbmVlZCB0byBjYXJlCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcGdfdXBncmFkZV9zdXBwb3J0LmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdfdXBncmFkZV9zdXBwb3J0LmMKaW5kZXggYzU0YjA4ZmUxOC4uODI5NTZkNThkMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX3VwZ3JhZGVfc3VwcG9ydC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ191cGdyYWRlX3N1cHBvcnQuYwpAQCAtMjk5LDcg KzI5OSw3IEBAIGJpbmFyeV91cGdyYWRlX2xvZ2ljYWxfc2xvdF9oYXNfY2F1Z2h0X3VwKFBHX0ZV TkNUSU9OX0FSR1MpCiAJc2xvdF9uYW1lID0gUEdfR0VUQVJHX05BTUUoMCk7CiAKIAkvKiBBY3F1 aXJlIHRoZSBnaXZlbiBzbG90ICovCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShOYW1lU3RyKCpz bG90X25hbWUpLCB0cnVlKTsKKwlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKnNsb3Rf bmFtZSksIHRydWUsIGZhbHNlKTsKIAogCUFzc2VydChTbG90SXNMb2dpY2FsKE15UmVwbGljYXRp b25TbG90KSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggNjg2MzA5ZGI1 OC4uNWUyN2NkMzI3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTMwMjgs NiArMzAyOCwxOCBAQCBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJ TlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsicmVwbGljYXRpb25fc2xvdF9pbmFjdGl2 ZV90aW1lb3V0IiwgUEdDX1NJR0hVUCwgUkVQTElDQVRJT05fU0VORElORywKKwkJCWdldHRleHRf bm9vcCgiU2V0cyB0aGUgYW1vdW50IG9mIHRpbWUgYSByZXBsaWNhdGlvbiBzbG90IGNhbiByZW1h aW4gaW5hY3RpdmUgYmVmb3JlICIKKwkJCQkJCSAiaXQgd2lsbCBiZSBpbnZhbGlkYXRlZC4iKSwK KwkJCU5VTEwsCisJCQlHVUNfVU5JVF9TCisJCX0sCisJCSZyZXBsaWNhdGlvbl9zbG90X2luYWN0 aXZlX3RpbWVvdXQsCisJCTAsIDAsIElOVF9NQVgsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAor CiAJewogCQl7ImNvbW1pdF9kZWxheSIsIFBHQ19TVVNFVCwgV0FMX1NFVFRJTkdTLAogCQkJZ2V0 dGV4dF9ub29wKCJTZXRzIHRoZSBkZWxheSBpbiBtaWNyb3NlY29uZHMgYmV0d2VlbiB0cmFuc2Fj dGlvbiBjb21taXQgYW5kICIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5j b25mLnNhbXBsZQppbmRleCA2NjdlMGRjNDBhLi5kZWNhM2E0YWViIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zMzUsNiArMzM1LDcgQEAK ICN3YWxfc2VuZGVyX3RpbWVvdXQgPSA2MHMJIyBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMK ICN0cmFja19jb21taXRfdGltZXN0YW1wID0gb2ZmCSMgY29sbGVjdCB0aW1lc3RhbXAgb2YgdHJh bnNhY3Rpb24gY29tbWl0CiAJCQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisjcmVwbGlj YXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0ID0gMAkjIGluIHNlY29uZHM7IDAgZGlzYWJsZXMK IAogIyAtIFByaW1hcnkgU2VydmVyIC0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCmluZGV4IDQ1NTgy Y2Y5ZDguLjI3YzRmMTA3ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Ns b3QuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKQEAgLTU2LDYgKzU2LDgg QEAgdHlwZWRlZiBlbnVtIFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlCiAJUlNfSU5W QUxfSE9SSVpPTiwKIAkvKiB3YWxfbGV2ZWwgaW5zdWZmaWNpZW50IGZvciBzbG90ICovCiAJUlNf SU5WQUxfV0FMX0xFVkVMLAorCS8qIGluYWN0aXZlIHNsb3QgdGltZW91dCBoYXMgb2NjdXJyZWQg Ki8KKwlSU19JTlZBTF9JTkFDVElWRV9USU1FT1VULAogfSBSZXBsaWNhdGlvblNsb3RJbnZhbGlk YXRpb25DYXVzZTsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IFNsb3RJ bnZhbGlkYXRpb25DYXVzZXNbXTsKQEAgLTIyNCw2ICsyMjYsMjQgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVwbGljYXRpb25TbG90Q3RsRGF0YQogCVJlcGxpY2F0aW9uU2xvdCByZXBsaWNhdGlvbl9zbG90 c1sxXTsKIH0gUmVwbGljYXRpb25TbG90Q3RsRGF0YTsKIAorLyoKKyAqIFNldCBzbG90J3MgaW5h Y3RpdmVfc2luY2UgcHJvcGVydHkgdW5sZXNzIGl0IHdhcyBwcmV2aW91c2x5IGludmFsaWRhdGVk IGR1ZQorICogdG8gaW5hY3RpdmUgdGltZW91dC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitS ZXBsaWNhdGlvblNsb3RTZXRJbmFjdGl2ZVNpbmNlKFJlcGxpY2F0aW9uU2xvdCAqcywgVGltZXN0 YW1wVHogKm5vdywKKwkJCQkJCQkJYm9vbCBhY3F1aXJlX2xvY2spCit7CisJaWYgKGFjcXVpcmVf bG9jaykKKwkJU3BpbkxvY2tBY3F1aXJlKCZzLT5tdXRleCk7CisKKwlpZiAocy0+ZGF0YS5pbnZh bGlkYXRlZCAhPSBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUKQorCQlzLT5pbmFjdGl2ZV9zaW5j ZSA9ICpub3c7CisKKwlpZiAoYWNxdWlyZV9sb2NrKQorCQlTcGluTG9ja1JlbGVhc2UoJnMtPm11 dGV4KTsKK30KKwogLyoKICAqIFBvaW50ZXJzIHRvIHNoYXJlZCBtZW1vcnkKICAqLwpAQCAtMjMz LDYgKzI1Myw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBSZXBsaWNhdGlvblNsb3QgKk15UmVwbGlj YXRpb25TbG90OwogLyogR1VDcyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcmVwbGlj YXRpb25fc2xvdHM7CiBleHRlcm4gUEdETExJTVBPUlQgY2hhciAqc3luY2hyb25pemVkX3N0YW5k Ynlfc2xvdHM7CitleHRlcm4gUEdETExJTVBPUlQgaW50IHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3Rp dmVfdGltZW91dDsKIAogLyogc2htZW0gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCiBleHRl cm4gU2l6ZSBSZXBsaWNhdGlvblNsb3RzU2htZW1TaXplKHZvaWQpOwpAQCAtMjQ5LDcgKzI3MCw4 IEBAIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BBY3F1aXJlZCh2b2lkKTsKIGV4dGVy biB2b2lkIFJlcGxpY2F0aW9uU2xvdEFsdGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGJvb2wg KmZhaWxvdmVyLAogCQkJCQkJCQkgY29uc3QgYm9vbCAqdHdvX3BoYXNlKTsKIAotZXh0ZXJuIHZv aWQgUmVwbGljYXRpb25TbG90QWNxdWlyZShjb25zdCBjaGFyICpuYW1lLCBib29sIG5vd2FpdCk7 CitleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNvbnN0IGNoYXIgKm5hbWUsIGJv b2wgbm93YWl0LAorCQkJCQkJCQkgICBib29sIGVycm9yX2lmX2ludmFsaWQpOwogZXh0ZXJuIHZv aWQgUmVwbGljYXRpb25TbG90UmVsZWFzZSh2b2lkKTsKIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9u U2xvdENsZWFudXAoYm9vbCBzeW5jZWRfb25seSk7CiBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNs b3RTYXZlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAppbmRleCA3MTI5MjRjMmZhLi5jNDVhNTEw NmY0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZApAQCAtNTIsNiArNTIsNyBAQCB0ZXN0cyArPSB7CiAg ICAgICAndC8wNDFfY2hlY2twb2ludF9hdF9wcm9tb3RlLnBsJywKICAgICAgICd0LzA0Ml9sb3df bGV2ZWxfYmFja3VwLnBsJywKICAgICAgICd0LzA0M193YWxfcmVwbGF5X3dhaXQucGwnLAorICAg ICAgJ3QvMDUwX2ludmFsaWRhdGVfc2xvdHMucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1MF9pbnZhbGlkYXRlX3Nsb3RzLnBsIGIvc3JjL3Rl c3QvcmVjb3ZlcnkvdC8wNTBfaW52YWxpZGF0ZV9zbG90cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi42NjlkNmNjYzdhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVjb3ZlcnkvdC8wNTBfaW52YWxpZGF0ZV9zbG90cy5wbApAQCAtMCwwICsxLDMyMSBAQAor IyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisKKyMgVGVzdCBmb3IgcmVwbGljYXRpb24gc2xvdHMgaW52YWxpZGF0aW9uCit1c2Ugc3RyaWN0 OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBUZXN0OjpNb3JlOwor dXNlIFRpbWU6OkhpUmVzIHF3KHVzbGVlcCk7CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMg VGVzdGNhc2Ugc3RhcnQKKyMKKyMgSW52YWxpZGF0ZSBzdHJlYW1pbmcgc3RhbmRieSBzbG90IGFu ZCBsb2dpY2FsIGZhaWxvdmVyIHNsb3Qgb24gcHJpbWFyeSBkdWUgdG8KKyMgaW5hY3RpdmUgdGlt ZW91dC4gQWxzbywgY2hlY2sgbG9naWNhbCBmYWlsb3ZlciBzbG90IHN5bmNlZCB0byBzdGFuZGJ5 IGZyb20KKyMgcHJpbWFyeSBkb2Vzbid0IGludmFsaWRhdGUgb24gaXRzIG93biwgYnV0IGdldHMg dGhlIGludmFsaWRhdGVkIHN0YXRlIGZyb20gdGhlCisjIHByaW1hcnkuCisKKyMgSW5pdGlhbGl6 ZSBwcmltYXJ5CitteSAkcHJpbWFyeSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn cHJpbWFyeScpOworJHByaW1hcnktPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcp OworCisjIEF2b2lkIHVucHJlZGljdGFiaWxpdHkKKyRwcmltYXJ5LT5hcHBlbmRfY29uZigKKwkn cG9zdGdyZXNxbC5jb25mJywgcXF7CitjaGVja3BvaW50X3RpbWVvdXQgPSAxaAorYXV0b3ZhY3V1 bSA9IG9mZgorfSk7CiskcHJpbWFyeS0+c3RhcnQ7CisKKyMgVGFrZSBiYWNrdXAKK215ICRiYWNr dXBfbmFtZSA9ICdteV9iYWNrdXAnOworJHByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOwor CisjIENyZWF0ZSBzdGFuZGJ5CitteSAkc3RhbmRieTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJ3N0YW5kYnkxJyk7Ciskc3RhbmRieTEtPmluaXRfZnJvbV9iYWNrdXAoJHByaW1h cnksICRiYWNrdXBfbmFtZSwgaGFzX3N0cmVhbWluZyA9PiAxKTsKKworbXkgJGNvbm5zdHIgPSAk cHJpbWFyeS0+Y29ubnN0cjsKKyRzdGFuZGJ5MS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwu Y29uZicsIHFxKAoraG90X3N0YW5kYnlfZmVlZGJhY2sgPSBvbgorcHJpbWFyeV9zbG90X25hbWUg PSAnc2Jfc2xvdDEnCitwcmltYXJ5X2Nvbm5pbmZvID0gJyRjb25uc3RyIGRibmFtZT1wb3N0Z3Jl cycKKykpOworCisjIENyZWF0ZSBzeW5jIHNsb3Qgb24gcHJpbWFyeQorJHByaW1hcnktPnBzcWwo J3Bvc3RncmVzJywKKwlxe1NFTEVDVCBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90 KCdzeW5jX3Nsb3QxJywgJ3Rlc3RfZGVjb2RpbmcnLCBmYWxzZSwgZmFsc2UsIHRydWUpO30KKyk7 CisKKyRwcmltYXJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAgU0VMRUNUIHBn X2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KHNsb3RfbmFtZSA6PSAnc2Jfc2xvdDEn LCBpbW1lZGlhdGVseV9yZXNlcnZlIDo9IHRydWUpOworXSk7CisKKyRzdGFuZGJ5MS0+c3RhcnQ7 CisKKyMgV2FpdCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2ggZGF0YQorJHByaW1h cnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnkxKTsKKworIyBTeW5jIHByaW1hcnkgc2xvdCB0 byBzdGFuZGJ5Ciskc3RhbmRieTEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX3N5 bmNfcmVwbGljYXRpb25fc2xvdHMoKTsiKTsKKworIyBDb25maXJtIHRoYXQgbG9naWNhbCBmYWls b3ZlciBzbG90IGlzIGNyZWF0ZWQgb24gc3RhbmRieQoraXMoICRzdGFuZGJ5MS0+c2FmZV9wc3Fs KAorCQkncG9zdGdyZXMnLAorCQlxe1NFTEVDVCBjb3VudCgqKSA9IDEgRlJPTSBwZ19yZXBsaWNh dGlvbl9zbG90cworCQkgIFdIRVJFIHNsb3RfbmFtZSA9ICdzeW5jX3Nsb3QxJyBBTkQgc3luY2Vk IEFORCBOT1QgdGVtcG9yYXJ5O30KKwkpLAorCSJ0IiwKKwknbG9naWNhbCBzbG90IHN5bmNfc2xv dDEgaGFzIHN5bmNlZCBhcyB0cnVlIG9uIHN0YW5kYnknKTsKKworbXkgJGxvZ3N0YXJ0ID0gLXMg JHByaW1hcnktPmxvZ2ZpbGU7CitteSAkaW5hY3RpdmVfdGltZW91dCA9IDE7CisKKyMgU2V0IHRp bWVvdXQgc28gdGhhdCBuZXh0IGNoZWNrcG9pbnQgd2lsbCBpbnZhbGlkYXRlIGluYWN0aXZlIHNs b3QKKyRwcmltYXJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAgQUxURVIgU1lT VEVNIFNFVCByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgVE8gJyR7aW5hY3RpdmVf dGltZW91dH1zJzsKK10pOworJHByaW1hcnktPnJlbG9hZDsKKworIyBDaGVjayBmb3IgbG9naWNh bCBmYWlsb3ZlciBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZSBvbiBwcmltYXJ5LiBOb3RlIHRoYXQK KyMgbm9ib2R5IGhhcyBhY3F1aXJlZCBzbG90IHlldCwgc28gaXQgbXVzdCBnZXQgaW52YWxpZGF0 ZWQgZHVlIHRvCisjIGluYWN0aXZlIHRpbWVvdXQuCitjaGVja19mb3Jfc2xvdF9pbnZhbGlkYXRp b24oJHByaW1hcnksICdzeW5jX3Nsb3QxJywgJGxvZ3N0YXJ0LAorCSRpbmFjdGl2ZV90aW1lb3V0 KTsKKworIyBTeW5jIHByaW1hcnkgc2xvdCB0byBzdGFuZGJ5LiBOb3RlIHRoYXQgcHJpbWFyeSBz bG90IGhhcyBhbHJlYWR5IGJlZW4KKyMgaW52YWxpZGF0ZWQgZHVlIHRvIGluYWN0aXZlIHRpbWVv dXQuIFN0YW5kYnkgbXVzdCBqdXN0IHN5bmMgaW5hdmFsaWRhdGVkCisjIHN0YXRlLgorJHN0YW5k YnkxLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19zeW5jX3JlcGxpY2F0aW9uX3Ns b3RzKCk7Iik7Ciskc3RhbmRieTEtPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFb CisJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAxIEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMK KwkJV0hFUkUgc2xvdF9uYW1lID0gJ3N5bmNfc2xvdDEnIEFORAorCQlpbnZhbGlkYXRpb25fcmVh c29uID0gJ2luYWN0aXZlX3RpbWVvdXQnOworXSkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQgd2hp bGUgd2FpdGluZyBmb3Igc3luY19zbG90MSBpbnZhbGlkYXRpb24gdG8gYmUgc3luY2VkIG9uIHN0 YW5kYnkiOworCisjIE1ha2Ugc3RhbmRieSBzbG90IG9uIHByaW1hcnkgaW5hY3RpdmUgYW5kIGNo ZWNrIGZvciBpbnZhbGlkYXRpb24KKyRzdGFuZGJ5MS0+c3RvcDsKK2NoZWNrX2Zvcl9zbG90X2lu dmFsaWRhdGlvbigkcHJpbWFyeSwgJ3NiX3Nsb3QxJywgJGxvZ3N0YXJ0LAorCSRpbmFjdGl2ZV90 aW1lb3V0KTsKKworIyBUZXN0Y2FzZSBlbmQKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydAorIyBTeW5jZWQgc2xvdCBtdXN0 bid0IGdldCBpbnZhbGlkYXRlZCBvbiBzdGFuZGJ5IG9uIGl0cyBvd24gZHVlIHRvIGluYWN0aXZl CisjIHRpbWVvdXQuCisKKyMgRGlzYWJsZSBpbmFjdGl2ZSB0aW1lb3V0IG9uIHByaW1hcnkKKyRw cmltYXJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAgQUxURVIgU1lTVEVNIFNF VCByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgVE8gJzAnOworXSk7CiskcHJpbWFy eS0+cmVsb2FkOworCisjIENyZWF0ZSBzdGFuZGJ5CitteSAkc3RhbmRieTIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnkyJyk7Ciskc3RhbmRieTItPmluaXRfZnJvbV9i YWNrdXAoJHByaW1hcnksICRiYWNrdXBfbmFtZSwgaGFzX3N0cmVhbWluZyA9PiAxKTsKKworJGNv bm5zdHIgPSAkcHJpbWFyeS0+Y29ubnN0cjsKKyRzdGFuZGJ5Mi0+YXBwZW5kX2NvbmYoCisJJ3Bv c3RncmVzcWwuY29uZicsIHFxKAoraG90X3N0YW5kYnlfZmVlZGJhY2sgPSBvbgorcHJpbWFyeV9z bG90X25hbWUgPSAnc2Jfc2xvdDInCitwcmltYXJ5X2Nvbm5pbmZvID0gJyRjb25uc3RyIGRibmFt ZT1wb3N0Z3JlcycKKykpOworCisjIENyZWF0ZSBzeW5jIHNsb3Qgb24gcHJpbWFyeQorJHByaW1h cnktPnBzcWwoJ3Bvc3RncmVzJywKKwlxe1NFTEVDVCBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNh dGlvbl9zbG90KCdzeW5jX3Nsb3QyJywgJ3Rlc3RfZGVjb2RpbmcnLCBmYWxzZSwgZmFsc2UsIHRy dWUpO30KKyk7CisKKyRwcmltYXJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAg U0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KHNsb3RfbmFtZSA6PSAn c2Jfc2xvdDInLCBpbW1lZGlhdGVseV9yZXNlcnZlIDo9IHRydWUpOworXSk7CisKKyRzdGFuZGJ5 Mi0+c3RhcnQ7CisKKyMgV2FpdCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2ggZGF0 YQorJHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnkyKTsKKworCiskc3RhbmRieTIt PnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBBTFRFUiBTWVNURU0gU0VUIHJlcGxp Y2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBUTyAnJHtpbmFjdGl2ZV90aW1lb3V0fXMnOwor XSk7Ciskc3RhbmRieTItPnJlbG9hZDsKKworIyBTeW5jIHByaW1hcnkgc2xvdCB0byBzdGFuZGJ5 Ciskc3RhbmRieTItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX3N5bmNfcmVwbGlj YXRpb25fc2xvdHMoKTsiKTsKKworIyBDb25maXJtIHRoYXQgbG9naWNhbCBmYWlsb3ZlciBzbG90 IGlzIGNyZWF0ZWQgb24gc3RhbmRieQoraXMoICRzdGFuZGJ5Mi0+c2FmZV9wc3FsKAorCQkncG9z dGdyZXMnLAorCQlxe1NFTEVDVCBjb3VudCgqKSA9IDEgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90 cworCQkgIFdIRVJFIHNsb3RfbmFtZSA9ICdzeW5jX3Nsb3QyJyBBTkQgc3luY2VkIEFORCBOT1Qg dGVtcG9yYXJ5O30KKwkpLAorCSJ0IiwKKwknbG9naWNhbCBzbG90IHN5bmNfc2xvdDIgaGFzIHN5 bmNlZCBhcyB0cnVlIG9uIHN0YW5kYnknKTsKKworJGxvZ3N0YXJ0ID0gLXMgJHN0YW5kYnkyLT5s b2dmaWxlOworCisjIEdpdmUgZW5vdWdoIHRpbWUKK3NsZWVwKCRpbmFjdGl2ZV90aW1lb3V0KzEp OworCisjIERlc3BpdGUgaW5hY3RpdmUgdGltZW91dCBiZWluZyBzZXQsIHN5bmNlZCBzbG90IHdv bid0IGdldCBpbnZhbGlkYXRlZCBvbiBpdHMKKyMgb3duIG9uIHN0YW5kYnkuIFNvLCB3ZSBtdXN0 IG5vdCBzZWUgaW52YWxpZGF0aW9uIG1lc3NhZ2UgaW4gc2VydmVyIGxvZy4KKyRzdGFuZGJ5Mi0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7CitvayggISRzdGFuZGJ5Mi0+bG9n X2NvbnRhaW5zKAorCQkiaW52YWxpZGF0aW5nIG9ic29sZXRlIHJlcGxpY2F0aW9uIHNsb3QgXCJz eW5jX3Nsb3QyXCIiLAorCQkkbG9nc3RhcnQpLAorCSdjaGVjayB0aGF0IHN5bmVkIHN5bmNfc2xv dDIgaGFzIG5vdCBiZWVuIGludmFsaWRhdGVkIG9uIHRoZSBzdGFuZGJ5JworKTsKKworJHN0YW5k YnkyLT5zdG9wOworCisjIFRlc3RjYXNlIGVuZAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisj ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0CisjIEludmFsaWRhdGUgbG9n aWNhbCBzdWJzY3JpYmVyIHNsb3QgZHVlIHRvIGluYWN0aXZlIHRpbWVvdXQuCisKK215ICRwdWJs aXNoZXIgPSAkcHJpbWFyeTsKKworIyBQcmVwYXJlIGZvciB0ZXN0CiskcHVibGlzaGVyLT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAgQUxURVIgU1lTVEVNIFNFVCByZXBsaWNhdGlv bl9zbG90X2luYWN0aXZlX3RpbWVvdXQgVE8gJzAnOworXSk7CiskcHVibGlzaGVyLT5yZWxvYWQ7 CisKKyMgQ3JlYXRlIHN1YnNjcmliZXIKK215ICRzdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdzdWInKTsKKyRzdWJzY3JpYmVyLT5pbml0OworJHN1YnNjcmliZXIt PnN0YXJ0OworCisjIENyZWF0ZSB0YWJsZXMKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRlc3RfdGJsIChpZCBpbnQpIik7Ciskc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YmwgKGlkIGludCkiKTsKKwor IyBJbnNlcnQgc29tZSBkYXRhCiskcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki SU5TRVJUIElOVE8gdGVzdF90YmwgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMSwgNSkpOyIpOwor CisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KK215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRw dWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CiskcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBQVUJMSUNBVElPTiBwdWIgRk9SIEFMTCBUQUJMRVMi KTsKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1Qg cGdfY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdChzbG90X25hbWUgOj0gJ2xzdWIxX3Ns b3QnLCBwbHVnaW4gOj0gJ3Bnb3V0cHV0Jyk7CitdKTsKKworJHN1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1YiBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1YiBXSVRIIChzbG90X25hbWUgPSAnbHN1YjFf c2xvdCcsIGNyZWF0ZV9zbG90ID0gZmFsc2UpIgorKTsKKworJHN1YnNjcmliZXItPndhaXRfZm9y X3N1YnNjcmlwdGlvbl9zeW5jKCRwdWJsaXNoZXIsICdzdWInKTsKKworbXkgJHJlc3VsdCA9Cisg ICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9N IHRlc3RfdGJsIik7CisKK2lzKCRyZXN1bHQsIHFxKDUpLCAiY2hlY2sgaW5pdGlhbCBjb3B5IHdh cyBkb25lIik7CisKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAg ICBBTFRFUiBTWVNURU0gU0VUIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBUTyAn ICR7aW5hY3RpdmVfdGltZW91dH1zJzsKK10pOworJHB1Ymxpc2hlci0+cmVsb2FkOworCiskbG9n c3RhcnQgPSAtcyAkcHVibGlzaGVyLT5sb2dmaWxlOworCisjIE1ha2Ugc3Vic2NyaWJlciBzbG90 IG9uIHB1Ymxpc2hlciBpbmFjdGl2ZSBhbmQgY2hlY2sgZm9yIGludmFsaWRhdGlvbgorJHN1YnNj cmliZXItPnN0b3A7CitjaGVja19mb3Jfc2xvdF9pbnZhbGlkYXRpb24oJHB1Ymxpc2hlciwgJ2xz dWIxX3Nsb3QnLCAkbG9nc3RhcnQsCisJJGluYWN0aXZlX3RpbWVvdXQpOworCisjIFRlc3RjYXNl IGVuZAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIENoZWNrIGZvciBzbG90IHRvIGZpcnN0 IGJlY29tZSBpbmFjdGl2ZSBhbmQgdGhlbiBnZXQgaW52YWxpZGF0ZWQKK3N1YiBjaGVja19mb3Jf c2xvdF9pbnZhbGlkYXRpb24KK3sKKwlteSAoJG5vZGUsICRzbG90LCAkb2Zmc2V0LCAkaW5hY3Rp dmVfdGltZW91dCkgPSBAXzsKKwlteSAkbmFtZSA9ICRub2RlLT5uYW1lOworCisJIyBXYWl0IGZv ciBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZQorCSRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkn cG9zdGdyZXMnLCBxcVsKKwkJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAxIEZST00gcGdfcmVw bGljYXRpb25fc2xvdHMKKwkJCVdIRVJFIHNsb3RfbmFtZSA9ICckc2xvdCcgQU5EIGFjdGl2ZSA9 ICdmJyBBTkQKKwkJCQkgIGluYWN0aXZlX3NpbmNlIElTIE5PVCBOVUxMOworCV0pCisJICBvciBk aWUKKwkgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc2xvdCAkc2xvdCB0byBiZWNvbWUg aW5hY3RpdmUgb24gbm9kZSAkbmFtZSI7CisKKwl0cmlnZ2VyX3Nsb3RfaW52YWxpZGF0aW9uKCRu b2RlLCAkc2xvdCwgJG9mZnNldCwgJGluYWN0aXZlX3RpbWVvdXQpOworCisJIyBXYWl0IGZvciBp bnZhbGlkYXRpb24gcmVhc29uIHRvIGJlIHNldAorCSRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKAor CQkncG9zdGdyZXMnLCBxcVsKKwkJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAxIEZST00gcGdf cmVwbGljYXRpb25fc2xvdHMKKwkJCVdIRVJFIHNsb3RfbmFtZSA9ICckc2xvdCcgQU5ECisJCQlp bnZhbGlkYXRpb25fcmVhc29uID0gJ2luYWN0aXZlX3RpbWVvdXQnOworCV0pCisJICBvciBkaWUK KwkgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgaW52YWxpZGF0aW9uIHJlYXNvbiBvZiBz bG90ICRzbG90IHRvIGJlIHNldCBvbiBub2RlICRuYW1lIjsKKworCSMgQ2hlY2sgdGhhdCBpbnZh bGlkYXRlZCBzbG90IGNhbm5vdCBiZSBhY3F1aXJlZAorCW15ICgkcmVzdWx0LCAkc3Rkb3V0LCAk c3RkZXJyKTsKKworCSgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKAor CQkncG9zdGdyZXMnLCBxcVsKKwkJCVNFTEVDVCBwZ19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2Uo JyRzbG90JywgJzAvMScpOworCV0pOworCisJb2soICRzdGRlcnIgPX4KKwkJICAvY2FuIG5vIGxv bmdlciBnZXQgY2hhbmdlcyBmcm9tIHJlcGxpY2F0aW9uIHNsb3QgIiRzbG90Ii8sCisJCSJkZXRl Y3RlZCBlcnJvciB1cG9uIHRyeWluZyB0byBhY3F1aXJlIGludmFsaWRhdGVkIHNsb3QgJHNsb3Qg b24gbm9kZSAkbmFtZSIKKwkgICkKKwkgIG9yIGRpZQorCSAgImNvdWxkIG5vdCBkZXRlY3QgZXJy b3IgdXBvbiB0cnlpbmcgdG8gYWNxdWlyZSBpbnZhbGlkYXRlZCBzbG90ICRzbG90IG9uIG5vZGUg JG5hbWUiOworfQorCisjIFRyaWdnZXIgc2xvdCBpbnZhbGlkYXRpb24gYW5kIGNvbmZpcm0gaXQg aW4gc2VydmVyIGxvZworc3ViIHRyaWdnZXJfc2xvdF9pbnZhbGlkYXRpb24KK3sKKwlteSAoJG5v ZGUsICRzbG90LCAkb2Zmc2V0LCAkaW5hY3RpdmVfdGltZW91dCkgPSBAXzsKKwlteSAkbmFtZSA9 ICRub2RlLT5uYW1lOworCW15ICRpbnZhbGlkYXRlZCA9IDA7CisKKwkjIEdpdmUgZW5vdWdoIHRp bWUgdG8gYXZvaWQgbXVsdGlwbGUgY2hlY2twb2ludHMKKwlzbGVlcCgkaW5hY3RpdmVfdGltZW91 dCsxKTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8IDEwICogJFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOjp0aW1lb3V0X2RlZmF1bHQ7ICRpKyspCisJeworCQkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDSEVDS1BPSU5UIik7CisJCWlmICgkbm9kZS0+bG9nX2NvbnRhaW5zKAorCQkJCSJp bnZhbGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBcIiRzbG90XCIiLAorCQkJCSRv ZmZzZXQpKQorCQl7CisJCQkkaW52YWxpZGF0ZWQgPSAxOworCQkJbGFzdDsKKwkJfQorCQl1c2xl ZXAoMTAwXzAwMCk7CisJfQorCW9rKCRpbnZhbGlkYXRlZCwKKwkJImNoZWNrIHRoYXQgc2xvdCAk c2xvdCBpbnZhbGlkYXRpb24gaGFzIGJlZW4gbG9nZ2VkIG9uIG5vZGUgJG5hbWUiCisJKTsKK30K KworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --0000000000005965a706219a4ff0--