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 1oDP3D-000407-Ki for pgsql-hackers@arkaria.postgresql.org; Mon, 18 Jul 2022 11:36:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oDP3C-000305-73 for pgsql-hackers@arkaria.postgresql.org; Mon, 18 Jul 2022 11:36:34 +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 1oDP3B-0002zu-1q for pgsql-hackers@lists.postgresql.org; Mon, 18 Jul 2022 11:36:33 +0000 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oDP36-0007SQ-BE for pgsql-hackers@lists.postgresql.org; Mon, 18 Jul 2022 11:36:31 +0000 Received: by mail-lj1-x233.google.com with SMTP id p6so13220590ljc.8 for ; Mon, 18 Jul 2022 04:36:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to; bh=CncPRlcdnEvfwuhA5Yim8oy3HEK1+z0xFbgs0zYNo3c=; b=Me5vo9+lZmSZeugDeR/g1myp0aqQQP0i1njsTON0Z1eK2/rOVBocs2YYHHklQc6hxM P5pJQhbMjZYrrCpmKRIgqAkMxIkhLz2hzX+ai+UPqQtHqzHHTkyEjcRKRWyjXB4/nJ0L rENWp+HvdwoZKI+be0We6JPvyJ6OwEr7HrEl/Pqv6o0YFYmZyq2Pilp3VEurB/KgFK5y 43hOyoYNK6eWhYRKth2kgvHpYWR54CR3KMjURiq038rNwaHc6KMzUXcmsINByyfkUJnX O1Gt/QnJH+mg096rixcLy8Pa39qgXjK2d1qnGq1Cvbo3Jclibknj5cinNsDtJ70dV0MW tKpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=CncPRlcdnEvfwuhA5Yim8oy3HEK1+z0xFbgs0zYNo3c=; b=D+3qm6yMNhviUrzy/E1YzCOionwf8z/wlj5v5+XB5IXfp+nrbVpV+x4zUNHgyqkHKo 3MlcMoZkXR+e9hLrw82XWQ+d2vuxK15IljVfqJMqhkowsXvCJTUB5Nw+NUTeWy87PMDU O42XX7HKD4HTBJ46DBzU+Ll8+ewCX7ZwvfNJu8ivs05ZU8hkzrWoABB2rjegYRmEnBgn SBJehFfPdSpEbs4jd2m1LEDr+Ucr2vqmtepRo1D4iy7a+JnKhm4fwHQDRDjdiPRP4N9l +NxEZICa5a4cJ8FdEmQsliQ8ju6QHRhuIA9R1IamO0LBxVaqkA24lsf+KTOBEzdEQrR2 nUaA== X-Gm-Message-State: AJIora9PcrutHIx9Yp57/KyK/YfmHRvyM+2gLxuyZycC+tL1OZsCjGlp L18uAfzXX0a5Cbw1GcOzbP590QasFQm2fRtLg9/rSCHrzgsqlYmNk+fZcJU3EBJgH+I+ILUZogy 1yA4sqrQIv/BCgPuIUBO89Dt6QLO3+p38vdCV9ZRk16de8bptSZ6rZozzbUFHKhvgvUGCVS8vJV L9cqjxUBOaONe6Myfs56IZqetxic0GaUkRis0LEYG14Pk0jBDfNl8X X-Google-Smtp-Source: AGRyM1uZ8sSAKsfPMoEIFh7Xu250FrmpXrmt6qgMf+MjshN4NiCYD8seAkEL1eW7zhR1YCjJjsX5yQ== X-Received: by 2002:a2e:9bd2:0:b0:25d:883d:d2a1 with SMTP id w18-20020a2e9bd2000000b0025d883dd2a1mr11665501ljj.262.1658144186369; Mon, 18 Jul 2022 04:36:26 -0700 (PDT) Received: from [10.137.0.17] (84-217-81-189.customers.ownit.se. [84.217.81.189]) by smtp.gmail.com with ESMTPSA id cf28-20020a056512281c00b00478f739f1fdsm2557384lfb.103.2022.07.18.04.36.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 18 Jul 2022 04:36:25 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------N2korMheyEJMOm3zS7FDp0rV" Message-ID: <113b8f5b-eec6-ea60-8508-439f2692887c@enterprisedb.com> Date: Mon, 18 Jul 2022 13:36:23 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: postgres_fdw: using TABLESAMPLE to collect remote sample Content-Language: en-US To: Tom Lane Cc: Andres Freund , Fujii Masao , Robert Haas , PostgreSQL Hackers References: <151e835f-55d6-ddbc-b5b4-07ee606aba44@enterprisedb.com> <2080021.1644601183@sss.pgh.pa.us> <2082308.1644602761@sss.pgh.pa.us> <60c4dc7c-82e8-ab04-a938-d7b7c5ee75f0@enterprisedb.com> <84afe85f-2aa0-5aef-fa4a-59759afc03fb@enterprisedb.com> <76202fae-0c34-4f49-e3a0-1071c3fcf9e1@enterprisedb.com> <2d679fff-fb74-8ad1-fe57-094563f2aa55@enterprisedb.com> <20220322011820.vlz3l577elz46wln@alap3.anarazel.de> <3998908.1658008664@sss.pgh.pa.us> From: Tomas Vondra In-Reply-To: <3998908.1658008664@sss.pgh.pa.us> X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 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. --------------N2korMheyEJMOm3zS7FDp0rV Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 7/16/22 23:57, Tom Lane wrote: > Andres Freund writes: >> On 2022-02-23 00:51:24 +0100, Tomas Vondra wrote: >>> And here's the slightly simplified patch, without the part adding the >>> unnecessary GetServerVersion() function. > >> Doesn't apply anymore: http://cfbot.cputube.org/patch_37_3535.log >> Marked as waiting-on-author. > > Here's a rebased version that should at least pass regression tests. > Thanks. I've been hacking on this over the past few days, and by coincidence I've been improving exactly the stuff you've pointed out in the review. 0001 is just the original patch rebased, 0002 includes all the various changes. > I've not reviewed it in any detail, but: > > * I'm not really on board with defaulting to SYSTEM sample method, > and definitely not on board with not allowing any other choice. > We don't know enough about the situation in a remote table to be > confident that potentially-nonrandom sampling is OK. So personally > I'd default to BERNOULLI, which is more reliable and seems plenty fast > enough given your upthread results. It could be an idea to extend the > sample option to be like "sample [ = methodname ]", if you want more > flexibility, but I'd be happy leaving that for another time. > I agree, I came roughly to the same conclusion, so I replaced the simple on/off option with these options: off - Disables the remote sampling, so we just fetch everything and do sampling on the local node, just like today. random - Remote sampling, but "naive" implementation using random() function. The advantage is this reduces the amount of data we need to transfer, but it still reads the whole table. This should work for all server versions, I believe. system - TABLESAMPLE system method. bernoulli - TABLESAMOLE bernoulli (default for 9.5+) auto - picks bernoulli on 9.5+, random on older servers. I'm not sure about custom TABLESAMPLE methods - that adds more complexity to detect if it's installed, it's trickier to decide what's the best choice (for "auto" to make decide), and the parameter is also different (e.g. system_rows uses number of rows vs. sampling rate). > * The code depending on reltuples is broken in recent server versions, > and might give useless results in older ones too (if reltuples = > relpages = 0). Ideally we'd retrieve all of reltuples, relpages, and > pg_relation_size(rel), and do the same calculation the planner does. > Not sure if pg_relation_size() exists far enough back though. > Yes, I noticed that too, and the reworked code should deal with this reltuples=0 (by just disabling remote sampling). I haven't implemented the reltuples/relpages correction yet, but I don't think compatibility would be an issue - deparseAnalyzeSizeSql() already calls pg_relation_size(), after all. FWIW it seems a bit weird being so careful about adjusting reltuples, when acquire_inherited_sample_rows() only really looks at relpages when deciding how many rows to sample from each partition. If our goal is to use a more accurate reltuples, maybe we should do that in the first step already. Otherwise we may end up build with a sample that does not reflect sizes of the partitions correctly. Of course, the sample rate also matters for non-partitioned tables. > * Copying-and-pasting all of deparseAnalyzeSql (twice!) seems pretty > bletcherous. Why not call that and then add a WHERE clause to its > result, or just add some parameters to it so it can do that itself? > Right. I ended up refactoring this into a single function, with a "method" parameter that determines if/how we do the remote sampling. > * More attention to updating relevant comments would be appropriate, > eg here you've not bothered to fix the adjacent falsified comment: > > /* We've retrieved all living tuples from foreign server. */ > - *totalrows = astate.samplerows; > + if (do_sample) > + *totalrows = reltuples; > + else > + *totalrows = astate.samplerows; > Yep, fixed. > * Needs docs obviously. I'm not sure if the existing regression > testing covers the new code adequately or if we need more cases. > Yep, I added the "sampling_method" to postgres-fdw.sgml. > Having said that much, I'm going to leave it in Waiting on Author > state. Thanks. I'll switch this to "needs review" now. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------N2korMheyEJMOm3zS7FDp0rV Content-Type: text/x-patch; charset=UTF-8; name="0001-postgres_fdw-sample-data-on-remote-node-for-20220718.patch" Content-Disposition: attachment; filename*0="0001-postgres_fdw-sample-data-on-remote-node-for-20220718.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3NzU4OWJhOTBlOGYzMDA3YjBkNThmNTIyZjllNDk4YjdkOGFiMjc3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU2F0LCAxNiBKdWwgMjAyMiAwMDozNzoyMCArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMS8yXSBwb3N0Z3Jlc19mZHc6IHNhbXBsZSBkYXRhIG9uIHJlbW90ZSBu b2RlIGZvciBBTkFMWVpFCgpXaGVuIHBlcmZvcm1pbmcgQU5BTFlaRSBvbiBhIGZvcmVpZ24g dGFibGVzLCB3ZSBuZWVkIHRvIGNvbGxlY3Qgc2FtcGxlCm9mIHJvd3MuIFVudGlsIG5vdywg d2Ugc2ltcGx5IHJlYWQgYWxsIGRhdGEgZnJvbSB0aGUgcmVtb3RlIG5vZGUgYW5kCmJ1aWx0 IHRoZSBzYW1wbGUgbG9jYWxseS4gVGhhdCBpcyB2ZXJ5IGV4cGVuc2l2ZSwgZXNwZWNpYWxs eSBpbiB0ZXJtcyBvZgpuZXR3b3JrIHRyYWZmaWMgZXRjLiBCdXQgaXQncyBwb3NzaWJsZSB0 byBtb3ZlIHRoZSBzYW1wbGluZyB0byB0aGUKcmVtb3RlIG5vZGUsIGFuZCB1c2UgZWl0aGVy IFRBQkxFU0FNUExFIG9yIHNpbXBseSByYW5kb20oKSB0byB0cmFuc2ZlcgpqdXN0IG11Y2gg c21hbGxlciBhbW91bnQgb2YgZGF0YS4KClNvIHdlIHJ1biBlaXRoZXIKCiAgIFNFTEVDVCAq IEZST00gdGFibGUgVEFCTEVTQU1QTEUgU1lTVEVNKGZyYWN0aW9uKQoKb3IKCiAgU0VMRUNU ICogRlJPTSB0YWJsZSBXSEVSRSByYW5kb20oKSA8IGZyYWN0aW9uCgpkZXBlbmRpbmcgb24g dGhlIHNlcnZlciB2ZXJzaW9uIChUQUJMRVNBTVBMRSBpcyBzdXBwb3J0ZWQgc2luY2UgOS41 KS4KClRvIGRvIHRoYXQsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgZnJhY3Rpb24gb2Yg dGhlIHRhYmxlIHRvIHNhbXBsZS4KV2UgcmVseSBvbiByZWx0dXBsZXMgKGZldGNoZWQgZnJv bSB0aGUgcmVtb3RlIG5vZGUpIHRvIGJlIHN1ZmZpY2llbnRseQphY2N1cmF0ZSBhbmQgdXAg dG8gZGF0ZSwgYW5kIGNhbGN1bGF0ZSB0aGUgZnJhY3Rpb24gYmFzZWQgb24gdGhhdC4gV2UK aW5jcmVhc2UgdGhlIHNhbXBsZSBzaXplIGEgYml0IChpbiBjYXNlIHRoZSB0YWJsZSBzaHJ1 bmspLCBhbmQgd2Ugc3RpbGwKZG8gdGhlIHJlc2Vydm9pciBzYW1wbGluZyAoaW4gY2FzZSBp dCBncmV3KS4KClVzaW5nIHRzbV9zeXN0ZW1fcm93cyB3b3VsZCBhbGxvdyBzcGVjaWZ5aW5n IHNhbXBsZSBzaXplIGluIHJvd3MsCndpdGhvdXQgZGV0ZXJtaW5pbmcgc2FtcGxpbmcgcmF0 ZS4gQnV0IHRoZSBzYW1wbGluZyBtZXRob2QgbWF5IG5vdCBiZQppbnN0YWxsZWQsIGFuZCB3 ZSdkIHN0aWxsIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbiBzaXplLgoKVGhpcyBh ZGRzICdzYW1wbGUnIG9wdGlvbiBmb3IgcmVtb3RlIHNlcnZlcnMgLyB0YWJsZXMuIEJ5IGRl ZmF1bHQsIGl0J3MKc2V0IHRvICd0cnVlJyB3aGljaCBlbmFibGVzIHJlbW90ZSBzYW1wbGlu Zy4gU2V0dGluZyBpdCB0byAnZmFsc2UnIHVzZXMKdGhlIG9sZCBhcHByb2FjaCBvZiBmZXRj aGluZyBldmVyeXRoaW5nIGFuZCBzYW1wbGluZyBsb2NhbGx5LgotLS0KIGNvbnRyaWIvcG9z dGdyZXNfZmR3L2RlcGFyc2UuYyAgICAgIHwgMTUyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jICAgICAgIHwgICA3ICstCiBj b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyB8IDE0MiArKysrKysrKysrKysr KysrKysrKysrKysrLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmggfCAg IDcgKysKIDQgZmlsZXMgY2hhbmdlZCwgMzA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCmluZGV4IDhmNGQ4YTUwMjI2Li44NDU0ZjQ4 OTE2MSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCisrKyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYwpAQCAtMjI5Nyw2ICsyMjk3LDI2IEBA IGRlcGFyc2VBbmFseXplU2l6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsKQog CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiOjpwZ19jYXRhbG9nLnJlZ2NsYXNzKSAvICVkIiwg QkxDS1NaKTsKIH0KIAorLyoKKyAqIENvbnN0cnVjdCBTRUxFQ1Qgc3RhdGVtZW50IHRvIGFj cXVpcmUgbnVtYmUgb2Ygcm93cyBvZiBnaXZlbiByZWxhdGlvbi4KKyAqCisgKiBOb3RlOiBN YXliZSB0aGlzIHNob3VsZCBjb21wYXJlIHJlbHBhZ2VzIGFuZCBjdXJyZW50IHJlbGF0aW9u IHNpemUKKyAqIGFuZCBhZGp1c3QgcmVsdHVwbGVzIGFjY29yZGluZ2x5PworICovCit2b2lk CitkZXBhcnNlQW5hbHl6ZVR1cGxlc1NxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVs KQoreworCVN0cmluZ0luZm9EYXRhIHJlbG5hbWU7CisKKwkvKiBXZSdsbCBuZWVkIHRoZSBy ZW1vdGUgcmVsYXRpb24gbmFtZSBhcyBhIGxpdGVyYWwuICovCisJaW5pdFN0cmluZ0luZm8o JnJlbG5hbWUpOworCWRlcGFyc2VSZWxhdGlvbigmcmVsbmFtZSwgcmVsKTsKKworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiU0VMRUNUIHJlbHR1cGxlcyBGUk9NIHBnX2NhdGFs b2cucGdfY2xhc3MgV0hFUkUgb2lkID0gIik7CisJZGVwYXJzZVN0cmluZ0xpdGVyYWwoYnVm LCByZWxuYW1lLmRhdGEpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiOjpwZ19j YXRhbG9nLnJlZ2NsYXNzIik7Cit9CisKIC8qCiAgKiBDb25zdHJ1Y3QgU0VMRUNUIHN0YXRl bWVudCB0byBhY3F1aXJlIHNhbXBsZSByb3dzIG9mIGdpdmVuIHJlbGF0aW9uLgogICoKQEAg LTIzNTgsNiArMjM3OCwxMzggQEAgZGVwYXJzZUFuYWx5emVTcWwoU3RyaW5nSW5mbyBidWYs IFJlbGF0aW9uIHJlbCwgTGlzdCAqKnJldHJpZXZlZF9hdHRycykKIAlkZXBhcnNlUmVsYXRp b24oYnVmLCByZWwpOwogfQogCisvKgorICogQ29uc3RydWN0IFNFTEVDVCBzdGF0ZW1lbnQg dG8gYWNxdWlyZSBzYW1wbGUgcm93cyBvZiBnaXZlbiByZWxhdGlvbiwKKyAqIGJ5IHNhbXBs aW5nIGEgZnJhY3Rpb24gb2YgdGhlIHRhYmxlIHVzaW5nIFRBQkxFU0FNUExFIFNZU1RFTS4K KyAqCisgKiBTRUxFQ1QgY29tbWFuZCBpcyBhcHBlbmRlZCB0byBidWYsIGFuZCBsaXN0IG9m IGNvbHVtbnMgcmV0cmlldmVkCisgKiBpcyByZXR1cm5lZCB0byAqcmV0cmlldmVkX2F0dHJz LgorICoKKyAqIE5vdGU6IFdlIGNvdWxkIGFsbG93IHNlbGVjdGluZyBzeXN0ZW0vYmVybm91 bGxpLCBhbmQgbWF5YmUgZXZlbiB0aGUKKyAqIG9wdGlvbmFsIFRTTSBtb2R1bGVzIChlc3Bl Y2lhbGx5IHRzbV9zeXN0ZW1fcm93cyB3b3VsZCBoZWxwKS4KKyAqLwordm9pZAorZGVwYXJz ZUFuYWx5emVUYWJsZVNhbXBsZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBM aXN0ICoqcmV0cmlldmVkX2F0dHJzLCBkb3VibGUgc2FtcGxlX2ZyYWMpCit7CisJT2lkCQkJ cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBS ZWxhdGlvbkdldERlc2NyKHJlbCk7CisJaW50CQkJaTsKKwljaGFyCSAgICpjb2xuYW1lOwor CUxpc3QJICAgKm9wdGlvbnM7CisJTGlzdENlbGwgICAqbGM7CisJYm9vbAkJZmlyc3QgPSB0 cnVlOworCisJKnJldHJpZXZlZF9hdHRycyA9IE5JTDsKKworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCAiU0VMRUNUICIpOworCWZvciAoaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0 czsgaSsrKQorCXsKKwkJLyogSWdub3JlIGRyb3BwZWQgY29sdW1ucy4gKi8KKwkJaWYgKFR1 cGxlRGVzY0F0dHIodHVwZGVzYywgaSktPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOwor CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7 CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJLyogVXNlIGF0dHJpYnV0ZSBuYW1lIG9yIGNvbHVt bl9uYW1lIG9wdGlvbi4gKi8KKwkJY29sbmFtZSA9IE5hbWVTdHIoVHVwbGVEZXNjQXR0cih0 dXBkZXNjLCBpKS0+YXR0bmFtZSk7CisJCW9wdGlvbnMgPSBHZXRGb3JlaWduQ29sdW1uT3B0 aW9ucyhyZWxpZCwgaSArIDEpOworCisJCWZvcmVhY2gobGMsIG9wdGlvbnMpCisJCXsKKwkJ CURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCWlmIChz dHJjbXAoZGVmLT5kZWZuYW1lLCAiY29sdW1uX25hbWUiKSA9PSAwKQorCQkJeworCQkJCWNv bG5hbWUgPSBkZWZHZXRTdHJpbmcoZGVmKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKGNvbG5hbWUp KTsKKworCQkqcmV0cmlldmVkX2F0dHJzID0gbGFwcGVuZF9pbnQoKnJldHJpZXZlZF9hdHRy cywgaSArIDEpOworCX0KKworCS8qIERvbid0IGdlbmVyYXRlIGJhZCBzeW50YXggZm9yIHpl cm8tY29sdW1uIHJlbGF0aW9uLiAqLworCWlmIChmaXJzdCkKKwkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICJOVUxMIik7CisKKwkvKgorCSAqIENvbnN0cnVjdCBGUk9NIGNsYXVz ZQorCSAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIEZST00gIik7CisJZGVw YXJzZVJlbGF0aW9uKGJ1ZiwgcmVsKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBUQUJM RVNBTVBMRSBTWVNURU0oJWYpIiwgKDEwMC4wICogc2FtcGxlX2ZyYWMpKTsKK30KKworLyoK KyAqIENvbnN0cnVjdCBTRUxFQ1Qgc3RhdGVtZW50IHRvIGFjcXVpcmUgc2FtcGxlIHJvd3Mg b2YgZ2l2ZW4gcmVsYXRpb24sCisgKiBieSBzYW1wbGluZyBhIGZyYWN0aW9uIG9mIHRoZSB0 YWJsZSB1c2luZyBUQUJMRVNBTVBMRSBTWVNURU0uCisgKgorICogU0VMRUNUIGNvbW1hbmQg aXMgYXBwZW5kZWQgdG8gYnVmLCBhbmQgbGlzdCBvZiBjb2x1bW5zIHJldHJpZXZlZAorICog aXMgcmV0dXJuZWQgdG8gKnJldHJpZXZlZF9hdHRycy4KKyAqCisgKiBOb3RlOiBXZSBjb3Vs ZCBhbGxvdyBzZWxlY3Rpbmcgc3lzdGVtL2Jlcm5vdWxsaSwgYW5kIG1heWJlIGV2ZW4gdGhl CisgKiBvcHRpb25hbCBUU00gbW9kdWxlcyAoZXNwZWNpYWxseSB0c21fc3lzdGVtX3Jvd3Mg d291bGQgaGVscCkuCisgKi8KK3ZvaWQKK2RlcGFyc2VBbmFseXplTGVnYWN5U2FtcGxlU3Fs KFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMs IGRvdWJsZSBzYW1wbGVfZnJhYykKK3sKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVs aWQocmVsKTsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwlpbnQJCQlpOworCWNoYXIJICAgKmNvbG5hbWU7CisJTGlzdAkgICAqb3B0aW9uczsKKwlM aXN0Q2VsbCAgICpsYzsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwkqcmV0cmlldmVkX2F0 dHJzID0gTklMOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJTRUxFQ1QgIik7 CisJZm9yIChpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQkvKiBJZ25v cmUgZHJvcHBlZCBjb2x1bW5zLiAqLworCQlpZiAoVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBp KS0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwor CQkvKiBVc2UgYXR0cmlidXRlIG5hbWUgb3IgY29sdW1uX25hbWUgb3B0aW9uLiAqLworCQlj b2xuYW1lID0gTmFtZVN0cihUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpLT5hdHRuYW1lKTsK KwkJb3B0aW9ucyA9IEdldEZvcmVpZ25Db2x1bW5PcHRpb25zKHJlbGlkLCBpICsgMSk7CisK KwkJZm9yZWFjaChsYywgb3B0aW9ucykKKwkJeworCQkJRGVmRWxlbSAgICAqZGVmID0gKERl ZkVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJaWYgKHN0cmNtcChkZWYtPmRlZm5hbWUsICJj b2x1bW5fbmFtZSIpID09IDApCisJCQl7CisJCQkJY29sbmFtZSA9IGRlZkdldFN0cmluZyhk ZWYpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoY29sbmFtZSkpOworCisJCSpyZXRyaWV2ZWRfYXR0 cnMgPSBsYXBwZW5kX2ludCgqcmV0cmlldmVkX2F0dHJzLCBpICsgMSk7CisJfQorCisJLyog RG9uJ3QgZ2VuZXJhdGUgYmFkIHN5bnRheCBmb3IgemVyby1jb2x1bW4gcmVsYXRpb24uICov CisJaWYgKGZpcnN0KQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIk5VTEwiKTsK KworCS8qCisJICogQ29uc3RydWN0IEZST00gY2xhdXNlCisJICovCisJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICIgRlJPTSAiKTsKKwlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwp OworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFdIRVJFIHJhbmRvbSgpIDwgJWYiLCBzYW1w bGVfZnJhYyk7Cit9CisKIC8qCiAgKiBDb25zdHJ1Y3QgYSBzaW1wbGUgIlRSVU5DQVRFIHJl bCIgc3RhdGVtZW50CiAgKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29w dGlvbi5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKaW5kZXggNTcyNTkxYTU1 OGQuLjM3NDlkNDcwMWE3IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRp b24uYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYwpAQCAtMTIyLDcgKzEy Miw4IEBAIHBvc3RncmVzX2Zkd192YWxpZGF0b3IoUEdfRlVOQ1RJT05fQVJHUykKIAkJCXN0 cmNtcChkZWYtPmRlZm5hbWUsICJ0cnVuY2F0YWJsZSIpID09IDAgfHwKIAkJCXN0cmNtcChk ZWYtPmRlZm5hbWUsICJhc3luY19jYXBhYmxlIikgPT0gMCB8fAogCQkJc3RyY21wKGRlZi0+ ZGVmbmFtZSwgInBhcmFsbGVsX2NvbW1pdCIpID09IDAgfHwKLQkJCXN0cmNtcChkZWYtPmRl Zm5hbWUsICJrZWVwX2Nvbm5lY3Rpb25zIikgPT0gMCkKKwkJCXN0cmNtcChkZWYtPmRlZm5h bWUsICJrZWVwX2Nvbm5lY3Rpb25zIikgPT0gMCB8fAorCQkJc3RyY21wKGRlZi0+ZGVmbmFt ZSwgInNhbXBsZSIpID09IDApCiAJCXsKIAkJCS8qIHRoZXNlIGFjY2VwdCBvbmx5IGJvb2xl YW4gdmFsdWVzICovCiAJCQkodm9pZCkgZGVmR2V0Qm9vbGVhbihkZWYpOwpAQCAtMjU0LDYg KzI1NSwxMCBAQCBJbml0UGdGZHdPcHRpb25zKHZvaWQpCiAJCXsia2VlcF9jb25uZWN0aW9u cyIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxzZX0sCiAJCXsicGFzc3dvcmRfcmVx dWlyZWQiLCBVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIGZhbHNlfSwKIAorCQkvKiBzYW1wbGlu ZyBpcyBhdmFpbGFibGUgb24gYm90aCBzZXJ2ZXIgYW5kIHRhYmxlICovCisJCXsic2FtcGxl IiwgRm9yZWlnblNlcnZlclJlbGF0aW9uSWQsIGZhbHNlfSwKKwkJeyJzYW1wbGUiLCBGb3Jl aWduVGFibGVSZWxhdGlvbklkLCBmYWxzZX0sCisKIAkJLyoKIAkJICogc3NsY2VydCBhbmQg c3Nsa2V5IGFyZSBpbiBmYWN0IGxpYnBxIG9wdGlvbnMsIGJ1dCB3ZSByZXBlYXQgdGhlbQog CQkgKiBoZXJlIHRvIGFsbG93IHRoZW0gdG8gYXBwZWFyIGluIGJvdGggZm9yZWlnbiBzZXJ2 ZXIgY29udGV4dCAod2hlbgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9z dGdyZXNfZmR3LmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRl eCA5NTVhNDI4ZTNkYS4uM2FkZjUxOGI2NzYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdy ZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5jCkBAIC00OTYxLDYgKzQ5NjEsNjggQEAgcG9zdGdyZXNBbmFseXplRm9yZWln blRhYmxlKFJlbGF0aW9uIHJlbGF0aW9uLAogCXJldHVybiB0cnVlOwogfQogCisvKgorICog cG9zdGdyZXNDb3VudFR1cGxlc0ZvckZvcmVpZ25UYWJsZQorICoJCUNvdW50IHR1cGxlcyBp biBmb3JlaWduIHRhYmxlIChqdXN0IGdldCBwZ19jbGFzcy5yZWx0dXBsZXMpLgorICoKKyAq IE5vdGU6IEl0J3MgdW5jbGVhciBob3cgYWNjdXJhdGUgcmVsdHVwbGVzIGlzLCBtYXliZSBz aXplIHRoYXQgdXNpbmcKKyAqIHJlbHBhZ2VzIGFuZCBzaW1wbGUgYXNzdW1wdGlvbnMgKDEg dHVwbGVzIHBlciBwYWdlLCAuLi4pPyBVc2luZworICogdHNtX3N5c3RlbV9yb3dzIHdvbGQg bWFrZSB0aGlzIHNvbWV3aGF0IHVubmVjZXNzYXJ5LgorICovCitzdGF0aWMgZG91YmxlCitw b3N0Z3Jlc0NvdW50VHVwbGVzRm9yRm9yZWlnblRhYmxlKFJlbGF0aW9uIHJlbGF0aW9uKQor eworCUZvcmVpZ25UYWJsZSAqdGFibGU7CisJVXNlck1hcHBpbmcgKnVzZXI7CisJUEdjb25u CSAgICpjb25uOworCVN0cmluZ0luZm9EYXRhIHNxbDsKKwlQR3Jlc3VsdCAgICp2b2xhdGls ZSByZXMgPSBOVUxMOworCWRvdWJsZQkJcmVsdHVwbGVzID0gLTE7CisKKwkvKgorCSAqIE5v dyB3ZSBoYXZlIHRvIGdldCB0aGUgbnVtYmVyIG9mIHBhZ2VzLiAgSXQncyBhbm5veWluZyB0 aGF0IHRoZSBBTkFMWVpFCisJICogQVBJIHJlcXVpcmVzIHVzIHRvIHJldHVybiB0aGF0IG5v dywgYmVjYXVzZSBpdCBmb3JjZXMgc29tZSBkdXBsaWNhdGlvbgorCSAqIG9mIGVmZm9ydCBi ZXR3ZWVuIHRoaXMgcm91dGluZSBhbmQgcG9zdGdyZXNBY3F1aXJlU2FtcGxlUm93c0Z1bmMu ICBCdXQKKwkgKiBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCByZWRlZmluaW5nIHRoYXQgQVBJ IGF0IHRoaXMgcG9pbnQuCisJICovCisKKwkvKgorCSAqIEdldCB0aGUgY29ubmVjdGlvbiB0 byB1c2UuICBXZSBkbyB0aGUgcmVtb3RlIGFjY2VzcyBhcyB0aGUgdGFibGUncworCSAqIG93 bmVyLCBldmVuIGlmIHRoZSBBTkFMWVpFIHdhcyBzdGFydGVkIGJ5IHNvbWUgb3RoZXIgdXNl ci4KKwkgKi8KKwl0YWJsZSA9IEdldEZvcmVpZ25UYWJsZShSZWxhdGlvbkdldFJlbGlkKHJl bGF0aW9uKSk7CisJdXNlciA9IEdldFVzZXJNYXBwaW5nKHJlbGF0aW9uLT5yZF9yZWwtPnJl bG93bmVyLCB0YWJsZS0+c2VydmVyaWQpOworCWNvbm4gPSBHZXRDb25uZWN0aW9uKHVzZXIs IGZhbHNlLCBOVUxMKTsKKworCS8qCisJICogQ29uc3RydWN0IGNvbW1hbmQgdG8gZ2V0IHBh Z2UgY291bnQgZm9yIHJlbGF0aW9uLgorCSAqLworCWluaXRTdHJpbmdJbmZvKCZzcWwpOwor CWRlcGFyc2VBbmFseXplVHVwbGVzU3FsKCZzcWwsIHJlbGF0aW9uKTsKKworCS8qIEluIHdo YXQgZm9sbG93cywgZG8gbm90IHJpc2sgbGVha2luZyBhbnkgUEdyZXN1bHRzLiAqLworCVBH X1RSWSgpOworCXsKKwkJcmVzID0gcGdmZHdfZXhlY19xdWVyeShjb25uLCBzcWwuZGF0YSwg TlVMTCk7CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykK KwkJCXBnZmR3X3JlcG9ydF9lcnJvcihFUlJPUiwgcmVzLCBjb25uLCBmYWxzZSwgc3FsLmRh dGEpOworCisJCWlmIChQUW50dXBsZXMocmVzKSAhPSAxIHx8IFBRbmZpZWxkcyhyZXMpICE9 IDEpCisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZXN1bHQgZnJvbSBkZXBhcnNlQW5h bHl6ZVNpemVTcWwgcXVlcnkiKTsKKwkJcmVsdHVwbGVzID0gc3RydG9kKFBRZ2V0dmFsdWUo cmVzLCAwLCAwKSwgTlVMTCk7CisJfQorCVBHX0ZJTkFMTFkoKTsKKwl7CisJCWlmIChyZXMp CisJCQlQUWNsZWFyKHJlcyk7CisJfQorCVBHX0VORF9UUlkoKTsKKworCVJlbGVhc2VDb25u ZWN0aW9uKGNvbm4pOworCisJcmV0dXJuIHJlbHR1cGxlczsKK30KKwogLyoKICAqIEFjcXVp cmUgYSByYW5kb20gc2FtcGxlIG9mIHJvd3MgZnJvbSBmb3JlaWduIHRhYmxlIG1hbmFnZWQg YnkgcG9zdGdyZXNfZmR3LgogICoKQEAgLTQ5OTEsNiArNTA1MywxNCBAQCBwb3N0Z3Jlc0Fj cXVpcmVTYW1wbGVSb3dzRnVuYyhSZWxhdGlvbiByZWxhdGlvbiwgaW50IGVsZXZlbCwKIAl1 bnNpZ25lZCBpbnQgY3Vyc29yX251bWJlcjsKIAlTdHJpbmdJbmZvRGF0YSBzcWw7CiAJUEdy ZXN1bHQgICAqdm9sYXRpbGUgcmVzID0gTlVMTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJ CQlzZXJ2ZXJfdmVyc2lvbl9udW07CisKKwkvKiBzYW1wbGluZyBlbmFibGVkIGJ5IGRlZmF1 bHQgKi8KKwlib29sCQlkb19zYW1wbGUgPSB0cnVlOworCWJvb2wJCXVzZV90YWJsZXNhbXBs ZSA9IHRydWU7CisJZG91YmxlCQlzYW1wbGVfZnJhYyA9IC0xLjA7CisJZG91YmxlCQlyZWx0 dXBsZXM7CiAKIAkvKiBJbml0aWFsaXplIHdvcmtzcGFjZSBzdGF0ZSAqLwogCWFzdGF0ZS5y ZWwgPSByZWxhdGlvbjsKQEAgLTUwMTgsMjAgKzUwODgsODMgQEAgcG9zdGdyZXNBY3F1aXJl U2FtcGxlUm93c0Z1bmMoUmVsYXRpb24gcmVsYXRpb24sIGludCBlbGV2ZWwsCiAJdXNlciA9 IEdldFVzZXJNYXBwaW5nKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG93bmVyLCB0YWJsZS0+c2Vy dmVyaWQpOwogCWNvbm4gPSBHZXRDb25uZWN0aW9uKHVzZXIsIGZhbHNlLCBOVUxMKTsKIAor CS8qIFdlJ2xsIG5lZWQgc2VydmVyIHZlcnNpb24sIHNvIGZldGNoIGl0IG5vdy4gKi8KKwlz ZXJ2ZXJfdmVyc2lvbl9udW0gPSBQUXNlcnZlclZlcnNpb24oY29ubik7CisKKwkvKiBkaXNh YmxlIHRhYmxlc2FtcGxlIG9uIG9sZCByZW1vdGUgc2VydmVycyAqLworCWlmIChzZXJ2ZXJf dmVyc2lvbl9udW0gPCA5NTAwMCkKKwkJdXNlX3RhYmxlc2FtcGxlID0gZmFsc2U7CisKKwkv KgorCSAqIFNob3VsZCB3ZSB1c2UgVEFCTEVTQU1QTEUgdG8gY29sbGVjdCB0aGUgcmVtb3Rl IHNhbXBsZT8KKwkgKi8KKwlmb3JlYWNoKGxjLCBzZXJ2ZXItPm9wdGlvbnMpCisJeworCQlE ZWZFbGVtICAgICpkZWYgPSAoRGVmRWxlbSAqKSBsZmlyc3QobGMpOworCisJCWlmIChzdHJj bXAoZGVmLT5kZWZuYW1lLCAic2FtcGxlIikgPT0gMCkKKwkJeworCQkJZG9fc2FtcGxlID0g ZGVmR2V0Qm9vbGVhbihkZWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisJZm9yZWFjaChsYywg dGFibGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWYgPSAoRGVmRWxlbSAqKSBs Zmlyc3QobGMpOworCisJCWlmIChzdHJjbXAoZGVmLT5kZWZuYW1lLCAic2FtcGxlIikgPT0g MCkKKwkJeworCQkJZG9fc2FtcGxlID0gZGVmR2V0Qm9vbGVhbihkZWYpOworCQkJYnJlYWs7 CisJCX0KKwl9CisKKwlpZiAoZG9fc2FtcGxlKQorCXsKKwkJcmVsdHVwbGVzID0gcG9zdGdy ZXNDb3VudFR1cGxlc0ZvckZvcmVpZ25UYWJsZShyZWxhdGlvbik7CisKKwkJaWYgKChyZWx0 dXBsZXMgPD0gMCkgfHwgKHRhcmdyb3dzID49IHJlbHR1cGxlcykpCisJCQlkb19zYW1wbGUg PSBmYWxzZTsKKworCQlzYW1wbGVfZnJhYyA9IHRhcmdyb3dzIC8gcmVsdHVwbGVzOworCisJ CS8qIExldCdzIHNhbXBsZSBhIGJpdCBtb3JlLCB3ZSdsbCByZWR1Y2UgdGhlIHNhbXBsZSBs b2NhbGx5LiAqLworCQlzYW1wbGVfZnJhYyAqPSAxLjI1OworCisJCS8qIFNhbml0eSBjaGVj a3MuICovCisJCXNhbXBsZV9mcmFjID0gTWluKDEuMCwgTWF4KDAuMCwgc2FtcGxlX2ZyYWMp KTsKKworCQkvKgorCQkgKiBXaGVuIHNhbXBsaW5nIHRvbyBsYXJnZSBmcmFjdGlvbiwganVz dCByZWFkIGV2ZXJ5dGhpbmcuCisJCSAqCisJCSAqIFhYWCBJdCdzIG5vdCBjbGVhciB3aGVy ZSBleGFjdGx5IHRoZSB0aHJlc2hvbGQgaXMsIHdpdGggc2xvdworCQkgKiBuZXR3b3JrIGl0 IG1heSBiZSBjaGVhcGVyIHRvIHNhbXBsZSBldmVuIDkwJS4KKwkJICovCisJCWlmIChzYW1w bGVfZnJhYyA+IDAuNSkKKwkJCWRvX3NhbXBsZSA9IGZhbHNlOworCX0KKwogCS8qCiAJICog Q29uc3RydWN0IGN1cnNvciB0aGF0IHJldHJpZXZlcyB3aG9sZSByb3dzIGZyb20gcmVtb3Rl LgogCSAqLwogCWN1cnNvcl9udW1iZXIgPSBHZXRDdXJzb3JOdW1iZXIoY29ubik7CiAJaW5p dFN0cmluZ0luZm8oJnNxbCk7CiAJYXBwZW5kU3RyaW5nSW5mbygmc3FsLCAiREVDTEFSRSBj JXUgQ1VSU09SIEZPUiAiLCBjdXJzb3JfbnVtYmVyKTsKLQlkZXBhcnNlQW5hbHl6ZVNxbCgm c3FsLCByZWxhdGlvbiwgJmFzdGF0ZS5yZXRyaWV2ZWRfYXR0cnMpOworCisJaWYgKGRvX3Nh bXBsZSAmJiB1c2VfdGFibGVzYW1wbGUpCisJCWRlcGFyc2VBbmFseXplVGFibGVTYW1wbGVT cWwoJnNxbCwgcmVsYXRpb24sICZhc3RhdGUucmV0cmlldmVkX2F0dHJzLCBzYW1wbGVfZnJh Yyk7CisJZWxzZSBpZiAoZG9fc2FtcGxlKQorCQlkZXBhcnNlQW5hbHl6ZUxlZ2FjeVNhbXBs ZVNxbCgmc3FsLCByZWxhdGlvbiwgJmFzdGF0ZS5yZXRyaWV2ZWRfYXR0cnMsIHNhbXBsZV9m cmFjKTsKKwllbHNlCisJCWRlcGFyc2VBbmFseXplU3FsKCZzcWwsIHJlbGF0aW9uLCAmYXN0 YXRlLnJldHJpZXZlZF9hdHRycyk7CisKKwllbG9nKFdBUk5JTkcsICJTUUw6ICVzIiwgc3Fs LmRhdGEpOwogCiAJLyogSW4gd2hhdCBmb2xsb3dzLCBkbyBub3QgcmlzayBsZWFraW5nIGFu eSBQR3Jlc3VsdHMuICovCiAJUEdfVFJZKCk7CiAJewogCQljaGFyCQlmZXRjaF9zcWxbNjRd OwogCQlpbnQJCQlmZXRjaF9zaXplOwotCQlMaXN0Q2VsbCAgICpsYzsKIAogCQlyZXMgPSBw Z2Zkd19leGVjX3F1ZXJ5KGNvbm4sIHNxbC5kYXRhLCBOVUxMKTsKIAkJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKQEAgLTUxMTksNyArNTI1MiwxMCBA QCBwb3N0Z3Jlc0FjcXVpcmVTYW1wbGVSb3dzRnVuYyhSZWxhdGlvbiByZWxhdGlvbiwgaW50 IGVsZXZlbCwKIAkqdG90YWxkZWFkcm93cyA9IDAuMDsKIAogCS8qIFdlJ3ZlIHJldHJpZXZl ZCBhbGwgbGl2aW5nIHR1cGxlcyBmcm9tIGZvcmVpZ24gc2VydmVyLiAqLwotCSp0b3RhbHJv d3MgPSBhc3RhdGUuc2FtcGxlcm93czsKKwlpZiAoZG9fc2FtcGxlKQorCQkqdG90YWxyb3dz ID0gcmVsdHVwbGVzOworCWVsc2UKKwkJKnRvdGFscm93cyA9IGFzdGF0ZS5zYW1wbGVyb3dz OwogCiAJLyoKIAkgKiBFbWl0IHNvbWUgaW50ZXJlc3RpbmcgcmVsYXRpb24gaW5mbwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmggYi9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAppbmRleCAyMWYyYjIwY2U4ZC4uYjBkOWNm NDI5ODIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5o CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oCkBAIC0yMTEsOCAr MjExLDE1IEBAIGV4dGVybiB2b2lkIGRlcGFyc2VEaXJlY3REZWxldGVTcWwoU3RyaW5nSW5m byBidWYsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgICBMaXN0ICpyZXR1cm5pbmdM aXN0LAogCQkJCQkJCQkgICBMaXN0ICoqcmV0cmlldmVkX2F0dHJzKTsKIGV4dGVybiB2b2lk IGRlcGFyc2VBbmFseXplU2l6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsKTsK K2V4dGVybiB2b2lkIGRlcGFyc2VBbmFseXplVHVwbGVzU3FsKFN0cmluZ0luZm8gYnVmLCBS ZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgZGVwYXJzZUFuYWx5emVTcWwoU3RyaW5nSW5m byBidWYsIFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkgIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMp OworZXh0ZXJuIHZvaWQgZGVwYXJzZUFuYWx5emVUYWJsZVNhbXBsZVNxbChTdHJpbmdJbmZv IGJ1ZiwgUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCSBMaXN0ICoqcmV0cmlldmVkX2F0dHJz LAorCQkJCQkJCQkJCSBkb3VibGUgc2FtcGxlX2ZyYWMpOworZXh0ZXJuIHZvaWQgZGVwYXJz ZUFuYWx5emVMZWdhY3lTYW1wbGVTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwK KwkJCQkJCQkJCQkgIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMsCisJCQkJCQkJCQkJICBkb3Vi bGUgc2FtcGxlX2ZyYWMpOwogZXh0ZXJuIHZvaWQgZGVwYXJzZVRydW5jYXRlU3FsKFN0cmlu Z0luZm8gYnVmLAogCQkJCQkJCSAgIExpc3QgKnJlbHMsCiAJCQkJCQkJICAgRHJvcEJlaGF2 aW9yIGJlaGF2aW9yLAotLSAKMi4zNC4zCgo= --------------N2korMheyEJMOm3zS7FDp0rV Content-Type: text/x-patch; charset=UTF-8; name="0002-rework-postgres_fdw-analyze-sampling-20220718.patch" Content-Disposition: attachment; filename="0002-rework-postgres_fdw-analyze-sampling-20220718.patch" Content-Transfer-Encoding: base64 RnJvbSA4NTQ5ZjI5ZjhhOTQ2NzRlZTc1ZmJlYjZjNjk5ZWYxNzUwZjUxZGYyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogTW9uLCAxOCBKdWwgMjAyMiAwOToyMzoyMyArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMi8yXSByZXdvcmsgcG9zdGdyZXNfZmR3IGFuYWx5emUgc2FtcGxpbmcK Ci0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jICAgICAgICAgICAgICAgIHwg MTY3ICsrKysrLS0tLS0tLS0tLS0tLQogLi4uL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0 Z3Jlc19mZHcub3V0ICAgIHwgIDQ0ICsrKystCiBjb250cmliL3Bvc3RncmVzX2Zkdy9vcHRp b24uYyAgICAgICAgICAgICAgICAgfCAgMjQgKystCiBjb250cmliL3Bvc3RncmVzX2Zkdy9w b3N0Z3Jlc19mZHcuYyAgICAgICAgICAgfCAxMzEgKysrKysrKysrKy0tLS0KIGNvbnRyaWIv cG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oICAgICAgICAgICB8ICAyMCArKy0KIGNvbnRy aWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsICAgICB8ICA1NCArKysrKysK IGRvYy9zcmMvc2dtbC9wb3N0Z3Jlcy1mZHcuc2dtbCAgICAgICAgICAgICAgICB8ICAyMiAr KysKIDcgZmlsZXMgY2hhbmdlZCwgMjg5IGluc2VydGlvbnMoKyksIDE3MyBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMgYi9jb250 cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKaW5kZXggODQ1NGY0ODkxNjEuLmU5ZDc4Njkz OTdlIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKKysrIGIv Y29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCkBAIC0yMjk4LDcgKzIyOTgsNyBAQCBk ZXBhcnNlQW5hbHl6ZVNpemVTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCkKIH0K IAogLyoKLSAqIENvbnN0cnVjdCBTRUxFQ1Qgc3RhdGVtZW50IHRvIGFjcXVpcmUgbnVtYmUg b2Ygcm93cyBvZiBnaXZlbiByZWxhdGlvbi4KKyAqIENvbnN0cnVjdCBTRUxFQ1Qgc3RhdGVt ZW50IHRvIGFjcXVpcmUgYSBudW1iZXIgb2Ygcm93cyBvZiBhIHJlbGF0aW9uLgogICoKICAq IE5vdGU6IE1heWJlIHRoaXMgc2hvdWxkIGNvbXBhcmUgcmVscGFnZXMgYW5kIGN1cnJlbnQg cmVsYXRpb24gc2l6ZQogICogYW5kIGFkanVzdCByZWx0dXBsZXMgYWNjb3JkaW5nbHk/CkBA IC0yMzIyLDc0ICsyMzIyLDMxIEBAIGRlcGFyc2VBbmFseXplVHVwbGVzU3FsKFN0cmluZ0lu Zm8gYnVmLCBSZWxhdGlvbiByZWwpCiAgKgogICogU0VMRUNUIGNvbW1hbmQgaXMgYXBwZW5k ZWQgdG8gYnVmLCBhbmQgbGlzdCBvZiBjb2x1bW5zIHJldHJpZXZlZAogICogaXMgcmV0dXJu ZWQgdG8gKnJldHJpZXZlZF9hdHRycy4KLSAqLwotdm9pZAotZGVwYXJzZUFuYWx5emVTcWwo U3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgTGlzdCAqKnJldHJpZXZlZF9hdHRycykK LXsKLQlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKLQlUdXBsZURlc2MJ dHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKLQlpbnQJCQlpOwotCWNoYXIJICAg KmNvbG5hbWU7Ci0JTGlzdAkgICAqb3B0aW9uczsKLQlMaXN0Q2VsbCAgICpsYzsKLQlib29s CQlmaXJzdCA9IHRydWU7Ci0KLQkqcmV0cmlldmVkX2F0dHJzID0gTklMOwotCi0JYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsICJTRUxFQ1QgIik7Ci0JZm9yIChpID0gMDsgaSA8IHR1 cGRlc2MtPm5hdHRzOyBpKyspCi0JewotCQkvKiBJZ25vcmUgZHJvcHBlZCBjb2x1bW5zLiAq LwotCQlpZiAoVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBpKS0+YXR0aXNkcm9wcGVkKQotCQkJ Y29udGludWU7Ci0KLQkJaWYgKCFmaXJzdCkKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCAiLCAiKTsKLQkJZmlyc3QgPSBmYWxzZTsKLQotCQkvKiBVc2UgYXR0cmlidXRlIG5h bWUgb3IgY29sdW1uX25hbWUgb3B0aW9uLiAqLwotCQljb2xuYW1lID0gTmFtZVN0cihUdXBs ZURlc2NBdHRyKHR1cGRlc2MsIGkpLT5hdHRuYW1lKTsKLQkJb3B0aW9ucyA9IEdldEZvcmVp Z25Db2x1bW5PcHRpb25zKHJlbGlkLCBpICsgMSk7Ci0KLQkJZm9yZWFjaChsYywgb3B0aW9u cykKLQkJewotCQkJRGVmRWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikgbGZpcnN0KGxjKTsK LQotCQkJaWYgKHN0cmNtcChkZWYtPmRlZm5hbWUsICJjb2x1bW5fbmFtZSIpID09IDApCi0J CQl7Ci0JCQkJY29sbmFtZSA9IGRlZkdldFN0cmluZyhkZWYpOwotCQkJCWJyZWFrOwotCQkJ fQotCQl9Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZp ZXIoY29sbmFtZSkpOwotCi0JCSpyZXRyaWV2ZWRfYXR0cnMgPSBsYXBwZW5kX2ludCgqcmV0 cmlldmVkX2F0dHJzLCBpICsgMSk7Ci0JfQotCi0JLyogRG9uJ3QgZ2VuZXJhdGUgYmFkIHN5 bnRheCBmb3IgemVyby1jb2x1bW4gcmVsYXRpb24uICovCi0JaWYgKGZpcnN0KQotCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIk5VTEwiKTsKLQotCS8qCi0JICogQ29uc3RydWN0 IEZST00gY2xhdXNlCi0JICovCi0JYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgRlJP TSAiKTsKLQlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwpOwotfQotCi0vKgotICogQ29uc3Ry dWN0IFNFTEVDVCBzdGF0ZW1lbnQgdG8gYWNxdWlyZSBzYW1wbGUgcm93cyBvZiBnaXZlbiBy ZWxhdGlvbiwKLSAqIGJ5IHNhbXBsaW5nIGEgZnJhY3Rpb24gb2YgdGhlIHRhYmxlIHVzaW5n IFRBQkxFU0FNUExFIFNZU1RFTS4KICAqCi0gKiBTRUxFQ1QgY29tbWFuZCBpcyBhcHBlbmRl ZCB0byBidWYsIGFuZCBsaXN0IG9mIGNvbHVtbnMgcmV0cmlldmVkCi0gKiBpcyByZXR1cm5l ZCB0byAqcmV0cmlldmVkX2F0dHJzLgorICogWFhYIFdlIGFsbG93IGN1c3RvbWl6aW5nIHRo ZSBzYW1wbGluZyBtZXRob2QsIGJ1dCB3ZSBvbmx5IHN1cHBvcnQgbWV0aG9kcworICogd2Ug Y2FuIGRlY2lkZSBiYXNlZCBvbiBzZXJ2ZXIgdmVyc2lvbi4gQWxsb3dpbmcgY3VzdG9tIFRT TSBtb2R1bGVzIChmb3IKKyAqIGV4YW1wbGUgdHNtX3N5c3RlbV9yb3dzKSBtaWdodCBiZSB1 c2VmdWwsIGJ1dCBpdCB3b3VsZCByZXF1aXJlIGRldGVjdGluZworICogd2hpY2ggZXh0ZW5z aW9ucyBhcmUgaW5zdGFsbGVkLCB0byBhbGxvdyBhdXRvbWF0aWMgZmFsbC1iYWNrLiBNb3Jl b3ZlciwgdGhlCisgKiBtZXRob2RzIHVzZSBkaWZmZXJlbnQgcGFyYW1ldGVycyAobm90IHNh bXBsaW5nIHJhdGUpLiBTbyB3ZSBkb24ndCBkbyB0aGlzCisgKiBmb3Igbm93LCBsZWF2aW5n IGl0IGZvciBmdXR1cmUgaW1wcm92ZW1lbnRzLgorICoKKyAqIFhYWCBVc2luZyByZW1vdGUg cmFuZG9tKCkgdG8gc2FtcGxlIHJvd3MgaGFzIGFkdmFudGFnZXMgJiBkaXNhZHZhbnRhZ2Vz LgorICogVGhlIGFkdmFudGFnZXMgYXJlIHRoYXQgdGhpcyB3b3JrcyBvbiBhbGwgUG9zdGdy ZVNRTCB2ZXJzaW9ucyAodW5saWtlCisgKiBUQUJMRVNBTVBMRSksIGFuZCB0aGF0IGl0IGRv ZXMgdGhlIHNhbXBsaW5nIG9uIHRoZSByZW1vdGUgc2lkZSAodW5saWtlCisgKiB0aGUgb2xk IGFwcHJvYWNoLCB3aGljaCB0cmFuc2ZlcnMgZXZlcnl0aGluZyBhbmQgdGhlbiBkaXNjYXJk cyBtb3N0IGRhdGEpLgorICogV2UgY291bGQgYWxzbyBkbyAiT1JERVIgQlkgcmFuZG9tKCkg TElNSVQgeCIsIHdoaWNoIHdvdWxkIGFsd2F5cyBwaWNrCisgKiB0aGUgZXhwZWN0ZWQgbnVt YmVyIG9mIHJvd3MsIGJ1dCBpdCByZXF1aXJlcyBzb3J0aW5nIHNvIGl0J3MgYSBiaXQgbW9y ZQorICogZXhwZW5zaXZlLgorICoKKyAqIFRoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB3ZSBz dGlsbCBoYXZlIHRvIHJlYWQgYWxsIHJvd3MgYW5kIGV2YWx1YXRlIHRoZQorICogcmFuZG9t KCksIHdoaWxlIFRBQkxFU0FNUExFIHNraXBzIG1vc3Qgb2YgdGhlIHBhZ2VzIGVudGlyZWx5 LgogICoKLSAqIE5vdGU6IFdlIGNvdWxkIGFsbG93IHNlbGVjdGluZyBzeXN0ZW0vYmVybm91 bGxpLCBhbmQgbWF5YmUgZXZlbiB0aGUKLSAqIG9wdGlvbmFsIFRTTSBtb2R1bGVzIChlc3Bl Y2lhbGx5IHRzbV9zeXN0ZW1fcm93cyB3b3VsZCBoZWxwKS4KKyAqIFhYWCBXaGF0IGlmIHdl IG5lZWQgb25seSBhIHN1YnNldCBvZiBjb2x1bW5zLCBlLmcuIEFOQUxZWkUgdChhLGIpPwog ICovCiB2b2lkCi1kZXBhcnNlQW5hbHl6ZVRhYmxlU2FtcGxlU3FsKFN0cmluZ0luZm8gYnVm LCBSZWxhdGlvbiByZWwsIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMsIGRvdWJsZSBzYW1wbGVf ZnJhYykKK2RlcGFyc2VBbmFseXplU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWws CisJCQkJICBQZ0Zkd1NhbXBsaW5nTWV0aG9kIHNhbXBsZV9tZXRob2QsIGRvdWJsZSBzYW1w bGVfZnJhYywKKwkJCQkgIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMpCiB7CiAJT2lkCQkJcmVs aWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CiAJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxh dGlvbkdldERlc2NyKHJlbCk7CkBAIC0yNDM3LDc3ICsyMzk0LDM1IEBAIGRlcGFyc2VBbmFs eXplVGFibGVTYW1wbGVTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgTGlzdCAq KnJldHJpZXZlZF9hdHRyCiAJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiTlVMTCIp OwogCiAJLyoKLQkgKiBDb25zdHJ1Y3QgRlJPTSBjbGF1c2UKKwkgKiBDb25zdHJ1Y3QgRlJP TSBjbGF1c2UsIGFuZCBwZXJoYXBzIFdIRVJFIGNsYXVzZSB0b28sIGRlcGVuZGluZyBvbiB0 aGUKKwkgKiBzZWxlY3RlZCBzYW1wbGluZyBtZXRob2QuCiAJICovCiAJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICIgRlJPTSAiKTsKIAlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwp OwotCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFRBQkxFU0FNUExFIFNZU1RFTSglZikiLCAo MTAwLjAgKiBzYW1wbGVfZnJhYykpOwotfQogCi0vKgotICogQ29uc3RydWN0IFNFTEVDVCBz dGF0ZW1lbnQgdG8gYWNxdWlyZSBzYW1wbGUgcm93cyBvZiBnaXZlbiByZWxhdGlvbiwKLSAq IGJ5IHNhbXBsaW5nIGEgZnJhY3Rpb24gb2YgdGhlIHRhYmxlIHVzaW5nIFRBQkxFU0FNUExF IFNZU1RFTS4KLSAqCi0gKiBTRUxFQ1QgY29tbWFuZCBpcyBhcHBlbmRlZCB0byBidWYsIGFu ZCBsaXN0IG9mIGNvbHVtbnMgcmV0cmlldmVkCi0gKiBpcyByZXR1cm5lZCB0byAqcmV0cmll dmVkX2F0dHJzLgotICoKLSAqIE5vdGU6IFdlIGNvdWxkIGFsbG93IHNlbGVjdGluZyBzeXN0 ZW0vYmVybm91bGxpLCBhbmQgbWF5YmUgZXZlbiB0aGUKLSAqIG9wdGlvbmFsIFRTTSBtb2R1 bGVzIChlc3BlY2lhbGx5IHRzbV9zeXN0ZW1fcm93cyB3b3VsZCBoZWxwKS4KLSAqLwotdm9p ZAotZGVwYXJzZUFuYWx5emVMZWdhY3lTYW1wbGVTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0 aW9uIHJlbCwgTGlzdCAqKnJldHJpZXZlZF9hdHRycywgZG91YmxlIHNhbXBsZV9mcmFjKQot ewotCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwotCVR1cGxlRGVzYwl0 dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwotCWludAkJCWk7Ci0JY2hhcgkgICAq Y29sbmFtZTsKLQlMaXN0CSAgICpvcHRpb25zOwotCUxpc3RDZWxsICAgKmxjOwotCWJvb2wJ CWZpcnN0ID0gdHJ1ZTsKLQotCSpyZXRyaWV2ZWRfYXR0cnMgPSBOSUw7Ci0KLQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlNFTEVDVCAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgdHVw ZGVzYy0+bmF0dHM7IGkrKykKKwlzd2l0Y2ggKHNhbXBsZV9tZXRob2QpCiAJewotCQkvKiBJ Z25vcmUgZHJvcHBlZCBjb2x1bW5zLiAqLwotCQlpZiAoVHVwbGVEZXNjQXR0cih0dXBkZXNj LCBpKS0+YXR0aXNkcm9wcGVkKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFmaXJzdCkKLQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKLQkJZmlyc3QgPSBmYWxzZTsK LQotCQkvKiBVc2UgYXR0cmlidXRlIG5hbWUgb3IgY29sdW1uX25hbWUgb3B0aW9uLiAqLwot CQljb2xuYW1lID0gTmFtZVN0cihUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpLT5hdHRuYW1l KTsKLQkJb3B0aW9ucyA9IEdldEZvcmVpZ25Db2x1bW5PcHRpb25zKHJlbGlkLCBpICsgMSk7 CisJCWNhc2UgQU5BTFlaRV9TQU1QTEVfT0ZGOgorCQkJLyogbm90aGluZyB0byBkbyBoZXJl ICovCisJCQlicmVhazsKIAotCQlmb3JlYWNoKGxjLCBvcHRpb25zKQotCQl7Ci0JCQlEZWZF bGVtICAgICpkZWYgPSAoRGVmRWxlbSAqKSBsZmlyc3QobGMpOworCQljYXNlIEFOQUxZWkVf U0FNUExFX1JBTkRPTToKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFdIRVJFIHBnX2Nh dGFsb2cucmFuZG9tKCkgPCAlZiIsIHNhbXBsZV9mcmFjKTsKKwkJCWJyZWFrOwogCi0JCQlp ZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwgImNvbHVtbl9uYW1lIikgPT0gMCkKLQkJCXsKLQkJ CQljb2xuYW1lID0gZGVmR2V0U3RyaW5nKGRlZik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0K KwkJY2FzZSBBTkFMWVpFX1NBTVBMRV9TWVNURU06CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiBUQUJMRVNBTVBMRSBTWVNURU0oJWYpIiwgKDEwMC4wICogc2FtcGxlX2ZyYWMpKTsK KwkJCWJyZWFrOwogCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVu dGlmaWVyKGNvbG5hbWUpKTsKKwkJY2FzZSBBTkFMWVpFX1NBTVBMRV9CRVJOT1VMTEk6CisJ CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBUQUJMRVNBTVBMRSBCRVJOT1VMTEkoJWYpIiwg KDEwMC4wICogc2FtcGxlX2ZyYWMpKTsKKwkJCWJyZWFrOwogCi0JCSpyZXRyaWV2ZWRfYXR0 cnMgPSBsYXBwZW5kX2ludCgqcmV0cmlldmVkX2F0dHJzLCBpICsgMSk7CisJCWNhc2UgQU5B TFlaRV9TQU1QTEVfQVVUTzoKKwkJCS8qIHNob3VsZCBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50 byBhY3R1YWwgbWV0aG9kICovCisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBzYW1wbGlu ZyBtZXRob2QiKTsKKwkJCWJyZWFrOwogCX0KLQotCS8qIERvbid0IGdlbmVyYXRlIGJhZCBz eW50YXggZm9yIHplcm8tY29sdW1uIHJlbGF0aW9uLiAqLwotCWlmIChmaXJzdCkKLQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJOVUxMIik7Ci0KLQkvKgotCSAqIENvbnN0cnVj dCBGUk9NIGNsYXVzZQotCSAqLwotCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIEZS T00gIik7Ci0JZGVwYXJzZVJlbGF0aW9uKGJ1ZiwgcmVsKTsKLQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiBXSEVSRSByYW5kb20oKSA8ICVmIiwgc2FtcGxlX2ZyYWMpOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3 Lm91dCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQK aW5kZXggNWYyZWY4OGNmMzguLmU4MzhkMzE4MTVlIDEwMDY0NAotLS0gYS9jb250cmliL3Bv c3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKQEAgLTk1MzIsNyArOTUzMiw3 IEBAIERPICRkJAogICAgIEVORDsKICRkJDsKIEVSUk9SOiAgaW52YWxpZCBvcHRpb24gInBh c3N3b3JkIgotSElOVDogIFZhbGlkIG9wdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZTogc2Vy dmljZSwgcGFzc2ZpbGUsIGNoYW5uZWxfYmluZGluZywgY29ubmVjdF90aW1lb3V0LCBkYm5h bWUsIGhvc3QsIGhvc3RhZGRyLCBwb3J0LCBvcHRpb25zLCBhcHBsaWNhdGlvbl9uYW1lLCBr ZWVwYWxpdmVzLCBrZWVwYWxpdmVzX2lkbGUsIGtlZXBhbGl2ZXNfaW50ZXJ2YWwsIGtlZXBh bGl2ZXNfY291bnQsIHRjcF91c2VyX3RpbWVvdXQsIHNzbG1vZGUsIHNzbGNvbXByZXNzaW9u LCBzc2xjZXJ0LCBzc2xrZXksIHNzbHJvb3RjZXJ0LCBzc2xjcmwsIHNzbGNybGRpciwgc3Ns c25pLCByZXF1aXJlcGVlciwgc3NsX21pbl9wcm90b2NvbF92ZXJzaW9uLCBzc2xfbWF4X3By b3RvY29sX3ZlcnNpb24sIGdzc2VuY21vZGUsIGtyYnNydm5hbWUsIGdzc2xpYiwgdGFyZ2V0 X3Nlc3Npb25fYXR0cnMsIHVzZV9yZW1vdGVfZXN0aW1hdGUsIGZkd19zdGFydHVwX2Nvc3Qs IGZkd190dXBsZV9jb3N0LCBleHRlbnNpb25zLCB1cGRhdGFibGUsIHRydW5jYXRhYmxlLCBm ZXRjaF9zaXplLCBiYXRjaF9zaXplLCBhc3luY19jYXBhYmxlLCBwYXJhbGxlbF9jb21taXQs IGtlZXBfY29ubmVjdGlvbnMKK0hJTlQ6ICBWYWxpZCBvcHRpb25zIGluIHRoaXMgY29udGV4 dCBhcmU6IHNlcnZpY2UsIHBhc3NmaWxlLCBjaGFubmVsX2JpbmRpbmcsIGNvbm5lY3RfdGlt ZW91dCwgZGJuYW1lLCBob3N0LCBob3N0YWRkciwgcG9ydCwgb3B0aW9ucywgYXBwbGljYXRp b25fbmFtZSwga2VlcGFsaXZlcywga2VlcGFsaXZlc19pZGxlLCBrZWVwYWxpdmVzX2ludGVy dmFsLCBrZWVwYWxpdmVzX2NvdW50LCB0Y3BfdXNlcl90aW1lb3V0LCBzc2xtb2RlLCBzc2xj b21wcmVzc2lvbiwgc3NsY2VydCwgc3Nsa2V5LCBzc2xyb290Y2VydCwgc3NsY3JsLCBzc2xj cmxkaXIsIHNzbHNuaSwgcmVxdWlyZXBlZXIsIHNzbF9taW5fcHJvdG9jb2xfdmVyc2lvbiwg c3NsX21heF9wcm90b2NvbF92ZXJzaW9uLCBnc3NlbmNtb2RlLCBrcmJzcnZuYW1lLCBnc3Ns aWIsIHRhcmdldF9zZXNzaW9uX2F0dHJzLCB1c2VfcmVtb3RlX2VzdGltYXRlLCBmZHdfc3Rh cnR1cF9jb3N0LCBmZHdfdHVwbGVfY29zdCwgZXh0ZW5zaW9ucywgdXBkYXRhYmxlLCB0cnVu Y2F0YWJsZSwgZmV0Y2hfc2l6ZSwgYmF0Y2hfc2l6ZSwgYXN5bmNfY2FwYWJsZSwgcGFyYWxs ZWxfY29tbWl0LCBrZWVwX2Nvbm5lY3Rpb25zLCBhbmFseXplX3NhbXBsaW5nCiBDT05URVhU OiAgU1FMIHN0YXRlbWVudCAiQUxURVIgU0VSVkVSIGxvb3BiYWNrX25vcHcgT1BUSU9OUyAo QUREIHBhc3N3b3JkICdkdW1teXB3JykiCiBQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29k ZV9ibG9jayBsaW5lIDMgYXQgRVhFQ1VURQogLS0gSWYgd2UgYWRkIGEgcGFzc3dvcmQgZm9y IG91ciB1c2VyIG1hcHBpbmcgaW5zdGVhZCwgd2Ugc2hvdWxkIGdldCBhIGRpZmZlcmVudApA QCAtMTEyOTYsMyArMTEyOTYsNDUgQEAgU0VMRUNUICogRlJPTSBwcmVtMjsKIAogQUxURVIg U0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKERST1AgcGFyYWxsZWxfY29tbWl0KTsKIEFMVEVS IFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBwYXJhbGxlbF9jb21taXQpOworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorLS0gdGVzdCBmb3IgQU5BTFlaRQorLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor Q1JFQVRFIFRBQkxFIGFuYWx5emVfcnRhYmxlMSAoaWQgaW50IHByaW1hcnkga2V5LCBhIHRl eHQsIGIgYmlnaW50KTsKK0NSRUFURSBUQUJMRSBhbmFseXplX3J0YWJsZTIgKGlkIGludCBw cmltYXJ5IGtleSwgYSB0ZXh0LCBiIGJpZ2ludCk7CitDUkVBVEUgVEFCTEUgYW5hbHl6ZV9w dGFibGUgKGlkIGludCwgYSB0ZXh0LCBiIGJpZ2ludCkgUEFSVElUSU9OIEJZIEhBU0goaWQp OworQ1JFQVRFIEZPUkVJR04gVEFCTEUgYW5hbHl6ZV9mdGFibGVfX3AxIFBBUlRJVElPTiBP RiBhbmFseXplX3B0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Rk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorICAgICAgIFNFUlZF UiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdhbmFseXplX3J0YWJsZTEnKTsKK0NS RUFURSBGT1JFSUdOIFRBQkxFIGFuYWx5emVfZnRhYmxlX19wMiBQQVJUSVRJT04gT0YgYW5h bHl6ZV9wdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUiBW QUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKKyAgICAgICBTRVJWRVIgbG9v cGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYW5hbHl6ZV9ydGFibGUyJyk7CitJTlNFUlQg SU5UTyBhbmFseXplX3B0YWJsZSAoU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1 MDAwKSB4KTsKKy0tIGFuYWx5emUgdGhlICdsb2NhbCcgdGFibGVzIHRvIHVwZGF0ZSByZWxw YWdlcy9yZWx0dXBsZXMKK0FOQUxZWkUgYW5hbHl6ZV9ydGFibGUxLCBhbmFseXplX3J0YWJs ZTI7CistLSBub3cgYW5hbHl6ZSB0aGUgcmVtb3RlIHRhYmxlcyBkaXJlY3RseSAtIHRoaXMg ZXhwZWN0cyB0byBzY2FuIGV2ZXJ5dGhpbmcsCistLSBzbyBzaG91bGQgbm90IGRvIGFueSBz YW1wbGluZworQU5BTFlaRSBhbmFseXplX2Z0YWJsZV9fcDE7CitBTkFMWVpFIGFuYWx5emVf ZnRhYmxlX19wMjsKKy0tIG5vdyBhbmFseXplIHRoZSBwYXJlbnQgLSB0aGlzIHNob3VsZCBz Y2FuIGV2ZXJ5dGhpbmcgdG9vLCBiZWNhdXNlIDMwaworLS0gc2FtcGxlIHJlcXVpcmVzIGV2 ZXJ5dGhpbmcgdG8gYmUgc2Nhbm5lZAorQU5BTFlaRSBhbmFseXplX3B0YWJsZTsKKy0tIG5v dyBsb3dlciB0aGUgdGFyZ2V0IHRvIDEwLCB3aGljaCByZXF1aXJlcyBvbmx5IDNrIHJvd3Mg c2FtcGxlLCBzbyBhYm91dAorLS0gMTUwMCByb3dzIGZyb20gZWFjaCBwYXJ0aXRpb24sIHNv IHNhbXBsaW5nIHdpbGwga2ljayBpbiwgYnkgZGVmYXVsdCB3aXRoCistLSB0aGUgJ2Jlcm5v dWxsaScgdGFibGVzYW1wbGUgbWV0aG9kCitTRVQgZGVmYXVsdF9zdGF0aXN0aWNzX3Rhcmdl dCA9IDEwOworQU5BTFlaRSBhbmFseXplX3B0YWJsZTsKKy0tIG5vdyBhbHRlciB0aGUgbWV0 aG9kIGZvciByZW1vdGUgc2VydmVyIHRvICdzeXN0ZW0nCitBTFRFUiBTRVJWRVIgbG9vcGJh Y2sgT1BUSU9OUyAoYW5hbHl6ZV9zYW1wbGluZyAnc3lzdGVtJyk7CitBTkFMWVpFIGFuYWx5 emVfcHRhYmxlOworLS0gbm93IGFsdGVyIHRoZSBtZXRob2QgZm9yIHJlbW90ZSB0YWJsZSB0 byAncmFuZG9tJywgdG8gbm90IHVzZSB0YWJsZXNhbXBsZQorLS0gYnV0IHRoZSAnbGVnYWN5 JyBzYW1wbGluZywgYW5kIGRpc2FibGUgc2FtcGxpbmcgZm9yIHRoZSBvdGhlciBwYXJ0aXRp b24KK0FMVEVSIEZPUkVJR04gVEFCTEUgYW5hbHl6ZV9mdGFibGVfX3AxIE9QVElPTlMgKEFE RCBhbmFseXplX3NhbXBsaW5nICdyYW5kb20nKTsKK0FMVEVSIEZPUkVJR04gVEFCTEUgYW5h bHl6ZV9mdGFibGVfX3AyIE9QVElPTlMgKEFERCBhbmFseXplX3NhbXBsaW5nICdvZmYnKTsK K0FOQUxZWkUgYW5hbHl6ZV9wdGFibGU7CistLSBub3cgYWRkIG1vcmUgZGF0YSwgc28gdGhh dCBlYWNoIHBhcnRpdGlvbiBleGNlZWRzIHRoZSBzdGF0aXN0aWNzIHRhcmdldAorSU5TRVJU IElOVE8gYW5hbHl6ZV9wdGFibGUgKFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDUw MDEsIDEwMDAwKSB4KTsKK0FOQUxZWkUgYW5hbHl6ZV9ydGFibGUxLCBhbmFseXplX3J0YWJs ZTI7CitBTkFMWVpFIGFuYWx5emVfcHRhYmxlOworLS0gY2xlYW51cAorRFJPUCBGT1JFSUdO IFRBQkxFIGFuYWx5emVfZnRhYmxlX19wMSwgYW5hbHl6ZV9mdGFibGVfX3AyOworRFJPUCBU QUJMRSBhbmFseXplX3B0YWJsZSwgYW5hbHl6ZV9ydGFibGUxLCBhbmFseXplX3J0YWJsZTI7 CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L29wdGlvbi5jCmluZGV4IDM3NDlkNDcwMWE3Li43YzRhN2Q4ZDRiNyAx MDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKQEAgLTEyMiw4ICsxMjIsNyBAQCBwb3N0Z3Jlc19m ZHdfdmFsaWRhdG9yKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQlzdHJjbXAoZGVmLT5kZWZuYW1l LCAidHJ1bmNhdGFibGUiKSA9PSAwIHx8CiAJCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAiYXN5 bmNfY2FwYWJsZSIpID09IDAgfHwKIAkJCXN0cmNtcChkZWYtPmRlZm5hbWUsICJwYXJhbGxl bF9jb21taXQiKSA9PSAwIHx8Ci0JCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAia2VlcF9jb25u ZWN0aW9ucyIpID09IDAgfHwKLQkJCXN0cmNtcChkZWYtPmRlZm5hbWUsICJzYW1wbGUiKSA9 PSAwKQorCQkJc3RyY21wKGRlZi0+ZGVmbmFtZSwgImtlZXBfY29ubmVjdGlvbnMiKSA9PSAw KQogCQl7CiAJCQkvKiB0aGVzZSBhY2NlcHQgb25seSBib29sZWFuIHZhbHVlcyAqLwogCQkJ KHZvaWQpIGRlZkdldEJvb2xlYW4oZGVmKTsKQEAgLTIwOCw2ICsyMDcsMjMgQEAgcG9zdGdy ZXNfZmR3X3ZhbGlkYXRvcihQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJIGVycm1zZygic3Ns Y2VydCBhbmQgc3Nsa2V5IGFyZSBzdXBlcnVzZXItb25seSIpLAogCQkJCQkJIGVycmhpbnQo IlVzZXIgbWFwcGluZ3Mgd2l0aCB0aGUgc3NsY2VydCBvciBzc2xrZXkgb3B0aW9ucyBzZXQg bWF5IG9ubHkgYmUgY3JlYXRlZCBvciBtb2RpZmllZCBieSB0aGUgc3VwZXJ1c2VyIikpKTsK IAkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmLT5kZWZuYW1lLCAiYW5hbHl6ZV9zYW1wbGlu ZyIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKnZhbHVlOworCisJCQl2YWx1ZSA9IGRlZkdl dFN0cmluZyhkZWYpOworCisJCQkvKiB3ZSByZWNvZ25pemUgb2ZmL2F1dG8vcmFuZG9tL3N5 c3RlbS9iZXJub3VsbGkgKi8KKwkJCWlmIChzdHJjbXAodmFsdWUsICJvZmYiKSAhPSAwICYm CisJCQkJc3RyY21wKHZhbHVlLCAiYXV0byIpICE9IDAgJiYKKwkJCQlzdHJjbXAodmFsdWUs ICJyYW5kb20iKSAhPSAwICYmCisJCQkJc3RyY21wKHZhbHVlLCAic3lzdGVtIikgIT0gMCAm JgorCQkJCXN0cmNtcCh2YWx1ZSwgImJlcm5vdWxsaSIpICE9IDApCisJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJIGVycm1zZygiaW52YWxpZCB2YWx1ZSBmb3Igc3RyaW5nIG9wdGlvbiBcIiVz XCI6ICVzIiwKKwkJCQkJCQkJZGVmLT5kZWZuYW1lLCB2YWx1ZSkpKTsKKwkJfQogCX0KIAog CVBHX1JFVFVSTl9WT0lEKCk7CkBAIC0yNTYsOCArMjcyLDggQEAgSW5pdFBnRmR3T3B0aW9u cyh2b2lkKQogCQl7InBhc3N3b3JkX3JlcXVpcmVkIiwgVXNlck1hcHBpbmdSZWxhdGlvbklk LCBmYWxzZX0sCiAKIAkJLyogc2FtcGxpbmcgaXMgYXZhaWxhYmxlIG9uIGJvdGggc2VydmVy IGFuZCB0YWJsZSAqLwotCQl7InNhbXBsZSIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBm YWxzZX0sCi0JCXsic2FtcGxlIiwgRm9yZWlnblRhYmxlUmVsYXRpb25JZCwgZmFsc2V9LAor CQl7ImFuYWx5emVfc2FtcGxpbmciLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9 LAorCQl7ImFuYWx5emVfc2FtcGxpbmciLCBGb3JlaWduVGFibGVSZWxhdGlvbklkLCBmYWxz ZX0sCiAKIAkJLyoKIAkJICogc3NsY2VydCBhbmQgc3Nsa2V5IGFyZSBpbiBmYWN0IGxpYnBx IG9wdGlvbnMsIGJ1dCB3ZSByZXBlYXQgdGhlbQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0 Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYwppbmRleCAzYWRmNTE4YjY3Ni4uZWEyMWM1YzUxMTkgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRyaWIvcG9zdGdy ZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC01MDU2LDkgKzUwNTYsOCBAQCBwb3N0Z3Jlc0Fj cXVpcmVTYW1wbGVSb3dzRnVuYyhSZWxhdGlvbiByZWxhdGlvbiwgaW50IGVsZXZlbCwKIAlM aXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlzZXJ2ZXJfdmVyc2lvbl9udW07CiAKLQkvKiBzYW1w bGluZyBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KLQlib29sCQlkb19zYW1wbGUgPSB0cnVlOwot CWJvb2wJCXVzZV90YWJsZXNhbXBsZSA9IHRydWU7CisJLyogYW5hbHl6ZSBzYW1wbGluZyBl bmFibGVkIGJ5IGRlZmF1bHQsIGlmIGF2YWlsYWJsZSAqLworCVBnRmR3U2FtcGxpbmdNZXRo b2QJbWV0aG9kID0gQU5BTFlaRV9TQU1QTEVfQVVUTzsKIAlkb3VibGUJCXNhbXBsZV9mcmFj ID0gLTEuMDsKIAlkb3VibGUJCXJlbHR1cGxlczsKIApAQCAtNTA5MSw1NyArNTA5MCwxMjAg QEAgcG9zdGdyZXNBY3F1aXJlU2FtcGxlUm93c0Z1bmMoUmVsYXRpb24gcmVsYXRpb24sIGlu dCBlbGV2ZWwsCiAJLyogV2UnbGwgbmVlZCBzZXJ2ZXIgdmVyc2lvbiwgc28gZmV0Y2ggaXQg bm93LiAqLwogCXNlcnZlcl92ZXJzaW9uX251bSA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsK IAotCS8qIGRpc2FibGUgdGFibGVzYW1wbGUgb24gb2xkIHJlbW90ZSBzZXJ2ZXJzICovCi0J aWYgKHNlcnZlcl92ZXJzaW9uX251bSA8IDk1MDAwKQotCQl1c2VfdGFibGVzYW1wbGUgPSBm YWxzZTsKLQogCS8qCi0JICogU2hvdWxkIHdlIHVzZSBUQUJMRVNBTVBMRSB0byBjb2xsZWN0 IHRoZSByZW1vdGUgc2FtcGxlPworCSAqIFNob3VsZCB3ZSB0cnkgZG8gdGhlIHNhbXBsaW5n IGZvciBhbmFseXplIG9uIHRoZSByZW1vdGUgc2VydmVyPwogCSAqLwogCWZvcmVhY2gobGMs IHNlcnZlci0+b3B0aW9ucykKIAl7CiAJCURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICop IGxmaXJzdChsYyk7CiAKLQkJaWYgKHN0cmNtcChkZWYtPmRlZm5hbWUsICJzYW1wbGUiKSA9 PSAwKQorCQlpZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwgImFuYWx5emVfc2FtcGxpbmciKSA9 PSAwKQogCQl7Ci0JCQlkb19zYW1wbGUgPSBkZWZHZXRCb29sZWFuKGRlZik7CisJCQljaGFy ICp2YWx1ZSA9IGRlZkdldFN0cmluZyhkZWYpOworCisJCQlpZiAoc3RyY21wKHZhbHVlLCAi b2ZmIikgPT0gMCkKKwkJCQltZXRob2QgPSBBTkFMWVpFX1NBTVBMRV9PRkY7CisJCQllbHNl IGlmIChzdHJjbXAodmFsdWUsICJhdXRvIikgPT0gMCkKKwkJCQltZXRob2QgPSBBTkFMWVpF X1NBTVBMRV9BVVRPOworCQkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAicmFuZG9tIikgPT0g MCkKKwkJCQltZXRob2QgPSBBTkFMWVpFX1NBTVBMRV9SQU5ET007CisJCQllbHNlIGlmIChz dHJjbXAodmFsdWUsICJzeXN0ZW0iKSA9PSAwKQorCQkJCW1ldGhvZCA9IEFOQUxZWkVfU0FN UExFX1NZU1RFTTsKKwkJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgImJlcm5vdWxsaSIpID09 IDApCisJCQkJbWV0aG9kID0gQU5BTFlaRV9TQU1QTEVfQkVSTk9VTExJOworCiAJCQlicmVh azsKIAkJfQogCX0KKwogCWZvcmVhY2gobGMsIHRhYmxlLT5vcHRpb25zKQogCXsKIAkJRGVm RWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoc3RyY21w KGRlZi0+ZGVmbmFtZSwgInNhbXBsZSIpID09IDApCisJCWlmIChzdHJjbXAoZGVmLT5kZWZu YW1lLCAiYW5hbHl6ZV9zYW1wbGluZyIpID09IDApCiAJCXsKLQkJCWRvX3NhbXBsZSA9IGRl ZkdldEJvb2xlYW4oZGVmKTsKKwkJCWNoYXIgKnZhbHVlID0gZGVmR2V0U3RyaW5nKGRlZik7 CisKKwkJCWlmIChzdHJjbXAodmFsdWUsICJvZmYiKSA9PSAwKQorCQkJCW1ldGhvZCA9IEFO QUxZWkVfU0FNUExFX09GRjsKKwkJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgImF1dG8iKSA9 PSAwKQorCQkJCW1ldGhvZCA9IEFOQUxZWkVfU0FNUExFX0FVVE87CisJCQllbHNlIGlmIChz dHJjbXAodmFsdWUsICJyYW5kb20iKSA9PSAwKQorCQkJCW1ldGhvZCA9IEFOQUxZWkVfU0FN UExFX1JBTkRPTTsKKwkJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgInN5c3RlbSIpID09IDAp CisJCQkJbWV0aG9kID0gQU5BTFlaRV9TQU1QTEVfU1lTVEVNOworCQkJZWxzZSBpZiAoc3Ry Y21wKHZhbHVlLCAiYmVybm91bGxpIikgPT0gMCkKKwkJCQltZXRob2QgPSBBTkFMWVpFX1NB TVBMRV9CRVJOT1VMTEk7CisKIAkJCWJyZWFrOwogCQl9CiAJfQogCi0JaWYgKGRvX3NhbXBs ZSkKKwkvKgorCSAqIEVycm9yLW91dCBpZiBleHBsaWNpdGx5IHJlcXVpcmVkIG9uZSBvZiB0 aGUgVEFCTEVTQU1QTEUgbWV0aG9kcywgYnV0CisJICogdGhlIHNlcnZlciBkb2VzIG5vdCBz dXBwb3J0IGl0LgorCSAqLworCWlmICgoc2VydmVyX3ZlcnNpb25fbnVtIDwgOTUwMDApICYm CisJCShtZXRob2QgPT0gQU5BTFlaRV9TQU1QTEVfU1lTVEVNIHx8CisJCSBtZXRob2QgPT0g QU5BTFlaRV9TQU1QTEVfQkVSTk9VTExJKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygicmVt b3RlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFRBQkxFU0FNUExFIGZlYXR1cmUiKSkpOwor CisJLyoKKwkgKiBGb3IgImF1dG8iIG1ldGhvZCwgcGljayB0aGUgb25lIHdlIGJlbGlldmUg aXMgYmVzdC4gRm9yIHNlcnZlcnMgd2l0aAorCSAqIFRBQkxFU0FNUExFIHN1cHBvcnQgd2Ug cGljayBCRVJOT1VMTEksIGZvciBvbGQgc2VydmVycyB3ZSBmYWxsLWJhY2sgdG8KKwkgKiBy YW5kb20oKSB0byBhdCBsZWFzdCByZWR1Y2UgbmV0d29yayB0cmFuc2Zlci4KKwkgKi8KKwlp ZiAobWV0aG9kID09IEFOQUxZWkVfU0FNUExFX0FVVE8pCisJeworCQlpZiAoc2VydmVyX3Zl cnNpb25fbnVtIDwgOTUwMDApCisJCQltZXRob2QgPSBBTkFMWVpFX1NBTVBMRV9SQU5ET007 CisJCWVsc2UKKwkJCW1ldGhvZCA9IEFOQUxZWkVfU0FNUExFX0JFUk5PVUxMSTsKKwl9CisK KwkvKgorCSAqIElmIHdlJ3ZlIGRlY2lkZWQgdG8gZG8gcmVtb3RlIHNhbXBsaW5nLCBjYWxj dWxhdGUgdGhlIHNhbXBsaW5nIHJhdGUuIFdlCisJICogbmVlZCB0byBnZXQgdGhlIG51bWJl ciBvZiB0dXBsZXMgZnJvbSB0aGUgcmVtb3RlIHNlcnZlciwgc28gd2Ugc2tpcCB0aGUKKwkg KiBuZXR3b3JrIHJvdW5kLXRyaXAgaWYgbm90IG5lZWRlZC4KKwkgKi8KKwlpZiAobWV0aG9k ICE9IEFOQUxZWkVfU0FNUExFX09GRikKIAl7CiAJCXJlbHR1cGxlcyA9IHBvc3RncmVzQ291 bnRUdXBsZXNGb3JGb3JlaWduVGFibGUocmVsYXRpb24pOwogCisJCS8qCisJCSAqIE5vIHJv d3Mgb3Igd2UgZXhwZWN0IHRvIHNhbXBsZSBldmVyeXRoaW5nIC0gZGlzYWJsZSBzYW1wbGlu ZyBhZnRlcgorCQkgKiBhbGwgKGFuZCBtYWtlIHN1cmUgd2UgZG9uJ3QgZGl2aWRlIGJ5IDAg aW4gc2FtcGxlX2ZyYWMgY2FsY3VsYXRpb24uKQorCQkgKi8KIAkJaWYgKChyZWx0dXBsZXMg PD0gMCkgfHwgKHRhcmdyb3dzID49IHJlbHR1cGxlcykpCi0JCQlkb19zYW1wbGUgPSBmYWxz ZTsKKwkJCW1ldGhvZCA9IEFOQUxZWkVfU0FNUExFX09GRjsKIAotCQlzYW1wbGVfZnJhYyA9 IHRhcmdyb3dzIC8gcmVsdHVwbGVzOworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZGl2aWRl IGJ5IDAgd2hlbiBjYWxjdWxhdGluZyB0aGUgcmF0ZS4gKi8KKwkJc2FtcGxlX2ZyYWMgPSB0 YXJncm93cyAvIE1heCgxLjAsIHJlbHR1cGxlcyk7CiAKLQkJLyogTGV0J3Mgc2FtcGxlIGEg Yml0IG1vcmUsIHdlJ2xsIHJlZHVjZSB0aGUgc2FtcGxlIGxvY2FsbHkuICovCi0JCXNhbXBs ZV9mcmFjICo9IDEuMjU7CisJCS8qCisJCSAqIExldCdzIHNhbXBsZSBhIGJpdCBtb3JlICgx MCUpLCB3ZSdsbCByZWR1Y2UgdGhlIHNhbXBsZSBsb2NhbGx5LgorCQkgKgorCQkgKiBYWFgg Tm90IHN1cmUgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LiBJZiB3ZSBkb24ndCB0cnVzdCB0 aGUgcmVtb3RlCisJCSAqIHNhbXBsaW5nIHRvIHNhbXBsZSB0aGUgcmlnaHQgbnVtYmVyIG9m IHJvd3MsIHdlIHNob3VsZCBub3QgdXNlIGl0LgorCQkgKi8KKwkJc2FtcGxlX2ZyYWMgKj0g MS4xOwogCi0JCS8qIFNhbml0eSBjaGVja3MuICovCisJCS8qCisJCSAqIEVuc3VyZSB0aGUg c2FtcGxpbmcgcmF0ZSBpcyBiZXR3ZWVuIDAuMCBhbmQgMS4wLCBldmVuIGFmdGVyIHRoZQor CQkgKiAxMCUgYWRqdXN0bWVudCBhYm92ZS4KKwkJICovCiAJCXNhbXBsZV9mcmFjID0gTWlu KDEuMCwgTWF4KDAuMCwgc2FtcGxlX2ZyYWMpKTsKIAogCQkvKgotCQkgKiBXaGVuIHNhbXBs aW5nIHRvbyBsYXJnZSBmcmFjdGlvbiwganVzdCByZWFkIGV2ZXJ5dGhpbmcuCi0JCSAqCi0J CSAqIFhYWCBJdCdzIG5vdCBjbGVhciB3aGVyZSBleGFjdGx5IHRoZSB0aHJlc2hvbGQgaXMs IHdpdGggc2xvdwotCQkgKiBuZXR3b3JrIGl0IG1heSBiZSBjaGVhcGVyIHRvIHNhbXBsZSBl dmVuIDkwJS4KKwkJICogSWYgd2UgZXhwZWN0IHRoZSBzYW1wbGluZyB0byByZWR1Y2UgdmVy eSBmZXcgcm93cywganVzdCBkaXNhYmxlIGl0CisJCSAqIGFuZCByZWFkIHRoZSB3aG9sZSBy ZW1vdGUgdGFibGUuIFdlIGRlY2lkZSBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mCisJCSAqIHJv d3Mgd2UgZXhwZWN0IHRvICJlbGltaW5hdGUiIGJ5IHNhbXBsaW5nLiBJZiBzYXZpbmcgdGhh biAxMDAgcm93cywKKwkJICogd2UgZGlzYWJsZSBzYW1wbGluZy4KIAkJICovCi0JCWlmIChz YW1wbGVfZnJhYyA+IDAuNSkKLQkJCWRvX3NhbXBsZSA9IGZhbHNlOworCQlpZiAocmVsdHVw bGVzICogKDEgLSBzYW1wbGVfZnJhYykgPCAxMDAuMCkKKwkJCW1ldGhvZCA9IEFOQUxZWkVf U0FNUExFX09GRjsKIAl9CiAKIAkvKgpAQCAtNTE1MSwxNCArNTIxMyw3IEBAIHBvc3RncmVz QWNxdWlyZVNhbXBsZVJvd3NGdW5jKFJlbGF0aW9uIHJlbGF0aW9uLCBpbnQgZWxldmVsLAog CWluaXRTdHJpbmdJbmZvKCZzcWwpOwogCWFwcGVuZFN0cmluZ0luZm8oJnNxbCwgIkRFQ0xB UkUgYyV1IENVUlNPUiBGT1IgIiwgY3Vyc29yX251bWJlcik7CiAKLQlpZiAoZG9fc2FtcGxl ICYmIHVzZV90YWJsZXNhbXBsZSkKLQkJZGVwYXJzZUFuYWx5emVUYWJsZVNhbXBsZVNxbCgm c3FsLCByZWxhdGlvbiwgJmFzdGF0ZS5yZXRyaWV2ZWRfYXR0cnMsIHNhbXBsZV9mcmFjKTsK LQllbHNlIGlmIChkb19zYW1wbGUpCi0JCWRlcGFyc2VBbmFseXplTGVnYWN5U2FtcGxlU3Fs KCZzcWwsIHJlbGF0aW9uLCAmYXN0YXRlLnJldHJpZXZlZF9hdHRycywgc2FtcGxlX2ZyYWMp OwotCWVsc2UKLQkJZGVwYXJzZUFuYWx5emVTcWwoJnNxbCwgcmVsYXRpb24sICZhc3RhdGUu cmV0cmlldmVkX2F0dHJzKTsKLQotCWVsb2coV0FSTklORywgIlNRTDogJXMiLCBzcWwuZGF0 YSk7CisJZGVwYXJzZUFuYWx5emVTcWwoJnNxbCwgcmVsYXRpb24sIG1ldGhvZCwgc2FtcGxl X2ZyYWMsICZhc3RhdGUucmV0cmlldmVkX2F0dHJzKTsKIAogCS8qIEluIHdoYXQgZm9sbG93 cywgZG8gbm90IHJpc2sgbGVha2luZyBhbnkgUEdyZXN1bHRzLiAqLwogCVBHX1RSWSgpOwpA QCAtNTI1MSwxMSArNTMwNiwxNSBAQCBwb3N0Z3Jlc0FjcXVpcmVTYW1wbGVSb3dzRnVuYyhS ZWxhdGlvbiByZWxhdGlvbiwgaW50IGVsZXZlbCwKIAkvKiBXZSBhc3N1bWUgdGhhdCB3ZSBo YXZlIG5vIGRlYWQgdHVwbGUuICovCiAJKnRvdGFsZGVhZHJvd3MgPSAwLjA7CiAKLQkvKiBX ZSd2ZSByZXRyaWV2ZWQgYWxsIGxpdmluZyB0dXBsZXMgZnJvbSBmb3JlaWduIHNlcnZlci4g Ki8KLQlpZiAoZG9fc2FtcGxlKQotCQkqdG90YWxyb3dzID0gcmVsdHVwbGVzOwotCWVsc2UK KwkvKgorCSAqIFdpdGhvdXQgQU5BTFlaRSBzYW1wbGluZywgd2UndmUgcmV0cmlldmVkIGFs bCBsaXZpbmcgdHVwbGVzIGZyb20gZm9yZWlnbgorCSAqIHNlcnZlciwgc28ganVzdCB1c2Ug dGhhdC4gT3RoZXJ3aXNlIHdlIGhhdmUgdGhlIHJlbHR1cGxlcyBlc3RpbWF0ZSB3ZQorCSAq IGdvdCBmcm9tIHRoZSByZW1vdGUgc2lkZS4KKwkgKi8KKwlpZiAobWV0aG9kID09IEFOQUxZ WkVfU0FNUExFX09GRikKIAkJKnRvdGFscm93cyA9IGFzdGF0ZS5zYW1wbGVyb3dzOworCWVs c2UKKwkJKnRvdGFscm93cyA9IHJlbHR1cGxlczsKIAogCS8qCiAJICogRW1pdCBzb21lIGlu dGVyZXN0aW5nIHJlbGF0aW9uIGluZm8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3Bvc3RncmVzX2Zkdy5oIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmgKaW5kZXggYjBkOWNmNDI5ODIuLjFjMmE2MDQ1YTk0IDEwMDY0NAotLS0gYS9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9wb3N0Z3Jlc19mZHcuaApAQCAtMTM0LDYgKzEzNCwxOCBAQCB0eXBlZGVmIHN0cnVjdCBQ Z0Zkd0Nvbm5TdGF0ZQogCUFzeW5jUmVxdWVzdCAqcGVuZGluZ0FyZXE7CS8qIHBlbmRpbmcg YXN5bmMgcmVxdWVzdCAqLwogfSBQZ0Zkd0Nvbm5TdGF0ZTsKIAorLyoKKyAqIE1ldGhvZCB1 c2VkIGJ5IEFOQUxZWkUgdG8gc2FtcGxlIHJlbW90ZSByb3dzLgorICovCit0eXBlZGVmIGVu dW0gUGdGZHdTYW1wbGluZ01ldGhvZAoreworCUFOQUxZWkVfU0FNUExFX09GRiwJCQkvKiBu byByZW1vdGUgc2FtcGxpbmcgKi8KKwlBTkFMWVpFX1NBTVBMRV9BVVRPLAkJLyogY2hvb3Nl IGJ5IHNlcnZlciB2ZXJzaW9uICovCisJQU5BTFlaRV9TQU1QTEVfUkFORE9NLAkJLyogcmVt b3RlIHJhbmRvbSgpICovCisJQU5BTFlaRV9TQU1QTEVfU1lTVEVNLAkJLyogVEFCTEVTQU1Q TEUgc3lzdGVtICovCisJQU5BTFlaRV9TQU1QTEVfQkVSTk9VTExJCS8qIFRBQkxFU0FNUExF IGJlcm5vdWxsaSAqLworfSBQZ0Zkd1NhbXBsaW5nTWV0aG9kOworCiAvKiBpbiBwb3N0Z3Jl c19mZHcuYyAqLwogZXh0ZXJuIGludAlzZXRfdHJhbnNtaXNzaW9uX21vZGVzKHZvaWQpOwog ZXh0ZXJuIHZvaWQgcmVzZXRfdHJhbnNtaXNzaW9uX21vZGVzKGludCBuZXN0bGV2ZWwpOwpA QCAtMjEzLDEzICsyMjUsOSBAQCBleHRlcm4gdm9pZCBkZXBhcnNlRGlyZWN0RGVsZXRlU3Fs KFN0cmluZ0luZm8gYnVmLCBQbGFubmVySW5mbyAqcm9vdCwKIGV4dGVybiB2b2lkIGRlcGFy c2VBbmFseXplU2l6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsKTsKIGV4dGVy biB2b2lkIGRlcGFyc2VBbmFseXplVHVwbGVzU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlv biByZWwpOwogZXh0ZXJuIHZvaWQgZGVwYXJzZUFuYWx5emVTcWwoU3RyaW5nSW5mbyBidWYs IFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkgIFBnRmR3U2FtcGxpbmdNZXRob2Qgc2FtcGxlX21l dGhvZCwKKwkJCQkJCQkgIGRvdWJsZSBzYW1wbGVfZnJhYywKIAkJCQkJCQkgIExpc3QgKipy ZXRyaWV2ZWRfYXR0cnMpOwotZXh0ZXJuIHZvaWQgZGVwYXJzZUFuYWx5emVUYWJsZVNhbXBs ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLAotCQkJCQkJCQkJCSBMaXN0ICoq cmV0cmlldmVkX2F0dHJzLAotCQkJCQkJCQkJCSBkb3VibGUgc2FtcGxlX2ZyYWMpOwotZXh0 ZXJuIHZvaWQgZGVwYXJzZUFuYWx5emVMZWdhY3lTYW1wbGVTcWwoU3RyaW5nSW5mbyBidWYs IFJlbGF0aW9uIHJlbCwKLQkJCQkJCQkJCQkgIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMsCi0J CQkJCQkJCQkJICBkb3VibGUgc2FtcGxlX2ZyYWMpOwogZXh0ZXJuIHZvaWQgZGVwYXJzZVRy dW5jYXRlU3FsKFN0cmluZ0luZm8gYnVmLAogCQkJCQkJCSAgIExpc3QgKnJlbHMsCiAJCQkJ CQkJICAgRHJvcEJlaGF2aW9yIGJlaGF2aW9yLApkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0 Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9z cWwvcG9zdGdyZXNfZmR3LnNxbAppbmRleCBhZTFmYzhmNThiZS4uOWMxZGFlY2MxYTIgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCisr KyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zNjM2 LDMgKzM2MzYsNTcgQEAgU0VMRUNUICogRlJPTSBwcmVtMjsKIAogQUxURVIgU0VSVkVSIGxv b3BiYWNrIE9QVElPTlMgKERST1AgcGFyYWxsZWxfY29tbWl0KTsKIEFMVEVSIFNFUlZFUiBs b29wYmFjazIgT1BUSU9OUyAoRFJPUCBwYXJhbGxlbF9jb21taXQpOworCisKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKy0tIHRlc3QgZm9yIEFOQUxZWkUKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFU RSBUQUJMRSBhbmFseXplX3J0YWJsZTEgKGlkIGludCBwcmltYXJ5IGtleSwgYSB0ZXh0LCBi IGJpZ2ludCk7CitDUkVBVEUgVEFCTEUgYW5hbHl6ZV9ydGFibGUyIChpZCBpbnQgcHJpbWFy eSBrZXksIGEgdGV4dCwgYiBiaWdpbnQpOworCitDUkVBVEUgVEFCTEUgYW5hbHl6ZV9wdGFi bGUgKGlkIGludCwgYSB0ZXh0LCBiIGJpZ2ludCkgUEFSVElUSU9OIEJZIEhBU0goaWQpOwor Q1JFQVRFIEZPUkVJR04gVEFCTEUgYW5hbHl6ZV9mdGFibGVfX3AxIFBBUlRJVElPTiBPRiBh bmFseXplX3B0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9S IFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorICAgICAgIFNFUlZFUiBs b29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdhbmFseXplX3J0YWJsZTEnKTsKK0NSRUFU RSBGT1JFSUdOIFRBQkxFIGFuYWx5emVfZnRhYmxlX19wMiBQQVJUSVRJT04gT0YgYW5hbHl6 ZV9wdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUiBWQUxV RVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKKyAgICAgICBTRVJWRVIgbG9vcGJh Y2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYW5hbHl6ZV9ydGFibGUyJyk7CitJTlNFUlQgSU5U TyBhbmFseXplX3B0YWJsZSAoU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1MDAw KSB4KTsKKworLS0gYW5hbHl6ZSB0aGUgJ2xvY2FsJyB0YWJsZXMgdG8gdXBkYXRlIHJlbHBh Z2VzL3JlbHR1cGxlcworQU5BTFlaRSBhbmFseXplX3J0YWJsZTEsIGFuYWx5emVfcnRhYmxl MjsKKworLS0gbm93IGFuYWx5emUgdGhlIHJlbW90ZSB0YWJsZXMgZGlyZWN0bHkgLSB0aGlz IGV4cGVjdHMgdG8gc2NhbiBldmVyeXRoaW5nLAorLS0gc28gc2hvdWxkIG5vdCBkbyBhbnkg c2FtcGxpbmcKK0FOQUxZWkUgYW5hbHl6ZV9mdGFibGVfX3AxOworQU5BTFlaRSBhbmFseXpl X2Z0YWJsZV9fcDI7CisKKy0tIG5vdyBhbmFseXplIHRoZSBwYXJlbnQgLSB0aGlzIHNob3Vs ZCBzY2FuIGV2ZXJ5dGhpbmcgdG9vLCBiZWNhdXNlIDMwaworLS0gc2FtcGxlIHJlcXVpcmVz IGV2ZXJ5dGhpbmcgdG8gYmUgc2Nhbm5lZAorQU5BTFlaRSBhbmFseXplX3B0YWJsZTsKKwor LS0gbm93IGxvd2VyIHRoZSB0YXJnZXQgdG8gMTAsIHdoaWNoIHJlcXVpcmVzIG9ubHkgM2sg cm93cyBzYW1wbGUsIHNvIGFib3V0CistLSAxNTAwIHJvd3MgZnJvbSBlYWNoIHBhcnRpdGlv biwgc28gc2FtcGxpbmcgd2lsbCBraWNrIGluLCBieSBkZWZhdWx0IHdpdGgKKy0tIHRoZSAn YmVybm91bGxpJyB0YWJsZXNhbXBsZSBtZXRob2QKK1NFVCBkZWZhdWx0X3N0YXRpc3RpY3Nf dGFyZ2V0ID0gMTA7CitBTkFMWVpFIGFuYWx5emVfcHRhYmxlOworCistLSBub3cgYWx0ZXIg dGhlIG1ldGhvZCBmb3IgcmVtb3RlIHNlcnZlciB0byAnc3lzdGVtJworQUxURVIgU0VSVkVS IGxvb3BiYWNrIE9QVElPTlMgKGFuYWx5emVfc2FtcGxpbmcgJ3N5c3RlbScpOworQU5BTFla RSBhbmFseXplX3B0YWJsZTsKKworLS0gbm93IGFsdGVyIHRoZSBtZXRob2QgZm9yIHJlbW90 ZSB0YWJsZSB0byAncmFuZG9tJywgdG8gbm90IHVzZSB0YWJsZXNhbXBsZQorLS0gYnV0IHRo ZSAnbGVnYWN5JyBzYW1wbGluZywgYW5kIGRpc2FibGUgc2FtcGxpbmcgZm9yIHRoZSBvdGhl ciBwYXJ0aXRpb24KK0FMVEVSIEZPUkVJR04gVEFCTEUgYW5hbHl6ZV9mdGFibGVfX3AxIE9Q VElPTlMgKEFERCBhbmFseXplX3NhbXBsaW5nICdyYW5kb20nKTsKK0FMVEVSIEZPUkVJR04g VEFCTEUgYW5hbHl6ZV9mdGFibGVfX3AyIE9QVElPTlMgKEFERCBhbmFseXplX3NhbXBsaW5n ICdvZmYnKTsKK0FOQUxZWkUgYW5hbHl6ZV9wdGFibGU7CisKKy0tIG5vdyBhZGQgbW9yZSBk YXRhLCBzbyB0aGF0IGVhY2ggcGFydGl0aW9uIGV4Y2VlZHMgdGhlIHN0YXRpc3RpY3MgdGFy Z2V0CitJTlNFUlQgSU5UTyBhbmFseXplX3B0YWJsZSAoU0VMRUNUIHggRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHgpOworCitBTkFMWVpFIGFuYWx5emVfcnRhYmxlMSwg YW5hbHl6ZV9ydGFibGUyOworQU5BTFlaRSBhbmFseXplX3B0YWJsZTsKKworLS0gY2xlYW51 cAorRFJPUCBGT1JFSUdOIFRBQkxFIGFuYWx5emVfZnRhYmxlX19wMSwgYW5hbHl6ZV9mdGFi bGVfX3AyOworRFJPUCBUQUJMRSBhbmFseXplX3B0YWJsZSwgYW5hbHl6ZV9ydGFibGUxLCBh bmFseXplX3J0YWJsZTI7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcG9zdGdyZXMtZmR3 LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcG9zdGdyZXMtZmR3LnNnbWwKaW5kZXggYmZkMzQ0Y2Rj MGUuLmQ0NGM4Y2RkNzFlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcG9zdGdyZXMtZmR3 LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Bvc3RncmVzLWZkdy5zZ21sCkBAIC0zMDUsNiAr MzA1LDI4IEBAIE9QVElPTlMgKEFERCBwYXNzd29yZF9yZXF1aXJlZCAnZmFsc2UnKTsKICAg ICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgIDx0ZXJtPjxsaXRlcmFsPmFuYWx5emVfc2FtcGxpbmc8L2xpdGVyYWw+ICg8 dHlwZT50ZXh0PC90eXBlPik8L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJh PgorICAgICAgIFRoaXMgb3B0aW9uIGRldGVybWluZXMgaWYgPGNvbW1hbmQ+QU5BTFlaRTwv Y29tbWFuZD4gb24gYSBmb3JlaWduCisgICAgICAgdGFibGUgc2FtcGxlcyB0aGUgZGF0YSBv biB0aGUgcmVtb3RlIG5vZGUsIG9yIHJlYWRzIGFuZCB0cmFuc2ZlcnMKKyAgICAgICBhbGwg ZGF0YSBhbmQgcGVyZm9ybXMgdGhlIHNhbXBsaW5nIGxvY2FsbHkuIFRoZSBzdXBwb3J0ZWQg dmFsdWVzCisgICAgICAgYXJlIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4sIDxsaXRlcmFsPnJh bmRvbTwvbGl0ZXJhbD4sCisgICAgICAgPGxpdGVyYWw+c3lzdGVtPC9saXRlcmFsPiwgPGxp dGVyYWw+YmVybm91bGxpPC9saXRlcmFsPiBhbmQKKyAgICAgICA8bGl0ZXJhbD5hdXRvPC9s aXRlcmFsPi4gPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiBkaXNhYmxlcyByZW1vdGUKKyAgICAg ICBzYW1wbGluZywgc28gYWxsIGRhdGEgYXJlIHRyYW5zZmVycmVkIGFuZCBzYW1wbGVkIGxv Y2FsbHkuCisgICAgICAgPGxpdGVyYWw+cmFuZG9tPC9saXRlcmFsPiBwZXJmb3JtcyByZW1v dGUgc2FtcGxpbmcgdXNpbmcKKyAgICAgICA8bGl0ZXJhbD5yYW5kb20oKTwvbGl0ZXJhbD4g ZnVuY3Rpb24sIHdoaWxlIDxsaXRlcmFsPnN5c3RlbTwvbGl0ZXJhbD4KKyAgICAgICBhbmQg PGxpdGVyYWw+YmVybm91bGxpPC9saXRlcmFsPiByZWx5IG9uIGJ1aWx0LWluIDxsaXRlcmFs PlRBQkxFU0FNUExFPC9saXRlcmFsPgorICAgICAgIG1ldGhvZHMuIDxsaXRlcmFsPnJhbmRv bTwvbGl0ZXJhbD4gd29ya3Mgb24gYWxsIHNlcnZlciB2ZXJzaW9ucywKKyAgICAgICB3aGls ZSA8bGl0ZXJhbD5UQUJMRVNBTVBMRTwvbGl0ZXJhbD4gaXMgc3VwcG9ydGVkIG9ubHkgc2lu Y2UgOS41LgorICAgICAgIDxsaXRlcmFsPmF1dG88L2xpdGVyYWw+IGNoZWNrcyB0aGUgc2Vy dmVyIHZlcnNpb24gYW5kIHBpY2tzIHRoZQorICAgICAgIGJlc3QgcmVtb3RlIHNhbXBsaW5n IG1ldGhvZCBhdXRvbWF0aWNhbGx5LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVt PgorICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8L3ZhcmlhYmxlbGlzdD4KIAogICAgPHBh cmE+Ci0tIAoyLjM0LjMKCg== --------------N2korMheyEJMOm3zS7FDp0rV--