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.96) (envelope-from ) id 1w830I-000A8K-1W for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 21:21:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w830H-002L2C-0r for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 21:21:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w830G-002L22-23 for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 21:21:33 +0000 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w830D-0000000053e-1UNF for pgsql-hackers@postgresql.org; Wed, 01 Apr 2026 21:21:32 +0000 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-67bac077116so88989eaf.1 for ; Wed, 01 Apr 2026 14:21:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775078487; cv=none; d=google.com; s=arc-20240605; b=B9Jg96LzVV/wWXBXGaPaYtIXUKhL/p7WFxjILmmBiWd4n3mgtw5/BojfxFJv8RzM6v VIX+ecOy0vfEDvJoLzFkANOtWVjsvts7UWuAdTxARhVEyvBq2t6pjcEULjK8la7OBA3N abMBX7oVHTzw4ObkAjLXuYGLUDcdrNjBlz46nACpGs6wdDT/X+OcJFSM9hIHJsIq0l0k tnPYce+Ele/Giya49rwAHHwE8uul8gxROXYcoYaXFLCVMrOUljl+pglYGg1XKirPn95Q hw77QSYjz+H6Q2s9bkKLu20ODbkMKHx2JbDUzYbm/X9piWL+ErKYqC/XFcNvI5ohr31C zzBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Ty4FKBTn+ljICharCDfs4oDsOVgtT7NXmzt011QgKMA=; fh=yYA4HxOIKZHlL78XpSe4xjKEe3tZFxlpyZAsb33eljA=; b=Lyp0AmIRFkNnbv23z7LpFru6s1lbqawe38lUg5EyML+BoKU5mOarCtsunoxoYxiEs/ 0E/DGewBnwoGBwYzbNBVbKVrpK5VsdSTgd5Z/VbuIzV0UkAwihcviq3dJxgARO8EwCL9 duvrcF1wIzthnyRAbwAp3XAzhp+bTCme1fD5L7YwsSm2qziSH4Kxz9sy86MDFVx3yoJ5 Du61CNgViDXlcxaMhUw24Pp8I17CCRVTj+vrdvZLbq6lJ8VOsttjNlvOWYBiucO9WLsL 0LZy5YwzKxylRQZTRCBD8laEoLB3YC1n+C6hnLIcK38Jjeio8V0DcRSYY6XFsCj+S5vY 1nAw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775078487; x=1775683287; 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=Ty4FKBTn+ljICharCDfs4oDsOVgtT7NXmzt011QgKMA=; b=d2fUdUQoDdYzQVFwllQ3KWdmIVljqMF0zMJINzw26iqwoFzhM275hSxgX5B38TBhuN rXbL56ylIQMkaahBZCvW8xt4QMCnbaC26Sw3WArsfPU24fevRi4FHtM2rpUyHKEQDIcu Q02L8WnXncr7k6xJMmUxYtpIfAieorXGm6W9wo4+VlG/HmW0+rS+7Uk6DO4c3bisktZn 0HKIFtfE6q0GGazvPUI6jR+xDm3hoC0OjvidTJvWqtZBfMHSwGWkcQVNeSJ9vPCtVVcm giVqK2xnNbLMrolNwuY+xjIgvQV4VQk9xa7dJ8QgcO9H4EGH1JdwYlABAXDKVixS8KhF 9lRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775078487; x=1775683287; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Ty4FKBTn+ljICharCDfs4oDsOVgtT7NXmzt011QgKMA=; b=JI1EqbrSNWaGrN4e2qv3yT0DtoykK2OwwJGr9khigLWfcc57KLordzNRpYjwJoCsBX xC65MK44u4JzttPXgR6TOxjRYBJHxs9XXoM9CimnlNBT+5foAM4O9hIuRMbkrXh6CrRZ rEUSpDtG8jDhDPd8UqQnienrR1IyJl1shdpEFZS5JoEH3LQpgknbj5p9Q8VXBqJCG7Nz 4x/eZ8Q5Q8rC7FyhIPOnK/wfFbTKlmhbodyUX9fRkuQZtlNjaKHOU5othD1DsC+nJDiI apYIT9o3wrNy1R3yG7p+Fm/Zhigzw6afH9oE5xJ2N1BuQyh+7NjsmAmHx38ufihdWXj+ cxkQ== X-Forwarded-Encrypted: i=1; AJvYcCW2SfzChZ9IPuMcYFzdrftnThPV9oq4FnIixaOGvw/LfjJy4uy3KF3b765ClWL0GovsHPKGl5DUkbzMykyd@postgresql.org X-Gm-Message-State: AOJu0YwtYBmtQHQ3sXxwodUgvKX3WnE18amVBM8ZG7e9E5qXxd7M6Fg0 mHUfIdjb52x7EpJlED36ydhY2p/FVcapHl+HVk3MhTwbsiOIvbt87AoYLd8GAYvIsdKRhsa3fKk C6rqqkwHiU+QuIP+XWDMjeyMGrzj8aH3wFEdH X-Gm-Gg: ATEYQzwd5eFIl1F3qXBQ3LDo2PaMgIqAAHG3YnxNrJ2cTzs9dfYv+/m14a7E247acLN dTnnLq4rB/jj9uPW4I1vqk8Wb4l77CFCMW7NX3lY7oYONmuVxWFtb+V9xBafywbK1W6766nKcS/ klpI3A8z1zSlB1X3jqUgIxRu5gSY/uKvtt8IBLs+EQwIFczZB6JuprbrHVImF1m4A9Slfc7YfT4 vYwtPuA//b7fx9F28EJhfIi5yVJZ+g8ctQme4HsAk9ZUQUqF8/EZIyzYmaob/Iiq+ak2zMv6pOK Th4p0Q== X-Received: by 2002:a05:6820:1508:b0:67c:9f59:23ee with SMTP id 006d021491bc7-67fabbead50mr2833604eaf.14.1775078487269; Wed, 01 Apr 2026 14:21:27 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Wed, 1 Apr 2026 14:21:13 -0700 X-Gm-Features: AQROBzADsjC7I3JdhDLdXHcmbfgzw4OqQmDE9tja0FfFG_ycNK8YnAxmolZiShk Message-ID: Subject: Re: Introduce XID age based replication slot invalidation To: Masahiko Sawada Cc: Srinath Reddy Sadipiralla , SATYANARAYANA NARLAPURAM , "Hayato Kuroda (Fujitsu)" , John H , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000aebfc6064e6caa6e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aebfc6064e6caa6e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Wed, Apr 1, 2026 at 12:39=E2=80=AFPM Masahiko Sawada wrote: > > I've reviewed the v7 patch and have some review comments: Thank you for reviewing the patch. > +# Advance the given number of XIDs > +sub advance_xids > +{ > + my ($node, $nxids) =3D @_; > + my $sql =3D join(";\n", ("SELECT pg_current_xact_id()") x $nxids); > + $node->safe_psql('postgres', $sql); > +} > > I think we can create a procedure on primary5 instance to consume XIDs > as follow: > > $standby5->safe_psql( > 'postgres', > qq{CREATE PROCEDURE consume_xid(cnt int) > AS \$\$ > DECLARE > i int; > BEGIN > FOR i in 1..cnt LOOP > EXECUTE 'SELECT pg_current_xact_id()'; > COMMIT; > END LOOP; > END; > +\$\$ > LANGUAGE plpgsql; > }); Agreed. Although the test timings don't improve (9 seconds on my dev machine) after moving to the procedure vs. sending pg_current_xact_id SQL statements, the procedure approach looks better and is more consistent. > --- > +# Create a subscriber node > +my $subscriber5 =3D PostgreSQL::Test::Cluster->new('subscriber5'); > +$subscriber5->init(allows_streaming =3D> 'logical'); > +$subscriber5->start; > > Do we really need to create a subscriber for this test? I think we can > simply create a logical slot on the primary5 and test the XID-age > based slot invalidation. Nice catch! Removed. > --- > I've attached a fixup patch to propose some cleanup and refactoring, incl= uding: > > - changes to invalidation errdetail message. > - passing xidLimit instead of recentXid to simplify the invalidation logi= c. > - documentation changes. > - comment changes. I took the above changes into v8 and fixed a typo in using xidLimit instead of slotXidLimit. Please find the attached v8 patches for further review. Thank you! -- Bharath Rupireddy Amazon Web Services: https://aws.amazon.com --000000000000aebfc6064e6caa6e Content-Type: application/x-patch; name="v8-0002-Add-more-tests-for-XID-age-slot-invalidation.patch" Content-Disposition: attachment; filename="v8-0002-Add-more-tests-for-XID-age-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngjt15i1 RnJvbSA0ZWM1NjE0MGEyZGFiMjRiZjMwM2IzNzQ0NjUxMjdjZTkzNDA0Y2M5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAyMDo1NjozOCArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjggMi8yXSBBZGQgbW9yZSB0ZXN0cyBmb3IgWElEIGFnZSBzbG90 IGludmFsaWRhdGlvbgoKQ29uc3VtZSBYSURzIHVwIHRvIHdyYXBhcm91bmQgV0FSTklORyBsaW1p dHMgd2l0aAptYXhfc2xvdF94aWRfYWdlIG1hdGNoaW5nIHZhY3V1bV9mYWlsc2FmZV9hZ2UgKDEu NkIpLiBWZXJpZnkgdGhhdAphdXRvdmFjdXVtIGludmFsaWRhdGVzIHRoZSBpbmFjdGl2ZSByZXBs aWNhdGlvbiBzbG90CihYSUQtYWdlLWJhc2VkIGludmFsaWRhdGlvbiksIHVuYmxvY2tzIGRhdGZy b3plbnhpZCBhZHZhbmNlbWVudCwKYW5kIHByZXZlbnRzIHdyYXBhcm91bmQgd2l0aG91dCBhbnkg aW50ZXJ2ZW50aW9uLgotLS0KIHNyYy90ZXN0L3JlY292ZXJ5L01ha2VmaWxlICAgICAgICAgICAg ICAgIHwgICAzICstCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbCB8 IDEzMCArKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDEzMiBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvTWFr ZWZpbGUgYi9zcmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZQppbmRleCBkNDFhYWFmOGFlMS4uNWMz ZDJjODk5NDEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L01ha2VmaWxlCisrKyBiL3Ny Yy90ZXN0L3JlY292ZXJ5L01ha2VmaWxlCkBAIC0xMiw3ICsxMiw4IEBACiBFWFRSQV9JTlNUQUxM PWNvbnRyaWIvcGdfcHJld2FybSBcCiAJY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMgXAogCWNv bnRyaWIvdGVzdF9kZWNvZGluZyBcCi0Jc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRz CisJc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzIFwKKwlzcmMvdGVzdC9tb2R1bGVz L3hpZF93cmFwYXJvdW5kCiAKIHN1YmRpciA9IHNyYy90ZXN0L3JlY292ZXJ5CiB0b3BfYnVpbGRk aXIgPSAuLi8uLi8uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNs b3RfbGltaXQucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbApp bmRleCBjNWY2ZTViYmE4Ny4uYzliMjczZTFkN2MgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292 ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5 X3JlcGxzbG90X2xpbWl0LnBsCkBAIC02OTgsNCArNjk4LDEzNCBAQCAkcHJpbWFyeTUtPnN0b3A7 CiAjIFRlc3RjYXNlIGVuZDogSW52YWxpZGF0ZSBsb2dpY2FsIHNsb3Qgb24gc3RhbmRieSBkdWUg dG8gbWF4X3Nsb3RfeGlkX2FnZSBHVUMKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorIyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IFhJRC1hZ2UtYmFzZWQgc2xv dCBpbnZhbGlkYXRpb24gd2l0aCBhdXRvdmFjdXVtIChwcm9kdWN0aW9uLWxpa2UpCisKKyMgU3Rh bmRieSBzZXRzIHNsb3QgeG1pbiB2aWEgSFMgZmVlZGJhY2ssIGRpc2Nvbm5lY3RzLCBYSURzIGFy ZSBjb25zdW1lZC4KKyMgbWF4X3Nsb3RfeGlkX2FnZSBpcyBzZXQgdG8gdmFjdXVtX2ZhaWxzYWZl X2FnZSAoMS42Qikgc28gYXV0b3ZhY3V1bQorIyBpbnZhbGlkYXRlcyB0aGUgc2xvdCBiZWZvcmUg ZW50ZXJpbmcgZmFpbHNhZmUgbW9kZSwgdW5ibG9ja2luZworIyBkYXRmcm96ZW54aWQgYWR2YW5j ZW1lbnQgYW5kIGF2b2lkaW5nIFhJRCB3cmFwYXJvdW5kIHdpdGhvdXQgbWFudWFsCisjIFZBQ1VV TSBvciBkb3dudGltZS4KKworIyBWZXJpZnkgc2VydmVyIGxvZyBzaG93cyBzbG90IGludmFsaWRh dGlvbiBieSBhdXRvdmFjdXVtIHdvcmtlcgorc3ViIHZlcmlmeV9zbG90X3hpZF9hZ2VkX2ludmFs aWRhdGlvbl9pbl9zZXJ2ZXJfbG9nCit7CisJbXkgKCRub2RlLCAkc2xvdF9uYW1lLCAkbWF4X2Fn ZSwgJGNvbnN1bWVkX3hpZHMpID0gQF87CisKKwlteSAkbG9nID0gc2x1cnBfZmlsZSgkbm9kZS0+ bG9nZmlsZSk7CisKKwkjIFZlcmlmeSB0aGUgaW52YWxpZGF0aW9uIHdhcyBwZXJmb3JtZWQgYnkg YW4gYXV0b3ZhY3V1bSB3b3JrZXIKKwlsaWtlKCRsb2csCisJCXFyL2F1dG92YWN1dW0gd29ya2Vy XFtcZCtcXSBMT0c6XHMraW52YWxpZGF0aW5nIG9ic29sZXRlIHJlcGxpY2F0aW9uIHNsb3QgIiRz bG90X25hbWUiLywKKwkJInNlcnZlciBsb2c6ICRzbG90X25hbWUgaW52YWxpZGF0ZWQgYnkgYXV0 b3ZhY3V1bSB3b3JrZXIiKTsKKworCSMgVmVyaWZ5IERFVEFJTCBzaG93cyB0aGUgeG1pbiBhZ2Ug ZXhjZWVkaW5nIG1heF9zbG90X3hpZF9hZ2UKKwlsaWtlKCRsb2csCisJCXFyL2F1dG92YWN1dW0g d29ya2VyXFtcZCtcXSBERVRBSUw6XHMrVGhlIHNsb3QncyAoPzpjYXRhbG9nICk/eG1pbiBhZ2Ug b2YgKFxkKykgZXhjZWVkcyB0aGUgY29uZmlndXJlZCAibWF4X3Nsb3RfeGlkX2FnZSIgb2YgJG1h eF9hZ2UgYnkgKFxkKykgdHJhbnNhY3Rpb25zLywKKwkJInNlcnZlciBsb2c6IERFVEFJTCBzaG93 cyB4bWluIGFnZSBleGNlZWRzIG1heF9zbG90X3hpZF9hZ2UgJG1heF9hZ2UiKTsKKworCSMgRXh0 cmFjdCB4aWQgYWdlIGZyb20gdGhlIGxvZyBhbmQgcmVwb3J0IGZvciBkaWFnbm9zdGljcworCSRs b2cgPX4KKwkgIC9UaGUgc2xvdCdzICg/OmNhdGFsb2cgKT94bWluIGFnZSBvZiAoXGQrKSBleGNl ZWRzIHRoZSBjb25maWd1cmVkICJtYXhfc2xvdF94aWRfYWdlIiBvZiAkbWF4X2FnZSBieSAoXGQr KS87CisJbXkgJGxvZ194aWRfYWdlID0gJDEgLy8gJ04vQSc7CisJbXkgJGV4Y2VlZGVkX2J5ID0g JDIgLy8gJ04vQSc7CisJZGlhZyAieGlkX2FnZSBmcm9tIHNlcnZlciBsb2c9JGxvZ194aWRfYWdl LCBleGNlZWRlZF9ieT0kZXhjZWVkZWRfYnksIG1heF9zbG90X3hpZF9hZ2U9JG1heF9hZ2UsIGNv bnN1bWVkPSRjb25zdW1lZF94aWRzIFhJRHMiOworfQorCisjIFZlcmlmeSBzbG90IGludmFsaWRh dGlvbiBhbmQgd2FpdCBmb3IgYXV0b3ZhY3V1bSB0byBhZHZhbmNlIGRhdGZyb3plbnhpZAorc3Vi IHZlcmlmeV9pbnZhbGlkYXRpb25fYW5kX3JlY292ZXJ5Cit7CisJbXkgKCRub2RlLCAkc2xvdF9u YW1lLCAkbWF4X2FnZSwgJGNvbnN1bWVkX3hpZHMpID0gQF87CisKKwlyZXR1cm4gaWYgJG1heF9h Z2UgPT0gMDsKKworCXdhaXRfZm9yX3hpZF9hZ2VkX2ludmFsaWRhdGlvbigkbm9kZSwgJHNsb3Rf bmFtZSk7CisJb2soMSwgJ2F1dG92YWN1dW0gaW52YWxpZGF0ZWQgc2xvdCBkdWUgdG8geGlkX2Fn ZWQnKTsKKworCXZlcmlmeV9zbG90X3hpZF9hZ2VkX2ludmFsaWRhdGlvbl9pbl9zZXJ2ZXJfbG9n KCRub2RlLCAkc2xvdF9uYW1lLAorCQkkbWF4X2FnZSwgJGNvbnN1bWVkX3hpZHMpOworCisJIyBX YWl0IGZvciBhdXRvdmFjdXVtIHRvIGFkdmFuY2UgZGF0ZnJvemVueGlkIGluIGFsbCBkYXRhYmFz ZXMgcGFzdCB0aGUKKwkjIHdyYXBhcm91bmQgdGhyZXNob2xkLgorCSRub2RlLT5wb2xsX3F1ZXJ5 X3VudGlsKAorCQkncG9zdGdyZXMnLCBxcVsKKwkJU0VMRUNUIE5PVCBFWElTVFMgKAorCQkJU0VM RUNUIDEgRlJPTSBwZ19kYXRhYmFzZQorCQkJV0hFUkUgYWdlKGRhdGZyb3plbnhpZCkgPiAyMDAw MDAwMDAwCisJCSk7CisJXSkgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXV0b3ZhY3V1 bSB0byBhZHZhbmNlIGRhdGZyb3plbnhpZCBpbiBhbGwgZGF0YWJhc2VzIjsKK30KKworbXkgJHBy aW1hcnk2ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5NicpOworJHBy aW1hcnk2LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKworJG1heF9zbG90 X3hpZF9hZ2UgPSAxNjAwMDAwMDAwOyAgICAjIG1hdGNoZXMgdmFjdXVtX2ZhaWxzYWZlX2FnZSBk ZWZhdWx0CiskcHJpbWFyeTYtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsK K21heF9zbG90X3hpZF9hZ2UgPSAkbWF4X3Nsb3RfeGlkX2FnZQorYXV0b3ZhY3V1bV9uYXB0aW1l ID0gMXMKK30pOworCiskcHJpbWFyeTYtPnN0YXJ0OworJHByaW1hcnk2LT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBFWFRFTlNJT04geGlkX3dyYXBhcm91bmQiKTsKKworJGJhY2t1cF9u YW1lID0gJ2JhY2t1cDYnOworJHByaW1hcnk2LT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworbXkg JHN0YW5kYnk2ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5NicpOwor JHN0YW5kYnk2LT5pbml0X2Zyb21fYmFja3VwKCRwcmltYXJ5NiwgJGJhY2t1cF9uYW1lLCBoYXNf c3RyZWFtaW5nID0+IDEpOworJHN0YW5kYnk2LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5j b25mJywgcXsKK3ByaW1hcnlfc2xvdF9uYW1lID0gJ3NiNl9zbG90JworaG90X3N0YW5kYnlfZmVl ZGJhY2sgPSBvbgord2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCA9IDEKK30pOworCiskcHJp bWFyeTYtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2Fs X3JlcGxpY2F0aW9uX3Nsb3QoJ3NiNl9zbG90JywgdHJ1ZSkiKTsKKworJHN0YW5kYnk2LT5zdGFy dDsKKworJHByaW1hcnk2LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRh Yl9pbnQ2IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMgYSIpOworJHByaW1hcnk2 LT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5Nik7CisKKyRwcmltYXJ5Ni0+cG9sbF9xdWVyeV91 bnRpbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlTRUxFQ1QgeG1pbiBJUyBOT1QgTlVMTCBGUk9NIHBn X3JlcGxpY2F0aW9uX3Nsb3RzCisJCVdIRVJFIHNsb3RfbmFtZSA9ICdzYjZfc2xvdCc7CitdKSBv ciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBzYjZfc2xvdCB4bWluIGZyb20gSFMgZmVlZGJh Y2siOworCisjIFN0b3Agc3RhbmRieTsgc2xvdCB4bWluIHBlcnNpc3RzIGFuZCBob2xkcyBiYWNr IGRhdGZyb3plbnhpZAorJHN0YW5kYnk2LT5zdG9wOworCisjIENvbnN1bWUgWElEcyBpbiA1ME0g Y2h1bmtzOyBhdXRvdmFjdXVtIChuYXB0aW1lPTFzKSB3aWxsIGludmFsaWRhdGUgdGhlCisjIHNs b3Qgb25jZSB4bWluIGFnZSBleGNlZWRzIG1heF9zbG90X3hpZF9hZ2UuCitteSAkbG9nc3RhcnQ2 ID0gLXMgJHByaW1hcnk2LT5sb2dmaWxlOworbXkgJGNodW5rID0gNTBfMDAwXzAwMDsKK215ICRt YXhfeGlkcyA9IDJfMjAwXzAwMF8wMDA7CitteSAkY29uc3VtZWQgPSAwOworCit3aGlsZSAoJGNv bnN1bWVkIDwgJG1heF94aWRzKQoreworCSRwcmltYXJ5Ni0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY29uc3VtZV94aWRzKCRjaHVuaykiKTsKKwkkY29uc3VtZWQgKz0gJGNodW5rOwor CW15ICRyZW1haW5pbmcgPSAkbWF4X3hpZHMgLSAkY29uc3VtZWQ7CisJZGlhZyAiY29uc3VtZWQg JGNvbnN1bWVkIC8gJG1heF94aWRzIFhJRHMgKCRyZW1haW5pbmcgcmVtYWluaW5nKSI7Cit9CisK K3ZlcmlmeV9pbnZhbGlkYXRpb25fYW5kX3JlY292ZXJ5KCRwcmltYXJ5NiwgJ3NiNl9zbG90JywK KwkkbWF4X3Nsb3RfeGlkX2FnZSwgJGNvbnN1bWVkKTsKKworIyBDb25zdW1lIDFCIG1vcmUgWElE cyDigJQgY29tYmluaW5nIHdpdGggdGhlIDIuMkIgY29uc3VtZWQgYWJvdmUsIHRoZSB0b3RhbAor IyBvZiAzLjJCIGV4Y2VlZHMgdGhlIDJeMzEgKH4yLjFCKSB1c2FibGUgWElEIHNwYWNlICh4aWRT dG9wTGltaXQpLCBpLmUuCisjIG1vcmUgdGhhbiBvbmUgZnVsbCB3cmFwYXJvdW5kIGN5Y2xlLCBw cm92aW5nIHRoZSBzeXN0ZW0gaXMgaGVhbHRoeS4KKyRwcmltYXJ5Ni0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY29uc3VtZV94aWRzKDEwMDAwMDAwMDApIik7CitvaygxLCAnd3JpdGVz IHN1Y2NlZWQgYWZ0ZXIgYXV0b3ZhY3V1bSBpbnZhbGlkYXRlZCB0aGUgc2xvdCcpOworCiskcHJp bWFyeTYtPnN0b3A7CisKKyMgVGVzdGNhc2UgZW5kOiBYSUQtYWdlLWJhc2VkIHNsb3QgaW52YWxp ZGF0aW9uIHdpdGggYXV0b3ZhY3V1bSAocHJvZHVjdGlvbi1saWtlKQorIyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --000000000000aebfc6064e6caa6e Content-Type: application/x-patch; name="v8-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="v8-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngjt15a0 RnJvbSBlZjdkNTU1MGQwYWIyOWI1NTgxYjQyYzNmZGI3N2MxZTczMDkwYTA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAyMDo1NTo1MSArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjggMS8yXSBBZGQgWElEIGFnZSBiYXNlZCByZXBsaWNhdGlvbiBz bG90IGludmFsaWRhdGlvbgoKSW50cm9kdWNlIG1heF9zbG90X3hpZF9hZ2UsIGEgR1VDIHRoYXQg aW52YWxpZGF0ZXMgcmVwbGljYXRpb24Kc2xvdHMgd2hvc2UgeG1pbiBvciBjYXRhbG9nX3htaW4g ZXhjZWVkcyB0aGUgc3BlY2lmaWVkIGFnZS4KRGlzYWJsZWQgYnkgZGVmYXVsdC4KCklkbGUgb3Ig Zm9yZ290dGVuIHJlcGxpY2F0aW9uIHNsb3RzIGNhbiBob2xkIGJhY2sgdmFjdXVtLCBsZWFkaW5n CnRvIGJsb2F0IGFuZCBldmVudHVhbGx5IFhJRCB3cmFwYXJvdW5kLiBJbiB0aGUgd29yc3QgY2Fz ZSB0aGlzCnJlcXVpcmVzIGRyb3BwaW5nIHRoZSBzbG90IGFuZCBzaW5nbGUtdXNlciBtb2RlIHZh Y3V1bWluZy4gVGhpcwpzZXR0aW5nIGF2b2lkcyB0aGF0IGJ5IHByb2FjdGl2ZWx5IGludmFsaWRh dGluZyBzbG90cyB0aGF0IGhhdmUKZmFsbGVuIHRvbyBmYXIgYmVoaW5kLgoKSW52YWxpZGF0aW9u IGNoZWNrcyBhcmUgcGVyZm9ybWVkIG9uY2UgcGVyIHJlbGF0aW9uIGR1cmluZyB2YWN1dW0KKGJv dGggdmFjdXVtIGNvbW1hbmQgYW5kIGF1dG92YWN1dW0pLCBhbmQgYWxzbyBieSB0aGUgY2hlY2tw b2ludGVyCmR1cmluZyBjaGVja3BvaW50cyBhbmQgcmVzdGFydHBvaW50cy4KLS0tCiBkb2Mvc3Jj L3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgNDcgKysrKysrCiBkb2Mv c3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwgICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jICAgICAgICAgIHwgIDE1ICsrCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgMzQgKysrLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgICAgICAgICAgICAgICAgfCAxMjIgKysrKysrKysrKysr Ky0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jICAgICAgICAgICB8ICA2MSAr KysrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICAgfCAg IDMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAg OCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIg Kwogc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmggICAgICAgICAgICAgICAgIHwgICA5ICsK IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAgICAgICB8ICAxMCArLQog c3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgICAgICAgIHwgICAzICsKIHNy Yy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsICAgICB8IDE1OCArKysrKysr KysrKysrKysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDQ1OSBpbnNlcnRpb25zKCspLCAyNiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvY29uZmlnLnNnbWwKaW5kZXggMjI5ZjQxMzUzZWIuLjlhZDY2MmI4YjZmIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sCkBAIC00NzY0LDYgKzQ3NjQsNTMgQEAgcmVzdG9yZV9jb21tYW5kID0gJ2NvcHkgIkM6XFxz ZXJ2ZXJcXGFyY2hpdmVkaXJcXCVmIiAiJXAiJyAgIyBXaW5kb3dzCiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWF4 LXNsb3QteGlkLWFnZSIgeHJlZmxhYmVsPSJtYXhfc2xvdF94aWRfYWdlIj4KKyAgICAgIDx0ZXJt Pjx2YXJuYW1lPm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBl PikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bWF4X3Nsb3Rf eGlkX2FnZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAg ICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgSW52YWxpZGF0ZSByZXBsaWNhdGlvbiBzbG90cyB3aG9zZSA8c3RydWN0 ZmllbGQ+eG1pbjwvc3RydWN0ZmllbGQ+IGFnZQorICAgICAgICBvciA8c3RydWN0ZmllbGQ+Y2F0 YWxvZ194bWluPC9zdHJ1Y3RmaWVsZD4gYWdlIGluIHRoZQorICAgICAgICA8bGluayBsaW5rZW5k PSJ2aWV3LXBnLXJlcGxpY2F0aW9uLXNsb3RzIj5wZ19yZXBsaWNhdGlvbl9zbG90czwvbGluaz4K KyAgICAgICAgdmlldyBoYXMgZXhjZWVkZWQgdGhlIGFnZSBzcGVjaWZpZWQgYnkgdGhpcyBzZXR0 aW5nLiBTbG90IGludmFsaWRhdGlvbgorICAgICAgICBkdWUgdG8gdGhpcyBsaW1pdCBvY2N1cnMg ZHVyaW5nIHZhY3V1bSAoYm90aCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+CisgICAgICAgIGNv bW1hbmQgYW5kIGF1dG92YWN1dW0pIGFuZCBkdXJpbmcgY2hlY2twb2ludC4KKyAgICAgICAgQSB2 YWx1ZSBvZiB6ZXJvICh0aGUgZGVmYXVsdCkgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiBVc2VycyBj YW4gc2V0CisgICAgICAgIHRoaXMgdmFsdWUgYW55d2hlcmUgZnJvbSB6ZXJvIHRvIHR3byBiaWxs aW9uIHRyYW5zYWN0aW9ucy4gVGhpcyBwYXJhbWV0ZXIKKyAgICAgICAgY2FuIG9ubHkgYmUgc2V0 IGluIHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbgor ICAgICAgICB0aGUgc2VydmVyIGNvbW1hbmQgbGluZS4KKyAgICAgICA8L3BhcmE+CisKKyAgICAg ICA8cGFyYT4KKyAgICAgICAgVGhlIGN1cnJlbnQgYWdlIG9mIGEgc2xvdCdzIDxsaXRlcmFsPnht aW48L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0ZXJhbD5jYXRhbG9nX3htaW48L2xpdGVyYWw+ IGNhbiBiZSBtb25pdG9yZWQgYnkgYXBwbHlpbmcgdGhlCisgICAgICAgIDxmdW5jdGlvbj5hZ2U8 L2Z1bmN0aW9uPiBmdW5jdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW5zIGluIHRoZQor ICAgICAgICA8bGluayBsaW5rZW5kPSJ2aWV3LXBnLXJlcGxpY2F0aW9uLXNsb3RzIj5wZ19yZXBs aWNhdGlvbl9zbG90czwvbGluaz4KKyAgICAgICAgdmlldy4KKyAgICAgICA8L3BhcmE+CisKKyAg ICAgICA8cGFyYT4KKyAgICAgICAgSWRsZSBvciBmb3Jnb3R0ZW4gcmVwbGljYXRpb24gc2xvdHMg Y2FuIGhvbGQgYmFjayB2YWN1dW0sIGxlYWRpbmcgdG8KKyAgICAgICAgYmxvYXQgYW5kIGV2ZW50 dWFsbHkgdHJhbnNhY3Rpb24gSUQgd3JhcGFyb3VuZC4gVGhpcyBzZXR0aW5nIGF2b2lkcworICAg ICAgICB0aGF0IGJ5IGludmFsaWRhdGluZyBzbG90cyB0aGF0IGhhdmUgZmFsbGVuIHRvbyBmYXIg YmVoaW5kLgorICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0icm91dGluZS12YWN1dW1pbmciLz4g Zm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAgICAg ICAgTm90ZSB0aGF0IHRoaXMgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSBpcyBub3QgYXBwbGljYWJs ZSBmb3Igc2xvdHMKKyAgICAgICAgb24gdGhlIHN0YW5kYnkgc2VydmVyIHRoYXQgYXJlIGJlaW5n IHN5bmNlZCBmcm9tIHRoZSBwcmltYXJ5IHNlcnZlcgorICAgICAgICAoaS5lLiwgc3RhbmRieSBz bG90cyBoYXZpbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0idmlldy1wZy1yZXBsaWNhdGlvbi1z bG90cyI+cGdfcmVwbGljYXRpb25fc2xvdHM8L2xpbms+LjxzdHJ1Y3RmaWVsZD5zeW5jZWQ8L3N0 cnVjdGZpZWxkPgorICAgICAgICB2YWx1ZSA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPikuIFN5bmNl ZCBzbG90cyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8KKyAgICAgICAgYmUgaW5hY3RpdmUgYmVj YXVzZSB0aGV5IGRvbid0IHBlcmZvcm0gbG9naWNhbCBkZWNvZGluZyB0byBwcm9kdWNlCisgICAg ICAgIGNoYW5nZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXdhbC1zZW5kZXItdGlt ZW91dCIgeHJlZmxhYmVsPSJ3YWxfc2VuZGVyX3RpbWVvdXQiPgogICAgICAgPHRlcm0+PHZhcm5h bWU+d2FsX3NlbmRlcl90aW1lb3V0PC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCiAg ICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5z Z21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDllZTFhMmJmYzZhLi4x YTUwN2I0MzBmOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtMzEwMiw2ICszMTAyLDE0IEBA IFNFTEVDVCAqIEZST00gcGdfbG9ja3MgcGwgTEVGVCBKT0lOIHBnX3ByZXBhcmVkX3hhY3RzIHBw eAogICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1pZGxlLXJlcGxpY2F0aW9uLXNsb3QtdGlt ZW91dCIvPiBkdXJhdGlvbi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4K KyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGxpdGVyYWw+ eGlkX2FnZWQ8L2xpdGVyYWw+IG1lYW5zIHRoYXQgdGhlIHNsb3QncworICAgICAgICAgIDxsaXRl cmFsPnhtaW48L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmNhdGFsb2dfeG1pbjwvbGl0ZXJhbD4KKyAg ICAgICAgICBoYXMgcmVhY2hlZCB0aGUgYWdlIHNwZWNpZmllZCBieQorICAgICAgICAgIDx4cmVm IGxpbmtlbmQ9Imd1Yy1tYXgtc2xvdC14aWQtYWdlIi8+IHBhcmFtZXRlci4KKyAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAg IDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxh enkuYwppbmRleCA4OGM3MWNkODViNi4uNGI3MTYxMjIxMDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC92YWN1dW1sYXp5LmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogI2luY2x1ZGUgInBnc3RhdC5oIgog I2luY2x1ZGUgInBvcnRhYmlsaXR5L2luc3RyX3RpbWUuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVy L2F1dG92YWN1dW0uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvbGF0Y2guaCIKQEAgLTc5OSw2ICs4MDAsMjAgQEAgaGVhcF92YWN1dW1fcmVs KFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJICogdG8gaW5jcmVh c2UgdGhlIG51bWJlciBvZiBkZWFkIHR1cGxlcyBpdCBjYW4gcHJ1bmUgYXdheS4pCiAJICovCiAJ dmFjcmVsLT5hZ2dyZXNzaXZlID0gdmFjdXVtX2dldF9jdXRvZmZzKHJlbCwgcGFyYW1zLCAmdmFj cmVsLT5jdXRvZmZzKTsKKworCS8qCisJICogVHJ5IHRvIGludmFsaWRhdGUgWElELWFnZWQgcmVw bGljYXRpb24gc2xvdHMuIFVzZSB0aGUgc2xvdCB4bWluIHZhbHVlcworCSAqIG9idGFpbmVkIGZy b20gdGhlIHNhbWUgaG9yaXpvbnMgY29tcHV0YXRpb24gdGhhdCBwcm9kdWNlZCBPbGRlc3RYbWlu LAorCSAqIGF2b2lkaW5nIGFuIGV4dHJhIFByb2NBcnJheUxvY2sgYWNxdWlzaXRpb24uCisJICov CisJaWYgKE1heWJlSW52YWxpZGF0ZVhJREFnZWRTbG90cyh2YWNyZWwtPmN1dG9mZnMuc2xvdF94 bWluLAorCQkJCQkJCQkJdmFjcmVsLT5jdXRvZmZzLnNsb3RfY2F0YWxvZ194bWluKSkKKwl7CisJ CS8qIFJlY29tcHV0ZSBjdXRvZmZzIGFmdGVyIHNsb3QgaW52YWxpZGF0aW9uICovCisJCXZhY3Jl bC0+YWdncmVzc2l2ZSA9IHZhY3V1bV9nZXRfY3V0b2ZmcyhyZWwsIHBhcmFtcywKKwkJCQkJCQkJ CQkJCSZ2YWNyZWwtPmN1dG9mZnMpOworCX0KKwogCXZhY3JlbC0+cmVsX3BhZ2VzID0gb3JpZ19y ZWxfcGFnZXMgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHJlbCk7CiAJdmFjcmVsLT52aXN0 ZXN0ID0gR2xvYmFsVmlzVGVzdEZvcihyZWwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK aW5kZXggMmMxYzZmODhiNzQuLmVhYzczMDkxMTcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Zy5jCkBAIC03MDE5LDYgKzcwMTksOCBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAlW aXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhpZHM7CiAJaW50CQkJbnZ4aWRzOwogCWludAkJCW9sZFhM b2dBbGxvd2VkID0gMDsKKwl1aW50MzIJCXNsb3RJbnZhbGlkYXRpb25DYXVzZXM7CisJVHJhbnNh Y3Rpb25JZCBzbG90WGlkTGltaXQ7CiAKIAkvKgogCSAqIEFuIGVuZC1vZi1yZWNvdmVyeSBjaGVj a3BvaW50IGlzIHJlYWxseSBhIHNodXRkb3duIGNoZWNrcG9pbnQsIGp1c3QKQEAgLTc0NDcsOSAr NzQ0OSwyMCBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAkgKi8KIAlYTEJ5dGVUb1Nl ZyhSZWRvUmVjUHRyLCBfbG9nU2VnTm8sIHdhbF9zZWdtZW50X3NpemUpOwogCUtlZXBMb2dTZWco cmVjcHRyLCAmX2xvZ1NlZ05vKTsKLQlpZiAoSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25T bG90cyhSU19JTlZBTF9XQUxfUkVNT1ZFRCB8IFJTX0lOVkFMX0lETEVfVElNRU9VVCwKKworCXNs b3RJbnZhbGlkYXRpb25DYXVzZXMgPSBSU19JTlZBTF9XQUxfUkVNT1ZFRCB8IFJTX0lOVkFMX0lE TEVfVElNRU9VVDsKKwlzbG90WGlkTGltaXQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlpZiAo bWF4X3Nsb3RfeGlkX2FnZSA+IDApCisJeworCQlzbG90SW52YWxpZGF0aW9uQ2F1c2VzIHw9IFJT X0lOVkFMX1hJRF9BR0U7CisJCXNsb3RYaWRMaW1pdCA9IFRyYW5zYWN0aW9uSWRSZXRyZWF0ZWRC eShSZWFkTmV4dFRyYW5zYWN0aW9uSWQoKSwKKwkJCQkJCQkJCQkJCW1heF9zbG90X3hpZF9hZ2Up OworCX0KKworCWlmIChJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKHNsb3RJbnZh bGlkYXRpb25DYXVzZXMsCiAJCQkJCQkJCQkJICAgX2xvZ1NlZ05vLCBJbnZhbGlkT2lkLAotCQkJ CQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkKSkKKwkJCQkJCQkJCQkgICBJbnZhbGlkVHJh bnNhY3Rpb25JZCwKKwkJCQkJCQkJCQkgICBzbG90WGlkTGltaXQpKQogCXsKIAkJLyoKIAkJICog U29tZSBzbG90cyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQ7IHJlY2FsY3VsYXRlIHRoZSBvbGQtc2Vn bWVudApAQCAtNzczMCw2ICs3NzQzLDggQEAgQ3JlYXRlUmVzdGFydFBvaW50KGludCBmbGFncykK IAlYTG9nUmVjUHRyCWVuZHB0cjsKIAlYTG9nU2VnTm8JX2xvZ1NlZ05vOwogCVRpbWVzdGFtcFR6 IHh0aW1lOworCXVpbnQzMgkJc2xvdEludmFsaWRhdGlvbkNhdXNlczsKKwlUcmFuc2FjdGlvbklk IHNsb3RYaWRMaW1pdDsKIAogCS8qIENvbmN1cnJlbnQgY2hlY2twb2ludC9yZXN0YXJ0cG9pbnQg Y2Fubm90IGhhcHBlbiAqLwogCUFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIgfHwgTXlCYWNrZW5k VHlwZSA9PSBCX0NIRUNLUE9JTlRFUik7CkBAIC03OTA0LDkgKzc5MTksMTkgQEAgQ3JlYXRlUmVz dGFydFBvaW50KGludCBmbGFncykKIAogCUlOSkVDVElPTl9QT0lOVCgicmVzdGFydHBvaW50LWJl Zm9yZS1zbG90LWludmFsaWRhdGlvbiIsIE5VTEwpOwogCi0JaWYgKEludmFsaWRhdGVPYnNvbGV0 ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExFX1RJ TUVPVVQsCisJc2xvdEludmFsaWRhdGlvbkNhdXNlcyA9IFJTX0lOVkFMX1dBTF9SRU1PVkVEIHwg UlNfSU5WQUxfSURMRV9USU1FT1VUOworCXNsb3RYaWRMaW1pdCA9IEludmFsaWRUcmFuc2FjdGlv bklkOworCWlmIChtYXhfc2xvdF94aWRfYWdlID4gMCkKKwl7CisJCXNsb3RJbnZhbGlkYXRpb25D YXVzZXMgfD0gUlNfSU5WQUxfWElEX0FHRTsKKwkJc2xvdFhpZExpbWl0ID0gVHJhbnNhY3Rpb25J ZFJldHJlYXRlZEJ5KFJlYWROZXh0VHJhbnNhY3Rpb25JZCgpLAorCQkJCQkJCQkJCQkJbWF4X3Ns b3RfeGlkX2FnZSk7CisJfQorCisJaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xv dHMoc2xvdEludmFsaWRhdGlvbkNhdXNlcywKIAkJCQkJCQkJCQkgICBfbG9nU2VnTm8sIEludmFs aWRPaWQsCi0JCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpKQorCQkJCQkJCQkJCSAg IEludmFsaWRUcmFuc2FjdGlvbklkLAorCQkJCQkJCQkJCSAgIHNsb3RYaWRMaW1pdCkpCiAJewog CQkvKgogCQkgKiBTb21lIHNsb3RzIGhhdmUgYmVlbiBpbnZhbGlkYXRlZDsgcmVjYWxjdWxhdGUg dGhlIG9sZC1zZWdtZW50CkBAIC04NzcwLDYgKzg3OTUsNyBAQCB4bG9nX3JlZG8oWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCiAJCQkJICovCiAJCQkJSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRp b25TbG90cyhSU19JTlZBTF9XQUxfTEVWRUwsCiAJCQkJCQkJCQkJCQkgICAwLCBJbnZhbGlkT2lk LAorCQkJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQsCiAJCQkJCQkJCQkJCQkgICBJ bnZhbGlkVHJhbnNhY3Rpb25JZCk7CiAJCQl9CiAJCQllbHNlIGlmIChzeW5jX3JlcGxpY2F0aW9u X3Nsb3RzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCAwZWQzNjNkMWM4NS4uY2RhODZiOWQ1MGYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0xMTMzLDcgKzExMzMsMTAgQEAgdmFjdXVtX2dldF9j dXRvZmZzKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJICogdGhh dCBvbmx5IG9uZSB2YWN1dW0gcHJvY2VzcyBjYW4gYmUgd29ya2luZyBvbiBhIHBhcnRpY3VsYXIg dGFibGUgYXQKIAkgKiBhbnkgdGltZSwgYW5kIHRoYXQgZWFjaCB2YWN1dW0gaXMgYWx3YXlzIGFu IGluZGVwZW5kZW50IHRyYW5zYWN0aW9uLgogCSAqLwotCWN1dG9mZnMtPk9sZGVzdFhtaW4gPSBH ZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkKHJlbCk7CisJY3V0b2Zmcy0+T2xkZXN0 WG1pbiA9CisJCUdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWRXaXRoU2xvdFhpZHMo cmVsLAorCQkJCQkJCQkJCQkJCSAgICZjdXRvZmZzLT5zbG90X3htaW4sCisJCQkJCQkJCQkJCQkJ ICAgJmN1dG9mZnMtPnNsb3RfY2F0YWxvZ194bWluKTsKIAogCUFzc2VydChUcmFuc2FjdGlvbklk SXNOb3JtYWwoY3V0b2Zmcy0+T2xkZXN0WG1pbikpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5k ZXggYTkwOTJmYzIzODIuLmU2MjcxZTJhNTE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9zbG90LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCkBAIC0x MTcsNiArMTE3LDcgQEAgc3RhdGljIGNvbnN0IFNsb3RJbnZhbGlkYXRpb25DYXVzZU1hcCBTbG90 SW52YWxpZGF0aW9uQ2F1c2VzW10gPSB7CiAJe1JTX0lOVkFMX0hPUklaT04sICJyb3dzX3JlbW92 ZWQifSwKIAl7UlNfSU5WQUxfV0FMX0xFVkVMLCAid2FsX2xldmVsX2luc3VmZmljaWVudCJ9LAog CXtSU19JTlZBTF9JRExFX1RJTUVPVVQsICJpZGxlX3RpbWVvdXQifSwKKwl7UlNfSU5WQUxfWElE X0FHRSwgInhpZF9hZ2VkIn0sCiB9OwogCiAvKgpAQCAtMTU4LDYgKzE1OSwxMiBAQCBpbnQJCQlt YXhfcmVwbGljYXRpb25fc2xvdHMgPSAxMDsgLyogdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlcGxp Y2F0aW9uCiAgKi8KIGludAkJCWlkbGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0X3NlY3MgPSAw OwogCisvKgorICogSW52YWxpZGF0ZSByZXBsaWNhdGlvbiBzbG90cyB0aGF0IGhhdmUgeG1pbiBv ciBjYXRhbG9nX3htaW4gb2xkZXIKKyAqIHRoYW4gdGhlIHNwZWNpZmllZCBhZ2U7ICcwJyBkaXNh YmxlcyBpdC4KKyAqLworaW50CQkJbWF4X3Nsb3RfeGlkX2FnZSA9IDA7CisKIC8qCiAgKiBUaGlz IEdVQyBsaXN0cyBzdHJlYW1pbmcgcmVwbGljYXRpb24gc3RhbmRieSBzZXJ2ZXIgc2xvdCBuYW1l cyB0aGF0CiAgKiBsb2dpY2FsIFdBTCBzZW5kZXIgcHJvY2Vzc2VzIHdpbGwgd2FpdCBmb3IuCkBA IC0xNzgwLDcgKzE3ODcsMTAgQEAgUmVwb3J0U2xvdEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNs b3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJCQkJICAgWExvZ1JlY1B0ciByZXN0YXJ0X2xz biwKIAkJCQkJICAgWExvZ1JlY1B0ciBvbGRlc3RMU04sCiAJCQkJCSAgIFRyYW5zYWN0aW9uSWQg c25hcHNob3RDb25mbGljdEhvcml6b24sCi0JCQkJCSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMp CisJCQkJCSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMsCisJCQkJCSAgIFRyYW5zYWN0aW9uSWQg eG1pbiwKKwkJCQkJICAgVHJhbnNhY3Rpb25JZCBjYXRhbG9nX3htaW4sCisJCQkJCSAgIFRyYW5z YWN0aW9uSWQgeGlkTGltaXQpCiB7CiAJU3RyaW5nSW5mb0RhdGEgZXJyX2RldGFpbDsKIAlTdHJp bmdJbmZvRGF0YSBlcnJfaGludDsKQEAgLTE4MjUsNiArMTgzNSwyOCBAQCBSZXBvcnRTbG90SW52 YWxpZGF0aW9uKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJCQkJ CQkgImlkbGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0Iik7CiAJCQkJYnJlYWs7CiAJCQl9CisK KwkJY2FzZSBSU19JTlZBTF9YSURfQUdFOgorCQkJeworCQkJCVRyYW5zYWN0aW9uSWQgc2xvdF94 aWQgPSBUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWluKSA/IHhtaW4gOiBjYXRhbG9nX3htaW47CisJ CQkJaW50MzIJCWV4Y2VlZGVkX2J5ID0gKGludDMyKSAoeGlkTGltaXQgLSBzbG90X3hpZCk7CisJ CQkJaW50MzIJCXNsb3RfYWdlID0gKGludDMyKSBtYXhfc2xvdF94aWRfYWdlICsgZXhjZWVkZWRf Ynk7CisKKwkJCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc2xvdF94aWQpKTsKKworCQkJ CS8qIHRyYW5zbGF0b3I6ICVzIGlzIGEgR1VDIHZhcmlhYmxlIG5hbWUgKi8KKwkJCQlhcHBlbmRT dHJpbmdJbmZvKCZlcnJfZGV0YWlsLAorCQkJCQkJCQkgVHJhbnNhY3Rpb25JZElzVmFsaWQoeG1p bikKKwkJCQkJCQkJID8gXygiVGhlIHNsb3QncyB4bWluIGFnZSBvZiAlZCBleGNlZWRzIHRoZSBj b25maWd1cmVkIFwiJXNcIiBvZiAlZCBieSAlZCB0cmFuc2FjdGlvbnMiKQorCQkJCQkJCQkgOiBf KCJUaGUgc2xvdCdzIGNhdGFsb2cgeG1pbiBhZ2Ugb2YgJWQgZXhjZWVkcyB0aGUgY29uZmlndXJl ZCBcIiVzXCIgb2YgJWQgYnkgJWQgdHJhbnNhY3Rpb25zIiksCisJCQkJCQkJCSBzbG90X2FnZSwg Im1heF9zbG90X3hpZF9hZ2UiLCBtYXhfc2xvdF94aWRfYWdlLCBleGNlZWRlZF9ieSk7CisKKwkJ CQkvKiB0cmFuc2xhdG9yOiAlcyBpcyBhIEdVQyB2YXJpYWJsZSBuYW1lICovCisJCQkJYXBwZW5k U3RyaW5nSW5mbygmZXJyX2hpbnQsIF8oIllvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNlIFwiJXNc Ii4iKSwKKwkJCQkJCQkJICJtYXhfc2xvdF94aWRfYWdlIik7CisJCQkJYnJlYWs7CisJCQl9CisK IAkJY2FzZSBSU19JTlZBTF9OT05FOgogCQkJcGdfdW5yZWFjaGFibGUoKTsKIAl9CkBAIC0xODYz LDYgKzE4OTUsMjUgQEAgQ2FuSW52YWxpZGF0ZUlkbGVTbG90KFJlcGxpY2F0aW9uU2xvdCAqcykK IAkJCSEoUmVjb3ZlcnlJblByb2dyZXNzKCkgJiYgcy0+ZGF0YS5zeW5jZWQpKTsKIH0KIAorLyoK KyAqIENhbiB3ZSBpbnZhbGlkYXRlIGFuIFhJRC1hZ2VkIHJlcGxpY2F0aW9uIHNsb3Q/CisgKgor ICogWElELWFnZWQgYmFzZWQgaW52YWxpZGF0aW9uIGlzIGFsbG93ZWQgdG8gdGhlIGdpdmVuIHNs b3Qgd2hlbjoKKyAqCisgKiAxLiBNYXggWElELWFnZSBpcyBzZXQKKyAqIDIuIFNsb3QgaGFzIHZh bGlkIHhtaW4gb3IgY2F0YWxvZ194bWluCisgKiAzLiBUaGUgc2xvdCBpcyBub3QgYmVpbmcgc3lu Y2VkIGZyb20gdGhlIHByaW1hcnkgd2hpbGUgdGhlIHNlcnZlciBpcyBpbgorICoJICByZWNvdmVy eS4KKyAqLworc3RhdGljIGlubGluZSBib29sCitDYW5JbnZhbGlkYXRlWGlkQWdlZFNsb3QoUmVw bGljYXRpb25TbG90ICpzKQoreworCXJldHVybiAobWF4X3Nsb3RfeGlkX2FnZSAhPSAwICYmCisJ CQkoVHJhbnNhY3Rpb25JZElzVmFsaWQocy0+ZGF0YS54bWluKSB8fAorCQkJIFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHMtPmRhdGEuY2F0YWxvZ194bWluKSkgJiYKKwkJCSEoUmVjb3ZlcnlJblByb2dy ZXNzKCkgJiYgcy0+ZGF0YS5zeW5jZWQpKTsKK30KKwogLyoKICAqIERldGVybWluZVNsb3RJbnZh bGlkYXRpb25DYXVzZSAtIERldGVybWluZSB0aGUgY2F1c2UgZm9yIHdoaWNoIGEgc2xvdAogICog YmVjb21lcyBpbnZhbGlkIGFtb25nIHRoZSBnaXZlbiBwb3NzaWJsZSBjYXVzZXMuCkBAIC0xODc0 LDYgKzE5MjUsNyBAQCBzdGF0aWMgUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UKIERl dGVybWluZVNsb3RJbnZhbGlkYXRpb25DYXVzZSh1aW50MzIgcG9zc2libGVfY2F1c2VzLCBSZXBs aWNhdGlvblNsb3QgKnMsCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBvbGRlc3RMU04sIE9pZCBkYm9p ZCwKIAkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAorCQkJ CQkJCSAgIFRyYW5zYWN0aW9uSWQgeGlkTGltaXQsCiAJCQkJCQkJICAgVGltZXN0YW1wVHogKmlu YWN0aXZlX3NpbmNlLCBUaW1lc3RhbXBUeiBub3cpCiB7CiAJQXNzZXJ0KHBvc3NpYmxlX2NhdXNl cyAhPSBSU19JTlZBTF9OT05FKTsKQEAgLTE5NDUsNiArMTk5NywxOCBAQCBEZXRlcm1pbmVTbG90 SW52YWxpZGF0aW9uQ2F1c2UodWludDMyIHBvc3NpYmxlX2NhdXNlcywgUmVwbGljYXRpb25TbG90 ICpzLAogCQl9CiAJfQogCisJLyogQ2hlY2sgaWYgdGhlIHNsb3QgbmVlZHMgdG8gYmUgaW52YWxp ZGF0ZWQgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UgR1VDICovCisJaWYgKChwb3NzaWJsZV9jYXVz ZXMgJiBSU19JTlZBTF9YSURfQUdFKSAmJiBDYW5JbnZhbGlkYXRlWGlkQWdlZFNsb3QocykpCisJ eworCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkTGltaXQpKTsKKworCQlpZiAoKFRy YW5zYWN0aW9uSWRJc1ZhbGlkKHMtPmRhdGEueG1pbikgJiYKKwkJCSBUcmFuc2FjdGlvbklkUHJl Y2VkZXMocy0+ZGF0YS54bWluLCB4aWRMaW1pdCkpIHx8CisJCQkoVHJhbnNhY3Rpb25JZElzVmFs aWQocy0+ZGF0YS5jYXRhbG9nX3htaW4pICYmCisJCQkgVHJhbnNhY3Rpb25JZFByZWNlZGVzKHMt PmRhdGEuY2F0YWxvZ194bWluLCB4aWRMaW1pdCkpKQorCQkJcmV0dXJuIFJTX0lOVkFMX1hJRF9B R0U7CisJfQorCiAJcmV0dXJuIFJTX0lOVkFMX05PTkU7CiB9CiAKQEAgLTE5NjcsNiArMjAzMSw3 IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2Vz LAogCQkJCQkJCSAgIFJlcGxpY2F0aW9uU2xvdCAqcywKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG9s ZGVzdExTTiwKIAkJCQkJCQkgICBPaWQgZGJvaWQsIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25m bGljdEhvcml6b24sCisJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCB4aWRMaW1pdCwKIAkJCQkJCQkg ICBib29sICpyZWxlYXNlZF9sb2NrX291dCkKIHsKIAlpbnQJCQlsYXN0X3NpZ25hbGVkX3BpZCA9 IDA7CkBAIC0yMDE5LDYgKzIwODQsNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3Qo dWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCQkJCQkJCQkJCQkJCQlzLCBvbGRlc3RMU04sCiAJ CQkJCQkJCQkJCQkJCQkJZGJvaWQsCiAJCQkJCQkJCQkJCQkJCQkJc25hcHNob3RDb25mbGljdEhv cml6b24sCisJCQkJCQkJCQkJCQkJCQkJeGlkTGltaXQsCiAJCQkJCQkJCQkJCQkJCQkJJmluYWN0 aXZlX3NpbmNlLAogCQkJCQkJCQkJCQkJCQkJCW5vdyk7CiAKQEAgLTIxMTIsNyArMjE3OCw4IEBA IEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAog CQkJCVJlcG9ydFNsb3RJbnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCB0cnVlLCBhY3Rp dmVfcGlkLAogCQkJCQkJCQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAogCQkJCQkJCQkJICAg b2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJCQkJCSAgIHNsb3RfaWRs ZV9zZWNzKTsKKwkJCQkJCQkJCSAgIHNsb3RfaWRsZV9zZWNzLCBzLT5kYXRhLnhtaW4sCisJCQkJ CQkJCQkgICBzLT5kYXRhLmNhdGFsb2dfeG1pbiwgeGlkTGltaXQpOwogCiAJCQkJaWYgKE15QmFj a2VuZFR5cGUgPT0gQl9TVEFSVFVQKQogCQkJCQkodm9pZCkgU2lnbmFsUmVjb3ZlcnlDb25mbGlj dChHZXRQR1Byb2NCeU51bWJlcihhY3RpdmVfcHJvYyksCkBAIC0yMTY1LDcgKzIyMzIsOCBAQCBJ bnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJ CVJlcG9ydFNsb3RJbnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCBmYWxzZSwgYWN0aXZl X3BpZCwKIAkJCQkJCQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAogCQkJCQkJCQkgICBvbGRl c3RMU04sIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAotCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vj cyk7CisJCQkJCQkJCSAgIHNsb3RfaWRsZV9zZWNzLCBzLT5kYXRhLnhtaW4sCisJCQkJCQkJCSAg IHMtPmRhdGEuY2F0YWxvZ194bWluLCB4aWRMaW1pdCk7CiAKIAkJCS8qIGRvbmUgd2l0aCB0aGlz IHNsb3QgZm9yIG5vdyAqLwogCQkJYnJlYWs7CkBAIC0yMTkyLDYgKzIyNjAsOCBAQCBJbnZhbGlk YXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKICAqICAgbG9n aWNhbC4KICAqIC0gUlNfSU5WQUxfSURMRV9USU1FT1VUOiBoYXMgYmVlbiBpZGxlIGxvbmdlciB0 aGFuIHRoZSBjb25maWd1cmVkCiAgKiAgICJpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91dCIg ZHVyYXRpb24uCisgKiAtIFJTX0lOVkFMX1hJRF9BR0U6IHNsb3QgeGlkIGFnZSBpcyBvbGRlciB0 aGFuIHRoZSBjb25maWd1cmVkCisgKiAgICJtYXhfc2xvdF94aWRfYWdlIiBhZ2UuCiAgKgogICog Tm90ZTogVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBpbnZhbGlkYXRlIHRoZSBzbG90IGZvciBt dWx0aXBsZSBwb3NzaWJsZQogICogY2F1c2VzIGluIGEgc2luZ2xlIHBhc3MsIG1pbmltaXppbmcg cmVkdW5kYW50IGl0ZXJhdGlvbnMuIFRoZSAiY2F1c2UiCkBAIC0yMjA1LDcgKzIyNzUsOCBAQCBJ bnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIGJv b2wKIEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHModWludDMyIHBvc3NpYmxlX2Nh dXNlcywKIAkJCQkJCQkJICAgWExvZ1NlZ05vIG9sZGVzdFNlZ25vLCBPaWQgZGJvaWQsCi0JCQkJ CQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24pCisJCQkJCQkJCSAg IFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCSAgIFRyYW5z YWN0aW9uSWQgeGlkTGltaXQpCiB7CiAJWExvZ1JlY1B0cglvbGRlc3RMU047CiAJYm9vbAkJaW52 YWxpZGF0ZWQgPSBmYWxzZTsKQEAgLTIyNDQsNyArMjMxNSw3IEBAIHJlc3RhcnQ6CiAKIAkJaWYg KEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChwb3NzaWJsZV9jYXVzZXMsIHMsIG9sZGVz dExTTiwKIAkJCQkJCQkJCQkgICBkYm9pZCwgc25hcHNob3RDb25mbGljdEhvcml6b24sCi0JCQkJ CQkJCQkJICAgJnJlbGVhc2VkX2xvY2spKQorCQkJCQkJCQkJCSAgIHhpZExpbWl0LCAmcmVsZWFz ZWRfbG9jaykpCiAJCXsKIAkJCUFzc2VydChyZWxlYXNlZF9sb2NrKTsKIApAQCAtMzI3NSwzICsz MzQ2LDQ0IEBAIFdhaXRGb3JTdGFuZGJ5Q29uZmlybWF0aW9uKFhMb2dSZWNQdHIgd2FpdF9mb3Jf bHNuKQogCiAJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOwogfQorCisvKgorICogSW52 YWxpZGF0ZSByZXBsaWNhdGlvbiBzbG90cyB3aG9zZSBYSUQgYWdlIGV4Y2VlZHMgdGhlIG1heF9z bG90X3hpZF9hZ2UKKyAqIEdVQy4KKyAqCisgKiBUaGUgc2xvdF94bWluIGFuZCBzbG90X2NhdGFs b2dfeG1pbiBhcmUgdGhlIHJlcGxpY2F0aW9uIHNsb3QgeG1pbiB2YWx1ZXMKKyAqIG9idGFpbmVk IGZyb20gdGhlIHNhbWUgQ29tcHV0ZVhpZEhvcml6b25zKCkgY2FsbCB0aGF0IGNvbXB1dGVkIE9s ZGVzdFhtaW4KKyAqIGR1cmluZyB2YWN1dW0uIFVzaW5nIHRoZXNlIGF2b2lkcyBhIHNlcGFyYXRl IFByb2NBcnJheUxvY2sgYWNxdWlzaXRpb24uCisgKgorICogUmV0dXJucyB0cnVlIGlmIGF0IGxl YXN0IG9uZSBzbG90IHdhcyBpbnZhbGlkYXRlZC4KKyAqLworYm9vbAorTWF5YmVJbnZhbGlkYXRl WElEQWdlZFNsb3RzKFRyYW5zYWN0aW9uSWQgc2xvdF94bWluLAorCQkJCQkJCVRyYW5zYWN0aW9u SWQgc2xvdF9jYXRhbG9nX3htaW4pCit7CisJVHJhbnNhY3Rpb25JZCByZWNlbnRYaWQ7CisJVHJh bnNhY3Rpb25JZCB4aWRMaW1pdDsKKwlib29sCQlpbnZhbGlkYXRlZCA9IGZhbHNlOworCisJaWYg KG1heF9zbG90X3hpZF9hZ2UgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmVjZW50WGlkID0g UmVhZE5leHRUcmFuc2FjdGlvbklkKCk7CisJeGlkTGltaXQgPSBUcmFuc2FjdGlvbklkUmV0cmVh dGVkQnkocmVjZW50WGlkLCBtYXhfc2xvdF94aWRfYWdlKTsKKworCS8qCisJICogSW52YWxpZGF0 ZSBwb3NzaWJseSBvYnNvbGV0ZSBzbG90cyBiYXNlZCBvbiBYSUQtYWdlLCBpZiBlaXRoZXIgc2xv dCdzCisJICogeG1pbiBvciBjYXRhbG9nX3htaW4gaXMgb2xkZXIgdGhhbiB0aGUgY3V0b2ZmLgor CSAqLworCWlmICgoVHJhbnNhY3Rpb25JZElzVmFsaWQoc2xvdF94bWluKSAmJgorCQkgVHJhbnNh Y3Rpb25JZFByZWNlZGVzKHNsb3RfeG1pbiwgeGlkTGltaXQpKSB8fAorCQkoVHJhbnNhY3Rpb25J ZElzVmFsaWQoc2xvdF9jYXRhbG9nX3htaW4pICYmCisJCSBUcmFuc2FjdGlvbklkUHJlY2VkZXMo c2xvdF9jYXRhbG9nX3htaW4sIHhpZExpbWl0KSkpCisJCWludmFsaWRhdGVkID0gSW52YWxpZGF0 ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9YSURfQUdFLAorCQkJCQkJCQkJCQkJ CQkgMCwKKwkJCQkJCQkJCQkJCQkJIEludmFsaWRPaWQsCisJCQkJCQkJCQkJCQkJCSBJbnZhbGlk VHJhbnNhY3Rpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHhpZExpbWl0KTsKKworCXJldHVybiBpbnZh bGlkYXRlZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJh eS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggY2MyMDdjYjU2 ZTMuLjg5OGVmNGEwODMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j YXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtMTkz Nyw2ICsxOTM3LDMxIEBAIEdsb2JhbFZpc0hvcml6b25LaW5kRm9yUmVsKFJlbGF0aW9uIHJlbCkK IAkJcmV0dXJuIFZJU0hPUklaT05fVEVNUDsKIH0KIAorLyoKKyAqIEEgaGVscGVyIGZ1bmN0aW9u IHRvIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgb2xkZXN0IG5vbi1yZW1vdmFibGUKKyAqIFRyYW5z YWN0aW9uSWQgZnJvbSB0aGUgcHJlLWNvbXB1dGVkIGhvcml6b25zLCBiYXNlZCBvbiB0aGUgcmVs YXRpb24KKyAqIHR5cGUuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBU cmFuc2FjdGlvbklkCitHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkRnJvbUhvcml6 b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaG9yaXpvbnMsCisJCQkJCQkJCQkJCSAgIFJl bGF0aW9uIHJlbCkKK3sKKwlzd2l0Y2ggKEdsb2JhbFZpc0hvcml6b25LaW5kRm9yUmVsKHJlbCkp CisJeworCQljYXNlIFZJU0hPUklaT05fU0hBUkVEOgorCQkJcmV0dXJuIGhvcml6b25zLT5zaGFy ZWRfb2xkZXN0X25vbnJlbW92YWJsZTsKKwkJY2FzZSBWSVNIT1JJWk9OX0NBVEFMT0c6CisJCQly ZXR1cm4gaG9yaXpvbnMtPmNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZTsKKwkJY2FzZSBWSVNI T1JJWk9OX0RBVEE6CisJCQlyZXR1cm4gaG9yaXpvbnMtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJs ZTsKKwkJY2FzZSBWSVNIT1JJWk9OX1RFTVA6CisJCQlyZXR1cm4gaG9yaXpvbnMtPnRlbXBfb2xk ZXN0X25vbnJlbW92YWJsZTsKKwl9CisKKwkvKiBqdXN0IHRvIHByZXZlbnQgY29tcGlsZXIgd2Fy bmluZ3MgKi8KKwlyZXR1cm4gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Cit9CisKIC8qCiAgKiBSZXR1 cm4gdGhlIG9sZGVzdCBYSUQgZm9yIHdoaWNoIGRlbGV0ZWQgdHVwbGVzIG11c3QgYmUgcHJlc2Vy dmVkIGluIHRoZQogICogcGFzc2VkIHRhYmxlLgpAQCAtMTk1NSwyMCArMTk4MCwzMCBAQCBHZXRP bGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkKFJlbGF0aW9uIHJlbCkKIAogCUNvbXB1dGVY aWRIb3Jpem9ucygmaG9yaXpvbnMpOwogCi0Jc3dpdGNoIChHbG9iYWxWaXNIb3Jpem9uS2luZEZv clJlbChyZWwpKQotCXsKLQkJY2FzZSBWSVNIT1JJWk9OX1NIQVJFRDoKLQkJCXJldHVybiBob3Jp em9ucy5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZTsKLQkJY2FzZSBWSVNIT1JJWk9OX0NBVEFM T0c6Ci0JCQlyZXR1cm4gaG9yaXpvbnMuY2F0YWxvZ19vbGRlc3Rfbm9ucmVtb3ZhYmxlOwotCQlj YXNlIFZJU0hPUklaT05fREFUQToKLQkJCXJldHVybiBob3Jpem9ucy5kYXRhX29sZGVzdF9ub25y ZW1vdmFibGU7Ci0JCWNhc2UgVklTSE9SSVpPTl9URU1QOgotCQkJcmV0dXJuIGhvcml6b25zLnRl bXBfb2xkZXN0X25vbnJlbW92YWJsZTsKLQl9CisJcmV0dXJuIEdldE9sZGVzdE5vblJlbW92YWJs ZVRyYW5zYWN0aW9uSWRGcm9tSG9yaXpvbnMoJmhvcml6b25zLCByZWwpOworfQogCi0JLyoganVz dCB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzICovCi0JcmV0dXJuIEludmFsaWRUcmFuc2Fj dGlvbklkOworLyoKKyAqIFNhbWUgYXMgR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25J ZCgpLCBidXQgYWxzbyByZXR1cm5zIHRoZQorICogcmVwbGljYXRpb24gc2xvdCB4bWluIGFuZCBj YXRhbG9nX3htaW4gZnJvbSB0aGUgc2FtZSBDb21wdXRlWGlkSG9yaXpvbnMoKQorICogY2FsbC4g IFRoaXMgYXZvaWRzIGEgc2VwYXJhdGUgUHJvY0FycmF5TG9jayBhY3F1aXNpdGlvbiB3aGVuIHRo ZSBjYWxsZXIKKyAqIG5lZWRzIGJvdGggdmFsdWVzLgorICovCitUcmFuc2FjdGlvbklkCitHZXRP bGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkV2l0aFNsb3RYaWRzKFJlbGF0aW9uIHJlbCwK KwkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCAqc2xvdF94bWluLAorCQkJCQkJCQkJCQkgICBU cmFuc2FjdGlvbklkICpzbG90X2NhdGFsb2dfeG1pbikKK3sKKwlDb21wdXRlWGlkSG9yaXpvbnNS ZXN1bHQgaG9yaXpvbnM7CisKKwlDb21wdXRlWGlkSG9yaXpvbnMoJmhvcml6b25zKTsKKworCWlm IChzbG90X3htaW4pCisJCSpzbG90X3htaW4gPSBob3Jpem9ucy5zbG90X3htaW47CisJaWYgKHNs b3RfY2F0YWxvZ194bWluKQorCQkqc2xvdF9jYXRhbG9nX3htaW4gPSBob3Jpem9ucy5zbG90X2Nh dGFsb2dfeG1pbjsKKworCXJldHVybiBHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklk RnJvbUhvcml6b25zKCZob3Jpem9ucywgcmVsKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0 YW5kYnkuYwppbmRleCBkZTkwOTJmZGY1Yi4uZDYwZjM5ZWMwOGUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9zdGFuZGJ5LmMKQEAgLTUwNCw3ICs1MDQsOCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdp dGhTbmFwc2hvdChUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAogCSAqLwog CWlmIChJc0xvZ2ljYWxEZWNvZGluZ0VuYWJsZWQoKSAmJiBpc0NhdGFsb2dSZWwpCiAJCUludmFs aWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfSE9SSVpPTiwgMCwgbG9jYXRv ci5kYk9pZCwKLQkJCQkJCQkJCQkgICBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbik7CisJCQkJCQkJ CQkJICAgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5z YWN0aW9uSWQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdAppbmRleCAwYTg2MjY5M2ZjZC4uY2EzY2M4NDE3ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0yMDg5LDYgKzIwODksMTQgQEAKICAgbWF4ID0+ ICdNQVhfS0lMT0JZVEVTJywKIH0sCiAKK3sgbmFtZSA9PiAnbWF4X3Nsb3RfeGlkX2FnZScsIHR5 cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnUkVQTElDQVRJ T05fU0VORElORycsCisgIHNob3J0X2Rlc2MgPT4gJ0FnZSBvZiB0aGUgdHJhbnNhY3Rpb24gSUQg YXQgd2hpY2ggYSByZXBsaWNhdGlvbiBzbG90IGdldHMgaW52YWxpZGF0ZWQuJywKKyAgdmFyaWFi bGUgPT4gJ21heF9zbG90X3hpZF9hZ2UnLAorICBib290X3ZhbCA9PiAnMCcsCisgIG1pbiA9PiAn MCcsCisgIG1heCA9PiAnMjAwMDAwMDAwMCcsCit9LAorCiAjIFdlIHVzZSB0aGUgaG9wZWZ1bGx5 LXNhZmVseS1zbWFsbCB2YWx1ZSBvZiAxMDBrQiBhcyB0aGUgY29tcGlsZWQtaW4KICMgZGVmYXVs dCBmb3IgbWF4X3N0YWNrX2RlcHRoLiAgSW5pdGlhbGl6ZUdVQ09wdGlvbnMgd2lsbCBpbmNyZWFz ZSBpdAogIyBpZiBwb3NzaWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBhY3R1YWwgcGxhdGZvcm0tc3Bl Y2lmaWMgc3RhY2sgbGltaXQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKaW5kZXggY2YxNTU5NzM4NWIuLjA1NWViYTU2YmRmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zNTEsNiArMzUxLDgg QEAKICN3YWxfa2VlcF9zaXplID0gMCAgICAgICAgICAgICAgIyBpbiBtZWdhYnl0ZXM7IDAgZGlz YWJsZXMKICNtYXhfc2xvdF93YWxfa2VlcF9zaXplID0gLTEgICAgIyBpbiBtZWdhYnl0ZXM7IC0x IGRpc2FibGVzCiAjaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQgPSAwICAgICAgIyBpbiBz ZWNvbmRzOyAwIGRpc2FibGVzCisjbWF4X3Nsb3RfeGlkX2FnZSA9IDAgICAgICAgICAgICMgbWF4 aW11bSBYSUQgYWdlIGJlZm9yZSBhIHJlcGxpY2F0aW9uIHNsb3QKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBnZXRzIGludmFsaWRhdGVkOyAwIGRpc2FibGVzCiAjd2FsX3NlbmRl cl90aW1lb3V0ID0gNjBzICAgICAgICMgaW4gbWlsbGlzZWNvbmRzOyAwIGRpc2FibGVzCiAjdHJh Y2tfY29tbWl0X3RpbWVzdGFtcCA9IG9mZiAgICMgY29sbGVjdCB0aW1lc3RhbXAgb2YgdHJhbnNh Y3Rpb24gY29tbWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSBy ZXF1aXJlcyByZXN0YXJ0KQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVt LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAppbmRleCA1YjgwMjM2MTZjMC4uOTMx NTAwZjA2NjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCkBAIC0yODcsNiArMjg3LDE1IEBAIHN0cnVj dCBWYWN1dW1DdXRvZmZzCiAJICovCiAJVHJhbnNhY3Rpb25JZCBGcmVlemVMaW1pdDsKIAlNdWx0 aVhhY3RJZCBNdWx0aVhhY3RDdXRvZmY7CisKKwkvKgorCSAqIFJlcGxpY2F0aW9uIHNsb3QgeG1p biBhbmQgY2F0YWxvZ194bWluIHZhbHVlcyBvYnRhaW5lZCBmcm9tIHRoZSBzYW1lCisJICogQ29t cHV0ZVhpZEhvcml6b25zKCkgY2FsbCB0aGF0IGNvbXB1dGVkIE9sZGVzdFhtaW4uIFRoZXNlIGFy ZSB1c2VkIGZvcgorCSAqIFhJRC1hZ2UtYmFzZWQgcmVwbGljYXRpb24gc2xvdCBpbnZhbGlkYXRp b24gd2l0aG91dCByZXF1aXJpbmcgYW4gZXh0cmEKKwkgKiBQcm9jQXJyYXlMb2NrIGFjcXVpc2l0 aW9uLgorCSAqLworCVRyYW5zYWN0aW9uSWQgc2xvdF94bWluOworCVRyYW5zYWN0aW9uSWQgc2xv dF9jYXRhbG9nX3htaW47CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCmluZGV4IDRiNDcw OWY2ZTJjLi5kMTQzYjE5YTdiMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v c2xvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtNjYsMTAgKzY2 LDEyIEBAIHR5cGVkZWYgZW51bSBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZQogCVJT X0lOVkFMX1dBTF9MRVZFTCA9ICgxIDw8IDIpLAogCS8qIGlkbGUgc2xvdCB0aW1lb3V0IGhhcyBv Y2N1cnJlZCAqLwogCVJTX0lOVkFMX0lETEVfVElNRU9VVCA9ICgxIDw8IDMpLAorCS8qIHNsb3Qn cyB4bWluIG9yIGNhdGFsb2dfeG1pbiBoYXMgcmVhY2hlZCBtYXggeGlkIGFnZSAqLworCVJTX0lO VkFMX1hJRF9BR0UgPSAoMSA8PCA0KSwKIH0gUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1 c2U7CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGludmFsaWRhdGlvbiBjYXVzZXMgKi8KLSNkZWZp bmUJUlNfSU5WQUxfTUFYX0NBVVNFUyA0CisjZGVmaW5lCVJTX0lOVkFMX01BWF9DQVVTRVMgNQog CiAvKgogICogV2hlbiB0aGUgc2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIGlzIHJ1bm5pbmcs IG9yIHdoZW4KQEAgLTMyNiw2ICszMjgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgUmVwbGljYXRp b25TbG90ICpNeVJlcGxpY2F0aW9uU2xvdDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3Jl cGxpY2F0aW9uX3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKnN5bmNocm9uaXplZF9z dGFuZGJ5X3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBpZGxlX3JlcGxpY2F0aW9uX3Ns b3RfdGltZW91dF9zZWNzOworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfc2xvdF94aWRfYWdl OwogCiAvKiBzaG1lbSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiBTaXplIFJl cGxpY2F0aW9uU2xvdHNTaG1lbVNpemUodm9pZCk7CkBAIC0zNjcsNyArMzcwLDEwIEBAIGV4dGVy biB2b2lkIFJlcGxpY2F0aW9uU2xvdHNEcm9wREJTbG90cyhPaWQgZGJvaWQpOwogZXh0ZXJuIGJv b2wgSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyh1aW50MzIgcG9zc2libGVfY2F1 c2VzLAogCQkJCQkJCQkJCQkgICBYTG9nU2VnTm8gb2xkZXN0U2Vnbm8sCiAJCQkJCQkJCQkJCSAg IE9pZCBkYm9pZCwKLQkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0 SG9yaXpvbik7CisJCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhv cml6b24sCisJCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeGlkTGltaXQpOworZXh0ZXJuIGJv b2wgTWF5YmVJbnZhbGlkYXRlWElEQWdlZFNsb3RzKFRyYW5zYWN0aW9uSWQgc2xvdF94bWluLAor CQkJCQkJCQkJCVRyYW5zYWN0aW9uSWQgc2xvdF9jYXRhbG9nX3htaW4pOwogZXh0ZXJuIFJlcGxp Y2F0aW9uU2xvdCAqU2VhcmNoTmFtZWRSZXBsaWNhdGlvblNsb3QoY29uc3QgY2hhciAqbmFtZSwg Ym9vbCBuZWVkX2xvY2spOwogZXh0ZXJuIGludAlSZXBsaWNhdGlvblNsb3RJbmRleChSZXBsaWNh dGlvblNsb3QgKnNsb3QpOwogZXh0ZXJuIGJvb2wgUmVwbGljYXRpb25TbG90TmFtZShpbnQgaW5k ZXgsIE5hbWUgbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJh eS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCBhYmRmMDIxZTY2ZS4u YTk0MDkxY2U3ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtNTMsNiArNTMsOSBAQCBl eHRlcm4gUnVubmluZ1RyYW5zYWN0aW9ucyBHZXRSdW5uaW5nVHJhbnNhY3Rpb25EYXRhKHZvaWQp OwogCiBleHRlcm4gYm9vbCBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNzKFRyYW5zYWN0aW9uSWQg eGlkKTsKIGV4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0 aW9uSWQoUmVsYXRpb24gcmVsKTsKK2V4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdE5vblJl bW92YWJsZVRyYW5zYWN0aW9uSWRXaXRoU2xvdFhpZHMoUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJ CQkJCQkJCQlUcmFuc2FjdGlvbklkICpzbG90X3htaW4sCisJCQkJCQkJCQkJCQkJCQkJCVRyYW5z YWN0aW9uSWQgKnNsb3RfY2F0YWxvZ194bWluKTsKIGV4dGVybiBUcmFuc2FjdGlvbklkIEdldE9s ZGVzdFRyYW5zYWN0aW9uSWRDb25zaWRlcmVkUnVubmluZyh2b2lkKTsKIGV4dGVybiBUcmFuc2Fj dGlvbklkIEdldE9sZGVzdEFjdGl2ZVRyYW5zYWN0aW9uSWQoYm9vbCBpbkNvbW1pdE9ubHksCiAJ CQkJCQkJCQkJCQkgIGJvb2wgYWxsRGJzKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5 L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNs b3RfbGltaXQucGwKaW5kZXggN2IyNTNlNjRkOWMuLmM1ZjZlNWJiYTg3IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbAorKysgYi9zcmMvdGVzdC9y ZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbApAQCAtNTQwLDQgKzU0MCwxNjIgQEAgaXMo ICRwdWJsaXNoZXI0LT5zYWZlX3BzcWwoCiAkcHVibGlzaGVyNC0+c3RvcDsKICRzdWJzY3JpYmVy NC0+c3RvcDsKIAorIyBXYWl0IGZvciB0aGUgZ2l2ZW4gc2xvdCB0byBiZSBpbnZhbGlkYXRlZCB3 aXRoIHJlYXNvbiAneGlkX2FnZWQnCitzdWIgd2FpdF9mb3JfeGlkX2FnZWRfaW52YWxpZGF0aW9u Cit7CisJbXkgKCRub2RlLCAkc2xvdF9uYW1lKSA9IEBfOworCSRub2RlLT5wb2xsX3F1ZXJ5X3Vu dGlsKAorCQkncG9zdGdyZXMnLCBxcVsKKwkJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAxIEZS T00gcGdfcmVwbGljYXRpb25fc2xvdHMKKwkJCVdIRVJFIHNsb3RfbmFtZSA9ICckc2xvdF9uYW1l JyBBTkQKKwkJCWFjdGl2ZSA9IGZhbHNlIEFORAorCQkJaW52YWxpZGF0aW9uX3JlYXNvbiA9ICd4 aWRfYWdlZCc7CisJXSkgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2xvdCAkc2xvdF9u YW1lIHRvIGJlIGludmFsaWRhdGVkIjsKK30KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ug c3RhcnQ6IEludmFsaWRhdGUgcGh5c2ljYWwgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZSBH VUMKKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZSBmb3IgWElEIGFnZSB0ZXN0cworbXkgJHBy aW1hcnk1ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5NScpOworJHBy aW1hcnk1LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKworIyBEaXNhYmxl IGF1dG92YWN1dW0gc28gY2hlY2twb2ludGVyIHRyaWdnZXJzIHRoZSBpbnZhbGlkYXRpb24KK215 ICRtYXhfc2xvdF94aWRfYWdlID0gMTAwOworJHByaW1hcnk1LT5hcHBlbmRfY29uZigKKwkncG9z dGdyZXNxbC5jb25mJywgcXF7CittYXhfc2xvdF94aWRfYWdlID0gJG1heF9zbG90X3hpZF9hZ2UK K2F1dG92YWN1dW0gPSBvZmYKK30pOworCiskcHJpbWFyeTUtPnN0YXJ0OworCisjIENyZWF0ZSBh IHByb2NlZHVyZSB0byBjb25zdW1lIFhJRHMKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKAorCSdwb3N0 Z3JlcycsIHFxeworCUNSRUFURSBQUk9DRURVUkUgY29uc3VtZV94aWQoY250IGludCkKKwlBUyBc JFwkCisJREVDTEFSRQorCSAgICBpIGludDsKKwlCRUdJTgorCSAgICBGT1IgaSBJTiAxLi5jbnQg TE9PUAorCSAgICAgICAgRVhFQ1VURSAnU0VMRUNUIHBnX2N1cnJlbnRfeGFjdF9pZCgpJzsKKwkg ICAgICAgIENPTU1JVDsKKwkgICAgRU5EIExPT1A7CisJRU5EOworCVwkXCQgTEFOR1VBR0UgcGxw Z3NxbDsKK30pOworCisjIFRha2UgYSBiYWNrdXAgZm9yIGNyZWF0aW5nIHN0YW5kYnkKKyRiYWNr dXBfbmFtZSA9ICdiYWNrdXA1JzsKKyRwcmltYXJ5NS0+YmFja3VwKCRiYWNrdXBfbmFtZSk7CisK KyMgQ3JlYXRlIHN0YW5kYnkgd2l0aCBIUyBmZWVkYmFjayBzbyB0aGUgc2xvdCBnYWlucyBhbiB4 bWluCitteSAkc3RhbmRieTUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5k Ynk1Jyk7Ciskc3RhbmRieTUtPmluaXRfZnJvbV9iYWNrdXAoJHByaW1hcnk1LCAkYmFja3VwX25h bWUsIGhhc19zdHJlYW1pbmcgPT4gMSk7Ciskc3RhbmRieTUtPmFwcGVuZF9jb25mKAorCSdwb3N0 Z3Jlc3FsLmNvbmYnLCBxeworcHJpbWFyeV9zbG90X25hbWUgPSAnc2I1X3Nsb3QnCitob3Rfc3Rh bmRieV9mZWVkYmFjayA9IG9uCit3YWxfcmVjZWl2ZXJfc3RhdHVzX2ludGVydmFsID0gMQorfSk7 CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1QgcGdf Y3JlYXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3Qoc2xvdF9uYW1lIDo9ICdzYjVfc2xvdCcs IGltbWVkaWF0ZWx5X3Jlc2VydmUgOj0gdHJ1ZSk7CitdKTsKKyRzdGFuZGJ5NS0+c3RhcnQ7CisK KyMgQ3JlYXRlIHNvbWUgY29udGVudCBvbiBwcmltYXJ5IHRvIG1vdmUgeG1pbgorJHByaW1hcnk1 LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9pbnQ1IEFTIFNFTEVD VCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMgYSIpOworJHByaW1hcnk1LT53YWl0X2Zvcl9jYXRj aHVwKCRzdGFuZGJ5NSk7CisKKyMgV2FpdCBmb3IgdGhlIHBoeXNpY2FsIHNsb3QgdG8gZ2V0IHht aW4gdmlhIGhvdF9zdGFuZGJ5X2ZlZWRiYWNrCiskcHJpbWFyeTUtPnBvbGxfcXVlcnlfdW50aWwo CisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUIHhtaW4gSVMgTk9UIE5VTEwKKwkJRlJPTSBwZ19j YXRhbG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJCVdIRVJFIHNsb3RfbmFtZSA9ICdzYjVfc2xv dCc7CitdKSBvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBzbG90IHNiNV9zbG90IHhtaW4g ZnJvbSBIUyBmZWVkYmFjayI7CisKKyMgU3RvcCBzdGFuZGJ5IHNvIHRoZSBzbG90IGJlY29tZXMg aW5hY3RpdmUgd2l0aCBpdHMgeG1pbiBmcm96ZW4KKyRzdGFuZGJ5NS0+c3RvcDsKKworIyBBZHZh bmNlIFhJRHMgcGFzdCAyeCBtYXhfc2xvdF94aWRfYWdlIHNvIHRoZSBzbG90J3MgeG1pbiBpcyBz dGFsZSBlbm91Z2gKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDQUxMIGNvbnN1 bWVfeGlkKCIgLiAoMiAqICRtYXhfc2xvdF94aWRfYWdlKSAuICIpIik7CiskcHJpbWFyeTUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ0hFQ0tQT0lOVCIpOword2FpdF9mb3JfeGlkX2FnZWRfaW52 YWxpZGF0aW9uKCRwcmltYXJ5NSwgJ3NiNV9zbG90Jyk7CitvaygxLCAicGh5c2ljYWwgc2xvdCBp bnZhbGlkYXRlZCBkdWUgdG8gWElEIGFnZSAodmlhIGNoZWNrcG9pbnQpIik7CisKKyMgVGVzdGNh c2UgZW5kOiBJbnZhbGlkYXRlIHBoeXNpY2FsIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2Ug R1VDCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDogSW52 YWxpZGF0ZSBsb2dpY2FsIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UgR1VDCisKKyMgQ3Jl YXRlIGEgbG9naWNhbCBzbG90IGRpcmVjdGx5IG9uIHRoZSBwcmltYXJ5IChubyBzdWJzY3JpYmVy IG5lZWRlZCkuCisjIFRoZSBzbG90IGdldHMgYSBjYXRhbG9nX3htaW4gaW1tZWRpYXRlbHkgdXBv biBjcmVhdGlvbi4KKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBw Z19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdsc3ViNV9zbG90JywgJ3Bnb3V0cHV0 JykiKTsKKworJHByaW1hcnk1LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWwor CVNFTEVDVCBjYXRhbG9nX3htaW4gSVMgTk9UIE5VTEwKKwlGUk9NIHBnX2NhdGFsb2cucGdfcmVw bGljYXRpb25fc2xvdHMKKwlXSEVSRSBzbG90X25hbWUgPSAnbHN1YjVfc2xvdCc7CitdKSBvciBk aWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBzbG90IGxzdWI1X3Nsb3QgY2F0YWxvZ194bWluIjsK KworIyBBZHZhbmNlIFhJRHMgcGFzdCAyeCBtYXhfc2xvdF94aWRfYWdlIHNvIHRoZSBzbG90J3Mg Y2F0YWxvZ194bWluIGlzIHN0YWxlIGVub3VnaAorJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNBTEwgY29uc3VtZV94aWQoIiAuICgyICogJG1heF9zbG90X3hpZF9hZ2UpIC4gIiki KTsKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJWQUNVVU0gdGFiX2ludDUiKTsK K3dhaXRfZm9yX3hpZF9hZ2VkX2ludmFsaWRhdGlvbigkcHJpbWFyeTUsICdsc3ViNV9zbG90Jyk7 CitvaygxLCAibG9naWNhbCBzbG90IGludmFsaWRhdGVkIGR1ZSB0byBYSUQgYWdlICh2aWEgdmFj dXVtKSIpOworCisjIFRlc3RjYXNlIGVuZDogSW52YWxpZGF0ZSBsb2dpY2FsIHNsb3QgZHVlIHRv IG1heF9zbG90X3hpZF9hZ2UgR1VDCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IEludmFsaWRhdGUgbG9naWNhbCBzbG90IG9uIHN0YW5k YnkgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UgR1VDCisKKyMgRGlzYWJsZSBtYXhfc2xvdF94aWRf YWdlIG9uIHByaW1hcnkgYW5kIHJlY3JlYXRlIHRoZSBzdHJlYW1pbmcgc2xvdAorJHByaW1hcnk1 LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1lTVEVNIFNFVCBtYXhfc2xvdF94aWRf YWdlID0gMDsgU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7Iik7CiskcHJpbWFyeTUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90KCdzYjVfc2xv dCcpIik7CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfY3Jl YXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJ3NiNV9zbG90JywgdHJ1ZSkiKTsKKyRzdGFu ZGJ5NS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxeworbWF4X3Nsb3RfeGlk X2FnZSA9ICRtYXhfc2xvdF94aWRfYWdlCithdXRvdmFjdXVtID0gb2ZmCit9KTsKKyRzdGFuZGJ5 NS0+c3RhcnQ7CisKKyRwcmltYXJ5NS0+d2FpdF9mb3JfY2F0Y2h1cCgkc3RhbmRieTUpOworCisk c3RhbmRieTUtPmNyZWF0ZV9sb2dpY2FsX3Nsb3Rfb25fc3RhbmRieSgkcHJpbWFyeTUsICdzYjVf bG9naWNhbF9zbG90JywKKwkncG9zdGdyZXMnKTsKKworJHN0YW5kYnk1LT5wb2xsX3F1ZXJ5X3Vu dGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNFTEVDVCBjYXRhbG9nX3htaW4gSVMgTk9UIE5VTEwK KwlGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fc2xvdHMKKwlXSEVSRSBzbG90X25hbWUg PSAnc2I1X2xvZ2ljYWxfc2xvdCc7CitdKSBvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBz YjVfbG9naWNhbF9zbG90IGNhdGFsb2dfeG1pbiI7CisKKyMgQWR2YW5jZSBYSURzIG9uIHByaW1h cnksIHJlcGxheSBvbiBzdGFuZGJ5LCB0aGVuIHJlc3RhcnRwb2ludCB0byBpbnZhbGlkYXRlCisk cHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ0FMTCBjb25zdW1lX3hpZCgiIC4gKDIg KiAkbWF4X3Nsb3RfeGlkX2FnZSkgLiAiKSIpOworJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNIRUNLUE9JTlQiKTsKKyRwcmltYXJ5NS0+d2FpdF9mb3JfY2F0Y2h1cCgkc3RhbmRi eTUpOworJHN0YW5kYnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNIRUNLUE9JTlQiKTsKKwor d2FpdF9mb3JfeGlkX2FnZWRfaW52YWxpZGF0aW9uKCRzdGFuZGJ5NSwgJ3NiNV9sb2dpY2FsX3Ns b3QnKTsKK29rKDEsICJsb2dpY2FsIChzdGFuZGJ5KSBzbG90IGludmFsaWRhdGVkIGR1ZSB0byBY SUQgYWdlICh2aWEgcmVzdGFydHBvaW50KSIpOworCiskc3RhbmRieTUtPnN0b3A7CiskcHJpbWFy eTUtPnN0b3A7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIGxvZ2ljYWwgc2xvdCBvbiBz dGFuZGJ5IGR1ZSB0byBtYXhfc2xvdF94aWRfYWdlIEdVQworIyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --000000000000aebfc6064e6caa6e--