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 1w5GSx-0034YJ-0i for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 05:07:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5GSu-00BnYh-0m for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 05:07:36 +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 1w5GSt-00BnYZ-2V for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 05:07:36 +0000 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5GSq-000000010TV-3TLB for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 05:07:35 +0000 Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-5a12c19affeso1015344e87.1 for ; Tue, 24 Mar 2026 22:07:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774415251; cv=none; d=google.com; s=arc-20240605; b=PyY+5JySIMsuNKoctr3qxjAFgZuMdxmEJRBj8Ea+P9Q17qNz/NBVEyzmEQWvQ1zU5j 7aJ7z5d400XO+JwRaFsk1coONbEJs+fgZpHAI6Rb8P9F/M8VrDAPaXLKcd97gEqylN49 V+KhuN0xW80B8O0H7+sjlqx4D6C8SGxkn08UtUD7JaV+5ZUuxTvI/JU4hbYRg0Jk/Kfe BvBK1GHJjXxRMJb75DMQuhi3JsrQZn2brNJ3Icoym9rgc0m1rspO09daWVj7TJFgC/L7 7H6OZztMG2BUhlZqmCqcEmlbUDK4/jz7CoEbX/JLHyPdvTj3PkiRlkWFV2DCahHucUiB I5yg== 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=6zTN2p5XFhNqRLdpVcrxM2U3NVGQ1mezlxIQGBA/8gs=; fh=P/Ec44dRvW5yE0PkEmSmzDMWj3KMmm8gm/uiIdT0BAY=; b=cnOw5WK7pQ9CzLWrh8geEo0cDkPYJZa1KNX3W6i0Q8ojBXHc/5pG/lQIq0eCNsF4rv h9E0S/sOCFBIa/BDWnrENFphadMlQiMnQMDpNxtZ9A3YMfzWv4C9CAaMQCXtBsRvrg40 coNdar8Y2mtaMc0kkaYWt+LRNBrjvEE64hESSM2jitU59i/1sWiPsvHRNToOG+yjvNHa SCVafUgvydBhHlc0TvogNpKDvTuh2RRVj10CUsi6NF3YUavVLYbhkeBmaCU6Rq/Q0Jyq OIZYRhAdRl5mVi7ODjWYNzJ4YUVwLtK4ep9l3tNJHVkvRbCnbo6M4/mw880G4Ukxh+2K WKog==; darn=lists.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=1774415251; x=1775020051; darn=lists.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=6zTN2p5XFhNqRLdpVcrxM2U3NVGQ1mezlxIQGBA/8gs=; b=PuueHWmaiPoo2AFKx80rkj55gKDOOmvvWWXH091QDLz/gAjCBHKc9B1Z8nhCLJwSWg q0k0Z6H5PCW6cbLMNFX0idZ8OBQAWfFwgUDbjdIfscJOCpRm5wH4qgR/xHCZBnK+jOMj qLm26kzrqcDHQbJsaPhtDyu+Z3ItE5AncO8tTAcFn+4Aqn4yOPOlkK0/SRdrSFqNQBmp cqbzOP3MqavcVAuM9XlTBIRfpaJlum2Wfl0AUO2heQAkcrYolseZ6Fvt7VMc5jL9pcPa wBTZkxUJiLCZCGnLq9/SxhD3fq5QHylt2Vq0HYhlSLLTDCyZBjtkh7xKxd9+4fBI6JMV r0ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774415251; x=1775020051; 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=6zTN2p5XFhNqRLdpVcrxM2U3NVGQ1mezlxIQGBA/8gs=; b=eCw5+2IOIzopPWye5ZvtHdaYLIi9PlID5Cp40XMJLm1qSsoazEZGc745PPefuvi0Zh NZGet6/jk7FXuK4eE7mTSoD/RNQjiD8codIgyv8sUGxNbMa7UMzhymtC3P2ppsOJSXpT rV0a9taI+3L6yu0UuaGv0RPIYdSLE1BJZhNGYzfK0l7Izbj9LDA5bAuSq1iUMKAVOPSK 8ITkl8rUytRo8y4Y8S5vpDpfY+vAdDtItJJRqsY4+OaQ0axuUiBnecXnV45s77PPdT7I rC16A/w5qLf0Ea9Z315jwTidG07kaIBR1zb932ItRMRj7jobCQ5lXXT+vw1CM1AzOhoT xFSw== X-Forwarded-Encrypted: i=1; AJvYcCWGz2Nj9VvBAcNnIeT3j14hvKJCa+Se2sZVxVGevmBki2HN600aoqTVJ6sF4uF+3iRZr4cjhTGbQPxW7LdV@lists.postgresql.org X-Gm-Message-State: AOJu0YyuGbhOOCM+p45HolF92iaxMFipf0nx7VJ3ldT84DwHaPXXbP3A FB16PE+rheMMRXzaRUS/y7RW8aPBy4A5/wmgren3O0GPJ7GA65kSPmrO+Nuya9TGXkgWKwqqCM4 Gseu0LwuKshDHm2NgB1pLjCQUBj6qC8A= X-Gm-Gg: ATEYQzwRk764aKRprXvoPONGBQtrOAO6lZQF9j7mhxjg3O5Qu5P9XZNXusu9tDQiKGA NQ/XSdMN3tfeqC3fkAp3SAo8EPjKZliXbbRqwaUuN+YpxkAv17AZasGIJJfLHlHJdd/CaTV+FWs JFxK6Br3DHGxBmXH+czTNaoVtHN/HaOe9YFLg7ivPSSWV3IHefT9BzllyQ0i51JDuqG3wY5Nx1P Ab3h6hluGrhZi/LXr2leWlIMBsDdeDV08vASl6s+uc4qDd9E4MraL/cR1EFtR1C4O4TQsiNi7oI 8P4L4K2HeP4zMquClQg= X-Received: by 2002:a19:f607:0:b0:5a2:9b98:f280 with SMTP id 2adb3069b0e04-5a29b98f283mr582856e87.22.1774415251148; Tue, 24 Mar 2026 22:07:31 -0700 (PDT) MIME-Version: 1.0 References: <0c28fbd1-3320-4e9b-815c-6d62753aa063@wi3ck.info> In-Reply-To: From: Masahiko Sawada Date: Tue, 24 Mar 2026 22:06:54 -0700 X-Gm-Features: AQROBzACljqyeOyWrZr6cad5LKwn7GWwAb3RS4xli_BsfitqVyFTd4VaEbYuI5Q Message-ID: Subject: Re: Initial COPY of Logical Replication is too slow To: Amit Kapila Cc: Jan Wieck , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000baa967064dd23ee6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000baa967064dd23ee6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 24, 2026 at 11:57=E2=80=AFAM Masahiko Sawada wrote: > > On Tue, Mar 24, 2026 at 3:47=E2=80=AFAM Amit Kapila wrote: > > > > On Thu, Mar 19, 2026 at 4:59=E2=80=AFAM Masahiko Sawada wrote: > > > > > > On Wed, Mar 18, 2026 at 3:31=E2=80=AFPM Masahiko Sawada wrote: > > > > > > > > > > I've attached the patch to implement this idea. The patch still > > > introduces a new function but it overloads > > > pg_get_publication_tables(). We might be able to handle different > > > input (array or text) in pg_get_publication_tables() better, but it's > > > enough for discussion at least. > > > > > > > * > > + /* > > + * We can pass relid to pg_get_publication_table_info() since > > + * version 19. > > + */ > > + appendStringInfo(&cmd, > > + "SELECT DISTINCT" > > + " (CASE WHEN (array_length(gpt.attrs, 1) =3D c.relnatts)" > > + " THEN NULL ELSE gpt.attrs END)" > > + " FROM pg_publication p," > > + " LATERAL pg_get_publication_tables(p.pubname, %u) gpt," > > + " pg_class c" > > + " WHERE c.oid =3D gpt.relid" > > + " AND p.pubname IN ( %s )", > > + lrel->remoteid, > > + pub_names->data); > > > > Why in the above query we need a join with pg_publication? Can't we > > directly pass 'pub_names' and 'relid' to pg_get_publication_tables() > > to get the required information? > > Since the 'pub_names' is the list of publication names we cannot > directly pass it to the pg_get_publication_tables(). But if we make > pg_get_publication_tables() take {pubname text[], target_relid oid} > instead of {pubname text, target_relid oid}, yes. And it seems to help > somewhat simplify the patch. If having both > pg_get_publication_tables(VARIADIC text[]) and > pg_get_publication_tables(text[], oid) is not odd, it would be worth > trying it. > I figured out that the join with pg_publication works as a filter; non-existence publication names are not passed to the function. If we pass the list of publication names to the new function signature, while we can simplify the patch and avoid a join, we would change the existing function behavior so that it ignores non-existence publications. I've attached the updated patch. The 0001 patch just incorporated the review comments so far, and the 0002 patch is a draft change for the above idea. Since pg_get_publication_tables(VARIADIC text) is not a documented function, I think we can accept small behavior changes. So I'm going to go with this direction. Feedback is very welcome. --=20 Masahiko Sawada Amazon Web Services: https://aws.amazon.com --000000000000baa967064dd23ee6 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0002-POC-pass-the-list-of-publications-to-pg_get_publi.patch" Content-Disposition: attachment; filename="v4-0002-POC-pass-the-list-of-publications-to-pg_get_publi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn5kx21a0 RnJvbSAyYmNmNzQ0NzEwNTg5ZTg4YmZjZGIzNzBiYTVjMmIwOThjYmRhZTljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCAyNCBNYXIgMjAyNiAyMDo1OToyNiAtMDcwMApTdWJqZWN0OiBbUEFUQ0gg djQgMi8yXSBQT0M6IHBhc3MgdGhlIGxpc3Qgb2YgcHVibGljYXRpb25zIHRvCiBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKCkuCgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRp b24uYyAgICAgICAgfCAxNDAgKysrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgfCAgMjYgKystLQogc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdCAgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQgICB8ICA2MiArKysrKystLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgICAgfCAgNDkgKysrKy0tLQogNSBmaWxlcyBjaGFuZ2Vk LCAxNTQgaW5zZXJ0aW9ucygrKSwgMTI5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdf cHVibGljYXRpb24uYwppbmRleCBmNDY0OWRiZDhiOS4uMTgxZjk5OTkxNmMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEzNzcsNyArMTM3Nyw2IEBAIGlzX3RhYmxlX3B1 Ymxpc2hhYmxlX2luX3B1YmxpY2F0aW9uKE9pZCByZWxpZCwgUHVibGljYXRpb24gKnB1YikKICAq IEhlbHBlciBmdW5jdGlvbiB0byBnZXQgaW5mb3JtYXRpb24gb2YgdGhlIHRhYmxlcyBpbiB0aGUg Z2l2ZW4KICAqIHB1YmxpY2F0aW9uKHMpLgogICoKLSAqIFRoZSBwYXJhbWV0ZXJzIHB1Ym5hbWVz IGFuZCB7cHVibmFtZSwgdGFyZ2V0X3JlbGlkfSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogICog SWYgdGFyZ2V0X3JlbGlkIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpbmZvcm1h dGlvbiBvbmx5IGZvciB0aGF0CiAgKiBzcGVjaWZpYyB0YWJsZS4gT3RoZXJ3aXNlLCBpZiByZXR1 cm5zIGluZm9ybWF0aW9uIGZvciBhbGwgdGFibGVzIHdpdGhpbiB0aGUKICAqIHNwZWNpZmllZCBw dWJsaWNhdGlvbnMuCkBAIC0xMzg2LDcgKzEzODUsNyBAQCBpc190YWJsZV9wdWJsaXNoYWJsZV9p bl9wdWJsaWNhdGlvbihPaWQgcmVsaWQsIFB1YmxpY2F0aW9uICpwdWIpCiAgKi8KIHN0YXRpYyBE YXR1bQogcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg QXJyYXlUeXBlICpwdWJuYW1lcywKLQkJCQkJCSAgdGV4dCAqcHVibmFtZSwgT2lkIHRhcmdldF9y ZWxpZCkKKwkJCQkJCSAgT2lkIHRhcmdldF9yZWxpZCkKIHsKICNkZWZpbmUgTlVNX1BVQkxJQ0FU SU9OX1RBQkxFU19FTEVNCTQKIAlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CkBAIC0xMzk3LDYg KzEzOTYsMTAgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhGdW5jdGlvbkNhbGxJbmZvIGZj aW5mbywgQXJyYXlUeXBlICpwdWJuYW1lcywKIAl7CiAJCVR1cGxlRGVzYwl0dXBkZXNjOwogCQlN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCURhdHVtCSAgICplbGVtczsKKwkJaW50CQkJbmVs ZW1zLAorCQkJCQlpOworCQlib29sCQl2aWFyb290ID0gZmFsc2U7CiAKIAkJLyogY3JlYXRlIGEg ZnVuY3Rpb24gY29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJzaXN0ZW5jZSAqLwogCQlmdW5jY3R4 ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CkBAIC0xNDA0LDQ5ICsxNDA3LDM3IEBAIHBnX2dldF9w dWJsaWNhdGlvbl90YWJsZXMoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIEFycmF5VHlwZSAqcHVi bmFtZXMsCiAJCS8qIHN3aXRjaCB0byBtZW1vcnkgY29udGV4dCBhcHByb3ByaWF0ZSBmb3IgbXVs dGlwbGUgZnVuY3Rpb24gY2FsbHMgKi8KIAkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOwogCi0JCWlmIChwdWJuYW1lICE9 IE5VTEwpCi0JCXsKLQkJCS8qIFRyeSB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIHRhYmxlIGlu Zm9ybWF0aW9uICovCi0JCQlpZiAoU2VhcmNoU3lzQ2FjaGVFeGlzdHMxKFJFTE9JRCwgdGFyZ2V0 X3JlbGlkKSkKLQkJCXsKLQkJCQlQdWJsaWNhdGlvbiAqcHViOwotCi0JCQkJcHViID0gR2V0UHVi bGljYXRpb25CeU5hbWUodGV4dF90b19jc3RyaW5nKHB1Ym5hbWUpLCBmYWxzZSk7CisJCUFzc2Vy dChwdWJuYW1lcyAhPSBOVUxMKTsKIAotCQkJCWlmIChpc190YWJsZV9wdWJsaXNoYWJsZV9pbl9w dWJsaWNhdGlvbih0YXJnZXRfcmVsaWQsIHB1YikpCi0JCQkJewotCQkJCQlwdWJsaXNoZWRfcmVs ICp0YWJsZV9pbmZvID0gcGFsbG9jX29iamVjdChwdWJsaXNoZWRfcmVsKTsKKwkJLyoKKwkJICog RGVjb25zdHJ1Y3QgdGhlIHBhcmFtZXRlciBpbnRvIGVsZW1lbnRzIHdoZXJlIGVhY2ggZWxlbWVu dCBpcyBhCisJCSAqIHB1YmxpY2F0aW9uIG5hbWUuCisJCSAqLworCQlkZWNvbnN0cnVjdF9hcnJh eV9idWlsdGluKHB1Ym5hbWVzLCBURVhUT0lELCAmZWxlbXMsIE5VTEwsICZuZWxlbXMpOwogCi0J CQkJCXRhYmxlX2luZm8tPnJlbGlkID0gdGFyZ2V0X3JlbGlkOwotCQkJCQl0YWJsZV9pbmZvLT5w dWJpZCA9IHB1Yi0+b2lkOwotCQkJCQl0YWJsZV9pbmZvcyA9IGxhcHBlbmQodGFibGVfaW5mb3Ms IHRhYmxlX2luZm8pOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlCisJCS8qIEdldCBPaWRzIG9m IHRhYmxlcyBmcm9tIGVhY2ggcHVibGljYXRpb24uICovCisJCWZvciAoaSA9IDA7IGkgPCBuZWxl bXM7IGkrKykKIAkJewotCQkJRGF0dW0JICAgKmVsZW1zOwotCQkJaW50CQkJbmVsZW1zLAotCQkJ CQkJaTsKLQkJCWJvb2wJCXZpYXJvb3QgPSBmYWxzZTsKKwkJCVB1YmxpY2F0aW9uICpwdWJfZWxl bTsKKwkJCUxpc3QJICAgKnB1Yl9lbGVtX3RhYmxlcyA9IE5JTDsKKwkJCUxpc3RDZWxsICAgKmxj OwogCi0JCQlBc3NlcnQocHVibmFtZXMgIT0gTlVMTCk7CisJCQlwdWJfZWxlbSA9IEdldFB1Ymxp Y2F0aW9uQnlOYW1lKFRleHREYXR1bUdldENTdHJpbmcoZWxlbXNbaV0pLCB0cnVlKTsKIAotCQkJ LyoKLQkJCSAqIERlY29uc3RydWN0IHRoZSBwYXJhbWV0ZXIgaW50byBlbGVtZW50cyB3aGVyZSBl YWNoIGVsZW1lbnQgaXMgYQotCQkJICogcHVibGljYXRpb24gbmFtZS4KLQkJCSAqLwotCQkJZGVj b25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihwdWJuYW1lcywgVEVYVE9JRCwgJmVsZW1zLCBOVUxMLCAm bmVsZW1zKTsKKwkJCWlmIChwdWJfZWxlbSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOwogCi0JCQkv KiBHZXQgT2lkcyBvZiB0YWJsZXMgZnJvbSBlYWNoIHB1YmxpY2F0aW9uLiAqLwotCQkJZm9yIChp ID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCQkJaWYgKE9pZElzVmFsaWQodGFyZ2V0X3JlbGlkKSkK KwkJCXsKKwkJCQkvKiBUcnkgdG8gcmV0cmlldmUgdGhlIHNwZWNpZmllZCB0YWJsZSBpbmZvcm1h dGlvbiAqLworCQkJCWlmIChTZWFyY2hTeXNDYWNoZUV4aXN0czEoUkVMT0lELCB0YXJnZXRfcmVs aWQpICYmCisJCQkJCWlzX3RhYmxlX3B1Ymxpc2hhYmxlX2luX3B1YmxpY2F0aW9uKHRhcmdldF9y ZWxpZCwgcHViX2VsZW0pKQorCQkJCXsKKwkJCQkJcHViX2VsZW1fdGFibGVzID0gbGlzdF9tYWtl MV9vaWQodGFyZ2V0X3JlbGlkKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCiAJCQl7Ci0JCQkJUHVi bGljYXRpb24gKnB1Yl9lbGVtOwotCQkJCUxpc3QJICAgKnB1Yl9lbGVtX3RhYmxlcyA9IE5JTDsK LQkJCQlMaXN0Q2VsbCAgICpsYzsKLQotCQkJCXB1Yl9lbGVtID0gR2V0UHVibGljYXRpb25CeU5h bWUoVGV4dERhdHVtR2V0Q1N0cmluZyhlbGVtc1tpXSksIGZhbHNlKTsKLQogCQkJCS8qCiAJCQkJ ICogUHVibGljYXRpb25zIHN1cHBvcnQgcGFydGl0aW9uZWQgdGFibGVzLiBJZgogCQkJCSAqIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIGZhbHNlLCBhbGwgY2hhbmdlcyBhcmUKQEAgLTE0 NzMsNDUgKzE0NjQsNDUgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhGdW5jdGlvbkNhbGxJ bmZvIGZjaW5mbywgQXJyYXlUeXBlICpwdWJuYW1lcywKIAkJCQkJCQkJCQkJCQkJCQkJUFVCTElD QVRJT05fUEFSVF9MRUFGKTsKIAkJCQkJcHViX2VsZW1fdGFibGVzID0gbGlzdF9jb25jYXRfdW5p cXVlX29pZChyZWxpZHMsIHNjaGVtYXJlbGlkcyk7CiAJCQkJfQorCQkJfQogCi0JCQkJLyoKLQkJ CQkgKiBSZWNvcmQgdGhlIHB1Ymxpc2hlZCB0YWJsZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKLQkJ CQkgKiBwdWJsaWNhdGlvbiBzbyB0aGF0IHdlIGNhbiBnZXQgcm93IGZpbHRlcnMgYW5kIGNvbHVt biBsaXN0cwotCQkJCSAqIGxhdGVyLgotCQkJCSAqCi0JCQkJICogV2hlbiBhIHRhYmxlIGlzIHB1 Ymxpc2hlZCBieSBtdWx0aXBsZSBwdWJsaWNhdGlvbnMsIHRvCi0JCQkJICogb2J0YWluIGFsbCBy b3cgZmlsdGVycyBhbmQgY29sdW1uIGxpc3RzLCB0aGUgc3RydWN0dXJlCi0JCQkJICogcmVsYXRl ZCB0byB0aGlzIHRhYmxlIHdpbGwgYmUgcmVjb3JkZWQgbXVsdGlwbGUgdGltZXMuCi0JCQkJICov Ci0JCQkJZm9yZWFjaChsYywgcHViX2VsZW1fdGFibGVzKQotCQkJCXsKLQkJCQkJcHVibGlzaGVk X3JlbCAqdGFibGVfaW5mbyA9IHBhbGxvY19vYmplY3QocHVibGlzaGVkX3JlbCk7Ci0KLQkJCQkJ dGFibGVfaW5mby0+cmVsaWQgPSBsZmlyc3Rfb2lkKGxjKTsKLQkJCQkJdGFibGVfaW5mby0+cHVi aWQgPSBwdWJfZWxlbS0+b2lkOwotCQkJCQl0YWJsZV9pbmZvcyA9IGxhcHBlbmQodGFibGVfaW5m b3MsIHRhYmxlX2luZm8pOwotCQkJCX0KKwkJCS8qCisJCQkgKiBSZWNvcmQgdGhlIHB1Ymxpc2hl ZCB0YWJsZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKwkJCSAqIHB1YmxpY2F0aW9uIHNvIHRoYXQg d2UgY2FuIGdldCByb3cgZmlsdGVycyBhbmQgY29sdW1uIGxpc3RzCisJCQkgKiBsYXRlci4KKwkJ CSAqCisJCQkgKiBXaGVuIGEgdGFibGUgaXMgcHVibGlzaGVkIGJ5IG11bHRpcGxlIHB1YmxpY2F0 aW9ucywgdG8KKwkJCSAqIG9idGFpbiBhbGwgcm93IGZpbHRlcnMgYW5kIGNvbHVtbiBsaXN0cywg dGhlIHN0cnVjdHVyZQorCQkJICogcmVsYXRlZCB0byB0aGlzIHRhYmxlIHdpbGwgYmUgcmVjb3Jk ZWQgbXVsdGlwbGUgdGltZXMuCisJCQkgKi8KKwkJCWZvcmVhY2gobGMsIHB1Yl9lbGVtX3RhYmxl cykKKwkJCXsKKwkJCQlwdWJsaXNoZWRfcmVsICp0YWJsZV9pbmZvID0gcGFsbG9jX29iamVjdChw dWJsaXNoZWRfcmVsKTsKIAotCQkJCS8qCi0JCQkJICogQXQgbGVhc3Qgb25lIHB1YmxpY2F0aW9u IGlzIHVzaW5nCi0JCQkJICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QuCi0JCQkJICovCi0J CQkJaWYgKHB1Yl9lbGVtLT5wdWJ2aWFyb290KQotCQkJCQl2aWFyb290ID0gdHJ1ZTsKKwkJCQl0 YWJsZV9pbmZvLT5yZWxpZCA9IGxmaXJzdF9vaWQobGMpOworCQkJCXRhYmxlX2luZm8tPnB1Ymlk ID0gcHViX2VsZW0tPm9pZDsKKwkJCQl0YWJsZV9pbmZvcyA9IGxhcHBlbmQodGFibGVfaW5mb3Ms IHRhYmxlX2luZm8pOwogCQkJfQogCiAJCQkvKgotCQkJICogSWYgdGhlIHB1YmxpY2F0aW9uIHB1 Ymxpc2hlcyBwYXJ0aXRpb24gY2hhbmdlcyB2aWEgdGhlaXIKLQkJCSAqIHJlc3BlY3RpdmUgcm9v dCBwYXJ0aXRpb25lZCB0YWJsZXMsIHdlIG11c3QgZXhjbHVkZSBwYXJ0aXRpb25zCi0JCQkgKiBp biBmYXZvciBvZiBpbmNsdWRpbmcgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGVzLiBPdGhlcndp c2UsCi0JCQkgKiB0aGUgZnVuY3Rpb24gY291bGQgcmV0dXJuIGJvdGggdGhlIGNoaWxkIGFuZCBw YXJlbnQgdGFibGVzCi0JCQkgKiB3aGljaCBjb3VsZCBjYXVzZSBkYXRhIG9mIHRoZSBjaGlsZCB0 YWJsZSB0byBiZQotCQkJICogZG91YmxlLXB1Ymxpc2hlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LgorCQkJICogQXQgbGVhc3Qgb25lIHB1YmxpY2F0aW9uIGlzIHVzaW5nCisJCQkgKiBwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdC4KIAkJCSAqLwotCQkJaWYgKHZpYXJvb3QpCi0JCQkJZmlsdGVy X3BhcnRpdGlvbnModGFibGVfaW5mb3MpOworCQkJaWYgKHB1Yl9lbGVtLT5wdWJ2aWFyb290KQor CQkJCXZpYXJvb3QgPSB0cnVlOwogCQl9CiAKKwkJLyoKKwkJICogSWYgdGhlIHB1YmxpY2F0aW9u IHB1Ymxpc2hlcyBwYXJ0aXRpb24gY2hhbmdlcyB2aWEgdGhlaXIKKwkJICogcmVzcGVjdGl2ZSBy b290IHBhcnRpdGlvbmVkIHRhYmxlcywgd2UgbXVzdCBleGNsdWRlIHBhcnRpdGlvbnMKKwkJICog aW4gZmF2b3Igb2YgaW5jbHVkaW5nIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlcy4gT3RoZXJ3 aXNlLAorCQkgKiB0aGUgZnVuY3Rpb24gY291bGQgcmV0dXJuIGJvdGggdGhlIGNoaWxkIGFuZCBw YXJlbnQgdGFibGVzCisJCSAqIHdoaWNoIGNvdWxkIGNhdXNlIGRhdGEgb2YgdGhlIGNoaWxkIHRh YmxlIHRvIGJlCisJCSAqIGRvdWJsZS1wdWJsaXNoZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4K KwkJICovCisJCWlmICh2aWFyb290KQorCQkJZmlsdGVyX3BhcnRpdGlvbnModGFibGVfaW5mb3Mp OworCiAJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHRoZSByZXN1bHQgcm93 cy4gKi8KIAkJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKE5VTV9QVUJMSUNBVElP Tl9UQUJMRVNfRUxFTSk7CiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJl cikgMSwgInB1YmlkIiwKQEAgLTE2NDAsMTQgKzE2MzEsMjEgQEAgRGF0dW0KIHBnX2dldF9wdWJs aWNhdGlvbl90YWJsZXNfYShQR19GVU5DVElPTl9BUkdTKQogewogCS8qIEdldCB0aGUgaW5mb3Jt YXRpb24gb2YgdGhlIHRhYmxlcyBpbiB0aGUgZ2l2ZW4gcHVibGljYXRpb25zICovCi0JcmV0dXJu IHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoZmNpbmZvLCBQR19HRVRBUkdfQVJSQVlUWVBFX1Ao MCksIE5VTEwsIEludmFsaWRPaWQpOworCXJldHVybiBwZ19nZXRfcHVibGljYXRpb25fdGFibGVz KGZjaW5mbywgUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDApLCBJbnZhbGlkT2lkKTsKIH0KIAogRGF0 dW0KIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXNfYihQR19GVU5DVElPTl9BUkdTKQogeworCU9p ZCByZWxpZCA9IFBHX0dFVEFSR19PSUQoMSk7CisKKwlpZiAoIU9pZElzVmFsaWQocmVsaWQpKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coImludmFsaWQgcmVsYXRpb24gT0lEICV1IiwgcmVsaWQpKSk7 CisKIAkvKiBHZXQgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgdGFibGUgaW4gdGhl IGdpdmVuIHB1YmxpY2F0aW9uICovCi0JcmV0dXJuIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMo ZmNpbmZvLCBOVUxMLCBQR19HRVRBUkdfVEVYVF9QKDApLCBQR19HRVRBUkdfT0lEKDEpKTsKKwly ZXR1cm4gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhmY2luZm8sIFBHX0dFVEFSR19BUlJBWVRZ UEVfUCgwKSwgcmVsaWQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvdGFibGVzeW5jLmMKaW5kZXggZWM4ODQwZWJmNDIuLmQ3MGMxNzJlMGY1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTgwMiwyMCArODAyLDE4 IEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUs IExvZ2ljYWxSZXBSZWxhdGlvbiAqbHJlbCwKIAkJaWYgKHNlcnZlcl92ZXJzaW9uID49IDE5MDAw MCkKIAkJewogCQkJLyoKLQkJCSAqIFdlIGNhbiBwYXNzIHJlbGlkIHRvIHBnX2dldF9wdWJsaWNh dGlvbl90YWJsZSgpIHNpbmNlIHZlcnNpb24KLQkJCSAqIDE5LgorCQkJICogV2UgY2FuIHBhc3Mg Ym90aCBwdWJsaWNhdGlvbiBuYW1lcyBhbmQgcmVsaWQgdG8KKwkJCSAqIHBnX2dldF9wdWJsaWNh dGlvbl90YWJsZSgpIHNpbmNlIHZlcnNpb24gMTkuCiAJCQkgKi8KIAkJCWFwcGVuZFN0cmluZ0lu Zm8oJmNtZCwKIAkJCQkJCQkgIlNFTEVDVCBESVNUSU5DVCIKIAkJCQkJCQkgIiAgKENBU0UgV0hF TiAoYXJyYXlfbGVuZ3RoKGdwdC5hdHRycywgMSkgPSBjLnJlbG5hdHRzKSIKIAkJCQkJCQkgIiAg IFRIRU4gTlVMTCBFTFNFIGdwdC5hdHRycyBFTkQpIgotCQkJCQkJCSAiICBGUk9NIHBnX3B1Ymxp Y2F0aW9uIHAsIgotCQkJCQkJCSAiICBMQVRFUkFMIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMo cC5wdWJuYW1lLCAldSkgZ3B0LCIKKwkJCQkJCQkgIiAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25f dGFibGVzKEFSUkFZWyVzXSwgJXUpIGdwdCwiCiAJCQkJCQkJICIgIHBnX2NsYXNzIGMiCi0JCQkJ CQkJICIgV0hFUkUgYy5vaWQgPSBncHQucmVsaWQiCi0JCQkJCQkJICIgICBBTkQgcC5wdWJuYW1l IElOICggJXMgKSIsCi0JCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAotCQkJCQkJCSBwdWJfbmFtZXMt PmRhdGEpOworCQkJCQkJCSAiIFdIRVJFIGMub2lkID0gZ3B0LnJlbGlkIiwKKwkJCQkJCQkgcHVi X25hbWVzLT5kYXRhLAorCQkJCQkJCSBscmVsLT5yZW1vdGVpZCk7CiAJCX0KIAkJZWxzZQogCQkJ YXBwZW5kU3RyaW5nSW5mbygmY21kLApAQCAtMTAwNiwxNiArMTAwNCwxNCBAQCBmZXRjaF9yZW1v dGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVs YXRpb24gKmxyZWwsCiAJCWlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAxOTAwMDApCiAJCXsKIAkJCS8q Ci0JCQkgKiBXZSBjYW4gcGFzcyByZWxpZCB0byBwZ19nZXRfcHVibGljYXRpb25fdGFibGUoKSBz aW5jZSB2ZXJzaW9uCi0JCQkgKiAxOS4KKwkJCSAqIFdlIGNhbiBwYXNzIGJvdGggcHVibGljYXRp b24gbmFtZXMgYW5kIHJlbGlkIHRvCisJCQkgKiBwZ19nZXRfcHVibGljYXRpb25fdGFibGUoKSBz aW5jZSB2ZXJzaW9uIDE5LgogCQkJICovCiAJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCiAJCQkJ CQkJICJTRUxFQ1QgRElTVElOQ1QgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxpZCkiCi0J CQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCi0JCQkJCQkJICIgIExBVEVSQUwgcGdf Z2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUsICV1KSBncHQiCi0JCQkJCQkJICIgV0hF UkUgcC5wdWJuYW1lIElOICggJXMgKSIsCi0JCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAotCQkJCQkJ CSBwdWJfbmFtZXMtPmRhdGEpOworCQkJCQkJCSAiICBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90 YWJsZXMoQVJSQVlbJXNdLCAldSkgZ3B0IiwKKwkJCQkJCQkgcHViX25hbWVzLT5kYXRhLAorCQkJ CQkJCSBscmVsLT5yZW1vdGVpZCk7CiAJCX0KIAkJZWxzZQogCQkJYXBwZW5kU3RyaW5nSW5mbygm Y21kLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNmMyM2YzNjQ5NWYuLjMzNzI5ZDk1NzNh IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEyNDczLDEwICsxMjQ3MywxMCBAQAogICBk ZXNjciA9PiAnZ2V0IGluZm9ybWF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgdGFibGUgdGhhdCBpcyBw YXJ0IG9mIHRoZSBzcGVjaWZpZWQgcHVibGljYXRpb24nLAogICBwcm9uYW1lID0+ICdwZ19nZXRf cHVibGljYXRpb25fdGFibGVzJywgcHJvcm93cyA9PiAnMScsCiAgIHByb3JldHNldCA9PiAndCcs IHByb3ZvbGF0aWxlID0+ICdzJywKLSAgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlw ZXMgPT4gJ3RleHQgb2lkJywKLSAgcHJvYWxsYXJndHlwZXMgPT4gJ3t0ZXh0LG9pZCxvaWQsb2lk LGludDJ2ZWN0b3IscGdfbm9kZV90cmVlfScsCisgIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHBy b2FyZ3R5cGVzID0+ICdfdGV4dCBvaWQnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne190ZXh0LG9p ZCxvaWQsb2lkLGludDJ2ZWN0b3IscGdfbm9kZV90cmVlfScsCiAgIHByb2FyZ21vZGVzID0+ICd7 aSxpLG8sbyxvLG99JywKLSAgcHJvYXJnbmFtZXMgPT4gJ3twdWJuYW1lLHRhcmdldF9yZWxpZCxw dWJpZCxyZWxpZCxhdHRycyxxdWFsfScsCisgIHByb2FyZ25hbWVzID0+ICd7cHVibmFtZXMsdGFy Z2V0X3JlbGlkLHB1YmlkLHJlbGlkLGF0dHJzLHF1YWx9JywKICAgcHJvc3JjID0+ICdwZ19nZXRf cHVibGljYXRpb25fdGFibGVzX2InIH0sCiB7IG9pZCA9PiAnODA1MicsIGRlc2NyID0+ICdnZXQg T0lEcyBvZiBzZXF1ZW5jZXMgaW4gYSBwdWJsaWNhdGlvbicsCiAgIHByb25hbWUgPT4gJ3BnX2dl dF9wdWJsaWNhdGlvbl9zZXF1ZW5jZXMnLCBwcm9yb3dzID0+ICcxMDAwJywgcHJvcmV0c2V0ID0+ ICd0JywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24u b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggMmM4 NTlkZTZjNWUuLmM1ZjhlMDQ1MzA3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dApAQCAtMjI4Nyw3ICsyMjg3LDcgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9w YXJ0X2xlYWYgRk9SIFRBQkxFIHRibF9wYXJ0MSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb24K IENSRUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnQgRk9SIFRBQkxFIHRibF9wYXJlbnQg KGlkMSwgaWQyKSBXSEVSRSAoaWQxID0gMTApIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290ID0gdHJ1ZSk7CiBDUkVBVEUgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X25vdmlhX3Jv b3QgRk9SIFRBQkxFIHRibF9wYXJlbnQgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSBmYWxzZSk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwotQ1JFQVRFIEZVTkNUSU9OIHRl c3RfZ3B0KHB1Ym5hbWUgdGV4dCwgcmVsbmFtZSB0ZXh0KQorQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf Z3B0KHB1Ym5hbWVzIHRleHRbXSwgcmVsbmFtZSB0ZXh0KQogUkVUVVJOUyBUQUJMRSAoCiAgIHB1 Ym5hbWUgdGV4dCwKICAgcmVsbmFtZSBuYW1lLApAQCAtMjI5NiwxMDQgKzIyOTYsMTI1IEBAIFJF VFVSTlMgVEFCTEUgKAogKQogQkVHSU4gQVRPTUlDCiAgIFNFTEVDVCBwLnB1Ym5hbWUsIGMucmVs bmFtZSwgZ3B0LmF0dHJzOjp0ZXh0LCBwZ19nZXRfZXhwcihncHQucXVhbCwgZ3B0LnJlbGlkKQot ICAgIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwdWJuYW1lLCByZWxuYW1lOjpyZWdj bGFzczo6b2lkKSBncHQKKyAgICBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMocHVibmFt ZXMsIHJlbG5hbWU6OnJlZ2NsYXNzOjpvaWQpIGdwdAogICAgIEpPSU4gcGdfcHVibGljYXRpb24g cCBPTiBwLm9pZCA9IGdwdC5wdWJpZAogICAgIEpPSU4gcGdfY2xhc3MgYyBPTiBjLm9pZCA9IGdw dC5yZWxpZAogICBPUkRFUiBCWSBwLnB1Ym5hbWUsIGMucmVsbmFtZTsKIEVORDsKLVNFTEVDVCAq IEZST00gdGVzdF9ncHQoJ3B1Yl9ub3JtYWwnLCAndGJsX25vcm1hbCcpOworU0VMRUNUICogRlJP TSB0ZXN0X2dwdChBUlJBWVsncHViX25vcm1hbCddLCAndGJsX25vcm1hbCcpOwogICBwdWJuYW1l ICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCAgIHF1YWwgICAgCiAtLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0KICBwdWJfbm9ybWFsIHwgdGJsX25vcm1hbCB8IDEg ICAgIHwgKGlkIDwgMTApCiAoMSByb3cpCiAKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9u b3JtYWwnLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsgLS0gbm8gcmVzdWx0CitTRUxFQ1QgKiBG Uk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfbm9ybWFsJ10sICdncHRfdGVzdF9zY2gudGJsX3NjaCcp OyAtLSBubyByZXN1bHQKICBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKIC0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKLVNFTEVDVCAqIEZST00g dGVzdF9ncHQoJ3B1Yl9zY2hlbWEnLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsKK1NFTEVDVCAq IEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9zY2hlbWEnXSwgJ2dwdF90ZXN0X3NjaC50Ymxfc2No Jyk7CiAgIHB1Ym5hbWUgICB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCiAtLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCiAgcHViX3NjaGVtYSB8IHRibF9zY2ggfCAxICAgICB8 IAogKDEgcm93KQogCi1TRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfc2NoZW1hJywgJ3RibF9u b3JtYWwnKTsgLS0gbm8gcmVzdWx0CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJf c2NoZW1hJ10sICd0Ymxfbm9ybWFsJyk7IC0tIG5vIHJlc3VsdAogIHB1Ym5hbWUgfCByZWxuYW1l IHwgYXR0cnMgfCBxdWFsIAogLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQogKDAg cm93cykKIAotU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRfcGFyZW50JywgJ3RibF9w YXJlbnQnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudCdd LCAndGJsX3BhcmVudCcpOwogICAgICBwdWJuYW1lICAgICB8ICByZWxuYW1lICAgfCBhdHRycyB8 ICAgIHF1YWwgICAgCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0KICBwdWJfcGFydF9wYXJlbnQgfCB0YmxfcGFyZW50IHwgMSAyICAgfCAoaWQxID0g MTApCiAoMSByb3cpCiAKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X3BhcmVudCcs ICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZ WydwdWJfcGFydF9wYXJlbnQnXSwgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKICBwdWJuYW1l IHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKIC0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSst LS0tLS0KICgwIHJvd3MpCiAKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X3BhcmVu dF9ub3ZpYV9yb290JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0CitTRUxFQ1QgKiBGUk9N IHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnRfbm92aWFfcm9vdCddLCAndGJsX3BhcmVu dCcpOyAtLSBubyByZXN1bHQKICBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKIC0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKLVNFTEVDVCAqIEZS T00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X3BhcmVudF9ub3ZpYV9yb290JywgJ3RibF9wYXJ0MScpOwor U0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3Qn XSwgJ3RibF9wYXJ0MScpOwogICAgICAgICAgIHB1Ym5hbWUgICAgICAgICAgIHwgIHJlbG5hbWUg IHwgYXR0cnMgfCBxdWFsIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tKy0tLS0tLQogIHB1Yl9wYXJ0X3BhcmVudF9ub3ZpYV9yb290IHwgdGJsX3BhcnQx IHwgMSAyIDMgfCAKICgxIHJvdykKIAotU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRf bGVhZicsICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAorU0VMRUNUICogRlJPTSB0ZXN0X2dw dChBUlJBWVsncHViX3BhcnRfbGVhZiddLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKICBw dWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKIC0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0KICgwIHJvd3MpCiAKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0 X2xlYWYnLCAndGJsX3BhcnQxJyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJf cGFydF9sZWFmJ10sICd0YmxfcGFydDEnKTsKICAgICBwdWJuYW1lICAgIHwgIHJlbG5hbWUgIHwg YXR0cnMgfCBxdWFsIAogLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0t CiAgcHViX3BhcnRfbGVhZiB8IHRibF9wYXJ0MSB8IDEgMiAzIHwgCiAoMSByb3cpCiAKLVNFTEVD VCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGwnLCAndGJsX3BhcmVudCcpOworU0VMRUNUICogRlJP TSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbCddLCAndGJsX3BhcmVudCcpOwogIHB1Ym5hbWUgfCAg cmVsbmFtZSAgIHwgYXR0cnMgfCBxdWFsIAogLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLQogIHB1Yl9hbGwgfCB0YmxfcGFyZW50IHwgMSAyIDMgfCAKICgxIHJvdykKIAotU0VM RUNUICogRlJPTSB0ZXN0X2dwdCgncHViX2FsbCcsICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0 CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsJ10sICd0YmxfcGFydDEnKTsg LS0gbm8gcmVzdWx0CiAgcHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCiAtLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCiAoMCByb3dzKQogCi1TRUxFQ1QgKiBGUk9NIHRl c3RfZ3B0KCdwdWJfYWxsX2V4Y2VwdCcsICd0Ymxfbm9ybWFsJyk7CistLSB0d28gcm93cyB3aXRo IGRpZmZlcmVudCByb3cgZmlsdGVyCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJf YWxsJywgJ3B1Yl9ub3JtYWwnXSwgJ3RibF9ub3JtYWwnKTsKKyAgcHVibmFtZSAgIHwgIHJlbG5h bWUgICB8IGF0dHJzIHwgICBxdWFsICAgIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tLS0tCisgcHViX2FsbCAgICB8IHRibF9ub3JtYWwgfCAxICAgICB8IAorIHB1 Yl9ub3JtYWwgfCB0Ymxfbm9ybWFsIHwgMSAgICAgfCAoaWQgPCAxMCkKKygyIHJvd3MpCisKKy0t IG9uZSByb3cgd2l0aCAncHViX3BhcnRfcGFyZW50JworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChB UlJBWVsncHViX3BhcnRfcGFyZW50JywgJ3B1Yl9wYXJ0X3BhcmVudF9ub3ZpYV9yb290J10sICd0 YmxfcGFyZW50Jyk7CisgICAgIHB1Ym5hbWUgICAgIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgICAg cXVhbCAgICAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0t LS0tLQorIHB1Yl9wYXJ0X3BhcmVudCB8IHRibF9wYXJlbnQgfCAxIDIgICB8IChpZDEgPSAxMCkK KygxIHJvdykKKworLS0gbm8gcmVzdWx0LCBwYXJ0aXRpb25zIGFyZSBleGNsdWRlZAorU0VMRUNU ICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfcGFyZW50JywgJ3B1Yl9hbGwnXSwgJ3Ri bF9wYXJ0MScpOworIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0 X2dwdChBUlJBWVsncHViX2FsbF9leGNlcHQnXSwgJ3RibF9ub3JtYWwnKTsKICAgICBwdWJuYW1l ICAgICB8ICByZWxuYW1lICAgfCBhdHRycyB8IHF1YWwgCiAtLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tKy0tLS0tLQogIHB1Yl9hbGxfZXhjZXB0IHwgdGJsX25vcm1hbCB8IDEg ICAgIHwgCiAoMSByb3cpCiAKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfZXhjZXB0 JywgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVkZWQpCitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4Y2VwdCddLCAnZ3B0X3Rlc3Rfc2No LnRibF9zY2gnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKICBwdWJuYW1lIHwgcmVsbmFtZSB8 IGF0dHJzIHwgcXVhbCAKIC0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KICgwIHJv d3MpCiAKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfZXhjZXB0JywgJ3RibF9wYXJl bnQnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJS QVlbJ3B1Yl9hbGxfZXhjZXB0J10sICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVk ZWQpCiAgcHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCiAtLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tCiAoMCByb3dzKQogCi1TRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdw dWJfYWxsX2V4Y2VwdCcsICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKK1NF TEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGxfZXhjZXB0J10sICd0YmxfcGFydDEn KTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKICBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwg cXVhbCAKIC0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKLVNF TEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfbm92aWFfcm9vdCcsICd0YmxfcGFyZW50Jyk7 IC0tIG5vIHJlc3VsdAorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9ub3Zp YV9yb290J10sICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAogIHB1Ym5hbWUgfCByZWxuYW1l IHwgYXR0cnMgfCBxdWFsIAogLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQogKDAg cm93cykKIAotU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX2FsbF9ub3ZpYV9yb290JywgJ3Ri bF9wYXJ0MScpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9ub3ZpYV9y b290J10sICd0YmxfcGFydDEnKTsKICAgICAgIHB1Ym5hbWUgICAgICAgfCAgcmVsbmFtZSAgfCBh dHRycyB8IHF1YWwgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tKy0t LS0tLQogIHB1Yl9hbGxfbm92aWFfcm9vdCB8IHRibF9wYXJ0MSB8IDEgMiAzIHwgCkBAIC0yNDAx LDYgKzI0MjIsNyBAQCBTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX25vdmlhX3Jvb3Qn LCAndGJsX3BhcnQxJyk7CiAKIC0tIENsZWFuIHVwCiBEUk9QIEZVTkNUSU9OIHRlc3RfZ3B0KHRl eHQsIHRleHQpOworRVJST1I6ICBmdW5jdGlvbiB0ZXN0X2dwdCh0ZXh0LCB0ZXh0KSBkb2VzIG5v dCBleGlzdAogRFJPUCBQVUJMSUNBVElPTiBwdWJfYWxsOwogRFJPUCBQVUJMSUNBVElPTiBwdWJf YWxsX25vdmlhX3Jvb3Q7CiBEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0OwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4IGMxYzgzZjdkNzAxLi4yMDE2YzBhYWMwOCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbApAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAg Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVudCBGT1IgVEFCTEUgdGJsX3BhcmVudCAo aWQxLCBpZDIpIFdIRVJFIChpZDEgPQogQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVu dF9ub3ZpYV9yb290IEZPUiBUQUJMRSB0YmxfcGFyZW50IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gZmFsc2UpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIAotQ1JFQVRF IEZVTkNUSU9OIHRlc3RfZ3B0KHB1Ym5hbWUgdGV4dCwgcmVsbmFtZSB0ZXh0KQorQ1JFQVRFIEZV TkNUSU9OIHRlc3RfZ3B0KHB1Ym5hbWVzIHRleHRbXSwgcmVsbmFtZSB0ZXh0KQogUkVUVVJOUyBU QUJMRSAoCiAgIHB1Ym5hbWUgdGV4dCwKICAgcmVsbmFtZSBuYW1lLApAQCAtMTQ1NiwzNyArMTQ1 Niw0NiBAQCBSRVRVUk5TIFRBQkxFICgKICkKIEJFR0lOIEFUT01JQwogICBTRUxFQ1QgcC5wdWJu YW1lLCBjLnJlbG5hbWUsIGdwdC5hdHRyczo6dGV4dCwgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdw dC5yZWxpZCkKLSAgICBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMocHVibmFtZSwgcmVs bmFtZTo6cmVnY2xhc3M6Om9pZCkgZ3B0CisgICAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFi bGVzKHB1Ym5hbWVzLCByZWxuYW1lOjpyZWdjbGFzczo6b2lkKSBncHQKICAgICBKT0lOIHBnX3B1 YmxpY2F0aW9uIHAgT04gcC5vaWQgPSBncHQucHViaWQKICAgICBKT0lOIHBnX2NsYXNzIGMgT04g Yy5vaWQgPSBncHQucmVsaWQKICAgT1JERVIgQlkgcC5wdWJuYW1lLCBjLnJlbG5hbWU7CiBFTkQ7 CiAKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9ub3JtYWwnLCAndGJsX25vcm1hbCcpOwot U0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX25vcm1hbCcsICdncHRfdGVzdF9zY2gudGJsX3Nj aCcpOyAtLSBubyByZXN1bHQKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9ub3Jt YWwnXSwgJ3RibF9ub3JtYWwnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9u b3JtYWwnXSwgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7IC0tIG5vIHJlc3VsdAogCi1TRUxFQ1Qg KiBGUk9NIHRlc3RfZ3B0KCdwdWJfc2NoZW1hJywgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7Ci1T RUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfc2NoZW1hJywgJ3RibF9ub3JtYWwnKTsgLS0gbm8g cmVzdWx0CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfc2NoZW1hJ10sICdncHRf dGVzdF9zY2gudGJsX3NjaCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3Nj aGVtYSddLCAndGJsX25vcm1hbCcpOyAtLSBubyByZXN1bHQKIAotU0VMRUNUICogRlJPTSB0ZXN0 X2dwdCgncHViX3BhcnRfcGFyZW50JywgJ3RibF9wYXJlbnQnKTsKLVNFTEVDVCAqIEZST00gdGVz dF9ncHQoJ3B1Yl9wYXJ0X3BhcmVudCcsICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnQnXSwgJ3RibF9wYXJlbnQn KTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudCddLCAndGJs X3BhcnQxJyk7IC0tIG5vIHJlc3VsdAogCi1TRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfcGFy dF9wYXJlbnRfbm92aWFfcm9vdCcsICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAotU0VMRUNU ICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3QnLCAndGJsX3BhcnQx Jyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnRfbm92aWFf cm9vdCddLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKK1NFTEVDVCAqIEZST00gdGVzdF9n cHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudF9ub3ZpYV9yb290J10sICd0YmxfcGFydDEnKTsKIAot U0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRfbGVhZicsICd0YmxfcGFyZW50Jyk7IC0t IG5vIHJlc3VsdAotU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRfbGVhZicsICd0Ymxf cGFydDEnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X2xlYWYnXSwg J3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZ WydwdWJfcGFydF9sZWFmJ10sICd0YmxfcGFydDEnKTsKIAotU0VMRUNUICogRlJPTSB0ZXN0X2dw dCgncHViX2FsbCcsICd0YmxfcGFyZW50Jyk7Ci1TRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJf YWxsJywgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo QVJSQVlbJ3B1Yl9hbGwnXSwgJ3RibF9wYXJlbnQnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo QVJSQVlbJ3B1Yl9hbGwnXSwgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKIAotU0VMRUNUICog RlJPTSB0ZXN0X2dwdCgncHViX2FsbF9leGNlcHQnLCAndGJsX25vcm1hbCcpOwotU0VMRUNUICog RlJPTSB0ZXN0X2dwdCgncHViX2FsbF9leGNlcHQnLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsg LS0gbm8gcmVzdWx0IChleGNsdWRlZCkKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxf ZXhjZXB0JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKLVNFTEVDVCAq IEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfZXhjZXB0JywgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1 bHQgKGV4Y2x1ZGVkKQorLS0gdHdvIHJvd3Mgd2l0aCBkaWZmZXJlbnQgcm93IGZpbHRlcgorU0VM RUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbCcsICdwdWJfbm9ybWFsJ10sICd0Ymxf bm9ybWFsJyk7CiAKLVNFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfbm92aWFfcm9vdCcs ICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAotU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHVi X2FsbF9ub3ZpYV9yb290JywgJ3RibF9wYXJ0MScpOworLS0gb25lIHJvdyB3aXRoICdwdWJfcGFy dF9wYXJlbnQnCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnQn LCAncHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3QnXSwgJ3RibF9wYXJlbnQnKTsKKworLS0gbm8g cmVzdWx0LCBwYXJ0aXRpb25zIGFyZSBleGNsdWRlZAorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChB UlJBWVsncHViX3BhcnRfcGFyZW50JywgJ3B1Yl9hbGwnXSwgJ3RibF9wYXJ0MScpOworCitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4Y2VwdCddLCAndGJsX25vcm1hbCcp OworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9leGNlcHQnXSwgJ2dwdF90 ZXN0X3NjaC50Ymxfc2NoJyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVkZWQpCitTRUxFQ1QgKiBGUk9N IHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4Y2VwdCddLCAndGJsX3BhcmVudCcpOyAtLSBubyBy ZXN1bHQgKGV4Y2x1ZGVkKQorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9l eGNlcHQnXSwgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQgKGV4Y2x1ZGVkKQorCitTRUxFQ1Qg KiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX25vdmlhX3Jvb3QnXSwgJ3RibF9wYXJlbnQn KTsgLS0gbm8gcmVzdWx0CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX25v dmlhX3Jvb3QnXSwgJ3RibF9wYXJ0MScpOwogCiAtLSBDbGVhbiB1cAogRFJPUCBGVU5DVElPTiB0 ZXN0X2dwdCh0ZXh0LCB0ZXh0KTsKLS0gCjIuNTMuMAoK --000000000000baa967064dd23ee6 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-Avoid-full-table-scans-when-getting-publication-t.patch" Content-Disposition: attachment; filename="v4-0001-Avoid-full-table-scans-when-getting-publication-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn5kx21e1 RnJvbSBhZGI4ODIyZGRkNWZlMWY1ZjYxNmQzMTUxMjkzMGQ2MjM1OGEyNzJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyNyBGZWIgMjAyNiAxNTo0MjozOCAtMDgwMApTdWJqZWN0OiBbUEFUQ0gg djQgMS8yXSBBdm9pZCBmdWxsIHRhYmxlIHNjYW5zIHdoZW4gZ2V0dGluZyBwdWJsaWNhdGlvbiB0 YWJsZQogaW5mb3JtYXRpb24gYnkgdGFibGVzeW5jIHdvcmtlcnMuCgpSZXBvcnRlZC1ieTogTWFy Y29zIFBlZ29yYXJvIDxtYXJjb3NAZjEwLmNvbS5icj4KUmV2aWV3ZWQtYnk6IFpoaWppZSBIb3Ug KEZ1aml0c3UpIDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpSZXZpZXdlZC1ieTogTWF0aGV1cyBB bGNhbnRhcmEgPG1hdGhldXNzc2lsdjk3QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IENoYW8gTGkg PGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v Q0FCLUpMd2JCRk51QVN5RW5aV1AwVGNrOXVOa3RoQlpxaTZXb1hOZXZVVDYrbVY4WG1BQG1haWwu Z21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAg ICB8IDI5OSArKysrKysrKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC90YWJsZXN5bmMuYyB8ICA3NCArKystLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCAgICAgICAgICAgICB8ICAxMSArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJs aWNhdGlvbi5vdXQgICB8IDE0MSArKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1Ymxp Y2F0aW9uLnNxbCAgICAgICAgfCAgNzIgKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNTA3IGluc2Vy dGlvbnMoKyksIDkwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YwppbmRleCBjOTJmZjNmNTFjMy4uZjQ2NDlkYmQ4YjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMKQEAgLTEyNjQsMTIgKzEyNjQsMTI5IEBAIEdldFB1YmxpY2F0aW9uQnlOYW1l KGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wgbWlzc2luZ19vaykKIH0KIAogLyoKLSAqIEdldCBp bmZvcm1hdGlvbiBvZiB0aGUgdGFibGVzIGluIHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBhcnJheS4K KyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFibGUgb2YgdGhlIGdpdmVuIHJlbGlkIGlzIHB1Ymxp c2hlZCBmb3IgdGhlIHNwZWNpZmllZAorICogcHVibGljYXRpb24uCisgKgorICogVGhpcyBmdW5j dGlvbiBldmFsdWF0ZXMgdGhlIGVmZmVjdGl2ZSBwdWJsaXNoZWQgT0lEIGJhc2VkIG9uIHRoZQor ICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qgc2V0dGluZywgcmF0aGVyIHRoYW4ganVzdCBj aGVja2luZyBjYXRhbG9nIGVudHJpZXMKKyAqIChlLmcuLCBwZ19wdWJsaWNhdGlvbl9yZWwpLiBG b3IgaW5zdGFuY2UsIHdoZW4gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMKKyAqIGZhbHNl LCBpdCByZXR1cm5zIGZhbHNlIGZvciBhIHBhcmVudCBwYXJ0aXRpb25lZCB0YWJsZSBhbmQgdHJ1 ZSBmb3IgaXRzIGxlYWYKKyAqIHBhcnRpdGlvbnMsIGV2ZW4gaWYgdGhlIHBhcmVudCBpcyB0aGUg b25lIGV4cGxpY2l0bHkgYWRkZWQgdG8gdGhlIHB1YmxpY2F0aW9uLgorICoKKyAqIEZvciBwZXJm b3JtYW5jZSByZWFzb25zLCB0aGlzIGZ1bmN0aW9uIGF2b2lkcyB0aGUgb3ZlcmhlYWQgb2YgY29u c3RydWN0aW5nCisgKiB0aGUgY29tcGxldGUgbGlzdCBvZiBwdWJsaXNoZWQgdGFibGVzIGR1cmlu ZyB0aGUgZXZhbHVhdGlvbi4gSXQgY2FuIGV4ZWN1dGUKKyAqIHF1aWNrbHkgZXZlbiB3aGVuIHRo ZSBwdWJsaWNhdGlvbiBjb250YWlucyBhIGxhcmdlIG51bWJlciBvZiByZWxhdGlvbnMuCisgKi8K K3N0YXRpYyBib29sCitpc190YWJsZV9wdWJsaXNoYWJsZV9pbl9wdWJsaWNhdGlvbihPaWQgcmVs aWQsIFB1YmxpY2F0aW9uICpwdWIpCit7CisJaWYgKHB1Yi0+cHVidmlhcm9vdCkKKwl7CisJCWlm IChwdWItPmFsbHRhYmxlcykKKwkJeworCQkJLyoKKwkJCSAqIEFMTCBUQUJMRSBwdWJsaWNhdGlv bnMgd2l0aCBwdWJ2aWFyb290PXRydWUgaW5jbHVkZSBvbmx5IHRhYmxlcworCQkJICogdGhhdCBh cmUgZWl0aGVyIHJlZ3VsYXIgdGFibGVzIG9yIHRvcC1tb3N0IHBhcnRpdGlvbmVkIHRhYmxlcy4K KwkJCSAqLworCQkJaWYgKGdldF9yZWxfcmVsaXNwYXJ0aXRpb24ocmVsaWQpKQorCQkJCXJldHVy biBmYWxzZTsKKworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHRoZSB0YWJsZSBpcyBzcGVjaWZpZWQg aW4gdGhlIEVYQ0VQVCBjbGF1c2UgaW4gdGhlCisJCQkgKiBwdWJsaWNhdGlvbi4gQUxMIFRBQkxF IHB1YmxpY2F0aW9ucyBoYXZlIHBnX3B1YmxpY2F0aW9uX3JlbAorCQkJICogZW50cmllcyBvbmx5 IGZvciBFWENFUFQnZWQgdGFibGVzLCBzbyBpdCdzIHN1ZmZpY2llbnQgdG8gY2hlY2sKKwkJCSAq IHRoZSBleGlzdGVuY2Ugb2YgaXRzIGVudHJ5LgorCQkJICovCisJCQlyZXR1cm4gIVNlYXJjaFN5 c0NhY2hlRXhpc3RzMihQVUJMSUNBVElPTlJFTE1BUCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0 RGF0dW0ocmVsaWQpLAorCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCkpOwor CQl9CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgaXRzIGNvcnJlc3BvbmRpbmcgZW50cnkgZXhpc3Rz IGVpdGhlciBpbgorCQkgKiBwZ19wdWJsaWNhdGlvbl9yZWwgb3IgcGdfcHVibGljYXRpb25fbmFt ZXNwYWNlLgorCQkgKi8KKwkJcmV0dXJuIChTZWFyY2hTeXNDYWNoZUV4aXN0czIoUFVCTElDQVRJ T05SRUxNQVAsCisJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpLAorCQkJCQkJCQkJ ICBPYmplY3RJZEdldERhdHVtKHB1Yi0+b2lkKSkgfHwKKwkJCQlTZWFyY2hTeXNDYWNoZUV4aXN0 czIoUFVCTElDQVRJT05OQU1FU1BBQ0VNQVAsCisJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0o Z2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpKSwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShw dWItPm9pZCkpKTsKKwl9CisKKwkvKgorCSAqIEZvciBub24tcHVidmlhcm9vdCBwdWJsaWNhdGlv bnMsIHBhcnRpdGlvbmVkIHRhYmxlJ3MgT0lEIGNhbiBuZXZlciBiZSBhCisJICogcHVibGlzaGVk IE9JRC4KKwkgKi8KKwlpZiAoZ2V0X3JlbF9yZWxraW5kKHJlbGlkKSA9PSBSRUxLSU5EX1BBUlRJ VElPTkVEX1RBQkxFKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocHViLT5hbGx0YWJsZXMpCisJ eworCQlPaWQJCQl0YXJnZXRfcmVsaWQgPSByZWxpZDsKKworCQlpZiAoZ2V0X3JlbF9yZWxpc3Bh cnRpdGlvbihyZWxpZCkpCisJCXsKKwkJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRp b25fYW5jZXN0b3JzKHJlbGlkKTsKKworCQkJLyoKKwkJCSAqIE9ubHkgdGhlIHRvcC1tb3N0IGFu Y2VzdG9yIGNhbiBhcHBlYXIgaW4gdGhlIEVYQ0VQVCBjbGF1c2UuCisJCQkgKiBUaGVyZWZvcmUs IGZvciBhIHBhcnRpdGlvbiwgZXhjbHVzaW9uIG11c3QgYmUgZXZhbHVhdGVkIGF0IHRoZQorCQkJ ICogdG9wLW1vc3QgYW5jZXN0b3IuCisJCQkgKi8KKwkJCXRhcmdldF9yZWxpZCA9IGxsYXN0X29p ZChhbmNlc3RvcnMpOworCisJCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKwkJfQorCisJCS8qCisJ CSAqIFRoZSB0YWJsZSBpcyBwdWJsaXNoZWQgdW5sZXNzIGl0J3Mgc3BlY2lmaWVkIGluIHRoZSBF WENFUFQgY2xhdXNlLgorCQkgKiBBTEwgVEFCTEUgcHVibGljYXRpb25zIGhhdmUgcGdfcHVibGlj YXRpb25fcmVsIGVudHJpZXMgb25seSBmb3IKKwkJICogRVhDRVBUJ2VkIHRhYmxlcywgc28gaXQn cyBzdWZmaWNpZW50IHRvIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgaXRzCisJCSAqIGVudHJ5Lgor CQkgKi8KKwkJcmV0dXJuICFTZWFyY2hTeXNDYWNoZUV4aXN0czIoUFVCTElDQVRJT05SRUxNQVAs CisJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0odGFyZ2V0X3JlbGlkKSwKKwkJCQkJCQkJCSAg T2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCkpOworCX0KKworCWlmIChnZXRfcmVsX3JlbGlzcGFy dGl0aW9uKHJlbGlkKSkKKwl7CisJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25f YW5jZXN0b3JzKHJlbGlkKTsKKwkJT2lkCQkJdG9wbW9zdCA9IEdldFRvcE1vc3RBbmNlc3Rvcklu UHVibGljYXRpb24ocHViLT5vaWQsIGFuY2VzdG9ycywKKwkJCQkJCQkJCQkJCQkJCSAgTlVMTCk7 CisKKwkJbGlzdF9mcmVlKGFuY2VzdG9ycyk7CisKKwkJLyogVGhpcyB0YWJsZSBpcyBwdWJsaXNo ZWQgaWYgaXRzIGFuY2VzdG9yIGlzIHB1Ymxpc2hlZCAqLworCQlpZiAoT2lkSXNWYWxpZCh0b3Bt b3N0KSkKKwkJCXJldHVybiB0cnVlOworCisJCS8qIFRoZSBwYXJ0aXRpb24gaXRzZWxmIG1pZ2h0 IGJlIHB1Ymxpc2hlZCwgc28gY2hlY2sgYmVsb3cgKi8KKwl9CisKKwlyZXR1cm4gKFNlYXJjaFN5 c0NhY2hlRXhpc3RzMihQVUJMSUNBVElPTlJFTE1BUCwKKwkJCQkJCQkJICBPYmplY3RJZEdldERh dHVtKHJlbGlkKSwKKwkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHB1Yi0+b2lkKSkgfHwKKwkJ CVNlYXJjaFN5c0NhY2hlRXhpc3RzMihQVUJMSUNBVElPTk5BTUVTUEFDRU1BUCwKKwkJCQkJCQkJ ICBPYmplY3RJZEdldERhdHVtKGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKSksCisJCQkJCQkJCSAg T2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCkpKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlv biB0byBnZXQgaW5mb3JtYXRpb24gb2YgdGhlIHRhYmxlcyBpbiB0aGUgZ2l2ZW4KKyAqIHB1Ymxp Y2F0aW9uKHMpLgorICoKKyAqIFRoZSBwYXJhbWV0ZXJzIHB1Ym5hbWVzIGFuZCB7cHVibmFtZSwg dGFyZ2V0X3JlbGlkfSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorICogSWYgdGFyZ2V0X3JlbGlk IGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBvbmx5IGZvciB0 aGF0CisgKiBzcGVjaWZpYyB0YWJsZS4gT3RoZXJ3aXNlLCBpZiByZXR1cm5zIGluZm9ybWF0aW9u IGZvciBhbGwgdGFibGVzIHdpdGhpbiB0aGUKKyAqIHNwZWNpZmllZCBwdWJsaWNhdGlvbnMuCiAg KgogICogUmV0dXJucyBwdWJpZCwgcmVsaWQsIGNvbHVtbiBsaXN0LCByb3cgZmlsdGVyIGZvciBl YWNoIHRhYmxlLgogICovCi1EYXR1bQotcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5D VElPTl9BUkdTKQorc3RhdGljIERhdHVtCitwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLCBBcnJheVR5cGUgKnB1Ym5hbWVzLAorCQkJCQkJICB0ZXh0ICpw dWJuYW1lLCBPaWQgdGFyZ2V0X3JlbGlkKQogewogI2RlZmluZSBOVU1fUFVCTElDQVRJT05fVEFC TEVTX0VMRU0JNAogCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKQEAgLTEyODAsMTEgKzEzOTcs NiBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJewogCQlU dXBsZURlc2MJdHVwZGVzYzsKIAkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCQlBcnJheVR5 cGUgICphcnI7Ci0JCURhdHVtCSAgICplbGVtczsKLQkJaW50CQkJbmVsZW1zLAotCQkJCQlpOwot CQlib29sCQl2aWFyb290ID0gZmFsc2U7CiAKIAkJLyogY3JlYXRlIGEgZnVuY3Rpb24gY29udGV4 dCBmb3IgY3Jvc3MtY2FsbCBwZXJzaXN0ZW5jZSAqLwogCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FM TF9JTklUKCk7CkBAIC0xMjkyLDgxICsxNDA0LDExNCBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFi bGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS8qIHN3aXRjaCB0byBtZW1vcnkgY29udGV4dCBhcHBy b3ByaWF0ZSBmb3IgbXVsdGlwbGUgZnVuY3Rpb24gY2FsbHMgKi8KIAkJb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOwogCi0J CS8qCi0JCSAqIERlY29uc3RydWN0IHRoZSBwYXJhbWV0ZXIgaW50byBlbGVtZW50cyB3aGVyZSBl YWNoIGVsZW1lbnQgaXMgYQotCQkgKiBwdWJsaWNhdGlvbiBuYW1lLgotCQkgKi8KLQkJYXJyID0g UEdfR0VUQVJHX0FSUkFZVFlQRV9QKDApOwotCQlkZWNvbnN0cnVjdF9hcnJheV9idWlsdGluKGFy ciwgVEVYVE9JRCwgJmVsZW1zLCBOVUxMLCAmbmVsZW1zKTsKLQotCQkvKiBHZXQgT2lkcyBvZiB0 YWJsZXMgZnJvbSBlYWNoIHB1YmxpY2F0aW9uLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbmVsZW1z OyBpKyspCisJCWlmIChwdWJuYW1lICE9IE5VTEwpCiAJCXsKLQkJCVB1YmxpY2F0aW9uICpwdWJf ZWxlbTsKLQkJCUxpc3QJICAgKnB1Yl9lbGVtX3RhYmxlcyA9IE5JTDsKLQkJCUxpc3RDZWxsICAg KmxjOworCQkJLyogVHJ5IHRvIHJldHJpZXZlIHRoZSBzcGVjaWZpZWQgdGFibGUgaW5mb3JtYXRp b24gKi8KKwkJCWlmIChTZWFyY2hTeXNDYWNoZUV4aXN0czEoUkVMT0lELCB0YXJnZXRfcmVsaWQp KQorCQkJeworCQkJCVB1YmxpY2F0aW9uICpwdWI7CiAKLQkJCXB1Yl9lbGVtID0gR2V0UHVibGlj YXRpb25CeU5hbWUoVGV4dERhdHVtR2V0Q1N0cmluZyhlbGVtc1tpXSksIGZhbHNlKTsKKwkJCQlw dWIgPSBHZXRQdWJsaWNhdGlvbkJ5TmFtZSh0ZXh0X3RvX2NzdHJpbmcocHVibmFtZSksIGZhbHNl KTsKIAotCQkJLyoKLQkJCSAqIFB1YmxpY2F0aW9ucyBzdXBwb3J0IHBhcnRpdGlvbmVkIHRhYmxl cy4gSWYKLQkJCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIGZhbHNlLCBhbGwgY2hh bmdlcyBhcmUgcmVwbGljYXRlZAotCQkJICogdXNpbmcgbGVhZiBwYXJ0aXRpb24gaWRlbnRpdHkg YW5kIHNjaGVtYSwgc28gd2Ugb25seSBuZWVkCi0JCQkgKiB0aG9zZS4gT3RoZXJ3aXNlLCBnZXQg dGhlIHBhcnRpdGlvbmVkIHRhYmxlIGl0c2VsZi4KLQkJCSAqLwotCQkJaWYgKHB1Yl9lbGVtLT5h bGx0YWJsZXMpCi0JCQkJcHViX2VsZW1fdGFibGVzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlv bnMocHViX2VsZW0tPm9pZCwKLQkJCQkJCQkJCQkJCQkJCSBSRUxLSU5EX1JFTEFUSU9OLAotCQkJ CQkJCQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2aWFyb290KTsKLQkJCWVsc2UKLQkJCXsKLQkJCQlM aXN0CSAgICpyZWxpZHMsCi0JCQkJCQkgICAqc2NoZW1hcmVsaWRzOwotCi0JCQkJcmVsaWRzID0g R2V0SW5jbHVkZWRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAotCQkJCQkJCQkJ CQkJCQkgcHViX2VsZW0tPnB1YnZpYXJvb3QgPwotCQkJCQkJCQkJCQkJCQkgUFVCTElDQVRJT05f UEFSVF9ST09UIDoKLQkJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7Ci0JCQkJ c2NoZW1hcmVsaWRzID0gR2V0QWxsU2NoZW1hUHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0t Pm9pZCwKLQkJCQkJCQkJCQkJCQkJCQlwdWJfZWxlbS0+cHVidmlhcm9vdCA/Ci0JCQkJCQkJCQkJ CQkJCQkJUFVCTElDQVRJT05fUEFSVF9ST09UIDoKLQkJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElP Tl9QQVJUX0xFQUYpOwotCQkJCXB1Yl9lbGVtX3RhYmxlcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9v aWQocmVsaWRzLCBzY2hlbWFyZWxpZHMpOworCQkJCWlmIChpc190YWJsZV9wdWJsaXNoYWJsZV9p bl9wdWJsaWNhdGlvbih0YXJnZXRfcmVsaWQsIHB1YikpCisJCQkJeworCQkJCQlwdWJsaXNoZWRf cmVsICp0YWJsZV9pbmZvID0gcGFsbG9jX29iamVjdChwdWJsaXNoZWRfcmVsKTsKKworCQkJCQl0 YWJsZV9pbmZvLT5yZWxpZCA9IHRhcmdldF9yZWxpZDsKKwkJCQkJdGFibGVfaW5mby0+cHViaWQg PSBwdWItPm9pZDsKKwkJCQkJdGFibGVfaW5mb3MgPSBsYXBwZW5kKHRhYmxlX2luZm9zLCB0YWJs ZV9pbmZvKTsKKwkJCQl9CiAJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlEYXR1bQkgICAqZWxl bXM7CisJCQlpbnQJCQluZWxlbXMsCisJCQkJCQlpOworCQkJYm9vbAkJdmlhcm9vdCA9IGZhbHNl OworCisJCQlBc3NlcnQocHVibmFtZXMgIT0gTlVMTCk7CiAKIAkJCS8qCi0JCQkgKiBSZWNvcmQg dGhlIHB1Ymxpc2hlZCB0YWJsZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgcHVibGljYXRpb24gc28K LQkJCSAqIHRoYXQgd2UgY2FuIGdldCByb3cgZmlsdGVycyBhbmQgY29sdW1uIGxpc3RzIGxhdGVy LgotCQkJICoKLQkJCSAqIFdoZW4gYSB0YWJsZSBpcyBwdWJsaXNoZWQgYnkgbXVsdGlwbGUgcHVi bGljYXRpb25zLCB0byBvYnRhaW4KLQkJCSAqIGFsbCByb3cgZmlsdGVycyBhbmQgY29sdW1uIGxp c3RzLCB0aGUgc3RydWN0dXJlIHJlbGF0ZWQgdG8gdGhpcwotCQkJICogdGFibGUgd2lsbCBiZSBy ZWNvcmRlZCBtdWx0aXBsZSB0aW1lcy4KKwkJCSAqIERlY29uc3RydWN0IHRoZSBwYXJhbWV0ZXIg aW50byBlbGVtZW50cyB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYQorCQkJICogcHVibGljYXRpb24g bmFtZS4KIAkJCSAqLwotCQkJZm9yZWFjaChsYywgcHViX2VsZW1fdGFibGVzKQorCQkJZGVjb25z dHJ1Y3RfYXJyYXlfYnVpbHRpbihwdWJuYW1lcywgVEVYVE9JRCwgJmVsZW1zLCBOVUxMLCAmbmVs ZW1zKTsKKworCQkJLyogR2V0IE9pZHMgb2YgdGFibGVzIGZyb20gZWFjaCBwdWJsaWNhdGlvbi4g Ki8KKwkJCWZvciAoaSA9IDA7IGkgPCBuZWxlbXM7IGkrKykKIAkJCXsKLQkJCQlwdWJsaXNoZWRf cmVsICp0YWJsZV9pbmZvID0gcGFsbG9jX29iamVjdChwdWJsaXNoZWRfcmVsKTsKKwkJCQlQdWJs aWNhdGlvbiAqcHViX2VsZW07CisJCQkJTGlzdAkgICAqcHViX2VsZW1fdGFibGVzID0gTklMOwor CQkJCUxpc3RDZWxsICAgKmxjOworCisJCQkJcHViX2VsZW0gPSBHZXRQdWJsaWNhdGlvbkJ5TmFt ZShUZXh0RGF0dW1HZXRDU3RyaW5nKGVsZW1zW2ldKSwgZmFsc2UpOworCisJCQkJLyoKKwkJCQkg KiBQdWJsaWNhdGlvbnMgc3VwcG9ydCBwYXJ0aXRpb25lZCB0YWJsZXMuIElmCisJCQkJICogcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgZmFsc2UsIGFsbCBjaGFuZ2VzIGFyZQorCQkJCSAq IHJlcGxpY2F0ZWQgdXNpbmcgbGVhZiBwYXJ0aXRpb24gaWRlbnRpdHkgYW5kIHNjaGVtYSwgc28g d2UKKwkJCQkgKiBvbmx5IG5lZWQgdGhvc2UuIE90aGVyd2lzZSwgZ2V0IHRoZSBwYXJ0aXRpb25l ZCB0YWJsZQorCQkJCSAqIGl0c2VsZi4KKwkJCQkgKi8KKwkJCQlpZiAocHViX2VsZW0tPmFsbHRh YmxlcykKKwkJCQkJcHViX2VsZW1fdGFibGVzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMo cHViX2VsZW0tPm9pZCwKKwkJCQkJCQkJCQkJCQkJCQkgUkVMS0lORF9SRUxBVElPTiwKKwkJCQkJ CQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZpYXJvb3QpOworCQkJCWVsc2UKKwkJCQl7CisJCQkJ CUxpc3QJICAgKnJlbGlkcywKKwkJCQkJCQkgICAqc2NoZW1hcmVsaWRzOworCisJCQkJCXJlbGlk cyA9IEdldEluY2x1ZGVkUHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKKwkJCQkJ CQkJCQkJCQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCA/CisJCQkJCQkJCQkJCQkJCQkgUFVCTElD QVRJT05fUEFSVF9ST09UIDoKKwkJCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYp OworCQkJCQlzY2hlbWFyZWxpZHMgPSBHZXRBbGxTY2hlbWFQdWJsaWNhdGlvblJlbGF0aW9ucyhw dWJfZWxlbS0+b2lkLAorCQkJCQkJCQkJCQkJCQkJCQlwdWJfZWxlbS0+cHVidmlhcm9vdCA/CisJ CQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6CisJCQkJCQkJCQkJCQkJCQkJ CVBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7CisJCQkJCXB1Yl9lbGVtX3RhYmxlcyA9IGxpc3RfY29u Y2F0X3VuaXF1ZV9vaWQocmVsaWRzLCBzY2hlbWFyZWxpZHMpOworCQkJCX0KKworCQkJCS8qCisJ CQkJICogUmVjb3JkIHRoZSBwdWJsaXNoZWQgdGFibGUgYW5kIHRoZSBjb3JyZXNwb25kaW5nCisJ CQkJICogcHVibGljYXRpb24gc28gdGhhdCB3ZSBjYW4gZ2V0IHJvdyBmaWx0ZXJzIGFuZCBjb2x1 bW4gbGlzdHMKKwkJCQkgKiBsYXRlci4KKwkJCQkgKgorCQkJCSAqIFdoZW4gYSB0YWJsZSBpcyBw dWJsaXNoZWQgYnkgbXVsdGlwbGUgcHVibGljYXRpb25zLCB0bworCQkJCSAqIG9idGFpbiBhbGwg cm93IGZpbHRlcnMgYW5kIGNvbHVtbiBsaXN0cywgdGhlIHN0cnVjdHVyZQorCQkJCSAqIHJlbGF0 ZWQgdG8gdGhpcyB0YWJsZSB3aWxsIGJlIHJlY29yZGVkIG11bHRpcGxlIHRpbWVzLgorCQkJCSAq LworCQkJCWZvcmVhY2gobGMsIHB1Yl9lbGVtX3RhYmxlcykKKwkJCQl7CisJCQkJCXB1Ymxpc2hl ZF9yZWwgKnRhYmxlX2luZm8gPSBwYWxsb2Nfb2JqZWN0KHB1Ymxpc2hlZF9yZWwpOwogCi0JCQkJ dGFibGVfaW5mby0+cmVsaWQgPSBsZmlyc3Rfb2lkKGxjKTsKLQkJCQl0YWJsZV9pbmZvLT5wdWJp ZCA9IHB1Yl9lbGVtLT5vaWQ7Ci0JCQkJdGFibGVfaW5mb3MgPSBsYXBwZW5kKHRhYmxlX2luZm9z LCB0YWJsZV9pbmZvKTsKKwkJCQkJdGFibGVfaW5mby0+cmVsaWQgPSBsZmlyc3Rfb2lkKGxjKTsK KwkJCQkJdGFibGVfaW5mby0+cHViaWQgPSBwdWJfZWxlbS0+b2lkOworCQkJCQl0YWJsZV9pbmZv cyA9IGxhcHBlbmQodGFibGVfaW5mb3MsIHRhYmxlX2luZm8pOworCQkJCX0KKworCQkJCS8qCisJ CQkJICogQXQgbGVhc3Qgb25lIHB1YmxpY2F0aW9uIGlzIHVzaW5nCisJCQkJICogcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QuCisJCQkJICovCisJCQkJaWYgKHB1Yl9lbGVtLT5wdWJ2aWFyb290 KQorCQkJCQl2aWFyb290ID0gdHJ1ZTsKIAkJCX0KIAotCQkJLyogQXQgbGVhc3Qgb25lIHB1Ymxp Y2F0aW9uIGlzIHVzaW5nIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LiAqLwotCQkJaWYgKHB1 Yl9lbGVtLT5wdWJ2aWFyb290KQotCQkJCXZpYXJvb3QgPSB0cnVlOworCQkJLyoKKwkJCSAqIElm IHRoZSBwdWJsaWNhdGlvbiBwdWJsaXNoZXMgcGFydGl0aW9uIGNoYW5nZXMgdmlhIHRoZWlyCisJ CQkgKiByZXNwZWN0aXZlIHJvb3QgcGFydGl0aW9uZWQgdGFibGVzLCB3ZSBtdXN0IGV4Y2x1ZGUg cGFydGl0aW9ucworCQkJICogaW4gZmF2b3Igb2YgaW5jbHVkaW5nIHRoZSByb290IHBhcnRpdGlv bmVkIHRhYmxlcy4gT3RoZXJ3aXNlLAorCQkJICogdGhlIGZ1bmN0aW9uIGNvdWxkIHJldHVybiBi b3RoIHRoZSBjaGlsZCBhbmQgcGFyZW50IHRhYmxlcworCQkJICogd2hpY2ggY291bGQgY2F1c2Ug ZGF0YSBvZiB0aGUgY2hpbGQgdGFibGUgdG8gYmUKKwkJCSAqIGRvdWJsZS1wdWJsaXNoZWQgb24g dGhlIHN1YnNjcmliZXIgc2lkZS4KKwkJCSAqLworCQkJaWYgKHZpYXJvb3QpCisJCQkJZmlsdGVy X3BhcnRpdGlvbnModGFibGVfaW5mb3MpOwogCQl9CiAKLQkJLyoKLQkJICogSWYgdGhlIHB1Ymxp Y2F0aW9uIHB1Ymxpc2hlcyBwYXJ0aXRpb24gY2hhbmdlcyB2aWEgdGhlaXIgcmVzcGVjdGl2ZQot CQkgKiByb290IHBhcnRpdGlvbmVkIHRhYmxlcywgd2UgbXVzdCBleGNsdWRlIHBhcnRpdGlvbnMg aW4gZmF2b3Igb2YKLQkJICogaW5jbHVkaW5nIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlcy4g T3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24KLQkJICogY291bGQgcmV0dXJuIGJvdGggdGhlIGNoaWxk IGFuZCBwYXJlbnQgdGFibGVzIHdoaWNoIGNvdWxkIGNhdXNlCi0JCSAqIGRhdGEgb2YgdGhlIGNo aWxkIHRhYmxlIHRvIGJlIGRvdWJsZS1wdWJsaXNoZWQgb24gdGhlIHN1YnNjcmliZXIKLQkJICog c2lkZS4KLQkJICovCi0JCWlmICh2aWFyb290KQotCQkJZmlsdGVyX3BhcnRpdGlvbnModGFibGVf aW5mb3MpOwotCiAJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHRoZSByZXN1 bHQgcm93cy4gKi8KIAkJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKE5VTV9QVUJM SUNBVElPTl9UQUJMRVNfRUxFTSk7CiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0 ck51bWJlcikgMSwgInB1YmlkIiwKQEAgLTE0OTEsNiArMTYzNiwyMCBAQCBwZ19nZXRfcHVibGlj YXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgp OwogfQogCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlc19hKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJLyogR2V0IHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVzIGluIHRoZSBnaXZl biBwdWJsaWNhdGlvbnMgKi8KKwlyZXR1cm4gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhmY2lu Zm8sIFBHX0dFVEFSR19BUlJBWVRZUEVfUCgwKSwgTlVMTCwgSW52YWxpZE9pZCk7Cit9CisKK0Rh dHVtCitwZ19nZXRfcHVibGljYXRpb25fdGFibGVzX2IoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwkv KiBHZXQgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgdGFibGUgaW4gdGhlIGdpdmVu IHB1YmxpY2F0aW9uICovCisJcmV0dXJuIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoZmNpbmZv LCBOVUxMLCBQR19HRVRBUkdfVEVYVF9QKDApLCBQR19HRVRBUkdfT0lEKDEpKTsKK30KKwogLyoK ICAqIFJldHVybnMgT2lkcyBvZiBzZXF1ZW5jZXMgaW4gYSBwdWJsaWNhdGlvbi4KICAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXggZjQ5YTQ4NTJl Y2IuLmVjODg0MGViZjQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFi bGVzeW5jLmMKQEAgLTc5OCwxNyArNzk4LDM3IEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNo YXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsIExvZ2ljYWxSZXBSZWxhdGlvbiAqbHJlbCwKIAkJ ICogcHVibGljYXRpb25zKS4KIAkJICovCiAJCXJlc2V0U3RyaW5nSW5mbygmY21kKTsKLQkJYXBw ZW5kU3RyaW5nSW5mbygmY21kLAotCQkJCQkJICJTRUxFQ1QgRElTVElOQ1QiCi0JCQkJCQkgIiAg KENBU0UgV0hFTiAoYXJyYXlfbGVuZ3RoKGdwdC5hdHRycywgMSkgPSBjLnJlbG5hdHRzKSIKLQkJ CQkJCSAiICAgVEhFTiBOVUxMIEVMU0UgZ3B0LmF0dHJzIEVORCkiCi0JCQkJCQkgIiAgRlJPTSBw Z19wdWJsaWNhdGlvbiBwLCIKLQkJCQkJCSAiICBMQVRFUkFMIHBnX2dldF9wdWJsaWNhdGlvbl90 YWJsZXMocC5wdWJuYW1lKSBncHQsIgotCQkJCQkJICIgIHBnX2NsYXNzIGMiCi0JCQkJCQkgIiBX SEVSRSBncHQucmVsaWQgPSAldSBBTkQgYy5vaWQgPSBncHQucmVsaWQiCi0JCQkJCQkgIiAgIEFO RCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKLQkJCQkJCSBscmVsLT5yZW1vdGVpZCwKLQkJCQkJCSBw dWJfbmFtZXMtPmRhdGEpOworCisJCWlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAxOTAwMDApCisJCXsK KwkJCS8qCisJCQkgKiBXZSBjYW4gcGFzcyByZWxpZCB0byBwZ19nZXRfcHVibGljYXRpb25fdGFi bGUoKSBzaW5jZSB2ZXJzaW9uCisJCQkgKiAxOS4KKwkJCSAqLworCQkJYXBwZW5kU3RyaW5nSW5m bygmY21kLAorCQkJCQkJCSAiU0VMRUNUIERJU1RJTkNUIgorCQkJCQkJCSAiICAoQ0FTRSBXSEVO IChhcnJheV9sZW5ndGgoZ3B0LmF0dHJzLCAxKSA9IGMucmVsbmF0dHMpIgorCQkJCQkJCSAiICAg VEhFTiBOVUxMIEVMU0UgZ3B0LmF0dHJzIEVORCkiCisJCQkJCQkJICIgIEZST00gcGdfcHVibGlj YXRpb24gcCwiCisJCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhw LnB1Ym5hbWUsICV1KSBncHQsIgorCQkJCQkJCSAiICBwZ19jbGFzcyBjIgorCQkJCQkJCSAiIFdI RVJFIGMub2lkID0gZ3B0LnJlbGlkIgorCQkJCQkJCSAiICAgQU5EIHAucHVibmFtZSBJTiAoICVz ICkiLAorCQkJCQkJCSBscmVsLT5yZW1vdGVpZCwKKwkJCQkJCQkgcHViX25hbWVzLT5kYXRhKTsK KwkJfQorCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkJICJTRUxFQ1Qg RElTVElOQ1QiCisJCQkJCQkJICIgIChDQVNFIFdIRU4gKGFycmF5X2xlbmd0aChncHQuYXR0cnMs IDEpID0gYy5yZWxuYXR0cykiCisJCQkJCQkJICIgICBUSEVOIE5VTEwgRUxTRSBncHQuYXR0cnMg RU5EKSIKKwkJCQkJCQkgIiAgRlJPTSBwZ19wdWJsaWNhdGlvbiBwLCIKKwkJCQkJCQkgIiAgTEFU RVJBTCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKHAucHVibmFtZSkgZ3B0LCIKKwkJCQkJCQkg IiAgcGdfY2xhc3MgYyIKKwkJCQkJCQkgIiBXSEVSRSBncHQucmVsaWQgPSAldSBBTkQgYy5vaWQg PSBncHQucmVsaWQiCisJCQkJCQkJICIgICBBTkQgcC5wdWJuYW1lIElOICggJXMgKSIsCisJCQkJ CQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJCSBwdWJfbmFtZXMtPmRhdGEpOwogCiAJCXB1YnJl cyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLAogCQkJCQkJ CSBsZW5ndGhvZihhdHRyc1JvdyksIGF0dHJzUm93KTsKQEAgLTk4MiwxNCArMTAwMiwzMCBAQCBm ZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dp Y2FsUmVwUmVsYXRpb24gKmxyZWwsCiAKIAkJLyogQ2hlY2sgZm9yIHJvdyBmaWx0ZXJzLiAqLwog CQlyZXNldFN0cmluZ0luZm8oJmNtZCk7Ci0JCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwKLQkJCQkJ CSAiU0VMRUNUIERJU1RJTkNUIHBnX2dldF9leHByKGdwdC5xdWFsLCBncHQucmVsaWQpIgotCQkJ CQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCi0JCQkJCQkgIiAgTEFURVJBTCBwZ19nZXRf cHVibGljYXRpb25fdGFibGVzKHAucHVibmFtZSkgZ3B0IgotCQkJCQkJICIgV0hFUkUgZ3B0LnJl bGlkID0gJXUiCi0JCQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKLQkJCQkJCSBs cmVsLT5yZW1vdGVpZCwKLQkJCQkJCSBwdWJfbmFtZXMtPmRhdGEpOworCisJCWlmIChzZXJ2ZXJf dmVyc2lvbiA+PSAxOTAwMDApCisJCXsKKwkJCS8qCisJCQkgKiBXZSBjYW4gcGFzcyByZWxpZCB0 byBwZ19nZXRfcHVibGljYXRpb25fdGFibGUoKSBzaW5jZSB2ZXJzaW9uCisJCQkgKiAxOS4KKwkJ CSAqLworCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJCSAiU0VMRUNUIERJU1RJTkNU IHBnX2dldF9leHByKGdwdC5xdWFsLCBncHQucmVsaWQpIgorCQkJCQkJCSAiICBGUk9NIHBnX3B1 YmxpY2F0aW9uIHAsIgorCQkJCQkJCSAiICBMQVRFUkFMIHBnX2dldF9wdWJsaWNhdGlvbl90YWJs ZXMocC5wdWJuYW1lLCAldSkgZ3B0IgorCQkJCQkJCSAiIFdIRVJFIHAucHVibmFtZSBJTiAoICVz ICkiLAorCQkJCQkJCSBscmVsLT5yZW1vdGVpZCwKKwkJCQkJCQkgcHViX25hbWVzLT5kYXRhKTsK KwkJfQorCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkJICJTRUxFQ1Qg RElTVElOQ1QgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxpZCkiCisJCQkJCQkJICIgIEZS T00gcGdfcHVibGljYXRpb24gcCwiCisJCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0 aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCIKKwkJCQkJCQkgIiBXSEVSRSBncHQucmVsaWQgPSAl dSIKKwkJCQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKKwkJCQkJCQkgbHJlbC0+ cmVtb3RlaWQsCisJCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0YSk7CiAKIAkJcmVzID0gd2FscmN2X2V4 ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgY21kLmRhdGEsIDEsIHF1YWxSb3cpOwogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAppbmRleCAwMTE4ZTk3MGRkYS4uNmMyM2YzNjQ5NWYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdApAQCAtMTI0NjgsNyArMTI0NjgsMTYgQEAKICAgcHJvYWxsYXJndHlw ZXMgPT4gJ3tfdGV4dCxvaWQsb2lkLGludDJ2ZWN0b3IscGdfbm9kZV90cmVlfScsCiAgIHByb2Fy Z21vZGVzID0+ICd7dixvLG8sbyxvfScsCiAgIHByb2FyZ25hbWVzID0+ICd7cHVibmFtZSxwdWJp ZCxyZWxpZCxhdHRycyxxdWFsfScsCi0gIHByb3NyYyA9PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3Rh YmxlcycgfSwKKyAgcHJvc3JjID0+ICdwZ19nZXRfcHVibGljYXRpb25fdGFibGVzX2EnIH0sCit7 IG9pZCA9PiAnODA2MCcsCisgIGRlc2NyID0+ICdnZXQgaW5mb3JtYXRpb24gb2YgdGhlIHNwZWNp ZmllZCB0YWJsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIHNwZWNpZmllZCBwdWJsaWNhdGlvbicsCisg IHByb25hbWUgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMnLCBwcm9yb3dzID0+ICcxJywK KyAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBwcm9yZXR0eXBlID0+ ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAndGV4dCBvaWQnLAorICBwcm9hbGxhcmd0eXBlcyA9 PiAne3RleHQsb2lkLG9pZCxvaWQsaW50MnZlY3RvcixwZ19ub2RlX3RyZWV9JywKKyAgcHJvYXJn bW9kZXMgPT4gJ3tpLGksbyxvLG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAne3B1Ym5hbWUsdGFy Z2V0X3JlbGlkLHB1YmlkLHJlbGlkLGF0dHJzLHF1YWx9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRf cHVibGljYXRpb25fdGFibGVzX2InIH0sCiB7IG9pZCA9PiAnODA1MicsIGRlc2NyID0+ICdnZXQg T0lEcyBvZiBzZXF1ZW5jZXMgaW4gYSBwdWJsaWNhdGlvbicsCiAgIHByb25hbWUgPT4gJ3BnX2dl dF9wdWJsaWNhdGlvbl9zZXF1ZW5jZXMnLCBwcm9yb3dzID0+ICcxMDAwJywgcHJvcmV0c2V0ID0+ ICd0JywKICAgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdvaWQnLCBwcm9hcmd0 eXBlcyA9PiAndGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CmluZGV4IGEyMjBmNDhiMjg1Li4yYzg1OWRlNmM1ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTIyNzEsNiArMjI3MSwxNDcgQEAgRFJPUCBUQUJMRSB0 ZXN0cHViX21lcmdlX3BrOwogUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogRFJPUCBST0xF IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERS T1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXJfZHVtbXk7CistLSBUZXN0IHBnX2dldF9w dWJsaWNhdGlvbl90YWJsZXModGV4dCwgb2lkKSBmdW5jdGlvbgorQ1JFQVRFIFNDSEVNQSBncHRf dGVzdF9zY2g7CitDUkVBVEUgVEFCTEUgZ3B0X3Rlc3Rfc2NoLnRibF9zY2ggKGlkIGludCk7CitD UkVBVEUgVEFCTEUgdGJsX25vcm1hbCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSB0YmxfcGFyZW50 IChpZDEgaW50LCBpZDIgaW50LCBpZDMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkMSk7CitD UkVBVEUgVEFCTEUgdGJsX3BhcnQxIFBBUlRJVElPTiBPRiB0YmxfcGFyZW50IEZPUiBWQUxVRVMg RlJPTSAoMSkgVE8gKDEwKTsKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NS RUFURSBQVUJMSUNBVElPTiBwdWJfYWxsIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX2FsbF9ub3Zp YV9yb290IEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g ZmFsc2UpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0IEZPUiBBTEwgVEFCTEVT IEVYQ0VQVCBUQUJMRSAodGJsX3BhcmVudCwgZ3B0X3Rlc3Rfc2NoLnRibF9zY2gpOworQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1Yl9zY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgZ3B0X3Rlc3Rfc2No OworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9ub3JtYWwgRk9SIFRBQkxFIHRibF9ub3JtYWwgV0hF UkUgKGlkIDwgMTApOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X2xlYWYgRk9SIFRBQkxF IHRibF9wYXJ0MSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKK0NS RUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnQgRk9SIFRBQkxFIHRibF9wYXJlbnQgKGlk MSwgaWQyKSBXSEVSRSAoaWQxID0gMTApIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3Qg Rk9SIFRBQkxFIHRibF9wYXJlbnQgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBm YWxzZSk7CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf Z3B0KHB1Ym5hbWUgdGV4dCwgcmVsbmFtZSB0ZXh0KQorUkVUVVJOUyBUQUJMRSAoCisgIHB1Ym5h bWUgdGV4dCwKKyAgcmVsbmFtZSBuYW1lLAorICBhdHRycyB0ZXh0LAorICBxdWFsIHRleHQKKykK K0JFR0lOIEFUT01JQworICBTRUxFQ1QgcC5wdWJuYW1lLCBjLnJlbG5hbWUsIGdwdC5hdHRyczo6 dGV4dCwgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxpZCkKKyAgICBGUk9NIHBnX2dldF9w dWJsaWNhdGlvbl90YWJsZXMocHVibmFtZSwgcmVsbmFtZTo6cmVnY2xhc3M6Om9pZCkgZ3B0Cisg ICAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIHAub2lkID0gZ3B0LnB1YmlkCisgICAgSk9JTiBw Z19jbGFzcyBjIE9OIGMub2lkID0gZ3B0LnJlbGlkCisgIE9SREVSIEJZIHAucHVibmFtZSwgYy5y ZWxuYW1lOworRU5EOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX25vcm1hbCcsICd0Ymxf bm9ybWFsJyk7CisgIHB1Ym5hbWUgICB8ICByZWxuYW1lICAgfCBhdHRycyB8ICAgcXVhbCAgICAK Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLQorIHB1Yl9ub3Jt YWwgfCB0Ymxfbm9ybWFsIHwgMSAgICAgfCAoaWQgPCAxMCkKKygxIHJvdykKKworU0VMRUNUICog RlJPTSB0ZXN0X2dwdCgncHViX25vcm1hbCcsICdncHRfdGVzdF9zY2gudGJsX3NjaCcpOyAtLSBu byByZXN1bHQKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9n cHQoJ3B1Yl9zY2hlbWEnLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsKKyAgcHVibmFtZSAgIHwg cmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSst LS0tLS0KKyBwdWJfc2NoZW1hIHwgdGJsX3NjaCB8IDEgICAgIHwgCisoMSByb3cpCisKK1NFTEVD VCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9zY2hlbWEnLCAndGJsX25vcm1hbCcpOyAtLSBubyByZXN1 bHQKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1 Yl9wYXJ0X3BhcmVudCcsICd0YmxfcGFyZW50Jyk7CisgICAgIHB1Ym5hbWUgICAgIHwgIHJlbG5h bWUgICB8IGF0dHJzIHwgICAgcXVhbCAgICAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0tLS0tLQorIHB1Yl9wYXJ0X3BhcmVudCB8IHRibF9wYXJlbnQgfCAx IDIgICB8IChpZDEgPSAxMCkKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHVi X3BhcnRfcGFyZW50JywgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1lIHwgcmVs bmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0K KygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X3BhcmVudF9ub3Zp YV9yb290JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0CisgcHVibmFtZSB8IHJlbG5hbWUg fCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCBy b3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfcGFydF9wYXJlbnRfbm92aWFfcm9v dCcsICd0YmxfcGFydDEnKTsKKyAgICAgICAgICBwdWJuYW1lICAgICAgICAgICB8ICByZWxuYW1l ICB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLSstLS0tLS0KKyBwdWJfcGFydF9wYXJlbnRfbm92aWFfcm9vdCB8IHRibF9wYXJ0 MSB8IDEgMiAzIHwgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0 X2xlYWYnLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1lIHwgcmVsbmFtZSB8 IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJv d3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X2xlYWYnLCAndGJsX3BhcnQx Jyk7CisgICAgcHVibmFtZSAgICB8ICByZWxuYW1lICB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorIHB1Yl9wYXJ0X2xlYWYgfCB0Ymxf cGFydDEgfCAxIDIgMyB8IAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJf YWxsJywgJ3RibF9wYXJlbnQnKTsKKyBwdWJuYW1lIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgcXVh bCAKKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKyBwdWJfYWxsIHwgdGJs X3BhcmVudCB8IDEgMiAzIHwgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1 Yl9hbGwnLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorIHB1Ym5hbWUgfCByZWxuYW1lIHwg YXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93 cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX2FsbF9leGNlcHQnLCAndGJsX25vcm1h bCcpOworICAgIHB1Ym5hbWUgICAgIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgcXVhbCAKKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisgcHViX2FsbF9leGNlcHQg fCB0Ymxfbm9ybWFsIHwgMSAgICAgfCAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dw dCgncHViX2FsbF9leGNlcHQnLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsgLS0gbm8gcmVzdWx0 IChleGNsdWRlZCkKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVz dF9ncHQoJ3B1Yl9hbGxfZXhjZXB0JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0IChleGNs dWRlZCkKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo J3B1Yl9hbGxfZXhjZXB0JywgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQgKGV4Y2x1ZGVkKQor IHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX2Fs bF9ub3ZpYV9yb290JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0CisgcHVibmFtZSB8IHJl bG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0t CisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX25vdmlhX3Jvb3Qn LCAndGJsX3BhcnQxJyk7CisgICAgICBwdWJuYW1lICAgICAgIHwgIHJlbG5hbWUgIHwgYXR0cnMg fCBxdWFsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0K KyBwdWJfYWxsX25vdmlhX3Jvb3QgfCB0YmxfcGFydDEgfCAxIDIgMyB8IAorKDEgcm93KQorCist LSBDbGVhbiB1cAorRFJPUCBGVU5DVElPTiB0ZXN0X2dwdCh0ZXh0LCB0ZXh0KTsKK0RST1AgUFVC TElDQVRJT04gcHViX2FsbDsKK0RST1AgUFVCTElDQVRJT04gcHViX2FsbF9ub3ZpYV9yb290Owor RFJPUCBQVUJMSUNBVElPTiBwdWJfYWxsX2V4Y2VwdDsKK0RST1AgUFVCTElDQVRJT04gcHViX3Nj aGVtYTsKK0RST1AgUFVCTElDQVRJT04gcHViX25vcm1hbDsKK0RST1AgUFVCTElDQVRJT04gcHVi X3BhcnRfbGVhZjsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50OworRFJPUCBQVUJM SUNBVElPTiBwdWJfcGFydF9wYXJlbnRfbm92aWFfcm9vdDsKK0RST1AgVEFCTEUgdGJsX25vcm1h bCwgdGJsX3BhcmVudCwgdGJsX3BhcnQxOworRFJPUCBTQ0hFTUEgZ3B0X3Rlc3Rfc2NoIENBU0NB REU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdwdF90ZXN0X3NjaC50Ymxfc2No CiAtLSBzdGFnZSBvYmplY3RzIGZvciBwZ19kdW1wIHRlc3RzCiBDUkVBVEUgU0NIRU1BIHB1Ym1l IENSRUFURSBUQUJMRSB0MCAoYyBpbnQsIGQgaW50KSBDUkVBVEUgVEFCTEUgdDEgKGMgaW50KTsK IENSRUFURSBTQ0hFTUEgcHVibWUyIENSRUFURSBUQUJMRSB0MCAoYyBpbnQsIGQgaW50KTsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAppbmRleCAyMmUwYTMwYjVjNy4uYzFjODNmN2Q3 MDEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKQEAgLTE0MjksNiArMTQyOSw3 OCBAQCBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyLCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBST0xFIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlcl9kdW1teTsKIAorLS0gVGVzdCBwZ19nZXRfcHVibGljYXRpb25f dGFibGVzKHRleHQsIG9pZCkgZnVuY3Rpb24KK0NSRUFURSBTQ0hFTUEgZ3B0X3Rlc3Rfc2NoOwor Q1JFQVRFIFRBQkxFIGdwdF90ZXN0X3NjaC50Ymxfc2NoIChpZCBpbnQpOworQ1JFQVRFIFRBQkxF IHRibF9ub3JtYWwgKGlkIGludCk7CitDUkVBVEUgVEFCTEUgdGJsX3BhcmVudCAoaWQxIGludCwg aWQyIGludCwgaWQzIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZDEpOworQ1JFQVRFIFRBQkxF IHRibF9wYXJ0MSBQQVJUSVRJT04gT0YgdGJsX3BhcmVudCBGT1IgVkFMVUVTIEZST00gKDEpIFRP ICgxMCk7CisKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJM SUNBVElPTiBwdWJfYWxsIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290ID0gdHJ1ZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX2FsbF9ub3ZpYV9yb290IEZP UiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOwor Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBU QUJMRSAodGJsX3BhcmVudCwgZ3B0X3Rlc3Rfc2NoLnRibF9zY2gpOworQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1Yl9zY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgZ3B0X3Rlc3Rfc2NoOworQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1Yl9ub3JtYWwgRk9SIFRBQkxFIHRibF9ub3JtYWwgV0hFUkUgKGlkIDwg MTApOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X2xlYWYgRk9SIFRBQkxFIHRibF9wYXJ0 MSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKK0NSRUFURSBQVUJM SUNBVElPTiBwdWJfcGFydF9wYXJlbnQgRk9SIFRBQkxFIHRibF9wYXJlbnQgKGlkMSwgaWQyKSBX SEVSRSAoaWQxID0gMTApIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7 CitDUkVBVEUgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3QgRk9SIFRBQkxF IHRibF9wYXJlbnQgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CitS RVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ncHQocHVi bmFtZSB0ZXh0LCByZWxuYW1lIHRleHQpCitSRVRVUk5TIFRBQkxFICgKKyAgcHVibmFtZSB0ZXh0 LAorICByZWxuYW1lIG5hbWUsCisgIGF0dHJzIHRleHQsCisgIHF1YWwgdGV4dAorKQorQkVHSU4g QVRPTUlDCisgIFNFTEVDVCBwLnB1Ym5hbWUsIGMucmVsbmFtZSwgZ3B0LmF0dHJzOjp0ZXh0LCBw Z19nZXRfZXhwcihncHQucXVhbCwgZ3B0LnJlbGlkKQorICAgIEZST00gcGdfZ2V0X3B1YmxpY2F0 aW9uX3RhYmxlcyhwdWJuYW1lLCByZWxuYW1lOjpyZWdjbGFzczo6b2lkKSBncHQKKyAgICBKT0lO IHBnX3B1YmxpY2F0aW9uIHAgT04gcC5vaWQgPSBncHQucHViaWQKKyAgICBKT0lOIHBnX2NsYXNz IGMgT04gYy5vaWQgPSBncHQucmVsaWQKKyAgT1JERVIgQlkgcC5wdWJuYW1lLCBjLnJlbG5hbWU7 CitFTkQ7CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9ub3JtYWwnLCAndGJsX25vcm1h bCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX25vcm1hbCcsICdncHRfdGVzdF9zY2gu dGJsX3NjaCcpOyAtLSBubyByZXN1bHQKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3Nj aGVtYScsICdncHRfdGVzdF9zY2gudGJsX3NjaCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgn cHViX3NjaGVtYScsICd0Ymxfbm9ybWFsJyk7IC0tIG5vIHJlc3VsdAorCitTRUxFQ1QgKiBGUk9N IHRlc3RfZ3B0KCdwdWJfcGFydF9wYXJlbnQnLCAndGJsX3BhcmVudCcpOworU0VMRUNUICogRlJP TSB0ZXN0X2dwdCgncHViX3BhcnRfcGFyZW50JywgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQK KworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3QnLCAn dGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9w YXJ0X3BhcmVudF9ub3ZpYV9yb290JywgJ3RibF9wYXJ0MScpOworCitTRUxFQ1QgKiBGUk9NIHRl c3RfZ3B0KCdwdWJfcGFydF9sZWFmJywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0CitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfcGFydF9sZWFmJywgJ3RibF9wYXJ0MScpOworCitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsJywgJ3RibF9wYXJlbnQnKTsKK1NFTEVDVCAqIEZS T00gdGVzdF9ncHQoJ3B1Yl9hbGwnLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorCitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX2V4Y2VwdCcsICd0Ymxfbm9ybWFsJyk7CitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX2V4Y2VwdCcsICdncHRfdGVzdF9zY2gudGJsX3Nj aCcpOyAtLSBubyByZXN1bHQgKGV4Y2x1ZGVkKQorU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHVi X2FsbF9leGNlcHQnLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQgKGV4Y2x1ZGVkKQorU0VM RUNUICogRlJPTSB0ZXN0X2dwdCgncHViX2FsbF9leGNlcHQnLCAndGJsX3BhcnQxJyk7IC0tIG5v IHJlc3VsdCAoZXhjbHVkZWQpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfbm92 aWFfcm9vdCcsICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAorU0VMRUNUICogRlJPTSB0ZXN0 X2dwdCgncHViX2FsbF9ub3ZpYV9yb290JywgJ3RibF9wYXJ0MScpOworCistLSBDbGVhbiB1cAor RFJPUCBGVU5DVElPTiB0ZXN0X2dwdCh0ZXh0LCB0ZXh0KTsKK0RST1AgUFVCTElDQVRJT04gcHVi X2FsbDsKK0RST1AgUFVCTElDQVRJT04gcHViX2FsbF9ub3ZpYV9yb290OworRFJPUCBQVUJMSUNB VElPTiBwdWJfYWxsX2V4Y2VwdDsKK0RST1AgUFVCTElDQVRJT04gcHViX3NjaGVtYTsKK0RST1Ag UFVCTElDQVRJT04gcHViX25vcm1hbDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfbGVhZjsK K0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50OworRFJPUCBQVUJMSUNBVElPTiBwdWJf cGFydF9wYXJlbnRfbm92aWFfcm9vdDsKK0RST1AgVEFCTEUgdGJsX25vcm1hbCwgdGJsX3BhcmVu dCwgdGJsX3BhcnQxOworRFJPUCBTQ0hFTUEgZ3B0X3Rlc3Rfc2NoIENBU0NBREU7CisKIC0tIHN0 YWdlIG9iamVjdHMgZm9yIHBnX2R1bXAgdGVzdHMKIENSRUFURSBTQ0hFTUEgcHVibWUgQ1JFQVRF IFRBQkxFIHQwIChjIGludCwgZCBpbnQpIENSRUFURSBUQUJMRSB0MSAoYyBpbnQpOwogQ1JFQVRF IFNDSEVNQSBwdWJtZTIgQ1JFQVRFIFRBQkxFIHQwIChjIGludCwgZCBpbnQpOwotLSAKMi41My4w Cgo= --000000000000baa967064dd23ee6--