Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oZE8X-0006Od-TS for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Sep 2022 16:24:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oZE8V-0007iX-F2 for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Sep 2022 16:24:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oZE8U-0007iO-QB for pgsql-hackers@lists.postgresql.org; Fri, 16 Sep 2022 16:24:15 +0000 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oZE8R-0006K3-09 for pgsql-hackers@lists.postgresql.org; Fri, 16 Sep 2022 16:24:13 +0000 Received: by mail-wm1-x32c.google.com with SMTP id c2-20020a1c3502000000b003b2973dafb7so120466wma.2 for ; Fri, 16 Sep 2022 09:24:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:references:to:from:content-language:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date; bh=6X9/NHv2gLNv6J+9T7D292aYtddcnEaLrIJg54FviTk=; b=OzytyoR2Vh8/dNTvFrF90MXL+q+cs7zs6BKsIWQIZAwELiVgsc4rpN88ex5OOWQDWY yWEzzlMW9b3HhlIQx/4wZ2RykCdfiwGb693tDPyR4bcHnw8Qw3IaE1WVRp2TsD+QQWYT R+/ISJ+97m8PGYZREA+jn6+XHBa0tPFAaZyZOyH3tetEwyvcHE9stIXlzypP2ZgTSiG2 Y+PbSPRt8pK9JU9CfRf4U5UPrvhHt4Qh/rYU0RwJdL5mVsXj39/BWkJtsjRJw0z1bS7p a6+ZLw6q2WIHWjnVQ5d0zk/cMSuHDwtZiAP4HaSgmR9WYwlyNdaz/DUhtORCHwA07bN6 FYZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:to:from:content-language:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date; bh=6X9/NHv2gLNv6J+9T7D292aYtddcnEaLrIJg54FviTk=; b=xZMh+eIIHZwCPpbsKCQJjyv5U58HVSo0YxpVA2Nfd5ebTXzel11hnNDy73aMQoTto0 vHUzHzR96wR/5oDVCnfiweryDzoDC7zVC/WbosxpVf8MfY0TguElHU21qAEQUXwgiF63 SW5GIlkMumo6BBnek+Axy2PnM7sp+gsA87znAtliabsoaAenrjjQd4tbrZPckDxku9xh QLS33v0H0yrP3R7t9YH5B+8P7XHzqPLtvF81MBbFS5PCgl0RlwE7QvfOlL8O013Ma1ds VrCvbh6P+//ecs68LNf6vrd5a2cA4LglROFBwyvCKnonOgYq4QHP4mfPAMtb02cCYUp5 9UNg== X-Gm-Message-State: ACrzQf0wYfHOV/GY5chEcjYpUCRhvcBnQpjqjZ+EV000TKIiDjtppSCC 4dCquXR30e6KIPe8ZtcS6jc= X-Google-Smtp-Source: AMsMyM6wwbOKwhbxvI/50AvhiHGpmtsq5Oh7o6ejN+gEeflYaBZaKWRMcKSM47MCDezahZR+PGLjFg== X-Received: by 2002:a05:600c:a0b:b0:3ab:945:77c2 with SMTP id z11-20020a05600c0a0b00b003ab094577c2mr3944594wmp.201.1663345449568; Fri, 16 Sep 2022 09:24:09 -0700 (PDT) Received: from [192.168.1.10] ([54.239.6.188]) by smtp.gmail.com with ESMTPSA id z9-20020adff749000000b0022863395912sm5343124wrp.53.2022.09.16.09.24.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 16 Sep 2022 09:24:09 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------V8R8lmRMuF70t6sqwzdh1ly0" Message-ID: <72e14f66-a454-36e4-9e00-01b77e0b46c4@gmail.com> Date: Fri, 16 Sep 2022 18:24:07 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 Subject: Re: Patch proposal: make use of regular expressions for the username in pg_hba.conf Content-Language: en-US From: "Drouvot, Bertrand" To: Jacob Champion , PostgreSQL Hackers References: <42ec83af-21e4-320a-a973-db4ac1ed053e@timescale.com> <808019e5-5b28-4771-72fb-99e8013fc05e@amazon.com> In-Reply-To: <808019e5-5b28-4771-72fb-99e8013fc05e@amazon.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------V8R8lmRMuF70t6sqwzdh1ly0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, On 9/12/22 9:55 AM, Drouvot, Bertrand wrote: > Hi, > > On 9/10/22 1:21 AM, Jacob Champion wrote: >> On 8/19/22 01:12, Drouvot, Bertrand wrote: >>> + wstr = palloc((strlen(tok->string + 1) + 1) * sizeof(pg_wchar)); >>> + wlen = pg_mb2wchar_with_len(tok->string + 1, >>> + wstr, strlen(tok->string + 1)); >> The (tok->string + 1) construction comes up often enough that I think it >> should be put in a `regex` variable or similar. That would help my eyes >> with the (strlen(tok->string + 1) + 1) construction, especially. >> >> I noticed that for pg_ident, we precompile the regexes per-line and >> reuse those in child processes. Whereas here we're compiling, using, and >> then discarding the regex for each check. I think the example set by the >> pg_ident code is probably the one to follow, unless you have a good >> reason not to. > > Thanks for the feedback. > > Yeah fully agree. I'll provide a new version that follow the same logic > as the pg_ident code. > >>> +# Testing with regular expression for username >>> +reset_pg_hba($node, '/^.*md.*$', 'password'); >>> +test_role($node, 'md5_role', 'password from pgpass and regular expression for username', 0); >>> + >> IMO the coverage for this patch needs to be filled out. Negative test >> cases are more important than positive ones for security-related code. > > Agree, will do. > >> Other than that, and Tom's note on potentially expanding this to other >> areas, > > I'll add regexp usage for the database column and also the for the > address one when non CIDR is provided (so host name(s)) (I think it also > makes sense specially as we don't allow multiple values for this column). > Please find attached v2 addressing the comments mentioned above. v2 also provides regular expression usage for the database and the address columns (when a host name is being used). Remark: The CF bot is failing for Windows (all other tests are green) and only for the new tap test related to the regular expression on the host name (the ones on database and role are fine). The issue is not related to the patch. The issue is that the Windows Cirrus test does not like when a host name is provided for a "host" entry in pg_hba.conf (while it works fine when a CIDR is provided). You can see an example in [1] where the only change is to replace the CIDR by "localhost" in 002_scram.pl. As you can see the Cirrus tests are failing on Windows only (its log file is here [2]). I'll look at this "Windows" related issue but would appreciate any guidance/help if someone has experience in this area on windows. [1]: https://github.com/bdrouvot/postgres/branches on branch “host_non_cidr” [2]: https://api.cirrus-ci.com/v1/artifact/task/6507279833890816/log/src/test/ssl/tmp_check/log/002_scram_primary.log Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------V8R8lmRMuF70t6sqwzdh1ly0 Content-Type: text/plain; charset=UTF-8; name="v2-0001-hba_with_regexp.patch" Content-Disposition: attachment; filename="v2-0001-hba_with_regexp.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5zZ21sIGIvZG9jL3NyYy9z Z21sL2NsaWVudC1hdXRoLnNnbWwKaW5kZXggYzZmMWI3MGZkMy4uMjgzNDM0NDViZSAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NsaWVudC1hdXRoLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL2NsaWVudC1hdXRoLnNnbWwKQEAgLTIzNSw4ICsyMzUsOSBAQCBob3N0bm9nc3NlbmMg IDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFibGU+ICA8cmVwbGFjZWFibGU+dXNl cjwvcmVwbGFjZWFibAogICAgICAgIGxvZ2ljYWwgcmVwbGljYXRpb24gY29ubmVjdGlvbnMg ZG8gc3BlY2lmeSBpdC4KICAgICAgICBPdGhlcndpc2UsIHRoaXMgaXMgdGhlIG5hbWUgb2YK ICAgICAgICBhIHNwZWNpZmljIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gZGF0YWJhc2UuCi0gICAgICAgTXVsdGlwbGUgZGF0YWJhc2UgbmFtZXMgY2FuIGJlIHN1 cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoCi0gICAgICAgY29tbWFzLiAgQSBzZXBh cmF0ZSBmaWxlIGNvbnRhaW5pbmcgZGF0YWJhc2UgbmFtZXMgY2FuIGJlIHNwZWNpZmllZCBi eQorICAgICAgIE11bHRpcGxlIGRhdGFiYXNlIG5hbWVzIGFuZC9vciByZWd1bGFyIGV4cHJl c3Npb25zIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88L2xpdGVyYWw+CisgICAgICAgY2FuIGJl IHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoIGNvbW1hcy4KKyAgICAgICBBIHNl cGFyYXRlIGZpbGUgY29udGFpbmluZyBkYXRhYmFzZSBuYW1lcyBjYW4gYmUgc3BlY2lmaWVk IGJ5CiAgICAgICAgcHJlY2VkaW5nIHRoZSBmaWxlIG5hbWUgd2l0aCA8bGl0ZXJhbD5APC9s aXRlcmFsPi4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KQEAgLTI0OSw3ICsy NTAsOCBAQCBob3N0bm9nc3NlbmMgIDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFi bGU+ICA8cmVwbGFjZWFibGU+dXNlcjwvcmVwbGFjZWFibAogICAgICAgIFNwZWNpZmllcyB3 aGljaCBkYXRhYmFzZSB1c2VyIG5hbWUocykgdGhpcyByZWNvcmQKICAgICAgICBtYXRjaGVz LiBUaGUgdmFsdWUgPGxpdGVyYWw+YWxsPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBpdAog ICAgICAgIG1hdGNoZXMgYWxsIHVzZXJzLiAgT3RoZXJ3aXNlLCB0aGlzIGlzIGVpdGhlciB0 aGUgbmFtZSBvZiBhIHNwZWNpZmljCi0gICAgICAgZGF0YWJhc2UgdXNlciwgb3IgYSBncm91 cCBuYW1lIHByZWNlZGVkIGJ5IDxsaXRlcmFsPis8L2xpdGVyYWw+LgorICAgICAgIGRhdGFi YXNlIHVzZXIsIGEgcmVndWxhciBleHByZXNzaW9uIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88 L2xpdGVyYWw+CisgICAgICAgb3IgYSBncm91cCBuYW1lIHByZWNlZGVkIGJ5IDxsaXRlcmFs Pis8L2xpdGVyYWw+LgogICAgICAgIChSZWNhbGwgdGhhdCB0aGVyZSBpcyBubyByZWFsIGRp c3RpbmN0aW9uIGJldHdlZW4gdXNlcnMgYW5kIGdyb3VwcwogICAgICAgIGluIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT47IGEgPGxpdGVyYWw+KzwvbGl0ZXJhbD4g bWFyayByZWFsbHkgbWVhbnMKICAgICAgICA8cXVvdGU+bWF0Y2ggYW55IG9mIHRoZSByb2xl cyB0aGF0IGFyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG1lbWJlcnMKQEAgLTI1OCw3ICsy NjAsOCBAQCBob3N0bm9nc3NlbmMgIDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFi bGU+ICA8cmVwbGFjZWFibGU+dXNlcjwvcmVwbGFjZWFibAogICAgICAgIGNvbnNpZGVyZWQg dG8gYmUgYSBtZW1iZXIgb2YgYSByb2xlIGlmIHRoZXkgYXJlIGV4cGxpY2l0bHkgYSBtZW1i ZXIKICAgICAgICBvZiB0aGUgcm9sZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgYW5kIG5v dCBqdXN0IGJ5IHZpcnR1ZSBvZgogICAgICAgIGJlaW5nIGEgc3VwZXJ1c2VyLgotICAgICAg IE11bHRpcGxlIHVzZXIgbmFtZXMgY2FuIGJlIHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhl bSB3aXRoIGNvbW1hcy4KKyAgICAgICBNdWx0aXBsZSB1c2VyIG5hbWVzIGFuZC9vciByZWd1 bGFyIGV4cHJlc3Npb25zIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88L2xpdGVyYWw+CisgICAg ICAgY2FuIGJlIHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoIGNvbW1hcy4KICAg ICAgICBBIHNlcGFyYXRlIGZpbGUgY29udGFpbmluZyB1c2VyIG5hbWVzIGNhbiBiZSBzcGVj aWZpZWQgYnkgcHJlY2VkaW5nIHRoZQogICAgICAgIGZpbGUgbmFtZSB3aXRoIDxsaXRlcmFs PkA8L2xpdGVyYWw+LgogICAgICAgPC9wYXJhPgpAQCAtMjcwLDggKzI3Myw5IEBAIGhvc3Ru b2dzc2VuYyAgPHJlcGxhY2VhYmxlPmRhdGFiYXNlPC9yZXBsYWNlYWJsZT4gIDxyZXBsYWNl YWJsZT51c2VyPC9yZXBsYWNlYWJsCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgog ICAgICAgIFNwZWNpZmllcyB0aGUgY2xpZW50IG1hY2hpbmUgYWRkcmVzcyhlcykgdGhhdCB0 aGlzIHJlY29yZAotICAgICAgIG1hdGNoZXMuICBUaGlzIGZpZWxkIGNhbiBjb250YWluIGVp dGhlciBhIGhvc3QgbmFtZSwgYW4gSVAKLSAgICAgICBhZGRyZXNzIHJhbmdlLCBvciBvbmUg b2YgdGhlIHNwZWNpYWwga2V5IHdvcmRzIG1lbnRpb25lZCBiZWxvdy4KKyAgICAgICBtYXRj aGVzLiAgVGhpcyBmaWVsZCBjYW4gY29udGFpbiBlaXRoZXIgYSBob3N0IG5hbWUsIGEgcmVn dWxhciBleHByZXNzaW9uCisgICAgICAgcHJlY2VkZWQgYnkgPGxpdGVyYWw+LzwvbGl0ZXJh bD4gcmVwcmVzZW50aW5nIGhvc3QgbmFtZXMsIGFuIElQIGFkZHJlc3MgcmFuZ2UsCisgICAg ICAgb3Igb25lIG9mIHRoZSBzcGVjaWFsIGtleSB3b3JkcyBtZW50aW9uZWQgYmVsb3cuCiAg ICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgpAQCAtNzg1LDE2ICs3ODksMTggQEAgaG9z dCAgICBhbGwgICAgICAgICAgICAgYWxsICAgICAgICAgICAgIDE5Mi4xNjguMTIuMTAvMzIg ICAgICAgIGdzcwogIyBUWVBFICBEQVRBQkFTRSAgICAgICAgVVNFUiAgICAgICAgICAgIEFE RFJFU1MgICAgICAgICAgICAgICAgIE1FVEhPRAogaG9zdCAgICBhbGwgICAgICAgICAgICAg YWxsICAgICAgICAgICAgIDE5Mi4xNjguMC4wLzE2ICAgICAgICAgIGlkZW50IG1hcD1vbWlj cm9uCiAKLSMgSWYgdGhlc2UgYXJlIHRoZSBvbmx5IHRocmVlIGxpbmVzIGZvciBsb2NhbCBj b25uZWN0aW9ucywgdGhleSB3aWxsCisjIElmIHRoZXNlIGFyZSB0aGUgb25seSBmb3VyIGxp bmVzIGZvciBsb2NhbCBjb25uZWN0aW9ucywgdGhleSB3aWxsCiAjIGFsbG93IGxvY2FsIHVz ZXJzIHRvIGNvbm5lY3Qgb25seSB0byB0aGVpciBvd24gZGF0YWJhc2VzIChkYXRhYmFzZXMK LSMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZWlyIGRhdGFiYXNlIHVzZXIgbmFtZSkgZXhj ZXB0IGZvciBhZG1pbmlzdHJhdG9ycwotIyBhbmQgbWVtYmVycyBvZiByb2xlICJzdXBwb3J0 Iiwgd2hvIGNhbiBjb25uZWN0IHRvIGFsbCBkYXRhYmFzZXMuICBUaGUgZmlsZQotIyAkUEdE QVRBL2FkbWlucyBjb250YWlucyBhIGxpc3Qgb2YgbmFtZXMgb2YgYWRtaW5pc3RyYXRvcnMu ICBQYXNzd29yZHMKKyMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZWlyIGRhdGFiYXNlIHVz ZXIgbmFtZSkgZXhjZXB0IGZvciBhZG1pbmlzdHJhdG9ycywKKyMgdXNlcnMgZmluaXNoaW5n IHdpdGggImhlbHBkZXNrIiBhbmQgbWVtYmVycyBvZiByb2xlICJzdXBwb3J0IiwKKyMgd2hv IGNhbiBjb25uZWN0IHRvIGFsbCBkYXRhYmFzZXMuCisjIFRoZSBmaWxlJFBHREFUQS9hZG1p bnMgY29udGFpbnMgYSBsaXN0IG9mIG5hbWVzIG9mIGFkbWluaXN0cmF0b3JzLiAgUGFzc3dv cmRzCiAjIGFyZSByZXF1aXJlZCBpbiBhbGwgY2FzZXMuCiAjCiAjIFRZUEUgIERBVEFCQVNF ICAgICAgICBVU0VSICAgICAgICAgICAgQUREUkVTUyAgICAgICAgICAgICAgICAgTUVUSE9E CiBsb2NhbCAgIHNhbWV1c2VyICAgICAgICBhbGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWQ1CiBsb2NhbCAgIGFsbCAgICAgICAgICAgICBAYWRtaW5zICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1Citsb2NhbCAgIGFsbCAgICAgICAgICAg ICAvXi4qaGVscGRlc2skICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1CiBsb2NhbCAg IGFsbCAgICAgICAgICAgICArc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWQ1CiAKICMgVGhlIGxhc3QgdHdvIGxpbmVzIGFib3ZlIGNhbiBiZSBjb21iaW5lZCBp bnRvIGEgc2luZ2xlIGxpbmU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9oYmEu YyBiL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jCmluZGV4IDQ2Mzc0MjZkNjIuLjIwMGRlOGQ3 ZDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jCisrKyBiL3NyYy9iYWNr ZW5kL2xpYnBxL2hiYS5jCkBAIC0xMTcsNiArMTE3LDkgQEAgc3RhdGljIExpc3QgKnRva2Vu aXplX2luY19maWxlKExpc3QgKnRva2VucywgY29uc3QgY2hhciAqb3V0ZXJfZmlsZW5hbWUs CiAJCQkJCQkJICAgY29uc3QgY2hhciAqaW5jX2ZpbGVuYW1lLCBpbnQgZWxldmVsLCBjaGFy ICoqZXJyX21zZyk7CiBzdGF0aWMgYm9vbCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFt ZSwgY2hhciAqdmFsLCBIYmFMaW5lICpoYmFsaW5lLAogCQkJCQkJCSAgIGludCBlbGV2ZWws IGNoYXIgKiplcnJfbXNnKTsKK3N0YXRpYyBib29sIHRva2VuX3JlZ2NvbXAocmVnZXhfdCAq cmUsIGNoYXIgKnN0cmluZywgY2hhciAqZmlsZW5hbWUsCisJCQkJCQkgIGludCBsaW5lX251 bSwgY2hhciAqKmVycl9tc2csIGludCBlbGV2ZWwpOworc3RhdGljIGJvb2wgdG9rZW5fcmVn ZXhlYyhjb25zdCBjaGFyICptYXRjaCwgcmVnZXhfdCAqcmUpOwogCiAKIC8qCkBAIC01NzQs MTMgKzU3NywxNSBAQCBpc19tZW1iZXIoT2lkIHVzZXJpZCwgY29uc3QgY2hhciAqcm9sZSkK IH0KIAogLyoKLSAqIENoZWNrIEF1dGhUb2tlbiBsaXN0IGZvciBhIG1hdGNoIHRvIHJvbGUs IGFsbG93aW5nIGdyb3VwIG5hbWVzLgorICogQ2hlY2sgQXV0aFRva2VuIGxpc3QgZm9yIGEg bWF0Y2ggdG8gcm9sZS4KKyAqIFdlIGFyZSBhbGxvd2luZyBncm91cCBuYW1lcyBhbmQgcmVn dWxhciBleHByZXNzaW9ucy4KICAqLwogc3RhdGljIGJvb2wKLWNoZWNrX3JvbGUoY29uc3Qg Y2hhciAqcm9sZSwgT2lkIHJvbGVpZCwgTGlzdCAqdG9rZW5zKQorY2hlY2tfcm9sZShjb25z dCBjaGFyICpyb2xlLCBPaWQgcm9sZWlkLCBMaXN0ICp0b2tlbnMsIExpc3QgKnRva2Vuc19y ZSkKIHsKIAlMaXN0Q2VsbCAgICpjZWxsOwogCUF1dGhUb2tlbiAgKnRvazsKKwlpbnQJCQly ZV9udW0gPSAwOwogCiAJZm9yZWFjaChjZWxsLCB0b2tlbnMpCiAJewpAQCAtNTkwLDYgKzU5 NSwyMyBAQCBjaGVja19yb2xlKGNvbnN0IGNoYXIgKnJvbGUsIE9pZCByb2xlaWQsIExpc3Qg KnRva2VucykKIAkJCWlmIChpc19tZW1iZXIocm9sZWlkLCB0b2stPnN0cmluZyArIDEpKQog CQkJCXJldHVybiB0cnVlOwogCQl9CisJCWVsc2UgaWYgKCF0b2stPnF1b3RlZCAmJiB0b2st PnN0cmluZ1swXSA9PSAnLycpCisJCXsKKwkJCS8qCisJCQkgKiBXaGVuIHRvay0+c3RyaW5n IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIHRyZWF0IGl0IGFzIGEgcmVndWxhcgorCQkJICogZXhw cmVzc2lvbi4KKwkJCSAqLworCQkJTGlzdENlbGwgICAqY2VsbF9yZTsKKwkJCXJlZ2V4X3Qg ICAgKnJlOworCisJCQljZWxsX3JlID0gbGlzdF9udGhfY2VsbCh0b2tlbnNfcmUsIHJlX251 bSk7CisJCQlyZSA9IGxmaXJzdChjZWxsX3JlKTsKKworCQkJaWYgKHRva2VuX3JlZ2V4ZWMo cm9sZSwgcmUpKQorCQkJCXJldHVybiB0cnVlOworCisJCQlyZV9udW0rKzsKKwkJfQogCQll bHNlIGlmICh0b2tlbl9tYXRjaGVzKHRvaywgcm9sZSkgfHwKIAkJCQkgdG9rZW5faXNfa2V5 d29yZCh0b2ssICJhbGwiKSkKIAkJCXJldHVybiB0cnVlOwpAQCAtNjAxLDEwICs2MjMsMTEg QEAgY2hlY2tfcm9sZShjb25zdCBjaGFyICpyb2xlLCBPaWQgcm9sZWlkLCBMaXN0ICp0b2tl bnMpCiAgKiBDaGVjayB0byBzZWUgaWYgZGIvcm9sZSBjb21iaW5hdGlvbiBtYXRjaGVzIEF1 dGhUb2tlbiBsaXN0LgogICovCiBzdGF0aWMgYm9vbAotY2hlY2tfZGIoY29uc3QgY2hhciAq ZGJuYW1lLCBjb25zdCBjaGFyICpyb2xlLCBPaWQgcm9sZWlkLCBMaXN0ICp0b2tlbnMpCitj aGVja19kYihjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnJvbGUsIE9pZCByb2xl aWQsIExpc3QgKnRva2VucywgTGlzdCAqdG9rZW5zX3JlKQogewogCUxpc3RDZWxsICAgKmNl bGw7CiAJQXV0aFRva2VuICAqdG9rOworCWludAkJCXJlX251bSA9IDA7CiAKIAlmb3JlYWNo KGNlbGwsIHRva2VucykKIAl7CkBAIC02MzMsNiArNjU2LDIzIEBAIGNoZWNrX2RiKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqcm9sZSwgT2lkIHJvbGVpZCwgTGlzdCAqdG9r ZW5zKQogCQl9CiAJCWVsc2UgaWYgKHRva2VuX2lzX2tleXdvcmQodG9rLCAicmVwbGljYXRp b24iKSkKIAkJCWNvbnRpbnVlOwkJCS8qIG5ldmVyIG1hdGNoIHRoaXMgaWYgbm90IHdhbHNl bmRlciAqLworCQllbHNlIGlmICghdG9rLT5xdW90ZWQgJiYgdG9rLT5zdHJpbmdbMF0gPT0g Jy8nKQorCQl7CisJCQkvKgorCQkJICogV2hlbiB0b2stPnN0cmluZyBzdGFydHMgd2l0aCBh IHNsYXNoLCB0cmVhdCBpdCBhcyBhIHJlZ3VsYXIKKwkJCSAqIGV4cHJlc3Npb24uCisJCQkg Ki8KKwkJCUxpc3RDZWxsICAgKmNlbGxfcmU7CisJCQlyZWdleF90ICAgICpyZTsKKworCQkJ Y2VsbF9yZSA9IGxpc3RfbnRoX2NlbGwodG9rZW5zX3JlLCByZV9udW0pOworCQkJcmUgPSBs Zmlyc3QoY2VsbF9yZSk7CisKKwkJCWlmICh0b2tlbl9yZWdleGVjKGRibmFtZSwgcmUpKQor CQkJCXJldHVybiB0cnVlOworCisJCQlyZV9udW0rKzsKKwkJfQogCQllbHNlIGlmICh0b2tl bl9tYXRjaGVzKHRvaywgZGJuYW1lKSkKIAkJCXJldHVybiB0cnVlOwogCX0KQEAgLTY4MSw3 ICs3MjEsNyBAQCBob3N0bmFtZV9tYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBj aGFyICphY3R1YWxfaG9zdG5hbWUpCiAgKiBDaGVjayB0byBzZWUgaWYgYSBjb25uZWN0aW5n IElQIG1hdGNoZXMgYSBnaXZlbiBob3N0IG5hbWUuCiAgKi8KIHN0YXRpYyBib29sCi1jaGVj a19ob3N0bmFtZShoYmFQb3J0ICpwb3J0LCBjb25zdCBjaGFyICpob3N0bmFtZSkKK2NoZWNr X2hvc3RuYW1lKGhiYVBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCByZWdleF90 IHJlKQogewogCXN0cnVjdCBhZGRyaW5mbyAqZ2FpX3Jlc3VsdCwKIAkJCSAgICpnYWk7CkBA IC03MTIsOCArNzUyLDE3IEBAIGNoZWNrX2hvc3RuYW1lKGhiYVBvcnQgKnBvcnQsIGNvbnN0 IGNoYXIgKmhvc3RuYW1lKQogCQlwb3J0LT5yZW1vdGVfaG9zdG5hbWUgPSBwc3RyZHVwKHJl bW90ZV9ob3N0bmFtZSk7CiAJfQogCisJaWYgKGhvc3RuYW1lWzBdID09ICcvJykKKwl7CisJ CS8qCisJCSAqIFdoZW4gaG9zdG5hbWUgc3RhcnRzIHdpdGggYSBzbGFzaCwgdHJlYXQgaXQg YXMgYSByZWd1bGFyCisJCSAqIGV4cHJlc3Npb24uCisJCSAqLworCQlpZiAoIXRva2VuX3Jl Z2V4ZWMocG9ydC0+cmVtb3RlX2hvc3RuYW1lLCAmcmUpKQorCQkJcmV0dXJuIGZhbHNlOwor CX0KIAkvKiBOb3cgc2VlIGlmIHJlbW90ZSBob3N0IG5hbWUgbWF0Y2hlcyB0aGlzIHBnX2hi YSBsaW5lICovCi0JaWYgKCFob3N0bmFtZV9tYXRjaChob3N0bmFtZSwgcG9ydC0+cmVtb3Rl X2hvc3RuYW1lKSkKKwllbHNlIGlmICghaG9zdG5hbWVfbWF0Y2goaG9zdG5hbWUsIHBvcnQt PnJlbW90ZV9ob3N0bmFtZSkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIElmIHdlIGFscmVh ZHkgdmVyaWZpZWQgdGhlIGZvcndhcmQgbG9va3VwLCB3ZSdyZSBkb25lICovCkBAIC05Mzks MTMgKzk4OCwxMyBAQCBwYXJzZV9oYmFfbGluZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xp bmUsIGludCBlbGV2ZWwpCiAJc3RydWN0IGFkZHJpbmZvICpnYWlfcmVzdWx0OwogCXN0cnVj dCBhZGRyaW5mbyBoaW50czsKIAlpbnQJCQlyZXQ7Ci0JY2hhcgkgICAqY2lkcl9zbGFzaDsK IAljaGFyCSAgICp1bnN1cGF1dGg7CiAJTGlzdENlbGwgICAqZmllbGQ7CiAJTGlzdAkgICAq dG9rZW5zOwogCUxpc3RDZWxsICAgKnRva2VuY2VsbDsKIAlBdXRoVG9rZW4gICp0b2tlbjsK IAlIYmFMaW5lICAgICpwYXJzZWRsaW5lOworCWNoYXIgICAgICAgKmNpZHJfc2xhc2ggPSBO VUxMOyAvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiAKIAlwYXJzZWRsaW5lID0gcGFsbG9j MChzaXplb2YoSGJhTGluZSkpOwogCXBhcnNlZGxpbmUtPmxpbmVudW1iZXIgPSBsaW5lX251 bTsKQEAgLTEwNDksOSArMTA5OCwyNyBAQCBwYXJzZV9oYmFfbGluZShUb2tlbml6ZWRBdXRo TGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCXJldHVybiBOVUxMOwogCX0KIAlwYXJz ZWRsaW5lLT5kYXRhYmFzZXMgPSBOSUw7CisJcGFyc2VkbGluZS0+ZGF0YWJhc2VzX3JlID0g TklMOwogCXRva2VucyA9IGxmaXJzdChmaWVsZCk7CiAJZm9yZWFjaCh0b2tlbmNlbGwsIHRv a2VucykKIAl7CisJCUF1dGhUb2tlbiAgKnRvayA9IGxmaXJzdCh0b2tlbmNlbGwpOworCisJ CWlmICghdG9rLT5xdW90ZWQgJiYgdG9rLT5zdHJpbmdbMF0gPT0gJy8nKQorCQl7CisJCQkv KgorCQkJICogV2hlbiB0b2stPnN0cmluZyBzdGFydHMgd2l0aCBhIHNsYXNoLCB0cmVhdCBp dCBhcyBhIHJlZ3VsYXIKKwkJCSAqIGV4cHJlc3Npb24uIFByZS1jb21waWxlIGl0LgorCQkJ ICovCisJCQlyZWdleF90ICAgICpyZTsKKworCQkJcmUgPSAocmVnZXhfdCAqKSBwYWxsb2Mo c2l6ZW9mKHJlZ2V4X3QpKTsKKwkJCWlmICh0b2tlbl9yZWdjb21wKHJlLCB0b2stPnN0cmlu ZyArIDEsIEhiYUZpbGVOYW1lLCBsaW5lX251bSwKKwkJCQkJCQkgIGVycl9tc2csIGVsZXZl bCkpCisJCQkJcGFyc2VkbGluZS0+ZGF0YWJhc2VzX3JlID0gbGFwcGVuZChwYXJzZWRsaW5l LT5kYXRhYmFzZXNfcmUsIHJlKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQog CQlwYXJzZWRsaW5lLT5kYXRhYmFzZXMgPSBsYXBwZW5kKHBhcnNlZGxpbmUtPmRhdGFiYXNl cywKIAkJCQkJCQkJCQljb3B5X2F1dGhfdG9rZW4obGZpcnN0KHRva2VuY2VsbCkpKTsKIAl9 CkBAIC0xMDY5LDkgKzExMzYsMjcgQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExp bmUgKnRva19saW5lLCBpbnQgZWxldmVsKQogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcGFyc2Vk bGluZS0+cm9sZXMgPSBOSUw7CisJcGFyc2VkbGluZS0+cm9sZXNfcmUgPSBOSUw7CiAJdG9r ZW5zID0gbGZpcnN0KGZpZWxkKTsKIAlmb3JlYWNoKHRva2VuY2VsbCwgdG9rZW5zKQogCXsK KwkJQXV0aFRva2VuICAqdG9rID0gbGZpcnN0KHRva2VuY2VsbCk7CisKKwkJaWYgKCF0b2st PnF1b3RlZCAmJiB0b2stPnN0cmluZ1swXSA9PSAnLycpCisJCXsKKwkJCS8qCisJCQkgKiBX aGVuIHRvay0+c3RyaW5nIHN0YXJ0cyB3aXRoIGEgc2xhc2gsIHRyZWF0IGl0IGFzIGEgcmVn dWxhcgorCQkJICogZXhwcmVzc2lvbi4gUHJlLWNvbXBpbGUgaXQuCisJCQkgKi8KKwkJCXJl Z2V4X3QgICAgKnJlOworCisJCQlyZSA9IChyZWdleF90ICopIHBhbGxvYyhzaXplb2YocmVn ZXhfdCkpOworCQkJaWYgKHRva2VuX3JlZ2NvbXAocmUsIHRvay0+c3RyaW5nICsgMSwgSGJh RmlsZU5hbWUsIGxpbmVfbnVtLAorCQkJCQkJCSAgZXJyX21zZywgZWxldmVsKSkKKwkJCQlw YXJzZWRsaW5lLT5yb2xlc19yZSA9IGxhcHBlbmQocGFyc2VkbGluZS0+cm9sZXNfcmUsIHJl KTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQogCQlwYXJzZWRsaW5lLT5yb2xl cyA9IGxhcHBlbmQocGFyc2VkbGluZS0+cm9sZXMsCiAJCQkJCQkJCQljb3B5X2F1dGhfdG9r ZW4obGZpcnN0KHRva2VuY2VsbCkpKTsKIAl9CkBAIC0xMTIwLDYgKzEyMDUsOCBAQCBwYXJz ZV9oYmFfbGluZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJ CX0KIAkJZWxzZQogCQl7CisJCQlib29sIGlzX3JlZ2V4cCA9IHRva2VuLT5zdHJpbmdbMF0g PT0gJy8nID8gdHJ1ZSA6IGZhbHNlOworCiAJCQkvKiBJUCBhbmQgbmV0bWFzayBhcmUgc3Bl Y2lmaWVkICovCiAJCQlwYXJzZWRsaW5lLT5pcF9jbXBfbWV0aG9kID0gaXBDbXBNYXNrOwog CkBAIC0xMTI3LDkgKzEyMTQsMTIgQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExp bmUgKnRva19saW5lLCBpbnQgZWxldmVsKQogCQkJc3RyID0gcHN0cmR1cCh0b2tlbi0+c3Ry aW5nKTsKIAogCQkJLyogQ2hlY2sgaWYgaXQgaGFzIGEgQ0lEUiBzdWZmaXggYW5kIGlmIHNv IGlzb2xhdGUgaXQgKi8KLQkJCWNpZHJfc2xhc2ggPSBzdHJjaHIoc3RyLCAnLycpOwotCQkJ aWYgKGNpZHJfc2xhc2gpCi0JCQkJKmNpZHJfc2xhc2ggPSAnXDAnOworCQkJaWYgKCFpc19y ZWdleHApCisJCQl7CisJCQkJY2lkcl9zbGFzaCA9IHN0cmNocihzdHIsICcvJyk7CisJCQkJ aWYgKGNpZHJfc2xhc2gpCisJCQkJCSpjaWRyX3NsYXNoID0gJ1wwJzsKKwkJCX0KIAogCQkJ LyogR2V0IHRoZSBJUCBhZGRyZXNzIGVpdGhlciB3YXkgKi8KIAkJCWhpbnRzLmFpX2ZsYWdz ID0gQUlfTlVNRVJJQ0hPU1Q7CkBAIC0xMTY4LDcgKzEyNTgsNyBAQCBwYXJzZV9oYmFfbGlu ZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCQlwZ19mcmVl YWRkcmluZm9fYWxsKGhpbnRzLmFpX2ZhbWlseSwgZ2FpX3Jlc3VsdCk7CiAKIAkJCS8qIEdl dCB0aGUgbmV0bWFzayAqLwotCQkJaWYgKGNpZHJfc2xhc2gpCisJCQlpZiAoY2lkcl9zbGFz aCAmJiAhaXNfcmVnZXhwKQogCQkJewogCQkJCWlmIChwYXJzZWRsaW5lLT5ob3N0bmFtZSkK IAkJCQl7CkBAIC0xMTk5LDcgKzEyODksNyBAQCBwYXJzZV9oYmFfbGluZShUb2tlbml6ZWRB dXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCQkJcGFyc2VkbGluZS0+bWFza2xl biA9IHBhcnNlZGxpbmUtPmFkZHJsZW47CiAJCQkJcGZyZWUoc3RyKTsKIAkJCX0KLQkJCWVs c2UgaWYgKCFwYXJzZWRsaW5lLT5ob3N0bmFtZSkKKwkJCWVsc2UgaWYgKCFwYXJzZWRsaW5l LT5ob3N0bmFtZSAmJiAhaXNfcmVnZXhwKQogCQkJewogCQkJCS8qIFJlYWQgdGhlIG1hc2sg ZmllbGQuICovCiAJCQkJcGZyZWUoc3RyKTsKQEAgLTEyNjEsNiArMTM1MSwxOCBAQCBwYXJz ZV9oYmFfbGluZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJ CQkJCXJldHVybiBOVUxMOwogCQkJCX0KIAkJCX0KKwkJCWVsc2UgaWYgKGlzX3JlZ2V4cCkK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdoZW4gdG9rZW4tPnN0cmluZyBzdGFydHMgd2l0aCBh IHNsYXNoLCB0cmVhdCBpdCBhcyBhCisJCQkJICogcmVndWxhciBleHByZXNzaW9uLiBQcmUt Y29tcGlsZSBpdC4KKwkJCQkgKi8KKwkJCQlpZiAoIXRva2VuX3JlZ2NvbXAoJnBhcnNlZGxp bmUtPmhvc3RuYW1lX3JlLAorCQkJCQkJCQkgICB0b2tlbi0+c3RyaW5nICsgMSwgSGJhRmls ZU5hbWUsCisJCQkJCQkJCSAgIGxpbmVfbnVtLCBlcnJfbXNnLCBlbGV2ZWwpKQorCQkJCQly ZXR1cm4gTlVMTDsKKwkJCQlwYXJzZWRsaW5lLT5ob3N0bmFtZSA9IHN0cjsKKwkJCX0KIAkJ fQogCX0JCQkJCQkJLyogIT0gY3RMb2NhbCAqLwogCkBAIC0yMTM1LDcgKzIyMzcsOCBAQCBj aGVja19oYmEoaGJhUG9ydCAqcG9ydCkKIAkJCQkJaWYgKGhiYS0+aG9zdG5hbWUpCiAJCQkJ CXsKIAkJCQkJCWlmICghY2hlY2tfaG9zdG5hbWUocG9ydCwKLQkJCQkJCQkJCQkJaGJhLT5o b3N0bmFtZSkpCisJCQkJCQkJCQkJCWhiYS0+aG9zdG5hbWUsIGhiYS0+aG9zdG5hbWVfcmUp KQorCiAJCQkJCQkJY29udGludWU7CiAJCQkJCX0KIAkJCQkJZWxzZQpAQCAtMjE2MiwxMCAr MjI2NSwxMCBAQCBjaGVja19oYmEoaGJhUG9ydCAqcG9ydCkKIAogCQkvKiBDaGVjayBkYXRh YmFzZSBhbmQgcm9sZSAqLwogCQlpZiAoIWNoZWNrX2RiKHBvcnQtPmRhdGFiYXNlX25hbWUs IHBvcnQtPnVzZXJfbmFtZSwgcm9sZWlkLAotCQkJCQkgIGhiYS0+ZGF0YWJhc2VzKSkKKwkJ CQkJICBoYmEtPmRhdGFiYXNlcywgaGJhLT5kYXRhYmFzZXNfcmUpKQogCQkJY29udGludWU7 CiAKLQkJaWYgKCFjaGVja19yb2xlKHBvcnQtPnVzZXJfbmFtZSwgcm9sZWlkLCBoYmEtPnJv bGVzKSkKKwkJaWYgKCFjaGVja19yb2xlKHBvcnQtPnVzZXJfbmFtZSwgcm9sZWlkLCBoYmEt PnJvbGVzLCBoYmEtPnJvbGVzX3JlKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEZvdW5kIGEg cmVjb3JkIHRoYXQgbWF0Y2hlZCEgKi8KQEAgLTIzNDIsMzQgKzI0NDUsOSBAQCBwYXJzZV9p ZGVudF9saW5lKFRva2VuaXplZEF1dGhMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKIAkJ ICogV2hlbiBzeXN0ZW0gdXNlcm5hbWUgc3RhcnRzIHdpdGggYSBzbGFzaCwgdHJlYXQgaXQg YXMgYSByZWd1bGFyCiAJCSAqIGV4cHJlc3Npb24uIFByZS1jb21waWxlIGl0LgogCQkgKi8K LQkJaW50CQkJcjsKLQkJcGdfd2NoYXIgICAqd3N0cjsKLQkJaW50CQkJd2xlbjsKLQotCQl3 c3RyID0gcGFsbG9jKChzdHJsZW4ocGFyc2VkbGluZS0+aWRlbnRfdXNlciArIDEpICsgMSkg KiBzaXplb2YocGdfd2NoYXIpKTsKLQkJd2xlbiA9IHBnX21iMndjaGFyX3dpdGhfbGVuKHBh cnNlZGxpbmUtPmlkZW50X3VzZXIgKyAxLAotCQkJCQkJCQkJd3N0ciwgc3RybGVuKHBhcnNl ZGxpbmUtPmlkZW50X3VzZXIgKyAxKSk7Ci0KLQkJciA9IHBnX3JlZ2NvbXAoJnBhcnNlZGxp bmUtPnJlLCB3c3RyLCB3bGVuLCBSRUdfQURWQU5DRUQsIENfQ09MTEFUSU9OX09JRCk7Ci0J CWlmIChyKQotCQl7Ci0JCQljaGFyCQllcnJzdHJbMTAwXTsKLQotCQkJcGdfcmVnZXJyb3Io ciwgJnBhcnNlZGxpbmUtPnJlLCBlcnJzdHIsIHNpemVvZihlcnJzdHIpKTsKLQkJCWVyZXBv cnQoZWxldmVsLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUkVHVUxBUl9FWFBS RVNTSU9OKSwKLQkJCQkJIGVycm1zZygiaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gXCIl c1wiOiAlcyIsCi0JCQkJCQkJcGFyc2VkbGluZS0+aWRlbnRfdXNlciArIDEsIGVycnN0ciks Ci0JCQkJCSBlcnJjb250ZXh0KCJsaW5lICVkIG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVz XCIiLAotCQkJCQkJCWxpbmVfbnVtLCBJZGVudEZpbGVOYW1lKSkpOwotCi0JCQkqZXJyX21z ZyA9IHBzcHJpbnRmKCJpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBcIiVzXCI6ICVzIiwK LQkJCQkJCQkJcGFyc2VkbGluZS0+aWRlbnRfdXNlciArIDEsIGVycnN0cik7Ci0KLQkJCXBm cmVlKHdzdHIpOworCQlpZiAoIXRva2VuX3JlZ2NvbXAoJnBhcnNlZGxpbmUtPnJlLCBwYXJz ZWRsaW5lLT5pZGVudF91c2VyICsgMSwKKwkJCQkJCSAgIElkZW50RmlsZU5hbWUsIGxpbmVf bnVtLCBlcnJfbXNnLCBlbGV2ZWwpKQogCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJcGZyZWUo d3N0cik7CiAJfQogCiAJcmV0dXJuIHBhcnNlZGxpbmU7CkBAIC0yNzA2LDMgKzI3ODQsNTgg QEAgaGJhX2F1dGhuYW1lKFVzZXJBdXRoIGF1dGhfbWV0aG9kKQogCiAJcmV0dXJuIFVzZXJB dXRoTmFtZVthdXRoX21ldGhvZF07CiB9CisKK3N0YXRpYyBib29sCit0b2tlbl9yZWdjb21w KHJlZ2V4X3QgKnJlLCBjaGFyICpzdHJpbmcsIGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZV9u dW0sCisJCQkgIGNoYXIgKiplcnJfbXNnLCBpbnQgZWxldmVsKQoreworCWludAkJCXI7CisJ cGdfd2NoYXIgICAqd3N0cjsKKwlpbnQJCQl3bGVuOworCisJd3N0ciA9IHBhbGxvYygoc3Ry bGVuKHN0cmluZykgKyAxKSAqIHNpemVvZihwZ193Y2hhcikpOworCXdsZW4gPSBwZ19tYjJ3 Y2hhcl93aXRoX2xlbihzdHJpbmcsCisJCQkJCQkJCXdzdHIsIHN0cmxlbihzdHJpbmcpKTsK KworCXIgPSBwZ19yZWdjb21wKHJlLCB3c3RyLCB3bGVuLCBSRUdfQURWQU5DRUQsIENfQ09M TEFUSU9OX09JRCk7CisJaWYgKHIpCisJeworCQljaGFyCQllcnJzdHJbMTAwXTsKKworCQlw Z19yZWdlcnJvcihyLCByZSwgZXJyc3RyLCBzaXplb2YoZXJyc3RyKSk7CisJCWVyZXBvcnQo ZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9SRUdVTEFSX0VYUFJFU1NJ T04pLAorCQkJCSBlcnJtc2coImludmFsaWQgcmVndWxhciBleHByZXNzaW9uIFwiJXNcIjog JXMiLAorCQkJCQkJc3RyaW5nLCBlcnJzdHIpLAorCQkJCSBlcnJjb250ZXh0KCJsaW5lICVk IG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVzXCIiLAorCQkJCQkJCWxpbmVfbnVtLCBmaWxl bmFtZSkpKTsKKworCQkqZXJyX21zZyA9IHBzcHJpbnRmKCJpbnZhbGlkIHJlZ3VsYXIgZXhw cmVzc2lvbiBcIiVzXCI6ICVzIiwKKwkJCQkJCQlzdHJpbmcsIGVycnN0cik7CisKKwkJcGZy ZWUod3N0cik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwZnJlZSh3c3RyKTsKKwlyZXR1 cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3Rva2VuX3JlZ2V4ZWMoY29uc3QgY2hhciAq bWF0Y2gsIHJlZ2V4X3QgKnJlKQoreworCXBnX3djaGFyICAgKndtYXRjaHN0cjsKKwlpbnQJ CQl3bWF0Y2hsZW47CisKKwl3bWF0Y2hzdHIgPSBwYWxsb2MoKHN0cmxlbihtYXRjaCkgKyAx KSAqIHNpemVvZihwZ193Y2hhcikpOworCXdtYXRjaGxlbiA9IHBnX21iMndjaGFyX3dpdGhf bGVuKG1hdGNoLCB3bWF0Y2hzdHIsIHN0cmxlbihtYXRjaCkpOworCisJaWYgKHBnX3JlZ2V4 ZWMocmUsIHdtYXRjaHN0ciwgd21hdGNobGVuLCAwLCBOVUxMLCAwLCBOVUxMLCAwKSA9PSBS RUdfT0tBWSkKKwl7CisJCXBmcmVlKHdtYXRjaHN0cik7CisJCXJldHVybiB0cnVlOworCX0K KworCXBmcmVlKHdtYXRjaHN0cik7CisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbGlicHEvaGJhLmggYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRl eCA5MDAzNmY3YmNkLi5jMjRmOTE2NmNiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJw cS9oYmEuaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaApAQCAtMTIwLDYgKzEyMCw5 IEBAIHR5cGVkZWYgc3RydWN0IEhiYUxpbmUKIAljaGFyCSAgICpyYWRpdXNpZGVudGlmaWVy c19zOwogCUxpc3QJICAgKnJhZGl1c3BvcnRzOwogCWNoYXIJICAgKnJhZGl1c3BvcnRzX3M7 CisJTGlzdAkgICAqcm9sZXNfcmU7CisJTGlzdAkgICAqZGF0YWJhc2VzX3JlOworCXJlZ2V4 X3QJICAgaG9zdG5hbWVfcmU7CiB9IEhiYUxpbmU7CiAKIHR5cGVkZWYgc3RydWN0IElkZW50 TGluZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvYXV0aGVudGljYXRpb24vdC8wMDFfcGFzc3dv cmQucGwgYi9zcmMvdGVzdC9hdXRoZW50aWNhdGlvbi90LzAwMV9wYXNzd29yZC5wbAppbmRl eCAzZTMwNzljODI0Li4wNDlhZDFjYzg5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9hdXRoZW50 aWNhdGlvbi90LzAwMV9wYXNzd29yZC5wbAorKysgYi9zcmMvdGVzdC9hdXRoZW50aWNhdGlv bi90LzAwMV9wYXNzd29yZC5wbApAQCAtMjMsMjkgKzIzLDMyIEBAIGlmICghJHVzZV91bml4 X3NvY2tldHMpCiAjIGFuZCB0aGVuIGV4ZWN1dGUgYSByZWxvYWQgdG8gcmVmcmVzaCBpdC4K IHN1YiByZXNldF9wZ19oYmEKIHsKLQlteSAkbm9kZSAgICAgICA9IHNoaWZ0OwotCW15ICRo YmFfbWV0aG9kID0gc2hpZnQ7CisJbXkgJG5vZGUJCT0gc2hpZnQ7CisJbXkgJGhvc3QJCT0g c2hpZnQ7CisJbXkgJGRhdGFiYXNlCT0gc2hpZnQ7CisJbXkgJHJvbGUJCT0gc2hpZnQ7CisJ bXkgJG1ldGhvZAkJPSBzaGlmdDsKIAogCXVubGluaygkbm9kZS0+ZGF0YV9kaXIgLiAnL3Bn X2hiYS5jb25mJyk7CiAJIyBqdXN0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB1c2UgYSBjb250 aW51YXRpb24gbGluZQotCSRub2RlLT5hcHBlbmRfY29uZigncGdfaGJhLmNvbmYnLCAibG9j YWwgYWxsIGFsbFxcXG4gJGhiYV9tZXRob2QiKTsKKwkkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bn X2hiYS5jb25mJywgIiRob3N0ICRkYXRhYmFzZSAkcm9sZVxcXG4gJG1ldGhvZCIpOwogCSRu b2RlLT5yZWxvYWQ7CiAJcmV0dXJuOwogfQogCiAjIFRlc3QgYWNjZXNzIGZvciBhIHNpbmds ZSByb2xlLCB1c2VmdWwgdG8gd3JhcCBhbGwgdGVzdHMgaW50byBvbmUuICBFeHRyYQogIyBu YW1lZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gY29ubmVjdF9vay9mYWlscyBhcy1pcy4K LXN1YiB0ZXN0X3JvbGUKK3N1YiB0ZXN0X2Nvbm4KIHsKIAlsb2NhbCAkVGVzdDo6QnVpbGRl cjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAxOwogCi0JbXkgKCRub2RlLCAk cm9sZSwgJG1ldGhvZCwgJGV4cGVjdGVkX3JlcywgJXBhcmFtcykgPSBAXzsKKwlteSAoJG5v ZGUsICRjb25uLCAkbWV0aG9kLCAkZXhwZWN0ZWRfcmVzLCAlcGFyYW1zKSA9IEBfOwogCW15 ICRzdGF0dXNfc3RyaW5nID0gJ2ZhaWxlZCc7CiAJJHN0YXR1c19zdHJpbmcgPSAnc3VjY2Vz cycgaWYgKCRleHBlY3RlZF9yZXMgZXEgMCk7CiAKLQlteSAkY29ubnN0ciA9ICJ1c2VyPSRy b2xlIjsKKwlteSAkY29ubnN0ciA9ICIkY29ubiI7CiAJbXkgJHRlc3RuYW1lID0KLQkgICJh dXRoZW50aWNhdGlvbiAkc3RhdHVzX3N0cmluZyBmb3IgbWV0aG9kICRtZXRob2QsIHJvbGUg JHJvbGUiOworCSAgImF1dGhlbnRpY2F0aW9uICRzdGF0dXNfc3RyaW5nIGZvciBtZXRob2Qg JG1ldGhvZCwgY29ubiAkY29ubiI7CiAKIAlpZiAoJGV4cGVjdGVkX3JlcyBlcSAwKQogCXsK QEAgLTYxLDcgKzY0LDExIEBAIHN1YiB0ZXN0X3JvbGUKICMgSW5pdGlhbGl6ZSBwcmltYXJ5 IG5vZGUKIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmlt YXJ5Jyk7CiAkbm9kZS0+aW5pdDsKLSRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywgImxvZ19jb25uZWN0aW9ucyA9IG9uXG4iKTsKKyRub2RlLT5hcHBlbmRfY29uZigK KyAgICAncG9zdGdyZXNxbC5jb25mJywgcXF7CitsaXN0ZW5fYWRkcmVzc2VzID0gJzEyNy4w LjAuMScKK2xvZ19jb25uZWN0aW9ucyA9IG9uCit9KTsKICRub2RlLT5zdGFydDsKIAogIyBD cmVhdGUgMyByb2xlcyB3aXRoIGRpZmZlcmVudCBwYXNzd29yZCBtZXRob2RzIGZvciBlYWNo IG9uZS4gVGhlIHNhbWUKQEAgLTc0LDYxICs4MSw2NiBAQCAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiApOwogJEVOVnsiUEdQQVNTV09SRCJ9ID0gJ3Bhc3MnOwogCisjIENyZWF0 ZSBhIGRhdGFiYXNlIHRvIHRlc3QgcmVndWxhciBleHByZXNzaW9uCiskbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBkYXRhYmFzZSB0ZXN0ZGI7IgorKTsKKwogIyBG b3IgInRydXN0IiBtZXRob2QsIGFsbCB1c2VycyBzaG91bGQgYmUgYWJsZSB0byBjb25uZWN0 LiBUaGVzZSB1c2VycyBhcmUgbm90CiAjIGNvbnNpZGVyZWQgdG8gYmUgYXV0aGVudGljYXRl ZC4KLXJlc2V0X3BnX2hiYSgkbm9kZSwgJ3RydXN0Jyk7Ci10ZXN0X3JvbGUoJG5vZGUsICdz Y3JhbV9yb2xlJywgJ3RydXN0JywgMCwKK3Jlc2V0X3BnX2hiYSgkbm9kZSwgJ2xvY2FsJywn YWxsJywgJ2FsbCcsICd0cnVzdCcpOwordGVzdF9jb25uKCRub2RlLCAndXNlcj1zY3JhbV9y b2xlJywgJ3RydXN0JywgMCwKIAlsb2dfdW5saWtlID0+IFtxci9jb25uZWN0aW9uIGF1dGhl bnRpY2F0ZWQ6L10pOwotdGVzdF9yb2xlKCRub2RlLCAnbWQ1X3JvbGUnLCAndHJ1c3QnLCAw LAordGVzdF9jb25uKCRub2RlLCAndXNlcj1tZDVfcm9sZScsICd0cnVzdCcsIDAsCiAJbG9n X3VubGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOi9dKTsKIAogIyBGb3Ig cGxhaW4gInBhc3N3b3JkIiBtZXRob2QsIGFsbCB1c2VycyBzaG91bGQgYWxzbyBiZSBhYmxl IHRvIGNvbm5lY3QuCi1yZXNldF9wZ19oYmEoJG5vZGUsICdwYXNzd29yZCcpOwotdGVzdF9y b2xlKCRub2RlLCAnc2NyYW1fcm9sZScsICdwYXNzd29yZCcsIDAsCityZXNldF9wZ19oYmEo JG5vZGUsICdsb2NhbCcsICdhbGwnLCAnYWxsJywgJ3Bhc3N3b3JkJyk7Cit0ZXN0X2Nvbm4o JG5vZGUsICd1c2VyPXNjcmFtX3JvbGUnLCAncGFzc3dvcmQnLCAwLAogCWxvZ19saWtlID0+ CiAJICBbcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOiBpZGVudGl0eT0ic2NyYW1fcm9s ZSIgbWV0aG9kPXBhc3N3b3JkL10pOwotdGVzdF9yb2xlKCRub2RlLCAnbWQ1X3JvbGUnLCAn cGFzc3dvcmQnLCAwLAordGVzdF9jb25uKCRub2RlLCAndXNlcj1tZDVfcm9sZScsICdwYXNz d29yZCcsIDAsCiAJbG9nX2xpa2UgPT4KIAkgIFtxci9jb25uZWN0aW9uIGF1dGhlbnRpY2F0 ZWQ6IGlkZW50aXR5PSJtZDVfcm9sZSIgbWV0aG9kPXBhc3N3b3JkL10pOwogCiAjIEZvciAi c2NyYW0tc2hhLTI1NiIgbWV0aG9kLCB1c2VyICJzY3JhbV9yb2xlIiBzaG91bGQgYmUgYWJs ZSB0byBjb25uZWN0LgotcmVzZXRfcGdfaGJhKCRub2RlLCAnc2NyYW0tc2hhLTI1NicpOwot dGVzdF9yb2xlKAorcmVzZXRfcGdfaGJhKCRub2RlLCAnbG9jYWwnLCAnYWxsJywgJ2FsbCcs ICdzY3JhbS1zaGEtMjU2Jyk7Cit0ZXN0X2Nvbm4oCiAJJG5vZGUsCi0JJ3NjcmFtX3JvbGUn LAorCSd1c2VyPXNjcmFtX3JvbGUnLAogCSdzY3JhbS1zaGEtMjU2JywKIAkwLAogCWxvZ19s aWtlID0+IFsKIAkJcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOiBpZGVudGl0eT0ic2Ny YW1fcm9sZSIgbWV0aG9kPXNjcmFtLXNoYS0yNTYvCiAJXSk7Ci10ZXN0X3JvbGUoJG5vZGUs ICdtZDVfcm9sZScsICdzY3JhbS1zaGEtMjU2JywgMiwKK3Rlc3RfY29ubigkbm9kZSwgJ3Vz ZXI9bWQ1X3JvbGUnLCAnc2NyYW0tc2hhLTI1NicsIDIsCiAJbG9nX3VubGlrZSA9PiBbcXIv Y29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOi9dKTsKIAogIyBUZXN0IHRoYXQgYmFkIHBhc3N3 b3JkcyBhcmUgcmVqZWN0ZWQuCiAkRU5WeyJQR1BBU1NXT1JEIn0gPSAnYmFkcGFzcyc7Ci10 ZXN0X3JvbGUoJG5vZGUsICdzY3JhbV9yb2xlJywgJ3NjcmFtLXNoYS0yNTYnLCAyLAordGVz dF9jb25uKCRub2RlLCAndXNlcj1zY3JhbV9yb2xlJywgJ3NjcmFtLXNoYS0yNTYnLCAyLAog CWxvZ191bmxpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0aGVudGljYXRlZDovXSk7CiAkRU5W eyJQR1BBU1NXT1JEIn0gPSAncGFzcyc7CiAKICMgRm9yICJtZDUiIG1ldGhvZCwgYWxsIHVz ZXJzIHNob3VsZCBiZSBhYmxlIHRvIGNvbm5lY3QgKFNDUkFNCiAjIGF1dGhlbnRpY2F0aW9u IHdpbGwgYmUgcGVyZm9ybWVkIGZvciB0aGUgdXNlciB3aXRoIGEgU0NSQU0gc2VjcmV0LikK LXJlc2V0X3BnX2hiYSgkbm9kZSwgJ21kNScpOwotdGVzdF9yb2xlKCRub2RlLCAnc2NyYW1f cm9sZScsICdtZDUnLCAwLAorcmVzZXRfcGdfaGJhKCRub2RlLCAnbG9jYWwnLCAnYWxsJywg J2FsbCcsICdtZDUnKTsKK3Rlc3RfY29ubigkbm9kZSwgJ3VzZXI9c2NyYW1fcm9sZScsICdt ZDUnLCAwLAogCWxvZ19saWtlID0+CiAJICBbcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVk OiBpZGVudGl0eT0ic2NyYW1fcm9sZSIgbWV0aG9kPW1kNS9dKTsKLXRlc3Rfcm9sZSgkbm9k ZSwgJ21kNV9yb2xlJywgJ21kNScsIDAsCit0ZXN0X2Nvbm4oJG5vZGUsICd1c2VyPW1kNV9y b2xlJywgJ21kNScsIDAsCiAJbG9nX2xpa2UgPT4KIAkgIFtxci9jb25uZWN0aW9uIGF1dGhl bnRpY2F0ZWQ6IGlkZW50aXR5PSJtZDVfcm9sZSIgbWV0aG9kPW1kNS9dKTsKIAogIyBUZXN0 cyBmb3IgY2hhbm5lbCBiaW5kaW5nIHdpdGhvdXQgU1NMLgogIyBVc2luZyB0aGUgcGFzc3dv cmQgYXV0aGVudGljYXRpb24gbWV0aG9kOyBjaGFubmVsIGJpbmRpbmcgY2FuJ3Qgd29yawot cmVzZXRfcGdfaGJhKCRub2RlLCAncGFzc3dvcmQnKTsKK3Jlc2V0X3BnX2hiYSgkbm9kZSwg J2xvY2FsJywgJ2FsbCcsICdhbGwnLCAncGFzc3dvcmQnKTsKICRFTlZ7IlBHQ0hBTk5FTEJJ TkRJTkcifSA9ICdyZXF1aXJlJzsKLXRlc3Rfcm9sZSgkbm9kZSwgJ3NjcmFtX3JvbGUnLCAn c2NyYW0tc2hhLTI1NicsIDIpOwordGVzdF9jb25uKCRub2RlLCAndXNlcj1zY3JhbV9yb2xl JywgJ3NjcmFtLXNoYS0yNTYnLCAyKTsKICMgU1NMIG5vdCBpbiB1c2U7IGNoYW5uZWwgYmlu ZGluZyBzdGlsbCBjYW4ndCB3b3JrCi1yZXNldF9wZ19oYmEoJG5vZGUsICdzY3JhbS1zaGEt MjU2Jyk7CityZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcsICdhbGwnLCAnYWxsJywgJ3Nj cmFtLXNoYS0yNTYnKTsKICRFTlZ7IlBHQ0hBTk5FTEJJTkRJTkcifSA9ICdyZXF1aXJlJzsK LXRlc3Rfcm9sZSgkbm9kZSwgJ3NjcmFtX3JvbGUnLCAnc2NyYW0tc2hhLTI1NicsIDIpOwor dGVzdF9jb25uKCRub2RlLCAndXNlcj1zY3JhbV9yb2xlJywgJ3NjcmFtLXNoYS0yNTYnLCAy KTsKIAogIyBUZXN0IC5wZ3Bhc3MgcHJvY2Vzc2luZzsgYnV0IHVzZSBhIHRlbXAgZmlsZSwg ZG9uJ3Qgb3ZlcndyaXRlIHRoZSByZWFsIG9uZSEKIG15ICRwZ3Bhc3NmaWxlID0gIiR7UG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVja30vcGdwYXNzIjsKQEAgLTE0NSwxNSAr MTU3LDM4IEBAIGFwcGVuZF90b19maWxlKAogISk7CiBjaG1vZCAwNjAwLCAkcGdwYXNzZmls ZSBvciBkaWU7CiAKLXJlc2V0X3BnX2hiYSgkbm9kZSwgJ3Bhc3N3b3JkJyk7Ci10ZXN0X3Jv bGUoJG5vZGUsICdzY3JhbV9yb2xlJywgJ3Bhc3N3b3JkIGZyb20gcGdwYXNzJywgMCk7Ci10 ZXN0X3JvbGUoJG5vZGUsICdtZDVfcm9sZScsICAgJ3Bhc3N3b3JkIGZyb20gcGdwYXNzJywg Mik7CityZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcsICdhbGwnLCAnYWxsJywgJ3Bhc3N3 b3JkJyk7Cit0ZXN0X2Nvbm4oJG5vZGUsICd1c2VyPXNjcmFtX3JvbGUnLCAncGFzc3dvcmQg ZnJvbSBwZ3Bhc3MnLCAwKTsKK3Rlc3RfY29ubigkbm9kZSwgJ3VzZXI9bWQ1X3JvbGUnLCAg ICdwYXNzd29yZCBmcm9tIHBncGFzcycsIDIpOwogCiBhcHBlbmRfdG9fZmlsZSgKIAkkcGdw YXNzZmlsZSwgcXEhCiAqOio6KjptZDVfcm9sZTpwXFxhc3MKICEpOwogCi10ZXN0X3JvbGUo JG5vZGUsICdtZDVfcm9sZScsICdwYXNzd29yZCBmcm9tIHBncGFzcycsIDApOwordGVzdF9j b25uKCRub2RlLCAndXNlcj1tZDVfcm9sZScsICdwYXNzd29yZCBmcm9tIHBncGFzcycsIDAp OworCisjIFRlc3Rpbmcgd2l0aCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHVzZXJuYW1lCity ZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcsICdhbGwnLCAnL14uKm5vbWF0Y2guKiQsIGJh ZHVzZXIsIC9eLiptZC4qJCcsICdwYXNzd29yZCcpOwordGVzdF9jb25uKCRub2RlLCAndXNl cj1tZDVfcm9sZScsICdwYXNzd29yZCwgbWF0Y2hpbmcgcmVnZXhwIGZvciB1c2VybmFtZScs IDApOworCityZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcsICdhbGwnLCAnL14uKm5vbWF0 Y2guKiQsIGJhZHVzZXIsIC9eLiptX2QuKiQnLCAncGFzc3dvcmQnKTsKK3Rlc3RfY29ubigk bm9kZSwgJ3VzZXI9bWQ1X3JvbGUnLCAncGFzc3dvcmQsIG5vbiBtYXRjaGluZyByZWdleHAg Zm9yIHVzZXJuYW1lJywgMiwKKwkJbG9nX3VubGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRo ZW50aWNhdGVkOi9dKTsKKworIyBUZXN0aW5nIHdpdGggcmVndWxhciBleHByZXNzaW9uIGZv ciBkYm5hbWUKK3Jlc2V0X3BnX2hiYSgkbm9kZSwgJ2xvY2FsJywgJy9eLipub21hdGNoLiok LCBiYWRkYiwgL150LipiJCcsICdhbGwnLCAncGFzc3dvcmQnKTsKK3Rlc3RfY29ubigkbm9k ZSwgJ3VzZXI9bWQ1X3JvbGUgZGJuYW1lPXRlc3RkYicsICdwYXNzd29yZCwgbWF0Y2hpbmcg cmVnZXhwIGZvciBkYm5hbWUnLCAwKTsKKworcmVzZXRfcGdfaGJhKCRub2RlLCAnbG9jYWwn LCAnL14uKm5vbWF0Y2guKiQsIGJhZGRiLCAvXnQuKmJhJCcsICdhbGwnLCAncGFzc3dvcmQn KTsKK3Rlc3RfY29ubigkbm9kZSwgJ3VzZXI9bWQ1X3JvbGUgZGJuYW1lPXRlc3RkYicsICdw YXNzd29yZCwgbm9uIG1hdGNoaW5nIHJlZ2V4cCBmb3IgZGJuYW1lJywgMiwKKwkJbG9nX3Vu bGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOi9dKTsKKworIyBUZXN0aW5n IHdpdGggcmVndWxhciBleHByZXNzaW9uIGZvciBob3N0bmFtZQorcmVzZXRfcGdfaGJhKCRu b2RlLCAnaG9zdCcsICdhbGwnLCAnYWxsICAvXi4qJCcsICdwYXNzd29yZCcpOwordGVzdF9j b25uKCRub2RlLCAndXNlcj1tZDVfcm9sZSBob3N0PWxvY2FsaG9zdCcsICdwYXNzd29yZCwg bWF0Y2hpbmcgcmVnZXhwIGZvciBob3N0bmFtZScsIDApOworCityZXNldF9wZ19oYmEoJG5v ZGUsICdob3N0JywgJ2FsbCcsICdhbGwgIC9eJCcsICdwYXNzd29yZCcpOwordGVzdF9jb25u KCRub2RlLCAndXNlcj1tZDVfcm9sZSBob3N0PWxvY2FsaG9zdCcsICdwYXNzd29yZCwgbm9u IG1hdGNoaW5nIHJlZ2V4cCBmb3IgaG9zdG5hbWUnLCAyKTsKIAogZG9uZV90ZXN0aW5nKCk7 Cg== --------------V8R8lmRMuF70t6sqwzdh1ly0--