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 1vw6ba-0032Uq-0x for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 22:46:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vw6bY-007R0A-3B for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 22:46:41 +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 1vw6bY-007QzZ-0Z for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 22:46:40 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vw6bU-00000001dlU-0yks for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 22:46:39 +0000 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-65c0d2f5fe1so5262201a12.3 for ; Fri, 27 Feb 2026 14:46:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772232395; cv=none; d=google.com; s=arc-20240605; b=ePT1yLQBlBYqI5cG7JpIZg8DRhJSOT6fld8fevjq2nn9OCZOe6tXGzRGH9awAIFU4m tWEB6NIruVDBP3TZo/HGwzSkcWbl3Y3A2qBiVM9zI0hE0gJAyHO9cEgJ572tgwOy+8zk IkxDFbSPGeIU7qpQ5y5Yqaf54SfHD8isQ0qboD5S/heO08zqr5V0B6DPCTb9AGBtnEjU iMCCTbfeufPXNzV+0AObe/pAJ9ngRS9vg8EWzOBFDYJHN8RfIkHjslWUd9cpmTj1AoBF aTi5MmzeuTzvhOXXnYwjynsCaNhFHgnyWGC7tF91vWKkriI6aIwJdmH2NalAwai+5L87 ZJZA== 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=PssJEieyHdlSZ8x6qEgJdzKKBpq7IA7IUQC7DXV+82s=; fh=3de+TZC8bmqqku6yqfG0iWsQOg2pomfk1pGGEGuOFIk=; b=eybMaf1Brxb4JKzyBQvvB18kyK1mFJZE7rkA49+OgQvRVYNCsNd2eOkfRKTAfRlhoT AMsyUyp/tVDZhFQJkUCxr/oBf/R3II6kEzBeA+RaAJstYsD8aJxQhER4+1+wL5gL4lV5 eEaaDGZ37oa/IaUK1QsX/TnZXfsOdxHbwnBFsFk1pUp6xjmcAup/KhRRQ+9KJwOaO+SE I9b/LouwRvKspLasdtvmagNKa/M72d58ce5PJDv/dbg1VyIuqKJcGGQMRDiJiZoYf6Bi jRkc2JnCjHbKTz3FJn9NkH6tvM3z7zUDafQiY2jP0ZzqOHuqY0lOZN/JpRXoUH3Lw2Q8 7ibQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772232395; x=1772837195; 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=PssJEieyHdlSZ8x6qEgJdzKKBpq7IA7IUQC7DXV+82s=; b=HMN0kHG4Bz4mIrhBENGqi0cUeZxFQ7a7aOOLFAA17YDpbWVqeSgQgunHn0r8wwD554 EMpdgX0+V8AzvmBT+EzPk1CuujUxVMBsOgsOt0H9OD3aeDoD4izuriGQPQooDQpHJhdQ sZPpyYDKGMVxW4ffx91+0T/7IDjcl/G476EnP/zzBpdK4ctGtK/B2SNL2cnz5ggED/nD ug3bn8e75LON6PI3+wdtiBPiv/yOHXOzgMooQ0niDVxniX1+FF5LnV0NYfScGsVvaGmS PvlRduJ8Lr27XGJnuTYkOJLlbpNQF3pLOzvThmTtDvXz956MRLsI7Qc7v4wDWm+yMyE6 /sKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772232395; x=1772837195; 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=PssJEieyHdlSZ8x6qEgJdzKKBpq7IA7IUQC7DXV+82s=; b=qkhOk8x/tHOJ44ezFZdTS5Ly7dyJTwesomdjghp1wQvTZARcKX6W1DO26yxRR0DB0K SHeRQ2TYbHYuBcdBd1/5ES4wD4ZhwSgtN5F0MwsCIsvFTpncaz6jxnmKsbg0XZq9n8hv xcdc33WBEXWWJfcEU/QU+sD+PV9brDtvlZxznrFYYAZ+kF6c0AQRQx0BspsPgXVuKHgi +3oYFvIky3l+0DehXpH/HdRrOTQ8mEnjqWE0d4n1tiFoIeYhKtzwl/Jm6MDDPJCs09q+ ooDbozjiJ+A/5pTU6odNXDGicr0Pmpirav1vdkFH5YHnkADQXthM5q+op5AQoa69xz68 4uug== X-Forwarded-Encrypted: i=1; AJvYcCUqtX2SwCiy94kiv0EK4v0eZfU69loCgzI1M1MaX3MsKgOVHlD8UKxwjM9egtlBLh5wGj5w95N1YcF5J+yk@lists.postgresql.org X-Gm-Message-State: AOJu0YyrXLe2Zh3eqguklTD3QPq3/I7H2Qub/XRs4HtmnPeGz1eRttrA T7IfXhjKvSwl1+XeXi8XKM0kao30uvkcZiL4067QqCY+Qg5l7ZBG1q2HrkAPdIYlPKnYXTFVZOp QR/03nStD+1pQuJ7T5zNlXsSdjyIkxYLP1g== X-Gm-Gg: ATEYQzziktyn5EO09FjXr7Zj0IyJOgkX5gfCkkcRv1XWbNC7RidgMjJRJL5+GHM9vHk 2Q5BhJw5bn4O7M9KZshyDFlxn7QiWdeBQhhQwyJA/x3Qc3uoiKNogeXtQwHBm1MG1NhZkOaIdoX qltEk4Vbr+J56383R7YV7DZRn9iHNMPmHRKs2Zen2XBE7M9ILH62dyLagv3gWj3oiN+J2vt8Jox Rdl/kEqpLmJH1CisWfq1J2IymybyT/L7pe0LcOiR5oLiOiJ4O1YYtOdtDpFpDOSUictYQC4Q3jT 3PJKqW26oUrgcm+LDySgfdPXTaP/ZK1Jsccel6c= X-Received: by 2002:a17:907:3f1c:b0:b8f:9525:1099 with SMTP id a640c23a62f3a-b937ffb6f41mr195262966b.35.1772232395145; Fri, 27 Feb 2026 14:46:35 -0800 (PST) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Fri, 27 Feb 2026 17:46:21 -0500 X-Gm-Features: AaiRm50oLQhxPeG8wDWEla7TvF6rMJgCiUgbv9BC-LvwRK2rT0Ck2NJyaj0hayg Message-ID: Subject: Re: pg_plan_advice To: Alexandra Wang Cc: Richard Guo , Lukas Fittl , Tom Lane , Jacob Champion , Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000005f9cf4064bd60212" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005f9cf4064bd60212 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 26, 2026 at 8:55=E2=80=AFAM Robert Haas = wrote: > Thanks, Alex, for the review. Here's v18. In addition to fixing the problems pointed out by Alex, there are a couple of significant changes in this version. First, I realized that it might be confusing to have the collector interface as part of pg_plan_advice, because for most of what pg_plan_advice does, you didn't need the extension, but for that part, you did. So, I broke that part out into its own extension, now called pg_collect_advice, and put it into a separate patch. I think this is conceptually cleaner: pg_plan_advice is just the core functionality of generating and enforcing advice, and anything else is a separate extension that logically sits on top of that core functionality. This also has the advantage that you can decide to make the core functionality available without any chance of somebody getting access to the collector, if desired. Second, I also added a third contrib module called pg_stash_advice. This uses the same hook that I previously added for test_plan_advice, but unlike that module, this one's not just a test. It lets you set up an "advice stash" which is basically a query_id->advice_string hash table. If you then set pg_stash_advice.stash_name to the name of your advice stash, it will do a lookup into that hash table every time a query is planned and, if the query ID is found, it will do the planning with the corresponding advice string. What I think is particularly cool about this is that it shows that you can really use that hook to apply advice on the fly in any way you want. I suspect that query ID matching will be suitable for a lot of use cases, but you could have a similar module that matches on query text or does anything else that you want as long as an advice string pops out at the end. It shows that the core pg_plan_advice infrastructure is pluggable. So this is both something that I think a lot of people will find useful all on its own, and also a design pattern that people can copy and adapt. Finally, I did a lot of minor cleanups. I originally planned to try to include a full list in this email, but as the number of fixes got larger, I eventually realized that would get incredibly tedious, even for me. An awful lot of what got fixed was just straightforward typos, but there were also some comments where the wording was garbled and didn't really make sense, or where I thought the comment should be longer or shorter than it actually was, or where I used the wrong data type in the code but in a way that didn't actually break anything. There are a few fixes to the code, but they're all very minor stuff that I'm not sure has any real-world consequences, although it might so it's good to fix it, but the overwhelming bulk of it is cosmetic. Thanks, --=20 Robert Haas EDB: http://www.enterprisedb.com --0000000000005f9cf4064bd60212 Content-Type: application/octet-stream; name="v18-0002-Replace-get_relation_info_hook-with-build_simple.patch" Content-Disposition: attachment; filename="v18-0002-Replace-get_relation_info_hook-with-build_simple.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5hcy8n1 RnJvbSAyMzQ1YzdjNjg3Y2ZiNzk5ODI4ZGM2NTY2MTc0ZGM3Mzc4NWQwNzRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMTAgRmViIDIwMjYgMDg6MTM6NDYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOCAy LzddIFJlcGxhY2UgZ2V0X3JlbGF0aW9uX2luZm9faG9vayB3aXRoCiBidWlsZF9zaW1wbGVfcmVs X2hvb2suCgpGb3IgYSBsb25nIHRpbWUsIFBvc3RncmVTUUwgaGFzIGhhZCBhIGdldF9yZWxhdGlv bl9pbmZvX2hvb2sgd2hpY2gKcGx1Z2lucyBjYW4gdXNlIHRvIGVkaXRvcmlhbGl6ZSBvbiB0aGUg aW5mb3JtYXRpb24gdGhhdApnZXRfcmVsYXRpb25faW5mbyBvYnRhaW5zIGZyb20gdGhlIGNhdGFs b2dzLiBIb3dldmVyLCB0aGlzIGhvb2sgaXMKb25seSBjYWxsZWQgZm9yIGJhc2VyZWxzIG9mIHR5 cGUgUlRFX1JFTEFUSU9OLCBhbmQgdGhlcmUgaXMKcG90ZW50aWFsIHV0aWxpdHkgaW4gYSBzaW1p bGFyIGNhbGwgYmFjayBmb3Igb3RoZXIgdHlwZXMgb2YKUlRFcy4gVGhpcyBtaWdodCBoYXZlIGhh ZCB1dGlsaXR5IGV2ZW4gYmVmb3JlIGNvbW1pdAo0MDIwYjM3MGYyMTQzMTViOGMxMDQzMDMwMTg5 OGFjMjE2NTgxNDNmIGFkZGVkIHBnc19tYXNrIHRvClJlbE9wdEluZm8sIGJ1dCBpdCBjZXJ0YWlu bHkgaGFzIHV0aWxpdHkgbm93LgoKU28sIG1vdmUgdGhlIGNhbGxiYWNrIHVwIG9uZSBsZXZlbCwg ZGVsZXRpbmcgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBhbmQKYWRkaW5nIGJ1aWxkX3NpbXBsZV9y ZWxfaG9vayBpbnN0ZWFkLiBUaGUgbmV3IGNhbGxiYWNrIGlzIGNhbGxlZCBqdXN0CnNsaWdodGx5 IGxhdGVyIHRoYW4gYmVmb3JlIGFuZCB3aXRoIHNsaWdodGx5IGRpZmZlcmVudCBhcmd1bWVudHMs IGJ1dCBpdApzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBhZGp1c3QgZXhpc3Rp bmcgY29kZSB0aGF0IGN1cnJlbnR5eQp1c2VzIGdldF9yZWxhdGlvbl9pbmZvX2hvb2s6IHRoZSB2 YWx1ZXMgcHJldmlvdXNseSBhdmFpbGFibGUgYXMKcmVsYXRpb25PYmplY3RJZCBhbmQgaW5ocGFy ZW50IGFyZSBub3cgYXZhaWxhYmxlIHZpYSBydGUtPnJlbGlkIGFuZApydGUtPmluaCwgYW5kIGNh bGxzIHdoZXJlIHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04gY2FuIGJlIGlnbm9yZWQgaWYK ZGVzaXJlZC4KClJldmlld2VkLWJ5OiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3Nz QGdtYWlsLmNvbT4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgfCAx NCAtLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIHwg MTUgKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAg fCAgNiArKysrKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFuY2F0LmggICAgICB8ICA4IC0t LS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBkNjNlNzM5MGJlNy4uYjJm YmQ2YTA4MmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTU3LDkgKzU3 LDYgQEAKIC8qIEdVQyBwYXJhbWV0ZXIgKi8KIGludAkJCWNvbnN0cmFpbnRfZXhjbHVzaW9uID0g Q09OU1RSQUlOVF9FWENMVVNJT05fUEFSVElUSU9OOwogCi0vKiBIb29rIGZvciBwbHVnaW5zIHRv IGdldCBjb250cm9sIGluIGdldF9yZWxhdGlvbl9pbmZvKCkgKi8KLWdldF9yZWxhdGlvbl9pbmZv X2hvb2tfdHlwZSBnZXRfcmVsYXRpb25faW5mb19ob29rID0gTlVMTDsKLQogdHlwZWRlZiBzdHJ1 Y3QgTm90bnVsbEhhc2hFbnRyeQogewogCU9pZAkJCXJlbGlkOwkJCS8qIE9JRCBvZiB0aGUgcmVs YXRpb24gKi8KQEAgLTU3MSwxNyArNTY4LDYgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lcklu Zm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJc2V0X3Jl bGF0aW9uX3BhcnRpdGlvbl9pbmZvKHJvb3QsIHJlbCwgcmVsYXRpb24pOwogCiAJdGFibGVfY2xv c2UocmVsYXRpb24sIE5vTG9jayk7Ci0KLQkvKgotCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRv cmlhbGl6ZSBvbiB0aGUgaW5mbyB3ZSBvYnRhaW5lZCBmcm9tIHRoZQotCSAqIGNhdGFsb2dzLiAg QWN0aW9ucyBtaWdodCBpbmNsdWRlIGFsdGVyaW5nIHRoZSBhc3N1bWVkIHJlbGF0aW9uIHNpemUs Ci0JICogcmVtb3ZpbmcgYW4gaW5kZXgsIG9yIGFkZGluZyBhIGh5cG90aGV0aWNhbCBpbmRleCB0 byB0aGUgaW5kZXhsaXN0LgotCSAqCi0JICogQW4gZXh0ZW5zaW9uIGNhbiBhbHNvIG1vZGlmeSBy ZWwtPnBnc19tYXNrIGhlcmUgdG8gY29udHJvbCBwYXRoCi0JICogZ2VuZXJhdGlvbi4KLQkgKi8K LQlpZiAoZ2V0X3JlbGF0aW9uX2luZm9faG9vaykKLQkJKCpnZXRfcmVsYXRpb25faW5mb19ob29r KSAocm9vdCwgcmVsYXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwpOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4IGE3MTRjODNmMWJhLi40YTg5ZWRhMDE0 MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtNDcsNiArNDcsOSBAQCB0 eXBlZGVmIHN0cnVjdCBKb2luSGFzaEVudHJ5CiAJUmVsT3B0SW5mbyAqam9pbl9yZWw7CiB9IEpv aW5IYXNoRW50cnk7CiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gYnVp bGRfc2ltcGxlX3JlbCgpICovCitidWlsZF9zaW1wbGVfcmVsX2hvb2tfdHlwZSBidWlsZF9zaW1w bGVfcmVsX2hvb2sgPSBOVUxMOworCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9s IGR1cmluZyBqb2lucmVsIHNldHVwICovCiBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBqb2lucmVs X3NldHVwX2hvb2sgPSBOVUxMOwogCkBAIC0zOTQsNiArMzk3LDE4IEBAIGJ1aWxkX3NpbXBsZV9y ZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCQkJ YnJlYWs7CiAJfQogCisJLyoKKwkgKiBBbGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24g dGhlIG5ldyBSZWxPcHRJbmZvLiBUaGlzIGNvdWxkCisJICogaW52b2x2ZSBlZGl0b3JpYWxpemlu ZyBvbiB0aGUgaW5mb3JtYXRpb24gd2hpY2ggZ2V0X3JlbGF0aW9uX2luZm8KKwkgKiBvYnRhaW5l ZCBmcm9tIHRoZSBjYXRhbG9ncywgc3VjaCBhcyBhbHRlcmluZyB0aGUgYXNzdW1lZCByZWxhdGlv biBzaXplLAorCSAqIHJlbW92aW5nIGFuIGluZGV4LCBvciBhZGRpbmcgYSBoeXBvdGhldGljYWwg aW5kZXggdG8gdGhlIGluZGV4bGlzdC4KKwkgKgorCSAqIEFuIGV4dGVuc2lvbiBjYW4gYWxzbyBt b2RpZnkgcmVsLT5wZ3NfbWFzayBoZXJlIHRvIGNvbnRyb2wgcGF0aAorCSAqIGdlbmVyYXRpb24u CisJICovCisJaWYgKGJ1aWxkX3NpbXBsZV9yZWxfaG9vaykKKwkJKCpidWlsZF9zaW1wbGVfcmVs X2hvb2spIChyb290LCByZWwsIHJ0ZSk7CisKIAkvKgogCSAqIFdlIG11c3QgYXBwbHkgdGhlIHBh cnRpYWxseSBmaWxsZWQgaW4gUmVsT3B0SW5mbyBiZWZvcmUgY2FsbGluZwogCSAqIGFwcGx5X2No aWxkX2Jhc2VxdWFscyBkdWUgdG8gc29tZSB0cmFuc2Zvcm1hdGlvbnMgd2l0aGluIHRoYXQgZnVu Y3Rpb24KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXggY2Y4YTY1NGZhNTMuLjgyOTc4NzBj ZjdlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMTcsNiArMTcsMTIgQEAKICNpbmNs dWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKIAor LyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBnZXRfcmVsYXRpb25faW5mbygp ICovCit0eXBlZGVmIHZvaWQgKCpidWlsZF9zaW1wbGVfcmVsX2hvb2tfdHlwZSkgKFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJCVJhbmdl VGJsRW50cnkgKnJ0ZSk7CitleHRlcm4gUEdETExJTVBPUlQgYnVpbGRfc2ltcGxlX3JlbF9ob29r X3R5cGUgYnVpbGRfc2ltcGxlX3JlbF9ob29rOworCiAvKgogICogRXZlcnl0aGluZyBpbiBzdWJw YXRocyBvciBwYXJ0aWFsX3N1YnBhdGhzIHdpbGwgYmVjb21lIHBhcnQgb2YgdGhlCiAgKiBBcHBl bmQgbm9kZSdzIHN1YnBhdGhzIGxpc3QuIFBhcnRpYWwgYW5kIG5vbi1wYXJ0aWFsIHN1YnBhdGhz IGNhbiBiZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5jYXQuaCBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wbGFuY2F0LmgKaW5kZXggOGQ3Y2M2ZDk4ODYuLjA5YmFmMWE2 OTE2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbmNhdC5oCisrKyBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wbGFuY2F0LmgKQEAgLTE3LDE0ICsxNyw2IEBACiAjaW5jbHVk ZSAibm9kZXMvcGF0aG5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKIAotLyog SG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBnZXRfcmVsYXRpb25faW5mbygpICov Ci10eXBlZGVmIHZvaWQgKCpnZXRfcmVsYXRpb25faW5mb19ob29rX3R5cGUpIChQbGFubmVySW5m byAqcm9vdCwKLQkJCQkJCQkJCQkJIE9pZCByZWxhdGlvbk9iamVjdElkLAotCQkJCQkJCQkJCQkg Ym9vbCBpbmhwYXJlbnQsCi0JCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpyZWwpOwotZXh0ZXJuIFBH RExMSU1QT1JUIGdldF9yZWxhdGlvbl9pbmZvX2hvb2tfdHlwZSBnZXRfcmVsYXRpb25faW5mb19o b29rOwotCi0KIGV4dGVybiB2b2lkIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290 LCBPaWQgcmVsYXRpb25PYmplY3RJZCwKIAkJCQkJCQkgIGJvb2wgaW5ocGFyZW50LCBSZWxPcHRJ bmZvICpyZWwpOwogCi0tIAoyLjUxLjAKCg== --0000000000005f9cf4064bd60212 Content-Type: application/octet-stream; name="v18-0005-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Disposition: attachment; filename="v18-0005-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5hcy924 RnJvbSA2OGY3OWY2NGJiOGEyZGM5OTQ2YzE1M2UyZTE0ZTAxZjYwZjY2M2I3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMjYgRmViIDIwMjYgMTc6MDU6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOCA1 LzddIENvbnNpZGVyIHN0YXJ0dXAgY29zdCBhcyBhIGZpZ3VyZSBvZiBtZXJpdCBmb3IKIHBhcnRp YWwgcGF0aHMuCgpQcmV2aW91c2x5LCB0aGUgY29tZW50cyBzdGF0ZWQgdGhhdCB0aGVyZSB3YXMg bm8gcHVycG9zZSB0byBjb25zaWRlcmluZwpzdGFydHVwIGNvc3QgZm9yIHBhcnRpYWwgcGF0aHMs IGJ1dCB0aGlzIGlzIG5vdCB0aGUgY2FzZTogaXQncyBwZXJmZWN0bHkKcmVhc29uYWJsZSB0byB3 YW50IGEgZmFzdC1zdGFydCBwYXRoIGZvciBhIHBsYW4gdGhhdCBpbnZvbHZlcyBhIExJTUlUCihw ZXJoYXBzIG92ZXIgYW4gYWdncmVnYXRlLCBzbyB0aGF0IHRoZXJlIGlzIGVub3VnaCBkYXRhIGJl aW5nIHByb2Nlc3NlZAp0byBqdXN0aWZ5IHBhcmFsbGVsIHF1ZXJ5IGJ1dCB5ZXQgd2UgZG9uJ3Qg d2FudCBhbGwgdGhlIHJlc3VsdCByb3dzKS4KCkFjY29yZGluZ2x5LCByZXdyaXRlIGFkZF9wYXJ0 aWFsX3BhdGggYW5kIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2sgdG8KY29uc2lkZXIgc3RhcnR1 cCBjb3N0cy4gVGhpcyBhbHNvIGZpeGVzIGFuIGluZGVwZW5kZW50IGJ1ZyBpbgphZGRfcGFydGlh bF9wYXRoX3ByZWNoZWNrOiBjb21taXQgZTIyMjUzNDY3OTQyZmRiMTAwMDg3Nzg3YzNlMWUzYTg2 MjBjNTRiMgpmYWlsZWQgdG8gdXBkYXRlIGl0IHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIG5ldyBk aXNhYmxlZF9ub2RlcyBmaWVsZC4KVGhhdCBidWcgZml4IGlzIGZvcm1hbGx5IHNlcGFyYXRlIGZy b20gdGhlIHJlc3Qgb2YgdGhpcyBwYXRjaCBhbmQgY291bGQKYmUgY29tbWl0dGVkIHNlcGFyYXRl bHksIGJ1dCBJIHRoaW5rIGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gZml4IGJvdGgKaXNzdWVzIHRv Z2V0aGVyLCBiZWNhdXNlIHRoZW4gd2UgY2FuIChhcyB0aGlzIGNvbW1pdCBkb2VzKSBqdXN0IG1h a2UKYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayBkbyB0aGUgY29zdCBjb21wYXJpc29ucyBpbiB0 aGUgc2FtZSB3YXkgYXMKY29tcGFyZV9wYXRoX2Nvc3RzX2Z1enppbHksIHdoaWNoIGhvcGVmdWxs eSByZWR1Y2VzIHRoZSBjaGFuY2VzIG9mCmVuZGluZyB1cCB3aXRoIHNvbWV0aGluZyB0aGF0J3Mg c3RpbGwgaW5jb3JyZWN0LgoKVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiBlYXJsaWVyIHdvcmsgb24g dGhpcyB0b3BpYyBieSBUb21hcyBWb25kcmEsCmJ1dCBJIGhhdmUgcmV3cml0dGVuIGEgZ3JlYXQg ZGVhbCBvZiBpdC4KCkNvLWF1dGhvcmVkLWJ5OiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNx bC5vcmc+CkNvLWF1dGhvcmVkLWJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KLS0t CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jICAgICAgICAgfCAgIDMgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgICAgICAgIHwgMTYyICsrKysr KysrKysrLS0tLS0tLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgICAg ICAgIHwgICAyICstCiAuLi4vcmVncmVzcy9leHBlY3RlZC9pbmNyZW1lbnRhbF9zb3J0Lm91dCAg ICAgfCAgMTggKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dCAgICAg ICB8ICAxMyArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNoLnNxbCAgICAgICAgICAg IHwgIDEwICstCiA2IGZpbGVzIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCA4NCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwppbmRleCBlMGMwMGUyNmRk NS4uMDQ0NTYwZGE3YmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pv aW5wYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwpAQCAt MTA0OCw2ICsxMDQ4LDcgQEAgdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChQbGFubmVySW5mbyAq cm9vdCwKIAlpbml0aWFsX2Nvc3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwgam9pbnR5cGUs IG5lc3Rsb29wX3N1YnR5cGUsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVyX3BhdGgsIGV4dHJh KTsKIAlpZiAoIWFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2soam9pbnJlbCwgd29ya3NwYWNlLmRp c2FibGVkX25vZGVzLAorCQkJCQkJCQkgICB3b3Jrc3BhY2Uuc3RhcnR1cF9jb3N0LAogCQkJCQkJ CQkgICB3b3Jrc3BhY2UudG90YWxfY29zdCwgcGF0aGtleXMpKQogCQlyZXR1cm47CiAKQEAgLTEy MzcsNiArMTIzOCw3IEBAIHRyeV9wYXJ0aWFsX21lcmdlam9pbl9wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJICAgZXh0cmEpOwogCiAJaWYgKCFhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNr KGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2RlcywKKwkJCQkJCQkJICAgd29ya3NwYWNl LnN0YXJ0dXBfY29zdCwKIAkJCQkJCQkJICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhrZXlz KSkKIAkJcmV0dXJuOwogCkBAIC0xMzY5LDYgKzEzNzEsNyBAQCB0cnlfcGFydGlhbF9oYXNoam9p bl9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCWluaXRpYWxfY29zdF9oYXNoam9pbihyb290LCAm d29ya3NwYWNlLCBqb2ludHlwZSwgaGFzaGNsYXVzZXMsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlu bmVyX3BhdGgsIGV4dHJhLCBwYXJhbGxlbF9oYXNoKTsKIAlpZiAoIWFkZF9wYXJ0aWFsX3BhdGhf cHJlY2hlY2soam9pbnJlbCwgd29ya3NwYWNlLmRpc2FibGVkX25vZGVzLAorCQkJCQkJCQkgICB3 b3Jrc3BhY2Uuc3RhcnR1cF9jb3N0LAogCQkJCQkJCQkgICB3b3Jrc3BhY2UudG90YWxfY29zdCwg TklMKSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRl eCA5ZjM5N2E0MGZhNi4uNDU3OWUzN2IyYmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BhdGhub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0 aG5vZGUuYwpAQCAtNzc4LDEwICs3NzgsOSBAQCBhZGRfcGF0aF9wcmVjaGVjayhSZWxPcHRJbmZv ICpwYXJlbnRfcmVsLCBpbnQgZGlzYWJsZWRfbm9kZXMsCiAgKgogICoJICBCZWNhdXNlIHdlIGRv bid0IGNvbnNpZGVyIHBhcmFtZXRlcml6ZWQgcGF0aHMgaGVyZSwgd2UgYWxzbyBkb24ndAogICoJ ICBuZWVkIHRvIGNvbnNpZGVyIHRoZSByb3cgY291bnRzIGFzIGEgbWVhc3VyZSBvZiBxdWFsaXR5 OiBldmVyeSBwYXRoIHdpbGwKLSAqCSAgcHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2Ygcm93cy4g IE5laXRoZXIgZG8gd2UgbmVlZCB0byBjb25zaWRlciBzdGFydHVwCi0gKgkgIGNvc3RzOiBwYXJh bGxlbGlzbSBpcyBvbmx5IHVzZWQgZm9yIHBsYW5zIHRoYXQgd2lsbCBiZSBydW4gdG8gY29tcGxl dGlvbi4KLSAqCSAgVGhlcmVmb3JlLCB0aGlzIHJvdXRpbmUgaXMgbXVjaCBzaW1wbGVyIHRoYW4g YWRkX3BhdGg6IGl0IG5lZWRzIHRvCi0gKgkgIGNvbnNpZGVyIG9ubHkgZGlzYWJsZWQgbm9kZXMs IHBhdGhrZXlzIGFuZCB0b3RhbCBjb3N0LgorICoJICBwcm9kdWNlIHRoZSBzYW1lIG51bWJlciBv ZiByb3dzLiAgSG93ZXZlciwgd2UgZG8gbmVlZCB0byBjb25zaWRlciB0aGUKKyAqCSAgc3RhcnR1 cCBjb3N0czogdGhpcyBwYXJ0aWFsIHBhdGggY291bGQgYmUgdXNlZCBiZW5lYXRoIGEgTGltaXQg bm9kZSwKKyAqCSAgc28gYSBmYXN0LXN0YXJ0IHBsYW4gY291bGQgYmUgY29ycmVjdC4KICAqCiAg KgkgIEFzIHdpdGggYWRkX3BhdGgsIHdlIHBmcmVlIHBhdGhzIHRoYXQgYXJlIGZvdW5kIHRvIGJl IGRvbWluYXRlZCBieQogICoJICBhbm90aGVyIHBhcnRpYWwgcGF0aDsgdGhpcyByZXF1aXJlcyB0 aGF0IHRoZXJlIGJlIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8KQEAgLTgxOSw1MiArODE4LDM2IEBA IGFkZF9wYXJ0aWFsX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgp CiAJCS8qIENvbXBhcmUgcGF0aGtleXMuICovCiAJCWtleXNjbXAgPSBjb21wYXJlX3BhdGhrZXlz KG5ld19wYXRoLT5wYXRoa2V5cywgb2xkX3BhdGgtPnBhdGhrZXlzKTsKIAotCQkvKiBVbmxlc3Mg cGF0aGtleXMgYXJlIGluY29tcGF0aWJsZSwga2VlcCBqdXN0IG9uZSBvZiB0aGUgdHdvIHBhdGhz LiAqLworCQkvKgorCQkgKiBVbmxlc3MgcGF0aGtleXMgYXJlIGluY29tcGF0aWJsZSwgc2VlIGlm IG9uZSBvZiB0aGUgcGF0aHMgZG9taW5hdGVzCisJCSAqIHRoZSBvdGhlciAoYm90aCBpbiBzdGFy dHVwIGFuZCB0b3RhbCBjb3N0KS4gSXQgbWF5IGhhcHBlbiB0aGF0IG9uZQorCQkgKiBwYXRoIGhh cyBsb3dlciBzdGFydHVwIGNvc3QsIHRoZSBvdGhlciBoYXMgbG93ZXIgdG90YWwgY29zdC4KKwkJ ICovCiAJCWlmIChrZXlzY21wICE9IFBBVEhLRVlTX0RJRkZFUkVOVCkKIAkJewotCQkJaWYgKHVu bGlrZWx5KG5ld19wYXRoLT5kaXNhYmxlZF9ub2RlcyAhPSBvbGRfcGF0aC0+ZGlzYWJsZWRfbm9k ZXMpKQorCQkJUGF0aENvc3RDb21wYXJpc29uIGNvc3RjbXA7CisKKwkJCS8qCisJCQkgKiBEbyBh IGZ1enp5IGNvc3QgY29tcGFyaXNvbiB3aXRoIHN0YW5kYXJkIGZ1enppbmVzcyBsaW1pdC4KKwkJ CSAqLworCQkJY29zdGNtcCA9IGNvbXBhcmVfcGF0aF9jb3N0c19mdXp6aWx5KG5ld19wYXRoLCBv bGRfcGF0aCwKKwkJCQkJCQkJCQkJCSBTVERfRlVaWl9GQUNUT1IpOworCQkJaWYgKGNvc3RjbXAg PT0gQ09TVFNfQkVUVEVSMSkKIAkJCXsKLQkJCQlpZiAobmV3X3BhdGgtPmRpc2FibGVkX25vZGVz ID4gb2xkX3BhdGgtPmRpc2FibGVkX25vZGVzKQotCQkJCQlhY2NlcHRfbmV3ID0gZmFsc2U7Ci0J CQkJZWxzZQorCQkJCWlmIChrZXlzY21wID09IFBBVEhLRVlTX0JFVFRFUjEpCiAJCQkJCXJlbW92 ZV9vbGQgPSB0cnVlOwogCQkJfQotCQkJZWxzZSBpZiAobmV3X3BhdGgtPnRvdGFsX2Nvc3QgPiBv bGRfcGF0aC0+dG90YWxfY29zdAotCQkJCQkgKiBTVERfRlVaWl9GQUNUT1IpCisJCQllbHNlIGlm IChjb3N0Y21wID09IENPU1RTX0JFVFRFUjIpCiAJCQl7Ci0JCQkJLyogTmV3IHBhdGggY29zdHMg bW9yZTsga2VlcCBpdCBvbmx5IGlmIHBhdGhrZXlzIGFyZSBiZXR0ZXIuICovCi0JCQkJaWYgKGtl eXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMSkKKwkJCQlpZiAoa2V5c2NtcCA9PSBQQVRIS0VZU19C RVRURVIyKQogCQkJCQlhY2NlcHRfbmV3ID0gZmFsc2U7CiAJCQl9Ci0JCQllbHNlIGlmIChvbGRf cGF0aC0+dG90YWxfY29zdCA+IG5ld19wYXRoLT50b3RhbF9jb3N0Ci0JCQkJCSAqIFNURF9GVVpa X0ZBQ1RPUikKKwkJCWVsc2UgaWYgKGNvc3RjbXAgPT0gQ09TVFNfRVFVQUwpCiAJCQl7Ci0JCQkJ LyogT2xkIHBhdGggY29zdHMgbW9yZTsga2VlcCBpdCBvbmx5IGlmIHBhdGhrZXlzIGFyZSBiZXR0 ZXIuICovCi0JCQkJaWYgKGtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKKwkJCQlpZiAoa2V5 c2NtcCA9PSBQQVRIS0VZU19CRVRURVIxKQogCQkJCQlyZW1vdmVfb2xkID0gdHJ1ZTsKLQkJCX0K LQkJCWVsc2UgaWYgKGtleXNjbXAgPT0gUEFUSEtFWVNfQkVUVEVSMSkKLQkJCXsKLQkJCQkvKiBD b3N0cyBhcmUgYWJvdXQgdGhlIHNhbWUsIG5ldyBwYXRoIGhhcyBiZXR0ZXIgcGF0aGtleXMuICov Ci0JCQkJcmVtb3ZlX29sZCA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChrZXlzY21wID09IFBB VEhLRVlTX0JFVFRFUjIpCi0JCQl7Ci0JCQkJLyogQ29zdHMgYXJlIGFib3V0IHRoZSBzYW1lLCBv bGQgcGF0aCBoYXMgYmV0dGVyIHBhdGhrZXlzLiAqLwotCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsK LQkJCX0KLQkJCWVsc2UgaWYgKG9sZF9wYXRoLT50b3RhbF9jb3N0ID4gbmV3X3BhdGgtPnRvdGFs X2Nvc3QgKiAxLjAwMDAwMDAwMDEpCi0JCQl7Ci0JCQkJLyogUGF0aGtleXMgYXJlIHRoZSBzYW1l LCBhbmQgdGhlIG9sZCBwYXRoIGNvc3RzIG1vcmUuICovCi0JCQkJcmVtb3ZlX29sZCA9IHRydWU7 Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBQYXRoa2V5cyBhcmUgdGhlIHNh bWUsIGFuZCBuZXcgcGF0aCBpc24ndCBtYXRlcmlhbGx5Ci0JCQkJICogY2hlYXBlci4KLQkJCQkg Ki8KLQkJCQlhY2NlcHRfbmV3ID0gZmFsc2U7CisJCQkJZWxzZSBpZiAoa2V5c2NtcCA9PSBQQVRI S0VZU19CRVRURVIyKQorCQkJCQlhY2NlcHRfbmV3ID0gZmFsc2U7CiAJCQl9CiAJCX0KIApAQCAt OTE1LDE2ICs4OTgsMTYgQEAgYWRkX3BhcnRpYWxfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVs LCBQYXRoICpuZXdfcGF0aCkKICAqIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2sKICAqCSAgQ2hl Y2sgd2hldGhlciBhIHByb3Bvc2VkIG5ldyBwYXJ0aWFsIHBhdGggY291bGQgcG9zc2libHkgZ2V0 IGFjY2VwdGVkLgogICoKLSAqIFVubGlrZSBhZGRfcGF0aF9wcmVjaGVjaywgd2UgY2FuIGlnbm9y ZSBzdGFydHVwIGNvc3QgYW5kIHBhcmFtZXRlcml6YXRpb24sCi0gKiBzaW5jZSB0aGV5IGRvbid0 IG1hdHRlciBmb3IgcGFydGlhbCBwYXRocyAoc2VlIGFkZF9wYXJ0aWFsX3BhdGgpLiAgQnV0Ci0g KiB3ZSBkbyB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBhZGQgYSBwYXJ0aWFsIHBhdGggaWYg dGhlcmUncyBhbHJlYWR5Ci0gKiBhIGNvbXBsZXRlIHBhdGggdGhhdCBkb21pbmF0ZXMgaXQsIHNp bmNlIGluIHRoYXQgY2FzZSB0aGUgcHJvcG9zZWQgcGF0aAotICogaXMgc3VyZWx5IGEgbG9zZXIu CisgKiBVbmxpa2UgYWRkX3BhdGhfcHJlY2hlY2ssIHdlIGNhbiBpZ25vcmUgcGFyYW1ldGVyaXph dGlvbiwgc2luY2UgaXQgZG9lc24ndAorICogbWF0dGVyIGZvciBwYXJ0aWFsIHBhdGhzIChzZWUg YWRkX3BhcnRpYWxfcGF0aCkuICBCdXQgd2UgZG8gd2FudCB0byBtYWtlCisgKiBzdXJlIHdlIGRv bid0IGFkZCBhIHBhcnRpYWwgcGF0aCBpZiB0aGVyZSdzIGFscmVhZHkgYSBjb21wbGV0ZSBwYXRo IHRoYXQKKyAqIGRvbWluYXRlcyBpdCwgc2luY2UgaW4gdGhhdCBjYXNlIHRoZSBwcm9wb3NlZCBw YXRoIGlzIHN1cmVseSBhIGxvc2VyLgogICovCiBib29sCiBhZGRfcGFydGlhbF9wYXRoX3ByZWNo ZWNrKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsIGludCBkaXNhYmxlZF9ub2RlcywKLQkJCQkJCSAg Q29zdCB0b3RhbF9jb3N0LCBMaXN0ICpwYXRoa2V5cykKKwkJCQkJCSAgQ29zdCBzdGFydHVwX2Nv c3QsIENvc3QgdG90YWxfY29zdCwgTGlzdCAqcGF0aGtleXMpCiB7CisJYm9vbAkJY29uc2lkZXJf c3RhcnR1cCA9IHBhcmVudF9yZWwtPmNvbnNpZGVyX3N0YXJ0dXA7CiAJTGlzdENlbGwgICAqcDE7 CiAKIAkvKgpAQCAtOTM0LDI1ICs5MTcsODEgQEAgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhS ZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBpbnQgZGlzYWJsZWRfbm9kZXMsCiAJICogaXMgY2xlYXJs eSBzdXBlcmlvciB0byBzb21lIGV4aXN0aW5nIHBhcnRpYWwgcGF0aCAtLSBhdCBsZWFzdCwgbW9k dWxvCiAJICogZmluYWwgY29zdCBjb21wdXRhdGlvbnMuICBJZiBzbywgd2UgZGVmaW5pdGVseSB3 YW50IHRvIGNvbnNpZGVyIGl0LgogCSAqCi0JICogVW5saWtlIGFkZF9wYXRoKCksIHdlIGFsd2F5 cyBjb21wYXJlIHBhdGhrZXlzIGhlcmUuICBUaGlzIGlzIGJlY2F1c2Ugd2UKLQkgKiBleHBlY3Qg cGFydGlhbF9wYXRobGlzdCB0byBiZSB2ZXJ5IHNob3J0LCBhbmQgZ2V0dGluZyBhIGRlZmluaXRp dmUKLQkgKiBhbnN3ZXIgYXQgdGhpcyBzdGFnZSBhdm9pZHMgdGhlIG5lZWQgdG8gY2FsbCBhZGRf cGF0aF9wcmVjaGVjay4KKwkgKiBVbmxpa2UgYWRkX3BhdGgoKSwgd2UgbmV2ZXIgdHJ5IHRvIGV4 aXQgdGhpcyBsb29wIGVhcmx5LiBUaGlzIGlzCisJICogYmVjYXVzZSB3ZSBleHBlY3QgcGFydGlh bF9wYXRobGlzdCB0byBiZSB2ZXJ5IHNob3J0LCBhbmQgZ2V0dGluZyBhCisJICogZGVmaW5pdGl2 ZSBhbnN3ZXIgYXQgdGhpcyBzdGFnZSBhdm9pZHMgdGhlIG5lZWQgdG8gY2FsbAorCSAqIGFkZF9w YXRoX3ByZWNoZWNrLgogCSAqLwogCWZvcmVhY2gocDEsIHBhcmVudF9yZWwtPnBhcnRpYWxfcGF0 aGxpc3QpCiAJewogCQlQYXRoCSAgICpvbGRfcGF0aCA9IChQYXRoICopIGxmaXJzdChwMSk7CisJ CVBhdGhDb3N0Q29tcGFyaXNvbiBjb3N0Y21wOwogCQlQYXRoS2V5c0NvbXBhcmlzb24ga2V5c2Nt cDsKIAotCQlrZXlzY21wID0gY29tcGFyZV9wYXRoa2V5cyhwYXRoa2V5cywgb2xkX3BhdGgtPnBh dGhrZXlzKTsKLQkJaWYgKGtleXNjbXAgIT0gUEFUSEtFWVNfRElGRkVSRU5UKQorCQkvKgorCQkg KiBGaXJzdCwgY29tcGFyZSBjb3N0cyBhbmQgZGlzYWJsZWQgbm9kZXMuIFRoaXMgbG9naWMgc2hv dWxkIGJlCisJCSAqIGlkZW50aWNhbCB0byBjb21wYXJlX3BhdGhfY29zdHNfZnV6emlseSwgZXhj ZXB0IHRoYXQgb25lIG9mIHRoZQorCQkgKiBwYXRocyBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldCwg YW5kIHRoZSBmdXp6IGZhY3RvciBpcyBhbHdheXMKKwkJICogU1REX0ZVWlpfRkFDVE9SLgorCQkg Ki8KKwkJaWYgKHVubGlrZWx5KG9sZF9wYXRoLT5kaXNhYmxlZF9ub2RlcyAhPSBkaXNhYmxlZF9u b2RlcykpCiAJCXsKLQkJCWlmICh0b3RhbF9jb3N0ID4gb2xkX3BhdGgtPnRvdGFsX2Nvc3QgKiBT VERfRlVaWl9GQUNUT1IgJiYKLQkJCQlrZXlzY21wICE9IFBBVEhLRVlTX0JFVFRFUjEpCi0JCQkJ cmV0dXJuIGZhbHNlOwotCQkJaWYgKG9sZF9wYXRoLT50b3RhbF9jb3N0ID4gdG90YWxfY29zdCAq IFNURF9GVVpaX0ZBQ1RPUiAmJgotCQkJCWtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKLQkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCWlmIChkaXNhYmxlZF9ub2RlcyA8IG9sZF9wYXRoLT5kaXNhYmxl ZF9ub2RlcykKKwkJCQljb3N0Y21wID0gQ09TVFNfQkVUVEVSMTsKKwkJCWVsc2UKKwkJCQljb3N0 Y21wID0gQ09TVFNfQkVUVEVSMjsKKwkJfQorCQllbHNlIGlmICh0b3RhbF9jb3N0ID4gb2xkX3Bh dGgtPnRvdGFsX2Nvc3QgKiBTVERfRlVaWl9GQUNUT1IpCisJCXsKKwkJCWlmIChjb25zaWRlcl9z dGFydHVwICYmCisJCQkJb2xkX3BhdGgtPnN0YXJ0dXBfY29zdCA+IHN0YXJ0dXBfY29zdCAqIFNU RF9GVVpaX0ZBQ1RPUikKKwkJCQljb3N0Y21wID0gQ09TVFNfRElGRkVSRU5UOworCQkJZWxzZQor CQkJCWNvc3RjbXAgPSBDT1NUU19CRVRURVIyOworCQl9CisJCWVsc2UgaWYgKG9sZF9wYXRoLT50 b3RhbF9jb3N0ID4gdG90YWxfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJeworCQkJaWYgKGNv bnNpZGVyX3N0YXJ0dXAgJiYKKwkJCQlzdGFydHVwX2Nvc3QgPiBvbGRfcGF0aC0+c3RhcnR1cF9j b3N0ICogU1REX0ZVWlpfRkFDVE9SKQorCQkJCWNvc3RjbXAgPSBDT1NUU19ESUZGRVJFTlQ7CisJ CQllbHNlCisJCQkJY29zdGNtcCA9IENPU1RTX0JFVFRFUjE7CiAJCX0KKwkJZWxzZSBpZiAoc3Rh cnR1cF9jb3N0ID4gb2xkX3BhdGgtPnN0YXJ0dXBfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJ CWNvc3RjbXAgPSBDT1NUU19CRVRURVIyOworCQllbHNlIGlmIChvbGRfcGF0aC0+c3RhcnR1cF9j b3N0ID4gc3RhcnR1cF9jb3N0ICogU1REX0ZVWlpfRkFDVE9SKQorCQkJY29zdGNtcCA9IENPU1RT X0JFVFRFUjE7CisJCWVsc2UKKwkJCWNvc3RjbXAgPSBDT1NUU19FUVVBTDsKKworCQkvKgorCQkg KiBJZiBvbmUgcGF0aCB3aW5zIG9uIHN0YXJ0dXAgY29zdCBhbmQgdGhlIG90aGVyIG9uIHRvdGFs IGNvc3QsIHdlCisJCSAqIGNhbid0IHNheSBmb3Igc3VyZSB3aGljaCBpcyBiZXR0ZXIuCisJCSAq LworCQlpZiAoY29zdGNtcCA9PSBDT1NUU19ESUZGRVJFTlQpCisJCQljb250aW51ZTsKKworCQkv KgorCQkgKiBJZiB0aGUgdHdvIHBhdGhzIGhhdmUgZGlmZmVyZW50IHBhdGhrZXlzLCB3ZSBjYW4n dCBzYXkgZm9yIHN1cmUKKwkJICogd2hpY2ggaXMgYmV0dGVyLgorCQkgKi8KKwkJa2V5c2NtcCA9 IGNvbXBhcmVfcGF0aGtleXMocGF0aGtleXMsIG9sZF9wYXRoLT5wYXRoa2V5cyk7CisJCWlmIChr ZXlzY21wID09IFBBVEhLRVlTX0RJRkZFUkVOVCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAq IElmIHRoZSBleGlzdGluZyBwYXRoIGlzIGNoZWFwZXIgYW5kIHRoZSBwYXRoa2V5cyBhcmUgZXF1 YWwgb3IKKwkJICogd29yc2UsIHRoZSBuZXcgcGF0aCBpcyBub3QgaW50ZXJlc3RpbmcuCisJCSAq LworCQlpZiAoY29zdGNtcCA9PSBDT1NUU19CRVRURVIyICYmIGtleXNjbXAgIT0gUEFUSEtFWVNf QkVUVEVSMSkKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB0aGUgbmV3IHBhdGgg aXMgY2hlYXBlciBhbmQgdGhlIHBhdGhrZXlzIGFyZSBlcXVhbCBvciBiZXR0ZXIsIGl0CisJCSAq IGlzIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcuCisJCSAqLworCQlpZiAoY29zdGNtcCA9PSBDT1NU U19CRVRURVIxICYmIGtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKKwkJCXJldHVybiB0cnVl OwogCX0KIAogCS8qCkBAIC05NjAsMTQgKzk5OSw5IEBAIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hl Y2soUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAogCSAqIGNsZWFy bHkgZ29vZCBlbm91Z2ggdGhhdCBpdCBtaWdodCByZXBsYWNlIG9uZS4gIENvbXBhcmUgaXQgdG8K IAkgKiBub24tcGFyYWxsZWwgcGxhbnMuICBJZiBpdCBsb3NlcyBldmVuIGJlZm9yZSBhY2NvdW50 aW5nIGZvciB0aGUgY29zdCBvZgogCSAqIHRoZSBHYXRoZXIgbm9kZSwgd2Ugc2hvdWxkIGRlZmlu aXRlbHkgcmVqZWN0IGl0LgotCSAqCi0JICogTm90ZSB0aGF0IHdlIHBhc3MgdGhlIHRvdGFsX2Nv c3QgdG8gYWRkX3BhdGhfcHJlY2hlY2sgdHdpY2UuICBUaGlzIGlzCi0JICogYmVjYXVzZSBpdCdz IG5ldmVyIGFkdmFudGFnZW91cyB0byBjb25zaWRlciB0aGUgc3RhcnR1cCBjb3N0IG9mIGEKLQkg KiBwYXJ0aWFsIHBhdGg7IHRoZSByZXN1bHRpbmcgcGxhbnMsIGlmIHJ1biBpbiBwYXJhbGxlbCwg d2lsbCBiZSBydW4gdG8KLQkgKiBjb21wbGV0aW9uLgogCSAqLwotCWlmICghYWRkX3BhdGhfcHJl Y2hlY2socGFyZW50X3JlbCwgZGlzYWJsZWRfbm9kZXMsIHRvdGFsX2Nvc3QsIHRvdGFsX2Nvc3Qs Ci0JCQkJCQkgICBwYXRoa2V5cywgTlVMTCkpCisJaWYgKCFhZGRfcGF0aF9wcmVjaGVjayhwYXJl bnRfcmVsLCBkaXNhYmxlZF9ub2Rlcywgc3RhcnR1cF9jb3N0LAorCQkJCQkJICAgdG90YWxfY29z dCwgcGF0aGtleXMsIE5VTEwpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXggODI5Nzg3MGNmN2UuLmI4YjIyMDRlZWI1IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtNjEsNyArNjEsNyBAQCBleHRlcm4gYm9vbCBhZGRf cGF0aF9wcmVjaGVjayhSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBpbnQgZGlzYWJsZWRfbm9kZXMs CiAJCQkJCQkJICBMaXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKIGV4dGVy biB2b2lkIGFkZF9wYXJ0aWFsX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3 X3BhdGgpOwogZXh0ZXJuIGJvb2wgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhSZWxPcHRJbmZv ICpwYXJlbnRfcmVsLAotCQkJCQkJCQkJICBpbnQgZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJCQkg IGludCBkaXNhYmxlZF9ub2RlcywgQ29zdCBzdGFydHVwX2Nvc3QsCiAJCQkJCQkJCQkgIENvc3Qg dG90YWxfY29zdCwgTGlzdCAqcGF0aGtleXMpOwogCiBleHRlcm4gUGF0aCAqY3JlYXRlX3NlcXNj YW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLApkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmNyZW1lbnRhbF9zb3J0Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29ydC5vdXQKaW5kZXggZmRlYzViOWJhNTIu LjI5MDkwZGNhMWJhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luY3Jl bWVudGFsX3NvcnQub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50 YWxfc29ydC5vdXQKQEAgLTE0NTAsMjEgKzE0NTAsMjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgYSxiLHN1bShjKSBmcm9tIHQgZ3JvdXAgYnkgMSwyIG9yZGVyIGJ5IDEsMiwzIGxpbWl0 IDEKIAogc2V0IGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb247CiBleHBsYWluIChjb3N0cyBv ZmYpIHNlbGVjdCBhLGIsc3VtKGMpIGZyb20gdCBncm91cCBieSAxLDIgb3JkZXIgYnkgMSwyLDMg bGltaXQgMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW1pdAogICAgLT4gIEluY3JlbWVudGFsIFNvcnQK ICAgICAgICAgIFNvcnQgS2V5OiBhLCBiLCAoc3VtKGMpKQogICAgICAgICAgUHJlc29ydGVkIEtl eTogYSwgYgotICAgICAgICAgLT4gIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAtPiAgRmluYWxp emUgR3JvdXBBZ2dyZWdhdGUKICAgICAgICAgICAgICAgIEdyb3VwIEtleTogYSwgYgogICAgICAg ICAgICAgICAgLT4gIEdhdGhlciBNZXJnZQogICAgICAgICAgICAgICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAyCi0gICAgICAgICAgICAgICAgICAgICAtPiAgSW5jcmVtZW50YWwgU29ydAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGEsIGIKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIFByZXNvcnRlZCBLZXk6IGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBJbmRleCBTY2FuIHVzaW5nIHRfYV9pZHggb24gdAotKDEyIHJvd3MpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBhLCBiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgSW5jcmVtZW50YWwgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U29ydCBLZXk6IGEsIGIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRl ZCBLZXk6IGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBJ bmRleCBTY2FuIHVzaW5nIHRfYV9pZHggb24gdAorKDE0IHJvd3MpCiAKIC0tIEluY3JlbWVudGFs IHNvcnQgdnMuIHNldCBvcGVyYXRpb25zIHdpdGggdmFybm8gMAogc2V0IGVuYWJsZV9oYXNoYWdn IHRvIG9mZjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNo Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dAppbmRleCA0NzQ5 ZjZlZDcwZC4uYmM3Y2M3NjQ2N2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvam9pbl9oYXNoLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFz aC5vdXQKQEAgLTc2LDggKzc2LDggQEAgaW5zZXJ0IGludG8gZXh0cmVtZWx5X3NrZXdlZAogdXBk YXRlIHBnX2NsYXNzCiAgIHNldCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9u X3NpemUoJ2V4dHJlbWVseV9za2V3ZWQnKSAvIDgxOTIKICAgd2hlcmUgcmVsbmFtZSA9ICdleHRy ZW1lbHlfc2tld2VkJzsKLS0tIE1ha2UgYSByZWxhdGlvbiB3aXRoIGEgY291cGxlIG9mIGVub3Jt b3VzIHR1cGxlcy4KLWNyZWF0ZSB0YWJsZSB3aWRlIGFzIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMo MSwgMikgYXMgaWQsIHJwYWQoJycsIDMyMDAwMCwgJ3gnKSBhcyB0OworLS0gTWFrZSBhIHJlbGF0 aW9uIHdpdGggc2V2ZXJhbCBlbm9ybW91cyB0dXBsZXMuCitjcmVhdGUgdGFibGUgd2lkZSBhcyBz ZWxlY3QgZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGFzIGlkLCBycGFkKCcnLCAzMjAwMDAsICd4Jykg YXMgdDsKIGFsdGVyIHRhYmxlIHdpZGUgc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CiAtLSBU aGUgIm9wdGltYWwiIGNhc2U6IHRoZSBoYXNoIHRhYmxlIGZpdHMgaW4gbWVtb3J5OyB3ZSBwbGFu IGZvciAxCiAtLSBiYXRjaCwgd2Ugc3RpY2sgdG8gdGhhdCBudW1iZXIsIGFuZCBwZWFrIG1lbW9y eSB1c2FnZSBzdGF5cyB3aXRoaW4KQEAgLTkyMiw3ICs5MjIsNyBAQCBzZXQgd29ya19tZW0gPSAn MTI4a0InOwogc2V0IGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CiBleHBsYWluIChjb3N0cyBv ZmYpCiAgIHNlbGVjdCBsZW5ndGgobWF4KHMudCkpCi0gIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNl bGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChp ZCk7CisgIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8 ICcnIGFzIHQgZnJvbSB3aWRlIHdoZXJlIGlkIDwgMykgcyB1c2luZyAoaWQpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogIEZpbmFsaXplIEFnZ3JlZ2F0ZQpAQCAtOTM0LDEwICs5MzQsMTEgQEAgZXhwbGFp biAoY29zdHMgb2ZmKQogICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIHdpZGUKICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gd2lkZSB3aWRlXzEK LSg5IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChpZCA8 IDMpCisoMTAgcm93cykKIAogc2VsZWN0IGxlbmd0aChtYXgocy50KSkKLWZyb20gd2lkZSBsZWZ0 IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBz IHVzaW5nIChpZCk7Citmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQs ICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSB3aGVyZSBpZCA8IDMpIHMgdXNpbmcgKGlkKTsKICBs ZW5ndGggCiAtLS0tLS0tLQogIDMyMDAwMApAQCAtOTQ3LDcgKzk0OCw3IEBAIHNlbGVjdCBmaW5h bCA+IDEgYXMgbXVsdGliYXRjaAogICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAogJCQKICAgc2Vs ZWN0IGxlbmd0aChtYXgocy50KSkKLSAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBj b2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKKyAgZnJv bSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBm cm9tIHdpZGUgd2hlcmUgaWQgPCAzKSBzIHVzaW5nIChpZCk7CiAkJCk7CiAgbXVsdGliYXRjaCAK IC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNo LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKaW5kZXggNDlkM2ZkNjE4 NTYuLjUzZGIxNzU0YmIyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hh c2guc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKQEAgLTgzLDgg KzgzLDggQEAgdXBkYXRlIHBnX2NsYXNzCiAgIHNldCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9 IHBnX3JlbGF0aW9uX3NpemUoJ2V4dHJlbWVseV9za2V3ZWQnKSAvIDgxOTIKICAgd2hlcmUgcmVs bmFtZSA9ICdleHRyZW1lbHlfc2tld2VkJzsKIAotLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggYSBj b3VwbGUgb2YgZW5vcm1vdXMgdHVwbGVzLgotY3JlYXRlIHRhYmxlIHdpZGUgYXMgc2VsZWN0IGdl bmVyYXRlX3NlcmllcygxLCAyKSBhcyBpZCwgcnBhZCgnJywgMzIwMDAwLCAneCcpIGFzIHQ7Cist LSBNYWtlIGEgcmVsYXRpb24gd2l0aCBzZXZlcmFsIGVub3Jtb3VzIHR1cGxlcy4KK2NyZWF0ZSB0 YWJsZSB3aWRlIGFzIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgYXMgaWQsIHJwYWQoJycs IDMyMDAwMCwgJ3gnKSBhcyB0OwogYWx0ZXIgdGFibGUgd2lkZSBzZXQgKHBhcmFsbGVsX3dvcmtl cnMgPSAyKTsKIAogLS0gVGhlICJvcHRpbWFsIiBjYXNlOiB0aGUgaGFzaCB0YWJsZSBmaXRzIGlu IG1lbW9yeTsgd2UgcGxhbiBmb3IgMQpAQCAtNDk2LDE0ICs0OTYsMTQgQEAgc2V0IHdvcmtfbWVt ID0gJzEyOGtCJzsKIHNldCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOwogZXhwbGFpbiAoY29z dHMgb2ZmKQogICBzZWxlY3QgbGVuZ3RoKG1heChzLnQpKQotICBmcm9tIHdpZGUgbGVmdCBqb2lu IChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSkgcyB1c2lu ZyAoaWQpOworICBmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcn KSB8fCAnJyBhcyB0IGZyb20gd2lkZSB3aGVyZSBpZCA8IDMpIHMgdXNpbmcgKGlkKTsKIHNlbGVj dCBsZW5ndGgobWF4KHMudCkpCi1mcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxl c2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworZnJvbSB3aWRl IGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdp ZGUgd2hlcmUgaWQgPCAzKSBzIHVzaW5nIChpZCk7CiBzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRp YmF0Y2gKICAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKICQkCiAgIHNlbGVjdCBsZW5ndGgobWF4 KHMudCkpCi0gIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycp IHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CisgIGZyb20gd2lkZSBsZWZ0IGpv aW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlIHdoZXJl IGlkIDwgMykgcyB1c2luZyAoaWQpOwogJCQpOwogcm9sbGJhY2sgdG8gc2V0dGluZ3M7CiAKLS0g CjIuNTEuMAoK --0000000000005f9cf4064bd60212 Content-Type: application/octet-stream; name="v18-0001-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Disposition: attachment; filename="v18-0001-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5hcy7u0 RnJvbSA4MTQ4ZWE2MWNhMGVlOTQwZjIxNmUzNWYzOWY5ODAwMjNlNGI5Y2VkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwODoxNDo0MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDEv N10gQWxsb3cgZXh0ZW5zaW9ucyB0byBtYXJrIGFuIGluZGl2aWR1YWwgaW5kZXggYXMKIGRpc2Fi bGVkLgoKVXAgdW50aWwgbm93LCB0aGUgb25seSB3YXkgZm9yIGEgbG9hZGFibGUgbW9kdWxlIHRv IGRpc2FibGUgdGhlIHVzZSBvZiBhCnBhcnRpY3VsYXIgaW5kZXggd2FzIHRvIHVzZSBnZXRfcmVs YXRpb25faW5mb19ob29rIHRvIHJlbW92ZSBpdCBmcm9tIHRoZQppbmRleCBsaXN0LiBXaGlsZSB0 aGF0IHdvcmtzLCBpdCBoYXMgc29tZSBkaXNhZHZhbnRhZ2VzLiBGaXJzdCwgdGhlCmluZGV4IGJl Y29tZXMgaW52aXNpYmxlIGZvciBhbGwgcHVycG9zZXMsIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVz ZWQgZm9yCm9wdGltaXphdGlvbnMgc3VjaCBhcyBzZWxmLWpvaW4gZWxpbWluYXRpb24gb3IgbGVm dCBqb2luIHJlbW92YWwsIHdoaWNoCmNhbiBzZXZlcmVseSBkZWdyYWRlIHRoZSByZXN1bHRpbmcg cGxhbi4KClNlY29uZCwgaWYgdGhlIG1vZHVsZSBhdHRlbXB0cyB0byBjb21wZWwgdGhlIHVzZSBv ZiBhIGNlcnRhaW4gaW5kZXgKYnkgcmVtb3ZpbmcgYWxsIG90aGVyIGluZGV4ZXMgZnJvbSB0aGUg aW5kZXggbGlzdCBhbmQgZGlzYWJsaW5nCm90aGVyIHNjYW4gdHlwZXMsIGJ1dCB0aGUgcGxhbm5l ciBpcyB1bmFibGUgdG8gdXNlIHRoZSBjaG9zZW4gaW5kZXgKZm9yIHNvbWUgcmVhc29uLCBpdCB3 aWxsIGZhbGwgYmFjayB0byBhIHNlcXVlbnRpYWwgc2NhbiwgYmVjYXVzZSB0aGF0CmlzIG9ubHkg ZGlzYWJsZWQsIHdoZXJlYXMgdGhlIG90aGVyIGluZGV4ZXMgYXJlLCBmcm9tIHRoZSBwbGFubmVy J3MKcG9pbnQgb2YgdmlldywgY29tcGxldGVseSBnb25lLiBXaGlsZSB0aGlzIHNpdHVhdGlvbiBp ZGVhbGx5IHNob3VsZG4ndApvY2N1ciwgaXQncyBoYXJkIGZvciBhIGxvYWRhYmxlIG1vZHVsZSB0 byBiZSBjb21wbGV0ZWx5IHN1cmUgd2hldGhlcgp0aGUgcGxhbm5lciB3aWxsIHZpZXcgYSBjZXJ0 YWluIGluZGV4IGFzIHVzYWJsZSBmb3IgYSBjZXJ0YWluIHF1ZXJ5LgpJZiBpdCBpc24ndCwgaXQg bWF5IGJlIGJldHRlciB0byBmYWxsIGJhY2sgdG8gYSBzY2FuIHVzaW5nIGEgZGlzYWJsZWQKaW5k ZXggcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvIGFuIGFsc28tZGlzYWJsZWQgc2VxdWVudGlh bCBzY2FuLgoKUmV2aWV3ZWQtYnk6IEFsZXhhbmRyYSBXYW5nIDxhbGV4YW5kcmEud2FuZy5vc3NA Z21haWwuY29tPgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgfCA4 ICsrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgIHwgMiArKwog MiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BhdGhub2RlLmMKaW5kZXggZWY4ZWY2ZTg5ZDMuLjlmMzk3YTQwZmE2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTEwODMsNiArMTA4MywxNCBAQCBjcmVhdGVfaW5k ZXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAogCWNvc3RfaW5kZXgocGF0aG5vZGUsIHJvb3Qs IGxvb3BfY291bnQsIHBhcnRpYWxfcGF0aCk7CiAKKwkvKgorCSAqIGNvc3RfaW5kZXggd2lsbCBz ZXQgZGlzYWJsZWRfbm9kZXMgdG8gMSBpZiB0aGlzIHJlbCBpcyBub3QgYWxsb3dlZCB0bworCSAq IHVzZSBpbmRleCBzY2FucyBpbiBnZW5lcmFsLCBidXQgaXQgZG9lc24ndCBoYXZlIHRoZSBJbmRl eE9wdEluZm8gdG8KKwkgKiBrbm93IHdoZXRoZXIgdGhpcyBzcGVjaWZpYyBpbmRleCBoYXMgYmVl biBkaXNhYmxlZC4KKwkgKi8KKwlpZiAoaW5kZXgtPmRpc2FibGVkKQorCQlwYXRobm9kZS0+cGF0 aC5kaXNhYmxlZF9ub2RlcyA9IDE7CisKIAlyZXR1cm4gcGF0aG5vZGU7CiB9CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKaW5kZXggYzE3NWVlOTViNjguLjI3NzU4ZWMxNmZlIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaApAQCAtMTQxMiw2ICsxNDEyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJ Ym9vbAkJbnVsbHNub3RkaXN0aW5jdDsKIAkvKiBpcyB1bmlxdWVuZXNzIGVuZm9yY2VkIGltbWVk aWF0ZWx5PyAqLwogCWJvb2wJCWltbWVkaWF0ZTsKKwkvKiB0cnVlIGlmIHBhdGhzIHVzaW5nIHRo aXMgaW5kZXggc2hvdWxkIGJlIG1hcmtlZCBkaXNhYmxlZCAqLworCWJvb2wJCWRpc2FibGVkOwog CS8qIHRydWUgaWYgaW5kZXggZG9lc24ndCByZWFsbHkgZXhpc3QgKi8KIAlib29sCQloeXBvdGhl dGljYWw7CiAKLS0gCjIuNTEuMAoK --0000000000005f9cf4064bd60212 Content-Type: application/octet-stream; name="v18-0004-Add-pg_collect_advice-contrib-module.patch" Content-Disposition: attachment; filename="v18-0004-Add-pg_collect_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5hcy8z3 RnJvbSBhN2QyNWUxNzI0MGYwZWMwYWNkODgxZDBjOGY0OTE1MTllMDJmOThmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMjYgRmViIDIwMjYgMTY6NTE6MTYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOCA0 LzddIEFkZCBwZ19jb2xsZWN0X2FkdmljZSBjb250cmliIG1vZHVsZS4KClRoaXMgbW9kdWxlIGFs bG93cyBhdXRvbWF0ZWQsIGxhcmdlLXNjYWxlIGNvbGxlY3Rpb24gb2YgcXVlcmllcyBhbmQKdGhl IGFzc29jaWF0ZWQgcGxhbiBhZHZpY2Ugc3RyaW5ncyB1c2luZyBlaXRoZXIgYmFja2VuZC1sb2Nh bCBtZW1vcnkKb3IgZHluYW1pYyBzaGFyZWQgbWVtb3J5LiBJbiBlaXRoZXIgY2FzZSwgbWVtb3J5 IHVzYWdlIGNhbiBiZSBsaW1pdGVkCmJ5IHJlc3RyaWN0aW9uIHRoZSBtYXhpbXVtIG51bWJlciBv ZiBxdWVyaWVzIGFuZCBhZHZpY2Ugc3RyaW5ncwpzdG9yZWQuIENhcmUgc2hvdWxkIGJlIHRha2Vu IHdpdGggdGhlc2UgdmFsdWVzLCBhbmQgd2l0aCB0aGUgdXNlIG9mCnRoaXMgbW9kdWxlIGluIGdl bmVyYWwsIGJlY2F1c2UgaXQncyBlYXN5IHRvIGNoZXcgdXAgYW4gdW5yZWFzb25hYmx5Cmxhcmdl IGFtb3VudCBvZiBtZW1vcnkuIFVubGlrZSBwZ19zdGF0X3N0YXRlbWVudHMsIHRoaXMgbW9kdWxl IGRvZXMKbm90IHByb3ZpZGUgZm9yIHF1ZXJ5IG5vcm1hbGl6YXRpb24gb3IgZXZlbiBkZWR1cGxp Y2F0aW9uOyBpdCBzaW1wbHkKbWFrZXMgYSByZWNvcmQgZm9yIGV2ZXJ5IHF1ZXJ5IHBsYW5uZWQu CgpJdCBjYW4gYmUgdXNlZnVsIHRvIGVuYWJsZSBxdWVyeSBJRCBjb21wdXRhdG9uIGJlZm9yZSB1 c2luZyB0aGUKbW9kdWxlLCBidXQgaXQncyBub3QgcmVxdWlyZWQuIElmIG5vdCBkb25lLCBhbGwg cXVlcmllcyB3aWxsIHNpbXBseQpzaG93IGEgcXVlcnkgSUQgb2YgemVyby4KClJldmlld2VkLWJ5 OiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3NzQGdtYWlsLmNvbT4gKGVhcmxpZXIg dmVyc2lvbikKLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICB8 ICAyOSArCiBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jICAgICAgICAgfCA2 NDEgKysrKysrKysrKysrKysrKysrCiAuLi4vZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAg ICAgICAgICAgICAgfCAgNjkgKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNl LmMgICAgICAgICB8IDMwMyArKysrKysrKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVz b24uYnVpbGQgICAgICAgICB8ICA0MSArKwogLi4uL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3Fs ICAgICAgICAgICAgICAgIHwgIDQzICsrCiAuLi4vcGdfY29sbGVjdF9hZHZpY2UuY29udHJvbCAg ICAgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xs ZWN0X2FkdmljZS5oIHwgIDM5ICsrCiAuLi4vcGdfY29sbGVjdF9hZHZpY2Uvc3FsL2xvY2FsX2Nv bGxlY3Rvci5zcWwgfCAgNDYgKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvdC8wMDFfcmVn cmVzcy5wbCAgICB8IDE1MSArKysrKwogZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCAgICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdjb2xsZWN0YWR2aWNlLnNnbWwgICAg ICAgICAgICAgfCAyNDQgKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgICAgIHwgICA2ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDE2MjEgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9leHBlY3RlZC9s b2NhbF9jb2xsZWN0b3Iub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9pbnRlcmZhY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVj dF9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxl Y3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5jb250cm9sCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2Fkdmlj ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9j YWxfY29sbGVjdG9yLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9h ZHZpY2UvdC8wMDFfcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9w Z2NvbGxlY3RhZHZpY2Uuc2dtbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250 cmliL01ha2VmaWxlCmluZGV4IGRkMDRjMjBhY2QyLi4yMjA3MTAzNGU1MSAxMDA2NDQKLS0tIGEv Y29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBA IFNVQkRJUlMgPSBcCiAJCXBhZ2VpbnNwZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCiAJCXBnX2J1 ZmZlcmNhY2hlCVwKKwkJcGdfY29sbGVjdF9hZHZpY2UgXAogCQlwZ19mcmVlc3BhY2VtYXAgXAog CQlwZ19sb2dpY2FsaW5zcGVjdCBcCiAJCXBnX292ZXJleHBsYWluIFwKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IDVhNzUyZWFjMzQ3 Li5mZjQyMmQ5YjdmYyAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysgYi9jb250 cmliL21lc29uLmJ1aWxkCkBAIC00NSw2ICs0NSw3IEBAIHN1YmRpcigncGFnZWluc3BlY3QnKQog c3ViZGlyKCdwYXNzd29yZGNoZWNrJykKIHN1YmRpcigncGdfYnVmZmVyY2FjaGUnKQogc3ViZGly KCdwZ2NyeXB0bycpCitzdWJkaXIoJ3BnX2NvbGxlY3RfYWR2aWNlJykKIHN1YmRpcigncGdfZnJl ZXNwYWNlbWFwJykKIHN1YmRpcigncGdfbG9naWNhbGluc3BlY3QnKQogc3ViZGlyKCdwZ19vdmVy ZXhwbGFpbicpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxl IGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMzNmNzE1NjA2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjkgQEAKKyMgY29udHJp Yi9wZ19jb2xsZWN0X2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfY29sbGVjdF9h ZHZpY2UKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCWNvbGxlY3Rvci5vIFwKKwlpbnRlcmZh Y2UubworCitFWFRFTlNJT04gPSBwZ19jb2xsZWN0X2FkdmljZQorREFUQSA9IHBnX2NvbGxlY3Rf YWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gInBnX2NvbGxlY3RfYWR2aWNlIC0gY29sbGVj dCBxdWVyaWVzIGFuZCB0aGVpciBwbGFuIGFkdmljZSBzdHJpbmdzIgorCitSRUdSRVNTID0gbG9j YWxfY29sbGVjdG9yCitUQVBfVEVTVFMgPSAxCisKKyMgcmVxdWlyZWQgZm9yIDAwMV9yZWdyZXNz LnBsCitSRUdSRVNTX1NITElCPSQoYWJzX3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9y ZWdyZXNzJChETFNVRkZJWCkKK2V4cG9ydCBSRUdSRVNTX1NITElCCisKK2lmZGVmIFVTRV9QR1hT CitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1w Z3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL3BnX2NvbGxlY3Rf YWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3Jj L01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1n bG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2Nv bGxlY3Rvci5jIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9jb2xsZWN0b3IuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDUzYTIyMjQ1YjIKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jCkBAIC0wLDAgKzEs NjQxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb2xsZWN0b3IuYworICoJICB3b3Jr aG9yc2UgZm9yIHNhdmluZyBwbGFuIGFkdmljZSBpbiBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBt ZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvY29s bGVjdG9yLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdy ZXMuaCIKKworI2luY2x1ZGUgInBnX2NvbGxlY3RfYWR2aWNlLmgiCisKKyNpbmNsdWRlICJkYXRh dHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1w LmgiCisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UpOwor UEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UpOworCisj ZGVmaW5lIEFEVklDRV9DSFVOS19TSVpFCQkxMDI0CisjZGVmaW5lIEFEVklDRV9DSFVOS19BUlJB WV9TSVpFCTY0CisKKyNkZWZpbmUJUEdfR0VUX0FEVklDRV9DT0xVTU5TCTcKKworLyoKKyAqIEFk dmljZSBleHRyYWN0ZWQgZnJvbSBvbmUgcXVlcnkgcGxhbiwgdG9nZXRoZXIgd2l0aCB0aGUgcXVl cnkgc3RyaW5nCisgKiBhbmQgdmFyaW91cyBvdGhlciBpZGVudGlmeWluZyBkZXRhaWxzLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UKK3sKKwlPaWQJCQl1c2VyaWQ7 CQkJLyogdXNlciBPSUQgKi8KKwlPaWQJCQlkYmlkOwkJCS8qIGRhdGFiYXNlIE9JRCAqLworCXVp bnQ2NAkJcXVlcnlpZDsJCS8qIHF1ZXJ5IGlkZW50aWZpZXIgKi8KKwlUaW1lc3RhbXBUeiB0aW1l c3RhbXA7CQkvKiBxdWVyeSB0aW1lc3RhbXAgKi8KKwlpbnQJCQlhZHZpY2Vfb2Zmc2V0OwkvKiBz dGFydCBvZiBhZHZpY2UgaW4gdGV4dHVhbCBkYXRhICovCisJY2hhcgkJdGV4dHVhbF9kYXRhW0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHBnY2FfY29sbGVjdGVkX2FkdmljZTsKKworLyoKKyAq IEEgYnVuY2ggb2YgcG9pbnRlcnMgdG8gcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdHMsIHN0 b3JlZCBpbgorICogYmFja2VuZC1sb2NhbCBtZW1vcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBn Y2FfbG9jYWxfYWR2aWNlX2NodW5rCit7CisJcGdjYV9jb2xsZWN0ZWRfYWR2aWNlICplbnRyaWVz W0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdjYV9sb2NhbF9hZHZpY2VfY2h1bms7CisKKy8qCisg KiBJbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHBnY2FfY29sbGVjdGVkX2FkdmljZSBvYmpl Y3RzIHRoYXQgd2UncmUKKyAqIHN0b3JpbmcgaW4gbG9jYWwgbWVtb3J5LgorICoKKyAqIFdlIGFz c2lnbiBjb25zZWN1dGl2ZSBJRHMsIHN0YXJ0aW5nIGZyb20gMCwgdG8gZWFjaCBwZ2NhX2NvbGxl Y3RlZF9hZHZpY2UKKyAqIG9iamVjdCB0aGF0IHdlIHN0b3JlLiBUaGUgYWN0dWFsIHN0b3JhZ2Ug aXMgYW4gYXJyYXkgb2YgY2h1bmtzLCB3aGljaAorICogaGVscHMga2VlcCBtZW1jcHkoKSBvdmVy aGVhZCBsb3cgd2hlbiB3ZSBzdGFydCBkaXNjYXJkaW5nIG9sZGVyIGRhdGEuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBnY2FfbG9jYWxfYWR2aWNlCit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2 NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxv Y2F0ZWRfc2l6ZTsKKwlwZ2NhX2xvY2FsX2FkdmljZV9jaHVuayAqKmNodW5rczsKK30gcGdjYV9s b2NhbF9hZHZpY2U7CisKKy8qCisgKiBKdXN0IGxpa2UgcGdjYV9sb2NhbF9hZHZpY2VfY2h1bmss IGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJlZCBhcmVhLAorICogc28gd2UgbXVzdCB1c2Ug ZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUgcG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IHBnY2Ffc2hhcmVkX2FkdmljZV9jaHVuaworeworCWRzYV9wb2ludGVyIGVudHJpZXNbQURW SUNFX0NIVU5LX1NJWkVdOworfSBwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bms7CisKKy8qCisgKiBK dXN0IGxpa2UgcGdjYV9sb2NhbF9hZHZpY2UsIGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJl ZCBhcmVhLCBzbworICogd2UgbXVzdCB1c2UgZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUg cG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnY2Ffc2hhcmVkX2FkdmljZQoreworCXVp bnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJ aW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJZHNhX3BvaW50ZXIgY2h1bmtzOwor fSBwZ2NhX3NoYXJlZF9hZHZpY2U7CisKKy8qIFBvaW50ZXJzIHRvIGxvY2FsIGFuZCBzaGFyZWQg Y29sbGVjdG9ycyAqLworc3RhdGljIHBnY2FfbG9jYWxfYWR2aWNlICpsb2NhbF9jb2xsZWN0b3Ig PSBOVUxMOworc3RhdGljIHBnY2Ffc2hhcmVkX2FkdmljZSAqc2hhcmVkX2NvbGxlY3RvciA9IE5V TEw7CisKKy8qIFN0YXRpYyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2UgKm1ha2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLAorCQkJCQkJCQkJCQkJCU9pZCBk YmlkLAorCQkJCQkJCQkJCQkJCXVpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkJCQkJCVRpbWVzdGFt cFR6IHRpbWVzdGFtcCwKKwkJCQkJCQkJCQkJCQljb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJ CQkJCQkJCQkJCQkJY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJCQkJCQlkc2Ff YXJlYSAqYXJlYSwKKwkJCQkJCQkJCQkJCQlkc2FfcG9pbnRlciAqcmVzdWx0KTsKK3N0YXRpYyB2 b2lkIHN0b3JlX2xvY2FsX2FkdmljZShwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKTsKK3N0YXRp YyB2b2lkIHRyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBzdG9yZV9z aGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpOworc3RhdGljIHZvaWQgdHJpbV9z aGFyZWRfYWR2aWNlKGRzYV9hcmVhICphcmVhLCBpbnQgbGltaXQpOworCisvKiBIZWxwZXIgZnVu Y3Rpb24gdG8gZXh0cmFjdCB0aGUgcXVlcnkgc3RyaW5nIGZyb20gcGdjYV9jb2xsZWN0ZWRfYWR2 aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorcXVlcnlfc3RyaW5nKHBnY2FfY29s bGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGE7Cit9CisKKy8q IEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBhZHZpY2Ugc3RyaW5nIGZyb20gcGdjYV9j b2xsZWN0ZWRfYWR2aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorYWR2aWNlX3N0 cmluZyhwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9k YXRhICsgY2EtPmFkdmljZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBTdG9yZSBjb2xsZWN0ZWQgcXVl cnkgYWR2aWNlIGludG8gdGhlIGxvY2FsIG9yIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLAorICog YXMgYXBwcm9wcmlhdGUuCisgKi8KK3ZvaWQKK3BnX2NvbGxlY3RfYWR2aWNlX3NhdmUodWludDY0 IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJICAgY29uc3QgY2hhciAq YWR2aWNlX3N0cmluZykKK3sKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKwlPaWQJCQlk YmlkID0gTXlEYXRhYmFzZUlkOworCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3Rh bXAoKTsKKworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3IgJiYKKwkJcGdf Y29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlwZ2NhX2Nv bGxlY3RlZF9hZHZpY2UgKmNhOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19jb2xsZWN0X2FkdmljZV9nZXRfbWN4 dCgpKTsKKwkJY2EgPSBtYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlk LCBub3csCisJCQkJCQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJ ICAgTlVMTCwgTlVMTCk7CisJCXN0b3JlX2xvY2FsX2FkdmljZShjYSk7CisJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlpZiAocGdfY29sbGVjdF9hZHZpY2Vfc2hh cmVkX2NvbGxlY3RvciAmJgorCQlwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9s aW1pdCA+IDApCisJeworCQlkc2FfYXJlYSAgICphcmVhID0gcGdfY29sbGVjdF9hZHZpY2VfZHNh X2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2FfcG9pbnRlciA9IEludmFsaWREc2FQb2ludGVyOyAv KiBwbGFjYXRlIGNvbXBpbGVyICovCisKKwkJbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKHVzZXJpZCwg ZGJpZCwgcXVlcnlJZCwgbm93LAorCQkJCQkJCSAgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5n LCBhcmVhLAorCQkJCQkJCSAgJmNhX3BvaW50ZXIpOworCQlzdG9yZV9zaGFyZWRfYWR2aWNlKGNh X3BvaW50ZXIpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmaWxsIGEgbmV3IHBnY2Ff Y29sbGVjdGVkX2FkdmljZSBvYmplY3QuCisgKgorICogSWYgYXJlYSAhPSBOVUxMLCBpdCBpcyB1 c2VkIHRvIGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0LCBhbmQgdGhlIHJlc3VsdGluZworICogZHNh X3BvaW50ZXIgaXMgcmV0dXJuZWQgdmlhICpyZXN1bHQuCisgKgorICogSWYgYXJlYSA9PSBOVUxM LCB0aGUgbmV3IG9iamVjdCBpcyBhbGxvY2F0ZWQgaW4gdGhlIGN1cnJlbnQgbWVtb3J5IGNvbnRl eHQsCisgKiBhbmQgcmVzdWx0IGlzIG5vdCBleGFtaW5lZCBvciBtb2RpZmllZC4KKyAqLworc3Rh dGljIHBnY2FfY29sbGVjdGVkX2FkdmljZSAqCittYWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVz ZXJpZCwgT2lkIGRiaWQsIHVpbnQ2NCBxdWVyeUlkLAorCQkJCQkgIFRpbWVzdGFtcFR6IHRpbWVz dGFtcCwKKwkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCSAgY29uc3QgY2hh ciAqYWR2aWNlX3N0cmluZywKKwkJCQkJICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJl c3VsdCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3Ry aW5nKSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vf c3RyaW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdjYV9jb2xsZWN0ZWRfYWR2 aWNlICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBnY2FfY29sbGVjdGVkX2Fkdmlj ZSwgdGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5n X2xlbmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0 aCk7CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5n dGgpOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+ dXNlcmlkID0gdXNlcmlkOworCWNhLT5kYmlkID0gZGJpZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5 SWQ7CisJY2EtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1 ZXJ5X3N0cmluZ19sZW5ndGg7CisKKwltZW1jcHkoY2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3Ry aW5nLCBxdWVyeV9zdHJpbmdfbGVuZ3RoKTsKKwltZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2Et PmFkdmljZV9vZmZzZXRdLAorCQkgICBhZHZpY2Vfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0 aCk7CisKKwlyZXR1cm4gY2E7Cit9CisKKy8qCisgKiBBZGQgYSBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2Ugb2JqZWN0IHRvIG91ciBiYWNrZW5kLWxvY2FsIGFkdmljZSBjb2xsZWN0aW9uLgorICoKKyAq IENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3dpdGNoaW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBt ZW1vcnkgY29udGV4dDsKKyAqIHRoZSBwcm92aWRlZCBvYmplY3Qgc2hvdWxkIGhhdmUgYmVlbiBh bGxvY2F0ZWQgaW4gdGhhdCBzYW1lIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkCitzdG9yZV9s b2NhbF9hZHZpY2UocGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNodW5r X251bWJlcjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ2NhX2xvY2FsX2FkdmljZSAqbGEg PSBsb2NhbF9jb2xsZWN0b3I7CisKKwkvKiBJZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3RvciBp c24ndCBpbml0aWFsaXplZCB5ZXQsIGRvIHRoYXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxMKQor CXsKKwkJbGEgPSBwYWxsb2MwKHNpemVvZihwZ2NhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+Y2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEt PmNodW5rcyA9IHBhbGxvYzBfYXJyYXkocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJ CQkJICAgbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVjdG9y ID0gbGE7CisJfQorCisJLyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0 b3JlIHRoaXMgYWR2aWNlLiAqLworCWNodW5rX251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxhLT5i YXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChsYS0+bmV4dF9p ZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNodW5r IGFycmF5LCBpZiBuZWVkZWQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBsYS0+Y2h1bmtfYXJy YXlfYWxsb2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQluZXdfc2l6ZSA9 IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpF OworCQlsYS0+Y2h1bmtzID0gcmVwYWxsb2MwX2FycmF5KGxhLT5jaHVua3MsCisJCQkJCQkJCQkg cGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJCSBsYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUsCisJCQkJCQkJCQkgbmV3X3NpemUpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgY2h1bmssIGlm IG5lZWRlZC4gKi8KKwlpZiAobGEtPmNodW5rc1tjaHVua19udW1iZXJdID09IE5VTEwpCisJCWxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9IHBhbGxvYzBfb2JqZWN0KHBnY2FfbG9jYWxfYWR2aWNl X2NodW5rKTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICov CisJQXNzZXJ0KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRd ID09IE5VTEwpOworCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZz ZXRdID0gY2E7CisJKytsYS0+bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBz dG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXRyaW1fbG9jYWxfYWR2aWNlKHBn X2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQpOworfQorCisvKgorICogQWRk IGEgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xs ZWN0aW9uLgorICoKKyAqICdjYV9wb2ludGVyJyBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBm cm9tIHRoZSBwZ19jb2xsZWN0X2FkdmljZSBEU0EgYXJlYQorICogYW5kIHNob3VsZCBwb2ludCB0 byBhbiBvYmplY3Qgb2YgdHlwZSBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UuCisgKi8KK3N0YXRpYyB2 b2lkCitzdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpCit7CisJdWlu dDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdjYV9zaGFyZWRf c3RhdGUgKnN0YXRlID0gcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAq YXJlYSA9IHBnX2NvbGxlY3RfYWR2aWNlX2RzYV9hcmVhKCk7CisJcGdjYV9zaGFyZWRfYWR2aWNl ICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCXBn Y2Ffc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkvKiBMb2NrIHRoZSBzaGFyZWQgc3Rh dGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkv KgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0 b3IgeWV0LCBmaXggdGhhdCBub3cuCisJICogSWYgd2UncmUgdGhlIGZpcnN0IG9uZXMgdG8gYXR0 YWNoLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoc2EgPT0g TlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9p bnRlcikKKwkJCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0KKwkJCQlkc2FfYWxsb2NhdGUwKGFy ZWEsIHNpemVvZihwZ2NhX3NoYXJlZF9hZHZpY2UpKTsKKwkJc2hhcmVkX2NvbGxlY3RvciA9IHNh ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9CisK KwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhY2tlbmQgbWF5IGhhdmUg c3VjY2VlZGVkIGluIGNyZWF0aW5nCisJICogdGhlIG1haW4gY29sbGVjdG9yIG9iamVjdCBidXQg ZmFpbGVkIHRvIGFsbG9jYXRlIGFuIGluaXRpYWwgY2h1bmsKKwkgKiBhcnJheSwgc28gd2UgbXVz dCBiZSBwcmVwYXJlZCB0byBhbGxvY2F0ZSB0aGUgY2h1bmsgYXJyYXkgaGVyZSB3aGV0aGVyCisJ ICogb3Igbm90IHdlIGNyZWF0ZWQgdGhlIGNvbGxlY3RvciBvYmplY3QuCisJICovCisJaWYgKHNo YXJlZF9jb2xsZWN0b3ItPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID09IDApCisJeworCQlz YS0+Y2h1bmtzID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwKKwkJCQkJCSAgc2l6ZW9mKGRzYV9w b2ludGVyKSAqIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFKTsKKwkJc2EtPmNodW5rX2FycmF5X2Fs bG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJfQorCisJLyogQ29tcHV0 ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNlLiAqLworCWNo dW5rX251bWJlciA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19T SVpFOworCWNodW5rX29mZnNldCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklD RV9DSFVOS19TSVpFOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBjaHVuayBhcnJheSBh bmQsIGlmIG5lZWRlZCwgZXh0ZW5kIGl0LiAqLworCWlmIChjaHVua19udW1iZXIgPj0gc2EtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisJCWRzYV9w b2ludGVyIG5ld19jaHVua3M7CisKKwkJLyoKKwkJICogRFNBIGNhbid0IGVubGFyZ2UgYW4gZXhp c3RpbmcgYWxsb2NhdGlvbiwgc28gd2UgbXVzdCBtYWtlIGEgbmV3CisJCSAqIGFsbG9jYXRpb24g YW5kIGNvcHkgZGF0YSBvdmVyLgorCQkgKi8KKwkJbmV3X3NpemUgPSBzYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbmV3X2NodW5rcyA9 IGRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIG5ld19zaXplKTsKKwkJ Y2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgbmV3X2NodW5rcyk7CisJCW1lbWNw eShjaHVua19hcnJheSwgZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpLAorCQkJICAg c2l6ZW9mKGRzYV9wb2ludGVyKSAqIHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJ CWRzYV9mcmVlKGFyZWEsIHNhLT5jaHVua3MpOworCQlzYS0+Y2h1bmtzID0gbmV3X2NodW5rczsK KwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCWVsc2UK KwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkv KiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY2h1bmssIGFsbG9jYXRpbmcgaXQgaWYg bmVlZGVkLiAqLworCWlmIChjaHVua19hcnJheVtjaHVua19udW1iZXJdID09IEludmFsaWREc2FQ b2ludGVyKQorCQljaHVua19hcnJheVtjaHVua19udW1iZXJdID0KKwkJCWRzYV9hbGxvY2F0ZTAo YXJlYSwgc2l6ZW9mKHBnY2Ffc2hhcmVkX2FkdmljZV9jaHVuaykpOworCWNodW5rID0gZHNhX2dl dF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCisJLyogU2F2ZSBw b2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQoY2h1bmstPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9PSBJbnZhbGlkRHNhUG9pbnRlcik7CisJY2h1bmstPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9IGNhX3BvaW50ZXI7CisJKytzYS0+bmV4dF9pZDsKKworCS8qIElmIHdl J3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXRy aW1fc2hhcmVkX2FkdmljZShhcmVhLCBwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdGlv bl9saW1pdCk7CisKKwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9j a1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFk dmljZSBzdG9yZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQorICog c3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAordHJpbV9sb2NhbF9hZHZpY2UoaW50 IGxpbWl0KQoreworCXBnY2FfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwl1 aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90 YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVt YWluaW5nX2NodW5rX2NvdW50OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUg bGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gbGEtPm5l eHRfaWQgLSBsYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQly ZXR1cm47CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8g dGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hp bGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2 NAkJY2h1bmtfb2Zmc2V0OworCisJCWNodW5rX251bWJlciA9IChsYS0+b2xkZXN0X2lkIC0gbGEt PmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChsYS0+b2xk ZXN0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJQXNzZXJ0KGxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IE5VTEwpOwor CQlwZnJlZShsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7 CisJCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gTlVM TDsKKwkJKytsYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBh bnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19j b3VudCA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJZm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCXBmcmVl KGxhLT5jaHVua3Nbbl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJh Y2sgdG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9 IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAt IDEpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxf Y2h1bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291 bnQgPiAwKQorCQltZW1tb3ZlKCZsYS0+Y2h1bmtzWzBdLCAmbGEtPmNodW5rc1t0cmltX2NodW5r X2NvdW50XSwKKwkJCQlzaXplb2YocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikgKiByZW1haW5p bmdfY2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5k LiAqLworCW1lbXNldCgmbGEtPmNodW5rc1tyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkg ICBzaXplb2YocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtf Y291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZh bHVlIGFjY29yZGluZ2x5LiAqLworCWxhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBB RFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBz dG9yZWQgaW4gc2hhcmVkIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGlt aXQuCisgKi8KK3N0YXRpYyB2b2lkCit0cmltX3NoYXJlZF9hZHZpY2UoZHNhX2FyZWEgKmFyZWEs IGludCBsaW1pdCkKK3sKKwlwZ2NhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3Rv cjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2 NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2 NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKwor CS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcg dG8gZG8uICovCisJY3VycmVudF9jb3VudCA9IHNhLT5uZXh0X2lkIC0gc2EtPm9sZGVzdF9pZDsK KwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJcmV0dXJuOworCisJLyogR2V0IGEgcG9p bnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJl c3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1 cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50 IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19u dW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1 bmsgKmNodW5rOworCisJCWNodW5rX251bWJlciA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2Vf aWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChzYS0+b2xkZXN0X2lk IC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0 X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisJCUFzc2VydChjaHVu ay0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IEludmFsaWREc2FQb2ludGVyKTsKKwkJZHNhX2Zy ZWUoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJCWNodW5rLT5lbnRyaWVz W2NodW5rX29mZnNldF0gPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwkJKytzYS0+b2xkZXN0X2lkOwor CQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBl bnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3VudCA9IChzYS0+b2xkZXN0X2lkIC0g c2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJZm9yICh1aW50NjQgbiA9IDA7IG4g PCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCWRzYV9mcmVlKGFyZWEsIGNodW5rX2FycmF5W25d KTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUg YmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1bmtfY291bnQgPSAoc2EtPm5leHRfaWQg LSBzYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9D SFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0g dHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVt bW92ZSgmY2h1bmtfYXJyYXlbMF0sICZjaHVua19hcnJheVt0cmltX2NodW5rX2NvdW50XSwKKwkJ CQlzaXplb2YoZHNhX3BvaW50ZXIpICogcmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERv bid0IGxlYXZlIHN0YWxlIHBvaW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQoJmNodW5rX2FycmF5 W3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihkc2FfcG9pbnRlcikgKiAo dG90YWxfY2h1bmtfY291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVz dCBiYXNlIElEIHZhbHVlIGFjY29yZGluZ2x5LiAqLworCXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1 bmtfY291bnQgKiBBRFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBm dW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1v cnkKKyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlpZiAobG9jYWxfY29sbGVjdG9yICE9IE5VTEwpCisJCXRyaW1fbG9jYWxf YWR2aWNlKDApOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJs ZSBmdW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQor ICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19jb2xsZWN0X2FkdmljZV9h dHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfY29sbGVjdF9hZHZpY2VfZHNhX2FyZWEo KTsKKworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJLyoK KwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9y IHlldCwgZml4IHRoYXQgbm93OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZl biBleGlzdCwgd2UgY2FuIHJldHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4K KwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3RvciA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5z aGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tSZWxl YXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJlZF9j b2xsZWN0b3IgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3Ip OworCX0KKworCS8qIERvIHRoZSByZWFsIHdvcmsgKi8KKwl0cmltX3NoYXJlZF9hZHZpY2UoYXJl YSwgMCk7CisKKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisKKwlQR19SRVRVUk5fVk9J RCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNvbGxl Y3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfZ2V0X2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2lu Zm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdjYV9sb2NhbF9h ZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgp OworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJaWYgKGxhID09IE5VTEwp CisJCXJldHVybiAoRGF0dW0pIDA7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJ Zm9yICh1aW50NjQgaWQgPSBsYS0+b2xkZXN0X2lkOyBpZCA8IGxhLT5uZXh0X2lkOyArK2lkKQor CXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlw Z2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dFVF9BRFZJQ0Vf Q09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10gPSB7MH07CisK KwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJCWNodW5rX29mZnNldCA9IChpZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpF OworCisJCWNhID0gbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNl dF07CisKKwkJaWYgKCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkpCisJ CQljb250aW51ZTsKKworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVl c1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVj dElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+ cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0oY2EtPnRpbWVzdGFt cCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7 CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOwor CisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERl c2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0pIDA7Cit9 CisKKy8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGlu IHNoYXJlZCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5T ZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUg PSBwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfY29s bGVjdF9hZHZpY2VfZHNhX2FyZWEoKTsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdj YV9zaGFyZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJT2lkCQkJdXNlcmlkID0g R2V0VXNlcklkKCk7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBM b2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExX X1NIQVJFRCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVk IGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICogYnV0IGlmIHRoZSBjb2xs ZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdpdGhvdXQgZG9pbmcKKwkg KiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRl LT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tS ZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJl ZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2Nv bGxlY3Rvcik7CisJfQorCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICov CisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkv KiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJZm9yICh1aW50NjQgaWQgPSBzYS0+b2xkZXN0 X2lkOyBpZCA8IHNhLT5uZXh0X2lkOyArK2lkKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7 CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNo dW5rOworCQlwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dF VF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10g PSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NI VU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklDRV9D SFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5 W2NodW5rX251bWJlcl0pOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVuay0+ZW50 cmllc1tjaHVua19vZmZzZXRdKTsKKworCQlpZiAoIW1lbWJlcl9jYW5fc2V0X3JvbGUodXNlcmlk LCBjYS0+dXNlcmlkKSkKKwkJCWNvbnRpbnVlOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERh dHVtKGlkKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJ dmFsdWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJ bnQ2NEdldERhdHVtKGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wVHpHZXRE YXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dldFRleHREYXR1bShx dWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRleHREYXR1bShhZHZp Y2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1 bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7CisJfQorCisJLyog UmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+ bG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19j b2xsZWN0X2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0IGIvY29udHJpYi9wZ19j b2xsZWN0X2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNTdiOTZlZTgzNQotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dApA QCAtMCwwICsxLDY5IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX2NvbGxlY3RfYWR2aWNlOworU0VU IGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworLS0gVHJ5IGNsZWFyaW5nIGFkdmljZSBiZWZv cmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBTZXQgYSBzbWFsbCBhZHZp Y2UgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBpdC4KK1NFVCBwZ19jb2xs ZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKy0tIEVuYWJsZSB0aGUgY29s bGVjdG9yLgorU0VUIHBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOworLS0g U2V0IHVwIGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlfdGFibGUgKGEgaW50IHBy aW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UsIHBh cmFsbGVsX3dvcmtlcnMgPSAwKTsKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00gZHVt bXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKKyBhIHwgYiB8IGEgfCBiIAorLS0tKy0tLSstLS0r LS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworIGEgfCBiIAorLS0t Ky0tLQorKDAgcm93cykKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2aWNlIGZyb20gdGhlIHNl Y29uZCB0ZXN0IHF1ZXJ5LgorU0VUIHBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9 IG9mZjsKK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp IE9SREVSIEJZIGlkIERFU0MgTElNSVQgMTsKKyAgICAgICAgIGFkdmljZSAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU0VRX1NDQU4oZHVtbXlfdGFibGUpICsKKyBOT19HQVRI RVIoZHVtbXlfdGFibGUpCisoMSByb3cpCisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFn YWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQg dGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19jb2xsZWN0X2Fkdmlj ZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5s b2NhbF9jb2xsZWN0b3IgPSBvbjsKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVzIHRocm91Z2gg dGhlIGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAgTE9PUAorCQlF WEVDVVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsKK0VORAorJCQ7 CistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZS T00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAg MjAwMAorKDEgcm93KQorCistLSBBbmQgY2xlYXIgb25lIG1vcmUgdGltZSwgdG8gdmVyaWZ5IHRo YXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0gZXZlbiB3aXRoIGEgbGFyZ2VyIG51 bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29s bGVjdF9hZHZpY2UvaW50ZXJmYWNlLmMgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2ludGVy ZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZWIxMTk3NDE1 MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNl LmMKQEAgLTAsMCArMSwzMDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGludGVyZmFj ZS5jCisgKgkgIGludGVyZmFjZSByb3V0aW5lcyBmb3IgdGhlIHBsYW4gYWR2aWNlIGNvbGxlY3Rv cgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9pbnRlcmZh Y2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgInBnX2NvbGxlY3RfYWR2aWNlLmgiCisKKyNpbmNsdWRlICJmdW5jYXBpLmgi CisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9y ZWdpc3RyeS5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisK Ky8qIFNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KK3N0YXRpYyBwZ2NhX3NoYXJlZF9zdGF0ZSAq cGdjYV9zdGF0ZSA9IE5VTEw7CitzdGF0aWMgZHNhX2FyZWEgKnBnY2FfZHNhX2FyZWEgPSBOVUxM OworCisvKiBHVUMgdmFyaWFibGVzICovCitib29sCQlwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9j b2xsZWN0b3IgPSBmYWxzZTsKK2ludAkJCXBnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rp b25fbGltaXQgPSAwOworYm9vbAkJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciA9 IGZhbHNlOworaW50CQkJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQg PSAwOworCisvKiBTaGFkb3cgdmFyaWFibGVzIGZvciBHVUMgYXNzaWduIGhvb2tzICovCitzdGF0 aWMgYm9vbCBwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNfYXNzaWduZWQgPSBm YWxzZTsKK3N0YXRpYyBib29sIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNf YXNzaWduZWQgPSBmYWxzZTsKKworLyogT3RoZXIgZmlsZS1sZXZlbCBnbG9iYWxzICovCitzdGF0 aWMgdm9pZCAoKnJlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb25fZm4pIChib29sIGFjdGl2YXRlKSA9 IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93bl9ob29rX3R5cGUgcHJldl9wbGFubmVyX3No dXRkb3duID0gTlVMTDsKK3N0YXRpYyBNZW1vcnlDb250ZXh0IHBnY2FfbWVtb3J5X2NvbnRleHQg PSBOVUxMOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCBwZ2NhX2lu aXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHBnY2Ff cGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJ CQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQkgIFBsYW5uZWRTdG10ICpw c3RtdCk7CitzdGF0aWMgdm9pZCBwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNz aWduX2hvb2soYm9vbCBuZXd2YWwsCisJCQkJCQkJCQkJCQkJCSAgdm9pZCAqZXh0cmEpOworc3Rh dGljIHZvaWQgcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rvcl9hc3NpZ25faG9vayhi b29sIG5ld3ZhbCwKKwkJCQkJCQkJCQkJCQkJICAgdm9pZCAqZXh0cmEpOworc3RhdGljIERlZkVs ZW0gKmZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUp OworCisvKgorICogSW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4KKyAqLwordm9pZAorX1BHX2luaXQo dm9pZCkKK3sKKwkvKgorCSAqIEdldCBhIHBvaW50ZXIgc28gd2UgY2FuIGNhbGwgcGdfcGxhbl9h ZHZpY2VfcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbi4KKwkgKgorCSAqIFdlIG5lZWQgdG8gZG8g dGhpcyBiZWZvcmUgZGVmaW5pbmcgY3VzdG9tIEdVQ3M7IG90aGVyd2lzZSwgb3VyIGFzc2lnbgor CSAqIGhvb2sgd2lsbCB0cnkgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBiZWZvcmUgaXQn cyBpbml0aWFsaXplZC4KKwkgKgorCSAqIFdlIGFsc28gbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBp bnN0YWxsaW5nIG91ciBvd24gaG9va3MsIHNvIHRoYXQgaWYKKwkgKiBwZ19wbGFuX2FkdmljZSBp cyBub3QgeWV0IGxvYWRlZCwgaXQgd2lsbCBpbnN0YWxsIGl0cyBob29rcyBiZWZvcmUgd2UKKwkg KiBpbnN0YWxsIG91cnMuIChTZWUgY29tbWVudHMgaW4gcGdjYV9wbGFubmVyX3NodXRkb3duLikK KwkgKi8KKwlyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuID0KKwkJbG9hZF9leHRlcm5hbF9m dW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLAorCQkJCQkJCSAgICJwZ19wbGFuX2FkdmljZV9yZXF1 ZXN0X2FkdmljZV9nZW5lcmF0aW9uIiwKKwkJCQkJCQkgICB0cnVlLCBOVUxMKTsKKworCS8qIERl ZmluZSBvdXIgR1VDcy4gKi8KKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX2NvbGxlY3Rf YWR2aWNlLmxvY2FsX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFibGUgdGhlIGxvY2FsIGFkdmlj ZSBjb2xsZWN0b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX2NvbGxlY3RfYWR2aWNl X2xvY2FsX2NvbGxlY3RvciwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19VU0VSU0VULAor CQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBwZ19jb2xsZWN0X2FkdmljZV9sb2Nh bF9jb2xsZWN0b3JfYXNzaWduX2hvb2ssCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9t SW50VmFyaWFibGUoInBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQiLAor CQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBwZXItYmFja2VuZCBtZW1v cnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxl Y3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19V U0VSU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5V TEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5zaGFy ZWRfY29sbGVjdG9yIiwKKwkJCQkJCQkgIkVuYWJsZSB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0 b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9j b2xsZWN0b3IsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJIDAs CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0 b3JfYXNzaWduX2hvb2ssCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tSW50VmFyaWFi bGUoInBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQki IyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gc2hhcmVkIG1lbW9yeSIsCisJCQkJCQkJ TlVMTCwKKwkJCQkJCQkmcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQs CisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19TVVNFVCwKKwkJCQkJ CQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCU1hcmtH VUNQcmVmaXhSZXNlcnZlZCgicGdfY29sbGVjdF9hZHZpY2UiKTsKKworCS8qIEluc3RhbGwgaG9v a3MgKi8KKwlwcmV2X3BsYW5uZXJfc2h1dGRvd24gPSBwbGFubmVyX3NodXRkb3duX2hvb2s7CisJ cGxhbm5lcl9zaHV0ZG93bl9ob29rID0gcGdjYV9wbGFubmVyX3NodXRkb3duOworfQorCisvKgor ICogSW5pdGlhbGl6ZSBzaGFyZWQgc3RhdGUgd2hlbiBmaXJzdCBjcmVhdGVkLgorICovCitzdGF0 aWMgdm9pZAorcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKK3sK KwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdjYV9zaGFyZWRfc3RhdGUgKikgcHRyOwor CisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssCisJCQkJCSBMV0xvY2tOZXdUcmFuY2hl SWQoInBnX2NvbGxlY3RfYWR2aWNlX2xvY2siKSk7CisJc3RhdGUtPmRzYV90cmFuY2hlID0gTFdM b2NrTmV3VHJhbmNoZUlkKCJwZ19jb2xsZWN0X2FkdmljZV9kc2EiKTsKKwlzdGF0ZS0+YXJlYSA9 IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9IEludmFsaWRE c2FQb2ludGVyOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBhIG1lbW9yeSBjb250 ZXh0IHdoZXJlIGxvbmctbGl2ZWQgZGF0YSBtYW5hZ2VkIGJ5IHRoaXMKKyAqIG1vZHVsZSBjYW4g YmUgc3RvcmVkLgorICovCitNZW1vcnlDb250ZXh0CitwZ19jb2xsZWN0X2FkdmljZV9nZXRfbWN4 dCh2b2lkKQoreworCWlmIChwZ2NhX21lbW9yeV9jb250ZXh0ID09IE5VTEwpCisJCXBnY2FfbWVt b3J5X2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCQkJCQkicGdfY29sbGVjdF9hZHZpY2UiLAorCQkJCQkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCisJcmV0dXJuIHBnY2FfbWVtb3J5X2NvbnRleHQ7Cit9CisKKy8qCisg KiBHZXQgYSBwb2ludGVyIHRvIG91ciBzaGFyZWQgc3RhdGUuCisgKgorICogSWYgbm8gc2hhcmVk IHN0YXRlIGV4aXN0cywgY3JlYXRlIGFuZCBpbml0aWFsaXplIGl0LiBJZiBpdCBkb2VzIGV4aXN0 IGJ1dAorICogdGhpcyBiYWNrZW5kIGhhcyBub3QgeWV0IGFjY2Vzc2VkIGl0LCBhdHRhY2ggdG8g aXQuIE90aGVyd2lzZSwganVzdCByZXR1cm4KKyAqIG91ciBjYWNoZWQgcG9pbnRlci4KKyAqLwor cGdjYV9zaGFyZWRfc3RhdGUgKgorcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKHZvaWQpCit7CisJ aWYgKHBnY2Ffc3RhdGUgPT0gTlVMTCkKKwl7CisJCWJvb2wJCWZvdW5kOworCisJCXBnY2Ffc3Rh dGUgPQorCQkJR2V0TmFtZWREU01TZWdtZW50KCJwZ19jb2xsZWN0X2FkdmljZSIsIHNpemVvZihw Z2NhX3NoYXJlZF9zdGF0ZSksCisJCQkJCQkJICAgcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSwgJmZv dW5kLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gcGdjYV9zdGF0ZTsKK30KKworLyoKKyAqIFJldHVy biBhIHBvaW50ZXIgdG8gcGdfY29sbGVjdF9hZHZpY2UncyBEU0EgYXJlYSwgY3JlYXRpbmcgaXQg aWYgbmVlZGVkLgorICovCitkc2FfYXJlYSAqCitwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSh2 b2lkKQoreworCWlmIChwZ2NhX2RzYV9hcmVhID09IE5VTEwpCisJeworCQlwZ2NhX3NoYXJlZF9z dGF0ZSAqc3RhdGUgPSBwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2goKTsKKwkJZHNhX2hhbmRsZQlh cmVhX2hhbmRsZTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfY29sbGVjdF9hZHZpY2VfZ2V0X21jeHQoKSk7CisK KwkJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWFyZWFfaGFu ZGxlID0gc3RhdGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFM SUQpCisJCXsKKwkJCXBnY2FfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHN0YXRlLT5kc2FfdHJhbmNo ZSk7CisJCQlkc2FfcGluKHBnY2FfZHNhX2FyZWEpOworCQkJc3RhdGUtPmFyZWEgPSBkc2FfZ2V0 X2hhbmRsZShwZ2NhX2RzYV9hcmVhKTsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXBn Y2FfZHNhX2FyZWEgPSBkc2FfYXR0YWNoKGFyZWFfaGFuZGxlKTsKKwkJfQorCisJCWRzYV9waW5f bWFwcGluZyhwZ2NhX2RzYV9hcmVhKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisJfQorCisJcmV0dXJuIHBnY2FfZHNhX2FyZWE7Cit9CisKKy8qCisgKiBBZnRlciBw bGFubmluZyBpcyBjb21wbGV0ZSwgcmV0cmlldmUgdGhlIGFkdmljZSBzdHJpbmcsIGlmIHByZXNl bnQsIGFuZAorICogcGFzcyBpdCB0aHJvdWdoIHRvIHRoZSBjb2xsZWN0b3IuCisgKi8KK3N0YXRp YyB2b2lkCitwZ2NhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkg KnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBz dG10KQoreworCURlZkVsZW0gICAgKnBncGFfaXRlbTsKKwlEZWZFbGVtICAgICphZHZpY2Vfc3Ry aW5nX2l0ZW07CisJY2hhcgkgICAqYWR2aWNlX3N0cmluZzsKKworCS8qCisJICogUGFzcyBjYWxs IHRvIHByZXZpb3VzIGhvb2suCisJICoKKwkgKiBXZSB3YW50IHRvIGJlIGNhbGxlZCBhZnRlciBw Z19wbGFuX2FkdmljZSdzIHNodXRkb3duIGhvb2sgaGFzIGFscmVhZHkKKwkgKiBleGVjdXRlZC4g T3VyIF9QR19pbml0KCkgbWFrZXMgc3VyZSB0aGF0IHBnX3BsYW5fYWR2aWNlJ3MgaG9va3MgYXJl CisJICogYWx3YXlzIGxvYWRlZCBiZWZvcmUgb3VycywgYW5kIGhlcmUgd2UgcGFzcyB0aGUgaG9v ayBjYWxsIGRvd24gZmlyc3QsCisJICogYmVmb3JlIGRvaW5nIG91ciBvd24gd29yay4gVGhlIGNv bWJpbmF0aW9uIG9mIHRob3NlIHR3byB0aGluZ3Mgc2hvdWxkCisJICogYmUgZ29vZCBlbm91Z2gg dG8gZW5zdXJlIHRoYXQgdGhlIGFkdmljZSBzdHJpbmcgaXMgYWxyZWFkeSBwcmVzZW50IHdoZW4K KwkgKiB3ZSBnbyBsb29raW5nIGZvciBpdC4KKwkgKi8KKwlpZiAocHJldl9wbGFubmVyX3NodXRk b3duKQorCQkoKnByZXZfcGxhbm5lcl9zaHV0ZG93bikgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJp bmcsIHBzdG10KTsKKworCS8qIEZpc2ggb3V0IHRoZSBhZHZpY2Ugc3RyaW5nLiBJZiBub3QgZm91 bmQsIGRvIG5vdGhpbmcuICovCisJcGdwYV9pdGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUo cHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJCQkJCQkicGdfcGxhbl9hZHZpY2UiKTsKKwlp ZiAocGdwYV9pdGVtID09IE5VTEwpCisJCXJldHVybjsKKwlhZHZpY2Vfc3RyaW5nX2l0ZW0gPSBm aW5kX2RlZmVsZW1fYnlfZGVmbmFtZSgoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZywKKwkJCQkJCQkJ CQkJCSAiYWR2aWNlX3N0cmluZyIpOworCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gPT0gTlVMTCkK KwkJcmV0dXJuOworCWFkdmljZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5h cmcpOworCisJLyoKKwkgKiBQYXNzIGl0IHRocm91Z2ggdG8gdGhlIGFjdHVhbCBjb2xsZWN0b3Iu IEJ1dCwgaWYgaXQncyB0aGUgZW1wdHkgc3RyaW5nLAorCSAqIHdlIGFzc3VtZSB0aGF0IGNvbGxl Y3RpbmcgaXQgaXMgdW5pbnRlcmVzdGluZy4KKwkgKi8KKwlpZiAoYWR2aWNlX3N0cmluZ1swXSAh PSAnXDAnKQorCQlwZ19jb2xsZWN0X2FkdmljZV9zYXZlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9z dHJpbmcsIGFkdmljZV9zdHJpbmcpOworfQorCisvKgorICogcGdjYV9wbGFubmVyX3NodXRkb3du IHdvbid0IGZpbmQgYW55IGFkdmljZSB0byBjb2xsZWN0IHVubGVzcyB3ZSd2ZQorICogcmVxdWVz dGVkIHRoYXQgaXQgYmUgZ2VuZXJhdGVkLiBTbywgd2hlbmV2ZXIgdGhlIGVmZmVjdGl2ZSB2YWx1 ZSBvZgorICogcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yIGNoYW5nZXMsIGVpdGhl ciBtYWtlIG9yCisgKiByZXZva2UgYSByZXF1ZXN0IGZvciBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAq Lworc3RhdGljIHZvaWQKK3BnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rvcl9hc3NpZ25f aG9vayhib29sIG5ld3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJaWYgKHBnX2NvbGxlY3RfYWR2aWNl X2xvY2FsX2NvbGxlY3Rvcl9hc19hc3NpZ25lZCAmJiAhbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2 aWNlX2dlbmVyYXRpb25fZm4pIChmYWxzZSk7CisJaWYgKCFwZ19jb2xsZWN0X2FkdmljZV9sb2Nh bF9jb2xsZWN0b3JfYXNfYXNzaWduZWQgJiYgbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2aWNlX2dl bmVyYXRpb25fZm4pICh0cnVlKTsKKwlwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3Jf YXNfYXNzaWduZWQgPSBuZXd2YWw7Cit9CisKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBidXQgZm9y IHBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3IKKyAqLworc3RhdGljIHZvaWQKK3Bn X2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNzaWduX2hvb2soYm9vbCBuZXd2YWws IHZvaWQgKmV4dHJhKQoreworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9y X2FzX2Fzc2lnbmVkICYmICFuZXd2YWwpCisJCSgqcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbl9m bikgKGZhbHNlKTsKKwlpZiAoIXBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNf YXNzaWduZWQgJiYgbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb25fZm4pICh0 cnVlKTsKKwlwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0g bmV3dmFsOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9y IGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5 X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUo RGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwg ZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxMOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRy aWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmNhN2Q1ZWNmZjFhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19jb2xsZWN0X2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDQxIEBACisjIENvcHlyaWdo dCAoYykgMjAyMi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitw Z19jb2xsZWN0X2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdjb2xsZWN0b3IuYycsCisgICdp bnRlcmZhY2UuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19jb2xs ZWN0X2FkdmljZV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0 cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdfY29sbGVjdF9hZHZpY2UnLAorICAgICctLUZJ TEVERVNDJywgJ3BnX2NvbGxlY3RfYWR2aWNlIC0gY29sbGVjdCBxdWVyaWVzIGFuZCB0aGVpciBw bGFuIGFkdmljZSBzdHJpbmdzJyxdKQorZW5kaWYKKworcGdfY29sbGVjdF9hZHZpY2UgPSBzaGFy ZWRfbW9kdWxlKCdwZ19jb2xsZWN0X2FkdmljZScsCisgIHBnX2NvbGxlY3RfYWR2aWNlX3NvdXJj ZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwKKyAg a3dhcmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX2NvbGxl Y3RfYWR2aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3Fs JywKKyAgJ3BnX2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0 YV9hcmdzLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3BnX2NvbGxlY3RfYWR2aWNlJywK KyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJl bnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAnbG9j YWxfY29sbGVjdG9yJywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsK KyAgICAgICd0LzAwMV9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4wLnNxbCBiL2Nv bnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UtLTEuMC5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiZTg2YzU0ZmMxCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4w LnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2Nv bGxlY3RfYWR2aWNlLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3Vy Y2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2Ug IkNSRUFURSBFWFRFTlNJT04gcGdfY29sbGVjdF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBc cXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp CitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVk X2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf Y2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0Ug QyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1c2VyaWQgb2lkLAorCU9VVCBkYmlkIG9pZCwKKwlP VVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKwlP VVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNlIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3Jk CitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlJwor TEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3No YXJlZF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJp ZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0 YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNF VE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBw Z19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIEZST00gUFVCTElDOworUkVWT0tFIEFM TCBPTiBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJ QzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZp Y2UuY29udHJvbCBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2Uu Y29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjAxZTVlMjRl YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxl Y3RfYWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX2NvbGxlY3RfYWR2aWNlIGV4 dGVuc2lvbgorY29tbWVudCA9ICdjb2xsZWN0IHF1ZXJpZXMgYW5kIHRoZSBhc3NvY2lhdGVkIHBs YW4gYWR2aWNlJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICck bGliZGlyL3BnX2NvbGxlY3RfYWR2aWNlJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQg YS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmggYi9jb250cmli L3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ4MGMyYzYzM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCkBAIC0wLDAgKzEsMzkg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX2NvbGxlY3RfYWR2aWNlLmgKKyAqCSAg ZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucyBmb3IgcGdfY29sbGVjdF9hZHZpY2UgbW9kdWxl CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxl Y3RfYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19DT0xM RUNUX0FEVklDRV9ICisjZGVmaW5lIFBHX0NPTExFQ1RfQURWSUNFX0gKKworI2luY2x1ZGUgInN0 b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVkZWYgc3RydWN0 IHBnY2Ffc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hl OworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVjdG9yOworfSBw Z2NhX3NoYXJlZF9zdGF0ZTsKKworLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJuIGJvb2wgcGdf Y29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yOworZXh0ZXJuIGludAlwZ19jb2xsZWN0X2Fk dmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGJvb2wgcGdfY29sbGVjdF9hZHZp Y2Vfc2hhcmVkX2NvbGxlY3RvcjsKK2V4dGVybiBpbnQJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVk X2NvbGxlY3Rpb25fbGltaXQ7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVybiBN ZW1vcnlDb250ZXh0IHBnX2NvbGxlY3RfYWR2aWNlX2dldF9tY3h0KHZvaWQpOworZXh0ZXJuIHBn Y2Ffc2hhcmVkX3N0YXRlICpwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2godm9pZCk7CitleHRlcm4g ZHNhX2FyZWEgKnBnX2NvbGxlY3RfYWR2aWNlX2RzYV9hcmVhKHZvaWQpOworZXh0ZXJuIHZvaWQg cGdfY29sbGVjdF9hZHZpY2Vfc2F2ZSh1aW50NjQgcXVlcnlJZCwgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJCQkgICBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0 b3Iuc3FsIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDFiMTg3YzUzNzUKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3NxbC9sb2NhbF9jb2xs ZWN0b3Iuc3FsCkBAIC0wLDAgKzEsNDYgQEAKK0NSRUFURSBFWFRFTlNJT04gcGdfY29sbGVjdF9h ZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKKy0tIFRyeSBjbGVhcmlu ZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxFQ1QgcGdfY2xlYXJfY29s bGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBTZXQgYSBzbWFsbCBhZHZpY2UgY29sbGVjdGlv biBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBpdC4KK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5s b2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKworLS0gRW5hYmxlIHRoZSBjb2xsZWN0b3IuCitT RVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CisKKy0tIFNldCB1cCBh IGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBwcmltYXJ5IGtl eSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93 b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00gZHVtbXlfdGFi bGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGU7CisKKy0tIFNo b3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBw Z19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvZmY7CitTRUxFQ1QgYWR2aWNlIEZS T00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlU IDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWluLgorU0VMRUNUIHBnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFpc2UgdGhlIGNvbGxlY3Rpb24gbGlt aXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUgY2h1bmtzLgorU0VUIHBnX2Nv bGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAwOworU0VUIHBnX2NvbGxl Y3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOworCistLSBQdXNoIGEgYnVuY2ggb2YgcXVl cmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4y MDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExP T1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VM RUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0g QW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVz ZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NF TEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX2NvbGxlY3RfYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX2NvbGxl Y3RfYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmVkOTM0ZDBjODU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19jb2xs ZWN0X2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTUxIEBACisjIENvcHlyaWdo dCAoYykgMjAyMS0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisj IFJ1biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX2NvbGxlY3RfYWR2aWNlIGFu ZCBwZ19wbGFuX2FkdmljZQorIyB0byBjaGVjayBmb3IgcHJvYmxlbXMuCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgQ3dkICAgICAgICAgICAgcXcoYWJz X3BhdGgpOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOworCit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0 OjpNb3JlOworCisjIEluaXRpYWxpemUgdGhlIHByaW1hcnkgbm9kZQorbXkgJG5vZGUgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KCk7CisKKyMg U2V0IHVwIG91ciBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisjCisjIFdlIHJ1biB3aXRoIHBnX2Nv bGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IHNldCB0byBlbnN1cmUgdGhhdCB0 aGUKKyMgcGxhbiB0cmVlIHdhbGtlciBjb2RlIHJ1bnMgYWdhaW5zdCBldmVyeSBxdWVyeSBpbiB0 aGUgcmVncmVzc2lvbiB0ZXN0cy4gSWYKKyMgd2UncmUgdW5hYmxlIHRvIHByb3Blcmx5IGFuYWx5 emUgYW55IG9mIHRob3NlIHBsYW4gdHJlZXMsIHRoaXMgdGVzdCBzaG91bGQKKyMgaG9wZWZ1bGx5 IGZhaWwuCisjCisjIFdlIHNldCBwZ19jb2xsZWN0X2FkdmljZS5hZHZpY2UgdG8gYW4gYWR2aWNl IHN0cmluZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGFkdmljZQorIyB0cm92ZSB0byBiZSBwb3B1bGF0 ZWQgd2l0aCBhIGZldyBlbnRyaWVzIG9mIHZhcmlvdXMgc29ydHMsIGJ1dCB3aGljaCB3ZSBkbwor IyBub3QgZXhwZWN0IHRvIG1hdGNoIGFueXRoaW5nIGluIHRoZSByZWdyZXNzaW9uIHRlc3QgcXVl cmllcy4gVGhpcyB3YXksIHRoZQorIyBwbGFubmVyIGhvb2tzIHdpbGwgYmUgY2FsbGVkLCBpbXBy b3ZpbmcgY29kZSBjb3ZlcmFnZSwgYnV0IG5vIHBsYW5zIHNob3VsZAorIyBhY3R1YWxseSBjaGFu Z2UuCisjCisjIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1m YWxzZSBpcyBuZWVkZWQgdG8gYXZvaWQKKyMgYnJlYWtpbmcgcmVncmVzc2lvbiB0ZXN0IHF1ZXJp ZXMgdGhhdCB1c2UgRVhQTEFJTi4gSW4gdGhlIHJlYWwgd29ybGQsIGl0CisjIHNlZW1zIGxpa2Ug dXNlcnMgd2lsbCB3YW50IEVYUExBSU4gb3V0cHV0IHRvIHNob3cgc3VwcGxpZWQgYWR2aWNlIHNv IHRoYXQKKyMgaXQncyBjbGVhciB3aGV0aGVyIG5vcm1hbCBwbGFubmVyIGJlaGF2aW9yIGhhcyBi ZWVuIGFsdGVyZWQsIGJ1dCBoZXJlIHRoYXQncworIyB1bmRlc2lyYWJsZS4KKyRub2RlLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00pOworc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzPXBnX2NvbGxlY3RfYWR2aWNlCitwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlv bl9saW1pdD0xMDAwMDAwCitwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPXRydWUK K3BnX3BsYW5fYWR2aWNlLmFkdmljZT0nU0VRX1NDQU4oZW50aXJlbHlfZmljdGl0aW91cykgSEFT SF9KT0lOKHRvdGFsX2ZhYnJpY2F0aW9uKSBHQVRIRVIoY29tcGxldGVseV9pbWFnaW5hcnkpJwor cGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitFT00K KyRub2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRoKCIuLi8uLiIpOworCisjIC0t ZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jl c3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4K K215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVTU19TSExJQn0pOworCisjIC0tb3V0cHV0 ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBwbGFjZSB0aGUgb3V0cHV0IGZpbGVzLgor bXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisj IC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9mIHRoZSBpbnB1dCBmaWxlcy4KK215ICRp bnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MiOworCisjIFJ1biB0aGUgdGVzdHMu CitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdSRVNTfSAuICIgIgorCSAgLiAiLS1iaW5k aXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwiICIKKwkgIC4gIi0taG9zdD0iIC4gJG5v ZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4gJG5vZGUtPnBvcnQgLiAiICIKKwkgIC4g Ii0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIK KwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAgIgorCSAgLiAiLS1pbnB1dGRpcj1cIiRp bnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiIik7CisKKyMgRHVt cCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwgaWYgdGhlcmUgaXMgb25lCitpZiAoJHJj ICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRkaXIvcmVncmVzc2lvbi5kaWZmcyI7CisJ aWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0gZHVtcGluZyAkZGlmZnMgPT09XG4iOwor CQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXByaW50ICI9PT0gRU9GID09PVxuIjsKKwl9 Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywgMCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFz cycpOworCisjIENyZWF0ZSB0aGUgZXh0ZW5zaW9uIHNvIHdlIGNhbiBhY2Nlc3MgdGhlIGNvbGxl Y3RvcgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBwZ19j b2xsZWN0X2FkdmljZScpOworCisjIFZlcmlmeSB0aGF0IGEgbGFyZ2UgYW1vdW50IG9mIGFkdmlj ZSB3YXMgY29sbGVjdGVkCitteSAkYWxsX3F1ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorY21wX29rKCRhbGxfcXVlcnlfY291bnQsICc+JywgMjAw MDAsICJjb3Bpb3VzIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBWZXJpZnkgdGhhdCBsb3RzIG9m IGRpZmZlcmVudCBhZHZpY2Ugc3RyaW5ncyB3ZXJlIGNvbGxlY3RlZAorbXkgJGRpc3RpbmN0X3F1 ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1Qg Q09VTlQoKikgRlJPTQorCShTRUxFQ1QgRElTVElOQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxl Y3RlZF9zaGFyZWRfYWR2aWNlKCkpOworRU9NCitjbXBfb2soJGRpc3RpbmN0X3F1ZXJ5X2NvdW50 LCAnPicsIDMwMDAsICJkaXZlcnNlIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBXZSB3YW50IHRv IHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvZiBvdXIga25vd24gdGFncyBpbiB0aGUgY29sbGVjdGVk IGFkdmljZS4KKyMgUHV0IGFsbCB0YWdzIGludG8gdGhlIGhhc2ggdGhhdCBmb2xsb3dzOyBtYXAg YW55IHRhZ3MgdGhhdCBhcmVuJ3QgdGVzdGVkCisjIGJ5IHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVz dHMgdG8gMCwgYW5kIG90aGVycyB0byAxLgorbXkgJXRhZ19tYXAgPSAoCisJQklUTUFQX0hFQVBf U0NBTiA9PiAxLAorCUZPUkVJR05fSk9JTiA9PiAwLAorCUdBVEhFUiA9PiAxLAorCUdBVEhFUl9N RVJHRSA9PiAxLAorCUhBU0hfSk9JTiA9PiAxLAorCUlOREVYX09OTFlfU0NBTiA9PiAxLAorCUlO REVYX1NDQU4gPT4gMSwKKwlKT0lOX09SREVSID0+IDEsCisJTUVSR0VfSk9JTl9NQVRFUklBTEla RSA9PiAxLAorCU1FUkdFX0pPSU5fUExBSU4gPT4gMSwKKwlORVNURURfTE9PUF9NQVRFUklBTEla RSA9PiAxLAorCU5FU1RFRF9MT09QX01FTU9JWkUgPT4gMSwKKwlORVNURURfTE9PUF9QTEFJTiA9 PiAxLAorCU5PX0dBVEhFUiA9PiAxLAorCVBBUlRJVElPTldJU0UgPT4gMSwKKwlTRU1JSk9JTl9O T05fVU5JUVVFID0+IDEsCisJU0VNSUpPSU5fVU5JUVVFID0+IDEsCisJU0VRX1NDQU4gPT4gMSwK KwlUSURfU0NBTiA9PiAxLAorKTsKK2ZvciBteSAkdGFnIChzb3J0IGtleXMgJXRhZ19tYXApCit7 CisJbXkgJGNoZWNraXQgPSAkdGFnX21hcHskdGFnfTsKKworCSMgU2VhcmNoIGZvciB0aGUgZ2l2 ZW4gdGFnLiBUaGlzIGlzIG5vdCBlbnRpcmVseSByb2J1c3Q6IGl0IGNvdWxkIGdldCB0aHJvd24K KwkjIG9mZiBieSBhIHRhYmxlIGFsaWFzIHN1Y2ggYXMgIkZPUkVJR05fSk9JTigiLCBidXQgdGhh dCBwcm9iYWJseSB3b24ndAorCSMgaGFwcGVuIGluIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMu CisJbXkgJHRhZ19jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOwor U0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKKwlX SEVSRSBhZHZpY2UgTElLRSAnJSR0YWcoJScKK0VPTQorCisJIyBDaGVjayB0aGF0IHRoZSB0YWcg Z290IGEgbm9uLXRyaXZpYWwgYW1vdW50IG9mIHVzZSwgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgor CWNtcF9vaygkdGFnX2NvdW50LCAnPicsIDEwLCAibXVsdGlwbGUgdXNlcyBvZiAkdGFnIikgaWYg JGNoZWNraXQ7CisKKwkjIFJlZ2FyZGxlc3MsIG5vdGUgdGhlIGV4YWN0IGNvdW50IGluIHRoZSBs b2csIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKwlub3RlKCJmb3VuZCAkdGFnX2NvdW50IGFkdmlj ZSBzdHJpbmdzIGNvbnRhaW5pbmcgJHRhZyIpOworfQorCisjIFRyaWdnZXIgYSBwYXJ0aWFsIGNs ZWFudXAgb2YgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLCBhbmQgdGhlbiBhIGZ1bGwKKyMg Y2xlYW51cC4KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VUIHBnX2Nv bGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTUwMDsKK1NFTEVDVCAqIEZST00g cGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorCitkb25lX3Rlc3Rpbmco KTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwv Y29udHJpYi5zZ21sCmluZGV4IGJkZDQ4NjVmNTNmLi4yYWI2ZmFmYmFiMSAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21s CkBAIC0xNTIsNiArMTUyLDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFibGU+ZXh0ZW5z aW9uX25hbWU8L3JlcGxhY2VhYmxlPjsKICAmcGFnZWluc3BlY3Q7CiAgJnBhc3N3b3JkY2hlY2s7 CiAgJnBnYnVmZmVyY2FjaGU7CisgJnBnY29sbGVjdGFkdmljZTsKICAmcGdjcnlwdG87CiAgJnBn ZnJlZXNwYWNlbWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0OwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAppbmRleCBkOTBi NDMzOGQyYS4uNDA3ZmYzYWJmZmUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xNDUsNiArMTQ1LDcgQEAK IDwhRU5USVRZIHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBhZ2VpbnNwZWN0LnNnbWwiPgogPCFF TlRJVFkgcGFzc3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dvcmRjaGVjay5zZ21sIj4KIDwhRU5U SVRZIHBnYnVmZmVyY2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+Cis8IUVOVElU WSBwZ2NvbGxlY3RhZHZpY2UgU1lTVEVNICJwZ2NvbGxlY3RhZHZpY2Uuc2dtbCI+CiA8IUVOVElU WSBwZ2NyeXB0byAgICAgICAgU1lTVEVNICJwZ2NyeXB0by5zZ21sIj4KIDwhRU5USVRZIHBnZnJl ZXNwYWNlbWFwICBTWVNURU0gInBnZnJlZXNwYWNlbWFwLnNnbWwiPgogPCFFTlRJVFkgcGdsb2dp Y2FsaW5zcGVjdCAgU1lTVEVNICJwZ2xvZ2ljYWxpbnNwZWN0LnNnbWwiPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3BnY29sbGVjdGFkdmljZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3BnY29sbGVj dGFkdmljZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZDdk ODc5ZDgxNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9wZ2NvbGxlY3RhZHZpY2Uu c2dtbApAQCAtMCwwICsxLDI0NCBAQAorPCEtLSBkb2Mvc3JjL3NnbWwvcGdjb2xsZWN0YWR2aWNl LnNnbWwgLS0+CisKKzxzZWN0MSBpZD0icGdjb2xsZWN0YWR2aWNlIiB4cmVmbGFiZWw9InBnX2Nv bGxlY3RfYWR2aWNlIj4KKyA8dGl0bGU+cGdfY29sbGVjdF9hZHZpY2UgJm1kYXNoOyBjb2xsZWN0 IHF1ZXJpZXMgYW5kIHRoZWlyIHBsYW4gYWR2aWNlIHN0cmluZ3M8L3RpdGxlPgorCisgPGluZGV4 dGVybSB6b25lPSJwZ2NvbGxlY3RhZHZpY2UiPgorICA8cHJpbWFyeT5wZ19jb2xsZWN0X2Fkdmlj ZTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJhPgorICBUaGUgPGZpbGVuYW1lPnBn X2NvbGxlY3RfYWR2aWNlPC9maWxlbmFtZT4gZXh0ZW5zaW9uIGFsbG93cyB5b3UgdG8KKyAgYXV0 b21hdGljYWxseSBnZW5lcmF0ZSBwbGFuIGFkdmljZSBlYWNoIHRpbWUgYSBxdWVyeSBpcyBwbGFu bmVkIGFuZCBzdG9yZQorICB0aGUgcXVlcnkgYW5kIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmlu ZyBlaXRoZXIgaW4gbG9jYWwgb3Igc2hhcmVkIG1lbW9yeS4KKyAgTm90ZSB0aGF0IHRoaXMgZXh0 ZW5zaW9uIHJlcXVpcmVzIHRoZSA8eHJlZiBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UiIC8+IG1vZHVs ZSwKKyAgd2hpY2ggcGVyZm9ybXMgdGhlIGFjdHVhbCBwbGFuIGFkdmljZSBnZW5lcmF0aW9uOyB0 aGlzIG1vZHVsZSBvbmx5IGtub3dzCisgIGhvdyB0byBzdG9yZSB0aGUgZ2VuZXJhdGVkIGFkdmlj ZSBmb3IgbGF0ZXIgZXhhbWluYXRpb24uIFdoZW5ldmVyCisgIDxsaXRlcmFsPnBnX2NvbGxlY3Rf YWR2aWNlPC9saXRlcmFsPiBpcyBsb2FkZWQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBsb2FkCisg IDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPi4KKyA8L3BhcmE+CisKKyA8cGFyYT4K KyAgSW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3Ugd2lsbCBuZWVkIHRvIGV4ZWN1dGUK KyAgPGxpdGVyYWw+Q1JFQVRFIEVYVEVOU0lPTiBwZ19jb2xsZWN0X2FkdmljZTwvbGl0ZXJhbD4g aW4gYXQgbGVhc3QKKyAgb25lIGRhdGFiYXNlLCBzbyB0aGF0IHlvdSBoYXZlIGEgd2F5IHRvIGV4 YW1pbmUgdGhlIGNvbGxlY3RlZCBhZHZpY2UuCisgIFlvdSB3aWxsIGFsc28gbmVlZCB0aGUgPGxp dGVyYWw+cGdfY29sbGVjdF9hZHZpY2U8L2xpdGVyYWw+IG1vZHVsZQorICB0byBiZSBsb2FkZWQg aW4gYWxsIHNlc3Npb25zIHdoZXJlIGFkdmljZSBpcyB0byBiZSBjb2xsZWN0ZWQuIEl0IHdpbGwK KyAgdXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRkaW5nIDxsaXRlcmFsPnBnX2NvbGxl Y3RfYWR2aWNlPC9saXRlcmFsPgorICB0byA8eHJlZiBsaW5rZW5kPSJndWMtc2hhcmVkLXByZWxv YWQtbGlicmFyaWVzIi8+IGFuZCByZXN0YXJ0aW5nIHRoZQorICBzZXJ2ZXIuCisgPC9wYXJhPgor CisgPHBhcmE+CisgIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlPC9saXRlcmFsPiBpbmNsdWRl cyBib3RoIGEgc2hhcmVkIGFkdmljZQorICBjb2xsZWN0b3IgYW5kIGEgbG9jYWwgYWR2aWNlIGNv bGxlY3Rvci4gVGhlIGxvY2FsIGFkdmljZSBjb2xsZWN0b3IgbWFrZXMKKyAgcXVlcmllcyBhbmQg dGhlaXIgYWR2aWNlIHN0cmluZ3MgdmlzaWJsZSBvbmx5IHRvIHRoZSBzZXNzaW9uIHdoZXJlIHRo b3NlCisgIHF1ZXJpZXMgd2VyZSBwbGFubmVkLCB3aGlsZSB0aGUgc2hhcmVkIGFkdmljZSBjb2xs ZWN0b3IgY29sbGVjdHMgZGF0YQorICBvbiBhIHN5c3RlbS13aWRlIGJhc2lzLCBhbmQgYXV0aG9y aXplZCB1c2VycyBjYW4gZXhhbWluZSBkYXRhIGZyb20gYWxsCisgIHNlc3Npb25zLgorIDwvcGFy YT4KKworIDxwYXJhPgorICBUbyBlbmFibGUgYSBjb2xsZWN0b3IsIHlvdSBtdXN0IGZpcnN0IHNl dCBhIGNvbGxlY3Rpb24gbGltaXQuIFdoZW4gdGhlCisgIG51bWJlciBvZiBxdWVyaWVzIGZvciB3 aGljaCBhZHZpY2UgaGFzIGJlZW4gc3RvcmVkIGV4Y2VlZHMgdGhlIGNvbGxlY3Rpb24KKyAgbGlt aXQsIHRoZSBvbGRlc3QgcXVlcmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYWR2aWNlIHdpbGwg YmUgZGlzY2FyZGVkLgorICBUaGVuLCB5b3UgbXVzdCBhZGp1c3QgYSBzZXBhcmF0ZSBzZXR0aW5n IHRvIGFjdHVhbGx5IGVuYWJsZSBhZHZpY2UKKyAgY29sbGVjdGlvbi4gRm9yIHRoZSBsb2NhbCBj b2xsZWN0b3IsIHNldCB0aGUgY29sbGVjdGlvbiBsaW1pdCBieSBjb25maWd1cmluZworICA8bGl0 ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC9saXRlcmFsPiB0 byBhIHZhbHVlCisgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgdGhlbiBlbmFibGUgYWR2aWNlIGNv bGxlY3Rpb24gYnkgc2V0dGluZworICA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9j b2xsZWN0b3IgPSB0cnVlPC9saXRlcmFsPi4gRm9yIHRoZSBzaGFyZWQKKyAgY29sbGVjdG9yLCB0 aGUgcHJvY2VkdXJlIGlzIHRoZSBzYW1lLCBleGNlcHQgdGhhdCB0aGUgbmFtZXMgb2YgdGhlIHNl dHRpbmdzCisgIGFyZSA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlv bl9saW1pdDwvbGl0ZXJhbD4gYW5kCisgIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlLnNoYXJl ZF9jb2xsZWN0b3I8L2xpdGVyYWw+LiBOb3RlIHRoYXQgaW4gYm90aAorICBjYXNlcywgcXVlcnkg dGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGFyZSBzdG9yZWQgaW4gbWVtb3J5LCBzbworICBjb25m aWd1cmluZyBsYXJnZSBsaW1pdHMgbWF5IHJlc3VsdCBpbiBjb25zaWRlcmFibGUgbWVtb3J5IGNv bnN1bXB0aW9uLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBPbmNlIHRoZSBjb2xsZWN0b3IgaXMg ZW5hYmxlZCwgeW91IGNhbiBydW4gYW55IHF1ZXJpZXMgZm9yIHdoaWNoIHlvdSB3aXNoCisgIHRv IHNlZSB0aGUgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlLiBUaGVuLCB5b3UgY2FuIGV4YW1pbmUgd2hh dCBoYXMgYmVlbgorICBjb2xsZWN0ZWQgdXNpbmcgd2hpY2hldmVyIG9mCisgIDxsaXRlcmFsPlNF TEVDVCAqIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTwvbGl0ZXJhbD4gb3IK KyAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2Uo KTwvbGl0ZXJhbD4KKyAgY29ycmVzcG9uZHMgdG8gdGhlIGNvbGxlY3RvciB5b3UgZW5hYmxlZC4g VG8gZGlzY2FyZCB0aGUgY29sbGVjdGVkIGFkdmljZQorICBhbmQgcmVsZWFzZSBtZW1vcnksIHlv dSBjYW4gY2FsbAorICA8bGl0ZXJhbD5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk8 L2xpdGVyYWw+CisgIG9yIDxsaXRlcmFsPnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KCk8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxwYXJhPgorICBJbiBhZGRpdGlvbiB0byB0aGUg cXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzLCB0aGUgYWR2aWNlIGNvbGxlY3RvcnMKKyAg d2lsbCBhbHNvIHN0b3JlIHRoZSBPSUQgb2YgdGhlIHJvbGUgdGhhdCBjYXVzZWQgdGhlIHF1ZXJ5 IHRvIGJlIHBsYW5uZWQsCisgIHRoZSBPSUQgb2YgdGhlIGRhdGFiYXNlIGluIHdoaWNoIHRoZSBx dWVyeSB3YXMgcGxhbm5lZCwgdGhlIHF1ZXJ5IElELAorICBhbmQgdGhlIHRpbWUgYXQgd2hpY2gg dGhlIGNvbGxlY3Rpb24gb2NjdXJyZWQuIFRoaXMgbW9kdWxlIGRvZXMgbm90CisgIGF1dG9tYXRp Y2FsbHkgZW5hYmxlIHF1ZXJ5IElEIGNvbXB1dGF0aW9uOyB0aGVyZWZvcmUsIGlmIHlvdSB3YW50 IHRoZQorICBxdWVyeSBJRCB2YWx1ZSB0byBiZSBwb3B1bGF0ZWQgaW4gY29sbGVjdGVkIGFkdmlj ZSwgYmUgc3VyZSB0byBjb25maWd1cmUKKyAgPGxpdGVyYWw+Y29tcHV0ZV9xdWVyeV9pZCA9IG9u PC9saXRlcmFsPi4gT3RoZXJ3aXNlLCB0aGUgcXVlcnkgSUQgbWF5CisgIGFsd2F5cyBzaG93IGFz IDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxzZWN0MiBpZD0icGdjb2xsZWN0 YWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgorCisgIDx2YXJp YWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlv bj5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgcmV0dXJucyB2b2lkPC9mdW5jdGlv bj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFyX2NvbGxlY3RlZF9s b2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKwor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZW1vdmVzIGFsbCBjb2xsZWN0ZWQg cXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZyb20gYmFja2VuZC1sb2NhbAorICAgICAg bWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0 X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSByZXR1cm5zIHNldG9mIChpZCBiaWdpbnQsCisgICAg ICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlkIGJpZ2ludCwgY29sbGVjdGlvbl90aW1l IHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVyeSB0ZXh0LCBhZHZpY2UgdGV4dCk8L2Z1bmN0aW9u PgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfZ2V0X2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZXR1cm5zIGFsbCBxdWVyeSB0ZXh0cyBh bmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBsb2NhbAorICAgICAgYWR2aWNlIGNvbGxl Y3Rvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2NsZWFy X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAg PGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2 aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3ZlcyBhbGwgY29sbGVjdGVkIHF1ZXJ5IHRl eHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIHNoYXJlZAorICAgICAgbWVtb3J5LgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2NvbGxlY3RlZF9zaGFy ZWRfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAoaWQgYmlnaW50LAorICAgICAgICB1c2VyaWQgb2lk LCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQsIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwK KyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNlIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZTwvcHJp bWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgYWxsIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3Ry aW5ncyBzdG9yZWQgaW4gdGhlIHNoYXJlZAorICAgICAgYWR2aWNlIGNvbGxlY3Rvci4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3Zhcmlh YmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnY29sbGVjdGFkdmljZS1jb25m aWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFyYW1ldGVyczwvdGl0bGU+CisK KyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiAoPHR5 cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFy bmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+ CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfY29sbGVj dF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiBlbmFibGVzIHRoZQorICAgICAgbG9j YWwgYWR2aWNlIGNvbGxlY3Rvci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPmZhbHNl PC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdf Y29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdDwvdmFybmFtZT4gKDx0eXBlPmlu dGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdDwvdmFybmFtZT4gY29uZmln dXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVy bT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19jb2xs ZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiBzZXRzIHRoZQorICAg ICAgbWF4aW11bSBudW1iZXIgb2YgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIHJldGFp bmVkIGJ5IHRoZQorICAgICAgbG9jYWwgYWR2aWNlIGNvbGxlY3Rvci4gIFRoZSBkZWZhdWx0IHZh bHVlIGlzIDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgor ICAgICA8dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC92YXJuYW1l PiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFy eT48dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBn X2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8L3Zhcm5hbWU+IGVuYWJsZXMgdGhlCisg ICAgICBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rvci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRl cmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgIE9ubHkgc3VwZXJ1c2VycyBhbmQgdXNlcnMgd2l0 aCB0aGUgYXBwcm9wcmlhdGUgPGxpdGVyYWw+U0VUPC9saXRlcmFsPgorICAgICAgcHJpdmlsZWdl IGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAg ICA8dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwvdmFy bmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8 L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5h bWU+IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQgYWR2 aWNlIHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rv ci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorICAgICAgT25s eSBzdXBlcnVzZXJzIGFuZCB1c2VycyB3aXRoIHRoZSBhcHByb3ByaWF0ZSA8bGl0ZXJhbD5TRVQ8 L2xpdGVyYWw+CisgICAgICBwcml2aWxlZ2UgY2FuIGNoYW5nZSB0aGlzIHNldHRpbmcuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJp YWJsZWxpc3Q+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ2NvbGxlY3RhZHZpY2UtYXV0 aG9yIj4KKyAgPHRpdGxlPkF1dGhvcjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBSb2JlcnQgSGFh cyA8ZW1haWw+cmhhYXNAcG9zdGdyZXNxbC5vcmc8L2VtYWlsPgorICA8L3BhcmE+CisgPC9zZWN0 Mj4KKworPC9zZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNGRjNjNkMWFlNTEu LjFhMjUxMjk2M2E5IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzk4Myw2ICszOTgz LDEyIEBAIHBnX3V1aWRfdAogcGdfd2NoYXIKIHBnX3djaGFyX3RibAogcGdwX2FybW9yX2hlYWRl cnNfc3RhdGUKK3BnY2FfY29sbGVjdGVkX2FkdmljZQorcGdjYV9sb2NhbF9hZHZpY2UKK3BnY2Ff bG9jYWxfYWR2aWNlX2NodW5rCitwZ2NhX3NoYXJlZF9hZHZpY2UKK3BnY2Ffc2hhcmVkX2Fkdmlj ZV9jaHVuaworcGdjYV9zaGFyZWRfc3RhdGUKIHBncGFfYWR2aWNlX2l0ZW0KIHBncGFfYWR2aWNl X3RhZ190eXBlCiBwZ3BhX2FkdmljZV90YXJnZXQKLS0gCjIuNTEuMAoK --0000000000005f9cf4064bd60212 Content-Type: application/octet-stream; name="v18-0003-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v18-0003-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5hcy8r2 RnJvbSBhZTU1OTY3ZWJmNzRmNjM4Y2JjMjczMDVkZDZkYTA4NTE1MDRiYmM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjYgSmFuIDIwMjYgMDk6NTY6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOCAz LzddIEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNpbGl0 eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2ljZXMK c28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRob3Jp emF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBpbnNp c3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2ZXMg YmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1c2Vy cyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNvbnN0 cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7IG5l dmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNpbHkg c29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KClRoaXMgcGF0 Y2ggdGFrZXMgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJv ZHVjZQp0ZXh0dWFsIG91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRl c2NyaWJlcyBrZXkKZGVjaXNpb25zIG1hZGUgZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZp Y2UgaXMgcHJvdmlkZWQgZHVyaW5nCmZ1dHVyZSBwbGFubmluZyBjeWNsZXMsIGl0IHdpbGwgZm9y Y2UgdGhvc2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluCnRoZSBzYW1lIHdheS4gIE5vdCBh bGwgcGxhbm5lciBkZWNpc2lvbnMgY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgYWR2aWNlOwpmb3Ig ZXhhbXBsZSwgZGVjaXNpb25zIGFib3V0IGhvdyB0byBwZXJmb3JtIGFnZ3JlZ2F0aW9uIGFyZSBj dXJyZW50bHkKb3V0IG9mIHNjb3BlLCBhcyBpcyBjaG9pY2Ugb2Ygc29ydCBvcmRlci4gUGxhbiBh ZHZpY2UgY2FuIGFsc28gYmUgZWRpdGVkCmJ5IHRoZSB1c2VyLCBvciBldmVuIHdyaXR0ZW4gZnJv bSBzY3JhdGNoIGluIHNpbXBsZSBjYXNlcywgbWFraW5nIGl0CnBvc3NpYmxlIHRvIGdlbmVyYXRl IG91dGNvbWVzIHRoYXQgdGhlIHBsYW5uZXIgd291bGQgbm90IGhhdmUgcHJvZHVjZWQuClBhcnRp YWwgYWR2aWNlIGNhbiBiZSBwcm92aWRlZCB0byBjb250cm9sIHNvbWUgcGxhbm5lciBvdXRjb21l cyBidXQgbm90Cm90aGVycy4KCkN1cnJlbnRseSwgcGxhbiBhZHZpY2UgaXMgZm9jdXNlZCBvbmx5 IG9uIHNwZWNpZmljIG91dGNvbWVzLCBzdWNoIGFzCnRoZSBjaG9pY2UgdG8gdXNlIGEgc2VxdWVu dGlhbCBzY2FuIGZvciBhIHBhcnRpY3VsYXIgcmVsYXRpb24sIGFuZCBub3QKb24gZXN0aW1hdGVz IHRoYXQgbWlnaHQgY29udHJpYnV0ZSB0byB0aG9zZSBvdXRjb21lcywgc3VjaCBhcyBhCnBvc3Np Ymx5LWluY29ycmVjdCBzZWxlY3Rpdml0eSBlc3RpbWF0ZS4gV2hpbGUgaXQgd291bGQgYmUgdXNl ZnVsIHRvCnVzZXJzIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBwbGFuIGFkdmljZSB0aGF0IGFmZmVj dHMgc2VsZWN0aXZpdHkKZXN0aW1hdGVzIG9yIG90aGVyIGFzcGVjdHMgb2YgY29zdGluZywgdGhh dCBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKY29tbWl0LgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZp dHRsIDxsdWthc0BmaXR0bC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndh cnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQu bWU+ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlz ZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpS ZXZpZXdlZC1ieTogRGlhbiBGYXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFs IDxhamF5LnBhbC5rQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25h eWxvcmxzQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXhhbmRyYSBXYW5nIDxhbGV4YW5kcmEu d2FuZy5vc3NAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdt b1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwu Y29tCi0tLQogY29udHJpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMSArCiBjb250cmliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAxICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZSAgICAgICAgICAgICB8ICAg IDMgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICA0 MyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRSAgICAgICAgICAgICAgICAgfCAgMjYw ICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQgICAgfCAgMzcx ICsrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0ICAgIHwgIDUw OSArKysrCiAuLi4vcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQgfCAg MzM5ICsrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IHwg IDQyNiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3ByZXBhcmVkLm91dCAg fCAgIDY3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgICAgICB8 ICA3NTcgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91 dCAgfCAgMzc3ICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0 ICAgIHwgIDE5MiArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAgICAg ICAgIHwgICA2NiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgICAg ICAgfCAgNDU2ICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaCAg ICAgICB8ICAgNDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAgICAg ICAgIHwgIDM1MSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCAgICAgICAg ICAgICB8ICAxODUgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMg ICAgICB8ICA0ODEgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIu aCAgICAgIHwgICA1MiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jICAgICAg ICAgICAgfCAgNjM4ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oICAg ICAgICAgICAgfCAgMTA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYyAg ICAgICAgICB8ICA1NzEgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQu aCAgICAgICAgICB8ICAgMjIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55 ICAgICAgICAgIHwgIDMwMSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVy LmMgICAgICAgICB8IDIxNjYgKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9wbGFubmVyLmggICAgICAgICB8ICAgMTkgKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uYyAgICAgICAgICAgIHwgIDI3MSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9zY2FuLmggICAgICAgICAgICB8ICAgODUgKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW5uZXIubCAgICAgICAgIHwgIDI5NyArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5jICAgICAgICAgICB8ICA1MTYgKysrKwogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3Ryb3ZlLmggICAgICAgICAgIHwgIDExNCArCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfd2Fsa2VyLmMgICAgICAgICAgfCAxMDI5ICsrKysrKysrCiBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfd2Fsa2VyLmggICAgICAgICAgfCAgMTQxICsrCiBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsICAgICAgICAgfCAgIDg2ICsKIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsICAgICB8ICAxNDUgKysKIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsICB8ICAgODQgKwogY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA5OSArCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9wcmVwYXJlZC5zcWwgICAgICAgfCAgIDM3ICsKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3NjYW4uc3FsICAgICAgICAgICB8ICAxOTUgKysKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3NlbWlqb2luLnNxbCAgICAgICB8ICAxMTggKwogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvc3ludGF4LnNxbCAgICAgICAgIHwgICA2OCArCiBkb2Mvc3JjL3NnbWwvY29udHJp Yi5zZ21sICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGRvYy9zcmMvc2dtbC9maWxlbGlz dC5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL3BncGxhbmFk dmljZS5zZ21sICAgICAgICAgICAgICAgIHwgIDgxMyArKysrKysrCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDMzICsKIDQ2IGZpbGVzIGNoYW5nZWQs IDEyOTM3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9S RUFETUUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVk L2dhdGhlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL2pvaW5fb3JkZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFu X2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3ByZXBhcmVkLm91dAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3Nl bWlqb2luLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhw ZWN0ZWQvc3ludGF4Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BnX3BsYW5fYWR2aWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfYXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfYXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfaWRlbnRpZmllci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2lkZW50aWZpZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9qb2luLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfam9pbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX291dHB1dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX291dHB1dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3BhcnNlci55CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3BsYW5uZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9wbGFubmVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfc2Nhbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3NjYW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9zY2FubmVyLmwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfdHJvdmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3dhbGtlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3dhbGtlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvZ2F0aGVyLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL2pvaW5fb3JkZXIuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbAoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIw YWNkMiAxMDA2NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxl CkBAIC0zNCw2ICszNCw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBn X2xvZ2ljYWxpbnNwZWN0IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBc CiAJCXBnX3ByZXdhcm0JXAogCQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmlu ZGV4IGRlZjEzMjU3Y2JlLi41YTc1MmVhYzM0NyAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5i dWlsZAorKysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcign cGdjcnlwdG8nKQogc3ViZGlyKCdwZ19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2Fs aW5zcGVjdCcpCiBzdWJkaXIoJ3BnX292ZXJleHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZp Y2UnKQogc3ViZGlyKCdwZ19wcmV3YXJtJykKIHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIo J3BnX3N0YXRfc3RhdGVtZW50cycpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl Ly5naXRpZ25vcmUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAor L3BncGFfcGFyc2VyLmgKKy9wZ3BhX3BhcnNlci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMmE4 MjMzZjM4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZp bGUKQEAgLTAsMCArMSw0MyBAQAorIyBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisK K01PRFVMRV9iaWcgPSBwZ19wbGFuX2FkdmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJ cGdfcGxhbl9hZHZpY2UubyBcCisJcGdwYV9hc3QubyBcCisJcGdwYV9pZGVudGlmaWVyLm8gXAor CXBncGFfam9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3BhcnNlci5vIFwKKwlwZ3Bh X3BsYW5uZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5lci5vIFwKKwlwZ3BhX3Ry b3ZlLm8gXAorCXBncGFfd2Fsa2VyLm8KKworUEdGSUxFREVTQyA9ICJwZ19wbGFuX2FkdmljZSAt IGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgorCitSRUdSRVNTID0gZ2F0aGVy IGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIHByZXBhcmVkIFwKKwlzY2Fu IHNlbWlqb2luIHN5bnRheAorCitFWFRSQV9DTEVBTiA9IHBncGFfcGFyc2VyLmggcGdwYV9wYXJz ZXIuYyBwZ3BhX3NjYW5uZXIuYworCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29u ZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hT KQorZWxzZQorc3ViZGlyID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQordG9wX2J1aWxkZGlyID0g Li4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1 ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCisjIFNl ZSBub3RlcyBpbiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgYWJvdXQgdGhlIGZvbGxvd2lu ZyB0d28gcnVsZXMKK3BncGFfcGFyc2VyLmg6IHBncGFfcGFyc2VyLmMKKwl0b3VjaCAkQAorCitw Z3BhX3BhcnNlci5jOiBCSVNPTkZMQUdTICs9IC1kCisKKyMgRm9yY2UgdGhlc2UgZGVwZW5kZW5j aWVzIHRvIGJlIGtub3duIGV2ZW4gd2l0aG91dCBkZXBlbmRlbmN5IGluZm8gYnVpbHQ6CitwZ3Bh X3BhcnNlci5vIHBncGFfc2Nhbm5lci5vOiBwZ3BhX3BhcnNlci5oCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1F Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYjg4OGZkODJmMgotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FCkBAIC0wLDAgKzEs MjYwIEBACitjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQorCitQbGFuIEFkdmljZQorPT09 PT09PT09PT0KKworVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1pbmktbGFuZ3VhZ2UgZm9yICJw bGFuIGFkdmljZSIgdGhhdCBhbGxvd3MgZm9yCitjb250cm9sIG9mIGNlcnRhaW4ga2V5IHBsYW5u ZXIgZGVjaXNpb25zLiBHb2FscyBpbmNsdWRlICgxKSBlbmZvcmNpbmcgcGxhbgorc3RhYmlsaXR5 IChteSBwcmV2aW91cyBwbGFuIHdhcyBnb29kIGFuZCBJIHdvdWxkIGxpa2UgdG8ga2VlcCBnZXR0 aW5nIGEKK3NpbWlsYXIgb25lKSBhbmQgKDIpIGFsbG93aW5nIHVzZXJzIHRvIGV4cGVyaW1lbnQg d2l0aCBwbGFucyBvdGhlciB0aGFuCit0aGUgb25lIHByZWZlcnJlZCBieSB0aGUgb3B0aW1pemVy LiBOb24tZ29hbHMgaW5jbHVkZSAoMSkgY29udHJvbGxpbmcKK2V2ZXJ5IHBvc3NpYmxlIHBsYW5u ZXIgZGVjaXNpb24gYW5kICgyKSBmb3JjaW5nIGNvbnNpZGVyYXRpb24gb2YgcGxhbnMKK3RoYXQg dGhlIG9wdGltaXplciByZWplY3RzIGZvciByZWFzb25zIG90aGVyIHRoYW4gY29zdC4gKFRoZXJl IGlzIHNvbWUKK3Jvb20gZm9yIGJpa2VzaGVkZGluZyBhYm91dCB3aGF0IGV4YWN0bHkgdGhpcyBu b24tZ29hbCBtZWFuczogd2hhdCBpZgord2Ugc2tpcCBwYXRoIGdlbmVyYXRpb24gZW50aXJlbHkg Zm9yIGEgY2VydGFpbiBjYXNlIG9uIHRoZSB0aGVvcnkgdGhhdAord2Uga25vdyBpdCBjYW5ub3Qg d2luIG9uIGNvc3Q/IERvZXMgdGhhdCBjb3VudCBhcyBhIGNvc3QtYmFzZWQgcmVqZWN0aW9uCitl dmVuIHRob3VnaCBubyBjb3N0IHdhcyBldmVyIGNvbXB1dGVkPykKKworR2VuZXJhbGx5LCBwbGFu IGFkdmljZSBpcyBhIHNlcmllcyBvZiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBhZHZpY2UgaXRlbXMs CitlYWNoIG9mIHdoaWNoIGFwcGxpZXMgYW4gYWR2aWNlIHRhZyB0byBhIGxpc3Qgb2YgYWR2aWNl IHRhcmdldHMuIEZvcgorZXhhbXBsZSwgIlNFUV9TQ0FOKGZvbykgSEFTSF9KT0lOKGJhckBzcyki IGNvbnRhaW5zIHR3byBpdGVtcyBvZiBhZHZpY2UsCit0aGUgZmlyc3Qgb2Ygd2hpY2ggYXBwbGll cyB0aGUgU0VRX1NDQU4gdGFnIHRvICJmb28iIGFuZCB0aGUgc2Vjb25kIG9mCit3aGljaCBhcHBs aWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvICJiYXJAc3MiLiBJbiB0aGlzIHNpbXBsZSBleGFtcGxl LCBlYWNoCit0YXJnZXQgaWRlbnRpZmllcyBhIHNpbmdsZSByZWxhdGlvbjsgc2VlICJSZWxhdGlv biBJZGVudGlmaWVycyIsIGJlbG93LgorQWR2aWNlIHRhZ3MgY2FuIGFsc28gYmUgYXBwbGllZCB0 byBncm91cHMgb2YgcmVsYXRpb25zOyBmb3IgZXhhbXBsZSwKKyJIQVNIX0pPSU4oYmF6IChibGV0 Y2ggcXV1eCkpIiBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvIHRoZSBzaW5nbGUKK3JlbGF0 aW9uIGlkZW50aWZpZXIgImJheiIgYXMgd2VsbCBhcyB0byB0aGUgMi1pdGVtIGxpc3QgY29udGFp bmluZworImJsZXRjaCIgYW5kICJxdXV4Ii4KKworQ3JpdGljYWxseSwgdGhpcyBtb2R1bGUga25v d3MgYm90aCBob3cgdG8gZ2VuZXJhdGUgcGxhbiBhZHZpY2UgZnJvbSBhbgorYWxyZWFkeS1leGlz dGluZyBwbGFuLCBhbmQgYWxzbyBob3cgdG8gZW5mb3JjZSBpdCBkdXJpbmcgZnV0dXJlIHBsYW5u aW5nCitjeWNsZXMuIEV2ZXJ5dGhpbmcgaXQgZG9lcyBpcyBpbnRlbmRlZCB0byBiZSAicm91bmQt dHJpcCBzYWZlIjogaWYgeW91CitnZW5lcmF0ZSBhZHZpY2UgZnJvbSBhIHBsYW4gYW5kIHRoZW4g ZmVlZCB0aGF0IGJhY2sgaW50byBhIGZ1dHVyZSBwbGFuaW5nCitjeWNsZSwgZWFjaCBwaWVjZSBv ZiBhZHZpY2Ugc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYXBwbHkgdG8gdGhlIGV4YWN0bHkgdGhl CitzYW1lIHBhcnQgb2YgdGhlIHF1ZXJ5IGZyb20gd2hpY2ggaXQgd2FzIGdlbmVyYXRlZCB3aXRo b3V0IGFtYmlndWl0eSBvcgorZ3Vlc3N3b3JrLCBhbmQgaXQgc2hvdWxkIHN1Y2Nlc2Z1bGx5IGVu Zm9yY2UgdGhlIHNhbWUgcGxhbm5pbmcgZGVjaXNpb24gdGhhdAorbGVkIHRvIGl0IGJlaW5nIGdl bmVyYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE5vdGUgdGhhdCB0aGVyZSBpcyBubworaW50ZW50 aW9uIHRoYXQgdGhlc2UgZ3VhcmFudGVlcyBob2xkIGluIHRoZSBwcmVzZW5jZSBvZiBpbnRlcnZl bmluZyBEREw7CitlLmcuIGlmIHlvdSBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgb2YgYSBmdW5jdGlv biBzbyB0aGF0IGEgc3VicXVlcnkgaXMgbm8KK2xvbmdlciBpbmxpbmVkLCBvciBpZiB5b3UgZHJv cCBhbiBpbmRleCBuYW1lZCBpbiB0aGUgcGxhbiBhZHZpY2UsIHRoZSBhZHZpY2UKK2lzbid0IGdv aW5nIHRvIHdvcmsgYW55IG1vcmUuIFRoYXQncyBleHBlY3RlZC4KKworVGhpcyBtb2R1bGUgYWlt cyB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBmb2xsb3cgYW55IHByb3ZpZGVkIGFkdmljZSB3aXRo b3V0CityZWdhcmQgdG8gd2hldGhlciBpdCBpcyBhcHBlYXJzIHRvIGJlIGdvb2QgYWR2aWNlIG9y IGJhZCBhZHZpY2UuICBJZiB0aGUKK3VzZXIgcHJvdmlkZXMgYmFkIGFkdmljZSwgd2hldGhlciBk ZXJpdmVkIGZyb20gYSBwcmV2aW91c2x5LWdlbmVyYXRlZCBwbGFuCitvciBtYW51YWxseSB3cml0 dGVuLCB0aGV5IG1heSBnZXQgYSBiYWQgcGxhbi4gV2UgcmVnYXJkIHRoaXMgYXMgdXNlciBlcnJv ciwKK25vdCBhIGRlZmVjdCBpbiB0aGlzIG1vZHVsZS4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgYXBw bHlpbmcgYWR2aWNlCitqdWRpY2lvdXNseSBhbmQgb25seSB3aGVuIHRydWx5IHJlcXVpcmVkIHRv IGF2b2lkIHByb2JsZW1zIHdpbGwgYmUgYSBtb3JlCitzdWNjZXNzZnVsIHN0cmF0ZWd5IHRoYW4g YXBwbHlpbmcgaXQgd2l0aCBhIGJyb2FkIGJydXNoLCBidXQgdXNlcnMgYXJlIGZyZWUKK3RvIGV4 cGVyaW1lbnQgd2l0aCB3aGF0ZXZlciBzdHJhdGVnaWVzIHRoZXkgdGhpbmsgYmVzdC4KKworUmVs YXRpb24gSWRlbnRpZmllcnMKKz09PT09PT09PT09PT09PT09PT09CisKK1VuaXF1ZWx5IGlkZW50 aWZ5aW5nIHRoZSBwYXJ0IG9mIGEgcXVlcnkgdG8gd2hpY2ggYSBjZXJ0YWluIHBpZWNlIG9mCith ZHZpY2UgYXBwbGllcyBpcyBoYXJkZXIgdGhhbiBpdCBzb3VuZHMuIE91ciBiYXNpYyBhcHByb2Fj aCBpcyB0byB1c2UKK3JlbGF0aW9uIGFsaWFzZXMgYXMgYSBzdGFydGluZyBwb2ludCwgYW5kIHRo ZW4gZGlzYW1iaWd1YXRlLiBUaGVyZSBhcmUKK3RocmVlIHdheXMgdGhhdCBzYW1lIHJlbGF0aW9u IGFsaWFzIGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lczoKKworMS4gSXQgY2FuIGFwcGVhciBpbiBt b3JlIHRoYW4gb25lIHN1YnF1ZXJ5LgorCisyLiBJdCBjYW4gYXBwZWFyIG1vcmUgdGhhbiBvbmNl IGluIHRoZSBzYW1lIHN1YnF1ZXJ5LAorICAgZS5nLiAoZm9vIEpPSU4gYmFyKSB4IEpPSU4gZm9v LgorCiszLiBUaGUgdGFibGUgY2FuIGJlIHBhcnRpdGlvbmVkLgorCitBbnkgY29tYmluYXRpb24g b2YgdGhlc2UgdGhpbmdzIGNhbiBvY2N1ciBzaW11bHRhbmVvdXNseS4gIFRoZXJlZm9yZSwgb3Vy CitnZW5lcmFsIHN5bnRheCBmb3IgYSByZWxhdGlvbiBpZGVudGlmaWVyIGlzOgorCithbGlhc19u YW1lI29jY3VycmVuY2VfbnVtYmVyL3BhcnRpdGlvbl9zY2hlbWEucGFydGl0aW9uX25hbWVAcGxh bl9uYW1lCisKK0FsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIGFsaWFzX25hbWUgYXJlIG9w dGlvbmFsIGFuZCBpbmNsdWRlZCBvbmx5Cit3aGVuIHJlcXVpcmVkLiBXaGVuIGEgY29tcG9uZW50 IGlzIG9taXR0ZWQsIHRoZSBhc3NvY2lhdGVkIHB1bmN0dWF0aW9uCittdXN0IGFsc28gYmUgb21p dHRlZC4gT2NjdXJyZW5jZSBudW1iZXJzIGFyZSBjb3VudGVkIGlnbm9yaW5nIGNoaWxkcmVuIG9m CitwYXJ0aXRpb25lZCB0YWJsZXMuICBXaGVuIHRoZSBnZW5lcmF0ZWQgb2NjdXJyZW5jZSBudW1i ZXIgaXMgMSwgd2Ugb21pdAordGhlIG9jY3VycmVuY2UgbnVtYmVyLiBUaGUgcGFydGl0aW9uIHNj aGVtYSBhbmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkCitvbmx5IGZvciBjaGlsZHJlbiBv ZiBwYXJ0aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2UsIHRoZQorcGFydGl0aW9u X3NjaGVtYSBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYSBwYXJ0aXRpb25f bmFtZSwKK2J1dCB1c2VyLXdyaXR0ZW4gYWR2aWNlIG1heSBtZW50aW9uIHRoZSBuYW1lIGFuZCBv bWl0IHRoZSBzY2hlbWEuIFRoZQorcGxhbl9uYW1lIGlzIG9taXR0ZWQgZm9yIHRoZSB0b3AtbGV2 ZWwgUGxhbm5lckluZm8uCisKK1NjYW4gQWR2aWNlCis9PT09PT09PT09PQorCitGb3IgbWFueSB0 eXBlcyBvZiBzY2FuLCBubyBhZHZpY2UgaXMgZ2VuZXJhdGVkIG9yIHBvc3NpYmxlOyBmb3IgaW5z dGFuY2UsCithIHN1YnF1ZXJ5IGlzIGFsd2F5cyBzY2FubmVkIHVzaW5nIGEgc3VicXVlcnkgc2Nh bi4gV2hpbGUgdGhhdCBzY2FuIG1heSBiZQorZWxpZGVkIHZpYSBzZXRyZWZzIHByb2Nlc3Npbmcs IHRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIGZhY3QgdGhhdCBvbmx5IG9uZQorYmFzaWMgYXBwcm9h Y2ggZXhpc3RzLiBIZW5jZSwgc2NhbiBhZHZpY2UgYXBwbGllcyBtb3N0bHkgdG8gcmVsYXRpb25z LCB3aGljaAorY2FuIGJlIHNjYW5uZWQgaW4gbXVsdGlwbGUgd2F5cy4KKworV2UgdGVuZCB0byB0 aGluayBvZiBhIHNjYW4gYXMgdGFyZ2V0aW5nIGEgc2luZ2xlIHJlbGF0aW9uLCBhbmQgdGhhdCdz Citub3JtYWxseSB0aGUgY2FzZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS4gRm9yIGluc3Rh bmNlLCBpZiBhIGpvaW4gaXMKK3Byb3ZlbiBlbXB0eSwgdGhlIHdob2xlIHRoaW5nIG1heSBiZSBy ZXBsYWNlZCB3aXRoIGEgc2luZ2xlIFJlc3VsdCBub2RlCit3aGljaCwgaW4gZWZmZWN0LCBpcyBh IGRlZ2VuZXJhdGUgc2NhbiBvZiBldmVyeSByZWxhdGlvbiBpbiB0aGUgY29sbGFwc2VkCitwb3J0 aW9uIG9mIHRoZSBqb2luIHRyZWUuIFNpbWlsYXJseSwgaXQncyBwb3NzaWJsZSB0byBpbmplY3Qg YSBjdXN0b20gc2NhbgoraW4gc3VjaCBhIHdheSB0aGF0IGl0IHJlcGxhY2VzIGFuIGVudGlyZSBq b2luLiBJZiB3ZSBldmVyIGVtaXQgYWR2aWNlCitmb3IgdGhlc2UgY2FzZXMsIGl0IHdvdWxkIHRh cmdldCBzZXRzIG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIHN1cnJvdW5kZWQKK2J5IHBhcmVudGhl c2VzLCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikpIHdvdWxkIG1lYW4gdGhh dCB0aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBmb3IgZm9vIGFzIGEgc2lu Z2xlIHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2YgYmFyIGFuZCBiYXogYXMg YSBqb2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAorcHJlc2VudC4KKworRm9y IGluZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxhdGlvbiBiZWluZyBzY2Fu bmVkIGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBtdXN0IGJlIHNwZWNpZmll ZC4gRm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHggYmFyIGJhcl9iX2lkeCkg aW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4LW9ubHkKK3NjYW4pIHNo b3VsZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZvbywgYW5kIHRoYXQgYW4g aW5kZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdoZW4gc2Nhbm5pbmcgYmFy LgorCitCaXRtYXAgaGVhcCBzY2FucyBjdXJyZW50bHkgZG8gbm90IGFsbG93IGZvciBhbiBpbmRl eCBzcGVjaWZpY2F0aW9uOgorQklUTUFQX0hFQVBfU0NBTihmb28gYmFyKSBzaW1wbHkgbWVhbnMg dGhhdCBlYWNoIG9mIGZvbyBhbmQgYmFyIHNob3VsZCB1c2UKK3NvbWUgc29ydCBvZiBiaXRtYXAg aGVhcCBzY2FuLgorCitKb2luIE9yZGVyIEFkdmljZQorPT09PT09PT09PT09PT09PT0KKworVGhl IEpPSU5fT1JERVIgdGFnIHNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggc2V2ZXJhbCB0YWJs ZXMgdGhhdCBhcmUKK3BhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtIHNob3VsZCBiZSBqb2lu ZWQuIEVhY2ggc3VicXVlcnkgKGV4Y2VwdCBmb3IKK3Rob3NlIHRoYXQgYXJlIGlubGluZWQpIGlz IGEgc2VwYXJhdGUgam9pbiBwcm9ibGVtLiBXaXRoaW4gYSBzdWJxdWVyeSwKK3BhcnRpdGlvbndp c2Ugam9pbnMgY2FuIGNyZWF0ZSBhZGRpdGlvbmFsLCBzZXBhcmF0ZSBqb2luIHByb2JsZW1zLiBI ZW5jZSwKK3F1ZXJpZXMgaW52b2x2aW5nIHBhcnRpdGlvbndpc2Ugam9pbnMgbWF5IHVzZSBKT0lO X09SREVSKCkgbWFueSB0aW1lcy4KKworV2UgdGFrZSB0aGUgY2Fub25pY2FsIGpvaW4gc3RydWN0 dXJlIHRvIGJlIGFuIG91dGVyLWRlZXAgdHJlZSwgc28KK0pPSU5fT1JERVIodDEgdDIgdDMpIHNh eXMgdGhhdCB0MSBpcyB0aGUgZHJpdmluZyB0YWJsZSBhbmQgc2hvdWxkIGJlIGpvaW5lZAorZmly c3QgdG8gdDIgYW5kIHRoZW4gdG8gdDMuIElmIHRoZSBqb2luIHByb2JsZW0gaW52b2x2ZXMgYWRk aXRpb25hbCB0YWJsZXMsCit0aGV5IGNhbiBiZSBqb2luZWQgaW4gYW55IG9yZGVyIGFmdGVyIHRo ZSBqb2luIGJldHdlZW4gdDEsIHQyLCBhbmQgdDMgaGFzCitiZWVuIGNvbnN0cnVjdHVyZWQuIEdl bmVyYXRlZCBqb2luIGFkdmljZSBhbHdheXMgbWVudGlvbnMgYWxsIHRhYmxlcworaW4gdGhlIGpv aW4gcHJvYmxlbSwgYnV0IG1hbnVhbGx5IHdyaXR0ZW4gam9pbiBhZHZpY2UgbmVlZCBub3QgZG8g c28uCisKK0ZvciB0cmVlcyB3aGljaCBhcmUgbm90IG91dGVyLWRlZXAsIHBhcmVudGhlc2VzIGNh biBiZSB1c2VkLiBGb3IgZXhhbXBsZSwKK0pPSU5fT1JERVIodDEgKHQyIHQzKSkgc2F5cyB0aGF0 IHRoZSB0b3AtbGV2ZWwgam9pbiBzaG91bGQgaGF2ZSB0MSBvbiB0aGUKK291dGVyIHNpZGUgYW5k IGEgam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBvbiB0aGUgaW5uZXIgc2lkZS4gVGhhdCBqb2luIHNo b3VsZAorYmUgY29uc3RydWN0ZWQgc28gdGhhdCB0MiBpcyBvbiB0aGUgb3V0ZXIgc2lkZSBhbmQg dDMgaXMgb24gdGhlIGlubmVyIHNpZGUuCisKK0luIHNvbWUgY2FzZXMsIGl0J3Mgbm90IHBvc3Np YmxlIHRvIGZ1bGx5IHNwZWNpZnkgdGhlIGpvaW4gb3JkZXIgaW4gdGhpcyB3YXkuCitGb3IgZXhh bXBsZSwgaWYgdDIgYW5kIHQzIGFyZSBiZWluZyBzY2FubmVkIGJ5IGEgc2luZ2xlIGN1c3RvbSBz Y2FuIG9yIGZvcmVpZ24KK3NjYW4sIG9yIGlmIGEgcGFydGl0aW9ud2lzZSBqb2luIGlzIGJlaW5n IHBlcmZvcm1lZCBiZXR3ZWVuIHRob3NlIHRhYmxlcywgdGhlbgoraXQncyBpbXBvc3NpYmxlIHRv IHNheSB0aGF0IHQyIGlzIHRoZSBvdXRlciB0YWJsZSBhbmQgdDMgaXMgdGhlIGlubmVyIHRhYmxl LAorb3IgdGhlIG90aGVyIHdheSBhcm91bmQ7IGl0J3MganVzdCB1bmRlZmluZWQuIEluIHN1Y2gg Y2FzZXMsIHdlIGdlbmVyYXRlCitqb2luIGFkdmljZSB0aGF0IHVzZXMgY3VybHkgYnJhY2VzLCBp bnRlbmRpbmcgdG8gaW5kaWNhdGUgYSBsYWNrIG9mIG9yZGVyaW5nOgorSk9JTl9PUkRFUih0MSB7 dDIgdDN9KSBzYXlzIHRoYXQgdGhlIHVwcGVybW9zdCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRo ZSBvdXRlcgorc2lkZSBhbmQgc29tZSBraW5kIG9mIGpvaW4gYmV0d2VlbiB0MiBhbmQgdDMgb24g dGhlIGlubmVyIHNpZGUsIGJ1dCB3aXRob3V0CitzYXlpbmcgaG93IHRoYXQgam9pbiBtdXN0IGJl IHBlcmZvcm1lZCBvciBhbnl0aGluZyBhYm91dCB3aGljaCByZWxhdGlvbiBzaG91bGQKK2FwcGVh ciBvbiB3aGljaCBzaWRlIG9mIHRoZSBqb2luLCBvciBldmVuIHdoZXRoZXIgdGhpcyBraW5kIG9m IGpvaW4gaGFzIHNpZGVzLgorCitKb2luIFN0cmF0ZWd5IEFkdmljZQorPT09PT09PT09PT09PT09 PT09PT0KKworVGFncyBzdWNoIGFzIE5FU1RFRF9MT09QX1BMQUlOIHNwZWNpZnkgdGhlIG1ldGhv ZCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvCitwZXJmb3JtIGEgY2VydGFpbiBqb2luLiBNb3JlIHNw ZWNpZmljYWxseSwgTkVTVEVEX0xPT1BfUExBSU4oeCAoeSB6KSkgc2F5cwordGhhdCB0aGUgcGxh biBzaG91bGQgcHV0IHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzICJ4IiBvbiB0aGUg aW5uZXIKK3NpZGUgb2YgYSBwbGFpbiBuZXN0ZWQgbG9vcCAob25lIHdpdGhvdXQgbWF0ZXJpYWxp emF0aW9uIG9yIG1lbW9pemF0aW9uKQorYW5kIHRoYXQgaXQgc2hvdWxkIGFsc28gcHV0IGEgam9p biBiZXR3ZWVuIHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzCisieSIgYW5kIHRoZSBy ZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzICJ6IiBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIG5l c3RlZAorbG9vcC4gSGVuY2UsIGZvciBhbiBOLXRhYmxlIGpvaW4gcHJvYmxlbSwgdGhlcmUgd2ls bCBiZSBOLTEgcGllY2VzIG9mIGpvaW4KK3N0cmF0ZWd5IGFkdmljZTsgbm8gam9pbiBzdHJhdGVn eSBhZHZpY2UgaXMgcmVxdWlyZWQgZm9yIHRoZSBvdXRlcm1vc3QKK3RhYmxlIGluIHRoZSBqb2lu IHByb2JsZW0uCisKK0NvbnNpZGVyaW5nIHRoYXQgd2UgaGF2ZSBib3RoIGpvaW4gb3JkZXIgYWR2 aWNlIGFuZCBqb2luIHN0cmF0ZWd5IGFkdmljZSwKK2l0IG1pZ2h0IHNlZW0gbmF0dXJhbCB0byBz YXkgdGhhdCBORVNURURfTE9PUF9QTEFJTih4KSBzaG91bGQgYmUgcmVkZWZpbmVkCit0byBtZWFu IHRoYXQgeCBzaG91bGQgYXBwZWFyIGJ5IGl0c2VsZiBvbiBvbmUgc2lkZSBvciB0aGUgb3RoZXIg b2YgYSBuZXN0ZWQKK2xvb3AsIHJhdGhlciB0aGFuIHNwZWNpZmljYWxseSBvbiB0aGUgaW5uZXIg c2lkZSwgYnV0IHRoaXMgZGVmaW5pdGlvbiBhcHBlYXJzCit1c2VsZXNzIGluIHByYWN0aWNlLiBJ dCBnaXZlcyB0aGUgcGxhbm5lciB0b28gbXVjaCBmcmVlZG9tIHRvIGRvIHRoaW5ncyB0aGF0Citi ZWFyIGxpdHRsZSByZXNlbWJsYW5jZSB0byB3aGF0IHRoZSB1c2VyIHByb2JhYmx5IGhhZCBpbiBt aW5kLiBUaGlzIG1ha2VzCitvbmx5IGEgbGltaXRlZCBhbW91bnQgb2YgcHJhY3RpY2FsIGRpZmZl cmVuY2UgaW4gdGhlIGNhc2Ugb2YgYSBtZXJnZSBqb2luIG9yCit1bnBhcmFtZXRlcml6ZWQgbmVz dGVkIGxvb3AsIGJ1dCBmb3IgYSBwYXJhbWV0ZXJpemVkIG5lc3RlZCBsb29wIG9yIGEgaGFzaAor am9pbiwgdGhlIHR3byBzaWRlcyBhcmUgdHJlYXRlZCB2ZXJ5IGRpZmZlcmVudGx5IGFuZCBzYXlp bmcgdGhhdCBhIGNlcnRhaW4KK3JlbGF0aW9uIHNob3VsZCBiZSBpbnZvbHZlZCBpbiBvbmUgb2Yg dGhvc2Ugb3BlcmF0aW9ucyB3aXRob3V0IHNheWluZyB3aGljaAorcm9sZSBpdCBzaG91bGQgdGFr ZSBpc24ndCBzYXlpbmcgbXVjaC4KKworVGhpcyBjaG9pY2Ugb2YgZGVmaW5pdGlvbiBpbXBsaWVz IHRoYXQgam9pbiBzdHJhdGVneSBhZHZpY2UgYWxzbyBpbXBvc2VzIHNvbWUKK2pvaW4gb3JkZXIg Y29uc3RyYWludHMuIEZvciBleGFtcGxlLCBnaXZlbiBhIGpvaW4gYmV0d2VlbiBmb28gYW5kIGJh ciwKK0hBU0hfSk9JTihiYXIpIGltcGxpZXMgdGhhdCBmb28gaXMgdGhlIGRyaXZpbmcgdGFibGUu IE90aGVyd2lzZSwgaXQgd291bGQKK2JlIGltcG9zc2libGUgdG8gcHV0IGJhciBiZW5lYXRoIHRo ZSBpbm5lciBzaWRlIG9mIGEgSGFzaCBKb2luLgorCitOb3RlIHRoYXQsIGdpdmVuIHRoaXMgZGVm aW5pdGlvbiwgaXQncyByZWFzb25hYmxlIHRvIGNvbnNpZGVyIGRlbGV0aW5nIHRoZQoram9pbiBv cmRlciBhZHZpY2UgYnV0IGFwcGx5aW5nIHRoZSBqb2luIHN0cmF0ZWd5IGFkdmljZS4gRm9yIGV4 YW1wbGUsCitjb25zaWRlciBhIHN0YXIgc2NoZW1hIHdpdGggdGFibGVzIGZhY3QsIGRpbTEsIGRp bTIsIGRpbTMsIGRpbTQsIGFuZCBkaW01LgorVGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFk dmljZSBtaWdodCBzcGVjaWZ5IEpPSU5fT1JERVIoZmFjdCBkaW0xIGRpbTMKK2RpbTQgZGltMiBk aW01KSBIQVNIX0pPSU4oZGltMiBkaW00KSBORVNURURfTE9PUF9QTEFJTihkaW0xIGRpbTMgZGlt NSkuCitEZWxldGluZyB0aGUgSk9JTl9PUkRFUiBhZHZpY2UgYWxsb3dzIHRoZSBwbGFubmVyIHRv IHJlb3JkZXIgdGhlIGpvaW5zCitob3dldmVyIGl0IGxpa2VzIHdoaWxlIHN0aWxsIGZvcmNpbmcg dGhlIHNhbWUgY2hvaWNlIG9mIGpvaW4gbWV0aG9kLiBUaGlzCitzZWVtcyBwb3RlbnRpYWxseSB1 c2VmdWwsIGFuZCBpcyBvbmUgcmVhc29uIHdoeSBhIHVuaWZpZWQgc3ludGF4IHRoYXQgY29udHJv bHMKK2JvdGggam9pbiBvcmRlciBhbmQgam9pbiBtZXRob2QgaW4gYSBzaW5nbGUgbG9jdXRpb24g d2FzIG5vdCBjaG9zZW4uCisKK0FkdmljZSBDb21wbGV0ZW5lc3MKKz09PT09PT09PT09PT09PT09 PT0KKworQW4gZXNzZW50aWFsIGd1aWRpbmcgcHJpbmNpcGxlIGlzIHRoYXQgbm8gaW5mZXJlbmNl IG1heSBtYWRlIG9uIHRoZSBiYXNpcworb2YgdGhlIGFic2VuY2Ugb2YgYWR2aWNlLiBUaGUgdXNl ciBpcyBlbnRpdGxlZCB0byByZW1vdmUgYW55IHBvcnRpb24gb2YgdGhlCitnZW5lcmF0ZWQgYWR2 aWNlIHdoaWNoIHRoZXkgZGVlbSB1bnN1aXRhYmxlIG9yIGNvdW50ZXJwcm9kdWN0aXZlIGFuZCB0 aGUKK3Jlc3VsdCBzaG91bGQgb25seSBiZSB0byBpbmNyZWFzZSB0aGUgZmxleGliaWxpdHkgYWZm b3JkZWQgdG8gdGhlIHBsYW5uZXIuCitUaGlzIG1lYW5zIHRoYXQgaWYgYWR2aWNlIGNhbiBzYXkg dGhhdCBhIGNlcnRhaW4gb3B0aW1pemF0aW9uIG9yIHRlY2huaXF1ZQorc2hvdWxkIGJlIHVzZWQs IGl0IHNob3VsZCBhbHNvIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIG9wdGltaXphdGlvbiBvcgor dGVjaG5pcXVlIHNob3VsZCBub3QgYmUgdXNlZC4gV2Ugc2hvdWxkIG5ldmVyIGFzc3VtZSB0aGF0 IHRoZSBhYnNlbmNlIG9mIGFuCitpbnN0cnVjdGlvbiB0byBkbyBhIGNlcnRhaW4gdGhpbmcgbWVh bnMgdGhhdCBpdCBzaG91bGQgbm90IGJlIGRvbmU7IGFsbAoraW5zdHJ1Y3Rpb25zIG11c3QgYmUg ZXhwbGljaXQuCisKK1NlbWlqb2luIFVuaXF1ZW5lc3MKKz09PT09PT09PT09PT09PT09PT0KKwor RmFjZWQgd2l0aCBhIHNlbWlqb2luLCB0aGUgcGxhbm5lciBjb25zaWRlcnMgYm90aCBhIGRpcmVj dCBpbXBsZW1lbnRhdGlvbgorYW5kIGEgcGxhbiB3aGVyZSB0aGUgb25lIHNpZGUgaXMgbWFkZSB1 bmlxdWUgYW5kIHRoZW4gYW4gaW5uZXIgam9pbiBpcworcGVyZm9ybWVkLiBXZSBlbWl0IFNFTUlK T0lOX1VOSVFVRSgpIGFkdmljZSB3aGVuIHRoaXMgdHJhbnNmb3JtYXRpb24gb2NjdXJzCithbmQg U0VNSUpPSU5fTk9OX1VOSVFVRSgpIGFkdmljZSB3aGVuIGl0IGRvZXNuJ3QuIFRoZXNlIGl0ZW1z IHdvcmsgbGlrZQoram9pbiBzdHJhdGVneSBhZHZpY2U6IHRoZSBpbm5lciBzaWRlIG9mIHRoZSBy ZWxldmFudCBqb2luIGlzIG5hbWVkLCBhbmQgdGhlCitjaG9zZW4gam9pbiBvcmRlciBtdXN0IGJl IGNvbXBhdGlibGUgd2l0aCB0aGUgYWR2aWNlIGhhdmluZyBzb21lIGVmZmVjdC4KKworUGFydGl0 aW9ud2lzZQorPT09PT09PT09PT09PQorCitQQVJUSVRJT05XSVNFKCkgYWR2aXNlIGNhbiBiZSB1 c2VkIHRvIHNwZWNpZnkgYm90aCB0aG9zZSBwYXJ0aXRpb253aXNlIGpvaW5zCit3aGljaCBzaG91 bGQgYmUgcGVyZm9ybWVkIGFuZCB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIHBlcmZvcm1lZDsg dGhlIGlkZWEKK2lzIHRoYXQgZWFjaCBhcmd1bWVudCB0byBQQVJUSVRJT05XSVNFIHNwZWNpZmll cyBhIHNldCBvZiByZWxhdGlvbnMgdGhhdAorc2hvdWxkIGJlIHNjYW5uZWQgcGFydGl0aW9ud2lz ZSBhZnRlciBiZWluZyBqb2luZWQgdG8gZWFjaCBvdGhlciBhbmQgbm90aGluZworZWxzZS4gSGVu Y2UsIGZvciBleGFtcGxlLCBQQVJUSVRJT05XSVNFKCh0MSB0MikgdDMpIHNwZWNpZmllcyB0aGF0 IHRoZQorcXVlcnkgc2hvdWxkIGNvbnRhaW4gYSBwYXJ0aXRpb253aXNlIGpvaW4gYmV0d2VlbiB0 MSBhbmQgdDIgYW5kIHRoYXQgdDMKK3Nob3VsZCBub3QgYmUgcGFydCBvZiBhbnkgcGFydGl0aW9u d2lzZSBqb2luLiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgcmVscworaW4gdGhlIHF1ZXJ5LCBzcGVj aWZ5aW5nIGp1c3QgUEFSVElUSU9OV0lTRSgodDEgdDIpKSB3b3VsZCBoYXZlIHRoZSBzYW1lCitl ZmZlY3QsIHNpbmNlIHRoZXJlIHdvdWxkIGJlIG5vIG90aGVyIHJlbHMgdG8gd2hpY2ggdDMgY291 bGQgYmUgam9pbmVkIGluCithIHBhcnRpdGlvbndpc2UgZmFzaGlvbi4KKworUGFyYWxsZWwgUXVl cnkgKEdhdGhlciwgZXRjLikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0VhY2gg YXJndW1lbnQgdG8gR0FUSEVSKCkgb3IgR0FUSEVSX01FUkdFKCkgaXMgYSBzaW5nbGUgcmVsYXRp b24gb3IgYW4KK2V4YWN0IHNldCBvZiByZWxhdGlvbnMgb24gdG9wIG9mIHdoaWNoIGEgR2F0aGVy IG9yIEdhdGhlciBNZXJnZSBub2RlLAorcmVzcGVjdGl2ZWx5LCBzaG91bGQgYmUgcGxhY2VkLiBF YWNoIGFyZ3VtZW50IHRvIE5PX0dBVEhFUigpIGlzIGEgc2luZ2xlCityZWxhdGlvbiB0aGF0IHNo b3VsZCBub3QgYXBwZWFyIGJlbmVhdGggYW55IEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZTsK K3RoYXQgaXMsIHBhcmFsbGVsaXNtIHNob3VsZCBub3QgYmUgdXNlZC4KKworSW1wbGljaXQgSm9p biBPcmRlciBDb25zdHJhaW50cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitX aGVuIEpPSU5fT1JERVIoKSBhZHZpY2UgaXMgbm90IHByb3ZpZGVkIGZvciBhIHBhcnRpY3VsYXIg am9pbiBwcm9ibGVtLAorb3RoZXIgcGllY2VzIG9mIGFkdmljZSBtYXkgc3RpbGwgaW5jaWRlbnRh bGx5IGNvbnN0cmFpbnQgdGhlIGpvaW4gb3JkZXIuCitGb3IgZXhhbXBsZSwgYSB1c2VyIHdobyBz cGVjaWZpZXMgSEFTSF9KT0lOKChmb28gYmFyKSkgaXMgZXhwbGljaXRseSBzYXlpbmcKK3RoYXQg dGhlcmUgc2hvdWxkIGJlIGEgaGFzaCBqb2luIHdpdGggZXhhY3RseSBmb28gYW5kIGJhciBvbiB0 aGUgb3V0ZXIKK3NpZGUgb2YgaXQsIGJ1dCB0aGF0IGFsc28gaW1wbGllcyB0aGF0IGZvbyBhbmQg YmFyIG11c3QgYmUgam9pbmVkIHRvCitlYWNoIG90aGVyIGJlZm9yZSBlaXRoZXIgb2YgdGhlbSBp cyBqb2luZWQgdG8gYW55dGhpbmcgZWxzZS4gT3RoZXJ3aXNlLAordGhlIGpvaW4gdGhlIHVzZXIg aXMgYXR0ZW1wdGluZyB0byBjb25zdHJhaW50IHdvbid0IGFjdHVhbGx5IG9jY3VyIGluIHRoZQor cXVlcnksIHdoaWNoIGVuZHMgdXAgbG9va2luZyBsaWtlIHRoZSBzeXN0ZW0gaGFzIGp1c3QgZGVj aWRlZCB0byBpZ25vcmUKK3RoZSBhZHZpY2UgYWx0b2dldGhlci4KKworRnV0dXJlIFdvcmsKKz09 PT09PT09PT09CisKK1dlIGRvbid0IGhhbmRsZSBjaG9pY2Ugb2YgYWdncmVnYXRpb246IGl0IHdv dWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBmb3JjZQorc29ydGVkIG9yIGdyb3VwZWQgYWdncmVn YXRpb24uIEknbSBndWVzc2luZyB0aGlzIGNhbiBiZSBsZWZ0IHRvIGZ1dHVyZSB3b3JrLgorCitN b3JlIHNlcmlvdXNseSwgd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCBlYWdlciBhZ2dyZWdh dGlvbiwgd2hpY2ggY291bGQKK2hhdmUgYSBsYXJnZSBpbXBhY3Qgb24gdGhlIHNoYXBlIG9mIHRo ZSBwbGFuIHRyZWUuIFhYWDogVGhpcyBuZWVkcyBzb21lIHN0dWR5Cit0byBkZXRlcm1pbmUgaG93 IGxhcmdlIGEgcHJvYmxlbSBpdCBpcywgYW5kIG1pZ2h0IG5lZWQgdG8gYmUgZml4ZWQgc29vbmVy CityYXRoZXIgdGhhbiBsYXRlci4KKworV2UgZG9uJ3Qgb2ZmZXIgYW55IGNvbnRyb2wgb3ZlciBl c3RpbWF0ZXMsIG9ubHkgb3V0Y29tZXMuIEl0IHNlZW1zIGxpa2UgYQorZ29vZCBpZGVhIHRvIGlu Y29ycG9yYXRlIHRoYXQgYWJpbGl0eSBhdCBzb21lIGZ1dHVyZSBwb2ludCwgYXMgcGdfaGludF9w bGFuCitkb2VzLiBIb3dldmVyLCBzaW5jZSBwcmltYXJ5IGdvYWwgb2YgdGhlIGluaXRpYWwgZGV2 ZWxvcG1lbnQgd29yayBpcyB0byBiZQorYWJsZSB0byBpbmR1Y2UgdGhlIHBsYW5uZXIgdG8gcmVj cmVhdGUgYSBkZXNpcmVkIHBsYW4gdGhhdCB3b3JrZWQgd2VsbCBpbgordGhlIHBhc3QsIHRoaXMg aGFzIG5vdCBiZWVuIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IGVmZm9ydC4K KworWFhYIE5lZWQgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBhbmQgaG93IHdlbGwgc3VwcGx5aW5n IGFkdmljZSB3b3JrcyB3aXRoIEdFUU8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv Z2F0aGVyLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGNjMGRl ZGY4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVk L2dhdGhlci5vdXQKQEAgLTAsMCArMSwzNzEgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NF VCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMTsKK1NFVCBwYXJhbGxlbF9zZXR1 cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKK1NFVCBtaW5fcGFyYWxs ZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsK K0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChk aW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsK K1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKK0NSRUFURSBUQUJMRSBndF9mYWN0ICgKKwlpZCBpbnQg bm90IG51bGwsCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBndF9kaW0gKGlk KQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9m YWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7 CitWQUNVVU0gQU5BTFlaRSBndF9mYWN0OworLS0gQnkgZGVmYXVsdCwgd2UgZXhwZWN0IEdhdGhl ciBNZXJnZSB3aXRoIGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlciBNZXJnZQorICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAg ICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChm LmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24g Z3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9T Q0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNCByb3dzKQorCistLSBGb3JjZSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9mIGJvdGggcmVsYXRpb25zIHRvZ2V0aGVyLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2Zh Y3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdh dGhlciBNZXJnZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFy YWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoKGYgZCkp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKChm IGQpKQorKDE2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0 aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZ IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU29ydAorICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAtPiAgR2F0aGVyCisgICAg ICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZiBkKSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk KQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoKGYgZCkpCiso MTYgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBzZXBhcmF0ZSBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlIG9wZXJhdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZiBkKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo Zi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYu ZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBm CisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAg ICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLworICAgR0FUSEVSX01FUkdFKGQp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9N RVJHRShmIGQpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVS IEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNv cnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAg ICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6 IGQuaWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5l ZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgR0FU SEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdB VEhFUihmIGQpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXIoKGQgZC9kLmQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAg LT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg R0FUSEVSKChkIGQvZC5kKSkgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAg IFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FU SEVSX01FUkdFKGYpCisgICBOT19HQVRIRVIoZCkKKygxNyByb3dzKQorCitDT01NSVQ7CistLSBG b3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9uIGJ1dCBubyBwYXJh bGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6 IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQK KyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVS KGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9T Q0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSX01FUkdFKGYpCisgICBOT19HQVRI RVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dh dGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQp CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3Jr ZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtl eTogZC5pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBk CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZCkgLyogbWF0Y2hlZCAq LworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FO KGYgZCkKKyAgIEdBVEhFUl9NRVJHRShkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9m YWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4K KyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5 OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFj dCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyogbWF0Y2hlZCAqLwor ICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIFNFUV9TQ0FOKGYp CisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSKGYpCisgICBO T19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2dhdGhlcihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQp CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQu aWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDog MQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworICAgTk9fR0FU SEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdB VEhFUihkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKworQ09NTUlUOworLS0gRm9yY2Ug bm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQg PSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2Rp bSBkCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19H QVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5f UExBSU4oZikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9w a2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBm b3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUgT1JERVIgQlkgY2xhdXNlLCBidXQganVzdCBH YXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Z2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgor ICAgRGlzYWJsZWQ6IHRydWUKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFsbGVs IEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBhcmFs bGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0g ZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKChmIGQpKSAvKiBtYXRj aGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKChmIGQpKQor KDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChm IGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g Z3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgorICAgV29ya2VycyBQbGFu bmVkOiAxCisgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChm LmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFj dCBmCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRI RVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVS KChmIGQpKQorKDE0IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNl LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBk KSkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4g IFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVs IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQor ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FU SEVSKChmIGQpKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgICBOT19HQVRI RVIoZikgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NB TihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTcgcm93cykKKworQ09NTUlUOwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiMGRjZWY3MDEyCi0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dApAQCAt MCwwICsxLDUwOSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93 b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGludGVnZXIg cHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VM RUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NSRUFURSBU QUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50 KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2Rp bTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcs IChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0g QU5BTFlaRSBqb19kaW0yOworQ1JFQVRFIFRBQkxFIGpvX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5 IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0xIChpZCks CisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMiAoaWQpCispIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2ZhY3QKKwlT RUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19mYWN0OworLS0gV2UgZXhwZWN0IHRvIGpvaW4gdG8g ZDIgZmlyc3QgYW5kIHRoZW4gZDEsIHNpbmNlIHRoZSBjb25kaXRpb24gb24gZDIKKy0tIGlzIG1v cmUgc2VsZWN0aXZlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lOKGQyIGQxKQorICAg U0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE2IHJvd3MpCisKKy0t IEZvcmNlIGEgZmV3IGRpZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVy eSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlh YmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwxID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MiBkMgorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpCisgICBIQVNIX0pPSU4oZDEgZDIp CisgICBTRVFfU0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDIgZDEp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lOKGQyIGQxKQorICAgU0VRX1ND QU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBmIGQyKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZU IEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOwor ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChm LmRpbTJfaWQgPSBkMi5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDog KGQxLmlkID0gZi5kaW0xX2lkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEK KyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxIGYgZDIp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQx IGYgZDIpCisgICBIQVNIX0pPSU4oZiBkMikKKyAgIFNFUV9TQ0FOKGQxIGYgZDIpCisgICBOT19H QVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2pvaW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBP TiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9 IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdl IEpvaW4KKyAgIE1lcmdlIENvbmQ6ICgoZi5kaW0yX2lkID0gZDIuaWQpIEFORCAoZi5kaW0xX2lk ID0gZDEuaWQpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbTJfaWQsIGYu ZGltMV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIFNvcnQK KyAgICAgICAgIFNvcnQgS2V5OiBkMi5pZCwgZDEuaWQKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9v cAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFs aXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKQorICAgTUVSR0VfSk9J Tl9QTEFJTigoZDEgZDIpKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDIpCisgICBTRVFf U0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMjEgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYge2QxIGQyfSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJ TEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9f ZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0g MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoKGYuZGltMl9pZCA9 IGQyLmlkKSBBTkQgKGYuZGltMV9pZCA9IGQxLmlkKSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBT b3J0IEtleTogZi5kaW0yX2lkLCBmLmRpbTFfaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19mYWN0IGYKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZDIuaWQsIGQxLmlkCisg ICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAg ICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIHtkMSBkMn0p IC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiAoZDIgZDEpKQorICAgTUVSR0VfSk9JTl9QTEFJTigoZDEgZDIpKQorICAgTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVS KGYgZDEgZDIpCisoMjEgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBqb2luIG9yZGVyIGJ5 IG1lbnRpb25pbmcganVzdCBhIHByZWZpeCBvZiB0aGUgam9pbiBsaXN0LgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZDIuaWQgPSBmLmRpbTJfaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MiBkMgorICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEu aWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTEgZDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMikgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgKGYgZDEpKQorICAgSEFTSF9K T0lOKGQxIChmIGQxKSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZiBkMSBk MikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQx LmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2 YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2Ug Q29uZDogKChkMi5pZCA9IGYuZGltMl9pZCkgQU5EIChkMS5pZCA9IGYuZGltMV9pZCkpCisgICAt PiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQyLmlkLCBkMS5pZAorICAgICAgICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAg TWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0x IGQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW0yX2lkLCBmLmRpbTFfaWQKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGQyIGQxIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNURURf TE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGQxIGYpCisgICBOT19HQVRIRVIo ZiBkMSBkMikKKygyMSByb3dzKQorCitDT01NSVQ7CistLSBqb19mYWN0IGlzIG5vdCBwYXJ0aXRp b25lZCwgYnV0IGxldCdzIHRyeSBwcmV0ZW5kaW5nIHRoYXQgaXQgaXMgYW5kCistLSB2ZXJpZnlp bmcgdGhhdCB0aGUgYWR2aWNlIGRvZXMgbm90IGFwcGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSBkMSBkMiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBK T0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBOZXN0ZWQg TG9vcAorICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19mYWN0IGYKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvX2RpbTFfcGtleSBvbiBq b19kaW0xIGQxCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbTFfaWQpCisg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IGpvX2RpbTJfcGtleSBvbiBqb19kaW0yIGQyCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBm LmRpbTJfaWQpCisgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZi9kMSBkMSBkMikgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpCisgICBORVNU RURfTE9PUF9QTEFJTihkMSBkMikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQxIHB1 YmxpYy5qb19kaW0xX3BrZXkgZDIgcHVibGljLmpvX2RpbTJfcGtleSkKKyAgIE5PX0dBVEhFUihm IGQxIGQyKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn am9pbl9vcmRlcihmL2QxIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0x X2lkKSBBTkQgKGQyLmlkID0gZi5kaW0yX2lkKSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9 IDEpCisgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYvZDEgKGQxIGQyKSkgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxIGQyIGYpCisgICBORVNURURf TE9PUF9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDIpCisgICBTRVFfU0NB TihkMSBkMiBmKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworQ09NTUlUOwor LS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhpcyBxdWVyeSBpcyBpbnRlbmRlZCB0byBw cmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9tIHJlZHVjaW5nIHRoZSBGVUxMIEpPSU4g dG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQgd2UKKy0tIGNhbiB0ZXN0IHdoYXQgaGFw cGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90IGJlIHJlb3JkZXJlZC4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5F UiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9 IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRp bTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisg ICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQor ICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgLT4g IFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5F U1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dB VEhFUihkMSBmIGQyKQorKDE4IHJvd3MpCisKKy0tIFdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBm b3JjZSB0aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQg aXMgbm90IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNl IHRoZSBwbGFubmVyCistLSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRoZSBkcml2aW5nIHRhYmxl LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIo ZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBk MiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9S IGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxl ZDogdHJ1ZQorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFf aWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBEaXNhYmxlZDog dHJ1ZQorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYuZGltMl9pZCAr IDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5p ZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAg ICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZDEgZDIpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVTVEVE X0xPT1BfUExBSU4oZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9fR0FUSEVSKGQxIGYg ZDIpCisoMjEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2lu X29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGlt MV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg Sm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkp CisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChmLmRpbTJf aWQgKyAwKSkgPSAoKGQyLmlkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQg S2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MiBkMgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQx KQorICAgTUVSR0VfSk9JTl9QTEFJTihkMikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQx KQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIwIHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiBmIGQx KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19k aW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYu ZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0x X2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAo KGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdl IEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYuZGlt Ml9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTog KChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIK KyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQg KyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pP SU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4o ZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIwIHJvd3MpCisKK0NPTU1JVDsKKy0t IFR3byBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgc2hvdWxkIGNvbmZsaWN0LiBJbiB0aGUgc2Vj b25kIGNhc2UsCistLSB0aGUgY29uZmxpY3QgaXMgaW1wbGljaXQ6IGlmIGQxIGlzIG9uIHRoZSBp bm5lciBzaWRlIG9mIGEgam9pbiBvZiBhbnkKKy0tIHR5cGUsIGl0IGNhbm5vdCBhbHNvIGJlIHRo ZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2pvaW5fb3JkZXIoZikgam9pbl9vcmRlcihkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2Zh Y3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQor CU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYu ZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdl IENvbmQ6ICgoKGYuZGltMl9pZCArIDApKSA9ICgoZDIuaWQgKyAwKSkpCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgICBKT0lOX09SREVSKGQxKSAvKiBt YXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihkMikKKyAgIE5FU1RF RF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhF UihkMSBmIGQyKQorKDIxIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihkMSkgaGFzaF9qb2luKGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFj dCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJ T04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1Ig KGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAt PiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgICAg ICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAg ICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIu aWQgKyAwKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQy CisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6 ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxKSAvKiBt YXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSEFTSF9KT0lOKGQxKSAvKiBtYXRjaGVkLCBjb25m bGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihkMSAoZDIgZikpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9NQVRF UklBTElaRSgoZiBkMikpCisgICBTRVFfU0NBTihkMSBkMiBmKQorICAgTk9fR0FUSEVSKGQxIGYg ZDIpCisoMjEgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv ZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjBmOWRiNjkyMTkwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApAQCAtMCwwICsxLDMzOSBAQAorTE9B RCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIg PSAwOworQ1JFQVRFIFRBQkxFIGpvaW5fZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0 ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpv aW5fZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZGltOworQ1JFQVRFIFRBQkxFIGpvaW5fZmFj dCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVy ZW5jZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpv aW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZmFjdDsKKy0tIFdlIGV4cGVj dCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo Zi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1ND QU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMCByb3dzKQorCistLSBUcnkgZm9yY2luZyBl YWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBhcyB0aGUgaW5uZXIgdGFibGUu CistLSBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZvciBNRVJHRV9KT0lOX01BVEVS SUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhlIHBsYW5uZXIga25vd3MgdGhh dCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0tIHJlZnVzZSB0byBhZGQgbWFy ay9yZXN0b3JlIG92ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0hBU0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNo CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSEFTSF9KT0lOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBk KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgor ICAgRGlzYWJsZWQ6IHRydWUKKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCkgLyogbWF0Y2hlZCwg ZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisg ICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9k aW1faWQgZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlO KGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9J Tl9QTEFJTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkIGQgcHVi bGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDExIHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9M T09QX01BVEVSSUFMSVpFKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQor KDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xP T1BfTUVNT0laRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK KyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAt PiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUgS2V5OiBmLmRpbV9pZAorICAgICAgICAgQ2FjaGUg TW9kZTogbG9naWNhbAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtl eSBvbiBqb2luX2RpbSBkCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9p ZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZCkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQor ICAgTkVTVEVEX0xPT1BfTUVNT0laRShkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4o ZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihkKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9m YWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4g IFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2Rp bV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lk KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAg TkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVi bGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1J VDsKKy0tIE5vdyB0cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2lu X2ZhY3QgYXMgdGhlIGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihmKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9m YWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4o ZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZCBmKQorICAgSEFTSF9KT0lOKGYpCisgICBTRVFfU0NBTihkIGYpCisgICBOT19HQVRIRVIoZiBk KQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0Vf Sk9JTl9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5p ZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBq b2luX2RpbSBkCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9NQVRFUklB TElaRShmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5IGYgcHVibGljLmpv aW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJn ZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBNRVJHRV9KT0lOX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAg IElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGlt X2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQor ICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBORVNURURfTE9PUF9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTEla RShmKQorICAgU0VRX1NDQU4oZCBmKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNZW1v aXplCisgICAgICAgICBDYWNoZSBLZXk6IGQuaWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2lj YWwKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9p bl9mYWN0IGYKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVNT0laRShmKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNU RURfTE9PUF9NRU1PSVpFKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5ERVhfU0NBTihmIHB1Ymxp Yy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAg IC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2lu X2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICBJbmRleCBDb25kOiAoZGltX2lk ID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQg ZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5ERVhfU0NB TihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dz KQorCitDT01NSVQ7CistLSBOb24td29ya2luZyBjYXNlcy4gV2UgY2FuJ3QgZm9yY2UgYSBmb3Jl aWduIGpvaW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsCistLSBiZWNhdXNlIHRoZXkgYXJlbid0IGZv cmVpZ24gdGFibGVzLiBXZSBhbHNvIGNhbid0IHVzZSB0d28gZGlmZmVyZW50CistLSBzdHJhdGVn aWVzIG9uIHRoZSBzYW1lIHRhYmxlLCBub3IgY2FuIHdlIHB1dCBib3RoIHRhYmxlcyBvbiB0aGUg aW5uZXIKKy0tIHNpZGUgb2YgdGhlIHNhbWUgam9pbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAg LT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2lu X2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGlt X2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgRk9SRUlHTl9KT0lOKChmIGQpKSAvKiBt YXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhf U0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMyByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlO KGYpIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVy Z2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5f ZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0 X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVE X0xPT1BfUExBSU4oZikgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworICAgTkVT VEVEX0xPT1BfTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0Vf Sk9JTl9QTEFJTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5IGYgcHVi bGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZiBkKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9m YWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlz YWJsZWQ6IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBD b25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9M T09QX1BMQUlOKGYpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworICAgTkVTVEVEX0xPT1BfUExBSU4o ZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZiBkKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9T Q0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDE0IHJvd3Mp CisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv cGFydGl0aW9ud2lzZS5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRp dGlvbndpc2Uub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYjNk MGE4MjQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvcGFydGl0aW9ud2lzZS5vdXQKQEAgLTAsMCArMSw0MjYgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2 aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFi bGVfcGFydGl0aW9ud2lzZV9qb2luID0gdHJ1ZTsKK0NSRUFURSBUQUJMRSBwdDEgKGlkIGludGVn ZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdF IChpZCk7CitDUkVBVEUgVEFCTEUgcHQxYSBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJP TSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JF QVRFIFRBQkxFIHB0MWIgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRv ICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJM RSBwdDFjIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlk LCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUg MykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFla RSBwdDE7CitDUkVBVEUgVEFCTEUgcHQyIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRl eHQsIHZhbDIgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0 MmEgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElP TiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQy IEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQyIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1Qg ZywgJ3NvbWUgb3RoZXIgdGV4dCAnIHx8IGcsIChnICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDMwMDAsMikgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MjsKK0NSRUFURSBUQUJMRSBw dDMgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTMgdGV4dCwgdmFsMyBpbnQpCisJUEFSVElU SU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQzYSBQQVJUSVRJT04gT0YgcHQzIEZP UiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0M2IgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZS T00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0NSRUFURSBUQUJMRSBwdDNjIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgyMDAx KSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQg SU5UTyBwdDMgKGlkLCBkaW0zLCB2YWwzKQorCVNFTEVDVCBnLCAnYSB0aGlyZCByYW5kb20gdGV4 dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDAsMykg ZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MzsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoIChpZCBpbnRl Z2VyIHByaW1hcnkga2V5LCBkaW1tIHRleHQsIHZhbG0gaW50KQorCVBBUlRJVElPTiBCWSBSQU5H RSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hhIFBBUlRJVElPTiBPRiBwdG1pc21hdGNo CisgICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTUwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGIgUEFSVElUSU9OIE9GIHB0 bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDE1MDEpIHRvICgzMDAxKQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0bWlzbWF0Y2ggKGlkLCBk aW1tLCB2YWxtKQorCVNFTEVDVCBnLCAneWV0IGFub3RoZXIgdGV4dCAnIHx8IGcsIChnICUgMikg KyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBw dG1pc21hdGNoOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5p ZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5k CisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHB0Ml8xLmlkID0gcHQzXzEuaWQpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9u IHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8xLmlkKQor ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8yLmlk ID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgor ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAg ICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlkID0gcHQzXzMuaWQpCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQx Y19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0 Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmEgcHQzL3B1YmxpYy5wdDNh IHB0MS9wdWJsaWMucHQxYSkKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJiIHB0My9wdWJs aWMucHQzYiBwdDEvcHVibGljLnB0MWIpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYyBw dDMvcHVibGljLnB0M2MgcHQxL3B1YmxpYy5wdDFjKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHQx L3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMpCisgICBIQVNIX0pP SU4ocHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisgICBT RVFfU0NBTihwdDIvcHVibGljLnB0MmEgcHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYiBw dDMvcHVibGljLnB0M2IKKyAgICBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjKQorICAg SU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVibGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0 MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9wdWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5 KQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MiBwdDMpKQorICAgTk9fR0FUSEVSKHB0MS9wdWJs aWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQor ICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9w dWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93cykKKworLS0gU3VwcHJlc3MgcGFy dGl0aW9ud2lzZSBqb2luLCBvciBkbyBpdCBqdXN0IHBhcnRpYWxseS4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKHB0MSBwdDIgcHQzKSc7 CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0 MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQg dmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAocHQyLmlkID0gcHQzLmlkKQorICAg ICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQy XzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0 M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFi IHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDIuaWQpCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSBwdDIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJU0UocHQxKSAvKiBtYXRjaGVkICovCisgICBQQVJU SVRJT05XSVNFKHB0MikgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDMpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MiBwdDMg cHQxKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHQxKQorICAgSEFTSF9KT0lOKHB0MykKKyAgIFNF UV9TQ0FOKHB0Mi9wdWJsaWMucHQyYSBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0 My9wdWJsaWMucHQzYQorICAgIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisgICBJ TkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQx YiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkp CisgICBQQVJUSVRJT05XSVNFKHB0MiBwdDMgcHQxKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMu cHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAg IHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJs aWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDMgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpJzsKK0VYUExBSU4g KFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hF UkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBB TkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo cHQxLmlkID0gcHQzLmlkKQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQxXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChwdDFfMi5pZCA9IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKHB0MV8zLmlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9 IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18y CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwzID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJU0UoKHB0 MSBwdDIpKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0MykgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQxL3B1YmxpYy5wdDFh IHB0Mi9wdWJsaWMucHQyYSkKKyAgIEpPSU5fT1JERVIocHQxL3B1YmxpYy5wdDFiIHB0Mi9wdWJs aWMucHQyYikKKyAgIEpPSU5fT1JERVIocHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYykK KyAgIEpPSU5fT1JERVIoe3B0MSBwdDJ9IHB0MykKKyAgIEhBU0hfSk9JTihwdDIvcHVibGljLnB0 MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMpCisgICBTRVFfU0NBTihwdDEv cHVibGljLnB0MWEgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYiBwdDIvcHVibGljLnB0 MmIKKyAgICBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBw dDMvcHVibGljLnB0M2IKKyAgICBwdDMvcHVibGljLnB0M2MpCisgICBQQVJUSVRJT05XSVNFKChw dDEgcHQyKSBwdDMpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQx YiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0 Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMu cHQzYykKKyg0NyByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IGNvbmZsaWN0aW5nIGFkdmljZS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNF KChwdDEgcHQyKSAocHQxIHB0MykpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBw dDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAx OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEFwcGVuZAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzEuaWQg PSBwdDNfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFi X3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQy XzIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQg TG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo cHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJj IHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQz YyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg ICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJ U0UoKHB0MSBwdDIpKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgICBQQVJU SVRJT05XSVNFKChwdDEgcHQzKSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJhIHB0 My9wdWJsaWMucHQzYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMu cHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIv cHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9M T09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFj KQorICAgSEFTSF9KT0lOKHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1Ymxp Yy5wdDNjKQorICAgU0VRX1NDQU4ocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDIv cHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJs aWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkg cHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVi bGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dB VEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIv cHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJs aWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDUxIHJvd3MpCisKK0NP TU1JVDsKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9ud2lzZSBqb2luIHdpdGggYSBtaXNtYXRj aGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BB UlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1pc21hdGNoIFdIRVJFIHB0MS5pZCA9IHB0 bWlzbWF0Y2guaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFiIHB0 MV8yCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFfMworICAgLT4gIEFwcGVuZAor ICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHRtaXNtYXRjaGFfcGtleSBvbiBwdG1pc21h dGNoYSBwdG1pc21hdGNoXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0MS5p ZCkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0bWlzbWF0Y2hiX3BrZXkgb24gcHRt aXNtYXRjaGIgcHRtaXNtYXRjaF8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBw dDEuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHRt aXNtYXRjaCkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIocHQxIHB0bWlzbWF0Y2gpCisgICBORVNURURfTE9PUF9QTEFJTihwdG1p c21hdGNoKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEv cHVibGljLnB0MWMpCisgICBJTkRFWF9TQ0FOKHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hh IHB1YmxpYy5wdG1pc21hdGNoYV9wa2V5CisgICAgcHRtaXNtYXRjaC9wdWJsaWMucHRtaXNtYXRj aGIgcHVibGljLnB0bWlzbWF0Y2hiX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKHB0MSBwdG1pc21h dGNoKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1 YmxpYy5wdDFjCisgICAgcHRtaXNtYXRjaC9wdWJsaWMucHRtaXNtYXRjaGEgcHRtaXNtYXRjaC9w dWJsaWMucHRtaXNtYXRjaGIpCisoMjIgcm93cykKKworQ09NTUlUOworLS0gRm9yY2Ugam9pbiBv cmRlciBmb3IgYSBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0aGUgcGFydGl0aW9ud2lzZSBqb2luIHdp dGgKKy0tIGFuZCB3aXRob3V0IG1lbnRpb25pbmcgdGhlIHNjaGVtYSBuYW1lLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B1YmxpYy5w dDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURW SUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlk ID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9 IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDNfMS5pZCA9IHB0 Ml8xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEg PSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtl eSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5p ZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJf My5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQy XzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0 M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDMv cHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNh IHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJs aWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihw dDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RF RF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5w dDFjKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1 YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBw dDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3Br ZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMg cHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5P X0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBw dDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ5IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihwdDMvcHQzYSBw dDIvcHQyYSBwdDEvcHQxYSknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5p ZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQXBwZW5kCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0M18xLmlkID0gcHQyXzEuaWQpCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQx YV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0 Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQy YiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0 M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQor ICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIgcHQxXzIKKyAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlkID0gcHQzXzMuaWQpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0My9wdDNhIHB0Mi9wdDJhIHB0MS9w dDFhKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYSkKKyAgIEpP SU5fT1JERVIocHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYiBwdDEvcHVibGljLnB0MWIp CisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MgcHQxL3B1Ymxp Yy5wdDFjKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMu cHQxYiBwdDEvcHVibGljLnB0MWMpCisgICBIQVNIX0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0My9w dWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisgICBTRVFfU0NBTihwdDMvcHVibGljLnB0M2Eg cHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IKKyAgICBwdDIv cHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0 MWEgcHVibGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAg IHB0MS9wdWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRSgocHQx IHB0MiBwdDMpKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIg cHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIv cHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0 M2MpCisoNDkgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3ByZXBhcmVkLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MDdhN2M2MjM2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL3ByZXBhcmVkLm91dApAQCAtMCwwICsxLDY3IEBACitMT0FEICdwZ19wbGFuX2Fkdmlj ZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFC TEUgcHRhYiAoaWQgaW50ZWdlciwgdmFsIHRleHQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMg PSBmYWxzZTsKKy0tIE5vdCBwcmVwYXJlZCwgc28gYWR2aWNlIHNob3VsZCBiZSBnZW5lcmF0ZWQu CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSAKK1NFTEVDVCAqIEZST00gcHRhYjsK KyAgICAgICBRVUVSWSBQTEFOICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2Vx IFNjYW4gb24gcHRhYgorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHB0YWIp CisgICBOT19HQVRIRVIocHRhYikKKyg0IHJvd3MpCisKKy0tIFByZXBhcmVkLCBzbyBhZHZpY2Ug c2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQuCitQUkVQQVJFIHB0MSBBUyBTRUxFQ1QgKiBGUk9NIHB0 YWI7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBFWEVDVVRFIHB0MTsKKyAgICBR VUVSWSBQTEFOICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcHRhYgorKDEg cm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0g dHJ1ZTsKKy0tIFByZXBhcmVkLCBidXQgYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1 ZSwgc28gc2hvdWxkIHNob3cgYWR2aWNlLgorUFJFUEFSRSBwdDIgQVMgU0VMRUNUICogRlJPTSBw dGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisgICAg ICAgUVVFUlkgUExBTiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHB0YWIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihwdGFiKQorICAg Tk9fR0FUSEVSKHB0YWIpCisoNCByb3dzKQorCistLSBOb3QgcHJlcGFyZWQsIHNvIGZlZWRiYWNr IHNob3VsZCBiZSBnZW5lcmF0ZWQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2Fk dmljZV9kZXRhaWxzID0gZmFsc2U7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKHB0YWIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgCitTRUxFQ1QgKiBGUk9NIHB0YWI7Cisg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFiCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihwdGFiKSAvKiBtYXRjaGVkICovCisoMyByb3dzKQorCistLSBQcmVwYXJlZCwgc28g YWR2aWNlIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkLgorUFJFUEFSRSBwdDMgQVMgU0VMRUNUICog RlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBFWEVDVVRFIHB0MTsKKyAgICBRVUVSWSBQ TEFOICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcHRhYgorKDEgcm93KQor CitTRVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZTsK Ky0tIFByZXBhcmVkLCBidXQgYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZSwgc28g c2hvdWxkIHNob3cgZmVlZGJhY2suCitQUkVQQVJFIHB0NCBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBFWEVDVVRFIHB0MjsKKyAgICAgICBR VUVSWSBQTEFOICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g cHRhYgorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHB0YWIpCisgICBOT19H QVRIRVIocHRhYikKKyg0IHJvd3MpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvc2Nhbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3Nj YW4ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZjllMTNiNmQ0 MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nh bi5vdXQKQEAgLTAsMCArMSw3NTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4x OworU0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOwor U0VUIGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKK0NSRUFURSBUQUJMRSBzY2FuX3RhYmxlIChh IGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZh bHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4dCAnIHx8 IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNjYW5f dGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZWkUgc2Nh bl90YWJsZTsKKy0tIFNlcXVlbnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgIFFVRVJZIFBMQU4gICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoNCByb3dzKQorCistLSBJbmRleCBzY2FuCitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEg PSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dz KQorCistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVz aW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEp CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93 cykKKworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7Cisg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIFJlY2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0 KQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfYgorICAgICAgICAgSW5k ZXggQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDcgcm93cykKKworLS0gVElEIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFRJRCBDb25kOiAoY3Rp ZCA9ICcoMCwxKSc6OnRpZCkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihz Y2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBUSUQg cmFuZ2Ugc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29u ZDogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRI RVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRl c3QgcXVlcmllcyB0byB1c2UgdGhlIHNjYW4gdHlwZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFu eXdheS4gVGhpcyBzaG91bGQgc3VjY2VlZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDYgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBT Y2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAo YSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZ X1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQg OCc7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVh cCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFJlY2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgn Ojp0ZXh0KQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfYgorICAgICAg ICAgSW5kZXggQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKQor ICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygw LDEpJzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHNjYW5fdGFibGUKKyAg IFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFRpZCBSYW5nZSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFRJRCBD b25kOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVHJ5IHRvIGZv cmNlIGEgZnVsbCBzY2FuIG9mIHRoZSB0YWJsZSB0byB1c2Ugc29tZSBvdGhlciBzY2FuIHR5cGUu IEFsbAorLS0gb2YgdGhlc2Ugd2lsbCBmYWlsLiBBbiBpbmRleCBzY2FuIG9yIGJpdG1hcCBoZWFw IHNjYW4gY291bGQgcG90ZW50aWFsbHkKKy0tIGdlbmVyYXRlIHRoZSBjb3JyZWN0IGFuc3dlciwg YnV0IHRoZSBwbGFubmVyIGRvZXMgbm90IGV2ZW4gY29uc2lkZXIgdGhlc2UKKy0tIHBvc3NpYmls aXRpZXMgZHVlIHRvIHRoZSBsYWNrIG9mIGEgV0hFUkUgY2xhdXNlLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxl CisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlz YWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9I RUFQX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURf U0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSBhZ2Fp biB0byBmb3JjZSBpbmRleCB1c2UuIFRoaXMgc2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0aGUgSU5E RVhfU0NBTgorLS0gYW5kIEJJVE1BUF9IRUFQX1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9TQ0FO IGNhbid0IGJlIGZvcmNlZCBiZWNhdXNlIHRoZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5zIG5v dCBpbmNsdWRlZCBpbiB0aGUgaW5kZXguCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgRmls dGVyOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIo c2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CisgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2Fu X3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChhID4gMCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2Nh biBvbiBzY2FuX3RhYmxlX3BrZXkKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID4gMCkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nh bl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDkgcm93cykKKworQ09NTUlUOwor LS0gV2UgY2FuIGZvcmNlIGEgcHJpbWFyeSBrZXkgbG9va3VwIHRvIHVzZSBhIHNlcXVlbnRpYWwg c2NhbiwgYnV0IHdlCistLSBjYW4ndCBmb3JjZSBpdCB0byB1c2UgYW4gaW5kZXgtb25seSBzY2Fu IChkdWUgdG8gdGhlIGNvbHVtbiBsaXN0KQorLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBh YnNlbmNlIG9mIGEgVElEIHF1YWwpLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9w a2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0 cnVlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZh aWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJs ZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5f dGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3Mp CisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBz Y2FuIHRvIGFuIGluZGV4IHNjYW4sIGJ1dCB3ZSBjYW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBh biBpbmRleCB0aGF0IHRoZSBwbGFubmVyIHRoaW5rcyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9u IHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVk OiB0cnVlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWlsZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykK KworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4g aW4gcGxhY2Ugb2YgYSBiaXRtYXAgaGVhcCBzY2FuLAorLS0gYnV0IGEgcGxhaW4gaW5kZXggc2Nh biBvbiBhIEJSSU4gaW5kZXggaXMgbm90IHBvc3NpYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIg PiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nh bl90YWJsZQorICAgRmlsdGVyOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpIC8q IG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBh IHNlcXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBzY2FuIG9yCistLSBUSUQgcmFuZ2Ug c2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChjdGlkID0gJygwLDEp Jzo6dGlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5f dGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0 aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBzY2FuX3RhYmxlCisgICBGaWx0ZXI6ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlk IDwgJygyLDEpJzo6dGlkKSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNj YW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitD T01NSVQ7CistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mgd2l0aCBpbmRleCBzY2Fucy4K K0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVudGlvbiB0aGUgc2NoZW1hLgor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCistLSBCdXQgbm90 IGlmIHdlIG1lbnRpb24gdGhlIHdyb25nIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNjYW5fdGFibGVfcGtleSkgLyog bWF0Y2hlZCwgaW5hcHBsaWNhYmxlLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gSXQncyBPSyB0byByZXBlYXQgdGhl IHNhbWUgYWR2aWNlLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk ICovCisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3Mp CisKKy0tIEJ1dCBpdCBkb2Vzbid0IHdvcmsgaWYgdGhlIGluZGV4IHRhcmdldCBpcyBldmVuIG5v dGlvbmFsbHkgZGlmZmVyZW50LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFibGUgcHVibGljLnNj YW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNj YW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNv bmZsaWN0aW5nICovCisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gVGVzdCBhc3NvcnRl ZCBpbmNvcnJlY3QgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKG5vdGhpbmcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2Fu IHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihub3RoaW5nKSAvKiBub3Qg bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf U0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2Fu IHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNv ZXZlcikgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVf cGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGlu YXBwbGljYWJsZSwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf T05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJs ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5E RVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlcikgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3Rh YmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cykgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxl LCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4o c2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRv IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBhbGlhcy4KK0JFR0lOOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3Nlcmllcygx LDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9J TiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAg IC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHNfMQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBn LmcpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHMgcyMyKQorICAg TkVTVEVEX0xPT1BfUExBSU4ocyBzIzIpCisgICBJTkRFWF9TQ0FOKHMgcHVibGljLnNjYW5fdGFi bGVfcGtleSBzIzIgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihnIHMgcyMy KQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMu YSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBD b25kOiAoZy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVf c2VyaWVzIGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gc2Nhbl90YWJsZSBzCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BM QUlOKHMjMikKKyAgIEhBU0hfSk9JTihzKQorICAgU0VRX1NDQU4ocykKKyAgIElOREVYX1NDQU4o cyMyIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoZyBzIHMjMikKKygxNyBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMjMikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVy YXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAor ICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ICBOZXN0ZWQg TG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3Nl cmllcyBnCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzXzEKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMjMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BM QUlOKHMpCisgICBIQVNIX0pPSU4ocyMyKQorICAgU0VRX1NDQU4ocyMyKQorICAgSU5ERVhfU0NB TihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoZyBzIHMjMikKKygxNyBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpIFNF UV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04g ZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBMZWZ0IEpvaW4KKyAg IEhhc2ggQ29uZDogKGcuZyA9IHNfMS5hKQorICAgLT4gIEhhc2ggTGVmdCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChnLmcgPSBzLmEpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBn ZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gc2Nhbl90YWJsZSBzXzEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KHMpIC8qIG1hdGNoZWQgKi8KKyAgIFNFUV9TQ0FOKHMjMikgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIEhBU0hfSk9JTihz IHMjMikKKyAgIFNFUV9TQ0FOKHMgcyMyKQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93 cykKKworQ09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBzY2FucyB3aXRo aW4gYSBzdWJxdWVyeS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkg eDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoeCBzQHgpCisoNSByb3dzKQorCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2Fu IHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChh ID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAdW5uYW1lZF9z dWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHVubmFtZWRfc3Vi cXVlcnkgc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDUgcm93cykKKworQkVHSU47CistLSBTaG91bGQg bm90IG1hdGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5n IHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHggcHVibGljLnNjYW5f dGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih4IHNAeCkKKyg3IHJvd3MpCisKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CisgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nh bl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyogbm90IG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHVubmFtZWRfc3VicXVlcnkgc0B1 bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0gU2hvdWxkIG1hdGNoIGZpcnN0IHF1ZXJ5 IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNAeCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpCisgICBOT19HQVRIRVIoeCBzQHgpCisoNyBy b3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4 IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAeCkg Lyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNAdW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHVubmFtZWRfc3VicXVlcnkgc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0gU2hv dWxkIG1hdGNoIHNlY29uZCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNj YW5fdGFibGUgcworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSAvKiBub3QgbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoeCBzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzCisgICBGaWx0ZXI6IChh ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAdW5uYW1lZF9zdWJx dWVyeSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KHNAdW5uYW1lZF9zdWJxdWVyeSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5u YW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2VtaWpvaW4ub3V0IGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9zZW1pam9pbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjU1NTFjMDI4YTFmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9leHBlY3RlZC9zZW1pam9pbi5vdXQKQEAgLTAsMCArMSwzNzcgQEAKK0xPQUQgJ3Bn X3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsK K0NSRUFURSBUQUJMRSBzal93aWRlICgKKwlpZCBpbnRlZ2VyIHByaW1hcnkga2V5LAorCXZhbDEg aW50ZWdlciwKKwlwYWRkaW5nIHRleHQgc3RvcmFnZSBwbGFpbgorKSBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzal93aWRlCisJU0VMRUNUIGcsIGclMTAr MSwgcmVwZWF0KCcgJywgMzAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQ1JF QVRFIElOREVYIE9OIHNqX3dpZGUgKHZhbDEpOworVkFDVVVNIEFOQUxZWkUgc2pfd2lkZTsKK0NS RUFURSBUQUJMRSBzal9uYXJyb3cgKAorCWlkIGludGVnZXIgcHJpbWFyeSBrZXksCisJdmFsMSBp bnRlZ2VyCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IHNqX25hcnJvdworCVNFTEVDVCBnLCBnJTEwKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal9uYXJyb3cgKHZhbDEpOworVkFDVVVNIEFOQUxZWkUg c2pfbmFycm93OworLS0gV2UgZXhwZWN0IHRoaXMgdG8gbWFrZSB0aGUgVkFMVUVTIGxpc3QgdW5p cXVlIGFuZCB1c2UgaW5kZXggbG9va3VwcyB0bworLS0gZmluZCB0aGUgcm93cyBpbiBzal93aWRl LCBzbyBhcyB0byBhdm9pZCBhIGZ1bGwgc2NhbiBvZiBzal93aWRlLgorRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChpZCwgdmFs MSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3Vw IEtleTogIipWQUxVRVMqIi5jb2x1bW4xLCAiKlZBTFVFUyoiLmNvbHVtbjIKKyAgICAgICAgIC0+ ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzal93 aWRlX3BrZXkgb24gc2pfd2lkZQorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gIipWQUxVRVMq Ii5jb2x1bW4xKQorICAgICAgICAgRmlsdGVyOiAodmFsMSA9ICIqVkFMVUVTKiIuY29sdW1uMikK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKCIqVkFMVUVTKiIgc2pfd2lk ZSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHNqX3dpZGUpCisgICBJTkRFWF9TQ0FOKHNqX3dpZGUg cHVibGljLnNqX3dpZGVfcGtleSkKKyAgIFNFTUlKT0lOX1VOSVFVRSgiKlZBTFVFUyoiKQorICAg Tk9fR0FUSEVSKHNqX3dpZGUgIipWQUxVRVMqIikKKygxMyByb3dzKQorCistLSBJZiB3ZSBhc2sg Zm9yIGEgdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91bGQgZ2V0IHRoZSBzYW1lIHBsYW4gYXMgd2l0 aAorLS0gbm8gYWR2aWNlLiBJZiB3ZSBhc2sgZm9yIGEgbm9uLXVuaXF1ZSBzZW1pam9pbiwgd2Ug c2hvdWxkIHNlZSBhIFNlbWkKKy0tIEpvaW4gb3BlcmF0aW9uIGluIHRoZSBwbGFuIHRyZWUuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVl KCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwg MiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMSwg IipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMq IgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfd2lkZV9wa2V5IG9uIHNqX3dpZGUKKyAgICAg ICAgIEluZGV4IENvbmQ6IChpZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkKKyAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoIipWQUxVRVMqIiBzal93aWRlKQorICAgTkVTVEVE X0xPT1BfUExBSU4oc2pfd2lkZSkKKyAgIElOREVYX1NDQU4oc2pfd2lkZSBwdWJsaWMuc2pfd2lk ZV9wa2V5KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pf d2lkZSAiKlZBTFVFUyoiKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2 YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKChzal93aWRlLmlk ID0gIipWQUxVRVMqIi5jb2x1bW4xKSBBTkQgKHNqX3dpZGUudmFsMSA9ICIqVkFMVUVTKiIuY29s dW1uMikpCisgICAtPiAgU2VxIFNjYW4gb24gc2pfd2lkZQorICAgLT4gIEhhc2gKKyAgICAgICAg IC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX3dpZGUgIipWQUxVRVMqIikKKyAgIEhB U0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pfd2lkZSkKKyAgIFNFTUlKT0lOX05P Tl9VTklRVUUoIipWQUxVRVMqIikKKyAgIE5PX0dBVEhFUihzal93aWRlICIqVkFMVUVTKiIpCiso MTMgcm93cykKKworQ09NTUlUOworLS0gQmVjYXVzZSB0aGlzIHRhYmxlIGlzIG5hcnJvd2VyIHRo YW4gdGhlIHByZXZpb3VzIG9uZSwgYSBzZXF1ZW50aWFsIHNjYW4KKy0tIGlzIGxlc3MgZXhwZW5z aXZlLCBhbmQgd2UgY2hvb3NlIGEgc3RyYWlnaHRmb3J3YXJkIFNlbWkgSm9pbiBwbGFuIGJ5Cist LSBkZWZhdWx0LiAoTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyB2ZXJ5IHNlbnNpdGl2ZSB0byB0aGUg bGVuZ3RoIG9mIHRoZSBJTgorLS0gbGlzdCwgd2hpY2ggYWZmZWN0cyBob3cgbWFueSBpbmRleCBs b29rdXBzIHRoZSBhbHRlcm5hdGl2ZSBwbGFuIHdpbGwgbmVlZC4pCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZh bDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICgoc2pf bmFycm93LmlkID0gIipWQUxVRVMqIi5jb2x1bW4xKSBBTkQgKHNqX25hcnJvdy52YWwxID0gIipW QUxVRVMqIi5jb2x1bW4yKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93ICIqVkFMVUVTKiIpCisgICBIQVNI X0pPSU4oIipWQUxVRVMqIikKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX05P Tl9VTklRVUUoIipWQUxVRVMqIikKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cgIipWQUxVRVMqIikK KygxMSByb3dzKQorCistLSBIZXJlLCB3ZSBleHBlY3QgYWR2aXNpbmcgYSB1bmlxdWUgc2VtaWpv aW4gdG8gc3dpdGggdG8gdGhlIHNhbWUgcGxhbiB0aGF0CistLSB3ZSBnb3Qgd2l0aCBzal93aWRl LCBhbmQgYWR2aXNpbmcgYSBub24tdW5pcXVlIHNlbWlqb2luIHNob3VsZCBub3QgY2hhbmdlCist LSB0aGUgcGxhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdz ZW1pam9pbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFM VUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cuaWQgPSAiKlZB TFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIp KQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVTKiIuY29s dW1uMSwgIipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4g b24gIipWQUxVRVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVF KCIqVkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKHNqX25hcnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIp CisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikK KyAgIE5PX0dBVEhFUihzal9uYXJyb3cgIipWQUxVRVMqIikKKygxNSByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoIipWQUxVRVMq IiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pf bmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywg MyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFNlbWkgSm9p bgorICAgSGFzaCBDb25kOiAoKHNqX25hcnJvdy5pZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkgQU5E IChzal9uYXJyb3cudmFsMSA9ICIqVkFMVUVTKiIuY29sdW1uMikpCisgICAtPiAgU2VxIFNjYW4g b24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIq VkFMVUVTKiIKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUo IipWQUxVRVMqIikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoc2pfbmFycm93ICIqVkFMVUVTKiIpCisgICBIQVNIX0pPSU4oIipWQUxVRVMqIikK KyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoIipWQUxVRVMq IikKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cgIipWQUxVRVMqIikKKygxMyByb3dzKQorCitDT01N SVQ7CistLSBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgd2UgbWFkZSB0aGUgb3V0ZXIgc2lkZSBvZiB0 aGUgam9pbiB1bmlxdWUsIGJ1dCBoZXJlLAorLS0gd2Ugc2hvdWxkIG1ha2UgdGhlIGlubmVyIHNp ZGUgdW5pcXVlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwx IGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBK b2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzal9uYXJyb3cudmFsMSkKKyAgIC0+ICBGdW5jdGlv biBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGcgc2pfbmFycm93KQorICAgSEFTSF9KT0lOKHNqX25hcnJv dykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cp CisgICBOT19HQVRIRVIoZyBzal9uYXJyb3cpCisoMTMgcm93cykKKworLS0gV2Ugc2hvdWxkIGJl IGFibGUgdG8gZm9yY2UgYSBwbGFuIHdpdGggb3Igd2l0aG91dCB0aGUgbWFrZS11bmlxdWUgc3Ry YXRlZ3ksCistLSB3aXRoIGVpdGhlciBzaWRlIGFzIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9u YXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBm cm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNo IEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0 aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzal9uYXJyb3cpCisgICBIQVNI X0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5J UVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihnIHNqX25hcnJvdykKKygxNSByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pf bmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEg ZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBIYXNoIFNlbWkgSm9pbgorICAgSGFzaCBDb25kOiAoZy5nID0gc2pfbmFycm93LnZhbDEp CisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgLT4gIEhhc2gK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHNqX25hcnJvdykKKyAgIEhBU0hf Sk9JTihzal9uYXJyb3cpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05f VU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihnIHNqX25hcnJvdykKKygxMyByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9u YXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hF UkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHNqX25h cnJvdy52YWwxID0gZy5nKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtl eTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMg ZworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykg LyogbWF0Y2hlZCAqLworICAgSk9JTl9PUkRFUihzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyBnKQorICAgSEFT SF9KT0lOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pf bmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQorKDE2IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cp IGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBp biAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFJpZ2h0IFNlbWkgSm9pbgorICAgSGFzaCBDb25kOiAo c2pfbmFycm93LnZhbDEgPSBnLmcpCisgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAt PiAgSGFzaAorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoc2pfbmFycm93 KSAvKiBtYXRjaGVkICovCisgICBKT0lOX09SREVSKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93IGcpCisgICBI QVNIX0pPSU4oZykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX05PTl9VTklR VUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQorKDE0IHJvd3MpCisKK0NP TU1JVDsKKy0tIEhvd2V2ZXIsIG1lbnRpb25pbmcgdGhlIHdyb25nIHNpZGUgb2YgdGhlIGpvaW4g c2hvdWxkIHJlc3VsdCBpbiBhbiBhZHZpY2UKKy0tIGZhaWx1cmUuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKGcpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7Cisg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVyOiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2Vu ZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFV RShnKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKHNqX25hcnJvdyBnKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZykKKyAgIFNFUV9T Q0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRI RVIoZyBzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKGcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBX SEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1 ZQorICAgSm9pbiBGaWx0ZXI6IChnLmcgPSBzal9uYXJyb3cudmFsMSkKKyAgIC0+ICBIYXNoQWdn cmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9z ZXJpZXMgZworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9OX1VOSVFVRShn KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKHNqX25hcnJvdyBnKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZykKKyAgIFNFUV9TQ0FO KHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIo ZyBzal9uYXJyb3cpCisoMTUgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBjb25mbGljdGluZyBh ZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpv aW5fdW5pcXVlKHNqX25hcnJvdykgc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJv dyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25k OiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0 ZV9zZXJpZXMgZworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gc2pfbmFycm93CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9J Tl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgU0VNSUpP SU5fTk9OX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgc2pfbmFycm93KQor ICAgSEFTSF9KT0lOKHNqX25hcnJvdykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlK T0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoZyBzal9uYXJyb3cpCisoMTYgcm93 cykKKworQ09NTUlUOworLS0gVHJ5IGFwcGx5aW5nIFNFTUlKT0lOX1VOSVFVRSgpIHRvIGEgbm9u LXNlbWlqb2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3Nl bWlqb2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnLCBzal9uYXJyb3cgcyBXSEVSRSBn ID0gcy52YWwxOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChzLnZhbDEgPSBn LmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzal9uYXJyb3dfdmFsMV9pZHggb24gc2pfbmFy cm93IHMKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZy5nCisgICAgICAgICAtPiAg RnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgU0VNSUpPSU5fVU5JUVVFKGcpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzIGcpCisgICBNRVJH RV9KT0lOX1BMQUlOKGcpCisgICBJTkRFWF9TQ0FOKHMgcHVibGljLnNqX25hcnJvd192YWwxX2lk eCkKKyAgIE5PX0dBVEhFUihnIHMpCisoMTMgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0IGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5iZTYxNDAyYjU2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dApAQCAtMCwwICsxLDE5MiBAQAorTE9BRCAn cGdfcGxhbl9hZHZpY2UnOworLS0gQW4gZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQuIEVtcHR5IHRh cmdldCBsaXN0cyBhcmUgYWxsb3dlZCBmb3IgbW9zdCBhZHZpY2UKKy0tIHRhZ3MsIGJ1dCBub3Qg Zm9yIEpPSU5fT1JERVIuICJTdXBwbGllZCBQbGFuIEFkdmljZSIgc2hvdWxkIGJlIG9taXR0ZWQg aW4KKy0tIHRleHQgZm9ybWF0IHdoZW4gdGhlcmUgaXMgbm8gYWN0dWFsIGFkdmljZSwgYnV0IG5v dCBpbiBub24tdGV4dCBmb3JtYXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0K KyBSZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TigpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0tLS0t LS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J05FU1RFRF9MT09QX1BMQUlOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBGT1JNQVQgSlNPTikg U0VMRUNUIDE7CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAiUGxhbiI6IHsgICAgICAgICAg ICAgICAgICsKKyAgICAgICAiTm9kZSBUeXBlIjogIlJlc3VsdCIsICArCisgICAgICAgIlBhcmFs bGVsIEF3YXJlIjogZmFsc2UsKworICAgICAgICJBc3luYyBDYXBhYmxlIjogZmFsc2UsICsKKyAg ICAgICAiRGlzYWJsZWQiOiBmYWxzZSAgICAgICArCisgICAgIH0sICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICAiU3VwcGxpZWQgUGxhbiBBZHZpY2UiOiAiIisKKyAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgXQorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0pPSU5fT1JERVIoKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRl ciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JERVIoKSIKK0RFVEFJTDogIENvdWxk IG5vdCBwYXJzZSBhZHZpY2U6IEpPSU5fT1JERVIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSB0YXJn ZXQgYXQgb3IgbmVhciAiKSIKKy0tIFRlc3QgYXNzb3J0ZWQgdmFyaWF0aW9ucyBpbiBjYXBpdGFs aXphdGlvbiwgd2hpdGVzcGFjZSwgYW5kIHdoaWNoIHBhcnRzIG9mCistLSB0aGUgcmVsYXRpb24g aWRlbnRpZmllciBhcmUgaW5jbHVkZWQuIFRoZXNlIHNob3VsZCBhbGwgd29yay4KK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgMTsKKyAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTih4KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdzZXFfc2Nhbih4QHkpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VM RUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHhAeSkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX3NjYW4oeCMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAxOworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTih4IzIpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOICh4L3kpJzsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFNFUV9TQ0FOKHgveSkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnICBTRVFfU0NBTiAoIHggLyB5IC4geiApICAn OworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBS ZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHgveS56KSAvKiBub3Qg bWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTigieCIjMi8ieSIuInoiQCJ0IiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsK KyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oeCMyL3kuekB0KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykK KworLS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRVUVO VElBTF9TQ0FOKHgpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19w bGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRVUVOVElBTF9TQ0FOKHgpIgorREVUQUlMOiAgQ291bGQg bm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIlNFUVVFTlRJQUxfU0NB TiIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4nOworRVJST1I6ICBpbnZh bGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NB TiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBlbmQg b2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oJzsKK0VSUk9S OiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAi U0VRX1NDQU4oIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9y IGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigi JzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5h ZHZpY2UiOiAiU0VRX1NDQU4oIiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHVu dGVybWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIiIpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBm b3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIiIpIgorREVU QUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogemVyby1sZW5ndGggZGVsaW1pdGVkIGlkZW50 aWZpZXIgYXQgb3IgbmVhciAiIiIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4oImEiJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2Fk dmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oImEiIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFk dmljZTogc3ludGF4IGVycm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTigjJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVy ICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIyIKK0RFVEFJTDogIENvdWxkIG5v dCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIjIgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICcoKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRl ciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIigpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNl IGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJzEyMyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdf cGxhbl9hZHZpY2UuYWR2aWNlIjogIjEyMyIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZp Y2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIxMjMiCistLSBUYWdzIGxpa2UgU0VRX1NDQU4g YW5kIE5PX0dBVEhFUiBkb24ndCBhbGxvdyBzdWJsaXN0cyBhdCBhbGw7IG90aGVyIHRhZ3MsCist LSBleGNlcHQgZm9yIEpPSU5fT1JERVIsIGFsbG93IGF0IG1vc3Qgb25lIGxldmVsIG9mIHN1Ymxp c3QuIEhlbmNlLCB0aGVzZQorLS0gZXhhbXBsZXMgc2hvdWxkIGVycm9yIG91dC4KK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKHgpKSc7CitFUlJPUjogIGludmFsaWQgdmFs dWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCh4KSki CitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVh ciAiKCIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnR0FUSEVSKCgoeCkpKSc7CitFUlJP UjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjog IkdBVEhFUigoKHgpKSkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXgg ZXJyb3IgYXQgb3IgbmVhciAiKCIKKy0tIExlZ2FsIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICcvKiovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVF UlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8qKiovJzsKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBIQVNIX0pPSU4oXykgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oLyp4Ki95KSc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKHkpIC8qIG5vdCBtYXRjaGVkICovCiso MyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFT SF9KT0lOKHkvLyp4Ki96KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9J Tih5L3opIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCistLSBVbnRlcm1pbmF0ZWQgY29t bWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qJzsKK0VSUk9SOiAgaW52YWxp ZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyoiCitERVRB SUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgY29tbWVudCBhdCBlbmQg b2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigiZk9PIikg Lyogb29wcyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9h ZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMiCitERVRBSUw6ICBDb3Vs ZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQK Ky0tIE5lc3RlZCBjb21tZW50cyBhcmUgbm90IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRo ZXNlIGlzIGxlZ2FsIGFuZAorLS0gdGhlIHNlY29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJy8qLyovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVF UlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJy8qLyogc3R1ZmYgKi8qLyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUg Zm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIi8qLyogc3R1ZmYgKi8qLyIK K0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFy ICIqIgorLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZp ZXJzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOworRVJS T1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6 ICJGT1JFSUdOX0pPSU4oYSkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBGT1JF SUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpZGVu dGlmaWVyIGF0IG9yIG5lYXIgIikiCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJ R05fSk9JTigoYSkpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19w bGFuX2FkdmljZS5hZHZpY2UiOiAiRk9SRUlHTl9KT0lOKChhKSkiCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiBGT1JFSUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0 aGFuIG9uZSByZWxhdGlvbiBpZGVudGlmaWVyIGF0IG9yIG5lYXIgIikiCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Y5 NDhmZmFhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29u LmJ1aWxkCkBAIC0wLDAgKzEsNjYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX3BsYW5fYWR2aWNlX3NvdXJjZXMg PSBmaWxlcygKKyAgJ3BnX3BsYW5fYWR2aWNlLmMnLAorICAncGdwYV9hc3QuYycsCisgICdwZ3Bh X2lkZW50aWZpZXIuYycsCisgICdwZ3BhX2pvaW4uYycsCisgICdwZ3BhX291dHB1dC5jJywKKyAg J3BncGFfcGxhbm5lci5jJywKKyAgJ3BncGFfc2Nhbi5jJywKKyAgJ3BncGFfdHJvdmUuYycsCisg ICdwZ3BhX3dhbGtlci5jJywKKykKKworcGdwYV9zY2FubmVyID0gY3VzdG9tX3RhcmdldCgncGdw YV9zY2FubmVyJywKKyAgaW5wdXQ6ICdwZ3BhX3NjYW5uZXIubCcsCisgIG91dHB1dDogJ3BncGFf c2Nhbm5lci5jJywKKyAgY29tbWFuZDogZmxleF9jbWQsCispCitnZW5lcmF0ZWRfc291cmNlcyAr PSBwZ3BhX3NjYW5uZXIKK3BnX3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCisK K3BncGFfcGFyc2VyID0gY3VzdG9tX3RhcmdldCgncGdwYV9wYXJzZXInLAorICBpbnB1dDogJ3Bn cGFfcGFyc2VyLnknLAorICBrd2FyZ3M6IGJpc29uX2t3LAorKQorZ2VuZXJhdGVkX3NvdXJjZXMg Kz0gcGdwYV9wYXJzZXIudG9fbGlzdCgpCitwZ19wbGFuX2FkdmljZV9zb3VyY2VzICs9IHBncGFf cGFyc2VyCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19wbGFuX2FkdmljZV9z b3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWwor ICAgICctLU5BTUUnLCAncGdfcGxhbl9hZHZpY2UnLAorICAgICctLUZJTEVERVNDJywgJ3BnX3Bs YW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4nLF0pCitlbmRp ZgorCitwZ19wbGFuX2FkdmljZV9pbmMgPSBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJykKKworcGdf cGxhbl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCdwZ19wbGFuX2FkdmljZScsCisgIHBnX3BsYW5f YWR2aWNlX3NvdXJjZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IHBnX3BsYW5fYWR2aWNlX2lu YywKKyAga3dhcmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBn X3BsYW5fYWR2aWNlCisKK2luc3RhbGxfaGVhZGVycygKKyAgJ3BnX3BsYW5fYWR2aWNlLmgnLAor ICBpbnN0YWxsX2RpcjogZGlyX2luY2x1ZGVfZXh0ZW5zaW9uIC8gJ3BnX3BsYW5fYWR2aWNlJywK KykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICdwZ19wbGFuX2FkdmljZScsCisgICdzZCc6IG1l c29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2Rp cigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ2dhdGhlcicsCisgICAg ICAnam9pbl9vcmRlcicsCisgICAgICAnam9pbl9zdHJhdGVneScsCisgICAgICAncGFydGl0aW9u d2lzZScsCisgICAgICAncHJlcGFyZWQnLAorICAgICAgJ3NjYW4nLAorICAgICAgJ3NlbWlqb2lu JywKKyAgICAgICdzeW50YXgnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjJlMGNhYTI4NDY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z19wbGFuX2FkdmljZS5jCkBAIC0wLDAgKzEsNDU2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ19wbGFuX2FkdmljZS5jCisgKgkgIG1haW4gZW50cnlwb2ludHMgZm9yIGdlbmVyYXRp bmcgYW5kIGFwcGx5aW5nIHBsYW5uZXIgYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19wbGFuX2Fkdmlj ZS5oIgorI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgi CisjaW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3BsYW5uZXIuaCIKKyNp bmNsdWRlICJwZ3BhX3Ryb3ZlLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1 ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKKyNp bmNsdWRlICJjb21tYW5kcy9leHBsYWluX2Zvcm1hdC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4 cGxhaW5fc3RhdGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAib3B0aW1pemVy L3BsYW5uZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgorI2luY2x1ZGUg InV0aWxzL2d1Yy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKKy8qIEdVQyB2YXJpYWJsZXMgKi8K K2NoYXIJICAgKnBnX3BsYW5fYWR2aWNlX2FkdmljZSA9IE5VTEw7Citib29sCQlwZ19wbGFuX2Fk dmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSBmYWxzZTsKK3N0YXRpYyBib29sIHBn X3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IHRydWU7Citib29s CQlwZ19wbGFuX2FkdmljZV9mZWVkYmFja193YXJuaW5ncyA9IGZhbHNlOworYm9vbAkJcGdfcGxh bl9hZHZpY2VfdHJhY2VfbWFzayA9IGZhbHNlOworCisvKiBTYXZlZCBob29rIHZhbHVlICovCitz dGF0aWMgZXhwbGFpbl9wZXJfcGxhbl9ob29rX3R5cGUgcHJldl9leHBsYWluX3Blcl9wbGFuID0g TlVMTDsKKworLyogT3RoZXIgZmlsZS1sZXZlbCBnbG9iYWxzICovCitzdGF0aWMgaW50CWVzX2V4 dGVuc2lvbl9pZDsKK3N0YXRpYyBNZW1vcnlDb250ZXh0IHBncGFfbWVtb3J5X2NvbnRleHQgPSBO VUxMOworc3RhdGljIExpc3QgKmFkdmlzb3JfaG9va19saXN0ID0gTklMOworCitzdGF0aWMgdm9p ZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9oYW5kbGVyKEV4cGxhaW5TdGF0ZSAqZXMs CisJCQkJCQkJCQkJCQkgIERlZkVsZW0gKm9wdCwKKwkJCQkJCQkJCQkJCSAgUGFyc2VTdGF0ZSAq cHN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9v ayhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCQkJCQkgSW50b0NsYXVzZSAqaW50 bywKKwkJCQkJCQkJCQkJCSBFeHBsYWluU3RhdGUgKmVzLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNo YXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkJCQkJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJ CQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKK3N0YXRpYyBib29sIHBnX3Bs YW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwK KwkJCQkJCQkJCQkJIEd1Y1NvdXJjZSBzb3VyY2UpOworc3RhdGljIERlZkVsZW0gKmZpbmRfZGVm ZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUpOworCisvKgorICog SW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4KKyAqLwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwlE ZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UuYWR2aWNlIiwKKwkJCQkJ CQkgICAiYWR2aWNlIHRvIGFwcGx5IGR1cmluZyBxdWVyeSBwbGFubmluZyIsCisJCQkJCQkJICAg TlVMTCwKKwkJCQkJCQkgICAmcGdfcGxhbl9hZHZpY2VfYWR2aWNlLAorCQkJCQkJCSAgIE5VTEws CisJCQkJCQkJICAgUEdDX1VTRVJTRVQsCisJCQkJCQkJICAgMCwKKwkJCQkJCQkgICBwZ19wbGFu X2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vaywKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5V TEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hbHdheXNf ZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UiLAorCQkJCQkJCSAiRVhQTEFJTiBvdXRwdXQgaW5jbHVk ZXMgc3VwcGxpZWQgYWR2aWNlIGV2ZW4gd2l0aG91dCBFWFBMQUlOIChQTEFOX0FEVklDRSkiLAor CQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2VfYWx3YXlzX2V4cGxhaW5fc3Vw cGxpZWRfYWR2aWNlLAorCQkJCQkJCSB0cnVlLAorCQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJ CQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7CisKKwlE ZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZp Y2VfZGV0YWlscyIsCisJCQkJCQkJICJHZW5lcmF0ZSBhZHZpY2Ugc3RyaW5ncyBldmVuIHdoZW4g c2VlbWluZ2x5IG5vdCByZXF1aXJlZCIsCisJCQkJCQkJICJVc2UgdGhpcyBvcHRpb24gdG8gc2Vl IGdlbmVyYXRlZCBhZHZpY2UgZm9yIHByZXBhcmVkIHF1ZXJpZXMuIiwKKwkJCQkJCQkgJnBnX3Bs YW5fYWR2aWNlX2Fsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscywKKwkJCQkJCQkgZmFsc2UsCisJ CQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxh bl9hZHZpY2UuZmVlZGJhY2tfd2FybmluZ3MiLAorCQkJCQkJCSAiV2FybiB3aGVuIHN1cHBsaWVk IGFkdmljZSBkb2VzIG5vdCBhcHBseSBjbGVhbmx5IiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkg JnBnX3BsYW5fYWR2aWNlX2ZlZWRiYWNrX3dhcm5pbmdzLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJ CQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEws CisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2Fk dmljZS50cmFjZV9tYXNrIiwKKwkJCQkJCQkgIkVtaXQgZGVidWdnaW5nIG1lc3NhZ2VzIHNob3dp bmcgdGhlIGNvbXB1dGVkIHN0cmF0ZWd5IG1hc2sgZm9yIGVhY2ggcmVsYXRpb24iLAorCQkJCQkJ CSBOVUxMLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzaywKKwkJCQkJCQkgZmFs c2UsCisJCQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJ CQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhSZXNlcnZlZCgicGdf cGxhbl9hZHZpY2UiKTsKKworCS8qIEdldCBhbiBJRCB0aGF0IHdlIGNhbiB1c2UgdG8gY2FjaGUg ZGF0YSBpbiBhbiBFeHBsYWluU3RhdGUuICovCisJZXNfZXh0ZW5zaW9uX2lkID0gR2V0RXhwbGFp bkV4dGVuc2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCisJLyogUmVnaXN0ZXIgdGhlIG5ldyBF WFBMQUlOIG9wdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBtb2R1bGUuICovCisJUmVnaXN0ZXJF eHRlbnNpb25FeHBsYWluT3B0aW9uKCJwbGFuX2FkdmljZSIsCisJCQkJCQkJCSAgIHBnX3BsYW5f YWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIpOworCisJLyogSW5zdGFsbCBob29rcyAqLwor CXBncGFfcGxhbm5lcl9pbnN0YWxsX2hvb2tzKCk7CisJcHJldl9leHBsYWluX3Blcl9wbGFuID0g ZXhwbGFpbl9wZXJfcGxhbl9ob29rOworCWV4cGxhaW5fcGVyX3BsYW5faG9vayA9IHBnX3BsYW5f YWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9vazsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50 ZXIgdG8gYSBtZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFuYWdlZCBieSB0 aGlzCisgKiBtb2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4dAorcGdfcGxh bl9hZHZpY2VfZ2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdwYV9tZW1vcnlfY29udGV4dCA9PSBO VUxMKQorCQlwZ3BhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1l bW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIiwKKwkJCQkJCQkJCQkJ CQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ3BhX21lbW9yeV9jb250ZXh0 OworfQorCisvKgorICogV2FzIHRoZSBQTEFOX0FEVklDRSBvcHRpb24gc3BlY2lmaWVkIGFuZCBu b3Qgc2V0IHRvIGZhbHNlPworICovCitib29sCitwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFp bihFeHBsYWluU3RhdGUgKmVzKQoreworCWJvb2wJICAgKnBsYW5fYWR2aWNlID0gTlVMTDsKKwor CWlmIChlcyAhPSBOVUxMKQorCQlwbGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0 ZShlcywgZXNfZXh0ZW5zaW9uX2lkKTsKKwlyZXR1cm4gcGxhbl9hZHZpY2UgIT0gTlVMTCAmJiAq cGxhbl9hZHZpY2U7Cit9CisKKy8qCisgKiBHZXQgdGhlIGFkdmljZSB0aGF0IHNob3VsZCBiZSB1 c2VkIHdoaWxlIHBsYW5uaW5nIGEgcGFydGljdWxhciBxdWVyeS4KKyAqLworY2hhciAqCitwZ19w bGFuX2FkdmljZV9nZXRfc3VwcGxpZWRfcXVlcnlfYWR2aWNlKFBsYW5uZXJHbG9iYWwgKmdsb2Is CisJCQkJCQkJCQkJIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJCQkJCSBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCQkgRXhwbGFp blN0YXRlICplcykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogSWYgYW55IGFkdmlz b3JzIGFyZSBsb2FkZWQsIGNvbnN1bHQgdGhlbS4gVGhlIGZpcnN0IG9uZSB0aGF0IHByb2R1Y2Vz IGEKKwkgKiBub24tTlVMTCBzdHJpbmcgd2lucy4KKwkgKi8KKwlmb3JlYWNoKGxjLCBhZHZpc29y X2hvb2tfbGlzdCkKKwl7CisJCXBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9vayBob29rID0gbGZp cnN0KGxjKTsKKwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZzsKKworCQlhZHZpY2Vfc3RyaW5nID0g KCpob29rKSAoZ2xvYiwgcGFyc2UsIHF1ZXJ5X3N0cmluZywgY3Vyc29yT3B0aW9ucywgZXMpOwor CQlpZiAoYWR2aWNlX3N0cmluZyAhPSBOVUxMKQorCQkJcmV0dXJuIGFkdmljZV9zdHJpbmc7CisJ fQorCisJLyogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgdmFsdWUgb2YgdGhlIEdVQy4gKi8KKwly ZXR1cm4gcGdfcGxhbl9hZHZpY2VfYWR2aWNlOworfQorCisvKgorICogQWRkIGFuIGFkdmlzb3Is IHdoaWNoIGNhbiBzdXBwbHkgYWR2aWNlIHN0cmluZ3MgdG8gYmUgdXNlZCBkdXJpbmcgZnV0dXJl CisgKiBxdWVyeSBwbGFubmluZyBvcGVyYXRpb25zLgorICoKKyAqIFRoZSBhZHZpc29yIHNob3Vs ZCByZXR1cm4gTlVMTCBpZiBpdCBoYXMgbm8gYWR2aWNlIHN0cmluZyB0byBvZmZlciBmb3IgYQor ICogZ2l2ZW4gcXVlcnkuIElmIG11bHRpcGxlIGFkdmlzb3JzIGFyZSBhZGRlZCwgdGhleSB3aWxs IGJlIGNvbnN1bHRlZCBpbiB0aGUKKyAqIG9yZGVyIGFkZGVkIHVudGlsIG9uZSBvZiB0aGVtIHJl dHVybnMgYSBub24tTlVMTCB2YWx1ZS4KKyAqLwordm9pZAorcGdfcGxhbl9hZHZpY2VfYWRkX2Fk dmlzb3IocGdfcGxhbl9hZHZpY2VfYWR2aXNvcl9ob29rIGhvb2spCit7CisJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19w bGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKwlhZHZpc29yX2hvb2tfbGlzdCA9IGxhcHBlbmQoYWR2 aXNvcl9ob29rX2xpc3QsIGhvb2spOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKK30KKworLyoKKyAqIFJlbW92ZSBhbiBhZHZpc29yLgorICovCit2b2lkCitwZ19wbGFuX2Fk dmljZV9yZW1vdmVfYWR2aXNvcihwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vaykKK3sK KwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0KCkpOworCWFkdmlzb3JfaG9va19saXN0 ID0gbGlzdF9kZWxldGVfcHRyKGFkdmlzb3JfaG9va19saXN0LCBob29rKTsKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBPdGhlciBsb2FkYWJsZSBtb2R1 bGVzIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFkdmljZSBnZW5lcmF0aW9uLgor ICoKKyAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGFjdGl2YXRlID0gdHJ1ZSByZXF1ZXN0 cyB0aGF0IGFueSBxdWVyaWVzCisgKiBwbGFubmVkIGFmdGVyd2FyZHMgc2hvdWxkIGdlbmVyYXRl IHBsYW4gYWR2aWNlLCB3aGljaCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUKKyAqIFBsYW5uZWRTdG10 LiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBhY3RpdmF0ZSA9IGZhbHNlIHJldm9rZXMgdGhh dAorICogcmVxdWVzdC4gTXVsdGlwbGUgbG9hZGFibGUgbW9kdWxlcyBjb3VsZCBiZSB1c2luZyB0 aGlzIHNpbXVsdGFuZW91c2x5LCBzbworICogbWFrZSBzdXJlIHRvIG9ubHkgcmV2b2tlIHlvdXIg b3duIHJlcXVlc3RzLgorICoKKyAqIE5vdGUgdGhhdCB5b3UgY2FuJ3QgdXNlIHRoaXMgZnVuY3Rp b24gdG8gKnN1cHByZXNzKiBhZHZpY2UgZ2VuZXJhdGlvbiwKKyAqIHdoaWNoIGNhbiBvY2N1ciBm b3Igb3RoZXIgcmVhc29ucywgc3VjaCBhcyB0aGUgdXNlIG9mIEVYUExBSU4gKFBMQU5fQURWSUNF KSwKKyAqIHJlZ2FyZGxlc3MuIEl0J3MgYSB3YXkgb2YgdHVybmluZyBhZHZpY2UgZ2VuZXJhdGlv biBvbiwgbm90IGEgd2F5IG9mIHR1cm5pbmcKKyAqIGl0IG9mZi4KKyAqLwordm9pZAorcGdfcGxh bl9hZHZpY2VfcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbihib29sIGFjdGl2YXRlKQoreworCWlm IChhY3RpdmF0ZSkKKwkJcGdwYV9wbGFubmVyX2dlbmVyYXRlX2FkdmljZSsrOworCWVsc2UKKwl7 CisJCUFzc2VydChwZ3BhX3BsYW5uZXJfZ2VuZXJhdGVfYWR2aWNlID4gMCk7CisJCXBncGFfcGxh bm5lcl9nZW5lcmF0ZV9hZHZpY2UtLTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGVyIGZvciBFWFBM QUlOIChQTEFOX0FEVklDRSkuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBs YWluX29wdGlvbl9oYW5kbGVyKEV4cGxhaW5TdGF0ZSAqZXMsIERlZkVsZW0gKm9wdCwKKwkJCQkJ CQkJCSAgUGFyc2VTdGF0ZSAqcHN0YXRlKQoreworCWJvb2wJICAgKnBsYW5fYWR2aWNlOworCisJ cGxhbl9hZHZpY2UgPSBHZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9p ZCk7CisKKwlpZiAocGxhbl9hZHZpY2UgPT0gTlVMTCkKKwl7CisJCXBsYW5fYWR2aWNlID0gcGFs bG9jMF9vYmplY3QoYm9vbCk7CisJCVNldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0 ZW5zaW9uX2lkLCBwbGFuX2FkdmljZSk7CisJfQorCisJKnBsYW5fYWR2aWNlID0gZGVmR2V0Qm9v bGVhbihvcHQpOworfQorCisvKgorICogRGlzcGxheSBhIHN0cmluZyB0aGF0IGlzIGxpa2VseSB0 byBjb25zaXN0IG9mIG11bHRpcGxlIGxpbmVzIGluIEVYUExBSU4KKyAqIG91dHB1dC4KKyAqLwor c3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoRXhwbGFp blN0YXRlICplcywgY2hhciAqcWxhYmVsLAorCQkJCQkJCQkJICBjaGFyICp2YWx1ZSkKK3sKKwlj aGFyCSAgICpzOworCisJLyogRm9yIG5vbi10ZXh0IGZvcm1hdHMsIGl0J3MgYmVzdCBub3QgdG8g YWRkIGFueSBzcGVjaWFsIGhhbmRsaW5nLiAqLworCWlmIChlcy0+Zm9ybWF0ICE9IEVYUExBSU5f Rk9STUFUX1RFWFQpCisJeworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgdmFsdWUsIGVz KTsKKwkJcmV0dXJuOworCX0KKworCS8qIEluIHRleHQgZm9ybWF0LCBpZiB0aGVyZSBpcyBubyBk YXRhLCBkaXNwbGF5IG5vdGhpbmcuICovCisJaWYgKCp2YWx1ZSA9PSAnXDAnKQorCQlyZXR1cm47 CisKKwkvKgorCSAqIEl0IGxvb2tzIG5pY2VzdCB0byBpbmRlbnQgZWFjaCBsaW5lIG9mIHRoZSBh ZHZpY2Ugc2VwYXJhdGVseSwgYmVnaW5uaW5nCisJICogb24gdGhlIGxpbmUgYmVsb3cgdGhlIGxh YmVsLgorCSAqLworCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGVz LT5zdHIsICIlczpcbiIsIHFsYWJlbCk7CisJZXMtPmluZGVudCsrOworCXdoaWxlICgocyA9IHN0 cmNocih2YWx1ZSwgJ1xuJykpICE9IE5VTEwpCisJeworCQlFeHBsYWluSW5kZW50VGV4dChlcyk7 CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oZXMtPnN0ciwgdmFsdWUsIChzIC0gdmFsdWUpICsg MSk7CisJCXZhbHVlID0gcyArIDE7CisJfQorCisJLyogRG9uJ3QgaW50ZXJwcmV0IGEgdGVybWlu YWwgbmV3bGluZSBhcyBhIHJlcXVlc3QgZm9yIGFuIGVtcHR5IGxpbmUuICovCisJaWYgKCp2YWx1 ZSAhPSAnXDAnKQorCXsKKwkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRTdHJpbmdJ bmZvKGVzLT5zdHIsICIlc1xuIiwgdmFsdWUpOworCX0KKworCWVzLT5pbmRlbnQtLTsKK30KKwor LyoKKyAqIEFkZCBhZHZpY2UgZmVlZGJhY2sgdG8gdGhlIEVYUExBSU4gb3V0cHV0LgorICovCitz dGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9mZWVkYmFjayhFeHBsYWluU3RhdGUg KmVzLCBMaXN0ICpmZWVkYmFjaykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZmVlZGJhY2spCisJ eworCQlpbnQJCQlmbGFncyA9IGRlZkdldEludDMyKGl0ZW0pOworCisJCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZiwgIiVzIC8qICIsIGl0ZW0tPmRlZm5hbWUpOworCQlwZ3BhX3Ryb3ZlX2FwcGVuZF9m bGFncygmYnVmLCBmbGFncyk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiAqL1xuIik7CisJ fQorCisJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIlN1cHBsaWVk IFBsYW4gQWR2aWNlIiwKKwkJCQkJCQkJCQkgIGJ1Zi5kYXRhKTsKK30KKworLyoKKyAqIEFkZCBy ZWxldmFudCBkZXRhaWxzLCBpZiBhbnksIHRvIHRoZSBFWFBMQUlOIG91dHB1dCBmb3IgYSBzaW5n bGUgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3Bs YW5faG9vayhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCQkgSW50b0NsYXVzZSAq aW50bywKKwkJCQkJCQkJCSBFeHBsYWluU3RhdGUgKmVzLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIg KnF1ZXJ5U3RyaW5nLAorCQkJCQkJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQkJ IFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQoreworCWJvb2wJCXNob3VsZF9leHBsYWluOwor CURlZkVsZW0gICAgKnBncGFfaXRlbTsKKwlMaXN0CSAgICpwZ3BhX2xpc3Q7CisKKwlpZiAocHJl dl9leHBsYWluX3Blcl9wbGFuKQorCQlwcmV2X2V4cGxhaW5fcGVyX3BsYW4ocGxhbm5lZHN0bXQs IGludG8sIGVzLCBxdWVyeVN0cmluZywgcGFyYW1zLAorCQkJCQkJCSAgcXVlcnlFbnYpOworCisJ LyogU2hvdWxkIGFuIGFkdmljZSBzdHJpbmcgYmUgcGFydCBvZiB0aGUgRVhQTEFJTiBvdXRwdXQ/ ICovCisJc2hvdWxkX2V4cGxhaW4gPSBwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihlcyk7 CisKKwkvKiBGaW5kIGFueSBkYXRhIHBncGFfcGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGluIHRo ZSBQbGFubmVkU3RtdC4gKi8KKwlwZ3BhX2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShw bGFubmVkc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIp OworCXBncGFfbGlzdCA9IHBncGFfaXRlbSA9PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBncGFf aXRlbS0+YXJnOworCisJLyoKKwkgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29yZCBv ZiBhdHRlbXB0aW5nIHRvIGFwcGx5IGFkdmljZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmluZywg d2UgYWx3YXlzIG91dHB1dCB0aGF0IGluZm9ybWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNldAor CSAqIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNl IHRvIHN1cHByZXNzIHRoYXQKKwkgKiBiZWhhdmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25seSBk aXNwbGF5IGl0IHdoZW4gdGhlIFBMQU5fQURWSUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZpZWQg YW5kIG5vdCBzZXQgdG8gZmFsc2UuCisJICoKKwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmluZyBh IHF1ZXJ5IHBsYW5uZWQgYmVmb3JlaGFuZCAtLSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0ZW1l bnQgLS0gdGhlIGFwcGxpY2F0aW9uIG9mIHF1ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVlbgor CSAqIHJlY29yZGVkLCBhbmQgdGhlcmVmb3JlIHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93IGFu eXRoaW5nLiBVc2UKKwkgKiBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFp bHMgPSB0cnVlIHRvIHdvcmsgYXJvdW5kIHRoaXMuCisJICovCisJaWYgKHBncGFfbGlzdCAhPSBO VUxMICYmIChwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgfHwK KwkJCQkJCQkgIHNob3VsZF9leHBsYWluKSkKKwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNrOwor CisJCWZlZWRiYWNrID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVlZGJh Y2siKTsKKwkJaWYgKGZlZWRiYWNrICE9IE5VTEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWlu X2ZlZWRiYWNrKGVzLCAoTGlzdCAqKSBmZWVkYmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAqIElm IHRoZSBQTEFOX0FEVklDRSBvcHRpb24gd2FzIHNwZWNpZmllZCAtLSBhbmQgbm90IHNldCB0byBG QUxTRSAtLQorCSAqIHNob3cgZ2VuZXJhdGVkIGFkdmljZS4KKwkgKi8KKwlpZiAoc2hvdWxkX2V4 cGxhaW4pCisJeworCQlEZWZFbGVtICAgICphZHZpY2Vfc3RyaW5nX2l0ZW07CisJCWNoYXIJICAg KmFkdmljZV9zdHJpbmcgPSBOVUxMOworCisJCWFkdmljZV9zdHJpbmdfaXRlbSA9CisJCQlmaW5k X2RlZmVsZW1fYnlfZGVmbmFtZShwZ3BhX2xpc3QsICJhZHZpY2Vfc3RyaW5nIik7CisJCWlmIChh ZHZpY2Vfc3RyaW5nX2l0ZW0gIT0gTlVMTCkKKwkJeworCQkJYWR2aWNlX3N0cmluZyA9IHN0clZh bChhZHZpY2Vfc3RyaW5nX2l0ZW0tPmFyZyk7CisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX3Rl eHRfbXVsdGlsaW5lKGVzLCAiR2VuZXJhdGVkIFBsYW4gQWR2aWNlIiwKKwkJCQkJCQkJCQkJCSAg YWR2aWNlX3N0cmluZyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDaGVjayBob29rIGZvciBwZ19w bGFuX2FkdmljZS5hZHZpY2UKKyAqLworc3RhdGljIGJvb2wKK3BnX3BsYW5fYWR2aWNlX2Fkdmlj ZV9jaGVja19ob29rKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJj ZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCB0bXBjb250 ZXh0OworCWNoYXIJICAgKmVycm9yOworCisJaWYgKCpuZXd2YWwgPT0gTlVMTCkKKwkJcmV0dXJu IHRydWU7CisKKwl0bXBjb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1v cnlDb250ZXh0LAorCQkJCQkJCQkJICAgInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJCQkJCQkJ CQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHRtcGNvbnRleHQpOworCisJLyoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIHNh dmUgdGhlIHBhcnNlIHRyZWUgdGhhdCB3ZSBjb25zdHJ1Y3QgaGVyZSBmb3IKKwkgKiBldmVudHVh bCB1c2Ugd2hlbiBwbGFubmluZyB3aXRoIHRoaXMgYWR2aWNlLCBidXQgKmV4dHJhIGNhbiBvbmx5 IHBvaW50CisJICogdG8gYSBzaW5nbGUgZ3VjX21hbGxvYydkIGNodW5rLCBhbmQgb3VyIHBhcnNl IHRyZWUgaW52b2x2ZXMgYW4KKwkgKiBhcmJpdHJhcnkgbnVtYmVyIG9mIG1lbW9yeSBhbGxvY2F0 aW9ucy4KKwkgKi8KKwkodm9pZCkgcGdwYV9wYXJzZSgqbmV3dmFsLCAmZXJyb3IpOworCisJaWYg KGVycm9yICE9IE5VTEwpCisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkNvdWxkIG5vdCBwYXJzZSBh ZHZpY2U6ICVzIiwgZXJyb3IpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY29udGV4dCk7CisKKwlyZXR1cm4gKGVycm9yID09 IE5VTEwpOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9y IGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5 X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUo RGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwg ZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxMOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi43NDkzMzFiNmI4YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaApAQCAtMCwwICsxLDQ1IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5oCisgKgkgIG1haW4gaGVhZGVy IGZpbGUgZm9yIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19QTEFOX0FEVklDRV9ICisjZGVmaW5lIFBHX1BM QU5fQURWSUNFX0gKKworI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCIKKyNpbmNs dWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKworLyogSG9vayBmb3Igb3RoZXIgcGx1Z2lucyB0byBz dXBwbHkgYWR2aWNlIHN0cmluZ3MgKi8KK3R5cGVkZWYgY2hhciAqKCpwZ19wbGFuX2FkdmljZV9h ZHZpc29yX2hvb2spIChQbGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJCQkJCQkgIFF1ZXJ5ICpw YXJzZSwKKwkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJ CSAgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CisK Ky8qIEdVQyB2YXJpYWJsZXMgKi8KK2V4dGVybiBjaGFyICpwZ19wbGFuX2FkdmljZV9hZHZpY2U7 CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHM7 CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9mZWVkYmFja193YXJuaW5nczsKK2V4dGVybiBi b29sIHBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2s7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMg KGZvciB1c2UgYnkgcGdfcGxhbl9hZHZpY2UgaXRzZWxmKSAqLworZXh0ZXJuIE1lbW9yeUNvbnRl eHQgcGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCk7CitleHRlcm4gYm9vbCBwZ19wbGFuX2Fk dmljZV9zaG91bGRfZXhwbGFpbihFeHBsYWluU3RhdGUgKmVzKTsKK2V4dGVybiBjaGFyICpwZ19w bGFuX2FkdmljZV9nZXRfc3VwcGxpZWRfcXVlcnlfYWR2aWNlKFBsYW5uZXJHbG9iYWwgKmdsb2Is CisJCQkJCQkJCQkJCQkJICBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCQkJCQkJICBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJ CQkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzIChm b3IgdXNlIGJ5IG90aGVyIHBsdWdpbnMpICovCitleHRlcm4gUEdETExFWFBPUlQgdm9pZCBwZ19w bGFuX2FkdmljZV9hZGRfYWR2aXNvcihwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vayk7 CitleHRlcm4gUEdETExFWFBPUlQgdm9pZCBwZ19wbGFuX2FkdmljZV9yZW1vdmVfYWR2aXNvcihw Z19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vayk7CitleHRlcm4gUEdETExFWFBPUlQgdm9p ZCBwZ19wbGFuX2FkdmljZV9yZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uKGJvb2wgYWN0aXZhdGUp OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZjRmYTZhNjI2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKQEAgLTAsMCArMSwzNTEgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHBncGFfYXN0LmMKKyAqCSAgYWRkaXRpb25hbCBzdXBwb3J0aW5n IGNvZGUgcmVsYXRlZCB0byBwbGFuIGFkdmljZSBwYXJzaW5nCisgKgorICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJ ICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfYXN0Lmgi CisKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKyNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgorCitzdGF0aWMgYm9vbCBwZ3BhX2lkZW50aWZpZXJzX2Nv dmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkg IHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkJCSAgYm9vbCAqcmlkc191c2Vk KTsKKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNp ZmllZCBhZHZpY2UgdGFnLgorICovCitjaGFyICoKK3BncGFfY3N0cmluZ19hZHZpY2VfdGFnKHBn cGFfYWR2aWNlX3RhZ190eXBlIGFkdmljZV90YWcpCit7CisJc3dpdGNoIChhZHZpY2VfdGFnKQor CXsKKwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuICJCSVRNQVBf SEVBUF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1cm4gIkZP UkVJR05fSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfR0FUSEVSOgorCQkJcmV0dXJuICJHQVRIRVIi OworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiAiR0FUSEVSX01FUkdF IjsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQlyZXR1cm4gIkhBU0hfSk9JTiI7CisJ CWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJcmV0dXJuICJJTkRFWF9PTkxZX1ND QU4iOworCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQlyZXR1cm4gIklOREVYX1NDQU4i OworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQlyZXR1cm4gIkpPSU5fT1JERVIiOwor CQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIk1FUkdF X0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJ CQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09Q X01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NQVRFUklBTElaRSI7CisJCWNh c2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1Bf TUVNT0laRSI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4g Ik5FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisJCQlyZXR1 cm4gIk5PX0dBVEhFUiI7CisJCWNhc2UgUEdQQV9UQUdfUEFSVElUSU9OV0lTRToKKwkJCXJldHVy biAiUEFSVElUSU9OV0lTRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToK KwkJCXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpP SU5fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9VTklRVUUiOworCQljYXNlIFBHUEFfVEFH X1NFUV9TQ0FOOgorCQkJcmV0dXJuICJTRVFfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfVElEX1ND QU46CisJCQlyZXR1cm4gIlRJRF9TQ0FOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJl dHVybiBOVUxMOworfQorCisvKgorICogQ29udmVydCBhbiBhZHZpY2UgdGFnLCBmb3JtYXR0ZWQg YXMgYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisgKiBkb3duY2FzZWQgYXMgYXBwcm9w cmlhdGUsIHRvIGEgcGdwYV9hZHZpY2VfdGFnX3R5cGUuCisgKgorICogSWYgd2Ugc3VjY2VlZCwg c2V0ICpmYWlsID0gZmFsc2UgYW5kIHJldHVybiB0aGUgcmVzdWx0OyBpZiB3ZSBmYWlsLAorICog c2V0ICpmYWlsID0gdHJ1ZSBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSB2YWx1ZS4KKyAqLworcGdw YV9hZHZpY2VfdGFnX3R5cGUKK3BncGFfcGFyc2VfYWR2aWNlX3RhZyhjb25zdCBjaGFyICp0YWcs IGJvb2wgKmZhaWwpCit7CisJKmZhaWwgPSBmYWxzZTsKKworCXN3aXRjaCAodGFnWzBdKQorCXsK KwkJY2FzZSAnYic6CisJCQlpZiAoc3RyY21wKHRhZywgImJpdG1hcF9oZWFwX3NjYW4iKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJYnJlYWs7CisJCWNh c2UgJ2YnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJmb3JlaWduX2pvaW4iKSA9PSAwKQorCQkJCXJl dHVybiBQR1BBX1RBR19GT1JFSUdOX0pPSU47CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlp ZiAoc3RyY21wKHRhZywgImdhdGhlciIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhF UjsKKwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0aGVyX21lcmdlIikgPT0gMCkKKwkJCQlyZXR1cm4g UEdQQV9UQUdfR0FUSEVSX01FUkdFOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJaWYgKHN0 cmNtcCh0YWcsICJoYXNoX2pvaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19IQVNIX0pP SU47CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X3Nj YW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19JTkRFWF9TQ0FOOworCQkJaWYgKHN0cmNt cCh0YWcsICJpbmRleF9vbmx5X3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19JTkRF WF9PTkxZX1NDQU47CisJCQlicmVhazsKKwkJY2FzZSAnaic6CisJCQlpZiAoc3RyY21wKHRhZywg ImpvaW5fb3JkZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19KT0lOX09SREVSOworCQkJ YnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKHN0cmNtcCh0YWcsICJtZXJnZV9qb2luX21hdGVy aWFsaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTEla RTsKKwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9wbGFpbiIpID09IDApCisJCQkJcmV0 dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU47CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJ CQlpZiAoc3RyY21wKHRhZywgIm5lc3RlZF9sb29wX21hdGVyaWFsaXplIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRh ZywgIm5lc3RlZF9sb29wX21lbW9pemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNU RURfTE9PUF9NRU1PSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9wbGFpbiIp ID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOworCQkJaWYgKHN0 cmNtcCh0YWcsICJub19nYXRoZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19HQVRI RVI7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlpZiAoc3RyY21wKHRhZywgInBhcnRpdGlv bndpc2UiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19QQVJUSVRJT05XSVNFOworCQkJYnJl YWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJzZW1pam9pbl9ub25fdW5pcXVl IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRTsKKwkJCWlm IChzdHJjbXAodGFnLCAic2VtaWpvaW5fdW5pcXVlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfU0VNSUpPSU5fVU5JUVVFOworCQkJaWYgKHN0cmNtcCh0YWcsICJzZXFfc2NhbiIpID09IDAp CisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgor CQkJaWYgKHN0cmNtcCh0YWcsICJ0aWRfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFH X1RJRF9TQ0FOOworCQkJYnJlYWs7CisJfQorCisJLyogZGlkbid0IHdvcmsgb3V0ICovCisJKmZh aWwgPSB0cnVlOworCisJLyogcmV0dXJuIGFuIGFyYml0cmFyeSB2YWx1ZSB0byB1bndpbmQgdGhl IGNhbGwgc3RhY2sgKi8KKwlyZXR1cm4gUEdQQV9UQUdfU0VRX1NDQU47Cit9CisKKy8qCisgKiBG b3JtYXQgYSBwZ3BhX2FkdmljZV90YXJnZXQgYXMgYSBzdHJpbmcgYW5kIGFwcGVuZCByZXN1bHQg dG8gYSBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0 cmluZ0luZm8gc3RyLCBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlpZiAodGFyZ2V0 LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0 cnVlOworCQljaGFyCSAgICpkZWxpbXM7CisKKwkJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfVU5PUkRFUkVEX0xJU1QpCisJCQlkZWxpbXMgPSAie30iOworCQllbHNlCisJCQlkZWxp bXMgPSAiKCkiOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgZGVsaW1zWzBdKTsKKwkJ Zm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hp bGRyZW4pCisJCXsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQor CQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgJyAnKTsKKwkJCXBncGFfZm9ybWF0X2Fkdmlj ZV90YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFy KHN0ciwgZGVsaW1zWzFdKTsKKwl9CisJZWxzZQorCXsKKwkJY29uc3QgY2hhciAqcnRfaWRlbnRp ZmllcjsKKworCQlydF9pZGVudGlmaWVyID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmdGFyZ2V0 LT5yaWQpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgcnRfaWRlbnRpZmllcik7CisJ fQorfQorCisvKgorICogRm9ybWF0IGEgcGdwYV9pbmRleF90YXJnZXQgYXMgYSBzdHJpbmcgYW5k IGFwcGVuZCByZXN1bHQgdG8gYSBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3BhX2Zvcm1hdF9p bmRleF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KQor eworCWlmIChpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5m byhzdHIsICIlcy4iLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZXNw YWNlKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsIHF1b3RlX2lkZW50aWZpZXIoaXRh cmdldC0+aW5kbmFtZSkpOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFf aW5kZXhfdGFyZ2V0IG9iamVjdHMgYXJlIGV4YWN0bHkgaWRlbnRpY2FsLgorICovCitib29sCitw Z3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4 X3RhcmdldCAqaTIpCit7CisJLyogaW5kbmFtZXNwYWNlIGNhbiBiZSBOVUxMLCBhbmQgdHdvIE5V TEwgdmFsdWVzIGFyZSBlcXVhbCAqLworCWlmICgoaTEtPmluZG5hbWVzcGFjZSAhPSBOVUxMIHx8 IGkyLT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkgJiYKKwkJKGkxLT5pbmRuYW1lc3BhY2UgPT0gTlVM TCB8fCBpMi0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJIHN0cmNtcChpMS0+aW5kbmFtZXNw YWNlLCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzdHJj bXAoaTEtPmluZG5hbWUsIGkyLT5pbmRuYW1lKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBtYXRj aGVzIGFuIGFueSBwYXJ0IG9mIGFuIGFkdmljZSB0YXJnZXQuCisgKi8KK2Jvb2wKK3BncGFfaWRl bnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZpZXIgKnJpZCwgcGdwYV9hZHZpY2Vf dGFyZ2V0ICp0YXJnZXQpCit7CisJLyogRm9yIG5vbi1pZGVudGlmaWVycywgY2hlY2sgYWxsIGRl c2NlbmRhbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJ RVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwg dGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3Rh cmdldChyaWQsIGNoaWxkX3RhcmdldCkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJu IGZhbHNlOworCX0KKworCS8qIFN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29ucyBvZiBhbGlhcyBu YW1lIGFuZCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwlpZiAoc3RyY21wKHJpZC0+YWxpYXNfbmFt ZSwgdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChy aWQtPm9jY3VycmVuY2UgIT0gdGFyZ2V0LT5yaWQub2NjdXJyZW5jZSkKKwkJcmV0dXJuIGZhbHNl OworCisJLyoKKwkgKiBJZiBhIHJlbGF0aW9uIGlkZW50aWZpZXIgbWVudGlvbnMgYSBwYXJ0aXRp b24gbmFtZSwgaXQgc2hvdWxkIGFsc28KKwkgKiBzcGVjaWZ5IGEgcGFydGl0aW9uIHNjaGVtYS4g QnV0IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZSBzY2hlbWEgTlVMTCB0bworCSAqIG1hdGNoIGFu eXRoaW5nLgorCSAqLworCUFzc2VydChyaWQtPnBhcnRuc3AgIT0gTlVMTCB8fCByaWQtPnBhcnRy ZWwgPT0gTlVMTCk7CisJaWYgKHJpZC0+cGFydG5zcCAhPSBOVUxMICYmIHRhcmdldC0+cmlkLnBh cnRuc3AgIT0gTlVMTCAmJgorCQlzdHJjbXAocmlkLT5wYXJ0bnNwLCB0YXJnZXQtPnJpZC5wYXJ0 bnNwKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBjYW4g YmUgTlVMTCBvbiBlaXRoZXIgc2lkZSwgYnV0IE5VTEwgb25seSBtYXRjaGVzIGFub3RoZXIKKwkg KiBOVUxMLgorCSAqLworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wYXJ0 cmVsLCB0YXJnZXQtPnJpZC5wYXJ0cmVsKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3RyaW5n c19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wbGFuX25hbWUsIHRhcmdldC0+cmlkLnBsYW5fbmFt ZSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogTWF0Y2gg aWRlbnRpZmllcnMgdG8gYWR2aWNlIHRhcmdldHMgYW5kIHJldHVybiBhbiBlbnVtIHZhbHVlIGlu ZGljYXRpbmcKKyAqIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2V0IG9mIGtleXMgYW5k IHRoZSBzZXQgb2YgdGFyZ2V0cy4KKyAqCisgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBwZ3BhX2l0 bV90eXBlLgorICovCitwZ3BhX2l0bV90eXBlCitwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rhcmdl dChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0KQoreworCWJvb2wJCWFsbF9yaWRzX3VzZWQgPSB0cnVlOworCWJvb2wJ CWFueV9yaWRzX3VzZWQgPSBmYWxzZTsKKwlib29sCQlhbGxfdGFyZ2V0c191c2VkOworCWJvb2wJ ICAgKnJpZHNfdXNlZCA9IHBhbGxvYzBfYXJyYXkoYm9vbCwgbnJpZHMpOworCisJYWxsX3Rhcmdl dHNfdXNlZCA9CisJCXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCB0 YXJnZXQsIHJpZHNfdXNlZCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJ eworCQlpZiAocmlkc191c2VkW2ldKQorCQkJYW55X3JpZHNfdXNlZCA9IHRydWU7CisJCWVsc2UK KwkJCWFsbF9yaWRzX3VzZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoYWxsX3JpZHNfdXNlZCkKKwl7 CisJCWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0VRVUFMOworCQll bHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUOworCX0KKwllbHNlCisJewor CQlpZiAoYWxsX3RhcmdldHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9T VUJTRVQ7CisJCWVsc2UgaWYgKGFueV9yaWRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fSU5U RVJTRUNUSU5HOworCQllbHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQ7CisJfQorfQor CisvKgorICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHRhcmdldCBvciBzdWItdGFyZ2V0IGlzIG1h dGNoZWQgYnkgYXQgbGVhc3Qgb25lCisgKiBpZGVudGlmaWVyLCBhbmQgb3RoZXJ3aXNlIGZhbHNl LgorICoKKyAqIEFsc28gc2V0cyByaWRzX3VzZWRbaV0gPSB0cnVlIGZvciBlYWNoIGlkZW5pZmll ciB0aGF0IG1hdGNoZXMgYXQgbGVhc3Qgb25lCisgKiB0YXJnZXQuCisgKi8KK3N0YXRpYyBib29s CitwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmll ciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LCBib29sICpyaWRz X3VzZWQpCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAodGFyZ2V0LT50dHlwZSAh PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJcmVzdWx0ID0gdHJ1ZTsKKworCQlmb3Jl YWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJl bikKKwkJeworCQkJaWYgKCFwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlk cywgY2hpbGRfdGFyZ2V0LAorCQkJCQkJCQkJCQkgICByaWRzX3VzZWQpKQorCQkJCXJlc3VsdCA9 IGZhbHNlOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7 ICsraSkKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldCgmcmlkc1tp XSwgdGFyZ2V0KSkKKwkJCXsKKwkJCQlyaWRzX3VzZWRbaV0gPSB0cnVlOworCQkJCXJlc3VsdCA9 IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYzNk YjgwMTkyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9h c3QuaApAQCAtMCwwICsxLDE4NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9h c3QuaAorICoJICBhYnN0cmFjdCBzeW50YXggdHJlZXMgZm9yIHBsYW4gYWR2aWNlLCBwbHVzIHBh cnNlci9zY2FubmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9hc3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IFBHUEFfQVNUX0gKKyNkZWZpbmUgUEdQQV9BU1RfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlm aWVyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisKKy8qCisgKiBBZHZpY2UgaXRl bXMgZ2VuZXJhbGx5IHRha2UgdGhlIGZvcm0gU09NRV9UQUcoaXRlbSBbLi4uXSksIHdoZXJlIGFu IGl0ZW0KKyAqIGNhbiB0YWtlIHZhcmlvdXMgZm9ybXMuIFRoZSBzaW1wbGVzdCBjYXNlIGlzIGEg cmVsYXRpb24gaWRlbnRpZmllciwgYnV0CisgKiBzb21lIHRhZ3MgYWxsb3cgc3VibGlzdHMsIGFu ZCBKT0lOX09SREVSKCkgYWxsb3dzIGJvdGggb3JkZXJlZCBhbmQgdW5vcmRlcmVkCisgKiBzdWJs aXN0cy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9UQVJHRVRfSURFTlRJRklFUiwJCS8q IHJlbGF0aW9uIGlkZW50aWZpZXIgKi8KKwlQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QsCS8qIChp dGVtIC4uLikgKi8KKwlQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVAkvKiB7aXRlbSAuLi59ICov Cit9IHBncGFfdGFyZ2V0X3R5cGU7CisKKy8qCisgKiBBbiBpbmRleCBzcGVjaWZpY2F0aW9uLgor ICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2luZGV4X3RhcmdldAoreworCS8qIEluZGV4IHNjaGVt YSBhbmQgbmFtZSAqLworCWNoYXIJICAgKmluZG5hbWVzcGFjZTsKKwljaGFyCSAgICppbmRuYW1l OworfSBwZ3BhX2luZGV4X3RhcmdldDsKKworLyoKKyAqIEEgc2luZ2xlIGl0ZW0gYWJvdXQgd2hp Y2ggYWR2aWNlIGlzIGJlaW5nIGdpdmVuLCB3aGljaCBjb3VsZCBiZSBlaXRoZXIKKyAqIGEgcmVs YXRpb24gaWRlbnRpZmllciB0aGF0IHdlIHdhbnQgdG8gYnJlYWsgb3V0IGludG8gaXRzIGNvbnN0 aXR1ZW50IGZpZWxkcywKKyAqIG9yIGEgc3VibGlzdCBvZiBzb21lIGtpbmQuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBncGFfYWR2aWNlX3RhcmdldAoreworCXBncGFfdGFyZ2V0X3R5cGUgdHR5cGU7 CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaXMgbWVhbmluZ2Z1bCB3aGVuIHR0eXBlIGlzIFBHUEFf VEFSR0VUX0lERU5USUZJRVIuCisJICoKKwkgKiBBbGwgaWRlbnRpZmllcnMgbXVzdCBoYXZlIGFu IGFsaWFzIG5hbWUgYW5kIGFuIG9jY3VycmVuY2UgbnVtYmVyOyB0aGUKKwkgKiByZW1haW5pbmcg ZmllbGRzIGNhbiBiZSBOVUxMLiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEK KwkgKiBwYXJ0aXRpb24gbmFtZSB3aXRob3V0IGEgcGFydGl0aW9uIHNjaGVtYSwgYnV0IG5vdCB0 aGUgcmV2ZXJzZS4KKwkgKi8KKwlwZ3BhX2lkZW50aWZpZXIgcmlkOworCisJLyoKKwkgKiBUaGlz IGZpZWxkIGlzIHNldCB3aGVuIHR0eXBlIGlzIFBHUEFfVEFSR0VUX0lERU5USUZJRVIgYW5kIHRo ZSBhZHZpY2UKKwkgKiB0YWcgaXMgUEdQQV9UQUdfSU5ERVhfU0NBTiBvciBQR1BBX1RBR19JTkRF WF9PTkxZX1NDQU4uCisJICovCisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7CisKKwkvKgor CSAqIFdoZW4gdGhlIHR0eXBlIGlzIFBHUEFfVEFSR0VUXzxhbnl0aGluZz5fTElTVCwgdGhpcyBm aWVsZCBjb250YWlucyBhCisJICogbGlzdCBvZiBhZGRpdGlvbmFsIHBncGFfYWR2aWNlX3Rhcmdl dCBvYmplY3RzLiBPdGhlcndpc2UsIGl0IGlzIHVudXNlZC4KKwkgKi8KKwlMaXN0CSAgICpjaGls ZHJlbjsKK30gcGdwYV9hZHZpY2VfdGFyZ2V0OworCisvKgorICogVGhlc2UgYXJlIGFsbCB0aGUg a2luZHMgb2YgYWR2aWNlIHRoYXQgd2Uga25vdyBob3cgdG8gcGFyc2UuIElmIGEga2V5d29yZAor ICogaXMgZm91bmQgYXQgdGhlIHRvcCBsZXZlbCwgaXQgbXVzdCBiZSBpbiB0aGlzIGxpc3QuCisg KgorICogSWYgeW91IGNoYW5nZSBhbnl0aGluZyBoZXJlLCBhbHNvIHVwZGF0ZSBwZ3BhX3BhcnNl X2FkdmljZV90YWcgYW5kCisgKiBwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZy4KKyAqLwordHlwZWRl ZiBlbnVtIHBncGFfYWR2aWNlX3RhZ190eXBlCit7CisJUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NB TiwKKwlQR1BBX1RBR19GT1JFSUdOX0pPSU4sCisJUEdQQV9UQUdfR0FUSEVSLAorCVBHUEFfVEFH X0dBVEhFUl9NRVJHRSwKKwlQR1BBX1RBR19IQVNIX0pPSU4sCisJUEdQQV9UQUdfSU5ERVhfT05M WV9TQ0FOLAorCVBHUEFfVEFHX0lOREVYX1NDQU4sCisJUEdQQV9UQUdfSk9JTl9PUkRFUiwKKwlQ R1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX01FUkdFX0pPSU5fUExB SU4sCisJUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTkVTVEVE X0xPT1BfTUVNT0laRSwKKwlQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTiwKKwlQR1BBX1RBR19O T19HQVRIRVIsCisJUEdQQV9UQUdfUEFSVElUSU9OV0lTRSwKKwlQR1BBX1RBR19TRU1JSk9JTl9O T05fVU5JUVVFLAorCVBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSwKKwlQR1BBX1RBR19TRVFfU0NB TiwKKwlQR1BBX1RBR19USURfU0NBTgorfSBwZ3BhX2FkdmljZV90YWdfdHlwZTsKKworLyoKKyAq IEFuIGl0ZW0gb2YgYWR2aWNlLCBtZWFuaW5nIGEgdGFnIGFuZCB0aGUgbGlzdCBvZiBhbGwgdGFy Z2V0cyB0byB3aGljaAorICogaXQgaXMgYmVpbmcgYXBwbGllZC4KKyAqCisgKiAidGFyZ2V0cyIg aXMgYSBsaXN0IG9mIHBncGFfYWR2aWNlX3RhcmdldCBvYmplY3RzLgorICoKKyAqIFRoZSBMaXN0 IHJldHVybmVkIGZyb20gcGdwYV95eXBhcnNlIGlzIGxpc3Qgb2YgcGdwYV9hZHZpY2VfaXRlbSBv YmplY3RzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2FkdmljZV9pdGVtCit7CisJcGdwYV9h ZHZpY2VfdGFnX3R5cGUgdGFnOworCUxpc3QJICAgKnRhcmdldHM7Cit9IHBncGFfYWR2aWNlX2l0 ZW07CisKKy8qCisgKiBSZXN1bHQgb2YgY29tcGFyaW5nIGFuIGFycmF5IG9mIHBncGFfcmVsYXRp b25faWRlbnRpZmllciBvYmplY3RzIHRvIGEKKyAqIHBncGFfYWR2aWNlX3RhcmdldC4KKyAqCisg KiBQR1BBX0lUTV9FUVVBTCBtZWFucyBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieSBzb21lIGlk ZW50aWZpZXIsIGFuZAorICogYWxsIGlkZW50aWZpZXJzIHdlcmUgbWF0Y2hlZCB0byBhIHRhcmdl dC4KKyAqCisgKiBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgaWRlbnRp ZmllcnMgbWF0Y2hlZCB0byBhIHRhcmdldCwKKyAqIGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVyIHRh cmdldHMuIEdlbmVyYWxseSwgdGhpcyBtZWFucyB0aGF0IHRoZSBhZHZpY2UgaXMKKyAqIGxvb2tp bmcgdG8gYXBwbHkgdG8gYWxsIG9mIHRoZSByZWxzIHdlIGhhdmUgcGx1cyBzb21lIGFkZGl0aW9u YWwgb25lcyB0aGF0CisgKiB3ZSBkb24ndCBoYXZlLgorICoKKyAqIFBHUEFfSVRNX1RBUkdFVFNf QVJFX1NVQlNFVCBtZWFucyB0aGF0IGFsbCB0YXJnZXRzIGFyZSBtYXRjaGVkIGJ5CisgKiBpZGVu dGlmaWVycywgYnV0IHRoZXJlIHdlcmUgbGVmdG92ZXIgaWRlbnRpZmllcnMuIEdlbmVyYWxseSwg dGhpcyBtZWFucworICogdGhhdCB0aGUgYWR2aWNlIGlzIGxvb2tpbmcgdG8gYXBwbHkgdG8gc29t ZSBidXQgbm90IGFsbCBvZiB0aGUgcmVscyB3ZSBoYXZlLgorICoKKyAqIFBHUEFfSVRNX0lOVEVS U0VDVElORyBtZWFucyB0aGF0IHNvbWUgaWRlbnRpZmllcnMgYW5kIHRhcmdldHMgd2VyZSBtYXRj aGVkLAorICogYnV0IG5laXRoZXIgYWxsIGlkZW50aWZpZXJzIG5vciBhbGwgdGFyZ2V0cyBjb3Vs ZCBiZSBtYXRjaGVkIHRvIGl0ZW1zIGluCisgKiB0aGUgb3RoZXIgc2V0LgorICoKKyAqIFBHUEFf SVRNX0RJU0pPSU5UIG1lYW5zIHRoYXQgbm8gbWF0Y2hlcyBiZXR3ZWVuIGlkZW50aWZpZXJzIGFu ZCB0YXJnZXRzIHdlcmUKKyAqIGZvdW5kLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX0lU TV9FUVVBTCwKKwlQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQsCisJUEdQQV9JVE1fVEFSR0VUU19B UkVfU1VCU0VULAorCVBHUEFfSVRNX0lOVEVSU0VDVElORywKKwlQR1BBX0lUTV9ESVNKT0lOVAor fSBwZ3BhX2l0bV90eXBlOworCisvKiBmb3IgcGdwYV9zY2FubmVyLmwgYW5kIHBncGFfcGFyc2Vy LnkgKi8KK3VuaW9uIFlZU1RZUEU7CisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisj ZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQgKnl5c2Nhbl90Owor I2VuZGlmCisKKy8qIGluIHBncGFfc2Nhbm5lci5sICovCitleHRlcm4gaW50CXBncGFfeXlsZXgo dW5pb24gWVlTVFlQRSAqeXlsdmFsX3BhcmFtLCBMaXN0ICoqcmVzdWx0LAorCQkJCQkgICBjaGFy ICoqcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitleHRlcm4gdm9pZCBw Z3BhX3l5ZXJyb3IoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLAorCQkJ CQkJIHl5c2Nhbl90IHl5c2Nhbm5lciwKKwkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4 dGVybiB2b2lkIHBncGFfc2Nhbm5lcl9pbml0KGNvbnN0IGNoYXIgKnN0ciwgeXlzY2FuX3QgKnl5 c2Nhbm5lcnApOworZXh0ZXJuIHZvaWQgcGdwYV9zY2FubmVyX2ZpbmlzaCh5eXNjYW5fdCB5eXNj YW5uZXIpOworCisvKiBpbiBwZ3BhX3BhcnNlci55ICovCitleHRlcm4gaW50CXBncGFfeXlwYXJz ZShMaXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsCisJCQkJCQkgeXlzY2Fu X3QgeXlzY2FubmVyKTsKK2V4dGVybiBMaXN0ICpwZ3BhX3BhcnNlKGNvbnN0IGNoYXIgKmFkdmlj ZV9zdHJpbmcsIGNoYXIgKiplcnJvcl9wKTsKKworLyogaW4gcGdwYV9hc3QuYyAqLworZXh0ZXJu IGNoYXIgKnBncGFfY3N0cmluZ19hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIGFkdmlj ZV90YWcpOworZXh0ZXJuIGJvb2wgcGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHBncGFf aWRlbnRpZmllciAqcmlkLAorCQkJCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0 KTsKK2V4dGVybiBwZ3BhX2l0bV90eXBlIHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlu dCBucmlkcywKKwkJCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJ CQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK2V4dGVybiBib29sIHBncGFfaW5k ZXhfdGFyZ2V0c19lcXVhbChwZ3BhX2luZGV4X3RhcmdldCAqaTEsCisJCQkJCQkJCQkgcGdwYV9p bmRleF90YXJnZXQgKmkyKTsKK2V4dGVybiBwZ3BhX2FkdmljZV90YWdfdHlwZSBwZ3BhX3BhcnNl X2FkdmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKTsKK2V4dGVybiB2b2lkIHBn cGFfZm9ybWF0X2FkdmljZV90YXJnZXQoU3RyaW5nSW5mbyBzdHIsCisJCQkJCQkJCQkgIHBncGFf YWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK2V4dGVybiB2b2lkIHBncGFfZm9ybWF0X2luZGV4X3Rh cmdldChTdHJpbmdJbmZvIHN0ciwKKwkJCQkJCQkJCSBwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdl dCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lk ZW50aWZpZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBjZmM0YWE0ZjdlCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwpAQCAt MCwwICsxLDQ4MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9pZGVudGlmaWVy LmMKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZvciByYW5nZSB0YWJsZSBl bnRyaWVzCisgKgorICogVGhlIGdvYWwgb2YgdGhpcyBtb2R1bGUgaXMgdG8gYmUgYWJsZSB0byBw cm9kdWNlIGlkZW50aWZpZXJzIGZvciByYW5nZQorICogdGFibGUgZW50cmllcyB0aGF0IGFyZSB1 bmlxdWUsIHVuZGVyc3RhbmRhYmxlIHRvIGh1bWFuIGJlaW5ncywgYW5kCisgKiBhYmxlIHRvIGJl IHJlY29uc3RydWN0ZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZyBjeWNsZXMuIEFzIGFuCisgKiBl eGNlcHRpb24sIHdlIGRvIG5vdCBjYXJlIGFib3V0LCBvciB3YW50IHRvIHByb2R1Y2UsIGlkZW50 aWZpZXJzIGZvcgorICogUlRFX0pPSU4gZW50cmllcy4gVGhpcyBpcyBiZWNhdXNlICgxKSB3ZSB3 b3VsZCBlbmQgdXAgd2l0aCBhIHRvbiBvZgorICogUlRFcyB3aXRoIHVuaGVscGZ1bCBuYW1lcyBs aWtlIHVubmFtZWRfam9pbl8xNzsgKDIpIG5vdCBhbGwgam9pbnMgaGF2ZQorICogUlRFczsgYW5k ICgzKSB3ZSBpbnRlbmQgdG8gcmVmZXIgdG8gam9pbnMgYnkgdGhlaXIgY29uc3RpdHVlbnQgbWVt YmVycworICogcmF0aGVyIHRoYW4gYnkgcmVmZXJlbmNlIHRvIHRoZSBqb2luIFJURS4KKyAqCisg KiBJbiBnZW5lcmFsLCB3ZSBjb25zdHJ1Y3QgaWRlbnRpZmllcnMgb2YgdGhlIGZvbGxvd2luZyBm b3JtOgorICoKKyAqIGFsaWFzX25hbWUjb2NjdXJyZW5jZV9udW1iZXIvY2hpbGRfdGFibGVfbmFt ZUBzdWJxdWVyeV9uYW1lCisgKgorICogSG93ZXZlciwgb2NjdXJyZW5jZV9udW1iZXIgaXMgb21p dHRlZCB3aGVuIGl0IGlzIHRoZSBmaXJzdCBvY2N1cnJlbmNlCisgKiB3aXRoaW4gdGhlIHNhbWUg c3VicXVlcnksIGNoaWxkX3RhYmxlX25hbWUgaXMgb21pdHRlZCBmb3IgcmVsYXRpb25zIHRoYXQK KyAqIGFyZSBub3QgY2hpbGQgdGFibGVzLCBhbmQgc3VicXVlcnlfbmFtZSBpcyBvbWl0dGVkIGZv ciB0aGUgdG9wbW9zdAorICogcXVlcnkgbGV2ZWwuIFdoZW5ldmVyIGFuIGl0ZW0gaXMgb21pdHRl ZCwgdGhlIHByZWNlZGluZyBwdW5jdHVhdGlvbiBtYXJrCisgKiBpcyBhbHNvIG9taXR0ZWQuICBJ ZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8gYWxpYXNfbmFtZSBhbmQKKyAq IHN1YnF1ZXJ5X25hbWUuICBJbiBnZW5lcmF0ZWQgYWR2aWNlLCBjaGlsZCB0YWJsZSBuYW1lcyBh cmUgYWx3YXlzCisgKiBzY2hlbWEtcXVhbGlmaWVkLCBidXQgdXNlcnMgY2FuIHN1cHBseSBhZHZp Y2Ugd2hlcmUgdGhlIHNjaGVtYSBuYW1lIGlzCisgKiBub3QgbWVudGlvbmVkLiBJZGVudGlmaWVy LXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8gdGhlIHNjaGVtYSBhbmQgdG8KKyAqIHRoZSBy ZWxhdGlvbiBuYW1lIHNlcGFyYXRlbHkuCisgKgorICogVGhlIHVwc2hvdCBvZiBhbGwgb2YgdGhl c2UgcnVsZXMgaXMgdGhhdCBpbiBzaW1wbGUgY2FzZXMsIHRoZSByZWxhdGlvbgorICogaWRlbnRp ZmllciBpcyB0ZXh0dWFsbHkgaWRlbnRpY2FsIHRvIHRoZSBhbGlhcyBuYW1lLCBtYWtpbmcgbGlm ZSBlYXNpZXIKKyAqIGZvciB1c2Vycy4gSG93ZXZlciwgZXZlbiBpbiBjb21wbGV4IGNhc2VzLCBl dmVyeSByZWxhdGlvbiBpZGVudGlmaWVyCisgKiBmb3IgYSBnaXZlbiBxdWVyeSB3aWxsIGJlIHVu aXF1ZSAob3IgYXQgbGVhc3Qgd2UgaG9wZSBzbzogaWYgbm90LCB0aGlzCisgKiBjb2RlIGlzIGJ1 Z2d5IGFuZCB0aGUgaWRlbnRpZmllciBmb3JtYXQgbWlnaHQgbmVlZCB0byBiZSByZXRob3VnaHQp LgorICoKKyAqIEEga2V5IGdvYWwgb2YgdGhpcyBzeXN0ZW0gaXMgdGhhdCB3ZSB3YW50IHRvIGJl IGFibGUgdG8gcmVjb25zdHJ1Y3QgdGhlCisgKiBzYW1lIGlkZW50aWZpZXJzIGR1cmluZyBhIGZ1 dHVyZSBwbGFubmluZyBjeWNsZSBmb3IgdGhlIHNhbWUgcXVlcnksIHNvCisgKiB0aGF0IGlmIGEg Y2VydGFpbiBiZWhhdmlvciBpcyBzcGVjaWZpZWQgZm9yIGEgY2VydGFpbiBpZGVudGlmaWVyLCB3 ZSBjYW4KKyAqIHByb3Blcmx5IGlkZW50aWZ5IHRoZSBSVEkgZm9yIHdoaWNoIHRoYXQgYmVoYXZp b3IgaXMgbWFuZGF0ZWQuIEluIG9yZGVyCisgKiBmb3IgdGhpcyB0byB3b3JrLCBzdWJxdWVyeSBu YW1lcyBtdXN0IGJlIHVuaXF1ZSBhbmQga25vd24gYmVmb3JlIHRoZQorICogc3VicXVlcnkgaXMg cGxhbm5lZCwgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGlkZW50aWZpZXIgbXVzdCBub3QgZGVw ZW5kCisgKiBvbiBhbnkgcGFydCBvZiB0aGUgcXVlcnkgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBz dWJxdWVyeSBsZXZlbC4gSW4KKyAqIHBhcnRpY3VsYXIsIG9jY3VycmVuY2VfbnVtYmVyIG11c3Qg YmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byB0aGUgcmFuZ2UKKyAqIHRhYmxlIGZvciB0aGUgcmVs ZXZhbnQgc3VicXVlcnksIG5vdCB0aGUgZmluYWwgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLgorICoK KyAqIE5COiBBbGwgb2YgdGhpcyBjb2RlIG11c3QgdXNlIHJ0X2ZldGNoKCksIG5vdCBwbGFubmVy X3J0X2ZldGNoKCkhCisgKiBKb2luIHJlbW92YWwgYW5kIHNlbGYtam9pbiBlbGltaW5hdGlvbiBy ZW1vdmUgcmVscyBmcm9tIHRoZSBhcnJheXMKKyAqIHRoYXQgcGxhbm5lcl9ydF9mZXRjaCgpIHVz ZXM7IHVzaW5nIHJ0X2ZldGNoKCkgaXMgbmVjZXNzYXJ5IHRvIGdldAorICogc3RhYmxlIHJlc3Vs dHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRl bnRpZmllci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgInBhcnNl ci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgorCitzdGF0aWMgSW5kZXggKnBncGFfY3JlYXRlX3RvcF9ydGlfbWFw KEluZGV4IHJ0YWJsZV9sZW5ndGgsIExpc3QgKnJ0YWJsZSwKKwkJCQkJCQkJCSAgTGlzdCAqYXBw aW5mb3MpOworc3RhdGljIGludAlwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwg SW5kZXggKnRvcF9ydGlfbWFwLAorCQkJCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIElu ZGV4IHJ0aSk7CisKKy8qCisgKiBDcmVhdGUgYSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZyb20g c2NyYXRjaC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgY2FsbGVyIHRvIGRvIGFs bCB0aGUgaGVhdnkgbGlmdGluZywgc28gaXQncworICogZ2VuZXJhbGx5IGJldHRlciB0byB1c2Ug b25lIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgaW5zdGVhZC4KKyAqCisgKiBTZWUgdGhlIGZpbGUg aGVhZGVyIGNvbW1lbnRzIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiBhbgorICog aWRlbnRpZmllci4KKyAqLworY29uc3QgY2hhciAqCitwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNv bnN0IHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKworCUFz c2VydChyaWQtPmFsaWFzX25hbWUgIT0gTlVMTCk7CisJcmVzdWx0ID0gcXVvdGVfaWRlbnRpZmll cihyaWQtPmFsaWFzX25hbWUpOworCisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAwKTsKKwlp ZiAocmlkLT5vY2N1cnJlbmNlID4gMSkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVzIyVkIiwgcmVz dWx0LCByaWQtPm9jY3VycmVuY2UpOworCisJaWYgKHJpZC0+cGFydHJlbCAhPSBOVUxMKQorCXsK KwkJaWYgKHJpZC0+cGFydG5zcCA9PSBOVUxMKQorCQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVz IiwgcmVzdWx0LAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRyZWwpKTsKKwkJ ZWxzZQorCQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVzLiVzIiwgcmVzdWx0LAorCQkJCQkJCSAg cXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRuc3ApLAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmll cihyaWQtPnBhcnRyZWwpKTsKKwl9CisKKwlpZiAocmlkLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJ cmVzdWx0ID0gcHNwcmludGYoIiVzQCVzIiwgcmVzdWx0LCBxdW90ZV9pZGVudGlmaWVyKHJpZC0+ cGxhbl9uYW1lKSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ29tcHV0ZSBhIHJl bGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgcGFydGljdWxhciBSVEkuCisgKgorICogVGhlIGNhbGxl ciBwcm92aWRlcyByb290IGFuZCBydGksIGFuZCBnZXRzIHRoZSBuZWNlc3NhcnkgZGV0YWlscyBi YWNrIHZpYQorICogdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzLgorICovCit2b2lkCitwZ3BhX2Nv bXB1dGVfaWRlbnRpZmllcl9ieV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJ CQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJdG9wX3J0aSA9IHJ0aTsK KwlpbnQJCQlvY2N1cnJlbmNlID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGU7CisJUmFuZ2VUYmxF bnRyeSAqdG9wX3J0ZTsKKwljaGFyCSAgICpwYXJ0bnNwID0gTlVMTDsKKwljaGFyCSAgICpwYXJ0 cmVsID0gTlVMTDsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNoaWxkIFJURSwgZmluZCB0aGUg dG9wbW9zdCBwYXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisJICogUlRFX1JFTEFUSU9OLiBX ZSBkbyB0aGlzIGJlY2F1c2Ugd2UgaWRlbnRpZnkgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQKKwkg KiB0YWJsZXMgYnkgdGhlIG5hbWUgb2YgdGhlIGNoaWxkIHRhYmxlLCBidXQgc3VicXVlcmllcyBj YW4gYWxzbyBoYXZlCisJICogY2hpbGQgcmVscyBhbmQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9z ZSBoZXJlLgorCSAqLworCWZvciAoOzspCisJeworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOwor CQlSYW5nZVRibEVudHJ5ICpwYXJlbnRfcnRlOworCisJCS8qIGFwcGVuZF9yZWxfYXJyYXkgY2Fu IGJlIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVuICovCisJCWlmIChyb290LT5hcHBlbmRf cmVsX2FycmF5ID09IE5VTEwgfHwKKwkJCShhcHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJh eVt0b3BfcnRpXSkgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXBhcmVudF9ydGUgPSBydF9mZXRj aChhcHBpbmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QtPnBhcnNlLT5ydGFibGUpOworCQlpZiAocGFy ZW50X3J0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQlicmVhazsKKworCQl0b3BfcnRp ID0gYXBwaW5mby0+cGFyZW50X3JlbGlkOworCX0KKworCS8qIEdldCB0aGUgcmFuZ2UgdGFibGUg ZW50cmllcyBmb3IgdGhlIFJUSSBhbmQgdG9wIFJUSS4gKi8KKwlydGUgPSBydF9mZXRjaChydGks IHJvb3QtPnBhcnNlLT5ydGFibGUpOworCXRvcF9ydGUgPSBydF9mZXRjaCh0b3BfcnRpLCByb290 LT5wYXJzZS0+cnRhYmxlKTsKKwlBc3NlcnQocnRlLT5ydGVraW5kICE9IFJURV9KT0lOKTsKKwlB c3NlcnQodG9wX3J0ZS0+cnRla2luZCAhPSBSVEVfSk9JTik7CisKKwkvKiBXb3JrIG91dCB0aGUg Y29ycmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwlmb3IgKEluZGV4IHByaW9yX3J0aSA9IDE7 IHByaW9yX3J0aSA8IHRvcF9ydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAq cHJpb3JfcnRlOworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCisJCS8qCisJCSAqIElmIHRo aXMgaXMgYSBjaGlsZCByZWwgb2YgYSBwYXJlbnQgdGhhdCBpcyBhIHJlbGF0aW9uLCBza2lwIGl0 LgorCQkgKgorCQkgKiBTdWNoIHJhbmdlIHRhYmxlIGVudHJpZXMgYXJlIGRpc2FtYmlndWF0ZWQg YnkgbWVudGlvbmluZyB0aGUgc2NoZW1hCisJCSAqIGFuZCBuYW1lIG9mIHRoZSB0YWJsZSwgbm90 IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2VwYXJhdGUgb2NjdXJyZW5jZXMKKwkJICogb2YgdGhlIHNh bWUgdGFibGUuCisJCSAqCisJCSAqIE5COiBhcHBlbmRfcmVsX2FycmF5IGNhbiBiZSBOVUxMIGlm IHRoZXJlIGFyZSBubyBjaGlsZHJlbgorCQkgKi8KKwkJaWYgKHJvb3QtPmFwcGVuZF9yZWxfYXJy YXkgIT0gTlVMTCAmJgorCQkJKGFwcGluZm8gPSByb290LT5hcHBlbmRfcmVsX2FycmF5W3ByaW9y X3J0aV0pICE9IE5VTEwpCisJCXsKKwkJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGU7CisKKwkJ CXBhcmVudF9ydGUgPSBydF9mZXRjaChhcHBpbmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QtPnBhcnNl LT5ydGFibGUpOworCQkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKQor CQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2tpcCBOVUxMIGVudHJpZXMgYW5kIGpvaW5zLiAq LworCQlwcmlvcl9ydGUgPSBydF9mZXRjaChwcmlvcl9ydGksIHJvb3QtPnBhcnNlLT5ydGFibGUp OworCQlpZiAocHJpb3JfcnRlID09IE5VTEwgfHwgcHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9K T0lOKQorCQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJz LiAqLworCQlpZiAoc3RyY21wKHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYt PmFsaWFzbmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVl IGR1cGxpY2F0ZS4gKi8KKwkJKytvY2N1cnJlbmNlOworCX0KKworCS8qIElmIHRoaXMgaXMgYSBj aGlsZCB0YWJsZSwgZ2V0IHRoZSBzY2hlbWEgYW5kIHJlbGF0aW9uIG5hbWVzLiAqLworCWlmIChy dGkgIT0gdG9wX3J0aSkKKwl7CisJCXBhcnRuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVt cChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCXBhcnRyZWwgPSBnZXRfcmVsX25h bWUocnRlLT5yZWxpZCk7CisJfQorCisJLyogT0ssIHdlIGhhdmUgYWxsIHRoZSBhbnN3ZXJzIHdl IG5lZWQuIFJldHVybiB0aGVtIHRvIHRoZSBjYWxsZXIuICovCisJcmlkLT5hbGlhc19uYW1lID0g dG9wX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOworCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7 CisJcmlkLT5wYXJ0bnNwID0gcGFydG5zcDsKKwlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCXJp ZC0+cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworfQorCisvKgorICogQ29tcHV0ZSBhIHJl bGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgc2V0IG9mIFJUSXMsIGV4Y2VwdCBmb3IgYW55IFJURV9K T0lOCisgKiBSVElzIHRoYXQgbWF5IGJlIHByZXNlbnQuCisgKgorICogUlRFX0pPSU4gZW50cmll cyBhcmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBtZW50aW9uZWQgYnkgcGxhbgor ICogYWR2aWNlLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBz dXJlIHRoYXQgdGhlIHRrZXlzIGFycmF5IGlzIGxhcmdlCisgKiBlbm91Z2ggdG8gc3RvcmUgdGhl IHJlc3VsdHMuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGlkZW50 aWZpZXJzIGNvbXB1dGVkLgorICovCitpbnQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9y ZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgICBw Z3BhX2lkZW50aWZpZXIgKnJpZHMpCit7CisJaW50CQkJY291bnQgPSAwOworCWludAkJCXJ0aSA9 IC0xOworCisJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAw KQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCByb290LT5wYXJzZS0+ cnRhYmxlKTsKKworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7 CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCBydGksICZyaWRzW2NvdW50 KytdKTsKKwl9CisKKwlBc3NlcnQoY291bnQgPiAwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8q CisgKiBDcmVhdGUgYW4gYXJyYXkgb2YgcmFuZ2UgdGFibGUgaWRlbnRpZmllcnMgZm9yIGFsbCB0 aGUgbm9uLU5VTEwsCisgKiBub24tUlRFX0pPSU4gZW50cmllcyBpbiB0aGUgUGxhbm5lZFN0bXQn cyByYW5nZSB0YWJsZS4KKyAqLworcGdwYV9pZGVudGlmaWVyICoKK3BncGFfY3JlYXRlX2lkZW50 aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KQoreworCUluZGV4CQly dGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSk7CisJcGdwYV9pZGVudGlm aWVyICpyZXN1bHQgPSBwYWxsb2MwX2FycmF5KHBncGFfaWRlbnRpZmllciwgcnRhYmxlX2xlbmd0 aCk7CisJSW5kZXgJICAgKnRvcF9ydGlfbWFwOworCWludAkJCXJ0aW5mb2luZGV4ID0gMDsKKwlT dWJQbGFuUlRJbmZvICpydGluZm8gPSBOVUxMOworCVN1YlBsYW5SVEluZm8gKm5leHRydGluZm8g PSBOVUxMOworCisJLyoKKwkgKiBBY2NvdW50IGZvciByZWxhdGlvbnMgYWRkZWQgYnkgaW5oZXJp dGFuY2UgZXhwYW5zaW9uIG9mIHBhcnRpdGlvbmVkCisJICogdGFibGVzLgorCSAqLworCXRvcF9y dGlfbWFwID0gcGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAocnRhYmxlX2xlbmd0aCwgcHN0bXQtPnJ0 YWJsZSwKKwkJCQkJCQkJCQkgIHBzdG10LT5hcHBlbmRSZWxhdGlvbnMpOworCisJLyoKKwkgKiBX aGVuIHdlIGJlZ2luIGl0ZXJhdGluZywgd2UncmUgcHJvY2Vzc2luZyB0aGUgcG9ydGlvbiBvZiB0 aGUgcmFuZ2UKKwkgKiB0YWJsZSB0aGF0IG9yaWdpbmF0ZWQgZnJvbSB0aGUgdG9wLWxldmVsIFBs YW5uZXJJbmZvLCBzbyBzdWJydGluZm8gaXMKKwkgKiBOVUxMLiBMYXRlciwgc3VicnRpbmZvIHdp bGwgYmUgdGhlIFN1YlBsYW5SVEluZm8gZm9yIHRoZSBzdWJxdWVyeSB3aG9zZQorCSAqIHBvcnRp b24gb2YgdGhlIHJhbmdlIHRhYmxlIHdlIGFyZSBwcm9jZXNzaW5nLiBuZXh0cnRpbmZvIGlzIGFs d2F5cyB0aGUKKwkgKiBTdWJQbGFuUlRJbmZvIHRoYXQgZm9sbG93cyB0aGUgY3VycmVudCBvbmUs IGlmIGFueSwgc28gd2hlbiB3ZSdyZQorCSAqIHByb2Nlc3NpbmcgdGhlIHRvcC1sZXZlbCBxdWVy eSdzIHBvcnRpb24gb2YgdGhlIHJhbmdlIHRhYmxlLCB0aGUgbmV4dAorCSAqIFN1YlBsYW5SVElu Zm8gaXMgdGhlIHZlcnkgZmlyc3Qgb25lLgorCSAqLworCWlmIChwc3RtdC0+c3VicnRpbmZvcyAh PSBOVUxMKQorCQluZXh0cnRpbmZvID0gbGluaXRpYWwocHN0bXQtPnN1YnJ0aW5mb3MpOworCisJ LyogTWFpbiBsb29wIG92ZXIgdGhlIHJhbmdlIHRhYmxlLiAqLworCWZvciAoSW5kZXggcnRpID0g MTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7IHJ0aSsrKQorCXsKKwkJY29uc3QgY2hhciAqcGxhbl9u YW1lOworCQlJbmRleAkJdG9wX3J0aTsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCQlSYW5nZVRi bEVudHJ5ICp0b3BfcnRlOworCQljaGFyCSAgICpwYXJ0bnNwID0gTlVMTDsKKwkJY2hhcgkgICAq cGFydHJlbCA9IE5VTEw7CisJCWludAkJCW9jY3VycmVuY2U7CisJCXBncGFfaWRlbnRpZmllciAq cmlkOworCisJCS8qCisJCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgU3ViUGxhblJUSW5mbywgaWYg aXQncyB0aW1lIHRvIGRvIHRoYXQuCisJCSAqCisJCSAqIFRoaXMgbG9vcCBwcm9iYWJseSBzaG91 bGRuJ3QgZXZlciBpdGVyYXRlIG1vcmUgdGhhbiBvbmNlLCBiZWNhdXNlCisJCSAqIHRoYXQgd291 bGQgaW1wbHkgdGhhdCBhIHN1YnF1ZXJ5IHdhcyBwbGFubmVkIGJ1dCBhZGRlZCBub3RoaW5nIHRv CisJCSAqIHRoZSByYW5nZSB0YWJsZTsgYnV0IGxldCdzIGJlIGRlZmVuc2l2ZSBhbmQgYXNzdW1l IGl0IGNhbiBoYXBwZW4uCisJCSAqLworCQl3aGlsZSAobmV4dHJ0aW5mbyAhPSBOVUxMICYmIHJ0 aSA+IG5leHRydGluZm8tPnJ0b2Zmc2V0KQorCQl7CisJCQlydGluZm8gPSBuZXh0cnRpbmZvOwor CQkJaWYgKCsrcnRpbmZvaW5kZXggPj0gbGlzdF9sZW5ndGgocHN0bXQtPnN1YnJ0aW5mb3MpKQor CQkJCW5leHRydGluZm8gPSBOVUxMOworCQkJZWxzZQorCQkJCW5leHRydGluZm8gPSBsaXN0X250 aChwc3RtdC0+c3VicnRpbmZvcywgcnRpbmZvaW5kZXgpOworCQl9CisKKwkJLyogRmV0Y2ggdGhl IHJhbmdlIHRhYmxlIGVudHJ5LCBpZiBhbnkuICovCisJCXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcHN0 bXQtPnJ0YWJsZSk7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgYW5kIGRvbid0IG5lZWQgdG8gaWRl bnRpZnkgbnVsbCBlbnRyaWVzLCBhbmQgd2UgZG9uJ3Qgd2FudAorCQkgKiB0byBpZGVudGlmeSBq b2luIGVudHJpZXMuCisJCSAqLworCQlpZiAocnRlID09IE5VTEwgfHwgcnRlLT5ydGVraW5kID09 IFJURV9KT0lOKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSBy ZWxhdGlvbiBhZGRlZCBieSBwYXJ0aXRpb25lZCB0YWJsZSBleHBhbnNpb24sCisJCSAqIHRoZW4g dGhlIHRvcCBSVEkvUlRFIGFyZSBqdXN0IHRoZSBzYW1lIGFzIHRoaXMgUlRJL1JURS4gT3RoZXJ3 aXNlLAorCQkgKiB3ZSBuZWVkIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRvcCBSVEkvUlRFLCBh bmQgbXVzdCBhbHNvIGZldGNoCisJCSAqIHRoZSBwYXJ0aXRpb24gc2NoZW1hIGFuZCBuYW1lLgor CQkgKi8KKwkJdG9wX3J0aSA9IHRvcF9ydGlfbWFwW3J0aSAtIDFdOworCQlpZiAocnRpID09IHRv cF9ydGkpCisJCQl0b3BfcnRlID0gcnRlOworCQllbHNlCisJCXsKKwkJCXRvcF9ydGUgPSBydF9m ZXRjaCh0b3BfcnRpLCBwc3RtdC0+cnRhYmxlKTsKKwkJCXBhcnRuc3AgPQorCQkJCWdldF9uYW1l c3BhY2VfbmFtZV9vcl90ZW1wKGdldF9yZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJCXBh cnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5yZWxpZCk7CisJCX0KKworCQkvKiBDb21wdXRlIHRo ZSBjb3JyZWN0IG9jY3VycmVuY2UgbnVtYmVyLiAqLworCQlvY2N1cnJlbmNlID0gcGdwYV9vY2N1 cnJlbmNlX251bWJlcihwc3RtdC0+cnRhYmxlLCB0b3BfcnRpX21hcCwKKwkJCQkJCQkJCQkJcnRp bmZvLCB0b3BfcnRpKTsKKworCQkvKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcGxhbiAo TlVMTCBmb3IgdG9wbGV2ZWwgcXVlcnkpLiAqLworCQlwbGFuX25hbWUgPSBydGluZm8gPT0gTlVM TCA/IE5VTEwgOiBydGluZm8tPnBsYW5fbmFtZTsKKworCQkvKiBTYXZlIGFsbCB0aGUgZGV0YWls cyB3ZSd2ZSBkZXJpdmVkLiAqLworCQlyaWQgPSAmcmVzdWx0W3J0aSAtIDFdOworCQlyaWQtPmFs aWFzX25hbWUgPSB0b3BfcnRlLT5lcmVmLT5hbGlhc25hbWU7CisJCXJpZC0+b2NjdXJyZW5jZSA9 IG9jY3VycmVuY2U7CisJCXJpZC0+cGFydG5zcCA9IHBhcnRuc3A7CisJCXJpZC0+cGFydHJlbCA9 IHBhcnRyZWw7CisJCXJpZC0+cGxhbl9uYW1lID0gcGxhbl9uYW1lOworCX0KKworCXJldHVybiBy ZXN1bHQ7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGEgcGdwYV9pZGVudGlmaWVyIGluIHRoZSBh cnJheSBvZiBpZGVudGlmaWVycyBjb21wdXRlZCBmb3IgdGhlCisgKiByYW5nZSB0YWJsZS4gSWYg ZXhhY3RseSBvbmUgbWF0Y2ggaXMgZm91bmQsIHJldHVybiB0aGUgbWF0Y2hpbmcgUlRJOyBlbHNl CisgKiByZXR1cm4gMC4KKyAqLworSW5kZXgKK3BncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlm aWVyKGludCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVu dGlmaWVycywKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCUluZGV4CQlyZXN1 bHQgPSAwOworCisJZm9yIChJbmRleCBydGkgPSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKyty dGkpCisJeworCQlwZ3BhX2lkZW50aWZpZXIgKnJ0aV9yaWQgPSAmcnRfaWRlbnRpZmllcnNbcnRp IC0gMV07CisKKwkJLyogSWYgdGhlcmUncyBubyBpZGVudGlmaWVyIGZvciB0aGlzIFJUSSwgc2tp cCBpdC4gKi8KKwkJaWYgKHJ0aV9yaWQtPmFsaWFzX25hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVl OworCisJCS8qCisJCSAqIElmIGl0IG1hdGNoZXMsIHJldHVybiB0aGlzIFJUSS4gQXMgdXN1YWws IGFuIG9taXR0ZWQgcGFydGl0aW9uCisJCSAqIHNjaGVtYSBtYXRjaGVzIGFueXRoaW5nLCBidXQg cGFydGl0aW9uIGFuZCBwbGFuIG5hbWVzIG11c3QgZWl0aGVyCisJCSAqIG1hdGNoIGV4YWN0bHkg b3IgYmUgb21pdHRlZCBvbiBib3RoIHNpZGVzLgorCQkgKi8KKwkJaWYgKHN0cmNtcChyaWQtPmFs aWFzX25hbWUsIHJ0aV9yaWQtPmFsaWFzX25hbWUpID09IDAgJiYKKwkJCXJpZC0+b2NjdXJyZW5j ZSA9PSBydGlfcmlkLT5vY2N1cnJlbmNlICYmCisJCQkocmlkLT5wYXJ0bnNwID09IE5VTEwgfHwg cnRpX3JpZC0+cGFydG5zcCA9PSBOVUxMIHx8CisJCQkgc3RyY21wKHJpZC0+cGFydG5zcCwgcnRp X3JpZC0+cGFydG5zcCkgPT0gMCkgJiYKKwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJp ZC0+cGFydHJlbCwgcnRpX3JpZC0+cGFydHJlbCkgJiYKKwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90 aF9udWxsKHJpZC0+cGxhbl9uYW1lLCBydGlfcmlkLT5wbGFuX25hbWUpKQorCQl7CisJCQlpZiAo cmVzdWx0ICE9IDApCisJCQl7CisJCQkJLyogTXVsdGlwbGUgbWF0Y2hlcyB3ZXJlIGZvdW5kLiAq LworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmVzdWx0ID0gcnRpOworCQl9CisJfQorCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIGVhY2ggUlRJIHRv IHRoZSBSVEkgd2hvc2UgYWxpYXNfbmFtZSB3aWxsIGJlIHVzZWQgdG8KKyAqIGNvbnN0cnVjdCB0 aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmllci4KKyAqCisgKiBGb3IgY2hpbGQgcmVsYXRpb25zLCB0 aGlzIGlzIHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0aWxsIG9mIHR5cGUKKyAqIFJURV9S RUxBVElPTi4gRm9yIG90aGVyIHJlbGF0aW9ucywgaXQncyBqdXN0IHRoZSBvcmlnaW5hbCBSVEku CisgKgorICogU2luY2Ugd2UncmUgZXZlbnR1YWxseSBnb2luZyB0byBuZWVkIHRoaXMgaW5mb3Jt YXRpb24gZm9yIGV2ZXJ5IFJUSSBpbgorICogdGhlIHJhbmdlIHRhYmxlLCBpdCdzIGJlc3QgdG8g Y29tcHV0ZSBhbGwgdGhlIGFuc3dlcnMgaW4gYSBzaW5nbGUgcGFzcyBvdmVyCisgKiB0aGUgQXBw ZW5kUmVsSW5mbyBsaXN0LiBPdGhlcndpc2UsIHdlIG1pZ2h0IGVuZCB1cCBzZWFyY2hpbmcgdGhy b3VnaCB0aGF0CisgKiBsaXN0IHJlcGVhdGVkbHkgZm9yIGVudHJpZXMgb2YgaW50ZXJlc3QuCisg KgorICogTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBhcnJheSBpcyB1c2VzIHplcm8tYmFzZWQgaW5k ZXhpbmcsIHdoaWxlIFJUSXMgdXNlCisgKiAxLWJhc2VkIGluZGV4aW5nLCBzbyBzdWJ0cmFjdCAx IGZyb20gdGhlIFJUSSBiZWZvcmUgbG9va2luZyBpdCB1cCBpbiB0aGUKKyAqIGFycmF5LgorICov CitzdGF0aWMgSW5kZXggKgorcGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xl bmd0aCwgTGlzdCAqcnRhYmxlLCBMaXN0ICphcHBpbmZvcykKK3sKKwlJbmRleAkgICAqdG9wX3J0 aV9tYXAgPSBwYWxsb2MwX2FycmF5KEluZGV4LCBydGFibGVfbGVuZ3RoKTsKKworCS8qIEluaXRp YWxseSwgbWFrZSBldmVyeSBSVEkgcG9pbnQgdG8gaXRzZWxmLiAqLworCWZvciAoSW5kZXggcnRp ID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRpKQorCQl0b3BfcnRpX21hcFtydGkgLSAx XSA9IHJ0aTsKKworCS8qIFVwZGF0ZSB0aGUgbWFwIGZvciBlYWNoIEFwcGVuZFJlbEluZm8gb2Jq ZWN0LiAqLworCWZvcmVhY2hfbm9kZShBcHBlbmRSZWxJbmZvLCBhcHBpbmZvLCBhcHBpbmZvcykK Kwl7CisJCUluZGV4CQlwYXJlbnRfcnRpID0gYXBwaW5mby0+cGFyZW50X3JlbGlkOworCQlSYW5n ZVRibEVudHJ5ICpwYXJlbnRfcnRlID0gcnRfZmV0Y2gocGFyZW50X3J0aSwgcnRhYmxlKTsKKwor CQkvKiBJZiB0aGUgcGFyZW50IGlzIG5vdCBSVEVfUkVMQVRJT04sIGlnbm9yZSB0aGlzIGVudHJ5 LiAqLworCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQljb250 aW51ZTsKKworCQkvKgorCQkgKiBNYXAgdGhlIGNoaWxkIHRvIHdoZXJldmVyIHdlIG1hcHBlZCB0 aGUgcGFyZW50LiBQYXJlbnRzIGFsd2F5cworCQkgKiBwcmVjZWRlIHRoZWlyIGNoaWxkcmVuIGlu IHRoZSBBcHBlbmRSZWxJbmZvIGxpc3QsIHNvIHRoaXMgc2hvdWxkCisJCSAqIHdvcmsgb3V0Lgor CQkgKi8KKwkJdG9wX3J0aV9tYXBbYXBwaW5mby0+Y2hpbGRfcmVsaWQgLSAxXSA9IHRvcF9ydGlf bWFwW3BhcmVudF9ydGkgLSAxXTsKKwl9CisKKwlyZXR1cm4gdG9wX3J0aV9tYXA7Cit9CisKKy8q CisgKiBGaW5kIHRoZSBvY2N1cnJlbmNlIG51bWJlciBvZiBhIGNlcnRhaW4gcmVsYXRpb24gd2l0 aGluIGEgY2VydGFpbiBzdWJxdWVyeS4KKyAqCisgKiBUaGUgc2FtZSBhbGlhcyBuYW1lIGNhbiBv Y2N1ciBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gYSBzdWJxdWVyeSwgYnV0IHdlIHdhbnQKKyAqIHRv IGRpc2FtYmlndWF0ZSBieSBnaXZpbmcgZGlmZmVyZW50IG9jY3VycmVuY2VzIGRpZmZlcmVudCBp bnRlZ2VyIGluZGV4ZXMuCisgKiBIb3dldmVyLCBjaGlsZCB0YWJsZXMgYXJlIGRpc2FtYmlndWF0 ZWQgYnkgaW5jbHVkaW5nIHRoZSB0YWJsZSBuYW1lIHJhdGhlcgorICogdGhhbiBieSBpbmNyZW1l bnRpbmcgdGhlIG9jY3VycmVuY2UgbnVtYmVyOyBhbmQgam9pbnMgYXJlIG5vdCBuYW1lZCBhbmQg c28KKyAqIHNob3VsZG4ndCBpbmNyZW1lbnQgdGhlIG9jY3VycmVuY2UgbnVtYmVyIGVpdGhlci4K KyAqLworc3RhdGljIGludAorcGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUsIElu ZGV4ICp0b3BfcnRpX21hcCwKKwkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJbmRleCBy dGkpCit7CisJSW5kZXgJCXJ0b2Zmc2V0ID0gKHJ0aW5mbyA9PSBOVUxMKSA/IDAgOiBydGluZm8t PnJ0b2Zmc2V0OworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdlVGJsRW50cnkgKnJ0ZSA9 IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCWZvciAoSW5kZXggcHJpb3JfcnRpID0gcnRvZmZz ZXQgKyAxOyBwcmlvcl9ydGkgPCBydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJUmFuZ2VUYmxFbnRy eSAqcHJpb3JfcnRlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBw YXJlbnQgdGhhdCBpcyBhIHJlbGF0aW9uLCBza2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdl IHRhYmxlIGVudHJpZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1h CisJCSAqIGFuZCBuYW1lIG9mIHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2Vw YXJhdGUgb2NjdXJyZW5jZXMKKwkJICogb2YgdGhlIHNhbWUgdGFibGUuCisJCSAqLworCQlpZiAo dG9wX3J0aV9tYXBbcHJpb3JfcnRpIC0gMV0gIT0gcHJpb3JfcnRpKQorCQkJY29udGludWU7CisK KwkJLyogU2tpcCBqb2lucy4gKi8KKwkJcHJpb3JfcnRlID0gcnRfZmV0Y2gocHJpb3JfcnRpLCBy dGFibGUpOworCQlpZiAocHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGlu dWU7CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlpZiAoc3Ry Y21wKHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFtZSkgIT0g MCkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0ZS4gKi8K KwkJKytvY2N1cnJlbmNlOworCX0KKworCXJldHVybiBvY2N1cnJlbmNlOworfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjM5M2E4M2RjNzhjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaApAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ3BhX2lkZW50aWZpZXIuaAorICoJICBjcmVhdGUgYXBwcm9wcmlh dGUgaWRlbnRpZmllcnMgZm9yIHJhbmdlIHRhYmxlIGVudHJpZXMKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIFBHUEFfSURFTlRJRklFUl9ICisjZGVmaW5lIFBH UEFfSURFTlRJRklFUl9ICisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRl ICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9pZGVudGlmaWVyCit7 CisJY29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwlpbnQJCQlvY2N1cnJlbmNlOworCWNvbnN0IGNo YXIgKnBhcnRuc3A7CisJY29uc3QgY2hhciAqcGFydHJlbDsKKwljb25zdCBjaGFyICpwbGFuX25h bWU7Cit9IHBncGFfaWRlbnRpZmllcjsKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNv bXBhcmluZyBwb3NzaWJseS1OVUxMIHN0cmluZ3MuICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3N0 cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7 CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAoYSA9PSBOVUxMIHx8IGIg PT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChhLCBiKSA9 PSAwOworfQorCitleHRlcm4gY29uc3QgY2hhciAqcGdwYV9pZGVudGlmaWVyX3N0cmluZyhjb25z dCBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gdm9pZCBwZ3BhX2NvbXB1dGVfaWRlbnRp Zmllcl9ieV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkJCQkgICBw Z3BhX2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gaW50CXBncGFfY29tcHV0ZV9pZGVudGlmaWVy c19ieV9yZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAq cmVsaWRzLAorCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMpOworZXh0ZXJuIHBn cGFfaWRlbnRpZmllciAqcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChQ bGFubmVkU3RtdCAqcHN0bXQpOworCitleHRlcm4gSW5kZXggcGdwYV9jb21wdXRlX3J0aV9mcm9t X2lkZW50aWZpZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4u YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ2MTBkMDIzNTZmCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpAQCAtMCwwICsxLDYzOCBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9qb2luLmMKKyAqCSAgYW5hbHlzaXMgb2Ygam9pbnMg aW4gUGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2pvaW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2Fu LmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rl cy5oIgorI2luY2x1ZGUgIm5vZGVzL3ByaW50LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJl ZS5oIgorCisvKgorICogVGVtcG9yYXJ5IG9iamVjdCB1c2VkIHdoZW4gdW5yb2xsaW5nIGEgam9p biB0cmVlLgorICovCitzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyCit7CisJdW5zaWduZWQJbmFs bG9jYXRlZDsKKwl1bnNpZ25lZAludXNlZDsKKwlQbGFuCSAgICpvdXRlcl9zdWJwbGFuOworCUVs aWRlZE5vZGUgKm91dGVyX2VsaWRlZF9ub2RlOworCWJvb2wJCW91dGVyX2JlbmVhdGhfYW55X2dh dGhlcjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCVBsYW4JICAqKmlubmVyX3N1 YnBsYW5zOworCUVsaWRlZE5vZGUgKippbm5lcl9lbGlkZWRfbm9kZXM7CisJcGdwYV9qb2luX3Vu cm9sbGVyICoqaW5uZXJfdW5yb2xsZXJzOworCWJvb2wJICAgKmlubmVyX2JlbmVhdGhfYW55X2dh dGhlcjsKK307CisKK3N0YXRpYyBwZ3BhX2pvaW5fc3RyYXRlZ3kgcGdwYV9kZWNvbXBvc2Vfam9p bihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJICBQbGFuICpw bGFuLAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsb3V0ZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAq KnJlYWxpbm5lciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVyLAor CQkJCQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsaW5uZXIsCisJCQkJCQkJCQkJCSAg Ym9vbCAqZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJCQkJCQkJICBib29sICpmb3VuZF9h bnlfaW5uZXJfZ2F0aGVyKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3BhX2Rlc2NlbmRfbm9kZShQ bGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3Bh X2Rlc2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJ CQkJCQkJCSAgIGJvb2wgKmZvdW5kX2FueV9nYXRoZXIpOworc3RhdGljIGJvb2wgcGdwYV9kZXNj ZW5kX2FueV91bmlxdWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJ CUVsaWRlZE5vZGUgKiplbGlkZWRfbm9kZSk7CisKK3N0YXRpYyBib29sIGlzX3Jlc3VsdF9ub2Rl X3dpdGhfY2hpbGQoUGxhbiAqcGxhbik7CitzdGF0aWMgYm9vbCBpc19zb3J0aW5nX3BsYW4oUGxh biAqcGxhbik7CisKKy8qCisgKiBDcmVhdGUgYW4gaW5pdGlhbGx5LWVtcHR5IG9iamVjdCBmb3Ig dW5yb2xsaW5nIGpvaW5zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGhlbHBlciBv YmplY3QgdGhhdCBjYW4gbGF0ZXIgYmUgdXNlZCB0byBjcmVhdGUgYQorICogcGdwYV91bnJvbGxl ZF9qb2luLCBhZnRlciBmaXJzdCBjYWxsaW5nIHBncGFfdW5yb2xsX2pvaW4gb25lIG9yIG1vcmUg dGltZXMuCisgKi8KK3BncGFfam9pbl91bnJvbGxlciAqCitwZ3BhX2NyZWF0ZV9qb2luX3Vucm9s bGVyKHZvaWQpCit7CisJcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyOworCisJam9p bl91bnJvbGxlciA9IHBhbGxvYzBfb2JqZWN0KHBncGFfam9pbl91bnJvbGxlcik7CisJam9pbl91 bnJvbGxlci0+bmFsbG9jYXRlZCA9IDQ7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQlw YWxsb2NfYXJyYXkocGdwYV9qb2luX3N0cmF0ZWd5LCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVk KTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCXBhbGxvY19hcnJheShQbGFu ICosIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2Vs aWRlZF9ub2RlcyA9CisJCXBhbGxvY19hcnJheShFbGlkZWROb2RlICosIGpvaW5fdW5yb2xsZXIt Pm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCXBhbGxv Y19hcnJheShwZ3BhX2pvaW5fdW5yb2xsZXIgKiwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7 CisJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJcGFsbG9jX2Fy cmF5KGJvb2wsIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCisJcmV0dXJuIGpvaW5fdW5y b2xsZXI7Cit9CisKKy8qCisgKiBVbnJvbGwgb25lIGxldmVsIG9mIGFuIHVucm9sbGFibGUgam9p biB0cmVlLgorICoKKyAqIE91ciBiYXNpYyBnb2FsIGhlcmUgaXMgdG8gdW5yb2xsIGpvaW4gdHJl ZXMgYXMgdGhleSBvY2N1ciBpbiB0aGUgUGxhbgorICogdHJlZSBpbnRvIGEgc2ltcGxlciBhbmQg bW9yZSByZWd1bGFyIHN0cnVjdHVyZSB0aGF0IHdlIGNhbiBtb3JlIGVhc2lseQorICogdXNlIGZv ciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFVucm9sbGluZyBpcyBvdXRlci1kZWVwLCBzbyBpZiB0aGUg cGxhbiB0cmVlCisgKiBoYXMgSm9pbjEoSm9pbjIoQSxCKSxKb2luMyhDLEQpKSwgdGhlIHNhbWUg am9pbiB1bnJvbGxlciBvYmplY3Qgc2hvdWxkIGJlCisgKiB1c2VkIGZvciBKb2luMSBhbmQgSm9p bjIsIGJ1dCBhIGRpZmZlcmVudCBvbmUgd2lsbCBiZSBuZWVkZWQgZm9yIEpvaW4zLAorICogc2lu Y2UgdGhhdCBpbnZvbHZlcyBhIGpvaW4gd2l0aGluIHRoZSAqaW5uZXIqIHNpZGUgb2YgYW5vdGhl ciBqb2luLgorICoKKyAqIHBncGFfcGxhbl93YWxrZXIgY3JlYXRlcyBhICJ0b3AgbGV2ZWwiIGpv aW4gdW5yb2xsZXIgb2JqZWN0IHdoZW4gaXQKKyAqIGVuY291bnRlcnMgYSBqb2luIGluIGEgcG9y dGlvbiBvZiB0aGUgcGxhbiB0cmVlIGluIHdoaWNoIG5vIGpvaW4gdW5yb2xsZXIKKyAqIGlzIGFs cmVhZHkgYWN0aXZlLiBGcm9tIHRoZXJlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZv ciBkZXRlcm1pbmcKKyAqIHRvIHdoYXQgcG9ydGlvbiBvZiB0aGUgcGxhbiB0cmVlIHRoYXQgam9p biB1bnJvbGxlciBhcHBsaWVzLCBhbmQgZm9yCisgKiBjcmVhdGluZyBhbnkgc3Vib3JkaW5hdGUg am9pbiB1bnJvbGxlciBvYmplY3RzIHRoYXQgYXJlIG5lZWRlZCBhcyBhIHJlc3VsdAorICogb2Yg bm9uLW91dGVyLWRlZXAgam9pbiB0cmVlcy4gV2UgZG8gdGhpcyBieSByZXR1cm5pbmcgdGhlIGpv aW4gdW5yb2xsZXIKKyAqIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgZnVydGhlciB0 cmF2ZXJzYWwgb2YgdGhlIG91dGVyIGFuZCBpbm5lcgorICogc3VidHJlZXMgb2YgdGhlIGN1cnJl bnQgcGxhbiBub2RlIHZpYSAqb3V0ZXJfam9pbl91bnJvbGxlciBhbmQKKyAqICppbm5lcl9qb2lu X3Vucm9sbGVyLCByZXNwZWN0aXZlbHkuCisgKi8KK3ZvaWQKK3BncGFfdW5yb2xsX2pvaW4ocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJIGJvb2wgYmVu ZWF0aF9hbnlfZ2F0aGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIs CisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKm91dGVyX2pvaW5fdW5yb2xsZXIsCisJCQkJIHBn cGFfam9pbl91bnJvbGxlciAqKmlubmVyX2pvaW5fdW5yb2xsZXIpCit7CisJcGdwYV9qb2luX3N0 cmF0ZWd5IHN0cmF0ZWd5OworCVBsYW4JICAgKnJlYWxpbm5lciwKKwkJCSAgICpyZWFsb3V0ZXI7 CisJRWxpZGVkTm9kZSAqZWxpZGVkaW5uZXIsCisJCQkgICAqZWxpZGVkb3V0ZXI7CisJaW50CQkJ bjsKKwlib29sCQlmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyID0gZmFsc2U7CisJYm9vbAkJZm91bmRf YW55X2lubmVyX2dhdGhlciA9IGZhbHNlOworCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXIgIT0gTlVM TCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcGFzcyB0aGUgam9pbl91bnJvbGxlciBvYmplY3Qg ZG93biB0aHJvdWdoIGNlcnRhaW4gdHlwZXMgb2YKKwkgKiBwbGFuIG5vZGVzIC0tIGFueXRoaW5n IHRoYXQncyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3ksIGFuZAorCSAqIGFu eSBvdGhlciBub2RlcyB0aGF0IGNhbiBvY2N1ciBpbiBhIGpvaW4gdHJlZSBkZXNwaXRlIG5vdCBi ZWluZyBzY2FucworCSAqIG9yIGpvaW5zLgorCSAqCisJICogVGhpcyBpbmNsdWRlczoKKwkgKgor CSAqICgxKSBNYXRlcmlhbGl6ZSwgTWVtb2l6ZSwgYW5kIEhhc2ggbm9kZXMsIHdoaWNoIGFyZSBw YXJ0IG9mIHRoZSBqb2luCisJICogc3RyYXRlZ3ksCisJICoKKwkgKiAoMikgR2F0aGVyIGFuZCBH YXRoZXIgTWVyZ2Ugbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciBhdCBhbnkgcG9pbnQgaW4gdGhlCisJ ICogam9pbiB0cmVlIHdoZXJlIHRoZSBwbGFubmVyIGRlY2lkZWQgdG8gaW5pdGlhdGUgcGFyYWxs ZWxpc20sCisJICoKKwkgKiAoMykgU29ydCBhbmQgSW5jcmVtZW50YWxTb3J0IG5vZGVzLCB3aGlj aCBjYW4gb2NjdXIgYmVuZWF0aCBNZXJnZUpvaW4KKwkgKiBvciBHYXRoZXJNZXJnZSwKKwkgKgor CSAqICg0KSBBZ2cgYW5kIFVuaXF1ZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIHdoZW4gd2UgZGVj aWRlIHRvIG1ha2UgdGhlCisJICogbnVsbGFibGUgc2lkZSBvZiBhIHNlbWlqb2luIHVuaXF1ZSBh bmQgdGhlbiBqb2luIHRoZSByZXN1bHQsIGFuZAorCSAqCisJICogKDUpIFJlc3VsdCBub2RlcyB3 aXRoIGNoaWxkcmVuLCB3aGljaCBjYW4gYmUgYWRkZWQgZWl0aGVyIHRvIHByb2plY3QgdG8KKwkg KiBlbmZvcmNlIGEgb25lLXRpbWUgZmlsdGVyIChidXQgUmVzdWx0IG5vZGVzIHdpdGhvdXQgY2hp bGRyZW4gYXJlCisJICogZGVnZW5lcmF0ZSBzY2FucyBvciBqb2lucykuCisJICovCisJaWYgKElz QShwbGFuLCBNYXRlcmlhbCkgfHwgSXNBKHBsYW4sIE1lbW9pemUpIHx8IElzQShwbGFuLCBIYXNo KQorCQl8fCBJc0EocGxhbiwgR2F0aGVyKSB8fCBJc0EocGxhbiwgR2F0aGVyTWVyZ2UpCisJCXx8 IGlzX3NvcnRpbmdfcGxhbihwbGFuKSB8fCBJc0EocGxhbiwgQWdnKSB8fCBJc0EocGxhbiwgVW5p cXVlKQorCQl8fCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKHBsYW4pKQorCXsKKwkJKm91dGVy X2pvaW5fdW5yb2xsZXIgPSBqb2luX3Vucm9sbGVyOworCQlyZXR1cm47CisJfQorCisJLyoKKwkg KiBTaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgbm9kZXMgdGhhdCByZXF1aXJlIHBhc3MtdGhy b3VnaCB0cmVhdG1lbnQsCisJICogdGhpcyBzaG91bGQgYmUgYW4gdW5yb2xsYWJsZSBqb2luLgor CSAqLworCXN0cmF0ZWd5ID0gcGdwYV9kZWNvbXBvc2Vfam9pbih3YWxrZXIsIHBsYW4sCisJCQkJ CQkJCSAgICZyZWFsb3V0ZXIsICZyZWFsaW5uZXIsCisJCQkJCQkJCSAgICZlbGlkZWRvdXRlciwg JmVsaWRlZGlubmVyLAorCQkJCQkJCQkgICAmZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJ CQkJICAgJmZvdW5kX2FueV9pbm5lcl9nYXRoZXIpOworCisJLyogSWYgb3VyIHdvcmtzcGFjZSBp cyBmdWxsLCBleHBhbmQgaXQuICovCisJaWYgKGpvaW5fdW5yb2xsZXItPm51c2VkID49IGpvaW5f dW5yb2xsZXItPm5hbGxvY2F0ZWQpCisJeworCQlqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkICo9 IDI7CisJCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5f dW5yb2xsZXItPnN0cmF0ZWd5LAorCQkJCQkJICAgcGdwYV9qb2luX3N0cmF0ZWd5LAorCQkJCQkJ ICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1 YnBsYW5zID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5z LAorCQkJCQkJICAgUGxhbiAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7 CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcyA9CisJCQlyZXBhbGxvY19hcnJh eShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMsCisJCQkJCQkgICBFbGlkZWROb2Rl ICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxl ci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5y b2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCSAgIGJvb2wsCisJCQkJCQkg ICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfdW5y b2xsZXJzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVy cywKKwkJCQkJCSAgIHBncGFfam9pbl91bnJvbGxlciAqLAorCQkJCQkJICAgam9pbl91bnJvbGxl ci0+bmFsbG9jYXRlZCk7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSdyZSBmbGF0dGVuaW5nIG91 dGVyLWRlZXAgam9pbiB0cmVlcywgaXQgZm9sbG93cyB0aGF0IGlmIHRoZQorCSAqIG91dGVyIHNp ZGUgaXMgc3RpbGwgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50 byB0aGlzCisJICogc2FtZSBvYmplY3QuIE90aGVyd2lzZSwgd2UndmUgcmVhY2hlZCB0aGUgbGlt aXQgb2Ygd2hhdCB3ZSBjYW4gdW5yb2xsCisJICogaW50byB0aGlzIG9iamVjdCBhbmQgbXVzdCBy ZW1lbWJlciB0aGUgb3V0ZXIgc2lkZSBhcyB0aGUgZmluYWwgb3V0ZXIKKwkgKiBzdWJwbGFuLgor CSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsb3V0ZXIp KQorCQkqb3V0ZXJfam9pbl91bnJvbGxlciA9IGpvaW5fdW5yb2xsZXI7CisJZWxzZQorCXsKKwkJ am9pbl91bnJvbGxlci0+b3V0ZXJfc3VicGxhbiA9IHJlYWxvdXRlcjsKKwkJam9pbl91bnJvbGxl ci0+b3V0ZXJfZWxpZGVkX25vZGUgPSBlbGlkZWRvdXRlcjsKKwkJam9pbl91bnJvbGxlci0+b3V0 ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCWJlbmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9h bnlfb3V0ZXJfZ2F0aGVyOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIGlubmVyIHN1YnBsYW4u IElmIGl0J3MgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBuZWVkcyB0byBiZQorCSAqIGZsYXR0ZW5l ZCBpbiB0dXJuLCBidXQgaW50byBhIG5ldyB1bnJvbGxlciBvYmplY3QsIG5vdCB0aGlzIG9uZS4K KwkgKi8KKwluID0gam9pbl91bnJvbGxlci0+bnVzZWQrKzsKKwlqb2luX3Vucm9sbGVyLT5zdHJh dGVneVtuXSA9IHN0cmF0ZWd5OworCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW25dID0g cmVhbGlubmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlc1tuXSA9IGVsaWRl ZGlubmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcltuXSA9CisJ CWJlbmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyOworCWlmIChlbGlk ZWRpbm5lciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsaW5uZXIpKQorCQkqaW5uZXJfam9p bl91bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwllbHNlCisJCSppbm5l cl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNb bl0gPSAqaW5uZXJfam9pbl91bnJvbGxlcjsKK30KKworLyoKKyAqIFVzZSB0aGUgZGF0YSB3ZSd2 ZSBhY2N1bXVsYXRlZCBpbiBhIHBncGFfam9pbl91bnJvbGxlciBvYmplY3QgdG8gY29uc3RydWN0 CisgKiBhIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqLworcGdwYV91bnJvbGxlZF9qb2luICoKK3Bn cGFfYnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJcGdwYV91bnJv bGxlZF9qb2luICp1am9pbjsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBXZSBzaG91bGRuJ3QgaGF2 ZSBnb25lIGV2ZW4gc28gZmFyIGFzIHRvIGNyZWF0ZSBhIGpvaW4gdW5yb2xsZXIgdW5sZXNzCisJ ICogd2UgZm91bmQgYXQgbGVhc3Qgb25lIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlBc3NlcnQo am9pbl91bnJvbGxlci0+bnVzZWQgPiAwKTsKKworCS8qIEFsbG9jYXRlIHJlc3VsdCBzdHJ1Y3R1 cmVzLiAqLworCXVqb2luID0gcGFsbG9jMF9vYmplY3QocGdwYV91bnJvbGxlZF9qb2luKTsKKwl1 am9pbi0+bmlubmVyID0gam9pbl91bnJvbGxlci0+bnVzZWQ7CisJdWpvaW4tPnN0cmF0ZWd5ID0g cGFsbG9jMF9hcnJheShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm51c2VkKTsK Kwl1am9pbi0+aW5uZXIgPSBwYWxsb2MwX2FycmF5KHBncGFfam9pbl9tZW1iZXIsIGpvaW5fdW5y b2xsZXItPm51c2VkKTsKKworCS8qIEhhbmRsZSB0aGUgb3V0ZXJtb3N0IGpvaW4uICovCisJdWpv aW4tPm91dGVyLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5vdXRlcl9zdWJwbGFuOworCXVqb2luLT5v dXRlci5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2RlOworCXVq b2luLT5vdXRlci5zY2FuID0KKwkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgdWpvaW4tPm91dGVy LnBsYW4sCisJCQkJCQl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUsCisJCQkJCQlqb2luX3Vucm9s bGVyLT5vdXRlcl9iZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQl0cnVlKTsKKworCS8qCisJICog V2Ugd2FudCB0aGUgam9pbnMgZnJvbSB0aGUgZGVlcGVzdCBwYXJ0IG9mIHRoZSBwbGFuIHRyZWUg dG8gYXBwZWFyCisJICogZmlyc3QgaW4gdGhlIHJlc3VsdCBvYmplY3QsIGJ1dCB0aGUgam9pbiB1 bnJvbGxlciBhZGRzIHRoZW0gaW4gZXhhY3RseQorCSAqIHRoZSByZXZlcnNlIG9mIHRoYXQgb3Jk ZXIsIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgb3JkZXIgb2YgdGhlIGFycmF5cworCSAqIHdoZW4g Y29uc3RydWN0aW5nIHRoZSBmaW5hbCByZXN1bHQuCisJICovCisJZm9yIChpID0gMDsgaSA8IGpv aW5fdW5yb2xsZXItPm51c2VkOyArK2kpCisJeworCQlpbnQJCQlrID0gam9pbl91bnJvbGxlci0+ bnVzZWQgLSBpIC0gMTsKKworCQkvKiBDb3B5IHN0cmF0ZWd5LCBQbGFuLCBhbmQgRWxpZGVkTm9k ZS4gKi8KKwkJdWpvaW4tPnN0cmF0ZWd5W2ldID0gam9pbl91bnJvbGxlci0+c3RyYXRlZ3lba107 CisJCXVqb2luLT5pbm5lcltpXS5wbGFuID0gam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNb a107CisJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPmlubmVy X2VsaWRlZF9ub2Rlc1trXTsKKworCQkvKgorCQkgKiBGaWxsIGluIHJlbWFpbmluZyBkZXRhaWxz LCB1c2luZyBlaXRoZXIgdGhlIG5lc3RlZCBqb2luIHVucm9sbGVyLAorCQkgKiBvciBieSBkZXJp dmluZyB0aGVtIGZyb20gdGhlIHBsYW4gYW5kIGVsaWRlZCBub2Rlcy4KKwkJICovCisJCWlmIChq b2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10gIT0gTlVMTCkKKwkJCXVqb2luLT5pbm5l cltpXS51bnJvbGxlZF9qb2luID0KKwkJCQlwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2Vy LAorCQkJCQkJCQkJCSBqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10pOworCQllbHNl CisJCQl1am9pbi0+aW5uZXJbaV0uc2NhbiA9CisJCQkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwg dWpvaW4tPmlubmVyW2ldLnBsYW4sCisJCQkJCQkJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9k ZSwKKwkJCQkJCQkJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW2tdLAor CQkJCQkJCQl0cnVlKTsKKwl9CisKKwlyZXR1cm4gdWpvaW47Cit9CisKKy8qCisgKiBGcmVlIG1l bW9yeSBhbGxvY2F0ZWQgZm9yIHBncGFfam9pbl91bnJvbGxlci4KKyAqLwordm9pZAorcGdwYV9k ZXN0cm95X2pvaW5fdW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKQor eworCXBmcmVlKGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5KTsKKwlwZnJlZShqb2luX3Vucm9sbGVy LT5pbm5lcl9zdWJwbGFucyk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25v ZGVzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMpOworCXBmcmVlKGpv aW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcik7CisJcGZyZWUoam9pbl91bnJv bGxlcik7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgam9pbiBzdHJhdGVneSB1c2VkIGJ5IGEg am9pbiBhbmQgdGhlICJyZWFsIiBpbm5lciBhbmQgb3V0ZXIKKyAqIHBsYW5zLgorICoKKyAqIEZv ciBleGFtcGxlLCBhIEhhc2ggSm9pbiBhbHdheXMgaGFzIGEgSGFzaCBub2RlIG9uIHRoZSBpbm5l ciBzaWRlLCBidXQKKyAqIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgdGhlIHJlYWwgaW5u ZXIgaW5wdXQgaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLAorICogbm90IHRoZSBIYXNoIG5vZGUg aXRzZWxmLgorICoKKyAqIExpa2V3aXNlLCBhIE1lcmdlIEpvaW4gbWF5IGhhdmUgU29ydCBub2Rl IG9uIHRoZSBpbm5lciBvciBvdXRlciBzaWRlOyBpZgorICogaXQgZG9lcywgdGhlIHJlYWwgaW5w dXQgdG8gdGhlIGpvaW4gaXMgdGhlIFNvcnQgbm9kZSdzIGNoaWxkLCBub3QgdGhlCisgKiBTb3J0 IG5vZGUgaXRzZWxmLgorICoKKyAqIEluIGFkZGl0aW9uLCB3aXRoIGEgTWVyZ2UgSm9pbiBvciBh IE5lc3RlZCBMb29wLCB0aGUgam9pbiBwbGFubmluZyBjb2RlCisgKiBtYXkgYWRkIGFkZGl0aW9u YWwgbm9kZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBvciBNZW1vaXplLiBXZSByZWdhcmQgdGhlc2UK KyAqIGFzIGFuIGFzcGVjdCBvZiB0aGUgam9pbiBzdHJhdGVneS4gQXMgaW4gdGhlIHByZXZpb3Vz IGNhc2VzLCB0aGUgdHJ1ZSBpbnB1dAorICogdG8gdGhlIGpvaW4gaXMgdGhlIHVuZGVybHlpbmcg bm9kZS4KKyAqCisgKiBIb3dldmVyLCBpZiBhbnkgaW52b2x2ZWQgY2hpbGQgbm9kZSBwcmV2aW91 c2x5IGhhZCBhIG5vdy1lbGlkZWQgbm9kZSBzdGFja2VkCisgKiBvbiB0b3AsIHRoZW4gd2UgY2Fu J3QgImxvb2sgdGhyb3VnaCIgdGhhdCBub2RlIC0tIGluZGVlZCwgd2hhdCdzIGdvaW5nIHRvIGJl CisgKiByZWxldmFudCBmb3Igb3VyIHB1cnBvc2VzIGlzIHRoZSBFbGlkZWROb2RlIG9uIHRvcCBv ZiB0aGF0IHBsYW4gbm9kZSwgcmF0aGVyCisgKiB0aGFuIHRoZSBwbGFuIG5vZGUgaXRzZWxmLgor ICoKKyAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGlkZWQgbm9kZXMsIHdlIHdhbnQgdGhhdCBv bmUgdGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAqIHVwcGVybW9zdCBpbiB0aGUgcGxhbiB0cmVlIHBy aW9yIHRvIHNldHJlZnMgcHJvY2Vzc2luZzsgd2UgZXhwZWN0IHRvIGZpbmQKKyAqIHRoYXQgb25l IGxhc3QgaW4gdGhlIGxpc3Qgb2YgZWxpZGVkIG5vZGVzLgorICoKKyAqIE9uIHJldHVybiAqcmVh bG91dGVyIGFuZCAqcmVhbGlubmVyIHdpbGwgaGF2ZSBiZWVuIHNldCB0byB0aGUgcmVhbCBpbm5l cgorICogYW5kIHJlYWwgb3V0ZXIgcGxhbnMgdGhhdCB3ZSBpZGVudGlmaWVkLCBhbmQgKmVsaWRl ZHJlYWxvdXRlciBhbmQKKyAqICplbGlkZWRyZWFsaW5uZXIgdG8gdGhlIGxhc3Qgb2YgYW55IGNv cnJlc3BvbmRpbmcgZWxpZGVkIG5vZGVzLgorICogQWRkaXRpb25hbGx5LCAqZm91bmRfYW55X291 dGVyX2dhdGhlciBhbmQgKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgd2lsbAorICogYmUgc2V0IHRv IHRydWUgaWYgd2UgbG9va2VkIHRocm91Z2ggYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUg b24KKyAqIHRoYXQgc2lkZSBvZiB0aGUgam9pbiwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAqLwor c3RhdGljIHBncGFfam9pbl9zdHJhdGVneQorcGdwYV9kZWNvbXBvc2Vfam9pbihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJUGxhbiAqKnJlYWxvdXRl ciwgUGxhbiAqKnJlYWxpbm5lciwKKwkJCQkJRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxvdXRlciwg RWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJYm9vbCAqZm91bmRfYW55X291dGVy X2dhdGhlciwgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcikKK3sKKwlQbGFubmVkU3RtdCAq cHN0bXQgPSB3YWxrZXItPnBzdG10OworCUpvaW5UeXBlCWpvaW50eXBlID0gKChKb2luICopIHBs YW4pLT5qb2ludHlwZTsKKwlQbGFuCSAgICpvdXRlcnBsYW4gPSBwbGFuLT5sZWZ0dHJlZTsKKwlQ bGFuCSAgICppbm5lcnBsYW4gPSBwbGFuLT5yaWdodHRyZWU7CisJRWxpZGVkTm9kZSAqZWxpZGVk b3V0ZXI7CisJRWxpZGVkTm9kZSAqZWxpZGVkaW5uZXI7CisJcGdwYV9qb2luX3N0cmF0ZWd5IHN0 cmF0ZWd5OworCWJvb2wJCXVuaXF1ZW91dGVyOworCWJvb2wJCXVuaXF1ZWlubmVyOworCisJZWxp ZGVkb3V0ZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsIG91dGVycGxhbik7CisJZWxp ZGVkaW5uZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsIGlubmVycGxhbik7CisJKmZv dW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwkqZm91bmRfYW55X2lubmVyX2dhdGhlciA9 IGZhbHNlOworCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX01lcmdlSm9p bjoKKworCQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBwbGFjZSBh IE1hdGVyaWFsIG5vZGUgb24gdGhlCisJCQkgKiBpbm5lciBzaWRlIG9mIHRoZSBNZXJnZUpvaW47 IGlmIHRoaXMgaXMgcHJlc2VudCwgd2UgcmVjb3JkIGl0CisJCQkgKiBhcyBwYXJ0IG9mIHRoZSBq b2luIHN0cmF0ZWd5LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0Eo aW5uZXJwbGFuLCBNYXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2Nl bmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVSR0Vf Sk9JTl9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlzdHJhdGVneSA9IEpTVFJBVF9N RVJHRV9KT0lOX1BMQUlOOworCisJCQkvKgorCQkJICogRm9yIGEgTWVyZ2VKb2luLCBlaXRoZXIg dGhlIG91dGVyIG9yIHRoZSBpbm5lciBzdWJwbGFuLCBvcgorCQkJICogYm90aCwgbWF5IGhhdmUg bmVlZGVkIHRvIGJlIHNvcnRlZDsgd2UgbXVzdCBkaXNyZWdhcmQgYW55IFNvcnQKKwkJCSAqIG9y IEluY3JlbWVudGFsU29ydCBub2RlIHRvIGZpbmQgdGhlIHJlYWwgaW5uZXIgb3Igb3V0ZXIKKwkJ CSAqIHN1YnBsYW4uCisJCQkgKi8KKwkJCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIGlzX3Nv cnRpbmdfcGxhbihvdXRlcnBsYW4pKQorCQkJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsICZvdXRlcnBsYW4pOworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgaXNf c29ydGluZ19wbGFuKGlubmVycGxhbikpCisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRf bm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQlicmVhazsKKworCQljYXNlIFRfTmVzdExvb3A6 CisKKwkJCS8qCisJCQkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2UgYSBN YXRlcmlhbCBvciBNZW1vaXplIG5vZGUKKwkJCSAqIG9uIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBO ZXN0TG9vcDsgaWYgdGhpcyBpcyBwcmVzZW50LCB3ZQorCQkJICogcmVjb3JkIGl0IGFzIHBhcnQg b2YgdGhlIGpvaW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxM ICYmIElzQShpbm5lcnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9IHBn cGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpTVFJB VF9ORVNURURfTE9PUF9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UgaWYgKGVsaWRlZGlubmVy ID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWVtb2l6ZSkpCisJCQl7CisJCQkJZWxpZGVkaW5u ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kg PSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlzdHJhdGVn eSA9IEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTjsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9IYXNo Sm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBpbm5lciBzdWJwbGFuIG9mIGEgSGFzaEpvaW4gaXMg YWx3YXlzIGEgSGFzaCBub2RlOyB0aGUgcmVhbAorCQkJICogaW5uZXIgc3VicGxhbiBpcyB0aGUg SGFzaCBub2RlJ3MgY2hpbGQuCisJCQkgKi8KKwkJCUFzc2VydChJc0EoaW5uZXJwbGFuLCBIYXNo KSk7CisJCQlBc3NlcnQoZWxpZGVkaW5uZXIgPT0gTlVMTCk7CisJCQllbGlkZWRpbm5lciA9IHBn cGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCXN0cmF0ZWd5ID0gSlNUUkFU X0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwl9CisKKwkv KgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGEgc2VtaWpv aW4gYnkgZmlyc3QgbWFraW5nCisJICogdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlIHBsYW4gdW5p cXVlLCBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9ybWFsIGpvaW4KKwkgKiBhZ2FpbnN0IHRoZSBy ZXN1bHQuIFRoZXJlZm9yZSwgd2UgbWlnaHQgbmVlZCB0byBkZXNjZW5kIHRocm91Z2ggYQorCSAq IHVuaXF1ZSBub2RlIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBwbGFuLgorCSAqLworCXVuaXF1ZW91 dGVyID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZvdXRlcnBsYW4sICZlbGlkZWRv dXRlcik7CisJdW5pcXVlaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJmlu bmVycGxhbiwgJmVsaWRlZGlubmVyKTsKKworCS8qCisJICogQ2FuIHdlIHNlZSBhIFJlc3VsdCBu b2RlIGhlcmUsIHRvIHByb2plY3QgYWJvdmUgYSBHYXRoZXI/IFNvIGZhciBJJ3ZlCisJICogZm91 bmQgbm8gZXhhbXBsZSB0aGF0IGJlaGF2ZXMgdGhhdCB3YXk7IHJhdGhlciwgdGhlIEdhdGhlciBv ciBHYXRoZXIKKwkgKiBNZXJnZSBpcyBtYWRlIHRvIHByb2plY3QuIEhlbmNlLCBkb24ndCB0ZXN0 IGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoKQorCSAqIGF0IHRoaXMgcG9pbnQuCisJICovCisK KwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gcGFyYWxsZWxpemUgcGFy dCBvZiB0aGUgam9pbiB0cmVlLCBzbworCSAqIHdlIGNvdWxkIGZpbmQgYSBHYXRoZXIgb3IgR2F0 aGVyIE1lcmdlIG5vZGUgaGVyZS4gTm90ZSB0aGF0LCBpZgorCSAqIHByZXNlbnQsIHRoaXMgd2ls bCBhcHBlYXIgYmVsb3cgbm9kZXMgd2UgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBqb2luCisJ ICogc3RyYXRlZ3ksIGJ1dCB3ZSBjb3VsZCBmaW5kIGFub3RoZXIgdW5pcXVlbmVzcy1lbmZvcmNp bmcgbm9kZSBiZWxvdyB0aGUKKwkgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlLCBpZiBwcmVzZW50 LgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkb3V0ZXIgPSBw Z3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJm91dGVycGxhbiwKKwkJCQkJCQkJCQkJICBm b3VuZF9hbnlfb3V0ZXJfZ2F0aGVyKTsKKwkJaWYgKCpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyICYm CisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJm91dGVycGxhbiwgJmVsaWRlZG91 dGVyKSkKKwkJCXVuaXF1ZW91dGVyID0gdHJ1ZTsKKwl9CisJaWYgKGVsaWRlZGlubmVyID09IE5V TEwpCisJeworCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9hbnlfZ2F0aGVyKHBzdG10LCAm aW5uZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5kX2FueV9pbm5lcl9nYXRoZXIpOworCQlpZiAo KmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgJiYKKwkJCXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBz dG10LCAmaW5uZXJwbGFuLCAmZWxpZGVkaW5uZXIpKQorCQkJdW5pcXVlaW5uZXIgPSB0cnVlOwor CX0KKworCS8qCisJICogSXQncyBwb3NzaWJsZSB0aGF0IGEgUmVzdWx0IG5vZGUgaGFzIGJlZW4g aW5zZXJ0ZWQgZWl0aGVyIHRvIHByb2plY3QgYQorCSAqIHRhcmdldCBsaXN0IG9yIHRvIGltcGxl bWVudCBhIG9uZS10aW1lIGZpbHRlci4gSWYgc28sIHdlIGNhbiBkZXNjZW5kCisJICogdGhyb3Vn aCBpdC4gTm90ZSB0aGF0IGEgUmVzdWx0IG5vZGUgd2l0aG91dCBhIGNoaWxkIHdvdWxkIGJlIGEK KwkgKiBkZWdlbmVyYXRlIHNjYW4gb3Igam9pbiwgYW5kIG5vdCBzb21ldGhpbmcgd2UgY291bGQg ZGVzY2VuZCB0aHJvdWdoLgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIGlzX3Jl c3VsdF9ub2RlX3dpdGhfY2hpbGQob3V0ZXJwbGFuKSkKKwkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rl c2NlbmRfbm9kZShwc3RtdCwgJm91dGVycGxhbik7CisJaWYgKGVsaWRlZGlubmVyID09IE5VTEwg JiYgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChpbm5lcnBsYW4pKQorCQllbGlkZWRpbm5lciA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKworCS8qCisJICogSWYgdGhp cyBpcyBhIHNlbWlqb2luIHRoYXQgd2FzIGNvbnZlcnRlZCB0byBhbiBpbm5lciBqb2luIGJ5IG1h a2luZyBvbmUKKwkgKiBzaWRlIG9yIHRoZSBvdGhlciB1bmlxdWUsIG1ha2UgYSBub3RlIHRoYXQg dGhlIGlubmVyIG9yIG91dGVyIHN1YnBsYW4sCisJICogYXMgYXBwcm9wcmlhdGUsIHNob3VsZCBi ZSB0cmVhdGVkIGFzIGEgcXVlcnkgcGxhbiBmZWF0dXJlIHdoZW4gdGhlIG1haW4KKwkgKiB0cmVl IHRyYXZlcnNhbCByZWFjaGVzIGl0LgorCSAqCisJICogQ29udmVyc2VseSwgaWYgdGhlIHBsYW5u ZXIgY291bGQgaGF2ZSBtYWRlIG9uZSBzaWRlIG9mIHRoZSBqb2luIHVuaXF1ZQorCSAqIGFuZCB0 aGVyZWJ5IGNvbnZlcnRlZCBpdCB0byBhbiBpbm5lciBqb2luLCBhbmQgY2hvc2Ugbm90IHRvIGRv IHNvLCB0aGF0CisJICogaXMgYWxzbyB3b3J0aCBub3RpbmcuCisJICoKKwkgKiBOQjogVGhpcyBj b2RlIGNvdWxkIGFwcGVhciBzbGlnaHRseSBoaWdoZXIgdXAgaW4gdGhpcyBmdW5jdGlvbiwgYnV0 CisJICogbm9uZSBvZiB0aGUgbm9kZXMgdGhyb3VnaCB3aGljaCB3ZSBqdXN0IGRlc2NlbmRlZCBz aG91bGQgaGF2ZQorCSAqIGFzc29jaWF0ZWQgUlRJcy4KKwkgKgorCSAqIE5COiBUaGlzIHNlZW1z IGxpa2UgYSBzb21ld2hhdCBoYWNreSB3YXkgb2YgcGFzc2luZyBpbmZvcm1hdGlvbiB1cCB0bwor CSAqIHRoZSBtYWluIHRyZWUgd2FsaywgYnV0IEkgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBiZXR0 ZXIgaWRlYS4KKwkgKi8KKwlpZiAodW5pcXVlb3V0ZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0 dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSwgb3V0ZXJwbGFuKTsKKwllbHNlIGlm IChqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJl KHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsIG91dGVycGxhbik7CisJaWYgKHVu aXF1ZWlubmVyKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1J Sk9JTl9VTklRVUUsIGlubmVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5cGUgPT0gSk9JTl9TRU1J KQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9OT05f VU5JUVVFLCBpbm5lcnBsYW4pOworCisJLyogU2V0IG91dHB1dCBwYXJhbWV0ZXJzLiAqLworCSpy ZWFsb3V0ZXIgPSBvdXRlcnBsYW47CisJKnJlYWxpbm5lciA9IGlubmVycGxhbjsKKwkqZWxpZGVk cmVhbG91dGVyID0gZWxpZGVkb3V0ZXI7CisJKmVsaWRlZHJlYWxpbm5lciA9IGVsaWRlZGlubmVy OworCXJldHVybiBzdHJhdGVneTsKK30KKworLyoKKyAqIERlc2NlbmQgdGhyb3VnaCBhIFBsYW4g bm9kZSBpbiBhIGpvaW4gdHJlZSB0aGF0IHRoZSBjYWxsZXIgaGFzIGRldGVybWluZWQKKyAqIHRv IGJlIGlycmVsZXZhbnQuCisgKgorICogVXBkYXRlcyAqcGxhbiwgYW5kIHJldHVybnMgdGhlIGxh c3Qgb2YgYW55IGVsaWRlZCBub2RlcyBwZXJ0YWluaW5nIHRvIHRoZQorICogbmV3IHBsYW4gbm9k ZS4KKyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0 bXQgKnBzdG10LCBQbGFuICoqcGxhbikKK3sKKwkqcGxhbiA9ICgqcGxhbiktPmxlZnR0cmVlOwor CXJldHVybiBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsICpwbGFuKTsKK30KKworLyoKKyAq IERlc2NlbmQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwgaWYgcHJlc2Vu dCwgYW5kIGFueSBTb3J0CisgKiBvciBJbmNyZW1lbnRhbFNvcnQgbm9kZSBvY2N1cnJpbmcgdW5k ZXIgYSBHYXRoZXIgTWVyZ2UuCisgKgorICogQ2FsbGVyIHNob3VsZCBoYXZlIHZlcmlmaWVkIHRo YXQgdGhlcmUgaXMgbm8gRWxpZGVkTm9kZSBwZXJ0YWluaW5nIHRvCisgKiB0aGUgaW5pdGlhbCB2 YWx1ZSBvZiAqcGxhbi4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJucyB0aGUgbGFz dCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcgcGxhbiBub2Rl LiBTZXRzICpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZSBpZiBlaXRoZXIgR2F0aGVyIG9yCisgKiBH YXRoZXIgTWVyZ2Ugd2FzIGZvdW5kLCBhbmQgb3RoZXJ3aXNlIGxlYXZlcyBpdCB1bmNoYW5nZWQu CisgKi8KK3N0YXRpYyBFbGlkZWROb2RlICoKK3BncGFfZGVzY2VuZF9hbnlfZ2F0aGVyKFBsYW5u ZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQlib29sICpmb3VuZF9hbnlfZ2F0aGVy KQoreworCWlmIChJc0EoKnBsYW4sIEdhdGhlcikpCisJeworCQkqZm91bmRfYW55X2dhdGhlciA9 IHRydWU7CisJCXJldHVybiBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisJfQorCisJ aWYgKElzQSgqcGxhbiwgR2F0aGVyTWVyZ2UpKQorCXsKKwkJRWxpZGVkTm9kZSAqZWxpZGVkID0g cGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCisJCWlmIChlbGlkZWQgPT0gTlVMTCAm JiBpc19zb3J0aW5nX3BsYW4oKnBsYW4pKQorCQkJZWxpZGVkID0gcGdwYV9kZXNjZW5kX25vZGUo cHN0bXQsIHBsYW4pOworCisJCSpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwkJcmV0dXJuIGVs aWRlZDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIElmICpwbGFuIGlzIGFuIEFn ZyBvciBVbmlxdWUgbm9kZSwgd2Ugd2FudCB0byBkZXNjZW5kIHRocm91Z2ggaXQsIHVubGVzcwor ICogaXQgaGFzIGEgY29ycmVzcG9uZGluZyBlbGlkZWQgbm9kZS4gSWYgaXRzIGltbWVkaWF0ZSBj aGlsZCBpcyBhIFNvcnQgb3IKKyAqIEluY3JlbWVudGFsU29ydCwgd2UgYWxzbyB3YW50IHRvIGRl c2NlbmQgdGhyb3VnaCB0aGF0LCB1bmxlc3MgaXQgaGFzIGEKKyAqIGNvcnJlc3BvbmRpbmcgZWxp ZGVkIG5vZGUuCisgKgorICogT24gZW50cnksICplbGlkZWRfbm9kZSBtdXN0IGJlIHRoZSBsYXN0 IG9mIGFueSBlbGlkZWQgbm9kZXMgY29ycmVzcG9uZGluZworICogdG8gKnBsYW47IG9uIGV4aXQs IHRoaXMgd2lsbCBzdGlsbCBiZSB0cnVlLCBidXQgKnBsYW4gbWF5IGhhdmUgYmVlbiB1cGRhdGVk LgorICoKKyAqIFRoZSByZWFzb24gd2UgZG9uJ3Qgd2FudCB0byBkZXNjZW5kIHRocm91Z2ggZWxp ZGVkIG5vZGVzIGlzIHRoYXQgYSBzaW5nbGUKKyAqIGpvaW4gdHJlZSBjYW4ndCBjcm9zcyB0aHJv dWdoIGFueSBzb3J0IG9mIGVsaWRlZCBub2RlOiBzdWJxdWVyaWVzIGFyZQorICogcGxhbm5lZCBz ZXBhcmF0ZWx5LCBhbmQgcGxhbm5pbmcgaW5zaWRlIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBp cworICogc2VwYXJhdGUgZnJvbSBwbGFubmluZyBvdXRzaWRlIG9mIGl0LgorICoKKyAqIFRoZSBy ZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiB3ZSBkZXNjZW5kIHRocm91Z2ggYSBub2RlIHRoYXQgd2Ug YmVsaWV2ZSBpcworICogbWFraW5nIG9uZSBzaWRlIG9mIGEgc2VtaWpvaW4gdW5pcXVlLCBhbmQg b3RoZXJ3aXNlIGZhbHNlLgorICovCitzdGF0aWMgYm9vbAorcGdwYV9kZXNjZW5kX2FueV91bmlx dWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCUVsaWRlZE5vZGUgKipl bGlkZWRfbm9kZSkKK3sKKwlib29sCQlkZXNjZW5kID0gZmFsc2U7CisJYm9vbAkJc2p1bmlxdWUg PSBmYWxzZTsKKworCWlmICgqZWxpZGVkX25vZGUgIT0gTlVMTCkKKwkJcmV0dXJuIHNqdW5pcXVl OworCisJaWYgKElzQSgqcGxhbiwgVW5pcXVlKSkKKwl7CisJCWRlc2NlbmQgPSB0cnVlOworCQlz anVuaXF1ZSA9IHRydWU7CisJfQorCWVsc2UgaWYgKElzQSgqcGxhbiwgQWdnKSkKKwl7CisJCS8q CisJCSAqIElmIHRoaXMgaXMgYSBzaW1wbGUgQWdnIG5vZGUsIHRoZW4gYXNzdW1lIGl0J3MgaGVy ZSB0byBpbXBsZW1lbnQKKwkJICogc2VtaWpvaW4gdW5pcXVlbmVzcy4gT3RoZXJ3aXNlLCBhc3N1 bWUgaXQncyBjb21wbGV0aW5nIGFuIGVhZ2VyCisJCSAqIGFnZ3JlZ2F0aW9uIG9yIHBhcnRpdGlv bndpc2UgYWdncmVnYXRpb24gb3BlcmF0aW9uIHRoYXQgYmVnYW4gYXQgYQorCQkgKiBoaWdoZXIg bGV2ZWwgb2YgdGhlIHBsYW4gdHJlZS4KKwkJICoKKwkJICogKE5vdGUgdGhhdCB3aGVuIHdlJ3Jl IHVzaW5nIGFuIEFnZyBub2RlIGZvciB1bmlxdWVuZXNzLCB0aGVyZSdzIG5vCisJCSAqIG5lZWQg Zm9yIGFueSBjYXNlIG90aGVyIHRoYW4gQUdHU1BMSVRfU0lNUExFLCBiZWNhdXNlIHRoZXJlJ3Mg bm8KKwkJICogYWdncmVnYXRlZCBjb2x1bW4gYmVpbmcgY29tcHV0ZWQuIEhvd2V2ZXIsIHRoZSBm YWN0IHRoYXQKKwkJICogQUdHU1BMSVRfU0lNUExFIGlzIGluIHVzZSBkb2Vzbid0IHByb3ZlIHRo YXQgdGhpcyBBZ2cgaXMgaGVyZSBmb3IKKwkJICogdGhlIHNlbWlqb2luIHVuaXF1ZW5lc3MuIE1h eWJlIHdlIHNob3VsZCBhZGp1c3QgYW4gQWdnIG5vZGUgdG8KKwkJICogY2FycnkgYSAicHVycG9z ZSIgZmllbGQgc28gdGhhdCBjb2RlIGxpa2UgdGhpcyBjYW4gYmUgbW9yZSBjZXJ0YWluCisJCSAq IG9mIGl0cyBhbmFseXNpcy4pCisJCSAqLworCQlkZXNjZW5kID0gdHJ1ZTsKKwkJc2p1bmlxdWUg PSAoKChBZ2cgKikgKnBsYW4pLT5hZ2dzcGxpdCA9PSBBR0dTUExJVF9TSU1QTEUpOworCX0KKwor CWlmIChkZXNjZW5kKQorCXsKKwkJKmVsaWRlZF9ub2RlID0gcGdwYV9kZXNjZW5kX25vZGUocHN0 bXQsIHBsYW4pOworCisJCWlmICgqZWxpZGVkX25vZGUgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3Bs YW4oKnBsYW4pKQorCQkJKmVsaWRlZF9ub2RlID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBs YW4pOworCX0KKworCXJldHVybiBzanVuaXF1ZTsKK30KKworLyoKKyAqIElzIHRoaXMgYSBSZXN1 bHQgbm9kZSB0aGF0IGhhcyBhIGNoaWxkPworICovCitzdGF0aWMgYm9vbAoraXNfcmVzdWx0X25v ZGVfd2l0aF9jaGlsZChQbGFuICpwbGFuKQoreworCXJldHVybiBJc0EocGxhbiwgUmVzdWx0KSAm JiBwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMOworfQorCisvKgorICogSXMgdGhpcyBhIFBsYW4gbm9k ZSB3aG9zZSBwdXJwb3NlIGlzIHRvIHB1dCB0aGUgZGF0YSBpbiBhIGNlcnRhaW4gb3JkZXI/Cisg Ki8KK3N0YXRpYyBib29sCitpc19zb3J0aW5nX3BsYW4oUGxhbiAqcGxhbikKK3sKKwlyZXR1cm4g SXNBKHBsYW4sIFNvcnQpIHx8IElzQShwbGFuLCBJbmNyZW1lbnRhbFNvcnQpOworfQpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9qb2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmRiODUwOWMwN2NjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2pvaW4uaApAQCAtMCwwICsxLDEwNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV9qb2luLmgKKyAqCSAgYW5hbHlzaXMgb2Ygam9pbnMgaW4gUGxhbiB0cmVlcworICoK KyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfSk9JTl9ICisjZGVmaW5lIFBH UEFfSk9JTl9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1 Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dDsKK3R5 cGVkZWYgc3RydWN0IHBncGFfam9pbl91bnJvbGxlciBwZ3BhX2pvaW5fdW5yb2xsZXI7Cit0eXBl ZGVmIHN0cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4gcGdwYV91bnJvbGxlZF9qb2luOworCisvKgor ICogQWx0aG91Z2ggdGhlcmUgYXJlIHRocmVlIG1haW4gam9pbiBzdHJhdGVnaWVzLCB3ZSB0cnkg dG8gY2xhc3NpZnkgdGhpbmdzCisgKiBtb3JlIHByZWNpc2VseSBoZXJlOiBtZXJnZSBqb2lucyBo YXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgbWF0ZXJpYWxpemF0aW9uCisgKiBvbiB0aGUgaW5uZXIg c2lkZSwgYW5kIG5lc3RlZCBsb29wcyBjYW4gdXNlIGVpdGhlciBtYXRlcmlhbGl6YXRpb24gb3IK KyAqIG1lbW9pemF0aW9uLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlKU1RSQVRfTUVSR0VfSk9J Tl9QTEFJTiA9IDAsCisJSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJSlNUUkFUX05F U1RFRF9MT09QX1BMQUlOLAorCUpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRSwKKwlKU1RS QVRfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwlKU1RSQVRfSEFTSF9KT0lOCisJLyogdXBkYXRlIE5V TV9QR1BBX0pPSU5fU1RSQVRFR1kgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBncGFf am9pbl9zdHJhdGVneTsKKworI2RlZmluZSBOVU1fUEdQQV9KT0lOX1NUUkFURUdZCQkoKGludCkg SlNUUkFUX0hBU0hfSk9JTiArIDEpCisKKy8qCisgKiBJbiBhbiBvdXRlci1kZWVwIGpvaW4gdHJl ZSwgZXZlcnkgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gd2lsbCBiZSBhIHNjYW4sCisgKiBi dXQgam9pbiB0cmVlcyB3aXRoIG90aGVyIHNoYXBlcyBjYW4gY29udGFpbiB1bnJvbGxlZCBqb2lu cy4KKyAqCisgKiBUaGUgcGxhbiBub2RlIHdlIHN0b3JlIGhlcmUgd2lsbCBiZSB0aGUgaW5uZXIg b3Igb3V0ZXIgY2hpbGQgb2YgdGhlIGpvaW4KKyAqIG5vZGUsIGFzIGFwcHJvcHJpYXRlLCBleGNl cHQgdGhhdCB3ZSBsb29rIHRocm91Z2ggc3Vibm9kZXMgdGhhdCB3ZSByZWdhcmQgYXMKKyAqIHBh cnQgb2YgdGhlIGpvaW4gbWV0aG9kIGl0c2VsZi4gRm9yIGluc3RhbmNlLCBmb3IgYSBOZXN0ZWQg TG9vcCB0aGF0CisgKiBtYXRlcmlhbGl6ZXMgdGhlIGlubmVyIGlucHV0LCB3ZSdsbCBzdG9yZSB0 aGUgY2hpbGQgb2YgdGhlIE1hdGVyaWFsaXplIG5vZGUsCisgKiBub3QgdGhlIE1hdGVyaWFsaXpl IG5vZGUgaXRzZWxmLgorICoKKyAqIElmIHNldHJlZnMgcHJvY2Vzc2luZyBlbGlkZWQgb25lIG9y IG1vcmUgbm9kZXMgZnJvbSB0aGUgcGxhbiB0cmVlLCB0aGVuCisgKiB3ZSdsbCBzdG9yZSBkZXRh aWxzIGFib3V0IHRoZSB0b3Btb3N0IG9mIHRob3NlIGluIGVsaWRlZF9ub2RlOyBvdGhlcndpc2Us CisgKiBpdCB3aWxsIGJlIE5VTEwuCisgKgorICogRXhhY3RseSBvbmUgb2Ygc2NhbiBhbmQgdW5y b2xsZWRfam9pbiB3aWxsIGJlIG5vbi1OVUxMLgorICovCit0eXBlZGVmIHN0cnVjdAoreworCVBs YW4JICAgKnBsYW47CisJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGU7CisJc3RydWN0IHBncGFfc2Nh biAqc2NhbjsKKwlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVucm9sbGVkX2pvaW47Cit9IHBncGFfam9p bl9tZW1iZXI7CisKKy8qCisgKiBXZSBjb252ZXJ0IG91dGVyLWRlZXAgam9pbiB0cmVlcyB0byBh IGZsYXQgc3RydWN0dXJlOyB0aGF0IGlzLCAoKEEgSk9JTiBCKQorICogSk9JTiBDKSBKT0lOIEQg Z2V0cyBjb252ZXJ0ZWQgdG8gb3V0ZXIgPSBBLCBpbm5lciA9IDxCIEMgRD4uICBXaGVuIGpvaW5z CisgKiBhcmVuJ3Qgb3V0ZXItZGVlcCwgc3Vic3RydWN0dXJlIGlzIHJlcXVpcmVkLCBlLmcuIChB IEpPSU4gQikgSk9JTiAoQyBKT0lOIEQpCisgKiBpcyByZXByZXNlbnRlZCBhcyBvdXRlciA9IEEs IGlubmVyID0gPEIgWD4sIHdoZXJlIFggaXMgYSBwZ3BhX3Vucm9sbGVkX2pvaW4KKyAqIGNvdmVy aW5nIEMtRC4KKyAqLworc3RydWN0IHBncGFfdW5yb2xsZWRfam9pbgoreworCS8qIE91dGVybW9z dCBtZW1iZXI7IG11c3Qgbm90IGl0c2VsZiBiZSBhbiB1bnJvbGxlZCBqb2luLiAqLworCXBncGFf am9pbl9tZW1iZXIgb3V0ZXI7CisKKwkvKiBOdW1iZXIgb2YgaW5uZXIgbWVtYmVycy4gTGVuZ3Ro IG9mIHRoZSBzdHJhdGVneSBhbmQgaW5uZXIgYXJyYXlzLiAqLworCXVuc2lnbmVkCW5pbm5lcjsK KworCS8qIEFycmF5IG9mIHN0cmF0ZWdpZXMsIG9uZSBwZXIgbm9uLW91dGVybW9zdCBtZW1iZXIu ICovCisJcGdwYV9qb2luX3N0cmF0ZWd5ICpzdHJhdGVneTsKKworCS8qIEFycmF5IG9mIG1lbWJl cnMsIGV4Y2x1ZGluZyB0aGUgb3V0ZXJtb3N0LiBEZWVwZXN0IGZpcnN0LiAqLworCXBncGFfam9p bl9tZW1iZXIgKmlubmVyOworfTsKKworLyoKKyAqIERvZXMgdGhpcyBwbGFuIG5vZGUgaW5oZXJp dCBmcm9tIEpvaW4/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdwYV9pc19qb2luKFBsYW4g KnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBOZXN0TG9vcCkgfHwgSXNBKHBsYW4sIE1lcmdl Sm9pbikgfHwgSXNBKHBsYW4sIEhhc2hKb2luKTsKK30KKworZXh0ZXJuIHBncGFfam9pbl91bnJv bGxlciAqcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKTsKK2V4dGVybiB2b2lkIHBncGFf dW5yb2xsX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJIFBs YW4gKnBsYW4sIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5y b2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKm91dGVy X2pvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKmlubmVyX2pvaW5f dW5yb2xsZXIpOworZXh0ZXJuIHBncGFfdW5yb2xsZWRfam9pbiAqcGdwYV9idWlsZF91bnJvbGxl ZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkJCXBn cGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7CitleHRlcm4gdm9pZCBwZ3BhX2Rlc3Ry b3lfam9pbl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMjhkMjgzOWNlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKQEAgLTAsMCArMSw1NzEgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0cHV0LmMKKyAqCSAgcHJvZHVjZSB0ZXh0dWFs IG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcGxhbiB0cmVlIHdhbGsKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi cGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworI2luY2x1ZGUgIm5vZGVz L3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworLyoKKyAq IENvbnRleHQgb2JqZWN0IGZvciB0ZXh0dWFsIGFkdmljZSBnZW5lcmF0aW9uLgorICoKKyAqIHJ0 X2lkZW50aWZpZXJzIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgYXJyYXkgb2YgcmFuZ2UgdGFibGUg aWRlbnRpZmllcnMuCisgKiBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgcGdwYV9pZGVu dGlmaWVyLmMgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBidWYgaXMgdGhlIGNhbGxlci1wcm92 aWRlZCBvdXRwdXQgYnVmZmVyLgorICoKKyAqIHdyYXBfY29sdW1uIGlzIHRoZSB3cmFwIGNvbHVt biwgc28gdGhhdCB3ZSBkb24ndCBjcmVhdGUgb3V0cHV0IHRoYXQgaXMKKyAqIHRvbyB3aWRlLiBT ZWUgcGdwYV9tYXliZV9saW5lYnJlYWsoKSBhbmQgY29tbWVudHMgaW4gcGdwYV9vdXRwdXRfYWR2 aWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX291dHB1dF9jb250ZXh0Cit7CisJY29uc3Qg Y2hhciAqKnJpZF9zdHJpbmdzOworCVN0cmluZ0luZm8JYnVmOworCWludAkJCXdyYXBfY29sdW1u OworfSBwZ3BhX291dHB1dF9jb250ZXh0OworCitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF91bnJv bGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIHBncGFf dW5yb2xsZWRfam9pbiAqam9pbik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9qb2luX21lbWJl cihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJcGdwYV9qb2luX21lbWJl ciAqbWVtYmVyKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3kocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0 cmF0ZWd5LAorCQkJCQkJCQkJICBMaXN0ICpzY2Fucyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1 dF9yZWxhdGlvbl9uYW1lKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIE9pZCByZWxpZCk7 CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9xdWVyeV9mZWF0dXJlKHBncGFfb3V0cHV0X2NvbnRl eHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJICBM aXN0ICpxdWVyeV9mZWF0dXJlcyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9zaW1wbGVfc3Ry YXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQljaGFyICpzdHJh dGVneSwKKwkJCQkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0 cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkgIEJp dG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0aW9ucyhwZ3Bh X291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkJICBCaXRt YXBzZXQgKnJlbGlkcyk7CisKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVn eShwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFfY3N0cmlu Z19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSk7CitzdGF0aWMgY2hh ciAqcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3BhX3FmX3R5cGUgdHlwZSk7CisK K3N0YXRpYyB2b2lkIHBncGFfbWF5YmVfbGluZWJyZWFrKFN0cmluZ0luZm8gYnVmLCBpbnQgd3Jh cF9jb2x1bW4pOworCisvKgorICogQXBwZW5kIHF1ZXJ5IGFkdmljZSB0byB0aGUgcHJvdmlkZWQg YnVmZmVyLgorICoKKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sICd3YWxrZXInIG11 c3QgYmUgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlCisgKiBtYWluIHBsYW4gdHJlZSBhbmQgYWxs IHN1YnBsYW5zIGZyb20gdGhlIFBsYW5uZWRTdG10LgorICoKKyAqICdydF9pZGVudGlmaWVycycg aXMgYSB0YWJsZSBvZiB1bmlxdWUgaWRlbnRpZmllcnMsIG9uZSBmb3IgZWFjaCBSVEkuCisgKiBT ZWUgcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdCgpLgorICoKKyAqIFJl c3VsdHMgd2lsbCBiZSBhcHBlbmRlZCB0byAnYnVmJy4KKyAqLwordm9pZAorcGdwYV9vdXRwdXRf YWR2aWNlKFN0cmluZ0luZm8gYnVmLCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKQoreworCUluZGV4CQlydGFi bGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwlMaXN0Q2Vs bCAgICpsYzsKKwlwZ3BhX291dHB1dF9jb250ZXh0IGNvbnRleHQ7CisKKwkvKiBCYXNpYyBpbml0 aWFsaXphdGlvbi4gKi8KKwltZW1zZXQoJmNvbnRleHQsIDAsIHNpemVvZihwZ3BhX291dHB1dF9j b250ZXh0KSk7CisJY29udGV4dC5idWYgPSBidWY7CisKKwkvKgorCSAqIENvbnZlcnQgaWRlbnRp ZmllcnMgdG8gc3RyaW5nIGZvcm0uIE5vdGUgdGhhdCB0aGUgbG9vcCB2YXJpYWJsZSBoZXJlIGlz CisJICogbm90IGFuIFJUSSwgYmVjYXVzZSBSVElzIGFyZSAxLWJhc2VkLiBTb21lIFJUSXMgd2ls bCBoYXZlIG5vCisJICogaWRlbnRpZmllciwgZWl0aGVyIGJlY2F1c2UgdGhlIHJlbG9wdGtpbmQg aXMgUlRFX0pPSU4gb3IgYmVjYXVzZSB0aGF0CisJICogcG9ydGlvbiBvZiB0aGUgcXVlcnkgZGlk bid0IG1ha2UgaXQgaW50byB0aGUgZmluYWwgcGxhbi4KKwkgKi8KKwljb250ZXh0LnJpZF9zdHJp bmdzID0gcGFsbG9jMF9hcnJheShjb25zdCBjaGFyICosIHJ0YWJsZV9sZW5ndGgpOworCWZvciAo aW50IGkgPSAwOyBpIDwgcnRhYmxlX2xlbmd0aDsgKytpKQorCQlpZiAocnRfaWRlbnRpZmllcnNb aV0uYWxpYXNfbmFtZSAhPSBOVUxMKQorCQkJY29udGV4dC5yaWRfc3RyaW5nc1tpXSA9IHBncGFf aWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50aWZpZXJzW2ldKTsKKworCS8qCisJICogSWYgdGhl IHVzZXIgY2hvb3NlcyB0byB1c2UgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIGluIGFuIDgwLWNvbHVt biB3aW5kb3cKKwkgKiBmcm9tIGEgcHNxbCBjbGllbnQgd2l0aCBkZWZhdWx0IHNldHRpbmdzLCBw c3FsIHdpbGwgYWRkIG9uZSBzcGFjZSB0bworCSAqIHRoZSBsZWZ0IG9mIHRoZSBvdXRwdXQgYW5k IEVYUExBSU4gd2lsbCBhZGQgdHdvIG1vcmUgdG8gdGhlIGxlZnQgb2YgdGhlCisJICogYWR2aWNl LiBUaHVzLCBsaW5lcyBvZiBtb3JlIHRoYW4gNzcgY2hhcmFjdGVycyB3aWxsIHdyYXAuIFdlIHNl dCB0aGUKKwkgKiB3cmFwIGxpbWl0IHRvIDc2IGhlcmUgc28gdGhhdCB0aGUgb3V0cHV0IHdvbid0 IHJlYWNoIGFsbCB0aGUgd2F5IHRvIHRoZQorCSAqIHZlcnkgbGFzdCBjb2x1bW4gb2YgdGhlIHRl cm1pbmFsLgorCSAqCisJICogT2YgY291cnNlLCB0aGlzIGlzIGZhaXJseSBhcmJpdHJhcnkgc2V0 IG9mIGFzc3VtcHRpb25zLCBhbmQgb25lIGNvdWxkCisJICogd2VsbCBtYWtlIGFuIGFyZ3VtZW50 IGZvciBhIGRpZmZlcmVudCB3cmFwIGxpbWl0LCBvciBmb3IgYSBjb25maWd1cmFibGUKKwkgKiBv bmUuCisJICovCisJY29udGV4dC53cmFwX2NvbHVtbiA9IDc2OworCisJLyoKKwkgKiBFYWNoIHBp ZWNlIG9mIEpPSU5fT1JERVIoKSBhZHZpY2UgZnVsbHkgZGVzY3JpYmVzIHRoZSBqb2luIG9yZGVy IGZvciBhCisJICogYSBzaW5nbGUgdW5yb2xsZWQgam9pbi4gTWVyZ2luZyBpcyBub3QgcGVybWl0 dGVkLCBiZWNhdXNlIHRoYXQgd291bGQKKwkgKiBjaGFuZ2UgdGhlIG1lYW5pbmcsIGUuZy4gU0VR X1NDQU4oYSBiIGMgZCkgbWVhbnMgc2ltcGx5IHRoYXQgc2VxdWVudGlhbAorCSAqIHNjYW5zIHNo b3VsZCBiZSB1c2VkIGZvciBhbGwgb2YgdGhvc2UgcmVsYXRpb25zLCBhbmQgaXMgdGh1cyBlcXVp dmFsZW50CisJICogdG8gU0VRX1NDQU4oYSBiKSBTRVFfU0NBTihjIGQpLCBidXQgSk9JTl9PUkRF UihhIGIgYyBkKSBtZWFucyB0aGF0ICJhIgorCSAqIGlzIHRoZSBkcml2aW5nIHRhYmxlIHdoaWNo IGlzIHRoZW4gam9pbmVkIHRvICJiIiB0aGVuICJjIiB0aGVuICJkIiwKKwkgKiB3aGljaCBpcyB0 b3RhbGx5IGRpZmZlcmVudCBmcm9tIEpPSU5fT1JERVIoYSBiKSBhbmQgSk9JTl9PUkRFUihjIGQp LgorCSAqLworCWZvcmVhY2gobGMsIHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMpCisJ eworCQlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luID0gbGZpcnN0KGxjKTsKKworCQlpZiAoYnVm LT5sZW4gPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsKKwkJYXBwZW5k U3RyaW5nSW5mbyhjb250ZXh0LmJ1ZiwgIkpPSU5fT1JERVIoIik7CisJCXBncGFfb3V0cHV0X3Vu cm9sbGVkX2pvaW4oJmNvbnRleHQsIHVqb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC5idWYsICcpJyk7CisJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQuYnVmLCBjb250 ZXh0LndyYXBfY29sdW1uKTsKKwl9CisKKwkvKiBFbWl0IGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiAq LworCWZvciAoaW50IHMgPSAwOyBzIDwgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWTsgKytzKQorCXsK KwkJY2hhcgkgICAqc3RyYXRlZ3kgPSBwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShzKTsKKwor CQlwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3koJmNvbnRleHQsCisJCQkJCQkJCQlzdHJhdGVn eSwKKwkJCQkJCQkJCXdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3NdKTsKKwl9CisKKwkvKgorCSAq IEVtaXQgc2NhbiBzdHJhdGVneSBhZHZpY2UgKGJ1dCBub3QgZm9yIG9yZGluYXJ5IHNjYW5zLCB3 aGljaCBhcmUKKwkgKiBkZWZpbml0aW9uYWxseSB1bmludGVyZXN0aW5nKS4KKwkgKi8KKwlmb3Ig KGludCBjID0gMDsgYyA8IE5VTV9QR1BBX1NDQU5fU1RSQVRFR1k7ICsrYykKKwkJaWYgKGMgIT0g UEdQQV9TQ0FOX09SRElOQVJZKQorCQkJcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneSgmY29udGV4 dCwgYywgd2Fsa2VyLT5zY2Fuc1tjXSk7CisKKwkvKiBFbWl0IHF1ZXJ5IGZlYXR1cmUgYWR2aWNl LiAqLworCWZvciAoaW50IHQgPSAwOyB0IDwgTlVNX1BHUEFfUUZfVFlQRVM7ICsrdCkKKwkJcGdw YV9vdXRwdXRfcXVlcnlfZmVhdHVyZSgmY29udGV4dCwgdCwgd2Fsa2VyLT5xdWVyeV9mZWF0dXJl c1t0XSk7CisKKwkvKiBFbWl0IE5PX0dBVEhFUiBhZHZpY2UuICovCisJcGdwYV9vdXRwdXRfbm9f Z2F0aGVyKCZjb250ZXh0LCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CisKKy8qCisgKiBP dXRwdXQgdGhlIG1lbWJlcnMgb2YgYW4gdW5yb2xsZWQgam9pbiwgZmlyc3QgdGhlIG91dGVybW9z dCBtZW1iZXIsIGFuZAorICogdGhlbiB0aGUgaW5uZXIgbWVtYmVycyBvbmUgYnkgb25lLCBhcyBw YXJ0IG9mIEpPSU5fT1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1 dF91bnJvbGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkgIHBn cGFfdW5yb2xsZWRfam9pbiAqam9pbikKK3sKKwlwZ3BhX291dHB1dF9qb2luX21lbWJlcihjb250 ZXh0LCAmam9pbi0+b3V0ZXIpOworCisJZm9yIChpbnQgayA9IDA7IGsgPCBqb2luLT5uaW5uZXI7 ICsraykKKwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZqb2luLT5pbm5lcltrXTsK KworCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29s dW1uKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQlwZ3Bh X291dHB1dF9qb2luX21lbWJlcihjb250ZXh0LCBtZW1iZXIpOworCX0KK30KKworLyoKKyAqIE91 dHB1dCBhIHNpbmdsZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBhcyBwYXJ0IG9mIEpPSU5f T1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9qb2luX21lbWJl cihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJcGdwYV9qb2luX21lbWJlciAq bWVtYmVyKQoreworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwl7CisJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJcGdwYV9vdXRwdXRfdW5y b2xsZWRfam9pbihjb250ZXh0LCBtZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJfQorCWVsc2UKKwl7CisJCXBncGFfc2Nh biAgKnNjYW4gPSBtZW1iZXItPnNjYW47CisKKwkJQXNzZXJ0KHNjYW4gIT0gTlVMTCk7CisJCWlm IChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3Bh X291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOwor CQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ3snKTsK KwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJl bGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd9Jyk7CisJCX0K Kwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYWR2aWNlIGZvciBhIExpc3Qgb2YgcGdwYV9zY2FuIG9i amVjdHMuCisgKgorICogQWxsIHRoZSBzY2FucyBtdXN0IHVzZSB0aGUgc3RyYXRlZ3kgc3BlY2lm aWVkIGJ5IHRoZSAic3RyYXRlZ3kiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9v dXRwdXRfc2Nhbl9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJ ICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIExpc3QgKnNjYW5zKQorewor CWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChzY2FucyA9PSBOSUwpCisJCXJldHVybjsKKwor CWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygiLAor CQkJCQkgcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3koc3RyYXRlZ3kpKTsKKworCWZvcmVhY2hf cHRyKHBncGFfc2Nhbiwgc2Nhbiwgc2NhbnMpCisJeworCQlQbGFuCSAgICpwbGFuID0gc2Nhbi0+ cGxhbjsKKworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJ CXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4p OworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQl9CisKKwkJ LyogT3V0cHV0IHRoZSByZWxhdGlvbiBpZGVudGlmaWVycy4gKi8KKwkJaWYgKGJtc19tZW1iZXJz aGlwKHNjYW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0 aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVsc2UKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRw dXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCisJCS8qIEZvciBp bmRleCBvciBpbmRleC1vbmx5IHNjYW5zLCBvdXRwdXQgaW5kZXggaW5mb3JtYXRpb24uICovCisJ CWlmIChzdHJhdGVneSA9PSBQR1BBX1NDQU5fSU5ERVgpCisJCXsKKwkJCUFzc2VydChJc0EocGxh biwgSW5kZXhTY2FuKSk7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNv bnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJyAnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwgKChJbmRleFNj YW4gKikgcGxhbiktPmluZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFf U0NBTl9JTkRFWF9PTkxZKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4T25seVNjYW4p KTsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9j b2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJ cGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShjb250ZXh0LAorCQkJCQkJCQkJICAoKEluZGV4T25s eVNjYW4gKikgcGxhbiktPmluZGV4aWQpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1 ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IGEgc2NoZW1hLXF1 YWxpZmllZCByZWxhdGlvbiBuYW1lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVs YXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpCit7CisJ T2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpOworCWNoYXIJICAgKnJlbG5h bWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKG5zcG9pZCk7CisJY2hhcgkgICAq cmVsbmFtZSA9IGdldF9yZWxfbmFtZShyZWxpZCk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1lc3BhY2UpKTsKKwlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcuJyk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmlu Zyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZSkpOworfQorCisvKgorICog T3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVyZSBvYmplY3RzLgor ICoKKyAqIEFsbCBmZWF0dXJlcyBtdXN0IGJlIG9mIHRoZSB0eXBlIHNwZWNpZmllZCBieSB0aGUg InR5cGUiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcXVlcnlfZmVh dHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJ CQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ aWYgKHF1ZXJ5X2ZlYXR1cmVzID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRleHQtPmJ1 Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsK KwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJCQkJCSBwZ3BhX2NzdHJp bmdfcXVlcnlfZmVhdHVyZV90eXBlKHR5cGUpKTsKKworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlf ZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3Qg PSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5i dWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChxZi0+cmVsaWRzKSA9 PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRl eHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQs IGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250 ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0 LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0 LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgInNpbXBsZSIgYWR2aWNlIGZvciBh IExpc3Qgb2YgQml0bWFwc2V0IG9iamVjdHMgZWFjaCBvZiB3aGljaAorICogY29udGFpbnMgb25l IG9yIG1vcmUgUlRJcy4KKyAqCisgKiBCeSBzaW1wbGUsIHdlIGp1c3QgbWVhbiB0aGF0IHRoZSBh ZHZpY2UgZW1pdHRlZCBmb2xsb3dzIHRoZSBtb3N0CisgKiBzdHJhaWdodGZvcndhcmQgcGF0dGVy bjogdGhlIHN0cmF0ZWd5IG5hbWUsIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBpdGVtcworICogc2Vw YXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZCBieSBwYXJlbnRoZXNlcy4gSW5kaXZpZHVh bCBpdGVtcyBpbgorICogdGhlIGxpc3QgYXJlIGEgc2luZ2xlIHJlbGF0aW9uIGlkZW50aWZpZXIg Zm9yIGEgQml0bWFwc2V0IHRoYXQgY29udGFpbnMKKyAqIGp1c3Qgb25lIG1lbWJlciwgb3IgYSBz dWItbGlzdCBhZ2FpbiBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBzdXJyb3VuZGVkCisgKiBieSBw YXJlbnRoZXNlcyBmb3IgYSBCaXRtYXBzZXQgd2l0aCBtdWx0aXBsZSBtZW1iZXJzLiBCaXRtYXBz ZXRzIHdpdGgKKyAqIG5vIG1lbWJlcnMgcHJvYmFibHkgc2hvdWxkbid0IG9jY3VyIGhlcmUsIGJ1 dCBpZiB0aGV5IGRvIHRoZXknbGwgYmUKKyAqIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN1Yi1saXN0 LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0 cHV0X2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnN0cmF0ZWd5LAorCQkJCQkJCUxpc3QgKnJlbGlk X3NldHMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKHJlbGlkX3NldHMgPT0gTklM KQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4 dC0+YnVmLCAiJXMoIiwgc3RyYXRlZ3kpOworCisJZm9yZWFjaF9ub2RlKEJpdG1hcHNldCwgcmVs aWRzLCByZWxpZF9zZXRzKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJ ZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQt PndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAn KTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChyZWxpZHMpID09IEJNU19TSU5HTEVUT04p CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMp OworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygn KTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHJlbGlk cyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9 CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXli ZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8q CisgKiBPdXRwdXQgTk9fR0FUSEVSIGFkdmljZSBmb3IgYWxsIHJlbGF0aW9ucyBub3QgYXBwZWFy aW5nIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29u dGV4dCwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJaWYgKHJlbGlkcyA9PSBOVUxMKQorCQlyZXR1 cm47CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1 ZiwgIk5PX0dBVEhFUigiKTsKKwlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4 dC0+YnVmLCByZWxpZHMpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJykn KTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgaWRlbnRpZmllcnMgZm9yIGVhY2ggUlRJIGluIHRo ZSBwcm92aWRlZCBzZXQuCisgKgorICogSWRlbnRpZmllcnMgYXJlIHNlcGFyYXRlZCBieSBzcGFj ZXMsIGFuZCBhIGxpbmUgYnJlYWsgaXMgcG9zc2libGUgYWZ0ZXIKKyAqIGVhY2ggb25lLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFfb3V0cHV0X2NvbnRleHQg KmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQorewor CWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCXdoaWxlICgocnRpID0g Ym1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJCWNvbnN0IGNoYXIgKnJp ZF9zdHJpbmcgPSBjb250ZXh0LT5yaWRfc3RyaW5nc1tydGkgLSAxXTsKKworCQlpZiAocmlkX3N0 cmluZyA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwgIm5vIGlkZW50aWZpZXIgZm9yIFJUSSAlZCIs IHJ0aSk7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJCQlmaXJzdCA9IGZhbHNlOworCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsIHJpZF9zdHJpbmcpOworCQl9CisJCWVsc2UKKwkJeworCQkJ cGdwYV9tYXliZV9saW5lYnJlYWsoYnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyIsIHJpZF9zdHJpbmcpOworCQl9CisJfQorfQorCisvKgor ICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIGpvaW4g c3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5 KHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsK KwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9Q TEFJTiI7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4g Ik1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9QTEFJ TjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4iOworCQljYXNlIEpTVFJBVF9ORVNURURf TE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUiOwor CQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9P UF9NRU1PSVpFIjsKKwkJY2FzZSBKU1RSQVRfSEFTSF9KT0lOOgorCQkJcmV0dXJuICJIQVNIX0pP SU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisg KiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBz dHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3ko cGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRjaCAoc3RyYXRlZ3kpCisJewor CQljYXNlIFBHUEFfU0NBTl9PUkRJTkFSWToKKwkJCXJldHVybiAiT1JESU5BUllfU0NBTiI7CisJ CWNhc2UgUEdQQV9TQ0FOX1NFUToKKwkJCXJldHVybiAiU0VRX1NDQU4iOworCQljYXNlIFBHUEFf U0NBTl9CSVRNQVBfSEVBUDoKKwkJCXJldHVybiAiQklUTUFQX0hFQVBfU0NBTiI7CisJCWNhc2Ug UEdQQV9TQ0FOX0ZPUkVJR046CisJCQlyZXR1cm4gIkZPUkVJR05fSk9JTiI7CisJCWNhc2UgUEdQ QV9TQ0FOX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5f SU5ERVhfT05MWToKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1ND QU5fUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9OV0lTRSI7CisJCWNhc2UgUEdQ QV9TQ0FOX1RJRDoKKwkJCXJldHVybiAiVElEX1NDQU4iOworCX0KKworCXBnX3VucmVhY2hhYmxl KCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJl c3BvbmRzIHRvIHRoZSBxdWVyeSBmZWF0dXJlIHR5cGUuCisgKi8KK3N0YXRpYyBjaGFyICoKK3Bn cGFfY3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpCit7CisJc3dp dGNoICh0eXBlKQorCXsKKwkJY2FzZSBQR1BBUUZfR0FUSEVSOgorCQkJcmV0dXJuICJHQVRIRVIi OworCQljYXNlIFBHUEFRRl9HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7 CisJCWNhc2UgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lO X05PTl9VTklRVUUiOworCQljYXNlIFBHUEFRRl9TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4g IlNFTUlKT0lOX1VOSVFVRSI7CisJfQorCisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBO VUxMOworfQorCisvKgorICogSW5zZXJ0IGEgbGluZSBicmVhayBpbnRvIHRoZSBTdHJpbmdJbmZv RGF0YSwgaWYgbmVlZGVkLgorICoKKyAqIElmIHdyYXBfY29sdW1uIGlzIHplcm8gb3IgbmVnYXRp dmUsIHRoaXMgZG9lcyBub3RoaW5nLiBPdGhlcndpc2UsIHdlCisgKiBjb25zaWRlciBpbnNlcnRp bmcgYSBuZXdsaW5lLiBXZSBvbmx5IGluc2VydCBhIG5ld2xpbmUgaWYgdGhlIGxlbmd0aCBvZgor ICogdGhlIGxhc3QgbGluZSBpbiB0aGUgYnVmZmVyIGV4Y2VlZHMgd3JhcF9jb2x1bW4sIGFuZCBu b3QgaWYgd2UnZCBiZQorICogaW5zZXJ0aW5nIGEgbmV3bGluZSBhdCBvciBiZWZvcmUgdGhlIGJl Z2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBhdCB3aGlj aCB0aGUgbmV3bGluZSBpcyBpbnNlcnRlZCBpcyBzaW1wbHkgd2hlcmV2ZXIgdGhlCisgKiBidWZm ZXIgZW5kZWQgdGhlIGxhc3QgdGltZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIEluIG90aGVy IHdvcmRzLAorICogdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24g ZXZlcnkgdGltZSB3ZSByZWFjaCBhIGdvb2QKKyAqIHBsYWNlIGZvciBhIGxpbmUgYnJlYWsuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50 IHdyYXBfY29sdW1uKQoreworCWNoYXIJICAgKnRyYWlsaW5nX25sOworCWludAkJCWxpbmVfc3Rh cnQ7CisJaW50CQkJc2F2ZV9jdXJzb3I7CisKKwkvKiBJZiBsaW5lIHdyYXBwaW5nIGlzIGRpc2Fi bGVkLCBleGl0IHF1aWNrbHkuICovCisJaWYgKHdyYXBfY29sdW1uIDw9IDApCisJCXJldHVybjsK KworCS8qCisJICogU2V0IGxpbmVfc3RhcnQgdG8gdGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiBidWYt PmRhdGEgb2YgdGhlIGZpcnN0CisJICogY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUsIHdo ZXJlIHRoZSBjdXJyZW50IGxpbmUgbWVhbnMgdGhlIGxhc3QKKwkgKiBvbmUgaW4gdGhlIGJ1ZmZl ci4gTm90ZSB0aGF0IGxpbmVfc3RhcnQgY291bGQgYmUgdGhlIG9mZnNldCBvZiB0aGUKKwkgKiB0 cmFpbGluZyAnXDAnIGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIGlzIGEgbGlu ZSBicmVhay4KKwkgKi8KKwl0cmFpbGluZ19ubCA9IHN0cnJjaHIoYnVmLT5kYXRhLCAnXG4nKTsK KwlpZiAodHJhaWxpbmdfbmwgPT0gTlVMTCkKKwkJbGluZV9zdGFydCA9IDA7CisJZWxzZQorCQls aW5lX3N0YXJ0ID0gKHRyYWlsaW5nX25sIC0gYnVmLT5kYXRhKSArIDE7CisKKwkvKgorCSAqIFJl bWVtYmVyIHRoYXQgdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBidWZmZXIgaXMgYSBwb3RlbnRpYWwg bG9jYXRpb24gdG8KKwkgKiBpbnNlcnQgYSBsaW5lIGJyZWFrIG9uIGEgZnV0dXJlIGNhbGwgdG8g dGhpcyBmdW5jdGlvbi4KKwkgKi8KKwlzYXZlX2N1cnNvciA9IGJ1Zi0+Y3Vyc29yOworCWJ1Zi0+ Y3Vyc29yID0gYnVmLT5sZW47CisKKwkvKiBJZiB3ZSBoYXZlbid0IHBhc3NlZCB0aGUgd3JhcCBj b2x1bW4sIHdlIGRvbid0IG5lZWQgYSBuZXdsaW5lLiAqLworCWlmIChidWYtPmxlbiAtIGxpbmVf c3RhcnQgPD0gd3JhcF9jb2x1bW4pCisJCXJldHVybjsKKworCS8qCisJICogSXQgb25seSBtYWtl cyBzZW5zZSB0byBpbnNlcnQgYSBuZXdsaW5lIGF0IGEgcG9zaXRpb24gbGF0ZXIgdGhhbiB0aGUK KwkgKiBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZS4KKwkgKi8KKwlpZiAoc2F2ZV9jdXJz b3IgPD0gbGluZV9zdGFydCkKKwkJcmV0dXJuOworCisJLyogSW5zZXJ0IGEgbmV3bGluZSBhdCB0 aGUgcHJldmlvdXMgY3Vyc29yIGxvY2F0aW9uLiAqLworCWVubGFyZ2VTdHJpbmdJbmZvKGJ1Ziwg MSk7CisJbWVtbW92ZSgmYnVmLT5kYXRhW3NhdmVfY3Vyc29yXSArIDEsICZidWYtPmRhdGFbc2F2 ZV9jdXJzb3JdLAorCQkJYnVmLT5sZW4gLSBzYXZlX2N1cnNvcik7CisJKytidWYtPmN1cnNvcjsK KwlidWYtPmRhdGFbKytidWYtPmxlbl0gPSAnXDAnOworCWJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0g PSAnXG4nOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1 dC5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZDM1MTAzYmZiZAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaApAQCAtMCwwICsxLDIyIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX291dHB1dC5oCisgKgkgIHByb2R1Y2UgdGV4 dHVhbCBvdXRwdXQgZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX09VVFBVVF9ICisjZGVmaW5lIFBH UEFfT1VUUFVUX0gKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBn cGFfd2Fsa2VyLmgiCisKK2V4dGVybiB2b2lkIHBncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZv IGJ1ZiwKKwkJCQkJCQkgICBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjhiZmQ3NjY2ZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3BhcnNlci55CkBAIC0wLDAgKzEsMzAxIEBACisleworLyoKKyAqIFBhcnNlciBm b3IgcGxhbiBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfcGFyc2VyLnkKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg PGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1 ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvZmxvYXQuaCIKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAi cGdwYV9wYXJzZXIuaCIKKworLyoKKyAqIEJpc29uIGRvZXNuJ3QgYWxsb2NhdGUgYW55dGhpbmcg dGhhdCBuZWVkcyB0byBsaXZlIGFjcm9zcyBwYXJzZXIgY2FsbHMsCisgKiBzbyB3ZSBjYW4gZWFz aWx5IGhhdmUgaXQgdXNlIHBhbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYy4gIFRoaXMgcHJldmVudHMK KyAqIG1lbW9yeSBsZWFrcyBpZiB3ZSBlcnJvciBvdXQgZHVyaW5nIHBhcnNpbmcuCisgKi8KKyNk ZWZpbmUgWVlNQUxMT0MgcGFsbG9jCisjZGVmaW5lIFlZRlJFRSAgIHBmcmVlCislfQorCisvKiBC SVNPTiBEZWNsYXJhdGlvbnMgKi8KKyVwYXJzZS1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVwYXJz ZS1wYXJhbSB7Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wfQorJXBhcnNlLXBhcmFtIHt5eXNjYW5f dCB5eXNjYW5uZXJ9CislbGV4LXBhcmFtIHtMaXN0ICoqcmVzdWx0fQorJWxleC1wYXJhbSB7Y2hh ciAqKnBhcnNlX2Vycm9yX21zZ19wfQorJWxleC1wYXJhbSB7eXlzY2FuX3QgeXlzY2FubmVyfQor JXB1cmUtcGFyc2VyCislZXhwZWN0IDAKKyVuYW1lLXByZWZpeD0icGdwYV95eSIKKworJXVuaW9u Cit7CisJY2hhcgkgICAqc3RyOworCWludAkJCWludGVnZXI7CisJTGlzdAkgICAqbGlzdDsKKwlw Z3BhX2FkdmljZV9pdGVtICppdGVtOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCXBn cGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0OworfQorJXRva2VuIDxzdHI+IFRPS19JREVOVCBUT0tf VEFHX0pPSU5fT1JERVIgVE9LX1RBR19JTkRFWAorJXRva2VuIDxzdHI+IFRPS19UQUdfU0lNUExF IFRPS19UQUdfR0VORVJJQworJXRva2VuIDxpbnRlZ2VyPiBUT0tfSU5URUdFUgorCisldHlwZSA8 aW50ZWdlcj4gb3B0X3JpX29jY3VycmVuY2UKKyV0eXBlIDxpdGVtPiBhZHZpY2VfaXRlbQorJXR5 cGUgPGxpc3Q+IGFkdmljZV9pdGVtX2xpc3QgZ2VuZXJpY190YXJnZXRfbGlzdAorJXR5cGUgPGxp c3Q+IGluZGV4X3RhcmdldF9saXN0IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QKKyV0eXBlIDxsaXN0 PiBvcHRfcGFydGl0aW9uIHNpbXBsZV90YXJnZXRfbGlzdAorJXR5cGUgPHN0cj4gaWRlbnRpZmll ciBvcHRfcGxhbl9uYW1lCisldHlwZSA8dGFyZ2V0PiBnZW5lcmljX3N1Ymxpc3Qgam9pbl9vcmRl cl9zdWJsaXN0CisldHlwZSA8dGFyZ2V0PiByZWxhdGlvbl9pZGVudGlmaWVyCisldHlwZSA8aXRh cmdldD4gaW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyogR3JhbW1hciBm b2xsb3dzICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlzdAorCQl7CisJ CQkodm9pZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworCQkJ KnJlc3VsdCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0OiBhZHZpY2VfaXRlbV9s aXN0IGFkdmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQg PSBOSUw7IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpvaW5f b3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9h ZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCSQkLT50 YXJnZXRzID0gJDM7CisJCQlpZiAoJDMgPT0gTklMKQorCQkJCXBncGFfeXllcnJvcihyZXN1bHQs IHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJKT0lOX09SREVSIG11c3Qg aGF2ZSBhdCBsZWFzdCBvbmUgdGFyZ2V0Iik7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygnIGlu ZGV4X3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2 aWNlX2l0ZW0pOworCQkJaWYgKHN0cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJ CQkJJCQtPnRhZyA9IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNt cCgkMSwgImluZGV4X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9T Q0FOOworCQkJZWxzZQorCQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwg JDEpOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNp bXBsZV90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2Fk dmljZV9pdGVtKTsKKwkJCWlmIChzdHJjbXAoJDEsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkK KwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWVsc2UgaWYgKHN0 cmNtcCgkMSwgIm5vX2dhdGhlciIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX05PX0dB VEhFUjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgInNlcV9zY2FuIikgPT0gMCkKKwkJCQkkJC0+ dGFnID0gUEdQQV9UQUdfU0VRX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJ0aWRfc2Nh biIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJZWxzZQorCQkJ CWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRhcmdl dHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19HRU5FUklDICcoJyBnZW5lcmljX3RhcmdldF9saXN0 ICcpJworCQl7CisJCQlib29sCWZhaWw7CisKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9h ZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKCQxLCAmZmFp bCk7CisJCQlpZiAoZmFpbCkKKwkJCXsKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9l cnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCSAidW5yZWNvZ25pemVkIGFkdmljZSB0YWci KTsKKwkJCX0KKworCQkJaWYgKCQkLT50YWcgPT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJ eworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCAkMykKKwkJCQl7 CisJCQkJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIgfHwKKwkJ CQkJCWxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pID09IDEpCisJCQkJCQkJcGdwYV95eWVy cm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCQkgIkZP UkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlk ZW50aWZpZXIiKTsKKwkJCQl9CisJCQl9CisKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwk7 CisKK3JlbGF0aW9uX2lkZW50aWZpZXI6IGlkZW50aWZpZXIgb3B0X3JpX29jY3VycmVuY2Ugb3B0 X3BhcnRpdGlvbiBvcHRfcGxhbl9uYW1lCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdw YV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX0lERU5USUZJRVI7 CisJCQkkJC0+cmlkLmFsaWFzX25hbWUgPSAkMTsKKwkJCSQkLT5yaWQub2NjdXJyZW5jZSA9ICQy OworCQkJaWYgKGxpc3RfbGVuZ3RoKCQzKSA9PSAyKQorCQkJeworCQkJCSQkLT5yaWQucGFydG5z cCA9IGxpbml0aWFsKCQzKTsKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsc2Vjb25kKCQzKTsKKwkJ CX0KKwkJCWVsc2UgaWYgKCQzICE9IE5JTCkKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsaW5pdGlh bCgkMyk7CisJCQkkJC0+cmlkLnBsYW5fbmFtZSA9ICQ0OworCQl9CisJOworCitpbmRleF9uYW1l OiBpZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJn ZXQpOworCQkJJCQtPmluZG5hbWUgPSAkMTsKKwkJfQorCXwgaWRlbnRpZmllciAnLicgaWRlbnRp ZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJ CSQkLT5pbmRuYW1lc3BhY2UgPSAkMTsKKwkJCSQkLT5pbmRuYW1lID0gJDM7CisJCX0KKwk7CisK K29wdF9yaV9vY2N1cnJlbmNlOgorCScjJyBUT0tfSU5URUdFUgorCQl7CisJCQlpZiAoJDIgPD0g MCkKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVy LAorCQkJCQkJCSAib25seSBwb3NpdGl2ZSBvY2N1cnJlbmNlIG51bWJlcnMgYXJlIHBlcm1pdHRl ZCIpOworCQkJJCQgPSAkMjsKKwkJfQorCXwKKwkJeworCQkJLyogVGhlIGRlZmF1bHQgb2NjdXJy ZW5jZSBudW1iZXIgaXMgMS4gKi8KKwkJCSQkID0gMTsKKwkJfQorCTsKKworaWRlbnRpZmllcjog VE9LX0lERU5UCisJfCBUT0tfVEFHX0pPSU5fT1JERVIKKwl8IFRPS19UQUdfSU5ERVgKKwl8IFRP S19UQUdfU0lNUExFCisJfCBUT0tfVEFHX0dFTkVSSUMKKwk7CisKKy8qCisgKiBXaGVuIGdlbmVy YXRpbmcgYWR2aWNlLCB3ZSBhbHdheXMgc2NoZW1hLXF1YWxpZnkgdGhlIHBhcnRpdGlvbiBuYW1l LCBidXQKKyAqIHdoZW4gcGFyc2luZyBhZHZpY2UsIHdlIGFjY2VwdCBhIHNwZWNpZmljYXRpb24g dGhhdCBsYWNrcyBvbmUuCisgKi8KK29wdF9wYXJ0aXRpb246CisJJy8nIFRPS19JREVOVCAnLicg VE9LX0lERU5UCisJCXsgJCQgPSBsaXN0X21ha2UyKCQyLCAkNCk7IH0KKwl8ICcvJyBUT0tfSURF TlQKKwkJeyAkJCA9IGxpc3RfbWFrZTEoJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOwor CitvcHRfcGxhbl9uYW1lOgorCSdAJyBUT0tfSURFTlQKKwkJeyAkJCA9ICQyOyB9CisJfAorCQl7 ICQkID0gTlVMTDsgfQorCTsKKworZ2VuZXJpY190YXJnZXRfbGlzdDogZ2VuZXJpY190YXJnZXRf bGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8 IGdlbmVyaWNfdGFyZ2V0X2xpc3QgZ2VuZXJpY19zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5kKCQx LCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2dlbmVyaWNfc3VibGlzdDogJygn IHNpbXBsZV90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3Bh X2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNU OworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7CisKK2luZGV4X3RhcmdldF9saXN0Ogor CSAgaW5kZXhfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllciBpbmRleF9uYW1lCisJCXsK KwkJCSQyLT5pdGFyZ2V0ID0gJDM7CisJCQkkJCA9IGxhcHBlbmQoJDEsICQyKTsKKwkJfQorCXwK KwkJeyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRlcl90YXJnZXRfbGlzdDogam9pbl9vcmRl cl90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAk Mik7IH0KKwl8IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl9zdWJsaXN0CisJCXsg JCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2pvaW5f b3JkZXJfc3VibGlzdDoKKwknKCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJ JCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0g UEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwl8 ICd7JyBzaW1wbGVfdGFyZ2V0X2xpc3QgJ30nCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3Qo cGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX1VOT1JERVJF RF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7CisKK3NpbXBsZV90YXJnZXRf bGlzdDogc2ltcGxlX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxh cHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworJSUKKworLyoKKyAq IFBhcnNlIGFuIGFkdmljZV9zdHJpbmcgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2Yg cGdwYV9hZHZpY2VfaXRlbQorICogb2JqZWN0cy4gSWYgYSBwYXJzZSBlcnJvciBvY2N1cnMsIGlu c3RlYWQgcmV0dXJuIE5VTEwuCisgKgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMLCAq ZXJyb3JfcCB3aWxsIGJlIHNldCB0byB0aGUgZXJyb3IgbWVzc2FnZTsKKyAqIG90aGVyd2lzZSwg KmVycm9yX3Agd2lsbCBiZSBzZXQgdG8gTlVMTC4KKyAqLworTGlzdCAqCitwZ3BhX3BhcnNlKGNv bnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsIGNoYXIgKiplcnJvcl9wKQoreworCXl5c2Nhbl90CXNj YW5uZXI7CisJTGlzdAkgICAqcmVzdWx0OworCWNoYXIJICAgKmVycm9yID0gTlVMTDsKKworCXBn cGFfc2Nhbm5lcl9pbml0KGFkdmljZV9zdHJpbmcsICZzY2FubmVyKTsKKwlwZ3BhX3l5cGFyc2Uo JnJlc3VsdCwgJmVycm9yLCBzY2FubmVyKTsKKwlwZ3BhX3NjYW5uZXJfZmluaXNoKHNjYW5uZXIp OworCisJaWYgKGVycm9yICE9IE5VTEwpCisJeworCQkqZXJyb3JfcCA9IGVycm9yOworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwkqZXJyb3JfcCA9IE5VTEw7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5lNzI0ZjUzOGFiMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKQEAgLTAsMCArMSwyMTY2IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ3BhX3BsYW5uZXIuYworICoJICBVc2UgcGxhbm5lciBob29rcyB0 byBvYnNlcnZlIGFuZCBtb2RpZnkgcGxhbm5lciBiZWhhdmlvcgorICoKKyAqIEFsbCBpbnRlcmFj dGlvbiB3aXRoIHRoZSBjb3JlIHBsYW5uZXIgaGFwcGVucyBoZXJlLiBNdWNoIG9mIGl0IGhhcyB0 bworICogZG8gd2l0aCBlbmZvcmNpbmcgc3VwcGxpZWQgYWR2aWNlLCBidXQgd2UgYWxzbyBuZWVk IHRoZXNlIGhvb2tzIHRvCisgKiBnZW5lcmF0ZSBhZHZpY2Ugc3RyaW5ncyAodGhvdWdoIHRoZSBo ZWF2eSBsaWZ0aW5nIGluIHRoYXQgY2FzZSBpcworICogbW9zdGx5IGRvbmUgYnkgcGdwYV93YWxr ZXIuYykuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf cGxhbm5lci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50 aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5l ci5oIgorI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgor CisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91 bnN0YWJsZS5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9leHRlbmRwbGFuLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCisjaW5j bHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIK KyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRy ZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKworLyoKKyAqIFdoZW4gYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgd2UgdHJ5IGdl bmVyYXRpbmcgcmVsYXRpb24gaWRlbnRpZmllcnMgZHVyaW5nCisgKiBwbGFubmluZywgc2F2aW5n IHRoZW0gaW4gYSBoYXNoIHRhYmxlLCBhbmQgdGhlbiBjcm9zcy1jaGVja2luZyB0aGVtIGFnYWlu c3QKKyAqIHRoZSBvbmVzIGdlbmVyYXRlZCBhZnRlciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVja2VyX2tleQoreworCWNoYXIJICAgKnBsYW5f bmFtZTsKKwlJbmRleAkJcnRpOworfSBwZ3BhX3JpX2NoZWNrZXJfa2V5OworCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX3JpX2NoZWNrZXIKK3sKKwlwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleTsKKwl1aW50 MzIJCXN0YXR1czsKKwljb25zdCBjaGFyICpyaWRfc3RyaW5nOworfSBwZ3BhX3JpX2NoZWNrZXI7 CisKK3N0YXRpYyB1aW50MzIgcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tl cl9rZXkga2V5KTsKKworc3RhdGljIGlubGluZSBib29sCitwZ3BhX3JpX2NoZWNrZXJfY29tcGFy ZV9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBhLCBwZ3BhX3JpX2NoZWNrZXJfa2V5IGIpCit7CisJ aWYgKGEucnRpICE9IGIucnRpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGEucGxhbl9uYW1lID09 IE5VTEwpCisJCXJldHVybiAoYi5wbGFuX25hbWUgPT0gTlVMTCk7CisJaWYgKGIucGxhbl9uYW1l ID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gc3RyY21wKGEucGxhbl9uYW1lLCBi LnBsYW5fbmFtZSkgPT0gMDsKK30KKworI2RlZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3JpX2NoZWNr CisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJcGdwYV9yaV9jaGVja2VyCisjZGVmaW5lIFNIX0tF WV9UWVBFCQkJcGdwYV9yaV9jaGVja2VyX2tleQorI2RlZmluZSBTSF9LRVkJCQkJa2V5CisjZGVm aW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfcmlfY2hlY2tlcl9oYXNoX2tleShrZXkpCisj ZGVmaW5lCVNIX0VRVUFMKHRiLCBhLCBiKQlwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXkoYSwg YikKKyNkZWZpbmUgU0hfU0NPUEUJCQlzdGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUK KyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworI2VuZGlm CisKK3R5cGVkZWYgZW51bSBwZ3BhX2pvX291dGNvbWUKK3sKKwlQR1BBX0pPX1BFUk1JVFRFRCwJ CQkvKiBwZXJtaXQgdGhpcyBqb2luIG9yZGVyICovCisJUEdQQV9KT19ERU5JRUQsCQkJCS8qIGRl bnkgdGhpcyBqb2luIG9yZGVyICovCisJUEdQQV9KT19JTkRJRkZFUkVOVAkJCS8qIGRvIG5laXRo ZXIgKi8KK30gcGdwYV9qb19vdXRjb21lOworCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5uZXJf c3RhdGUKK3sKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7CisJYm9vbAkJZ2VuZXJh dGVfYWR2aWNlX3N0cmluZzsKKwlwZ3BhX3Ryb3ZlICp0cm92ZTsKKwlMaXN0CSAgICpzal91bmlx dWVfcmVsczsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2NoZWNrX2hh c2ggKnJpX2NoZWNrX2hhc2g7CisjZW5kaWYKK30gcGdwYV9wbGFubmVyX3N0YXRlOworCit0eXBl ZGVmIHN0cnVjdCBwZ3BhX2pvaW5fc3RhdGUKK3sKKwkvKiBNb3N0LXJlY2VudGx5LWNvbnNpZGVy ZWQgb3V0ZXIgcmVsLiAqLworCVJlbE9wdEluZm8gKm91dGVycmVsOworCisJLyogTW9zdC1yZWNl bnRseS1jb25zaWRlcmVkIGlubmVyIHJlbC4gKi8KKwlSZWxPcHRJbmZvICppbm5lcnJlbDsKKwor CS8qCisJICogQXJyYXkgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgZm9yIGFsbCBtZW1iZXJzIG9m IHRoaXMgam9pbnJlbCwgd2l0aAorCSAqIG91dGVycmVsIGlkZW50aWZpZXJzIGJlZm9yZSBpbm5l cnJlbCBpZGVudGlmaWVycy4KKwkgKi8KKwlwZ3BhX2lkZW50aWZpZXIgKnJpZHM7CisKKwkvKiBO dW1iZXIgb2Ygb3V0ZXIgcmVsIGlkZW50aWZpZXJzLiAqLworCWludAkJCW91dGVyX2NvdW50Owor CisJLyogTnVtYmVyIG9mIGlubmVyIHJlbCBpZGVudGlmaWVycy4gKi8KKwlpbnQJCQlpbm5lcl9j b3VudDsKKworCS8qCisJICogVHJvdmUgbG9va3VwIHJlc3VsdHMuCisJICoKKwkgKiBqb2luX2Vu dHJpZXMgYW5kIHJlbF9lbnRyaWVzIGFyZSBhcnJheXMgb2YgZW50cmllcywgYW5kIGpvaW5faW5k ZXhlcworCSAqIGFuZCByZWxfaW5kZXhlcyBhcmUgdGhlIGludGVnZXIgb2Zmc2V0cyB3aXRoaW4g dGhvc2UgYXJyYXlzIG9mIGVudHJpZXMKKwkgKiBwb3RlbnRpYWxseSByZWxldmFudCB0byB1cy4g VGhlICJqb2luIiBmaWVsZHMgY29ycmVzcG9uZCB0byBhIGxvb2t1cAorCSAqIHVzaW5nIFBHUEFf VFJPVkVfTE9PS1VQX0pPSU4gYW5kIHRoZSAicmVsIiBmaWVsZHMgdG8gYSBsb29rdXAgdXNpbmcK KwkgKiBQR1BBX1RST1ZFX0xPT0tVUF9SRUwuCisJICovCisJcGdwYV90cm92ZV9lbnRyeSAqam9p bl9lbnRyaWVzOworCUJpdG1hcHNldCAgKmpvaW5faW5kZXhlczsKKwlwZ3BhX3Ryb3ZlX2VudHJ5 ICpyZWxfZW50cmllczsKKwlCaXRtYXBzZXQgICpyZWxfaW5kZXhlczsKK30gcGdwYV9qb2luX3N0 YXRlOworCisvKiBTYXZlZCBob29rIHZhbHVlcyAqLworc3RhdGljIGJ1aWxkX3NpbXBsZV9yZWxf aG9va190eXBlIHByZXZfYnVpbGRfc2ltcGxlX3JlbCA9IE5VTEw7CitzdGF0aWMgam9pbl9wYXRo X3NldHVwX2hvb2tfdHlwZSBwcmV2X2pvaW5fcGF0aF9zZXR1cCA9IE5VTEw7CitzdGF0aWMgam9p bnJlbF9zZXR1cF9ob29rX3R5cGUgcHJldl9qb2lucmVsX3NldHVwID0gTlVMTDsKK3N0YXRpYyBw bGFubmVyX3NldHVwX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfc2V0dXAgPSBOVUxMOworc3RhdGlj IHBsYW5uZXJfc2h1dGRvd25faG9va190eXBlIHByZXZfcGxhbm5lcl9zaHV0ZG93biA9IE5VTEw7 CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJsZXMgKi8KK2ludAkJCXBncGFfcGxhbm5lcl9nZW5l cmF0ZV9hZHZpY2UgPSAwOworc3RhdGljIGludAlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IC0xOwor CisvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAqLworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX3Nl dHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkgICBjb25zdCBj aGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJICAgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJ ICAgZG91YmxlICp0dXBsZV9mcmFjdGlvbiwKKwkJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKTsK K3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBR dWVyeSAqcGFyc2UsCisJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBQbGFubmVk U3RtdCAqcHN0bXQpOworc3RhdGljIHZvaWQgcGdwYV9idWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkJCQkgIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkJICBSYW5nZVRi bEVudHJ5ICpydGUpOworc3RhdGljIHZvaWQgcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJICAgUmVsT3B0 SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJ ICAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0 KTsKK3N0YXRpYyB2b2lkIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJCQkgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVy cmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCSBKb2luVHlwZSBq b2ludHlwZSwKKwkJCQkJCQkJIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7CitzdGF0aWMgcGdw YV9qb2luX3N0YXRlICpwZ3BhX2dldF9qb2luX3N0YXRlKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJCQlSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpvdXRl cnJlbCwKKwkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqaW5uZXJyZWwpOworc3RhdGljIHZvaWQgcGdw YV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlKHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJ CQkJCQkJICBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCSAgcGdwYV9qb2luX3N0YXRlICpw anMpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2UoSm9p blR5cGUgam9pbnR5cGUsCisJCQkJCQkJCQkJCQl1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJ CQkJCQljaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fc3RhdGUgKnBqcyk7 CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAq cmVsLAorCQkJCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywKKwkJCQkJ CQkJCQkgICBCaXRtYXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkJCQkgICBwZ3BhX3Ryb3Zl X2VudHJ5ICpyZWxfZW50cmllcywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbF9pbmRleGVz KTsKK3N0YXRpYyB1aW50NjQgcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFn KHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZyk7CitzdGF0aWMgcGdwYV9qb19vdXRjb21lIHBncGFf am9pbl9vcmRlcl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCWlu dCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCQlwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJ CQkJCQkJCQkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkpOworc3RhdGljIGJvb2wgcGdwYV9qb2lu X21ldGhvZF9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJ CQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CitzdGF0 aWMgYm9vbCBwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGlu dCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJ CQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAqcmVzdHJp Y3RfbWV0aG9kKTsKK3N0YXRpYyBib29sIHBncGFfc2VtaWpvaW5fcGVybWl0c19qb2luKGludCBv dXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVy ICpyaWRzLAorCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJCQkg ICBib29sIG91dGVyX2lzX251bGxhYmxlLAorCQkJCQkJCQkJICAgYm9vbCAqcmVzdHJpY3RfbWV0 aG9kKTsKKworc3RhdGljIExpc3QgKnBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAq bGlzdCwgcGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90 eXBlIHR5cGUsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAor CQkJCQkJCQkJCSAgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpOworc3RhdGljIHZv aWQgcGdwYV9wbGFubmVyX2ZlZWRiYWNrX3dhcm5pbmcoTGlzdCAqZmVlZGJhY2spOworCitzdGF0 aWMgaW5saW5lIHZvaWQgcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpw cHMsCisJCQkJCQkJCQkJUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJUmVsT3B0SW5mbyAq cmVsKTsKK3N0YXRpYyB2b2lkIHBncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJf c3RhdGUgKnBwcywKKwkJCQkJCQkJCSBQbGFubmVkU3RtdCAqcHN0bXQpOworCitzdGF0aWMgY2hh ciAqcGdwYV9ibXNfdG9fY3N0cmluZyhCaXRtYXBzZXQgKmJtcyk7CitzdGF0aWMgY29uc3QgY2hh ciAqcGdwYV9qb2ludHlwZV90b19jc3RyaW5nKEpvaW5UeXBlIGpvaW50eXBlKTsKKworLyoKKyAq IEluc3RhbGwgcGxhbm5lci1yZWxhdGVkIGhvb2tzLgorICovCit2b2lkCitwZ3BhX3BsYW5uZXJf aW5zdGFsbF9ob29rcyh2b2lkKQoreworCXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gR2V0UGxhbm5l ckV4dGVuc2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCXByZXZfcGxhbm5lcl9zZXR1cCA9IHBs YW5uZXJfc2V0dXBfaG9vazsKKwlwbGFubmVyX3NldHVwX2hvb2sgPSBwZ3BhX3BsYW5uZXJfc2V0 dXA7CisJcHJldl9wbGFubmVyX3NodXRkb3duID0gcGxhbm5lcl9zaHV0ZG93bl9ob29rOworCXBs YW5uZXJfc2h1dGRvd25faG9vayA9IHBncGFfcGxhbm5lcl9zaHV0ZG93bjsKKwlwcmV2X2J1aWxk X3NpbXBsZV9yZWwgPSBidWlsZF9zaW1wbGVfcmVsX2hvb2s7CisJYnVpbGRfc2ltcGxlX3JlbF9o b29rID0gcGdwYV9idWlsZF9zaW1wbGVfcmVsOworCXByZXZfam9pbnJlbF9zZXR1cCA9IGpvaW5y ZWxfc2V0dXBfaG9vazsKKwlqb2lucmVsX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5yZWxfc2V0dXA7 CisJcHJldl9qb2luX3BhdGhfc2V0dXAgPSBqb2luX3BhdGhfc2V0dXBfaG9vazsKKwlqb2luX3Bh dGhfc2V0dXBfaG9vayA9IHBncGFfam9pbl9wYXRoX3NldHVwOworfQorCisvKgorICogQ2Fycnkg b3V0IHdoYXRldmVyIHNldHVwIHdvcmsgd2UgbmVlZCB0byBkbyBiZWZvcmUgcGxhbm5pbmcuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2V0dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwg UXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJICAgaW50IGN1cnNv ck9wdGlvbnMsIGRvdWJsZSAqdHVwbGVfZnJhY3Rpb24sCisJCQkJICAgRXhwbGFpblN0YXRlICpl cykKK3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IE5VTEw7CisJcGdwYV9wbGFubmVyX3N0YXRlICpw cHM7CisJY2hhcgkgICAqc3VwcGxpZWRfYWR2aWNlOworCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9m ZWVkYmFjayA9IGZhbHNlOworCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSBmYWxzZTsK Kwlib29sCQluZWVkc19wcHMgPSBmYWxzZTsKKworCS8qCisJICogRGVjaWRlIHdoZXRoZXIgd2Ug bmVlZCB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nLiBXZSBtdXN0IGRvIHRoaXMgaWYKKwkg KiB0aGUgdXNlciBoYXMgdG9sZCB1cyB0byBkbyBpdCBjYXRlZ29yaWNhbGx5LCBvciBpZiBhbm90 aGVyIGxvYWRhYmxlCisJICogbW9kdWxlIGhhcyByZXF1ZXN0ZWQgaXQsIG9yIGlmIHRoZSB1c2Vy IGhhcyByZXF1ZXN0ZWQgaXQgdXNpbmcgdGhlCisJICogRVhQTEFJTiAoUExBTl9BRFZJQ0UpIG9w dGlvbi4KKwkgKi8KKwlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gKHBnX3BsYW5fYWR2aWNlX2Fs d2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyB8fAorCQkJCQkJCSAgcGdwYV9wbGFubmVyX2dlbmVy YXRlX2FkdmljZSB8fAorCQkJCQkJCSAgcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oZXMp KTsKKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwkJbmVlZHNfcHBzID0gdHJ1ZTsKKwor CS8qCisJICogSWYgYW55IGFkdmljZSB3YXMgcHJvdmlkZWQsIGJ1aWxkIGEgdHJvdmUgb2YgYWR2 aWNlIGZvciB1c2UgZHVyaW5nCisJICogcGxhbm5pbmcuCisJICovCisJc3VwcGxpZWRfYWR2aWNl ID0gcGdfcGxhbl9hZHZpY2VfZ2V0X3N1cHBsaWVkX3F1ZXJ5X2FkdmljZShnbG9iLCBwYXJzZSwK KwkJCQkJCQkJCQkJCQkJCSAgIHF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQkJCSAgIGN1cnNv ck9wdGlvbnMsCisJCQkJCQkJCQkJCQkJCQkgICBlcyk7CisJaWYgKHN1cHBsaWVkX2FkdmljZSAh PSBOVUxMICYmIHN1cHBsaWVkX2FkdmljZVswXSAhPSAnXDAnKQorCXsKKwkJTGlzdAkgICAqYWR2 aWNlX2l0ZW1zOworCQljaGFyCSAgICplcnJvcjsKKworCQkvKgorCQkgKiBJZiB0aGUgc3VwcGxp ZWQgYWR2aWNlIHN0cmluZyBjb21lcyBmcm9tIHBnX3BsYW5fYWR2aWNlLmFkdmljZSwKKwkJICog cGFyc2luZyBzaG91bGRuJ3QgZmFpbCBoZXJlLCBiZWNhdXNlIHdlIG11c3QgaGF2ZSBwcmV2aW91 c2x5IHBhcnNlZAorCQkgKiBzdWNjZXNzZnVsbHkgaW4gcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2No ZWNrX2hvb2suIEhvd2V2ZXIsIGl0IG1pZ2h0CisJCSAqIGFsc28gY29tZSBmcm9tIGEgaG9vayBy ZWdpc3RlcmVkIHZpYSBwZ19wbGFuX2FkdmljZV9hZGRfYWR2aXNvciwKKwkJICogYW5kIHdlIGNh bid0IGJlIHN1cmUgd2hldGhlciB0aGF0J3MgdmFsaWQuIChQbHVzLCBoYXZpbmcgYW4gZXJyb3IK KwkJICogY2hlY2sgaGVyZSBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIGFueXdheSwganVzdCBmb3Ig c2FmZXR5LikKKwkJICovCisJCWFkdmljZV9pdGVtcyA9IHBncGFfcGFyc2Uoc3VwcGxpZWRfYWR2 aWNlLCAmZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCWVy cm1zZygiY291bGQgbm90IHBhcnNlIHN1cHBsaWVkIGFkdmljZTogJXMiLCBlcnJvcikpOworCisJ CS8qCisJCSAqIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgYWR2aWNlIHN0cmluZyB3YXMgbm9uLWVt cHR5IGJ1dCBjb250YWluZWQgbm8KKwkJICogYWN0dWFsIGFkdmljZSwgZS5nLiBpdCB3YXMgYWxs IHdoaXRlc3BhY2UuCisJCSAqLworCQlpZiAoYWR2aWNlX2l0ZW1zICE9IE5JTCkKKwkJeworCQkJ dHJvdmUgPSBwZ3BhX2J1aWxkX3Ryb3ZlKGFkdmljZV9pdGVtcyk7CisJCQluZWVkc19wcHMgPSB0 cnVlOworCisJCQkvKgorCQkJICogSWYgd2Uga25vdyB0aGF0IHdlJ3JlIHJ1bm5pbmcgdW5kZXIg RVhQTEFJTiwgb3IgaWYgdGhlIHVzZXIgaGFzCisJCQkgKiB0b2xkIHVzIHRvIGFsd2F5cyBkbyB0 aGUgd29yaywgZ2VuZXJhdGUgYWR2aWNlIGZlZWRiYWNrLgorCQkJICovCisJCQlpZiAoZXMgIT0g TlVMTCB8fCBwZ19wbGFuX2FkdmljZV9mZWVkYmFja193YXJuaW5ncyB8fAorCQkJCXBnX3BsYW5f YWR2aWNlX2Fsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscykKKwkJCQlnZW5lcmF0ZV9hZHZpY2Vf ZmVlZGJhY2sgPSB0cnVlOworCQl9CisJfQorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CisJLyoKKwkgKiBJZiBhc3NlcnRzIGFyZSBlbmFibGVkLCBhbHdheXMgYnVpbGQgYSBwcml2YXRl IHN0YXRlIG9iamVjdCBmb3IKKwkgKiBjcm9zcy1jaGVja3MuCisJICovCisJbmVlZHNfcHBzID0g dHJ1ZTsKKyNlbmRpZgorCisJLyoKKwkgKiBXZSBvbmx5IGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBh IHByaXZhdGUgc3RhdGUgb2JqZWN0IGlmIGl0J3MgbmVlZGVkIGZvcgorCSAqIHNvbWUgcHVycG9z ZS4gVGhhdCBjb3VsZCBiZSAoMSkgcmVjb3JkaW5nIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIGdlbmVy YXRlCisJICogYW4gYWR2aWNlIHN0cmluZywgKDIpIHN0b3JpbmcgYSB0cm92ZSBvZiBzdXBwbGll ZCBhZHZpY2UsIG9yICgzKQorCSAqIGZhY2lsaXRhdGluZyBkZWJ1Z2dpbmcgY3Jvc3MtY2hlY2tz IHdoZW4gYXNzZXJ0cyBhcmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAobmVlZHNfcHBzKQorCXsKKwkJ cHBzID0gcGFsbG9jMF9vYmplY3QocGdwYV9wbGFubmVyX3N0YXRlKTsKKwkJcHBzLT5nZW5lcmF0 ZV9hZHZpY2VfZmVlZGJhY2sgPSBnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7CisJCXBwcy0+Z2Vu ZXJhdGVfYWR2aWNlX3N0cmluZyA9IGdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisJCXBwcy0+dHJv dmUgPSB0cm92ZTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCXBwcy0+cmlfY2hlY2tf aGFzaCA9CisJCQlwZ3BhX3JpX2NoZWNrX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwgMTAy NCwgTlVMTCk7CisjZW5kaWYKKwkJU2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2Is IHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwcHMpOworCX0KKworCS8qIFBhc3MgY2FsbCB0byBwcmV2 aW91cyBob29rLiAqLworCWlmIChwcmV2X3BsYW5uZXJfc2V0dXApCisJCSgqcHJldl9wbGFubmVy X3NldHVwKSAoZ2xvYiwgcGFyc2UsIHF1ZXJ5X3N0cmluZywgY3Vyc29yT3B0aW9ucywKKwkJCQkJ CQkgICB0dXBsZV9mcmFjdGlvbiwgZXMpOworfQorCisvKgorICogQ2Fycnkgb3V0IHdoYXRldmVy IHdvcmsgd2Ugd2FudCB0byBkbyBhZnRlciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLworc3Rh dGljIHZvaWQKK3BncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVy eSAqcGFyc2UsCisJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBQbGFubmVkU3RtdCAq cHN0bXQpCit7CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisJcGdwYV90cm92ZSAqdHJvdmUg PSBOVUxMOworCXBncGFfcGxhbl93YWxrZXJfY29udGV4dCB3YWxrZXIgPSB7MH07CS8qIHBsYWNh dGUgY29tcGlsZXIgKi8KKwlib29sCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBmYWxzZTsK Kwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJTGlzdAkgICAqcGdwYV9p dGVtcyA9IE5JTDsKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzID0gTlVMTDsKKwor CS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVw KCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2IsIHBsYW5u ZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzICE9IE5VTEwpCisJeworCQl0cm92ZSA9IHBwcy0+ dHJvdmU7CisJCWdlbmVyYXRlX2FkdmljZV9mZWVkYmFjayA9IHBwcy0+Z2VuZXJhdGVfYWR2aWNl X2ZlZWRiYWNrOworCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gcHBzLT5nZW5lcmF0ZV9hZHZp Y2Vfc3RyaW5nOworCX0KKworCS8qCisJICogSWYgd2UncmUgdHJ5aW5nIHRvIGdlbmVyYXRlIGFu IGFkdmljZSBzdHJpbmcgb3IgaWYgd2UncmUgdHJ5aW5nIHRvCisJICogcHJvdmlkZSBhZHZpY2Ug ZmVlZGJhY2ssIHRoZW4gd2Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSByYW5nZSB0YWJsZQorCSAqIGlk ZW50aWZpZXJzLgorCSAqLworCWlmIChnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nIHx8IGdlbmVyYXRl X2FkdmljZV9mZWVkYmFjaykKKwl7CisJCXBncGFfcGxhbl93YWxrZXIoJndhbGtlciwgcHN0bXQs IHBwcy0+c2pfdW5pcXVlX3JlbHMpOworCQlydF9pZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lk ZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQpOworCX0KKworCS8qIEdlbmVyYXRlIHRo ZSBhZHZpY2Ugc3RyaW5nLCBpZiB3ZSBuZWVkIHRvIGRvIHNvLiAqLworCWlmIChnZW5lcmF0ZV9h ZHZpY2Vfc3RyaW5nKQorCXsKKwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZzsKKwkJU3RyaW5nSW5m b0RhdGEgYnVmOworCisJCS8qIEdlbmVyYXRlIGEgdGV4dHVhbCBhZHZpY2Ugc3RyaW5nLiAqLwor CQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJcGdwYV9vdXRwdXRfYWR2aWNlKCZidWYsICZ3YWxr ZXIsIHJ0X2lkZW50aWZpZXJzKTsKKwkJYWR2aWNlX3N0cmluZyA9IGJ1Zi5kYXRhOworCisJCS8q IFNhdmUgdGhlIGFkdmljZSBzdHJpbmcgaW4gdGhlIGZpbmFsIHBsYW4uICovCisJCXBncGFfaXRl bXMgPSBsYXBwZW5kKHBncGFfaXRlbXMsCisJCQkJCQkJIG1ha2VEZWZFbGVtKCJhZHZpY2Vfc3Ry aW5nIiwKKwkJCQkJCQkJCQkgKE5vZGUgKikgbWFrZVN0cmluZyhhZHZpY2Vfc3RyaW5nKSwKKwkJ CQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHRyeWluZyB0byBwcm92aWRl IGFkdmljZSBmZWVkYmFjaywgdGhlbiB3ZSB3aWxsIG5lZWQgdG8KKwkgKiBhbmFseXplIGhvdyBz dWNjZXNzZnVsIHRoZSBhZHZpY2Ugd2FzLgorCSAqLworCWlmIChnZW5lcmF0ZV9hZHZpY2VfZmVl ZGJhY2spCisJeworCQlMaXN0CSAgICpmZWVkYmFjayA9IE5JTDsKKworCQkvKgorCQkgKiBJbmpl Y3QgYSBOb2RlLXRyZWUgcmVwcmVzZW50YXRpb24gb2YgYWxsIHRoZSB0cm92ZS1lbnRyeSBmbGFn cyBpbnRvCisJCSAqIHRoZSBQbGFubmVkU3RtdC4KKwkJICovCisJCWZlZWRiYWNrID0gcGdwYV9w bGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJ CQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZp ZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNr KGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xP T0tVUF9KT0lOLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxrZXIpOworCQlmZWVk YmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ssCisJCQkJCQkJCQkJ CQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX1JFTCwKKwkJCQkJCQkJCQkJ CXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKworCQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChwZ3Bh X2l0ZW1zLCBtYWtlRGVmRWxlbSgiZmVlZGJhY2siLAorCQkJCQkJCQkJCQkJCSAoTm9kZSAqKSBm ZWVkYmFjaywgLTEpKTsKKworCQkvKiBJZiB3ZSB3ZXJlIGFza2VkIHRvIGdlbmVyYXRlIGZlZWRi YWNrIHdhcm5pbmdzLCBkbyBzby4gKi8KKwkJaWYgKHBnX3BsYW5fYWR2aWNlX2ZlZWRiYWNrX3dh cm5pbmdzKQorCQkJcGdwYV9wbGFubmVyX2ZlZWRiYWNrX3dhcm5pbmcoZmVlZGJhY2spOworCX0K KworCS8qIFB1c2ggd2hhdGV2ZXIgZGF0YSB3ZSdyZSBzYXZpbmcgaW50byB0aGUgUGxhbm5lZFN0 bXQuICovCisJaWYgKHBncGFfaXRlbXMgIT0gTklMKQorCQlwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRl ID0KKwkJCWxhcHBlbmQocHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJbWFrZURlZkVsZW0o InBnX3BsYW5fYWR2aWNlIiwgKE5vZGUgKikgcGdwYV9pdGVtcywgLTEpKTsKKworCS8qCisJICog SWYgYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgY3Jvc3MtY2hlY2sgdGhlIGdlbmVyYXRlZCByYW5n ZSB0YWJsZQorCSAqIGlkZW50aWZpZXJzLgorCSAqLworCWlmIChwcHMgIT0gTlVMTCkKKwkJcGdw YV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBwcywgcHN0bXQpOworCisJLyogUGFzcyBjYWxsIHRvIHBy ZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfcGxhbm5lcl9zaHV0ZG93bikKKwkJKCpwcmV2X3Bs YW5uZXJfc2h1dGRvd24pIChnbG9iLCBwYXJzZSwgcXVlcnlfc3RyaW5nLCBwc3RtdCk7Cit9CisK Ky8qCisgKiBIb29rIGZ1bmN0aW9uIGZvciBidWlsZF9zaW1wbGVfcmVsKCkuCisgKgorICogV2Ug Y2FuIGFwcGx5IHNjYW4gYWR2aWNlIGF0IHRoaXMgcG9pbnQsIGFuZCB3ZSBhbHNvIHVzZSB0aGlz IGFzIGFuCisgKiBvcHBvcnR1bml0eSB0byBkbyByYW5nZS10YWJsZSBpZGVudGlmaWVyIGNyb3Nz LWNoZWNraW5nIGluIGFzc2VydC1lbmFibGVkCisgKiBidWlsZHMuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX2J1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCisJ LyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJfc2V0dXAo KS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xvYiwg cGxhbm5lcl9leHRlbnNpb25faWQpOworCisJLyogU2F2ZSBkZXRhaWxzIG5lZWRlZCBmb3IgcmFu Z2UgdGFibGUgaWRlbnRpZmllciBjcm9zcy1jaGVja2luZy4gKi8KKwlpZiAocHBzICE9IE5VTEwp CisJCXBncGFfcmlfY2hlY2tlcl9zYXZlKHBwcywgcm9vdCwgcmVsKTsKKworCS8qIElmIHF1ZXJ5 IGFkdmljZSB3YXMgcHJvdmlkZWQsIHNlYXJjaCBmb3IgcmVsZXZhbnQgZW50cmllcy4gKi8KKwlp ZiAocHBzICE9IE5VTEwgJiYgcHBzLT50cm92ZSAhPSBOVUxMKQorCXsKKwkJcGdwYV9pZGVudGlm aWVyIHJpZDsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9zY2FuOworCQlwZ3BhX3Ryb3Zl X3Jlc3VsdCB0cmVzdWx0X3JlbDsKKworCQkvKiBTZWFyY2ggZm9yIHNjYW4gYWR2aWNlIGFuZCBn ZW5lcmFsIHJlbCBhZHZpY2UuICovCisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShy b290LCByZWwtPnJlbGlkLCAmcmlkKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwg UEdQQV9UUk9WRV9MT09LVVBfU0NBTiwgMSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRfc2Nhbik7 CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCwg MSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRfcmVsKTsKKworCQkvKiBJZiByZWxldmFudCBlbnRy aWVzIHdlcmUgZm91bmQsIGFwcGx5IHRoZW0uICovCisJCWlmICh0cmVzdWx0X3NjYW4uaW5kZXhl cyAhPSBOVUxMIHx8IHRyZXN1bHRfcmVsLmluZGV4ZXMgIT0gTlVMTCkKKwkJeworCQkJdWludDY0 CQlvcmlnaW5hbF9tYXNrID0gcmVsLT5wZ3NfbWFzazsKKworCQkJcGdwYV9wbGFubmVyX2FwcGx5 X3NjYW5fYWR2aWNlKHJlbCwKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uZW50cmllcywKKwkJ CQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uaW5kZXhlcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3Jl bC5lbnRyaWVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfcmVsLmluZGV4ZXMpOworCisJCQkvKiBF bWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAqLworCQkJaWYgKHBnX3BsYW5fYWR2 aWNlX3RyYWNlX21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSByZWwtPnBnc19tYXNrKQorCQkJCWVy ZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yIFJUSSAldSBj aGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJCQkJCQkJcmVsLT5y ZWxpZCwgb3JpZ2luYWxfbWFzaywgcmVsLT5wZ3NfbWFzaykpKTsKKwkJfQorCX0KKworCS8qIFBh c3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2J1aWxkX3NpbXBsZV9yZWwp CisJCSgqcHJldl9idWlsZF9zaW1wbGVfcmVsKSAocm9vdCwgcmVsLCBydGUpOworfQorCisvKgor ICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gYW55IG1l dGhvZCBvZiBpbXBsZW1lbnRpbmcKKyAqIHRoaXMgam9pbi4KKyAqCisgKiBBbHRob3VnaCB3ZSdy ZSBwYXNzZWQgdGhlIG91dGVycmVsIGFuZCBpbm5lcnJlbCBoZXJlLCB0aG9zZSBhcmUganVzdAor ICogd2hhdGV2ZXIgdmFsdWVzIGhhcHBlbmVkIHRvIHByb21wdCB0aGUgY3JlYXRpb24gb2YgdGhp cyBqb2lucmVsOyB0aGV5CisgKiBzaG91bGRuJ3QgcmVhbGx5IGluZmx1ZW5jZSBvdXIgY2hvaWNl IG9mIHdoYXQgYWR2aWNlIHRvIGFwcGx5LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2lucmVs X3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCSAgIFJl bE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkgICBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0KQoreworCXBncGFfam9pbl9zdGF0 ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1T X01VTFRJUExFKTsKKworCS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3Ig dGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUocm9vdCwgam9pbnJlbCwg b3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJlIGlzIHJlbGV2YW50IGFkdmljZSwg Y2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4gKi8KKwlpZiAocGpzICE9IE5VTEwp CisJeworCQl1aW50NjQJCW9yaWdpbmFsX21hc2sgPSBqb2lucmVsLT5wZ3NfbWFzazsKKworCQlw Z3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UoJmpvaW5yZWwtPnBnc19tYXNrLAorCQkJ CQkJCQkJCSAgcm9vdC0+cGxhbl9uYW1lLAorCQkJCQkJCQkJCSAgcGpzKTsKKworCQkvKiBFbWl0 IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAqLworCQlpZiAocGdfcGxhbl9hZHZpY2Vf dHJhY2VfbWFzayAmJiBvcmlnaW5hbF9tYXNrICE9IGpvaW5yZWwtPnBnc19tYXNrKQorCQkJZXJl cG9ydChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciBqb2luIG9uIFJU SXMgJXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJCQkJ cGdwYV9ibXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxpZHMpLAorCQkJCQkJCW9yaWdpbmFsX21h c2ssCisJCQkJCQkJam9pbnJlbC0+cGdzX21hc2spKSk7CisJfQorCisJLyogUGFzcyBjYWxsIHRv IHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfam9pbnJlbF9zZXR1cCkKKwkJKCpwcmV2X2pv aW5yZWxfc2V0dXApIChyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJ ICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlk ZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCBvZgor ICogaW1wbGVtZW50aW5nIHRoaXMgcGFydGljdWxhciBqb2luLgorICovCitzdGF0aWMgdm9pZAor cGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5y ZWwsCisJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJ CQkJCSBKb2luVHlwZSBqb2ludHlwZSwgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQoreworCXBn cGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJl bGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qCisJICogSWYgd2UncmUgY29uc2lkZXJpbmcg aW1wbGVtZW50aW5nIGEgc2VtaWpvaW4gYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSwKKwkgKiBt YWtlIGEgbm90ZSBvZiBpdCBpbiB0aGUgcGdwYV9wbGFubmVyX3N0YXRlLiBTZWUgY29tbWVudHMg Zm9yCisJICogcGdwYV9zal91bmlxdWVfcmVsIGZvciB3aHkgd2UgZG8gdGhpcy4KKwkgKi8KKwlp ZiAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIgfHwgam9pbnR5cGUgPT0gSk9JTl9VTklR VUVfSU5ORVIpCisJeworCQlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwkJUmVsT3B0SW5mbyAq dW5pcXVlcmVsOworCisJCXVuaXF1ZXJlbCA9IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVS ID8gb3V0ZXJyZWwgOiBpbm5lcnJlbDsKKwkJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lv blN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwkJaWYgKHBwcyAhPSBO VUxMICYmCisJCQkocHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nIHx8IHBwcy0+Z2VuZXJhdGVf YWR2aWNlX2ZlZWRiYWNrKSkKKwkJeworCQkJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCQkJLyog QXZvaWQgYWRkaW5nIGR1cGxpY2F0ZXMuICovCisJCQlmb3JlYWNoX3B0cihwZ3BhX3NqX3VuaXF1 ZV9yZWwsIHVyLCBwcHMtPnNqX3VuaXF1ZV9yZWxzKQorCQkJeworCQkJCS8qCisJCQkJICogV2Ug c2hvdWxkIGFsd2F5cyB1c2UgdGhlIHNhbWUgcG9pbnRlciBmb3IgdGhlIHNhbWUgcGxhbgorCQkJ CSAqIG5hbWUsIHNvIHdlIG5lZWQgbm90IHVzZSBzdHJjbXAoKSBoZXJlLgorCQkJCSAqLworCQkJ CWlmIChyb290LT5wbGFuX25hbWUgPT0gdXItPnBsYW5fbmFtZSAmJgorCQkJCQlibXNfZXF1YWwo dW5pcXVlcmVsLT5yZWxpZHMsIHVyLT5yZWxpZHMpKQorCQkJCXsKKwkJCQkJZm91bmQgPSB0cnVl OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qIElmIG5vdCBhIGR1cGxpY2F0ZSwg YXBwZW5kIHRvIHRoZSBsaXN0LiAqLworCQkJaWYgKCFmb3VuZCkKKwkJCXsKKwkJCQlwZ3BhX3Nq X3VuaXF1ZV9yZWwgKnVyID0gcGFsbG9jX29iamVjdChwZ3BhX3NqX3VuaXF1ZV9yZWwpOworCisJ CQkJdXItPnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKKwkJCQl1ci0+cmVsaWRzID0gdW5p cXVlcmVsLT5yZWxpZHM7CisJCQkJcHBzLT5zal91bmlxdWVfcmVscyA9IGxhcHBlbmQocHBzLT5z al91bmlxdWVfcmVscywgdXIpOworCQkJfQorCQl9CisJfQorCisJLyogR2V0IG91ciBwcml2YXRl IHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJcGpzID0gcGdwYV9nZXRfam9p bl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwpOworCisJLyogSWYgdGhl cmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFwcGx5IGl0 LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9IGV4 dHJhLT5wZ3NfbWFzazsKKworCQlwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShq b2ludHlwZSwKKwkJCQkJCQkJCQkJJmV4dHJhLT5wZ3NfbWFzaywKKwkJCQkJCQkJCQkJcm9vdC0+ cGxhbl9uYW1lLAorCQkJCQkJCQkJCQlwanMpOworCisJCS8qIEVtaXQgZGVidWdnaW5nIG1lc3Nh Z2UsIGlmIGVuYWJsZWQuICovCisJCWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYmIG9y aWdpbmFsX21hc2sgIT0gZXh0cmEtPnBnc19tYXNrKQorCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJ CQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciAlcyBqb2luIG9uICVzIHdpdGggb3V0ZXIgJXMg YW5kIGlubmVyICVzIGNoYW5nZWQgZnJvbSAweCUiIFBSSXg2NCAiIHRvIDB4JSIgUFJJeDY0LAor CQkJCQkJCXBncGFfam9pbnR5cGVfdG9fY3N0cmluZyhqb2ludHlwZSksCisJCQkJCQkJcGdwYV9i bXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxpZHMpLAorCQkJCQkJCXBncGFfYm1zX3RvX2NzdHJp bmcob3V0ZXJyZWwtPnJlbGlkcyksCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmluZyhpbm5lcnJl bC0+cmVsaWRzKSwKKwkJCQkJCQlvcmlnaW5hbF9tYXNrLAorCQkJCQkJCWV4dHJhLT5wZ3NfbWFz aykpKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJl dl9qb2luX3BhdGhfc2V0dXApCisJCSgqcHJldl9qb2luX3BhdGhfc2V0dXApIChyb290LCBqb2lu cmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCSBqb2ludHlwZSwgZXh0cmEpOworfQor CisvKgorICogU2VhcmNoIGZvciBhZHZpY2UgcGVydGFpbmluZyB0byBhIHByb3Bvc2VkIGpvaW4u CisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3RhdGUgKgorcGdwYV9nZXRfam9pbl9zdGF0ZShQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJUmVsT3B0SW5mbyAqb3V0 ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBz OworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCWJvb2wJCW5ld19wanMgPSBmYWxzZTsKKworCS8q IEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCku ICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBs YW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzID09IE5VTEwgfHwgcHBzLT50cm92ZSA9PSBO VUxMKQorCXsKKwkJLyogTm8gYWR2aWNlIGFwcGxpZXMgdG8gdGhpcyBxdWVyeSwgaGVuY2Ugbm9u ZSB0byB0aGlzIGpvaW5yZWwuICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogU2Vl IHdoZXRoZXIgd2UndmUgcHJldmlvdXNseSBhc3NvY2lhdGVkIGEgcGdwYV9qb2luX3N0YXRlIHdp dGggdGhpcworCSAqIGpvaW5yZWwuIElmIHdlIGhhdmUgbm90LCB3ZSBuZWVkIHRvIHRyeSB0byBj b25zdHJ1Y3Qgb25lLiBJZiB3ZSBoYXZlLAorCSAqIHRoZW4gdGhlcmUgYXJlIHR3byBjYXNlczog KGEpIGlmIGlubmVycmVsIGFuZCBvdXRlcnJlbCBhcmUgdW5jaGFuZ2VkLAorCSAqIHdlIGNhbiBz aW1wbHkgdXNlIGl0LCBhbmQgKGIpIGlmIHRoZXkgaGF2ZSBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJl amlnZ2VyCisJICogdGhlIGFycmF5IG9mIGlkZW50aWZpZXJzIGJ1dCBjYW4gc3RpbGwgc2tpcCB0 aGUgdHJvdmUgbG9va3VwLgorCSAqLworCXBqcyA9IEdldFJlbE9wdEluZm9FeHRlbnNpb25TdGF0 ZShqb2lucmVsLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBqcyAhPSBOVUxMKQorCXsK KwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYgcGpzLT5yZWxfaW5kZXhlcyA9PSBO VUxMKQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlcmUncyBubyBwb3RlbnRpYWxseSByZWxldmFu dCBhZHZpY2UsIHRoZW4gdGhlIHByZXNlbmNlIG9mCisJCQkgKiB0aGlzIHBncGFfam9pbl9zdGF0 ZSBhY3RzIGxpa2UgYSBuZWdhdGl2ZSBjYWNoZSBlbnRyeTogaXQgdGVsbHMKKwkJCSAqIHVzIG5v dCB0byBib3RoZXIgc2VhcmNoaW5nIHRoZSB0cm92ZSBmb3IgYWR2aWNlLCBiZWNhdXNlIHdlCisJ CQkgKiB3aWxsIG5vdCBmaW5kIGFueS4KKwkJCSAqLworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwor CQlpZiAocGpzLT5vdXRlcnJlbCA9PSBvdXRlcnJlbCAmJiBwanMtPmlubmVycmVsID09IGlubmVy cmVsKQorCQl7CisJCQkvKiBObyB1cGRhdGVzIHJlcXVpcmVkLCBzbyBqdXN0IHJldHVybi4gKi8K KwkJCS8qIFhYWC4gRG9lcyB0aGlzIG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZlcmVudCB1bmRl ciBHRVFPPyAqLworCQkJcmV0dXJuIHBqczsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlcmUn cyBubyBwZ3BhX2pvaW5fc3RhdGUgeWV0LCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZS4gVHJvdmUg a2V5cworCSAqIHdpbGwgbm90IGdldCBidWlsdCBmb3IgUlRFX0pPSU4gUlRFcywgc28gdGhlIGFy cmF5IG1heSBlbmQgdXAgYmVpbmcKKwkgKiBsYXJnZXIgdGhhbiBuZWVkZWQuIEl0J3Mgbm90IHdv cnRoIHRyeWluZyB0byBjb21wdXRlIGEgcGVyZmVjdGx5CisJICogYWNjdXJhdGUgY291bnQgaGVy ZS4KKwkgKi8KKwlpZiAocGpzID09IE5VTEwpCisJeworCQlpbnQJCQlwZXNzaW1pc3RpY19jb3Vu dCA9IGJtc19udW1fbWVtYmVycyhqb2lucmVsLT5yZWxpZHMpOworCisJCXBqcyA9IHBhbGxvYzBf b2JqZWN0KHBncGFfam9pbl9zdGF0ZSk7CisJCXBqcy0+cmlkcyA9IHBhbGxvY19hcnJheShwZ3Bh X2lkZW50aWZpZXIsIHBlc3NpbWlzdGljX2NvdW50KTsKKwkJbmV3X3BqcyA9IHRydWU7CisJfQor CisJLyoKKwkgKiBFaXRoZXIgd2UganVzdCBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0YXRl LCBvciB0aGUgZXhpc3Rpbmcgb25lCisJICogbmVlZHMgcmVjb25maWd1cmluZyBmb3IgYSBuZXcg aW5uZXJyZWwgYW5kIG91dGVycmVsLiBUaGUgcmVxdWlyZWQgYXJyYXkKKwkgKiBzaXplIGNhbid0 IGNoYW5nZSwgc28gd2UgY2FuIG92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgb25lLgorCSAqLworCXBq cy0+b3V0ZXJyZWwgPSBvdXRlcnJlbDsKKwlwanMtPmlubmVycmVsID0gaW5uZXJyZWw7CisJcGpz LT5vdXRlcl9jb3VudCA9CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMocm9v dCwgb3V0ZXJyZWwtPnJlbGlkcywgcGpzLT5yaWRzKTsKKwlwanMtPmlubmVyX2NvdW50ID0KKwkJ cGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhyb290LCBpbm5lcnJlbC0+cmVsaWRz LAorCQkJCQkJCQkJCSAgIHBqcy0+cmlkcyArIHBqcy0+b3V0ZXJfY291bnQpOworCisJLyoKKwkg KiBJZiB3ZSBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0YXRlLCBzZWFyY2ggb3VyIHRyb3Zl IG9mIGFkdmljZSBmb3IKKwkgKiByZWxldmFudCBlbnRyaWVzLiBUaGUgdHJvdmUgbG9va3VwIHdp bGwgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdHMgZm9yCisJICogZXZlcnkgb3V0ZXJyZWwvaW5uZXJy ZWwgY29tYmluYXRpb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVwZWF0IHRoYXQKKwkgKiB3b3Jr IGV2ZXJ5IHRpbWUuCisJICovCisJaWYgKG5ld19wanMpCisJeworCQlwZ3BhX3Ryb3ZlX3Jlc3Vs dCB0cmVzdWx0OworCisJCS8qIEZpbmQgam9pbiBlbnRyaWVzLiAqLworCQlwZ3BhX3Ryb3ZlX2xv b2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJICBwanMtPm91 dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpzLT5yaWRzLCAmdHJlc3Vs dCk7CisJCXBqcy0+am9pbl9lbnRyaWVzID0gdHJlc3VsdC5lbnRyaWVzOworCQlwanMtPmpvaW5f aW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBGaW5kIHJlbCBlbnRyaWVzLiAqLwor CQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJ CQkJCQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBwanMt PnJpZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5yZWxfZW50cmllcyA9IHRyZXN1bHQuZW50cmllczsK KwkJcGpzLT5yZWxfaW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBOb3cgdGhhdCB0 aGUgbmV3IHBncGFfam9pbl9zdGF0ZSBpcyBmdWxseSB2YWxpZCwgc2F2ZSBhIHBvaW50ZXIuICov CisJCVNldFJlbE9wdEluZm9FeHRlbnNpb25TdGF0ZShqb2lucmVsLCBwbGFubmVyX2V4dGVuc2lv bl9pZCwgcGpzKTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSB3YXMgbm8gcmVsZXZhbnQgYWR2aWNl IGZvdW5kLCBqdXN0IHJldHVybiBOVUxMLiBUaGlzCisJCSAqIHBncGFfam9pbl9zdGF0ZSB3aWxs IHN0aWNrIGFyb3VuZCBhcyBhIHNvcnQgb2YgbmVnYXRpdmUgY2FjaGUKKwkJICogZW50cnksIHNv IHRoYXQgZnV0dXJlIGNhbGxzIGZvciB0aGlzIHNhbWUgam9pbnJlbCBxdWlja2x5IHJldHVybgor CQkgKiBOVUxMLgorCQkgKi8KKwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYgcGpz LT5yZWxfaW5kZXhlcyA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBq czsKK30KKworLyoKKyAqIEVuZm9yY2Ugb3ZlcmFsbCByZXN0cmljdGlvbnMgb24gYSBqb2luIHJl bGF0aW9uIHRoYXQgYXBwbHkgdW5pZm9ybWx5CisgKiByZWdhcmRsZXNzIG9mIHRoZSBjaG9pY2Ug b2YgaW5uZXIgYW5kIG91dGVyIHJlbC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9h cHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsIGNoYXIgKnBsYW5fbmFtZSwK KwkJCQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7CisJaW50 CQkJZmxhZ3M7CisJYm9vbAkJZ2F0aGVyX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDY0CQlnYXRo ZXJfbWFzayA9IDA7CisJQml0bWFwc2V0ICAqZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOwor CUJpdG1hcHNldCAgKmdhdGhlcl9mdWxsX21hdGNoID0gTlVMTDsKKwlib29sCQlwYXJ0aXRpb253 aXNlX2NvbmZsaWN0ID0gZmFsc2U7CisJaW50CQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsK KwlCaXRtYXBzZXQgICpwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJpdG1h cHNldCAgKnBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9IE5VTEw7CisKKwkvKiBJdGVyYXRlIG92 ZXIgYWxsIHBvc3NpYmx5LXJlbGV2YW50IGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4 dF9tZW1iZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2Vu dHJ5ICplbnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBlIGl0bTsK KwkJYm9vbAkJZnVsbF9tYXRjaCA9IGZhbHNlOworCQl1aW50NjQJCW15X2dhdGhlcl9tYXNrID0g MDsKKwkJaW50CQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsJLyogPjAgeWVzLCA8MCBu byAqLworCisJCS8qCisJCSAqIEZvciBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSwgaWYgdGhlIHNw ZWNpZmllZCByZWxhdGlvbnMgZXhhY3RseQorCQkgKiBtYXRjaCB0aGlzIGpvaW5yZWwsIGRvIHdo YXRldmVyIHRoZSBhZHZpY2Ugc2F5czsgb3RoZXJ3aXNlLCBkb24ndAorCQkgKiBhbGxvdyBHYXRo ZXIgb3IgR2F0aGVyIE1lcmdlIGF0IHRoaXMgbGV2ZWwuIEZvciBOT19HQVRIRVIsIHRoZXJlCisJ CSAqIG11c3QgYmUgYSBzaW5nbGUgdGFyZ2V0IHJlbGF0aW9uIHdoaWNoIG11c3QgYmUgaW5jbHVk ZWQgaW4gdGhpcworCQkgKiBqb2lucmVsLCBzbyBqdXN0IGRvbid0IGFsbG93IEdhdGhlciBvciBH YXRoZXIgTWVyZ2UgaGVyZSwgZnVsbAorCQkgKiBzdG9wLgorCQkgKi8KKwkJaWYgKGVudHJ5LT50 YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlteV9nYXRoZXJfbWFzayA9IFBHU19D T05TSURFUl9OT05QQVJUSUFMOworCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCX0KKwkJZWxzZQor CQl7CisJCQlpbnQJCQl0b3RhbF9jb3VudDsKKworCQkJdG90YWxfY291bnQgPSBwanMtPm91dGVy X2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudDsKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0 Y2hfdGFyZ2V0KHRvdGFsX2NvdW50LCBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQllbnRyeS0+dGFy Z2V0KTsKKwkJCUFzc2VydChpdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCisJCQlpZiAoaXRt ID09IFBHUEFfSVRNX0VRVUFMKQorCQkJeworCQkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQkJCWlm IChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJCW15X3BhcnRpdGlv bndpc2Vfb3V0Y29tZSA9IDE7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19H QVRIRVIpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCQllbHNlIGlmIChl bnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQkJbXlfZ2F0aGVyX21hc2sg PSBQR1NfR0FUSEVSX01FUkdFOworCQkJCWVsc2UKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQpIGVudHJ5LT50YWcpOworCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogSWYgc3BlY2lmaWVkIHJlbGF0aW9ucyBkb24ndCBl eGFjdGx5IG1hdGNoIHRoaXMgam9pbnJlbCwKKwkJCQkgKiB0aGVuIHdlIHNob3VsZCBkbyB0aGUg b3Bwb3NpdGUgb2Ygd2hhdGV2ZXIgdGhlIGFkdmljZSBzYXlzLgorCQkJCSAqIEZvciBpbnN0YW5j ZSwgaWYgd2UgaGF2ZSBQQVJUSVRJT05XSVNFKChhIGIgYykpIG9yCisJCQkJICogR0FUSEVSKChh IGIgYykpIGFuZCB0aGlzIGpvaW5yZWwgY292ZXJzIHthLCBifSBvciB7YSwgYiwgYywKKwkJCQkg KiBkfSBvciB7YSwgZH0sIHdlIHNob3VsZG4ndCBwbGFuIGl0IHBhcnRpdGlvbndpc2Ugb3IgcHV0 IGEKKwkJCQkgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIGl0IGhlcmUuCisJCQkJICoKKwkJ CQkgKiBBbHNvLCB3ZSBjYW4ndCBwdXQgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGF0IHRoaXMg bGV2ZWwKKwkJCQkgKiBpZiB0aGVyZSBpcyBQQVJUSVRJT05XSVNFIGFkdmljZSB0aGF0IG92ZXJs YXBzIHdpdGggaXQsCisJCQkJICogdW5sZXNzIHRoZSBQQVJUSVRJT05XSVNFIGFkdmljZSBjb3Zl cnMgYSBzdWJzZXQgb2YgdGhlCisJCQkJICogcmVsYXRpb25zIGluIHRoZSBqb2lucmVsLiBUbyBj b250aW51ZSB0aGUgcHJldmlvdXMgZXhhbXBsZSwKKwkJCQkgKiBQQVJUSVRJT05XSVNFKChhIGIg YykpIGlzIGxvZ2ljYWxseSBpbmNvbXBhdGlibGUgd2l0aAorCQkJCSAqIEdBVEhFUigoYSBiKSkg b3IgR0FUSEVSKChhIGQpKSwgYnV0IG5vdCB3aXRoIEdBVEhFUigoYSBiIGMKKwkJCQkgKiBkKSku CisJCQkJICoKKwkJCQkgKiBDb252ZXJzZWx5LCB3ZSBjYW4ndCBwcm9jZWVkIHBhcnRpdGlvbndp c2UgYXQgdGhpcyBsZXZlbCBpZgorCQkJCSAqIHRoZXJlIGlzIG92ZXJsYXBwaW5nIEdBVEhFUiBv ciBHQVRIRVJfTUVSR0UgYWR2aWNlLCB1bmxlc3MKKwkJCQkgKiB0aGF0IGFkdmljZSBjb3ZlcnMg YSBzdXBlcnNldCBvZiB0aGUgcmVsYXRpb25zIGluIHRoaXMKKwkJCQkgKiBqb2lucmVsLiBUaGlz IGlzIGp1c3QgdGhlIGZsaXAgc2lkZSBvZiB0aGUgcHJlY2VkaW5nIHBvaW50LgorCQkJCSAqLwor CQkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJeworCQkJ CQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJaWYgKGl0bSAhPSBQR1BBX0lU TV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOworCQkJCX0KKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFH X0dBVEhFUiB8fAorCQkJCQkJIGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSX01FUkdFKQor CQkJCXsKKwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJ CQkJaWYgKGl0bSAhPSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQpCisJCQkJCQlteV9wYXJ0aXRp b253aXNlX291dGNvbWUgPSAtMTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQllbG9nKEVSUk9SLCAi dW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIsCisJCQkJCQkgKGludCkgZW50cnktPnRhZyk7CisJ CQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUs IHRoZW4gd2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwg KDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRo ZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0 aGVyX21hc2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21h c2sgIT0gbXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdh dGhlcl9tYXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoZnVsbF9tYXRjaCkKKwkJCQlnYXRo ZXJfZnVsbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9mdWxsX21hdGNoLCBpKTsKKwkJ CWVsc2UKKwkJCQlnYXRoZXJfcGFydGlhbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9w YXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCisJCS8qCisJCSAqIExpa2V3aXNlLCBpZiB3ZSBzZXQg bXlfcGFydGl0aW9ud2lzZV9vdXRjb21lIHVwIGFib3ZlLCB0aGVuIHdlICgxKQorCQkgKiBtYWtl IGEgbm90ZSBpZiB0aGUgYWR2aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB3aGF0IHRoZSBk ZXNpcmVkCisJCSAqIG91dGNvbWUgd2FzLCBhbmQgKDMpIHJlbWVtYmVyIHdoZXRoZXIgdGhpcyB3 YXMgYSBmdWxsIG9yIHBhcnRpYWwKKwkJICogbWF0Y2guCisJCSAqLworCQlpZiAobXlfcGFydGl0 aW9ud2lzZV9vdXRjb21lICE9IDApCisJCXsKKwkJCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUg IT0gMCAmJgorCQkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSBteV9wYXJ0aXRpb253aXNlX291 dGNvbWUpCisJCQkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IHRydWU7CisJCQlwYXJ0aXRpb253 aXNlX291dGNvbWUgPSBteV9wYXJ0aXRpb253aXNlX291dGNvbWU7CisJCQlpZiAoZnVsbF9tYXRj aCkKKwkJCQlwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2ggPQorCQkJCQlibXNfYWRkX21lbWJlcihw YXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCXBhcnRpdGlvbndpc2Vf cGFydGlhbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBhcnRpdGlvbndpc2VfcGFydGlh bF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKgorCSAqIE1hcmsgZXZlcnkgR2F0aGVyLXJlbGF0 ZWQgcGllY2Ugb2YgYWR2aWNlIGFzIHBhcnRpYWxseSBtYXRjaGVkLCBhbmQgaWYKKwkgKiB0aGUg c2V0IG9mIHRhcmdldHMgZXhhY3RseSBtYXRjaGVkIHRoaXMgcmVsYXRpb24sIGZ1bGx5IG1hdGNo ZWQuIElmCisJICogdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxp Y3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKGdhdGhl cl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3Zl X3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3Mp OworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhw anMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfZnVsbF9tYXRjaCwgZmxhZ3MpOworCisJLyogTGlrZXdp c2UgZm9yIHBhcnRpdGlvbndpc2UgYWR2aWNlLiAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9Q QVJUSUFMOworCWlmIChwYXJ0aXRpb253aXNlX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RF X0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIHBh cnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVfTUFU Q0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBwYXJ0aXRp b253aXNlX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qCisJICogRW5mb3JjZSByZXN0cmljdGlv bnMgb24gdGhlIEdhdGhlci9HYXRoZXIgTWVyZ2UuICBPbmx5IGNsZWFyIGJpdHMgaGVyZSwKKwkg KiBzbyB0aGF0IHdlIHN0aWxsIHJlc3BlY3QgdGhlIGVuYWJsZV8qIEdVQ3MuIERvIG5vdGhpbmcg aWYgdGhlIGFkdmljZQorCSAqIGNvbmZsaWN0cy4KKwkgKi8KKwlpZiAoZ2F0aGVyX21hc2sgIT0g MCAmJiAhZ2F0aGVyX2NvbmZsaWN0KQorCXsKKwkJdWludDY0CQlhbGxfZ2F0aGVyX21hc2s7CisK KwkJYWxsX2dhdGhlcl9tYXNrID0KKwkJCVBHU19HQVRIRVIgfCBQR1NfR0FUSEVSX01FUkdFIHwg UEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCSpwZ3NfbWFza19wICY9IH4oYWxsX2dhdGhlcl9t YXNrICYgfmdhdGhlcl9tYXNrKTsKKwl9CisKKwkvKgorCSAqIEFzIGFib3ZlLCBidXQgZm9yIHBh cnRpdGlvbndpc2UgYWR2aWNlLgorCSAqCisJICogVG8gaW5kdWNlIGEgcGFydGl0aW9ud2lzZSBq b2luLCB3ZSBkaXNhYmxlIGFsbCB0aGUgb3JkaW5hcnkgbWVhbnMgb2YKKwkgKiBwZXJmb3JtaW5n IGEgam9pbiwgc28gdGhhdCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgcGF0aCB3aWxsIGhvcGVm dWxseQorCSAqIGJlIGNob3Nlbi4KKwkgKgorCSAqIFRvIHByZXZlbnQgb25lLCB3ZSBqdXN0IGRp c2FibGUgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZC4gIE5vdGUgdGhhdCB3ZQorCSAqIG11c3Qgbm90 IHVuc2V0IFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFIGV2ZW4gd2hlbiB3ZSBkb24ndCB3YW50 IGEKKwkgKiBwYXJ0aXRpb253aXNlIGpvaW4gaGVyZSwgYmVjYXVzZSB3ZSBtaWdodCB3YW50IG9u ZSBhdCBhIGhpZ2hlciBsZXZlbAorCSAqIHRoYXQgd2lsbCBjb25zdHJ1Y3QgaXRzIG93biBwYXRo cyB1c2luZyB0aGUgb25lcyBmcm9tIHRoaXMgbGV2ZWwuCisJICovCisJaWYgKHBhcnRpdGlvbndp c2Vfb3V0Y29tZSAhPSAwICYmICFwYXJ0aXRpb253aXNlX2NvbmZsaWN0KQorCXsKKwkJaWYgKHBh cnRpdGlvbndpc2Vfb3V0Y29tZSA+IDApCisJCQkqcGdzX21hc2tfcCA9ICgqcGdzX21hc2tfcCAm IH5QR1NfSk9JTl9BTlkpOworCQllbHNlCisJCQkqcGdzX21hc2tfcCAmPSB+KFBHU19BUFBFTkQg fCBQR1NfTUVSR0VfQVBQRU5EKTsKKwl9Cit9CisKKy8qCisgKiBFbmZvcmNlIHJlc3RyaWN0aW9u cyBvbiB0aGUgam9pbiBvcmRlciBvciBqb2luIG1ldGhvZC4KKyAqLworc3RhdGljIHZvaWQKK3Bn cGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpvaW50eXBlLCB1aW50 NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQljaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQlwZ3Bh X2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7CisJQml0bWFwc2V0ICAqam9fcGVy bWl0X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmpvX2RlbnlfaW5kZXhlcyA9IE5VTEw7 CisJQml0bWFwc2V0ICAqam9fZGVueV9yZWxfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAq am1faW5kZXhlcyA9IE5VTEw7CisJYm9vbAkJam1fY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50MzIJ CWpvaW5fbWFzayA9IDA7CisJQml0bWFwc2V0ICAqc2pfcGVybWl0X2luZGV4ZXMgPSBOVUxMOwor CUJpdG1hcHNldCAgKnNqX2RlbnlfaW5kZXhlcyA9IE5VTEw7CisKKwkvKgorCSAqIFJlY29uc2lk ZXIgUEFSVElUSU9OV0lTRSguLi4pIGFkdmljZS4KKwkgKgorCSAqIFdlIGFscmVhZHkgdGhvdWdo dCBhYm91dCB0aGlzIGZvciB0aGUgam9pbnJlbCBhcyBhIHdob2xlLCBidXQgaW4gc29tZQorCSAq IGNhc2VzLCBwYXJ0aXRpb253aXNlIGFkdmljZSBjYW4gYWxzbyBjb25zdHJhaW4gdGhlIGpvaW4g b3JkZXIuIEZvcgorCSAqIGluc3RhbmNlLCBpZiB0aGUgYWR2aWNlIHNheXMgUEFSVElUSU9OV0lT RSgodDEgdDIpKSwgd2Ugc2hvdWxkbid0IGJ1aWxkCisJICogam9pbiBwYXRocyBmb3IgYW55IGpv aW5yZWwgdGhhdCBpbmNsdWRlcyB0MSBvciB0MiB1bmxlc3MgaXQgYWxzbworCSAqIGluY2x1ZGVz IHRoZSBvdGhlci4gSW4gZ2VuZXJhbCwgdGhlIHBhcnRpdGlvbndpc2Ugb3BlcmF0aW9uIG11c3Qg aGF2ZQorCSAqIGFscmVhZHkgYmVlbiBjb21wbGV0ZWQgd2l0aGluIG9uZSBzaWRlIG9mIHRoZSBj dXJyZW50IGpvaW4gb3IgdGhlCisJICogb3RoZXIsIGVsc2UgdGhlIGpvaW4gb3JkZXIgaXMgaW1w ZXJtaXNzaWJsZS4KKwkgKgorCSAqIE5COiBJdCBtaWdodCBzZWVtIHRlbXB0aW5nIHRvIHRyeSB0 byBkZWFsIHdpdGggUEFSVElUSU9OV0lTRSBhZHZpY2UKKwkgKiBlbnRpcmVseSBpbiB0aGlzIGZ1 bmN0aW9uLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsuIEhlcmUsIHdlIGNhbiBvbmx5CisJICogYWZm ZWN0IHRoZSBwZ3NfbWFzayB3aXRoaW4gYSBwYXJ0aWN1bGFyIEpvaW5QYXRoRXh0cmFEYXRhLCB0 aGF0IGlzLCBmb3IKKwkgKiBhIHBhcnRpY3VsYXIgY2hvaWNlIG9mIGlubmVycmVsIGFuZCBvdXRl cnJlbC4gUGFydGl0aW9ud2lzZSBwYXRocyBhcmUKKwkgKiBub3QgYnVpbHQgdGhhdCB3YXksIHNv IHdlIG11c3Qgc2V0IHBnc19tYXNrIGZvciB0aGUgUmVsT3B0SW5mbywgd2hpY2gKKwkgKiBpcyBi ZXN0IGRvbmUgaW4gcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlLgorCSAqLworCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPnJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7 CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+cmVsX2VudHJpZXNbaV07CisJCXBn cGFfaXRtX3R5cGUgaW5uZXJfaXRtOworCQlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKworCQlp ZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJY29udGludWU7CisK KwkJb3V0ZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQocGpzLT5vdXRlcl9j b3VudCwKKwkJCQkJCQkJCQkJCSAgcGpzLT5yaWRzLCBlbnRyeS0+dGFyZ2V0KTsKKwkJaWYgKG91 dGVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCB8fAorCQkJb3V0ZXJfaXRtID09IFBHUEFfSVRNX1RB UkdFVFNfQVJFX1NVQlNFVCkKKwkJCWNvbnRpbnVlOworCisJCWlubmVyX2l0bSA9IHBncGFfaWRl bnRpZmllcnNfbWF0Y2hfdGFyZ2V0KHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkgIHBq cy0+cmlkcyArIHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkgIGVudHJ5LT50YXJnZXQp OworCQlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMIHx8CisJCQlpbm5lcl9pdG0gPT0g UEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQkJY29udGludWU7CisKKwkJam9fZGVueV9y ZWxfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfcmVsX2luZGV4ZXMsIGkpOworCX0K KworCS8qIEl0ZXJhdGUgb3ZlciBhZHZpY2UgdGhhdCBwZXJ0YWlucyB0byB0aGUgam9pbiBvcmRl ciBhbmQgbWV0aG9kLiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIo cGpzLT5qb2luX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50 cnkgPSAmcGpzLT5qb2luX2VudHJpZXNbaV07CisJCXVpbnQzMgkJbXlfam9pbl9tYXNrOworCisJ CS8qIEhhbmRsZSBqb2luIG9yZGVyIGFkdmljZS4gKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQ QV9UQUdfSk9JTl9PUkRFUikKKwkJeworCQkJcGdwYV9qb19vdXRjb21lIGpvX291dGNvbWU7CisK KwkJCWpvX291dGNvbWUgPSBwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19qb2luKHBqcy0+b3V0ZXJf Y291bnQsCisJCQkJCQkJCQkJCQkJICBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAg cGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgZW50cnkpOworCQkJaWYgKGpvX291dGNvbWUgPT0g UEdQQV9KT19QRVJNSVRURUQpCisJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJl cihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChqb19vdXRjb21lID09IFBHUEFf Sk9fREVOSUVEKQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2Rlbnlf aW5kZXhlcywgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBqb2luIG1ldGhv ZCBhZHZpY2UuICovCisJCW15X2pvaW5fbWFzayA9IHBncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zy b21fYWR2aWNlX3RhZyhlbnRyeS0+dGFnKTsKKwkJaWYgKG15X2pvaW5fbWFzayAhPSAwKQorCQl7 CisJCQlib29sCQlwZXJtaXQ7CisJCQlib29sCQlyZXN0cmljdF9tZXRob2Q7CisKKwkJCWlmIChl bnRyeS0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJCQlwZXJtaXQgPSBwZ3BhX29w YXF1ZV9qb2luX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAg IHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5yaWRzLAorCQkJCQkJCQkJ CQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpOworCQkJZWxz ZQorCQkJCXBlcm1pdCA9IHBncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luKHBqcy0+b3V0ZXJf Y291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkg ICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJCQkJCQkJCQkJCQkJICAgJnJl c3RyaWN0X21ldGhvZCk7CisJCQlpZiAoIXBlcm1pdCkKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBi bXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxzZSBpZiAocmVzdHJpY3Rf bWV0aG9kKQorCQkJeworCQkJCWptX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqbV9pbmRleGVz LCBpKTsKKwkJCQlpZiAoam9pbl9tYXNrICE9IDAgJiYgam9pbl9tYXNrICE9IG15X2pvaW5fbWFz aykKKwkJCQkJam1fY29uZmxpY3QgPSB0cnVlOworCQkJCWpvaW5fbWFzayA9IG15X2pvaW5fbWFz azsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIHNlbWlqb2luIHVuaXF1 ZW5lc3MgYWR2aWNlLiAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9V TklRVUUgfHwKKwkJCWVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSkK KwkJeworCQkJYm9vbAkJb3V0ZXJfc2lkZV9udWxsYWJsZTsKKwkJCWJvb2wJCXJlc3RyaWN0X21l dGhvZDsKKworCQkJLyogUGxhbm5lciBoYXMgbnVsbGFibGUgc2lkZSBvZiB0aGUgc2VtaWpvaW4g b24gdGhlIG91dGVyIHNpZGU/ICovCisJCQlvdXRlcl9zaWRlX251bGxhYmxlID0gKGpvaW50eXBl ID09IEpPSU5fVU5JUVVFX09VVEVSIHx8CisJCQkJCQkJCSAgIGpvaW50eXBlID09IEpPSU5fUklH SFRfU0VNSSk7CisKKwkJCWlmICghcGdwYV9zZW1pam9pbl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRl cl9jb3VudCwKKwkJCQkJCQkJCQkJcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJcGpzLT5y aWRzLAorCQkJCQkJCQkJCQllbnRyeSwKKwkJCQkJCQkJCQkJb3V0ZXJfc2lkZV9udWxsYWJsZSwK KwkJCQkJCQkJCQkJJnJlc3RyaWN0X21ldGhvZCkpCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1z X2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWVsc2UgaWYgKHJlc3RyaWN0X21l dGhvZCkKKwkJCXsKKwkJCQlib29sCQlhZHZpY2VfdW5pcXVlOworCQkJCWJvb2wJCWp0X3VuaXF1 ZTsKKwkJCQlib29sCQlqdF9ub25fdW5pcXVlOworCisJCQkJLyogQWR2aWNlIHdhbnRzIHRvIHVu aXF1ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCQlhZHZpY2VfdW5pcXVlID0g KGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFKTsKKworCQkJCS8qIFBsYW5u ZXIgaXMgdHJ5aW5nIHRvIHVuaXF1ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJ CQlqdF91bmlxdWUgPSAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIgfHwKKwkJCQkJCQkg am9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIpOworCisJCQkJLyogUGxhbm5lciBpcyB0cnlp bmcgYSBzZW1pLWpvaW4sIHdpdGhvdXQgdW5pcXVlLWlmeWluZz8gKi8KKwkJCQlqdF9ub25fdW5p cXVlID0gKGpvaW50eXBlID09IEpPSU5fU0VNSSB8fAorCQkJCQkJCQkgam9pbnR5cGUgPT0gSk9J Tl9SSUdIVF9TRU1JKTsKKworCQkJCWlmICghanRfdW5pcXVlICYmICFqdF9ub25fdW5pcXVlKQor CQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzZW1pam9p biB0byB3aGljaCBTSl9VTklRVUUKKwkJCQkJICogb3IgU0pfTk9OX1VOSVFVRSBjYW4gYmUgYXBw bGllZC4KKwkJCQkJICovCisJCQkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX0lOQVBQTElDQUJM RTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoYWR2aWNlX3VuaXF1ZSAhPSBqdF91bmlxdWUpCisJCQkJ CXNqX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNqX2RlbnlfaW5kZXhlcywgaSk7CisJ CQkJZWxzZQorCQkJCQlzal9wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNqX3Blcm1p dF9pbmRleGVzLCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyoKKwkgKiBJ ZiB0aGUgYWR2aWNlIGluZGljYXRlcyBib3RoIHRoYXQgdGhpcyBqb2luIG9yZGVyIGlzIHBlcm1p c3NpYmxlIGFuZAorCSAqIGFsc28gdGhhdCBpdCBpc24ndCwgdGhlbiBtYXJrIGFkdmljZSByZWxh dGVkIHRvIHRoZSBqb2luIG9yZGVyIGFzCisJICogY29uZmxpY3RpbmcuCisJICovCisJaWYgKGpv X3Blcm1pdF9pbmRleGVzICE9IE5VTEwgJiYKKwkJKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMIHx8 IGpvX2RlbnlfcmVsX2luZGV4ZXMgIT0gTlVMTCkpCisJeworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFn cyhwanMtPmpvaW5fZW50cmllcywgam9fcGVybWl0X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVf Q09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywg am9fZGVueV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwkJcGdwYV90 cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgam9fZGVueV9yZWxfaW5kZXhlcywKKwkJ CQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJfQorCisJLyoKKwkgKiBJZiBtb3JlIHRoYW4g b25lIGpvaW4gbWV0aG9kIHNwZWNpZmljYXRpb24gaXMgcmVsZXZhbnQgaGVyZSBhbmQgdGhleQor CSAqIGRpZmZlciwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlpZiAoam1f Y29uZmxpY3QpCisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBqbV9p bmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKworCS8qIElmIHNlbWlqb2lu IGFkdmljZSBzYXlzIGJvdGggeWVzIGFuZCBubywgbWFyayBpdCBhbGwgYXMgY29uZmxpY3Rpbmcu ICovCisJaWYgKHNqX3Blcm1pdF9pbmRleGVzICE9IE5VTEwgJiYgc2pfZGVueV9pbmRleGVzICE9 IE5VTEwpCisJeworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgc2pf cGVybWl0X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ry b3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgc2pfZGVueV9pbmRleGVzLAorCQkJCQkJ CSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwl9CisKKwkvKgorCSAqIEVuZm9yY2UgcmVzdHJpY3Rp b25zIG9uIHRoZSBqb2luIG9yZGVyIGFuZCBqb2luIG1ldGhvZCwgYW5kIGFueQorCSAqIHNlbWlq b2luLXJlbGF0ZWQgcmVzdHJpY3Rpb25zLiBPbmx5IGNsZWFyIGJpdHMgaGVyZSwgc28gdGhhdCB3 ZSBzdGlsbAorCSAqIHJlc3BlY3QgdGhlIGVuYWJsZV8qIEdVQ3MuIERvIG5vdGhpbmcgaW4gY2Fz ZXMgd2hlcmUgdGhlIGFkdmljZSBvbiBhCisJICogc2luZ2xlIHRvcGljIGNvbmZsaWN0cy4KKwkg Ki8KKwlpZiAoKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMIHx8IGpvX2RlbnlfcmVsX2luZGV4ZXMg IT0gTlVMTCkgJiYKKwkJam9fcGVybWl0X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19tYXNrX3Ag Jj0gflBHU19KT0lOX0FOWTsKKwlpZiAoam9pbl9tYXNrICE9IDAgJiYgIWptX2NvbmZsaWN0KQor CQkqcGdzX21hc2tfcCAmPSB+KFBHU19KT0lOX0FOWSAmIH5qb2luX21hc2spOworCWlmIChzal9k ZW55X2luZGV4ZXMgIT0gTlVMTCAmJiBzal9wZXJtaXRfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdz X21hc2tfcCAmPSB+UEdTX0pPSU5fQU5ZOworfQorCisvKgorICogVHJhbnNsYXRlIGFuIGFkdmlj ZSB0YWcgaW50byBhIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrLgorICoKKyAqIFRoaXMg ZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIHRhZyB0eXBlcyB0aGF0IGRvbid0IHJlcHJlc2Vu dCBqb2luCisgKiBzdHJhdGVnaWVzLiBJbiBzdWNoIGNhc2VzLCB3ZSBqdXN0IHJldHVybiAwLCB3 aGljaCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoCisgKiBhIHZhbGlkIG1hc2suCisgKi8KK3N0YXRp YyB1aW50NjQKK3BncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2Fk dmljZV90YWdfdHlwZSB0YWcpCit7CisJc3dpdGNoICh0YWcpCisJeworCQljYXNlIFBHUEFfVEFH X0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBQR1NfRk9SRUlHTkpPSU47CisJCWNhc2UgUEdQQV9U QUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBQR1NfTUVSR0VKT0lOX1BMQUlOOworCQlj YXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX01FUkdF Sk9JTl9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJ CXJldHVybiBQR1NfTkVTVExPT1BfUExBSU47CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX01BVEVSSUFMSVpFOworCQljYXNl IFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX01F TU9JWkU7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0dXJuIFBHU19IQVNISk9J TjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIERvZXMgYSBjZXJ0 YWluIGl0ZW0gb2Ygam9pbiBvcmRlciBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2luPworICoK KyAqIFJldHVybnMgUEdQQV9KT19ERU5JRUQgaWYgdGhlIGFkdmljZSBpcyBpbmNvbXBhdGlibGUg d2l0aCB0aGUgcHJvcG9zZWQKKyAqIGpvaW4gb3JkZXIuCisgKgorICogUmV0dXJucyBQR1BBX0pP X1BFUk1JVFRFRCBpZiB0aGUgYWR2aWNlIHNwZWNpZmllcyBleGFjdGx5IHRoZSBwcm9wb3NlZAor ICogam9pbiBvcmRlci4gVGhpcyBpbXBsaWVzIHRoYXQgYSBwYXJ0aXRpb253aXNlIGpvaW4gc2hv dWxkIG5vdCBiZQorICogcGVyZm9ybWVkIGF0IHRoaXMgbGV2ZWw7IHJhdGhlciwgb25lIG9mIHRo ZSB0cmFkaXRpb25hbCBqb2luIG1ldGhvZHMKKyAqIHNob3VsZCBiZSB1c2VkLgorICoKKyAqIFJl dHVybnMgUEdQQV9KT19JTkRJRkZFUkVOVCBpZiB0aGUgYWR2aWNlIGRvZXMgbm90IGNhcmUgd2hh dCBoYXBwZW5zLgorICogV2UgdXNlIHRoaXMgZm9yIHVub3JkZXJlZCBKT0lOX09SREVSIHN1Ymxp c3RzLCB3aGljaCBhcmUgY29tcGF0aWJsZSB3aXRoCisgKiBwYXJ0aXRpb253aXNlIGpvaW4gYnV0 IGRvIG5vdCBtYW5kYXRlIGl0LgorICovCitzdGF0aWMgcGdwYV9qb19vdXRjb21lCitwZ3BhX2pv aW5fb3JkZXJfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAor CQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJIHBncGFfdHJvdmVfZW50cnkg KmVudHJ5KQoreworCWJvb2wJCWxvb3AgPSB0cnVlOworCWJvb2wJCXN1Ymxpc3QgPSBmYWxzZTsK KwlpbnQJCQlsZW5ndGg7CisJaW50CQkJb3V0ZXJfbGVuZ3RoOworCXBncGFfYWR2aWNlX3Rhcmdl dCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnByZWZpeF90 YXJnZXQ7CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNo IGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENI X1BBUlRJQUw7CisKKwkvKgorCSAqIEZpbmQgdGhlIGlubmVybW9zdCBzdWJsaXN0IHRoYXQgY29u dGFpbnMgYWxsIGtleXM7IGlmIG5vIHN1Ymxpc3QgZG9lcywKKwkgKiB0aGVuIGNvbnRpbnVlIHBy b2Nlc3Npbmcgd2l0aCB0aGUgdG9wbGV2ZWwgbGlzdC4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBp ZiB0aGUgYWR2aWNlIHNheXMgSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgdGhlbiB3ZQor CSAqIHNob3VsZCBldmFsdWF0ZSBqb2lucyB0aGF0IG9ubHkgaW52b2x2ZSB0MywgdDQsIGFuZC9v ciB0NSBhZ2FpbnN0IHRoZQorCSAqICh0MyB0NCB0NSkgc3VibGlzdCwgYW5kIG90aGVycyBhZ2Fp bnN0IHRoZSBmdWxsIGxpc3QuCisJICoKKwkgKiBOb3RlIHRoYXQgKDEpIG91dGVybW9zdCBzdWJs aXN0IGlzIGFsd2F5cyBvcmRlcmVkIGFuZCAoMikgd2hlbmV2ZXIgd2UKKwkgKiB6b29tIGludG8g YW4gdW5vcmRlcmVkIHN1Ymxpc3QsIHdlIGluc3RhbnRseSByZXR1cm4KKwkgKiBQR1BBX0pPX0lO RElGRkVSRU5ULgorCSAqLworCXdoaWxlIChsb29wKQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+dHR5 cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKTsKKworCQlsb29wID0gZmFsc2U7CisJCWZv cmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxk cmVuKQorCQl7CisJCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQkJaWYgKGNoaWxkX3RhcmdldC0+ dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwkJCQljb250aW51ZTsKKworCQkJaXRt ID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3Vu dCwKKwkJCQkJCQkJCQkJCXJpZHMsIGNoaWxkX3RhcmdldCk7CisJCQlpZiAoaXRtID09IFBHUEFf SVRNX0VRVUFMIHx8IGl0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQpCisJCQl7CisJCQkJ aWYgKGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKQorCQkJ CXsKKwkJCQkJdGFyZ2V0ID0gY2hpbGRfdGFyZ2V0OworCQkJCQlzdWJsaXN0ID0gdHJ1ZTsKKwkJ CQkJbG9vcCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJ CQlBc3NlcnQoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElT VCk7CisJCQkJCXJldHVybiBQR1BBX0pPX0lORElGRkVSRU5UOworCQkJCX0KKwkJCX0KKwkJfQor CX0KKworCS8qCisJICogVHJ5IHRvIGZpbmQgYSBwcmVmaXggb2YgdGhlIHNlbGVjdGVkIGpvaW4g b3JkZXIgbGlzdCB0aGF0IGlzIGV4YWN0bHkKKwkgKiBlcXVhbCB0byB0aGUgb3V0ZXIgc2lkZSBv ZiB0aGUgcHJvcG9zZWQgam9pbi4KKwkgKi8KKwlsZW5ndGggPSBsaXN0X2xlbmd0aCh0YXJnZXQt PmNoaWxkcmVuKTsKKwlwcmVmaXhfdGFyZ2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2Vf dGFyZ2V0KTsKKwlwcmVmaXhfdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElT VDsKKwlmb3IgKG91dGVyX2xlbmd0aCA9IDE7IG91dGVyX2xlbmd0aCA8PSBsZW5ndGg7ICsrb3V0 ZXJfbGVuZ3RoKQorCXsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJLyogQXZvaWQgbGVha2lu ZyBtZW1vcnkgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICovCisJCWlmIChwcmVmaXhfdGFyZ2V0 LT5jaGlsZHJlbiAhPSBOVUxMKQorCQkJbGlzdF9mcmVlKHByZWZpeF90YXJnZXQtPmNoaWxkcmVu KTsKKwkJcHJlZml4X3RhcmdldC0+Y2hpbGRyZW4gPSBsaXN0X2NvcHlfaGVhZCh0YXJnZXQtPmNo aWxkcmVuLAorCQkJCQkJCQkJCQkJIG91dGVyX2xlbmd0aCk7CisKKwkJLyogU2VhcmNoLCBob3Bp bmcgdG8gZmluZCBhbiBleGFjdCBtYXRjaC4gKi8KKwkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19t YXRjaF90YXJnZXQob3V0ZXJfY291bnQsIHJpZHMsIHByZWZpeF90YXJnZXQpOworCQlpZiAoaXRt ID09IFBHUEFfSVRNX0VRVUFMKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgdGhlIHByZWZp eCBvZiB0aGUgam9pbiBvcmRlciBsaXN0IHRoYXQgd2UncmUgY29uc2lkZXJpbmcKKwkJICogaW5j bHVkZXMgc29tZSBidXQgbm90IGFsbCBvZiB0aGUgb3V0ZXIgcmVscywgd2UgY2FuIG1ha2UgdGhl IHByZWZpeAorCQkgKiBsb25nZXIgdG8gZmluZCBhbiBleGFjdCBtYXRjaC4gQnV0IGlmIHRoZSBh ZHZpY2UgaGFzbid0IG1lbnRpb25lZAorCQkgKiBldmVyeXRoaW5nIHRoYXQncyBwYXJ0IG9mIG91 ciBvdXRlciByZWwgeWV0LCBidXQgaGFzIG1lbnRpb25lZAorCQkgKiB0aGluZ3MgdGhhdCBhcmUg bm90LCB0aGVuIHRoaXMgam9pbiBkb2Vzbid0IG1hdGNoIHRoZSBqb2luIG9yZGVyCisJCSAqIGxp c3QuCisJCSAqLworCQlpZiAoaXRtICE9IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJ CXJldHVybiBQR1BBX0pPX0RFTklFRDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBwcmV2aW91cyBs b29wIHN0b3BwZWQgYmVmb3JlIHRoZSBwcmVmaXhfdGFyZ2V0IGluY2x1ZGVkIHRoZQorCSAqIGVu dGlyZSBqb2luIG9yZGVyIGxpc3QsIHRoZW4gdGhlIG5leHQgbWVtYmVyIG9mIHRoZSBqb2luIG9y ZGVyIGxpc3QKKwkgKiBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIGlubmVyIHNpZGUgb2YgdGhlIGpv aW4uCisJICoKKwkgKiBFeGFtcGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkp LCBpZiB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUKKwkgKiBjdXJyZW50IGpvaW4gaW5jbHVkZXMgb25s eSB0MSwgdGhlbiB0aGUgaW5uZXIgc2lkZSBtdXN0IGJlIGV4YWN0bHkgdDI7CisJICogaWYgdGhl IG91dGVyIHNpZGUgaW5jbHVkZXMgYm90aCB0MSBhbmQgdDIsIHRoZW4gdGhlIGlubmVyIHNpZGUg bXVzdAorCSAqIGluY2x1ZGUgZXhhY3RseSB0MywgdDQsIGFuZCB0NS4KKwkgKi8KKwlpZiAob3V0 ZXJfbGVuZ3RoIDwgbGVuZ3RoKQorCXsKKwkJcGdwYV9hZHZpY2VfdGFyZ2V0ICppbm5lcl90YXJn ZXQ7CisJCXBncGFfaXRtX3R5cGUgaXRtOworCisJCWlubmVyX3RhcmdldCA9IGxpc3RfbnRoKHRh cmdldC0+Y2hpbGRyZW4sIG91dGVyX2xlbmd0aCk7CisKKwkJaXRtID0gcGdwYV9pZGVudGlmaWVy c19tYXRjaF90YXJnZXQoaW5uZXJfY291bnQsIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJ CQkJaW5uZXJfdGFyZ2V0KTsKKworCQkvKgorCQkgKiBCZWZvcmUgcmV0dXJuaW5nLCBjb25zaWRl ciB3aGV0aGVyIHdlIG5lZWQgdG8gbWFyayB0aGlzIGVudHJ5IGFzCisJCSAqIGZ1bGx5IG1hdGNo ZWQuIElmIHdlJ3JlIGNvbnNpZGVyaW5nIHRoZSBmdWxsIGxpc3QgcmF0aGVyIHRoYW4gYQorCQkg KiBzdWJsaXN0LCBhbmQgaWYgd2UgZm91bmQgZXZlcnkgaXRlbSBidXQgb25lIG9uIHRoZSBvdXRl ciBzaWRlIG9mCisJCSAqIHRoZSBqb2luIGFuZCB0aGUgbGFzdCBpdGVtIG9uIHRoZSBpbm5lciBz aWRlIG9mIHRoZSBqb2luLCB0aGVuIHRoZQorCQkgKiBhbnN3ZXIgaXMgeWVzLgorCQkgKi8KKwkJ aWYgKCFzdWJsaXN0ICYmIG91dGVyX2xlbmd0aCArIDEgPT0gbGVuZ3RoICYmIGl0bSA9PSBQR1BB X0lUTV9FUVVBTCkKKwkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisKKwkJ cmV0dXJuIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpID8gUEdQQV9KT19QRVJNSVRURUQgOiBQR1BB X0pPX0RFTklFRDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdldCBoZXJlLCB0aGVuIHRoZSBvdXRl ciBzaWRlIG9mIHRoZSBqb2luIGluY2x1ZGVzIHRoZSBlbnRpcmV0eQorCSAqIG9mIHRoZSBqb2lu IG9yZGVyIGxpc3QuIEluIHRoaXMgY2FzZSwgd2UgYmVoYXZlIGRpZmZlcmVudGx5IGRlcGVuZGlu ZworCSAqIG9uIHdoZXRoZXIgd2UncmUgbG9va2luZyBhdCB0aGUgdG9wLWxldmVsIGpvaW4gb3Jk ZXIgbGlzdCBvciBzdWJsaXN0LgorCSAqIEF0IHRoZSB0b3AtbGV2ZWwsIHdlIHRyZWF0IHRoZSBz cGVjaWZpZWQgbGlzdCBhcyBtYW5kYXRpbmcgdGhhdCB0aGUKKwkgKiBhY3R1YWwgam9pbiBvcmRl ciBoYXMgdGhlIGdpdmVuIGxpc3QgYXMgYSBwcmVmaXgsIGJ1dCBhIHN1Ymxpc3QKKwkgKiByZXF1 aXJlcyBhbiBleGFjdCBtYXRjaC4KKwkgKgorCSAqIEV4YW1wbGU6IEdpdmVuIEpPSU5fT1JERVIo dDEgdDIgKHQzIHQ0IHQ1KSksIHdlIG11c3Qgc3RhcnQgYnkgam9pbmluZworCSAqIGFsbCBmaXZl IG9mIHRob3NlIHJlbGF0aW9ucyBhbmQgaW4gdGhhdCBzZXF1ZW5jZSwgYnV0IG9uY2UgdGhhdCBp cworCSAqIGRvbmUsIGl0J3MgT0sgdG8gam9pbiBhbnkgb3RoZXIgcmVscyB0aGF0IGFyZSBwYXJ0 IG9mIHRoZSBqb2luIHByb2JsZW0uCisJICogVGhpcyBhbGxvd3MgYSB1c2VyIHRvIHNwZWNpZnkg dGhlIGRyaXZpbmcgdGFibGUgYW5kIHBlcmhhcHMgdGhlIGZpcnN0CisJICogZmV3IHRoaW5ncyB0 byB3aGljaCBpdCBzaG91bGQgYmUgam9pbmVkIHdoaWxlIGxlYXZpbmcgdGhlIHJlc3Qgb2YgdGhl CisJICogam9pbiBvcmRlciB1cCB0aGUgb3B0aW1pemVyLiBCdXQgaXQgc2VlbXMgbGlrZSBpdCB3 b3VsZCBiZSBzdXJwcmlzaW5nLAorCSAqIGdpdmVuIHRoYXQgc3BlY2lmaWNhdGlvbiwgaWYgdGhl IHVzZXIgY291bGQgYWRkIHQ2IHRvIHRoZSAodDMgdDQgdDUpCisJICogc3ViLWpvaW4sIHNvIHdl IGRvbid0IGFsbG93IHRoYXQuIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IGl0LCB0aGUgbG9naWMK KwkgKiBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24gd291bGQgcmVxdWlyZSBzdWJzdGFudGlhbCBh ZGp1c3RtZW50OiB3ZSBjb3VsZAorCSAqIGFsbG93IHRoZSB0My10NC10NS10NiBqb2luIHRvIGJl IGJ1aWx0IGhlcmUsIGJ1dCB0aGUgbmV4dCBzdGVwIG9mCisJICogam9pbmluZyB0MS10MiB0byB0 aGUgcmVzdWx0IHdvdWxkIHN0aWxsIGJlIHJlamVjdGVkLgorCSAqLworCWlmICghc3VibGlzdCkK KwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlyZXR1cm4gc3VibGlzdCA/ IFBHUEFfSk9fREVOSUVEIDogUEdQQV9KT19QRVJNSVRURUQ7Cit9CisKKy8qCisgKiBEb2VzIGEg Y2VydGFpbiBpdGVtIG9mIGpvaW4gbWV0aG9kIGFkdmljZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/ CisgKgorICogQWR2aWNlIHN1Y2ggYXMgSEFTSF9KT0lOKCh4IHkpKSBtZWFucyB0aGF0IHRoZXJl IHNob3VsZCBiZSBhIGhhc2ggam9pbiB3aXRoCisgKiBleGFjdGx5IHggYW5kIHkgb24gdGhlIGlu bmVyIHNpZGUuIE9idmlvdXNseSwgdGhpcyBtZWFucyB0aGF0IGlmIHdlIGFyZQorICogY29uc2lk ZXJpbmcgYSBqb2luIHdpdGggZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLCB3ZSBz aG91bGQgZW5mb3JjZQorICogdGhlIHVzZSBvZiBhIGhhc2ggam9pbi4gSG93ZXZlciwgaXQgYWxz byBtZWFucyB0aGF0IHdlIG11c3QgcmVqZWN0IHNvbWUKKyAqIGluY29tcGF0aWJsZSBqb2luIG9y ZGVycyBlbnRpcmVseS4gIEZvciBleGFtcGxlLCBhIGpvaW4gd2l0aCBleGFjdGx5IHgKKyAqIGFu ZCB5IG9uIHRoZSBvdXRlciBzaWRlIHNob3VsZG4ndCBiZSBhbGxvd2VkLCBiZWNhdXNlIHN1Y2gg cGF0aHMgbWlnaHQgd2luCisgKiBvdmVyIHRoZSBhZHZpY2UtZHJpdmVuIHBhdGggb24gY29zdC4K KyAqCisgKiBUbyBhY2NvbW1vZGF0ZSB0aGVzZSByZXF1aXJlbWVudHMsIHRoaXMgZnVuY3Rpb24g cmV0dXJucyB0cnVlIGlmIHRoZSBqb2luCisgKiBzaG91bGQgYmUgYWxsb3dlZCBhbmQgZmFsc2Ug aWYgaXQgc2hvdWxkIG5vdC4gRnVydGhlcm1vcmUsICpyZXN0cmljdF9tZXRob2QKKyAqIGlzIHNl dCB0byB0cnVlIGlmIHRoZSBqb2luIG1ldGhvZCBzaG91bGQgYmUgZW5mb3JjZWQgYW5kIGZhbHNl IGlmIG5vdC4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2lu KGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlm aWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBi b29sICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBl bnRyeS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgaW5uZXJfaXRtOworCXBncGFfaXRtX3R5cGUg b3V0ZXJfaXRtOworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5 IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLwor CWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0 aG9kID0gZmFsc2U7CisKKwkvKgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlvbnMgZXhhY3Rs eSB0aGUgc2FtZSByZWxhdGlvbnMgYXMgdGhlIGFkdmljZQorCSAqIHRhcmdldCwgYWxsb3cgdGhl IGpvaW4gYW5kIGVuZm9yY2UgdGhlIGpvaW4gbWV0aG9kIHJlc3RyaWN0aW9uLgorCSAqCisJICog SWYgb3VyIGlubmVyIHJlbCBtZW50aW9ucyBhIHN1cGVyc2V0IG9mIHRoZSB0YXJnZXQgcmVsYXRp b25zLCBhbGxvdyB0aGUKKwkgKiBqb2luLiBUaGUgam9pbiB3ZSBjYXJlIGFib3V0IGhhcyBhbHJl YWR5IHRha2VuIHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UKKwkgKiBpbXBvc2VzIG5vIGZ1cnRoZXIg cmVzdHJpY3Rpb25zLgorCSAqLworCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJ CQkJCQkJCQkJICB0YXJnZXQpOworCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJ eworCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0 aG9kID0gdHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWVsc2UgaWYgKGlubmVyX2l0bSA9PSBQ R1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBJ ZiBvdXIgb3V0ZXIgcmVsIG1lbnRpb25zIGEgc3VwZXJzZXQgb2YgdGhlIHJlbGF0aW9ucyBpbiB0 aGUgYWR2aWNlCisJICogdGFyZ2V0LCBubyByZXN0cmljdGlvbnMgYXBwbHksIGJlY2F1c2UgdGhl IGpvaW4gd2UgY2FyZSBhYm91dCBoYXMKKwkgKiBhbHJlYWR5IHRha2VuIHBsYWNlLgorCSAqCisJ ICogT24gdGhlIG90aGVyIGhhbmQsIGlmIG91ciBvdXRlciByZWwgbWVudGlvbnMgZXhhY3RseSB0 aGUgcmVsYXRpb25zCisJICogbWVudGlvbmVkIGluIHRoZSBhZHZpY2UgdGFyZ2V0LCB0aGUgcGxh bm5lciBpcyB0cnlpbmcgdG8gcmV2ZXJzZSB0aGUKKwkgKiBzaWRlcyBvZiB0aGUgam9pbiBhcyBj b21wYXJlZCB3aXRoIG91ciBkZXNpcmVkIG91dGNvbWUuIFJlamVjdCB0aGF0LgorCSAqLworCW91 dGVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50LAorCQkJ CQkJCQkJCQkgIHJpZHMsIHRhcmdldCk7CisJaWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9UQVJH RVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCWVsc2UgaWYgKG91dGVyX2l0bSA9PSBQ R1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiB0aGUgYWR2aWNl IHRhcmdldCBtZW50aW9ucyBvbmx5IGEgc2luZ2xlIHJlbGF0aW9uLCB0aGUgdGVzdCBiZWxvdwor CSAqIGNhbm5vdCBldmVyIHBhc3MsIHNvIHNhdmUgc29tZSB3b3JrIGJ5IGV4aXRpbmcgbm93Lgor CSAqLworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJCXJl dHVybiBmYWxzZTsKKworCS8qCisJICogSWYgZXZlcnl0aGluZyBpbiB0aGUgam9pbnJlbCBhcHBl YXJzIGluIHRoZSBhZHZpY2UgdGFyZ2V0LCB3ZSdyZSBiZWxvdworCSAqIHRoZSBsZXZlbCBvZiB0 aGUgam9pbiB3ZSB3YW50IHRvIGNvbnRyb2wuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgSEFTSF9K T0lOKCh4IHkpKSBkb2Vzbid0IHJlc3RyaWN0IGhvdyB4IGFuZCB5IGNhbiBiZQorCSAqIGpvaW5l ZC4KKwkgKgorCSAqIFRoaXMgbG9va3VwIHNob3VsZG4ndCByZXR1cm4gUEdQQV9JVE1fRElTSk9J TlQsIGJlY2F1c2UgYW55IHN1Y2ggYWR2aWNlCisJICogc2hvdWxkIG5vdCBoYXZlIGJlZW4gcmV0 dXJuZWQgZnJvbSB0aGUgdHJvdmUgaW4gdGhlIGZpcnN0IHBsYWNlLgorCSAqLworCWpvaW5faXRt ID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3Vu dCwKKwkJCQkJCQkJCQkJIHJpZHMsIHRhcmdldCk7CisJQXNzZXJ0KGpvaW5faXRtICE9IFBHUEFf SVRNX0RJU0pPSU5UKTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VU IHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8q CisJICogV2UndmUgYWxyZWFkeSBwZXJtaXR0ZWQgYWxsIGFsbG93YWJsZSBjYXNlcywgc28gcmVq ZWN0IHRoaXMuCisJICoKKwkgKiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50LCB0aGVuIHRoZSBhZHZp Y2Ugb3ZlcmxhcHMgd2l0aCB0aGlzIGpvaW4gYnV0CisJICogaXNuJ3QgZW50aXJlbHkgY29udGFp bmVkIHdpdGhpbiBlaXRoZXIgc2lkZSwgYW5kIHRoZXJlJ3MgYWxzbyBhdCBsZWFzdAorCSAqIG9u ZSByZWxhdGlvbiBwcmVzZW50IGluIHRoZSBqb2luIHRoYXQgaXNuJ3QgbWVudGlvbmVkIGJ5IHRo ZSBhZHZpY2UuCisJICoKKwkgKiBGb3IgaW5zdGFuY2UsIGluIHRoZSBIQVNIX0pPSU4oKHggeSkp IGV4YW1wbGUsIHdlIHdvdWxkIHJlYWNoIGhlcmUgaWYgeAorCSAqIHdlcmUgb24gb25lIHNpZGUg b2YgdGhlIGpvaW4sIHkgb24gdGhlIG90aGVyLCBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZQorCSAq IHR3byBzaWRlcyBhbHNvIGluY2x1ZGVkIHNvbWUgb3RoZXIgcmVsYXRpb24sIHNheSB0LiBJbiB0 aGF0IGNhc2UsCisJICogYWNjZXB0aW5nIHRoaXMgam9pbiB3b3VsZCBhbGxvdyB0aGUgKHggeSB0 KSBqb2lucmVsIHRvIGNvbnRhaW4KKwkgKiBub24tZGlzYWJsZWQgcGF0aHMgdGhhdCBkbyBub3Qg cHV0ICh4IHkpIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaAorCSAqIGpvaW47IHdlIGNvdWxk IGluc3RlYWQgZW5kIHVwIHdpdGggc29tZXRoaW5nIGxpa2UgKHggSk9JTiB0KSBKT0lOIHkuCisJ ICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyBhZHZpY2UgY29uY2VybmluZyBh biBvcGFxdWUgam9pbiBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICogQnkgYW4gb3BhcXVl IGpvaW4sIHdlIG1lYW4gb25lIHdoZXJlIHRoZSBleGFjdCBtZWNoYW5pc20gYnkgd2hpY2ggdGhl CisgKiBqb2luIGlzIHBlcmZvcm1lZCBpcyBub3QgdmlzaWJsZSB0byBQb3N0Z3JlU1FMLiBDdXJy ZW50bHkgdGhpcyBpcyB0aGUKKyAqIGNhc2Ugb25seSBmb3IgZm9yZWlnbiBqb2luczogRk9SRUlH Tl9KT0lOKCh4IHkgeikpIG1lYW5zIHRoYXQgeCwgeSwgYW5kCisgKiB6IGFyZSBqb2luZWQgb24g dGhlIHJlbW90ZSBzaWRlLCBidXQgd2Uga25vdyBub3RoaW5nIGFib3V0IHRoZSBqb2luIG9yZGVy CisgKiBvciBqb2luIG1ldGhvZHMgdXNlZCBvdmVyIHRoZXJlLgorICoKKyAqIFRoZSBsb2dpYyBo ZXJlIG5lZWRzIHRvIGRpZmZlciBmcm9tIHBncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luIGJl Y2F1c2UsCisgKiBmb3Igb3RoZXIgam9pbiB0eXBlcywgdGhlIGFkdmljZSB0YXJnZXQgaXMgdGhl IHNldCBvZiBpbm5lciByZWxzOyBoZXJlLCBpdAorICogaW5jbHVkZXMgYm90aCBpbm5lciBhbmQg b3V0ZXIgcmVscy4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfb3BhcXVlX2pvaW5fcGVybWl0c19q b2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVu dGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJ ICBib29sICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQg PSBlbnRyeS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZp bml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5 LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJp Y3RfbWV0aG9kID0gZmFsc2U7CisKKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJn ZXQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCS8qCisJCSAqIFdl IGhhdmUgYW4gZXhhY3QgbWF0Y2gsIGFuZCBzaG91bGQgdGhlcmVmb3JlIGFsbG93IHRoZSBqb2lu IGFuZAorCQkgKiBlbmZvcmNlIHRoZSB1c2Ugb2YgdGhlIHJlbGV2YW50IG9wYXF1ZSBqb2luIG1l dGhvZC4KKwkJICovCisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJCSpy ZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoam9pbl9p dG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRN X1RBUkdFVFNfQVJFX1NVQlNFVCkKKwl7CisJCS8qCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFf SVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwgdGhlbiB0aGUgam9pbiB3ZSBjYXJlCisJCSAqIGFib3V0 IGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGFuZCBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBhcHBs eS4KKwkJICoKKwkJICogSWYgam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULCB3 ZSdyZSBzdGlsbCBidWlsZGluZyB1cCB0bworCQkgKiB0aGUgam9pbiB3ZSBjYXJlIGFib3V0IGFu ZCBoYXZlIG5vdCBpbnRyb2R1Y2VkIGFueSBleHRyYW5lb3VzCisJCSAqIHJlbGF0aW9ucyBub3Qg bmFtZWQgaW4gdGhlIGFkdmljZS4gTm90ZSB0aGF0IEZvcmVpZ25TY2FuIHBhdGhzIGZvcgorCQkg KiBqb2lucyBhcmUgYnVpbHQgdXAgZnJvbSBGb3JlaWduU2NhbiBwYXRocyBmcm9tIHVuZGVybHlp bmcgam9pbnMgYW5kCisJCSAqIHNjYW5zLCBzbyB3ZSBtdXN0IG5vdCBkaXNhYmxlIHRoaXMgam9p biB3aGVuIGNvbnNpZGVyaW5nIGEgc3Vic2V0CisJCSAqIG9mIHRoZSByZWxhdGlvbnMgd2UgdWx0 aW1hdGVseSB3YW50LgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBUaGUg YWR2aWNlIG92ZXJsYXBzIHRoZSBqb2luLCBidXQgYXQgbGVhc3Qgb25lIHJlbGF0aW9uIGlzIHBy ZXNlbnQgaW4KKwkgKiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNl LiBXZSB3YW50IHRvIGRpc2FibGUgc3VjaAorCSAqIHBhdGhzIHNvIHRoYXQgd2UgYWN0dWFsbHkg cHVzaCBkb3duIHRoZSBqb2luIGFzIGludGVuZGVkLgorCSAqLworCXJldHVybiBmYWxzZTsKK30K KworLyoKKyAqIERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYSBzZW1pam9pbiBwZXJtaXQgYSBjZXJ0 YWluIGpvaW4/CisgKgorICogVW5saWtlIGpvaW4gbWV0aG9kIGFkdmljZSwgd2hpY2ggbGlzdHMg dGhlIHJlbHMgb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlCisgKiBqb2luLCBzZW1pam9pbiB1bmlx dWVuZXNzIGFkdmljZSBsaXN0cyB0aGUgcmVscyBvbiB0aGUgbnVsbGFibGUgc2lkZSBvZiB0aGUK KyAqIGpvaW4uIFRob3NlIGNhbiBiZSB0aGUgc2FtZSwgaWYgdGhlIGpvaW4gdHlwZSBpcyBKT0lO X1VOSVFVRV9JTk5FUiBvcgorICogSk9JTl9TRU1JLCBvciB0aGV5IGNhbiBiZSBkaWZmZXJlbnQs IGluIGNhc2Ugb2YgSk9JTl9VTklRVUVfT1VURVIgb3IKKyAqIEpPSU5fUklHSFRfU0VNSS4KKyAq CisgKiBXZSBkb24ndCBrbm93IGhlcmUgd2hldGhlciB0aGUgY2FsbGVyIHNwZWNpZmllZCBTRU1J Sk9JTl9VTklRVUUgb3IKKyAqIFNFTUlKT0lOX05PTl9VTklRVUUuIFRoZSBjYWxsZXIgc2hvdWxk IGNoZWNrIHRoZSBqb2luIHR5cGUgYWdhaW5zdCB0aGUKKyAqIGFkdmljZSB0eXBlIGlmIGFuZCBv bmx5IGlmIHdlIHNldCAqcmVzdHJpY3RfbWV0aG9kIHRvIHRydWUuCisgKi8KK3N0YXRpYyBib29s CitwZ3BhX3NlbWlqb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9j b3VudCwKKwkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCSAgIHBncGFfdHJv dmVfZW50cnkgKmVudHJ5LAorCQkJCQkJICAgYm9vbCBvdXRlcl9pc19udWxsYWJsZSwKKwkJCQkJ CSAgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCkKK3sKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9pdG1fdHlwZSBqb2luX2l0bTsKKwlwZ3BhX2l0bV90 eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKworCSpyZXN0cmljdF9t ZXRob2QgPSBmYWxzZTsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRp YWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFf VEVfTUFUQ0hfUEFSVElBTDsKKworCS8qCisJICogSWYgb3V0ZXIgcmVsIGlzIHRoZSBudWxsYWJs ZSBzaWRlIGFuZCBjb250YWlucyBleGFjdGx5IHRoZSBzYW1lCisJICogcmVsYXRpb25zIGFzIHRo ZSBhZHZpY2UgdGFyZ2V0LCB0aGVuIHRoZSBqb2luIG9yZGVyIGlzIGFsbG93YWJsZSwgYnV0CisJ ICogdGhlIGNhbGxlciBtdXN0IGNoZWNrIHdoZXRoZXIgdGhlIGFkdmljZSB0YWcgKGVpdGhlciBT RU1JSk9JTl9VTklRVUUgb3IKKwkgKiBTRU1JSk9JTl9OT05fVU5JUVVFKSBtYXRjaGVzIHRoZSBq b2luIHR5cGUuCisJICoKKwkgKiBJZiB0aGUgb3V0ZXIgcmVsIGlzIGEgc3VwZXJzZXQgb2YgdGhl IHRhcmdldCByZWxhdGlvbnMsIHRoZSBqb2luIHdlCisJICogY2FyZSBhYm91dCBoYXMgYWxyZWFk eSB0YWtlbiBwbGFjZSwgc28gd2Ugc2hvdWxkIGltcG9zZSBubyBmdXJ0aGVyCisJICogcmVzdHJp Y3Rpb25zLgorCSAqLworCW91dGVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0 KG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMsIHRhcmdldCk7CisJaWYgKG91dGVyX2l0 bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENI X0ZVTEw7CisJCWlmIChvdXRlcl9pc19udWxsYWJsZSkKKwkJeworCQkJKnJlc3RyaWN0X21ldGhv ZCA9IHRydWU7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwllbHNlIGlmIChvdXRlcl9pdG0g PT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIEFz IGFib3ZlLCBidXQgZm9yIHRoZSBpbm5lciByZWwuICovCisJaW5uZXJfaXRtID0gcGdwYV9pZGVu dGlmaWVyc19tYXRjaF90YXJnZXQoaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSAgcmlkcyArIG91 dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHRhcmdldCk7CisJaWYgKGlubmVyX2l0bSA9PSBQR1BB X0lUTV9FUVVBTCkKKwl7CisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJ CWlmICghb3V0ZXJfaXNfbnVsbGFibGUpCisJCXsKKwkJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVl OworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJZWxzZSBpZiAoaW5uZXJfaXRtID09IFBHUEFf SVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIElmIGV2 ZXJ5dGhpbmcgaW4gdGhlIGpvaW5yZWwgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwgd2Un cmUgYmVsb3cKKwkgKiB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9sLgor CSAqLworCWpvaW5faXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291 bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHJpZHMsIHRhcmdldCk7CisJQXNzZXJ0KGpv aW5faXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1f S0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQlyZXR1 cm4gdHJ1ZTsKKworCS8qCisJICogV2UndmUgdGVzdGVkIGZvciBhbGwgYWxsb3dhYmxlIHBvc3Np YmlsaXRpZXMsIGFuZCBzbyBtdXN0IHJlamVjdCB0aGlzCisJICogam9pbiBvcmRlci4gVGhpcyBj YW4gaGFwcGVuIGluIHR3byB3YXlzLgorCSAqCisJICogRmlyc3QsIHdlIG1pZ2h0IGJlIGNvbnNp ZGVyaW5nIGEgc2VtaWpvaW4gdGhhdCBvdmVybGFwcyBpbmNvbXBsZXRlbHkKKwkgKiB3aXRoIG9u ZSBvciBib3RoIHNpZGVzIG9mIHRoZSBqb2luLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIgaGFz CisJICogc3BlY2lmaWVkIFNFTUlKT0lOX1VOSVFVRSgodDEgdDIpKSBvciBTRU1JSk9JTl9OT05f VU5JUVVFKCh0MSB0MikpLCB3ZQorCSAqIHNob3VsZCByZWplY3QgYSBwcm9wb3NlZCB0Mi10MyBq b2luLCBzaW5jZSB0aGF0IGNvdWxkIG5vdCByZXN1bHQgaW4gYQorCSAqIGZpbmFsIHBsYW4gY29t cGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UuCisJICoKKwkgKiBTZWNvbmQsIHdlIG1pZ2h0IGJlIGNv bnNpZGVyaW5nIGEgc2VtaWpvaW4gd2hlcmUgdGhlIGFkdmljZSB0YXJnZXQKKwkgKiBwZXJmZWN0 bHkgbWF0Y2hlcyBvbmUgc2lkZSBvZiB0aGUgam9pbiwgYnV0IGl0J3MgdGhlIHdyb25nIG9uZS4g Rm9yCisJICogZXhhbXBsZSwgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdlIG1pZ2h0IHNlZSBhIDMt d2F5IGpvaW4gYmV0d2VlbiB0MSwKKwkgKiB0MiwgYW5kIHQzLCB3aXRoICh0MSB0Mikgb24gdGhl IG5vbi1udWxsYWJsZSBzaWRlLiBUaGF0LCB0b28sIHdvdWxkIGJlCisJICogaW5jb21wYXRpYmxl IHdpdGggdGhlIGFkdmljZS4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBBcHBs eSBzY2FuIGFkdmljZSB0byBhIFJlbE9wdEluZm8uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Bs YW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCSAgIHBncGFf dHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnNjYW5faW5k ZXhlcywKKwkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllcywKKwkJCQkJCQkg ICBCaXRtYXBzZXQgKnJlbF9pbmRleGVzKQoreworCWJvb2wJCWdhdGhlcl9jb25mbGljdCA9IGZh bHNlOworCUJpdG1hcHNldCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBz ZXQgICpnYXRoZXJfZnVsbF9tYXRjaCA9IE5VTEw7CisJaW50CQkJaSA9IC0xOworCXBncGFfdHJv dmVfZW50cnkgKnNjYW5fZW50cnkgPSBOVUxMOworCWludAkJCWZsYWdzOworCWJvb2wJCXNjYW5f dHlwZV9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNldCAgKnNjYW5fdHlwZV9pbmRleGVzID0g TlVMTDsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfcmVsX2luZGV4ZXMgPSBOVUxMOworCXVpbnQ2 NAkJZ2F0aGVyX21hc2sgPSAwOworCXVpbnQ2NAkJc2Nhbl90eXBlID0gMDsKKworCS8qIFNjcnV0 aW5pemUgYXZhaWxhYmxlIHNjYW4gYWR2aWNlLiAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21l bWJlcihzY2FuX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqbXlf ZW50cnkgPSAmc2Nhbl9lbnRyaWVzW2ldOworCQl1aW50NjQJCW15X3NjYW5fdHlwZSA9IDA7CisK KwkJLyogVHJhbnNsYXRlIG91ciBhZHZpY2UgdGFncyB0byBhIHNjYW4gc3RyYXRlZ3kgYWR2aWNl IHZhbHVlLiAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19CSVRNQVBfSEVBUF9T Q0FOKQorCQl7CisJCQkvKgorCQkJICogQ3VycmVudGx5LCBQR1NfQ09OU0lERVJfSU5ERVhPTkxZ IGNhbiBzdXBwcmVzcyBCaXRtYXAgSGVhcAorCQkJICogU2NhbnMsIHNvIGRvbid0IGNsZWFyIGl0 IHdoZW4gc3VjaCBhIHNjYW4gaXMgcmVxdWVzdGVkLiBUaGlzCisJCQkgKiBoYXBwZW5zIGJlY2F1 c2UgYnVpbGRfaW5kZXhfc2NhbigpIHRoaW5rcyB0aGF0IHRoZSBwb3NzaWJpbGl0eQorCQkJICog b2YgYW4gaW5kZXgtb25seSBzY2FuIGlzIGEgc3VmZmljaWVudCByZWFzb24gdG8gY29uc2lkZXIg dXNpbmcKKwkJCSAqIGFuIG90aGVyd2lzZS11c2VsZXNzIGluZGV4LCBhbmQgZ2V0X2luZGV4X3Bh dGhzKCkgdGhpbmtzIHRoYXQKKwkJCSAqIHRoZSBzYW1lIHBhdGhzIHRoYXQgYXJlIHVzZWZ1bCBm b3IgaW5kZXggb3IgaW5kZXgtb25seSBzY2FucworCQkJICogc2hvdWxkIGFsc28gYmUgY29uc2lk ZXJlZCBmb3IgYml0bWFwIHNjYW5zLiBQZXJoYXBzIHRoYXQgbG9naWMKKwkJCSAqIHNob3VsZCBi ZSB0aWdodGVuZWQgdXAsIGJ1dCB1bnRpbCB0aGVuIHdlIG5lZWQgdG8gaW5jbHVkZQorCQkJICog UEdTX0NPTlNJREVSX0lOREVYT05MWSBpbiBteV9zY2FuX3R5cGUgaGVyZS4KKwkJCSAqLworCQkJ bXlfc2Nhbl90eXBlID0gUEdTX0JJVE1BUFNDQU4gfCBQR1NfQ09OU0lERVJfSU5ERVhPTkxZOwor CQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FO KQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX0lOREVYT05MWVNDQU4gfCBQR1NfQ09OU0lERVJfSU5E RVhPTkxZOworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4p CisJCQlteV9zY2FuX3R5cGUgPSBQR1NfSU5ERVhTQ0FOOworCQllbHNlIGlmIChteV9lbnRyeS0+ dGFnID09IFBHUEFfVEFHX1NFUV9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX1NFUVNDQU47 CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfVElEX1NDQU4pCisJCQlteV9z Y2FuX3R5cGUgPSBQR1NfVElEU0NBTjsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHVuZGVyc3Rh bmRhYmxlIHNjYW4gYWR2aWNlLCBoYW5nIG9uIHRvIHRoZSBlbnRyeSwgdGhlCisJCSAqIGluZmVy cmVkIHNjYW4gdHlwZSwgYW5kIHRoZSBpbmRleCBhdCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoK KwkJICogQWxzbyBtYWtlIGEgbm90ZSBpZiB3ZSBzZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFk dmljZS4gTm90ZSB0aGF0CisJCSAqIHdlIHJlZ2FyZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMg YXMgY29uZmxpY3RpbmcgdW5sZXNzIHRoZXkgbWF0Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5 LCBwZXJoYXBzIHdlIGNvdWxkIHJlZ2FyZCBJTkRFWF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVY X1NDQU4oYSBiLmMpIGFzIG5vbi1jb25mbGljdGluZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9u bHkKKwkJICogaW5kZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2Vl bSB3b3J0aCB0aGUgY29kZS4KKwkJICovCisJCWlmIChteV9zY2FuX3R5cGUgIT0gMCkKKwkJewor CQkJaWYgKHNjYW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJ c2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYm IHNjYW5fZW50cnkgIT0gTlVMTCAmJgorCQkJCW15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0g TlVMTCAmJgorCQkJCXNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJ IXBncGFfaW5kZXhfdGFyZ2V0c19lcXVhbChzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJ CQkJCQkJCQkJICBteV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29u ZmxpY3QgPSB0cnVlOworCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0g bXlfc2Nhbl90eXBlOworCQkJc2Nhbl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2Fu X3R5cGVfaW5kZXhlcywgaSk7CisJCX0KKwl9CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBn YXRoZXItcmVsYXRlZCBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlw Z3BhX3Ryb3ZlX2VudHJ5ICpteV9lbnRyeSA9ICZyZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlt eV9nYXRoZXJfbWFzayA9IDA7CisJCWJvb2wJCWp1c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9y ZWwgPSBteV9lbnRyeS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJ CQl8fCBsaXN0X2xlbmd0aChteV9lbnRyeS0+dGFyZ2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkv KgorCQkgKiBQQVJUSVRJT05XSVNFIGJlaGF2ZXMgbGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRo YXQgaWYgdGhlcmUncyBtb3JlCisJCSAqIHRoYW4gb25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBo YXMgbm8gZWZmZWN0IGF0IHRoaXMgbGV2ZWwuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9 PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQl7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJ eworCQkJCWNvbnN0IHVpbnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdF X0FQUEVORDsKKworCQkJCWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nh bl90eXBlKQorCQkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkg PSBteV9lbnRyeTsKKwkJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBl X3JlbF9pbmRleGVzID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVz LCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBH QVRIRVJfTUVSR0UgYXBwbGllZCB0byBhIHNpbmdsZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAor CQkgKiB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgc3RyYXRlZ3kgaGVyZSwgd2hpbGUgYXBwbHlpbmcg ZWl0aGVyIHRvIG1vcmUKKwkJICogdGhhbiBvbmUgcmVsIG1lYW5zIHdlIHNob3VsZCBub3QgdXNl IHRob3NlIHN0cmF0ZWdpZXMgaGVyZSwgYnV0CisJCSAqIHJhdGhlciBhdCB0aGUgbGV2ZWwgb2Yg dGhlIGpvaW5yZWwgdGhhdCBjb3JyZXNwb25kcyB0byB3aGF0IHdhcworCQkgKiBzcGVjaWZpZWQu IE5PX0dBVEhFUiBjYW4gb25seSBiZSBhcHBsaWVkIHRvIHNpbmdsZSByZWxzLgorCQkgKgorCQkg KiBOb3RlIHRoYXQgc2V0dGluZyBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBpbiBteV9nYXRoZXJf bWFzayBpcworCQkgKiBlcXVpdmFsZW50IHRvIGFsbG93aW5nIHRoZSBub24tdXNlIG9mIGVpdGhl ciBmb3JtIG9mIEdhdGhlciBoZXJlLgorCQkgKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQ QV9UQUdfR0FUSEVSIHx8CisJCQlteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJH RSkKKwkJeworCQkJaWYgKCFqdXN0X29uZV9yZWwpCisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1Nf Q09OU0lERVJfTk9OUEFSVElBTDsKKwkJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9U QUdfR0FUSEVSKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCWVsc2UKKwkJ CQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVJfTUVSR0U7CisJCX0KKwkJZWxzZSBpZiAobXlf ZW50cnktPnRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCXsKKwkJCUFzc2VydChqdXN0X29u ZV9yZWwpOworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJ fQorCisJCS8qCisJCSAqIElmIHdlIHNldCBteV9nYXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3 ZSAoMSkgbWFrZSBhIG5vdGUgaWYgdGhlCisJCSAqIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVt ZW1iZXIgdGhlIG1hc2sgdmFsdWUsIGFuZCAoMykgcmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlz IHdhcyBhIGZ1bGwgb3IgcGFydGlhbCBtYXRjaC4KKwkJICovCisJCWlmIChteV9nYXRoZXJfbWFz ayAhPSAwKQorCQl7CisJCQlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBt eV9nYXRoZXJfbWFzaykKKwkJCQlnYXRoZXJfY29uZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21h c2sgPSBteV9nYXRoZXJfbWFzazsKKwkJCWlmIChqdXN0X29uZV9yZWwpCisJCQkJZ2F0aGVyX2Z1 bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNl CisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfcGFydGlh bF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKiBFbmZvcmNlIGNob2ljZSBvZiBpbmRleC4gKi8K KwlpZiAoc2Nhbl9lbnRyeSAhPSBOVUxMICYmICFzY2FuX3R5cGVfY29uZmxpY3QgJiYKKwkJKHNj YW5fZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOIHx8CisJCSBzY2FuX2VudHJ5LT50 YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKSkKKwl7CisJCXBncGFfaW5kZXhfdGFyZ2V0 ICppdGFyZ2V0ID0gc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0OworCQlJbmRleE9wdEluZm8g Km1hdGNoZWRfaW5kZXggPSBOVUxMOworCisJCWZvcmVhY2hfbm9kZShJbmRleE9wdEluZm8sIGlu ZGV4LCByZWwtPmluZGV4bGlzdCkKKwkJeworCQkJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxf bmFtZShpbmRleC0+aW5kZXhvaWQpOworCQkJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3Bh Y2UoaW5kZXgtPmluZGV4b2lkKTsKKwkJCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1l c3BhY2VfbmFtZV9vcl90ZW1wKG5zcG9pZCk7CisKKwkJCWlmIChzdHJjbXAoaXRhcmdldC0+aW5k bmFtZSwgcmVsbmFtZSkgPT0gMCAmJgorCQkJCShpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgPT0gTlVM TCB8fAorCQkJCSBzdHJjbXAoaXRhcmdldC0+aW5kbmFtZXNwYWNlLCByZWxuYW1lc3BhY2UpID09 IDApKQorCQkJeworCQkJCW1hdGNoZWRfaW5kZXggPSBpbmRleDsKKwkJCQlicmVhazsKKwkJCX0K KwkJfQorCisJCWlmIChtYXRjaGVkX2luZGV4ID09IE5VTEwpCisJCXsKKwkJCS8qIERvbid0IGZv cmNlIHRoZSBzY2FuIHR5cGUgaWYgdGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QuICovCisJCQlzY2Fu X3R5cGUgPSAwOworCisJCQkvKiBNYXJrIGFkdmljZSBhcyBpbmFwcGxpY2FibGUuICovCisJCQlw Z3BhX3Ryb3ZlX3NldF9mbGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLAorCQkJ CQkJCQkgUEdQQV9URV9JTkFQUExJQ0FCTEUpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRGlz YWJsZSBldmVyeSBvdGhlciBpbmRleC4gKi8KKwkJCWZvcmVhY2hfbm9kZShJbmRleE9wdEluZm8s IGluZGV4LCByZWwtPmluZGV4bGlzdCkKKwkJCXsKKwkJCQlpZiAoaW5kZXggIT0gbWF0Y2hlZF9p bmRleCkKKwkJCQkJaW5kZXgtPmRpc2FibGVkID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCS8q CisJICogTWFyayBhbGwgdGhlIHNjYW4gbWV0aG9kIGVudHJpZXMgYXMgZnVsbHkgbWF0Y2hlZDsg YW5kIGlmIHRoZXkgc3BlY2lmeQorCSAqIGRpZmZlcmVudCB0aGluZ3MsIG1hcmsgdGhlbSBhbGwg YXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUwgfCBQ R1BBX1RFX01BVENIX0ZVTEw7CisJaWYgKHNjYW5fdHlwZV9jb25mbGljdCkKKwkJZmxhZ3MgfD0g UEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhzY2FuX2VudHJpZXMs IHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2Vu dHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgZmxhZ3MpOworCisJLyoKKwkgKiBNYXJrIGV2 ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZC4g TWFyaworCSAqIHRoZSBvbmVzIHRoYXQgaW5jbHVkZWQgdGhpcyByZWxhdGlvbiBhcyBhIHRhcmdl dCBieSBpdHNlbGYgYXMgZnVsbHkKKwkgKiBtYXRjaGVkLiBJZiB0aGVyZSB3YXMgYSBjb25mbGlj dCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlmbGFncyA9IFBHUEFfVEVf TUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RF X0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRyaWVzLCBnYXRoZXJf cGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlw Z3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVyX2Z1bGxfbWF0Y2gsIGZsYWdz KTsKKworCS8qCisJICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24gdGhlIHNjYW4gdHlwZSBhbmQg dXNlIG9mIEdhdGhlci9HYXRoZXIgTWVyZ2UuCisJICogT25seSBjbGVhciBiaXRzIGhlcmUsIHNv IHRoYXQgd2Ugc3RpbGwgcmVzcGVjdCB0aGUgZW5hYmxlXyogR1VDcy4gRG8KKwkgKiBub3RoaW5n IGluIGNhc2VzIHdoZXJlIHRoZSBhZHZpY2Ugb24gYSBzaW5nbGUgdG9waWMgY29uZmxpY3RzLgor CSAqLworCWlmIChzY2FuX3R5cGUgIT0gMCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0KQorCXsKKwkJ dWludDY0CQlhbGxfc2Nhbl9tYXNrOworCisJCWFsbF9zY2FuX21hc2sgPSBQR1NfU0NBTl9BTlkg fCBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCB8CisJCQlQR1NfQ09OU0lERVJfSU5ERVhP TkxZOworCQlyZWwtPnBnc19tYXNrICY9IH4oYWxsX3NjYW5fbWFzayAmIH5zY2FuX3R5cGUpOwor CX0KKwlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiAhZ2F0aGVyX2NvbmZsaWN0KQorCXsKKwkJdWlu dDY0CQlhbGxfZ2F0aGVyX21hc2s7CisKKwkJYWxsX2dhdGhlcl9tYXNrID0KKwkJCVBHU19HQVRI RVIgfCBQR1NfR0FUSEVSX01FUkdFIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCXJlbC0+ cGdzX21hc2sgJj0gfihhbGxfZ2F0aGVyX21hc2sgJiB+Z2F0aGVyX21hc2spOworCX0KK30KKwor LyoKKyAqIEFkZCBmZWVkYmFjayBlbnRyaWVzIGZvciBvbmUgdHJvdmUgc2xpY2UgdG8gdGhlIHBy b3ZpZGVkIGxpc3QgYW5kCisgKiByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0LgorICoKKyAqIEZl ZWRiYWNrIGVudHJpZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSB0cm92ZSBlbnRyeSdzIGZsYWdz LiBJdCdzIGFzc3VtZWQKKyAqIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBzZXQgYWxsIHJl bGV2YW50IGZsYWdzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorICogUEdQQV9URV9GQUlMRUQuIFdl IHNldCB0aGF0IGZsYWcgaGVyZSBpZiBhcHByb3ByaWF0ZS4KKyAqLworc3RhdGljIExpc3QgKgor cGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3ZlICp0cm92 ZSwKKwkJCQkJCQkgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCSBwZ3BhX2lk ZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCSBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlcikKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCWludAkJCW5lbnRy aWVzOworCisJcGdwYV90cm92ZV9sb29rdXBfYWxsKHRyb3ZlLCB0eXBlLCAmZW50cmllcywgJm5l bnRyaWVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbnRyaWVzOyArK2kpCisJeworCQlwZ3Bh X3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCQlEZWZFbGVtICAgICppdGVtOwor CisJCS8qCisJCSAqIElmIHRoaXMgZW50cnkgd2FzIGZ1bGx5IG1hdGNoZWQsIGNoZWNrIHdoZXRo ZXIgZ2VuZXJhdGluZyBhZHZpY2UKKwkJICogZnJvbSB0aGlzIHBsYW4gd291bGQgcHJvZHVjZSBz dWNoIGFuIGVudHJ5LiBJZiBub3QsIGxhYmVsIHRoZSBlbnRyeQorCQkgKiBhcyBmYWlsZWQuCisJ CSAqLworCQlpZiAoKGVudHJ5LT5mbGFncyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkgIT0gMCAmJgor CQkJIXBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZSh3YWxrZXIsIHJ0X2lkZW50aWZpZXJzLAorCQkJ CQkJCQkJICBlbnRyeS0+dGFnLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCWVudHJ5LT5mbGFncyB8PSBQ R1BBX1RFX0ZBSUxFRDsKKworCQlpdGVtID0gbWFrZURlZkVsZW0ocGdwYV9jc3RyaW5nX3Ryb3Zl X2VudHJ5KGVudHJ5KSwKKwkJCQkJCSAgIChOb2RlICopIG1ha2VJbnRlZ2VyKGVudHJ5LT5mbGFn cyksIC0xKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgaXRlbSk7CisJfQorCisJcmV0dXJuIGxp c3Q7Cit9CisKKy8qCisgKiBFbWl0IGEgV0FSTklORyB0byB0ZWxsIHRoZSB1c2VyIGFib3V0IGEg cHJvYmxlbSB3aXRoIHRoZSBzdXBwbGllZCBwbGFuCisgKiBhZHZpY2UuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX3BsYW5uZXJfZmVlZGJhY2tfd2FybmluZyhMaXN0ICpmZWVkYmFjaykKK3sKKwlT dHJpbmdJbmZvRGF0YSBkZXRhaWxidWY7CisJU3RyaW5nSW5mb0RhdGEgZmxhZ2J1ZjsKKworCS8q IFF1aWNrIGV4aXQgaWYgdGhlcmUncyBubyBmZWVkYmFjay4gKi8KKwlpZiAoZmVlZGJhY2sgPT0g TklMKQorCQlyZXR1cm47CisKKwkvKiBJbml0aWFsaXplIGJ1ZmZlcnMuICovCisJaW5pdFN0cmlu Z0luZm8oJmRldGFpbGJ1Zik7CisJaW5pdFN0cmluZ0luZm8oJmZsYWdidWYpOworCisJLyogTWFp biBsb29wLiAqLworCWZvcmVhY2hfbm9kZShEZWZFbGVtLCBpdGVtLCBmZWVkYmFjaykKKwl7CisJ CWludAkJCWZsYWdzID0gZGVmR2V0SW50MzIoaXRlbSk7CisKKwkJLyoKKwkJICogRG9uJ3QgZW1p dCBhbnl0aGluZyBpZiBpdCB3YXMgZnVsbHkgbWF0Y2hlZCB3aXRoIG5vIHByb2JsZW1zIGZvdW5k LgorCQkgKgorCQkgKiBOQjogRmVlZGJhY2sgc2hvdWxkIG5ldmVyIGJlIG1hcmtlZCBmdWxseSBt YXRjaGVkIHdpdGhvdXQgYWxzbworCQkgKiBiZWluZyBtYXJrZWQgcGFydGlhbGx5IG1hdGNoZWQu CisJCSAqLworCQlpZiAoZmxhZ3MgPT0gKFBHUEFfVEVfTUFUQ0hfUEFSVElBTCB8IFBHUEFfVEVf TUFUQ0hfRlVMTCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUZXJtaW5hdGUgZWFjaCBk ZXRhaWwgbGluZSBleGNlcHQgdGhlIGxhc3Qgd2l0aCBhIG5ld2xpbmUuIFRoaXMgaXMKKwkJICog YWxzbyBhIGNvbnZlbmllbnQgcGxhY2UgdG8gcmVzZXQgZmxhZ2J1Zi4KKwkJICovCisJCWlmIChk ZXRhaWxidWYubGVuID4gMCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRldGFpbGJ1 ZiwgJ1xuJyk7CisJCQlyZXNldFN0cmluZ0luZm8oJmZsYWdidWYpOworCQl9CisKKwkJLyogR2Vu ZXJhdGUgb3V0cHV0LiAqLworCQlwZ3BhX3Ryb3ZlX2FwcGVuZF9mbGFncygmZmxhZ2J1ZiwgZmxh Z3MpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZkZXRhaWxidWYsICJhZHZpY2UgJXMgZmVlZGJhY2sg aXMgXCIlc1wiIiwKKwkJCQkJCSBpdGVtLT5kZWZuYW1lLCBmbGFnYnVmLmRhdGEpOworCX0KKwor CS8qIEVtaXQgdGhlIHdhcm5pbmcsIGlmIGFueSBwcm9ibGVtcyB3ZXJlIGZvdW5kLiAqLworCWlm IChkZXRhaWxidWYubGVuID4gMCkKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCWVycm1zZygic3Vw cGxpZWQgcGxhbiBhZHZpY2Ugd2FzIG5vdCBlbmZvcmNlZCIpLAorCQkJCWVycmRldGFpbCgiJXMi LCBkZXRhaWxidWYuZGF0YSkpOworfQorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisv KgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBhIGtleSBjb25zaXN0aW5nIG9mIGFuIFJUSSBh bmQgcGxhbiBuYW1lLgorICovCitzdGF0aWMgdWludDMyCitwZ3BhX3JpX2NoZWNrZXJfaGFzaF9r ZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpCit7CisJZmFzdGhhc2hfc3RhdGUgaHM7CisJaW50 CQkJc3BfbGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJaHMuYWNjdW0gPSBrZXku cnRpOworCWZhc3RoYXNoX2NvbWJpbmUoJmhzKTsKKworCS8qIHBsYW5fbmFtZSBjYW4gYmUgTlVM TCAqLworCWlmIChrZXkucGxhbl9uYW1lID09IE5VTEwpCisJCXNwX2xlbiA9IDA7CisJZWxzZQor CQlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBsYW5fbmFtZSk7CisK KwkvKiBoYXNoZm5fdW5zdGFibGUuaCByZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMg dHdlYWsgKi8KKwlyZXR1cm4gZmFzdGhhc2hfZmluYWwzMigmaHMsIHNwX2xlbik7Cit9CisKKyNl bmRpZgorCisvKgorICogU2F2ZSB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBmb3Igb25lIHJl bGF0aW9uIGZvciBmdXR1cmUgY3Jvc3MtY2hlY2tpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lckluZm8gKnJv b3QsCisJCQkJCSBSZWxPcHRJbmZvICpyZWwpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lO RworCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5OworCXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisJ cGdwYV9pZGVudGlmaWVyIHJpZDsKKwljb25zdCBjaGFyICpyaWRfc3RyaW5nOworCWJvb2wJCWZv dW5kOworCisJa2V5LnJ0aSA9IGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbC0+cmVsaWRzKTsKKwlr ZXkucGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworCXBncGFfY29tcHV0ZV9pZGVudGlmaWVy X2J5X3J0aShyb290LCBrZXkucnRpLCAmcmlkKTsKKwlyaWRfc3RyaW5nID0gcGdwYV9pZGVudGlm aWVyX3N0cmluZygmcmlkKTsKKwljaGVjayA9IHBncGFfcmlfY2hlY2tfaW5zZXJ0KHBwcy0+cmlf Y2hlY2tfaGFzaCwga2V5LCAmZm91bmQpOworCUFzc2VydCghZm91bmQgfHwgc3RyY21wKGNoZWNr LT5yaWRfc3RyaW5nLCByaWRfc3RyaW5nKSA9PSAwKTsKKwljaGVjay0+cmlkX3N0cmluZyA9IHJp ZF9zdHJpbmc7CisjZW5kaWYKK30KKworLyoKKyAqIFZhbGlkYXRlIHRoYXQgdGhlIHJhbmdlIHRh YmxlIGlkZW50aWZpZXJzIHdlIHdlcmUgYWJsZSB0byBnZW5lcmF0ZSBkdXJpbmcKKyAqIHBsYW5u aW5nIG1hdGNoIHRoZSBvbmVzIHdlIGdlbmVyYXRlZCBmcm9tIHRoZSBmaW5hbCBwbGFuLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0 ZSAqcHBzLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lO RworCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnM7CisJcGdwYV9yaV9jaGVja19pdGVy YXRvciBpdDsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNoZWNrOworCisJLyogQ3JlYXRlIGlkZW50aWZp ZXJzIGZyb20gdGhlIHBsYW5uZWQgc3RhdGVtZW50LiAqLworCXJ0X2lkZW50aWZpZXJzID0gcGdw YV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChwc3RtdCk7CisKKwkvKiBJdGVy YXRlIG92ZXIgaWRlbnRpZmllcnMgY3JlYXRlZCBkdXJpbmcgcGxhbm5pbmcsIHNvIHdlIGNhbiBj b21wYXJlLiAqLworCXBncGFfcmlfY2hlY2tfc3RhcnRfaXRlcmF0ZShwcHMtPnJpX2NoZWNrX2hh c2gsICZpdCk7CisJd2hpbGUgKChjaGVjayA9IHBncGFfcmlfY2hlY2tfaXRlcmF0ZShwcHMtPnJp X2NoZWNrX2hhc2gsICZpdCkpICE9IE5VTEwpCisJeworCQlpbnQJCQlydG9mZnNldCA9IDA7CisJ CWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJCUluZGV4CQlmbGF0X3J0aTsKKworCQkvKgorCQkg KiBJZiB0aGVyZSdzIG5vIHBsYW4gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbnRyeSwgdGhl biB0aGUKKwkJICogcnRvZmZzZXQgaXMgMC4gT3RoZXJ3aXNlLCB3ZSBjYW4gc2VhcmNoIHRoZSBT dWJQbGFuUlRJbmZvIGxpc3QgdG8KKwkJICogZmluZCB0aGUgcnRvZmZzZXQuCisJCSAqLworCQlp ZiAoY2hlY2stPmtleS5wbGFuX25hbWUgIT0gTlVMTCkKKwkJeworCQkJZm9yZWFjaF9ub2RlKFN1 YlBsYW5SVEluZm8sIHJ0aW5mbywgcHN0bXQtPnN1YnJ0aW5mb3MpCisJCQl7CisJCQkJLyoKKwkJ CQkgKiBJZiBydGluZm8tPmR1bW15IGlzIHNldCwgdGhlbiB0aGUgc3VicXVlcnkncyByYW5nZSB0 YWJsZQorCQkJCSAqIHdpbGwgb25seSBoYXZlIGJlZW4gcGFydGlhbGx5IGNvcGllZCB0byB0aGUg ZmluYWwgcmFuZ2UKKwkJCQkgKiB0YWJsZS4gU3BlY2lmaWNhbGx5LCBvbmx5IFJURV9SRUxBVElP TiBlbnRyaWVzIGFuZAorCQkJCSAqIFJURV9TVUJRVUVSWSBlbnRyaWVzIHRoYXQgd2VyZSBvbmNl IFJURV9SRUxBVElPTiBlbnRyaWVzCisJCQkJICogd2lsbCBiZSBjb3BpZWQsIGFzIHBlciBhZGRf cnRlc190b19mbGF0X3J0YWJsZS4gVGhlcmVmb3JlLAorCQkJCSAqIHRoZXJlJ3Mgbm8gZml4ZWQg cnRvZmZzZXQgdGhhdCB3ZSBjYW4gYXBwbHkgdG8gdGhlIFJUSXMKKwkJCQkgKiB1c2VkIGR1cmlu ZyBwbGFubmluZyB0byBsb2NhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb25zCisJCQkJICog aW4gdGhlIGZpbmFsIHJ0YWJsZS4KKwkJCQkgKgorCQkJCSAqIFdpdGggbW9yZSBjb21wbGV4IGxv Z2ljLCB3ZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGF0IHByb2JsZW0KKwkJCQkgKiBieSByZW1lbWJl cmluZyB0aGUgd2hvbGUgY29udGVudHMgb2YgdGhlIHN1YnF1ZXJ5J3MgcnRhYmxlCisJCQkJICog ZHVyaW5nIHBsYW5uaW5nLCBkZXRlcm1pbmluZyB3aGljaCBvZiB0aG9zZSB3b3VsZCBoYXZlIGJl ZW4KKwkJCQkgKiBjb3BpZWQgdG8gdGhlIGZpbmFsIHJ0YWJsZSwgYW5kIG1hdGNoaW5nIHRoZW0g dXAuIEJ1dCBpdAorCQkJCSAqIGRvZXNuJ3Qgc2VlbSBsaWtlIGEgd29ydGh3aGlsZSBlbmRlYXZv ciBmb3IgcmlnaHQgbm93LAorCQkJCSAqIGJlY2F1c2UgUlRJcyBmcm9tIHN1Y2ggc3VicXVlcmll cyB3b24ndCBhcHBlYXIgaW4gdGhlIHBsYW4KKwkJCQkgKiB0cmVlIGl0c2VsZiwganVzdCBpbiB0 aGUgcmFuZ2UgdGFibGUuIEhlbmNlLCB3ZSBjYW4gbmVpdGhlcgorCQkJCSAqIGdlbmVyYXRlIG5v ciBhY2NlcHQgYWR2aWNlIGZvciB0aGVtLgorCQkJCSAqLworCQkJCWlmIChzdHJjbXAoY2hlY2st PmtleS5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9uYW1lKSA9PSAwCisJCQkJCSYmICFydGluZm8t PmR1bW15KQorCQkJCXsKKwkJCQkJcnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zmc2V0OworCQkJCQlB c3NlcnQocnRvZmZzZXQgPiAwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkvKgor CQkJICogSXQncyBub3QgYW4gZXJyb3IgaWYgd2UgZG9uJ3QgZmluZCB0aGUgcGxhbiBuYW1lOiB0 aGF0IGp1c3QKKwkJCSAqIG1lYW5zIHRoYXQgd2UgcGxhbm5lZCBhIHN1YnBsYW4gYnkgdGhpcyBu YW1lIGJ1dCBpdCBlbmRlZCB1cAorCQkJICogYmVpbmcgYSBkdW1teSBzdWJwbGFuIGFuZCBzbyB3 YXNuJ3QgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHBsYW4KKwkJCSAqIHRyZWUuCisJCQkgKi8KKwkJ CWlmIChydG9mZnNldCA9PSAwKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogY2hl Y2stPmtleS5ydGkgaXMgdGhlIFJUSSB0aGF0IHdlIHNhdyBwcmlvciB0byByYW5nZS10YWJsZQor CQkgKiBmbGF0dGVuaW5nLCBzbyB3ZSBtdXN0IGFkZCB0aGUgYXBwcm9wcmlhdGUgUlQgb2Zmc2V0 IHRvIGdldCB0aGUKKwkJICogZmluYWwgUlRJLgorCQkgKi8KKwkJZmxhdF9ydGkgPSBjaGVjay0+ a2V5LnJ0aSArIHJ0b2Zmc2V0OworCQlBc3NlcnQoZmxhdF9ydGkgPD0gbGlzdF9sZW5ndGgocHN0 bXQtPnJ0YWJsZSkpOworCisJCS8qIEFzc2VydCB0aGF0IHRoZSBzdHJpbmcgd2UgY29tcHV0ZSBu b3cgbWF0Y2hlcyB0aGUgcHJldmlvdXMgb25lLiAqLworCQlyaWRfc3RyaW5nID0gcGdwYV9pZGVu dGlmaWVyX3N0cmluZygmcnRfaWRlbnRpZmllcnNbZmxhdF9ydGkgLSAxXSk7CisJCUFzc2VydChz dHJjbXAocmlkX3N0cmluZywgY2hlY2stPnJpZF9zdHJpbmcpID09IDApOworCX0KKyNlbmRpZgor fQorCisvKgorICogQ29udmVydCBhIGJpdG1hcHNldCB0byBhIEMgc3RyaW5nIG9mIGNvbW1hLXNl cGFyYXRlZCBpbnRlZ2Vycy4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9ibXNfdG9fY3N0cmlu ZyhCaXRtYXBzZXQgKmJtcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJaW50CQkJeCA9IC0x OworCisJaWYgKGJtc19pc19lbXB0eShibXMpKQorCQlyZXR1cm4gIm5vbmUiOworCisJaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisJd2hpbGUgKCh4ID0gYm1zX25leHRfbWVtYmVyKGJtcywgeCkpID49 IDApCisJeworCQlpZiAoYnVmLmxlbiA+IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIs ICVkIiwgeCk7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVkIiwgeCk7CisJ fQorCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCisvKgorICogQ29udmVydCBhIEpvaW5UeXBlIHRv IGEgQyBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3BncGFfam9pbnR5cGVfdG9f Y3N0cmluZyhKb2luVHlwZSBqb2ludHlwZSkKK3sKKwlzd2l0Y2ggKGpvaW50eXBlKQorCXsKKwkJ Y2FzZSBKT0lOX0lOTkVSOgorCQkJcmV0dXJuICJpbm5lciI7CisJCWNhc2UgSk9JTl9MRUZUOgor CQkJcmV0dXJuICJsZWZ0IjsKKwkJY2FzZSBKT0lOX0ZVTEw6CisJCQlyZXR1cm4gImZ1bGwiOwor CQljYXNlIEpPSU5fUklHSFQ6CisJCQlyZXR1cm4gInJpZ2h0IjsKKwkJY2FzZSBKT0lOX1NFTUk6 CisJCQlyZXR1cm4gInNlbWkiOworCQljYXNlIEpPSU5fQU5USToKKwkJCXJldHVybiAiYW50aSI7 CisJCWNhc2UgSk9JTl9SSUdIVF9TRU1JOgorCQkJcmV0dXJuICJyaWdodCBzZW1pIjsKKwkJY2Fz ZSBKT0lOX1JJR0hUX0FOVEk6CisJCQlyZXR1cm4gInJpZ2h0IGFudGkiOworCQljYXNlIEpPSU5f VU5JUVVFX09VVEVSOgorCQkJcmV0dXJuICJ1bmlxdWUgb3V0ZXIiOworCQljYXNlIEpPSU5fVU5J UVVFX0lOTkVSOgorCQkJcmV0dXJuICJ1bmlxdWUgaW5uZXIiOworCX0KKwlyZXR1cm4gIj8/PyI7 Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYzcwZTQ4NmE3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfcGxhbm5lci5oCisgKgkgIHBsYW5uZXIgaW50ZWdy YXRpb24gZm9yIHBnX3BsYW5fYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgUEdQQV9QTEFOTkVSX0gKKyNkZWZpbmUgUEdQQV9QTEFOTkVSX0gKKworZXh0ZXJu IHZvaWQgcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCk7CisKK2V4dGVybiBpbnQJcGdw YV9wbGFubmVyX2dlbmVyYXRlX2FkdmljZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTRiZGUzZTE0 OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5j CkBAIC0wLDAgKzEsMjcxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4u YworICoJICBhbmFseXNpcyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9zY2Fu LmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9k ZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKK3N0YXRpYyBwZ3BhX3NjYW4g KnBncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpw bGFuLAorCQkJCQkJCQkgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkgQml0 bWFwc2V0ICpyZWxpZHMpOworCisKK3N0YXRpYyBSVEVLaW5kIHVuaXF1ZV9ub25qb2luX3J0ZWtp bmQoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKKy8qCisgKiBCdWlsZCBhIHBn cGFfc2NhbiBvYmplY3QgZm9yIGEgUGxhbiBub2RlIGFuZCB1cGRhdGUgdGhlIHBsYW4gd2Fsa2Vy CisgKiBjb250ZXh0IGFzIGFwcHJvcHJpYXRlLiAgSWYgdGhpcyBpcyBhbiBBcHBlbmQgb3IgTWVy Z2VBcHBlbmQgc2NhbiwgYWxzbworICogYnVpbGQgcGdwYV9zY2FuIGZvciBhbnkgc2NhbnMgdGhh dCB3ZXJlIGNvbnNvbGlkYXRlZCBpbnRvIHRoaXMgb25lIGJ5CisgKiBBcHBlbmQvTWVyZ2VBcHBl bmQgcHVsbC11cC4KKyAqCisgKiBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgRWxpZGVkTm9kZSBm b3IgdGhpcyBwbGFuIG5vZGUsIHBhc3MgdGhlIHVwcGVybW9zdAorICogb25lIGFzIGVsaWRlZF9u b2RlLCBlbHNlIHBhc3MgTlVMTC4KKyAqCisgKiBTZXQgdGhlICdiZW5lYXRoX2FueV9nYXRoZXIn IG5vZGUgaWYgd2UgYXJlIHVuZGVybmVhdGggYSBHYXRoZXIgb3IKKyAqIEdhdGhlciBNZXJnZSBu b2RlIChleGNlcHQgZm9yIGEgc2luZ2xlLWNvcHkgR2F0aGVyIG5vZGUsIGZvciB3aGljaAorICog R0FUSEVSIG9yIEdBVEhFUl9NRVJHRSBhZHZpY2Ugc2hvdWxkIG5vdCBiZSBlbWl0dGVkKS4KKyAq CisgKiBTZXQgdGhlICd3aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFnIGlmIHdlJ3JlIGluc2lkZSBv ZiBhIGpvaW4gcHJvYmxlbSBhbmQKKyAqIG5vdCBvdGhlcndpc2UuCisgKi8KK3BncGFfc2NhbiAq CitwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4g KnBsYW4sCisJCQkJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJCQkJYm9vbCBiZW5lYXRoX2Fu eV9nYXRoZXIsIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSkKK3sKKwlwZ3BhX3NjYW5fc3RyYXRl Z3kgc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJQml0bWFwc2V0ICAqcmVsaWRzID0g TlVMTDsKKwlpbnQJCQlydGkgPSAtMTsKKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0 cyA9IE5JTDsKKwlOb2RlVGFnCQlub2RldHlwZSA9IG5vZGVUYWcocGxhbik7CisKKwlpZiAoZWxp ZGVkX25vZGUgIT0gTlVMTCkKKwl7CisJCW5vZGV0eXBlID0gZWxpZGVkX25vZGUtPmVsaWRlZF90 eXBlOworCQlyZWxpZHMgPSBlbGlkZWRfbm9kZS0+cmVsaWRzOworCisJCS8qCisJCSAqIElmIHNl dHJlZnMgcHJvY2Vzc2luZyBlbGlkZWQgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgdGhh dCBoYWQKKwkJICogb25seSBvbmUgc3Vydml2aW5nIGNoaWxkLCBpdCBjb3VsZCBiZSBlaXRoZXIg YSBwYXJ0aXRpb253aXNlCisJCSAqIG9wZXJhdGlvbiBvciBhIHNldG9wIG92ZXIgc3VicXVlcmll cywgZGVwZW5kaW5nIG9uIHRoZSBydGVraW5kLgorCQkgKgorCQkgKiBBIHNldG9wIG92ZXIgc3Vi cXVlcmllcywgb3IgYSB0cml2aWFsIFN1YnF1ZXJ5U2NhbiB0aGF0IHdhcyBlbGlkZWQsCisJCSAq IGlzIGFuICJvcmRpbmFyeSIgc2NhbiBpLmUuIG9uZSBmb3Igd2hpY2ggd2UgZG8gbm90IG5lZWQg dG8gZ2VuZXJhdGUKKwkJICogYWR2aWNlIGJlY2F1c2UgdGhlIHBsYW5uZXIgaGFzIG5vdCBtYWRl IGFueSBtZWFuaW5nZnVsIGNob2ljZS4KKwkJICoKKwkJICogTm90ZSB0aGF0IHRoZSBQR1BBX1ND QU5fUEFSVElUSU9OV0lTRSBjYXNlIGFsc28gaW5jbHVkZXMKKwkJICogcGFydGl0aW9ud2lzZSBq b2luczsgdGhpcyBtb2R1bGUgY29uc2lkZXJzIHRob3NlIHRvIGJlIGEgZm9ybSBvZgorCQkgKiBz Y2FuLCBzaW5jZSB0aGV5IGxhY2sgaW50ZXJuYWwgc3RydWN0dXJlIHRoYXQgd2UgY2FuIGRlY29t cG9zZS4KKwkJICovCisJCWlmICgobm9kZXR5cGUgPT0gVF9BcHBlbmQgfHwgbm9kZXR5cGUgPT0g VF9NZXJnZUFwcGVuZCkgJiYKKwkJCXVuaXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLAorCQkJ CQkJCQkgICB3YWxrZXItPnBzdG10LT5ydGFibGUpID09IFJURV9SRUxBVElPTikKKwkJCXN0cmF0 ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX09SRElOQVJZOworCisJCS8qIEpvaW4gUlRJcyBjYW4gYmUgcHJlc2VudCwgYnV0IGFk dmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJcmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0 X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwl9CisJZWxzZSBp ZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBsYW4pKSAhPSAwKQorCXsKKwkJcmVsaWRzID0gYm1z X21ha2Vfc2luZ2xldG9uKHJ0aSk7CisKKwkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCQl7CisJ CQljYXNlIFRfU2VxU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9TRVE7CisJCQkJYnJl YWs7CisJCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5f QklUTUFQX0hFQVA7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5kZXhTY2FuOgorCQkJCXN0cmF0 ZWd5ID0gUEdQQV9TQ0FOX0lOREVYOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4T25seVNj YW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fSU5ERVhfT05MWTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgVF9UaWRTY2FuOgorCQkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJCQlzdHJhdGVneSA9 IFBHUEFfU0NBTl9USUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCisJCQkJLyoKKwkJCQkg KiBUaGlzIGNhc2UgaW5jbHVkZXMgYSBGb3JlaWduU2NhbiB0YXJnZXRpbmcgYSBzaW5nbGUKKwkJ CQkgKiByZWxhdGlvbjsgbm8gb3RoZXIgc3RyYXRlZ3kgaXMgcG9zc2libGUgaW4gdGhhdCBjYXNl LCBidXQKKwkJCQkgKiBzZWUgYmVsb3csIHdoZXJlIHRoaW5ncyBhcmUgZGlmZmVyZW50IGluIG11 bHRpLXJlbGF0aW9uCisJCQkJICogY2FzZXMuCisJCQkJICovCisJCQkJc3RyYXRlZ3kgPSBQR1BB X1NDQU5fT1JESU5BUlk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAoKHJlbGlkcyA9 IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJc3dpdGNoIChub2RlVGFnKHBsYW4p KQorCQl7CisJCQljYXNlIFRfRm9yZWlnblNjYW46CisKKwkJCQkvKgorCQkJCSAqIElmIG11bHRp cGxlIHJlbGF0aW9ucyBhcmUgYmVpbmcgdGFyZ2V0ZWQgYnkgYSBzaW5nbGUKKwkJCQkgKiBmb3Jl aWduIHNjYW4sIHRoZW4gdGhlIGZvcmVpZ24gam9pbiBoYXMgYmVlbiBwdXNoZWQgdG8gdGhlCisJ CQkJICogcmVtb3RlIHNpZGUsIGFuZCB3ZSB3YW50IHRoYXQgdG8gYmUgcmVmbGVjdGVkIGluIHRo ZQorCQkJCSAqIGdlbmVyYXRlZCBhZHZpY2UuCisJCQkJICovCisJCQkJc3RyYXRlZ3kgPSBQR1BB X1NDQU5fRk9SRUlHTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9BcHBlbmQ6CisKKwkJCQkvKgor CQkJCSAqIEFwcGVuZCBub2RlcyBjYW4gcmVwcmVzZW50IHBhcnRpdGlvbndpc2Ugc2NhbnMgb2Yg YQorCQkJCSAqIHJlbGF0aW9uLCBidXQgd2hlbiB0aGV5IGltcGxlbWVudCBhIHNldCBvcGVyYXRp b24sIHRoZXkgYXJlCisJCQkJICoganVzdCBvcmRpbmFyeSBzY2Fucy4KKwkJCQkgKi8KKwkJCQlp ZiAodW5pcXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkK KwkJCQkJPT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJ T05XSVNFOworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisK KwkJCQkvKiBCZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8KKwkJCQlj aGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9h cHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJ CQkvKiBTYW1lIGxvZ2ljIGhlcmUgYXMgZm9yIEFwcGVuZCwgYWJvdmUuICovCisJCQkJaWYgKHVu aXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpCisJCQkJ CT09IFJURV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lT RTsKKwkJCQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJ LyogQmUgc3VyZSB0byBhY2NvdW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCisJCQkJY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGlsZF9h cHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyYXRlZ3kg PSBQR1BBX1NDQU5fT1JESU5BUlk7CisJCQkJYnJlYWs7CisJCX0KKworCisJCS8qIEpvaW4gUlRJ cyBjYW4gYmUgcHJlc2VudCwgYnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJ cmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3Rt dC0+cnRhYmxlKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdl QXBwZW5kIG5vZGUgaW50byB3aGljaCBzdWJvcmRpbmF0ZSBBcHBlbmQKKwkgKiBvciBNZXJnZUFw cGVuZCBwYXRocyB3ZXJlIG1lcmdlZCwgZWFjaCBvZiB0aG9zZSBtZXJnZWQgcGF0aHMgaXMKKwkg KiBlZmZlY3RpdmVseSBhbm90aGVyIHNjYW4gZm9yIHdoaWNoIHdlIG5lZWQgdG8gYWNjb3VudC4K KwkgKi8KKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBjaGlsZF9yZWxpZHMsIGNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzKQorCXsKKwkJQml0bWFwc2V0ICAqY2hpbGRfbm9uam9pbl9yZWxpZHM7CisK KwkJY2hpbGRfbm9uam9pbl9yZWxpZHMgPQorCQkJcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRz KGNoaWxkX3JlbGlkcywKKwkJCQkJCQkJCQl3YWxrZXItPnBzdG10LT5ydGFibGUpOworCQkodm9p ZCkgcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVneSwKKwkJCQkJCQkgIGNoaWxk X25vbmpvaW5fcmVsaWRzKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgcGxhbiBub2RlIGhhcyBu byBhc3NvY2lhdGVkIFJUSXMsIGl0J3Mgbm90IGEgc2Nhbi4gV2hlbiB0aGUKKwkgKiAnd2l0aGlu X2pvaW5fcHJvYmxlbScgZmxhZyBpcyBzZXQsIHRoYXQncyB1bmV4cGVjdGVkLCBzbyB0aHJvdyBh bgorCSAqIGVycm9yLCBlbHNlIHJldHVybiBxdWlldGx5LgorCSAqLworCWlmIChyZWxpZHMgPT0g TlVMTCkKKwl7CisJCWlmICh3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkJZWxvZyhFUlJPUiwgInBs YW4gbm9kZSBoYXMgbm8gUlRJczogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwkJcmV0dXJu IE5VTEw7CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIGFwcHJvcHJpYXRlIHNldCBvZiBSVElzIHRv IHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zLgorCSAqCisJICogQWRkIG5vdGhpbmcgaWYgd2UncmUg YmVuZWF0aCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwgc2luY2UKKwkgKiBOT19HQVRI RVIgYWR2aWNlIGlzIGNsZWFybHkgaW5hcHByb3ByaWF0ZSBpbiB0aGF0IHNpdHVhdGlvbi4KKwkg KgorCSAqIEFkZCBub3RoaW5nIGlmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5v ZGUsIHdoZXRoZXIgb3Igbm90CisJICogZWxpZGVkLiBXZSdsbCBlbWl0IE5PX0dBVEhFUigpIGZv ciB0aGUgdW5kZXJseWluZyBzY2FuLCB3aGljaCBpcyBnb29kCisJICogZW5vdWdoLgorCSAqLwor CWlmICghYmVuZWF0aF9hbnlfZ2F0aGVyICYmIG5vZGV0eXBlICE9IFRfQXBwZW5kICYmCisJCW5v ZGV0eXBlICE9IFRfTWVyZ2VBcHBlbmQpCisJCXdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zID0KKwkJ CWJtc19hZGRfbWVtYmVycyh3YWxrZXItPm5vX2dhdGhlcl9zY2FucywgcmVsaWRzKTsKKworCS8q IENhbGxlciB0ZWxscyB1cyB3aGV0aGVyIE5PX0dBVEhFUigpIGFkdmljZSBmb3IgdGhpcyBzY2Fu IGlzIG5lZWRlZC4gKi8KKwlyZXR1cm4gcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJh dGVneSwgcmVsaWRzKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHNpbmdsZSBwZ3BhX3NjYW4gb2Jq ZWN0IGFuZCB1cGRhdGUgdGhlIHBncGFfcGxhbl93YWxrZXJfY29udGV4dC4KKyAqLworc3RhdGlj IHBncGFfc2NhbiAqCitwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwgUGxhbiAqcGxhbiwKKwkJCSAgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwgQml0 bWFwc2V0ICpyZWxpZHMpCit7CisJcGdwYV9zY2FuICAqc2NhbjsKKworCS8qIENyZWF0ZSB0aGUg c2NhbiBvYmplY3QuICovCisJc2NhbiA9IHBhbGxvYyhzaXplb2YocGdwYV9zY2FuKSk7CisJc2Nh bi0+cGxhbiA9IHBsYW47CisJc2Nhbi0+c3RyYXRlZ3kgPSBzdHJhdGVneTsKKwlzY2FuLT5yZWxp ZHMgPSByZWxpZHM7CisKKwkvKiBBZGQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGxpc3QuICovCisJ d2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0gPSBsYXBwZW5kKHdhbGtlci0+c2NhbnNbc2Nh bi0+c3RyYXRlZ3ldLAorCQkJCQkJCQkJCQlzY2FuKTsKKworCXJldHVybiBzY2FuOworfQorCisv KgorICogRGV0ZXJtaW5lIHRoZSB1bmlxdWUgcnRla2luZCBvZiBhIHNldCBvZiByZWxpZHMuCisg Ki8KK3N0YXRpYyBSVEVLaW5kCit1bmlxdWVfbm9uam9pbl9ydGVraW5kKEJpdG1hcHNldCAqcmVs aWRzLCBMaXN0ICpydGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJZmlyc3QgPSB0 cnVlOworCVJURUtpbmQJCXJ0ZWtpbmQ7CisKKwlBc3NlcnQocmVsaWRzICE9IE5VTEwpOworCisJ d2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJ UmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBydGFibGUpOworCisJCWlmIChydGUt PnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQlpZiAoZmlyc3QpCisJCXsK KwkJCXJ0ZWtpbmQgPSBydGUtPnJ0ZWtpbmQ7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisJCWVs c2UgaWYgKHJ0ZWtpbmQgIT0gcnRlLT5ydGVraW5kKQorCQkJZWxvZyhFUlJPUiwgInJ0ZWtpbmQg bWlzbWF0Y2g6ICVkIHZzLiAlZCIsCisJCQkJIHJ0ZWtpbmQsIHJ0ZS0+cnRla2luZCk7CisJfQor CisJaWYgKGZpcnN0KQorCQllbG9nKEVSUk9SLCAibm8gbm9uLVJURV9KT0lOIFJURXMgZm91bmQi KTsKKworCXJldHVybiBydGVraW5kOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3NjYW4uaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM5MWMxYTRiNTk2Ci0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApAQCAtMCwwICsx LDg1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uaAorICoJICBhbmFs eXNpcyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogRm9yIHB1cnBvc2VzIG9mIHRoaXMg bW9kdWxlLCBhICJzY2FuIiBpbmNsdWRlcyAoMSkgc2luZ2xlIHBsYW4gbm9kZXMgdGhhdAorICog c2NhbiBtdWx0aXBsZSBSVElzLCBzdWNoIGFzIGEgZGVnZW5lcmF0ZSBSZXN1bHQgbm9kZSB0aGF0 IHJlcGxhY2VzIHdoYXQKKyAqIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW4gYSBqb2luLCBhbmQg KDIpIEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMKKyAqIGltcGxlbWVudGluZyBhIHBhcnRp dGlvbndpc2Ugc2NhbiBvciBhIHBhcnRpdGlvbndpc2Ugam9pbi4gU2FpZAorICogZGlmZmVyZW50 bHksIHNjYW5zIGFyZSB0aGUgbGVhdmVzIG9mIHRoZSBqb2luIHRyZWUgZm9yIGEgc2luZ2xlIGpv aW4KKyAqIHByb2JsZW0uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfc2Nhbi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQ QV9TQ0FOX0gKKyNkZWZpbmUgUEdQQV9TQ0FOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rl cy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0OworCisvKgorICogU2NhbiBzdHJhdGVnaWVzLgorICoKKyAqIFBHUEFf U0NBTl9PUkRJTkFSWSBpcyBhbnkgc2NhbiBzdHJhdGVneSB0aGF0IGlzbid0IGludGVyZXN0aW5n IHRvIHVzCisgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgcGxhbm5lciBkZWNpc2lv biBpbnZvbHZlZC4gRm9yIGV4YW1wbGUsCisgKiB0aGUgb25seSB3YXkgdG8gc2NhbiBhIHN1YnF1 ZXJ5IGlzIGEgU3VicXVlcnlTY2FuLCBhbmQgdGhlIG9ubHkgd2F5IHRvCisgKiBzY2FuIGEgVkFM VUVTIGNvbnN0cnVjdCBpcyBhIFZhbHVlc1NjYW4uIFdlIG5lZWQgbm90IGNhcmUgZXhhY3RseSB3 aGljaAorICogdHlwZSBvZiBwbGFubmVyIG5vZGUgd2FzIHVzZWQgaW4gc3VjaCBjYXNlcywgYmVj YXVzZSB0aGUgc2FtZSB0aGluZyB3aWxsCisgKiBoYXBwZW4gd2hlbiByZXBsYW5uaW5nLgorICoK KyAqIFBHUEFfU0NBTl9PUkRJTkFSWSBhbHNvIGluY2x1ZGVzIFJlc3VsdCBub2RlcyB0aGF0IGNv cnJlc3BvbmQgdG8gc2NhbnMKKyAqIG9yIGV2ZW4gam9pbnMgdGhhdCBhcmUgcHJvdmVkIGVtcHR5 LiBXZSBkb24ndCBrbm93IHdoZXRoZXIgb3Igbm90IHRoZSBzY2FuCisgKiBvciBqb2luIHdpbGwg c3RpbGwgYmUgcHJvdmFibHkgZW1wdHkgYXQgcmVwbGFubmluZyB0aW1lLCBidXQgaWYgaXQgaXMs CisgKiB0aGVuIG5vIHNjYW4tdHlwZSBhZHZpY2UgaXMgbmVlZGVkLCBhbmQgaWYgaXQncyBub3Qs IHdlIGNhbid0IHJlY29tbWVuZAorICogYSBzY2FuIHR5cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQg cGxhbi4KKyAqCisgKiBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSBhbHNvIGx1bXBzIHRvZ2V0aGVy IHNjYW5zIGFuZCBqb2luczogdGhpcyBjYW4KKyAqIGJlIGVpdGhlciBhIHBhcnRpdGlvbndpc2Ug c2NhbiBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlIG9yIGEgcGFydGl0aW9ud2lzZQorICogam9pbiBi ZXR3ZWVuIHNldmVyYWwgcGFydGl0aW9uZWQgdGFibGVzLiBOb3RlIHRoYXQgYWxsIGRlY2lzaW9u cyBhYm91dAorICogd2hldGhlciBvciBub3QgdG8gdXNlIHBhcnRpdGlvbndpc2Ugam9pbiBhcmUg bWVhbmluZ2Z1bDogbm8gbWF0dGVyIHdoYXQKKyAqIHdlIGRlY2lkZWQgdGhpcyB0aW1lLCB3ZSBj b3VsZCBkbyBtb3JlIG9yIGZld2VyIHRoaW5ncyBwYXJ0aXRpb253aXNlIHRoZQorICogbmV4dCB0 aW1lLgorICoKKyAqIFBHUEFfU0NBTl9GT1JFSUdOIGlzIG9ubHkgdXNlZCB3aGVuIHRoZXJlJ3Mg bW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpbnZvbHZlZDsKKyAqIGEgc2luZ2xlLXRhYmxlIGZvcmVp Z24gc2NhbiBpcyBjbGFzc2lmaWVkIGFzIG9yZGluYXJ5LCBzaW5jZSB0aGVyZSBpcyBubworICog ZGVjaXNpb24gdG8gbWFrZSBpbiB0aGF0IGNhc2UuCisgKgorICogT3RoZXIgc2NhbiBzdHJhdGVn aWVzIG1hcCBvbmUtdG8tb25lIHRvIHBsYW4gbm9kZXMuCisgKi8KK3R5cGVkZWYgZW51bQorewor CVBHUEFfU0NBTl9PUkRJTkFSWSA9IDAsCisJUEdQQV9TQ0FOX1NFUSwKKwlQR1BBX1NDQU5fQklU TUFQX0hFQVAsCisJUEdQQV9TQ0FOX0ZPUkVJR04sCisJUEdQQV9TQ0FOX0lOREVYLAorCVBHUEFf U0NBTl9JTkRFWF9PTkxZLAorCVBHUEFfU0NBTl9QQVJUSVRJT05XSVNFLAorCVBHUEFfU0NBTl9U SUQKKwkvKiB1cGRhdGUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5n IGhlcmUgKi8KK30gcGdwYV9zY2FuX3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX1NDQU5f U1RSQVRFR1kJKChpbnQpIFBHUEFfU0NBTl9USUQgKyAxKQorCisvKgorICogQWxsIG9mIHRoZSBk ZXRhaWxzIHdlIG5lZWQgcmVnYXJkaW5nIGEgc2Nhbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdw YV9zY2FuCit7CisJUGxhbgkgICAqcGxhbjsKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3k7 CisJQml0bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3NjYW47CisKK2V4dGVybiBwZ3BhX3NjYW4g KnBncGFfYnVpbGRfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAq cGxhbiwKKwkJCQkJCQkJICBFbGlkZWROb2RlICplbGlkZWRfbm9kZSwKKwkJCQkJCQkJICBib29s IGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0p OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2Fu bmVyLmwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYjNiZTZlYjcyNwotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKQEAgLTAsMCArMSwyOTcg QEAKKyV0b3B7CisvKgorICogU2Nhbm5lciBmb3IgcGxhbiBhZHZpY2UKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMDAtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCisgKi8KKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgIm5v ZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9zY2Fuc3VwLmgiCisKKyNpbmNsdWRl ICJwZ3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfcGFyc2VyLmgiCisKKy8qCisgKiBFeHRyYSBk YXRhIHRoYXQgd2UgcGFzcyBhcm91bmQgd2hlbiBkdXJpbmcgc2Nhbm5pbmcuCisgKgorICogJ2xp dGJ1ZicgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIDx4ZD4gZXhjbHVzaXZlIHN0YXRlLCB3aGlj aCBoYW5kbGVzCisgKiBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX3l5X2V4dHJhX3R5cGUKK3sKKwlTdHJpbmdJbmZvRGF0YQlsaXRidWY7Cit9IHBn cGFfeXlfZXh0cmFfdHlwZTsKKworfQorCisleworLyogTENPVl9FWENMX1NUQVJUICovCisKKyNk ZWZpbmUgWVlfREVDTCBcCisJZXh0ZXJuIGludCBwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUgKnl5 bHZhbF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwgXAorCQkJCQkJICBjaGFyICoqcGFyc2VfZXJyb3Jf bXNnX3AsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworLyogTm8gcmVhc29uIHRvIGNvbnN0cmFpbiBh bW91bnQgb2YgZGF0YSBzbHVycGVkICovCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgMTY3Nzcy MTYKKworLyogQXZvaWQgZXhpdCgpIG9uIGZhdGFsIHNjYW5uZXIgZXJyb3JzIChhIGJpdCB1Z2x5 IC0tIHNlZSB5eV9mYXRhbF9lcnJvcikgKi8KKyN1bmRlZiBmcHJpbnRmCisjZGVmaW5lIGZwcmlu dGYoZmlsZSwgZm10LCBtc2cpICBmcHJpbnRmX3RvX2VyZXBvcnQoZm10LCBtc2cpCisKK3N0YXRp YyB2b2lkCitmcHJpbnRmX3RvX2VyZXBvcnQoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICpt c2cpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycm1zZ19pbnRlcm5hbCgiJXMiLCBtc2cpKSk7Cit9 CislfQorCislb3B0aW9uIHJlZW50cmFudAorJW9wdGlvbiBiaXNvbi1icmlkZ2UKKyVvcHRpb24g OGJpdAorJW9wdGlvbiBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiBub2RlZmF1bHQKKyVvcHRp b24gbm9pbnB1dAorJW9wdGlvbiBub3VucHV0Cislb3B0aW9uIG5veXl3cmFwCislb3B0aW9uIG5v eXlhbGxvYworJW9wdGlvbiBub3l5cmVhbGxvYworJW9wdGlvbiBub3l5ZnJlZQorJW9wdGlvbiB3 YXJuCislb3B0aW9uIHByZWZpeD0icGdwYV95eSIKKyVvcHRpb24gZXh0cmEtdHlwZT0icGdwYV95 eV9leHRyYV90eXBlICoiCisKKy8qCisgKiBXaGF0IGZvbGxvd3MgaXMgYSBzZXZlcmVseSBzdHJp cHBlZC1kb3duIHZlcnNpb24gb2YgdGhlIGNvcmUgc2Nhbm5lci4gV2UKKyAqIG9ubHkgY2FyZSBh Ym91dCByZWNvZ25pemluZyBpZGVudGlmaWVycyB3aXRoIG9yIHdpdGhvdXQgaWRlbnRpZmllciBx dW90aW5nCisgKiAoaS5lLiBkb3VibGUtcXVvdGluZyksIGRlY2ltYWwgaW50ZWdlcnMsIGFuZCBh IHNtYWxsIGhhbmRmdWwgb2Ygb3RoZXIKKyAqIHRoaW5ncy4gS2VlcCB0aGVzZSBydWxlcyBpbiBz eW5jIHdpdGggc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubC4gQXMgaW4gdGhhdAorICogZmlsZSwg d2UgdXNlIGFuIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxsZWQgJ3hjJyBmb3IgQy1zdHlsZSBjb21tZW50 cywgYW5kIGFuCisgKiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4ZCcgZm9yIGRvdWJsZS1xdW90 ZWQgaWRlbnRpZmllcnMuCisgKi8KKyV4IHhjCisleCB4ZAorCitpZGVudF9zdGFydAkJW0EtWmEt elwyMDAtXDM3N19dCitpZGVudF9jb250CQlbQS1aYS16XDIwMC1cMzc3XzAtOVwkXQorCitpZGVu dGlmaWVyCQl7aWRlbnRfc3RhcnR9e2lkZW50X2NvbnR9KgorCitkZWNkaWdpdAkJWzAtOV0KK2Rl Y2ludGVnZXIJCXtkZWNkaWdpdH0oXz97ZGVjZGlnaXR9KSoKKworc3BhY2UJCQlbIFx0XG5cclxm XHZdCit3aGl0ZXNwYWNlCQl7c3BhY2V9KworCitkcXVvdGUJCQlcIgoreGRzdGFydAkJCXtkcXVv dGV9Cit4ZHN0b3AJCQl7ZHF1b3RlfQoreGRkb3VibGUJCXtkcXVvdGV9e2RxdW90ZX0KK3hkaW5z aWRlCQlbXiJdKworCit4Y3N0YXJ0CQkJXC9cKgoreGNzdG9wCQkJXCorXC8KK3hjaW5zaWRlCQlb XiovXSsKKworJSUKKwore3doaXRlc3BhY2V9CXsgLyogaWdub3JlICovIH0KKwore2lkZW50aWZp ZXJ9CXsKKwkJCQkJY2hhciAgICpzdHI7CisJCQkJCWJvb2wJZmFpbDsKKwkJCQkJcGdwYV9hZHZp Y2VfdGFnX3R5cGUJdGFnOworCisJCQkJCS8qCisJCQkJCSAqIFVubGlrZSB0aGUgY29yZSBzY2Fu bmVyLCB3ZSBkb24ndCB0cnVuY2F0ZSBpZGVudGlmaWVycworCQkJCQkgKiBoZXJlLiBUaGVyZSBp cyBubyBvYnZpb3VzIHJlYXNvbiB0byBkbyBzby4KKwkJCQkJICovCisJCQkJCXN0ciA9IGRvd25j YXNlX2lkZW50aWZpZXIoeXl0ZXh0LCB5eWxlbmcsIGZhbHNlLCBmYWxzZSk7CisJCQkJCXl5bHZh bC0+c3RyID0gc3RyOworCisJCQkJCS8qCisJCQkJCSAqIElmIGl0J3Mgbm90IGEgdGFnLCBqdXN0 IHJldHVybiBUT0tfSURFTlQ7IGVsc2UsIHJldHVybgorCQkJCQkgKiBhIHRva2VuIHR5cGUgYmFz ZWQgb24gaG93IGZ1cnRoZXIgcGFyc2luZyBzaG91bGQKKwkJCQkJICogcHJvY2VlZC4KKwkJCQkJ ICovCisJCQkJCXRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZyhzdHIsICZmYWlsKTsKKwkJCQkJ aWYgKGZhaWwpCisJCQkJCQlyZXR1cm4gVE9LX0lERU5UOworCQkJCQllbHNlIGlmICh0YWcgPT0g UEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0pPSU5fT1JERVI7CisJ CQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9 PSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4pCisJCQkJCQlyZXR1cm4gVE9LX1RBR19JTkRFWDsK KwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX1NFUV9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9 PSBQR1BBX1RBR19USURfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hF QVBfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQkJCQkJcmV0 dXJuIFRPS19UQUdfU0lNUExFOworCQkJCQllbHNlCisJCQkJCQlyZXR1cm4gVE9LX1RBR19HRU5F UklDOworCQkJCX0KKwore2RlY2ludGVnZXJ9CXsKKwkJCQkJY2hhciAgICplbmRwdHI7CisKKwkJ CQkJZXJybm8gPSAwOworCQkJCQl5eWx2YWwtPmludGVnZXIgPSBzdHJ0b2ludCh5eXRleHQsICZl bmRwdHIsIDEwKTsKKwkJCQkJaWYgKCplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBFUkFOR0Up CisJCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVy LAorCQkJCQkJCQkJICJpbnRlZ2VyIG91dCBvZiByYW5nZSIpOworCQkJCQlyZXR1cm4gVE9LX0lO VEVHRVI7CisJCQkJfQorCit7eGNzdGFydH0JCXsKKwkJCQkJQkVHSU4oeGMpOworCQkJCX0KKwor e3hkc3RhcnR9CQl7CisJCQkJCUJFR0lOKHhkKTsKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZ5eWV4 dHJhLT5saXRidWYpOworCQkJCX0KKworLgkJCQl7IHJldHVybiB5eXRleHRbMF07IH0KKworPHhj Pnt4Y3N0b3B9CXsKKwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJfQorCis8eGM+e3hjaW5zaWRl fQl7CisJCQkJCS8qIGRpc2NhcmQgbXVsdGlwbGUgY2hhcmFjdGVycyB3aXRob3V0IHNsYXNoIG9y IGFzdGVyaXNrICovCisJCQkJfQorCis8eGM+LgkJCXsKKwkJCQkJLyoKKwkJCQkJICogRGlzY2Fy ZCBhbnkgc2luZ2xlIGNoYXJhY3Rlci4gZmxleCBwcmVmZXJzIGxvbmdlcgorCQkJCQkgKiBtYXRj aGVzLCBzbyB0aGlzIHJ1bGUgd2lsbCBuZXZlciBiZSBwaWNrZWQgd2hlbiB3ZSBjb3VsZAorCQkJ CQkgKiBoYXZlIG1hdGNoZWQgeGNzdG9wLgorCQkJCQkgKgorCQkJCQkgKiBOQjogQXQgcHJlc2Vu dCwgd2UgZG9uJ3QgYm90aGVyIHRvIHN1cHBvcnQgbmVzdGVkCisJCQkJCSAqIEMtc3R5bGUgY29t bWVudHMgaGVyZSwgYnV0IHRoaXMgbG9naWMgY291bGQgYmUgZXh0ZW5kZWQKKwkJCQkJICogaWYg dGhhdCByZXN0cmljdGlvbiBwb3NlcyBhIHByb2JsZW0uCisJCQkJCSAqLworCQkJCX0KKworPHhj Pjw8RU9GPj4JCXsKKwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJCXBncGFfeXllcnJvcihyZXN1 bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCSAidW50ZXJtaW5hdGVk IGNvbW1lbnQiKTsKKwkJCQl9CisKKzx4ZD57eGRzdG9wfQl7CisJCQkJCUJFR0lOKElOSVRJQUwp OworCQkJCQlpZiAoeXlleHRyYS0+bGl0YnVmLmxlbiA9PSAwKQorCQkJCQkJcGdwYV95eWVycm9y KHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCSAiemVyby1s ZW5ndGggZGVsaW1pdGVkIGlkZW50aWZpZXIiKTsKKwkJCQkJeXlsdmFsLT5zdHIgPSBwc3RyZHVw KHl5ZXh0cmEtPmxpdGJ1Zi5kYXRhKTsKKwkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQl9CisK Kzx4ZD57eGRkb3VibGV9CXsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnl5ZXh0cmEtPmxp dGJ1ZiwgJyInKTsKKwkJCQl9CisKKzx4ZD57eGRpbnNpZGV9CXsKKwkJCQkJYXBwZW5kQmluYXJ5 U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmLCB5eXRleHQsIHl5bGVuZyk7CisJCQkJfQorCis8 eGQ+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJl c3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0 ZWQgcXVvdGVkIGlkZW50aWZpZXIiKTsKKwkJCQl9CisKKyUlCisKKy8qIExDT1ZfRVhDTF9TVE9Q ICovCisKKy8qCisgKiBIYW5kbGVyIGZvciBlcnJvcnMgd2hpbGUgc2Nhbm5pbmcgb3IgcGFyc2lu ZyBhZHZpY2UuCisgKgorICogYmlzb24gcGFzc2VzIHRoZSBlcnJvciBtZXNzYWdlIHRvIHVzIHZp YSAnbWVzc2FnZScsIGFuZCB0aGUgY29udGV4dCBpcworICogYXZhaWxhYmxlIHZpYSB0aGUgJ3l5 dGV4dCcgbWFjcm8uIFdlIGFzc2VtYmxlIHRob3NlIHZhbHVlcyBpbnRvIGEgZmluYWwKKyAqIGVy cm9yIHRleHQgYW5kIHRoZW4gYXJyYW5nZSB0byBwYXNzIGl0IGJhY2sgdG8gdGhlIGNhbGxlciBv ZiBwZ3BhX3l5cGFyc2UoKQorICogYnkgc3RvcmluZyBpdCBpbnRvICpwYXJzZV9lcnJvcl9tc2df cC4KKyAqLwordm9pZAorcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9l cnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyLAorCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Cit7CisJc3RydWN0IHl5Z3V0c190ICp5eWcgPSAoc3RydWN0IHl5Z3V0c190ICopIHl5c2Nhbm5l cjsJLyogbmVlZGVkIGZvciB5eXRleHQKKwkJCQkJCQkJCQkJCQkJCSAqIG1hY3JvICovCisKKwor CS8qIHJlcG9ydCBvbmx5IHRoZSBmaXJzdCBlcnJvciBpbiBhIHBhcnNlIG9wZXJhdGlvbiAqLwor CWlmICgqcGFyc2VfZXJyb3JfbXNnX3ApCisJCXJldHVybjsKKworCWlmICh5eXRleHRbMF0pCisJ CSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJpbnRmKCIlcyBhdCBvciBuZWFyIFwiJXNcIiIsIG1l c3NhZ2UsIHl5dGV4dCk7CisJZWxzZQorCQkqcGFyc2VfZXJyb3JfbXNnX3AgPSBwc3ByaW50Zigi JXMgYXQgZW5kIG9mIGlucHV0IiwgbWVzc2FnZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRo ZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHBh cnNpbmcgYmVnaW5zLgorICovCit2b2lkCitwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpz dHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJwKQoreworCXl5c2Nhbl90CXl5c2Nhbm5lcjsKKwlwZ3Bh X3l5X2V4dHJhX3R5cGUJKnl5ZXh0ID0gcGFsbG9jMF9vYmplY3QocGdwYV95eV9leHRyYV90eXBl KTsKKworCWlmICh5eWxleF9pbml0KHl5c2Nhbm5lcnApICE9IDApCisJCWVsb2coRVJST1IsICJ5 eWxleF9pbml0KCkgZmFpbGVkOiAlbSIpOworCisJeXlzY2FubmVyID0gKnl5c2Nhbm5lcnA7CisK Kwlpbml0U3RyaW5nSW5mbygmeXlleHQtPmxpdGJ1Zik7CisJcGdwYV95eXNldF9leHRyYSh5eWV4 dCwgeXlzY2FubmVyKTsKKworCXl5X3NjYW5fc3RyaW5nKHN0ciwgeXlzY2FubmVyKTsKK30KKwor CisvKgorICogU2h1dCBkb3duIHRoZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3Vs ZCBiZSBjYWxsZWQgYWZ0ZXIgcGFyc2luZyBpcyBjb21wbGV0ZS4KKyAqLwordm9pZAorcGdwYV9z Y2FubmVyX2ZpbmlzaCh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJeXlsZXhfZGVzdHJveSh5eXNj YW5uZXIpOworfQorCisvKgorICogSW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBtYWtlIGZsZXggdXNl IHBhbGxvYygpIGluc3RlYWQgb2YgbWFsbG9jKCkuCisgKiBJdCdkIGJlIGJldHRlciB0byBtYWtl IHRoZXNlIHN0YXRpYywgYnV0IGZsZXggaW5zaXN0cyBvdGhlcndpc2UuCisgKi8KKwordm9pZCAq Cit5eWFsbG9jKHl5X3NpemVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJu IHBhbGxvYyhzaXplKTsKK30KKwordm9pZCAqCit5eXJlYWxsb2Modm9pZCAqcHRyLCB5eV9zaXpl X3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIpCisJCXJldHVybiByZXBh bGxvYyhwdHIsIHNpemUpOworCWVsc2UKKwkJcmV0dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9p ZAoreXlmcmVlKHZvaWQgKnB0ciwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIpCisJ CXBmcmVlKHB0cik7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf dHJvdmUuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MzRlYzVjNGM2ZQotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCkBAIC0wLDAgKzEsNTE2IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3Ryb3ZlLmMKKyAqCSAgQWxsIG9mIHRo ZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBxdWVyeSwgYXBwcm9wcmlhdGVseQorICog ICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50IGFjY2Vzcy4KKyAqCisgKiBUaGlzIG5hbWUgY29t ZXMgZnJvbSB0aGUgRW5nbGlzaCBleHByZXNzaW9uICJ0cm92ZSBvZiBhZHZpY2UiLCB3aGljaAor ICogbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHdpc2RvbS4gVGhpcyBzbGlnaHRseSB1bnVzdWFsIHRl cm0gaXMgY2hvc2VuCisgKiBwYXJ0bHkgYmVjYXVzZSBpdCBzZWVtcyB0byBmaXQgYW5kIHBhcnRs eSBiZWNhdXNlIGl0J3Mgbm90IHByZXNlbnRseQorICogdXNlZCBmb3IgYW55dGhpbmcgZWxzZSwg bWFraW5nIGl0IGVhc3kgdG8gZ3JlcC4gTm90ZSB0aGF0LCB3aGlsZSB3ZQorICogZG9uJ3Qga25v dyB3aGV0aGVyIHRoZSBwcm92aWRlZCBhZHZpY2UgaXMgYWN0dWFsbHkgd2lzZSwgaXQncyBub3Qg b3VyCisgKiBqb2IgdG8gcXVlc3Rpb24gdGhlIHVzZXIncyBjaG9pY2VzLgorICoKKyAqIFRoZSBn b2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBsb2NhdGUgdGhlIHNwZWNp ZmljCisgKiBiaXRzIG9mIGFkdmljZSB0aGF0IHBlcnRhaW4gdG8gYW55IGdpdmVuIHBhcnQgb2Yg YSBxdWVyeSwgb3IgdG8KKyAqIGRldGVybWluZSB0aGF0IHRoZXJlIGFyZSBub25lLgorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl ICJwZ3BhX3Ryb3ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisK Ky8qCisgKiBBbiBhZHZpY2UgdHJvdmUgaXMgb3JnYW5pemVkIGludG8gYSBzZXJpZXMgb2YgInNs aWNlcyIsIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSB0 b3BpYyBlLmcuIHNjYW4gbWV0aG9kcy4gRWFjaCBzbGljZSBjb25zaXN0cworICogb2YgYW4gYXJy YXkgb2YgdHJvdmUgZW50cmllcyBwbHVzIGEgaGFzaCB0YWJsZSB0aGF0IHdlIGNhbiB1c2UgdG8g ZGV0ZXJtaW5lCisgKiB3aGljaCBvbmVzIGFyZSByZWxldmFudCB0byBhIHBhcnRpY3VsYXIgcGFy dCBvZiB0aGUgcXVlcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfc2xpY2UKK3sK Kwl1bnNpZ25lZAluYWxsb2NhdGVkOworCXVuc2lnbmVkCW51c2VkOworCXBncGFfdHJvdmVfZW50 cnkgKmVudHJpZXM7CisJc3RydWN0IHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaDsKK30gcGdw YV90cm92ZV9zbGljZTsKKworLyoKKyAqIFNjYW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdzY2Fu Jzsgam9pbiBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ2pvaW4nOyBhbmQKKyAqIGFkdmljZSB0aGF0 IGNhbiBhcHBseSB0byBib3RoIGNhc2VzIGlzIHN0b3JlZCBpbnRvICdyZWwnLiBUaGlzIGxldHMg Y2FsbGVycworICogYXNrIGp1c3QgZm9yIHdoYXQncyByZWxldmFudC4gVGhlc2Ugc2xpY2VzIGNv cnJlc3BvbmQgdG8gdGhlIHBvc3NpYmxlIHZhbHVlcworICogb2YgcGdwYV90cm92ZV9sb29rdXBf dHlwZS4KKyAqLworc3RydWN0IHBncGFfdHJvdmUKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlIGpvaW47 CisJcGdwYV90cm92ZV9zbGljZSByZWw7CisJcGdwYV90cm92ZV9zbGljZSBzY2FuOworfTsKKwor LyoKKyAqIFdlJ3JlIGdvaW5nIHRvIGJ1aWxkIGEgaGFzaCB0YWJsZSB0byBhbGxvdyBjbGllbnRz IG9mIHRoaXMgbW9kdWxlIHRvIGZpbmQKKyAqIHJlbGV2YW50IGFkdmljZSBmb3IgYSBnaXZlbiBw YXJ0IG9mIHRoZSBxdWVyeSBxdWlja2x5LiBIb3dldmVyLCB3ZSdyZSBnb2luZworICogdG8gdXNl IG9ubHkgdGhyZWUgb2YgdGhlIGZpdmUga2V5IGZpZWxkcyBhcyBoYXNoIGtleXMuIFRoZXJlIGFy ZSB0d28gcmVhc29ucworICogZm9yIHRoaXMuCisgKgorICogRmlyc3QsIGl0J3MgYWxsb3dhYmxl IHRvIHNldCBwYXJ0aXRpb25fc2NoZW1hIHRvIE5VTEwgdG8gbWF0Y2ggYSBwYXJ0aXRpb24KKyAq IHdpdGggdGhlIGNvcnJlY3QgbmFtZSBpbiBhbnkgc2NoZW1hLgorICoKKyAqIFNlY29uZCwgd2Ug ZXhwZWN0IHRoZSAib2NjdXJyZW5jZSIgYW5kICJwYXJ0aXRpb25fc2NoZW1hIiBwb3J0aW9ucyBv ZiB0aGUKKyAqIHJlbGF0aW9uIGlkZW50aWZpZXJzIHRvIGJlIG1vc3RseSB1bmludGVyZXN0aW5n LiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUKKyAqIG9jY3VycmVuY2UgZmllbGQgd2lsbCBiZSAxIGFu ZCB0aGUgcGFydGl0aW9uX3NjaGVtYSB2YWx1ZXMgd2lsbCBhbGwgYmUgdGhlCisgKiBzYW1lLiBF dmVuIHdoZW4gdGhlcmUgaXMgc29tZSB2YXJpYXRpb24sIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2Yg ZW50cmllcworICogdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlcyBmb3IgYWxsIHRocmVlIG9mIHRo ZXNlIGtleSBmaWVsZHMgc2hvdWxkIGJlCisgKiBxdWl0ZSBzbWFsbC4KKyAqLwordHlwZWRlZiBz dHJ1Y3QKK3sKKwljb25zdCBjaGFyICphbGlhc19uYW1lOworCWNvbnN0IGNoYXIgKnBhcnRpdGlv bl9uYW1lOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdwYV90cm92ZV9lbnRyeV9rZXk7 CisKK3R5cGVkZWYgc3RydWN0Cit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5OworCWludAkJ CXN0YXR1czsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1l bnQ7CisKK3N0YXRpYyB1aW50MzIgcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3Zl X2VudHJ5X2tleSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfdHJvdmVfZW50cnlf Y29tcGFyZV9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkgYSwgcGdwYV90cm92ZV9lbnRyeV9rZXkg YikKK3sKKwlpZiAoc3RyY21wKGEuYWxpYXNfbmFtZSwgYi5hbGlhc19uYW1lKSAhPSAwKQorCQly ZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGFydGl0 aW9uX25hbWUsIGIucGFydGl0aW9uX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0 cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBn cGFfdHJvdmVfZW50cnkKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3BhX3Ryb3ZlX2VudHJ5 X2VsZW1lbnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3Ryb3ZlX2VudHJ5X2tleQorI2Rl ZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfdHJv dmVfZW50cnlfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV90 cm92ZV9lbnRyeV9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBp bmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJs aWIvc2ltcGxlaGFzaC5oIgorCitzdGF0aWMgdm9pZCBwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdw YV90cm92ZV9zbGljZSAqdHNsaWNlKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJvdmVfYWRkX3RvX3Ns aWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhZ190 eXBlIHRhZywKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyB2 b2lkIHBncGFfdHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLAor CQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJICAgaW50IGlu ZGV4KTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJv dmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKwor LyoKKyAqIEJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNlIGZyb20gYSBsaXN0IG9mIGFkdmljZSBpdGVt cy4KKyAqCisgKiBDYWxsZXIgY2FuIG9idGFpbiBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zIHRvIHBh c3MgdG8gdGhpcyBmdW5jdGlvbiBieQorICogY2FsbGluZyBwZ3BhX3BhcnNlKCkuCisgKi8KK3Bn cGFfdHJvdmUgKgorcGdwYV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpCit7CisJcGdw YV90cm92ZSAqdHJvdmUgPSBwYWxsb2Nfb2JqZWN0KHBncGFfdHJvdmUpOworCisJcGdwYV9pbml0 X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+am9pbik7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92 ZS0+cmVsKTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5zY2FuKTsKKworCWZvcmVh Y2hfcHRyKHBncGFfYWR2aWNlX2l0ZW0sIGl0ZW0sIGFkdmljZV9pdGVtcykKKwl7CisJCXN3aXRj aCAoaXRlbS0+dGFnKQorCQl7CisJCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkJewor CQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKworCQkJCQkvKgorCQkJCQkgKiBGb3Ig bW9zdCBhZHZpY2UgdHlwZXMsIGVhY2ggZWxlbWVudCBpbiB0aGUgdG9wLWxldmVsCisJCQkJCSAq IGxpc3QgaXMgYSBzZXBhcmF0ZSB0YXJnZXQsIGJ1dCBpdCdzIG1vc3QgY29udmVuaWVudCB0bwor CQkJCQkgKiByZWdhcmQgdGhlIGVudGlyZXR5IG9mIGEgSk9JTl9PUkRFUiBzcGVjaWZpY2F0aW9u IGFzIGEKKwkJCQkJICogc2luZ2xlIHRhcmdldC4gU2luY2UgaXQgd2Fzbid0IHJlcHJlc2VudGVk IHRoYXQgd2F5CisJCQkJCSAqIGR1cmluZyBwYXJzaW5nLCBidWlsZCBhIHN1cnJvZ2F0ZSBvYmpl Y3Qgbm93LgorCQkJCQkgKi8KKwkJCQkJdGFyZ2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZp Y2VfdGFyZ2V0KTsKKwkJCQkJdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElT VDsKKwkJCQkJdGFyZ2V0LT5jaGlsZHJlbiA9IGl0ZW0tPnRhcmdldHM7CisKKwkJCQkJcGdwYV90 cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRh cmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQ X1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCWNhc2UgUEdQQV9U QUdfSU5ERVhfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQljYXNlIFBHUEFf VEFHX1RJRF9TQ0FOOgorCisJCQkJLyoKKwkJCQkgKiBTY2FuIGFkdmljZS4KKwkJCQkgKi8KKwkJ CQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykK KwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvciBub3csIGFsbCBvZiBvdXIgc2NhbiB0eXBlcyB0 YXJnZXQgc2luZ2xlIHJlbGF0aW9ucywKKwkJCQkJICogYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBt aWdodCBub3QgYmUgdHJ1ZSwgZS5nLiBhIGN1c3RvbQorCQkJCQkgKiBzY2FuIGNvdWxkIHJlcGxh Y2UgYSBqb2luLgorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfSURFTlRJRklFUik7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+ c2NhbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsK KworCQkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX0hBU0hf Sk9JTjoKKwkJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCWNhc2Ug UEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlj YXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9J Tl9OT05fVU5JUVVFOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisKKwkJCQkv KgorCQkJCSAqIEpvaW4gc3RyYXRlZ3kgYWR2aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJ cGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50 YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX1BBUlRJ VElPTldJU0U6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCWNhc2UgUEdQQV9UQUdfR0FU SEVSX01FUkdFOgorCQkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisKKwkJCQkvKgorCQkJCSAq IEFkdmljZSBhYm91dCBhIFJlbE9wdEluZm8gcmVsZXZhbnQgdG8gYm90aCBzY2FucyBhbmQgam9p bnMuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQs IGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJv dmUtPnJlbCwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVh azsKKwkJfQorCX0KKworCXJldHVybiB0cm92ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIHRyb3Zl IG9mIGFkdmljZSBmb3IgcmVsZXZhbnQgZW50cmllcy4KKyAqCisgKiBBbGwgcGFyYW1ldGVycyBh cmUgaW5wdXQgcGFyYW1ldGVycyBleGNlcHQgZm9yICpyZXN1bHQsIHdoaWNoIGlzIGFuIG91dHB1 dAorICogcGFyYW1ldGVyIHVzZWQgdG8gcmV0dXJuIHJlc3VsdHMgdG8gdGhlIGNhbGxlci4KKyAq Lwordm9pZAorcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVf bG9va3VwX3R5cGUgdHlwZSwKKwkJCQkgIGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRz LCBwZ3BhX3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGlj ZTsKKwlCaXRtYXBzZXQgICppbmRleGVzOworCisJQXNzZXJ0KG5yaWRzID4gMCk7CisKKwlpZiAo dHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47 CisJZWxzZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAm dHJvdmUtPmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCWluZGV4ZXMg PSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzWzBdKTsKKwlmb3IgKGludCBp ID0gMTsgaSA8IG5yaWRzOyArK2kpCisJeworCQlCaXRtYXBzZXQgICpvdGhlcl9pbmRleGVzOwor CisJCS8qCisJCSAqIElmIHRoZSBjYWxsZXIgaXMgYXNraW5nIGFib3V0IHR3byByZWxhdGlvbnMg dGhhdCBhcmVuJ3QgcGFydCBvZiB0aGUKKwkJICogc2FtZSBzdWJxdWVyeSwgdGhleSd2ZSBtZXNz ZWQgdXAuCisJCSAqLworCQlBc3NlcnQoc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkc1sw XS5wbGFuX25hbWUsCisJCQkJCQkJCQkJICByaWRzW2ldLnBsYW5fbmFtZSkpOworCisJCW90aGVy X2luZGV4ZXMgPSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzW2ldKTsKKwkJ aW5kZXhlcyA9IGJtc191bmlvbihpbmRleGVzLCBvdGhlcl9pbmRleGVzKTsKKwl9CisKKwlyZXN1 bHQtPmVudHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJcmVzdWx0LT5pbmRleGVzID0gaW5kZXhl czsKK30KKworLyoKKyAqIFJldHVybiBhbGwgZW50cmllcyBpbiBhIHRyb3ZlIHNsaWNlIHRvIHRo ZSBjYWxsZXIuCisgKgorICogVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGlucHV0IGFyZ3Vt ZW50cywgYW5kIHRoZSByZW1haW5kZXIgYXJlIG91dHB1dAorICogYXJndW1lbnRzLgorICovCit2 b2lkCitwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVf bG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywgaW50 ICpuZW50cmllcykKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisKKwlpZiAodHlwZSA9 PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxz ZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUt PmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCSplbnRyaWVzID0gdHNs aWNlLT5lbnRyaWVzOworCSpuZW50cmllcyA9IHRzbGljZS0+bnVzZWQ7Cit9CisKKy8qCisgKiBD b252ZXJ0IGEgdHJvdmUgZW50cnkgdG8gYW4gaXRlbSBvZiBwbGFuIGFkdmljZSB0aGF0IHdvdWxk IHByb2R1Y2UgaXQuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFf dHJvdmVfZW50cnkgKmVudHJ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJp bmdJbmZvKCZidWYpOworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIiwgcGdwYV9jc3RyaW5n X2FkdmljZV90YWcoZW50cnktPnRhZykpOworCisJLyogSk9JTl9PUkRFUiB0YWdzIGFyZSB0cmFu c2Zvcm1lZCBieSBwZ3BhX2J1aWxkX3Ryb3ZlOyB1bmRvIHRoYXQgaGVyZSAqLworCWlmIChlbnRy eS0+dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZi dWYsICcoJyk7CisJZWxzZQorCQlBc3NlcnQoZW50cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfT1JERVJFRF9MSVNUKTsKKworCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoJmJ1Ziwg ZW50cnktPnRhcmdldCk7CisKKwlpZiAoZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMKQor CXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyAnKTsKKwkJcGdwYV9mb3JtYXRfaW5k ZXhfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQtPml0YXJnZXQpOworCX0KKworCWlmIChlbnRy eS0+dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZi dWYsICcpJyk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCisgKiBTZXQgUEdQQV9URV8q IGZsYWdzIG9uIGEgc2V0IG9mIHRyb3ZlIGVudHJpZXMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVf c2V0X2ZsYWdzKHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsIEJpdG1hcHNldCAqaW5kZXhlcywg aW50IGZsYWdzKQoreworCWludAkJCWkgPSAtMTsKKworCXdoaWxlICgoaSA9IGJtc19uZXh0X21l bWJlcihpbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0g JmVudHJpZXNbaV07CisKKwkJZW50cnktPmZsYWdzIHw9IGZsYWdzOworCX0KK30KKworLyoKKyAq IEFwcGVuZCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFBHUEFfVEVf KiBmbGFncyB0byB0aGUKKyAqIGdpdmVuIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQKK3BncGFfdHJv dmVfYXBwZW5kX2ZsYWdzKFN0cmluZ0luZm8gYnVmLCBpbnQgZmxhZ3MpCit7CisJaWYgKChmbGFn cyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkgIT0gMCkKKwl7CisJCUFzc2VydCgoZmxhZ3MgJiBQR1BB X1RFX01BVENIX1BBUlRJQUwpICE9IDApOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm1hdGNo ZWQiKTsKKwl9CisJZWxzZSBpZiAoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJUSUFMKSAhPSAw KQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInBhcnRpYWxseSBtYXRjaGVkIik7CisJZWxzZQor CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm5vdCBtYXRjaGVkIik7CisJaWYgKChmbGFncyAmIFBH UEFfVEVfSU5BUFBMSUNBQkxFKSAhPSAwKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiwgaW5h cHBsaWNhYmxlIik7CisJaWYgKChmbGFncyAmIFBHUEFfVEVfQ09ORkxJQ1RJTkcpICE9IDApCisJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLCBjb25mbGljdGluZyIpOworCWlmICgoZmxhZ3MgJiBQ R1BBX1RFX0ZBSUxFRCkgIT0gMCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIsIGZhaWxlZCIp OworfQorCisvKgorICogQWRkIGEgbmV3IGFkdmljZSB0YXJnZXQgdG8gYW4gZXhpc3RpbmcgcGdw YV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90 b19zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQlwZ3BhX2FkdmljZV90YWdf dHlwZSB0YWcsCisJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlwZ3BhX3Ry b3ZlX2VudHJ5ICplbnRyeTsKKworCWlmICh0c2xpY2UtPm51c2VkID49IHRzbGljZS0+bmFsbG9j YXRlZCkKKwl7CisJCWludAkJCW5ld19hbGxvY2F0ZWQ7CisKKwkJbmV3X2FsbG9jYXRlZCA9IHRz bGljZS0+bmFsbG9jYXRlZCAqIDI7CisJCXRzbGljZS0+ZW50cmllcyA9IHJlcGFsbG9jX2FycmF5 KHRzbGljZS0+ZW50cmllcywgcGdwYV90cm92ZV9lbnRyeSwKKwkJCQkJCQkJCQkgbmV3X2FsbG9j YXRlZCk7CisJCXRzbGljZS0+bmFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CisJfQorCisJZW50 cnkgPSAmdHNsaWNlLT5lbnRyaWVzW3RzbGljZS0+bnVzZWRdOworCWVudHJ5LT50YWcgPSB0YWc7 CisJZW50cnktPnRhcmdldCA9IHRhcmdldDsKKwllbnRyeS0+ZmxhZ3MgPSAwOworCisJcGdwYV90 cm92ZV9hZGRfdG9faGFzaCh0c2xpY2UtPmhhc2gsIHRhcmdldCwgdHNsaWNlLT5udXNlZCk7CisK Kwl0c2xpY2UtPm51c2VkKys7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGhhc2ggdGFibGUgZm9y IGEgbmV3bHktYWRkZWQgYWR2aWNlIHRhcmdldC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJv dmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLCBwZ3BhX2FkdmljZV90 YXJnZXQgKnRhcmdldCwKKwkJCQkJICAgaW50IGluZGV4KQoreworCXBncGFfdHJvdmVfZW50cnlf a2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJYm9vbAkJZm91 bmQ7CisKKwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBhZGQgZW50cmllcyBmb3IgYWxsIGRlc2Nl bmRhbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIp CisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFy Z2V0LT5jaGlsZHJlbikKKwkJeworCQkJcGdwYV90cm92ZV9hZGRfdG9faGFzaChoYXNoLCBjaGls ZF90YXJnZXQsIGluZGV4KTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyogU2FuaXR5IGNoZWNr cy4gKi8KKwlBc3NlcnQodGFyZ2V0LT5yaWQub2NjdXJyZW5jZSA+IDApOworCUFzc2VydCh0YXJn ZXQtPnJpZC5hbGlhc19uYW1lICE9IE5VTEwpOworCisJLyogQWRkIGFuIGVudHJ5IGZvciB0aGlz IHJlbGF0aW9uIGlkZW50aWZpZXIuICovCisJa2V5LmFsaWFzX25hbWUgPSB0YXJnZXQtPnJpZC5h bGlhc19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHRhcmdldC0+cmlkLnBhcnRyZWw7CisJ a2V5LnBsYW5fbmFtZSA9IHRhcmdldC0+cmlkLnBsYW5fbmFtZTsKKwllbGVtZW50ID0gcGdwYV90 cm92ZV9lbnRyeV9pbnNlcnQoaGFzaCwga2V5LCAmZm91bmQpOworCWlmICghZm91bmQpCisJCWVs ZW1lbnQtPmluZGV4ZXMgPSBOVUxMOworCWVsZW1lbnQtPmluZGV4ZXMgPSBibXNfYWRkX21lbWJl cihlbGVtZW50LT5pbmRleGVzLCBpbmRleCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYW5kIGluaXRp YWxpemUgYSBuZXcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlKQoreworCS8qCisJ ICogSW4gYW4gaWRlYWwgd29ybGQsIHdlJ2xsIG1ha2UgdHNsaWNlLT5uYWxsb2NhdGVkIGJpZyBl bm91Z2ggdGhhdCB0aGUKKwkgKiBhcnJheSBhbmQgaGFzaCB0YWJsZSB3aWxsIGJlIGxhcmdlIGVu b3VnaCB0byBjb250YWluIHRoZSBudW1iZXIgb2YKKwkgKiBhZHZpY2UgaXRlbXMgaW4gdGhpcyB0 cm92ZSBzbGljZSwgYnV0IGEgZ2VuZXJvdXMgZGVmYXVsdCB2YWx1ZSBpcyBub3QKKwkgKiBnb29k IGZvciBwZXJmb3JtYW5jZSwgYmVjYXVzZSBwZ3BhX2luaXRfdHJvdmVfc2xpY2UoKSBoYXMgdG8g emVybyBhbgorCSAqIGFtb3VudCBvZiBtZW1vcnkgcHJvcG9ydGlvbmFsIHRvIHRzbGljZS0+bmFs bG9jYXRlZC4gSGVuY2UsIHdlIGtlZXAgdGhlCisJICogc3RhcnRpbmcgdmFsdWUgcXVpdGUgc21h bGwsIG9uIHRoZSB0aGVvcnkgdGhhdCBhZHZpY2Ugc3RyaW5ncyB3aWxsCisJICogb2Z0ZW4gYmUg cmVsYXRpdmVseSBzaG9ydC4KKwkgKi8KKwl0c2xpY2UtPm5hbGxvY2F0ZWQgPSAxNjsKKwl0c2xp Y2UtPm51c2VkID0gMDsKKwl0c2xpY2UtPmVudHJpZXMgPSBwYWxsb2NfYXJyYXkocGdwYV90cm92 ZV9lbnRyeSwgdHNsaWNlLT5uYWxsb2NhdGVkKTsKKwl0c2xpY2UtPmhhc2ggPSBwZ3BhX3Ryb3Zl X2VudHJ5X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkgICB0c2xpY2Ut Pm5hbGxvY2F0ZWQsIE5VTEwpOworfQorCisvKgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBh IGtleSBjb25zaXN0aW5nIG9mIGFsaWFzX25hbWUsIHBhcnRpdGlvbl9uYW1lLAorICogYW5kIHBs YW5fbmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShw Z3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXkpCit7CisJZmFzdGhhc2hfc3RhdGUgaHM7CisJaW50CQkJ c3BfbGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJLyogYWxpYXNfbmFtZSBtYXkg bm90IGJlIE5VTEwgKi8KKwlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5 LmFsaWFzX25hbWUpOworCisJLyogcGFydGl0aW9uX25hbWUgYW5kIHBsYW5fbmFtZSwgaG93ZXZl ciwgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBhcnRpdGlvbl9uYW1lICE9IE5VTEwpCisJCXNw X2xlbiArPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBhcnRpdGlvbl9uYW1lKTsK KwlpZiAoa2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhhc2hfYWNjdW1f Y3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyoKKwkgKiBoYXNoZm5fdW5zdGFibGUu aCByZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdlYWsuIEl0J3Mgbm90CisJICog Y2xlYXIgdG8gbWUgd2hhdCB0byBkbyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RyaW5ncywgc28g Zm9yIG5vdyBJJ20KKwkgKiBqdXN0IHVzaW5nIHRoZSB0b3RhbCBvZiBhbGwgb2YgdGhlIGxlbmd0 aHMuCisJICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisv KgorICogTG9vayBmb3IgbWF0Y2hpbmcgZW50cmllcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAq CitwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsIHBncGFf aWRlbnRpZmllciAqcmlkKQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlwZ3BhX3Ry b3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVMTDsK KworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMSk7CisKKwlrZXkuYWxpYXNfbmFtZSA9IHJp ZC0+YWxpYXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUgPSByaWQtPnBhcnRyZWw7CisJa2V5 LnBsYW5fbmFtZSA9IHJpZC0+cGxhbl9uYW1lOworCisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50 cnlfbG9va3VwKHRzbGljZS0+aGFzaCwga2V5KTsKKworCWlmIChlbGVtZW50ICE9IE5VTEwpCisJ eworCQlpbnQJCQlpID0gLTE7CisKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGVsZW1l bnQtPmluZGV4ZXMsIGkpKSA+PSAwKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9 ICZ0c2xpY2UtPmVudHJpZXNbaV07CisKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoYXQgdGhpcyB0 YXJnZXQgb3Igb25lIG9mIGl0cyBkZXNjZW5kYW50cyBtYXRjaGVzIHRoZQorCQkJICogaWRlbnRp ZmllciBvbiB0aGUgdGhyZWUga2V5IGZpZWxkcyBhYm92ZSwgYnV0IHdlIGRvbid0IGtub3cKKwkJ CSAqIHdoaWNoIGRlc2NlbmRhbnQgb3Igd2hldGhlciB0aGUgb2NjdXJyZW5jZSBhbmQgc2NoZW1h IGFsc28KKwkJCSAqIG1hdGNoLgorCQkJICovCisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNo ZXNfdGFyZ2V0KHJpZCwgZW50cnktPnRhcmdldCkpCisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1i ZXIocmVzdWx0LCBpKTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaCBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV90cm92ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4yMmZlM2E2MjBmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5oCkBAIC0wLDAgKzEsMTE0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX3Ryb3ZlLmgKKyAqCSAgQWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGlj dWxhciBxdWVyeSwgYXBwcm9wcmlhdGVseQorICogICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50 IGFjY2Vzcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9UUk9W RV9ICisjZGVmaW5lIFBHUEFfVFJPVkVfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2lu Y2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlIHBn cGFfdHJvdmU7CisKKy8qCisgKiBGbGFncyB0aGF0IGNhbiBiZSBzZXQgb24gYSBwZ3BhX3Ryb3Zl X2VudHJ5IHRvIGluZGljYXRlIHdoYXQgaGFwcGVuZWQgd2hlbgorICogdHJ5aW5nIHRvIHBsYW4g dXNpbmcgYWR2aWNlLgorICoKKyAqIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCBtZWFucyB0aGF0IHdl IGZvdW5kIHNvbWUgcGFydCBvZiB0aGUgcXVlcnkgdGhhdCBhdAorICogbGVhc3QgcGFydGlhbGx5 IG1hdGNoZWQgdGhlIHRhcmdldDsgZS5nLiBnaXZlbiBKT0lOX09SREVSKGEgYiksIHRoaXMgd291 bGQKKyAqIGJlIHNldCBpZiB3ZSBldmVyIHNhdyBhbnkgam9pbnJlbCBpbmNsdWRpbmcgZWl0aGVy ICJhIiBvciAiYiIuCisgKgorICogUEdQQV9URV9NQVRDSF9GVUxMIG1lYW5zIHRoYXQgd2UgZm91 bmQgYW4gZXhhY3QgbWF0Y2ggZm9yIHRoZSB0YXJnZXQ7IGUuZy4KKyAqIGdpdmVuIEpPSU5fT1JE RVIoYSBiKSwgdGhpcyB3b3VsZCBiZSBzZXQgaWYgd2Ugc2F3IGEgam9pbnJlbCBjb250YWluaW5n CisgKiBleGFjdGx5ICJhIiBhbmQgImIiIGFuZCBub3RoaW5nIGVsc2UuCisgKgorICogUEdQQV9U RV9JTkFQUExJQ0FCTEUgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGRvZXNuJ3QgcHJvcGVybHkgYXBw bHkgdG8gdGhlCisgKiB0YXJnZXQ7IGUuZy4gSU5ERVhfU0NBTihmb28gYmFyX2lkeCkgd291bGQg YmUgc28gbWFya2VkIGlmIGJhcl9pZHggZG9lcyBub3QKKyAqIGV4aXN0IG9uIGZvby4gVGhlIGZh Y3QgdGhhdCB0aGlzIGJpdCBoYXMgYmVlbiBzZXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZQorICog YWR2aWNlIGhhZCBubyBlZmZlY3QuCisgKgorICogUEdQQV9URV9DT05GTElDVElORyBtZWFucyB0 aGF0IGEgY29uZmxpY3Qgd2FzIGRldGVjdGVkIGJldHdlZW4gd2hhdCB0aGlzCisgKiBhZHZpY2Ug d2FudHMgYW5kIHdoYXQgc29tZSBvdGhlciBwbGFuIGFkdmljZSB3YW50czsgZS5nLiBKT0lOX09S REVSKGEgYikKKyAqIHdvdWxkIGNvbmZsaWN0IHdpdGggSEFTSF9KT0lOKGEpLCBiZWNhdXNlIHRo ZSBmb3JtZXIgcmVxdWlyZXMgImEiIHRvIGJlIHRoZQorICogb3V0ZXIgdGFibGUgd2hpbGUgdGhl IGxhdHRlciByZXF1aXJlcyBpdCB0byBiZSB0aGUgaW5uZXIgdGFibGUuCisgKgorICogUEdQQV9U RV9GQUlMRUQgbWVhbnMgdGhhdCB0aGUgcmVzdWx0aW5nIHBsYW4gZGlkIG5vdCBjb25mb3JtIHRv IHRoZSBhZHZpY2UuCisgKi8KKyNkZWZpbmUgUEdQQV9URV9NQVRDSF9QQVJUSUFMCQkweDAwMDEK KyNkZWZpbmUgUEdQQV9URV9NQVRDSF9GVUxMCQkJMHgwMDAyCisjZGVmaW5lIFBHUEFfVEVfSU5B UFBMSUNBQkxFCQkweDAwMDQKKyNkZWZpbmUgUEdQQV9URV9DT05GTElDVElORwkJCTB4MDAwOAor I2RlZmluZSBQR1BBX1RFX0ZBSUxFRAkJCQkweDAwMTAKKworLyoKKyAqIEVhY2ggZW50cnkgaW4g YSB0cm92ZSBvZiBhZHZpY2UgcmVwcmVzZW50cyB0aGUgYXBwbGljYXRpb24gb2YgYSB0YWcgdG8K KyAqIGEgc2luZ2xlIHRhcmdldC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9lbnRy eQoreworCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZzsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldDsKKwlpbnQJCQlmbGFnczsKK30gcGdwYV90cm92ZV9lbnRyeTsKKworLyoKKyAqIFdoYXQg a2luZCBvZiBpbmZvcm1hdGlvbiBkb2VzIHRoZSBjYWxsZXIgd2FudCB0byBmaW5kIGluIGEgdHJv dmU/CisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfU0NBTiBtZWFucyB3ZSdyZSBsb29raW5nIGZv ciBzY2FuIGFkdmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIG1lYW5zIHdlJ3Jl IGxvb2tpbmcgZm9yIGpvaW4tcmVsYXRlZCBhZHZpY2UuCisgKiBUaGlzIGluY2x1ZGVzIGpvaW4g b3JkZXIgYWR2aWNlLCBqb2luIG1ldGhvZCBhZHZpY2UsIGFuZCBzZW1pam9pbi11bmlxdWVuZXNz CisgKiBhZHZpY2UuCisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfUkVMIG1lYW5zIHdlJ3JlIGxv b2tpbmcgZm9yIGdlbmVyYWwgYWR2aWNlIGFib3V0IHRoaXMKKyAqIGEgUmVsT3B0SW5mbyB0aGF0 IG1heSBjb3JyZXNwb25kIHRvIGVpdGhlciBhIHNjYW4gb3IgYSBqb2luLiBUaGlzIGluY2x1ZGVz CisgKiBnYXRoZXItcmVsYXRlZCBhZHZpY2UgYW5kIHBhcnRpdGlvbndpc2UgYWR2aWNlLiBOb3Rl IHRoYXQgcGFydGl0aW9ud2lzZQorICogYWR2aWNlIG1pZ2h0IHNlZW0gbGlrZSBqb2luIGFkdmlj ZSwgYnV0IHRoYXQncyBub3QgYSBoZWxwZnVsIHdheSBvZiB2aWV3aW5nCisgKiB0aGUgbWF0dGVy IGJlY2F1c2UgKDEpIHBhcnRpdGlvbndpc2UgYWR2aWNlIGlzIGFsc28gcmVsZXZhbnQgYXQgdGhl IHNjYW4KKyAqIGxldmVsIGFuZCAoMikgb3RoZXIgdHlwZXMgb2Ygam9pbiBhZHZpY2UgYWZmZWN0 IG9ubHkgd2hhdCB0byBkbyBmcm9tCisgKiBqb2luX3BhdGhfc2V0dXBfaG9vaywgYnV0IHBhcnRp dGlvbndpc2UgYWR2aWNlIGFmZmVjdHMgd2hhdCB0byBkbyBpbgorICogam9pbnJlbF9zZXR1cF9o b29rLgorICovCit0eXBlZGVmIGVudW0gcGdwYV90cm92ZV9sb29rdXBfdHlwZQoreworCVBHUEFf VFJPVkVfTE9PS1VQX0pPSU4sCisJUEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCVBHUEFfVFJPVkVf TE9PS1VQX1NDQU4KK30gcGdwYV90cm92ZV9sb29rdXBfdHlwZTsKKworLyoKKyAqIFRoaXMgc3Ry dWN0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBhIHRyb3ZlIGxvb2t1cC4gRm9yIGVh Y2ggbWVtYmVyCisgKiBvZiAiaW5kZXhlcyIsIHRoZSBlbnRyeSBhdCB0aGUgY29ycmVzcG9uZGlu ZyBvZmZzZXQgd2l0aGluICJlbnRyaWVzIiBpcyBvbmUKKyAqIG9mIHRoZSByZXN1bHRzLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX3Jlc3VsdAoreworCXBncGFfdHJvdmVfZW50cnkg KmVudHJpZXM7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKK30gcGdwYV90cm92ZV9yZXN1bHQ7CisK K2V4dGVybiBwZ3BhX3Ryb3ZlICpwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVtcyk7 CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJ CQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgIGludCBucmlkcywKKwkJ CQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfcmVzdWx0 ICpyZXN1bHQpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUg KnRyb3ZlLAorCQkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJ ICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywKKwkJCQkJCQkJICBpbnQgKm5lbnRyaWVzKTsK K2V4dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkocGdwYV90cm92ZV9lbnRyeSAq ZW50cnkpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9lbnRy eSAqZW50cmllcywKKwkJCQkJCQkJIEJpdG1hcHNldCAqaW5kZXhlcywgaW50IGZsYWdzKTsKK2V4 dGVybiB2b2lkIHBncGFfdHJvdmVfYXBwZW5kX2ZsYWdzKFN0cmluZ0luZm8gYnVmLCBpbnQgZmxh Z3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93 YWxrZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjk1YmE3YTc1ZmEKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKQEAgLTAsMCArMSwxMDI5 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5jCisgKgkgIE1haW4g ZW50cnlwb2ludHMgZm9yIGFuYWx5emluZyBhIHBsYW4gdG8gZ2VuZXJhdGUgYW4gYWR2aWNlIHN0 cmluZworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dh bGtlci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisjaW5j bHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK Kworc3RhdGljIHZvaWQgcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJv YmxlbSwKKwkJCQkJCQkJICBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJ CQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJvb2wgYmVuZWF0 aF9hbnlfZ2F0aGVyKTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfcHJvY2Vzc191bnJvbGxlZF9q b2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgcGdwYV91 bnJvbGxlZF9qb2luICp1am9pbik7CisKK3N0YXRpYyBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnBncGFf YWRkX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJ CXBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCQlQbGFuICpwbGFuKTsKKworc3RhdGljIHZv aWQgcGdwYV9xZl9hZGRfcnRpKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXggcnRp KTsKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1 cmVzLCBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9wbGFuX3J0 aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgIExp c3QgKnJ0YWJsZSk7CisKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hl cyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luLAorCQkJCQkJCQkJCSAgIEluZGV4IHJ0YWJsZV9s ZW5ndGgsCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJ CQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJCQkgICBib29s IHRvcGxldmVsKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19t ZW1iZXIocGdwYV9qb2luX21lbWJlciAqbWVtYmVyLAorCQkJCQkJCQkJCQkJICBJbmRleCBydGFi bGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJz LAorCQkJCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitzdGF0aWMgcGdw YV9zY2FuICpwZ3BhX3dhbGtlcl9maW5kX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3 YWxrZXIsCisJCQkJCQkJCQkJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJ CUJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2luZGV4X3Rhcmdl dF9tYXRjaGVzX3BsYW4ocGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQsCisJCQkJCQkJCQkJCQkg IFBsYW4gKnBsYW4pOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkgcGdwYV9xZl90eXBl IHR5cGUsCisJCQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFf d2Fsa2VyX2NvbnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJ CQkJCQkJCQkgIHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFw c2V0ICpyZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVy KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNl dCAqcmVsaWRzKTsKKworLyoKKyAqIFRvcC1sZXZlbCBlbnRyeXBvaW50IGZvciB0aGUgcGxhbiB0 cmVlIHdhbGsuCisgKgorICogUG9wdWxhdGVzIHdhbGtlciBiYXNlZCBvbiBhIHRyYXZlcnNhbCBv ZiB0aGUgUGxhbiB0cmVlcyBpbiBwc3RtdC4KKyAqCisgKiBzal91bmlxdWVfcmVscyBpcyBhIGxp c3Qgb2YgcGdwYV9zal91bmlxdWVfcmVsIG9iamVjdHMsIG9uZSBmb3IgZWFjaAorICogcmVsYXRp b24gd2UgY29uc2lkZXJlZCBtYWtpbmcgdW5pcXVlIGFzIHBhcnQgb2Ygc2VtaWpvaW4gcGxhbm5p bmcuCisgKi8KK3ZvaWQKK3BncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsIFBsYW5uZWRTdG10ICpwc3RtdCwKKwkJCQkgTGlzdCAqc2pfdW5pcXVlX3JlbHMp Cit7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqc2pfdW5pcXVlX3J0aXMgPSBOVUxMOwor CUxpc3QJICAgKnNqX25vbnVuaXF1ZV9xZnMgPSBOVUxMOworCisJLyogSW5pdGlhbGl6YXRpb24u ICovCisJbWVtc2V0KHdhbGtlciwgMCwgc2l6ZW9mKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCkp OworCXdhbGtlci0+cHN0bXQgPSBwc3RtdDsKKworCS8qIFdhbGsgdGhlIG1haW4gcGxhbiB0cmVl LiAqLworCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBzdG10LT5wbGFuVHJlZSwgZmFs c2UsIE5VTEwsIE5JTCwgZmFsc2UpOworCisJLyogTWFpbiBwbGFuIHRyZWUgd2FsayB3b24ndCBy ZWFjaCBzdWJwbGFucywgc28gd2FsayB0aG9zZS4gKi8KKwlmb3JlYWNoKGxjLCBwc3RtdC0+c3Vi cGxhbnMpCisJeworCQlQbGFuCSAgICpwbGFuID0gbGZpcnN0KGxjKTsKKworCQlpZiAocGxhbiAh PSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcGxhbiwgZmFsc2UsIE5V TEwsIE5JTCwgZmFsc2UpOworCX0KKworCS8qIEFkanVzdCBSVElzIGZyb20gc2pfdW5pcXVlX3Jl bHMgZm9yIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuICovCisJZm9yZWFjaF9wdHIocGdwYV9z al91bmlxdWVfcmVsLCB1ciwgc2pfdW5pcXVlX3JlbHMpCisJeworCQlpbnQJCQlydGluZGV4ID0g LTE7CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsKKwkJYm9vbAkJZHVtbXkgPSBmYWxzZTsKKwkJQml0 bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCQkvKiBJZiB0aGlzIGlzIGEgc3VicGxhbiwgZmlu ZCB0aGUgcmFuZ2UgdGFibGUgb2Zmc2V0LiAqLworCQlpZiAodXItPnBsYW5fbmFtZSAhPSBOVUxM KQorCQl7CisJCQlmb3JlYWNoX25vZGUoU3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3Vi cnRpbmZvcykKKwkJCXsKKwkJCQlpZiAoc3RyY21wKHVyLT5wbGFuX25hbWUsIHJ0aW5mby0+cGxh bl9uYW1lKSA9PSAwKQorCQkJCXsKKwkJCQkJcnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zmc2V0Owor CQkJCQlkdW1teSA9IHJ0aW5mby0+ZHVtbXk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwor CQkJaWYgKHJ0b2Zmc2V0ID09IDApCisJCQkJZWxvZyhFUlJPUiwgIm5vIHJ0b2Zmc2V0IGZvciBw bGFuICVzIiwgdXItPnBsYW5fbmFtZSk7CisJCX0KKworCQkvKiBJZiB0aGlzIGVudHJ5IHBlcnRh aW5zIHRvIGEgZHVtbXkgc3VicXVlcnksIGlnbm9yZSBpdC4gKi8KKwkJaWYgKGR1bW15KQorCQkJ Y29udGludWU7CisKKwkJLyogT2Zmc2V0IGVhY2ggZW50cnkgZnJvbSB0aGUgb3JpZ2luYWwgc2V0 LiAqLworCQl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIodXItPnJlbGlkcywgcnRp bmRleCkpID49IDApCisJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aW5kZXgg KyBydG9mZnNldCk7CisKKwkJLyogU3RvcmUgdGhlIHJlc3VsdGluZyBzZXQuICovCisJCXNqX3Vu aXF1ZV9ydGlzID0gbGFwcGVuZChzal91bmlxdWVfcnRpcywgcmVsaWRzKTsKKwl9CisKKwkvKgor CSAqIFJlbW92ZSBhbnkgbm9uLXVuaXF1ZSBzZW1pam9pbiBxdWVyeSBmZWF0dXJlcyBmb3Igd2hp Y2ggbWFraW5nIHRoZSByZWwKKwkgKiB1bmlxdWUgd2Fzbid0IGNvbnNpZGVyZWQuCisJICovCisJ Zm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwKKwkJCQl3YWxrZXItPnF1ZXJ5X2Zl YXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFXSkKKwl7CisJCWlmIChsaXN0X21lbWJl cihzal91bmlxdWVfcnRpcywgcWYtPnJlbGlkcykpCisJCQlzal9ub251bmlxdWVfcWZzID0gbGFw cGVuZChzal9ub251bmlxdWVfcWZzLCBxZik7CisJfQorCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNb UEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUVdID0gc2pfbm9udW5pcXVlX3FmczsKKworCS8qCisJ ICogSWYgd2UgZmluZCBhbnkgY2FzZXMgd2hlcmUgYW5hbHlzaXMgb2YgdGhlIFBsYW4gdHJlZSBz aG93cyB0aGF0IHRoZQorCSAqIHNlbWlqb2luIHdhcyBtYWRlIHVuaXF1ZSBidXQgdGhpcyBwb3Nz aWJpbGl0eSB3YXMgbmV2ZXIgb2JzZXJ2ZWQgdG8gYmUKKwkgKiBjb25zaWRlcmVkIGR1cmluZyBw bGFubmluZywgdGhlbiB3ZSBoYXZlIGEgYnVnIHNvbWV3aGVyZS4KKwkgKi8KKwlmb3JlYWNoX3B0 cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLAorCQkJCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbUEdQ QVFGX1NFTUlKT0lOX1VOSVFVRV0pCisJeworCQlpZiAoIWxpc3RfbWVtYmVyKHNqX3VuaXF1ZV9y dGlzLCBxZi0+cmVsaWRzKSkKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCQlpbml0 U3RyaW5nSW5mbygmYnVmKTsKKwkJCW91dEJpdG1hcHNldCgmYnVmLCBxZi0+cmVsaWRzKTsKKwkJ CWVsb2coRVJST1IsCisJCQkJICJ1bmlxdWUgc2VtaWpvaW4gZm91bmQgZm9yIHJlbGlkcyAlcyBi dXQgbm90IG9ic2VydmVkIGR1cmluZyBwbGFubmluZyIsCisJCQkJIGJ1Zi5kYXRhKTsKKwkJfQor CX0KKworCS8qCisJICogSXQncyBwb3NzaWJsZSBmb3IgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IHF1ZXJ5IGZlYXR1cmUgdG8gZmluZCBubworCSAqIFJUSXMgd2hlbiBwYXJ0aXRpb253aXNlIGFn Z3JlZ2F0aW9uIGlzIGluIHVzZS4gV2Ugc2hvdWxkbid0IGVtaXQKKwkgKiBzb21ldGhpbmcgbGlr ZSBHQVRIRVJfTUVSR0UoKCkpLCBzbyBpbnN0ZWFkIGVtaXQgbm90aGluZy4gVGhpcyBtZWFucwor CSAqIHRoYXQgd2Ugd29uJ3QgYWR2aXNlIGVpdGhlciBHQVRIRVIgb3IgR0FUSEVSX01FUkdFIG9y IE5PX0dBVEhFUiBpbiBzdWNoCisJICogY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIHNvbWV0aGluZyB3 ZSB3YW50IHRvIGltcHJvdmUgaW4gdGhlIGZ1dHVyZS4KKwkgKgorCSAqIChTaG91bGQgdGhlIFBh cnRpYWwgQWdncmVnYXRlcyBpbiBzdWNoIGEgY2FzZSBiZSBjcmVhdGVkIGluIGFuCisJICogVVBQ RVJSRUxfR1JPVVBfQUdHIHdpdGggYSBub24tZW1wdHkgcmVsaWQgc2V0PyBSaWdodCBub3cgdGhh dCBkb2Vzbid0CisJICogaGFwcGVuLCBidXQgaXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBtYWtlIGxp ZmUgZWFzaWVyIGZvciB1cyBpZiBpdCBkaWQuKQorCSAqLworCWZvciAoaW50IHQgPSAwOyB0IDwg TlVNX1BHUEFfUUZfVFlQRVM7ICsrdCkKKwl7CisJCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzID0g TklMOworCisJCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHdhbGtlci0+cXVl cnlfZmVhdHVyZXNbdF0pCisJCXsKKwkJCWlmIChxZi0+cmVsaWRzICE9IE5VTEwpCisJCQkJcXVl cnlfZmVhdHVyZXMgPSBsYXBwZW5kKHF1ZXJ5X2ZlYXR1cmVzLCBxZik7CisJCQllbHNlCisJCQkJ QXNzZXJ0KHQgPT0gUEdQQVFGX0dBVEhFUiB8fCB0ID09IFBHUEFRRl9HQVRIRVJfTUVSR0UpOwor CQl9CisKKwkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1t0XSA9IHF1ZXJ5X2ZlYXR1cmVzOworCX0K K30KKworLyoKKyAqIE1haW4gd29ya2hvcnNlIGZvciB0aGUgcGxhbiB0cmVlIHdhbGsuCisgKgor ICogSWYgd2l0aGluX2pvaW5fcHJvYmxlbSBpcyB0cnVlLCB3ZSBlbmNvdW50ZXJlZCBhIGpvaW4g YXQgc29tZSBoaWdoZXIgbGV2ZWwKKyAqIG9mIHRoZSB0cmVlIHdhbGsgYW5kIGhhdmVuJ3QgeWV0 IGRlc2NlbmRlZCBvdXQgb2YgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUgdGhhdCBp cyBwYXJ0IG9mIHRoYXQgc2FtZSBqb2luIHByb2JsZW0uIFdlJ3JlIG5vIGxvbmdlciBpbiB0aGUg c2FtZQorICogam9pbiBwcm9ibGVtIGlmICgxKSB3ZSBjcm9zcyBpbnRvIGEgZGlmZmVyZW50IHN1 YnF1ZXJ5IG9yICgyKSB3ZSBkZXNjZW5kCisgKiB0aHJvdWdoIGFuIEFwcGVuZCBvciBNZXJnZUFw cGVuZCBub2RlLCBiZWxvdyB3aGljaCBhbnkgZnVydGhlciBqb2lucyB3b3VsZAorICogYmUgcGFy dGl0aW9ud2lzZSBqb2lucyBwbGFubmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgb3V0ZXIgam9pbiBw cm9ibGVtLgorICoKKyAqIElmIGpvaW5fdW5yb2xsZXIgIT0gTlVMTCwgdGhlIGpvaW4gdW5yb2xs ZXIgY29kZSBleHBlY3RzIHVzIHRvIGZpbmQgYSBqb2luCisgKiB0aGF0IHNob3VsZCBiZSB1bnJv bGxlZCBpbnRvIHRoYXQgb2JqZWN0LiBUaGlzIGltcGxpZXMgdGhhdCB3ZSdyZSB3aXRoaW4gYQor ICogam9pbiBwcm9ibGVtLCBidXQgdGhlIHJldmVyc2UgaXMgbm90IHRydWU6IHdoZW4gd2UndmUg dHJhdmVyc2VkIGFsbCB0aGUKKyAqIGpvaW5zIGJ1dCBhcmUgc3RpbGwgbG9va2luZyBmb3IgdGhl IHNjYW4gdGhhdCBpcyB0aGUgbGVhZiBvZiB0aGUgam9pbiB0cmVlLAorICogam9pbl91bnJvbGxl ciB3aWxsIGJlIE5VTEwgYnV0IHdpdGhpbl9qb2luX3Byb2JsZW0gd2lsbCBiZSB0cnVlLgorICoK KyAqIEVhY2ggZWxlbWVudCBvZiBhY3RpdmVfcXVlcnlfZmVhdHVyZXMgY29ycmVzcG9uZHMgdG8g c29tZSBpdGVtIG9mIGFkdmljZQorICogdGhhdCBuZWVkcyB0byBlbnVtZXJhdGUgYWxsIHRoZSBy ZWxhdGlvbnMgaXQgYWZmZWN0cy4gV2UgYWRkIFJUSXMgd2UgZmluZAorICogZHVyaW5nIHRyZWUg dHJhdmVyc2FsIHRvIGVhY2ggb2YgdGhlc2UgcXVlcnkgZmVhdHVyZXMuCisgKgorICogSWYgYmVu ZWF0aF9hbnlfZ2F0aGVyID09IHRydWUsIHNvbWUgaGlnaGVyIGxldmVsIG9mIHRoZSB0cmVlIHRy YXZlcnNhbCBmb3VuZAorICogYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtLAor CQkJCQkgIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJICBMaXN0ICph Y3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIpCit7 CisJcGdwYV9qb2luX3Vucm9sbGVyICpvdXRlcl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlwZ3Bh X2pvaW5fdW5yb2xsZXIgKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCWJvb2wJCWpvaW5f dW5yb2xsZXJfdG9wbGV2ZWwgPSBmYWxzZTsKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpl eHRyYXBsYW5zID0gTklMOworCUxpc3QJICAgKmVsaWRlZF9ub2RlcyA9IE5JTDsKKworCUFzc2Vy dCh3aXRoaW5fam9pbl9wcm9ibGVtIHx8IGpvaW5fdW5yb2xsZXIgPT0gTlVMTCk7CisKKwkvKgor CSAqIENoZWNrIHRoZSBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgbGlzdCB0byBzZWUgd2hldGhlciB0 aGlzIHdhcyBwcmV2aW91c2x5CisJICogaWRlbnRpZmllZCBhcyBhIHBsYW4gbm9kZSB0aGF0IG5l ZWRzIHRvIGJlIHRyZWF0ZWQgYXMgYSBxdWVyeSBmZWF0dXJlLgorCSAqIFdlIG11c3QgZG8gdGhp cyBiZWZvcmUgaGFuZGxpbmcgZWxpZGVkIG5vZGVzLCBiZWNhdXNlIGlmIHRoZXJlJ3MgYW4KKwkg KiBlbGlkZWQgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBmdXR1cmUgcXVlcnkgZmVhdHVyZSwgdGhl IFJUSXMgYXNzb2NpYXRlZAorCSAqIHdpdGggdGhlIGVsaWRlZCBub2RlIHNob3VsZCBiZSB0aGUg b25seSBvbmVzIGF0dHJpYnV0ZWQgdG8gdGhlIHF1ZXJ5CisJICogZmVhdHVyZS4KKwkgKi8KKwlm b3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCB3YWxrZXItPmZ1dHVyZV9xdWVyeV9m ZWF0dXJlcykKKwl7CisJCWlmIChxZi0+cGxhbiA9PSBwbGFuKQorCQl7CisJCQlhY3RpdmVfcXVl cnlfZmVhdHVyZXMgPSBsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKTsKKwkJCWFjdGl2 ZV9xdWVyeV9mZWF0dXJlcyA9IGxhcHBlbmQoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7CisJ CQl3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcyA9CisJCQkJbGlzdF9kZWxldGVfcHRyKHdh bGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7CisJCQlicmVhazsKKwkJfQorCX0KKwor CS8qCisJICogRmluZCBhbGwgZWxpZGVkIG5vZGVzIGZvciB0aGlzIFBsYW4gbm9kZS4KKwkgKi8K Kwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgd2Fsa2VyLT5wc3RtdC0+ZWxpZGVkTm9kZXMp CisJeworCQlpZiAobi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCWVs aWRlZF9ub2RlcyA9IGxhcHBlbmQoZWxpZGVkX25vZGVzLCBuKTsKKwl9CisKKwkvKiBJZiB3ZSBm b3VuZCBhbnkgZWxpZGVkX25vZGVzLCBoYW5kbGUgdGhlbS4gKi8KKwlpZiAoZWxpZGVkX25vZGVz ICE9IE5JTCkKKwl7CisJCWludAkJCW51bV9lbGlkZWRfbm9kZXMgPSBsaXN0X2xlbmd0aChlbGlk ZWRfbm9kZXMpOworCQlFbGlkZWROb2RlICpsYXN0X2VsaWRlZF9ub2RlOworCisJCS8qCisJCSAq IFJUSXMgZm9yIHRoZSBmaW5hbCAtLSBhbmQgdGh1cyBsb2dpY2FsbHkgdXBwZXJtb3N0IC0tIGVs aWRlZCBub2RlCisJCSAqIHNob3VsZCBiZSBjb2xsZWN0ZWQgZm9yIHF1ZXJ5IGZlYXR1cmVzIHBh c3NlZCBkb3duIGJ5IHRoZSBjYWxsZXIuCisJCSAqIEhvd2V2ZXIsIGVsaWRlZCBub2RlcyBhY3Qg YXMgYmFycmllcnMgdG8gcXVlcnkgZmVhdHVyZXMsIHdoaWNoCisJCSAqIG1lYW5zIHRoYXQgKDEp IHRoZSByZW1haW5pbmcgZWxpZGVkIG5vZGVzLCBpZiBhbnksIHNob3VsZCBiZQorCQkgKiBpZ25v cmVkIGZvciBwdXJwb3NlcyBvZiBxdWVyeSBmZWF0dXJlcyBhbmQgKDIpIHRoZSBsaXN0IG9mIGFj dGl2ZQorCQkgKiBxdWVyeSBmZWF0dXJlcyBzaG91bGQgYmUgcmVzZXQgdG8gZW1wdHkgc28gdGhh dCB3ZSBkbyBub3QgYWRkIFJUSXMKKwkJICogZnJvbSB0aGUgcGxhbiBub2RlIHRoYXQgaXMgbG9n aWNhbGx5IGJlbmVhdGggdGhlIGVsaWRlZCBub2RlIHRvIHRoZQorCQkgKiBxdWVyeSBmZWF0dXJl cyBwYXNzZWQgZG93biBmcm9tIHRoZSBjYWxsZXIuCisJCSAqLworCQlsYXN0X2VsaWRlZF9ub2Rl ID0gbGlzdF9udGgoZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7CisJCXBncGFf cWZfYWRkX3J0aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJIHBncGFfZmlsdGVyX291 dF9qb2luX3JlbGlkcyhsYXN0X2VsaWRlZF9ub2RlLT5yZWxpZHMsCisJCQkJCQkJCQkJCQkJIHdh bGtlci0+cHN0bXQtPnJ0YWJsZSkpOworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisK KwkJLyoKKwkJICogSWYgd2UncmUgd2l0aGluIGEgam9pbiBwcm9ibGVtLCB0aGUgam9pbl91bnJv bGxlciBpcyByZXNwb25zaWJsZQorCQkgKiBmb3IgYnVpbGRpbmcgdGhlIHNjYW4gZm9yIHRoZSBm aW5hbCBlbGlkZWQgbm9kZSwgc28gdGhyb3cgaXQgb3V0LgorCQkgKi8KKwkJaWYgKHdpdGhpbl9q b2luX3Byb2JsZW0pCisJCQllbGlkZWRfbm9kZXMgPSBsaXN0X3RydW5jYXRlKGVsaWRlZF9ub2Rl cywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCisJCS8qIEJ1aWxkIHNjYW5zIGZvciBhbGwgKG9y IHRoZSByZW1haW5pbmcpIGVsaWRlZCBub2Rlcy4gKi8KKwkJZm9yZWFjaF9ub2RlKEVsaWRlZE5v ZGUsIGVsaWRlZF9ub2RlLCBlbGlkZWRfbm9kZXMpCisJCXsKKwkJCSh2b2lkKSBwZ3BhX2J1aWxk X3NjYW4od2Fsa2VyLCBwbGFuLCBlbGlkZWRfbm9kZSwKKwkJCQkJCQkJICAgYmVuZWF0aF9hbnlf Z2F0aGVyLCB3aXRoaW5fam9pbl9wcm9ibGVtKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZXJl IHdlcmUgYW55IGVsaWRlZCBub2RlcywgdGhlbiBldmVyeXRoaW5nIGJlbmVhdGggdGhvc2Ugbm9k ZXMKKwkJICogaXMgbm90IHBhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtLgorCQkgKgorCQkg KiBJbiBtb3JlIGRldGFpbCwgaWYgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHdhcyBlbGlkZWQs IHRoZW4gYQorCQkgKiBwYXJ0aXRpb253aXNlIGpvaW4gd2FzIGNob3NlbiBhbmQgb25seSBhIHNp bmdsZSBjaGlsZCBzdXJ2aXZlZDsgaWYKKwkJICogYSBTdWJxdWVyeVNjYW4gd2FzIGVsaWRlZCwg dGhlIHN1YnF1ZXJ5IHdhcyBwbGFubmVkIHdpdGhvdXQKKwkJICogZmxhdHRlbmluZyBpdCBpbnRv IHRoZSBwYXJlbnQuCisJCSAqLworCQl3aXRoaW5fam9pbl9wcm9ibGVtID0gZmFsc2U7CisJCWpv aW5fdW5yb2xsZXIgPSBOVUxMOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyBhIEdhdGhlciBv ciBHYXRoZXIgTWVyZ2Ugbm9kZSwgZGlyZWN0bHkgYWRkIGl0IHRvIHRoZSBsaXN0CisJICogb2Yg Y3VycmVudGx5LWFjdGl2ZSBxdWVyeSBmZWF0dXJlcy4gV2UgbXVzdCBkbyB0aGlzIGFmdGVyIGhh bmRsaW5nCisJICogZWxpZGVkIG5vZGVzLCBzaW5jZSB0aGUgR2F0aGVyIG9yIEdhdGhlciBNZXJn ZSBub2RlIG9jY3VycyBsb2dpY2FsbHkKKwkgKiBiZW5lYXRoIGFueSBhc3NvY2lhdGVkIGVsaWRl ZCBub2Rlcy4KKwkgKgorCSAqIEV4Y2VwdGlvbjogV2UgZGlzcmVnYXJkIGFueSBzaW5nbGVfY29w eSBHYXRoZXIgbm9kZXMuIFRoZXNlIGFyZSBjcmVhdGVkCisJICogYnkgZGVidWdfcGFyYWxsZWxf cXVlcnksIGFuZCBoYXZpbmcgdGhlbSBhZmZlY3QgdGhlIHBsYW4gYWR2aWNlIGlzCisJICogY291 bnRlcnByb2R1Y3RpdmUsIGFzIHRoZSByZXN1bHQgd2lsbCBiZSB0byBhZHZpc2UgdGhlIHVzZSBv ZiBhIHJlYWwKKwkgKiBHYXRoZXIgbm9kZSwgcmF0aGVyIHRoYW4gYSBzaW5nbGUgY29weSBvbmUu CisJICovCisJaWYgKElzQShwbGFuLCBHYXRoZXIpICYmICEoKEdhdGhlciAqKSBwbGFuKS0+c2lu Z2xlX2NvcHkpCisJeworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJbGFwcGVuZChsaXN0 X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKSwKKwkJCQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxr ZXIsIFBHUEFRRl9HQVRIRVIsIHBsYW4pKTsKKwkJYmVuZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsK Kwl9CisJZWxzZSBpZiAoSXNBKHBsYW4sIEdhdGhlck1lcmdlKSkKKwl7CisJCWFjdGl2ZV9xdWVy eV9mZWF0dXJlcyA9CisJCQlsYXBwZW5kKGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMp LAorCQkJCQlwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhFUl9NRVJHRSwgcGxh bikpOworCQliZW5lYXRoX2FueV9nYXRoZXIgPSB0cnVlOworCX0KKworCS8qCisJICogSWYgd2Un cmUgd2l0aGluIGEgam9pbiBwcm9ibGVtLCB0aGUgam9pbiB1bnJvbGxlciBpcyByZXNwb25zaWJs ZSBmb3IKKwkgKiBidWlsZGluZyBhbnkgcmVxdWlyZWQgc2NhbiBmb3IgdGhpcyBub2RlLiBJZiBu b3QsIHdlIGRvIGl0IGhlcmUuCisJICovCisJaWYgKCF3aXRoaW5fam9pbl9wcm9ibGVtKQorCQko dm9pZCkgcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgcGxhbiwgTlVMTCwgYmVuZWF0aF9hbnlfZ2F0 aGVyLCBmYWxzZSk7CisKKwkvKgorCSAqIElmIHRoaXMgam9pbiBuZWVkcyB0byBiZSB1bnJvbGxl ZCBidXQgdGhlcmUncyBubyBqb2luIHVucm9sbGVyIGFscmVhZHkKKwkgKiBhdmFpbGFibGUsIGNy ZWF0ZSBvbmUuCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pv aW4ocGxhbikpCisJeworCQlqb2luX3Vucm9sbGVyID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxl cigpOworCQlqb2luX3Vucm9sbGVyX3RvcGxldmVsID0gdHJ1ZTsKKwkJd2l0aGluX2pvaW5fcHJv YmxlbSA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGpvaW4gaXMgdG8gYmUgdW5yb2xs ZWQsIHBncGFfdW5yb2xsX2pvaW4oKSB3aWxsIHJldHVybiB0aGUgam9pbgorCSAqIHVucm9sbGVy IG9iamVjdCB0aGF0IHNob3VsZCBiZSBwYXNzZWQgZG93biB3aGVuIHdlIHJlY3Vyc2UgaW50byB0 aGUKKwkgKiBvdXRlciBhbmQgaW5uZXIgc2lkZXMgb2YgdGhlIHBsYW4uCisJICovCisJaWYgKGpv aW5fdW5yb2xsZXIgIT0gTlVMTCkKKwkJcGdwYV91bnJvbGxfam9pbih3YWxrZXIsIHBsYW4sIGJl bmVhdGhfYW55X2dhdGhlciwgam9pbl91bnJvbGxlciwKKwkJCQkJCSAmb3V0ZXJfam9pbl91bnJv bGxlciwgJmlubmVyX2pvaW5fdW5yb2xsZXIpOworCisJLyogQWRkIFJUSXMgZnJvbSB0aGUgcGxh biBub2RlIHRvIGFsbCBhY3RpdmUgcXVlcnkgZmVhdHVyZXMuICovCisJcGdwYV9xZl9hZGRfcGxh bl9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcGxhbiwgd2Fsa2VyLT5wc3RtdC0+cnRhYmxl KTsKKworCS8qCisJICogUmVjdXJzZSBpbnRvIHRoZSBvdXRlciBhbmQgaW5uZXIgc3VidHJlZXMu CisJICoKKwkgKiBBcyBhbiBleGNlcHRpb24sIGlmIHRoaXMgaXMgYSBGb3JlaWduU2NhbiwgZG9u J3QgcmVjdXJzZS4gcG9zdGdyZXNfZmR3CisJICogc29tZXRpbWVzIHN0b3JlcyBhbiBFUFEgcmVj aGVjayBwbGFuIGluIHBsYW4tPmxlZnR0cmVlLCBidXQgdGhhdCdzIGdvaW5nCisJICogdG8gbWVu dGlvbiB0aGUgc2FtZSBzZXQgb2YgcmVsYXRpb25zIGFzIHRoZSBGb3JlaWduU2NhbiBpdHNlbGYs IGFuZCB3ZQorCSAqIGhhdmUgbm8gd2F5IHRvIGVtaXQgYWR2aWNlIHRhcmdldGluZyB0aGUgRVBR IGNhc2UgdnMuIHRoZSBub24tRVBRIGNhc2UuCisJICogTW9yZW92ZXIsIGl0J3Mgbm90IGVudGly ZWx5IGNsZWFyIHdoYXQgb3RoZXIgRkRXcyBtaWdodCBkbyB3aXRoIHRoZQorCSAqIGxlZnQgYW5k IHJpZ2h0IHN1YnRyZWVzLiBNYXliZSBzb21lIGJldHRlciBoYW5kbGluZyBpcyBuZWVkZWQgaGVy ZSwgYnV0CisJICogZm9yIG5vdywgd2UganVzdCBwdW50LgorCSAqLworCWlmICghSXNBKHBsYW4s IEZvcmVpZ25TY2FuKSkKKwl7CisJCWlmIChwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMKQorCQkJcGdw YV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcGxhbi0+bGVmdHRyZWUsIHdpdGhpbl9qb2luX3By b2JsZW0sCisJCQkJCQkJCSAgb3V0ZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1 cmVzLAorCQkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJCWlmIChwbGFuLT5yaWdodHRy ZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4tPnJpZ2h0 dHJlZSwgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJCQkJICBpbm5lcl9qb2luX3Vucm9sbGVy LCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsK Kwl9CisKKwkvKgorCSAqIElmIHdlIGNyZWF0ZWQgYSBqb2luIHVucm9sbGVyIHVwIGFib3ZlLCB0 aGVuIGl0J3MgYWxzbyBvdXIgam9pbiB0byB1c2UKKwkgKiBpdCB0byBidWlsZCB0aGUgZmluYWwg cGdwYV91bnJvbGxlZF9qb2luLCBhbmQgdG8gZGVzdHJveSB0aGUgb2JqZWN0LgorCSAqLworCWlm IChqb2luX3Vucm9sbGVyX3RvcGxldmVsKQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9p bjsKKworCQl1am9pbiA9IHBncGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsIGpvaW5fdW5y b2xsZXIpOworCQl3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zID0KKwkJCWxhcHBlbmQo d2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucywgdWpvaW4pOworCQlwZ3BhX2Rlc3Ryb3lf am9pbl91bnJvbGxlcihqb2luX3Vucm9sbGVyKTsKKwkJKHZvaWQpIHBncGFfcHJvY2Vzc191bnJv bGxlZF9qb2luKHdhbGtlciwgdWpvaW4pOworCX0KKworCS8qCisJICogU29tZSBwbGFuIHR5cGVz IGNhbiBoYXZlIGFkZGl0aW9uYWwgY2hpbGRyZW4uIE5vZGVzIGxpa2UgQXBwZW5kIHRoYXQKKwkg KiBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIGNoaWxkcmVuIHN0b3JlIHRoZW0gaW4gYSBMaXN0OyBh IFN1YnF1ZXJ5U2NhbgorCSAqIGp1c3QgaGFzIGEgZmllbGQgZm9yIGEgc2luZ2xlIGFkZGl0aW9u YWwgUGxhbi4KKwkgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfQXBw ZW5kOgorCQkJeworCQkJCUFwcGVuZAkgICAqYXBsYW4gPSAoQXBwZW5kICopIHBsYW47CisKKwkJ CQlleHRyYXBsYW5zID0gYXBsYW4tPmFwcGVuZHBsYW5zOworCQkJfQorCQkJYnJlYWs7CisJCWNh c2UgVF9NZXJnZUFwcGVuZDoKKwkJCXsKKwkJCQlNZXJnZUFwcGVuZCAqbWFwbGFuID0gKE1lcmdl QXBwZW5kICopIHBsYW47CisKKwkJCQlleHRyYXBsYW5zID0gbWFwbGFuLT5tZXJnZXBsYW5zOwor CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBBbmQ6CisJCQlleHRyYXBsYW5zID0gKChC aXRtYXBBbmQgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRt YXBPcjoKKwkJCWV4dHJhcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBwbGFuczsK KwkJCWJyZWFrOworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCisJCQkvKgorCQkJICogV2UgZG9u J3QgcGFzcyBkb3duIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBhY3Jvc3MgaGVyZSwgYmVjYXVzZQor CQkJICogdGhvc2UgYXJlIHNwZWNpZmljIHRvIGEgc3VicXVlcnkgbGV2ZWwuCisJCQkgKi8KKwkJ CXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsICgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5z dWJwbGFuLAorCQkJCQkJCQkgIDAsIE5VTEwsIE5JTCwgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwkJ CWJyZWFrOworCQljYXNlIFRfQ3VzdG9tU2NhbjoKKwkJCWV4dHJhcGxhbnMgPSAoKEN1c3RvbVNj YW4gKikgcGxhbiktPmN1c3RvbV9wbGFuczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJl YWs7CisJfQorCisJLyogSWYgd2UgZm91bmQgYSBsaXN0IG9mIGV4dHJhIGNoaWxkcmVuLCBpdGVy YXRlIG92ZXIgaXQuICovCisJZm9yZWFjaChsYywgZXh0cmFwbGFucykKKwl7CisJCVBsYW4JICAg KnN1YnBsYW4gPSBsZmlyc3QobGMpOworCisJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIs IHN1YnBsYW4sIGZhbHNlLCBOVUxMLCBOSUwsCisJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIp OworCX0KK30KKworLyoKKyAqIFBlcmZvcm0gZmluYWwgcHJvY2Vzc2luZyBvZiBhIG5ld2x5LWNv bnN0cnVjdGVkIHBncGFfdW5yb2xsZWRfam9pbi4gVGhpcworICogb25seSBuZWVkcyB0byBiZSBj YWxsZWQgZm9yIHRvcGxldmVsIHBncGFfdW5yb2xsZWRfam9pbiBvYmplY3RzLCBzaW5jZSBpdAor ICogcmVjdXJzZXMgdG8gc3ViLWpvaW5zIGFzIG5lZWRlZC4KKyAqCisgKiBPdXIgZ29hbCBpcyB0 byBhZGQgdGhlIHNldCBvZiBpbm5lciByZWxpZHMgdG8gdGhlIHJlbGV2YW50IGpvaW5fc3RyYXRl Z2llcworICogbGlzdCwgYW5kIHRvIGRvIHRoZSBzYW1lIGZvciBhbnkgc3ViLWpvaW5zLiBUbyB0 aGF0IGVuZCwgdGhlIHJldHVybiB2YWx1ZQorICogaXMgdGhlIHNldCBvZiByZWxpZHMgZm91bmQg YmVuZWF0aCB0aGUgam9pbiwgYnV0IGl0IGlzIGV4cGVjdGVkIHRoYXQKKyAqIHRoZSB0b3BsZXZl bCBjYWxsZXIgd2lsbCBpZ25vcmUgdGhpcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwZ3Bh X3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkJCSAgIHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pCit7CisJQml0bWFwc2V0ICAqYWxs X3JlbGlkcyA9IGJtc19jb3B5KHVqb2luLT5vdXRlci5zY2FuLT5yZWxpZHMpOworCisJLyogSWYg dGhpcyBmYWlscywgd2UgZGlkbid0IHVucm9sbCBwcm9wZXJseS4gKi8KKwlBc3NlcnQodWpvaW4t Pm91dGVyLnVucm9sbGVkX2pvaW4gPT0gTlVMTCk7CisKKwlmb3IgKGludCBrID0gMDsgayA8IHVq b2luLT5uaW5uZXI7ICsraykKKwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZ1am9p bi0+aW5uZXJba107CisJCUJpdG1hcHNldCAgKnJlbGlkczsKKworCQlpZiAobWVtYmVyLT51bnJv bGxlZF9qb2luICE9IE5VTEwpCisJCQlyZWxpZHMgPSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9p bih3YWxrZXIsCisJCQkJCQkJCQkJCQltZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQllbHNlCisJ CXsKKwkJCUFzc2VydChtZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJCQlyZWxpZHMgPSBtZW1iZXIt PnNjYW4tPnJlbGlkczsKKwkJfQorCQl3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1t1am9pbi0+c3Ry YXRlZ3lba11dID0KKwkJCWxhcHBlbmQod2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbdWpvaW4tPnN0 cmF0ZWd5W2tdXSwgcmVsaWRzKTsKKwkJYWxsX3JlbGlkcyA9IGJtc19hZGRfbWVtYmVycyhhbGxf cmVsaWRzLCByZWxpZHMpOworCX0KKworCXJldHVybiBhbGxfcmVsaWRzOworfQorCisvKgorICog QXJyYW5nZSBmb3IgdGhlIGdpdmVuIHBsYW4gbm9kZSB0byBiZSB0cmVhdGVkIGFzIGEgcXVlcnkg ZmVhdHVyZSB3aGVuIHRoZQorICogdHJlZSB3YWxrIHJlYWNoZXMgaXQuCisgKgorICogTWFrZSBz dXJlIHRvIG9ubHkgdXNlIHRoaXMgZm9yIG5vZGVzIHRoYXQgdGhlIHRyZWUgd2FsayBjYW4ndCBo YXZlIHJlYWNoZWQKKyAqIHlldCEKKyAqLwordm9pZAorcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUo cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQlwZ3BhX3FmX3R5cGUgdHlw ZSwgUGxhbiAqcGxhbikKK3sKKwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnFmID0gcGdwYV9hZGRfZmVh dHVyZSh3YWxrZXIsIHR5cGUsIHBsYW4pOworCisJd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVy ZXMgPQorCQlsYXBwZW5kKHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7Cit9CisK Ky8qCisgKiBSZXR1cm4gdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBhc3NvY2lhdGVkIHdp dGggdGhpcyBwbGFuIG5vZGUgSUQuCisgKgorICogVGhlIGxhc3QgZWxpZGVkIG5vZGUgaXMgdGhl IG9uZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiB1cHBlcm1vc3QgaW4gdGhlIHBsYW4KKyAqIHRyZWUg aGFkIGl0IG5vdCBiZWVuIHJlbW92ZWQgZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZy4KKyAqLwor RWxpZGVkTm9kZSAqCitwZ3BhX2xhc3RfZWxpZGVkX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQ bGFuICpwbGFuKQoreworCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlID0gTlVMTDsKKworCWZvcmVh Y2hfbm9kZShFbGlkZWROb2RlLCBuLCBwc3RtdC0+ZWxpZGVkTm9kZXMpCisJeworCQlpZiAobi0+ cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCWVsaWRlZF9ub2RlID0gbjsK Kwl9CisKKwlyZXR1cm4gZWxpZGVkX25vZGU7Cit9CisKKy8qCisgKiBDZXJ0YWluIHBsYW4gbm9k ZXMgY2FuIHJlZmVyIHRvIGEgc2V0IG9mIFJUSXMuIEV4dHJhY3QgYW5kIHJldHVybiB0aGUgc2V0 LgorICovCitCaXRtYXBzZXQgKgorcGdwYV9yZWxpZHMoUGxhbiAqcGxhbikKK3sKKwlpZiAoSXNB KHBsYW4sIFJlc3VsdCkpCisJCXJldHVybiAoKFJlc3VsdCAqKSBwbGFuKS0+cmVsaWRzOworCWVs c2UgaWYgKElzQShwbGFuLCBGb3JlaWduU2NhbikpCisJCXJldHVybiAoKEZvcmVpZ25TY2FuICop IHBsYW4pLT5mc19yZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4sIEFwcGVuZCkpCisJCXJldHVy biAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBNZXJn ZUFwcGVuZCkpCisJCXJldHVybiAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHM7CisK KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEV4dHJhY3QgdGhlIHNjYW5uZWQgUlRJIGZyb20g YSBwbGFuIG5vZGUuCisgKgorICogUmV0dXJucyAwIGlmIHRoZXJlIGlzbid0IG9uZS4KKyAqLwor SW5kZXgKK3BncGFfc2NhbnJlbGlkKFBsYW4gKnBsYW4pCit7CisJc3dpdGNoIChub2RlVGFnKHBs YW4pKQorCXsKKwkJY2FzZSBUX1NlcVNjYW46CisJCWNhc2UgVF9TYW1wbGVTY2FuOgorCQljYXNl IFRfQml0bWFwSGVhcFNjYW46CisJCWNhc2UgVF9UaWRTY2FuOgorCQljYXNlIFRfVGlkUmFuZ2VT Y2FuOgorCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQljYXNlIFRfRnVuY3Rpb25TY2FuOgorCQlj YXNlIFRfVGFibGVGdW5jU2NhbjoKKwkJY2FzZSBUX1ZhbHVlc1NjYW46CisJCWNhc2UgVF9DdGVT Y2FuOgorCQljYXNlIFRfTmFtZWRUdXBsZXN0b3JlU2NhbjoKKwkJY2FzZSBUX1dvcmtUYWJsZVNj YW46CisJCWNhc2UgVF9Gb3JlaWduU2NhbjoKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCWNhc2Ug VF9JbmRleFNjYW46CisJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgorCQkJcmV0dXJuICgoU2NhbiAq KSBwbGFuKS0+c2NhbnJlbGlkOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCisv KgorICogQ29uc3RydWN0IGEgbmV3IEJpdG1hcHNldCBjb250YWluaW5nIG5vbi1SVEVfSk9JTiBt ZW1iZXJzIG9mICdyZWxpZHMnLgorICovCitCaXRtYXBzZXQgKgorcGdwYV9maWx0ZXJfb3V0X2pv aW5fcmVsaWRzKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpydGFibGUpCit7CisJaW50CQkJcnRp ID0gLTE7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVMTDsKKworCXdoaWxlICgocnRpID0gYm1z X25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0 ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9K T0lOKQorCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCBydGkpOworCX0KKworCXJl dHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgYW5k IGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhbGwgcXVlcnkgZmVhdHVyZXMKKyAqIGZvciB0aGlzIHBs YW4uCisgKi8KK3N0YXRpYyBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKgorcGdwYV9hZGRfZmVhdHVyZShw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkgcGdwYV9xZl90eXBlIHR5cGUs IFBsYW4gKnBsYW4pCit7CisJcGdwYV9xdWVyeV9mZWF0dXJlICpxZiA9IHBhbGxvYzBfb2JqZWN0 KHBncGFfcXVlcnlfZmVhdHVyZSk7CisKKwlxZi0+dHlwZSA9IHR5cGU7CisJcWYtPnBsYW4gPSBw bGFuOworCisJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1txZi0+dHlwZV0gPQorCQlsYXBwZW5kKHdh bGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5cGVdLCBxZik7CisKKwlyZXR1cm4gcWY7Cit9CisK Ky8qCisgKiBBZGQgYSBzaW5nbGUgUlRJIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9ydGkoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1 cmVzLCBJbmRleCBydGkpCit7CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwg YWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVy KHFmLT5yZWxpZHMsIHJ0aSk7CisJfQorfQorCisvKgorICogQWRkIGEgc2V0IG9mIFJUSXMgdG8g ZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRk X3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBCaXRtYXBzZXQgKnJlbGlkcykKK3sK Kwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBhY3RpdmVfcXVlcnlfZmVhdHVy ZXMpCisJeworCQlxZi0+cmVsaWRzID0gYm1zX2FkZF9tZW1iZXJzKHFmLT5yZWxpZHMsIHJlbGlk cyk7CisJfQorfQorCisvKgorICogQWRkIFJUSXMgZGlyZWN0bHkgY29udGFpbmVkIGluIGEgcGxh biBub2RlIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUsCisgKiBidXQgZmlsdGVyIG91dCBh bnkgam9pbiBSVElzLCBzaW5jZSBhZHZpY2UgZG9lc24ndCBtZW50aW9uIHRob3NlLgorICovCitz dGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0 dXJlcywgUGxhbiAqcGxhbiwgTGlzdCAqcnRhYmxlKQoreworCUJpdG1hcHNldCAgKnJlbGlkczsK KwlJbmRleAkJcnRpOworCisJaWYgKChyZWxpZHMgPSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVM TCkKKwl7CisJCXJlbGlkcyA9IHBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhyZWxpZHMsIHJ0 YWJsZSk7CisJCXBncGFfcWZfYWRkX3J0aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCByZWxpZHMp OworCX0KKwllbHNlIGlmICgocnRpID0gcGdwYV9zY2FucmVsaWQocGxhbikpICE9IDApCisJCXBn cGFfcWZfYWRkX3J0aShhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHJ0aSk7Cit9CisKKy8qCisgKiBJ ZiB3ZSBnZW5lcmF0ZWQgcGxhbiBhZHZpY2UgdXNpbmcgdGhlIHByb3ZpZGVkIHdhbGtlciBvYmpl Y3QgYW5kIGFycmF5CisgKiBvZiBpZGVudGlmaWVycywgd291bGQgd2UgZ2VuZXJhdGUgdGhlIHNw ZWNpZmllZCB0YWcvdGFyZ2V0IGNvbWJpbmF0aW9uPworICoKKyAqIElmIHllcywgdGhlIHBsYW4g Y29uZm9ybXMgdG8gdGhlIGFkdmljZTsgaWYgbm8sIGl0IGRvZXMgbm90LiBOb3RlIHRoYXQKKyAq IHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciB0aGUgcGxhbm5lciB3YXMgZm9yY2Vk IHRvIGVtaXQgYSBwbGFuCisgKiB0aGF0IGNvbmZvcm1lZCB0byB0aGUgYWR2aWNlIG9yIGp1c3Qg aGFwcGVuZWQgdG8gZG8gc28uCisgKi8KK2Jvb2wKK3BncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSBwZ3BhX2lkZW50aWZpZXIg KnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJ CSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9 IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJQml0bWFwc2V0ICAqcmVsaWRz ID0gTlVMTDsKKworCWlmICh0YWcgPT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwl7CisJCWZvcmVh Y2hfcHRyKHBncGFfdW5yb2xsZWRfam9pbiwgdWpvaW4sIHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xs ZWRfam9pbnMpCisJCXsKKwkJCWlmIChwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXModWpv aW4sIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLCB0YXJnZXQs IHRydWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlJbmRl eAkJcnRpOworCisJCXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJs ZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICAmdGFyZ2V0LT5yaWQpOwor CQlpZiAocnRpID09IDApCisJCQlyZXR1cm4gZmFsc2U7CisJCXJlbGlkcyA9IGJtc19tYWtlX3Np bmdsZXRvbihydGkpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQ R1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJn ZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJSW5kZXgJCXJ0aTsK KworCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklF Uik7CisJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihydGFibGVfbGVu Z3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkgICAmY2hp bGRfdGFyZ2V0LT5yaWQpOworCQkJaWYgKHJ0aSA9PSAwKQorCQkJCXJldHVybiBmYWxzZTsKKwkJ CXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcnRpKTsKKwkJfQorCX0KKworCXN3aXRj aCAodGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19KT0lOX09SREVSOgorCQkJLyogc2hvdWxkIGhh dmUgYmVlbiBoYW5kbGVkIGFib3ZlICovCisJCQlwZ191bnJlYWNoYWJsZSgpOworCQkJYnJlYWs7 CisJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtl cl9maW5kX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fQklUTUFQX0hFQVAsCisJ CQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46 CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQ QV9TQ0FOX0ZPUkVJR04sCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJY2FzZSBQR1BB X1RBR19JTkRFWF9PTkxZX1NDQU46CisJCQl7CisJCQkJcGdwYV9zY2FuICAqc2NhbjsKKworCQkJ CXNjYW4gPSBwZ3BhX3dhbGtlcl9maW5kX3NjYW4od2Fsa2VyLCBQR1BBX1NDQU5fSU5ERVhfT05M WSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCQkJaWYgKHNjYW4gPT0gTlVMTCkKKwkJCQkJcmV0 dXJuIGZhbHNlOworCisJCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2luZGV4X3RhcmdldF9tYXRjaGVz X3BsYW4odGFyZ2V0LT5pdGFyZ2V0LCBzY2FuLT5wbGFuKTsKKwkJCX0KKwkJY2FzZSBQR1BBX1RB R19JTkRFWF9TQ0FOOgorCQkJeworCQkJCXBncGFfc2NhbiAgKnNjYW47CisKKwkJCQlzY2FuID0g cGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwgUEdQQV9TQ0FOX0lOREVYLAorCQkJCQkJCQkJ CQkgcmVsaWRzKTsKKwkJCQlpZiAoc2NhbiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gZmFsc2U7CisK KwkJCQlyZXR1cm4gcGdwYV93YWxrZXJfaW5kZXhfdGFyZ2V0X21hdGNoZXNfcGxhbih0YXJnZXQt Pml0YXJnZXQsIHNjYW4tPnBsYW4pOworCQkJfQorCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJ U0U6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkg UEdQQV9TQ0FOX1BBUlRJVElPTldJU0UsCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJ Y2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3NjYW4o d2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fU0VRLAorCQkJCQkJCQkJCSByZWxpZHMpICE9 IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJf ZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQQV9TQ0FOX1RJRCwKKwkJCQkJCQkJCQkg cmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiBwZ3Bh X3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRI RVIsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJ CQkJCVBHUEFRRl9HQVRIRVJfTUVSR0UsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBH UEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFp bnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFV RSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVF OgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJ CQkJCQkJUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNh c2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pv aW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX0hBU0hfSk9JTiwKKwkJCQkJCQkJCQkJIHJl bGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVy biBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9N RVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BB X1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pv aW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX01FUkdFX0pPSU5fUExBSU4sCisJCQkJCQkJ CQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgor CQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkg SlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJ Y2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01F TU9JWkUsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09Q X1BMQUlOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJ CQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsK KwkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFp bnNfbm9fZ2F0aGVyKHdhbGtlciwgcmVsaWRzKTsKKwl9CisKKwkvKiBzaG91bGQgbm90IGdldCBo ZXJlICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGUgaW5kZXggdGFyZ2V0 IG1hdGNoIHRoZSBQbGFuPworICoKKyAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHdlIGtu b3cgdGhhdCBpdGFyZ2V0IG1hbmRhdGVzIGFuIEluZGV4IFNjYW4gb3IKKyAqIEluZGV4IE9ubHkg U2NhbiBhbmQgdGhpcyBjb3JyZXNwb25kcyB0byB0aGUgdHlwZSBvZiBQbGFuLiBIZXJlLCBvdXIg am9iIGlzCisgKiBqdXN0IHRvIGNoZWNrIHdoZXRoZXIgaXQncyB0aGUgc2FtZSBpbmRleC4KKyAq Lworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2luZGV4X3RhcmdldF9tYXRjaGVzX3BsYW4ocGdw YV9pbmRleF90YXJnZXQgKml0YXJnZXQsIFBsYW4gKnBsYW4pCit7CisJT2lkCQkJaW5kZXhvaWQg PSBJbnZhbGlkT2lkOworCisJLyogUmV0cmlldmUgdGhlIGluZGV4IE9JRCBmcm9tIHRoZSBwbGFu LiAqLworCWlmIChJc0EocGxhbiwgSW5kZXhTY2FuKSkKKwkJaW5kZXhvaWQgPSAoKEluZGV4U2Nh biAqKSBwbGFuKS0+aW5kZXhpZDsKKwllbHNlIGlmIChJc0EocGxhbiwgSW5kZXhPbmx5U2Nhbikp CisJCWluZGV4b2lkID0gKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleGlkOworCWVsc2UK KwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRh ZyhwbGFuKSk7CisKKwkvKiBDaGVjayB3aGV0aGVyIHNjaGVtYSBuYW1lIG1hdGNoZXMsIGlmIHNw ZWNpZmllZCBpbiBpbmRleCB0YXJnZXQuICovCisJaWYgKGl0YXJnZXQtPmluZG5hbWVzcGFjZSAh PSBOVUxMKQorCXsKKwkJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhvaWQp OworCQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChu c3BvaWQpOworCisJCWlmIChzdHJjbXAoaXRhcmdldC0+aW5kbmFtZXNwYWNlLCByZWxuYW1lc3Bh Y2UpICE9IDApCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQ2hlY2sgd2hldGhlciByZWxh dGlvbiBuYW1lIG1hdGNoZXMuICovCisJcmV0dXJuIChzdHJjbXAoaXRhcmdldC0+aW5kbmFtZSwg Z2V0X3JlbF9uYW1lKGluZGV4b2lkKSkgPT0gMCk7Cit9CisKKy8qCisgKiBEb2VzIGFuIHVucm9s bGVkIGpvaW4gbWF0Y2ggdGhlIGpvaW4gb3JkZXIgc3BlY2lmaWVkIGJ5IGFuIGFkdmljZSB0YXJn ZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMocGdw YV91bnJvbGxlZF9qb2luICp1am9pbiwKKwkJCQkJCQkgICBJbmRleCBydGFibGVfbGVuZ3RoLAor CQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJICAgcGdw YV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJICAgYm9vbCB0b3BsZXZlbCkKK3sKKwlp bnQJCQluY2hpbGRyZW4gPSBsaXN0X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKTsKKworCUFzc2Vy dCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisKKwkvKiBBdCB0 b3BsZXZlbCwgd2UgYWxsb3cgYSBwcmVmaXggbWF0Y2guICovCisJaWYgKHRvcGxldmVsKQorCXsK KwkJaWYgKG5jaGlsZHJlbiA+IHVqb2luLT5uaW5uZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOwor CX0KKwllbHNlCisJeworCQlpZiAobmNoaWxkcmVuICE9IHVqb2luLT5uaW5uZXIgKyAxKQorCQkJ cmV0dXJuIGZhbHNlOworCX0KKworCS8qIE91dGVybW9zdCByZWwgbXVzdCBtYXRjaC4gKi8KKwlp ZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIoJnVqb2luLT5vdXRlciwK KwkJCQkJCQkJCQkJICAgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkJCSAgIGxpbml0aWFsKHRhcmdldC0+Y2hpbGRyZW4pKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyogRWFjaCBpbm5lciByZWwgbXVzdCBtYXRjaC4gKi8KKwlmb3IgKGludCBu ID0gMDsgbiA8IG5jaGlsZHJlbiAtIDE7ICsrbikKKwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAq Y2hpbGRfdGFyZ2V0ID0gbGlzdF9udGgodGFyZ2V0LT5jaGlsZHJlbiwgbiArIDEpOworCisJCWlm ICghcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcigmdWpvaW4tPmlubmVyW25d LAorCQkJCQkJCQkJCQkJICAgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50 aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgY2hpbGRfdGFyZ2V0KSkKKwkJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIERvZXMgb25lIG1lbWJlciBvZiBhbiB1 bnJvbGxlZCBqb2luIG1hdGNoIGFuIGFkdmljZSB0YXJnZXQ/CisgKi8KK3N0YXRpYyBib29sCitw Z3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1l bWJlciwKKwkJCQkJCQkJCSAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCSAgcGdwYV9p ZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0 ICp0YXJnZXQpCit7CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCWlmIChtZW1iZXIt PnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwl7CisJCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFf VEFSR0VUX09SREVSRURfTElTVCkKKwkJCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHBncGFfd2Fs a2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhtZW1iZXItPnVucm9sbGVkX2pvaW4sCisJCQkJCQkJCQkJ CSAgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJ CQkJICB0YXJnZXQsCisJCQkJCQkJCQkJCSAgZmFsc2UpOworCX0KKworCUFzc2VydChtZW1iZXIt PnNjYW4gIT0gTlVMTCk7CisJc3dpdGNoICh0YXJnZXQtPnR0eXBlKQorCXsKKwkJY2FzZSBQR1BB X1RBUkdFVF9PUkRFUkVEX0xJU1Q6CisJCQkvKiBDb3VsZCBvbmx5IG1hdGNoIGFuIHVucm9sbGVk IGpvaW4gKi8KKwkJCXJldHVybiBmYWxzZTsKKworCQljYXNlIFBHUEFfVEFSR0VUX1VOT1JERVJF RF9MSVNUOgorCQkJeworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRf dGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQkJCXsKKwkJCQkJSW5kZXgJCXJ0aTsKKworCQkJ CQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAor CQkJCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCQkJICAgJmNoaWxk X3RhcmdldC0+cmlkKTsKKwkJCQkJaWYgKHJ0aSA9PSAwKQorCQkJCQkJcmV0dXJuIGZhbHNlOwor CQkJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aSk7CisJCQkJfQorCQkJCWJy ZWFrOworCQkJfQorCisJCWNhc2UgUEdQQV9UQVJHRVRfSURFTlRJRklFUjoKKwkJCXsKKwkJCQlJ bmRleAkJcnRpOworCisJCQkJcnRpID0gcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIo cnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJ CQkJCQkgICAmdGFyZ2V0LT5yaWQpOworCQkJCWlmIChydGkgPT0gMCkKKwkJCQkJcmV0dXJuIGZh bHNlOworCQkJCXJlbGlkcyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOworCQkJCWJyZWFrOwor CQkJfQorCX0KKworCXJldHVybiBibXNfZXF1YWwobWVtYmVyLT5zY2FuLT5yZWxpZHMsIHJlbGlk cyk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBzY2FuIHdoZXJlIHRoZSB3YWxrZXIgc2F5cyB0aGF0 IHRoZSBnaXZlbiBzY2FuIHN0cmF0ZWd5IHNob3VsZCBiZQorICogdXNlZCBmb3IgdGhlIGdpdmVu IHJlbGlkIHNldCwgaWYgb25lIGV4aXN0cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBwZ3BhX3NjYW4g b2JqZWN0LCBvciBOVUxMIGlmIG5vbmUgd2FzIGZvdW5kLgorICovCitzdGF0aWMgcGdwYV9zY2Fu ICoKK3BncGFfd2Fsa2VyX2ZpbmRfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwKKwkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCSAgQml0bWFwc2V0 ICpyZWxpZHMpCit7CisJTGlzdAkgICAqc2NhbnMgPSB3YWxrZXItPnNjYW5zW3N0cmF0ZWd5XTsK KworCWZvcmVhY2hfcHRyKHBncGFfc2Nhbiwgc2Nhbiwgc2NhbnMpCisJeworCQlpZiAoYm1zX2Vx dWFsKHNjYW4tPnJlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiBzY2FuOworCX0KKworCXJldHVy biBOVUxMOworfQorCisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4g cXVlcnkgZmVhdHVyZSBhcHBsaWVzIHRvIHRoZSBnaXZlbgorICogcmVsaWQgc2V0PworICovCitz dGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJIEJp dG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzID0gd2Fsa2VyLT5x dWVyeV9mZWF0dXJlc1t0eXBlXTsKKworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwg cWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChxZi0+cmVsaWRzLCByZWxp ZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICog RG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiBqb2luIHN0cmF0ZWd5IHNob3VsZCBi ZSB1c2VkIGZvciB0aGUKKyAqIGdpdmVuIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3Bn cGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs CisJCQkJCQkgIHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgQml0bWFwc2V0 ICpyZWxpZHMpCit7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzID0gd2Fsa2VyLT5qb2luX3N0 cmF0ZWdpZXNbc3RyYXRlZ3ldOworCisJZm9yZWFjaF9wdHIoQml0bWFwc2V0LCBqc3JlbGlkcywg am9pbl9zdHJhdGVnaWVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChqc3JlbGlkcywgcmVsaWRzKSkK KwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMg dGhlIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcmVsaWRzIHNob3VsZCBiZSBtYXJrZWQgYXMg Tk9fR0FUSEVSPworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0 aGVyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIEJpdG1hcHNl dCAqcmVsaWRzKQoreworCXJldHVybiBibXNfaXNfc3Vic2V0KHJlbGlkcywgd2Fsa2VyLT5ub19n YXRoZXJfc2NhbnMpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3dhbGtlci5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ODkwZDU1NGRkMwotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaApAQCAtMCwwICsxLDE0 MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV93YWxrZXIuaAorICoJICBNYWlu IGVudHJ5cG9pbnRzIGZvciBhbmFseXppbmcgYSBwbGFuIHRvIGdlbmVyYXRlIGFuIGFkdmljZSBz dHJpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93 YWxrZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfV0FMS0VS X0gKKyNkZWZpbmUgUEdQQV9XQUxLRVJfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNs dWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworLyoKKyAqIFdoZW4g Z2VuZXJhdGluZyBhZHZpY2UsIHdlIHNob3VsZCBlbWl0IGVpdGhlciBTRU1JSk9JTl9VTklRVUUg YWR2aWNlIG9yCisgKiBTRU1JSk9JTl9OT05fVU5JUVVFIGFkdmljZSBmb3IgZWFjaCBzZW1pam9p biBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBjaG9zZQorICogdG8gaW1wbGVtZW50IGl0IGFzIGEg c2VtaWpvaW4gb3Igd2hldGhlciB3ZSBpbnN0ZWFkIGNob3NlIHRvIG1ha2UgdGhlCisgKiBudWxs YWJsZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBwZXJmb3JtIGFuIGlubmVyIGpvaW4uIFdoZW4gdGhl IG1ha2UtdW5pcXVlCisgKiBzdHJhdGVneSBpcyBub3QgY2hvc2VuLCBpdCdzIG5vdCBlYXN5IHRv IHRlbGwgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlCisgKiB3aGV0aGVyIGl0IHdhcyBjb25zaWRl cmVkLiBUaGF0J3MgYXdrd2FyZCwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGVtaXQKKyAqIHVz ZWxlc3MgU0VNSUpPSU5fTk9OX1VOSVFVRSBhZHZpY2Ugd2hlbiB0aGVyZSB3YXMgbm8gZGVjaXNp b24gdG8gYmUgbWFkZS4KKyAqCisgKiBUbyBhdm9pZCB0aGF0LCBkdXJpbmcgcGxhbm5pbmcsIHdl IGNyZWF0ZSBhIHBncGFfc2pfdW5pcXVlX3JlbCBmb3IgZWFjaAorICogcmVsYXRpb24gdGhhdCB3 ZSBjb25zaWRlcmVkIG1ha2luZyB1bmlxdWUgZm9yIHB1cnBvc2VzIG9mIHNlbWlqb2luIHBsYW5u aW5nLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NqX3VuaXF1ZV9yZWwKK3sKKwljaGFyCSAg ICpwbGFuX25hbWU7CisJQml0bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3NqX3VuaXF1ZV9yZWw7 CisKKy8qCisgKiBXZSB1c2UgdGhlIHRlcm0gInF1ZXJ5IGZlYXR1cmUiIHRvIHJlZmVyIHRvIHBs YW4gbm9kZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcKKyAqIGluIHRoZSBmb2xsb3dpbmcgd2F5OiB0 byBnZW5lcmF0ZSBhZHZpY2UsIHdlJ2xsIG5lZWQgdG8ga25vdyB0aGUgc2V0IG9mCisgKiBzYW1l LXN1YnF1ZXJ5LCBub24tam9pbiBSVElzIG9jY3VycmluZyBhdCBvciBiZWxvdyB0aGF0IHBsYW4g bm9kZSwgd2l0aG91dAorICogYWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQgUlRJcy4KKyAq CisgKiBGb3IgZXhhbXBsZSwgR2F0aGVyIG5vZGVzLCBkZXNpZ25hdGVkIGJ5IFBHUEFRRl9HQVRI RVIsIGFuZCBHYXRoZXIgTWVyZ2UKKyAqIG5vZGVzLCBkZXNpZ25hdGVkIGJ5IFBHUEFRRl9HQVRI RVJfTUVSR0UsIGFyZSBxdWVyeSBmZWF0dXJlcywgYmVjYXVzZSB3ZSdsbAorICogd2FudCB0byBh ZG1pdCBzb21lIGtpbmQgb2YgYWR2aWNlIHRoYXQgZGVzY3JpYmVzIHRoZSBwb3J0aW9uIG9mIHRo ZSBwbGFuCisgKiB0cmVlIHRoYXQgYXBwZWFycyBiZW5lYXRoIHRob3NlIG5vZGVzLgorICoKKyAq IEVhY2ggc2VtaWpvaW4gY2FuIGJlIGltcGxlbWVudGVkIGVpdGhlciBieSBkaXJlY3RseSBwZXJm b3JtaW5nIGEgc2VtaWpvaW4sCisgKiBvciBieSBtYWtpbmcgb25lIHNpZGUgdW5pcXVlIGFuZCB0 aGVuIHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbi4gRWl0aGVyIHdheSwKKyAqIHdlIHVzZSBhIHF1 ZXJ5IGZlYXR1cmUgdG8gbm90aWNlIHdoYXQgZGVjaXNpb24gd2FzIG1hZGUsIHNvIHRoYXQgd2Ug Y2FuCisgKiBkZXNjcmliZSBpdCBieSBlbnVtZXJhdGluZyB0aGUgUlRJcyBvbiB0aGF0IHNpZGUg b2YgdGhlIGpvaW4uCisgKgorICogVG8gZWxhYm9yYXRlIG9uIHRoZSAibm8gYWRtaXh0dXJlIG9m IHBhcmVudCBhbmQgY2hpbGQgUlRJcyIgcnVsZSwgaW4gYWxsIG9mCisgKiB0aGVzZSBjYXNlcywg aWYgdGhlIGVudGlyZXR5IG9mIGFuIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBhcHBlYXJzIGJlbmVh dGgKKyAqIHRoZSBxdWVyeSBmZWF0dXJlLCB3ZSBvbmx5IHdhbnQgdG8gbmFtZSB0aGUgcGFyZW50 IHRhYmxlLiBCdXQgaXQncyBhbHNvCisgKiBwb3NzaWJsZSB0byBoYXZlIGNhc2VzIHdoZXJlIHdl IG11c3QgbmFtZSBjaGlsZCB0YWJsZXMuIFRoaXMgaXMgcGFydGljdWxhcmx5CisgKiBsaWtlbHkg dG8gaGFwcGVuIHdoZW4gcGFydGl0aW9ud2lzZSBqb2luIGlzIGluIHVzZSwgYnV0IGNvdWxkIGhh cHBlbiBmb3IKKyAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgZXZlbiB3aXRob3V0IHRoYXQsIGlm IG9uZSBvZiB0aG9zZSBhcHBlYXJzIGJlbG93CisgKiBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQg bm9kZSBmb3IgYSBzaW5nbGUgdGFibGUuCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX3FmX3R5cGUK K3sKKwlQR1BBUUZfR0FUSEVSLAorCVBHUEFRRl9HQVRIRVJfTUVSR0UsCisJUEdQQVFGX1NFTUlK T0lOX05PTl9VTklRVUUsCisJUEdQQVFGX1NFTUlKT0lOX1VOSVFVRQorCS8qIHVwZGF0ZSBOVU1f UEdQQV9RRl9UWVBFUyBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30gcGdwYV9xZl90eXBl OworCisjZGVmaW5lIE5VTV9QR1BBX1FGX1RZUEVTICgoaW50KSBQR1BBUUZfU0VNSUpPSU5fVU5J UVVFICsgMSkKKworLyoKKyAqIEZvciBlYWNoIHF1ZXJ5IGZlYXR1cmUsIHdlIGtlZXAgdHJhY2sg b2YgdGhlIGZlYXR1cmUgdHlwZSBhbmQgdGhlIHNldCBvZgorICogcmVsaWRzIHRoYXQgd2UgZm91 bmQgdW5kZXJuZWF0aCB0aGUgcmVsZXZhbnQgcGxhbiBub2RlLiBTZWUgdGhlIGNvbW1lbnRzCisg KiBvbiBwZ3BhX3FmX3R5cGUsIGFib3ZlLCBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgorICovCit0 eXBlZGVmIHN0cnVjdCBwZ3BhX3F1ZXJ5X2ZlYXR1cmUKK3sKKwlwZ3BhX3FmX3R5cGUgdHlwZTsK KwlQbGFuCSAgICpwbGFuOworCUJpdG1hcHNldCAgKnJlbGlkczsKK30gcGdwYV9xdWVyeV9mZWF0 dXJlOworCisvKgorICogQ29udGV4dCBvYmplY3QgZm9yIHBsYW4gdHJlZSB3YWxrLgorICoKKyAq IHBzdG10IGlzIHRoZSBQbGFubmVkU3RtdCB3ZSdyZSBzdHVkeWluZy4KKyAqCisgKiBzY2FucyBp cyBhbiBhcnJheSBvZiBsaXN0cyBvZiBwZ3BhX3NjYW4gb2JqZWN0cy4gVGhlIGFycmF5IGlzIGlu ZGV4ZWQgYnkKKyAqIHRoZSBzY2FuJ3MgcGdwYV9zY2FuX3N0cmF0ZWd5LgorICoKKyAqIG5vX2dh dGhlcl9zY2FucyBpcyB0aGUgc2V0IG9mIHNjYW4gUlRJcyB0aGF0IGRvIG5vdCBhcHBlYXIgYmVu ZWF0aCBhbnkKKyAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqCisgKiB0b3BsZXZl bF91bnJvbGxlZF9qb2lucyBpcyBhIGxpc3Qgb2YgYWxsIHBncGFfdW5yb2xsZWRfam9pbiBvYmpl Y3RzIHRoYXQKKyAqIGFyZSBub3QgYSBjaGlsZCBvZiBzb21lIG90aGVyIHBncGFfdW5yb2xsZWRf am9pbi4KKyAqCisgKiBqb2luX3N0cmF0ZWd5IGlzIGFuIGFycmF5IG9mIGxpc3RzIG9mIEJpdG1h cHNldCBvYmplY3RzLiBFYWNoIEJpdG1hcHNldAorICogaXMgdGhlIHNldCBvZiByZWxpZHMgdGhh dCBhcHBlYXJzIG9uIHRoZSBpbm5lciBzaWRlIG9mIHNvbWUgam9pbiAoZXhjbHVkaW5nCisgKiBS VElzIGZyb20gcGFydGl0aW9uIGNoaWxkcmVuIGFuZCBzdWJxdWVyaWVzKS4gVGhlIGFycmF5IGlz IGluZGV4ZWQgYnkKKyAqIHBncGFfam9pbl9zdHJhdGVneS4KKyAqCisgKiBxdWVyeV9mZWF0dXJl cyBpcyBhbiBhcnJheSBsaXN0cyBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cywgaW5kZXhl ZAorICogYnkgcGdwYV9xZl90eXBlLgorICoKKyAqIGZ1dHVyZV9xdWVyeV9mZWF0dXJlcyBpcyBv bmx5IHVzZWQgZHVyaW5nIHRoZSBwbGFuIHRyZWUgd2FsayBhbmQgc2hvdWxkCisgKiBiZSBlbXB0 eSB3aGVuIHRoZSB0cmVlIHdhbGsgY29uY2x1ZGVzLiBJdCBpcyBhIGxpc3Qgb2YgcGdwYV9xdWVy eV9mZWF0dXJlCisgKiBvYmplY3RzIGZvciBQbGFuIG5vZGVzIHRoYXQgdGhlIHBsYW4gdHJlZSB3 YWxrIGhhcyBub3QgeWV0IGVuY291bnRlcmVkOworICogd2hlbiBlbmNvdW50ZXJlZCwgdGhleSB3 aWxsIGJlIG1vdmVkIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBxdWVyeSBmZWF0dXJlcworICogdGhh dCBpcyBwcm9wYWdhdGVkIHZpYSB0aGUgY2FsbCBzdGFjay4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0Cit7CisJUGxhbm5lZFN0bXQgKnBzdG10OworCUxpc3QJ ICAgKnNjYW5zW05VTV9QR1BBX1NDQU5fU1RSQVRFR1ldOworCUJpdG1hcHNldCAgKm5vX2dhdGhl cl9zY2FuczsKKwlMaXN0CSAgICp0b3BsZXZlbF91bnJvbGxlZF9qb2luczsKKwlMaXN0CSAgICpq b2luX3N0cmF0ZWdpZXNbTlVNX1BHUEFfSk9JTl9TVFJBVEVHWV07CisJTGlzdAkgICAqcXVlcnlf ZmVhdHVyZXNbTlVNX1BHUEFfUUZfVFlQRVNdOworCUxpc3QJICAgKmZ1dHVyZV9xdWVyeV9mZWF0 dXJlczsKK30gcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0OworCitleHRlcm4gdm9pZCBwZ3BhX3Bs YW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFu bmVkU3RtdCAqcHN0bXQsCisJCQkJCQkJIExpc3QgKnNqX3VuaXF1ZV9yZWxzKTsKKworZXh0ZXJu IHZvaWQgcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3 YWxrZXIsCisJCQkJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCVBsYW4gKnBsYW4p OworCitleHRlcm4gRWxpZGVkTm9kZSAqcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBsYW5uZWRTdG10 ICpwc3RtdCwgUGxhbiAqcGxhbik7CitleHRlcm4gQml0bWFwc2V0ICpwZ3BhX3JlbGlkcyhQbGFu ICpwbGFuKTsKK2V4dGVybiBJbmRleCBwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKTsKK2V4dGVy biBCaXRtYXBzZXQgKnBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlk cywgTGlzdCAqcnRhYmxlKTsKKworZXh0ZXJuIGJvb2wgcGdwYV93YWxrZXJfd291bGRfYWR2aXNl KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJIHBncGFfaWRlbnRp ZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkgcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFn LAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uNzc2NjY2YmYxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCkBAIC0wLDAgKzEsODYgQEAKK0xPQUQgJ3BnX3BsYW5f YWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMTsKK1NFVCBw YXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKK1NF VCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9x dWVyeSA9IG9mZjsKKworQ1JFQVRFIFRBQkxFIGd0X2RpbSAoaWQgc2VyaWFsIHByaW1hcnkga2V5 LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQg SU5UTyBndF9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZGltOworCitDUkVBVEUgVEFCTEUgZ3Rf ZmFjdCAoCisJaWQgaW50IG5vdCBudWxsLAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVy ZW5jZXMgZ3RfZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gZ3RfZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZmFjdDsKKworLS0gQnkgZGVmYXVs dCwgd2UgZXhwZWN0IEdhdGhlciBNZXJnZSB3aXRoIGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBK T0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworCistLSBGb3Jj ZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9mIGJvdGggcmVsYXRpb25zIHRvZ2V0aGVyLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBk KSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0 X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9J TiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKwor LS0gRm9yY2UgYSBzZXBhcmF0ZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9wZXJhdGlvbiBmb3Ig ZWFjaCByZWxhdGlvbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXJfbWVyZ2UoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhl cihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5p ZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChkIGQvZC5kKSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2Zh Y3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09N TUlUOworCistLSBGb3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9u IGJ1dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGQpIG5vX2dhdGhlcihmKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpP SU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmKSBub19nYXRoZXIoZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lO IGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0g Rm9yY2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0g Q2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhvdXQgdGhlIE9SREVSIEJZIGNsYXVzZSwgYnV0 IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQp KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3Rf ZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBU ZXN0IGNvbmZsaWN0aW5nIGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQg T04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi41ZTE2ZTU0ZWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCkBAIC0wLDAgKzEsMTQ1IEBACitMT0FEICdwZ19w bGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisK K0NSRUFURSBUQUJMRSBqb19kaW0xIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQs IHZhbDEgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIGpvX2RpbTEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4 dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsK K1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTE7CitDUkVBVEUgVEFCTEUgam9fZGltMiAoaWQgaW50ZWdl ciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0yIChpZCwgZGltMiwgdmFsMikKKwlT RUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMjsKKworQ1JF QVRFIFRBQkxFIGpvX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0xX2lkIGludGVn ZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0xIChpZCksCisJZGltMl9pZCBpbnRlZ2VyIG5v dCBudWxsIHJlZmVyZW5jZXMgam9fZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2ZhY3QKKwlTRUxFQ1QgZywgKGclMTAwKSsxLCAo ZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFla RSBqb19mYWN0OworCistLSBXZSBleHBlY3QgdG8gam9pbiB0byBkMiBmaXJzdCBhbmQgdGhlbiBk MSwgc2luY2UgdGhlIGNvbmRpdGlvbiBvbiBkMgorLS0gaXMgbW9yZSBzZWxlY3RpdmUuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlM RUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19k aW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAx OworCistLSBGb3JjZSBhIGZldyBkaWZmZXJlbnQgam9pbiBvcmRlcnMuIFNvbWUgb2YgdGhlc2Ug YXJlIHZlcnkgaW5lZmZpY2llbnQsCistLSBidXQgdGhlIHBsYW5uZXIgY29uc2lkZXJzIHRoZW0g YWxsIHZpYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdq b2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9p ZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlX SEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04g Zi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBk Mi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBmIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgKGQxIGQyKSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBK T0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIHtkMSBkMn0pJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3Qg ZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lO IGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFs MiA9IDE7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgam9pbiBvcmRlciBieSBtZW50aW9uaW5nIGp1 c3QgYSBwcmVmaXggb2YgdGhlIGpvaW4gbGlzdC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBk MSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9f ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYu ZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOwor CistLSBqb19mYWN0IGlzIG5vdCBwYXJ0aXRpb25lZCwgYnV0IGxldCdzIHRyeSBwcmV0ZW5kaW5n IHRoYXQgaXQgaXMgYW5kCistLSB2ZXJpZnlpbmcgdGhhdCB0aGUgYWR2aWNlIGRvZXMgbm90IGFw cGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZi9kMSBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0g ZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJF IHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihmL2QxIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitDT01NSVQ7CisKKy0tIFRoZSB1 bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMgcXVlcnkgaXMgaW50ZW5kZWQgdG8gcHJldmVudCB0 aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSByZWR1Y2luZyB0aGUgRlVMTCBKT0lOIHRvIHNvbWUg b3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdlCistLSBjYW4gdGVzdCB3aGF0IGhhcHBlbnMgd2l0 aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBiZSByZW9yZGVyZWQuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAo am9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCAr IDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisKKy0tIFdl IHNob3VsZCBub3QgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEg Zmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQgaXMgbm90IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdl IHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBwbGFubmVyCistLSB0byBtYWtlIGVpdGhlciBk MiBvciBmIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2Zh Y3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQor CU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBK T0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQy LmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiBmIGQxKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQx CisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElT IE5VTEw7CitDT01NSVQ7CisKKy0tIFR3byBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgc2hvdWxk IGNvbmZsaWN0LiBJbiB0aGUgc2Vjb25kIGNhc2UsCistLSB0aGUgY29uZmxpY3QgaXMgaW1wbGlj aXQ6IGlmIGQxIGlzIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9pbiBvZiBhbnkKKy0tIHR5cGUs IGl0IGNhbm5vdCBhbHNvIGJlIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZikgam9pbl9vcmRlcihkMSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBk MQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJf aWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJ UyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQx KSBoYXNoX2pvaW4oZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGlt MV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmVkZDVjNGMwZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKQEAgLTAsMCArMSw4NCBAQAorTE9BRCAncGdf cGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOwor CitDUkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9k aW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw KSBnOworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07CisKK0NSRUFURSBUQUJMRSBqb2luX2ZhY3Qg KAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVu Y2VzIGpvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gam9pbl9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggam9pbl9mYWN0X2RpbV9pZCBPTiBqb2lu X2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFlaRSBqb2luX2ZhY3Q7CisKKy0tIFdlIGV4cGVj dCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRo IGpvaW5fZGltIGFzIHRoZSBpbm5lciB0YWJsZS4KKy0tIEFsbCBvZiB0aGVzZSBzaG91bGQgd29y ayBleGNlcHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJQUxJWkU7IHRoYXQgd2lsbAorLS0gZmFpbCwg YmVjYXVzZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0IGpvaW5fZGltIChpZCkgaXMgdW5pcXVlLCBh bmQgd2lsbAorLS0gcmVmdXNlIHRvIGFkZCBtYXJrL3Jlc3RvcmUgb3ZlcmhlYWQuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGQpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9P UF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0la RShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0tIE5vdyB0cnkg Zm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhlIGlu bmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2lu X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVS R0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBOb24td29ya2luZyBjYXNl cy4gV2UgY2FuJ3QgZm9yY2UgYSBmb3JlaWduIGpvaW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsCist LSBiZWNhdXNlIHRoZXkgYXJlbid0IGZvcmVpZ24gdGFibGVzLiBXZSBhbHNvIGNhbid0IHVzZSB0 d28gZGlmZmVyZW50CistLSBzdHJhdGVnaWVzIG9uIHRoZSBzYW1lIHRhYmxlLCBub3IgY2FuIHdl IHB1dCBib3RoIHRhYmxlcyBvbiB0aGUgaW5uZXIKKy0tIHNpZGUgb2YgdGhlIHNhbWUgam9pbi4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4o KGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmKSBORVNURURf TE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExB SU4oZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1J VDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uu c3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM1MTQ1NmRiYmI1Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwKQEAg LTAsMCArMSw5OSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93 b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSB0 cnVlOworCitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRl eHQsIHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0 MWEgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFiIFBBUlRJVElP TiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJT04gT0YgcHQx IEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1Qg ZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQxOworCitDUkVBVEUgVEFCTEUg cHQyIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVBBUlRJ VElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MmEgUEFSVElUSU9OIE9GIHB0MiBG T1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBG Uk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitDUkVBVEUgVEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMjAw MSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gcHQyIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgb3RoZXIgdGV4dCAn IHx8IGcsIChnICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDAsMikgZzsK K1ZBQ1VVTSBBTkFMWVpFIHB0MjsKKworQ1JFQVRFIFRBQkxFIHB0MyAoaWQgaW50ZWdlciBwcmlt YXJ5IGtleSwgZGltMyB0ZXh0LCB2YWwzIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsK K0NSRUFURSBUQUJMRSBwdDNhIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxKSB0 byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFC TEUgcHQzYiBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0M2Mg UEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MyAoaWQsIGRpbTMs IHZhbDMpCisJU0VMRUNUIGcsICdhIHRoaXJkIHJhbmRvbSB0ZXh0ICcgfHwgZywgKGcgJSA3KSAr IDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCwzKSBnOworVkFDVVVNIEFOQUxZWkUg cHQzOworCitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwg ZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMg RlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor Q1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9S IFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlTRUxF Q1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKKworRVhQ TEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0 MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEg PSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisKKy0tIFN1cHByZXNzIHBhcnRpdGlvbndp c2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQTEFJ TiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBX SEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAx IEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJ Q0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQg PSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0g MSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNlLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0Uo KHB0MSBwdDIpIChwdDEgcHQzKSknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0 Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7 CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9ud2lzZSBqb2luIHdpdGggYSBt aXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOworRVhQTEFJTiAoUExBTl9BRFZJ Q0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1pc21hdGNoIFdIRVJFIHB0MS5p ZCA9IHB0bWlzbWF0Y2guaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEg cGFydGljdWxhciBicmFuY2ggb2YgdGhlIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoCistLSBhbmQg d2l0aG91dCBtZW50aW9uaW5nIHRoZSBzY2hlbWEgbmFtZS4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVi bGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihwdDMv cHQzYSBwdDIvcHQyYSBwdDEvcHQxYSknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5E IHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9 IDE7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wcmVw YXJlZC5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wcmVwYXJlZC5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNlYzMwZWVkZWU1Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcHJlcGFyZWQuc3FsCkBAIC0wLDAg KzEsMzcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIHB0YWIgKGlkIGludGVnZXIsIHZhbCB0 ZXh0KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CisKK1NFVCBwZ19wbGFuX2Fk dmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSBmYWxzZTsKKworLS0gTm90IHByZXBh cmVkLCBzbyBhZHZpY2Ugc2hvdWxkIGJlIGdlbmVyYXRlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIAorU0VMRUNUICogRlJPTSBwdGFiOworCistLSBQcmVwYXJlZCwgc28gYWR2 aWNlIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkLgorUFJFUEFSRSBwdDEgQVMgU0VMRUNUICogRlJP TSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDE7CisK K1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlOwor CistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNv IHNob3VsZCBzaG93IGFkdmljZS4KK1BSRVBBUkUgcHQyIEFTIFNFTEVDVCAqIEZST00gcHRhYjsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNVVEUgcHQyOworCistLSBOb3Qg cHJlcGFyZWQsIHNvIGZlZWRiYWNrIHNob3VsZCBiZSBnZW5lcmF0ZWQuCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7CitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHB0YWIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgCitT RUxFQ1QgKiBGUk9NIHB0YWI7CisKKy0tIFByZXBhcmVkLCBzbyBhZHZpY2Ugc2hvdWxkIG5vdCBi ZSBnZW5lcmF0ZWQuCitQUkVQQVJFIHB0MyBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7CitFWFBMQUlO IChDT1NUUyBPRkYpIEVYRUNVVEUgcHQxOworCitTRVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0 b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZTsKKworLS0gUHJlcGFyZWQsIGJ1dCBhbHdheXNfc3Rv cmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlLCBzbyBzaG91bGQgc2hvdyBmZWVkYmFjay4KK1BSRVBB UkUgcHQ0IEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIEVYRUNVVEUgcHQyOworCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZmM0OTRjN2Q4ZQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCkBAIC0wLDAgKzEs MTk1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCByYW5kb21fcGFn ZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVw bGVfY29zdCA9IDA7CisKK0NSRUFURSBUQUJMRSBzY2FuX3RhYmxlIChhIGludCBwcmltYXJ5IGtl eSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4dCAnIHx8IGcgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNjYW5fdGFibGVfYiBPTiBzY2Fu X3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZWkUgc2Nhbl90YWJsZTsKKworLS0g U2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGU7CisKKy0tIEluZGV4IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKworLS0g SW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg YSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisKKy0tIEJpdG1hcCBoZWFwIHNjYW4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQor CVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworCistLSBUSUQgc2NhbgorRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAn KDAsMSknOworCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5E IGN0aWQgPCAnKDIsMSknOworCistLSBUcnkgZm9yY2luZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJp ZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2FudGVkIHRvIHVzZSBhbnl3YXkuIFRo aXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01NSVQ7CisK Ky0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3Ro ZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBv ciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29y cmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNl CistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5f dGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4o c2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlOworQ09NTUlUOworCistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXgg dXNlLiBUaGlzIHNob3VsZCBub3cgc3VjY2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBC SVRNQVBfSEVBUF9TQ0FOLCBidXQgdGhlIElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQg YmVjYXVzZSB0aGUKKy0tIHF1ZXJ5IGZldGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhl IGluZGV4LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAw OworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBsb29rdXAgdG8gdXNl IGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0IHRvIHVzZSBhbiBp bmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBvciBhIFRJRCBzY2Fu IChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9u bHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1c2Ug b2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor Q09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiBp biBwbGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBidXQgYSBwbGFpbiBpbmRleCBzY2Fu IG9uIGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ ICdzb21lIHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsK KworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRo YW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0 aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSkn OworQ09NTUlUOworCistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mgd2l0aCBpbmRleCBz Y2Fucy4KK0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVudGlvbiB0aGUgc2No ZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gQnV0IG5v dCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CistLSBJdCdzIE9LIHRvIHJlcGVhdCB0aGUgc2FtZSBhZHZpY2Uu CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBh ID0gMTsKKy0tIEJ1dCBpdCBkb2Vzbid0IHdvcmsgaWYgdGhlIGluZGV4IHRhcmdldCBpcyBldmVu IG5vdGlvbmFsbHkgZGlmZmVyZW50LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFibGUgcHVibGlj LnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBUZXN0IGFz c29ydGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlcikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlcikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOwor CistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0 aGUgc2FtZSBhbGlhcy4KK0JFR0lOOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3Rh YmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMu YTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3Nl cmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExF RlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNj YW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBn ID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBT RVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9O IGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitDT01N SVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEgc3Vi cXVlcnkuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworQkVHSU47CistLSBTaG91bGQg bm90IG1hdGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1hdGNoIGZpcnN0 IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNob3VsZCBtYXRjaCBz ZWNvbmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9 IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDAp OworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2VtaWpv aW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YTRhZTUyZDFkOQotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NlbWlqb2luLnNxbApAQCAtMCwwICsx LDExOCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgc2pfd2lkZSAoCisJaWQgaW50ZWdlciBw cmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIsCisJcGFkZGluZyB0ZXh0IHN0b3JhZ2UgcGxhaW4K KykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2pfd2lk ZQorCVNFTEVDVCBnLCBnJTEwKzEsIHJlcGVhdCgnICcsIDMwMCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal93aWRlICh2YWwxKTsKK1ZBQ1VVTSBB TkFMWVpFIHNqX3dpZGU7CisKK0NSRUFURSBUQUJMRSBzal9uYXJyb3cgKAorCWlkIGludGVnZXIg cHJpbWFyeSBrZXksCisJdmFsMSBpbnRlZ2VyCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNqX25hcnJvdworCVNFTEVDVCBnLCBnJTEwKzEgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal9uYXJyb3cgKHZh bDEpOworVkFDVVVNIEFOQUxZWkUgc2pfbmFycm93OworCistLSBXZSBleHBlY3QgdGhpcyB0byBt YWtlIHRoZSBWQUxVRVMgbGlzdCB1bmlxdWUgYW5kIHVzZSBpbmRleCBsb29rdXBzIHRvCistLSBm aW5kIHRoZSByb3dzIGluIHNqX3dpZGUsIHNvIGFzIHRvIGF2b2lkIGEgZnVsbCBzY2FuIG9mIHNq X3dpZGUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBz al93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywg MyksICg0LCA0KSwgKDUsIDUpKTsKKworLS0gSWYgd2UgYXNrIGZvciBhIHVuaXF1ZSBzZW1pam9p biwgd2Ugc2hvdWxkIGdldCB0aGUgc2FtZSBwbGFuIGFzIHdpdGgKKy0tIG5vIGFkdmljZS4gSWYg d2UgYXNrIGZvciBhIG5vbi11bmlxdWUgc2VtaWpvaW4sIHdlIHNob3VsZCBzZWUgYSBTZW1pCist LSBKb2luIG9wZXJhdGlvbiBpbiB0aGUgcGxhbiB0cmVlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJV0hF UkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwg KDUsIDUpKTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9u X3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAx KSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKK0NPTU1JVDsKKworLS0gQmVjYXVz ZSB0aGlzIHRhYmxlIGlzIG5hcnJvd2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSwgYSBzZXF1ZW50 aWFsIHNjYW4KKy0tIGlzIGxlc3MgZXhwZW5zaXZlLCBhbmQgd2UgY2hvb3NlIGEgc3RyYWlnaHRm b3J3YXJkIFNlbWkgSm9pbiBwbGFuIGJ5CistLSBkZWZhdWx0LiAoTm90ZSB0aGF0IHRoaXMgaXMg YWxzbyB2ZXJ5IHNlbnNpdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBJTgorLS0gbGlzdCwgd2hp Y2ggYWZmZWN0cyBob3cgbWFueSBpbmRleCBsb29rdXBzIHRoZSBhbHRlcm5hdGl2ZSBwbGFuIHdp bGwgbmVlZC4pCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiks ICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworCistLSBIZXJlLCB3ZSBleHBlY3QgYWR2aXNpbmcg YSB1bmlxdWUgc2VtaWpvaW4gdG8gc3dpdGggdG8gdGhlIHNhbWUgcGxhbiB0aGF0CistLSB3ZSBn b3Qgd2l0aCBzal93aWRlLCBhbmQgYWR2aXNpbmcgYSBub24tdW5pcXVlIHNlbWlqb2luIHNob3Vs ZCBub3QgY2hhbmdlCistLSB0aGUgcGxhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlk LCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUp KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1 ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAo MiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworQ09NTUlUOworCistLSBJbiB0aGUgYWJv dmUgZXhhbXBsZSwgd2UgbWFkZSB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUgam9pbiB1bmlxdWUsIGJ1 dCBoZXJlLAorLS0gd2Ugc2hvdWxkIG1ha2UgdGhlIGlubmVyIHNpZGUgdW5pcXVlLgorRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsK KworLS0gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgYSBwbGFuIHdpdGggb3Igd2l0aG91dCB0 aGUgbWFrZS11bmlxdWUgc3RyYXRlZ3ksCistLSB3aXRoIGVpdGhlciBzaWRlIGFzIHRoZSBkcml2 aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3Nl bWlqb2luX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBn IGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93 KSBqb2luX29yZGVyKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcg aW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpIGpvaW5fb3JkZXIoc2pf bmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEg ZnJvbSBzal9uYXJyb3cpOworQ09NTUlUOworCistLSBIb3dldmVyLCBtZW50aW9uaW5nIHRoZSB3 cm9uZyBzaWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQgaW4gYW4gYWR2aWNlCistLSBmYWls dXJlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2lu X3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZh bDEgZnJvbSBzal9uYXJyb3cpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdz ZW1pam9pbl9ub25fdW5pcXVlKGcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGlu IChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitDT01NSVQ7CisKKy0tIFRlc3QgY29uZmxp Y3RpbmcgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpIHNlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBz al9uYXJyb3cpOworQ09NTUlUOworCistLSBUcnkgYXBwbHlpbmcgU0VNSUpPSU5fVU5JUVVFKCkg dG8gYSBub24tc2VtaWpvaW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnc2VtaWpvaW5fdW5pcXVlKGcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcsIHNqX25hcnJvdyBz IFdIRVJFIGcgPSBzLnZhbDE7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9zeW50YXguc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTZhNWQ1NGUyYjUK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3Fs CkBAIC0wLDAgKzEsNjggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKKworLS0gQW4gZW1wdHkg c3RyaW5nIGlzIGFsbG93ZWQuIEVtcHR5IHRhcmdldCBsaXN0cyBhcmUgYWxsb3dlZCBmb3IgbW9z dCBhZHZpY2UKKy0tIHRhZ3MsIGJ1dCBub3QgZm9yIEpPSU5fT1JERVIuICJTdXBwbGllZCBQbGFu IEFkdmljZSIgc2hvdWxkIGJlIG9taXR0ZWQgaW4KKy0tIHRleHQgZm9ybWF0IHdoZW4gdGhlcmUg aXMgbm8gYWN0dWFsIGFkdmljZSwgYnV0IG5vdCBpbiBub24tdGV4dCBmb3JtYXQuCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigpJzsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X1BMQUlOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBGT1JNQVQgSlNPTikgU0VMRUNUIDE7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoKSc7CisKKy0tIFRlc3QgYXNz b3J0ZWQgdmFyaWF0aW9ucyBpbiBjYXBpdGFsaXphdGlvbiwgd2hpdGVzcGFjZSwgYW5kIHdoaWNo IHBhcnRzIG9mCistLSB0aGUgcmVsYXRpb24gaWRlbnRpZmllciBhcmUgaW5jbHVkZWQuIFRoZXNl IHNob3VsZCBhbGwgd29yay4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o eCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnc2VxX3NjYW4oeEB5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfc2Nhbih4IzIpJzsKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO ICh4L3kpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJ4 IiMyLyJ5Ii4ieiJAInQiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworCistLSBT eW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFVRU5USUFMX1ND QU4oeCknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTic7CitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKCInOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TigiIiknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiYSInOworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigjJzsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnKCknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcxMjMnOworCist LSBUYWdzIGxpa2UgU0VRX1NDQU4gYW5kIE5PX0dBVEhFUiBkb24ndCBhbGxvdyBzdWJsaXN0cyBh dCBhbGw7IG90aGVyIHRhZ3MsCistLSBleGNlcHQgZm9yIEpPSU5fT1JERVIsIGFsbG93IGF0IG1v c3Qgb25lIGxldmVsIG9mIHN1Ymxpc3QuIEhlbmNlLCB0aGVzZQorLS0gZXhhbXBsZXMgc2hvdWxk IGVycm9yIG91dC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKHgpKSc7 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0dBVEhFUigoKHgpKSknOworCistLSBMZWdh bCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyoqLyc7CitFWFBMQUlO IChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNI X0pPSU4oXykvKioqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTigvKngqL3kpJzsKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g Jy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkvLyp4Ki96KSc7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAxOworCistLSBVbnRlcm1pbmF0ZWQgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJy8qJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRF UigiZk9PIikgLyogb29wcyc7CisKKy0tIE5lc3RlZCBjb21tZW50cyBhcmUgbm90IHN1cHBvcnRl ZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFuZAorLS0gdGhlIHNlY29uZCBpcyBu b3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyovJzsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyogc3R1ZmYg Ki8qLyc7CisKKy0tIEZvcmVpZ24gam9pbiByZXF1aXJlcyBtdWx0aXBsZSByZWxhdGlvbiBpZGVu dGlmaWVycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKGEpJzsK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChhKSknOwpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb250cmliLnNn bWwKaW5kZXggMjRiNzA2YjI5YWQuLmJkZDQ4NjVmNTNmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvY29udHJpYi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKQEAgLTE1Niw2 ICsxNTYsNyBAQCBDUkVBVEUgRVhURU5TSU9OIDxyZXBsYWNlYWJsZT5leHRlbnNpb25fbmFtZTwv cmVwbGFjZWFibGU+OwogICZwZ2ZyZWVzcGFjZW1hcDsKICAmcGdsb2dpY2FsaW5zcGVjdDsKICAm cGdvdmVyZXhwbGFpbjsKKyAmcGdwbGFuYWR2aWNlOwogICZwZ3ByZXdhcm07CiAgJnBncm93bG9j a3M7CiAgJnBnc3RhdHN0YXRlbWVudHM7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZmlsZWxp c3Quc2dtbCBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCmluZGV4IGFjNjZmY2JkYjU3Li5k OTBiNDMzOGQyYSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKQEAgLTE0OSw2ICsxNDksNyBAQAogPCFFTlRJVFkg cGdmcmVlc3BhY2VtYXAgIFNZU1RFTSAicGdmcmVlc3BhY2VtYXAuc2dtbCI+CiA8IUVOVElUWSBw Z2xvZ2ljYWxpbnNwZWN0ICBTWVNURU0gInBnbG9naWNhbGluc3BlY3Quc2dtbCI+CiA8IUVOVElU WSBwZ292ZXJleHBsYWluICAgU1lTVEVNICJwZ292ZXJleHBsYWluLnNnbWwiPgorPCFFTlRJVFkg cGdwbGFuYWR2aWNlICAgIFNZU1RFTSAicGdwbGFuYWR2aWNlLnNnbWwiPgogPCFFTlRJVFkgcGdw cmV3YXJtICAgICAgIFNZU1RFTSAicGdwcmV3YXJtLnNnbWwiPgogPCFFTlRJVFkgcGdyb3dsb2Nr cyAgICAgIFNZU1RFTSAicGdyb3dsb2Nrcy5zZ21sIj4KIDwhRU5USVRZIHBnc3RhdHN0YXRlbWVu dHMgU1lTVEVNICJwZ3N0YXRzdGF0ZW1lbnRzLnNnbWwiPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3BncGxhbmFkdmljZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MTdiYWZhMjFjNgotLS0gL2Rl di9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbApAQCAtMCwwICsxLDgx MyBAQAorPCEtLSBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwgLS0+CisKKzxzZWN0MSBp ZD0icGdwbGFuYWR2aWNlIiB4cmVmbGFiZWw9InBnX3BsYW5fYWR2aWNlIj4KKyA8dGl0bGU+cGdf cGxhbl9hZHZpY2UgJm1kYXNoOyBoZWxwIHRoZSBwbGFubmVyIGdldCB0aGUgcmlnaHQgcGxhbjwv dGl0bGU+CisKKyA8aW5kZXh0ZXJtIHpvbmU9InBncGxhbmFkdmljZSI+CisgIDxwcmltYXJ5PnBn X3BsYW5fYWR2aWNlPC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCisgPHBhcmE+CisgIFRoZSA8 ZmlsZW5hbWU+cGdfcGxhbl9hZHZpY2U8L2ZpbGVuYW1lPiBtb2R1bGUgYWxsb3dzIGtleSBwbGFu bmVyIGRlY2lzaW9ucworICB0byBiZSBkZXNjcmliZWQsIHJlcHJvZHVjZWQsIGFuZCBhbHRlcmVk IHVzaW5nIGEgc3BlY2lhbC1wdXJwb3NlICJwbGFuCisgIGFkdmljZSIgbWluaS1sYW5ndWFnZS4g SXQgaXMgaW50ZW5kZWQgdG8gYWxsb3cgc3RhYmlsaXphdGlvbiBvZiBwbGFuIGNob2ljZXMKKyAg dGhhdCB0aGUgdXNlciBiZWxpZXZlcyB0byBiZSBnb29kLCBhcyB3ZWxsIGFzIGV4cGVyaW1lbnRh dGlvbiB3aXRoIHBsYW5zIHRoYXQKKyAgdGhlIHBsYW5uZXIgYmVsaWV2ZXMgdG8gYmUgbm9uLW9w dGltYWwuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIE5vdGUgdGhhdCwgc2luY2UgdGhlIHBsYW5u ZXIgb2Z0ZW4gbWFrZXMgZ29vZCBkZWNpc2lvbnMsIG92ZXJyaWRpbmcgaXRzCisgIGp1ZGdlbWVu dCBjYW4gZWFzaWx5IGJhY2tmaXJlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGRpc3RyaWJ1dGlvbiBv ZiB0aGUKKyAgdW5kZXJseWluZyBkYXRhIGNoYW5nZXMsIHRoZSBwbGFubmVyIG5vcm1hbGx5IGhh cyB0aGUgb3B0aW9uIHRvIGFkanVzdCB0aGUKKyAgcGxhbiBpbiBhbiBhdHRlbXB0IHRvIHByZXNl cnZlIGdvb2QgcGVyZm9ybWFuY2UuIElmIHRoZSBwbGFuIGFkdmljZSBwcmV2ZW50cworICB0aGlz LCBhIHZlcnkgcG9vciBwbGFuIG1heSBiZSBjaG9zZW4uIEl0IGlzIGltcG9ydGFudCB0byB1c2Ug cGxhbiBhZHZpY2UKKyAgb25seSB3aGVuIHRoZSByaXNrcyBvZiBjb25zdHJhaW5pbmcgdGhlIHBs YW5uZXIncyBjaG9pY2VzIGFyZSBvdXR3ZWlnaGVkIGJ5CisgIHRoZSBiZW5lZml0cy4KKyA8L3Bh cmE+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1nZXR0aW5nLXN0YXJ0ZWQiPgorICA8dGl0 bGU+R2V0dGluZyBTdGFydGVkPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEluIG9yZGVyIHRvIHVz ZSB0aGlzIG1vZHVsZSwgdGhlIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBtb2R1 bGUKKyAgIG11c3QgYmUgbG9hZGVkLiBZb3UgY2FuIGRvIHRoaXMgb24gYSBzeXN0ZW0td2lkZSBi YXNpcyBieSBhZGRpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB0bwor ICAgPHhyZWYgbGlua2VuZD0iZ3VjLXNoYXJlZC1wcmVsb2FkLWxpYnJhcmllcyIvPiBhbmQgcmVz dGFydGluZyB0aGUKKyAgIHNlcnZlciwgb3IgYnkgYWRkaW5nIGl0IHRvCisgICA8eHJlZiBsaW5r ZW5kPSJndWMtc2Vzc2lvbi1wcmVsb2FkLWxpYnJhcmllcyIvPiBhbmQgc3RhcnRpbmcgYSBuZXcg c2Vzc2lvbiwKKyAgIG9yIGJ5IGxvYWRpbmcgaXQgaW50byBhbiBpbmRpdmlkdWFsIHNlc3Npb24g dXNpbmcgdGhlCisgICA8bGluayBsaW5rZW5kPSJzcWwtbG9hZCI+PGxpdGVyYWw+TE9BRDwvbGl0 ZXJhbD48L2xpbms+IGNvbW1hbmQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIE9uY2UgdGhl IDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBtb2R1bGUgaXMgbG9hZGVkLAorICAg PGxpbmsgbGlua2VuZD0ic3FsLWV4cGxhaW4iPjxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+PC9s aW5rPiB3aWxsIHN1cHBvcnQKKyAgIGEgPGxpdGVyYWw+UExBTl9BRFZJQ0U8L2xpdGVyYWw+IG9w dGlvbi4gWW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc2VlCisgICBhIHBsYW4gYWR2aWNlIHN0 cmluZyBmb3IgdGhlIGNob3NlbiBwbGFuLiBGb3IgZXhhbXBsZToKKyAgPC9wYXJhPgorCis8cHJv Z3JhbWxpc3Rpbmc+CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorICAgICAgICBT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisg ICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9pbl9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRI RVIoZiBkKQorPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIEluIHRoaXMgZXhhbXBs ZSwgdGhlIHVzZXIgaGFzIG5vdCBzcGVjaWZpZWQgYW55IGFkdmljZTsgaW5zdGVhZCwgdGhlCisg ICBwbGFubmVyIGhhcyBiZWVuIHBlcm1pdHRlZCB0byBtYWtlIHdoYXRldmVyIGRlY2lzaW9ucyBp dCB0aGlua3MgYmVzdCwgYW5kCisgICB0aG9zZSBkZWNpc2lvbnMgYXJlIG1lbW9yaWFsaXplZCBp biB0aGUgZm9ybSBvZiBhbiBhZHZpY2Ugc3RyaW5nLgorICAgPGxpdGVyYWw+Sk9JTl9PUkRFUihm IGQpPC9saXRlcmFsPiBtZWFucyB0aGF0IDxsaXRlcmFsPmY8L2xpdGVyYWw+IHNob3VsZAorICAg YmUgdGhlIGRyaXZpbmcgdGFibGUsIGFuZCB0aGUgZmlyc3QgdGFibGUgdG8gd2hpY2ggaXQgc2hv dWxkIGJlIGpvaW5lZCBpcworICAgPGxpdGVyYWw+ZDwvbGl0ZXJhbD4uIDxsaXRlcmFsPkhBU0hf Sk9JTihkKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdAorICAgPGxpdGVyYWw+ZDwvbGl0ZXJhbD4gc2hv dWxkIGFwcGVhciBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2ggam9pbi4KKyAgIDxsaXRlcmFs PlNFUV9TQ0FOKGYgZCk8L2xpdGVyYWw+IG1lYW5zIHRoYXQgYm90aCA8bGl0ZXJhbD5mPC9saXRl cmFsPgorICAgYW5kIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHNob3VsZCBiZSBhY2Nlc3NlZCB2aWEg YSBzZXF1ZW50aWFsIHNjYW4uCisgICA8bGl0ZXJhbD5OT19HQVRIRVIoZiBkKTwvbGl0ZXJhbD4g bWVhbnMgdGhhdCBuZWl0aGVyIDxsaXRlcmFsPmY8L2xpdGVyYWw+CisgICBub3IgPGxpdGVyYWw+ ZDwvbGl0ZXJhbD4gc2hvdWxkIGFwcGVhciBiZW5lYXRoIGEgPGxpdGVyYWw+R2F0aGVyPC9saXRl cmFsPgorICAgb3IgPGxpdGVyYWw+R2F0aGVyIE1lcmdlPC9saXRlcmFsPiBub2RlLiBGb3IgbW9y ZSBkZXRhaWxzIG9uIHRoZSBwbGFuCisgICBhZHZpY2UgbWluaS1sYW5ndWFnZSwgc2VlIHRoZSBp bmZvcm1hdGlvbiBvbgorICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLXRhcmdldHMiPmFk dmljZSB0YXJnZXRzPC9saW5rPiBhbmQKKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS10 YWdzIj5hZHZpY2UgdGFnczwvbGluaz4sIGJlbG93LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBPbmNlIHlvdSBoYXZlIGFuIGFkdmljZSBzdHJpbmcgZm9yIGEgcXVlcnksIHlvdSBjYW4gdXNl IGl0IHRvIGNvbnRyb2wgaG93CisgICB0aGF0IHF1ZXJ5IGlzIHBsYW5uZWQuIFlvdSBjYW4gZG8g dGhpcyBieSBzZXR0aW5nCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5hZHZpY2U8L2xpdGVy YWw+IHRvIHRoZSBhZHZpY2Ugc3RyaW5nIHlvdSd2ZQorICAgY2hvc2VuLiBUaGlzIGNhbiBiZSBh biBhZHZpY2Ugc3RyaW5nIHRoYXQgd2FzIGdlbmVyYXRlZCBieSB0aGUgc3lzdGVtLAorICAgb3Ig b25lIHlvdSd2ZSB3cml0dGVuIHlvdXJzZWxmLiBPbmUgZ29vZCB3YXkgb2YgY3JlYXRpbmcgeW91 ciBvd24gYWR2aWNlCisgICBzdHJpbmcgaXMgdG8gdGFrZSB0aGUgc3RyaW5nIGdlbmVyYXRlZCBi eSB0aGUgc3lzdGVtIGFuZCBwaWNrIG91dCBqdXN0CisgICB0aG9zZSBlbGVtZW50cyB0aGF0IHlv dSB3aXNoIHRvIGVuZm9yY2UuIEluIHRoZSBleGFtcGxlIGFib3ZlLAorICAgPGxpdGVyYWw+cGdf cGxhbl9hZHZpY2U8L2xpdGVyYWw+IGVtaXRzIGFkdmljZSBmb3IgdGhlIGpvaW4gb3JkZXIsIHRo ZQorICAgam9pbiBtZXRob2QsIHRoZSBzY2FuIG1ldGhvZCwgYW5kIHRoZSB1c2Ugb2YgcGFyYWxs ZWxpc20sIGJ1dCB5b3UgbWlnaHQKKyAgIG9ubHkgd2FudCB0byBjb250cm9sIHRoZSBqb2luIG9y ZGVyOgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSk9JTl9PUkRFUihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRikKKyAgICAgICAg U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQor ICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKSAvKiBtYXRjaGVkICovCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgor ICAgU2luY2UgdGhlIDxsaXRlcmFsPlBMQU5fQURWSUNFPC9saXRlcmFsPiBvcHRpb24gdG8KKyAg IDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHdhcyBub3Qgc3BlY2lmaWVkLCBubyBhZHZpY2Ug c3RyaW5nIGlzIGdlbmVyYXRlZAorICAgZm9yIHRoZSBwbGFuLiBIb3dldmVyLCB0aGUgc3VwcGxp ZWQgcGxhbiBhZHZpY2UgaXMgc3RpbGwgc2hvd24gc28gdGhhdAorICAgYW55b25lIGxvb2tpbmcg YXQgdGhlIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IG91dHB1dCBrbm93cyB0aGF0IHRoZQor ICAgY2hvc2VuIHBsYW4gd2FzIGluZmx1ZW5jZWQgYnkgcGxhbiBhZHZpY2UuIElmIGluZm9ybWF0 aW9uIGFib3V0IHN1cHBsaWVkCisgICBwbGFuIGFkdmljZSBpcyBub3QgZGVzaXJlZCwgaXQgY2Fu IGJlIHN1cHByZXNzZWQgYnkgY29uZmlndXJpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNl LmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlPC9saXRlcmFsPi4KKyAgIEZv ciBlYWNoIHBpZWNlIG9mIHN1cHBsaWVkIGFkdmljZSwgdGhlIG91dHB1dCBzaG93cworICAgPGxp bmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWZlZWRiYWNrIj5hZHZpY2UgZmVlZGJhY2s8L2xpbms+ IGluZGljYXRpbmcKKyAgIHdoZXRoZXIgb3Igbm90IHRoZSBhZHZpY2Ugd2FzIHN1Y2Nlc3NmdWxs eSBhcHBsaWVkIHRvIHRoZSBxdWVyeS4gSW4gdGhpcworICAgY2FzZSwgdGhlIGZlZWRiYWNrIHNh eXMgPGxpdGVyYWw+LyogbWF0Y2hlZCAqLzwvbGl0ZXJhbD4sIHdoaWNoIG1lYW5zIHRoYXQKKyAg IDxsaXRlcmFsPmY8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5kPC9saXRlcmFsPiB3ZXJlIGZvdW5k IGluIHRoZSBxdWVyeSBhbmQKKyAgIHRoYXQgdGhlIHJlc3VsdGluZyBxdWVyeSBwbGFuIGNvbmZv cm1zIHRvIHRoZSBzcGVjaWZpZWQgYWR2aWNlLgorICA8L3BhcmE+CisKKyA8L3NlY3QyPgorCisg PHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtaG93LWl0LXdvcmtzIj4KKyAgPHRpdGxlPkhvdyBJdCBX b3JrczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBQbGFuIGFkdmljZSBpcyB3cml0dGVuIGltcGVy YXRpdmVseTsgdGhhdCBpcywgaXQgc3BlY2lmaWVzIHdoYXQgc2hvdWxkIGJlCisgICBkb25lLiBI b3dldmVyLCBhdCBhbiBpbXBsZW1lbnRhdGlvbiBsZXZlbCwKKyAgIDxsaXRlcmFsPnBnX3BsYW5f YWR2aWNlPC9saXRlcmFsPiB3b3JrcyBieSB0ZWxsaW5nIHRoZSBjb3JlIHBsYW5uZXIgd2hhdAor ICAgc2hvdWxkIG5vdCBiZSBkb25lLiBJbiBvdGhlciB3b3JkcywgaXQgb3BlcmF0ZXMgYnkgY29u c3RyYWluaW5nIHRoZQorICAgcGxhbm5lcidzIGNob2ljZXMsIG5vdCBieSByZXBsYWNpbmcgaXQu IFRoZXJlZm9yZSwgbm8gbWF0dGVyIHdoYXQgYWR2aWNlCisgICB5b3UgcHJvdmlkZSwgeW91IHdp bGwgb25seSBldmVyIGdldCBhIHBsYW4gdGhhdCB0aGUgY29yZSBwbGFubmVyIHdvdWxkIGhhdmUK KyAgIGNvbnNpZGVyZWQgZm9yIHRoZSBxdWVyeSBpbiBxdWVzdGlvbi4gSWYgeW91IGF0dGVtcHQg dG8gZm9yY2Ugd2hhdCB5b3UKKyAgIGJlbGlldmUgdG8gYmUgdGhlIGNvcnJlY3QgcGxhbiBieSBz dXBwbHlpbmcgYW4gYWR2aWNlIHN0cmluZywgYW5kIHRoZQorICAgcGxhbm5lciBzdGlsbCBmYWls cyB0byBwcm9kdWNlIHRoZSBkZXNpcmVkIHBsYW4sIHRoaXMgbWVhbnMgdGhhdCBlaXRoZXIKKyAg IHRoZXJlIGlzIGEgYnVnIGluIHlvdXIgYWR2aWNlIHN0cmluZywgb3IgdGhlIHBsYW4gaW4gcXVl c3Rpb24gd2FzIG5vdAorICAgY29uc2lkZXJlZCB2aWFibGUgYnkgdGhlIGNvcmUgcGxhbm5lci4g VGhpcyBjb21tb25seSBoYXBwZW5zIGZvciBvbmUgb2YgdHdvCisgICByZWFzb25zLiBGaXJzdCwg aXQgbWlnaHQgYmUgdGhhdCB0aGUgcGxhbm5lciBiZWxpZXZlcyB0aGF0IHRoZSBwbGFuIHlvdSdy ZQorICAgdHJ5aW5nIHRvIGZvcmNlIHdvdWxkIGJlIHNlbWFudGljYWxseSBpbmNvcnJlY3QgLSB0 aGF0IGlzLCBpdCB3b3VsZCBwcm9kdWNlCisgICB0aGUgd3JvbmcgcmVzdWx0cyAtIGFuZCBmb3Ig dGhhdCByZWFzb24gaXQgd2Fzbid0IGNvbnNpZGVyZWQuIFNlY29uZCwgaXQKKyAgIG1pZ2h0IGJl IHRoYXQgdGhlIHBsYW5uZXIgcmVqZWN0ZWQgdGhlIHBsYW4geW91IHdlcmUgaG9waW5nIHRvIGdl bmVyYXRlIG9uCisgICBzb21lIGdyb3VuZHMgb3RoZXIgdGhhbiBjb3N0LiBGb3IgZXhhbXBsZSwg Z2l2ZW4gYSB2ZXJ5IHNpbXBsZSBxdWVyeSBzdWNoIGFzCisgICA8bGl0ZXJhbD5TRUxFQ1QgKiBG Uk9NIHNvbWVfdGFibGU8L2xpdGVyYWw+LCB0aGUgcXVlcnkgcGxhbm5lciB3aWxsCisgICBkZWNp ZGUgdGhhdCB0aGUgdXNlIG9mIGFuIGluZGV4IGlzIHdvcnRobGVzcyBoZXJlIGJlZm9yZSBpdCBw ZXJmb3JtcyBhbnkKKyAgIGNvc3RpbmcgY2FsY3VsYXRpb25zLiBZb3UgY2Fubm90IGZvcmNlIGl0 IHRvIHVzZSBhbiBpbmRleCBmb3IgdGhpcyBxdWVyeQorICAgZXZlbiBpZiB5b3Ugc2V0IDxsaXRl cmFsPmVuYWJsZV9zZXFzY2FuID0gZmFsc2U8L2xpdGVyYWw+LCBhbmQgeW91IGNhbid0CisgICBm b3JjZSBpdCB0byB1c2UgYW4gaW5kZXggdXNpbmcgcGxhbiBhZHZpY2UsIGVpdGhlci4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgU3BlY2lmeWluZyBwbGFuIGFkdmljZSBzaG91bGQgbmV2ZXIg Y2F1c2UgcGxhbm5lciBmYWlsdXJlLiBIb3dldmVyLCBpZiB5b3UKKyAgIHNwZWNpZnkgcGxhbiBh ZHZpY2UgdGhhdCBhc2tzIGZvciBzb21ldGhpbmcgaW1wb3NzaWJsZSwgeW91IG1heSBnZXQgYSBw bGFuCisgICB3aGVyZSBzb21lIHBsYW4gbm9kZXMgYXJlIGZsYWdnZWQgYXMgPGxpdGVyYWw+RGlz YWJsZWQ6IHRydWU8L2xpdGVyYWw+IGluCisgICB0aGUgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJh bD4gb3V0cHV0LiBJbiBzb21lIGNhc2VzLCBzdWNoIHBsYW5zIHdpbGwgYmUKKyAgIGJhc2ljYWxs eSB0aGUgc2FtZSBwbGFuIHlvdSB3b3VsZCBoYXZlIGdvdHRlbiB3aXRoIG5vIHN1cHBsaWVkIGFk dmljZSBhdAorICAgYWxsLCBidXQgaW4gb3RoZXIgY2FzZXMsIHRoZXkgbWF5IGJlIG11Y2ggd29y c2UuIEZvciBleGFtcGxlOgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUih4IGYgZCknOworRVhQTEFJTiAoQ09TVFMg T0ZGKQorICAgICAgICBTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYK KyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAg ICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKHggZiBkKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworPC9wcm9ncmFt bGlzdGluZz4KKworICA8cGFyYT4KKyAgIEJlY2F1c2UgbmVpdGhlciA8bGl0ZXJhbD5mPC9saXRl cmFsPiBub3IgPGxpdGVyYWw+ZDwvbGl0ZXJhbD4gaXMgdGhlCisgICBmaXJzdCB0YWJsZSBpbiB0 aGUgPGxpdGVyYWw+Sk9JTl9PUkRFUigpPC9saXRlcmFsPiBzcGVjaWZpY2F0aW9uLCB0aGUKKyAg IHBsYW5uZXIgZGlzYWJsZXMgYWxsIGRpcmVjdCBqb2lucyBiZXR3ZWVuIHRoZSB0d28gb2YgdGhl bSwgdGhpbmtpbmcgdGhhdAorICAgdGhlIGpvaW4gdG8gPGxpdGVyYWw+eDwvbGl0ZXJhbD4gc2hv dWxkIGhhcHBlbiBmaXJzdC4gU2luY2UgcGxhbm5pbmcgaXNuJ3QKKyAgIGFsbG93ZWQgdG8gZmFp bCwgYSBkaXNhYmxlZCBwbGFuIGJldHdlZW4gdGhlIHR3byByZWxhdGlvbnMgaXMgZXZlbnR1YWxs eQorICAgc2VsZWN0ZWQgYW55d2F5LCBidXQgaGVyZSBpdCdzIGEgPGxpdGVyYWw+TmVzdGVkIExv b3A8L2xpdGVyYWw+IHJhdGhlciB0aGFuCisgICB0aGUgPGxpdGVyYWw+SGFzaCBKb2luPC9saXRl cmFsPiB0aGF0IHdhcyBjaG9zZW4gaW4gdGhlIGFib3ZlIGV4YW1wbGUgd2hlcmUKKyAgIG5vIGFk dmljZSB3YXMgc3BlY2lmaWVkLiBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgd2F5cyB0aGF0 IHRoaXMga2luZAorICAgb2YgdGhpbmcgY2FuIGhhcHBlbjsgd2hlbiBpdCBkb2VzLCB0aGUgcmVz dWx0aW5nIHBsYW4gaXMgZ2VuZXJhbGx5IHdvcnNlCisgICB0aGFuIGlmIG5vIGFkdmljZSBoYWQg YmVlbiBzcGVjaWZpZWQgYXQgYWxsLiBUaGVyZWZvcmUsIGl0IGlzIGEgZ29vZCBpZGVhCisgICB0 byB2YWxpZGF0ZSB0aGF0IHRoZSBhZHZpY2UgeW91IHNwZWNpZnkgYXBwbGllcyB0byB0aGUgcXVl cnkgdG8gd2hpY2ggaXQKKyAgIGlzIGFwcGxpZWQgYW5kIHRoYXQgdGhlIHJlc3VsdHMgYXJlIGFz IGV4cGVjdGVkLgorICA8L3BhcmE+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5h ZHZpY2UtdGFyZ2V0cyI+CisgIDx0aXRsZT5BZHZpY2UgVGFyZ2V0czwvdGl0bGU+CisKKyAgPHBh cmE+CisgICBBbiA8Zmlyc3R0ZXJtPmFkdmljZSB0YXJnZXQ8L2ZpcnN0dGVybT4gdW5pcXVlbHkg aWRlbnRpZmllcyBhIHBhcnRpY3VsYXIKKyAgIGluc3RhbmNlIG9mIGEgcGFydGljdWxhciByZWxh dGlvbiBpbnZvbHZlZCBpbiBhIHBhcnRpY3VsYXIgcXVlcnkuIEluIHNpbXBsZQorICAgY2FzZXMs IHN1Y2ggYXMgdGhlIGV4YW1wbGVzIHNob3duIGFib3ZlLCB0aGUgYWR2aWNlIHRhcmdldCBpcyBz aW1wbHkgdGhlCisgICByZWxhdGlvbiBhbGlhcy4gSG93ZXZlciwgYSBtb3JlIGNvbXBsZXggc3lu dGF4IGlzIHJlcXVpcmVkIHdoZW4gc3VicXVlcmllcworICAgYXJlIHVzZWQsIHdoZW4gdGFibGVz IGFyZSBwYXJ0aXRpb25lZCwgb3Igd2hlbiB0aGUgc2FtZSByZWxhdGlvbiBhbGlhcyBpcworICAg bWVudGlvbmVkIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHN1YnF1ZXJ5IChlLmcuLCA8bGl0 ZXJhbD4oZm9vIEpPSU4gYmFyCisgICBPTiBmb28uYSA9IGJhci5hKSB4IEpPSU4gZm9vIE9OIHgu YiA9IGZvby5iPC9saXRlcmFsPikuIEFueSBjb21iaW5hdGlvbiBvZgorICAgdGhlc2UgdGhyZWUg dGhpbmdzIGNhbiBvY2N1ciBzaW11bHRhbmVvdXNseTogYSByZWxhdGlvbiBjb3VsZCBiZSBtZW50 aW9uZWQKKyAgIG1vcmUgdGhhbiBvbmNlLCBiZSBwYXJ0aXRpb25lZCwgYW5kIGJlIHVzZWQgaW5z aWRlIG9mIGEgc3VicXVlcnkuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEJlY2F1c2Ugb2Yg dGhpcywgdGhlIGdlbmVyYWwgc3ludGF4IGZvciBhIHJlbGF0aW9uIGlkZW50aWZpZXIgaXM6Cisg IDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJl ci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRpdGlvbl9uYW1lQHBsYW5fbmFtZQorPC9wcm9ncmFtbGlz dGluZz4KKworICA8cGFyYT4KKyAgIEFsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIDxsaXRl cmFsPmFsaWFzX25hbWU8L2xpdGVyYWw+IGFyZSBvcHRpb25hbAorICAgYW5kIGFyZSBpbmNsdWRl ZCBvbmx5IHdoZW4gcmVxdWlyZWQuIFdoZW4gYSBjb21wb25lbnQgaXMgb21pdHRlZCwgdGhlCisg ICBwcmVjZWRpbmcgcHVuY3R1YXRpb24gbXVzdCBhbHNvIGJlIG9taXR0ZWQuIEZvciB0aGUgZmly c3Qgb2NjdXJyZW5jZSBvZiBhCisgICByZWxhdGlvbiB3aXRoaW4gYSBnaXZlbiBzdWJxdWVyeSwg Z2VuZXJhdGVkIGFkdmljZSB3aWxsIG9taXQgdGhlIG9jY3VycmVuY2UKKyAgIG51bWJlciwgYnV0 IGl0IGlzIGxlZ2FsIHRvIHdyaXRlIDxsaXRlcmFsPiMxPC9saXRlcmFsPiwgaWYgZGVzaXJlZC4g VGhlCisgICBwYXJ0aXRpb24gc2NoZW1hIGFuZCBwYXJ0aXRpb24gbmFtZSBhcmUgaW5jbHVkZWQg b25seSBmb3IgY2hpbGRyZW4gb2YKKyAgIHBhcnRpdGlvbmVkIHRhYmxlcy4gSW4gZ2VuZXJhdGVk IGFkdmljZSwgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+CisgICBhbHdheXMgaW5j bHVkZXMgYm90aCwgYnV0IGl0IGlzIGxlZ2FsIHRvIG9taXQgdGhlIHNjaGVtYS4gVGhlIHBsYW4g bmFtZSBpcworICAgb21pdHRlZCBmb3IgdGhlIHRvcC1sZXZlbCBwbGFuLCBhbmQgbXVzdCBiZSBp bmNsdWRlZCBmb3IgYW55IHN1YnBsYW4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEl0IGlz IG5vdCBhbHdheXMgZWFzeSB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgYWR2aWNlIHRhcmdldCBi eSBleGFtaW5pbmcKKyAgIHRoZSBxdWVyeS4gRm9yIGluc3RhbmNlLCBpZiB0aGUgcGxhbm5lciBw dWxscyB1cCBhIHN1YnF1ZXJ5IGludG8gdGhlIHBhcmVudAorICAgcXVlcnkgbGV2ZWwsIGV2ZXJ5 dGhpbmcgaW5zaWRlIG9mIGl0IGJlY29tZXMgcGFydCBvZiB0aGUgcGFyZW50IHF1ZXJ5IGxldmVs LAorICAgYW5kIHVzZXMgdGhlIHBhcmVudCBxdWVyeSdzIHN1YnBsYW4gbmFtZSAob3Igbm8gc3Vi cGxhbiBuYW1lLCBpZiBwdWxsZWQgdXAKKyAgIHRvIHRoZSB0b3AgbGV2ZWwpLiBGdXJ0aGVybW9y ZSwgdGhlIGNvcnJlY3Qgc3VicXVlcnkgbmFtZSBpcyBzb21ldGltZXMgbm90CisgICBvYnZpb3Vz LiBGb3IgZXhhbXBsZSwgd2hlbiB0d28gcXVlcmllcyBhcmUgam9pbmVkIHVzaW5nIGFuIG9wZXJh dGlvbiBzdWNoIGFzCisgICA8bGl0ZXJhbD5VTklPTjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+SU5U RVJTRUNUPC9saXRlcmFsPiwgbm8gbmFtZSBmb3IgdGhlCisgICBzdWJxdWVyaWVzIGlzIHByZXNl bnQgaW4gdGhlIFNRTCBzeW50YXg7IGluc3RlYWQsIGEgc3lzdGVtLWdlbmVyYXRlZCBuYW1lIGlz CisgICBhc3NpZ25lZCB0byBlYWNoIGJyYW5jaC4gVGhlIGVhc2llc3Qgd2F5IHRvIGRpc2NvdmVy IHRoZSBwcm9wZXIgYWR2aWNlCisgICB0YXJnZXRzIGlzIHRvIHVzZSA8bGl0ZXJhbD5FWFBMQUlO IChQTEFOX0FEVklDRSk8L2xpdGVyYWw+IGFuZCBleGFtaW5lIHRoZQorICAgZ2VuZXJhdGVkIGFk dmljZS4KKyAgPC9wYXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNl LXRhZ3MiPgorICA8dGl0bGU+QWR2aWNlIFRhZ3M8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQW4g PGZpcnN0dGVybT5hZHZpY2UgdGFnPC9maXJzdHRlcm0+IHNwZWNpZmllcyBhIHBhcnRpY3VsYXIg YmVoYXZpb3IgdGhhdAorICAgc2hvdWxkIGJlIGVuZm9yY2VkIGZvciBzb21lIHBvcnRpb24gb2Yg dGhlIHF1ZXJ5LCBzdWNoIGFzIGEgcGFydGljdWxhcgorICAgam9pbiBvcmRlciBvciBqb2luIG1l dGhvZC4gQWxsIGFkdmljZSB0YWdzIHRha2UKKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmlj ZS10YXJnZXRzIj5hZHZpY2UgdGFyZ2V0czwvbGluaz4gYXMgYXJndW1lbnRzLAorICAgYW5kIG1h bnkgYWxsb3cgbGlzdHMgb2YgYWR2aWNlIHRhcmdldHMsIHdoaWNoIGluIHNvbWUgY2FzZXMgY2Fu IGJlIG5lc3RlZAorICAgbXVsdGlwbGUgbGV2ZWxzIGRlZXAuIFNldmVyYWwgZGlmZmVyZW50IGNs YXNzZXMgb2YgYWR2aWNlIHRhcmdldHMgZXhpc3QsCisgICBlYWNoIGNvbnRyb2xsaW5nIGEgZGlm ZmVyZW50IGFzcGVjdCBvZiBxdWVyeSBwbGFubmluZy4KKyAgPC9wYXJhPgorCisgIDxzZWN0MyBp ZD0icGdwbGFuYWR2aWNlLXNjYW4tbWV0aG9kIj4KKyAgPHRpdGxlPlNjYW4gTWV0aG9kIEFkdmlj ZTwvdGl0bGU+CisgICA8c3lub3BzaXM+CitTRVFfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9y ZXBsYWNlYWJsZT4gWyAuLi4gXSkKK1RJRF9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxh Y2VhYmxlPiBbIC4uLiBdKQorSU5ERVhfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNl YWJsZT4gPHJlcGxhY2VhYmxlPmluZGV4X25hbWU8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorSU5E RVhfT05MWV9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFi bGU+aW5kZXhfbmFtZTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitGT1JFSUdOX1NDQU4oKDxyZXBs YWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKSBbIC4uLiBdKQorQklUTUFQX0hF QVBfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSk8L3N5bm9w c2lzPgorCisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5TRVFfU0NBTjwvbGl0ZXJhbD4gc3BlY2lm aWVzIHRoYXQgZWFjaCB0YXJnZXQgc2hvdWxkIGJlCisgICAgc2Nhbm5lZCB1c2luZyBhIDxsaXRl cmFsPlNlcSBTY2FuPC9saXRlcmFsPi4gPGxpdGVyYWw+VElEX1NDQU48L2xpdGVyYWw+CisgICAg c3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQgc2hvdWxkIGJlIHNjYW5uZWQgdXNpbmcgYQorICAg IDxsaXRlcmFsPlRJRCBTY2FuPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5USUQgUmFuZ2UgU2Nhbjwv bGl0ZXJhbD4uCisgICAgPGxpdGVyYWw+QklUTUFQX0hFQVBfU0NBTjwvbGl0ZXJhbD4gc3BlY2lm aWVzIHRoYXQgZWFjaCB0YXJnZXQKKyAgICBzaG91bGQgYmUgc2Nhbm5lZCB1c2luZyBhIDxsaXRl cmFsPkJpdG1hcCBIZWFwIFNjYW48L2xpdGVyYWw+LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4K KyAgICA8bGl0ZXJhbD5JTkRFWF9TQ0FOPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBlYWNoIHRh cmdldCBzaG91bGQKKyAgICBiZSBzY2FubmVkIHVzaW5nIGFuIDxsaXRlcmFsPkluZGV4IFNjYW48 L2xpdGVyYWw+IG9uIHRoZSBnaXZlbiBpbmRleAorICAgIG5hbWUuIDxsaXRlcmFsPklOREVYX09O TFlfU0NBTjwvbGl0ZXJhbD4gaXMgc2ltaWxhciwgYnV0IHNwZWNpZmllcyB0aGUKKyAgICB1c2Ug b2YgYW4gPGxpdGVyYWw+SW5kZXggT25seSBTY2FuPC9saXRlcmFsPi4gSW4gZWl0aGVyIGNhc2Us IHRoZSBpbmRleAorICAgIG5hbWUgY2FuIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSwgc2No ZW1hLXF1YWxpZmllZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+Rk9S RUlHTl9TQ0FOPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBhIGpvaW4gYmV0d2VlbiB0d28gb3IK KyAgICBtb3JlIGZvcmVpZ24gdGFibGVzIHNob3VsZCBiZSBwdXNoZWQgZG93biB0byBhIHJlbW90 ZSBzZXJ2ZXIgc28KKyAgICB0aGF0IGl0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZSA8 bGl0ZXJhbD5Gb3JlaWduIFNjYW48L2xpdGVyYWw+LgorICAgIFNwZWNpZnlpbmcgPGxpdGVyYWw+ Rk9SRUlHTl9TQ0FOPC9saXRlcmFsPiBmb3IgYSBzaW5nbGUgZm9yZWlnbiB0YWJsZSBpcworICAg IG5laXRoZXIgbmVjZXNzYXJ5IG5vciBwZXJtaXNzaWJsZTogYSA8bGl0ZXJhbD5Gb3JlaWduIFNj YW48L2xpdGVyYWw+IHdpbGwKKyAgICBuZWVkIHRvIGJlIHVzZWQgcmVnYXJkbGVzcy4gSWYgeW91 IHdhbnQgdG8gcHJldmVudCBhIGpvaW4gZnJvbSBiZWluZworICAgIHB1c2hlZCBkb3duLCBjb25z aWRlciB1c2luZyB0aGUgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gdGFnIGZvcgorICAg IHRoYXQgcHVycG9zZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIHBsYW5uZXIg c3VwcG9ydHMgbWFueSB0eXBlcyBvZiBzY2FucyBvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBoZXJl OworICAgIGhvd2V2ZXIsIGluIG1vc3Qgb2YgdGhvc2UgY2FzZXMsIHRoZXJlIGlzIG5vIG1lYW5p bmdmdWwgZGVjaXNpb24gdG8gYmUKKyAgICBtYWRlLCBhbmQgaGVuY2Ugbm8gbmVlZCBmb3IgYWR2 aWNlLiBGb3IgZXhhbXBsZSwgdGhlIG91dHB1dCBvZiBhCisgICAgc2V0LXJldHVybmluZyBmdW5j dGlvbiB0aGF0IGFwcGVhcnMgaW4gdGhlIDxsaXRlcmFsPkZST008L2xpdGVyYWw+IGNsYXVzZQor ICAgIGNhbiBvbmx5IGV2ZXIgYmUgc2Nhbm5lZCB1c2luZyBhIDxsaXRlcmFsPkZ1bmN0aW9uIFNj YW48L2xpdGVyYWw+LCBzbworICAgIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IGZvciBhZHZpY2Ug dG8gY2hhbmdlIGFueXRoaW5nLgorICAgPC9wYXJhPgorCisgIDwvc2VjdDM+CisKKyAgPHNlY3Qz IGlkPSJwZ3BsYW5hZHZpY2Utam9pbi1vcmRlciI+CisgIDx0aXRsZT5Kb2luIE9yZGVyIEFkdmlj ZTwvdGl0bGU+CisgICA8c3lub3BzaXM+CitKT0lOX09SREVSKDxyZXBsYWNlYWJsZT5qb2luX29y ZGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNl YWJsZT5qb2luX29yZGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworPHJlcGxh Y2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5qb2lu X29yZGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdICkgfAoreyA8cmVwbGFjZWFibGU+am9p bl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSB9PC9zeW5vcHNpcz4KKworICAgPHBh cmE+CisgICAgV2hlbiA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBpcyB1c2VkIHdpdGhv dXQgYW55IHN1Ymxpc3RzLCBpdAorICAgIHNwZWNpZmllcyBhbiBvdXRlci1kZWVwIGpvaW4gd2l0 aCB0aGUgZmlyc3QgYWR2aWNlIHRhcmdldCBhcyB0aGUgZHJpdmluZworICAgIHRhYmxlLCBqb2lu ZWQgdG8gZWFjaCBzdWJzZXF1ZW50IGFkdmljZSB0YXJnZXQgaW4gdHVybiBpbiB0aGUgb3JkZXIK KyAgICBzcGVjaWZpZWQuIEZvciBpbnN0YW5jZSwgPGxpdGVyYWw+Sk9JTl9PUkRFUihhIGIgYyk8 L2xpdGVyYWw+IG1lYW5zIHRoYXQKKyAgICA8bGl0ZXJhbD5hPC9saXRlcmFsPiBzaG91bGQgYmUg dGhlIGRyaXZpbmcgdGFibGUsIGFuZCB0aGF0IGl0IHNob3VsZCBiZQorICAgIGpvaW5lZCBmaXJz dCB0byA8bGl0ZXJhbD5iPC9saXRlcmFsPiBhbmQgdGhlbiB0byA8bGl0ZXJhbD5jPC9saXRlcmFs Pi4KKyAgICBJZiB0aGVyZSBhcmUgbW9yZSByZWxhdGlvbnMgaW4gdGhlIHF1ZXJ5IHRoYW4gPGxp dGVyYWw+YTwvbGl0ZXJhbD4sCisgICAgPGxpdGVyYWw+YjwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJh bD5jPC9saXRlcmFsPiwgdGhlIHJlc3QgY2FuIGJlIGpvaW5lZAorICAgIGFmdGVyd2FyZHMgaW4g YW55IG1hbm5lci4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgSWYgYSA8bGl0ZXJhbD5K T0lOX09SREVSPC9saXRlcmFsPiBsaXN0IGNvbnRhaW5zIGEgcGFyZW50aGVzaXplZCBzdWJsaXN0 LAorICAgIGl0IHNwZWNpZmllcyBhIG5vbi1vdXRlci1kZWVwIGpvaW4uIFRoZSByZWxhdGlvbnMg aW4gdGhlIHN1Ymxpc3QgbXVzdCBmaXJzdAorICAgIGJlIGpvaW5lZCB0byBlYWNoIG90aGVyIG11 Y2ggYXMgaWYgdGhlIHN1Ymxpc3Qgd2VyZSBhIHRvcC1sZXZlbAorICAgIDxsaXRlcmFsPkpPSU5f T1JERVI8L2xpdGVyYWw+IGxpc3QsIGFuZCB0aGUgcmVzdWx0aW5nIGpvaW4gcHJvZHVjdCBtdXN0 CisgICAgdGhlbiBhcHBlYXIgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBqb2luIGF0IHRoZSBhcHBy b3ByaWF0ZSBwb2ludCBpbiB0aGUKKyAgICBqb2luIG9yZGVyLiBGb3IgZXhhbXBsZSwgPGxpdGVy YWw+Sk9JTl9PUkRFUihhIChiIGMpIGQpPC9saXRlcmFsPiByZXF1aXJlcworICAgIGEgcGxhbiBv ZiB0aGlzIGZvcm06CisgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK0pvaW4KKyAgLT4g IEpvaW4KKyAgICAgICAgLT4gU2NhbiBvbiBhCisgICAgICAgIC0+IEpvaW4KKyAgICAgICAgICAg ICAtPiBTY2FuIG9uIGIKKyAgICAgICAgICAgICAtPiBTY2FuIG9uIGMKKyAgLT4gIFNjYW4gb24g ZAorPC9wcm9ncmFtbGlzdGluZz4KKworICAgPHBhcmE+CisgICAgSWYgYSA8bGl0ZXJhbD5KT0lO X09SREVSPC9saXRlcmFsPiBsaXN0IGNvbnRhaW5zIGEgc3VibGlzdCBzdXJyb3VuZGVkIGJ5Cisg ICAgY3VybHkgYnJhY2VzLCB0aGlzIGFsc28gc3BlY2lmaWVzIGEgbm9uLW91dGVyLWRlZXAgam9p bi4gSG93ZXZlciwgdGhlIGpvaW4KKyAgICBvcmRlciB3aXRoaW4gdGhlIHN1Ymxpc3QgaXMgbm90 IGNvbnN0cmFpbmVkLiBGb3IgZXhhbXBsZSwgc3BlY2lmeWluZworICAgIDxsaXRlcmFsPkpPSU5f T1JERVIoYSB7YiBjfSBkKTwvbGl0ZXJhbD4gd291bGQgYWxsb3cgdGhlIHNjYW5zIG9mCisgICAg PGxpdGVyYWw+YjwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmM8L2xpdGVyYWw+IHRvIGJlIHN3YXBw ZWQgaW4gdGhlCisgICAgcHJldmlvdXMgZXhhbXBsZSwgd2hpY2ggaXMgbm90IGFsbG93ZWQgd2hl biBwYXJlbnRoZXNlcyBhcmUgdXNlZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgUGFy ZW50aGVzaXplZCBzdWJsaXN0cyBjYW4gYmUgYXJiaXRyYXJpbHkgbmVzdGVkLCBidXQgc3VibGlz dHMgc3Vycm91bmRlZAorICAgIGJ5IGN1cmx5IGJyYWNlcyBjYW5ub3QgdGhlbXNlbHZlcyBjb250 YWluIHN1Ymxpc3RzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBNdWx0aXBsZSBpbnN0 YW5jZXMgb2YgPGxpdGVyYWw+Sk9JTl9PUkRFUigpPC9saXRlcmFsPiBjYW4gc29tZXRpbWVzIGJl CisgICAgbmVlZGVkIGluIG9yZGVyIHRvIGZ1bGx5IGNvbnN0cmFpbiB0aGUgam9pbiBvcmRlci4g VGhpcyBvY2N1cnMgd2hlbiB0aGVyZQorICAgIGFyZSBtdWx0aXBsZSBqb2luIHByb2JsZW1zIHRo YXQgYXJlIG9wdGltaXplZCBzZXBhcmF0ZWx5IGJ5IHRoZSBwbGFubmVyLgorICAgIFRoaXMgY2Fu IGhhcHBlbiBkdWUgdG8gdGhlIHByZXNlbmNlIG9mIHN1YnF1ZXJpZXMsIG9yIGJlY2F1c2UgdGhl cmUgaXMgYQorICAgIHBhcnRpdGlvbndpc2Ugam9pbi4gSW4gdGhlIGxhdHRlciBjYXNlLCBlYWNo IGJyYW5jaCBvZiB0aGUgcGFydGl0aW9ud2lzZQorICAgIGpvaW4gY2FuIGhhdmUgaXRzIG93biBq b2luIG9yZGVyLCBpbmRlcGVuZGVudCBvZiBldmVyeSBvdGhlciBicmFuY2guCisgICA8L3BhcmE+ CisKKyAgPC9zZWN0Mz4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1qb2luLW1ldGhvZCI+ CisgIDx0aXRsZT5Kb2luIE1ldGhvZCBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgoram9p bl9tZXRob2RfbmFtZSg8cmVwbGFjZWFibGU+am9pbl9tZXRob2RfaXRlbTwvcmVwbGFjZWFibGU+ IFsgLi4uIF0pCisKKzxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlPmpvaW5fbWV0aG9kX25hbWU8 L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworeyBNRVJHRV9KT0lOX01BVEVSSUFMSVpFIHwg TUVSR0VfSk9JTl9QTEFJTiB8IE5FU1RFRF9MT09QX01BVEVSSUFMSVpFIHwgTkVTVEVEX0xPT1Bf UExBSU4gfCBIQVNIX0pPSU4gfQorCis8cGhyYXNlPmFuZCA8cmVwbGFjZWFibGU+am9pbl9tZXRo b2RfaXRlbTwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorCit7IDxyZXBsYWNlYWJsZT5hZHZp Y2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gfAorKCA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwv cmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9PC9zeW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgSm9p biBtZXRob2QgYWR2aWNlIHNwZWNpZmllcyB0aGUgcmVsYXRpb24sIG9yIHNldCBvZiByZWxhdGlv bnMsIHRoYXQgc2hvdWxkCisgICAgYXBwZWFyIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9pbiB1 c2luZyB0aGUgbmFtZWQgam9pbiBtZXRob2QuIEZvcgorICAgIGV4YW1wbGUsIDxsaXRlcmFsPkhB U0hfSk9JTihhIGIpPC9saXRlcmFsPiBtZWFucyB0aGF0IGVhY2ggb2YKKyAgICA8bGl0ZXJhbD5h PC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+YjwvbGl0ZXJhbD4gc2hvdWxkIGFwcGVhciBvbiB0aGUg aW5uZXIKKyAgICBzaWRlIG9mIGEgaGFzaCBqb2luOyBhIGNvbmZvcm1pbmcgcGxhbiBtdXN0IGNv bnRhaW4gYXQgbGVhc3QgdHdvIGhhc2gKKyAgICBqb2lucywgb25lIG9mIHdoaWNoIGhhcyA8bGl0 ZXJhbD5hPC9saXRlcmFsPiBhbmQgbm90aGluZyBlbHNlIG9uIHRoZQorICAgIGlubmVyIHNpZGUs IGFuZCB0aGUgb3RoZXIgb2Ygd2hpY2ggaGFzIDxsaXRlcmFsPmI8L2xpdGVyYWw+IGFuZCBub3Ro aW5nCisgICAgZWxzZSBvbiB0aGUgaW5uZXIgc2lkZS4gT24gdGhlIG90aGVyIGhhbmQsCisgICAg PGxpdGVyYWw+SEFTSF9KT0lOKChhIGIpKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgam9pbiBw cm9kdWN0IG9mCisgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmI8L2xpdGVy YWw+IHNob3VsZCBhcHBlYXIgdG9nZXRoZXIKKyAgICBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIHNp bmdsZSBoYXNoIGpvaW4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIE5vdGUgdGhhdCBq b2luIG1ldGhvZCBhZHZpY2UgaW1wbGllcyBhIG5lZ2F0aXZlIGpvaW4gb3JkZXIgY29uc3RyYWlu dC4KKyAgICBTaW5jZSB0aGUgbmFtZWQgcmVsYXRpb24gb3IgcmVsYXRpb25zIG11c3QgYmUgb24g dGhlIGlubmVyIHNpZGUgb2YgYSBqb2luCisgICAgdXNpbmcgdGhlIHNwZWNpZmllZCBtZXRob2Qs IG5vbmUgb2YgdGhlbSBjYW4gYmUgdGhlIGRyaXZpbmcgdGFibGUgZm9yIHRoZQorICAgIGVudGly ZSBqb2luIHByb2JsZW0uIE1vcmVvdmVyLCBubyByZWxhdGlvbiBpbnNpZGUgdGhlIHNldCBzaG91 bGQgYmUgam9pbmVkCisgICAgdG8gYW55IHJlbGF0aW9uIG91dHNpZGUgdGhlIHNldCB1bnRpbCBh bGwgcmVsYXRpb25zIHdpdGhpbiB0aGUgc2V0IGhhdmUKKyAgICBiZWVuIGpvaW5lZCB0byBlYWNo IG90aGVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmljZSBzcGVjaWZpZXMKKyAgICA8bGl0ZXJh bD5IQVNIX0pPSU4oKGEgYikpPC9saXRlcmFsPiBhbmQgdGhlIHN5c3RlbSBiZWdpbnMgYnkgam9p bmluZyBlaXRoZXIKKyAgICBvZiB0aG9zZSB0byBzb21lIHRoaXJkIHJlbGF0aW9uIDxsaXRlcmFs PmM8L2xpdGVyYWw+LCB0aGUgcmVzdWx0aW5nCisgICAgcGxhbiBjb3VsZCBuZXZlciBiZSBjb21w bGlhbnQgd2l0aCB0aGUgcmVxdWVzdCB0byBwdXQgZXhhY3RseSB0aG9zZSB0d28KKyAgICByZWxh dGlvbnMgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoIGpvaW4uIFdoZW4gdXNpbmcgYm90aCBq b2luIG9yZGVyCisgICAgYWR2aWNlIGFuZCBqb2luIG1ldGhvZCBhZHZpY2UgZm9yIHRoZSBzYW1l IHF1ZXJ5LCBpdCBpcyBhIGdvb2QgaWRlYSB0byBtYWtlCisgICAgc3VyZSB0aGF0IHRoZXkgZG8g bm90IG1hbmRhdGUgaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzLgorICAgPC9wYXJhPgorCisgIDwv c2VjdDM+CisKKyAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZpY2UtcGFydGl0aW9ud2lzZSI+CisgIDx0 aXRsZT5QYXJ0aXRpb253aXNlIEFkdmljZTwvdGl0bGU+CisgICA8c3lub3BzaXM+CitQQVJUSVRJ T05XSVNFKDxyZXBsYWNlYWJsZT5wYXJ0aXRpb253aXNlX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4u LiBdKQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZT5wYXJ0aXRpb253aXNlX2l0ZW08L3Jl cGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworeyA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwv cmVwbGFjZWFibGU+IHwKKyggPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxl PiBbIC4uLiBdICkgfTwvc3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gYXBwbGllZCB0 byBhIHNpbmdsZSB0YXJnZXQsIDxsaXRlcmFsPlBBUlRJVElPTldJU0U8L2xpdGVyYWw+CisgICAg c3BlY2lmaWVzIHRoYXQgdGhlIHNwZWNpZmllZCB0YWJsZSBzaG91bGQgbm90IGJlIHBhcnQgb2Yg YW55IHBhcnRpdGlvbndpc2UKKyAgICBqb2luLiBXaGVuIGFwcGxpZWQgdG8gYSBsaXN0IG9mIHRh cmdldHMsIDxsaXRlcmFsPlBBUlRJVElPTldJU0U8L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRo YXQgZXhhY3RseSB0aGF0IHNldCBvZiByZWxhdGlvbnMgc2hvdWxkIGJlIGpvaW5lZCBpbgorICAg IHBhcnRpdGlvbndpc2UgZmFzaGlvbi4gTm90ZSB0aGF0LCByZWdhcmRsZXNzIG9mIHdoYXQgYWR2 aWNlIGlzIHNwZWNpZmllZCwKKyAgICBubyBwYXJ0aXRpb253aXNlIGpvaW5zIHdpbGwgYmUgcG9z c2libGUgaWYKKyAgICA8bGl0ZXJhbD5lbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gb2ZmPC9s aXRlcmFsPi4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFu YWR2aWNlLXNlbWlqb2luLXVuaXF1ZSI+CisgIDx0aXRsZT5TZW1pam9pbiBVbmlxdWVuZXNzIEFk dmljZTwvdGl0bGU+CisgICA8c3lub3BzaXM+CitTRU1JSk9JTl9VTklRVUUoPHJlcGxhY2VhYmxl PnNqX3VuaXF1ZV9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK1NFTUlKT0lOX05PTl9VTklR VUUoPHJlcGxhY2VhYmxlPnNqX3VuaXF1ZV9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKKwor PHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGU+c2pfdW5pcXVlX2l0ZW08L3JlcGxhY2VhYmxlPiBp czo8L3BocmFzZT4KKworeyA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+ IHwKKyggPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdICkg fTwvc3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIFRoZSBwbGFubmVyIHNvbWV0aW1lcyBoYXMg YSBjaG9pY2UgYmV0d2VlbiBpbXBsZW1lbnRpbmcgYSBzZW1pam9pbgorICAgIGRpcmVjdGx5IGFu ZCBpbXBsZW1lbnRpbmcgYSBzZW1pam9pbiBieSBtYWtpbmcgdGhlIG51bGxhYmxlIHNpZGUgdW5p cXVlCisgICAgYW5kIHRoZW4gcGVyZm9ybWluZyBhbiBpbm5lciBqb2luLiA8bGl0ZXJhbD5TRU1J Sk9JTl9VTklRVUU8L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRoZSBsYXR0ZXIgc3RyYXRlZ3ks IHdoaWxlIDxsaXRlcmFsPlNFTUlKT0lOX05PTl9VTklRVUU8L2xpdGVyYWw+CisgICAgc3BlY2lm aWVzIHRoZSBmb3JtZXIgc3RyYXRlZ3kuIEluIGVpdGhlciBjYXNlLCB0aGUgYXJndW1lbnQgaXMg dGhlIHNpbmdsZQorICAgIHJlbGF0aW9uIG9yIGxpc3Qgb2YgcmVsYXRpb25zIHRoYXQgYXBwZWFy IGJlbmVhdGggdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlCisgICAgam9pbi4KKyAgIDwvcGFyYT4K KworICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXBhcmFsbGVsLXF1ZXJ5 Ij4KKyAgPHRpdGxlPlBhcmFsbGVsIFF1ZXJ5IEFkdmljZTwvdGl0bGU+CisgICA8c3lub3BzaXM+ CitHQVRIRVIoPHJlcGxhY2VhYmxlPmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkK K0dBVEhFUl9NRVJHRSg8cmVwbGFjZWFibGU+Z2F0aGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4u LiBdKQorTk9fR0FUSEVSKDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4g WyAuLi4gXSkKKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGU+Z2F0aGVyX2l0ZW08L3JlcGxh Y2VhYmxlPiBpczo8L3BocmFzZT4KKworeyA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVw bGFjZWFibGU+IHwKKyggPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBb IC4uLiBdICkgfTwvc3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIDxsaXRlcmFsPkdBVEhFUjwv bGl0ZXJhbD4gb3IgPGxpdGVyYWw+R0FUSEVSX01FUkdFPC9saXRlcmFsPiBzcGVjaWZpZXMKKyAg ICB0aGF0IDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+R2F0aGVyIE1lcmdl PC9saXRlcmFsPiwKKyAgICByZXNwZWN0aXZlbHksIHNob3VsZCBiZSBwbGFjZWQgb24gdG9wIG9m IHRoZSBzaW5nbGUgcmVsYXRpb24gc3BlY2lmaWVkIGFzCisgICAgYSB0YXJnZXQsIG9yIG9uIHRv cCBvZiB0aGUgam9pbiBiZXR3ZWVuIHRoZSBsaXN0IG9mIHJlbGF0aW9ucyBzcGVjaWZpZWQgYXMK KyAgICBhIHRhcmdldC4gVGhpcyBtZWFucyB0aGF0IDxsaXRlcmFsPkdBVEhFUihhIGIgYyk8L2xp dGVyYWw+IGlzIGEgcmVxdWVzdAorICAgIGZvciB0aHJlZSBkaWZmZXJlbnQgPGxpdGVyYWw+R2F0 aGVyPC9saXRlcmFsPiBub2Rlcywgd2hpbGUKKyAgICA8bGl0ZXJhbD5HQVRIRVIoKGEgYiBjKSk8 L2xpdGVyYWw+IGlzIGEgcmVxdWVzdCBmb3IgYSBzaW5nbGUKKyAgICA8bGl0ZXJhbD5HYXRoZXI8 L2xpdGVyYWw+IG5vZGUgb24gdG9wIG9mIGEgMy13YXkgam9pbi4KKyAgIDwvcGFyYT4KKworICAg PHBhcmE+CisgICAgPGxpdGVyYWw+Tk9fR0FUSEVSPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBu byA8bGl0ZXJhbD5HYXRoZXI8L2xpdGVyYWw+IG9yCisgICAgPGxpdGVyYWw+R2F0aGVyIE1lcmdl PC9saXRlcmFsPiBub2RlIHNob3VsZCBhcHBlYXIgYWJvdmUgYW55IG9mIHRoZQorICAgIHRhcmdl dHMsIGJ1dCBpdCBvbmx5IGNvbnN0cmFpbnMgdGhlIHBsYW5uaW5nIG9mIGFuIGluZGl2aWR1YWwg c3VicXVlcnksCisgICAgYW5kIG91dGVyIHN1YnF1ZXJ5IGxldmVscyBjYW4gc3RpbGwgdXNlIHBh cmFsbGVsIHF1ZXJ5LiBGb3IgZXhhbXBsZSwKKyAgICA8bGl0ZXJhbD5OT19HQVRIRVIoaW5uZXJf ZXhhbXBsZUBhbnlfMSk8L2xpdGVyYWw+IHByZWNsdWRlcyB1c2luZyBhCisgICAgPGxpdGVyYWw+ UGFyYWxsZWwgU2VxIFNjYW48L2xpdGVyYWw+IHRvIGFjY2VzcyB0aGUKKyAgICA8bGl0ZXJhbD5p bm5lcl9leGFtcGxlPC9saXRlcmFsPiB0YWJsZSB3aXRoaW4gdGhlIDxsaXRlcmFsPmFueV8xPC9s aXRlcmFsPgorICAgIHN1YnF1ZXJ5LCBidXQgaXQgZG9lcyBub3QgcHJldmVudCB0aGUgcGxhbm5l ciBmcm9tIHBsYWNpbmcKKyAgICA8bGl0ZXJhbD5TdWJQbGFuIGFueV8xPC9saXRlcmFsPiBiZW5l YXRoIGEgPGxpdGVyYWw+R2F0aGVyPC9saXRlcmFsPgorICAgIG9yIDxsaXRlcmFsPkdhdGhlciBN ZXJnZTwvbGl0ZXJhbD4gbm9kZS4gVGhlIGZvbGxvd2luZyBwbGFuIGlzCisgICAgY29tcGF0aWJs ZSB3aXRoIDxsaXRlcmFsPk5PX0dBVEhFUihpbm5lcl9leGFtcGxlQGFueV8xKTwvbGl0ZXJhbD4s IGJ1dAorICAgIG5vdCB3aXRoIDxsaXRlcmFsPk5PX0dBVEhFUihvdXRlcl9leGFtcGxlKTwvbGl0 ZXJhbD46CisgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKyBGaW5hbGl6ZSBBZ2dyZWdh dGUKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIG91dGVyX2V4YW1wbGUKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHNvbWV0aGluZyA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSku Y29sMSkKKyAgICAgICAgICAgICAgICAgICAgIFN1YlBsYW4gYW55XzEKKyAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGlubmVyX2V4YW1wbGUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAoc29tZXRoaW5nX2Vsc2UgPiAxMDApCis8L3Byb2dyYW1saXN0 aW5nPgorCisgICA8cGFyYT4KKyAgICBIZXJlIGlzIHRoZSByZXZlcnNlIGNhc2UsIHRoYXQgaXMs IGEgcGxhbiBjb21wYXRpYmxlIHdpdGgKKyAgICA8bGl0ZXJhbD5OT19HQVRIRVIob3V0ZXJfZXhh bXBsZSk8L2xpdGVyYWw+IGJ1dCBub3Qgd2l0aAorICAgIDxsaXRlcmFsPk5PX0dBVEhFUihpbm5l cl9leGFtcGxlQGFueV8xKTwvbGl0ZXJhbD46CisgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGlu Zz4KKyBBZ2dyZWdhdGUKKyAgIC0+ICBTZXEgU2NhbiBvbiBvdXRlcl9leGFtcGxlCisgICAgICAg ICBGaWx0ZXI6IChzb21ldGhpbmcgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpCisgICAg ICAgICBTdWJQbGFuIGFueV8xCisgICAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAg ICAgLT4gUGFyYWxsZWwgU2VxIFNjYW4gb24gaW5uZXJfZXhhbXBsZQorICAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHNvbWV0aGluZ19lbHNlID4gMTAwKQorPC9wcm9ncmFtbGlzdGluZz4K KworICA8L3NlY3QzPgorIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1mZWVk YmFjayI+CisgIDx0aXRsZT5BZHZpY2UgRmVlZGJhY2s8L3RpdGxlPgorCisgIDxwYXJhPgorICAg PGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gcHJvdmlkZXMgZmVlZGJhY2sgb24gd2hldGhlciBz dXBwbGllZCBhZHZpY2Ugd2FzCisgICBzdWNjZXNzZnVsbHkgYXBwbGllZCB0byB0aGUgcXVlcnkg aW4gdGhlIGZvcm0gb2YgYSBjb21tZW50IG9uIGVhY2ggcGllY2UKKyAgIG9mIHN1cHBsaWVkIGFk dmljZS4gRm9yIGV4YW1wbGU6CisgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdoYXNoX2pvaW4oZiBnKSBqb2luX29yZGVyKGYgZykgaW5k ZXhfc2NhbihmIG5vX3N1Y2hfaW5kZXgpJzsKK1NFVAorcmhhYXM9IyBFWFBMQUlOIChDT1NUUyBP RkYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT RUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorICAgICAgICBMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBm LmRpbTFfaWQgPSBkMS5pZAorICAgICAgICBMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorICAgICAgICBXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBBTkQgKGQyLmlkID0gZi5kaW0yX2lk KSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIg ZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIE1hdGVy aWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5E RVhfU0NBTihmIG5vX3N1Y2hfaW5kZXgpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVk ICovCisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCAqLworICAgSEFTSF9KT0lOKGcpIC8qIG5v dCBtYXRjaGVkICovCisgICBKT0lOX09SREVSKGYgZykgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8K KzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBGb3IgdGhpcyBxdWVyeSwgPGxpdGVy YWw+ZjwvbGl0ZXJhbD4gaXMgYSB2YWxpZCBhZHZpY2UgdGFyZ2V0LCBidXQKKyAgIDxsaXRlcmFs Pmc8L2xpdGVyYWw+IGlzIG5vdC4gVGhlcmVmb3JlLCB0aGUgcmVxdWVzdCB0byBwbGFjZQorICAg PGxpdGVyYWw+ZjwvbGl0ZXJhbD4gb24gdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoIGpvaW4gaXMg bGlzdGVkIGFzCisgICA8bGl0ZXJhbD5tYXRjaGVkPC9saXRlcmFsPiwgYnV0IHRoZSByZXF1ZXN0 IHRvIHBsYWNlIDxsaXRlcmFsPmc8L2xpdGVyYWw+CisgICBvbiB0aGUgaW5uZXIgc2lkZSBvZiBh IGhhc2ggam9pbiBpcyBsaXN0ZWQgYXMKKyAgIDxsaXRlcmFsPm5vdCBtYXRjaGVkPC9saXRlcmFs Pi4gVGhlIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+IGFkdmljZQorICAgdGFnIGludm9s dmVzIG9uZSB2YWxpZCB0YXJnZXQgYW5kIG9uZSBpbnZhbGlkIHRhcmdldCwgYW5kIHNvIGlzIGxp c3RlZCBhcworICAgPGxpdGVyYWw+cGFydGlhbGx5IG1hdGNoZWQ8L2xpdGVyYWw+LiBOb3RlIHRo YXQKKyAgIDxsaXRlcmFsPkhBU0hfSk9JTihmIGcpPC9saXRlcmFsPiBpcyBhY3R1YWxseSBhIHJl cXVlc3QgZm9yIHR3byBsb2dpY2FsbHkKKyAgIHNlcGFyYXRlIGJlaGF2aW9ycywgd2hlcmVhcyA8 bGl0ZXJhbD5KT0lOX09SREVSKGYgZyk8L2xpdGVyYWw+IGlzIGEgc2luZ2xlCisgICByZXF1ZXN0 LiBXaGVuIHByb3ZpZGluZyBhZHZpY2UgZmVlZGJhY2ssIDxsaXRlcmFsPkVYUExBSU48L2xpdGVy YWw+IHNob3dzCisgICBlYWNoIGxvZ2ljYWwgcmVxdWVzdCBzZXBhcmF0ZWx5LCB0b2dldGhlciB3 aXRoIGFsbCB0aGUgZmVlZGJhY2sgYXBwbGljYWJsZQorICAgdG8gdGhhdCByZXF1ZXN0IHR5cGUu CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEFkdmljZSBmZWVkYmFjayBjYW4gaW5jbHVkZSBh bnkgb2YgdGhlIGZvbGxvd2luZzoKKyAgPC9wYXJhPgorCisgIDxpdGVtaXplZGxpc3Q+CisKKyAg IDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgPGxpdGVyYWw+bWF0Y2hlZDwvbGl0ZXJhbD4g bWVhbnMgdGhhdCBhbGwgb2YgdGhlIHNwZWNpZmllZCBhZHZpY2UgdGFyZ2V0cworICAgICB3ZXJl IG9ic2VydmVkIHRvZ2V0aGVyIGR1cmluZyBxdWVyeSBwbGFubmluZywgYXQgYSB0aW1lIGF0IHdo aWNoIHRoZQorICAgICBhZHZpY2UgY291bGQgYmUgZW5mb3JjZWQuCisgICAgPC9wYXJhPgorICAg PC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5w YXJ0aWFsbHkgbWF0Y2hlZDwvbGl0ZXJhbD4gbWVhbnMgdGhhdCBzb21lIGJ1dCBub3QgYWxsIG9m IHRoZQorICAgICBzcGVjaWZpZWQgYWR2aWNlIHRhcmdldHMgd2VyZSBvYnNlcnZlZCBkdXJpbmcg cXVlcnkgcGxhbm5pbmcsIG9yIGFsbAorICAgICBvZiB0aGUgYWR2aWNlIHRhcmdldHMgd2VyZSBv YnNlcnZlZCBidXQgbm90IHRvZ2V0aGVyLiBGb3IgZXhhbXBsZSwgdGhpcworICAgICBtYXkgaGFw cGVuIGlmIGFsbCB0aGUgdGFyZ2V0cyBvZiA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBh ZHZpY2UKKyAgICAgaW5kaXZpZHVhbGx5IG1hdGNoIHRoZSBxdWVyeSwgYnV0IHRoZSBwcm9wb3Nl ZCBqb2luIG9yZGVyIGlzIG5vdCBsZWdhbC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgor CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFsPm5vdCBtYXRjaGVkPC9s aXRlcmFsPiBtZWFucyB0aGF0IG5vbmUgb2YgdGhlCisgICAgIHNwZWNpZmllZCBhZHZpY2UgdGFy Z2V0cyB3ZXJlIG9ic2VydmVkIGR1cmluZyBxdWVyeSBwbGFubmluZy4gVGhpcyBtYXkKKyAgICAg aGFwcGVuIGlmIHRoZSBhZHZpY2Ugc2ltcGx5IGRvZXNuJ3QgbWF0Y2ggdGhlIHF1ZXJ5LCBvciBp dCBtYXkKKyAgICAgb2NjdXIgaWYgdGhlIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIHF1ZXJ5IHdh cyBub3QgcGxhbm5lZCwgcGVyaGFwcworICAgICBiZWNhdXNlIGl0IHdhcyBnYXRlZCBieSBhIGNv bmRpdGlvbiB0aGF0IHdhcyBzaW1wbGlmaWVkIHRvIGNvbnN0YW50IGZhbHNlLgorICAgIDwvcGFy YT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgPGxp dGVyYWw+aW5hcHBsaWNhYmxlPC9saXRlcmFsPiBtZWFucyB0aGF0IHRoZSBhZHZpY2UgdGFnIGNv dWxkIG5vdAorICAgICBiZSBhcHBsaWVkIHRvIHRoZSBhZHZpY2UgdGFyZ2V0cyBmb3Igc29tZSBy ZWFzb24uIEZvciBleGFtcGxlLCB0aGlzIHdpbGwKKyAgICAgaGFwcGVuIGlmIHRoZSB1c2Ugb2Yg YSBub25leGlzdGVudCBpbmRleCBpcyByZXF1ZXN0ZWQsIG9yIGlmIGFuIGF0dGVtcHQKKyAgICAg aXMgbWFkZSB0byBjb250cm9sIHNlbWlqb2luIHVuaXF1ZW5lc3MgZm9yIGEgbm9uLXNlbWlqb2lu LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFy YT4KKyAgICAgPGxpdGVyYWw+Y29uZmxpY3Rpbmc8L2xpdGVyYWw+IG1lYW5zIHRoYXQgdHdvIG9y IG1vcmUgcGllY2VzIG9mIGFkdmljZQorICAgICByZXF1ZXN0IGluY29tcGF0aWJsZSBiZWhhdmlv cnMuIEZvciBleGFtcGxlLCBpZiB5b3UgYWR2aXNlIGEgc2VxdWVudGlhbAorICAgICBzY2FuIGFu ZCBhbiBpbmRleCBzY2FuIGZvciB0aGUgc2FtZSB0YWJsZSwgYm90aCByZXF1ZXN0cyB3aWxsIGJl IGZsYWdnZWQKKyAgICAgYXMgY29uZmxpY3RpbmcuIFRoaXMgYWxzbyBjb21tb25seSBoYXBwZW5z IGlmIGpvaW4gbWV0aG9kIGFkdmljZSBvcgorICAgICBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmlj ZSBpbXBsaWVzIGEgam9pbiBvcmRlciBpbmNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgb25lIGV4 cGxpY2l0bHkgc3BlY2lmaWVkOyBzZWUKKyAgICAgPHhyZWYgbGlua2VuZD0icGdwbGFuYWR2aWNl LWpvaW4tbWV0aG9kIiAvPi4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlz dGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFsPmZhaWxlZDwvbGl0ZXJhbD4gbWVhbnMg dGhhdCB0aGUgcXVlcnkgcGxhbiBkb2VzIG5vdCBjb21wbHkgd2l0aAorICAgICB0aGUgYWR2aWNl LiBUaGlzIG9ubHkgb2NjdXJzIGZvciBlbnRyaWVzIHRoYXQgYXJlIGFsc28gc2hvd24gYXMKKyAg ICAgPGxpdGVyYWw+bWF0Y2hlZDwvbGl0ZXJhbD4uIEl0IGZyZXF1ZW50bHkgb2NjdXJzIGZvciBl bnRyaWVzIHRoYXQgYXJlCisgICAgIGFsc28gbWFya2VkIGFzIDxsaXRlcmFsPmNvbmZsaWN0aW5n PC9saXRlcmFsPiBvcgorICAgICA8bGl0ZXJhbD5pbmFwcGxpY2FibGU8L2xpdGVyYWw+LiBIb3dl dmVyLCBpdCBjYW4gYWxzbyBvY2N1ciB3aGVuIHRoZQorICAgICBhZHZpY2UgaXMgdmFsaWQgaW5z b2ZhciBhcyA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gaXMgYWJsZQorICAgICB0 byBkZXRlcm1pbmUsIGJ1dCB0aGUgcGxhbm5lciBpcyBub3QgYWJsZSB0byBjb25zdHJ1Y3QgYSBs ZWdhbAorICAgICBwbGFuIHRoYXQgY2FuIGNvbXBseSB3aXRoIHRoZSBhZHZpY2UuIEl0IGlzIGlt cG9ydGFudCB0byBub3RlIHRoYXQgdGhlCisgICAgIHNhbml0eSBjaGVja3MgcGVyZm9ybWVkIGJ5 IDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBhcmUgZmFpcmx5CisgICAgIHN1cGVy ZmljaWFsIGFuZCBmb2N1c2VkIG1vc3RseSBvbiBsb29raW5nIGZvciBsb2dpY2FsIGluY29uc2lz dGVuY2llcyBpbgorICAgICB0aGUgYWR2aWNlIHN0cmluZzsgb25seSB0aGUgcGxhbm5lciBrbm93 cyB3aGF0IHdpbGwgYWN0dWFsbHkgd29yay4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgor CisgIDwvaXRlbWl6ZWRsaXN0PgorCisgIDxwYXJhPgorICAgQWxsIGFkdmljZSBzaG91bGQgYmUg bWFya2VkIGFzIGV4YWN0bHkgb25lIG9mIDxsaXRlcmFsPm1hdGNoZWQ8L2xpdGVyYWw+LAorICAg PGxpdGVyYWw+cGFydGlhbGx5IG1hdGNoZWQ8L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5ub3QgbWF0 Y2hlZDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBn cGxhbmFkdmljZS1jb25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFyYW1l dGVyczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWR2aWNlPC92YXJuYW1lPiAo PHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFkdmljZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJh bWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hZHZp Y2U8L3Zhcm5hbWU+IGlzIGFuIGFkdmljZSBzdHJpbmcgdG8gYmUKKyAgICAgIHVzZWQgZHVyaW5n IHF1ZXJ5IHBsYW5uaW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFt ZT5wZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U8L3Zhcm5hbWU+ ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5 Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZTwv dmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8 dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U8L3Zh cm5hbWU+IGNhdXNlcworICAgICAgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gdG8gYWx3YXlz IHNob3cgYW55IHN1cHBsaWVkIGFkdmljZSBhbmQgdGhlCisgICAgICBhc3NvY2lhdGVkCisgICAg ICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtZmVlZGJhY2siPmFkdmljZSBmZWVkYmFjazwv bGluaz4uCisgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD50cnVlPC9saXRlcmFs Pi4gSWYgc2V0IHRvCisgICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoaXMgaW5mb3Jt YXRpb24gd2lsbCBiZSBkaXNwbGF5ZWQgb25seSB3aGVuCisgICAgICA8bGl0ZXJhbD5FWFBMQUlO IChQTEFOX0FEVklDRSk8L2xpdGVyYWw+IGlzIHVzZWQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0 YWlsczwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgor ICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2Fkdmlj ZV9kZXRhaWxzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAg ICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0 YWlsczwvdmFybmFtZT4gYWxsb3dzCisgICAgICA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiB0 byBzaG93IGRldGFpbHMgcmVsYXRlZCB0byBwbGFuIGFkdmljZSBldmVuCisgICAgICB3aGVuIHBy ZXBhcmVkIHF1ZXJpZXMgYXJlIHVzZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcworICAgICAgPGxp dGVyYWw+ZmFsc2U8L2xpdGVyYWw+LiAgV2hlbiBwbGFubmluZyBhIHByZXBhcmVkIHF1ZXJ5LCBp dCBpcyBub3QKKyAgICAgIHBvc3NpYmxlIHRvIGtub3cgd2hldGhlciA8bGl0ZXJhbD5FWFBMQUlO PC9saXRlcmFsPiB3aWxsIGxhdGVyIGJlIHVzZWQsCisgICAgICBzbyBieSBkZWZhdWx0LCB0byBy ZWR1Y2Ugb3ZlcmhlYWQsIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPgorICAgICAg d2lsbCBub3QgZ2VuZXJhdGUgcGxhbiBhZHZpY2Ugb3IgZmVlZGJhY2sgb24gc3VwcGxpZWQgYWR2 aWNlLiBUaGlzIG1lYW5zCisgICAgICB0aGF0IGlmIDxsaXRlcmFsPkVYUExBSU4gRVhFQ1VURTwv bGl0ZXJhbD4gaXMgdXNlZCBvbiB0aGUgcHJlcGFyZWQgcXVlcnksCisgICAgICBpdCB3aWxsIG5v dCBiZSBhYmxlIHRvIHNob3cgdGhpcyBpbmZvcm1hdGlvbi4gQ2hhbmdpbmcgdGhpcyBzZXR0aW5n IHRvCisgICAgICA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiBhdm9pZHMgdGhpcyBwcm9ibGVtLCBi dXQgYWRkcyBhZGRpdGlvbmFsCisgICAgICBvdmVyaGVhZC4gSXQgaXMgcHJvYmFibHkgYSBnb29k IGlkZWEgdG8gZW5hYmxlIHRoaXMgb3B0aW9uIG9ubHkgaW4KKyAgICAgIHNlc3Npb25zIHdoZXJl IGl0IGlzIG5lZWRlZCwgcmF0aGVyIHRoYW4gb24gYSBzeXN0ZW0td2lkZSBiYXNpcy4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxp c3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuZmVlZGJh Y2tfd2FybmluZ3M8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmZlZWRiYWNrX3dh cm5pbmdzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAg PC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4K KyAgICAgIFdoZW4gc2V0IHRvIHRydWUsIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmZlZWRiYWNr X3dhcm5pbmdzPC92YXJuYW1lPgorICAgICAgZW1pdHMgYSB3YXJuaW5nIHdoZW5ldmVyIHN1cHBs aWVkIHBsYW4gYWR2aWNlIGlzIG5vdCBzdWNjZXNzZnVsbHkKKyAgICAgIGVuZm9yY2VkLiBUaGUg ZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zh cm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxw cmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgV2hlbiA8dmFybmFtZT5w Z19wbGFuX2FkdmljZS50cmFjZV9tYXNrPC92YXJuYW1lPiBpcworICAgICAgPGxpdGVyYWw+dHJ1 ZTwvbGl0ZXJhbD4sIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB3aWxsIHByaW50 CisgICAgICBtZXNzYWdlcyBkdXJpbmcgcXVlcnkgcGxhbm5pbmcgZWFjaCB0aW1lIHRoYXQKKyAg ICAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBhbHRlcnMgdGhlIG1hc2sgb2Yg YWxsb3dhYmxlIHF1ZXJ5CisgICAgICBwbGFuIHR5cGVzIGluIHJlc3BvbnNlIHRvIHN1cHBsaWVk IHBsYW4gYWR2aWNlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcworICAgICAgPGxpdGVyYWw+ZmFsc2U8 L2xpdGVyYWw+LiBUaGUgbWVzc2FnZXMgcHJpbnRlZCBieSB0aGlzIHNldHRpbmcgYXJlIG5vdAor ICAgICAgZXhwZWN0ZWQgdG8gYmUgdXNlZnVsIGV4Y2VwdCBmb3IgcHVycG9zZXMgb2YgZGVidWdn aW5nIHRoaXMgbW9kdWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBp ZD0icGdwbGFuYWR2aWNlLWxpbWl0YXRpb25zIj4KKyAgPHRpdGxlPkxpbWl0YXRpb25zPC90aXRs ZT4KKworICA8cGFyYT4KKyAgIEl0IGlzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gY29udHJv bCBhbnkgYXNwZWN0IG9mIHRoZSBwbGFubmVyJ3MgYmVoYXZpb3IKKyAgIHdpdGggcmVzcGVjdCB0 byBhZ2dyZWdhdGlvbi4gVGhpcyBpbmNsdWRlcyBib3RoIHdoZXRoZXIgYWdncmVnYXRlcyBhcmUK KyAgIGNvbXB1dGVkIGJ5IHNvcnRpbmcgb3IgaGFzaGluZywgYW5kIGFsc28gd2hldGhlciBzdHJh dGVnaWVzIHN1Y2ggYXMKKyAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy1lbmFibGUtZWFnZXItYWdncmVn YXRlIj5lYWdlciBhZ2dyZWdhdGlvbjwvbGluaz4gb3IKKyAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy1l bmFibGUtcGFydGl0aW9ud2lzZS1hZ2dyZWdhdGUiPnBhcnRpdGlvbndpc2UKKyAgIGFnZ3JlZ2F0 aW9uPC9saW5rPiBhcmUgdXNlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSXQgYWxzbyBp cyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIGNvbnRyb2wgYW55IGFzcGVjdCBvZiB0aGUgcGxh bm5lcidzCisgICBiZWhhdmlvciB3aXRoIHJlc3BlY3QgdG8gc2V0IG9wZXJhdGlvbnMgc3VjaCBh cyA8bGl0ZXJhbD5VTklPTjwvbGl0ZXJhbD4KKyAgIG9yIDxsaXRlcmFsPklOVEVSU0VDVDwvbGl0 ZXJhbD4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEFzIGRpc2N1c3NlZCBhYm92ZSB1bmRl ciA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtaG93LWl0LXdvcmtzIj5Ib3cKKyAgIEl0IFdv cmtzPC9saW5rPiwgdGhlIHVzZSBvZiBwbGFuIGFkdmljZSBjYW4gb25seSBhZmZlY3Qgd2hpY2gg cGxhbgorICAgdGhlIHBsYW5uZXIgY2hvb3NlcyBmcm9tIGFtb25nIHRob3NlIGl0IGJlbGlldmVz IHRvIGJlIHZpYWJsZS4gSXQgY2FuIG5ldmVyCisgICBmb3JjZSB0aGUgY2hvaWNlIG9mIGEgcGxh biB3aGljaCB0aGUgcGxhbm5lciByZWZ1c2VkIHRvIGNvbnNpZGVyIGluIHRoZQorICAgZmlyc3Qg cGxhY2UuCisgIDwvcGFyYT4KKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2Ut YXV0aG9yIj4KKyAgPHRpdGxlPkF1dGhvcjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBSb2JlcnQg SGFhcyA8ZW1haWw+cmhhYXNAcG9zdGdyZXNxbC5vcmc8L2VtYWlsPgorICA8L3BhcmE+CisgPC9z ZWN0Mj4KKworPC9zZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNzdlM2MwNDE0 NGUuLjRkYzYzZDFhZTUxIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzk4Myw2ICsz OTgzLDM5IEBAIHBnX3V1aWRfdAogcGdfd2NoYXIKIHBnX3djaGFyX3RibAogcGdwX2FybW9yX2hl YWRlcnNfc3RhdGUKK3BncGFfYWR2aWNlX2l0ZW0KK3BncGFfYWR2aWNlX3RhZ190eXBlCitwZ3Bh X2FkdmljZV90YXJnZXQKK3BncGFfaWRlbnRpZmllcgorcGdwYV9pbmRleF90YXJnZXQKK3BncGFf aW5kZXhfdHlwZQorcGdwYV9pdG1fdHlwZQorcGdwYV9qb19vdXRjb21lCitwZ3BhX2pvaW5fY2xh c3MKK3BncGFfam9pbl9tZW1iZXIKK3BncGFfam9pbl9zdGF0ZQorcGdwYV9qb2luX3N0cmF0ZWd5 CitwZ3BhX2pvaW5fdW5yb2xsZXIKK3BncGFfb3V0cHV0X2NvbnRleHQKK3BncGFfcGxhbl93YWxr ZXJfY29udGV4dAorcGdwYV9wbGFubmVyX3N0YXRlCitwZ3BhX3FmX3R5cGUKK3BncGFfcXVlcnlf ZmVhdHVyZQorcGdwYV9yaV9jaGVja2VyCitwZ3BhX3JpX2NoZWNrZXJfa2V5CitwZ3BhX3NjYW4K K3BncGFfc2Nhbl9zdHJhdGVneQorcGdwYV9zal91bmlxdWVfcmVsCitwZ3BhX3RhcmdldF90eXBl CitwZ3BhX3Ryb3ZlCitwZ3BhX3Ryb3ZlX2VudHJ5CitwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQK K3BncGFfdHJvdmVfZW50cnlfaGFzaAorcGdwYV90cm92ZV9lbnRyeV9rZXkKK3BncGFfdHJvdmVf bG9va3VwX3R5cGUKK3BncGFfdHJvdmVfcmVzdWx0CitwZ3BhX3Ryb3ZlX3NsaWNlCitwZ3BhX3Vu cm9sbGVkX2pvaW4KIHBnc29ja2V0CiBwZ3NxbF90aGluZ190CiBwZ3NzRW50cnkKLS0gCjIuNTEu MAoK --0000000000005f9cf4064bd60212 Content-Type: application/octet-stream; name="v18-0006-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Disposition: attachment; filename="v18-0006-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5hcy955 RnJvbSBhYzgwZjM5MWM4ODRiY2MxN2NlZmUxMjExNmIwMTA5NjgzZmIzZDM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwOTozNjowOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDYv N10gVGVzdCBwZ19wbGFuX2FkdmljZSB1c2luZyBhIG5ldyB0ZXN0X3BsYW5fYWR2aWNlCiBtb2R1 bGUuCgpUaGUgVEFQIHRlc3QgaW5jbHVkZWQgaW4gdGhpcyBuZXcgbW9kdWxlIHJ1bnMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMKd2l0aCBwZ19wbGFuX2FkdmljZSBsb2FkZWQuIEl0IGFycmFuZ2VzIGZv ciBlYWNoIHF1ZXJ5IHRvIGJlIHBsYW5uZWQKdHdpY2UuICBUaGUgZmlyc3QgdGltZSwgd2UgZ2Vu ZXJhdGUgcGxhbiBhZHZpY2UuIFRoZSBzZWNvbmQgdGltZSwgd2UKcmVwbGFuIHRoZSBxdWVyeSB1 c2luZyB0aGUgcmVzdWx0aW5nIGFkdmljZSBzdHJpbmcuIElmIHRoZSB0ZXN0cwpmYWlsLCB0aGF0 IG1lYW5zIHRoYXQgdXNpbmcgcGdfcGxhbl9hZHZpY2UgdG8gdGVsbCB0aGUgcGxhbm5lciB0bwpk byB3aGF0IGl0IHdhcyBnb2luZyB0byBkbyBhbnl3YXkgYnJlYWtzIHNvbWV0aGluZywgd2hpY2gg aW5kaWNhdGVzCmEgcHJvYmxlbSBlaXRoZXIgd2l0aCBwZ19wbGFuX2FkdmljZSBvciB3aXRoIHRo ZSBwbGFubmVyLgoKVGhlIHRlc3QgYWxzbyBlbmFibGVzIHBnX3BsYW5fYWR2aWNlLmZlZWRiYWNr X3dhcm5pbmdzLCBzbyB0aGF0IGlmIHRoZQpwbGFuIGFkdmljZSBmYWlscyB0byBhcHBseSBjbGVh bmx5IHdoZW4gdGhlIHF1ZXJ5IGlzIHJlcGxhbm5lZCwgYQpmYWlsdXJlIHdpbGwgb2NjdXIuCi0t LQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgfCAgMjggKysrKwog c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIHwgIDI5ICsrKysK IC4uLi90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsICB8ICA2NSArKysr KysrKwogLi4uL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jICAgICAgIHwgMTQz ICsrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyNjcgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2Fkdmlj ZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9w bGFuX2FkdmljZS90LzAwMV9yZXBsYW5fcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMKCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQppbmRleCA0NGM3MTYzYzFjZC4uZThjMzFlYzhlNzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMzgs NiArMzgsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3Rfb2F0X2hvb2tzIFwKIAkJICB0ZXN0X3Bh cnNlciBcCiAJCSAgdGVzdF9wZ19kdW1wIFwKKwkJICB0ZXN0X3BsYW5fYWR2aWNlIFwKIAkJICB0 ZXN0X3ByZWR0ZXN0IFwKIAkJICB0ZXN0X3JhZGl4dHJlZSBcCiAJCSAgdGVzdF9yYnRyZWUgXApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQKaW5kZXggMjYzNGE1MTk5MzUuLjY5OThhMjI2ZmE3IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVz b24uYnVpbGQKQEAgLTM5LDYgKzM5LDcgQEAgc3ViZGlyKCd0ZXN0X21pc2MnKQogc3ViZGlyKCd0 ZXN0X29hdF9ob29rcycpCiBzdWJkaXIoJ3Rlc3RfcGFyc2VyJykKIHN1YmRpcigndGVzdF9wZ19k dW1wJykKK3N1YmRpcigndGVzdF9wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3Rlc3RfcHJlZHRlc3Qn KQogc3ViZGlyKCd0ZXN0X3JhZGl4dHJlZScpCiBzdWJkaXIoJ3Rlc3RfcmJ0cmVlJykKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZSBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYmUwMjZjZTM0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyOCBAQAor IyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKKworUEdGSUxFREVT QyA9ICJ0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmlj ZSB3b3JrcyIKKworTU9EVUxFX2JpZyA9IHRlc3RfcGxhbl9hZHZpY2UKK09CSlMgPSBcCisJJChX SU4zMlJFUykgXAorCXRlc3RfcGxhbl9hZHZpY2UubworCitFWFRSQV9JTlNUQUxMID0gY29udHJp Yi9wZ19wbGFuX2FkdmljZQorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hTCitQR19D T05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQor aW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9j b250cmliLWdsb2JhbC5taworZW5kaWYKKworb3ZlcnJpZGUgQ1BQRkxBR1MgKz0gLUkkKHRvcF9z cmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworUkVHUkVTU19TSExJQj0kKGFic190b3Bf YnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitleHBvcnQgUkVH UkVTU19TSExJQgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNl L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1 aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZmRlNDIwYmFlZAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9tZXNv bi5idWlsZApAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0X3BsYW5fYWR2aWNlX3NvdXJj ZXMgPSBmaWxlcygKKyAgJ3Rlc3RfcGxhbl9hZHZpY2UuYycsCispCisKK2lmIGhvc3Rfc3lzdGVt ID09ICd3aW5kb3dzJworICB0ZXN0X3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5w cm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X3Bs YW5fYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3 aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmljZSB3b3JrcycsXSkKK2VuZGlmCisKK3Rlc3RfcGxh bl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X3BsYW5fYWR2aWNlJywKKyAgdGVzdF9wbGFu X2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBwZ19wbGFuX2FkdmljZV9p bmMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9 IHRlc3RfcGxhbl9hZHZpY2UKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X3BsYW5fYWR2 aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29u LmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAg J3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNz LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zOGZmYTRkMTFhZQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAw MV9yZXBsYW5fcmVncmVzcy5wbApAQCAtMCwwICsxLDY1IEBACisjIENvcHlyaWdodCAoYykgMjAy MS0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1biB0aGUg Y29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNrIGZvciBw cm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3Vz ZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGly bmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFy eSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicp OworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlvbi4K KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00pOworc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzPSd0ZXN0X3BsYW5fYWR2aWNlJworcGdfcGxhbl9hZHZpY2UuYWx3YXlz X2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitwZ19wbGFuX2FkdmljZS5mZWVkYmFja193 YXJuaW5ncz10cnVlCitFT00KKyRub2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRo KCIuLi8uLi8uLi8uLiIpOworCisjIC0tZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZp bmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jlc3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4KK215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVT U19TSExJQn0pOworCisjIC0tb3V0cHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBw bGFjZSB0aGUgb3V0cHV0IGZpbGVzLgorbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczo6dG1wX2NoZWNrOworCisjIC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9m IHRoZSBpbnB1dCBmaWxlcy4KK215ICRpbnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jl c3MiOworCisjIFJ1biB0aGUgdGVzdHMuCitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdS RVNTfSAuICIgIgorCSAgLiAiLS1iaW5kaXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwi ICIKKwkgIC4gIi0taG9zdD0iIC4gJG5vZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4g JG5vZGUtPnBvcnQgLiAiICIKKwkgIC4gIi0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIKKwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAg IgorCSAgLiAiLS1pbnB1dGRpcj1cIiRpbnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwi JG91dHB1dGRpclwiIik7CisKKyMgRHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwg aWYgdGhlcmUgaXMgb25lCitpZiAoJHJjICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRk aXIvcmVncmVzc2lvbi5kaWZmcyI7CisJaWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0g ZHVtcGluZyAkZGlmZnMgPT09XG4iOworCQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXBy aW50ICI9PT0gRU9GID09PVxuIjsKKwl9Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywg MCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFzcycpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmY1MDM5YjVjOAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5f YWR2aWNlLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRl c3RfcGxhbl9hZHZpY2UuYworICoJICBUZXN0IHBnX3BsYW5fYWR2aWNlIGJ5IHBsYW5uaW5nIGV2 ZXJ5IHF1ZXJ5IHdpdGggZ2VuZXJhdGVkIGFkdmljZS4KKyAqCisgKiBXaXRoIHRoaXMgbW9kdWxl IGxvYWRlZCwgZXZlcnkgdGltZSBhIHF1ZXJ5IGlzIGV4ZWN1dGVkLCB3ZSBlbmQgdXAKKyAqIHBs YW5uaW5nIGl0IHR3aWNlLiBUaGUgZmlyc3QgdGltZSB3ZSBwbGFuIGl0LCB3ZSBnZW5lcmF0ZSBw bGFuIGFkdmljZSwKKyAqIHdoaWNoIHdlIHRoZW4gZmVlZCBiYWNrIHRvIHBnX3BsYW5fYWR2aWNl IGFzIHRoZSBzdXBwbGllZCBwbGFuIGFkdmljZS4KKyAqIEl0IGlzIHRoZW4gcGxhbm5lZCBhIHNl Y29uZCB0aW1lIHVzaW5nIHRoYXQgYWR2aWNlLiBUaGlzIGhvcGVmdWxseQorICogYWxsb3dzIHVz IHRvIGRldGVjdCBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIGlzIGluY29ycmVjdCBvciBjYXVzZXMK KyAqIGZhaWx1cmVzIG9yIHBsYW4gY2hhbmdlcyBmb3Igc29tZSByZWFzb24uCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2Fk dmljZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisj aW5jbHVkZSAidXRpbHMvZ3VjLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIGJvb2wg aW5fcmVjdXJzaW9uID0gZmFsc2U7CisKK3N0YXRpYyBjaGFyICp0ZXN0X3BsYW5fYWR2aWNlX2Fk dmlzb3IoUGxhbm5lckdsb2JhbCAqZ2xvYiwKKwkJCQkJCQkJCSAgUXVlcnkgKnBhcnNlLAorCQkJ CQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkgIGludCBjdXJzb3JP cHRpb25zLAorCQkJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyBEZWZFbGVtICpm aW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKwor LyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQp Cit7CisJdm9pZAkJKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9v ayBob29rKTsKKworCS8qCisJICogQXNrIHBnX3BsYW5fYWR2aWNlIHRvIGdldCBhZHZpY2Ugc3Ry aW5ncyBmcm9tIHRlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcgorCSAqLworCWFkZF9hZHZpc29yX2Zu ID0KKwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9h ZHZpY2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCisJKCphZGRfYWR2 aXNvcl9mbikgKHRlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcik7Cit9CisKKy8qCisgKiBSZS1wbGFu IHRoZSBnaXZlbiBxdWVyeSBhbmQgcmV0dXJuIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmluZyBh cyB0aGUKKyAqIHN1cHBsaWVkIGFkdmljZS4KKyAqLworc3RhdGljIGNoYXIgKgordGVzdF9wbGFu X2FkdmljZV9hZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJ CSBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJIEV4 cGxhaW5TdGF0ZSAqZXMpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10OworCWludAkJCXNhdmVfbmVz dGxldmVsID0gMDsKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJRGVmRWxlbSAgICAqYWR2aWNl X3N0cmluZ19pdGVtOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBm cm9tIHRoZSBwbGFubmVyIGFuZCB0cmlnZ2VycyBwbGFubmluZywKKwkgKiB3ZSBuZWVkIGEgcmVj dXJzaW9uIGd1YXJkLgorCSAqLworCWlmIChpbl9yZWN1cnNpb24pCisJCXJldHVybiBOVUxMOwor CisJUEdfVFJZKCk7CisJeworCQlpbl9yZWN1cnNpb24gPSB0cnVlOworCisJCS8qCisJCSAqIFBs YW5uaW5nIGNhbiB0cmlnZ2VyIGV4cHJlc3Npb24gZXZhbHVhdGlvbiwgd2hpY2ggY2FuIHJlc3Vs dCBpbgorCQkgKiBzZW5kaW5nIE5PVElDRSBtZXNzYWdlcyBvciBvdGhlciBvdXRwdXQgdG8gdGhl IGNsaWVudC4gVG8gYXZvaWQKKwkJICogdGhhdCwgd2Ugc2V0IGNsaWVudF9taW5fbWVzc2FnZXMg PSBFUlJPUiBpbiB0aGUgaG9wZXMgb2YgZ2V0dGluZworCQkgKiB0aGUgc2FtZSBvdXRwdXQgd2l0 aCBhbmQgd2l0aG91dCB0aGlzIG1vZHVsZS4KKwkJICoKKwkJICogV2UgYWxzbyBuZWVkIHRvIHNl dCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgc28KKwkJICogdGhh dCBwZ19wbGFuX2FkdmljZSB3aWxsIGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcsIHNpbmNlIHRo ZSB3aG9sZQorCQkgKiBwb2ludCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdldCBhY2Nlc3MgdG8g dGhhdC4KKwkJICovCisJCXNhdmVfbmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVsKCk7CisJCXNl dF9jb25maWdfb3B0aW9uKCJjbGllbnRfbWluX21lc3NhZ2VzIiwgImVycm9yIiwKKwkJCQkJCSAg UEdDX1NVU0VULCBQR0NfU19TRVNTSU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRydWUs IDAsIGZhbHNlKTsKKwkJc2V0X2NvbmZpZ19vcHRpb24oInBnX3BsYW5fYWR2aWNlLmFsd2F5c19z dG9yZV9hZHZpY2VfZGV0YWlscyIsICJ0cnVlIiwKKwkJCQkJCSAgUEdDX1NVU0VULCBQR0NfU19T RVNTSU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKworCQkv KgorCQkgKiBSZXBsYW4uIFdlIG11c3QgY29weSB0aGUgUXVlcnksIGJlY2F1c2UgdGhlIHBsYW5u ZXIgbW9kaWZpZXMgaXQuCisJCSAqIChBcyBub3RlZCBlbHNld2hlcmUsIHRoYXQncyB1bmZvcnR1 bmF0ZTsgcGVyaGFwcyBpdCB3aWxsIGJlIGZpeGVkCisJCSAqIHNvbWUgZGF5LikKKwkJICovCisJ CXBzdG10ID0gcGxhbm5lcihjb3B5T2JqZWN0KHBhcnNlKSwgcXVlcnlfc3RyaW5nLCBjdXJzb3JP cHRpb25zLAorCQkJCQkJZ2xvYi0+Ym91bmRQYXJhbXMsIGVzKTsKKwl9CisJUEdfRklOQUxMWSgp OworCXsKKwkJaW5fcmVjdXJzaW9uID0gZmFsc2U7CisJfQorCVBHX0VORF9UUlkoKTsKKworCS8q IFJvbGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgKi8KKwlpZiAoc2F2ZV9uZXN0bGV2ZWwgPiAwKQor CQlBdEVPWGFjdF9HVUMoZmFsc2UsIHNhdmVfbmVzdGxldmVsKTsKKworCS8qIEV4dHJhY3QgYW5k IHJldHVybiB0aGUgYWR2aWNlIHN0cmluZyAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVmZWxlbV9i eV9kZWZuYW1lKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCQkJCQkJInBnX3BsYW5fYWR2 aWNlIik7CisJaWYgKHBncGFfaXRlbSA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAiZXh0ZW5zaW9u IHN0YXRlIGZvciBwZ19wbGFuX2FkdmljZSBub3QgZm91bmQiKTsKKwlhZHZpY2Vfc3RyaW5nX2l0 ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZSgoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZywKKwkJ CQkJCQkJCQkJCSAiYWR2aWNlX3N0cmluZyIpOworCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gPT0g TlVMTCkKKwkJZWxvZyhFUlJPUiwKKwkJCSAiYWR2aWNlIHN0cmluZyBmb3IgcGdfcGxhbl9hZHZp Y2Ugbm90IGZvdW5kIGluIGV4dGVuc2lvbiBzdGF0ZSIpOworCXJldHVybiBzdHJWYWwoYWR2aWNl X3N0cmluZ19pdGVtLT5hcmcpOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVt IG9iamVjdHMgZm9yIGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmlu ZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlm b3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRl bS0+ZGVmbmFtZSwgZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVy biBOVUxMOworfQotLSAKMi41MS4wCgo= --0000000000005f9cf4064bd60212 Content-Type: application/octet-stream; name="v18-0007-Add-pg_stash_advice-contrib-module.patch" Content-Disposition: attachment; filename="v18-0007-Add-pg_stash_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5hcy986 RnJvbSA4NmNmN2NhMTVkMjBiOGY1OWU3MzY5ODhiMjU4ZDE2NmQzYzExODM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjcgRmViIDIwMjYgMTY6NTg6MTQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOCA3 LzddIEFkZCBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpUaGlzIG1vZHVsZSBhbGxv d3MgcGxhbiBhZHZpY2Ugc3RyaW5ncyB0byBiZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5CmZyb20g YW4gaW4tbWVtb3J5IGFkdmljZSBzdGFzaC4gQWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBk eW5hbWljCnNoYXJlZCBtZW1vcnkgYW5kIG11c3QgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRl ZCBhZnRlciBhIHNlcnZlcgpyZXN0YXJ0LiBJZiBwZ19zdGFzaC5hZHZpY2Vfc3Rhc2ggaXMgc2V0 IHRvIHRoZSBuYW1lIG9mIGFuIGFkdmljZQpzdGFzaCwgYW5kIGlmIHF1ZXJ5IGlkZW50aWZpZXJz IGFyZSBlbmFibGVkLCB0aGUgcXVlcnkgaWRlbnRpZmllcgpmb3IgZWFjaCBxdWVyeSB3aWxsIGJl IGxvb2tlZCB1cCBpbiB0aGUgYWR2aWNlIHN0YXNoIGFuZCB0aGUKYXNzb2NpYXRlZCBhZHZpY2Ug c3RyaW5nLCBpZiBhbnksIHdpbGwgYmUgdXNlZCBlYWNoIHRpbWUgdGhhdCBxdWVyeQppcyBwbGFu bmVkLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBjb250cmliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgIHwgIDI2 ICsKIC4uLi9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0ICAgICAgICAgICAgICB8IDMwNSAr KysrKysKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAz NSArCiAuLi4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAgfCAgNDMg KwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMgICAgIHwgODc4ICsr KysrKysrKysrKysrKysrKwogLi4uL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29u dHJvbCAgIHwgICA1ICsKIC4uLi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5z cWwgICB8IDEzMCArKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAgICAgICAgICAgICAg IHwgMjE4ICsrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAg ICAgfCAgIDYgKwogMTMgZmlsZXMgY2hhbmdlZCwgMTY1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVp bGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9h ZHZpY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5zcWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9NYWtlZmlsZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMjIwNzEwMzRlNTEuLjE0ZTEyZDRm ZTJlIDEwMDY0NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUK QEAgLTMwLDYgKzMwLDcgQEAgU1VCRElSUyA9IFwKIAkJb2lkMm5hbWUJXAogCQlwYWdlaW5zcGVj dAlcCiAJCXBhc3N3b3JkY2hlY2sJXAorCQlwZ19zdGFzaF9hZHZpY2UJXAogCQlwZ19idWZmZXJj YWNoZQlcCiAJCXBnX2NvbGxlY3RfYWR2aWNlIFwKIAkJcGdfZnJlZXNwYWNlbWFwIFwKZGlmZiAt LWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGZm NDIyZDliN2ZjLi40ODYyYmE5N2VkMSAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAor KysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC01Miw2ICs1Miw3IEBAIHN1YmRpcigncGdfb3Zl cmV4cGxhaW4nKQogc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3BnX3ByZXdhcm0n KQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKK3N1YmRpcigncGdfc3Rhc2hfYWR2aWNlJykKIHN1YmRp cigncGdfc3RhdF9zdGF0ZW1lbnRzJykKIHN1YmRpcigncGdzdGF0dHVwbGUnKQogc3ViZGlyKCdw Z19zdXJnZXJ5JykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxl IGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmNkOWI3ZjMwMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyNiBAQAorIyBjb250cmliL3Bn X3N0YXNoX2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfc3Rhc2hfYWR2aWNlCitP QkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19zdGFzaF9hZHZpY2UubworCitFWFRFTlNJT04g PSBwZ19zdGFzaF9hZHZpY2UKK0RBVEEgPSBwZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwKK1BHRklM RURFU0MgPSAicGdfc3Rhc2hfYWR2aWNlIC0gc3RvcmUgYW5kIGF1dG9tYXRpY2FsbHkgYXBwbHkg cGxhbiBhZHZpY2UiCisKK1JFR1JFU1MgPSBwZ19zdGFzaF9hZHZpY2UKK0VYVFJBX0lOU1RBTEwg PSBjb250cmliL3BnX3BsYW5fYWR2aWNlCisKK2lmZGVmIFVTRV9QR1hTCitQR19DUFBGTEFHUyA9 IC1JJChpbmNsdWRlZGlyX3NlcnZlcikvZXh0ZW5zaW9uCitQR19DT05GSUcgPSBwZ19jb25maWcK K1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitl bHNlCitQR19DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9jb250cmliL3BnX3BsYW5fYWR2aWNl CitzdWJkaXIgPSBjb250cmliL3BnX3N0YXNoX2FkdmljZQordG9wX2J1aWxkZGlyID0gLi4vLi4K K2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0 b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dCBiL2Nv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZS5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBkZTZjMTBjZGQxCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNl Lm91dApAQCAtMCwwICsxLDMwNSBAQAorQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2U7 CitTRVQgY29tcHV0ZV9xdWVyeV9pZCA9IG9uOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAwOworLS0gSGVscGVyOiBleHRyYWN0IHF1ZXJ5IGlkZW50aWZpZXIgZnJvbSBF WFBMQUlOIFZFUkJPU0Ugb3V0cHV0LgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZ2V0X3F1 ZXJ5X2lkKHF1ZXJ5X3RleHQgdGV4dCkgUkVUVVJOUyBiaWdpbnQKK0xBTkdVQUdFIHBscGdzcWwg QVMgJCQKK0RFQ0xBUkUKKyAgICBsaW5lIHRleHQ7CisgICAgcWlkIGJpZ2ludDsKK0JFR0lOCisg ICAgRk9SIGxpbmUgSU4gRVhFQ1VURSAnRVhQTEFJTiAoVkVSQk9TRSwgRk9STUFUIFRFWFQpICcg fHwgcXVlcnlfdGV4dAorICAgIExPT1AKKyAgICAgICAgSUYgbGluZSB+ICdRdWVyeSBJZGVudGlm aWVyOicgVEhFTgorICAgICAgICAgICAgcWlkIDo9IHJlZ2V4cF9yZXBsYWNlKGxpbmUsICcuKlF1 ZXJ5IElkZW50aWZpZXI6XHMqKC0/XGQrKS4qJywgJ1wxJyk6OmJpZ2ludDsKKyAgICAgICAgICAg IFJFVFVSTiBxaWQ7CisgICAgICAgIEVORCBJRjsKKyAgICBFTkQgTE9PUDsKKyAgICBSQUlTRSBF WENFUFRJT04gJ1F1ZXJ5IElkZW50aWZpZXIgbm90IGZvdW5kIGluIEVYUExBSU4gb3V0cHV0JzsK K0VORDsKKyQkOworQ1JFQVRFIFRBQkxFIGFhX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXks IGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gYWFfZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21l IGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZGltMTsKK0NSRUFURSBUQUJMRSBhYV9kaW0y IChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGFhX2RpbTIgKGlkLCBkaW0y LCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgNykgKyAx CisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9k aW0yOworQ1JFQVRFIFRBQkxFIGFhX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0x X2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBhYV9kaW0xIChpZCksCisJZGltMl9pZCBp bnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgYWFfZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGFhX2ZhY3QKKwlTRUxFQ1QgZywgKGcl MTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNV VU0gQU5BTFlaRSBhYV9mYWN0OworLS0gR2V0IHRoZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNU IGdldF9xdWVyeV9pZCgkJAorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQg XGdzZXQKKy0tIENyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2ggYW5kIHBvaW50IHBnX3N0YXNoX2Fkdmlj ZSBhdCBpdC4KK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX3N0YXNoJyk7 CisgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19zdGFz aCc7CistLSBSdW4gb3VyIHRlc3QgcXVlcnkgZm9yIHRoZSBmaXJzdCB0aW1lIHdpdGggbm8gc3Rh c2hlZCBhZHZpY2UuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3Qg ZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBh YV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIg PSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2gg Q29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFz aCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFf ZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0xIGQxCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKygxMSByb3dzKQorCistLSBGb3JjZSBhbiBpbmRleCBz Y2FuIG9uIGRpbTEKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gn LCA6J3FpZCcsCisJJ0lOREVYX1NDQU4oZDEgYWFfZGltMV9wa2V5KScpOworIHBnX3NldF9zdGFz aGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGFhX2Rp bTFfcGtleSBvbiBhYV9kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oZDEgYWFfZGltMV9wa2V5KSAv KiBtYXRjaGVkICovCisoMTMgcm93cykKKworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9pbiBv cmRlcgorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlk JywKKwknam9pbl9vcmRlcihmIGQxIGQyKScpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBhYV9kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hlZCAqLworKDEz IHJvd3MpCisKKy0tIEZvcmNlIGFuIGFsdGVybmF0aXZlIGpvaW4gc3RyYXRlZ3kKK1NFTEVDVCBw Z19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCA6J3FpZCcsCisJJ05FU1RFRF9M T09QX1BMQUlOKGQxKScpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJP TSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAor CUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBD b25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFj dCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFh X2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgYWFfZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IGYuZGltMV9pZCkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEpIC8qIG1hdGNo ZWQgKi8KKygxMiByb3dzKQorCistLSBBZGQgYSB1c2VsZXNzIGV4dHJhIGVudHJ5IHRvIG91ciB0 ZXN0IHN0YXNoLiBTaG91bGRuJ3QgY2hhbmdlIHRoZSByZXN1bHQKKy0tIGZyb20gdGhlIHByZXZp b3VzIHRlc3QuCistLSAoSWYgd2UncmUgdW5sdWNreSBlbm91Z2ggdGhhdCB0aGlzIGV2ZXIgZmFp bHMgZHVlIHRvIHF1ZXJ5IElEIGFjdHVhbGx5CistLSBiZWluZyAxLCB0aGVuIGp1c3QgcHV0IHNv bWUgb3RoZXIgY29uc3RhbnQgaGVyZS4gU2VlbXMgdW5saWtlbHkuKQorU0VMRUNUIHBnX3NldF9z dGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDEsICdTRVFfU0NBTihkMSknKTsKKyBwZ19z ZXRfc3Rhc2hlZF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lO IGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlk KQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0yIGQyCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGFhX2Rp bTFfcGtleSBvbiBhYV9kaW0xIGQxCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbTFf aWQpCisgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIE5FU1RFRF9MT09QX1BMQUlOKGQxKSAvKiBtYXRjaGVkICovCisoMTIgcm93cykKKworLS0g VHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1cmUgaXQgZG9lcyBub3RoaW5nCitTRUxFQ1QgcGdf Y3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworIHBnX2NyZWF0ZV9h ZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VU IHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3NfZW1wdHlfc3Rhc2gnOworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lk ID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJf aWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorKDExIHJvd3MpCisKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNo IGluZGl2aWR1YWxseSBhbmQgYWxsIG9mIHRoZW0gdG9nZXRoZXIsCistLSBidXQgbm90IGEgbm9u ZXhpc3RlbnQgc3Rhc2guCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9S REVSIEJZIHN0YXNoX25hbWU7CisgICAgIHN0YXNoX25hbWUgICAgICB8IG51bV9lbnRyaWVzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX2VtcHR5X3N0YXNo IHwgICAgICAgICAgIDAKKyByZWdyZXNzX3N0YXNoICAgICAgIHwgICAgICAgICAgIDIKKygyIHJv d3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2 aWNlX3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7Cisg IHN0YXNoX25hbWUgICB8ICAgICBhZHZpY2Vfc3RyaW5nICAgICAKKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3Nfc3Rhc2ggfCBTRVFfU0NBTihkMSkKKyBy ZWdyZXNzX3N0YXNoIHwgTkVTVEVEX0xPT1BfUExBSU4oZDEpCisoMiByb3dzKQorCitTRUxFQ1Qg c3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29u dGVudHMoJ3JlZ3Jlc3NfZW1wdHlfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKyBzdGFzaF9u YW1lIHwgYWR2aWNlX3N0cmluZyAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KKygwIHJv d3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2Fk dmljZV9zdGFzaF9jb250ZW50cyhOVUxMKSBPUkRFUiBCWSBxdWVyeV9pZDsKKyAgc3Rhc2hfbmFt ZSAgIHwgICAgIGFkdmljZV9zdHJpbmcgICAgIAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQorIHJlZ3Jlc3Nfc3Rh c2ggfCBORVNURURfTE9PUF9QTEFJTihkMSkKKygyIHJvd3MpCisKK1NFTEVDVCBzdGFzaF9uYW1l LCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygnbm9f c3VjaF9zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworRVJST1I6ICBhZHZpY2Ugc3Rhc2ggIm5v X3N1Y2hfc3Rhc2giIGRvZXMgbm90IGV4aXN0CistLSBUZXN0IHRoYXQgd2UgY2FuIHJlbW92ZSBh ZHZpY2UuCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidx aWQnLCBudWxsKTsKKyBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIAorKDEgcm93KQorCitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVn cmVzc19zdGFzaCc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBm CisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4g YWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwy ID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNo IENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhh c2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFh X2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBhYV9kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisoMTEgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19n ZXRfYWR2aWNlX3N0YXNoZXMoKSBPUkRFUiBCWSBzdGFzaF9uYW1lOworICAgICBzdGFzaF9uYW1l ICAgICAgfCBudW1fZW50cmllcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t CisgcmVncmVzc19lbXB0eV9zdGFzaCB8ICAgICAgICAgICAwCisgcmVncmVzc19zdGFzaCAgICAg ICB8ICAgICAgICAgICAxCisoMiByb3dzKQorCitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0 cmluZworCUZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygncmVncmVzc19zdGFzaCcp IE9SREVSIEJZIHF1ZXJ5X2lkOworICBzdGFzaF9uYW1lICAgfCBhZHZpY2Vfc3RyaW5nIAorLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3Nfc3Rhc2ggfCBTRVFfU0NBTihk MSkKKygxIHJvdykKKworLS0gQ2xlYW4gdXAgc3RhdGUgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5 LgorU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX3N0YXNoJyk7CisgcGdfZHJv cF9hZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NF TEVDVCBwZ19kcm9wX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworIHBnX2Ry b3BfYWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIv cGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5iNjY2YmNkMGYxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rh c2hfYWR2aWNlL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChjKSAy MDIyLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX3N0YXNo X2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19zdGFzaF9hZHZpY2UuYycKKykKKworaWYg aG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3N0YXNoX2FkdmljZV9zb3VyY2VzICs9IHJj X2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUn LCAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19zdGFzaF9hZHZpY2Ug LSBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZScsXSkKK2VuZGlmCisK K3BnX3N0YXNoX2FkdmljZSA9IHNoYXJlZF9tb2R1bGUoJ3BnX3N0YXNoX2FkdmljZScsCisgIHBn X3N0YXNoX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbcGdfcGxhbl9h ZHZpY2VfaW5jLCBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJyldLAorICBrd2FyZ3M6IGNvbnRyaWJf bW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gcGdfc3Rhc2hfYWR2aWNlCisKK2luc3Rh bGxfZGF0YSgKKyAgJ3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19zdGFzaF9hZHZp Y2UuY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisKK3Rlc3RzICs9 IHsKKyAgJ25hbWUnOiAncGdfc3Rhc2hfYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9z b3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdy ZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICBdLAor ICB9LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2 aWNlLS0xLjAuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0x LjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OGRlZGQ4ZWYx YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2Fk dmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlz IHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hv IFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxl LiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9u YW1lIHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY3JlYXRl X2FkdmljZV9zdGFzaCcKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf ZHJvcF9hZHZpY2Vfc3Rhc2goc3Rhc2hfbmFtZSB0ZXh0KQorUkVUVVJOUyB2b2lkCitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3BnX2Ryb3BfYWR2aWNlX3N0YXNoJworTEFOR1VBR0UgQyBTVFJJQ1Q7 CisKK0NSRUFURSBGVU5DVElPTiBwZ19zZXRfc3Rhc2hlZF9hZHZpY2Uoc3Rhc2hfbmFtZSB0ZXh0 LCBxdWVyeV9pZCBiaWdpbnQsCisJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcgdGV4dCkKK1JFVFVS TlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19zZXRfc3Rhc2hlZF9hZHZpY2UnCitM QU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKAorCU9V VCBzdGFzaF9uYW1lIHRleHQsCisJT1VUIG51bV9lbnRyaWVzIGJpZ2ludAorKQorUkVUVVJOUyBT RVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2FkdmljZV9zdGFzaGVz JworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0 YXNoX2NvbnRlbnRzKAorCUlOT1VUIHN0YXNoX25hbWUgdGV4dCwKKwlPVVQgcXVlcnlfaWQgYmln aW50LAorCU9VVCBhZHZpY2Vfc3RyaW5nIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitB UyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMnCitMQU5H VUFHRSBDOworCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2go dGV4dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2Ryb3BfYWR2aWNl X3N0YXNoKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRf YWR2aWNlX3N0YXNoX2NvbnRlbnRzKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBG VU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwg T04gRlVOQ1RJT04gcGdfc2V0X3N0YXNoZWRfYWR2aWNlKHRleHQsIGJpZ2ludCwgdGV4dCkgRlJP TSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9h ZHZpY2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYmVhOWIwZTE2MQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCkBAIC0w LDAgKzEsODc4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGFzaF9hZHZpY2Uu YworICoJICBBcHBseSBwbGFuIGFkdmljZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IFNRTCBtb2Rp ZmljYXRpb25zLgorICoKKyAqIFRoaXMgbW9kdWxlIGFsbG93cyBwbGFuIGFkdmljZSBzdHJpbmdz IChhcyB1c2VkIGFuZCBnZW5lcmF0ZWQgYnkKKyAqIHBnX3BsYW5fYWR2aWNlKSB0byBiZSAic3Rh c2hlZCIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IGFuZCwgZnJvbQorICogdGhlcmUsIGF1dG9t YXRpY2FsbHkgYmUgYXBwbGllZCB0byBxdWVyaWVzIGFzIHRoZXkgYXJlIHBsYW5uZWQuCisgKiBZ b3UgY2FuIGNyZWF0ZSBhbnkgbnVtYmVyIG9mIGFkdmljZSBzdGFzaGVzLCBlYWNoIG9mIHdoaWNo IGlzCisgKiBpZGVudGlmaWVkIGJ5IGEgaHVtYW4tcmVhZGFibGUsIEFTQ0lJIG5hbWUsIGFuZCBl YWNoIG9mIHRoZW0gaXMKKyAqIGVzc2VudGlhbGx5IGEgcXVlcnkgSUQgLT4gYWR2aWNlX3N0cmlu ZyBtYXBwaW5nLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uv cGdfc3Rhc2hfYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiY29t bW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisj aW5jbHVkZSAibGliL2RzaGFzaC5oIgorI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisj aW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3Ry eS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5o IgorCitQR19NT0RVTEVfTUFHSUM7CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY3JlYXRlX2Fk dmljZV9zdGFzaCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2Ryb3BfYWR2aWNlX3N0YXNoKTsK K1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyk7CitQR19G VU5DVElPTl9JTkZPX1YxKHBnX2dldF9hZHZpY2Vfc3Rhc2hlcyk7CitQR19GVU5DVElPTl9JTkZP X1YxKHBnX3NldF9zdGFzaGVkX2FkdmljZSk7CisKK3R5cGVkZWYgc3RydWN0IHBnc2Ffc2hhcmVk X3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hlOworCWludAkJCXN0 YXNoX3RyYW5jaGU7CisJaW50CQkJZW50cnlfdHJhbmNoZTsKKwlpbnQJCQluZXh0X3N0YXNoX2lk OworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2hhc2hfdGFibGVfaGFuZGxlIHN0YXNoX2hhc2g7CisJ ZHNoYXNoX3RhYmxlX2hhbmRsZSBlbnRyeV9oYXNoOworfSBwZ3NhX3NoYXJlZF9zdGF0ZTsKKwor dHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaAoreworCWNoYXIJCW5hbWVbTkFNRURBVEFMRU5dOwor CWludAkJCXBnc2Ffc3Rhc2hfaWQ7Cit9IHBnc2Ffc3Rhc2g7CisKK3R5cGVkZWYgc3RydWN0IHBn c2FfZW50cnlfa2V5Cit7CisJaW50CQkJcGdzYV9zdGFzaF9pZDsKKwlpbnQ2NAkJcXVlcnlJZDsK K30gcGdzYV9lbnRyeV9rZXk7CisKK3R5cGVkZWYgc3RydWN0IHBnc2FfZW50cnkKK3sKKwlwZ3Nh X2VudHJ5X2tleSBrZXk7CisJZHNhX3BvaW50ZXIgYWR2aWNlX3N0cmluZzsKK30gcGdzYV9lbnRy eTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaF9jb3VudAoreworCXVpbnQzMgkJc3RhdHVz OworCWludAkJCXBnc2Ffc3Rhc2hfaWQ7CisJaW50NjQJCW51bV9lbnRyaWVzOworfSBwZ3NhX3N0 YXNoX2NvdW50OworCisjZGVmaW5lIFNIX1BSRUZJWCBwZ3NhX3N0YXNoX2NvdW50X3RhYmxlCisj ZGVmaW5lIFNIX0VMRU1FTlRfVFlQRSBwZ3NhX3N0YXNoX2NvdW50CisjZGVmaW5lIFNIX0tFWV9U WVBFIGludAorI2RlZmluZSBTSF9LRVkgcGdzYV9zdGFzaF9pZAorI2RlZmluZSBTSF9IQVNIX0tF WSh0Yiwga2V5KSBtdXJtdXJoYXNoMzIoKHVpbnQzMikga2V5KQorI2RlZmluZSBTSF9FUVVBTCh0 YiwgYSwgYikgKGEgPT0gYikKKyNkZWZpbmUgU0hfU0NPUEUgc3RhdGljIGlubGluZQorI2RlZmlu ZSBTSF9ERUZJTkUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNo LmgiCisKK3R5cGVkZWYgc3RydWN0IHBnc2Ffc3Rhc2hfbmFtZQoreworCXVpbnQzMgkJc3RhdHVz OworCWludAkJCXBnc2Ffc3Rhc2hfaWQ7CisJY2hhcgkgICAqbmFtZTsKK30gcGdzYV9zdGFzaF9u YW1lOworCisjZGVmaW5lIFNIX1BSRUZJWCBwZ3NhX3N0YXNoX25hbWVfdGFibGUKKyNkZWZpbmUg U0hfRUxFTUVOVF9UWVBFIHBnc2Ffc3Rhc2hfbmFtZQorI2RlZmluZSBTSF9LRVlfVFlQRSBpbnQK KyNkZWZpbmUgU0hfS0VZIHBnc2Ffc3Rhc2hfaWQKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtl eSkgbXVybXVyaGFzaDMyKCh1aW50MzIpIGtleSkKKyNkZWZpbmUgU0hfRVFVQUwodGIsIGEsIGIp IChhID09IGIpCisjZGVmaW5lIFNIX1NDT1BFIHN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVG SU5FCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisv KiBTaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCitzdGF0aWMgcGdzYV9zaGFyZWRfc3RhdGUgKnBn c2Ffc3RhdGU7CitzdGF0aWMgZHNhX2FyZWEgKnBnc2FfZHNhX2FyZWE7CitzdGF0aWMgZHNoYXNo X3RhYmxlICpwZ3NhX3N0YXNoX2RzaGFzaDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKnBnc2FfZW50 cnlfZHNoYXNoOworCisvKiBTaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgcGFyYW1ldGVycyAqLwor c3RhdGljIGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMgPSB7 CisJTkFNRURBVEFMRU4sCisJc2l6ZW9mKHBnc2Ffc3Rhc2gpLAorCWRzaGFzaF9zdHJjbXAsCisJ ZHNoYXNoX3N0cmhhc2gsCisJZHNoYXNoX3N0cmNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8q IGdldHMgc2V0IGF0IHJ1bnRpbWUgKi8KK307CisKK3N0YXRpYyBkc2hhc2hfcGFyYW1ldGVycyBw Z3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzID0geworCXNpemVvZihwZ3NhX2VudHJ5X2tleSks CisJc2l6ZW9mKHBnc2FfZW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJZHNoYXNoX21lbWhhc2gs CisJZHNoYXNoX21lbWNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8qIGdldHMgc2V0IGF0IHJ1 bnRpbWUgKi8KK307CisKKy8qIEdVQyB2YXJpYWJsZSAqLworc3RhdGljIGNoYXIgKnBnX3N0YXNo X2FkdmljZV9zdGFzaF9uYW1lID0gIiI7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJsZXMgKi8K K3N0YXRpYyBNZW1vcnlDb250ZXh0IHBnX3N0YXNoX2FkdmljZV9tY3h0OworCisvKiBGdW5jdGlv biBwcm90b3R5cGVzICovCitzdGF0aWMgY2hhciAqcGdzYV9hZHZpc29yKFBsYW5uZXJHbG9iYWwg Kmdsb2IsCisJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCSAgRXhwbGFpblN0YXRl ICplcyk7CitzdGF0aWMgdm9pZCBwZ3NhX2F0dGFjaCh2b2lkKTsKK3N0YXRpYyB2b2lkIHBnc2Ff Y2hlY2tfc3Rhc2hfbmFtZShjaGFyICpzdGFzaF9uYW1lKTsKK3N0YXRpYyBib29sIHBnc2FfY2hl Y2tfc3Rhc2hfbmFtZV9ndWMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJ ICBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyB2b2lkIHBnc2FfY2xlYXJfYWR2aWNlX3N0cmlu ZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKTsKK3N0YXRpYyB2b2lkIHBnc2FfY3Jl YXRlX3N0YXNoKGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9kcm9wX3N0YXNo KGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9pbml0X3NoYXJlZF9zdGF0ZSh2 b2lkICpwdHIsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50CXBnc2FfbG9va3VwX3N0YXNoX2lkKGNo YXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9zZXRfYWR2aWNlX3N0cmluZyhjaGFy ICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkgICBjaGFyICphZHZpY2Vfc3Ry aW5nKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19p bml0KHZvaWQpCit7CisJdm9pZAkJKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fk dmlzb3JfaG9vayBob29rKTsKKworCS8qIElmIGNvbXB1dGVfcXVlcnlfaWQgPSAnYXV0bycsIHdl IHdvdWxkIGxpa2UgcXVlcnkgSURzLiAqLworCUVuYWJsZVF1ZXJ5SWQoKTsKKworCS8qIERlZmlu ZSBvdXIgR1VDcy4gKi8KKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgicGdfc3Rhc2hfYWR2 aWNlLnN0YXNoX25hbWUiLAorCQkJCQkJCSAgICJOYW1lIG9mIHRoZSBhZHZpY2Ugc3Rhc2ggdG8g YmUgdXNlZCBpbiB0aGlzIHNlc3Npb24uIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZw Z19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSwKKwkJCQkJCQkgICAiIiwKKwkJCQkJCQkgICBQR0Nf VVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBnc2FfY2hlY2tfc3Rhc2hfbmFtZV9n dWMsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhS ZXNlcnZlZCgicGdfc3Rhc2hfYWR2aWNlIik7CisKKwkvKiBUZWxsIHBnX3BsYW5fYWR2aWNlIHRo YXQgd2Ugd2FudCB0byBwcm92aWRlIGFkdmljZSBzdHJpbmdzLiAqLworCWFkZF9hZHZpc29yX2Zu ID0KKwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9h ZHZpY2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCSgqYWRkX2Fkdmlz b3JfZm4pIChwZ3NhX2Fkdmlzb3IpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9u IHRvIGNyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2gKKyAqLworRGF0dW0KK3BnX2NyZWF0ZV9hZHZpY2Vf c3Rhc2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lID0gdGV4dF90 b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCXBnc2FfY2hlY2tfc3Rhc2hfbmFt ZShzdGFzaF9uYW1lKTsKKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkp CisJCXBnc2FfYXR0YWNoKCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdf RVhDTFVTSVZFKTsKKwlwZ3NhX2NyZWF0ZV9zdGFzaChzdGFzaF9uYW1lKTsKKwlMV0xvY2tSZWxl YXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICog U1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRyb3AgYW4gYWR2aWNlIHN0YXNoCisgKi8KK0RhdHVt CitwZ19kcm9wX2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0 YXNoX25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJcGdz YV9jaGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5 X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3Nh X3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCXBnc2FfZHJvcF9zdGFzaChzdGFzaF9uYW1l KTsKKwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgp OworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYSBsaXN0IG9m IGFkdmljZSBzdGFzaGVzCisgKi8KK0RhdHVtCitwZ19nZXRfYWR2aWNlX3N0YXNoZXMoUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAq KSBmY2luZm8tPnJlc3VsdGluZm87CisJZHNoYXNoX3NlcV9zdGF0dXMgaXRlcmF0b3I7CisJcGdz YV9lbnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJcGdzYV9zdGFzaF9jb3VudF90 YWJsZV9oYXNoICpjaGFzaDsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKwor CS8qIEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4g Ki8KKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0 YWNoKCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgcGVyIHN0YXNoLiAq LworCWNoYXNoID0gcGdzYV9zdGFzaF9jb3VudF90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsIDY0LCBOVUxMKTsKKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX2VudHJ5 X2RzaGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0 b3IpKSAhPSBOVUxMKQorCXsKKwkJcGdzYV9zdGFzaF9jb3VudCAqYzsKKwkJYm9vbAkJZm91bmQ7 CisKKwkJYyA9IHBnc2Ffc3Rhc2hfY291bnRfdGFibGVfaW5zZXJ0KGNoYXNoLAorCQkJCQkJCQkJ CSAgZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwkJaWYg KCFmb3VuZCkKKwkJCWMtPm51bV9lbnRyaWVzID0gMTsKKwkJZWxzZQorCQkJYy0+bnVtX2VudHJp ZXMrKzsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwkvKiBFbWl0IHJlc3Vs dHMuICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9zdGFzaF9kc2hhc2gsIHRy dWUpOworCXdoaWxlICgoc3Rhc2ggPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVM TCkKKwl7CisJCURhdHVtCQl2YWx1ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdOworCQlwZ3NhX3N0 YXNoX2NvdW50ICpjOworCisJCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oc3Rhc2gt Pm5hbWUpOworCQludWxsc1swXSA9IGZhbHNlOworCisJCWMgPSBwZ3NhX3N0YXNoX2NvdW50X3Rh YmxlX2xvb2t1cChjaGFzaCwgc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQpOworCQl2YWx1ZXNbMV0gPSBJ bnQ2NEdldERhdHVtKGMgPT0gTlVMTCA/IDAgOiBjLT5udW1fZW50cmllcyk7CisJCW51bGxzWzFd ID0gZmFsc2U7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJz aW5mby0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9zZXFf dGVybSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1j YWxsYWJsZSBmdW5jdGlvbiB0byBwcm92aWRlIGFkdmljZSBzdGFzaCBjb250ZW50cworICovCitE YXR1bQorcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhQR19GVU5DVElPTl9BUkdTKQorewor CVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0 aW5mbzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwljaGFyCSAgICpzdGFzaF9uYW1l ID0gTlVMTDsKKwlwZ3NhX3N0YXNoX25hbWVfdGFibGVfaGFzaCAqbmhhc2ggPSBOVUxMOworCWlu dAkJCXN0YXNoX2lkID0gMDsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKworCUluaXRNYXRlcmlhbGl6 ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkg aWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2gg PT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwkvKiBVc2VyIGNhbiBwYXNzIE5VTEwgZm9y IGFsbCBzdGFzaGVzLCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpZmljIHN0YXNoLiAqLworCWlmICgh UEdfQVJHSVNOVUxMKDApKQorCXsKKwkJc3Rhc2hfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19H RVRBUkdfVEVYVF9QUCgwKSk7CisJCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShzdGFzaF9uYW1lKTsK KwkJc3Rhc2hfaWQgPSBwZ3NhX2xvb2t1cF9zdGFzaF9pZChzdGFzaF9uYW1lKTsKKworCQkvKiBJ ZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBzdGFzaCBuYW1lLCBpdCBzaG91bGQgZXhpc3QuICovCisJ CWlmIChzdGFzaF9pZCA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2gg XCIlc1wiIGRvZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOworCX0KKwllbHNlCisJeworCQlw Z3NhX3N0YXNoICpzdGFzaDsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBkdW1waW5nIGRhdGEgYWJv dXQgYWxsIHN0YXNoZXMsIHdlIG5lZWQgYW4gSUQtPm5hbWUgbG9va3VwCisJCSAqIHRhYmxlLgor CQkgKi8KKwkJbmhhc2ggPSBwZ3NhX3N0YXNoX25hbWVfdGFibGVfY3JlYXRlKEN1cnJlbnRNZW1v cnlDb250ZXh0LCA2NCwgTlVMTCk7CisJCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2Ff c3Rhc2hfZHNoYXNoLCB0cnVlKTsKKwkJd2hpbGUgKChzdGFzaCA9IGRzaGFzaF9zZXFfbmV4dCgm aXRlcmF0b3IpKSAhPSBOVUxMKQorCQl7CisJCQlwZ3NhX3N0YXNoX25hbWUgKm47CisJCQlib29s CQlmb3VuZDsKKworCQkJbiA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9pbnNlcnQobmhhc2gsCisJ CQkJCQkJCQkJCSBzdGFzaC0+cGdzYV9zdGFzaF9pZCwKKwkJCQkJCQkJCQkJICZmb3VuZCk7CisJ CQlBc3NlcnQoIWZvdW5kKTsKKwkJCW4tPm5hbWUgPSBwc3RyZHVwKHN0YXNoLT5uYW1lKTsKKwkJ fQorCQlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKKwl9CisKKwkvKiBOb3cgaXRlcmF0ZSBv dmVyIGFsbCB0aGUgZW50cmllcy4gKi8KKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3Nh X2VudHJ5X2RzaGFzaCwgZmFsc2UpOworCXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQo Jml0ZXJhdG9yKSkgIT0gTlVMTCkKKwl7CisJCURhdHVtCQl2YWx1ZXNbM107CisJCWJvb2wJCW51 bGxzWzNdOworCQljaGFyCSAgICp0aGlzX3N0YXNoX25hbWU7CisJCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisKKwkJLyogU2tpcCBpbmNvbXBsZXRlIGVudHJpZXMgd2hlcmUgdGhlIGFkdmljZSBz dHJpbmcgd2FzIG5ldmVyIHNldC4gKi8KKwkJaWYgKGVudHJ5LT5hZHZpY2Vfc3RyaW5nID09IElu dmFsaWREc2FQb2ludGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0YXNoX2lkICE9IDApCisJ CXsKKwkJCS8qCisJCQkgKiBXZSdyZSBvbmx5IGR1bXBpbmcgZGF0YSBmb3Igb25lIHBhcnRpY3Vs YXIgc3Rhc2gsIHNvIHNraXAKKwkJCSAqIGVudHJpZXMgZm9yIGFueSBvdGhlciBzdGFzaCBhbmQg dXNlIHRoZSBzdGFzaCBuYW1lIHNwZWNpZmllZCBieQorCQkJICogdGhlIHVzZXIuCisJCQkgKi8K KwkJCWlmIChzdGFzaF9pZCAhPSBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpCisJCQkJY29udGlu dWU7CisJCQl0aGlzX3N0YXNoX25hbWUgPSBzdGFzaF9uYW1lOworCQl9CisJCWVsc2UKKwkJewor CQkJcGdzYV9zdGFzaF9uYW1lICpuOworCisJCQkvKgorCQkJICogV2UncmUgZHVtcGluZyBkYXRh IGZvciBhbGwgc3Rhc2hlcywgc28gbG9vayB1cCB0aGUgY29ycmVjdCBuYW1lCisJCQkgKiB0byB1 c2UgaW4gdGhlIGhhc2ggdGFibGUuIElmIG5vdGhpbmcgaXMgZm91bmQsIHdoaWNoIGlzCisJCQkg KiBwb3NzaWJsZSBkdWUgdG8gcmFjZSBjb25kaXRpb25zLCBtYWtlIHVwIGEgc3RyaW5nIHRvIHVz ZS4KKwkJCSAqLworCQkJbiA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9sb29rdXAobmhhc2gsIGVu dHJ5LT5rZXkucGdzYV9zdGFzaF9pZCk7CisJCQlpZiAobiAhPSBOVUxMKQorCQkJCXRoaXNfc3Rh c2hfbmFtZSA9IG4tPm5hbWU7CisJCQllbHNlCisJCQkJdGhpc19zdGFzaF9uYW1lID0gcHNwcmlu dGYoIjxzdGFzaCAlZD4iLAorCQkJCQkJCQkJCSAgIGVudHJ5LT5rZXkucGdzYV9zdGFzaF9pZCk7 CisJCX0KKworCQkvKiBXb3JrIG91dCB0dXBsZSB2YWx1ZXMuICovCisJCXZhbHVlc1swXSA9IENT dHJpbmdHZXRUZXh0RGF0dW0odGhpc19zdGFzaF9uYW1lKTsKKwkJbnVsbHNbMF0gPSBmYWxzZTsK KwkJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShlbnRyeS0+a2V5LnF1ZXJ5SWQpOworCQludWxs c1sxXSA9IGZhbHNlOworCQlhZHZpY2Vfc3RyaW5nID0gZHNhX2dldF9hZGRyZXNzKHBnc2FfZHNh X2FyZWEsIGVudHJ5LT5hZHZpY2Vfc3RyaW5nKTsKKwkJdmFsdWVzWzJdID0gQ1N0cmluZ0dldFRl eHREYXR1bShhZHZpY2Vfc3RyaW5nKTsKKwkJbnVsbHNbMl0gPSBmYWxzZTsKKworCQkvKiBFbWl0 IHRoZSB0dXBsZS4gKi8KKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQs IHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9z ZXFfdGVybSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNR TC1jYWxsYWJsZSBmdW5jdGlvbiB0byB1cGRhdGUgYW4gYWR2aWNlIHN0YXNoIGVudHJ5IGZvciBh IHBhcnRpY3VsYXIKKyAqIHF1ZXJ5IElECisgKgorICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCBp cyBOVUxMLCB3ZSBkZWxldGUgYW55IGV4aXN0aW5nIGFkdmljZSBzdGFzaAorICogZW50cnk7IG90 aGVyd2lzZSwgd2UgZWl0aGVyIGNyZWF0ZSBhbiBlbnRyeSBvciB1cGRhdGUgaXQgd2l0aCB0aGUg bmV3CisgKiBhZHZpY2Ugc3RyaW5nLgorICovCitEYXR1bQorcGdfc2V0X3N0YXNoZWRfYWR2aWNl KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqc3Rhc2hfbmFtZTsKKwlpbnQ2NAkJcXVl cnlJZDsKKworCWlmIChQR19BUkdJU05VTEwoMCkgfHwgUEdfQVJHSVNOVUxMKDEpKQorCQlQR19S RVRVUk5fTlVMTCgpOworCisJLyogR2V0IGFuZCBjaGVjayBhZHZpY2Ugc3Rhc2ggbmFtZS4gKi8K KwlzdGFzaF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlw Z3NhX2NoZWNrX3N0YXNoX25hbWUoc3Rhc2hfbmFtZSk7CisKKwkvKgorCSAqIEdldCBhbmQgY2hl Y2sgcXVlcnkgSUQuCisJICoKKwkgKiBxdWVyeUlEIDAgbWVhbnMgbm8gcXVlcnkgSUQgd2FzIGNv bXB1dGVkLCBzbyByZWplY3QgdGhhdC4KKwkgKi8KKwlxdWVyeUlkID0gUEdfR0VUQVJHX0lOVDY0 KDEpOworCWlmIChxdWVyeUlkID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImNhbm5vdCBzZXQg YWR2aWNlIHN0cmluZyBmb3IgcXVlcnkgSUQgMCIpKTsKKworCS8qIEF0dGFjaCB0byBkeW5hbWlj IHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAodW5saWtlbHkocGdz YV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwkvKiBOb3cgY2Fs bCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gZG8gdGhlIHJlYWwgd29yay4gKi8KKwlpZiAo UEdfQVJHSVNOVUxMKDIpKQorCQlwZ3NhX2NsZWFyX2FkdmljZV9zdHJpbmcoc3Rhc2hfbmFtZSwg cXVlcnlJZCk7CisJZWxzZQorCXsKKwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZyA9IHRleHRfdG9f Y3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgyKSk7CisKKwkJcGdzYV9zZXRfYWR2aWNlX3N0cmlu ZyhzdGFzaF9uYW1lLCBxdWVyeUlkLCBhZHZpY2Vfc3RyaW5nKTsKKwl9CisKKwlQR19SRVRVUk5f Vk9JRCgpOworfQorCisvKgorICogR2V0IHRoZSBhZHZpY2Ugc3RyaW5nIHRoYXQgaGFzIGJlZW4g Y29uZmlndXJlZCBmb3IgdGhpcyBxdWVyeSwgaWYgYW55LAorICogYW5kIHJldHVybiBpdC4gT3Ro ZXJ3aXNlLCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNoYXIgKgorcGdzYV9hZHZpc29yKFBs YW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCSBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAorCQkJIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJcGdz YV9lbnRyeV9rZXkga2V5OworCXBnc2FfZW50cnkgKmVudHJ5OworCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwkvKgorCSAqIEV4aXQgcXVpY2tseSBpZiB0aGUg c3Rhc2ggbmFtZSBpcyBlbXB0eSBvciB0aGVyZSdzIG5vIHF1ZXJ5IElELgorCSAqLworCWlmIChw Z19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZVswXSA9PSAnXDAnIHx8IHBhcnNlLT5xdWVyeUlkID09 IDApCisJCXJldHVybiBOVUxMOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9y eSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFz aCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8qCisJICogVHJhbnNsYXRlIHBnX3N0 YXNoX2FkdmljZS5zdGFzaF9uYW1lIHRvIGFuIGludGVnZXIgSUQuCisJICoKKwkgKiBwZ3NhX2No ZWNrX3N0YXNoX25hbWVfZ3VjKCkgaGFzIGFscmVhZHkgdmFsaWRhdGVkIHRoZSBhZHZpY2Ugc3Rh c2gKKwkgKiBuYW1lLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgcGdzYV9jaGVja19zdGFzaF9u YW1lKCkgaGVyZS4KKwkgKi8KKwlzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHBnX3N0 YXNoX2FkdmljZV9zdGFzaF9uYW1lKTsKKwlpZiAoc3Rhc2hfaWQgPT0gMCkKKwkJcmV0dXJuIE5V TEw7CisKKwkvKgorCSAqIExvb2sgdXAgdGhlIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBnaXZlbiBz dGFzaCBJRCArIHF1ZXJ5IElELgorCSAqCisJICogSWYgd2UgZmluZCBhbiBhZHZpY2Ugc3RyaW5n LCB3ZSBjb3B5IGl0IGludG8gdGhlIGN1cnJlbnQgbWVtb3J5CisJICogY29udGV4dCwgcHJlc3Vt YWJseSBzaG9ydC1saXZlZCwgc28gdGhhdCB3ZSBjYW4gcmVsZWFzZSB0aGUgbG9jayBvbiB0aGUK KwkgKiBkc2hhc2ggZW50cnkuIHBnX3BsYW5fYWR2aWNlIG9ubHkgbmVlZHMgdGhlIHZhbHVlIHRv IHJlbWFpbiBhbGxvY2F0ZWQKKwkgKiBsb25nIGVub3VnaCBmb3IgaXQgdG8gYmUgcGFyc2VkLCBz byB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6 ZW9mKHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlr ZXkucXVlcnlJZCA9IHBhcnNlLT5xdWVyeUlkOworCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzYV9l bnRyeV9kc2hhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4g TlVMTDsKKwlpZiAoZW50cnktPmFkdmljZV9zdHJpbmcgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJ CWFkdmljZV9zdHJpbmcgPSBOVUxMOworCWVsc2UKKwkJYWR2aWNlX3N0cmluZyA9IHBzdHJkdXAo ZHNhX2dldF9hZGRyZXNzKHBnc2FfZHNhX2FyZWEsCisJCQkJCQkJCQkJCQllbnRyeS0+YWR2aWNl X3N0cmluZykpOworCWRzaGFzaF9yZWxlYXNlX2xvY2socGdzYV9lbnRyeV9kc2hhc2gsIGVudHJ5 KTsKKworCS8qIElmIHdlIGZvdW5kIGFuIGFkdmljZSBzdHJpbmcsIGVtaXQgYSBkZWJ1ZyBtZXNz YWdlLiAqLworCWlmIChhZHZpY2Vfc3RyaW5nICE9IE5VTEwpCisJCWVsb2coREVCVUcyLCAic3Vw cGx5aW5nIGF1dG9tYXRpYyBhZHZpY2UgZm9yIHN0YXNoIFwiJXNcIiwgcXVlcnkgSUQgJSIgUFJJ ZDY0ICI6ICVzIiwKKwkJCSBwZ19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSwga2V5LnF1ZXJ5SWQs IGFkdmljZV9zdHJpbmcpOworCisJcmV0dXJuIGFkdmljZV9zdHJpbmc7Cit9CisKKy8qCisgKiBB dHRhY2ggdG8gdmFyaW91cyBzdHJ1Y3R1cmVzIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHJlc2lsaWVudCBhZ2FpbnN0IGVy cm9ycy4gVGhhdCBpcywgaWYgaXQKKyAqIGZhaWxzIHBhcnR3YXkgdGhyb3VnaCwgaXQgc2hvdWxk IGJlIHBvc3NpYmxlIHRvIGNhbGwgaXQgYWdhaW4sIHJlcGVhdCBubworICogd29yayBhbHJlYWR5 IGNvbXBsZXRlZCwgYW5kIHBvdGVudGlhbGx5IHN1Y2NlZWQgb3IgYXQgbGVhc3QgZ2V0IGZ1cnRo ZXIgaWYKKyAqIHdoYXRldmVyIGNhdXNlZCB0aGUgcHJldmlvdXMgZmFpbHVyZSBoYXMgYmVlbiBj b3JyZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2F0dGFjaCh2b2lkKQoreworCWJvb2wJ CWZvdW5kOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qCisJICogQ3JlYXRlIGEg bWVtb3J5IGNvbnRleHQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbnRyb2wgc3RydWN0dXJlcwor CSAqIGFsbG9jYXRlZCBpbiBsb2NhbCBtZW1vcnkgYXJlIHN1ZmZpY2llbnRseSBwZXJzaXN0ZW50 LgorCSAqLworCWlmIChwZ19zdGFzaF9hZHZpY2VfbWN4dCA9PSBOVUxMKQorCQlwZ19zdGFzaF9h ZHZpY2VfbWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJ CQkJCQkJCQkJCSAicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVG QVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19zdGFz aF9hZHZpY2VfbWN4dCk7CisKKwkvKiBBdHRhY2ggdG8gdGhlIGZpeGVkLXNpemUgc3RhdGUgb2Jq ZWN0IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJaWYgKHBnc2Ffc3RhdGUgPT0gTlVMTCkKKwkJ cGdzYV9zdGF0ZSA9IEdldE5hbWVkRFNNU2VnbWVudCgicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJ CQkJCQlzaXplb2YocGdzYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCQkJCXBnc2FfaW5pdF9zaGFy ZWRfc3RhdGUsCisJCQkJCQkJCQkJJmZvdW5kLCBOVUxMKTsKKworCS8qIEF0dGFjaCB0byB0aGUg RFNBIGFyZWEgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9kc2FfYXJlYSA9PSBO VUxMKQorCXsKKwkJZHNhX2hhbmRsZQlhcmVhX2hhbmRsZTsKKworCQlMV0xvY2tBY3F1aXJlKCZw Z3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCQlhcmVhX2hhbmRsZSA9IHBnc2Ffc3Rh dGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFMSUQpCisJCXsK KwkJCXBnc2FfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHBnc2Ffc3RhdGUtPmRzYV90cmFuY2hlKTsK KwkJCWRzYV9waW4ocGdzYV9kc2FfYXJlYSk7CisJCQlwZ3NhX3N0YXRlLT5hcmVhID0gZHNhX2dl dF9oYW5kbGUocGdzYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5s b2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxv Y2spOworCQkJcGdzYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisJ CWRzYV9waW5fbWFwcGluZyhwZ3NhX2RzYV9hcmVhKTsKKwl9CisKKwkvKiBBdHRhY2ggdG8gdGhl IHN0YXNoX25hbWUtPnN0YXNoX2lkIGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8K KwlpZiAocGdzYV9zdGFzaF9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5k bGUgc3Rhc2hfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExX X0VYQ0xVU0lWRSk7CisJCXBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9 IHBnc2Ffc3RhdGUtPnN0YXNoX3RyYW5jaGU7CisJCXN0YXNoX2hhbmRsZSA9IHBnc2Ffc3RhdGUt PnN0YXNoX2hhc2g7CisJCWlmIChzdGFzaF9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElE KQorCQl7CisJCQlwZ3NhX3N0YXNoX2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJl YSwKKwkJCQkJCQkJCQkJICAmcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJ CQkJICBOVUxMKTsKKwkJCXBnc2Ffc3RhdGUtPnN0YXNoX2hhc2ggPQorCQkJCWRzaGFzaF9nZXRf aGFzaF90YWJsZV9oYW5kbGUocGdzYV9zdGFzaF9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgm cGdzYV9zdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZw Z3NhX3N0YXRlLT5sb2NrKTsKKwkJCXBnc2Ffc3Rhc2hfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChw Z3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX3N0YXNoX2RzaGFzaF9wYXJhbWV0ZXJz LAorCQkJCQkJCQkJCQkgIHN0YXNoX2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBBdHRh Y2ggdG8gdGhlIGVudHJ5IGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAo cGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5kbGUgZW50 cnlfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSk7CisJCXBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9IHBnc2Ff c3RhdGUtPmVudHJ5X3RyYW5jaGU7CisJCWVudHJ5X2hhbmRsZSA9IHBnc2Ffc3RhdGUtPmVudHJ5 X2hhc2g7CisJCWlmIChlbnRyeV9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEKQorCQl7 CisJCQlwZ3NhX2VudHJ5X2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJlYSwKKwkJ CQkJCQkJCQkJICAmcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJCQkJICBO VUxMKTsKKwkJCXBnc2Ffc3RhdGUtPmVudHJ5X2hhc2ggPQorCQkJCWRzaGFzaF9nZXRfaGFzaF90 YWJsZV9oYW5kbGUocGdzYV9lbnRyeV9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9z dGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0 YXRlLT5sb2NrKTsKKwkJCXBnc2FfZW50cnlfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChwZ3NhX2Rz YV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJ CQkJCQkJCQkgIGVudHJ5X2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBSZXN0b3JlIHBy ZXZpb3VzIG1lbW9yeSBjb250ZXh0LiAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gYWR2aWNlIHN0YXNoIG5hbWUgaXMg bGVnYWwsIGFuZCBzaWduYWwgYW4gZXJyb3IgaWYgbm90LgorICoKKyAqIEtlZXAgdGhpcyBpbiBz eW5jIHdpdGggcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YywgYmVsb3cuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3NhX2NoZWNrX3N0YXNoX25hbWUoY2hhciAqc3Rhc2hfbmFtZSkKK3sKKwkvKiBSZWpl Y3QgZW1wdHkgYWR2aWNlIHN0YXNoIG5hbWUuICovCisJaWYgKHN0YXNoX25hbWVbMF0gPT0gJ1ww JykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIG5hbWUgbWF5IG5vdCBiZSB6ZXJv IGxlbmd0aCIpKTsKKworCS8qIFJlamVjdCBvdmVybG9uZyBhZHZpY2Ugc3Rhc2ggbmFtZXMuICov CisJaWYgKHN0cmxlbihzdGFzaF9uYW1lKSArIDEgPiBOQU1FREFUQUxFTikKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CWVycm1zZygiYWR2aWNlIHN0YXNoIG5hbWVzIG1heSBub3QgYmUgbG9uZ2VyIHRoYW4gJWQgYnl0 ZXMiLAorCQkJCQkgICBOQU1FREFUQUxFTiAtIDEpKTsKKworCS8qCisJICogUmVqZWN0IG5vbi1B U0NJSSBhZHZpY2Ugc3Rhc2ggbmFtZXMsIHNpbmNlIGFkdmljZSBzdGFzaGVzIGFyZSB2aXNpYmxl CisJICogYWNyb3NzIGFsbCBkYXRhYmFzZXMgYW5kIHRoZSBlbmNvZGluZ3Mgb2YgdGhvc2UgZGF0 YWJhc2VzIG1pZ2h0IGRpZmZlci4KKwkgKi8KKwlpZiAoIXBnX2lzX2FzY2lpKHN0YXNoX25hbWUp KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWlu IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIikpOworfQorCisvKgorICogQXMgYWJvdmUsIGJ1dCBmb3Ig dGhlIEdVQyBjaGVja19ob29rLiBXZSBhbGxvdyB0aGUgZW1wdHkgc3RyaW5nIGhlcmUsCisgKiB0 aG91Z2gsIGFzIGVxdWl2YWxlbnQgdG8gZGlzYWJsaW5nIHRoZSBmZWF0dXJlLgorICovCitzdGF0 aWMgYm9vbAorcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YyhjaGFyICoqbmV3dmFsLCB2b2lkICoq ZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJY2hhcgkgICAqc3Rhc2hfbmFtZSA9ICpuZXd2 YWw7CisKKwkvKiBSZWplY3Qgb3ZlcmxvbmcgYWR2aWNlIHN0YXNoIG5hbWVzLiAqLworCWlmIChz dHJsZW4oc3Rhc2hfbmFtZSkgKyAxID4gTkFNRURBVEFMRU4pCisJeworCQlHVUNfY2hlY2tfZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKTsKKwkJR1VDX2NoZWNrX2VycmRl dGFpbCgiYWR2aWNlIHN0YXNoIG5hbWVzIG1heSBub3QgYmUgbG9uZ2VyIHRoYW4gJWQgYnl0ZXMi LAorCQkJCQkJCU5BTUVEQVRBTEVOIC0gMSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgor CSAqIFJlamVjdCBub24tQVNDSUkgYWR2aWNlIHN0YXNoIG5hbWVzLCBzaW5jZSBhZHZpY2Ugc3Rh c2hlcyBhcmUgdmlzaWJsZQorCSAqIGFjcm9zcyBhbGwgZGF0YWJhc2VzIGFuZCB0aGUgZW5jb2Rp bmdzIG9mIHRob3NlIGRhdGFiYXNlcyBtaWdodCBkaWZmZXIuCisJICovCisJaWYgKCFwZ19pc19h c2NpaShzdGFzaF9uYW1lKSkKKwl7CisJCUdVQ19jaGVja19lcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpOworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJhZHZpY2Ugc3Rhc2gg bmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIik7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBhZHZpY2Ug c3Rhc2guCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2NyZWF0ZV9zdGFzaChjaGFyICpzdGFzaF9u YW1lKQoreworCXBnc2Ffc3Rhc2ggKnN0YXNoOworCWJvb2wJCWZvdW5kOworCisJQXNzZXJ0KExX TG9ja0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpKTsKKwor CS8qIENyZWF0ZSBhIHN0YXNoIHdpdGggdGhpcyBuYW1lLCB1bmxlc3Mgb25lIGFscmVhZHkgZXhp c3RzLiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KHBnc2Ffc3Rhc2hfZHNoYXNo LCBzdGFzaF9uYW1lLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygi YWR2aWNlIHN0YXNoIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsIHN0YXNoX25hbWUpKTsKKwlzdGFz aC0+cGdzYV9zdGFzaF9pZCA9IHBnc2Ffc3RhdGUtPm5leHRfc3Rhc2hfaWQrKzsKKwlkc2hhc2hf cmVsZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7Cit9CisKKy8qCisgKiBSZW1v dmUgYW55IHN0b3JlZCBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFu ZCBxdWVyeSBJRC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfY2xlYXJfYWR2aWNlX3N0cmluZyhj aGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKQoreworCXBnc2FfZW50cnkgKmVudHJ5Owor CXBnc2FfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRlciBvbGRf ZHA7CisKKwkvKiBUcmFuc2xhdGUgdGhlIHN0YXNoIG5hbWUgdG8gYW4gaW50ZWdlciBJRC4gKi8K KwlpZiAoKHN0YXNoX2lkID0gcGdzYV9sb29rdXBfc3Rhc2hfaWQoc3Rhc2hfbmFtZSkpID09IDAp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBcIiVzXCIgZG9lcyBub3QgZXhpc3Qi LCBzdGFzaF9uYW1lKSk7CisKKwkvKgorCSAqIExvb2sgZm9yIGFuIGV4aXN0aW5nIGVudHJ5LCBh bmQgZnJlZSBpdC4gQnV0LCBiZSBzdXJlIHRvIHNhdmUgdGhlCisJICogcG9pbnRlciB0byB0aGUg YXNzb2NpYXRlZCBhZHZpY2Ugc3RyaW5nLCBpZiBhbnkuCisJICovCisJbWVtc2V0KCZrZXksIDAs IHNpemVvZihwZ3NhX2VudHJ5X2tleSkpOworCWtleS5wZ3NhX3N0YXNoX2lkID0gc3Rhc2hfaWQ7 CisJa2V5LnF1ZXJ5SWQgPSBxdWVyeUlkOworCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzYV9lbnRy eV9kc2hhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlvbGRfZHAgPSBJ bnZhbGlkRHNhUG9pbnRlcjsKKwllbHNlCisJeworCQlvbGRfZHAgPSBlbnRyeS0+YWR2aWNlX3N0 cmluZzsKKwkJZHNoYXNoX2RlbGV0ZV9lbnRyeShwZ3NhX2VudHJ5X2RzaGFzaCwgZW50cnkpOwor CX0KKworCS8qIE5vdyB3ZSBmcmVlIHRoZSBhZHZpY2Ugc3RyaW5nIGFzIHdlbGwsIGlmIHRoZXJl IHdhcyBvbmUuICovCisJaWYgKG9sZF9kcCAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJZHNhX2Zy ZWUocGdzYV9kc2FfYXJlYSwgb2xkX2RwKTsKK30KKworLyoKKyAqIERyb3AgYW4gYWR2aWNlIHN0 YXNoLgorICovCitzdGF0aWMgdm9pZAorcGdzYV9kcm9wX3N0YXNoKGNoYXIgKnN0YXNoX25hbWUp Cit7CisJcGdzYV9lbnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJZHNoYXNoX3Nl cV9zdGF0dXMgaXRlcmF0b3I7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwlBc3NlcnQoTFdMb2NrSGVs ZEJ5TWVJbk1vZGUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSkpOworCisJLyogUmVt b3ZlIHRoZSBlbnRyeSBmb3IgdGhpcyBhZHZpY2Ugc3Rhc2guICovCisJc3Rhc2ggPSBkc2hhc2hf ZmluZChwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2hfbmFtZSwgdHJ1ZSk7CisJaWYgKHN0YXNoID09 IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBcIiVzXCIgZG9lcyBub3Qg ZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisJc3Rhc2hfaWQgPSBzdGFzaC0+cGdzYV9zdGFzaF9pZDsK Kwlkc2hhc2hfZGVsZXRlX2VudHJ5KHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7CisKKwkvKgor CSAqIEl0IHNob3VsZCBub3cgYmUgaW1wb3NzaWJsZSBmb3IgYW55IG5ldyBlbnRyaWVzIHRvIGJl IGFkZGVkIGZvciB0aGUKKwkgKiBhZHZpY2Ugc3Rhc2ggd2UganVzdCBkZWxldGVkLiBHbyB0aHJv dWdoIGFuZCBjbGVhbiBvdXQgYWxsIHRoZSBleGlzdGluZworCSAqIG9uZXMuCisJICovCisJZHNo YXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9lbnRyeV9kc2hhc2gsIHRydWUpOworCXdoaWxl ICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVMTCkKKwl7CisJCWlm IChzdGFzaF9pZCA9PSBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpCisJCXsKKwkJCWlmIChlbnRy eS0+YWR2aWNlX3N0cmluZyAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJCQlkc2FfZnJlZShwZ3Nh X2RzYV9hcmVhLCBlbnRyeS0+YWR2aWNlX3N0cmluZyk7CisJCQlkc2hhc2hfZGVsZXRlX2N1cnJl bnQoJml0ZXJhdG9yKTsKKwkJfQorCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKK30K KworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0YXRlIHdoZW4gZmlyc3QgY3JlYXRlZC4KKyAq Lworc3RhdGljIHZvaWQKK3Bnc2FfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICph cmcpCit7CisJcGdzYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gKHBnc2Ffc2hhcmVkX3N0YXRlICop IHB0cjsKKworCUxXTG9ja0luaXRpYWxpemUoJnN0YXRlLT5sb2NrLAorCQkJCQkgTFdMb2NrTmV3 VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2VfbG9jayIpKTsKKwlzdGF0ZS0+ZHNhX3RyYW5jaGUg PSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2FkdmljZV9kc2EiKTsKKwlzdGF0ZS0+c3Rh c2hfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rhc2hfYWR2aWNlX3N0YXNoIik7 CisJc3RhdGUtPmVudHJ5X3RyYW5jaGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2Fk dmljZV9lbnRyeSIpOworCXN0YXRlLT5uZXh0X3N0YXNoX2lkID0gMTsKKwlzdGF0ZS0+YXJlYSA9 IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c3Rhc2hfaGFzaCA9IERTSEFTSF9IQU5ETEVf SU5WQUxJRDsKKwlzdGF0ZS0+ZW50cnlfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKK30K KworLyoKKyAqIExvb2sgdXAgdGhlIGludGVnZXIgSUQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUg Z2l2ZW4gc3Rhc2ggbmFtZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgbm8gc3VjaCBzdGFzaCBleGlz dHMuCisgKi8KK3N0YXRpYyBpbnQKK3Bnc2FfbG9va3VwX3N0YXNoX2lkKGNoYXIgKnN0YXNoX25h bWUpCit7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwkvKiBTZWFy Y2ggdGhlIHNoYXJlZCBoYXNoIHRhYmxlLiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmQocGdzYV9z dGFzaF9kc2hhc2gsIHN0YXNoX25hbWUsIGZhbHNlKTsKKwlpZiAoc3Rhc2ggPT0gTlVMTCkKKwkJ cmV0dXJuIDA7CisJc3Rhc2hfaWQgPSBzdGFzaC0+cGdzYV9zdGFzaF9pZDsKKwlkc2hhc2hfcmVs ZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7CisKKwlyZXR1cm4gc3Rhc2hfaWQ7 Cit9CisKKy8qCisgKiBTdG9yZSBhIG5ldyBvciB1cGRhdGVkIGFkdmljZSBzdHJpbmcgZm9yIHRo ZSBnaXZlbiBhZHZpY2Ugc3Rhc2ggYW5kIHF1ZXJ5IElELgorICovCitzdGF0aWMgdm9pZAorcGdz YV9zZXRfYWR2aWNlX3N0cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLCBjaGFy ICphZHZpY2Vfc3RyaW5nKQoreworCXBnc2FfZW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOwor CXBnc2FfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRlciBuZXdf ZHA7CisJZHNhX3BvaW50ZXIgb2xkX2RwOworCisJLyogVHJhbnNsYXRlIHRoZSBzdGFzaCBuYW1l IHRvIGFuIGludGVnZXIgSUQuICovCityZXN0YXJ0OgorCWlmICgoc3Rhc2hfaWQgPSBwZ3NhX2xv b2t1cF9zdGFzaF9pZChzdGFzaF9uYW1lKSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2 aWNlIHN0YXNoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKworCS8qIE1h a2Ugc3VyZSB0aGF0IGFuIGVudHJ5IGV4aXN0cy4gKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9m KHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlrZXku cXVlcnlJZCA9IHF1ZXJ5SWQ7CisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQocGdzYV9l bnRyeV9kc2hhc2gsICZrZXksICZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwkJZW50cnktPmFkdmlj ZV9zdHJpbmcgPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2Ff ZW50cnlfZHNoYXNoLCBlbnRyeSk7CisKKwkvKgorCSAqIENvcHkgdGhlIGFkdmljZSBzdHJpbmcg aW50byBkeW5hbWljIHNoYXJlZCBtZW1vcnkuCisJICoKKwkgKiBJZiB3ZSBmYWlsIGFmdGVyIHRo aXMgcG9pbnQsIHdlJ2xsIGhhdmUgYSBzZXJ2ZXItbGlmZXNwYW4gbWVtb3J5IGxlYWsuCisJICog V2UgYXNzdW1lIHRoYXQsIGhhdmluZyBjcmVhdGVkIHRoZSBlbnRyeSBhYm92ZSwgd2UnbGwgYmUg YWJsZSB0byBmaW5kCisJICogaXQgYWdhaW4gd2l0aG91dCBhbiBlcnJvci4KKwkgKi8KKwluZXdf ZHAgPSBkc2FfYWxsb2NhdGUocGdzYV9kc2FfYXJlYSwgc3RybGVuKGFkdmljZV9zdHJpbmcpICsg MSk7CisJc3RyY3B5KGRzYV9nZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBuZXdfZHApLCBhZHZp Y2Vfc3RyaW5nKTsKKworCS8qCisJICogUmVmaW5kIHRoZSBlbnRyeSBhbmQgc3dhcCB0aGUgbmV3 IHBvaW50ZXIgaW50byBwbGFjZS4KKwkgKgorCSAqIElmIHRoZSBlbnRyeSBoYXMgYmVlbiBkZWxl dGVkIHNpbmNlIHdlIGZvdW5kIG9yIGNyZWF0ZWQgaXQgYWJvdmUsIGZyZWUKKwkgKiBtZW1vcnkg YW5kIHJldHJ5IGZyb20gdGhlIHRvcC4KKwkgKi8KKwllbnRyeSA9IGRzaGFzaF9maW5kKHBnc2Ff ZW50cnlfZHNoYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwl7CisJCWRz YV9mcmVlKHBnc2FfZHNhX2FyZWEsIG5ld19kcCk7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJb2xk X2RwID0gZW50cnktPmFkdmljZV9zdHJpbmc7CisJZW50cnktPmFkdmljZV9zdHJpbmcgPSBuZXdf ZHA7CisJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NhX2VudHJ5X2RzaGFzaCwgZW50cnkpOworCisJ LyogSWYgd2UgcmVwbGFjZWQgYW4gb2xkIGFkdmljZSBzdHJpbmcsIGZyZWUgaXQuICovCisJaWYg KG9sZF9kcCAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwg b2xkX2RwKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNo X2FkdmljZS5jb250cm9sIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNl LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRhMGZmZjVj ODY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hf YWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX3N0YXNoX2FkdmljZSBleHRlbnNp b24KK2NvbW1lbnQgPSAnc3RvcmUgYW5kIGF1dG9tYXRpY2FsbHkgYXBwbHkgcGxhbiBhZHZpY2Un CitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdf c3Rhc2hfYWR2aWNlJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3N0YXNoX2FkdmljZS9zcWwvcGdfc3Rhc2hfYWR2aWNlLnNxbCBiL2NvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5hZWQyZDJhNWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsCkBAIC0wLDAgKzEsMTMwIEBACitD UkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2FkdmljZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0g b247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKKy0tIEhlbHBl cjogZXh0cmFjdCBxdWVyeSBpZGVudGlmaWVyIGZyb20gRVhQTEFJTiBWRVJCT1NFIG91dHB1dC4K K0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdldF9xdWVyeV9pZChxdWVyeV90ZXh0IHRleHQp IFJFVFVSTlMgYmlnaW50CitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitERUNMQVJFCisgICAgbGlu ZSB0ZXh0OworICAgIHFpZCBiaWdpbnQ7CitCRUdJTgorICAgIEZPUiBsaW5lIElOIEVYRUNVVEUg J0VYUExBSU4gKFZFUkJPU0UsIEZPUk1BVCBURVhUKSAnIHx8IHF1ZXJ5X3RleHQKKyAgICBMT09Q CisgICAgICAgIElGIGxpbmUgfiAnUXVlcnkgSWRlbnRpZmllcjonIFRIRU4KKyAgICAgICAgICAg IHFpZCA6PSByZWdleHBfcmVwbGFjZShsaW5lLCAnLipRdWVyeSBJZGVudGlmaWVyOlxzKigtP1xk KykuKicsICdcMScpOjpiaWdpbnQ7CisgICAgICAgICAgICBSRVRVUk4gcWlkOworICAgICAgICBF TkQgSUY7CisgICAgRU5EIExPT1A7CisgICAgUkFJU0UgRVhDRVBUSU9OICdRdWVyeSBJZGVudGlm aWVyIG5vdCBmb3VuZCBpbiBFWFBMQUlOIG91dHB1dCc7CitFTkQ7CiskJDsKKworQ1JFQVRFIFRB QkxFIGFhX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGlt MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywg KGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFO QUxZWkUgYWFfZGltMTsKKworQ1JFQVRFIFRBQkxFIGFhX2RpbTIgKGlkIGludGVnZXIgcHJpbWFy eSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcs ICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2RpbTI7CisKK0NSRUFURSBUQUJM RSBhYV9mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBu dWxsIHJlZmVyZW5jZXMgYWFfZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCBy ZWZlcmVuY2VzIGFhX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBhYV9mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsx IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZmFj dDsKKworLS0gR2V0IHRoZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNUIGdldF9xdWVyeV9pZCgk JAorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0x X2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAor CVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQgXGdzZXQKKworLS0gQ3Jl YXRlIGFuIGFkdmljZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2aWNlIGF0IGl0LgorU0VM RUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NFVCBwZ19zdGFz aF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKKworLS0gUnVuIG91ciB0ZXN0 IHF1ZXJ5IGZvciB0aGUgZmlyc3QgdGltZSB3aXRoIG5vIHN0YXNoZWQgYWR2aWNlLgorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4g aW5kZXggc2NhbiBvbiBkaW0xCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNz X3N0YXNoJywgOidxaWQnLAorCSdJTkRFWF9TQ0FOKGQxIGFhX2RpbTFfcGtleSknKTsKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBh biBhbHRlcm5hdGl2ZSBqb2luIG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdy ZWdyZXNzX3N0YXNoJywgOidxaWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7CitFWFBMQUlO IChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4g YWx0ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgn cmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVTVEVEX0xPT1BfUExBSU4oZDEpJyk7CitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gQWRkIGEg dXNlbGVzcyBleHRyYSBlbnRyeSB0byBvdXIgdGVzdCBzdGFzaC4gU2hvdWxkbid0IGNoYW5nZSB0 aGUgcmVzdWx0CistLSBmcm9tIHRoZSBwcmV2aW91cyB0ZXN0LgorLS0gKElmIHdlJ3JlIHVubHVj a3kgZW5vdWdoIHRoYXQgdGhpcyBldmVyIGZhaWxzIGR1ZSB0byBxdWVyeSBJRCBhY3R1YWxseQor LS0gYmVpbmcgMSwgdGhlbiBqdXN0IHB1dCBzb21lIG90aGVyIGNvbnN0YW50IGhlcmUuIFNlZW1z IHVubGlrZWx5LikKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gn LCAxLCAnU0VRX1NDQU4oZDEpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00g YWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKworLS0gVHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1cmUgaXQgZG9l cyBub3RoaW5nCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9z dGFzaCcpOworU0VUIHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3NfZW1wdHlf c3Rhc2gnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxF RlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2Rp bTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7 CisKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNoIGluZGl2aWR1YWxseSBhbmQg YWxsIG9mIHRoZW0gdG9nZXRoZXIsCistLSBidXQgbm90IGEgbm9uZXhpc3RlbnQgc3Rhc2guCitT RUxFQ1QgKiBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWU7 CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCUZST00gcGdfZ2V0X2FkdmljZV9z dGFzaF9jb250ZW50cygncmVncmVzc19zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworU0VMRUNU IHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2Nv bnRlbnRzKCdyZWdyZXNzX2VtcHR5X3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qg c3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29u dGVudHMoTlVMTCkgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNl X3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ25vX3N1Y2hfc3Rh c2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKworLS0gVGVzdCB0aGF0IHdlIGNhbiByZW1vdmUgYWR2 aWNlLgorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlk JywgbnVsbCk7CitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19zdGFz aCc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBK T0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFtZTsK K1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0 YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CisKKy0tIENs ZWFuIHVwIHN0YXRlIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4KK1NFTEVDVCBwZ19kcm9wX2Fk dmljZV9zdGFzaCgncmVncmVzc19zdGFzaCcpOworU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNo KCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29udHJp Yi5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCAyYWI2ZmFmYmFiMS4uNjJh ZjJiMjFmZDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAtMTUxLDYgKzE1MSw3IEBAIENSRUFURSBFWFRFTlNJ T04gPHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJmx0cmVlOwog ICZwYWdlaW5zcGVjdDsKICAmcGFzc3dvcmRjaGVjazsKKyAmcGdzdGFzaGFkdmljZTsKICAmcGdi dWZmZXJjYWNoZTsKICAmcGdjb2xsZWN0YWR2aWNlOwogICZwZ2NyeXB0bzsKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwK aW5kZXggNDA3ZmYzYWJmZmUuLjhjMTRiYWI4NGU5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv ZmlsZWxpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMTQ0LDYg KzE0NCw3IEBACiA8IUVOVElUWSBvaWQybmFtZSAgICAgICAgU1lTVEVNICJvaWQybmFtZS5zZ21s Ij4KIDwhRU5USVRZIHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBhZ2VpbnNwZWN0LnNnbWwiPgog PCFFTlRJVFkgcGFzc3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dvcmRjaGVjay5zZ21sIj4KKzwh RU5USVRZIHBnc3Rhc2hhZHZpY2UgICBTWVNURU0gInBnc3Rhc2hhZHZpY2Uuc2dtbCI+CiA8IUVO VElUWSBwZ2J1ZmZlcmNhY2hlICAgU1lTVEVNICJwZ2J1ZmZlcmNhY2hlLnNnbWwiPgogPCFFTlRJ VFkgcGdjb2xsZWN0YWR2aWNlIFNZU1RFTSAicGdjb2xsZWN0YWR2aWNlLnNnbWwiPgogPCFFTlRJ VFkgcGdjcnlwdG8gICAgICAgIFNZU1RFTSAicGdjcnlwdG8uc2dtbCI+CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZp Y2Uuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDE4NzhmNGY3 YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCkBA IC0wLDAgKzEsMjE4IEBACis8IS0tIGRvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwgLS0+ CisKKzxzZWN0MSBpZD0icGdzdGFzaGFkdmljZSIgeHJlZmxhYmVsPSJwZ19zdGFzaF9hZHZpY2Ui PgorIDx0aXRsZT5wZ19zdGFzaF9hZHZpY2UgJm1kYXNoOyBzdG9yZSBhbmQgYXV0b21hdGljYWxs eSBhcHBseSBwbGFuIGFkdmljZTwvdGl0bGU+CisKKyA8aW5kZXh0ZXJtIHpvbmU9InBnc3Rhc2hh ZHZpY2UiPgorICA8cHJpbWFyeT5wZ19zdGFzaF9hZHZpY2U8L3ByaW1hcnk+CisgPC9pbmRleHRl cm0+CisKKyA8cGFyYT4KKyAgVGhlIDxmaWxlbmFtZT5wZ19zdGFzaF9hZHZpY2U8L2ZpbGVuYW1l PiBleHRlbnNpb24gYWxsb3dzIHlvdSB0byBzdGFzaAorICA8bGluayBsaW5rZW5kPSJwZ3BsYW5h ZHZpY2UiPnBsYW4gYWR2aWNlPC9saW5rPiBzdHJpbmdzIGluIGR5bmFtaWMKKyAgc2hhcmVkIG1l bW9yeSB3aGVyZSB0aGV5IGNhbiBiZSBhdXRvbWF0aWNhbGx5IGFwcGxpZWQuICBBbgorICA8bGl0 ZXJhbD5hZHZpY2Ugc3Rhc2g8L2xpdGVyYWw+IGlzIGEgbWFwcGluZyBmcm9tCisgIDxsaW5rIGxp bmtlbmQ9Imd1Yy1jb21wdXRlLXF1ZXJ5LWlkIj5xdWVyeSBpZGVudGlmaWVyczwvbGluaz4gdG8g cGxhbiBhZHZpY2UKKyAgc3RyaW5ncy4gV2hlbmV2ZXIgYSBzZXNzaW9uIGlzIGFza2VkIHRvIHBs YW4gYSBxdWVyeSB3aG9zZSBxdWVyeSBJRCBhcHBlYXJzCisgIGluIHRoZSByZWxldmFudCBhZHZp Y2Ugc3Rhc2gsIHRoZSBwbGFuIGFkdmljZSBzdHJpbmcgaXMgYXV0b21hdGljYWxseSBhcHBsaWVk CisgIHRvIGd1aWRlIHBsYW5uaW5nLiBOb3RlIHRoYXQgYWR2aWNlIHN0YXNoZXMgZXhpc3QgcHVy ZWx5IGluIG1lbW9yeS4gVGhpcworICBtZWFucyBib3RoIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRv IGJlIG1pbmRmdWwgb2YgbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4KKyAgZGVjaWRpbmcgaG93IG11 Y2ggcGxhbiBhZHZpY2UgdG8gc3Rhc2gsIGFuZCBhbHNvIHRoYXQgYWR2aWNlIHN0YXNoZXMgbXVz dAorICBiZSByZWNyZWF0ZWQgYW5kIHJlcG9wdWxhdGVkIHdoZW5ldmVyIHRoZSBzZXJ2ZXIgaXMg cmVzdGFydGVkLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBJbiBvcmRlciB0byB1c2UgdGhpcyBt b2R1bGUsIHlvdSB3aWxsIG5lZWQgdG8gZXhlY3V0ZQorICA8bGl0ZXJhbD5DUkVBVEUgRVhURU5T SU9OIHBnX3N0YXNoX2FkdmljZTwvbGl0ZXJhbD4gaW4gYXQgbGVhc3QKKyAgb25lIGRhdGFiYXNl LCBzbyB0aGF0IHlvdSBoYXZlIGFjY2VzcyB0byB0aGUgU1FMIGZ1bmN0aW9ucyB0byBtYW5hZ2UK KyAgYWR2aWNlIHN0YXNoZXMuICBZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIDxsaXRlcmFsPnBnX3N0 YXNoX2FkdmljZTwvbGl0ZXJhbD4KKyAgbW9kdWxlIHRvIGJlIGxvYWRlZCBpbiBhbGwgc2Vzc2lv bnMgd2hlcmUgeW91IHdhbnQgdGhpcyBtb2R1bGUgdG8KKyAgYXV0b21hdGljYWxseSBhcHBseSBh ZHZpY2UuIEl0IHdpbGwgdXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRkaW5nCisgIDxs aXRlcmFsPnBnX3N0YXNoX2FkdmljZTwvbGl0ZXJhbD4gdG8KKyAgPHhyZWYgbGlua2VuZD0iZ3Vj LXNoYXJlZC1wcmVsb2FkLWxpYnJhcmllcyIvPiBhbmQgcmVzdGFydGluZyB0aGUgc2VydmVyLgor IDwvcGFyYT4KKworIDxwYXJhPgorICBPbmNlIHlvdSBoYXZlIG1ldCB0aGUgYWJvdmUgY3JpdGVy aWEsIHlvdSBjYW4gY3JlYXRlIGFkdmljZSBzdGFzaGVzCisgIHVzaW5nIHRoZSA8bGl0ZXJhbD5w Z19jcmVhdGVfYWR2aWNlX3N0YXNoPC9saXRlcmFsPiBmdW5jdGlvbiBkZXNjcmliZWQKKyAgYmVs b3cgYW5kIHNldCB0aGUgcGxhbiBhZHZpY2UgZm9yIGEgZ2l2ZW4gcXVlcnkgSUQgaW4gYSBnaXZl biBzdGFzaCB1c2luZworICB0aGUgPGxpdGVyYWw+cGdfc2V0X3N0YXNoZWRfYWR2aWNlPC9saXRl cmFsPiBmdW5jdGlvbi4gVGhlbiwgeW91IG5lZWQKKyAgb25seSBjb25maWd1cmUgPGxpdGVyYWw+ cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L2xpdGVyYWw+IHRvIHBvaW50CisgIHRvIHRoZSBj aG9zZW4gYWR2aWNlIHN0YXNoIG5hbWUuIEZvciBzb21lIHVzZSBjYXNlcywgcmF0aGVyIHRoYW4g c2V0dGluZworICB0aGlzIG9uIGEgc3lzdGVtLXdpZGUgYmFzaXMsIHlvdSBtYXkgZmluZCBpdCBo ZWxwZnVsIHRvIHVzZQorICA8bGl0ZXJhbD5BTFRFUiBEQVRBQkFTRSAuLi4gU0VUPC9saXRlcmFs PiBvcgorICA8bGl0ZXJhbD5BTFRFUiBST0xFIC4uLiBTRVQ8L2xpdGVyYWw+IHRvIGNvbmZpZ3Vy ZSB2YWx1ZXMgdGhhdCB3aWxsIGFwcGx5CisgIG9ubHkgdG8gYSBkYXRhYmFzZSBvciBvbmx5IHRv IGEgY2VydGFpbiByb2xlLiBMaWtld2lzZSwgaXQgbWF5IHNvbWV0aW1lcworICBiZSBiZXR0ZXIg dG8gc2V0IHRoZSBzdGFzaCBuYW1lIGluIGEgcGFydGljdWxhciBzZXNzaW9uIHVzaW5nCisgIDxs aXRlcmFsPlNFVDwvbGl0ZXJhbD4uCisgPC9wYXJhPgorCisgPHBhcmE+CisgIEJlY2F1c2UgPGxp dGVyYWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiB3b3JrcyBvbiB0aGUgYmFzaXMgb2YgcXVl cnkKKyAgaWRlbnRpZmllcnMsIHlvdSB3aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBxdWVyeSBp ZGVudGlmaWVyIGZvciBlYWNoIHF1ZXJ5CisgIHdob3NlIHBsYW4geW91IHdpc2ggdG8gY29udHJv bC4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGRldGVybWluZSB0aGUgYWR2aWNlCisgIHN0cmluZyB0 aGF0IHlvdSB3aXNoIHRvIHN0b3JlIGZvciBlYWNoIHF1ZXJ5LiBPbmUgd2F5IHRvIGRvIHRoaXMg aXMgdG8gdXNlCisgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+OiB0aGUgPGxpdGVyYWw+VkVS Qk9TRTwvbGl0ZXJhbD4gb3B0aW9uIHdpbGwKKyAgc2hvdyB0aGUgcXVlcnkgSUQsIGFuZCB0aGUg PGxpdGVyYWw+UExBTl9BRFZJQ0U8L2xpdGVyYWw+IG9wdGlvbiB3aWxsCisgIHNob3cgcGxhbiBh ZHZpY2UuICA8eHJlZiBsaW5rZW5kPSJwZ2NvbGxlY3RhZHZpY2UiIC8+IGNhbiBiZSB1c2VkIHRv CisgIG9idGFpbiB0aGlzIGluZm9ybWF0aW9uIGZvciBhbiBlbnRpcmUgd29ya2xvYWQsIGFsdGhv dWdoIGNhcmUgbXVzdCBiZQorICB0YWtlbiBzaW5jZSBpdCBjYW4gdXNlIHVwIGEgbG90IG9mIG1l bW9yeSB2ZXJ5IHF1aWNrbHkuIFF1ZXJ5IGlkZW50aWZpZXJzIGNhbgorICBhbHNvIGJlIG9idGFp bmVkIHRocm91Z2ggdG9vbHMgc3VjaCBhcyA8eHJlZiBsaW5rZW5kPSJwZ3N0YXRzdGF0ZW1lbnRz IiAvPgorICBvciA8eHJlZiBsaW5rZW5kPSJtb25pdG9yaW5nLXBnLXN0YXQtYWN0aXZpdHktdmll dyIgLz4sIGJ1dCB0aGVzZSB0b29scworICB3aWxsIG5vdCBwcm92aWRlIHBsYW4gYWR2aWNlIHN0 cmluZ3MuICBOb3RlIHRoYXQKKyAgPHhyZWYgbGlua2VuZD0iZ3VjLWNvbXB1dGUtcXVlcnktaWQi IC8+IG11c3QgYmUgZW5hYmxlZCBmb3IgcXVlcnkKKyAgaWRlbnRpZmllcnMgdG8gYmUgY29tcHV0 ZWQ7IGlmIHNldCB0byA8bGl0ZXJhbD5hdXRvPC9saXRlcmFsPiwgbG9hZGluZworICA8bGl0ZXJh bD5wZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IHdpbGwgZW5hYmxlIGl0IGF1dG9tYXRpY2FsbHku CisgPC9wYXJhPgorCisgPHBhcmE+CisgIEdlbmVyYWxseSwgdGhlIGZhY3QgdGhhdCB0aGUgcGxh bm5lciBpcyBhYmxlIHRvIGNoYW5nZSBxdWVyeSBwbGFucyBhcworICB0aGUgdW5kZXJseWluZyBk aXN0cmlidXRpb24gb2YgZGF0YSBjaGFuZ2VzIGlzIGEgZmVhdHVyZSwgbm90IGEgYnVnLgorICBN b3Jlb3ZlciwgYXBwbHlpbmcgcGxhbiBhZHZpY2UgY2FuIGhhdmUgYSBub3RpY2VhYmxlIHBlcmZv cm1hbmNlIGNvc3QgZXZlbgorICB3aGVuIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGNoYW5nZSB0 byB0aGUgcXVlcnkgcGxhbi4gVGhlcmVmb3JlLCBpdCBpcworICBhIGdvb2QgaWRlYSB0byB1c2Ug dGhpcyBmZWF0dXJlIG9ubHkgd2hlbiBhbmQgdG8gdGhlIGV4dGVudCBuZWVkZWQuCisgIFBsYW4g YWR2aWNlIHN0cmluZ3MgY2FuIGJlIHRyaW1tZWQgZG93biB0byBtZW50aW9uIG9ubHkgdGhvc2Ug YXNwZWN0cworICBvZiB0aGUgcGxhbiB0aGF0IG5lZWQgdG8gYmUgY29udHJvbGxlZCwgYW5kIHVz ZWQgb25seSBmb3IgcXVlcmllcyB3aGVyZQorICB0aGVyZSBpcyBiZWxpZXZlZCB0byBiZSBhIHNp Z25pZmljYW50IHJpc2sgb2YgcGxhbm5lciBlcnJvci4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAg Tm90ZSB0aGF0IDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZTwvbGl0ZXJhbD4gY3VycmVudGx5IGxh Y2tzIGEgc29waGlzdGljYXRlZAorICBzZWN1cml0eSBtb2RlbC4gT25seSB0aGUgc3VwZXJ1c2Vy LCBvciBhIHVzZXIgdG8gd2hvbSB0aGUgc3VwZXJ1c2VyIGhhcworICBncmFudGVkIDxsaXRlcmFs PkVYRUNVVEU8L2xpdGVyYWw+IHBlcm1pc3Npb24gb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywK KyAgbWF5IGNyZWF0ZSBhZHZpY2Ugc3Rhc2hlcyBvciBhbHRlciB0aGVpciBjb250ZW50cywgYnV0 IGFueSB1c2VyIG1heSBzZXQKKyAgPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8 L2xpdGVyYWw+IGZvciB0aGVpciBzZXNzaW9uLCBhbmQgdGhpcworICBtYXkgcmV2ZWFsIHRoZSBj b250ZW50cyBvZiBhbnkgYWR2aWNlIHN0YXNoIHdpdGggdGhhdCBuYW1lLiBVc2VycyBzaG91bGQK KyAgYXNzdW1lIHRoYXQgaW5mb3JtYXRpb24gZW1iZWRkZWQgaW4gc3Rhc2hlZCBhZHZpY2Ugc3Ry aW5ncyBtYXkgYmVjb21lIHZpc2libGUKKyAgdG8gbm9ucHJpdmlsZWdlZCB1c2Vycy4KKyA8L3Bh cmE+CisKKyA8c2VjdDIgaWQ9InBnc3Rhc2hhZHZpY2UtZnVuY3Rpb25zIj4KKyAgPHRpdGxlPkZ1 bmN0aW9uczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goc3Rhc2hf bmFtZSB0ZXh0KSByZXR1cm5zIHZvaWQ8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAg ICAgPHByaW1hcnk+cGdfY3JlYXRlX2FkdmljZV9zdGFzaDwvcHJpbWFyeT4KKyAgICAgPC9pbmRl eHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAg IENyZWF0ZXMgYSBuZXcsIGVtcHR5IGFkdmljZSBzdGFzaCB3aXRoIHRoZSBnaXZlbiBuYW1lLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8 dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZHJvcF9hZHZpY2Vf c3Rhc2goc3Rhc2hfbmFtZSB0ZXh0KSByZXR1cm5zIHZvaWQ8L2Z1bmN0aW9uPgorICAgICA8aW5k ZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfZHJvcF9hZHZpY2Vfc3Rhc2g8L3ByaW1hcnk+Cisg ICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBh cmE+CisgICAgICBEcm9wcyB0aGUgbmFtZWQgYWR2aWNlIHN0YXNoIGFuZCBhbGwgb2YgaXRzIGVu dHJpZXMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19zZXRf c3Rhc2hlZF9hZHZpY2Uoc3Rhc2hfbmFtZSB0ZXh0LCBxdWVyeV9pZCBiaWdpbnQsCisgICAgICAg YWR2aWNlX3N0cmluZyB0ZXh0KSByZXR1cm5zIHZvaWQ8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0 ZXJtPgorICAgICAgPHByaW1hcnk+cGdfc2V0X3N0YXNoZWRfYWR2aWNlPC9wcmltYXJ5PgorICAg ICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJh PgorICAgICAgU3RvcmVzIGFuIGFkdmljZSBzdHJpbmcgaW4gdGhlIG5hbWVkIGFkdmljZSBzdGFz aCwgYXNzb2NpYXRlZCB3aXRoCisgICAgICB0aGUgZ2l2ZW4gcXVlcnkgaWRlbnRpZmllci4gIElm IGFuIGVudHJ5IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIKKyAgICAgIGFscmVhZHkgZXhpc3Rz IGluIHRoZSBzdGFzaCwgaXQgaXMgcmVwbGFjZWQuICBJZgorICAgICAgPHBhcmFtZXRlcj5hZHZp Y2Vfc3RyaW5nPC9wYXJhbWV0ZXI+IGlzIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LAorICAgICAg YW55IGV4aXN0aW5nIGVudHJ5IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIgaXMgcmVtb3ZlZC4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9hZHZpY2Vf c3Rhc2hlcygpIHJldHVybnMgc2V0b2YgKHN0YXNoX25hbWUgdGV4dCwKKyAgICAgICBudW1fZW50 cmllcyBiaWdpbnQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5 PnBnX2dldF9hZHZpY2Vfc3Rhc2hlczwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgb25l IHJvdyBmb3IgZWFjaCBhZHZpY2Ugc3Rhc2gsIHNob3dpbmcgdGhlIHN0YXNoIG5hbWUgYW5kCisg ICAgICB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaXQgY29udGFpbnMuCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKHN0 YXNoX25hbWUgdGV4dCkgcmV0dXJucyBzZXRvZgorICAgICAgIChzdGFzaF9uYW1lIHRleHQsIHF1 ZXJ5X2lkIGJpZ2ludCwgYWR2aWNlX3N0cmluZyB0ZXh0KTwvZnVuY3Rpb24+CisgICAgIDxpbmRl eHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzPC9wcmlt YXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+Cisg ICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBvbmUgcm93IGZvciBlYWNoIGVudHJ5IGluIHRoZSBu YW1lZCBhZHZpY2Ugc3Rhc2guICBJZgorICAgICAgPHBhcmFtZXRlcj5zdGFzaF9uYW1lPC9wYXJh bWV0ZXI+IGlzIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LCByZXR1cm5zCisgICAgICBlbnRyaWVz IGZyb20gYWxsIHN0YXNoZXMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3QyPgorCisgPHNlY3Qy IGlkPSJwZ3N0YXNoYWR2aWNlLWNvbmZpZy1wYXJhbXMiPgorICA8dGl0bGU+Q29uZmlndXJhdGlv biBQYXJhbWV0ZXJzPC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFt ZTwvdmFybmFtZT4gKDx0eXBlPnN0cmluZzwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAg ICA8cHJpbWFyeT48dmFybmFtZT5wZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZTwvdmFybmFtZT4g Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAg IDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTcGVjaWZpZXMg dGhlIG5hbWUgb2YgdGhlIGFkdmljZSBzdGFzaCB0byBjb25zdWx0IGR1cmluZyBxdWVyeQorICAg ICAgcGxhbm5pbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB3aGlj aCBkaXNhYmxlcworICAgICAgdGhpcyBtb2R1bGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3Qy PgorCisgPHNlY3QyIGlkPSJwZ3N0YXNoYWR2aWNlLWF1dGhvciI+CisgIDx0aXRsZT5BdXRob3I8 L3RpdGxlPgorCisgIDxwYXJhPgorICAgUm9iZXJ0IEhhYXMgPGVtYWlsPnJoYWFzQHBvc3RncmVz cWwub3JnPC9lbWFpbD4KKyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKzwvc2VjdDE+CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IDFhMjUxMjk2M2E5Li4yZjg2Mjk5N2ZlYyAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQwMjIsNiArNDAyMiwxMiBAQCBwZ3BhX3Ryb3ZlX2xvb2t1 cF90eXBlCiBwZ3BhX3Ryb3ZlX3Jlc3VsdAogcGdwYV90cm92ZV9zbGljZQogcGdwYV91bnJvbGxl ZF9qb2luCitwZ3NhX2VudHJ5CitwZ3NhX2VudHJ5X2tleQorcGdzYV9zaGFyZWRfc3RhdGUKK3Bn c2Ffc3Rhc2gKK3Bnc2Ffc3Rhc2hfY291bnQKK3Bnc2Ffc3Rhc2hfbmFtZQogcGdzb2NrZXQKIHBn c3FsX3RoaW5nX3QKIHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --0000000000005f9cf4064bd60212--