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 1pA8SH-0000yk-BS for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Dec 2022 11:49:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pA8SE-0005bM-U5 for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Dec 2022 11:49:10 +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 1pA8SE-0005bD-FJ for pgsql-hackers@lists.postgresql.org; Tue, 27 Dec 2022 11:49:10 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pA8SB-0005up-R0 for pgsql-hackers@lists.postgresql.org; Tue, 27 Dec 2022 11:49:10 +0000 Received: by mail-lf1-x12e.google.com with SMTP id bt23so2636979lfb.5 for ; Tue, 27 Dec 2022 03:49:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=HJ9wQ5Uh3yriVW4TeqpWmGW771fE04vf7ZxliiQdIoM=; b=J0DABCgP0J5JkO83Fn2EfmsyYLAHNoLobbK5GSjx79r/MzFD6EBIcBUPx7Gq4D0l6h ziz2r3Av10WJ+zOwNeFGOfeEskA888iuDa40B3hJuTw1rd0ASgXZIpSHjoD3faw7gJUp qvvYqnL5IA5PX/axJ0Phfb0NP5bORsYkNlDZTI5OeeeOLGWMpl9ES410IjmDgyCLQOjU JD22B83dB7QsJY9l7t8lMWZYTTgKTrFniRfDeT2rmg/kZQ9J+za2oDFvXxIpdp1xVEwI x5tpuXZoS6OZSD4naZ0Jv4FJ9L5VhiUZ7OIQ+t6fGJm6/SEikWneXxnqWBPKdnOkkaX1 ajkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=HJ9wQ5Uh3yriVW4TeqpWmGW771fE04vf7ZxliiQdIoM=; b=0iJUBe5zkyPcFkxMMI5i7AgZ6u1BCqUiSNH6bZl9JCib5t4oPSzBfepMORX0mRgtym gyq7pt6P160k/DiW8JU7XXmpTWAcPyslgrj85s3PwD16g/p37XHDktBuqwxEj67PDyll a/Ryj20NgbKF7KmNtvb/gVjQJo4WsamU5QWn1PMja44Il7LfxrP5Z6Yp+giAVAnIZ0pz niRtdxcp/wtA2AdhXlt0GMHIsqspvMZsoAJbzpKR+94Wp1gLczMoh6foaEiTdL5HPZSd jyRLk98WZGK5iv7LTRZ2I9BgBQKR5EeIBOt/w23mNdIlfTFpLiXKCKcfAenl8lTSRzsT a5CA== X-Gm-Message-State: AFqh2kpUcW4zDuZICSzNd5EFK88sZAaDFE2uZ0C5X/25+Mm5/JQ76muE 9KQzD6H40gSnQp7Ewpf0zux7xWGBGBa5r7PiUU4OwVpHA34= X-Google-Smtp-Source: AMrXdXuOcCc2pDVVxIM5F7A+Q08F5L4M/htl9yyegUg1SYVBIDd8vBWrOmermjPaDQ7SWH4td3Zkbng2jI9iNKSf2cs= X-Received: by 2002:a19:e04c:0:b0:4a2:4d28:73b9 with SMTP id g12-20020a19e04c000000b004a24d2873b9mr2038489lfj.690.1672141745537; Tue, 27 Dec 2022 03:49:05 -0800 (PST) MIME-Version: 1.0 From: Bharath Rupireddy Date: Tue, 27 Dec 2022 17:18:53 +0530 Message-ID: Subject: Add a new pg_walinspect function to extract FPIs from WAL records To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000c1e0a105f0cdd6c0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c1e0a105f0cdd6c0 Content-Type: text/plain; charset="UTF-8" Hi, Here's a patch that implements the idea of extracting full page images from WAL records [1] [2] with a function in pg_walinspect. This new function accepts start and end lsn and returns full page image info such as WAL record lsn, tablespace oid, database oid, relfile number, block number, fork name and the raw full page (as bytea). I'll register this in the next commitfest. Thoughts? [1] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=d497093cbecccf6df26365e06a5f8f8614b591c8 [2] https://postgr.es/m/CAOxo6XKjQb2bMSBRpePf3ZpzfNTwjQUc4Tafh21=jzjX6bX8CA@mail.gmail.com -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --000000000000c1e0a105f0cdd6c0 Content-Type: application/octet-stream; name="v1-0001-Add-FPI-extract-function-to-pg_walinspect.patch" Content-Disposition: attachment; filename="v1-0001-Add-FPI-extract-function-to-pg_walinspect.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lc659ed90 RnJvbSBmODBkOTU3ZTVmOGI5NWM0MzRjYjE4ZjRhYjljMGI3ZDMxYWM2MDZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjcgRGVjIDIwMjIgMTE6MTY6NDkgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxXSBBZGQgRlBJIGV4dHJhY3QgZnVuY3Rpb24gdG8gcGdfd2Fs aW5zcGVjdAoKLS0tCiBjb250cmliL3BnX3dhbGluc3BlY3QvTWFrZWZpbGUgICAgICAgICAgICAg ICAgfCAgIDIgKy0KIC4uLi9wZ193YWxpbnNwZWN0L2V4cGVjdGVkL3BnX3dhbGluc3BlY3Qub3V0 ICB8ICA0NiArKysrKysrKwogY29udHJpYi9wZ193YWxpbnNwZWN0L21lc29uLmJ1aWxkICAgICAg ICAgICAgIHwgICAxICsKIC4uLi9wZ193YWxpbnNwZWN0L3BnX3dhbGluc3BlY3QtLTEuMC0tMS4x LnNxbCB8ICAyNCArKysrCiBjb250cmliL3BnX3dhbGluc3BlY3QvcGdfd2FsaW5zcGVjdC5jICAg ICAgICAgfCAxMDkgKysrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3dhbGluc3BlY3QvcGdf d2FsaW5zcGVjdC5jb250cm9sICAgfCAgIDIgKy0KIGNvbnRyaWIvcGdfd2FsaW5zcGVjdC9zcWwv cGdfd2FsaW5zcGVjdC5zcWwgICB8ICAzMiArKysrKwogZG9jL3NyYy9zZ21sL3Bnd2FsaW5zcGVj dC5zZ21sICAgICAgICAgICAgICAgIHwgIDQ4ICsrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDI2 MiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfd2FsaW5zcGVjdC9wZ193YWxpbnNwZWN0LS0xLjAtLTEuMS5zcWwKCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3dhbGluc3BlY3QvTWFrZWZpbGUgYi9jb250cmliL3BnX3dhbGluc3BlY3Qv TWFrZWZpbGUKaW5kZXggOTYwNTMwZWI2Yy4uNzAzMzg3OGE3OSAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ193YWxpbnNwZWN0L01ha2VmaWxlCisrKyBiL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9NYWtl ZmlsZQpAQCAtNyw3ICs3LDcgQEAgT0JKUyA9IFwKIFBHRklMRURFU0MgPSAicGdfd2FsaW5zcGVj dCAtIGZ1bmN0aW9ucyB0byBpbnNwZWN0IGNvbnRlbnRzIG9mIFBvc3RncmVTUUwgV3JpdGUtQWhl YWQgTG9nIgogCiBFWFRFTlNJT04gPSBwZ193YWxpbnNwZWN0Ci1EQVRBID0gcGdfd2FsaW5zcGVj dC0tMS4wLnNxbAorREFUQSA9IHBnX3dhbGluc3BlY3QtLTEuMC5zcWwgcGdfd2FsaW5zcGVjdC0t MS4wLS0xLjEuc3FsCiAKIFJFR1JFU1MgPSBwZ193YWxpbnNwZWN0CiAKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfd2FsaW5zcGVjdC9leHBlY3RlZC9wZ193YWxpbnNwZWN0Lm91dCBiL2NvbnRyaWIv cGdfd2FsaW5zcGVjdC9leHBlY3RlZC9wZ193YWxpbnNwZWN0Lm91dAppbmRleCBhMWVlNzQzNDU3 Li41Y2QyODQwMmFkIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3dhbGluc3BlY3QvZXhwZWN0ZWQv cGdfd2FsaW5zcGVjdC5vdXQKKysrIGIvY29udHJpYi9wZ193YWxpbnNwZWN0L2V4cGVjdGVkL3Bn X3dhbGluc3BlY3Qub3V0CkBAIC03Myw2ICs3MywyNyBAQCBTRUxFQ1QgQ09VTlQoKikgPj0gMSBB UyBvayBGUk9NIHBnX2dldF93YWxfcmVjb3Jkc19pbmZvKDond2FsX2xzbjEnLCA6J3dhbF9sc24y JwogIHQKICgxIHJvdykKIAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdHMgZm9yIGdldHRpbmcgZnVs bCBwYWdlIGltYWdlcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigp IEFTIHdhbF9sc24zIFxnc2V0CistLSBGb3JjZSBGUFdzIG9uIHRoZSBuZXh0IHdyaXRlcy4KK0NI RUNLUE9JTlQ7CitVUERBVEUgc2FtcGxlX3RibCBTRVQgY29sMSA9IGNvbDEgKyAxOworU0VMRUNU IDEgRlJPTSBwZ19zd2l0Y2hfd2FsKCk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgICAgICAg IDEKKygxIHJvdykKKworU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIEFTIHdhbF9sc240IFxn c2V0CitTRUxFQ1QgQ09VTlQoKikgPj0gMSBBUyBvayBGUk9NIHBnX2dldF93YWxfZnBpX2luZm8o Oid3YWxfbHNuMycsIDond2FsX2xzbjQnKQorICBXSEVSRSByZWxmaWxlX251bWJlciA9IDonc2Ft cGxlX3RibF9vaWQnOworIG9rIAorLS0tLQorIHQKKygxIHJvdykKKwogLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQog LS0gVGVzdHMgZm9yIHBlcm1pc3Npb25zCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC05OCw2ICsxMTksMTMg QEAgU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfcGdfd2FsaW5zcGVjdCcs CiAgZgogKDEgcm93KQogCitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19w Z193YWxpbnNwZWN0JywKKyAgJ3BnX2dldF93YWxfZnBpX2luZm8ocGdfbHNuLCBwZ19sc24pICcs ICdFWEVDVVRFJyk7IC0tIG5vCisgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKwogLS0gRnVuY3Rpb25zIGFjY2Vzc2libGUgYnkg dXNlcnMgd2l0aCByb2xlIHBnX3JlYWRfc2VydmVyX2ZpbGVzCiBHUkFOVCBwZ19yZWFkX3NlcnZl cl9maWxlcyBUTyByZWdyZXNzX3BnX3dhbGluc3BlY3Q7CiBTRUxFQ1QgaGFzX2Z1bmN0aW9uX3By aXZpbGVnZSgncmVncmVzc19wZ193YWxpbnNwZWN0JywKQEAgLTEyMSw2ICsxNDksMTMgQEAgU0VM RUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfcGdfd2FsaW5zcGVjdCcsCiAgdAog KDEgcm93KQogCitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19wZ193YWxp bnNwZWN0JywKKyAgJ3BnX2dldF93YWxfZnBpX2luZm8ocGdfbHNuLCBwZ19sc24pICcsICdFWEVD VVRFJyk7IC0tIHllcworIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyB0CisoMSByb3cpCisKIFJFVk9LRSBwZ19yZWFkX3NlcnZlcl9maWxlcyBGUk9N IHJlZ3Jlc3NfcGdfd2FsaW5zcGVjdDsKIC0tIFN1cGVydXNlciBjYW4gZ3JhbnQgZXhlY3V0ZSB0 byBvdGhlciB1c2VycwogR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19nZXRfd2FsX3JlY29y ZF9pbmZvKHBnX2xzbikKQEAgLTEyOSw2ICsxNjQsOCBAQCBHUkFOVCBFWEVDVVRFIE9OIEZVTkNU SU9OIHBnX2dldF93YWxfcmVjb3Jkc19pbmZvKHBnX2xzbiwgcGdfbHNuKQogICBUTyByZWdyZXNz X3BnX3dhbGluc3BlY3Q7CiBHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF93YWxfc3Rh dHMocGdfbHNuLCBwZ19sc24sIGJvb2xlYW4pCiAgIFRPIHJlZ3Jlc3NfcGdfd2FsaW5zcGVjdDsK K0dSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X3dhbF9mcGlfaW5mbyhwZ19sc24sIHBn X2xzbikKKyAgVE8gcmVncmVzc19wZ193YWxpbnNwZWN0OwogU0VMRUNUIGhhc19mdW5jdGlvbl9w cml2aWxlZ2UoJ3JlZ3Jlc3NfcGdfd2FsaW5zcGVjdCcsCiAgICdwZ19nZXRfd2FsX3JlY29yZF9p bmZvKHBnX2xzbiknLCAnRVhFQ1VURScpOyAtLSB5ZXMKICBoYXNfZnVuY3Rpb25fcHJpdmlsZWdl IApAQCAtMTUwLDEyICsxODcsMjEgQEAgU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3Jl Z3Jlc3NfcGdfd2FsaW5zcGVjdCcsCiAgdAogKDEgcm93KQogCitTRUxFQ1QgaGFzX2Z1bmN0aW9u X3ByaXZpbGVnZSgncmVncmVzc19wZ193YWxpbnNwZWN0JywKKyAgJ3BnX2dldF93YWxfZnBpX2lu Zm8ocGdfbHNuLCBwZ19sc24pICcsICdFWEVDVVRFJyk7IC0tIHllcworIGhhc19mdW5jdGlvbl9w cml2aWxlZ2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKIFJFVk9L RSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF93YWxfcmVjb3JkX2luZm8ocGdfbHNuKQogICBG Uk9NIHJlZ3Jlc3NfcGdfd2FsaW5zcGVjdDsKIFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBn X2dldF93YWxfcmVjb3Jkc19pbmZvKHBnX2xzbiwgcGdfbHNuKQogICBGUk9NIHJlZ3Jlc3NfcGdf d2FsaW5zcGVjdDsKIFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF93YWxfc3RhdHMo cGdfbHNuLCBwZ19sc24sIGJvb2xlYW4pCiAgIEZST00gcmVncmVzc19wZ193YWxpbnNwZWN0Owor UkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X3dhbF9mcGlfaW5mbyhwZ19sc24sIHBn X2xzbikKKyAgRlJPTSByZWdyZXNzX3BnX3dhbGluc3BlY3Q7CiAtLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSBD bGVhbiB1cAogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ193YWxpbnNwZWN0 L21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ193YWxpbnNwZWN0L21lc29uLmJ1aWxkCmluZGV4IDc5 MTdlMDM1NTcuLjZhYjk3ZDM2NzIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9t ZXNvbi5idWlsZAorKysgYi9jb250cmliL3BnX3dhbGluc3BlY3QvbWVzb24uYnVpbGQKQEAgLTE5 LDYgKzE5LDcgQEAgY29udHJpYl90YXJnZXRzICs9IHBnX3dhbGluc3BlY3QKIGluc3RhbGxfZGF0 YSgKICAgJ3BnX3dhbGluc3BlY3QuY29udHJvbCcsCiAgICdwZ193YWxpbnNwZWN0LS0xLjAuc3Fs JywKKyAgJ3BnX3dhbGluc3BlY3QtLTEuMC0tMS4xLnNxbCcsCiAgIGt3YXJnczogY29udHJpYl9k YXRhX2FyZ3MsCiApCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9wZ193YWxp bnNwZWN0LS0xLjAtLTEuMS5zcWwgYi9jb250cmliL3BnX3dhbGluc3BlY3QvcGdfd2FsaW5zcGVj dC0tMS4wLS0xLjEuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRm ZmJkOTE3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3dhbGluc3BlY3QvcGdfd2Fs aW5zcGVjdC0tMS4wLS0xLjEuc3FsCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGNvbnRyaWIvcGdfd2Fs aW5zcGVjdC9wZ193YWxpbnNwZWN0LS0xLjAtLTEuMS5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYg c2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIEFMVEVSIEVYVEVOU0lP TgorXGVjaG8gVXNlICJBTFRFUiBFWFRFTlNJT04gcGdfd2FsaW5zcGVjdCBVUERBVEUgVE8gJzEu MSciIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCistLQorLS0gcGdfZ2V0X3dhbF9mcGlfaW5m bygpCistLQorQ1JFQVRFIEZVTkNUSU9OIHBnX2dldF93YWxfZnBpX2luZm8oSU4gc3RhcnRfbHNu IHBnX2xzbiwKKyAgICBJTiBlbmRfbHNuIHBnX2xzbiwKKyAgICBPVVQgbHNuIHBnX2xzbiwKKwlP VVQgdGFibGVzcGFjZV9vaWQgb2lkLAorCU9VVCBkYXRhYmFzZV9vaWQgb2lkLAorCU9VVCByZWxm aWxlX251bWJlciBvaWQsCisJT1VUIGJsb2NrX251bWJlciBpbnQ4LAorCU9VVCBmb3JrX25hbWUg dGV4dCwKKwlPVVQgZnBpIGJ5dGVhCispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVM RV9QQVRITkFNRScsICdwZ19nZXRfd2FsX2ZwaV9pbmZvJworTEFOR1VBR0UgQyBTVFJJQ1QgUEFS QUxMRUwgU0FGRTsKKworUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X3dhbF9mcGlf aW5mbyhwZ19sc24sIHBnX2xzbikgRlJPTSBQVUJMSUM7CitHUkFOVCBFWEVDVVRFIE9OIEZVTkNU SU9OIHBnX2dldF93YWxfZnBpX2luZm8ocGdfbHNuLCBwZ19sc24pIFRPIHBnX3JlYWRfc2VydmVy X2ZpbGVzOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ193YWxpbnNwZWN0L3BnX3dhbGluc3BlY3Qu YyBiL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9wZ193YWxpbnNwZWN0LmMKaW5kZXggYmViYTQ3ODhj Ny4uMDJmZWU5ZTJhYiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ193YWxpbnNwZWN0L3BnX3dhbGlu c3BlY3QuYworKysgYi9jb250cmliL3BnX3dhbGluc3BlY3QvcGdfd2FsaW5zcGVjdC5jCkBAIC0z NSw2ICszNSw3IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X3dhbF9yZWNvcmRzX2luZm8p OwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfd2FsX3JlY29yZHNfaW5mb190aWxsX2VuZF9v Zl93YWwpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfd2FsX3N0YXRzKTsKIFBHX0ZVTkNU SU9OX0lORk9fVjEocGdfZ2V0X3dhbF9zdGF0c190aWxsX2VuZF9vZl93YWwpOworUEdfRlVOQ1RJ T05fSU5GT19WMShwZ19nZXRfd2FsX2ZwaV9pbmZvKTsKIAogc3RhdGljIGJvb2wgSXNGdXR1cmVM U04oWExvZ1JlY1B0ciBsc24sIFhMb2dSZWNQdHIgKmN1cnJfbHNuKTsKIHN0YXRpYyBYTG9nUmVh ZGVyU3RhdGUgKkluaXRYTG9nUmVhZGVyU3RhdGUoWExvZ1JlY1B0ciBsc24pOwpAQCAtNTUsNiAr NTYsNyBAQCBzdGF0aWMgdm9pZCBGaWxsWExvZ1N0YXRzUm93KGNvbnN0IGNoYXIgKm5hbWUsIHVp bnQ2NCBuLCB1aW50NjQgdG90YWxfY291bnQsCiAJCQkJCQkJIERhdHVtICp2YWx1ZXMsIGJvb2wg Km51bGxzLCB1aW50MzIgbmNvbHMpOwogc3RhdGljIHZvaWQgR2V0V2FsU3RhdHMoRnVuY3Rpb25D YWxsSW5mbyBmY2luZm8sIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAogCQkJCQkJWExvZ1JlY1B0ciBl bmRfbHNuLCBib29sIHN0YXRzX3Blcl9yZWNvcmQpOworc3RhdGljIHZvaWQgR2V0V0FMRlBJSW5m byhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwogCiAv KgogICogQ2hlY2sgaWYgdGhlIGdpdmVuIExTTiBpcyBpbiBmdXR1cmUuIEFsc28sIHJldHVybiB0 aGUgTFNOIHVwIHRvIHdoaWNoIHRoZQpAQCAtNjE2LDMgKzYxOCwxMTAgQEAgcGdfZ2V0X3dhbF9z dGF0c190aWxsX2VuZF9vZl93YWwoUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9WT0lE KCk7CiB9CisKKy8qCisgKiBHZXQgZnVsbCBwYWdlIGltYWdlcyBhbmQgdGhlaXIgaW5mbyBhc3Nv Y2lhdGVkIHdpdGggYSBnaXZlbiBXQUwgcmVjb3JkLgorICovCitzdGF0aWMgdm9pZAorR2V0V0FM RlBJSW5mbyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQp Cit7CisjZGVmaW5lIFBHX0dFVF9XQUxfRlBJX0lORk9fQ09MUyA3CisJaW50CQkJYmxvY2tfaWQ7 CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1 bHRpbmZvOworCisJZm9yIChibG9ja19pZCA9IDA7IGJsb2NrX2lkIDw9IFhMb2dSZWNNYXhCbG9j a0lkKHJlY29yZCk7IGJsb2NrX2lkKyspCisJeworCQlQR0FsaWduZWRCbG9jayBidWY7CisJCVBh Z2UJCXBhZ2U7CisJCWJ5dGVhCSAgICpyYXdfcGFnZTsKKwkJQmxvY2tOdW1iZXIgYmxrOworCQlS ZWxGaWxlTG9jYXRvciBybm9kZTsKKwkJRm9ya051bWJlcglmb3JrOworCQlEYXR1bQkJdmFsdWVz W1BHX0dFVF9XQUxfRlBJX0lORk9fQ09MU10gPSB7MH07CisJCWJvb2wJCW51bGxzW1BHX0dFVF9X QUxfRlBJX0lORk9fQ09MU10gPSB7MH07CisJCWludAkJCWkgPSAwOworCisJCWlmICghWExvZ1Jl Y0hhc0Jsb2NrUmVmKHJlY29yZCwgYmxvY2tfaWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFY TG9nUmVjSGFzQmxvY2tJbWFnZShyZWNvcmQsIGJsb2NrX2lkKSkKKwkJCWNvbnRpbnVlOworCisJ CXBhZ2UgPSAoUGFnZSkgYnVmLmRhdGE7CisKKwkJLyogRnVsbCBwYWdlIGV4aXN0cywgc28gbGV0 J3Mgb3V0cHV0IGl0LiAqLworCQlpZiAoIVJlc3RvcmVCbG9ja0ltYWdlKHJlY29yZCwgYmxvY2tf aWQsIHBhZ2UpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRF Uk5BTF9FUlJPUiksCisJCQkJCSBlcnJtc2dfaW50ZXJuYWwoIiVzIiwgcmVjb3JkLT5lcnJvcm1z Z19idWYpKSk7CisKKwkJKHZvaWQpIFhMb2dSZWNHZXRCbG9ja1RhZ0V4dGVuZGVkKHJlY29yZCwg YmxvY2tfaWQsCisJCQkJCQkJCQkJICAmcm5vZGUsICZmb3JrLCAmYmxrLCBOVUxMKTsKKworCQl2 YWx1ZXNbaSsrXSA9IExTTkdldERhdHVtKHJlY29yZC0+UmVhZFJlY1B0cik7CisJCXZhbHVlc1tp KytdID0gT2JqZWN0SWRHZXREYXR1bShybm9kZS5zcGNPaWQpOworCQl2YWx1ZXNbaSsrXSA9IE9i amVjdElkR2V0RGF0dW0ocm5vZGUuZGJPaWQpOworCQl2YWx1ZXNbaSsrXSA9IE9iamVjdElkR2V0 RGF0dW0ocm5vZGUucmVsTnVtYmVyKTsKKwkJdmFsdWVzW2krK10gPSBJbnQ2NEdldERhdHVtKChp bnQ2NCkgYmxrKTsKKworCQlpZiAoZm9yayA+PSAwICYmIGZvcmsgPD0gTUFYX0ZPUktOVU0pCisJ CQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oZm9ya05hbWVzW2ZvcmtdKTsKKwkJ ZWxzZQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9F UlJPUiksCisJCQkJCSBlcnJtc2dfaW50ZXJuYWwoImludmFsaWQgZm9yayBudW1iZXI6ICV1Iiwg Zm9yaykpKTsKKworCQkvKiBJbml0aWFsaXplIGJ5dGVhIGJ1ZmZlciB0byBjb3B5IHRoZSBGUEkg dG8uICovCisJCXJhd19wYWdlID0gKGJ5dGVhICopIHBhbGxvYyhCTENLU1ogKyBWQVJIRFJTWik7 CisJCVNFVF9WQVJTSVpFKHJhd19wYWdlLCBCTENLU1ogKyBWQVJIRFJTWik7CisKKwkJLyogVGFr ZSBhIHZlcmJhdGltIGNvcHkgb2YgdGhlIEZQSS4gKi8KKwkJbWVtY3B5KFZBUkRBVEEocmF3X3Bh Z2UpLCBwYWdlLCBCTENLU1opOworCisJCXZhbHVlc1tpKytdID0gUG9pbnRlckdldERhdHVtKHJh d19wYWdlKTsKKworCQlBc3NlcnQoaSA9PSBQR19HRVRfV0FMX0ZQSV9JTkZPX0NPTFMpOworCisJ CXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2Ms CisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworI3VuZGVmIFBHX0dFVF9XQUxfRlBJX0lO Rk9fQ09MUworfQorCisvKgorICogR2V0IGZ1bGwgcGFnZSBpbWFnZXMgYW5kIHRoZWlyIGluZm8g b2YgYWxsIFdBTCByZWNvcmRzIGJldHdlZW4gc3RhcnQgTFNOIGFuZAorICogZW5kIExTTi4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIGVtaXRzIGFuIGVycm9yIGlmIGEgZnV0dXJlIHN0YXJ0IG9yIGVu ZCBXQUwgTFNOIGkuZS4gV0FMIExTTgorICogdGhlIGRhdGFiYXNlIHN5c3RlbSBkb2Vzbid0IGtu b3cgYWJvdXQgaXMgc3BlY2lmaWVkLgorICovCitEYXR1bQorcGdfZ2V0X3dhbF9mcGlfaW5mbyhQ R19GVU5DVElPTl9BUkdTKQoreworCVhMb2dSZWNQdHIJc3RhcnRfbHNuOworCVhMb2dSZWNQdHIJ ZW5kX2xzbjsKKwlYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXI7CisKKwlzdGFydF9sc24gPSBQ R19HRVRBUkdfTFNOKDApOworCWVuZF9sc24gPSBQR19HRVRBUkdfTFNOKDEpOworCisJZW5kX2xz biA9IFZhbGlkYXRlSW5wdXRMU05zKGZhbHNlLCBzdGFydF9sc24sIGVuZF9sc24pOworCisJSW5p dE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJeGxvZ3JlYWRlciA9IEluaXRYTG9nUmVh ZGVyU3RhdGUoc3RhcnRfbHNuKTsKKworCXdoaWxlIChSZWFkTmV4dFhMb2dSZWNvcmQoeGxvZ3Jl YWRlcikgJiYKKwkJICAgeGxvZ3JlYWRlci0+RW5kUmVjUHRyIDw9IGVuZF9sc24pCisJeworCQlH ZXRXQUxGUElJbmZvKGZjaW5mbywgeGxvZ3JlYWRlcik7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKKwl9CisKKwlwZnJlZSh4bG9ncmVhZGVyLT5wcml2YXRlX2RhdGEpOworCVhMb2dSZWFk ZXJGcmVlKHhsb2dyZWFkZXIpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9wZ193YWxpbnNwZWN0LmNvbnRyb2wgYi9jb250cmliL3Bn X3dhbGluc3BlY3QvcGdfd2FsaW5zcGVjdC5jb250cm9sCmluZGV4IDAxN2U1NmEyYmIuLmVmYTNj YjJjZmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9wZ193YWxpbnNwZWN0LmNv bnRyb2wKKysrIGIvY29udHJpYi9wZ193YWxpbnNwZWN0L3BnX3dhbGluc3BlY3QuY29udHJvbApA QCAtMSw1ICsxLDUgQEAKICMgcGdfd2FsaW5zcGVjdCBleHRlbnNpb24KIGNvbW1lbnQgPSAnZnVu Y3Rpb25zIHRvIGluc3BlY3QgY29udGVudHMgb2YgUG9zdGdyZVNRTCBXcml0ZS1BaGVhZCBMb2cn Ci1kZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMScKIG1vZHVs ZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX3dhbGluc3BlY3QnCiByZWxvY2F0YWJsZSA9IHRydWUK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9zcWwvcGdfd2FsaW5zcGVjdC5zcWwg Yi9jb250cmliL3BnX3dhbGluc3BlY3Qvc3FsL3BnX3dhbGluc3BlY3Quc3FsCmluZGV4IDFiMjY1 ZWE3YmMuLjI1ZjcwN2RlNDQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9zcWwv cGdfd2FsaW5zcGVjdC5zcWwKKysrIGIvY29udHJpYi9wZ193YWxpbnNwZWN0L3NxbC9wZ193YWxp bnNwZWN0LnNxbApAQCAtNTIsNiArNTIsMjMgQEAgU0VMRUNUIENPVU5UKCopID49IDEgQVMgb2sg RlJPTSBwZ19nZXRfd2FsX3JlY29yZHNfaW5mbyg6J3dhbF9sc24xJywgOid3YWxfbHNuMicKIFNF TEVDVCBDT1VOVCgqKSA+PSAxIEFTIG9rIEZST00gcGdfZ2V0X3dhbF9yZWNvcmRzX2luZm8oOid3 YWxfbHNuMScsIDond2FsX2xzbjInKQogCQkJV0hFUkUgcmVzb3VyY2VfbWFuYWdlciA9ICdIZWFw JyBBTkQgcmVjb3JkX3R5cGUgPSAnSU5TRVJUJzsKIAorLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdHMg Zm9yIGdldHRpbmcgZnVsbCBwYWdlIGltYWdlcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU0VMRUNUIHBnX2N1 cnJlbnRfd2FsX2xzbigpIEFTIHdhbF9sc24zIFxnc2V0CisKKy0tIEZvcmNlIEZQV3Mgb24gdGhl IG5leHQgd3JpdGVzLgorQ0hFQ0tQT0lOVDsKKworVVBEQVRFIHNhbXBsZV90YmwgU0VUIGNvbDEg PSBjb2wxICsgMTsKKworU0VMRUNUIDEgRlJPTSBwZ19zd2l0Y2hfd2FsKCk7CisKK1NFTEVDVCBw Z19jdXJyZW50X3dhbF9sc24oKSBBUyB3YWxfbHNuNCBcZ3NldAorCitTRUxFQ1QgQ09VTlQoKikg Pj0gMSBBUyBvayBGUk9NIHBnX2dldF93YWxfZnBpX2luZm8oOid3YWxfbHNuMycsIDond2FsX2xz bjQnKQorICBXSEVSRSByZWxmaWxlX251bWJlciA9IDonc2FtcGxlX3RibF9vaWQnOworCiAtLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CiAtLSBUZXN0cyBmb3IgcGVybWlzc2lvbnMKIC0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTY2 LDYgKzgzLDkgQEAgU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfcGdfd2Fs aW5zcGVjdCcsCiBTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19wZ193YWxp bnNwZWN0JywKICAgJ3BnX2dldF93YWxfc3RhdHMocGdfbHNuLCBwZ19sc24sIGJvb2xlYW4pICcs ICdFWEVDVVRFJyk7IC0tIG5vCiAKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdy ZXNzX3BnX3dhbGluc3BlY3QnLAorICAncGdfZ2V0X3dhbF9mcGlfaW5mbyhwZ19sc24sIHBnX2xz bikgJywgJ0VYRUNVVEUnKTsgLS0gbm8KKwogLS0gRnVuY3Rpb25zIGFjY2Vzc2libGUgYnkgdXNl cnMgd2l0aCByb2xlIHBnX3JlYWRfc2VydmVyX2ZpbGVzCiAKIEdSQU5UIHBnX3JlYWRfc2VydmVy X2ZpbGVzIFRPIHJlZ3Jlc3NfcGdfd2FsaW5zcGVjdDsKQEAgLTc5LDYgKzk5LDkgQEAgU0VMRUNU IGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfcGdfd2FsaW5zcGVjdCcsCiBTRUxFQ1Qg aGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19wZ193YWxpbnNwZWN0JywKICAgJ3BnX2dl dF93YWxfc3RhdHMocGdfbHNuLCBwZ19sc24sIGJvb2xlYW4pICcsICdFWEVDVVRFJyk7IC0tIHll cwogCitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19wZ193YWxpbnNwZWN0 JywKKyAgJ3BnX2dldF93YWxfZnBpX2luZm8ocGdfbHNuLCBwZ19sc24pICcsICdFWEVDVVRFJyk7 IC0tIHllcworCiBSRVZPS0UgcGdfcmVhZF9zZXJ2ZXJfZmlsZXMgRlJPTSByZWdyZXNzX3BnX3dh bGluc3BlY3Q7CiAKIC0tIFN1cGVydXNlciBjYW4gZ3JhbnQgZXhlY3V0ZSB0byBvdGhlciB1c2Vy cwpAQCAtOTEsNiArMTE0LDkgQEAgR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19nZXRfd2Fs X3JlY29yZHNfaW5mbyhwZ19sc24sIHBnX2xzbikKIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04g cGdfZ2V0X3dhbF9zdGF0cyhwZ19sc24sIHBnX2xzbiwgYm9vbGVhbikKICAgVE8gcmVncmVzc19w Z193YWxpbnNwZWN0OwogCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF93YWxfZnBp X2luZm8ocGdfbHNuLCBwZ19sc24pCisgIFRPIHJlZ3Jlc3NfcGdfd2FsaW5zcGVjdDsKKwogU0VM RUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfcGdfd2FsaW5zcGVjdCcsCiAgICdw Z19nZXRfd2FsX3JlY29yZF9pbmZvKHBnX2xzbiknLCAnRVhFQ1VURScpOyAtLSB5ZXMKIApAQCAt MTAwLDYgKzEyNiw5IEBAIFNFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX3Bn X3dhbGluc3BlY3QnLAogU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfcGdf d2FsaW5zcGVjdCcsCiAgICdwZ19nZXRfd2FsX3N0YXRzKHBnX2xzbiwgcGdfbHNuLCBib29sZWFu KSAnLCAnRVhFQ1VURScpOyAtLSB5ZXMKIAorU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2Uo J3JlZ3Jlc3NfcGdfd2FsaW5zcGVjdCcsCisgICdwZ19nZXRfd2FsX2ZwaV9pbmZvKHBnX2xzbiwg cGdfbHNuKSAnLCAnRVhFQ1VURScpOyAtLSB5ZXMKKwogUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJ T04gcGdfZ2V0X3dhbF9yZWNvcmRfaW5mbyhwZ19sc24pCiAgIEZST00gcmVncmVzc19wZ193YWxp bnNwZWN0OwogCkBAIC0xMDksNiArMTM4LDkgQEAgUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04g cGdfZ2V0X3dhbF9yZWNvcmRzX2luZm8ocGdfbHNuLCBwZ19sc24pCiBSRVZPS0UgRVhFQ1VURSBP TiBGVU5DVElPTiBwZ19nZXRfd2FsX3N0YXRzKHBnX2xzbiwgcGdfbHNuLCBib29sZWFuKQogICBG Uk9NIHJlZ3Jlc3NfcGdfd2FsaW5zcGVjdDsKIAorUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04g cGdfZ2V0X3dhbF9mcGlfaW5mbyhwZ19sc24sIHBnX2xzbikKKyAgRlJPTSByZWdyZXNzX3BnX3dh bGluc3BlY3Q7CisKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIENsZWFuIHVwCiAtLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGd3YWxpbnNwZWN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwv cGd3YWxpbnNwZWN0LnNnbWwKaW5kZXggMWExYmVlN2Q2YS4uOTgyMDhjMmRlYiAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3Bnd2FsaW5zcGVjdC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3dh bGluc3BlY3Quc2dtbApAQCAtMjYxLDYgKzI2MSw1NCBAQCBwb3N0Z3Jlcz0jIHNlbGVjdCAqIGZy b20gcGdfZ2V0X3dhbF9zdGF0cygnMC8xNEFGQzMwJywgJzAvMTUwMTFENycsIHRydWUpIHdoZXJl CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFybGlzdGVudHJ5 PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+CisgICAgICBwZ19nZXRfd2FsX2ZwaV9pbmZv KHN0YXJ0X2xzbiBwZ19sc24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9sc24gcGdf bHNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsc24gT1VUIHBnX2xzbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgdGFibGVzcGFjZV9vaWQgT1VUIG9pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YWJhc2Vfb2lkIE9VVCBvaWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlbGZpbGVfbnVtYmVyIE9VVCBvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJs b2NrX251bWJlciBPVVQgaW50OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ya19uYW1l IE9VVCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBmcGkgT1VUIGJ5dGVhKQorICAg ICAgcmV0dXJucyBzZXRvZiByZWNvcmQKKyAgICAgPC9mdW5jdGlvbj4KKyAgICA8L3Rlcm0+CisK KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgR2V0cyByYXcgZnVsbCBwYWdlIGlt YWdlcyBhbmQgdGhlaXIgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFsbCB0aGUKKyAgICAg IHZhbGlkIFdBTCByZWNvcmRzIGJldHdlZW4gPHJlcGxhY2VhYmxlPnN0YXJ0X2xzbjwvcmVwbGFj ZWFibGU+IGFuZAorICAgICAgPHJlcGxhY2VhYmxlPmVuZF9sc248L3JlcGxhY2VhYmxlPi4gUmV0 dXJucyBvbmUgcm93IHBlciBmdWxsIHBhZ2UgaW1hZ2UuCisgICAgICBJZiA8cmVwbGFjZWFibGU+ c3RhcnRfbHNuPC9yZXBsYWNlYWJsZT4gb3IKKyAgICAgIDxyZXBsYWNlYWJsZT5lbmRfbHNuPC9y ZXBsYWNlYWJsZT4gYXJlIG5vdCB5ZXQgYXZhaWxhYmxlLCB0aGUgZnVuY3Rpb24KKyAgICAgIHdp bGwgcmFpc2UgYW4gZXJyb3IuIEZvciBleGFtcGxlLCB1c2FnZSBvZiB0aGUgZnVuY3Rpb24gaXMg YXMgZm9sbG93czoKKzxzY3JlZW4+Citwb3N0Z3Jlcz0jIFNFTEVDVCBsc24sIHRhYmxlc3BhY2Vf b2lkLCBkYXRhYmFzZV9vaWQsIHJlbGZpbGVfbnVtYmVyLCBibG9ja19udW1iZXIsIGZvcmtfbmFt ZSwgbGVuZ3RoKGZwaSkgPiAwIGFzIGZwaV9vayBGUk9NIHBnX2dldF93YWxfZnBpX2luZm8oJzAv NzQxOEU2MCcsICcwLzc1MTgyMTgnKTsKKyAgICBsc24gICAgfCB0YWJsZXNwYWNlX29pZCB8IGRh dGFiYXNlX29pZCB8IHJlbGZpbGVfbnVtYmVyIHwgYmxvY2tfbnVtYmVyIHwgZm9ya19uYW1lIHwg ZnBpX29rCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAwLzc0MThG NDggfCAgICAgICAgICAgMTY2MyB8ICAgICAgICAgICAgNSB8ICAgICAgICAgIDE2NDE5IHwgICAg ICAgICAgICAwIHwgbWFpbiAgICAgIHwgdAorIDAvNzQxOTA4MCB8ICAgICAgICAgICAxNjYzIHwg ICAgICAgICAgICA1IHwgICAgICAgICAgMTY0MjIgfCAgICAgICAgICAgMTkgfCBtYWluICAgICAg fCB0CisgMC83NDFCMEI4IHwgICAgICAgICAgIDE2NjMgfCAgICAgICAgICAgIDUgfCAgICAgICAg ICAxNjQyMiB8ICAgICAgICAgICAyMiB8IG1haW4gICAgICB8IHQKKyAwLzc0MUJGNDggfCAgICAg ICAgICAgMTY2MyB8ICAgICAgICAgICAgNSB8ICAgICAgICAgIDE2NDIyIHwgICAgICAgICAgIDIw IHwgbWFpbiAgICAgIHwgdAorIDAvNzQyNTdCOCB8ICAgICAgICAgICAxNjYzIHwgICAgICAgICAg ICA1IHwgICAgICAgICAgMTY0MjIgfCAgICAgICAgICAgMjEgfCBtYWluICAgICAgfCB0CisgMC83 NDJGRjMwIHwgICAgICAgICAgIDE2NjMgfCAgICAgICAgICAgIDUgfCAgICAgICAgICAxNjQyNSB8 ICAgICAgICAgICA0MiB8IG1haW4gICAgICB8IHQKKyAwLzc0MzFGNjggfCAgICAgICAgICAgMTY2 MyB8ICAgICAgICAgICAgNSB8ICAgICAgICAgIDE2NDI1IHwgICAgICAgICAgIDQ0IHwgbWFpbiAg ICAgIHwgdAorIDAvNzQzOUI3OCB8ICAgICAgICAgICAxNjYzIHwgICAgICAgICAgICA1IHwgICAg ICAgICAgMTY0MjUgfCAgICAgICAgICAgNDMgfCBtYWluICAgICAgfCB0CisgMC83NDQ1MUU4IHwg ICAgICAgICAgIDE2NjMgfCAgICAgICAgICAgIDUgfCAgICAgICAgICAxNjQyOCB8ICAgICAgICAg IDE5OSB8IG1haW4gICAgICB8IHQKKyAwLzc0NDcyMjAgfCAgICAgICAgICAgMTY2MyB8ICAgICAg ICAgICAgNSB8ICAgICAgICAgIDE2NDI4IHwgICAgICAgICAgMjIxIHwgbWFpbiAgICAgIHwgdAor IDAvNzQ0RTQ1OCB8ICAgICAgICAgICAxNjYzIHwgICAgICAgICAgICA1IHwgICAgICAgICAgMTY0 MjggfCAgICAgICAgICAyMDAgfCBtYWluICAgICAgfCB0CisgMC83NDU3Q0IwIHwgICAgICAgICAg IDE2NjMgfCAgICAgICAgICAgIDUgfCAgICAgICAgICAxNjQyOCB8ICAgICAgICAgIDIwMSB8IG1h aW4gICAgICB8IHQKKyAwLzc0NjE1MjAgfCAgICAgICAgICAgMTY2MyB8ICAgICAgICAgICAgNSB8 ICAgICAgICAgIDE2NDI4IHwgICAgICAgICAgMjAyIHwgbWFpbiAgICAgIHwgdAorIDAvNzQ2QUQ5 MCB8ICAgICAgICAgICAxNjYzIHwgICAgICAgICAgICA1IHwgICAgICAgICAgMTY0MjggfCAgICAg ICAgICAyMDMgfCBtYWluICAgICAgfCB0CisoMTQgcm93cykKKzwvc2NyZWVuPgorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgIDwvdmFyaWFibGVs aXN0PgogIDwvc2VjdDI+CiAKLS0gCjIuMzQuMQoK --000000000000c1e0a105f0cdd6c0--