Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pFRSs-0004H6-8E for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Jan 2023 03:07:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pFRSq-0001UV-Jx for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Jan 2023 03:07:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pFRSq-0001UM-4B for pgsql-hackers@lists.postgresql.org; Wed, 11 Jan 2023 03:07:44 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pFRSm-0007Ln-01 for pgsql-hackers@postgresql.org; Wed, 11 Jan 2023 03:07:43 +0000 Received: by mail-ej1-x629.google.com with SMTP id vm8so33613788ejc.2 for ; Tue, 10 Jan 2023 19:07:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=M1WOMArEHfMxz7x/ykYCnMNqeyBEpwo+hFEcKIkqHJw=; b=VoI5nTxzUlV1bEQ01H6lJ/aF3Pstv3n7I67ObjnXhVJ+azQDVprbFXNavPnQ22neQf p1U44L+geIKfvY6GxgF63VCUYwAYGaAQTu7pGjYn6ev0995Kjm7HRl2zA8YfhS3i5rgE fYBSVcrCkLnylA45cO6XsUw/zEDwWh08sojcPzZHcp4qX+CO22AltWuBrPAjZTY6KdSr qCydpgooKh8ACV2IfhxS2ai8g/WmVO0qbkykMh2z/wegC3EjkP7VGrrtEQi5lBb3GMdr BZY0Z+0zsOLkel4HxH1Z6MIYf0/ZipwhiJnLmG1bCpfNAcB5U3c2Q5YrfB3xNGANHLv7 lCIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=M1WOMArEHfMxz7x/ykYCnMNqeyBEpwo+hFEcKIkqHJw=; b=DadF69A2Xiy6TXeHFztVzTs3rAAxtaCYPUe7dc5twxsnbFTNykkn1yJpJVVn//jluc lcz5D10aedfNPKxnqJcF0c8Wd0eRWIAI8WuTbmqkk84qdIPQQIFrv2gr8B9plDcyTBvZ iHSPWCQVz5MGY6289PU9ID5sC91g6k6RsP9HRKoQZpuD18U2ZElhaBaFfhotXNyBu0xj pg3Jjtu4aJvs43qwhB6/cBUZNNUYOsJ5rK/EwqKRuD4jz2fcumkBuUjAKkoyApMWHgLR +yRAkS9CT6MW38l39FpG6Hwwvw9lt81mkhL4YyCgxISz+pgvvTPU8pk+SvyfF3TFUja4 ai+A== X-Gm-Message-State: AFqh2kpE8YRA0u++XTNrmo5iNsQhh3A+oi4tY2vUrj1ObzY2vxRoKkDK GD4v0qMFhGJHe53ff/Yl3vUCxigHLcooVM4pZXJgvqAjzFS7Nw== X-Google-Smtp-Source: AMrXdXspM5OVCgzibylLFEHnJVGxytGB/EfX5r7q5Ab+OZRvwX8lqVo6Uek1Q8ZwjoqaBzTqCRaRPUw/M7rR65Snsso= X-Received: by 2002:a17:907:9546:b0:7b9:de77:f0ef with SMTP id ex6-20020a170907954600b007b9de77f0efmr4006696ejc.5.1673406458271; Tue, 10 Jan 2023 19:07:38 -0800 (PST) MIME-Version: 1.0 References: <20221205180939.2p6zcrtevukgyay7@awork3.anarazel.de> <20221206231230.3vwxd5dfc3gkf4vl@awork3.anarazel.de> <20221207012224.hjcyzvwdjim22e2a@awork3.anarazel.de> <20230106232512.46jdujlcknqgj2ct@awork3.anarazel.de> <20230107225548.ppzg4rpninlthgth@awork3.anarazel.de> In-Reply-To: <20230107225548.ppzg4rpninlthgth@awork3.anarazel.de> From: Thomas Munro Date: Wed, 11 Jan 2023 16:07:03 +1300 Message-ID: Subject: Re: Using WaitEventSet in the postmaster To: Andres Freund Cc: pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000082c56105f1f44d03" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000082c56105f1f44d03 Content-Type: text/plain; charset="UTF-8" On Sun, Jan 8, 2023 at 11:55 AM Andres Freund wrote: > On 2023-01-07 18:08:11 +1300, Thomas Munro wrote: > > On Sat, Jan 7, 2023 at 12:25 PM Andres Freund wrote: > > > On 2023-01-07 11:08:36 +1300, Thomas Munro wrote: > > > > 3. Is it OK to clobber the shared pending flag for SIGQUIT, SIGTERM, > > > > SIGINT? If you send all of these extremely rapidly, it's > > > > indeterminate which one will be seen by handle_shutdown_request(). > > > > > > That doesn't seem optimal. I'm mostly worried that we can end up downgrading a > > > shutdown request. > > > > I was contemplating whether I needed to do some more push-ups to > > prefer the first delivered signal (instead of the last), but you're > > saying that it would be enough to prefer the fastest shutdown type, in > > cases where more than one signal was handled between server loops. > > WFM. > > I don't see any need for such an order requirement - in case of receiving a > "less severe" shutdown request first, we'd process the more severe one soon > after. There's nothing to be gained by trying to follow the order of the > incoming signals. Oh, I fully agree. I was working through the realisation that I might need to serialise the handlers to implement the priority logic correctly (upgrades good, downgrades bad), but your suggestion fast-forwards to the right answer and doesn't require blocking, so I prefer it, and had already gone that way in v9. In this version I've added a comment to explain that the outcome is the same in the end, and also fixed the flag clearing logic which was subtly wrong before. > > > I wonder if it'd be good to have a _pm_ in the name. > > > > I dunno about this one, it's all static stuff in a file called > > postmaster.c and one (now) already has pm in it (see below). > > I guess stuff like signal handlers and their state somehow seems more global > to me than their C linkage type suggests. Hence the desire to be a bit more > "namespaced" in their naming. I do find it somewhat annoying when reasonably > important global variables aren't uniquely named when using a debugger... Alright, renamed. > A few more code review comments: > > DetermineSleepTime() still deals with struct timeval, which we maintain at > some effort. Just to then convert it away from struct timeval in the > WaitEventSetWait() call. That doesn't seem quite right, and is basically > introduced in this patch. I agree, but I was trying to minimise the patch: signals and events stuff is a lot already. I didn't want to touch DetermineSleepTime()'s time logic in the same commit. But here's a separate patch for that. > I think ServerLoop still has an outdated comment: > > * > * NB: Needs to be called with signals blocked Fixed. > > + /* Process work scheduled by signal handlers. */ > > Very minor: It feels a tad off to say that the work was scheduled by signal > handlers, it's either from other processes or by the OS. But ... OK, now it's "requested via signal handlers". > > +/* > > + * Child processes use SIGUSR1 to send 'pmsignals'. pg_ctl uses SIGUSR1 to ask > > + * postmaster to check for logrotate and promote files. > > + */ > > s/send/notify us of/, since the concrete "pmsignal" is actually transported > outside of the "OS signal" level? Fixed. > LGTM. Thanks. Here's v10. I'll wait a bit longer to see if anyone else has feedback. --00000000000082c56105f1f44d03 Content-Type: text/x-patch; charset="US-ASCII"; name="v10-0001-Give-the-postmaster-a-WaitEventSet-and-a-latch.patch" Content-Disposition: attachment; filename="v10-0001-Give-the-postmaster-a-WaitEventSet-and-a-latch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcr2kwnd0 RnJvbSAwMWJkOWIzZWY2MDI5ZDVlNWQ1NjhiNTE0ODc0YTIzYTE2N2Q4MjZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgOSBOb3YgMjAyMiAyMjo1OTo1OCArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEw IDEvMl0gR2l2ZSB0aGUgcG9zdG1hc3RlciBhIFdhaXRFdmVudFNldCBhbmQgYSBsYXRjaC4KClN3 aXRjaCB0byBhbiBhcmNoaXRlY3R1cmUgc2ltaWxhciB0byByZWd1bGFyIGJhY2tlbmRzLCB3aGVy ZSBzaWduYWwKaGFuZGxlcnMganVzdCBzZXQgZmxhZ3MgaW5zdGVhZCBvZiBkb2luZyByZWFsIHdv cmsuCgpDaGFuZ2VzOgoKICogQWxsb3cgdGhlIHBvc3RtYXN0ZXIgdG8gc2V0IHVwIGl0cyBvd24g bG9jYWwgbGF0Y2guICBGb3Igbm93LCB3ZSBkb24ndAogICB3YW50IG90aGVyIGJhY2tlbmRzIHNl dHRpbmcgYSBzaGFyZWQgbWVtb3J5IGxhdGNoIGRpcmVjdGx5IChidXQgdGhhdAogICBjb3VsZCBi ZSBtYWRlIHRvIHdvcmsgd2l0aCBtb3JlIHJlc2VhcmNoIG9uIHJvYnVzdG5lc3MpLgoKICogVGhl IGV4aXN0aW5nIHNpZ25hbCBoYW5kbGVycyBhcmUgY3V0IGluIHR3bzogYSBoYW5kbGVfcG1fWFhY IHBhcnQgdGhhdAogICBzZXRzIGEgcGVuZGluZ19wbV9YWFggdmFyaWFibGUgYW5kIHNldHMgdGhl IGxvY2FsIGxhdGNoLCBhbmQgYQogICBwcm9jZXNzX3BtX1hYWCBwYXJ0LgoKICogU2lnbmFsIGhh bmRsZXJzIGFyZSBub3cgaW5zdGFsbGVkIHdpdGggdGhlIHJlZ3VsYXIgcHFzaWduYWwoKQogICBm dW5jdGlvbiByYXRoZXIgdGhlbiB0aGUgc3BlY2lhbCBwcXNpZ25hbF9wbSgpIGZ1bmN0aW9uOyB0 aGUgY29uY2VybnMKICAgYWJvdXQgdGhlIHBvcnRhYmlsaXR5IG9mIFNBX1JFU1RBUlQgdnMgc2Vs ZWN0KCkgYXJlIG5vIGxvbmdlcgogICByZWxldmFudCwgYXMgd2UgYXJlIG5vdCB1c2luZyBzZWxl Y3QoKSBvciByZWx5aW5nIG9uIEVJTlRSLgoKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFu ZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhV S0clMkJaLUhwT2oxSnNPOWVXVVAlMkJhcjducFNWaW5zQ19ucHhTeSUyQmpkT01zeCUzREdnJTQw bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9saWJwcS9wcWNvbW0uYyAgICAgICAgICAg IHwgICAzICstCiBzcmMvYmFja2VuZC9saWJwcS9wcXNpZ25hbC5jICAgICAgICAgIHwgIDQwIC0t LQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuYyB8ICAxOCArLQogc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgICB8IDQxMiArKysrKysrKysrKysrKystLS0t LS0tLS0tLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICB8ICAgMSAtCiBz cmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgICAgIHwgIDEzICstCiBzcmMvaW5jbHVk ZS9saWJwcS9wcXNpZ25hbC5oICAgICAgICAgIHwgICAzIC0KIHNyYy9pbmNsdWRlL21pc2NhZG1p bi5oICAgICAgICAgICAgICAgfCAgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCAyNjQgaW5zZXJ0aW9u cygrKSwgMjI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL3Bx Y29tbS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21tLmMKaW5kZXggN2EwNDNiZjZiMC4uODY0 YzlkZWJlOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21tLmMKKysrIGIvc3Jj L2JhY2tlbmQvbGlicHEvcHFjb21tLmMKQEAgLTY4Myw4ICs2ODMsNyBAQCBTZXR1cF9BRl9VTklY KGNvbnN0IGNoYXIgKnNvY2tfcGF0aCkKICAqCQlzZXJ2ZXIgcG9ydC4gIFNldCBwb3J0LT5zb2Nr IHRvIHRoZSBGRCBvZiB0aGUgbmV3IGNvbm5lY3Rpb24uCiAgKgogICogQVNTVU1FOiB0aGF0IHRo aXMgZG9lc24ndCBuZWVkIHRvIGJlIG5vbi1ibG9ja2luZyBiZWNhdXNlCi0gKgkJdGhlIFBvc3Rt YXN0ZXIgdXNlcyBzZWxlY3QoKSB0byB0ZWxsIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeSBmb3IK LSAqCQlhY2NlcHQoKS4KKyAqCQl0aGUgUG9zdG1hc3RlciB3YWl0cyBmb3IgdGhlIHNvY2tldCB0 byBiZSByZWFkeSB0byBhY2NlcHQoKS4KICAqCiAgKiBSRVRVUk5TOiBTVEFUVVNfT0sgb3IgU1RB VFVTX0VSUk9SCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL3Bxc2lnbmFsLmMg Yi9zcmMvYmFja2VuZC9saWJwcS9wcXNpZ25hbC5jCmluZGV4IGI4MTViZTZlZWEuLmQyMzNlM2Ey ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL3Bxc2lnbmFsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvbGlicHEvcHFzaWduYWwuYwpAQCAtOTcsNDMgKzk3LDMgQEAgcHFpbml0bWFzayh2b2lk KQogCXNpZ2RlbHNldCgmU3RhcnR1cEJsb2NrU2lnLCBTSUdBTFJNKTsKICNlbmRpZgogfQotCi0v KgotICogU2V0IHVwIGEgcG9zdG1hc3RlciBzaWduYWwgaGFuZGxlciBmb3Igc2lnbmFsICJzaWdu byIKLSAqCi0gKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBoYW5kbGVyLgotICoKLSAqIFRoaXMgaXMg dXNlZCBvbmx5IGluIHRoZSBwb3N0bWFzdGVyLCB3aGljaCBoYXMgaXRzIG93biBvZGQgYXBwcm9h Y2ggdG8KLSAqIHNpZ25hbCBoYW5kbGluZy4gIEZvciBzaWduYWxzIHdpdGggaGFuZGxlcnMsIHdl IGJsb2NrIGFsbCBzaWduYWxzIGZvciB0aGUKLSAqIGR1cmF0aW9uIG9mIHNpZ25hbCBoYW5kbGVy IGV4ZWN1dGlvbi4gIFdlIGFsc28gZG8gbm90IHNldCB0aGUgU0FfUkVTVEFSVAotICogZmxhZzsg dGhpcyBzaG91bGQgYmUgc2FmZSBnaXZlbiB0aGUgdGlueSByYW5nZSBvZiBjb2RlIGluIHdoaWNo IHRoZQotICogcG9zdG1hc3RlciBldmVyIHVuYmxvY2tzIHNpZ25hbHMuCi0gKgotICogcHFpbml0 bWFzaygpIG11c3QgaGF2ZSBiZWVuIGludm9rZWQgcHJldmlvdXNseS4KLSAqLwotcHFzaWdmdW5j Ci1wcXNpZ25hbF9wbShpbnQgc2lnbm8sIHBxc2lnZnVuYyBmdW5jKQotewotCXN0cnVjdCBzaWdh Y3Rpb24gYWN0LAotCQkJCW9hY3Q7Ci0KLQlhY3Quc2FfaGFuZGxlciA9IGZ1bmM7Ci0JaWYgKGZ1 bmMgPT0gU0lHX0lHTiB8fCBmdW5jID09IFNJR19ERkwpCi0JewotCQkvKiBpbiB0aGVzZSBjYXNl cywgYWN0IHRoZSBzYW1lIGFzIHBxc2lnbmFsKCkgKi8KLQkJc2lnZW1wdHlzZXQoJmFjdC5zYV9t YXNrKTsKLQkJYWN0LnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKLQl9Ci0JZWxzZQotCXsKLQkJYWN0 LnNhX21hc2sgPSBCbG9ja1NpZzsKLQkJYWN0LnNhX2ZsYWdzID0gMDsKLQl9Ci0jaWZkZWYgU0Ff Tk9DTERTVE9QCi0JaWYgKHNpZ25vID09IFNJR0NITEQpCi0JCWFjdC5zYV9mbGFncyB8PSBTQV9O T0NMRFNUT1A7Ci0jZW5kaWYKLQlpZiAoc2lnYWN0aW9uKHNpZ25vLCAmYWN0LCAmb2FjdCkgPCAw KQotCQlyZXR1cm4gU0lHX0VSUjsKLQlyZXR1cm4gb2FjdC5zYV9oYW5kbGVyOwotfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmMKaW5kZXggNTY5YjUyZTg0OS4uNTA5NTg3NjM2ZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5jCkBAIC0xMiwyNCArMTIsMjggQEAK ICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxz aWduYWwuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNs dWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCisjaW5jbHVkZSAibGlicHEv cHFzaWduYWwuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5oIgogCiAjaWZu ZGVmIFdJTjMyCiAvKgogICogV3JhcHBlciBmb3IgZm9yaygpLiBSZXR1cm4gdmFsdWVzIGFyZSB0 aGUgc2FtZSBhcyB0aG9zZSBmb3IgZm9yaygpOgogICogLTEgaWYgdGhlIGZvcmsgZmFpbGVkLCAw IGluIHRoZSBjaGlsZCBwcm9jZXNzLCBhbmQgdGhlIFBJRCBvZiB0aGUKLSAqIGNoaWxkIGluIHRo ZSBwYXJlbnQgcHJvY2Vzcy4KKyAqIGNoaWxkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFNpZ25h bHMgYXJlIGJsb2NrZWQgd2hpbGUgZm9ya2luZywgc28KKyAqIHRoZSBjaGlsZCBtdXN0IHVuYmxv Y2suCiAgKi8KIHBpZF90CiBmb3JrX3Byb2Nlc3Modm9pZCkKIHsKIAlwaWRfdAkJcmVzdWx0Owog CWNvbnN0IGNoYXIgKm9vbWZpbGVuYW1lOworCXNpZ3NldF90CXNhdmVfbWFzazsKIAogI2lmZGVm IExJTlVYX1BST0ZJTEUKIAlzdHJ1Y3QgaXRpbWVydmFsIHByb2ZfaXRpbWVyOwpAQCAtNTEsNiAr NTUsMTMgQEAgZm9ya19wcm9jZXNzKHZvaWQpCiAJZ2V0aXRpbWVyKElUSU1FUl9QUk9GLCAmcHJv Zl9pdGltZXIpOwogI2VuZGlmCiAKKwkvKgorCSAqIFdlIHN0YXJ0IHBvc3RtYXN0ZXIgY2hpbGRy ZW4gd2l0aCBzaWduYWxzIGJsb2NrZWQuICBUaGlzIGFsbG93cyB0aGVtIHRvCisJICogaW5zdGFs bCB0aGVpciBvd24gaGFuZGxlcnMgYmVmb3JlIHVuYmxvY2tpbmcsIHRvIGF2b2lkIHJhY2VzIHdo ZXJlIHRoZXkKKwkgKiBtaWdodCBydW4gdGhlIHBvc3RtYXN0ZXIncyBoYW5kbGVyIGFuZCBtaXNz IGFuIGltcG9ydGFudCBjb250cm9sIHNpZ25hbC4KKwkgKiBXaXRoIG1vcmUgYW5hbHlzaXMgdGhp cyBjb3VsZCBwb3RlbnRpYWxseSBiZSByZWxheGVkLgorCSAqLworCXNpZ3Byb2NtYXNrKFNJR19T RVRNQVNLLCAmQmxvY2tTaWcsICZzYXZlX21hc2spOwogCXJlc3VsdCA9IGZvcmsoKTsKIAlpZiAo cmVzdWx0ID09IDApCiAJewpAQCAtMTAzLDYgKzExNCwxMSBAQCBmb3JrX3Byb2Nlc3Modm9pZCkK IAkJLyogZG8gcG9zdC1mb3JrIGluaXRpYWxpemF0aW9uIGZvciByYW5kb20gbnVtYmVyIGdlbmVy YXRpb24gKi8KIAkJcGdfc3Ryb25nX3JhbmRvbV9pbml0KCk7CiAJfQorCWVsc2UKKwl7CisJCS8q IGluIHBhcmVudCwgcmVzdG9yZSBzaWduYWwgbWFzayAqLworCQlzaWdwcm9jbWFzayhTSUdfU0VU TUFTSywgJnNhdmVfbWFzaywgTlVMTCk7CisJfQogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggZWFjMzQ1MDc3NC4uOGJiYzEwNDJhNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTcwLDcgKzcwLDYgQEAKICNpbmNsdWRl IDx0aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgotI2lu Y2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5 cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgpAQCAtMzYyLDYgKzM2MSwxNyBAQCBzdGF0 aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IFdhbFJlY2VpdmVyUmVxdWVzdGVkID0gZmFsc2U7CiBz dGF0aWMgdm9sYXRpbGUgYm9vbCBTdGFydFdvcmtlck5lZWRlZCA9IHRydWU7CiBzdGF0aWMgdm9s YXRpbGUgYm9vbCBIYXZlQ3Jhc2hlZFdvcmtlciA9IGZhbHNlOwogCisvKiBzZXQgd2hlbiBzaWdu YWxzIGFycml2ZSAqLworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwZW5kaW5nX3BtX3Bt c2lnbmFsOworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwZW5kaW5nX3BtX2NoaWxkX2V4 aXQ7CitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHBlbmRpbmdfcG1fcmVsb2FkX3JlcXVl c3Q7CitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHBlbmRpbmdfcG1fc2h1dGRvd25fcmVx dWVzdDsKK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgcGVuZGluZ19wbV9mYXN0X3NodXRk b3duX3JlcXVlc3Q7CitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHBlbmRpbmdfcG1faW1t ZWRpYXRlX3NodXRkb3duX3JlcXVlc3Q7CisKKy8qIEkvTyBtdWx0aXBsZXhpbmcgb2JqZWN0ICov CitzdGF0aWMgV2FpdEV2ZW50U2V0ICpwbV93YWl0X3NldDsKKwogI2lmZGVmIFVTRV9TU0wKIC8q IFNldCB3aGVuIGFuZCBpZiBTU0wgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgcHJvcGVybHkgKi8KIHN0 YXRpYyBib29sIExvYWRlZFNTTCA9IGZhbHNlOwpAQCAtMzgwLDEwICszOTAsMTQgQEAgc3RhdGlj IHZvaWQgZ2V0SW5zdGFsbGF0aW9uUGF0aHMoY29uc3QgY2hhciAqYXJndjApOwogc3RhdGljIHZv aWQgY2hlY2tDb250cm9sRmlsZSh2b2lkKTsKIHN0YXRpYyBQb3J0ICpDb25uQ3JlYXRlKGludCBz ZXJ2ZXJGZCk7CiBzdGF0aWMgdm9pZCBDb25uRnJlZShQb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lk IFNJR0hVUF9oYW5kbGVyKFNJR05BTF9BUkdTKTsKLXN0YXRpYyB2b2lkIHBtZGllKFNJR05BTF9B UkdTKTsKLXN0YXRpYyB2b2lkIHJlYXBlcihTSUdOQUxfQVJHUyk7Ci1zdGF0aWMgdm9pZCBzaWd1 c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpOworc3RhdGljIHZvaWQgaGFuZGxlX3BtX3Btc2lnbmFs X3NpZ25hbChTSUdOQUxfQVJHUyk7CitzdGF0aWMgdm9pZCBoYW5kbGVfcG1fY2hpbGRfZXhpdF9z aWduYWwoU0lHTkFMX0FSR1MpOworc3RhdGljIHZvaWQgaGFuZGxlX3BtX3JlbG9hZF9yZXF1ZXN0 X3NpZ25hbChTSUdOQUxfQVJHUyk7CitzdGF0aWMgdm9pZCBoYW5kbGVfcG1fc2h1dGRvd25fcmVx dWVzdF9zaWduYWwoU0lHTkFMX0FSR1MpOworc3RhdGljIHZvaWQgcHJvY2Vzc19wbV9wbXNpZ25h bCh2b2lkKTsKK3N0YXRpYyB2b2lkIHByb2Nlc3NfcG1fY2hpbGRfZXhpdCh2b2lkKTsKK3N0YXRp YyB2b2lkIHByb2Nlc3NfcG1fcmVsb2FkX3JlcXVlc3Qodm9pZCk7CitzdGF0aWMgdm9pZCBwcm9j ZXNzX3BtX3NodXRkb3duX3JlcXVlc3Qodm9pZCk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzX3N0YXJ0 dXBfcGFja2V0X2RpZShTSUdOQUxfQVJHUyk7CiBzdGF0aWMgdm9pZCBkdW1teV9oYW5kbGVyKFNJ R05BTF9BUkdTKTsKIHN0YXRpYyB2b2lkIFN0YXJ0dXBQYWNrZXRUaW1lb3V0SGFuZGxlcih2b2lk KTsKQEAgLTQwMSw3ICs0MTUsNiBAQCBzdGF0aWMgaW50CUJhY2tlbmRTdGFydHVwKFBvcnQgKnBv cnQpOwogc3RhdGljIGludAlQcm9jZXNzU3RhcnR1cFBhY2tldChQb3J0ICpwb3J0LCBib29sIHNz bF9kb25lLCBib29sIGdzc19kb25lKTsKIHN0YXRpYyB2b2lkIFNlbmROZWdvdGlhdGVQcm90b2Nv bFZlcnNpb24oTGlzdCAqdW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlvbnMpOwogc3RhdGljIHZv aWQgcHJvY2Vzc0NhbmNlbFJlcXVlc3QoUG9ydCAqcG9ydCwgdm9pZCAqcGt0KTsKLXN0YXRpYyBp bnQJaW5pdE1hc2tzKGZkX3NldCAqcm1hc2spOwogc3RhdGljIHZvaWQgcmVwb3J0X2ZvcmtfZmFp bHVyZV90b19jbGllbnQoUG9ydCAqcG9ydCwgaW50IGVycm51bSk7CiBzdGF0aWMgQ0FDX3N0YXRl IGNhbkFjY2VwdENvbm5lY3Rpb25zKGludCBiYWNrZW5kX3R5cGUpOwogc3RhdGljIGJvb2wgUmFu ZG9tQ2FuY2VsS2V5KGludDMyICpjYW5jZWxfa2V5KTsKQEAgLTYwOSwyNiArNjIyLDYgQEAgUG9z dG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkvKgogCSAqIFNldCB1cCBzaWdu YWwgaGFuZGxlcnMgZm9yIHRoZSBwb3N0bWFzdGVyIHByb2Nlc3MuCiAJICoKLQkgKiBJbiB0aGUg cG9zdG1hc3Rlciwgd2UgdXNlIHBxc2lnbmFsX3BtKCkgcmF0aGVyIHRoYW4gcHFzaWduYWwoKSAo d2hpY2gKLQkgKiBpcyB1c2VkIGJ5IGFsbCBjaGlsZCBwcm9jZXNzZXMgYW5kIGNsaWVudCBwcm9j ZXNzZXMpLiAgVGhhdCBoYXMgYQotCSAqIGNvdXBsZSBvZiBzcGVjaWFsIGJlaGF2aW9yczoKLQkg KgotCSAqIDEuIFdlIHRlbGwgc2lnYWN0aW9uKCkgdG8gYmxvY2sgYWxsIHNpZ25hbHMgZm9yIHRo ZSBkdXJhdGlvbiBvZiB0aGUKLQkgKiBzaWduYWwgaGFuZGxlci4gIFRoaXMgaXMgZmFzdGVyIHRo YW4gb3VyIG9sZCBhcHByb2FjaCBvZgotCSAqIGJsb2NraW5nL3VuYmxvY2tpbmcgZXhwbGljaXRs eSBpbiB0aGUgc2lnbmFsIGhhbmRsZXIsIGFuZCBpdCBzaG91bGQgYWxzbwotCSAqIHByZXZlbnQg ZXhjZXNzaXZlIHN0YWNrIGNvbnN1bXB0aW9uIGlmIHNpZ25hbHMgYXJyaXZlIHF1aWNrbHkuCi0J ICoKLQkgKiAyLiBXZSBkbyBub3Qgc2V0IHRoZSBTQV9SRVNUQVJUIGZsYWcuICBUaGlzIGlzIGJl Y2F1c2Ugc2lnbmFscyB3aWxsIGJlCi0JICogYmxvY2tlZCBhdCBhbGwgdGltZXMgZXhjZXB0IHdo ZW4gU2VydmVyTG9vcCBpcyB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8KLQkgKiBoYXBwZW4sIGFu ZCBkdXJpbmcgdGhhdCB3aW5kb3csIHdlIHdhbnQgc2lnbmFscyB0byBleGl0IHRoZSBzZWxlY3Qo MikKLQkgKiB3YWl0IHNvIHRoYXQgU2VydmVyTG9vcCBjYW4gcmVzcG9uZCBpZiBhbnl0aGluZyBp bnRlcmVzdGluZyBoYXBwZW5lZC4KLQkgKiBPbiBzb21lIHBsYXRmb3Jtcywgc2lnbmFscyBtYXJr ZWQgU0FfUkVTVEFSVCB3b3VsZCBub3QgY2F1c2UgdGhlCi0JICogc2VsZWN0KCkgd2FpdCB0byBl bmQuCi0JICoKLQkgKiBDaGlsZCBwcm9jZXNzZXMgd2lsbCBnZW5lcmFsbHkgd2FudCBTQV9SRVNU QVJULCBzbyBwcXNpZ25hbCgpIHNldHMgdGhhdAotCSAqIGZsYWcuICBXZSBleHBlY3QgY2hpbGRy ZW4gdG8gc2V0IHVwIHRoZWlyIG93biBoYW5kbGVycyBiZWZvcmUKLQkgKiB1bmJsb2NraW5nIHNp Z25hbHMuCi0JICoKIAkgKiBDQVVUSU9OOiB3aGVuIGNoYW5naW5nIHRoaXMgbGlzdCwgY2hlY2sg Zm9yIHNpZGUtZWZmZWN0cyBvbiB0aGUgc2lnbmFsCiAJICogaGFuZGxpbmcgc2V0dXAgb2YgY2hp bGQgcHJvY2Vzc2VzLiAgU2VlIHRjb3AvcG9zdGdyZXMuYywKIAkgKiBib290c3RyYXAvYm9vdHN0 cmFwLmMsIHBvc3RtYXN0ZXIvYmd3cml0ZXIuYywgcG9zdG1hc3Rlci93YWx3cml0ZXIuYywKQEAg LTYzOCwyNiArNjMxLDE5IEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAJcHFpbml0bWFzaygpOwogCVBHX1NFVE1BU0soJkJsb2NrU2lnKTsKIAotCXBxc2lnbmFsX3Bt KFNJR0hVUCwgU0lHSFVQX2hhbmRsZXIpOwkvKiByZXJlYWQgY29uZmlnIGZpbGUgYW5kIGhhdmUK LQkJCQkJCQkJCQkJICogY2hpbGRyZW4gZG8gc2FtZSAqLwotCXBxc2lnbmFsX3BtKFNJR0lOVCwg cG1kaWUpOyAvKiBzZW5kIFNJR1RFUk0gYW5kIHNodXQgZG93biAqLwotCXBxc2lnbmFsX3BtKFNJ R1FVSVQsIHBtZGllKTsJLyogc2VuZCBTSUdRVUlUIGFuZCBkaWUgKi8KLQlwcXNpZ25hbF9wbShT SUdURVJNLCBwbWRpZSk7CS8qIHdhaXQgZm9yIGNoaWxkcmVuIGFuZCBzaHV0IGRvd24gKi8KLQlw cXNpZ25hbF9wbShTSUdBTFJNLCBTSUdfSUdOKTsJLyogaWdub3JlZCAqLwotCXBxc2lnbmFsX3Bt KFNJR1BJUEUsIFNJR19JR04pOwkvKiBpZ25vcmVkICovCi0JcHFzaWduYWxfcG0oU0lHVVNSMSwg c2lndXNyMV9oYW5kbGVyKTsJLyogbWVzc2FnZSBmcm9tIGNoaWxkIHByb2Nlc3MgKi8KLQlwcXNp Z25hbF9wbShTSUdVU1IyLCBkdW1teV9oYW5kbGVyKTsJLyogdW51c2VkLCByZXNlcnZlIGZvciBj aGlsZHJlbiAqLwotCXBxc2lnbmFsX3BtKFNJR0NITEQsIHJlYXBlcik7CS8qIGhhbmRsZSBjaGls ZCB0ZXJtaW5hdGlvbiAqLwotCi0jaWZkZWYgU0lHVVJHCisJcHFzaWduYWwoU0lHSFVQLCBoYW5k bGVfcG1fcmVsb2FkX3JlcXVlc3Rfc2lnbmFsKTsKKwlwcXNpZ25hbChTSUdJTlQsIGhhbmRsZV9w bV9zaHV0ZG93bl9yZXF1ZXN0X3NpZ25hbCk7CisJcHFzaWduYWwoU0lHUVVJVCwgaGFuZGxlX3Bt X3NodXRkb3duX3JlcXVlc3Rfc2lnbmFsKTsKKwlwcXNpZ25hbChTSUdURVJNLCBoYW5kbGVfcG1f c2h1dGRvd25fcmVxdWVzdF9zaWduYWwpOworCXBxc2lnbmFsKFNJR0FMUk0sIFNJR19JR04pOyAv KiBpZ25vcmVkICovCisJcHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7IC8qIGlnbm9yZWQgKi8K KwlwcXNpZ25hbChTSUdVU1IxLCBoYW5kbGVfcG1fcG1zaWduYWxfc2lnbmFsKTsKKwlwcXNpZ25h bChTSUdVU1IyLCBkdW1teV9oYW5kbGVyKTsJLyogdW51c2VkLCByZXNlcnZlIGZvciBjaGlsZHJl biAqLworCXBxc2lnbmFsKFNJR0NITEQsIGhhbmRsZV9wbV9jaGlsZF9leGl0X3NpZ25hbCk7CiAK LQkvKgotCSAqIElnbm9yZSBTSUdVUkcgZm9yIG5vdy4gIENoaWxkIHByb2Nlc3NlcyBtYXkgY2hh bmdlIHRoaXMgKHNlZQotCSAqIEluaXRpYWxpemVMYXRjaFN1cHBvcnQpLCBidXQgdGhleSB3aWxs IG5vdCByZWNlaXZlIGFueSBzdWNoIHNpZ25hbHMKLQkgKiB1bnRpbCB0aGV5IHdhaXQgb24gYSBs YXRjaC4KLQkgKi8KLQlwcXNpZ25hbF9wbShTSUdVUkcsIFNJR19JR04pOwkvKiBpZ25vcmVkICov Ci0jZW5kaWYKKwkvKiBUaGlzIG1heSBjb25maWd1cmUgU0lHVVJHLCBkZXBlbmRpbmcgb24gcGxh dGZvcm0uICovCisJSW5pdGlhbGl6ZUxhdGNoU3VwcG9ydCgpOworCUluaXRQcm9jZXNzTG9jYWxM YXRjaCgpOwogCiAJLyoKIAkgKiBObyBvdGhlciBwbGFjZSBpbiBQb3N0Z3JlcyBzaG91bGQgdG91 Y2ggU0lHVFRJTi9TSUdUVE9VIGhhbmRsaW5nLiAgV2UKQEAgLTY2NywxNyArNjUzLDIwIEBAIFBv c3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJICogY2hpbGQgcHJvY2Vzc2Vz IHNob3VsZCBqdXN0IGFsbG93IHRoZSBpbmhlcml0ZWQgc2V0dGluZ3MgdG8gc3RhbmQuCiAJICov CiAjaWZkZWYgU0lHVFRJTgotCXBxc2lnbmFsX3BtKFNJR1RUSU4sIFNJR19JR04pOwkvKiBpZ25v cmVkICovCisJcHFzaWduYWwoU0lHVFRJTiwgU0lHX0lHTik7IC8qIGlnbm9yZWQgKi8KICNlbmRp ZgogI2lmZGVmIFNJR1RUT1UKLQlwcXNpZ25hbF9wbShTSUdUVE9VLCBTSUdfSUdOKTsJLyogaWdu b3JlZCAqLworCXBxc2lnbmFsKFNJR1RUT1UsIFNJR19JR04pOyAvKiBpZ25vcmVkICovCiAjZW5k aWYKIAogCS8qIGlnbm9yZSBTSUdYRlNaLCBzbyB0aGF0IHVsaW1pdCB2aW9sYXRpb25zIHdvcmsg bGlrZSBkaXNrIGZ1bGwgKi8KICNpZmRlZiBTSUdYRlNaCi0JcHFzaWduYWxfcG0oU0lHWEZTWiwg U0lHX0lHTik7CS8qIGlnbm9yZWQgKi8KKwlwcXNpZ25hbChTSUdYRlNaLCBTSUdfSUdOKTsgLyog aWdub3JlZCAqLwogI2VuZGlmCiAKKwkvKiBCZWdpbiBhY2NlcHRpbmcgc2lnbmFscy4gKi8KKwlQ R19TRVRNQVNLKCZVbkJsb2NrU2lnKTsKKwogCS8qCiAJICogT3B0aW9ucyBzZXR1cAogCSAqLwpA QCAtMTY5OCwxMDUgKzE2ODcsMTA3IEBAIERldGVybWluZVNsZWVwVGltZShzdHJ1Y3QgdGltZXZh bCAqdGltZW91dCkKIAl9CiB9CiAKKy8qCisgKiBBY3RpdmF0ZSBvciBkZWFjdGl2YXRlIG5vdGlm aWNhdGlvbnMgb2Ygc2VydmVyIHNvY2tldCBldmVudHMuICBTaW5jZSB3ZQorICogZG9uJ3QgY3Vy cmVudGx5IGhhdmUgYSB3YXkgdG8gcmVtb3ZlIGV2ZW50cyBmcm9tIGFuIGV4aXN0aW5nIFdhaXRF dmVudFNldCwKKyAqIHdlJ2xsIGp1c3QgZGVzdHJveSBhbmQgcmVjcmVhdGUgdGhlIHdob2xlIHRo aW5nLiAgVGhpcyBpcyBjYWxsZWQgZHVyaW5nCisgKiBzaHV0ZG93biBzbyB3ZSBjYW4gd2FpdCBm b3IgYmFja2VuZHMgdG8gZXhpdCB3aXRob3V0IGFjY2VwdGluZyBuZXcKKyAqIGNvbm5lY3Rpb25z LCBhbmQgZHVyaW5nIGNyYXNoIHJlaW5pdGlhbGl6YXRpb24gd2hlbiB3ZSBuZWVkIHRvIHN0YXJ0 CisgKiBsaXN0ZW5pbmcgZm9yIG5ldyBjb25uZWN0aW9ucyBhZ2Fpbi4gIFRoaXMgd2lsbCBiZSBm cmVlZCBpbiBmb3JrIGNoaWxkcmVuIGJ5CisgKiBDbG9zZVBvc3RtYXN0ZXJQb3J0cygpLgorICov CitzdGF0aWMgdm9pZAorQ29uZmlndXJlUG9zdG1hc3RlcldhaXRTZXQoYm9vbCBhY2NlcHRfY29u bmVjdGlvbnMpCit7CisJaW50CQkJbnNvY2tldHM7CisKKwlpZiAocG1fd2FpdF9zZXQpCisJCUZy ZWVXYWl0RXZlbnRTZXQocG1fd2FpdF9zZXQpOworCXBtX3dhaXRfc2V0ID0gTlVMTDsKKworCS8q IEhvdyBtYW55IHNlcnZlciBzb2NrZXRzIGRvIHdlIG5lZWQgdG8gd2FpdCBmb3I/ICovCisJbnNv Y2tldHMgPSAwOworCWlmIChhY2NlcHRfY29ubmVjdGlvbnMpCisJeworCQl3aGlsZSAobnNvY2tl dHMgPCBNQVhMSVNURU4gJiYKKwkJCSAgIExpc3RlblNvY2tldFtuc29ja2V0c10gIT0gUEdJTlZB TElEX1NPQ0tFVCkKKwkJCSsrbnNvY2tldHM7CisJfQorCisJcG1fd2FpdF9zZXQgPSBDcmVhdGVX YWl0RXZlbnRTZXQoQ3VycmVudE1lbW9yeUNvbnRleHQsIDEgKyBuc29ja2V0cyk7CisJQWRkV2Fp dEV2ZW50VG9TZXQocG1fd2FpdF9zZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwg TXlMYXRjaCwKKwkJCQkJICBOVUxMKTsKKworCWlmIChhY2NlcHRfY29ubmVjdGlvbnMpCisJewor CQlmb3IgKGludCBpID0gMDsgaSA8IG5zb2NrZXRzOyBpKyspCisJCQlBZGRXYWl0RXZlbnRUb1Nl dChwbV93YWl0X3NldCwgV0xfU09DS0VUX0FDQ0VQVCwgTGlzdGVuU29ja2V0W2ldLAorCQkJCQkJ CSAgTlVMTCwgTlVMTCk7CisJfQorfQorCiAvKgogICogTWFpbiBpZGxlIGxvb3Agb2YgcG9zdG1h c3RlcgotICoKLSAqIE5COiBOZWVkcyB0byBiZSBjYWxsZWQgd2l0aCBzaWduYWxzIGJsb2NrZWQK ICAqLwogc3RhdGljIGludAogU2VydmVyTG9vcCh2b2lkKQogewotCWZkX3NldAkJcmVhZG1hc2s7 Ci0JaW50CQkJblNvY2tldHM7CiAJdGltZV90CQlsYXN0X2xvY2tmaWxlX3JlY2hlY2tfdGltZSwK IAkJCQlsYXN0X3RvdWNoX3RpbWU7CisJV2FpdEV2ZW50CWV2ZW50c1tNQVhMSVNURU5dOworCWlu dAkJCW5ldmVudHM7CiAKKwlDb25maWd1cmVQb3N0bWFzdGVyV2FpdFNldCh0cnVlKTsKIAlsYXN0 X2xvY2tmaWxlX3JlY2hlY2tfdGltZSA9IGxhc3RfdG91Y2hfdGltZSA9IHRpbWUoTlVMTCk7CiAK LQluU29ja2V0cyA9IGluaXRNYXNrcygmcmVhZG1hc2spOwotCiAJZm9yICg7OykKIAl7Ci0JCWZk X3NldAkJcm1hc2s7Ci0JCWludAkJCXNlbHJlczsKIAkJdGltZV90CQlub3c7CisJCXN0cnVjdCB0 aW1ldmFsIHRpbWVvdXQ7CiAKLQkJLyoKLQkJICogV2FpdCBmb3IgYSBjb25uZWN0aW9uIHJlcXVl c3QgdG8gYXJyaXZlLgotCQkgKgotCQkgKiBXZSBibG9jayBhbGwgc2lnbmFscyBleGNlcHQgd2hp bGUgc2xlZXBpbmcuIFRoYXQgbWFrZXMgaXQgc2FmZSBmb3IKLQkJICogc2lnbmFsIGhhbmRsZXJz LCB3aGljaCBhZ2FpbiBibG9jayBhbGwgc2lnbmFscyB3aGlsZSBleGVjdXRpbmcsIHRvCi0JCSAq IGRvIG5vbnRyaXZpYWwgd29yay4KLQkJICoKLQkJICogSWYgd2UgYXJlIGluIFBNX1dBSVRfREVB RF9FTkQgc3RhdGUsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhY2NlcHQKLQkJICogYW55IG5ldyBj b25uZWN0aW9ucywgc28gd2UgZG9uJ3QgY2FsbCBzZWxlY3QoKSwgYW5kIGp1c3Qgc2xlZXAuCi0J CSAqLwotCQltZW1jcHkoKGNoYXIgKikgJnJtYXNrLCAoY2hhciAqKSAmcmVhZG1hc2ssIHNpemVv ZihmZF9zZXQpKTsKKwkJRGV0ZXJtaW5lU2xlZXBUaW1lKCZ0aW1lb3V0KTsKIAotCQlpZiAocG1T dGF0ZSA9PSBQTV9XQUlUX0RFQURfRU5EKQotCQl7Ci0JCQlQR19TRVRNQVNLKCZVbkJsb2NrU2ln KTsKLQotCQkJcGdfdXNsZWVwKDEwMDAwMEwpOyAvKiAxMDAgbXNlYyBzZWVtcyByZWFzb25hYmxl ICovCi0JCQlzZWxyZXMgPSAwOwotCi0JCQlQR19TRVRNQVNLKCZCbG9ja1NpZyk7Ci0JCX0KLQkJ ZWxzZQotCQl7Ci0JCQkvKiBtdXN0IHNldCB0aW1lb3V0IGVhY2ggdGltZTsgc29tZSBPU2VzIGNo YW5nZSBpdCEgKi8KLQkJCXN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7Ci0KLQkJCS8qIE5lZWRzIHRv IHJ1biB3aXRoIGJsb2NrZWQgc2lnbmFscyEgKi8KLQkJCURldGVybWluZVNsZWVwVGltZSgmdGlt ZW91dCk7Ci0KLQkJCVBHX1NFVE1BU0soJlVuQmxvY2tTaWcpOwotCi0JCQlzZWxyZXMgPSBzZWxl Y3QoblNvY2tldHMsICZybWFzaywgTlVMTCwgTlVMTCwgJnRpbWVvdXQpOwotCi0JCQlQR19TRVRN QVNLKCZCbG9ja1NpZyk7Ci0JCX0KLQotCQkvKiBOb3cgY2hlY2sgdGhlIHNlbGVjdCgpIHJlc3Vs dCAqLwotCQlpZiAoc2VscmVzIDwgMCkKLQkJewotCQkJaWYgKGVycm5vICE9IEVJTlRSICYmIGVy cm5vICE9IEVXT1VMREJMT0NLKQotCQkJewotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycmNv ZGVfZm9yX3NvY2tldF9hY2Nlc3MoKSwKLQkJCQkJCSBlcnJtc2coInNlbGVjdCgpIGZhaWxlZCBp biBwb3N0bWFzdGVyOiAlbSIpKSk7Ci0JCQkJcmV0dXJuIFNUQVRVU19FUlJPUjsKLQkJCX0KLQkJ fQorCQluZXZlbnRzID0gV2FpdEV2ZW50U2V0V2FpdChwbV93YWl0X3NldCwKKwkJCQkJCQkJICAg dGltZW91dC50dl9zZWMgKiAxMDAwICsgdGltZW91dC50dl91c2VjIC8gMTAwMCwKKwkJCQkJCQkJ ICAgZXZlbnRzLAorCQkJCQkJCQkgICBsZW5ndGhvZihldmVudHMpLAorCQkJCQkJCQkgICAwIC8q IHBvc3RtYXN0ZXIgcG9zdHMgbm8gd2FpdF9ldmVudHMgKi8gKTsKIAogCQkvKgotCQkgKiBOZXcg Y29ubmVjdGlvbiBwZW5kaW5nIG9uIGFueSBvZiBvdXIgc29ja2V0cz8gSWYgc28sIGZvcmsgYSBj aGlsZAotCQkgKiBwcm9jZXNzIHRvIGRlYWwgd2l0aCBpdC4KKwkJICogTGF0Y2ggc2V0IGJ5IHNp Z25hbCBoYW5kbGVyLCBvciBuZXcgY29ubmVjdGlvbiBwZW5kaW5nIG9uIGFueSBvZgorCQkgKiBv dXIgc29ja2V0cz8gSWYgdGhlIGxhdHRlciwgZm9yayBhIGNoaWxkIHByb2Nlc3MgdG8gZGVhbCB3 aXRoIGl0LgogCQkgKi8KLQkJaWYgKHNlbHJlcyA+IDApCisJCWZvciAoaW50IGkgPSAwOyBpIDwg bmV2ZW50czsgaSsrKQogCQl7Ci0JCQlpbnQJCQlpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgTUFY TElTVEVOOyBpKyspCisJCQlpZiAoZXZlbnRzW2ldLmV2ZW50cyAmIFdMX0xBVENIX1NFVCkKIAkJ CXsKLQkJCQlpZiAoTGlzdGVuU29ja2V0W2ldID09IFBHSU5WQUxJRF9TT0NLRVQpCi0JCQkJCWJy ZWFrOwotCQkJCWlmIChGRF9JU1NFVChMaXN0ZW5Tb2NrZXRbaV0sICZybWFzaykpCisJCQkJUmVz ZXRMYXRjaChNeUxhdGNoKTsKKworCQkJCS8qIFByb2Nlc3Mgd29yayByZXF1ZXN0ZWQgdmlhIHNp Z25hbCBoYW5kbGVycy4gKi8KKwkJCQlpZiAocGVuZGluZ19wbV9zaHV0ZG93bl9yZXF1ZXN0KQor CQkJCQlwcm9jZXNzX3BtX3NodXRkb3duX3JlcXVlc3QoKTsKKwkJCQlpZiAocGVuZGluZ19wbV9j aGlsZF9leGl0KQorCQkJCQlwcm9jZXNzX3BtX2NoaWxkX2V4aXQoKTsKKwkJCQlpZiAocGVuZGlu Z19wbV9yZWxvYWRfcmVxdWVzdCkKKwkJCQkJcHJvY2Vzc19wbV9yZWxvYWRfcmVxdWVzdCgpOwor CQkJCWlmIChwZW5kaW5nX3BtX3Btc2lnbmFsKQorCQkJCQlwcm9jZXNzX3BtX3Btc2lnbmFsKCk7 CisJCQl9CisJCQllbHNlIGlmIChldmVudHNbaV0uZXZlbnRzICYgV0xfU09DS0VUX0FDQ0VQVCkK KwkJCXsKKwkJCQlQb3J0CSAgICpwb3J0OworCisJCQkJcG9ydCA9IENvbm5DcmVhdGUoZXZlbnRz W2ldLmZkKTsKKwkJCQlpZiAocG9ydCkKIAkJCQl7Ci0JCQkJCVBvcnQJICAgKnBvcnQ7CisJCQkJ CUJhY2tlbmRTdGFydHVwKHBvcnQpOwogCi0JCQkJCXBvcnQgPSBDb25uQ3JlYXRlKExpc3RlblNv Y2tldFtpXSk7Ci0JCQkJCWlmIChwb3J0KQotCQkJCQl7Ci0JCQkJCQlCYWNrZW5kU3RhcnR1cChw b3J0KTsKLQotCQkJCQkJLyoKLQkJCQkJCSAqIFdlIG5vIGxvbmdlciBuZWVkIHRoZSBvcGVuIHNv Y2tldCBvciBwb3J0IHN0cnVjdHVyZQotCQkJCQkJICogaW4gdGhpcyBwcm9jZXNzCi0JCQkJCQkg Ki8KLQkJCQkJCVN0cmVhbUNsb3NlKHBvcnQtPnNvY2spOwotCQkJCQkJQ29ubkZyZWUocG9ydCk7 Ci0JCQkJCX0KKwkJCQkJLyoKKwkJCQkJICogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIG9wZW4gc29j a2V0IG9yIHBvcnQgc3RydWN0dXJlIGluCisJCQkJCSAqIHRoaXMgcHJvY2VzcworCQkJCQkgKi8K KwkJCQkJU3RyZWFtQ2xvc2UocG9ydC0+c29jayk7CisJCQkJCUNvbm5GcmVlKHBvcnQpOwogCQkJ CX0KIAkJCX0KIAkJfQpAQCAtMTkzOSwzNCArMTkzMCw2IEBAIFNlcnZlckxvb3Aodm9pZCkKIAl9 CiB9CiAKLS8qCi0gKiBJbml0aWFsaXNlIHRoZSBtYXNrcyBmb3Igc2VsZWN0KCkgZm9yIHRoZSBw b3J0cyB3ZSBhcmUgbGlzdGVuaW5nIG9uLgotICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc29ja2V0 cyB0byBsaXN0ZW4gb24uCi0gKi8KLXN0YXRpYyBpbnQKLWluaXRNYXNrcyhmZF9zZXQgKnJtYXNr KQotewotCWludAkJCW1heHNvY2sgPSAtMTsKLQlpbnQJCQlpOwotCi0JRkRfWkVSTyhybWFzayk7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYTElTVEVOOyBpKyspCi0JewotCQlpbnQJCQlmZCA9IExp c3RlblNvY2tldFtpXTsKLQotCQlpZiAoZmQgPT0gUEdJTlZBTElEX1NPQ0tFVCkKLQkJCWJyZWFr OwotCQlGRF9TRVQoZmQsIHJtYXNrKTsKLQotCQlpZiAoZmQgPiBtYXhzb2NrKQotCQkJbWF4c29j ayA9IGZkOwotCX0KLQotCXJldHVybiBtYXhzb2NrICsgMTsKLX0KLQotCiAvKgogICogUmVhZCBh IGNsaWVudCdzIHN0YXJ0dXAgcGFja2V0IGFuZCBkbyBzb21ldGhpbmcgYWNjb3JkaW5nIHRvIGl0 LgogICoKQEAgLTI2MDksNiArMjU3MiwxMCBAQCBDbG9zZVBvc3RtYXN0ZXJQb3J0cyhib29sIGFt X3N5c2xvZ2dlcikKIHsKIAlpbnQJCQlpOwogCisJLyogUmVsZWFzZSByZXNvdXJjZXMgaGVsZCBi eSB0aGUgcG9zdG1hc3RlcidzIFdhaXRFdmVudFNldC4gKi8KKwlpZiAocG1fd2FpdF9zZXQpCisJ CUZyZWVXYWl0RXZlbnRTZXRBZnRlckZvcmsocG1fd2FpdF9zZXQpOworCiAjaWZuZGVmIFdJTjMy CiAKIAkvKgpAQCAtMjcwNywxNSArMjY3NCw0NiBAQCBJbml0UHJvY2Vzc0dsb2JhbHModm9pZCkK ICNlbmRpZgogfQogCisvKgorICogQ2hpbGQgcHJvY2Vzc2VzIHVzZSBTSUdVU1IxIHRvIG5vdGlm eSB1cyBvZiAncG1zaWduYWxzJy4gIHBnX2N0bCB1c2VzCisgKiBTSUdVU1IxIHRvIGFzayBwb3N0 bWFzdGVyIHRvIGNoZWNrIGZvciBsb2dyb3RhdGUgYW5kIHByb21vdGUgZmlsZXMuCisgKi8KK3N0 YXRpYyB2b2lkCitoYW5kbGVfcG1fcG1zaWduYWxfc2lnbmFsKFNJR05BTF9BUkdTKQoreworCWlu dAkJCXNhdmVfZXJybm8gPSBlcnJubzsKKworCXBlbmRpbmdfcG1fcG1zaWduYWwgPSB0cnVlOwor CVNldExhdGNoKE15TGF0Y2gpOworCisJZXJybm8gPSBzYXZlX2Vycm5vOworfQogCiAvKgotICog U0lHSFVQIC0tIHJlcmVhZCBjb25maWcgZmlsZXMsIGFuZCB0ZWxsIGNoaWxkcmVuIHRvIGRvIHNh bWUKKyAqIHBnX2N0bCB1c2VzIFNJR0hVUCB0byByZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBjb25m aWd1cmF0aW9uIGZpbGVzLgogICovCiBzdGF0aWMgdm9pZAotU0lHSFVQX2hhbmRsZXIoU0lHTkFM X0FSR1MpCitoYW5kbGVfcG1fcmVsb2FkX3JlcXVlc3Rfc2lnbmFsKFNJR05BTF9BUkdTKQogewog CWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKIAorCXBlbmRpbmdfcG1fcmVsb2FkX3JlcXVlc3Qg PSB0cnVlOworCVNldExhdGNoKE15TGF0Y2gpOworCisJZXJybm8gPSBzYXZlX2Vycm5vOworfQor CisvKgorICogUmUtcmVhZCBjb25maWcgZmlsZXMsIGFuZCB0ZWxsIGNoaWxkcmVuIHRvIGRvIHNh bWUuCisgKi8KK3N0YXRpYyB2b2lkCitwcm9jZXNzX3BtX3JlbG9hZF9yZXF1ZXN0KHZvaWQpCit7 CisJcGVuZGluZ19wbV9yZWxvYWRfcmVxdWVzdCA9IGZhbHNlOworCisJZXJlcG9ydChERUJVRzIs CisJCQkoZXJybXNnX2ludGVybmFsKCJwb3N0bWFzdGVyIHJlY2VpdmVkIHJlbG9hZCByZXF1ZXN0 IHNpZ25hbCIpKSk7CisKIAlpZiAoU2h1dGRvd24gPD0gU21hcnRTaHV0ZG93bikKIAl7CiAJCWVy ZXBvcnQoTE9HLApAQCAtMjc3MSwyNiArMjc2OSw3MSBAQCBTSUdIVVBfaGFuZGxlcihTSUdOQUxf QVJHUykKIAkJd3JpdGVfbm9uZGVmYXVsdF92YXJpYWJsZXMoUEdDX1NJR0hVUCk7CiAjZW5kaWYK IAl9Cit9CisKKy8qCisgKiBwZ19jdGwgdXNlcyBTSUdURVJNLCBTSUdJTlQgYW5kIFNJR1FVSVQg dG8gcmVxdWVzdCBkaWZmZXJlbnQgdHlwZXMgb2YKKyAqIHNodXRkb3duLgorICovCitzdGF0aWMg dm9pZAoraGFuZGxlX3BtX3NodXRkb3duX3JlcXVlc3Rfc2lnbmFsKFNJR05BTF9BUkdTKQorewor CWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKKworCXN3aXRjaCAocG9zdGdyZXNfc2lnbmFsX2Fy ZykKKwl7CisJCWNhc2UgU0lHVEVSTToKKwkJCS8qIHNtYXJ0IGlzIGltcGxpZWQgaWYgdGhlIG90 aGVyIHR3byBmbGFncyBhcmVuJ3Qgc2V0ICovCisJCQlwZW5kaW5nX3BtX3NodXRkb3duX3JlcXVl c3QgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgU0lHSU5UOgorCQkJcGVuZGluZ19wbV9mYXN0 X3NodXRkb3duX3JlcXVlc3QgPSB0cnVlOworCQkJcGVuZGluZ19wbV9zaHV0ZG93bl9yZXF1ZXN0 ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFNJR1FVSVQ6CisJCQlwZW5kaW5nX3BtX2ltbWVk aWF0ZV9zaHV0ZG93bl9yZXF1ZXN0ID0gdHJ1ZTsKKwkJCXBlbmRpbmdfcG1fc2h1dGRvd25fcmVx dWVzdCA9IHRydWU7CisJCQlicmVhazsKKwl9CisJU2V0TGF0Y2goTXlMYXRjaCk7CiAKIAllcnJu byA9IHNhdmVfZXJybm87CiB9CiAKLQogLyoKLSAqIHBtZGllIC0tIHNpZ25hbCBoYW5kbGVyIGZv ciBwcm9jZXNzaW5nIHZhcmlvdXMgcG9zdG1hc3RlciBzaWduYWxzLgorICogUHJvY2VzcyBzaHV0 ZG93biByZXF1ZXN0LgogICovCiBzdGF0aWMgdm9pZAotcG1kaWUoU0lHTkFMX0FSR1MpCitwcm9j ZXNzX3BtX3NodXRkb3duX3JlcXVlc3Qodm9pZCkKIHsKLQlpbnQJCQlzYXZlX2Vycm5vID0gZXJy bm87CisJaW50CQkJbW9kZTsKIAogCWVyZXBvcnQoREVCVUcyLAotCQkJKGVycm1zZ19pbnRlcm5h bCgicG9zdG1hc3RlciByZWNlaXZlZCBzaWduYWwgJWQiLAotCQkJCQkJCSBwb3N0Z3Jlc19zaWdu YWxfYXJnKSkpOworCQkJKGVycm1zZ19pbnRlcm5hbCgicG9zdG1hc3RlciByZWNlaXZlZCBzaHV0 ZG93biByZXF1ZXN0IHNpZ25hbCIpKSk7CiAKLQlzd2l0Y2ggKHBvc3RncmVzX3NpZ25hbF9hcmcp CisJcGVuZGluZ19wbV9zaHV0ZG93bl9yZXF1ZXN0ID0gZmFsc2U7CisKKwkvKgorCSAqIElmIG1v cmUgdGhhbiBvbmUgc2h1dGRvd24gcmVxdWVzdCBzaWduYWwgYXJyaXZlZCBzaW5jZSB0aGUgbGFz dCBzZXJ2ZXIKKwkgKiBsb29wLCB0YWtlIHRoZSBvbmUgdGhhdCBpcyB0aGUgbW9zdCBpbW1lZGlh dGUuICBUaGF0IG1hdGNoZXMgdGhlCisJICogcHJpb3JpdHkgdGhhdCB3b3VsZCBhcHBseSBpZiB3 ZSBwcm9jZXNzZWQgdGhlbSBvbmUgYnkgb25lIGluIGFueSBvcmRlci4KKwkgKi8KKwlpZiAocGVu ZGluZ19wbV9pbW1lZGlhdGVfc2h1dGRvd25fcmVxdWVzdCkKIAl7Ci0JCWNhc2UgU0lHVEVSTToK KwkJcGVuZGluZ19wbV9pbW1lZGlhdGVfc2h1dGRvd25fcmVxdWVzdCA9IGZhbHNlOworCQltb2Rl ID0gSW1tZWRpYXRlU2h1dGRvd247CisJfQorCWVsc2UgaWYgKHBlbmRpbmdfcG1fZmFzdF9zaHV0 ZG93bl9yZXF1ZXN0KQorCXsKKwkJcGVuZGluZ19wbV9mYXN0X3NodXRkb3duX3JlcXVlc3QgPSBm YWxzZTsKKwkJbW9kZSA9IEZhc3RTaHV0ZG93bjsKKwl9CisJZWxzZQorCQltb2RlID0gU21hcnRT aHV0ZG93bjsKKworCXN3aXRjaCAobW9kZSkKKwl7CisJCWNhc2UgU21hcnRTaHV0ZG93bjoKIAog CQkJLyoKIAkJCSAqIFNtYXJ0IFNodXRkb3duOgpAQCAtMjgzMCw3ICsyODczLDcgQEAgcG1kaWUo U0lHTkFMX0FSR1MpCiAJCQlQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKCk7CiAJCQlicmVhazsKIAot CQljYXNlIFNJR0lOVDoKKwkJY2FzZSBGYXN0U2h1dGRvd246CiAKIAkJCS8qCiAJCQkgKiBGYXN0 IFNodXRkb3duOgpAQCAtMjg3MSw3ICsyOTE0LDcgQEAgcG1kaWUoU0lHTkFMX0FSR1MpCiAJCQlQ b3N0bWFzdGVyU3RhdGVNYWNoaW5lKCk7CiAJCQlicmVhazsKIAotCQljYXNlIFNJR1FVSVQ6CisJ CWNhc2UgSW1tZWRpYXRlU2h1dGRvd246CiAKIAkJCS8qCiAJCQkgKiBJbW1lZGlhdGUgU2h1dGRv d246CkBAIC0yOTA4LDIwICsyOTUxLDMwIEBAIHBtZGllKFNJR05BTF9BUkdTKQogCQkJUG9zdG1h c3RlclN0YXRlTWFjaGluZSgpOwogCQkJYnJlYWs7CiAJfQorfQorCitzdGF0aWMgdm9pZAoraGFu ZGxlX3BtX2NoaWxkX2V4aXRfc2lnbmFsKFNJR05BTF9BUkdTKQoreworCWludAkJCXNhdmVfZXJy bm8gPSBlcnJubzsKKworCXBlbmRpbmdfcG1fY2hpbGRfZXhpdCA9IHRydWU7CisJU2V0TGF0Y2go TXlMYXRjaCk7CiAKIAllcnJubyA9IHNhdmVfZXJybm87CiB9CiAKIC8qCi0gKiBSZWFwZXIgLS0g c2lnbmFsIGhhbmRsZXIgdG8gY2xlYW51cCBhZnRlciBhIGNoaWxkIHByb2Nlc3MgZGllcy4KKyAq IENsZWFudXAgYWZ0ZXIgYSBjaGlsZCBwcm9jZXNzIGRpZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1y ZWFwZXIoU0lHTkFMX0FSR1MpCitwcm9jZXNzX3BtX2NoaWxkX2V4aXQodm9pZCkKIHsKLQlpbnQJ CQlzYXZlX2Vycm5vID0gZXJybm87CiAJaW50CQkJcGlkOwkJCS8qIHByb2Nlc3MgaWQgb2YgZGVh ZCBjaGlsZCBwcm9jZXNzICovCiAJaW50CQkJZXhpdHN0YXR1czsJCS8qIGl0cyBleGl0IHN0YXR1 cyAqLwogCisJcGVuZGluZ19wbV9jaGlsZF9leGl0ID0gZmFsc2U7CisKIAllcmVwb3J0KERFQlVH NCwKIAkJCShlcnJtc2dfaW50ZXJuYWwoInJlYXBpbmcgZGVhZCBwcm9jZXNzZXMiKSkpOwogCkBA IC0zMjEzLDggKzMyNjYsNiBAQCByZWFwZXIoU0lHTkFMX0FSR1MpCiAJICogb3IgYWN0aW9ucyB0 byBtYWtlLgogCSAqLwogCVBvc3RtYXN0ZXJTdGF0ZU1hY2hpbmUoKTsKLQotCWVycm5vID0gc2F2 ZV9lcnJubzsKIH0KIAogLyoKQEAgLTM2NDIsOCArMzY5Myw5IEBAIExvZ0NoaWxkRXhpdChpbnQg bGV2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwgaW50IHBpZCwgaW50IGV4aXRzdGF0dXMpCiAvKgog ICogQWR2YW5jZSB0aGUgcG9zdG1hc3RlcidzIHN0YXRlIG1hY2hpbmUgYW5kIHRha2UgYWN0aW9u cyBhcyBhcHByb3ByaWF0ZQogICoKLSAqIFRoaXMgaXMgY29tbW9uIGNvZGUgZm9yIHBtZGllKCks IHJlYXBlcigpIGFuZCBzaWd1c3IxX2hhbmRsZXIoKSwgd2hpY2gKLSAqIHJlY2VpdmUgdGhlIHNp Z25hbHMgdGhhdCBtaWdodCBtZWFuIHdlIG5lZWQgdG8gY2hhbmdlIHN0YXRlLgorICogVGhpcyBp cyBjb21tb24gY29kZSBmb3IgcHJvY2Vzc19zaHV0ZG93bl9yZXF1ZXN0KCksIHByb2Nlc3NfY2hp bGRfZXhpdCgpIGFuZAorICogcHJvY2Vzc19wbXNpZ25hbCgpLCB3aGljaCBwcm9jZXNzIHRoZSBz aWduYWxzIHRoYXQgbWlnaHQgbWVhbiB3ZSBuZWVkCisgKiB0byBjaGFuZ2Ugc3RhdGUuCiAgKi8K IHN0YXRpYyB2b2lkCiBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCkBAIC0zNzk2LDYgKzM4 NDgsOSBAQCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAKIAlpZiAocG1TdGF0ZSA9PSBQ TV9XQUlUX0RFQURfRU5EKQogCXsKKwkJLyogRG9uJ3QgYWxsb3cgYW55IG5ldyBzb2NrZXQgY29u bmVjdGlvbiBldmVudHMuICovCisJCUNvbmZpZ3VyZVBvc3RtYXN0ZXJXYWl0U2V0KGZhbHNlKTsK KwogCQkvKgogCQkgKiBQTV9XQUlUX0RFQURfRU5EIHN0YXRlIGVuZHMgd2hlbiB0aGUgQmFja2Vu ZExpc3QgaXMgZW50aXJlbHkgZW1wdHkKIAkJICogKGllLCBubyBkZWFkX2VuZCBjaGlsZHJlbiBy ZW1haW4pLCBhbmQgdGhlIGFyY2hpdmVyIGlzIGdvbmUgdG9vLgpAQCAtMzkwNSw2ICszOTYwLDkg QEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQogCQlwbVN0YXRlID0gUE1fU1RBUlRVUDsK IAkJLyogY3Jhc2ggcmVjb3Zlcnkgc3RhcnRlZCwgcmVzZXQgU0lHS0lMTCBmbGFnICovCiAJCUFi b3J0U3RhcnRUaW1lID0gMDsKKworCQkvKiBzdGFydCBhY2NlcHRpbmcgc2VydmVyIHNvY2tldCBj b25uZWN0aW9uIGV2ZW50cyBhZ2FpbiAqLworCQlDb25maWd1cmVQb3N0bWFzdGVyV2FpdFNldCh0 cnVlKTsKIAl9CiB9CiAKQEAgLTUwMTMsMTIgKzUwNzEsMTYgQEAgRXhpdFBvc3RtYXN0ZXIoaW50 IHN0YXR1cykKIH0KIAogLyoKLSAqIHNpZ3VzcjFfaGFuZGxlciAtIGhhbmRsZSBzaWduYWwgY29u ZGl0aW9ucyBmcm9tIGNoaWxkIHByb2Nlc3NlcworICogSGFuZGxlIHBtc2lnbmFsIGNvbmRpdGlv bnMgcmVwcmVzZW50aW5nIHJlcXVlc3RzIGZyb20gYmFja2VuZHMsCisgKiBhbmQgY2hlY2sgZm9y IHByb21vdGUgYW5kIGxvZ3JvdGF0ZSByZXF1ZXN0cyBmcm9tIHBnX2N0bC4KICAqLwogc3RhdGlj IHZvaWQKLXNpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKK3Byb2Nlc3NfcG1fcG1zaWduYWwo dm9pZCkKIHsKLQlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87CisJcGVuZGluZ19wbV9wbXNpZ25h bCA9IGZhbHNlOworCisJZXJlcG9ydChERUJVRzIsCisJCQkoZXJybXNnX2ludGVybmFsKCJwb3N0 bWFzdGVyIHJlY2VpdmVkIGFjdGlvbiByZXF1ZXN0IHNpZ25hbCIpKSk7CiAKIAkvKgogCSAqIFJF Q09WRVJZX1NUQVJURUQgYW5kIEJFR0lOX0hPVF9TVEFOREJZIHNpZ25hbHMgYXJlIGlnbm9yZWQg aW4KQEAgLTUxNTksOCArNTIyMSw2IEBAIHNpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKIAkJ ICovCiAJCXNpZ25hbF9jaGlsZChTdGFydHVwUElELCBTSUdVU1IyKTsKIAl9Ci0KLQllcnJubyA9 IHNhdmVfZXJybm87CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggMjI0YWIyOTBhZi4uNDcw YjczNGU5ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPHNp Z25hbC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgot I2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVk ZSA8c3lzL3RpbWUuaD4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNj aW5pdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IDliODQwYTYz MTguLjBjZGMxZTExYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2lu aXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKQEAgLTEzNSw4ICsx MzUsNyBAQCBJbml0UG9zdG1hc3RlckNoaWxkKHZvaWQpCiAKIAkvKiBJbml0aWFsaXplIHByb2Nl c3MtbG9jYWwgbGF0Y2ggc3VwcG9ydCAqLwogCUluaXRpYWxpemVMYXRjaFN1cHBvcnQoKTsKLQlN eUxhdGNoID0gJkxvY2FsTGF0Y2hEYXRhOwotCUluaXRMYXRjaChNeUxhdGNoKTsKKwlJbml0UHJv Y2Vzc0xvY2FsTGF0Y2goKTsKIAlJbml0aWFsaXplTGF0Y2hXYWl0U2V0KCk7CiAKIAkvKgpAQCAt MTg5LDggKzE4OCw3IEBAIEluaXRTdGFuZGFsb25lUHJvY2Vzcyhjb25zdCBjaGFyICphcmd2MCkK IAogCS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2NhbCBsYXRjaCBzdXBwb3J0ICovCiAJSW5pdGlh bGl6ZUxhdGNoU3VwcG9ydCgpOwotCU15TGF0Y2ggPSAmTG9jYWxMYXRjaERhdGE7Ci0JSW5pdExh dGNoKE15TGF0Y2gpOworCUluaXRQcm9jZXNzTG9jYWxMYXRjaCgpOwogCUluaXRpYWxpemVMYXRj aFdhaXRTZXQoKTsKIAogCS8qCkBAIC0yMzIsNiArMjMwLDEzIEBAIFN3aXRjaFRvU2hhcmVkTGF0 Y2godm9pZCkKIAlTZXRMYXRjaChNeUxhdGNoKTsKIH0KIAordm9pZAorSW5pdFByb2Nlc3NMb2Nh bExhdGNoKHZvaWQpCit7CisJTXlMYXRjaCA9ICZMb2NhbExhdGNoRGF0YTsKKwlJbml0TGF0Y2go TXlMYXRjaCk7Cit9CisKIHZvaWQKIFN3aXRjaEJhY2tUb0xvY2FsTGF0Y2godm9pZCkKIHsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL3Bxc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9saWJw cS9wcXNpZ25hbC5oCmluZGV4IDI5ZWU1YWQyYjYuLjFlNjZmMjViNzYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2xpYnBxL3Bxc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvcHFzaWdu YWwuaApAQCAtNTMsNyArNTMsNCBAQCBleHRlcm4gUEdETExJTVBPUlQgc2lnc2V0X3QgU3RhcnR1 cEJsb2NrU2lnOwogCiBleHRlcm4gdm9pZCBwcWluaXRtYXNrKHZvaWQpOwogCi0vKiBwcXNpZ2Z1 bmMgaXMgZGVjbGFyZWQgaW4gc3JjL2luY2x1ZGUvcG9ydC5oICovCi1leHRlcm4gcHFzaWdmdW5j IHBxc2lnbmFsX3BtKGludCBzaWdubywgcHFzaWdmdW5jIGZ1bmMpOwotCiAjZW5kaWYJCQkJCQkJ LyogUFFTSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9z cmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAwZmZlZWZjNDM3Li45NmIzYTFlMWEwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRt aW4uaApAQCAtMzEwLDYgKzMxMCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICpEYXRhYmFz ZVBhdGg7CiAvKiBub3cgaW4gdXRpbHMvaW5pdC9taXNjaW5pdC5jICovCiBleHRlcm4gdm9pZCBJ bml0UG9zdG1hc3RlckNoaWxkKHZvaWQpOwogZXh0ZXJuIHZvaWQgSW5pdFN0YW5kYWxvbmVQcm9j ZXNzKGNvbnN0IGNoYXIgKmFyZ3YwKTsKK2V4dGVybiB2b2lkIEluaXRQcm9jZXNzTG9jYWxMYXRj aCh2b2lkKTsKIGV4dGVybiB2b2lkIFN3aXRjaFRvU2hhcmVkTGF0Y2godm9pZCk7CiBleHRlcm4g dm9pZCBTd2l0Y2hCYWNrVG9Mb2NhbExhdGNoKHZvaWQpOwogCi0tIAoyLjM4LjEKCg== --00000000000082c56105f1f44d03 Content-Type: text/x-patch; charset="US-ASCII"; name="v10-0002-Refactor-DetermineSleepTime-to-use-milliseconds.patch" Content-Disposition: attachment; filename="v10-0002-Refactor-DetermineSleepTime-to-use-milliseconds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcr2kzq91 RnJvbSAzNWViMGJlZTNiNGU5MDExNWM3NTczOWMxNjg5MmMxNThiMzc1YzQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTEgSmFuIDIwMjMgMTQ6NDg6MDYgKzEzMDAKU3ViamVjdDogW1BBVENIIHYx MCAyLzJdIFJlZmFjdG9yIERldGVybWluZVNsZWVwVGltZSgpIHRvIHVzZSBtaWxsaXNlY29uZHMu CgpTaW5jZSB3ZSdyZSBub3QgdXNpbmcgc2VsZWN0KCkgYW55bW9yZSwgd2UgZG9uJ3QgbmVlZCB0 byBib3RoZXIgd2l0aApzdHJ1Y3QgdGltZXZhbC4gIFdlIGNhbiB3b3JrIGRpcmVjdGx5IGluIG1p bGxpc2Vjb25kcywgd2hpY2ggdGhlIGxhdGNoCkFQSSB3YW50cy4gIFRoaXMgY2hhbmdlIHdhcyBr ZXB0IHNlcGFyYXRlIHRvIG1ha2UgcmV2aWV3IGVhc2llci4KLS0tCiBzcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuYyB8IDU5ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiAx IGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNDAgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA4YmJjMTA0MmE1Li5iNTVlM2U3N2JjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtMTU4Niw3ICsxNTg2LDcgQEAgY2hlY2tD b250cm9sRmlsZSh2b2lkKQogfQogCiAvKgotICogRGV0ZXJtaW5lIGhvdyBsb25nIHNob3VsZCB3 ZSBsZXQgU2VydmVyTG9vcCBzbGVlcC4KKyAqIERldGVybWluZSBob3cgbG9uZyBzaG91bGQgd2Ug bGV0IFNlcnZlckxvb3Agc2xlZXAsIGluIG1pbGxpc2Vjb25kcy4KICAqCiAgKiBJbiBub3JtYWwg Y29uZGl0aW9ucyB3ZSB3YWl0IGF0IG1vc3Qgb25lIG1pbnV0ZSwgdG8gZW5zdXJlIHRoYXQgdGhl IG90aGVyCiAgKiBiYWNrZ3JvdW5kIHRhc2tzIGhhbmRsZWQgYnkgU2VydmVyTG9vcCBnZXQgZG9u ZSBldmVuIHdoZW4gbm8gcmVxdWVzdHMgYXJlCkBAIC0xNTk0LDggKzE1OTQsOCBAQCBjaGVja0Nv bnRyb2xGaWxlKHZvaWQpCiAgKiB3ZSBkb24ndCBhY3R1YWxseSBzbGVlcCBzbyB0aGF0IHRoZXkg YXJlIHF1aWNrbHkgc2VydmljZWQuICBPdGhlciBleGNlcHRpb24KICAqIGNhc2VzIGFyZSBhcyBz aG93biBpbiB0aGUgY29kZS4KICAqLwotc3RhdGljIHZvaWQKLURldGVybWluZVNsZWVwVGltZShz dHJ1Y3QgdGltZXZhbCAqdGltZW91dCkKK3N0YXRpYyBpbnQKK0RldGVybWluZVNsZWVwVGltZSh2 b2lkKQogewogCVRpbWVzdGFtcFR6IG5leHRfd2FrZXVwID0gMDsKIApAQCAtMTYwOCwyNiArMTYw OCwyMCBAQCBEZXRlcm1pbmVTbGVlcFRpbWUoc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQpCiAJewog CQlpZiAoQWJvcnRTdGFydFRpbWUgIT0gMCkKIAkJeworCQkJaW50CQkJc2Vjb25kczsKKwogCQkJ LyogdGltZSBsZWZ0IHRvIGFib3J0OyBjbGFtcCB0byAwIGluIGNhc2UgaXQgYWxyZWFkeSBleHBp cmVkICovCi0JCQl0aW1lb3V0LT50dl9zZWMgPSBTSUdLSUxMX0NISUxEUkVOX0FGVEVSX1NFQ1Mg LQotCQkJCSh0aW1lKE5VTEwpIC0gQWJvcnRTdGFydFRpbWUpOwotCQkJdGltZW91dC0+dHZfc2Vj ID0gTWF4KHRpbWVvdXQtPnR2X3NlYywgMCk7Ci0JCQl0aW1lb3V0LT50dl91c2VjID0gMDsKKwkJ CXNlY29uZHMgPSBNYXgoMCwKKwkJCQkJCSAgU0lHS0lMTF9DSElMRFJFTl9BRlRFUl9TRUNTIC0g KHRpbWUoTlVMTCkgLSBBYm9ydFN0YXJ0VGltZSkpOworCisJCQlyZXR1cm4gTWF4KHNlY29uZHMg KiAxMDAwLCAwKTsKIAkJfQogCQllbHNlCi0JCXsKLQkJCXRpbWVvdXQtPnR2X3NlYyA9IDYwOwot CQkJdGltZW91dC0+dHZfdXNlYyA9IDA7Ci0JCX0KLQkJcmV0dXJuOworCQkJcmV0dXJuIDYwICog MTAwMDsKIAl9CiAKIAlpZiAoU3RhcnRXb3JrZXJOZWVkZWQpCi0JewotCQl0aW1lb3V0LT50dl9z ZWMgPSAwOwotCQl0aW1lb3V0LT50dl91c2VjID0gMDsKLQkJcmV0dXJuOwotCX0KKwkJcmV0dXJu IDA7CiAKIAlpZiAoSGF2ZUNyYXNoZWRXb3JrZXIpCiAJewpAQCAtMTY2NSwyNiArMTY1OSwxNCBA QCBEZXRlcm1pbmVTbGVlcFRpbWUoc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQpCiAKIAlpZiAobmV4 dF93YWtldXAgIT0gMCkKIAl7Ci0JCWxvbmcJCXNlY3M7Ci0JCWludAkJCW1pY3Jvc2VjczsKLQot CQlUaW1lc3RhbXBEaWZmZXJlbmNlKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwgbmV4dF93YWtldXAs Ci0JCQkJCQkJJnNlY3MsICZtaWNyb3NlY3MpOwotCQl0aW1lb3V0LT50dl9zZWMgPSBzZWNzOwot CQl0aW1lb3V0LT50dl91c2VjID0gbWljcm9zZWNzOwotCi0JCS8qIEVuc3VyZSB3ZSBkb24ndCBl eGNlZWQgb25lIG1pbnV0ZSAqLwotCQlpZiAodGltZW91dC0+dHZfc2VjID4gNjApCi0JCXsKLQkJ CXRpbWVvdXQtPnR2X3NlYyA9IDYwOwotCQkJdGltZW91dC0+dHZfdXNlYyA9IDA7Ci0JCX0KLQl9 Ci0JZWxzZQotCXsKLQkJdGltZW91dC0+dHZfc2VjID0gNjA7Ci0JCXRpbWVvdXQtPnR2X3VzZWMg PSAwOworCQkvKiBFbnN1cmUgd2UgZG9uJ3QgZXhjZWVkIG9uZSBtaW51dGUsIG9yIGdvIHVuZGVy IDAuICovCisJCXJldHVybiBNYXgoMCwKKwkJCQkgICBNaW4oNjAgKiAxMDAwLAorCQkJCQkgICBU aW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwKKwkJ CQkJCQkJCQkJCQkgICBuZXh0X3dha2V1cCkpKTsKIAl9CisKKwlyZXR1cm4gNjAgKiAxMDAwOwog fQogCiAvKgpAQCAtMTc0MywxMiArMTcyNSw5IEBAIFNlcnZlckxvb3Aodm9pZCkKIAlmb3IgKDs7 KQogCXsKIAkJdGltZV90CQlub3c7Ci0JCXN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7Ci0KLQkJRGV0 ZXJtaW5lU2xlZXBUaW1lKCZ0aW1lb3V0KTsKIAogCQluZXZlbnRzID0gV2FpdEV2ZW50U2V0V2Fp dChwbV93YWl0X3NldCwKLQkJCQkJCQkJICAgdGltZW91dC50dl9zZWMgKiAxMDAwICsgdGltZW91 dC50dl91c2VjIC8gMTAwMCwKKwkJCQkJCQkJICAgRGV0ZXJtaW5lU2xlZXBUaW1lKCksCiAJCQkJ CQkJCSAgIGV2ZW50cywKIAkJCQkJCQkJICAgbGVuZ3Rob2YoZXZlbnRzKSwKIAkJCQkJCQkJICAg MCAvKiBwb3N0bWFzdGVyIHBvc3RzIG5vIHdhaXRfZXZlbnRzICovICk7Ci0tIAoyLjM4LjEKCg== --00000000000082c56105f1f44d03--