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 1kcWyo-0002km-BM for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Nov 2020 16:58:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kcWyn-00076e-7B for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Nov 2020 16:58:49 +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 1kcWym-00076X-T1 for pgsql-hackers@lists.postgresql.org; Tue, 10 Nov 2020 16:58:49 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kcWyk-000871-0r for pgsql-hackers@lists.postgresql.org; Tue, 10 Nov 2020 16:58:48 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id C82EC21C44E1; Tue, 10 Nov 2020 19:58:44 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1605027524; bh=zvw1Ouqjt6BVwJ4G9+J9ljcykZeeZ5utR26PaFENAaQ=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=HohtIy10R2FnTyHe4DpCNkPisOL+EQ8G9CXoxzpVkqNsQdaO7rmqQV9xrBAXyXMtf no03dLV6UwX6oC7KzqaYZlZ59BFb2QKBsEQtw72YXI6swIEuOp+mKcmHYPGLCwvPKI pXAeGQJNB9E/bUKAPj38d4KARiljAUZtTNt/Yxjo= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_93eb5f9d6da044fed01e13a051abfe58" Content-Transfer-Encoding: 8bit Date: Tue, 10 Nov 2020 19:58:44 +0300 From: Alexey Kondratov To: Tom Lane Cc: PostgreSQL Hackers , Robert Haas Subject: Re: Misuse of TimestampDifference() in the autoprewarm feature of pg_prewarm In-Reply-To: <1996862.1604953516@sss.pgh.pa.us> References: <3b1c053a21c07c1ed5e00be3b2b855ef@postgrespro.ru> <1992985.1604948005@sss.pgh.pa.us> <1996862.1604953516@sss.pgh.pa.us> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <01241062b6bfea2f17e32a65a4f99d61@postgrespro.ru> X-Sender: a.kondratov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_93eb5f9d6da044fed01e13a051abfe58 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2020-11-09 23:25, Tom Lane wrote: > Alexey Kondratov writes: >> On 2020-11-09 21:53, Tom Lane wrote: >>> 0002 seems like a pretty clear bug fix, though I wonder if this is >>> exactly >>> what we want to do going forward. It seems like a very large >>> fraction of >>> the callers of TimestampDifference would like to have the value in >>> msec, >>> which means we're doing a whole lot of expensive and error-prone >>> arithmetic to break down the difference to sec/usec and then put it >>> back together again. Let's get rid of that by inventing, say >>> TimestampDifferenceMilliseconds(...). > >> Yeah, I get into this problem after a bug in another extension — >> pg_wait_sampling. I have attached 0002, which implements >> TimestampDifferenceMilliseconds(), so 0003 just uses this new function >> to solve the initial issues. If it looks good to you, then we can >> switch >> all similar callers to it. > > Yeah, let's move forward with that --- in fact, I'm inclined to > back-patch it. (Not till the current release cycle is done, though. > I don't find this important enough to justify a last-moment patch.) > > BTW, I wonder if we shouldn't make TimestampDifferenceMilliseconds > round any fractional millisecond up rather than down. Rounding down > seems to create a hazard of uselessly waking just before the delay is > completed. Better to wake just after. > Yes, it make sense. I have changed TimestampDifferenceMilliseconds() to round result up if there is a reminder. After looking on the autoprewarm code more closely I have realised that this 'double dump' issues was not an issues at all. I have just misplaced a debug elog(), so its second output in the log was only indicating that we calculated delay_in_ms one more time. Actually, even with wrong calculation of delay_in_ms the only problem was that we were busy looping with ~1 second interval instead of waiting on latch. It is still a buggy behaviour, but much less harmful than I have originally thought. Regards -- Alexey Kondratov Postgres Professional https://www.postgrespro.com Russian Postgres Company --=_93eb5f9d6da044fed01e13a051abfe58 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0003-pg_prewarm-add-tap-test-for-autoprewarm-feature.patch Content-Disposition: attachment; filename=v3-0003-pg_prewarm-add-tap-test-for-autoprewarm-feature.patch; size=2472 RnJvbSBjZTA5MTAzZDlkNThiNjExNzI4YjY2MzY2Y2QyNGU4YTQwNjlmN2FjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgS29uZHJhdG92IDxrb25kcmF0b3YuYWxla3NleUBn bWFpbC5jb20+CkRhdGU6IE1vbiwgOSBOb3YgMjAyMCAxOTowNDoxMCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMgMy8zXSBwZ19wcmV3YXJtOiBhZGQgdGFwIHRlc3QgZm9yIGF1dG9wcmV3YXJtIGZl YXR1cmUKCi0tLQogY29udHJpYi9wZ19wcmV3YXJtL01ha2VmaWxlICAgICAgICAgICAgIHwgIDIg KwogY29udHJpYi9wZ19wcmV3YXJtL3QvMDAxX2F1dG9wcmV3YXJtLnBsIHwgNTkgKysrKysrKysr KysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wcmV3YXJtL3QvMDAxX2F1dG9wcmV3YXJtLnBsCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wcmV3YXJtL01ha2VmaWxlIGIvY29udHJpYi9wZ19wcmV3 YXJtL01ha2VmaWxlCmluZGV4IGIxM2FjM2M4MTMuLjljZmRlOGM0ZTQgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfcHJld2FybS9NYWtlZmlsZQorKysgYi9jb250cmliL3BnX3ByZXdhcm0vTWFrZWZp bGUKQEAgLTEwLDYgKzEwLDggQEAgRVhURU5TSU9OID0gcGdfcHJld2FybQogREFUQSA9IHBnX3By ZXdhcm0tLTEuMS0tMS4yLnNxbCBwZ19wcmV3YXJtLS0xLjEuc3FsIHBnX3ByZXdhcm0tLTEuMC0t MS4xLnNxbAogUEdGSUxFREVTQyA9ICJwZ19wcmV3YXJtIC0gcHJlbG9hZCByZWxhdGlvbiBkYXRh IGludG8gc3lzdGVtIGJ1ZmZlciBjYWNoZSIKIAorVEFQX1RFU1RTID0gMQorCiBpZmRlZiBVU0Vf UEdYUwogUEdfQ09ORklHID0gcGdfY29uZmlnCiBQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcp IC0tcGd4cykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcHJld2FybS90LzAwMV9hdXRvcHJld2Fy bS5wbCBiL2NvbnRyaWIvcGdfcHJld2FybS90LzAwMV9hdXRvcHJld2FybS5wbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mNTViMmE1MzUyCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wcmV3YXJtL3QvMDAxX2F1dG9wcmV3YXJtLnBsCkBAIC0wLDAgKzEsNTkg QEAKKyMKKyMgQ2hlY2sgdGhhdCBwZ19wcmV3YXJtIGNhbiBkdW1wIGJsb2NrcyBmcm9tIHNoYXJl ZCBidWZmZXJzCisjIHRvIFBHREFUQS9hdXRvcHJld2FybS5ibG9ja3MuCisjCisKK3VzZSBzdHJp Y3Q7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBUZXN0TGliOwordXNlIFRpbWU6OkhpUmVzIHF3KHVz bGVlcCk7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3Jlc05vZGU7CisKK3BsYW4gdGVzdHMg PT4gMzsKKworIyBXYWl0IHVwIHRvIDE4MHMgZm9yIHBnX3ByZXdhcm0gdG8gZHVtcCBibG9ja3Mu CitzdWIgd2FpdF9mb3JfZHVtcAoreworCW15ICRwYXRoID0gc2hpZnQ7CisKKwlmb3JlYWNoIG15 ICRpICgwIC4uIDE4MDApCisJeworCQlsYXN0IGlmIC1lICRwYXRoOworCQl1c2xlZXAoMTAwXzAw MCk7CisJfQorfQorCitteSAkbm9kZSA9IGdldF9uZXdfbm9kZSgibm9kZSIpOworJG5vZGUtPmlu aXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAorc2hhcmVk X3ByZWxvYWRfbGlicmFyaWVzID0gJ3BnX3ByZXdhcm0nCitwZ19wcmV3YXJtLmF1dG9wcmV3YXJt ID0gJ29uJworcGdfcHJld2FybS5hdXRvcHJld2FybV9pbnRlcnZhbCA9IDEKKykpOworJG5vZGUt PnN0YXJ0OworCitteSAkYmxvY2tzX3BhdGggPSAkbm9kZS0+ZGF0YV9kaXIgLiAnL2F1dG9wcmV3 YXJtLmJsb2Nrcyc7CisKKyMgQ2hlY2sgdGhhdCB3ZSBjYW4gZHVtcCBibG9ja3Mgb24gdGltZW91 dC4KK3dhaXRfZm9yX2R1bXAoJGJsb2Nrc19wYXRoKTsKK29rKC1lICRibG9ja3NfcGF0aCwgJ2Zp bGUgYXV0b3ByZXdhcm0uYmxvY2tzIHNob3VsZCBiZSBwcmVzZW50IGluIHRoZSBQR0RBVEEnKTsK KworIyBDaGVjayB0aGF0IHdlIGNhbiBkdW1wIGJsb2NrcyBvbiBzaHV0ZG93bi4KKyRub2RlLT5z dG9wOworJG5vZGUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKK3BnX3By ZXdhcm0uYXV0b3ByZXdhcm1faW50ZXJ2YWwgPSAwCispKTsKKworIyBSZW1vdmUgYXV0b3ByZXdh cm0uYmxvY2tzCit1bmxpbmsoJGJsb2Nrc19wYXRoKSB8fCBkaWUgIiRibG9ja3NfcGF0aDogJCEi Oworb2soIS1lICRibG9ja3NfcGF0aCwgJ3Nhbml0eSBjaGVjaywgZHVtcCBvbiB0aW1lb3V0IGlz IHR1cm5lZCBvZmYnKTsKKworJG5vZGUtPnN0YXJ0OworJG5vZGUtPnN0b3A7CisKK3dhaXRfZm9y X2R1bXAoJGJsb2Nrc19wYXRoKTsKK29rKC1lICRibG9ja3NfcGF0aCwgJ2ZpbGUgYXV0b3ByZXdh cm0uYmxvY2tzIHNob3VsZCBiZSBwcmVzZW50IGluIHRoZSBQR0RBVEEgYWZ0ZXIgY2xlYW4gc2h1 dGRvd24nKTsKLS0gCjIuMTkuMQoK --=_93eb5f9d6da044fed01e13a051abfe58 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0002-pg_prewarm-fix-autoprewarm_interval-behaviour.patch Content-Disposition: attachment; filename=v3-0002-pg_prewarm-fix-autoprewarm_interval-behaviour.patch; size=1352 RnJvbSBmYmEyMTJlZDc2NWM4YzQxMWRiMWNhMTljMmFjOTkxNjYyMTA5ZDk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgS29uZHJhdG92IDxrb25kcmF0b3YuYWxla3NleUBn bWFpbC5jb20+CkRhdGU6IE1vbiwgOSBOb3YgMjAyMCAxOToxMjowMCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMgMi8zXSBwZ19wcmV3YXJtOiBmaXggYXV0b3ByZXdhcm1faW50ZXJ2YWwgYmVoYXZp b3VyCgpQcmV2aW91c2x5IGl0IG1pc3VzZWQgc2Vjb25kcyBmcm9tIFRpbWVzdGFtcERpZmZlcmVu Y2UoKSBhcwptaWxsaXNlY29uZHMsIHNvIGl0IHdhcyBidXN5IGxvb3Bpbmcgd2l0aCB+MSBzZWNv bmQgaW50ZXJ2YWwKaW5zdGVhZCBvZiB3YWl0aW5nIG9uIGxhdGNoIHdpdGggZGVmYXVsdCBhdXRv cHJld2FybV9pbnRlcnZhbCA9IDMwMHMuCi0tLQogY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3 YXJtLmMgfCA4ICsrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA1IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5j IGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKaW5kZXggZDNkZWM2ZTNlYy4uZTVi ZDEzMGJjOCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKKysr IGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKQEAgLTIyMiwxNiArMjIyLDE0IEBA IGF1dG9wcmV3YXJtX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJCXsKIAkJCWxvbmcJCWRlbGF5X2lu X21zID0gMDsKIAkJCVRpbWVzdGFtcFR6IG5leHRfZHVtcF90aW1lID0gMDsKLQkJCWxvbmcJCXNl Y3MgPSAwOwotCQkJaW50CQkJdXNlY3MgPSAwOwogCiAJCQkvKiBDb21wdXRlIHRoZSBuZXh0IGR1 bXAgdGltZS4gKi8KIAkJCW5leHRfZHVtcF90aW1lID0KIAkJCQlUaW1lc3RhbXBUelBsdXNNaWxs aXNlY29uZHMobGFzdF9kdW1wX3RpbWUsCiAJCQkJCQkJCQkJCWF1dG9wcmV3YXJtX2ludGVydmFs ICogMTAwMCk7Ci0JCQlUaW1lc3RhbXBEaWZmZXJlbmNlKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwg bmV4dF9kdW1wX3RpbWUsCi0JCQkJCQkJCSZzZWNzLCAmdXNlY3MpOwotCQkJZGVsYXlfaW5fbXMg PSBzZWNzICsgKHVzZWNzIC8gMTAwMCk7CisJCQlkZWxheV9pbl9tcyA9CisJCQkJVGltZXN0YW1w RGlmZmVyZW5jZU1pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJCQkJ CQluZXh0X2R1bXBfdGltZSk7CiAKIAkJCS8qIFBlcmZvcm0gYSBkdW1wIGlmIGl0J3MgdGltZS4g Ki8KIAkJCWlmIChkZWxheV9pbl9tcyA8PSAwKQotLSAKMi4xOS4xCgo= --=_93eb5f9d6da044fed01e13a051abfe58 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0001-Implement-TimestampDifferenceMilliseconds.patch Content-Disposition: attachment; filename=v3-0001-Implement-TimestampDifferenceMilliseconds.patch; size=2658 RnJvbSAwNTMyOTIxM2M4NzNkZWE2OWNiZWEyMDIxZTA0OGViODE0ZTAwYjRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgS29uZHJhdG92IDxrb25kcmF0b3YuYWxla3NleUBn bWFpbC5jb20+CkRhdGU6IE1vbiwgOSBOb3YgMjAyMCAyMjoyOTo0OCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMgMS8zXSBJbXBsZW1lbnQgVGltZXN0YW1wRGlmZmVyZW5jZU1pbGxpc2Vjb25kcygp CgpNYW55IGNhbGxlcnMgb2YgVGltZXN0YW1wRGlmZmVyZW5jZSgpIGFjdHVhbGx5IHdhbnQgYSBk aWZmZXJlbmNlCmluIG1pbGxpc2Vjb25kcy4gIFRoaXMgbmV3IGZ1bmN0aW9uIGFsbG93cyB0aGVt IHRvIGdldCByaWQgb2YKdW5uZWNlc3NhcnkgKGFuZCBmcmVxdWVudGx5IHVuc2FmZSkgY2FsY3Vs YXRpb25zIG9mIG1pbGxpc2Vjb25kcyBmcm9tCnNlY29uZHMgYW5kIG1pY3Jvc2Vjb25kcy4KLS0t CiBzcmMvYmFja2VuZC91dGlscy9hZHQvdGltZXN0YW1wLmMgfCAzMiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaCAgICAgfCAgMiAr KwogMiBmaWxlcyBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3RpbWVzdGFtcC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RpbWVz dGFtcC5jCmluZGV4IGVhMGFkYTcwNGYuLjg5M2ZkNDY3YmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdGlt ZXN0YW1wLmMKQEAgLTE2NjYsNiArMTY2NiwzOCBAQCBUaW1lc3RhbXBEaWZmZXJlbmNlKFRpbWVz dGFtcFR6IHN0YXJ0X3RpbWUsIFRpbWVzdGFtcFR6IHN0b3BfdGltZSwKIAl9CiB9CiAKKy8qCisg KiBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzIC0tIGNvbnZlcnQgdGhlIGRpZmZlcmVu Y2UgYmV0d2VlbiB0d28KKyAqIAkJdGltZXN0YW1wcyBpbnRvIGludGVnZXIgbWlsbGlzZWNvbmRz LgorICoKKyAqIEJvdGggaW5wdXRzIG11c3QgYmUgb3JkaW5hcnkgZmluaXRlIHRpbWVzdGFtcHMg KGluIGN1cnJlbnQgdXNhZ2UsCisgKiB0aGV5J2xsIGJlIHJlc3VsdHMgZnJvbSBHZXRDdXJyZW50 VGltZXN0YW1wKCkpLgorICoKKyAqIFdlIGV4cGVjdCBzdGFydF90aW1lIDw9IHN0b3BfdGltZS4g IElmIG5vdCwgd2UgcmV0dXJuIHplcm8uICBXZSBhbHNvCisgKiBhbHdheXMgcm91bmQgdXAgcmVz dWx0IGluIG1zLCBzaW5jZSBtYW55IGNhbGxlcnMgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uCisgKiB0 byBkZWNpZGUgd2hldGhlciBpdCBpcyB0aW1lIHRvIGRvIHNvbWV0aGluZyBvbiB0aW1lb3V0IG9y IG5vdC4KKyAqIFRoYXQgd2F5LCBsZXQgdGhlbSBkbyBpdCBqdXN0IGluIHRpbWUgb3IgMSBtcyBs YXRlciBpbnN0ZWFkIG9mIDEgbXMKKyAqIGVhcmxpZXIuCisgKi8KK2xvbmcKK1RpbWVzdGFtcERp ZmZlcmVuY2VNaWxsaXNlY29uZHMoVGltZXN0YW1wVHogc3RhcnRfdGltZSwgVGltZXN0YW1wVHog c3RvcF90aW1lKQoreworCVRpbWVzdGFtcFR6IGRpZmYgPSBzdG9wX3RpbWUgLSBzdGFydF90aW1l OworCisJaWYgKGRpZmYgPD0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCXsKKwkJbG9uZwltc2Vj cyA9IChsb25nKSAoZGlmZiAvIDEwMDApOworCisJCS8qIFJvdW5kIHVwIGlmIHRoZXJlIGlzIGEg cmVtaW5kZXIgKi8KKwkJaWYgKGRpZmYgJSAxMDAwID4gMCkKKwkJCW1zZWNzICs9IDE7CisKKwkJ cmV0dXJuIG1zZWNzOworCX0KK30KKwogLyoKICAqIFRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRz IC0tIHJlcG9ydCB3aGV0aGVyIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvCiAgKgkJdGltZXN0 YW1wcyBpcyA+PSBhIHRocmVzaG9sZCAoZXhwcmVzc2VkIGluIG1pbGxpc2Vjb25kcykKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3RpbWVzdGFtcC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv dGltZXN0YW1wLmgKaW5kZXggMTZjM2ZkOGVjOS4uZDQ1YmYyYmI3YiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvdGltZXN0YW1wLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvdGltZXN0 YW1wLmgKQEAgLTcyLDYgKzcyLDggQEAgZXh0ZXJuIFRpbWVzdGFtcFR6IEdldFNRTEN1cnJlbnRU aW1lc3RhbXAoaW50MzIgdHlwbW9kKTsKIGV4dGVybiBUaW1lc3RhbXAgR2V0U1FMTG9jYWxUaW1l c3RhbXAoaW50MzIgdHlwbW9kKTsKIGV4dGVybiB2b2lkIFRpbWVzdGFtcERpZmZlcmVuY2UoVGlt ZXN0YW1wVHogc3RhcnRfdGltZSwgVGltZXN0YW1wVHogc3RvcF90aW1lLAogCQkJCQkJCQlsb25n ICpzZWNzLCBpbnQgKm1pY3Jvc2Vjcyk7CitleHRlcm4gbG9uZyBUaW1lc3RhbXBEaWZmZXJlbmNl TWlsbGlzZWNvbmRzKFRpbWVzdGFtcFR6IHN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCVRpbWVzdGFt cFR6IHN0b3BfdGltZSk7CiBleHRlcm4gYm9vbCBUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyhU aW1lc3RhbXBUeiBzdGFydF90aW1lLAogCQkJCQkJCQkJICAgVGltZXN0YW1wVHogc3RvcF90aW1l LAogCQkJCQkJCQkJICAgaW50IG1zZWMpOwoKYmFzZS1jb21taXQ6IDNmMTZjYjUwNWQxZDczNDY3 NGRhMmEyY2JmMjEwNGNlYWUyMmY5YjQKLS0gCjIuMTkuMQoK --=_93eb5f9d6da044fed01e13a051abfe58--