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 1vsngm-001DNw-3C for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 19:58:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsngm-0002aa-0g for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 19:58:24 +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 1vsngl-0002aR-1e for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 19:58:23 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vsngh-000000001fG-2sdf for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 19:58:23 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-65b9608a9adso218322a12.3 for ; Wed, 18 Feb 2026 11:58:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771444694; cv=none; d=google.com; s=arc-20240605; b=j+/MvzTXXm9eCy8bBTgDbWejFN/ZZLzKDHztG0Q2QWgh7W72t0A5QmGWM4jYD5aTdu 6QCnC87W0zsXqiclXKNgYxUZN1MQLPoR+XHpcHH+FTCYTHTEzMhVTKTpd9YjbvZ0Zk8z 6OUWelWAn0Raj/vL9ASDNyrORKrT2+Mo/7dTlRdQrfx3Rg4xeeiBNa/3lupCXttKTfus kS6XYIL5fDumrBNFgijfxNZ5LYOwqY2YZXmuk/GAvjZ/0gD4yEroBxKW2G9uq2xNtYw/ 0JL49qZ4Cs3/9UztQ6JsesKCsbtEo6YcqiBH1VKa72TzoX8VZY6I8mPzYMW7muCE0y3U rSBg== 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=TF+04rmra2MtLTOYRk1nfz05MwuuOHrN9wOXBEnFuZA=; fh=IAJXaOOGooDKXe10hLhgZjMqDEqYJpljURAmzYKF5Fk=; b=i9CsUwYnsyHS9lm0VeVOqRI9dCfLCXkUP96S5V51feotTQdFt/79L+gVW/Vuwe8JAA WeqQwuDpy+TYnOgqzrwwAwYrIWqXzVMB/m5kH5Y5xm12vDjyesTZQ61GN7cTYz7U+W4F gKHhKDjDTxAGVV//oyWaUzGCdL+i59SFpznru/qJ6c0ztxCmSSAIOCtBwXUOL37AY8QC Hw6pktB/kOKYQsY76MogzL7Z5FIadeCGp79uLz8K4VB0bMXL64yG/2i4PHgFfnBKcgmu 9a0tC1STwX/Gfzsw6Qrj3TwM60heLox8N/PRaHNgQrcTQXD9vkxPP/3xyVaEct98B3XF zggw==; 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=1771444694; x=1772049494; 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=TF+04rmra2MtLTOYRk1nfz05MwuuOHrN9wOXBEnFuZA=; b=Y3yZYh9ewOsTYjJHyu4ZP/cRC7CIBFV8z/uZC4o+g3Y5EpnWh5CTH2rgnfTjTnGMwN BhMoByhohMT03dc+5ITFqAg4UNxrf51NmGCNpvCtrXMeucGKyKQ7inoVrAES2/3O3DDZ 5WdVZ3P1zTHxAMbmgb7f2MSHfasaRMzJNnhuLeIvxi2w32aO/qfzDiEryqz20LqmdcCR 6liloEmO+gHElfaBqbqPHHNxdAxSjTfJVOQrPUjgTMI/yYv45D2z0uv3vuN53/MM06RZ WKbb/v0GsaSw5qXdRLftLZehO92Bgeo/IBm0yP0es9WcgBIyQoBHrXWRl55/R+Vnx6rT z2uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771444694; x=1772049494; 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=TF+04rmra2MtLTOYRk1nfz05MwuuOHrN9wOXBEnFuZA=; b=SbUJJe+9xeHdLFB+gKZ2lMaE3TrGdpk8eIiBet0bYaz+5wHeTfHG9yugRiR7bqEPbP HRGNjtdeXAgJDfnyOcNHek3Yus6SsefHhP2/YouKXWg6GlbFf8apnY5nYoLCNqySds6G bSibQ+mFkvcFe6MI9tGGWcz8voAGmk5J/mB9fVpKUkQWbXW6HrRdPpYhl9BcTyh3hX2Z pvorWTIdWVg9CqbDQH97lTaHS7lTkWc44n5hznA9c371il++muxQumm6j9CxrHXlv1K6 oFyaNMyILK8TCXgfwDxiTZNFNMdX/siw5AwTAEj1VoMNkQU6b6otxj5GO17KyHdjWYzV O5MA== X-Forwarded-Encrypted: i=1; AJvYcCW5zoq/j9eSdNUI5JcumAdhQ+iVAcZlgLTs8LFRBnFGSUg4rz5fteQP5CFDanpfukVonj4TQemCKw902k/l@lists.postgresql.org X-Gm-Message-State: AOJu0Yzcy1nQZZu7W/ysRJXATIiR0Z4STrWwBa2UNamrhJm6dBm0h8xs fILw1kh0YAvcrjsFB80ABDoPnLTnA/gyB5TU+YHOL6MF4FzG4SP8S6zN6UXWlWAXK9yQq92ztZL leHjHr6BkqhkK8vUdFlXdZRxS9sc5vjI= X-Gm-Gg: AZuq6aJEDfjQKre6SFRe8Tg+y/UW8Y7vBbzm1kKuV6WvHxLDdEyHhPIBU76t0dBSk7M pbbdmE9uwWuTypETKWKb+T34WuekQQEv7/50nSWQ5BibFy+iEQ0qMtcGpH4i2Hq/YzevWhr+LGT H8faUoumY2ImziZ0HrG5sWnCWXU+X766hKG0aWzy0bgwOWDTFVh7b27NLLQzFPcQFzf8BILAk7E X3MOXf1BcU9zzeZFXY3pJGkRlvH//CQfJs7UTM0rZCSHhd5p+z6aZp1YsyxuAcUpegCDjL1rLeM AajgQuTaPtTnTc09KAD9a3BMCyFDL86S1ubLcR9iJQoeh942+umxsJDGYAqamHCYY1NORQ== X-Received: by 2002:a17:907:971b:b0:b8e:d260:caf8 with SMTP id a640c23a62f3a-b8fc3c7b7ecmr936899866b.33.1771444693869; Wed, 18 Feb 2026 11:58:13 -0800 (PST) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Wed, 18 Feb 2026 14:57:58 -0500 X-Gm-Features: AZwV_Qh8Q1-6tR84rWQLWieFw6VFwCGVGKwqlpwcFVaCCDPfW_Y2SptVi3_oM3c 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="000000000000b8a4ce064b1e9b2d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b8a4ce064b1e9b2d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Feb 10, 2026 at 6:03=E2=80=AFPM Robert Haas = wrote: > I have committed those, as well as 0001 and 0002. Here's v15. Here's v16. As a note, my biggest need right now is for some code review. Testing help is, of course, also still very welcome. What I have done in this version is run the test_plan_advice machinery with the pg_plan_advice.feedback_warnings=3Don and try to fix as many of the resulting failures as I could. The biggest revelation that I had as a result of doing that is that it's really unfortunate for this patch that get_relation_info_hook is only called for RTE_RELATION baserels. I was somewhat aware of this problem before, but I thought that it might be a non-critical thing that could be fixed at some indefinite future point, maybe years in the future. However, this testing convinced me that this could not really be postponed if I wanted the patch set to actually work as intended. It's true that there's nothing to control in terms of scan method for something like a subquery scan, but you can want to control the placement of or prevent the occurrence of Gather or Gather Merge nodes in join problems that involve non-relation RTEs, and there's really no way to do that with the existing hook placement. But it seems like there's a pretty easy solution, which is to move the hook up from get_relation_info to its sole caller, build_simple_rel. Patch 0002 implements this and has a commit message explaining how code that currently uses get_relation_info_hook can be modified to work with the replacement, buld_simple_rel_hook. The rest of the patch set is as before, except for the main patch, now 0003, which has the following additional changes: - It has been updated to use build_simple_rel_hook rather than get_relation_info_hook. - I have corrected some order of operations problems in pgpa_walk_recursively(). The previous coding code deliver incorrect results when an elided SubqueryScan should have been considered the only RTI-bearing plan node beneath a Gather or Gather Merge. - I have adjusted pgpa_planner_apply_joinrel_advice() to fix a problem where GATHER() or GATHER_MERGE() advice could be falsely reported as conflicting with PARTITIONWISE() advice. - I have adjusted pgpa_plan_walker() and pgpa_walk_recursively() to fix a problem with Gather or Gather Merge nodes together with partitionwise aggregation, where the generated plan advice was sometimes incorrect. - I have done some further work on the documentation. Specifically, I added a list of known limitations, or at least the start of one; I expanded the discussion of what "matched" and "partially matched" mean; I expanded the discussion of how NO_GATHER works; and I and changed some references from "table" to "relation". - Comment improvements. As you might or might not guess, a lot of these bug fixes and documentation updates were indirect consequences of the replacement of get_relation_info_hook with buld_simple_rel_hook. Once I made that change, it fixed some problems, but revealed others which I then had to fix or document. However, some of these fixes are just cleaning up other things revealed by running test_plan_advice with pg_plan_advice.feedback_warnings=3Don. Even though I have been running test_plan_advice locally with pg_plan_advice.feedback_warnings=3Don, I have not enabled that in this version of the patch set. That's because that still causes 1 test failure, due to self-join elimination doing something that perhaps it shouldn't. More about that later, after I've further analyzed it. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000b8a4ce064b1e9b2d Content-Type: application/octet-stream; name="v16-0002-Replace-get_relation_info_hook-with-build_simple.patch" Content-Disposition: attachment; filename="v16-0002-Replace-get_relation_info_hook-with-build_simple.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlsgemwo1 RnJvbSBkYTQzMTM0M2ZiOGZlYjhkNmMyOWZkZmZjNWU2M2QzYmZmMzkxNmViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMTAgRmViIDIwMjYgMDg6MTM6NDYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNiAy LzZdIFJlcGxhY2UgZ2V0X3JlbGF0aW9uX2luZm9faG9vayB3aXRoCiBidWlsZF9zaW1wbGVfcmVs X2hvb2suCgpGb3IgYSBsb25nIHRpbWUsIFBvc3RncmVTUUwgaGFzIGhhZCBhIGdldF9yZWxhdGlv bl9pbmZvX2hvb2sgd2hpY2gKcGx1Z2lucyBjYW4gdXNlIHRvIGVkaXRvcmlhbGl6ZSBvbiB0aGUg aW5mb3JtYXRpb24gdGhhdApnZXRfcmVsYXRpb25faW5mbyBvYnRhaW5zIGZyb20gdGhlIGNhdGFs b2dzLiBIb3dldmVyLCB0aGlzIGhvb2sgaXMKb25seSBjYWxsZWQgZm9yIGJhc2VyZWxzIG9mIHR5 cGUgUlRFX1JFTEFUSU9OLCBhbmQgdGhlcmUgaXMKcG90ZW50aWFsIHV0aWxpdHkgaW4gYSBzaW1p bGFyIGNhbGwgYmFjayBmb3Igb3RoZXIgdHlwZXMgb2YKUlRFcy4gVGhpcyBtaWdodCBoYXZlIGhh ZCB1dGlsaXR5IGV2ZW4gYmVmb3JlIGNvbW1pdAo0MDIwYjM3MGYyMTQzMTViOGMxMDQzMDMwMTg5 OGFjMjE2NTgxNDNmIGFkZGVkIHBnc19tYXNrIHRvClJlbE9wdEluZm8sIGJ1dCBpdCBjZXJ0YWlu bHkgaGFzIHV0aWxpdHkgbm93LgoKU28sIG1vdmUgdGhlIGNhbGxiYWNrIHVwIG9uZSBsZXZlbCwg ZGVsZXRpbmcgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBhbmQKYWRkaW5nIGJ1aWxkX3NpbXBsZV9y ZWxfaG9vayBpbnN0ZWFkLiBUaGUgbmV3IGNhbGxiYWNrIGlzIGNhbGxlZCBqdXN0CnNsaWdodGx5 IGxhdGVyIHRoYW4gYmVmb3JlIGFuZCB3aXRoIHNsaWdodGx5IGRpZmZlcmVudCBhcmd1bWVudHMs IGJ1dCBpdApzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBhZGp1c3QgZXhpc3Rp bmcgY29kZSB0aGF0IGN1cnJlbnR5eQp1c2VzIGdldF9yZWxhdGlvbl9pbmZvX2hvb2s6IHRoZSB2 YWx1ZXMgcHJldmlvdXNseSBhdmFpbGFibGUgYXMKcmVsYXRpb25PYmplY3RJZCBhbmQgaW5ocGFy ZW50IGFyZSBub3cgYXZhaWxhYmxlIHZpYSBydGUtPnJlbGlkIGFuZApydGUtPmluaCwgYW5kIGNh bGxzIHdoZXJlIHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04gY2FuIGJlIGlnbm9yZWQgaWYK ZGVzaXJlZC4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgfCAxNCAt LS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIHwgMTUg KysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgfCAg NiArKysrKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFuY2F0LmggICAgICB8ICA4IC0tLS0t LS0tCiA0IGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBkNjNlNzM5MGJlNy4uYjJmYmQ2 YTA4MmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTU3LDkgKzU3LDYg QEAKIC8qIEdVQyBwYXJhbWV0ZXIgKi8KIGludAkJCWNvbnN0cmFpbnRfZXhjbHVzaW9uID0gQ09O U1RSQUlOVF9FWENMVVNJT05fUEFSVElUSU9OOwogCi0vKiBIb29rIGZvciBwbHVnaW5zIHRvIGdl dCBjb250cm9sIGluIGdldF9yZWxhdGlvbl9pbmZvKCkgKi8KLWdldF9yZWxhdGlvbl9pbmZvX2hv b2tfdHlwZSBnZXRfcmVsYXRpb25faW5mb19ob29rID0gTlVMTDsKLQogdHlwZWRlZiBzdHJ1Y3Qg Tm90bnVsbEhhc2hFbnRyeQogewogCU9pZAkJCXJlbGlkOwkJCS8qIE9JRCBvZiB0aGUgcmVsYXRp b24gKi8KQEAgLTU3MSwxNyArNTY4LDYgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8g KnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJc2V0X3JlbGF0 aW9uX3BhcnRpdGlvbl9pbmZvKHJvb3QsIHJlbCwgcmVsYXRpb24pOwogCiAJdGFibGVfY2xvc2Uo cmVsYXRpb24sIE5vTG9jayk7Ci0KLQkvKgotCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlh bGl6ZSBvbiB0aGUgaW5mbyB3ZSBvYnRhaW5lZCBmcm9tIHRoZQotCSAqIGNhdGFsb2dzLiAgQWN0 aW9ucyBtaWdodCBpbmNsdWRlIGFsdGVyaW5nIHRoZSBhc3N1bWVkIHJlbGF0aW9uIHNpemUsCi0J ICogcmVtb3ZpbmcgYW4gaW5kZXgsIG9yIGFkZGluZyBhIGh5cG90aGV0aWNhbCBpbmRleCB0byB0 aGUgaW5kZXhsaXN0LgotCSAqCi0JICogQW4gZXh0ZW5zaW9uIGNhbiBhbHNvIG1vZGlmeSByZWwt PnBnc19tYXNrIGhlcmUgdG8gY29udHJvbCBwYXRoCi0JICogZ2VuZXJhdGlvbi4KLQkgKi8KLQlp ZiAoZ2V0X3JlbGF0aW9uX2luZm9faG9vaykKLQkJKCpnZXRfcmVsYXRpb25faW5mb19ob29rKSAo cm9vdCwgcmVsYXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwpOwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4IGE3MTRjODNmMWJhLi40YTg5ZWRhMDE0MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtNDcsNiArNDcsOSBAQCB0eXBl ZGVmIHN0cnVjdCBKb2luSGFzaEVudHJ5CiAJUmVsT3B0SW5mbyAqam9pbl9yZWw7CiB9IEpvaW5I YXNoRW50cnk7CiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gYnVpbGRf c2ltcGxlX3JlbCgpICovCitidWlsZF9zaW1wbGVfcmVsX2hvb2tfdHlwZSBidWlsZF9zaW1wbGVf cmVsX2hvb2sgPSBOVUxMOworCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGR1 cmluZyBqb2lucmVsIHNldHVwICovCiBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBqb2lucmVsX3Nl dHVwX2hvb2sgPSBOVUxMOwogCkBAIC0zOTQsNiArMzk3LDE4IEBAIGJ1aWxkX3NpbXBsZV9yZWwo UGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCQkJYnJl YWs7CiAJfQogCisJLyoKKwkgKiBBbGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhl IG5ldyBSZWxPcHRJbmZvLiBUaGlzIGNvdWxkCisJICogaW52b2x2ZSBlZGl0b3JpYWxpemluZyBv biB0aGUgaW5mb3JtYXRpb24gd2hpY2ggZ2V0X3JlbGF0aW9uX2luZm8KKwkgKiBvYnRhaW5lZCBm cm9tIHRoZSBjYXRhbG9ncywgc3VjaCBhcyBhbHRlcmluZyB0aGUgYXNzdW1lZCByZWxhdGlvbiBz aXplLAorCSAqIHJlbW92aW5nIGFuIGluZGV4LCBvciBhZGRpbmcgYSBoeXBvdGhldGljYWwgaW5k ZXggdG8gdGhlIGluZGV4bGlzdC4KKwkgKgorCSAqIEFuIGV4dGVuc2lvbiBjYW4gYWxzbyBtb2Rp ZnkgcmVsLT5wZ3NfbWFzayBoZXJlIHRvIGNvbnRyb2wgcGF0aAorCSAqIGdlbmVyYXRpb24uCisJ ICovCisJaWYgKGJ1aWxkX3NpbXBsZV9yZWxfaG9vaykKKwkJKCpidWlsZF9zaW1wbGVfcmVsX2hv b2spIChyb290LCByZWwsIHJ0ZSk7CisKIAkvKgogCSAqIFdlIG11c3QgYXBwbHkgdGhlIHBhcnRp YWxseSBmaWxsZWQgaW4gUmVsT3B0SW5mbyBiZWZvcmUgY2FsbGluZwogCSAqIGFwcGx5X2NoaWxk X2Jhc2VxdWFscyBkdWUgdG8gc29tZSB0cmFuc2Zvcm1hdGlvbnMgd2l0aGluIHRoYXQgZnVuY3Rp b24KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXggY2Y4YTY1NGZhNTMuLjgyOTc4NzBjZjdl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMTcsNiArMTcsMTIgQEAKICNpbmNsdWRl ICJub2Rlcy9iaXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKIAorLyog SG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBnZXRfcmVsYXRpb25faW5mbygpICov Cit0eXBlZGVmIHZvaWQgKCpidWlsZF9zaW1wbGVfcmVsX2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJCVJhbmdlVGJs RW50cnkgKnJ0ZSk7CitleHRlcm4gUEdETExJTVBPUlQgYnVpbGRfc2ltcGxlX3JlbF9ob29rX3R5 cGUgYnVpbGRfc2ltcGxlX3JlbF9ob29rOworCiAvKgogICogRXZlcnl0aGluZyBpbiBzdWJwYXRo cyBvciBwYXJ0aWFsX3N1YnBhdGhzIHdpbGwgYmVjb21lIHBhcnQgb2YgdGhlCiAgKiBBcHBlbmQg bm9kZSdzIHN1YnBhdGhzIGxpc3QuIFBhcnRpYWwgYW5kIG5vbi1wYXJ0aWFsIHN1YnBhdGhzIGNh biBiZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5jYXQuaCBiL3NyYy9p bmNsdWRlL29wdGltaXplci9wbGFuY2F0LmgKaW5kZXggOGQ3Y2M2ZDk4ODYuLjA5YmFmMWE2OTE2 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbmNhdC5oCisrKyBiL3NyYy9p bmNsdWRlL29wdGltaXplci9wbGFuY2F0LmgKQEAgLTE3LDE0ICsxNyw2IEBACiAjaW5jbHVkZSAi bm9kZXMvcGF0aG5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKIAotLyogSG9v ayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBnZXRfcmVsYXRpb25faW5mbygpICovCi10 eXBlZGVmIHZvaWQgKCpnZXRfcmVsYXRpb25faW5mb19ob29rX3R5cGUpIChQbGFubmVySW5mbyAq cm9vdCwKLQkJCQkJCQkJCQkJIE9pZCByZWxhdGlvbk9iamVjdElkLAotCQkJCQkJCQkJCQkgYm9v bCBpbmhwYXJlbnQsCi0JCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpyZWwpOwotZXh0ZXJuIFBHRExM SU1QT1JUIGdldF9yZWxhdGlvbl9pbmZvX2hvb2tfdHlwZSBnZXRfcmVsYXRpb25faW5mb19ob29r OwotCi0KIGV4dGVybiB2b2lkIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBP aWQgcmVsYXRpb25PYmplY3RJZCwKIAkJCQkJCQkgIGJvb2wgaW5ocGFyZW50LCBSZWxPcHRJbmZv ICpyZWwpOwogCi0tIAoyLjUxLjAKCg== --000000000000b8a4ce064b1e9b2d Content-Type: application/octet-stream; name="v16-0005-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Disposition: attachment; filename="v16-0005-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlsgemx44 RnJvbSAyMzgyZWIxNDA2YmU4ZGI4MDYwNmIxMGMyOTA4MDEyN2RlZDVjYzUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgNiBGZWIgMjAyNiAxNDo1MToyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDUv Nl0gQ29uc2lkZXIgc3RhcnR1cCBjb3N0IGFzIGEgZmlndXJlIG9mIG1lcml0IGZvcgogcGFydGlh bCBwYXRocy4KClByZXZpb3VzbHksIHRoZSBjb21lbnRzIHN0YXRlZCB0aGF0IHRoZXJlIHdhcyBu byBwdXJwb3NlIHRvIGNvbnNpZGVyaW5nCnN0YXJ0dXAgY29zdCBmb3IgcGFydGlhbCBwYXRocywg YnV0IHRoaXMgaXMgbm90IHRoZSBjYXNlOiBpdCdzIHBlcmZlY3RseQpyZWFzb25hYmxlIHRvIHdh bnQgYSBmYXN0LXN0YXJ0IHBhdGggZm9yIGEgcGxhbiB0aGF0IGludm9sdmVzIGEgTElNSVQKKHBl cmhhcHMgb3ZlciBhbiBhZ2dyZWdhdGUsIHNvIHRoYXQgdGhlcmUgaXMgZW5vdWdoIGRhdGEgYmVp bmcgcHJvY2Vzc2VkCnRvIGp1c3RpZnkgcGFyYWxsZWwgcXVlcnkgYnV0IHlldCB3ZSBkb24ndCB3 YW50IGFsbCB0aGUgcmVzdWx0IHJvd3MpLgoKQWNjb3JkaW5nbHksIHJld3JpdGUgYWRkX3BhcnRp YWxfcGF0aCBhbmQgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayB0bwpjb25zaWRlciBzdGFydHVw IGNvc3RzLiBUaGlzIGFsc28gZml4ZXMgYW4gaW5kZXBlbmRlbnQgYnVnIGluCmFkZF9wYXJ0aWFs X3BhdGhfcHJlY2hlY2s6IGNvbW1pdCBlMjIyNTM0Njc5NDJmZGIxMDAwODc3ODdjM2UxZTNhODYy MGM1NGIyCmZhaWxlZCB0byB1cGRhdGUgaXQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgbmV3IGRp c2FibGVkX25vZGVzIGZpZWxkLgpUaGF0IGJ1ZyBmaXggaXMgZm9ybWFsbHkgc2VwYXJhdGUgZnJv bSB0aGUgcmVzdCBvZiB0aGlzIHBhdGNoIGFuZCBjb3VsZApiZSBjb21taXR0ZWQgc2VwYXJhdGVs eSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBmaXggYm90aAppc3N1ZXMgdG9n ZXRoZXIsIGJlY2F1c2UgdGhlbiB3ZSBjYW4gKGFzIHRoaXMgY29tbWl0IGRvZXMpIGp1c3QgbWFr ZQphZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrIGRvIHRoZSBjb3N0IGNvbXBhcmlzb25zIGluIHRo ZSBzYW1lIHdheSBhcwpjb21wYXJlX3BhdGhfY29zdHNfZnV6emlseSwgd2hpY2ggaG9wZWZ1bGx5 IHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YKZW5kaW5nIHVwIHdpdGggc29tZXRoaW5nIHRoYXQncyBz dGlsbCBpbmNvcnJlY3QuCgpUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIGVhcmxpZXIgd29yayBvbiB0 aGlzIHRvcGljIGJ5IFRvbWFzIFZvbmRyYSwKYnV0IEkgaGF2ZSByZXdyaXR0ZW4gYSBncmVhdCBk ZWFsIG9mIGl0LgoKQ28tYXV0aG9yZWQtYnk6IFJvYmVydCBIYWFzIDxyaGFhc0Bwb3N0Z3Jlc3Fs Lm9yZz4KQ28tYXV0aG9yZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgotLS0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgICAgICAgICB8ICAgMyArCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgICAgICAgfCAxNTkgKysrKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgICAgICAg ICAgfCAgIDIgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0ICAg ICB8ICAxOCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2gub3V0ICAgICAg IHwgIDEzICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2guc3FsICAgICAgICAgICAg fCAgMTAgKy0KIDYgZmlsZXMgY2hhbmdlZCwgMTIyIGluc2VydGlvbnMoKyksIDgzIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmluZGV4IGUwYzAwZTI2ZGQ1 Li4wNDQ1NjBkYTdiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9p bnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBAIC0x MDQ4LDYgKzEwNDgsNyBAQCB0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCWluaXRpYWxfY29zdF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBqb2ludHlwZSwg bmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5uZXJfcGF0aCwgZXh0cmEp OwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlz YWJsZWRfbm9kZXMsCisJCQkJCQkJCSAgIHdvcmtzcGFjZS5zdGFydHVwX2Nvc3QsCiAJCQkJCQkJ CSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBwYXRoa2V5cykpCiAJCXJldHVybjsKIApAQCAtMTIz Nyw2ICsxMjM4LDcgQEAgdHJ5X3BhcnRpYWxfbWVyZ2Vqb2luX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkgICBleHRyYSk7CiAKIAlpZiAoIWFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2so am9pbnJlbCwgd29ya3NwYWNlLmRpc2FibGVkX25vZGVzLAorCQkJCQkJCQkgICB3b3Jrc3BhY2Uu c3RhcnR1cF9jb3N0LAogCQkJCQkJCQkgICB3b3Jrc3BhY2UudG90YWxfY29zdCwgcGF0aGtleXMp KQogCQlyZXR1cm47CiAKQEAgLTEzNjksNiArMTM3MSw3IEBAIHRyeV9wYXJ0aWFsX2hhc2hqb2lu X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJaW5pdGlhbF9jb3N0X2hhc2hqb2luKHJvb3QsICZ3 b3Jrc3BhY2UsIGpvaW50eXBlLCBoYXNoY2xhdXNlcywKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5u ZXJfcGF0aCwgZXh0cmEsIHBhcmFsbGVsX2hhc2gpOwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9w cmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJCSAgIHdv cmtzcGFjZS5zdGFydHVwX2Nvc3QsCiAJCQkJCQkJCSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBO SUwpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4 IDg3NTc2NGFiZGJlLi5kNjFmMzI4NzA3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jCkBAIC03NzcsMTAgKzc3Nyw5IEBAIGFkZF9wYXRoX3ByZWNoZWNrKFJlbE9wdEluZm8g KnBhcmVudF9yZWwsIGludCBkaXNhYmxlZF9ub2RlcywKICAqCiAgKgkgIEJlY2F1c2Ugd2UgZG9u J3QgY29uc2lkZXIgcGFyYW1ldGVyaXplZCBwYXRocyBoZXJlLCB3ZSBhbHNvIGRvbid0CiAgKgkg IG5lZWQgdG8gY29uc2lkZXIgdGhlIHJvdyBjb3VudHMgYXMgYSBtZWFzdXJlIG9mIHF1YWxpdHk6 IGV2ZXJ5IHBhdGggd2lsbAotICoJICBwcm9kdWNlIHRoZSBzYW1lIG51bWJlciBvZiByb3dzLiAg TmVpdGhlciBkbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHN0YXJ0dXAKLSAqCSAgY29zdHM6IHBhcmFs bGVsaXNtIGlzIG9ubHkgdXNlZCBmb3IgcGxhbnMgdGhhdCB3aWxsIGJlIHJ1biB0byBjb21wbGV0 aW9uLgotICoJICBUaGVyZWZvcmUsIHRoaXMgcm91dGluZSBpcyBtdWNoIHNpbXBsZXIgdGhhbiBh ZGRfcGF0aDogaXQgbmVlZHMgdG8KLSAqCSAgY29uc2lkZXIgb25seSBkaXNhYmxlZCBub2Rlcywg cGF0aGtleXMgYW5kIHRvdGFsIGNvc3QuCisgKgkgIHByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9m IHJvd3MuICBIb3dldmVyLCB3ZSBkbyBuZWVkIHRvIGNvbnNpZGVyIHRoZQorICoJICBzdGFydHVw IGNvc3RzOiB0aGlzIHBhcnRpYWwgcGF0aCBjb3VsZCBiZSB1c2VkIGJlbmVhdGggYSBMaW1pdCBu b2RlLAorICoJICBzbyBhIGZhc3Qtc3RhcnQgcGxhbiBjb3VsZCBiZSBjb3JyZWN0LgogICoKICAq CSAgQXMgd2l0aCBhZGRfcGF0aCwgd2UgcGZyZWUgcGF0aHMgdGhhdCBhcmUgZm91bmQgdG8gYmUg ZG9taW5hdGVkIGJ5CiAgKgkgIGFub3RoZXIgcGFydGlhbCBwYXRoOyB0aGlzIHJlcXVpcmVzIHRo YXQgdGhlcmUgYmUgbm8gb3RoZXIgcmVmZXJlbmNlcyB0bwpAQCAtODE4LDUyICs4MTcsMzYgQEAg YWRkX3BhcnRpYWxfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkK IAkJLyogQ29tcGFyZSBwYXRoa2V5cy4gKi8KIAkJa2V5c2NtcCA9IGNvbXBhcmVfcGF0aGtleXMo bmV3X3BhdGgtPnBhdGhrZXlzLCBvbGRfcGF0aC0+cGF0aGtleXMpOwogCi0JCS8qIFVubGVzcyBw YXRoa2V5cyBhcmUgaW5jb21wYXRpYmxlLCBrZWVwIGp1c3Qgb25lIG9mIHRoZSB0d28gcGF0aHMu ICovCisJCS8qCisJCSAqIFVubGVzcyBwYXRoa2V5cyBhcmUgaW5jb21wYXRpYmxlLCBzZWUgaWYg b25lIG9mIHRoZSBwYXRocyBkb21pbmF0ZXMKKwkJICogdGhlIG90aGVyIChib3RoIGluIHN0YXJ0 dXAgYW5kIHRvdGFsIGNvc3QpLiBJdCBtYXkgaGFwcGVuIHRoYXQgb25lCisJCSAqIHBhdGggaGFz IGxvd2VyIHN0YXJ0dXAgY29zdCwgdGhlIG90aGVyIGhhcyBsb3dlciB0b3RhbCBjb3N0LgorCQkg Ki8KIAkJaWYgKGtleXNjbXAgIT0gUEFUSEtFWVNfRElGRkVSRU5UKQogCQl7Ci0JCQlpZiAodW5s aWtlbHkobmV3X3BhdGgtPmRpc2FibGVkX25vZGVzICE9IG9sZF9wYXRoLT5kaXNhYmxlZF9ub2Rl cykpCisJCQlQYXRoQ29zdENvbXBhcmlzb24gY29zdGNtcDsKKworCQkJLyoKKwkJCSAqIERvIGEg ZnV6enkgY29zdCBjb21wYXJpc29uIHdpdGggc3RhbmRhcmQgZnV6emluZXNzIGxpbWl0LgorCQkJ ICovCisJCQljb3N0Y21wID0gY29tcGFyZV9wYXRoX2Nvc3RzX2Z1enppbHkobmV3X3BhdGgsIG9s ZF9wYXRoLAorCQkJCQkJCQkJCQkJIFNURF9GVVpaX0ZBQ1RPUik7CisJCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19CRVRURVIxKQogCQkJewotCQkJCWlmIChuZXdfcGF0aC0+ZGlzYWJsZWRfbm9kZXMg PiBvbGRfcGF0aC0+ZGlzYWJsZWRfbm9kZXMpCi0JCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKLQkJ CQllbHNlCisJCQkJaWYgKGtleXNjbXAgPT0gUEFUSEtFWVNfQkVUVEVSMSkKIAkJCQkJcmVtb3Zl X29sZCA9IHRydWU7CiAJCQl9Ci0JCQllbHNlIGlmIChuZXdfcGF0aC0+dG90YWxfY29zdCA+IG9s ZF9wYXRoLT50b3RhbF9jb3N0Ci0JCQkJCSAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJCWVsc2UgaWYg KGNvc3RjbXAgPT0gQ09TVFNfQkVUVEVSMikKIAkJCXsKLQkJCQkvKiBOZXcgcGF0aCBjb3N0cyBt b3JlOyBrZWVwIGl0IG9ubHkgaWYgcGF0aGtleXMgYXJlIGJldHRlci4gKi8KLQkJCQlpZiAoa2V5 c2NtcCAhPSBQQVRIS0VZU19CRVRURVIxKQorCQkJCWlmIChrZXlzY21wID09IFBBVEhLRVlTX0JF VFRFUjIpCiAJCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKIAkJCX0KLQkJCWVsc2UgaWYgKG9sZF9w YXRoLT50b3RhbF9jb3N0ID4gbmV3X3BhdGgtPnRvdGFsX2Nvc3QKLQkJCQkJICogU1REX0ZVWlpf RkFDVE9SKQorCQkJZWxzZSBpZiAoY29zdGNtcCA9PSBDT1NUU19FUVVBTCkKIAkJCXsKLQkJCQkv KiBPbGQgcGF0aCBjb3N0cyBtb3JlOyBrZWVwIGl0IG9ubHkgaWYgcGF0aGtleXMgYXJlIGJldHRl ci4gKi8KLQkJCQlpZiAoa2V5c2NtcCAhPSBQQVRIS0VZU19CRVRURVIyKQorCQkJCWlmIChrZXlz Y21wID09IFBBVEhLRVlTX0JFVFRFUjEpCiAJCQkJCXJlbW92ZV9vbGQgPSB0cnVlOwotCQkJfQot CQkJZWxzZSBpZiAoa2V5c2NtcCA9PSBQQVRIS0VZU19CRVRURVIxKQotCQkJewotCQkJCS8qIENv c3RzIGFyZSBhYm91dCB0aGUgc2FtZSwgbmV3IHBhdGggaGFzIGJldHRlciBwYXRoa2V5cy4gKi8K LQkJCQlyZW1vdmVfb2xkID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgaWYgKGtleXNjbXAgPT0gUEFU SEtFWVNfQkVUVEVSMikKLQkJCXsKLQkJCQkvKiBDb3N0cyBhcmUgYWJvdXQgdGhlIHNhbWUsIG9s ZCBwYXRoIGhhcyBiZXR0ZXIgcGF0aGtleXMuICovCi0JCQkJYWNjZXB0X25ldyA9IGZhbHNlOwot CQkJfQotCQkJZWxzZSBpZiAob2xkX3BhdGgtPnRvdGFsX2Nvc3QgPiBuZXdfcGF0aC0+dG90YWxf Y29zdCAqIDEuMDAwMDAwMDAwMSkKLQkJCXsKLQkJCQkvKiBQYXRoa2V5cyBhcmUgdGhlIHNhbWUs IGFuZCB0aGUgb2xkIHBhdGggY29zdHMgbW9yZS4gKi8KLQkJCQlyZW1vdmVfb2xkID0gdHJ1ZTsK LQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFBhdGhrZXlzIGFyZSB0aGUgc2Ft ZSwgYW5kIG5ldyBwYXRoIGlzbid0IG1hdGVyaWFsbHkKLQkJCQkgKiBjaGVhcGVyLgotCQkJCSAq LwotCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKKwkJCQllbHNlIGlmIChrZXlzY21wID09IFBBVEhL RVlTX0JFVFRFUjIpCisJCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKIAkJCX0KIAkJfQogCkBAIC05 MTQsMTYgKzg5NywxNiBAQCBhZGRfcGFydGlhbF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWws IFBhdGggKm5ld19wYXRoKQogICogYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjawogICoJICBDaGVj ayB3aGV0aGVyIGEgcHJvcG9zZWQgbmV3IHBhcnRpYWwgcGF0aCBjb3VsZCBwb3NzaWJseSBnZXQg YWNjZXB0ZWQuCiAgKgotICogVW5saWtlIGFkZF9wYXRoX3ByZWNoZWNrLCB3ZSBjYW4gaWdub3Jl IHN0YXJ0dXAgY29zdCBhbmQgcGFyYW1ldGVyaXphdGlvbiwKLSAqIHNpbmNlIHRoZXkgZG9uJ3Qg bWF0dGVyIGZvciBwYXJ0aWFsIHBhdGhzIChzZWUgYWRkX3BhcnRpYWxfcGF0aCkuICBCdXQKLSAq IHdlIGRvIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGFkZCBhIHBhcnRpYWwgcGF0aCBpZiB0 aGVyZSdzIGFscmVhZHkKLSAqIGEgY29tcGxldGUgcGF0aCB0aGF0IGRvbWluYXRlcyBpdCwgc2lu Y2UgaW4gdGhhdCBjYXNlIHRoZSBwcm9wb3NlZCBwYXRoCi0gKiBpcyBzdXJlbHkgYSBsb3Nlci4K KyAqIFVubGlrZSBhZGRfcGF0aF9wcmVjaGVjaywgd2UgY2FuIGlnbm9yZSBwYXJhbWV0ZXJpemF0 aW9uLCBzaW5jZSBpdCBkb2Vzbid0CisgKiBtYXR0ZXIgZm9yIHBhcnRpYWwgcGF0aHMgKHNlZSBh ZGRfcGFydGlhbF9wYXRoKS4gIEJ1dCB3ZSBkbyB3YW50IHRvIG1ha2UKKyAqIHN1cmUgd2UgZG9u J3QgYWRkIGEgcGFydGlhbCBwYXRoIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIGNvbXBsZXRlIHBhdGgg dGhhdAorICogZG9taW5hdGVzIGl0LCBzaW5jZSBpbiB0aGF0IGNhc2UgdGhlIHByb3Bvc2VkIHBh dGggaXMgc3VyZWx5IGEgbG9zZXIuCiAgKi8KIGJvb2wKIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hl Y2soUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAotCQkJCQkJICBD b3N0IHRvdGFsX2Nvc3QsIExpc3QgKnBhdGhrZXlzKQorCQkJCQkJICBDb3N0IHN0YXJ0dXBfY29z dCwgQ29zdCB0b3RhbF9jb3N0LCBMaXN0ICpwYXRoa2V5cykKIHsKKwlib29sCQljb25zaWRlcl9z dGFydHVwID0gcGFyZW50X3JlbC0+Y29uc2lkZXJfc3RhcnR1cDsKIAlMaXN0Q2VsbCAgICpwMTsK IAogCS8qCkBAIC05MzMsMjUgKzkxNiw4MCBAQCBhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKFJl bE9wdEluZm8gKnBhcmVudF9yZWwsIGludCBkaXNhYmxlZF9ub2RlcywKIAkgKiBpcyBjbGVhcmx5 IHN1cGVyaW9yIHRvIHNvbWUgZXhpc3RpbmcgcGFydGlhbCBwYXRoIC0tIGF0IGxlYXN0LCBtb2R1 bG8KIAkgKiBmaW5hbCBjb3N0IGNvbXB1dGF0aW9ucy4gIElmIHNvLCB3ZSBkZWZpbml0ZWx5IHdh bnQgdG8gY29uc2lkZXIgaXQuCiAJICoKLQkgKiBVbmxpa2UgYWRkX3BhdGgoKSwgd2UgYWx3YXlz IGNvbXBhcmUgcGF0aGtleXMgaGVyZS4gIFRoaXMgaXMgYmVjYXVzZSB3ZQotCSAqIGV4cGVjdCBw YXJ0aWFsX3BhdGhsaXN0IHRvIGJlIHZlcnkgc2hvcnQsIGFuZCBnZXR0aW5nIGEgZGVmaW5pdGl2 ZQorCSAqIFVubGlrZSBhZGRfcGF0aCgpLCB3ZSBuZXZlciB0cnkgdG8gZXhpdCB0aGlzIGxvb3Ag ZWFybHkuIFRoaXMgaXMgYmVjYXVzZQorCSAqIHdlIGV4cGVjdCBwYXJ0aWFsX3BhdGhsaXN0IHRv IGJlIHZlcnkgc2hvcnQsIGFuZCBnZXR0aW5nIGEgZGVmaW5pdGl2ZQogCSAqIGFuc3dlciBhdCB0 aGlzIHN0YWdlIGF2b2lkcyB0aGUgbmVlZCB0byBjYWxsIGFkZF9wYXRoX3ByZWNoZWNrLgogCSAq LwogCWZvcmVhY2gocDEsIHBhcmVudF9yZWwtPnBhcnRpYWxfcGF0aGxpc3QpCiAJewogCQlQYXRo CSAgICpvbGRfcGF0aCA9IChQYXRoICopIGxmaXJzdChwMSk7CisJCVBhdGhDb3N0Q29tcGFyaXNv biBjb3N0Y21wOwogCQlQYXRoS2V5c0NvbXBhcmlzb24ga2V5c2NtcDsKIAotCQlrZXlzY21wID0g Y29tcGFyZV9wYXRoa2V5cyhwYXRoa2V5cywgb2xkX3BhdGgtPnBhdGhrZXlzKTsKLQkJaWYgKGtl eXNjbXAgIT0gUEFUSEtFWVNfRElGRkVSRU5UKQorCQkvKgorCQkgKiBGaXJzdCwgY29tcGFyZSBj b3N0cyBhbmQgZGlzYWJsZWQgbm9kZXMuIFRoaXMgbG9naWMgc2hvdWxkIGJlCisJCSAqIGlkZW50 aWNhbCB0byBjb21wYXJlX3BhdGhfY29zdHNfZnV6emlseSwgZXhjZXB0IHRoYXQgb25lIG9mIHRo ZQorCQkgKiBwYXRocyBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldCwgYW5kIHRoZSBmdXp6IGZhY3Rv ciBpcyBhbHdheXMKKwkJICogU1REX0ZVWlpfRkFDVE9SLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5 KG9sZF9wYXRoLT5kaXNhYmxlZF9ub2RlcyAhPSBkaXNhYmxlZF9ub2RlcykpCiAJCXsKLQkJCWlm ICh0b3RhbF9jb3N0ID4gb2xkX3BhdGgtPnRvdGFsX2Nvc3QgKiBTVERfRlVaWl9GQUNUT1IgJiYK LQkJCQlrZXlzY21wICE9IFBBVEhLRVlTX0JFVFRFUjEpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJ aWYgKG9sZF9wYXRoLT50b3RhbF9jb3N0ID4gdG90YWxfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUiAm JgotCQkJCWtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKLQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CWlmIChkaXNhYmxlZF9ub2RlcyA8IG9sZF9wYXRoLT5kaXNhYmxlZF9ub2RlcykKKwkJCQljb3N0 Y21wID0gQ09TVFNfQkVUVEVSMTsKKwkJCWVsc2UKKwkJCQljb3N0Y21wID0gQ09TVFNfQkVUVEVS MjsKKwkJfQorCQllbHNlIGlmICh0b3RhbF9jb3N0ID4gb2xkX3BhdGgtPnRvdGFsX2Nvc3QgKiBT VERfRlVaWl9GQUNUT1IpCisJCXsKKwkJCWlmIChjb25zaWRlcl9zdGFydHVwICYmCisJCQkJb2xk X3BhdGgtPnN0YXJ0dXBfY29zdCA+IHN0YXJ0dXBfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJ CQljb3N0Y21wID0gQ09TVFNfRElGRkVSRU5UOworCQkJZWxzZQorCQkJCWNvc3RjbXAgPSBDT1NU U19CRVRURVIyOworCQl9CisJCWVsc2UgaWYgKG9sZF9wYXRoLT50b3RhbF9jb3N0ID4gdG90YWxf Y29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJeworCQkJaWYgKGNvbnNpZGVyX3N0YXJ0dXAgJiYK KwkJCQlzdGFydHVwX2Nvc3QgPiBvbGRfcGF0aC0+c3RhcnR1cF9jb3N0ICogU1REX0ZVWlpfRkFD VE9SKQorCQkJCWNvc3RjbXAgPSBDT1NUU19ESUZGRVJFTlQ7CisJCQllbHNlCisJCQkJY29zdGNt cCA9IENPU1RTX0JFVFRFUjE7CiAJCX0KKwkJZWxzZSBpZiAoc3RhcnR1cF9jb3N0ID4gb2xkX3Bh dGgtPnN0YXJ0dXBfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJCWNvc3RjbXAgPSBDT1NUU19C RVRURVIyOworCQllbHNlIGlmIChvbGRfcGF0aC0+c3RhcnR1cF9jb3N0ID4gc3RhcnR1cF9jb3N0 ICogU1REX0ZVWlpfRkFDVE9SKQorCQkJY29zdGNtcCA9IENPU1RTX0JFVFRFUjE7CisJCWVsc2UK KwkJCWNvc3RjbXAgPSBDT1NUU19FUVVBTDsKKworCQkvKgorCQkgKiBJZiBvbmUgcGF0aCB3aW5z IG9uIHN0YXJ0dXAgY29zdCBhbmQgdGhlIG90aGVyIG9uIHRvdGFsIGNvc3QsIHdlCisJCSAqIGNh bid0IHNheSBmb3Igc3VyZSB3aGljaCBpcyBiZXR0ZXIuCisJCSAqLworCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19ESUZGRVJFTlQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGUgdHdv IHBhdGhzIGhhdmUgZGlmZmVyZW50IHBhdGhrZXlzLCB3ZSBjYW4ndCBzYXkgZm9yIHN1cmUKKwkJ ICogd2hpY2ggaXMgYmV0dGVyLgorCQkgKi8KKwkJa2V5c2NtcCA9IGNvbXBhcmVfcGF0aGtleXMo cGF0aGtleXMsIG9sZF9wYXRoLT5wYXRoa2V5cyk7CisJCWlmIChrZXlzY21wID09IFBBVEhLRVlT X0RJRkZFUkVOVCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoZSBleGlzdGluZyBw YXRoIGlzIGNoZWFwZXIgYW5kIHRoZSBwYXRoa2V5cyBhcmUgZXF1YWwgb3Igd29yc2UsCisJCSAq IHRoZSBuZXcgcGF0aCBpcyBub3QgaW50ZXJlc3RpbmcuCisJCSAqLworCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19CRVRURVIyICYmIGtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMSkKKwkJCXJldHVy biBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB0aGUgbmV3IHBhdGggaXMgY2hlYXBlciBhbmQgdGhl IHBhdGhrZXlzIGFyZSBlcXVhbCBvciBiZXR0ZXIsCisJCSAqIGl0IGlzIGRlZmluaXRlbHkgaW50 ZXJlc3RpbmcuCisJCSAqLworCQlpZiAoY29zdGNtcCA9PSBDT1NUU19CRVRURVIxICYmIGtleXNj bXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKKwkJCXJldHVybiB0cnVlOwogCX0KIAogCS8qCkBAIC05 NTksMTQgKzk5Nyw5IEBAIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2soUmVsT3B0SW5mbyAqcGFy ZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAogCSAqIGNsZWFybHkgZ29vZCBlbm91Z2ggdGhh dCBpdCBtaWdodCByZXBsYWNlIG9uZS4gIENvbXBhcmUgaXQgdG8KIAkgKiBub24tcGFyYWxsZWwg cGxhbnMuICBJZiBpdCBsb3NlcyBldmVuIGJlZm9yZSBhY2NvdW50aW5nIGZvciB0aGUgY29zdCBv ZgogCSAqIHRoZSBHYXRoZXIgbm9kZSwgd2Ugc2hvdWxkIGRlZmluaXRlbHkgcmVqZWN0IGl0Lgot CSAqCi0JICogTm90ZSB0aGF0IHdlIHBhc3MgdGhlIHRvdGFsX2Nvc3QgdG8gYWRkX3BhdGhfcHJl Y2hlY2sgdHdpY2UuICBUaGlzIGlzCi0JICogYmVjYXVzZSBpdCdzIG5ldmVyIGFkdmFudGFnZW91 cyB0byBjb25zaWRlciB0aGUgc3RhcnR1cCBjb3N0IG9mIGEKLQkgKiBwYXJ0aWFsIHBhdGg7IHRo ZSByZXN1bHRpbmcgcGxhbnMsIGlmIHJ1biBpbiBwYXJhbGxlbCwgd2lsbCBiZSBydW4gdG8KLQkg KiBjb21wbGV0aW9uLgogCSAqLwotCWlmICghYWRkX3BhdGhfcHJlY2hlY2socGFyZW50X3JlbCwg ZGlzYWJsZWRfbm9kZXMsIHRvdGFsX2Nvc3QsIHRvdGFsX2Nvc3QsCi0JCQkJCQkgICBwYXRoa2V5 cywgTlVMTCkpCisJaWYgKCFhZGRfcGF0aF9wcmVjaGVjayhwYXJlbnRfcmVsLCBkaXNhYmxlZF9u b2Rlcywgc3RhcnR1cF9jb3N0LAorCQkJCQkJICAgdG90YWxfY29zdCwgcGF0aGtleXMsIE5VTEwp KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2Rl LmgKaW5kZXggODI5Nzg3MGNmN2UuLmI4YjIyMDRlZWI1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaApAQCAtNjEsNyArNjEsNyBAQCBleHRlcm4gYm9vbCBhZGRfcGF0aF9wcmVjaGVjayhSZWxP cHRJbmZvICpwYXJlbnRfcmVsLCBpbnQgZGlzYWJsZWRfbm9kZXMsCiAJCQkJCQkJICBMaXN0ICpw YXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKIGV4dGVybiB2b2lkIGFkZF9wYXJ0aWFs X3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgpOwogZXh0ZXJuIGJv b2wgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhSZWxPcHRJbmZvICpwYXJlbnRfcmVsLAotCQkJ CQkJCQkJICBpbnQgZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJCQkgIGludCBkaXNhYmxlZF9ub2Rl cywgQ29zdCBzdGFydHVwX2Nvc3QsCiAJCQkJCQkJCQkgIENvc3QgdG90YWxfY29zdCwgTGlzdCAq cGF0aGtleXMpOwogCiBleHRlcm4gUGF0aCAqY3JlYXRlX3NlcXNjYW5fcGF0aChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9pbmNyZW1lbnRhbF9zb3J0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv aW5jcmVtZW50YWxfc29ydC5vdXQKaW5kZXggZmRlYzViOWJhNTIuLjI5MDkwZGNhMWJhIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29ydC5vdXQKQEAgLTE0 NTAsMjEgKzE0NTAsMjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgYSxiLHN1bShjKSBm cm9tIHQgZ3JvdXAgYnkgMSwyIG9yZGVyIGJ5IDEsMiwzIGxpbWl0IDEKIAogc2V0IGVuYWJsZV9p bmNyZW1lbnRhbF9zb3J0ID0gb247CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBhLGIsc3Vt KGMpIGZyb20gdCBncm91cCBieSAxLDIgb3JkZXIgYnkgMSwyLDMgbGltaXQgMTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBMaW1pdAogICAgLT4gIEluY3JlbWVudGFsIFNvcnQKICAgICAgICAgIFNvcnQgS2V5 OiBhLCBiLCAoc3VtKGMpKQogICAgICAgICAgUHJlc29ydGVkIEtleTogYSwgYgotICAgICAgICAg LT4gIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAtPiAgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUK ICAgICAgICAgICAgICAgIEdyb3VwIEtleTogYSwgYgogICAgICAgICAgICAgICAgLT4gIEdhdGhl ciBNZXJnZQogICAgICAgICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCi0gICAgICAg ICAgICAgICAgICAgICAtPiAgSW5jcmVtZW50YWwgU29ydAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgU29ydCBLZXk6IGEsIGIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRl ZCBLZXk6IGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBJbmRleCBT Y2FuIHVzaW5nIHRfYV9pZHggb24gdAotKDEyIHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBhLCBiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSW5jcmVtZW50YWwg U29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGEsIGIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRlZCBLZXk6IGEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBJbmRleCBTY2FuIHVzaW5nIHRf YV9pZHggb24gdAorKDE0IHJvd3MpCiAKIC0tIEluY3JlbWVudGFsIHNvcnQgdnMuIHNldCBvcGVy YXRpb25zIHdpdGggdmFybm8gMAogc2V0IGVuYWJsZV9oYXNoYWdnIHRvIG9mZjsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dAppbmRleCA0NzQ5ZjZlZDcwZC4uYmM3Y2M3NjQ2 N2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFzaC5vdXQKQEAgLTc2LDggKzc2 LDggQEAgaW5zZXJ0IGludG8gZXh0cmVtZWx5X3NrZXdlZAogdXBkYXRlIHBnX2NsYXNzCiAgIHNl dCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUoJ2V4dHJlbWVseV9z a2V3ZWQnKSAvIDgxOTIKICAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlfc2tld2VkJzsKLS0t IE1ha2UgYSByZWxhdGlvbiB3aXRoIGEgY291cGxlIG9mIGVub3Jtb3VzIHR1cGxlcy4KLWNyZWF0 ZSB0YWJsZSB3aWRlIGFzIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwgMikgYXMgaWQsIHJwYWQo JycsIDMyMDAwMCwgJ3gnKSBhcyB0OworLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggc2V2ZXJhbCBl bm9ybW91cyB0dXBsZXMuCitjcmVhdGUgdGFibGUgd2lkZSBhcyBzZWxlY3QgZ2VuZXJhdGVfc2Vy aWVzKDEsIDMpIGFzIGlkLCBycGFkKCcnLCAzMjAwMDAsICd4JykgYXMgdDsKIGFsdGVyIHRhYmxl IHdpZGUgc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CiAtLSBUaGUgIm9wdGltYWwiIGNhc2U6 IHRoZSBoYXNoIHRhYmxlIGZpdHMgaW4gbWVtb3J5OyB3ZSBwbGFuIGZvciAxCiAtLSBiYXRjaCwg d2Ugc3RpY2sgdG8gdGhhdCBudW1iZXIsIGFuZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRo aW4KQEAgLTkyMiw3ICs5MjIsNyBAQCBzZXQgd29ya19tZW0gPSAnMTI4a0InOwogc2V0IGhhc2hf bWVtX211bHRpcGxpZXIgPSAxLjA7CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCBsZW5n dGgobWF4KHMudCkpCi0gIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2Uo dCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CisgIGZyb20gd2lkZSBs ZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRl IHdoZXJlIGlkIDwgMykgcyB1c2luZyAoaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEZpbmFsaXpl IEFnZ3JlZ2F0ZQpAQCAtOTM0LDEwICs5MzQsMTEgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHdpZGUKICAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gd2lkZSB3aWRlXzEKLSg5IHJvd3MpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChpZCA8IDMpCisoMTAgcm93cykKIAog c2VsZWN0IGxlbmd0aChtYXgocy50KSkKLWZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwg Y29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7Citmcm9t IHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZy b20gd2lkZSB3aGVyZSBpZCA8IDMpIHMgdXNpbmcgKGlkKTsKICBsZW5ndGggCiAtLS0tLS0tLQog IDMyMDAwMApAQCAtOTQ3LDcgKzk0OCw3IEBAIHNlbGVjdCBmaW5hbCA+IDEgYXMgbXVsdGliYXRj aAogICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAogJCQKICAgc2VsZWN0IGxlbmd0aChtYXgocy50 KSkKLSAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwg JycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKKyAgZnJvbSB3aWRlIGxlZnQgam9pbiAo c2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUgd2hlcmUgaWQg PCAzKSBzIHVzaW5nIChpZCk7CiAkJCk7CiAgbXVsdGliYXRjaCAKIC0tLS0tLS0tLS0tLQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNoLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKaW5kZXggNDlkM2ZkNjE4NTYuLjUzZGIxNzU0YmIyIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2guc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKQEAgLTgzLDggKzgzLDggQEAgdXBkYXRlIHBn X2NsYXNzCiAgIHNldCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUo J2V4dHJlbWVseV9za2V3ZWQnKSAvIDgxOTIKICAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlf c2tld2VkJzsKIAotLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggYSBjb3VwbGUgb2YgZW5vcm1vdXMg dHVwbGVzLgotY3JlYXRlIHRhYmxlIHdpZGUgYXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAy KSBhcyBpZCwgcnBhZCgnJywgMzIwMDAwLCAneCcpIGFzIHQ7CistLSBNYWtlIGEgcmVsYXRpb24g d2l0aCBzZXZlcmFsIGVub3Jtb3VzIHR1cGxlcy4KK2NyZWF0ZSB0YWJsZSB3aWRlIGFzIHNlbGVj dCBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgYXMgaWQsIHJwYWQoJycsIDMyMDAwMCwgJ3gnKSBhcyB0 OwogYWx0ZXIgdGFibGUgd2lkZSBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKIAogLS0gVGhl ICJvcHRpbWFsIiBjYXNlOiB0aGUgaGFzaCB0YWJsZSBmaXRzIGluIG1lbW9yeTsgd2UgcGxhbiBm b3IgMQpAQCAtNDk2LDE0ICs0OTYsMTQgQEAgc2V0IHdvcmtfbWVtID0gJzEyOGtCJzsKIHNldCBo YXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOwogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3Qg bGVuZ3RoKG1heChzLnQpKQotICBmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxl c2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworICBmcm9tIHdp ZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20g d2lkZSB3aGVyZSBpZCA8IDMpIHMgdXNpbmcgKGlkKTsKIHNlbGVjdCBsZW5ndGgobWF4KHMudCkp Ci1mcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBh cyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0 IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUgd2hlcmUgaWQgPCAzKSBz IHVzaW5nIChpZCk7CiBzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKICAgZnJvbSBoYXNo X2pvaW5fYmF0Y2hlcygKICQkCiAgIHNlbGVjdCBsZW5ndGgobWF4KHMudCkpCi0gIGZyb20gd2lk ZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3 aWRlKSBzIHVzaW5nIChpZCk7CisgIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29h bGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlIHdoZXJlIGlkIDwgMykgcyB1c2luZyAo aWQpOwogJCQpOwogcm9sbGJhY2sgdG8gc2V0dGluZ3M7CiAKLS0gCjIuNTEuMAoK --000000000000b8a4ce064b1e9b2d Content-Type: application/octet-stream; name="v16-0004-Fix-add_partial_path-interaction-with-disabled_n.patch" Content-Disposition: attachment; filename="v16-0004-Fix-add_partial_path-interaction-with-disabled_n.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlsgemx03 RnJvbSBiYmMyNTNjOTg0MjA4NzBjYTBhMmQ1YTgyYmQyNjFiYmNiMDcwYTkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgNSBGZWIgMjAyNiAxNToyMzozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDQv Nl0gRml4IGFkZF9wYXJ0aWFsX3BhdGggaW50ZXJhY3Rpb24gd2l0aCBkaXNhYmxlZF9ub2RlcwoK Q29tbWl0IGUyMjI1MzQ2Nzk0MmZkYjEwMDA4Nzc4N2MzZTFlM2E4NjIwYzU0YjIgYWRqdXN0ZWQg dGhlIGxvZ2ljIGluCmFkZF9wYXRoKCkgdG8ga2VlcCB0aGUgcGF0aCBsaXN0IHNvcnRlZCBieSBk aXNhYmxlZF9ub2RlcyBhbmQgdGhlbiBieQp0b3RhbF9jb3N0LCBidXQgZmFpbGVkIHRvIG1ha2Ug dGhlIGNvcnJlc3BvbmRpbmcgYWRqdXN0bWVudCB0bwphZGRfcGFydGlhbF9wYXRoLiBBcyBhIHJl c3VsdCwgYWRkX3BhcnRpYWxfcGF0aCBtaWdodCBzb3J0IHRoZSBwYXRoIGxpc3QKanVzdCBieSB0 b3RhbCBjb3N0LCB3aGljaCBjb3VsZCBsZWFkIHRvIGxhdGVyIHBsYW5uZXIgbWlzYmVoYXZpb3Iu CgpJbiBwcmluY2lwbGUsIHRoaXMgc2hvdWxkIGJlIGJhY2stcGF0Y2hlZCB0byB2MTgsIGJ1dCB3 ZSBhcmUgdHlwaWNhbGx5CnJlbHVjdGFudCB0byBiYWNrLXBhdGNoIHBsYW5uZXIgZml4ZXMgZm9y IGZlYXIgb2YgZGVzdGFiaWxpemluZyB3b3JraW5nCmluc3RhbGxhdGlvbnMsIGFuZCBpdCBpcyB1 bmNsZWFyIHRvIG1lIHRoYXQgdGhpcyBoYXMgc3VmZmljaWVudGx5CnNlcmlvdXMgY29uc2VxdWVu Y2VzIHRvIGp1c3RpZnkgYW4gZXhjZXB0aW9uLCBzbyBmb3Igbm93LCBubyBiYWNrLXBhdGNoLgot LS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgfCA5ICsrKysrKystLQog MSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCA4MjkyOTViM2FmZS4uODc1NzY0YWJkYmUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtODc4LDggKzg3OCwxMyBA QCBhZGRfcGFydGlhbF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsIFBhdGggKm5ld19wYXRo KQogCQl9CiAJCWVsc2UKIAkJewotCQkJLyogbmV3IGJlbG9uZ3MgYWZ0ZXIgdGhpcyBvbGQgcGF0 aCBpZiBpdCBoYXMgY29zdCA+PSBvbGQncyAqLwotCQkJaWYgKG5ld19wYXRoLT50b3RhbF9jb3N0 ID49IG9sZF9wYXRoLT50b3RhbF9jb3N0KQorCQkJLyoKKwkJCSAqIG5ldyBiZWxvbmdzIGFmdGVy IHRoaXMgb2xkIHBhdGggaWYgaXQgaGFzIG1vcmUgZGlzYWJsZWQgbm9kZXMKKwkJCSAqIG9yIGlm IGl0IGhhcyB0aGUgc2FtZSBudW1iZXIgb2Ygbm9kZXMgYnV0IGEgZ3JlYXRlciB0b3RhbCBjb3N0 CisJCQkgKi8KKwkJCWlmIChuZXdfcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPiBvbGRfcGF0aC0+ZGlz YWJsZWRfbm9kZXMgfHwKKwkJCQkobmV3X3BhdGgtPmRpc2FibGVkX25vZGVzID09IG9sZF9wYXRo LT5kaXNhYmxlZF9ub2RlcyAmJgorCQkJCSBuZXdfcGF0aC0+dG90YWxfY29zdCA+PSBvbGRfcGF0 aC0+dG90YWxfY29zdCkpCiAJCQkJaW5zZXJ0X2F0ID0gZm9yZWFjaF9jdXJyZW50X2luZGV4KHAx KSArIDE7CiAJCX0KIAotLSAKMi41MS4wCgo= --000000000000b8a4ce064b1e9b2d Content-Type: application/octet-stream; name="v16-0001-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Disposition: attachment; filename="v16-0001-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlsgemw60 RnJvbSAzOTQzMmRkYmIxNTBkMzgxYTk0ZTg2MmMxMGI1Yzg3OWM5MTU3ZGJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwODoxNDo0MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDEv Nl0gQWxsb3cgZXh0ZW5zaW9ucyB0byBtYXJrIGFuIGluZGl2aWR1YWwgaW5kZXggYXMKIGRpc2Fi bGVkLgoKVXAgdW50aWwgbm93LCB0aGUgb25seSB3YXkgZm9yIGEgbG9hZGFibGUgbW9kdWxlIHRv IGRpc2FibGUgdGhlIHVzZSBvZiBhCnBhcnRpY3VsYXIgaW5kZXggd2FzIHRvIHVzZSBnZXRfcmVs YXRpb25faW5mb19ob29rIHRvIHJlbW92ZSBpdCBmcm9tIHRoZQppbmRleCBsaXN0LiBXaGlsZSB0 aGF0IHdvcmtzLCBpdCBoYXMgc29tZSBkaXNhZHZhbnRhZ2VzLiBGaXJzdCwgdGhlCmluZGV4IGJl Y29tZXMgaW52aXNpYmxlIGZvciBhbGwgcHVycG9zZXMsIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVz ZWQgZm9yCm9wdGltaXphdGlvbnMgc3VjaCBhcyBzZWxmLWpvaW4gZWxpbWluYXRpb24gb3IgbGVm dCBqb2luIHJlbW92YWwsIHdoaWNoCmNhbiBzZXZlcmVseSBkZWdyYWRlIHRoZSByZXN1bHRpbmcg cGxhbi4KClNlY29uZCwgaWYgdGhlIG1vZHVsZSBhdHRlbXB0cyB0byBjb21wZWwgdGhlIHVzZSBv ZiBhIGNlcnRhaW4gaW5kZXgKYnkgcmVtb3ZpbmcgYWxsIG90aGVyIGluZGV4ZXMgZnJvbSB0aGUg aW5kZXggbGlzdCBhbmQgZGlzYWJsaW5nCm90aGVyIHNjYW4gdHlwZXMsIGJ1dCB0aGUgcGxhbm5l ciBpcyB1bmFibGUgdG8gdXNlIHRoZSBjaG9zZW4gaW5kZXgKZm9yIHNvbWUgcmVhc29uLCBpdCB3 aWxsIGZhbGwgYmFjayB0byBhIHNlcXVlbnRpYWwgc2NhbiwgYmVjYXVzZSB0aGF0CmlzIG9ubHkg ZGlzYWJsZWQsIHdoZXJlYXMgdGhlIG90aGVyIGluZGV4ZXMgYXJlLCBmcm9tIHRoZSBwbGFubmVy J3MKcG9pbnQgb2YgdmlldywgY29tcGxldGVseSBnb25lLiBXaGlsZSB0aGlzIHNpdHVhdGlvbiBp ZGVhbGx5IHNob3VsZG4ndApvY2N1ciwgaXQncyBoYXJkIGZvciBhIGxvYWRhYmxlIG1vZHVsZSB0 byBiZSBjb21wbGV0ZWx5IHN1cmUgd2hldGhlcgp0aGUgcGxhbm5lciB3aWxsIHZpZXcgYSBjZXJ0 YWluIGluZGV4IGFzIHVzYWJsZSBmb3IgYSBjZXJ0YWluIHF1ZXJ5LgpJZiBpdCBpc24ndCwgaXQn cyBtb3JlIGRlc2lyYWJsZSB0byBmYWxsIGJhY2sgdG8gdGhlIG5leHQtY2hlYXBlc3QKcGxhbiB0 aGFuIHRvIGJlIGZvcmNlZCBpbnRvIGEgc2VxdWVudGlhbCBzY2FuLgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMgfCA4ICsrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaCAgICAgICAgIHwgMiArKwogMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggOTY3OGMyMGZm MWYuLjgyOTI5NWIzYWZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTEwNzcsNiArMTA3NywxNCBAQCBjcmVhdGVfaW5kZXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwK IAogCWNvc3RfaW5kZXgocGF0aG5vZGUsIHJvb3QsIGxvb3BfY291bnQsIHBhcnRpYWxfcGF0aCk7 CiAKKwkvKgorCSAqIGNvc3RfaW5kZXggd2lsbCBzZXQgZGlzYWJsZWRfbm9kZXMgdG8gMSBpZiB0 aGlzIHJlbCBpcyBub3QgYWxsb3dlZCB0bworCSAqIHVzZSBpbmRleCBzY2FucyBpbiBnZW5lcmFs LCBidXQgaXQgZG9lc24ndCBoYXZlIHRoZSBJbmRleE9wdEluZm8gdG8KKwkgKiBrbm93IHdoZXRo ZXIgdGhpcyBzcGVjaWZpYyBpbmRleCBoYXMgYmVlbiBkaXNhYmxlZC4KKwkgKi8KKwlpZiAoaW5k ZXgtPmRpc2FibGVkKQorCQlwYXRobm9kZS0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IDE7CisKIAly ZXR1cm4gcGF0aG5vZGU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYzE3NWVlOTViNjgu LjI3NzU4ZWMxNmZlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTQxMiw2ICsxNDEyLDggQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJbnVsbHNub3RkaXN0aW5jdDsKIAkv KiBpcyB1bmlxdWVuZXNzIGVuZm9yY2VkIGltbWVkaWF0ZWx5PyAqLwogCWJvb2wJCWltbWVkaWF0 ZTsKKwkvKiB0cnVlIGlmIHBhdGhzIHVzaW5nIHRoaXMgaW5kZXggc2hvdWxkIGJlIG1hcmtlZCBk aXNhYmxlZCAqLworCWJvb2wJCWRpc2FibGVkOwogCS8qIHRydWUgaWYgaW5kZXggZG9lc24ndCBy ZWFsbHkgZXhpc3QgKi8KIAlib29sCQloeXBvdGhldGljYWw7CiAKLS0gCjIuNTEuMAoK --000000000000b8a4ce064b1e9b2d Content-Type: application/octet-stream; name="v16-0006-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Disposition: attachment; filename="v16-0006-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlsgemx75 RnJvbSA5MGU0NzhiM2M1ZjFjYmIzMDRiZDQzNjcxMGVlMDc0MWQ4ZGUwMjlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwOTozNjowOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDYv Nl0gVGVzdCBwZ19wbGFuX2FkdmljZSB1c2luZyBhIG5ldyB0ZXN0X3BsYW5fYWR2aWNlCiBtb2R1 bGUuCgpUaGUgVEFQIHRlc3QgaW5jbHVkZWQgaW4gdGhpcyBuZXcgbW9kdWxlIHJ1bnMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMKd2l0aCBwZ19wbGFuX2FkdmljZSBsb2FkZWQuIEl0IGFycmFuZ2VzIGZv ciBlYWNoIHF1ZXJ5IHRvIGJlIHBsYW5uZWQKdHdpY2UuICBUaGUgZmlyc3QgdGltZSwgd2UgZ2Vu ZXJhdGUgcGxhbiBhZHZpY2UuIFRoZSBzZWNvbmQgdGltZSwgd2UKcmVwbGFuIHRoZSBxdWVyeSB1 c2luZyB0aGUgcmVzdWx0aW5nIGFkdmljZSBzdHJpbmcuIElmIHRoZSB0ZXN0cwpmYWlsLCB0aGF0 IG1lYW5zIHRoYXQgdXNpbmcgcGdfcGxhbl9hZHZpY2UgdG8gdGVsbCB0aGUgcGxhbm5lciB0bwpk byB3aGF0IGl0IHdhcyBnb2luZyB0byBkbyBhbnl3YXkgYnJlYWtzIHNvbWV0aGluZywgd2hpY2gg aW5kaWNhdGVzCmEgcHJvYmxlbSBlaXRoZXIgd2l0aCBwZ19wbGFuX2FkdmljZSBvciB3aXRoIHRo ZSBwbGFubmVyLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL01ha2VmaWxlICAg IHwgIDI4ICsrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9tZXNvbi5idWls ZCB8ICAyOSArKysrCiAuLi4vdGVzdF9wbGFuX2FkdmljZS90LzAwMV9yZXBsYW5fcmVncmVzcy5w bCAgfCAgNjQgKysrKysrKysKIC4uLi90ZXN0X3BsYW5fYWR2aWNlL3Rlc3RfcGxhbl9hZHZpY2Uu YyAgICAgICB8IDE0MyArKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMjY2IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdC8wMDFfcmVwbGFuX3JlZ3Jlc3MucGwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2Fk dmljZS5jCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggNDRjNzE2M2MxY2QuLmU4YzMxZWM4ZTc0IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFr ZWZpbGUKQEAgLTM4LDYgKzM4LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0ZXN0X29hdF9ob29rcyBc CiAJCSAgdGVzdF9wYXJzZXIgXAogCQkgIHRlc3RfcGdfZHVtcCBcCisJCSAgdGVzdF9wbGFuX2Fk dmljZSBcCiAJCSAgdGVzdF9wcmVkdGVzdCBcCiAJCSAgdGVzdF9yYWRpeHRyZWUgXAogCQkgIHRl c3RfcmJ0cmVlIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9z cmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDI2MzRhNTE5OTM1Li42OTk4YTIyNmZh NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0zOSw2ICszOSw3IEBAIHN1YmRpcigndGVzdF9taXNj JykKIHN1YmRpcigndGVzdF9vYXRfaG9va3MnKQogc3ViZGlyKCd0ZXN0X3BhcnNlcicpCiBzdWJk aXIoJ3Rlc3RfcGdfZHVtcCcpCitzdWJkaXIoJ3Rlc3RfcGxhbl9hZHZpY2UnKQogc3ViZGlyKCd0 ZXN0X3ByZWR0ZXN0JykKIHN1YmRpcigndGVzdF9yYWRpeHRyZWUnKQogc3ViZGlyKCd0ZXN0X3Ji dHJlZScpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFr ZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlMDI2Y2UzNGJmCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL01ha2VmaWxlCkBAIC0w LDAgKzEsMjggQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL01ha2VmaWxl CisKK1BHRklMRURFU0MgPSAidGVzdF9wbGFuX2FkdmljZSAtIHRlc3Qgd2hldGhlciBnZW5lcmF0 ZWQgcGxhbiBhZHZpY2Ugd29ya3MiCisKK01PRFVMRV9iaWcgPSB0ZXN0X3BsYW5fYWR2aWNlCitP QkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X3BsYW5fYWR2aWNlLm8KKworRVhUUkFfSU5T VEFMTCA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBV U0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05G SUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3BsYW5fYWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNk aXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCisKK292ZXJyaWRlIENQUEZMQUdT ICs9IC1JJCh0b3Bfc3JjZGlyKS9jb250cmliL3BnX3BsYW5fYWR2aWNlCisKK1JFR1JFU1NfU0hM SUI9JChhYnNfdG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MkKERMU1VGRklY KQorZXhwb3J0IFJFR1JFU1NfU0hMSUIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9wbGFuX2FkdmljZS9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2Fk dmljZS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YWZkZTQyMGJhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIw MjItMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordGVzdF9wbGFu X2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X3BsYW5fYWR2aWNlLmMnLAorKQorCitp ZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9wbGFuX2FkdmljZV9zb3VyY2VzICs9 IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5B TUUnLCAndGVzdF9wbGFuX2FkdmljZScsCisgICAgJy0tRklMRURFU0MnLCAndGVzdF9wbGFuX2Fk dmljZSAtIHRlc3Qgd2hldGhlciBnZW5lcmF0ZWQgcGxhbiBhZHZpY2Ugd29ya3MnLF0pCitlbmRp ZgorCit0ZXN0X3BsYW5fYWR2aWNlID0gc2hhcmVkX21vZHVsZSgndGVzdF9wbGFuX2FkdmljZScs CisgIHRlc3RfcGxhbl9hZHZpY2Vfc291cmNlcywKKyAgaW5jbHVkZV9kaXJlY3RvcmllczogcGdf cGxhbl9hZHZpY2VfaW5jLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3MsCispCit0ZXN0X2lu c3RhbGxfbGlicyArPSB0ZXN0X3BsYW5fYWR2aWNlCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAn dGVzdF9wbGFuX2FkdmljZScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAor ICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAgICd0ZXN0 cyc6IFsKKyAgICAgICd0LzAwMV9yZXBsYW5fcmVncmVzcy5wbCcsCisgICAgXSwKKyAgfSwKK30K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAwMV9yZXBs YW5fcmVncmVzcy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAwMV9y ZXBsYW5fcmVncmVzcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MTNiMWEyMjU3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UvdC8wMDFfcmVwbGFuX3JlZ3Jlc3MucGwKQEAgLTAsMCArMSw2NCBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KworIyBSdW4gdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBwZ19wbGFuX2FkdmljZSB0 byBjaGVjayBmb3IgcHJvYmxlbXMuCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ ICdhbGwnOworCit1c2UgQ3dkICAgICAgICAgICAgcXcoYWJzX3BhdGgpOwordXNlIEZpbGU6OkJh c2VuYW1lIHF3KGRpcm5hbWUpOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIEluaXRpYWxp emUgdGhlIHByaW1hcnkgbm9kZQorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KCk7CisKKyMgU2V0IHVwIG91ciBkZXNpcmVkIGNv bmZpZ3VyYXRpb24uCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9N KTsKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz0ndGVzdF9wbGFuX2FkdmljZScKK3BnX3BsYW5f YWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1mYWxzZQorRU9NCiskbm9kZS0+ c3RhcnQ7CisKK215ICRzcmNkaXIgPSBhYnNfcGF0aCgiLi4vLi4vLi4vLi4iKTsKKworIyAtLWRs cGF0aCBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiByZWdyZXNz LnNvCisjIGFuZCBhbnkgbGlicmFyaWVzIHRoZSByZWdyZXNzaW9uIHRlc3RzIHJlcXVpcmUuCitt eSAkZGxwYXRoID0gZGlybmFtZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsKKworIyAtLW91dHB1dGRp ciBwb2ludHMgdG8gdGhlIHBhdGggd2hlcmUgdG8gcGxhY2UgdGhlIG91dHB1dCBmaWxlcy4KK215 ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworIyAt LWlucHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCBvZiB0aGUgaW5wdXQgZmlsZXMuCitteSAkaW5w dXRkaXIgPSAiJHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzIjsKKworIyBSdW4gdGhlIHRlc3RzLgor bXkgJHJjID0KKyAgc3lzdGVtKCRFTlZ7UEdfUkVHUkVTU30gLiAiICIKKwkgIC4gIi0tYmluZGly PSAiCisJICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisJICAuICItLWhvc3Q9IiAuICRub2Rl LT5ob3N0IC4gIiAiCisJICAuICItLXBvcnQ9IiAuICRub2RlLT5wb3J0IC4gIiAiCisJICAuICIt LXNjaGVkdWxlPSRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAiCisJ ICAuICItLW1heC1jb25jdXJyZW50LXRlc3RzPTIwICIKKwkgIC4gIi0taW5wdXRkaXI9XCIkaW5w dXRkaXJcIiAiCisJICAuICItLW91dHB1dGRpcj1cIiRvdXRwdXRkaXJcIiIpOworCisjIER1bXAg b3V0IHRoZSByZWdyZXNzaW9uIGRpZmZzIGZpbGUsIGlmIHRoZXJlIGlzIG9uZQoraWYgKCRyYyAh PSAwKQoreworCW15ICRkaWZmcyA9ICIkb3V0cHV0ZGlyL3JlZ3Jlc3Npb24uZGlmZnMiOworCWlm ICgtZSAkZGlmZnMpCisJeworCQlwcmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKwkJ cHJpbnQgc2x1cnBfZmlsZSgkZGlmZnMpOworCQlwcmludCAiPT09IEVPRiA9PT1cbiI7CisJfQor fQorCisjIFJlcG9ydCByZXN1bHRzCitpcygkcmMsIDAsICdyZWdyZXNzaW9uIHRlc3RzIHBhc3Mn KTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf cGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3Bs YW5fYWR2aWNlL3Rlc3RfcGxhbl9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uOTk2Njc1ZGMzODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jCkBAIC0wLDAgKzEsMTQzIEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X3BsYW5fYWR2aWNlLmMKKyAqCSAgVGVz dCBwZ19wbGFuX2FkdmljZSBieSBwbGFubmluZyBldmVyeSBxdWVyeSB3aXRoIGdlbmVyYXRlZCBh ZHZpY2UuCisgKgorICogV2l0aCB0aGlzIG1vZHVsZSBsb2FkZWQsIGV2ZXJ5IHRpbWUgYSBxdWVy eSBpcyBleGVjdXRlZCwgd2UgZW5kIHVwCisgKiBwbGFubmluZyBpdCB0d2ljZS4gVGhlIGZpcnN0 IHRpbWUgd2UgcGxhbiBpdCwgd2UgZ2VuZXJhdGUgcGxhbiBhZHZpY2UsCisgKiB3aGljaCB3ZSB0 aGVuIGZlZWQgYmFjayB0byBwZ19wbGFuX2FkdmljZSBhcyB0aGUgc3VwcGxpZWQgcGxhbiBhZHZp Y2UuCisgKiBJdCBpcyB0aGVuIHBsYW5uZWQgYSBzZWNvbmQgdGltZSB1c2luZyB0aGF0IGFkdmlj ZS4gVGhpcyBob3BlZnVsbHkKKyAqIGFsbG93cyB1cyB0byBkZXRlY3QgY2FzZXMgd2hlcmUgdGhl IGFkdmljZSBpcyBpbmNvcnJlY3Qgb3IgY2F1c2VzCisgKiBmYWlsdXJlcyBvciBwbGFuIGNoYW5n ZXMgZm9yIHNvbWUgcmVhc29uLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3BsYW5fYWR2aWNlL3Rlc3RfcGxhbl9hZHZpY2UuYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy94YWN0 LmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIK KyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorCitQ R19NT0RVTEVfTUFHSUM7CisKK3N0YXRpYyBib29sIGluX3JlY3Vyc2lvbiA9IGZhbHNlOworCitz dGF0aWMgY2hhciAqdGVzdF9wbGFuX2FkdmljZV9hZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2Is CisJCQkJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCSAgRXhwbGFp blN0YXRlICplcyk7CitzdGF0aWMgRGVmRWxlbSAqZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlz dCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoaXMgbW9k dWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCXZvaWQJICAgKigqYWRkX2Fkdmlz b3JfZm4pIChwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vayk7CisKKwkvKgorCSAqIEFz ayBwZ19wbGFuX2FkdmljZSB0byBnZXQgYWR2aWNlIHN0cmluZ3MgZnJvbSB0ZXN0X3BsYW5fYWR2 aWNlX2Fkdmlzb3IKKwkgKi8KKwlhZGRfYWR2aXNvcl9mbiA9CisJCWxvYWRfZXh0ZXJuYWxfZnVu Y3Rpb24oInBnX3BsYW5fYWR2aWNlIiwgInBnX3BsYW5fYWR2aWNlX2FkZF9hZHZpc29yIiwKKwkJ CQkJCQkgICB0cnVlLCBOVUxMKTsKKworCSgqYWRkX2Fkdmlzb3JfZm4pICh0ZXN0X3BsYW5fYWR2 aWNlX2Fkdmlzb3IpOworfQorCisvKgorICogUmUtcGxhbiB0aGUgZ2l2ZW4gcXVlcnkgYW5kIHJl dHVybiB0aGUgZ2VuZXJhdGVkIGFkdmljZSBzdHJpbmcgYXMgdGhlCisgKiBzdXBwbGllZCBhZHZp Y2UuCisgKi8KK3N0YXRpYyBjaGFyICoKK3Rlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcihQbGFubmVy R2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlfc3Ry aW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCSBFeHBsYWluU3RhdGUgKmVzKQoreworCVBs YW5uZWRTdG10ICpwc3RtdDsKKwlpbnQJCQlzYXZlX25lc3RsZXZlbCA9IDA7CisJRGVmRWxlbSAg ICAqcGdwYV9pdGVtOworCURlZkVsZW0gICAgKmFkdmljZV9zdHJpbmdfaXRlbTsKKworCS8qCisJ ICogU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgcGxhbm5lciBhbmQgdHJp Z2dlcnMgcGxhbm5pbmcsCisJICogd2UgbmVlZCBhIHJlY3Vyc2lvbiBndWFyZC4KKwkgKi8KKwlp ZiAoaW5fcmVjdXJzaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCVBHX1RSWSgpOworCXsKKwkJaW5f cmVjdXJzaW9uID0gdHJ1ZTsKKworCQkvKgorCQkgKiBQbGFubmluZyBjYW4gdHJpZ2dlciBleHBy ZXNzaW9uIGV2YWx1YXRpb24sIHdoaWNoIGNhbiByZXN1bHQgaW4KKwkJICogc2VuZGluZyBOT1RJ Q0UgbWVzc2FnZXMgb3Igb3RoZXIgb3V0cHV0IHRvIHRoZSBjbGllbnQuIFRvIGF2b2lkCisJCSAq IHRoYXQsIHdlIHNldCBjbGllbnRfbWluX21lc3NhZ2VzID0gRVJST1IgaW4gdGhlIGhvcGVzIG9m IGdldHRpbmcKKwkJICogdGhlIHNhbWUgb3V0cHV0IHdpdGggYW5kIHdpdGhvdXQgdGhpcyBtb2R1 bGUuCisJCSAqCisJCSAqIFdlIGFsc28gbmVlZCB0byBzZXQgcGdfcGxhbl9hZHZpY2UuYWx3YXlz X3N0b3JlX2FkdmljZV9kZXRhaWxzIHNvCisJCSAqIHRoYXQgcGdfcGxhbl9hZHZpY2Ugd2lsbCBn ZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nLCBzaW5jZSB0aGUgd2hvbGUKKwkJICogcG9pbnQgb2Yg dGhpcyBmdW5jdGlvbiBpcyB0byBnZXQgYWNjZXNzIHRvIHRoYXQuCisJCSAqLworCQlzYXZlX25l c3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQlzZXRfY29uZmlnX29wdGlvbigiY2xpZW50 X21pbl9tZXNzYWdlcyIsICJlcnJvciIsCisJCQkJCQkgIFBHQ19TVVNFVCwgUEdDX1NfU0VTU0lP TiwKKwkJCQkJCSAgR1VDX0FDVElPTl9TQVZFLCB0cnVlLCAwLCBmYWxzZSk7CisJCXNldF9jb25m aWdfb3B0aW9uKCJwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMiLCAi dHJ1ZSIsCisJCQkJCQkgIFBHQ19TVVNFVCwgUEdDX1NfU0VTU0lPTiwKKwkJCQkJCSAgR1VDX0FD VElPTl9TQVZFLCB0cnVlLCAwLCBmYWxzZSk7CisKKwkJLyoKKwkJICogUmVwbGFuLiBXZSBtdXN0 IGNvcHkgdGhlIFF1ZXJ5LCBiZWNhdXNlIHRoZSBwbGFubmVyIG1vZGlmaWVzIGl0LgorCQkgKiAo QXMgbm90ZWQgZWxzZXdoZXJlLCB0aGF0J3MgdW5mb3J0dW5hdGU7IHBlcmhhcHMgaXQgd2lsbCBi ZSBmaXhlZAorCQkgKiBzb21lIGRheS4pCisJCSAqLworCQlwc3RtdCA9IHBsYW5uZXIoY29weU9i amVjdChwYXJzZSksIHF1ZXJ5X3N0cmluZywgY3Vyc29yT3B0aW9ucywKKwkJCQkJCWdsb2ItPmJv dW5kUGFyYW1zLCBlcyk7CisJfQorCVBHX0ZJTkFMTFkoKTsKKwl7CisJCWluX3JlY3Vyc2lvbiA9 IGZhbHNlOworCX0KKwlQR19FTkRfVFJZKCk7CisKKwkvKiBSb2xsIGJhY2sgYW55IEdVQyBjaGFu Z2VzICovCisJaWYgKHNhdmVfbmVzdGxldmVsID4gMCkKKwkJQXRFT1hhY3RfR1VDKGZhbHNlLCBz YXZlX25lc3RsZXZlbCk7CisKKwkvKiBFeHRyYWN0IGFuZCByZXR1cm4gdGhlIGFkdmljZSBzdHJp bmcgKi8KKwlwZ3BhX2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwc3RtdC0+ZXh0ZW5z aW9uX3N0YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCWlmIChwZ3BhX2l0ZW0g PT0gTlVMTCkKKwkJZWxvZyhFUlJPUiwgImV4dGVuc2lvbiBzdGF0ZSBmb3IgcGdfcGxhbl9hZHZp Y2Ugbm90IGZvdW5kIik7CisJYWR2aWNlX3N0cmluZ19pdGVtID0gZmluZF9kZWZlbGVtX2J5X2Rl Zm5hbWUoKExpc3QgKikgcGdwYV9pdGVtLT5hcmcsCisJCQkJCQkJCQkJCQkgImFkdmljZV9zdHJp bmciKTsKKwlpZiAoYWR2aWNlX3N0cmluZ19pdGVtID09IE5VTEwpCisJCWVsb2coRVJST1IsCisJ CQkgImFkdmljZSBzdHJpbmcgZm9yIHBnX3BsYW5fYWR2aWNlIG5vdCBmb3VuZCBpbiBleHRlbnNp b24gc3RhdGUiKTsKKwlyZXR1cm4gc3RyVmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJnKTsKK30K KworLyoKKyAqIFNlYXJjaCBhIGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRl Zm5hbWUuCisgKi8KK3N0YXRpYyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExp c3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0 ZW0sIGRlZmxpc3QpCisJeworCQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09 IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KLS0gCjIuNTEuMAoK --000000000000b8a4ce064b1e9b2d Content-Type: application/octet-stream; name="v16-0003-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v16-0003-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlsgemwt2 RnJvbSBmNTNjMzJlYmJkZDVhOWQ5MmVkNGIwYWMwOWZhMTMyNGVkOGY4NGQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjYgSmFuIDIwMjYgMDk6NTY6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNiAz LzZdIEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNpbGl0 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 dCBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKY29tbWl0LgoKRm9yIG1vcmUgZGV0YWlscywgc2Vl IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FIG9yIHRoZSBTR01MCmRvY3VtZW50YXRpb24u CgpOT1RFOiBUaGVyZSBhcmUgc3RpbGwgc29tZSBrbm93biBwcm9ibGVtcyB3aXRoIHRoaXMgY29k ZSwgd2hpY2ggYXJlCmNhbGxlZCBvdXQgYnkgWFhYLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRs IDxsdWthc0BmaXR0bC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRh a0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRi LmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogRGlhbiBGYXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFsIDxh amF5LnBhbC5rQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25heWxv cmxzQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9aLUpo MVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNvbQot LS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEg KwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAgICAzICsK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNTAgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwgIDI2MCArKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0ICAgIHwgIDM3MSArKysK IC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCAgICB8ICA1MDkgKysr KwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0IHwgIDMzOSAr KysKIC4uLi9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0ICAgICAgICAgICAgICB8ICAgNjkg KwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IHwgIDQyNiAr KysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3ByZXBhcmVkLm91dCAgfCAgIDY3 ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgICAgICB8ICA3NTcg KysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91dCAgfCAg Mzc3ICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0ICAgIHwg IDE5MiArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAgICAgICAgIHwg ICA3OSArCiAuLi4vcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgICAgfCAg IDQzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyAgICAgICB8ICA1 NjMgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbCB8 ICAgIDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oICAgICAgIHwg ICA2MSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgICAgICAgICAgICAgfCAg MzUxICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oICAgICAgICAgICAgIHwg IDE4NSArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jICAgICAgIHwg IDYzOSArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oICAgICAg IHwgICAxOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jICAgICAg fCAgNDc2ICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmggICAg ICB8ICAgNTIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYyAgICAgICAgICAg IHwgIDYyOSArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCAgICAgICAg ICAgIHwgIDEwNSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgICAgICAg ICAgfCAgNTcxICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggICAg ICAgICAgfCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueSAgICAg ICAgICB8ICAzMDEgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jICAg ICAgICAgfCAyMTY2ICsrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfcGxhbm5lci5oICAgICAgICAgfCAgIDE3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FuLmMgICAgICAgICAgICB8ICAyNjkgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FuLmggICAgICAgICAgICB8ICAgODUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3NjYW5uZXIubCAgICAgICAgIHwgIDI5NyArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5jICAgICAgICAgICB8ICA1MTYgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3Ryb3ZlLmggICAgICAgICAgIHwgIDExNCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfd2Fsa2VyLmMgICAgICAgICAgfCAxMDI5ICsrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfd2Fsa2VyLmggICAgICAgICAgfCAgMTQxICsrCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9nYXRoZXIuc3FsICAgICAgICAgfCAgIDg2ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL2pvaW5fb3JkZXIuc3FsICAgICB8ICAxNDUgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsICB8ICAgODQgKwogLi4uL3BnX3BsYW5fYWR2aWNlL3Nx bC9sb2NhbF9jb2xsZWN0b3Iuc3FsICAgIHwgICA0NiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9wYXJ0aXRpb253aXNlLnNxbCAgfCAgIDk5ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3ByZXBhcmVkLnNxbCAgICAgICB8ICAgMzcgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvc2Nhbi5zcWwgICAgICAgICAgIHwgIDE5NSArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvc2VtaWpvaW4uc3FsICAgICAgIHwgIDExOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9zeW50YXguc3FsICAgICAgICAgfCAgIDY4ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8w MDFfcmVncmVzcy5wbCAgICAgICB8ICAxNDggKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwg ICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwg ICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNn bWwgICAgICAgICAgICAgICAgfCAxMDM2ICsrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDM5ICsKIDUzIGZpbGVzIGNoYW5nZWQsIDE0MjU5 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl Ly5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL01h a2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhl ci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVk L2pvaW5fb3JkZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3ByZXBh cmVkLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvc2Nhbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL3NlbWlqb2luLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRl Z3kuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9j YWxfY29sbGVjdG9yLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvcHJlcGFyZWQuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9j L3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9NYWtlZmls ZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMmYwYTg4ZDNmNzcuLmRkMDRjMjBhY2QyIDEwMDY0 NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUKQEAgLTM0LDYg KzM0LDcgQEAgU1VCRElSUyA9IFwKIAkJcGdfZnJlZXNwYWNlbWFwIFwKIAkJcGdfbG9naWNhbGlu c3BlY3QgXAogCQlwZ19vdmVyZXhwbGFpbiBcCisJCXBnX3BsYW5fYWR2aWNlIFwKIAkJcGdfcHJl d2FybQlcCiAJCXBnX3N0YXRfc3RhdGVtZW50cyBcCiAJCXBnX3N1cmdlcnkJXApkaWZmIC0tZ2l0 IGEvY29udHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXggZGVmMTMy NTdjYmUuLjVhNzUyZWFjMzQ3IDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1aWxkCisrKyBi L2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTQ4LDYgKzQ4LDcgQEAgc3ViZGlyKCdwZ2NyeXB0bycp CiBzdWJkaXIoJ3BnX2ZyZWVzcGFjZW1hcCcpCiBzdWJkaXIoJ3BnX2xvZ2ljYWxpbnNwZWN0JykK IHN1YmRpcigncGdfb3ZlcmV4cGxhaW4nKQorc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJk aXIoJ3BnX3ByZXdhcm0nKQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKIHN1YmRpcigncGdfc3RhdF9z dGF0ZW1lbnRzJykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9y ZSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMTlhMTQyNTMwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvcGdwYV9wYXJz ZXIuaAorL3BncGFfcGFyc2VyLmMKKy9wZ3BhX3NjYW5uZXIuYwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZp bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkNGM1NTlhZWQ4Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQpAQCAtMCww ICsxLDUwIEBACisjIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKKworTU9EVUxFX2Jp ZyA9IHBnX3BsYW5fYWR2aWNlCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19wbGFuX2Fk dmljZS5vIFwKKwlwZ3BhX2FzdC5vIFwKKwlwZ3BhX2NvbGxlY3Rvci5vIFwKKwlwZ3BhX2lkZW50 aWZpZXIubyBcCisJcGdwYV9qb2luLm8gXAorCXBncGFfb3V0cHV0Lm8gXAorCXBncGFfcGFyc2Vy Lm8gXAorCXBncGFfcGxhbm5lci5vIFwKKwlwZ3BhX3NjYW4ubyBcCisJcGdwYV9zY2FubmVyLm8g XAorCXBncGFfdHJvdmUubyBcCisJcGdwYV93YWxrZXIubworCitFWFRFTlNJT04gPSBwZ19wbGFu X2FkdmljZQorREFUQSA9IHBnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gInBn X3BsYW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4iCisKK1JF R1JFU1MgPSBnYXRoZXIgam9pbl9vcmRlciBqb2luX3N0cmF0ZWd5IHBhcnRpdGlvbndpc2Ugc2Nh bgorVEFQX1RFU1RTID0gMQorCitFWFRSQV9DTEVBTiA9IHBncGFfcGFyc2VyLmggcGdwYV9wYXJz ZXIuYyBwZ3BhX3NjYW5uZXIuYworCisjIHJlcXVpcmVkIGZvciAwMDFfcmVncmVzcy5wbAorUkVH UkVTU19TSExJQj0kKGFic190b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQo RExTVUZGSVgpCitleHBvcnQgUkVHUkVTU19TSExJQgorCitpZmRlZiBVU0VfUEdYUworUEdfQ09O RklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2lu Y2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQordG9w X2J1aWxkZGlyID0gLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitl bmRpZgorCisjIFNlZSBub3RlcyBpbiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgYWJvdXQg dGhlIGZvbGxvd2luZyB0d28gcnVsZXMKK3BncGFfcGFyc2VyLmg6IHBncGFfcGFyc2VyLmMKKwl0 b3VjaCAkQAorCitwZ3BhX3BhcnNlci5jOiBCSVNPTkZMQUdTICs9IC1kCisKKyMgRm9yY2UgdGhl c2UgZGVwZW5kZW5jaWVzIHRvIGJlIGtub3duIGV2ZW4gd2l0aG91dCBkZXBlbmRlbmN5IGluZm8g YnVpbHQ6CitwZ3BhX3BhcnNlci5vIHBncGFfc2Nhbm5lci5vOiBwZ3BhX3BhcnNlci5oCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRSBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYjg4 OGZkODJmMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1F CkBAIC0wLDAgKzEsMjYwIEBACitjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQorCitQbGFu IEFkdmljZQorPT09PT09PT09PT0KKworVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1pbmktbGFu Z3VhZ2UgZm9yICJwbGFuIGFkdmljZSIgdGhhdCBhbGxvd3MgZm9yCitjb250cm9sIG9mIGNlcnRh aW4ga2V5IHBsYW5uZXIgZGVjaXNpb25zLiBHb2FscyBpbmNsdWRlICgxKSBlbmZvcmNpbmcgcGxh bgorc3RhYmlsaXR5IChteSBwcmV2aW91cyBwbGFuIHdhcyBnb29kIGFuZCBJIHdvdWxkIGxpa2Ug dG8ga2VlcCBnZXR0aW5nIGEKK3NpbWlsYXIgb25lKSBhbmQgKDIpIGFsbG93aW5nIHVzZXJzIHRv IGV4cGVyaW1lbnQgd2l0aCBwbGFucyBvdGhlciB0aGFuCit0aGUgb25lIHByZWZlcnJlZCBieSB0 aGUgb3B0aW1pemVyLiBOb24tZ29hbHMgaW5jbHVkZSAoMSkgY29udHJvbGxpbmcKK2V2ZXJ5IHBv c3NpYmxlIHBsYW5uZXIgZGVjaXNpb24gYW5kICgyKSBmb3JjaW5nIGNvbnNpZGVyYXRpb24gb2Yg cGxhbnMKK3RoYXQgdGhlIG9wdGltaXplciByZWplY3RzIGZvciByZWFzb25zIG90aGVyIHRoYW4g Y29zdC4gKFRoZXJlIGlzIHNvbWUKK3Jvb20gZm9yIGJpa2VzaGVkZGluZyBhYm91dCB3aGF0IGV4 YWN0bHkgdGhpcyBub24tZ29hbCBtZWFuczogd2hhdCBpZgord2Ugc2tpcCBwYXRoIGdlbmVyYXRp b24gZW50aXJlbHkgZm9yIGEgY2VydGFpbiBjYXNlIG9uIHRoZSB0aGVvcnkgdGhhdAord2Uga25v dyBpdCBjYW5ub3Qgd2luIG9uIGNvc3Q/IERvZXMgdGhhdCBjb3VudCBhcyBhIGNvc3QtYmFzZWQg cmVqZWN0aW9uCitldmVuIHRob3VnaCBubyBjb3N0IHdhcyBldmVyIGNvbXB1dGVkPykKKworR2Vu ZXJhbGx5LCBwbGFuIGFkdmljZSBpcyBhIHNlcmllcyBvZiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBh ZHZpY2UgaXRlbXMsCitlYWNoIG9mIHdoaWNoIGFwcGxpZXMgYW4gYWR2aWNlIHRhZyB0byBhIGxp c3Qgb2YgYWR2aWNlIHRhcmdldHMuIEZvcgorZXhhbXBsZSwgIlNFUV9TQ0FOKGZvbykgSEFTSF9K T0lOKGJhckBzcykiIGNvbnRhaW5zIHR3byBpdGVtcyBvZiBhZHZpY2UsCit0aGUgZmlyc3Qgb2Yg d2hpY2ggYXBwbGllcyB0aGUgU0VRX1NDQU4gdGFnIHRvICJmb28iIGFuZCB0aGUgc2Vjb25kIG9m Cit3aGljaCBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvICJiYXJAc3MiLiBJbiB0aGlzIHNp bXBsZSBleGFtcGxlLCBlYWNoCit0YXJnZXQgaWRlbnRpZmllcyBhIHNpbmdsZSByZWxhdGlvbjsg c2VlICJSZWxhdGlvbiBJZGVudGlmaWVycyIsIGJlbG93LgorQWR2aWNlIHRhZ3MgY2FuIGFsc28g YmUgYXBwbGllZCB0byBncm91cHMgb2YgcmVsYXRpb25zOyBmb3IgZXhhbXBsZSwKKyJIQVNIX0pP SU4oYmF6IChibGV0Y2ggcXV1eCkpIiBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvIHRoZSBz aW5nbGUKK3JlbGF0aW9uIGlkZW50aWZpZXIgImJheiIgYXMgd2VsbCBhcyB0byB0aGUgMi1pdGVt IGxpc3QgY29udGFpbmluZworImJsZXRjaCIgYW5kICJxdXV4Ii4KKworQ3JpdGljYWxseSwgdGhp cyBtb2R1bGUga25vd3MgYm90aCBob3cgdG8gZ2VuZXJhdGUgcGxhbiBhZHZpY2UgZnJvbSBhbgor YWxyZWFkeS1leGlzdGluZyBwbGFuLCBhbmQgYWxzbyBob3cgdG8gZW5mb3JjZSBpdCBkdXJpbmcg ZnV0dXJlIHBsYW5uaW5nCitjeWNsZXMuIEV2ZXJ5dGhpbmcgaXQgZG9lcyBpcyBpbnRlbmRlZCB0 byBiZSAicm91bmQtdHJpcCBzYWZlIjogaWYgeW91CitnZW5lcmF0ZSBhZHZpY2UgZnJvbSBhIHBs YW4gYW5kIHRoZW4gZmVlZCB0aGF0IGJhY2sgaW50byBhIGZ1dHVyZSBwbGFuaW5nCitjeWNsZSwg ZWFjaCBwaWVjZSBvZiBhZHZpY2Ugc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYXBwbHkgdG8gdGhl IGV4YWN0bHkgdGhlCitzYW1lIHBhcnQgb2YgdGhlIHF1ZXJ5IGZyb20gd2hpY2ggaXQgd2FzIGdl bmVyYXRlZCB3aXRob3V0IGFtYmlndWl0eSBvcgorZ3Vlc3N3b3JrLCBhbmQgaXQgc2hvdWxkIHN1 Y2Nlc2Z1bGx5IGVuZm9yY2UgdGhlIHNhbWUgcGxhbm5pbmcgZGVjaXNpb24gdGhhdAorbGVkIHRv IGl0IGJlaW5nIGdlbmVyYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE5vdGUgdGhhdCB0aGVyZSBp cyBubworaW50ZW50aW9uIHRoYXQgdGhlc2UgZ3VhcmFudGVlcyBob2xkIGluIHRoZSBwcmVzZW5j ZSBvZiBpbnRlcnZlbmluZyBEREw7CitlLmcuIGlmIHlvdSBjaGFuZ2UgdGhlIHByb3BlcnRpZXMg b2YgYSBmdW5jdGlvbiBzbyB0aGF0IGEgc3VicXVlcnkgaXMgbm8KK2xvbmdlciBpbmxpbmVkLCBv ciBpZiB5b3UgZHJvcCBhbiBpbmRleCBuYW1lZCBpbiB0aGUgcGxhbiBhZHZpY2UsIHRoZSBhZHZp Y2UKK2lzbid0IGdvaW5nIHRvIHdvcmsgYW55IG1vcmUuIFRoYXQncyBleHBlY3RlZC4KKworVGhp cyBtb2R1bGUgYWltcyB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBmb2xsb3cgYW55IHByb3ZpZGVk IGFkdmljZSB3aXRob3V0CityZWdhcmQgdG8gd2hldGhlciBpdCBpcyBhcHBlYXJzIHRvIGJlIGdv b2QgYWR2aWNlIG9yIGJhZCBhZHZpY2UuICBJZiB0aGUKK3VzZXIgcHJvdmlkZXMgYmFkIGFkdmlj ZSwgd2hldGhlciBkZXJpdmVkIGZyb20gYSBwcmV2aW91c2x5LWdlbmVyYXRlZCBwbGFuCitvciBt YW51YWxseSB3cml0dGVuLCB0aGV5IG1heSBnZXQgYSBiYWQgcGxhbi4gV2UgcmVnYXJkIHRoaXMg YXMgdXNlciBlcnJvciwKK25vdCBhIGRlZmVjdCBpbiB0aGlzIG1vZHVsZS4gSXQgc2VlbXMgbGlr ZWx5IHRoYXQgYXBwbHlpbmcgYWR2aWNlCitqdWRpY2lvdXNseSBhbmQgb25seSB3aGVuIHRydWx5 IHJlcXVpcmVkIHRvIGF2b2lkIHByb2JsZW1zIHdpbGwgYmUgYSBtb3JlCitzdWNjZXNzZnVsIHN0 cmF0ZWd5IHRoYW4gYXBwbHlpbmcgaXQgd2l0aCBhIGJyb2FkIGJydXNoLCBidXQgdXNlcnMgYXJl IGZyZWUKK3RvIGV4cGVyaW1lbnQgd2l0aCB3aGF0ZXZlciBzdHJhdGVnaWVzIHRoZXkgdGhpbmsg YmVzdC4KKworUmVsYXRpb24gSWRlbnRpZmllcnMKKz09PT09PT09PT09PT09PT09PT09CisKK1Vu aXF1ZWx5IGlkZW50aWZ5aW5nIHRoZSBwYXJ0IG9mIGEgcXVlcnkgdG8gd2hpY2ggYSBjZXJ0YWlu IHBpZWNlIG9mCithZHZpY2UgYXBwbGllcyBpcyBoYXJkZXIgdGhhbiBpdCBzb3VuZHMuIE91ciBi YXNpYyBhcHByb2FjaCBpcyB0byB1c2UKK3JlbGF0aW9uIGFsaWFzZXMgYXMgYSBzdGFydGluZyBw b2ludCwgYW5kIHRoZW4gZGlzYW1iaWd1YXRlLiBUaGVyZSBhcmUKK3RocmVlIHdheXMgdGhhdCBz YW1lIHJlbGF0aW9uIGFsaWFzIGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lczoKKworMS4gSXQgY2Fu IGFwcGVhciBpbiBtb3JlIHRoYW4gb25lIHN1YnF1ZXJ5LgorCisyLiBJdCBjYW4gYXBwZWFyIG1v cmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHN1YnF1ZXJ5LAorICAgZS5nLiAoZm9vIEpPSU4gYmFy KSB4IEpPSU4gZm9vLgorCiszLiBUaGUgdGFibGUgY2FuIGJlIHBhcnRpdGlvbmVkLgorCitBbnkg Y29tYmluYXRpb24gb2YgdGhlc2UgdGhpbmdzIGNhbiBvY2N1ciBzaW11bHRhbmVvdXNseS4gIFRo ZXJlZm9yZSwgb3VyCitnZW5lcmFsIHN5bnRheCBmb3IgYSByZWxhdGlvbiBpZGVudGlmaWVyIGlz OgorCithbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL3BhcnRpdGlvbl9zY2hlbWEucGFydGl0 aW9uX25hbWVAcGxhbl9uYW1lCisKK0FsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIGFsaWFz X25hbWUgYXJlIG9wdGlvbmFsIGFuZCBpbmNsdWRlZCBvbmx5Cit3aGVuIHJlcXVpcmVkLiBXaGVu IGEgY29tcG9uZW50IGlzIG9taXR0ZWQsIHRoZSBhc3NvY2lhdGVkIHB1bmN0dWF0aW9uCittdXN0 IGFsc28gYmUgb21pdHRlZC4gT2NjdXJyZW5jZSBudW1iZXJzIGFyZSBjb3VudGVkIGlnbm9yaW5n IGNoaWxkcmVuIG9mCitwYXJ0aXRpb25lZCB0YWJsZXMuICBXaGVuIHRoZSBnZW5lcmF0ZWQgb2Nj dXJyZW5jZSBudW1iZXIgaXMgMSwgd2Ugb21pdAordGhlIG9jY3VycmVuY2UgbnVtYmVyLiBUaGUg cGFydGl0aW9uIHNjaGVtYSBhbmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkCitvbmx5IGZv ciBjaGlsZHJlbiBvZiBwYXJ0aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2UsIHRo ZQorcGFydGl0aW9uX3NjaGVtYSBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbmV2ZXIgdGhlcmUgaXMg YSBwYXJ0aXRpb25fbmFtZSwKK2J1dCB1c2VyLXdyaXR0ZW4gYWR2aWNlIG1heSBtZW50aW9uIHRo ZSBuYW1lIGFuZCBvbWl0IHRoZSBzY2hlbWEuIFRoZQorcGxhbl9uYW1lIGlzIG9taXR0ZWQgZm9y IHRoZSB0b3AtbGV2ZWwgUGxhbm5lckluZm8uCisKK1NjYW4gQWR2aWNlCis9PT09PT09PT09PQor CitGb3IgbWFueSB0eXBlcyBvZiBzY2FuLCBubyBhZHZpY2UgaXMgZ2VuZXJhdGVkIG9yIHBvc3Np YmxlOyBmb3IgaW5zdGFuY2UsCithIHN1YnF1ZXJ5IGlzIGFsd2F5cyBzY2FubmVkIHVzaW5nIGEg c3VicXVlcnkgc2Nhbi4gV2hpbGUgdGhhdCBzY2FuIG1heSBiZQorZWxpZGVkIHZpYSBzZXRyZWZz IHByb2Nlc3NpbmcsIHRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIGZhY3QgdGhhdCBvbmx5IG9uZQor YmFzaWMgYXBwcm9hY2ggZXhpc3RzLiBIZW5jZSwgc2NhbiBhZHZpY2UgYXBwbGllcyBtb3N0bHkg dG8gcmVsYXRpb25zLCB3aGljaAorY2FuIGJlIHNjYW5uZWQgaW4gbXVsdGlwbGUgd2F5cy4KKwor V2UgdGVuZCB0byB0aGluayBvZiBhIHNjYW4gYXMgdGFyZ2V0aW5nIGEgc2luZ2xlIHJlbGF0aW9u LCBhbmQgdGhhdCdzCitub3JtYWxseSB0aGUgY2FzZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0byBi ZS4gRm9yIGluc3RhbmNlLCBpZiBhIGpvaW4gaXMKK3Byb3ZlbiBlbXB0eSwgdGhlIHdob2xlIHRo aW5nIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIFJlc3VsdCBub2RlCit3aGljaCwgaW4g ZWZmZWN0LCBpcyBhIGRlZ2VuZXJhdGUgc2NhbiBvZiBldmVyeSByZWxhdGlvbiBpbiB0aGUgY29s bGFwc2VkCitwb3J0aW9uIG9mIHRoZSBqb2luIHRyZWUuIFNpbWlsYXJseSwgaXQncyBwb3NzaWJs ZSB0byBpbmplY3QgYSBjdXN0b20gc2NhbgoraW4gc3VjaCBhIHdheSB0aGF0IGl0IHJlcGxhY2Vz IGFuIGVudGlyZSBqb2luLiBJZiB3ZSBldmVyIGVtaXQgYWR2aWNlCitmb3IgdGhlc2UgY2FzZXMs IGl0IHdvdWxkIHRhcmdldCBzZXRzIG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIHN1cnJvdW5kZWQK K2J5IHBhcmVudGhlc2VzLCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikpIHdv dWxkIG1lYW4gdGhhdCB0aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBmb3Ig Zm9vIGFzIGEgc2luZ2xlIHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2YgYmFy IGFuZCBiYXogYXMgYSBqb2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAorcHJl c2VudC4KKworRm9yIGluZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxhdGlv biBiZWluZyBzY2FubmVkIGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBtdXN0 IGJlIHNwZWNpZmllZC4gRm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHggYmFy IGJhcl9iX2lkeCkgaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4LW9u bHkKK3NjYW4pIHNob3VsZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZvbywg YW5kIHRoYXQgYW4gaW5kZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdoZW4g c2Nhbm5pbmcgYmFyLgorCitCaXRtYXAgaGVhcCBzY2FucyBjdXJyZW50bHkgZG8gbm90IGFsbG93 IGZvciBhbiBpbmRleCBzcGVjaWZpY2F0aW9uOgorQklUTUFQX0hFQVBfU0NBTihmb28gYmFyKSBz aW1wbHkgbWVhbnMgdGhhdCBlYWNoIG9mIGZvbyBhbmQgYmFyIHNob3VsZCB1c2UKK3NvbWUgc29y dCBvZiBiaXRtYXAgaGVhcCBzY2FuLgorCitKb2luIE9yZGVyIEFkdmljZQorPT09PT09PT09PT09 PT09PT0KKworVGhlIEpPSU5fT1JERVIgdGFnIHNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2gg c2V2ZXJhbCB0YWJsZXMgdGhhdCBhcmUKK3BhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtIHNo b3VsZCBiZSBqb2luZWQuIEVhY2ggc3VicXVlcnkgKGV4Y2VwdCBmb3IKK3Rob3NlIHRoYXQgYXJl IGlubGluZWQpIGlzIGEgc2VwYXJhdGUgam9pbiBwcm9ibGVtLiBXaXRoaW4gYSBzdWJxdWVyeSwK K3BhcnRpdGlvbndpc2Ugam9pbnMgY2FuIGNyZWF0ZSBhZGRpdGlvbmFsLCBzZXBhcmF0ZSBqb2lu IHByb2JsZW1zLiBIZW5jZSwKK3F1ZXJpZXMgaW52b2x2aW5nIHBhcnRpdGlvbndpc2Ugam9pbnMg bWF5IHVzZSBKT0lOX09SREVSKCkgbWFueSB0aW1lcy4KKworV2UgdGFrZSB0aGUgY2Fub25pY2Fs IGpvaW4gc3RydWN0dXJlIHRvIGJlIGFuIG91dGVyLWRlZXAgdHJlZSwgc28KK0pPSU5fT1JERVIo dDEgdDIgdDMpIHNheXMgdGhhdCB0MSBpcyB0aGUgZHJpdmluZyB0YWJsZSBhbmQgc2hvdWxkIGJl IGpvaW5lZAorZmlyc3QgdG8gdDIgYW5kIHRoZW4gdG8gdDMuIElmIHRoZSBqb2luIHByb2JsZW0g aW52b2x2ZXMgYWRkaXRpb25hbCB0YWJsZXMsCit0aGV5IGNhbiBiZSBqb2luZWQgaW4gYW55IG9y ZGVyIGFmdGVyIHRoZSBqb2luIGJldHdlZW4gdDEsIHQyLCBhbmQgdDMgaGFzCitiZWVuIGNvbnN0 cnVjdHVyZWQuIEdlbmVyYXRlZCBqb2luIGFkdmljZSBhbHdheXMgbWVudGlvbnMgYWxsIHRhYmxl cworaW4gdGhlIGpvaW4gcHJvYmxlbSwgYnV0IG1hbnVhbGx5IHdyaXR0ZW4gam9pbiBhZHZpY2Ug bmVlZCBub3QgZG8gc28uCisKK0ZvciB0cmVlcyB3aGljaCBhcmUgbm90IG91dGVyLWRlZXAsIHBh cmVudGhlc2VzIGNhbiBiZSB1c2VkLiBGb3IgZXhhbXBsZSwKK0pPSU5fT1JERVIodDEgKHQyIHQz KSkgc2F5cyB0aGF0IHRoZSB0b3AtbGV2ZWwgam9pbiBzaG91bGQgaGF2ZSB0MSBvbiB0aGUKK291 dGVyIHNpZGUgYW5kIGEgam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBvbiB0aGUgaW5uZXIgc2lkZS4g VGhhdCBqb2luIHNob3VsZAorYmUgY29uc3RydWN0ZWQgc28gdGhhdCB0MiBpcyBvbiB0aGUgb3V0 ZXIgc2lkZSBhbmQgdDMgaXMgb24gdGhlIGlubmVyIHNpZGUuCisKK0luIHNvbWUgY2FzZXMsIGl0 J3Mgbm90IHBvc3NpYmxlIHRvIGZ1bGx5IHNwZWNpZnkgdGhlIGpvaW4gb3JkZXIgaW4gdGhpcyB3 YXkuCitGb3IgZXhhbXBsZSwgaWYgdDIgYW5kIHQzIGFyZSBiZWluZyBzY2FubmVkIGJ5IGEgc2lu Z2xlIGN1c3RvbSBzY2FuIG9yIGZvcmVpZ24KK3NjYW4sIG9yIGlmIGEgcGFydGl0aW9ud2lzZSBq b2luIGlzIGJlaW5nIHBlcmZvcm1lZCBiZXR3ZWVuIHRob3NlIHRhYmxlcywgdGhlbgoraXQncyBp bXBvc3NpYmxlIHRvIHNheSB0aGF0IHQyIGlzIHRoZSBvdXRlciB0YWJsZSBhbmQgdDMgaXMgdGhl IGlubmVyIHRhYmxlLAorb3IgdGhlIG90aGVyIHdheSBhcm91bmQ7IGl0J3MganVzdCB1bmRlZmlu ZWQuIEluIHN1Y2ggY2FzZXMsIHdlIGdlbmVyYXRlCitqb2luIGFkdmljZSB0aGF0IHVzZXMgY3Vy bHkgYnJhY2VzLCBpbnRlbmRpbmcgdG8gaW5kaWNhdGUgYSBsYWNrIG9mIG9yZGVyaW5nOgorSk9J Tl9PUkRFUih0MSB7dDIgdDN9KSBzYXlzIHRoYXQgdGhlIHVwcGVybW9zdCBqb2luIHNob3VsZCBo YXZlIHQxIG9uIHRoZSBvdXRlcgorc2lkZSBhbmQgc29tZSBraW5kIG9mIGpvaW4gYmV0d2VlbiB0 MiBhbmQgdDMgb24gdGhlIGlubmVyIHNpZGUsIGJ1dCB3aXRob3V0CitzYXlpbmcgaG93IHRoYXQg am9pbiBtdXN0IGJlIHBlcmZvcm1lZCBvciBhbnl0aGluZyBhYm91dCB3aGljaCByZWxhdGlvbiBz aG91bGQKK2FwcGVhciBvbiB3aGljaCBzaWRlIG9mIHRoZSBqb2luLCBvciBldmVuIHdoZXRoZXIg dGhpcyBraW5kIG9mIGpvaW4gaGFzIHNpZGVzLgorCitKb2luIFN0cmF0ZWd5IEFkdmljZQorPT09 PT09PT09PT09PT09PT09PT0KKworVGFncyBzdWNoIGFzIE5FU1RFRF9MT09QX1BMQUlOIHNwZWNp ZnkgdGhlIG1ldGhvZCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvCitwZXJmb3JtIGEgY2VydGFpbiBq b2luLiBNb3JlIHNwZWNpZmljYWxseSwgTkVTVEVEX0xPT1BfUExBSU4oeCAoeSB6KSkgc2F5cwor dGhhdCB0aGUgcGxhbiBzaG91bGQgcHV0IHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlz ICJ4IiBvbiB0aGUgaW5uZXIKK3NpZGUgb2YgYSBwbGFpbiBuZXN0ZWQgbG9vcCAob25lIHdpdGhv dXQgbWF0ZXJpYWxpemF0aW9uIG9yIG1lbW9pemF0aW9uKQorYW5kIHRoYXQgaXQgc2hvdWxkIGFs c28gcHV0IGEgam9pbiBiZXR3ZWVuIHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzCisi eSIgYW5kIHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzICJ6IiBvbiB0aGUgaW5uZXIg c2lkZSBvZiBhIG5lc3RlZAorbG9vcC4gSGVuY2UsIGZvciBhbiBOLXRhYmxlIGpvaW4gcHJvYmxl bSwgdGhlcmUgd2lsbCBiZSBOLTEgcGllY2VzIG9mIGpvaW4KK3N0cmF0ZWd5IGFkdmljZTsgbm8g am9pbiBzdHJhdGVneSBhZHZpY2UgaXMgcmVxdWlyZWQgZm9yIHRoZSBvdXRlcm1vc3QKK3RhYmxl IGluIHRoZSBqb2luIHByb2JsZW0uCisKK0NvbnNpZGVyaW5nIHRoYXQgd2UgaGF2ZSBib3RoIGpv aW4gb3JkZXIgYWR2aWNlIGFuZCBqb2luIHN0cmF0ZWd5IGFkdmljZSwKK2l0IG1pZ2h0IHNlZW0g bmF0dXJhbCB0byBzYXkgdGhhdCBORVNURURfTE9PUF9QTEFJTih4KSBzaG91bGQgYmUgcmVkZWZp bmVkCit0byBtZWFuIHRoYXQgeCBzaG91bGQgYXBwZWFyIGJ5IGl0c2VsZiBvbiBvbmUgc2lkZSBv ciB0aGUgb3RoZXIgb2YgYSBuZXN0ZWQKK2xvb3AsIHJhdGhlciB0aGFuIHNwZWNpZmljYWxseSBv biB0aGUgaW5uZXIgc2lkZSwgYnV0IHRoaXMgZGVmaW5pdGlvbiBhcHBlYXJzCit1c2VsZXNzIGlu IHByYWN0aWNlLiBJdCBnaXZlcyB0aGUgcGxhbm5lciB0b28gbXVjaCBmcmVlZG9tIHRvIGRvIHRo aW5ncyB0aGF0CitiZWFyIGxpdHRsZSByZXNlbWJsYW5jZSB0byB3aGF0IHRoZSB1c2VyIHByb2Jh Ymx5IGhhZCBpbiBtaW5kLiBUaGlzIG1ha2VzCitvbmx5IGEgbGltaXRlZCBhbW91bnQgb2YgcHJh Y3RpY2FsIGRpZmZlcmVuY2UgaW4gdGhlIGNhc2Ugb2YgYSBtZXJnZSBqb2luIG9yCit1bnBhcmFt ZXRlcml6ZWQgbmVzdGVkIGxvb3AsIGJ1dCBmb3IgYSBwYXJhbWV0ZXJpemVkIG5lc3RlZCBsb29w IG9yIGEgaGFzaAoram9pbiwgdGhlIHR3byBzaWRlcyBhcmUgdHJlYXRlZCB2ZXJ5IGRpZmZlcmVu dGx5IGFuZCBzYXlpbmcgdGhhdCBhIGNlcnRhaW4KK3JlbGF0aW9uIHNob3VsZCBiZSBpbnZvbHZl ZCBpbiBvbmUgb2YgdGhvc2Ugb3BlcmF0aW9ucyB3aXRob3V0IHNheWluZyB3aGljaAorcm9sZSBp dCBzaG91bGQgdGFrZSBpc24ndCBzYXlpbmcgbXVjaC4KKworVGhpcyBjaG9pY2Ugb2YgZGVmaW5p dGlvbiBpbXBsaWVzIHRoYXQgam9pbiBzdHJhdGVneSBhZHZpY2UgYWxzbyBpbXBvc2VzIHNvbWUK K2pvaW4gb3JkZXIgY29uc3RyYWludHMuIEZvciBleGFtcGxlLCBnaXZlbiBhIGpvaW4gYmV0d2Vl biBmb28gYW5kIGJhciwKK0hBU0hfSk9JTihiYXIpIGltcGxpZXMgdGhhdCBmb28gaXMgdGhlIGRy aXZpbmcgdGFibGUuIE90aGVyd2lzZSwgaXQgd291bGQKK2JlIGltcG9zc2libGUgdG8gcHV0IGJh ciBiZW5lYXRoIHRoZSBpbm5lciBzaWRlIG9mIGEgSGFzaCBKb2luLgorCitOb3RlIHRoYXQsIGdp dmVuIHRoaXMgZGVmaW5pdGlvbiwgaXQncyByZWFzb25hYmxlIHRvIGNvbnNpZGVyIGRlbGV0aW5n IHRoZQoram9pbiBvcmRlciBhZHZpY2UgYnV0IGFwcGx5aW5nIHRoZSBqb2luIHN0cmF0ZWd5IGFk dmljZS4gRm9yIGV4YW1wbGUsCitjb25zaWRlciBhIHN0YXIgc2NoZW1hIHdpdGggdGFibGVzIGZh Y3QsIGRpbTEsIGRpbTIsIGRpbTMsIGRpbTQsIGFuZCBkaW01LgorVGhlIGF1dG9tYXRpY2FsbHkg Z2VuZXJhdGVkIGFkdmljZSBtaWdodCBzcGVjaWZ5IEpPSU5fT1JERVIoZmFjdCBkaW0xIGRpbTMK K2RpbTQgZGltMiBkaW01KSBIQVNIX0pPSU4oZGltMiBkaW00KSBORVNURURfTE9PUF9QTEFJTihk aW0xIGRpbTMgZGltNSkuCitEZWxldGluZyB0aGUgSk9JTl9PUkRFUiBhZHZpY2UgYWxsb3dzIHRo ZSBwbGFubmVyIHRvIHJlb3JkZXIgdGhlIGpvaW5zCitob3dldmVyIGl0IGxpa2VzIHdoaWxlIHN0 aWxsIGZvcmNpbmcgdGhlIHNhbWUgY2hvaWNlIG9mIGpvaW4gbWV0aG9kLiBUaGlzCitzZWVtcyBw b3RlbnRpYWxseSB1c2VmdWwsIGFuZCBpcyBvbmUgcmVhc29uIHdoeSBhIHVuaWZpZWQgc3ludGF4 IHRoYXQgY29udHJvbHMKK2JvdGggam9pbiBvcmRlciBhbmQgam9pbiBtZXRob2QgaW4gYSBzaW5n bGUgbG9jdXRpb24gd2FzIG5vdCBjaG9zZW4uCisKK0FkdmljZSBDb21wbGV0ZW5lc3MKKz09PT09 PT09PT09PT09PT09PT0KKworQW4gZXNzZW50aWFsIGd1aWRpbmcgcHJpbmNpcGxlIGlzIHRoYXQg bm8gaW5mZXJlbmNlIG1heSBtYWRlIG9uIHRoZSBiYXNpcworb2YgdGhlIGFic2VuY2Ugb2YgYWR2 aWNlLiBUaGUgdXNlciBpcyBlbnRpdGxlZCB0byByZW1vdmUgYW55IHBvcnRpb24gb2YgdGhlCitn ZW5lcmF0ZWQgYWR2aWNlIHdoaWNoIHRoZXkgZGVlbSB1bnN1aXRhYmxlIG9yIGNvdW50ZXJwcm9k dWN0aXZlIGFuZCB0aGUKK3Jlc3VsdCBzaG91bGQgb25seSBiZSB0byBpbmNyZWFzZSB0aGUgZmxl eGliaWxpdHkgYWZmb3JkZWQgdG8gdGhlIHBsYW5uZXIuCitUaGlzIG1lYW5zIHRoYXQgaWYgYWR2 aWNlIGNhbiBzYXkgdGhhdCBhIGNlcnRhaW4gb3B0aW1pemF0aW9uIG9yIHRlY2huaXF1ZQorc2hv dWxkIGJlIHVzZWQsIGl0IHNob3VsZCBhbHNvIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIG9wdGlt aXphdGlvbiBvcgordGVjaG5pcXVlIHNob3VsZCBub3QgYmUgdXNlZC4gV2Ugc2hvdWxkIG5ldmVy IGFzc3VtZSB0aGF0IHRoZSBhYnNlbmNlIG9mIGFuCitpbnN0cnVjdGlvbiB0byBkbyBhIGNlcnRh aW4gdGhpbmcgbWVhbnMgdGhhdCBpdCBzaG91bGQgbm90IGJlIGRvbmU7IGFsbAoraW5zdHJ1Y3Rp b25zIG11c3QgYmUgZXhwbGljaXQuCisKK1NlbWlqb2luIFVuaXF1ZW5lc3MKKz09PT09PT09PT09 PT09PT09PT0KKworRmFjZWQgd2l0aCBhIHNlbWlqb2luLCB0aGUgcGxhbm5lciBjb25zaWRlcnMg Ym90aCBhIGRpcmVjdCBpbXBsZW1lbnRhdGlvbgorYW5kIGEgcGxhbiB3aGVyZSB0aGUgb25lIHNp ZGUgaXMgbWFkZSB1bmlxdWUgYW5kIHRoZW4gYW4gaW5uZXIgam9pbiBpcworcGVyZm9ybWVkLiBX ZSBlbWl0IFNFTUlKT0lOX1VOSVFVRSgpIGFkdmljZSB3aGVuIHRoaXMgdHJhbnNmb3JtYXRpb24g b2NjdXJzCithbmQgU0VNSUpPSU5fTk9OX1VOSVFVRSgpIGFkdmljZSB3aGVuIGl0IGRvZXNuJ3Qu IFRoZXNlIGl0ZW1zIHdvcmsgbGlrZQoram9pbiBzdHJhdGVneSBhZHZpY2U6IHRoZSBpbm5lciBz aWRlIG9mIHRoZSByZWxldmFudCBqb2luIGlzIG5hbWVkLCBhbmQgdGhlCitjaG9zZW4gam9pbiBv cmRlciBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYWR2aWNlIGhhdmluZyBzb21lIGVmZmVj dC4KKworUGFydGl0aW9ud2lzZQorPT09PT09PT09PT09PQorCitQQVJUSVRJT05XSVNFKCkgYWR2 aXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYm90aCB0aG9zZSBwYXJ0aXRpb253aXNlIGpvaW5z Cit3aGljaCBzaG91bGQgYmUgcGVyZm9ybWVkIGFuZCB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJl IHBlcmZvcm1lZDsgdGhlIGlkZWEKK2lzIHRoYXQgZWFjaCBhcmd1bWVudCB0byBQQVJUSVRJT05X SVNFIHNwZWNpZmllcyBhIHNldCBvZiByZWxhdGlvbnMgdGhhdAorc2hvdWxkIGJlIHNjYW5uZWQg cGFydGl0aW9ud2lzZSBhZnRlciBiZWluZyBqb2luZWQgdG8gZWFjaCBvdGhlciBhbmQgbm90aGlu ZworZWxzZS4gSGVuY2UsIGZvciBleGFtcGxlLCBQQVJUSVRJT05XSVNFKCh0MSB0MikgdDMpIHNw ZWNpZmllcyB0aGF0IHRoZQorcXVlcnkgc2hvdWxkIGNvbnRhaW4gYSBwYXJ0aXRpb253aXNlIGpv aW4gYmV0d2VlbiB0MSBhbmQgdDIgYW5kIHRoYXQgdDMKK3Nob3VsZCBub3QgYmUgcGFydCBvZiBh bnkgcGFydGl0aW9ud2lzZSBqb2luLiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgcmVscworaW4gdGhl IHF1ZXJ5LCBzcGVjaWZ5aW5nIGp1c3QgUEFSVElUSU9OV0lTRSgodDEgdDIpKSB3b3VsZCBoYXZl IHRoZSBzYW1lCitlZmZlY3QsIHNpbmNlIHRoZXJlIHdvdWxkIGJlIG5vIG90aGVyIHJlbHMgdG8g d2hpY2ggdDMgY291bGQgYmUgam9pbmVkIGluCithIHBhcnRpdGlvbndpc2UgZmFzaGlvbi4KKwor UGFyYWxsZWwgUXVlcnkgKEdhdGhlciwgZXRjLikKKz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisKK0VhY2ggYXJndW1lbnQgdG8gR0FUSEVSKCkgb3IgR0FUSEVSX01FUkdFKCkgaXMgYSBz aW5nbGUgcmVsYXRpb24gb3IgYW4KK2V4YWN0IHNldCBvZiByZWxhdGlvbnMgb24gdG9wIG9mIHdo aWNoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLAorcmVzcGVjdGl2ZWx5LCBzaG91bGQg YmUgcGxhY2VkLiBFYWNoIGFyZ3VtZW50IHRvIE5PX0dBVEhFUigpIGlzIGEgc2luZ2xlCityZWxh dGlvbiB0aGF0IHNob3VsZCBub3QgYXBwZWFyIGJlbmVhdGggYW55IEdhdGhlciBvciBHYXRoZXIg TWVyZ2Ugbm9kZTsKK3RoYXQgaXMsIHBhcmFsbGVsaXNtIHNob3VsZCBub3QgYmUgdXNlZC4KKwor SW1wbGljaXQgSm9pbiBPcmRlciBDb25zdHJhaW50cworPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCitXaGVuIEpPSU5fT1JERVIoKSBhZHZpY2UgaXMgbm90IHByb3ZpZGVkIGZvciBh IHBhcnRpY3VsYXIgam9pbiBwcm9ibGVtLAorb3RoZXIgcGllY2VzIG9mIGFkdmljZSBtYXkgc3Rp bGwgaW5jaWRlbnRhbGx5IGNvbnN0cmFpbnQgdGhlIGpvaW4gb3JkZXIuCitGb3IgZXhhbXBsZSwg YSB1c2VyIHdobyBzcGVjaWZpZXMgSEFTSF9KT0lOKChmb28gYmFyKSkgaXMgZXhwbGljaXRseSBz YXlpbmcKK3RoYXQgdGhlcmUgc2hvdWxkIGJlIGEgaGFzaCBqb2luIHdpdGggZXhhY3RseSBmb28g YW5kIGJhciBvbiB0aGUgb3V0ZXIKK3NpZGUgb2YgaXQsIGJ1dCB0aGF0IGFsc28gaW1wbGllcyB0 aGF0IGZvbyBhbmQgYmFyIG11c3QgYmUgam9pbmVkIHRvCitlYWNoIG90aGVyIGJlZm9yZSBlaXRo ZXIgb2YgdGhlbSBpcyBqb2luZWQgdG8gYW55dGhpbmcgZWxzZS4gT3RoZXJ3aXNlLAordGhlIGpv aW4gdGhlIHVzZXIgaXMgYXR0ZW1wdGluZyB0byBjb25zdHJhaW50IHdvbid0IGFjdHVhbGx5IG9j Y3VyIGluIHRoZQorcXVlcnksIHdoaWNoIGVuZHMgdXAgbG9va2luZyBsaWtlIHRoZSBzeXN0ZW0g aGFzIGp1c3QgZGVjaWRlZCB0byBpZ25vcmUKK3RoZSBhZHZpY2UgYWx0b2dldGhlci4KKworRnV0 dXJlIFdvcmsKKz09PT09PT09PT09CisKK1dlIGRvbid0IGhhbmRsZSBjaG9pY2Ugb2YgYWdncmVn YXRpb246IGl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBmb3JjZQorc29ydGVkIG9yIGdy b3VwZWQgYWdncmVnYXRpb24uIEknbSBndWVzc2luZyB0aGlzIGNhbiBiZSBsZWZ0IHRvIGZ1dHVy ZSB3b3JrLgorCitNb3JlIHNlcmlvdXNseSwgd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCBl YWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggY291bGQKK2hhdmUgYSBsYXJnZSBpbXBhY3Qgb24gdGhl IHNoYXBlIG9mIHRoZSBwbGFuIHRyZWUuIFhYWDogVGhpcyBuZWVkcyBzb21lIHN0dWR5Cit0byBk ZXRlcm1pbmUgaG93IGxhcmdlIGEgcHJvYmxlbSBpdCBpcywgYW5kIG1pZ2h0IG5lZWQgdG8gYmUg Zml4ZWQgc29vbmVyCityYXRoZXIgdGhhbiBsYXRlci4KKworV2UgZG9uJ3Qgb2ZmZXIgYW55IGNv bnRyb2wgb3ZlciBlc3RpbWF0ZXMsIG9ubHkgb3V0Y29tZXMuIEl0IHNlZW1zIGxpa2UgYQorZ29v ZCBpZGVhIHRvIGluY29ycG9yYXRlIHRoYXQgYWJpbGl0eSBhdCBzb21lIGZ1dHVyZSBwb2ludCwg YXMgcGdfaGludF9wbGFuCitkb2VzLiBIb3dldmVyLCBzaW5jZSBwcmltYXJ5IGdvYWwgb2YgdGhl IGluaXRpYWwgZGV2ZWxvcG1lbnQgd29yayBpcyB0byBiZQorYWJsZSB0byBpbmR1Y2UgdGhlIHBs YW5uZXIgdG8gcmVjcmVhdGUgYSBkZXNpcmVkIHBsYW4gdGhhdCB3b3JrZWQgd2VsbCBpbgordGhl IHBhc3QsIHRoaXMgaGFzIG5vdCBiZWVuIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGRldmVsb3Bt ZW50IGVmZm9ydC4KKworWFhYIE5lZWQgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBhbmQgaG93IHdl bGwgc3VwcGx5aW5nIGFkdmljZSB3b3JrcyB3aXRoIEdFUU8KZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMGNjMGRlZGY4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKQEAgLTAsMCArMSwzNzEgQEAKK0xPQUQgJ3BnX3BsYW5f YWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMTsKK1NFVCBw YXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKK1NF VCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9x dWVyeSA9IG9mZjsKK0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwg ZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElO VE8gZ3RfZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKK0NSRUFURSBUQUJMRSBndF9mYWN0 ICgKKwlpZCBpbnQgbm90IG51bGwsCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNl cyBndF9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNF UlQgSU5UTyBndF9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9mYWN0OworLS0gQnkgZGVmYXVsdCwgd2Ug ZXhwZWN0IEdhdGhlciBNZXJnZSB3aXRoIGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0 X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlciBNZXJnZQor ICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYu ZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBI YXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwg U2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4o ZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNCByb3dzKQor CistLSBGb3JjZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9mIGJvdGggcmVsYXRpb25zIHRvZ2V0 aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9t ZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBC WSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEdhdGhlciBNZXJnZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgU29y dAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFz aCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAg ICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAg ICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJf TUVSR0UoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FU SEVSX01FUkdFKChmIGQpKQorKDE2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAtPiAg R2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBQYXJhbGxl bCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkK KyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAg ICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy YWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdB VEhFUigoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRI RVIoKGYgZCkpCisoMTYgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBzZXBhcmF0ZSBHYXRo ZXIgb3IgR2F0aGVyIE1lcmdlIG9wZXJhdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZiBkKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBm IEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBN ZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAg ICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg U29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4g b24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5u ZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZC5pZAor ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLworICAgR0FU SEVSX01FUkdFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkK KyAgIEdBVEhFUl9NRVJHRShmIGQpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlk KQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4g IEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdv cmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyogbWF0Y2hl ZCAqLworICAgR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FO KGYgZCkKKyAgIEdBVEhFUihmIGQpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXIoKGQgZC9kLmQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQg PSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAx CisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAg SW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgR0FUSEVSKChkIGQvZC5kKSkgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5f UExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9w a2V5KQorICAgR0FUSEVSX01FUkdFKGYpCisgICBOT19HQVRIRVIoZCkKKygxNyByb3dzKQorCitD T01NSVQ7CistLSBGb3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9u IGJ1dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENv bmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3Jr ZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtl eTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9m YWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLwor ICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYp CisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSX01FUkdFKGYp CisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdlCisg ICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAg ICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZCkg LyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkK KyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRShkKQorICAgTk9fR0FUSEVSKGYpCiso MTkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZikg bm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIg QlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAg ICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyog bWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAg IFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FU SEVSKGYpCisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IGQuaWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtl cnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0 X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAq LworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FO KGYgZCkKKyAgIEdBVEhFUihkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKworQ09NTUlU OworLS0gRm9yY2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYg Sk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2Ug Q29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9w a2V5IG9uIGd0X2RpbSBkCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lk CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAg IE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVi bGljLmd0X2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitDT01NSVQ7 CistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUgT1JERVIgQlkgY2xhdXNl LCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEdhdGhlcgorICAgRGlzYWJsZWQ6IHRydWUKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAg LT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBk LmlkKQorICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAg ICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKChm IGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FU SEVSKChmIGQpKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgorICAg V29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICBI YXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBk KQorICAgR0FUSEVSKChmIGQpKQorKDE0IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgY29uZmxp Y3RpbmcgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2dhdGhlcigoZiBkKSkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5l ZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAg LT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1f aWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2Zh Y3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICov CisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQp CisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTcgcm93cykKKwor Q09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2lu X29yZGVyLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiMGRjZWY3MDEyCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29y ZGVyLm91dApAQCAtMCwwICsxLDUwOSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvX2RpbTEg KGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEs IHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEK KwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGlt MTsKK0NSRUFURSBUQUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRl eHQsIHZhbDIgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGpvX2RpbTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIg dGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAp IGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0yOworQ1JFQVRFIFRBQkxFIGpvX2ZhY3QgKAorCWlk IGludCBwcmltYXJ5IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBq b19kaW0xIChpZCksCisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGlt MiAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IGpvX2ZhY3QKKwlTRUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19mYWN0OworLS0gV2UgZXhwZWN0 IHRvIGpvaW4gdG8gZDIgZmlyc3QgYW5kIHRoZW4gZDEsIHNpbmNlIHRoZSBjb25kaXRpb24gb24g ZDIKKy0tIGlzIG1vcmUgc2VsZWN0aXZlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5k aW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5p ZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lO KGQyIGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE2 IHJvd3MpCisKKy0tIEZvcmNlIGEgZmV3IGRpZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0 aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMg dGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5k aW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5p ZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpCisgICBIQVNI X0pPSU4oZDEgZDIpCisgICBTRVFfU0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIp CisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29y ZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQx LmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2 YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBK b2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lOKGQyIGQx KQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBmIGQy KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19m YWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5E IHZhbDIgPSAxOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg IEhhc2ggQ29uZDogKGQxLmlkID0gZi5kaW0xX2lkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGQxIGYgZDIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGQxIGYgZDIpCisgICBIQVNIX0pPSU4oZiBkMikKKyAgIFNFUV9TQ0FOKGQxIGYg ZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4g am9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9O IGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICgoZi5kaW0yX2lkID0gZDIuaWQpIEFO RCAoZi5kaW0xX2lkID0gZDEuaWQpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBm LmRpbTJfaWQsIGYuZGltMV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgor ICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkMi5pZCwgZDEuaWQKKyAgICAgICAgIC0+ ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKQor ICAgTUVSR0VfSk9JTl9QTEFJTigoZDEgZDIpKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUo ZDIpCisgICBTRVFfU0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMjEgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYge2Qx IGQyfSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g am9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo KGYuZGltMl9pZCA9IGQyLmlkKSBBTkQgKGYuZGltMV9pZCA9IGQxLmlkKSkKKyAgIC0+ICBTb3J0 CisgICAgICAgICBTb3J0IEtleTogZi5kaW0yX2lkLCBmLmRpbTFfaWQKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZDIu aWQsIGQxLmlkCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwy ID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihmIHtkMSBkMn0pIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZiAoZDIgZDEpKQorICAgTUVSR0VfSk9JTl9QTEFJTigoZDEgZDIp KQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQor ICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMjEgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBq b2luIG9yZGVyIGJ5IG1lbnRpb25pbmcganVzdCBhIHByZWZpeCBvZiB0aGUgam9pbiBsaXN0Lgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggSm9pbgorICAgSGFzaCBDb25kOiAoZDIuaWQgPSBmLmRpbTJfaWQpCisgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFz aAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5k aW0xX2lkID0gZDEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBm CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMikgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgKGYgZDEp KQorICAgSEFTSF9KT0lOKGQxIChmIGQxKSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19H QVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2pvaW5fb3JkZXIoZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9p bgorICAgTWVyZ2UgQ29uZDogKChkMi5pZCA9IGYuZGltMl9pZCkgQU5EIChkMS5pZCA9IGYuZGlt MV9pZCkpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQyLmlkLCBkMS5pZAorICAg ICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAg ICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwx ID0gMSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW0yX2lkLCBmLmRpbTFf aWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGQxIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYp CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGQxIGYpCisg ICBOT19HQVRIRVIoZiBkMSBkMikKKygyMSByb3dzKQorCitDT01NSVQ7CistLSBqb19mYWN0IGlz IG5vdCBwYXJ0aXRpb25lZCwgYnV0IGxldCdzIHRyeSBwcmV0ZW5kaW5nIHRoYXQgaXQgaXMgYW5k CistLSB2ZXJpZnlpbmcgdGhhdCB0aGUgYWR2aWNlIGRvZXMgbm90IGFwcGx5LgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSBkMSBkMikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFj dCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2 YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvX2Rp bTFfcGtleSBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBm LmRpbTFfaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIGpvX2RpbTJfcGtleSBvbiBqb19kaW0yIGQyCisgICAgICAgICBJbmRleCBD b25kOiAoaWQgPSBmLmRpbTJfaWQpCisgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZi9kMSBkMSBkMikgLyogcGFydGlhbGx5 IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEg ZDIpCisgICBORVNURURfTE9PUF9QTEFJTihkMSBkMikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRF WF9TQ0FOKGQxIHB1YmxpYy5qb19kaW0xX3BrZXkgZDIgcHVibGljLmpvX2RpbTJfcGtleSkKKyAg IE5PX0dBVEhFUihmIGQxIGQyKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVyOiAoKGQx LmlkID0gZi5kaW0xX2lkKSBBTkQgKGQyLmlkID0gZi5kaW0yX2lkKSkKKyAgIC0+ICBOZXN0ZWQg TG9vcAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMiA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYvZDEgKGQxIGQyKSkgLyogcGFydGlhbGx5IG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxIGQyIGYp CisgICBORVNURURfTE9PUF9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDIp CisgICBTRVFfU0NBTihkMSBkMiBmKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykK KworQ09NTUlUOworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhpcyBxdWVyeSBpcyBp bnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9tIHJlZHVjaW5nIHRo ZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQgd2UKKy0tIGNhbiB0 ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90IGJlIHJlb3JkZXJl ZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Rp bTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFf aWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgo ZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2Ug RnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0y X2lkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAo KGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgor ICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCAr IDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExB SU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZDIgZiBk MSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDE4IHJvd3MpCisKKy0tIFdlIHNob3VsZCBub3Qg YmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJlY2F1 c2UKKy0tIHRoYXQgaXMgbm90IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBiZSBh YmxlIHRvIGZvcmNlIHRoZSBwbGFubmVyCistLSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRoZSBk cml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0g Zi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w CisgICBEaXNhYmxlZDogdHJ1ZQorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQp IE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAg ICBEaXNhYmxlZDogdHJ1ZQorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAo KGYuZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0 IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTIgZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRp bTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZDEgZDIpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihm KQorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9f R0FUSEVSKGQxIGYgZDIpCisoMjEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdqb2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYg RlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBk MS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFf aWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25k OiAoKChmLmRpbTJfaWQgKyAwKSkgPSAoKGQyLmlkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAg ICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihm IGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQyIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihkMikKKyAgIE5FU1RFRF9MT09QX01B VEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQy KQorKDIwIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9v cmRlcihkMiBmIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19k aW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFf aWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpv aW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQor ICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAw KSkgPSAoKGYuZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAg ICBTb3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2RpbTIgZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTog KChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0 IGYKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEg ZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkK KyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQor ICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIwIHJvd3MpCisK K0NPTU1JVDsKKy0tIFR3byBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgc2hvdWxkIGNvbmZsaWN0 LiBJbiB0aGUgc2Vjb25kIGNhc2UsCistLSB0aGUgY29uZmxpY3QgaXMgaW1wbGljaXQ6IGlmIGQx IGlzIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9pbiBvZiBhbnkKKy0tIHR5cGUsIGl0IGNhbm5v dCBhbHNvIGJlIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZikgam9pbl9vcmRlcihkMSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVS IEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0g ZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOwor ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGlt MV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAg ICAgICAgIE1lcmdlIENvbmQ6ICgoKGYuZGltMl9pZCArIDApKSA9ICgoZDIuaWQgKyAwKSkpCisg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsg MCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAtPiAgTWF0ZXJpYWxpemUKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgICBKT0lOX09S REVSKGQxKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihk MikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkK KyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSkgaGFzaF9qb2luKGQxKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIg Sk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBk Mi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYu ZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0xIGQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBNZXJnZSBGdWxsIEpvaW4K KyAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQg KyAwKSkpCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29y dCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAg ICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGQxKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSEFTSF9KT0lOKGQxKSAvKiBt YXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihkMSAoZDIgZikpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNU RURfTE9PUF9NQVRFUklBTElaRSgoZiBkMikpCisgICBTRVFfU0NBTihkMSBkMiBmKQorICAgTk9f R0FUSEVSKGQxIGYgZDIpCisoMjEgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBmOWRiNjkyMTkwCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApAQCAtMCwwICsx LDMzOSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvaW5fZGltIChpZCBzZXJpYWwgcHJpbWFy eSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIGpvaW5fZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZGltOworQ1JFQVRFIFRB QkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRlZ2VyIG5v dCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBqb2luX2ZhY3Rf ZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZmFjdDsK Ky0tIFdlIGV4cGVjdCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFj dCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihk KQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMCByb3dzKQorCistLSBU cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBhcyB0aGUg aW5uZXIgdGFibGUuCistLSBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZvciBNRVJH RV9KT0lOX01BVEVSSUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhlIHBsYW5u ZXIga25vd3MgdGhhdCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0tIHJlZnVz ZSB0byBhZGQgbWFyay9yZXN0b3JlIG92ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNo IENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAg U0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBm IEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TWVyZ2UgSm9pbgorICAgRGlzYWJsZWQ6IHRydWUKKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9 IGQuaWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5f ZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGlt IGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCkg LyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGlj LmpvaW5fZmFjdF9kaW1faWQgZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJH RV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpv aW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5f ZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQor ICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3Rf ZGltX2lkIGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDExIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBG aWx0ZXI6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYK KyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkK KyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19H QVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTkVTVEVEX0xPT1BfTUVNT0laRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5f ZmFjdCBmCisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUgS2V5OiBmLmRpbV9pZAorICAg ICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg am9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo aWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01F TU9JWkUoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShkKQorICAgU0VRX1NDQU4oZikKKyAg IElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCiso MTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9P UF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChp ZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExB SU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZiBkKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRF WF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJv d3MpCisKK0NPTU1JVDsKKy0tIE5vdyB0cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1 cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhlIGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNo b3VsZCB3b3JrLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hB U0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGQuaWQgPSBmLmRp bV9pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZCBmKQorICAgSEFTSF9KT0lOKGYpCisgICBTRVFfU0NBTihkIGYpCisgICBO T19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJn ZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9k aW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0Vf Sk9JTl9NQVRFUklBTElaRShmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5 IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihm KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9p bl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAtPiAg SW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5f UExBSU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1YmxpYy5q b2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoZi5kaW1f aWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9P UF9NQVRFUklBTElaRShmKQorICAgU0VRX1NDQU4oZCBmKQorICAgTk9fR0FUSEVSKGYgZCkKKygx MiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X01FTU9JWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQK KyAgIC0+ICBNZW1vaXplCisgICAgICAgICBDYWNoZSBLZXk6IGQuaWQKKyAgICAgICAgIENhY2hl IE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9k aW1faWQgb24gam9pbl9mYWN0IGYKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChkaW1faWQg PSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVNT0laRShm KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihk IGYpCisgICBORVNURURfTE9PUF9NRU1PSVpFKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5ERVhf U0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BM QUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICBJbmRleCBD b25kOiAoZGltX2lkID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9M T09QX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpCisgICBTRVFfU0NBTihkKQor ICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMiByb3dzKQorCitDT01NSVQ7CistLSBOb24td29ya2luZyBjYXNlcy4gV2UgY2FuJ3Qg Zm9yY2UgYSBmb3JlaWduIGpvaW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsCistLSBiZWNhdXNlIHRo ZXkgYXJlbid0IGZvcmVpZ24gdGFibGVzLiBXZSBhbHNvIGNhbid0IHVzZSB0d28gZGlmZmVyZW50 CistLSBzdHJhdGVnaWVzIG9uIHRoZSBzYW1lIHRhYmxlLCBub3IgY2FuIHdlIHB1dCBib3RoIHRh YmxlcyBvbiB0aGUgaW5uZXIKKy0tIHNpZGUgb2YgdGhlIHNhbWUgam9pbi4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxl ZDogdHJ1ZQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgRk9SRUlHTl9KT0lO KChmIGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihm KQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RF RF9MT09QX1BMQUlOKGYpIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2Ug Sm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgTkVTVEVEX0xPT1BfUExBSU4oZikgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxl ZCAqLworICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCwgY29uZmxpY3Rp bmcsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBm KQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2Rp bV9wa2V5IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEy IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1Bf UExBSU4oZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgor ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAg ICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworICAgTkVTVEVE X0xPT1BfUExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYp CisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBk KQorKDE0IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv ZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMzBjMDc2ODJjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKQEAgLTAsMCArMSw2OSBAQAor Q1JFQVRFIEVYVEVOU0lPTiBwZ19wbGFuX2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVy eSA9IG9mZjsKKy0tIFRyeSBjbGVhcmluZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBh bnkuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAKKygxIHJvdykKKworLS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQg c28gdGhhdCB3ZSdsbCBleGNlZWQgaXQuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVj dGlvbl9saW1pdCA9IDI7CistLSBFbmFibGUgdGhlIGNvbGxlY3Rvci4KK1NFVCBwZ19wbGFuX2Fk dmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvbjsKKy0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JF QVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CistLSBU ZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7 CisgYSB8IGIgfCBhIHwgYiAKKy0tLSstLS0rLS0tKy0tLQorKDAgcm93cykKKworU0VMRUNUICog RlJPTSBkdW1teV90YWJsZTsKKyBhIHwgYiAKKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIFNob3Vs ZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBwZ19w bGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvZmY7CitTRUxFQ1QgYWR2aWNlIEZST00gcGdf Z2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7Cisg ICAgICAgICBhZHZpY2UgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNFUV9T Q0FOKGR1bW15X3RhYmxlKSArCisgTk9fR0FUSEVSKGR1bW15X3RhYmxlKQorKDEgcm93KQorCist LSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0 ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBSYWlzZSB0 aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBsZSBj aHVua3MuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIwMDA7 CitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CistLSBQdXNoIGEgYnVu Y2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1Ig eCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7 CisJRU5EIExPT1A7CitFTkQKKyQkOworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtl ZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7 CisgY291bnQgCistLS0tLS0tCisgIDIwMDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFyIG9uZSBt b3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0t IGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0 IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmIzZDBhODI0NDMKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uu b3V0CkBAIC0wLDAgKzEsNDI2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vf am9pbiA9IHRydWU7CitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBk aW0xIHRleHQsIHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRB QkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQor CVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFiIFBB UlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJT04g T0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkKKwlT RUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQxOworQ1JFQVRFIFRB QkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQ QVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBw dDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxV RVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00g KDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRl eHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDIp IGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHBy aW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQp OworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEp IHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBU QUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAw MSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQz YyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGlt MywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcp ICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5BTFla RSBwdDM7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwg ZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMg RlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor Q1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9S IFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlTRUxF Q1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKK0VYUExB SU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMg V0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0g MSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBM b29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChw dDJfMS5pZCA9IHB0M18xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEg cHQyXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNh IHB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAg ICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo aWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNo IENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQor ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwz ID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0 MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDEvcHVibGljLnB0MWEp CisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1Ymxp Yy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0 MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEv cHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0My9wdWJsaWMucHQz YSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQyL3B1Ymxp Yy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisg ICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1 YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3Br ZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJ U0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1Ymxp Yy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0 MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1 YmxpYy5wdDNjKQorKDQ3IHJvd3MpCisKKy0tIFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9pbiwg b3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExBTl9B RFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEu aWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwy ID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgIEhhc2ggQ29uZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgIC0+ICBBcHBlbmQK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBw dDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMyA9IDEpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQx YyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQ QVJUSVRJT05XSVNFKHB0MSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDIpIC8q IG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDIgcHQzIHB0MSkKKyAgIE5FU1RFRF9M T09QX1BMQUlOKHB0MSkKKyAgIEhBU0hfSk9JTihwdDMpCisgICBTRVFfU0NBTihwdDIvcHVibGlj LnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EKKyAg ICBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVi bGljLnB0MWEgcHVibGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtl eQorICAgIHB0MS9wdWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lT RShwdDIgcHQzIHB0MSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5w dDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIg cHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1Ymxp Yy5wdDNjKQorKDQzIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn UEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5p ZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2 YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0My5pZCkK KyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhh c2ggQ29uZDogKHB0MV8xLmlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDIgPSAxKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAocHQxXzIuaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDFiIHB0MV8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFf My5pZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQx XzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0 Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hl ZCAqLworICAgUEFSVElUSU9OV0lTRShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0MmEp CisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIpCisgICBKT0lO X09SREVSKHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMpCisgICBKT0lOX09SREVSKHtw dDEgcHQyfSBwdDMpCisgICBIQVNIX0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQy YiBwdDIvcHVibGljLnB0MmMgcHQzKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0Mi9w dWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWIgcHQyL3B1YmxpYy5wdDJiCisgICAgcHQxL3B1Ymxp Yy5wdDFjIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiCisg ICAgcHQzL3B1YmxpYy5wdDNjKQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKQorICAg Tk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFj IHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQz L3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93cykK KworQ09NTUlUOworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgKHB0MSBw dDMpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBw dDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisg ICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAg IERpc2FibGVkOiB0cnVlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8xLmlkID0gcHQzXzEuaWQpCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChp ZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAg TmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB0M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMg PSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIgcHQx XzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlkID0gcHQzXzMu aWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyog bWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworICAgUEFSVElUSU9OV0lTRSgocHQxIHB0 MykpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQx L3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5w dDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVi bGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihw dDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9T Q0FOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9w dWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRF WF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBw dWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisg ICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5w dDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAg cHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1Ymxp Yy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg1MSByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBm b3JjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEg cHRtaXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlz YWJsZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFh IHB0MV8xCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNtYXRjaF8x CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgICAgICAgICAtPiAg SW5kZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0bWlzbWF0 Y2hfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAvKiBtYXRj aGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0 MSBwdG1pc21hdGNoKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRjaCkKKyAgIFNFUV9T Q0FOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAg SU5ERVhfU0NBTihwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMucHRtaXNtYXRj aGFfcGtleQorICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5wdG1pc21h dGNoYl9wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkKKyAgIE5PX0dBVEhF UihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYworICAgIHB0 bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hi KQorKDIyIHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEgcGFydGlj dWxhciBicmFuY2ggb2YgdGhlIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoCistLSBhbmQgd2l0aG91 dCBtZW50aW9uaW5nIHRoZSBzY2hlbWEgbmFtZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0 MmEgcHQxL3B1YmxpYy5wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQy LmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBw dDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0g cHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEp CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9w dWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEg cHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1Ymxp Yy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0 My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEv cHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9J TihwdDIvcHVibGljLnB0MmEgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNF UV9TQ0FOKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0 My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJ TkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQx YiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkp CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1Ymxp Yy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisg ICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1 YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0OSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0MWEp JzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwg cHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFO RCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNo IENvbmQ6IChwdDNfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQor ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwy ID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0 MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18y LmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAx KQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBv biBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkK KyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihwdDMvcHQzYSBwdDIvcHQyYSBwdDEvcHQxYSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNh IHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJs aWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihw dDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RF RF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5w dDFjKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1 YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBw dDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3Br ZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMg cHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5P X0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBw dDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ5IHJvd3MpCisK K0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcHJl cGFyZWQub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA3YTdjNjIzNjU5Ci0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5v dXQKQEAgLTAsMCArMSw2NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIHB0YWIgKGlkIGludGVn ZXIsIHZhbCB0ZXh0KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitTRVQgcGdf cGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7CistLSBOb3Qg cHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgYmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgCitTRUxFQ1QgKiBGUk9NIHB0YWI7CisgICAgICAgUVVFUlkgUExB TiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0 YWIpCisoNCByb3dzKQorCistLSBQcmVwYXJlZCwgc28gYWR2aWNlIHNob3VsZCBub3QgYmUgZ2Vu ZXJhdGVkLgorUFJFUEFSRSBwdDEgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3Bs YW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJl ZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93 IGFkdmljZS4KK1BSRVBBUkUgcHQyIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNVVEUgcHQyOworICAgICAgIFFVRVJZIFBMQU4gICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFiCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikKKyAgIE5PX0dBVEhFUihwdGFiKQor KDQgcm93cykKKworLS0gTm90IHByZXBhcmVkLCBzbyBmZWVkYmFjayBzaG91bGQgYmUgZ2VuZXJh dGVkLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZh bHNlOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihwdGFiKSc7CitFWFBM QUlOIChDT1NUUyBPRkYpIAorU0VMRUNUICogRlJPTSBwdGFiOworICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gcHRhYgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikgLyog bWF0Y2hlZCAqLworKDMgcm93cykKKworLS0gUHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgbm90 IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQzIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExB SU4gKENPU1RTIE9GRikgRVhFQ1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2 aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwgYnV0 IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGZlZWRi YWNrLgorUFJFUEFSRSBwdDQgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCisoNCBy b3dzKQorCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4u b3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2Y5ZTEzYjZkNDEKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0CkBAIC0wLDAgKzEs NzU3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCByYW5kb21fcGFn ZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVw bGVfY29zdCA9IDA7CitDUkVBVEUgVEFCTEUgc2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXks IGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5U TyBzY2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8fCBnIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBzY2FuX3RhYmxlX2IgT04gc2Nhbl90 YWJsZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIHNjYW5fdGFibGU7CistLSBTZXF1 ZW50aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZTsKKyAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDQgcm93cykKKworLS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVf cGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gSW5kZXgtb25s eSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNj YW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIEJpdG1hcCBo ZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisg ICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAg SW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3Nv bWUgdGV4dCA4Jzo6dGV4dCkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVB UF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK Ky0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBU aWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQp CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdI RVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg VGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ICcoMSwx KSc6OnRpZCkgQU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NSByb3dzKQorCistLSBUcnkgZm9yY2luZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNl IHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxk IHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90 YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg2IHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nh bl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09O TFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FO KHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3Rh YmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChi ID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1B UF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdU SURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQg PSAnKDAsMSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2Fu X3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1ND QU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygx LDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBv ZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNl IHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVu dGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBk b2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUg bGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRy dWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NB TihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0 cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFi bGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9u IHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXgg dXNlLiBUaGlzIHNob3VsZCBub3cgc3VjY2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBC SVRNQVBfSEVBUF9TQ0FOLCBidXQgdGhlIElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQg YmVjYXVzZSB0aGUKKy0tIHF1ZXJ5IGZldGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhl IGluZGV4LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENv bmQ6IChhID4gMCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPiAwKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1ND QU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVj ayBDb25kOiAoYSA+IDApCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9w a2V5CisgICAgICAgICBJbmRleCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSBh IHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNjYW4sIGJ1dCB3ZQorLS0g Y2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAoZHVlIHRvIHRoZSBjb2x1 bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJzZW5jZSBvZiBhIFRJRCBx dWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT ZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFi bGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUg YSA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5k ZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6 IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBX ZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBz Y2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUg cGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9u IHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJ bmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNj YW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdl IGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0 bWFwIGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4 IGlzIG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsK KyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRl cjogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVk OiB0cnVlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWlsZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykK KworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4g cmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQg Y3RpZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAg RmlsdGVyOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBt b3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3Vs ZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRo ZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGluYXBwbGlj YWJsZSwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg3IHJvd3MpCisKKy0tIEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNj YW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCistLSBCdXQgaXQgZG9l c24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZlbiBub3Rpb25hbGx5IGRpZmZlcmVu dC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAg SU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQs IGNvbmZsaWN0aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmlj ZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihu b3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm90aGluZykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0 c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJs ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5E RVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3Rh YmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9T Q0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5 IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6 IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihub3Ro aW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9u bHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGlj LnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKwor Q09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5j ZXMgb2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4g c2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9O IGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2lu CisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2Nh biBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nh bl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGEgPSBnLmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlO KHMgcyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkgcyMyIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoZyBzIHMjMikKKygxMiByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMo MSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpP SU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2lu CisgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGcuZyA9IHMuYSkK KyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcwor ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgc18x CisgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzIzIpCisgICBIQVNI X0pPSU4ocykKKyAgIFNFUV9TQ0FOKHMpCisgICBJTkRFWF9TQ0FOKHMjMiBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkg ZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nh bl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAg SGFzaCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisg ICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzKQorICAgSEFTSF9K T0lOKHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9z ZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBM RUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcg PSBzXzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZy5n ID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcK KyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUg c18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICov CisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBzIzIpCisgICBTRVFfU0NB TihzIHMjMikKKyAgIE5PX0dBVEhFUihnIHMgcyMyKQorKDE3IHJvd3MpCisKK0NPTU1JVDsKKy0t IFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEgc3VicXVlcnkuCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBz IFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9z dWJxdWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBO T19HQVRIRVIoeCBzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9 IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBz Y2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVf cGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJxdWVyeSkK Kyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVyeSBvbmx5LgorU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2Fu X3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc0B4KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc0B4KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVl cnkgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5 IHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBzZWNvbmQg cXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o c0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZG U0VUIDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIElu ZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNA dW5uYW1lZF9zdWJxdWVyeSkgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FU SEVSKHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9G RlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVl cnkpCisgICBOT19HQVRIRVIodW5uYW1lZF9zdWJxdWVyeSBzQHVubmFtZWRfc3VicXVlcnkpCiso NyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL3NlbWlqb2luLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Vt aWpvaW4ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NTUxYzAy OGExZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv c2VtaWpvaW4ub3V0CkBAIC0wLDAgKzEsMzc3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitT RVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgc2pf d2lkZSAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIsCisJcGFkZGlu ZyB0ZXh0IHN0b3JhZ2UgcGxhaW4KKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gc2pfd2lkZQorCVNFTEVDVCBnLCBnJTEwKzEsIHJlcGVhdCgnICcsIDMw MCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal93 aWRlICh2YWwxKTsKK1ZBQ1VVTSBBTkFMWVpFIHNqX3dpZGU7CitDUkVBVEUgVEFCTEUgc2pfbmFy cm93ICgKKwlpZCBpbnRlZ2VyIHByaW1hcnkga2V5LAorCXZhbDEgaW50ZWdlcgorKSBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzal9uYXJyb3cKKwlTRUxF Q1QgZywgZyUxMCsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUgSU5E RVggT04gc2pfbmFycm93ICh2YWwxKTsKK1ZBQ1VVTSBBTkFMWVpFIHNqX25hcnJvdzsKKy0tIFdl IGV4cGVjdCB0aGlzIHRvIG1ha2UgdGhlIFZBTFVFUyBsaXN0IHVuaXF1ZSBhbmQgdXNlIGluZGV4 IGxvb2t1cHMgdG8KKy0tIGZpbmQgdGhlIHJvd3MgaW4gc2pfd2lkZSwgc28gYXMgdG8gYXZvaWQg YSBmdWxsIHNjYW4gb2Ygc2pfd2lkZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEs IDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVTKiIu Y29sdW1uMSwgIipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24g IipWQUxVRVMqIgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfd2lkZV9wa2V5IG9uIHNqX3dp ZGUKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkKKyAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUigiKlZBTFVFUyoiIHNqX3dpZGUpCisgICBORVNURURfTE9P UF9QTEFJTihzal93aWRlKQorICAgSU5ERVhfU0NBTihzal93aWRlIHB1YmxpYy5zal93aWRlX3Br ZXkpCisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikKKyAgIE5PX0dBVEhFUihzal93aWRl ICIqVkFMVUVTKiIpCisoMTMgcm93cykKKworLS0gSWYgd2UgYXNrIGZvciBhIHVuaXF1ZSBzZW1p am9pbiwgd2Ugc2hvdWxkIGdldCB0aGUgc2FtZSBwbGFuIGFzIHdpdGgKKy0tIG5vIGFkdmljZS4g SWYgd2UgYXNrIGZvciBhIG5vbi11bmlxdWUgc2VtaWpvaW4sIHdlIHNob3VsZCBzZWUgYSBTZW1p CistLSBKb2luIG9wZXJhdGlvbiBpbiB0aGUgcGxhbiB0cmVlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJ V0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0 KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFMVUVTKiIuY29sdW1u MgorICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHNqX3dpZGVfcGtleSBvbiBzal93aWRlCisgICAgICAgICBJbmRleCBDb25kOiAo aWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpCisgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gIipWQUxV RVMqIi5jb2x1bW4yKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVF KCIqVkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKCIqVkFMVUVTKiIgc2pfd2lkZSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHNqX3dp ZGUpCisgICBJTkRFWF9TQ0FOKHNqX3dpZGUgcHVibGljLnNqX3dpZGVfcGtleSkKKyAgIFNFTUlK T0lOX1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX3dpZGUgIipWQUxVRVMqIikK KygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2lu X25vbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAo MSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICgoc2pfd2lkZS5pZCA9ICIqVkFMVUVTKiIuY29s dW1uMSkgQU5EIChzal93aWRlLnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNl cSBTY2FuIG9uIHNqX3dpZGUKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4g b24gIipWQUxVRVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9OX1VO SVFVRSgiKlZBTFVFUyoiKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihzal93aWRlICIqVkFMVUVTKiIpCisgICBIQVNIX0pPSU4oIipWQUxVRVMq IikKKyAgIFNFUV9TQ0FOKHNqX3dpZGUpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVT KiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSAiKlZBTFVFUyoiKQorKDEzIHJvd3MpCisKK0NPTU1J VDsKKy0tIEJlY2F1c2UgdGhpcyB0YWJsZSBpcyBuYXJyb3dlciB0aGFuIHRoZSBwcmV2aW91cyBv bmUsIGEgc2VxdWVudGlhbCBzY2FuCistLSBpcyBsZXNzIGV4cGVuc2l2ZSwgYW5kIHdlIGNob29z ZSBhIHN0cmFpZ2h0Zm9yd2FyZCBTZW1pIEpvaW4gcGxhbiBieQorLS0gZGVmYXVsdC4gKE5vdGUg dGhhdCB0aGlzIGlzIGFsc28gdmVyeSBzZW5zaXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgSU4K Ky0tIGxpc3QsIHdoaWNoIGFmZmVjdHMgaG93IG1hbnkgaW5kZXggbG9va3VwcyB0aGUgYWx0ZXJu YXRpdmUgcGxhbiB3aWxsIG5lZWQuKQorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgx LCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBIYXNoIFNlbWkgSm9pbgorICAgSGFzaCBDb25kOiAoKHNqX25hcnJvdy5pZCA9ICIqVkFM VUVTKiIuY29sdW1uMSkgQU5EIChzal9uYXJyb3cudmFsMSA9ICIqVkFMVUVTKiIuY29sdW1uMikp CisgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKHNqX25hcnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIp CisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVT KiIpCisgICBOT19HQVRIRVIoc2pfbmFycm93ICIqVkFMVUVTKiIpCisoMTEgcm93cykKKworLS0g SGVyZSwgd2UgZXhwZWN0IGFkdmlzaW5nIGEgdW5pcXVlIHNlbWlqb2luIHRvIHN3aXRoIHRvIHRo ZSBzYW1lIHBsYW4gdGhhdAorLS0gd2UgZ290IHdpdGggc2pfd2lkZSwgYW5kIGFkdmlzaW5nIGEg bm9uLXVuaXF1ZSBzZW1pam9pbiBzaG91bGQgbm90IGNoYW5nZQorLS0gdGhlIHBsYW4uCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIq VkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAy KSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBK b2luCisgICBIYXNoIENvbmQ6ICgoc2pfbmFycm93LmlkID0gIipWQUxVRVMqIi5jb2x1bW4xKSBB TkQgKHNqX25hcnJvdy52YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBzal9uYXJyb3cKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFMVUVTKiIu Y29sdW1uMgorICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRSgiKlZBTFVFUyoiKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJy b3cgIipWQUxVRVMqIikKKyAgIEhBU0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pf bmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pf bmFycm93ICIqVkFMVUVTKiIpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChp ZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1 KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDog KChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEg PSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJv dyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFfU0NBTihzal9u YXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIo c2pfbmFycm93ICIqVkFMVUVTKiIpCisoMTMgcm93cykKKworQ09NTUlUOworLS0gSW4gdGhlIGFi b3ZlIGV4YW1wbGUsIHdlIG1hZGUgdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlLCBi dXQgaGVyZSwKKy0tIHdlIHNob3VsZCBtYWtlIHRoZSBpbm5lciBzaWRlIHVuaXF1ZS4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7 CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25k OiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0 ZV9zZXJpZXMgZworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gc2pfbmFycm93CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihnIHNqX25hcnJvdykKKyAgIEhBU0hfSk9JTihzal9uYXJyb3cpCisgICBTRVFfU0NBTihz al9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcg c2pfbmFycm93KQorKDEzIHJvd3MpCisKKy0tIFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIGEg cGxhbiB3aXRoIG9yIHdpdGhvdXQgdGhlIG1ha2UtdW5pcXVlIHN0cmF0ZWd5LAorLS0gd2l0aCBl aXRoZXIgc2lkZSBhcyB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOwor ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENv bmQ6IChnLmcgPSBzal9uYXJyb3cudmFsMSkKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVy YXRlX3NlcmllcyBnCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlK T0lOX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGcgc2pfbmFycm93KQorICAgSEFTSF9KT0lOKHNqX25hcnJvdykK KyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisg ICBOT19HQVRIRVIoZyBzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsK KyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpv aW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9u IFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gc2pfbmFycm93CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9O T05fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQor ICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cp CisgICBOT19HQVRIRVIoZyBzal9uYXJyb3cpCisoMTMgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93KSBqb2luX29yZGVy KHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2 YWwxIGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChzal9uYXJyb3cudmFsMSA9IGcuZykK KyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwx CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyAg IEpPSU5fT1JERVIoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgZykKKyAgIEhBU0hfSk9JTihnKQorICAgU0VR X1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dB VEhFUihnIHNqX25hcnJvdykKKygxNiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSBqb2luX29yZGVyKHNqX25h cnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZy b20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSGFzaCBSaWdodCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKHNqX25hcnJvdy52YWwxID0g Zy5nKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAg IC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLwor ICAgSk9JTl9PUkRFUihzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyBnKQorICAgSEFTSF9KT0lOKGcpCisgICBT RVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25hcnJvdykKKyAg IE5PX0dBVEhFUihnIHNqX25hcnJvdykKKygxNCByb3dzKQorCitDT01NSVQ7CistLSBIb3dldmVy LCBtZW50aW9uaW5nIHRoZSB3cm9uZyBzaWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQgaW4g YW4gYWR2aWNlCistLSBmYWlsdXJlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hF UkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2lu IEZpbHRlcjogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBzal9uYXJyb3cKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUoZykgLyogbWF0Y2hlZCwg ZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJy b3cgZykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisg ICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQor KDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5f bm9uX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0 IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVy OiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg R3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25h cnJvdworICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoZykgLyogbWF0Y2hlZCwgZmFp bGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cg ZykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBT RU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQorKDE1 IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNlLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJy b3cpIHNlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisg ICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJv dy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAg S2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25h cnJvdworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJv dykgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoc2pf bmFycm93KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHNqX25hcnJvdykKKyAgIEhBU0hfSk9JTihzal9u YXJyb3cpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFy cm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0t IFRyeSBhcHBseWluZyBTRU1JSk9JTl9VTklRVUUoKSB0byBhIG5vbi1zZW1pam9pbi4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoZykn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMCkgZywgc2pfbmFycm93IHMgV0hFUkUgZyA9IHMudmFsMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAocy52YWwxID0gZy5nKQorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgc2pfbmFycm93X3ZhbDFfaWR4IG9uIHNqX25hcnJvdyBzCisgICAtPiAgU29y dAorICAgICAgICAgU29ydCBLZXk6IGcuZworICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24g Z2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VO SVFVRShnKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocyBnKQorICAgTUVSR0VfSk9JTl9QTEFJTihnKQor ICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zal9uYXJyb3dfdmFsMV9pZHgpCisgICBOT19HQVRIRVIo ZyBzKQorKDEzIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvc3ludGF4Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmU2 MTQwMmI1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3N5bnRheC5vdXQKQEAgLTAsMCArMSwxOTIgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsK Ky0tIEFuIGVtcHR5IHN0cmluZyBpcyBhbGxvd2VkLiBFbXB0eSB0YXJnZXQgbGlzdHMgYXJlIGFs bG93ZWQgZm9yIG1vc3QgYWR2aWNlCistLSB0YWdzLCBidXQgbm90IGZvciBKT0lOX09SREVSLiAi U3VwcGxpZWQgUGxhbiBBZHZpY2UiIHNob3VsZCBiZSBvbWl0dGVkIGluCistLSB0ZXh0IGZvcm1h dCB3aGVuIHRoZXJlIGlzIG5vIGFjdHVhbCBhZHZpY2UsIGJ1dCBub3QgaW4gbm9uLXRleHQgZm9y bWF0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcnOworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cp CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKSc7CitFWFBMQUlOIChD T1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQK KygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJ TigpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgRk9STUFUIEpTT04pIFNFTEVDVCAxOworICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICsKKyAgICAgIlBsYW4iOiB7ICAgICAgICAgICAgICAgICArCisgICAgICAg Ik5vZGUgVHlwZSI6ICJSZXN1bHQiLCAgKworICAgICAgICJQYXJhbGxlbCBBd2FyZSI6IGZhbHNl LCsKKyAgICAgICAiQXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCArCisgICAgICAgIkRpc2FibGVkIjog ZmFsc2UgICAgICAgKworICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgIlN1 cHBsaWVkIFBsYW4gQWR2aWNlIjogIiIrCisgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg KworIF0KKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVS KCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNl LmFkdmljZSI6ICJKT0lOX09SREVSKCkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNl OiBKT0lOX09SREVSIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgdGFyZ2V0IGF0IG9yIG5lYXIgIiki CistLSBUZXN0IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24sIHdoaXRlc3Bh Y2UsIGFuZCB3aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZpZXIgYXJlIGlu Y2x1ZGVkLiBUaGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHgpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCkgLyog bm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn c2VxX3NjYW4oeEB5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4QHkp IC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o eCMyKSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTiAoeC95KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOwor ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTih4L3kpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4L3kueikgLyogbm90IG1hdGNoZWQgKi8KKygzIHJv d3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6 IkAidCIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KHgjMi95LnpAdCkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKKy0tIFN5bnRheCBlcnJv cnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NBTih4KSc7CitF UlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNl IjogIlNFUVVFTlRJQUxfU0NBTih4KSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6 IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICJTRVFVRU5USUFMX1NDQU4iCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFy YW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4iCitERVRBSUw6ICBDb3Vs ZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCc7CitFUlJPUjogIGludmFsaWQgdmFsdWUg Zm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIKK0RFVEFJ TDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBlbmQgb2YgaW5wdXQK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIic7CitFUlJPUjogIGludmFs aWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FO KCIiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgcXVvdGVk IGlkZW50aWZpZXIgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKCIiKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdf cGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIiKSIKK0RFVEFJTDogIENvdWxkIG5vdCBw YXJzZSBhZHZpY2U6IHplcm8tbGVuZ3RoIGRlbGltaXRlZCBpZGVudGlmaWVyIGF0IG9yIG5lYXIg IiIiCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJhIic7CitFUlJPUjog IGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNF UV9TQ0FOKCJhIiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJv ciBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o Iyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2Uu YWR2aWNlIjogIlNFUV9TQ0FOKCMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBz eW50YXggZXJyb3IgYXQgb3IgbmVhciAiIyIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn KCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNl LmFkdmljZSI6ICIoKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBl cnJvciBhdCBvciBuZWFyICIoIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcxMjMnOwor RVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmlj ZSI6ICIxMjMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3Ig YXQgb3IgbmVhciAiMTIzIgorLS0gVGFncyBsaWtlIFNFUV9TQ0FOIGFuZCBOT19HQVRIRVIgZG9u J3QgYWxsb3cgc3VibGlzdHMgYXQgYWxsOyBvdGhlciB0YWdzLAorLS0gZXhjZXB0IGZvciBKT0lO X09SREVSLCBhbGxvdyBhdCBtb3N0IG9uZSBsZXZlbCBvZiBzdWJsaXN0LiBIZW5jZSwgdGhlc2UK Ky0tIGV4YW1wbGVzIHNob3VsZCBlcnJvciBvdXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKCh4KSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIg InBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigoeCkpIgorREVUQUlMOiAgQ291bGQg bm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0dBVEhFUigoKHgpKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVl IGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJHQVRIRVIoKCh4KSkpIgor REVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIg IigiCistLSBMZWdhbCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyoq Lyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0t LS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdI QVNIX0pPSU4oXykvKioqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKF8p IC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIEhBU0hfSk9JTih5KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTih5Ly8qeCoveikn OworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVz dWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeS96KSAvKiBub3QgbWF0 Y2hlZCAqLworKDMgcm93cykKKworLS0gVW50ZXJtaW5hdGVkIGNvbW1lbnRzLgorU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICcvKic7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFt ZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIi8qIgorREVUQUlMOiAgQ291bGQgbm90IHBh cnNlIGFkdmljZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMnOworRVJST1I6 ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJK T0lOX09SREVSKCJmT08iKSAvKiBvb3BzIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmlj ZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0CistLSBOZXN0ZWQgY29tbWVu dHMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNvIHRoZSBmaXJzdCBvZiB0aGVzZSBpcyBsZWdhbCBhbmQK Ky0tIHRoZSBzZWNvbmQgaXMgbm90LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKi8q Lyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0t LS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcv Ki8qIHN0dWZmICovKi8nOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBn X3BsYW5fYWR2aWNlLmFkdmljZSI6ICIvKi8qIHN0dWZmICovKi8iCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKiIKKy0tIEZvcmVpZ24g am9pbiByZXF1aXJlcyBtdWx0aXBsZSByZWxhdGlvbiBpZGVudGlmaWVycy4KK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKGEpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1 ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiRk9SRUlHTl9KT0lOKGEp IgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogRk9SRUlHTl9KT0lOIHRhcmdldHMg bXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaWRlbnRpZmllciBhdCBvciBuZWFy ICIpIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CitF UlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNl IjogIkZPUkVJR05fSk9JTigoYSkpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTog Rk9SRUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24g aWRlbnRpZmllciBhdCBvciBuZWFyICIpIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY3MjI5ZGRkY2VmCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCwwICsx LDc5IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorCitwZ19wbGFuX2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19w bGFuX2FkdmljZS5jJywKKyAgJ3BncGFfYXN0LmMnLAorICAncGdwYV9jb2xsZWN0b3IuYycsCisg ICdwZ3BhX2lkZW50aWZpZXIuYycsCisgICdwZ3BhX2pvaW4uYycsCisgICdwZ3BhX291dHB1dC5j JywKKyAgJ3BncGFfcGxhbm5lci5jJywKKyAgJ3BncGFfc2Nhbi5jJywKKyAgJ3BncGFfdHJvdmUu YycsCisgICdwZ3BhX3dhbGtlci5jJywKKykKKworcGdwYV9zY2FubmVyID0gY3VzdG9tX3Rhcmdl dCgncGdwYV9zY2FubmVyJywKKyAgaW5wdXQ6ICdwZ3BhX3NjYW5uZXIubCcsCisgIG91dHB1dDog J3BncGFfc2Nhbm5lci5jJywKKyAgY29tbWFuZDogZmxleF9jbWQsCispCitnZW5lcmF0ZWRfc291 cmNlcyArPSBwZ3BhX3NjYW5uZXIKK3BnX3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcGdwYV9zY2Fu bmVyCisKK3BncGFfcGFyc2VyID0gY3VzdG9tX3RhcmdldCgncGdwYV9wYXJzZXInLAorICBpbnB1 dDogJ3BncGFfcGFyc2VyLnknLAorICBrd2FyZ3M6IGJpc29uX2t3LAorKQorZ2VuZXJhdGVkX3Nv dXJjZXMgKz0gcGdwYV9wYXJzZXIudG9fbGlzdCgpCitwZ19wbGFuX2FkdmljZV9zb3VyY2VzICs9 IHBncGFfcGFyc2VyCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19wbGFuX2Fk dmljZV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJn czogWworICAgICctLU5BTUUnLCAncGdfcGxhbl9hZHZpY2UnLAorICAgICctLUZJTEVERVNDJywg J3BnX3BsYW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4nLF0p CitlbmRpZgorCitwZ19wbGFuX2FkdmljZV9pbmMgPSBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJykK KworcGdfcGxhbl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCdwZ19wbGFuX2FkdmljZScsCisgIHBn X3BsYW5fYWR2aWNlX3NvdXJjZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IHBnX3BsYW5fYWR2 aWNlX2luYywKKyAga3dhcmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRz ICs9IHBnX3BsYW5fYWR2aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNlLS0x LjAuc3FsJywKKyAgJ3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJf ZGF0YV9hcmdzLAorKQorCitpbnN0YWxsX2hlYWRlcnMoCisgICdwZ19wbGFuX2FkdmljZS5oJywK KyAgaW5zdGFsbF9kaXI6IGRpcl9pbmNsdWRlX2V4dGVuc2lvbiAvICdwZ19wbGFuX2FkdmljZScs CispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAncGdfcGxhbl9hZHZpY2UnLAorICAnc2QnOiBt ZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9k aXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICdnYXRoZXInLAorICAg ICAgJ2pvaW5fb3JkZXInLAorICAgICAgJ2pvaW5fc3RyYXRlZ3knLAorICAgICAgJ2xvY2FsX2Nv bGxlY3RvcicsCisgICAgICAncGFydGl0aW9ud2lzZScsCisgICAgICAncHJlcGFyZWQnLAorICAg ICAgJ3NjYW4nLAorICAgICAgJ3NlbWlqb2luJywKKyAgICAgICdzeW50YXgnLAorICAgIF0sCisg IH0sCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX3JlZ3Jlc3MucGwn LAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn X3BsYW5fYWR2aWNlLS0xLjAuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fk dmljZS0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDUw YzQyMDQwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3Bs YW5fYWR2aWNlLS0xLjAuc3FsCkBAIC0wLDAgKzEsNDMgQEAKKy8qIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0 IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xl Y2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19wbGFuX2FkdmljZSIgdG8gbG9hZCB0aGlzIGZp bGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9jb2xs ZWN0ZWRfbG9jYWxfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElP TiBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpCitSRVRVUk5TIHZvaWQKK0FTICdN T0RVTEVfUEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UnCitMQU5H VUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBvaWQsCisJT1VUIGRiaWQgb2lk LAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlPVVQgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6 LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAorKQorUkVUVVJOUyBTRVRPRiBy ZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZp Y2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2dldF9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1c2VyaWQgb2lkLAorCU9V VCBkYmlkIG9pZCwKKwlPVVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNvbGxlY3Rpb25fdGltZSB0 aW1lc3RhbXB0eiwKKwlPVVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNlIHRleHQKKykKK1JFVFVS TlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9jb2xsZWN0ZWRf c2hhcmVkX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitSRVZPS0UgQUxMIE9OIEZVTkNU SU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJMSUM7CitSRVZP S0UgQUxMIE9OIEZVTkNUSU9OIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIEZST00g UFVCTElDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fkdmlj ZS5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45OWI5Nzg0Mzk5MQotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwpAQCAtMCwwICsxLDU2 MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfcGxhbl9hZHZpY2UuYworICoJICBt YWluIGVudHJ5cG9pbnRzIGZvciBnZW5lcmF0aW5nIGFuZCBhcHBseWluZyBwbGFubmVyIGFkdmlj ZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fk dmljZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgor I2luY2x1ZGUgInBncGFfY29sbGVjdG9yLmgiCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgi CisjaW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3BsYW5uZXIuaCIKKyNp bmNsdWRlICJwZ3BhX3Ryb3ZlLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1 ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKKyNp bmNsdWRlICJjb21tYW5kcy9leHBsYWluX2Zvcm1hdC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4 cGxhaW5fc3RhdGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAib3B0aW1pemVy L3BsYW5uZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgorI2luY2x1ZGUg InV0aWxzL2d1Yy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK3N0YXRpYyBwZ3BhX3NoYXJlZF9z dGF0ZSAqcGdwYV9zdGF0ZSA9IE5VTEw7CitzdGF0aWMgZHNhX2FyZWEgKnBncGFfZHNhX2FyZWEg PSBOVUxMOworc3RhdGljIExpc3QgKmFkdmlzb3JfaG9va19saXN0ID0gTklMOworCisvKiBHVUMg dmFyaWFibGVzICovCitjaGFyCSAgICpwZ19wbGFuX2FkdmljZV9hZHZpY2UgPSBOVUxMOworYm9v bAkJcGdfcGxhbl9hZHZpY2VfYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7Citz dGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2Ug PSB0cnVlOworYm9vbAkJcGdfcGxhbl9hZHZpY2VfZmVlZGJhY2tfd2FybmluZ3MgPSBmYWxzZTsK K2Jvb2wJCXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvciA9IGZhbHNlOworaW50CQkJcGdf cGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDA7Citib29sCQlwZ19wbGFuX2Fk dmljZV9zaGFyZWRfY29sbGVjdG9yID0gZmFsc2U7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9zaGFy ZWRfY29sbGVjdGlvbl9saW1pdCA9IDA7Citib29sCQlwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNr ID0gZmFsc2U7CisKKy8qIFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBsYWluX3Blcl9w bGFuX2hvb2tfdHlwZSBwcmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisvKiBPdGhlciBm aWxlLWxldmVsIGdsb2JhbHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lkOworc3RhdGlj IE1lbW9yeUNvbnRleHQgcGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0YXRpYyB2b2lk IHBncGFfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICphcmcpOworc3RhdGljIHZv aWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVz LAorCQkJCQkJCQkJCQkJICBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkJCQkgIFBhcnNlU3RhdGUg KnBzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFuX2hv b2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJCQkJIEludG9DbGF1c2UgKmlu dG8sCisJCQkJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJ CQkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CitzdGF0aWMgYm9vbCBwZ19w bGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEs CisJCQkJCQkJCQkJCSBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5kX2Rl ZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoKKyAq IEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJ RGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJCQkJ CQkJICAgImFkdmljZSB0byBhcHBseSBkdXJpbmcgcXVlcnkgcGxhbm5pbmciLAorCQkJCQkJCSAg IE5VTEwsCisJCQkJCQkJICAgJnBnX3BsYW5fYWR2aWNlX2FkdmljZSwKKwkJCQkJCQkgICBOVUxM LAorCQkJCQkJCSAgIFBHQ19VU0VSU0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgcGdfcGxh bl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2ssCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBO VUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UuYWx3YXlz X2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIiwKKwkJCQkJCQkgIkVYUExBSU4gb3V0cHV0IGluY2x1 ZGVzIHN1cHBsaWVkIGFkdmljZSBldmVuIHdpdGhvdXQgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIiwK KwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1 cHBsaWVkX2FkdmljZSwKKwkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJ CQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJ RGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2 aWNlX2RldGFpbHMiLAorCQkJCQkJCSAiR2VuZXJhdGUgYWR2aWNlIHN0cmluZ3MgZXZlbiB3aGVu IHNlZW1pbmdseSBub3QgcmVxdWlyZWQiLAorCQkJCQkJCSAiVXNlIHRoaXMgb3B0aW9uIHRvIHNl ZSBnZW5lcmF0ZWQgYWR2aWNlIGZvciBwcmVwYXJlZCBxdWVyaWVzLiIsCisJCQkJCQkJICZwZ19w bGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMsCisJCQkJCQkJIGZhbHNlLAor CQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkg TlVMTCwKKwkJCQkJCQkgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3Bs YW5fYWR2aWNlLmZlZWRiYWNrX3dhcm5pbmdzIiwKKwkJCQkJCQkgIldhcm4gd2hlbiBzdXBwbGll ZCBhZHZpY2UgZG9lcyBub3QgYXBwbHkgY2xlYW5seSIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJ ICZwZ19wbGFuX2FkdmljZV9mZWVkYmFja193YXJuaW5ncywKKwkJCQkJCQkgZmFsc2UsCisJCQkJ CQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxM LAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9h ZHZpY2UubG9jYWxfY29sbGVjdG9yIiwKKwkJCQkJCQkgIkVuYWJsZSB0aGUgbG9jYWwgYWR2aWNl IGNvbGxlY3Rvci4iLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2VfbG9j YWxfY29sbGVjdG9yLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJ CQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJ RGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25f bGltaXQiLAorCQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBwZXItYmFj a2VuZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2aWNlX2xvY2Fs X2NvbGxlY3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJ CVBHQ19VU0VSU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCU5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5z aGFyZWRfY29sbGVjdG9yIiwKKwkJCQkJCQkgIkVuYWJsZSB0aGUgc2hhcmVkIGFkdmljZSBjb2xs ZWN0b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX3NoYXJlZF9j b2xsZWN0b3IsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJIDAs CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5l Q3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0 IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gc2hhcmVkIG1lbW9y eSIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkmcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rp b25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19TVVNF VCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsK KworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UudHJhY2VfbWFzayIs CisJCQkJCQkJICJFbWl0IGRlYnVnZ2luZyBtZXNzYWdlcyBzaG93aW5nIHRoZSBjb21wdXRlZCBz dHJhdGVneSBtYXNrIGZvciBlYWNoIHJlbGF0aW9uIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkg JnBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2ssCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0Nf VVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJ CQkgTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3BsYW5fYWR2aWNlIik7CisK KwkvKiBHZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhY2hlIGRhdGEgaW4gYW4gRXhwbGFp blN0YXRlLiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdldEV4cGxhaW5FeHRlbnNpb25JZCgicGdf cGxhbl9hZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXcgRVhQTEFJTiBvcHRpb25zIGlt cGxlbWVudGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJlZ2lzdGVyRXh0ZW5zaW9uRXhwbGFpbk9w dGlvbigicGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9leHBsYWluX29w dGlvbl9oYW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9va3MgKi8KKwlwZ3BhX3BsYW5uZXJfaW5z dGFsbF9ob29rcygpOworCXByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IGV4cGxhaW5fcGVyX3BsYW5f aG9vazsKKwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Bl cl9wbGFuX2hvb2s7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBzdGF0ZSB3aGVuIGZp cnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfc2hhcmVkX3N0YXRlKHZv aWQgKnB0ciwgdm9pZCAqYXJnKQoreworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IChwZ3Bh X3NoYXJlZF9zdGF0ZSAqKSBwdHI7CisKKwlMV0xvY2tJbml0aWFsaXplKCZzdGF0ZS0+bG9jaywg TFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19wbGFuX2FkdmljZV9sb2NrIikpOworCXN0YXRlLT5kc2Ff dHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2VfZHNhIik7CisJc3Rh dGUtPmFyZWEgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3Ig PSBJbnZhbGlkRHNhUG9pbnRlcjsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gYSBt ZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFuYWdlZCBieSB0aGlzCisgKiBt b2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4dAorcGdfcGxhbl9hZHZpY2Vf Z2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdwYV9tZW1vcnlfY29udGV4dCA9PSBOVUxMKQorCQlw Z3BhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRl eHQsCisJCQkJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIiwKKwkJCQkJCQkJCQkJCQlBTExPQ1NF VF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ3BhX21lbW9yeV9jb250ZXh0OworfQorCisv KgorICogR2V0IGEgcG9pbnRlciB0byBvdXIgc2hhcmVkIHN0YXRlLgorICoKKyAqIElmIG5vIHNo YXJlZCBzdGF0ZSBleGlzdHMsIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBpdC4gSWYgaXQgZG9lcyBl eGlzdCBidXQKKyAqIHRoaXMgYmFja2VuZCBoYXMgbm90IHlldCBhY2Nlc3NlZCBpdCwgYXR0YWNo IHRvIGl0LiBPdGhlcndpc2UsIGp1c3QgcmV0dXJuCisgKiBvdXIgY2FjaGVkIHBvaW50ZXIuCisg KgorICogQWxvbmcgdGhlIHdheSwgbWFrZSBzdXJlIHRoZSByZWxldmFudCBMV0xvY2sgdHJhbmNo ZXMgYXJlIHJlZ2lzdGVyZWQuCisgKi8KK3BncGFfc2hhcmVkX3N0YXRlICoKK3BnX3BsYW5fYWR2 aWNlX2F0dGFjaCh2b2lkKQoreworCWlmIChwZ3BhX3N0YXRlID09IE5VTEwpCisJeworCQlib29s CQlmb3VuZDsKKworCQlwZ3BhX3N0YXRlID0KKwkJCUdldE5hbWVkRFNNU2VnbWVudCgicGdfcGxh bl9hZHZpY2UiLCBzaXplb2YocGdwYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCSAgIHBncGFfaW5p dF9zaGFyZWRfc3RhdGUsICZmb3VuZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHBncGFfc3RhdGU7 Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHBnX3BsYW5fYWR2aWNlJ3MgRFNBIGFy ZWEsIGNyZWF0aW5nIGl0IGlmIG5lZWRlZC4KKyAqLworZHNhX2FyZWEgKgorcGdfcGxhbl9hZHZp Y2VfZHNhX2FyZWEodm9pZCkKK3sKKwlpZiAocGdwYV9kc2FfYXJlYSA9PSBOVUxMKQorCXsKKwkJ cGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJCWRz YV9oYW5kbGUJYXJlYV9oYW5kbGU7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCQlv bGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0 KCkpOworCisJCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCQlh cmVhX2hhbmRsZSA9IHN0YXRlLT5hcmVhOworCQlpZiAoYXJlYV9oYW5kbGUgPT0gRFNBX0hBTkRM RV9JTlZBTElEKQorCQl7CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2NyZWF0ZShzdGF0ZS0+ZHNh X3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ3BhX2RzYV9hcmVhKTsKKwkJCXN0YXRlLT5hcmVhID0g ZHNhX2dldF9oYW5kbGUocGdwYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+ bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7 CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVhX2hhbmRsZSk7CisJCX0KKworCQlk c2FfcGluX21hcHBpbmcocGdwYV9kc2FfYXJlYSk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOworCX0KKworCXJldHVybiBwZ3BhX2RzYV9hcmVhOworfQorCisvKgorICog V2FzIHRoZSBQTEFOX0FEVklDRSBvcHRpb24gc3BlY2lmaWVkIGFuZCBub3Qgc2V0IHRvIGZhbHNl PworICovCitib29sCitwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihFeHBsYWluU3RhdGUg KmVzKQoreworCWJvb2wJICAgKnBsYW5fYWR2aWNlID0gTlVMTDsKKworCWlmIChlcyAhPSBOVUxM KQorCQlwbGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5z aW9uX2lkKTsKKwlyZXR1cm4gcGxhbl9hZHZpY2UgIT0gTlVMTCAmJiAqcGxhbl9hZHZpY2U7Cit9 CisKKy8qCisgKiBHZXQgdGhlIGFkdmljZSB0aGF0IHNob3VsZCBiZSB1c2VkIHdoaWxlIHBsYW5u aW5nIGEgcGFydGljdWxhciBxdWVyeS4KKyAqLworY2hhciAqCitwZ19wbGFuX2FkdmljZV9nZXRf c3VwcGxpZWRfcXVlcnlfYWR2aWNlKFBsYW5uZXJHbG9iYWwgKmdsb2IsCisJCQkJCQkJCQkJIFF1 ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJ CQkJCSBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcykKK3sK KwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogSWYgYW55IGFkdmlzb3JzIGFyZSBsb2FkZWQs IGNvbnN1bHQgdGhlbS4gVGhlIGZpcnN0IG9uZSB0aGF0IHByb2R1Y2VzIGEKKwkgKiBub24tTlVM TCBzdHJpbmcgd2lucy4KKwkgKi8KKwlmb3JlYWNoKGxjLCBhZHZpc29yX2hvb2tfbGlzdCkKKwl7 CisJCXBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9vayBob29rID0gbGZpcnN0KGxjKTsKKwkJY2hh cgkgICAqYWR2aWNlX3N0cmluZzsKKworCQlhZHZpY2Vfc3RyaW5nID0gKCpob29rKSAoZ2xvYiwg cGFyc2UsIHF1ZXJ5X3N0cmluZywgY3Vyc29yT3B0aW9ucywgZXMpOworCQlpZiAoYWR2aWNlX3N0 cmluZyAhPSBOVUxMKQorCQkJcmV0dXJuIGFkdmljZV9zdHJpbmc7CisJfQorCisJLyogT3RoZXJ3 aXNlLCBqdXN0IHVzZSB0aGUgdmFsdWUgb2YgdGhlIEdVQy4gKi8KKwlyZXR1cm4gcGdfcGxhbl9h ZHZpY2VfYWR2aWNlOworfQorCisvKgorICogQWRkIGFuIGFkdmlzb3IsIHdoaWNoIGNhbiBzdXBw bHkgYWR2aWNlIHN0cmluZ3MgdG8gYmUgdXNlZCBkdXJpbmcgZnV0dXJlCisgKiBxdWVyeSBwbGFu bmluZyBvcGVyYXRpb25zLgorICoKKyAqIFRoZSBhZHZpc29yIHNob3VsZCByZXR1cm4gTlVMTCBp ZiBpdCBoYXMgbm8gYWR2aWNlIHN0cmluZyB0byBvZmZlciBmb3IgYQorICogZ2l2ZW4gcXVlcnku IElmIG11bHRpcGxlIGFkdmlzb3JzIGFyZSBhZGRlZCwgdGhleSB3aWxsIGJlIGNvbnN1bHRlZCBp biB0aGUKKyAqIG9yZGVyIGFkZGVkIHVudGlsIG9uZSBvZiB0aGVtIHJldHVybnMgYSBub24tTlVM TCB2YWx1ZS4KKyAqLwordm9pZAorcGdfcGxhbl9hZHZpY2VfYWRkX2Fkdmlzb3IocGdfcGxhbl9h ZHZpY2VfYWR2aXNvcl9ob29rIGhvb2spCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0Owor CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRf bWN4dCgpKTsKKwlhZHZpc29yX2hvb2tfbGlzdCA9IGxhcHBlbmQoYWR2aXNvcl9ob29rX2xpc3Qs IGhvb2spOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKKyAq IFJlbW92ZSBhbiBhZHZpc29yLgorICovCit2b2lkCitwZ19wbGFuX2FkdmljZV9yZW1vdmVfYWR2 aXNvcihwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vaykKK3sKKwlNZW1vcnlDb250ZXh0 IG9sZGNvbnRleHQ7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX3Bs YW5fYWR2aWNlX2dldF9tY3h0KCkpOworCWFkdmlzb3JfaG9va19saXN0ID0gbGlzdF9kZWxldGVf cHRyKGFkdmlzb3JfaG9va19saXN0LCBob29rKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7Cit9CisKKy8qCisgKiBIYW5kbGVyIGZvciBFWFBMQUlOIChQTEFOX0FEVklDRSku CisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9oYW5kbGVy KEV4cGxhaW5TdGF0ZSAqZXMsIERlZkVsZW0gKm9wdCwKKwkJCQkJCQkJCSAgUGFyc2VTdGF0ZSAq cHN0YXRlKQoreworCWJvb2wJICAgKnBsYW5fYWR2aWNlOworCisJcGxhbl9hZHZpY2UgPSBHZXRF eHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisKKwlpZiAocGxhbl9h ZHZpY2UgPT0gTlVMTCkKKwl7CisJCXBsYW5fYWR2aWNlID0gcGFsbG9jMF9vYmplY3QoYm9vbCk7 CisJCVNldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkLCBwbGFuX2Fk dmljZSk7CisJfQorCisJKnBsYW5fYWR2aWNlID0gZGVmR2V0Qm9vbGVhbihvcHQpOworfQorCisv KgorICogRGlzcGxheSBhIHN0cmluZyB0aGF0IGlzIGxpa2VseSB0byBjb25zaXN0IG9mIG11bHRp cGxlIGxpbmVzIGluIEVYUExBSU4KKyAqIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQKK3BnX3Bs YW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoRXhwbGFpblN0YXRlICplcywgY2hhciAq cWxhYmVsLAorCQkJCQkJCQkJICBjaGFyICp2YWx1ZSkKK3sKKwljaGFyCSAgICpzOworCisJLyog Rm9yIG5vbi10ZXh0IGZvcm1hdHMsIGl0J3MgYmVzdCBub3QgdG8gYWRkIGFueSBzcGVjaWFsIGhh bmRsaW5nLiAqLworCWlmIChlcy0+Zm9ybWF0ICE9IEVYUExBSU5fRk9STUFUX1RFWFQpCisJewor CQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgdmFsdWUsIGVzKTsKKwkJcmV0dXJuOworCX0K KworCS8qIEluIHRleHQgZm9ybWF0LCBpZiB0aGVyZSBpcyBubyBkYXRhLCBkaXNwbGF5IG5vdGhp bmcuICovCisJaWYgKCp2YWx1ZSA9PSAnXDAnKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEl0IGxv b2tzIG5pY2VzdCB0byBpbmRlbnQgZWFjaCBsaW5lIG9mIHRoZSBhZHZpY2Ugc2VwYXJhdGVseSwg YmVnaW5uaW5nCisJICogb24gdGhlIGxpbmUgYmVsb3cgdGhlIGxhYmVsLgorCSAqLworCUV4cGxh aW5JbmRlbnRUZXh0KGVzKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIlczpcbiIsIHFs YWJlbCk7CisJZXMtPmluZGVudCsrOworCXdoaWxlICgocyA9IHN0cmNocih2YWx1ZSwgJ1xuJykp ICE9IE5VTEwpCisJeworCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFwcGVuZEJpbmFyeVN0 cmluZ0luZm8oZXMtPnN0ciwgdmFsdWUsIChzIC0gdmFsdWUpICsgMSk7CisJCXZhbHVlID0gcyAr IDE7CisJfQorCisJLyogRG9uJ3QgaW50ZXJwcmV0IGEgdGVybWluYWwgbmV3bGluZSBhcyBhIHJl cXVlc3QgZm9yIGFuIGVtcHR5IGxpbmUuICovCisJaWYgKCp2YWx1ZSAhPSAnXDAnKQorCXsKKwkJ RXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIlc1xu IiwgdmFsdWUpOworCX0KKworCWVzLT5pbmRlbnQtLTsKK30KKworLyoKKyAqIEFkZCBhZHZpY2Ug ZmVlZGJhY2sgdG8gdGhlIEVYUExBSU4gb3V0cHV0LgorICovCitzdGF0aWMgdm9pZAorcGdfcGxh bl9hZHZpY2VfZXhwbGFpbl9mZWVkYmFjayhFeHBsYWluU3RhdGUgKmVzLCBMaXN0ICpmZWVkYmFj aykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlm b3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZmVlZGJhY2spCisJeworCQlpbnQJCQlmbGFncyA9 IGRlZkdldEludDMyKGl0ZW0pOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIC8qICIs IGl0ZW0tPmRlZm5hbWUpOworCQlwZ3BhX3Ryb3ZlX2FwcGVuZF9mbGFncygmYnVmLCBmbGFncyk7 CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiAqL1xuIik7CisJfQorCisJcGdfcGxhbl9hZHZp Y2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiwKKwkJ CQkJCQkJCQkgIGJ1Zi5kYXRhKTsKK30KKworLyoKKyAqIEFkZCByZWxldmFudCBkZXRhaWxzLCBp ZiBhbnksIHRvIHRoZSBFWFBMQUlOIG91dHB1dCBmb3IgYSBzaW5nbGUgcGxhbi4KKyAqLworc3Rh dGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9vayhQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCQkgSW50b0NsYXVzZSAqaW50bywKKwkJCQkJCQkJCSBF eHBsYWluU3RhdGUgKmVzLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJ CQkJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQg KnF1ZXJ5RW52KQoreworCWJvb2wJCXNob3VsZF9leHBsYWluOworCURlZkVsZW0gICAgKnBncGFf aXRlbTsKKwlMaXN0CSAgICpwZ3BhX2xpc3Q7CisKKwlpZiAocHJldl9leHBsYWluX3Blcl9wbGFu KQorCQlwcmV2X2V4cGxhaW5fcGVyX3BsYW4ocGxhbm5lZHN0bXQsIGludG8sIGVzLCBxdWVyeVN0 cmluZywgcGFyYW1zLAorCQkJCQkJCSAgcXVlcnlFbnYpOworCisJLyogU2hvdWxkIGFuIGFkdmlj ZSBzdHJpbmcgYmUgcGFydCBvZiB0aGUgRVhQTEFJTiBvdXRwdXQ/ICovCisJc2hvdWxkX2V4cGxh aW4gPSBwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihlcyk7CisKKwkvKiBGaW5kIGFueSBk YXRhIHBncGFfcGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGluIHRoZSBQbGFubmVkU3RtdC4gKi8K KwlwZ3BhX2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwbGFubmVkc3RtdC0+ZXh0ZW5z aW9uX3N0YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCXBncGFfbGlzdCA9IHBn cGFfaXRlbSA9PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBncGFfaXRlbS0+YXJnOworCisJLyoK KwkgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29yZCBvZiBhdHRlbXB0aW5nIHRvIGFw cGx5IGFkdmljZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmluZywgd2UgYWx3YXlzIG91dHB1dCB0 aGF0IGluZm9ybWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNldAorCSAqIHBnX3BsYW5fYWR2aWNl LmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlIHRvIHN1cHByZXNzIHRoYXQK KwkgKiBiZWhhdmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25seSBkaXNwbGF5IGl0IHdoZW4gdGhl IFBMQU5fQURWSUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8gZmFs c2UuCisJICoKKwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmluZyBhIHF1ZXJ5IHBsYW5uZWQgYmVm b3JlaGFuZCAtLSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0ZW1lbnQgLS0gdGhlIGFwcGxpY2F0 aW9uIG9mIHF1ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVlbgorCSAqIHJlY29yZGVkLCBhbmQg dGhlcmVmb3JlIHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93IGFueXRoaW5nLiBVc2UKKwkgKiBw Z19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlIHRvIHdvcmsg YXJvdW5kIHRoaXMuCisJICovCisJaWYgKHBncGFfbGlzdCAhPSBOVUxMICYmIChwZ19wbGFuX2Fk dmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgfHwKKwkJCQkJCQkgIHNob3VsZF9l eHBsYWluKSkKKwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNrOworCisJCWZlZWRiYWNrID0gZmlu ZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVlZGJhY2siKTsKKwkJaWYgKGZlZWRi YWNrICE9IE5VTEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKGVzLCAoTGlz dCAqKSBmZWVkYmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBQTEFOX0FEVklDRSBv cHRpb24gd2FzIHNwZWNpZmllZCAtLSBhbmQgbm90IHNlbnQgdG8gRkFMU0UgLS0KKwkgKiBzaG93 IGdlbmVyYXRlZCBhZHZpY2UuCisJICovCisJaWYgKHNob3VsZF9leHBsYWluKQorCXsKKwkJRGVm RWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nID0g TlVMTDsKKworCQlhZHZpY2Vfc3RyaW5nX2l0ZW0gPQorCQkJZmluZF9kZWZlbGVtX2J5X2RlZm5h bWUocGdwYV9saXN0LCAiYWR2aWNlX3N0cmluZyIpOworCQlpZiAoYWR2aWNlX3N0cmluZ19pdGVt ICE9IE5VTEwpCisJCXsKKwkJCWFkdmljZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19p dGVtLT5hcmcpOworCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywg IkdlbmVyYXRlZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcpOwor CQl9CisJfQorfQorCisvKgorICogQ2hlY2sgaG9vayBmb3IgcGdfcGxhbl9hZHZpY2UuYWR2aWNl CisgKi8KK3N0YXRpYyBib29sCitwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFy ICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJTWVtb3J5Q29u dGV4dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgdG1wY29udGV4dDsKKwljaGFyCSAgICpl cnJvcjsKKworCWlmICgqbmV3dmFsID09IE5VTEwpCisJCXJldHVybiB0cnVlOworCisJdG1wY29u dGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJ CQkJCSAgICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVG QVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjb250 ZXh0KTsKKworCS8qCisJICogSXQgd291bGQgYmUgbmljZSB0byBzYXZlIHRoZSBwYXJzZSB0cmVl IHRoYXQgd2UgY29uc3RydWN0IGhlcmUgZm9yCisJICogZXZlbnR1YWwgdXNlIHdoZW4gcGxhbm5p bmcgd2l0aCB0aGlzIGFkdmljZSwgYnV0ICpleHRyYSBjYW4gb25seSBwb2ludAorCSAqIHRvIGEg c2luZ2xlIGd1Y19tYWxsb2MnZCBjaHVuaywgYW5kIG91ciBwYXJzZSB0cmVlIGludm9sdmVzIGFu CisJICogYXJiaXRyYXJ5IG51bWJlciBvZiBtZW1vcnkgYWxsb2NhdGlvbnMuCisJICovCisJKHZv aWQpIHBncGFfcGFyc2UoKm5ld3ZhbCwgJmVycm9yKTsKKworCWlmIChlcnJvciAhPSBOVUxMKQor CXsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiQ291bGQgbm90IHBhcnNlIGFkdmljZTogJXMiLCBl cnJvcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250ZXh0KTsKKworCXJldHVybiB0 cnVlOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9yIGEg Z2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5X2Rl Zm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUoRGVm RWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwgZGVm bmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxMOworfQpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYTZmZGM5ZTdiMgotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbApAQCAtMCww ICsxLDUgQEAKKyMgcGdfcGxhbl9hZHZpY2UgZXh0ZW5zaW9uCitjb21tZW50ID0gJ2hlbHAgdGhl IHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21v ZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX3BsYW5fYWR2aWNlJworcmVsb2NhdGFibGUgPSB0 cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxZjY2MDkyZmEyCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCkBAIC0wLDAgKzEsNjEgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2aWNlLmgKKyAqCSAgbWFpbiBo ZWFkZXIgZmlsZSBmb3IgcGdfcGxhbl9hZHZpY2UgY29udHJpYiBtb2R1bGUKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAorICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1BMQU5fQURWSUNFX0gKKyNkZWZpbmUg UEdfUExBTl9BRFZJQ0VfSAorCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgor I2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5o IgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisK K3R5cGVkZWYgc3RydWN0IHBncGFfc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWlu dAkJCWRzYV90cmFuY2hlOworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRf Y29sbGVjdG9yOworfSBwZ3BhX3NoYXJlZF9zdGF0ZTsKKworLyogSG9vayBmb3Igb3RoZXIgcGx1 Z2lucyB0byBzdXBwbHkgYWR2aWNlIHN0cmluZ3MgKi8KK3R5cGVkZWYgY2hhciAqKCpwZ19wbGFu X2FkdmljZV9hZHZpc29yX2hvb2spIChQbGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJCQkJCQkg IFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJ CQkJCQkJCQkJCSAgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJCQkJCSAgRXhwbGFpblN0YXRl ICplcyk7CisKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2V4dGVybiBjaGFyICpwZ19wbGFuX2Fkdmlj ZV9hZHZpY2U7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNl X2RldGFpbHM7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9mZWVkYmFja193YXJuaW5nczsK K2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvcjsKK2V4dGVybiBpbnQJ cGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBib29sIHBnX3Bs YW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3I7CitleHRlcm4gaW50CXBnX3BsYW5fYWR2aWNlX3No YXJlZF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGJvb2wgcGdfcGxhbl9hZHZpY2VfdHJhY2Vf bWFzazsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAoZm9yIHVzZSBieSBwZ19wbGFuX2Fkdmlj ZSBpdHNlbGYpICovCitleHRlcm4gTWVtb3J5Q29udGV4dCBwZ19wbGFuX2FkdmljZV9nZXRfbWN4 dCh2b2lkKTsKK2V4dGVybiBwZ3BhX3NoYXJlZF9zdGF0ZSAqcGdfcGxhbl9hZHZpY2VfYXR0YWNo KHZvaWQpOworZXh0ZXJuIGRzYV9hcmVhICpwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSh2b2lkKTsK K2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX3Nob3VsZF9leHBsYWluKEV4cGxhaW5TdGF0ZSAq ZXMpOworZXh0ZXJuIGNoYXIgKnBnX3BsYW5fYWR2aWNlX2dldF9zdXBwbGllZF9xdWVyeV9hZHZp Y2UoUGxhbm5lckdsb2JhbCAqZ2xvYiwKKwkJCQkJCQkJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJ CQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQkgIGlu dCBjdXJzb3JPcHRpb25zLAorCQkJCQkJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CisKKy8q IEZ1bmN0aW9uIHByb3RvdHlwZXMgKGZvciB1c2UgYnkgb3RoZXIgcGx1Z2lucykgKi8KK2V4dGVy biBQR0RMTEVYUE9SVCB2b2lkIHBnX3BsYW5fYWR2aWNlX2FkZF9hZHZpc29yKHBnX3BsYW5fYWR2 aWNlX2Fkdmlzb3JfaG9vayBob29rKTsKK2V4dGVybiBQR0RMTEVYUE9SVCB2b2lkIHBnX3BsYW5f YWR2aWNlX3JlbW92ZV9hZHZpc29yKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9vayBob29rKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjg1YmQ3NDg1OWRmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCkBAIC0wLDAgKzEsMzUxIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ3BhX2FzdC5jCisgKgkgIGFkZGl0aW9uYWwgc3VwcG9ydGluZyBj b2RlIHJlbGF0ZWQgdG8gcGxhbiBhZHZpY2UgcGFyc2luZworICoKKyAqIENvcHlyaWdodCAoYykg MjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgor CisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCisjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKKworc3RhdGljIGJvb2wgcGdwYV9pZGVudGlmaWVyc19jb3Zl cl90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJCQkgIGJvb2wgKnJpZHNfdXNlZCk7 CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZp ZWQgYWR2aWNlIHRhZy4KKyAqLworY2hhciAqCitwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3Bh X2FkdmljZV90YWdfdHlwZSBhZHZpY2VfdGFnKQoreworCXN3aXRjaCAoYWR2aWNlX3RhZykKKwl7 CisJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKKwkJCXJldHVybiAiQklUTUFQX0hF QVBfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuICJGT1JF SUdOX0pPSU4iOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiAiR0FUSEVSIjsK KwkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7 CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0dXJuICJIQVNIX0pPSU4iOworCQlj YXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FO IjsKKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsK KwkJY2FzZSBQR1BBX1RBR19KT0lOX09SREVSOgorCQkJcmV0dXJuICJKT0lOX09SREVSIjsKKwkJ Y2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9K T0lOX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJ cmV0dXJuICJNRVJHRV9KT0lOX1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9N QVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUiOworCQljYXNl IFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01F TU9JWkUiOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuICJO RVNURURfTE9PUF9QTEFJTiI7CisJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0dXJu ICJOT19HQVRIRVIiOworCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4g IlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJ CQlyZXR1cm4gIlNFTUlKT0lOX05PTl9VTklRVUUiOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lO X1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19T RVFfU0NBTjoKKwkJCXJldHVybiAiU0VRX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX1RJRF9TQ0FO OgorCQkJcmV0dXJuICJUSURfU0NBTiI7CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1 cm4gTlVMTDsKK30KKworLyoKKyAqIENvbnZlcnQgYW4gYWR2aWNlIHRhZywgZm9ybWF0dGVkIGFz IGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlbgorICogZG93bmNhc2VkIGFzIGFwcHJvcHJp YXRlLCB0byBhIHBncGFfYWR2aWNlX3RhZ190eXBlLgorICoKKyAqIElmIHdlIHN1Y2NlZWQsIHNl dCAqZmFpbCA9IGZhbHNlIGFuZCByZXR1cm4gdGhlIHJlc3VsdDsgaWYgd2UgZmFpbCwKKyAqIHNl dCAqZmFpbCA9IHRydWUgYW5kIHJldXJuIGFuIGFyYml0cmFyeSB2YWx1ZS4KKyAqLworcGdwYV9h ZHZpY2VfdGFnX3R5cGUKK3BncGFfcGFyc2VfYWR2aWNlX3RhZyhjb25zdCBjaGFyICp0YWcsIGJv b2wgKmZhaWwpCit7CisJKmZhaWwgPSBmYWxzZTsKKworCXN3aXRjaCAodGFnWzBdKQorCXsKKwkJ Y2FzZSAnYic6CisJCQlpZiAoc3RyY21wKHRhZywgImJpdG1hcF9oZWFwX3NjYW4iKSA9PSAwKQor CQkJCXJldHVybiBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2Ug J2YnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJmb3JlaWduX2pvaW4iKSA9PSAwKQorCQkJCXJldHVy biBQR1BBX1RBR19GT1JFSUdOX0pPSU47CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlpZiAo c3RyY21wKHRhZywgImdhdGhlciIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUjsK KwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0aGVyX21lcmdlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQ QV9UQUdfR0FUSEVSX01FUkdFOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJaWYgKHN0cmNt cCh0YWcsICJoYXNoX2pvaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19IQVNIX0pPSU47 CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X3NjYW4i KSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19JTkRFWF9TQ0FOOworCQkJaWYgKHN0cmNtcCh0 YWcsICJpbmRleF9vbmx5X3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19JTkRFWF9P TkxZX1NDQU47CisJCQlicmVhazsKKwkJY2FzZSAnaic6CisJCQlpZiAoc3RyY21wKHRhZywgImpv aW5fb3JkZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19KT0lOX09SREVSOworCQkJYnJl YWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKHN0cmNtcCh0YWcsICJtZXJnZV9qb2luX21hdGVyaWFs aXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRTsK KwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9wbGFpbiIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU47CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQlp ZiAoc3RyY21wKHRhZywgIm5lc3RlZF9sb29wX21hdGVyaWFsaXplIikgPT0gMCkKKwkJCQlyZXR1 cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRhZywg Im5lc3RlZF9sb29wX21lbW9pemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURf TE9PUF9NRU1PSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9wbGFpbiIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOworCQkJaWYgKHN0cmNt cCh0YWcsICJub19nYXRoZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19HQVRIRVI7 CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlpZiAoc3RyY21wKHRhZywgInBhcnRpdGlvbndp c2UiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19QQVJUSVRJT05XSVNFOworCQkJYnJlYWs7 CisJCWNhc2UgJ3MnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJzZW1pam9pbl9ub25fdW5pcXVlIikg PT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRTsKKwkJCWlmIChz dHJjbXAodGFnLCAic2VtaWpvaW5fdW5pcXVlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdf U0VNSUpPSU5fVU5JUVVFOworCQkJaWYgKHN0cmNtcCh0YWcsICJzZXFfc2NhbiIpID09IDApCisJ CQkJcmV0dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJ aWYgKHN0cmNtcCh0YWcsICJ0aWRfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1RJ RF9TQ0FOOworCQkJYnJlYWs7CisJfQorCisJLyogZGlkbid0IHdvcmsgb3V0ICovCisJKmZhaWwg PSB0cnVlOworCisJLyogcmV0dXJuIGFuIGFyYml0cmFyeSB2YWx1ZSB0byB1bndpbmQgdGhlIGNh bGwgc3RhY2sgKi8KKwlyZXR1cm4gUEdQQV9UQUdfU0VRX1NDQU47Cit9CisKKy8qCisgKiBGb3Jt YXQgYSBwZ3BhX2FkdmljZV90YXJnZXQgYXMgYSBzdHJpbmcgYW5kIGFwcGVuZCByZXN1bHQgdG8g YSBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0cmlu Z0luZm8gc3RyLCBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlpZiAodGFyZ2V0LT50 dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0cnVl OworCQljaGFyCSAgICpkZWxpbXM7CisKKwkJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJH RVRfVU5PUkRFUkVEX0xJU1QpCisJCQlkZWxpbXMgPSAie30iOworCQllbHNlCisJCQlkZWxpbXMg PSAiKCkiOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgZGVsaW1zWzBdKTsKKwkJZm9y ZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRy ZW4pCisJCXsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQorCQkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgJyAnKTsKKwkJCXBncGFfZm9ybWF0X2FkdmljZV90 YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0 ciwgZGVsaW1zWzFdKTsKKwl9CisJZWxzZQorCXsKKwkJY29uc3QgY2hhciAqcnRfaWRlbnRpZmll cjsKKworCQlydF9pZGVudGlmaWVyID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmdGFyZ2V0LT5y aWQpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgcnRfaWRlbnRpZmllcik7CisJfQor fQorCisvKgorICogRm9ybWF0IGEgcGdwYV9pbmRleF90YXJnZXQgYXMgYSBzdHJpbmcgYW5kIGFw cGVuZCByZXN1bHQgdG8gYSBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3BhX2Zvcm1hdF9pbmRl eF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KQorewor CWlmIChpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhz dHIsICIlcy4iLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZXNwYWNl KSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdl dC0+aW5kbmFtZSkpOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFfaW5k ZXhfdGFyZ2V0IG9iamVjdHMgYXJlIGV4YWN0bHkgaWRlbnRpY2FsLgorICovCitib29sCitwZ3Bh X2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4X3Rh cmdldCAqaTIpCit7CisJLyogaW5kbmFtZXNwYWNlIGNhbiBiZSBOVUxMLCBhbmQgdHdvIE5VTEwg dmFsdWVzIGFyZSBlcXVhbCAqLworCWlmICgoaTEtPmluZG5hbWVzcGFjZSAhPSBOVUxMIHx8IGky LT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkgJiYKKwkJKGkxLT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8 fCBpMi0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJIHN0cmNtcChpMS0+aW5kbmFtZXNwYWNl LCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzdHJjbXAo aTEtPmluZG5hbWUsIGkyLT5pbmRuYW1lKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBtYXRjaGVz IGFuIGFueSBwYXJ0IG9mIGFuIGFkdmljZSB0YXJnZXQuCisgKi8KK2Jvb2wKK3BncGFfaWRlbnRp Zmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZpZXIgKnJpZCwgcGdwYV9hZHZpY2VfdGFy Z2V0ICp0YXJnZXQpCit7CisJLyogRm9yIG5vbi1pZGVudGlmaWVycywgY2hlY2sgYWxsIGRlc2Nl bmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIp CisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFy Z2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3Rhcmdl dChyaWQsIGNoaWxkX3RhcmdldCkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZh bHNlOworCX0KKworCS8qIFN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29ucyBvZiBhbGlhcyBuYW1l IGFuZCBvY2NjdXJyZW5jZSBudW1iZXIuICovCisJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUs IHRhcmdldC0+cmlkLmFsaWFzX25hbWUpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwlpZiAocmlk LT5vY2N1cnJlbmNlICE9IHRhcmdldC0+cmlkLm9jY3VycmVuY2UpCisJCXJldHVybiBmYWxzZTsK KworCS8qCisJICogSWYgYSByZWxhdGlvbiBpZGVudGlmZXIgbWVudGlvbnMgYSBwYXJ0aXRpb24g bmFtZSwgaXQgc2hvdWxkIGFsc28KKwkgKiBzcGVjaWZ5IGEgcGFydGl0aW9uIHNjaGVtYS4gQnV0 IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZSBzY2hlbWEgTlVMTCB0bworCSAqIG1hdGNoIGFueXRo aW5nLgorCSAqLworCUFzc2VydChyaWQtPnBhcnRuc3AgIT0gTlVMTCB8fCByaWQtPnBhcnRyZWwg PT0gTlVMTCk7CisJaWYgKHJpZC0+cGFydG5zcCAhPSBOVUxMICYmIHRhcmdldC0+cmlkLnBhcnRu c3AgIT0gTlVMTCAmJgorCQlzdHJjbXAocmlkLT5wYXJ0bnNwLCB0YXJnZXQtPnJpZC5wYXJ0bnNw KSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBjYW4gYmUg TlVMTCBvbiBlaXRoZXIgc2lkZSwgYnV0IE5VTEwgb25seSBtYXRjaGVzIGFub3RoZXIKKwkgKiBO VUxMLgorCSAqLworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wYXJ0cmVs LCB0YXJnZXQtPnJpZC5wYXJ0cmVsKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3RyaW5nc19l cXVhbF9vcl9ib3RoX251bGwocmlkLT5wbGFuX25hbWUsIHRhcmdldC0+cmlkLnBsYW5fbmFtZSkp CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogTWF0Y2ggaWRl bnRpZmllcnMgdG8gYWR2aWNlIHRhcmdldHMgYW5kIHJldHVybiBhbiBlbnVtIHZhbHVlIGluZGlj YXRpbmcKKyAqIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2V0IG9mIGtleXMgYW5kIHRo ZSBzZXQgb2YgdGFyZ2V0cy4KKyAqCisgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBwZ3BhX2l0bV90 eXBlLgorICovCitwZ3BhX2l0bV90eXBlCitwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChp bnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3Rh cmdldCAqdGFyZ2V0KQoreworCWJvb2wJCWFsbF9yaWRzX3VzZWQgPSB0cnVlOworCWJvb2wJCWFu eV9yaWRzX3VzZWQgPSBmYWxzZTsKKwlib29sCQlhbGxfdGFyZ2V0c191c2VkOworCWJvb2wJICAg KnJpZHNfdXNlZCA9IHBhbGxvYzBfYXJyYXkoYm9vbCwgbnJpZHMpOworCisJYWxsX3RhcmdldHNf dXNlZCA9CisJCXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCB0YXJn ZXQsIHJpZHNfdXNlZCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJewor CQlpZiAocmlkc191c2VkW2ldKQorCQkJYW55X3JpZHNfdXNlZCA9IHRydWU7CisJCWVsc2UKKwkJ CWFsbF9yaWRzX3VzZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoYWxsX3JpZHNfdXNlZCkKKwl7CisJ CWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0VRVUFMOworCQllbHNl CisJCQlyZXR1cm4gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUOworCX0KKwllbHNlCisJeworCQlp ZiAoYWxsX3RhcmdldHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJT RVQ7CisJCWVsc2UgaWYgKGFueV9yaWRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fSU5URVJT RUNUSU5HOworCQllbHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQ7CisJfQorfQorCisv KgorICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHRhcmdldCBvciBzdWItdGFyZ2V0IGlzIG1hdGNo ZWQgYnkgYXQgbGVhc3Qgb25lCisgKiBpZGVudGlmaWVyLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgor ICoKKyAqIEFsc28gc2V0cyByaWRzX3VzZWRbaV0gPSB0cnVlIGZvciBlYWNoIGlkZW5pZmllciB0 aGF0IG1hdGNoZXMgYXQgbGVhc3Qgb25lCisgKiB0YXJnZXQuCisgKi8KK3N0YXRpYyBib29sCitw Z3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAq cmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LCBib29sICpyaWRzX3Vz ZWQpCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQ R1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJcmVzdWx0ID0gdHJ1ZTsKKworCQlmb3JlYWNo X3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikK KwkJeworCQkJaWYgKCFwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlkcywg Y2hpbGRfdGFyZ2V0LAorCQkJCQkJCQkJCQkgICByaWRzX3VzZWQpKQorCQkJCXJlc3VsdCA9IGZh bHNlOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsr aSkKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldCgmcmlkc1tpXSwg dGFyZ2V0KSkKKwkJCXsKKwkJCQlyaWRzX3VzZWRbaV0gPSB0cnVlOworCQkJCXJlc3VsdCA9IHRy dWU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZDNmOGQ1 OGE3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu aApAQCAtMCwwICsxLDE4NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9hc3Qu aAorICoJICBhYnN0cmFjdCBzeW50YXggdHJlZXMgZm9yIHBsYW4gYWR2aWNlLCBwbHVzIHBhcnNl ci9zY2FubmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9hc3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBH UEFfQVNUX0gKKyNkZWZpbmUgUEdQQV9BU1RfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVy LmgiCisKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisKKy8qCisgKiBBZHZpY2UgaXRlbXMg Z2VuZXJhbGx5IHRha2UgdGhlIGZvcm0gU09NRV9UQUcoaXRlbSBbLi4uXSksIHdoZXJlIGFuIGl0 ZW0KKyAqIGNhbiB0YWtlIHZhcmlvdXMgZm9ybXMuIFRoZSBzaW1wbGVzdCBjYXNlIGlzIGEgcmVs YXRpb24gaWRlbnRpZmllciwgYnV0CisgKiBzb21lIHRhZ3MgYWxsb3cgc3VibGlzdHMsIGFuZCBK T0lOX09SREVSKCkgYWxsb3dzIGJvdGggb3JkZXJlZCBhbmQgdW5vcmRlcmVkCisgKiBzdWJsaXN0 cy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9UQVJHRVRfSURFTlRJRklFUiwJCS8qIHJl bGF0aW9uIGlkZW50aWZpZXIgKi8KKwlQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QsCS8qIChpdGVt IC4uLikgKi8KKwlQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVAkvKiB7aXRlbSAuLi59ICovCit9 IHBncGFfdGFyZ2V0X3R5cGU7CisKKy8qCisgKiBBbiBpbmRleCBzcGVjaWZpY2F0aW9uLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX2luZGV4X3RhcmdldAoreworCS8qIEluZGV4IHNjaGVtYSBh bmQgbmFtZSAqLworCWNoYXIJICAgKmluZG5hbWVzcGFjZTsKKwljaGFyCSAgICppbmRuYW1lOwor fSBwZ3BhX2luZGV4X3RhcmdldDsKKworLyoKKyAqIEEgc2luZ2xlIGl0ZW0gYWJvdXQgd2hpY2gg YWR2aWNlIGlzIGJlaW5nIGdpdmVuLCB3aGljaCBjb3VsZCBiZSBlaXRoZXIKKyAqIGEgcmVsYXRp b24gaWRlbnRpZmllciB0aGF0IHdlIHdhbnQgdG8gYnJlYWsgb3V0IGludG8gaXRzIGNvbnN0aXR1 ZW50IGZpZWxkcywKKyAqIG9yIGEgc3VibGlzdCBvZiBzb21lIGtpbmQuCisgKi8KK3R5cGVkZWYg c3RydWN0IHBncGFfYWR2aWNlX3RhcmdldAoreworCXBncGFfdGFyZ2V0X3R5cGUgdHR5cGU7CisK KwkvKgorCSAqIFRoaXMgZmllbGQgaXMgbWVhbmluZ2Z1bCB3aGVuIHR0eXBlIGlzIFBHUEFfVEFS R0VUX0lERU5USUZJRVIuCisJICoKKwkgKiBBbGwgaWRlbnRpZmllcnMgbXVzdCBoYXZlIGFuIGFs aWFzIG5hbWUgYW5kIGFuIG9jY3VycmVuY2UgbnVtYmVyOyB0aGUKKwkgKiByZW1haW5pbmcgZmll bGRzIGNhbiBiZSBOVUxMLiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEKKwkg KiBwYXJ0aXRpb24gbmFtZSB3aXRob3V0IGEgcGFydGl0aW9uIHNjaGVtYSwgYnV0IG5vdCB0aGUg cmV2ZXJzZS4KKwkgKi8KKwlwZ3BhX2lkZW50aWZpZXIgcmlkOworCisJLyoKKwkgKiBUaGlzIGZp ZWxkIGlzIHNldCB3aGVuIHR0eXBlIGlzIFBQR0FfVEFSR0VUX0lERU5USUZJRVIgYW5kIHRoZSBh ZHZpY2UKKwkgKiB0YWcgaXMgUEdQQV9UQUdfSU5ERVhfU0NBTiBvciBQR1BBX1RBR19JTkRFWF9P TkxZX1NDQU4uCisJICovCisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7CisKKwkvKgorCSAq IFdoZW4gdGhlIHR0eXBlIGlzIFBHUEFfVEFSR0VUXzxhbnl0aGluZz5fTElTVCwgdGhpcyBmaWVs ZCBjb250YWlucyBhCisJICogbGlzdCBvZiBhZGRpdGlvbmFsIHBncGFfYWR2aWNlX3RhcmdldCBv YmplY3RzLiBPdGhlcndpc2UsIGl0IGlzIHVudXNlZC4KKwkgKi8KKwlMaXN0CSAgICpjaGlsZHJl bjsKK30gcGdwYV9hZHZpY2VfdGFyZ2V0OworCisvKgorICogVGhlc2UgYXJlIGFsbCB0aGUga2lu ZHMgb2YgYWR2aWNlIHRoYXQgd2Uga25vdyBob3cgdG8gcGFyc2UuIElmIGEga2V5d29yZAorICog aXMgZm91bmQgYXQgdGhlIHRvcCBsZXZlbCwgaXQgbXVzdCBiZSBpbiB0aGlzIGxpc3QuCisgKgor ICogSWYgeW91IGNoYW5nZSBhbnl0aGluZyBoZXJlLCBhbHNvIHVwZGF0ZSBwZ3BhX3BhcnNlX2Fk dmljZV90YWcgYW5kCisgKiBwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZy4KKyAqLwordHlwZWRlZiBl bnVtIHBncGFfYWR2aWNlX3RhZ190eXBlCit7CisJUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTiwK KwlQR1BBX1RBR19GT1JFSUdOX0pPSU4sCisJUEdQQV9UQUdfR0FUSEVSLAorCVBHUEFfVEFHX0dB VEhFUl9NRVJHRSwKKwlQR1BBX1RBR19IQVNIX0pPSU4sCisJUEdQQV9UQUdfSU5ERVhfT05MWV9T Q0FOLAorCVBHUEFfVEFHX0lOREVYX1NDQU4sCisJUEdQQV9UQUdfSk9JTl9PUkRFUiwKKwlQR1BB X1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU4s CisJUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTkVTVEVEX0xP T1BfTUVNT0laRSwKKwlQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTiwKKwlQR1BBX1RBR19OT19H QVRIRVIsCisJUEdQQV9UQUdfUEFSVElUSU9OV0lTRSwKKwlQR1BBX1RBR19TRU1JSk9JTl9OT05f VU5JUVVFLAorCVBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSwKKwlQR1BBX1RBR19TRVFfU0NBTiwK KwlQR1BBX1RBR19USURfU0NBTgorfSBwZ3BhX2FkdmljZV90YWdfdHlwZTsKKworLyoKKyAqIEFu IGl0ZW0gb2YgYWR2aWNlLCBtZWFuaW5nIGEgdGFnIGFuZCB0aGUgbGlzdCBvZiBhbGwgdGFyZ2V0 cyB0byB3aGljaAorICogaXQgaXMgYmVpbmcgYXBwbGllZC4KKyAqCisgKiAidGFyZ2V0cyIgaXMg YSBsaXN0IG9mIHBncGFfYWR2aWNlX3RhcmdldCBvYmplY3RzLgorICoKKyAqIFRoZSBMaXN0IHJl dHVybmVkIGZyb20gcGdwYV95eXBhcnNlIGlzIGxpc3Qgb2YgcGdwYV9hZHZpY2VfaXRlbSBvYmpl Y3RzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2FkdmljZV9pdGVtCit7CisJcGdwYV9hZHZp Y2VfdGFnX3R5cGUgdGFnOworCUxpc3QJICAgKnRhcmdldHM7Cit9IHBncGFfYWR2aWNlX2l0ZW07 CisKKy8qCisgKiBSZXN1bHQgb2YgY29tcGFyaW5nIGFuIGFycmF5IG9mIHBncGFfcmVsYXRpb25f aWRlbnRpZmllciBvYmplY3RzIHRvIGEKKyAqIHBncGFfYWR2aWNlX3RhcmdldC4KKyAqCisgKiBQ R1BBX0lUTV9FUVVBTCBtZWFucyBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieSBzb21lIGlkZW50 aWZpZXIsIGFuZAorICogYWxsIGlkZW50aWZpZXJzIHdlcmUgbWF0Y2hlZCB0byBhIHRhcmdldC4K KyAqCisgKiBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgaWRlbnRpZmll cnMgbWF0Y2hlZCB0byBhIHRhcmdldCwKKyAqIGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVyIHRhcmdl dHMuIEdlbmVyYWxseSwgdGhpcyBtZWFucyB0aGF0IHRoZSBhZHZpY2UgaXMKKyAqIGxvb2tpbmcg dG8gYXBwbHkgdG8gYWxsIG9mIHRoZSByZWxzIHdlIGhhdmUgcGx1cyBzb21lIGFkZGl0aW9uYWwg b25lcyB0aGF0CisgKiB3ZSBkb24ndCBoYXZlLgorICoKKyAqIFBHUEFfSVRNX1RBUkdFVFNfQVJF X1NVQlNFVCBtZWFucyB0aGF0IGFsbCB0YXJnZXRzIGFyZSBtYXRjaGVkIGJ5IGFuCisgKiBpZGVu dGlmaWVycywgYnV0IHRoZXJlIHdlcmUgbGVmdG92ZXIgaWRlbnRpZmllcnMuIEdlbmVyYWxseSwg dGhpcyBtZWFucworICogdGhhdCB0aGUgYWR2aWNlIGlzIGxvb2tpbmcgdG8gYXBwbHkgdG8gc29t ZSBidXQgbm90IGFsbCBvZiB0aGUgcmVscyB3ZSBoYXZlLgorICoKKyAqIFBHUEFfSVRNX0lOVEVS U0VDVElORyBtZWFucyB0aGF0IHNvbWUgaWRlbnRpZmVpcnMgYW5kIHRhcmdldHMgd2VyZSBtYXRj aGVkLAorICogYnV0IG5laXRoZXIgYWxsIGlkZW50aWZpZXJzIG5vciBhbGwgdGFyZ2V0cyBjb3Vs ZCBiZSBtYXRjaGVkIHRvIGl0ZW1zIGluCisgKiB0aGUgb3RoZXIgc2V0LgorICoKKyAqIFBHUEFf SVRNX0RJU0pPSU5UIG1lYW5zIHRoYXQgbm8gbWF0Y2hlcyBiZXR3ZWVuIGlkZW50aWZlaXJzIGFu 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 dCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2Nv bGxlY3Rvci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMGIwZDdlMTU5NAotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwpAQCAtMCww ICsxLDYzOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9jb2xsZWN0b3IuYwor ICoJICBjb2xsZWN0IGFkdmljZSBpbnRvIGJhY2tlbmQtbG9jYWwgb3Igc2hhcmVkIG1lbW9yeQor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rv ci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgi CisKKyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfY29sbGVjdG9y LmgiCisKKyNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJmdW5jYXBp LmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgor I2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJf Y29sbGVjdGVkX2xvY2FsX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UpOworCisjZGVmaW5lIEFEVklDRV9DSFVOS19TSVpFCQkxMDI0CisjZGVm aW5lIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFCTY0CisKKyNkZWZpbmUJUEdfR0VUX0FEVklDRV9D T0xVTU5TCTcKKworLyoKKyAqIEFkdmljZSBleHRyYWN0ZWQgZnJvbSBvbmUgcXVlcnkgcGxhbiwg dG9nZXRoZXIgd2l0aCB0aGUgcXVlcnkgc3RyaW5nCisgKiBhbmQgdmFyaW91cyBvdGhlciBpZGVu dGlmeWluZyBkZXRhaWxzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2NvbGxlY3RlZF9hZHZp Y2UKK3sKKwlPaWQJCQl1c2VyaWQ7CQkJLyogdXNlciBPSUQgKi8KKwlPaWQJCQlkYmlkOwkJCS8q IGRhdGFiYXNlIE9JRCAqLworCXVpbnQ2NAkJcXVlcnlpZDsJCS8qIHF1ZXJ5IGlkZW50aWZpZXIg Ki8KKwlUaW1lc3RhbXBUeiB0aW1lc3RhbXA7CQkvKiBxdWVyeSB0aW1lc3RhbXAgKi8KKwlpbnQJ CQlhZHZpY2Vfb2Zmc2V0OwkvKiBzdGFydCBvZiBhZHZpY2UgaW4gdGV4dHVhbCBkYXRhICovCisJ Y2hhcgkJdGV4dHVhbF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHBncGFfY29sbGVj dGVkX2FkdmljZTsKKworLyoKKyAqIEEgYnVuY2ggb2YgcG9pbnRlcnMgdG8gcGdwYV9jb2xsZWN0 ZWRfYWR2aWNlIG9iamVjdHMsIHN0b3JlZCBpbgorICogYmFja2VuZC1sb2NhbCBtZW1vcnkuCisg Ki8KK3R5cGVkZWYgc3RydWN0IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rCit7CisJcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlICplbnRyaWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdwYV9sb2NhbF9h ZHZpY2VfY2h1bms7CisKKy8qCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHBncGFf Y29sbGVjdGVkX2FkdmljZSBvYmplY3RzIHRoYXQgd2UncmUKKyAqIHN0b3JpbmcgaW4gbG9jYWwg bWVtb3J5LgorICoKKyAqIFdlIGFzc2lnbiBjb25zZWN1dGl2ZSBJRHMsIHN0YXJ0aW5nIGZyb20g MCwgdG8gZWFjaCBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UKKyAqIG9iamVjdCB0aGF0IHdlIHN0b3Jl LiBUaGUgYWN0dWFsIHN0b3JhZ2UgaXMgYW4gYXJyYXkgb2YgY2h1bmtzLCB3aGljaAorICogaGVs cHMga2VlcCBtZW1jcHkoKSBvdmVyaGVhZCBsb3cgd2hlbiB3ZSBzdGFydCBkaXNjYXJkaW5nIG9s ZGVyIGRhdGEuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfbG9jYWxfYWR2aWNlCit7CisJdWlu dDY0CQluZXh0X2lkOworCXVpbnQ2NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsKKwlp bnQJCQljaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZTsKKwlwZ3BhX2xvY2FsX2FkdmljZV9jaHVu ayAqKmNodW5rczsKK30gcGdwYV9sb2NhbF9hZHZpY2U7CisKKy8qCisgKiBKdXN0IGxpa2UgcGdw YV9sb2NhbF9hZHZpY2VfY2h1bmssIGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJlZCBhcmVh LAorICogc28gd2UgbXVzdCB1c2UgZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUgcG9pbnRl cnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfc2hhcmVkX2FkdmljZV9jaHVuaworeworCWRz YV9wb2ludGVyIGVudHJpZXNbQURWSUNFX0NIVU5LX1NJWkVdOworfSBwZ3BhX3NoYXJlZF9hZHZp Y2VfY2h1bms7CisKKy8qCisgKiBKdXN0IGxpa2UgcGdwYV9sb2NhbF9hZHZpY2UsIGJ1dCBzdG9y ZWQgaW4gYSBkeW5hbWljIHNoYXJlZCBhcmVhLCBzbworICogd2UgbXVzdCB1c2UgZHNhX3BvaW50 ZXIgaW5zdGVhZCBvZiBuYXRpdmUgcG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFf c2hhcmVkX2FkdmljZQoreworCXVpbnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsK Kwl1aW50NjQJCWJhc2VfaWQ7CisJaW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJ ZHNhX3BvaW50ZXIgY2h1bmtzOworfSBwZ3BhX3NoYXJlZF9hZHZpY2U7CisKKy8qIFBvaW50ZXJz IHRvIGxvY2FsIGFuZCBzaGFyZWQgY29sbGVjdG9ycyAqLworc3RhdGljIHBncGFfbG9jYWxfYWR2 aWNlICpsb2NhbF9jb2xsZWN0b3IgPSBOVUxMOworc3RhdGljIHBncGFfc2hhcmVkX2FkdmljZSAq c2hhcmVkX2NvbGxlY3RvciA9IE5VTEw7CisKKy8qIFN0YXRpYyBmdW5jdGlvbnMgKi8KK3N0YXRp YyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKnBncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1 c2VyaWQsCisJCQkJCQkJCQkJCQkJCSBPaWQgZGJpZCwKKwkJCQkJCQkJCQkJCQkJIHVpbnQ2NCBx dWVyeUlkLAorCQkJCQkJCQkJCQkJCQkgVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJCQkJ CQkJCQkgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQkJCQkJCQkgY29uc3QgY2hh ciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJCQkJCQkJIGRzYV9hcmVhICphcmVhLAorCQkJCQkJ CQkJCQkJCQkgZHNhX3BvaW50ZXIgKnJlc3VsdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3N0b3JlX2xv Y2FsX2FkdmljZShwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKTsKK3N0YXRpYyB2b2lkIHBncGFf dHJpbV9sb2NhbF9hZHZpY2UoaW50IGxpbWl0KTsKK3N0YXRpYyB2b2lkIHBncGFfc3RvcmVfc2hh cmVkX2FkdmljZShkc2FfcG9pbnRlciBjYV9wb2ludGVyKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJp bV9zaGFyZWRfYWR2aWNlKGRzYV9hcmVhICphcmVhLCBpbnQgbGltaXQpOworCisvKiBIZWxwZXIg ZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgcXVlcnkgc3RyaW5nIGZyb20gcGdwYV9jb2xsZWN0ZWRf YWR2aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorcXVlcnlfc3RyaW5nKHBncGFf Y29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGE7Cit9CisK Ky8qIEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBhZHZpY2Ugc3RyaW5nIGZyb20gcGdw YV9jb2xsZWN0ZWRfYWR2aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorYWR2aWNl X3N0cmluZyhwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVh bF9kYXRhICsgY2EtPmFkdmljZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBTdG9yZSBjb2xsZWN0ZWQg cXVlcnkgYWR2aWNlIGludG8gdGhlIGxvY2FsIG9yIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLAor ICogYXMgYXBwcm9wcmlhdGUuCisgKi8KK3ZvaWQKK3BncGFfY29sbGVjdF9hZHZpY2UodWludDY0 IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJY29uc3QgY2hhciAqYWR2 aWNlX3N0cmluZykKK3sKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKwlPaWQJCQlkYmlk ID0gTXlEYXRhYmFzZUlkOworCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAo KTsKKworCWlmIChwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0b3IgJiYKKwkJcGdfcGxhbl9h ZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlwZ3BhX2NvbGxlY3RlZF9h ZHZpY2UgKmNhOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xkY29udGV4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKwkJY2Eg PSBwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2VyaWQsIGRiaWQsIHF1ZXJ5SWQsIG5vdywK KwkJCQkJCQkJCQlxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJpbmcsCisJCQkJCQkJCQkJTlVMTCwg TlVMTCk7CisJCXBncGFfc3RvcmVfbG9jYWxfYWR2aWNlKGNhKTsKKwkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWlmIChwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29s bGVjdG9yICYmCisJCXBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID4gMCkK Kwl7CisJCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCQlk c2FfcG9pbnRlciBjYV9wb2ludGVyID0gSW52YWxpZERzYVBvaW50ZXI7IC8qIHBsYWNhdGUgY29t cGlsZXIgKi8KKworCQlwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2VyaWQsIGRiaWQsIHF1 ZXJ5SWQsIG5vdywKKwkJCQkJCQkJICAgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLCBhcmVh LAorCQkJCQkJCQkgICAmY2FfcG9pbnRlcik7CisJCXBncGFfc3RvcmVfc2hhcmVkX2FkdmljZShj YV9wb2ludGVyKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZmlsbCBhIG5ldyBwZ3Bh X2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0LgorICoKKyAqIElmIGFyZWEgIT0gTlVMTCwgaXQgaXMg dXNlZCB0byBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZSByZXN1bHRpbmcKKyAqIGRz YV9wb2ludGVyIGlzIHJldHVybmVkIHZpYSAqcmVzdWx0LgorICoKKyAqIElmIGFyZWEgPT0gTlVM TCwgdGhlIG5ldyBvYmplY3QgaXMgYWxsb2NhdGVkIGluIHRoZSBjdXJyZW50IG1lbW9yeSBjb250 ZXh0LAorICogYW5kIHJlc3VsdCBpcyBub3QgZXhhbWluZWQgb3IgbW9kaWZpZWQuCisgKi8KK3N0 YXRpYyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKgorcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2Uo T2lkIHVzZXJpZCwgT2lkIGRiaWQsIHVpbnQ2NCBxdWVyeUlkLAorCQkJCQkJICAgVGltZXN0YW1w VHogdGltZXN0YW1wLAorCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJ ICAgY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCSAgIGRzYV9hcmVhICphcmVhLCBk c2FfcG9pbnRlciAqcmVzdWx0KQoreworCXNpemVfdAkJcXVlcnlfc3RyaW5nX2xlbmd0aCA9IHN0 cmxlbihxdWVyeV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCWFkdmljZV9zdHJpbmdfbGVuZ3RoID0g c3RybGVuKGFkdmljZV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCXRvdGFsX2xlbmd0aDsKKwlwZ3Bh X2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCisJdG90YWxfbGVuZ3RoID0gb2Zmc2V0b2YocGdwYV9j b2xsZWN0ZWRfYWR2aWNlLCB0ZXh0dWFsX2RhdGEpCisJCSsgcXVlcnlfc3RyaW5nX2xlbmd0aCAr IGFkdmljZV9zdHJpbmdfbGVuZ3RoOworCisJaWYgKGFyZWEgPT0gTlVMTCkKKwkJY2EgPSBwYWxs b2ModG90YWxfbGVuZ3RoKTsKKwllbHNlCisJeworCQkqcmVzdWx0ID0gZHNhX2FsbG9jYXRlKGFy ZWEsIHRvdGFsX2xlbmd0aCk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsICpyZXN1bHQp OworCX0KKworCWNhLT51c2VyaWQgPSB1c2VyaWQ7CisJY2EtPmRiaWQgPSBkYmlkOworCWNhLT5x dWVyeWlkID0gcXVlcnlJZDsKKwljYS0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCWNhLT5hZHZp Y2Vfb2Zmc2V0ID0gcXVlcnlfc3RyaW5nX2xlbmd0aDsKKworCW1lbWNweShjYS0+dGV4dHVhbF9k YXRhLCBxdWVyeV9zdHJpbmcsIHF1ZXJ5X3N0cmluZ19sZW5ndGgpOworCW1lbWNweSgmY2EtPnRl eHR1YWxfZGF0YVtjYS0+YWR2aWNlX29mZnNldF0sCisJCSAgIGFkdmljZV9zdHJpbmcsIGFkdmlj ZV9zdHJpbmdfbGVuZ3RoKTsKKworCXJldHVybiBjYTsKK30KKworLyoKKyAqIEFkZCBhIHBnX2Nv bGxlY3RlZF9hZHZpY2Ugb2JqZWN0IHRvIG91ciBiYWNrZW5kLWxvY2FsIGFkdmljZSBjb2xsZWN0 aW9uLgorICoKKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3dpdGNoaW5nIHRvIHRoZSBh cHByb3ByaWF0ZSBtZW1vcnkgY29udGV4dDsKKyAqIHRoZSBwcm92aWRlZCBvYmplY3Qgc2hvdWxk IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gdGhhdCBzYW1lIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX3N0b3JlX2xvY2FsX2FkdmljZShwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQor eworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCXBncGFf bG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKworCS8qIElmIHRoZSBsb2NhbCBh ZHZpY2UgY29sbGVjdG9yIGlzbid0IGluaXRpYWxpemVkIHlldCwgZG8gdGhhdCBub3cuICovCisJ aWYgKGxhID09IE5VTEwpCisJeworCQlsYSA9IHBhbGxvYzAoc2l6ZW9mKHBncGFfbG9jYWxfYWR2 aWNlKSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IEFEVklDRV9DSFVOS19B UlJBWV9TSVpFOworCQlsYS0+Y2h1bmtzID0gcGFsbG9jMF9hcnJheShwZ3BhX2xvY2FsX2Fkdmlj ZV9jaHVuayAqLAorCQkJCQkJCQkgICBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUpOwor CQlsb2NhbF9jb2xsZWN0b3IgPSBsYTsKKwl9CisKKwkvKiBDb21wdXRlIGNodW5rIGFuZCBvZmZz ZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJY2h1bmtfbnVtYmVyID0gKGxh LT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJY2h1bmtfb2Zm c2V0ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisK KwkvKiBFeHRlbmQgY2h1bmsgYXJyYXksIGlmIG5lZWRlZC4gKi8KKwlpZiAoY2h1bmtfbnVtYmVy ID49IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7CisJCWludAkJCW5ld19zaXpl OworCisJCW5ld19zaXplID0gbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplICsgQURWSUNF X0NIVU5LX0FSUkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSByZXBhbGxvYzBfYXJyYXkobGEtPmNo dW5rcywKKwkJCQkJCQkJCSBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayAqLAorCQkJCQkJCQkJIGxh LT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSwKKwkJCQkJCQkJCSBuZXdfc2l6ZSk7CisJCWxh LT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXplOworCX0KKworCS8qIEFsbG9j YXRlIG5ldyBjaHVuaywgaWYgbmVlZGVkLiAqLworCWlmIChsYS0+Y2h1bmtzW2NodW5rX251bWJl cl0gPT0gTlVMTCkKKwkJbGEtPmNodW5rc1tjaHVua19udW1iZXJdID0gcGFsbG9jMF9vYmplY3Qo cGdwYV9sb2NhbF9hZHZpY2VfY2h1bmspOworCisJLyogU2F2ZSBwb2ludGVyIGFuZCBidW1wIG5l eHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRy aWVzW2NodW5rX29mZnNldF0gPT0gTlVMTCk7CisJbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5l bnRyaWVzW2NodW5rX29mZnNldF0gPSBjYTsKKwkrK2xhLT5uZXh0X2lkOworCisJLyogSWYgd2Un dmUgZXhjZWVkZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJcGdw YV90cmltX2xvY2FsX2FkdmljZShwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 KTsKK30KKworLyoKKyAqIEFkZCBhIHBnX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0IHRvIHRoZSBz aGFyZWQgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICogJ2NhX3BvaW50ZXInIHNob3VsZCBoYXZl IGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlIHBnX3BsYW5fYWR2aWNlIERTQSBhcmVhCisgKiBhbmQg c2hvdWxkIHBvaW50IHRvIGFuIG9iamVjdCBvZiB0eXBlIHBncGFfY29sbGVjdGVkX2FkdmljZS4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfc3RvcmVfc2hhcmVkX2FkdmljZShkc2FfcG9pbnRlciBj YV9wb2ludGVyKQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2NAkJY2h1bmtfb2Zm c2V0OworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgp OworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCXBncGFf c2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCWRzYV9wb2ludGVyICpjaHVu a19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJLyogTG9jayB0 aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENM VVNJVkUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBh ZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93LgorCSAqIElmIHdlJ3JlIHRoZSBmaXJz dCBvbmVzIHRvIGF0dGFjaCwgd2UgbWF5IG5lZWQgdG8gY3JlYXRlIHRoZSBvYmplY3QuCisJICov CisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0g SW52YWxpZERzYVBvaW50ZXIpCisJCQlzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9CisJCQkJZHNh X2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdwYV9zaGFyZWRfYWR2aWNlKSk7CisJCXNoYXJlZF9j b2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2NvbGxl Y3Rvcik7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBvdGhlciBiYWNr ZW5kIG1heSBoYXZlIHN1Y2NlZWRlZCBpbiBjcmVhdGluZworCSAqIHRoZSBtYWluIGNvbGxlY3Rv ciBvYmplY3QgYnV0IGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBpbml0aWFsIGNodW5rCisJICogYXJy YXksIHNvIHdlIG11c3QgYmUgcHJlcGFyZWQgdG8gYWxsb2NhdGUgdGhlIGNodW5rIGFycmF5IGhl cmUgd2hldGhlcgorCSAqIG9yIG5vdCB3ZSBjcmVhdGVkIHRoZSBjb2xsZWN0b3Igb2JqZWN0Lgor CSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9yLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9 PSAwKQorCXsKKwkJc2EtPmNodW5rcyA9CisJCQlkc2FfYWxsb2NhdGUwKGFyZWEsCisJCQkJCQkg IHNpemVvZihkc2FfcG9pbnRlcikgKiBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRSk7CisJCXNhLT5j aHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCX0K KworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBhdCB3aGljaCB0byBzdG9yZSB0aGlzIGFk dmljZS4gKi8KKwljaHVua19udW1iZXIgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCkgLyBB RFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFz ZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUg Y2h1bmsgYXJyYXkgYW5kLCBpZiBuZWVkZWQsIGV4dGVuZCBpdC4gKi8KKwlpZiAoY2h1bmtfbnVt YmVyID49IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7CisJCWludAkJCW5ld19z aXplOworCQlkc2FfcG9pbnRlciBuZXdfY2h1bmtzOworCisJCS8qCisJCSAqIERTQSBjYW4ndCBl bmxhcmdlIGFuIGV4aXN0aW5nIGFsbG9jYXRpb24sIHNvIHdlIG11c3QgbWFrZSBhIG5ldworCQkg KiBhbGxvY2F0aW9uIGFuZCBjb3B5IGRhdGEgb3Zlci4KKwkJICovCisJCW5ld19zaXplID0gc2Et PmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplICsgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJ CW5ld19jaHVua3MgPSBkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihkc2FfcG9pbnRlcikgKiBu ZXdfc2l6ZSk7CisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIG5ld19jaHVu a3MpOworCQltZW1jcHkoY2h1bmtfYXJyYXksIGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1 bmtzKSwKKwkJCSAgIHNpemVvZihkc2FfcG9pbnRlcikgKiBzYS0+Y2h1bmtfYXJyYXlfYWxsb2Nh dGVkX3NpemUpOworCQlkc2FfZnJlZShhcmVhLCBzYS0+Y2h1bmtzKTsKKwkJc2EtPmNodW5rcyA9 IG5ld19jaHVua3M7CisJCXNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXpl OworCX0KKwllbHNlCisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5j aHVua3MpOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGNodW5rLCBhbGxv Y2F0aW5nIGl0IGlmIG5lZWRlZC4gKi8KKwlpZiAoY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSA9 PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSA9CisJCQlk c2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmspKTsKKwlj aHVuayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsK KworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICovCisJQXNzZXJ0 KGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gSW52YWxpZERzYVBvaW50ZXIpOworCWNo dW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYV9wb2ludGVyOworCSsrc2EtPm5leHRfaWQ7 CisKKwkvKiBJZiB3ZSd2ZSBleGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBvbGQg ZGF0YS4gKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShhcmVhLCBwZ19wbGFuX2FkdmljZV9z aGFyZWRfY29sbGVjdGlvbl9saW1pdCk7CisKKwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVkIHN0 YXRlLiAqLworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIERpc2Nh cmQgY29sbGVjdGVkIGFkdmljZSBzdG9yZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkgaW4gZXhj ZXNzIG9mIHRoZQorICogc3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90 cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpCit7CisJcGdwYV9sb2NhbF9hZHZpY2UgKmxhID0g bG9jYWxfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9jb3VudDsKKwl1aW50NjQJCXRyaW1f Y291bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsKKwl1aW50NjQJCXRyaW1fY2h1bmtf Y291bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7CisKKwkvKiBJZiB3ZSBoYXZl bid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhlcmUncyBub3RoaW5nIHRvIGRvLiAqLworCWN1 cnJlbnRfY291bnQgPSBsYS0+bmV4dF9pZCAtIGxhLT5vbGRlc3RfaWQ7CisJaWYgKGN1cnJlbnRf Y291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKworCS8qIEZyZWUgZW5vdWdoIGVudHJpZXMgdG8g Z2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9jb3VudCA9IGN1cnJlbnRf Y291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJeworCQl1aW50NjQJCWNo dW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisKKwkJY2h1bmtfbnVtYmVyID0g KGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1 bmtfb2Zmc2V0ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktf U0laRTsKKworCQlBc3NlcnQobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5r X29mZnNldF0gIT0gTlVMTCk7CisJCXBmcmVlKGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50 cmllc1tjaHVua19vZmZzZXRdKTsKKwkJbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVz W2NodW5rX29mZnNldF0gPSBOVUxMOworCQkrK2xhLT5vbGRlc3RfaWQ7CisJCS0tdHJpbV9jb3Vu dDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93IGVudGlyZWx5IHVudXNl ZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkg LyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsgbiA8IHRyaW1fY2h1bmtf Y291bnQ7ICsrbikKKwkJcGZyZWUobGEtPmNodW5rc1tuXSk7CisKKwkvKiBTbGlkZSByZW1haW5p bmcgY2h1bmsgcG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ugb2YgdGhlIGFycmF5LiAqLwor CXRvdGFsX2NodW5rX2NvdW50ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQgKworCQkJCQkJ IEFEVklDRV9DSFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlyZW1haW5pbmdf Y2h1bmtfY291bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1fY2h1bmtfY291bnQ7CisJaWYg KHJlbWFpbmluZ19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUoJmxhLT5jaHVua3NbMF0sICZs YS0+Y2h1bmtzW3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVvZihwZ3BhX2xvY2FsX2Fkdmlj ZV9jaHVuayAqKSAqIHJlbWFpbmluZ19jaHVua19jb3VudCk7CisKKwkvKiBEb24ndCBsZWF2ZSBz dGFsZSBwb2ludGVycyBhcm91bmQuICovCisJbWVtc2V0KCZsYS0+Y2h1bmtzW3JlbWFpbmluZ19j aHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayAqKQor CQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19jaHVua19jb3VudCkpOworCisJ LyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJbGEtPmJhc2VfaWQgKz0g dHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOworfQorCisvKgorICogRGlzY2Fy ZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5IGluIGV4Y2VzcyBvZiB0 aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJpbV9zaGFy ZWRfYWR2aWNlKGRzYV9hcmVhICphcmVhLCBpbnQgbGltaXQpCit7CisJcGdwYV9zaGFyZWRfYWR2 aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVp bnQ2NAkJdHJpbV9jb3VudDsKKwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJ dHJpbV9jaHVua19jb3VudDsKKwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKwlkc2Ff cG9pbnRlciAqY2h1bmtfYXJyYXk7CisKKwkvKiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRo ZSBsaW1pdCwgdGhlcmUncyBub3RoaW5nIHRvIGRvLiAqLworCWN1cnJlbnRfY291bnQgPSBzYS0+ bmV4dF9pZCAtIHNhLT5vbGRlc3RfaWQ7CisJaWYgKGN1cnJlbnRfY291bnQgPD0gbGltaXQpCisJ CXJldHVybjsKKworCS8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIGNodW5rIGFycmF5LiAqLworCWNo dW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpOworCisJLyogRnJl ZSBlbm91Z2ggZW50cmllcyB0byBnZXQgdXMgYmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0 cmltX2NvdW50ID0gY3VycmVudF9jb3VudCAtIGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50ID4g MCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsK KwkJcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKworCQljaHVua19udW1iZXIgPSAo c2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVu a19vZmZzZXQgPSAoc2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19T SVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5r X251bWJlcl0pOworCQlBc3NlcnQoY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSAhPSBJbnZh bGlkRHNhUG9pbnRlcik7CisJCWRzYV9mcmVlKGFyZWEsIGNodW5rLT5lbnRyaWVzW2NodW5rX29m ZnNldF0pOworCQljaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gSW52YWxpZERzYVBvaW50 ZXI7CisJCSsrc2EtPm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50OworCX0KKworCS8qIEZyZWUg YW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2VkLiAqLworCXRyaW1fY2h1bmtf Y291bnQgPSAoc2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpF OworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19jb3VudDsgKytuKQorCQlkc2Ff ZnJlZShhcmVhLCBjaHVua19hcnJheVtuXSk7CisKKwkvKiBTbGlkZSByZW1haW5pbmcgY2h1bmsg cG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ugb2YgdGhlIGFycmF5LiAqLworCXRvdGFsX2No dW5rX2NvdW50ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQgKworCQkJCQkJIEFEVklDRV9D SFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlyZW1haW5pbmdfY2h1bmtfY291 bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1fY2h1bmtfY291bnQ7CisJaWYgKHJlbWFpbmlu Z19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUoJmNodW5rX2FycmF5WzBdLCAmY2h1bmtfYXJy YXlbdHJpbV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKGRzYV9wb2ludGVyKSAqIHJlbWFpbmlu Z19jaHVua19jb3VudCk7CisKKwkvKiBEb24ndCBsZWF2ZSBzdGFsZSBwb2ludGVycyBhcm91bmQu ICovCisJbWVtc2V0KCZjaHVua19hcnJheVtyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkg ICBzaXplb2YocGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rICopCisJCSAgICogKHRvdGFsX2NodW5r X2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7CisKKwkvKiBBZGp1c3QgYmFzZSBJRCB2 YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlzYS0+YmFzZV9pZCArPSB0cmltX2NodW5rX2NvdW50ICog QURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8g ZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0Rh dHVtCitwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJaWYgKGxvY2FsX2NvbGxlY3RvciAhPSBOVUxMKQorCQlwZ3BhX3RyaW1fbG9jYWxfYWR2aWNl KDApOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBmdW5j dGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkK KyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0 YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7CisK KwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICog SWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQs IGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3RvciBkb2Vzbid0IGV2ZW4gZXhp c3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFueXRoaW5nIGVsc2UuCisJICov CisJaWYgKHNoYXJlZF9jb2xsZWN0b3IgPT0gTlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVk X2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgm c3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQorCQlzaGFyZWRfY29sbGVj dG9yID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9 CisKKwkvKiBEbyB0aGUgcmVhbCB3b3JrICovCisJcGdwYV90cmltX3NoYXJlZF9hZHZpY2UoYXJl YSwgMCk7CisKKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisKKwlQR19SRVRVUk5fVk9J RCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNvbGxl Y3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfZ2V0X2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2lu Zm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdwYV9sb2NhbF9h ZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgp OworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJaWYgKGxhID09IE5VTEwp CisJCXJldHVybiAoRGF0dW0pIDA7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJ Zm9yICh1aW50NjQgaWQgPSBsYS0+b2xkZXN0X2lkOyBpZCA8IGxhLT5uZXh0X2lkOyArK2lkKQor CXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlw Z3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dFVF9BRFZJQ0Vf Q09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10gPSB7MH07CisK KwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJCWNodW5rX29mZnNldCA9IChpZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpF OworCisJCWNhID0gbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNl dF07CisKKwkJaWYgKCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkpCisJ CQljb250aW51ZTsKKworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVl c1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVj dElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+ cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcEdldERhdHVtKGNhLT50aW1lc3RhbXAp OworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHF1ZXJ5X3N0cmluZyhjYSkpOwor CQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGFkdmljZV9zdHJpbmcoY2EpKTsKKwor CQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNj LAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQor CisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNvbGxlY3RlZCBpbiBz aGFyZWQgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2Uo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0 SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0g cGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2 aWNlX2RzYV9hcmVhKCk7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCXBncGFfc2hhcmVk X2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihm Y2luZm8sIDApOworCisJLyogTG9jayB0aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0FjcXVp cmUoJnN0YXRlLT5sb2NrLCBMV19TSEFSRUQpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgYXR0 YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93Owor CSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBleGlzdCwgd2UgY2FuIHJldHVy biB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkgKi8KKwlpZiAoc2EgPT0gTlVM TCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9pbnRl cikKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChEYXR1 bSkgMDsKKwkJfQorCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJl YSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qIEdldCBhIHBvaW50ZXIgdG8g dGhlIGNodW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEs IHNhLT5jaHVua3MpOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAodWlu dDY0IGlkID0gc2EtPm9sZGVzdF9pZDsgaWQgPCBzYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJCXVp bnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9zaGFy ZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJ RGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQR19H RVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAtIHNhLT5i YXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQgLSBzYS0+ YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRfYWRkcmVz cyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJY2EgPSBkc2FfZ2V0X2FkZHJl c3MoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisKKwkJdmFsdWVzWzBdID0g VUludDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKGNhLT51 c2VyaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNhLT5kYmlkKTsKKwkJdmFs dWVzWzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2YWx1ZXNbNF0gPSBUaW1l c3RhbXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dldFRl eHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRleHRE YXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZv LT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7CisJ fQorCisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNl KCZzdGF0ZS0+bG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2NvbGxlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5iNmU3NDZhMDZkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9jb2xsZWN0b3IuaApAQCAtMCwwICsxLDE4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBwZ3BhX2NvbGxlY3Rvci5oCisgKgkgIGNvbGxlY3QgYWR2aWNlIGludG8gYmFja2Vu ZC1sb2NhbCBvciBzaGFyZWQgbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2lmbmRlZiBQR1BBX0NPTExFQ1RPUl9ICisjZGVmaW5lIFBHUEFfQ09MTEVDVE9SX0gKKwor ZXh0ZXJuIHZvaWQgcGdwYV9jb2xsZWN0X2FkdmljZSh1aW50NjQgcXVlcnlJZCwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQljb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmll ci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTFiNGIwYzYwYTYKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCkBAIC0wLDAgKzEs NDc2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2lkZW50aWZpZXIuYworICoJ ICBjcmVhdGUgYXBwcm9wcmlhdGUgaWRlbnRpZmllcnMgZm9yIHJhbmdlIHRhYmxlIGVudHJpZXMK KyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0byBiZSBhYmxlIHRvIHByb2R1Y2Ug aWRlbnRpZmllcnMgZm9yIHJhbmdlCisgKiB0YWJsZSBlbnRyaWVzIHRoYXQgYXJlIHVuaXF1ZSwg dW5kZXJzdGFuZGFibGUgdG8gaHVtYW4gYmVpbmdzLCBhbmQKKyAqIGFibGUgdG8gYmUgcmVjb25z dHJ1Y3RlZCBkdXJpbmcgZnV0dXJlIHBsYW5uaW5nIGN5Y2xlcy4gQXMgYW4KKyAqIGV4Y2VwdGlv biwgd2UgZG8gbm90IGNhcmUgYWJvdXQsIG9yIHdhbnQgdG8gcHJvZHVjZSwgaWRlbnRpZmllcnMg Zm9yCisgKiBSVEVfSk9JTiBlbnRyaWVzLiBUaGlzIGlzIGJlY2F1c2UgKDEpIHdlIHdvdWxkIGVu ZCB1cCB3aXRoIGEgdG9uIG9mCisgKiBSVEVzIHdpdGggdW5oZWxwZnVsIG5hbWVzIGxpa2UgdW5u YW1lZF9qb2luXzE3OyAoMikgbm90IGFsbCBqb2lucyBoYXZlCisgKiBSVEVzOyBhbmQgKDMpIHdl IGludGVuZCB0byByZWZlciB0byBqb2lucyBieSB0aGVpciBjb25zdGl0dWVudCBtZW1iZXJzCisg KiByYXRoZXIgdGhhbiBieSByZWZlcmVuY2UgdG8gdGhlIGpvaW4gUlRFLgorICoKKyAqIEluIGdl bmVyYWwsIHdlIGNvbnN0cnVjdCBpZGVudGlmaWVycyBvZiB0aGUgZm9sbG93aW5nIGZvcm06Cisg KgorICogYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9jaGlsZF90YWJsZV9uYW1lQHN1YnF1 ZXJ5X25hbWUKKyAqCisgKiBIb3dldmVyLCBvY2N1cnJlbmNlX251bWJlciBpcyBvbWl0dGVkIHdo ZW4gaXQgaXMgdGhlIGZpcnN0IG9jY3VycmVuY2UKKyAqIHdpdGhpbiB0aGUgc2FtZSBzdWJxdWVy eSwgY2hpbGRfdGFibGVfbmFtZSBpcyBvbWl0dGVkIGZvciByZWxhdGlvbnMgdGhhdAorICogYXJl IG5vdCBjaGlsZCB0YWJsZXMsIGFuZCBzdWJxdWVyeV9uYW1lIGlzIG9taXR0ZWQgZm9yIHRoZSB0 b3Btb3N0CisgKiBxdWVyeSBsZXZlbC4gV2hlbmV2ZXIgYW4gaXRlbSBpcyBvbWl0dGVkLCB0aGUg cHJlY2VkaW5nIHB1bmN0dWF0aW9uIG1hcmsKKyAqIGlzIGFsc28gb21pdHRlZC4gIElkZW50aWZp ZXItc3R5bGUgZXNjYXBpbmcgaXMgYXBwbGllZCB0byBhbGlhc19uYW1lIGFuZAorICogc3VicXVl cnlfbmFtZS4gIFdoZW5ldmVyIHdlIGluY2x1ZGUgY2hpbGRfdGFibGVfbmFtZSwgd2UgYWx3YXlz CisgKiBzY2hlbWEtcXVhbGlmaWVkIG5hbWUsIGJ1dCB3cml0aW5nIHRoZWlyIG93biBwbGFuIGFk dmljZSBhcmUgbm90IHJlcXVpcmVkCisgKiB0byBkbyBzby4gIElkZW50aWZpZXItc3R5bGUgZXNj YXBpbmcgaXMgYXBwbGllZCB0byB0aGUgc2NoZW1hIGFuZCB0byB0aGUKKyAqIHJlbGF0aW9uIG5h bWVzIHNlcGFyYXRlbHkuCisgKgorICogVGhlIHVwc2hvdCBvZiBhbGwgb2YgdGhlc2UgcnVsZXMg aXMgdGhhdCBpbiBzaW1wbGUgY2FzZXMsIHRoZSByZWxhdGlvbgorICogaWRlbnRpZmllciBpcyB0 ZXh0dWFsbHkgaWRlbnRpY2FsIHRvIHRoZSBhbGlhcyBuYW1lLCBtYWtpbmcgbGlmZSBlYXNpZXIK KyAqIGZvciB1c2Vycy4gSG93ZXZlciwgZXZlbiBpbiBjb21wbGV4IGNhc2VzLCBldmVyeSByZWxh dGlvbiBpZGVudGlmaWVyCisgKiBmb3IgYSBnaXZlbiBxdWVyeSB3aWxsIGJlIHVuaXF1ZSAob3Ig YXQgbGVhc3Qgd2UgaG9wZSBzbzogaWYgbm90LCB0aGlzCisgKiBjb2RlIGlzIGJ1Z2d5IGFuZCB0 aGUgaWRlbnRpZmllciBmb3JtYXQgbWlnaHQgbmVlZCB0byBiZSByZXRob3VnaHQpLgorICoKKyAq IEEga2V5IGdvYWwgb2YgdGhpcyBzeXN0ZW0gaXMgdGhhdCB3ZSB3YW50IHRvIGJlIGFibGUgdG8g cmVjb25zdHJ1Y3QgdGhlCisgKiBzYW1lIGlkZW50aWZpZXJzIGR1cmluZyBhIGZ1dHVyZSBwbGFu bmluZyBjeWNsZSBmb3IgdGhlIHNhbWUgcXVlcnksIHNvCisgKiB0aGF0IGlmIGEgY2VydGFpbiBi ZWhhdmlvciBpcyBzcGVjaWZpZWQgZm9yIGEgY2VydGFpbiBpZGVudGlmaWVyLCB3ZSBjYW4KKyAq IHByb3Blcmx5IGlkZW50aWZ5IHRoZSBSVEkgZm9yIHdoaWNoIHRoYXQgYmVoYXZpb3IgaXMgbWFu ZGF0ZWQuIEluIG9yZGVyCisgKiBmb3IgdGhpcyB0byB3b3JrLCBzdWJxdWVyeSBuYW1lcyBtdXN0 IGJlIHVuaXF1ZSBhbmQga25vd24gYmVmb3JlIHRoZQorICogc3VicXVlcnkgaXMgcGxhbm5lZCwg YW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGlkZW50aWZpZXIgbXVzdCBub3QgZGVwZW5kCisgKiBv biBhbnkgcGFydCBvZiB0aGUgcXVlcnkgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBzdWJxdWVyeSBs ZXZlbC4gSW4KKyAqIHBhcnRpY3VsYXIsIG9jY3VycmVuY2VfbnVtYmVyIG11c3QgYmUgY2FsY3Vs YXRlZCByZWxhdGl2ZSB0byB0aGUgcmFuZ2UKKyAqIHRhYmxlIGZvciB0aGUgcmVsZXZhbnQgc3Vi cXVlcnksIG5vdCB0aGUgZmluYWwgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLgorICoKKyAqIENvcHly aWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYworICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAicGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK Kworc3RhdGljIEluZGV4ICpwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChJbmRleCBydGFibGVfbGVu Z3RoLCBMaXN0ICpydGFibGUsCisJCQkJCQkJCQkgIExpc3QgKmFwcGluZm9zKTsKK3N0YXRpYyBp bnQJcGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUsIEluZGV4ICp0b3BfcnRpX21h cCwKKwkJCQkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJbmRleCBydGkpOworCisvKgor ICogQ3JlYXRlIGEgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBmcm9tIHNjcmF0Y2guCisgKgorICog VGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGNhbGxlciB0byBkbyBhbGwgdGhlIGhlYXZ5IGxpZnRp bmcsIHNvIGl0J3MKKyAqIGdlbmVyYWxseSBiZXR0ZXIgdG8gdXNlIG9uZSBvZiB0aGUgZnVuY3Rp b25zIGJlbG93IGluc3RlYWQuCisgKgorICogU2VlIHRoZSBmaWxlIGhlYWRlciBjb21tZW50cyBm b3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBmb3JtYXQgb2YgYW4KKyAqIGlkZW50aWZpZXIuCisgKi8K K2NvbnN0IGNoYXIgKgorcGdwYV9pZGVudGlmaWVyX3N0cmluZyhjb25zdCBwZ3BhX2lkZW50aWZp ZXIgKnJpZCkKK3sKKwljb25zdCBjaGFyICpyZXN1bHQ7CisKKwlBc3NlcnQocmlkLT5hbGlhc19u YW1lICE9IE5VTEwpOworCXJlc3VsdCA9IHF1b3RlX2lkZW50aWZpZXIocmlkLT5hbGlhc19uYW1l KTsKKworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMCk7CisJaWYgKHJpZC0+b2NjdXJyZW5j ZSA+IDEpCisJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcyMlZCIsIHJlc3VsdCwgcmlkLT5vY2N1cnJl bmNlKTsKKworCWlmIChyaWQtPnBhcnRyZWwgIT0gTlVMTCkKKwl7CisJCWlmIChyaWQtPnBhcnRu c3AgPT0gTlVMTCkKKwkJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcy8lcyIsIHJlc3VsdCwKKwkJCQkJ CQkgIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0cmVsKSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9 IHBzcHJpbnRmKCIlcy8lcy4lcyIsIHJlc3VsdCwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZpZXIo cmlkLT5wYXJ0bnNwKSwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0cmVsKSk7 CisJfQorCisJaWYgKHJpZC0+cGxhbl9uYW1lICE9IE5VTEwpCisJCXJlc3VsdCA9IHBzcHJpbnRm KCIlc0AlcyIsIHJlc3VsdCwgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBsYW5fbmFtZSkpOworCisJ cmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENvbXB1dGUgYSByZWxhdGlvbiBpZGVudGlmaWVy IGZvciBhIHBhcnRpY3VsYXIgUlRJLgorICoKKyAqIFRoZSBjYWxsZXIgcHJvdmlkZXMgcm9vdCBh bmQgcnRpLCBhbmQgZ2V0cyB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgYmFjayB2aWEKKyAqIHRoZSBy ZW1haW5pbmcgcGFyYW1ldGVycy4KKyAqLwordm9pZAorcGdwYV9jb21wdXRlX2lkZW50aWZpZXJf YnlfcnRpKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBydGksCisJCQkJCQkJICAgcGdwYV9pZGVu dGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXRvcF9ydGkgPSBydGk7CisJaW50CQkJb2NjdXJyZW5j ZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlOworCVJhbmdlVGJsRW50cnkgKnRvcF9ydGU7CisJ Y2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7CisKKwkv KgorCSAqIElmIHRoaXMgaXMgYSBjaGlsZCBSVEUsIGZpbmQgdGhlIHRvcG1vc3QgcGFyZW50IHRo YXQgaXMgc3RpbGwgb2YgdHlwZQorCSAqIFJURV9SRUxBVElPTi4gV2UgZG8gdGhpcyBiZWNhdXNl IHdlIGlkZW50aWZ5IGNoaWxkcmVuIG9mIHBhcnRpdGlvbmVkCisJICogdGFibGVzIGJ5IHRoZSBu YW1lIG9mIHRoZSBjaGlsZCB0YWJsZSwgYnV0IHN1YnF1ZXJpZXMgY2FuIGFsc28gaGF2ZQorCSAq IGNoaWxkIHJlbHMgYW5kIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhvc2UgaGVyZS4KKwkgKi8KKwlm b3IgKDs7KQorCXsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbzsKKwkJUmFuZ2VUYmxFbnRyeSAq cGFyZW50X3J0ZTsKKworCQkvKiBhcHBlbmRfcmVsX2FycmF5IGNhbiBiZSBOVUxMIGlmIHRoZXJl IGFyZSBubyBjaGlsZHJlbiAqLworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSA9PSBOVUxM IHx8CisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbdG9wX3J0aV0pID09IE5V TEwpCisJCQlicmVhazsKKworCQlwYXJlbnRfcnRlID0gcGxhbm5lcl9ydF9mZXRjaChhcHBpbmZv LT5wYXJlbnRfcmVsaWQsIHJvb3QpOworCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCAhPSBSVEVf UkVMQVRJT04pCisJCQlicmVhazsKKworCQl0b3BfcnRpID0gYXBwaW5mby0+cGFyZW50X3JlbGlk OworCX0KKworCS8qIEdldCB0aGUgcmFuZ2UgdGFibGUgZW50cmllcyBmb3IgdGhlIFJUSSBhbmQg dG9wIFJUSS4gKi8KKwlydGUgPSBwbGFubmVyX3J0X2ZldGNoKHJ0aSwgcm9vdCk7CisJdG9wX3J0 ZSA9IHBsYW5uZXJfcnRfZmV0Y2godG9wX3J0aSwgcm9vdCk7CisJQXNzZXJ0KHJ0ZS0+cnRla2lu ZCAhPSBSVEVfSk9JTik7CisJQXNzZXJ0KHRvcF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4pOwor CisJLyogV29yayBvdXQgdGhlIGNvcnJlY3Qgb2NjdXJyZW5jZSBudW1iZXIuICovCisJZm9yIChJ bmRleCBwcmlvcl9ydGkgPSAxOyBwcmlvcl9ydGkgPCB0b3BfcnRpOyArK3ByaW9yX3J0aSkKKwl7 CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbzsK KworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQgaXMg YSByZWxhdGlvbiwgc2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRyaWVz IGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQgbmFt ZSBvZiB0aGUgdGFibGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3VycmVu Y2VzCisJCSAqIG9mIHRoZSBzYW1lIHRhYmxlLgorCQkgKgorCQkgKiBOQjogYXBwZW5kX3JlbF9h cnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4KKwkJICovCisJCWlmIChy b290LT5hcHBlbmRfcmVsX2FycmF5ICE9IE5VTEwgJiYKKwkJCShhcHBpbmZvID0gcm9vdC0+YXBw ZW5kX3JlbF9hcnJheVtwcmlvcl9ydGldKSAhPSBOVUxMKQorCQl7CisJCQlSYW5nZVRibEVudHJ5 ICpwYXJlbnRfcnRlOworCisJCQlwYXJlbnRfcnRlID0gcGxhbm5lcl9ydF9mZXRjaChhcHBpbmZv LT5wYXJlbnRfcmVsaWQsIHJvb3QpOworCQkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgPT0gUlRF X1JFTEFUSU9OKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2tpcCBOVUxMIGVudHJpZXMg YW5kIGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKHByaW9yX3J0aSwg cm9vdCk7CisJCWlmIChwcmlvcl9ydGUgPT0gTlVMTCB8fCBwcmlvcl9ydGUtPnJ0ZWtpbmQgPT0g UlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKiBTa2lwIGlmIHRoZSBhbGlhcyBuYW1lIGRp ZmZlcnMuICovCisJCWlmIChzdHJjbXAocHJpb3JfcnRlLT5lcmVmLT5hbGlhc25hbWUsIHJ0ZS0+ ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJLyogTG9va3MgbGlrZSBh IHRydWUgZHVwbGljYXRlLiAqLworCQkrK29jY3VycmVuY2U7CisJfQorCisJLyogSWYgdGhpcyBp cyBhIGNoaWxkIHRhYmxlLCBnZXQgdGhlIHNjaGVtYSBhbmQgcmVsYXRpb24gbmFtZXMuICovCisJ aWYgKHJ0aSAhPSB0b3BfcnRpKQorCXsKKwkJcGFydG5zcCA9IGdldF9uYW1lc3BhY2VfbmFtZV9v cl90ZW1wKGdldF9yZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJcGFydHJlbCA9IGdldF9y ZWxfbmFtZShydGUtPnJlbGlkKTsKKwl9CisKKwkvKiBPSywgd2UgaGF2ZSBhbGwgdGhlIGFuc3dl cnMgd2UgbmVlZC4gUmV0dXJuIHRoZW0gdG8gdGhlIGNhbGxlci4gKi8KKwlyaWQtPmFsaWFzX25h bWUgPSB0b3BfcnRlLT5lcmVmLT5hbGlhc25hbWU7CisJcmlkLT5vY2N1cnJlbmNlID0gb2NjdXJy ZW5jZTsKKwlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCXJpZC0+cGFydHJlbCA9IHBhcnRyZWw7 CisJcmlkLT5wbGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7Cit9CisKKy8qCisgKiBDb21wdXRl IGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBzZXQgb2YgUlRJcywgZXhjZXB0IGZvciBhbnkg UlRFX0pPSU4KKyAqIFJUSXMgdGhhdCBtYXkgYmUgcHJlc2VudC4KKyAqCisgKiBSVEVfSk9JTiBl bnRyaWVzIGFyZSBleGNsdWRlZCBiZWNhdXNlIHRoZXkgY2Fubm90IGJlIG1lbnRpb25lZCBieSBw bGFuCisgKiBhZHZpY2UuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFr aW5nIHN1cmUgdGhhdCB0aGUgdGtleXMgYXJyYXkgaXMgbGFyZ2UKKyAqIGVub3VnaCB0byBzdG9y ZSB0aGUgcmVzdWx0cy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2Yg aWRlbnRpZmllcnMgY29tcHV0ZWQuCisgKi8KK2ludAorcGdwYV9jb21wdXRlX2lkZW50aWZpZXJz X2J5X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkJCQkJ CSAgIHBncGFfaWRlbnRpZmllciAqcmlkcykKK3sKKwlpbnQJCQljb3VudCA9IDA7CisJaW50CQkJ cnRpID0gLTE7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkp ID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBwbGFubmVyX3J0X2ZldGNoKHJ0aSwg cm9vdCk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOwor CQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwgcnRpLCAmcmlkc1tjb3VudCsr XSk7CisJfQorCisJQXNzZXJ0KGNvdW50ID4gMCk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgor ICogQ3JlYXRlIGFuIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIGZvciBhbGwgdGhl IG5vbi1OVUxMLAorICogbm9uLVJURV9KT0lOIGVudHJpZXMgaW4gdGhlIFBsYW5uZWRTdG10J3Mg cmFuZ2UgdGFibGUuCisgKi8KK3BncGFfaWRlbnRpZmllciAqCitwZ3BhX2NyZWF0ZV9pZGVudGlm aWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlJbmRleAkJcnRh YmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUpOworCXBncGFfaWRlbnRpZmll ciAqcmVzdWx0ID0gcGFsbG9jMF9hcnJheShwZ3BhX2lkZW50aWZpZXIsIHJ0YWJsZV9sZW5ndGgp OworCUluZGV4CSAgICp0b3BfcnRpX21hcDsKKwlpbnQJCQlydGluZm9pbmRleCA9IDA7CisJU3Vi UGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKKwlTdWJQbGFuUlRJbmZvICpuZXh0cnRpbmZvID0g TlVMTDsKKworCS8qCisJICogQWNjb3VudCBmb3IgcmVsYXRpb25zIGFkZGRlZCBieSBpbmhlcml0 YW5jZSBleHBhbnNpb24gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJsZXMuCisJICovCisJdG9wX3J0 aV9tYXAgPSBwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChydGFibGVfbGVuZ3RoLCBwc3RtdC0+cnRh YmxlLAorCQkJCQkJCQkJCSAgcHN0bXQtPmFwcGVuZFJlbGF0aW9ucyk7CisKKwkvKgorCSAqIFdo ZW4gd2UgYmVnaW4gaXRlcmF0aW5nLCB3ZSdyZSBwcm9jZXNzaW5nIHRoZSBwb3J0aW9uIG9mIHRo ZSByYW5nZQorCSAqIHRhYmxlIHRoYXQgb3JpZ2luYXRlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgUGxh bm5lckluZm8sIHNvIHN1YnJ0aW5mbyBpcworCSAqIE5VTEwuIExhdGVyLCBzdWJydGluZm8gd2ls bCBiZSB0aGUgU3ViUGxhblJUSW5mbyBmb3IgdGhlIHN1YnF1ZXJ5IHdob3NlCisJICogcG9ydGlv biBvZiB0aGUgcmFuZ2UgdGFibGUgd2UgYXJlIHByb2Nlc3NpbmcuIG5leHRydGluZm8gaXMgYWx3 YXlzIHRoZQorCSAqIFN1YlBsYW5SVEluZm8gdGhhdCBmb2xsb3dzIHRoZSBjdXJyZW50IG9uZSwg aWYgYW55LCBzbyB3aGVuIHdlJ3JlCisJICogcHJvY2Vzc2luZyB0aGUgdG9wLWxldmVsIHF1ZXJ5 J3MgcG9ydGlvbiBvZiB0aGUgcmFuZ2UgdGFibGUsIHRoZSBuZXh0CisJICogU3ViUGxhblJUSW5m byBpcyB0aGUgdmVyeSBmaXJzdCBvbmUuCisJICovCisJaWYgKHBzdG10LT5zdWJydGluZm9zICE9 IE5VTEwpCisJCW5leHRydGluZm8gPSBsaW5pdGlhbChwc3RtdC0+c3VicnRpbmZvcyk7CisKKwkv KiBNYWluIGxvb3Agb3ZlciB0aGUgcmFuZ2UgdGFibGUuICovCisJZm9yIChJbmRleCBydGkgPSAx OyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgcnRpKyspCisJeworCQljb25zdCBjaGFyICpwbGFuX25h bWU7CisJCUluZGV4CQl0b3BfcnRpOworCQlSYW5nZVRibEVudHJ5ICpydGU7CisJCVJhbmdlVGJs RW50cnkgKnRvcF9ydGU7CisJCWNoYXIJICAgKnBhcnRuc3AgPSBOVUxMOworCQljaGFyCSAgICpw YXJ0cmVsID0gTlVMTDsKKwkJaW50CQkJb2NjdXJyZW5jZTsKKwkJcGdwYV9pZGVudGlmaWVyICpy aWQ7CisKKwkJLyoKKwkJICogQWR2YW5jZSB0byB0aGUgbmV4dCBTdWJQbGFuUlRJbmZvLCBpZiBp dCdzIHRpbWUgdG8gZG8gdGhhdC4KKwkJICoKKwkJICogVGhpcyBsb29wIHByb2JhYmx5IHNob3Vs ZG4ndCBldmVyIGl0ZXJhdGUgbW9yZSB0aGFuIG9uY2UsIGJlY2F1c2UKKwkJICogdGhhdCB3b3Vs ZCBpbXBseSB0aGF0IGEgc3VicXVlcnkgd2FzIHBsYW5uZWQgYnV0IGFkZGVkIG5vdGhpbmcgdG8K KwkJICogdGhlIHJhbmdlIHRhYmxlOyBidXQgbGV0J3MgYmUgZGVmZW5zaXZlIGFuZCBhc3N1bWUg aXQgY2FuIGhhcHBlbi4KKwkJICovCisJCXdoaWxlIChuZXh0cnRpbmZvICE9IE5VTEwgJiYgcnRp ID4gbmV4dHJ0aW5mby0+cnRvZmZzZXQpCisJCXsKKwkJCXJ0aW5mbyA9IG5leHRydGluZm87CisJ CQlpZiAoKytydGluZm9pbmRleCA+PSBsaXN0X2xlbmd0aChwc3RtdC0+c3VicnRpbmZvcykpCisJ CQkJbmV4dHJ0aW5mbyA9IE5VTEw7CisJCQllbHNlCisJCQkJbmV4dHJ0aW5mbyA9IGxpc3RfbnRo KHBzdG10LT5zdWJydGluZm9zLCBydGluZm9pbmRleCk7CisJCX0KKworCQkvKiBGZXRjaCB0aGUg cmFuZ2UgdGFibGUgZW50cnksIGlmIGFueS4gKi8KKwkJcnRlID0gcnRfZmV0Y2gocnRpLCBwc3Rt dC0+cnRhYmxlKTsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBhbmQgZG9uJ3QgbmVlZCB0byBpZGVu dGlmeSBudWxsIGVudHJpZXMsIGFuZCB3ZSBkb24ndCB3YW50CisJCSAqIHRvIGlkZW50aWZ5IGpv aW4gZW50cmllcy4KKwkJICovCisJCWlmIChydGUgPT0gTlVMTCB8fCBydGUtPnJ0ZWtpbmQgPT0g UlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBhIHJl bGF0aW9uIGFkZGVkIGJ5IHBhcnRpdGlvbmVkIHRhYmxlIGV4cGFuc2lvbiwKKwkJICogdGhlbiB0 aGUgdG9wIFJUSS9SVEUgYXJlIGp1c3QgdGhlIHNhbWUgYXMgdGhpcyBSVEkvUlRFLiBPdGhlcndp c2UsCisJCSAqIHdlIG5lZWQgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgdG9wIFJUSS9SVEUsIGFu ZCBtdXN0IGFsc28gZmV0Y2gKKwkJICogdGhlIHBhcnRpdGlvbiBzY2hlbWEgYW5kIG5hbWUuCisJ CSAqLworCQl0b3BfcnRpID0gdG9wX3J0aV9tYXBbcnRpIC0gMV07CisJCWlmIChydGkgPT0gdG9w X3J0aSkKKwkJCXRvcF9ydGUgPSBydGU7CisJCWVsc2UKKwkJeworCQkJdG9wX3J0ZSA9IHJ0X2Zl dGNoKHRvcF9ydGksIHBzdG10LT5ydGFibGUpOworCQkJcGFydG5zcCA9CisJCQkJZ2V0X25hbWVz cGFjZV9uYW1lX29yX3RlbXAoZ2V0X3JlbF9uYW1lc3BhY2UocnRlLT5yZWxpZCkpOworCQkJcGFy dHJlbCA9IGdldF9yZWxfbmFtZShydGUtPnJlbGlkKTsKKwkJfQorCisJCS8qIENvbXB1dGUgdGhl IGNvcnJlY3Qgb2NjdXJyZW5jZSBudW1iZXIuICovCisJCW9jY3VycmVuY2UgPSBwZ3BhX29jY3Vy cmVuY2VfbnVtYmVyKHBzdG10LT5ydGFibGUsIHRvcF9ydGlfbWFwLAorCQkJCQkJCQkJCQlydGlu Zm8sIHRvcF9ydGkpOworCisJCS8qIEdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBwbGFuIChO VUxMIGZvciB0b3BsZXZlbCBxdWVyeSkuICovCisJCXBsYW5fbmFtZSA9IHJ0aW5mbyA9PSBOVUxM ID8gTlVMTCA6IHJ0aW5mby0+cGxhbl9uYW1lOworCisJCS8qIFNhdmUgYWxsIHRoZSBkZXRhaWxz IHdlJ3ZlIGRlcml2ZWQuICovCisJCXJpZCA9ICZyZXN1bHRbcnRpIC0gMV07CisJCXJpZC0+YWxp YXNfbmFtZSA9IHRvcF9ydGUtPmVyZWYtPmFsaWFzbmFtZTsKKwkJcmlkLT5vY2N1cnJlbmNlID0g b2NjdXJyZW5jZTsKKwkJcmlkLT5wYXJ0bnNwID0gcGFydG5zcDsKKwkJcmlkLT5wYXJ0cmVsID0g cGFydHJlbDsKKwkJcmlkLT5wbGFuX25hbWUgPSBwbGFuX25hbWU7CisJfQorCisJcmV0dXJuIHJl c3VsdDsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYSBwZ3BhX2lkZW50aWZpZXIgaW4gdGhlIGFy cmF5IG9mIGlkZW50aWZpZXJzIGNvbXB1dGVkIGZvciB0aGUKKyAqIHJhbmdlIHRhYmxlLiBJZiBl eGFjdGx5IG9uZSBtYXRjaCBpcyBmb3VuZCwgcmV0dXJuIHRoZSBtYXRjaGluZyBSVEk7IGVsc2UK KyAqIHJldHVybiAwLgorICovCitJbmRleAorcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZp ZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50 aWZpZXJzLAorCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXJlc3Vs dCA9IDA7CisKKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyArK3J0 aSkKKwl7CisJCXBncGFfaWRlbnRpZmllciAqcnRpX3JpZCA9ICZydF9pZGVudGlmaWVyc1tydGkg LSAxXTsKKworCQkvKiBJZiB0aGVyZSdzIG5vIGlkZW50aWZpZXIgZm9yIHRoaXMgUlRJLCBza2lw IGl0LiAqLworCQlpZiAocnRpX3JpZC0+YWxpYXNfbmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7 CisKKwkJLyoKKwkJICogSWYgaXQgbWF0Y2hlcywgcmV0dXJuIHRoaXMgUlRJLiBBcyB1c3VhbCwg YW4gb21pdHRlZCBwYXJ0aXRpb24KKwkJICogc2NoZW1hIG1hdGNoZXMgYW55dGhpbmcsIGJ1dCBw YXJ0aXRpb24gYW5kIHBsYW4gbmFtZXMgbXVzdCBlaXRoZXIKKwkJICogbWF0Y2ggZXhhY3RseSBv ciBiZSBvbWl0dGVkIG9uIGJvdGggc2lkZXMuCisJCSAqLworCQlpZiAoc3RyY21wKHJpZC0+YWxp YXNfbmFtZSwgcnRpX3JpZC0+YWxpYXNfbmFtZSkgPT0gMCAmJgorCQkJcmlkLT5vY2N1cnJlbmNl ID09IHJ0aV9yaWQtPm9jY3VycmVuY2UgJiYKKwkJCShyaWQtPnBhcnRuc3AgPT0gTlVMTCB8fCBy dGlfcmlkLT5wYXJ0bnNwID09IE5VTEwgfHwKKwkJCSBzdHJjbXAocmlkLT5wYXJ0bnNwLCBydGlf cmlkLT5wYXJ0bnNwKSA9PSAwKSAmJgorCQkJc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlk LT5wYXJ0cmVsLCBydGlfcmlkLT5wYXJ0cmVsKSAmJgorCQkJc3RyaW5nc19lcXVhbF9vcl9ib3Ro X251bGwocmlkLT5wbGFuX25hbWUsIHJ0aV9yaWQtPnBsYW5fbmFtZSkpCisJCXsKKwkJCWlmIChy ZXN1bHQgIT0gMCkKKwkJCXsKKwkJCQkvKiBNdWx0aXBsZSBtYXRjaGVzIHdlcmUgZm91bmQuICov CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXN1bHQgPSBydGk7CisJCX0KKwl9CisKKwlyZXR1 cm4gcmVzdWx0OworfQorCisvKgorICogQnVpbGQgYSBtYXBwaW5nIGZyb20gZWFjaCBSVEkgdG8g dGhlIFJUSSB3aG9zZSBhbGlhc19uYW1lIHdpbGwgYmUgdXNlZCB0bworICogY29uc3RydWN0IHRo ZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyLgorICoKKyAqIEZvciBjaGlsZCByZWxhdGlvbnMsIHRo aXMgaXMgdGhlIHRvcG1vc3QgcGFyZW50IHRoYXQgaXMgc3RpbGwgb2YgdHlwZQorICogUlRFX1JF TEFUSU9OLiBGb3Igb3RoZXIgcmVsYXRpb25zLCBpdCdzIGp1c3QgdGhlIG9yaWdpbmFsIFJUSS4K KyAqCisgKiBTaW5jZSB3ZSdyZSBldmVudHVhbGx5IGdvaW5nIHRvIG5lZWQgdGhpcyBpbmZvcm1h dGlvbiBmb3IgZXZlcnkgUlRJIGluCisgKiB0aGUgcmFuZ2UgdGFibGUsIGl0J3MgYmVzdCB0byBj b21wdXRlIGFsbCB0aGUgYW5zd2VycyBpbiBhIHNpbmdsZSBwYXNzIG92ZXIKKyAqIHRoZSBBcHBl bmRSZWxJbmZvIGxpc3QuIE90aGVyd2lzZSwgd2UgbWlnaHQgZW5kIHVwIHNlYXJjaGluZyB0aHJv dWdoIHRoYXQKKyAqIGxpc3QgcmVwZWF0ZWRseSBmb3IgZW50cmllcyBvZiBpbnRlcmVzdC4KKyAq CisgKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IGlzIHVzZXMgemVyby1iYXNlZCBpbmRl eGluZywgd2hpbGUgUlRJcyB1c2UKKyAqIDEtYmFzZWQgaW5kZXhpbmcsIHNvIHN1YnRyYWN0IDEg ZnJvbSB0aGUgUlRJIGJlZm9yZSBsb29raW5nIGl0IHVwIGluIHRoZQorICogYXJyYXkuCisgKi8K K3N0YXRpYyBJbmRleCAqCitwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChJbmRleCBydGFibGVfbGVu Z3RoLCBMaXN0ICpydGFibGUsIExpc3QgKmFwcGluZm9zKQoreworCUluZGV4CSAgICp0b3BfcnRp X21hcCA9IHBhbGxvYzBfYXJyYXkoSW5kZXgsIHJ0YWJsZV9sZW5ndGgpOworCisJLyogSW5pdGlh bGx5LCBtYWtlIGV2ZXJ5IFJUSSBwb2ludCB0byBpdHNlbGYuICovCisJZm9yIChJbmRleCBydGkg PSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJCXRvcF9ydGlfbWFwW3J0aSAtIDFd ID0gcnRpOworCisJLyogVXBkYXRlIHRoZSBtYXAgZm9yIGVhY2ggQXBwZW5kUmVsSW5mbyBvYmpl Y3QuICovCisJZm9yZWFjaF9ub2RlKEFwcGVuZFJlbEluZm8sIGFwcGluZm8sIGFwcGluZm9zKQor CXsKKwkJSW5kZXgJCXBhcmVudF9ydGkgPSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQ7CisJCVJhbmdl VGJsRW50cnkgKnBhcmVudF9ydGUgPSBydF9mZXRjaChwYXJlbnRfcnRpLCBydGFibGUpOworCisJ CS8qIElmIHRoZSBwYXJlbnQgaXMgbm90IFJURV9SRUxBVElPTiwgaWdub3JlIHRoaXMgZW50cnku ICovCisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCWNvbnRp bnVlOworCisJCS8qCisJCSAqIE1hcCB0aGUgY2hpbGQgdG8gd2hlcmV2ZXIgd2UgbWFwcGVkIHRo ZSBwYXJlbnQuIFBhcmVudHMgYWx3YXlzCisJCSAqIHByZWNlZGUgdGhlaXIgY2hpbGRyZW4gaW4g dGhlIEFwcGVuZFJlbEluZm8gbGlzdCwgc28gdGhpcyBzaG91bGQKKwkJICogd29yayBvdXQuCisJ CSAqLworCQl0b3BfcnRpX21hcFthcHBpbmZvLT5jaGlsZF9yZWxpZCAtIDFdID0gdG9wX3J0aV9t YXBbcGFyZW50X3J0aSAtIDFdOworCX0KKworCXJldHVybiB0b3BfcnRpX21hcDsKK30KKworLyoK KyAqIEZpbmQgdGhlIG9jY3VyZW5jZSBudW1iZXIgb2YgYSBjZXJ0YWluIHJlbGF0aW9uIHdpdGhp biBhIGNlcnRhaW4gc3VicXVlcnkuCisgKgorICogVGhlIHNhbWUgYWxpYXMgbmFtZSBjYW4gb2Nj dXIgbXVsdGlwbGUgdGltZXMgd2l0aGluIGEgc3VicXVlcnksIGJ1dCB3ZSB3YW50CisgKiB0byBk aXNhbWJpZ3VhdGUgYnkgZ2l2aW5nIGRpZmZlcmVudCBvY2N1cnJlbmNlcyBkaWZmZXJlbnQgaW50 ZWdlciBpbmRleGVzLgorICogSG93ZXZlciwgY2hpbGQgdGFibGVzIGFyZSBkaXNhbWJpZ3VhdGVk IGJ5IGluY2x1ZGluZyB0aGUgdGFibGUgbmFtZSByYXRoZXIKKyAqIHRoYW4gYnkgaW5jcmVtZW50 aW5nIHRoZSBvY2N1cnJlbmNlIG51bWJlcjsgYW5kIGpvaW5zIGFyZSBub3QgbmFtZWQgYW5kIHNv CisgKiBzaG91bGRuJ3QgaW5jcmVtZW50IHRoZSBvY2N1cmVuY2UgbnVtYmVyIGVpdGhlci4KKyAq Lworc3RhdGljIGludAorcGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUsIEluZGV4 ICp0b3BfcnRpX21hcCwKKwkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJbmRleCBydGkp Cit7CisJSW5kZXgJCXJ0b2Zmc2V0ID0gKHJ0aW5mbyA9PSBOVUxMKSA/IDAgOiBydGluZm8tPnJ0 b2Zmc2V0OworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0 X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCWZvciAoSW5kZXggcHJpb3JfcnRpID0gcnRvZmZzZXQg KyAxOyBwcmlvcl9ydGkgPCBydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAq cHJpb3JfcnRlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBwYXJl bnQgdGhhdCBpcyBhIHJlbGF0aW9uLCBza2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdlIHRh YmxlIGVudHJpZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1hCisJ CSAqIGFuZCBuYW1lIG9mIHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2VwYXJh dGUgb2NjdXJyZW5jZXMKKwkJICogb2YgdGhlIHNhbWUgdGFibGUuCisJCSAqLworCQlpZiAodG9w X3J0aV9tYXBbcHJpb3JfcnRpIC0gMV0gIT0gcHJpb3JfcnRpKQorCQkJY29udGludWU7CisKKwkJ LyogU2tpcCBqb2lucy4gKi8KKwkJcHJpb3JfcnRlID0gcnRfZmV0Y2gocHJpb3JfcnRpLCBydGFi bGUpOworCQlpZiAocHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7 CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlpZiAoc3RyY21w KHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFtZSkgIT0gMCkK KwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0ZS4gKi8KKwkJ KytvY2N1cnJlbmNlOworCX0KKworCXJldHVybiBvY2N1cnJlbmNlOworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmIwMDBkMmI3MDgxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaApAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBwZ3BhX2lkZW50aWZpZXIuaAorICoJICBjcmVhdGUgYXBwcm9wcmlhdGUg aWRlbnRpZmllcnMgZm9yIHJhbmdlIHRhYmxlIGVudHJpZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkg IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaWZuZGVmIFBHUEFfSURFTlRJRklFUl9ICisjZGVmaW5lIFBHUEFf SURFTlRJRklFUl9ICisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJu b2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9pZGVudGlmaWVyCit7CisJ Y29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwlpbnQJCQlvY2N1cnJlbmNlOworCWNvbnN0IGNoYXIg KnBhcnRuc3A7CisJY29uc3QgY2hhciAqcGFydHJlbDsKKwljb25zdCBjaGFyICpwbGFuX25hbWU7 Cit9IHBncGFfaWRlbnRpZmllcjsKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNvbXBh cmluZyBwb3NzaWJseS1OVUxMIHN0cmluZ3MuICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3N0cmlu Z3NfZXF1YWxfb3JfYm90aF9udWxsKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJ aWYgKGEgPT0gYikKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAoYSA9PSBOVUxMIHx8IGIgPT0g TlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChhLCBiKSA9PSAw OworfQorCitleHRlcm4gY29uc3QgY2hhciAqcGdwYV9pZGVudGlmaWVyX3N0cmluZyhjb25zdCBw Z3BhX2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gdm9pZCBwZ3BhX2NvbXB1dGVfaWRlbnRpZmll cl9ieV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkJCQkgICBwZ3Bh X2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gaW50CXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19i eV9yZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVs aWRzLAorCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMpOworZXh0ZXJuIHBncGFf aWRlbnRpZmllciAqcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChQbGFu bmVkU3RtdCAqcHN0bXQpOworCitleHRlcm4gSW5kZXggcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lk ZW50aWZpZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVy ICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmVjOGUxYTY2NmVjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpAQCAtMCwwICsxLDYyOSBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogcGdwYV9qb2luLmMKKyAqCSAgYW5hbHlzaXMgb2Ygam9pbnMgaW4g UGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2pvaW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgi CisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5o IgorI2luY2x1ZGUgIm5vZGVzL3ByaW50LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5o IgorCisvKgorICogVGVtcG9yYXJ5IG9iamVjdCB1c2VkIHdoZW4gdW5yb2xsaW5nIGEgam9pbiB0 cmVlLgorICovCitzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyCit7CisJdW5zaWduZWQJbmFsbG9j YXRlZDsKKwl1bnNpZ25lZAludXNlZDsKKwlQbGFuCSAgICpvdXRlcl9zdWJwbGFuOworCUVsaWRl ZE5vZGUgKm91dGVyX2VsaWRlZF9ub2RlOworCWJvb2wJCW91dGVyX2JlbmVhdGhfYW55X2dhdGhl cjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCVBsYW4JICAqKmlubmVyX3N1YnBs YW5zOworCUVsaWRlZE5vZGUgKippbm5lcl9lbGlkZWRfbm9kZXM7CisJcGdwYV9qb2luX3Vucm9s bGVyICoqaW5uZXJfdW5yb2xsZXJzOworCWJvb2wJICAgKmlubmVyX2JlbmVhdGhfYW55X2dhdGhl cjsKK307CisKK3N0YXRpYyBwZ3BhX2pvaW5fc3RyYXRlZ3kgcGdwYV9kZWNvbXBvc2Vfam9pbihw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJICBQbGFuICpwbGFu LAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsb3V0ZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAqKnJl YWxpbm5lciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVyLAorCQkJ CQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsaW5uZXIsCisJCQkJCQkJCQkJCSAgYm9v bCAqZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJCQkJCQkJICBib29sICpmb3VuZF9hbnlf aW5uZXJfZ2F0aGVyKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3BhX2Rlc2NlbmRfbm9kZShQbGFu bmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3BhX2Rl c2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJ CQkJCSAgIGJvb2wgKmZvdW5kX2FueV9nYXRoZXIpOworc3RhdGljIGJvb2wgcGdwYV9kZXNjZW5k X2FueV91bmlxdWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJCUVs aWRlZE5vZGUgKiplbGlkZWRfbm9kZSk7CisKK3N0YXRpYyBib29sIGlzX3Jlc3VsdF9ub2RlX3dp dGhfY2hpbGQoUGxhbiAqcGxhbik7CitzdGF0aWMgYm9vbCBpc19zb3J0aW5nX3BsYW4oUGxhbiAq cGxhbik7CisKKy8qCisgKiBDcmVhdGUgYW4gaW5pdGlhbGx5LWVtcHR5IG9iamVjdCBmb3IgdW5y b2xsaW5nIGpvaW5zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGhlbHBlciBvYmpl Y3QgdGhhdCBjYW4gbGF0ZXIgYmUgdXNlZCB0byBjcmVhdGUgYQorICogcGdwYV91bnJvbGxlZF9q b2luLCBhZnRlciBmaXJzdCBjYWxsaW5nIHBncGFfdW5yb2xsX2pvaW4gb25lIG9yIG1vcmUgdGlt ZXMuCisgKi8KK3BncGFfam9pbl91bnJvbGxlciAqCitwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVy KHZvaWQpCit7CisJcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyOworCisJam9pbl91 bnJvbGxlciA9IHBhbGxvYzBfb2JqZWN0KHBncGFfam9pbl91bnJvbGxlcik7CisJam9pbl91bnJv bGxlci0+bmFsbG9jYXRlZCA9IDQ7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQlwYWxs b2NfYXJyYXkocGdwYV9qb2luX3N0cmF0ZWd5LCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsK Kwlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCXBhbGxvY19hcnJheShQbGFuICos IGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRl ZF9ub2RlcyA9CisJCXBhbGxvY19hcnJheShFbGlkZWROb2RlICosIGpvaW5fdW5yb2xsZXItPm5h bGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCXBhbGxvY19h cnJheShwZ3BhX2pvaW5fdW5yb2xsZXIgKiwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJ am9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJcGFsbG9jX2FycmF5 KGJvb2wsIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCisJcmV0dXJuIGpvaW5fdW5yb2xs ZXI7Cit9CisKKy8qCisgKiBVbnJvbGwgb25lIGxldmVsIG9mIGFuIHVucm9sbGFibGUgam9pbiB0 cmVlLgorICoKKyAqIE91ciBiYXNpYyBnb2FsIGhlcmUgaXMgdG8gdW5yb2xsIGpvaW4gdHJlZXMg YXMgdGhleSBvY2N1ciBpbiB0aGUgUGxhbgorICogdHJlZSBpbnRvIGEgc2ltcGxlciBhbmQgbW9y ZSByZWd1bGFyIHN0cnVjdHVyZSB0aGF0IHdlIGNhbiBtb3JlIGVhc2lseQorICogdXNlIGZvciBm dXJ0aGVyIHByb2Nlc3NpbmcuIFVucm9sbGluZyBpcyBvdXRlci1kZWVwLCBzbyBpZiB0aGUgcGxh biB0cmVlCisgKiBoYXMgSm9pbjEoSm9pbjIoQSxCKSxKb2luMyhDLEQpKSwgdGhlIHNhbWUgam9p biB1bnJvbGxlciBvYmplY3Qgc2hvdWxkIGJlCisgKiB1c2VkIGZvciBKb2luMSBhbmQgSm9pbjIs IGJ1dCBhIGRpZmZlcmVudCBvbmUgd2lsbCBiZSBuZWVkZWQgZm9yIEpvaW4zLAorICogc2luY2Ug dGhhdCBpbnZvbHZlcyBhIGpvaW4gd2l0aGluIHRoZSAqaW5uZXIqIHNpZGUgb2YgYW5vdGhlciBq b2luLgorICoKKyAqIHBncGFfcGxhbl93YWxrZXIgY3JlYXRlcyBhICJ0b3AgbGV2ZWwiIGpvaW4g dW5yb2xsZXIgb2JqZWN0IHdoZW4gaXQKKyAqIGVuY291bnRlcnMgYSBqb2luIGluIGEgcG9ydGlv biBvZiB0aGUgcGxhbiB0cmVlIGluIHdoaWNoIG5vIGpvaW4gdW5yb2xsZXIKKyAqIGlzIGFscmVh ZHkgYWN0aXZlLiBGcm9tIHRoZXJlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBk ZXRlcm1pbmcKKyAqIHRvIHdoYXQgcG9ydGlvbiBvZiB0aGUgcGxhbiB0cmVlIHRoYXQgam9pbiB1 bnJvbGxlciBhcHBsaWVzLCBhbmQgZm9yCisgKiBjcmVhdGluZyBhbnkgc3Vib3JkaW5hdGUgam9p biB1bnJvbGxlciBvYmplY3RzIHRoYXQgYXJlIG5lZWRlZCBhcyBhIHJlc3VsdAorICogb2Ygbm9u LW91dGVyLWRlZXAgam9pbiB0cmVlcy4gV2UgZG8gdGhpcyBieSByZXR1cm5pbmcgdGhlIGpvaW4g dW5yb2xsZXIKKyAqIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgZnVydGhlciB0cmF2 ZXJzYWwgb2YgdGhlIG91dGVyIGFuZCBpbm5lcgorICogc3VidHJlZXMgb2YgdGhlIGN1cnJlbnQg cGxhbiBub2RlIHZpYSAqb3V0ZXJfam9pbl91bnJvbGxlciBhbmQKKyAqICppbm5lcl9qb2luX3Vu cm9sbGVyLCByZXNwZWN0aXZlbHkuCisgKi8KK3ZvaWQKK3BncGFfdW5yb2xsX2pvaW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJIGJvb2wgYmVuZWF0 aF9hbnlfZ2F0aGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJ CQkJIHBncGFfam9pbl91bnJvbGxlciAqKm91dGVyX2pvaW5fdW5yb2xsZXIsCisJCQkJIHBncGFf am9pbl91bnJvbGxlciAqKmlubmVyX2pvaW5fdW5yb2xsZXIpCit7CisJcGdwYV9qb2luX3N0cmF0 ZWd5IHN0cmF0ZWd5OworCVBsYW4JICAgKnJlYWxpbm5lciwKKwkJCSAgICpyZWFsb3V0ZXI7CisJ RWxpZGVkTm9kZSAqZWxpZGVkaW5uZXIsCisJCQkgICAqZWxpZGVkb3V0ZXI7CisJaW50CQkJbjsK Kwlib29sCQlmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyID0gZmFsc2U7CisJYm9vbAkJZm91bmRfYW55 X2lubmVyX2dhdGhlciA9IGZhbHNlOworCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXIgIT0gTlVMTCk7 CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcGFzcyB0aGUgam9pbl91bnJvbGxlciBvYmplY3QgZG93 biB0aHJvdWdoIGNlcnRhaW4gdHlwZXMgb2YKKwkgKiBwbGFuIG5vZGVzIC0tIGFueXRoaW5nIHRo YXQncyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3ksIGFuZAorCSAqIGFueSBv dGhlciBub2RlcyB0aGF0IGNhbiBvY2N1ciBpbiBhIGpvaW4gdHJlZSBkZXNwaXRlIG5vdCBiZWlu ZyBzY2FucworCSAqIG9yIGpvaW5zLgorCSAqCisJICogVGhpcyBpbmNsdWRlczoKKwkgKgorCSAq ICgxKSBNYXRlcmlhbGl6ZSwgTWVtb2l6ZSwgYW5kIEhhc2ggbm9kZXMsIHdoaWNoIGFyZSBwYXJ0 IG9mIHRoZSBqb2luCisJICogc3RyYXRlZ3ksCisJICoKKwkgKiAoMikgR2F0aGVyIGFuZCBHYXRo ZXIgTWVyZ2Ugbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciBhdCBhbnkgcG9pbnQgaW4gdGhlCisJICog am9pbiB0cmVlIHdoZXJlIHRoZSBwbGFubmVyIGRlY2lkZWQgdG8gaW5pdGlhdGUgcGFyYWxsZWxp c20sCisJICoKKwkgKiAoMykgU29ydCBhbmQgSW5jcmVtZW50YWxTb3J0IG5vZGVzLCB3aGljaCBj YW4gb2NjdXIgYmVuZWF0aCBNZXJnZUpvaW4KKwkgKiBvciBHYXRoZXJNZXJnZSwKKwkgKgorCSAq ICg0KSBBZ2cgYW5kIFVuaXF1ZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIHdoZW4gd2UgZGVjaWRl IHRvIG1ha2UgdGhlCisJICogbnVsbGFibGUgc2lkZSBvZiBhIHNlbWlqb2luIHVuaXF1ZSBhbmQg dGhlbiBqb2luIHRoZSByZXN1bHQsIGFuZAorCSAqCisJICogKDUpIFJlc3VsdCBub2RlcyB3aXRo IGNoaWxkcmVuLCB3aGljaCBjYW4gYmUgYWRkZWQgZWl0aGVyIHRvIHByb2plY3QgdG8KKwkgKiBl bmZvcmNlIGEgb25lLXRpbWUgZmlsdGVyIChidXQgUmVzdWx0IG5vZGVzIHdpdGhvdXQgY2hpbGRy ZW4gYXJlCisJICogZGVnZW5lcmF0ZSBzY2FucyBvciBqb2lucykuCisJICovCisJaWYgKElzQShw bGFuLCBNYXRlcmlhbCkgfHwgSXNBKHBsYW4sIE1lbW9pemUpIHx8IElzQShwbGFuLCBIYXNoKQor CQl8fCBJc0EocGxhbiwgR2F0aGVyKSB8fCBJc0EocGxhbiwgR2F0aGVyTWVyZ2UpCisJCXx8IGlz X3NvcnRpbmdfcGxhbihwbGFuKSB8fCBJc0EocGxhbiwgQWdnKSB8fCBJc0EocGxhbiwgVW5pcXVl KQorCQl8fCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKHBsYW4pKQorCXsKKwkJKm91dGVyX2pv aW5fdW5yb2xsZXIgPSBqb2luX3Vucm9sbGVyOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBT aW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgbm9kZXMgdGhhdCByZXF1aXJlIHBhc3MtdGhyb3Vn aCB0cmVhdG1lbnQsCisJICogdGhpcyBzaG91bGQgYmUgYW4gdW5yb2xsYWJsZSBqb2luLgorCSAq LworCXN0cmF0ZWd5ID0gcGdwYV9kZWNvbXBvc2Vfam9pbih3YWxrZXIsIHBsYW4sCisJCQkJCQkJ CSAgICZyZWFsb3V0ZXIsICZyZWFsaW5uZXIsCisJCQkJCQkJCSAgICZlbGlkZWRvdXRlciwgJmVs aWRlZGlubmVyLAorCQkJCQkJCQkgICAmZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJCQkJ ICAgJmZvdW5kX2FueV9pbm5lcl9nYXRoZXIpOworCisJLyogSWYgb3VyIHdvcmtzcGFjZSBpcyBm dWxsLCBleHBhbmQgaXQuICovCisJaWYgKGpvaW5fdW5yb2xsZXItPm51c2VkID49IGpvaW5fdW5y b2xsZXItPm5hbGxvY2F0ZWQpCisJeworCQlqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkICo9IDI7 CisJCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5y b2xsZXItPnN0cmF0ZWd5LAorCQkJCQkJICAgcGdwYV9qb2luX3N0cmF0ZWd5LAorCQkJCQkJICAg am9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBs YW5zID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zLAor CQkJCQkJICAgUGxhbiAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJ CWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcyA9CisJCQlyZXBhbGxvY19hcnJheShq b2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMsCisJCQkJCQkgICBFbGlkZWROb2RlICos CisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+ aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xs ZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCSAgIGJvb2wsCisJCQkJCQkgICBq b2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xs ZXJzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycywK KwkJCQkJCSAgIHBncGFfam9pbl91bnJvbGxlciAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCk7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSdyZSBmbGF0dGVuaW5nIG91dGVy LWRlZXAgam9pbiB0cmVlcywgaXQgZm9sbG93cyB0aGF0IGlmIHRoZQorCSAqIG91dGVyIHNpZGUg aXMgc3RpbGwgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50byB0 aGlzCisJICogc2FtZSBvYmplY3QuIE90aGVyd2lzZSwgd2UndmUgcmVhY2hlZCB0aGUgbGltaXQg b2Ygd2hhdCB3ZSBjYW4gdW5yb2xsCisJICogaW50byB0aGlzIG9iamVjdCBhbmQgbXVzdCByZW1l bWJlciB0aGUgb3V0ZXIgc2lkZSBhcyB0aGUgZmluYWwgb3V0ZXIKKwkgKiBzdWJwbGFuLgorCSAq LworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsb3V0ZXIpKQor CQkqb3V0ZXJfam9pbl91bnJvbGxlciA9IGpvaW5fdW5yb2xsZXI7CisJZWxzZQorCXsKKwkJam9p bl91bnJvbGxlci0+b3V0ZXJfc3VicGxhbiA9IHJlYWxvdXRlcjsKKwkJam9pbl91bnJvbGxlci0+ b3V0ZXJfZWxpZGVkX25vZGUgPSBlbGlkZWRvdXRlcjsKKwkJam9pbl91bnJvbGxlci0+b3V0ZXJf YmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCWJlbmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9hbnlf b3V0ZXJfZ2F0aGVyOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIGlubmVyIHN1YnBsYW4uIElm IGl0J3MgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBuZWVkcyB0byBiZQorCSAqIGZsYXR0ZW5lZCBp biB0dXJuLCBidXQgaW50byBhIG5ldyB1bnJvbGxlciBvYmplY3QsIG5vdCB0aGlzIG9uZS4KKwkg Ki8KKwluID0gam9pbl91bnJvbGxlci0+bnVzZWQrKzsKKwlqb2luX3Vucm9sbGVyLT5zdHJhdGVn eVtuXSA9IHN0cmF0ZWd5OworCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW25dID0gcmVh bGlubmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlc1tuXSA9IGVsaWRlZGlu bmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcltuXSA9CisJCWJl bmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyOworCWlmIChlbGlkZWRp bm5lciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsaW5uZXIpKQorCQkqaW5uZXJfam9pbl91 bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwllbHNlCisJCSppbm5lcl9q b2luX3Vucm9sbGVyID0gTlVMTDsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNbbl0g PSAqaW5uZXJfam9pbl91bnJvbGxlcjsKK30KKworLyoKKyAqIFVzZSB0aGUgZGF0YSB3ZSd2ZSBh Y2N1bXVsYXRlZCBpbiBhIHBncGFfam9pbl91bnJvbGxlciBvYmplY3QgdG8gY29uc3RydWN0Cisg KiBhIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqLworcGdwYV91bnJvbGxlZF9qb2luICoKK3BncGFf YnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJcGdwYV91bnJvbGxl ZF9qb2luICp1am9pbjsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBXZSBzaG91bGRuJ3QgaGF2ZSBn b25lIGV2ZW4gc28gZmFyIGFzIHRvIGNyZWF0ZSBhIGpvaW4gdW5yb2xsZXIgdW5sZXNzCisJICog d2UgZm91bmQgYXQgbGVhc3Qgb25lIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlBc3NlcnQoam9p bl91bnJvbGxlci0+bnVzZWQgPiAwKTsKKworCS8qIEFsbG9jYXRlIHJlc3VsdCBzdHJ1Y3R1cmVz LiAqLworCXVqb2luID0gcGFsbG9jMF9vYmplY3QocGdwYV91bnJvbGxlZF9qb2luKTsKKwl1am9p bi0+bmlubmVyID0gam9pbl91bnJvbGxlci0+bnVzZWQ7CisJdWpvaW4tPnN0cmF0ZWd5ID0gcGFs bG9jMF9hcnJheShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm51c2VkKTsKKwl1 am9pbi0+aW5uZXIgPSBwYWxsb2MwX2FycmF5KHBncGFfam9pbl9tZW1iZXIsIGpvaW5fdW5yb2xs ZXItPm51c2VkKTsKKworCS8qIEhhbmRsZSB0aGUgb3V0ZXJtb3N0IGpvaW4uICovCisJdWpvaW4t Pm91dGVyLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5vdXRlcl9zdWJwbGFuOworCXVqb2luLT5vdXRl ci5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2RlOworCXVqb2lu LT5vdXRlci5zY2FuID0KKwkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgdWpvaW4tPm91dGVyLnBs YW4sCisJCQkJCQl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUsCisJCQkJCQlqb2luX3Vucm9sbGVy LT5vdXRlcl9iZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQl0cnVlKTsKKworCS8qCisJICogV2Ug d2FudCB0aGUgam9pbnMgZnJvbSB0aGUgZGVlcGVzdCBwYXJ0IG9mIHRoZSBwbGFuIHRyZWUgdG8g YXBwZWFyCisJICogZmlyc3QgaW4gdGhlIHJlc3VsdCBvYmplY3QsIGJ1dCB0aGUgam9pbiB1bnJv bGxlciBhZGRzIHRoZW0gaW4gZXhhY3RseQorCSAqIHRoZSByZXZlcnNlIG9mIHRoYXQgb3JkZXIs IHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgb3JkZXIgb2YgdGhlIGFycmF5cworCSAqIHdoZW4gY29u c3RydWN0aW5nIHRoZSBmaW5hbCByZXN1bHQuCisJICovCisJZm9yIChpID0gMDsgaSA8IGpvaW5f dW5yb2xsZXItPm51c2VkOyArK2kpCisJeworCQlpbnQJCQlrID0gam9pbl91bnJvbGxlci0+bnVz ZWQgLSBpIC0gMTsKKworCQkvKiBDb3B5IHN0cmF0ZWd5LCBQbGFuLCBhbmQgRWxpZGVkTm9kZS4g Ki8KKwkJdWpvaW4tPnN0cmF0ZWd5W2ldID0gam9pbl91bnJvbGxlci0+c3RyYXRlZ3lba107CisJ CXVqb2luLT5pbm5lcltpXS5wbGFuID0gam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNba107 CisJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPmlubmVyX2Vs aWRlZF9ub2Rlc1trXTsKKworCQkvKgorCQkgKiBGaWxsIGluIHJlbWFpbmluZyBkZXRhaWxzLCB1 c2luZyBlaXRoZXIgdGhlIG5lc3RlZCBqb2luIHVucm9sbGVyLAorCQkgKiBvciBieSBkZXJpdmlu ZyB0aGVtIGZyb20gdGhlIHBsYW4gYW5kIGVsaWRlZCBub2Rlcy4KKwkJICovCisJCWlmIChqb2lu X3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10gIT0gTlVMTCkKKwkJCXVqb2luLT5pbm5lcltp XS51bnJvbGxlZF9qb2luID0KKwkJCQlwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2VyLAor CQkJCQkJCQkJCSBqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10pOworCQllbHNlCisJ CQl1am9pbi0+aW5uZXJbaV0uc2NhbiA9CisJCQkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgdWpv aW4tPmlubmVyW2ldLnBsYW4sCisJCQkJCQkJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9kZSwK KwkJCQkJCQkJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW2tdLAorCQkJ CQkJCQl0cnVlKTsKKwl9CisKKwlyZXR1cm4gdWpvaW47Cit9CisKKy8qCisgKiBGcmVlIG1lbW9y eSBhbGxvY2F0ZWQgZm9yIHBncGFfam9pbl91bnJvbGxlci4KKyAqLwordm9pZAorcGdwYV9kZXN0 cm95X2pvaW5fdW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKQorewor CXBmcmVlKGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5KTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5p bm5lcl9zdWJwbGFucyk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVz KTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMpOworCXBmcmVlKGpvaW5f dW5yb2xsZXIpOworfQorCisvKgorICogSWRlbnRpZnkgdGhlIGpvaW4gc3RyYXRlZ3kgdXNlZCBi eSBhIGpvaW4gYW5kIHRoZSAicmVhbCIgaW5uZXIgYW5kIG91dGVyCisgKiBwbGFucy4KKyAqCisg KiBGb3IgZXhhbXBsZSwgYSBIYXNoIEpvaW4gYWx3YXlzIGhhcyBhIEhhc2ggbm9kZSBvbiB0aGUg aW5uZXIgc2lkZSwgYnV0CisgKiBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzIHRoZSByZWFs IGlubmVyIGlucHV0IGlzIHRoZSBIYXNoIG5vZGUncyBjaGlsZCwKKyAqIG5vdCB0aGUgSGFzaCBu b2RlIGl0c2VsZi4KKyAqCisgKiBMaWtld2lzZSwgYSBNZXJnZSBKb2luIG1heSBoYXZlIFNvcnQg bm90ZSBvbiB0aGUgaW5uZXIgb3Igb3V0ZXIgc2lkZTsgaWYKKyAqIGl0IGRvZXMsIHRoZSByZWFs IGlucHV0IHRvIHRoZSBqb2luIGlzIHRoZSBTb3J0IG5vZGUncyBjaGlsZCwgbm90IHRoZQorICog U29ydCBub2RlIGl0c2VsZi4KKyAqCisgKiBJbiBhZGRpdGlvbiwgd2l0aCBhIE1lcmdlIEpvaW4g b3IgYSBOZXN0ZWQgTG9vcCwgdGhlIGpvaW4gcGxhbm5pbmcgY29kZQorICogbWF5IGFkZCBhZGRp dGlvbmFsIG5vZGVzIHN1Y2ggYXMgTWF0ZXJpYWxpemUgb3IgTWVtb2l6ZS4gV2UgcmVnYXJkIHRo ZXNlCisgKiBhcyBhbiBhc3BlY3Qgb2YgdGhlIGpvaW4gc3RyYXRlZ3kuIEFzIGluIHRoZSBwcmV2 aW91cyBjYXNlcywgdGhlIHRydWUgaW5wdXQKKyAqIHRvIHRoZSBqb2luIGlzIHRoZSB1bmRlcmx5 aW5nIG5vZGUuCisgKgorICogSG93ZXZlciwgaWYgYW55IGludm9sdmVkIGNoaWxkIG5vZGUgcHJl dmlvdXNseSBoYWQgYSBub3ctZWxpZGVkIG5vZGUgc3RhY2tlZAorICogb24gdG9wLCB0aGVuIHdl IGNhbid0ICJsb29rIHRocm91Z2giIHRoYXQgbm9kZSAtLSBpbmRlZWQsIHdoYXQncyBnb2luZyB0 byBiZQorICogcmVsZXZhbnQgZm9yIG91ciBwdXJwb3NlcyBpcyB0aGUgRWxpZGVkTm9kZSBvbiB0 b3Agb2YgdGhhdCBwbGFuIG5vZGUsIHJhdGhlcgorICogdGhhbiB0aGUgcGxhbiBub2RlIGl0c2Vs Zi4KKyAqCisgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxpZGVkIG5vZGVzLCB3ZSB3YW50IHRo YXQgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuCisgKiB1cHBlcm1vc3QgaW4gdGhlIHBsYW4gdHJl ZSBwcmlvciB0byBzZXRyZWZzIHByb2Nlc3Npbmc7IHdlIGV4cGVjdCB0byBmaW5kCisgKiB0aGF0 IG9uZSBsYXN0IGluIHRoZSBsaXN0IG9mIGVsaWRlZCBub2Rlcy4KKyAqCisgKiBPbiByZXR1cm4g KnJlYWxvdXRlciBhbmQgKnJlYWxpbm5lciB3aWxsIGhhdmUgYmVlbiBzZXQgdG8gdGhlIHJlYWwg aW5uZXIKKyAqIGFuZCByZWFsIG91dGVyIHBsYW5zIHRoYXQgd2UgaWRlbnRpZmllZCwgYW5kICpl bGlkZWRyZWFsb3V0ZXIgYW5kCisgKiAqZWxpZGVkcmVhbGlubmVyIHRvIHRoZSBsYXN0IG9mIGFu eSBjb3JyZXNwb2RpbmcgZWxpZGVkIG5vZGVzLgorICogQWRkaXRpb25hbGx5LCAqZm91bmRfYW55 X291dGVyX2dhdGhlciBhbmQgKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgd2lsbAorICogYmUgc2V0 IHRvIHRydWUgaWYgd2UgbG9va2VkIHRocm91Z2ggYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5v ZGUgb24KKyAqIHRoYXQgc2lkZSBvZiB0aGUgam9pbiwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAq Lworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneQorcGdwYV9kZWNvbXBvc2Vfam9pbihwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJUGxhbiAqKnJlYWxv dXRlciwgUGxhbiAqKnJlYWxpbm5lciwKKwkJCQkJRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxvdXRl ciwgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJYm9vbCAqZm91bmRfYW55X291 dGVyX2dhdGhlciwgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcikKK3sKKwlQbGFubmVkU3Rt dCAqcHN0bXQgPSB3YWxrZXItPnBzdG10OworCUpvaW5UeXBlCWpvaW50eXBlID0gKChKb2luICop IHBsYW4pLT5qb2ludHlwZTsKKwlQbGFuCSAgICpvdXRlcnBsYW4gPSBwbGFuLT5sZWZ0dHJlZTsK KwlQbGFuCSAgICppbm5lcnBsYW4gPSBwbGFuLT5yaWdodHRyZWU7CisJRWxpZGVkTm9kZSAqZWxp ZGVkb3V0ZXI7CisJRWxpZGVkTm9kZSAqZWxpZGVkaW5uZXI7CisJcGdwYV9qb2luX3N0cmF0ZWd5 IHN0cmF0ZWd5OworCWJvb2wJCXVuaXF1ZW91dGVyOworCWJvb2wJCXVuaXF1ZWlubmVyOworCisJ ZWxpZGVkb3V0ZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsIG91dGVycGxhbik7CisJ ZWxpZGVkaW5uZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsIGlubmVycGxhbik7CisJ KmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwkqZm91bmRfYW55X2lubmVyX2dhdGhl ciA9IGZhbHNlOworCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX01lcmdl Sm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBwbGFj ZSBhIE1hdGVyaWFsIG5vZGUgb24gdGhlCisJCQkgKiBpbm5lciBzaWRlIG9mIHRoZSBNZXJnZUpv aW47IGlmIHRoaXMgaXMgcHJlc2VudCwgd2UgcmVjb3JkIGl0CisJCQkgKiBhcyBwYXJ0IG9mIHRo ZSBqb2luIHN0cmF0ZWd5LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJ c0EoaW5uZXJwbGFuLCBNYXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rl c2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVS R0VfSk9JTl9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlzdHJhdGVneSA9IEpTVFJB VF9NRVJHRV9KT0lOX1BMQUlOOworCisJCQkvKgorCQkJICogRm9yIGEgTWVyZ2VKb2luLCBlaXRo ZXIgdGhlIG91dGVyIG9yIHRoZSBpbm5lciBzdWJwbGFuLCBvcgorCQkJICogYm90aCwgbWF5IGhh dmUgbmVlZGVkIHRvIGJlIHNvcnRlZDsgd2UgbXVzdCBkaXNyZWdhcmQgYW55IFNvcnQKKwkJCSAq IG9yIEluY3JlbWVudGFsU29ydCBub2RlIHRvIGZpbmQgdGhlIHJlYWwgaW5uZXIgb3Igb3V0ZXIK KwkJCSAqIHN1YnBsYW4uCisJCQkgKi8KKwkJCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIGlz X3NvcnRpbmdfcGxhbihvdXRlcnBsYW4pKQorCQkJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5k X25vZGUocHN0bXQsICZvdXRlcnBsYW4pOworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYg aXNfc29ydGluZ19wbGFuKGlubmVycGxhbikpCisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2Nl bmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQlicmVhazsKKworCQljYXNlIFRfTmVzdExv b3A6CisKKwkJCS8qCisJCQkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2Ug YSBNYXRlcmlhbCBvciBNZW1vaXplIG5vZGUKKwkJCSAqIG9uIHRoZSBpbm5lciBzaWRlIG9mIHRo ZSBOZXN0TG9vcDsgaWYgdGhpcyBpcyBwcmVzZW50LCB3ZQorCQkJICogcmVjb3JkIGl0IGFzIHBh cnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBO VUxMICYmIElzQShpbm5lcnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpT VFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UgaWYgKGVsaWRlZGlu bmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWVtb2l6ZSkpCisJCQl7CisJCQkJZWxpZGVk aW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRl Z3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlzdHJh dGVneSA9IEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTjsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9I YXNoSm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBpbm5lciBzdWJwbGFuIG9mIGEgSGFzaEpvaW4g aXMgYWx3YXlzIGEgSGFzaCBub2RlOyB0aGUgcmVhbAorCQkJICogaW5uZXIgc3VicGxhbiBpcyB0 aGUgSGFzaCBub2RlJ3MgY2hpbGQuCisJCQkgKi8KKwkJCUFzc2VydChJc0EoaW5uZXJwbGFuLCBI YXNoKSk7CisJCQlBc3NlcnQoZWxpZGVkaW5uZXIgPT0gTlVMTCk7CisJCQllbGlkZWRpbm5lciA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCXN0cmF0ZWd5ID0gSlNU UkFUX0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwl9CisK KwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGEgc2Vt aWpvaW4gYnkgZmlyc3QgbWFraW5nCisJICogdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlIHBsYW4g dW5pcXVlLCBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9ybWFsIGpvaW4KKwkgKiBhZ2FpbnN0IHRo ZSByZXN1bHQuIFRoZXJlZm9yZSwgd2UgbWlnaHQgbmVlZCB0byBkZXNjZW5kIHRocm91Z2ggYQor CSAqIHVuaXF1ZSBub2RlIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBwbGFuLgorCSAqLworCXVuaXF1 ZW91dGVyID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZvdXRlcnBsYW4sICZlbGlk ZWRvdXRlcik7CisJdW5pcXVlaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwg JmlubmVycGxhbiwgJmVsaWRlZGlubmVyKTsKKworCS8qCisJICogVGhlIHBsYW5uZXIgbWF5IGhh dmUgZGVjaWRlZCB0byBwYXJhbGxlbGl6ZSBwYXJ0IG9mIHRoZSBqb2luIHRyZWUsIHNvCisJICog d2UgY291bGQgZmluZCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBoZXJlLiBOb3RlIHRo YXQsIGlmCisJICogcHJlc2VudCwgdGhpcyB3aWxsIGFwcGVhciBiZWxvdyBub2RlcyB3ZSBjb25z aWRlcmVkIGFzIHBhcnQgb2YgdGhlIGpvaW4KKwkgKiBzdHJhdGVneSwgYnV0IHdlIGNvdWxkIGZp bmQgYW5vdGhlciB1bmlxdWVuZXNzLWVuZm9yY2luZyBub2RlIGJlbG93IHRoZQorCSAqIEdhdGhl ciBvciBHYXRoZXIgTWVyZ2UsIGlmIHByZXNlbnQuCisJICovCisJaWYgKGVsaWRlZG91dGVyID09 IE5VTEwpCisJeworCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9hbnlfZ2F0aGVyKHBzdG10 LCAmb3V0ZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5kX2FueV9vdXRlcl9nYXRoZXIpOworCQlp ZiAoZm91bmRfYW55X291dGVyX2dhdGhlciAmJgorCQkJcGdwYV9kZXNjZW5kX2FueV91bmlxdWUo cHN0bXQsICZvdXRlcnBsYW4sICZlbGlkZWRvdXRlcikpCisJCQl1bmlxdWVvdXRlciA9IHRydWU7 CisJfQorCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkaW5uZXIgPSBwZ3Bh X2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJmlubmVycGxhbiwKKwkJCQkJCQkJCQkJICBmb3Vu ZF9hbnlfaW5uZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9pbm5lcl9nYXRoZXIgJiYKKwkJ CXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmaW5uZXJwbGFuLCAmZWxpZGVkaW5uZXIp KQorCQkJdW5pcXVlaW5uZXIgPSB0cnVlOworCX0KKworCS8qCisJICogSXQncyBwb3NzaWJsZSB0 aGF0IFJlc3VsdCBub2RlIGhhcyBiZWVuIGluc2VydGVkIGVpdGhlciB0byBwcm9qZWN0IGEKKwkg KiB0YXJnZXQgbGlzdCBvciB0byBpbXBsZW1lbnQgYSBvbmUtdGltZSBmaWx0ZXIuIElmIHNvLCB3 ZSBjYW4gZGVzY2VuZAorCSAqIHRocm91Z2h0IGl0LiBOb3RlIHRoYXQgYSByZXN1bHQgbm9kZSB3 aXRob3V0IGEgY2hpbGQgd291bGQgYmUgYQorCSAqIGRlZ2VuZXJhdGUgc2NhbiBvciBqb2luLCBh bmQgbm90IHNvbWV0aGluZyB3ZSBjb3VsZCBkZXNjZW5kIHRocm91Z2guCisJICoKKwkgKiBYWFgu IEkgc3VzcGVjdCBpdCdzIHBvc3NpYmxlIGZvciB0aGlzIHRvIGhhcHBlbiBhYm92ZSB0aGUgR2F0 aGVyIG9yCisJICogR2F0aGVyIE1lcmdlIG5vZGUsIHRvbywgYnV0IGFwcGFyZW50bHkgd2UgaGF2 ZSBubyB0ZXN0IGNhc2UgZm9yIHRoYXQKKwkgKiBzY2VuYXJpby4KKwkgKi8KKwlpZiAoZWxpZGVk b3V0ZXIgPT0gTlVMTCAmJiBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKG91dGVycGxhbikpCisJ CWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZvdXRlcnBsYW4pOworCWlm IChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoaW5uZXJw bGFuKSkKKwkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxh bik7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBzZW1pam9pbiB0aGF0IHdhcyBjb252ZXJ0ZWQg dG8gYW4gaW5uZXIgam9pbiBieSBtYWtpbmcgb25lCisJICogc2lkZSBvciB0aGUgb3RoZXIgdW5p cXVlLCBtYWtlIGEgbm90ZSB0aGF0IHRoZSBpbm5lciBvciBvdXRlciBzdWJwbGFuLAorCSAqIGFz IGFwcHJvcHJpYXRlLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5IHBsYW4gZmVhdHVyZSB3 aGVuIHRoZSBtYWluCisJICogdHJlZSB0cmF2ZXJzYWwgcmVhY2hlcyBpdC4KKwkgKgorCSAqIENv bnZlcnNlbHksIGlmIHRoZSBwbGFubmVyIGNvdWxkIGhhdmUgbWFkZSBvbmUgc2lkZSBvZiB0aGUg am9pbiB1bmlxdWUKKwkgKiBhbmQgdGhlcmVieSBjb252ZXJ0ZWQgaXQgdG8gYW4gaW5uZXIgam9p biwgYW5kIGNob3NlIG5vdCB0byBkbyBzbywgdGhhdAorCSAqIGlzIGFsc28gd29ydGggbm90aW5n LgorCSAqCisJICogTkI6IFRoaXMgY29kZSBjb3VsZCBhcHBlYXIgc2xpZ2h0bHkgaGlnaGVyIHVw IGluIGluIHRoaXMgZnVuY3Rpb24sIGJ1dAorCSAqIG5vbmUgb2YgdGhlIG5vZGVzIHRocm91Z2gg d2hpY2ggd2UganVzdCBkZXNjZW5kZWQgc2hvdWxkIGhhdmUKKwkgKiBhc3NvY2lhdGVkIFJUSXMu CisJICoKKwkgKiBOQjogVGhpcyBzZWVtcyBsaWtlIGEgc29tZXdoYXQgaGFja3kgd2F5IG9mIHBh c3NpbmcgaW5mb3JtYXRpb24gdXAgdG8KKwkgKiB0aGUgbWFpbiB0cmVlIHdhbGssIGJ1dCBJIGRv bid0IGN1cnJlbnRseSBoYXZlIGEgYmV0dGVyIGlkZWEuCisJICovCisJaWYgKHVuaXF1ZW91dGVy KQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9VTklR VUUsIG91dGVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5cGUgPT0gSk9JTl9SSUdIVF9TRU1JKQor CQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9OT05fVU5J UVVFLCBvdXRlcnBsYW4pOworCWlmICh1bmlxdWVpbm5lcikKKwkJcGdwYV9hZGRfZnV0dXJlX2Zl YXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBpbm5lcnBsYW4pOworCWVsc2Ug aWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fs a2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgaW5uZXJwbGFuKTsKKworCS8qIFNldCBv dXRwdXQgcGFyYW1ldGVycy4gKi8KKwkqcmVhbG91dGVyID0gb3V0ZXJwbGFuOworCSpyZWFsaW5u ZXIgPSBpbm5lcnBsYW47CisJKmVsaWRlZHJlYWxvdXRlciA9IGVsaWRlZG91dGVyOworCSplbGlk ZWRyZWFsaW5uZXIgPSBlbGlkZWRpbm5lcjsKKwlyZXR1cm4gc3RyYXRlZ3k7Cit9CisKKy8qCisg KiBEZXNjZW5kIHRocm91Z2ggYSBQbGFuIG5vZGUgaW4gYSBqb2luIHRyZWUgdGhhdCB0aGUgY2Fs bGVyIGhhcyBkZXRlcm1pbmVkCisgKiB0byBiZSBpcnJlbGV2YW50LgorICoKKyAqIFVwZGF0ZXMg KnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgcGVydGFpbmlu ZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUuCisgKi8KK3N0YXRpYyBFbGlkZWROb2RlICoKK3Bn cGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4pCit7CisJKnBs YW4gPSAoKnBsYW4pLT5sZWZ0dHJlZTsKKwlyZXR1cm4gcGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBz dG10LCAqcGxhbik7Cit9CisKKy8qCisgKiBEZXNjZW5kIHRocm91Z2ggYSBHYXRoZXIgb3IgR2F0 aGVyIE1lcmdlIG5vZGUsIGlmIHByZXNlbnQsIGFuZCBhbnkgU29ydAorICogb3IgSW5jcmVtZW50 YWxTb3J0IG5vZGUgb2NjdXJyaW5nIHVuZGVyIGEgR2F0aGVyIE1lcmdlLgorICoKKyAqIENhbGxl ciBzaG91bGQgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZXJlIGlzIG5vIEVsaWRlZE5vZGUgcGVydGFp bmluZyB0bworICogdGhlIGluaXRpYWwgdmFsdWUgb2YgKnBsYW4uCisgKgorICogVXBkYXRlcyAq cGxhbiwgYW5kIHJldHVybnMgdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBwZXJ0YWluaW5n IHRvIHRoZQorICogbmV3IHBsYW4gbm9kZS4gU2V0cyAqZm91bmRfYW55X2dhdGhlciA9IHRydWUg aWYgZWl0aGVyIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIHdhcyBmb3VuZCwgYW5kIG90aGVy d2lzZSBsZWF2ZXMgaXQgdW5jaGFuZ2VkLgorICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3Bh X2Rlc2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJ CQkJYm9vbCAqZm91bmRfYW55X2dhdGhlcikKK3sKKwlpZiAoSXNBKCpwbGFuLCBHYXRoZXIpKQor CXsKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsIHBsYW4pOworCX0KKworCWlmIChJc0EoKnBsYW4sIEdhdGhlck1lcmdlKSkKKwl7 CisJCUVsaWRlZE5vZGUgKmVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsK KworCQlpZiAoZWxpZGVkID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpwbGFuKSkKKwkJCWVs aWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQkqZm91bmRfYW55X2dh dGhlciA9IHRydWU7CisJCXJldHVybiBlbGlkZWQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisK Ky8qCisgKiBJZiAqcGxhbiBpcyBhbiBBZ2cgb3IgVW5pcXVlIG5vZGUsIHdlIHdhbnQgdG8gZGVz Y2VuZCB0aHJvdWdoIGl0LCB1bmxlc3MKKyAqIGl0IGhhcyBhIGNvcnJlc3BvbmRpbmcgZWxpZGVk IG5vZGUuIElmIGl0cyBpbW1lZGlhdGUgY2hpbGQgaXMgYSBTb3J0IG9yCisgKiBJbmNyZW1lbnRh bFNvcnQsIHdlIGFsc28gd2FudCB0byBkZXNjZW5kIHRocm91Z2ggdGhhdCwgdW5sZXNzIGl0IGhh cyBhCisgKiBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLgorICoKKyAqIE9uIGVudHJ5LCAqZWxp ZGVkX25vZGUgbXVzdCBiZSB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIGNvcnJlc3BvbmRp bmcKKyAqIHRvICpwbGFuOyBvbiBleGl0LCB0aGlzIHdpbGwgc3RpbGwgYmUgdHJ1ZSwgYnV0ICpw bGFuIG1heSBoYXZlIGJlZW4gdXBkYXRlZC4KKyAqCisgKiBUaGUgcmVhc29uIHdlIGRvbid0IHdh bnQgdG8gZGVzY2VuZCB0aHJvdWdoIGVsaWRlZCBub2RlcyBpcyB0aGF0IGEgc2luZ2xlCisgKiBq b2luIHRyZWUgY2FuJ3QgY3Jvc3MgdGhyb3VnaCBhbnkgc29ydCBvZiBlbGlkZWQgbm9kZTogc3Vi cXVlcmllcyBhcmUKKyAqIHBsYW5uZWQgc2VwYXJhdGVseSwgYW5kIHBsYW5uaW5nIGluc2lkZSBh biBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgaXMKKyAqIHNlcGFyYXRlIGZyb20gcGxhbm5pbmcgb3V0 c2lkZSBvZiBpdC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUgaWYgd2UgZGVzY2Vu ZCB0aHJvdWdoIGEgbm9kZSB0aGF0IHdlIGJlbGlldmUgaXMKKyAqIG1ha2luZyBvbmUgc2lkZSBv ZiBhIHNlbWlqb2luIHVuaXF1ZSwgYW5kIG90aGVyd2lzZSBmYWxzZS4KKyAqLworc3RhdGljIGJv b2wKK3BncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBs YW4sCisJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUpCit7CisJYm9vbAkJZGVzY2VuZCA9 IGZhbHNlOworCWJvb2wJCXNqdW5pcXVlID0gZmFsc2U7CisKKwlpZiAoKmVsaWRlZF9ub2RlICE9 IE5VTEwpCisJCXJldHVybiBzanVuaXF1ZTsKKworCWlmIChJc0EoKnBsYW4sIFVuaXF1ZSkpCisJ eworCQlkZXNjZW5kID0gdHJ1ZTsKKwkJc2p1bmlxdWUgPSB0cnVlOworCX0KKwllbHNlIGlmIChJ c0EoKnBsYW4sIEFnZykpCisJeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgc2ltcGxlIEFnZyBu b2RlLCB0aGVuIGFzc3VtZSBpdCdzIGhlcmUgdG8gaW1wbGVtZW50CisJCSAqIHNlbWlqb2luIHVu aXF1ZW5lc3MuIE90aGVyd2lzZSwgYXNzdW1lIGl0J3MgY29tcGxldGluZyBhbiBlYWdlcgorCQkg KiBhZ2dyZWdhdGlvbiBvciBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0aW9uIG9wZXJhdGlvbiB0aGF0 IGJlZ2FuIGF0IGEKKwkJICogaGlnaGVyIGxldmVsIG9mIHRoZSBwbGFuIHRyZWUuCisJCSAqCisJ CSAqIFhYWC4gSSBzdXNwZWN0IHRoaXMgbG9naWMgZG9lcyBub3QgY292ZXIgYWxsIGNhc2VzOiBj b3VsZG4ndCBTSgorCQkgKiB1bmlxdWVuZXNzIGJlIGltcGxlbWVudGVkIGluIHR3byBzdGVwcyB3 aXRoIGFuIGludGVybWVkaWF0ZSBHYXRoZXI/CisJCSAqLworCQlkZXNjZW5kID0gdHJ1ZTsKKwkJ c2p1bmlxdWUgPSAoKChBZ2cgKikgKnBsYW4pLT5hZ2dzcGxpdCA9PSBBR0dTUExJVF9TSU1QTEUp OworCX0KKworCWlmIChkZXNjZW5kKQorCXsKKwkJKmVsaWRlZF9ub2RlID0gcGdwYV9kZXNjZW5k X25vZGUocHN0bXQsIHBsYW4pOworCisJCWlmICgqZWxpZGVkX25vZGUgPT0gTlVMTCAmJiBpc19z b3J0aW5nX3BsYW4oKnBsYW4pKQorCQkJKmVsaWRlZF9ub2RlID0gcGdwYV9kZXNjZW5kX25vZGUo cHN0bXQsIHBsYW4pOworCX0KKworCXJldHVybiBzanVuaXF1ZTsKK30KKworLyoKKyAqIElzIHRo aXMgYSBSZXN1bHQgbm9kZSB0aGF0IGhhcyBhIGNoaWxkPworICovCitzdGF0aWMgYm9vbAoraXNf cmVzdWx0X25vZGVfd2l0aF9jaGlsZChQbGFuICpwbGFuKQoreworCXJldHVybiBJc0EocGxhbiwg UmVzdWx0KSAmJiBwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMOworfQorCisvKgorICogSXMgdGhpcyBh IFBsYW4gbm9kZSB3aG9zZSBwdXJwb3NlIGlzIHB1dCB0aGUgZGF0YSBpbiBhIGNlcnRhaW4gb3Jk ZXI/CisgKi8KK3N0YXRpYyBib29sCitpc19zb3J0aW5nX3BsYW4oUGxhbiAqcGxhbikKK3sKKwly ZXR1cm4gSXNBKHBsYW4sIFNvcnQpIHx8IElzQShwbGFuLCBJbmNyZW1lbnRhbFNvcnQpOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjRkYzcyOTg2YTcwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2pvaW4uaApAQCAtMCwwICsxLDEwNSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogcGdwYV9qb2luLmgKKyAqCSAgYW5hbHlzaXMgb2Ygam9pbnMgaW4gUGxhbiB0cmVl cworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4u aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfSk9JTl9ICisjZGVm aW5lIFBHUEFfSk9JTl9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHBncGFfcGxhbl93YWxrZXJfY29udGV4 dDsKK3R5cGVkZWYgc3RydWN0IHBncGFfam9pbl91bnJvbGxlciBwZ3BhX2pvaW5fdW5yb2xsZXI7 Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4gcGdwYV91bnJvbGxlZF9qb2luOwor CisvKgorICogQWx0aG91Z2ggdGhlcmUgYXJlIHRocmVlIG1haW4gam9pbiBzdHJhdGVnaWVzLCB3 ZSB0cnkgdG8gY2xhc3NpZnkgdGhpbmdzCisgKiBtb3JlIHByZWNpc2VseSBoZXJlOiBtZXJnZSBq b2lucyBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgbWF0ZXJpYWxpemF0aW9uCisgKiBvbiB0aGUg aW5uZXIgc2lkZSwgYW5kIG5lc3RlZCBsb29wcyBjYW4gdXNlIGVpdGhlciBtYXRlcmlhbGl6YXRp b24gb3IKKyAqIG1lbW9pemF0aW9uLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlKU1RSQVRfTUVS R0VfSk9JTl9QTEFJTiA9IDAsCisJSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJSlNU UkFUX05FU1RFRF9MT09QX1BMQUlOLAorCUpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRSwK KwlKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwlKU1RSQVRfSEFTSF9KT0lOCisJLyogdXBk YXRlIE5VTV9QR1BBX0pPSU5fU1RSQVRFR1kgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9 IHBncGFfam9pbl9zdHJhdGVneTsKKworI2RlZmluZSBOVU1fUEdQQV9KT0lOX1NUUkFURUdZCQko KGludCkgSlNUUkFUX0hBU0hfSk9JTiArIDEpCisKKy8qCisgKiBJbiBhbiBvdXRlci1kZWVwIGpv aW4gdHJlZSwgZXZlcnkgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gd2lsbCBiZSBhIHNjYW4s CisgKiBidXQgam9pbiB0cmVlcyB3aXRoIG90aGVyIHNoYXBlcyBjYW4gY29udGFpbiB1bnJvbGxl ZCBqb2lucy4KKyAqCisgKiBUaGUgcGxhbiBub2RlIHdlIHN0b3JlIGhlcmUgd2lsbCBiZSB0aGUg aW5uZXIgb3Igb3V0ZXIgY2hpbGQgb2YgdGhlIGpvaW4KKyAqIG5vZGUsIGFzIGFwcHJvcHJpYXRl LCBleGNlcHQgdGhhdCB3ZSBsb29rIHRocm91Z2ggc3Vibm9kZXMgdGhhdCB3ZSByZWdhcmQgYXMK KyAqIHBhcnQgb2YgdGhlIGpvaW4gbWV0aG9kIGl0c2VsZi4gRm9yIGluc3RhbmNlLCBmb3IgYSBO ZXN0ZWQgTG9vcCB0aGF0CisgKiBtYXRlcmlhbGl6ZXMgdGhlIGlubmVyIGlucHV0LCB3ZSdsbCBz dG9yZSB0aGUgY2hpbGQgb2YgdGhlIE1hdGVyaWFsaXplIG5vZGUsCisgKiBub3QgdGhlIE1hdGVy aWFsaXplIG5vZGUgaXRzZWxmLgorICoKKyAqIElmIHNldHJlZnMgcHJvY2Vzc2luZyBlbGlkZWQg b25lIG9yIG1vcmUgbm9kZXMgZnJvbSB0aGUgcGxhbiB0cmVlLCB0aGVuCisgKiB3ZSdsbCBzdG9y ZSBkZXRhaWxzIGFib3V0IHRoZSB0b3Btb3N0IG9mIHRob3NlIGluIGVsaWRlZF9ub2RlOyBvdGhl cndpc2UsCisgKiBpdCB3aWxsIGJlIE5VTEwuCisgKgorICogRXhhY3RseSBvbmUgb2Ygc2NhbiBh bmQgdW5yb2xsZWRfam9pbiB3aWxsIGJlIG5vbi1OVUxMLgorICovCit0eXBlZGVmIHN0cnVjdAor eworCVBsYW4JICAgKnBsYW47CisJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGU7CisJc3RydWN0IHBn cGFfc2NhbiAqc2NhbjsKKwlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVucm9sbGVkX2pvaW47Cit9IHBn cGFfam9pbl9tZW1iZXI7CisKKy8qCisgKiBXZSBjb252ZXJ0IG91dGVyLWRlZXAgam9pbiB0cmVl cyB0byBhIGZsYXQgc3RydWN0dXJlOyB0aGF0IGlzLCAoKEEgSk9JTiBCKQorICogSk9JTiBDKSBK T0lOIEQgZ2V0cyBjb252ZXJ0ZWQgdG8gb3V0ZXIgPSBBLCBpbm5lciA9IDxCIEMgRD4uICBXaGVu IGpvaW5zCisgKiBhcmVuJ3Qgb3V0ZXItZGVlcCwgc3Vic3RydWN0dXJlIGlzIHJlcXVpcmVkLCBl LmcuIChBIEpPSU4gQikgSk9JTiAoQyBKT0lOIEQpCisgKiBpcyByZXByZXNlbnRlZCBhcyBvdXRl ciA9IEEsIGlubmVyID0gPEIgWD4sIHdoZXJlIFggaXMgYSBwZ3BhX3Vucm9sbGVkX2pvaW4KKyAq IGNvdmVyaW5nIEMtRC4KKyAqLworc3RydWN0IHBncGFfdW5yb2xsZWRfam9pbgoreworCS8qIE91 dGVybW9zdCBtZW1iZXI7IG11c3Qgbm90IGl0c2VsZiBiZSBhbiB1bnJvbGxlZCBqb2luLiAqLwor CXBncGFfam9pbl9tZW1iZXIgb3V0ZXI7CisKKwkvKiBOdW1iZXIgb2YgaW5uZXIgbWVtYmVycy4g TGVuZ3RoIG9mIHRoZSBzdHJhdGVneSBhbmQgaW5uZXIgYXJyYXlzLiAqLworCXVuc2lnbmVkCW5p bm5lcjsKKworCS8qIEFycmF5IG9mIHN0cmF0ZWdpZXMsIG9uZSBwZXIgbm9uLW91dGVybW9zdCBt ZW1iZXIuICovCisJcGdwYV9qb2luX3N0cmF0ZWd5ICpzdHJhdGVneTsKKworCS8qIEFycmF5IG9m IG1lbWJlcnMsIGV4Y2x1ZGluZyB0aGUgb3V0ZXJtb3N0LiBEZWVwZXN0IGZpcnN0LiAqLworCXBn cGFfam9pbl9tZW1iZXIgKmlubmVyOworfTsKKworLyoKKyAqIERvZXMgdGhpcyBwbGFuIG5vZGUg aW5oZXJpdCBmcm9tIEpvaW4/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdwYV9pc19qb2lu KFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBOZXN0TG9vcCkgfHwgSXNBKHBsYW4s IE1lcmdlSm9pbikgfHwgSXNBKHBsYW4sIEhhc2hKb2luKTsKK30KKworZXh0ZXJuIHBncGFfam9p bl91bnJvbGxlciAqcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKTsKK2V4dGVybiB2b2lk IHBncGFfdW5yb2xsX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJIFBsYW4gKnBsYW4sIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCSBwZ3BhX2pv aW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAq Km91dGVyX2pvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKmlubmVy X2pvaW5fdW5yb2xsZXIpOworZXh0ZXJuIHBncGFfdW5yb2xsZWRfam9pbiAqcGdwYV9idWlsZF91 bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJ CQkJCXBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7CitleHRlcm4gdm9pZCBwZ3Bh X2Rlc3Ryb3lfam9pbl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIp OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRw dXQuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjc2NDdhY2RmNWEKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKQEAgLTAsMCArMSw1NzEgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0cHV0LmMKKyAqCSAgcHJvZHVjZSB0 ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcGxhbiB0cmVlIHdhbGsKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworI2luY2x1ZGUg Im5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKwor LyoKKyAqIENvbnRleHQgb2JqZWN0IGZvciB0ZXh0dWFsIGFkdmljZSBnZW5lcmF0aW9uLgorICoK KyAqIHJ0X2lkZW50aWZpZXJzIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgYXJyYXkgb2YgcmFuZ2Ug dGFibGUgaWRlbnRpZmllcnMuCisgKiBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgcGdw YV9pZGVudGlmaWVyLmMgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBidWYgaXMgdGhlIGNhbGxl ci1wcm92aWRlZCBvdXRwdXQgYnVmZmVyLgorICoKKyAqIHdyYXBfY29sdW1uIGlzIHRoZSB3cmFw IGNvbHVtbiwgc28gdGhhdCB3ZSBkb24ndCBjcmVhdGUgb3V0cHV0IHRoYXQgaXMKKyAqIHRvbyB3 aWRlLiBTZWUgcGdwYV9tYXliZV9saW5lYnJlYWsoKSBhbmQgY29tbWVudHMgaW4gcGdwYV9vdXRw dXRfYWR2aWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX291dHB1dF9jb250ZXh0Cit7CisJ Y29uc3QgY2hhciAqKnJpZF9zdHJpbmdzOworCVN0cmluZ0luZm8JYnVmOworCWludAkJCXdyYXBf Y29sdW1uOworfSBwZ3BhX291dHB1dF9jb250ZXh0OworCitzdGF0aWMgdm9pZCBwZ3BhX291dHB1 dF91bnJvbGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkg IHBncGFfdW5yb2xsZWRfam9pbiAqam9pbik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9qb2lu X21lbWJlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJcGdwYV9qb2lu X21lbWJlciAqbWVtYmVyKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3ko cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0 ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBMaXN0ICpzY2Fucyk7CitzdGF0aWMgdm9pZCBwZ3Bh X291dHB1dF9yZWxhdGlvbl9uYW1lKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIE9pZCBy ZWxpZCk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9xdWVyeV9mZWF0dXJlKHBncGFfb3V0cHV0 X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJ CQkJICBMaXN0ICpxdWVyeV9mZWF0dXJlcyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9zaW1w bGVfc3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQljaGFy ICpzdHJhdGVneSwKKwkJCQkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKTsKK3N0YXRpYyB2b2lkIHBn cGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJ CQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0aW9u cyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkJ ICBCaXRtYXBzZXQgKnJlbGlkcyk7CisKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfam9pbl9z dHJhdGVneShwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFf Y3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSk7CitzdGF0 aWMgY2hhciAqcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3BhX3FmX3R5cGUgdHlw ZSk7CisKK3N0YXRpYyB2b2lkIHBncGFfbWF5YmVfbGluZWJyZWFrKFN0cmluZ0luZm8gYnVmLCBp bnQgd3JhcF9jb2x1bW4pOworCisvKgorICogQXBwZW5kIHF1ZXJ5IGFkdmljZSB0byB0aGUgcHJv dmlkZWQgYnVmZmVyLgorICoKKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sICd3YWxr ZXInIG11c3QgYmUgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlCisgKiBtYWluIHBsYW4gdHJlZSBh bmQgYWxsIHN1YnBsYW5zIGZyb20gdGhlIFBsYW5uZWRTdG10LgorICoKKyAqICdydF9pZGVudGlm aWVycycgaXMgYSB0YWJsZSBvZiB1bmlxdWUgaWRlbnRpZmllcnMsIG9uZSBmb3IgZWFjaCBSVEku CisgKiBTZWUgcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdCgpLgorICoK KyAqIFJlc3VsdHMgd2lsbCBiZSBhcHBlbmRlZCB0byAnYnVmJy4KKyAqLwordm9pZAorcGdwYV9v dXRwdXRfYWR2aWNlKFN0cmluZ0luZm8gYnVmLCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwKKwkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKQoreworCUluZGV4 CQlydGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwlM aXN0Q2VsbCAgICpsYzsKKwlwZ3BhX291dHB1dF9jb250ZXh0IGNvbnRleHQ7CisKKwkvKiBCYXNp YyBpbml0aWFsaXphdGlvbi4gKi8KKwltZW1zZXQoJmNvbnRleHQsIDAsIHNpemVvZihwZ3BhX291 dHB1dF9jb250ZXh0KSk7CisJY29udGV4dC5idWYgPSBidWY7CisKKwkvKgorCSAqIENvbnZlcnQg aWRlbnRpZmllcnMgdG8gc3RyaW5nIGZvcm0uIE5vdGUgdGhhdCB0aGUgbG9vcCB2YXJpYWJsZSBo ZXJlIGlzCisJICogbm90IGFuIFJUSSwgYmVjYXVzZSBSVElzIGFyZSAxLWJhc2VkLiBTb21lIFJU SXMgd2lsbCBoYXZlIG5vCisJICogaWRlbnRpZmllciwgZWl0aGVyIGJlY2F1c2UgdGhlIHJlbG9w dGtpbmQgaXMgUlRFX0pPSU4gb3IgYmVjYXVzZSB0aGF0CisJICogcG9ydGlvbiBvZiB0aGUgcXVl cnkgZGlkbid0IG1ha2UgaXQgaW50byB0aGUgZmluYWwgcGxhbi4KKwkgKi8KKwljb250ZXh0LnJp ZF9zdHJpbmdzID0gcGFsbG9jMF9hcnJheShjb25zdCBjaGFyICosIHJ0YWJsZV9sZW5ndGgpOwor CWZvciAoaW50IGkgPSAwOyBpIDwgcnRhYmxlX2xlbmd0aDsgKytpKQorCQlpZiAocnRfaWRlbnRp ZmllcnNbaV0uYWxpYXNfbmFtZSAhPSBOVUxMKQorCQkJY29udGV4dC5yaWRfc3RyaW5nc1tpXSA9 IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50aWZpZXJzW2ldKTsKKworCS8qCisJICog SWYgdGhlIHVzZXIgY2hvb3NlcyB0byB1c2UgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIGluIGFuIDgw LWNvbHVtbiB3aW5kb3cKKwkgKiBmcm9tIGEgcHNxbCBjbGllbnQgd2l0aCBkZWZhdWx0IHNldHRp bmdzLCBwc3FsIHdpbGwgYWRkIG9uZSBzcGFjZSB0bworCSAqIHRoZSBsZWZ0IG9mIHRoZSBvdXRw dXQgYW5kIEVYUExBSU4gd2lsbCBhZGQgdHdvIG1vcmUgdG8gdGhlIGxlZnQgb2YgdGhlCisJICog YWR2aWNlLiBUaHVzLCBsaW5lcyBvZiBtb3JlIHRoYW4gNzcgY2hhcmFjdGVycyB3aWxsIHdyYXAu IFdlIHNldCB0aGUKKwkgKiB3cmFwIGxpbWl0IHRvIDc2IGhlcmUgc28gdGhhdCB0aGUgb3V0cHV0 IHdvbid0IHJlYWNoIGFsbCB0aGUgd2F5IHRvIHRoZQorCSAqIHZlcnkgbGFzdCBjb2x1bW4gb2Yg dGhlIHRlcm1pbmFsLgorCSAqCisJICogT2YgY291cnNlLCB0aGlzIGlzIGZhaXJseSBhcmJpdHJh cnkgc2V0IG9mIGFzc3VtcHRpb25zLCBhbmQgb25lIGNvdWxkCisJICogd2VsbCBtYWtlIGFuIGFy Z3VtZW50IGZvciBhIGRpZmZlcmVudCB3cmFwIGxpbWl0LCBvciBmb3IgYSBjb25maWd1cmFibGUK KwkgKiBvbmUuCisJICovCisJY29udGV4dC53cmFwX2NvbHVtbiA9IDc2OworCisJLyoKKwkgKiBF YWNoIHBpZWNlIG9mIEpPSU5fT1JERVIoKSBhZHZpY2UgZnVsbHkgZGVzY3JpYmVzIHRoZSBqb2lu IG9yZGVyIGZvciBhCisJICogYSBzaW5nbGUgdW5yb2xsZWQgam9pbi4gTWVyZ2luZyBpcyBub3Qg cGVybWl0dGVkLCBiZWNhdXNlIHRoYXQgd291bGQKKwkgKiBjaGFuZ2UgdGhlIG1lYW5pbmcsIGUu Zy4gU0VRX1NDQU4oYSBiIGMgZCkgbWVhbnMgc2ltcGx5IHRoYXQgc2VxdWVudGlhbAorCSAqIHNj YW5zIHNob3VsZCBiZSB1c2VkIGZvciBhbGwgb2YgdGhvc2UgcmVsYXRpb25zLCBhbmQgaXMgdGh1 cyBlcXVpdmFsZW50CisJICogdG8gU0VRX1NDQU4oYSBiKSBTRVFfU0NBTihjIGQpLCBidXQgSk9J Tl9PUkRFUihhIGIgYyBkKSBtZWFucyB0aGF0ICJhIgorCSAqIGlzIHRoZSBkcml2aW5nIHRhYmxl IHdoaWNoIGlzIHRoZW4gam9pbmVkIHRvICJiIiB0aGVuICJjIiB0aGVuICJkIiwKKwkgKiB3aGlj aCBpcyB0b3RhbGx5IGRpZmZlcmVudCBmcm9tIEpPSU5fT1JERVIoYSBiKSBhbmQgSk9JTl9PUkRF UihjIGQpLgorCSAqLworCWZvcmVhY2gobGMsIHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9p bnMpCisJeworCQlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luID0gbGZpcnN0KGxjKTsKKworCQlp ZiAoYnVmLT5sZW4gPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LmJ1ZiwgIkpPSU5fT1JERVIoIik7CisJCXBncGFfb3V0 cHV0X3Vucm9sbGVkX2pvaW4oJmNvbnRleHQsIHVqb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC5idWYsICcpJyk7CisJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQuYnVm LCBjb250ZXh0LndyYXBfY29sdW1uKTsKKwl9CisKKwkvKiBFbWl0IGpvaW4gc3RyYXRlZ3kgYWR2 aWNlLiAqLworCWZvciAoaW50IHMgPSAwOyBzIDwgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWTsgKytz KQorCXsKKwkJY2hhcgkgICAqc3RyYXRlZ3kgPSBwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShz KTsKKworCQlwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3koJmNvbnRleHQsCisJCQkJCQkJCQlz dHJhdGVneSwKKwkJCQkJCQkJCXdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3NdKTsKKwl9CisKKwkv KgorCSAqIEVtaXQgc2NhbiBzdHJhdGVneSBhZHZpY2UgKGJ1dCBub3QgZm9yIG9yZGluYXJ5IHNj YW5zLCB3aGljaCBhcmUKKwkgKiBkZWZpbml0aW9uYWxseSB1bmludGVyZXN0aW5nKS4KKwkgKi8K Kwlmb3IgKGludCBjID0gMDsgYyA8IE5VTV9QR1BBX1NDQU5fU1RSQVRFR1k7ICsrYykKKwkJaWYg KGMgIT0gUEdQQV9TQ0FOX09SRElOQVJZKQorCQkJcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneSgm Y29udGV4dCwgYywgd2Fsa2VyLT5zY2Fuc1tjXSk7CisKKwkvKiBFbWl0IHF1ZXJ5IGZlYXR1cmUg YWR2aWNlLiAqLworCWZvciAoaW50IHQgPSAwOyB0IDwgTlVNX1BHUEFfUUZfVFlQRVM7ICsrdCkK KwkJcGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZSgmY29udGV4dCwgdCwgd2Fsa2VyLT5xdWVyeV9m ZWF0dXJlc1t0XSk7CisKKwkvKiBFbWl0IE5PX0dBVEhFUiBhZHZpY2UuICovCisJcGdwYV9vdXRw dXRfbm9fZ2F0aGVyKCZjb250ZXh0LCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CisKKy8q CisgKiBPdXRwdXQgdGhlIG1lbWJlcnMgb2YgYW4gdW5yb2xsZWQgam9pbiwgZmlyc3QgdGhlIG91 dGVybW9zdCBtZW1iZXIsIGFuZAorICogdGhlbiB0aGUgaW5uZXIgbWVtYmVycyBvbmUgYnkgb25l LCBhcyBwYXJ0IG9mIEpPSU5fT1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X291dHB1dF91bnJvbGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJ CQkgIHBncGFfdW5yb2xsZWRfam9pbiAqam9pbikKK3sKKwlwZ3BhX291dHB1dF9qb2luX21lbWJl cihjb250ZXh0LCAmam9pbi0+b3V0ZXIpOworCisJZm9yIChpbnQgayA9IDA7IGsgPCBqb2luLT5u aW5uZXI7ICsraykKKwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZqb2luLT5pbm5l cltrXTsKKworCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndy YXBfY29sdW1uKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOwor CQlwZ3BhX291dHB1dF9qb2luX21lbWJlcihjb250ZXh0LCBtZW1iZXIpOworCX0KK30KKworLyoK KyAqIE91dHB1dCBhIHNpbmdsZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBhcyBwYXJ0IG9m IEpPSU5fT1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9qb2lu X21lbWJlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJcGdwYV9qb2luX21l bWJlciAqbWVtYmVyKQoreworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJcGdwYV9vdXRw dXRfdW5yb2xsZWRfam9pbihjb250ZXh0LCBtZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJfQorCWVsc2UKKwl7CisJCXBn cGFfc2NhbiAgKnNjYW4gPSBtZW1iZXItPnNjYW47CisKKwkJQXNzZXJ0KHNjYW4gIT0gTlVMTCk7 CisJCWlmIChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJ CQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxp ZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1Ziwg J3snKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNj YW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd9Jyk7 CisJCX0KKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYWR2aWNlIGZvciBhIExpc3Qgb2YgcGdwYV9z Y2FuIG9iamVjdHMuCisgKgorICogQWxsIHRoZSBzY2FucyBtdXN0IHVzZSB0aGUgc3RyYXRlZ3kg c3BlY2lmaWVkIGJ5IHRoZSAic3RyYXRlZ3kiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAor cGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAor CQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIExpc3QgKnNjYW5z KQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChzY2FucyA9PSBOSUwpCisJCXJldHVy bjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIl cygiLAorCQkJCQkgcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3koc3RyYXRlZ3kpKTsKKworCWZv cmVhY2hfcHRyKHBncGFfc2Nhbiwgc2Nhbiwgc2NhbnMpCisJeworCQlQbGFuCSAgICpwbGFuID0g c2Nhbi0+cGxhbjsKKworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNlCisJ CXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9j b2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQl9 CisKKwkJLyogT3V0cHV0IHRoZSByZWxhdGlvbiBpZGVudGlmaWVycy4gKi8KKwkJaWYgKGJtc19t ZW1iZXJzaGlwKHNjYW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0 X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVsc2UK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdw YV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCisJCS8q IEZvciBpbmRleCBvciBpbmRleC1vbmx5IHNjYW5zLCBvdXRwdXQgaW5kZXggaW5mb3JtYXRpb24u ICovCisJCWlmIChzdHJhdGVneSA9PSBQR1BBX1NDQU5fSU5ERVgpCisJCXsKKwkJCUFzc2VydChJ c0EocGxhbiwgSW5kZXhTY2FuKSk7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5i dWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwgKChJ bmRleFNjYW4gKikgcGxhbiktPmluZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09 IFBHUEFfU0NBTl9JTkRFWF9PTkxZKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4T25s eVNjYW4pKTsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+ d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcp OworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShjb250ZXh0LAorCQkJCQkJCQkJICAoKElu ZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4aWQpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRl eHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IGEgc2No ZW1hLXF1YWxpZmllZCByZWxhdGlvbiBuYW1lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRw dXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQp Cit7CisJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpOworCWNoYXIJICAg KnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKG5zcG9pZCk7CisJY2hh cgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShyZWxpZCk7CisKKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1lc3BhY2UpKTsKKwlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcuJyk7CisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZSkpOworfQorCisv KgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVyZSBvYmpl Y3RzLgorICoKKyAqIEFsbCBmZWF0dXJlcyBtdXN0IGJlIG9mIHRoZSB0eXBlIHNwZWNpZmllZCBi eSB0aGUgInR5cGUiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcXVl cnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBwZ3BhX3FmX3R5cGUgdHlw ZSwKKwkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVl OworCisJaWYgKHF1ZXJ5X2ZlYXR1cmVzID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRl eHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn XG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJCQkJCSBwZ3Bh X2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHR5cGUpKTsKKworCWZvcmVhY2hfcHRyKHBncGFf cXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJ Zmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250 ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChxZi0+cmVs aWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQs IGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNv bnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihj b250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBj b250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgInNpbXBsZSIgYWR2aWNl IGZvciBhIExpc3Qgb2YgQml0bWFwc2V0IG9iamVjdHMgZWFjaCBvZiB3aGljaAorICogY29udGFp bnMgb25lIG9yIG1vcmUgUlRJcy4KKyAqCisgKiBCeSBzaW1wbGUsIHdlIGp1c3QgbWVhbiB0aGF0 IHRoZSBhZHZpY2UgZW1pdHRlZCBmb2xsb3dzIHRoZSBtb3N0CisgKiBzdHJhaWdodGZvcndhcmQg cGF0dGVybjogdGhlIHN0cmF0ZWd5IG5hbWUsIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBpdGVtcwor ICogc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZCBieSBwYXJlbnRoZXNlcy4gSW5k aXZpZHVhbCBpdGVtcyBpbgorICogdGhlIGxpc3QgYXJlIGEgc2luZ2xlIHJlbGF0aW9uIGlkZW50 aWZpZXIgZm9yIGEgQml0bWFwc2V0IHRoYXQgY29udGFpbnMKKyAqIGp1c3Qgb25lIG1lbWJlciwg b3IgYSBzdWItbGlzdCBhZ2FpbiBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBzdXJyb3VuZGVkCisg KiBieSBwYXJlbnRoZXNlcyBmb3IgYSBCaXRtYXBzZXQgd2l0aCBtdWx0aXBsZSBtZW1iZXJzLiBC aXRtYXBzZXRzIHdpdGgKKyAqIG5vIG1lbWJlcnMgcHJvYmFibHkgc2hvdWxkbid0IG9jY3VyIGhl cmUsIGJ1dCBpZiB0aGV5IGRvIHRoZXknbGwgYmUKKyAqIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN1 Yi1saXN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBn cGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnN0cmF0ZWd5LAorCQkJCQkJCUxpc3Qg KnJlbGlkX3NldHMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKHJlbGlkX3NldHMg PT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0luZm8o Y29udGV4dC0+YnVmLCAiJXMoIiwgc3RyYXRlZ3kpOworCisJZm9yZWFjaF9ub2RlKEJpdG1hcHNl dCwgcmVsaWRzLCByZWxpZF9zZXRzKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxz ZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNv bnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChyZWxpZHMpID09IEJNU19TSU5H TEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBy ZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYs IHJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJ CX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJcGdw YV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9 CisKKy8qCisgKiBPdXRwdXQgTk9fR0FUSEVSIGFkdmljZSBmb3IgYWxsIHJlbGF0aW9ucyBub3Qg YXBwZWFyaW5nIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9vdXRwdXRfY29udGV4 dCAqY29udGV4dCwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJaWYgKHJlbGlkcyA9PSBOVUxMKQor CQlyZXR1cm47CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRl eHQtPmJ1ZiwgIk5PX0dBVEhFUigiKTsKKwlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwg Y29udGV4dC0+YnVmLCByZWxpZHMpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJyknKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgaWRlbnRpZmllcnMgZm9yIGVhY2ggUlRJ IGluIHRoZSBwcm92aWRlZCBzZXQuCisgKgorICogSWRlbnRpZmllcnMgYXJlIHNlcGFyYXRlZCBi eSBzcGFjZXMsIGFuZCBhIGxpbmUgYnJlYWsgaXMgcG9zc2libGUgYWZ0ZXIKKyAqIGVhY2ggb25l LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFfb3V0cHV0X2Nv bnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRz KQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCXdoaWxlICgo cnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJCWNvbnN0IGNo YXIgKnJpZF9zdHJpbmcgPSBjb250ZXh0LT5yaWRfc3RyaW5nc1tydGkgLSAxXTsKKworCQlpZiAo cmlkX3N0cmluZyA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwgIm5vIGlkZW50aWZpZXIgZm9yIFJU SSAlZCIsIHJ0aSk7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJCQlmaXJzdCA9IGZhbHNlOworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHJpZF9zdHJpbmcpOworCQl9CisJCWVsc2UKKwkJ eworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoYnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJ CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyIsIHJpZF9zdHJpbmcpOworCQl9CisJfQorfQor CisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVk IGpvaW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19qb2luX3N0 cmF0ZWd5KHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlzd2l0Y2ggKHN0cmF0ZWd5 KQorCXsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAiTUVSR0Vf Sk9JTl9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQly ZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9P UF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4iOworCQljYXNlIEpTVFJBVF9O RVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJORVNU RURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBKU1RSQVRfSEFTSF9KT0lOOgorCQkJcmV0dXJuICJI QVNIX0pPSU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisK Ky8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQg c2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3NjYW5fc3Ry YXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRjaCAoc3RyYXRlZ3kp CisJeworCQljYXNlIFBHUEFfU0NBTl9PUkRJTkFSWToKKwkJCXJldHVybiAiT1JESU5BUllfU0NB TiI7CisJCWNhc2UgUEdQQV9TQ0FOX1NFUToKKwkJCXJldHVybiAiU0VRX1NDQU4iOworCQljYXNl IFBHUEFfU0NBTl9CSVRNQVBfSEVBUDoKKwkJCXJldHVybiAiQklUTUFQX0hFQVBfU0NBTiI7CisJ CWNhc2UgUEdQQV9TQ0FOX0ZPUkVJR046CisJCQlyZXR1cm4gIkZPUkVJR05fSk9JTiI7CisJCWNh c2UgUEdQQV9TQ0FOX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsKKwkJY2FzZSBQR1BB X1NDQU5fSU5ERVhfT05MWToKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FOIjsKKwkJY2FzZSBQ R1BBX1NDQU5fUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9OV0lTRSI7CisJCWNh c2UgUEdQQV9TQ0FOX1RJRDoKKwkJCXJldHVybiAiVElEX1NDQU4iOworCX0KKworCXBnX3VucmVh Y2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0 IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGlj IGNoYXIgKgorcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3BhX3FmX3R5cGUgdHlw ZSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCQljYXNlIFBHUEFRRl9HQVRIRVI6CisJCQlyZXR1 cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQVFGX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiAiR0FU SEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCXJldHVy biAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNhc2UgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRToK KwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsKKwl9CisKKworCXBnX3VucmVhY2hhYmxlKCk7 CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBsaW5lIGJyZWFrIGludG8gdGhl IFN0cmluZ0luZm9EYXRhLCBpZiBuZWVkZWQuCisgKgorICogSWYgd3JhcF9jb2x1bW4gaXMgemVy byBvciBuZWdhdGl2ZSwgdGhpcyBkb2VzIG5vdGhpbmcuIE90aGVyd2lzZSwgd2UKKyAqIGNvbnNp ZGVyIGluc2VydGluZyBhIG5ld2xpbmUuIFdlIG9ubHkgaW5zZXJ0IGEgbmV3bGluZSBpZiB0aGUg bGVuZ3RoIG9mCisgKiB0aGUgbGFzdCBsaW5lIGluIHRoZSBidWZmZXIgZXhjZWVkcyB3cmFwX2Nv bHVtbiwgYW5kIG5vdCBpZiB3ZSdkIGJlCisgKiBpbnNlcnRpbmcgYSBuZXdsaW5lIGF0IG9yIGJl Zm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisgKgorICogVGhlIHBvc2l0 aW9uIGF0IHdoaWNoIHRoZSBuZXdsaW5lIGlzIGluc2VydGVkIGlzIHNpbXBseSB3aGVyZXZlciB0 aGUKKyAqIGJ1ZmZlciBlbmRlZCB0aGUgbGFzdCB0aW1lIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxl ZC4gSW4gb3RoZXIgd29yZHMsCisgKiB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGNhbGwgdGhp cyBmdW5jdGlvbiBldmVyeSB0aW1lIHdlIHJlYWNoIGEgZ29vZAorICogcGxhY2UgZm9yIGEgbGlu ZSBicmVhay4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfbWF5YmVfbGluZWJyZWFrKFN0cmluZ0lu Zm8gYnVmLCBpbnQgd3JhcF9jb2x1bW4pCit7CisJY2hhcgkgICAqdHJhaWxpbmdfbmw7CisJaW50 CQkJbGluZV9zdGFydDsKKwlpbnQJCQlzYXZlX2N1cnNvcjsKKworCS8qIElmIGxpbmUgd3JhcHBp bmcgaXMgZGlzYWJsZWQsIGV4aXQgcXVpY2tseS4gKi8KKwlpZiAod3JhcF9jb2x1bW4gPD0gMCkK KwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgbGluZV9zdGFydCB0byB0aGUgYnl0ZSBvZmZzZXQg d2l0aGluIGJ1Zi0+ZGF0YSBvZiB0aGUgZmlyc3QKKwkgKiBjaGFyYWN0ZXIgb2YgdGhlIGN1cnJl bnQgbGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgbGluZSBtZWFucyB0aGUgbGFzdAorCSAqIG9uZSBp biB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgbGluZV9zdGFydCBjb3VsZCBiZSB0aGUgb2Zmc2V0IG9m IHRoZQorCSAqIHRyYWlsaW5nICdcMCcgaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBidWZm ZXIgaXMgYSBsaW5lIGJyZWFrLgorCSAqLworCXRyYWlsaW5nX25sID0gc3RycmNocihidWYtPmRh dGEsICdcbicpOworCWlmICh0cmFpbGluZ19ubCA9PSBOVUxMKQorCQlsaW5lX3N0YXJ0ID0gMDsK KwllbHNlCisJCWxpbmVfc3RhcnQgPSAodHJhaWxpbmdfbmwgLSBidWYtPmRhdGEpICsgMTsKKwor CS8qCisJICogUmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBlbmQgb2YgdGhlIGJ1ZmZlciBpcyBh IHBvdGVudGlhbCBsb2NhdGlvbiB0bworCSAqIGluc2VydCBhIGxpbmUgYnJlYWsgb24gYSBmdXR1 cmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCXNhdmVfY3Vyc29yID0gYnVmLT5jdXJz b3I7CisJYnVmLT5jdXJzb3IgPSBidWYtPmxlbjsKKworCS8qIElmIHdlIGhhdmVuJ3QgcGFzc2Vk IHRoZSB3cmFwIGNvbHVtbiwgd2UgZG9uJ3QgbmVlZCBhIG5ld2xpbmUuICovCisJaWYgKGJ1Zi0+ bGVuIC0gbGluZV9zdGFydCA8PSB3cmFwX2NvbHVtbikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJ dCBvbmx5IG1ha2VzIHNlbnNlIHRvIGluc2VydCBhIG5ld2xpbmUgYXQgYSBwb3NpdGlvbiBsYXRl ciB0aGFuIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lLgorCSAqLworCWlm IChidWYtPmN1cnNvciA8PSBsaW5lX3N0YXJ0KQorCQlyZXR1cm47CisKKwkvKiBJbnNlcnQgYSBu ZXdsaW5lIGF0IHRoZSBwcmV2aW91cyBjdXJzb3IgbG9jYXRpb24uICovCisJZW5sYXJnZVN0cmlu Z0luZm8oYnVmLCAxKTsKKwltZW1tb3ZlKCZidWYtPmRhdGFbc2F2ZV9jdXJzb3JdICsgMSwgJmJ1 Zi0+ZGF0YVtzYXZlX2N1cnNvcl0sCisJCQlidWYtPmxlbiAtIHNhdmVfY3Vyc29yKTsKKwkrK2J1 Zi0+Y3Vyc29yOworCWJ1Zi0+ZGF0YVsrK2J1Zi0+bGVuXSA9ICdcMCc7CisJYnVmLT5kYXRhW3Nh dmVfY3Vyc29yXSA9ICdcbic7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfb3V0cHV0LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3NDk2ZDc2ZjUyCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCkBAIC0wLDAg KzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0cHV0LmgKKyAqCSAg cHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcGxhbiB0cmVlIHdh bGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRw dXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfT1VUUFVUX0gK KyNkZWZpbmUgUEdQQV9PVVRQVVRfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisj aW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworZXh0ZXJuIHZvaWQgcGdwYV9vdXRwdXRfYWR2aWNl KFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueSBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNGMzYTNlZDZkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKQEAgLTAsMCArMSwzMDEgQEAKKyV7CisvKgor ICogUGFyc2VyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDI1 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmbWdy LmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIK KyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogQmlzb24gZG9lc24ndCBhbGxvY2F0 ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3NzIHBhcnNlciBjYWxscywKKyAqIHNv IHdlIGNhbiBlYXNpbHkgaGF2ZSBpdCB1c2UgcGFsbG9jIGluc3RlYWQgb2YgbWFsbG9jLiAgVGhp cyBwcmV2ZW50cworICogbWVtb3J5IGxlYWtzIGlmIHdlIGVycm9yIG91dCBkdXJpbmcgcGFyc2lu Zy4KKyAqLworI2RlZmluZSBZWU1BTExPQyBwYWxsb2MKKyNkZWZpbmUgWVlGUkVFICAgcGZyZWUK KyV9CisKKy8qIEJJU09OIERlY2xhcmF0aW9ucyAqLworJXBhcnNlLXBhcmFtIHtMaXN0ICoqcmVz dWx0fQorJXBhcnNlLXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislcGFyc2UtcGFy YW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVsZXgtcGFyYW0ge0xpc3QgKipyZXN1bHR9CislbGV4 LXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislbGV4LXBhcmFtIHt5eXNjYW5fdCB5 eXNjYW5uZXJ9CislcHVyZS1wYXJzZXIKKyVleHBlY3QgMAorJW5hbWUtcHJlZml4PSJwZ3BhX3l5 IgorCisldW5pb24KK3sKKwljaGFyCSAgICpzdHI7CisJaW50CQkJaW50ZWdlcjsKKwlMaXN0CSAg ICpsaXN0OworCXBncGFfYWR2aWNlX2l0ZW0gKml0ZW07CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQ7CisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7Cit9CisldG9rZW4gPHN0cj4gVE9L X0lERU5UIFRPS19UQUdfSk9JTl9PUkRFUiBUT0tfVEFHX0lOREVYCisldG9rZW4gPHN0cj4gVE9L X1RBR19TSU1QTEUgVE9LX1RBR19HRU5FUklDCisldG9rZW4gPGludGVnZXI+IFRPS19JTlRFR0VS CisKKyV0eXBlIDxpbnRlZ2VyPiBvcHRfcmlfb2NjdXJyZW5jZQorJXR5cGUgPGl0ZW0+IGFkdmlj ZV9pdGVtCisldHlwZSA8bGlzdD4gYWR2aWNlX2l0ZW1fbGlzdCBnZW5lcmljX3RhcmdldF9saXN0 CisldHlwZSA8bGlzdD4gaW5kZXhfdGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl90YXJnZXRfbGlzdAor JXR5cGUgPGxpc3Q+IG9wdF9wYXJ0aXRpb24gc2ltcGxlX3RhcmdldF9saXN0CisldHlwZSA8c3Ry PiBpZGVudGlmaWVyIG9wdF9wbGFuX25hbWUKKyV0eXBlIDx0YXJnZXQ+IGdlbmVyaWNfc3VibGlz dCBqb2luX29yZGVyX3N1Ymxpc3QKKyV0eXBlIDx0YXJnZXQ+IHJlbGF0aW9uX2lkZW50aWZpZXIK KyV0eXBlIDxpdGFyZ2V0PiBpbmRleF9uYW1lCisKKyVzdGFydCBwYXJzZV90b3BsZXZlbAorCisv KiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCisKK3BhcnNlX3RvcGxldmVsOiBhZHZpY2VfaXRlbV9s aXN0CisJCXsKKwkJCSh2b2lkKSB5eW5lcnJzOwkJCQkvKiBzdXBwcmVzcyBjb21waWxlciB3YXJu aW5nICovCisJCQkqcmVzdWx0ID0gJDE7CisJCX0KKwk7CisKK2FkdmljZV9pdGVtX2xpc3Q6IGFk dmljZV9pdGVtX2xpc3QgYWR2aWNlX2l0ZW0KKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQor CXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworYWR2aWNlX2l0ZW06IFRPS19UQUdfSk9JTl9PUkRF UiAnKCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29i amVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQkLT50YWcgPSBQR1BBX1RBR19KT0lOX09SREVS OworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJCWlmICgkMyA9PSBOSUwpCisJCQkJcGdwYV95eWVy cm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgIkpPSU5f T1JERVIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSB0YXJnZXQiKTsKKwkJfQorCXwgVE9LX1RBR19J TkRFWCAnKCcgaW5kZXhfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQlpZiAoc3RyY21wKCQxLCAiaW5kZXhfb25seV9zY2Fu IikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJZWxz ZSBpZiAoc3RyY21wKCQxLCAiaW5kZXhfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFf VEFHX0lOREVYX1NDQU47CisJCQllbHNlCisJCQkJZWxvZyhFUlJPUiwgInRhZyBwYXJzaW5nIGZh aWxlZDogJXMiLCAkMSk7CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX1NJ TVBMRSAnKCcgc2ltcGxlX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2Jq ZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0cmNtcCgkMSwgImJpdG1hcF9oZWFwX3Nj YW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJ ZWxzZSBpZiAoc3RyY21wKCQxLCAibm9fZ2F0aGVyIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQ QV9UQUdfTk9fR0FUSEVSOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAic2VxX3NjYW4iKSA9PSAw KQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19TRVFfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgk MSwgInRpZF9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfVElEX1NDQU47CisJ CQllbHNlCisJCQkJZWxvZyhFUlJPUiwgInRhZyBwYXJzaW5nIGZhaWxlZDogJXMiLCAkMSk7CisJ CQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX0dFTkVSSUMgJygnIGdlbmVyaWNf dGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCWJvb2wJZmFpbDsKKworCQkJJCQgPSBwYWxsb2MwX29i amVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQkLT50YWcgPSBwZ3BhX3BhcnNlX2FkdmljZV90 YWcoJDEsICZmYWlsKTsKKwkJCWlmIChmYWlsKQorCQkJeworCQkJCXBncGFfeXllcnJvcihyZXN1 bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJ1bnJlY29nbml6ZWQg YWR2aWNlIHRhZyIpOworCQkJfQorCisJCQlpZiAoJCQtPnRhZyA9PSBQR1BBX1RBR19GT1JFSUdO X0pPSU4pCisJCQl7CisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQs ICQzKQorCQkJCXsKKwkJCQkJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJ RklFUiB8fAorCQkJCQkJbGlzdF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbikgPT0gMSkKKwkJCQkJ CQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJ CQkJCQkJCSAiRk9SRUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUg cmVsYXRpb24gaWRlbnRpZmllciIpOworCQkJCX0KKwkJCX0KKworCQkJJCQtPnRhcmdldHMgPSAk MzsKKwkJfQorCTsKKworcmVsYXRpb25faWRlbnRpZmllcjogaWRlbnRpZmllciBvcHRfcmlfb2Nj dXJyZW5jZSBvcHRfcGFydGl0aW9uIG9wdF9wbGFuX25hbWUKKwkJeworCQkJJCQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRf SURFTlRJRklFUjsKKwkJCSQkLT5yaWQuYWxpYXNfbmFtZSA9ICQxOworCQkJJCQtPnJpZC5vY2N1 cnJlbmNlID0gJDI7CisJCQlpZiAobGlzdF9sZW5ndGgoJDMpID09IDIpCisJCQl7CisJCQkJJCQt PnJpZC5wYXJ0bnNwID0gbGluaXRpYWwoJDMpOworCQkJCSQkLT5yaWQucGFydHJlbCA9IGxzZWNv bmQoJDMpOworCQkJfQorCQkJZWxzZSBpZiAoJDMgIT0gTklMKQorCQkJCSQkLT5yaWQucGFydHJl bCA9IGxpbml0aWFsKCQzKTsKKwkJCSQkLT5yaWQucGxhbl9uYW1lID0gJDQ7CisJCX0KKwk7CisK K2luZGV4X25hbWU6IGlkZW50aWZpZXIKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3Bh X2luZGV4X3RhcmdldCk7CisJCQkkJC0+aW5kbmFtZSA9ICQxOworCQl9CisJfCBpZGVudGlmaWVy ICcuJyBpZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90 YXJnZXQpOworCQkJJCQtPmluZG5hbWVzcGFjZSA9ICQxOworCQkJJCQtPmluZG5hbWUgPSAkMzsK KwkJfQorCTsKKworb3B0X3JpX29jY3VycmVuY2U6CisJJyMnIFRPS19JTlRFR0VSCisJCXsKKwkJ CWlmICgkMiA8PSAwKQorCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19w LCB5eXNjYW5uZXIsCisJCQkJCQkJICJvbmx5IHBvc2l0aXZlIG9jY3VycmVuY2UgbnVtYmVycyBh cmUgcGVybWl0dGVkIik7CisJCQkkJCA9ICQyOworCQl9CisJfAorCQl7CisJCQkvKiBUaGUgZGVm YXVsdCBvY2N1cnJlbmNlIG51bWJlciBpcyAxLiAqLworCQkJJCQgPSAxOworCQl9CisJOworCitp ZGVudGlmaWVyOiBUT0tfSURFTlQKKwl8IFRPS19UQUdfSk9JTl9PUkRFUgorCXwgVE9LX1RBR19J TkRFWAorCXwgVE9LX1RBR19TSU1QTEUKKwl8IFRPS19UQUdfR0VORVJJQworCTsKKworLyoKKyAq IFdoZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdlIGFsd2F5cyBzY2hlbWEtcXVhbGlmeSB0aGUgcGFy dGl0aW9uIG5hbWUsIGJ1dAorICogd2hlbiBwYXJzaW5nIGFkdmljZSwgd2UgYWNjZXB0IGEgc3Bl Y2lmaWNhdGlvbiB0aGF0IGxhY2tzIG9uZS4KKyAqLworb3B0X3BhcnRpdGlvbjoKKwknLycgVE9L X0lERU5UICcuJyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFrZTIoJDIsICQ0KTsgfQorCXwg Jy8nIFRPS19JREVOVAorCQl7ICQkID0gbGlzdF9tYWtlMSgkMik7IH0KKwl8CisJCXsgJCQgPSBO SUw7IH0KKwk7CisKK29wdF9wbGFuX25hbWU6CisJJ0AnIFRPS19JREVOVAorCQl7ICQkID0gJDI7 IH0KKwl8CisJCXsgJCQgPSBOVUxMOyB9CisJOworCitnZW5lcmljX3RhcmdldF9saXN0OiBnZW5l cmljX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEs ICQyKTsgfQorCXwgZ2VuZXJpY190YXJnZXRfbGlzdCBnZW5lcmljX3N1Ymxpc3QKKwkJeyAkJCA9 IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworZ2VuZXJpY19z dWJsaXN0OiAnKCcgc2ltcGxlX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9P UkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKworaW5kZXhfdGFy Z2V0X2xpc3Q6CisJICBpbmRleF90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGluZGV4 X25hbWUKKwkJeworCQkJJDItPml0YXJnZXQgPSAkMzsKKwkJCSQkID0gbGFwcGVuZCgkMSwgJDIp OworCQl9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitqb2luX29yZGVyX3RhcmdldF9saXN0 OiBqb2luX29yZGVyX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxh cHBlbmQoJDEsICQyKTsgfQorCXwgam9pbl9vcmRlcl90YXJnZXRfbGlzdCBqb2luX29yZGVyX3N1 Ymxpc3QKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQor CTsKKworam9pbl9vcmRlcl9zdWJsaXN0OgorCScoJyBqb2luX29yZGVyX3RhcmdldF9saXN0ICcp JworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkk JC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAk MjsKKwkJfQorCXwgJ3snIHNpbXBsZV90YXJnZXRfbGlzdCAnfScKKwkJeworCQkJJCQgPSBwYWxs b2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJH RVRfVU5PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKworc2lt cGxlX3RhcmdldF9saXN0OiBzaW1wbGVfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllcgor CQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCisl JQorCisvKgorICogUGFyc2UgYW4gYWR2aWNlX3N0cmluZyBhbmQgcmV0dXJuIHRoZSByZXN1bHRp bmcgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVtCisgKiBvYmplY3RzLiBJZiBhIHBhcnNlIGVycm9y IG9jY3VycywgaW5zdGVhZCByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuIHZhbHVl IGlzIE5VTEwsICplcnJvcl9wIHdpbGwgYmUgc2V0IHRvIHRoZSBlcnJvciBtZXNzYWdlOworICog b3RoZXJ3aXNlLCAqZXJyb3JfcCB3aWxsIGJlIHNldCB0byBOVUxMLgorICovCitMaXN0ICoKK3Bn cGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywgY2hhciAqKmVycm9yX3ApCit7CisJ eXlzY2FuX3QJc2Nhbm5lcjsKKwlMaXN0CSAgICpyZXN1bHQ7CisJY2hhcgkgICAqZXJyb3IgPSBO VUxMOworCisJcGdwYV9zY2FubmVyX2luaXQoYWR2aWNlX3N0cmluZywgJnNjYW5uZXIpOworCXBn cGFfeXlwYXJzZSgmcmVzdWx0LCAmZXJyb3IsIHNjYW5uZXIpOworCXBncGFfc2Nhbm5lcl9maW5p c2goc2Nhbm5lcik7CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCSplcnJvcl9wID0gZXJy b3I7CisJCXJldHVybiBOVUxMOworCX0KKworCSplcnJvcl9wID0gTlVMTDsKKwlyZXR1cm4gcmVz dWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIu YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNmYzkxMjdhOTlkCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwpAQCAtMCwwICsxLDIxNjYgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfcGxhbm5lci5jCisgKgkgIFVzZSBwbGFu bmVyIGhvb2tzIHRvIG9ic2VydmUgYW5kIG1vZGlmaXkgcGxhbm5lciBiZWhhdmlvcgorICoKKyAq IEFsbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIHBsYW5uZXIgaGFwcGVucyBoZXJlLiBNdWNo IG9mIGl0IGhhcyB0bworICogZG8gd2l0aCBlbmZvcmNpbmcgc3VwcGxpZWQgYWR2aWNlLCBidXQg d2UgYWxzbyBuZWVkIHRoZXNlIGhvb2tzIHRvCisgKiBnZW5lcmF0ZSBhZHZpY2Ugc3RyaW5ncyAo dGhvdWdoIHRoZSBoZWF2eSBsaWZ0aW5nIGluIHRoYXQgY2FzZSBpcworICogbW9zdGx5IGRvbmUg YnkgcGdwYV93YWxrZXIuYykuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfcGxhbm5lci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRl ICJwZ3BhX2NvbGxlY3Rvci5oIgorI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1 ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAi cGdwYV90cm92ZS5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21t YW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisjaW5j bHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2V4dGVuZHBsYW4u aCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv cGF0aHMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUg InV0aWxzL2xzeXNjYWNoZS5oIgorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisvKgor ICogV2hlbiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCB3ZSB0cnkgZ2VuZXJhdGluZyByZWxhdGlv biBpZGVudGlmaWVycyBkdXJpbmcKKyAqIHBsYW5uaW5nLCBzYXZpbmcgdGhlbSBpbiBhIGhhc2gg dGFibGUsIGFuZCB0aGVuIGNyb3NzLWNoZWNraW5nIHRoZW0gYWdhaW5zdAorICogdGhlIG9uZXMg Z2VuZXJhdGVkIGFmdGVyIHBsYW5uaW5nIGlzIGNvbXBsZXRlLgorICovCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3JpX2NoZWNrZXJfa2V5Cit7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQly dGk7Cit9IHBncGFfcmlfY2hlY2tlcl9rZXk7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hl Y2tlcgoreworCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5OworCXVpbnQzMgkJc3RhdHVzOworCWNv bnN0IGNoYXIgKnJpZF9zdHJpbmc7Cit9IHBncGFfcmlfY2hlY2tlcjsKKworc3RhdGljIHVpbnQz MiBwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpOworCitz dGF0aWMgaW5saW5lIGJvb2wKK3BncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tleShwZ3BhX3JpX2No ZWNrZXJfa2V5IGEsIHBncGFfcmlfY2hlY2tlcl9rZXkgYikKK3sKKwlpZiAoYS5ydGkgIT0gYi5y dGkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJu IChiLnBsYW5fbmFtZSA9PSBOVUxMKTsKKwlpZiAoYi5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0 dXJuIGZhbHNlOworCXJldHVybiBzdHJjbXAoYS5wbGFuX25hbWUsIGIucGxhbl9uYW1lKSA9PSAw OworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBncGFfcmlfY2hlY2sKKyNkZWZpbmUgU0hfRUxF TUVOVF9UWVBFCQlwZ3BhX3JpX2NoZWNrZXIKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3Jp X2NoZWNrZXJfa2V5CisjZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNkZWZpbmUgU0hfSEFTSF9LRVko dGIsIGtleSkJcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KGtleSkKKyNkZWZpbmUJU0hfRVFVQUwo dGIsIGEsIGIpCXBncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9T Q09QRQkJCXN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJ TkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisjZW5kaWYKKwordHlwZWRlZiBlbnVt IHBncGFfam9fb3V0Y29tZQoreworCVBHUEFfSk9fUEVSTUlUVEVELAkJCS8qIHBlcm1pdCB0aGlz IGpvaW4gb3JkZXIgKi8KKwlQR1BBX0pPX0RFTklFRCwJCQkJLyogZGVueSB0aGlzIGpvaW4gb3Jk ZXIgKi8KKwlQR1BBX0pPX0lORElGRkVSRU5UCQkJLyogZG8gbmVpdGhlciAqLworfSBwZ3BhX2pv X291dGNvbWU7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbm5lcl9zdGF0ZQoreworCUV4cGxh aW5TdGF0ZSAqZXhwbGFpbl9zdGF0ZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7 CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZzsKKwlwZ3BhX3Ryb3ZlICp0cm92ZTsKKwlN ZW1vcnlDb250ZXh0IHRyb3ZlX2N4dDsKKwlMaXN0CSAgICpzal91bmlxdWVfcmVsczsKKworI2lm ZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2NoZWNrX2hhc2ggKnJpX2NoZWNrX2hh c2g7CisjZW5kaWYKK30gcGdwYV9wbGFubmVyX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCBwZ3Bh X2pvaW5fc3RhdGUKK3sKKwkvKiBNb3N0LXJlY2VudGx5LWNvbnNpZGVyZWQgb3V0ZXIgcmVsLiAq LworCVJlbE9wdEluZm8gKm91dGVycmVsOworCisJLyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVk IGlubmVyIHJlbC4gKi8KKwlSZWxPcHRJbmZvICppbm5lcnJlbDsKKworCS8qCisJICogQXJyYXkg b2YgcmVsYXRpb24gaWRlbnRpZmllcnMgZm9yIGFsbCBtZW1iZXJzIG9mIHRoaXMgam9pbnJlbCwg d2l0aAorCSAqIG91dGVycmVsIGlkZW5pZmllcnMgYmVmb3JlIGlubmVycmVsIGlkZW50aWZpZXJz LgorCSAqLworCXBncGFfaWRlbnRpZmllciAqcmlkczsKKworCS8qIE51bWJlciBvZiBvdXRlciBy ZWwgaWRlbnRpZmllcnMuICovCisJaW50CQkJb3V0ZXJfY291bnQ7CisKKwkvKiBOdW1iZXIgb2Yg aW5uZXIgcmVsIGlkZW50aWZpZXJzLiAqLworCWludAkJCWlubmVyX2NvdW50OworCisJLyoKKwkg KiBUcm92ZSBsb29rdXAgcmVzdWx0cy4KKwkgKgorCSAqIGpvaW5fZW50cmllcyBhbmQgcmVsX2Vu dHJpZXMgYXJlIGFycmF5cyBvZiBlbnRyaWVzLCBhbmQgam9pbl9pbmRleGVzCisJICogYW5kIHJl bF9pbmRleGVzIGFyZSB0aGUgaW50ZWdlciBvZmZzZXRzIHdpdGhpbiB0aG9zZSBhcnJheXMgb2Yg ZW50cmllcworCSAqIHBvdGVudGlhbGx5IHJlbGV2YW50IHRvIHVzLiBUaGUgImpvaW4iIGZpZWxk cyBjb3JyZXNwb25kIHRvIGEgbG9va3VwCisJICogdXNpbmcgUEdQQV9UUk9WRV9MT09LVVBfSk9J TiBhbmQgdGhlICJyZWwiIGZpZWxkcyB0byBhIGxvb2t1cCB1c2luZworCSAqIFBHUEFfVFJPVkVf TE9PS1VQX1JFTC4KKwkgKi8KKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpqb2luX2VudHJpZXM7CisJQml0 bWFwc2V0ICAqam9pbl9pbmRleGVzOworCXBncGFfdHJvdmVfZW50cnkgKnJlbF9lbnRyaWVzOwor CUJpdG1hcHNldCAgKnJlbF9pbmRleGVzOworfSBwZ3BhX2pvaW5fc3RhdGU7CisKKy8qIFNhdmVk IGhvb2sgdmFsdWVzICovCitzdGF0aWMgYnVpbGRfc2ltcGxlX3JlbF9ob29rX3R5cGUgcHJldl9i dWlsZF9zaW1wbGVfcmVsID0gTlVMTDsKK3N0YXRpYyBqb2luX3BhdGhfc2V0dXBfaG9va190eXBl IHByZXZfam9pbl9wYXRoX3NldHVwID0gTlVMTDsKK3N0YXRpYyBqb2lucmVsX3NldHVwX2hvb2tf dHlwZSBwcmV2X2pvaW5yZWxfc2V0dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2V0dXBfaG9v a190eXBlIHByZXZfcGxhbm5lcl9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93 bl9ob29rX3R5cGUgcHJldl9wbGFubmVyX3NodXRkb3duID0gTlVMTDsKKworLyogT3RoZXIgZ2xv YmFsIHZhcmlhYmVzICovCitzdGF0aWMgaW50CXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gLTE7CisK Ky8qIEZ1bmN0aW9uIHByb3RvdHlwZXMuICovCitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfc2V0 dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCSAgIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkgICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkg ICBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLAorCQkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMpOwor c3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX3NodXRkb3duKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1 ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIFBsYW5uZWRT dG10ICpwc3RtdCk7CitzdGF0aWMgdm9pZCBwZ3BhX2J1aWxkX3NpbXBsZV9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCQkJCSAgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkgIFJhbmdlVGJs RW50cnkgKnJ0ZSk7CitzdGF0aWMgdm9pZCBwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lckluZm8g KnJvb3QsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkgICBSZWxPcHRJ bmZvICpvdXRlcnJlbCwKKwkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkg ICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3Qp Oworc3RhdGljIHZvaWQgcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJ CQkJCQkJCSBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJy ZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkJIEpvaW5UeXBlIGpv aW50eXBlLAorCQkJCQkJCQkgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKTsKK3N0YXRpYyBwZ3Bh X2pvaW5fc3RhdGUgKnBncGFfZ2V0X2pvaW5fc3RhdGUoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJ CQkJCQkJCVJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJCVJlbE9wdEluZm8gKm91dGVy cmVsLAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICppbm5lcnJlbCk7CitzdGF0aWMgdm9pZCBwZ3Bh X3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UodWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJ CQkJCQkgIGNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBq cyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShKb2lu VHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJCQkJCXVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJ CQkJCWNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkJCXBncGFfam9pbl9zdGF0ZSAqcGpzKTsK K3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpy ZWwsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqc2Nhbl9lbnRyaWVzLAorCQkJCQkJ CQkJCSAgIEJpdG1hcHNldCAqc2Nhbl9pbmRleGVzLAorCQkJCQkJCQkJCSAgIHBncGFfdHJvdmVf ZW50cnkgKnJlbF9lbnRyaWVzLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsX2luZGV4ZXMp Oworc3RhdGljIHVpbnQ2NCBwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWco cGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKTsKK3N0YXRpYyBwZ3BhX2pvX291dGNvbWUgcGdwYV9q b2luX29yZGVyX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJaW50 IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCXBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJ CQkJCQkJCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgYm9vbCBwZ3BhX2pvaW5f bWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJ CQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkgIHBncGFfdHJvdmVf ZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKTsKK3N0YXRp YyBib29sIHBncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50 IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJ CQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJCQkJICBib29sICpyZXN0cmlj dF9tZXRob2QpOworc3RhdGljIGJvb2wgcGdwYV9zZW1pam9pbl9wZXJtaXRzX2pvaW4oaW50IG91 dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIg KnJpZHMsCisJCQkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkJCSAg IGJvb2wgb3V0ZXJfc2lkZV9udWxsYWJsZSwKKwkJCQkJCQkJCSAgIGJvb2wgKnJlc3RyaWN0X21l dGhvZCk7CisKK3N0YXRpYyBMaXN0ICpwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3Qg Kmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBf dHlwZSB0eXBlLAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCQkJCQkgIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKTsKK3N0YXRpYyB2 b2lkIHBncGFfcGxhbm5lcl9mZWVkYmFja193YXJuaW5nKExpc3QgKmZlZWRiYWNrKTsKKworc3Rh dGljIGlubGluZSB2b2lkIHBncGFfcmlfY2hlY2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAq cHBzLAorCQkJCQkJCQkJCVBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCVJlbE9wdEluZm8g KnJlbCk7CitzdGF0aWMgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVy X3N0YXRlICpwcHMsCisJCQkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10KTsKKworc3RhdGljIGNo YXIgKnBncGFfYm1zX3RvX2NzdHJpbmcoQml0bWFwc2V0ICpibXMpOworc3RhdGljIGNvbnN0IGNo YXIgKnBncGFfam9pbnR5cGVfdG9fY3N0cmluZyhKb2luVHlwZSBqb2ludHlwZSk7CisKKy8qCisg KiBJbnN0YWxsIHBsYW5uZXItcmVsYXRlZCBob29rcy4KKyAqLwordm9pZAorcGdwYV9wbGFubmVy X2luc3RhbGxfaG9va3Modm9pZCkKK3sKKwlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IEdldFBsYW5u ZXJFeHRlbnNpb25JZCgicGdfcGxhbl9hZHZpY2UiKTsKKwlwcmV2X3BsYW5uZXJfc2V0dXAgPSBw bGFubmVyX3NldHVwX2hvb2s7CisJcGxhbm5lcl9zZXR1cF9ob29rID0gcGdwYV9wbGFubmVyX3Nl dHVwOworCXByZXZfcGxhbm5lcl9zaHV0ZG93biA9IHBsYW5uZXJfc2h1dGRvd25faG9vazsKKwlw bGFubmVyX3NodXRkb3duX2hvb2sgPSBwZ3BhX3BsYW5uZXJfc2h1dGRvd247CisJcHJldl9idWls ZF9zaW1wbGVfcmVsID0gYnVpbGRfc2ltcGxlX3JlbF9ob29rOworCWJ1aWxkX3NpbXBsZV9yZWxf aG9vayA9IHBncGFfYnVpbGRfc2ltcGxlX3JlbDsKKwlwcmV2X2pvaW5yZWxfc2V0dXAgPSBqb2lu cmVsX3NldHVwX2hvb2s7CisJam9pbnJlbF9zZXR1cF9ob29rID0gcGdwYV9qb2lucmVsX3NldHVw OworCXByZXZfam9pbl9wYXRoX3NldHVwID0gam9pbl9wYXRoX3NldHVwX2hvb2s7CisJam9pbl9w YXRoX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5fcGF0aF9zZXR1cDsKK30KKworLyoKKyAqIENhcnJ5 IG91dCB3aGF0ZXZlciBzZXR1cCB3b3JrIHdlIG5lZWQgdG8gZG8gYmVmb3JlIHBsYW5uaW5nLgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2Is IFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCSAgIGludCBjdXJz b3JPcHRpb25zLCBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLAorCQkJCSAgIEV4cGxhaW5TdGF0ZSAq ZXMpCit7CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCXBncGFfcGxhbm5lcl9zdGF0ZSAq cHBzOworCWNoYXIJICAgKnN1cHBsaWVkX2FkdmljZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vf ZmVlZGJhY2sgPSBmYWxzZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7 CisJYm9vbAkJbmVlZHNfcHBzID0gZmFsc2U7CisKKwkvKgorCSAqIERlY2lkZSB3aGV0aGVyIHdl IG5lZWQgdG8gZ2VuZXJhdGUgYW4gYWR2aWNlIHN0cmluZy4gV2UgbXVzdCBkbyB0aGlzIGlmCisJ ICogdGhlIHVzZXIgaGFzIHRvbGQgdXMgdG8gZG8gaXQgY2F0ZWdvcmljYWxseSwgb3IgaWYgYXQg bGVhc3Qgb25lCisJICogY29sbGVjdG9yIGlzIGVuYWJsZWQsIG9yIGlmIHRoZSB1c2VyIGhhcyBy ZXF1ZXN0ZWQgaXQgdXNpbmcgdGhlIEVYUExBSU4KKwkgKiAoUExBTl9BRFZJQ0UpIG9wdGlvbi4K KwkgKi8KKwlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gKHBnX3BsYW5fYWR2aWNlX2Fsd2F5c19z dG9yZV9hZHZpY2VfZGV0YWlscyB8fAorCQkJCQkJCSAgcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29s bGVjdG9yIHx8CisJCQkJCQkJICBwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdG9yIHx8CisJ CQkJCQkJICBwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihlcykpOworCWlmIChnZW5lcmF0 ZV9hZHZpY2Vfc3RyaW5nKQorCQluZWVkc19wcHMgPSB0cnVlOworCisJLyoKKwkgKiBJZiBhbnkg YWR2aWNlIHdhcyBwcm92aWRlZCwgYnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHVzZSBkdXJp bmcKKwkgKiBwbGFubmluZy4KKwkgKi8KKwlzdXBwbGllZF9hZHZpY2UgPSBwZ19wbGFuX2Fkdmlj ZV9nZXRfc3VwcGxpZWRfcXVlcnlfYWR2aWNlKGdsb2IsIHBhcnNlLAorCQkJCQkJCQkJCQkJCQkJ ICAgcXVlcnlfc3RyaW5nLAorCQkJCQkJCQkJCQkJCQkJICAgY3Vyc29yT3B0aW9ucywKKwkJCQkJ CQkJCQkJCQkJCSAgIGVzKTsKKwlpZiAoc3VwcGxpZWRfYWR2aWNlICE9IE5VTEwgJiYgc3VwcGxp ZWRfYWR2aWNlWzBdICE9ICdcMCcpCisJeworCQlMaXN0CSAgICphZHZpY2VfaXRlbXM7CisJCWNo YXIJICAgKmVycm9yOworCisJCS8qCisJCSAqIElmIHRoZSBzdXBwbGllZCBhZHZpY2Ugc3RyaW5n IGNvbWVzIGZyb20gcGdfcGxhbl9hZHZpY2UuYWR2aWNlLAorCQkgKiBwYXJzaW5nIHNob3VsZG4n dCBmYWlsIGhlcmUsIGJlY2F1c2Ugd2UgbXVzdCBoYXZlIHByZXZpb3VzbHkgcGFyc2VkCisJCSAq IHN1Y2Nlc3NmdWxseSBpbiBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vay4gSG93ZXZl ciwgaXQgbWlnaHQKKwkJICogYWxzbyBiZSBjb21lIGZyb20gYSBob29rIHJlZ2lzdGVyZWQgdmlh IHBnX3BsYW5fYWR2aWNlX2FkZF9hZHZpc29yLAorCQkgKiBhbmQgd2UgY2FuJ3QgYmUgc3VyZSB3 aGV0aGVyIHRoYXQncyB2YWxpZC4gKFBsdXMsIGhhdmluZyBhbiBlcnJvcgorCQkgKiBjaGVjayBv ZiBoZXJlIHNlZW1zIGxpa2UgYSBnb29kIGlkZWEgYW55d2F5LCBqdXN0IGZvciBzYWZldHkuKQor CQkgKi8KKwkJYWR2aWNlX2l0ZW1zID0gcGdwYV9wYXJzZShzdXBwbGllZF9hZHZpY2UsICZlcnJv cik7CisJCWlmIChlcnJvcikKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJZXJybXNnKCJjb3Vs ZCBub3QgcGFyc2Ugc3VwcGxpZWQgYWR2aWNlOiAlcyIsIGVycm9yKSk7CisKKwkJLyoKKwkJICog SXQncyBwb3NzaWJsZSB0aGF0IHRoZSBhZHZpY2Ugc3RyaW5nIHdhcyBub24tZW1wdHkgYnV0IGNv bnRhaW5lZCBubworCQkgKiBhY3R1YWwgYWR2aWNlLCBlLmcuIGl0IHdhcyBhbGwgd2hpdGVzcGFj ZS4KKwkJICovCisJCWlmIChhZHZpY2VfaXRlbXMgIT0gTklMKQorCQl7CisJCQl0cm92ZSA9IHBn cGFfYnVpbGRfdHJvdmUoYWR2aWNlX2l0ZW1zKTsKKwkJCW5lZWRzX3BwcyA9IHRydWU7CisKKwkJ CS8qCisJCQkgKiBJZiB3ZSBrbm93IHRoYXQgd2UncmUgcnVubmluZyB1bmRlciBFWFBMQUlOLCBv ciBpZiB0aGUgdXNlciBoYXMKKwkJCSAqIHRvbGQgdXMgdG8gYWx3YXlzIGRvIHRoZSB3b3JrLCBn ZW5lcmF0ZSBhZHZpY2UgZmVlZGJhY2suCisJCQkgKi8KKwkJCWlmIChlcyAhPSBOVUxMIHx8IHBn X3BsYW5fYWR2aWNlX2ZlZWRiYWNrX3dhcm5pbmdzIHx8CisJCQkJcGdfcGxhbl9hZHZpY2VfYWx3 YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzKQorCQkJCWdlbmVyYXRlX2FkdmljZV9mZWVkYmFjayA9 IHRydWU7CisJCX0KKwl9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKwkvKgorCSAq IElmIGFzc2VydHMgYXJlIGVuYWJsZWQsIGFsd2F5cyBidWlsZCBhIHByaXZhdGUgc3RhdGUgb2Jq ZWN0IGZvcgorCSAqIGNyb3NzLWNoZWNrcy4KKwkgKi8KKwluZWVkc19wcHMgPSB0cnVlOworI2Vu ZGlmCisKKwkvKgorCSAqIFdlIG9ubHkgY3JlYXRlIGFuZCBpbml0aWFsaXplIGEgcHJpdmF0ZSBz dGF0ZSBvYmplY3QgaWYgaXQncyBuZWVkZWQgZm9yCisJICogc29tZSBwdXJwb3NlLiBUaGF0IGNv dWxkIGJlICgxKSByZWNvcmRpbmcgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gZ2VuZXJhdGUKKwkgKiBh biBhZHZpY2Ugc3RyaW5nLCAoMikgc3RvcmluZyBhIHRyb3ZlIG9mIHN1cHBsaWVkIGFkdmljZSwg b3IgKDMpCisJICogZmFjaWxpdGF0aW5nIGRlYnVnZ2luZyBjcm9zcy1jaGVja3Mgd2hlbiBhc3Nl cnRzIGFyZSBlbmFibGVkLgorCSAqLworCWlmIChuZWVkc19wcHMpCisJeworCQlwcHMgPSBwYWxs b2MwX29iamVjdChwZ3BhX3BsYW5uZXJfc3RhdGUpOworCQlwcHMtPmV4cGxhaW5fc3RhdGUgPSBl czsKKwkJcHBzLT5nZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBnZW5lcmF0ZV9hZHZpY2VfZmVl ZGJhY2s7CisJCXBwcy0+Z2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IGdlbmVyYXRlX2FkdmljZV9z dHJpbmc7CisJCXBwcy0+dHJvdmUgPSB0cm92ZTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisJCXBwcy0+cmlfY2hlY2tfaGFzaCA9CisJCQlwZ3BhX3JpX2NoZWNrX2NyZWF0ZShDdXJyZW50 TWVtb3J5Q29udGV4dCwgMTAyNCwgTlVMTCk7CisjZW5kaWYKKwkJU2V0UGxhbm5lckdsb2JhbEV4 dGVuc2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwcHMpOworCX0KK30KKwor LyoKKyAqIENhcnJ5IG91dCB3aGF0ZXZlciB3b3JrIHdlIHdhbnQgdG8gZG8gYWZ0ZXIgcGxhbm5p bmcgaXMgY29tcGxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2h1dGRvd24o UGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1 ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAq cHBzOworCXBncGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgd2Fsa2VyID0gezB9OwkvKiBwbGFjYXRlIGNvbXBpbGVyICovCisJYm9vbAkJZ2VuZXJhdGVf YWR2aWNlX2ZlZWRiYWNrID0gZmFsc2U7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9 IGZhbHNlOworCUxpc3QJICAgKnBncGFfaXRlbXMgPSBOSUw7CisJcGdwYV9pZGVudGlmaWVyICpy dF9pZGVudGlmaWVycyA9IE5VTEw7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0 IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxF eHRlbnNpb25TdGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBwcyAhPSBO VUxMKQorCXsKKwkJdHJvdmUgPSBwcHMtPnRyb3ZlOworCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJh Y2sgPSBwcHMtPmdlbmVyYXRlX2FkdmljZV9mZWVkYmFjazsKKwkJZ2VuZXJhdGVfYWR2aWNlX3N0 cmluZyA9IHBwcy0+Z2VuZXJhdGVfYWR2aWNlX3N0cmluZzsKKwl9CisKKwkvKgorCSAqIElmIHdl J3JlIHRyeWluZyB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nIG9yIGlmIHdlJ3JlIHRyeWlu ZyB0bworCSAqIHByb3ZpZGUgYWR2aWNlIGZlZWRiYWNrLCB0aGVuIHdlIHdpbGwgbmVlZCB0byBj cmVhdGUgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4KKwkgKi8KKwlpZiAoZ2VuZXJhdGVf YWR2aWNlX3N0cmluZyB8fCBnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2spCisJeworCQlwZ3BhX3Bs YW5fd2Fsa2VyKCZ3YWxrZXIsIHBzdG10LCBwcHMtPnNqX3VuaXF1ZV9yZWxzKTsKKwkJcnRfaWRl bnRpZmllcnMgPSBwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10 KTsKKwl9CisKKwkvKiBHZW5lcmF0ZSB0aGUgYWR2aWNlIHN0cmluZywgaWYgd2UgbmVlZCB0byBk byBzby4gKi8KKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwl7CisJCWNoYXIJICAgKmFk dmljZV9zdHJpbmc7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkvKiBHZW5lcmF0ZSBhIHRl eHR1YWwgYWR2aWNlIHN0cmluZy4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXBncGFf b3V0cHV0X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCWFkdmljZV9z dHJpbmcgPSBidWYuZGF0YTsKKworCQkvKiBJZiB0aGUgYWR2aWNlIHN0cmluZyBpcyBlbXB0eSwg ZG9uJ3QgYm90aGVyIGNvbGxlY3RpbmcgaXQuICovCisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9 ICdcMCcpCisJCQlwZ3BhX2NvbGxlY3RfYWR2aWNlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9zdHJp bmcsIGFkdmljZV9zdHJpbmcpOworCisJCS8qIFNhdmUgdGhlIGFkdmljZSBzdHJpbmcgaW4gdGhl IGZpbmFsIHBsYW4uICovCisJCXBncGFfaXRlbXMgPSBsYXBwZW5kKHBncGFfaXRlbXMsCisJCQkJ CQkJIG1ha2VEZWZFbGVtKCJhZHZpY2Vfc3RyaW5nIiwKKwkJCQkJCQkJCQkgKE5vZGUgKikgbWFr ZVN0cmluZyhhZHZpY2Vfc3RyaW5nKSwKKwkJCQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKgorCSAq IElmIHdlJ3JlIHRyeWluZyB0byBwcm92aWRlIGFkdmljZSBmZWVkYmFjaywgdGhlbiB3ZSB3aWxs IG5lZWQgdG8KKwkgKiBhbmFseXplIGhvdyBzdWNjZXNzZnVsIHRoZSBhZHZpY2Ugd2FzLgorCSAq LworCWlmIChnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2spCisJeworCQlMaXN0CSAgICpmZWVkYmFj ayA9IE5JTDsKKworCQkvKgorCQkgKiBJbmplY3QgYSBOb2RlLXRyZWUgcmVwcmVzZW50YXRpb24g b2YgYWxsIHRoZSB0cm92ZS1lbnRyeSBmbGFncyBpbnRvCisJCSAqIHRoZSBQbGFubmVkU3RtdC4K KwkJICovCisJCWZlZWRiYWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFj aywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfU0NB TiwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBw Z3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUs CisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJCQkJCQkJcnRfaWRl bnRpZmllcnMsICZ3YWxrZXIpOworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVl ZGJhY2soZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJP VkVfTE9PS1VQX1JFTCwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwor CQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChwZ3BhX2l0ZW1zLCBtYWtlRGVmRWxlbSgiZmVlZGJhY2si LAorCQkJCQkJCQkJCQkJCSAoTm9kZSAqKSBmZWVkYmFjaywgLTEpKTsKKworCQkvKiBJZiB3ZSB3 ZXJlIGFza2VkIHRvIGdlbmVyYXRlIGZlZWRiYWNrIHdhcm5pbmdzLCBkbyBzby4gKi8KKwkJaWYg KHBnX3BsYW5fYWR2aWNlX2ZlZWRiYWNrX3dhcm5pbmdzKQorCQkJcGdwYV9wbGFubmVyX2ZlZWRi YWNrX3dhcm5pbmcoZmVlZGJhY2spOworCX0KKworCS8qIFB1c2ggd2hhdGV2ZXIgZGF0YSB3ZSdy ZSBzYXZpbmcgaW50byB0aGUgUGxhbm5lZFN0bXQuICovCisJaWYgKHBncGFfaXRlbXMgIT0gTklM KQorCQlwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlID0KKwkJCWxhcHBlbmQocHN0bXQtPmV4dGVuc2lv bl9zdGF0ZSwKKwkJCQkJbWFrZURlZkVsZW0oInBnX3BsYW5fYWR2aWNlIiwgKE5vZGUgKikgcGdw YV9pdGVtcywgLTEpKTsKKworCS8qCisJICogSWYgYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgY3Jv c3MtY2hlY2sgdGhlIGdlbmVyYXRlZCByYW5nZSB0YWJsZQorCSAqIGlkZW50aWZpZXJzLgorCSAq LworCWlmIChwcHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBwcywgcHN0 bXQpOworfQorCisvKgorICogSG9vayBmdW5jdGlvbiBmb3IgYnVpbGRfc2ltcGxlX3JlbCgpLgor ICoKKyAqIFdlIGNhbiBhcHBseSBzY2FuIGFkdmljZSBhdCB0aGlzIHBvaW50LCBhbmQgd2UgYWxz byB1c2VlIHRoaXMgYXMgYW4KKyAqIG9wcG9ydHVuaXR5IHRvIGRvIHJhbmdlLXRhYmxlIGlkZW50 aWZpZXIgY3Jvc3MtY2hlY2tpbmcgaW4gYXNzZXJ0LWVuYWJsZWQKKyAqIGJ1aWxkcy4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLCBSYW5nZVRibEVudHJ5ICpydGUpCit7CisJcGdwYV9wbGFubmVyX3N0YXRl ICpwcHM7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxh bm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShy b290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisKKwkvKiBTYXZlIGRldGFpbHMgbmVl ZGVkIGZvciByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNoZWNraW5nLiAqLworCWlmIChw cHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9jaGVja2VyX3NhdmUocHBzLCByb290LCByZWwpOworCisJ LyogSWYgcXVlcnkgYWR2aWNlIHdhcyBwcm92aWRlZCwgc2VhcmNoIGZvciByZWxldmFudCBlbnRy aWVzLiAqLworCWlmIChwcHMgIT0gTlVMTCAmJiBwcHMtPnRyb3ZlICE9IE5VTEwpCisJeworCQlw Z3BhX2lkZW50aWZpZXIgcmlkOworCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0X3NjYW47CisJ CXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHRfcmVsOworCisJCS8qIFNlYXJjaCBmb3Igc2NhbiBh ZHZpY2UgYW5kIGdlbmVyYWwgcmVsIGFkdmljZS4gKi8KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJfYnlfcnRpKHJvb3QsIHJlbC0+cmVsaWQsICZyaWQpOworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChw cHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOLCAxLCAmcmlkLAorCQkJCQkJICAmdHJl c3VsdF9zY2FuKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9M T09LVVBfUkVMLCAxLCAmcmlkLAorCQkJCQkJICAmdHJlc3VsdF9yZWwpOworCisJCS8qIElmIHJl bGV2YW50IGVudHJpZXMgd2VyZSBmb3VuZCwgYXBwbHkgdGhlbS4gKi8KKwkJaWYgKHRyZXN1bHRf c2Nhbi5pbmRleGVzICE9IE5VTEwgfHwgdHJlc3VsdF9yZWwuaW5kZXhlcyAhPSBOVUxMKQorCQl7 CisJCQl1aW50NjQJCW9yaWdpbmFsX21hc2sgPSByZWwtPnBnc19tYXNrOworCisJCQlwZ3BhX3Bs YW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UocmVsLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfc2Nhbi5l bnRyaWVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfc2Nhbi5pbmRleGVzLAorCQkJCQkJCQkJCSAg IHRyZXN1bHRfcmVsLmVudHJpZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9yZWwuaW5kZXhlcyk7 CisKKwkJCS8qIEVtaXQgZGVidWdnaW5nIG1lc3NhZ2UsIGlmIGVuYWJsZWQuICovCisJCQlpZiAo cGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzayAmJiBvcmlnaW5hbF9tYXNrICE9IHJlbC0+cGdzX21h c2spCisJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJKGVycm1zZygic3RyYXRlZ3kgbWFzayBm b3IgUlRJICV1IGNoYW5nZWQgZnJvbSAweCUiIFBSSXg2NCAiIHRvIDB4JSIgUFJJeDY0LAorCQkJ CQkJCQlyZWwtPnJlbGlkLCBvcmlnaW5hbF9tYXNrLCByZWwtPnBnc19tYXNrKSkpOworCQl9CisJ fQorCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfYnVpbGRf c2ltcGxlX3JlbCkKKwkJKCpwcmV2X2J1aWxkX3NpbXBsZV9yZWwpIChyb290LCByZWwsIHJ0ZSk7 Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBwcm92aWRlZCBhZHZpY2UgdGhhdCBpcyByZWxldmFu dCB0byBhbnkgbWV0aG9kIG9mIGltcGxlbWVudGluZworICogdGhpcyBqb2luLgorICoKKyAqIEFs dGhvdWdoIHdlJ3JlIHBhc3NlZCB0aGUgb3V0ZXJyZWwgYW5kIGlubmVycmVsIGhlcmUsIHRob3Nl IGFyZSBqdXN0CisgKiB3aGF0ZXZlciB2YWx1ZXMgaGFwcGVuZWQgdG8gcHJvbXB0IHRoZSBjcmVh dGlvbiBvZiB0aGlzIGpvaW5yZWw7IHRoZXkKKyAqIHNob3VsZG4ndCByZWFsbHkgaW5mbHVlbmNl IG91ciBjaG9pY2Ugb2Ygd2hhdCBhZHZpY2UgdG8gYXBwbHkuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWws CisJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJ CSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmljdGxpc3QpCit7CisJcGdw YV9qb2luX3N0YXRlICpwanM7CisKKwlBc3NlcnQoYm1zX21lbWJlcnNoaXAoam9pbnJlbC0+cmVs aWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJLyogR2V0IG91ciBwcml2YXRlIHN0YXRlIGluZm9y bWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJcGpzID0gcGdwYV9nZXRfam9pbl9zdGF0ZShyb290 LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwpOworCisJLyogSWYgdGhlcmUgaXMgcmVsZXZh bnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFwcGx5IGl0LiAqLworCWlmIChw anMgIT0gTlVMTCkKKwl7CisJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9IGpvaW5yZWwtPnBnc19t YXNrOworCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSgmam9pbnJlbC0+cGdz X21hc2ssCisJCQkJCQkJCQkJICByb290LT5wbGFuX25hbWUsCisJCQkJCQkJCQkJICBwanMpOwor CisJCS8qIEVtaXQgZGVidWdnaW5nIG1lc3NhZ2UsIGlmIGVuYWJsZWQuICovCisJCWlmIChwZ19w bGFuX2FkdmljZV90cmFjZV9tYXNrICYmIG9yaWdpbmFsX21hc2sgIT0gam9pbnJlbC0+cGdzX21h c2spCisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9y IGpvaW4gb24gUlRJcyAlcyBjaGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2 NCwKKwkJCQkJCQlwZ3BhX2Jtc190b19jc3RyaW5nKGpvaW5yZWwtPnJlbGlkcyksCisJCQkJCQkJ b3JpZ2luYWxfbWFzaywKKwkJCQkJCQlqb2lucmVsLT5wZ3NfbWFzaykpKTsKKwl9CisKKwkvKiBQ YXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9qb2lucmVsX3NldHVwKQor CQkoKnByZXZfam9pbnJlbF9zZXR1cCkgKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJl bCwKKwkJCQkJCQkgICBzamluZm8sIHJlc3RyaWN0bGlzdCk7Cit9CisKKy8qCisgKiBFbmZvcmNl IGFueSBwcm92aWRlZCBhZHZpY2UgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIg bWV0aG9kIG9mCisgKiBpbXBsZW1lbnRpbmcgdGhpcyBwYXJ0aWN1bGFyIGpvaW4uCisgKi8KK3N0 YXRpYyB2b2lkCitwZ3BhX2pvaW5fcGF0aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqam9pbnJlbCwKKwkJCQkJIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICpp bm5lcnJlbCwKKwkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLCBKb2luUGF0aEV4dHJhRGF0YSAqZXh0 cmEpCit7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisKKwlBc3NlcnQoYm1zX21lbWJlcnNoaXAo am9pbnJlbC0+cmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBj b25zaWRlcmluZyBpbXBsZW1lbnRpbmcgYSBzZW1pam9pbiBieSBtYWtpbmcgb25lIHNpZGUgdW5p cXVlLAorCSAqIG1ha2UgYSBub3RlIG9mIGl0IGluIHRoZSBwZ3BhX3BsYW5uZXJfc3RhdGUuIFNl ZSBjb21tZW50cyBmb3IKKwkgKiBwZ3BhX3NqX3VuaXF1ZV9yZWwgZm9yIHdoeSB3ZSBkbyB0aGlz LgorCSAqLworCWlmIChqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUiB8fCBqb2ludHlwZSA9 PSBKT0lOX1VOSVFVRV9JTk5FUikKKwl7CisJCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCQlS ZWxPcHRJbmZvICp1bmlxdWVyZWw7CisKKwkJdW5pcXVlcmVsID0gam9pbnR5cGUgPT0gSk9JTl9V TklRVUVfT1VURVIgPyBvdXRlcnJlbCA6IGlubmVycmVsOworCQlwcHMgPSBHZXRQbGFubmVyR2xv YmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCQlp ZiAocHBzICE9IE5VTEwgJiYKKwkJCShwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmcgfHwgcHBz LT5nZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2spKQorCQl7CisJCQlib29sCQlmb3VuZCA9IGZhbHNl OworCisJCQkvKiBBdm9pZCBhZGRpbmcgZHVwbGljYXRlcy4gKi8KKwkJCWZvcmVhY2hfcHRyKHBn cGFfc2pfdW5pcXVlX3JlbCwgdXIsIHBwcy0+c2pfdW5pcXVlX3JlbHMpCisJCQl7CisJCQkJLyoK KwkJCQkgKiBXZSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgc2FtZSBwb2ludGVyIGZvciB0aGUgc2Ft ZSBwbGFuCisJCQkJICogbmFtZSwgc28gd2UgbmVlZCBub3QgdXNlIHN0cmNtcCgpIGhlcmUuCisJ CQkJICovCisJCQkJaWYgKHJvb3QtPnBsYW5fbmFtZSA9PSB1ci0+cGxhbl9uYW1lICYmCisJCQkJ CWJtc19lcXVhbCh1bmlxdWVyZWwtPnJlbGlkcywgdXItPnJlbGlkcykpCisJCQkJeworCQkJCQlm b3VuZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogSWYgbm90IGEg ZHVwbGljYXRlLCBhcHBlbmQgdG8gdGhlIGxpc3QuICovCisJCQlpZiAoIWZvdW5kKQorCQkJewor CQkJCXBncGFfc2pfdW5pcXVlX3JlbCAqdXIgPSBwYWxsb2Nfb2JqZWN0KHBncGFfc2pfdW5pcXVl X3JlbCk7CisKKwkJCQl1ci0+cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworCQkJCXVyLT5y ZWxpZHMgPSB1bmlxdWVyZWwtPnJlbGlkczsKKwkJCQlwcHMtPnNqX3VuaXF1ZV9yZWxzID0gbGFw cGVuZChwcHMtPnNqX3VuaXF1ZV9yZWxzLCB1cik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBHZXQg b3VyIHByaXZhdGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgam9pbi4gKi8KKwlwanMgPSBw Z3BhX2dldF9qb2luX3N0YXRlKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCk7CisK KwkvKiBJZiB0aGVyZSBpcyByZWxldmFudCBhZHZpY2UsIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24g dG8gYXBwbHkgaXQuICovCisJaWYgKHBqcyAhPSBOVUxMKQorCXsKKwkJdWludDY0CQlvcmlnaW5h bF9tYXNrID0gZXh0cmEtPnBnc19tYXNrOworCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2luX3Bh dGhfYWR2aWNlKGpvaW50eXBlLAorCQkJCQkJCQkJCQkmZXh0cmEtPnBnc19tYXNrLAorCQkJCQkJ CQkJCQlyb290LT5wbGFuX25hbWUsCisJCQkJCQkJCQkJCXBqcyk7CisKKwkJLyogRW1pdCBkZWJ1 Z2dpbmcgbWVzc2FnZSwgaWYgZW5hYmxlZC4gKi8KKwkJaWYgKHBnX3BsYW5fYWR2aWNlX3RyYWNl X21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSBleHRyYS0+cGdzX21hc2spCisJCQllcmVwb3J0KFdB Uk5JTkcsCisJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yICVzIGpvaW4gb24gJXMgd2l0 aCBvdXRlciAlcyBhbmQgaW5uZXIgJXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIgdG8gMHgl IiBQUkl4NjQsCisJCQkJCQkJcGdwYV9qb2ludHlwZV90b19jc3RyaW5nKGpvaW50eXBlKSwKKwkJ CQkJCQlwZ3BhX2Jtc190b19jc3RyaW5nKGpvaW5yZWwtPnJlbGlkcyksCisJCQkJCQkJcGdwYV9i bXNfdG9fY3N0cmluZyhvdXRlcnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlwZ3BhX2Jtc190b19jc3Ry aW5nKGlubmVycmVsLT5yZWxpZHMpLAorCQkJCQkJCW9yaWdpbmFsX21hc2ssCisJCQkJCQkJZXh0 cmEtPnBnc19tYXNrKSkpOworCX0KKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAq LworCWlmIChwcmV2X2pvaW5fcGF0aF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5fcGF0aF9zZXR1cCkg KHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkJIGpvaW50eXBlLCBl eHRyYSk7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGFkdmljZSBwZXJ0YWluaW5nIHRvIGEgcHJv cG9zZWQgam9pbi4KKyAqLworc3RhdGljIHBncGFfam9pbl9zdGF0ZSAqCitwZ3BhX2dldF9qb2lu X3N0YXRlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQlSZWxP cHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwpCit7CisJcGdwYV9wbGFubmVy X3N0YXRlICpwcHM7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisJYm9vbAkJbmV3X3BqcyA9IGZh bHNlOworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5u ZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9v dC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgPT0gTlVMTCB8fCBwcHMt PnRyb3ZlID09IE5VTEwpCisJeworCQkvKiBObyBhZHZpY2UgYXBwbGllcyB0byB0aGlzIHF1ZXJ5 LCBoZW5jZSBub25lIHRvIHRoaXMgam9pbnJlbC4gKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ LyoKKwkgKiBTZWUgd2hldGhlciB3ZSd2ZSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgYSBwZ3BhX2pv aW5fc3RhdGUgd2l0aCB0aGlzCisJICogam9pbnJlbC4gSWYgd2UgaGF2ZSBub3QsIHdlIG5lZWQg dG8gdHJ5IHRvIGNvbnN0cnVjdCBvbmUuIElmIHdlIGhhdmUsCisJICogdGhlbiB0aGVyZSBhcmUg dHdvIGNhc2VzOiAoYSkgaWYgaW5uZXJyZWwgYW5kIG91dGVycmVsIGFyZSB1bmNoYW5nZWQsCisJ ICogd2UgY2FuIHNpbXBseSB1c2UgaXQsIGFuZCAoYikgaWYgdGhleSBoYXZlIGNoYW5nZWQsIHdl IG5lZWQgdG8gcmVqaWdnZXIKKwkgKiB0aGUgYXJyYXkgb2YgaWRlbnRpZmllcnMgYnV0IGNhbiBz dGlsbCBza2lwIHRoZSB0cm92ZSBsb29rdXAuCisJICovCisJcGpzID0gR2V0UmVsT3B0SW5mb0V4 dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocGpzICE9 IE5VTEwpCisJeworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9p bmRleGVzID09IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIG5vIHBvdGVudGlh bGx5IHJlbGV2YW50IGFkdmljZSwgdGhlbiB0aGUgcHJlc2VuY2Ugb2YKKwkJCSAqIHRoaXMgcGdw YV9qb2luX3N0YXRlIGFjdHMgbGlrZSBhIG5lZ2F0aXZlIGNhY2hlIGVudHJ5OiBpdCB0ZWxscwor CQkJICogdXMgbm90IHRvIGJvdGhlciBzZWFyY2hpbmcgdGhlIHRyb3ZlIGZvciBhZHZpY2UsIGJl Y2F1c2Ugd2UKKwkJCSAqIHdpbGwgbm90IGZpbmQgYW55LgorCQkJICovCisJCQlyZXR1cm4gTlVM TDsKKwkJfQorCisJCWlmIChwanMtPm91dGVycmVsID09IG91dGVycmVsICYmIHBqcy0+aW5uZXJy ZWwgPT0gaW5uZXJyZWwpCisJCXsKKwkJCS8qIE5vIHVwZGF0ZXMgcmVxdWlyZWQsIHNvIGp1c3Qg cmV0dXJuLiAqLworCQkJLyogWFhYLiBEb2VzIHRoaXMgbmVlZCB0byBkbyBzb21ldGhpbmcgZGlm ZmVyZW50IHVuZGVyIEdFUU8/ICovCisJCQlyZXR1cm4gcGpzOworCQl9CisJfQorCisJLyoKKwkg KiBJZiB0aGVyZSdzIG5vIHBncGFfam9pbl9zdGF0ZSB5ZXQsIHdlIG5lZWQgdG8gYWxsb2NhdGUg b25lLiBUcm92ZSBrZXlzCisJICogd2lsbCBub3QgZ2V0IGJ1aWx0IGZvciBSVEVfSk9JTiBSVEVz LCBzbyB0aGUgYXJyYXkgbWF5IGVuZCB1cCBiZWluZworCSAqIGxhcmdlciB0aGFuIG5lZWRlZC4g SXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGNvbXB1dGUgYSBwZXJmZWN0bHkKKwkgKiBhY2N1cmF0 ZSBjb3VudCBoZXJlLgorCSAqLworCWlmIChwanMgPT0gTlVMTCkKKwl7CisJCWludAkJCXBlc3Np bWlzdGljX2NvdW50ID0gYm1zX251bV9tZW1iZXJzKGpvaW5yZWwtPnJlbGlkcyk7CisKKwkJcGpz ID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3N0YXRlKTsKKwkJcGpzLT5yaWRzID0gcGFsbG9j X2FycmF5KHBncGFfaWRlbnRpZmllciwgcGVzc2ltaXN0aWNfY291bnQpOworCQluZXdfcGpzID0g dHJ1ZTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciB3ZSBqdXN0IGFsbG9jYXRlZCBhIG5ldyBwZ3Bh X2pvaW5fc3RhdGUsIG9yIHRoZSBleGlzdGluZyBvbmUKKwkgKiBuZWVkcyByZWNvbmZpZ3VyaW5n IGZvciBhIG5ldyBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFRoZSByZXF1aXJlZCBhcnJheQorCSAq IHNpemUgY2FuJ3QgY2hhbmdlLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBvbmUu CisJICovCisJcGpzLT5vdXRlcnJlbCA9IG91dGVycmVsOworCXBqcy0+aW5uZXJyZWwgPSBpbm5l cnJlbDsKKwlwanMtPm91dGVyX2NvdW50ID0KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5 X3JlbGlkcyhyb290LCBvdXRlcnJlbC0+cmVsaWRzLCBwanMtPnJpZHMpOworCXBqcy0+aW5uZXJf Y291bnQgPQorCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIGlubmVy cmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJICAgcGpzLT5yaWRzICsgcGpzLT5vdXRlcl9jb3VudCk7 CisKKwkvKgorCSAqIElmIHdlIGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUsIHNlYXJj aCBvdXIgdHJvdmUgb2YgYWR2aWNlIGZvcgorCSAqIHJlbGV2YW50IGVudHJpZXMuIFRoZSB0cm92 ZSBsb29rdXAgd2lsbCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cyBmb3IKKwkgKiBldmVyeSBvdXRl cnJlbC9pbm5lcnJlbCBjb21iaW5hdGlvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byByZXBlYXQgdGhh dAorCSAqIHdvcmsgZXZlcnkgdGltZS4KKwkgKi8KKwlpZiAobmV3X3BqcykKKwl7CisJCXBncGFf dHJvdmVfcmVzdWx0IHRyZXN1bHQ7CisKKwkJLyogRmluZCBqb2luIGVudHJpZXMuICovCisJCXBn cGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJCQkJ CQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBwanMtPnJp ZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5qb2luX2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJ CXBqcy0+am9pbl9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIEZpbmQgcmVsIGVu dHJpZXMuICovCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9P S1VQX1JFTCwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQsCisJ CQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPnJlbF9lbnRyaWVzID0gdHJlc3Vs dC5lbnRyaWVzOworCQlwanMtPnJlbF9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8q IE5vdyB0aGF0IHRoZSBuZXcgcGdwYV9qb2luX3N0YXRlIGlzIGZ1bGx5IHZhbGlkLCBzYXZlIGEg cG9pbnRlci4gKi8KKwkJU2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5u ZXJfZXh0ZW5zaW9uX2lkLCBwanMpOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBubyByZWxl dmFudCBhZHZpY2UgZm91bmQsIGp1c3QgcmV0dXJuIE5VTEwuIFRoaXMKKwkJICogcGdwYV9qb2lu X3N0YXRlIHdpbGwgc3RpY2sgYXJvdW5kIGFzIGEgc29ydCBvZiBuZWdhdGl2ZSBjYWNoZQorCQkg KiBlbnRyeSwgc28gdGhhdCBmdXR1cmUgY2FsbHMgZm9yIHRoaXMgc2FtZSBqb2lucmVsIHF1aWNr bHkgcmV0dXJuCisJCSAqIE5VTEwuCisJCSAqLworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0g TlVMTCAmJiBwanMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisK KwlyZXR1cm4gcGpzOworfQorCisvKgorICogRW5mb3JjZSBvdmVyYWxsIHJlc3RyaWN0aW9ucyBv biBhIGpvaW4gcmVsYXRpb24gdGhhdCBhcHBseSB1bmlmb3JtbHkKKyAqIHJlZ2FyZGxlc3Mgb2Yg dGhlIGNob2ljZSBvZiBpbm5lciBhbmQgb3V0ZXIgcmVsLgorICovCitzdGF0aWMgdm9pZAorcGdw YV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlKHVpbnQ2NCAqcGdzX21hc2tfcCwgY2hhciAq cGxhbl9uYW1lLAorCQkJCQkJCQkgIHBncGFfam9pbl9zdGF0ZSAqcGpzKQoreworCWludAkJCWkg PSAtMTsKKwlpbnQJCQlmbGFnczsKKwlib29sCQlnYXRoZXJfY29uZmxpY3QgPSBmYWxzZTsKKwl1 aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRj aCA9IE5VTEw7CisJQml0bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWJvb2wJ CXBhcnRpdGlvbndpc2VfY29uZmxpY3QgPSBmYWxzZTsKKwlpbnQJCQlwYXJ0aXRpb253aXNlX291 dGNvbWUgPSAwOworCUJpdG1hcHNldCAgKnBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCA9IE5V TEw7CisJQml0bWFwc2V0ICAqcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoID0gTlVMTDsKKworCS8q IEl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libHktcmVsZXZhbnQgYWR2aWNlLiAqLworCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihwanMtPnJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBn cGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+cmVsX2VudHJpZXNbaV07CisJCXBncGFfaXRt X3R5cGUgaXRtOworCQlib29sCQlmdWxsX21hdGNoID0gZmFsc2U7CisJCXVpbnQ2NAkJbXlfZ2F0 aGVyX21hc2sgPSAwOworCQlpbnQJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAwOwkvKiA+ MCB5ZXMsIDwwIG5vICovCisKKwkJLyoKKwkJICogRm9yIEdBVEhFUiBhbmQgR0FUSEVSX01FUkdF LCBpZiB0aGUgc3BlY2lmaWVkIHJlbGF0aW9ucyBleGFjdGx5CisJCSAqIG1hdGNoIHRoaXMgam9p bnJlbCwgZG8gd2hhdGV2ZXIgdGhlIGFkdmljZSBzYXlzOyBvdGhlcndpc2UsIGRvbid0CisJCSAq IGFsbG93IEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgYXQgdGhpcyBsZXZlbC4gRm9yIE5PX0dBVEhF UiwgdGhlcmUKKwkJICogbXVzdCBiZSBhIHNpbmdsZSB0YXJnZXQgcmVsYXRpb24gd2hpY2ggbXVz dCBiZSBpbmNsdWRlZCBpbiB0aGlzCisJCSAqIGpvaW5yZWwsIHNvIGp1c3QgZG9uJ3QgYWxsb3cg R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBoZXJlLCBmdWxsCisJCSAqIHN0b3AuCisJCSAqLworCQlp ZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCXsKKwkJCW15X2dhdGhlcl9t YXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCWludAkJCXRvdGFsX2NvdW50OworCisJCQl0b3RhbF9jb3VudCA9 IHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50OworCQkJaXRtID0gcGdwYV9pZGVu dGlmaWVyc19tYXRjaF90YXJnZXQodG90YWxfY291bnQsIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJ CWVudHJ5LT50YXJnZXQpOworCQkJQXNzZXJ0KGl0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisK KwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQl7CisJCQkJZnVsbF9tYXRjaCA9IHRy dWU7CisJCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCQkJ bXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMTsKKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09 IFBHUEFfVEFHX0dBVEhFUikKKwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSOworCQkJ CWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSX01FUkdFKQorCQkJCQlteV9n YXRoZXJfbWFzayA9IFBHU19HQVRIRVJfTUVSR0U7CisJCQkJZWxzZQorCQkJCQllbG9nKEVSUk9S LCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIsCisJCQkJCQkgKGludCkgZW50cnktPnRhZyk7 CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZiBzcGVjaWZpZWQgcmVsYXRp b25zIGRvbid0IGV4YWN0bHkgbWF0Y2ggdGhpcyBqb2lucmVsLAorCQkJCSAqIHRoZW4gd2Ugc2hv dWxkIGRvIHRoZSBvcHBvc2l0ZSBvZiB3aGF0ZXZlciB0aGUgYWR2aWNlIHNheXMuCisJCQkJICog Rm9yIGluc3RhbmNlLCBpZiB3ZSBoYXZlIFBBUlRJVElPTldJU0UoKGEgYiBjKSkgb3IKKwkJCQkg KiBHQVRIRVIoKGEgYiBjKSkgYW5kIHRoaXMgam9pbnJlbCBjb3ZlcnMge2EsIGJ9IG9yIHthLCBi LCBjLAorCQkJCSAqIGR9IG9yIHthLCBkfSwgd2Ugc2hvdWxkbid0IHBsYW4gaXQgcGFydGl0aXRp b253aXNlIG9yIHB1dCBhCisJCQkJICogR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvbiBpdCBoZXJl LgorCQkJCSAqCisJCQkJICogQWxzbywgd2UgY2FuJ3QgcHV0IGEgR2F0aGVyIG9yIEdhdGhlciBN ZXJnZSBhdCB0aGlzIGxldmVsCisJCQkJICogaWYgdGhlcmUgaXMgUEFSVElUSU9OV0lTRSBhZHZp Y2UgdGhhdCBvdmVybGFwcyB3aXRoIGl0LAorCQkJCSAqIHVubGVzcyB0aGUgUEFSVElUSU9OV0lT RSBhZHZpY2UgY292ZXJzIGEgc3Vic2V0IG9mIHRoZQorCQkJCSAqIHJlbGF0aW9ucyBpbiB0aGUg am9pbnJlbC4gVG8gY29udGludWUgdGhlIHByZXZpb3VzIGV4YW1wbGUsCisJCQkJICogUEFSVElU SU9OV0lTRSgoYSBiIGMpKSBpcyBsb2dpY2FsbHkgaW5jb21wYXRpYmxlIHdpdGgKKwkJCQkgKiBH QVRIRVIoKGEgYikpIG9yIEdBVEhFUigoYSBkKSksIGJ1dCBub3Qgd2l0aCBHQVRIRVIoKGEgYiBj CisJCQkJICogZCkpLgorCQkJCSAqCisJCQkJICogQ29udmVyc2VseSwgd2UgY2FuJ3QgcHJvY2Vl ZCBwYXJ0aXRpb253aXNlIGF0IHRoaXMgbGV2ZWwgaWYKKwkJCQkgKiB0aGVyZSBpcyBvdmVybGFw cGluZyBHQVRIRVIgb3IgR0FUSEVSX01FUkdFIGFkdmljZSwgdW5sZXNzCisJCQkJICogdGhhdCBh ZHZpY2UgY292ZXJzIGEgc3VwZXJzZXQgb2YgdGhlIHJlbGF0aW9ucyBpbiB0aGlzCisJCQkJICog am9pbnJlbC4gVGhpcyBpcyBqdXN0IHRoZSBmbGlwIHNpZGUgb2YgdGhlIHByZWNlZGluZyBwb2lu dC4KKwkJCQkgKi8KKwkJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19QQVJUSVRJT05XSVNF KQorCQkJCXsKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJCWlmIChp dG0gIT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQkJCQkJbXlfZ2F0aGVyX21hc2sg PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxzZSBpZiAoZW50cnktPnRh ZyA9PSBQR1BBX1RBR19HQVRIRVIgfHwKKwkJCQkJCSBlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dB VEhFUl9NRVJHRSkKKwkJCQl7CisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05P TlBBUlRJQUw7CisJCQkJCWlmIChpdG0gIT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUKQorCQkJ CQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJ ZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQpIGVu dHJ5LT50YWcpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgd2Ugc2V0IG15X2dhdGhlcl9t YXNrIHVwIGFib3ZlLCB0aGVuIHdlICgxKSBtYWtlIGEgbm90ZSBpZiB0aGUKKwkJICogYWR2aWNl IGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB0aGUgbWFzayB2YWx1ZSwgYW5kICgzKSByZW1lbWJl cgorCQkgKiB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsIG1hdGNoLgorCQkgKi8K KwkJaWYgKG15X2dhdGhlcl9tYXNrICE9IDApCisJCXsKKwkJCWlmIChnYXRoZXJfbWFzayAhPSAw ICYmIGdhdGhlcl9tYXNrICE9IG15X2dhdGhlcl9tYXNrKQorCQkJCWdhdGhlcl9jb25mbGljdCA9 IHRydWU7CisJCQlnYXRoZXJfbWFzayA9IG15X2dhdGhlcl9tYXNrOworCQkJaWYgKGZ1bGxfbWF0 Y2gpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfZnVsbF9t YXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBibXNfYWRkX21l bWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKworCQkvKgorCQkgKiBMaWtld2lz ZSwgaWYgd2Ugc2V0IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSB1cCBhYm92ZSwgdGhlbiB3ZSAo MSkKKwkJICogbWFrZSBhIG5vdGUgaWYgdGhlIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVtZW1i ZXIgd2hhdCB0aGUgZGVzaXJlZAorCQkgKiBvdXRjb21lIHdhcywgYW5kICgzKSByZW1lbWJlciB3 aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsCisJCSAqIG1hdGNoLgorCQkgKi8KKwkJ aWYgKG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwKQorCQl7CisJCQlpZiAocGFydGl0aW9u d2lzZV9vdXRjb21lICE9IDAgJiYKKwkJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgIT0gbXlfcGFy dGl0aW9ud2lzZV9vdXRjb21lKQorCQkJCXBhcnRpdGlvbndpc2VfY29uZmxpY3QgPSB0cnVlOwor CQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lOworCQkJ aWYgKGZ1bGxfbWF0Y2gpCisJCQkJcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoID0KKwkJCQkJYm1z X2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBpKTsKKwkJCWVsc2UKKwkJCQlw YXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPQorCQkJCQlibXNfYWRkX21lbWJlcihwYXJ0aXRp b253aXNlX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisJfQorCisJLyoKKwkgKiBNYXJrIGV2ZXJ5 IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZCwgYW5k IGlmCisJICogdGhlIHNldCBvZiB0YXJnZXRzIGV4YWN0bHkgbWF0Y2hlZCB0aGlzIHJlbGF0aW9u LCBmdWxseSBtYXRjaGVkLiBJZgorCSAqIHRoZXJlIHdhcyBhIGNvbmZsaWN0LCBtYXJrIHRoZW0g YWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJUSUFM OworCWlmIChnYXRoZXJfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7 CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX3BhcnRpYWxf bWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92 ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX2Z1bGxfbWF0Y2gsIGZsYWdzKTsK KworCS8qIExpa2V3aXNlIGZvciBwYXJ0aXRpb253aXNlIGFkdmljZS4gKi8KKwlmbGFncyA9IFBH UEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAocGFydGl0aW9ud2lzZV9jb25mbGljdCkKKwkJZmxh Z3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJl bF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8 PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50 cmllcywgcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKgorCSAqIEVuZm9y Y2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBHYXRoZXIvR2F0aGVyIE1lcmdlLiAgT25seSBjbGVhciBi aXRzIGhlcmUsCisJICogc28gdGhhdCB3ZSBzdGlsbCByZXNwZWN0IHRoZSBlbmFibGVfKiBHVUNz LiBEbyBub3RoaW5nIGlmIHRoZSBhZHZpc2UKKwkgKiBjb25mbGljdHMuCisJICovCisJaWYgKGdh dGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKKwl7CisJCXVpbnQ2NAkJYWxsX2dh dGhlcl9tYXNrOworCisJCWFsbF9nYXRoZXJfbWFzayA9CisJCQlQR1NfR0FUSEVSIHwgUEdTX0dB VEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQkqcGdzX21hc2tfcCAmPSB+ KGFsbF9nYXRoZXJfbWFzayAmIH5nYXRoZXJfbWFzayk7CisJfQorCisJLyoKKwkgKiBBcyBhYm92 ZSwgYnV0IGZvciBwYXJ0aXRpb253aXNlIGFkdmljZS4KKwkgKgorCSAqIFRvIGluZHVjZSBhIHBh cnRpdGlvbndpc2Ugam9pbiwgd2UgZGlzYWJsZSBhbGwgdGhlIG9yZGluYXJ5IG1lYW5zIG9mCisJ ICogcGVyZm9ybWluZyBhIGpvaW4sIHNvIHRoYXQgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHBh dGggd2lsbCBob3BlZnVsbHkKKwkgKiBiZSBjaG9zZW4uCisJICoKKwkgKiBUbyBwcmV2ZW50IG9u ZSwgd2UganVzdCBkaXNhYmxlIEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQuICBOb3RlIHRoYXQgd2UK KwkgKiBtdXN0IG5vdCB1bnNldCBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRSBldmVuIHdoZW4g d2UgZG9uJ3Qgd2FudCBhCisJICogcGFydGl0aW9ud2lzZSBqb2luIGhlcmUsIGJlY2F1c2Ugd2Ug bWlnaHQgd2FudCBvbmUgYXQgYSBoaWdoZXIgbGV2ZWwKKwkgKiB0aGF0IGlzIGNvbnN0cnVjdGlu ZyB1c2luZyBwYXRocyBmcm9tIHRoaXMgbGV2ZWwuCisJICovCisJaWYgKHBhcnRpdGlvbndpc2Vf b3V0Y29tZSAhPSAwICYmICFwYXJ0aXRpb253aXNlX2NvbmZsaWN0KQorCXsKKwkJaWYgKHBhcnRp dGlvbndpc2Vfb3V0Y29tZSA+IDApCisJCQkqcGdzX21hc2tfcCA9ICgqcGdzX21hc2tfcCAmIH5Q R1NfSk9JTl9BTlkpOworCQllbHNlCisJCQkqcGdzX21hc2tfcCAmPSB+KFBHU19BUFBFTkQgfCBQ R1NfTUVSR0VfQVBQRU5EKTsKKwl9Cit9CisKKy8qCisgKiBFbmZvcmNlIHJlc3RyaWN0aW9ucyBv biB0aGUgam9pbiBvcmRlciBvciBqb2luIG1ldGhvZC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf cGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQg KnBnc19tYXNrX3AsCisJCQkJCQkJCQljaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQlwZ3BhX2pv aW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7CisJQml0bWFwc2V0ICAqam9fcGVybWl0 X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmpvX2RlbnlfaW5kZXhlcyA9IE5VTEw7CisJ Qml0bWFwc2V0ICAqam9fZGVueV9yZWxfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqam1f aW5kZXhlcyA9IE5VTEw7CisJYm9vbAkJam1fY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50MzIJCWpv aW5fbWFzayA9IDA7CisJQml0bWFwc2V0ICAqc2pfcGVybWl0X2luZGV4ZXMgPSBOVUxMOworCUJp dG1hcHNldCAgKnNqX2RlbnlfaW5kZXhlcyA9IE5VTEw7CisKKwkvKgorCSAqIFJlY29uc2lkZXIg UEFSVElUSU9OV0lTRSguLi4pIGFkdmljZS4KKwkgKgorCSAqIFdlIGFscmVhZHkgdGhvdWdodCBh Ym91dCB0aGlzIGZvciB0aGUgam9pbnJlbCBhcyBhIHdob2xlLCBidXQgaW4gc29tZQorCSAqIGNh c2VzLCBwYXJ0aXRpb253aXNlIGFkdmljZSBjYW4gYWxzbyBjb25zdHJhaW4gdGhlIGpvaW4gb3Jk ZXIuIEZvcgorCSAqIGluc3RhbmNlLCBpZiB0aGUgYWR2aWNlIHNheXMgUEFSVElUSU9OV0lTRSgo dDEgdDIpKSwgd2Ugc2hvdWxkbid0IGJ1aWxkCisJICogam9pbiBwYXRocyBmb3IgYSBhbnkgam9p bnJlbCB0aGF0IGluY2x1ZGVzIHQxIG9yIHQyIHVubGVzcyBpdCBhbHNvCisJICogaW5jbHVkZXMg dGhlIG90aGVyLiBJbiBnZW5lcmFsLCB0aGUgcGFyaXRpb253aXNlIG9wZXJhdGlvbiBtdXN0IGhh dmUKKwkgKiBhbHJlYWR5IGJlZW4gY29tcGxldGVkIHdpdGhpbiBvbmUgc2lkZSBvZiB0aGUgY3Vy cmVudCBqb2luIG9yIHRoZQorCSAqIG90aGVyLCBlbHNlIHRoZSBqb2luIG9yZGVyIGlzIGltcGVy bWlzc2libGUuCisJICoKKwkgKiBOQjogSXQgbWlnaHQgc2VlbSB0ZW1wdGluZyB0byB0cnkgdG8g ZGVhbCB3aXRoIFBBUlRJVElPTldJU0UgYWR2aXNlCisJICogZW50aXJlbHkgaW4gdGhpcyBmdW5j dGlvbiwgYnV0IHRoYXQgZG9lc24ndCB3b3JrLiBIZXJlLCB3ZSBjYW4gb25seQorCSAqIGFmZmVj dCB0aGUgcGdzX21hc2sgd2l0aGluIGEgcGFydGljdWxhciBKb2luUGF0aEV4dHJhRGF0YSwgdGhh dCBpcywgZm9yCisJICogYSBwYXJ0aWN1bGFyIGNob2ljZSBvZiBpbm5lcnJlbCBhbmQgb3V0ZXJy ZWwuIFBhcnRpdGlvbndpc2UgcGF0aHMgYXJlCisJICogbm90IGJ1aWx0IHRoYXQgd2F5LCBzbyB3 ZSBtdXN0IHNldCBwZ3NfbWFzayBmb3IgdGhlIFJlbE9wdEluZm8sIHdoaWNoCisJICogaXMgYmVz dCBkb25lIGluIHBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZS4KKwkgKi8KKwl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDApCisJewor CQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3Bh X2l0bV90eXBlIGlubmVyX2l0bTsKKwkJcGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07CisKKwkJaWYg KGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCWNvbnRpbnVlOworCisJ CW91dGVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KHBqcy0+b3V0ZXJfY291 bnQsCisJCQkJCQkJCQkJCQkgIHBqcy0+cmlkcywgZW50cnktPnRhcmdldCk7CisJCWlmIChvdXRl cl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwKKwkJCW91dGVyX2l0bSA9PSBQR1BBX0lUTV9UQVJH RVRTX0FSRV9TVUJTRVQpCisJCQljb250aW51ZTsKKworCQlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50 aWZpZXJzX21hdGNoX3RhcmdldChwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJICBwanMt PnJpZHMgKyBwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJICBlbnRyeS0+dGFyZ2V0KTsK KwkJaWYgKGlubmVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCB8fAorCQkJaW5uZXJfaXRtID09IFBH UEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJCWNvbnRpbnVlOworCisJCWpvX2RlbnlfcmVs X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X3JlbF9pbmRleGVzLCBpKTsKKwl9CisK KwkvKiBJdGVyYXRlIG92ZXIgYWR2aWNlIHRoYXQgcGVydGFpbnMgdG8gdGhlIGpvaW4gb3JkZXIg YW5kIG1ldGhvZC4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBq cy0+am9pbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5 ID0gJnBqcy0+am9pbl9lbnRyaWVzW2ldOworCQl1aW50MzIJCW15X2pvaW5fbWFzazsKKworCQkv KiBIYW5kbGUgam9pbiBvcmRlciBhZHZpY2UuICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFf VEFHX0pPSU5fT1JERVIpCisJCXsKKwkJCXBncGFfam9fb3V0Y29tZSBqb19vdXRjb21lOworCisJ CQlqb19vdXRjb21lID0gcGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2Nv dW50LAorCQkJCQkJCQkJCQkJCSAgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgIHBq cy0+cmlkcywKKwkJCQkJCQkJCQkJCQkgIGVudHJ5KTsKKwkJCWlmIChqb19vdXRjb21lID09IFBH UEFfSk9fUEVSTUlUVEVEKQorCQkJCWpvX3Blcm1pdF9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIo am9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJZWxzZSBpZiAoam9fb3V0Y29tZSA9PSBQR1BBX0pP X0RFTklFRCkKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2lu ZGV4ZXMsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgam9pbiBtZXRob2Qg YWR2aWNlLiAqLworCQlteV9qb2luX21hc2sgPSBwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9t X2FkdmljZV90YWcoZW50cnktPnRhZyk7CisJCWlmIChteV9qb2luX21hc2sgIT0gMCkKKwkJewor CQkJYm9vbAkJcGVybWl0OworCQkJYm9vbAkJcmVzdHJpY3RfbWV0aG9kOworCisJCQlpZiAoZW50 cnktPnRhZyA9PSBQR1BBX1RBR19GT1JFSUdOX0pPSU4pCisJCQkJcGVybWl0ID0gcGdwYV9vcGFx dWVfam9pbl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBw anMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJ CQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKTsKKwkJCWVsc2UK KwkJCQlwZXJtaXQgPSBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2Nv dW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAg cGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0 cmljdF9tZXRob2QpOworCQkJaWYgKCFwZXJtaXQpCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1z X2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWVsc2UgaWYgKHJlc3RyaWN0X21l dGhvZCkKKwkJCXsKKwkJCQlqbV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam1faW5kZXhlcywg aSk7CisJCQkJaWYgKGpvaW5fbWFzayAhPSAwICYmIGpvaW5fbWFzayAhPSBteV9qb2luX21hc2sp CisJCQkJCWptX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQlqb2luX21hc2sgPSBteV9qb2luX21hc2s7 CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBzZW1pam9pbiB1bmlxdWVu ZXNzIGFkdmljZS4gKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5J UVVFIHx8CisJCQllbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUpCisJ CXsKKwkJCWJvb2wJCW91dGVyX3NpZGVfbnVsbGFibGU7CisJCQlib29sCQlyZXN0cmljdF9tZXRo b2Q7CisKKwkJCS8qIFBsYW5uZXIgaGFzIG51bGxhYmxlIHNpZGUgb2YgdGhlIHNlbWlqb2luIG9u IHRoZSBvdXRlciBzaWRlPyAqLworCQkJb3V0ZXJfc2lkZV9udWxsYWJsZSA9IChqb2ludHlwZSA9 PSBKT0lOX1VOSVFVRV9PVVRFUiB8fAorCQkJCQkJCQkgICBqb2ludHlwZSA9PSBKT0lOX1JJR0hU X1NFTUkpOworCisJCQlpZiAoIXBncGFfc2VtaWpvaW5fcGVybWl0c19qb2luKHBqcy0+b3V0ZXJf Y291bnQsCisJCQkJCQkJCQkJCXBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCXBqcy0+cmlk cywKKwkJCQkJCQkJCQkJZW50cnksCisJCQkJCQkJCQkJCW91dGVyX3NpZGVfbnVsbGFibGUsCisJ CQkJCQkJCQkJCSZyZXN0cmljdF9tZXRob2QpKQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19h ZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChyZXN0cmljdF9tZXRo b2QpCisJCQl7CisJCQkJYm9vbAkJYWR2aWNlX3VuaXF1ZTsKKwkJCQlib29sCQlqdF91bmlxdWU7 CisJCQkJYm9vbAkJanRfbm9uX3VuaXF1ZTsKKworCQkJCS8qIEFkdmljZSB3YW50cyB0byB1bmlx dWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQkJYWR2aWNlX3VuaXF1ZSA9IChl bnRyeS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSk7CisKKwkJCQkvKiBQbGFubmVy IGlzIHRyeWluZyB0byB1bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQkJ anRfdW5pcXVlID0gKGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lOTkVSIHx8CisJCQkJCQkJIGpv aW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSKTsKKworCQkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5n IGEgc2VtaS1qb2luLCB3aXRob3V0IHVuaXF1ZS1pZnlpbmc/ICovCisJCQkJanRfbm9uX3VuaXF1 ZSA9IChqb2ludHlwZSA9PSBKT0lOX1NFTUkgfHwKKwkJCQkJCQkJIGpvaW50eXBlID09IEpPSU5f UklHSFRfU0VNSSk7CisKKwkJCQlpZiAoIWp0X3VuaXF1ZSAmJiAhanRfbm9uX3VuaXF1ZSkKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGEgc2VtaWpvaW4g dG8gd2hpY2ggU0pfVU5JUVVFCisJCQkJCSAqIG9yIFNKX05PTl9VTklRVUUgY2FuIGJlIGFwcGxp ZWQuCisJCQkJCSAqLworCQkJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9JTkFQUExJQ0FCTEU7 CisJCQkJfQorCQkJCWVsc2UgaWYgKGFkdmljZV91bmlxdWUgIT0ganRfdW5pcXVlKQorCQkJCQlz al9kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzal9kZW55X2luZGV4ZXMsIGkpOworCQkJ CWVsc2UKKwkJCQkJc2pfcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzal9wZXJtaXRf aW5kZXhlcywgaSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCS8qCisJICogSWYg dGhlIGFkdmljZSBpbmRpY2F0ZXMgYm90aCB0aGF0IHRoaXMgam9pbiBvcmRlciBpcyBwZXJtaXNz aWJsZSBhbmQKKwkgKiBhbHNvIHRoYXQgaXQgaXNuJ3QsIHRoZW4gbWFyayBhZHZpY2UgcmVsYXRl ZCB0byB0aGUgam9pbiBvcmRlciBhcworCSAqIGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqb19w ZXJtaXRfaW5kZXhlcyAhPSBOVUxMICYmCisJCShqb19kZW55X2luZGV4ZXMgIT0gTlVMTCB8fCBq b19kZW55X3JlbF9pbmRleGVzICE9IE5VTEwpKQorCXsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3Mo cGpzLT5qb2luX2VudHJpZXMsIGpvX3Blcm1pdF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NP TkZMSUNUSU5HKTsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGpv X2RlbnlfaW5kZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJCXBncGFfdHJv dmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIGpvX2RlbnlfcmVsX2luZGV4ZXMsCisJCQkJ CQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCX0KKworCS8qCisJICogSWYgbW9yZSB0aGFuIG9u ZSBqb2luIG1ldGhvZCBzcGVjaWZpY2F0aW9uIGlzIHJlbGV2YW50IGhlcmUgYW5kIHRoZXkKKwkg KiBkaWZmZXIsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJaWYgKGptX2Nv bmZsaWN0KQorCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam1faW5k ZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisKKwkvKiBJZiBzZW1pam9pbiBh ZHZpY2Ugc2F5cyBib3RoIHllcyBhbmQgbm8sIG1hcmsgaXQgYWxsIGFzIGNvbmZsaWN0aW5nLiAq LworCWlmIChzal9wZXJtaXRfaW5kZXhlcyAhPSBOVUxMICYmIHNqX2RlbnlfaW5kZXhlcyAhPSBO VUxMKQorCXsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIHNqX3Bl cm1pdF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwkJcGdwYV90cm92 ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIHNqX2RlbnlfaW5kZXhlcywKKwkJCQkJCQkg UEdQQV9URV9DT05GTElDVElORyk7CisJfQorCisJLyoKKwkgKiBFbmZvcmNlIHJlc3RyaWN0aW9u cyBvbiB0aGUgam9pbiBvcmRlciBhbmQgam9pbiBtZXRob2QsIGFuZCBhbnkKKwkgKiBzZW1pam9p bi1yZWxhdGVkIHJlc3RyaWN0aW9ucy4gT25seSBjbGVhciBiaXRzIGhlcmUsIHNvIHRoYXQgd2Ug c3RpbGwKKwkgKiByZXNwZWN0IHRoZSBlbmFibGVfKiBHVUNzLiBEbyBub3RoaW5nIGluIGNhc2Vz IHdoZXJlIHRoZSBhZHZpY2Ugb24gYQorCSAqIHNpbmdsZSB0b3BpYyBjb25mbGljdHMuCisJICov CisJaWYgKChqb19kZW55X2luZGV4ZXMgIT0gTlVMTCB8fCBqb19kZW55X3JlbF9pbmRleGVzICE9 IE5VTEwpICYmCisJCWpvX3Blcm1pdF9pbmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wICY9 IH5QR1NfSk9JTl9BTlk7CisJaWYgKGpvaW5fbWFzayAhPSAwICYmICFqbV9jb25mbGljdCkKKwkJ KnBnc19tYXNrX3AgJj0gfihQR1NfSk9JTl9BTlkgJiB+am9pbl9tYXNrKTsKKwlpZiAoc2pfZGVu eV9pbmRleGVzICE9IE5VTEwgJiYgc2pfcGVybWl0X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19t YXNrX3AgJj0gflBHU19KT0lOX0FOWTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhbiBhZHZpY2Ug dGFnIGludG8gYSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzay4KKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCB0YWcgdHlwZXMgdGhhdCBkb24ndCByZXByZXNlbnQg am9pbgorICogc3RyYXRlZ2llcy4gSW4gc3VjaCBjYXNlcywgd2UganVzdCByZXR1cm4gMCwgd2hp Y2ggY2FuJ3QgYmUgY29uZnVzZWQgd2l0aAorICogYSB2YWxpZCBtYXNrLgorICovCitzdGF0aWMg dWludDY0CitwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZp Y2VfdGFnX3R5cGUgdGFnKQoreworCXN3aXRjaCAodGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19G T1JFSUdOX0pPSU46CisJCQlyZXR1cm4gUEdTX0ZPUkVJR05KT0lOOworCQljYXNlIFBHUEFfVEFH X01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwkJY2Fz ZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIFBHU19NRVJHRUpP SU5fTUFURVJJQUxJWkU7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQly ZXR1cm4gUEdTX05FU1RMT09QX1BMQUlOOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01B VEVSSUFMSVpFOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRTsKKwkJY2FzZSBQ R1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9NRU1P SVpFOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiBQR1NfSEFTSEpPSU47 CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBEb2VzIGEgY2VydGFp biBpdGVtIG9mIGpvaW4gb3JkZXIgYWR2aWNlIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqCisg KiBSZXR1cm5zIFBHUEFfSk9fREVOSUVEIGlmIHRoZSBhZHZpY2UgaXMgaW5jb21wYXRpYmxlIHdp dGggdGhlIHByb3Bvc2VkCisgKiBqb2luIG9yZGVyLgorICoKKyAqIFJldHVybnMgUEdQQV9KT19Q RVJNSVRURUQgaWYgdGhlIGFkdmljZSBzcGVjaWZpZXMgZXhhY3RseSB0aGUgcHJvcG9zZWQKKyAq IGpvaW4gb3JkZXIuIFRoaXMgaW1wbGllcyB0aGF0IGEgcGFydGl0aW9ud2lzZSBqb2luIHNob3Vs ZCBub3QgYmUKKyAqIHBlcmZvcm1lZCBhdCB0aGlzIGxldmVsOyByYXRoZXIsIG9uZSBvZiB0aGUg dHJhZGl0aW9uYWwgam9pbiBtZXRob2RzCisgKiBzaG91bGQgYmUgdXNlZC4KKyAqCisgKiBSZXR1 cm5zIFBHUEFfSk9fSU5ESUZGRVJFTlQgaWYgdGhlIGFkdmljZSBkb2VzIG5vdCBjYXJlIHdoYXQg aGFwcGVucy4KKyAqIFdlIHVzZSB0aGlzIGZvciB1bm9yZGVyZWQgSk9JTl9PUkRFUiBzdWJsaXN0 cywgd2hpY2ggYXJlIGNvbXBhdGlibGUgd2l0aAorICogcGFydGl0aW9ud2lzZSBqb2luIGJ1dCBk byBub3QgbWFuZGF0ZSBpdC4KKyAqLworc3RhdGljIHBncGFfam9fb3V0Y29tZQorcGdwYV9qb2lu X29yZGVyX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJ CQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyeSkKK3sKKwlib29sCQlsb29wID0gdHJ1ZTsKKwlib29sCQlzdWJsaXN0ID0gZmFsc2U7CisJ aW50CQkJbGVuZ3RoOworCWludAkJCW91dGVyX2xlbmd0aDsKKwlwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICpwcmVmaXhfdGFy Z2V0OworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBm b3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9Q QVJUSUFMOworCisJLyoKKwkgKiBGaW5kIHRoZSBpbm5lcm1vc3Qgc3VibGlzdCB0aGF0IGNvbnRh aW5zIGFsbCBrZXlzOyBpZiBubyBzdWJsaXN0IGRvZXMsCisJICogdGhlbiBjb250aW51ZSBwcm9j ZXNzaW5nIHdpdGggdGhlIHRvcGxldmVsIGxpc3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYg dGhlIGFkdmljZSBzYXlzIEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHRoZW4gd2UKKwkg KiBzaG91bGQgZXZhbHVhdGUgam9pbnMgdGhhdCBvbmx5IGludm9sdmUgdDMsIHQ0LCBhbmQvb3Ig dDUgYWdhaW5zdCB0aGUKKwkgKiAodDMgdDQgdDUpIHN1Ymxpc3QsIGFuZCBvdGhlcnMgYWdhaW5z dCB0aGUgZnVsbCBsaXN0LgorCSAqCisJICogTm90ZSB0aGF0ICgxKSBvdXRlcm1vc3Qgc3VibGlz dCBpcyBhbHdheXMgb3JkZXJlZCBhbmQgKDIpIHdoZW5ldmVyIHdlCisJICogem9vbSBpbnRvIGFu IHVub3JkZXJlZCBzdWJsaXN0LCB3ZSBpbnN0YW50bHkgcmV0dXJuCisJICogUEdQQV9KT19JTkRJ RkZFUkVOVC4KKwkgKi8KKwl3aGlsZSAobG9vcCkKKwl7CisJCUFzc2VydCh0YXJnZXQtPnR0eXBl ID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisKKwkJbG9vcCA9IGZhbHNlOworCQlmb3Jl YWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJl bikKKwkJeworCQkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJCWlmIChjaGlsZF90YXJnZXQtPnR0 eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJCQkJY29udGludWU7CisKKwkJCWl0bSA9 IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQs CisJCQkJCQkJCQkJCQlyaWRzLCBjaGlsZF90YXJnZXQpOworCQkJaWYgKGl0bSA9PSBQR1BBX0lU TV9FUVVBTCB8fCBpdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUKQorCQkJeworCQkJCWlm IChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCkKKwkJCQl7 CisJCQkJCXRhcmdldCA9IGNoaWxkX3RhcmdldDsKKwkJCQkJc3VibGlzdCA9IHRydWU7CisJCQkJ CWxvb3AgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJ QXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Qp OworCQkJCQlyZXR1cm4gUEdQQV9KT19JTkRJRkZFUkVOVDsKKwkJCQl9CisJCQl9CisJCX0KKwl9 CisKKwkvKgorCSAqIFRyeSB0byBmaW5kIGEgcHJlZml4IG9mIHRoZSBzZWxlY3RlZCBqb2luIG9y ZGVyIGxpc3QgdGhhdCBpcyBleGFjdGx5CisJICogZXF1YWwgdG8gdGhlIG91dGVyIHNpZGUgb2Yg dGhlIHByb3Bvc2VkIGpvaW4uCisJICovCisJbGVuZ3RoID0gbGlzdF9sZW5ndGgodGFyZ2V0LT5j aGlsZHJlbik7CisJcHJlZml4X3RhcmdldCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3Rh cmdldCk7CisJcHJlZml4X3RhcmdldC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7 CisJZm9yIChvdXRlcl9sZW5ndGggPSAxOyBvdXRlcl9sZW5ndGggPD0gbGVuZ3RoOyArK291dGVy X2xlbmd0aCkKKwl7CisJCXBncGFfaXRtX3R5cGUgaXRtOworCisJCS8qIEF2b2lkIGxlYWtpbmcg bWVtb3J5IGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiAqLworCQlpZiAocHJlZml4X3RhcmdldC0+ Y2hpbGRyZW4gIT0gTlVMTCkKKwkJCWxpc3RfZnJlZShwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbik7 CisJCXByZWZpeF90YXJnZXQtPmNoaWxkcmVuID0gbGlzdF9jb3B5X2hlYWQodGFyZ2V0LT5jaGls ZHJlbiwKKwkJCQkJCQkJCQkJCSBvdXRlcl9sZW5ndGgpOworCisJCS8qIFNlYXJjaCwgaG9waW5n IHRvIGZpbmQgYW4gZXhhY3QgbWF0Y2guICovCisJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0 Y2hfdGFyZ2V0KG91dGVyX2NvdW50LCByaWRzLCBwcmVmaXhfdGFyZ2V0KTsKKwkJaWYgKGl0bSA9 PSBQR1BBX0lUTV9FUVVBTCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIElmIHRoZSBwcmVmaXgg b2YgdGhlIGpvaW4gb3JkZXIgbGlzdCB0aGF0IHdlJ3JlIGNvbnNpZGVyaW5nCisJCSAqIGluY2x1 ZGVzIHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIG91dGVyIHJlbHMsIHdlIGNhbiBtYWtlIHRoZSBw cmVmaXgKKwkJICogbG9uZ2VyIHRvIGZpbmQgYW4gZXhhY3QgbWF0Y2guIEJ1dCB0aGUgYWR2aWNl IGhhc24ndCBtZW50aW9uZWQKKwkJICogZXZlcnl0aGluZyB0aGF0J3MgcGFydCBvZiBvdXIgb3V0 ZXIgcmVsIHlldCwgYnV0IGhhcyBtZW50aW9uZWQKKwkJICogdGhpbmdzIHRoYXQgYXJlIG5vdCwg dGhlbiB0aGlzIGpvaW4gZG9lc24ndCBtYXRjaCB0aGUgam9pbiBvcmRlcgorCQkgKiBsaXN0Lgor CQkgKi8KKwkJaWYgKGl0bSAhPSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQlyZXR1 cm4gUEdQQV9KT19ERU5JRUQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgbG9vcGVk IHN0b3BwZWQgYmVmb3JlIHRoZSBwcmVmaXhfdGFyZ2V0IGluY2x1ZGVkIHRoZQorCSAqIGVudGly ZSBqb2luIG9yZGVyIGxpc3QsIHRoZW4gdGhlIG5leHQgbWVtYmVyIG9mIHRoZSBqb2luIG9yZGVy IGxpc3QKKwkgKiBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIGlubmVyIHNpZGUgb2YgdGhlIGpvaW4u CisJICoKKwkgKiBFeGFtcGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCBp ZiB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUKKwkgKiBjdXJyZW50IGpvaW4gaW5jbHVkZXMgb25seSB0 MSwgdGhlbiB0aGUgaW5uZXIgc2lkZSBtdXN0IGJlIGV4YWN0bHkgdDI7CisJICogaWYgdGhlIG91 dGVyIHNpZGUgaW5jbHVkZXMgYm90aCB0MSBhbmQgdDIsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVz dAorCSAqIGluY2x1ZGUgZXhhY3RseSB0MywgdDQsIGFuZCB0NS4KKwkgKi8KKwlpZiAob3V0ZXJf bGVuZ3RoIDwgbGVuZ3RoKQorCXsKKwkJcGdwYV9hZHZpY2VfdGFyZ2V0ICppbm5lcl90YXJnZXQ7 CisJCXBncGFfaXRtX3R5cGUgaXRtOworCisJCWlubmVyX3RhcmdldCA9IGxpc3RfbnRoKHRhcmdl dC0+Y2hpbGRyZW4sIG91dGVyX2xlbmd0aCk7CisKKwkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19t YXRjaF90YXJnZXQoaW5uZXJfY291bnQsIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJ aW5uZXJfdGFyZ2V0KTsKKworCQkvKgorCQkgKiBCZWZvcmUgcmV0dXJuaW5nLCBjb25zaWRlciB3 aGV0aGVyIHdlIG5lZWQgdG8gbWFyayB0aGlzIGVudHJ5IGFzCisJCSAqIGZ1bGx5IG1hdGNoZWQu IElmIHdlJ3JlIGNvbnNpZGVyaW5nIHRoZSBmdWxsIGxpc3QgcmF0aGVyIHRoYW4gYQorCQkgKiBz dWJsaXN0LCBhbmQgaWYgd2UgZm91bmQgZXZlcnkgaXRlbSBidXQgb25lIG9uIHRoZSBvdXRlciBz aWRlIG9mCisJCSAqIHRoZSBqb2luIGFuZCB0aGUgbGFzdCBpdGVtIG9uIHRoZSBpbm5lciBzaWRl IG9mIHRoZSBqb2luLCB0aGVuIHRoZQorCQkgKiBhbnN3ZXIgaXMgeWVzLgorCQkgKi8KKwkJaWYg KCFzdWJsaXN0ICYmIG91dGVyX2xlbmd0aCArIDEgPT0gbGVuZ3RoICYmIGl0bSA9PSBQR1BBX0lU TV9FUVVBTCkKKwkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisKKwkJcmV0 dXJuIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpID8gUEdQQV9KT19QRVJNSVRURUQgOiBQR1BBX0pP X0RFTklFRDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdldCBoZXJlLCB0aGVuIHRoZSBvdXRlciBz aWRlIG9mIHRoZSBqb2luIGluY2x1ZGVzIHRoZSBlbnRpcmV0eQorCSAqIG9mIHRoZSBqb2luIG9y ZGVyIGxpc3QuIEluIHRoaXMgY2FzZSwgd2UgYmVoYXZlIGRpZmZlcmVudGx5IGRlcGVuZGluZwor CSAqIG9uIHdoZXRoZXIgd2UncmUgbG9va2luZyBhdCB0aGUgdG9wLWxldmVsIGpvaW4gb3JkZXIg bGlzdCBvciBzdWJsaXN0LgorCSAqIEF0IHRoZSB0b3AtbGV2ZWwsIHdlIHRyZWF0IHRoZSBzcGVj aWZpZWQgbGlzdCBhcyBtYW5kYXRpbmcgdGhhdCB0aGUKKwkgKiBhY3R1YWwgam9pbiBvcmRlciBo YXMgdGhlIGdpdmVuIGxpc3QgYXMgYSBwcmVmaXgsIGJ1dCBhIHN1Ymxpc3QKKwkgKiByZXF1aXJl cyBhbiBleGFjdCBtYXRjaC4KKwkgKgorCSAqIEV4bWFwbGU6IEdpdmVuIEpPSU5fT1JERVIodDEg dDIgKHQzIHQ0IHQ1KSksIHdlIG11c3Qgc3RhcnQgYnkgam9pbmluZworCSAqIGFsbCBmaXZlIG9m IHRob3NlIHJlbGF0aW9ucyBhbmQgaW4gdGhhdCBzZXF1ZW5jZSwgYnV0IG9uY2UgdGhhdCBpcwor CSAqIGRvbmUsIGl0J3MgT0sgdG8gam9pbiBhbnkgb3RoZXIgcmVscyB0aGF0IGFyZSBwYXJ0IG9m IHRoZSBqb2luIHByb2JsZW0uCisJICogVGhpcyBhbGxvd3MgYSB1c2VyIHRvIHNwZWNpZnkgdGhl IGRyaXZpbmcgdGFibGUgYW5kIHBlcmhhcHMgdGhlIGZpcnN0CisJICogZmV3IHRoaW5ncyB0byB3 aGljaCBpdCBzaG91bGQgYmUgam9pbmVkIHdoaWxlIGxlYXZpbmcgdGhlIHJlc3Qgb2YgdGhlCisJ ICogam9pbiBvcmRlciB1cCB0aGUgb3B0aW1pemVyLiBCdXQgaXQgc2VlbXMgbGlrZSBpdCB3b3Vs ZCBiZSBzdXJwcmlzaW5nLAorCSAqIGdpdmVuIHRoYXQgc3BlY2lmaWNhdGlvbiwgaWYgdGhlIHVz ZXIgY291bGQgYWRkIHQ2IHRvIHRoZSAodDMgdDQgdDUpCisJICogc3ViLWpvaW4sIHNvIHdlIGRv bid0IGFsbG93IHRoYXQuIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IGl0LCB0aGUgbG9naWMKKwkg KiBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24gd291bGQgcmVxdWlyZSBzdWJzdGFudGlhbCBhZGp1 c3RtZW50OiB3ZSBjb3VsZAorCSAqIGFsbG93IHRoZSB0My10NC10NS10NiBqb2luIHRvIGJlIGJ1 aWx0IGhlcmUsIGJ1dCB0aGUgbmV4dCBzdGVwIG9mCisJICogam9pbmluZyB0MS10MiB0byB0aGUg cmVzdWx0IHdvdWxkIHN0aWxsIGJlIHJlamVjdGVkLgorCSAqLworCWlmICghc3VibGlzdCkKKwkJ ZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlyZXR1cm4gc3VibGlzdCA/IFBH UEFfSk9fREVOSUVEIDogUEdQQV9KT19QRVJNSVRURUQ7Cit9CisKKy8qCisgKiBEb2VzIGEgY2Vy dGFpbiBpdGVtIG9mIGpvaW4gbWV0aG9kIGFkdmljZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/Cisg KgorICogQWR2aWNlIHN1Y2ggYXMgSEFTSF9KT0lOKCh4IHkpKSBtZWFucyB0aGF0IHRoZXJlIHNo b3VsZCBiZSBhIGhhc2ggam9pbiB3aXRoCisgKiBleGFjdGx5IHggYW5kIHkgb24gdGhlIGlubmVy IHNpZGUuIE9idmlvdXNseSwgdGhpcyBtZWFucyB0aGF0IGlmIHdlIGFyZQorICogY29uc2lkZXJp bmcgYSBqb2luIHdpdGggZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLCB3ZSBzaG91 bGQgZW5mb3JjZQorICogdGhlIHVzZSBvZiBhIGhhc2ggam9pbi4gSG93ZXZlciwgaXQgYWxzbyBt ZWFucyB0aGF0IHdlIG11c3QgcmVqZWN0IHNvbWUKKyAqIGluY29tcGF0aWJsZSBqb2luIG9yZGVy cyBlbnRpcmVseS4gIEZvciBleGFtcGxlLCBhIGpvaW4gd2l0aCBleGFjdGx5IHgKKyAqIGFuZCB5 IG9uIHRoZSBvdXRlciBzaWRlIHNob3VsZG4ndCBiZSBhbGxvd2VkLCBiZWNhdXNlIHN1Y2ggcGF0 aHMgbWlnaHQgd2luCisgKiBvdmVyIHRoZSBhZHZpY2UtZHJpdmVuIHBhdGggb24gY29zdC4KKyAq CisgKiBUbyBhY2NvbW1vZGF0ZSB0aGVzZSByZXF1aXJlbWVudHMsIHRoaXMgZnVuY3Rpb24gcmV0 dXJucyB0cnVlIGlmIHRoZSBqb2luCisgKiBzaG91bGQgYmUgYWxsb3dlZCBhbmQgZmFsc2UgaWYg aXQgc2hvdWxkIG5vdC4gRnVydGhlcm1vcmUsICpyZXN0cmljdF9tZXRob2QKKyAqIGlzIHNldCB0 byB0cnVlIGlmIHRoZSBqb2luIG1ldGhvZCBzaG91bGQgYmUgZW5mb3JjZWQgYW5kIGZhbHNlIGlm IG5vdC4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luKGlu dCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVy ICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBib29s ICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRy eS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgaW5uZXJfaXRtOworCXBncGFfaXRtX3R5cGUgb3V0 ZXJfaXRtOworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhh dmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVu dHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9k ID0gZmFsc2U7CisKKwkvKgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlvbnMgZXhhY3RseSB0 aGUgc2FtZSByZWxhdGlvbnMgYXMgdGhlIGFkdmljZQorCSAqIHRhcmdldCwgYWxsb3cgdGhlIGpv aW4gYW5kIGVuZm9yY2UgdGhlIGpvaW4gbWV0aG9kIHJlc3RyaWN0aW9uLgorCSAqCisJICogSWYg b3VyIGlubmVyIHJlbCBtZW50aW9ucyBhIHN1cGVyc2V0IG9mIHRoZSB0YXJnZXQgcmVsYXRpb25z LCBhbGxvdyB0aGUKKwkgKiBqb2luLiBUaGUgam9pbiB3ZSBjYXJlIGFib3V0IGhhcyBhbHJlYWR5 IHRha2VuIHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UKKwkgKiBpbXBvc2VzIG5vIGZ1cnRoZXIgcmVz dHJpY3Rpb25zLgorCSAqLworCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFy Z2V0KGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJ CQkJCQkJICB0YXJnZXQpOworCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJewor CQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9k ID0gdHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWVsc2UgaWYgKGlubmVyX2l0bSA9PSBQR1BB X0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBJZiBv dXIgb3V0ZXIgcmVsIG1lbnRpb25zIGEgc3Vwc2Vyc2V0IG9mIHRoZSByZWxhdGlvbnMgaW4gdGhl IGFkdmljZQorCSAqIHRhcmdldCwgbm8gcmVzdHJpY3Rpb25zIGFwcGx5LiBUaGUgam9pbiB3ZSBj YXJlIGhhcyBhbHJlYWR5IHRha2VuCisJICogcGxhY2UsIGFuZCB0aGlzIGFkdmljZSBpbXBvc2Vz IG5vIGZ1cnRoZXIgcmVzdHJpY3Rpb25zLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQsIGlm IG91ciBvdXRlciByZWwgbWVudGlvbnMgZXhhY3RseSB0aGUgcmVsYXRpb25zCisJICogbWVudGlv bmVkIGluIHRoZSBhZHZpY2UgdGFyZ2V0LCB0aGUgcGxhbm5lciBpcyB0cnlpbmcgdG8gcmV2ZXJz ZSB0aGUKKwkgKiBzaWRlcyBvZiB0aGUgam9pbiBhcyBjb21wYXJlZCB3aXRoIG91ciBkZXNpcmVk IG91dGNvbWUuIFJlamVjdCB0aGF0LgorCSAqLworCW91dGVyX2l0bSA9IHBncGFfaWRlbnRpZmll cnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMsIHRhcmdldCk7 CisJaWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVy biB0cnVlOworCWVsc2UgaWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBJZiB0aGUgYWR2aWNlIHRhcmdldCBtZW50aW9ucyBvbmx5IGEg c2luZ2xlIHJlbGF0aW9uLCB0aGUgdGVzdCBiZWxvdworCSAqIGNhbm5vdCBldmVyIHBhc3MsIHNv IHNhdmUgc29tZSB3b3JrIGJ5IGV4aXRpbmcgbm93LgorCSAqLworCWlmICh0YXJnZXQtPnR0eXBl ID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICog SWYgZXZlcnl0aGluZyBpbiB0aGUgam9pbnJlbCBhcHBlYXJzIGluIHRoZSBhZHZpY2UgdGFyZ2V0 LCB3ZSdyZSBiZWxvdworCSAqIHRoZSBsZXZlbCBvZiB0aGUgam9pbiB3ZSB3YW50IHRvIGNvbnRy b2wuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgSEFTSF9KT0lOKCh4IHkpKSBkb2Vzbid0IHJlc3Ry aWN0IGhvdyB4IGFuZCB5IGNhbiBiZQorCSAqIGpvaW5lZC4KKwkgKgorCSAqIFRoaXMgbG9va3Vw IHNob3VsZG4ndCByZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQsIGJlY2F1c2UgYW55IHN1Y2ggYWR2 aWNlCisJICogc2hvdWxkIG5vdCBoYXZlIGJlZW4gcmV0dXJuZWQgZnJvbSB0aGUgdHJvdmUgaW4g dGhlIGZpcnN0IHBsYWNlLgorCSAqLworCWpvaW5faXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRj aF90YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHJpZHMsIHRh cmdldCk7CisJQXNzZXJ0KGpvaW5faXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKwlpZiAoam9p bl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFf SVRNX0VRVUFMKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogV2UndmUgYWxyZWFkeSBwZXJt aXR0ZWQgYWxsIGFsbG93YWJsZSBjYXNlcywgc28gcmVqZWN0IHRoaXMuCisJICoKKwkgKiBJZiB3 ZSByZWFjaCB0aGlzIHBvaW50LCB0aGVuIHRoZSBhZHZpY2Ugb3ZlcmxhcHMgd2l0aCB0aGlzIGpv aW4gYnV0CisJICogaXNuJ3QgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBlaXRoZXIgc2lkZSwg YW5kIHRoZXJlJ3MgYWxzbyBhdCBsZWFzdAorCSAqIG9uZSByZWxhdGlvbiBwcmVzZW50IGluIHRo ZSBqb2luIHRoYXQgaXNuJ3QgbWVudGlvbmVkIGJ5IHRoZSBhZHZpY2UuCisJICoKKwkgKiBGb3Ig aW5zdGFuY2UsIGluIHRoZSBIQVNIX0pPSU4oKHggeSkpIGV4YW1wbGUsIHdlIHdvdWxkIHJlYWNo IGhlcmUgaWYgeAorCSAqIHdlcmUgb24gb25lIHNpZGUgb2YgdGhlIGpvaW4sIHkgb24gdGhlIG90 aGVyLCBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZQorCSAqIHR3byBzaWRlcyBhbHNvIGluY2x1ZGVk IHNvbWUgb3RoZXIgcmVsYXRpb24sIHNheSB0LiBJbiB0aGF0IGNhc2UsCisJICogYWNjZXB0aW5n IHRoaXMgam9pbiB3b3VsZCBhbGxvdyB0aGUgKHggeSB0KSBqb2lucmVsIHRvIGNvbnRhaW4KKwkg KiBub24tZGlzYWJsZWQgcGF0aHMgdGhhdCBkbyBub3QgcHV0ICh4IHkpIG9uIHRoZSBpbm5lciBz aWRlIG9mIGEgaGFzaAorCSAqIGpvaW47IHdlIGNvdWxkIGluc3RlYWQgZW5kIHVwIHdpdGggc29t ZXRoaW5nIGxpa2UgKHggSk9JTiB0KSBKT0lOIHkuCisJICovCisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogRG9lcyBhZHZpY2UgY29uY2VybmluZyBhbiBvcGFxdWUgam9pbiBwZXJtaXQgYSBj ZXJ0YWluIGpvaW4/CisgKgorICogQnkgYW4gb3BhcXVlIGpvaW4sIHdlIG1lYW4gb25lIHdoZXJl IHRoZSBleGFjdCBtZWNoYW5pc20gYnkgd2hpY2ggdGhlCisgKiBqb2luIGlzIHBlcmZvcm1lZCBp cyBub3QgdmlzaWJsZSB0byBQb3N0Z3JlU1FMLiBDdXJyZW50bHkgdGhpcyBpcyB0aGUKKyAqIGNh c2Ugb25seSBmb3IgZm9yZWlnbiBqb2luczogRk9SRUlHTl9KT0lOKCh4IHkgeikpIG1lYW5zIHRo YXQgeCwgeSwgYW5kCisgKiB6IGFyZSBqb2luZWQgb24gdGhlIHJlbW90ZSBzaWRlLCBidXQgd2Ug a25vdyBub3RoaW5nIGFib3V0IHRoZSBqb2luIG9yZGVyCisgKiBvciBqb2luIG1ldGhvZHMgdXNl ZCBvdmVyIHRoZXJlLgorICoKKyAqIFRoZSBsb2dpYyBoZXJlIG5lZWRzIHRvIGRpZmZlciBmcm9t IHBncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luIGJlY2F1c2UsCisgKiBmb3Igb3RoZXIgam9p biB0eXBlcywgdGhlIGFkdmljZSB0YXJnZXQgaXMgdGhlIHNldCBvZiBpbm5lciByZWxzOyBoZXJl LCBpdAorICogaW5jbHVkZXMgYm90aCBpbm5lciBhbmQgb3V0ZXIgcmVscy4KKyAqLworc3RhdGlj IGJvb2wKK3BncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50 IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAg cGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2Qp Cit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFf aXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBw YXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQ R1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFsc2U7CisKKwlq b2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5u ZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOworCWlmIChqb2luX2l0bSA9PSBQ R1BBX0lUTV9FUVVBTCkKKwl7CisJCS8qCisJCSAqIFdlIGhhdmUgYW4gZXhhY3QgbWF0Y2gsIGFu ZCBzaG91bGQgdGhlcmVmb3JlIGFsbG93IHRoZSBqb2luIGFuZAorCQkgKiBlbmZvcmNlIHRoZSB1 c2Ugb2YgdGhlIHJlbGV2YW50IG9wYXF1ZSBqb2luIG1ldGhvZC4KKwkJICovCisJCWVudHJ5LT5m bGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOwor CQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVf U1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwl7 CisJCS8qCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwg dGhlbiB0aGUgam9pbiB3ZSBjYXJlCisJCSAqIGFib3V0IGhhcyBhbHJlYWR5IHRha2VuIHBsYWNl IGFuZCBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBhcHBseS4KKwkJICoKKwkJICogSWYgam9pbl9p dG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULCB3ZSdyZSBzdGlsbCBidWlsZGluZyB1cCB0 bworCQkgKiB0aGUgam9pbiB3ZSBjYXJlIGFib3V0IGFuZCBoYXZlIG5vdCBpbnRyb2R1Y2VkIGFu eSBleHRyYW5lb3VzCisJCSAqIHJlbGF0aW9ucyBub3QgbmFtZWQgaW4gdGhlIGFkdmljZS4gTm90 ZSB0aGF0IEZvcmVpZ25TY2FuIHBhdGhzIGZvcgorCQkgKiBqb2lucyBhcmUgYnVpbHQgdXAgZnJv bSBGb3JlaWduU2NhbiBwYXRocyBmcm9tIHVuZGVybHlpbmcgam9pbnMgYW5kCisJCSAqIHNjYW5z LCBzbyB3ZSBtdXN0IG5vdCBkaXNhYmxlIHRoaXMgam9pbiB3aGVuIGNvbnNpZGVyaW5nIGEgc3Vi c2V0CisJCSAqIG9mIHRoZSByZWxhdGlvbnMgd2UgdWx0aW1hdGVseSB3YW50LgorCQkgKi8KKwkJ cmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBUaGUgYWR2aWNlIG92ZXJsYXBzIHRoZSBqb2lu LCBidXQgYXQgbGVhc3Qgb25lIHJlbGF0aW9uIGlzIHByZXNlbnQgaW4KKwkgKiB0aGUgam9pbiB0 aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLiBXZSB3YW50IHRvIGRpc2FibGUgc3Vj aAorCSAqIHBhdGhzIHNvIHRoYXQgd2UgYWN0dWFsbHkgcHVzaCBkb3duIHRoZSBqb2luIGFzIGlu dGVuZGVkLgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgYWR2aWNlIGNv bmNlcm5pbmcgYSBzZW1pam9pbiBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICogVW5saWtl IGpvaW4gbWV0aG9kIGFkdmljZSwgd2hpY2ggbGlzdHMgdGhlIHJlbHMgb24gdGhlIGlubmVyIHNp ZGUgb2YgdGhlCisgKiBqb2luLCBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZSBsaXN0cyB0aGUg cmVscyBvbiB0aGUgbnVsbGFibGUgc2lkZSBvZiB0aGUKKyAqIGpvaW4uIFRob3NlIGNhbiBiZSB0 aGUgc2FtZSwgaWYgdGhlIGpvaW4gdHlwZSBpcyBKT0lOX1VOSVFVRV9JTk5FUiBvcgorICogSk9J Tl9TRU1JLCBvciB0aGV5IGNhbiBiZSBkaWZmZXJlbnQsIGluIGNhc2Ugb2YgSk9JTl9VTklRVUVf T1VURVIgb3IKKyAqIEpPSU5fUklHSFRfU0VNSS4KKyAqCisgKiBXZSBkb24ndCBrbm93IGhlcmUg d2hldGhlciB0aGUgY2FsbGVyIHNwZWNpZmllZCBTRU1JSk9JTl9VTklRVUUgb3IKKyAqIFNFTUlK T0lOX05PTl9VTklRVUUuIFRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrIHRoZSBqb2luIHR5cGUgYWdh aW5zdCB0aGUKKyAqIGFkdmljZSB0eXBlIGlmIGFuZCBvbmx5IGlmIHdlIHNldCAqcmVzdHJpY3Rf bWV0aG9kIHRvIHRydWUuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3NlbWlqb2luX3Blcm1pdHNf am9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCSAgIHBncGFfaWRl bnRpZmllciAqcmlkcywKKwkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJ ICAgYm9vbCBvdXRlcl9pc19udWxsYWJsZSwKKwkJCQkJCSAgIGJvb2wgKnJlc3RyaWN0X21ldGhv ZCkKK3sKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJcGdw YV9pdG1fdHlwZSBqb2luX2l0bTsKKwlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0 bV90eXBlIG91dGVyX2l0bTsKKworCSpyZXN0cmljdF9tZXRob2QgPSBmYWxzZTsKKworCS8qIFdl IGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUg ZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCS8q CisJICogSWYgb3V0ZXIgcmVsIGlzIHRoZSBudWxsYWJsZSBzaWRlIGFuZCBjb250YWlucyBleGFj dGx5IHRoZSBzYW1lCisJICogcmVsYXRpb25zIGFzIHRoZSBhZHZpY2UgdGFyZ2V0LCB0aGVuIHRo ZSBqb2luIG9yZGVyIGlzIGFsbG93YWJsZSwgYnV0CisJICogdGhlIGNhbGxlciBtdXN0IGNoZWNr IHdoZXRoZXIgdGhlIGFkdmljZSB0YWcgKGVpdGhlciBTRU1JSk9JTl9VTklRVUUgb3IKKwkgKiBT RU1JSk9JTl9OT05fVU5JUVVFKSBtYXRjaGVzIHRoZSBqb2luIHR5cGUuCisJICoKKwkgKiBJZiB0 aGUgb3V0ZXIgcmVsIGlzIGEgc3VwZXJzZXQgb2YgdGhlIHRhcmdldCByZWxhdGlvbnMsIHRoZSBq b2luIHdlCisJICogY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSwgc28gd2Ugc2hv dWxkIGltcG9zZSBubyBmdXRoZXIKKwkgKiByZXN0cml0aW9ucy4KKwkgKi8KKwlvdXRlcl9pdG0g PSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJ ICByaWRzLCB0YXJnZXQpOworCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJewor CQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQlpZiAob3V0ZXJfaXNfbnVs bGFibGUpCisJCXsKKwkJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQkJcmV0dXJuIHRydWU7 CisJCX0KKwl9CisJZWxzZSBpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NV QlNFVCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBBcyBhYm92ZSwgYnV0IGZvciB0aGUgaW5uZXIg cmVsLiAqLworCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVy X2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICB0 YXJnZXQpOworCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRyeS0+ ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQlpZiAoIW91dGVyX2lzX251bGxhYmxlKQor CQl7CisJCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJ fQorCWVsc2UgaWYgKGlubmVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJ CXJldHVybiB0cnVlOworCisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGluIHRoZSBqb2lucmVsIGFw cGVhcnMgaW4gdGhlIGFkdmljZSB0YXJnZXQsIHdlJ3JlIGJlbG93CisJICogdGhlIGxldmVsIG9m IHRoZSBqb2luIHdlIHdhbnQgdG8gY29udHJvbC4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRl bnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJ CQkJCSByaWRzLCB0YXJnZXQpOworCUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lO VCk7CisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2lu X2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3Zl IHRlc3RlZCBmb3IgYWxsIGFsbG93YWJsZSBwb3NzaWJpbGl0aWVzLCBhbmQgc28gbXVzdCByZWpl Y3QgdGhpcworCSAqIGpvaW4gb3JkZXIuIFRoaXMgY2FuIGhhcHBlbiBpbiB0d28gd2F5cy4KKwkg KgorCSAqIEZpcnN0LCB3ZSBtaWdoIGJlIGNvbnNpZGVyaW5nIGEgc2VtaWpvaW4gdGhhdCBvdmVy bGFwcyBpbmNvbXBsZXRlbHkKKwkgKiB3aXRoIG9uZSBvciBib3RoIHNpZGVzIG9mIHRoZSBqb2lu LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIgaGFzCisJICogc3BlY2lmaWVkIFNFTUlKT0lOX1VO SVFVRSgodDEgdDIpKSBvciBTRU1JSk9JTl9OT05fVU5JUVVFKCh0MSB0MikpLCB3ZQorCSAqIHNo b3VsZCByZWplY3QgYSBwcm9wb3NlZCB0Mi10MyBqb2luLCBzaW5jZSB0aGF0IGNvdWxkIG5vdCBy ZXN1bHQgaW4gYQorCSAqIGZpbmFsIHBsYW4gY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UuCisJ ICoKKwkgKiBTZWNvbmQsIHdlIG1pZ2h0IGJlIGNvbnNpZGVyaW5nIGEgc2VtaWpvaW4gd2hlcmUg dGhlIGFkdmljZSB0YXJnZXQKKwkgKiBwZXJmZWN0bHkgbWF0Y2hlcyBvbmUgc2lkZSBvZiB0aGUg am9pbiwgYnV0IGl0J3MgdGhlIHdyb25nIG9uZS4gRm9yCisJICogZXhhbXBsZSwgaW4gdGhlIGV4 YW1wbGUgYWJvdmUsIHdlIG1pZ2h0IHNlZSBhIDMtd2F5IGpvaW4gYmV0d2VlbiB0MSwKKwkgKiB0 MiwgYW5kIHQzLCB3aXRoICh0MSB0Mikgb24gdGhlIG5vbi1udWxsYWJsZSBzaWRlLiBUaGF0LCB0 b28sIHdvdWxkIGJlCisJICogaW5jb21wYXRpYmxlIHdpdGggdGhlIGFkdmljZS4KKwkgKi8KKwly ZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBBcHBseSBzY2FuIGFkdmljZSB0byBhIFJlbE9wdElu Zm8uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVs T3B0SW5mbyAqcmVsLAorCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywK KwkJCQkJCQkgICBCaXRtYXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkgICBwZ3BhX3Ryb3Zl X2VudHJ5ICpyZWxfZW50cmllcywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbF9pbmRleGVzKQor eworCWJvb2wJCWdhdGhlcl9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNldCAgKmdhdGhlcl9w YXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfZnVsbF9tYXRjaCA9IE5V TEw7CisJaW50CQkJaSA9IC0xOworCXBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cnkgPSBOVUxM OworCWludAkJCWZsYWdzOworCWJvb2wJCXNjYW5fdHlwZV9jb25mbGljdCA9IGZhbHNlOworCUJp dG1hcHNldCAgKnNjYW5fdHlwZV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpzY2FuX3R5 cGVfcmVsX2luZGV4ZXMgPSBOVUxMOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCXVpbnQ2 NAkJc2Nhbl90eXBlID0gMDsKKworCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIHNjYW4gYWR2aWNl LiAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihzY2FuX2luZGV4ZXMsIGkpKSA+PSAw KQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqbXlfZW50cnkgPSAmc2Nhbl9lbnRyaWVzW2ldOwor CQl1aW50NjQJCW15X3NjYW5fdHlwZSA9IDA7CisKKwkJLyogVHJhbnNsYXRlIG91ciBhZHZpY2Ug dGFncyB0byBhIHNjYW4gc3RyYXRlZ3kgYWR2aWNlIHZhbHVlLiAqLworCQlpZiAobXlfZW50cnkt PnRhZyA9PSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOKQorCQl7CisJCQkvKgorCQkJICogQ3Vy cmVudGx5LCBQR1NfQ09OU0lERVJfSU5ERVhPTkxZIGNhbiBzdXBwcmVzcyBCaXRtYXAgSGVhcCBT Y2FucywKKwkJCSAqIHNvIGRvbid0IGNsZWFyIGl0IHdoZW4gc3VjaCBhIHNjYW4gaXMgcmVxdWVz dGVkLiBUaGlzIGhhcHBlbnMKKwkJCSAqIGJlY2F1c2UgYnVpbGRfaW5kZXhfc2NhbigpIHRoaW5r cyB0aGF0IHRoZSBwb3NzaWJpbGl0eSBvZiBhbgorCQkJICogaW5kZXgtb25seSBzY2FuIGlzIGEg c3VmZmljaWVudCByZWFzb24gdG8gY29uc2lkZXIgdXNpbmcgYW4KKwkJCSAqIG90aGVyd2lzZS11 c2VsZXNzIGluZGV4LCBhbmQgZ2V0X2luZGV4X3BhdGhzKCkgdGhpbmtzIHRoYXQgdGhlCisJCQkg KiBzYW1lIHBhdGhzIHRoYXQgYXJlIHVzZWZ1bCBmb3IgaW5kZXggb3IgaW5kZXgtb25seSBzY2Fu cyBzaG91bGQKKwkJCSAqIGFsc28gYmUgY29uc2lkZXJlZCBmb3IgYml0bWFwIHNjYW5zLiBQZXJo YXBzIHRoYXQgbG9naWMgc2hvdWxkCisJCQkgKiBiZSB0aWdodGVuZWQgdXAsIGJ1dCB1bnRpbCB0 aGVuIHdlIG5lZWQgdG8gaW5jbHVkZQorCQkJICogUEdTX0NPTlNJREVSX0lOREVYT05MWSBpbiBt eV9zY2FuX3R5cGUgaGVyZS4KKwkJCSAqLworCQkJbXlfc2Nhbl90eXBlID0gUEdTX0JJVE1BUFND QU4gfCBQR1NfQ09OU0lERVJfSU5ERVhPTkxZOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50 YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX0lO REVYT05MWVNDQU4gfCBQR1NfQ09OU0lERVJfSU5ERVhPTkxZOworCQllbHNlIGlmIChteV9lbnRy eS0+dGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfSU5E RVhTQ0FOOworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFUV9TQ0FOKQor CQkJbXlfc2Nhbl90eXBlID0gUEdTX1NFUVNDQU47CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcg PT0gUEdQQV9UQUdfVElEX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfVElEU0NBTjsKKwor CQkvKgorCQkgKiBJZiB0aGlzIGlzIHVuZGVyc3RhbmRhYmxlIHNjYW4gYWR2aWNlLCBoYW5nIG9u IHRvIHRoZSBlbnRyeSwgdGhlCisJCSAqIGluZmVycmVkIHNjYW4gdHlwZSB0eXBlLCBhbmQgdGhl IGluZGV4IGF0IHdoaWNoIHdlIGZvdW5kIGl0LgorCQkgKgorCQkgKiBBbHNvIG1ha2UgYSBub3Rl IGlmIHdlIHNlZSBjb25mbGljdGluZyBzY2FuIHR5cGUgYWR2aWNlLiBOb3RlIHRoYXQKKwkJICog d2UgcmVnYXJkIHR3byBpbmRleCBzcGVjaWZpY2F0aW9ucyBhcyBjb25mbGljdGluZyB1bmxlc3Mg dGhleSBtYXRjaAorCQkgKiBleGFjdGx5LiBJbiB0aGVvcnksIHBlcmhhcHMgd2UgY291bGQgcmVn YXJkIElOREVYX1NDQU4oYSBjKSBhbmQKKwkJICogSU5ERVhfU0NBTihhIGIuYykgYXMgbm9uLWNv bmZsaWN0aW5nIGlmIGl0IGhhcHBlbnMgdGhhdCB0aGUgb25seQorCQkgKiBpbmRleCBuYW1lZCBj IGlzIGluIHNjaGVtYSBiLCBidXQgaXQgZG9lc24ndCBzZWVtIHdvcnRoIHRoZSBjb2RlLgorCQkg Ki8KKwkJaWYgKG15X3NjYW5fdHlwZSAhPSAwKQorCQl7CisJCQlpZiAoc2Nhbl90eXBlICE9IDAg JiYgc2Nhbl90eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0 cnVlOworCQkJaWYgKCFzY2FuX3R5cGVfY29uZmxpY3QgJiYgc2Nhbl9lbnRyeSAhPSBOVUxMICYm CisJCQkJbXlfZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJc2Nhbl9lbnRy eS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwgJiYKKwkJCQkhcGdwYV9pbmRleF90YXJnZXRzX2Vx dWFsKHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCwKKwkJCQkJCQkJCQkgIG15X2VudHJ5LT50 YXJnZXQtPml0YXJnZXQpKQorCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CisJCQlzY2Fu X2VudHJ5ID0gbXlfZW50cnk7CisJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQlzY2Fu X3R5cGVfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNjYW5fdHlwZV9pbmRleGVzLCBpKTsKKwkJ fQorCX0KKworCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIGdhdGhlci1yZWxhdGVkIGFuZCBwYXJ0 aXRpb253aXNlIGFkdmljZS4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVt YmVyKHJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKm15X2Vu dHJ5ID0gJnJlbF9lbnRyaWVzW2ldOworCQl1aW50NjQJCW15X2dhdGhlcl9tYXNrID0gMDsKKwkJ Ym9vbAkJanVzdF9vbmVfcmVsOworCisJCWp1c3Rfb25lX3JlbCA9IG15X2VudHJ5LT50YXJnZXQt PnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIKKwkJCXx8IGxpc3RfbGVuZ3RoKG15X2Vu dHJ5LT50YXJnZXQtPmNoaWxkcmVuKSA9PSAxOworCisJCS8qCisJCSAqIFBBUlRJVElPTldJU0Ug YmVoYXZlcyBsaWtlIGEgc2NhbiB0eXBlLCBleGNlcHQgdGhhdCBpZiB0aGVyZSdzIG1vcmUKKwkJ ICogdGhhbiBvbmUgcmVsYXRpb24gdGFyZ2V0ZWQsIGl0IGhhcyBubyBlZmZlY3QgYXQgdGhpcyBs ZXZlbC4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJ U0UpCisJCXsKKwkJCWlmIChqdXN0X29uZV9yZWwpCisJCQl7CisJCQkJY29uc3QgdWludDY0IG15 X3NjYW5fdHlwZSA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EOworCisJCQkJaWYgKHNj YW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJCXNjYW5fdHlw ZV9jb25mbGljdCA9IHRydWU7CisJCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJCXNjYW5f dHlwZSA9IG15X3NjYW5fdHlwZTsKKwkJCQlzY2FuX3R5cGVfcmVsX2luZGV4ZXMgPQorCQkJCQli bXNfYWRkX21lbWJlcihzY2FuX3R5cGVfcmVsX2luZGV4ZXMsIGkpOworCQkJfQorCQkJY29udGlu dWU7CisJCX0KKworCQkvKgorCQkgKiBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSBhcHBsaWVkIHRv IGEgc2luZ2xlIHJlbCBtZWFuIHRoYXQgd2Ugc2hvdWxkCisJCSAqIHVzZSB0aGUgY29ycmVzcG9u ZGluZ3Mgc3RyYXRlZ3kgaGVyZSwgd2hpbGUgYXBwbHlpbmcgZWl0aGVyIHRvIG1vcmUKKwkJICog dGhhbiBvbmUgcmVsIG1lYW5zIHdlIHNob3VsZCBub3QgdXNlIHRob3NlIHN0cmF0ZWdpZXMgaGVy ZSwgYnV0CisJCSAqIHJhdGhlciBhdCB0aGUgbGV2ZWwgb2YgdGhlIGpvaW5yZWwgdGhhdCBjb3Jy ZXNwb25kcyB0byB3aGF0IHdhcworCQkgKiBzcGVjaWZpZWQuIE5PX0dBVEhFUiBjYW4gb25seSBi ZSBhcHBsaWVkIHRvIHNpbmdsZSByZWxzLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgc2V0dGluZyBQ R1NfQ09OU0lERVJfTk9OUEFSVElBTCBpbiBteV9nYXRoZXJfbWFzayBpcworCQkgKiBlcXVpdmFs ZW50IHRvIGFsbG93aW5nIHRoZSBub24tdXNlIG9mIGVpdGhlciBmb3JtIG9mIEdhdGhlciBoZXJl LgorCQkgKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSIHx8CisJCQlt eV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJeworCQkJaWYgKCFqdXN0 X29uZV9yZWwpCisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsK KwkJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJCW15X2dh dGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCWVsc2UKKwkJCQlteV9nYXRoZXJfbWFzayA9IFBH U19HQVRIRVJfTUVSR0U7CisJCX0KKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RB R19OT19HQVRIRVIpCisJCXsKKwkJCUFzc2VydChqdXN0X29uZV9yZWwpOworCQkJbXlfZ2F0aGVy X21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJfQorCisJCS8qCisJCSAqIElmIHdl IHNldCBteV9nYXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3ZSAoMSkgbWFrZSBhIG5vdGUgaWYg dGhlCisJCSAqIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVtZW1iZXIgdGhlIG1hc2sgdmFsdWUs IGFuZCAoMykgcmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlh bCBtYXRjaC4KKwkJICovCisJCWlmIChteV9nYXRoZXJfbWFzayAhPSAwKQorCQl7CisJCQlpZiAo Z2F0aGVyX21hc2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBteV9nYXRoZXJfbWFzaykKKwkJCQln YXRoZXJfY29uZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21hc2sgPSBteV9nYXRoZXJfbWFzazsK KwkJCWlmIChqdXN0X29uZV9yZWwpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRkX21l bWJlcihnYXRoZXJfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRpYWxf bWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKwl9 CisKKwkvKiBFbmZvcmNlIGNob2ljZSBvZiBpbmRleC4gKi8KKwlpZiAoc2Nhbl9lbnRyeSAhPSBO VUxMICYmICFzY2FuX3R5cGVfY29uZmxpY3QgJiYKKwkJKHNjYW5fZW50cnktPnRhZyA9PSBQR1BB X1RBR19JTkRFWF9TQ0FOIHx8CisJCSBzY2FuX2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhf T05MWV9TQ0FOKSkKKwl7CisJCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0ID0gc2Nhbl9lbnRy eS0+dGFyZ2V0LT5pdGFyZ2V0OworCQlJbmRleE9wdEluZm8gKm1hdGNoZWRfaW5kZXggPSBOVUxM OworCisJCWZvcmVhY2hfbm9kZShJbmRleE9wdEluZm8sIGluZGV4LCByZWwtPmluZGV4bGlzdCkK KwkJeworCQkJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShpbmRleC0+aW5kZXhvaWQp OworCQkJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXgtPmluZGV4b2lkKTsK KwkJCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKG5z cG9pZCk7CisKKwkJCWlmIChzdHJjbXAoaXRhcmdldC0+aW5kbmFtZSwgcmVsbmFtZSkgPT0gMCAm JgorCQkJCShpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fAorCQkJCSBzdHJjbXAoaXRh cmdldC0+aW5kbmFtZXNwYWNlLCByZWxuYW1lc3BhY2UpID09IDApKQorCQkJeworCQkJCW1hdGNo ZWRfaW5kZXggPSBpbmRleDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChtYXRjaGVk X2luZGV4ID09IE5VTEwpCisJCXsKKwkJCS8qIERvbid0IGZvcmNlIHRoZSBzY2FuIHR5cGUgaWYg dGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QuICovCisJCQlzY2FuX3R5cGUgPSAwOworCisJCQkvKiBN YXJrIGFkdmljZSBhcyBpbmFwcGxpY2FibGUuICovCisJCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhz Y2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLAorCQkJCQkJCQkgUEdQQV9URV9JTkFQUExJ Q0FCTEUpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRGlzYWJsZSBldmVyeSBvdGhlciBpbmRl eC4gKi8KKwkJCWZvcmVhY2hfbm9kZShJbmRleE9wdEluZm8sIGluZGV4LCByZWwtPmluZGV4bGlz dCkKKwkJCXsKKwkJCQlpZiAoaW5kZXggIT0gbWF0Y2hlZF9pbmRleCkKKwkJCQkJaW5kZXgtPmRp c2FibGVkID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIHNj YW4gbWV0aG9kIGVudHJpZXMgYXMgZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lmeQor CSAqIGRpZmZlcmVudCB0aGluZ3MsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICov CisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEw7CisJ aWYgKHNjYW5fdHlwZV9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsK KwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBm bGFncyk7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxf aW5kZXhlcywgZmxhZ3MpOworCisJLyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBp ZWNlIG9mIGFkdmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZC4gTWFyaworCSAqIHRoZSBvbmVzIHRo YXQgaW5jbHVkZWQgdGhpcyByZWxhdGlvbiBhcyBhIHRhcmdldCBieSBpdHNlbGYgYXMgZnVsbHkK KwkgKiBtYXRjaGVkLiBJZiB0aGVyZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBj b25mbGljdGluZy4KKwkgKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAo Z2F0aGVyX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFf dHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3Mp OworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhy ZWxfZW50cmllcywgZ2F0aGVyX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qCisJICogRW5mb3Jj ZSByZXN0cmljdGlvbnMgb24gdGhlIHNjYW4gdHlwZSBhbmQgdXNlIG9mIEdhdGhlci9HYXRoZXIg TWVyZ2UuCisJICogT25seSBjbGVhciBiaXRzIGhlcmUsIHNvIHRoYXQgd2Ugc3RpbGwgcmVzcGVj dCB0aGUgZW5hYmxlXyogR1VDcy4gRG8KKwkgKiBub3RoaW5nIGluIGNhc2VzIHdoZXJlIHRoZSBh ZHZpY2Ugb24gYSBzaW5nbGUgdG9waWMgY29uZmxpY3RzLgorCSAqLworCWlmIChzY2FuX3R5cGUg IT0gMCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0KQorCXsKKwkJdWludDY0CQlhbGxfc2Nhbl9tYXNr OworCisJCWFsbF9zY2FuX21hc2sgPSBQR1NfU0NBTl9BTlkgfCBQR1NfQVBQRU5EIHwgUEdTX01F UkdFX0FQUEVORCB8CisJCQlQR1NfQ09OU0lERVJfSU5ERVhPTkxZOworCQlyZWwtPnBnc19tYXNr ICY9IH4oYWxsX3NjYW5fbWFzayAmIH5zY2FuX3R5cGUpOworCX0KKwlpZiAoZ2F0aGVyX21hc2sg IT0gMCAmJiAhZ2F0aGVyX2NvbmZsaWN0KQorCXsKKwkJdWludDY0CQlhbGxfZ2F0aGVyX21hc2s7 CisKKwkJYWxsX2dhdGhlcl9tYXNrID0KKwkJCVBHU19HQVRIRVIgfCBQR1NfR0FUSEVSX01FUkdF IHwgUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCXJlbC0+cGdzX21hc2sgJj0gfihhbGxfZ2F0 aGVyX21hc2sgJiB+Z2F0aGVyX21hc2spOworCX0KK30KKworLyoKKyAqIEFkZCBmZWVkYmFjayBl bnRyaWVzIHRvIGZvciBvbmUgdHJvdmUgc2xpY2UgdG8gdGhlIHByb3ZpZGVkIGxpc3QgYW5kCisg KiByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0LgorICoKKyAqIEZlZWRiYWNrIGVudHJpZXMgYXJl IGdlbmVyYXRlZCBmcm9tIHRoZSB0cm92ZSBlbnRyeSdzIGZsYWdzLiBJdCdzIGFzc3VtZWQKKyAq IHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBzZXQgYWxsIHJlbGV2YW50IGZsYWdzIHdpdGgg dGhlIGV4Y2VwdGlvbiBvZgorICogUEdQQV9URV9GQUlMRUQuIFdlIHNldCB0aGF0IGZsYWcgaGVy ZSBpZiBhcHByb3ByaWF0ZS4KKyAqLworc3RhdGljIExpc3QgKgorcGdwYV9wbGFubmVyX2FwcGVu ZF9mZWVkYmFjayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkgcGdwYV90 cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50 aWZpZXJzLAorCQkJCQkJCSBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlcikKK3sKKwlw Z3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCWludAkJCW5lbnRyaWVzOworCVN0cmluZ0luZm9E YXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXBncGFfdHJvdmVfbG9va3VwX2Fs bCh0cm92ZSwgdHlwZSwgJmVudHJpZXMsICZuZW50cmllcyk7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBuZW50cmllczsgKytpKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmZW50cmll c1tpXTsKKwkJRGVmRWxlbSAgICAqaXRlbTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGVudHJ5IHdh cyBmdWxseSBtYXRjaGVkLCBjaGVjayB3aGV0aGVyIGdlbmVyYXRpbmcgYWR2aWNlCisJCSAqIGZy b20gdGhpcyBwbGFuIHdvdWxkIHByb2R1Y2Ugc3VjaCBhbiBlbnRyeS4gSWYgbm90LCBsYWJlbCB0 aGUgZW50cnkKKwkJICogYXMgZmFpbGVkLgorCQkgKi8KKwkJaWYgKChlbnRyeS0+ZmxhZ3MgJiBQ R1BBX1RFX01BVENIX0ZVTEwpICE9IDAgJiYKKwkJCSFwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2Uo d2Fsa2VyLCBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCSAgZW50cnktPnRhZywgZW50cnktPnRh cmdldCkpCisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9GQUlMRUQ7CisKKwkJaXRlbSA9IG1h a2VEZWZFbGVtKHBncGFfY3N0cmluZ190cm92ZV9lbnRyeShlbnRyeSksCisJCQkJCQkgICAoTm9k ZSAqKSBtYWtlSW50ZWdlcihlbnRyeS0+ZmxhZ3MpLCAtMSk7CisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIGl0ZW0pOworCX0KKworCXJldHVybiBsaXN0OworfQorCisvKgorICogRW1pdCBhIFdBUk5J TkcgdGVsbCB0aGUgdXNlciBhYm91dCBhIHByb2JsZW0gd2l0aCB0aGUgc3VwcGxpZWQgcGxhbiBh ZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfZmVlZGJhY2tfd2FybmluZyhM aXN0ICpmZWVkYmFjaykKK3sKKwlTdHJpbmdJbmZvRGF0YSBkZXRhaWxidWY7CisJU3RyaW5nSW5m b0RhdGEgZmxhZ2J1ZjsKKworCS8qIFF1aWNrIGV4aXQgaWYgdGhlcmUncyBubyBmZWVkYmFjay4g Ki8KKwlpZiAoZmVlZGJhY2sgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBJbml0aWFsaXplIGJ1 ZmZlcnMuICovCisJaW5pdFN0cmluZ0luZm8oJmRldGFpbGJ1Zik7CisJaW5pdFN0cmluZ0luZm8o JmZsYWdidWYpOworCisJLyogTWFpbiBsb29wLiAqLworCWZvcmVhY2hfbm9kZShEZWZFbGVtLCBp dGVtLCBmZWVkYmFjaykKKwl7CisJCWludAkJCWZsYWdzID0gZGVmR2V0SW50MzIoaXRlbSk7CisK KwkJLyoKKwkJICogRG9uJ3QgZW1pdCBhbnl0aGluZyBpZiBpdCB3YXMgZnVsbHkgbWF0Y2hlZCB3 aXRoIG5vIHByb2JsZW1zIGZvdW5kLgorCQkgKgorCQkgKiBOQjogRmVlZGJhY2sgc2hvdWxkIG5l dmVyIGJlIG1hcmtlZCBmdWxseSBtYXRjaGVkIHdpdGhvdXQgYWxzbworCQkgKiBiZWluZyBtYXJr ZWQgcGFydGlhbGx5IG1hdGNoZWQuCisJCSAqLworCQlpZiAoZmxhZ3MgPT0gKFBHUEFfVEVfTUFU Q0hfUEFSVElBTCB8IFBHUEFfVEVfTUFUQ0hfRlVMTCkpCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBUZXJtaW5hdGUgZWFjaCBkZXRhaWwgbGluZSBleGNlcHQgdGhlIGxhc3Qgd2l0aCBhIG5l d2xpbmUuIFRoaXMgaXMKKwkJICogYWxzbyBhIGNvbnZlbmllbnQgcGxhY2UgdG8gcmVzZXQgZmxh Z2J1Zi4KKwkJICovCisJCWlmIChkZXRhaWxidWYubGVuID4gMCkKKwkJeworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoJmRldGFpbGJ1ZiwgJ1xuJyk7CisJCQlyZXNldFN0cmluZ0luZm8oJmZsYWdi dWYpOworCQl9CisKKwkJLyogR2VuZXJhdGUgb3V0cHV0LiAqLworCQlwZ3BhX3Ryb3ZlX2FwcGVu ZF9mbGFncygmZmxhZ2J1ZiwgZmxhZ3MpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZkZXRhaWxidWYs IF8oImFkdmljZSAlcyBmZWVkYmFjayBpcyBcIiVzXCIiKSwKKwkJCQkJCSBpdGVtLT5kZWZuYW1l LCBmbGFnYnVmLmRhdGEpOworCX0KKworCS8qIEVtaXQgdGhlIHdhcm5pbmcsIGlmIGFueSBwcm9i bGVtcyB3ZXJlIGZvdW5kLiAqLworCWlmIChkZXRhaWxidWYubGVuID4gMCkKKwkJZXJlcG9ydChX QVJOSU5HLAorCQkJCWVycm1zZygic3VwcGxpZWQgcGxhbiBhZHZpY2Ugd2FzIG5vdCBlbmZvcmNl ZCIpLAorCQkJCWVycmRldGFpbCgiJXMiLCBkZXRhaWxidWYuZGF0YSkpOworfQorCisjaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORworCisvKgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBhIGtl eSBjb25zaXN0aW5nIG9mIGFuIFJUSSBhbmQgcGxhbiBuYW1lLgorICovCitzdGF0aWMgdWludDMy CitwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpCit7CisJ ZmFzdGhhc2hfc3RhdGUgaHM7CisJaW50CQkJc3BfbGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMs IDApOworCisJaHMuYWNjdW0gPSBrZXkucnRpOworCWZhc3RoYXNoX2NvbWJpbmUoJmhzKTsKKwor CS8qIHBsYW5fbmFtZSBjYW4gYmUgTlVMTCAqLworCWlmIChrZXkucGxhbl9uYW1lID09IE5VTEwp CisJCXNwX2xlbiA9IDA7CisJZWxzZQorCQlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5n KCZocywga2V5LnBsYW5fbmFtZSk7CisKKwkvKiBoYXNoZm5fdW5zdGFibGUuaCByZWNvbW1lbmRz IHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdlYWsgKi8KKwlyZXR1cm4gZmFzdGhhc2hfZmluYWwz MigmaHMsIHNwX2xlbik7Cit9CisKKyNlbmRpZgorCisvKgorICogU2F2ZSB0aGUgcmFuZ2UgdGFi bGUgaWRlbnRpZmllciBmb3Igb25lIHJlbGF0aW9uIGZvciBmdXR1cmUgY3Jvc3MtY2hlY2tpbmcu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJfc3Rh dGUgKnBwcywgUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSBSZWxPcHRJbmZvICpyZWwpCit7Cisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5OworCXBn cGFfcmlfY2hlY2tlciAqY2hlY2s7CisJcGdwYV9pZGVudGlmaWVyIHJpZDsKKwljb25zdCBjaGFy ICpyaWRfc3RyaW5nOworCWJvb2wJCWZvdW5kOworCisJa2V5LnJ0aSA9IGJtc19zaW5nbGV0b25f bWVtYmVyKHJlbC0+cmVsaWRzKTsKKwlrZXkucGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOwor CXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCBrZXkucnRpLCAmcmlkKTsKKwly aWRfc3RyaW5nID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmcmlkKTsKKwljaGVjayA9IHBncGFf cmlfY2hlY2tfaW5zZXJ0KHBwcy0+cmlfY2hlY2tfaGFzaCwga2V5LCAmZm91bmQpOworCUFzc2Vy dCghZm91bmQgfHwgc3RyY21wKGNoZWNrLT5yaWRfc3RyaW5nLCByaWRfc3RyaW5nKSA9PSAwKTsK KwljaGVjay0+cmlkX3N0cmluZyA9IHJpZF9zdHJpbmc7CisjZW5kaWYKK30KKworLyoKKyAqIFZh bGlkYXRlIHRoYXQgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIHdlIHdlcmUgYWJsZSB0byBn ZW5lcmF0ZSBkdXJpbmcKKyAqIHBsYW5uaW5nIG1hdGNoIHRoZSBvbmVzIHdlIGdlbmVyYXRlZCBm cm9tIHRoZSBmaW5hbCBwbGFuLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2VyX3Zh bGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7Cisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnM7CisJcGdwYV9yaV9jaGVja19pdGVyYXRvciBpdDsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNoZWNr OworCisJLyogQ3JlYXRlIGlkZW50aWZpZXJzIGZyb20gdGhlIHBsYW5uZWQgc3RhdGVtZW50LiAq LworCXJ0X2lkZW50aWZpZXJzID0gcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRf c3RtdChwc3RtdCk7CisKKwkvKiBJdGVyYXRlIG92ZXIgaWRlbnRpZmllcnMgY3JlYXRlZCBkdXJp bmcgcGxhbm5pbmcsIHNvIHdlIGNhbiBjb21wYXJlLiAqLworCXBncGFfcmlfY2hlY2tfc3RhcnRf aXRlcmF0ZShwcHMtPnJpX2NoZWNrX2hhc2gsICZpdCk7CisJd2hpbGUgKChjaGVjayA9IHBncGFf cmlfY2hlY2tfaXRlcmF0ZShwcHMtPnJpX2NoZWNrX2hhc2gsICZpdCkpICE9IE5VTEwpCisJewor CQlpbnQJCQlydG9mZnNldCA9IDA7CisJCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJCUluZGV4 CQlmbGF0X3J0aTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSdzIG5vIHBsYW4gbmFtZSBhc3NvY2lh dGVkIHdpdGggdGhpcyBlbnRyeSwgdGhlbiB0aGUKKwkJICogcnRvZmZzZXQgaXMgMC4gT3RoZXJ3 aXNlLCB3ZSBjYW4gc2VhcmNoIHRoZSBTdWJQbGFuUlRJbmZvIGxpc3QgdG8KKwkJICogZmluZCB0 aGUgcnRvZmZzZXQuCisJCSAqLworCQlpZiAoY2hlY2stPmtleS5wbGFuX25hbWUgIT0gTlVMTCkK KwkJeworCQkJZm9yZWFjaF9ub2RlKFN1YlBsYW5SVEluZm8sIHJ0aW5mbywgcHN0bXQtPnN1YnJ0 aW5mb3MpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZiBydGluZm8tPmR1bW15IGlzIHNldCwgdGhl biB0aGUgc3VicXVlcnkncyByYW5nZSB0YWJsZQorCQkJCSAqIHdpbGwgb25seSBoYXZlIGJlZW4g cGFydGlhbGx5IGNvcGllZCB0byB0aGUgZmluYWwgcmFuZ2UKKwkJCQkgKiB0YWJsZS4gU3BlY2lm aWNhbGx5LCBvbmx5IFJURV9SRUxBVElPTiBlbnRyaWVzIGFuZAorCQkJCSAqIFJURV9TVUJRVUVS WSBlbnRyaWVzIHRoYXQgd2VyZSBvbmNlIFJURV9SRUxBVElPTiBlbnRyaWVzCisJCQkJICogd2ls bCBiZSBjb3BpZWQsIGFzIHBlciBhZGRfcnRlc190b19mbGF0X3J0YWJsZS4gVGhlcmVmb3JlLAor CQkJCSAqIHRoZXJlJ3Mgbm8gZml4ZWQgcnRvZmZzZXQgdGhhdCB3ZSBjYW4gYXBwbHkgdG8gdGhl IFJUSXMKKwkJCQkgKiB1c2VkIGR1cmluZyBwbGFubmluZyB0byBsb2NhdGUgdGhlIGNvcnJlc3Bv bmRpbmcgcmVsYXRpb25zCisJCQkJICogaW4gdGhlIGZpbmFsIHJ0YWJsZS4KKwkJCQkgKgorCQkJ CSAqIFdpdGggbW9yZSBjb21wbGV4IGxvZ2ljLCB3ZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGF0IHBy b2JsZW0KKwkJCQkgKiBieSByZW1lbWJlcmluZyB0aGUgd2hvbGUgY29udGVudHMgb2YgdGhlIHN1 YnF1ZXJ5J3MgcnRhYmxlCisJCQkJICogZHVyaW5nIHBsYW5uaW5nLCBkZXRlcm1pbmluZyB3aGlj aCBvZiB0aG9zZSB3b3VsZCBoYXZlIGJlZW4KKwkJCQkgKiBjb3BpZWQgdG8gdGhlIGZpbmFsIHJ0 YWJsZSwgYW5kIG1hdGNoaW5nIHRoZW0gdXAuIEJ1dCBpdAorCQkJCSAqIGRvZXNuJ3Qgc2VlbSBs aWtlIGEgd29ydGh3aGlsZSBlbmRlYXZvciBmb3IgcmlnaHQgbm93LAorCQkJCSAqIGJlY2F1c2Ug UlRJcyBmcm9tIHN1Y2ggc3VicXVlcmllcyB3b24ndCBhcHBlYXIgaW4gdGhlIHBsYW4KKwkJCQkg KiB0cmVlIGl0c2VsZiwganVzdCBpbiB0aGUgcmFuZ2UgdGFibGUuIEhlbmNlLCB3ZSBjYW4gbmVp dGhlcgorCQkJCSAqIGdlbmVyYXRlIG5vciBhY2NlcHQgYWR2aWNlIGZvciB0aGVtLgorCQkJCSAq LworCQkJCWlmIChzdHJjbXAoY2hlY2stPmtleS5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9uYW1l KSA9PSAwCisJCQkJCSYmICFydGluZm8tPmR1bW15KQorCQkJCXsKKwkJCQkJcnRvZmZzZXQgPSBy dGluZm8tPnJ0b2Zmc2V0OworCQkJCQlBc3NlcnQocnRvZmZzZXQgPiAwKTsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCQkJfQorCisJCQkvKgorCQkJICogSXQncyBub3QgYW4gZXJyb3IgaWYgd2UgZG9u J3QgZmluZCB0aGUgcGxhbiBuYW1lOiB0aGF0IGp1c3QKKwkJCSAqIG1lYW5zIHRoYXQgd2UgcGxh bm5lZCBhIHN1YnBsYW4gYnkgdGhpcyBuYW1lIGJ1dCBpdCBlbmRlZCB1cAorCQkJICogYmVpbmcg YSBkdW1teSBzdWJwbGFuIGFuZCBzbyB3YXNuJ3QgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHBsYW4K KwkJCSAqIHRyZWUuCisJCQkgKi8KKwkJCWlmIChydG9mZnNldCA9PSAwKQorCQkJCWNvbnRpbnVl OworCQl9CisKKwkJLyoKKwkJICogY2hlY2stPmtleS5ydGkgaXMgdGhlIFJUSSB0aGF0IHdlIHNh dyBwcmlvciB0byByYW5nZS10YWJsZQorCQkgKiBmbGF0dGVuaW5nLCBzbyB3ZSBtdXN0IGFkZCB0 aGUgYXBwcm9wcmlhdGUgUlQgb2Zmc2V0IHRvIGdldCB0aGUKKwkJICogZmluYWwgUlRJLgorCQkg Ki8KKwkJZmxhdF9ydGkgPSBjaGVjay0+a2V5LnJ0aSArIHJ0b2Zmc2V0OworCQlBc3NlcnQoZmxh dF9ydGkgPD0gbGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSkpOworCisJCS8qIEFzc2VydCB0aGF0 IHRoZSBzdHJpbmcgd2UgY29tcHV0ZSBub3cgbWF0Y2hlcyB0aGUgcHJldmlvdXMgb25lLiAqLwor CQlyaWRfc3RyaW5nID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmcnRfaWRlbnRpZmllcnNbZmxh dF9ydGkgLSAxXSk7CisJCUFzc2VydChzdHJjbXAocmlkX3N0cmluZywgY2hlY2stPnJpZF9zdHJp bmcpID09IDApOworCX0KKyNlbmRpZgorfQorCisvKgorICogQ29udmVydCBhIGJpdG1hcHNldCB0 byBhIEMgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBpbnRlZ2Vycy4KKyAqLworc3RhdGljIGNo YXIgKgorcGdwYV9ibXNfdG9fY3N0cmluZyhCaXRtYXBzZXQgKmJtcykKK3sKKwlTdHJpbmdJbmZv RGF0YSBidWY7CisJaW50CQkJeCA9IC0xOworCisJaWYgKGJtc19pc19lbXB0eShibXMpKQorCQly ZXR1cm4gIm5vbmUiOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJd2hpbGUgKCh4ID0gYm1z X25leHRfbWVtYmVyKGJtcywgeCkpID49IDApCisJeworCQlpZiAoYnVmLmxlbiA+IDApCisJCQlh cHBlbmRTdHJpbmdJbmZvKCZidWYsICIsICVkIiwgeCk7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIiVkIiwgeCk7CisJfQorCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCisvKgor ICogQ29udmVydCBhIEpvaW5UeXBlIHRvIGEgQyBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBj aGFyICoKK3BncGFfam9pbnR5cGVfdG9fY3N0cmluZyhKb2luVHlwZSBqb2ludHlwZSkKK3sKKwlz d2l0Y2ggKGpvaW50eXBlKQorCXsKKwkJY2FzZSBKT0lOX0lOTkVSOgorCQkJcmV0dXJuICJpbm5l ciI7CisJCWNhc2UgSk9JTl9MRUZUOgorCQkJcmV0dXJuICJsZWZ0IjsKKwkJY2FzZSBKT0lOX0ZV TEw6CisJCQlyZXR1cm4gImZ1bGwiOworCQljYXNlIEpPSU5fUklHSFQ6CisJCQlyZXR1cm4gInJp Z2h0IjsKKwkJY2FzZSBKT0lOX1NFTUk6CisJCQlyZXR1cm4gInNlbWkiOworCQljYXNlIEpPSU5f QU5USToKKwkJCXJldHVybiAiYW50aSI7CisJCWNhc2UgSk9JTl9SSUdIVF9TRU1JOgorCQkJcmV0 dXJuICJyaWdodCBzZW1pIjsKKwkJY2FzZSBKT0lOX1JJR0hUX0FOVEk6CisJCQlyZXR1cm4gInJp Z2h0IGFudGkiOworCQljYXNlIEpPSU5fVU5JUVVFX09VVEVSOgorCQkJcmV0dXJuICJ1bmlxdWUg b3V0ZXIiOworCQljYXNlIEpPSU5fVU5JUVVFX0lOTkVSOgorCQkJcmV0dXJuICJ1bmlxdWUgaW5u ZXIiOworCX0KKwlyZXR1cm4gIj8/PyI7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfcGxhbm5lci5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5u ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2Q0MGI5MTBiMDAK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5o CkBAIC0wLDAgKzEsMTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfcGxhbm5l ci5oCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBQR1BBX1BMQU5ORVJfSAorI2RlZmluZSBQR1BBX1BMQU5ORVJfSAorCitleHRlcm4g dm9pZCBwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYTA0ZjllY2E4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5jCkBAIC0wLDAgKzEsMjY5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX3NjYW4uYworICoJICBhbmFseXNpcyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAicGdwYV9zY2FuLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5v ZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKK3N0YXRp YyBwZ3BhX3NjYW4gKnBncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAor CQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpOworCisKK3N0YXRpYyBSVEVLaW5kIHVuaXF1ZV9u b25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKKy8qCisg KiBCdWlsZCBhIHBncGFfc2NhbiBvYmplY3QgZm9yIGEgUGxhbiBub2RlIGFuZCB1cGRhdGUgdGhl IHBsYW4gd2Fsa2VyCisgKiBjb250ZXh0IGFzIGFwcG9wcmlhdGUuICBJZiB0aGlzIGlzIGFuIEFw cGVuZCBvciBNZXJnZUFwcGVuZCBzY2FuLCBhbHNvCisgKiBidWlsZCBwZ3BhX3NjYW4gZm9yIGFu eSBzY2FucyB0aGF0IHdlcmUgY29uc29saWRhdGVkIGludG8gdGhpcyBvbmUgYnkKKyAqIEFwcGVu ZC9NZXJnZUFwcGVuZCBwdWxsLXVwLgorICoKKyAqIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBF bGlkZWROb2RlIGZvciB0aGlzIHBsYW4gbm9kZSwgcGFzcyB0aGUgdXBwZXJtb3N0CisgKiBvbmUg YXMgZWxpZGVkX25vZGUsIGVsc2UgcGFzcyBOVUxMLgorICoKKyAqIFNldCB0aGUgJ2JlbmVhdGhf YW55X2dhdGhlcicgbm9kZSBpZiB3ZSBhcmUgdW5kZXJuZWF0aCBhIEdhdGhlciBvcgorICogR2F0 aGVyIE1lcmdlIG5vZGUgKGV4Y2VwdCBmb3IgYSBzaW5nbGUtY29weSBHYXRoZXIgbm9kZSwgZm9y IHdoaWNoCisgKiBHQVRIRVIgb3IgR0FUSEVSX01FUkdFIGFkdmljZSBzaG91bGQgbm90IGJlIGVt aXR0ZWQpLgorICoKKyAqIFNldCB0aGUgJ3dpdGhpbl9qb2luX3Byb2JsZW0nIGZsYWcgaWYgd2Un cmUgaW5zaWRlIG9mIGEgam9pbiBwcm9ibGVtIGFuZAorICogbm90IG90aGVyd2lzZS4KKyAqLwor cGdwYV9zY2FuICoKK3BncGFfYnVpbGRfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwgUGxhbiAqcGxhbiwKKwkJCQlFbGlkZWROb2RlICplbGlkZWRfbm9kZSwKKwkJCQlib29s IGJlbmVhdGhfYW55X2dhdGhlciwgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtKQoreworCXBncGFf c2Nhbl9zdHJhdGVneSBzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKwlCaXRtYXBzZXQg ICpyZWxpZHMgPSBOVUxMOworCWludAkJCXJ0aSA9IC0xOworCUxpc3QJICAgKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzID0gTklMOworCU5vZGVUYWcJCW5vZGV0eXBlID0gbm9kZVRhZyhwbGFuKTsK KworCWlmIChlbGlkZWRfbm9kZSAhPSBOVUxMKQorCXsKKwkJbm9kZXR5cGUgPSBlbGlkZWRfbm9k ZS0+ZWxpZGVkX3R5cGU7CisJCXJlbGlkcyA9IGVsaWRlZF9ub2RlLT5yZWxpZHM7CisKKwkJLyoK KwkJICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQgbm9kZSB0aGF0IGhhZAorCQkgKiBvbmx5IG9uZSBzdXJ2aXZpbmcgY2hpbGQsIGl0IG1pZ2h0 IGJlIGEgcGFydGl0aW9ud2lzZSBvcGVyYXRpb24sCisJCSAqIGJ1dCB0aGVuIHRoaXMgaXMgZWl0 aGVyIGEgc2V0b3Agb3ZlciBzdWJxdWVyaWVzLCBvciBhIHBhcnRpdGlvbndpc2UKKwkJICogb3Bl cmF0aW9uICh3aGljaCBtaWdodCBiZSBhIHNjYW4gb3IgYSBqb2luIGluIHJlYWxpdHksIGJ1dCBo ZXJlIHdlCisJCSAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGFuZCBjb25zaWRl ciBpdCBzaW1wbHkgYSBzY2FuKS4KKwkJICoKKwkJICogQSBzZXRvcCBvdmVyIHN1YnF1ZXJpZXMs IG9yIGEgdHJpdmlhbCBTdWJRdWVyeVNjYW4gdGhhdCB3YXMgZWxpZGVkLAorCQkgKiBpcyBhbiAi b3JkaW5hcnkiIHNjYW4gaS5lLiBvbmUgZm9yIHdoaWNoIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYWR2 aWNlCisJCSAqIGJlY2F1c2UgdGhlIHBsYW5uZXIgaGFzIG5vdCBtYWRlIGFueSBtZWFuaW5nZnVs IGNob2ljZS4KKwkJICovCisJCWlmICgobm9kZXR5cGUgPT0gVF9BcHBlbmQgfHwgbm9kZXR5cGUg PT0gVF9NZXJnZUFwcGVuZCkgJiYKKwkJCXVuaXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLAor CQkJCQkJCQkgICB3YWxrZXItPnBzdG10LT5ydGFibGUpID09IFJURV9SRUxBVElPTikKKwkJCXN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJCXN0cmF0ZWd5ID0g UEdQQV9TQ0FOX09SRElOQVJZOworCisJCS8qIEpvaW4gUlRJcyBjYW4gYmUgcHJlc2VudCwgYnV0 IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJcmVsaWRzID0gcGdwYV9maWx0ZXJf b3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwl9CisJZWxz ZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBsYW4pKSAhPSAwKQorCXsKKwkJcmVsaWRzID0g Ym1zX21ha2Vfc2luZ2xldG9uKHJ0aSk7CisKKwkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCQl7 CisJCQljYXNlIFRfU2VxU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9TRVE7CisJCQkJ YnJlYWs7CisJCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1ND QU5fQklUTUFQX0hFQVA7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5kZXhTY2FuOgorCQkJCXN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX0lOREVYOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4T25s eVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fSU5ERVhfT05MWTsKKwkJCQlicmVhazsK KwkJCWNhc2UgVF9UaWRTY2FuOgorCQkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJCQlzdHJhdGVn eSA9IFBHUEFfU0NBTl9USUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCisJCQkJLyoKKwkJ CQkgKiBUaGlzIGNhc2UgaW5jbHVkZXMgYSBGb3JlaWduU2NhbiB0YXJnZXRpbmcgYSBzaW5nbGUK KwkJCQkgKiByZWxhdGlvbjsgbm8gb3RoZXIgc3RyYXRlZ3kgaXMgcG9zc2libGUgaW4gdGhhdCBj YXNlLCBidXQKKwkJCQkgKiBzZWUgYmVsb3csIHdoZXJlIHRoaW5ncyBhcmUgZGlmZmVyZW50IGlu IG11bHRpLXJlbGF0aW9uCisJCQkJICogY2FzZXMuCisJCQkJICovCisJCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fT1JESU5BUlk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAoKHJlbGlk cyA9IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJc3dpdGNoIChub2RlVGFnKHBs YW4pKQorCQl7CisJCQljYXNlIFRfRm9yZWlnblNjYW46CisKKwkJCQkvKgorCQkJCSAqIElmIG11 bHRpcGxlIHJlbGF0aW9ucyBhcmUgYmVpbmcgdGFyZ2V0ZWQgYnkgYSBzaW5nbGUKKwkJCQkgKiBm b3JlaWduIHNjYW4sIHRoZW4gdGhlIGZvcmVpZ24gam9pbiBoYXMgYmVlbiBwdXNoZWQgdG8gdGhl CisJCQkJICogcmVtb3RlIHNpZGUsIGFuZCB3ZSB3YW50IHRoYXQgdG8gYmUgcmVmbGVjdGVkIGlu IHRoZQorCQkJCSAqIGdlbmVyYXRlZCBhZHZpY2UuCisJCQkJICovCisJCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fRk9SRUlHTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9BcHBlbmQ6CisKKwkJCQkv KgorCQkJCSAqIEFwcGVuZCBub2RlcyBjYW4gcmVwcmVzZW50IHBhcnRpdGlvbndpc2Ugc2NhbnMg b2YgYSBhCisJCQkJICogcmVsYXRpb24sIGJ1dCB3aGVuIHRoZXkgaW1wbGVtZW50IGEgc2V0IG9w ZXJhdGlvbiwgdGhleSBhcmUKKwkJCQkgKiBqdXN0IG9yZGluYXJ5IHNjYW5zLgorCQkJCSAqLwor CQkJCWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRh YmxlKQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BB UlRJVElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFS WTsKKworCQkJCS8qIEJlIHN1cmUgdG8gYWNjb3VudCBmb3IgcHVsbGVkLXVwIHNjYW5zLiAqLwor CQkJCWNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQkJKChBcHBlbmQgKikgcGxhbiktPmNo aWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJY2FzZSBUX01lcmdlQXBwZW5k OgorCQkJCS8qIFNvbWUgbG9naWMgaGVyZSBhcyBmb3IgQXBwZW5kLCBhYm92ZS4gKi8KKwkJCQlp ZiAodW5pcXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkK KwkJCQkJPT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJ T05XSVNFOworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisK KwkJCQkvKiBCZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8KKwkJCQlj aGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmNo aWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdHJh dGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKwkJCQlicmVhazsKKwkJfQorCisKKwkJLyogSm9p biBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVyIHJlZmVycyB0byB0aGVtLiAq LworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMocmVsaWRzLCB3YWxrZXIt PnBzdG10LT5ydGFibGUpOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyBhbiBBcHBlbmQgb3Ig TWVyZ2VBcHBlbmQgbm9kZSBpbnRvIHdoaWNoIHN1Ym9yZGluYXRlIEFwcGVuZAorCSAqIG9yIE1l cmdlQXBwZW5kIHBhdGhzIHdlcmUgbWVyZ2VkLCBlYWNoIG9mIHRob3NlIG1lcmdlZCBwYXRocyBp cworCSAqIGVmZmVjdGl2ZWx5IGFub3RoZXIgc2NhbiBmb3Igd2hpY2ggd2UgbmVlZCB0byBhY2Nv dW50LgorCSAqLworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGNoaWxkX3JlbGlkcywgY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMpCisJeworCQlCaXRtYXBzZXQgICpjaGlsZF9ub25qb2luX3JlbGlk czsKKworCQljaGlsZF9ub25qb2luX3JlbGlkcyA9CisJCQlwZ3BhX2ZpbHRlcl9vdXRfam9pbl9y ZWxpZHMoY2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJCXdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJ CSh2b2lkKSBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0cmF0ZWd5LAorCQkJCQkJCSAg Y2hpbGRfbm9uam9pbl9yZWxpZHMpOworCX0KKworCS8qCisJICogSWYgdGhpcyBwbGFuIG5vZGUg aGFzIG5vIGFzc29jaWF0ZWQgUlRJcywgaXQncyBub3QgYSBzY2FuLiBXaGVuIHRoZQorCSAqICd3 aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFnIGlzIHNldCwgdGhhdCdzIHVuZXhwZWN0ZWQsIHNvIHRo cm93IGFuCisJICogZXJyb3IsIGVsc2UgcmV0dXJuIHF1aWV0bHkuCisJICovCisJaWYgKHJlbGlk cyA9PSBOVUxMKQorCXsKKwkJaWYgKHdpdGhpbl9qb2luX3Byb2JsZW0pCisJCQllbG9nKEVSUk9S LCAicGxhbiBub2RlIGhhcyBubyBSVElzOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mIFJU SXMgdG8gd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMuCisJICoKKwkgKiBBZGQgbm90aGluZyBpZiB3 ZSdyZSBiZW5lYXRoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBzaW5jZQorCSAqIE5P X0dBVEhFUiBhZHZpY2UgaXMgY2xlYXJseSBpbmFwcHJvcHJpYXRlIGluIHRoYXQgc2l0dWF0aW9u LgorCSAqCisJICogQWRkIG5vdGhpbmcgaWYgdGhpcyBpcyBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQgbm9kZSwgd2hldGhlciBvciBub3QKKwkgKiBlbGlkZWQuIFdlJ2xsIGVtaXQgTk9fR0FUSEVS KCkgZm9yIHRoZSB1bmRlcmx5aW5nIHNjYW4sIHdoaWNoIGlzIGdvb2QKKwkgKiBlbm91Z2guCisJ ICovCisJaWYgKCFiZW5lYXRoX2FueV9nYXRoZXIgJiYgbm9kZXR5cGUgIT0gVF9BcHBlbmQgJiYK KwkJbm9kZXR5cGUgIT0gVF9NZXJnZUFwcGVuZCkKKwkJd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMg PQorCQkJYm1zX2FkZF9tZW1iZXJzKHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zLCByZWxpZHMpOwor CisJLyogQ2FsbGVyIHRlbGxzIHVzIHdoZXRoZXIgTk9fR0FUSEVSKCkgYWR2aWNlIGZvciB0aGlz IHNjYW4gaXMgbmVlZGVkLiAqLworCXJldHVybiBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4s IHN0cmF0ZWd5LCByZWxpZHMpOworfQorCisvKgorICogQ3JlYXRlIGEgc2luZ2xlIHBncGFfc2Nh biBvYmplY3QgYW5kIHVwZGF0ZSB0aGUgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0LgorICovCitz dGF0aWMgcGdwYV9zY2FuICoKK3BncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJICAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5 LCBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlwZ3BhX3NjYW4gICpzY2FuOworCisJLyogQ3JlYXRl IHRoZSBzY2FuIG9iamVjdC4gKi8KKwlzY2FuID0gcGFsbG9jKHNpemVvZihwZ3BhX3NjYW4pKTsK KwlzY2FuLT5wbGFuID0gcGxhbjsKKwlzY2FuLT5zdHJhdGVneSA9IHN0cmF0ZWd5OworCXNjYW4t PnJlbGlkcyA9IHJlbGlkczsKKworCS8qIEFkZCBpdCB0byB0aGUgYXBwcm9wcmlhdGUgbGlzdC4g Ki8KKwl3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSA9IGxhcHBlbmQod2Fsa2VyLT5zY2Fu c1tzY2FuLT5zdHJhdGVneV0sCisJCQkJCQkJCQkJCXNjYW4pOworCisJcmV0dXJuIHNjYW47Cit9 CisKKy8qCisgKiBEZXRlcm1pbmUgdGhlIHVuaXF1ZSBydGVraW5kIG9mIGEgc2V0IG9mIHJlbGlk cy4KKyAqLworc3RhdGljIFJURUtpbmQKK3VuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0 ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQlmaXJz dCA9IHRydWU7CisJUlRFS2luZAkJcnRla2luZDsKKworCUFzc2VydChyZWxpZHMgIT0gTlVMTCk7 CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJ eworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYg KHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdCkK KwkJeworCQkJcnRla2luZCA9IHJ0ZS0+cnRla2luZDsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0K KwkJZWxzZSBpZiAocnRla2luZCAhPSBydGUtPnJ0ZWtpbmQpCisJCQllbG9nKEVSUk9SLCAicnRl a2luZCBtaXNtYXRjaDogJWQgdnMuICVkIiwKKwkJCQkgcnRla2luZCwgcnRlLT5ydGVraW5kKTsK Kwl9CisKKwlpZiAoZmlyc3QpCisJCWVsb2coRVJST1IsICJubyBub24tUlRFX0pPSU4gUlRFcyBm b3VuZCIpOworCisJcmV0dXJuIHJ0ZWtpbmQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfc2Nhbi5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2JiODcyNmZmMWUKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCkBAIC0w LDAgKzEsODUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfc2Nhbi5oCisgKgkg IGFuYWx5c2lzIG9mIHNjYW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBGb3IgcHVycG9zZXMgb2Yg dGhpcyBtb2R1bGUsIGEgInNjYW4iIGluY2x1ZGVzICgxKSBzaW5nbGUgcGxhbiBub2RlcyB0aGF0 CisgKiBzY2FuIG11bHRpcGxlIFJUSXMsIHN1Y2ggYXMgYSBkZWdlbmVyYXRlIFJlc3VsdCBub2Rl IHRoYXQgcmVwbGFjZXMgd2hhdAorICogd291bGQgb3RoZXJ3aXNlIGhhdmUgYmVlbiBhIGpvaW4s IGFuZCAoMikgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2RlcworICogaW1wbGVtZW50aW5nIGEg cGFydGl0aW9ud2lzZSBzY2FuIG9yIGEgcGFydGl0aW9ud2lzZSBqb2luLiBTYWlkCisgKiBkaWZm ZXJlbnRseSwgc2NhbnMgYXJlIHRoZSBsZWF2ZXMgb2YgdGhlIGpvaW4gdHJlZSBmb3IgYSBzaW5n bGUgam9pbgorICogcHJvYmxlbS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9zY2FuLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRl ZiBQR1BBX1NDQU5fSAorI2RlZmluZSBQR1BBX1NDQU5fSAorCisjaW5jbHVkZSAibm9kZXMvcGxh bm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dCBwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQ7CisKKy8qCisgKiBTY2FuIHN0cmF0ZWdpZXMuCisgKgorICog UEdQQV9TQ0FOX09SRElOQVJZIGlzIGFueSBzY2FuIHN0cmF0ZWd5IHRoYXQgaXNuJ3QgaW50ZXJl c3RpbmcgdG8gdXMKKyAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBwbGFubmVyIGRl Y2lzaW9uIGludm9sdmVkLiBGb3IgZXhhbXBsZSwKKyAqIHRoZSBvbmx5IHdheSB0byBzY2FuIGEg c3VicXVlcnkgaXMgYSBTdWJxdWVyeVNjYW4sIGFuZCB0aGUgb25seSB3YXkgdG8KKyAqIHNjYW4g YSBWQUxVRVMgY29uc3RydWN0IGlzIGEgVmFsdWVzU2Nhbi4gV2UgbmVlZCBub3QgY2FyZSBleGFj dGx5IHdoaWNoCisgKiB0eXBlIG9mIHBsYW5uZXIgbm9kZSB3YXMgdXNlZCBpbiBzdWNoIGNhc2Vz LCBiZWNhdXNlIHRoZSBzYW1lIHRoaW5nIHdpbGwKKyAqIGhhcHBlbiB3aGVuIHJlcGxhbm5pbmcu CisgKgorICogUEdQQV9TQ0FOX09SRElOQVJZIGFsc28gaW5jbHVkZXMgUmVzdWx0IG5vZGVzIHRo YXQgY29ycmVzcG9uZCB0byBzY2FucworICogb3IgZXZlbiBqb2lucyB0aGF0IGFyZSBwcm92ZWQg ZW1wdHkuIFdlIGRvbid0IGtub3cgd2hldGhlciBvciBub3QgdGhlIHNjYW4KKyAqIG9yIGpvaW4g d2lsbCBzdGlsbCBiZSBwcm92YWJseSBlbXB0eSBhdCByZXBsYW5uaW5nIHRpbWUsIGJ1dCBpZiBp dCBpcywKKyAqIHRoZW4gbm8gc2Nhbi10eXBlIGFkdmljZSBpcyBuZWVkZWQsIGFuZCBpZiBpdCdz IG5vdCwgd2UgY2FuJ3QgcmVjb21tZW5kCisgKiBhIHNjYW4gdHlwZSBiYXNlZCBvbiB0aGUgY3Vy cmVudCBwbGFuLgorICoKKyAqIFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFIGFsc28gbHVtcHMgdG9n ZXRoZXIgc2NhbnMgYW5kIGpvaW5zOiB0aGlzIGNhbgorICogYmUgZWl0aGVyIGEgcGFydGl0aW9u d2lzZSBzY2FuIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb3IgYSBwYXJ0aXRpb253aXNlCisgKiBq b2luIGJldHdlZW4gc2V2ZXJhbCBwYXJ0aXRpb25lZCB0YWJsZXMuIE5vdGUgdGhhdCBhbGwgZGVj aXNpb25zIGFib3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0byB1c2UgcGFydGl0aW9ud2lzZSBqb2lu IGFyZSBtZWFuaW5nZnVsOiBubyBtYXR0ZXIgd2hhdAorICogd2UgZGVjaWRlZCB0aGlzIHRpbWUs IHdlIGNvdWxkIGRvIG1vcmUgb3IgZmV3ZXIgdGhpbmdzIHBhcnRpdGlvbndpc2UgdGhlCisgKiBu ZXh0IHRpbWUuCisgKgorICogUEdQQV9TQ0FOX0ZPUkVJR04gaXMgb25seSB1c2VkIHdoZW4gdGhl cmUncyBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGludm9sdmVkOworICogYSBzaW5nbGUtdGFibGUg Zm9yZWlnbiBzY2FuIGlzIGNsYXNzaWZpZWQgYXMgb3JkaW5hcnksIHNpbmNlIHRoZXJlIGlzIG5v CisgKiBkZWNpc2lvbiB0byBtYWtlIGluIHRoYXQgY2FzZS4KKyAqCisgKiBPdGhlciBzY2FuIHN0 cmF0ZWdpZXMgbWFwIG9uZS10by1vbmUgdG8gcGxhbiBub2Rlcy4KKyAqLwordHlwZWRlZiBlbnVt Cit7CisJUEdQQV9TQ0FOX09SRElOQVJZID0gMCwKKwlQR1BBX1NDQU5fU0VRLAorCVBHUEFfU0NB Tl9CSVRNQVBfSEVBUCwKKwlQR1BBX1NDQU5fRk9SRUlHTiwKKwlQR1BBX1NDQU5fSU5ERVgsCisJ UEdQQV9TQ0FOX0lOREVYX09OTFksCisJUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UsCisJUEdQQV9T Q0FOX1RJRAorCS8qIHVwZGF0ZSBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZIGlmIHlvdSBhZGQgYW55 dGhpbmcgaGVyZSAqLworfSBwZ3BhX3NjYW5fc3RyYXRlZ3k7CisKKyNkZWZpbmUgTlVNX1BHUEFf U0NBTl9TVFJBVEVHWQkoKGludCkgUEdQQV9TQ0FOX1RJRCArIDEpCisKKy8qCisgKiBBbGwgb2Yg dGhlIGRldGFpbHMgd2UgbmVlZCByZWdhcmRpbmcgYSBzY2FuLgorICovCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3NjYW4KK3sKKwlQbGFuCSAgICpwbGFuOworCXBncGFfc2Nhbl9zdHJhdGVneSBzdHJh dGVneTsKKwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfc2NhbjsKKworZXh0ZXJuIHBncGFf c2NhbiAqcGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQ bGFuICpwbGFuLAorCQkJCQkJCQkgIEVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCQkJCQkg IGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJv YmxlbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3NjYW5uZXIubCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE4ODc3MzVmMzE0Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubApAQCAtMCwwICsx LDI5NyBAQAorJXRvcHsKKy8qCisgKiBTY2FubmVyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENv cHlyaWdodCAoYykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVk ZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3NjYW5zdXAuaCIKKworI2lu Y2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9wYXJzZXIuaCIKKworLyoKKyAqIEV4 dHJhIGRhdGEgdGhhdCB3ZSBwYXNzIGFyb3VuZCB3aGVuIGR1cmluZyBzY2FubmluZy4KKyAqCisg KiAnbGl0YnVmJyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgPHhkPiBleGNsdXNpdmUgc3RhdGUs IHdoaWNoIGhhbmRsZXMKKyAqIGRvdWJsZS1xdW90ZWQgaWRlbnRpZmllcnMuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBncGFfeXlfZXh0cmFfdHlwZQoreworCVN0cmluZ0luZm9EYXRhCWxpdGJ1ZjsK K30gcGdwYV95eV9leHRyYV90eXBlOworCit9CisKKyV7CisvKiBMQ09WX0VYQ0xfU1RBUlQgKi8K KworI2RlZmluZSBZWV9ERUNMIFwKKwlleHRlcm4gaW50IHBncGFfeXlsZXgodW5pb24gWVlTVFlQ RSAqeXlsdmFsX3BhcmFtLCBMaXN0ICoqcmVzdWx0LCBcCisJCQkJCQkgIGNoYXIgKipwYXJzZV9l cnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKQorCisvKiBObyByZWFzb24gdG8gY29uc3Ry YWluIGFtb3VudCBvZiBkYXRhIHNsdXJwZWQgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAx Njc3NzIxNgorCisvKiBBdm9pZCBleGl0KCkgb24gZmF0YWwgc2Nhbm5lciBlcnJvcnMgKGEgYml0 IHVnbHkgLS0gc2VlIHl5X2ZhdGFsX2Vycm9yKSAqLworI3VuZGVmIGZwcmludGYKKyNkZWZpbmUg ZnByaW50ZihmaWxlLCBmbXQsIG1zZykgIGZwcmludGZfdG9fZXJlcG9ydChmbXQsIG1zZykKKwor c3RhdGljIHZvaWQKK2ZwcmludGZfdG9fZXJlcG9ydChjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNo YXIgKm1zZykKK3sKKwllcmVwb3J0KEVSUk9SLCAoZXJybXNnX2ludGVybmFsKCIlcyIsIG1zZykp KTsKK30KKyV9CisKKyVvcHRpb24gcmVlbnRyYW50Cislb3B0aW9uIGJpc29uLWJyaWRnZQorJW9w dGlvbiA4Yml0Cislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9uIG5vZGVmYXVsdAor JW9wdGlvbiBub2lucHV0Cislb3B0aW9uIG5vdW5wdXQKKyVvcHRpb24gbm95eXdyYXAKKyVvcHRp b24gbm95eWFsbG9jCislb3B0aW9uIG5veXlyZWFsbG9jCislb3B0aW9uIG5veXlmcmVlCislb3B0 aW9uIHdhcm4KKyVvcHRpb24gcHJlZml4PSJwZ3BhX3l5IgorJW9wdGlvbiBleHRyYS10eXBlPSJw Z3BhX3l5X2V4dHJhX3R5cGUgKiIKKworLyoKKyAqIFdoYXQgZm9sbG93cyBpcyBhIHNldmVyZWx5 IHN0cmlwcGVkLWRvd24gdmVyc2lvbiBvZiB0aGUgY29yZSBzY2FubmVyLiBXZQorICogb25seSBj YXJlIGFib3V0IHJlY29nbml6aW5nIGlkZW50aWZpZXJzIHdpdGggb3Igd2l0aG91dCBpZGVudGlm aWVyIHF1b3RpbmcKKyAqIChpLmUuIGRvdWJsZS1xdW90aW5nKSwgZGVjaW1hbCBpbnRlZ2Vycywg YW5kIGEgc21hbGwgaGFuZGZ1bCBvZiBvdGhlcgorICogdGhpbmdzLiBLZWVwIHRoZXNlIHJ1bGVz IGluIHN5bmMgd2l0aCBzcmMvYmFja2VuZC9wYXJzZXIvc2Nhbi5sLiBBcyBpbiB0aGF0CisgKiBm aWxlLCB3ZSB1c2UgYW4gZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGMnIGZvciBDLXN0eWxlIGNv bW1lbnRzLCBhbmQgYW4KKyAqIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxsZWQgJ3hkJyBmb3IgZG91Ymxl LXF1b3RlZCBpZGVudGlmaWVycy4KKyAqLworJXggeGMKKyV4IHhkCisKK2lkZW50X3N0YXJ0CQlb QS1aYS16XDIwMC1cMzc3X10KK2lkZW50X2NvbnQJCVtBLVphLXpcMjAwLVwzNzdfMC05XCRdCisK K2lkZW50aWZpZXIJCXtpZGVudF9zdGFydH17aWRlbnRfY29udH0qCisKK2RlY2RpZ2l0CQlbMC05 XQorZGVjaW50ZWdlcgkJe2RlY2RpZ2l0fShfP3tkZWNkaWdpdH0pKgorCitzcGFjZQkJCVsgXHRc blxyXGZcdl0KK3doaXRlc3BhY2UJCXtzcGFjZX0rCisKK2RxdW90ZQkJCVwiCit4ZHN0YXJ0CQkJ e2RxdW90ZX0KK3hkc3RvcAkJCXtkcXVvdGV9Cit4ZGRvdWJsZQkJe2RxdW90ZX17ZHF1b3RlfQor eGRpbnNpZGUJCVteIl0rCisKK3hjc3RhcnQJCQlcL1wqCit4Y3N0b3AJCQlcKitcLworeGNpbnNp ZGUJCVteKi9dKworCislJQorCit7d2hpdGVzcGFjZX0JeyAvKiBpZ25vcmUgKi8gfQorCit7aWRl bnRpZmllcn0JeworCQkJCQljaGFyICAgKnN0cjsKKwkJCQkJYm9vbAlmYWlsOworCQkJCQlwZ3Bh X2FkdmljZV90YWdfdHlwZQl0YWc7CisKKwkJCQkJLyoKKwkJCQkJICogVW5saWtlIHRoZSBjb3Jl IHNjYW5uZXIsIHdlIGRvbid0IHRydW5jYXRlIGlkZW50aWZpZXJzCisJCQkJCSAqIGhlcmUuIFRo ZXJlIGlzIG5vIG9idmlvdXMgcmVhc29uIHRvIGRvIHNvLgorCQkJCQkgKi8KKwkJCQkJc3RyID0g ZG93bmNhc2VfaWRlbnRpZmllcih5eXRleHQsIHl5bGVuZywgZmFsc2UsIGZhbHNlKTsKKwkJCQkJ eXlsdmFsLT5zdHIgPSBzdHI7CisKKwkJCQkJLyoKKwkJCQkJICogSWYgaXQncyBub3QgYSB0YWcs IGp1c3QgcmV0dXJuIFRPS19JREVOVDsgZWxzZSwgcmV0dXJuCisJCQkJCSAqIGEgdG9rZW4gdHlw ZSBiYXNlZCBvbiBob3cgZnVydGhlciBwYXJzaW5nIHNob3VsZAorCQkJCQkgKiBwcm9jZWVkLgor CQkJCQkgKi8KKwkJCQkJdGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKHN0ciwgJmZhaWwpOwor CQkJCQlpZiAoZmFpbCkKKwkJCQkJCXJldHVybiBUT0tfSURFTlQ7CisJCQkJCWVsc2UgaWYgKHRh ZyA9PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSk9JTl9PUkRF UjsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4gfHwKKwkJCQkJCQkg dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0lO REVYOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfU0VRX1NDQU4gfHwKKwkJCQkJCQkg dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19CSVRN QVBfSEVBUF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCQkJ CQlyZXR1cm4gVE9LX1RBR19TSU1QTEU7CisJCQkJCWVsc2UKKwkJCQkJCXJldHVybiBUT0tfVEFH X0dFTkVSSUM7CisJCQkJfQorCit7ZGVjaW50ZWdlcn0JeworCQkJCQljaGFyICAgKmVuZHB0cjsK KworCQkJCQllcnJubyA9IDA7CisJCQkJCXl5bHZhbC0+aW50ZWdlciA9IHN0cnRvaW50KHl5dGV4 dCwgJmVuZHB0ciwgMTApOworCQkJCQlpZiAoKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vID09IEVS QU5HRSkKKwkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNj YW5uZXIsCisJCQkJCQkJCQkgImludGVnZXIgb3V0IG9mIHJhbmdlIik7CisJCQkJCXJldHVybiBU T0tfSU5URUdFUjsKKwkJCQl9CisKK3t4Y3N0YXJ0fQkJeworCQkJCQlCRUdJTih4Yyk7CisJCQkJ fQorCit7eGRzdGFydH0JCXsKKwkJCQkJQkVHSU4oeGQpOworCQkJCQlyZXNldFN0cmluZ0luZm8o Jnl5ZXh0cmEtPmxpdGJ1Zik7CisJCQkJfQorCisuCQkJCXsgcmV0dXJuIHl5dGV4dFswXTsgfQor Cis8eGM+e3hjc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQl9CisKKzx4Yz57eGNp bnNpZGV9CXsKKwkJCQkJLyogZGlzY2FyZCBtdWx0aXBsZSBjaGFyYWN0ZXJzIHdpdGhvdXQgc2xh c2ggb3IgYXN0ZXJpc2sgKi8KKwkJCQl9CisKKzx4Yz4uCQkJeworCQkJCQkvKgorCQkJCQkgKiBE aXNjYXJkIGFueSBzaW5nbGUgY2hhcmFjdGVyLiBmbGV4IHByZWZlcnMgbG9uZ2VyCisJCQkJCSAq IG1hdGNoZXMsIHNvIHRoaXMgcnVsZSB3aWxsIG5ldmVyIGJlIHBpY2tlZCB3aGVuIHdlIGNvdWxk CisJCQkJCSAqIGhhdmUgbWF0Y2hlZCB4Y3N0b3AuCisJCQkJCSAqCisJCQkJCSAqIE5COiBBdCBw cmVzZW50LCB3ZSBkb24ndCBib3RoZXIgdG8gc3VwcG9ydCBuZXN0ZWQKKwkJCQkJICogQy1zdHls ZSBjb21tZW50cyBoZXJlLCBidXQgdGhpcyBsb2dpYyBjb3VsZCBiZSBleHRlbmRlZAorCQkJCQkg KiBpZiB0aGF0IHJlc3RyaWN0aW9uIHBvc2VzIGEgcHJvYmxlbS4KKwkJCQkJICovCisJCQkJfQor Cis8eGM+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9y KHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1p bmF0ZWQgY29tbWVudCIpOworCQkJCX0KKworPHhkPnt4ZHN0b3B9CXsKKwkJCQkJQkVHSU4oSU5J VElBTCk7CisJCQkJCWlmICh5eWV4dHJhLT5saXRidWYubGVuID09IDApCisJCQkJCQlwZ3BhX3l5 ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkJICJ6 ZXJvLWxlbmd0aCBkZWxpbWl0ZWQgaWRlbnRpZmllciIpOworCQkJCQl5eWx2YWwtPnN0ciA9IHBz dHJkdXAoeXlleHRyYS0+bGl0YnVmLmRhdGEpOworCQkJCQlyZXR1cm4gVE9LX0lERU5UOworCQkJ CX0KKworPHhkPnt4ZGRvdWJsZX0JeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmeXlleHRy YS0+bGl0YnVmLCAnIicpOworCQkJCX0KKworPHhkPnt4ZGluc2lkZX0JeworCQkJCQlhcHBlbmRC aW5hcnlTdHJpbmdJbmZvKCZ5eWV4dHJhLT5saXRidWYsIHl5dGV4dCwgeXlsZW5nKTsKKwkJCQl9 CisKKzx4ZD48PEVPRj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJy b3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVy bWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciIpOworCQkJCX0KKworJSUKKworLyogTENPVl9FWENM X1NUT1AgKi8KKworLyoKKyAqIEhhbmRsZXIgZm9yIGVycm9ycyB3aGlsZSBzY2FubmluZyBvciBw YXJzaW5nIGFkdmljZS4KKyAqCisgKiBiaXNvbiBwYXNzZXMgdGhlIGVycm9yIG1lc3NhZ2UgdG8g dXMgdmlhICdtZXNzYWdlJywgYW5kIHRoZSBjb250ZXh0IGlzCisgKiBhdmFpbGFibGUgdmlhIHRo ZSAneXl0ZXh0JyBtYWNyby4gV2UgYXNzZW1ibGUgdGhvc2UgdmFsdWVzIGludG8gYSBmaW5hbAor ICogZXJyb3IgdGV4dCBhbmQgdGhlbiBhcnJhbmdlIHRvIHBhc3MgaXQgYmFjayB0byB0aGUgY2Fs bGVyIG9mIHBncGFfeXlwYXJzZSgpCisgKiBieSBzdG9yaW5nIGl0IGludG8gKnBhcnNlX2Vycm9y X21zZ19wLgorICovCit2b2lkCitwZ3BhX3l5ZXJyb3IoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBh cnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkgY29uc3QgY2hhciAqbWVz c2FnZSkKK3sKKwlzdHJ1Y3QgeXlndXRzX3QgKnl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QgKikgeXlz Y2FubmVyOwkvKiBuZWVkZWQgZm9yIHl5dGV4dAorCQkJCQkJCQkJCQkJCQkJICogbWFjcm8gKi8K KworCisJLyogcmVwb3J0IG9ubHkgdGhlIGZpcnN0IGVycm9yIGluIGEgcGFyc2Ugb3BlcmF0aW9u ICovCisJaWYgKCpwYXJzZV9lcnJvcl9tc2dfcCkKKwkJcmV0dXJuOworCisJaWYgKHl5dGV4dFsw XSkKKwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmludGYoIiVzIGF0IG9yIG5lYXIgXCIlc1wi IiwgbWVzc2FnZSwgeXl0ZXh0KTsKKwllbHNlCisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJp bnRmKCIlcyBhdCBlbmQgb2YgaW5wdXQiLCBtZXNzYWdlKTsKK30KKworLyoKKyAqIEluaXRpYWxp emUgdGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZv cmUgcGFyc2luZyBiZWdpbnMuCisgKi8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9pbml0KGNvbnN0IGNo YXIgKnN0ciwgeXlzY2FuX3QgKnl5c2Nhbm5lcnApCit7CisJeXlzY2FuX3QJeXlzY2FubmVyOwor CXBncGFfeXlfZXh0cmFfdHlwZQkqeXlleHQgPSBwYWxsb2MwX29iamVjdChwZ3BhX3l5X2V4dHJh X3R5cGUpOworCisJaWYgKHl5bGV4X2luaXQoeXlzY2FubmVycCkgIT0gMCkKKwkJZWxvZyhFUlJP UiwgInl5bGV4X2luaXQoKSBmYWlsZWQ6ICVtIik7CisKKwl5eXNjYW5uZXIgPSAqeXlzY2FubmVy cDsKKworCWluaXRTdHJpbmdJbmZvKCZ5eWV4dC0+bGl0YnVmKTsKKwlwZ3BhX3l5c2V0X2V4dHJh KHl5ZXh0LCB5eXNjYW5uZXIpOworCisJeXlfc2Nhbl9zdHJpbmcoc3RyLCB5eXNjYW5uZXIpOwor fQorCisKKy8qCisgKiBTaHV0IGRvd24gdGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMg c2hvdWxkIGJlIGNhbGxlZCBhZnRlciBwYXJzaW5nIGlzIGNvbXBsZXRlLgorICovCit2b2lkCitw Z3BhX3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eWxleF9kZXN0cm95 KHl5c2Nhbm5lcik7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgZnVuY3Rpb25zIHRvIG1ha2UgZmxl eCB1c2UgcGFsbG9jKCkgaW5zdGVhZCBvZiBtYWxsb2MoKS4KKyAqIEl0J2QgYmUgYmV0dGVyIHRv IG1ha2UgdGhlc2Ugc3RhdGljLCBidXQgZmxleCBpbnNpc3RzIG90aGVyd2lzZS4KKyAqLworCit2 b2lkICoKK3l5YWxsb2MoeXlfc2l6ZV90IHNpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwly ZXR1cm4gcGFsbG9jKHNpemUpOworfQorCit2b2lkICoKK3l5cmVhbGxvYyh2b2lkICpwdHIsIHl5 X3NpemVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0cikKKwkJcmV0dXJu IHJlcGFsbG9jKHB0ciwgc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gcGFsbG9jKHNpemUpOworfQor Cit2b2lkCit5eWZyZWUodm9pZCAqcHRyLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0 cikKKwkJcGZyZWUocHRyKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5MjQ5NTljMDEwCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKQEAgLTAsMCArMSw1 MTYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfdHJvdmUuYworICoJICBBbGwg b2YgdGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0ZWx5 CisgKiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNzLgorICoKKyAqIFRoaXMgbmFt ZSBjb21lcyBmcm9tIHRoZSBFbmdsaXNoIGV4cHJlc3Npb24gInRyb3ZlIG9mIGFkdmljZSIsIHdo aWNoCisgKiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygd2lzZG9tLiBUaGlzIHNsaWdodGx5IHVudXN1 YWwgdGVybSBpcyBjaG9zZW4gdG8KKyAqIGF2b2lkIG5hbWluZyBjb25mdXNpb247IGZvciBleGFt cGxlLCAiY29sbGVjdGlvbiBvZiBhZHZpY2UiIHdvdWxkCisgKiBpbnZpdGUgY29uZnVzaW9uIHdp dGggcGdwYV9jb2xsZWN0b3IuYy4gTm90ZSB0aGF0LCB3aGlsZSB3ZSBkb24ndCBrbm93CisgKiB3 aGV0aGVyIHRoZSBwcm92aWRlZCBhZHZpY2UgaXMgYWN0dWFsbHkgd2lzZSwgaXQncyBub3Qgb3Vy IGpvYiB0bworICogcXVlc3Rpb24gdGhlIHVzZXIncyBjaG9pY2VzLgorICoKKyAqIFRoZSBnb2Fs IG9mIHRoaXMgbW9kdWxlIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBsb2NhdGUgdGhlIHNwZWNpZmlj CisgKiBiaXRzIG9mIGFkdmljZSB0aGF0IHBlcnRhaW4gdG8gYW55IGdpdmVuIHBhcnQgb2YgYSBx dWVyeSwgb3IgdG8KKyAqIGRldGVybWluZSB0aGF0IHRoZXJlIGFyZSBub25lLgorICoKKyAqIENv cHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJw Z3BhX3Ryb3ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisKKy8q CisgKiBBbiBhZHZpY2UgdHJvdmUgaXMgb3JnYW5pemVkIGludG8gYSBzZXJpZXMgb2YgInNsaWNl cyIsIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSB0b3Bp YyBlLmcuIHNjYW4gbWV0aG9kcy4gRWFjaCBzbGljZSBjb25zaXN0cworICogb2YgYW4gYXJyYXkg b2YgdHJvdmUgZW50cmllcyBwbHVzIGEgaGFzaCB0YWJsZSB0aGF0IHdlIGNhbiB1c2UgdG8gZGV0 ZXJtaW5lCisgKiB3aGljaCBvbmVzIGFyZSByZWxldmFudCB0byBhIHBhcnRpY3VsYXIgcGFydCBv ZiB0aGUgcXVlcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfc2xpY2UKK3sKKwl1 bnNpZ25lZAluYWxsb2NhdGVkOworCXVuc2lnbmVkCW51c2VkOworCXBncGFfdHJvdmVfZW50cnkg KmVudHJpZXM7CisJc3RydWN0IHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaDsKK30gcGdwYV90 cm92ZV9zbGljZTsKKworLyoKKyAqIFNjYW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdzY2FuJzsg am9pbiBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ2pvaW4nOyBhbmQKKyAqIGFkdmljZSB0aGF0IGNh biBhcHBseSB0byBib3RoIGNhc2VzIGlzIHN0b3JlZCBpbnRvICdyZWwnLiBUaGlzIGxldHMgY2Fs bGVycworICogYXNrIGp1c3QgZm9yIHdoYXQncyByZWxldmFudC4gVGhlc2Ugc2xpY2VzIGNvcnJl c3BvbmQgdG8gdGhlIHBvc3NpYmxlIHZhbHVlcworICogb2YgcGdwYV90cm92ZV9sb29rdXBfdHlw ZS4KKyAqLworc3RydWN0IHBncGFfdHJvdmUKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlIGpvaW47CisJ cGdwYV90cm92ZV9zbGljZSByZWw7CisJcGdwYV90cm92ZV9zbGljZSBzY2FuOworfTsKKworLyoK KyAqIFdlJ3JlIGdvaW5nIHRvIGJ1aWxkIGEgaGFzaCB0YWJsZSB0byBhbGxvdyBjbGllbnRzIG9m IHRoaXMgbW9kdWxlIHRvIGZpbmQKKyAqIHJlbGV2YW50IGFkdmljZSBmb3IgYSBnaXZlbiBwYXJ0 IG9mIHRoZSBxdWVyeSBxdWlja2x5LiBIb3dldmVyLCB3ZSdyZSBnb2luZworICogdG8gdXNlIG9u bHkgdGhyZWUgb2YgdGhlIGZpdmUga2V5IGZpZWxkcyBhcyBoYXNoIGtleXMuIFRoZXJlIGFyZSB0 d28gcmVhc29ucworICogZm9yIHRoaXMuCisgKgorICogRmlyc3QsIGl0J3MgYWxsb3dhYmxlIHRv IHNldCBwYXJ0aXRpb25fc2NoZW1hIHRvIE5VTEwgdG8gbWF0Y2ggYSBwYXJ0aXRpb24KKyAqIHdp dGggdGhlIGNvcnJlY3QgbmFtZSBpbiBhbnkgc2NoZW1hLgorICoKKyAqIFNlY29uZCwgd2UgZXhw ZWN0IHRoZSAib2NjdXJyZW5jZSIgYW5kICJwYXJ0aXRpb25fc2NoZW1hIiBwb3J0aW9ucyBvZiB0 aGUKKyAqIHJlbGF0aW9uIGlkZW50aWZpZXJzIHRvIGJlIG1vc3RseSB1bmludGVyZXN0aW5nLiBN b3N0IG9mIHRoZSB0aW1lLCB0aGUKKyAqIG9jY3VycmVuY2UgZmllbGQgd2lsbCBiZSAxIGFuZCB0 aGUgcGFydGl0aW9uX3NjaGVtYSB2YWx1ZXMgd2lsbCBhbGwgYmUgdGhlCisgKiBzYW1lLiBFdmVu IHdoZW4gdGhlcmUgaXMgc29tZSB2YXJpYXRpb24sIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YgZW50 cmllcworICogdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlcyBmb3IgYWxsIHRocmVlIG9mIHRoZXNl IGtleSBmaWVsZHMgc2hvdWxkIGJlCisgKiBxdWl0ZSBzbWFsbC4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QKK3sKKwljb25zdCBjaGFyICphbGlhc19uYW1lOworCWNvbnN0IGNoYXIgKnBhcnRpdGlvbl9u YW1lOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdwYV90cm92ZV9lbnRyeV9rZXk7CisK K3R5cGVkZWYgc3RydWN0Cit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5OworCWludAkJCXN0 YXR1czsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQ7 CisKK3N0YXRpYyB1aW50MzIgcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3ZlX2Vu dHJ5X2tleSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfdHJvdmVfZW50cnlfY29t cGFyZV9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkgYSwgcGdwYV90cm92ZV9lbnRyeV9rZXkgYikK K3sKKwlpZiAoc3RyY21wKGEuYWxpYXNfbmFtZSwgYi5hbGlhc19uYW1lKSAhPSAwKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGFydGl0aW9u X25hbWUsIGIucGFydGl0aW9uX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0cmlu Z3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkpCisJCXJldHVy biBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBncGFf dHJvdmVfZW50cnkKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3BhX3Ryb3ZlX2VudHJ5X2Vs ZW1lbnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3Ryb3ZlX2VudHJ5X2tleQorI2RlZmlu ZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfdHJvdmVf ZW50cnlfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV90cm92 ZV9lbnRyeV9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBpbmxp bmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJsaWIv c2ltcGxlaGFzaC5oIgorCitzdGF0aWMgdm9pZCBwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdwYV90 cm92ZV9zbGljZSAqdHNsaWNlKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJvdmVfYWRkX3RvX3NsaWNl KHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBl IHRhZywKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyB2b2lk IHBncGFfdHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLAorCQkJ CQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJICAgaW50IGluZGV4 KTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJvdmVf c2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKworLyoK KyAqIEJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNlIGZyb20gYSBsaXN0IG9mIGFkdmljZSBpdGVtcy4K KyAqCisgKiBDYWxsZXIgY2FuIG9idGFpbiBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zIHRvIHBhc3Mg dG8gdGhpcyBmdW5jdGlvbiBieQorICogY2FsbGluZyBwZ3BhX3BhcnNlKCkuCisgKi8KK3BncGFf dHJvdmUgKgorcGdwYV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpCit7CisJcGdwYV90 cm92ZSAqdHJvdmUgPSBwYWxsb2Nfb2JqZWN0KHBncGFfdHJvdmUpOworCisJcGdwYV9pbml0X3Ry b3ZlX3NsaWNlKCZ0cm92ZS0+am9pbik7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+ cmVsKTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5zY2FuKTsKKworCWZvcmVhY2hf cHRyKHBncGFfYWR2aWNlX2l0ZW0sIGl0ZW0sIGFkdmljZV9pdGVtcykKKwl7CisJCXN3aXRjaCAo aXRlbS0+dGFnKQorCQl7CisJCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkJeworCQkJ CQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKworCQkJCQkvKgorCQkJCQkgKiBGb3IgbW9z dCBhZHZpY2UgdHlwZXMsIGVhY2ggZWxlbWVudCBpbiB0aGUgdG9wLWxldmVsCisJCQkJCSAqIGxp c3QgaXMgYSBzZXBhcmF0ZSB0YXJnZXQsIGJ1dCBpdCdzIG1vc3QgY29udmVuaWVudCB0bworCQkJ CQkgKiByZWdhcmQgdGhlIGVudGlyZXR5IG9mIGEgSk9JTl9PUkRFUiBzcGVjaWZpY2F0aW9uIGFz IGEKKwkJCQkJICogc2luZ2xlIHRhcmdldC4gU2luY2UgaXQgd2Fzbid0IHJlcHJlc2VudGVkIHRo YXQgd2F5CisJCQkJCSAqIGR1cmluZyBwYXJzaW5nLCBidWlsZCBhIHN1cnJvZ2F0ZSBvYmplY3Qg bm93LgorCQkJCQkgKi8KKwkJCQkJdGFyZ2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2Vf dGFyZ2V0KTsKKwkJCQkJdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsK KwkJCQkJdGFyZ2V0LT5jaGlsZHJlbiA9IGl0ZW0tPnRhcmdldHM7CisKKwkJCQkJcGdwYV90cm92 ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdl dCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdf SU5ERVhfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQljYXNlIFBHUEFfVEFH X1RJRF9TQ0FOOgorCisJCQkJLyoKKwkJCQkgKiBTY2FuIGFkdmljZS4KKwkJCQkgKi8KKwkJCQlm b3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIEZvciBub3csIGFsbCBvZiBvdXIgc2NhbiB0eXBlcyB0YXJn ZXQgc2luZ2xlIHJlbGF0aW9ucywKKwkJCQkJICogYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBtaWdo dCBub3QgYmUgdHJ1ZSwgZS5nLiBhIGN1c3RvbQorCQkJCQkgKiBzY2FuIGNvdWxkIHJlcGxhY2Ug YSBqb2luLgorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJH RVRfSURFTlRJRklFUik7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+c2Nh biwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKwor CQkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9J TjoKKwkJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCWNhc2UgUEdQ QV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQljYXNl IFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9O T05fVU5JUVVFOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisKKwkJCQkvKgor CQkJCSAqIEpvaW4gc3RyYXRlZ3kgYWR2aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBn cGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJcGdw YV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcs IHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX1BBUlRJVElP TldJU0U6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCWNhc2UgUEdQQV9UQUdfR0FUSEVS X01FUkdFOgorCQkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisKKwkJCQkvKgorCQkJCSAqIEFk dmljZSBhYm91dCBhIFJlbE9wdEluZm8gcmVsZXZhbnQgdG8gYm90aCBzY2FucyBhbmQgam9pbnMu CisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0 ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUt PnJlbCwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsK KwkJfQorCX0KKworCXJldHVybiB0cm92ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIHRyb3ZlIG9m IGFkdmljZSBmb3IgcmVsZXZhbnQgZW50cmllcy4KKyAqCisgKiBBbGwgcGFyYW1ldGVycyBhcmUg aW5wdXQgcGFyYW1ldGVycyBleGNlcHQgZm9yICpyZXN1bHQsIHdoaWNoIGlzIGFuIG91dHB1dAor ICogcGFyYW1ldGVyIHVzZWQgdG8gcmV0dXJuIHJlc3VsdHMgdG8gdGhlIGNhbGxlci4KKyAqLwor dm9pZAorcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVfbG9v a3VwX3R5cGUgdHlwZSwKKwkJCQkgIGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLCBw Z3BhX3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGljZTsK KwlCaXRtYXBzZXQgICppbmRleGVzOworCisJQXNzZXJ0KG5yaWRzID4gMCk7CisKKwlpZiAodHlw ZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJ ZWxzZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJv dmUtPmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCWluZGV4ZXMgPSBw Z3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzWzBdKTsKKwlmb3IgKGludCBpID0g MTsgaSA8IG5yaWRzOyArK2kpCisJeworCQlCaXRtYXBzZXQgICpvdGhlcl9pbmRleGVzOworCisJ CS8qCisJCSAqIElmIHRoZSBjYWxsZXIgaXMgYXNraW5nIGFib3V0IHR3byByZWxhdGlvbnMgdGhh dCBhcmVuJ3QgcGFydCBvZiB0aGUKKwkJICogc2FtZSBzdWJxdWVyeSwgdGhleSd2ZSBtZXNzZWQg dXAuCisJCSAqLworCQlBc3NlcnQoc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkc1swXS5w bGFuX25hbWUsCisJCQkJCQkJCQkJICByaWRzW2ldLnBsYW5fbmFtZSkpOworCisJCW90aGVyX2lu ZGV4ZXMgPSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzW2ldKTsKKwkJaW5k ZXhlcyA9IGJtc191bmlvbihpbmRleGVzLCBvdGhlcl9pbmRleGVzKTsKKwl9CisKKwlyZXN1bHQt PmVudHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJcmVzdWx0LT5pbmRleGVzID0gaW5kZXhlczsK K30KKworLyoKKyAqIFJldHVybiBhbGwgZW50cmllcyBpbiBhIHRyb3ZlIHNsaWNlIHRvIHRoZSBj YWxsZXIuCisgKgorICogVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGlucHV0IGFyZ3VtZW50 cywgYW5kIHRoZSByZW1haW5kZXIgYXJlIG91dHB1dAorICogYXJndW1lbnRzLgorICovCit2b2lk CitwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVfbG9v a3VwX3R5cGUgdHlwZSwKKwkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywgaW50ICpu ZW50cmllcykKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisKKwlpZiAodHlwZSA9PSBQ R1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxzZSBp ZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUtPmpv aW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCSplbnRyaWVzID0gdHNsaWNl LT5lbnRyaWVzOworCSpuZW50cmllcyA9IHRzbGljZS0+bnVzZWQ7Cit9CisKKy8qCisgKiBDb252 ZXJ0IGEgdHJvdmUgZW50cnkgdG8gYW4gaXRlbSBvZiBwbGFuIGFkdmljZSB0aGF0IHdvdWxkIHBy b2R1Y2UgaXQuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFfdHJv dmVfZW50cnkgKmVudHJ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJ bmZvKCZidWYpOworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIiwgcGdwYV9jc3RyaW5nX2Fk dmljZV90YWcoZW50cnktPnRhZykpOworCisJLyogSk9JTl9PUkRFUiB0YWdzIGFyZSB0cmFuc2Zv cm1lZCBieSBwZ3BhX2J1aWxkX3Ryb3ZlOyB1bmRvIHRoYXQgaGVyZSAqLworCWlmIChlbnRyeS0+ dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYs ICcoJyk7CisJZWxzZQorCQlBc3NlcnQoZW50cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJH RVRfT1JERVJFRF9MSVNUKTsKKworCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoJmJ1ZiwgZW50 cnktPnRhcmdldCk7CisKKwlpZiAoZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyAnKTsKKwkJcGdwYV9mb3JtYXRfaW5kZXhf dGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQtPml0YXJnZXQpOworCX0KKworCWlmIChlbnRyeS0+ dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYs ICcpJyk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCisgKiBTZXQgUEdQQV9URV8qIGZs YWdzIG9uIGEgc2V0IG9mIHRyb3ZlIGVudHJpZXMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfc2V0 X2ZsYWdzKHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsIEJpdG1hcHNldCAqaW5kZXhlcywgaW50 IGZsYWdzKQoreworCWludAkJCWkgPSAtMTsKKworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJl cihpbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJmVu dHJpZXNbaV07CisKKwkJZW50cnktPmZsYWdzIHw9IGZsYWdzOworCX0KK30KKworLyoKKyAqIEFw cGVuZCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFBHUEFfVEVfKiBm bGFncyB0byB0aGUKKyAqIGdpdmVuIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVf YXBwZW5kX2ZsYWdzKFN0cmluZ0luZm8gYnVmLCBpbnQgZmxhZ3MpCit7CisJaWYgKChmbGFncyAm IFBHUEFfVEVfTUFUQ0hfRlVMTCkgIT0gMCkKKwl7CisJCUFzc2VydCgoZmxhZ3MgJiBQR1BBX1RF X01BVENIX1BBUlRJQUwpICE9IDApOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm1hdGNoZWQi KTsKKwl9CisJZWxzZSBpZiAoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJUSUFMKSAhPSAwKQor CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInBhcnRpYWxseSBtYXRjaGVkIik7CisJZWxzZQorCQlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm5vdCBtYXRjaGVkIik7CisJaWYgKChmbGFncyAmIFBHUEFf VEVfSU5BUFBMSUNBQkxFKSAhPSAwKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiwgaW5hcHBs aWNhYmxlIik7CisJaWYgKChmbGFncyAmIFBHUEFfVEVfQ09ORkxJQ1RJTkcpICE9IDApCisJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiLCBjb25mbGljdGluZyIpOworCWlmICgoZmxhZ3MgJiBQR1BB X1RFX0ZBSUxFRCkgIT0gMCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIsIGZhaWxlZCIpOwor fQorCisvKgorICogQWRkIGEgbmV3IGFkdmljZSB0YXJnZXQgdG8gYW4gZXhpc3RpbmcgcGdwYV90 cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19z bGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlw ZSB0YWcsCisJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeTsKKworCWlmICh0c2xpY2UtPm51c2VkID49IHRzbGljZS0+bmFsbG9jYXRl ZCkKKwl7CisJCWludAkJCW5ld19hbGxvY2F0ZWQ7CisKKwkJbmV3X2FsbG9jYXRlZCA9IHRzbGlj ZS0+bmFsbG9jYXRlZCAqIDI7CisJCXRzbGljZS0+ZW50cmllcyA9IHJlcGFsbG9jX2FycmF5KHRz bGljZS0+ZW50cmllcywgcGdwYV90cm92ZV9lbnRyeSwKKwkJCQkJCQkJCQkgbmV3X2FsbG9jYXRl ZCk7CisJCXRzbGljZS0+bmFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CisJfQorCisJZW50cnkg PSAmdHNsaWNlLT5lbnRyaWVzW3RzbGljZS0+bnVzZWRdOworCWVudHJ5LT50YWcgPSB0YWc7CisJ ZW50cnktPnRhcmdldCA9IHRhcmdldDsKKwllbnRyeS0+ZmxhZ3MgPSAwOworCisJcGdwYV90cm92 ZV9hZGRfdG9faGFzaCh0c2xpY2UtPmhhc2gsIHRhcmdldCwgdHNsaWNlLT5udXNlZCk7CisKKwl0 c2xpY2UtPm51c2VkKys7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGhhc2ggdGFibGUgZm9yIGEg bmV3bHktYWRkZWQgYWR2aWNlIHRhcmdldC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJvdmVf YWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLCBwZ3BhX2FkdmljZV90YXJn ZXQgKnRhcmdldCwKKwkJCQkJICAgaW50IGluZGV4KQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5 IGtleTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJYm9vbAkJZm91bmQ7 CisKKwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBhZGQgZW50cmllcyBmb3IgYWxsIGRlc2NlbmRl bnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJ eworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0 LT5jaGlsZHJlbikKKwkJeworCQkJcGdwYV90cm92ZV9hZGRfdG9faGFzaChoYXNoLCBjaGlsZF90 YXJnZXQsIGluZGV4KTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyogU2FuaXR5IGNoZWNrcy4g Ki8KKwlBc3NlcnQodGFyZ2V0LT5yaWQub2NjdXJyZW5jZSA+IDApOworCUFzc2VydCh0YXJnZXQt PnJpZC5hbGlhc19uYW1lICE9IE5VTEwpOworCisJLyogQWRkIGFuIGVudHJ5IGZvciB0aGlzIHJl bGF0aW9uIGlkZW50aWZpZXIuICovCisJa2V5LmFsaWFzX25hbWUgPSB0YXJnZXQtPnJpZC5hbGlh c19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHRhcmdldC0+cmlkLnBhcnRyZWw7CisJa2V5 LnBsYW5fbmFtZSA9IHRhcmdldC0+cmlkLnBsYW5fbmFtZTsKKwllbGVtZW50ID0gcGdwYV90cm92 ZV9lbnRyeV9pbnNlcnQoaGFzaCwga2V5LCAmZm91bmQpOworCWlmICghZm91bmQpCisJCWVsZW1l bnQtPmluZGV4ZXMgPSBOVUxMOworCWVsZW1lbnQtPmluZGV4ZXMgPSBibXNfYWRkX21lbWJlcihl bGVtZW50LT5pbmRleGVzLCBpbmRleCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYW5kIGluaXRpYWxp emUgYSBuZXcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlKQoreworCS8qCisJICog SW4gYW4gaWRlYWwgd29ybGQsIHdlJ2xsIG1ha2UgdHNsaWNlLT5uYWxsb2NhdGVkIGJpZyBlbm91 Z2ggdGhhdCB0aGUKKwkgKiBhcnJheSBhbmQgaGFzaCB0YWJsZSB3aWxsIGJlIGxhcmdlIGVub3Vn aCB0byBjb250YWluIHRoZSBudW1iZXIgb2YKKwkgKiBhZHZpY2UgaXRlbXMgaW4gdGhpcyB0cm92 ZSBzbGljZSwgYnV0IGEgZ2VuZXJvdXMgZGVmYXVsdCB2YWx1ZSBpcyBub3QKKwkgKiBnb29kIGZv ciBwZXJmb3JtYW5jZSwgYmVjYXVzZSBwZ3BhX2luaXRfdHJvdmVfc2xpY2UoKSBoYXMgdG8gemVy byBhbgorCSAqIGFtb3VudCBvZiBtZW1vcnkgcHJvcG9ydGlvbmFsIHRvIHRzbGljZS0+bmFsbG9j YXRlZC4gSGVuY2UsIHdlIGtlZXAgdGhlCisJICogc3RhcnRpbmcgdmFsdWUgcXVpdGUgc21hbGws IG9uIHRoZSB0aGVvcnkgdGhhdCBhZHZpY2Ugc3RyaW5ncyB3aWxsCisJICogb2Z0ZW4gYmUgcmVs YXRpdmVseSBzaG9ydC4KKwkgKi8KKwl0c2xpY2UtPm5hbGxvY2F0ZWQgPSAxNjsKKwl0c2xpY2Ut Pm51c2VkID0gMDsKKwl0c2xpY2UtPmVudHJpZXMgPSBwYWxsb2NfYXJyYXkocGdwYV90cm92ZV9l bnRyeSwgdHNsaWNlLT5uYWxsb2NhdGVkKTsKKwl0c2xpY2UtPmhhc2ggPSBwZ3BhX3Ryb3ZlX2Vu dHJ5X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkgICB0c2xpY2UtPm5h bGxvY2F0ZWQsIE5VTEwpOworfQorCisvKgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBhIGtl eSBjb25zaXN0aW5nIG9mIGFsaWFzX25hbWUsIHBhcnRpdGlvbl9uYW1lLAorICogYW5kIHBsYW5f bmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3Bh X3Ryb3ZlX2VudHJ5X2tleSBrZXkpCit7CisJZmFzdGhhc2hfc3RhdGUgaHM7CisJaW50CQkJc3Bf bGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJLyogYWxpYXNfbmFtZSBtYXkgbm90 IGJlIE5VTEwgKi8KKwlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LmFs aWFzX25hbWUpOworCisJLyogcGFydGl0aW9uX25hbWUgYW5kIHBsYW5fbmFtZSwgaG93ZXZlciwg Y2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBhcnRpdGlvbl9uYW1lICE9IE5VTEwpCisJCXNwX2xl biArPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBhcnRpdGlvbl9uYW1lKTsKKwlp ZiAoa2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhhc2hfYWNjdW1fY3N0 cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyoKKwkgKiBoYXNoZm5fdW5zdGFibGUuaCBy ZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdlYWsuIEl0J3Mgbm90CisJICogY2xl YXIgdG8gbWUgd2hhdCB0byBkbyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RyaW5ncywgc28gZm9y IG5vdyBJJ20KKwkgKiBqdXN0IHVzaW5nIHRoZSB0b3RhbCBvZiBhbGwgb2YgdGhlIGxlbmd0aHMu CisJICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisvKgor ICogTG9vayBmb3IgbWF0Y2hpbmcgZW50cmllcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitw Z3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsIHBncGFfaWRl bnRpZmllciAqcmlkKQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlwZ3BhX3Ryb3Zl X2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVMTDsKKwor CUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMSk7CisKKwlrZXkuYWxpYXNfbmFtZSA9IHJpZC0+ YWxpYXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUgPSByaWQtPnBhcnRyZWw7CisJa2V5LnBs YW5fbmFtZSA9IHJpZC0+cGxhbl9uYW1lOworCisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlf bG9va3VwKHRzbGljZS0+aGFzaCwga2V5KTsKKworCWlmIChlbGVtZW50ICE9IE5VTEwpCisJewor CQlpbnQJCQlpID0gLTE7CisKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGVsZW1lbnQt PmluZGV4ZXMsIGkpKSA+PSAwKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZ0 c2xpY2UtPmVudHJpZXNbaV07CisKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoYXQgdGhpcyB0YXJn ZXQgb3Igb25lIG9mIGl0cyBkZXNjZW5kZW50cyBtYXRjaGVzIHRoZQorCQkJICogaWRlbnRpZmll ciBvbiB0aGUgdGhyZWUga2V5IGZpZWxkcyBhYm92ZSwgYnV0IHdlIGRvbid0IGtub3cKKwkJCSAq IHdoaWNoIGRlc2NlbmRlbnQgb3Igd2hldGhlciB0aGUgb2NjdXJlbmNlIGFuZCBzY2hlbWEgYWxz bworCQkJICogbWF0Y2guCisJCQkgKi8KKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190 YXJnZXQocmlkLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihy ZXN1bHQsIGkpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3Ryb3ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEx Yjc1YWY3MjRhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3Ryb3ZlLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBn cGFfdHJvdmUuaAorICoJICBBbGwgb2YgdGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFy IHF1ZXJ5LCBhcHByb3ByaWF0ZWx5CisgKiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNj ZXNzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ry b3ZlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1RST1ZFX0gK KyNkZWZpbmUgUEdQQV9UUk9WRV9ICisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorCisjaW5jbHVk ZSAibm9kZXMvYml0bWFwc2V0LmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmUgcGdwYV90 cm92ZTsKKworLyoKKyAqIEZsYWdzIHRoYXQgY2FuIGJlIHNldCBvbiBhIHBncGFfdHJvdmVfZW50 cnkgdG8gaW5kaWNhdGUgd2hhdCBoYXBwZW5lZCB3aGVuCisgKiB0cnlpbmcgdG8gcGxhbiB1c2lu ZyBhZHZpY2UuCisgKgorICogUEdQQV9URV9NQVRDSF9QQVJUSUFMIG1lYW5zIHRoYXQgd2UgZm91 bmQgc29tZSBwYXJ0IG9mIHRoZSBxdWVyeSB0aGF0IGF0CisgKiBsZWFzdCBwYXJ0aWFsbHkgbWF0 Y2hlZCB0aGUgdGFyZ2V0OyBlLmcuIGdpdmVuIEpPSU5fT1JERVIoYSBiKSwgdGhpcyB3b3VsZAor ICogYmUgc2V0IGlmIHdlIGV2ZXIgc2F3IGFueSBqb2lucmVsIGluY2x1ZGluZyBlaXRoZXIgImEi IG9yICJiIi4KKyAqCisgKiBQR1BBX1RFX01BVENIX0ZVTEwgbWVhbnMgdGhhdCB3ZSBmb3VuZCBh biBleGFjdCBtYXRjaCBmb3IgdGhlIHRhcmdldDsgZS5nLgorICogZ2l2ZW4gSk9JTl9PUkRFUihh IGIpLCB0aGlzIHdvdWxkIGJlIHNldCBpZiB3ZSBzYXcgYSBqb2lucmVsIGNvbnRhaW5pbmcKKyAq IGV4YWN0bHkgImEiIGFuZCAiYiIgYW5kIG5vdGhpbmcgZWxzZS4KKyAqCisgKiBQR1BBX1RFX0lO QVBQTElDQUJMRSBtZWFucyB0aGF0IHRoZSBhZHZpY2UgZG9lc24ndCBwcm9wZXJseSBhcHBseSB0 byB0aGUKKyAqIHRhcmdldDsgZS5nLiBJTkRFWF9TQ0FOKGZvbyBiYXJfaWR4KSB3b3VsZCBiZSBz byBtYXJrZWQgaWYgYmFyX2lkeCBkb2VzIG5vdAorICogZXhpc3Qgb24gZm9vLiBUaGUgZmFjdCB0 aGF0IHRoaXMgYml0IGhhcyBiZWVuIHNldCBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlCisgKiBhZHZp Y2UgaGFkIG5vIGVmZmVjdC4KKyAqCisgKiBQR1BBX1RFX0NPTkZMSUNUSU5HIG1lYW5zIHRoYXQg YSBjb25mbGljdCB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiB3aGF0IHRoaXMKKyAqIGFkdmljZSB3YW50 cyBhbmQgd2hhdCBzb21lIG90aGVyIHBsYW4gYWR2aWNlIHdhbnRzOyBlLmcuIEpPSU5fT1JERVIo YSBiKQorICogd291bGQgY29uZmxpY3Qgd2l0aCBIQVNIX0pPSU4oYSksIGJlY2F1c2UgdGhlIGZv cm1lciByZXF1aXJlcyAiYSIgdG8gYmUgdGhlCisgKiBvdXRlciB0YWJsZSB3aGlsZSB0aGUgbGF0 dGVyIHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBpbm5lciB0YWJsZS4KKyAqCisgKiBQR1BBX1RFX0ZB SUxFRCBtZWFucyB0aGF0IHRoZSByZXN1bHRpbmcgcGxhbiBkaWQgbm90IGNvbmZvcm0gdG8gdGhl IGFkdmljZS4KKyAqLworI2RlZmluZSBQR1BBX1RFX01BVENIX1BBUlRJQUwJCTB4MDAwMQorI2Rl ZmluZSBQR1BBX1RFX01BVENIX0ZVTEwJCQkweDAwMDIKKyNkZWZpbmUgUEdQQV9URV9JTkFQUExJ Q0FCTEUJCTB4MDAwNAorI2RlZmluZSBQR1BBX1RFX0NPTkZMSUNUSU5HCQkJMHgwMDA4CisjZGVm aW5lIFBHUEFfVEVfRkFJTEVECQkJCTB4MDAxMAorCisvKgorICogRWFjaCBlbnRyeSBpbiBhIHRy b3ZlIG9mIGFkdmljZSByZXByZXNlbnRzIHRoZSBhcHBsaWNhdGlvbiBvZiBhIHRhZyB0bworICog YSBzaW5nbGUgdGFyZ2V0LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5Cit7 CisJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0 OworCWludAkJCWZsYWdzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5OworCisvKgorICogV2hhdCBraW5k IG9mIGluZm9ybWF0aW9uIGRvZXMgdGhlIGNhbGxlciB3YW50IHRvIGZpbmQgaW4gYSB0cm92ZT8K KyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIHNj YW4gYWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gbWVhbnMgd2UncmUgbG9v a2luZyBmb3Igam9pbi1yZWxhdGVkIGFkdmljZS4KKyAqIFRoaXMgaW5jbHVkZXMgam9pbiBvcmRl ciBhZHZpY2UsIGpvaW4gbWV0aG9kIGFkdmljZSwgYW5kIHNlbWlqb2luLXVuaXF1ZW5lc3MKKyAq IGFkdmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9SRUwgbWVhbnMgd2UncmUgbG9va2lu ZyBmb3IgZ2VuZXJhbCBhZHZpY2UgYWJvdXQgdGhpcworICogYSBSZWxPcHRJbmZvIHRoYXQgbWF5 IGNvcnJlc3BvbmQgdG8gZWl0aGVyIGEgc2NhbiBvciBhIGpvaW4uIFRoaXMgaW5jbHVkZXMKKyAq IGdhdGhlci1yZWxhdGVkIGFkdmljZSBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuIE5vdGUgdGhh dCBwYXJ0aXRpb253aXNlCisgKiBhZHZpY2UgbWlnaHQgc2VlbSBsaWtlIGpvaW4gYWR2aWNlLCBi dXQgdGhhdCdzIG5vdCBhIGhlbHBmdWwgd2F5IG9mIHZpZXdpbmcKKyAqIHRoZSBtYXR0ZXIgYmVj YXVzZSAoMSkgcGFydGl0aW9ud2lzZSBhZHZpY2UgaXMgYWxzbyByZWxldmFudCBhdCB0aGUgc2Nh bgorICogbGV2ZWwgYW5kICgyKSBvdGhlciB0eXBlcyBvZiBqb2luIGFkdmljZSBhZmZlY3Qgb25s eSB3aGF0IHRvIGRvIGZyb20KKyAqIGpvaW5fcGF0aF9zZXR1cF9ob29rLCBidXQgcGFydGl0aW9u d2lzZSBhZHZpY2UgYWZmZWN0cyB3aGF0IHRvIGRvIGluCisgKiBqb2lucmVsX3NldHVwX2hvb2su CisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCit7CisJUEdQQV9UUk9W RV9MT09LVVBfSk9JTiwKKwlQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJUEdQQV9UUk9WRV9MT09L VVBfU0NBTgorfSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlOworCisvKgorICogVGhpcyBzdHJ1Y3Qg aXMgdXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIGEgdHJvdmUgbG9va3VwLiBGb3IgZWFjaCBt ZW1iZXIKKyAqIG9mICJpbmRleGVzIiwgdGhlIGVudHJ5IGF0IHRoZSBjb3JyZXNwb25kaW5nIG9m ZnNldCB3aXRoaW4gImVudHJpZXMiIGlzIG9uZQorICogb2YgdGhlIHJlc3VsdHMuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfcmVzdWx0Cit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50 cmllczsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX3Jlc3VsdDsKKworZXh0 ZXJuIHBncGFfdHJvdmUgKnBncGFfYnVpbGRfdHJvdmUoTGlzdCAqYWR2aWNlX2l0ZW1zKTsKK2V4 dGVybiB2b2lkIHBncGFfdHJvdmVfbG9va3VwKHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSAg cGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCSAgaW50IG5yaWRzLAorCQkJCQkJ CSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9yZXN1bHQgKnJl c3VsdCk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJv dmUsCisJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCQkgIHBn cGFfdHJvdmVfZW50cnkgKiplbnRyaWVzLAorCQkJCQkJCQkgIGludCAqbmVudHJpZXMpOworZXh0 ZXJuIGNoYXIgKnBncGFfY3N0cmluZ190cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRy eSk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyaWVzLAorCQkJCQkJCQkgQml0bWFwc2V0ICppbmRleGVzLCBpbnQgZmxhZ3MpOworZXh0ZXJu IHZvaWQgcGdwYV90cm92ZV9hcHBlbmRfZmxhZ3MoU3RyaW5nSW5mbyBidWYsIGludCBmbGFncyk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtl ci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZTRkOWMxY2Y5NAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtMCwwICsxLDEwMjkgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfd2Fsa2VyLmMKKyAqCSAgTWFpbiBlbnRy eXBvaW50cyBmb3IgYW5hbHl6aW5nIGEgcGxhbiB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5n CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKyNpbmNsdWRl ICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisjaW5jbHVk ZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCitz dGF0aWMgdm9pZCBwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVt LAorCQkJCQkJCQkgIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJCQkJ ICBMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2Fu eV9nYXRoZXIpOworc3RhdGljIEJpdG1hcHNldCAqcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4o cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCSBwZ3BhX3Vucm9s bGVkX2pvaW4gKnVqb2luKTsKKworc3RhdGljIHBncGFfcXVlcnlfZmVhdHVyZSAqcGdwYV9hZGRf ZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJcGdw YV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQkJCVBsYW4gKnBsYW4pOworCitzdGF0aWMgdm9pZCBw Z3BhX3FmX2FkZF9ydGkoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBJbmRleCBydGkpOwor c3RhdGljIHZvaWQgcGdwYV9xZl9hZGRfcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMs IEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3BsYW5fcnRpcyhM aXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgTGlzdCAq cnRhYmxlKTsKKworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBn cGFfdW5yb2xsZWRfam9pbiAqdWpvaW4sCisJCQkJCQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0 aCwKKwkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJ CQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkJCSAgIGJvb2wgdG9w bGV2ZWwpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJl cihwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9s ZW5ndGgsCisJCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJ CQkJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyBwZ3BhX3Nj YW4gKnBncGFfd2Fsa2VyX2ZpbmRfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwKKwkJCQkJCQkJCQlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkJQml0 bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfaW5kZXhfdGFyZ2V0X21h dGNoZXNfcGxhbihwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCwKKwkJCQkJCQkJCQkJCSAgUGxh biAqcGxhbik7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSBwZ3BhX3FmX3R5cGUgdHlw ZSwKKwkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxr ZXJfY29udGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CQkJCSAgcGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBCaXRtYXBzZXQg KnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpy ZWxpZHMpOworCisvKgorICogVG9wLWxldmVsIGVudHJ5cG9pbnQgZm9yIHRoZSBwbGFuIHRyZWUg d2Fsay4KKyAqCisgKiBQb3B1bGF0ZXMgd2Fsa2VyIGJhc2VkIG9uIGEgdHJhdmVyc2FsIG9mIHRo ZSBQbGFuIHRyZWVzIGluIHBzdG10LgorICoKKyAqIHNqX3VuaXF1ZV9yZWxzIGlzIGEgbGlzdCBv ZiBwZ3BhX3NqX3VuaXF1ZV9yZWwgb2JqZWN0cywgb25lIGZvciBlYWNoCisgKiByZWxhdGlvbiB3 ZSBjb25zaWRlcmVkIG1ha2luZyB1bmlxdWUgYXMgcGFydCBvZiBzZW1pam9pbiBwbGFubmluZy4K KyAqLwordm9pZAorcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwgUGxhbm5lZFN0bXQgKnBzdG10LAorCQkJCSBMaXN0ICpzal91bmlxdWVfcmVscykKK3sK KwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpzal91bmlxdWVfcnRpcyA9IE5VTEw7CisJTGlz dAkgICAqc2pfbm9udW5pcXVlX3FmcyA9IE5VTEw7CisKKwkvKiBJbml0aWFsaXphdGlvbi4gKi8K KwltZW1zZXQod2Fsa2VyLCAwLCBzaXplb2YocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0KSk7CisJ d2Fsa2VyLT5wc3RtdCA9IHBzdG10OworCisJLyogV2FsayB0aGUgbWFpbiBwbGFuIHRyZWUuICov CisJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcHN0bXQtPnBsYW5UcmVlLCAwLCBOVUxM LCBOSUwsIGZhbHNlKTsKKworCS8qIE1haW4gcGxhbiB0cmVlIHdhbGsgd29uJ3QgcmVhY2ggc3Vi cGxhbnMsIHNvIHdhbGsgdGhvc2UuICovCisJZm9yZWFjaChsYywgcHN0bXQtPnN1YnBsYW5zKQor CXsKKwkJUGxhbgkgICAqcGxhbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKHBsYW4gIT0gTlVMTCkK KwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4sIDAsIE5VTEwsIE5JTCwgZmFs c2UpOworCX0KKworCS8qIEFkanVzdCBSVElzIGZyb20gc2pfdW5pcXVlX3JlbHMgZm9yIHRoZSBm bGF0dGVuZWQgcmFuZ2UgdGFibGUuICovCisJZm9yZWFjaF9wdHIocGdwYV9zal91bmlxdWVfcmVs LCB1ciwgc2pfdW5pcXVlX3JlbHMpCisJeworCQlpbnQJCQlydGluZGV4ID0gLTE7CisJCWludAkJ CXJ0b2Zmc2V0ID0gMDsKKwkJYm9vbAkJZHVtbXkgPSBmYWxzZTsKKwkJQml0bWFwc2V0ICAqcmVs aWRzID0gTlVMTDsKKworCQkvKiBJZiB0aGlzIGlzIGEgc3VicGxhbiwgZmluZCB0aGUgcmFuZ2Ug dGFibGUgb2Zmc2V0LiAqLworCQlpZiAodXItPnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlm b3JlYWNoX25vZGUoU3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJ CXsKKwkJCQlpZiAoc3RyY21wKHVyLT5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9uYW1lKSA9PSAw KQorCQkJCXsKKwkJCQkJcnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zmc2V0OworCQkJCQlkdW1teSA9 IHJ0aW5mby0+ZHVtbXk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKHJ0b2Zm c2V0ID09IDApCisJCQkJZWxvZyhFUlJPUiwgIm5vIHJ0b2Zmc2V0IGZvciBwbGFuICVzIiwgdXIt PnBsYW5fbmFtZSk7CisJCX0KKworCQkvKiBJZiB0aGlzIGVudHJ5IHBlcnRhaW5zIHRvIGEgZHVt bXkgc3VicXVlcnksIGlnbm9yZSBpdC4gKi8KKwkJaWYgKGR1bW15KQorCQkJY29udGludWU7CisK KwkJLyogT2Zmc2V0IGVhY2ggZW50cnkgZnJvbSB0aGUgb3JpZ2luYWwgc2V0LiAqLworCQl3aGls ZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIodXItPnJlbGlkcywgcnRpbmRleCkpID49IDAp CisJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aW5kZXggKyBydG9mZnNldCk7 CisKKwkJLyogU3RvcmUgdGhlIHJlc3VsdGluZyBzZXQuICovCisJCXNqX3VuaXF1ZV9ydGlzID0g bGFwcGVuZChzal91bmlxdWVfcnRpcywgcmVsaWRzKTsKKwl9CisKKwkvKgorCSAqIFJlbW92ZSBh bnkgbm9uLXVuaXF1ZSBzZW1qb2luIHF1ZXJ5IGZlYXR1cmVzIGZvciB3aGljaCBtYWtpbmcgdGhl IHJlbAorCSAqIHVuaXF1ZSB3YXNuJ3QgY29uc2lkZXJlZC4KKwkgKi8KKwlmb3JlYWNoX3B0cihw Z3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLAorCQkJCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbUEdQQVFG X1NFTUlKT0lOX05PTl9VTklRVUVdKQorCXsKKwkJaWYgKGxpc3RfbWVtYmVyKHNqX3VuaXF1ZV9y dGlzLCBxZi0+cmVsaWRzKSkKKwkJCXNqX25vbnVuaXF1ZV9xZnMgPSBsYXBwZW5kKHNqX25vbnVu aXF1ZV9xZnMsIHFmKTsKKwl9CisJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZfU0VNSUpP SU5fTk9OX1VOSVFVRV0gPSBzal9ub251bmlxdWVfcWZzOworCisJLyoKKwkgKiBJZiB3ZSBmaW5k IGFueSBjYXNlcyB3aGVyZSBhbmFseXNpcyBvZiB0aGUgUGxhbiB0cmVlIHNob3dzIHRoYXQgdGhl CisJICogc2VtaWpvaW4gd2FzIG1hZGUgdW5pcXVlIGJ1dCB0aGlzIHBvc3NpYmlsaXR5IHdhcyBu ZXZlciBvYnNlcnZlZCB0byBiZQorCSAqIGNvbnNpZGVyZWQgZHVyaW5nIHBsYW5uaW5nLCB0aGVu IHdlIGhhdmUgYSBidWcgc29tZXdoZXJlLgorCSAqLworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlf ZmVhdHVyZSwgcWYsCisJCQkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZfU0VNSUpPSU5f VU5JUVVFXSkKKwl7CisJCWlmICghbGlzdF9tZW1iZXIoc2pfdW5pcXVlX3J0aXMsIHFmLT5yZWxp ZHMpKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJCWluaXRTdHJpbmdJbmZvKCZi dWYpOworCQkJb3V0Qml0bWFwc2V0KCZidWYsIHFmLT5yZWxpZHMpOworCQkJZWxvZyhFUlJPUiwK KwkJCQkgInVuaXF1ZSBzZW1pam9pbiBmb3VuZCBmb3IgcmVsaWRzICVzIGJ1dCBub3Qgb2JzZXJ2 ZWQgZHVyaW5nIHBsYW5uaW5nIiwKKwkJCQkgYnVmLmRhdGEpOworCQl9CisJfQorCisJLyoKKwkg KiBJdCdzIHBvc3NpYmxlIGZvciBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgcXVlcnkgZmVhdHVy ZSB0byBmaW5kIG5vCisJICogUlRJcyB3aGVuIHBhcnRpdGlvbndpc2UgYWdncmVnYXRpb24gaXMg aW4gdXNlLiBXZSBzaG91bGRuJ3QgZW1pdAorCSAqIHNvbWV0aGluZyBsaWtlIEdBVEhFUl9NRVJH RSgoKSksIHNvIGluc3RlYWQgZW1pdCBub3RoaW5nLiBUaGlzIG1lYW5zCisJICogdGhhdCB3ZSB3 b24ndCBhZHZpc2UgZWl0aGVyIEdBVEhFUiBvciBHQVRIRVJfTUVSR0Ugb3IgTk9fR0FUSEVSIGlu CisJICogc3VjaCBjYXNlcywgd2hpY2ggbWlnaHQgYmUgc29tZXRoaW5nIHdlIHdhbnQgdG8gaW1w cm92ZSBpbiB0aGUgZnV0dXJlLgorCSAqCisJICogKFNob3VsZCB0aGUgUGFydGlhbCBBZ2dyZWdh dGVzIGluIHN1Y2ggYSBjYXNlIGJlIGNyZWF0ZWQgaW4gYW4KKwkgKiBVUFBFUlJFTF9HUk9VUF9B R0cgd2l0aCBhIG5vbi1lbXB0eSByZWxpZCBzZXQ/IFJpZ2h0IG5vdyB0aGF0IGRvZXNuJ3QKKwkg KiBoYXBwZW4sIGJ1dCBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkIG1ha2UgbGlmZSBlYXNpZXIgZm9y IHVzIGlmIGl0IGRpZC4pCisJICovCisJZm9yIChpbnQgdCA9IDA7IHQgPCBOVU1fUEdQQV9RRl9U WVBFUzsgKyt0KQorCXsKKwkJTGlzdCAqcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisKKwkJZm9yZWFj aF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1t0XSkK KwkJeworCQkJaWYgKHFmLT5yZWxpZHMgIT0gTlVMTCkKKwkJCQlxdWVyeV9mZWF0dXJlcyA9IGxh cHBlbmQocXVlcnlfZmVhdHVyZXMsIHFmKTsKKwkJCWVsc2UKKwkJCQlBc3NlcnQodCA9PSBQR1BB UUZfR0FUSEVSIHx8IHQgPT0gUEdQQVFGX0dBVEhFUl9NRVJHRSk7CisJCX0KKworCQl3YWxrZXIt PnF1ZXJ5X2ZlYXR1cmVzW3RdID0gcXVlcnlfZmVhdHVyZXM7CisJfQorfQorCisvKgorICogTWFp biB3b3JraG9yc2UgZm9yIHRoZSBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBJZiB3aXRoaW5fam9p bl9wcm9ibGVtIGlzIHRydWUsIHdlIGVuY291bnRlcmVkIGEgam9pbiBhdCBzb21lIGhpZ2hlciBs ZXZlbAorICogb2YgdGhlIHRyZWUgd2FsayBhbmQgaGF2ZW4ndCB5ZXQgZGVzY2VuZGVkIG91dCBv ZiB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJlZSB0aGF0IGlzIHBhcnQgb2YgdGhhdCBz YW1lIGpvaW4gcHJvYmxlbS4gV2UncmUgbm8gbG9uZ2VyIGluIHRoZSBzYW1lCisgKiBqb2luIHBy b2JsZW0gaWYgKDEpIHdlIGNyb3NzIGludG8gYSBkaWZmZXJlbnQgc3VicXVlcnkgb3IgKDIpIHdl IGRlc2NlbmQKKyAqIHRocm91Z2ggYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUsIGJlbG93 IHdoaWNoIGFueSBmdXJ0aGVyIGpvaW5zIHdvdWxkCisgKiBiZSBwYXJ0aXRpb253aXNlIGpvaW5z IHBsYW5uZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBvdXRlciBqb2luIHByb2JsZW0uCisgKgorICog SWYgam9pbl91bnJvbGxlciAhPSBOVUxMLCB0aGUgam9pbiB1bnJvbGxlciBjb2RlIGV4cGVjdHMg dXMgdG8gZmluZCBhIGpvaW4KKyAqIHRoYXQgc2hvdWxkIGJlIHVucm9sbGVkIGludG8gdGhhdCBv YmplY3QuIFRoaXMgaW1wbGllcyB0aGF0IHdlJ3JlIHdpdGhpbiBhCisgKiBqb2luIHByb2JsZW0s IGJ1dCB0aGUgcmV2ZXJzZSBpcyBub3QgdHJ1ZTogd2hlbiB3ZSd2ZSB0cmF2ZXJzZWQgYWxsIHRo ZQorICogam9pbnMgYnV0IGFyZSBzdGlsbCBsb29raW5nIGZvciB0aGUgc2NhbiB0aGF0IGlzIHRo ZSBsZWFmIG9mIHRoZSBqb2luIHRyZWUsCisgKiBqb2luX3Vucm9sbGVyIHdpbGwgYmUgTlVMTCBi dXQgd2l0aGluX2pvaW5fcHJvYmxlbSB3aWxsIGJlIHRydWUuCisgKgorICogRWFjaCBlbGVtZW50 IG9mIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBjb3JyZXNwb25kcyB0byBzb21lIGl0ZW0gb2YgYWR2 aWNlCisgKiB0aGF0IG5lZWRzIHRvIGVudW1lcmF0ZSBhbGwgdGhlIHJlbGF0aW9ucyBpdCBhZmZl Y3RzLiBXZSBhZGQgUlRJcyB3ZSBmaW5kCisgKiBkdXJpbmcgdHJlZSB0cmF2ZXJzYWwgdG8gZWFj aCBvZiB0aGVzZSBxdWVyeSBmZWF0dXJlcy4KKyAqCisgKiBJZiBiZW5lYXRoX2FueV9nYXRoZXIg PT0gdHJ1ZSwgc29tZSBoaWdoZXIgbGV2ZWwgb2YgdGhlIHRyZWUgdHJhdmVyc2FsIGZvdW5kCisg KiBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf d2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAq cGxhbiwKKwkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCSAgcGdwYV9qb2lu X3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkgIExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0 dXJlcywKKwkJCQkJICBib29sIGJlbmVhdGhfYW55X2dhdGhlcikKK3sKKwlwZ3BhX2pvaW5fdW5y b2xsZXIgKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCXBncGFfam9pbl91bnJvbGxlciAq aW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJYm9vbAkJam9pbl91bnJvbGxlcl90b3BsZXZl bCA9IGZhbHNlOworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKmV4dHJhcGxhbnMgPSBOSUw7 CisJTGlzdAkgICAqZWxpZGVkX25vZGVzID0gTklMOworCisJQXNzZXJ0KHdpdGhpbl9qb2luX3By b2JsZW0gfHwgam9pbl91bnJvbGxlciA9PSBOVUxMKTsKKworCS8qCisJICogQ2hlY2sgdGhlIGZ1 dHVyZV9xdWVyeV9mZWF0dXJlcyBsaXN0IHRvIHNlZSB3aGV0aGVyIHRoaXMgd2FzIHByZXZpb3Vz bHkKKwkgKiBpZGVudGlmaWVkIGFzIGEgcGxhbiBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJlYXRl ZCBhcyBhIHF1ZXJ5IGZlYXR1cmUuCisJICogV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSBoYW5kbGlu ZyBlbGlkZWQgbm9kZXMsIGJlY2F1c2UgaWYgdGhlcmUncyBhbgorCSAqIGVsaWRlZCBub2RlIGFz c29jaWF0ZWQgd2l0aCBhIGZ1dHVyZSBxdWVyeSBmZWF0dXJlLCB0aGUgUlRJcyBhc3NvY2lhdGVk CisJICogd2l0aCB0aGUgZWxpZGVkIG5vZGUgc2hvdWxkIGJlIHRoZSBvbmx5IG9uZXMgYXR0cmli dXRlZCB0byB0aGUgcXVlcnkKKwkgKiBmZWF0dXJlLgorCSAqLworCWZvcmVhY2hfcHRyKHBncGFf cXVlcnlfZmVhdHVyZSwgcWYsIHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJ aWYgKHFmLT5wbGFuID09IHBsYW4pCisJCXsKKwkJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IGxp c3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpOworCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz ID0gbGFwcGVuZChhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHFmKTsKKwkJCXdhbGtlci0+ZnV0dXJl X3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCQlsaXN0X2RlbGV0ZV9wdHIod2Fsa2VyLT5mdXR1cmVfcXVl cnlfZmVhdHVyZXMsIHBsYW4pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIEZpbmQg YWxsIGVsaWRlZCBub2RlcyBmb3IgdGhpcyBQbGFuIG5vZGUuCisJICovCisJZm9yZWFjaF9ub2Rl KEVsaWRlZE5vZGUsIG4sIHdhbGtlci0+cHN0bXQtPmVsaWRlZE5vZGVzKQorCXsKKwkJaWYgKG4t PnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlkZWRfbm9kZXMgPSBs YXBwZW5kKGVsaWRlZF9ub2Rlcywgbik7CisJfQorCisJLyogSWYgd2UgZm91bmQgYW55IGVsaWRl ZF9ub2RlcywgaGFuZGxlIHRoZW0uICovCisJaWYgKGVsaWRlZF9ub2RlcyAhPSBOSUwpCisJewor CQlpbnQJCQludW1fZWxpZGVkX25vZGVzID0gbGlzdF9sZW5ndGgoZWxpZGVkX25vZGVzKTsKKwkJ RWxpZGVkTm9kZSAqbGFzdF9lbGlkZWRfbm9kZTsKKworCQkvKgorCQkgKiBSVElzIGZvciB0aGUg ZmluYWwgLS0gYW5kIHRodXMgbG9naWNhbGx5IHVwcGVybW9zdCAtLSBlbGlkZWQgbm9kZQorCQkg KiBzaG91bGQgYmUgY29sbGVjdGVkIGZvciBxdWVyeSBmZWF0dXJlcyBwYXNzZWQgZG93biBieSB0 aGUgY2FsbGVyLgorCQkgKiBIb3dldmVyLCBlbGlkZWQgbm9kZXMgYWN0IGFzIGJhcnJpZXJzIHRv IHF1ZXJ5IGZlYXR1cmVzLCB3aGljaAorCQkgKiBtZWFucyB0aGF0ICgxKSB0aGUgcmVtYWluaW5n IGVsaWRlZCBub2RlcywgaWYgYW55LCBzaG91bGQgYmUKKwkJICogaWdub3JlZCBmb3IgcHVycG9z ZXMgb2YgcXVlcnkgZmVhdHVyZXMgYW5kICgyKSB0aGUgbGlzdCBvZiBhY3RpdmUKKwkJICogcXVl cnkgZmVhdHVyZXMgc2hvdWxkIGJlIHJlc2V0IHRvIGVtcHR5IHNvIHRoYXQgd2UgZG8gbm90IGFk ZCBSVElzCisJCSAqIGZyb20gdGhlIHBsYW4gbm9kZSB0aGF0IGlzIGxvZ2ljYWxseSBiZW5lYXRo IHRoZSBlbGlkZWQgbm9kZSB0byB0aGUKKwkJICogcXVlcnkgZmVhdHVyZXMgcGFzc2VkIGRvd24g ZnJvbSB0aGUgY2FsbGVyLgorCQkgKi8KKwkJbGFzdF9lbGlkZWRfbm9kZSA9IGxpc3RfbnRoKGVs aWRlZF9ub2RlcywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCQlwZ3BhX3FmX2FkZF9ydGlzKGFj dGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMo bGFzdF9lbGlkZWRfbm9kZS0+cmVsaWRzLAorCQkJCQkJCQkJCQkJCSB3YWxrZXItPnBzdG10LT5y dGFibGUpKTsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gTklMOworCisJCS8qCisJCSAqIElm IHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJvYmxlbSwgdGhlIGpvaW5fdW5yb2xsZXIgaXMgcmVzcG9u c2libGUKKwkJICogZm9yIGJ1aWxkaW5nIHRoZSBzY2FuIGZvciB0aGUgZmluYWwgZWxpZGVkIG5v ZGUsIHNvIHRocm93IGl0IG91dC4KKwkJICovCisJCWlmICh3aXRoaW5fam9pbl9wcm9ibGVtKQor CQkJZWxpZGVkX25vZGVzID0gbGlzdF90cnVuY2F0ZShlbGlkZWRfbm9kZXMsIG51bV9lbGlkZWRf bm9kZXMgLSAxKTsKKworCQkvKiBCdWlsZCBzY2FucyBmb3IgYWxsIChvciB0aGUgcmVtYWluaW5n KSBlbGlkZWQgbm9kZXMuICovCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBlbGlkZWRfbm9k ZSwgZWxpZGVkX25vZGVzKQorCQl7CisJCQkodm9pZCkgcGdwYV9idWlsZF9zY2FuKHdhbGtlciwg cGxhbiwgZWxpZGVkX25vZGUsCisJCQkJCQkJCSAgIGJlbmVhdGhfYW55X2dhdGhlciwgd2l0aGlu X2pvaW5fcHJvYmxlbSk7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGVyZSB3ZXJlIGFueSBlbGlk ZWQgbm9kZXMsIHRoZW4gZXZlcnl0aGluZyBiZW5lYXRoIHRob3NlIG5vZGVzCisJCSAqIGlzIG5v dCBwYXJ0IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxlbS4KKwkJICoKKwkJICogSW4gbW9yZSBkZXRh aWwsIGlmIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCB3YXMgZWxpZGVkLCB0aGVuIGEKKwkJICog cGFydGl0aW9ud2lzZSBqb2luIHdhcyBjaG9zZW4gYW5kIG9ubHkgYSBzaW5nbGUgY2hpbGQgc3Vy dml2ZWQ7IGlmCisJCSAqIGEgU3VicXVlcnlTY2FuIHdhcyBlbGlkZWQsIHRoZSBzdWJxdWVyeSB3 YXMgcGxhbm5lZCB3aXRob3V0CisJCSAqIGZsYXR0ZW5pbmcgaXQgaW50byB0aGUgcGFyZW50Lgor CQkgKi8KKwkJd2l0aGluX2pvaW5fcHJvYmxlbSA9IGZhbHNlOworCQlqb2luX3Vucm9sbGVyID0g TlVMTDsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IG5vZGUsIGRpcmVjdGx5IGFkZCBpdCB0byB0aGUgbGlzdAorCSAqIG9mIGN1cnJlbnRseS1hY3Rp dmUgcXVlcnkgZmVhdHVyZXMuIFdlIG11c3QgZG8gdGhpcyBhZnRlciBoYW5kbGluZworCSAqIGVs aWRlZCBub2Rlcywgc2luY2UgdGhlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBvY2N1cnMg bG9naWNhbGx5CisJICogYmVuZWF0aCBhbnkgYXNzb2NpYXRlZCBlbGlkZWQgbm9kZXMuCisJICoK KwkgKiBFeGNlcHRpb246IFdlIGRpc3JlZ2FyZCBhbnkgc2luZ2xlX2NvcHkgR2F0aGVyIG5vZGVz LiBUaGVzZSBhcmUgY3JlYXRlZAorCSAqIGJ5IGRlYnVnX3BhcmFsbGVsX3F1ZXJ5LCBhbmQgaGF2 aW5nIHRoZW0gYWZmZWN0IHRoZSBwbGFuIGFkdmljZSBpcworCSAqIGNvdW50ZXJwcm9kdWN0aXZl LCBhcyB0aGUgcmVzdWx0IHdpbGwgYmUgdG8gYWR2aXNlIHRoZSB1c2Ugb2YgYSByZWFsCisJICog R2F0aGVyIG5vZGUsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGNvcHkgb25lLgorCSAqLworCWlmIChJ c0EocGxhbiwgR2F0aGVyKSAmJiAhKChHYXRoZXIgKikgcGxhbiktPnNpbmdsZV9jb3B5KQorCXsK KwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxhcHBlbmQobGlzdF9jb3B5KGFjdGl2ZV9x dWVyeV9mZWF0dXJlcyksCisJCQkJCXBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfR0FU SEVSLCBwbGFuKSk7CisJCWJlbmVhdGhfYW55X2dhdGhlciA9IHRydWU7CisJfQorCWVsc2UgaWYg KElzQShwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPQor CQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKSwKKwkJCQkJcGdwYV9h ZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVJfTUVSR0UsIHBsYW4pKTsKKwkJYmVuZWF0 aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpv aW4gcHJvYmxlbSwgdGhlIGpvaW4gdW5yb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yCisJICogYnVp bGRpbmcgYW55IHJlcXVpcmVkIHNjYW4gZm9yIHRoaXMgbm9kZS4gSWYgbm90LCB3ZSBkbyBpdCBo ZXJlLgorCSAqLworCWlmICghd2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJKHZvaWQpIHBncGFfYnVp bGRfc2Nhbih3YWxrZXIsIHBsYW4sIE5VTEwsIGJlbmVhdGhfYW55X2dhdGhlciwgZmFsc2UpOwor CisJLyoKKwkgKiBJZiB0aGlzIGpvaW4gbmVlZHMgdG8gdW5yb2xsZWQgYnV0IHRoZXJlJ3Mgbm8g am9pbiB1bnJvbGxlciBhbHJlYWR5CisJICogYXZhaWxhYmxlLCBjcmVhdGUgb25lLgorCSAqLwor CWlmIChqb2luX3Vucm9sbGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHBsYW4pKQorCXsKKwkJ am9pbl91bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwkJam9pbl91bnJv bGxlcl90b3BsZXZlbCA9IHRydWU7CisJCXdpdGhpbl9qb2luX3Byb2JsZW0gPSB0cnVlOworCX0K KworCS8qCisJICogSWYgdGhpcyBqb2luIGlzIHRvIGJlIHVucm9sbGVkLCBwZ3BhX3Vucm9sbF9q b2luKCkgd2lsbCByZXR1cm4gdGhlIGpvaW4KKwkgKiB1bnJvbGxlciBvYmplY3QgdGhhdCBzaG91 bGQgYmUgcGFzc2VkIGRvd24gd2hlbiB3ZSByZWN1cnNlIGludG8gdGhlCisJICogb3V0ZXIgYW5k IGlubmVyIHNpZGVzIG9mIHRoZSBwbGFuLgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyICE9IE5V TEwpCisJCXBncGFfdW5yb2xsX2pvaW4od2Fsa2VyLCBwbGFuLCBiZW5lYXRoX2FueV9nYXRoZXIs IGpvaW5fdW5yb2xsZXIsCisJCQkJCQkgJm91dGVyX2pvaW5fdW5yb2xsZXIsICZpbm5lcl9qb2lu X3Vucm9sbGVyKTsKKworCS8qIEFkZCBSVElzIGZyb20gdGhlIHBsYW4gbm9kZSB0byBhbGwgYWN0 aXZlIHF1ZXJ5IGZlYXR1cmVzLiAqLworCXBncGFfcWZfYWRkX3BsYW5fcnRpcyhhY3RpdmVfcXVl cnlfZmVhdHVyZXMsIHBsYW4sIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisKKwkvKgorCSAqIFJl Y3Vyc2UgaW50byB0aGUgb3V0ZXIgYW5kIGlubmVyIHN1YnRyZWVzLgorCSAqCisJICogQXMgYW4g ZXhjZXB0aW9uLCBpZiB0aGlzIGlzIGEgRm9yZWlnblNjYW4sIGRvbid0IHJlY3Vyc2UuIHBvc3Rn cmVzX2ZkdworCSAqIHNvbWV0aW1lcyBzdG9yZXMgYW4gRVBRIHJlY2hlY2sgcGxhbiBpbiBwbGFu LT5sZWZ0cmVlLCBidXQgdGhhdCdzIGdvaW5nCisJICogdG8gbWVudGlvbiB0aGUgc2FtZSBzZXQg b2YgcmVsYXRpb25zIGFzIHRoZSBGb3JlaWduU2NhbiBpdHNlbGYsIGFuZCB3ZQorCSAqIGhhdmUg bm8gd2F5IHRvIGVtaXQgYWR2aWNlIHRhcmdldGluZyB0aGUgRVBRIGNhc2UgdnMuIHRoZSBub24t RVBRIGNhc2UuCisJICogTW9yZW92ZXIsIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyIHdoYXQgb3Ro ZXIgRkRXcyBtaWdodCBkbyB3aXRoIHRoZQorCSAqIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzLiBN YXliZSBzb21lIGJldHRlciBoYW5kbGluZyBpcyBuZWVkZWQgaGVyZSwgYnV0CisJICogZm9yIG5v dywgd2UganVzdCBwdW50LgorCSAqLworCWlmICghSXNBKHBsYW4sIEZvcmVpZ25TY2FuKSkKKwl7 CisJCWlmIChwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5 KHdhbGtlciwgcGxhbi0+bGVmdHRyZWUsIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAg b3V0ZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJl bmVhdGhfYW55X2dhdGhlcik7CisJCWlmIChwbGFuLT5yaWdodHRyZWUgIT0gTlVMTCkKKwkJCXBn cGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4tPnJpZ2h0dHJlZSwgd2l0aGluX2pvaW5f cHJvYmxlbSwKKwkJCQkJCQkJICBpbm5lcl9qb2luX3Vucm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVh dHVyZXMsCisJCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9CisKKwkvKgorCSAqIElm IHdlIGNyZWF0ZWQgYSBqb2luIHVucm9sbGVyIHVwIGFib3ZlLCB0aGVuIGl0J3MgYWxzbyBvdXIg am9pbiB0byB1c2UKKwkgKiBpdCB0byBidWlsZCB0aGUgZmluYWwgcGdwYV91bnJvbGxlZF9qb2lu LCBhbmQgdG8gZGVzdHJveSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyX3Rv cGxldmVsKQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9pbjsKKworCQl1am9pbiA9IHBn cGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsIGpvaW5fdW5yb2xsZXIpOworCQl3YWxrZXIt PnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zID0KKwkJCWxhcHBlbmQod2Fsa2VyLT50b3BsZXZlbF91 bnJvbGxlZF9qb2lucywgdWpvaW4pOworCQlwZ3BhX2Rlc3Ryb3lfam9pbl91bnJvbGxlcihqb2lu X3Vucm9sbGVyKTsKKwkJKHZvaWQpIHBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHdhbGtlciwg dWpvaW4pOworCX0KKworCS8qCisJICogU29tZSBwbGFuIHR5cGVzIGNhbiBoYXZlIGFkZGl0aW9u YWwgY2hpbGRyZW4uIE5vZGVzIGxpa2UgQXBwZW5kIHRoYXQKKwkgKiBjYW4gaGF2ZSBhbnkgbnVt YmVyIG9mIGNoaWxkcmVuIHN0b3JlIHRoZW0gaW4gYSBMaXN0OyBhIFN1YnF1ZXJ5U2NhbgorCSAq IGp1c3QgaGFzIGEgZmllbGQgZm9yIGEgc2luZ2xlIGFkZGl0aW9uYWwgUGxhbi4KKwkgKi8KKwlz d2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJeworCQkJCUFw cGVuZAkgICAqYXBsYW4gPSAoQXBwZW5kICopIHBsYW47CisKKwkJCQlleHRyYXBsYW5zID0gYXBs YW4tPmFwcGVuZHBsYW5zOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZDoK KwkJCXsKKwkJCQlNZXJnZUFwcGVuZCAqbWFwbGFuID0gKE1lcmdlQXBwZW5kICopIHBsYW47CisK KwkJCQlleHRyYXBsYW5zID0gbWFwbGFuLT5tZXJnZXBsYW5zOworCQkJfQorCQkJYnJlYWs7CisJ CWNhc2UgVF9CaXRtYXBBbmQ6CisJCQlleHRyYXBsYW5zID0gKChCaXRtYXBBbmQgKikgcGxhbikt PmJpdG1hcHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBPcjoKKwkJCWV4dHJhcGxh bnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwkJCWJyZWFrOworCQljYXNl IFRfU3VicXVlcnlTY2FuOgorCisJCQkvKgorCQkJICogV2UgZG9uJ3QgcGFzcyBkb3duIGFjdGl2 ZV9xdWVyeV9mZWF0dXJlcyBhY3Jvc3MgaGVyZSwgYmVjYXVzZQorCQkJICogdGhvc2UgYXJlIHNw ZWNpZmljIHRvIGEgc3VicXVlcnkgbGV2ZWwuCisJCQkgKi8KKwkJCXBncGFfd2Fsa19yZWN1cnNp dmVseSh3YWxrZXIsICgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5zdWJwbGFuLAorCQkJCQkJCQkg IDAsIE5VTEwsIE5JTCwgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwkJCWJyZWFrOworCQljYXNlIFRf Q3VzdG9tU2NhbjoKKwkJCWV4dHJhcGxhbnMgPSAoKEN1c3RvbVNjYW4gKikgcGxhbiktPmN1c3Rv bV9wbGFuczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJLyogSWYg d2UgZm91bmQgYSBsaXN0IG9mIGV4dHJhIGNoaWxkcmVuLCBpdGVyYXRlIG92ZXIgaXQuICovCisJ Zm9yZWFjaChsYywgZXh0cmFwbGFucykKKwl7CisJCVBsYW4JICAgKnN1YnBsYW4gPSBsZmlyc3Qo bGMpOworCisJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHN1YnBsYW4sIDAsIE5VTEws IE5JTCwKKwkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJfQorfQorCisvKgorICogUGVy Zm9ybSBmaW5hbCBwcm9jZXNzaW5nIG9mIGEgbmV3bHktY29uc3RydWN0ZWQgcGdwYV91bnJvbGxl ZF9qb2luLiBUaGlzCisgKiBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBmb3IgdG9wbGV2ZWwgcGdw YV91bnJvbGxlZF9qb2luIG9iamVjdHMsIHNpbmNlIGl0CisgKiByZWN1cnNlcyB0byBzdWItam9p bnMgYXMgbmVlZGVkLgorICoKKyAqIE91ciBnb2FsIGlzIHRvIGFkZCB0aGUgc2V0IG9mIGlubmVy IHJlbGlkcyB0byB0aGUgcmVsZXZhbnQgam9pbl9zdHJhdGVnaWVzCisgKiBsaXN0LCBhbmQgdG8g ZG8gdGhlIHNhbWUgZm9yIGFueSBzdWItam9pbnMuIFRvIHRoYXQgZW5kLCB0aGUgcmV0dXJuIHZh bHVlCisgKiBpcyB0aGUgc2V0IG9mIHJlbGlkcyBmb3VuZCBiZW5lYXRoIHRoZSB0aGUgam9pbiwg YnV0IGl0IGlzIGV4cGVjdGVkIHRoYXQKKyAqIHRoZSB0b3BsZXZlbCBjYWxsZXIgd2lsbCBpZ25v cmUgdGhpcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRf am9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSAgIHBncGFfdW5y b2xsZWRfam9pbiAqdWpvaW4pCit7CisJQml0bWFwc2V0ICAqYWxsX3JlbGlkcyA9IGJtc19jb3B5 KHVqb2luLT5vdXRlci5zY2FuLT5yZWxpZHMpOworCisJLyogSWYgdGhpcyBmYWlscywgd2UgZGlk bid0IHVucm9sbCBwcm9wZXJseS4gKi8KKwlBc3NlcnQodWpvaW4tPm91dGVyLnVucm9sbGVkX2pv aW4gPT0gTlVMTCk7CisKKwlmb3IgKGludCBrID0gMDsgayA8IHVqb2luLT5uaW5uZXI7ICsraykK Kwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZ1am9pbi0+aW5uZXJba107CisJCUJp dG1hcHNldCAgKnJlbGlkczsKKworCQlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwp CisJCQlyZWxpZHMgPSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJCQkJCQkJ CQkJCQltZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQllbHNlCisJCXsKKwkJCUFzc2VydChtZW1i ZXItPnNjYW4gIT0gTlVMTCk7CisJCQlyZWxpZHMgPSBtZW1iZXItPnNjYW4tPnJlbGlkczsKKwkJ fQorCQl3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1t1am9pbi0+c3RyYXRlZ3lba11dID0KKwkJCWxh cHBlbmQod2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSwgcmVsaWRz KTsKKwkJYWxsX3JlbGlkcyA9IGJtc19hZGRfbWVtYmVycyhhbGxfcmVsaWRzLCByZWxpZHMpOwor CX0KKworCXJldHVybiBhbGxfcmVsaWRzOworfQorCisvKgorICogQXJyYW5nZSBmb3IgdGhlIGdp dmVuIHBsYW4gbm9kZSB0byBiZSB0cmVhdGVkIGFzIGEgcXVlcnkgZmVhdHVyZSB3aGVuIHRoZQor ICogdHJlZSB3YWxrIHJlYWNoZXMgaXQuCisgKgorICogTWFrZSBzdXJlIHRvIG9ubHkgdXNlIHRo aXMgZm9yIG5vZGVzIHRoYXQgdGhlIHRyZWUgd2FsayBjYW4ndCBoYXZlIHJlYWNoZWQKKyAqIHll dCEKKyAqLwordm9pZAorcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsCisJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwgUGxhbiAqcGxhbikKK3sK KwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnFmID0gcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIHR5cGUs IHBsYW4pOworCisJd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMgPQorCQlsYXBwZW5kKHdh bGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhl IGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwbGFuIG5vZGUg SUQuCisgKgorICogVGhlIGxhc3QgZWxpZGVkIG5vZGUgaXMgdGhlIG9uZSB0aGF0IHdvdWxkIGhh dmUgYmVlbiB1cHBlcm1vc3QgaW4gdGhlIHBsYW4KKyAqIHRyZWUgaGFkIGl0IG5vdCBiZWVuIHJl bW92ZWQgZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2lnLgorICovCitFbGlkZWROb2RlICoKK3BncGFf bGFzdF9lbGlkZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pCit7CisJRWxp ZGVkTm9kZSAqZWxpZGVkX25vZGUgPSBOVUxMOworCisJZm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUs IG4sIHBzdG10LT5lbGlkZWROb2RlcykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVfaWQgPT0gcGxh bi0+cGxhbl9ub2RlX2lkKQorCQkJZWxpZGVkX25vZGUgPSBuOworCX0KKworCXJldHVybiBlbGlk ZWRfbm9kZTsKK30KKworLyoKKyAqIENlcnRhaW4gcGxhbiBub2RlcyBjYW4gcmVmZXIgdG8gYSBz ZXQgb2YgUlRJcy4gRXh0cmFjdCBhbmQgcmV0dXJuIHRoZSBzZXQuCisgKi8KK0JpdG1hcHNldCAq CitwZ3BhX3JlbGlkcyhQbGFuICpwbGFuKQoreworCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJ cmV0dXJuICgoUmVzdWx0ICopIHBsYW4pLT5yZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4sIEZv cmVpZ25TY2FuKSkKKwkJcmV0dXJuICgoRm9yZWlnblNjYW4gKikgcGxhbiktPmZzX3JlbGlkczsK KwllbHNlIGlmIChJc0EocGxhbiwgQXBwZW5kKSkKKwkJcmV0dXJuICgoQXBwZW5kICopIHBsYW4p LT5hcHByZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4sIE1lcmdlQXBwZW5kKSkKKwkJcmV0dXJu ICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKworCXJldHVybiBOVUxMOworfQor CisvKgorICogRXh0cmFjdCB0aGUgc2Nhbm5lZCBSVEkgZnJvbSBhIHBsYW4gbm9kZS4KKyAqCisg KiBSZXR1cm5zIDAgaWYgdGhlcmUgaXNuJ3Qgb25lLgorICovCitJbmRleAorcGdwYV9zY2FucmVs aWQoUGxhbiAqcGxhbikKK3sKKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRf U2VxU2NhbjoKKwkJY2FzZSBUX1NhbXBsZVNjYW46CisJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoK KwkJY2FzZSBUX1RpZFNjYW46CisJCWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCWNhc2UgVF9TdWJx dWVyeVNjYW46CisJCWNhc2UgVF9GdW5jdGlvblNjYW46CisJCWNhc2UgVF9UYWJsZUZ1bmNTY2Fu OgorCQljYXNlIFRfVmFsdWVzU2NhbjoKKwkJY2FzZSBUX0N0ZVNjYW46CisJCWNhc2UgVF9OYW1l ZFR1cGxlc3RvcmVTY2FuOgorCQljYXNlIFRfV29ya1RhYmxlU2NhbjoKKwkJY2FzZSBUX0ZvcmVp Z25TY2FuOgorCQljYXNlIFRfQ3VzdG9tU2NhbjoKKwkJY2FzZSBUX0luZGV4U2NhbjoKKwkJY2Fz ZSBUX0luZGV4T25seVNjYW46CisJCQlyZXR1cm4gKChTY2FuICopIHBsYW4pLT5zY2FucmVsaWQ7 CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBu ZXcgQml0bWFwc2V0IGNvbnRhaW5pbmcgbm9uLVJURV9KT0lOIG1lbWJlcnMgb2YgJ3JlbGlkcycu CisgKi8KK0JpdG1hcHNldCAqCitwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoQml0bWFwc2V0 ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlCaXRtYXBzZXQg ICpyZXN1bHQgPSBOVUxMOworCisJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRz LCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBy dGFibGUpOworCisJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4pCisJCQlyZXN1bHQgPSBi bXNfYWRkX21lbWJlcihyZXN1bHQsIHJ0aSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIENyZWF0ZSBhIHBncGFfcXVlcnlfZmVhdHVyZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0 IG9mIGFsbCBxdWVyeSBmZWF0dXJlcworICogZm9yIHRoaXMgcGxhbi4KKyAqLworc3RhdGljIHBn cGFfcXVlcnlfZmVhdHVyZSAqCitwZ3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLAorCQkJCSBwZ3BhX3FmX3R5cGUgdHlwZSwgUGxhbiAqcGxhbikKK3sKKwlw Z3BhX3F1ZXJ5X2ZlYXR1cmUgKnFmID0gcGFsbG9jMF9vYmplY3QocGdwYV9xdWVyeV9mZWF0dXJl KTsKKworCXFmLT50eXBlID0gdHlwZTsKKwlxZi0+cGxhbiA9IHBsYW47CisKKwl3YWxrZXItPnF1 ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSA9CisJCWxhcHBlbmQod2Fsa2VyLT5xdWVyeV9mZWF0dXJl c1txZi0+dHlwZV0sIHFmKTsKKworCXJldHVybiBxZjsKK30KKworLyoKKyAqIEFkZCBhIHNpbmds ZSBSVEkgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAqLworc3RhdGljIHZvaWQKK3Bn cGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEluZGV4IHJ0aSkKK3sK Kwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBhY3RpdmVfcXVlcnlfZmVhdHVy ZXMpCisJeworCQlxZi0+cmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocWYtPnJlbGlkcywgcnRpKTsK Kwl9Cit9CisKKy8qCisgKiBBZGQgYSBzZXQgb2YgUlRJcyB0byBlYWNoIGFjdGl2ZSBxdWVyeSBm ZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpcyhMaXN0ICphY3RpdmVf cXVlcnlfZmVhdHVyZXMsIEJpdG1hcHNldCAqcmVsaWRzKQoreworCWZvcmVhY2hfcHRyKHBncGFf cXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5yZWxp ZHMgPSBibXNfYWRkX21lbWJlcnMocWYtPnJlbGlkcywgcmVsaWRzKTsKKwl9Cit9CisKKy8qCisg KiBBZGQgUlRJcyBkaXJlY3RseSBjb250YWluZWQgaW4gYSBwbGFuIG5vZGUgdG8gZWFjaCBhY3Rp dmUgcXVlcnkgZmVhdHVyZSwKKyAqIGJ1dCBmaWx0ZXIgb3V0IGFueSBqb2luIFJUSXMsIHNpbmNl IGFkdmljZSBkb2Vzbid0IG1lbnRpb24gdGhvc2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Fm X2FkZF9wbGFuX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQbGFuICpwbGFuLCBM aXN0ICpydGFibGUpCit7CisJQml0bWFwc2V0ICAqcmVsaWRzOworCUluZGV4CQlydGk7CisKKwlp ZiAoKHJlbGlkcyA9IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJcmVsaWRzID0g cGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgcnRhYmxlKTsKKwkJcGdwYV9xZl9h ZGRfcnRpcyhhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHJlbGlkcyk7CisJfQorCWVsc2UgaWYgKChy dGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkgIT0gMCkKKwkJcGdwYV9xZl9hZGRfcnRpKGFjdGl2 ZV9xdWVyeV9mZWF0dXJlcywgcnRpKTsKK30KKworLyoKKyAqIElmIHdlIGdlbmVyYXRlZCBwbGFu IGFkdmljZSB1c2luZyB0aGUgcHJvdmlkZWQgd2Fsa2VyIG9iamVjdCBhbmQgYXJyYXkKKyAqIG9m IGlkZW50aWZpZXJzLCB3b3VsZCB3ZSBnZW5lcmF0ZSB0aGUgc3BlY2lmaWVkIHRhZy90YXJnZXQg Y29tYmluYXRpb24/CisgKgorICogSWYgeWVzLCB0aGUgcGxhbiBjb25mb3JtcyB0byB0aGUgYWR2 aWNlOyBpZiBubywgaXQgZG9lcyBub3QuIE5vdGUgdGhhdAorICogd2UgaGF2ZSBrbm93IHdheSBv ZiBrbm93aW5nIHdoZXRoZXIgdGhlIHBsYW5uZXIgd2FzIGZvcmNlZCB0byBlbWl0IGEgcGxhbgor ICogdGhhdCBjb25mb3JtZWQgdG8gdGhlIGFkdmljZSBvciBqdXN0IGhhcHBlbmVkIHRvIGRvIHNv LgorICovCitib29sCitwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkgcGdwYV9hZHZpY2VfdGFy Z2V0ICp0YXJnZXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aCh3YWxr ZXItPnBzdG10LT5ydGFibGUpOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwlpZiAo dGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3Vucm9s bGVkX2pvaW4sIHVqb2luLCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCQl7CisJ CQlpZiAocGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHVqb2luLCBydGFibGVfbGVuZ3Ro LAorCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywgdGFyZ2V0LCB0cnVlKSkKKwkJCQlyZXR1 cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAodGFyZ2V0LT50dHlw ZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJSW5kZXgJCXJ0aTsKKworCQlydGkg PSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLCBydF9pZGVu dGlmaWVycywKKwkJCQkJCQkJCQkJICAgJnRhcmdldC0+cmlkKTsKKwkJaWYgKHJ0aSA9PSAwKQor CQkJcmV0dXJuIGZhbHNlOworCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwl9 CisJZWxzZQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJF RF9MSVNUKTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQs IHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCUluZGV4CQlydGk7CisKKwkJCUFzc2VydChjaGls ZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJcnRpID0gcGdw YV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJ CSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgJmNoaWxkX3RhcmdldC0+cmlkKTsK KwkJCWlmIChydGkgPT0gMCkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlyZWxpZHMgPSBibXNfYWRk X21lbWJlcihyZWxpZHMsIHJ0aSk7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHRhZykKKwl7CisJCWNh c2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJCS8qIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBh Ym92ZSAqLworCQkJcGdfdW5yZWFjaGFibGUoKTsKKwkJCWJyZWFrOworCQljYXNlIFBHUEFfVEFH X0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtl ciwKKwkJCQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAorCQkJCQkJCQkJCSByZWxpZHMp ICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIHBncGFf d2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NBTl9GT1JFSUdOLAor CQkJCQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9T Q0FOOgorCQkJeworCQkJCXBncGFfc2NhbiAgKnNjYW47CisKKwkJCQlzY2FuID0gcGdwYV93YWxr ZXJfZmluZF9zY2FuKHdhbGtlciwgUEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSBy ZWxpZHMpOworCQkJCWlmIChzY2FuID09IE5VTEwpCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJ CXJldHVybiBwZ3BhX3dhbGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHRhcmdldC0+aXRh cmdldCwgc2Nhbi0+cGxhbik7CisJCQl9CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJ CXsKKwkJCQlwZ3BhX3NjYW4gICpzY2FuOworCisJCQkJc2NhbiA9IHBncGFfd2Fsa2VyX2ZpbmRf c2Nhbih3YWxrZXIsIFBHUEFfU0NBTl9JTkRFWCwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCQkJ aWYgKHNjYW4gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJcmV0dXJuIHBncGFf d2Fsa2VyX2luZGV4X3RhcmdldF9tYXRjaGVzX3BsYW4odGFyZ2V0LT5pdGFyZ2V0LCBzY2FuLT5w bGFuKTsKKwkJCX0KKwkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NBTl9QQVJUSVRJ T05XSVNFLAorCQkJCQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfU0VR X1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJ CQkgUEdQQV9TQ0FOX1NFUSwKKwkJCQkJCQkJCQkgcmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBH UEFfVEFHX1RJRF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIs CisJCQkJCQkJCQkJIFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsK KwkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNf ZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSLAorCQkJCQkJCQkJCQkJ cmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gcGdwYV93 YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVS X01FUkdFLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9O T05fVU5JUVVFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2Vy LAorCQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsCisJCQkJCQkJCQkJCQly ZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiBwZ3Bh X3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9TRU1J Sk9JTl9VTklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0hBU0hf Sk9JTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJ CQkJCQkJIEpTVFJBVF9IQVNIX0pPSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBH UEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29u dGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklB TElaRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9Q TEFJTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJ CQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJ Y2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9P UF9NQVRFUklBTElaRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTkVT VEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdh bGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCQkJCQkJCQkJ CQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVy biBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9O RVNURURfTE9PUF9QTEFJTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdf Tk9fR0FUSEVSOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcih3YWxr ZXIsIHJlbGlkcyk7CisJfQorCisJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLworCXJldHVybiBm YWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIGluZGV4IHRhcmdldCBtYXRjaCB0aGUgUGxhbj8K KyAqCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB3ZSBrbm93IHRoYXQgaXRhcmdldCBt YW5kYXRlcyBhbiBJbmRleCBTY2FuIG9yCisgKiBJbmRleCBPbmx5IFNjYW4gYW5kIHRoaXMgY29y cmVzcG9uZHMgdG8gdGhlIHR5cGUgb2YgUGxhbi4gSGVyZSwgb3VyIGpvYiBpcworICoganVzdCB0 byBjaGVjayB3aGV0aGVyIGl0J3MgdGhlIHNhbWUgaW5kZXguCisgKi8KK3N0YXRpYyBib29sCitw Z3BhX3dhbGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHBncGFfaW5kZXhfdGFyZ2V0ICpp dGFyZ2V0LCBQbGFuICpwbGFuKQoreworCU9pZAkJCWluZGV4b2lkID0gSW52YWxpZE9pZDsKKwor CS8qIFJldHJpZXZlIHRoZSBpbmRleCBPSUQgZnJvbSB0aGUgcGxhbi4gKi8KKwlpZiAoSXNBKHBs YW4sIEluZGV4U2NhbikpCisJCWluZGV4b2lkID0gKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4 aWQ7CisJZWxzZSBpZiAoSXNBKHBsYW4sIEluZGV4T25seVNjYW4pKQorCQlpbmRleG9pZCA9ICgo SW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhpZDsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCisJLyog Q2hlY2sgd2hldGhlciBzY2hlbWEgbmFtZSBtYXRjaGVzLCBpZiBzcGVjaWZpZWQgaW4gaW5kZXgg dGFyZ2V0LiAqLworCWlmIChpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkKKwl7CisJCU9p ZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4b2lkKTsKKwkJY2hhcgkgICAqcmVs bmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAobnNwb2lkKTsKKworCQlpZiAo c3RyY21wKGl0YXJnZXQtPmluZG5hbWVzcGFjZSwgcmVsbmFtZXNwYWNlKSAhPSAwKQorCQkJcmV0 dXJuIGZhbHNlOworCX0KKworCS8qIENoZWNrIHdoZXRoZXIgcmVsYXRpb24gbmFtZSBtYXRjaGVz LiAqLworCXJldHVybiAoc3RyY21wKGl0YXJnZXQtPmluZG5hbWUsIGdldF9yZWxfbmFtZShpbmRl eG9pZCkpID09IDApOworfQorCisvKgorICogRG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRo ZSBqb2luIG9yZGVyIHNwZWNpZmllZCBieSBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMg Ym9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAq dWpvaW4sCisJCQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lk ZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAq dGFyZ2V0LAorCQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpCit7CisJaW50CQkJbmNoaWxkcmVuID0g bGlzdF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbik7CisKKwlBc3NlcnQodGFyZ2V0LT50dHlwZSA9 PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCisJLyogQXQgdG9wbGV2ZWwsIHdlIGFsbG93 IGEgcHJlZml4IG1hdGNoLiAqLworCWlmICh0b3BsZXZlbCkKKwl7CisJCWlmIChuY2hpbGRyZW4g PiB1am9pbi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJ aWYgKG5jaGlsZHJlbiAhPSB1am9pbi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisKKwkvKiBPdXRlcm1vc3QgcmVsIG11c3QgbWF0Y2guICovCisJaWYgKCFwZ3BhX3dhbGtlcl9q b2luX29yZGVyX21hdGNoZXNfbWVtYmVyKCZ1am9pbi0+b3V0ZXIsCisJCQkJCQkJCQkJCSAgIHJ0 YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkg ICBsaW5pdGlhbCh0YXJnZXQtPmNoaWxkcmVuKSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEVh Y2ggaW5uZXIgcmVsIG11c3QgbWF0Y2guICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCBuY2hpbGRy ZW4gLSAxOyArK24pCisJeworCQlwZ3BhX2FkdmljZV90YXJnZXQgKmNoaWxkX3RhcmdldCA9IGxp c3RfbnRoKHRhcmdldC0+Y2hpbGRyZW4sIG4gKyAxKTsKKworCQlpZiAoIXBncGFfd2Fsa2VyX2pv aW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIoJnVqb2luLT5pbm5lcltuXSwKKwkJCQkJCQkJCQkJCSAg IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJ CQkJCSAgIGNoaWxkX3RhcmdldCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRy dWU7Cit9CisKKy8qCisgKiBEb2VzIG9uZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBtYXRj aCBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9pbl9v cmRlcl9tYXRjaGVzX21lbWJlcihwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkg IEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRl bnRpZmllcnMsCisJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCUJp dG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9 IE5VTEwpCisJeworCQlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJ U1QpCisJCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21h dGNoZXMobWVtYmVyLT51bnJvbGxlZF9qb2luLAorCQkJCQkJCQkJCQkgIHJ0YWJsZV9sZW5ndGgs CisJCQkJCQkJCQkJCSAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgdGFyZ2V0LAorCQkJ CQkJCQkJCQkgIGZhbHNlKTsKKwl9CisKKwlBc3NlcnQobWVtYmVyLT5zY2FuICE9IE5VTEwpOwor CXN3aXRjaCAodGFyZ2V0LT50dHlwZSkKKwl7CisJCWNhc2UgUEdQQV9UQVJHRVRfT1JERVJFRF9M SVNUOgorCQkJLyogQ291bGQgb25seSBtYXRjaCBhbiB1bnJvbGxlZCBqb2luICovCisJCQlyZXR1 cm4gZmFsc2U7CisKKwkJY2FzZSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVDoKKwkJCXsKKwkJ CQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5j aGlsZHJlbikKKwkJCQl7CisJCQkJCUluZGV4CQlydGk7CisKKwkJCQkJcnRpID0gcGdwYV9jb21w dXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCQkJICAg cnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkJCSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJ CQkJCWlmIChydGkgPT0gMCkKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJcmVsaWRzID0gYm1z X2FkZF9tZW1iZXIocmVsaWRzLCBydGkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQlj YXNlIFBHUEFfVEFSR0VUX0lERU5USUZJRVI6CisJCQl7CisJCQkJSW5kZXgJCXJ0aTsKKworCQkJ CXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJ CQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkJICAgJnRhcmdldC0+ cmlkKTsKKwkJCQlpZiAocnRpID09IDApCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQlyZWxpZHMg PSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlyZXR1 cm4gYm1zX2VxdWFsKG1lbWJlci0+c2Nhbi0+cmVsaWRzLCByZWxpZHMpOworfQorCisvKgorICog RmluZCB0aGUgc2NhbiB3aGVyZSB0aGUgd2Fsa2VyIHNheXMgdGhhdCB0aGUgZ2l2ZW4gc2NhbiBz dHJhdGVneSBzaG91bGQgYmUKKyAqIHVzZWQgZm9yIHRoZSBnaXZlbiByZWxpZCBzZXQsIGlmIG9u ZSBleGlzdHMuCisgKgorICogUmV0dXJucyB0aGUgcGdwYV9zY2FuIG9iamVjdCwgb3IgTlVMTCBp ZiBub25lIHdhcyBmb3VuZC4KKyAqLworc3RhdGljIHBncGFfc2NhbiAqCitwZ3BhX3dhbGtlcl9m aW5kX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCSAgcGdwYV9z Y2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxp c3QJICAgKnNjYW5zID0gd2Fsa2VyLT5zY2Fuc1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihw Z3BhX3NjYW4sIHNjYW4sIHNjYW5zKQorCXsKKwkJaWYgKGJtc19lcXVhbChzY2FuLT5yZWxpZHMs IHJlbGlkcykpCisJCQlyZXR1cm4gc2NhbjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoK KyAqIERvZXMgdGhpcyB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHF1ZXJ5IGZlYXR1cmUgYXBw bGllcyB0byB0aGUgZ2l2ZW4KKyAqIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFf d2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs CisJCQkJCQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlkcykK K3sKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlcyA9IHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdHlw ZV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9mZWF0dXJl cykKKwl7CisJCWlmIChibXNfZXF1YWwocWYtPnJlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiB0 cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtlciBz YXkgdGhhdCB0aGUgZ2l2ZW4gam9pbiBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisg KiBnaXZlbiByZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWlu c19qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX2pv aW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxp c3QJICAgKmpvaW5fc3RyYXRlZ2llcyA9IHdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3N0cmF0ZWd5 XTsKKworCWZvcmVhY2hfcHRyKEJpdG1hcHNldCwganNyZWxpZHMsIGpvaW5fc3RyYXRlZ2llcykK Kwl7CisJCWlmIChibXNfZXF1YWwoanNyZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRo YXQgdGhlIGdpdmVuIHJlbGlkcyBzaG91bGQgYmUgbWFya2VkIGFzIE5PX0dBVEhFUj8KKyAqLwor c3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwly ZXR1cm4gYm1zX2lzX3N1YnNldChyZWxpZHMsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYjM3ZTIwOWRjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIHBncGFfd2Fsa2VyLmgKKyAqCSAgTWFpbiBlbnRyeXBvaW50cyBmb3Ig YW5hbHl6aW5nIGEgcGxhbiB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1dBTEtFUl9ICisjZGVmaW5lIFBHUEFf V0FMS0VSX0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9qb2luLmgi CisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgYWR2aWNl LCB3ZSBzaG91bGQgZW1pdCBlaXRoZXIgU0VNSUpPSU5fVU5JUVVFIGFkdmljZSBvcgorICogU0VN SUpPSU5fTk9OX1VOSVFVRSBhZHZpY2UgZm9yIGVhY2ggc2VtaWpvaW4gZGVwZW5kaW5nIG9uIHdo ZXRoZXIgd2UgY2hvc2UKKyAqIHRvIGltcGxlbWVudCBpdCBhcyBhIHNlbWlqb2luIG9yIHdoZXRo ZXIgd2UgaW5zdGVhZCBjaG9zZSB0byBtYWtlIHRoZQorICogbnVsbGFibGUgc2lkZSB1bmlxdWUg YW5kIHRoZW4gcGVyZm9ybSBhbiBpbm5lciBqb2luLiBXaGVuIHRoZSBtYWtlLXVuaXF1ZQorICog c3RyYXRlZ3kgaXMgbm90IGNob3NlbiwgaXQncyBub3QgZWFzeSB0byB0ZWxsIGZyb20gdGhlIGZp bmFsIHBsYW4gdHJlZQorICogd2hldGhlciBpdCB3YXMgY29uc2lkZXJlZC4gVGhhdCdzIGF3a3dh cmQsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgKiB1c2VsZXNzIFNFTUlKT0lOX05P Tl9VTklRVUUgYWR2aWNlIHdoZW4gdGhlcmUgd2FzIG5vIGRlY2lzaW9uIHRvIGJlIG1hZGUuCisg KgorICogVG8gYXZvaWQgdGhhdCwgZHVyaW5nIHBsYW5uaW5nLCB3ZSBjcmVhdGUgYSBwZ3BhX3Nq X3VuaXF1ZV9yZWwgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHRoYXQgd2UgY29uc2lkZXJlZCBtYWtp bmcgdW5pcXVlIGZvciBwdXJwb3NlcyBvZiBzZW1pam9pbiBwbGFubmluZy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9zal91bmlxdWVfcmVsCit7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUJp dG1hcHNldCAgKnJlbGlkczsKK30gcGdwYV9zal91bmlxdWVfcmVsOworCisvKgorICogV2UgdXNl IHRoZSB0ZXJtICJxdWVyeSBmZWF0dXJlIiB0byByZWZlciB0byBwbGFuIG5vZGVzIHRoYXQgYXJl IGludGVyZXN0aW5nCisgKiBpbiB0aGUgZm9sbG93aW5nIHdheTogdG8gZ2VuZXJhdGUgYWR2aWNl LCB3ZSdsbCBuZWVkIHRvIGtub3cgdGhlIHNldCBvZgorICogc2FtZS1zdWJxdWVyeSwgbm9uLWpv aW4gUlRJcyBvY2N1cmluZyBhdCBvciBiZWxvdyB0aGF0IHBsYW4gbm9kZSwgd2l0aG91dAorICog YWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQgUlRJcy4KKyAqCisgKiBGb3IgZXhhbXBsZSwg R2F0aGVyIG5vZGVzLCBkZXNpZ2luYXRlZCBieSBQR1BBUUZfR0FUSEVSLCBhbmQgR2F0aGVyIE1l cmdlCisgKiBub2RlcywgZGVzaWduYXRlZCBieSBQR1BBUUZfR0FUSEVSX01FUkdFLCBhcmUgcXVl cnkgZmVhdHVyZXMsIGJlY2F1c2Ugd2UnbGwKKyAqIHdhbnQgdG8gYWRtaXQgc29tZSBraW5kIG9m IGFkdmljZSB0aGF0IGRlc2NyaWJlcyB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJlZSB0 aGF0IGFwcGVhcnMgYmVuZWF0aCB0aG9zZSBub2Rlcy4KKyAqCisgKiBFYWNoIHNlbWlqb2luIGNh biBiZSBpbXBsZW1lbnRlZCBlaXRoZXIgYnkgZGlyZWN0bHkgcGVyZm9ybWluZyBhIHNlbWlqb2lu LAorICogb3IgYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBwZXJmb3JtaW5nIGEg bm9ybWFsIGpvaW4uIEVpdGhlciB3YXksCisgKiB3ZSB1c2UgYSBxdWVyeSBmZWF0dXJlIHRvIG5v dGljZSB3aGF0IGRlY2lzaW9uIHdhcyBtYWRlLCBzbyB0aGF0IHdlIGNhbgorICogZGVzY3JpYmUg aXQgYnkgZW51bWVyYXRpbmcgdGhlIFJUSXMgb24gdGhhdCBzaWRlIG9mIHRoZSBqb2luLgorICoK KyAqIFRvIGVsYWJvcmF0ZSBvbiB0aGUgIm5vIGFkbWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxk IFJUSXMiIHJ1bGUsIGluIGFsbCBvZgorICogdGhlc2UgY2FzZXMsIGlmIHRoZSBlbnRpcmV0eSBv ZiBhbiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgYXBwZWFycyBiZW5lYXRoCisgKiB0aGUgcXVlcnkg ZmVhdHVyZSwgd2Ugb25seSB3YW50IHRvIG5hbWUgdGhlIHBhcmVudCB0YWJsZS4gQnV0IGl0J3Mg YWxzbworICogcG9zc2libGUgdG8gaGF2ZSBjYXNlcyB3aGVyZSB3ZSBtdXN0IG5hbWUgY2hpbGQg dGFibGVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseQorICogbGlrZWx5IHRvIGhhcHBlbiB3aGVuIHBh cnRpdGlvbndpc2Ugam9pbiBpcyBpbiB1c2UsIGJ1dCBjb3VsZCBoYXBwZW4gZm9yCisgKiBHYXRo ZXIgb3IgR2F0aGVyIE1lcmdlIGV2ZW4gd2l0aG91dCB0aGF0LCBpZiBvbmUgb2YgdGhvc2UgYXBw ZWFycyBiZWxvdworICogYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgZm9yIGEgc2luZ2xl IHRhYmxlLgorICovCit0eXBlZGVmIGVudW0gcGdwYV9xZl90eXBlCit7CisJUEdQQVFGX0dBVEhF UiwKKwlQR1BBUUZfR0FUSEVSX01FUkdFLAorCVBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLAor CVBHUEFRRl9TRU1JSk9JTl9VTklRVUUKKwkvKiB1cGRhdGUgTlVNX1BHUEFfUUZfVFlQRVMgaWYg eW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBncGFfcWZfdHlwZTsKKworI2RlZmluZSBOVU1f UEdQQV9RRl9UWVBFUyAoKGludCkgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSArIDEpCisKKy8qCisg KiBGb3IgZWFjaCBxdWVyeSBmZWF0dXJlLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBmZWF0dXJlIHR5 cGUgYW5kIHRoZSBzZXQgb2YKKyAqIHJlbGlkcyB0aGF0IHdlIGZvdW5kIHVuZGVybmVhdGggdGhl IHJlbGV2YW50IHBsYW4gbm9kZS4gU2VlIHRoZSBjb21tZW50cworICogb24gcGdwYV9xZl90eXBl LCBhYm92ZSwgZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdw YV9xdWVyeV9mZWF0dXJlCit7CisJcGdwYV9xZl90eXBlIHR5cGU7CisJUGxhbgkgICAqcGxhbjsK KwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfcXVlcnlfZmVhdHVyZTsKKworLyoKKyAqIENv bnRleHQgb2JqZWN0IGZvciBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBwc3RtdCBpcyB0aGUgUGxh bm5lZFN0bXQgd2UncmUgc3R1ZHlpbmcuCisgKgorICogc2NhbnMgaXMgYW4gYXJyYXkgb2YgbGlz dHMgb2YgcGdwYV9zY2FuIG9iamVjdHMuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiB0aGUg c2NhbidzIHBncGFfc2Nhbl9zdHJhdGVneS4KKyAqCisgKiBub19nYXRoZXJfc2NhbnMgaXMgdGhl IHNldCBvZiBzY2FuIFJUSXMgdGhhdCBkbyBub3QgYXBwZWFyIGJlbmVhdGggYW55CisgKiBHYXRo ZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICogdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMg aXMgYSBsaXN0IG9mIGFsbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2JqZWN0cyB0aGF0CisgKiBhcmUg bm90IGEgY2hpbGQgb2Ygc29tZSBvdGhlciBwZ3BhX3Vucm9sbGVkX2pvaW4uCisgKgorICogam9p bl9zdHJhdGVneSBpcyBhbiBhcnJheSBvZiBsaXN0cyBvZiBCaXRtYXBzZXQgb2JqZWN0cy4gRWFj aCBCaXRtYXBzZXQKKyAqIGlzIHRoZSBzZXQgb2YgcmVsaWRzIHRoYXQgYXBwZWFycyBvbiB0aGUg aW5uZXIgc2lkZSBvZiBzb21lIGpvaW4gKGV4Y2x1ZGluZworICogUlRJcyBmcm9tIHBhcnRpdGlv biBjaGlsZHJlbiBhbmQgc3VicXVlcmllcykuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiBw Z3BhX2pvaW5fc3RyYXRlZ3kuCisgKgorICogcXVlcnlfZmVhdHVyZXMgaXMgYW4gYXJyYXkgbGlz dHMgb2YgcGdwYV9xdWVyeV9mZWF0dXJlIG9iamVjdHMsIGluZGV4ZWQKKyAqIGJ5IHBncGFfcWZf dHlwZS4KKyAqCisgKiBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgaXMgb25seSB1c2VkIGR1cmluZyB0 aGUgcGxhbiB0cmVlIHdhbGsgYW5kIHNob3VsZAorICogYmUgZW1wdHkgd2hlbiB0aGUgdHJlZSB3 YWxrIGNvbmNsdWRlcy4gSXQgaXMgYSBsaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVyZQorICogb2Jq ZWN0cyBmb3IgUGxhbiBub2RlcyB0aGF0IHRoZSBwbGFuIHRyZWUgd2FsayBoYXMgbm90IHlldCBl bmNvdW50ZXJlZDsKKyAqIHdoZW4gZW5jb3VudGVyZWQsIHRoZXkgd2lsbCBiZSBtb3ZlZCB0byB0 aGUgbGlzdCBvZiBhY3RpdmUgcXVlcnkgZmVhdHVyZXMKKyAqIHRoYXQgaXMgcHJvcGFnYXRlZCB2 aWEgdGhlIGNhbGwgc3RhY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJf Y29udGV4dAoreworCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlMaXN0CSAgICpzY2Fuc1tOVU1fUEdQ QV9TQ0FOX1NUUkFURUdZXTsKKwlCaXRtYXBzZXQgICpub19nYXRoZXJfc2NhbnM7CisJTGlzdAkg ICAqdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnM7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzW05V TV9QR1BBX0pPSU5fU1RSQVRFR1ldOworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzW05VTV9QR1BB X1FGX1RZUEVTXTsKKwlMaXN0CSAgICpmdXR1cmVfcXVlcnlfZmVhdHVyZXM7Cit9IHBncGFfcGxh bl93YWxrZXJfY29udGV4dDsKKworZXh0ZXJuIHZvaWQgcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10LAor CQkJCQkJCSBMaXN0ICpzal91bmlxdWVfcmVscyk7CisKK2V4dGVybiB2b2lkIHBncGFfYWRkX2Z1 dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJ cGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQlQbGFuICpwbGFuKTsKKworZXh0ZXJuIEVsaWRl ZE5vZGUgKnBncGFfbGFzdF9lbGlkZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBs YW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9yZWxpZHMoUGxhbiAqcGxhbik7CitleHRlcm4g SW5kZXggcGdwYV9zY2FucmVsaWQoUGxhbiAqcGxhbik7CitleHRlcm4gQml0bWFwc2V0ICpwZ3Bh X2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7 CisKK2V4dGVybiBib29sIHBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZp ZXJzLAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCQkJCSBwZ3Bh X2FkdmljZV90YXJnZXQgKnRhcmdldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L2dhdGhlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc3NjY2 NmJmMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0 aGVyLnNxbApAQCAtMCwwICsxLDg2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29z dCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3Rh YmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKK0NS RUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChkaW0p IFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIGd0X2RpbTsKKworQ1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBu b3QgbnVsbCwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQp CispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2Zh Y3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsK K1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CisKKy0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRo ZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhl ciBNZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgc2VwYXJh dGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24uCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYg ZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0 X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4g Z3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZCBkL2QuZCkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2Ug YSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxp c20gb24gb3RoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Z2F0aGVyX21lcmdlKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnZ2F0aGVyKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIG5vIEdhdGhlciBv ciBHYXRoZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIEdhdGhl ciBNZXJnZSB3aXRob3V0IHRoZSBPUkRFUiBCWSBjbGF1c2UsIGJ1dCBqdXN0IEdhdGhlciBpcyBP Sy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVy Z2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gVGVzdCBjb25mbGljdGluZyBh ZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVy KChmIGQpKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvam9pbl9vcmRlci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2lu X29yZGVyLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWUxNmU1 NGVmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2lu X29yZGVyLnNxbApAQCAtMCwwICsxLDE0NSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VU IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgam9f ZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwg ZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMp ICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBq b19kaW0xOworQ1JFQVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRp bTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gam9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZp bGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTI7CisKK0NSRUFURSBUQUJMRSBqb19mYWN0 ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVy ZW5jZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2Vz IGpvX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNF UlQgSU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsxIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZmFjdDsKKworLS0g V2UgZXhwZWN0IHRvIGpvaW4gdG8gZDIgZmlyc3QgYW5kIHRoZW4gZDEsIHNpbmNlIHRoZSBjb25k aXRpb24gb24gZDIKKy0tIGlzIG1vcmUgc2VsZWN0aXZlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYSBm ZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9mIHRoZXNlIGFyZSB2ZXJ5IGluZWZmaWNp ZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVycyB0aGVtIGFsbCB2aWFibGUuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQxIGQy KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19m YWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5E IHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVy KGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pv aW5fb3JkZXIoZDEgZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiB7ZDEgZDJ9KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9f ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYu ZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOwor CistLSBGb3JjZSBhIGpvaW4gb3JkZXIgYnkgbWVudGlvbmluZyBqdXN0IGEgcHJlZml4IG9mIHRo ZSBqb2luIGxpc3QuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn am9pbl9vcmRlcihkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0g ZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJF IHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0x X2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAor CVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0gam9fZmFjdCBpcyBu b3QgcGFydGl0aW9uZWQsIGJ1dCBsZXQncyB0cnkgcHJldGVuZGluZyB0aGF0IGl0IGlzIGFuZAor LS0gdmVyaWZ5aW5nIHRoYXQgdGhlIGFkdmljZSBkb2VzIG5vdCBhcHBseS4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgZDEgZDIpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3Qg ZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lO IGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFs MiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9k MSAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCistLSBUaGUgdW51c3VhbCBmb3JtdWxhdGlv biBvZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZlbnQgdGhlIHF1ZXJ5CistLSBwbGFu bmVyIGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBzb21lIG90aGVyIGpvaW4gdHlwZSwg c28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5zIHdpdGggYSBqb2luIHR5cGUgdGhh dCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0g Zi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworCistLSBXZSBzaG91bGQgbm90IGJlIGFi bGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBiZWNhdXNlCist LSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0 byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUgZHJpdmlu ZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2lu X29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGlt MV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZV TEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEu aWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpv X2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAw KQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworQ09NTUlUOwor CistLSBUd28gaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzIHNob3VsZCBjb25mbGljdC4gSW4gdGhl IHNlY29uZCBjYXNlLAorLS0gdGhlIGNvbmZsaWN0IGlzIGltcGxpY2l0OiBpZiBkMSBpcyBvbiB0 aGUgaW5uZXIgc2lkZSBvZiBhIGpvaW4gb2YgYW55CistLSB0eXBlLCBpdCBjYW5ub3QgYWxzbyBi ZSB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdqb2luX29yZGVyKGYpIGpvaW5fb3JkZXIoZDEpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChq b19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsg MCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSkgaGFzaF9qb2luKGQxKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0x IGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lk IElTIE5VTEw7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9qb2luX3N0cmF0ZWd5LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3Ry YXRlZ3kuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZGQ1YzRj MGUxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5f c3RyYXRlZ3kuc3FsCkBAIC0wLDAgKzEsODQgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NF VCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGpv aW5fZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZGltIChkaW0pIFNFTEVDVCBy YW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFM WVpFIGpvaW5fZGltOworCitDUkVBVEUgVEFCTEUgam9pbl9mYWN0ICgKKwlpZCBpbnQgcHJpbWFy eSBrZXksCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb2luX2RpbSAoaWQp CispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5f ZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBn OworQ1JFQVRFIElOREVYIGpvaW5fZmFjdF9kaW1faWQgT04gam9pbl9mYWN0IChkaW1faWQpOwor VkFDVVVNIEFOQUxZWkUgam9pbl9mYWN0OworCistLSBXZSBleHBlY3QgYSBoYXNoIGpvaW4gYnkg ZGVmYXVsdC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworCistLSBU cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBhcyB0aGUg aW5uZXIgdGFibGUuCistLSBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZvciBNRVJH RV9KT0lOX01BVEVSSUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhlIHBsYW5u ZXIga25vd3MgdGhhdCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0tIHJlZnVz ZSB0byBhZGQgbWFyay9yZXN0b3JlIG92ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVS R0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9Q TEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZCknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4g am9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBOb3cgdHJ5IGZvcmNpbmcgZWFjaCBqb2lu IG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5lcgorLS0gdGFibGUuIEFs bCBvZiB0aGVzZSBzaG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdIQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5f TUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdORVNURURfTE9PUF9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKK0NPTU1JVDsKKworLS0gTm9uLXdvcmtpbmcgY2FzZXMuIFdlIGNhbid0IGZvcmNl IGEgZm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVzLAorLS0gYmVjYXVzZSB0aGV5IGFy ZW4ndCBmb3JlaWduIHRhYmxlcy4gV2UgYWxzbyBjYW4ndCB1c2UgdHdvIGRpZmZlcmVudAorLS0g c3RyYXRlZ2llcyBvbiB0aGUgc2FtZSB0YWJsZSwgbm9yIGNhbiB3ZSBwdXQgYm90aCB0YWJsZXMg b24gdGhlIGlubmVyCistLSBzaWRlIG9mIHRoZSBzYW1lIGpvaW4uCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZikgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUo ZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpv aW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYgZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMzIyNWRkOTkwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsCkBAIC0wLDAgKzEsNDYg QEAKK0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxf cXVlcnkgPSBvZmY7CisKKy0tIFRyeSBjbGVhcmluZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxl Y3RlZCBhbnkuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworCist LSBTZXQgYSBzbWFsbCBhZHZpY2UgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2Vl ZCBpdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKwor LS0gRW5hYmxlIHRoZSBjb2xsZWN0b3IuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVj dG9yID0gb247CisKKy0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15 X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4K K1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZS T00gZHVtbXlfdGFibGU7CisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBz ZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBv ZmY7CitTRUxFQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBP UkRFUiBCWSBpZCBERVNDIExJTUlUIDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFn YWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFp c2UgdGhlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlw bGUgY2h1bmtzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAy MDAwOworU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOworCistLSBQdXNo IGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4K KwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90 YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0 b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9h ZHZpY2UoKTsKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRo aXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIg b2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNTE0NTZkYmJiNQotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCkBAIC0wLDAg KzEsOTkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gdHJ1ZTsK KworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2 YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDFhIFBB UlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQQVJUSVRJT04gT0Yg cHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWMgUEFSVElUSU9OIE9GIHB0MSBGT1Ig VkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdz b21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MTsKKworQ1JFQVRFIFRBQkxFIHB0MiAo aWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZB TFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAo MTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JF QVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRv ICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRleHQgJyB8fCBn LCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDIpIGc7CitWQUNV VU0gQU5BTFlaRSBwdDI7CisKK0NSRUFURSBUQUJMRSBwdDMgKGlkIGludGVnZXIgcHJpbWFyeSBr ZXksIGRpbTMgdGV4dCwgdmFsMyBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVB VEUgVEFCTEUgcHQzYSBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEw MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0 M2IgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNjIFBBUlRJ VElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDMgKGlkLCBkaW0zLCB2YWwz KQorCVNFTEVDVCBnLCAnYSB0aGlyZCByYW5kb20gdGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJ ICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDAsMykgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MzsK KworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2ggKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbW0g dGV4dCwgdmFsbSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUg cHRtaXNtYXRjaGEgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00g KDEpIHRvICgxNTAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoYiBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMTUwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworSU5TRVJUIElOVE8gcHRtaXNtYXRjaCAoaWQsIGRpbW0sIHZhbG0pCisJU0VMRUNUIGcs ICd5ZXQgYW5vdGhlciB0ZXh0ICcgfHwgZywgKGcgJSAyKSArIDEKKwkgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0bWlzbWF0Y2g7CisKK0VYUExBSU4g KFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hF UkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBB TkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworCistLSBTdXBwcmVzcyBwYXJ0aXRpb253aXNlIGpv aW4sIG9yIGRvIGl0IGp1c3QgcGFydGlhbGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UocHQxIHB0MiBwdDMpJzsKK0VYUExBSU4gKFBM QU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUg cHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQg dmFsMiA9IDEgQU5EIHZhbDMgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQy LmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5E IHZhbDMgPSAxOworQ09NTUlUOworCistLSBUZXN0IGNvbmZsaWN0aW5nIGFkdmljZS4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEg cHQyKSAocHQxIHB0MykpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQg PSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworQ09N TUlUOworCistLSBDYW4ndCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0 Y2hlZCB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQ QVJUSVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBw dG1pc21hdGNoLmlkOworQ09NTUlUOworCistLSBGb3JjZSBqb2luIG9yZGVyIGZvciBhIHBhcnRp Y3VsYXIgYnJhbmNoIG9mIHRoZSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aAorLS0gYW5kIHdpdGhv dXQgbWVudGlvbmluZyB0aGUgc2NoZW1hIG5hbWUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5w dDJhIHB0MS9wdWJsaWMucHQxYSknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0 Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B0M2Eg cHQyL3B0MmEgcHQxL3B0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIu aWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOwor Q09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcHJlcGFyZWQu c3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcHJlcGFyZWQuc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZWMzMGVlZGVlNQotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbApAQCAtMCwwICsxLDM3 IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBwdGFiIChpZCBpbnRlZ2VyLCB2YWwgdGV4dCkg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworCitTRVQgcGdfcGxhbl9hZHZpY2Uu YWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7CisKKy0tIE5vdCBwcmVwYXJlZCwg c28gYWR2aWNlIHNob3VsZCBiZSBnZW5lcmF0ZWQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSAKK1NFTEVDVCAqIEZST00gcHRhYjsKKworLS0gUHJlcGFyZWQsIHNvIGFkdmljZSBz aG91bGQgbm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQxIEFTIFNFTEVDVCAqIEZST00gcHRh YjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNVVEUgcHQxOworCitTRVQg cGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZTsKKworLS0g UHJlcGFyZWQsIGJ1dCBhbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlLCBzbyBzaG91 bGQgc2hvdyBhZHZpY2UuCitQUkVQQVJFIHB0MiBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBFWEVDVVRFIHB0MjsKKworLS0gTm90IHByZXBh cmVkLCBzbyBmZWVkYmFjayBzaG91bGQgYmUgZ2VuZXJhdGVkLgorU0VUIHBnX3BsYW5fYWR2aWNl LmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihwdGFiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIAorU0VMRUNU ICogRlJPTSBwdGFiOworCistLSBQcmVwYXJlZCwgc28gYWR2aWNlIHNob3VsZCBub3QgYmUgZ2Vu ZXJhdGVkLgorUFJFUEFSRSBwdDMgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBFWEVDVVRFIHB0MTsKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9h ZHZpY2VfZGV0YWlscyA9IHRydWU7CisKKy0tIFByZXBhcmVkLCBidXQgYWx3YXlzX3N0b3JlX2Fk dmljZV9kZXRhaWxzID0gdHJ1ZSwgc28gc2hvdWxkIHNob3cgZmVlZGJhY2suCitQUkVQQVJFIHB0 NCBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBFWEVDVVRFIHB0MjsKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv c2Nhbi5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGZjNDk0YzdkOGUKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbApAQCAtMCwwICsxLDE5NSBA QAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXIgPSAwOworU0VUIHNlcV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgcmFuZG9tX3BhZ2VfY29z dCA9IDAuMTsKK1NFVCBjcHVfdHVwbGVfY29zdCA9IDA7CitTRVQgY3B1X2luZGV4X3R1cGxlX2Nv c3QgPSAwOworCitDUkVBVEUgVEFCTEUgc2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIg dGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBz Y2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBzY2FuX3RhYmxlX2IgT04gc2Nhbl90YWJs ZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIHNjYW5fdGFibGU7CisKKy0tIFNlcXVl bnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlOworCistLSBJbmRleCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisKKy0tIEluZGV4 LW9ubHkgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBCaXRtYXAgaGVhcCBzY2FuCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVS RSBiID4gJ3NvbWUgdGV4dCA4JzsKKworLS0gVElEIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEp JzsKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlk IDwgJygyLDEpJzsKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBvZiBvdXIgdGVzdCBxdWVyaWVzIHRv IHVzZSB0aGUgc2NhbiB0eXBlIHRoZXkKKy0tIHdhbnRlZCB0byB1c2UgYW55d2F5LiBUaGlzIHNo b3VsZCBzdWNjZWVkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUK KwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBU cnkgdG8gZm9yY2UgYSBmdWxsIHNjYW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNj YW4gdHlwZS4gQWxsCistLSBvZiB0aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0 bWFwIGhlYXAgc2NhbiBjb3VsZCBwb3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qg YW5zd2VyLCBidXQgdGhlIHBsYW5uZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0g cG9zc2liaWxpdGllcyBkdWUgdG8gdGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxl KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5f dGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZTsKK0NPTU1JVDsKKworLS0gVHJ5IGFnYWluIHRvIGZvcmNlIGluZGV4IHVzZS4g VGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRoZSBJTkRFWF9TQ0FOCistLSBhbmQgQklUTUFQ X0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZX1NDQU4gY2FuJ3QgYmUgZm9yY2VkIGJlY2F1 c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVtbnMgbm90IGluY2x1ZGVkIGluIHRoZSBpbmRl eC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK0NP TU1JVDsKKworLS0gV2UgY2FuIGZvcmNlIGEgcHJpbWFyeSBrZXkgbG9va3VwIHRvIHVzZSBhIHNl cXVlbnRpYWwgc2NhbiwgYnV0IHdlCistLSBjYW4ndCBmb3JjZSBpdCB0byB1c2UgYW4gaW5kZXgt b25seSBzY2FuIChkdWUgdG8gdGhlIGNvbHVtbiBsaXN0KQorLS0gb3IgYSBUSUQgc2NhbiAoZHVl IHRvIHRoZSBhYnNlbmNlIG9mIGEgVElEIHF1YWwpLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK K0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNpYmx5IGRvd25ncmFkZSBhbiBpbmRleC1vbmx5IHNj YW4gdG8gYW4gaW5kZXggc2NhbiwgYnV0IHdlIGNhbid0CistLSBmb3JjZSB0aGUgdXNlIG9mIGFu IGluZGV4IHRoYXQgdGhlIHBsYW5uZXIgdGhpbmtzIGlzIGluYXBwbGljYWJsZS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1J VDsKKworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gaW4gcGxh Y2Ugb2YgYSBiaXRtYXAgaGVhcCBzY2FuLAorLS0gYnV0IGEgcGxhaW4gaW5kZXggc2NhbiBvbiBh IEJSSU4gaW5kZXggaXMgbm90IHBvc3NpYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29t ZSB0ZXh0IDgnOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0t IFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIHJhdGhlciB0aGFuIGEg VElEIHNjYW4gb3IKKy0tIFRJRCByYW5nZSBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0g JygwLDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKK0NP TU1JVDsKKworLS0gVGVzdCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMu CitCRUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4K K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKy0tIEJ1dCBub3QgaWYg d2UgbWVudGlvbiB0aGUgd3Jvbmcgc2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworLS0gSXQncyBPSyB0byByZXBlYXQgdGhlIHNhbWUgYWR2aWNlLgorU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5IHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZlbiBub3Rp b25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0gVGVzdCBhc3NvcnRl ZCBpbmNvcnJlY3QgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKG5vdGhpbmcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05M WV9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0g VGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNh bWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBz IE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMo MSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpP SU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3Rh YmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMu YTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocykgU0VRX1ND QU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0g cy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworQ09NTUlUOwor CistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIHNjYW5zIHdpdGhpbiBhIHN1YnF1ZXJ5 LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBt YXRjaC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVy eSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CistLSBTaG91bGQgbWF0Y2ggc2Vjb25k IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KHNAdW5uYW1lZF9zdWJxdWVyeSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9G RlNFVCAwKSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKK0NP TU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NlbWlqb2luLnNx bCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NlbWlqb2luLnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWE0YWU1MmQxZDkKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwKQEAgLTAsMCArMSwxMTgg QEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIHNqX3dpZGUgKAorCWlkIGludGVnZXIgcHJpbWFy eSBrZXksCisJdmFsMSBpbnRlZ2VyLAorCXBhZGRpbmcgdGV4dCBzdG9yYWdlIHBsYWluCispIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNqX3dpZGUKKwlT RUxFQ1QgZywgZyUxMCsxLCByZXBlYXQoJyAnLCAzMDApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDApIGc7CitDUkVBVEUgSU5ERVggT04gc2pfd2lkZSAodmFsMSk7CitWQUNVVU0gQU5BTFla RSBzal93aWRlOworCitDUkVBVEUgVEFCTEUgc2pfbmFycm93ICgKKwlpZCBpbnRlZ2VyIHByaW1h cnkga2V5LAorCXZhbDEgaW50ZWdlcgorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBzal9uYXJyb3cKKwlTRUxFQ1QgZywgZyUxMCsxIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUgSU5ERVggT04gc2pfbmFycm93ICh2YWwxKTsK K1ZBQ1VVTSBBTkFMWVpFIHNqX25hcnJvdzsKKworLS0gV2UgZXhwZWN0IHRoaXMgdG8gbWFrZSB0 aGUgVkFMVUVTIGxpc3QgdW5pcXVlIGFuZCB1c2UgaW5kZXggbG9va3VwcyB0bworLS0gZmluZCB0 aGUgcm93cyBpbiBzal93aWRlLCBzbyBhcyB0byBhdm9pZCBhIGZ1bGwgc2NhbiBvZiBzal93aWRl LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfd2lk ZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAo NCwgNCksICg1LCA1KSk7CisKKy0tIElmIHdlIGFzayBmb3IgYSB1bmlxdWUgc2VtaWpvaW4sIHdl IHNob3VsZCBnZXQgdGhlIHNhbWUgcGxhbiBhcyB3aXRoCistLSBubyBhZHZpY2UuIElmIHdlIGFz ayBmb3IgYSBub24tdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91bGQgc2VlIGEgU2VtaQorLS0gSm9p biBvcGVyYXRpb24gaW4gdGhlIHBsYW4gdHJlZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChp ZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1 KSk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlx dWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgy LCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CitDT01NSVQ7CisKKy0tIEJlY2F1c2UgdGhp cyB0YWJsZSBpcyBuYXJyb3dlciB0aGFuIHRoZSBwcmV2aW91cyBvbmUsIGEgc2VxdWVudGlhbCBz Y2FuCistLSBpcyBsZXNzIGV4cGVuc2l2ZSwgYW5kIHdlIGNob29zZSBhIHN0cmFpZ2h0Zm9yd2Fy ZCBTZW1pIEpvaW4gcGxhbiBieQorLS0gZGVmYXVsdC4gKE5vdGUgdGhhdCB0aGlzIGlzIGFsc28g dmVyeSBzZW5zaXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgSU4KKy0tIGxpc3QsIHdoaWNoIGFm ZmVjdHMgaG93IG1hbnkgaW5kZXggbG9va3VwcyB0aGUgYWx0ZXJuYXRpdmUgcGxhbiB3aWxsIG5l ZWQuKQorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pf bmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywg MyksICg0LCA0KSwgKDUsIDUpKTsKKworLS0gSGVyZSwgd2UgZXhwZWN0IGFkdmlzaW5nIGEgdW5p cXVlIHNlbWlqb2luIHRvIHN3aXRoIHRvIHRoZSBzYW1lIHBsYW4gdGhhdAorLS0gd2UgZ290IHdp dGggc2pfd2lkZSwgYW5kIGFkdmlzaW5nIGEgbm9uLXVuaXF1ZSBzZW1pam9pbiBzaG91bGQgbm90 IGNoYW5nZQorLS0gdGhlIHBsYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFs MSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoIipW QUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIp LCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKK0NPTU1JVDsKKworLS0gSW4gdGhlIGFib3ZlIGV4 YW1wbGUsIHdlIG1hZGUgdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlLCBidXQgaGVy ZSwKKy0tIHdlIHNob3VsZCBtYWtlIHRoZSBpbm5lciBzaWRlIHVuaXF1ZS4KK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CisKKy0t IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIGEgcGxhbiB3aXRoIG9yIHdpdGhvdXQgdGhlIG1h a2UtdW5pcXVlIHN0cmF0ZWd5LAorLS0gd2l0aCBlaXRoZXIgc2lkZSBhcyB0aGUgZHJpdmluZyB0 YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9p bl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAo c2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkg ZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdykgam9p bl9vcmRlcihzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChz ZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSBqb2luX29yZGVyKHNqX25hcnJv dyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20g c2pfbmFycm93KTsKK0NPTU1JVDsKKworLS0gSG93ZXZlciwgbWVudGlvbmluZyB0aGUgd3Jvbmcg c2lkZSBvZiB0aGUgam9pbiBzaG91bGQgcmVzdWx0IGluIGFuIGFkdmljZQorLS0gZmFpbHVyZS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlx dWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZy b20gc2pfbmFycm93KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpv aW5fbm9uX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2Vs ZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworQ09NTUlUOworCistLSBUZXN0IGNvbmZsaWN0aW5n IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1p am9pbl91bmlxdWUoc2pfbmFycm93KSBzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdyknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFy cm93KTsKK0NPTU1JVDsKKworLS0gVHJ5IGFwcGx5aW5nIFNFTUlKT0lOX1VOSVFVRSgpIHRvIGEg bm9uLXNlbWlqb2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J3NlbWlqb2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnLCBzal9uYXJyb3cgcyBXSEVS RSBnID0gcy52YWwxOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc3ludGF4LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU2YTVkNTRlMmI1Ci0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbApAQCAt MCwwICsxLDY4IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CisKKy0tIEFuIGVtcHR5IHN0cmlu ZyBpcyBhbGxvd2VkLiBFbXB0eSB0YXJnZXQgbGlzdHMgYXJlIGFsbG93ZWQgZm9yIG1vc3QgYWR2 aWNlCistLSB0YWdzLCBidXQgbm90IGZvciBKT0lOX09SREVSLiAiU3VwcGxpZWQgUGxhbiBBZHZp Y2UiIHNob3VsZCBiZSBvbWl0dGVkIGluCistLSB0ZXh0IGZvcm1hdCB3aGVuIHRoZXJlIGlzIG5v IGFjdHVhbCBhZHZpY2UsIGJ1dCBub3QgaW4gbm9uLXRleHQgZm9ybWF0LgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICcnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKSc7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJ TigpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgRk9STUFUIEpTT04pIFNFTEVDVCAxOworU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCknOworCistLSBUZXN0IGFzc29ydGVk IHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24sIHdoaXRlc3BhY2UsIGFuZCB3aGljaCBwYXJ0 cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZpZXIgYXJlIGluY2x1ZGVkLiBUaGVzZSBzaG91 bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHgpJzsK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ3NlcV9zY2FuKHhAeSknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX3NjYW4oeCMyKSc7CitFWFBMQUlOIChDT1NUUyBP RkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTiAoeC95 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICcgIFNFUV9TQ0FOICggeCAvIHkgLiB6ICkgICc7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigieCIjMi8i eSIuInoiQCJ0IiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKworLS0gU3ludGF4 IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRVUVOVElBTF9TQ0FOKHgp JzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4nOworU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTigiJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIiIp JzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oImEiJzsKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJygpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnMTIzJzsKKworLS0gVGFn cyBsaWtlIFNFUV9TQ0FOIGFuZCBOT19HQVRIRVIgZG9uJ3QgYWxsb3cgc3VibGlzdHMgYXQgYWxs OyBvdGhlciB0YWdzLAorLS0gZXhjZXB0IGZvciBKT0lOX09SREVSLCBhbGxvdyBhdCBtb3N0IG9u ZSBsZXZlbCBvZiBzdWJsaXN0LiBIZW5jZSwgdGhlc2UKKy0tIGV4YW1wbGVzIHNob3VsZCBlcnJv ciBvdXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCh4KSknOworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdHQVRIRVIoKCh4KSkpJzsKKworLS0gTGVnYWwgY29t bWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qKi8nOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lO KF8pLyoqKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oLyp4Ki95KSc7CitFWFBMQUlO IChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBj b21tZW50ICovIEhBU0hfSk9JTih5Ly8qeCoveiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKKworLS0gVW50ZXJtaW5hdGVkIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICcvKic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoImZP TyIpIC8qIG9vcHMnOworCistLSBOZXN0ZWQgY29tbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNv IHRoZSBmaXJzdCBvZiB0aGVzZSBpcyBsZWdhbCBhbmQKKy0tIHRoZSBzZWNvbmQgaXMgbm90Lgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKi8qLyc7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKi8qIHN0dWZmICovKi8n OworCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUgcmVsYXRpb24gaWRlbnRpZmll cnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTihhKSc7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTigoYSkpJzsKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNjc1OTVjZGRmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKQEAgLTAsMCArMSwxNDggQEAKKyMgQ29weXJpZ2h0IChj KSAyMDIxLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgUnVu IHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMgdW5kZXIgcGdfcGxhbl9hZHZpY2UgdG8gY2hlY2sg Zm9yIHByb2JsZW1zLgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsK KwordXNlIEN3ZCAgICAgICAgICAgIHF3KGFic19wYXRoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBx dyhkaXJuYW1lKTsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBJbml0aWFsaXplIHRoZSBw cmltYXJ5IG5vZGUKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdt YWluJyk7Ciskbm9kZS0+aW5pdCgpOworCisjIFNldCB1cCBvdXIgZGVzaXJlZCBjb25maWd1cmF0 aW9uLgorIworIyBXZSBydW4gd2l0aCBwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9s aW1pdCBzZXQgdG8gZW5zdXJlIHRoYXQgdGhlCisjIHBsYW4gdHJlZSB3YWxrZXIgY29kZSBydW5z IGFnYWluc3QgZXZlcnkgcXVlcnkgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMuIElmCisjIHdlJ3Jl IHVuYWJsZSB0byBwcm9wZXJseSBhbmFseXplIGFueSBvZiB0aG9zZSBwbGFuIHRyZWVzLCB0aGlz IHRlc3Qgc2hvdWxkIGZhaWwuCisjCisjIFdlIHNldCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgdG8g YW4gYWR2aWNlIHN0cmluZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGFkdmljZQorIyB0cm92ZSB0byBi ZSBwb3B1bGF0ZWQgd2l0aCBhIGZldyBlbnRyaWVzIG9mIHZhcmlvdXMgc29ydHMsIGJ1dCB3aGlj aCB3ZSBkbworIyBub3QgZXhwZWN0IHRvIG1hdGNoIGFueXRoaW5nIGluIHRoZSByZWdyZXNzaW9u IHRlc3QgcXVlcmllcy4gVGhpcyB3YXksIHRoZQorIyBwbGFubmVyIGhvb2tzIHdpbGwgYmUgY2Fs bGVkLCBpbXByb3ZpbmcgY29kZSBjb3ZlcmFnZSwgYnV0IG5vIHBsYW5zIHNob3VsZAorIyBhY3R1 YWxseSBjaGFuZ2UuCisjCisjIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVk X2FkdmljZT1mYWxzZSBpcyBuZWVkZWQgdG8gYXZvaWQgYnJlYWtpbmcKKyMgcmVncmVzc2lvbiB0 ZXN0IHF1ZXJpZXMgdGhhdCB1c2UgRVhQTEFJTi4gSW4gdGhlIHJlYWwgd29ybGQsIGl0IHNlZW1z IGxpa2UKKyMgdXNlcnMgd2lsbCB3YW50IEVYUExBSU4gb3V0cHV0IHRvIHNob3cgc3VwcGxpZWQg YWR2aWNlIHNvIHRoYXQgaXQncyBjbGVhcgorIyB3aGV0aGVyIG5vcm1hbCBwbGFubmVyIGJlaGF2 aW9yIGhhcyBiZWVuIGFsdGVyZWQsIGJ1dCBoZXJlIHRoYXQncyB1bmRlc2lyYWJsZS4KKyRub2Rl LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00pOworcGdfcGxhbl9hZHZpY2Uu c2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ9MTAwMDAwMAorcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2Nv bGxlY3Rvcj10cnVlCitzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9cGdfcGxhbl9hZHZpY2UKK3Bn X3BsYW5fYWR2aWNlLmFkdmljZT0nU0VRX1NDQU4oZW50aXJlbHlfZmljdGl0aW91cykgSEFTSF9K T0lOKHRvdGFsX2ZhYnJpY2F0aW9uKSBHQVRIRVIoY29tcGxldGVseV9pbWFnaW5hcnkpJworcGdf cGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitFT00KKyRu b2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRoKCIuLi8uLiIpOworCisjIC0tZGxw YXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jlc3Mu c28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4KK215 ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVTU19TSExJQn0pOworCisjIC0tb3V0cHV0ZGly IHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBwbGFjZSB0aGUgb3V0cHV0IGZpbGVzLgorbXkg JG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisjIC0t aW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9mIHRoZSBpbnB1dCBmaWxlcy4KK215ICRpbnB1 dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MiOworCisjIFJ1biB0aGUgdGVzdHMuCitt eSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdSRVNTfSAuICIgIgorCSAgLiAiLS1iaW5kaXI9 ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwiICIKKwkgIC4gIi0taG9zdD0iIC4gJG5vZGUt Pmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4gJG5vZGUtPnBvcnQgLiAiICIKKwkgIC4gIi0t c2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIKKwkg IC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAgIgorCSAgLiAiLS1pbnB1dGRpcj1cIiRpbnB1 dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiIik7CisKKyMgRHVtcCBv dXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwgaWYgdGhlcmUgaXMgb25lCitpZiAoJHJjICE9 IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRkaXIvcmVncmVzc2lvbi5kaWZmcyI7CisJaWYg KC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0gZHVtcGluZyAkZGlmZnMgPT09XG4iOworCQlw cmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXByaW50ICI9PT0gRU9GID09PVxuIjsKKwl9Cit9 CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywgMCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFzcycp OworCisjIENyZWF0ZSB0aGUgZXh0ZW5zaW9uIHNvIHdlIGNhbiBhY2Nlc3MgdGhlIGNvbGxlY3Rv cgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBwZ19wbGFu X2FkdmljZScpOworCisjIFZlcmlmeSB0aGF0IGEgbGFyZ2UgYW1vdW50IG9mIGFkdmljZSB3YXMg Y29sbGVjdGVkCitteSAkYWxsX3F1ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UoKTsKK0VPTQorY21wX29rKCRhbGxfcXVlcnlfY291bnQsICc+JywgMjAwMDAsICJj b3Bpb3VzIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBWZXJpZnkgdGhhdCBsb3RzIG9mIGRpZmZl cmVudCBhZHZpY2Ugc3RyaW5ncyB3ZXJlIGNvbGxlY3RlZAorbXkgJGRpc3RpbmN0X3F1ZXJ5X2Nv dW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQo KikgRlJPTQorCShTRUxFQ1QgRElTVElOQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9z aGFyZWRfYWR2aWNlKCkpOworRU9NCitjbXBfb2soJGRpc3RpbmN0X3F1ZXJ5X2NvdW50LCAnPics IDMwMDAsICJkaXZlcnNlIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBXZSB3YW50IHRvIHRlc3Qg Zm9yIHRoZSBwcmVzZW5jZSBvZiBvdXIga25vd24gdGFncyBpbiB0aGUgY29sbGVjdGVkIGFkdmlj ZS4KKyMgUHV0IGFsbCB0YWdzIGludG8gdGhlIGhhc2ggdGhhdCBmb2xsb3dzOyBtYXAgYW55IHRh Z3MgdGhhdCBhcmVuJ3QgdGVzdGVkCisjIGJ5IHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMgdG8g MCwgYW5kIG90aGVycyB0byAxLgorbXkgJXRhZ19tYXAgPSAoCisJQklUTUFQX0hFQVBfU0NBTiA9 PiAxLAorCUZPUkVJR05fSk9JTiA9PiAwLAorCUdBVEhFUiA9PiAxLAorCUdBVEhFUl9NRVJHRSA9 PiAxLAorCUhBU0hfSk9JTiA9PiAxLAorCUlOREVYX09OTFlfU0NBTiA9PiAxLAorCUlOREVYX1ND QU4gPT4gMSwKKwlKT0lOX09SREVSID0+IDEsCisJTUVSR0VfSk9JTl9NQVRFUklBTElaRSA9PiAx LAorCU1FUkdFX0pPSU5fUExBSU4gPT4gMSwKKwlORVNURURfTE9PUF9NQVRFUklBTElaRSA9PiAx LAorCU5FU1RFRF9MT09QX01FTU9JWkUgPT4gMSwKKwlORVNURURfTE9PUF9QTEFJTiA9PiAxLAor CU5PX0dBVEhFUiA9PiAxLAorCVBBUlRJVElPTldJU0UgPT4gMSwKKwlTRU1JSk9JTl9OT05fVU5J UVVFID0+IDEsCisJU0VNSUpPSU5fVU5JUVVFID0+IDEsCisJU0VRX1NDQU4gPT4gMSwKKwlUSURf U0NBTiA9PiAxLAorKTsKK2ZvciBteSAkdGFnIChzb3J0IGtleXMgJXRhZ19tYXApCit7CisJbXkg JGNoZWNraXQgPSAkdGFnX21hcHskdGFnfTsKKworCSMgU2VhcmNoIGZvciB0aGUgZ2l2ZW4gdGFn LiBUaGlzIGlzIG5vdCBlbnRpcmVseSByb2J1c3Q6IGl0IGNvdWxkIGdldCB0aHJvd24KKwkjIG9m ZiBieSBhIHRhYmxlIGFsaWFzIHN1Y2ggYXMgIkZPUkVJR05fSk9JTigiLCBidXQgdGhhdCBwcm9i YWJseSB3b24ndAorCSMgaGFwcGVuIGluIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMuCisJbXkg JHRhZ19jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VMRUNU IENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKKwlXSEVSRSBh ZHZpY2UgTElLRSAnJSR0YWcoJScKK0VPTQorCisJIyBDaGVjayB0aGF0IHRoZSB0YWcgZ290IGEg bm9uLXRyaXZpYWwgYW1vdW50IG9mIHVzZSwgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgorCWNtcF9v aygkdGFnX2NvdW50LCAnPicsIDEwLCAibXVsdGlwbGUgdXNlcyBvZiAkdGFnIikgaWYgJGNoZWNr aXQ7CisKKwkjIFJlZ2FyZGxlc3MsIG5vdGUgdGhlIGV4YWN0IGNvdW50IGluIHRoZSBsb2csIGZv ciBodW1hbiBjb25zdW1wdGlvbi4KKwlub3RlKCJmb3VuZCAkdGFnX2NvdW50IGFkdmljZSBzdHJp bmdzIGNvbnRhaW5pbmcgJHRhZyIpOworfQorCisjIFRyaWdnZXIgYSBwYXJ0aWFsIGNsZWFudXAg b2YgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLCBhbmQgdGhlbiBhIGZ1bGwKKyMgY2xlYW51 cC4KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VUIHBnX3BsYW5fYWR2 aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTUwMDsKK1NFTEVDVCAqIEZST00gcGdfY2xlYXJf Y29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5z Z21sCmluZGV4IDI0YjcwNmIyOWFkLi5iZGQ0ODY1ZjUzZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCkBAIC0xNTYs NiArMTU2LDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFibGU+ZXh0ZW5zaW9uX25hbWU8 L3JlcGxhY2VhYmxlPjsKICAmcGdmcmVlc3BhY2VtYXA7CiAgJnBnbG9naWNhbGluc3BlY3Q7CiAg JnBnb3ZlcmV4cGxhaW47CisgJnBncGxhbmFkdmljZTsKICAmcGdwcmV3YXJtOwogICZwZ3Jvd2xv Y2tzOwogICZwZ3N0YXRzdGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2ZpbGVs aXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAppbmRleCBhYzY2ZmNiZGI1Ny4u ZDkwYjQzMzhkMmEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xNDksNiArMTQ5LDcgQEAKIDwhRU5USVRZ IHBnZnJlZXNwYWNlbWFwICBTWVNURU0gInBnZnJlZXNwYWNlbWFwLnNnbWwiPgogPCFFTlRJVFkg cGdsb2dpY2FsaW5zcGVjdCAgU1lTVEVNICJwZ2xvZ2ljYWxpbnNwZWN0LnNnbWwiPgogPCFFTlRJ VFkgcGdvdmVyZXhwbGFpbiAgIFNZU1RFTSAicGdvdmVyZXhwbGFpbi5zZ21sIj4KKzwhRU5USVRZ IHBncGxhbmFkdmljZSAgICBTWVNURU0gInBncGxhbmFkdmljZS5zZ21sIj4KIDwhRU5USVRZIHBn cHJld2FybSAgICAgICBTWVNURU0gInBncHJld2FybS5zZ21sIj4KIDwhRU5USVRZIHBncm93bG9j a3MgICAgICBTWVNURU0gInBncm93bG9ja3Muc2dtbCI+CiA8IUVOVElUWSBwZ3N0YXRzdGF0ZW1l bnRzIFNZU1RFTSAicGdzdGF0c3RhdGVtZW50cy5zZ21sIj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWZjNDI4N2RmOTUKLS0tIC9k ZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwKQEAgLTAsMCArMSwx MDM2IEBACis8IS0tIGRvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbCAtLT4KKworPHNlY3Qx IGlkPSJwZ3BsYW5hZHZpY2UiIHhyZWZsYWJlbD0icGdfcHJld2FybSI+CisgPHRpdGxlPnBnX3Bs YW5fYWR2aWNlICZtZGFzaDsgaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW48L3Rp dGxlPgorCisgPGluZGV4dGVybSB6b25lPSJwZ3BsYW5hZHZpY2UiPgorICA8cHJpbWFyeT5wZ19w bGFuX2FkdmljZTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJhPgorICBUaGUgPGZp bGVuYW1lPnBnX3BsYW5fYWR2aWNlPC9maWxlbmFtZT4gYWxsb3dzIGtleSBwbGFubmVyIGRlY2lz aW9ucyB0byBiZQorICBkZXNjcmliZWQsIHJlcHJvZHVjZWQsIGFuZCBhbHRlcmVkIHVzaW5nIGEg c3BlY2lhbC1wdXJwb3NlICJwbGFuIGFkdmljZSIKKyAgbWluaS1sYW5ndWFnZS4gSXQgaXMgaW50 ZW5kZWQgdG8gYWxsb3cgc3RhYmlsaXphdGlvbiBvZiBwbGFuIGNob2ljZXMgdGhhdAorICB0aGUg dXNlciBiZWxpZXZlcyB0byBiZSBnb29kLCBhcyB3ZWxsIGFzIGV4cGVyaW1lbnRhdGlvbiB3aXRo IHBsYW5zIHRoYXQKKyAgdGhlIHBsYW5uZXIgYmVsaWV2ZXMgdG8gYmUgbm9uLW9wdGltYWwuCisg PC9wYXJhPgorCisgPHBhcmE+CisgIE5vdGUgdGhhdCwgc2luY2UgdGhlIHBsYW5uZXIgb2Z0ZW4g bWFrZXMgZ29vZCBkZWNpc2lvbnMsIG92ZXJyaWRpbmcgaXRzCisgIGp1ZGdlbWVudCBjYW4gZWFz aWx5IGJhY2tmaXJlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAg dW5kZXJseWluZyBkYXRhIGNoYW5nZXMsIHRoZSBwbGFubmVyIG5vcm1hbGx5IGhhcyB0aGUgb3B0 aW9uIHRvIGFkanVzdCB0aGUKKyAgcGxhbiBpbiBhbiBhdHRlbXB0IHRvIHByZXNlcnZlIGdvb2Qg cGVyZm9ybWFuY2UuIElmIHRoZSBwbGFuIGFkdmljZSBwcmV2ZW50cworICB0aGlzLCBhIHZlcnkg cG9vciBwbGFuIG1heSBiZSBjaG9zZW4uIEl0IGlzIGltcG9ydGFudCB0byB1c2UgcGxhbiBhZHZp Y2UKKyAgb25seSB3aGVuIHRoZSByaXNrcyBvZiBjb25zdHJhaW5pbmcgdGhlIHBsYW5uZXIncyBj aG9pY2VzIGFyZSBvdXR3ZWlnaGVkIGJ5CisgIHRoZSBiZW5lZml0cy4KKyA8L3BhcmE+CisKKyA8 c2VjdDIgaWQ9InBncGxhbmFkdmljZS1nZXR0aW5nLXN0YXJ0ZWQiPgorICA8dGl0bGU+R2V0dGlu ZyBTdGFydGVkPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEluIG9yZGVyIHRvIHVzZSB0aGlzIG1v ZHVsZSwgdGhlIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBtb2R1bGUKKyAgIG11 c3QgYmUgbG9hZGVkLiBZb3UgY2FuIGRvIHRoaXMgb24gYSBzeXN0ZW0td2lkZSBiYXNpcyBieSBh ZGRpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB0bworICAgPHhyZWYg bGlua2VuZD0iZ3VjLXNoYXJlZC1wcmVsb2FkLWxpYnJhcmllcyIvPiBhbmQgcmVzdGFydGluZyB0 aGUKKyAgIHNlcnZlciwgb3IgYnkgYWRkaW5nIGl0IHRvCisgICA8eHJlZiBsaW5rZW5kPSJndWMt c2Vzc2lvbi1wcmVsb2FkLWxpYnJhcmllcyIvPiBhbmQgc3RhcnRpbmcgYSBuZXcgc2Vzc2lvbiwK KyAgIG9yIGJ5IGxvYWRpbmcgaXQgaW50byBhbiBpbmRpdmlkdWFsIHNlc3Npb24gdXNpbmcgdGhl CisgICA8bGluayBsaW5rZW5kPSJzcWwtbG9hZCI+PGxpdGVyYWw+TE9BRDwvbGl0ZXJhbD48L2xp bms+IGNvbW1hbmQuIElmIHlvdQorICAgd2lzaCB0byB1c2UgdGhlCisgICA8bGluayBsaW5rZW5k PSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9yIj5jb2xsZWN0b3IgaW50ZXJmYWNlPC9saW5rPiwKKyAg IHlvdSBtdXN0IGFsc28gaW5zdGFsbCB0aGUgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVy YWw+IGV4dGVuc2lvbgorICAgaW4gdGhlIGRhdGFiYXNlIHdoZXJlIHlvdSB3aXNoIHRvIHVzZSB0 aGUgY29sbGVjdG9yLiBVc2UgdGhlIGNvbW1hbmQKKyAgIDxsaXRlcmFsPkNSRUFURSBFWFRFTlNJ T04gcGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IHRvIGRvIHRoaXMuIElmIHlvdSBkbworICAgbm90 IHdpc2ggdG8gdXNlIHRoZSBjb2xsZWN0b3IgaW50ZXJmYWNlLCB0aGlzIHN0ZXAgaXMgbm90IHJl cXVpcmVkLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBPbmNlIHRoZSA8bGl0ZXJhbD5wZ19w bGFuX2FkdmljZTwvbGl0ZXJhbD4gbW9kdWxlIGlzIGxvYWRlZCwKKyAgIDxsaW5rIGxpbmtlbmQ9 InNxbC1leHBsYWluIj48bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPjwvbGluaz4gd2lsbCBzdXBw b3J0CisgICBhIDxsaXRlcmFsPlBMQU5fQURWSUNFPC9saXRlcmFsPiBvcHRpb24uIFlvdSBjYW4g dXNlIHRoaXMgb3B0aW9uIHRvIHNlZQorICAgYSBwbGFuIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBj aG9zZW4gcGxhbi4gRm9yIGV4YW1wbGU6CisgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKyAgICAgICAgU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAg ICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2Fu IG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv aW5fZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAg IEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKzwvcHJv Z3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSB1c2VyIGhh cyBub3Qgc3BlY2lmaWVkIGFueSBhZHZpY2U7IGluc3RlYWQsIHRoZQorICAgcGxhbm5lciBoYXMg YmVlbiBwZXJtaXR0ZWQgdG8gbWFrZSB3aGF0ZXZlciBkZWNpc2lvbnMgaXQgdGhpbmtzIGJlc3Qs IGFuZAorICAgdGhvc2UgZGVjaXNpb25zIGFyZSBtZW1vcmlhbGl6ZWQgaW4gdGhlIGZvcm0gb2Yg YW4gYWR2aWNlIHN0cmluZy4KKyAgIDxsaXRlcmFsPkpPSU5fT1JERVIoZiBkKTwvbGl0ZXJhbD4g bWVhbnMgdGhhdCA8bGl0ZXJhbD5mPC9saXRlcmFsPiBzaG91bGQKKyAgIGJlIHRoZSBkcml2aW5n IHRhYmxlLCBhbmQgdGhlIGZpcnN0IHRhYmxlIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQg aXMKKyAgIDxsaXRlcmFsPmQ8L2xpdGVyYWw+LiA8bGl0ZXJhbD5IQVNIX0pPSU4oZCk8L2xpdGVy YWw+IG1lYW5zIHRoYXQKKyAgIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHNob3VsZCBhcHBlYXIgb24g dGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoIGpvaW4uCisgICA8bGl0ZXJhbD5TRVFfU0NBTihmIGQp PC9saXRlcmFsPiBtZWFucyB0aGF0IGJvdGggPGxpdGVyYWw+ZjwvbGl0ZXJhbD4KKyAgIGFuZCA8 bGl0ZXJhbD5kPC9saXRlcmFsPiBzaG91bGQgYmUgYWNjZXNzZWQgdmlhIGEgc2VxdWVudGlhbCBz Y2FuLgorICAgPGxpdGVyYWw+Tk9fR0FUSEVSKGYgZCk8L2xpdGVyYWw+IG1lYW5zIHRoYXQgbmVp dGhlciA8bGl0ZXJhbD5mPC9saXRlcmFsPgorICAgbm9yIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHNo b3VsZCBhcHBlYXIgYmVuZWF0aCBhIDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4KKyAgIG9yIDxs aXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4gbm9kZS4gRm9yIG1vcmUgZGV0YWlscyBvbiB0 aGUgcGxhbgorICAgYWR2aWNlIG1pbmktbGFuZ3VhZ2UsIHNlZSB0aGUgaW5mb3JtYXRpb24gb24K KyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS10YXJnZXRzIj5hZHZpY2UgdGFyZ2V0czwv bGluaz4gYW5kCisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtdGFncyI+YWR2aWNlIHRh Z3M8L2xpbms+LCBiZWxvdy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSWYgeW91IHdhbnQg dG8gc2VlIHRoZSBhZHZpY2Ugc3RyaW5ncyBmb3IgYSBsYXJnZSBudW1iZXIgb2YgcXVlcmllcywg b3IKKyAgIGFuIGVudGlyZSB3b3JrbG9hZCwgcnVubmluZyA8bGl0ZXJhbD5FWFBMQUlOIChQTEFO X0FEVklDRSk8L2xpdGVyYWw+IGZvcgorICAgZWFjaCBvbmUgbWF5IG5vdCBiZSBjb252ZW5pZW50 LiBJbiBzdWNoIHNpdHVhdGlvbnMsIGl0IGNhbiBiZSBtb3JlCisgICBjb252ZW5pZW50IHRvIHVz ZSBhbgorICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNv bGxlY3RvcjwvbGluaz4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIE9uY2UgeW91IGhhdmUg YW4gYWR2aWNlIHN0cmluZyBmb3IgYSBxdWVyeSwgeW91IGNhbiB1c2UgaXQgdG8gY29udHJvbCBo b3cKKyAgIHRoYXQgcXVlcnkgaXMgcGxhbm5lZC4gWW91IGNhbiBkbyB0aGlzIGJ5IHNldHRpbmcK KyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlLmFkdmljZTwvbGl0ZXJhbD4gdG8gdGhlIGFkdmlj ZSBzdHJpbmcgeW91J3ZlCisgICBjaG9zZW4uIFRoaXMgY2FuIGJlIGFuIGFkdmljZSBzdHJpbmcg dGhhdCB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBzeXN0ZW0sCisgICBvciBvbmUgeW91J3ZlIHdyaXR0 ZW4geW91cnNlbGYuIE9uZSBnb29kIHdheSBvZiBjcmVhdGluZyB5b3VyIG93biBhZHZpY2UKKyAg IHN0cmluZyBpcyB0byB0YWtlIHRoZSBzdHJpbmcgZ2VuZXJhdGVkIGJ5IHRoZSBzeXN0ZW0gYW5k IHBpY2sgb3V0IGp1c3QKKyAgIHRob3NlIGVsZW1lbnRzIHRoYXQgeW91IHdpc2ggdG8gZW5mb3Jj ZS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0 ZXJhbD4gZW1pdHMgYWR2aWNlIGZvciB0aGUgam9pbiBvcmRlciwgdGhlCisgICBqb2luIG1ldGhv ZCwgdGhlIHNjYW4gbWV0aG9kLCBhbmQgdGhlIHVzZSBvZiBwYXJhbGxlbGlzbSwgYnV0IHlvdSBt aWdodAorICAgb25seSB3YW50IHRvIGNvbnRyb2wgdGhlIGpvaW4gb3JkZXI6CisgIDwvcGFyYT4K KworPHByb2dyYW1saXN0aW5nPgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09S REVSKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorICAgICAgICBTRUxFQ1QgKiBGUk9NIGpv aW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAg ICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4g b24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9p bl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpIC8qIG1h dGNoZWQgKi8KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBTaW5jZSB0aGUgPGxp dGVyYWw+UExBTl9BRFZJQ0U8L2xpdGVyYWw+IG9wdGlvbiB0bworICAgPGxpdGVyYWw+RVhQTEFJ TjwvbGl0ZXJhbD4gd2FzIG5vdCBzcGVjaWZpZWQsIG5vIGFkdmljZSBzdHJpbmcgaXMgZ2VuZXJh dGVkCisgICBmb3IgdGhlIHBsYW4uIEhvd2V2ZXIsIHRoZSBzdXBwbGllZCBwbGFuIGFkdmljZSBp cyBzdGlsbCBzaG93biBzbyB0aGF0CisgICBhbnlvbmUgbG9va2luZyBhdCB0aGUgPGxpdGVyYWw+ RVhQTEFJTjwvbGl0ZXJhbD4gb3V0cHV0IGtub3dzIHRoYXQgdGhlCisgICBjaG9zZW4gcGxhbiB3 YXMgaW5mbHVlbmNlZCBieSBwbGFuIGFkdmljZS4gSWYgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxp ZWQKKyAgIHBsYW4gYWR2aWNlIGlzIG5vdCBkZXNpcmVkLCBpdCBjYW4gYmUgc3VwcHJlc3NlZCBi eSBjb25maWd1cmluZworICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5f c3VwcGxpZWRfYWR2aWNlID0gZmFsc2U8L2xpdGVyYWw+LgorICAgRm9yIGVhY2ggcGllY2Ugb2Yg c3VwcGxpZWQgYWR2aWNlLCB0aGUgb3V0cHV0IHNob3dzCisgICA8bGluayBsaW5rZW5kPSJwZ3Bs YW5hZHZpY2UtZmVlZGJhY2siPmFkdmljZSBmZWVkYmFjazwvbGluaz4gaW5kaWNhdGluZworICAg d2hldGhlciBvciBub3QgdGhlIGFkdmljZSB3YXMgc3VjY2Vzc2Z1bGx5IGFwcGxpZWQgdG8gdGhl IHF1ZXJ5LiBJbiB0aGlzCisgICBjYXNlLCB0aGUgZmVlZGJhY2sgc2F5cyA8bGl0ZXJhbD4vKiBt YXRjaGVkICovPC9saXRlcmFsPiwgd2hpY2ggbWVhbnMgdGhhdAorICAgPGxpdGVyYWw+ZjwvbGl0 ZXJhbD4gYW5kIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHdlcmUgZm91bmQgaW4gdGhlIHF1ZXJ5IGFu ZAorICAgdGhhdCB0aGUgcmVzdWx0aW5nIHF1ZXJ5IHBsYW4gY29uZm9ybXMgdG8gdGhlIHNwZWNp ZmllZCBhZHZpY2UuCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxh bmFkdmljZS1ob3ctaXQtd29ya3MiPgorICA8dGl0bGU+SG93IEl0IFdvcmtzPC90aXRsZT4KKwor ICA8cGFyYT4KKyAgIFBsYW4gYWR2aWNlIGlzIHdyaXR0ZW4gaW1wZXJhdGl2ZWx5OyB0aGF0IGlz LCBpdCBzcGVjaWZpZXMgd2hhdCBzaG91bGQgYmUKKyAgIGRvbmUuIEhvd2V2ZXIsIGF0IGFuIGlt cGxlbWVudGF0aW9uIGxldmVsLAorICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+ IHdvcmtzIGJ5IHRlbGxpbmcgdGhlIGNvcmUgcGxhbm5lciB3aGF0CisgICBzaG91bGQgbm90IGJl IGRvbmUuIEluIG90aGVyIHdvcmRzLCBpdCBvcGVyYXRlcyBieSBjb25zdHJhaW5pbmcgdGhlCisg ICBwbGFubmVyJ3MgY2hvaWNlcywgbm90IGJ5IHJlcGxhY2luZyBpdC4gVGhlcmVmb3JlLCBubyBt YXR0ZXIgd2hhdCBhZHZpY2UKKyAgIHlvdSBwcm92aWRlLCB5b3Ugd2lsbCBvbmx5IGV2ZXIgZ2V0 IGEgcGxhbiB0aGF0IHRoZSBjb3JlIHBsYW5uZXIgd291bGQgaGF2ZQorICAgY29uc2lkZXJlZCBm b3IgdGhlIHF1ZXJ5IGluIHF1ZXN0aW9uLiBJZiB5b3UgYXR0ZW1wdCB0byBmb3JjZSB3aGF0IHlv dQorICAgYmVsaWV2ZSB0byBiZSB0aGUgY29ycmVjdCBwbGFuIGJ5IHN1cHBseWluZyBhbiBhZHZp Y2Ugc3RyaW5nLCBhbmQgdGhlCisgICBwbGFubmVyIHN0aWxsIGZhaWxzIHRvIHByb2R1Y2UgdGhl IGRlc2lyZWQgcGxhbiwgdGhpcyBtZWFucyB0aGF0IGVpdGhlcgorICAgdGhlcmUgaXMgYSBidWcg aW4geW91ciBhZHZpY2Ugc3RyaW5nLCBvciB0aGUgcGxhbiBpbiBxdWVzdGlvbiB3YXMgbm90Cisg ICBjb25zaWRlcmVkIHZpYWJsZSBieSB0aGUgY29yZSBwbGFubmVyLiBUaGlzIGNvbW1vbmx5IGhh cHBlbnMgZm9yIG9uZSBvZiB0d28KKyAgIHJlYXNvbnMuIEZpcnN0LCBpdCBtaWdodCBiZSB0aGUg cGxhbm5lciBiZWxpZXZlcyB0aGF0IHRoZSBwbGFuIHlvdSdyZSB0cnlpbmcKKyAgIHRvIGZvcmNl IHdvdWxkIGJlIHNlbWFudGljYWxseSBpbmNvcnJlY3QgLSB0aGF0IGlzLCBpdCB3b3VsZCBwcm9k dWNlIHRoZQorICAgd3JvbmcgcmVzdWx0cyAtIGFuZCBmb3IgdGhhdCByZWFzb24gaXQgd2Fzbid0 IGNvbnNpZGVyZWQuIFNlY29uZCwgaXQgbWlnaHQKKyAgIGJlIHRoYXQgdGhlIHBsYW5uZXIgcmVq ZWN0ZWQgdGhlIHBsYW4geW91IHdlcmUgaG9waW5nIHRvIGdlbmVyYXRlIG9uIHNvbWUKKyAgIGdy b3VuZHMgb3RoZXIgdGhhbiBjb3N0LiBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSB2ZXJ5IHNpbXBsZSBx dWVyeSBzdWNoIGFzCisgICA8bGl0ZXJhbD5TRUxFQ1QgKiBGUk9NIHNvbWVfdGFibGU8L2xpdGVy YWw+LCB0aGUgcXVlcnkgcGxhbm5lciB3aWxsCisgICBkZWNpZGUgdGhhdCB0aGUgdXNlIG9mIGFu IGluZGV4IGlzIHdvcnRobGVzcyBoZXJlIGJlZm9yZSBpdCBwZXJmb3JtcyBhbnkKKyAgIGNvc3Rp bmcgY2FsY3VsYXRpb25zLiBZb3UgY2Fubm90IGZvcmNlIGl0IHRvIHVzZSBhbiBpbmRleCBmb3Ig dGhpcyBxdWVyeQorICAgZXZlbiBpZiB5b3Ugc2V0IDxsaXRlcmFsPmVuYWJsZV9zZXFzY2FuID0g ZmFsc2U8L2xpdGVyYWw+LCBhbmQgeW91IGNhbid0CisgICBmb3JjZSBpdCB0byB1c2UgYW4gaW5k ZXggdXNpbmcgcGxhbiBhZHZpY2UsIGVpdGhlci4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg U3BlY2lmeWluZyBwbGFuIGFkdmljZSBzaG91bGQgbmV2ZXIgY2F1c2UgcGxhbm5lciBmYWlsdXJl LiBIb3dldmVyLCBpZiB5b3UKKyAgIHNwZWNpZnkgcGxhbiBhZHZpY2UgdGhhdCBhc2tzIGZvciBz b21ldGhpbmcgaW1wb3NzaWJsZSwgeW91IG1heSBnZXQgYSBwbGFuCisgICB3aGVyZSBzb21lIHBs YW4gbm9kZXMgYXJlIGZsYWdnZWQgYXMgPGxpdGVyYWw+RGlzYWJsZWQ6IHRydWU8L2xpdGVyYWw+ IGluCisgICB0aGUgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gb3V0cHV0LiBJbiBzb21lIGNh c2VzLCBzdWNoIHBsYW5zIHdpbGwgYmUKKyAgIGJhc2ljYWxseSB0aGUgc2FtZSBwbGFuIHlvdSB3 b3VsZCBoYXZlIGdvdHRlbiB3aXRoIG5vIHN1cHBsaWVkIGFkdmljZSBhdAorICAgYWxsLCBidXQg aW4gb3RoZXIgY2FzZXMsIHRoZXkgbWF5IGJlIG11Y2ggd29yc2UuIEZvciBleGFtcGxlOgorICA8 L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Sk9JTl9PUkRFUih4IGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorICAgICAgICBTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0 cnVlCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlk ID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHggZiBk KSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4K KyAgIEJlY2F1c2UgbmVpdGhlciA8bGl0ZXJhbD5mPC9saXRlcmFsPiBub3IgPGxpdGVyYWw+ZDwv bGl0ZXJhbD4gaXMgdGhlCisgICBmaXJzdCB0YWJsZSBpbiB0aGUgPGxpdGVyYWw+Sk9JTl9PUkRF UigpPC9saXRlcmFsPiBzcGVjaWZpY2F0aW9uLCB0aGUKKyAgIHBsYW5uZXIgZGlzYWJsZXMgYWxs IGRpcmVjdCBqb2lucyBiZXR3ZWVuIHRoZSB0d28gb2YgdGhlbSwgdGhpbmtpbmcgdGhhdAorICAg dGhlIGpvaW4gdG8gPGxpdGVyYWw+eDwvbGl0ZXJhbD4gc2hvdWxkIGhhcHBlbiBmaXJzdC4gU2lu Y2UgcGxhbm5pbmcgaXNuJ3QKKyAgIGFsbG93ZWQgdG8gZmFpbCwgYSBkaXNhYmxlZCBwbGFuIGJl dHdlZW4gdGhlIHR3byByZWxhdGlvbnMgaXMgZXZlbnR1YWxseQorICAgc2VsZWN0ZWQgYW55d2F5 LCBidXQgaGVyZSBpdCdzIGEgPGxpdGVyYWw+TmVzdGVkIExvb3A8L2xpdGVyYWw+IHJhdGhlciB0 aGFuCisgICB0aGUgPGxpdGVyYWw+SGFzaCBKb2luPC9saXRlcmFsPiB0aGF0IHdhcyBjaG9zZW4g aW4gdGhlIGFib3ZlIGV4YW1wbGUgd2hlcmUKKyAgIG5vIGFkdmljZSB3YXMgc3BlY2lmaWVkLiBU aGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgd2F5cyB0aGF0IHRoaXMga2luZAorICAgb2YgdGhp bmcgY2FuIGhhcHBlbjsgd2hlbiBpdCBkb2VzLCB0aGUgcmVzdWx0aW5nIHBsYW4gaXMgZ2VuZXJh bGx5IHdvcnNlCisgICB0aGFuIGlmIG5vIGFkdmljZSBoYWQgYmVlbiBzcGVjaWZpZWQgYXQgYWxs LiBUaGVyZWZvcmUsIGl0IGlzIGEgZ29vZCBpZGVhCisgICB0byB2YWxpZGF0ZSB0aGF0IHRoZSBh ZHZpY2UgeW91IHNwZWNpZnkgYXBwbGllcyB0byB0aGUgcXVlcnkgdG8gd2hpY2ggaXQKKyAgIGlz IGFwcGxpZWQgYW5kIHRoYXQgdGhlIHJlc3VsdHMgYXJlIGFzIGV4cGVjdGVkLgorICA8L3BhcmE+ CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtdGFyZ2V0cyI+CisgIDx0 aXRsZT5BZHZpY2UgVGFyZ2V0czwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBBbiA8Zmlyc3R0ZXJt PmFkdmljZSB0YXJnZXQ8L2ZpcnN0dGVybT4gdW5pcXVlbHkgaWRlbnRpZmllcyBhIHBhcnRpY3Vs YXIKKyAgIGluc3RhbmNlIG9mIGEgcGFydGljdWxhciByZWxhdGlvbiBpbnZvbHZlZCBpbiBhIHBh cnRpY3VsYXIgcXVlcnkuIEluIHNpbXBsZQorICAgY2FzZXMsIHN1Y2ggYXMgdGhlIGV4YW1wbGVz IHNob3duIGFib3ZlLCB0aGUgYWR2aWNlIHRhcmdldCBpcyBzaW1wbHkgdGhlCisgICByZWxhdGlv biBhbGlhcy4gSG93ZXZlciwgYSBtb3JlIGNvbXBsZXggc3ludGF4IGlzIHJlcXVpcmVkIHdoZW4g c3VicXVlcmllcworICAgYXJlIHVzZWQsIHdoZW4gdGFibGVzIGFyZSBwYXJ0aXRpb25lZCwgb3Ig d2hlbiB0aGUgc2FtZSByZWxhdGlvbiBhbGlhcyBpcworICAgbWVudGlvbmVkIG1vcmUgdGhhbiBv bmNlIGluIHRoZSBzYW1lIHN1YnF1ZXJ5IChlLmcuLCA8bGl0ZXJhbD4oZm9vIEpPSU4gYmFyCisg ICBPTiBmb28uYSA9IGJhci5hKSB4IEpPSU4gZm9vIE9OIHguYiA9IGZvby5iPC9saXRlcmFsPiku IEFueSBjb21iaW5hdGlvbiBvZgorICAgdGhlc2UgdGhyZWUgdGhpbmdzIGNhbiBvY2N1ciBzaW11 bHRhbmVvdXNseTogYSByZWxhdGlvbiBjb3VsZCBiZSBtZW50aW9uZWQKKyAgIG1vcmUgdGhhbiBv bmNlLCBiZSBwYXJ0aXRpb25lZCwgYW5kIGJlIHVzZWQgaW5zaWRlIG9mIGEgc3VicXVlcnkuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGdlbmVyYWwgc3lu dGF4IGZvciBhIHJlbGF0aW9uIGlkZW50aWZpZXIgaXM6CisgIDwvcGFyYT4KKworPHByb2dyYW1s aXN0aW5nPgorYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBh cnRpdGlvbl9uYW1lQHBsYW5fbmFtZQorPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAg IEFsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIDxsaXRlcmFsPmFsaWFzX25hbWU8L2xpdGVy YWw+IGFyZSBvcHRpb25hbAorICAgYW5kIGFyZSBpbmNsdWRlZCBvbmx5IHdoZW4gcmVxdWlyZWQu IFdoZW4gYSBjb21wb25lbnQgaXMgb21pdHRlZCwgdGhlCisgICBwcmVjZWRpbmcgcHVuY3R1YXRp b24gbXVzdCBhbHNvIGJlIG9taXR0ZWQuIEZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhCisg ICByZWxhdGlvbiB3aXRoaW4gYSBnaXZlbiBzdWJxdWVyeSwgZ2VuZXJhdGVkIGFkdmljZSB3aWxs IG9taXQgdGhlIG9jY3VycmVuY2UKKyAgIG51bWJlciwgYnV0IGl0IGlzIGxlZ2FsIHRvIHdyaXRl IDxsaXRlcmFsPiMxPC9saXRlcmFsPiwgaWYgZGVzaXJlZC4gVGhlCisgICBwYXJ0aXRpb24gc2No ZW1hIGFuZCBwYXJ0aXRpb24gbmFtZSBhcmUgaW5jbHVkZWQgb25seSBmb3IgY2hpbGRyZW4gb2YK KyAgIHBhcnRpdGlvbmVkIHRhYmxlcy4gSW4gZ2VuZXJhdGVkIGFkdmljZSwgPGxpdGVyYWw+cGdf cGxhbl9hZHZpY2U8L2xpdGVyYWw+CisgICBhbHdheXMgaW5jbHVkZXMgYm90aCwgYnV0IGl0IGlz IGxlZ2FsIHRvIG9taXQgdGhlIHNjaGVtYS4gVGhlIHBsYW4gbmFtZSBpcworICAgb21pdHRlZCBm b3IgdGhlIHRvcC1sZXZlbCBwbGFuLCBhbmQgbXVzdCBiZSBpbmNsdWRlZCBmb3IgYW55IHN1YnBs YW4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEl0IGlzIG5vdCBhbHdheXMgZWFzeSB0byBk ZXRlcm1pbmUgdGhlIGNvcnJlY3QgYWR2aWNlIHRhcmdldCBieSBleGFtaW5pbmcKKyAgIHRoZSBx dWVyeS4gRm9yIGluc3RhbmNlLCBpZiB0aGUgcGxhbm5lciBwdWxscyB1cCBhIHN1YnF1ZXJ5IGlu dG8gdGhlIHBhcmVudAorICAgcXVlcnkgbGV2ZWwsIGV2ZXJ5dGhpbmcgaW5zaWRlIG9mIGl0IGJl Y29tZXMgcGFydCBvZiB0aGUgcGFyZW50IHF1ZXJ5IGxldmVsLAorICAgYW5kIHVzZXMgdGhlIHBh cmVudCBxdWVyeSdzIHN1YnBsYW4gbmFtZSAob3Igbm8gc3VicGxhbiBuYW1lLCBpZiBwdWxsZWQg dXAKKyAgIHRvIHRoZSB0b3AgbGV2ZWwpLiBGdXJ0aGVybW9yZSwgdGhlIGNvcnJlY3Qgc3VicXVl cnkgbmFtZSBpcyBzb21ldGltZXMgbm90CisgICBvYnZpb3VzLiBGb3IgZXhhbXBsZSwgd2hlbiB0 d28gcXVlcmllcyBhcmUgam9pbmVkIHVzaW5nIGFuIG9wZXJhdGlvbiBzdWNoIGFzCisgICA8bGl0 ZXJhbD5VTklPTjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+SU5URVJTRUNUPC9saXRlcmFsPiwgbm8g bmFtZSBmb3IgdGhlCisgICBzdWJxdWVyaWVzIGlzIHByZXNlbnQgaW4gdGhlIFNRTCBzeW50YXg7 IGluc3RlYWQsIGEgc3lzdGVtLWdlbmVyYXRlZCBuYW1lIGlzCisgICBhc3NpZ25lZCB0byBlYWNo IGJyYW5jaC4gVGhlIGVhc2llc3Qgd2F5IHRvIGRpc2NvdmVyIHRoZSBwcm9wZXIgYWR2aWNlCisg ICB0YXJnZXRzIGlzIHRvIHVzZSA8bGl0ZXJhbD5FWFBMQUlOIChQTEFOX0FEVklDRSk8L2xpdGVy YWw+IGFuZCBleGFtaW5lIHRoZQorICAgZ2VuZXJhdGVkIGFkdmljZS4KKyAgPC9wYXJhPgorCisg PC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLXRhZ3MiPgorICA8dGl0bGU+QWR2 aWNlIFRhZ3M8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQW4gPGZpcnN0dGVybT5hZHZpY2UgdGFn PC9maXJzdHRlcm0+IHNwZWNpZmllcyBhIHBhcnRpY3VsYXIgYmVoYXZpb3IgdGhhdAorICAgc2hv dWxkIGJlIGVuZm9yY2VkIGZvciBzb21lIHBvcnRpb24gb2YgdGhlIHF1ZXJ5LCBzdWNoIGFzIGEg cGFydGljdWxhcgorICAgam9pbiBvcmRlciBvciBqb2luIG1ldGhvZC4gQWxsIGFkdmljZSB0YWdz IHRha2UKKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS10YXJnZXRzIj5hZHZpY2UgdGFy Z2V0czwvbGluaz4gYXMgYXJndW1lbnRzLAorICAgYW5kIG1hbnkgYWxsb3cgbGlzdHMgb2YgYWR2 aWNlIHRhcmdldHMsIHdoaWNoIGluIHNvbWUgY2FzZXMgY2FuIGJlIG5lc3RlZAorICAgbXVsdGlw bGUgbGV2ZWxzIGRlZXAuIFNldmVyYWwgZGlmZmVyZW50IGNsYXNzZXMgb2YgYWR2aWNlIHRhcmdl dHMgZXhpc3QsCisgICBlYWNoIGNvbnRyb2xsaW5nIGEgZGlmZmVyZW50IGFzcGVjdCBvZiBxdWVy eSBwbGFubmluZy4KKyAgPC9wYXJhPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXNjYW4t bWV0aG9kIj4KKyAgPHRpdGxlPlNjYW4gTWV0aG9kIEFkdmljZTwvdGl0bGU+CisgICA8c3lub3Bz aXM+CitTRVFfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkK K1RJRF9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorSU5E RVhfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmlu ZGV4X25hbWU8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorSU5ERVhfT05MWV9TQ0FOKDxyZXBsYWNl YWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+aW5kZXhfbmFtZTwvcmVwbGFj ZWFibGU+IFsgLi4uIF0pCitGT1JFSUdOX1NDQU4oKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxh Y2VhYmxlPiBbIC4uLiBdKSBbIC4uLiBdKQorQklUTUFQX0hFQVBfU0NBTig8cmVwbGFjZWFibGU+ dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSk8L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAg ICA8bGl0ZXJhbD5TRVFfU0NBTjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQg c2hvdWxkIGJlCisgICAgc2Nhbm5lZCB1c2luZyBhIDxsaXRlcmFsPlNlcSBTY2FuPC9saXRlcmFs Pi4gPGxpdGVyYWw+VElEX1NDQU48L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRoYXQgZWFjaCB0 YXJnZXQgc2hvdWxkIGJlIHNjYW5uZWQgdXNpbmcgYQorICAgIDxsaXRlcmFsPlRJRCBTY2FuPC9s aXRlcmFsPiBvciA8bGl0ZXJhbD5USUQgUmFuZ2UgU2NhbjwvbGl0ZXJhbD4uCisgICAgPGxpdGVy YWw+QklUTUFQX0hFQVBfU0NBTjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQK KyAgICBzaG91bGQgYmUgc2Nhbm5lZCB1c2luZyBhIDxsaXRlcmFsPkJpdG1hcCBIZWFwIFNjYW48 L2xpdGVyYWw+LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5JTkRFWF9T Q0FOPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBlYWNoIHRhcmdldCBzaG91bGQKKyAgICBiZSBz Y2FubmVkIHVzaW5nIGFuIDxsaXRlcmFsPkluZGV4IFNjYW48L2xpdGVyYWw+IG9uIHRoZSBnaXZl biBpbmRleAorICAgIG5hbWUuIDxsaXRlcmFsPklOREVYX09OTFlfU0NBTjwvbGl0ZXJhbD4gaXMg c2ltaWxhciwgYnV0IHNwZWNpZmllcyB0aGUKKyAgICB1c2Ugb2YgYW4gPGxpdGVyYWw+SW5kZXgg T25seSBTY2FuPC9saXRlcmFsPi4gSW4gZWl0aGVyIGNhc2UsIHRoZSBpbmRleAorICAgIG5hbWUg Y2FuIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSwgc2NoZW1hLXF1YWxpZmllZC4KKyAgIDwv cGFyYT4KKworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+Rk9SRUlHTl9TQ0FOPC9saXRlcmFsPiBz cGVjaWZpZXMgdGhhdCBhIGpvaW4gYmV0d2VlbiB0d28gb3IKKyAgICBtb3JlIGZvcmVpZ24gdGFi bGVzIHNob3VsZCBiZSBwdXNoZWQgZG93biB0byBhIHJlbW90ZSBzZXJ2ZXIgc28KKyAgICB0aGF0 IGl0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZSA8bGl0ZXJhbD5Gb3JlaWduIFNjYW48 L2xpdGVyYWw+LgorICAgIFNwZWNpZnlpbmcgPGxpdGVyYWw+Rk9SRUlHTl9TQ0FOPC9saXRlcmFs PiBmb3IgYSBzaW5nbGUgZm9yZWlnbiB0YWJsZSBpcworICAgIG5laXRoZXIgbmVjZXNzYXJ5IG5v ciBwZXJtaXNzaWJsZTogYSA8bGl0ZXJhbD5Gb3JlaWduIFNjYW48L2xpdGVyYWw+IHdpbGwKKyAg ICBuZWVkIHRvIGJlIHVzZWQgcmVnYXJkbGVzcy4gSWYgeW91IHdhbnQgdG8gcHJldmVudCBhIGpv aW4gZnJvbSBiZWluZworICAgIHB1c2hlZCBkb3duLCBjb25zaWRlciB1c2luZyB0aGUgPGxpdGVy YWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gdGFnIGZvcgorICAgIHRoYXQgcHVycG9zZS4KKyAgIDwv cGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIHBsYW5uZXIgc3VwcG9ydHMgbWFueSB0eXBlcyBv ZiBzY2FucyBvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBoZXJlOworICAgIGhvd2V2ZXIsIGluIG1v c3Qgb2YgdGhvc2UgY2FzZXMsIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgZGVjaXNpb24gdG8gYmUK KyAgICBtYWRlLCBhbmQgaGVuY2Ugbm8gbmVlZCBmb3IgYWR2aWNlLiBGb3IgZXhhbXBsZSwgdGhl IG91dHB1dCBvZiBhCisgICAgc2V0LXJldHVybmluZyBmdW5jdGlvbiB0aGF0IGFwcGVhcnMgaW4g dGhlIDxsaXRlcmFsPkZST008L2xpdGVyYWw+IGNsYXVzZQorICAgIGNhbiBvbmx5IGV2ZXIgYmUg c2Nhbm5lZCB1c2luZyBhIDxsaXRlcmFsPkZ1bmN0aW9uIFNjYW48L2xpdGVyYWw+LCBzbworICAg IHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IGZvciBhZHZpY2UgdG8gY2hhbmdlIGFueXRoaW5nLgor ICAgPC9wYXJhPgorCisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZpY2Utam9p bi1vcmRlciI+CisgIDx0aXRsZT5Kb2luIE9yZGVyIEFkdmljZTwvdGl0bGU+CisgICA8c3lub3Bz aXM+CitKT0lOX09SREVSKDxyZXBsYWNlYWJsZT5qb2luX29yZGVyX2l0ZW08L3JlcGxhY2VhYmxl PiBbIC4uLiBdKQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZT5qb2luX29yZGVyX2l0ZW08 L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8 L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5qb2luX29yZGVyX2l0ZW08L3JlcGxhY2Vh YmxlPiBbIC4uLiBdICkgfAoreyA8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNl YWJsZT4gWyAuLi4gXSB9PC9zeW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgV2hlbiA8bGl0ZXJh bD5KT0lOX09SREVSPC9saXRlcmFsPiBpcyB1c2VkIHdpdGhvdXQgYW55IHN1Ymxpc3RzLCBpdAor ICAgIHNwZWNpZmllcyBhbiBvdXRlci1kZWVwIGpvaW4gd2l0aCB0aGUgZmlyc3QgYWR2aWNlIHRh cmdldCBhcyB0aGUgZHJpdmluZworICAgIHRhYmxlLCBqb2luZWQgdG8gZWFjaCBzdWJzZXF1ZW50 IGFkdmljZSB0YXJnZXQgaW4gdHVybiBpbiB0aGUgb3JkZXIKKyAgICBzcGVjaWZpZWQuIEZvciBp bnN0YW5jZSwgPGxpdGVyYWw+Sk9JTl9PUkRFUihhIGIgYyk8L2xpdGVyYWw+IG1lYW5zIHRoYXQK KyAgICA8bGl0ZXJhbD5hPC9saXRlcmFsPiBzaG91bGQgYmUgdGhlIGRyaXZpbmcgdGFibGUsIGFu ZCB0aGF0IGl0IHNob3VsZCBiZQorICAgIGpvaW5lZCBmaXJzdCB0byA8bGl0ZXJhbD5iPC9saXRl cmFsPiBhbmQgdGhlbiB0byA8bGl0ZXJhbD5jPC9saXRlcmFsPi4KKyAgICBJZiB0aGVyZSBhcmUg bW9yZSByZWxhdGlvbnMgaW4gdGhlIHF1ZXJ5IHRoYW4gPGxpdGVyYWw+YTwvbGl0ZXJhbD4sCisg ICAgPGxpdGVyYWw+YjwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5jPC9saXRlcmFsPiwgdGhlIHJl c3QgY2FuIGJlIGpvaW5lZAorICAgIGFmdGVyd2FyZHMgaW4gYW55IG1hbm5lci4KKyAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgSWYgYSA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBs aXN0IGNvbnRhaW5zIGEgcGFyZW50aGVzaXplZCBzdWJsaXN0LAorICAgIGl0IHNwZWNpZmllcyBh IG5vbi1vdXRlci1kZWVwIGpvaW4uIFRoZSByZWxhdGlvbnMgaW4gdGhlIHN1Ymxpc3QgbXVzdCBm aXJzdAorICAgIGJlIGpvaW5lZCB0byBlYWNoIG90aGVyIG11Y2ggYXMgaWYgdGhlIHN1Ymxpc3Qg d2VyZSBhIHRvcC1sZXZlbAorICAgIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+IGxpc3Qs IGFuZCB0aGUgcmVzdWx0aW5nIGpvaW4gcHJvZHVjdCBtdXN0CisgICAgdGhlbiBhcHBlYXIgb24g dGhlIGlubmVyIHNpZGUgb2YgYSBqb2luIGF0IHRoZSBhcHByb3ByaWF0ZSBwb2ludCBpbiB0aGUK KyAgICBqb2luIG9yZGVyLiBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+Sk9JTl9PUkRFUihhIChiIGMp IGQpPC9saXRlcmFsPiByZXF1aXJlcworICAgIGEgcGxhbiBvZiB0aGlzIGZvcm06CisgICA8L3Bh cmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK0pvaW4KKyAgLT4gIEpvaW4KKyAgICAgICAgLT4gU2Nh biBvbiBhCisgICAgICAgIC0+IEpvaW4KKyAgICAgICAgICAgICAtPiBTY2FuIG9uIGIKKyAgICAg ICAgICAgICAtPiBTY2FuIG9uIGMKKyAgLT4gIFNjYW4gb24gZAorPC9wcm9ncmFtbGlzdGluZz4K KworICAgPHBhcmE+CisgICAgSWYgYSA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBsaXN0 IGNvbnRhaW5zIGEgc3VibGlzdCBzdXJyb3VuZGVkIGJ5CisgICAgY3VybHkgYnJhY2VzLCB0aGlz IGFsc28gc3BlY2lmaWVzIGEgbm9uLW91dGVyLWRlZXAgam9pbi4gSG93ZXZlciwgdGhlIGpvaW4K KyAgICBvcmRlciB3aXRoaW4gdGhlIHN1Ymxpc3QgaXMgbm90IGNvbnN0cmFpbmVkLiBGb3IgZXhh bXBsZSwgc3BlY2lmaXlpbmcKKyAgICA8bGl0ZXJhbD5KT0lOX09SREVSKGEge2IgY30gZCk8L2xp dGVyYWw+IHdvdWxkIGFsbG93IHRoZSBzY2FucyBvZgorICAgIDxsaXRlcmFsPmI8L2xpdGVyYWw+ IGFuZCA8bGl0ZXJhbD5jPC9saXRlcmFsPiB0byBiZSBzd2FwcGVkIGluIHRoZQorICAgIHByZXZp b3VzIGV4YW1wbGUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkIHdoZW4gcGFyZW50aGVzZXMgYXJlIHVz ZWQuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFBhcmVudGhlc2l6ZWQgc3VibGlzdHMg Y2FuIGJlIGFyYml0cmFyaWx5IG5lc3RlZCwgYnV0IHN1Ymxpc3RzIHN1cnJvdW5kZWQKKyAgICBi eSBjdXJseSBicmFjZXMgY2Fubm90IHRoZW1zZWx2ZXMgY29udGFpbiBzdWJsaXN0cy4KKyAgIDwv cGFyYT4KKworICAgPHBhcmE+CisgICAgTXVsdGlwbGUgaW5zdGFuY2VzIG9mIDxsaXRlcmFsPkpP SU5fT1JERVIoKTwvbGl0ZXJhbD4gY2FuIHNvbWV0aW1lcyBiZQorICAgIG5lZWRlZCBpbiBvcmRl ciB0byBmdWxseSBjb25zdHJhaW50IHRoZSBqb2luIG9yZGVyLiBUaGlzIG9jY3VycyB3aGVuIHRo ZXJlCisgICAgYXJlIG11bHRpcGxlIGpvaW4gcHJvYmxlbXMgdGhhdCBhcmUgb3B0aW1pemVkIHNl cGFyYXRlbHkgYnkgdGhlIHBsYW5uZXIuCisgICAgVGhpcyBjYW4gaGFwcGVuIGR1ZSB0byB0aGUg cHJlc2VuY2Ugb2Ygc3VicXVlcmllcywgb3IgYmVjYXVzZSB0aGVyZSBpcyBhCisgICAgcGFydGl0 aW9ud2lzZSBqb2luLiBJbiB0aGUgbGF0dGVyIGNhc2UsIGVhY2ggYnJhbmNoIG9mIHRoZSBwYXJ0 aXRpb253aXNlCisgICAgam9pbiBjYW4gaGF2ZSBpdHMgb3duIGpvaW4gb3JkZXIsIGluZGVwZW5k ZW50IG9mIGV2ZXJ5IG90aGVyIGJyYW5jaC4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisg IDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLWpvaW4tbWV0aG9kIj4KKyAgPHRpdGxlPkpvaW4gTWV0 aG9kIEFkdmljZTwvdGl0bGU+CisgICA8c3lub3BzaXM+Citqb2luX21ldGhvZF9uYW1lKDxyZXBs YWNlYWJsZT5qb2luX21ldGhvZF9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKKworPHBocmFz ZT53aGVyZSA8cmVwbGFjZWFibGU+am9pbl9tZXRob2RfbmFtZTwvcmVwbGFjZWFibGU+IGlzOjwv cGhyYXNlPgorCit7IE1FUkdFX0pPSU5fTUFURVJJQUxJWkUgfCBNRVJHRV9KT0lOX1BMQUlOIHwg TkVTVEVEX0xPT1BfTUFURVJJQUxJWkUgfCBORVNURURfTE9PUF9QTEFJTiB8IEhBU0hfSk9JTiB9 CisKKzxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZT5qb2luX21ldGhvZF9pdGVtPC9yZXBsYWNlYWJs ZT4gaXM6PC9waHJhc2U+CisKK3sgPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2Vh YmxlPiB8CisoIDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4g XSApIH08L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAgICBKb2luIG1ldGhvZCBhZHZpY2Ugc3Bl Y2lmaWVzIHRoZSByZWxhdGlvbiwgb3Igc2V0IG9mIHJlbGF0aW9ucywgdGhhdCBzaG91bGQKKyAg ICBhcHBlYXIgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBqb2luIHVzaW5nIHRoZSBuYW1lZCBqb2lu IG1ldGhvZC4gRm9yCisgICAgZXhhbXBsZSwgPGxpdGVyYWw+SEFTSF9KT0lOKGEgYik8L2xpdGVy YWw+IG1lYW5zIHRoYXQgZWFjaCBvZgorICAgIDxsaXRlcmFsPmE8L2xpdGVyYWw+IGFuZCA8bGl0 ZXJhbD5iPC9saXRlcmFsPiBzaG91bGQgYXBwZWFyIG9uIHRoZSBpbm5lcgorICAgIHNpZGUgb2Yg YSBoYXNoIGpvaW47IGEgY29uZm9ybWluZyBwbGFuIG11c3QgY29udGFpbiBhdCBsZWFzdCB0d28g aGFzaAorICAgIGpvaW5zLCBvbmUgb2Ygd2hpY2ggaGFzIDxsaXRlcmFsPmE8L2xpdGVyYWw+IGFu ZCBub3RoaW5nIGVsc2Ugb24gdGhlCisgICAgaW5uZXIgc2lkZSwgYW5kIHRoZSBvdGhlciBvZiB3 aGljaCBoYXMgPGxpdGVyYWw+YjwvbGl0ZXJhbD4gYW5kIG5vdGhpbmcKKyAgICBlbHNlIG9uIHRo ZSBpbm5lciBzaWRlLiBPbiB0aGUgb3RoZXIgaGFuZCwKKyAgICA8bGl0ZXJhbD5IQVNIX0pPSU4o KGEgYikpPC9saXRlcmFsPiBtZWFucyB0aGF0IHRoZSBqb2luIHByb2R1Y3Qgb2YKKyAgICA8bGl0 ZXJhbD5hPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+YjwvbGl0ZXJhbD4gc2hvdWxkIGFwcGVhciB0 b2dldGhlcgorICAgIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgc2luZ2xlIGhhc2ggam9pbi4KKyAg IDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgTm90ZSB0aGF0IGpvaW4gbWV0aG9kIGFkdmljZSBp bXBsaWVzIGEgbmVnYXRpdmUgam9pbiBvcmRlciBjb25zdHJhaW50LgorICAgIFNpbmNlIHRoZSBu YW1lZCByZWxhdGlvbiBvciByZWxhdGlvbnMgbXVzdCBiZSBvbiB0aGUgaW5uZXIgc2lkZSBvZiBh IGpvaW4KKyAgICB1c2luZyB0aGUgc3BlY2lmaWVkIG1ldGhvZCwgbm9uZSBvZiB0aGVtIGNhbiBi ZSB0aGUgZHJpdmluZyB0YWJsZSBmb3IgdGhlCisgICAgZW50aXJlIGpvaW4gcHJvYmxlbS4gTW9y ZW92ZXIsIG5vIHJlbGF0aW9uIGluc2lkZSB0aGUgc2V0IHNob3VsZCBiZSBqb2luZWQKKyAgICB0 byBhbnkgcmVsYXRpb24gb3V0c2lkZSB0aGUgc2V0IHVudGlsIGFsbCByZWxhdGlvbnMgd2l0aGlu IHRoZSBzZXQgaGF2ZQorICAgIGJlZW4gam9pbmVkIHRvIGVhY2ggb3RoZXIuIEZvciBleGFtcGxl LCBpZiB0aGUgYWR2aWNlIHNwZWNpZmllcworICAgIDxsaXRlcmFsPkhBU0hfSk9JTigoYSBiKSk8 L2xpdGVyYWw+IGFuZCB0aGUgc3lzdGVtIGJlZ2lucyBieSBqb2luaW5nIGVpdGhlcgorICAgIG9m IHRob3NlIHRvIHNvbWUgdGhpcmQgcmVsYXRpb24gPGxpdGVyYWw+YzwvbGl0ZXJhbD4sIHRoZSBy ZXN1bHRpbmcKKyAgICBwbGFuIGNvdWxkIG5ldmVyIGJlIGNvbXBsaWFudCB3aXRoIHRoZSByZXF1 ZXN0IHRvIHB1dCBleGFjdGx5IHRob3NlIHR3bworICAgIHJlbGF0aW9ucyBvbiB0aGUgaW5uZXIg c2lkZSBvZiBhIGhhc2ggam9pbi4gV2hlbiB1c2luZyBib3RoIGpvaW4gb3JkZXIKKyAgICBhZHZp Y2UgYW5kIGpvaW4gbWV0aG9kIGFkdmljZSBmb3IgdGhlIHNhbWUgcXVlcnksIGl0IGlzIGEgZ29v ZCBpZGVhIHRvIG1ha2UKKyAgICBzdXJlIHRoYXQgdGhleSBkbyBub3QgbWFuZGF0ZSBpbmNvbXBh dGlibGUgam9pbiBvcmRlcnMuCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2VjdDMg aWQ9InBncGxhbmFkdmljZS1wYXJ0aXRpb253aXNlIj4KKyAgPHRpdGxlPlBhcnRpdGlvbndpc2Ug QWR2aWNlPC90aXRsZT4KKyAgIDxzeW5vcHNpcz4KK1BBUlRJVElPTldJU0UoPHJlcGxhY2VhYmxl PnBhcnRpdGlvbndpc2VfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJhc2U+d2hl cmUgPHJlcGxhY2VhYmxlPnBhcnRpdGlvbndpc2VfaXRlbTwvcmVwbGFjZWFibGU+IGlzOjwvcGhy YXNlPgorCit7IDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gfAorKCA8 cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9PC9zeW5v cHNpcz4KKworICAgPHBhcmE+CisgICAgV2hlbiBhcHBsaWVkIHRvIGEgc2luZ2xlIHRhcmdldCwg PGxpdGVyYWw+UEFSVElUSU9OV0lTRTwvbGl0ZXJhbD4KKyAgICBzcGVjaWZpZXMgdGhhdCB0aGUg c3BlY2lmaWVkIHRhYmxlIHNob3VsZCBub3QgYmUgcGFydCBvZiBhbnkgcGFydGl0aW9ud2lzZQor ICAgIGpvaW4uIFdoZW4gYXBwbGllZCB0byBhIGxpc3Qgb2YgdGFyZ2V0cywgPGxpdGVyYWw+UEFS VElUSU9OV0lTRTwvbGl0ZXJhbD4KKyAgICBzcGVjaWZpZXMgdGhhdCBleGFjdGx5IHRoYXQgc2V0 IG9mIHJlbGF0aW9ucyBzaG91bGQgYmUgam9pbmVkIGluCisgICAgcGFydGl0aW9ud2lzZSBmYXNo aW9uLiBOb3RlIHRoYXQsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBhZHZpY2UgaXMgc3BlY2lmaWVkLAor ICAgIG5vIHBhcnRpdGlvbndpc2Ugam9pbnMgd2lsbCBiZSBwb3NzaWJsZSBpZgorICAgIDxsaXRl cmFsPmVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSBvZmY8L2xpdGVyYWw+LgorICAgPC9wYXJh PgorCisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZpY2Utc2VtaWpvaW4tdW5p cXVlIj4KKyAgPHRpdGxlPlNlbWlqb2luIFVuaXF1ZW5lc3MgQWR2aWNlPC90aXRsZT4KKyAgIDxz eW5vcHNpcz4KK1NFTUlKT0lOX1VOSVFVRSg8cmVwbGFjZWFibGU+c2pfdW5pcXVlX2l0ZW08L3Jl cGxhY2VhYmxlPiBbIC4uLiBdKQorU0VNSUpPSU5fTk9OX1VOSVFVRSg8cmVwbGFjZWFibGU+c2pf dW5pcXVlX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorCis8cGhyYXNlPndoZXJlIDxyZXBs YWNlYWJsZT5zal91bmlxdWVfaXRlbTwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorCit7IDxy ZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gfAorKCA8cmVwbGFjZWFibGU+ YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9PC9zeW5vcHNpcz4KKworICAg PHBhcmE+CisgICAgVGhlIHBsYW5uZXIgc29tZXRpbWVzIGhhcyBhIGNob2ljZSBiZXR3ZWVuIGlt cGxlbWVudGluZyBhIHNlbWlqb2luCisgICAgZGlyZWN0bHkgYW5kIGltcGxlbWVtbnRpbmcgYSBz ZW1pam9pbiBieSBtYWtpbmcgdGhlIG51bGxhYmxlIHNpZGUgdW5pcXVlCisgICAgYW5kIHRoZW4g cGVyZm9ybWluZyBhbiBpbm5lciBqb2luLiA8bGl0ZXJhbD5TRU1JSk9JTl9VTklRVUU8L2xpdGVy YWw+CisgICAgc3BlY2lmaWVzIHRoZSBsYXR0ZXIgc3RyYXRlZ3ksIHdoaWxlIDxsaXRlcmFsPlNF TUlKT0lOX05PTl9VTklRVUU8L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRoZSBmb3JtZXIgc3Ry YXRlZ3kuIEluIGVpdGhlciBjYXNlLCB0aGUgYXJndW1lbnQgaXMgdGhlIHNpbmdsZQorICAgIHJl bGF0aW9uIG9yIGxpc3Qgb2YgcmVsYXRpb25zIHRoYXQgYXBwZWFyIGJlbmVhdGggdGhlIG51bGxh YmxlIHNpZGUgb2YgdGhlCisgICAgam9pbi4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisg IDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXBhcmFsbGVsLXF1ZXJ5aiI+CisgIDx0aXRsZT5QYXJh bGxlbCBRdWVyeSBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorR0FUSEVSKDxyZXBsYWNl YWJsZT5nYXRoZXJfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitHQVRIRVJfTUVSR0UoPHJl cGxhY2VhYmxlPmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK05PX0dBVEhFUig8 cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJh c2U+d2hlcmUgPHJlcGxhY2VhYmxlPmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJh c2U+CisKK3sgPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxy ZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9w c2lzPgorCisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5HQVRIRVI8L2xpdGVyYWw+IG9yIDxsaXRl cmFsPkdBVEhFUl9NRVJHRTwvbGl0ZXJhbD4gc3BlY2lmaWVzCisgICAgdGhhdCA8bGl0ZXJhbD5H YXRoZXI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4sCisgICAg cmVzcGVjdGl2ZWx5LCBzaG91bGQgYmUgcGxhY2VkIG9uIHRvcCBvZiB0aGUgc2luZ2xlIHJlbGF0 aW9uIHNwZWNpZmllZCBhcworICAgIGEgdGFyZ2V0LCBvciBvbiB0b3Agb2YgdGhlIGpvaW4gYmV0 d2VlbiB0aGUgbGlzdCBvZiByZWxhdGlvbnMgc3BlY2lmaWVkIGFzCisgICAgYSB0YXJnZXQuIFRo aXMgbWVhbnMgdGhhdCA8bGl0ZXJhbD5HQVRIRVIoYSBiIGMpPC9saXRlcmFsPiBpcyBhIHJlcXVl c3QKKyAgICBmb3IgdGhyZWUgZGlmZmVyZW50IDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4gbm9k ZXMsIHdoaWxlCisgICAgPGxpdGVyYWw+R0FUSEVSKChhIGIgYykpPC9saXRlcmFsPiBpcyBhIHJl cXVlc3QgZm9yIGEgc2luZ2xlCisgICAgPGxpdGVyYWw+R2F0aGVyPC9saXRlcmFsPiBub2RlIG9u IHRvcCBvZiBhIDMtd2F5IGpvaW4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxsaXRl cmFsPk5PX0dBVEhFUjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgbm8gPGxpdGVyYWw+R2F0aGVy PC9saXRlcmFsPiBvcgorICAgIDxsaXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4gbm9kZSBz aG91bGQgYXBwZWFyIGFib3ZlIGFueSBvZiB0aGUKKyAgICB0YXJnZXRzLCBidXQgaXQgb25seSBj b25zdHJhaW5zIHRoZSBwbGFubmluZyBvZiBhbiBpbmRpdmlkdWFsIHN1YnF1ZXJ5LAorICAgIGFu ZCBvdXRlciBzdWJxdWVyeSBsZXZlbHMgY2FuIHN0aWxsIHVzZSBwYXJhbGxlbCBxdWVyeS4gRm9y IGV4YW1wbGUsCisgICAgPGxpdGVyYWw+Tk9fR0FUSEVSKGlubmVyX2V4YW1wbGVAYW55XzEpPC9s aXRlcmFsPiBwcmVjbHVkZXMgdXNpbmcgYQorICAgIDxsaXRlcmFsPlBhcmFsbGVsIFNlcSBTY2Fu PC9saXRlcmFsPiB0byBhY2Nlc3MgdGhlCisgICAgPGxpdGVyYWw+aW5uZXJfZXhhbXBsZTwvbGl0 ZXJhbD4gdGFibGUgd2l0aGluIHRoZSA8bGl0ZXJhbD5hbnlfMTwvbGl0ZXJhbD4KKyAgICBzdWJx dWVyeSwgYnV0IGl0IGRvZXMgbm90IHByZXZlbnQgdGhlIHBsYW5uZXIgZnJvbSBwbGFjaW5nCisg ICAgPGxpdGVyYWw+U3ViUGxhbiBhbnlfMTwvbGl0ZXJhbD4gYmVuZWF0aCBhIDxsaXRlcmFsPkdh dGhlcjwvbGl0ZXJhbD4KKyAgICBvciA8bGl0ZXJhbD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+IG5v ZGUuIFRoZSBmb2xsb3dpbmcgcGxhbiBpcworICAgIGNvbXBhdGlibGUgd2l0aCA8bGl0ZXJhbD5O T19HQVRIRVIoaW5uZXJfZXhhbXBsZUBhbnlfMSk8L2xpdGVyYWw+LCBidXQKKyAgICBub3Qgd2l0 aCA8bGl0ZXJhbD5OT19HQVRIRVIob3V0ZXJfZXhhbXBsZSk8L2xpdGVyYWw+OgorICAgPC9wYXJh PgorCis8cHJvZ3JhbWxpc3Rpbmc+CisgRmluYWxpemUgQWdncmVnYXRlCisgICAtPiAgR2F0aGVy CisgICAgICAgICAtPiAgUGFydGlhbCBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBvdXRlcl9leGFtcGxlCisgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6IChzb21ldGhpbmcgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpCisgICAgICAgICAg ICAgICAgICAgICBTdWJQbGFuIGFueV8xCisgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBpbm5lcl9leGFtcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHNvbWV0aGluZ19lbHNlID4gMTAwKQorPC9wcm9ncmFtbGlzdGluZz4KKworICAgPHBhcmE+ CisgICAgSGVyZSBpcyB0aGUgcmV2ZXJzZSBjYXNlLCB0aGF0IGlzLCBhIHBsYW4gY29tcGF0aWJs ZSB3aXRoCisgICAgPGxpdGVyYWw+Tk9fR0FUSEVSKG91dGVyX2V4YW1wbGUpPC9saXRlcmFsPiBi dXQgbm90IHdpdGgKKyAgICA8bGl0ZXJhbD5OT19HQVRIRVIoaW5uZXJfZXhhbXBsZUBhbnlfMSk8 L2xpdGVyYWw+OgorICAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CisgQWdncmVnYXRlCisg ICAtPiAgU2VxIFNjYW4gb24gb3V0ZXJfZXhhbXBsZQorICAgICAgICAgRmlsdGVyOiAoc29tZXRo aW5nID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKQorICAgICAgICAgU3ViUGxhbiBhbnlf MQorICAgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICAgIC0+IFBhcmFsbGVsIFNl cSBTY2FuIG9uIGlubmVyX2V4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChz b21ldGhpbmdfZWxzZSA+IDEwMCkKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPC9zZWN0Mz4KKyA8 L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtZmVlZGJhY2siPgorICA8dGl0bGU+ QWR2aWNlIEZlZWRiYWNrPC90aXRsZT4KKworICA8cGFyYT4KKyAgIDxsaXRlcmFsPkVYUExBSU48 L2xpdGVyYWw+IHByb3ZpZGVzIGZlZWRiYWNrIG9uIHdoZXRoZXIgc3VwcGxpZWQgYWR2aWNlIHdh cworICAgc3VjY2Vzc2Z1bGx5IGFwcGxpZWQgdG8gdGhlIHF1ZXJ5IGluIHRoZSBmb3JtIG9mIGEg Y29tbWVudCBvbiBlYWNoIHBpZWNlCisgICBvZiBzdXBwbGllZCBhZHZpY2UuIEZvciBleGFtcGxl OgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnaGFzaF9qb2luKGYgZykgam9pbl9vcmRlcihmIGcpIGluZGV4X3NjYW4oZiBub19zdWNo X2luZGV4KSc7CitTRVQKK3JoYWFzPSMgRVhQTEFJTiAoQ09TVFMgT0ZGKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICogRlJPTSBqb19m YWN0IGYKKyAgICAgICAgTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQK KyAgICAgICAgTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKyAgICAg ICAgV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChk MS5pZCA9IGYuZGltMV9pZCkgQU5EIChkMi5pZCA9IGYuZGltMl9pZCkpCisgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oZiBub19zdWNo X2luZGV4KSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworICAgSEFTSF9KT0lO KGYpIC8qIG1hdGNoZWQgKi8KKyAgIEhBU0hfSk9JTihnKSAvKiBub3QgbWF0Y2hlZCAqLworICAg Sk9JTl9PUkRFUihmIGcpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCis8L3Byb2dyYW1saXN0aW5n PgorCisgIDxwYXJhPgorICAgRm9yIHRoaXMgcXVlcnksIDxsaXRlcmFsPmY8L2xpdGVyYWw+IGlz IGEgdmFsaWQgYWR2aWNlIHRhcmdldCwgYnV0CisgICA8bGl0ZXJhbD5nPC9saXRlcmFsPiBpcyBu b3QuIFRoZXJlZm9yZSwgdGhlIHJlcXVlc3QgdG8gcGxhY2UKKyAgIDxsaXRlcmFsPmY8L2xpdGVy YWw+IG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaCBqb2luIGlzIGxpc3RlZCBhcworICAgPGxp dGVyYWw+bWF0Y2hlZDwvbGl0ZXJhbD4sIGJ1dCB0aGUgcmVxdWVzdCB0byBwbGFjZSA8bGl0ZXJh bD5nPC9saXRlcmFsPgorICAgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoIGpvaW4gaXMgbGlz dGVkIGFzCisgICA8bGl0ZXJhbD5ub3QgbWF0Y2hlZDwvbGl0ZXJhbD4uIFRoZSA8bGl0ZXJhbD5K T0lOX09SREVSPC9saXRlcmFsPiBhZHZpY2UKKyAgIHRhZyBpbnZvbHZlcyBvbmUgdmFsaWQgdGFy Z2V0IGFuZCBvbmUgaW52YWxkIHRhcmdldCwgYW5kIHNvIGlzIGxpc3RlZCBhcworICAgPGxpdGVy YWw+cGFydGlhbGx5IG1hdGNoZWQ8L2xpdGVyYWw+LiBOb3RlIHRoYXQKKyAgIDxsaXRlcmFsPkhB U0hfSk9JTihmIGcpPC9saXRlcmFsPiBpcyBhY3R1YWxseSBhIHJlcXVlc3QgZm9yIHR3byBsb2dp Y2FsbHkKKyAgIHNlcGFyYXRlIGJlaGF2aW9ycywgd2hlcmVhcyA8bGl0ZXJhbD5KT0lOX09SREVS KGYgZyk8L2xpdGVyYWw+IGlzIGEgc2luZ2xlCisgICByZXF1ZXN0LiBXaGVuIHByb3ZpZGluZyBh ZHZpY2UgZmVlZGJhY2ssIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHNob3dzCisgICBlYWNo IGxvZ2ljYWwgcmVxdWVzdCBzZXBhcmF0ZWx5LCB0b2dldGhlciB3aXRoIGFsbCB0aGUgZmVlZGJh Y2sgYXBwbGljYWJsZQorICAgdG8gdGhhdCByZXF1ZXN0IHR5cGUuCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIEFkdmljZSBmZWVkYmFjayBjYW4gaW5jbHVkZSBhbnkgb2YgdGhlIGZvbGxsb3dp bmc6CisgIDwvcGFyYT4KKworICA8aXRlbWl6ZWRsaXN0PgorCisgICA8bGlzdGl0ZW0+CisgICAg PHBhcmE+CisgICAgIDxsaXRlcmFsPm1hdGNoZWQ8L2xpdGVyYWw+IG1lYW5zIHRoYXQgYWxsIG9m IHRoZSBzcGVjaWZpZWQgYWR2aWNlIHRhcmdldHMKKyAgICAgd2VyZSBvYnNlcnZlZCB0b2dldGhl ciBkdXJpbmcgcXVlcnkgcGxhbm5pbmcsIGF0IGEgdGltZSBhdCB3aGljaCB0aGUKKyAgICAgYWR2 aWNlIGNvdWxkIGJiZSBlbmZvcmNlZC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisg ICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFsPnBhcnRpYWxseSBtYXRjaGVk PC9saXRlcmFsPiBtZWFucyB0aGF0IHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlCisgICAgIHNwZWNp ZmllZCBhZHZpY2UgdGFyZ2V0cyB3ZXJlIG9ic2VydmVkIGR1cmluZyBxdWVyeSBwbGFubmluZywg b3IgYWxsCisgICAgIG9mIHRoZSBhZHZpY2UgdGFyZ2V0cyB3ZXJlIG9ic2VydmVkIGJ1dCBub3Qg dG9nZXRoZXIuIEZvciBleGFtcGxlLCB0aGlzCisgICAgIG1heSBoYXBwZW4gaWYgYWxsIHRoZSB0 YXJnZXRzIG9mIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+IGFkdmljZQorICAgICBpbmRp dmlkdWFsbHkgbWF0Y2ggdGhlIHF1ZXJ5LCBidXQgdGhlIHByb3Bvc2VkIGpvaW4gb3JkZXIgaXMg bm90IGxlZ2FsLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4K KyAgICA8cGFyYT4KKyAgICAgPGxpdGVyYWw+bm90IG1hdGNoZWQ8L2xpdGVyYWw+IG1lYW5zIHRo YXQgbm9uZSBvZiB0aGUKKyAgICAgc3BlY2lmaWVkIGFkdmljZSB0YXJnZXRzIHdlcmUgb2JzZXJ2 ZWQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nLiBUaGlzIG1heQorICAgICBoYXBwZW4gaWYgdGhlIGFk dmljZSBzaW1wbHkgZG9lc24ndCBtYXRjaCB0aGUgcXVlcnksIG9yIGl0IG1heQorICAgICBvY2N1 ciBpZiB0aGUgcmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUgcXVlcnkgd2FzIG5vdCBwbGFubmVkLCBw ZXJoYXBzCisgICAgIGJlY2F1c2UgaXQgd2FzIGdhdGVkIGJ5IGEgY29uZGl0aW9uIHRoYXQgd2Fz IHNpbXBsaWZpZWQgdG8gY29uc3RhbnQgZmFsc2UuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRl bT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5pbmFwcGxpY2Fi bGU8L2xpdGVyYWw+IG1lYW5zIHRoYXQgdGhlIGFkdmljZSB0YWcgY291bGQgbm90CisgICAgIGJl IGFwcGxpZWQgdG8gdGhlIGFkdmljZSB0YXJnZXRzIGZvciBzb21lIHJlYXNvbi4gRm9yIGV4YW1w bGUsIHRoaXMgd2lsbAorICAgICBoYXBwZW4gaWYgdGhlIHVzZSBvZiBhIG5vbmV4aXN0ZW50IGlu ZGV4IGlzIHJlcXVlc3RlZCwgb3IgaWYgYW4gYXR0ZW1wdAorICAgICBpcyBtYWRlIHRvIGNvbnRy b2wgc2VtaWpvaW4gdW5pcXVuZXNzIGZvciBhIG5vbi1zZW1pam9pbi4KKyAgICA8L3BhcmE+Cisg ICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFs PmNvbmZsaWN0aW5nPC9saXRlcmFsPiBtZWFucyB0aGF0IHR3byBvciBtb3JlIHBpZWNlcyBvZiBh ZHZpY2UKKyAgICAgcmVxdWVzdCBpbmNvbXBhdGlibGUgYmVoYXZpb3JzLiBGb3IgZXhhbXBsZSwg aWYgeW91IGFkdmlzZSBhIHNlcXVlbnRpYWwKKyAgICAgc2NhbiBhbmQgYW4gaW5kZXggc2NhbiBm b3IgdGhlIHNhbWUgdGFibGUsIGJvdGggcmVxdWVzdHMgd2lsbCBiZSBmbGFnZ2VkCisgICAgIGFz IGNvbmZsaWN0aW5nLiBUaGlzIGFsc28gY29tbW9ubHkgaGFwcGVucyBpZiBqb2luIG1ldGhvZCBh ZHZpY2Ugb3IKKyAgICAgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UgaW1wbGllcyBhIGpvaW4g b3JkZXIgaW5jb21wYXRpYmxlIHdpdGggdGhlCisgICAgIG9uZSBleHBsaWNpdGx5IHNwZWNpZmll ZDsgc2VlCisgICAgIDx4cmVmIGxpbmtlbmQ9InBncGxhbmFkdmljZS1qb2luLW1ldGhvZCIgLz4u CisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJh PgorICAgICA8bGl0ZXJhbD5mYWlsZWQ8L2xpdGVyYWw+IG1lYW5zIHRoYXQgcXVlcnkgcGxhbiBk b2VzIG5vdCBjb21wbHkgd2l0aAorICAgICB0aGUgYWR2aWNlLiBUaGlzIG9ubHkgb2NjdXJzIGZv ciBlbnRyaWVzIHRoYXQgYXJlIGFsc28gc2hvd24gYXMKKyAgICAgPGxpdGVyYWw+bWF0Y2hlZDwv bGl0ZXJhbD4uIEl0IGZyZXF1ZW50bHkgb2NjdXJzIGZvciBlbnRyaWVzIHRoYXQgYXJlCisgICAg IGFsc28gbWFya2VkIGFzIDxsaXRlcmFsPmNvbmZsaWN0aW5nPC9saXRlcmFsPiBvcgorICAgICA8 bGl0ZXJhbD5pbmFwcGxpY2FibGU8L2xpdGVyYWw+LiBIb3dldmVyLCBpdCBjYW4gYWxzbyBvY2N1 ciB3aGVuIHRoZQorICAgICBhZHZpY2UgaXMgdmFsaWQgaW5zb2ZhciBhcyA8bGl0ZXJhbD5wZ19w bGFuX2FkdmljZTwvbGl0ZXJhbD4gaXMgYWJsZQorICAgICB0byBkZXRlcm1pbmUsIGJ1dCB0aGUg cGxhbm5lciBpcyBub3QgYWJsZSB0byBjb25zdHJ1Y3QgYSBsZWdhbAorICAgICBwbGFuIHRoYXQg Y2FuIGNvbXBseSB3aXRoIHRoZSBhZHZpY2UuIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQg dGhlCisgICAgIHNhbml0eSBjaGVja3MgcGVyZm9ybWVkIGJ5IDxsaXRlcmFsPnBnX3BsYW5fYWR2 aWNlPC9saXRlcmFsPiBhcmUgZmFpcmx5CisgICAgIHN1cGVyZmljaWFsIGFuZCBmb2N1c2VkIG1v c3RseSBvbiBsb29raW5nIGZvciBsb2dpY2FsIGluY29uc2lzdGVuY2llcyBpbgorICAgICB0aGUg YWR2aWNlIHN0cmluZzsgb25seSB0aGUgcGxhbm5lciBrbm93cyB3aGF0IHdpbGwgYWN0dWFsbHkg d29yay4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgIDwvaXRlbWl6ZWRsaXN0Pgor CisgIDxwYXJhPgorICAgQWxsIGFkdmljZSBzaG91bGQgYmUgbWFya2VkIGFzIGV4YWN0bHkgb25l IG9mIDxsaXRlcmFsPm1hdGNoZWQ8L2xpdGVyYWw+LAorICAgPGxpdGVyYWw+cGFydGlhbGx5IG1h dGNoZWQ8L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5ub3QgbWF0Y2hlZDwvbGl0ZXJhbD4uCisgIDwv cGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3Ii PgorICA8dGl0bGU+QWR2aWNlIENvbGxlY3RvcnM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgPGxp dGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGNhbiBiZSBjb25maWd1cmVkIHRvIGF1dG9t YXRpY2FsbHkKKyAgIGdlbmVyYXRlIGFkdmljZSBldmVyeSB0aW1lIGEgcXVlcnkgaXMgcGxhbm5l ZCBhbmQgc3RvcmUgdGhlIHF1ZXJ5IGFuZAorICAgdGhlIGdlbmVyYXRlZCBhZHZpY2Ugc3RyaW5n IGVpdGhlciBpbiBsb2NhbCBvciBzaGFyZWQgbWVtb3J5LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBUbyBlbmFibGUgYSBjb2xsZWN0b3IsIHlvdSBtdXN0IGZpcnN0IHNldCBhIGNvbGxlY3Rp b24gbGltaXQuIFdoZW4gdGhlCisgICBudW1iZXIgb2YgcXVlcmllcyBmb3Igd2hpY2ggYWR2aWNl IGhhcyBiZWVuIHN0b3JlZCBleGNlZWRzIHRoZSBjb2xsZWN0aW9uCisgICBsaW1pdCwgdGhlIG9s ZGVzdCBxdWVyaWVzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBhZHZpY2Ugd2lsbCBiZSBkaXNjYXJk ZWQuCisgICBUaGVuLCB5b3UgbXVzdCBhZGp1c3QgYSBzZXBhcmF0ZSBzZXR0aW5nIHRvIGFjdHVh bGx5IGVuYWJsZSBhZHZpY2UKKyAgIGNvbGxlY3Rpb24uIEZvciB0aGUgbG9jYWwgY29sbGVjdG9y LCBzZXQgdGhlIGNvbGxlY3Rpb24gbGltaXQgYnkgY29uZmlndXJpbmcKKyAgIDxsaXRlcmFsPnBn X3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8L2xpdGVyYWw+IHRvIGEgdmFsdWUK KyAgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgdGhlbiBlbmFibGUgYWR2aWNlIGNvbGxlY3Rpb24g Ynkgc2V0dGluZworICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0g dHJ1ZTwvbGl0ZXJhbD4uIEZvciB0aGUgc2hhcmVkCisgICBjb2xsZWN0b3IsIHRoZSBwcm9jZWR1 cmUgaXMgdGhlIHNhbWUsIGV4Y2VwdCB0aGF0IHRoZSBuYW1lcyBvZiB0aGUgc2V0dGluZ3MKKyAg IGFyZSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwvbGl0 ZXJhbD4gYW5kCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC9s aXRlcmFsPi4gTm90ZSB0aGF0IHRoZSBsb2NhbAorICAgY29sbGVjdG9yIHN0b3JlcyBxdWVyeSB0 ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnksCisgICBhbmQg dGhlIHNoYXJlZCBjb2xsZWN0b3IgZG9lcyB0aGUgc2FtZSBpbiBkeW5hbWljIHNoYXJlZCBtZW1v cnksIHNvCisgICBjb25maWd1cmluZyBsYXJnZSBsaW1pdHMgbWF5IHJlc3VsdCBpbiBjb25zaWRl cmFibGUgbWVtb3J5IGNvbnN1bXB0aW9uLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBPbmNl IHRoZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCwgeW91IGNhbiBydW4gYW55IHF1ZXJpZXMgZm9yIHdo aWNoIHlvdSB3aXNoCisgICB0byBzZWUgdGhlIGdlbmVyYXRlZCBwbGFuIGFkdmljZS4gVGhlbiwg eW91IGNhbiBleGFtaW5lIHdoYXQgaGFzIGJlZW4KKyAgIGNvbGxlY3RlZCB1c2luZyB3aGljaGV2 ZXIgb2YKKyAgIDxsaXRlcmFsPlNFTEVDVCAqIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9h ZHZpY2UoKTwvbGl0ZXJhbD4gb3IKKyAgIDxsaXRlcmFsPlNFTEVDVCAqIEZST00gcGdfZ2V0X2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk8L2xpdGVyYWw+CisgICBjb3JyZXNwb25kcyB0byB0aGUg Y29sbGVjdG9yIHlvdSBlbmFibGVkLiBUbyBkaXNjYXJkIHRoZSBjb2xsZWN0ZWQgYWR2aWNlCisg ICBhbmQgcmVsZWFzZSBtZW1vcnksIHlvdSBjYW4gY2FsbAorICAgPGxpdGVyYWw+cGdfY2xlYXJf Y29sbGVjdGVkX2xvY2FsX2FkdmljZSgpPC9saXRlcmFsPgorICAgb3IgPGxpdGVyYWw+cGdfY2xl YXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIEluIGFkZGl0aW9uIHRvIHRoZSBxdWVyeSB0ZXh0cyBhbiBhZHZpY2Ugc3RyaW5n cywgdGhlIGFkdmljZSBjb2xsZWN0b3JzCisgICB3aWxsIGFsc28gc3RvcmUgdGhlIE9JRCBvZiB0 aGUgcm9sZSB0aGF0IGNhdXNlZCB0aGUgcXVlcnkgdG8gYmUgcGxhbm5lZCwKKyAgIHRoZSBPSUQg b2YgdGhlIGRhdGFiYXNlIGluIHdoaWNoIHRoZSBxdWVyeSB3YXMgcGxhbm5lZCwgdGhlIHF1ZXJ5 IElELAorICAgYW5kIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBjb2xsZWN0aW9uIG9jY3VycmVkLiBU aGlzIG1vZHVsZSBkb2VzIG5vdAorICAgYXV0b21hdGljYWxseSBlbmFibGUgcXVlcnkgSUQgY29t cHV0YXRpb247IHRoZXJlZm9yZSwgaWYgeW91IHdhbnQgdGhlCisgICBxdWVyeSBJRCB2YWx1ZSB0 byBiZSBwb3B1bGF0ZWQgaW4gY29sbGVjdGVkIGFkdmljZSwgYmUgc3VyZSB0byBjb25maWd1cmUK KyAgIDxsaXRlcmFsPmVuYWJsZV9xdWVyeV9pZCA9IG9uPC9saXRlcmFsPi4gT3RoZXJ3aXNlLCB0 aGUgcXVlcnkgSUQgbWF5CisgICBhbHdheXMgc2hvdyBhcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4K KyAgPC9wYXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWZ1bmN0 aW9ucyI+CisgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgTm90ZSB0 aGF0IHRoZXNlIGZ1bmN0aW9ucyB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZQorICAgPGxp dGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGV4dGVuc2lvbiBoYXMgYmVlbiBpbnN0YWxs ZWQgaW4gdGhlCisgICBjdXJyZW50IGRhdGFiYXNlLCB3aGljaCBpcyBub3QgbWFuZGF0b3J5LCBz aW5jZSBtdWNoIG9mIHRoZSBmdW5jdGlvbmFsaXR5CisgICBvZiB0aGlzIG1vZHVsZSBjYW4gYmUg dXNlZCB3aXRob3V0IGluc3RhbGxpbmcgdGhlIGV4dGVuc2lvbi4KKyAgPC9wYXJhPgorCisgIDx2 YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5j dGlvbj5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgcmV0dXJucyB2b2lkPC9mdW5j dGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFyX2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4K KworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZW1vdmVzIGFsbCBjb2xsZWN0 ZWQgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZyb20gYmFja2VuZC1sb2NhbAorICAg ICAgbWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdf Z2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSByZXR1cm5zIHNldG9mIChpZCBiaWdpbnQsCisg ICAgICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlkIGJpZ2ludCwgY29sbGVjdGlvbl90 aW1lIHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVyeSB0ZXh0LCBhZHZpY2UgdGV4dCk8L2Z1bmN0 aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfZ2V0X2NvbGxlY3RlZF9s b2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKwor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZXR1cm5zIGFsbCBxdWVyeSB0ZXh0 cyBhbmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBsb2NhbAorICAgICAgPGxpbmsgbGlu a2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19jbGVhcl9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZSgpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRl cm0+CisgICAgICA8cHJpbWFyeT5wZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZTwvcHJp bWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIFJlbW92ZXMgYWxsIGNvbGxlY3RlZCBxdWVyeSB0ZXh0cyBhbmQg YWR2aWNlIHN0cmluZ3MgZnJvbSBzaGFyZWQKKyAgICAgIG1lbW9yeS4KKyAgICAgPC9wYXJhPgor ICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZSgpIHJldHVybnMgc2V0b2YgKGlkIGJpZ2ludCwKKyAgICAgICAgdXNlcmlkIG9pZCwgZGJpZCBv aWQsIHF1ZXJ5aWQgYmlnaW50LCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisgICAgICAg IHF1ZXJ5IHRleHQsIGFkdmljZSB0ZXh0KTwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+Cisg ICAgICA8cHJpbWFyeT5wZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2U8L3ByaW1hcnk+Cisg ICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBh cmE+CisgICAgICBSZXR1cm5zIGFsbCBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3Mgc3Rv cmVkIGluIHRoZSBzaGFyZWQKKyAgICAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1jb2xs ZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0 Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWNvbmZpZy1wYXJhbXMiPgorICA8dGl0bGU+ Q29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzPC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorCisg ICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19wbGFuX2Fkdmlj ZS5hZHZpY2U8L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJt PgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWR2aWNlPC92YXJuYW1l PiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+Cisg ICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1l PnBnX3BsYW5fYWR2aWNlLmFkdmljZTwvdmFybmFtZT4gaXMgYW4gYWR2aWNlIHN0cmluZyB0byBi ZQorICAgICAgdXNlZCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBs aWVkX2FkdmljZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0 ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxh aW5fc3VwcGxpZWRfYWR2aWNlIDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3By aW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFp bl9zdXBwbGllZF9hZHZpY2U8L3Zhcm5hbWU+IGNhdXNlcworICAgICAgPGxpdGVyYWw+RVhQTEFJ TjwvbGl0ZXJhbD4gdG8gYWx3YXlzIHNob3cgYW55IHN1cHBsaWVkIGFkdmljZSBhbmQgdGhlCisg ICAgICBhc3NvY2lhdGVkCisgICAgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtZmVlZGJh Y2siPmFkdmljZSBmZWVkYmFjazwvbGluaz4uCisgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8 bGl0ZXJhbD50cnVlPC9saXRlcmFsPi4gSWYgc2V0IHRvCisgICAgICA8bGl0ZXJhbD5mYWxzZTwv bGl0ZXJhbD4sIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBkaXNwbGF5ZWQgb25seSB3aGVuCisg ICAgICA8bGl0ZXJhbD5FWFBMQUlOIChQTEFOX0FEVklDRSk8L2xpdGVyYWw+IGlzIHVzZWQuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFs d2F5c19zdG9yZV9hZHZpY2VfZGV0YWlsczwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+ KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZp Y2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzIDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBw YXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5h bHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHM8L3Zhcm5hbWU+IGFsbG93cworICAgICAgPGxpdGVy YWw+RVhQTEFJTjwvbGl0ZXJhbD4gdG8gc2hvdyBkZXRhaWxzIHJlbGF0ZWQgdG8gcGxhbiBhZHZp Y2UgZXZlbgorICAgICAgd2hlbiBwcmVwYXJlZCBxdWVyaWVzIGFyZSB1c2VkLiAgVGhlIGRlZmF1 bHQgdmFsdWUgaXMKKyAgICAgIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4gIFdoZW4gcGxhbm5p bmcgYSBwcmVwYXJlZCBxdWVyeSwgaXQgaXMgbm90CisgICAgICBwb3NzaWJsZSB0byBrbm93IHdo ZXRoZXIgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gd2lsbCBsYXRlciBiZSB1c2VkLAorICAg ICAgc28gYnkgZGVmYXVsdCwgdG8gcmVkdWNlIG92ZXJoZWFkLCA8bGl0ZXJhbD5wZ19wbGFuX2Fk dmljZTwvbGl0ZXJhbD4KKyAgICAgIHdpbGwgbm90IGdlbmVyYXRlIHBsYW4gYWR2aWNlIG9yIGZl ZWRiYWNrIG9uIHN1cHBsaWVkIGFkdmljZS4gVGhpcyBtZWFucworICAgICAgdGhhdCBpZiA8bGl0 ZXJhbD5FWFBMQUlOIEVYRUNVVEU8L2xpdGVyYWw+IGlzIHVzZWQgb24gdGhlIHByZXBhcmVkIHF1 ZXJ5LAorICAgICAgaXQgd2lsbCBub3QgYmUgYWJsZSB0byBzaG93IHRoaXMgaW5mb3JtYXRpb24u IENoYW5naW5nIHRoaXMgc2V0dGluZyB0bworICAgICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4g YXZvaWRzIHRoaXMgcHJvYmxlbSwgYnV0IGFkZHMgYWRkaXRpb25hbAorICAgICAgb3ZlcmhlYWQu IEl0IGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGVuYWJsZSB0aGlzIG9wdGlvbiBvbmx5IGlu CisgICAgICBzZXNzaW9ucyB3aGVyZSBpdCBpcyBuZWVkZWQsIHJhdGhlciB0aGFuIG9uIGEgc3lz dGVtLXdpZGUgYmFzaXMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJs aXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1l PnBnX3BsYW5fYWR2aWNlLmZlZWRiYWNrX3dhcm5pbmdzPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVh bjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19w bGFuX2FkdmljZS5mZWVkYmFja193YXJuaW5nczwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJh bWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIHNldCB0byB0cnVlLCA8dmFybmFtZT5w Z19wbGFuX2FkdmljZS5mZWVkYmFja193YXJuaW5nczwvdmFybmFtZT4KKyAgICAgIGVtaXRzIGEg d2FybmluZyB3aGVuZXZlciBzdXBwbGllZCBwbGFuIGFkdmljZSBpcyBub3Qgc3VjY2Vzc2Z1bGx5 CisgICAgICBlbmZvcmNlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+ZmFsc2U8L2xp dGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19wbGFu X2FkdmljZS5sb2NhbF9jb2xsZWN0b3I8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikK KyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNl LmxvY2FsX2NvbGxlY3RvcjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1h cnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAg ICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3I8 L3Zhcm5hbWU+IGVuYWJsZXMgdGhlCisgICAgICBsb2NhbCA8bGluayBsaW5rZW5kPSJwZ3BsYW5h ZHZpY2UtY29sbGVjdG9yIj5hZHZpY2UgY29sbGVjdG9yPC9saW5rPi4KKyAgICAgIFRoZSBkZWZh dWx0IHZhbHVlIGlzIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9s aW1pdDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgor ICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9s aW1pdDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwv aW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC92YXJu YW1lPiBzZXRzIHRoZQorICAgICAgbWF4aW11bSBudW1iZXIgb2YgcXVlcnkgdGV4dHMgYW5kIGFk dmljZSBzdHJpbmdzIHJldGFpbmVkIGJ5IHRoZQorICAgICAgbG9jYWwgPGxpbmsgbGlua2VuZD0i cGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisgICAgICBU aGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgor ICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rv cjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAg ICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFy bmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJt PgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFy bmFtZT5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC92YXJuYW1lPiBlbmFibGVzIHRo ZQorICAgICAgc2hhcmVkIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmFk dmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVy YWw+ZmFsc2U8L2xpdGVyYWw+LiAgT25seSBzdXBlcnVzZXJzIGFuZCB1c2VycworICAgICAgd2l0 aCB0aGUgYXBwcm9wcmlhdGUgPGxpdGVyYWw+U0VUPC9saXRlcmFsPiBwcml2aWxlZ2UgY2FuIGNo YW5nZSB0aGlzCisgICAgICBzZXR0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAg ICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwvdmFybmFt ZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1h cnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4K KyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5h bWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+IHNldHMg dGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmlu Z3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBzaGFyZWQgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2 aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisgICAgICBUaGUgZGVmYXVs dCB2YWx1ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4gIE9ubHkgc3VwZXJ1c2VycyBhbmQgdXNl cnMKKyAgICAgIHdpdGggdGhlIGFwcHJvcHJpYXRlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4gcHJp dmlsZWdlIGNhbiBjaGFuZ2UgdGhpcworICAgICAgc2V0dGluZy4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UudHJhY2VfbWFzazwvdmFybmFt ZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1h cnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UudHJhY2VfbWFzazwvdmFybmFtZT4gY29uZmlndXJh dGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4K KworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIDx2YXJuYW1lPnBnX3Bs YW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+IGlzCisgICAgICA8bGl0ZXJhbD50cnVlPC9s aXRlcmFsPiwgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IHdpbGwgcHJpbnQKKyAg ICAgIG1lc3NhZ2VzIGR1cmluZyBxdWVyeSBwbGFubmluZyBlYWNoIHRpbWUgdGhhdAorICAgICAg PGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGFsdGVycyB0aGUgbWFzayBvZiBhbGxv d2FibGUgcXVlcnkKKyAgICAgIHBsYW4gdHlwZXMgaW4gcmVzcG9uc2UgdG8gc3VwcGxpZWQgcGxh biBhZHZpY2UuIFRoZSBkZWZhdWx0IHZhbHVlcyBpcworICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xp dGVyYWw+LiBUaGUgbWVzc2FnZXMgcHJpbnRlZCBieSB0aGlzIHNldHRpbmcgYXJlIG5vdAorICAg ICAgZXhjZXB0ZWQgdG8gYmUgdXNlZnVsIGV4Y2VwdCBmb3IgcHVycG9zZXMgb2YgZGVidWdnaW5n IHRoaXMgbW9kdWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0i cGdwbGFuYWR2aWNlLWxpbWl0YXRpb25zIj4KKyAgPHRpdGxlPkxpbWl0YXRpb25zPC90aXRsZT4K KworICA8cGFyYT4KKyAgIEl0IGlzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gY29udHJvbCBh bnkgYXNwZWN0IG9mIHRoZSBwbGFubmVyJ3MgYmVoYXZpb3IKKyAgIHdpdGggcmVzcGVjdCB0byBh Z2dyZWdhdGlvbi4gVGhpcyBpbmNsdWRlcyBib3RoIHdoZXRoZXIgYWdncmVnYXRlcyBhcmUKKyAg IGNvbXB1dGVkIGJ5IHNvcnRpbmcgb3IgaGFzaGluZywgYW5kIGFsc28gd2hldGhlciBzdHJhdGVn aWVzIHN1Y2ggYXMKKyAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy1lbmFibGUtZWFnZXItYWdncmVnYXRl Ij5lYWdlciBhZ2dyZWdhdGlvbjwvbGluaz4gb3IKKyAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy1lbmFi bGUtcGFydGl0aW9ud2lzZS1hZ2dyZWdhdGUiPnBhcnRpdGlvbndpc2UKKyAgIGFnZ3JlZ2F0aW9u PC9saW5rPiBhcmUgdXNlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSXQgYWxzbyBpcyBj dXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIGNvbnRyb2wgYW55IGFzcGVjdCBvZiB0aGUgcGxhbm5l cidzCisgICBiZWhhdmlvciB3aXRoIHJlc3BlY3QgdG8gc2V0IG9wZXJhdGlvbnMgc3VjaCBhcyA8 bGl0ZXJhbD5VTklPTjwvbGl0ZXJhbD4KKyAgIG9yIDxsaXRlcmFsPklOVEVSU0VDVDwvbGl0ZXJh bD4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEFzIGRpc2N1c3NlZCBhYm92ZSB1bmRlciwg PGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWhvdy1pdC13b3JrcyI+SG93CisgICBJdCBXb3Jr czwvbGluaz4sIHRoZSB1c2Ugb2YgcGxhbiBhZHZpY2UgY2FuIG9ubHkgYWZmZWN0IHdoaWNoIHBs YW4KKyAgIHRoZSBwbGFubmVyIGNob29zZXMgZnJvbSBhbW9uZyB0aG9zZSBpdCBiZWxpZXZlcyB0 byBiZSB2aWFibGUuIEl0IGNhbiBuZXZlcgorICAgZm9yY2UgdGhlIGNob2ljZSBvZiBhIHBsYW4g d2hpY2ggdGhlIHBsYW5uZXIgcmVmdXNlZCB0byBjb25zaWRlciBpbiB0aGUKKyAgIGZpcnN0IHBs YWNlLgorICA8L3BhcmE+CisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWF1 dGhvciI+CisgIDx0aXRsZT5BdXRob3I8L3RpdGxlPgorCisgIDxwYXJhPgorICAgUm9iZXJ0IEhh YXMgPGVtYWlsPnJoYWFzQHBvc3RncmVzcWwub3JnPC9lbWFpbD4KKyAgPC9wYXJhPgorIDwvc2Vj dDI+CisKKzwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDI0MTk0NTczNGVj Li5iZWU5NWNhYWNhZiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM5ODEsNiArMzk4 MSw0NSBAQCBwZ191dWlkX3QKIHBnX3djaGFyCiBwZ193Y2hhcl90YmwKIHBncF9hcm1vcl9oZWFk ZXJzX3N0YXRlCitwZ3BhX2NvbGxlY3RlZF9hZHZpY2UKK3BncGFfYWR2aWNlX2l0ZW0KK3BncGFf YWR2aWNlX3RhZ190eXBlCitwZ3BhX2FkdmljZV90YXJnZXQKK3BncGFfaWRlbnRpZmllcgorcGdw YV9pbmRleF90YXJnZXQKK3BncGFfaW5kZXhfdHlwZQorcGdwYV9pdG1fdHlwZQorcGdwYV9qb19v dXRjb21lCitwZ3BhX2pvaW5fY2xhc3MKK3BncGFfam9pbl9tZW1iZXIKK3BncGFfam9pbl9zdGF0 ZQorcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2pvaW5fdW5yb2xsZXIKK3BncGFfbG9jYWxfYWR2 aWNlCitwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaworcGdwYV9vdXRwdXRfY29udGV4dAorcGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0CitwZ3BhX3BsYW5uZXJfc3RhdGUKK3BncGFfcWZfdHlwZQorcGdw YV9xdWVyeV9mZWF0dXJlCitwZ3BhX3JpX2NoZWNrZXIKK3BncGFfcmlfY2hlY2tlcl9rZXkKK3Bn cGFfc2NhbgorcGdwYV9zY2FuX3N0cmF0ZWd5CitwZ3BhX3NoYXJlZF9hZHZpY2UKK3BncGFfc2hh cmVkX2FkdmljZV9jaHVuaworcGdwYV9zaGFyZWRfc3RhdGUKK3BncGFfc2pfdW5pcXVlX3JlbAor cGdwYV90YXJnZXRfdHlwZQorcGdwYV90cm92ZQorcGdwYV90cm92ZV9lbnRyeQorcGdwYV90cm92 ZV9lbnRyeV9lbGVtZW50CitwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2gKK3BncGFfdHJvdmVfZW50cnlf a2V5CitwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCitwZ3BhX3Ryb3ZlX3Jlc3VsdAorcGdwYV90cm92 ZV9zbGljZQorcGdwYV91bnJvbGxlZF9qb2luCiBwZ3NvY2tldAogcGdzcWxfdGhpbmdfdAogcGdz c0VudHJ5Ci0tIAoyLjUxLjAKCg== --000000000000b8a4ce064b1e9b2d--