Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qt7Ty-00Av41-6T for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Oct 2023 14:25:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qt7Tw-004p3l-7Q for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Oct 2023 14:25:08 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qt7Tv-004p0n-MK for pgsql-hackers@lists.postgresql.org; Wed, 18 Oct 2023 14:25:08 +0000 Received: from mail-vs1-xe2f.google.com ([2607:f8b0:4864:20::e2f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qt7Tr-0016NG-Fz for pgsql-hackers@postgresql.org; Wed, 18 Oct 2023 14:25:07 +0000 Received: by mail-vs1-xe2f.google.com with SMTP id ada2fe7eead31-45865d6e588so444649137.0 for ; Wed, 18 Oct 2023 07:25:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1697639102; x=1698243902; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=uwQq3K5bVNzYJrk7jCgeWWUkcLSMrmr5XubbhdN0y9g=; b=c9kiIYaNmxf717MOy11AsELnhYXKZ/22pBvJi37qy/hyIcbCTIT6WSYG5k1zuz6A5F WyMUCiEZgZXKVEfzAW9NWPCajqKzU54ZqUSNvirrxlhIiJc1Z77PEqNdyk5wjFoi/AA1 RlquXD6ja0xcDfVY1XWU2usyvbY2jzWgN+8/jzIN8lud3PcZ7HtrS2TTpy73HcpEwaVs x8EKrQjmgpvu88KYcyq+4pO8a1O9ObSfm8DpoacLvXURe4IoNTtAVDp7KPR2acQsvbnx SPi6pAtL2SKefITlL208zL6jOZtjIM2Fb4v4iZB/ju/uIhCb9JyBz5aCKf5nECbcHKS9 f12Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697639102; x=1698243902; 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=uwQq3K5bVNzYJrk7jCgeWWUkcLSMrmr5XubbhdN0y9g=; b=Q2al3ImMstNtZXqiG+cAArlZ89tBnj1g7rJBx79jP5edA0g013dpwDIM6fx7WJ5kFe XV7yOA6fc/bx0rLaOFlozl1gTvptOf1VnMr6ZBMfefurochyuJe9YpanCl0uUeuA9zu+ FjPol8zcQ/G1mADeiWf6O/mBYuMDvXYxwBW5mWnAGbYo50FBqsgJSHPFWUeghTxRJAPq gRIORuv88impoXCAfWMZ9ZcFlMIcKEm9qXKFhPYG1p1jQeC88cLzq8VfkdDOp+Oijkke w3XqXdCL2GpZrnJtBFAa1uTczjemlJelGOlxa/vqKhXTJohBhkxXwNUTp5GH0OLULRRF RvyQ== X-Gm-Message-State: AOJu0YxSn2HctMDbD5P60WCqbx6a5sqY/VjgrqIRN3CIyAlOurpWPU1v R2XMJmZJD8IfuIpGZhmOyBZGSVElXIdJ7bMhh5U= X-Google-Smtp-Source: AGHT+IHSNqx0Idh2HN7RQYd0U3+Qz9ZjsHquxKligcV9DLE+5SvuOAc+rK5T2urGeagrrVAeR0uS79n7zAlfEuxXbKw= X-Received: by 2002:a05:6102:298f:b0:457:c2e1:64c5 with SMTP id dl15-20020a056102298f00b00457c2e164c5mr2854358vsb.7.1697639102602; Wed, 18 Oct 2023 07:25:02 -0700 (PDT) MIME-Version: 1.0 References: <20230714151626.rhgae7taigk2xrq7@awork3.anarazel.de> <20231005183400.n5myso7vu6crd656@alap3.anarazel.de> <20231009204702.cy3ilp6wgh7a5qms@awork3.anarazel.de> In-Reply-To: From: Robert Haas Date: Wed, 18 Oct 2023 10:24:50 -0400 Message-ID: Subject: Re: New WAL record to detect the checkpoint redo location To: Michael Paquier Cc: Andres Freund , Dilip Kumar , Heikki Linnakangas , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000aaf98b0607fe67b3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aaf98b0607fe67b3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Oct 17, 2023 at 8:35=E2=80=AFPM Michael Paquier wrote: > Suggestion is from here, with a test for pg_walinspect after it runs > its online checkpoint (see the full-page case): > https://www.postgresql.org/message-id/ZOvf1tu6rfL/B2PW@paquier.xyz > > +-- Check presence of REDO record. > +SELECT redo_lsn FROM pg_control_checkpoint() \gset > +SELECT start_lsn =3D :'redo_lsn'::pg_lsn AS same_lsn, record_type > + FROM pg_get_wal_record_info(:'redo_lsn'); I added a variant of this test case. Here's v10. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000aaf98b0607fe67b3 Content-Type: application/octet-stream; name="v10-0001-During-online-checkpoints-insert-XLOG_CHECKPOINT.patch" Content-Disposition: attachment; filename="v10-0001-During-online-checkpoints-insert-XLOG_CHECKPOINT.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lnvuh5z80 RnJvbSBhODgyNzI1M2QzMTAxZDgyMzRmMzdjYzEzYjlkNTliZGE4ZmQyYzI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMTggT2N0IDIwMjMgMTA6MTg6NDQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMF0g RHVyaW5nIG9ubGluZSBjaGVja3BvaW50cywgaW5zZXJ0IFhMT0dfQ0hFQ0tQT0lOVF9SRURPIGF0 CiByZWRvIHBvaW50LgoKVGhpcyBhbGxvd3MgdG9vbHMgdGhhdCByZWFkIHRoZSBXQUwgc2VxdWVu dGlhbGx5IHRvIGlkZW50aWZ5IChwb3NzaWJsZSkKcmVkbyBwb2ludHMgd2hlbiB0aGV5J3JlIHJl YWNoZWQsIHJhdGhlciB0aGFuIG9ubHkgYmVpbmcgYWJsZSB0bwpkZXRlY3QgdGhlbSBpbiByZXRy b3NwZWN0IHdoZW4gWExPR19DSEVDS1BPSU5UX09OTElORSBpcyBmb3VuZCwgcG9zc2libHkKbXVj aCBsYXRlciBpbiB0aGUgV0FMIHN0cmVhbS4KCkFueSByZWRvIGxvY2F0aW9uIHRoYXQgcHJlY2Vk ZXMgdGhlIGNoZWNrcG9pbnQgbG9jYXRpb24gc2hvdWxkIG5vdyBwb2ludAp0byBhbiBYTE9HX0NI RUNLUE9JTlRfUkVETyByZWNvcmQsIHNvIGFkZCBhIGNyb3NzLWNoZWNrIHRvIHZlcmlmeSB0aGlz LgoKV2hpbGUgYWRqdXN0aW5nIHRoZSBjb2RlIGluIENyZWF0ZUNoZWNrUG9pbnQoKSBmb3IgdGhp cyBwYXRjaCwgSSBtYWRlIGl0CmNhbGwgV0FMSW5zZXJ0TG9ja0FjcXVpcmVFeGNsdXNpdmUgYSBi aXQgbGF0ZXIgdGhhbiBiZWZvcmUsIHNpbmNlIHRoZXJlCmFwcGVhcnMgdG8gYmUgbm8gbmVlZCBm b3IgaXQgdG8gYmUgaGVsZCB3aGlsZSBjaGVja2luZyB3aGV0aGVyIHRoZSBzeXN0ZW0KaXMgaWRs ZSwgd2hldGhlciB0aGlzIGlzIGFuIGVuZC1vZi1yZWNvdmVyeSBjaGVja3BvaW50LCBvciB3aGF0 IHRoZSBjdXJyZW50CnRpbWVsaW5lIGlzLgoKUGF0Y2ggYnkgbWUsIGJhc2VkIGluIHBhcnQgb24g ZWFybGllciB3b3JrIGZyb20gRGlsaXAgS3VtYXIuIFJldmlldyBieQpEaWxpcCBLdW1hciwgQW1p dCBLYXBpbGEsIEFuZHJlcyBGcmV1bmQsIGFuZCBNaWNoYWVsIFBhcXVpZXIuCgpEaXNjdXNzaW9u OiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdtb1l5LVZjNkc5UUtjQUtOa3NDYTI5Y3ZfX2N6citO OVhfUUN4RWZRVnBwXzh3QG1haWwuZ21haWwuY29tCi0tLQogLi4uL3BnX3dhbGluc3BlY3QvZXhw ZWN0ZWQvcGdfd2FsaW5zcGVjdC5vdXQgIHwgIDEzICstCiBjb250cmliL3BnX3dhbGluc3BlY3Qv c3FsL3BnX3dhbGluc3BlY3Quc3FsICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy94bG9nZGVzYy5jICAgICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMgICAgICAgICAgICAgfCAxOTMgKysrKysrKysrKysrLS0tLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgICAgfCAgMTEgKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfY29udHJvbC5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCAx NzcgaW5zZXJ0aW9ucygrKSwgNjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z193YWxpbnNwZWN0L2V4cGVjdGVkL3BnX3dhbGluc3BlY3Qub3V0IGIvY29udHJpYi9wZ193YWxp bnNwZWN0L2V4cGVjdGVkL3BnX3dhbGluc3BlY3Qub3V0CmluZGV4IGE4ZjRjOTEwNjAuLmMwMTBl ZWQ4YzUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9leHBlY3RlZC9wZ193YWxp bnNwZWN0Lm91dAorKysgYi9jb250cmliL3BnX3dhbGluc3BlY3QvZXhwZWN0ZWQvcGdfd2FsaW5z cGVjdC5vdXQKQEAgLTEyNyw5ICsxMjcsMjAgQEAgU0VMRUNUIENPVU5UKCopID49IDEgQVMgb2sg RlJPTSBwZ19nZXRfd2FsX2Jsb2NrX2luZm8oOid3YWxfbHNuMycsIDond2FsX2xzbjQnKQogIHQK ICgxIHJvdykKIAotLS0gRm9yY2UgZnVsbC1wYWdlIGltYWdlIG9uIHRoZSBuZXh0IHVwZGF0ZS4K Ky0tIEZvcmNlIGEgY2hlY2twb2ludCBzbyB0aGF0IHRoZSBuZXh0IHVwZGF0ZSB3aWxsIGxvZyBh IGZ1bGwtcGFnZSBpbWFnZS4KIFNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSBBUyB3YWxfbHNu NSBcZ3NldAogQ0hFQ0tQT0lOVDsKKy0tIFZlcmlmeSB0aGF0IGFuIFhMT0dfQ0hFQ0tQT0lOVF9S RURPIHJlY29yZCBiZWdpbnMgYXQgcHJlY2lzZWx5IHRoZSByZWRvIExTTgorLS0gb2YgdGhlIGNo ZWNrcG9pbnQgd2UganVzdCBwZXJmb3JtZWQuCitTRUxFQ1QgcmVkb19sc24gRlJPTSBwZ19jb250 cm9sX2NoZWNrcG9pbnQoKSBcZ3NldAorU0VMRUNUIHN0YXJ0X2xzbiA9IDoncmVkb19sc24nOjpw Z19sc24gQVMgc2FtZV9sc24sIHJlc291cmNlX21hbmFnZXIsCisgICAgcmVjb3JkX3R5cGUgRlJP TSBwZ19nZXRfd2FsX3JlY29yZF9pbmZvKDoncmVkb19sc24nKTsKKyBzYW1lX2xzbiB8IHJlc291 cmNlX21hbmFnZXIgfCAgIHJlY29yZF90eXBlICAgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgIHwgWExPRyAgICAgICAgICAgICB8IENI RUNLUE9JTlRfUkVETworKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZSBzaG91bGQgcHJvZHVjZSBh IGZ1bGwtcGFnZSBpbWFnZSBiZWNhdXNlIG9mIHRoZSBjaGVja3BvaW50LgogVVBEQVRFIHNhbXBs ZV90YmwgU0VUIGNvbDEgPSBjb2wxICsgMSBXSEVSRSBjb2wxID0gMjsKIFNFTEVDVCBwZ19jdXJy ZW50X3dhbF9sc24oKSBBUyB3YWxfbHNuNiBcZ3NldAogLS0gQ2hlY2sgaWYgd2UgZ2V0IEZQSSBm cm9tIFdBTCByZWNvcmQuCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3dhbGluc3BlY3Qvc3FsL3Bn X3dhbGluc3BlY3Quc3FsIGIvY29udHJpYi9wZ193YWxpbnNwZWN0L3NxbC9wZ193YWxpbnNwZWN0 LnNxbAppbmRleCBmOTg3Y2EzMWM0Li4xZTY0YTIyZDI5IDEwMDY0NAotLS0gYS9jb250cmliL3Bn X3dhbGluc3BlY3Qvc3FsL3BnX3dhbGluc3BlY3Quc3FsCisrKyBiL2NvbnRyaWIvcGdfd2FsaW5z cGVjdC9zcWwvcGdfd2FsaW5zcGVjdC5zcWwKQEAgLTgwLDkgKzgwLDE3IEBAIFNFTEVDVCBwZ19j dXJyZW50X3dhbF9sc24oKSBBUyB3YWxfbHNuNCBcZ3NldAogU0VMRUNUIENPVU5UKCopID49IDEg QVMgb2sgRlJPTSBwZ19nZXRfd2FsX2Jsb2NrX2luZm8oOid3YWxfbHNuMycsIDond2FsX2xzbjQn KQogICBXSEVSRSByZWxmaWxlbm9kZSA9IDonc2FtcGxlX3RibF9vaWQnIEFORCBibG9ja19kYXRh IElTIE5PVCBOVUxMOwogCi0tLSBGb3JjZSBmdWxsLXBhZ2UgaW1hZ2Ugb24gdGhlIG5leHQgdXBk YXRlLgorLS0gRm9yY2UgYSBjaGVja3BvaW50IHNvIHRoYXQgdGhlIG5leHQgdXBkYXRlIHdpbGwg bG9nIGEgZnVsbC1wYWdlIGltYWdlLgogU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIEFTIHdh bF9sc241IFxnc2V0CiBDSEVDS1BPSU5UOworCistLSBWZXJpZnkgdGhhdCBhbiBYTE9HX0NIRUNL UE9JTlRfUkVETyByZWNvcmQgYmVnaW5zIGF0IHByZWNpc2VseSB0aGUgcmVkbyBMU04KKy0tIG9m IHRoZSBjaGVja3BvaW50IHdlIGp1c3QgcGVyZm9ybWVkLgorU0VMRUNUIHJlZG9fbHNuIEZST00g cGdfY29udHJvbF9jaGVja3BvaW50KCkgXGdzZXQKK1NFTEVDVCBzdGFydF9sc24gPSA6J3JlZG9f bHNuJzo6cGdfbHNuIEFTIHNhbWVfbHNuLCByZXNvdXJjZV9tYW5hZ2VyLAorICAgIHJlY29yZF90 eXBlIEZST00gcGdfZ2V0X3dhbF9yZWNvcmRfaW5mbyg6J3JlZG9fbHNuJyk7CisKKy0tIFRoaXMg dXBkYXRlIHNob3VsZCBwcm9kdWNlIGEgZnVsbC1wYWdlIGltYWdlIGJlY2F1c2Ugb2YgdGhlIGNo ZWNrcG9pbnQuCiBVUERBVEUgc2FtcGxlX3RibCBTRVQgY29sMSA9IGNvbDEgKyAxIFdIRVJFIGNv bDEgPSAyOwogU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIEFTIHdhbF9sc242IFxnc2V0CiAt LSBDaGVjayBpZiB3ZSBnZXQgRlBJIGZyb20gV0FMIHJlY29yZC4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL3hsb2dkZXNjLmMKaW5kZXggZjM5MGMxNzdlNC4uMzdmNTliZGE3ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMKQEAgLTE0OCw2ICsxNDgsMTAgQEAgeGxvZ19k ZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJCQkJCSBMU05f Rk9STUFUX0FSR1MoeGxyZWMub3ZlcndyaXR0ZW5fbHNuKSwKIAkJCQkJCSB0aW1lc3RhbXB0el90 b19zdHIoeGxyZWMub3ZlcndyaXRlX3RpbWUpKTsKIAl9CisJZWxzZSBpZiAoaW5mbyA9PSBYTE9H X0NIRUNLUE9JTlRfUkVETykKKwl7CisJCS8qIE5vIGRldGFpbHMgdG8gd3JpdGUgb3V0ICovCisJ fQogfQogCiBjb25zdCBjaGFyICoKQEAgLTE5Niw2ICsyMDAsOSBAQCB4bG9nX2lkZW50aWZ5KHVp bnQ4IGluZm8pCiAJCWNhc2UgWExPR19GUElfRk9SX0hJTlQ6CiAJCQlpZCA9ICJGUElfRk9SX0hJ TlQiOwogCQkJYnJlYWs7CisJCWNhc2UgWExPR19DSEVDS1BPSU5UX1JFRE86CisJCQlpZCA9ICJD SEVDS1BPSU5UX1JFRE8iOworCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIGlkOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCmluZGV4IGMwZTRjYTUwODkuLmNlYTEzZTNkNTggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMKQEAgLTU1OSw2ICs1NTksMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgWExv Z0N0bERhdGEKIAlzbG9ja190CQlpbmZvX2xjazsJCS8qIGxvY2tzIHNoYXJlZCB2YXJpYWJsZXMg c2hvd24gYWJvdmUgKi8KIH0gWExvZ0N0bERhdGE7CiAKKy8qCisgKiBDbGFzc2lmaWNhdGlvbiBv ZiBYTG9nUmVjb3JkSW5zZXJ0IG9wZXJhdGlvbnMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVdB TElOU0VSVF9OT1JNQUwsCisJV0FMSU5TRVJUX1NQRUNJQUxfU1dJVENILAorCVdBTElOU0VSVF9T UEVDSUFMX0NIRUNLUE9JTlQKK30gV2FsSW5zZXJ0Q2xhc3M7CisKIHN0YXRpYyBYTG9nQ3RsRGF0 YSAqWExvZ0N0bCA9IE5VTEw7CiAKIC8qIGEgcHJpdmF0ZSBjb3B5IG9mIFhMb2dDdGwtPkluc2Vy dC5XQUxJbnNlcnRMb2NrcywgZm9yIGNvbnZlbmllbmNlICovCkBAIC03MzksMTMgKzc0OSwyMSBA QCBYTG9nSW5zZXJ0UmVjb3JkKFhMb2dSZWNEYXRhICpyZGF0YSwKIAlib29sCQlpbnNlcnRlZDsK IAlYTG9nUmVjb3JkICpyZWNoZHIgPSAoWExvZ1JlY29yZCAqKSByZGF0YS0+ZGF0YTsKIAl1aW50 OAkJaW5mbyA9IHJlY2hkci0+eGxfaW5mbyAmIH5YTFJfSU5GT19NQVNLOwotCWJvb2wJCWlzTG9n U3dpdGNoID0gKHJlY2hkci0+eGxfcm1pZCA9PSBSTV9YTE9HX0lEICYmCi0JCQkJCQkJICAgaW5m byA9PSBYTE9HX1NXSVRDSCk7CisJV2FsSW5zZXJ0Q2xhc3MgY2xhc3MgPSBXQUxJTlNFUlRfTk9S TUFMOwogCVhMb2dSZWNQdHIJU3RhcnRQb3M7CiAJWExvZ1JlY1B0cglFbmRQb3M7CiAJYm9vbAkJ cHJldkRvUGFnZVdyaXRlcyA9IGRvUGFnZVdyaXRlczsKIAlUaW1lTGluZUlECWluc2VydFRMSTsK IAorCS8qIERvZXMgdGhpcyByZWNvcmQgdHlwZSByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmc/ICov CisJaWYgKHVubGlrZWx5KHJlY2hkci0+eGxfcm1pZCA9PSBSTV9YTE9HX0lEKSkKKwl7CisJCWlm IChpbmZvID09IFhMT0dfU1dJVENIKQorCQkJY2xhc3MgPSBXQUxJTlNFUlRfU1BFQ0lBTF9TV0lU Q0g7CisJCWVsc2UgaWYgKGluZm8gPT0gWExPR19DSEVDS1BPSU5UX1JFRE8pCisJCQljbGFzcyA9 IFdBTElOU0VSVF9TUEVDSUFMX0NIRUNLUE9JTlQ7CisJfQorCiAJLyogd2UgYXNzdW1lIHRoYXQg YWxsIG9mIHRoZSByZWNvcmQgaGVhZGVyIGlzIGluIHRoZSBmaXJzdCBjaHVuayAqLwogCUFzc2Vy dChyZGF0YS0+bGVuID49IFNpemVPZlhMb2dSZWNvcmQpOwogCkBAIC03OTMsNyArODExLDcgQEAg WExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJICovCiAJU1RBUlRfQ1JJVF9T RUNUSU9OKCk7CiAKLQlpZiAobGlrZWx5KCFpc0xvZ1N3aXRjaCkpCisJaWYgKGxpa2VseShjbGFz cyA9PSBXQUxJTlNFUlRfTk9STUFMKSkKIAl7CiAJCVdBTEluc2VydExvY2tBY3F1aXJlKCk7CiAK QEAgLTg0Myw3ICs4NjEsNyBAQCBYTG9nSW5zZXJ0UmVjb3JkKFhMb2dSZWNEYXRhICpyZGF0YSwK IAkJLyogTm9ybWFsIHJlY29yZHMgYXJlIGFsd2F5cyBpbnNlcnRlZC4gKi8KIAkJaW5zZXJ0ZWQg PSB0cnVlOwogCX0KLQllbHNlCisJZWxzZSBpZiAoY2xhc3MgPT0gV0FMSU5TRVJUX1NQRUNJQUxf U1dJVENIKQogCXsKIAkJLyoKIAkJICogSW4gb3JkZXIgdG8gaW5zZXJ0IGFuIFhMT0dfU1dJVENI IHJlY29yZCwgd2UgbmVlZCB0byBob2xkIGFsbCBvZgpAQCAtODUyLDE0ICs4NzAsMzIgQEAgWExv Z0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJCSAqIHJlbWFpbnMgaW4gdGhlIGN1 cnJlbnQgV0FMIHNlZ21lbnQgYW5kIGNsYWltZWQgYWxsIG9mIGl0LgogCQkgKgogCQkgKiBOb25l dGhlbGVzcywgdGhpcyBjYXNlIGlzIHNpbXBsZXIgdGhhbiB0aGUgbm9ybWFsIGNhc2VzIGhhbmRs ZWQKLQkJICogYWJvdmUsIHdoaWNoIG11c3QgY2hlY2sgZm9yIGNoYW5nZXMgaW4gZG9QYWdlV3Jp dGVzIGFuZCBSZWRvUmVjUHRyLgotCQkgKiBUaG9zZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGZv ciByZWNvcmRzIHRoYXQgY2FuIGNvbnRhaW4KLQkJICogZnVsbC1wYWdlcyBpbWFnZXMsIGFuZCBh biBYTE9HX1NXSVRDSCByZWNvcmQgbmV2ZXIgZG9lcy4KKwkJICogYmVsb3csIHdoaWNoIG11c3Qg Y2hlY2sgZm9yIGNoYW5nZXMgaW4gZG9QYWdlV3JpdGVzIGFuZCBSZWRvUmVjUHRyLgorCQkgKiBU aG9zZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGZvciByZWNvcmRzIHRoYXQgY2FuIGNvbnRhaW4g YnVmZmVyCisJCSAqIHJlZmVyZW5jZXMsIGFuZCBhbiBYTE9HX1NXSVRDSCByZWNvcmQgbmV2ZXIg ZG9lcy4KIAkJICovCiAJCUFzc2VydChmcHdfbHNuID09IEludmFsaWRYTG9nUmVjUHRyKTsKIAkJ V0FMSW5zZXJ0TG9ja0FjcXVpcmVFeGNsdXNpdmUoKTsKIAkJaW5zZXJ0ZWQgPSBSZXNlcnZlWExv Z1N3aXRjaCgmU3RhcnRQb3MsICZFbmRQb3MsICZyZWNoZHItPnhsX3ByZXYpOwogCX0KKwllbHNl CisJeworCQlBc3NlcnQoY2xhc3MgPT0gV0FMSU5TRVJUX1NQRUNJQUxfQ0hFQ0tQT0lOVCk7CisK KwkJLyoKKwkJICogV2UgbmVlZCB0byB1cGRhdGUgYm90aCB0aGUgbG9jYWwgYW5kIHNoYXJlZCBj b3BpZXMgb2YgUmVkb1JlY1B0ciwKKwkJICogd2hpY2ggbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGhv bGQgYWxsIHRoZSBXQUwgaW5zZXJ0aW9uIGxvY2tzLgorCQkgKiBIb3dldmVyLCB0aGVyZSBjYW4n dCBiZSBhbnkgYnVmZmVyIHJlZmVyZW5jZXMsIHNvIGFzIGFib3ZlLCB3ZSBuZWVkCisJCSAqIG5v dCBjaGVjayBSZWRvUmVjUHRyIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHJlY29yZDsgd2UganVzdCBu ZWVkIHRvCisJCSAqIHVwZGF0ZSBpdCBhZnRlcndhcmRzLgorCQkgKi8KKwkJQXNzZXJ0KGZwd19s c24gPT0gSW52YWxpZFhMb2dSZWNQdHIpOworCQlXQUxJbnNlcnRMb2NrQWNxdWlyZUV4Y2x1c2l2 ZSgpOworCQlSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKHJlY2hkci0+eGxfdG90X2xlbiwgJlN0 YXJ0UG9zLCAmRW5kUG9zLAorCQkJCQkJCQkgICZyZWNoZHItPnhsX3ByZXYpOworCQlSZWRvUmVj UHRyID0gSW5zZXJ0LT5SZWRvUmVjUHRyID0gU3RhcnRQb3M7CisJCWluc2VydGVkID0gdHJ1ZTsK Kwl9CiAKIAlpZiAoaW5zZXJ0ZWQpCiAJewpAQCAtODc2LDcgKzkxMiw4IEBAIFhMb2dJbnNlcnRS ZWNvcmQoWExvZ1JlY0RhdGEgKnJkYXRhLAogCQkgKiBBbGwgdGhlIHJlY29yZCBkYXRhLCBpbmNs dWRpbmcgdGhlIGhlYWRlciwgaXMgbm93IHJlYWR5IHRvIGJlCiAJCSAqIGluc2VydGVkLiBDb3B5 IHRoZSByZWNvcmQgaW4gdGhlIHNwYWNlIHJlc2VydmVkLgogCQkgKi8KLQkJQ29weVhMb2dSZWNv cmRUb1dBTChyZWNoZHItPnhsX3RvdF9sZW4sIGlzTG9nU3dpdGNoLCByZGF0YSwKKwkJQ29weVhM b2dSZWNvcmRUb1dBTChyZWNoZHItPnhsX3RvdF9sZW4sCisJCQkJCQkJY2xhc3MgPT0gV0FMSU5T RVJUX1NQRUNJQUxfU1dJVENILCByZGF0YSwKIAkJCQkJCQlTdGFydFBvcywgRW5kUG9zLCBpbnNl cnRUTEkpOwogCiAJCS8qCkBAIC05MzUsNyArOTcyLDcgQEAgWExvZ0luc2VydFJlY29yZChYTG9n UmVjRGF0YSAqcmRhdGEsCiAJICogcGFkZGluZyBzcGFjZSB0aGF0IGZpbGxzIHRoZSByZXN0IG9m IHRoZSBzZWdtZW50LCBhbmQgcGVyZm9ybQogCSAqIGVuZC1vZi1zZWdtZW50IGFjdGlvbnMgKGVn LCBub3RpZnlpbmcgYXJjaGl2ZXIpLgogCSAqLwotCWlmIChpc0xvZ1N3aXRjaCkKKwlpZiAoY2xh c3MgPT0gV0FMSU5TRVJUX1NQRUNJQUxfU1dJVENIKQogCXsKIAkJVFJBQ0VfUE9TVEdSRVNRTF9X QUxfU1dJVENIKCk7CiAJCVhMb2dGbHVzaChFbmRQb3MpOwpAQCAtMTA1NCw4ICsxMDkxLDEyIEBA IFhMb2dJbnNlcnRSZWNvcmQoWExvZ1JlY0RhdGEgKnJkYXRhLAogICoKICAqIE5COiBUaGUgc3Bh Y2UgY2FsY3VsYXRpb24gaGVyZSBtdXN0IG1hdGNoIHRoZSBjb2RlIGluIENvcHlYTG9nUmVjb3Jk VG9XQUwsCiAgKiB3aGVyZSB3ZSBhY3R1YWxseSBjb3B5IHRoZSByZWNvcmQgdG8gdGhlIHJlc2Vy dmVkIHNwYWNlLgorICoKKyAqIE5COiBUZXN0aW5nIHNob3dzIHRoYXQgWExvZ0luc2VydFJlY29y ZCBydW5zIGZhc3RlciBpZiB0aGlzIGNvZGUgaXMgaW5saW5lZDsKKyAqIGhvd2V2ZXIsIGJlY2F1 c2UgdGhlcmUgYXJlIHR3byBjYWxsIHNpdGVzLCB0aGUgY29tcGlsZXIgaXMgcmVsdWN0YW50IHRv CisgKiBpbmxpbmUuIFdlIHVzZSBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBoZXJlIHRvIHRy eSB0byBjb252aW5jZSBpdC4KICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSB2b2lkCiBSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKGludCBzaXplLCBY TG9nUmVjUHRyICpTdGFydFBvcywgWExvZ1JlY1B0ciAqRW5kUG9zLAogCQkJCQkJICBYTG9nUmVj UHRyICpQcmV2UHRyKQogewpAQCAtNjQ3NSwxNyArNjUxNiwyMiBAQCB1cGRhdGVfY2hlY2twb2lu dF9kaXNwbGF5KGludCBmbGFncywgYm9vbCByZXN0YXJ0cG9pbnQsIGJvb2wgcmVzZXQpCiAgKiBJ biBwYXJ0aWN1bGFyIG5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgaXMgc3luY2hyb25vdXMgYW5kIGRv ZXMgbm90IHBheQogICogYXR0ZW50aW9uIHRvIENIRUNLUE9JTlRfV0FJVC4KICAqCi0gKiBJZiAh c2h1dGRvd24gdGhlbiB3ZSBhcmUgd3JpdGluZyBhbiBvbmxpbmUgY2hlY2twb2ludC4gVGhpcyBp cyBhIHZlcnkgc3BlY2lhbAotICoga2luZCBvZiBvcGVyYXRpb24gYW5kIFdBTCByZWNvcmQgYmVj YXVzZSB0aGUgY2hlY2twb2ludCBhY3Rpb24gb2NjdXJzIG92ZXIKLSAqIGEgcGVyaW9kIG9mIHRp bWUgeWV0IGxvZ2ljYWxseSBvY2N1cnMgYXQganVzdCBhIHNpbmdsZSBMU04uIFRoZSBsb2dpY2Fs Ci0gKiBwb3NpdGlvbiBvZiB0aGUgV0FMIHJlY29yZCAocmVkbyBwdHIpIGlzIHRoZSBzYW1lIG9y IGVhcmxpZXIgdGhhbiB0aGUKLSAqIHBoeXNpY2FsIHBvc2l0aW9uLiBXaGVuIHdlIHJlcGxheSBX QUwgd2UgbG9jYXRlIHRoZSBjaGVja3BvaW50IHZpYSBpdHMKLSAqIHBoeXNpY2FsIHBvc2l0aW9u IHRoZW4gcmVhZCB0aGUgcmVkbyBwdHIgYW5kIGFjdHVhbGx5IHN0YXJ0IHJlcGxheSBhdCB0aGUK LSAqIGVhcmxpZXIgbG9naWNhbCBwb3NpdGlvbi4gTm90ZSB0aGF0IHdlIGRvbid0IHdyaXRlICph bnl0aGluZyogdG8gV0FMIGF0Ci0gKiB0aGUgbG9naWNhbCBwb3NpdGlvbiwgc28gdGhhdCBsb2Nh dGlvbiBjb3VsZCBiZSBhbnkgb3RoZXIga2luZCBvZiBXQUwgcmVjb3JkLgotICogQWxsIG9mIHRo aXMgbWVjaGFuaXNtIGFsbG93cyB1cyB0byBjb250aW51ZSB3b3JraW5nIHdoaWxlIHdlIGNoZWNr cG9pbnQuCi0gKiBBcyBhIHJlc3VsdCwgdGltaW5nIG9mIGFjdGlvbnMgaXMgY3JpdGljYWwgaGVy ZSBhbmQgYmUgY2FyZWZ1bCB0byBub3RlIHRoYXQKLSAqIHRoaXMgZnVuY3Rpb24gd2lsbCBsaWtl bHkgdGFrZSBtaW51dGVzIHRvIGV4ZWN1dGUgb24gYSBidXN5IHN5c3RlbS4KKyAqIElmICFzaHV0 ZG93biB0aGVuIHdlIGFyZSB3cml0aW5nIGFuIG9ubGluZSBjaGVja3BvaW50LiBBbiBYTE9HX0NI RUNLUE9JTlRfUkVETworICogcmVjb3JkIGlzIGluc2VydGVkIGludG8gV0FMIGF0IHRoZSBsb2dp Y2FsIGxvY2F0aW9uIG9mIHRoZSBjaGVja3BvaW50LCBiZWZvcmUKKyAqIGZsdXNoaW5nIGFueXRo aW5nIHRvIGRpc2ssIGFuZCB3aGVuIHRoZSBjaGVja3BvaW50IGlzIGV2ZW50dWFsbHkgY29tcGxl dGVkLAorICogYW5kIGl0IGlzIGZyb20gdGhpcyBwb2ludCB0aGF0IFdBTCByZXBsYXkgd2lsbCBi ZWdpbiBpbiB0aGUgY2FzZSBvZiBhIHJlY292ZXJ5CisgKiBmcm9tIHRoaXMgY2hlY2twb2ludC4g T25jZSBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gdG8gZGlzaywgYW4KKyAqIFhMT0dfQ0hFQ0tQT0lO VF9PTkxJTkUgcmVjb3JkIGlzIHdyaXR0ZW4gdG8gY29tcGxldGUgdGhlIGNoZWNrcG9pbnQsIGFu ZAorICogcG9pbnRzIGJhY2sgdG8gdGhlIGVhcmxpZXIgWExPR19DSEVDS1BPSU5UX1JFRE8gcmVj b3JkLiBUaGlzIG1lY2hhbmlzbSBhbGxvd3MKKyAqIG90aGVyIHdyaXRlLWFoZWFkIGxvZyByZWNv cmRzIHRvIGJlIHdyaXR0ZW4gd2hpbGUgdGhlIGNoZWNrcG9pbnQgaXMgaW4KKyAqIHByb2dyZXNz LCBidXQgd2UgbXVzdCBiZSB2ZXJ5IGNhcmVmdWwgYWJvdXQgb3JkZXIgb2Ygb3BlcmF0aW9ucy4g VGhpcyBmdW5jdGlvbgorICogbWF5IHRha2UgbWFueSBtaW51dGVzIHRvIGV4ZWN1dGUgb24gYSBi dXN5IHN5c3RlbS4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgd2hlbiBzaHV0ZG93biBpcyB0 cnVlLCBjb25jdXJyZW50IGluc2VydGlvbiBpbnRvIHRoZQorICogd3JpdGUtYWhlYWQgbG9nIGlz IGltcG9zc2libGUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHR3byBzZXBhcmF0ZSByZWNvcmRz LgorICogSW4gdGhpcyBjYXNlLCB3ZSBvbmx5IGluc2VydCBhbiBYTE9HX0NIRUNLUE9JTlRfU0hV VERPV04gcmVjb3JkLCBhbmQgaXQncworICogYm90aCB0aGUgcmVjb3JkIG1hcmtpbmcgdGhlIGNv bXBsZXRpb24gb2YgdGhlIGNoZWNrcG9pbnQgYW5kIHRoZSBsb2NhdGlvbgorICogZnJvbSB3aGlj aCBXQUwgcmVwbGF5IHdvdWxkIGJlZ2luIGlmIG5lZWRlZC4KICAqLwogdm9pZAogQ3JlYXRlQ2hl Y2tQb2ludChpbnQgZmxhZ3MpCkBAIC02NDk3LDcgKzY1NDMsNiBAQCBDcmVhdGVDaGVja1BvaW50 KGludCBmbGFncykKIAlYTG9nQ3RsSW5zZXJ0ICpJbnNlcnQgPSAmWExvZ0N0bC0+SW5zZXJ0Owog CXVpbnQzMgkJZnJlZXNwYWNlOwogCVhMb2dSZWNQdHIJUHJpb3JSZWRvUHRyOwotCVhMb2dSZWNQ dHIJY3VySW5zZXJ0OwogCVhMb2dSZWNQdHIJbGFzdF9pbXBvcnRhbnRfbHNuOwogCVZpcnR1YWxU cmFuc2FjdGlvbklkICp2eGlkczsKIAlpbnQJCQludnhpZHM7CkBAIC02NTY3LDEzICs2NjEyLDYg QEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJICovCiAJbGFzdF9pbXBvcnRhbnRfbHNu ID0gR2V0TGFzdEltcG9ydGFudFJlY1B0cigpOwogCi0JLyoKLQkgKiBXZSBtdXN0IGJsb2NrIGNv bmN1cnJlbnQgaW5zZXJ0aW9ucyB3aGlsZSBleGFtaW5pbmcgaW5zZXJ0IHN0YXRlIHRvCi0JICog ZGV0ZXJtaW5lIHRoZSBjaGVja3BvaW50IFJFRE8gcG9pbnRlci4KLQkgKi8KLQlXQUxJbnNlcnRM b2NrQWNxdWlyZUV4Y2x1c2l2ZSgpOwotCWN1ckluc2VydCA9IFhMb2dCeXRlUG9zVG9SZWNQdHIo SW5zZXJ0LT5DdXJyQnl0ZVBvcyk7Ci0KIAkvKgogCSAqIElmIHRoaXMgaXNuJ3QgYSBzaHV0ZG93 biBvciBmb3JjZWQgY2hlY2twb2ludCwgYW5kIGlmIHRoZXJlIGhhcyBiZWVuIG5vCiAJICogV0FM IGFjdGl2aXR5IHJlcXVpcmluZyBhIGNoZWNrcG9pbnQsIHNraXAgaXQuICBUaGUgaWRlYSBoZXJl IGlzIHRvCkBAIC02NTg0LDcgKzY2MjIsNiBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykK IAl7CiAJCWlmIChsYXN0X2ltcG9ydGFudF9sc24gPT0gQ29udHJvbEZpbGUtPmNoZWNrUG9pbnQp CiAJCXsKLQkJCVdBTEluc2VydExvY2tSZWxlYXNlKCk7CiAJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiAJCQllcmVwb3J0KERFQlVHMSwKIAkJCQkJKGVycm1zZ19pbnRlcm5hbCgiY2hlY2twb2ludCBz a2lwcGVkIGJlY2F1c2Ugc3lzdGVtIGlzIGlkbGUiKSkpOwpAQCAtNjYwNiwzOCArNjY0Myw0NyBA QCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAllbHNlCiAJCWNoZWNrUG9pbnQuUHJldlRp bWVMaW5lSUQgPSBjaGVja1BvaW50LlRoaXNUaW1lTGluZUlEOwogCi0JY2hlY2tQb2ludC5mdWxs UGFnZVdyaXRlcyA9IEluc2VydC0+ZnVsbFBhZ2VXcml0ZXM7Ci0KIAkvKgotCSAqIENvbXB1dGUg bmV3IFJFRE8gcmVjb3JkIHB0ciA9IGxvY2F0aW9uIG9mIG5leHQgWExPRyByZWNvcmQuCi0JICoK LQkgKiBOQjogdGhpcyBpcyBOT1QgbmVjZXNzYXJpbHkgd2hlcmUgdGhlIGNoZWNrcG9pbnQgcmVj b3JkIGl0c2VsZiB3aWxsIGJlLAotCSAqIHNpbmNlIG90aGVyIGJhY2tlbmRzIG1heSBpbnNlcnQg bW9yZSBYTE9HIHJlY29yZHMgd2hpbGUgd2UncmUgb2ZmIGRvaW5nCi0JICogdGhlIGJ1ZmZlciBm bHVzaCB3b3JrLiAgVGhvc2UgWExPRyByZWNvcmRzIGFyZSBsb2dpY2FsbHkgYWZ0ZXIgdGhlCi0J ICogY2hlY2twb2ludCwgZXZlbiB0aG91Z2ggcGh5c2ljYWxseSBiZWZvcmUgaXQuICBHb3QgdGhh dD8KKwkgKiBXZSBtdXN0IGJsb2NrIGNvbmN1cnJlbnQgaW5zZXJ0aW9ucyB3aGlsZSBleGFtaW5p bmcgaW5zZXJ0IHN0YXRlLgogCSAqLwotCWZyZWVzcGFjZSA9IElOU0VSVF9GUkVFU1BBQ0UoY3Vy SW5zZXJ0KTsKLQlpZiAoZnJlZXNwYWNlID09IDApCisJV0FMSW5zZXJ0TG9ja0FjcXVpcmVFeGNs dXNpdmUoKTsKKworCWNoZWNrUG9pbnQuZnVsbFBhZ2VXcml0ZXMgPSBJbnNlcnQtPmZ1bGxQYWdl V3JpdGVzOworCisJaWYgKHNodXRkb3duKQogCXsKLQkJaWYgKFhMb2dTZWdtZW50T2Zmc2V0KGN1 ckluc2VydCwgd2FsX3NlZ21lbnRfc2l6ZSkgPT0gMCkKLQkJCWN1ckluc2VydCArPSBTaXplT2ZY TG9nTG9uZ1BIRDsKLQkJZWxzZQotCQkJY3VySW5zZXJ0ICs9IFNpemVPZlhMb2dTaG9ydFBIRDsK LQl9Ci0JY2hlY2tQb2ludC5yZWRvID0gY3VySW5zZXJ0OworCQlYTG9nUmVjUHRyCWN1ckluc2Vy dCA9IFhMb2dCeXRlUG9zVG9SZWNQdHIoSW5zZXJ0LT5DdXJyQnl0ZVBvcyk7CiAKLQkvKgotCSAq IEhlcmUgd2UgdXBkYXRlIHRoZSBzaGFyZWQgUmVkb1JlY1B0ciBmb3IgZnV0dXJlIFhMb2dJbnNl cnQgY2FsbHM7IHRoaXMKLQkgKiBtdXN0IGJlIGRvbmUgd2hpbGUgaG9sZGluZyBhbGwgdGhlIGlu c2VydGlvbiBsb2Nrcy4KLQkgKgotCSAqIE5vdGU6IGlmIHdlIGZhaWwgdG8gY29tcGxldGUgdGhl IGNoZWNrcG9pbnQsIFJlZG9SZWNQdHIgd2lsbCBiZSBsZWZ0Ci0JICogcG9pbnRpbmcgcGFzdCB3 aGVyZSBpdCByZWFsbHkgbmVlZHMgdG8gcG9pbnQuICBUaGlzIGlzIG9rYXk7IHRoZSBvbmx5Ci0J ICogY29uc2VxdWVuY2UgaXMgdGhhdCBYTG9nSW5zZXJ0IG1pZ2h0IGJhY2sgdXAgd2hvbGUgYnVm ZmVycyB0aGF0IGl0Ci0JICogZGlkbid0IHJlYWxseSBuZWVkIHRvLiAgV2UgY2FuJ3QgcG9zdHBv bmUgYWR2YW5jaW5nIFJlZG9SZWNQdHIgYmVjYXVzZQotCSAqIFhMb2dJbnNlcnRzIHRoYXQgaGFw cGVuIHdoaWxlIHdlIGFyZSBkdW1waW5nIGJ1ZmZlcnMgbXVzdCBhc3N1bWUgdGhhdAotCSAqIHRo ZWlyIGJ1ZmZlciBjaGFuZ2VzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGNoZWNrcG9pbnQuCi0J ICovCi0JUmVkb1JlY1B0ciA9IFhMb2dDdGwtPkluc2VydC5SZWRvUmVjUHRyID0gY2hlY2tQb2lu dC5yZWRvOworCQkvKgorCQkgKiBDb21wdXRlIG5ldyBSRURPIHJlY29yZCBwdHIgPSBsb2NhdGlv biBvZiBuZXh0IFhMT0cgcmVjb3JkLgorCQkgKgorCQkgKiBTaW5jZSB0aGlzIGlzIGEgc2h1dGRv d24gY2hlY2twb2ludCwgdGhlcmUgY2FuJ3QgYmUgYW55IGNvbmN1cnJlbnQKKwkJICogV0FMIGlu c2VydGlvbi4KKwkJICovCisJCWZyZWVzcGFjZSA9IElOU0VSVF9GUkVFU1BBQ0UoY3VySW5zZXJ0 KTsKKwkJaWYgKGZyZWVzcGFjZSA9PSAwKQorCQl7CisJCQlpZiAoWExvZ1NlZ21lbnRPZmZzZXQo Y3VySW5zZXJ0LCB3YWxfc2VnbWVudF9zaXplKSA9PSAwKQorCQkJCWN1ckluc2VydCArPSBTaXpl T2ZYTG9nTG9uZ1BIRDsKKwkJCWVsc2UKKwkJCQljdXJJbnNlcnQgKz0gU2l6ZU9mWExvZ1Nob3J0 UEhEOworCQl9CisJCWNoZWNrUG9pbnQucmVkbyA9IGN1ckluc2VydDsKKworCQkvKgorCQkgKiBI ZXJlIHdlIHVwZGF0ZSB0aGUgc2hhcmVkIFJlZG9SZWNQdHIgZm9yIGZ1dHVyZSBYTG9nSW5zZXJ0 IGNhbGxzOworCQkgKiB0aGlzIG11c3QgYmUgZG9uZSB3aGlsZSBob2xkaW5nIGFsbCB0aGUgaW5z ZXJ0aW9uIGxvY2tzLgorCQkgKgorCQkgKiBOb3RlOiBpZiB3ZSBmYWlsIHRvIGNvbXBsZXRlIHRo ZSBjaGVja3BvaW50LCBSZWRvUmVjUHRyIHdpbGwgYmUKKwkJICogbGVmdCBwb2ludGluZyBwYXN0 IHdoZXJlIGl0IHJlYWxseSBuZWVkcyB0byBwb2ludC4gIFRoaXMgaXMgb2theTsKKwkJICogdGhl IG9ubHkgY29uc2VxdWVuY2UgaXMgdGhhdCBYTG9nSW5zZXJ0IG1pZ2h0IGJhY2sgdXAgd2hvbGUg YnVmZmVycworCQkgKiB0aGF0IGl0IGRpZG4ndCByZWFsbHkgbmVlZCB0by4gIFdlIGNhbid0IHBv c3Rwb25lIGFkdmFuY2luZworCQkgKiBSZWRvUmVjUHRyIGJlY2F1c2UgWExvZ0luc2VydHMgdGhh dCBoYXBwZW4gd2hpbGUgd2UgYXJlIGR1bXBpbmcKKwkJICogYnVmZmVycyBtdXN0IGFzc3VtZSB0 aGF0IHRoZWlyIGJ1ZmZlciBjaGFuZ2VzIGFyZSBub3QgaW5jbHVkZWQgaW4KKwkJICogdGhlIGNo ZWNrcG9pbnQuCisJCSAqLworCQlSZWRvUmVjUHRyID0gWExvZ0N0bC0+SW5zZXJ0LlJlZG9SZWNQ dHIgPSBjaGVja1BvaW50LnJlZG87CisJfQogCiAJLyoKIAkgKiBOb3cgd2UgY2FuIHJlbGVhc2Ug dGhlIFdBTCBpbnNlcnRpb24gbG9ja3MsIGFsbG93aW5nIG90aGVyIHhhY3RzIHRvCkBAIC02NjQ1 LDYgKzY2OTEsMzMgQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJICovCiAJV0FMSW5z ZXJ0TG9ja1JlbGVhc2UoKTsKIAorCS8qCisJICogSWYgdGhpcyBpcyBhbiBvbmxpbmUgY2hlY2tw b2ludCwgd2UgaGF2ZSBub3QgeWV0IGRldGVybWluZWQgdGhlIHJlZG8KKwkgKiBwb2ludC4gV2Ug ZG8gc28gbm93IGJ5IGluc2VydGluZyB0aGUgc3BlY2lhbCBYTE9HX0NIRUNLUE9JTlRfUkVETwor CSAqIHJlY29yZDsgdGhlIExTTiBhdCB3aGljaCBpdCBzdGFydHMgYmVjb21lcyB0aGUgbmV3IHJl ZG8gcG9pbnRlci4gV2UKKwkgKiBkb24ndCBkbyB0aGlzIGZvciBhIHNodXRkb3duIGNoZWNrcG9p bnQsIGJlY2F1c2UgaW4gdGhhdCBjYXNlIG5vIFdBTAorCSAqIGNhbiBiZSB3cml0dGVuIGJldHdl ZW4gdGhlIHJlZG8gcG9pbnQgYW5kIHRoZSBpbnNlcnRpb24gb2YgdGhlCisJICogY2hlY2twb2lu dCByZWNvcmQgaXRzZWxmLCBzbyB0aGUgY2hlY2twb2ludCByZWNvcmQgaXRzZWxmIHNlcnZlcyB0 bworCSAqIG1hcmsgdGhlIHJlZG8gcG9pbnQuCisJICovCisJaWYgKCFzaHV0ZG93bikKKwl7CisJ CWludAkJCWR1bW15ID0gMDsKKworCQkvKiBSZWNvcmQgbXVzdCBoYXZlIHBheWxvYWQgdG8gYXZv aWQgYXNzZXJ0aW9uIGZhaWx1cmUuICovCisJCVhMb2dCZWdpbkluc2VydCgpOworCQlYTG9nUmVn aXN0ZXJEYXRhKChjaGFyICopICZkdW1teSwgc2l6ZW9mKGR1bW15KSk7CisJCSh2b2lkKSBYTG9n SW5zZXJ0KFJNX1hMT0dfSUQsIFhMT0dfQ0hFQ0tQT0lOVF9SRURPKTsKKworCQkvKgorCQkgKiBY TG9nSW5zZXJ0UmVjb3JkIHdpbGwgaGF2ZSB1cGRhdGVkIFhMb2dDdGwtPkluc2VydC5SZWRvUmVj UHRyIGluCisJCSAqIHNoYXJlZCBtZW1vcnkgYW5kIFJlZG9SZWNQdHIgaW4gYmFja2VuZC1sb2Nh bCBtZW1vcnksIGJ1dCB3ZSBuZWVkCisJCSAqIHRvIGNvcHkgdGhhdCBpbnRvIHRoZSByZWNvcmQg dGhhdCB3aWxsIGJlIGluc2VydGVkIHdoZW4gdGhlCisJCSAqIGNoZWNrcG9pbnQgaXMgY29tcGxl dGUuCisJCSAqLworCQljaGVja1BvaW50LnJlZG8gPSBSZWRvUmVjUHRyOworCX0KKwogCS8qIFVw ZGF0ZSB0aGUgaW5mb19sY2stcHJvdGVjdGVkIGNvcHkgb2YgUmVkb1JlY1B0ciBhcyB3ZWxsICov CiAJU3BpbkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAJWExvZ0N0bC0+UmVkb1Jl Y1B0ciA9IGNoZWNrUG9pbnQucmVkbzsKQEAgLTgxMDUsNiArODE3OCwxMCBAQCB4bG9nX3JlZG8o WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCS8qIEtlZXAgdHJhY2sgb2YgZnVsbF9wYWdlX3dy aXRlcyAqLwogCQlsYXN0RnVsbFBhZ2VXcml0ZXMgPSBmcHc7CiAJfQorCWVsc2UgaWYgKGluZm8g PT0gWExPR19DSEVDS1BPSU5UX1JFRE8pCisJeworCQkvKiBub3RoaW5nIHRvIGRvIGhlcmUsIGp1 c3QgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgKi8KKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IGJlY2MyYmRhNjIuLmQ2ZjJiYjgy ODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC0xNjM4 LDYgKzE2MzgsMTcgQEAgUGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQpCiAJCXJlcGxheVRMSSA9IFJl ZG9TdGFydFRMSTsKIAkJWExvZ1ByZWZldGNoZXJCZWdpblJlYWQoeGxvZ3ByZWZldGNoZXIsIFJl ZG9TdGFydExTTik7CiAJCXJlY29yZCA9IFJlYWRSZWNvcmQoeGxvZ3ByZWZldGNoZXIsIFBBTklD LCBmYWxzZSwgcmVwbGF5VExJKTsKKworCQkvKgorCQkgKiBJZiBhIGNoZWNrcG9pbnQgcmVjb3Jk J3MgcmVkbyBwb2ludGVyIHBvaW50cyBiYWNrIHRvIGFuIGVhcmxpZXIKKwkJICogTFNOLCB0aGUg cmVjb3JkIGF0IHRoYXQgTFNOIHNob3VsZCBiZSBhbiBYTE9HX0NIRUNLUE9JTlRfUkVETworCQkg KiByZWNvcmQuCisJCSAqLworCQlpZiAocmVjb3JkLT54bF9ybWlkICE9IFJNX1hMT0dfSUQgfHwK KwkJCShyZWNvcmQtPnhsX2luZm8gJiB+WExSX0lORk9fTUFTSykgIT0gWExPR19DSEVDS1BPSU5U X1JFRE8pCisJCQllcmVwb3J0KEZBVEFMLAorCQkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIHJlY29y ZCB0eXBlIGZvdW5kIGF0IHJlZG8gcG9pbnQgJVgvJVgiLAorCQkJCQkJCUxTTl9GT1JNQVRfQVJH Uyh4bG9ncmVhZGVyLT5SZWFkUmVjUHRyKSkpKTsKIAl9CiAJZWxzZQogCXsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IDczMDA2MWM5ZGEuLjI0YjcxMmFhNjYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpAQCAtMTkwLDYgKzE5 MCw3IEBAIHhsb2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29y ZEJ1ZmZlciAqYnVmKQogCQljYXNlIFhMT0dfRlBJX0ZPUl9ISU5UOgogCQljYXNlIFhMT0dfRlBJ OgogCQljYXNlIFhMT0dfT1ZFUldSSVRFX0NPTlRSRUNPUkQ6CisJCWNhc2UgWExPR19DSEVDS1BP SU5UX1JFRE86CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmV4cGVj dGVkIFJNX1hMT0dfSUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX2NvbnRyb2wuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29u dHJvbC5oCmluZGV4IGRjOTUzOTc3YzUuLjExMzY2MTMyNTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29u dHJvbC5oCkBAIC03OCw2ICs3OCw3IEBAIHR5cGVkZWYgc3RydWN0IENoZWNrUG9pbnQKICNkZWZp bmUgWExPR19GUEkJCQkJCQkweEIwCiAvKiAweEMwIGlzIHVzZWQgaW4gUG9zdGdyZXMgOS41LTEx ICovCiAjZGVmaW5lIFhMT0dfT1ZFUldSSVRFX0NPTlRSRUNPUkQJCTB4RDAKKyNkZWZpbmUgWExP R19DSEVDS1BPSU5UX1JFRE8JCQkweEUwCiAKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK aW5kZXggZTY5YmI2NzFiZi4uMDZiMjU2MTdiYyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK QEAgLTI5NzEsNiArMjk3MSw3IEBAIFZvbGF0aWxlRnVuY3Rpb25TdGF0dXMKIFZzcnQKIFdBSVRf T1JERVIKIFdBTEF2YWlsYWJpbGl0eQorV2FsSW5zZXJ0Q2xhc3MKIFdBTEluc2VydExvY2sKIFdB TEluc2VydExvY2tQYWRkZWQKIFdBTE9wZW5TZWdtZW50Ci0tIAoyLjM3LjEgKEFwcGxlIEdpdC0x MzcuMSkKCg== --000000000000aaf98b0607fe67b3--