Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wS353-002uim-31 for pgsql-hackers@arkaria.postgresql.org; Wed, 27 May 2026 01:29:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wS351-006ixt-2p for pgsql-hackers@arkaria.postgresql.org; Wed, 27 May 2026 01:29:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wS351-006ixf-1E for pgsql-hackers@lists.postgresql.org; Wed, 27 May 2026 01:29:08 +0000 Received: from mail-oi1-x22c.google.com ([2607:f8b0:4864:20::22c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wS34z-00000001c9G-3cQs for pgsql-hackers@lists.postgresql.org; Wed, 27 May 2026 01:29:08 +0000 Received: by mail-oi1-x22c.google.com with SMTP id 5614622812f47-4856128f670so3193763b6e.0 for ; Tue, 26 May 2026 18:29:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779845343; cv=none; d=google.com; s=arc-20240605; b=EzK/x5ajG8QBWNMcuCWpsq7FffjkPo7UBsh2dCyIAfWtVbA1E2KMrWh0UoIWpAEE6y Ar66WXIcI3r2zOoBQSA1hR6oEM3lZWyMSIa0gL9qaoAjSmNrJg9c5SWK3S38BEgvSp23 +OS45YbsYdwZ9mfldOBpbfFouYlDd0ZFwIl4W/Y8rsmCHZldgS3e3ew+jBiuIxi/yVME 7myCXaokMw+FtrjZfjhcBKwOqB3/1ROQ6LNd9gvGcqQgbTOn7vkuWxB+k2JRMgzEWGf2 sAek6QMes7Tm7oikU9XyC9tpnbzfqija0ynGNvQcQzkk5kB2MI788Y3A1D/84+dEVdd3 vDeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=0EH7G3VMMjgcG8rmq0r1Ubbn+ITRGEKD6NVFSlyo/g4=; fh=TNZOP6LPWALcB7WLBUCoamE0KSjbu9du6FuSSqTjea8=; b=YQxaHmpQbBr2r/Ix7nhhjfTQqrtKUSM5z+J7M0Cd++13JDztFKOcOUi4LgaYmAMuPd UckbjoqUjczqHZXs5lrqeZbJyg4nO7Xct1EfiN3R9rlhmAx+PLjuSv8Wyc7O6YiPH/In Pk1CkwYOcnv2eG0xpcvcYqLCVzK6qVD5fih6dX9voBAW4hYIpco+mIkl+7MYx6vh5h2i /1zHSZFsffnYlECUPJK1evfGANjWJ790mmFMd5pDBgBmluipbFn7K4qhL3jQccanFZ9T KLbAvvg6XnZB9mu1yprundRchsx0r2HKR53FemiKczrTvIHsv/UvdTrfMPbdF7zUgmmd edUw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20251104.gappssmtp.com; s=20251104; t=1779845343; x=1780450143; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=0EH7G3VMMjgcG8rmq0r1Ubbn+ITRGEKD6NVFSlyo/g4=; b=wA5Rg/6ZYkvBuELUabVyqMp9hg0NGcXatQ63olfJl3nDGi9vuiO3rrn2s+lYSsV3Nw Cn0AdD+6uFlCMaUge7epPwodgoRnf7fD/V62kSu8g4Ho9vpnRZaJO40wdOdyU+GanPTO CpMf0EiDfQh8YwmsPNIKd8T6NxVIyIHlx5+AhEgsLlG2TTwpkGvF/W0Zy6C/JA+drgmE pOXK7Q3nGw5gzrKMhDESiAxylfQwEkEzJHNiGS29bJkjAyLsk1YSLYzKHZc4tFlvc01J heFxEjCCTh3wFwb6u5+6xo5nh8YUtgGvbvlG6MeZAb/jxfn1yt9dvEHgE3gPJa8cEwIA 0aEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779845343; x=1780450143; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0EH7G3VMMjgcG8rmq0r1Ubbn+ITRGEKD6NVFSlyo/g4=; b=XMPZeeb+M1+KtNnGhyTQV0X9SckWuaZsSvRnCsLGM6F6+y0BP2wWA64Xv5TRx0mSfC f2eblHfbyE2M2MSKnhwbGbXP1nleHzOCjnKW36FZ8Zdt8c6KbLGdChonSedzfzkwMsBZ saMs9CUUwmSggY2vfe2D43X+/bIWJWkeBACkGaZDf16dNeZwOwvokdfAdBhEQxN9xWyv u2/xYkaDqPTs8I+2VqrJ0T7yB+tG6Q0B5pPI8tljdRk5FwxttRKmx9BP1arMV/0DZOsl Sz6KjuoSlk3sIHutlGxWjYdhlzkJHcyMhLPd/TBbxh/vf3SLzTa8iPTtC84zY/qKZrjz fugQ== X-Gm-Message-State: AOJu0YzTnsmVR8OTGBYdG3NM2a+kNkZI8sm2ZcY/9sUfx3d9W6K0Sb5x gYoAg+JtL1UaU9tIk4QhbUDocNrDOUiXy6YsOUDipVZxskdaOC3EgUFPRX5u8v8lHg9C+Dwz2Fd Gcd6kNbtvlMEzhEE8hgnhA7lpC/Xw8Ly/9y8ZdaQjpip5LwvuNB6X1zOIjw== X-Gm-Gg: Acq92OG2C1zSWbEOjTnXcp9qIMBl1LskZlOt8MxhgcegGVz7qPDx0lI0SEs96AcN4iq rzPrCE3xh82DD7R/u4QhuCJpEILA45EceFdCczxZESWqSqVb2tP+2gBf5LOaDtZ+AMDZBBPdYf3 bMS5ODVkzVVVD+CvTHoTGw5J5+YW6ssSc28bq9d0YnZvL6b0xEzv/KtK0ScF0Im6ydmBTpu0BmF 5H2SwPgh2K3ktxihvkY9K81hrLAwQ5IQG8qa60xAMJNW9//PIlOdCRrlDL+keeu3IWj2yjaRFwV gPMA X-Received: by 2002:a4a:ec4c:0:b0:67e:294b:7246 with SMTP id 006d021491bc7-69d7eb44ff0mr12076587eaf.14.1779845343247; Tue, 26 May 2026 18:29:03 -0700 (PDT) MIME-Version: 1.0 References: <4245F94D-84F1-4E05-BF81-C458A6CF9901@gmail.com> <260A544F-FBD6-40CC-9449-5987049DD2D4@gmail.com> In-Reply-To: From: Paul A Jungwirth Date: Tue, 26 May 2026 18:28:51 -0700 X-Gm-Features: AVHnY4L74QE8Tjk_meUquzNJ7MopTade7wy2CS2StakqmRMdfjqq95oqlGdzwxI Message-ID: Subject: Re: Fix bug of UPDATE/DELETE FOR PORTION OF with inheritance tables To: Chao Li Cc: PostgreSQL Hackers , jian he Content-Type: multipart/mixed; boundary="00000000000070dcf50652c28932" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000070dcf50652c28932 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, May 26, 2026 at 9:14=E2=80=AFAM Paul A Jungwirth wrote: > > I thought the ExecInitForPortionOf refactoring was still nice to keep, > and it seemed to fit better here. (I should have updated the commit > message not to mention UPDATE OF though.) I looked at the original v1 patch again. I thought the commit message was excellent, so I pulled that into the latest patch, also some comment changes and the partitionRouting boolean and some test double-checks. I still like how ExecInitForPortionOf cuts down on the branchiness and the variables used to track attnums, and also how it gathers a lot of the child table setup in one place. The v1 seemed hard to trace all the cases from top to bottom. For instance it initialized map for all child tables, but then only used it for partitions. > But thinking about it this morning, I realized: the planner already > prunes partitions before we get here. Lazily initializing the structs > is trying too hard. Is there some scenario where that actually saves > work? Never mind, of course you can filter rows (and whole tables) besides just by partition pruning/constraint exclusion. I'm not sure whom to list as author/co-author/reviewer for this patch, but I took a stab at it. I think most of the current code is from jian he's version, but all three of us have contributed a lot by this point. Yours, --=20 Paul ~{:-) pj@illuminatedcomputing.com --00000000000070dcf50652c28932 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Fix-FOR-PORTION-OF-for-inheritance-children.patch" Content-Disposition: attachment; filename="v3-0001-Fix-FOR-PORTION-OF-for-inheritance-children.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpndyc3u0 RnJvbSAwOTJlYWQzMjM2NWZjYzAyYzAwMWQxMjIzZmJhZTRmZjk0YjJhNGU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWluYXRlZGNv bXB1dGluZy5jb20+CkRhdGU6IE1vbiwgMjUgTWF5IDIwMjYgMTU6NDQ6MzMgLTA3MDAKU3ViamVj dDogW1BBVENIIHYzXSBGaXggRk9SIFBPUlRJT04gT0YgZm9yIGluaGVyaXRhbmNlIGNoaWxkcmVu CgpFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzKCkgYXNzdW1lZCB0aGF0IGFueSByZXN1bHQgcmVs YXRpb24gd2l0aApyaV9Sb290UmVzdWx0UmVsSW5mbyBzaG91bGQgcmVpbnNlcnQgdGVtcG9yYWwg bGVmdG92ZXJzIHRocm91Z2ggdGhlIHJvb3QKcmVsYXRpb24uICBUaGF0IGlzIGNvcnJlY3QgZm9y IHBhcnRpdGlvbmVkIHRhYmxlcywgd2hlcmUgdHVwbGUgcm91dGluZyBpcwpuZWVkZWQsIGJ1dCBp dCBpcyB3cm9uZyBmb3IgcGxhaW4gaW5oZXJpdGFuY2UuCgpXaGVuIFVQREFURS9ERUxFVEUgRk9S IFBPUlRJT04gT0YgaXMgcnVuIG9uIGFuIGluaGVyaXRhbmNlIHBhcmVudCBhbmQgYQpjaGlsZCBy b3cgaXMgc3BsaXQsIHRoZSBsZWZ0b3ZlciByb3dzIG11c3QgYmUgaW5zZXJ0ZWQgYmFjayBpbnRv IHRoZSBjaGlsZApyZWxhdGlvbi4gIFJlaW5zZXJ0aW5nIHRocm91Z2ggdGhlIHBhcmVudCBjYW4g bG9zZSBjaGlsZC1vbmx5IGNvbHVtbnMgYW5kCnBsYWNlIHRoZSBsZWZ0b3ZlciByb3dzIGluIHRo ZSB3cm9uZyByZWxhdGlvbi4KCkZpeCB0aGlzIGJ5IGRpc3Rpbmd1aXNoaW5nIHBhcnRpdGlvbmVk LXRhYmxlIHJvdXRpbmcgZnJvbSBwbGFpbgppbmhlcml0YW5jZS4gIEZvciBwYXJ0aXRpb25lZCB0 YWJsZXMsIGtlZXAgdXNpbmcgdGhlIHJvb3QgbGVmdG92ZXIgc2xvdCBhbmQKaW5zZXJ0IHRocm91 Z2ggdGhlIHJvb3QgcmVsYXRpb24uICBGb3IgcGxhaW4gaW5oZXJpdGFuY2UgY2hpbGRyZW4sIHVz ZSBhCmxlZnRvdmVyIHNsb3QgbWF0Y2hpbmcgdGhlIGNoaWxkIHJlbGF0aW9uIGFuZCBpbnNlcnQg ZGlyZWN0bHkgaW50byB0aGUKY2hpbGQuICBBbHNvIGtlZXAgdHJhbnNsYXRpbmcgdGhlIGFwcGxp Y2F0aW9uLXRpbWUgY29sdW1uIGF0dG5vIGZvciBjaGlsZApyZWxhdGlvbnMsIHNvIG11bHRpcGxl LWluaGVyaXRhbmNlIGNhc2VzIHdpdGggZGlmZmVyZW50IGF0dHJpYnV0ZSBudW1iZXJzCmFyZSBo YW5kbGVkIGNvcnJlY3RseS4KCkFkZGVkIGFuIEV4ZWNJbml0Rm9yUG9ydGlvbk9mIGZ1bmN0aW9u IHRvIHNldCB1cCB0aGUgRm9yUG9ydGlvbk9mU3RhdGUgZm9yIGVhY2gKY2hpbGQgdGFibGUsIHdo aWNoIGtlZXBzIG1vc3Qgb2YgdGhlc2UgZGVjaXNpb25zIGxvY2FsaXplZCBpbnN0ZWFkIG9mIHNw cmVhZApvdXQgdGhyb3VnaCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzLiAgSW5jaWRlbnRhbGx5 IGNsYXJpZmllZCBhIGNvbW1lbnQgYWJvdXQKdGhlIHJhbmdldHlwZSBzdG9yZWQgaW4gRm9yUG9y dGlvbk9mU3RhdGUuCgpBZGQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgVVBEQVRFIGFuZCBERUxFVEUg Rk9SIFBPUlRJT04gT0Ygb24gaW5oZXJpdGFuY2UKY2hpbGRyZW4sIGluY2x1ZGluZyBhIG11bHRp cGxlLWluaGVyaXRhbmNlIGNhc2Ugd2hlcmUgdGhlIHJhbmdlIGNvbHVtbiBoYXMKYSBkaWZmZXJl bnQgYXR0bnVtIGluIHRoZSBwYXJlbnQgYW5kIGNoaWxkLgoKQXV0aG9yOiBqaWFuIGhlIDxqaWFu LnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+CkNvLWF1dGhvcmVkLWJ5OiBDaGFvIExpIDxsaS5ldmFu LmNoYW9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogUGF1bCBBLiBKdW5nd2lydGggPHBqQGlsbHVt aW5hdGVkY29tcHV0aW5nLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5v cmcvbWVzc2FnZS1pZC80MjQ1Rjk0RC04NEYxLTRFMDUtQkY4MS1DNDU4QTZDRjk5MDFAZ21haWwu Y29tCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgICAgICAgfCAx NjUgKysrKysrKysrKysrKy0tLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAg ICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRp b25fb2Yub3V0IHwgMTU4ICsrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwv Zm9yX3BvcnRpb25fb2Yuc3FsICAgICAgfCAgODUgKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2Vk LCAzNjAgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTW9kaWZ5VGFibGUuYwppbmRleCA0NzhjYjAxNzgzYy4uOTJkYmRhMThhZDkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC0xOTksNiArMTk5LDggQEAgc3RhdGlj IFR1cGxlVGFibGVTbG90ICpFeGVjTWVyZ2VOb3RNYXRjaGVkKE1vZGlmeVRhYmxlQ29udGV4dCAq Y29udGV4dCwKIHN0YXRpYyB2b2lkIEV4ZWNTZXR1cFRyYW5zaXRpb25DYXB0dXJlU3RhdGUoTW9k aWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwgRVN0YXRlICplc3RhdGUpOwogc3RhdGljIHZvaWQgZmly ZUJTVHJpZ2dlcnMoTW9kaWZ5VGFibGVTdGF0ZSAqbm9kZSk7CiBzdGF0aWMgdm9pZCBmaXJlQVNU cmlnZ2VycyhNb2RpZnlUYWJsZVN0YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNJbml0Rm9y UG9ydGlvbk9mKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAorCQkJ CQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbyk7CiAKIAogLyoKQEAgLTE0MTAsNyAr MTQxMiw2IEBAIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoTW9kaWZ5VGFibGVDb250ZXh0ICpj b250ZXh0LAogCU1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUgPSBjb250ZXh0LT5tdHN0YXRlOwog CU1vZGlmeVRhYmxlICpub2RlID0gKE1vZGlmeVRhYmxlICopIG10c3RhdGUtPnBzLnBsYW47CiAJ Rm9yUG9ydGlvbk9mRXhwciAqZm9yUG9ydGlvbk9mID0gKEZvclBvcnRpb25PZkV4cHIgKikgbm9k ZS0+Zm9yUG9ydGlvbk9mOwotCUF0dHJOdW1iZXIJcmFuZ2VBdHRubzsKIAlEYXR1bQkJb2xkUmFu Z2U7CiAJVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlOwogCUZvclBvcnRpb25PZlN0YXRlICpmcG9T dGF0ZTsKQEAgLTE0MjUsMzcgKzE0MjYsMTMgQEAgRXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhN b2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJUmV0dXJuU2V0SW5mbyByc2k7CiAJYm9vbAkJ ZGlkSW5pdCA9IGZhbHNlOwogCWJvb2wJCXNob3VsZEZyZWUgPSBmYWxzZTsKKwlSZXN1bHRSZWxJ bmZvICpyb290UmVsSW5mbyA9IG10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvOworCWJvb2wJCXBh cnRpdGlvblJvdXRpbmcgPQorCQlyb290UmVsSW5mbyAmJgorCQlyb290UmVsSW5mby0+cmlfUmVs YXRpb25EZXNjLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRTsK IAogCUxPQ0FMX0ZDSU5GTyhmY2luZm8sIDIpOwogCi0JaWYgKCFyZXN1bHRSZWxJbmZvLT5yaV9m b3JQb3J0aW9uT2YpCi0JewotCQkvKgotCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgRm9yUG9ydGlv bk9mU3RhdGUgeWV0LCB3ZSBtdXN0IGJlIGEgcGFydGl0aW9uCi0JCSAqIGNoaWxkIGJlaW5nIGhp dCBmb3IgdGhlIGZpcnN0IHRpbWUuIE1ha2UgYSBjb3B5IGZyb20gdGhlIHJvb3QsIHdpdGgKLQkJ ICogb3VyIG93biBUdXBsZVRhYmxlU2xvdC4gV2UgZG8gdGhpcyBsYXppbHkgc28gdGhhdCB3ZSBk b24ndCBwYXkgdGhlCi0JCSAqIHByaWNlIG9mIHVudXNlZCBwYXJ0aXRpb25zLgotCQkgKi8KLQkJ Rm9yUG9ydGlvbk9mU3RhdGUgKmxlYWZTdGF0ZSA9IG1ha2VOb2RlKEZvclBvcnRpb25PZlN0YXRl KTsKLQotCQlpZiAoIW10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvKQotCQkJZWxvZyhFUlJPUiwg Im5vIHJvb3QgcmVsYXRpb24gYnV0IHJpX2ZvclBvcnRpb25PZiBpcyB1bmluaXRpYWxpemVkIik7 Ci0KLQkJZnBvU3RhdGUgPSBtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mby0+cmlfZm9yUG9ydGlv bk9mOwotCQlBc3NlcnQoZnBvU3RhdGUpOwotCi0JCWxlYWZTdGF0ZS0+ZnBfcmFuZ2VOYW1lID0g ZnBvU3RhdGUtPmZwX3JhbmdlTmFtZTsKLQkJbGVhZlN0YXRlLT5mcF9yYW5nZVR5cGUgPSBmcG9T dGF0ZS0+ZnBfcmFuZ2VUeXBlOwotCQlsZWFmU3RhdGUtPmZwX3JhbmdlQXR0bm8gPSBmcG9TdGF0 ZS0+ZnBfcmFuZ2VBdHRubzsKLQkJbGVhZlN0YXRlLT5mcF90YXJnZXRSYW5nZSA9IGZwb1N0YXRl LT5mcF90YXJnZXRSYW5nZTsKLQkJbGVhZlN0YXRlLT5mcF9MZWZ0b3ZlciA9IGZwb1N0YXRlLT5m cF9MZWZ0b3ZlcjsKLQkJLyogRWFjaCBwYXJ0aXRpb24gbmVlZHMgYSBzbG90IG1hdGNoaW5nIGl0 cyB0dXBsZSBkZXNjcmlwdG9yICovCi0JCWxlYWZTdGF0ZS0+ZnBfRXhpc3RpbmcgPQotCQkJdGFi bGVfc2xvdF9jcmVhdGUocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCSAg Jm10c3RhdGUtPnBzLnN0YXRlLT5lc190dXBsZVRhYmxlKTsKLQotCQlyZXN1bHRSZWxJbmZvLT5y aV9mb3JQb3J0aW9uT2YgPSBsZWFmU3RhdGU7Ci0JfQogCWZwb1N0YXRlID0gcmVzdWx0UmVsSW5m by0+cmlfZm9yUG9ydGlvbk9mOwogCW9sZHR1cGxlU2xvdCA9IGZwb1N0YXRlLT5mcF9FeGlzdGlu ZzsKIAlsZWZ0b3ZlclNsb3QgPSBmcG9TdGF0ZS0+ZnBfTGVmdG92ZXI7CkBAIC0xNDc2LDIxICsx NDUzLDEzIEBAIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoTW9kaWZ5VGFibGVDb250ZXh0ICpj b250ZXh0LAogCWlmICghdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24ocmVzdWx0UmVsSW5m by0+cmlfUmVsYXRpb25EZXNjLCB0dXBsZWlkLCBTbmFwc2hvdEFueSwgb2xkdHVwbGVTbG90KSkK IAkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBmZXRjaCB0dXBsZSBmb3IgRk9SIFBPUlRJT04gT0Yi KTsKIAotCS8qCi0JICogR2V0IHRoZSBvbGQgcmFuZ2Ugb2YgdGhlIHJlY29yZCBiZWluZyB1cGRh dGVkL2RlbGV0ZWQuIE11c3QgcmVhZCB3aXRoCi0JICogdGhlIGF0dG5vIG9mIHRoZSBsZWFmIHBh cnRpdGlvbiBiZWluZyB1cGRhdGVkLgotCSAqLwotCi0JcmFuZ2VBdHRubyA9IGZvclBvcnRpb25P Zi0+cmFuZ2VWYXItPnZhcmF0dG5vOwotCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9Sb290UmVzdWx0 UmVsSW5mbykKLQkJbWFwID0gRXhlY0dldENoaWxkVG9Sb290TWFwKHJlc3VsdFJlbEluZm8pOwot CWlmIChtYXAgIT0gTlVMTCkKLQkJcmFuZ2VBdHRubyA9IG1hcC0+YXR0ck1hcC0+YXR0bnVtc1ty YW5nZUF0dG5vIC0gMV07CiAJc2xvdF9nZXRhbGxhdHRycyhvbGR0dXBsZVNsb3QpOwogCi0JaWYg KG9sZHR1cGxlU2xvdC0+dHRzX2lzbnVsbFtyYW5nZUF0dG5vIC0gMV0pCisJLyogR2V0IHRoZSBv bGQgcmFuZ2Ugb2YgdGhlIHJlY29yZCBiZWluZyB1cGRhdGVkL2RlbGV0ZWQuICovCisKKwlpZiAo b2xkdHVwbGVTbG90LT50dHNfaXNudWxsW2Zwb1N0YXRlLT5mcF9yYW5nZUF0dG5vIC0gMV0pCiAJ CWVsb2coRVJST1IsICJmb3VuZCBhIE5VTEwgcmFuZ2UgaW4gYSB0ZW1wb3JhbCB0YWJsZSIpOwot CW9sZFJhbmdlID0gb2xkdHVwbGVTbG90LT50dHNfdmFsdWVzW3JhbmdlQXR0bm8gLSAxXTsKKwlv bGRSYW5nZSA9IG9sZHR1cGxlU2xvdC0+dHRzX3ZhbHVlc1tmcG9TdGF0ZS0+ZnBfcmFuZ2VBdHRu byAtIDFdOwogCiAJLyoKIAkgKiBHZXQgdGhlIHJhbmdlJ3MgdHlwZSBjYWNoZSBlbnRyeS4gVGhp cyBpcyB3b3J0aCBjYWNoaW5nIGZvciB0aGUgd2hvbGUKQEAgLTE1MjgsMTIgKzE0OTcsMTkgQEAg RXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJ ZmNpbmZvLT5hcmdzWzFdLmlzbnVsbCA9IGZhbHNlOwogCiAJLyoKLQkgKiBJZiB0aGVyZSBhcmUg cGFydGl0aW9ucywgd2UgbXVzdCBpbnNlcnQgaW50byB0aGUgcm9vdCB0YWJsZSwgc28gd2UgZ2V0 Ci0JICogdHVwbGUgcm91dGluZy4gV2UgYWxyZWFkeSBzZXQgdXAgbGVmdG92ZXJTbG90IHdpdGgg dGhlIHJvb3QgdHVwbGUKLQkgKiBkZXNjcmlwdG9yLgorCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJs ZXMsIHdlIG11c3QgcmVhZCBsZWZ0b3ZlcnMgd2l0aCB0aGUgdHVwbGUKKwkgKiBkZXNjcmlwdG9y IG9mIHRoZSBjaGlsZCB0YWJsZSwgYnV0IGluc2VydCBpbnRvIHRoZSByb290IHRhYmxlIHRvIGVu YWJsZQorCSAqIHR1cGxlIHJvdXRpbmcuICBTbyBsZWZ0b3ZlclNsb3QgaXMgY29uZmlndXJlZCB3 aXRoIHRoZSByb290J3MgdHVwbGUKKwkgKiBkZXNjcmlwdG9yLiAgQnV0IGZvciB0cmFkaXRpb25h bCB0YWJsZSBpbmhlcml0YW5jZSwgd2UgZG9uJ3QgbmVlZAorCSAqIHR1cGxlIHJvdXRpbmcgYW5k IGp1c3QgaW5zZXJ0IGRpcmVjdGx5IGludG8gdGhlIGNoaWxkIHRhYmxlIHRvIHByZXNlcnZlCisJ ICogY2hpbGQtc3BlY2lmaWMgY29sdW1ucy4gIEluIHRoYXQgY2FzZSwgbGVmdG92ZXJTbG90IHVz ZXMgdGhlIGNoaWxkJ3MKKwkgKiAocmVzdWx0UmVsSW5mbykgdHVwbGUgZGVzY3JpcHRvci4KIAkg Ki8KLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfUm9vdFJlc3VsdFJlbEluZm8pCisJaWYgKHBhcnRp dGlvblJvdXRpbmcpCisJeworCQltYXAgPSBFeGVjR2V0Q2hpbGRUb1Jvb3RNYXAocmVzdWx0UmVs SW5mbyk7CiAJCXJlc3VsdFJlbEluZm8gPSByZXN1bHRSZWxJbmZvLT5yaV9Sb290UmVzdWx0UmVs SW5mbzsKKwl9CiAKIAkvKgogCSAqIEluc2VydCBhIGxlZnRvdmVyIGZvciBlYWNoIHZhbHVlIHJl dHVybmVkIGJ5IHRoZSB3aXRob3V0X3BvcnRpb24gaGVscGVyCkBAIC0xNTc1LDkgKzE1NTEsOSBA QCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwK IAkJewogCQkJLyoKIAkJCSAqIE1ha2UgYSBjb3B5IG9mIHRoZSBwcmUtVVBEQVRFIHJvdy4gVGhl biB3ZSdsbCBvdmVyd3JpdGUgdGhlCi0JCQkgKiByYW5nZSBjb2x1bW4gYmVsb3cuIENvbnZlcnQg b2xkdHVwbGUgdG8gdGhlIGJhc2UgdGFibGUncyBmb3JtYXQKLQkJCSAqIGlmIG5lY2Vzc2FyeS4g V2UgbmVlZCB0byBpbnNlcnQgdGVtcG9yYWwgbGVmdG92ZXJzIHRocm91Z2ggdGhlCi0JCQkgKiBy b290IHBhcnRpdGlvbiBzbyB0aGV5IGdldCByb3V0ZWQgY29ycmVjdGx5LgorCQkJICogcmFuZ2Ug Y29sdW1uIGJlbG93LiBPbmx5IHBhcnRpdGlvbmVkIHRhcmdldHMgbmVlZCBjb252ZXJzaW9uIHRv CisJCQkgKiB0aGUgcm9vdCB0YWJsZSdzIGZvcm1hdCwgYmVjYXVzZSB0aGV5IHJlaW5zZXJ0IHRo cm91Z2ggdGhlIHJvb3QKKwkJCSAqIHJlbGF0aW9uIGZvciB0dXBsZSByb3V0aW5nLgogCQkJICov CiAJCQlpZiAobWFwICE9IE5VTEwpCiAJCQl7CkBAIC0xNjAyLDggKzE1NzgsOCBAQCBFeGVjRm9y UG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJCWRpZElu aXQgPSB0cnVlOwogCQl9CiAKLQkJbGVmdG92ZXJTbG90LT50dHNfdmFsdWVzW2ZvclBvcnRpb25P Zi0+cmFuZ2VWYXItPnZhcmF0dG5vIC0gMV0gPSBsZWZ0b3ZlcjsKLQkJbGVmdG92ZXJTbG90LT50 dHNfaXNudWxsW2ZvclBvcnRpb25PZi0+cmFuZ2VWYXItPnZhcmF0dG5vIC0gMV0gPSBmYWxzZTsK KwkJbGVmdG92ZXJTbG90LT50dHNfdmFsdWVzW3Jlc3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25P Zi0+ZnBfcmFuZ2VBdHRubyAtIDFdID0gbGVmdG92ZXI7CisJCWxlZnRvdmVyU2xvdC0+dHRzX2lz bnVsbFtyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YtPmZwX3JhbmdlQXR0bm8gLSAxXSA9 IGZhbHNlOwogCQlFeGVjTWF0ZXJpYWxpemVTbG90KGxlZnRvdmVyU2xvdCk7CiAKIAkJLyoKQEAg LTQ3NzgsNiArNDc1NCwxOCBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJ CQkJCQkJCQkJCQkJCSBmYWxzZSwgdHJ1ZSk7CiAJCX0KIAorCQkvKgorCQkgKiBJZiB3ZSBkb24n dCBoYXZlIGEgRm9yUG9ydGlvbk9mU3RhdGUgeWV0LCB3ZSBtdXN0IGJlIGEgcGFydGl0aW9uIG9y CisJCSAqIGluaGVyaXRhbmNlIGNoaWxkIGJlaW5nIGhpdCBmb3IgdGhlIGZpcnN0IHRpbWUuIE1h a2UgYSBjb3B5IGZyb20KKwkJICogdGhlIHJvb3QsIHdpdGggb3VyIG93biBUdXBsZVRhYmxlU2xv dC4gV2UgZG8gdGhpcyBsYXppbHkgc28gdGhhdCB3ZQorCQkgKiBkb24ndCBwYXkgdGhlIHByaWNl IG9mIHVudXNlZCBwYXJ0aXRpb25zLgorCQkgKi8KKwkJaWYgKCgoKE1vZGlmeVRhYmxlICopIGNv bnRleHQubXRzdGF0ZS0+cHMucGxhbiktPmZvclBvcnRpb25PZikgJiYKKwkJCSFyZXN1bHRSZWxJ bmZvLT5yaV9mb3JQb3J0aW9uT2YpCisJCXsKKwkJCUV4ZWNJbml0Rm9yUG9ydGlvbk9mKGNvbnRl eHQubXRzdGF0ZSwgZXN0YXRlLCByZXN1bHRSZWxJbmZvKTsKKwkJfQorCiAJCS8qCiAJCSAqIElm IHJlc3VsdFJlbEluZm8tPnJpX3VzZXNGZHdEaXJlY3RNb2RpZnkgaXMgdHJ1ZSwgYWxsIHdlIG5l ZWQgdG8gZG8KIAkJICogaGVyZSBpcyBjb21wdXRlIHRoZSBSRVRVUk5JTkcgZXhwcmVzc2lvbnMu CkBAIC01ODYxLDMgKzU4NDksODAgQEAgRXhlY1JlU2Nhbk1vZGlmeVRhYmxlKE1vZGlmeVRhYmxl U3RhdGUgKm5vZGUpCiAJICovCiAJZWxvZyhFUlJPUiwgIkV4ZWNSZVNjYW5Nb2RpZnlUYWJsZSBp cyBub3QgaW1wbGVtZW50ZWQiKTsKIH0KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUV4ZWNJbml0Rm9yUG9y dGlvbk9mCisgKgorICoJCUluaXRpYWxpemVzIHJlc3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25P ZiBmb3IgY2hpbGQgdGFibGVzLgorICoKKyAqCQlQYXJ0aXRpb25zIHNoYXJlIHRoZSByb290IGxl ZnRvdmVyIHNsb3QsIHNpbmNlIHRoZXkgbXVzdCBpbnNlcnQgdmlhCisgKgkJdGhlIHJvb3QgcmVs YXRpb24gdG8gZ2V0IHR1cGxlIHJvdXRpbmcuIFBsYWluIGluaGVyaXRhbmNlIGNoaWxkcmVuCisg KgkJbXVzdCBrZWVwIHRoZWlyIG93biBsZWZ0b3ZlciBzbG90IGFuZCBpbnNlcnQgYmFjayBpbnRv IHRoZSBjaGlsZCwKKyAqCQlvciBlbHNlIGNoaWxkLW9ubHkgY29sdW1uIHZhbHVlcyBhbmQgcGh5 c2ljYWwgcGxhY2VtZW50IHdvdWxkIGJlCisgKgkJbG9zdC4KKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3Rh dGljIHZvaWQKK0V4ZWNJbml0Rm9yUG9ydGlvbk9mKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUs IEVTdGF0ZSAqZXN0YXRlLAorCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbykKK3sK KwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlGb3JQb3J0aW9uT2ZTdGF0ZSAqbGVhZlN0YXRlOwor CVJlc3VsdFJlbEluZm8gKnJvb3RSZWxJbmZvID0gbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm87 CisJRm9yUG9ydGlvbk9mU3RhdGUgKmZwb1N0YXRlOworCVR1cGxlQ29udmVyc2lvbk1hcCAqbWFw OworCisJaWYgKCFyb290UmVsSW5mbykKKwkJZWxvZyhFUlJPUiwgIm5vIHJvb3QgcmVsYXRpb24g YnV0IHJpX2ZvclBvcnRpb25PZiBpcyB1bmluaXRpYWxpemVkIik7CisKKwlmcG9TdGF0ZSA9IG10 c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2Y7CisKKwkvKiBUaGluZ3Mg YnVpbHQgaGVyZSBoYXZlIHRvIGxhc3QgZm9yIHRoZSBxdWVyeSBkdXJhdGlvbi4gKi8KKwlvbGRj eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19xdWVyeV9jeHQpOworCisJbGVh ZlN0YXRlID0gbWFrZU5vZGUoRm9yUG9ydGlvbk9mU3RhdGUpOworCisJbGVhZlN0YXRlLT5mcF9y YW5nZU5hbWUgPSBmcG9TdGF0ZS0+ZnBfcmFuZ2VOYW1lOworCWxlYWZTdGF0ZS0+ZnBfcmFuZ2VU eXBlID0gZnBvU3RhdGUtPmZwX3JhbmdlVHlwZTsKKwlsZWFmU3RhdGUtPmZwX3RhcmdldFJhbmdl ID0gZnBvU3RhdGUtPmZwX3RhcmdldFJhbmdlOworCW1hcCA9IEV4ZWNHZXRDaGlsZFRvUm9vdE1h cChyZXN1bHRSZWxJbmZvKTsKKworCS8qCisJICogZnBfcmFuZ2VBdHRubyBtdXN0IG1hdGNoIHRo ZSB0dXBsZSBsYXlvdXQgdXNlZCBmb3IgcmVhZGluZyB0aGUgb2xkCisJICogcmFuZ2UgdmFsdWUu ICBUaGUgcXVlcnkgdXNlcyB0aGUgdGFyZ2V0IHJlbGF0aW9uJ3MgYXR0bm8sIHNvIHRyYW5zbGF0 ZQorCSAqIGl0IHRvIHRoZSBjaGlsZCBhdHRubyB3aGVuIHRoZSBjaGlsZCBoYXMgYSBkaWZmZXJl bnQgY29sdW1uIGxheW91dC4KKwkgKi8KKwlpZiAobWFwKQorCQlsZWFmU3RhdGUtPmZwX3Jhbmdl QXR0bm8gPSBtYXAtPmF0dHJNYXAtPmF0dG51bXNbZnBvU3RhdGUtPmZwX3JhbmdlQXR0bm8gLSAx XTsKKwllbHNlCisJCWxlYWZTdGF0ZS0+ZnBfcmFuZ2VBdHRubyA9IGZwb1N0YXRlLT5mcF9yYW5n ZUF0dG5vOworCisJLyoKKwkgKiBGb3IgcGFydGl0aW9uZWQgdGFibGVzIHdlIG11c3QgcmVhZCB0 aGUgbGVmdG92ZXJzIHVzaW5nIHRoZSBjaGlsZAorCSAqIHRhYmxlJ3MgdHVwbGUgZGVzY3JpcHRv ciwgYnV0IHRoZW4gaW5zZXJ0IHRoZW0gaW50byB0aGUgcm9vdCB0YWJsZQorCSAqICh1c2luZyBp dHMgdHVwbGUgZGVzY3JpcHRvcikgc28gd2UgZ2V0IHR1cGxlIHJvdXRpbmcuCisJICoKKwkgKiBG b3IgdHJhZGl0aW9uYWwgdGFibGUgaW5oZXJpdGFuY2UsIHdlIHJlYWQgYW5kIGluc2VydCBkaXJl Y3RseSBpbnRvCisJICogdGhpcyByZXN1bHRSZWxJbmZvOyBubyB0dXBsZSByb3V0aW5nIHZpYSB0 aGUgcGFyZW50IGlzIHJlcXVpcmVkLgorCSAqLworCWlmIChyb290UmVsSW5mby0+cmlfUmVsYXRp b25EZXNjLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwl7 CisJCWxlYWZTdGF0ZS0+ZnBfTGVmdG92ZXIgPSBmcG9TdGF0ZS0+ZnBfTGVmdG92ZXI7CisJfQor CWVsc2UKKwl7CisJCWxlYWZTdGF0ZS0+ZnBfTGVmdG92ZXIgPQorCQkJRXhlY0luaXRFeHRyYVR1 cGxlU2xvdChtdHN0YXRlLT5wcy5zdGF0ZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihy ZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MpLAorCQkJCQkJCQkgICAmVFRTT3BzVmlydHVh bCk7CisJfQorCisJLyogRWFjaCBjaGlsZCByZWxhdGlvbiBuZWVkcyBhIHNsb3QgbWF0Y2hpbmcg aXRzIHR1cGxlIGRlc2NyaXB0b3IgKi8KKwlsZWFmU3RhdGUtPmZwX0V4aXN0aW5nID0KKwkJdGFi bGVfc2xvdF9jcmVhdGUocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJICAm bXRzdGF0ZS0+cHMuc3RhdGUtPmVzX3R1cGxlVGFibGUpOworCisJcmVzdWx0UmVsSW5mby0+cmlf Zm9yUG9ydGlvbk9mID0gbGVhZlN0YXRlOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4 dCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDEzMzU5MTgwZDI1Li41M2MxMzgzMTBkYiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTQ3Nyw3ICs0NzcsOCBAQCB0eXBlZGVmIHN0cnVjdCBG b3JQb3J0aW9uT2ZTdGF0ZQogCU5vZGVUYWcJCXR5cGU7CiAKIAljaGFyCSAgICpmcF9yYW5nZU5h bWU7CS8qIHRoZSBjb2x1bW4gbmFtZWQgaW4gRk9SIFBPUlRJT04gT0YgKi8KLQlPaWQJCQlmcF9y YW5nZVR5cGU7CS8qIHRoZSB0eXBlIG9mIHRoZSBGT1IgUE9SVElPTiBPRiBleHByZXNzaW9uICov CisJT2lkCQkJZnBfcmFuZ2VUeXBlOwkvKiB0aGUgYmFzZSB0eXBlIChub3QgZG9tYWluKSBvZiB0 aGUgRk9SCisJCQkJCQkJCSAqIFBPUlRJT04gT0YgZXhwcmVzc2lvbiAqLwogCWludAkJCWZwX3Jh bmdlQXR0bm87CS8qIHRoZSBhdHRubyBvZiB0aGUgcmFuZ2UgY29sdW1uICovCiAJRGF0dW0JCWZw X3RhcmdldFJhbmdlOyAvKiB0aGUgcmFuZ2UvbXVsdGlyYW5nZSBmcm9tIEZPUiBQT1JUSU9OIE9G ICovCiAJVHlwZUNhY2hlRW50cnkgKmZwX2xlZnRvdmVyc3R5cGNhY2hlOwkvKiB0eXBlIGNhY2hl IGVudHJ5IG9mIHRoZSByYW5nZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9w b3J0aW9uX29mLm91dAppbmRleCAwYzBhMjA1YzQ0Yi4uNThlZWUwMWZjZGIgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0CkBAIC0yMTUyLDQgKzIxNTIs MTYyIEBAIFNFTEVDVCAqIEZST00gZnBvX3J1bGUgT1JERVIgQlkgZjE7CiAoMiByb3dzKQogCiBE Uk9QIFRBQkxFIGZwb19ydWxlOworLS0gVVBEQVRFL0RFTEVURSBGT1IgUE9SVElPTiBPRiB3aXRo IHRhYmxlIGluaGVyaXRhbmNlCistLSBMZWZ0b3ZlciByb3dzIG11c3Qgc3RheSBpbiB0aGUgY2hp bGQgdGFibGUsIHByZXNlcnZpbmcgY2hpbGQtc3BlY2lmaWMgY29sdW1ucy4KK0NSRUFURSBUQUJM RSBmcG9faW5oX3BhcmVudCAoCisgIGlkIGludDRyYW5nZSwKKyAgdmFsaWRfYXQgZGF0ZXJhbmdl LAorICBuYW1lIHRleHQKKyk7CitDUkVBVEUgVEFCTEUgZnBvX2luaF9jaGlsZCAoCisgIGRlc2Ny aXB0aW9uIHRleHQKKykgSU5IRVJJVFMgKGZwb19pbmhfcGFyZW50KTsKKy0tIFVwZGF0ZSB0YXJn ZXRzIHRoZSBwYXJlbnQ7IHRoZSBtYXRjaGluZyByb3cgbGl2ZXMgaW4gdGhlIGNoaWxkLgorSU5T RVJUIElOVE8gZnBvX2luaF9jaGlsZCAoaWQsIHZhbGlkX2F0LCBuYW1lLCBkZXNjcmlwdGlvbikg VkFMVUVTCisgICgnWzEsMiknLCAnWzIwMTgtMDEtMDEsMjAxOS0wMS0wMSknLCAnb25lJywgJ2lu aXRpYWwnKTsKK1VQREFURSBmcG9faW5oX3BhcmVudCBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBG Uk9NICcyMDE4LTA0LTAxJyBUTyAnMjAxOC0xMC0wMScKKyAgU0VUIG5hbWUgPSAnb25lXjEnOwor LS0gQWxsIHRocmVlIHJvd3Mgc2hvdWxkIGJlIGluIHRoZSBjaGlsZCwgd2l0aCBkZXNjcmlwdGlv biBwcmVzZXJ2ZWQuCitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gZnBvX2luaF9w YXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CisgICB0YWJsZW9pZCAgICB8ICBpZCAgIHwgICAgICAg IHZhbGlkX2F0ICAgICAgICAgfCBuYW1lICAKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorIGZwb19pbmhfY2hpbGQgfCBbMSwyKSB8IFsy MDE4LTAxLTAxLDIwMTgtMDQtMDEpIHwgb25lCisgZnBvX2luaF9jaGlsZCB8IFsxLDIpIHwgWzIw MTgtMDQtMDEsMjAxOC0xMC0wMSkgfCBvbmVeMQorIGZwb19pbmhfY2hpbGQgfCBbMSwyKSB8IFsy MDE4LTEwLTAxLDIwMTktMDEtMDEpIHwgb25lCisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZw b19pbmhfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CisgIGlkICAgfCAgICAgICAgdmFsaWRfYXQg ICAgICAgICB8IG5hbWUgIHwgZGVzY3JpcHRpb24gCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgWzEsMikgfCBbMjAxOC0wMS0wMSwyMDE4 LTA0LTAxKSB8IG9uZSAgIHwgaW5pdGlhbAorIFsxLDIpIHwgWzIwMTgtMDQtMDEsMjAxOC0xMC0w MSkgfCBvbmVeMSB8IGluaXRpYWwKKyBbMSwyKSB8IFsyMDE4LTEwLTAxLDIwMTktMDEtMDEpIHwg b25lICAgfCBpbml0aWFsCisoMyByb3dzKQorCistLSBObyByb3dzIHNob3VsZCBoYXZlIGxlYWtl ZCBpbnRvIHRoZSBwYXJlbnQuCitTRUxFQ1QgKiBGUk9NIE9OTFkgZnBvX2luaF9wYXJlbnQgT1JE RVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2YWxpZF9hdCB8IG5hbWUgCistLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisoMCByb3dzKQorCistLSBTYW1lIHRlc3QgZm9yIERFTEVURSBpbnN0ZWFkIG9mIFVQ REFURToKK1RSVU5DQVRFIGZwb19pbmhfY2hpbGQsIGZwb19pbmhfcGFyZW50OworSU5TRVJUIElO VE8gZnBvX2luaF9jaGlsZCAoaWQsIHZhbGlkX2F0LCBuYW1lLCBkZXNjcmlwdGlvbikgVkFMVUVT CisgICgnWzEsMiknLCAnWzIwMTgtMDEtMDEsMjAxOS0wMS0wMSknLCAnb25lJywgJ2luaXRpYWwn KTsKK0RFTEVURSBGUk9NIGZwb19pbmhfcGFyZW50IEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0IEZS T00gJzIwMTgtMDQtMDEnIFRPICcyMDE4LTEwLTAxJzsKKy0tIEJvdGggcm93cyBzaG91bGQgYmUg aW4gdGhlIGNoaWxkLCB3aXRoIGRlc2NyaXB0aW9uIHByZXNlcnZlZC4KK1NFTEVDVCB0YWJsZW9p ZDo6cmVnY2xhc3MsICogRlJPTSBmcG9faW5oX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKKyAg IHRhYmxlb2lkICAgIHwgIGlkICAgfCAgICAgICAgdmFsaWRfYXQgICAgICAgICB8IG5hbWUgCist LS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLQor IGZwb19pbmhfY2hpbGQgfCBbMSwyKSB8IFsyMDE4LTAxLTAxLDIwMTgtMDQtMDEpIHwgb25lCisg ZnBvX2luaF9jaGlsZCB8IFsxLDIpIHwgWzIwMTgtMTAtMDEsMjAxOS0wMS0wMSkgfCBvbmUKKygy IHJvd3MpCisKK1NFTEVDVCAqIEZST00gZnBvX2luaF9jaGlsZCBPUkRFUiBCWSB2YWxpZF9hdDsK KyAgaWQgICB8ICAgICAgICB2YWxpZF9hdCAgICAgICAgIHwgbmFtZSB8IGRlc2NyaXB0aW9uIAor LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tCisg WzEsMikgfCBbMjAxOC0wMS0wMSwyMDE4LTA0LTAxKSB8IG9uZSAgfCBpbml0aWFsCisgWzEsMikg fCBbMjAxOC0xMC0wMSwyMDE5LTAxLTAxKSB8IG9uZSAgfCBpbml0aWFsCisoMiByb3dzKQorCist LSBObyByb3dzIHNob3VsZCBoYXZlIGxlYWtlZCBpbnRvIHRoZSBwYXJlbnQuCitTRUxFQ1QgKiBG Uk9NIE9OTFkgZnBvX2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2YWxpZF9h dCB8IG5hbWUgCistLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitEUk9QIFRBQkxF IGZwb19pbmhfcGFyZW50IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IGZwb19pbmhfY2hpbGQKKy0tIFVQREFURSBGT1IgUE9SVElPTiBPRiB3aXRoIG11bHRpcGxlIGlu aGVyaXRhbmNlCistLSBMZWZ0b3ZlciByb3dzIG11c3Qgc3RheSBpbiB0aGUgY2hpbGQgdGFibGUs IGV2ZW4gaWYgdGhlIHJhbmdlIGNvbHVtbidzCistLSBhdHRudW0gZGlmZmVycyBiZXR3ZWVuIHRo ZSB0YXJnZXQgcGFyZW50IGFuZCBjaGlsZC4KK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9wYXJlbnQg KAorICBpZCBpbnQsCisgIHZhbGlkX2F0IGRhdGVyYW5nZSwKKyAgbmFtZSB0ZXh0CispOworQ1JF QVRFIFRBQkxFIG90aGVyX3BhcmVudCAoCisgIHByZWZpeCB0ZXh0LAorICBub3RlIHRleHQKKyk7 CitDUkVBVEUgVEFCTEUgbWlfY2hpbGQgKCkgSU5IRVJJVFMgKG90aGVyX3BhcmVudCwgdGVtcG9y YWxfcGFyZW50KTsKKy0tIGF0dG51bSBvZiB0aGUgcmFuZ2UgY29sdW1uIGlzIGRpZmZlcmVudCBp biB0ZW1wb3JhbF9wYXJlbnQgYW5kIG1pX2NoaWxkCitTRUxFQ1QgYXR0bnVtLCBhdHRuYW1lCisg IEZST00gcGdfYXR0cmlidXRlCisgIFdIRVJFIGF0dHJlbGlkID0gJ3RlbXBvcmFsX3BhcmVudCc6 OnJlZ2NsYXNzCisgICAgQU5EIGF0dG51bSA+IDAgQU5EIE5PVCBhdHRpc2Ryb3BwZWQKKyAgT1JE RVIgQlkgYXR0bnVtOworIGF0dG51bSB8IGF0dG5hbWUgIAorLS0tLS0tLS0rLS0tLS0tLS0tLQor ICAgICAgMSB8IGlkCisgICAgICAyIHwgdmFsaWRfYXQKKyAgICAgIDMgfCBuYW1lCisoMyByb3dz KQorCitTRUxFQ1QgYXR0bnVtLCBhdHRuYW1lCisgIEZST00gcGdfYXR0cmlidXRlCisgIFdIRVJF IGF0dHJlbGlkID0gJ21pX2NoaWxkJzo6cmVnY2xhc3MKKyAgICBBTkQgYXR0bnVtID4gMCBBTkQg Tk9UIGF0dGlzZHJvcHBlZAorICBPUkRFUiBCWSBhdHRudW07CisgYXR0bnVtIHwgYXR0bmFtZSAg CistLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAxIHwgcHJlZml4CisgICAgICAyIHwgbm90ZQor ICAgICAgMyB8IGlkCisgICAgICA0IHwgdmFsaWRfYXQKKyAgICAgIDUgfCBuYW1lCisoNSByb3dz KQorCitJTlNFUlQgSU5UTyBtaV9jaGlsZCAocHJlZml4LCBub3RlLCBpZCwgdmFsaWRfYXQsIG5h bWUpIFZBTFVFUworICAoJ3BmeCcsICdtZW1vJywgMSwgZGF0ZXJhbmdlKCcyMDAwLTAxLTAxJywg JzIwMTAtMDEtMDEnKSwgJ29sZCcpOworVVBEQVRFIHRlbXBvcmFsX3BhcmVudCBGT1IgUE9SVElP TiBPRiB2YWxpZF9hdCBGUk9NICcyMDAxLTAxLTAxJyBUTyAnMjAwMi0wMS0wMScKKyAgU0VUIG5h bWUgPSAnbmV3JworICBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAq IEZST00gdGVtcG9yYWxfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworIHRhYmxlb2lkIHwgaWQg fCAgICAgICAgdmFsaWRfYXQgICAgICAgICB8IG5hbWUgCistLS0tLS0tLS0tKy0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0KKyBtaV9jaGlsZCB8ICAxIHwgWzIwMDAtMDEtMDEs MjAwMS0wMS0wMSkgfCBvbGQKKyBtaV9jaGlsZCB8ICAxIHwgWzIwMDEtMDEtMDEsMjAwMi0wMS0w MSkgfCBuZXcKKyBtaV9jaGlsZCB8ICAxIHwgWzIwMDItMDEtMDEsMjAxMC0wMS0wMSkgfCBvbGQK KygzIHJvd3MpCisKK1NFTEVDVCAqIEZST00gbWlfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7Cisg cHJlZml4IHwgbm90ZSB8IGlkIHwgICAgICAgIHZhbGlkX2F0ICAgICAgICAgfCBuYW1lIAorLS0t LS0tLS0rLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0KKyBwZngg ICAgfCBtZW1vIHwgIDEgfCBbMjAwMC0wMS0wMSwyMDAxLTAxLTAxKSB8IG9sZAorIHBmeCAgICB8 IG1lbW8gfCAgMSB8IFsyMDAxLTAxLTAxLDIwMDItMDEtMDEpIHwgbmV3CisgcGZ4ICAgIHwgbWVt byB8ICAxIHwgWzIwMDItMDEtMDEsMjAxMC0wMS0wMSkgfCBvbGQKKygzIHJvd3MpCisKK1NFTEVD VCAqIEZST00gT05MWSB0ZW1wb3JhbF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2 YWxpZF9hdCB8IG5hbWUgCistLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitUUlVO Q0FURSBtaV9jaGlsZCwgb3RoZXJfcGFyZW50LCB0ZW1wb3JhbF9wYXJlbnQ7CitJTlNFUlQgSU5U TyBtaV9jaGlsZCAocHJlZml4LCBub3RlLCBpZCwgdmFsaWRfYXQsIG5hbWUpIFZBTFVFUworICAo J3BmeCcsICdtZW1vJywgMSwgZGF0ZXJhbmdlKCcyMDAwLTAxLTAxJywgJzIwMTAtMDEtMDEnKSwg J29sZCcpOworREVMRVRFIEZST00gdGVtcG9yYWxfcGFyZW50IEZPUiBQT1JUSU9OIE9GIHZhbGlk X2F0IEZST00gJzIwMDEtMDEtMDEnIFRPICcyMDAyLTAxLTAxJworICBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gdGVtcG9yYWxfcGFyZW50IE9SREVSIEJZ IHZhbGlkX2F0OworIHRhYmxlb2lkIHwgaWQgfCAgICAgICAgdmFsaWRfYXQgICAgICAgICB8IG5h bWUgCistLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0KKyBt aV9jaGlsZCB8ICAxIHwgWzIwMDAtMDEtMDEsMjAwMS0wMS0wMSkgfCBvbGQKKyBtaV9jaGlsZCB8 ICAxIHwgWzIwMDItMDEtMDEsMjAxMC0wMS0wMSkgfCBvbGQKKygyIHJvd3MpCisKK1NFTEVDVCAq IEZST00gbWlfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CisgcHJlZml4IHwgbm90ZSB8IGlkIHwg ICAgICAgIHZhbGlkX2F0ICAgICAgICAgfCBuYW1lIAorLS0tLS0tLS0rLS0tLS0tKy0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0KKyBwZnggICAgfCBtZW1vIHwgIDEgfCBbMjAw MC0wMS0wMSwyMDAxLTAxLTAxKSB8IG9sZAorIHBmeCAgICB8IG1lbW8gfCAgMSB8IFsyMDAyLTAx LTAxLDIwMTAtMDEtMDEpIHwgb2xkCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIE9OTFkgdGVt cG9yYWxfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworIGlkIHwgdmFsaWRfYXQgfCBuYW1lIAor LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworRFJPUCBUQUJMRSB0ZW1wb3JhbF9w YXJlbnQgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgbWlfY2hpbGQK IFJFU0VUIGRhdGVzdHlsZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9w b3J0aW9uX29mLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbApp bmRleCBmZDc5YTliNzhlNy4uMDc1YzkwNTE0NDUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3Jf cG9ydGlvbl9vZi5zcWwKQEAgLTEzOTgsNCArMTM5OCw4OSBAQCBTRUxFQ1QgKiBGUk9NIGZwb19y dWxlIE9SREVSIEJZIGYxOwogCiBEUk9QIFRBQkxFIGZwb19ydWxlOwogCistLSBVUERBVEUvREVM RVRFIEZPUiBQT1JUSU9OIE9GIHdpdGggdGFibGUgaW5oZXJpdGFuY2UKKy0tIExlZnRvdmVyIHJv d3MgbXVzdCBzdGF5IGluIHRoZSBjaGlsZCB0YWJsZSwgcHJlc2VydmluZyBjaGlsZC1zcGVjaWZp YyBjb2x1bW5zLgorQ1JFQVRFIFRBQkxFIGZwb19pbmhfcGFyZW50ICgKKyAgaWQgaW50NHJhbmdl LAorICB2YWxpZF9hdCBkYXRlcmFuZ2UsCisgIG5hbWUgdGV4dAorKTsKK0NSRUFURSBUQUJMRSBm cG9faW5oX2NoaWxkICgKKyAgZGVzY3JpcHRpb24gdGV4dAorKSBJTkhFUklUUyAoZnBvX2luaF9w YXJlbnQpOworCistLSBVcGRhdGUgdGFyZ2V0cyB0aGUgcGFyZW50OyB0aGUgbWF0Y2hpbmcgcm93 IGxpdmVzIGluIHRoZSBjaGlsZC4KK0lOU0VSVCBJTlRPIGZwb19pbmhfY2hpbGQgKGlkLCB2YWxp ZF9hdCwgbmFtZSwgZGVzY3JpcHRpb24pIFZBTFVFUworICAoJ1sxLDIpJywgJ1syMDE4LTAxLTAx LDIwMTktMDEtMDEpJywgJ29uZScsICdpbml0aWFsJyk7CitVUERBVEUgZnBvX2luaF9wYXJlbnQg Rk9SIFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAnMjAxOC0wNC0wMScgVE8gJzIwMTgtMTAtMDEn CisgIFNFVCBuYW1lID0gJ29uZV4xJzsKKy0tIEFsbCB0aHJlZSByb3dzIHNob3VsZCBiZSBpbiB0 aGUgY2hpbGQsIHdpdGggZGVzY3JpcHRpb24gcHJlc2VydmVkLgorU0VMRUNUIHRhYmxlb2lkOjpy ZWdjbGFzcywgKiBGUk9NIGZwb19pbmhfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworU0VMRUNU ICogRlJPTSBmcG9faW5oX2NoaWxkIE9SREVSIEJZIHZhbGlkX2F0OworLS0gTm8gcm93cyBzaG91 bGQgaGF2ZSBsZWFrZWQgaW50byB0aGUgcGFyZW50LgorU0VMRUNUICogRlJPTSBPTkxZIGZwb19p bmhfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworCistLSBTYW1lIHRlc3QgZm9yIERFTEVURSBp bnN0ZWFkIG9mIFVQREFURToKK1RSVU5DQVRFIGZwb19pbmhfY2hpbGQsIGZwb19pbmhfcGFyZW50 OworSU5TRVJUIElOVE8gZnBvX2luaF9jaGlsZCAoaWQsIHZhbGlkX2F0LCBuYW1lLCBkZXNjcmlw dGlvbikgVkFMVUVTCisgICgnWzEsMiknLCAnWzIwMTgtMDEtMDEsMjAxOS0wMS0wMSknLCAnb25l JywgJ2luaXRpYWwnKTsKK0RFTEVURSBGUk9NIGZwb19pbmhfcGFyZW50IEZPUiBQT1JUSU9OIE9G IHZhbGlkX2F0IEZST00gJzIwMTgtMDQtMDEnIFRPICcyMDE4LTEwLTAxJzsKKy0tIEJvdGggcm93 cyBzaG91bGQgYmUgaW4gdGhlIGNoaWxkLCB3aXRoIGRlc2NyaXB0aW9uIHByZXNlcnZlZC4KK1NF TEVDVCB0YWJsZW9pZDo6cmVnY2xhc3MsICogRlJPTSBmcG9faW5oX3BhcmVudCBPUkRFUiBCWSB2 YWxpZF9hdDsKK1NFTEVDVCAqIEZST00gZnBvX2luaF9jaGlsZCBPUkRFUiBCWSB2YWxpZF9hdDsK Ky0tIE5vIHJvd3Mgc2hvdWxkIGhhdmUgbGVha2VkIGludG8gdGhlIHBhcmVudC4KK1NFTEVDVCAq IEZST00gT05MWSBmcG9faW5oX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKKworRFJPUCBUQUJM RSBmcG9faW5oX3BhcmVudCBDQVNDQURFOworCistLSBVUERBVEUgRk9SIFBPUlRJT04gT0Ygd2l0 aCBtdWx0aXBsZSBpbmhlcml0YW5jZQorLS0gTGVmdG92ZXIgcm93cyBtdXN0IHN0YXkgaW4gdGhl IGNoaWxkIHRhYmxlLCBldmVuIGlmIHRoZSByYW5nZSBjb2x1bW4ncworLS0gYXR0bnVtIGRpZmZl cnMgYmV0d2VlbiB0aGUgdGFyZ2V0IHBhcmVudCBhbmQgY2hpbGQuCitDUkVBVEUgVEFCTEUgdGVt cG9yYWxfcGFyZW50ICgKKyAgaWQgaW50LAorICB2YWxpZF9hdCBkYXRlcmFuZ2UsCisgIG5hbWUg dGV4dAorKTsKK0NSRUFURSBUQUJMRSBvdGhlcl9wYXJlbnQgKAorICBwcmVmaXggdGV4dCwKKyAg bm90ZSB0ZXh0CispOworQ1JFQVRFIFRBQkxFIG1pX2NoaWxkICgpIElOSEVSSVRTIChvdGhlcl9w YXJlbnQsIHRlbXBvcmFsX3BhcmVudCk7CisKKy0tIGF0dG51bSBvZiB0aGUgcmFuZ2UgY29sdW1u IGlzIGRpZmZlcmVudCBpbiB0ZW1wb3JhbF9wYXJlbnQgYW5kIG1pX2NoaWxkCitTRUxFQ1QgYXR0 bnVtLCBhdHRuYW1lCisgIEZST00gcGdfYXR0cmlidXRlCisgIFdIRVJFIGF0dHJlbGlkID0gJ3Rl bXBvcmFsX3BhcmVudCc6OnJlZ2NsYXNzCisgICAgQU5EIGF0dG51bSA+IDAgQU5EIE5PVCBhdHRp c2Ryb3BwZWQKKyAgT1JERVIgQlkgYXR0bnVtOworU0VMRUNUIGF0dG51bSwgYXR0bmFtZQorICBG Uk9NIHBnX2F0dHJpYnV0ZQorICBXSEVSRSBhdHRyZWxpZCA9ICdtaV9jaGlsZCc6OnJlZ2NsYXNz CisgICAgQU5EIGF0dG51bSA+IDAgQU5EIE5PVCBhdHRpc2Ryb3BwZWQKKyAgT1JERVIgQlkgYXR0 bnVtOworCitJTlNFUlQgSU5UTyBtaV9jaGlsZCAocHJlZml4LCBub3RlLCBpZCwgdmFsaWRfYXQs IG5hbWUpIFZBTFVFUworICAoJ3BmeCcsICdtZW1vJywgMSwgZGF0ZXJhbmdlKCcyMDAwLTAxLTAx JywgJzIwMTAtMDEtMDEnKSwgJ29sZCcpOworCitVUERBVEUgdGVtcG9yYWxfcGFyZW50IEZPUiBQ T1JUSU9OIE9GIHZhbGlkX2F0IEZST00gJzIwMDEtMDEtMDEnIFRPICcyMDAyLTAxLTAxJworICBT RVQgbmFtZSA9ICduZXcnCisgIFdIRVJFIGlkID0gMTsKKworU0VMRUNUIHRhYmxlb2lkOjpyZWdj bGFzcywgKiBGUk9NIHRlbXBvcmFsX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKK1NFTEVDVCAq IEZST00gbWlfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CitTRUxFQ1QgKiBGUk9NIE9OTFkgdGVt cG9yYWxfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworCitUUlVOQ0FURSBtaV9jaGlsZCwgb3Ro ZXJfcGFyZW50LCB0ZW1wb3JhbF9wYXJlbnQ7CitJTlNFUlQgSU5UTyBtaV9jaGlsZCAocHJlZml4 LCBub3RlLCBpZCwgdmFsaWRfYXQsIG5hbWUpIFZBTFVFUworICAoJ3BmeCcsICdtZW1vJywgMSwg ZGF0ZXJhbmdlKCcyMDAwLTAxLTAxJywgJzIwMTAtMDEtMDEnKSwgJ29sZCcpOworCitERUxFVEUg RlJPTSB0ZW1wb3JhbF9wYXJlbnQgRk9SIFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAnMjAwMS0w MS0wMScgVE8gJzIwMDItMDEtMDEnCisgIFdIRVJFIGlkID0gMTsKKworU0VMRUNUIHRhYmxlb2lk OjpyZWdjbGFzcywgKiBGUk9NIHRlbXBvcmFsX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKK1NF TEVDVCAqIEZST00gbWlfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CitTRUxFQ1QgKiBGUk9NIE9O TFkgdGVtcG9yYWxfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworCitEUk9QIFRBQkxFIHRlbXBv cmFsX3BhcmVudCBDQVNDQURFOworCiBSRVNFVCBkYXRlc3R5bGU7Ci0tIAoyLjQ3LjMKCg== --00000000000070dcf50652c28932--