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 1w8U4g-000Zy7-1d for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2026 02:15:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8U4f-009Oh7-16 for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2026 02:15:53 +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 1w8U4e-009OgW-2v for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2026 02:15:53 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8U4c-00000000IlT-20T7 for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2026 02:15:53 +0000 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-6634bb959a2so2051011a12.1 for ; Thu, 02 Apr 2026 19:15:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775182549; cv=none; d=google.com; s=arc-20240605; b=RGtQjv6z9hQv55Vmeng8nXaJAZUXsl8xRW4FhRvpB881jZuOpSelB8KCOI8ARJl0As a5fZn6ubWMBad1/+6UTIdH4i5j4GsHcVZrwQi1MAnNaZDsf6UgTfqD6y7Md2JmBKQUZi j/0MrZQZe5Ws5KhEi7DttRE9D6BTNfc7zJERuiwsVJH0BtdWTHJ9rGVe1ZxzsXsnx4ce 9alrESHSl7Qc5mskUIEd2paSQCC8EE2Z5hZ+Lu2cOT+vCz4PQqerF5Sd6Rmth9JMOrgW VP7tRQy/5xRu/lV4dDCXZ8Hz80tZn5wxC0n63jHrNPceEyS2bxk9GczuraDU9UqjbPCz BAYQ== 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=RFe2dktoZ3CjyQyOlYmte80/DR3EEAixWweAFa2q4og=; fh=b332RXqPMQG6yKlTtoIVSWBX57YY7HRmNHg7QrTuj9s=; b=jivQ5GRnM9i/qyDgpa6RaB8BNY8mN8eKqdHC1F1KNjub4kTt8JMEX5s6GcJi7m/Bst SENKFMaTe1uzN5ff3SKWGmz9/dptsYd2FL5/wvu5gtuuTXdbqPLVg4kNh7geiS3752qH F7HpJ+kx+bGKGJtFco/Vy6eD61/wGCHXeQE9/PNm1uWaalyNy4rpnv/u1fKEyYU3A5PQ 1gW5IuP3u6VRhJ9+1AvF2OUedGTdmTCQ2Fq5+6dwC4c0gQiZLqma6hXcwpyAkb4UUB64 PnQoOzs3eKBC9Pj9HmCkEtq4Mgs0+swEKEDiUYSHwNAaB8XgPJ55jV0pLCSKXc95INHR pZtg==; 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=20251104; t=1775182549; x=1775787349; 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=RFe2dktoZ3CjyQyOlYmte80/DR3EEAixWweAFa2q4og=; b=HZMTpaowLzOrsw8GV9zVB5P++qBY+xrGu87tyy563mwKVbCnF9hfpvstAGJje0YeE2 Dd7wgXKsCIYNegFwgwAmtlBnK3Fbm1uU8xKXoqTguGW4JfnDksQo/x0qr2IhJanQYckk r6FGGwXT/f9M0kSiZqYA8bdP+/onIvG8XsnE8AZj4Rsp74T6h6onAFkE8RcfuqyeIwpU kVJ3pcryPvnUmGJLZ7y4yFS8HL7w3m8XN3j3ZPUTa/XgJrTbiRkDoisVVJuPnGQHPSVe fyJEQtI8HjhL226XIifU7hit2f/tTQOPPfsZjPaSTj3sTH2zd6hgL7M+iF6MQ38pONNZ ifDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775182549; x=1775787349; 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=RFe2dktoZ3CjyQyOlYmte80/DR3EEAixWweAFa2q4og=; b=nQj+Q064JvPsJJn48dvNPfT9T1tlMNIV7v4RlFRCLoHqVM8mWdjF4r04ffgYGZUfNZ pCiuocBYomUPRiWnLZgbE058IKDkOnWGDdVnoRtkuWK+yl85J+Qt82wBUIoT+pdCaB0I fWl6cmNOESCeAH4qqsWIYPB/MXIkU0x1WL7x3AOn5NetxCkliyaNLAa1eYhNtFAsuKsx xYJMoa0tCQMQdiyUkhTQKwxkGwYvdqWZf1muk/diwxfWFlccXFBiLM0G5fLh6xVIIIl2 WtKOYcRKOxYH4m5BPx0t6TmZoUO9ksbJ/pD0DAEMSuvoyEn4dvW66szP4VeftbxPncRo T+Pg== X-Forwarded-Encrypted: i=1; AJvYcCUJJ3LSwifGZ22cFWDQJqJNfgUwd9gWE6SJSCvlMBaUeVRtYYcFE7DU3AtG6pjJxBV2NO7pWCYW6k0WO/7N@lists.postgresql.org X-Gm-Message-State: AOJu0Yw4uwPoq6ZtcdGuBcC9eWfhM23yIrZunol1CmGt79POk48R3oTU qVBZmQI3evvds06+wWORBUIRPiYuzPkxRhFx25BRsBur2VrqwufDKAAq1SCxVjm7lxtZFDuHW1I VTfww5VJDESP9C+6IliMCS75Snva/ly0= X-Gm-Gg: ATEYQzwNITVAMsOWdZldzxBJmm/fVmY6y4pqU7mdr+8VSHUb3AEX1sxsIDlmgUKe5Ut 2Arky5UltBVUOMRWaBgmf3vk+/BrjKcW0CWUP4CJW7W31uvhP55r6jWhm8SKDg4Hgh/2NvwmZaB kFXK4ntoRs7HImQILJPMRdGdWoJVDfODgjY1K9bHBo+RmZkFGTzYCT8YXmgyMbI7aZjVUtsUj4D yKnuGKDygDQf1VvvunZWqXIcJZKjVn3DRIAPye4XMZf+TsPN7485jArPIZ6pctRo30cRUTdXFjG V+mrVB0zcZktTvp+Y79PD5C9h3Z8Ik15cQH6MhU= X-Received: by 2002:a17:907:3e9f:b0:b98:57ab:3c44 with SMTP id a640c23a62f3a-b9c672a4f17mr54084066b.7.1775182549102; Thu, 02 Apr 2026 19:15:49 -0700 (PDT) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> <1299934.1773938807@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Thu, 2 Apr 2026 22:15:36 -0400 X-Gm-Features: AQROBzDtVKAEP4-qJVKh589tc18f6vjZ38VrWmtWEpU8IryU6SbxWtsvBLrxtpM Message-ID: Subject: Re: pg_plan_advice To: Lukas Fittl Cc: Jakub Wartak , Tom Lane , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000040856d064e84e5b4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000040856d064e84e5b4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Apr 2, 2026 at 12:15=E2=80=AFPM Robert Haas = wrote: > So here's v24, also dropping pg_collect_advice. That version didn't actually pass CI. Here's v25. --=20 Robert Haas EDB: http://www.enterprisedb.com --00000000000040856d064e84e5b4 Content-Type: application/octet-stream; name="v25-0001-Add-pg_stash_advice-contrib-module.patch" Content-Disposition: attachment; filename="v25-0001-Add-pg_stash_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mni9uc190 RnJvbSA3NDUxYWRjZTM1MDYyNmU2NDc1NWFiZWVjZGU3NTdiM2RmYmQ2ZGUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjcgRmViIDIwMjYgMTY6NTg6MTQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyNSAx LzJdIEFkZCBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpUaGlzIG1vZHVsZSBhbGxv d3MgcGxhbiBhZHZpY2Ugc3RyaW5ncyB0byBiZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5CmZyb20g YW4gaW4tbWVtb3J5IGFkdmljZSBzdGFzaC4gQWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBk eW5hbWljCnNoYXJlZCBtZW1vcnkgYW5kIG11c3QgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRl ZCBhZnRlciBhIHNlcnZlcgpyZXN0YXJ0LiBJZiBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSBp cyBzZXQgdG8gdGhlIG5hbWUgb2YgYW4gYWR2aWNlCnN0YXNoLCBhbmQgaWYgcXVlcnkgaWRlbnRp ZmllcnMgYXJlIGVuYWJsZWQsIHRoZSBxdWVyeSBpZGVudGlmaWVyCmZvciBlYWNoIHF1ZXJ5IHdp bGwgYmUgbG9va2VkIHVwIGluIHRoZSBhZHZpY2Ugc3Rhc2ggYW5kIHRoZQphc3NvY2lhdGVkIGFk dmljZSBzdHJpbmcsIGlmIGFueSwgd2lsbCBiZSB1c2VkIGVhY2ggdGltZSB0aGF0IHF1ZXJ5Cmlz IHBsYW5uZWQuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2 aWV3ZWQtYnk6IEFsZXhhbmRyYSBXYW5nIDxhbGV4YW5kcmEud2FuZy5vc3NAZ21haWwuY29tPgpS ZXZpZXdlZC1ieTogRGF2aWQgRy4gSm9obnN0b24gPGRhdmlkLmcuam9obnN0b25AZ21haWwuY29t PgpSZXZpZXdlZC1ieTogSmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0YWtAZW50ZXJwcmlzZWRiLmNv bT4KLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx ICsKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlICAgICAgICAgICAgICB8ICAyNyAr CiAuLi4vZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dCAgICAgICAgICAgICAgfCAzMzEgKysr KysrKysrKwogLi4uL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZV91dGY4Lm91dCAgICAgICAgIHwg IDE2ICsKIC4uLi9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2VfdXRmOF8xLm91dCAgICAgICB8ICAg OCArCiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgMzcg KysKIC4uLi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0xLjAuc3FsICB8ICA0MyAr KwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMgICAgIHwgNjA1ICsr KysrKysrKysrKysrKysrKwogLi4uL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29u dHJvbCAgIHwgICA1ICsKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5o ICAgICB8ICA5OSArKysKIC4uLi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5z cWwgICB8IDE1MCArKysrKwogLi4uL3NxbC9wZ19zdGFzaF9hZHZpY2VfdXRmOC5zcWwgICAgICAg ICAgICAgIHwgIDE2ICsKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNoZnVuY3MuYyAgICAg ICAgICB8IDMwNyArKysrKysrKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAgICAgICAg ICAgICAgIHwgMjE2ICsrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICAgICAgICAgICB8ICAgNiArCiAxOCBmaWxlcyBjaGFuZ2VkLCAxODcwIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL2V4cGVjdGVkL3BnX3N0YXNo X2FkdmljZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9l eHBlY3RlZC9wZ19zdGFzaF9hZHZpY2VfdXRmOC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2VfdXRmOF8xLm91dAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNl LS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdf c3Rhc2hfYWR2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5zcWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9zcWwvcGdfc3Rhc2hfYWR2aWNlX3V0Zjguc3Fs CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3Rhc2hmdW5jcy5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbAoKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IGRkMDRj MjBhY2QyLi43ZDkxZmU3N2RiMyAxMDA2NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9j b250cmliL01ha2VmaWxlCkBAIC0zNiw2ICszNiw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX292ZXJl eHBsYWluIFwKIAkJcGdfcGxhbl9hZHZpY2UgXAogCQlwZ19wcmV3YXJtCVwKKwkJcGdfc3Rhc2hf YWR2aWNlCVwKIAkJcGdfc3RhdF9zdGF0ZW1lbnRzIFwKIAkJcGdfc3VyZ2VyeQlcCiAJCXBnX3Ry Z20JCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1 aWxkCmluZGV4IDVhNzUyZWFjMzQ3Li5lYmI3ZjgzZDhjNSAxMDA2NDQKLS0tIGEvY29udHJpYi9t ZXNvbi5idWlsZAorKysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC01MSw2ICs1MSw3IEBAIHN1 YmRpcigncGdfb3ZlcmV4cGxhaW4nKQogc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJkaXIo J3BnX3ByZXdhcm0nKQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKK3N1YmRpcigncGdfc3Rhc2hfYWR2 aWNlJykKIHN1YmRpcigncGdfc3RhdF9zdGF0ZW1lbnRzJykKIHN1YmRpcigncGdzdGF0dHVwbGUn KQogc3ViZGlyKCdwZ19zdXJnZXJ5JykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2 aWNlL01ha2VmaWxlIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY3NjcwYzJkNGI2Ci0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyNyBAQAor IyBjb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfc3Rh c2hfYWR2aWNlCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19zdGFzaF9hZHZpY2UubyBc CisJc3Rhc2hmdW5jcy5vCisKK0VYVEVOU0lPTiA9IHBnX3N0YXNoX2FkdmljZQorREFUQSA9IHBn X3N0YXNoX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJwZ19zdGFzaF9hZHZpY2UgLSBz dG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZSIKKworUkVHUkVTUyA9IHBn X3N0YXNoX2FkdmljZSBwZ19zdGFzaF9hZHZpY2VfdXRmOAorRVhUUkFfSU5TVEFMTCA9IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NQUEZMQUdTID0gLUkkKGlu Y2x1ZGVkaXJfc2VydmVyKS9leHRlbnNpb24KK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6 PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK1BH X0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3N1YmRp ciA9IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNk aXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0IGIvY29udHJpYi9w Z19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzg4ZGE4NTRhYTcKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0CkBA IC0wLDAgKzEsMzMxIEBACitDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2FkdmljZTsKK1NFVCBj b21wdXRlX3F1ZXJ5X2lkID0gb247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDA7CistLSBIZWxwZXI6IGV4dHJhY3QgcXVlcnkgaWRlbnRpZmllciBmcm9tIEVYUExBSU4g VkVSQk9TRSBvdXRwdXQuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBnZXRfcXVlcnlfaWQo cXVlcnlfdGV4dCB0ZXh0KSBSRVRVUk5TIGJpZ2ludAorTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAor REVDTEFSRQorICAgIGxpbmUgdGV4dDsKKyAgICBxaWQgYmlnaW50OworQkVHSU4KKyAgICBGT1Ig bGluZSBJTiBFWEVDVVRFICdFWFBMQUlOIChWRVJCT1NFLCBGT1JNQVQgVEVYVCkgJyB8fCBxdWVy eV90ZXh0CisgICAgTE9PUAorICAgICAgICBJRiBsaW5lIH4gJ1F1ZXJ5IElkZW50aWZpZXI6JyBU SEVOCisgICAgICAgICAgICBxaWQgOj0gcmVnZXhwX3JlcGxhY2UobGluZSwgJy4qUXVlcnkgSWRl bnRpZmllcjpccyooLT9cZCspLionLCAnXDEnKTo6YmlnaW50OworICAgICAgICAgICAgUkVUVVJO IHFpZDsKKyAgICAgICAgRU5EIElGOworICAgIEVORCBMT09QOworICAgIFJBSVNFIEVYQ0VQVElP TiAnUXVlcnkgSWRlbnRpZmllciBub3QgZm91bmQgaW4gRVhQTEFJTiBvdXRwdXQnOworRU5EOwor JCQ7CitDUkVBVEUgVEFCTEUgYWFfZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0 ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNF UlQgSU5UTyBhYV9kaW0xIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVy IHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAp IGc7CitWQUNVVU0gQU5BTFlaRSBhYV9kaW0xOworQ1JFQVRFIFRBQkxFIGFhX2RpbTIgKGlkIGlu dGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQsIGRpbTIsIHZhbDIp CisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2RpbTI7CitD UkVBVEUgVEFCTEUgYWFfZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50 ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGFhX2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIg bm90IG51bGwgcmVmZXJlbmNlcyBhYV9kaW0yIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEs IChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFM WVpFIGFhX2ZhY3Q7CistLSBHZXQgdGhlIHF1ZXJ5IGlkZW50aWZpZXIuCitTRUxFQ1QgZ2V0X3F1 ZXJ5X2lkKCQkCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBP TiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9 IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworJCQpIEFTIHFpZCBcZ3NldAor LS0gQ3JlYXRlIGFuIGFkdmljZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2aWNlIGF0IGl0 LgorU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKKyBwZ19j cmVhdGVfYWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKKy0t IFJ1biBvdXIgdGVzdCBxdWVyeSBmb3IgdGhlIGZpcnN0IHRpbWUgd2l0aCBubyBzdGFzaGVkIGFk dmljZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYWFfZmFjdCBmIExFRlQg Sk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7Cisg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo Zi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6 IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYK KyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGlt MiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFz aAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorKDExIHJvd3MpCisKKy0tIEZvcmNlIGFuIGluZGV4IHNjYW4gb24g ZGltMQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlk JywKKwknSU5ERVhfU0NBTihkMSBhYV9kaW0xX3BrZXkpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2 aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWFfZGltMV9wa2V5 IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihkMSBhYV9kaW0xX3BrZXkpIC8qIG1hdGNo ZWQgKi8KKygxMyByb3dzKQorCistLSBGb3JjZSBhbiBhbHRlcm5hdGl2ZSBqb2luIG9yZGVyCitT RUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidxaWQnLAorCSdq b2luX29yZGVyKGYgZDEgZDIpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg KiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQx LmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2 YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAtPiAgSGFzaCBK b2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2Rp bTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBtYXRjaGVkICovCisoMTMgcm93cykK KworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VMRUNUIHBnX3NldF9z dGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVTVEVEX0xPT1BfUExB SU4oZDEpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2Zh Y3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChm LmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBk MgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBhYV9kaW0xX3BrZXkgb24gYWFfZGltMSBkMQorICAgICAgICAgSW5kZXggQ29u ZDogKGlkID0gZi5kaW0xX2lkKQorICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihkMSkgLyogbWF0Y2hlZCAqLwor KDEyIHJvd3MpCisKKy0tIEFkZCBhIHVzZWxlc3MgZXh0cmEgZW50cnkgdG8gb3VyIHRlc3Qgc3Rh c2guIFNob3VsZG4ndCBjaGFuZ2UgdGhlIHJlc3VsdAorLS0gZnJvbSB0aGUgcHJldmlvdXMgdGVz dC4KKy0tIChJZiB3ZSdyZSB1bmx1Y2t5IGVub3VnaCB0aGF0IHRoaXMgZXZlciBmYWlscyBkdWUg dG8gcXVlcnkgSUQgYWN0dWFsbHkKKy0tIGJlaW5nIDEsIHRoZW4ganVzdCBwdXQgc29tZSBvdGhl ciBjb25zdGFudCBoZXJlLiBTZWVtcyB1bmxpa2VseS4pCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRf YWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgMSwgJ1NFUV9TQ0FOKGQxKScpOworIHBnX3NldF9zdGFz aGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWFfZGltMV9wa2V5 IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltMV9pZCkKKyAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVT VEVEX0xPT1BfUExBSU4oZDEpIC8qIG1hdGNoZWQgKi8KKygxMiByb3dzKQorCistLSBUcnkgYW4g ZW1wdHkgc3Rhc2ggdG8gYmUgc3VyZSBpdCBkb2VzIG5vdGhpbmcKK1NFTEVDVCBwZ19jcmVhdGVf YWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CisgcGdfY3JlYXRlX2FkdmljZV9z dGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRVQgcGdfc3Rh c2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19lbXB0eV9zdGFzaCc7CitFWFBMQUlOIChD T1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEg T04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQg PSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5p ZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQy LmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2ZhY3QgZgorICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0yIGQyCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisoMTEgcm93cykKKworLS0gVGVzdCB0aGF0IHdlIGNhbiBsaXN0IGVhY2ggc3Rhc2ggaW5kaXZp ZHVhbGx5IGFuZCBhbGwgb2YgdGhlbSB0b2dldGhlciwKKy0tIGJ1dCBub3QgYSBub25leGlzdGVu dCBzdGFzaC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkg c3Rhc2hfbmFtZTsKKyAgICAgc3Rhc2hfbmFtZSAgICAgIHwgbnVtX2VudHJpZXMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3NfZW1wdHlfc3Rhc2ggfCAgICAg ICAgICAgMAorIHJlZ3Jlc3Nfc3Rhc2ggICAgICAgfCAgICAgICAgICAgMgorKDIgcm93cykKKwor U0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dldF9hZHZpY2Vfc3Rh c2hfY29udGVudHMoJ3JlZ3Jlc3Nfc3Rhc2gnKSBPUkRFUiBCWSBhZHZpY2Vfc3RyaW5nOworICBz dGFzaF9uYW1lICAgfCAgICAgYWR2aWNlX3N0cmluZyAgICAgCistLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX3N0YXNoIHwgTkVTVEVEX0xPT1BfUExBSU4o ZDEpCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQorKDIgcm93cykKKworU0VMRUNUIHN0 YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRl bnRzKCdyZWdyZXNzX2VtcHR5X3N0YXNoJykKKwkgT1JERVIgQlkgYWR2aWNlX3N0cmluZzsKKyBz dGFzaF9uYW1lIHwgYWR2aWNlX3N0cmluZyAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0K KygwIHJvd3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdf Z2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhOVUxMKSBPUkRFUiBCWSBhZHZpY2Vfc3RyaW5nOwor ICBzdGFzaF9uYW1lICAgfCAgICAgYWR2aWNlX3N0cmluZyAgICAgCistLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX3N0YXNoIHwgTkVTVEVEX0xPT1BfUExB SU4oZDEpCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQorKDIgcm93cykKKworU0VMRUNU IHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2Nv bnRlbnRzKCdub19zdWNoX3N0YXNoJykKKwkgT1JERVIgQlkgYWR2aWNlX3N0cmluZzsKK0VSUk9S OiAgYWR2aWNlIHN0YXNoICJub19zdWNoX3N0YXNoIiBkb2VzIG5vdCBleGlzdAorLS0gVGVzdCB0 aGF0IHdlIGNhbiByZW1vdmUgYWR2aWNlLgorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgn cmVncmVzc19zdGFzaCcsIDoncWlkJywgbnVsbCk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VUIHBnX3N0YXNoX2Fkdmlj ZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3Nfc3Rhc2gnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9 IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVS RSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFz aCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFh X2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorKDExIHJvd3MpCisK K1NFTEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFt ZTsKKyAgICAgc3Rhc2hfbmFtZSAgICAgIHwgbnVtX2VudHJpZXMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3NfZW1wdHlfc3Rhc2ggfCAgICAgICAgICAgMAor IHJlZ3Jlc3Nfc3Rhc2ggICAgICAgfCAgICAgICAgICAgMQorKDIgcm93cykKKworU0VMRUNUIHN0 YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVu dHMoJ3JlZ3Jlc3Nfc3Rhc2gnKSBPUkRFUiBCWSBhZHZpY2Vfc3RyaW5nOworICBzdGFzaF9uYW1l ICAgfCBhZHZpY2Vfc3RyaW5nIAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorIHJl Z3Jlc3Nfc3Rhc2ggfCBTRVFfU0NBTihkMSkKKygxIHJvdykKKworLS0gQ2FuJ3QgY3JlYXRlIGEg c3Rhc2ggdGhhdCBhbHJlYWR5IGV4aXN0cywgb3IgZHJvcCBvbmUgdGhhdCBkb2Vzbid0LgorU0VM RUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK0VSUk9SOiAgYWR2 aWNlIHN0YXNoICJyZWdyZXNzX3N0YXNoIiBhbHJlYWR5IGV4aXN0cworU0VMRUNUIHBnX2Ryb3Bf YWR2aWNlX3N0YXNoKCdub19zdWNoX3N0YXNoJyk7CitFUlJPUjogIGFkdmljZSBzdGFzaCAibm9f c3VjaF9zdGFzaCIgZG9lcyBub3QgZXhpc3QKKy0tIENhbid0IGFkZCB0byBvciByZW1vdmUgZnJv bSBhIHN0YXNoIHRoYXQgZG9lcyBub3QgZXhpc3QuCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2 aWNlKCdub19zdWNoX3N0YXNoJywgMSwgJ1NFUV9TQ0FOKHQpJyk7CitFUlJPUjogIGFkdmljZSBz dGFzaCAibm9fc3VjaF9zdGFzaCIgZG9lcyBub3QgZXhpc3QKK1NFTEVDVCBwZ19zZXRfc3Rhc2hl ZF9hZHZpY2UoJ25vX3N1Y2hfc3Rhc2gnLCAxLCBudWxsKTsKK0VSUk9SOiAgYWR2aWNlIHN0YXNo ICJub19zdWNoX3N0YXNoIiBkb2VzIG5vdCBleGlzdAorLS0gQ2FuJ3QgdXNlIHF1ZXJ5IElEIDAu CitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgMCwgJ1NFUV9T Q0FOKHQpJyk7CitFUlJPUjogIGNhbm5vdCBzZXQgYWR2aWNlIHN0cmluZyBmb3IgcXVlcnkgSUQg MAorLS0gU3Rhc2ggbmFtZXMgbXVzdCBiZSBub24tZW1wdHksIEFTQ0lJLCBhbmQgbm90IHRvbyBs b25nLCBhbmQgbXVzdCBsb29rCistLSBsaWtlIGlkZW50aWZpZXJzLgorU0VMRUNUIHBnX2NyZWF0 ZV9hZHZpY2Vfc3Rhc2goJycpOworRVJST1I6ICBhZHZpY2Ugc3Rhc2ggbmFtZSBtYXkgbm90IGJl IHplcm8gbGVuZ3RoCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgnYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYScpOwor RVJST1I6ICBhZHZpY2Ugc3Rhc2ggbmFtZXMgbWF5IG5vdCBiZSBsb25nZXIgdGhhbiA2MyBieXRl cworU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJyAgICcpOworRVJST1I6ICBhZHZpY2Ug c3Rhc2ggbmFtZSBtdXN0IGJlZ2luIHdpdGggYSBsZXR0ZXIgb3IgdW5kZXJzY29yZSBhbmQgY29u dGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0cywgYW5kIHVuZGVyc2NvcmVzCitTRVQgcGdfc3Rhc2hf YWR2aWNlLnN0YXNoX25hbWUgPSAnOTlib3R0bGVzJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBm b3IgcGFyYW1ldGVyICJwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSI6ICI5OWJvdHRsZXMiCitE RVRBSUw6ICBhZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IGJlZ2luIHdpdGggYSBsZXR0ZXIgb3IgdW5k ZXJzY29yZSBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0cywgYW5kIHVuZGVyc2NvcmVz CistLSBDbGVhbiB1cCBzdGF0ZSBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkuCitTRUxFQ1QgcGdf ZHJvcF9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKKyBwZ19kcm9wX2FkdmljZV9zdGFz aCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIHBnX2Ryb3Bf YWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CisgcGdfZHJvcF9hZHZpY2Vfc3Rh c2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZV91dGY4Lm91dCBi L2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZV91dGY4Lm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2M1MzI1NzFlZDUKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFz aF9hZHZpY2VfdXRmOC5vdXQKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIFRoaXMgdGVzdCBtdXN0 IGJlIHJ1biBpbiBhIGRhdGFiYXNlIHdpdGggVVRGLTggZW5jb2RpbmcsCisgKiBiZWNhdXNlIG90 aGVyIGVuY29kaW5ncyBkb24ndCBzdXBwb3J0IGFsbCB0aGUgY2hhcmFjdGVycyB1c2VkLgorICov CitTRUxFQ1QgZ2V0ZGF0YWJhc2VlbmNvZGluZygpIDw+ICdVVEY4JworICAgICAgIEFTIHNraXBf dGVzdCBcZ3NldAorXGlmIDpza2lwX3Rlc3QKK1xxdWl0CitcZW5kaWYKK1NFVCBjbGllbnRfZW5j b2RpbmcgPSB1dGY4OworLS0gTm9uLUFTQ0lJIHN0YXNoIG5hbWVzIHNob3VsZCBiZSByZWplY3Rl ZC4KK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdjYWbDqScpOworRVJST1I6ICBhZHZp Y2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCitTRVQg cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAnY2Fmw6knOworRVJST1I6ICBpbnZhbGlkIHZh bHVlIGZvciBwYXJhbWV0ZXIgInBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lIjogImNhZsOpIgor REVUQUlMOiAgYWR2aWNlIHN0YXNoIG5hbWUgbXVzdCBub3QgY29udGFpbiBub24tQVNDSUkgY2hh cmFjdGVycwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdf c3Rhc2hfYWR2aWNlX3V0ZjhfMS5vdXQgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3Rl ZC9wZ19zdGFzaF9hZHZpY2VfdXRmOF8xLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMzdhZWFkODljMGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0 YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2VfdXRmOF8xLm91dApAQCAtMCwwICsx LDggQEAKKy8qCisgKiBUaGlzIHRlc3QgbXVzdCBiZSBydW4gaW4gYSBkYXRhYmFzZSB3aXRoIFVU Ri04IGVuY29kaW5nLAorICogYmVjYXVzZSBvdGhlciBlbmNvZGluZ3MgZG9uJ3Qgc3VwcG9ydCBh bGwgdGhlIGNoYXJhY3RlcnMgdXNlZC4KKyAqLworU0VMRUNUIGdldGRhdGFiYXNlZW5jb2Rpbmco KSA8PiAnVVRGOCcKKyAgICAgICBBUyBza2lwX3Rlc3QgXGdzZXQKK1xpZiA6c2tpcF90ZXN0Citc cXVpdApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQgYi9j b250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uOGZiY2ZjZjg2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDM3IEBACisjIENvcHlyaWdo dCAoYykgMjAyMi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitw Z19zdGFzaF9hZHZpY2Vfc291cmNlcyA9IGZpbGVzKAorICAncGdfc3Rhc2hfYWR2aWNlLmMnLAor ICAnc3Rhc2hmdW5jcy5jJworKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdf c3Rhc2hfYWR2aWNlX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBl eHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICdwZ19zdGFzaF9hZHZpY2UnLAorICAgICctLUZJ TEVERVNDJywgJ3BnX3N0YXNoX2FkdmljZSAtIHN0b3JlIGFuZCBhdXRvbWF0aWNhbGx5IGFwcGx5 IHBsYW4gYWR2aWNlJyxdKQorZW5kaWYKKworcGdfc3Rhc2hfYWR2aWNlID0gc2hhcmVkX21vZHVs ZSgncGdfc3Rhc2hfYWR2aWNlJywKKyAgcGdfc3Rhc2hfYWR2aWNlX3NvdXJjZXMsCisgIGluY2x1 ZGVfZGlyZWN0b3JpZXM6IFtwZ19wbGFuX2FkdmljZV9pbmMsIGluY2x1ZGVfZGlyZWN0b3JpZXMo Jy4nKV0sCisgIGt3YXJnczogY29udHJpYl9tb2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyAr PSBwZ19zdGFzaF9hZHZpY2UKKworaW5zdGFsbF9kYXRhKAorICAncGdfc3Rhc2hfYWR2aWNlLS0x LjAuc3FsJywKKyAgJ3BnX3N0YXNoX2FkdmljZS5jb250cm9sJywKKyAga3dhcmdzOiBjb250cmli X2RhdGFfYXJncywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICdwZ19zdGFzaF9hZHZpY2Un LAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3Vy cmVudF9idWlsZF9kaXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICdw Z19zdGFzaF9hZHZpY2UnLAorICAgICAgJ3BnX3N0YXNoX2FkdmljZV91dGY4JywKKyAgICBdLAor ICB9LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2 aWNlLS0xLjAuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0x LjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OGRlZGQ4ZWYx YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2Fk dmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlz IHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hv IFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxl LiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9u YW1lIHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY3JlYXRl X2FkdmljZV9zdGFzaCcKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf ZHJvcF9hZHZpY2Vfc3Rhc2goc3Rhc2hfbmFtZSB0ZXh0KQorUkVUVVJOUyB2b2lkCitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3BnX2Ryb3BfYWR2aWNlX3N0YXNoJworTEFOR1VBR0UgQyBTVFJJQ1Q7 CisKK0NSRUFURSBGVU5DVElPTiBwZ19zZXRfc3Rhc2hlZF9hZHZpY2Uoc3Rhc2hfbmFtZSB0ZXh0 LCBxdWVyeV9pZCBiaWdpbnQsCisJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcgdGV4dCkKK1JFVFVS TlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19zZXRfc3Rhc2hlZF9hZHZpY2UnCitM QU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKAorCU9V VCBzdGFzaF9uYW1lIHRleHQsCisJT1VUIG51bV9lbnRyaWVzIGJpZ2ludAorKQorUkVUVVJOUyBT RVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2FkdmljZV9zdGFzaGVz JworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0 YXNoX2NvbnRlbnRzKAorCUlOT1VUIHN0YXNoX25hbWUgdGV4dCwKKwlPVVQgcXVlcnlfaWQgYmln aW50LAorCU9VVCBhZHZpY2Vfc3RyaW5nIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitB UyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMnCitMQU5H VUFHRSBDOworCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2go dGV4dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2Ryb3BfYWR2aWNl X3N0YXNoKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRf YWR2aWNlX3N0YXNoX2NvbnRlbnRzKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBG VU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwg T04gRlVOQ1RJT04gcGdfc2V0X3N0YXNoZWRfYWR2aWNlKHRleHQsIGJpZ2ludCwgdGV4dCkgRlJP TSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9h ZHZpY2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNWU3YWRmODQ5YgotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCkBAIC0w LDAgKzEsNjA1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGFzaF9hZHZpY2Uu YworICoJICBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBt b2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0 YXNoX2FkdmljZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgorI2luY2x1ZGUgImNvbW1vbi9z dHJpbmcuaCIKKyNpbmNsdWRlICJub2Rlcy9xdWVyeWp1bWJsZS5oIgorI2luY2x1ZGUgInBnX3Bs YW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdfc3Rhc2hfYWR2aWNlLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKKy8qIFNoYXJlZCBtZW1vcnkg aGFzaCB0YWJsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgZHNoYXNoX3BhcmFtZXRlcnMgcGdzYV9z dGFzaF9kc2hhc2hfcGFyYW1ldGVycyA9IHsKKwlOQU1FREFUQUxFTiwKKwlzaXplb2YocGdzYV9z dGFzaCksCisJZHNoYXNoX3N0cmNtcCwKKwlkc2hhc2hfc3RyaGFzaCwKKwlkc2hhc2hfc3RyY3B5 LAorCUxXVFJBTkNIRV9JTlZBTElECQkJLyogZ2V0cyBzZXQgYXQgcnVudGltZSAqLworfTsKKwor c3RhdGljIGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMgPSB7 CisJc2l6ZW9mKHBnc2FfZW50cnlfa2V5KSwKKwlzaXplb2YocGdzYV9lbnRyeSksCisJZHNoYXNo X21lbWNtcCwKKwlkc2hhc2hfbWVtaGFzaCwKKwlkc2hhc2hfbWVtY3B5LAorCUxXVFJBTkNIRV9J TlZBTElECQkJLyogZ2V0cyBzZXQgYXQgcnVudGltZSAqLworfTsKKworLyogR1VDIHZhcmlhYmxl ICovCitzdGF0aWMgY2hhciAqcGdfc3Rhc2hfYWR2aWNlX3N0YXNoX25hbWUgPSAiIjsKKworLyog U2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLworcGdzYV9zaGFyZWRfc3RhdGUgKnBnc2Ffc3RhdGU7 Citkc2FfYXJlYSAqcGdzYV9kc2FfYXJlYTsKK2RzaGFzaF90YWJsZSAqcGdzYV9zdGFzaF9kc2hh c2g7Citkc2hhc2hfdGFibGUgKnBnc2FfZW50cnlfZHNoYXNoOworCisvKiBPdGhlciBnbG9iYWwg dmFyaWFibGVzICovCitzdGF0aWMgTWVtb3J5Q29udGV4dCBwZ19zdGFzaF9hZHZpY2VfbWN4dDsK KworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGljIGNoYXIgKnBnc2FfYWR2aXNvcihQ bGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJICBRdWVyeSAqcGFyc2UsCisJCQkJCQkgIGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkg IEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIGJvb2wgcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1 YyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCisJCQkJCQkJCQkgIEd1Y1NvdXJjZSBzb3Vy Y2UpOworc3RhdGljIHZvaWQgcGdzYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQg KmFyZyk7CitzdGF0aWMgYm9vbCBwZ3NhX2lzX2lkZW50aWZpZXIoY2hhciAqc3RyKTsKKworLyog U3Rhc2ggbmFtZSAtPiBzdGFzaCBJRCBoYXNoIHRhYmxlICovCisjZGVmaW5lIFNIX1BSRUZJWCBw Z3NhX3N0YXNoX25hbWVfdGFibGUKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFIHBnc2Ffc3Rhc2hf bmFtZQorI2RlZmluZSBTSF9LRVlfVFlQRSB1aW50NjQKKyNkZWZpbmUgU0hfS0VZIHBnc2Ffc3Rh c2hfaWQKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtleSkgaGFzaF9ieXRlcygoY29uc3QgdW5z aWduZWQgY2hhciAqKSAmKGtleSksIHNpemVvZih1aW50NjQpKQorI2RlZmluZSBTSF9FUVVBTCh0 YiwgYSwgYikgKGEgPT0gYikKKyNkZWZpbmUgU0hfU0NPUEUgZXh0ZXJuCisjZGVmaW5lIFNIX0RF RklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKKy8qCisgKiBJbml0aWFsaXplIHRo aXMgbW9kdWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCXZvaWQJCSgqYWRkX2Fk dmlzb3JfZm4pIChwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vayk7CisKKwkvKiBJZiBj b21wdXRlX3F1ZXJ5X2lkID0gJ2F1dG8nLCB3ZSB3b3VsZCBsaWtlIHF1ZXJ5IElEcy4gKi8KKwlF bmFibGVRdWVyeUlkKCk7CisKKwkvKiBEZWZpbmUgb3VyIEdVQ3MuICovCisJRGVmaW5lQ3VzdG9t U3RyaW5nVmFyaWFibGUoInBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lIiwKKwkJCQkJCQkgICAi TmFtZSBvZiB0aGUgYWR2aWNlIHN0YXNoIHRvIGJlIHVzZWQgaW4gdGhpcyBzZXNzaW9uLiIsCisJ CQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmcGdfc3Rhc2hfYWR2aWNlX3N0YXNoX25hbWUsCisJ CQkJCQkJICAgIiIsCisJCQkJCQkJICAgUEdDX1VTRVJTRVQsCisJCQkJCQkJICAgMCwKKwkJCQkJ CQkgICBwZ3NhX2NoZWNrX3N0YXNoX25hbWVfZ3VjLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJ ICAgTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3N0YXNoX2FkdmljZSIpOwor CisJLyogVGVsbCBwZ19wbGFuX2FkdmljZSB0aGF0IHdlIHdhbnQgdG8gcHJvdmlkZSBhZHZpY2Ug c3RyaW5ncy4gKi8KKwlhZGRfYWR2aXNvcl9mbiA9CisJCWxvYWRfZXh0ZXJuYWxfZnVuY3Rpb24o InBnX3BsYW5fYWR2aWNlIiwgInBnX3BsYW5fYWR2aWNlX2FkZF9hZHZpc29yIiwKKwkJCQkJCQkg ICB0cnVlLCBOVUxMKTsKKwkoKmFkZF9hZHZpc29yX2ZuKSAocGdzYV9hZHZpc29yKTsKK30KKwor LyoKKyAqIEdldCB0aGUgYWR2aWNlIHN0cmluZyB0aGF0IGhhcyBiZWVuIGNvbmZpZ3VyZWQgZm9y IHRoaXMgcXVlcnksIGlmIGFueSwKKyAqIGFuZCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJu IE5VTEwuCisgKi8KK3N0YXRpYyBjaGFyICoKK3Bnc2FfYWR2aXNvcihQbGFubmVyR2xvYmFsICpn bG9iLCBRdWVyeSAqcGFyc2UsCisJCQkgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vy c29yT3B0aW9ucywKKwkJCSBFeHBsYWluU3RhdGUgKmVzKQoreworCXBnc2FfZW50cnlfa2V5IGtl eTsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwljaGFyCSAgICphZHZpY2Vfc3RyaW5nOworCXVpbnQ2 NAkJc3Rhc2hfaWQ7CisKKwkvKgorCSAqIEV4aXQgcXVpY2tseSBpZiB0aGUgc3Rhc2ggbmFtZSBp cyBlbXB0eSBvciB0aGVyZSdzIG5vIHF1ZXJ5IElELgorCSAqLworCWlmIChwZ19zdGFzaF9hZHZp Y2Vfc3Rhc2hfbmFtZVswXSA9PSAnXDAnIHx8IHBhcnNlLT5xdWVyeUlkID09IDApCisJCXJldHVy biBOVUxMOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBpZiBub3QgYWxy ZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkK KwkJcGdzYV9hdHRhY2goKTsKKworCS8qCisJICogVHJhbnNsYXRlIHBnX3N0YXNoX2FkdmljZS5z dGFzaF9uYW1lIHRvIGFuIGludGVnZXIgSUQuCisJICoKKwkgKiBwZ3NhX2NoZWNrX3N0YXNoX25h bWVfZ3VjKCkgaGFzIGFscmVhZHkgdmFsaWRhdGVkIHRoZSBhZHZpY2Ugc3Rhc2gKKwkgKiBuYW1l LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgcGdzYV9jaGVja19zdGFzaF9uYW1lKCkgaGVyZS4K KwkgKi8KKwlzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHBnX3N0YXNoX2FkdmljZV9z dGFzaF9uYW1lKTsKKwlpZiAoc3Rhc2hfaWQgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgor CSAqIExvb2sgdXAgdGhlIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBnaXZlbiBzdGFzaCBJRCArIHF1 ZXJ5IElELgorCSAqCisJICogSWYgd2UgZmluZCBhbiBhZHZpY2Ugc3RyaW5nLCB3ZSBjb3B5IGl0 IGludG8gdGhlIGN1cnJlbnQgbWVtb3J5CisJICogY29udGV4dCwgcHJlc3VtYWJseSBzaG9ydC1s aXZlZCwgc28gdGhhdCB3ZSBjYW4gcmVsZWFzZSB0aGUgbG9jayBvbiB0aGUKKwkgKiBkc2hhc2gg ZW50cnkuIHBnX3BsYW5fYWR2aWNlIG9ubHkgbmVlZHMgdGhlIHZhbHVlIHRvIHJlbWFpbiBhbGxv Y2F0ZWQKKwkgKiBsb25nIGVub3VnaCBmb3IgaXQgdG8gYmUgcGFyc2VkLCBzbyB0aGlzIHNob3Vs ZCBiZSBnb29kIGVub3VnaC4KKwkgKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKHBnc2FfZW50 cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlrZXkucXVlcnlJZCA9 IHBhcnNlLT5xdWVyeUlkOworCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzYV9lbnRyeV9kc2hhc2gs ICZrZXksIGZhbHNlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYg KGVudHJ5LT5hZHZpY2Vfc3RyaW5nID09IEludmFsaWREc2FQb2ludGVyKQorCQlhZHZpY2Vfc3Ry aW5nID0gTlVMTDsKKwllbHNlCisJCWFkdmljZV9zdHJpbmcgPSBwc3RyZHVwKGRzYV9nZXRfYWRk cmVzcyhwZ3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkJZW50cnktPmFkdmljZV9zdHJpbmcpKTsK Kwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2FfZW50cnlfZHNoYXNoLCBlbnRyeSk7CisKKwkvKiBJ ZiB3ZSBmb3VuZCBhbiBhZHZpY2Ugc3RyaW5nLCBlbWl0IGEgZGVidWcgbWVzc2FnZS4gKi8KKwlp ZiAoYWR2aWNlX3N0cmluZyAhPSBOVUxMKQorCQllbG9nKERFQlVHMiwgInN1cHBseWluZyBhdXRv bWF0aWMgYWR2aWNlIGZvciBzdGFzaCBcIiVzXCIsIHF1ZXJ5IElEICUiIFBSSWQ2NCAiOiAlcyIs CisJCQkgcGdfc3Rhc2hfYWR2aWNlX3N0YXNoX25hbWUsIGtleS5xdWVyeUlkLCBhZHZpY2Vfc3Ry aW5nKTsKKworCXJldHVybiBhZHZpY2Vfc3RyaW5nOworfQorCisvKgorICogQXR0YWNoIHRvIHZh cmlvdXMgc3RydWN0dXJlcyBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkuCisgKgorICogVGhpcyBm dW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSByZXNpbGllbnQgYWdhaW5zdCBlcnJvcnMuIFRoYXQg aXMsIGlmIGl0CisgKiBmYWlscyBwYXJ0d2F5IHRocm91Z2gsIGl0IHNob3VsZCBiZSBwb3NzaWJs ZSB0byBjYWxsIGl0IGFnYWluLCByZXBlYXQgbm8KKyAqIHdvcmsgYWxyZWFkeSBjb21wbGV0ZWQs IGFuZCBwb3RlbnRpYWxseSBzdWNjZWVkIG9yIGF0IGxlYXN0IGdldCBmdXJ0aGVyIGlmCisgKiB3 aGF0ZXZlciBjYXVzZWQgdGhlIHByZXZpb3VzIGZhaWx1cmUgaGFzIGJlZW4gY29ycmVjdGVkLgor ICovCit2b2lkCitwZ3NhX2F0dGFjaCh2b2lkKQoreworCWJvb2wJCWZvdW5kOworCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dDsKKworCS8qCisJICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdG8g bWFrZSBzdXJlIHRoYXQgYW55IGNvbnRyb2wgc3RydWN0dXJlcworCSAqIGFsbG9jYXRlZCBpbiBs b2NhbCBtZW1vcnkgYXJlIHN1ZmZpY2llbnRseSBwZXJzaXN0ZW50LgorCSAqLworCWlmIChwZ19z dGFzaF9hZHZpY2VfbWN4dCA9PSBOVUxMKQorCQlwZ19zdGFzaF9hZHZpY2VfbWN4dCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJCSAicGdfc3Rh c2hfYWR2aWNlIiwKKwkJCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19zdGFzaF9hZHZpY2VfbWN4dCk7CisK KwkvKiBBdHRhY2ggdG8gdGhlIGZpeGVkLXNpemUgc3RhdGUgb2JqZWN0IGlmIG5vdCBhbHJlYWR5 IGRvbmUuICovCisJaWYgKHBnc2Ffc3RhdGUgPT0gTlVMTCkKKwkJcGdzYV9zdGF0ZSA9IEdldE5h bWVkRFNNU2VnbWVudCgicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJCQkJCQlzaXplb2YocGdzYV9z aGFyZWRfc3RhdGUpLAorCQkJCQkJCQkJCXBnc2FfaW5pdF9zaGFyZWRfc3RhdGUsCisJCQkJCQkJ CQkJJmZvdW5kLCBOVUxMKTsKKworCS8qIEF0dGFjaCB0byB0aGUgRFNBIGFyZWEgaWYgbm90IGFs cmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9kc2FfYXJlYSA9PSBOVUxMKQorCXsKKwkJZHNhX2hh bmRsZQlhcmVhX2hhbmRsZTsKKworCQlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBM V19FWENMVVNJVkUpOworCQlhcmVhX2hhbmRsZSA9IHBnc2Ffc3RhdGUtPmFyZWE7CisJCWlmIChh cmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFMSUQpCisJCXsKKwkJCXBnc2FfZHNhX2FyZWEg PSBkc2FfY3JlYXRlKHBnc2Ffc3RhdGUtPmRzYV90cmFuY2hlKTsKKwkJCWRzYV9waW4ocGdzYV9k c2FfYXJlYSk7CisJCQlwZ3NhX3N0YXRlLT5hcmVhID0gZHNhX2dldF9oYW5kbGUocGdzYV9kc2Ff YXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCQkJcGdzYV9kc2Ff YXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisJCWRzYV9waW5fbWFwcGluZyhw Z3NhX2RzYV9hcmVhKTsKKwl9CisKKwkvKiBBdHRhY2ggdG8gdGhlIHN0YXNoX25hbWUtPnN0YXNo X2lkIGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9zdGFzaF9k c2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5kbGUgc3Rhc2hfaGFuZGxlOwor CisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCXBn c2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9IHBnc2Ffc3RhdGUtPnN0YXNo X3RyYW5jaGU7CisJCXN0YXNoX2hhbmRsZSA9IHBnc2Ffc3RhdGUtPnN0YXNoX2hhc2g7CisJCWlm IChzdGFzaF9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ3NhX3N0 YXNoX2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJlYSwKKwkJCQkJCQkJCQkJICAm cGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJCQkJICBOVUxMKTsKKwkJCXBn c2Ffc3RhdGUtPnN0YXNoX2hhc2ggPQorCQkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUo cGdzYV9zdGFzaF9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsK KwkJCXBnc2Ffc3Rhc2hfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChwZ3NhX2RzYV9hcmVhLAorCQkJ CQkJCQkJCQkgICZwZ3NhX3N0YXNoX2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJCQkJCQkJCQkgIHN0 YXNoX2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBBdHRhY2ggdG8gdGhlIGVudHJ5IGhh c2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9lbnRyeV9kc2hhc2gg PT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5kbGUgZW50cnlfaGFuZGxlOworCisJCUxX TG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCXBnc2FfZW50 cnlfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9IHBnc2Ffc3RhdGUtPmVudHJ5X3RyYW5j aGU7CisJCWVudHJ5X2hhbmRsZSA9IHBnc2Ffc3RhdGUtPmVudHJ5X2hhc2g7CisJCWlmIChlbnRy eV9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ3NhX2VudHJ5X2Rz aGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJlYSwKKwkJCQkJCQkJCQkJICAmcGdzYV9l bnRyeV9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJCQkJICBOVUxMKTsKKwkJCXBnc2Ffc3Rh dGUtPmVudHJ5X2hhc2ggPQorCQkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUocGdzYV9l bnRyeV9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CisJCX0K KwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJCXBn c2FfZW50cnlfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChwZ3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJ CQkgICZwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJCQkJCQkJCQkgIGVudHJ5X2hh bmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBSZXN0b3JlIHByZXZpb3VzIG1lbW9yeSBjb250 ZXh0LiAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKKyAq IENoZWNrIHdoZXRoZXIgYW4gYWR2aWNlIHN0YXNoIG5hbWUgaXMgbGVnYWwsIGFuZCBzaWduYWwg YW4gZXJyb3IgaWYgbm90LgorICoKKyAqIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggcGdzYV9jaGVj a19zdGFzaF9uYW1lX2d1YywgYmVsb3cuCisgKi8KK3ZvaWQKK3Bnc2FfY2hlY2tfc3Rhc2hfbmFt ZShjaGFyICpzdGFzaF9uYW1lKQoreworCS8qIFJlamVjdCBlbXB0eSBhZHZpY2Ugc3Rhc2ggbmFt ZS4gKi8KKwlpZiAoc3Rhc2hfbmFtZVswXSA9PSAnXDAnKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJh ZHZpY2Ugc3Rhc2ggbmFtZSBtYXkgbm90IGJlIHplcm8gbGVuZ3RoIikpOworCisJLyogUmVqZWN0 IG92ZXJsb25nIGFkdmljZSBzdGFzaCBuYW1lcy4gKi8KKwlpZiAoc3RybGVuKHN0YXNoX25hbWUp ICsgMSA+IE5BTUVEQVRBTEVOKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFt ZXMgbWF5IG5vdCBiZSBsb25nZXIgdGhhbiAlZCBieXRlcyIsCisJCQkJCSAgIE5BTUVEQVRBTEVO IC0gMSkpOworCisJLyoKKwkgKiBSZWplY3Qgbm9uLUFTQ0lJIGFkdmljZSBzdGFzaCBuYW1lcywg c2luY2UgYWR2aWNlIHN0YXNoZXMgYXJlIHZpc2libGUKKwkgKiBhY3Jvc3MgYWxsIGRhdGFiYXNl cyBhbmQgdGhlIGVuY29kaW5ncyBvZiB0aG9zZSBkYXRhYmFzZXMgbWlnaHQgZGlmZmVyLgorCSAq LworCWlmICghcGdfaXNfYXNjaWkoc3Rhc2hfbmFtZSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFk dmljZSBzdGFzaCBuYW1lIG11c3Qgbm90IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKSk7 CisKKwkvKgorCSAqIFJlamVjdCB0aGluZ3MgdGhhdCBkbyBub3QgbG9vayBsaWtlIGlkZW50aWZp ZXJzLCBzaW5jZSB0aGUgYWJpbGl0eSB0bworCSAqIGNyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2ggd2l0 aCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgb3Igd2VpcmQgc3ltYm9scworCSAqIGluIHRoZSBu YW1lIGlzIG5vdCBsaWtlbHkgdG8gYmUgdXNlZnVsIHRvIGFueW9uZS4KKwkgKi8KKwlpZiAoIXBn c2FfaXNfaWRlbnRpZmllcihzdGFzaF9uYW1lKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNl IHN0YXNoIG5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUgYW5kIGNv bnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1bmRlcnNjb3JlcyIpKTsKK30KKworLyoK KyAqIEFzIGFib3ZlLCBidXQgZm9yIHRoZSBHVUMgY2hlY2tfaG9vay4gV2UgYWxsb3cgdGhlIGVt cHR5IHN0cmluZyBoZXJlLAorICogdGhvdWdoLCBhcyBlcXVpdmFsZW50IHRvIGRpc2FibGluZyB0 aGUgZmVhdHVyZS4KKyAqLworc3RhdGljIGJvb2wKK3Bnc2FfY2hlY2tfc3Rhc2hfbmFtZV9ndWMo Y2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCWNoYXIJ ICAgKnN0YXNoX25hbWUgPSAqbmV3dmFsOworCisJLyogUmVqZWN0IG92ZXJsb25nIGFkdmljZSBz dGFzaCBuYW1lcy4gKi8KKwlpZiAoc3RybGVuKHN0YXNoX25hbWUpICsgMSA+IE5BTUVEQVRBTEVO KQorCXsKKwkJR1VDX2NoZWNrX2VycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSk7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoImFkdmljZSBzdGFzaCBuYW1lcyBtYXkgbm90IGJl IGxvbmdlciB0aGFuICVkIGJ5dGVzIiwKKwkJCQkJCQlOQU1FREFUQUxFTiAtIDEpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBSZWplY3Qgbm9uLUFTQ0lJIGFkdmljZSBzdGFzaCBu YW1lcywgc2luY2UgYWR2aWNlIHN0YXNoZXMgYXJlIHZpc2libGUKKwkgKiBhY3Jvc3MgYWxsIGRh dGFiYXNlcyBhbmQgdGhlIGVuY29kaW5ncyBvZiB0aG9zZSBkYXRhYmFzZXMgbWlnaHQgZGlmZmVy LgorCSAqLworCWlmICghcGdfaXNfYXNjaWkoc3Rhc2hfbmFtZSkpCisJeworCQlHVUNfY2hlY2tf ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKTsKKwkJR1VDX2NoZWNrX2Vy cmRldGFpbCgiYWR2aWNlIHN0YXNoIG5hbWUgbXVzdCBub3QgY29udGFpbiBub24tQVNDSUkgY2hh cmFjdGVycyIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBSZWplY3QgdGhpbmdz IHRoYXQgZG8gbm90IGxvb2sgbGlrZSBpZGVudGlmaWVycywgc2luY2UgdGhlIGFiaWxpdHkgdG8K KwkgKiBjcmVhdGUgYW4gYWR2aWNlIHN0YXNoIHdpdGggbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJz IG9yIHdlaXJkIHN5bWJvbHMKKwkgKiBpbiB0aGUgbmFtZSBpcyBub3QgbGlrZWx5IHRvIGJlIHVz ZWZ1bCB0byBhbnlvbmUuCisJICovCisJaWYgKCFwZ3NhX2lzX2lkZW50aWZpZXIoc3Rhc2hfbmFt ZSkpCisJeworCQlHVUNfY2hlY2tfZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKTsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiYWR2aWNlIHN0YXNoIG5hbWUgbXVzdCBiZWdp biB3aXRoIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBk aWdpdHMsIGFuZCB1bmRlcnNjb3JlcyIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJu IHRydWU7Cit9CisKKy8qCisgKiBDcmVhdGUgYW4gYWR2aWNlIHN0YXNoLgorICovCit2b2lkCitw Z3NhX2NyZWF0ZV9zdGFzaChjaGFyICpzdGFzaF9uYW1lKQoreworCXBnc2Ffc3Rhc2ggKnN0YXNo OworCWJvb2wJCWZvdW5kOworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0 YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpKTsKKworCS8qIENyZWF0ZSBhIHN0YXNoIHdpdGggdGhp cyBuYW1lLCB1bmxlc3Mgb25lIGFscmVhZHkgZXhpc3RzLiAqLworCXN0YXNoID0gZHNoYXNoX2Zp bmRfb3JfaW5zZXJ0KHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaF9uYW1lLCAmZm91bmQpOworCWlm IChmb3VuZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIFwiJXNcIiBhbHJlYWR5 IGV4aXN0cyIsIHN0YXNoX25hbWUpKTsKKwlzdGFzaC0+cGdzYV9zdGFzaF9pZCA9IHBnc2Ffc3Rh dGUtPm5leHRfc3Rhc2hfaWQrKzsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNo YXNoLCBzdGFzaCk7Cit9CisKKy8qCisgKiBSZW1vdmUgYW55IHN0b3JlZCBhZHZpY2Ugc3RyaW5n IGZvciB0aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFuZCBxdWVyeSBJRC4KKyAqLwordm9pZAorcGdz YV9jbGVhcl9hZHZpY2Vfc3RyaW5nKGNoYXIgKnN0YXNoX25hbWUsIGludDY0IHF1ZXJ5SWQpCit7 CisJcGdzYV9lbnRyeSAqZW50cnk7CisJcGdzYV9lbnRyeV9rZXkga2V5OworCXVpbnQ2NAkJc3Rh c2hfaWQ7CisJZHNhX3BvaW50ZXIgb2xkX2RwOworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lKCZw Z3NhX3N0YXRlLT5sb2NrKSk7CisKKwkvKiBUcmFuc2xhdGUgdGhlIHN0YXNoIG5hbWUgdG8gYW4g aW50ZWdlciBJRC4gKi8KKwlpZiAoKHN0YXNoX2lkID0gcGdzYV9sb29rdXBfc3Rhc2hfaWQoc3Rh c2hfbmFtZSkpID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBcIiVzXCIg ZG9lcyBub3QgZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisKKwkvKgorCSAqIExvb2sgZm9yIGFuIGV4 aXN0aW5nIGVudHJ5LCBhbmQgZnJlZSBpdC4gQnV0LCBiZSBzdXJlIHRvIHNhdmUgdGhlCisJICog cG9pbnRlciB0byB0aGUgYXNzb2NpYXRlZCBhZHZpY2Ugc3RyaW5nLCBpZiBhbnkuCisJICovCisJ bWVtc2V0KCZrZXksIDAsIHNpemVvZihwZ3NhX2VudHJ5X2tleSkpOworCWtleS5wZ3NhX3N0YXNo X2lkID0gc3Rhc2hfaWQ7CisJa2V5LnF1ZXJ5SWQgPSBxdWVyeUlkOworCWVudHJ5ID0gZHNoYXNo X2ZpbmQocGdzYV9lbnRyeV9kc2hhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9PSBOVUxM KQorCQlvbGRfZHAgPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwllbHNlCisJeworCQlvbGRfZHAgPSBl bnRyeS0+YWR2aWNlX3N0cmluZzsKKwkJZHNoYXNoX2RlbGV0ZV9lbnRyeShwZ3NhX2VudHJ5X2Rz aGFzaCwgZW50cnkpOworCX0KKworCS8qIE5vdyB3ZSBmcmVlIHRoZSBhZHZpY2Ugc3RyaW5nIGFz IHdlbGwsIGlmIHRoZXJlIHdhcyBvbmUuICovCisJaWYgKG9sZF9kcCAhPSBJbnZhbGlkRHNhUG9p bnRlcikKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgb2xkX2RwKTsKK30KKworLyoKKyAqIERy b3AgYW4gYWR2aWNlIHN0YXNoLgorICovCit2b2lkCitwZ3NhX2Ryb3Bfc3Rhc2goY2hhciAqc3Rh c2hfbmFtZSkKK3sKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwlwZ3NhX3N0YXNoICpzdGFzaDsKKwlk c2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwl1aW50NjQJCXN0YXNoX2lkOworCisJQXNzZXJ0 KExXTG9ja0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpKTsK KworCS8qIFJlbW92ZSB0aGUgZW50cnkgZm9yIHRoaXMgYWR2aWNlIHN0YXNoLiAqLworCXN0YXNo ID0gZHNoYXNoX2ZpbmQocGdzYV9zdGFzaF9kc2hhc2gsIHN0YXNoX25hbWUsIHRydWUpOworCWlm IChzdGFzaCA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggXCIlc1wi IGRvZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOworCXN0YXNoX2lkID0gc3Rhc2gtPnBnc2Ff c3Rhc2hfaWQ7CisJZHNoYXNoX2RlbGV0ZV9lbnRyeShwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2gp OworCisJLyoKKwkgKiBOb3cgcmVtb3ZlIGFsbCB0aGUgZW50cmllcy4gU2luY2UgcGdzYV9zdGF0 ZS0+bG9jayBtdXN0IGJlIGhlbGQgYXQKKwkgKiBsZWFzdCBpbiBzaGFyZWQgbW9kZSB0byBpbnNl cnQgZW50cmllcyBpbnRvIHBnc2FfZW50cnlfZHNoYXNoLCBpdAorCSAqIGRvZXNuJ3QgbWF0dGVy IHdoZXRoZXIgd2UgZG8gdGhpcyBiZWZvcmUgb3IgYWZ0ZXIgZGVsZXRpbmcgdGhlIGVudHJ5CisJ ICogZnJvbSBwZ3NhX3N0YXNoX2RzaGFzaC4KKwkgKi8KKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJh dG9yLCBwZ3NhX2VudHJ5X2RzaGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9z ZXFfbmV4dCgmaXRlcmF0b3IpKSAhPSBOVUxMKQorCXsKKwkJaWYgKHN0YXNoX2lkID09IGVudHJ5 LT5rZXkucGdzYV9zdGFzaF9pZCkKKwkJeworCQkJaWYgKGVudHJ5LT5hZHZpY2Vfc3RyaW5nICE9 IEludmFsaWREc2FQb2ludGVyKQorCQkJCWRzYV9mcmVlKHBnc2FfZHNhX2FyZWEsIGVudHJ5LT5h ZHZpY2Vfc3RyaW5nKTsKKwkJCWRzaGFzaF9kZWxldGVfY3VycmVudCgmaXRlcmF0b3IpOworCQl9 CisJfQorCWRzaGFzaF9zZXFfdGVybSgmaXRlcmF0b3IpOworfQorCisvKgorICogSW5pdGlhbGl6 ZSBzaGFyZWQgc3RhdGUgd2hlbiBmaXJzdCBjcmVhdGVkLgorICovCitzdGF0aWMgdm9pZAorcGdz YV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKK3sKKwlwZ3NhX3NoYXJl ZF9zdGF0ZSAqc3RhdGUgPSAocGdzYV9zaGFyZWRfc3RhdGUgKikgcHRyOworCisJTFdMb2NrSW5p dGlhbGl6ZSgmc3RhdGUtPmxvY2ssCisJCQkJCSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNo X2FkdmljZV9sb2NrIikpOworCXN0YXRlLT5kc2FfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJ ZCgicGdfc3Rhc2hfYWR2aWNlX2RzYSIpOworCXN0YXRlLT5zdGFzaF90cmFuY2hlID0gTFdMb2Nr TmV3VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2Vfc3Rhc2giKTsKKwlzdGF0ZS0+ZW50cnlfdHJh bmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rhc2hfYWR2aWNlX2VudHJ5Iik7CisJc3Rh dGUtPm5leHRfc3Rhc2hfaWQgPSBVSU5UNjRDT05TVCgxKTsKKwlzdGF0ZS0+YXJlYSA9IERTQV9I QU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c3Rhc2hfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJ RDsKKwlzdGF0ZS0+ZW50cnlfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKK30KKworLyoK KyAqIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgbG9va3MgbGlrZSBhIHZhbGlkIGlkZW50aWZpZXIu IEl0IG11c3QgY29udGFpbiBvbmx5CisgKiBBU0NJSSBpZGVudGlmaWVyIGNoYXJhY3RlcnMsIGFu ZCBtdXN0IG5vdCBiZWdpbiB3aXRoIGEgZGlnaXQuCisgKi8KK3N0YXRpYyBib29sCitwZ3NhX2lz X2lkZW50aWZpZXIoY2hhciAqc3RyKQoreworCWlmICgqc3RyID49ICcwJyAmJiAqc3RyIDw9ICc5 JykKKwkJcmV0dXJuIGZhbHNlOworCisJd2hpbGUgKCpzdHIgIT0gJ1wwJykKKwl7CisJCWNoYXIJ CWMgPSAqc3RyKys7CisKKwkJaWYgKChjIDwgJzAnIHx8IGMgPiAnOScpICYmIChjIDwgJ2EnIHx8 IGMgPiAneicpICYmCisJCQkoYyA8ICdBJyB8fCBjID4gJ1onKSAmJiBjICE9ICdfJykKKwkJCXJl dHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIExvb2sgdXAgdGhl IGludGVnZXIgSUQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gc3Rhc2ggbmFtZS4KKyAq CisgKiBSZXR1cm5zIDAgaWYgbm8gc3VjaCBzdGFzaCBleGlzdHMuCisgKi8KK3VpbnQ2NAorcGdz YV9sb29rdXBfc3Rhc2hfaWQoY2hhciAqc3Rhc2hfbmFtZSkKK3sKKwlwZ3NhX3N0YXNoICpzdGFz aDsKKwl1aW50NjQJCXN0YXNoX2lkOworCisJLyogU2VhcmNoIHRoZSBzaGFyZWQgaGFzaCB0YWJs ZS4gKi8KKwlzdGFzaCA9IGRzaGFzaF9maW5kKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaF9uYW1l LCBmYWxzZSk7CisJaWYgKHN0YXNoID09IE5VTEwpCisJCXJldHVybiAwOworCXN0YXNoX2lkID0g c3Rhc2gtPnBnc2Ffc3Rhc2hfaWQ7CisJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NhX3N0YXNoX2Rz aGFzaCwgc3Rhc2gpOworCisJcmV0dXJuIHN0YXNoX2lkOworfQorCisvKgorICogU3RvcmUgYSBu ZXcgb3IgdXBkYXRlZCBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFu ZCBxdWVyeSBJRC4KKyAqLwordm9pZAorcGdzYV9zZXRfYWR2aWNlX3N0cmluZyhjaGFyICpzdGFz aF9uYW1lLCBpbnQ2NCBxdWVyeUlkLCBjaGFyICphZHZpY2Vfc3RyaW5nKQoreworCXBnc2FfZW50 cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOworCXBnc2FfZW50cnlfa2V5IGtleTsKKwl1aW50NjQJ CXN0YXNoX2lkOworCWRzYV9wb2ludGVyIG5ld19kcDsKKwlkc2FfcG9pbnRlciBvbGRfZHA7CisK KwkvKgorCSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIG91ciBsb2NrLCBhdCBsZWFzdCBpbiBzaGFy ZWQgbW9kZS4gIFRoaXMgaXMKKwkgKiBpbXBvcnRhbnQgZm9yIHR3byByZWFzb25zLgorCSAqCisJ ICogRmlyc3QsIGl0IGhvbGRzIG9mZiBpbnRlcnJ1cHRzLCBzbyB0aGF0IHdlIGNhbid0IGJhaWwg b3V0IG9mIHRoaXMgY29kZQorCSAqIGFmdGVyIGFsbG9jYXRpbmcgRFNBIG1lbW9yeSBmb3IgdGhl IGFkdmljZSBzdHJpbmcgYW5kIGJlZm9yZSBzdG9yaW5nCisJICogdGhlIHJlc3VsdGluZyBwb2lu dGVyIHNvbWV3aGVyZSB0aGF0IG90aGVycyBjYW4gZmluZCBpdC4KKwkgKgorCSAqIFNlY29uZCwg d2UgbmVlZCB0byBhdm9pZCBhIHJhY2UgYWdhaW5zdCBwZ3NhX2Ryb3Bfc3Rhc2goKS4gVGhhdAor CSAqIGZ1bmN0aW9uIHJlbW92ZXMgYSBzdGFzaF9uYW1lLT5zdGFzaF9pZCBtYXBwaW5nIGFuZCBh bGwgdGhlIGVudHJpZXMgZm9yCisJICogdGhhdCBzdGFzaF9pZC4gV2l0aG91dCB0aGUgbG9jaywg dGhlcmUncyBhIHJhY2UgY29uZGl0aW9uIG5vIG1hdHRlcgorCSAqIHdoaWNoIG9mIHRob3NlIHRo aW5ncyBpdCBkb2VzIGZpcnN0LCBiZWNhdXNlIGFzIHNvb24gYXMgd2UndmUgbG9va2VkIHVwCisJ ICogdGhlIHN0YXNoIElELCB0aGF0IHdob2xlIGZ1bmN0aW9uIGNhbiBleGVjdXRlIGJlZm9yZSB3 ZSBkbyB0aGUgcmVzdCBvZgorCSAqIG91ciB3b3JrLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gdXMg YWRkaW5nIGFuIGVudHJ5IGZvciBhIHN0YXNoIHRoYXQgbm8KKwkgKiBsb25nZXIgZXhpc3RzLgor CSAqLworCUFzc2VydChMV0xvY2tIZWxkQnlNZSgmcGdzYV9zdGF0ZS0+bG9jaykpOworCisJLyog TG9vayB1cCB0aGUgc3Rhc2ggSUQuICovCisJaWYgKChzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0 YXNoX2lkKHN0YXNoX25hbWUpKSA9PSAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rh c2ggXCIlc1wiIGRvZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOworCisJLyogQWxsb2NhdGUg c3BhY2UgZm9yIHRoZSBhZHZpY2Ugc3RyaW5nLiAqLworCW5ld19kcCA9IGRzYV9hbGxvY2F0ZShw Z3NhX2RzYV9hcmVhLCBzdHJsZW4oYWR2aWNlX3N0cmluZykgKyAxKTsKKwlzdHJjcHkoZHNhX2dl dF9hZGRyZXNzKHBnc2FfZHNhX2FyZWEsIG5ld19kcCksIGFkdmljZV9zdHJpbmcpOworCisJLyog QXR0ZW1wdCB0byBpbnNlcnQgYW4gZW50cnkgaW50byB0aGUgaGFzaCB0YWJsZS4gKi8KKwltZW1z ZXQoJmtleSwgMCwgc2l6ZW9mKHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQg PSBzdGFzaF9pZDsKKwlrZXkucXVlcnlJZCA9IHF1ZXJ5SWQ7CisJZW50cnkgPSBkc2hhc2hfZmlu ZF9vcl9pbnNlcnRfZXh0ZW5kZWQocGdzYV9lbnRyeV9kc2hhc2gsICZrZXksICZmb3VuZCwKKwkJ CQkJCQkJCQkgICBEU0hBU0hfSU5TRVJUX05PX09PTSk7CisKKwkvKgorCSAqIElmIGl0IGRpZG4n dCB3b3JrLCBiYWlsIG91dCwgYmVpbmcgY2FyZWZ1bCB0byBmcmVlIHRoZSBzaGFyZWQgbWVtb3J5 CisJICogd2UndmUgYWxyZWFkeSBhbGxvY2F0ZWQgYmVmb3JlLCBzaW5jZSBlcnJvciBjbGVhbnVw IHdpbGwgbm90IGRvIHNvLgorCSAqLworCWlmIChlbnRyeSA9PSBOVUxMKQorCXsKKwkJZHNhX2Zy ZWUocGdzYV9kc2FfYXJlYSwgbmV3X2RwKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2Rl KEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJZXJybXNnKCJvdXQgb2YgbWVtb3J5IiksCisJ CQkJZXJyZGV0YWlsKCJjb3VsZCBub3QgaW5zZXJ0IGFkdmljZSBzdHJpbmcgaW50byBzaGFyZWQg aGFzaCB0YWJsZSIpKTsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIGVudHJ5IGFuZCByZWxlYXNlIHRo ZSBsb2NrLiAqLworCW9sZF9kcCA9IGZvdW5kID8gZW50cnktPmFkdmljZV9zdHJpbmcgOiBJbnZh bGlkRHNhUG9pbnRlcjsKKwllbnRyeS0+YWR2aWNlX3N0cmluZyA9IG5ld19kcDsKKwlkc2hhc2hf cmVsZWFzZV9sb2NrKHBnc2FfZW50cnlfZHNoYXNoLCBlbnRyeSk7CisKKwkvKgorCSAqIFdlJ3Jl IG5vdCBzYWZlIGZyb20gbGVha3MgeWV0IQorCSAqCisJICogVGhlcmUncyBub3cgYSBwb2ludGVy IHRvIG5ld19kcCBpbiB0aGUgZW50cnkgdGhhdCB3ZSBqdXN0IHVwZGF0ZWQsIGJ1dAorCSAqIHRo YXQgbWVhbnMgdGhhdCB0aGVyZSdzIG5vIGxvbmdlciBhbnl0aGluZyBwb2ludGluZyB0byBvbGRf ZHAuCisJICovCisJaWYgKERzYVBvaW50ZXJJc1ZhbGlkKG9sZF9kcCkpCisJCWRzYV9mcmVlKHBn c2FfZHNhX2FyZWEsIG9sZF9kcCk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2Fk dmljZS9wZ19zdGFzaF9hZHZpY2UuY29udHJvbCBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3Bn X3N0YXNoX2FkdmljZS5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi40YTBmZmY1Yzg2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2 aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9sCkBAIC0wLDAgKzEsNSBAQAorIyBwZ19zdGFzaF9h ZHZpY2UgZXh0ZW5zaW9uCitjb21tZW50ID0gJ3N0b3JlIGFuZCBhdXRvbWF0aWNhbGx5IGFwcGx5 IHBsYW4gYWR2aWNlJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9 ICckbGliZGlyL3BnX3N0YXNoX2FkdmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmggYi9jb250cmliL3Bn X3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZWVhYTYxZTBmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuaApAQCAtMCwwICsxLDk5IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGFzaF9hZHZpY2UuaAorICoJICBtYWluIGhlYWRlciBm b3IgcGdfc3Rhc2hfYWR2aWNlIGNvbnRyaWIgbW9kdWxlCisgKgorICogVGhpcyBtb2R1bGUgYWxs b3dzIHBsYW4gYWR2aWNlIHN0cmluZ3MgKGFzIHVzZWQgYW5kIGdlbmVyYXRlZCBieQorICogcGdf cGxhbl9hZHZpY2UpIHRvIGJlICJzdGFzaGVkIiBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgYW5k LCBmcm9tCisgKiB0aGVyZSwgYXV0b21hdGljYWxseSBiZSBhcHBsaWVkIHRvIHF1ZXJpZXMgYXMg dGhleSBhcmUgcGxhbm5lZC4KKyAqIFlvdSBjYW4gY3JlYXRlIGFueSBudW1iZXIgb2YgYWR2aWNl IHN0YXNoZXMsIGVhY2ggb2Ygd2hpY2ggaXMKKyAqIGlkZW50aWZpZWQgYnkgYSBodW1hbi1yZWFk YWJsZSwgQVNDSUkgaWRlbnRpZmllciwgYW5kIGVhY2ggb2YgdGhlbSBpcworICogZXNzZW50aWFs bHkgYSBxdWVyeSBJRCAtPiBhZHZpY2Vfc3RyaW5nIG1hcHBpbmcuCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuaAorICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1NUQVNIX0FEVklDRV9ICisjZGVmaW5lIFBH X1NUQVNIX0FEVklDRV9ICisKKyNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9sd2xvY2suaCIKKworLyoKKyAqIFRoZSBrZXkgdGhhdCB3ZSB1c2UgdG8gZmluZCBhIHBh cnRpY3VsYXIgc3Rhc2ggZW50cnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnc2FfZW50cnlfa2V5 Cit7CisJdWludDY0CQlwZ3NhX3N0YXNoX2lkOworCWludDY0CQlxdWVyeUlkOworfSBwZ3NhX2Vu dHJ5X2tleTsKKworLyoKKyAqIEEgc2luZ2xlIHN0YXNoIGVudHJ5LgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3NhX2VudHJ5Cit7CisJcGdzYV9lbnRyeV9rZXkga2V5OworCWRzYV9wb2ludGVyIGFk dmljZV9zdHJpbmc7Cit9IHBnc2FfZW50cnk7CisKKy8qCisgKiBUaGUgc3Rhc2ggaXRzZWxmIGlz IGp1c3QgYSBtYXBwaW5nIGZyb20gYSBuYW1lIHRvIGEgc3Rhc2ggSUQuCisgKi8KK3R5cGVkZWYg c3RydWN0IHBnc2Ffc3Rhc2gKK3sKKwljaGFyCQluYW1lW05BTUVEQVRBTEVOXTsKKwl1aW50NjQJ CXBnc2Ffc3Rhc2hfaWQ7Cit9IHBnc2Ffc3Rhc2g7CisKKy8qCisgKiBUb3AtbGV2ZWwgc2hhcmVk IHN0YXRlIG9iamVjdCBmb3IgcGdfc3Rhc2hfYWR2aWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBw Z3NhX3NoYXJlZF9zdGF0ZQoreworCUxXTG9jawkJbG9jazsKKwlpbnQJCQlkc2FfdHJhbmNoZTsK KwlpbnQJCQlzdGFzaF90cmFuY2hlOworCWludAkJCWVudHJ5X3RyYW5jaGU7CisJdWludDY0CQlu ZXh0X3N0YXNoX2lkOworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2hhc2hfdGFibGVfaGFuZGxlIHN0 YXNoX2hhc2g7CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBlbnRyeV9oYXNoOworfSBwZ3NhX3NoYXJl ZF9zdGF0ZTsKKworLyogRm9yIHN0YXNoIElEIC0+IHN0YXNoIG5hbWUgaGFzaCB0YWJsZSAqLwor dHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaF9uYW1lCit7CisJdWludDMyCQlzdGF0dXM7CisJdWlu dDY0CQlwZ3NhX3N0YXNoX2lkOworCWNoYXIJICAgKm5hbWU7Cit9IHBnc2Ffc3Rhc2hfbmFtZTsK KworLyogRGVjbGFyZSBzdGFzaCBJRCAtPiBzdGFzaCBuYW1lIGhhc2ggdGFibGUgKi8KKyNkZWZp bmUgU0hfUFJFRklYIHBnc2Ffc3Rhc2hfbmFtZV90YWJsZQorI2RlZmluZSBTSF9FTEVNRU5UX1RZ UEUgcGdzYV9zdGFzaF9uYW1lCisjZGVmaW5lIFNIX0tFWV9UWVBFIHVpbnQ2NAorI2RlZmluZSBT SF9TQ09QRSBleHRlcm4KKyNkZWZpbmUgU0hfREVDTEFSRQorI2luY2x1ZGUgImxpYi9zaW1wbGVo YXNoLmgiCisKKy8qIFNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KK2V4dGVybiBwZ3NhX3NoYXJl ZF9zdGF0ZSAqcGdzYV9zdGF0ZTsKK2V4dGVybiBkc2FfYXJlYSAqcGdzYV9kc2FfYXJlYTsKK2V4 dGVybiBkc2hhc2hfdGFibGUgKnBnc2Ffc3Rhc2hfZHNoYXNoOworZXh0ZXJuIGRzaGFzaF90YWJs ZSAqcGdzYV9lbnRyeV9kc2hhc2g7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVy biB2b2lkIHBnc2FfYXR0YWNoKHZvaWQpOworZXh0ZXJuIHZvaWQgcGdzYV9jaGVja19zdGFzaF9u YW1lKGNoYXIgKnN0YXNoX25hbWUpOworZXh0ZXJuIHZvaWQgcGdzYV9jbGVhcl9hZHZpY2Vfc3Ry aW5nKGNoYXIgKnN0YXNoX25hbWUsIGludDY0IHF1ZXJ5SWQpOworZXh0ZXJuIHZvaWQgcGdzYV9j cmVhdGVfc3Rhc2goY2hhciAqc3Rhc2hfbmFtZSk7CitleHRlcm4gdm9pZCBwZ3NhX2Ryb3Bfc3Rh c2goY2hhciAqc3Rhc2hfbmFtZSk7CitleHRlcm4gdWludDY0IHBnc2FfbG9va3VwX3N0YXNoX2lk KGNoYXIgKnN0YXNoX25hbWUpOworZXh0ZXJuIHZvaWQgcGdzYV9zZXRfYWR2aWNlX3N0cmluZyhj aGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkgICBjaGFyICphZHZpY2Vf c3RyaW5nKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9z cWwvcGdfc3Rhc2hfYWR2aWNlLnNxbCBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3NxbC9wZ19z dGFzaF9hZHZpY2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5m MDQ3YTJkMWEwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3Nx bC9wZ19zdGFzaF9hZHZpY2Uuc3FsCkBAIC0wLDAgKzEsMTUwIEBACitDUkVBVEUgRVhURU5TSU9O IHBnX3N0YXNoX2FkdmljZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0gb247CitTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKKy0tIEhlbHBlcjogZXh0cmFjdCBxdWVy eSBpZGVudGlmaWVyIGZyb20gRVhQTEFJTiBWRVJCT1NFIG91dHB1dC4KK0NSRUFURSBPUiBSRVBM QUNFIEZVTkNUSU9OIGdldF9xdWVyeV9pZChxdWVyeV90ZXh0IHRleHQpIFJFVFVSTlMgYmlnaW50 CitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitERUNMQVJFCisgICAgbGluZSB0ZXh0OworICAgIHFp ZCBiaWdpbnQ7CitCRUdJTgorICAgIEZPUiBsaW5lIElOIEVYRUNVVEUgJ0VYUExBSU4gKFZFUkJP U0UsIEZPUk1BVCBURVhUKSAnIHx8IHF1ZXJ5X3RleHQKKyAgICBMT09QCisgICAgICAgIElGIGxp bmUgfiAnUXVlcnkgSWRlbnRpZmllcjonIFRIRU4KKyAgICAgICAgICAgIHFpZCA6PSByZWdleHBf cmVwbGFjZShsaW5lLCAnLipRdWVyeSBJZGVudGlmaWVyOlxzKigtP1xkKykuKicsICdcMScpOjpi aWdpbnQ7CisgICAgICAgICAgICBSRVRVUk4gcWlkOworICAgICAgICBFTkQgSUY7CisgICAgRU5E IExPT1A7CisgICAgUkFJU0UgRVhDRVBUSU9OICdRdWVyeSBJZGVudGlmaWVyIG5vdCBmb3VuZCBp biBFWFBMQUlOIG91dHB1dCc7CitFTkQ7CiskJDsKKworQ1JFQVRFIFRBQkxFIGFhX2RpbTEgKGlk IGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMSAoaWQsIGRpbTEsIHZh bDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZGltMTsK KworQ1JFQVRFIFRBQkxFIGFhX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4 dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gYWFfZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0 ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkg ZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2RpbTI7CisKK0NSRUFURSBUQUJMRSBhYV9mYWN0ICgKKwlp ZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMg YWFfZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGFhX2Rp bTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5U TyBhYV9mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsxIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZmFjdDsKKworLS0gR2V0IHRo ZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNUIGdldF9xdWVyeV9pZCgkJAorU0VMRUNUICogRlJP TSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQgXGdzZXQKKworLS0gQ3JlYXRlIGFuIGFkdmljZSBz dGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2aWNlIGF0IGl0LgorU0VMRUNUIHBnX2NyZWF0ZV9h ZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hf bmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKKworLS0gUnVuIG91ciB0ZXN0IHF1ZXJ5IGZvciB0aGUg Zmlyc3QgdGltZSB3aXRoIG5vIHN0YXNoZWQgYWR2aWNlLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4gaW5kZXggc2NhbiBvbiBk aW0xCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidxaWQn LAorCSdJTkRFWF9TQ0FOKGQxIGFhX2RpbTFfcGtleSknKTsKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhbiBhbHRlcm5hdGl2ZSBq b2luIG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywg OidxaWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9p biBzdHJhdGVneQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcs IDoncWlkJywKKwknTkVTVEVEX0xPT1BfUExBSU4oZDEpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0x X2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAor CVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gQWRkIGEgdXNlbGVzcyBleHRyYSBl bnRyeSB0byBvdXIgdGVzdCBzdGFzaC4gU2hvdWxkbid0IGNoYW5nZSB0aGUgcmVzdWx0CistLSBm cm9tIHRoZSBwcmV2aW91cyB0ZXN0LgorLS0gKElmIHdlJ3JlIHVubHVja3kgZW5vdWdoIHRoYXQg dGhpcyBldmVyIGZhaWxzIGR1ZSB0byBxdWVyeSBJRCBhY3R1YWxseQorLS0gYmVpbmcgMSwgdGhl biBqdXN0IHB1dCBzb21lIG90aGVyIGNvbnN0YW50IGhlcmUuIFNlZW1zIHVubGlrZWx5LikKK1NF TEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCAxLCAnU0VRX1NDQU4o ZDEpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVG VCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGlt MiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsK KworLS0gVHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1cmUgaXQgZG9lcyBub3RoaW5nCitTRUxF Q1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworU0VUIHBn X3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3NfZW1wdHlfc3Rhc2gnOworRVhQTEFJ TiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0x IGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0y X2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIFRlc3QgdGhh dCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNoIGluZGl2aWR1YWxseSBhbmQgYWxsIG9mIHRoZW0gdG9n ZXRoZXIsCistLSBidXQgbm90IGEgbm9uZXhpc3RlbnQgc3Rhc2guCitTRUxFQ1QgKiBGUk9NIHBn X2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWU7CitTRUxFQ1Qgc3Rhc2hf bmFtZSwgYWR2aWNlX3N0cmluZworCUZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygn cmVncmVzc19zdGFzaCcpIE9SREVSIEJZIGFkdmljZV9zdHJpbmc7CitTRUxFQ1Qgc3Rhc2hfbmFt ZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ3Jl Z3Jlc3NfZW1wdHlfc3Rhc2gnKQorCSBPUkRFUiBCWSBhZHZpY2Vfc3RyaW5nOworU0VMRUNUIHN0 YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRl bnRzKE5VTEwpIE9SREVSIEJZIGFkdmljZV9zdHJpbmc7CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2 aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ25vX3N1Y2hf c3Rhc2gnKQorCSBPUkRFUiBCWSBhZHZpY2Vfc3RyaW5nOworCistLSBUZXN0IHRoYXQgd2UgY2Fu IHJlbW92ZSBhZHZpY2UuCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0 YXNoJywgOidxaWQnLCBudWxsKTsKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdy ZWdyZXNzX3N0YXNoJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0 IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9J TiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZh bDIgPSAxOworU0VMRUNUICogRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBPUkRFUiBCWSBz dGFzaF9uYW1lOworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dl dF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ3JlZ3Jlc3Nfc3Rhc2gnKSBPUkRFUiBCWSBhZHZpY2Vf c3RyaW5nOworCistLSBDYW4ndCBjcmVhdGUgYSBzdGFzaCB0aGF0IGFscmVhZHkgZXhpc3RzLCBv ciBkcm9wIG9uZSB0aGF0IGRvZXNuJ3QuCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgn cmVncmVzc19zdGFzaCcpOworU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdub19zdWNoX3N0 YXNoJyk7CisKKy0tIENhbid0IGFkZCB0byBvciByZW1vdmUgZnJvbSBhIHN0YXNoIHRoYXQgZG9l cyBub3QgZXhpc3QuCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdub19zdWNoX3N0YXNo JywgMSwgJ1NFUV9TQ0FOKHQpJyk7CitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdub19z dWNoX3N0YXNoJywgMSwgbnVsbCk7CisKKy0tIENhbid0IHVzZSBxdWVyeSBJRCAwLgorU0VMRUNU IHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDAsICdTRVFfU0NBTih0KScp OworCistLSBTdGFzaCBuYW1lcyBtdXN0IGJlIG5vbi1lbXB0eSwgQVNDSUksIGFuZCBub3QgdG9v IGxvbmcsIGFuZCBtdXN0IGxvb2sKKy0tIGxpa2UgaWRlbnRpZmllcnMuCitTRUxFQ1QgcGdfY3Jl YXRlX2FkdmljZV9zdGFzaCgnJyk7CitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgnYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYScpOworU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJyAgICcpOworU0VUIHBnX3N0 YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJzk5Ym90dGxlcyc7CisKKy0tIENsZWFuIHVwIHN0YXRl IGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4KK1NFTEVDVCBwZ19kcm9wX2FkdmljZV9zdGFzaCgn cmVncmVzc19zdGFzaCcpOworU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2Vt cHR5X3N0YXNoJyk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9zcWwvcGdf c3Rhc2hfYWR2aWNlX3V0Zjguc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0 YXNoX2FkdmljZV91dGY4LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uMTNiYTYzNTI2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9zcWwvcGdfc3Rhc2hfYWR2aWNlX3V0Zjguc3FsCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBU aGlzIHRlc3QgbXVzdCBiZSBydW4gaW4gYSBkYXRhYmFzZSB3aXRoIFVURi04IGVuY29kaW5nLAor ICogYmVjYXVzZSBvdGhlciBlbmNvZGluZ3MgZG9uJ3Qgc3VwcG9ydCBhbGwgdGhlIGNoYXJhY3Rl cnMgdXNlZC4KKyAqLworCitTRUxFQ1QgZ2V0ZGF0YWJhc2VlbmNvZGluZygpIDw+ICdVVEY4Jwor ICAgICAgIEFTIHNraXBfdGVzdCBcZ3NldAorXGlmIDpza2lwX3Rlc3QKK1xxdWl0CitcZW5kaWYK KworU0VUIGNsaWVudF9lbmNvZGluZyA9IHV0Zjg7CisKKy0tIE5vbi1BU0NJSSBzdGFzaCBuYW1l cyBzaG91bGQgYmUgcmVqZWN0ZWQuCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgnY2Fm w6knKTsKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdjYWbDqSc7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaGZ1bmNzLmMgYi9jb250cmliL3BnX3N0 YXNoX2FkdmljZS9zdGFzaGZ1bmNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmQ4YzY2OWQ2YWI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9h ZHZpY2Uvc3Rhc2hmdW5jcy5jCkBAIC0wLDAgKzEsMzA3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBzdGFzaGZ1bmNzLmMKKyAqCSAgU1FMIGludGVyZmFjZSB0byBwZ19zdGFzaF9hZHZp Y2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNoZnVu Y3MuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVk ZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgInBnX3N0YXNoX2FkdmljZS5oIgorI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvdHVwbGVzdG9yZS5oIgorCitQR19GVU5D VElPTl9JTkZPX1YxKHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2gpOworUEdfRlVOQ1RJT05fSU5GT19W MShwZ19kcm9wX2FkdmljZV9zdGFzaCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9hZHZp Y2Vfc3Rhc2hfY29udGVudHMpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfYWR2aWNlX3N0 YXNoZXMpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zZXRfc3Rhc2hlZF9hZHZpY2UpOworCit0 eXBlZGVmIHN0cnVjdCBwZ3NhX3N0YXNoX2NvdW50Cit7CisJdWludDMyCQlzdGF0dXM7CisJdWlu dDY0CQlwZ3NhX3N0YXNoX2lkOworCWludDY0CQludW1fZW50cmllczsKK30gcGdzYV9zdGFzaF9j b3VudDsKKworI2RlZmluZSBTSF9QUkVGSVggcGdzYV9zdGFzaF9jb3VudF90YWJsZQorI2RlZmlu ZSBTSF9FTEVNRU5UX1RZUEUgcGdzYV9zdGFzaF9jb3VudAorI2RlZmluZSBTSF9LRVlfVFlQRSB1 aW50NjQKKyNkZWZpbmUgU0hfS0VZIHBnc2Ffc3Rhc2hfaWQKKyNkZWZpbmUgU0hfSEFTSF9LRVko dGIsIGtleSkgaGFzaF9ieXRlcygoY29uc3QgdW5zaWduZWQgY2hhciAqKSAmKGtleSksIHNpemVv Zih1aW50NjQpKQorI2RlZmluZSBTSF9FUVVBTCh0YiwgYSwgYikgKGEgPT0gYikKKyNkZWZpbmUg U0hfU0NPUEUgc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUZJTkUKKyNkZWZpbmUgU0hfREVD TEFSRQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKKy8qCisgKiBTUUwtY2FsbGFibGUg ZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGFkdmljZSBzdGFzaAorICovCitEYXR1bQorcGdfY3JlYXRl X2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0YXNoX25hbWUg PSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJcGdzYV9jaGVja19z dGFzaF9uYW1lKHN0YXNoX25hbWUpOworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9 PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5s b2NrLCBMV19FWENMVVNJVkUpOworCXBnc2FfY3JlYXRlX3N0YXNoKHN0YXNoX25hbWUpOworCUxX TG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisK Ky8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZHJvcCBhbiBhZHZpY2Ugc3Rhc2gKKyAq LworRGF0dW0KK3BnX2Ryb3BfYWR2aWNlX3N0YXNoKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hh cgkgICAqc3Rhc2hfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSk7 CisKKwlwZ3NhX2NoZWNrX3N0YXNoX25hbWUoc3Rhc2hfbmFtZSk7CisJaWYgKHVubGlrZWx5KHBn c2FfZW50cnlfZHNoYXNoID09IE5VTEwpKQorCQlwZ3NhX2F0dGFjaCgpOworCUxXTG9ja0FjcXVp cmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJcGdzYV9kcm9wX3N0YXNoKHN0 YXNoX25hbWUpOworCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCVBHX1JFVFVS Tl9WT0lEKCk7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gcHJvdmlkZSBh IGxpc3Qgb2YgYWR2aWNlIHN0YXNoZXMKKyAqLworRGF0dW0KK3BnX2dldF9hZHZpY2Vfc3Rhc2hl cyhQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5T ZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRv cjsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwlwZ3NhX3N0YXNoICpzdGFzaDsKKwlwZ3NhX3N0YXNo X2NvdW50X3RhYmxlX2hhc2ggKmNoYXNoOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8s IDApOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBpZiBub3QgYWxyZWFk eSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKKwkJ cGdzYV9hdHRhY2goKTsKKworCS8qIFRhbGx5IHVwIHRoZSBudW1iZXIgb2YgZW50cmllcyBwZXIg c3Rhc2guICovCisJY2hhc2ggPSBwZ3NhX3N0YXNoX2NvdW50X3RhYmxlX2NyZWF0ZShDdXJyZW50 TWVtb3J5Q29udGV4dCwgNjQsIE5VTEwpOworCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBn c2FfZW50cnlfZHNoYXNoLCB0cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9uZXh0 KCZpdGVyYXRvcikpICE9IE5VTEwpCisJeworCQlwZ3NhX3N0YXNoX2NvdW50ICpjOworCQlib29s CQlmb3VuZDsKKworCQljID0gcGdzYV9zdGFzaF9jb3VudF90YWJsZV9pbnNlcnQoY2hhc2gsCisJ CQkJCQkJCQkJICBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQsCisJCQkJCQkJCQkJICAmZm91bmQp OworCQlpZiAoIWZvdW5kKQorCQkJYy0+bnVtX2VudHJpZXMgPSAxOworCQllbHNlCisJCQljLT5u dW1fZW50cmllcysrOworCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKKworCS8qIEVt aXQgcmVzdWx0cy4gKi8KKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX3N0YXNoX2Rz aGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChzdGFzaCA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0b3Ip KSAhPSBOVUxMKQorCXsKKwkJRGF0dW0JCXZhbHVlc1syXTsKKwkJYm9vbAkJbnVsbHNbMl07CisJ CXBnc2Ffc3Rhc2hfY291bnQgKmM7CisKKwkJdmFsdWVzWzBdID0gQ1N0cmluZ0dldFRleHREYXR1 bShzdGFzaC0+bmFtZSk7CisJCW51bGxzWzBdID0gZmFsc2U7CisKKwkJYyA9IHBnc2Ffc3Rhc2hf Y291bnRfdGFibGVfbG9va3VwKGNoYXNoLCBzdGFzaC0+cGdzYV9zdGFzaF9pZCk7CisJCXZhbHVl c1sxXSA9IEludDY0R2V0RGF0dW0oYyA9PSBOVUxMID8gMCA6IGMtPm51bV9lbnRyaWVzKTsKKwkJ bnVsbHNbMV0gPSBmYWxzZTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJl c3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsCisJCQkJCQkJIG51bGxzKTsKKwl9CisJZHNo YXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQorCisvKgor ICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYWR2aWNlIHN0YXNoIGNvbnRlbnRz CisgKi8KK0RhdHVtCitwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZv LT5yZXN1bHRpbmZvOworCWRzaGFzaF9zZXFfc3RhdHVzIGl0ZXJhdG9yOworCWNoYXIJICAgKnN0 YXNoX25hbWUgPSBOVUxMOworCXBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9oYXNoICpuaGFzaCA9IE5V TEw7CisJdWludDY0CQlzdGFzaF9pZCA9IDA7CisJcGdzYV9lbnRyeSAqZW50cnk7CisKKwlJbml0 TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBBdHRhY2ggdG8gZHluYW1pYyBzaGFy ZWQgbWVtb3J5IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJaWYgKHVubGlrZWx5KHBnc2FfZW50 cnlfZHNoYXNoID09IE5VTEwpKQorCQlwZ3NhX2F0dGFjaCgpOworCisJLyogVXNlciBjYW4gcGFz cyBOVUxMIGZvciBhbGwgc3Rhc2hlcywgb3IgdGhlIG5hbWUgb2YgYSBzcGVjaWZpYyBzdGFzaC4g Ki8KKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwl7CisJCXN0YXNoX25hbWUgPSB0ZXh0X3RvX2Nz dHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCQlwZ3NhX2NoZWNrX3N0YXNoX25hbWUoc3Rh c2hfbmFtZSk7CisJCXN0YXNoX2lkID0gcGdzYV9sb29rdXBfc3Rhc2hfaWQoc3Rhc2hfbmFtZSk7 CisKKwkJLyogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgc3Rhc2ggbmFtZSwgaXQgc2hvdWxkIGV4 aXN0LiAqLworCQlpZiAoc3Rhc2hfaWQgPT0gMCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCWVycm1zZygiYWR2 aWNlIHN0YXNoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKwl9CisJZWxz ZQorCXsKKwkJcGdzYV9zdGFzaCAqc3Rhc2g7CisKKwkJLyoKKwkJICogSWYgd2UncmUgZHVtcGlu ZyBkYXRhIGFib3V0IGFsbCBzdGFzaGVzLCB3ZSBuZWVkIGFuIElELT5uYW1lIGxvb2t1cAorCQkg KiB0YWJsZS4KKwkJICovCisJCW5oYXNoID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2NyZWF0ZShD dXJyZW50TWVtb3J5Q29udGV4dCwgNjQsIE5VTEwpOworCQlkc2hhc2hfc2VxX2luaXQoJml0ZXJh dG9yLCBwZ3NhX3N0YXNoX2RzaGFzaCwgdHJ1ZSk7CisJCXdoaWxlICgoc3Rhc2ggPSBkc2hhc2hf c2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVMTCkKKwkJeworCQkJcGdzYV9zdGFzaF9uYW1lICpu OworCQkJYm9vbAkJZm91bmQ7CisKKwkJCW4gPSBwZ3NhX3N0YXNoX25hbWVfdGFibGVfaW5zZXJ0 KG5oYXNoLAorCQkJCQkJCQkJCQkgc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQsCisJCQkJCQkJCQkJCSAm Zm91bmQpOworCQkJQXNzZXJ0KCFmb3VuZCk7CisJCQluLT5uYW1lID0gcHN0cmR1cChzdGFzaC0+ bmFtZSk7CisJCX0KKwkJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisJfQorCisJLyogTm93 IGl0ZXJhdGUgb3ZlciBhbGwgdGhlIGVudHJpZXMuICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVy YXRvciwgcGdzYV9lbnRyeV9kc2hhc2gsIGZhbHNlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNo X3NlcV9uZXh0KCZpdGVyYXRvcikpICE9IE5VTEwpCisJeworCQlEYXR1bQkJdmFsdWVzWzNdOwor CQlib29sCQludWxsc1szXTsKKwkJY2hhcgkgICAqdGhpc19zdGFzaF9uYW1lOworCQljaGFyCSAg ICphZHZpY2Vfc3RyaW5nOworCisJCS8qIFNraXAgaW5jb21wbGV0ZSBlbnRyaWVzIHdoZXJlIHRo ZSBhZHZpY2Ugc3RyaW5nIHdhcyBuZXZlciBzZXQuICovCisJCWlmIChlbnRyeS0+YWR2aWNlX3N0 cmluZyA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdGFzaF9p ZCAhPSAwKQorCQl7CisJCQkvKgorCQkJICogV2UncmUgb25seSBkdW1waW5nIGRhdGEgZm9yIG9u ZSBwYXJ0aWN1bGFyIHN0YXNoLCBzbyBza2lwCisJCQkgKiBlbnRyaWVzIGZvciBhbnkgb3RoZXIg c3Rhc2ggYW5kIHVzZSB0aGUgc3Rhc2ggbmFtZSBzcGVjaWZpZWQgYnkKKwkJCSAqIHRoZSB1c2Vy LgorCQkJICovCisJCQlpZiAoc3Rhc2hfaWQgIT0gZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkKQor CQkJCWNvbnRpbnVlOworCQkJdGhpc19zdGFzaF9uYW1lID0gc3Rhc2hfbmFtZTsKKwkJfQorCQll bHNlCisJCXsKKwkJCXBnc2Ffc3Rhc2hfbmFtZSAqbjsKKworCQkJLyoKKwkJCSAqIFdlJ3JlIGR1 bXBpbmcgZGF0YSBmb3IgYWxsIHN0YXNoZXMsIHNvIGxvb2sgdXAgdGhlIGNvcnJlY3QgbmFtZQor CQkJICogdG8gdXNlIGluIHRoZSBoYXNoIHRhYmxlLiBJZiBub3RoaW5nIGlzIGZvdW5kLCB3aGlj aCBpcworCQkJICogcG9zc2libGUgZHVlIHRvIHJhY2UgY29uZGl0aW9ucywgbWFrZSB1cCBhIHN0 cmluZyB0byB1c2UuCisJCQkgKi8KKwkJCW4gPSBwZ3NhX3N0YXNoX25hbWVfdGFibGVfbG9va3Vw KG5oYXNoLCBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpOworCQkJaWYgKG4gIT0gTlVMTCkKKwkJ CQl0aGlzX3N0YXNoX25hbWUgPSBuLT5uYW1lOworCQkJZWxzZQorCQkJCXRoaXNfc3Rhc2hfbmFt ZSA9IHBzcHJpbnRmKCI8c3Rhc2ggJSIgUFJJdTY0ICI+IiwKKwkJCQkJCQkJCQkgICBlbnRyeS0+ a2V5LnBnc2Ffc3Rhc2hfaWQpOworCQl9CisKKwkJLyogV29yayBvdXQgdHVwbGUgdmFsdWVzLiAq LworCQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHRoaXNfc3Rhc2hfbmFtZSk7CisJ CW51bGxzWzBdID0gZmFsc2U7CisJCXZhbHVlc1sxXSA9IEludDY0R2V0RGF0dW0oZW50cnktPmtl eS5xdWVyeUlkKTsKKwkJbnVsbHNbMV0gPSBmYWxzZTsKKwkJYWR2aWNlX3N0cmluZyA9IGRzYV9n ZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBlbnRyeS0+YWR2aWNlX3N0cmluZyk7CisJCXZhbHVl c1syXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyk7CisJCW51bGxzWzJdID0g ZmFsc2U7CisKKwkJLyogRW1pdCB0aGUgdHVwbGUuICovCisJCXR1cGxlc3RvcmVfcHV0dmFsdWVz KHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywKKwkJCQkJCQkgbnVs bHMpOworCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKKworCXJldHVybiAoRGF0dW0p IDA7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gdXBkYXRlIGFuIGFkdmlj ZSBzdGFzaCBlbnRyeSBmb3IgYSBwYXJ0aWN1bGFyCisgKiBxdWVyeSBJRAorICoKKyAqIElmIHRo ZSBzZWNvbmQgYXJndW1lbnQgaXMgTlVMTCwgd2UgZGVsZXRlIGFueSBleGlzdGluZyBhZHZpY2Ug c3Rhc2gKKyAqIGVudHJ5OyBvdGhlcndpc2UsIHdlIGVpdGhlciBjcmVhdGUgYW4gZW50cnkgb3Ig dXBkYXRlIGl0IHdpdGggdGhlIG5ldworICogYWR2aWNlIHN0cmluZy4KKyAqLworRGF0dW0KK3Bn X3NldF9zdGFzaGVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0YXNo X25hbWU7CisJaW50NjQJCXF1ZXJ5SWQ7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApIHx8IFBHX0FS R0lTTlVMTCgxKSkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCS8qIEdldCBhbmQgY2hlY2sgYWR2 aWNlIHN0YXNoIG5hbWUuICovCisJc3Rhc2hfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRB UkdfVEVYVF9QUCgwKSk7CisJcGdzYV9jaGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOworCisJ LyoKKwkgKiBHZXQgYW5kIGNoZWNrIHF1ZXJ5IElELgorCSAqCisJICogcXVlcnlJRCAwIG1lYW5z IG5vIHF1ZXJ5IElEIHdhcyBjb21wdXRlZCwgc28gcmVqZWN0IHRoYXQuCisJICovCisJcXVlcnlJ ZCA9IFBHX0dFVEFSR19JTlQ2NCgxKTsKKwlpZiAocXVlcnlJZCA9PSAwKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ ZXJybXNnKCJjYW5ub3Qgc2V0IGFkdmljZSBzdHJpbmcgZm9yIHF1ZXJ5IElEIDAiKSk7CisKKwkv KiBBdHRhY2ggdG8gZHluYW1pYyBzaGFyZWQgbWVtb3J5IGlmIG5vdCBhbHJlYWR5IGRvbmUuICov CisJaWYgKHVubGlrZWx5KHBnc2FfZW50cnlfZHNoYXNoID09IE5VTEwpKQorCQlwZ3NhX2F0dGFj aCgpOworCisJLyogTm93IGNhbGwgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGRvIHRoZSBy ZWFsIHdvcmsuICovCisJaWYgKFBHX0FSR0lTTlVMTCgyKSkKKwl7CisJCUxXTG9ja0FjcXVpcmUo JnBnc2Ffc3RhdGUtPmxvY2ssIExXX1NIQVJFRCk7CisJCXBnc2FfY2xlYXJfYWR2aWNlX3N0cmlu ZyhzdGFzaF9uYW1lLCBxdWVyeUlkKTsKKwkJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9j ayk7CisJfQorCWVsc2UKKwl7CisJCWNoYXIJICAgKmFkdmljZV9zdHJpbmcgPSB0ZXh0X3RvX2Nz dHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMikpOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3Rh dGUtPmxvY2ssIExXX1NIQVJFRCk7CisJCXBnc2Ffc2V0X2FkdmljZV9zdHJpbmcoc3Rhc2hfbmFt ZSwgcXVlcnlJZCwgYWR2aWNlX3N0cmluZyk7CisJCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUt PmxvY2spOworCX0KKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCmluZGV4IGJk ZDQ4NjVmNTNmLi5iOWIwMzY1NGFhZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCkBAIC0xNTksNiArMTU5LDcgQEAg Q1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFibGU+ZXh0ZW5zaW9uX25hbWU8L3JlcGxhY2VhYmxl PjsKICAmcGdwbGFuYWR2aWNlOwogICZwZ3ByZXdhcm07CiAgJnBncm93bG9ja3M7CisgJnBnc3Rh c2hhZHZpY2U7CiAgJnBnc3RhdHN0YXRlbWVudHM7CiAgJnBnc3RhdHR1cGxlOwogICZwZ3N1cmdl cnk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCBiL2RvYy9zcmMvc2dt bC9maWxlbGlzdC5zZ21sCmluZGV4IGQ5MGI0MzM4ZDJhLi5lOGY3NThmYzI0YiAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0 LnNnbWwKQEAgLTE0NCw2ICsxNDQsNyBAQAogPCFFTlRJVFkgb2lkMm5hbWUgICAgICAgIFNZU1RF TSAib2lkMm5hbWUuc2dtbCI+CiA8IUVOVElUWSBwYWdlaW5zcGVjdCAgICAgU1lTVEVNICJwYWdl aW5zcGVjdC5zZ21sIj4KIDwhRU5USVRZIHBhc3N3b3JkY2hlY2sgICBTWVNURU0gInBhc3N3b3Jk Y2hlY2suc2dtbCI+Cis8IUVOVElUWSBwZ3N0YXNoYWR2aWNlICAgU1lTVEVNICJwZ3N0YXNoYWR2 aWNlLnNnbWwiPgogPCFFTlRJVFkgcGdidWZmZXJjYWNoZSAgIFNZU1RFTSAicGdidWZmZXJjYWNo ZS5zZ21sIj4KIDwhRU5USVRZIHBnY3J5cHRvICAgICAgICBTWVNURU0gInBnY3J5cHRvLnNnbWwi PgogPCFFTlRJVFkgcGdmcmVlc3BhY2VtYXAgIFNZU1RFTSAicGdmcmVlc3BhY2VtYXAuc2dtbCI+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sIGIvZG9jL3NyYy9z Z21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uZWM2MDU1MmE0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGFz aGFkdmljZS5zZ21sCkBAIC0wLDAgKzEsMjE2IEBACis8IS0tIGRvYy9zcmMvc2dtbC9wZ3N0YXNo YWR2aWNlLnNnbWwgLS0+CisKKzxzZWN0MSBpZD0icGdzdGFzaGFkdmljZSIgeHJlZmxhYmVsPSJw Z19zdGFzaF9hZHZpY2UiPgorIDx0aXRsZT5wZ19zdGFzaF9hZHZpY2UgJm1kYXNoOyBzdG9yZSBh bmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZTwvdGl0bGU+CisKKyA8aW5kZXh0ZXJt IHpvbmU9InBnc3Rhc2hhZHZpY2UiPgorICA8cHJpbWFyeT5wZ19zdGFzaF9hZHZpY2U8L3ByaW1h cnk+CisgPC9pbmRleHRlcm0+CisKKyA8cGFyYT4KKyAgVGhlIDxmaWxlbmFtZT5wZ19zdGFzaF9h ZHZpY2U8L2ZpbGVuYW1lPiBleHRlbnNpb24gYWxsb3dzIHlvdSB0byBzdGFzaAorICA8bGluayBs aW5rZW5kPSJwZ3BsYW5hZHZpY2UiPnBsYW4gYWR2aWNlPC9saW5rPiBzdHJpbmdzIGluIGR5bmFt aWMKKyAgc2hhcmVkIG1lbW9yeSB3aGVyZSB0aGV5IGNhbiBiZSBhdXRvbWF0aWNhbGx5IGFwcGxp ZWQuIEFuCisgIDxsaXRlcmFsPmFkdmljZSBzdGFzaDwvbGl0ZXJhbD4gaXMgYSBtYXBwaW5nIGZy b20KKyAgPGxpbmsgbGlua2VuZD0iZ3VjLWNvbXB1dGUtcXVlcnktaWQiPnF1ZXJ5IGlkZW50aWZp ZXJzPC9saW5rPiB0byBwbGFuIGFkdmljZQorICBzdHJpbmdzLiBXaGVuZXZlciBhIHNlc3Npb24g aXMgYXNrZWQgdG8gcGxhbiBhIHF1ZXJ5IHdob3NlIHF1ZXJ5IElEIGFwcGVhcnMKKyAgaW4gdGhl IHJlbGV2YW50IGFkdmljZSBzdGFzaCwgdGhlIHBsYW4gYWR2aWNlIHN0cmluZyBpcyBhdXRvbWF0 aWNhbGx5IGFwcGxpZWQKKyAgdG8gZ3VpZGUgcGxhbm5pbmcuIE5vdGUgdGhhdCBhZHZpY2Ugc3Rh c2hlcyBleGlzdCBwdXJlbHkgaW4gbWVtb3J5LiBUaGlzCisgIG1lYW5zIGJvdGggdGhhdCBpdCBp cyBpbXBvcnRhbnQgdG8gYmUgbWluZGZ1bCBvZiBtZW1vcnkgY29uc3VtcHRpb24gd2hlbgorICBk ZWNpZGluZyBob3cgbXVjaCBwbGFuIGFkdmljZSB0byBzdGFzaCwgYW5kIGFsc28gdGhhdCBhZHZp Y2Ugc3Rhc2hlcyBtdXN0CisgIGJlIHJlY3JlYXRlZCBhbmQgcmVwb3B1bGF0ZWQgd2hlbmV2ZXIg dGhlIHNlcnZlciBpcyByZXN0YXJ0ZWQuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIEluIG9yZGVy IHRvIHVzZSB0aGlzIG1vZHVsZSwgeW91IHdpbGwgbmVlZCB0byBleGVjdXRlCisgIDxsaXRlcmFs PkNSRUFURSBFWFRFTlNJT04gcGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiBpbiBhdCBsZWFzdAor ICBvbmUgZGF0YWJhc2UsIHNvIHRoYXQgeW91IGhhdmUgYWNjZXNzIHRvIHRoZSBTUUwgZnVuY3Rp b25zIHRvIG1hbmFnZQorICBhZHZpY2Ugc3Rhc2hlcy4gWW91IHdpbGwgYWxzbyBuZWVkIHRoZSA8 bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+CisgIG1vZHVsZSB0byBiZSBsb2FkZWQg aW4gYWxsIHNlc3Npb25zIHdoZXJlIHlvdSB3YW50IHRoaXMgbW9kdWxlIHRvCisgIGF1dG9tYXRp Y2FsbHkgYXBwbHkgYWR2aWNlLiBJdCB3aWxsIHVzdWFsbHkgYmUgYmVzdCB0byBkbyB0aGlzIGJ5 IGFkZGluZworICA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IHRvCisgIDx4cmVm IGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9hZC1saWJyYXJpZXMiLz4gYW5kIHJlc3RhcnRpbmcg dGhlIHNlcnZlci4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgT25jZSB5b3UgaGF2ZSBtZXQgdGhl IGFib3ZlIGNyaXRlcmlhLCB5b3UgY2FuIGNyZWF0ZSBhZHZpY2Ugc3Rhc2hlcworICB1c2luZyB0 aGUgPGxpdGVyYWw+cGdfY3JlYXRlX2FkdmljZV9zdGFzaDwvbGl0ZXJhbD4gZnVuY3Rpb24gZGVz Y3JpYmVkCisgIGJlbG93IGFuZCBzZXQgdGhlIHBsYW4gYWR2aWNlIGZvciBhIGdpdmVuIHF1ZXJ5 IElEIGluIGEgZ2l2ZW4gc3Rhc2ggdXNpbmcKKyAgdGhlIDxsaXRlcmFsPnBnX3NldF9zdGFzaGVk X2FkdmljZTwvbGl0ZXJhbD4gZnVuY3Rpb24uIFRoZW4sIHlvdSBuZWVkCisgIG9ubHkgY29uZmln dXJlIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC9saXRlcmFsPiB0byBwb2lu dAorICB0byB0aGUgY2hvc2VuIGFkdmljZSBzdGFzaCBuYW1lLiBGb3Igc29tZSB1c2UgY2FzZXMs IHJhdGhlciB0aGFuIHNldHRpbmcKKyAgdGhpcyBvbiBhIHN5c3RlbS13aWRlIGJhc2lzLCB5b3Ug bWF5IGZpbmQgaXQgaGVscGZ1bCB0byB1c2UKKyAgPGxpdGVyYWw+QUxURVIgREFUQUJBU0UgLi4u IFNFVDwvbGl0ZXJhbD4gb3IKKyAgPGxpdGVyYWw+QUxURVIgUk9MRSAuLi4gU0VUPC9saXRlcmFs PiB0byBjb25maWd1cmUgdmFsdWVzIHRoYXQgd2lsbCBhcHBseQorICBvbmx5IHRvIGEgZGF0YWJh c2Ugb3Igb25seSB0byBhIGNlcnRhaW4gcm9sZS4gTGlrZXdpc2UsIGl0IG1heSBzb21ldGltZXMK KyAgYmUgYmV0dGVyIHRvIHNldCB0aGUgc3Rhc2ggbmFtZSBpbiBhIHBhcnRpY3VsYXIgc2Vzc2lv biB1c2luZworICA8bGl0ZXJhbD5TRVQ8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxwYXJhPgor ICBCZWNhdXNlIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZTwvbGl0ZXJhbD4gd29ya3Mgb24gdGhl IGJhc2lzIG9mIHF1ZXJ5CisgIGlkZW50aWZpZXJzLCB5b3Ugd2lsbCBuZWVkIHRvIGRldGVybWlu ZSB0aGUgcXVlcnkgaWRlbnRpZmllciBmb3IgZWFjaCBxdWVyeQorICB3aG9zZSBwbGFuIHlvdSB3 aXNoIHRvIGNvbnRyb2wuIFlvdSB3aWxsIGFsc28gbmVlZCB0byBkZXRlcm1pbmUgdGhlIGFkdmlj ZQorICBzdHJpbmcgdGhhdCB5b3Ugd2lzaCB0byBzdG9yZSBmb3IgZWFjaCBxdWVyeS4gT25lIHdh eSB0byBkbyB0aGlzIGlzIHRvIHVzZQorICA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPjogdGhl IDxsaXRlcmFsPlZFUkJPU0U8L2xpdGVyYWw+IG9wdGlvbiB3aWxsCisgIHNob3cgdGhlIHF1ZXJ5 IElELCBhbmQgdGhlIDxsaXRlcmFsPlBMQU5fQURWSUNFPC9saXRlcmFsPiBvcHRpb24gd2lsbAor ICBzaG93IHBsYW4gYWR2aWNlLiAgUXVlcnkgaWRlbnRpZmllcnMgY2FuIGFsc28gYmUgb2J0YWlu ZWQgdGhyb3VnaCB0b29scworICBzdWNoIGFzIDx4cmVmIGxpbmtlbmQ9InBnc3RhdHN0YXRlbWVu dHMiIC8+IG9yCisgIDx4cmVmIGxpbmtlbmQ9Im1vbml0b3JpbmctcGctc3RhdC1hY3Rpdml0eS12 aWV3IiAvPiwgYnV0IHRoZXNlIHRvb2xzCisgIHdpbGwgbm90IHByb3ZpZGUgcGxhbiBhZHZpY2Ug c3RyaW5ncy4gTm90ZSB0aGF0CisgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1jb21wdXRlLXF1ZXJ5LWlk IiAvPiBtdXN0IGJlIGVuYWJsZWQgZm9yIHF1ZXJ5CisgIGlkZW50aWZpZXJzIHRvIGJlIGNvbXB1 dGVkOyBpZiBzZXQgdG8gPGxpdGVyYWw+YXV0bzwvbGl0ZXJhbD4sIGxvYWRpbmcKKyAgPGxpdGVy YWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiB3aWxsIGVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5 LgorIDwvcGFyYT4KKworIDxwYXJhPgorICBHZW5lcmFsbHksIHRoZSBmYWN0IHRoYXQgdGhlIHBs YW5uZXIgaXMgYWJsZSB0byBjaGFuZ2UgcXVlcnkgcGxhbnMgYXMKKyAgdGhlIHVuZGVybHlpbmcg ZGlzdHJpYnV0aW9uIG9mIGRhdGEgY2hhbmdlcyBpcyBhIGZlYXR1cmUsIG5vdCBhIGJ1Zy4KKyAg TW9yZW92ZXIsIGFwcGx5aW5nIHBsYW4gYWR2aWNlIGNhbiBoYXZlIGEgbm90aWNlYWJsZSBwZXJm b3JtYW5jZSBjb3N0IGV2ZW4KKyAgd2hlbiBpdCBkb2VzIG5vdCByZXN1bHQgaW4gYSBjaGFuZ2Ug dG8gdGhlIHF1ZXJ5IHBsYW4uIFRoZXJlZm9yZSwgaXQgaXMKKyAgYSBnb29kIGlkZWEgdG8gdXNl IHRoaXMgZmVhdHVyZSBvbmx5IHdoZW4gYW5kIHRvIHRoZSBleHRlbnQgbmVlZGVkLgorICBQbGFu IGFkdmljZSBzdHJpbmdzIGNhbiBiZSB0cmltbWVkIGRvd24gdG8gbWVudGlvbiBvbmx5IHRob3Nl IGFzcGVjdHMKKyAgb2YgdGhlIHBsYW4gdGhhdCBuZWVkIHRvIGJlIGNvbnRyb2xsZWQsIGFuZCB1 c2VkIG9ubHkgZm9yIHF1ZXJpZXMgd2hlcmUKKyAgdGhlcmUgaXMgYmVsaWV2ZWQgdG8gYmUgYSBz aWduaWZpY2FudCByaXNrIG9mIHBsYW5uZXIgZXJyb3IuCisgPC9wYXJhPgorCisgPHBhcmE+Cisg IE5vdGUgdGhhdCA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IGN1cnJlbnRseSBs YWNrcyBhIHNvcGhpc3RpY2F0ZWQKKyAgc2VjdXJpdHkgbW9kZWwuIE9ubHkgdGhlIHN1cGVydXNl ciwgb3IgYSB1c2VyIHRvIHdob20gdGhlIHN1cGVydXNlciBoYXMKKyAgZ3JhbnRlZCA8bGl0ZXJh bD5FWEVDVVRFPC9saXRlcmFsPiBwZXJtaXNzaW9uIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbnMs CisgIG1heSBjcmVhdGUgYWR2aWNlIHN0YXNoZXMgb3IgYWx0ZXIgdGhlaXIgY29udGVudHMsIGJ1 dCBhbnkgdXNlciBtYXkgc2V0CisgIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1l PC9saXRlcmFsPiBmb3IgdGhlaXIgc2Vzc2lvbiwgYW5kIHRoaXMKKyAgbWF5IHJldmVhbCB0aGUg Y29udGVudHMgb2YgYW55IGFkdmljZSBzdGFzaCB3aXRoIHRoYXQgbmFtZS4gVXNlcnMgc2hvdWxk CisgIGFzc3VtZSB0aGF0IGluZm9ybWF0aW9uIGVtYmVkZGVkIGluIHN0YXNoZWQgYWR2aWNlIHN0 cmluZ3MgbWF5IGJlY29tZSB2aXNpYmxlCisgIHRvIG5vbnByaXZpbGVnZWQgdXNlcnMuCisgPC9w YXJhPgorCisgPHNlY3QyIGlkPSJwZ3N0YXNoYWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5G dW5jdGlvbnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19jcmVhdGVfYWR2aWNlX3N0YXNoKHN0YXNo X25hbWUgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAg ICAgIDxwcmltYXJ5PnBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2g8L3ByaW1hcnk+CisgICAgIDwvaW5k ZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAg ICBDcmVhdGVzIGEgbmV3LCBlbXB0eSBhZHZpY2Ugc3Rhc2ggd2l0aCB0aGUgZ2l2ZW4gbmFtZS4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2Ryb3BfYWR2aWNl X3N0YXNoKHN0YXNoX25hbWUgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGlu ZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2Ryb3BfYWR2aWNlX3N0YXNoPC9wcmltYXJ5Pgor ICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgRHJvcHMgdGhlIG5hbWVkIGFkdmljZSBzdGFzaCBhbmQgYWxsIG9mIGl0cyBl bnRyaWVzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfc2V0 X3N0YXNoZWRfYWR2aWNlKHN0YXNoX25hbWUgdGV4dCwgcXVlcnlfaWQgYmlnaW50LAorICAgICAg IGFkdmljZV9zdHJpbmcgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX3NldF9zdGFzaGVkX2FkdmljZTwvcHJpbWFyeT4KKyAg ICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIFN0b3JlcyBhbiBhZHZpY2Ugc3RyaW5nIGluIHRoZSBuYW1lZCBhZHZpY2Ugc3Rh c2gsIGFzc29jaWF0ZWQgd2l0aAorICAgICAgdGhlIGdpdmVuIHF1ZXJ5IGlkZW50aWZpZXIuIElm IGFuIGVudHJ5IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIKKyAgICAgIGFscmVhZHkgZXhpc3Rz IGluIHRoZSBzdGFzaCwgaXQgaXMgcmVwbGFjZWQuIElmCisgICAgICA8cGFyYW1ldGVyPmFkdmlj ZV9zdHJpbmc8L3BhcmFtZXRlcj4gaXMgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sCisgICAgICBh bnkgZXhpc3RpbmcgZW50cnkgZm9yIHRoYXQgcXVlcnkgaWRlbnRpZmllciBpcyByZW1vdmVkLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8 dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2FkdmljZV9z dGFzaGVzKCkgcmV0dXJucyBzZXRvZiAoc3Rhc2hfbmFtZSB0ZXh0LAorICAgICAgIG51bV9lbnRy aWVzIGJpZ2ludCk8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ cGdfZ2V0X2FkdmljZV9zdGFzaGVzPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8 L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBvbmUg cm93IGZvciBlYWNoIGFkdmljZSBzdGFzaCwgc2hvd2luZyB0aGUgc3Rhc2ggbmFtZSBhbmQKKyAg ICAgIHRoZSBudW1iZXIgb2YgZW50cmllcyBpdCBjb250YWlucy4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoc3Rh c2hfbmFtZSB0ZXh0KSByZXR1cm5zIHNldG9mCisgICAgICAgKHN0YXNoX25hbWUgdGV4dCwgcXVl cnlfaWQgYmlnaW50LCBhZHZpY2Vfc3RyaW5nIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHM8L3ByaW1h cnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAg ICAgPHBhcmE+CisgICAgICBSZXR1cm5zIG9uZSByb3cgZm9yIGVhY2ggZW50cnkgaW4gdGhlIG5h bWVkIGFkdmljZSBzdGFzaC4gSWYKKyAgICAgIDxwYXJhbWV0ZXI+c3Rhc2hfbmFtZTwvcGFyYW1l dGVyPiBpcyA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiwgcmV0dXJucworICAgICAgZW50cmllcyBm cm9tIGFsbCBzdGFzaGVzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBp ZD0icGdzdGFzaGFkdmljZS1jb25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24g UGFyYW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8 L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zhcm5hbWU+IGNv bmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8 L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgU3BlY2lmaWVzIHRo ZSBuYW1lIG9mIHRoZSBhZHZpY2Ugc3Rhc2ggdG8gY29uc3VsdCBkdXJpbmcgcXVlcnkKKyAgICAg IHBsYW5uaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBk aXNhYmxlcworICAgICAgdGhpcyBtb2R1bGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3QyPgor CisgPHNlY3QyIGlkPSJwZ3N0YXNoYWR2aWNlLWF1dGhvciI+CisgIDx0aXRsZT5BdXRob3I8L3Rp dGxlPgorCisgIDxwYXJhPgorICAgUm9iZXJ0IEhhYXMgPGVtYWlsPnJoYWFzQHBvc3RncmVzcWwu b3JnPC9lbWFpbD4KKyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKzwvc2VjdDE+CmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IDViYzUxNzYwMmIxLi43ZjZmNzk4NzVlZCAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTQwNTgsNiArNDA1OCwxMiBAQCBwZ3BhX3Ryb3ZlX2xvb2t1cF90 eXBlCiBwZ3BhX3Ryb3ZlX3Jlc3VsdAogcGdwYV90cm92ZV9zbGljZQogcGdwYV91bnJvbGxlZF9q b2luCitwZ3NhX2VudHJ5CitwZ3NhX2VudHJ5X2tleQorcGdzYV9zaGFyZWRfc3RhdGUKK3Bnc2Ff c3Rhc2gKK3Bnc2Ffc3Rhc2hfY291bnQKK3Bnc2Ffc3Rhc2hfbmFtZQogcGdzb2NrZXQKIHBnc3Fs X3RoaW5nX3QKIHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --00000000000040856d064e84e5b4 Content-Type: application/octet-stream; name="v25-0002-pg_stash_advice-Allow-stashed-advice-to-be-persi.patch" Content-Disposition: attachment; filename="v25-0002-pg_stash_advice-Allow-stashed-advice-to-be-persi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mni9uc1i1 RnJvbSA1YzAyM2FmYWM4YTVhZWY1Zjc1MWJjNWJmMzg1ZjZmMmU0NDAxZTczIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMiBBcHIgMjAyNiAyMTo0OTowMiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI1IDIv Ml0gcGdfc3Rhc2hfYWR2aWNlOiBBbGxvdyBzdGFzaGVkIGFkdmljZSB0byBiZSBwZXJzaXN0ZWQK IHRvIGRpc2suCgpJZiBwZ19zdGFzaF9hZHZpY2UucGVyc2lzdCA9IHRydWUsIHN0YXNoZWQgYWR2 aWNlIHdpbGwgYmUgd3JpdHRlbiB0bwpwZ19zdGFzaF9hZHZpY2UudHN2IGluIHRoZSBkYXRhIGRp cmVjdG9yeSwgcGVyaW9kaWNhbGx5IGFuZCBhdApzaHV0ZG93bi4gT24gcmVzdGFydCwgc3Rhc2gg bW9kaWZpY2F0aW9ucyBhcmUgbG9ja2VkIG91dCB1bnRpbCB0aGlzCmZpbGUgaGFzIGJlZW4gcmVs b2FkZWQsIGJ1dCBxdWVyaWVzIHdpbGwgbm90IGJlLCBzbyB0aGVyZSBtYXkgYmUgYQpzaG9ydCB3 aW5kb3cgYWZ0ZXIgc3RhcnR1cCBkdXJpbmcgd2hpY2ggcHJldmlvdXNseS1zdGFzaGVkIGFkdmlj ZSBpcwpub3QgYXV0b21hdGljYWxseSBhcHBsaWVkLgoKQXV0aG9yOiBSb2JlcnQgSGFhcyA8cmhh YXNAcG9zdGdyZXNxbC5vcmc+CkNvLWF1dGhvcmVkLWJ5OiA8bHVrYXNAZml0dGwuY29tPgotLS0K IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgNCArLQog Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICA4ICstCiAu Li4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAgfCAgIDYgKwogY29u dHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMgICAgIHwgMTcyICsrKy0KIGNv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5oICAgICB8ICAxMiArCiBjb250 cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaGZ1bmNzLmMgICAgICAgICAgfCAgNDAgKwogY29udHJp Yi9wZ19zdGFzaF9hZHZpY2Uvc3Rhc2hwZXJzaXN0LmMgICAgICAgIHwgNzk5ICsrKysrKysrKysr KysrKysrKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvdC8wMDFfcGVyc2lzdC5wbCAgICAgIHwg IDg0ICsrCiBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sICAgICAgICAgICAgICAgfCAg NzAgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAg NCArCiAxMCBmaWxlcyBjaGFuZ2VkLCAxMTkxIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3Rhc2hwZXJzaXN0 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS90LzAwMV9wZXJz aXN0LnBsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUgYi9j b250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQppbmRleCBmNzY3MGMyZDRiNi4uNDcwYzA3 YjlkZDcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlCisrKyBi L2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlCkBAIC00LDEzICs0LDE1IEBAIE1PRFVM RV9iaWcgPSBwZ19zdGFzaF9hZHZpY2UKIE9CSlMgPSBcCiAJJChXSU4zMlJFUykgXAogCXBnX3N0 YXNoX2FkdmljZS5vIFwKLQlzdGFzaGZ1bmNzLm8KKwlzdGFzaGZ1bmNzLm8gXAorCXN0YXNocGVy c2lzdC5vCiAKIEVYVEVOU0lPTiA9IHBnX3N0YXNoX2FkdmljZQogREFUQSA9IHBnX3N0YXNoX2Fk dmljZS0tMS4wLnNxbAogUEdGSUxFREVTQyA9ICJwZ19zdGFzaF9hZHZpY2UgLSBzdG9yZSBhbmQg YXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZSIKIAogUkVHUkVTUyA9IHBnX3N0YXNoX2Fk dmljZSBwZ19zdGFzaF9hZHZpY2VfdXRmOAorVEFQX1RFU1RTID0gMQogRVhUUkFfSU5TVEFMTCA9 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKIAogaWZkZWYgVVNFX1BHWFMKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGFzaF9hZHZp Y2UvbWVzb24uYnVpbGQKaW5kZXggOGZiY2ZjZjg2OTMuLjk2ZjQ4NWI3NzI5IDEwMDY0NAotLS0g YS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZAorKysgYi9jb250cmliL3BnX3N0 YXNoX2FkdmljZS9tZXNvbi5idWlsZApAQCAtMiw3ICsyLDggQEAKIAogcGdfc3Rhc2hfYWR2aWNl X3NvdXJjZXMgPSBmaWxlcygKICAgJ3BnX3N0YXNoX2FkdmljZS5jJywKLSAgJ3N0YXNoZnVuY3Mu YycKKyAgJ3N0YXNoZnVuY3MuYycsCisgICdzdGFzaHBlcnNpc3QuYycKICkKIAogaWYgaG9zdF9z eXN0ZW0gPT0gJ3dpbmRvd3MnCkBAIC0zNCw0ICszNSw5IEBAIHRlc3RzICs9IHsKICAgICAgICdw Z19zdGFzaF9hZHZpY2VfdXRmOCcsCiAgICAgXSwKICAgfSwKKyAgJ3RhcCc6IHsKKyAgICAndGVz dHMnOiBbCisgICAgICAndC8wMDFfcGVyc2lzdC5wbCcsCisgICAgXSwKKyAgfSwKIH0KZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCBi L2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbAppbmRleCA4 OGRlZGQ4ZWYxYi4uNTBmMTJkYWMzMTMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2 aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbAorKysgYi9jb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwKQEAgLTM2LDggKzM2LDE0IEBAIFJFVFVSTlMgU0VU T0YgcmVjb3JkCiBBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9hZHZpY2Vfc3Rhc2hfY29u dGVudHMnCiBMQU5HVUFHRSBDOwogCitDUkVBVEUgRlVOQ1RJT04gcGdfc3RhcnRfc3Rhc2hfYWR2 aWNlX3dvcmtlcigpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfc3Rh cnRfc3Rhc2hfYWR2aWNlX3dvcmtlcicKK0xBTkdVQUdFIEMgU1RSSUNUOworCiBSRVZPS0UgQUxM IE9OIEZVTkNUSU9OIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2godGV4dCkgRlJPTSBQVUJMSUM7CiBS RVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKHRleHQpIEZST00gUFVC TElDOwogUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRz KHRleHQpIEZST00gUFVCTElDOwogUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfYWR2aWNl X3N0YXNoZXMoKSBGUk9NIFBVQkxJQzsKIFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfc2V0X3N0 YXNoZWRfYWR2aWNlKHRleHQsIGJpZ2ludCwgdGV4dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxM IE9OIEZVTkNUSU9OIHBnX3N0YXJ0X3N0YXNoX2FkdmljZV93b3JrZXIoKSBGUk9NIFBVQkxJQzsK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jIGIv Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMKaW5kZXggMTVlN2FkZjg0 OWIuLjE4NThjNmExMzVhIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19z dGFzaF9hZHZpY2UuYworKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZp Y2UuYwpAQCAtMTMsOSArMTMsMTEgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNp bmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVk ZSAibm9kZXMvcXVlcnlqdW1ibGUuaCIKICNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgogI2lu Y2x1ZGUgInBnX3N0YXNoX2FkdmljZS5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIu aCIKICNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgogI2luY2x1ZGUgInV0aWxzL2d1 Yy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC00MSwxMiArNDMsMTQgQEAgc3Rh dGljIGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMgPSB7CiAJ TFdUUkFOQ0hFX0lOVkFMSUQJCQkvKiBnZXRzIHNldCBhdCBydW50aW1lICovCiB9OwogCi0vKiBH VUMgdmFyaWFibGUgKi8KKy8qIEdVQyB2YXJpYWJsZXMgKi8KIHN0YXRpYyBjaGFyICpwZ19zdGFz aF9hZHZpY2Vfc3Rhc2hfbmFtZSA9ICIiOworYm9vbAkJcGdfc3Rhc2hfYWR2aWNlX3BlcnNpc3Qg PSB0cnVlOworaW50CQkJcGdfc3Rhc2hfYWR2aWNlX3BlcnNpc3RfaW50ZXJ2YWwgPSAzMDsKIAog LyogU2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwogcGdzYV9zaGFyZWRfc3RhdGUgKnBnc2Ffc3Rh dGU7Ci1kc2FfYXJlYSAqcGdzYV9kc2FfYXJlYTsKK2RzYV9hcmVhICAgKnBnc2FfZHNhX2FyZWE7 CiBkc2hhc2hfdGFibGUgKnBnc2Ffc3Rhc2hfZHNoYXNoOwogZHNoYXNoX3RhYmxlICpwZ3NhX2Vu dHJ5X2RzaGFzaDsKIApAQCAtODcsNiArOTEsMzMgQEAgX1BHX2luaXQodm9pZCkKIAlFbmFibGVR dWVyeUlkKCk7CiAKIAkvKiBEZWZpbmUgb3VyIEdVQ3MuICovCisJaWYgKHByb2Nlc3Nfc2hhcmVk X3ByZWxvYWRfbGlicmFyaWVzX2luX3Byb2dyZXNzKQorCQlEZWZpbmVDdXN0b21Cb29sVmFyaWFi bGUoInBnX3N0YXNoX2FkdmljZS5wZXJzaXN0IiwKKwkJCQkJCQkJICJTYXZlIGFuZCByZXN0b3Jl IGFkdmljZSBzdGFzaCBjb250ZW50cyBhY3Jvc3MgcmVzdGFydHMuIiwKKwkJCQkJCQkJIE5VTEws CisJCQkJCQkJCSAmcGdfc3Rhc2hfYWR2aWNlX3BlcnNpc3QsCisJCQkJCQkJCSB0cnVlLAorCQkJ CQkJCQkgUEdDX1BPU1RNQVNURVIsCisJCQkJCQkJCSAwLAorCQkJCQkJCQkgTlVMTCwKKwkJCQkJ CQkJIE5VTEwsCisJCQkJCQkJCSBOVUxMKTsKKwllbHNlCisJCXBnX3N0YXNoX2FkdmljZV9wZXJz aXN0ID0gZmFsc2U7CisKKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgicGdfc3Rhc2hfYWR2aWNl LnBlcnNpc3RfaW50ZXJ2YWwiLAorCQkJCQkJCSJJbnRlcnZhbCBiZXR3ZWVuIGFkdmljZSBzdGFz aCBzYXZlcywgaW4gc2Vjb25kcy4iLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3N0YXNoX2Fk dmljZV9wZXJzaXN0X2ludGVydmFsLAorCQkJCQkJCTMwLAorCQkJCQkJCTAsCisJCQkJCQkJMzYw MCwKKwkJCQkJCQlQR0NfU0lHSFVQLAorCQkJCQkJCUdVQ19VTklUX1MsCisJCQkJCQkJTlVMTCwK KwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwpOworCiAJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFi bGUoInBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lIiwKIAkJCQkJCQkgICAiTmFtZSBvZiB0aGUg YWR2aWNlIHN0YXNoIHRvIGJlIHVzZWQgaW4gdGhpcyBzZXNzaW9uLiIsCiAJCQkJCQkJICAgTlVM TCwKQEAgLTEwMCw2ICsxMzEsMTAgQEAgX1BHX2luaXQodm9pZCkKIAogCU1hcmtHVUNQcmVmaXhS ZXNlcnZlZCgicGdfc3Rhc2hfYWR2aWNlIik7CiAKKwkvKiBTdGFydCB0aGUgYmFja2dyb3VuZCB3 b3JrZXIgZm9yIHBlcnNpc3RlbmNlLCBpZiBlbmFibGVkLiAqLworCWlmIChwZ19zdGFzaF9hZHZp Y2VfcGVyc2lzdCkKKwkJcGdzYV9zdGFydF93b3JrZXIoKTsKKwogCS8qIFRlbGwgcGdfcGxhbl9h ZHZpY2UgdGhhdCB3ZSB3YW50IHRvIHByb3ZpZGUgYWR2aWNlIHN0cmluZ3MuICovCiAJYWRkX2Fk dmlzb3JfZm4gPQogCQlsb2FkX2V4dGVybmFsX2Z1bmN0aW9uKCJwZ19wbGFuX2FkdmljZSIsICJw Z19wbGFuX2FkdmljZV9hZGRfYWR2aXNvciIsCkBAIC0xMzEsNiArMTY2LDEwIEBAIHBnc2FfYWR2 aXNvcihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCiAJaWYgKHVubGlrZWx5KHBn c2FfZW50cnlfZHNoYXNoID09IE5VTEwpKQogCQlwZ3NhX2F0dGFjaCgpOwogCisJLyogSWYgc3Rh c2ggZGF0YSBpcyBzdGlsbCBiZWluZyByZXN0b3JlZCBmcm9tIGRpc2ssIGlnbm9yZS4gKi8KKwlp ZiAocGdfYXRvbWljX3VubG9ja2VkX3Rlc3RfZmxhZygmcGdzYV9zdGF0ZS0+c3Rhc2hlc19yZWFk eSkpCisJCXJldHVybiBOVUxMOworCiAJLyoKIAkgKiBUcmFuc2xhdGUgcGdfc3Rhc2hfYWR2aWNl LnN0YXNoX25hbWUgdG8gYW4gaW50ZWdlciBJRC4KIAkgKgpAQCAtMjc5LDYgKzMxOCwxOSBAQCBw Z3NhX2F0dGFjaCh2b2lkKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIH0K IAorLyoKKyAqIEVycm9yIG91dCBpZiB0aGUgc3Rhc2hlcyBoYXZlIG5vdCBiZWVuIGxvYWRlZCBm cm9tIGRpc2sgeWV0LgorICovCit2b2lkCitwZ3NhX2NoZWNrX2xvY2tvdXQodm9pZCkKK3sKKwlp ZiAocGdfYXRvbWljX3VubG9ja2VkX3Rlc3RfZmxhZygmcGdzYV9zdGF0ZS0+c3Rhc2hlc19yZWFk eSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lO X1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygic3Rhc2ggbW9kaWZpY2F0aW9ucyBh cmUgbm90IGFsbG93ZWQgYmVjYXVzZSBcIiVzXCIgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQiLAor CQkJCQkJUEdTQV9EVU1QX0ZJTEUpKSk7Cit9CisKIC8qCiAgKiBDaGVjayB3aGV0aGVyIGFuIGFk dmljZSBzdGFzaCBuYW1lIGlzIGxlZ2FsLCBhbmQgc2lnbmFsIGFuIGVycm9yIGlmIG5vdC4KICAq CkBAIC0zODMsNiArNDM1LDkgQEAgcGdzYV9jcmVhdGVfc3Rhc2goY2hhciAqc3Rhc2hfbmFtZSkK IAkJCQllcnJtc2coImFkdmljZSBzdGFzaCBcIiVzXCIgYWxyZWFkeSBleGlzdHMiLCBzdGFzaF9u YW1lKSk7CiAJc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQgPSBwZ3NhX3N0YXRlLT5uZXh0X3N0YXNoX2lk Kys7CiAJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2gpOworCisJ LyogQnVtcCBjaGFuZ2UgY291bnQuICovCisJcGdfYXRvbWljX2FkZF9mZXRjaF91NjQoJnBnc2Ff c3RhdGUtPmNoYW5nZV9jb3VudCwgMSk7CiB9CiAKIC8qCkBAIC00MjMsNiArNDc4LDkgQEAgcGdz YV9jbGVhcl9hZHZpY2Vfc3RyaW5nKGNoYXIgKnN0YXNoX25hbWUsIGludDY0IHF1ZXJ5SWQpCiAJ LyogTm93IHdlIGZyZWUgdGhlIGFkdmljZSBzdHJpbmcgYXMgd2VsbCwgaWYgdGhlcmUgd2FzIG9u ZS4gKi8KIAlpZiAob2xkX2RwICE9IEludmFsaWREc2FQb2ludGVyKQogCQlkc2FfZnJlZShwZ3Nh X2RzYV9hcmVhLCBvbGRfZHApOworCisJLyogQnVtcCBjaGFuZ2UgY291bnQuICovCisJcGdfYXRv bWljX2FkZF9mZXRjaF91NjQoJnBnc2Ffc3RhdGUtPmNoYW5nZV9jb3VudCwgMSk7CiB9CiAKIC8q CkBAIC00NjQsNiArNTIyLDQzIEBAIHBnc2FfZHJvcF9zdGFzaChjaGFyICpzdGFzaF9uYW1lKQog CQl9CiAJfQogCWRzaGFzaF9zZXFfdGVybSgmaXRlcmF0b3IpOworCisJLyogQnVtcCBjaGFuZ2Ug Y291bnQuICovCisJcGdfYXRvbWljX2FkZF9mZXRjaF91NjQoJnBnc2Ffc3RhdGUtPmNoYW5nZV9j b3VudCwgMSk7Cit9CisKKy8qCisgKiBSZW1vdmUgYWxsIHN0YXNoZXMgYW5kIGVudHJpZXMgZnJv bSBzaGFyZWQgbWVtb3J5LgorICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJl Zm9yZSByZWxvYWRpbmcgZnJvbSBhIGR1bXAgZmlsZSwgc28gdGhhdAorICogYSBmYWlsZWQgcHJl dmlvdXMgYXR0ZW1wdCBkb2Vzbid0IGxlYXZlIHN0YWxlIGRhdGEgYmVoaW5kLgorICovCit2b2lk CitwZ3NhX3Jlc2V0X2FsbF9zdGFzaGVzKHZvaWQpCit7CisJZHNoYXNoX3NlcV9zdGF0dXMgaXRl cjsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKworCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZSgm cGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKSk7CisKKwkvKiBSZW1vdmUgYWxsIHN0YXNo ZXMuICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyLCBwZ3NhX3N0YXNoX2RzaGFzaCwgdHJ1ZSk7 CisJd2hpbGUgKGRzaGFzaF9zZXFfbmV4dCgmaXRlcikgIT0gTlVMTCkKKwkJZHNoYXNoX2RlbGV0 ZV9jdXJyZW50KCZpdGVyKTsKKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXIpOworCisJLyogUmVtb3Zl IGFsbCBlbnRyaWVzLiAqLworCWRzaGFzaF9zZXFfaW5pdCgmaXRlciwgcGdzYV9lbnRyeV9kc2hh c2gsIHRydWUpOworCXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQoJml0ZXIpKSAhPSBO VUxMKQorCXsKKwkJaWYgKGVudHJ5LT5hZHZpY2Vfc3RyaW5nICE9IEludmFsaWREc2FQb2ludGVy KQorCQkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgZW50cnktPmFkdmljZV9zdHJpbmcpOworCQlk c2hhc2hfZGVsZXRlX2N1cnJlbnQoJml0ZXIpOworCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXIp OworCisJLyogUmVzZXQgdGhlIHN0YXNoIElEIGNvdW50ZXIuICovCisJcGdzYV9zdGF0ZS0+bmV4 dF9zdGFzaF9pZCA9IFVJTlQ2NENPTlNUKDEpOwogfQogCiAvKgpAQCAtNDgzLDYgKzU3OCwyMyBA QCBwZ3NhX2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKQogCXN0YXRlLT5h cmVhID0gRFNBX0hBTkRMRV9JTlZBTElEOwogCXN0YXRlLT5zdGFzaF9oYXNoID0gRFNIQVNIX0hB TkRMRV9JTlZBTElEOwogCXN0YXRlLT5lbnRyeV9oYXNoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElE OworCXN0YXRlLT5iZ3dvcmtlcl9waWQgPSBJbnZhbGlkUGlkOworCXBnX2F0b21pY19pbml0X2Zs YWcoJnN0YXRlLT5zdGFzaGVzX3JlYWR5KTsKKwlwZ19hdG9taWNfaW5pdF91NjQoJnN0YXRlLT5j aGFuZ2VfY291bnQsIDApOworCisJLyoKKwkgKiBJZiB0aGlzIG1vZHVsZSB3YXMgbG9hZGVkIHZp YSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMsIHRoZW4KKwkgKiBwZ19zdGFzaF9hZHZpY2VfcGVy c2lzdCBpcyBhIEdVQyB2YXJpYWJsZS4gSWYgaXQncyB0cnVlLCB0aGF0IG1lYW5zCisJICogdGhh dCB3ZSBzaG91bGQgbG9jayBvdXQgbWFudWFsIHN0YXNoIG1vZGlmaWNhdGlvbnMgdW50aWwgdGhl IGR1bXAgZmlsZQorCSAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBsb2FkZWQuIElmIGl0J3MgZmFs c2UsIHRoZXJlJ3Mgbm90aGluZyB0byBsb2FkLAorCSAqIHNvIHdlIHNldCBzdGFzaGVzX3JlYWR5 IGltbWVkaWF0ZWx5LgorCSAqCisJICogSWYgdGhpcyBtb2R1bGUgd2FzIG5vdCBsb2FkZWQgdmlh IHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcywgdGhlbgorCSAqIHBnX3N0YXNoX2FkdmljZV9wZXJz aXN0IGlzIG5vdCBhIEdVQyB2YXJpYWJsZSwgYnV0IGl0IHdpbGwgYmUgZmFsc2UsCisJICogd2hp Y2ggbGVhZHMgdG8gdGhlIGNvcnJlY3QgYmVoYXZpb3IuCisJICovCisJaWYgKCFwZ19zdGFzaF9h ZHZpY2VfcGVyc2lzdCkKKwkJcGdfYXRvbWljX3Rlc3Rfc2V0X2ZsYWcoJnN0YXRlLT5zdGFzaGVz X3JlYWR5KTsKIH0KIAogLyoKQEAgLTYwMiw0ICs3MTQsNjAgQEAgcGdzYV9zZXRfYWR2aWNlX3N0 cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLCBjaGFyICphZHZpY2Vfc3RyaW5n KQogCSAqLwogCWlmIChEc2FQb2ludGVySXNWYWxpZChvbGRfZHApKQogCQlkc2FfZnJlZShwZ3Nh X2RzYV9hcmVhLCBvbGRfZHApOworCisJLyogQnVtcCBjaGFuZ2UgY291bnQuICovCisJcGdfYXRv bWljX2FkZF9mZXRjaF91NjQoJnBnc2Ffc3RhdGUtPmNoYW5nZV9jb3VudCwgMSk7Cit9CisKKy8q CisgKiBTdGFydCBvdXIgd29ya2VyIHByb2Nlc3MuCisgKi8KK3ZvaWQKK3Bnc2Ffc3RhcnRfd29y a2VyKHZvaWQpCit7CisJQmFja2dyb3VuZFdvcmtlciB3b3JrZXIgPSB7MH07CisJQmFja2dyb3Vu ZFdvcmtlckhhbmRsZSAqaGFuZGxlOworCUJnd0hhbmRsZVN0YXR1cyBzdGF0dXM7CisJcGlkX3QJ CXBpZDsKKworCXdvcmtlci5iZ3dfZmxhZ3MgPSBCR1dPUktFUl9TSE1FTV9BQ0NFU1M7CisJd29y a2VyLmJnd19zdGFydF90aW1lID0gQmdXb3JrZXJTdGFydF9Db25zaXN0ZW50U3RhdGU7CisJd29y a2VyLmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfREVGQVVMVF9SRVNUQVJUX0lOVEVSVkFMOworCXN0 cmNweSh3b3JrZXIuYmd3X2xpYnJhcnlfbmFtZSwgInBnX3N0YXNoX2FkdmljZSIpOworCXN0cmNw eSh3b3JrZXIuYmd3X2Z1bmN0aW9uX25hbWUsICJwZ19zdGFzaF9hZHZpY2Vfd29ya2VyX21haW4i KTsKKwlzdHJjcHkod29ya2VyLmJnd19uYW1lLCAicGdfc3Rhc2hfYWR2aWNlIHdvcmtlciIpOwor CXN0cmNweSh3b3JrZXIuYmd3X3R5cGUsICJwZ19zdGFzaF9hZHZpY2Ugd29ya2VyIik7CisKKwkv KgorCSAqIElmIHByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzX2luX3Byb2dyZXNzID0g dHJ1ZSwgd2UgbWF5IGJlIGluCisJICogdGhlIHBvc3RtYXN0ZXIsIGluIHdoaWNoIGNhc2UgdGhp cyB3aWxsIHJlYWxseSByZWdpc3RlciB0aGUgd29ya2VyLCBvcgorCSAqIHdlIG1heSBiZSBpbiBh IGNoaWxkIHByb2Nlc3MgaW4gYW4gRVhFQ19CQUNLRU5EIGJ1aWxkLCBpbiB3aGljaCBjYXNlIGl0 CisJICogd2lsbCBzaWxlbnRseSBkbyBub3RoaW5nICh3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhh dmlvcikuCisJICovCisJaWYgKHByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzX2luX3By b2dyZXNzKQorCXsKKwkJUmVnaXN0ZXJCYWNrZ3JvdW5kV29ya2VyKCZ3b3JrZXIpOworCQlyZXR1 cm47CisJfQorCisJLyoKKwkgKiBJZiBwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19p bl9wcm9ncmVzcyA9IGZhbHNlLCB3ZSdyZSBiZWluZworCSAqIGFza2VkIHRvIHN0YXJ0IHRoZSB3 b3JrZXIgYWZ0ZXIgc3lzdGVtIHN0YXJ0dXAgdGltZS4gSW4gb3RoZXIgd29yZHMsCisJICogdW5s ZXNzIHRoaXMgaXMgc2luZ2xlLXVzZXIgbW9kZSwgd2UncmUgbm90IGluIHRoZSBwb3N0bWFzdGVy LCBzbyB3ZQorCSAqIHNob3VsZCB1c2UgUmVnaXN0ZXJEeW5hbWljQmFja2dyb3VuZFdvcmtlciBh bmQgdGhlbiB3YWl0IGZvciBzdGFydHVwIHRvCisJICogY29tcGxldGUuIChJZiB3ZSBkbyBoYXBw ZW4gdG8gYmUgaW4gc2luZ2xlLXVzZXIgbW9kZSwgdGhpcyB3aWxsIGVycm9yCisJICogb3V0LCB3 aGljaCBpcyBmaW5lLikKKwkgKi8KKwl3b3JrZXIuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7 CisJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKCZ3b3JrZXIsICZoYW5kbGUp KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1JF U09VUkNFUyksCisJCQkJIGVycm1zZygiY291bGQgbm90IHJlZ2lzdGVyIGJhY2tncm91bmQgcHJv Y2VzcyIpLAorCQkJCSBlcnJoaW50KCJZb3UgbWF5IG5lZWQgdG8gaW5jcmVhc2UgXCJtYXhfd29y a2VyX3Byb2Nlc3Nlc1wiLiIpKSk7CisJc3RhdHVzID0gV2FpdEZvckJhY2tncm91bmRXb3JrZXJT dGFydHVwKGhhbmRsZSwgJnBpZCk7CisJaWYgKHN0YXR1cyAhPSBCR1dIX1NUQVJURUQpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VT KSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc3RhcnQgYmFja2dyb3VuZCBwcm9jZXNzIiksCisJ CQkJIGVycmhpbnQoIk1vcmUgZGV0YWlscyBtYXkgYmUgYXZhaWxhYmxlIGluIHRoZSBzZXJ2ZXIg bG9nLiIpKSk7CiB9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFz aF9hZHZpY2UuaCBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5oCmlu ZGV4IGVlYWE2MWUwZjM3Li4wMWFkZWQ0NzJmMyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGFz aF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmgKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uv cGdfc3Rhc2hfYWR2aWNlLmgKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJsaWIvZHNoYXNo LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKIAorI2RlZmluZSBQR1NBX0RVTVBfRklM RQkJInBnX3N0YXNoX2FkdmljZS50c3YiCisKIC8qCiAgKiBUaGUga2V5IHRoYXQgd2UgdXNlIHRv IGZpbmQgYSBwYXJ0aWN1bGFyIHN0YXNoIGVudHJ5LgogICovCkBAIC02Miw2ICs2NCw5IEBAIHR5 cGVkZWYgc3RydWN0IHBnc2Ffc2hhcmVkX3N0YXRlCiAJZHNhX2hhbmRsZQlhcmVhOwogCWRzaGFz aF90YWJsZV9oYW5kbGUgc3Rhc2hfaGFzaDsKIAlkc2hhc2hfdGFibGVfaGFuZGxlIGVudHJ5X2hh c2g7CisJcGlkX3QJCWJnd29ya2VyX3BpZDsKKwlwZ19hdG9taWNfZmxhZyBzdGFzaGVzX3JlYWR5 OworCXBnX2F0b21pY191aW50NjQgY2hhbmdlX2NvdW50OwogfSBwZ3NhX3NoYXJlZF9zdGF0ZTsK IAogLyogRm9yIHN0YXNoIElEIC0+IHN0YXNoIG5hbWUgaGFzaCB0YWJsZSAqLwpAQCAtODYsMTQg KzkxLDIxIEBAIGV4dGVybiBkc2FfYXJlYSAqcGdzYV9kc2FfYXJlYTsKIGV4dGVybiBkc2hhc2hf dGFibGUgKnBnc2Ffc3Rhc2hfZHNoYXNoOwogZXh0ZXJuIGRzaGFzaF90YWJsZSAqcGdzYV9lbnRy eV9kc2hhc2g7CiAKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2V4dGVybiBib29sIHBnX3N0YXNoX2Fk dmljZV9wZXJzaXN0OworZXh0ZXJuIGludAlwZ19zdGFzaF9hZHZpY2VfcGVyc2lzdF9pbnRlcnZh bDsKKwogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwogZXh0ZXJuIHZvaWQgcGdzYV9hdHRhY2go dm9pZCk7CitleHRlcm4gdm9pZCBwZ3NhX2NoZWNrX2xvY2tvdXQodm9pZCk7CiBleHRlcm4gdm9p ZCBwZ3NhX2NoZWNrX3N0YXNoX25hbWUoY2hhciAqc3Rhc2hfbmFtZSk7CiBleHRlcm4gdm9pZCBw Z3NhX2NsZWFyX2FkdmljZV9zdHJpbmcoY2hhciAqc3Rhc2hfbmFtZSwgaW50NjQgcXVlcnlJZCk7 CiBleHRlcm4gdm9pZCBwZ3NhX2NyZWF0ZV9zdGFzaChjaGFyICpzdGFzaF9uYW1lKTsKIGV4dGVy biB2b2lkIHBnc2FfZHJvcF9zdGFzaChjaGFyICpzdGFzaF9uYW1lKTsKIGV4dGVybiB1aW50NjQg cGdzYV9sb29rdXBfc3Rhc2hfaWQoY2hhciAqc3Rhc2hfbmFtZSk7CitleHRlcm4gdm9pZCBwZ3Nh X3Jlc2V0X2FsbF9zdGFzaGVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGdzYV9zZXRfYWR2aWNlX3N0 cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAogCQkJCQkJCQkgICBjaGFyICph ZHZpY2Vfc3RyaW5nKTsKK2V4dGVybiB2b2lkIHBnc2Ffc3RhcnRfd29ya2VyKHZvaWQpOwogCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNoZnVuY3MuYyBi L2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNoZnVuY3MuYwppbmRleCBkOGM2NjlkNmFiNy4u NzdmOGUxOWU4NjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNoZnVu Y3MuYworKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaGZ1bmNzLmMKQEAgLTE0LDYg KzE0LDcgQEAKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAiZm1nci5oIgog I2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw Z19zdGFzaF9hZHZpY2UuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL3R1cGxlc3RvcmUuaCIKQEAgLTIzLDYgKzI0LDcgQEAgUEdfRlVOQ1RJT05fSU5GT19W MShwZ19kcm9wX2FkdmljZV9zdGFzaCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9hZHZp Y2Vfc3Rhc2hfY29udGVudHMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfYWR2aWNlX3N0 YXNoZXMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zZXRfc3Rhc2hlZF9hZHZpY2UpOworUEdf RlVOQ1RJT05fSU5GT19WMShwZ19zdGFydF9zdGFzaF9hZHZpY2Vfd29ya2VyKTsKIAogdHlwZWRl ZiBzdHJ1Y3QgcGdzYV9zdGFzaF9jb3VudAogewpAQCAtNTMsNiArNTUsNyBAQCBwZ19jcmVhdGVf YWR2aWNlX3N0YXNoKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcGdzYV9jaGVja19zdGFzaF9uYW1lKHN0 YXNoX25hbWUpOwogCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKIAkJ cGdzYV9hdHRhY2goKTsKKwlwZ3NhX2NoZWNrX2xvY2tvdXQoKTsKIAlMV0xvY2tBY3F1aXJlKCZw Z3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOwogCXBnc2FfY3JlYXRlX3N0YXNoKHN0YXNo X25hbWUpOwogCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOwpAQCAtNzAsNiArNzMs NyBAQCBwZ19kcm9wX2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQogCXBnc2FfY2hlY2tf c3Rhc2hfbmFtZShzdGFzaF9uYW1lKTsKIAlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2gg PT0gTlVMTCkpCiAJCXBnc2FfYXR0YWNoKCk7CisJcGdzYV9jaGVja19sb2Nrb3V0KCk7CiAJTFdM b2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKIAlwZ3NhX2Ryb3Bf c3Rhc2goc3Rhc2hfbmFtZSk7CiAJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CkBA IC05NCw2ICs5OCwxMCBAQCBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoUEdfRlVOQ1RJT05fQVJHUykK IAlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCiAJCXBnc2FfYXR0YWNo KCk7CiAKKwkvKiBJZiBzdGFzaCBkYXRhIGlzIHN0aWxsIGJlaW5nIHJlc3RvcmVkIGZyb20gZGlz aywgaWdub3JlLiAqLworCWlmIChwZ19hdG9taWNfdW5sb2NrZWRfdGVzdF9mbGFnKCZwZ3NhX3N0 YXRlLT5zdGFzaGVzX3JlYWR5KSkKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwogCS8qIFRhbGx5IHVw IHRoZSBudW1iZXIgb2YgZW50cmllcyBwZXIgc3Rhc2guICovCiAJY2hhc2ggPSBwZ3NhX3N0YXNo X2NvdW50X3RhYmxlX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwgNjQsIE5VTEwpOwogCWRz aGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2FfZW50cnlfZHNoYXNoLCB0cnVlKTsKQEAgLTE1 NCw2ICsxNjIsMTAgQEAgcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhQR19GVU5DVElPTl9B UkdTKQogCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKIAkJcGdzYV9h dHRhY2goKTsKIAorCS8qIElmIHN0YXNoIGRhdGEgaXMgc3RpbGwgYmVpbmcgcmVzdG9yZWQgZnJv bSBkaXNrLCBpZ25vcmUuICovCisJaWYgKHBnX2F0b21pY191bmxvY2tlZF90ZXN0X2ZsYWcoJnBn c2Ffc3RhdGUtPnN0YXNoZXNfcmVhZHkpKQorCQlyZXR1cm4gKERhdHVtKSAwOworCiAJLyogVXNl ciBjYW4gcGFzcyBOVUxMIGZvciBhbGwgc3Rhc2hlcywgb3IgdGhlIG5hbWUgb2YgYSBzcGVjaWZp YyBzdGFzaC4gKi8KIAlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKIAl7CkBAIC0yODYsNiArMjk4LDkg QEAgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKHVubGlrZWx5 KHBnc2FfZW50cnlfZHNoYXNoID09IE5VTEwpKQogCQlwZ3NhX2F0dGFjaCgpOwogCisJLyogRG9u J3QgYWxsb3cgd3JpdGVzIGlmIHN0YXNoIGRhdGEgaXMgc3RpbGwgYmVpbmcgcmVzdG9yZWQgZnJv bSBkaXNrLiAqLworCXBnc2FfY2hlY2tfbG9ja291dCgpOworCiAJLyogTm93IGNhbGwgdGhlIGFw cHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGRvIHRoZSByZWFsIHdvcmsuICovCiAJaWYgKFBHX0FSR0lT TlVMTCgyKSkKIAl7CkBAIC0zMDUsMyArMzIwLDI4IEBAIHBnX3NldF9zdGFzaGVkX2FkdmljZShQ R19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAKKy8qCisgKiBTUUwtY2Fs bGFibGUgZnVuY3Rpb24gdG8gc3RhcnQgdGhlIHBlcnNpc3RlbmNlIGJhY2tncm91bmQgd29ya2Vy LgorICovCitEYXR1bQorcGdfc3RhcnRfc3Rhc2hfYWR2aWNlX3dvcmtlcihQR19GVU5DVElPTl9B UkdTKQoreworCXBpZF90CQlwaWQ7CisKKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2gg PT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRl LT5sb2NrLCBMV19TSEFSRUQpOworCXBpZCA9IHBnc2Ffc3RhdGUtPmJnd29ya2VyX3BpZDsKKwlM V0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKworCWlmIChwaWQgIT0gSW52YWxpZFBp ZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5f UFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJwZ19zdGFzaF9hZHZpY2Ugd29ya2Vy IGlzIGFscmVhZHkgcnVubmluZyB1bmRlciBQSUQgJWQiLAorCQkJCQkJKGludCkgcGlkKSkpOwor CisJcGdzYV9zdGFydF93b3JrZXIoKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaHBlcnNpc3QuYyBiL2NvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL3N0YXNocGVyc2lzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5kYTk2ZWUwZDgwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rh c2hfYWR2aWNlL3N0YXNocGVyc2lzdC5jCkBAIC0wLDAgKzEsNzk5IEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBzdGFzaHBlcnNpc3QuYworICoJICBQZXJzaXN0ZW5jZSBzdXBwb3J0IGZv ciBwZ19zdGFzaF9hZHZpY2UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3N0YXNo X2FkdmljZS9zdGFzaHBlcnNpc3QuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJj b21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAicGdfc3Rh c2hfYWR2aWNlLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgorI2luY2x1ZGUg InBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUg InN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgorI2luY2x1 ZGUgInV0aWxzL2JhY2tlbmRfc3RhdHVzLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKwor dHlwZWRlZiBzdHJ1Y3QgcGdzYV93cml0ZXJfY29udGV4dAoreworCWNoYXIJCXBhdGhuYW1lW01B WFBHUEFUSF07CisJRklMRQkgICAqZmlsZTsKKwlwZ3NhX3N0YXNoX25hbWVfdGFibGVfaGFzaCAq bmhhc2g7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWludAkJCWVudHJpZXNfd3JpdHRlbjsKK30g cGdzYV93cml0ZXJfY29udGV4dDsKKworLyoKKyAqIEEgcGFyc2VkIGVudHJ5IGxpbmUsIHdpdGgg cG9pbnRlcnMgaW50byB0aGUgc2x1cnAgYnVmZmVyLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3Nh X3NhdmVkX2VudHJ5Cit7CisJY2hhcgkgICAqc3Rhc2hfbmFtZTsKKwlpbnQ2NAkJcXVlcnlJZDsK KwljaGFyCSAgICphZHZpY2Vfc3RyaW5nOworfSBwZ3NhX3NhdmVkX2VudHJ5OworCisvKgorICog c2ltcGxlaGFzaCBmb3IgZGV0ZWN0aW5nIGR1cGxpY2F0ZSBzdGFzaCBuYW1lcyBkdXJpbmcgcGFy c2luZy4KKyAqIEtleWVkIGJ5IHN0YXNoIG5hbWUgKGNoYXIgKiksIHBvaW50aW5nIGludG8gdGhl IHNsdXJwIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zYXZlZF9zdGFzaAorewor CXVpbnQzMgkJc3RhdHVzOworCWNoYXIJICAgKm5hbWU7Cit9IHBnc2Ffc2F2ZWRfc3Rhc2g7CisK KyNkZWZpbmUgU0hfUFJFRklYIHBnc2Ffc2F2ZWRfc3Rhc2hfdGFibGUKKyNkZWZpbmUgU0hfRUxF TUVOVF9UWVBFIHBnc2Ffc2F2ZWRfc3Rhc2gKKyNkZWZpbmUgU0hfS0VZX1RZUEUgY2hhciAqCisj ZGVmaW5lIFNIX0tFWSBuYW1lCisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpIGhhc2hfYnl0 ZXMoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgKGtleSksIHN0cmxlbihrZXkpKQorI2RlZmluZSBT SF9FUVVBTCh0YiwgYSwgYikgKHN0cmNtcChhLCBiKSA9PSAwKQorI2RlZmluZSBTSF9TQ09QRSBz dGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFRklORQorI2RlZmluZSBTSF9ERUNMQVJFCisjaW5j bHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgcGdfc3Rh c2hfYWR2aWNlX3dvcmtlcl9tYWluKERhdHVtIG1haW5fYXJnKTsKK3N0YXRpYyB2b2lkIHBnc2Ff YXBwZW5kX3Rzdl9lc2NhcGVkX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqc3Ry KTsKK3N0YXRpYyB2b2lkIHBnc2FfZGV0YWNoX3NobWVtKGludCBjb2RlLCBEYXR1bSBhcmcpOwor c3RhdGljIGNoYXIgKnBnc2FfbmV4dF90c3ZfZmllbGQoY2hhciAqKmN1cnNvcik7CitzdGF0aWMg dm9pZCBwZ3NhX3JlYWRfZnJvbV9kaXNrKHZvaWQpOworc3RhdGljIHZvaWQgcGdzYV9yZXN0b3Jl X2VudHJpZXMocGdzYV9zYXZlZF9lbnRyeSAqZW50cmllcywgaW50IG51bV9lbnRyaWVzKTsKK3N0 YXRpYyB2b2lkIHBnc2FfcmVzdG9yZV9zdGFzaGVzKHBnc2Ffc2F2ZWRfc3Rhc2hfdGFibGVfaGFz aCAqc2F2ZWRfc3Rhc2hlcyk7CitzdGF0aWMgdm9pZCBwZ3NhX3VuZXNjYXBlX3Rzdl9maWVsZChj aGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkJCQkJdW5zaWduZWQgbGluZW5v KTsKK3N0YXRpYyB2b2lkIHBnc2Ffd3JpdGVfZW50cmllcyhwZ3NhX3dyaXRlcl9jb250ZXh0ICp3 Y3R4KTsKK3BnX25vcmV0dXJuIHN0YXRpYyB2b2lkIHBnc2Ffd3JpdGVfZXJyb3IocGdzYV93cml0 ZXJfY29udGV4dCAqd2N0eCk7CitzdGF0aWMgdm9pZCBwZ3NhX3dyaXRlX3N0YXNoZXMocGdzYV93 cml0ZXJfY29udGV4dCAqd2N0eCk7CitzdGF0aWMgdm9pZCBwZ3NhX3dyaXRlX3RvX2Rpc2sodm9p ZCk7CisKKy8qCisgKiBCYWNrZ3JvdW5kIHdvcmtlciBlbnRyeSBwb2ludCBmb3IgcGdfc3Rhc2hf YWR2aWNlIHBlcnNpc3RlbmNlLgorICoKKyAqIE9uIHN0YXJ0dXAsIGlmIGxvYWRfZnJvbV9kaXNr X3BlbmRpbmcgaXMgc2V0LCB3ZSBsb2FkIHByZXZpb3VzbHkgc2F2ZWQKKyAqIHN0YXNoIGRhdGEg ZnJvbSBkaXNrLiAgVGhlbiB3ZSBlbnRlciBhIGxvb3AsIHBlcmlvZGljYWxseSBjaGVja2luZyB3 aGV0aGVyCisgKiBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSAodmlhIHRoZSBjaGFuZ2VfY291 bnQgYXRvbWljIGNvdW50ZXIpIGFuZAorICogd3JpdGluZyB0aGVtIHRvIGRpc2suICBPbiBzaHV0 ZG93biwgd2UgcGVyZm9ybSBhIGZpbmFsIHdyaXRlLgorICovCitQR0RMTEVYUE9SVCB2b2lkCitw Z19zdGFzaF9hZHZpY2Vfd29ya2VyX21haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJdWludDY0CQls YXN0X2NoYW5nZV9jb3VudDsKKwlUaW1lc3RhbXBUeiBsYXN0X3dyaXRlX3RpbWUgPSAwOworCisJ LyogRXN0YWJsaXNoIHNpZ25hbCBoYW5kbGVyczsgb25jZSB0aGF0J3MgZG9uZSwgdW5ibG9jayBz aWduYWxzLiAqLworCXBxc2lnbmFsKFNJR1RFUk0sIFNpZ25hbEhhbmRsZXJGb3JTaHV0ZG93blJl cXVlc3QpOworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7 CisJcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOworCUJhY2tn cm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyogTG9nIGEgZGVidWcgbWVzc2FnZSAq LworCWVyZXBvcnQoREVCVUcxLAorCQkJZXJybXNnKCJwZ19zdGFzaF9hZHZpY2Ugd29ya2VyIHN0 YXJ0ZWQiKSk7CisKKwkvKiBTZXQgdXAgc2Vzc2lvbiB1c2VyIHNvIHBnc3RhdCBjYW4gcmVwb3J0 IGl0LiAqLworCUluaXRpYWxpemVTZXNzaW9uVXNlcklkU3RhbmRhbG9uZSgpOworCisJLyogUmVw b3J0IHRoaXMgd29ya2VyIGluIHBnX3N0YXRfYWN0aXZpdHkuICovCisJcGdzdGF0X2JlaW5pdCgp OworCXBnc3RhdF9iZXN0YXJ0X2luaXRpYWwoKTsKKwlwZ3N0YXRfYmVzdGFydF9maW5hbCgpOwor CisJLyogQXR0YWNoIHRvIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4gKi8KKwlwZ3NhX2F0dGFj aCgpOworCisJLyogU2V0IG9uLWRldGFjaCBob29rIHNvIHRoYXQgb3VyIFBJRCB3aWxsIGJlIGNs ZWFyZWQgb24gZXhpdC4gKi8KKwliZWZvcmVfc2htZW1fZXhpdChwZ3NhX2RldGFjaF9zaG1lbSwg MCk7CisKKwkvKgorCSAqIFN0b3JlIG91ciBQSUQgaW4gc2hhcmVkIG1lbW9yeSwgdW5sZXNzIHRo ZXJlJ3MgYWxyZWFkeSBhbm90aGVyIHdvcmtlcgorCSAqIHJ1bm5pbmcsIGluIHdoaWNoIGNhc2Ug anVzdCBleGl0LgorCSAqLworCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VY Q0xVU0lWRSk7CisJaWYgKHBnc2Ffc3RhdGUtPmJnd29ya2VyX3BpZCAhPSBJbnZhbGlkUGlkKQor CXsKKwkJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CisJCWVyZXBvcnQoTE9HLAor CQkJCShlcnJtc2coInBnX3N0YXNoX2FkdmljZSB3b3JrZXIgaXMgYWxyZWFkeSBydW5uaW5nIHVu ZGVyIFBJRCAlZCIsCisJCQkJCQkoaW50KSBwZ3NhX3N0YXRlLT5iZ3dvcmtlcl9waWQpKSk7CisJ CXJldHVybjsKKwl9CisJcGdzYV9zdGF0ZS0+Ymd3b3JrZXJfcGlkID0gTXlQcm9jUGlkOworCUxX TG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCisJLyoKKwkgKiBJZiBwZ19zdGFzaF9h ZHZpY2UucGVyc2lzdCB3YXMgc2V0IHRvIHRydWUgZHVyaW5nCisJICogcHJvY2Vzc19zaGFyZWRf cHJlbG9hZF9saWJyYXJpZXMoKSBhbmQgdGhlIGRhdGEgaGFzIG5vdCB5ZXQgYmVlbgorCSAqIHN1 Y2Nlc3NmdWxseSBsb2FkZWQsIGxvYWQgaXQgbm93LgorCSAqLworCWlmIChwZ19hdG9taWNfdW5s b2NrZWRfdGVzdF9mbGFnKCZwZ3NhX3N0YXRlLT5zdGFzaGVzX3JlYWR5KSkKKwl7CisJCXBnc2Ff cmVhZF9mcm9tX2Rpc2soKTsKKwkJcGdfYXRvbWljX3Rlc3Rfc2V0X2ZsYWcoJnBnc2Ffc3RhdGUt PnN0YXNoZXNfcmVhZHkpOworCX0KKworCS8qIE5vdGUgdGhlIGN1cnJlbnQgY2hhbmdlIGNvdW50 IHNvIHdlIGNhbiBkZXRlY3QgZnV0dXJlIGNoYW5nZXMuICovCisJbGFzdF9jaGFuZ2VfY291bnQg PSBwZ19hdG9taWNfcmVhZF91NjQoJnBnc2Ffc3RhdGUtPmNoYW5nZV9jb3VudCk7CisKKwkvKiBQ ZXJpb2RpY2FsbHkgd3JpdGUgdG8gZGlzayB1bnRpbCB0ZXJtaW5hdGVkLiAqLworCXdoaWxlICgh U2h1dGRvd25SZXF1ZXN0UGVuZGluZykKKwl7CisJCS8qIEluIGNhc2Ugb2YgYSBTSUdIVVAsIGp1 c3QgcmVsb2FkIHRoZSBjb25maWd1cmF0aW9uLiAqLworCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGlu ZykKKwkJeworCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOworCQkJUHJvY2Vzc0NvbmZp Z0ZpbGUoUEdDX1NJR0hVUCk7CisJCX0KKworCQlpZiAocGdfc3Rhc2hfYWR2aWNlX3BlcnNpc3Rf aW50ZXJ2YWwgPD0gMCkKKwkJeworCQkJLyogT25seSB3cml0aW5nIGF0IHNodXRkb3duLCBzbyBq dXN0IHdhaXQgZm9yZXZlci4gKi8KKwkJCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJ CQkgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgLTFMLAorCQkJ CQkJCSBQR19XQUlUX0VYVEVOU0lPTik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlUaW1lc3RhbXBU eiBuZXh0X3dyaXRlX3RpbWU7CisJCQlsb25nCQlkZWxheV9pbl9tczsKKwkJCXVpbnQ2NAkJY3Vy cmVudF9jaGFuZ2VfY291bnQ7CisKKwkJCS8qIENvbXB1dGUgd2hlbiB0aGUgbmV4dCB3cml0ZSBz aG91bGQgaGFwcGVuLiAqLworCQkJbmV4dF93cml0ZV90aW1lID0KKwkJCQlUaW1lc3RhbXBUelBs dXNNaWxsaXNlY29uZHMobGFzdF93cml0ZV90aW1lLAorCQkJCQkJCQkJCQlwZ19zdGFzaF9hZHZp Y2VfcGVyc2lzdF9pbnRlcnZhbCAqIDEwMDApOworCQkJZGVsYXlfaW5fbXMgPQorCQkJCVRpbWVz dGFtcERpZmZlcmVuY2VNaWxsaXNlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLAorCQkJCQkJ CQkJCQkJbmV4dF93cml0ZV90aW1lKTsKKworCQkJLyoKKwkJCSAqIFdoZW4gd2UgcmVhY2ggbmV4 dF93cml0ZV90aW1lLCB3ZSBhbHdheXMgdXBkYXRlIGxhc3Rfd3JpdGVfdGltZQorCQkJICogKHdo aWNoIGlzIHJlYWxseSB0aGUgdGltZSBhdCB3aGljaCB3ZSBsYXN0IGNvbnNpZGVyZWQgd3JpdGlu ZyksCisJCQkgKiBidXQgd2Ugb25seSBhY3R1YWxseSB3cml0ZSB0byBkaXNrIGlmIHNvbWV0aGlu ZyBoYXMgY2hhbmdlZC4KKwkJCSAqLworCQkJaWYgKGRlbGF5X2luX21zIDw9IDApCisJCQl7CisJ CQkJY3VycmVudF9jaGFuZ2VfY291bnQgPQorCQkJCQlwZ19hdG9taWNfcmVhZF91NjQoJnBnc2Ff c3RhdGUtPmNoYW5nZV9jb3VudCk7CisJCQkJaWYgKGN1cnJlbnRfY2hhbmdlX2NvdW50ICE9IGxh c3RfY2hhbmdlX2NvdW50KQorCQkJCXsKKwkJCQkJcGdzYV93cml0ZV90b19kaXNrKCk7CisJCQkJ CWxhc3RfY2hhbmdlX2NvdW50ID0gY3VycmVudF9jaGFuZ2VfY291bnQ7CisJCQkJfQorCQkJCWxh c3Rfd3JpdGVfdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwkJCQljb250aW51ZTsKKwkJ CX0KKworCQkJLyogU2xlZXAgdW50aWwgdGhlIG5leHQgd3JpdGUgdGltZS4gKi8KKwkJCSh2b2lk KSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8 IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkJIGRlbGF5X2luX21zLAorCQkJCQkJCSBQR19X QUlUX0VYVEVOU0lPTik7CisJCX0KKworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCX0KKworCS8q IFdyaXRlIG9uZSBsYXN0IHRpbWUgYmVmb3JlIGV4aXRpbmcuICovCisJcGdzYV93cml0ZV90b19k aXNrKCk7Cit9CisKKy8qCisgKiBDbGVhciBvdXIgUElEIGZyb20gc2hhcmVkIG1lbW9yeSBvbiBl eGl0LgorICovCitzdGF0aWMgdm9pZAorcGdzYV9kZXRhY2hfc2htZW0oaW50IGNvZGUsIERhdHVt IGFyZykKK3sKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUp OworCWlmIChwZ3NhX3N0YXRlLT5iZ3dvcmtlcl9waWQgPT0gTXlQcm9jUGlkKQorCQlwZ3NhX3N0 YXRlLT5iZ3dvcmtlcl9waWQgPSBJbnZhbGlkUGlkOworCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3Rh dGUtPmxvY2spOworfQorCisvKgorICogTG9hZCBhZHZpY2Ugc3Rhc2ggZGF0YSBmcm9tIGEgZHVt cCBmaWxlIG9uIGRpc2ssIGlmIHRoZXJlIGlzIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2Ff cmVhZF9mcm9tX2Rpc2sodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCUZJTEUJICAg KmZpbGU7CisJY2hhcgkgICAqZmlsZWJ1ZjsKKwlzaXplX3QJCW5yZWFkOworCWNoYXIJICAgKnA7 CisJdW5zaWduZWQJbGluZW5vOworCXBnc2Ffc2F2ZWRfc3Rhc2hfdGFibGVfaGFzaCAqc2F2ZWRf c3Rhc2hlczsKKwlpbnQJCQludW1fc3Rhc2hlcyA9IDA7CisJcGdzYV9zYXZlZF9lbnRyeSAqZW50 cmllczsKKwlpbnQJCQludW1fZW50cmllcyA9IDA7CisJaW50CQkJbWF4X2VudHJpZXMgPSA2NDsK KwlNZW1vcnlDb250ZXh0IHRtcGN4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKworCUFzc2Vy dChwZ3NhX2VudHJ5X2RzaGFzaCAhPSBOVUxMKTsKKworCS8qCisJICogQ2xlYXIgYW55IGV4aXN0 aW5nIHNoYXJlZCBtZW1vcnkgc3RhdGUuCisJICoKKwkgKiBOb3JtYWxseSwgdGhlcmUgd29uJ3Qg YmUgYW55LCBidXQgaWYgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIGJlZm9yZQorCSAqIGFuZCBm YWlsZWQgYWZ0ZXIgYmVnaW5uaW5nIHRvIGFwcGx5IGNoYW5nZXMgdG8gc2hhcmVkIG1lbW9yeSwg dGhlbiB3ZQorCSAqIG5lZWQgdG8gZ2V0IHJpZCBvZiBhbnkgZW50cmllcyBjcmVhdGVkIGF0IHRo YXQgdGltZSBiZWZvcmUgdHJ5aW5nCisJICogYWdhaW4uCisJICovCisJTFdMb2NrQWNxdWlyZSgm cGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwlwZ3NhX3Jlc2V0X2FsbF9zdGFzaGVz KCk7CisJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CisKKwkvKiBPcGVuIHRoZSBk dW1wIGZpbGUuIElmIGl0IGRvZXNuJ3QgZXhpc3QsIHdlJ3JlIGRvbmUuICovCisJZmlsZSA9IEFs bG9jYXRlRmlsZShQR1NBX0RVTVBfRklMRSwgInIiKTsKKwlpZiAoIWZpbGUpCisJeworCQlpZiAo ZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUg XCIlc1wiOiAlbSIsIFBHU0FfRFVNUF9GSUxFKSkpOworCX0KKworCS8qIFVzZSBhIHRlbXBvcmFy eSBjb250ZXh0IGZvciBhbGwgcGFyc2UtcGhhc2UgYWxsb2NhdGlvbnMuICovCisJdG1wY3h0ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICAi cGdfc3Rhc2hfYWR2aWNlIGxvYWQiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVT KTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qIEZpZ3Vy ZSBvdXQgaG93IGxvbmcgdGhlIGZpbGUgaXMuICovCisJaWYgKGZzdGF0KGZpbGVubyhmaWxlKSwg JnN0YXRidWYpICE9IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXQgZmlsZSBcIiVzXCI6ICVtIiwg UEdTQV9EVU1QX0ZJTEUpKSk7CisKKwkvKgorCSAqIFNsdXJwIHRoZSBlbnRpcmUgZmlsZSBpbnRv IG1lbW9yeSBhbGwgYXQgb25jZS4KKwkgKgorCSAqIFdlIGNvdWxkIGF2b2lkIHRoaXMgYnkgcmVh ZGluZyB0aGUgZmlsZSBpbmNyZW1lbnRhbGx5IGFuZCBhcHBseWluZworCSAqIGNoYW5nZXMgdG8g cGdzYV9zdGFzaF9kc2hhc2ggYW5kIHBnc2FfZW50cnlfZHNoYXNoIGFzIHdlIGdvLiBHaXZlbiB0 aGUKKwkgKiBsb2Nrb3V0IG1lY2hhbmlzbSBpbXBsZW1lbnRlZCBieSBzdGFzaGVzX3JlYWR5LCB0 aGF0IHNob3VsZG4ndCBoYXZlIGFueQorCSAqIHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNvbnNl cXVlbmNlcywgYnV0IGl0IHdvdWxkIGNvbnN1bWUgc2hhcmVkCisJICogbWVtb3J5IHRvIG5vIGJl bmVmaXQuIEl0IHNlZW1zIGJldHRlciB0byBidWZmZXIgZXZlcnl0aGluZyBpbiBwcml2YXRlCisJ ICogbWVtb3J5IGZpcnN0LCBhbmQgdGhlbiBvbmx5IGFwcGx5IHRoZSBjaGFuZ2VzIG9uY2UgdGhl IGZpbGUgaGFzIGJlZW4KKwkgKiBzdWNjZXNzZnVsbHkgcGFyc2VkIGluIGl0cyBlbnRpcmV0eS4K KwkgKgorCSAqIFRoYXQgYWxzbyBoYXMgdGhlIGFkdmFudGFnZSBvZiBwb3NzaWJseSBiZWluZyBt b3JlIGZ1dHVyZS1wcm9vZjogaWYgd2UKKwkgKiBkZWNpZGUgdG8gcmVtb3ZlIHRoZSBzdGFzaGVz X3JlYWR5IG1lY2hhbmlzbSBpbiB0aGUgZnV0dXJlLCBvciBzYXkKKwkgKiBhbGxvdyBmb3IgbXVs dGlwbGUgc2F2ZSBmaWxlcywgZnVsbHkgdmFsaWRhdGluZyB0aGUgZmlsZSBiZWZvcmUKKwkgKiBh cHBseWluZyBhbnkgY2hhbmdlcyB3aWxsIGJlY29tZSBtdWNoIG1vcmUgaW1wb3J0YW50LgorCSAq CisJICogT2YgY291cnNlLCB0aGlzIGFwcHJvYWNoIGRvZXMgaGF2ZSBvbmUgbWFqb3IgZGlzYWR2 YW50YWdlLCB3aGljaCBpcworCSAqIHRoYXQgd2UnbGwgdGVtcG9yYXJpbHkgdXNlIGFib3V0IHR3 aWNlIGFzIG11Y2ggbWVtb3J5IGFzIHdlJ3JlCisJICogdWx0aW1hdGVseSBnb2luZyB0byBuZWVk LCBidXQgdGhhdCBzZWVtcyBsaWtlIGl0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0KKwkgKiBpbiBw cmFjdGljZS4gSWYgdGhlcmUncyBzbyBtdWNoIHN0YXNoZWQgYWR2aWNlIHRoYXQgcGFyc2luZyB0 aGUgZGlzaworCSAqIGZpbGUgcnVucyB1cyBvdXQgb2YgbWVtb3J5LCBzb21ldGhpbmcgaGFzIGdv bmUgdGVycmlibHkgd3JvbmcuIEluIHRoYXQKKwkgKiBzaXR1YXRpb24sIHRoZXJlIHByb2JhYmx5 IGFsc28gaXNuJ3QgZW5vdWdoIGZyZWUgbWVtb3J5IGZvciB0aGUKKwkgKiB3b3JrbG9hZCB0aGF0 IHRoZSBhZHZpY2UgaXMgYXR0ZW1wdGluZyB0byBtYW5pcHVsYXRlIHRvIHJ1bgorCSAqIHN1Y2Nl c3NmdWxseS4KKwkgKi8KKwlmaWxlYnVmID0gcGFsbG9jX2V4dGVuZGVkKHN0YXRidWYuc3Rfc2l6 ZSArIDEsIE1DWFRfQUxMT0NfSFVHRSk7CisJbnJlYWQgPSBmcmVhZChmaWxlYnVmLCAxLCBzdGF0 YnVmLnN0X3NpemUsIGZpbGUpOworCWlmIChmZXJyb3IoZmlsZSkpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90 IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwgUEdTQV9EVU1QX0ZJTEUpKSk7CisJRnJlZUZpbGUoZmls ZSk7CisJZmlsZWJ1ZltucmVhZF0gPSAnXDAnOworCisJLyogSW5pdGlhbCBtZW1vcnkgYWxsb2Nh dGlvbnMuICovCisJc2F2ZWRfc3Rhc2hlcyA9IHBnc2Ffc2F2ZWRfc3Rhc2hfdGFibGVfY3JlYXRl KHRtcGN4dCwgNjQsIE5VTEwpOworCWVudHJpZXMgPSBwYWxsb2MobWF4X2VudHJpZXMgKiBzaXpl b2YocGdzYV9zYXZlZF9lbnRyeSkpOworCisJLyoKKwkgKiBGb3IgbWVtb3J5IGFuZCBDUFUgZWZm aWNpZW5jeSwgd2UgcGFyc2UgdGhlIGZpbGUgaW4gcGxhY2UuIFRoZSBlbmQgb2YKKwkgKiBlYWNo IGxpbmUgZ2V0cyByZXBsYWNlZCB3aXRoIGEgTlVMIGJ5dGUsIGFuZCB0aGVuIHRoZSBlbmQgb2Yg ZWFjaCBmaWVsZAorCSAqIHdpdGhpbiBhIGxpbmUgZ2V0cyB0aGUgc2FtZSB0cmVhdG1lbnQuIFRo ZSBhZHZpY2Ugc3RyaW5nIGlzIHVuZXNjYXBlZAorCSAqIGluIHBsYWNlLCBhbmQgc3Rhc2ggbmFt ZXMgYW5kIHF1ZXJ5IElEcyBjYW4ndCBjb250YWluIGFueSBzcGVjaWFsCisJICogY2hhcmFjdGVy cy4gQWxsIG9mIHRoZSByZXN1bHRpbmcgcG9pbnRlcnMgcG9pbnQgcmlnaHQgYmFjayBpbnRvIHRo ZQorCSAqIGJ1ZmZlcjsgd2Ugb25seSBuZWVkIGFkZGl0aW9uYWwgbWVtb3J5IHRvIGdyb3cgdGhl ICdlbnRyaWVzJyBhcnJheSBhbmQKKwkgKiB0aGUgJ3NhdmVkX3N0YXNoZXMnIGhhc2ggdGFibGUu CisJICovCisJZm9yIChwID0gZmlsZWJ1ZiwgbGluZW5vID0gMTsgKnAgIT0gJ1wwJzsgbGluZW5v KyspCisJeworCQljaGFyCSAgICpjdXJzb3IgPSBwOworCQljaGFyCSAgICplb2w7CisJCWNoYXIJ ICAgKmxpbmVfdHlwZTsKKworCQkvKiBGaW5kIGVuZCBvZiBsaW5lIGFuZCBOVUwtdGVybWluYXRl LiAqLworCQllb2wgPSBzdHJjaHIocCwgJ1xuJyk7CisJCWlmIChlb2wgIT0gTlVMTCkKKwkJewor CQkJKmVvbCA9ICdcMCc7CisJCQlwID0gZW9sICsgMTsKKwkJCWlmIChlb2wgPiBjdXJzb3IgJiYg ZW9sWy0xXSA9PSAnXHInKQorCQkJCWVvbFstMV0gPSAnXDAnOworCQl9CisJCWVsc2UKKwkJCXAg Kz0gc3RybGVuKHApOworCisJCS8qIFNraXAgZW1wdHkgbGluZXMuICovCisJCWlmICgqY3Vyc29y ID09ICdcMCcpCisJCQljb250aW51ZTsKKworCQkvKiBGaXJzdCBmaWVsZCBpcyB0aGUgdHlwZSBv ZiBsaW5lLCBlaXRoZXIgInN0YXNoIiBvciAiZW50cnkiLiAqLworCQlsaW5lX3R5cGUgPSBwZ3Nh X25leHRfdHN2X2ZpZWxkKCZjdXJzb3IpOworCQlpZiAoc3RyY21wKGxpbmVfdHlwZSwgInN0YXNo IikgPT0gMCkKKwkJeworCQkJY2hhcgkgICAqbmFtZTsKKwkJCWJvb2wJCWZvdW5kOworCisJCQkv KiBTZWNvbmQgZmllbGQgc2hvdWxkIGJlIHRoZSBzdGFzaCBuYW1lLiAqLworCQkJbmFtZSA9IHBn c2FfbmV4dF90c3ZfZmllbGQoJmN1cnNvcik7CisJCQlpZiAobmFtZSA9PSBOVUxMIHx8ICpuYW1l ID09ICdcMCcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFU QV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wi IGxpbmUgJXU6IGV4cGVjdGVkIHN0YXNoIG5hbWUiLAorCQkJCQkJCQlQR1NBX0RVTVBfRklMRSwg bGluZW5vKSkpOworCisJCQkvKiBObyBmdXJ0aGVyIGZpZWxkcyBhcmUgZXhwZWN0ZWQuICovCisJ CQlpZiAoKmN1cnNvciAhPSAnXDAnKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29k ZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkJCSBlcnJtc2coInN5bnRheCBlcnJvciBp biBmaWxlIFwiJXNcIiBsaW5lICV1OiBleHBlY3RlZCBlbmQgb2YgbGluZSIsCisJCQkJCQkJCVBH U0FfRFVNUF9GSUxFLCBsaW5lbm8pKSk7CisKKwkJCS8qIER1cGxpY2F0ZSBjaGVjay4gKi8KKwkJ CSh2b2lkKSBwZ3NhX3NhdmVkX3N0YXNoX3RhYmxlX2luc2VydChzYXZlZF9zdGFzaGVzLCBuYW1l LCAmZm91bmQpOworCQkJaWYgKGZvdW5kKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkJCSBlcnJtc2coInN5bnRheCBlcnJv ciBpbiBmaWxlIFwiJXNcIiBsaW5lICV1OiBkdXBsaWNhdGUgc3Rhc2ggbmFtZSBcIiVzXCIiLAor CQkJCQkJCQlQR1NBX0RVTVBfRklMRSwgbGluZW5vLCBuYW1lKSkpOworCQkJbnVtX3N0YXNoZXMr KzsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAobGluZV90eXBlLCAiZW50cnkiKSA9PSAwKQorCQl7 CisJCQljaGFyCSAgICpzdGFzaF9uYW1lOworCQkJY2hhcgkgICAqcXVlcnlpZF9zdHI7CisJCQlj aGFyCSAgICphZHZpY2Vfc3RyOworCQkJY2hhcgkgICAqZW5kcHRyOworCQkJaW50NjQJCXF1ZXJ5 SWQ7CisKKwkJCS8qIFNlY29uZCBmaWVsZCBzaG91bGQgYmUgdGhlIHN0YXNoIG5hbWUuICovCisJ CQlzdGFzaF9uYW1lID0gcGdzYV9uZXh0X3Rzdl9maWVsZCgmY3Vyc29yKTsKKwkJCWlmIChzdGFz aF9uYW1lID09IE5VTEwpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNP REVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIGZpbGUg XCIlc1wiIGxpbmUgJXU6IGV4cGVjdGVkIHN0YXNoIG5hbWUiLAorCQkJCQkJCQlQR1NBX0RVTVBf RklMRSwgbGluZW5vKSkpOworCisJCQkvKiBUaGlyZCBmaWVsZCBzaG91bGQgYmUgdGhlIHF1ZXJ5 IElELiAqLworCQkJcXVlcnlpZF9zdHIgPSBwZ3NhX25leHRfdHN2X2ZpZWxkKCZjdXJzb3IpOwor CQkJaWYgKHF1ZXJ5aWRfc3RyID09IE5VTEwpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1zZygic3ludGF4IGVy cm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IGV4cGVjdGVkIHF1ZXJ5IElEIiwKKwkJCQkJCQkJ UEdTQV9EVU1QX0ZJTEUsIGxpbmVubykpKTsKKworCQkJLyogRm91cnRoIGZpZWxkIHNob3VsZCBi ZSB0aGUgYWR2aWNlIHN0cmluZy4gKi8KKwkJCWFkdmljZV9zdHIgPSBwZ3NhX25leHRfdHN2X2Zp ZWxkKCZjdXJzb3IpOworCQkJaWYgKGFkdmljZV9zdHIgPT0gTlVMTCkKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCisJCQkJCQkgZXJy bXNnKCJzeW50YXggZXJyb3IgaW4gZmlsZSBcIiVzXCIgbGluZSAldTogZXhwZWN0ZWQgYWR2aWNl IHN0cmluZyIsCisJCQkJCQkJCVBHU0FfRFVNUF9GSUxFLCBsaW5lbm8pKSk7CisKKwkJCS8qIE5v IGZ1cnRoZXIgZmllbGRzIGFyZSBleHBlY3RlZC4gKi8KKwkJCWlmICgqY3Vyc29yICE9ICdcMCcp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBU RUQpLAorCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6 IGV4cGVjdGVkIGVuZCBvZiBsaW5lIiwKKwkJCQkJCQkJUEdTQV9EVU1QX0ZJTEUsIGxpbmVubykp KTsKKworCQkJLyogTWFrZSBzdXJlIHRoZSBzdGFzaCBpcyBvbmUgd2UndmUgYWN0dWFsbHkgc2Vl bi4gKi8KKwkJCWlmIChwZ3NhX3NhdmVkX3N0YXNoX3RhYmxlX2xvb2t1cChzYXZlZF9zdGFzaGVz LAorCQkJCQkJCQkJCQkgIHN0YXNoX25hbWUpID09IE5VTEwpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1zZygi c3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IHVua25vd24gc3Rhc2ggXCIlc1wi IiwKKwkJCQkJCQkJUEdTQV9EVU1QX0ZJTEUsIGxpbmVubywgc3Rhc2hfbmFtZSkpKTsKKworCQkJ LyogUGFyc2UgdGhlIHF1ZXJ5IElELiAqLworCQkJZXJybm8gPSAwOworCQkJcXVlcnlJZCA9IHN0 cnRvbGwocXVlcnlpZF9zdHIsICZlbmRwdHIsIDEwKTsKKwkJCWlmICgqZW5kcHRyICE9ICdcMCcg fHwgZXJybm8gIT0gMCB8fCBxdWVyeWlkX3N0ciA9PSBlbmRwdHIpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1z Zygic3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IGludmFsaWQgcXVlcnkgSUQg XCIlc1wiIiwKKwkJCQkJCQkJUEdTQV9EVU1QX0ZJTEUsIGxpbmVubywgcXVlcnlpZF9zdHIpKSk7 CisKKwkJCS8qIFVuZXNjYXBlIHRoZSBhZHZpY2Ugc3RyaW5nLiAqLworCQkJcGdzYV91bmVzY2Fw ZV90c3ZfZmllbGQoYWR2aWNlX3N0ciwgUEdTQV9EVU1QX0ZJTEUsIGxpbmVubyk7CisKKwkJCS8q IEFwcGVuZCB0byB0aGUgZW50cnkgYXJyYXkuICovCisJCQlpZiAobnVtX2VudHJpZXMgPj0gbWF4 X2VudHJpZXMpCisJCQl7CisJCQkJbWF4X2VudHJpZXMgKj0gMjsKKwkJCQllbnRyaWVzID0gcmVw YWxsb2MoZW50cmllcywKKwkJCQkJCQkJICAgbWF4X2VudHJpZXMgKiBzaXplb2YocGdzYV9zYXZl ZF9lbnRyeSkpOworCQkJfQorCQkJZW50cmllc1tudW1fZW50cmllc10uc3Rhc2hfbmFtZSA9IHN0 YXNoX25hbWU7CisJCQllbnRyaWVzW251bV9lbnRyaWVzXS5xdWVyeUlkID0gcXVlcnlJZDsKKwkJ CWVudHJpZXNbbnVtX2VudHJpZXNdLmFkdmljZV9zdHJpbmcgPSBhZHZpY2Vfc3RyOworCQkJbnVt X2VudHJpZXMrKzsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkgZXJybXNnKCJzeW50YXggZXJy b3IgaW4gZmlsZSBcIiVzXCIgbGluZSAldTogdW5yZWNvZ25pemVkIGxpbmUgdHlwZSIsCisJCQkJ CQkJUEdTQV9EVU1QX0ZJTEUsIGxpbmVubykpKTsKKwkJfQorCX0KKworCS8qCisJICogUGFyc2lu ZyBzdWNjZWVkZWQuIEFwcGx5IGV2ZXJ5dGhpbmcgdG8gc2hhcmVkIG1lbW9yeS4KKwkgKgorCSAq IEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhhdCB0aGUgZmlsZSB3ZSBqdXN0IHJlYWQgaXMgZnVs bHkgdmFsaWQsIGJ1dAorCSAqIGl0J3Mgc3RpbGwgcG9zc2libGUgZm9yIHRoaXMgdG8gZmFpbCBp ZiwgZm9yIGV4YW1wbGUsIERTQSBtZW1vcnkgY2Fubm90CisJICogYmUgYWxsb2NhdGVkLiBJZiB0 aGF0IGhhcHBlbnMsIHRoZSB3b3JrZXIgd2lsbCBkaWUsIHRoZSBwb3N0bWFzdGVyIHdpbGwKKwkg KiBldmVudHVhbGx5IHJlc3RhcnQgaXQsIGFuZCB3ZSdsbCB0cnkgYWdhaW4gYWZ0ZXIgY2xlYXJp bmcgYW55IGRhdGEgdGhhdAorCSAqIHdlIGRpZCBtYW5hZ2UgdG8gcHV0IGludG8gc2hhcmVkIG1l bW9yeS4gKE5vdGUgdGhhdCB3ZSBjYWxsCisJICogcGdzYV9yZXNldF9hbGxfc3Rhc2hlcygpIGF0 IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbi4pCisJICovCisJcGdzYV9yZXN0b3JlX3N0YXNoZXMo c2F2ZWRfc3Rhc2hlcyk7CisJcGdzYV9yZXN0b3JlX2VudHJpZXMoZW50cmllcywgbnVtX2VudHJp ZXMpOworCisJLyogSG9vcmF5LCBpdCB3b3JrZWQhIE5vdGlmeSB0aGUgdXNlci4gKi8KKwllcmVw b3J0KExPRywKKwkJCShlcnJtc2coImxvYWRlZCAlZCBhZHZpY2Ugc3Rhc2hlcyBhbmQgJWQgZW50 cmllcyBmcm9tIFwiJXNcIiIsCisJCQkJCW51bV9zdGFzaGVzLCBudW1fZW50cmllcywgUEdTQV9E VU1QX0ZJTEUpKSk7CisKKwkvKiBDbGVhbiB1cC4gKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7Cit9CisKKy8qCisgKiBXcml0 ZSBhbGwgYWR2aWNlIHN0YXNoIGRhdGEgdG8gZGlzay4KKyAqCisgKiBUaGUgZmlsZSBmb3JtYXQg aXMgYSBzaW1wbGUgVFNWIHdpdGggYSBsaW5lLXR5cGUgcHJlZml4OgorICogICBzdGFzaFx0c3Rh c2hfbmFtZQorICogICBlbnRyeVx0c3Rhc2hfbmFtZVx0cXVlcnlfaWRcdGFkdmljZV9zdHJpbmcK KyAqLworc3RhdGljIHZvaWQKK3Bnc2Ffd3JpdGVfdG9fZGlzayh2b2lkKQoreworCXBnc2Ffd3Jp dGVyX2NvbnRleHQgd2N0eCA9IHswfTsKKwlNZW1vcnlDb250ZXh0IHRtcGN4dDsKKwlNZW1vcnlD b250ZXh0IG9sZGN4dDsKKworCUFzc2VydChwZ3NhX2VudHJ5X2RzaGFzaCAhPSBOVUxMKTsKKwor CS8qIFVzZSBhIHRlbXBvcmFyeSBjb250ZXh0IHNvIGFsbCBhbGxvY2F0aW9ucyBhcmUgZnJlZWQg YXQgdGhlIGVuZC4gKi8KKwl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1l bW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJwZ19zdGFzaF9hZHZpY2UgZHVtcCIsCisJCQkJCQkJ CSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyh0bXBjeHQpOworCisJLyogU2V0IHVwIHRoZSB3cml0ZXIgY29udGV4dC4gKi8KKwlzbnBy aW50Zih3Y3R4LnBhdGhuYW1lLCBNQVhQR1BBVEgsICIlcy50bXAiLCBQR1NBX0RVTVBfRklMRSk7 CisJd2N0eC5maWxlID0gQWxsb2NhdGVGaWxlKHdjdHgucGF0aG5hbWUsICJ3Iik7CisJaWYgKCF3 Y3R4LmZpbGUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCisJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgd2N0eC5w YXRobmFtZSkpKTsKKwl3Y3R4Lm5oYXNoID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2NyZWF0ZSh0 bXBjeHQsIDY0LCBOVUxMKTsKKwlpbml0U3RyaW5nSW5mbygmd2N0eC5idWYpOworCisJLyogV3Jp dGUgc3Rhc2ggbGluZXMsIHRoZW4gZW50cnkgbGluZXMuICovCisJcGdzYV93cml0ZV9zdGFzaGVz KCZ3Y3R4KTsKKwlwZ3NhX3dyaXRlX2VudHJpZXMoJndjdHgpOworCisJLyoKKwkgKiBJZiBub3Ro aW5nIHdhcyB3cml0dGVuLCByZW1vdmUgYm90aCB0aGUgdGVtcCBmaWxlIGFuZCBhbnkgZXhpc3Rp bmcgZHVtcAorCSAqIGZpbGUgcmF0aGVyIHRoYW4gaW5zdGFsbGluZyBhIHplcm8tbGVuZ3RoIGZp bGUuCisJICovCisJaWYgKHdjdHgubmhhc2gtPm1lbWJlcnMgPT0gMCkKKwl7CisJCWVyZXBvcnQo REVCVUcxLAorCQkJCWVycm1zZygidGhlcmUgYXJlIG5vIGFkdmljZSBzdGFzaGVzIHRvIHNhdmUi KSk7CisJCUZyZWVGaWxlKHdjdHguZmlsZSk7CisJCXVubGluayh3Y3R4LnBhdGhuYW1lKTsKKwkJ aWYgKHVubGluayhQR1NBX0RVTVBfRklMRSkgPT0gMCkKKwkJCWVyZXBvcnQoREVCVUcxLAorCQkJ CQllcnJtc2coInJlbW92ZWQgXCIlc1wiIiwgUEdTQV9EVU1QX0ZJTEUpKTsKKwl9CisJZWxzZQor CXsKKwkJaWYgKEZyZWVGaWxlKHdjdHguZmlsZSkgIT0gMCkKKwkJeworCQkJaW50CQkJc2F2ZV9l cnJubyA9IGVycm5vOworCisJCQl1bmxpbmsod2N0eC5wYXRobmFtZSk7CisJCQllcnJubyA9IHNh dmVfZXJybm87CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IGNsb3NlIGZpbGUgXCIlc1wiOiAlbSIsCisJ CQkJCQkJd2N0eC5wYXRobmFtZSkpKTsKKwkJfQorCQkodm9pZCkgZHVyYWJsZV9yZW5hbWUod2N0 eC5wYXRobmFtZSwgUEdTQV9EVU1QX0ZJTEUsIEVSUk9SKTsKKworCQllcmVwb3J0KExPRywKKwkJ CQllcnJtc2coInNhdmVkICVkIGFkdmljZSBzdGFzaGVzIGFuZCAlZCBlbnRyaWVzIHRvIFwiJXNc IiIsCisJCQkJCSAgIChpbnQpIHdjdHgubmhhc2gtPm1lbWJlcnMsIHdjdHguZW50cmllc193cml0 dGVuLAorCQkJCQkgICBQR1NBX0RVTVBfRklMRSkpOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsKK30KKworLyoKKyAq IEFwcGVuZCB0aGUgVFNWLWVzY2FwZWQgZm9ybSBvZiBzdHIgdG8gYnVmLgorICoKKyAqIEJhY2tz bGFzaCwgdGFiLCBuZXdsaW5lLCBhbmQgY2FycmlhZ2UgcmV0dXJuIGFyZSBlc2NhcGVkIHdpdGgg YmFja3NsYXNoCisgKiBzZXF1ZW5jZXMuICBBbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgcGFzc2Vk IHRocm91Z2ggdW5jaGFuZ2VkLgorICovCitzdGF0aWMgdm9pZAorcGdzYV9hcHBlbmRfdHN2X2Vz Y2FwZWRfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpzdHIpCit7CisJZm9yIChj b25zdCBjaGFyICpwID0gc3RyOyAqcCAhPSAnXDAnOyBwKyspCisJeworCQlzd2l0Y2ggKCpwKQor CQl7CisJCQljYXNlICdcXCc6CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcXFxc Iik7CisJCQkJYnJlYWs7CisJCQljYXNlICdcdCc6CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICJcXHQiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1xuJzoKKwkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgIlxcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSAnXHInOgorCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXFxyIik7CisJCQkJYnJlYWs7CisJCQlkZWZh dWx0OgorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgKnApOworCQkJCWJyZWFrOworCQl9 CisJfQorfQorCisvKgorICogRXh0cmFjdCB0aGUgbmV4dCB0YWItZGVsaW1pdGVkIGZpZWxkIGZy b20gKmN1cnNvci4KKyAqCisgKiBUaGUgdGFiIGRlbGltaXRlciBpcyByZXBsYWNlZCB3aXRoICdc MCcgYW5kICpjdXJzb3IgaXMgYWR2YW5jZWQgcGFzdCBpdC4KKyAqIElmICpjdXJzb3IgYWxyZWFk eSBwb2ludHMgdG8gJ1wwJyAobm8gbW9yZSBmaWVsZHMpLCByZXR1cm5zIE5VTEwuCisgKi8KK3N0 YXRpYyBjaGFyICoKK3Bnc2FfbmV4dF90c3ZfZmllbGQoY2hhciAqKmN1cnNvcikKK3sKKwljaGFy CSAgICpzdGFydCA9ICpjdXJzb3I7CisJY2hhcgkgICAqcCA9IHN0YXJ0OworCisJaWYgKCpwID09 ICdcMCcpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJ1x0 JykKKwkJcCsrOworCisJaWYgKCpwID09ICdcdCcpCisJCSpwKysgPSAnXDAnOworCisJKmN1cnNv ciA9IHA7CisJcmV0dXJuIHN0YXJ0OworfQorCisvKgorICogSW5zZXJ0IGVudHJpZXMgaW50byBz aGFyZWQgbWVtb3J5IGZyb20gdGhlIHBhcnNlZCBlbnRyeSBhcnJheS4KKyAqLworc3RhdGljIHZv aWQKK3Bnc2FfcmVzdG9yZV9lbnRyaWVzKHBnc2Ffc2F2ZWRfZW50cnkgKmVudHJpZXMsIGludCBu dW1fZW50cmllcykKK3sKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19TSEFS RUQpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykKKwl7CisJCWVyZXBv cnQoREVCVUcyLAorCQkJCWVycm1zZygicmVzdG9yaW5nIGFkdmljZSBzdGFzaCBlbnRyeSBmb3Ig XCIlc1wiLCBxdWVyeSBJRCAlIiBQUklkNjQsCisJCQkJCSAgIGVudHJpZXNbaV0uc3Rhc2hfbmFt ZSwgZW50cmllc1tpXS5xdWVyeUlkKSk7CisJCXBnc2Ffc2V0X2FkdmljZV9zdHJpbmcoZW50cmll c1tpXS5zdGFzaF9uYW1lLAorCQkJCQkJCSAgIGVudHJpZXNbaV0ucXVlcnlJZCwKKwkJCQkJCQkg ICBlbnRyaWVzW2ldLmFkdmljZV9zdHJpbmcpOworCX0KKwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0 YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIENyZWF0ZSBzdGFzaGVzIGluIHNoYXJlZCBtZW1vcnkg ZnJvbSB0aGUgcGFyc2VkIHN0YXNoIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Nh X3Jlc3RvcmVfc3Rhc2hlcyhwZ3NhX3NhdmVkX3N0YXNoX3RhYmxlX2hhc2ggKnNhdmVkX3N0YXNo ZXMpCit7CisJcGdzYV9zYXZlZF9zdGFzaF90YWJsZV9pdGVyYXRvciBpdGVyOworCXBnc2Ffc2F2 ZWRfc3Rhc2ggKnM7CisKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENM VVNJVkUpOworCXBnc2Ffc2F2ZWRfc3Rhc2hfdGFibGVfc3RhcnRfaXRlcmF0ZShzYXZlZF9zdGFz aGVzLCAmaXRlcik7CisJd2hpbGUgKChzID0gcGdzYV9zYXZlZF9zdGFzaF90YWJsZV9pdGVyYXRl KHNhdmVkX3N0YXNoZXMsCisJCQkJCQkJCQkJCSAgICZpdGVyKSkgIT0gTlVMTCkKKwl7CisJCWVy ZXBvcnQoREVCVUcyLAorCQkJCWVycm1zZygicmVzdG9yaW5nIGFkdmljZSBzdGFzaCBcIiVzXCIi LCBzLT5uYW1lKSk7CisJCXBnc2FfY3JlYXRlX3N0YXNoKHMtPm5hbWUpOworCX0KKwlMV0xvY2tS ZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIFVuZXNjYXBlIGEgVFNWIGZp ZWxkIGluIHBsYWNlLgorICoKKyAqIFJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgXFws IFx0LCBcbiwgYW5kIFxyLiAgQSB0cmFpbGluZyBiYWNrc2xhc2gKKyAqIG9yIGFuIHVucmVjb2du aXplZCBlc2NhcGUgc2VxdWVuY2UgaXMgYSBzeW50YXggZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3NhX3VuZXNjYXBlX3Rzdl9maWVsZChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LCB1bnNpZ25lZCBsaW5lbm8pCit7CisJY2hhcgkgICAqc3JjID0gc3RyOworCWNoYXIJICAgKmRz dCA9IHN0cjsKKworCXdoaWxlICgqc3JjICE9ICdcMCcpCisJeworCQkvKiBKdXN0IHBhc3MgdGhy b3VnaCBhbnl0aGluZyB0aGF0J3Mgbm90IGEgYmFja3NsYXNoLWVzY2FwZS4gKi8KKwkJaWYgKGxp a2VseSgqc3JjICE9ICdcXCcpKQorCQl7CisJCQkqZHN0KysgPSAqc3JjKys7CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qIENoZWNrIHdoYXQgc29ydCBvZiBlc2NhcGUgd2UndmUgZ290LiAqLwor CQlzd2l0Y2ggKHNyY1sxXSkKKwkJeworCQkJY2FzZSAnXFwnOgorCQkJCSpkc3QrKyA9ICdcXCc7 CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJCQkqZHN0KysgPSAnXHQnOworCQkJCWJyZWFr OworCQkJY2FzZSAnbic6CisJCQkJKmRzdCsrID0gJ1xuJzsKKwkJCQlicmVhazsKKwkJCWNhc2Ug J3InOgorCQkJCSpkc3QrKyA9ICdccic7CisJCQkJYnJlYWs7CisJCQljYXNlICdcMCc6CisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAor CQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IHRyYWls aW5nIGJhY2tzbGFzaCIsCisJCQkJCQkJCWZpbGVuYW1lLCBsaW5lbm8pKSk7CisJCQkJYnJlYWs7 CisJCQlkZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkJCSBlcnJtc2coInN5bnRheCBlcnJvciBpbiBmaWxlIFwi JXNcIiBsaW5lICV1OiB1bnJlY29nbml6ZWQgZXNjYXBlIFwiXFwlY1wiIiwKKwkJCQkJCQkJZmls ZW5hbWUsIGxpbmVubywgc3JjWzFdKSkpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyogV2UgY29u c3VtZWQgdGhlIGJhY2tzbGFzaCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIuICovCisJCXNy YyArPSAyOworCX0KKwkqZHN0ID0gJ1wwJzsKK30KKworLyoKKyAqIFdyaXRlIGFuIGVudHJ5IGxp bmUgZm9yIGVhY2ggYWR2aWNlIGVudHJ5LgorICovCitzdGF0aWMgdm9pZAorcGdzYV93cml0ZV9l bnRyaWVzKHBnc2Ffd3JpdGVyX2NvbnRleHQgKndjdHgpCit7CisJZHNoYXNoX3NlcV9zdGF0dXMg aXRlcjsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKworCWRzaGFzaF9zZXFfaW5pdCgmaXRlciwgcGdz YV9lbnRyeV9kc2hhc2gsIHRydWUpOworCXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQo Jml0ZXIpKSAhPSBOVUxMKQorCXsKKwkJcGdzYV9zdGFzaF9uYW1lICpuOworCQljaGFyCSAgICph ZHZpY2Vfc3RyaW5nOworCisJCWlmIChlbnRyeS0+YWR2aWNlX3N0cmluZyA9PSBJbnZhbGlkRHNh UG9pbnRlcikKKwkJCWNvbnRpbnVlOworCisJCW4gPSBwZ3NhX3N0YXNoX25hbWVfdGFibGVfbG9v a3VwKHdjdHgtPm5oYXNoLAorCQkJCQkJCQkJCSBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpOwor CQlpZiAobiA9PSBOVUxMKQorCQkJY29udGludWU7CQkJLyogb3JwaGFuIGVudHJ5LCBza2lwICov CisKKwkJYWR2aWNlX3N0cmluZyA9IGRzYV9nZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBlbnRy eS0+YWR2aWNlX3N0cmluZyk7CisKKwkJcmVzZXRTdHJpbmdJbmZvKCZ3Y3R4LT5idWYpOworCQlh cHBlbmRTdHJpbmdJbmZvKCZ3Y3R4LT5idWYsICJlbnRyeVx0JXNcdCUiIFBSSWQ2NCAiXHQiLAor CQkJCQkJIG4tPm5hbWUsIGVudHJ5LT5rZXkucXVlcnlJZCk7CisJCXBnc2FfYXBwZW5kX3Rzdl9l c2NhcGVkX3N0cmluZygmd2N0eC0+YnVmLCBhZHZpY2Vfc3RyaW5nKTsKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJndjdHgtPmJ1ZiwgJ1xuJyk7CisJCWZ3cml0ZSh3Y3R4LT5idWYuZGF0YSwgMSwg d2N0eC0+YnVmLmxlbiwgd2N0eC0+ZmlsZSk7CisJCWlmIChmZXJyb3Iod2N0eC0+ZmlsZSkpCisJ CQlwZ3NhX3dyaXRlX2Vycm9yKHdjdHgpOworCQl3Y3R4LT5lbnRyaWVzX3dyaXR0ZW4rKzsKKwl9 CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyKTsKK30KKworLyoKKyAqIENsZWFuIHVwIGFuZCByZXBv cnQgYSB3cml0ZSBlcnJvci4gIERvZXMgbm90IHJldHVybi4KKyAqLworc3RhdGljIHZvaWQKK3Bn c2Ffd3JpdGVfZXJyb3IocGdzYV93cml0ZXJfY29udGV4dCAqd2N0eCkKK3sKKwlpbnQJCQlzYXZl X2Vycm5vID0gZXJybm87CisKKwlGcmVlRmlsZSh3Y3R4LT5maWxlKTsKKwl1bmxpbmsod2N0eC0+ cGF0aG5hbWUpOworCWVycm5vID0gc2F2ZV9lcnJubzsKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVy cmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdG8g ZmlsZSBcIiVzXCI6ICVtIiwgd2N0eC0+cGF0aG5hbWUpKSk7Cit9CisKKy8qCisgKiBXcml0ZSBh IHN0YXNoIGxpbmUgZm9yIGVhY2ggYWR2aWNlIHN0YXNoLCBhbmQgcG9wdWxhdGUgdGhlIElELXRv LW5hbWUKKyAqIGhhc2ggdGFibGUgZm9yIHVzZSBieSBwZ3NhX3dyaXRlX2VudHJpZXMuCisgKi8K K3N0YXRpYyB2b2lkCitwZ3NhX3dyaXRlX3N0YXNoZXMocGdzYV93cml0ZXJfY29udGV4dCAqd2N0 eCkKK3sKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyOworCXBnc2Ffc3Rhc2ggKnN0YXNoOworCisJ ZHNoYXNoX3NlcV9pbml0KCZpdGVyLCBwZ3NhX3N0YXNoX2RzaGFzaCwgdHJ1ZSk7CisJd2hpbGUg KChzdGFzaCA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcikpICE9IE5VTEwpCisJeworCQlwZ3NhX3N0 YXNoX25hbWUgKm47CisJCWJvb2wJCWZvdW5kOworCisJCW4gPSBwZ3NhX3N0YXNoX25hbWVfdGFi bGVfaW5zZXJ0KHdjdHgtPm5oYXNoLCBzdGFzaC0+cGdzYV9zdGFzaF9pZCwKKwkJCQkJCQkJCQkg JmZvdW5kKTsKKwkJQXNzZXJ0KCFmb3VuZCk7CisJCW4tPm5hbWUgPSBwc3RyZHVwKHN0YXNoLT5u YW1lKTsKKworCQlyZXNldFN0cmluZ0luZm8oJndjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0lu Zm8oJndjdHgtPmJ1ZiwgInN0YXNoXHQlc1xuIiwgbi0+bmFtZSk7CisJCWZ3cml0ZSh3Y3R4LT5i dWYuZGF0YSwgMSwgd2N0eC0+YnVmLmxlbiwgd2N0eC0+ZmlsZSk7CisJCWlmIChmZXJyb3Iod2N0 eC0+ZmlsZSkpCisJCQlwZ3NhX3dyaXRlX2Vycm9yKHdjdHgpOworCX0KKwlkc2hhc2hfc2VxX3Rl cm0oJml0ZXIpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvdC8wMDFf cGVyc2lzdC5wbCBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3QvMDAxX3BlcnNpc3QucGwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQxNDY2MTY2NjAyCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvdC8wMDFfcGVyc2lzdC5wbApAQCAt MCwwICsxLDg0IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwg PT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7CisKKyRub2RlLT5pbml0OworJG5vZGUtPmFw cGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLAorCXFxe3NoYXJlZF9wcmVsb2FkX2xpYnJh cmllcyA9ICdwZ19wbGFuX2FkdmljZSwgcGdfc3Rhc2hfYWR2aWNlJworcGdfc3Rhc2hfYWR2aWNl LnBlcnNpc3QgPSB0cnVlCitwZ19zdGFzaF9hZHZpY2UucGVyc2lzdF9pbnRlcnZhbCA9IDB9KTsK KyRub2RlLT5zdGFydDsKKworJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLAorCQkiQ1JFQVRF IEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2U7XG4iKTsKKworIyBDcmVhdGUgdHdvIHN0YXNoZXM6 IG9uZSB3aXRoIDIgZW50cmllcywgb25lIHdpdGggMSBlbnRyeS4KKyRub2RlLT5zYWZlX3BzcWwo InBvc3RncmVzIiwgcXF7CisJU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3N0YXNoX2En KTsKKwlTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdzdGFzaF9hJywgMTAwMSwgJ0luZGV4 U2Nhbih0KScpOworCVNFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3N0YXNoX2EnLCAxMDAy LCBFJ2xpbmUxXFxubGluZTJcXHR0YWJcXFxcYmFja3NsYXNoJyk7CisJU0VMRUNUIHBnX2NyZWF0 ZV9hZHZpY2Vfc3Rhc2goJ3N0YXNoX2InKTsKKwlTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNl KCdzdGFzaF9iJywgMjAwMSwgJ1NlcVNjYW4odCknKTsKK30pOworCisjIFZlcmlmeSBiZWZvcmUg cmVzdGFydC4KK215ICRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCJwb3N0Z3JlcyIsCisJIlNF TEVDVCBzdGFzaF9uYW1lLCBudW1fZW50cmllcyBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygp IE9SREVSIEJZIHN0YXNoX25hbWUiKTsKK2lzKCRyZXN1bHQsICJzdGFzaF9hfDJcbnN0YXNoX2J8 MSIsICdzdGFzaGVzIHByZXNlbnQgYmVmb3JlIHJlc3RhcnQnKTsKKworIyBSZXN0YXJ0IGFuZCB2 ZXJpZnkgdGhlIGRhdGEgc3Vydml2ZWQuCiskbm9kZS0+cmVzdGFydDsKKyRub2RlLT53YWl0X2Zv cl9sb2coImxvYWRlZCAyIGFkdmljZSBzdGFzaGVzIGFuZCAzIGVudHJpZXMiKTsKKworJHJlc3Vs dCA9ICRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwKKwkiU0VMRUNUIHN0YXNoX25hbWUsIG51 bV9lbnRyaWVzIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFt ZSIpOworaXMoJHJlc3VsdCwgInN0YXNoX2F8Mlxuc3Rhc2hfYnwxIiwgJ3N0YXNoZXMgc3Vydml2 ZWQgcmVzdGFydCcpOworCisjIFZlcmlmeSBlbnRyeSBjb250ZW50cywgaW5jbHVkaW5nIHRoZSBv bmUgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMuCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgi cG9zdGdyZXMiLAorCSJTRUxFQ1Qgc3Rhc2hfbmFtZSwgcXVlcnlfaWQsIGFkdmljZV9zdHJpbmcg RlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKE5VTEwpIE9SREVSIEJZIHN0YXNoX25h bWUsIHF1ZXJ5X2lkIik7CitpcygkcmVzdWx0LAorCSJzdGFzaF9hfDEwMDF8SW5kZXhTY2FuKHQp XG5zdGFzaF9hfDEwMDJ8bGluZTFcbmxpbmUyXHR0YWJcXGJhY2tzbGFzaFxuc3Rhc2hfYnwyMDAx fFNlcVNjYW4odCkiLAorCSdlbnRyeSBjb250ZW50cyBzdXJ2aXZlZCByZXN0YXJ0IHdpdGggc3Bl Y2lhbCBjaGFyYWN0ZXJzIGludGFjdCcpOworCisjIEFkZCBhIHRoaXJkIHN0YXNoIHdpdGggMCBl bnRyaWVzLgorJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLCBxcXsKKwlTRUxFQ1QgcGdfY3Jl YXRlX2FkdmljZV9zdGFzaCgnc3Rhc2hfYycpOworfSk7CisKKyMgUmVzdGFydCBhZ2FpbiBhbmQg dmVyaWZ5IGFsbCB0aHJlZSBzdGFzaGVzIGFyZSBwcmVzZW50LgorJG5vZGUtPnJlc3RhcnQ7Cisk bm9kZS0+d2FpdF9mb3JfbG9nKCJsb2FkZWQgMyBhZHZpY2Ugc3Rhc2hlcyBhbmQgMyBlbnRyaWVz Iik7CisKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCJwb3N0Z3JlcyIsCisJIlNFTEVDVCBz dGFzaF9uYW1lLCBudW1fZW50cmllcyBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVS IEJZIHN0YXNoX25hbWUiKTsKK2lzKCRyZXN1bHQsICJzdGFzaF9hfDJcbnN0YXNoX2J8MVxuc3Rh c2hfY3wwIiwgJ2FsbCB0aHJlZSBzdGFzaGVzIHN1cnZpdmVkIHNlY29uZCByZXN0YXJ0Jyk7CisK KyMgRHJvcCBhbGwgc3Rhc2hlcyBhbmQgdmVyaWZ5IHRoZSBkdW1wIGZpbGUgaXMgcmVtb3ZlZCBh ZnRlciByZXN0YXJ0LgorJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLCBxcXsKKwlTRUxFQ1Qg cGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3N0YXNoX2EnKTsKKwlTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vf c3Rhc2goJ3N0YXNoX2InKTsKKwlTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3N0YXNoX2Mn KTsKK30pOworCiskbm9kZS0+cmVzdGFydDsKKworJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwo InBvc3RncmVzIiwKKwkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVz KCkiKTsKK2lzKCRyZXN1bHQsICIwIiwgJ25vIHN0YXNoZXMgYWZ0ZXIgZHJvcHBpbmcgYWxsIGFu ZCByZXN0YXJ0aW5nJyk7CisKK29rKCEtZiAkbm9kZS0+ZGF0YV9kaXIgLiAnL3BnX3N0YXNoX2Fk dmljZS50c3YnLAorCSdkdW1wIGZpbGUgcmVtb3ZlZCBhZnRlciBhbGwgc3Rhc2hlcyBkcm9wcGVk Jyk7CisKKyRub2RlLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5z Z21sCmluZGV4IGVjNjA1NTJhNDQ3Li44MTA3ODdmZTgxNCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5z Z21sCkBAIC0xNSwxMCArMTUsMTIgQEAKICAgPGxpbmsgbGlua2VuZD0iZ3VjLWNvbXB1dGUtcXVl cnktaWQiPnF1ZXJ5IGlkZW50aWZpZXJzPC9saW5rPiB0byBwbGFuIGFkdmljZQogICBzdHJpbmdz LiBXaGVuZXZlciBhIHNlc3Npb24gaXMgYXNrZWQgdG8gcGxhbiBhIHF1ZXJ5IHdob3NlIHF1ZXJ5 IElEIGFwcGVhcnMKICAgaW4gdGhlIHJlbGV2YW50IGFkdmljZSBzdGFzaCwgdGhlIHBsYW4gYWR2 aWNlIHN0cmluZyBpcyBhdXRvbWF0aWNhbGx5IGFwcGxpZWQKLSAgdG8gZ3VpZGUgcGxhbm5pbmcu IE5vdGUgdGhhdCBhZHZpY2Ugc3Rhc2hlcyBleGlzdCBwdXJlbHkgaW4gbWVtb3J5LiBUaGlzCi0g IG1lYW5zIGJvdGggdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gYmUgbWluZGZ1bCBvZiBtZW1vcnkg Y29uc3VtcHRpb24gd2hlbgotICBkZWNpZGluZyBob3cgbXVjaCBwbGFuIGFkdmljZSB0byBzdGFz aCwgYW5kIGFsc28gdGhhdCBhZHZpY2Ugc3Rhc2hlcyBtdXN0Ci0gIGJlIHJlY3JlYXRlZCBhbmQg cmVwb3B1bGF0ZWQgd2hlbmV2ZXIgdGhlIHNlcnZlciBpcyByZXN0YXJ0ZWQuCisgIHRvIGd1aWRl IHBsYW5uaW5nLiBOb3RlIHRoYXQgYWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBkeW5hbWlj YWxseQorICBhbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeS4gVGhpcyBtZWFucyBib3RoIHRoYXQgaXQg aXMgaW1wb3J0YW50IHRvIGJlIG1pbmRmdWwKKyAgb2YgbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4g ZGVjaWRpbmcgaG93IG11Y2ggcGxhbiBhZHZpY2UgdG8gc3Rhc2guCisgIE9wdGlvbmFsbHksIGFk dmljZSBzdGFzaGVzIGFuZCB0aGVpciBjb250ZW50cyBjYW4gYXV0b21hdGljYWxseSBiZSBwZXJz aXN0ZWQKKyAgdG8gZGlzayBhbmQgcmVsb2FkZWQgZnJvbSBkaXNrOyBzZWUKKyAgPGxpdGVyYWw+ cGdfc3Rhc2hfYWR2aWNlLnBlcnNpc3Q8L2xpdGVyYWw+LCBiZWxvdy4KICA8L3BhcmE+CiAKICA8 cGFyYT4KQEAgLTE3NSw2ICsxNzcsMjggQEAKICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0 ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5w Z19zdGFydF9zdGFzaF9hZHZpY2Vfd29ya2VyKCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAg ICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX3N0YXJ0X3N0YXNoX2FkdmljZV93b3Jr ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTdGFydHMgdGhlIGJhY2tncm91bmQgd29ya2VyLCBz byB0aGF0IGFkdmljZSBzdGFzaCBjb250ZW50cyBjYW4gYmUKKyAgICAgIGF1dG9tYXRpY2FsbHkg cGVyc2lzdGVkIHRvIGRpc2suICBJZiB0aGlzIG1vZHVsZSBpcyBpbmNsdWRlZCBpbgorICAgICAg PHhyZWYgbGlua2VuZD0iZ3VjLXNoYXJlZC1wcmVsb2FkLWxpYnJhcmllcyIvPiBhdCBzdGFydHVw IHRpbWUgd2l0aAorICAgICAgPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNlLnBlcnNpc3QgPSB0cnVl PC9saXRlcmFsPiwgdGhlIHdvcmtlciB3aWxsIGJlCisgICAgICBzdGFydGVkIGF1dG9tYXRpY2Fs bHkuIFdoZW4gc3RhcnRlZCBtYW51YWxseSwgdGhlIHdvcmtlciB3aWxsIG5vdCBsb2FkCisgICAg ICBhbnl0aGluZyBmcm9tIGRpc2ssIGJ1dCBpdCB3aWxsIHN0aWxsIHBlcnNpc3QgZGF0YSB0byBk aXNrLiBZb3UgY2FuIHRoZW4KKyAgICAgIGNvbmZpZ3VyZSB0aGUgc2VydmVyIHRvIHN0YXJ0IHRo ZSB3b3JrZXIgYXV0b21hdGljYWxseSBhZnRlciB0aGUgbmV4dAorICAgICAgcmVzdGFydCwgcHJl c2VydmluZyBhbnkgc3Rhc2hlZCBhZHZpY2UgeW91IGFkZCBub3cuCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgPC92YXJpYWJsZWxpc3Q+CiAK ICA8L3NlY3QyPgpAQCAtMTg0LDYgKzIwOCw0NCBAQAogCiAgIDx2YXJpYWJsZWxpc3Q+CiAKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3N0YXNoX2Fkdmlj ZS5wZXJzaXN0PC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRl cm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19zdGFzaF9hZHZpY2UucGVyc2lzdDwvdmFy bmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJt PgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBDb250 cm9scyB3aGV0aGVyIHRoZSBhZHZpY2Ugc3Rhc2hlcyBhbmQgc3Rhc2ggZW50cmllcyBzaG91bGQg YmUKKyAgICAgIHBlcnNpc3RlZCB0byBkaXNrLiBUaGlzIGlzIG9uIGJ5IGRlZmF1bHQuIElmIGFu eSBzdGFzaGVzIGFyZSBwZXJzaXN0ZWQsCisgICAgICBhIGZpbGUgbmFtZWQgPGxpdGVyYWw+cGdf c3Rhc2hfYWR2aWNlLnRzdjwvbGl0ZXJhbD4gd2lsbCBiZSBjcmVhdGVkIGluCisgICAgICB0aGUg ZGF0YSBkaXJlY3RvcnkuIFN0YXNoZXMgYXJlIGxvYWRlZCBhbmQgc2F2ZWQgdXNpbmcgYSBiYWNr Z3JvdW5kCisgICAgICB3b3JrZXIgcHJvY2Vzcy4gIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJl IHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2 YXJuYW1lPnBnX3N0YXNoX2FkdmljZS5wZXJzaXN0X2ludGVydmFsPC92YXJuYW1lPiAoPHR5cGU+ aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFt ZT5wZ19zdGFzaF9hZHZpY2UucGVyc2lzdF9pbnRlcnZhbDwvdmFybmFtZT4gY29uZmlndXJhdGlv biBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKwor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTcGVjaWZpZXMgdGhlIGludGVydmFs LCBpbiBzZWNvbmRzLCBiZXR3ZWVuIGNoZWNrcyBmb3IgY2hhbmdlcyB0aGF0CisgICAgICBuZWVk IHRvIGJlIHdyaXR0ZW4gdG8gPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNlLnRzdjwvbGl0ZXJhbD4u IElmIHNldCB0bworICAgICAgemVybywgY2hhbmdlcyBhcmUgb25seSB3cml0dGVuIHdoZW4gdGhl IHNlcnZlciBzaHV0cyBkb3duLiBUaGUgZGVmYXVsdAorICAgICAgdmFsdWUgaXMgPGxpdGVyYWw+ MzA8L2xpdGVyYWw+LiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAg ICA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2Vy dmVyIGNvbW1hbmQgbGluZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zh cmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT4KICAgICAgPHZhcm5h bWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5 cGU+KQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA3ZjZmNzk4NzVlZC4uYzk2YjkxOWQ1 NGQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MDYwLDEwICs0MDYwLDE0IEBAIHBn cGFfdHJvdmVfc2xpY2UKIHBncGFfdW5yb2xsZWRfam9pbgogcGdzYV9lbnRyeQogcGdzYV9lbnRy eV9rZXkKK3Bnc2Ffc2F2ZWRfZW50cnkKK3Bnc2Ffc2F2ZWRfc3Rhc2gKK3Bnc2Ffc2F2ZWRfc3Rh c2hfdGFibGVfaGFzaAogcGdzYV9zaGFyZWRfc3RhdGUKIHBnc2Ffc3Rhc2gKIHBnc2Ffc3Rhc2hf Y291bnQKIHBnc2Ffc3Rhc2hfbmFtZQorcGdzYV93cml0ZXJfY29udGV4dAogcGdzb2NrZXQKIHBn c3FsX3RoaW5nX3QKIHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --00000000000040856d064e84e5b4--