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 1pZr1F-0001R8-Ge for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Mar 2023 10:27:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pZr0E-0006V0-Ba for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Mar 2023 10:26:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pZr0D-0006Ur-JF for pgsql-hackers@lists.postgresql.org; Wed, 08 Mar 2023 10:26:33 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pZr0A-0007aS-03 for pgsql-hackers@postgresql.org; Wed, 08 Mar 2023 10:26:32 +0000 Received: by mail-wm1-x336.google.com with SMTP id p23-20020a05600c1d9700b003ead4835046so1999453wms.0 for ; Wed, 08 Mar 2023 02:26:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678271188; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=kcLxEULdvxjoGWwprJ28LKPs5zPu5DiIDKALPUQb9vw=; b=KiQ/S1h0wfRmF05UjSnKPsdi+wDUuXnxqDgEwk8vS8SCWDZQGM/L2cFKpzMHj3oxQp DnGx+i2vaKeGQAf9Xp8un7SKfAud6LO+3iNkFwvk69g5/2owu4dAm2raf3BFVmYX/D21 7KkG3rLSsYHDn0iRGFHZD5Q3zmgniopUlDCRpTJCJyJvxUy99Ibouab7zlh9n+m0R7OB EGnLYuA62UgAStIOlkB4FG5Na/pCV5a0RVsk1RuazxRjrabmppPxTirpyNHRj7Y/ege5 vr5gqVuZTboZmVujvNJrgxv/RF9hnTq47r8S88W3LRMpIX1YsQOQIFQ4PACxIr8DcFpc Lg2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678271188; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=kcLxEULdvxjoGWwprJ28LKPs5zPu5DiIDKALPUQb9vw=; b=B5Aqzs7rhrs2PtskAtledIT4JNGZyo6GWPng/7i3TbybJYqi1/SxEVZDK7I0houvRP xJ0W1EOnMwNEnCXLmLIV934svbAu/NCPay15DH6QD+NuKYervqqfEy8dBtycuBny69EA mQoBqTGYHoRrTj/grI0Za1Dwga/0bZBlqi9Q5VJyJ/uqYjRYZc2x2MB5aX+R4730YyNk 376Fi7aXUbxBcJIICGheKesu3R9DZrbHS6MkjpD7mL2aRemE9oeDEk3mwzTg0znY7F8R k666/Ly8lFCX9m3Wq2at8qtIgE8/bV26Pi9H5f47tALlM1x9Vgjqb5xrkz680Owk3OG5 Ontg== X-Gm-Message-State: AO0yUKUN0onbqaDdk9BtIaPzfJaPDuaiT4jDZkx+10D2xruOB0TACDEF RvS5GR2v9qlIMO3nsTJ246U= X-Google-Smtp-Source: AK7set81ytxZc1DsqHZZM/Ugd5SQZqBsMBkGT4D9VQd7N51rg2zZWVc/MA+RtLD4Rks+lnWeJm1xrQ== X-Received: by 2002:a05:600c:4590:b0:3e2:2467:d3f5 with SMTP id r16-20020a05600c459000b003e22467d3f5mr14949569wmo.25.1678271188212; Wed, 08 Mar 2023 02:26:28 -0800 (PST) Received: from [192.168.21.27] ([54.239.6.186]) by smtp.gmail.com with ESMTPSA id hg13-20020a05600c538d00b003d9aa76dc6asm19092079wmb.0.2023.03.08.02.26.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Mar 2023 02:26:27 -0800 (PST) Content-Type: multipart/mixed; boundary="------------0maWwKSzbUtJaEncLEZdTajz" Message-ID: Date: Wed, 8 Mar 2023 11:25:10 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: Minimal logical decoding on standbys Content-Language: en-US From: "Drouvot, Bertrand" To: Jeff Davis , Andres Freund Cc: Robert Haas , Thomas Munro , Alvaro Herrera , Ibrar Ahmed , Amit Khandekar , fabriziomello@gmail.com, tushar , Rahila Syed , pgsql-hackers References: <05c0c4f3-82eb-bc6d-c876-5a265c05927b@gmail.com> <20230106034036.2m4qnn7ep7b5ipet@awork3.anarazel.de> <490206c5-bcde-e558-628a-dc67dae4d439@gmail.com> <20230119024617.jzsgpcrgjdc6ysge@awork3.anarazel.de> <94d9d47e-72f4-393a-246e-e3fe8db7b741@gmail.com> <2d314c22b9e03415aa1c7d8fd1f698dae60effa7.camel@j-davis.com> <061eeb26-156e-6011-02b6-b4b1422e2aa6@gmail.com> <8a7da0c2-b7fe-1c78-4e47-a16239bf4839@gmail.com> <6ab352de1553c1e3d0c7d97c038dc470ca51e772.camel@j-davis.com> <4df984c8-3adb-3b69-0e4e-a491097862ce@gmail.com> In-Reply-To: <4df984c8-3adb-3b69-0e4e-a491097862ce@gmail.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------0maWwKSzbUtJaEncLEZdTajz Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, On 3/3/23 5:26 PM, Drouvot, Bertrand wrote: > Hi, > > On 3/3/23 8:58 AM, Jeff Davis wrote: >> On Thu, 2023-03-02 at 11:45 -0800, Jeff Davis wrote: >>> In this case it looks easier to add the right API than to be sure >>> about >>> whether it's needed or not. >> >> I attached a sketch of one approach. > > Oh, that's very cool, thanks a lot! > >> I'm not very confident that it's >> the right API or even that it works as I intended it, but if others >> like the approach I can work on it some more. >> > > I'll look at it early next week. > So, I took your patch and as an example I tried a quick integration in 0004, (see 0004_new_API.txt attached) to put it in the logical decoding on standby context. Based on this, I've 3 comments: - Maybe ConditionVariableEventSleep() should take care of the “WaitEventSetWait returns 1 and cvEvent.event == WL_POSTMASTER_DEATH” case? - Maybe ConditionVariableEventSleep() could accept and deal with the CV being NULL? I used it in the POC attached to handle logical decoding on the primary server case. One option should be to create a dedicated CV for that case though. - In the POC attached I had to add this extra condition “(cv && !RecoveryInProgress())” to avoid waiting on the timeout when there is a promotion. That makes me think that we may want to add 2 extra parameters (as 2 functions returning a bool?) to ConditionVariableEventSleep() to check whether or not we still want to test the socket or the CV wake up in each loop iteration. Also 3 additional remarks: 1) About InitializeConditionVariableWaitSet() and ConditionVariableWaitSetCreate(): I'm not sure about the naming as there is no CV yet (they "just" deal with WaitEventSet). So, what about renaming? +static WaitEventSet *ConditionVariableWaitSet = NULL; to say, "LocalWaitSet" and then rename ConditionVariableWaitSetLatchPos, InitializeConditionVariableWaitSet() and ConditionVariableWaitSetCreate() accordingly? But it might be not needed (see 3) below). 2) /* * Prepare to wait on a given condition variable. * @@ -97,7 +162,8 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv) void ConditionVariableSleep(ConditionVariable *cv, uint32 wait_event_info) { - (void) ConditionVariableTimedSleep(cv, -1 /* no timeout */ , + (void) ConditionVariableEventSleep(cv, ConditionVariableWaitSet, + -1 /* no timeout */ , wait_event_info); } @@ -111,11 +177,27 @@ ConditionVariableSleep(ConditionVariable *cv, uint32 wait_event_info) bool ConditionVariableTimedSleep(ConditionVariable *cv, long timeout, uint32 wait_event_info) +{ + return ConditionVariableEventSleep(cv, ConditionVariableWaitSet, timeout, + wait_event_info); +} + I like the idea of making use of the new ConditionVariableEventSleep() here, but on the other hand... 3) I wonder if there is no race conditions: ConditionVariableWaitSet is being initialized with PGINVALID_SOCKET as WL_LATCH_SET and might be also (if IsUnderPostmaster) be initialized with PGINVALID_SOCKET as WL_EXIT_ON_PM_DEATH. So IIUC, the patch is introducing 2 new possible source of wake up. Then, what about? - not create ConditionVariableWaitSet, ConditionVariableWaitSetLatchPos, InitializeConditionVariableWaitSet() and ConditionVariableWaitSetCreate() at all? - call ConditionVariableEventSleep() with a NULL parameter in ConditionVariableSleep() and ConditionVariableTimedSleep()? - handle the case where the WaitEventSet parameter is NULL in ConditionVariableEventSleep()? (That could also make sense if we handle the case of the CV being NULL as proposed above) Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------0maWwKSzbUtJaEncLEZdTajz Content-Type: text/plain; charset=UTF-8; name="0004_new_API.txt" Content-Disposition: attachment; filename="0004_new_API.txt" Content-Transfer-Encoding: base64 RnJvbSBkNDQyMzg1N2JkNzNjNGQ4N2IxN2EwZGFjNzQzODhmNjY0NDIxZTE4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZXJ0cmFuZGRyb3V2 b3QucGdAZ21haWwuY29tPgpEYXRlOiBNb24sIDYgTWFyIDIwMjMgMDg6MTc6NTIgKzAwMDAK U3ViamVjdDogW1BBVENIIHY5OSA0LzZdIEZpeGluZyBXYWxzZW5kZXIgY29ybmVyIGNhc2Ug d2l0aCBsb2dpY2FsIGRlY29kaW5nIG9uCiBzdGFuZGJ5LgoKVGhlIHByb2JsZW0gaXMgdGhh dCBXYWxTbmRXYWl0Rm9yV2FsKCkgd2FpdHMgZm9yIHRoZSAqcmVwbGF5KiBMU04gdG8KaW5j cmVhc2UsIGJ1dCBnZXRzIHdva2VuIHVwIGJ5IHdhbHJlY2VpdmVyIHdoZW4gbmV3IFdBTCBo YXMgYmVlbgpmbHVzaGVkLiBXaGljaCBtZWFucyB0aGF0IHR5cGljYWxseSB3YWxzZW5kZXJz IHdpbGwgZ2V0IHdva2VuIHVwIGF0IHRoZQpzYW1lIHRpbWUgdGhhdCB0aGUgc3RhcnR1cCBw cm9jZXNzIHdpbGwgYmUgLSB3aGljaCBtZWFucyB0aGF0IGJ5IHRoZQp0aW1lIHRoZSBsb2dp Y2FsIHdhbHNlbmRlciBjaGVja3MgR2V0WExvZ1JlcGxheVJlY1B0cigpIGl0J3MgdW5saWtl bHkKdGhhdCB0aGUgc3RhcnR1cCBwcm9jZXNzIGFscmVhZHkgcmVwbGF5ZWQgdGhlIHJlY29y ZCBhbmQgdXBkYXRlZApYTG9nQ3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIuCgpJbnRyb2R1 Y2luZyBhIG5ldyBjb25kaXRpb24gdmFyaWFibGUgYW5kIGEgbmV3IEFQSSBDb25kaXRpb25W YXJpYWJsZUV2ZW50U2xlZXAoKQp0byBmaXggdGhpcyBjb3JuZXIgY2FzZS4KLS0tCiBkb2Mv c3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgICAgIHwgIDI4ICsrKysK IHNyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jICAgICAgICAgICAgICAgICAgICB8ICAxNCAr LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgICAgICAgICAgIHwgIDE3 ICsrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJsZS5jIHwg MTI0ICsrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YyAgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnQuYyAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Np bml0LmMgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNv dmVyeS5oICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmgg ICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v d2Fsc2VuZGVyLmggICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvY29u ZGl0aW9uX3ZhcmlhYmxlLmggICAgICB8ICAxMCArKwogc3JjL2luY2x1ZGUvdXRpbHMvd2Fp dF9ldmVudC5oICAgICAgICAgICAgICAgIHwgICAxICsKIDEzIGZpbGVzIGNoYW5nZWQsIDE4 OSBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKICAxMy41JSBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS8KICAgOC41JSBzcmMvYmFja2VuZC9saWJwcS8KICAgNi41JSBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi8KICA1OC42JSBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv CiAgIDQuNCUgc3JjL2luY2x1ZGUvc3RvcmFnZS8KICAgNC40JSBzcmMvaW5jbHVkZS8KCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21s L21vbml0b3Jpbmcuc2dtbAppbmRleCBjZGY3YzA5YjRiLi45YWY4ZDU4ZGEyIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9t b25pdG9yaW5nLnNnbWwKQEAgLTE4NTcsNiArMTg1NywxMCBAQCBwb3N0Z3JlcyAgIDI3MDkz ICAwLjAgIDAuMCAgMzAwOTYgIDI3NTIgPyAgICAgICAgU3MgICAxMTozNCAgIDA6MDAgcG9z dGdyZXM6IHNlcgogICAgICAgPGVudHJ5PldhaXRpbmcgZm9yIHN0YXJ0dXAgcHJvY2VzcyB0 byBzZW5kIGluaXRpYWwgZGF0YSBmb3Igc3RyZWFtaW5nCiAgICAgICAgcmVwbGljYXRpb24u PC9lbnRyeT4KICAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PGxpdGVy YWw+V2FsU2VuZGVyV2FpdFJlcGxheTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5 PldhaXRpbmcgZm9yIHN0YXJ0dXAgcHJvY2VzcyB0byByZXBsYXkgd3JpdGUtYWhlYWQgbG9n LjwvZW50cnk+CisgICAgIDwvcm93PgogICAgICA8cm93PgogICAgICAgPGVudHJ5PjxsaXRl cmFsPlhhY3RHcm91cFVwZGF0ZTwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5Pldh aXRpbmcgZm9yIHRoZSBncm91cCBsZWFkZXIgdG8gdXBkYXRlIHRyYW5zYWN0aW9uIHN0YXR1 cyBhdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292 ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRl eCBkYmU5Mzk0NzYyLi44YTk1MDVhNTJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtMzU4LDYgKzM1OCw5IEBAIHR5cGVkZWYgc3RydWN0 IFhMb2dSZWNvdmVyeUN0bERhdGEKIAlSZWNvdmVyeVBhdXNlU3RhdGUgcmVjb3ZlcnlQYXVz ZVN0YXRlOwogCUNvbmRpdGlvblZhcmlhYmxlIHJlY292ZXJ5Tm90UGF1c2VkQ1Y7CiAKKwkv KiBSZXBsYXkgc3RhdGUgKHNlZSBjaGVja19mb3JfcmVwbGF5KCkgZm9yIG1vcmUgZXhwbGFu YXRpb24pICovCisJQ29uZGl0aW9uVmFyaWFibGUgcmVwbGF5ZWRDVjsKKwogCXNsb2NrX3QJ CWluZm9fbGNrOwkJLyogbG9ja3Mgc2hhcmVkIHZhcmlhYmxlcyBzaG93biBhYm92ZSAqLwog fSBYTG9nUmVjb3ZlcnlDdGxEYXRhOwogCkBAIC00NjgsNiArNDcxLDcgQEAgWExvZ1JlY292 ZXJ5U2htZW1Jbml0KHZvaWQpCiAJU3BpbkxvY2tJbml0KCZYTG9nUmVjb3ZlcnlDdGwtPmlu Zm9fbGNrKTsKIAlJbml0U2hhcmVkTGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlX YWtldXBMYXRjaCk7CiAJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZYTG9nUmVjb3ZlcnlDdGwt PnJlY292ZXJ5Tm90UGF1c2VkQ1YpOworCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmWExvZ1Jl Y292ZXJ5Q3RsLT5yZXBsYXllZENWKTsKIH0KIAogLyoKQEAgLTE5MzUsNiArMTkzOSwxMSBA QCBBcHBseVdhbFJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNv cmQgKnJlY29yZCwgVGltZUxpbmVJRCAqcmVwbAogCVhMb2dSZWNvdmVyeUN0bC0+bGFzdFJl cGxheWVkVExJID0gKnJlcGxheVRMSTsKIAlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVy eUN0bC0+aW5mb19sY2spOwogCisJLyoKKwkgKiB3YWtlIHVwIHdhbHNlbmRlcihzKSB1c2Vk IGJ5IGxvZ2ljYWwgZGVjb2Rpbmcgb24gc3RhbmRieS4KKwkgKi8KKwlDb25kaXRpb25WYXJp YWJsZUJyb2FkY2FzdCgmWExvZ1JlY292ZXJ5Q3RsLT5yZXBsYXllZENWKTsKKwogCS8qCiAJ ICogSWYgcm1fcmVkbyBjYWxsZWQgWExvZ1JlcXVlc3RXYWxSZWNlaXZlclJlcGx5LCB0aGVu IHdlIHdha2UgdXAgdGhlCiAJICogcmVjZWl2ZXIgc28gdGhhdCBpdCBub3RpY2VzIHRoZSB1 cGRhdGVkIGxhc3RSZXBsYXllZEVuZFJlY1B0ciBhbmQgc2VuZHMKQEAgLTQ5NDIsMyArNDk1 MSwyMiBAQCBhc3NpZ25fcmVjb3ZlcnlfdGFyZ2V0X3hpZChjb25zdCBjaGFyICpuZXd2YWws IHZvaWQgKmV4dHJhKQogCWVsc2UKIAkJcmVjb3ZlcnlUYXJnZXQgPSBSRUNPVkVSWV9UQVJH RVRfVU5TRVQ7CiB9CisKKy8qCisgKiBSZXR1cm4gdGhlIENvbmRpdGlvblZhcmlhYmxlIGlu ZGljYXRpbmcgdGhhdCBhIHJlcGxheSBoYXMgYmVlbiBkb25lLgorICoKKyAqIFRoaXMgaXMg bmVlZGVkIGZvciBsb2dpY2FsIGRlY29kaW5nIG9uIHN0YW5kYnkuIEluZGVlZCB0aGUgInBy b2JsZW0iIGlzIHRoYXQKKyAqIFdhbFNuZFdhaXRGb3JXYWwoKSB3YWl0cyBmb3IgdGhlICpy ZXBsYXkqIExTTiB0byBpbmNyZWFzZSwgYnV0IGdldHMgd29rZW4gdXAKKyAqIGJ5IHdhbHJl Y2VpdmVyIHdoZW4gbmV3IFdBTCBoYXMgYmVlbiBmbHVzaGVkLiBXaGljaCBtZWFucyB0aGF0 IHR5cGljYWxseQorICogd2Fsc2VuZGVycyB3aWxsIGdldCB3b2tlbiB1cCBhdCB0aGUgc2Ft ZSB0aW1lIHRoYXQgdGhlIHN0YXJ0dXAgcHJvY2VzcworICogd2lsbCBiZSAtIHdoaWNoIG1l YW5zIHRoYXQgYnkgdGhlIHRpbWUgdGhlIGxvZ2ljYWwgd2Fsc2VuZGVyIGNoZWNrcworICog R2V0WExvZ1JlcGxheVJlY1B0cigpIGl0J3MgdW5saWtlbHkgdGhhdCB0aGUgc3RhcnR1cCBw cm9jZXNzIGFscmVhZHkgcmVwbGF5ZWQKKyAqIHRoZSByZWNvcmQgYW5kIHVwZGF0ZWQgWExv Z0N0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyLgorICoKKyAqIFRoZSBDb25kaXRpb25WYXJp YWJsZSBYTG9nUmVjb3ZlcnlDdGwtPnJlcGxheWVkQ1Ygc29sdmVzIHRoaXMgY29ybmVyIGNh c2UuCisgKi8KK0NvbmRpdGlvblZhcmlhYmxlICoKK2NoZWNrX2Zvcl9yZXBsYXkodm9pZCkK K3sKKwlyZXR1cm4gJlhMb2dSZWNvdmVyeUN0bC0+cmVwbGF5ZWRDVjsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvcHFj b21tLmMKaW5kZXggZGE1YmI1ZmM1ZC4uYmFiZDBiNmM0ZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbGlicHEvcHFjb21tLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21tLmMK QEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUg InV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5j bHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKIAogLyoKICAqIENvcGUgd2l0 aCB0aGUgdmFyaW91cyBwbGF0Zm9ybS1zcGVjaWZpYyB3YXlzIHRvIHNwZWxsIFRDUCBrZWVw YWxpdmUgc29ja2V0CkBAIC0xNzIsNyArMTczLDYgQEAgdm9pZAogcHFfaW5pdCh2b2lkKQog ewogCWludAkJCXNvY2tldF9wb3MgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOwotCWludAkJ CWxhdGNoX3BvcyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAKIAkvKiBpbml0aWFsaXpl IHN0YXRlIHZhcmlhYmxlcyAqLwogCVBxU2VuZEJ1ZmZlclNpemUgPSBQUV9TRU5EX0JVRkZF Ul9TSVpFOwpAQCAtMjA3LDIwICsyMDcsMTQgQEAgcHFfaW5pdCh2b2lkKQogCQllbG9nKEZB VEFMLCAiZmNudGwoRl9TRVRGRCkgZmFpbGVkIG9uIHNvY2tldDogJW0iKTsKICNlbmRpZgog Ci0JRmVCZVdhaXRTZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoVG9wTWVtb3J5Q29udGV4dCwg RmVCZVdhaXRTZXRORXZlbnRzKTsKKwlGZUJlV2FpdFNldCA9IENvbmRpdGlvblZhcmlhYmxl V2FpdFNldENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LCBGZUJlV2FpdFNldE5FdmVudHMpOwog CXNvY2tldF9wb3MgPSBBZGRXYWl0RXZlbnRUb1NldChGZUJlV2FpdFNldCwgV0xfU09DS0VU X1dSSVRFQUJMRSwKIAkJCQkJCQkJICAgTXlQcm9jUG9ydC0+c29jaywgTlVMTCwgTlVMTCk7 Ci0JbGF0Y2hfcG9zID0gQWRkV2FpdEV2ZW50VG9TZXQoRmVCZVdhaXRTZXQsIFdMX0xBVENI X1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJCQkJICBNeUxhdGNoLCBOVUxMKTsKLQlB ZGRXYWl0RXZlbnRUb1NldChGZUJlV2FpdFNldCwgV0xfUE9TVE1BU1RFUl9ERUFUSCwgUEdJ TlZBTElEX1NPQ0tFVCwKLQkJCQkJICBOVUxMLCBOVUxMKTsKLQogCS8qCi0JICogVGhlIGV2 ZW50IHBvc2l0aW9ucyBtYXRjaCB0aGUgb3JkZXIgd2UgYWRkZWQgdGhlbSwgYnV0IGxldCdz IHNhbml0eQotCSAqIGNoZWNrIHRoZW0gdG8gYmUgc3VyZS4KKwkgKiBUaGUgc29ja2V0X3Bv cyBtYXRjaGVzIHRoZSBvcmRlciB3ZSBhZGRlZCBpdCwgYnV0IGxldCdzIHNhbml0eQorCSAq IGNoZWNrIGl0IHRvIGJlIHN1cmUuCiAJICovCiAJQXNzZXJ0KHNvY2tldF9wb3MgPT0gRmVC ZVdhaXRTZXRTb2NrZXRQb3MpOwotCUFzc2VydChsYXRjaF9wb3MgPT0gRmVCZVdhaXRTZXRM YXRjaFBvcyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCmluZGV4IDMwNDJlNWJkNjQuLjg5ZDFh MzZlNmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCkBAIC0xNTUxLDcg KzE1NTEsOSBAQCBzdGF0aWMgWExvZ1JlY1B0cgogV2FsU25kV2FpdEZvcldhbChYTG9nUmVj UHRyIGxvYykKIHsKIAlpbnQJCQl3YWtlRXZlbnRzOworCXVpbnQzMgkJd2FpdF9ldmVudDsK IAlzdGF0aWMgWExvZ1JlY1B0ciBSZWNlbnRGbHVzaFB0ciA9IEludmFsaWRYTG9nUmVjUHRy OworCUNvbmRpdGlvblZhcmlhYmxlICpjdiA9IE5VTEw7CiAKIAkvKgogCSAqIEZhc3QgcGF0 aCB0byBhdm9pZCBhY3F1aXJpbmcgdGhlIHNwaW5sb2NrIGluIGNhc2Ugd2UgYWxyZWFkeSBr bm93IHdlCkBAIC0xNTY0LDkgKzE1NjYsMjAgQEAgV2FsU25kV2FpdEZvcldhbChYTG9nUmVj UHRyIGxvYykKIAogCS8qIEdldCBhIG1vcmUgcmVjZW50IGZsdXNoIHBvaW50ZXIuICovCiAJ aWYgKCFSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKKwl7CiAJCVJlY2VudEZsdXNoUHRyID0gR2V0 Rmx1c2hSZWNQdHIoTlVMTCk7CisJCXdhaXRfZXZlbnQgPSBXQUlUX0VWRU5UX1dBTF9TRU5E RVJfV0FJVF9XQUw7CisJfQogCWVsc2UKKwl7CiAJCVJlY2VudEZsdXNoUHRyID0gR2V0WExv Z1JlcGxheVJlY1B0cihOVUxMKTsKKwkJd2FpdF9ldmVudCA9IFdBSVRfRVZFTlRfV0FMX1NF TkRFUl9XQUlUX1JFUExBWTsKKwkJY3YgPSBjaGVja19mb3JfcmVwbGF5KCk7CisJfQorCisJ LyogUHJlcGFyZSB0aGUgY3YgdG8gc2xlZXAgKi8KKwlpZiAoY3YpCisJCUNvbmRpdGlvblZh cmlhYmxlUHJlcGFyZVRvU2xlZXAoY3YpOwogCiAJZm9yICg7OykKIAl7CkBAIC0xNjY3LDkg KzE2ODAsMTEgQEAgV2FsU25kV2FpdEZvcldhbChYTG9nUmVjUHRyIGxvYykKIAkJaWYgKHBx X2lzX3NlbmRfcGVuZGluZygpKQogCQkJd2FrZUV2ZW50cyB8PSBXTF9TT0NLRVRfV1JJVEVB QkxFOwogCi0JCVdhbFNuZFdhaXQod2FrZUV2ZW50cywgc2xlZXB0aW1lLCBXQUlUX0VWRU5U X1dBTF9TRU5ERVJfV0FJVF9XQUwpOworCQlNb2RpZnlXYWl0RXZlbnQoRmVCZVdhaXRTZXQs IEZlQmVXYWl0U2V0U29ja2V0UG9zLCB3YWtlRXZlbnRzLCBOVUxMKTsKKwkJQ29uZGl0aW9u VmFyaWFibGVFdmVudFNsZWVwKGN2LCBGZUJlV2FpdFNldCwgc2xlZXB0aW1lLCB3YWl0X2V2 ZW50KTsKIAl9CiAKKwlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CiAJLyogcmVh Y3RpdmF0ZSBsYXRjaCBzbyBXYWxTbmRMb29wIGtub3dzIHRvIGNvbnRpbnVlICovCiAJU2V0 TGF0Y2goTXlMYXRjaCk7CiAJcmV0dXJuIFJlY2VudEZsdXNoUHRyOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJsZS5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJsZS5jCmluZGV4IDdlMmJiZjQ2 ZDkuLjc2NmYxYmQ3YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9j b25kaXRpb25fdmFyaWFibGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvY29u ZGl0aW9uX3ZhcmlhYmxlLmMKQEAgLTI3LDkgKzI3LDI5IEBACiAjaW5jbHVkZSAic3RvcmFn ZS9zcGluLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAorI2RlZmluZSBDb25k aXRpb25WYXJpYWJsZVdhaXRTZXRMYXRjaFBvcwkwCisKIC8qIEluaXRpYWxseSwgd2UgYXJl IG5vdCBwcmVwYXJlZCB0byBzbGVlcCBvbiBhbnkgY29uZGl0aW9uIHZhcmlhYmxlLiAqLwog c3RhdGljIENvbmRpdGlvblZhcmlhYmxlICpjdl9zbGVlcF90YXJnZXQgPSBOVUxMOwogCisv KiBVc2VkIGJ5IENvbmRpdGlvblZhcmlhYmxlU2xlZXAoKSBhbmQgQ29uZGl0aW9uVmFyaWFi bGVUaW1lZFNsZWVwKCkuICovCitzdGF0aWMgV2FpdEV2ZW50U2V0ICpDb25kaXRpb25WYXJp YWJsZVdhaXRTZXQgPSBOVUxMOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgcHJvY2Vzcy1s b2NhbCBjb25kaXRpb24gdmFyaWFibGUgV2FpdEV2ZW50U2V0LgorICoKKyAqIFRoaXMgbXVz dCBiZSBjYWxsZWQgb25jZSBkdXJpbmcgc3RhcnR1cCBvZiBhbnkgcHJvY2VzcyB0aGF0IGNh biB3YWl0IG9uCisgKiBjb25kaXRpb24gdmFyaWFibGVzLCBiZWZvcmUgaXQgaXNzdWVzIGFu eSBDb25kaXRpb25WYXJpYWJsZUluaXQoKSBjYWxscy4KKyAqLwordm9pZAorSW5pdGlhbGl6 ZUNvbmRpdGlvblZhcmlhYmxlV2FpdFNldCh2b2lkKQoreworCUFzc2VydChDb25kaXRpb25W YXJpYWJsZVdhaXRTZXQgPT0gTlVMTCk7CisKKwlDb25kaXRpb25WYXJpYWJsZVdhaXRTZXQg PSBDb25kaXRpb25WYXJpYWJsZVdhaXRTZXRDcmVhdGUoCisJCVRvcE1lbW9yeUNvbnRleHQs IDApOworfQorCiAvKgogICogSW5pdGlhbGl6ZSBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAq LwpAQCAtNDAsNiArNjAsNTEgQEAgQ29uZGl0aW9uVmFyaWFibGVJbml0KENvbmRpdGlvblZh cmlhYmxlICpjdikKIAlwcm9jbGlzdF9pbml0KCZjdi0+d2FrZXVwKTsKIH0KIAorLyoKKyAq IENyZWF0ZSBhIFdhaXRFdmVudFNldCBmb3IgQ29uZGl0aW9uVmFyaWFibGVFdmVudFNsZWVw KCkuIFRoaXMgc2hvdWxkIGJlCisgKiB1c2VkIHdoZW4gdGhlIGNhbGxlciBvZiBDb25kaXRp b25WYXJpYWJsZUV2ZW50U2xlZXAoKSB3b3VsZCBsaWtlIHRvIHdha2UgdXAKKyAqIG9uIGVp dGhlciB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIHNpZ25hbCBvciBhIHNvY2tldCBldmVudC4g Rm9yIGV4YW1wbGU6CisgKgorICogICBDb25kaXRpb25WYXJpYWJsZUluaXQoJmN2KTsKKyAq ICAgd2FpdHNldCA9IENvbmRpdGlvblZhcmlhYmxlV2FpdFNldENyZWF0ZShtY3h0LCAxKTsK KyAqICAgZXZlbnRfcG9zID0gQWRkV2FpdEV2ZW50VG9TZXQod2FpdHNldCwgMCwgc29jaywg TlVMTCwgTlVMTCk7CisgKiAgIC4uLgorICogICBDb25kaXRpb25WYXJpYWJsZVByZXBhcmVU b1NsZWVwKCZjdik7CisgKiAgIHdoaWxlICguLi5jb25kaXRpb24gbm90IG1ldC4uLikKKyAq ICAgeworICogICAgICAgc29ja2V0X3dhaXRfZXZlbnRzID0gLi4uCisgKiAgICAgICBNb2Rp ZnlXYWl0RXZlbnQod2FpdHNldCwgZXZlbnRfcG9zLCBzb2NrZXRfd2FpdF9ldmVudHMsIE5V TEwpOworICogICAgICAgQ29uZGl0aW9uVmFyaWFibGVFdmVudFNsZWVwKCZjdiwgd2FpdHNl dCwgLi4uKTsKKyAqICAgfQorICogICBDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7 CisgKgorICogVGhlIHdhaXRzZXQgaXMgY3JlYXRlZCB3aXRoIHRoZSBzdGFuZGFyZCBldmVu dHMgZm9yIGEgY29uZGl0aW9uIHZhcmlhYmxlLAorICogYW5kIHJvb20gZm9yIGFkZGluZyBu X3NvY2tldF9ldmVudHMgYWRkaXRpb25hbCBzb2NrZXQgZXZlbnRzLiBUaGUKKyAqIGluaXRp YWxseS1maWxsZWQgZXZlbnQgcG9zaXRpb25zIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIGJ1 dCBhZGRlZCBzb2NrZXQKKyAqIGV2ZW50cyBjYW4gYmUgbW9kaWZpZWQuIFRoZSBzYW1lIHdh aXRzZXQgY2FuIGJlIHVzZWQgZm9yIG11bHRpcGxlIGNvbmRpdGlvbgorICogdmFyaWFibGVz IGFzIGxvbmcgYXMgdGhlIGNhbGxlcnMgb2YgQ29uZGl0aW9uVmFyaWFibGVFdmVudFNsZWVw KCkgYXJlCisgKiBpbnRlcmVzdGVkIGluIHRoZSBzYW1lIHNvY2tldHMuCisgKi8KK1dhaXRF dmVudFNldCAqCitDb25kaXRpb25WYXJpYWJsZVdhaXRTZXRDcmVhdGUoTWVtb3J5Q29udGV4 dCBtY3h0LCBpbnQgbl9zb2NrZXRfZXZlbnRzKQoreworCWludAkJCQkgbGF0Y2hfcG9zICAg UEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOworCWludAkJCQkgbl9jdl9ldmVudHMgPSBJc1Vu ZGVyUG9zdG1hc3RlciA/IDIgOiAxOworCWludAkJCQkgbmV2ZW50cwkgPSBuX2N2X2V2ZW50 cyArIG5fc29ja2V0X2V2ZW50czsKKwlXYWl0RXZlbnRTZXQgICAgKndhaXRzZXQJID0gQ3Jl YXRlV2FpdEV2ZW50U2V0KG1jeHQsIG5ldmVudHMpOworCisJbGF0Y2hfcG9zID0gQWRkV2Fp dEV2ZW50VG9TZXQod2FpdHNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAor CQkJCQkJCQkgIE15TGF0Y2gsIE5VTEwpOworCisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQor CQlBZGRXYWl0RXZlbnRUb1NldCh3YWl0c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lO VkFMSURfU09DS0VULAorCQkJCQkJICBOVUxMLCBOVUxMKTsKKworCUFzc2VydChsYXRjaF9w b3MgPT0gQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0TGF0Y2hQb3MpOworCisJcmV0dXJuIHdh aXRzZXQ7Cit9CisKIC8qCiAgKiBQcmVwYXJlIHRvIHdhaXQgb24gYSBnaXZlbiBjb25kaXRp b24gdmFyaWFibGUuCiAgKgpAQCAtOTcsNyArMTYyLDggQEAgQ29uZGl0aW9uVmFyaWFibGVQ cmVwYXJlVG9TbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3YpCiB2b2lkCiBDb25kaXRpb25W YXJpYWJsZVNsZWVwKENvbmRpdGlvblZhcmlhYmxlICpjdiwgdWludDMyIHdhaXRfZXZlbnRf aW5mbykKIHsKLQkodm9pZCkgQ29uZGl0aW9uVmFyaWFibGVUaW1lZFNsZWVwKGN2LCAtMSAv KiBubyB0aW1lb3V0ICovICwKKwkodm9pZCkgQ29uZGl0aW9uVmFyaWFibGVFdmVudFNsZWVw KGN2LCBDb25kaXRpb25WYXJpYWJsZVdhaXRTZXQsCisJCQkJCQkJCQkgICAtMSAvKiBubyB0 aW1lb3V0ICovICwKIAkJCQkJCQkJCSAgIHdhaXRfZXZlbnRfaW5mbyk7CiB9CiAKQEAgLTEx MSwxMSArMTc3LDI3IEBAIENvbmRpdGlvblZhcmlhYmxlU2xlZXAoQ29uZGl0aW9uVmFyaWFi bGUgKmN2LCB1aW50MzIgd2FpdF9ldmVudF9pbmZvKQogYm9vbAogQ29uZGl0aW9uVmFyaWFi bGVUaW1lZFNsZWVwKENvbmRpdGlvblZhcmlhYmxlICpjdiwgbG9uZyB0aW1lb3V0LAogCQkJ CQkJCXVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCit7CisJcmV0dXJuIENvbmRpdGlvblZhcmlh YmxlRXZlbnRTbGVlcChjdiwgQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0LCB0aW1lb3V0LAor CQkJCQkJCQkJICAgd2FpdF9ldmVudF9pbmZvKTsKK30KKworLyoKKyAqIFdhaXQgZm9yIGEg Y29uZGl0aW9uIHZhcmlhYmxlIHRvIGJlIHNpZ25hbGVkLCBhIHRpbWVvdXQgdG8gYmUgcmVh Y2hlZCwgb3IgYQorICogc29ja2V0IGV2ZW50IGluIHRoZSBnaXZlbiB3YWl0c2V0LiBUaGUg d2FpdHNldCBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5CisgKiBDb25kaXRpb25WYXJpYWJs ZVdhaXRTZXRDcmVhdGUoKS4KKyAqCisgKiBSZXR1cm5zIHRydWUgd2hlbiB0aW1lb3V0IGV4 cGlyZXMsIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorICoKKyAqIFNlZSBDb25kaXRpb25W YXJpYWJsZVNsZWVwKCkgZm9yIGdlbmVyYWwgdXNhZ2UuCisgKi8KK2Jvb2wKK0NvbmRpdGlv blZhcmlhYmxlRXZlbnRTbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3YsIFdhaXRFdmVudFNl dCAqd2FpdHNldCwKKwkJCQkJCQlsb25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2lu Zm8pCiB7CiAJbG9uZwkJY3VyX3RpbWVvdXQgPSAtMTsKIAlpbnN0cl90aW1lCXN0YXJ0X3Rp bWU7CiAJaW5zdHJfdGltZQljdXJfdGltZTsKLQlpbnQJCQl3YWl0X2V2ZW50czsKIAogCS8q CiAJICogSWYgdGhlIGNhbGxlciBkaWRuJ3QgcHJlcGFyZSB0byBzbGVlcCBleHBsaWNpdGx5 LCB0aGVuIGRvIHNvIG5vdyBhbmQKQEAgLTEzMiw3ICsyMTQsNyBAQCBDb25kaXRpb25WYXJp YWJsZVRpbWVkU2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2LCBsb25nIHRpbWVvdXQsCiAJ ICogSWYgd2UgYXJlIGN1cnJlbnRseSBwcmVwYXJlZCB0byBzbGVlcCBvbiBzb21lIG90aGVy IENWLCB3ZSBqdXN0IGNhbmNlbAogCSAqIHRoYXQgYW5kIHByZXBhcmUgdGhpcyBvbmU7IHNl ZSBDb25kaXRpb25WYXJpYWJsZVByZXBhcmVUb1NsZWVwLgogCSAqLwotCWlmIChjdl9zbGVl cF90YXJnZXQgIT0gY3YpCisJaWYgKGN2ICYmIGN2X3NsZWVwX3RhcmdldCAhPSBjdikKIAl7 CiAJCUNvbmRpdGlvblZhcmlhYmxlUHJlcGFyZVRvU2xlZXAoY3YpOwogCQlyZXR1cm4gZmFs c2U7CkBAIC0xNDcsMjQgKzIyOSwyOCBAQCBDb25kaXRpb25WYXJpYWJsZVRpbWVkU2xlZXAo Q29uZGl0aW9uVmFyaWFibGUgKmN2LCBsb25nIHRpbWVvdXQsCiAJCUlOU1RSX1RJTUVfU0VU X0NVUlJFTlQoc3RhcnRfdGltZSk7CiAJCUFzc2VydCh0aW1lb3V0ID49IDAgJiYgdGltZW91 dCA8PSBJTlRfTUFYKTsKIAkJY3VyX3RpbWVvdXQgPSB0aW1lb3V0OwotCQl3YWl0X2V2ZW50 cyA9IFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRIOwog CX0KLQllbHNlCi0JCXdhaXRfZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9Q TV9ERUFUSDsKIAogCXdoaWxlICh0cnVlKQogCXsKIAkJYm9vbAkJZG9uZSA9IGZhbHNlOwor CQlXYWl0RXZlbnQJY3ZFdmVudDsKKwkJaW50CQkJbmV2ZW50czsKIAogCQkvKgotCQkgKiBX YWl0IGZvciBsYXRjaCB0byBiZSBzZXQuICAoSWYgd2UncmUgYXdha2VuZWQgZm9yIHNvbWUg b3RoZXIKLQkJICogcmVhc29uLCB0aGUgY29kZSBiZWxvdyB3aWxsIGNvcGUgYW55d2F5LikK KwkJICogV2FpdCBmb3IgbGF0Y2ggdG8gYmUgc2V0LCBvciBvdGhlciBldmVudHMgd2hpY2gg d2lsbCBiZSBoYW5kbGVkCisJCSAqIGJlbG93LgogCQkgKi8KLQkJKHZvaWQpIFdhaXRMYXRj aChNeUxhdGNoLCB3YWl0X2V2ZW50cywgY3VyX3RpbWVvdXQsIHdhaXRfZXZlbnRfaW5mbyk7 CisJCW5ldmVudHMgPSBXYWl0RXZlbnRTZXRXYWl0KHdhaXRzZXQsIGN1cl90aW1lb3V0LCAm Y3ZFdmVudCwKKwkJCQkJCQkJICAgMSwgd2FpdF9ldmVudF9pbmZvKTsKIAogCQkvKiBSZXNl dCBsYXRjaCBiZWZvcmUgZXhhbWluaW5nIHRoZSBzdGF0ZSBvZiB0aGUgd2FpdCBsaXN0LiAq LwogCQlSZXNldExhdGNoKE15TGF0Y2gpOwogCisJCS8qIElmIGEgc29ja2V0IGV2ZW50IG9j Y3VycmVkLCBubyBuZWVkIHRvIGNoZWNrIHdhaXQgbGlzdC4gKi8KKwkJaWYgKG5ldmVudHMg PT0gMSAmJiAoY3ZFdmVudC5ldmVudHMgJiBXTF9TT0NLRVRfTUFTSykgIT0gMCkKKwkJCXJl dHVybiB0cnVlOworCiAJCS8qCiAJCSAqIElmIHRoaXMgcHJvY2VzcyBoYXMgYmVlbiB0YWtl biBvdXQgb2YgdGhlIHdhaXQgbGlzdCwgdGhlbiB3ZSBrbm93CiAJCSAqIHRoYXQgaXQgaGFz IGJlZW4gc2lnbmFsZWQgYnkgQ29uZGl0aW9uVmFyaWFibGVTaWduYWwgKG9yCkBAIC0xODAs MTMgKzI2NiwyMSBAQCBDb25kaXRpb25WYXJpYWJsZVRpbWVkU2xlZXAoQ29uZGl0aW9uVmFy aWFibGUgKmN2LCBsb25nIHRpbWVvdXQsCiAJCSAqIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFu IENvbmRpdGlvblZhcmlhYmxlU2lnbmFsOyB0aG91Z2ggd2UgZG9uJ3QKIAkJICogZ3VhcmFu dGVlIG5vdCB0byByZXR1cm4gc3B1cmlvdXNseSwgd2UnbGwgYXZvaWQgdGhpcyBvYnZpb3Vz IGNhc2UuCiAJCSAqLwotCQlTcGluTG9ja0FjcXVpcmUoJmN2LT5tdXRleCk7Ci0JCWlmICgh cHJvY2xpc3RfY29udGFpbnMoJmN2LT53YWtldXAsIE15UHJvYy0+cGdwcm9jbm8sIGN2V2Fp dExpbmspKQorCisJCWlmIChjdikKIAkJewotCQkJZG9uZSA9IHRydWU7Ci0JCQlwcm9jbGlz dF9wdXNoX3RhaWwoJmN2LT53YWtldXAsIE15UHJvYy0+cGdwcm9jbm8sIGN2V2FpdExpbmsp OworCQkJU3BpbkxvY2tBY3F1aXJlKCZjdi0+bXV0ZXgpOworCQkJaWYgKCFwcm9jbGlzdF9j b250YWlucygmY3YtPndha2V1cCwgTXlQcm9jLT5wZ3Byb2NubywgY3ZXYWl0TGluaykpCisJ CQl7CisJCQkJZG9uZSA9IHRydWU7CisJCQkJcHJvY2xpc3RfcHVzaF90YWlsKCZjdi0+d2Fr ZXVwLCBNeVByb2MtPnBncHJvY25vLCBjdldhaXRMaW5rKTsKKwkJCX0KKwkJCVNwaW5Mb2Nr UmVsZWFzZSgmY3YtPm11dGV4KTsKIAkJfQotCQlTcGluTG9ja1JlbGVhc2UoJmN2LT5tdXRl eCk7CisKKwkJLyogTm90ZSBmb3IgdGhlIFBPQzogSWYgd2UgYXJlIG5vdCB3YWl0aW5nIG9u IGEgQ1Ygb3IgaGF2ZSBqdXN0IGJlZW4gcHJvbW90ZWQuICovCisJCWlmICghY3YgfHwgKGN2 ICYmICFSZWNvdmVyeUluUHJvZ3Jlc3MoKSkpCisJCQlkb25lID0gdHJ1ZTsKIAogCQkvKgog CQkgKiBDaGVjayBmb3IgaW50ZXJydXB0cywgYW5kIHJldHVybiBzcHVyaW91c2x5IGlmIHRo YXQgY2F1c2VkIHRoZQpAQCAtMTk0LDcgKzI4OCw3IEBAIENvbmRpdGlvblZhcmlhYmxlVGlt ZWRTbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3YsIGxvbmcgdGltZW91dCwKIAkJICogd2Fp dGVkIGZvciBhIGRpZmZlcmVudCBjb25kaXRpb24gdmFyaWFibGUpLgogCQkgKi8KIAkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJaWYgKGN2ICE9IGN2X3NsZWVwX3RhcmdldCkKKwkJ aWYgKGN2ICYmIGN2ICE9IGN2X3NsZWVwX3RhcmdldCkKIAkJCWRvbmUgPSB0cnVlOwogCiAJ CS8qIFdlIHdlcmUgc2lnbmFsZWQsIHNvIHJldHVybiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9w cm9jLmMKaW5kZXggMjJiNDI3ODYxMC4uYWU0YTdhZWNkNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jCkBAIC00NDAsNiArNDQwLDkgQEAgSW5pdFByb2Nlc3Modm9pZCkKIAlPd25M YXRjaCgmTXlQcm9jLT5wcm9jTGF0Y2gpOwogCVN3aXRjaFRvU2hhcmVkTGF0Y2goKTsKIAor CS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2NhbCBjb25kaXRpb24gdmFyaWFibGUgc3VwcG9y dCAqLworCUluaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZVdhaXRTZXQoKTsKKwogCS8qIG5v dyB0aGF0IHdlIGhhdmUgYSBwcm9jLCByZXBvcnQgd2FpdCBldmVudHMgdG8gc2hhcmVkIG1l bW9yeSAqLwogCXBnc3RhdF9zZXRfd2FpdF9ldmVudF9zdG9yYWdlKCZNeVByb2MtPndhaXRf ZXZlbnRfaW5mbyk7CiAKQEAgLTU5Niw2ICs1OTksOSBAQCBJbml0QXV4aWxpYXJ5UHJvY2Vz cyh2b2lkKQogCU93bkxhdGNoKCZNeVByb2MtPnByb2NMYXRjaCk7CiAJU3dpdGNoVG9TaGFy ZWRMYXRjaCgpOwogCisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzLWxvY2FsIGNvbmRpdGlvbiB2 YXJpYWJsZSBzdXBwb3J0ICovCisJSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlV2FpdFNl dCgpOworCiAJLyogbm93IHRoYXQgd2UgaGF2ZSBhIHByb2MsIHJlcG9ydCB3YWl0IGV2ZW50 cyB0byBzaGFyZWQgbWVtb3J5ICovCiAJcGdzdGF0X3NldF93YWl0X2V2ZW50X3N0b3JhZ2Uo Jk15UHJvYy0+d2FpdF9ldmVudF9pbmZvKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudC5jCmluZGV4IGNiOTljYzYzMzkuLmExMGRjZDRlNjEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKQEAgLTQ2Niw2ICs0NjYsOSBA QCBwZ3N0YXRfZ2V0X3dhaXRfaXBjKFdhaXRFdmVudElQQyB3KQogCQljYXNlIFdBSVRfRVZF TlRfV0FMX1JFQ0VJVkVSX1dBSVRfU1RBUlQ6CiAJCQlldmVudF9uYW1lID0gIldhbFJlY2Vp dmVyV2FpdFN0YXJ0IjsKIAkJCWJyZWFrOworCQljYXNlIFdBSVRfRVZFTlRfV0FMX1NFTkRF Ul9XQUlUX1JFUExBWToKKwkJCWV2ZW50X25hbWUgPSAiV2FsU2VuZGVyV2FpdFJlcGxheSI7 CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX1hBQ1RfR1JPVVBfVVBEQVRFOgogCQkJ ZXZlbnRfbmFtZSA9ICJYYWN0R3JvdXBVcGRhdGUiOwogCQkJYnJlYWs7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgYi9zcmMvYmFja2VuZC91dGls cy9pbml0L21pc2Npbml0LmMKaW5kZXggN2ViN2ZlODdmNi4uZDA3ZDI0YmM0NSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUg InBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wZ2FyY2gu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKKyNpbmNsdWRlICJzdG9y YWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNp bmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaAppbmRleCA0N2MyOTM1MGY1Li4yYmZlYWFhMDBm IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCkBAIC0xNSw2ICsxNSw3IEBACiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2lu Zm8uaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJzdG9yYWdl L2NvbmRpdGlvbl92YXJpYWJsZS5oIgogCiAvKgogICogUmVjb3ZlcnkgdGFyZ2V0IHR5cGUu CkBAIC0xNTUsNCArMTU2LDYgQEAgZXh0ZXJuIHZvaWQgUmVjb3ZlcnlSZXF1aXJlc0ludFBh cmFtZXRlcihjb25zdCBjaGFyICpwYXJhbV9uYW1lLCBpbnQgY3VyclZhbHVlLAogCiBleHRl cm4gdm9pZCB4bG9nX291dGRlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAq cmVjb3JkKTsKIAorZXh0ZXJuIENvbmRpdGlvblZhcmlhYmxlICpjaGVja19mb3JfcmVwbGF5 KHZvaWQpOworCiAjZW5kaWYJCQkJCQkJLyogWExPR1JFQ09WRVJZX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmggYi9zcmMvaW5jbHVkZS9saWJwcS9saWJw cS5oCmluZGV4IDUwZmM3ODFmNDcuLjMzZWRkYzdkNDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2xpYnBxL2xpYnBxLmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEuaApAQCAt NjAsOSArNjAsOSBAQCBleHRlcm4gY29uc3QgUEdETExJTVBPUlQgUFFjb21tTWV0aG9kcyAq UHFDb21tTWV0aG9kczsKICAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIFdhaXRFdmVudFNldCAq RmVCZVdhaXRTZXQ7CiAKLSNkZWZpbmUgRmVCZVdhaXRTZXRTb2NrZXRQb3MgMAotI2RlZmlu ZSBGZUJlV2FpdFNldExhdGNoUG9zIDEKLSNkZWZpbmUgRmVCZVdhaXRTZXRORXZlbnRzIDMK KyNkZWZpbmUgRmVCZVdhaXRTZXRMYXRjaFBvcyAwCisjZGVmaW5lIEZlQmVXYWl0U2V0U29j a2V0UG9zIDIKKyNkZWZpbmUgRmVCZVdhaXRTZXRORXZlbnRzIDEKIAogZXh0ZXJuIGludAlT dHJlYW1TZXJ2ZXJQb3J0KGludCBmYW1pbHksIGNvbnN0IGNoYXIgKmhvc3ROYW1lLAogCQkJ CQkJCSB1bnNpZ25lZCBzaG9ydCBwb3J0TnVtYmVyLCBjb25zdCBjaGFyICp1bml4U29ja2V0 RGlyLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXIuaAppbmRleCA1MmJiM2UyYWFl Li4yZmQ3NDVmZTcyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxz ZW5kZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXIuaApAQCAt MTMsNiArMTMsNyBAQAogI2RlZmluZSBfV0FMU0VOREVSX0gKIAogI2luY2x1ZGUgPHNpZ25h bC5oPgorI2luY2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAKIC8qCiAg KiBXaGF0IHRvIGRvIHdpdGggYSBzbmFwc2hvdCBpbiBjcmVhdGUgcmVwbGljYXRpb24gc2xv dCBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9jb25kaXRpb25f dmFyaWFibGUuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgK aW5kZXggNTg5YmRkMzIzYy4uOTRhZGI1NGI5MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2NvbmRpdGlvbl92YXJpYWJsZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIENPTkRJ VElPTl9WQVJJQUJMRV9ICiAjZGVmaW5lIENPTkRJVElPTl9WQVJJQUJMRV9ICiAKKyNpbmNs dWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jbGlzdF90eXBl cy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogCkBAIC00Miw5ICs0MywxNCBAQCB0 eXBlZGVmIHVuaW9uIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkCiAJY2hhcgkJ cGFkW0NWX01JTklNQUxfU0laRV07CiB9IENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFk ZGVkOwogCitleHRlcm4gdm9pZCBJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0 KHZvaWQpOworCiAvKiBJbml0aWFsaXplIGEgY29uZGl0aW9uIHZhcmlhYmxlLiAqLwogZXh0 ZXJuIHZvaWQgQ29uZGl0aW9uVmFyaWFibGVJbml0KENvbmRpdGlvblZhcmlhYmxlICpjdik7 CiAKK2V4dGVybiBXYWl0RXZlbnRTZXQgKkNvbmRpdGlvblZhcmlhYmxlV2FpdFNldENyZWF0 ZShNZW1vcnlDb250ZXh0IG1jeHQsCisJCQkJCQkJCQkJCQkJaW50IG5fc29ja2V0X2V2ZW50 cyk7CisKIC8qCiAgKiBUbyBzbGVlcCBvbiBhIGNvbmRpdGlvbiB2YXJpYWJsZSwgYSBwcm9j ZXNzIHNob3VsZCB1c2UgYSBsb29wIHdoaWNoIGZpcnN0CiAgKiBjaGVja3MgdGhlIGNvbmRp dGlvbiwgZXhpdGluZyB0aGUgbG9vcCBpZiBpdCBpcyBtZXQsIGFuZCB0aGVuIGNhbGxzCkBA IC01Niw2ICs2MiwxMCBAQCBleHRlcm4gdm9pZCBDb25kaXRpb25WYXJpYWJsZUluaXQoQ29u ZGl0aW9uVmFyaWFibGUgKmN2KTsKIGV4dGVybiB2b2lkIENvbmRpdGlvblZhcmlhYmxlU2xl ZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2LCB1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKIGV4 dGVybiBib29sIENvbmRpdGlvblZhcmlhYmxlVGltZWRTbGVlcChDb25kaXRpb25WYXJpYWJs ZSAqY3YsIGxvbmcgdGltZW91dCwKIAkJCQkJCQkJCQl1aW50MzIgd2FpdF9ldmVudF9pbmZv KTsKK2V4dGVybiBib29sIENvbmRpdGlvblZhcmlhYmxlRXZlbnRTbGVlcChDb25kaXRpb25W YXJpYWJsZSAqY3YsCisJCQkJCQkJCQkJV2FpdEV2ZW50U2V0ICpjdkV2ZW50U2V0LAorCQkJ CQkJCQkJCWxvbmcgdGltZW91dCwKKwkJCQkJCQkJCQl1aW50MzIgd2FpdF9ldmVudF9pbmZv KTsKIGV4dGVybiB2b2lkIENvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAodm9pZCk7CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmggYi9zcmMv aW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggOWFiMjNlMWM0YS4uNTQ4ZWY0MWRj YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtMTMxLDYgKzEzMSw3IEBAIHR5cGVk ZWYgZW51bQogCVdBSVRfRVZFTlRfU1lOQ19SRVAsCiAJV0FJVF9FVkVOVF9XQUxfUkVDRUlW RVJfRVhJVCwKIAlXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9XQUlUX1NUQVJULAorCVdBSVRf RVZFTlRfV0FMX1NFTkRFUl9XQUlUX1JFUExBWSwKIAlXQUlUX0VWRU5UX1hBQ1RfR1JPVVBf VVBEQVRFCiB9IFdhaXRFdmVudElQQzsKIAotLSAKMi4zNC4xCgo= --------------0maWwKSzbUtJaEncLEZdTajz--