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 1w8Khe-000QpY-1B for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 16:15:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8Khd-006o2T-0I for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 16:15:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8Khc-006o2K-0n for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 16:15:29 +0000 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8KhZ-00000000DBa-2TXn for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 16:15:27 +0000 Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-b9c1da7ac63so182924066b.0 for ; Thu, 02 Apr 2026 09:15:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775146524; cv=none; d=google.com; s=arc-20240605; b=IFKx4ELBk11pilEKvyy+r2PK6crnVBslMsJXzv2IlNLwcgOkJuZF+tVeeeVdJMZ3dA Qfkdl9oefKWmh2Jh2rrTKSk0kkUpvRLH1QDQML6tuea+sPDIcsFMzcXSJjVnzED019kk MByIFDYYwfFJN9sMBSCTGLFerX6/ILz9oK+XBiOQ3Y4+J0WiDLffmrPHT0zjOzh1izrb +6s8lM5aU0279Mut0/RBktugPfdGaHZTxTMG5oy8UNMGiUtEUqRIYFCC7q/PXTQRCq3e ex0t8f03O2DfkmuWEJ8obHEn9wv+gKyIcnQywQ5DYJLGoPNj2WtEayZGo8kDCPzS+2sR bcQw== 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=ZGAW9iewk6vComK656RAfutVtybbkRQ/EgHH0bf9R50=; fh=AMi5TfmMPfR+s0FDUOFfw3U1thhqO8dbMNK23PjOItc=; b=RGToOihTcz+e2iZaqYrK+Bzkq7q875d9RC6q7eSPWcpgEla/ad1M8BWfeUMZp+T+++ W5ck7lefrL2HEqiD/NycyTcnqTEK7Rx3+GZOp2hcmiGAbvBSoy4hEa9v9Hvb3VpvDzB4 nRW9UV+ElDKZDMbKpjIySkUc8yzaKmN8dbhw+40jcQZzhpVpo+Wjy2kmWKYoz8Xb9WYd sSS7Hni79ToozSLTB4pNu7xPCl+oiDt0lVu11OX5eP1i6C0tZesEFt5PRquAOpDfHTfh gq55T6KEdTlLaK7V5NKdbiAu1D+oDfEMWaOpvabgggroXxrLPDgxtu93WU+WzfT0SsSJ LYug==; 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=1775146524; x=1775751324; 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=ZGAW9iewk6vComK656RAfutVtybbkRQ/EgHH0bf9R50=; b=K4OenduEZbkQTidTu9LNa05/1H4JBI6hHVDqx7TGZIfn/WgldfiKseQK9O6GKBomIl MM/xLW585zMOa33NcH3hSbSNTIuleLRmwdebLv3LBXzVGer2fchSulUucYArY7kfQTdb M+vYCew1KhoEHLKHM+cSJh9WtnP+NKXkwoqfTj0HQOHZglNt/NVzFIUp6Q2BTHoydhs4 w0qmIqXZBYFCyFOUeGnV0WG6XhYaGhoLuA7nIeMvjzGuzahv7/9hPCSY85io1IjoM1pl K81RbdVV57GMMU5nK8Nvv6NN2brXfSf7BCKorsT0AcMLxxuNTUhBmFaxK9pWWeL0gQIe z0BQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775146524; x=1775751324; 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=ZGAW9iewk6vComK656RAfutVtybbkRQ/EgHH0bf9R50=; b=LEYwscpmBCfIboqMbCY+jq9QMSwNeeird+YBZX12bb60kA9/DXxeoNiLLyXAYD9rNf cit30WgLg6Z0N8bPZW9amEA9I6iw++LfIMx4jtPIve3C2IQfDgzm1xJ8SINI9W10YYNz 1vNK6zNIg6a6MOqGq8qXFrDna2CXMCJuYTQwdeQvfN3+NEheLjn/vZf2np7fLN6Kifrr DnpOhL0wFZqZ8SK+fgoLPnOIq20KrQHCyJSt2oouimHpnKAKDf9vxDfH59Uqe8GA4FOE Wx0ML6oCUFfUdduBGA1sRK7AzEZpa16TsljXwU9i75OuhXLV9cOsQbHk0Ypy7cKDS3Q3 h+xA== X-Forwarded-Encrypted: i=1; AJvYcCWKIb+Nd1IkTWoXL1SXB52PYTdpetrVm+p6qAxHAfKEBJWeYKLn5Zx2gSXLJ4ObL9sUnHgHUr0rYVTlQ9pJ@lists.postgresql.org X-Gm-Message-State: AOJu0YwR3b/zTWrzrkXINRxD5XpUjF5qIgzAbWoepCvULQHXm/H5/cGE m3DbL0g3128qHgPWXszaxlzq40RRdtGnbX3Wf37ALVj0CYRAcFjprvWCcewPs9hkH0SEHD5NQKK B0BcV0yJ1MbNuTLOhMCUJ5/OcxZkdf6A= X-Gm-Gg: ATEYQzz/g+mlyx72ppdkj92gJHOuy05OjGqpzZ1L8P3/djF44vnSyUgtO1+aRi7eJNz m9/bdX97N45B130mnS2DBzVaaLB2AilO5kuWYqpW3xey8wfeKhypwIlD4D0cx+7MJL+jwIgrsHZ KcI+3aiSFJF/GU3MUMGSKBfUeEPlNHY7/JCBmWTtx0NBoKCq/f1UScVEuXgBoKE10v3eVNpaHMb CBW8vaIV4PhMFXFTwetw5nr3sVxd7agJkWPjV79Yftuz18bg+T4iOg5C3NL9FVOiPNyQEm3iUQ3 REJETD+jhe0+Q4bG0zEQ6GrDMh7+3RpDaWa1gyA= X-Received: by 2002:a17:907:831d:b0:b97:cc05:61b9 with SMTP id a640c23a62f3a-b9c3ef15587mr160204966b.15.1775146523341; Thu, 02 Apr 2026 09:15:23 -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 12:15:09 -0400 X-Gm-Features: AQROBzDb1gMjiqT2Tlt4vBruRX2V9swBIF-QhyNdAYlmRVCmZGwFbgkmNSsi6UA Message-ID: Subject: Re: pg_plan_advice To: Lukas Fittl Cc: Jakub Wartak , Tom Lane , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000f2fd36064e7c81fe" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f2fd36064e7c81fe Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2026 at 10:25=E2=80=AFPM Lukas Fittl wrot= e: > To be clear, I think its okay to go ahead with merging pg_stash_advice > without that and make it a best effort to get the file saving in too - > but I think with the current design in this patch represents a > reasonable solution to what we can do in terms of persistence across > restarts in either 19 or 20. Somewhat against my better judgement, I have attempted to put your patch into committable shape. In the process, I rewrote pretty much the whole thing. So here's v24, also dropping pg_collect_advice. 0001 is the pg_stash_advice patch from v23, but with a number of changes motivated by your desire to add persistence. I split the code into two files, because I felt that file was starting to get a little bit large, and I didn't want to just add a whole bunch more stuff to it. For the most part, this is just code movement, but I did make a couple of substantive changes. First, I restricted stash names to alphanumeric characters and underscores, basically looking like identifier names. This is partly because I got thinking about the escaping requirements for the persistence file, but it's also because I realized that letting somebody name their stashes with spaces or non-printable characters in the name or a bunch of random punctuation was probably more confusing than useful. Second, pgsa_set_advice_string() was previously taking a lock itself, but most of its sister functions require the caller to do that; I changed it to match. Third, lock is also now held when calling pgsa_clear_advice_string(), which may not be entirely necessary, but it seems safer and shouldn't cost anything meaningful. 0002 adds persistence. Here's a list of changes from your version: - I changed the GUC name pg_stash_advice.save to pg_stash_advice.persist, since it controls both whether advice is saved automatically and also whether it's loaded automatically at startup time. - I added a GUC pg_stash_advice.persist_interval, so that the interval between writes can be configured. - Instead of a dump_requested flag, I added a pg_atomic_uint64 change_count. This avoids needing to take &pgsa_state->lock in LW_EXCLUSIVE mode. Even leaving that aside, I don't think a Boolean is adequate here. Your patch cleared the flag before dumping, but that means if the act of dumping fails, you forget that it needed to be done. If you instead clear the flag after dumping, then you don't realize you need to do it again if any concurrent changes happen. - I set the restart time to BGW_DEFAULT_RESTART_INTERVAL rather than 0. Restarting the worker in a tight loop is a bad plan. - I added a function pg_start_stash_advice_worker(). You could do something like add pg_stash_advice to session_preload_libraries, start using it, and use this to kick off the worker. Then eventually you can restart the server with pg_stash_advice moved to shared_preload_libraries. - As you had coded it, any interrupt that jostled the worker would trigger an immediate write-out if one was pending. That behavior seems hard to explain and document, so I made it work more like autoprewarm, which always respects the configured interval even in case of interrupts. - I added a mechanism to prevent the user from manually manipulating stashes or stash entries when persistence is enabled but before the dump file has been reloaded. Without this, reloading the dump file could error out if, for example, the user already managed to recreate a stash with the same name as one that exists in the dump file. - As you had coded it, data is inserted into the dynamic shared memory structures as it's read from the disk file. I felt that could produce rather odd behavior, especially in view of the lack of the lockout mechanism mentioned in the previous point. We might partially process the dump file and then die with some data loaded and other data not loaded. Other backends could see the partial results. While the lockout mechanism by itself is sufficient to prevent that, I felt uncomfortable about relying on that completely. It means we start consuming shared memory even before we know whether there's an error, and continue to consume it after we've died from an error, and it also means we have a very hard dependency on the lockout mechanism, which really only works if there's only ever one load and save file and loading only happens at startup time. I felt it was better to slurp all the data into memory first, parse it completely, and then start making changes to shared memory only if we don't find any problems, so I made it work that way. We replace the tabs and newlines that end fields and lines with \0 on the fly so that we can just point into that buffer, instead of having to pstrdup() anything. (Note that, even if we stuck with your approach of something based on pg_get_line(), it would probably be better to use one of the other variants, e.g. pg_get_line_buf(), to avoid allocating new buffers constantly.) - I completely reworked the string escaping. Your pgsa_escape_string() had a bug where the strpbrk call didn't check for \r. Also, I didn't like the behavior of just ignoring a backslash when it was followed by end of string or something unexpected; I felt those should be errors. Given the decision to slurp the whole file, as mentioned in the previous point, it also made sense to do the unescaping in place, so that we didn't need to allocate additional memory. I particularly didn't like the decision to sometimes allocate memory and sometimes not. While it was economical in a sense, it meant that the memory consumption could be very different depending on how many entries needed escaping. - I completely reworked the error reporting. Now, if we hit an error parsing the file (or doing anything else), we just signal an ERROR, and we rely on the fact that the postmaster will restart us. It's an explicit goal not to apply incremental changes when the file overall is not valid, which also means that we are only concerned about reporting the first error that we detect, which also seems good for avoiding log spam. On the other hand, the error reports are more specific and detailed, and now all follow the same general pattern: "syntax error in file \"%s\" line %u: problem description here". (I was also not entirely happy with the fact that you could potentially call fprintf() lots of times before finally reporting an error. While you did save and restore errno around the calls to FreeFile() and unlink(), I think it makes the code hard to reason about; e.g. what if a later fprintf call hit a different error than an earlier one?) - I felt it was a bit odd to install a zero length file, so I made the persistence mechanism remove the existing file if there's nothing to persist when it goes to write out. I am not totally sure this was the right call. - I added a message when saving entries symmetrical to the one you had for loading entries, and also some DEBUG1/2 messages in case someone needs more details. - I added a TAP test. This isn't as comprehensive as it could be -- in particular, it doesn't cover all the possible error cases that occur when trying to reload data from disk. I could add that, but it would mean stopping and restarting the server a bunch of times, and I wasn't sure that it was a good idea to add that much overhead for a few lines of code coverage. - Your documentation changes still said that the stash data would be "restored when the first session attaches after a server restart" but that doesn't sound like something that a user will understand, and also wasn't what actually happened since you added the background worker. I rewrote this. There's almost none of your code remaining at this point, but I listed you as a co-author for 0002. I think a case could be made for Author or for no listing. Let me know if you have an opinion. And, please review! --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000f2fd36064e7c81fe Content-Type: application/octet-stream; name="v24-0002-pg_stash_advice-Allow-stashed-advice-to-be-persi.patch" Content-Disposition: attachment; filename="v24-0002-pg_stash_advice-Allow-stashed-advice-to-be-persi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnhocboe1 RnJvbSA5YjM2OTBmOWRjODZmOWQzMGRiYjI3ZjUzMDg4Y2ZlNWRkOGZjODFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMiBBcHIgMjAyNiAxMDoxMzowNyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI0IDIv Ml0gcGdfc3Rhc2hfYWR2aWNlOiBBbGxvdyBzdGFzaGVkIGFkdmljZSB0byBiZSBwZXJzaXN0ZWQK IHRvIGRpc2suCgpJZiBwZ19zdGFzaF9hZHZpY2UucGVyc2lzdCA9IHRydWUsIHN0YXNoZWQgYWR2 aWNlIHdpbGwgYmUgd3JpdHRlbiB0bwpwZ19zdGFzaF9hZHZpY2UudHN2IGluIHRoZSBkYXRhIGRp cmVjdG9yeSwgcGVyaW9kaWNhbGx5IGFuZCBhdApzaHV0ZG93bi4gT24gcmVzdGFydCwgc3Rhc2gg bW9kaWZpY2F0aW9ucyBhcmUgbG9ja2VkIG91dCB1bnRpbCB0aGlzCmZpbGUgaGFzIGJlZW4gcmVs b2FkZWQsIGJ1dCBxdWVyaWVzIHdpbGwgbm90IGJlLCBzbyB0aGVyZSBtYXkgYmUgYQpzaG9ydCB3 aW5kb3cgYWZ0ZXIgc3RhcnR1cCBkdXJpbmcgd2hpY2ggcHJldmlvdXNseS1zdGFzaGVkIGFkdmlj ZSBpcwpub3QgYXV0b21hdGljYWxseSBhcHBsaWVkLgoKQXV0aG9yOiBSb2JlcnQgSGFhcyA8cmhh YXNAcG9zdGdyZXNxbC5vcmc+CkNvLWF1dGhvcmVkLWJ5OiA8bHVrYXNAZml0dGwuY29tPgotLS0K IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgNCArLQog Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICA4ICstCiAu Li4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAgfCAgIDYgKwogY29u dHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMgICAgIHwgMTY4ICsrKy0KIGNv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5oICAgICB8ICAxMiArCiBjb250 cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaGZ1bmNzLmMgICAgICAgICAgfCAgNDAgKwogY29udHJp Yi9wZ19zdGFzaF9hZHZpY2Uvc3Rhc2hwZXJzaXN0LmMgICAgICAgIHwgNzk5ICsrKysrKysrKysr KysrKysrKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvdC8wMDFfcGVyc2lzdC5wbCAgICAgIHwg IDg0ICsrCiBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sICAgICAgICAgICAgICAgfCAg NzAgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAg NCArCiAxMCBmaWxlcyBjaGFuZ2VkLCAxMTg3IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3Rhc2hwZXJzaXN0 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS90LzAwMV9wZXJz aXN0LnBsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUgYi9j b250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQppbmRleCBmNTE1MGUxNGU0MS4uZWM0NmY1 ZGIwYjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlCisrKyBi L2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlCkBAIC00LDEzICs0LDE1IEBAIE1PRFVM RV9iaWcgPSBwZ19zdGFzaF9hZHZpY2UKIE9CSlMgPSBcCiAJJChXSU4zMlJFUykgXAogCXBnX3N0 YXNoX2FkdmljZS5vIFwKLQlzdGFzaGZ1bmNzLm8KKwlzdGFzaGZ1bmNzLm8gXAorCXN0YXNocGVy c2lzdC5vCiAKIEVYVEVOU0lPTiA9IHBnX3N0YXNoX2FkdmljZQogREFUQSA9IHBnX3N0YXNoX2Fk dmljZS0tMS4wLnNxbAogUEdGSUxFREVTQyA9ICJwZ19zdGFzaF9hZHZpY2UgLSBzdG9yZSBhbmQg YXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZSIKIAogUkVHUkVTUyA9IHBnX3N0YXNoX2Fk dmljZQorVEFQX1RFU1RTID0gMQogRVhUUkFfSU5TVEFMTCA9IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UKIAogaWZkZWYgVVNFX1BHWFMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNl L21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQKaW5kZXgg NjY1NWY5YWI0ZjIuLjgxM2I4ZmUzYzQwIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXNoX2Fk dmljZS9tZXNvbi5idWlsZAorKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWls ZApAQCAtMiw3ICsyLDggQEAKIAogcGdfc3Rhc2hfYWR2aWNlX3NvdXJjZXMgPSBmaWxlcygKICAg J3BnX3N0YXNoX2FkdmljZS5jJywKLSAgJ3N0YXNoZnVuY3MuYycKKyAgJ3N0YXNoZnVuY3MuYycs CisgICdzdGFzaHBlcnNpc3QuYycKICkKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCkBA IC0zMyw0ICszNCw5IEBAIHRlc3RzICs9IHsKICAgICAgICdwZ19zdGFzaF9hZHZpY2UnLAogICAg IF0sCiAgIH0sCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX3BlcnNp c3QucGwnLAorICAgIF0sCisgIH0sCiB9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2Fk dmljZS9wZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9w Z19zdGFzaF9hZHZpY2UtLTEuMC5zcWwKaW5kZXggODhkZWRkOGVmMWIuLjUwZjEyZGFjMzEzIDEw MDY0NAotLS0gYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UtLTEuMC5z cWwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0xLjAuc3Fs CkBAIC0zNiw4ICszNiwxNCBAQCBSRVRVUk5TIFNFVE9GIHJlY29yZAogQVMgJ01PRFVMRV9QQVRI TkFNRScsICdwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzJwogTEFOR1VBR0UgQzsKIAorQ1JF QVRFIEZVTkNUSU9OIHBnX3N0YXJ0X3N0YXNoX2FkdmljZV93b3JrZXIoKQorUkVUVVJOUyB2b2lk CitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX3N0YXJ0X3N0YXNoX2FkdmljZV93b3JrZXInCitM QU5HVUFHRSBDIFNUUklDVDsKKwogUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19jcmVhdGVfYWR2 aWNlX3N0YXNoKHRleHQpIEZST00gUFVCTElDOwogUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19k cm9wX2FkdmljZV9zdGFzaCh0ZXh0KSBGUk9NIFBVQkxJQzsKIFJFVk9LRSBBTEwgT04gRlVOQ1RJ T04gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyh0ZXh0KSBGUk9NIFBVQkxJQzsKIFJFVk9L RSBBTEwgT04gRlVOQ1RJT04gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgRlJPTSBQVUJMSUM7CiBS RVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX3NldF9zdGFzaGVkX2FkdmljZSh0ZXh0LCBiaWdpbnQs IHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19zdGFydF9zdGFz aF9hZHZpY2Vfd29ya2VyKCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0 YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3Bn X3N0YXNoX2FkdmljZS5jCmluZGV4IDE1ZTdhZGY4NDliLi42MDVmOGM0ZjIzZCAxMDA2NDQKLS0t IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMKKysrIGIvY29udHJp Yi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMKQEAgLTEzLDkgKzEzLDExIEBACiAK ICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgor I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCiAj aW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKICNpbmNsdWRlICJwZ19zdGFzaF9hZHZpY2UuaCIK KyNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9kc21f cmVnaXN0cnkuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11 dGlscy5oIgpAQCAtNDEsMTIgKzQzLDE0IEBAIHN0YXRpYyBkc2hhc2hfcGFyYW1ldGVycyBwZ3Nh X2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzID0gewogCUxXVFJBTkNIRV9JTlZBTElECQkJLyogZ2V0 cyBzZXQgYXQgcnVudGltZSAqLwogfTsKIAotLyogR1VDIHZhcmlhYmxlICovCisvKiBHVUMgdmFy aWFibGVzICovCiBzdGF0aWMgY2hhciAqcGdfc3Rhc2hfYWR2aWNlX3N0YXNoX25hbWUgPSAiIjsK K2Jvb2wJCXBnX3N0YXNoX2FkdmljZV9wZXJzaXN0ID0gdHJ1ZTsKK2ludAkJCXBnX3N0YXNoX2Fk dmljZV9wZXJzaXN0X2ludGVydmFsID0gMzA7CiAKIC8qIFNoYXJlZCBtZW1vcnkgcG9pbnRlcnMg Ki8KIHBnc2Ffc2hhcmVkX3N0YXRlICpwZ3NhX3N0YXRlOwotZHNhX2FyZWEgKnBnc2FfZHNhX2Fy ZWE7Citkc2FfYXJlYSAgICpwZ3NhX2RzYV9hcmVhOwogZHNoYXNoX3RhYmxlICpwZ3NhX3N0YXNo X2RzaGFzaDsKIGRzaGFzaF90YWJsZSAqcGdzYV9lbnRyeV9kc2hhc2g7CiAKQEAgLTg3LDYgKzkx LDMzIEBAIF9QR19pbml0KHZvaWQpCiAJRW5hYmxlUXVlcnlJZCgpOwogCiAJLyogRGVmaW5lIG91 ciBHVUNzLiAqLworCWlmIChwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9n cmVzcykKKwkJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19zdGFzaF9hZHZpY2UucGVyc2lz dCIsCisJCQkJCQkJCSAiU2F2ZSBhbmQgcmVzdG9yZSBhZHZpY2Ugc3Rhc2ggY29udGVudHMgYWNy b3NzIHJlc3RhcnRzLiIsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgJnBnX3N0YXNoX2Fkdmlj ZV9wZXJzaXN0LAorCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkJIFBHQ19QT1NUTUFTVEVSLAorCQkJ CQkJCQkgMCwKKwkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgTlVMTCk7 CisJZWxzZQorCQlwZ19zdGFzaF9hZHZpY2VfcGVyc2lzdCA9IGZhbHNlOworCisJRGVmaW5lQ3Vz dG9tSW50VmFyaWFibGUoInBnX3N0YXNoX2FkdmljZS5wZXJzaXN0X2ludGVydmFsIiwKKwkJCQkJ CQkiSW50ZXJ2YWwgYmV0d2VlbiBhZHZpY2Ugc3Rhc2ggc2F2ZXMsIGluIHNlY29uZHMuIiwKKwkJ CQkJCQlOVUxMLAorCQkJCQkJCSZwZ19zdGFzaF9hZHZpY2VfcGVyc2lzdF9pbnRlcnZhbCwKKwkJ CQkJCQkzMCwKKwkJCQkJCQkwLAorCQkJCQkJCTM2MDAsCisJCQkJCQkJUEdDX1NJR0hVUCwKKwkJ CQkJCQlHVUNfVU5JVF9TLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxM KTsKKwogCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hf bmFtZSIsCiAJCQkJCQkJICAgIk5hbWUgb2YgdGhlIGFkdmljZSBzdGFzaCB0byBiZSB1c2VkIGlu IHRoaXMgc2Vzc2lvbi4iLAogCQkJCQkJCSAgIE5VTEwsCkBAIC0xMDAsNiArMTMxLDEwIEBAIF9Q R19pbml0KHZvaWQpCiAKIAlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3N0YXNoX2FkdmljZSIp OwogCisJLyogU3RhcnQgdGhlIGJhY2tncm91bmQgd29ya2VyIGZvciBwZXJzaXN0ZW5jZSwgaWYg ZW5hYmxlZC4gKi8KKwlpZiAocGdfc3Rhc2hfYWR2aWNlX3BlcnNpc3QpCisJCXBnc2Ffc3RhcnRf d29ya2VyKCk7CisKIAkvKiBUZWxsIHBnX3BsYW5fYWR2aWNlIHRoYXQgd2Ugd2FudCB0byBwcm92 aWRlIGFkdmljZSBzdHJpbmdzLiAqLwogCWFkZF9hZHZpc29yX2ZuID0KIAkJbG9hZF9leHRlcm5h bF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9hZHZpY2VfYWRkX2Fkdmlzb3Ii LApAQCAtMTMxLDYgKzE2NiwxMCBAQCBwZ3NhX2Fkdmlzb3IoUGxhbm5lckdsb2JhbCAqZ2xvYiwg UXVlcnkgKnBhcnNlLAogCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkK IAkJcGdzYV9hdHRhY2goKTsKIAorCS8qIElmIHN0YXNoIGRhdGEgaXMgc3RpbGwgYmVpbmcgcmVz dG9yZWQgZnJvbSBkaXNrLCBpZ25vcmUuICovCisJaWYgKHBnX2F0b21pY191bmxvY2tlZF90ZXN0 X2ZsYWcoJnBnc2Ffc3RhdGUtPnN0YXNoZXNfcmVhZHkpKQorCQlyZXR1cm4gTlVMTDsKKwogCS8q CiAJICogVHJhbnNsYXRlIHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lIHRvIGFuIGludGVnZXIg SUQuCiAJICoKQEAgLTI3OSw2ICszMTgsMTkgQEAgcGdzYV9hdHRhY2godm9pZCkKIAlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiB9CiAKKy8qCisgKiBFcnJvciBvdXQgaWYgdGhl IHN0YXNoZXMgaGF2ZSBub3QgYmVlbiBsb2FkZWQgZnJvbSBkaXNrIHlldC4KKyAqLwordm9pZAor cGdzYV9jaGVja19sb2Nrb3V0KHZvaWQpCit7CisJaWYgKHBnX2F0b21pY191bmxvY2tlZF90ZXN0 X2ZsYWcoJnBnc2Ffc3RhdGUtPnN0YXNoZXNfcmVhZHkpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJ CSBlcnJtc2coInN0YXNoIG1vZGlmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGJlY2F1c2UgXCIl c1wiIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IiwKKwkJCQkJCVBHU0FfRFVNUF9GSUxFKSkpOwor fQorCiAvKgogICogQ2hlY2sgd2hldGhlciBhbiBhZHZpY2Ugc3Rhc2ggbmFtZSBpcyBsZWdhbCwg YW5kIHNpZ25hbCBhbiBlcnJvciBpZiBub3QuCiAgKgpAQCAtMzgzLDYgKzQzNSw5IEBAIHBnc2Ff Y3JlYXRlX3N0YXNoKGNoYXIgKnN0YXNoX25hbWUpCiAJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2gg XCIlc1wiIGFscmVhZHkgZXhpc3RzIiwgc3Rhc2hfbmFtZSkpOwogCXN0YXNoLT5wZ3NhX3N0YXNo X2lkID0gcGdzYV9zdGF0ZS0+bmV4dF9zdGFzaF9pZCsrOwogCWRzaGFzaF9yZWxlYXNlX2xvY2so cGdzYV9zdGFzaF9kc2hhc2gsIHN0YXNoKTsKKworCS8qIEJ1bXAgY2hhbmdlIGNvdW50LiAqLwor CXBnX2F0b21pY19hZGRfZmV0Y2hfdTY0KCZwZ3NhX3N0YXRlLT5jaGFuZ2VfY291bnQsIDEpOwog fQogCiAvKgpAQCAtNDIzLDYgKzQ3OCw5IEBAIHBnc2FfY2xlYXJfYWR2aWNlX3N0cmluZyhjaGFy ICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKQogCS8qIE5vdyB3ZSBmcmVlIHRoZSBhZHZpY2Ug c3RyaW5nIGFzIHdlbGwsIGlmIHRoZXJlIHdhcyBvbmUuICovCiAJaWYgKG9sZF9kcCAhPSBJbnZh bGlkRHNhUG9pbnRlcikKIAkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgb2xkX2RwKTsKKworCS8q IEJ1bXAgY2hhbmdlIGNvdW50LiAqLworCXBnX2F0b21pY19hZGRfZmV0Y2hfdTY0KCZwZ3NhX3N0 YXRlLT5jaGFuZ2VfY291bnQsIDEpOwogfQogCiAvKgpAQCAtNDY0LDYgKzUyMiw0MyBAQCBwZ3Nh X2Ryb3Bfc3Rhc2goY2hhciAqc3Rhc2hfbmFtZSkKIAkJfQogCX0KIAlkc2hhc2hfc2VxX3Rlcm0o Jml0ZXJhdG9yKTsKKworCS8qIEJ1bXAgY2hhbmdlIGNvdW50LiAqLworCXBnX2F0b21pY19hZGRf ZmV0Y2hfdTY0KCZwZ3NhX3N0YXRlLT5jaGFuZ2VfY291bnQsIDEpOworfQorCisvKgorICogUmVt b3ZlIGFsbCBzdGFzaGVzIGFuZCBlbnRyaWVzIGZyb20gc2hhcmVkIG1lbW9yeS4KKyAqCisgKiBU aGlzIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBiZWZvcmUgcmVsb2FkaW5nIGZyb20gYSBkdW1w IGZpbGUsIHNvIHRoYXQKKyAqIGEgZmFpbGVkIHByZXZpb3VzIGF0dGVtcHQgZG9lc24ndCBsZWF2 ZSBzdGFsZSBkYXRhIGJlaGluZC4KKyAqLwordm9pZAorcGdzYV9yZXNldF9hbGxfc3Rhc2hlcyh2 b2lkKQoreworCWRzaGFzaF9zZXFfc3RhdHVzIGl0ZXI7CisJcGdzYV9lbnRyeSAqZW50cnk7CisK KwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSkpOworCisJLyogUmVtb3ZlIGFsbCBzdGFzaGVzLiAqLworCWRzaGFzaF9zZXFfaW5pdCgm aXRlciwgcGdzYV9zdGFzaF9kc2hhc2gsIHRydWUpOworCXdoaWxlIChkc2hhc2hfc2VxX25leHQo Jml0ZXIpICE9IE5VTEwpCisJCWRzaGFzaF9kZWxldGVfY3VycmVudCgmaXRlcik7CisJZHNoYXNo X3NlcV90ZXJtKCZpdGVyKTsKKworCS8qIFJlbW92ZSBhbGwgZW50cmllcy4gKi8KKwlkc2hhc2hf c2VxX2luaXQoJml0ZXIsIHBnc2FfZW50cnlfZHNoYXNoLCB0cnVlKTsKKwl3aGlsZSAoKGVudHJ5 ID0gZHNoYXNoX3NlcV9uZXh0KCZpdGVyKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+YWR2 aWNlX3N0cmluZyAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJCWRzYV9mcmVlKHBnc2FfZHNhX2Fy ZWEsIGVudHJ5LT5hZHZpY2Vfc3RyaW5nKTsKKwkJZHNoYXNoX2RlbGV0ZV9jdXJyZW50KCZpdGVy KTsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyKTsKKworCS8qIFJlc2V0IHRoZSBzdGFzaCBJ RCBjb3VudGVyLiAqLworCXBnc2Ffc3RhdGUtPm5leHRfc3Rhc2hfaWQgPSBVSU5UNjRDT05TVCgx KTsKIH0KIAogLyoKQEAgLTQ4Myw2ICs1NzgsMjMgQEAgcGdzYV9pbml0X3NoYXJlZF9zdGF0ZSh2 b2lkICpwdHIsIHZvaWQgKmFyZykKIAlzdGF0ZS0+YXJlYSA9IERTQV9IQU5ETEVfSU5WQUxJRDsK IAlzdGF0ZS0+c3Rhc2hfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIAlzdGF0ZS0+ZW50 cnlfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+Ymd3b3JrZXJfcGlkID0g SW52YWxpZFBpZDsKKwlwZ19hdG9taWNfaW5pdF9mbGFnKCZzdGF0ZS0+c3Rhc2hlc19yZWFkeSk7 CisJcGdfYXRvbWljX2luaXRfdTY0KCZzdGF0ZS0+Y2hhbmdlX2NvdW50LCAwKTsKKworCS8qCisJ ICogSWYgdGhpcyBtb2R1bGUgd2FzIGxvYWRlZCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVz LCB0aGVuCisJICogcGdfc3Rhc2hfYWR2aWNlX3BlcnNpc3QgaXMgYSBHVUMgdmFyaWFibGUuIElm IGl0J3MgdHJ1ZSwgdGhhdCBtZWFucworCSAqIHRoYXQgd2Ugc2hvdWxkIGxvY2sgb3V0IG1hbnVh bCBzdGFzaCBtb2RpZmljYXRpb25zIHVudGlsIHRoZSBkdW1wIGZpbGUKKwkgKiBoYXMgYmVlbiBz dWNjZXNzZnVsbHkgbG9hZGVkLiBJZiBpdCdzIGZhbHNlLCB0aGVyZSdzIG5vdGhpbmcgdG8gbG9h ZCwKKwkgKiBzbyB3ZSBzZXQgc3Rhc2hlc19yZWFkeSBpbW1lZGlhdGVseS4KKwkgKgorCSAqIElm IHRoaXMgbW9kdWxlIHdhcyBub3QgbG9hZGVkIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMs IHRoZW4KKwkgKiBwZ19zdGFzaF9hZHZpY2VfcGVyc2lzdCBpcyBub3QgYSBHVUMgdmFyaWFibGUs IGJ1dCBpdCB3aWxsIGJlIGZhbHNlLAorCSAqIHdoaWNoIGxlYWRzIHRvIHRoZSBjb3JyZWN0IGJl aGF2aW9yLgorCSAqLworCWlmICghcGdfc3Rhc2hfYWR2aWNlX3BlcnNpc3QpCisJCXBnX2F0b21p Y190ZXN0X3NldF9mbGFnKCZzdGF0ZS0+c3Rhc2hlc19yZWFkeSk7CiB9CiAKIC8qCkBAIC02MDIs NCArNzE0LDU2IEBAIHBnc2Ffc2V0X2FkdmljZV9zdHJpbmcoY2hhciAqc3Rhc2hfbmFtZSwgaW50 NjQgcXVlcnlJZCwgY2hhciAqYWR2aWNlX3N0cmluZykKIAkgKi8KIAlpZiAoRHNhUG9pbnRlcklz VmFsaWQob2xkX2RwKSkKIAkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgb2xkX2RwKTsKKworCS8q IEJ1bXAgY2hhbmdlIGNvdW50LiAqLworCXBnX2F0b21pY19hZGRfZmV0Y2hfdTY0KCZwZ3NhX3N0 YXRlLT5jaGFuZ2VfY291bnQsIDEpOworfQorCisvKgorICogU3RhcnQgb3VyIHdvcmtlciBwcm9j ZXNzLgorICovCit2b2lkCitwZ3NhX3N0YXJ0X3dvcmtlcih2b2lkKQoreworCUJhY2tncm91bmRX b3JrZXIgd29ya2VyID0gezB9OworCUJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZTsKKwlC Z3dIYW5kbGVTdGF0dXMgc3RhdHVzOworCXBpZF90CQlwaWQ7CisKKwl3b3JrZXIuYmd3X2ZsYWdz ID0gQkdXT1JLRVJfU0hNRU1fQUNDRVNTOworCXdvcmtlci5iZ3dfc3RhcnRfdGltZSA9IEJnV29y a2VyU3RhcnRfQ29uc2lzdGVudFN0YXRlOworCXdvcmtlci5iZ3dfcmVzdGFydF90aW1lID0gQkdX X0RFRkFVTFRfUkVTVEFSVF9JTlRFUlZBTDsKKwlzdHJjcHkod29ya2VyLmJnd19saWJyYXJ5X25h bWUsICJwZ19zdGFzaF9hZHZpY2UiKTsKKwlzdHJjcHkod29ya2VyLmJnd19mdW5jdGlvbl9uYW1l LCAicGdfc3Rhc2hfYWR2aWNlX3dvcmtlcl9tYWluIik7CisJc3RyY3B5KHdvcmtlci5iZ3dfbmFt ZSwgInBnX3N0YXNoX2FkdmljZSB3b3JrZXIiKTsKKwlzdHJjcHkod29ya2VyLmJnd190eXBlLCAi cGdfc3Rhc2hfYWR2aWNlIHdvcmtlciIpOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIHRoZSBwb3N0 bWFzdGVyLCB3ZSBjYW4gZGlyZWN0bHkgcmVnaXN0ZXIgdGhlIGJhY2tncm91bmQKKwkgKiB3b3Jr ZXIuIChUaGlzIGNvdWxkIGJlIHJlYWNoZWQgZXZlbiBhZnRlciBzaGFyZWRfcHJlbG9hZF9saWJy YXJpZXMsIGJ1dAorCSAqIGl0IHdpbGwganVzdCBmYWlsIGluIHRoYXQgY2FzZS4gSXQncyBub3Qg d29ydGggdGhlIGNvZGUgdG8gZ2l2ZSBhIG5pY2VyCisJICogZXJyb3IuKQorCSAqLworCWlmICgh SXNVbmRlclBvc3RtYXN0ZXIpCisJeworCQlSZWdpc3RlckJhY2tncm91bmRXb3JrZXIoJndvcmtl cik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlJ3ZlIG5vdCBpbiB0aGUgcG9zdG1hc3Rl ciwgc28gdXNlIFJlZ2lzdGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIsCisJICogYW5kIHRoZW4g d2FpdCBmb3Igc3RhcnR1cCB0byBjb21wbGV0ZS4KKwkgKi8KKwl3b3JrZXIuYmd3X25vdGlmeV9w aWQgPSBNeVByb2NQaWQ7CisJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKCZ3 b3JrZXIsICZoYW5kbGUpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf SU5TVUZGSUNJRU5UX1JFU09VUkNFUyksCisJCQkJIGVycm1zZygiY291bGQgbm90IHJlZ2lzdGVy IGJhY2tncm91bmQgcHJvY2VzcyIpLAorCQkJCSBlcnJoaW50KCJZb3UgbWF5IG5lZWQgdG8gaW5j cmVhc2UgXCJtYXhfd29ya2VyX3Byb2Nlc3Nlc1wiLiIpKSk7CisJc3RhdHVzID0gV2FpdEZvckJh Y2tncm91bmRXb3JrZXJTdGFydHVwKGhhbmRsZSwgJnBpZCk7CisJaWYgKHN0YXR1cyAhPSBCR1dI X1NUQVJURUQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJ Q0lFTlRfUkVTT1VSQ0VTKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc3RhcnQgYmFja2dyb3Vu ZCBwcm9jZXNzIiksCisJCQkJIGVycmhpbnQoIk1vcmUgZGV0YWlscyBtYXkgYmUgYXZhaWxhYmxl IGluIHRoZSBzZXJ2ZXIgbG9nLiIpKSk7CiB9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNo X2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuaCBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0 YXNoX2FkdmljZS5oCmluZGV4IGVlYWE2MWUwZjM3Li4wMWFkZWQ0NzJmMyAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmgKKysrIGIvY29udHJpYi9w Z19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmgKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNs dWRlICJsaWIvZHNoYXNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKIAorI2RlZmlu ZSBQR1NBX0RVTVBfRklMRQkJInBnX3N0YXNoX2FkdmljZS50c3YiCisKIC8qCiAgKiBUaGUga2V5 IHRoYXQgd2UgdXNlIHRvIGZpbmQgYSBwYXJ0aWN1bGFyIHN0YXNoIGVudHJ5LgogICovCkBAIC02 Miw2ICs2NCw5IEBAIHR5cGVkZWYgc3RydWN0IHBnc2Ffc2hhcmVkX3N0YXRlCiAJZHNhX2hhbmRs ZQlhcmVhOwogCWRzaGFzaF90YWJsZV9oYW5kbGUgc3Rhc2hfaGFzaDsKIAlkc2hhc2hfdGFibGVf aGFuZGxlIGVudHJ5X2hhc2g7CisJcGlkX3QJCWJnd29ya2VyX3BpZDsKKwlwZ19hdG9taWNfZmxh ZyBzdGFzaGVzX3JlYWR5OworCXBnX2F0b21pY191aW50NjQgY2hhbmdlX2NvdW50OwogfSBwZ3Nh X3NoYXJlZF9zdGF0ZTsKIAogLyogRm9yIHN0YXNoIElEIC0+IHN0YXNoIG5hbWUgaGFzaCB0YWJs ZSAqLwpAQCAtODYsMTQgKzkxLDIxIEBAIGV4dGVybiBkc2FfYXJlYSAqcGdzYV9kc2FfYXJlYTsK IGV4dGVybiBkc2hhc2hfdGFibGUgKnBnc2Ffc3Rhc2hfZHNoYXNoOwogZXh0ZXJuIGRzaGFzaF90 YWJsZSAqcGdzYV9lbnRyeV9kc2hhc2g7CiAKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2V4dGVybiBi b29sIHBnX3N0YXNoX2FkdmljZV9wZXJzaXN0OworZXh0ZXJuIGludAlwZ19zdGFzaF9hZHZpY2Vf cGVyc2lzdF9pbnRlcnZhbDsKKwogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwogZXh0ZXJuIHZv aWQgcGdzYV9hdHRhY2godm9pZCk7CitleHRlcm4gdm9pZCBwZ3NhX2NoZWNrX2xvY2tvdXQodm9p ZCk7CiBleHRlcm4gdm9pZCBwZ3NhX2NoZWNrX3N0YXNoX25hbWUoY2hhciAqc3Rhc2hfbmFtZSk7 CiBleHRlcm4gdm9pZCBwZ3NhX2NsZWFyX2FkdmljZV9zdHJpbmcoY2hhciAqc3Rhc2hfbmFtZSwg aW50NjQgcXVlcnlJZCk7CiBleHRlcm4gdm9pZCBwZ3NhX2NyZWF0ZV9zdGFzaChjaGFyICpzdGFz aF9uYW1lKTsKIGV4dGVybiB2b2lkIHBnc2FfZHJvcF9zdGFzaChjaGFyICpzdGFzaF9uYW1lKTsK IGV4dGVybiB1aW50NjQgcGdzYV9sb29rdXBfc3Rhc2hfaWQoY2hhciAqc3Rhc2hfbmFtZSk7Citl eHRlcm4gdm9pZCBwZ3NhX3Jlc2V0X2FsbF9zdGFzaGVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGdz YV9zZXRfYWR2aWNlX3N0cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAogCQkJ CQkJCQkgICBjaGFyICphZHZpY2Vfc3RyaW5nKTsKK2V4dGVybiB2b2lkIHBnc2Ffc3RhcnRfd29y a2VyKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNl L3N0YXNoZnVuY3MuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNoZnVuY3MuYwppbmRl eCBkOGM2NjlkNmFiNy4uNzdmOGUxOWU4NjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3N0YXNoZnVuY3MuYworKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaGZ1 bmNzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5j bHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJwZ19zdGFzaF9hZHZpY2UuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKQEAgLTIzLDYgKzI0LDcgQEAgUEdf RlVOQ1RJT05fSU5GT19WMShwZ19kcm9wX2FkdmljZV9zdGFzaCk7CiBQR19GVU5DVElPTl9JTkZP X1YxKHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShw Z19nZXRfYWR2aWNlX3N0YXNoZXMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zZXRfc3Rhc2hl ZF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGFydF9zdGFzaF9hZHZpY2Vfd29y a2VyKTsKIAogdHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaF9jb3VudAogewpAQCAtNTMsNiArNTUs NyBAQCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcGdzYV9jaGVj a19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOwogCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFz aCA9PSBOVUxMKSkKIAkJcGdzYV9hdHRhY2goKTsKKwlwZ3NhX2NoZWNrX2xvY2tvdXQoKTsKIAlM V0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOwogCXBnc2FfY3Jl YXRlX3N0YXNoKHN0YXNoX25hbWUpOwogCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2sp OwpAQCAtNzAsNiArNzMsNyBAQCBwZ19kcm9wX2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdT KQogCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShzdGFzaF9uYW1lKTsKIAlpZiAodW5saWtlbHkocGdz YV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCiAJCXBnc2FfYXR0YWNoKCk7CisJcGdzYV9jaGVja19s b2Nrb3V0KCk7CiAJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZF KTsKIAlwZ3NhX2Ryb3Bfc3Rhc2goc3Rhc2hfbmFtZSk7CiAJTFdMb2NrUmVsZWFzZSgmcGdzYV9z dGF0ZS0+bG9jayk7CkBAIC05NCw2ICs5OCwxMCBAQCBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoUEdf RlVOQ1RJT05fQVJHUykKIAlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkp CiAJCXBnc2FfYXR0YWNoKCk7CiAKKwkvKiBJZiBzdGFzaCBkYXRhIGlzIHN0aWxsIGJlaW5nIHJl c3RvcmVkIGZyb20gZGlzaywgaWdub3JlLiAqLworCWlmIChwZ19hdG9taWNfdW5sb2NrZWRfdGVz dF9mbGFnKCZwZ3NhX3N0YXRlLT5zdGFzaGVzX3JlYWR5KSkKKwkJcmV0dXJuIChEYXR1bSkgMDsK KwogCS8qIFRhbGx5IHVwIHRoZSBudW1iZXIgb2YgZW50cmllcyBwZXIgc3Rhc2guICovCiAJY2hh c2ggPSBwZ3NhX3N0YXNoX2NvdW50X3RhYmxlX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwg NjQsIE5VTEwpOwogCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2FfZW50cnlfZHNoYXNo LCB0cnVlKTsKQEAgLTE1NCw2ICsxNjIsMTAgQEAgcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50 cyhQR19GVU5DVElPTl9BUkdTKQogCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBO VUxMKSkKIAkJcGdzYV9hdHRhY2goKTsKIAorCS8qIElmIHN0YXNoIGRhdGEgaXMgc3RpbGwgYmVp bmcgcmVzdG9yZWQgZnJvbSBkaXNrLCBpZ25vcmUuICovCisJaWYgKHBnX2F0b21pY191bmxvY2tl ZF90ZXN0X2ZsYWcoJnBnc2Ffc3RhdGUtPnN0YXNoZXNfcmVhZHkpKQorCQlyZXR1cm4gKERhdHVt KSAwOworCiAJLyogVXNlciBjYW4gcGFzcyBOVUxMIGZvciBhbGwgc3Rhc2hlcywgb3IgdGhlIG5h bWUgb2YgYSBzcGVjaWZpYyBzdGFzaC4gKi8KIAlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKIAl7CkBA IC0yODYsNiArMjk4LDkgQEAgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJaWYgKHVubGlrZWx5KHBnc2FfZW50cnlfZHNoYXNoID09IE5VTEwpKQogCQlwZ3NhX2F0dGFj aCgpOwogCisJLyogRG9uJ3QgYWxsb3cgd3JpdGVzIGlmIHN0YXNoIGRhdGEgaXMgc3RpbGwgYmVp bmcgcmVzdG9yZWQgZnJvbSBkaXNrLiAqLworCXBnc2FfY2hlY2tfbG9ja291dCgpOworCiAJLyog Tm93IGNhbGwgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGRvIHRoZSByZWFsIHdvcmsuICov CiAJaWYgKFBHX0FSR0lTTlVMTCgyKSkKIAl7CkBAIC0zMDUsMyArMzIwLDI4IEBAIHBnX3NldF9z dGFzaGVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAK Ky8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gc3RhcnQgdGhlIHBlcnNpc3RlbmNlIGJh Y2tncm91bmQgd29ya2VyLgorICovCitEYXR1bQorcGdfc3RhcnRfc3Rhc2hfYWR2aWNlX3dvcmtl cihQR19GVU5DVElPTl9BUkdTKQoreworCXBpZF90CQlwaWQ7CisKKwlpZiAodW5saWtlbHkocGdz YV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwlMV0xvY2tBY3F1 aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19TSEFSRUQpOworCXBpZCA9IHBnc2Ffc3RhdGUtPmJn d29ya2VyX3BpZDsKKwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKworCWlmIChw aWQgIT0gSW52YWxpZFBpZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJwZ19zdGFz aF9hZHZpY2Ugd29ya2VyIGlzIGFscmVhZHkgcnVubmluZyB1bmRlciBQSUQgJWQiLAorCQkJCQkJ KGludCkgcGlkKSkpOworCisJcGdzYV9zdGFydF93b3JrZXIoKTsKKworCVBHX1JFVFVSTl9WT0lE KCk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaHBlcnNpc3Qu YyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNocGVyc2lzdC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYTk2ZWUwZDgwMwotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNocGVyc2lzdC5jCkBAIC0wLDAgKzEsNzk5IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBzdGFzaHBlcnNpc3QuYworICoJICBQZXJzaXN0 ZW5jZSBzdXBwb3J0IGZvciBwZ19zdGFzaF9hZHZpY2UuCisgKgorICogQ29weXJpZ2h0IChjKSAy MDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBj b250cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaHBlcnNpc3QuYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ CisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAicGdfc3Rhc2hfYWR2aWNlLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtl ci5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAic3RvcmFn ZS9mZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRj aC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3Np Z25hbC5oIgorI2luY2x1ZGUgInV0aWxzL2JhY2tlbmRfc3RhdHVzLmgiCisjaW5jbHVkZSAidXRp bHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy90 aW1lc3RhbXAuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV93cml0ZXJfY29udGV4dAoreworCWNo YXIJCXBhdGhuYW1lW01BWFBHUEFUSF07CisJRklMRQkgICAqZmlsZTsKKwlwZ3NhX3N0YXNoX25h bWVfdGFibGVfaGFzaCAqbmhhc2g7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWludAkJCWVudHJp ZXNfd3JpdHRlbjsKK30gcGdzYV93cml0ZXJfY29udGV4dDsKKworLyoKKyAqIEEgcGFyc2VkIGVu dHJ5IGxpbmUsIHdpdGggcG9pbnRlcnMgaW50byB0aGUgc2x1cnAgYnVmZmVyLgorICovCit0eXBl ZGVmIHN0cnVjdCBwZ3NhX3NhdmVkX2VudHJ5Cit7CisJY2hhcgkgICAqc3Rhc2hfbmFtZTsKKwlp bnQ2NAkJcXVlcnlJZDsKKwljaGFyCSAgICphZHZpY2Vfc3RyaW5nOworfSBwZ3NhX3NhdmVkX2Vu dHJ5OworCisvKgorICogc2ltcGxlaGFzaCBmb3IgZGV0ZWN0aW5nIGR1cGxpY2F0ZSBzdGFzaCBu YW1lcyBkdXJpbmcgcGFyc2luZy4KKyAqIEtleWVkIGJ5IHN0YXNoIG5hbWUgKGNoYXIgKiksIHBv aW50aW5nIGludG8gdGhlIHNsdXJwIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9z YXZlZF9zdGFzaAoreworCXVpbnQzMgkJc3RhdHVzOworCWNoYXIJICAgKm5hbWU7Cit9IHBnc2Ff c2F2ZWRfc3Rhc2g7CisKKyNkZWZpbmUgU0hfUFJFRklYIHBnc2Ffc2F2ZWRfc3Rhc2hfdGFibGUK KyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFIHBnc2Ffc2F2ZWRfc3Rhc2gKKyNkZWZpbmUgU0hfS0VZ X1RZUEUgY2hhciAqCisjZGVmaW5lIFNIX0tFWSBuYW1lCisjZGVmaW5lIFNIX0hBU0hfS0VZKHRi LCBrZXkpIGhhc2hfYnl0ZXMoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgKGtleSksIHN0cmxlbihr ZXkpKQorI2RlZmluZSBTSF9FUVVBTCh0YiwgYSwgYikgKHN0cmNtcChhLCBiKSA9PSAwKQorI2Rl ZmluZSBTSF9TQ09QRSBzdGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFRklORQorI2RlZmluZSBT SF9ERUNMQVJFCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworZXh0ZXJuIFBHRExMRVhQ T1JUIHZvaWQgcGdfc3Rhc2hfYWR2aWNlX3dvcmtlcl9tYWluKERhdHVtIG1haW5fYXJnKTsKK3N0 YXRpYyB2b2lkIHBnc2FfYXBwZW5kX3Rzdl9lc2NhcGVkX3N0cmluZyhTdHJpbmdJbmZvIGJ1Ziwg Y29uc3QgY2hhciAqc3RyKTsKK3N0YXRpYyB2b2lkIHBnc2FfZGV0YWNoX3NobWVtKGludCBjb2Rl LCBEYXR1bSBhcmcpOworc3RhdGljIGNoYXIgKnBnc2FfbmV4dF90c3ZfZmllbGQoY2hhciAqKmN1 cnNvcik7CitzdGF0aWMgdm9pZCBwZ3NhX3JlYWRfZnJvbV9kaXNrKHZvaWQpOworc3RhdGljIHZv aWQgcGdzYV9yZXN0b3JlX2VudHJpZXMocGdzYV9zYXZlZF9lbnRyeSAqZW50cmllcywgaW50IG51 bV9lbnRyaWVzKTsKK3N0YXRpYyB2b2lkIHBnc2FfcmVzdG9yZV9zdGFzaGVzKHBnc2Ffc2F2ZWRf c3Rhc2hfdGFibGVfaGFzaCAqc2F2ZWRfc3Rhc2hlcyk7CitzdGF0aWMgdm9pZCBwZ3NhX3VuZXNj YXBlX3Rzdl9maWVsZChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkJCQkJ dW5zaWduZWQgbGluZW5vKTsKK3N0YXRpYyB2b2lkIHBnc2Ffd3JpdGVfZW50cmllcyhwZ3NhX3dy aXRlcl9jb250ZXh0ICp3Y3R4KTsKK3BnX25vcmV0dXJuIHN0YXRpYyB2b2lkIHBnc2Ffd3JpdGVf ZXJyb3IocGdzYV93cml0ZXJfY29udGV4dCAqd2N0eCk7CitzdGF0aWMgdm9pZCBwZ3NhX3dyaXRl X3N0YXNoZXMocGdzYV93cml0ZXJfY29udGV4dCAqd2N0eCk7CitzdGF0aWMgdm9pZCBwZ3NhX3dy aXRlX3RvX2Rpc2sodm9pZCk7CisKKy8qCisgKiBCYWNrZ3JvdW5kIHdvcmtlciBlbnRyeSBwb2lu dCBmb3IgcGdfc3Rhc2hfYWR2aWNlIHBlcnNpc3RlbmNlLgorICoKKyAqIE9uIHN0YXJ0dXAsIGlm IGxvYWRfZnJvbV9kaXNrX3BlbmRpbmcgaXMgc2V0LCB3ZSBsb2FkIHByZXZpb3VzbHkgc2F2ZWQK KyAqIHN0YXNoIGRhdGEgZnJvbSBkaXNrLiAgVGhlbiB3ZSBlbnRlciBhIGxvb3AsIHBlcmlvZGlj YWxseSBjaGVja2luZyB3aGV0aGVyCisgKiBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSAodmlh IHRoZSBjaGFuZ2VfY291bnQgYXRvbWljIGNvdW50ZXIpIGFuZAorICogd3JpdGluZyB0aGVtIHRv IGRpc2suICBPbiBzaHV0ZG93biwgd2UgcGVyZm9ybSBhIGZpbmFsIHdyaXRlLgorICovCitQR0RM TEVYUE9SVCB2b2lkCitwZ19zdGFzaF9hZHZpY2Vfd29ya2VyX21haW4oRGF0dW0gbWFpbl9hcmcp Cit7CisJdWludDY0CQlsYXN0X2NoYW5nZV9jb3VudDsKKwlUaW1lc3RhbXBUeiBsYXN0X3dyaXRl X3RpbWUgPSAwOworCisJLyogRXN0YWJsaXNoIHNpZ25hbCBoYW5kbGVyczsgb25jZSB0aGF0J3Mg ZG9uZSwgdW5ibG9jayBzaWduYWxzLiAqLworCXBxc2lnbmFsKFNJR1RFUk0sIFNpZ25hbEhhbmRs ZXJGb3JTaHV0ZG93blJlcXVlc3QpOworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZv ckNvbmZpZ1JlbG9hZCk7CisJcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hh bmRsZXIpOworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyogTG9nIGEg ZGVidWcgbWVzc2FnZSAqLworCWVyZXBvcnQoREVCVUcxLAorCQkJZXJybXNnKCJwZ19zdGFzaF9h ZHZpY2Ugd29ya2VyIHN0YXJ0ZWQiKSk7CisKKwkvKiBTZXQgdXAgc2Vzc2lvbiB1c2VyIHNvIHBn c3RhdCBjYW4gcmVwb3J0IGl0LiAqLworCUluaXRpYWxpemVTZXNzaW9uVXNlcklkU3RhbmRhbG9u ZSgpOworCisJLyogUmVwb3J0IHRoaXMgd29ya2VyIGluIHBnX3N0YXRfYWN0aXZpdHkuICovCisJ cGdzdGF0X2JlaW5pdCgpOworCXBnc3RhdF9iZXN0YXJ0X2luaXRpYWwoKTsKKwlwZ3N0YXRfYmVz dGFydF9maW5hbCgpOworCisJLyogQXR0YWNoIHRvIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4g Ki8KKwlwZ3NhX2F0dGFjaCgpOworCisJLyogU2V0IG9uLWRldGFjaCBob29rIHNvIHRoYXQgb3Vy IFBJRCB3aWxsIGJlIGNsZWFyZWQgb24gZXhpdC4gKi8KKwliZWZvcmVfc2htZW1fZXhpdChwZ3Nh X2RldGFjaF9zaG1lbSwgMCk7CisKKwkvKgorCSAqIFN0b3JlIG91ciBQSUQgaW4gc2hhcmVkIG1l bW9yeSwgdW5sZXNzIHRoZXJlJ3MgYWxyZWFkeSBhbm90aGVyIHdvcmtlcgorCSAqIHJ1bm5pbmcs IGluIHdoaWNoIGNhc2UganVzdCBleGl0LgorCSAqLworCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3Rh dGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJaWYgKHBnc2Ffc3RhdGUtPmJnd29ya2VyX3BpZCAh PSBJbnZhbGlkUGlkKQorCXsKKwkJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CisJ CWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coInBnX3N0YXNoX2FkdmljZSB3b3JrZXIgaXMgYWxy ZWFkeSBydW5uaW5nIHVuZGVyIFBJRCAlZCIsCisJCQkJCQkoaW50KSBwZ3NhX3N0YXRlLT5iZ3dv cmtlcl9waWQpKSk7CisJCXJldHVybjsKKwl9CisJcGdzYV9zdGF0ZS0+Ymd3b3JrZXJfcGlkID0g TXlQcm9jUGlkOworCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCisJLyoKKwkg KiBJZiBwZ19zdGFzaF9hZHZpY2UucGVyc2lzdCB3YXMgc2V0IHRvIHRydWUgZHVyaW5nCisJICog cHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMoKSBhbmQgdGhlIGRhdGEgaGFzIG5vdCB5 ZXQgYmVlbgorCSAqIHN1Y2Nlc3NmdWxseSBsb2FkZWQsIGxvYWQgaXQgbm93LgorCSAqLworCWlm IChwZ19hdG9taWNfdW5sb2NrZWRfdGVzdF9mbGFnKCZwZ3NhX3N0YXRlLT5zdGFzaGVzX3JlYWR5 KSkKKwl7CisJCXBnc2FfcmVhZF9mcm9tX2Rpc2soKTsKKwkJcGdfYXRvbWljX3Rlc3Rfc2V0X2Zs YWcoJnBnc2Ffc3RhdGUtPnN0YXNoZXNfcmVhZHkpOworCX0KKworCS8qIE5vdGUgdGhlIGN1cnJl bnQgY2hhbmdlIGNvdW50IHNvIHdlIGNhbiBkZXRlY3QgZnV0dXJlIGNoYW5nZXMuICovCisJbGFz dF9jaGFuZ2VfY291bnQgPSBwZ19hdG9taWNfcmVhZF91NjQoJnBnc2Ffc3RhdGUtPmNoYW5nZV9j b3VudCk7CisKKwkvKiBQZXJpb2RpY2FsbHkgd3JpdGUgdG8gZGlzayB1bnRpbCB0ZXJtaW5hdGVk LiAqLworCXdoaWxlICghU2h1dGRvd25SZXF1ZXN0UGVuZGluZykKKwl7CisJCS8qIEluIGNhc2Ug b2YgYSBTSUdIVVAsIGp1c3QgcmVsb2FkIHRoZSBjb25maWd1cmF0aW9uLiAqLworCQlpZiAoQ29u ZmlnUmVsb2FkUGVuZGluZykKKwkJeworCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwor CQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CisJCX0KKworCQlpZiAocGdfc3Rhc2hf YWR2aWNlX3BlcnNpc3RfaW50ZXJ2YWwgPD0gMCkKKwkJeworCQkJLyogT25seSB3cml0aW5nIGF0 IHNodXRkb3duLCBzbyBqdXN0IHdhaXQgZm9yZXZlci4gKi8KKwkJCSh2b2lkKSBXYWl0TGF0Y2go TXlMYXRjaCwKKwkJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJ CQkJCQkgLTFMLAorCQkJCQkJCSBQR19XQUlUX0VYVEVOU0lPTik7CisJCX0KKwkJZWxzZQorCQl7 CisJCQlUaW1lc3RhbXBUeiBuZXh0X3dyaXRlX3RpbWU7CisJCQlsb25nCQlkZWxheV9pbl9tczsK KwkJCXVpbnQ2NAkJY3VycmVudF9jaGFuZ2VfY291bnQ7CisKKwkJCS8qIENvbXB1dGUgd2hlbiB0 aGUgbmV4dCB3cml0ZSBzaG91bGQgaGFwcGVuLiAqLworCQkJbmV4dF93cml0ZV90aW1lID0KKwkJ CQlUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMobGFzdF93cml0ZV90aW1lLAorCQkJCQkJCQkJ CQlwZ19zdGFzaF9hZHZpY2VfcGVyc2lzdF9pbnRlcnZhbCAqIDEwMDApOworCQkJZGVsYXlfaW5f bXMgPQorCQkJCVRpbWVzdGFtcERpZmZlcmVuY2VNaWxsaXNlY29uZHMoR2V0Q3VycmVudFRpbWVz dGFtcCgpLAorCQkJCQkJCQkJCQkJbmV4dF93cml0ZV90aW1lKTsKKworCQkJLyoKKwkJCSAqIFdo ZW4gd2UgcmVhY2ggbmV4dF93cml0ZV90aW1lLCB3ZSBhbHdheXMgdXBkYXRlIGxhc3Rfd3JpdGVf dGltZQorCQkJICogKHdoaWNoIGlzIHJlYWxseSB0aGUgdGltZSBhdCB3aGljaCB3ZSBsYXN0IGNv bnNpZGVyZWQgd3JpdGluZyksCisJCQkgKiBidXQgd2Ugb25seSBhY3R1YWxseSB3cml0ZSB0byBk aXNrIGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZC4KKwkJCSAqLworCQkJaWYgKGRlbGF5X2luX21z IDw9IDApCisJCQl7CisJCQkJY3VycmVudF9jaGFuZ2VfY291bnQgPQorCQkJCQlwZ19hdG9taWNf cmVhZF91NjQoJnBnc2Ffc3RhdGUtPmNoYW5nZV9jb3VudCk7CisJCQkJaWYgKGN1cnJlbnRfY2hh bmdlX2NvdW50ICE9IGxhc3RfY2hhbmdlX2NvdW50KQorCQkJCXsKKwkJCQkJcGdzYV93cml0ZV90 b19kaXNrKCk7CisJCQkJCWxhc3RfY2hhbmdlX2NvdW50ID0gY3VycmVudF9jaGFuZ2VfY291bnQ7 CisJCQkJfQorCQkJCWxhc3Rfd3JpdGVfdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwkJ CQljb250aW51ZTsKKwkJCX0KKworCQkJLyogU2xlZXAgdW50aWwgdGhlIG5leHQgd3JpdGUgdGlt ZS4gKi8KKwkJCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCQkgV0xfTEFUQ0hfU0VU IHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkJIGRlbGF5X2luX21z LAorCQkJCQkJCSBQR19XQUlUX0VYVEVOU0lPTik7CisJCX0KKworCQlSZXNldExhdGNoKE15TGF0 Y2gpOworCX0KKworCS8qIFdyaXRlIG9uZSBsYXN0IHRpbWUgYmVmb3JlIGV4aXRpbmcuICovCisJ cGdzYV93cml0ZV90b19kaXNrKCk7Cit9CisKKy8qCisgKiBDbGVhciBvdXIgUElEIGZyb20gc2hh cmVkIG1lbW9yeSBvbiBleGl0LgorICovCitzdGF0aWMgdm9pZAorcGdzYV9kZXRhY2hfc2htZW0o aW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2Nr LCBMV19FWENMVVNJVkUpOworCWlmIChwZ3NhX3N0YXRlLT5iZ3dvcmtlcl9waWQgPT0gTXlQcm9j UGlkKQorCQlwZ3NhX3N0YXRlLT5iZ3dvcmtlcl9waWQgPSBJbnZhbGlkUGlkOworCUxXTG9ja1Jl bGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworfQorCisvKgorICogTG9hZCBhZHZpY2Ugc3Rhc2gg ZGF0YSBmcm9tIGEgZHVtcCBmaWxlIG9uIGRpc2ssIGlmIHRoZXJlIGlzIG9uZS4KKyAqLworc3Rh dGljIHZvaWQKK3Bnc2FfcmVhZF9mcm9tX2Rpc2sodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGF0 YnVmOworCUZJTEUJICAgKmZpbGU7CisJY2hhcgkgICAqZmlsZWJ1ZjsKKwlzaXplX3QJCW5yZWFk OworCWNoYXIJICAgKnA7CisJdW5zaWduZWQJbGluZW5vOworCXBnc2Ffc2F2ZWRfc3Rhc2hfdGFi bGVfaGFzaCAqc2F2ZWRfc3Rhc2hlczsKKwlpbnQJCQludW1fc3Rhc2hlcyA9IDA7CisJcGdzYV9z YXZlZF9lbnRyeSAqZW50cmllczsKKwlpbnQJCQludW1fZW50cmllcyA9IDA7CisJaW50CQkJbWF4 X2VudHJpZXMgPSA2NDsKKwlNZW1vcnlDb250ZXh0IHRtcGN4dDsKKwlNZW1vcnlDb250ZXh0IG9s ZGN4dDsKKworCUFzc2VydChwZ3NhX2VudHJ5X2RzaGFzaCAhPSBOVUxMKTsKKworCS8qCisJICog Q2xlYXIgYW55IGV4aXN0aW5nIHNoYXJlZCBtZW1vcnkgc3RhdGUuCisJICoKKwkgKiBOb3JtYWxs eSwgdGhlcmUgd29uJ3QgYmUgYW55LCBidXQgaWYgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIGJl Zm9yZQorCSAqIGFuZCBmYWlsZWQgYWZ0ZXIgYmVnaW5uaW5nIHRvIGFwcGx5IGNoYW5nZXMgdG8g c2hhcmVkIG1lbW9yeSwgdGhlbiB3ZQorCSAqIG5lZWQgdG8gZ2V0IHJpZCBvZiBhbnkgZW50cmll cyBjcmVhdGVkIGF0IHRoYXQgdGltZSBiZWZvcmUgdHJ5aW5nCisJICogYWdhaW4uCisJICovCisJ TFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwlwZ3NhX3Jl c2V0X2FsbF9zdGFzaGVzKCk7CisJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CisK KwkvKiBPcGVuIHRoZSBkdW1wIGZpbGUuIElmIGl0IGRvZXNuJ3QgZXhpc3QsIHdlJ3JlIGRvbmUu ICovCisJZmlsZSA9IEFsbG9jYXRlRmlsZShQR1NBX0RVTVBfRklMRSwgInIiKTsKKwlpZiAoIWZp bGUpCisJeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuOworCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxk IG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIFBHU0FfRFVNUF9GSUxFKSkpOworCX0KKworCS8q IFVzZSBhIHRlbXBvcmFyeSBjb250ZXh0IGZvciBhbGwgcGFyc2UtcGhhc2UgYWxsb2NhdGlvbnMu ICovCisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0 LAorCQkJCQkJCQkgICAicGdfc3Rhc2hfYWR2aWNlIGxvYWQiLAorCQkJCQkJCQkgICBBTExPQ1NF VF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0 KTsKKworCS8qIEZpZ3VyZSBvdXQgaG93IGxvbmcgdGhlIGZpbGUgaXMuICovCisJaWYgKGZzdGF0 KGZpbGVubyhmaWxlKSwgJnN0YXRidWYpICE9IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXQgZmls ZSBcIiVzXCI6ICVtIiwgUEdTQV9EVU1QX0ZJTEUpKSk7CisKKwkvKgorCSAqIFNsdXJwIHRoZSBl bnRpcmUgZmlsZSBpbnRvIG1lbW9yeSBhbGwgYXQgb25jZS4KKwkgKgorCSAqIFdlIGNvdWxkIGF2 b2lkIHRoaXMgYnkgcmVhZGluZyB0aGUgZmlsZSBpbmNyZW1lbnRhbGx5IGFuZCBhcHBseWluZwor CSAqIGNoYW5nZXMgdG8gcGdzYV9zdGFzaF9kc2hhc2ggYW5kIHBnc2FfZW50cnlfZHNoYXNoIGFz IHdlIGdvLiBHaXZlbiB0aGUKKwkgKiBsb2Nrb3V0IG1lY2hhbmlzbSBpbXBsZW1lbnRlZCBieSBz dGFzaGVzX3JlYWR5LCB0aGF0IHNob3VsZG4ndCBoYXZlIGFueQorCSAqIHVzZXItdmlzaWJsZSBi ZWhhdmlvcmFsIGNvbnNlcXVlbmNlcywgYnV0IGl0IHdvdWxkIGNvbnN1bWUgc2hhcmVkCisJICog bWVtb3J5IHRvIG5vIGJlbmVmaXQuIEl0IHNlZW1zIGJldHRlciB0byBidWZmZXIgZXZlcnl0aGlu ZyBpbiBwcml2YXRlCisJICogbWVtb3J5IGZpcnN0LCBhbmQgdGhlbiBvbmx5IGFwcGx5IHRoZSBj aGFuZ2VzIG9uY2UgdGhlIGZpbGUgaGFzIGJlZW4KKwkgKiBzdWNjZXNzZnVsbHkgcGFyc2VkIGlu IGl0cyBlbnRpcmV0eS4KKwkgKgorCSAqIFRoYXQgYWxzbyBoYXMgdGhlIGFkdmFudGFnZSBvZiBw b3NzaWJseSBiZWluZyBtb3JlIGZ1dHVyZS1wcm9vZjogaWYgd2UKKwkgKiBkZWNpZGUgdG8gcmVt b3ZlIHRoZSBzdGFzaGVzX3JlYWR5IG1lY2hhbmlzbSBpbiB0aGUgZnV0dXJlLCBvciBzYXkKKwkg KiBhbGxvdyBmb3IgbXVsdGlwbGUgc2F2ZSBmaWxlcywgZnVsbHkgdmFsaWRhdGluZyB0aGUgZmls ZSBiZWZvcmUKKwkgKiBhcHBseWluZyBhbnkgY2hhbmdlcyB3aWxsIGJlY29tZSBtdWNoIG1vcmUg aW1wb3J0YW50LgorCSAqCisJICogT2YgY291cnNlLCB0aGlzIGFwcHJvYWNoIGRvZXMgaGF2ZSBv bmUgbWFqb3IgZGlzYWR2YW50YWdlLCB3aGljaCBpcworCSAqIHRoYXQgd2UnbGwgdGVtcG9yYXJp bHkgdXNlIGFib3V0IHR3aWNlIGFzIG11Y2ggbWVtb3J5IGFzIHdlJ3JlCisJICogdWx0aW1hdGVs eSBnb2luZyB0byBuZWVkLCBidXQgdGhhdCBzZWVtcyBsaWtlIGl0IHNob3VsZG4ndCBiZSBhIHBy b2JsZW0KKwkgKiBpbiBwcmFjdGljZS4gSWYgdGhlcmUncyBzbyBtdWNoIHN0YXNoZWQgYWR2aWNl IHRoYXQgcGFyc2luZyB0aGUgZGlzaworCSAqIGZpbGUgcnVucyB1cyBvdXQgb2YgbWVtb3J5LCBz b21ldGhpbmcgaGFzIGdvbmUgdGVycmlibHkgd3JvbmcuIEluIHRoYXQKKwkgKiBzaXR1YXRpb24s IHRoZXJlIHByb2JhYmx5IGFsc28gaXNuJ3QgZW5vdWdoIGZyZWUgbWVtb3J5IGZvciB0aGUKKwkg KiB3b3JrbG9hZCB0aGF0IHRoZSBhZHZpY2UgaXMgYXR0ZW1wdGluZyB0byBtYW5pcHVsYXRlIHRv IHJ1bgorCSAqIHN1Y2Nlc3NmdWxseS4KKwkgKi8KKwlmaWxlYnVmID0gcGFsbG9jX2V4dGVuZGVk KHN0YXRidWYuc3Rfc2l6ZSArIDEsIE1DWFRfQUxMT0NfSFVHRSk7CisJbnJlYWQgPSBmcmVhZChm aWxlYnVmLCAxLCBzdGF0YnVmLnN0X3NpemUsIGZpbGUpOworCWlmIChmZXJyb3IoZmlsZSkpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVy cm1zZygiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwgUEdTQV9EVU1QX0ZJTEUpKSk7 CisJRnJlZUZpbGUoZmlsZSk7CisJZmlsZWJ1ZltucmVhZF0gPSAnXDAnOworCisJLyogSW5pdGlh bCBtZW1vcnkgYWxsb2NhdGlvbnMuICovCisJc2F2ZWRfc3Rhc2hlcyA9IHBnc2Ffc2F2ZWRfc3Rh c2hfdGFibGVfY3JlYXRlKHRtcGN4dCwgNjQsIE5VTEwpOworCWVudHJpZXMgPSBwYWxsb2MobWF4 X2VudHJpZXMgKiBzaXplb2YocGdzYV9zYXZlZF9lbnRyeSkpOworCisJLyoKKwkgKiBGb3IgbWVt b3J5IGFuZCBDUFUgZWZmaWNpZW5jeSwgd2UgcGFyc2UgdGhlIGZpbGUgaW4gcGxhY2UuIFRoZSBl bmQgb2YKKwkgKiBlYWNoIGxpbmUgZ2V0cyByZXBsYWNlZCB3aXRoIGEgTlVMIGJ5dGUsIGFuZCB0 aGVuIHRoZSBlbmQgb2YgZWFjaCBmaWVsZAorCSAqIHdpdGhpbiBhIGxpbmUgZ2V0cyB0aGUgc2Ft ZSB0cmVhdG1lbnQuIFRoZSBhZHZpY2Ugc3RyaW5nIGlzIHVuZXNjYXBlZAorCSAqIGluIHBsYWNl LCBhbmQgc3Rhc2ggbmFtZXMgYW5kIHF1ZXJ5IElEcyBjYW4ndCBjb250YWluIGFueSBzcGVjaWFs CisJICogY2hhcmFjdGVycy4gQWxsIG9mIHRoZSByZXN1bHRpbmcgcG9pbnRlcnMgcG9pbnQgcmln aHQgYmFjayBpbnRvIHRoZQorCSAqIGJ1ZmZlcjsgd2Ugb25seSBuZWVkIGFkZGl0aW9uYWwgbWVt b3J5IHRvIGdyb3cgdGhlICdlbnRyaWVzJyBhcnJheSBhbmQKKwkgKiB0aGUgJ3NhdmVkX3N0YXNo ZXMnIGhhc2ggdGFibGUuCisJICovCisJZm9yIChwID0gZmlsZWJ1ZiwgbGluZW5vID0gMTsgKnAg IT0gJ1wwJzsgbGluZW5vKyspCisJeworCQljaGFyCSAgICpjdXJzb3IgPSBwOworCQljaGFyCSAg ICplb2w7CisJCWNoYXIJICAgKmxpbmVfdHlwZTsKKworCQkvKiBGaW5kIGVuZCBvZiBsaW5lIGFu ZCBOVUwtdGVybWluYXRlLiAqLworCQllb2wgPSBzdHJjaHIocCwgJ1xuJyk7CisJCWlmIChlb2wg IT0gTlVMTCkKKwkJeworCQkJKmVvbCA9ICdcMCc7CisJCQlwID0gZW9sICsgMTsKKwkJCWlmIChl b2wgPiBjdXJzb3IgJiYgZW9sWy0xXSA9PSAnXHInKQorCQkJCWVvbFstMV0gPSAnXDAnOworCQl9 CisJCWVsc2UKKwkJCXAgKz0gc3RybGVuKHApOworCisJCS8qIFNraXAgZW1wdHkgbGluZXMuICov CisJCWlmICgqY3Vyc29yID09ICdcMCcpCisJCQljb250aW51ZTsKKworCQkvKiBGaXJzdCBmaWVs ZCBpcyB0aGUgdHlwZSBvZiBsaW5lLCBlaXRoZXIgInN0YXNoIiBvciAiZW50cnkiLiAqLworCQls aW5lX3R5cGUgPSBwZ3NhX25leHRfdHN2X2ZpZWxkKCZjdXJzb3IpOworCQlpZiAoc3RyY21wKGxp bmVfdHlwZSwgInN0YXNoIikgPT0gMCkKKwkJeworCQkJY2hhcgkgICAqbmFtZTsKKwkJCWJvb2wJ CWZvdW5kOworCisJCQkvKiBTZWNvbmQgZmllbGQgc2hvdWxkIGJlIHRoZSBzdGFzaCBuYW1lLiAq LworCQkJbmFtZSA9IHBnc2FfbmV4dF90c3ZfZmllbGQoJmN1cnNvcik7CisJCQlpZiAobmFtZSA9 PSBOVUxMIHx8ICpuYW1lID09ICdcMCcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9y IGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IGV4cGVjdGVkIHN0YXNoIG5hbWUiLAorCQkJCQkJCQlQ R1NBX0RVTVBfRklMRSwgbGluZW5vKSkpOworCisJCQkvKiBObyBmdXJ0aGVyIGZpZWxkcyBhcmUg ZXhwZWN0ZWQuICovCisJCQlpZiAoKmN1cnNvciAhPSAnXDAnKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkJCSBlcnJtc2co InN5bnRheCBlcnJvciBpbiBmaWxlIFwiJXNcIiBsaW5lICV1OiBleHBlY3RlZCBlbmQgb2YgbGlu ZSIsCisJCQkJCQkJCVBHU0FfRFVNUF9GSUxFLCBsaW5lbm8pKSk7CisKKwkJCS8qIER1cGxpY2F0 ZSBjaGVjay4gKi8KKwkJCSh2b2lkKSBwZ3NhX3NhdmVkX3N0YXNoX3RhYmxlX2luc2VydChzYXZl ZF9zdGFzaGVzLCBuYW1lLCAmZm91bmQpOworCQkJaWYgKGZvdW5kKQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkJCSBlcnJt c2coInN5bnRheCBlcnJvciBpbiBmaWxlIFwiJXNcIiBsaW5lICV1OiBkdXBsaWNhdGUgc3Rhc2gg bmFtZSBcIiVzXCIiLAorCQkJCQkJCQlQR1NBX0RVTVBfRklMRSwgbGluZW5vLCBuYW1lKSkpOwor CQkJbnVtX3N0YXNoZXMrKzsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAobGluZV90eXBlLCAiZW50 cnkiKSA9PSAwKQorCQl7CisJCQljaGFyCSAgICpzdGFzaF9uYW1lOworCQkJY2hhcgkgICAqcXVl cnlpZF9zdHI7CisJCQljaGFyCSAgICphZHZpY2Vfc3RyOworCQkJY2hhcgkgICAqZW5kcHRyOwor CQkJaW50NjQJCXF1ZXJ5SWQ7CisKKwkJCS8qIFNlY29uZCBmaWVsZCBzaG91bGQgYmUgdGhlIHN0 YXNoIG5hbWUuICovCisJCQlzdGFzaF9uYW1lID0gcGdzYV9uZXh0X3Rzdl9maWVsZCgmY3Vyc29y KTsKKwkJCWlmIChzdGFzaF9uYW1lID09IE5VTEwpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1zZygic3ludGF4 IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IGV4cGVjdGVkIHN0YXNoIG5hbWUiLAorCQkJ CQkJCQlQR1NBX0RVTVBfRklMRSwgbGluZW5vKSkpOworCisJCQkvKiBUaGlyZCBmaWVsZCBzaG91 bGQgYmUgdGhlIHF1ZXJ5IElELiAqLworCQkJcXVlcnlpZF9zdHIgPSBwZ3NhX25leHRfdHN2X2Zp ZWxkKCZjdXJzb3IpOworCQkJaWYgKHF1ZXJ5aWRfc3RyID09IE5VTEwpCisJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkJIGVy cm1zZygic3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IGV4cGVjdGVkIHF1ZXJ5 IElEIiwKKwkJCQkJCQkJUEdTQV9EVU1QX0ZJTEUsIGxpbmVubykpKTsKKworCQkJLyogRm91cnRo IGZpZWxkIHNob3VsZCBiZSB0aGUgYWR2aWNlIHN0cmluZy4gKi8KKwkJCWFkdmljZV9zdHIgPSBw Z3NhX25leHRfdHN2X2ZpZWxkKCZjdXJzb3IpOworCQkJaWYgKGFkdmljZV9zdHIgPT0gTlVMTCkK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRF RCksCisJCQkJCQkgZXJybXNnKCJzeW50YXggZXJyb3IgaW4gZmlsZSBcIiVzXCIgbGluZSAldTog ZXhwZWN0ZWQgYWR2aWNlIHN0cmluZyIsCisJCQkJCQkJCVBHU0FfRFVNUF9GSUxFLCBsaW5lbm8p KSk7CisKKwkJCS8qIE5vIGZ1cnRoZXIgZmllbGRzIGFyZSBleHBlY3RlZC4gKi8KKwkJCWlmICgq Y3Vyc29yICE9ICdcMCcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNP REVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIGZpbGUg XCIlc1wiIGxpbmUgJXU6IGV4cGVjdGVkIGVuZCBvZiBsaW5lIiwKKwkJCQkJCQkJUEdTQV9EVU1Q X0ZJTEUsIGxpbmVubykpKTsKKworCQkJLyogTWFrZSBzdXJlIHRoZSBzdGFzaCBpcyBvbmUgd2Un dmUgYWN0dWFsbHkgc2Vlbi4gKi8KKwkJCWlmIChwZ3NhX3NhdmVkX3N0YXNoX3RhYmxlX2xvb2t1 cChzYXZlZF9zdGFzaGVzLAorCQkJCQkJCQkJCQkgIHN0YXNoX25hbWUpID09IE5VTEwpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAor CQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IHVua25v d24gc3Rhc2ggXCIlc1wiIiwKKwkJCQkJCQkJUEdTQV9EVU1QX0ZJTEUsIGxpbmVubywgc3Rhc2hf bmFtZSkpKTsKKworCQkJLyogUGFyc2UgdGhlIHF1ZXJ5IElELiAqLworCQkJZXJybm8gPSAwOwor CQkJcXVlcnlJZCA9IHN0cnRvbGwocXVlcnlpZF9zdHIsICZlbmRwdHIsIDEwKTsKKwkJCWlmICgq ZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gIT0gMCB8fCBxdWVyeWlkX3N0ciA9PSBlbmRwdHIpCisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQp LAorCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXU6IGlu dmFsaWQgcXVlcnkgSUQgXCIlc1wiIiwKKwkJCQkJCQkJUEdTQV9EVU1QX0ZJTEUsIGxpbmVubywg cXVlcnlpZF9zdHIpKSk7CisKKwkJCS8qIFVuZXNjYXBlIHRoZSBhZHZpY2Ugc3RyaW5nLiAqLwor CQkJcGdzYV91bmVzY2FwZV90c3ZfZmllbGQoYWR2aWNlX3N0ciwgUEdTQV9EVU1QX0ZJTEUsIGxp bmVubyk7CisKKwkJCS8qIEFwcGVuZCB0byB0aGUgZW50cnkgYXJyYXkuICovCisJCQlpZiAobnVt X2VudHJpZXMgPj0gbWF4X2VudHJpZXMpCisJCQl7CisJCQkJbWF4X2VudHJpZXMgKj0gMjsKKwkJ CQllbnRyaWVzID0gcmVwYWxsb2MoZW50cmllcywKKwkJCQkJCQkJICAgbWF4X2VudHJpZXMgKiBz aXplb2YocGdzYV9zYXZlZF9lbnRyeSkpOworCQkJfQorCQkJZW50cmllc1tudW1fZW50cmllc10u c3Rhc2hfbmFtZSA9IHN0YXNoX25hbWU7CisJCQllbnRyaWVzW251bV9lbnRyaWVzXS5xdWVyeUlk ID0gcXVlcnlJZDsKKwkJCWVudHJpZXNbbnVtX2VudHJpZXNdLmFkdmljZV9zdHJpbmcgPSBhZHZp Y2Vfc3RyOworCQkJbnVtX2VudHJpZXMrKzsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCQkgZXJy bXNnKCJzeW50YXggZXJyb3IgaW4gZmlsZSBcIiVzXCIgbGluZSAldTogdW5yZWNvZ25pemVkIGxp bmUgdHlwZSIsCisJCQkJCQkJUEdTQV9EVU1QX0ZJTEUsIGxpbmVubykpKTsKKwkJfQorCX0KKwor CS8qCisJICogUGFyc2luZyBzdWNjZWVkZWQuIEFwcGx5IGV2ZXJ5dGhpbmcgdG8gc2hhcmVkIG1l bW9yeS4KKwkgKgorCSAqIEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhhdCB0aGUgZmlsZSB3ZSBq dXN0IHJlYWQgaXMgZnVsbHkgdmFsaWQsIGJ1dAorCSAqIGl0J3Mgc3RpbGwgcG9zc2libGUgZm9y IHRoaXMgdG8gZmFpbCBpZiwgZm9yIGV4YW1wbGUsIERTQSBtZW1vcnkgY2Fubm90CisJICogYmUg YWxsb2NhdGVkLiBJZiB0aGF0IGhhcHBlbnMsIHRoZSB3b3JrZXIgd2lsbCBkaWUsIHRoZSBwb3N0 bWFzdGVyIHdpbGwKKwkgKiBldmVudHVhbGx5IHJlc3RhcnQgaXQsIGFuZCB3ZSdsbCB0cnkgYWdh aW4gYWZ0ZXIgY2xlYXJpbmcgYW55IGRhdGEgdGhhdAorCSAqIHdlIGRpZCBtYW5hZ2UgdG8gcHV0 IGludG8gc2hhcmVkIG1lbW9yeS4gKE5vdGUgdGhhdCB3ZSBjYWxsCisJICogcGdzYV9yZXNldF9h bGxfc3Rhc2hlcygpIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbi4pCisJICovCisJcGdzYV9y ZXN0b3JlX3N0YXNoZXMoc2F2ZWRfc3Rhc2hlcyk7CisJcGdzYV9yZXN0b3JlX2VudHJpZXMoZW50 cmllcywgbnVtX2VudHJpZXMpOworCisJLyogSG9vcmF5LCBpdCB3b3JrZWQhIE5vdGlmeSB0aGUg dXNlci4gKi8KKwllcmVwb3J0KExPRywKKwkJCShlcnJtc2coImxvYWRlZCAlZCBhZHZpY2Ugc3Rh c2hlcyBhbmQgJWQgZW50cmllcyBmcm9tIFwiJXNcIiIsCisJCQkJCW51bV9zdGFzaGVzLCBudW1f ZW50cmllcywgUEdTQV9EVU1QX0ZJTEUpKSk7CisKKwkvKiBDbGVhbiB1cC4gKi8KKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7Cit9 CisKKy8qCisgKiBXcml0ZSBhbGwgYWR2aWNlIHN0YXNoIGRhdGEgdG8gZGlzay4KKyAqCisgKiBU aGUgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgVFNWIHdpdGggYSBsaW5lLXR5cGUgcHJlZml4Ogor ICogICBzdGFzaFx0c3Rhc2hfbmFtZQorICogICBlbnRyeVx0c3Rhc2hfbmFtZVx0cXVlcnlfaWRc dGFkdmljZV9zdHJpbmcKKyAqLworc3RhdGljIHZvaWQKK3Bnc2Ffd3JpdGVfdG9fZGlzayh2b2lk KQoreworCXBnc2Ffd3JpdGVyX2NvbnRleHQgd2N0eCA9IHswfTsKKwlNZW1vcnlDb250ZXh0IHRt cGN4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKworCUFzc2VydChwZ3NhX2VudHJ5X2RzaGFz aCAhPSBOVUxMKTsKKworCS8qIFVzZSBhIHRlbXBvcmFyeSBjb250ZXh0IHNvIGFsbCBhbGxvY2F0 aW9ucyBhcmUgZnJlZWQgYXQgdGhlIGVuZC4gKi8KKwl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJwZ19zdGFzaF9hZHZpY2Ug ZHVtcCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGN4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCisJLyogU2V0IHVwIHRoZSB3cml0ZXIgY29u dGV4dC4gKi8KKwlzbnByaW50Zih3Y3R4LnBhdGhuYW1lLCBNQVhQR1BBVEgsICIlcy50bXAiLCBQ R1NBX0RVTVBfRklMRSk7CisJd2N0eC5maWxlID0gQWxsb2NhdGVGaWxlKHdjdHgucGF0aG5hbWUs ICJ3Iik7CisJaWYgKCF3Y3R4LmZpbGUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVz XCI6ICVtIiwgd2N0eC5wYXRobmFtZSkpKTsKKwl3Y3R4Lm5oYXNoID0gcGdzYV9zdGFzaF9uYW1l X3RhYmxlX2NyZWF0ZSh0bXBjeHQsIDY0LCBOVUxMKTsKKwlpbml0U3RyaW5nSW5mbygmd2N0eC5i dWYpOworCisJLyogV3JpdGUgc3Rhc2ggbGluZXMsIHRoZW4gZW50cnkgbGluZXMuICovCisJcGdz YV93cml0ZV9zdGFzaGVzKCZ3Y3R4KTsKKwlwZ3NhX3dyaXRlX2VudHJpZXMoJndjdHgpOworCisJ LyoKKwkgKiBJZiBub3RoaW5nIHdhcyB3cml0dGVuLCByZW1vdmUgYm90aCB0aGUgdGVtcCBmaWxl IGFuZCBhbnkgZXhpc3RpbmcgZHVtcAorCSAqIGZpbGUgcmF0aGVyIHRoYW4gaW5zdGFsbGluZyBh IHplcm8tbGVuZ3RoIGZpbGUuCisJICovCisJaWYgKHdjdHgubmhhc2gtPm1lbWJlcnMgPT0gMCkK Kwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCWVycm1zZygidGhlcmUgYXJlIG5vIGFkdmljZSBz dGFzaGVzIHRvIHNhdmUiKSk7CisJCUZyZWVGaWxlKHdjdHguZmlsZSk7CisJCXVubGluayh3Y3R4 LnBhdGhuYW1lKTsKKwkJaWYgKHVubGluayhQR1NBX0RVTVBfRklMRSkgPT0gMCkKKwkJCWVyZXBv cnQoREVCVUcxLAorCQkJCQllcnJtc2coInJlbW92ZWQgXCIlc1wiIiwgUEdTQV9EVU1QX0ZJTEUp KTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKEZyZWVGaWxlKHdjdHguZmlsZSkgIT0gMCkKKwkJewor CQkJaW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOworCisJCQl1bmxpbmsod2N0eC5wYXRobmFtZSk7 CisJCQllcnJubyA9IHNhdmVfZXJybm87CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29k ZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IGNsb3NlIGZpbGUg XCIlc1wiOiAlbSIsCisJCQkJCQkJd2N0eC5wYXRobmFtZSkpKTsKKwkJfQorCQkodm9pZCkgZHVy YWJsZV9yZW5hbWUod2N0eC5wYXRobmFtZSwgUEdTQV9EVU1QX0ZJTEUsIEVSUk9SKTsKKworCQll cmVwb3J0KExPRywKKwkJCQllcnJtc2coInNhdmVkICVkIGFkdmljZSBzdGFzaGVzIGFuZCAlZCBl bnRyaWVzIHRvIFwiJXNcIiIsCisJCQkJCSAgIChpbnQpIHdjdHgubmhhc2gtPm1lbWJlcnMsIHdj dHguZW50cmllc193cml0dGVuLAorCQkJCQkgICBQR1NBX0RVTVBfRklMRSkpOworCX0KKworCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0 KTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgVFNWLWVzY2FwZWQgZm9ybSBvZiBzdHIgdG8gYnVm LgorICoKKyAqIEJhY2tzbGFzaCwgdGFiLCBuZXdsaW5lLCBhbmQgY2FycmlhZ2UgcmV0dXJuIGFy ZSBlc2NhcGVkIHdpdGggYmFja3NsYXNoCisgKiBzZXF1ZW5jZXMuICBBbGwgb3RoZXIgY2hhcmFj dGVycyBhcmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLgorICovCitzdGF0aWMgdm9pZAorcGdz YV9hcHBlbmRfdHN2X2VzY2FwZWRfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpz dHIpCit7CisJZm9yIChjb25zdCBjaGFyICpwID0gc3RyOyAqcCAhPSAnXDAnOyBwKyspCisJewor CQlzd2l0Y2ggKCpwKQorCQl7CisJCQljYXNlICdcXCc6CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsICJcXFxcIik7CisJCQkJYnJlYWs7CisJCQljYXNlICdcdCc6CisJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsICJcXHQiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1xuJzoK KwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxcbiIpOworCQkJCWJyZWFrOworCQkJ Y2FzZSAnXHInOgorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXFxyIik7CisJCQkJ YnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgKnApOwor CQkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogRXh0cmFjdCB0aGUgbmV4dCB0YWItZGVs aW1pdGVkIGZpZWxkIGZyb20gKmN1cnNvci4KKyAqCisgKiBUaGUgdGFiIGRlbGltaXRlciBpcyBy ZXBsYWNlZCB3aXRoICdcMCcgYW5kICpjdXJzb3IgaXMgYWR2YW5jZWQgcGFzdCBpdC4KKyAqIElm ICpjdXJzb3IgYWxyZWFkeSBwb2ludHMgdG8gJ1wwJyAobm8gbW9yZSBmaWVsZHMpLCByZXR1cm5z IE5VTEwuCisgKi8KK3N0YXRpYyBjaGFyICoKK3Bnc2FfbmV4dF90c3ZfZmllbGQoY2hhciAqKmN1 cnNvcikKK3sKKwljaGFyCSAgICpzdGFydCA9ICpjdXJzb3I7CisJY2hhcgkgICAqcCA9IHN0YXJ0 OworCisJaWYgKCpwID09ICdcMCcpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKCpwICE9ICdc MCcgJiYgKnAgIT0gJ1x0JykKKwkJcCsrOworCisJaWYgKCpwID09ICdcdCcpCisJCSpwKysgPSAn XDAnOworCisJKmN1cnNvciA9IHA7CisJcmV0dXJuIHN0YXJ0OworfQorCisvKgorICogSW5zZXJ0 IGVudHJpZXMgaW50byBzaGFyZWQgbWVtb3J5IGZyb20gdGhlIHBhcnNlZCBlbnRyeSBhcnJheS4K KyAqLworc3RhdGljIHZvaWQKK3Bnc2FfcmVzdG9yZV9lbnRyaWVzKHBnc2Ffc2F2ZWRfZW50cnkg KmVudHJpZXMsIGludCBudW1fZW50cmllcykKK3sKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRl LT5sb2NrLCBMV19TSEFSRUQpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkr KykKKwl7CisJCWVyZXBvcnQoREVCVUcyLAorCQkJCWVycm1zZygicmVzdG9yaW5nIGFkdmljZSBz dGFzaCBlbnRyeSBmb3IgXCIlc1wiLCBxdWVyeSBJRCAlIiBQUklkNjQsCisJCQkJCSAgIGVudHJp ZXNbaV0uc3Rhc2hfbmFtZSwgZW50cmllc1tpXS5xdWVyeUlkKSk7CisJCXBnc2Ffc2V0X2Fkdmlj ZV9zdHJpbmcoZW50cmllc1tpXS5zdGFzaF9uYW1lLAorCQkJCQkJCSAgIGVudHJpZXNbaV0ucXVl cnlJZCwKKwkJCQkJCQkgICBlbnRyaWVzW2ldLmFkdmljZV9zdHJpbmcpOworCX0KKwlMV0xvY2tS ZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIENyZWF0ZSBzdGFzaGVzIGlu IHNoYXJlZCBtZW1vcnkgZnJvbSB0aGUgcGFyc2VkIHN0YXNoIGhhc2ggdGFibGUuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ3NhX3Jlc3RvcmVfc3Rhc2hlcyhwZ3NhX3NhdmVkX3N0YXNoX3RhYmxlX2hh c2ggKnNhdmVkX3N0YXNoZXMpCit7CisJcGdzYV9zYXZlZF9zdGFzaF90YWJsZV9pdGVyYXRvciBp dGVyOworCXBnc2Ffc2F2ZWRfc3Rhc2ggKnM7CisKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRl LT5sb2NrLCBMV19FWENMVVNJVkUpOworCXBnc2Ffc2F2ZWRfc3Rhc2hfdGFibGVfc3RhcnRfaXRl cmF0ZShzYXZlZF9zdGFzaGVzLCAmaXRlcik7CisJd2hpbGUgKChzID0gcGdzYV9zYXZlZF9zdGFz aF90YWJsZV9pdGVyYXRlKHNhdmVkX3N0YXNoZXMsCisJCQkJCQkJCQkJCSAgICZpdGVyKSkgIT0g TlVMTCkKKwl7CisJCWVyZXBvcnQoREVCVUcyLAorCQkJCWVycm1zZygicmVzdG9yaW5nIGFkdmlj ZSBzdGFzaCBcIiVzXCIiLCBzLT5uYW1lKSk7CisJCXBnc2FfY3JlYXRlX3N0YXNoKHMtPm5hbWUp OworCX0KKwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIFVu ZXNjYXBlIGEgVFNWIGZpZWxkIGluIHBsYWNlLgorICoKKyAqIFJlY29nbml6ZWQgZXNjYXBlIHNl cXVlbmNlcyBhcmUgXFwsIFx0LCBcbiwgYW5kIFxyLiAgQSB0cmFpbGluZyBiYWNrc2xhc2gKKyAq IG9yIGFuIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2UgaXMgYSBzeW50YXggZXJyb3IuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3NhX3VuZXNjYXBlX3Rzdl9maWVsZChjaGFyICpzdHIsIGNvbnN0 IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBsaW5lbm8pCit7CisJY2hhcgkgICAqc3JjID0gc3Ry OworCWNoYXIJICAgKmRzdCA9IHN0cjsKKworCXdoaWxlICgqc3JjICE9ICdcMCcpCisJeworCQkv KiBKdXN0IHBhc3MgdGhyb3VnaCBhbnl0aGluZyB0aGF0J3Mgbm90IGEgYmFja3NsYXNoLWVzY2Fw ZS4gKi8KKwkJaWYgKGxpa2VseSgqc3JjICE9ICdcXCcpKQorCQl7CisJCQkqZHN0KysgPSAqc3Jj Kys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIENoZWNrIHdoYXQgc29ydCBvZiBlc2NhcGUg d2UndmUgZ290LiAqLworCQlzd2l0Y2ggKHNyY1sxXSkKKwkJeworCQkJY2FzZSAnXFwnOgorCQkJ CSpkc3QrKyA9ICdcXCc7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJCQkqZHN0KysgPSAn XHQnOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJKmRzdCsrID0gJ1xuJzsKKwkJCQli cmVhazsKKwkJCWNhc2UgJ3InOgorCQkJCSpkc3QrKyA9ICdccic7CisJCQkJYnJlYWs7CisJCQlj YXNlICdcMCc6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFU QV9DT1JSVVBURUQpLAorCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wi IGxpbmUgJXU6IHRyYWlsaW5nIGJhY2tzbGFzaCIsCisJCQkJCQkJCWZpbGVuYW1lLCBsaW5lbm8p KSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkJCSBlcnJtc2coInN5bnRheCBl cnJvciBpbiBmaWxlIFwiJXNcIiBsaW5lICV1OiB1bnJlY29nbml6ZWQgZXNjYXBlIFwiXFwlY1wi IiwKKwkJCQkJCQkJZmlsZW5hbWUsIGxpbmVubywgc3JjWzFdKSkpOworCQkJCWJyZWFrOworCQl9 CisKKwkJLyogV2UgY29uc3VtZWQgdGhlIGJhY2tzbGFzaCBhbmQgdGhlIGZvbGxvd2luZyBjaGFy YWN0ZXIuICovCisJCXNyYyArPSAyOworCX0KKwkqZHN0ID0gJ1wwJzsKK30KKworLyoKKyAqIFdy aXRlIGFuIGVudHJ5IGxpbmUgZm9yIGVhY2ggYWR2aWNlIGVudHJ5LgorICovCitzdGF0aWMgdm9p ZAorcGdzYV93cml0ZV9lbnRyaWVzKHBnc2Ffd3JpdGVyX2NvbnRleHQgKndjdHgpCit7CisJZHNo YXNoX3NlcV9zdGF0dXMgaXRlcjsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKworCWRzaGFzaF9zZXFf aW5pdCgmaXRlciwgcGdzYV9lbnRyeV9kc2hhc2gsIHRydWUpOworCXdoaWxlICgoZW50cnkgPSBk c2hhc2hfc2VxX25leHQoJml0ZXIpKSAhPSBOVUxMKQorCXsKKwkJcGdzYV9zdGFzaF9uYW1lICpu OworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nOworCisJCWlmIChlbnRyeS0+YWR2aWNlX3N0cmlu ZyA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJCWNvbnRpbnVlOworCisJCW4gPSBwZ3NhX3N0YXNo X25hbWVfdGFibGVfbG9va3VwKHdjdHgtPm5oYXNoLAorCQkJCQkJCQkJCSBlbnRyeS0+a2V5LnBn c2Ffc3Rhc2hfaWQpOworCQlpZiAobiA9PSBOVUxMKQorCQkJY29udGludWU7CQkJLyogb3JwaGFu IGVudHJ5LCBza2lwICovCisKKwkJYWR2aWNlX3N0cmluZyA9IGRzYV9nZXRfYWRkcmVzcyhwZ3Nh X2RzYV9hcmVhLCBlbnRyeS0+YWR2aWNlX3N0cmluZyk7CisKKwkJcmVzZXRTdHJpbmdJbmZvKCZ3 Y3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZ3Y3R4LT5idWYsICJlbnRyeVx0JXNcdCUi IFBSSWQ2NCAiXHQiLAorCQkJCQkJIG4tPm5hbWUsIGVudHJ5LT5rZXkucXVlcnlJZCk7CisJCXBn c2FfYXBwZW5kX3Rzdl9lc2NhcGVkX3N0cmluZygmd2N0eC0+YnVmLCBhZHZpY2Vfc3RyaW5nKTsK KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJndjdHgtPmJ1ZiwgJ1xuJyk7CisJCWZ3cml0ZSh3Y3R4 LT5idWYuZGF0YSwgMSwgd2N0eC0+YnVmLmxlbiwgd2N0eC0+ZmlsZSk7CisJCWlmIChmZXJyb3Io d2N0eC0+ZmlsZSkpCisJCQlwZ3NhX3dyaXRlX2Vycm9yKHdjdHgpOworCQl3Y3R4LT5lbnRyaWVz X3dyaXR0ZW4rKzsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyKTsKK30KKworLyoKKyAqIENs ZWFuIHVwIGFuZCByZXBvcnQgYSB3cml0ZSBlcnJvci4gIERvZXMgbm90IHJldHVybi4KKyAqLwor c3RhdGljIHZvaWQKK3Bnc2Ffd3JpdGVfZXJyb3IocGdzYV93cml0ZXJfY29udGV4dCAqd2N0eCkK K3sKKwlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87CisKKwlGcmVlRmlsZSh3Y3R4LT5maWxlKTsK Kwl1bmxpbmsod2N0eC0+cGF0aG5hbWUpOworCWVycm5vID0gc2F2ZV9lcnJubzsKKwllcmVwb3J0 KEVSUk9SLAorCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkgZXJybXNnKCJjb3Vs ZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCI6ICVtIiwgd2N0eC0+cGF0aG5hbWUpKSk7Cit9CisK Ky8qCisgKiBXcml0ZSBhIHN0YXNoIGxpbmUgZm9yIGVhY2ggYWR2aWNlIHN0YXNoLCBhbmQgcG9w dWxhdGUgdGhlIElELXRvLW5hbWUKKyAqIGhhc2ggdGFibGUgZm9yIHVzZSBieSBwZ3NhX3dyaXRl X2VudHJpZXMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX3dyaXRlX3N0YXNoZXMocGdzYV93cml0 ZXJfY29udGV4dCAqd2N0eCkKK3sKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyOworCXBnc2Ffc3Rh c2ggKnN0YXNoOworCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyLCBwZ3NhX3N0YXNoX2RzaGFzaCwg dHJ1ZSk7CisJd2hpbGUgKChzdGFzaCA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcikpICE9IE5VTEwp CisJeworCQlwZ3NhX3N0YXNoX25hbWUgKm47CisJCWJvb2wJCWZvdW5kOworCisJCW4gPSBwZ3Nh X3N0YXNoX25hbWVfdGFibGVfaW5zZXJ0KHdjdHgtPm5oYXNoLCBzdGFzaC0+cGdzYV9zdGFzaF9p ZCwKKwkJCQkJCQkJCQkgJmZvdW5kKTsKKwkJQXNzZXJ0KCFmb3VuZCk7CisJCW4tPm5hbWUgPSBw c3RyZHVwKHN0YXNoLT5uYW1lKTsKKworCQlyZXNldFN0cmluZ0luZm8oJndjdHgtPmJ1Zik7CisJ CWFwcGVuZFN0cmluZ0luZm8oJndjdHgtPmJ1ZiwgInN0YXNoXHQlc1xuIiwgbi0+bmFtZSk7CisJ CWZ3cml0ZSh3Y3R4LT5idWYuZGF0YSwgMSwgd2N0eC0+YnVmLmxlbiwgd2N0eC0+ZmlsZSk7CisJ CWlmIChmZXJyb3Iod2N0eC0+ZmlsZSkpCisJCQlwZ3NhX3dyaXRlX2Vycm9yKHdjdHgpOworCX0K Kwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXIpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFz aF9hZHZpY2UvdC8wMDFfcGVyc2lzdC5wbCBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3QvMDAx X3BlcnNpc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQxNDY2 MTY2NjAyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvdC8wMDFf cGVyc2lzdC5wbApAQCAtMCwwICsxLDg0IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ug d2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRu b2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7CisKKyRub2RlLT5p bml0OworJG5vZGUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLAorCXFxe3NoYXJl ZF9wcmVsb2FkX2xpYnJhcmllcyA9ICdwZ19wbGFuX2FkdmljZSwgcGdfc3Rhc2hfYWR2aWNlJwor cGdfc3Rhc2hfYWR2aWNlLnBlcnNpc3QgPSB0cnVlCitwZ19zdGFzaF9hZHZpY2UucGVyc2lzdF9p bnRlcnZhbCA9IDB9KTsKKyRub2RlLT5zdGFydDsKKworJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdy ZXMiLAorCQkiQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2U7XG4iKTsKKworIyBDcmVh dGUgdHdvIHN0YXNoZXM6IG9uZSB3aXRoIDIgZW50cmllcywgb25lIHdpdGggMSBlbnRyeS4KKyRu b2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwgcXF7CisJU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vf c3Rhc2goJ3N0YXNoX2EnKTsKKwlTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdzdGFzaF9h JywgMTAwMSwgJ0luZGV4U2Nhbih0KScpOworCVNFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2Uo J3N0YXNoX2EnLCAxMDAyLCBFJ2xpbmUxXFxubGluZTJcXHR0YWJcXFxcYmFja3NsYXNoJyk7CisJ U0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3N0YXNoX2InKTsKKwlTRUxFQ1QgcGdfc2V0 X3N0YXNoZWRfYWR2aWNlKCdzdGFzaF9iJywgMjAwMSwgJ1NlcVNjYW4odCknKTsKK30pOworCisj IFZlcmlmeSBiZWZvcmUgcmVzdGFydC4KK215ICRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCJw b3N0Z3JlcyIsCisJIlNFTEVDVCBzdGFzaF9uYW1lLCBudW1fZW50cmllcyBGUk9NIHBnX2dldF9h ZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWUiKTsKK2lzKCRyZXN1bHQsICJzdGFz aF9hfDJcbnN0YXNoX2J8MSIsICdzdGFzaGVzIHByZXNlbnQgYmVmb3JlIHJlc3RhcnQnKTsKKwor IyBSZXN0YXJ0IGFuZCB2ZXJpZnkgdGhlIGRhdGEgc3Vydml2ZWQuCiskbm9kZS0+cmVzdGFydDsK KyRub2RlLT53YWl0X2Zvcl9sb2coImxvYWRlZCAyIGFkdmljZSBzdGFzaGVzIGFuZCAzIGVudHJp ZXMiKTsKKworJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwKKwkiU0VMRUNU IHN0YXNoX25hbWUsIG51bV9lbnRyaWVzIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JE RVIgQlkgc3Rhc2hfbmFtZSIpOworaXMoJHJlc3VsdCwgInN0YXNoX2F8Mlxuc3Rhc2hfYnwxIiwg J3N0YXNoZXMgc3Vydml2ZWQgcmVzdGFydCcpOworCisjIFZlcmlmeSBlbnRyeSBjb250ZW50cywg aW5jbHVkaW5nIHRoZSBvbmUgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMuCiskcmVzdWx0ID0gJG5v ZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLAorCSJTRUxFQ1Qgc3Rhc2hfbmFtZSwgcXVlcnlfaWQs IGFkdmljZV9zdHJpbmcgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKE5VTEwpIE9S REVSIEJZIHN0YXNoX25hbWUsIHF1ZXJ5X2lkIik7CitpcygkcmVzdWx0LAorCSJzdGFzaF9hfDEw MDF8SW5kZXhTY2FuKHQpXG5zdGFzaF9hfDEwMDJ8bGluZTFcbmxpbmUyXHR0YWJcXGJhY2tzbGFz aFxuc3Rhc2hfYnwyMDAxfFNlcVNjYW4odCkiLAorCSdlbnRyeSBjb250ZW50cyBzdXJ2aXZlZCBy ZXN0YXJ0IHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGludGFjdCcpOworCisjIEFkZCBhIHRoaXJk IHN0YXNoIHdpdGggMCBlbnRyaWVzLgorJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLCBxcXsK KwlTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgnc3Rhc2hfYycpOworfSk7CisKKyMgUmVz dGFydCBhZ2FpbiBhbmQgdmVyaWZ5IGFsbCB0aHJlZSBzdGFzaGVzIGFyZSBwcmVzZW50LgorJG5v ZGUtPnJlc3RhcnQ7Ciskbm9kZS0+d2FpdF9mb3JfbG9nKCJsb2FkZWQgMyBhZHZpY2Ugc3Rhc2hl cyBhbmQgMyBlbnRyaWVzIik7CisKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCJwb3N0Z3Jl cyIsCisJIlNFTEVDVCBzdGFzaF9uYW1lLCBudW1fZW50cmllcyBGUk9NIHBnX2dldF9hZHZpY2Vf c3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWUiKTsKK2lzKCRyZXN1bHQsICJzdGFzaF9hfDJc bnN0YXNoX2J8MVxuc3Rhc2hfY3wwIiwgJ2FsbCB0aHJlZSBzdGFzaGVzIHN1cnZpdmVkIHNlY29u ZCByZXN0YXJ0Jyk7CisKKyMgRHJvcCBhbGwgc3Rhc2hlcyBhbmQgdmVyaWZ5IHRoZSBkdW1wIGZp bGUgaXMgcmVtb3ZlZCBhZnRlciByZXN0YXJ0LgorJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMi LCBxcXsKKwlTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3N0YXNoX2EnKTsKKwlTRUxFQ1Qg cGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3N0YXNoX2InKTsKKwlTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vf c3Rhc2goJ3N0YXNoX2MnKTsKK30pOworCiskbm9kZS0+cmVzdGFydDsKKworJHJlc3VsdCA9ICRu b2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwKKwkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfZ2V0 X2FkdmljZV9zdGFzaGVzKCkiKTsKK2lzKCRyZXN1bHQsICIwIiwgJ25vIHN0YXNoZXMgYWZ0ZXIg ZHJvcHBpbmcgYWxsIGFuZCByZXN0YXJ0aW5nJyk7CisKK29rKCEtZiAkbm9kZS0+ZGF0YV9kaXIg LiAnL3BnX3N0YXNoX2FkdmljZS50c3YnLAorCSdkdW1wIGZpbGUgcmVtb3ZlZCBhZnRlciBhbGwg c3Rhc2hlcyBkcm9wcGVkJyk7CisKKyRub2RlLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwv cGdzdGFzaGFkdmljZS5zZ21sCmluZGV4IGVjNjA1NTJhNDQ3Li44MTA3ODdmZTgxNCAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cGdzdGFzaGFkdmljZS5zZ21sCkBAIC0xNSwxMCArMTUsMTIgQEAKICAgPGxpbmsgbGlua2VuZD0i Z3VjLWNvbXB1dGUtcXVlcnktaWQiPnF1ZXJ5IGlkZW50aWZpZXJzPC9saW5rPiB0byBwbGFuIGFk dmljZQogICBzdHJpbmdzLiBXaGVuZXZlciBhIHNlc3Npb24gaXMgYXNrZWQgdG8gcGxhbiBhIHF1 ZXJ5IHdob3NlIHF1ZXJ5IElEIGFwcGVhcnMKICAgaW4gdGhlIHJlbGV2YW50IGFkdmljZSBzdGFz aCwgdGhlIHBsYW4gYWR2aWNlIHN0cmluZyBpcyBhdXRvbWF0aWNhbGx5IGFwcGxpZWQKLSAgdG8g Z3VpZGUgcGxhbm5pbmcuIE5vdGUgdGhhdCBhZHZpY2Ugc3Rhc2hlcyBleGlzdCBwdXJlbHkgaW4g bWVtb3J5LiBUaGlzCi0gIG1lYW5zIGJvdGggdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gYmUgbWlu ZGZ1bCBvZiBtZW1vcnkgY29uc3VtcHRpb24gd2hlbgotICBkZWNpZGluZyBob3cgbXVjaCBwbGFu IGFkdmljZSB0byBzdGFzaCwgYW5kIGFsc28gdGhhdCBhZHZpY2Ugc3Rhc2hlcyBtdXN0Ci0gIGJl IHJlY3JlYXRlZCBhbmQgcmVwb3B1bGF0ZWQgd2hlbmV2ZXIgdGhlIHNlcnZlciBpcyByZXN0YXJ0 ZWQuCisgIHRvIGd1aWRlIHBsYW5uaW5nLiBOb3RlIHRoYXQgYWR2aWNlIHN0YXNoZXMgYXJlIHN0 b3JlZCBpbiBkeW5hbWljYWxseQorICBhbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeS4gVGhpcyBtZWFu cyBib3RoIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGJlIG1pbmRmdWwKKyAgb2YgbWVtb3J5IGNv bnN1bXB0aW9uIHdoZW4gZGVjaWRpbmcgaG93IG11Y2ggcGxhbiBhZHZpY2UgdG8gc3Rhc2guCisg IE9wdGlvbmFsbHksIGFkdmljZSBzdGFzaGVzIGFuZCB0aGVpciBjb250ZW50cyBjYW4gYXV0b21h dGljYWxseSBiZSBwZXJzaXN0ZWQKKyAgdG8gZGlzayBhbmQgcmVsb2FkZWQgZnJvbSBkaXNrOyBz ZWUKKyAgPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNlLnBlcnNpc3Q8L2xpdGVyYWw+LCBiZWxvdy4K ICA8L3BhcmE+CiAKICA8cGFyYT4KQEAgLTE3NSw2ICsxNzcsMjggQEAKICAgICA8L2xpc3RpdGVt PgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+Cisg ICAgIDxmdW5jdGlvbj5wZ19zdGFydF9zdGFzaF9hZHZpY2Vfd29ya2VyKCkgcmV0dXJucyB2b2lk PC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX3N0YXJ0X3N0 YXNoX2FkdmljZV93b3JrZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVy bT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTdGFydHMgdGhlIGJhY2tn cm91bmQgd29ya2VyLCBzbyB0aGF0IGFkdmljZSBzdGFzaCBjb250ZW50cyBjYW4gYmUKKyAgICAg IGF1dG9tYXRpY2FsbHkgcGVyc2lzdGVkIHRvIGRpc2suICBJZiB0aGlzIG1vZHVsZSBpcyBpbmNs dWRlZCBpbgorICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLXNoYXJlZC1wcmVsb2FkLWxpYnJhcmll cyIvPiBhdCBzdGFydHVwIHRpbWUgd2l0aAorICAgICAgPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNl LnBlcnNpc3QgPSB0cnVlPC9saXRlcmFsPiwgdGhlIHdvcmtlciB3aWxsIGJlCisgICAgICBzdGFy dGVkIGF1dG9tYXRpY2FsbHkuIFdoZW4gc3RhcnRlZCBtYW51YWxseSwgdGhlIHdvcmtlciB3aWxs IG5vdCBsb2FkCisgICAgICBhbnl0aGluZyBmcm9tIGRpc2ssIGJ1dCBpdCB3aWxsIHN0aWxsIHBl cnNpc3QgZGF0YSB0byBkaXNrLiBZb3UgY2FuIHRoZW4KKyAgICAgIGNvbmZpZ3VyZSB0aGUgc2Vy dmVyIHRvIHN0YXJ0IHRoZSB3b3JrZXIgYXV0b21hdGljYWxseSBhZnRlciB0aGUgbmV4dAorICAg ICAgcmVzdGFydCwgcHJlc2VydmluZyBhbnkgc3Rhc2hlZCBhZHZpY2UgeW91IGFkZCBub3cuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgPC92 YXJpYWJsZWxpc3Q+CiAKICA8L3NlY3QyPgpAQCAtMTg0LDYgKzIwOCw0NCBAQAogCiAgIDx2YXJp YWJsZWxpc3Q+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1l PnBnX3N0YXNoX2FkdmljZS5wZXJzaXN0PC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4p CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19zdGFzaF9hZHZp Y2UucGVyc2lzdDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+Cisg ICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBh cmE+CisgICAgICBDb250cm9scyB3aGV0aGVyIHRoZSBhZHZpY2Ugc3Rhc2hlcyBhbmQgc3Rhc2gg ZW50cmllcyBzaG91bGQgYmUKKyAgICAgIHBlcnNpc3RlZCB0byBkaXNrLiBUaGlzIGlzIG9uIGJ5 IGRlZmF1bHQuIElmIGFueSBzdGFzaGVzIGFyZSBwZXJzaXN0ZWQsCisgICAgICBhIGZpbGUgbmFt ZWQgPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNlLnRzdjwvbGl0ZXJhbD4gd2lsbCBiZSBjcmVhdGVk IGluCisgICAgICB0aGUgZGF0YSBkaXJlY3RvcnkuIFN0YXNoZXMgYXJlIGxvYWRlZCBhbmQgc2F2 ZWQgdXNpbmcgYSBiYWNrZ3JvdW5kCisgICAgICB3b3JrZXIgcHJvY2Vzcy4gIFRoaXMgcGFyYW1l dGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3N0YXNoX2FkdmljZS5wZXJzaXN0X2ludGVydmFsPC92 YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8 cHJpbWFyeT48dmFybmFtZT5wZ19zdGFzaF9hZHZpY2UucGVyc2lzdF9pbnRlcnZhbDwvdmFybmFt ZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgor ICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTcGVjaWZp ZXMgdGhlIGludGVydmFsLCBpbiBzZWNvbmRzLCBiZXR3ZWVuIGNoZWNrcyBmb3IgY2hhbmdlcyB0 aGF0CisgICAgICBuZWVkIHRvIGJlIHdyaXR0ZW4gdG8gPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNl LnRzdjwvbGl0ZXJhbD4uIElmIHNldCB0bworICAgICAgemVybywgY2hhbmdlcyBhcmUgb25seSB3 cml0dGVuIHdoZW4gdGhlIHNlcnZlciBzaHV0cyBkb3duLiBUaGUgZGVmYXVsdAorICAgICAgdmFs dWUgaXMgPGxpdGVyYWw+MzA8L2xpdGVyYWw+LiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBz ZXQgaW4gdGhlCisgICAgICA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmls ZSBvciBvbiB0aGUgc2VydmVyIGNvbW1hbmQgbGluZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlz dGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVy bT4KICAgICAgPHZhcm5hbWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zhcm5hbWU+ICg8 dHlwZT5zdHJpbmc8L3R5cGU+KQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA4NDBmYTcz Njk4YS4uNjgzZjkxMDMzOTYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MDU2LDEw ICs0MDU2LDE0IEBAIHBncGFfdHJvdmVfc2xpY2UKIHBncGFfdW5yb2xsZWRfam9pbgogcGdzYV9l bnRyeQogcGdzYV9lbnRyeV9rZXkKK3Bnc2Ffc2F2ZWRfZW50cnkKK3Bnc2Ffc2F2ZWRfc3Rhc2gK K3Bnc2Ffc2F2ZWRfc3Rhc2hfdGFibGVfaGFzaAogcGdzYV9zaGFyZWRfc3RhdGUKIHBnc2Ffc3Rh c2gKIHBnc2Ffc3Rhc2hfY291bnQKIHBnc2Ffc3Rhc2hfbmFtZQorcGdzYV93cml0ZXJfY29udGV4 dAogcGdzb2NrZXQKIHBnc3FsX3RoaW5nX3QKIHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --000000000000f2fd36064e7c81fe Content-Type: application/octet-stream; name="v24-0001-Add-pg_stash_advice-contrib-module.patch" Content-Disposition: attachment; filename="v24-0001-Add-pg_stash_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnhocbo00 RnJvbSBkOGMyNDI4NjVkZGI4ZTQ5YTIwOTE5N2M5ZTMyNTc1NDYxZmJjNmJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjcgRmViIDIwMjYgMTY6NTg6MTQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyNCAx LzJdIEFkZCBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpUaGlzIG1vZHVsZSBhbGxv d3MgcGxhbiBhZHZpY2Ugc3RyaW5ncyB0byBiZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5CmZyb20g YW4gaW4tbWVtb3J5IGFkdmljZSBzdGFzaC4gQWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBk eW5hbWljCnNoYXJlZCBtZW1vcnkgYW5kIG11c3QgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRl ZCBhZnRlciBhIHNlcnZlcgpyZXN0YXJ0LiBJZiBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSBp cyBzZXQgdG8gdGhlIG5hbWUgb2YgYW4gYWR2aWNlCnN0YXNoLCBhbmQgaWYgcXVlcnkgaWRlbnRp ZmllcnMgYXJlIGVuYWJsZWQsIHRoZSBxdWVyeSBpZGVudGlmaWVyCmZvciBlYWNoIHF1ZXJ5IHdp bGwgYmUgbG9va2VkIHVwIGluIHRoZSBhZHZpY2Ugc3Rhc2ggYW5kIHRoZQphc3NvY2lhdGVkIGFk dmljZSBzdHJpbmcsIGlmIGFueSwgd2lsbCBiZSB1c2VkIGVhY2ggdGltZSB0aGF0IHF1ZXJ5Cmlz IHBsYW5uZWQuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2 aWV3ZWQtYnk6IEFsZXhhbmRyYSBXYW5nIDxhbGV4YW5kcmEud2FuZy5vc3NAZ21haWwuY29tPgpS ZXZpZXdlZC1ieTogRGF2aWQgRy4gSm9obnN0b24gPGRhdmlkLmcuam9obnN0b25AZ21haWwuY29t PgpSZXZpZXdlZC1ieTogSmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0YWtAZW50ZXJwcmlzZWRiLmNv bT4KLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx ICsKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlICAgICAgICAgICAgICB8ICAyNyAr CiAuLi4vZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dCAgICAgICAgICAgICAgfCAzMzQgKysr KysrKysrKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQgICAgICAgICAgIHwg IDM2ICsrCiAuLi4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAgfCAg NDMgKysKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jICAgICB8IDYw NSArKysrKysrKysrKysrKysrKysKIC4uLi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNl LmNvbnRyb2wgICB8ICAgNSArCiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZp Y2UuaCAgICAgfCAgOTkgKysrCiAuLi4vcGdfc3Rhc2hfYWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZp Y2Uuc3FsICAgfCAxNTAgKysrKysKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNoZnVuY3Mu YyAgICAgICAgICB8IDMwNyArKysrKysrKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCAgICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAg ICAgICAgICAgICAgIHwgMjE2ICsrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgICAgICB8ICAgNiArCiAxNSBmaWxlcyBjaGFuZ2VkLCAxODMyIGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmls ZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL2V4cGVjdGVkL3Bn X3N0YXNoX2FkdmljZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2Fk dmljZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hfYWR2 aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmNvbnRyb2wKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uu c3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3Rhc2hmdW5j cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbAoK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IGRk MDRjMjBhY2QyLi43ZDkxZmU3N2RiMyAxMDA2NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysg Yi9jb250cmliL01ha2VmaWxlCkBAIC0zNiw2ICszNiw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX292 ZXJleHBsYWluIFwKIAkJcGdfcGxhbl9hZHZpY2UgXAogCQlwZ19wcmV3YXJtCVwKKwkJcGdfc3Rh c2hfYWR2aWNlCVwKIAkJcGdfc3RhdF9zdGF0ZW1lbnRzIFwKIAkJcGdfc3VyZ2VyeQlcCiAJCXBn X3RyZ20JCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29u LmJ1aWxkCmluZGV4IDVhNzUyZWFjMzQ3Li5lYmI3ZjgzZDhjNSAxMDA2NDQKLS0tIGEvY29udHJp Yi9tZXNvbi5idWlsZAorKysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC01MSw2ICs1MSw3IEBA IHN1YmRpcigncGdfb3ZlcmV4cGxhaW4nKQogc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJk aXIoJ3BnX3ByZXdhcm0nKQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKK3N1YmRpcigncGdfc3Rhc2hf YWR2aWNlJykKIHN1YmRpcigncGdfc3RhdF9zdGF0ZW1lbnRzJykKIHN1YmRpcigncGdzdGF0dHVw bGUnKQogc3ViZGlyKCdwZ19zdXJnZXJ5JykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL01ha2VmaWxlIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY1MTUwZTE0ZTQxCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyNyBA QAorIyBjb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdf c3Rhc2hfYWR2aWNlCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19zdGFzaF9hZHZpY2Uu byBcCisJc3Rhc2hmdW5jcy5vCisKK0VYVEVOU0lPTiA9IHBnX3N0YXNoX2FkdmljZQorREFUQSA9 IHBnX3N0YXNoX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJwZ19zdGFzaF9hZHZpY2Ug LSBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZSIKKworUkVHUkVTUyA9 IHBnX3N0YXNoX2FkdmljZQorRVhUUkFfSU5TVEFMTCA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UK KworaWZkZWYgVVNFX1BHWFMKK1BHX0NQUEZMQUdTID0gLUkkKGluY2x1ZGVkaXJfc2VydmVyKS9l eHRlbnNpb24KK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09O RklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK1BHX0NQUEZMQUdTID0gLUkkKHRv cF9zcmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfc3Rh c2hfYWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikv c3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJp Yi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9l eHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0IGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhw ZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYmFmZTFlYmE1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXNo X2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0CkBAIC0wLDAgKzEsMzM0IEBACitD UkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2FkdmljZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0g b247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CistLSBIZWxwZXI6 IGV4dHJhY3QgcXVlcnkgaWRlbnRpZmllciBmcm9tIEVYUExBSU4gVkVSQk9TRSBvdXRwdXQuCitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBnZXRfcXVlcnlfaWQocXVlcnlfdGV4dCB0ZXh0KSBS RVRVUk5TIGJpZ2ludAorTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorREVDTEFSRQorICAgIGxpbmUg dGV4dDsKKyAgICBxaWQgYmlnaW50OworQkVHSU4KKyAgICBGT1IgbGluZSBJTiBFWEVDVVRFICdF WFBMQUlOIChWRVJCT1NFLCBGT1JNQVQgVEVYVCkgJyB8fCBxdWVyeV90ZXh0CisgICAgTE9PUAor ICAgICAgICBJRiBsaW5lIH4gJ1F1ZXJ5IElkZW50aWZpZXI6JyBUSEVOCisgICAgICAgICAgICBx aWQgOj0gcmVnZXhwX3JlcGxhY2UobGluZSwgJy4qUXVlcnkgSWRlbnRpZmllcjpccyooLT9cZCsp LionLCAnXDEnKTo6YmlnaW50OworICAgICAgICAgICAgUkVUVVJOIHFpZDsKKyAgICAgICAgRU5E IElGOworICAgIEVORCBMT09QOworICAgIFJBSVNFIEVYQ0VQVElPTiAnUXVlcnkgSWRlbnRpZmll ciBub3QgZm91bmQgaW4gRVhQTEFJTiBvdXRwdXQnOworRU5EOworJCQ7CitDUkVBVEUgVEFCTEUg YWFfZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBhYV9kaW0xIChp ZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAl IDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFla RSBhYV9kaW0xOworQ1JFQVRFIFRBQkxFIGFhX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXks IGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21l IGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2RpbTI7CitDUkVBVEUgVEFCTEUgYWFfZmFj dCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZl cmVuY2VzIGFhX2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNl cyBhYV9kaW0yIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5T RVJUIElOVE8gYWFfZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2ZhY3Q7CistLSBH ZXQgdGhlIHF1ZXJ5IGlkZW50aWZpZXIuCitTRUxFQ1QgZ2V0X3F1ZXJ5X2lkKCQkCitTRUxFQ1Qg KiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworJCQpIEFTIHFpZCBcZ3NldAorLS0gQ3JlYXRlIGFuIGFkdmlj ZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2aWNlIGF0IGl0LgorU0VMRUNUIHBnX2NyZWF0 ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKKyBwZ19jcmVhdGVfYWR2aWNlX3N0YXNo IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFVCBwZ19zdGFzaF9h ZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKKy0tIFJ1biBvdXIgdGVzdCBxdWVy eSBmb3IgdGhlIGZpcnN0IHRpbWUgd2l0aCBubyBzdGFzaGVkIGFkdmljZS4KK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gYWFfZmFjdCBmIExFRlQgSk9JTiBhYV9kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQp CisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5p ZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQor KDExIHJvd3MpCisKKy0tIEZvcmNlIGFuIGluZGV4IHNjYW4gb24gZGltMQorU0VMRUNUIHBnX3Nl dF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknSU5ERVhfU0NBTihk MSBhYV9kaW0xX3BrZXkpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBG Uk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0x X2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRp bTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgor ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWFfZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihkMSBhYV9kaW0xX3BrZXkpIC8qIG1hdGNoZWQgKi8KKygxMyByb3dzKQor CistLSBGb3JjZSBhbiBhbHRlcm5hdGl2ZSBqb2luIG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNo ZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidxaWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIp Jyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAK KygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgor CUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFh X2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9 IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBD b25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNo IENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9m YWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g YWFfZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAt PiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQxIGQyKSAvKiBtYXRjaGVkICovCisoMTMgcm93cykKKworLS0gRm9yY2UgYW4gYWx0 ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVn cmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVTVEVEX0xPT1BfUExBSU4oZDEpJyk7CisgcGdfc2V0 X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBh YV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04g Zi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBhYV9kaW0x X3BrZXkgb24gYWFfZGltMSBkMQorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW0xX2lk KQorICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBORVNURURfTE9PUF9QTEFJTihkMSkgLyogbWF0Y2hlZCAqLworKDEyIHJvd3MpCisKKy0tIEFk ZCBhIHVzZWxlc3MgZXh0cmEgZW50cnkgdG8gb3VyIHRlc3Qgc3Rhc2guIFNob3VsZG4ndCBjaGFu Z2UgdGhlIHJlc3VsdAorLS0gZnJvbSB0aGUgcHJldmlvdXMgdGVzdC4KKy0tIChJZiB3ZSdyZSB1 bmx1Y2t5IGVub3VnaCB0aGF0IHRoaXMgZXZlciBmYWlscyBkdWUgdG8gcXVlcnkgSUQgYWN0dWFs bHkKKy0tIGJlaW5nIDEsIHRoZW4ganVzdCBwdXQgc29tZSBvdGhlciBjb25zdGFudCBoZXJlLiBT ZWVtcyB1bmxpa2VseS4pCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0 YXNoJywgMSwgJ1NFUV9TQ0FOKGQxKScpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VM RUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQg PSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hF UkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAx KQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWFfZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltMV9pZCkKKyAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEp IC8qIG1hdGNoZWQgKi8KKygxMiByb3dzKQorCistLSBUcnkgYW4gZW1wdHkgc3Rhc2ggdG8gYmUg c3VyZSBpdCBkb2VzIG5vdGhpbmcKK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdy ZXNzX2VtcHR5X3N0YXNoJyk7CisgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25h bWUgPSAncmVncmVzc19lbXB0eV9zdGFzaCc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAq IEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGFhX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGlt MSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisoMTEgcm93cykKKworLS0g VGVzdCB0aGF0IHdlIGNhbiBsaXN0IGVhY2ggc3Rhc2ggaW5kaXZpZHVhbGx5IGFuZCBhbGwgb2Yg dGhlbSB0b2dldGhlciwKKy0tIGJ1dCBub3QgYSBub25leGlzdGVudCBzdGFzaC4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFtZTsKKyAgICAg c3Rhc2hfbmFtZSAgICAgIHwgbnVtX2VudHJpZXMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLQorIHJlZ3Jlc3NfZW1wdHlfc3Rhc2ggfCAgICAgICAgICAgMAorIHJlZ3Jlc3Nf c3Rhc2ggICAgICAgfCAgICAgICAgICAgMgorKDIgcm93cykKKworU0VMRUNUIHN0YXNoX25hbWUs IGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ3JlZ3Jl c3Nfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKyAgc3Rhc2hfbmFtZSAgIHwgICAgIGFkdmlj ZV9zdHJpbmcgICAgIAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg cmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQorIHJlZ3Jlc3Nfc3Rhc2ggfCBORVNURURfTE9P UF9QTEFJTihkMSkKKygyIHJvd3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5n CisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygncmVncmVzc19lbXB0eV9zdGFz aCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworIHN0YXNoX25hbWUgfCBhZHZpY2Vfc3RyaW5nIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworU0VMRUNUIHN0YXNoX25hbWUs IGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKE5VTEwp IE9SREVSIEJZIHF1ZXJ5X2lkOworICBzdGFzaF9uYW1lICAgfCAgICAgYWR2aWNlX3N0cmluZyAg ICAgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX3N0 YXNoIHwgU0VRX1NDQU4oZDEpCisgcmVncmVzc19zdGFzaCB8IE5FU1RFRF9MT09QX1BMQUlOKGQx KQorKDIgcm93cykKKworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBw Z19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdub19zdWNoX3N0YXNoJykgT1JERVIgQlkgcXVl cnlfaWQ7CitFUlJPUjogIGFkdmljZSBzdGFzaCAibm9fc3VjaF9zdGFzaCIgZG9lcyBub3QgZXhp c3QKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gcmVtb3ZlIGFkdmljZS4KK1NFTEVDVCBwZ19zZXRfc3Rh c2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCA6J3FpZCcsIG51bGwpOworIHBnX3NldF9zdGFz aGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFVCBw Z19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBP TiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9 IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlk KQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIu aWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBhYV9kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KygxMSByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVS IEJZIHN0YXNoX25hbWU7CisgICAgIHN0YXNoX25hbWUgICAgICB8IG51bV9lbnRyaWVzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX2VtcHR5X3N0YXNoIHwg ICAgICAgICAgIDAKKyByZWdyZXNzX3N0YXNoICAgICAgIHwgICAgICAgICAgIDEKKygyIHJvd3Mp CisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNl X3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CisgIHN0 YXNoX25hbWUgICB8IGFkdmljZV9zdHJpbmcgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQorKDEgcm93KQorCistLSBDYW4ndCBj cmVhdGUgYSBzdGFzaCB0aGF0IGFscmVhZHkgZXhpc3RzLCBvciBkcm9wIG9uZSB0aGF0IGRvZXNu J3QuCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19zdGFzaCcpOworRVJS T1I6ICBhZHZpY2Ugc3Rhc2ggInJlZ3Jlc3Nfc3Rhc2giIGFscmVhZHkgZXhpc3RzCitTRUxFQ1Qg cGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ25vX3N1Y2hfc3Rhc2gnKTsKK0VSUk9SOiAgYWR2aWNlIHN0 YXNoICJub19zdWNoX3N0YXNoIiBkb2VzIG5vdCBleGlzdAorLS0gQ2FuJ3QgYWRkIHRvIG9yIHJl bW92ZSBmcm9tIGEgc3Rhc2ggdGhhdCBkb2VzIG5vdCBleGlzdC4KK1NFTEVDVCBwZ19zZXRfc3Rh c2hlZF9hZHZpY2UoJ25vX3N1Y2hfc3Rhc2gnLCAxLCAnU0VRX1NDQU4odCknKTsKK0VSUk9SOiAg YWR2aWNlIHN0YXNoICJub19zdWNoX3N0YXNoIiBkb2VzIG5vdCBleGlzdAorU0VMRUNUIHBnX3Nl dF9zdGFzaGVkX2FkdmljZSgnbm9fc3VjaF9zdGFzaCcsIDEsIG51bGwpOworRVJST1I6ICBhZHZp Y2Ugc3Rhc2ggIm5vX3N1Y2hfc3Rhc2giIGRvZXMgbm90IGV4aXN0CistLSBDYW4ndCB1c2UgcXVl cnkgSUQgMC4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCAw LCAnU0VRX1NDQU4odCknKTsKK0VSUk9SOiAgY2Fubm90IHNldCBhZHZpY2Ugc3RyaW5nIGZvciBx dWVyeSBJRCAwCistLSBTdGFzaCBuYW1lcyBtdXN0IGJlIG5vbi1lbXB0eSwgQVNDSUksIGFuZCBu b3QgdG9vIGxvbmcsIGFuZCBtdXN0IGxvb2sKKy0tIGxpa2UgaWRlbnRpZmllcnMuCitTRUxFQ1Qg cGdfY3JlYXRlX2FkdmljZV9zdGFzaCgnJyk7CitFUlJPUjogIGFkdmljZSBzdGFzaCBuYW1lIG1h eSBub3QgYmUgemVybyBsZW5ndGgKK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhJyk7CitFUlJPUjogIGFkdmljZSBzdGFzaCBuYW1lcyBtYXkgbm90IGJlIGxvbmdlciB0aGFu IDYzIGJ5dGVzCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaChFJ2NhZlx1MDBlOScpOwor RVJST1I6ICBhZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFy YWN0ZXJzCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgnICAgJyk7CitFUlJPUjogIGFk dmljZSBzdGFzaCBuYW1lIG11c3QgYmVnaW4gd2l0aCBhIGxldHRlciBvciB1bmRlcnNjb3JlIGFu ZCBjb250YWluIG9ubHkgbGV0dGVycywgZGlnaXRzLCBhbmQgdW5kZXJzY29yZXMKK1NFVCBwZ19z dGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdjYWbDqSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUg Zm9yIHBhcmFtZXRlciAicGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUiOiAiY2Fmw6kiCitERVRB SUw6ICBhZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0 ZXJzCitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAnOTlib3R0bGVzJzsKK0VSUk9S OiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFt ZSI6ICI5OWJvdHRsZXMiCitERVRBSUw6ICBhZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IGJlZ2luIHdp dGggYSBsZXR0ZXIgb3IgdW5kZXJzY29yZSBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0 cywgYW5kIHVuZGVyc2NvcmVzCistLSBDbGVhbiB1cCBzdGF0ZSBpbiBkeW5hbWljIHNoYXJlZCBt ZW1vcnkuCitTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKKyBw Z19kcm9wX2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7Cisg cGdfZHJvcF9hZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkIGIvY29u dHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjY2NTVmOWFiNGYyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzNiBAQAorIyBDb3B5cmlnaHQg KGMpIDIwMjItMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdf c3Rhc2hfYWR2aWNlX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3BnX3N0YXNoX2FkdmljZS5jJywKKyAg J3N0YXNoZnVuY3MuYycKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3N0 YXNoX2FkdmljZV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0 cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICAnLS1GSUxF REVTQycsICdwZ19zdGFzaF9hZHZpY2UgLSBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBw bGFuIGFkdmljZScsXSkKK2VuZGlmCisKK3BnX3N0YXNoX2FkdmljZSA9IHNoYXJlZF9tb2R1bGUo J3BnX3N0YXNoX2FkdmljZScsCisgIHBnX3N0YXNoX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRl X2RpcmVjdG9yaWVzOiBbcGdfcGxhbl9hZHZpY2VfaW5jLCBpbmNsdWRlX2RpcmVjdG9yaWVzKCcu JyldLAorICBrd2FyZ3M6IGNvbnRyaWJfbW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0g cGdfc3Rhc2hfYWR2aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX3N0YXNoX2FkdmljZS0tMS4w LnNxbCcsCisgICdwZ19zdGFzaF9hZHZpY2UuY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9k YXRhX2FyZ3MsCispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAncGdfc3Rhc2hfYWR2aWNlJywK KyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJl bnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAncGdf c3Rhc2hfYWR2aWNlJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19z dGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0xLjAuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9h ZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi44OGRlZGQ4ZWYxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQzIEBACisv KiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwgKi8KKwor LS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlh IENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9h ZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY3Jl YXRlX2FkdmljZV9zdGFzaChzdGFzaF9uYW1lIHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RV TEVfUEFUSE5BTUUnLCAncGdfY3JlYXRlX2FkdmljZV9zdGFzaCcKK0xBTkdVQUdFIEMgU1RSSUNU OworCitDUkVBVEUgRlVOQ1RJT04gcGdfZHJvcF9hZHZpY2Vfc3Rhc2goc3Rhc2hfbmFtZSB0ZXh0 KQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2Ryb3BfYWR2aWNlX3N0 YXNoJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19zZXRfc3Rhc2hl ZF9hZHZpY2Uoc3Rhc2hfbmFtZSB0ZXh0LCBxdWVyeV9pZCBiaWdpbnQsCisJCQkJCQkJCQkgIGFk dmljZV9zdHJpbmcgdGV4dCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdw Z19zZXRfc3Rhc2hlZF9hZHZpY2UnCitMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gcGdf Z2V0X2FkdmljZV9zdGFzaGVzKAorCU9VVCBzdGFzaF9uYW1lIHRleHQsCisJT1VUIG51bV9lbnRy aWVzIGJpZ2ludAorKQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUn LCAncGdfZ2V0X2FkdmljZV9zdGFzaGVzJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBG VU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKAorCUlOT1VUIHN0YXNoX25hbWUg dGV4dCwKKwlPVVQgcXVlcnlfaWQgYmlnaW50LAorCU9VVCBhZHZpY2Vfc3RyaW5nIHRleHQKKykK K1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9hZHZp Y2Vfc3Rhc2hfY29udGVudHMnCitMQU5HVUFHRSBDOworCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9O IHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2godGV4dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9O IEZVTkNUSU9OIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKHRleHQpIEZST00gUFVCTElDOworUkVWT0tF IEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKHRleHQpIEZST00g UFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBG Uk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfc2V0X3N0YXNoZWRfYWR2aWNl KHRleHQsIGJpZ2ludCwgdGV4dCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNl L3BnX3N0YXNoX2FkdmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4xNWU3YWRmODQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNl L3BnX3N0YXNoX2FkdmljZS5jCkBAIC0wLDAgKzEsNjA1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBwZ19zdGFzaF9hZHZpY2UuYworICoJICBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBw Z19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2hhc2hm bi5oIgorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJub2Rlcy9xdWVyeWp1 bWJsZS5oIgorI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdfc3Rhc2hf YWR2aWNlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1 dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCitQR19NT0RVTEVfTUFH SUM7CisKKy8qIFNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMg ZHNoYXNoX3BhcmFtZXRlcnMgcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycyA9IHsKKwlOQU1F REFUQUxFTiwKKwlzaXplb2YocGdzYV9zdGFzaCksCisJZHNoYXNoX3N0cmNtcCwKKwlkc2hhc2hf c3RyaGFzaCwKKwlkc2hhc2hfc3RyY3B5LAorCUxXVFJBTkNIRV9JTlZBTElECQkJLyogZ2V0cyBz ZXQgYXQgcnVudGltZSAqLworfTsKKworc3RhdGljIGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2FfZW50 cnlfZHNoYXNoX3BhcmFtZXRlcnMgPSB7CisJc2l6ZW9mKHBnc2FfZW50cnlfa2V5KSwKKwlzaXpl b2YocGdzYV9lbnRyeSksCisJZHNoYXNoX21lbWNtcCwKKwlkc2hhc2hfbWVtaGFzaCwKKwlkc2hh c2hfbWVtY3B5LAorCUxXVFJBTkNIRV9JTlZBTElECQkJLyogZ2V0cyBzZXQgYXQgcnVudGltZSAq LworfTsKKworLyogR1VDIHZhcmlhYmxlICovCitzdGF0aWMgY2hhciAqcGdfc3Rhc2hfYWR2aWNl X3N0YXNoX25hbWUgPSAiIjsKKworLyogU2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLworcGdzYV9z aGFyZWRfc3RhdGUgKnBnc2Ffc3RhdGU7Citkc2FfYXJlYSAqcGdzYV9kc2FfYXJlYTsKK2RzaGFz aF90YWJsZSAqcGdzYV9zdGFzaF9kc2hhc2g7Citkc2hhc2hfdGFibGUgKnBnc2FfZW50cnlfZHNo YXNoOworCisvKiBPdGhlciBnbG9iYWwgdmFyaWFibGVzICovCitzdGF0aWMgTWVtb3J5Q29udGV4 dCBwZ19zdGFzaF9hZHZpY2VfbWN4dDsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3Rh dGljIGNoYXIgKnBnc2FfYWR2aXNvcihQbGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJICBRdWVy eSAqcGFyc2UsCisJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgaW50 IGN1cnNvck9wdGlvbnMsCisJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIGJvb2wg cGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCisJ CQkJCQkJCQkgIEd1Y1NvdXJjZSBzb3VyY2UpOworc3RhdGljIHZvaWQgcGdzYV9pbml0X3NoYXJl ZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZyk7CitzdGF0aWMgYm9vbCBwZ3NhX2lzX2lkZW50 aWZpZXIoY2hhciAqc3RyKTsKKworLyogU3Rhc2ggbmFtZSAtPiBzdGFzaCBJRCBoYXNoIHRhYmxl ICovCisjZGVmaW5lIFNIX1BSRUZJWCBwZ3NhX3N0YXNoX25hbWVfdGFibGUKKyNkZWZpbmUgU0hf RUxFTUVOVF9UWVBFIHBnc2Ffc3Rhc2hfbmFtZQorI2RlZmluZSBTSF9LRVlfVFlQRSB1aW50NjQK KyNkZWZpbmUgU0hfS0VZIHBnc2Ffc3Rhc2hfaWQKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtl eSkgaGFzaF9ieXRlcygoY29uc3QgdW5zaWduZWQgY2hhciAqKSAmKGtleSksIHNpemVvZih1aW50 NjQpKQorI2RlZmluZSBTSF9FUVVBTCh0YiwgYSwgYikgKGEgPT0gYikKKyNkZWZpbmUgU0hfU0NP UEUgZXh0ZXJuCisjZGVmaW5lIFNIX0RFRklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgi CisKKy8qCisgKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2 b2lkKQoreworCXZvaWQJCSgqYWRkX2Fkdmlzb3JfZm4pIChwZ19wbGFuX2FkdmljZV9hZHZpc29y X2hvb2sgaG9vayk7CisKKwkvKiBJZiBjb21wdXRlX3F1ZXJ5X2lkID0gJ2F1dG8nLCB3ZSB3b3Vs ZCBsaWtlIHF1ZXJ5IElEcy4gKi8KKwlFbmFibGVRdWVyeUlkKCk7CisKKwkvKiBEZWZpbmUgb3Vy IEdVQ3MuICovCisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX3N0YXNoX2FkdmljZS5z dGFzaF9uYW1lIiwKKwkJCQkJCQkgICAiTmFtZSBvZiB0aGUgYWR2aWNlIHN0YXNoIHRvIGJlIHVz ZWQgaW4gdGhpcyBzZXNzaW9uLiIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmcGdfc3Rh c2hfYWR2aWNlX3N0YXNoX25hbWUsCisJCQkJCQkJICAgIiIsCisJCQkJCQkJICAgUEdDX1VTRVJT RVQsCisJCQkJCQkJICAgMCwKKwkJCQkJCQkgICBwZ3NhX2NoZWNrX3N0YXNoX25hbWVfZ3VjLAor CQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2 ZWQoInBnX3N0YXNoX2FkdmljZSIpOworCisJLyogVGVsbCBwZ19wbGFuX2FkdmljZSB0aGF0IHdl IHdhbnQgdG8gcHJvdmlkZSBhZHZpY2Ugc3RyaW5ncy4gKi8KKwlhZGRfYWR2aXNvcl9mbiA9CisJ CWxvYWRfZXh0ZXJuYWxfZnVuY3Rpb24oInBnX3BsYW5fYWR2aWNlIiwgInBnX3BsYW5fYWR2aWNl X2FkZF9hZHZpc29yIiwKKwkJCQkJCQkgICB0cnVlLCBOVUxMKTsKKwkoKmFkZF9hZHZpc29yX2Zu KSAocGdzYV9hZHZpc29yKTsKK30KKworLyoKKyAqIEdldCB0aGUgYWR2aWNlIHN0cmluZyB0aGF0 IGhhcyBiZWVuIGNvbmZpZ3VyZWQgZm9yIHRoaXMgcXVlcnksIGlmIGFueSwKKyAqIGFuZCByZXR1 cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBjaGFyICoKK3Bnc2Ff YWR2aXNvcihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCSBFeHBsYWluU3RhdGUgKmVz KQoreworCXBnc2FfZW50cnlfa2V5IGtleTsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwljaGFyCSAg ICphZHZpY2Vfc3RyaW5nOworCXVpbnQ2NAkJc3Rhc2hfaWQ7CisKKwkvKgorCSAqIEV4aXQgcXVp Y2tseSBpZiB0aGUgc3Rhc2ggbmFtZSBpcyBlbXB0eSBvciB0aGVyZSdzIG5vIHF1ZXJ5IElELgor CSAqLworCWlmIChwZ19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZVswXSA9PSAnXDAnIHx8IHBhcnNl LT5xdWVyeUlkID09IDApCisJCXJldHVybiBOVUxMOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMg c2hhcmVkIG1lbW9yeSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3Nh X2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8qCisJICogVHJh bnNsYXRlIHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lIHRvIGFuIGludGVnZXIgSUQuCisJICoK KwkgKiBwZ3NhX2NoZWNrX3N0YXNoX25hbWVfZ3VjKCkgaGFzIGFscmVhZHkgdmFsaWRhdGVkIHRo ZSBhZHZpY2Ugc3Rhc2gKKwkgKiBuYW1lLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgcGdzYV9j aGVja19zdGFzaF9uYW1lKCkgaGVyZS4KKwkgKi8KKwlzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0 YXNoX2lkKHBnX3N0YXNoX2FkdmljZV9zdGFzaF9uYW1lKTsKKwlpZiAoc3Rhc2hfaWQgPT0gMCkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIExvb2sgdXAgdGhlIGFkdmljZSBzdHJpbmcgZm9y IHRoZSBnaXZlbiBzdGFzaCBJRCArIHF1ZXJ5IElELgorCSAqCisJICogSWYgd2UgZmluZCBhbiBh ZHZpY2Ugc3RyaW5nLCB3ZSBjb3B5IGl0IGludG8gdGhlIGN1cnJlbnQgbWVtb3J5CisJICogY29u dGV4dCwgcHJlc3VtYWJseSBzaG9ydC1saXZlZCwgc28gdGhhdCB3ZSBjYW4gcmVsZWFzZSB0aGUg bG9jayBvbiB0aGUKKwkgKiBkc2hhc2ggZW50cnkuIHBnX3BsYW5fYWR2aWNlIG9ubHkgbmVlZHMg dGhlIHZhbHVlIHRvIHJlbWFpbiBhbGxvY2F0ZWQKKwkgKiBsb25nIGVub3VnaCBmb3IgaXQgdG8g YmUgcGFyc2VkLCBzbyB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKi8KKwltZW1zZXQo JmtleSwgMCwgc2l6ZW9mKHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBz dGFzaF9pZDsKKwlrZXkucXVlcnlJZCA9IHBhcnNlLT5xdWVyeUlkOworCWVudHJ5ID0gZHNoYXNo X2ZpbmQocGdzYV9lbnRyeV9kc2hhc2gsICZrZXksIGZhbHNlKTsKKwlpZiAoZW50cnkgPT0gTlVM TCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGVudHJ5LT5hZHZpY2Vfc3RyaW5nID09IEludmFsaWRE c2FQb2ludGVyKQorCQlhZHZpY2Vfc3RyaW5nID0gTlVMTDsKKwllbHNlCisJCWFkdmljZV9zdHJp bmcgPSBwc3RyZHVwKGRzYV9nZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkJ ZW50cnktPmFkdmljZV9zdHJpbmcpKTsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2FfZW50cnlf ZHNoYXNoLCBlbnRyeSk7CisKKwkvKiBJZiB3ZSBmb3VuZCBhbiBhZHZpY2Ugc3RyaW5nLCBlbWl0 IGEgZGVidWcgbWVzc2FnZS4gKi8KKwlpZiAoYWR2aWNlX3N0cmluZyAhPSBOVUxMKQorCQllbG9n KERFQlVHMiwgInN1cHBseWluZyBhdXRvbWF0aWMgYWR2aWNlIGZvciBzdGFzaCBcIiVzXCIsIHF1 ZXJ5IElEICUiIFBSSWQ2NCAiOiAlcyIsCisJCQkgcGdfc3Rhc2hfYWR2aWNlX3N0YXNoX25hbWUs IGtleS5xdWVyeUlkLCBhZHZpY2Vfc3RyaW5nKTsKKworCXJldHVybiBhZHZpY2Vfc3RyaW5nOwor fQorCisvKgorICogQXR0YWNoIHRvIHZhcmlvdXMgc3RydWN0dXJlcyBpbiBkeW5hbWljIHNoYXJl ZCBtZW1vcnkuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSByZXNpbGll bnQgYWdhaW5zdCBlcnJvcnMuIFRoYXQgaXMsIGlmIGl0CisgKiBmYWlscyBwYXJ0d2F5IHRocm91 Z2gsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBjYWxsIGl0IGFnYWluLCByZXBlYXQgbm8KKyAq IHdvcmsgYWxyZWFkeSBjb21wbGV0ZWQsIGFuZCBwb3RlbnRpYWxseSBzdWNjZWVkIG9yIGF0IGxl YXN0IGdldCBmdXJ0aGVyIGlmCisgKiB3aGF0ZXZlciBjYXVzZWQgdGhlIHByZXZpb3VzIGZhaWx1 cmUgaGFzIGJlZW4gY29ycmVjdGVkLgorICovCit2b2lkCitwZ3NhX2F0dGFjaCh2b2lkKQorewor CWJvb2wJCWZvdW5kOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qCisJICogQ3Jl YXRlIGEgbWVtb3J5IGNvbnRleHQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbnRyb2wgc3RydWN0 dXJlcworCSAqIGFsbG9jYXRlZCBpbiBsb2NhbCBtZW1vcnkgYXJlIHN1ZmZpY2llbnRseSBwZXJz aXN0ZW50LgorCSAqLworCWlmIChwZ19zdGFzaF9hZHZpY2VfbWN4dCA9PSBOVUxMKQorCQlwZ19z dGFzaF9hZHZpY2VfbWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0 LAorCQkJCQkJCQkJCQkJCSAicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJCQkJCQkJCQkgQUxMT0NT RVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhw Z19zdGFzaF9hZHZpY2VfbWN4dCk7CisKKwkvKiBBdHRhY2ggdG8gdGhlIGZpeGVkLXNpemUgc3Rh dGUgb2JqZWN0IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJaWYgKHBnc2Ffc3RhdGUgPT0gTlVM TCkKKwkJcGdzYV9zdGF0ZSA9IEdldE5hbWVkRFNNU2VnbWVudCgicGdfc3Rhc2hfYWR2aWNlIiwK KwkJCQkJCQkJCQlzaXplb2YocGdzYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCQkJCXBnc2FfaW5p dF9zaGFyZWRfc3RhdGUsCisJCQkJCQkJCQkJJmZvdW5kLCBOVUxMKTsKKworCS8qIEF0dGFjaCB0 byB0aGUgRFNBIGFyZWEgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9kc2FfYXJl YSA9PSBOVUxMKQorCXsKKwkJZHNhX2hhbmRsZQlhcmVhX2hhbmRsZTsKKworCQlMV0xvY2tBY3F1 aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCQlhcmVhX2hhbmRsZSA9IHBn c2Ffc3RhdGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFMSUQp CisJCXsKKwkJCXBnc2FfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHBnc2Ffc3RhdGUtPmRzYV90cmFu Y2hlKTsKKwkJCWRzYV9waW4ocGdzYV9kc2FfYXJlYSk7CisJCQlwZ3NhX3N0YXRlLT5hcmVhID0g ZHNhX2dldF9oYW5kbGUocGdzYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0 YXRlLT5sb2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3Rh dGUtPmxvY2spOworCQkJcGdzYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOwor CQl9CisJCWRzYV9waW5fbWFwcGluZyhwZ3NhX2RzYV9hcmVhKTsKKwl9CisKKwkvKiBBdHRhY2gg dG8gdGhlIHN0YXNoX25hbWUtPnN0YXNoX2lkIGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9u ZS4gKi8KKwlpZiAocGdzYV9zdGFzaF9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJs ZV9oYW5kbGUgc3Rhc2hfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxv Y2ssIExXX0VYQ0xVU0lWRSk7CisJCXBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNo ZV9pZCA9IHBnc2Ffc3RhdGUtPnN0YXNoX3RyYW5jaGU7CisJCXN0YXNoX2hhbmRsZSA9IHBnc2Ff c3RhdGUtPnN0YXNoX2hhc2g7CisJCWlmIChzdGFzaF9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9J TlZBTElEKQorCQl7CisJCQlwZ3NhX3N0YXNoX2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9k c2FfYXJlYSwKKwkJCQkJCQkJCQkJICAmcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycywKKwkJ CQkJCQkJCQkJICBOVUxMKTsKKwkJCXBnc2Ffc3RhdGUtPnN0YXNoX2hhc2ggPQorCQkJCWRzaGFz aF9nZXRfaGFzaF90YWJsZV9oYW5kbGUocGdzYV9zdGFzaF9kc2hhc2gpOworCQkJTFdMb2NrUmVs ZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxl YXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJCXBnc2Ffc3Rhc2hfZHNoYXNoID0gZHNoYXNoX2F0 dGFjaChwZ3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX3N0YXNoX2RzaGFzaF9wYXJh bWV0ZXJzLAorCQkJCQkJCQkJCQkgIHN0YXNoX2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkv KiBBdHRhY2ggdG8gdGhlIGVudHJ5IGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8K KwlpZiAocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5k bGUgZW50cnlfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExX X0VYQ0xVU0lWRSk7CisJCXBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9 IHBnc2Ffc3RhdGUtPmVudHJ5X3RyYW5jaGU7CisJCWVudHJ5X2hhbmRsZSA9IHBnc2Ffc3RhdGUt PmVudHJ5X2hhc2g7CisJCWlmIChlbnRyeV9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElE KQorCQl7CisJCQlwZ3NhX2VudHJ5X2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJl YSwKKwkJCQkJCQkJCQkJICAmcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJ CQkJICBOVUxMKTsKKwkJCXBnc2Ffc3RhdGUtPmVudHJ5X2hhc2ggPQorCQkJCWRzaGFzaF9nZXRf aGFzaF90YWJsZV9oYW5kbGUocGdzYV9lbnRyeV9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgm cGdzYV9zdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZw Z3NhX3N0YXRlLT5sb2NrKTsKKwkJCXBnc2FfZW50cnlfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChw Z3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJz LAorCQkJCQkJCQkJCQkgIGVudHJ5X2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBSZXN0 b3JlIHByZXZpb3VzIG1lbW9yeSBjb250ZXh0LiAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gYWR2aWNlIHN0YXNoIG5h bWUgaXMgbGVnYWwsIGFuZCBzaWduYWwgYW4gZXJyb3IgaWYgbm90LgorICoKKyAqIEtlZXAgdGhp cyBpbiBzeW5jIHdpdGggcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YywgYmVsb3cuCisgKi8KK3Zv aWQKK3Bnc2FfY2hlY2tfc3Rhc2hfbmFtZShjaGFyICpzdGFzaF9uYW1lKQoreworCS8qIFJlamVj dCBlbXB0eSBhZHZpY2Ugc3Rhc2ggbmFtZS4gKi8KKwlpZiAoc3Rhc2hfbmFtZVswXSA9PSAnXDAn KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZSBtYXkgbm90IGJlIHplcm8g bGVuZ3RoIikpOworCisJLyogUmVqZWN0IG92ZXJsb25nIGFkdmljZSBzdGFzaCBuYW1lcy4gKi8K KwlpZiAoc3RybGVuKHN0YXNoX25hbWUpICsgMSA+IE5BTUVEQVRBTEVOKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ ZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZXMgbWF5IG5vdCBiZSBsb25nZXIgdGhhbiAlZCBieXRl cyIsCisJCQkJCSAgIE5BTUVEQVRBTEVOIC0gMSkpOworCisJLyoKKwkgKiBSZWplY3Qgbm9uLUFT Q0lJIGFkdmljZSBzdGFzaCBuYW1lcywgc2luY2UgYWR2aWNlIHN0YXNoZXMgYXJlIHZpc2libGUK KwkgKiBhY3Jvc3MgYWxsIGRhdGFiYXNlcyBhbmQgdGhlIGVuY29kaW5ncyBvZiB0aG9zZSBkYXRh YmFzZXMgbWlnaHQgZGlmZmVyLgorCSAqLworCWlmICghcGdfaXNfYXNjaWkoc3Rhc2hfbmFtZSkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBuYW1lIG11c3Qgbm90IGNvbnRhaW4g bm9uLUFTQ0lJIGNoYXJhY3RlcnMiKSk7CisKKwkvKgorCSAqIFJlamVjdCB0aGluZ3MgdGhhdCBk byBub3QgbG9vayBsaWtlIGlkZW50aWZpZXJzLCBzaW5jZSB0aGUgYWJpbGl0eSB0bworCSAqIGNy ZWF0ZSBhbiBhZHZpY2Ugc3Rhc2ggd2l0aCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgb3Igd2Vp cmQgc3ltYm9scworCSAqIGluIHRoZSBuYW1lIGlzIG5vdCBsaWtlbHkgdG8gYmUgdXNlZnVsIHRv IGFueW9uZS4KKwkgKi8KKwlpZiAoIXBnc2FfaXNfaWRlbnRpZmllcihzdGFzaF9uYW1lKSkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIG5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0 dGVyIG9yIHVuZGVyc2NvcmUgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1 bmRlcnNjb3JlcyIpKTsKK30KKworLyoKKyAqIEFzIGFib3ZlLCBidXQgZm9yIHRoZSBHVUMgY2hl Y2tfaG9vay4gV2UgYWxsb3cgdGhlIGVtcHR5IHN0cmluZyBoZXJlLAorICogdGhvdWdoLCBhcyBl cXVpdmFsZW50IHRvIGRpc2FibGluZyB0aGUgZmVhdHVyZS4KKyAqLworc3RhdGljIGJvb2wKK3Bn c2FfY2hlY2tfc3Rhc2hfbmFtZV9ndWMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNT b3VyY2Ugc291cmNlKQoreworCWNoYXIJICAgKnN0YXNoX25hbWUgPSAqbmV3dmFsOworCisJLyog UmVqZWN0IG92ZXJsb25nIGFkdmljZSBzdGFzaCBuYW1lcy4gKi8KKwlpZiAoc3RybGVuKHN0YXNo X25hbWUpICsgMSA+IE5BTUVEQVRBTEVOKQorCXsKKwkJR1VDX2NoZWNrX2VycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSk7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoImFkdmlj ZSBzdGFzaCBuYW1lcyBtYXkgbm90IGJlIGxvbmdlciB0aGFuICVkIGJ5dGVzIiwKKwkJCQkJCQlO QU1FREFUQUxFTiAtIDEpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBSZWplY3Qg bm9uLUFTQ0lJIGFkdmljZSBzdGFzaCBuYW1lcywgc2luY2UgYWR2aWNlIHN0YXNoZXMgYXJlIHZp c2libGUKKwkgKiBhY3Jvc3MgYWxsIGRhdGFiYXNlcyBhbmQgdGhlIGVuY29kaW5ncyBvZiB0aG9z ZSBkYXRhYmFzZXMgbWlnaHQgZGlmZmVyLgorCSAqLworCWlmICghcGdfaXNfYXNjaWkoc3Rhc2hf bmFtZSkpCisJeworCQlHVUNfY2hlY2tfZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKTsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiYWR2aWNlIHN0YXNoIG5hbWUgbXVzdCBu b3QgY29udGFpbiBub24tQVNDSUkgY2hhcmFjdGVycyIpOworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJLyoKKwkgKiBSZWplY3QgdGhpbmdzIHRoYXQgZG8gbm90IGxvb2sgbGlrZSBpZGVudGlmaWVy cywgc2luY2UgdGhlIGFiaWxpdHkgdG8KKwkgKiBjcmVhdGUgYW4gYWR2aWNlIHN0YXNoIHdpdGgg bm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIG9yIHdlaXJkIHN5bWJvbHMKKwkgKiBpbiB0aGUgbmFt ZSBpcyBub3QgbGlrZWx5IHRvIGJlIHVzZWZ1bCB0byBhbnlvbmUuCisJICovCisJaWYgKCFwZ3Nh X2lzX2lkZW50aWZpZXIoc3Rhc2hfbmFtZSkpCisJeworCQlHVUNfY2hlY2tfZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKTsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiYWR2 aWNlIHN0YXNoIG5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUgYW5k IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1bmRlcnNjb3JlcyIpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBDcmVhdGUgYW4gYWR2 aWNlIHN0YXNoLgorICovCit2b2lkCitwZ3NhX2NyZWF0ZV9zdGFzaChjaGFyICpzdGFzaF9uYW1l KQoreworCXBnc2Ffc3Rhc2ggKnN0YXNoOworCWJvb2wJCWZvdW5kOworCisJQXNzZXJ0KExXTG9j a0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpKTsKKworCS8q IENyZWF0ZSBhIHN0YXNoIHdpdGggdGhpcyBuYW1lLCB1bmxlc3Mgb25lIGFscmVhZHkgZXhpc3Rz LiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KHBnc2Ffc3Rhc2hfZHNoYXNoLCBz dGFzaF9uYW1lLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2 aWNlIHN0YXNoIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsIHN0YXNoX25hbWUpKTsKKwlzdGFzaC0+ cGdzYV9zdGFzaF9pZCA9IHBnc2Ffc3RhdGUtPm5leHRfc3Rhc2hfaWQrKzsKKwlkc2hhc2hfcmVs ZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7Cit9CisKKy8qCisgKiBSZW1vdmUg YW55IHN0b3JlZCBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFuZCBx dWVyeSBJRC4KKyAqLwordm9pZAorcGdzYV9jbGVhcl9hZHZpY2Vfc3RyaW5nKGNoYXIgKnN0YXNo X25hbWUsIGludDY0IHF1ZXJ5SWQpCit7CisJcGdzYV9lbnRyeSAqZW50cnk7CisJcGdzYV9lbnRy eV9rZXkga2V5OworCXVpbnQ2NAkJc3Rhc2hfaWQ7CisJZHNhX3BvaW50ZXIgb2xkX2RwOworCisJ QXNzZXJ0KExXTG9ja0hlbGRCeU1lKCZwZ3NhX3N0YXRlLT5sb2NrKSk7CisKKwkvKiBUcmFuc2xh dGUgdGhlIHN0YXNoIG5hbWUgdG8gYW4gaW50ZWdlciBJRC4gKi8KKwlpZiAoKHN0YXNoX2lkID0g cGdzYV9sb29rdXBfc3Rhc2hfaWQoc3Rhc2hfbmFtZSkpID09IDApCisJCWVyZXBvcnQoRVJST1Is CisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJt c2coImFkdmljZSBzdGFzaCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisK KwkvKgorCSAqIExvb2sgZm9yIGFuIGV4aXN0aW5nIGVudHJ5LCBhbmQgZnJlZSBpdC4gQnV0LCBi ZSBzdXJlIHRvIHNhdmUgdGhlCisJICogcG9pbnRlciB0byB0aGUgYXNzb2NpYXRlZCBhZHZpY2Ug c3RyaW5nLCBpZiBhbnkuCisJICovCisJbWVtc2V0KCZrZXksIDAsIHNpemVvZihwZ3NhX2VudHJ5 X2tleSkpOworCWtleS5wZ3NhX3N0YXNoX2lkID0gc3Rhc2hfaWQ7CisJa2V5LnF1ZXJ5SWQgPSBx dWVyeUlkOworCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzYV9lbnRyeV9kc2hhc2gsICZrZXksIHRy dWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlvbGRfZHAgPSBJbnZhbGlkRHNhUG9pbnRlcjsK KwllbHNlCisJeworCQlvbGRfZHAgPSBlbnRyeS0+YWR2aWNlX3N0cmluZzsKKwkJZHNoYXNoX2Rl bGV0ZV9lbnRyeShwZ3NhX2VudHJ5X2RzaGFzaCwgZW50cnkpOworCX0KKworCS8qIE5vdyB3ZSBm cmVlIHRoZSBhZHZpY2Ugc3RyaW5nIGFzIHdlbGwsIGlmIHRoZXJlIHdhcyBvbmUuICovCisJaWYg KG9sZF9kcCAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwg b2xkX2RwKTsKK30KKworLyoKKyAqIERyb3AgYW4gYWR2aWNlIHN0YXNoLgorICovCit2b2lkCitw Z3NhX2Ryb3Bfc3Rhc2goY2hhciAqc3Rhc2hfbmFtZSkKK3sKKwlwZ3NhX2VudHJ5ICplbnRyeTsK KwlwZ3NhX3N0YXNoICpzdGFzaDsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwl1aW50 NjQJCXN0YXNoX2lkOworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0YXRl LT5sb2NrLCBMV19FWENMVVNJVkUpKTsKKworCS8qIFJlbW92ZSB0aGUgZW50cnkgZm9yIHRoaXMg YWR2aWNlIHN0YXNoLiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmQocGdzYV9zdGFzaF9kc2hhc2gs IHN0YXNoX25hbWUsIHRydWUpOworCWlmIChzdGFzaCA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJy bXNnKCJhZHZpY2Ugc3Rhc2ggXCIlc1wiIGRvZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOwor CXN0YXNoX2lkID0gc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQ7CisJZHNoYXNoX2RlbGV0ZV9lbnRyeShw Z3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2gpOworCisJLyoKKwkgKiBOb3cgcmVtb3ZlIGFsbCB0aGUg ZW50cmllcy4gU2luY2UgcGdzYV9zdGF0ZS0+bG9jayBtdXN0IGJlIGhlbGQgYXQKKwkgKiBsZWFz dCBpbiBzaGFyZWQgbW9kZSB0byBpbnNlcnQgZW50cmllcyBpbnRvIHBnc2FfZW50cnlfZHNoYXNo LCBpdAorCSAqIGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgd2UgZG8gdGhpcyBiZWZvcmUgb3IgYWZ0 ZXIgZGVsZXRpbmcgdGhlIGVudHJ5CisJICogZnJvbSBwZ3NhX3N0YXNoX2RzaGFzaC4KKwkgKi8K Kwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX2VudHJ5X2RzaGFzaCwgdHJ1ZSk7CisJ d2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0b3IpKSAhPSBOVUxMKQorCXsK KwkJaWYgKHN0YXNoX2lkID09IGVudHJ5LT5rZXkucGdzYV9zdGFzaF9pZCkKKwkJeworCQkJaWYg KGVudHJ5LT5hZHZpY2Vfc3RyaW5nICE9IEludmFsaWREc2FQb2ludGVyKQorCQkJCWRzYV9mcmVl KHBnc2FfZHNhX2FyZWEsIGVudHJ5LT5hZHZpY2Vfc3RyaW5nKTsKKwkJCWRzaGFzaF9kZWxldGVf Y3VycmVudCgmaXRlcmF0b3IpOworCQl9CisJfQorCWRzaGFzaF9zZXFfdGVybSgmaXRlcmF0b3Ip OworfQorCisvKgorICogSW5pdGlhbGl6ZSBzaGFyZWQgc3RhdGUgd2hlbiBmaXJzdCBjcmVhdGVk LgorICovCitzdGF0aWMgdm9pZAorcGdzYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZv aWQgKmFyZykKK3sKKwlwZ3NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdzYV9zaGFyZWRfc3Rh dGUgKikgcHRyOworCisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssCisJCQkJCSBMV0xv Y2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2FkdmljZV9sb2NrIikpOworCXN0YXRlLT5kc2FfdHJh bmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rhc2hfYWR2aWNlX2RzYSIpOworCXN0YXRl LT5zdGFzaF90cmFuY2hlID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2Vfc3Rh c2giKTsKKwlzdGF0ZS0+ZW50cnlfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rh c2hfYWR2aWNlX2VudHJ5Iik7CisJc3RhdGUtPm5leHRfc3Rhc2hfaWQgPSBVSU5UNjRDT05TVCgx KTsKKwlzdGF0ZS0+YXJlYSA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c3Rhc2hfaGFz aCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+ZW50cnlfaGFzaCA9IERTSEFTSF9I QU5ETEVfSU5WQUxJRDsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgbG9va3Mg bGlrZSBhIHZhbGlkIGlkZW50aWZpZXIuIEl0IG11c3QgY29udGFpbiBvbmx5CisgKiBBU0NJSSBp ZGVudGlmaWVyIGNoYXJhY3RlcnMsIGFuZCBtdXN0IG5vdCBiZWdpbiB3aXRoIGEgZGlnaXQuCisg Ki8KK3N0YXRpYyBib29sCitwZ3NhX2lzX2lkZW50aWZpZXIoY2hhciAqc3RyKQoreworCWlmICgq c3RyID49ICcwJyAmJiAqc3RyIDw9ICc5JykKKwkJcmV0dXJuIGZhbHNlOworCisJd2hpbGUgKCpz dHIgIT0gJ1wwJykKKwl7CisJCWNoYXIJCWMgPSAqc3RyKys7CisKKwkJaWYgKChjIDwgJzAnIHx8 IGMgPiAnOScpICYmIChjIDwgJ2EnIHx8IGMgPiAneicpICYmCisJCQkoYyA8ICdBJyB8fCBjID4g J1onKSAmJiBjICE9ICdfJykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIExvb2sgdXAgdGhlIGludGVnZXIgSUQgdGhhdCBjb3JyZXNwb25kcyB0byB0 aGUgZ2l2ZW4gc3Rhc2ggbmFtZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgbm8gc3VjaCBzdGFzaCBl eGlzdHMuCisgKi8KK3VpbnQ2NAorcGdzYV9sb29rdXBfc3Rhc2hfaWQoY2hhciAqc3Rhc2hfbmFt ZSkKK3sKKwlwZ3NhX3N0YXNoICpzdGFzaDsKKwl1aW50NjQJCXN0YXNoX2lkOworCisJLyogU2Vh cmNoIHRoZSBzaGFyZWQgaGFzaCB0YWJsZS4gKi8KKwlzdGFzaCA9IGRzaGFzaF9maW5kKHBnc2Ff c3Rhc2hfZHNoYXNoLCBzdGFzaF9uYW1lLCBmYWxzZSk7CisJaWYgKHN0YXNoID09IE5VTEwpCisJ CXJldHVybiAwOworCXN0YXNoX2lkID0gc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQ7CisJZHNoYXNoX3Jl bGVhc2VfbG9jayhwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2gpOworCisJcmV0dXJuIHN0YXNoX2lk OworfQorCisvKgorICogU3RvcmUgYSBuZXcgb3IgdXBkYXRlZCBhZHZpY2Ugc3RyaW5nIGZvciB0 aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFuZCBxdWVyeSBJRC4KKyAqLwordm9pZAorcGdzYV9zZXRf YWR2aWNlX3N0cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLCBjaGFyICphZHZp Y2Vfc3RyaW5nKQoreworCXBnc2FfZW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOworCXBnc2Ff ZW50cnlfa2V5IGtleTsKKwl1aW50NjQJCXN0YXNoX2lkOworCWRzYV9wb2ludGVyIG5ld19kcDsK Kwlkc2FfcG9pbnRlciBvbGRfZHA7CisKKwkvKgorCSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIG91 ciBsb2NrLCBhdCBsZWFzdCBpbiBzaGFyZWQgbW9kZS4gIFRoaXMgaXMKKwkgKiBpbXBvcnRhbnQg Zm9yIHR3byByZWFzb25zLgorCSAqCisJICogRmlyc3QsIGl0IGhvbGRzIG9mZiBpbnRlcnJ1cHRz LCBzbyB0aGF0IHdlIGNhbid0IGJhaWwgb3V0IG9mIHRoaXMgY29kZQorCSAqIGFmdGVyIGFsbG9j YXRpbmcgRFNBIG1lbW9yeSBmb3IgdGhlIGFkdmljZSBzdHJpbmcgYW5kIGJlZm9yZSBzdG9yaW5n CisJICogdGhlIHJlc3VsdGluZyBwb2ludGVyIHNvbWV3aGVyZSB0aGF0IG90aGVycyBjYW4gZmlu ZCBpdC4KKwkgKgorCSAqIFNlY29uZCwgd2UgbmVlZCB0byBhdm9pZCBhIHJhY2UgYWdhaW5zdCBw Z3NhX2Ryb3Bfc3Rhc2goKS4gVGhhdAorCSAqIGZ1bmN0aW9uIHJlbW92ZXMgYSBzdGFzaF9uYW1l LT5zdGFzaF9pZCBtYXBwaW5nIGFuZCBhbGwgdGhlIGVudHJpZXMgZm9yCisJICogdGhhdCBzdGFz aF9pZC4gV2l0aG91dCB0aGUgbG9jaywgdGhlcmUncyBhIHJhY2UgY29uZGl0aW9uIG5vIG1hdHRl cgorCSAqIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBkb2VzIGZpcnN0LCBiZWNhdXNlIGFzIHNv b24gYXMgd2UndmUgbG9va2VkIHVwCisJICogdGhlIHN0YXNoIElELCB0aGF0IHdob2xlIGZ1bmN0 aW9uIGNhbiBleGVjdXRlIGJlZm9yZSB3ZSBkbyB0aGUgcmVzdCBvZgorCSAqIG91ciB3b3JrLCB3 aGljaCB3b3VsZCByZXN1bHQgaW4gdXMgYWRkaW5nIGFuIGVudHJ5IGZvciBhIHN0YXNoIHRoYXQg bm8KKwkgKiBsb25nZXIgZXhpc3RzLgorCSAqLworCUFzc2VydChMV0xvY2tIZWxkQnlNZSgmcGdz YV9zdGF0ZS0+bG9jaykpOworCisJLyogTG9vayB1cCB0aGUgc3Rhc2ggSUQuICovCisJaWYgKChz dGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHN0YXNoX25hbWUpKSA9PSAwKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggXCIlc1wiIGRvZXMgbm90IGV4aXN0Iiwgc3Rhc2hf bmFtZSkpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhZHZpY2Ugc3RyaW5nLiAqLwor CW5ld19kcCA9IGRzYV9hbGxvY2F0ZShwZ3NhX2RzYV9hcmVhLCBzdHJsZW4oYWR2aWNlX3N0cmlu ZykgKyAxKTsKKwlzdHJjcHkoZHNhX2dldF9hZGRyZXNzKHBnc2FfZHNhX2FyZWEsIG5ld19kcCks IGFkdmljZV9zdHJpbmcpOworCisJLyogQXR0ZW1wdCB0byBpbnNlcnQgYW4gZW50cnkgaW50byB0 aGUgaGFzaCB0YWJsZS4gKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKHBnc2FfZW50cnlfa2V5 KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlrZXkucXVlcnlJZCA9IHF1ZXJ5 SWQ7CisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnRfZXh0ZW5kZWQocGdzYV9lbnRyeV9k c2hhc2gsICZrZXksICZmb3VuZCwKKwkJCQkJCQkJCQkgICBEU0hBU0hfSU5TRVJUX05PX09PTSk7 CisKKwkvKgorCSAqIElmIGl0IGRpZG4ndCB3b3JrLCBiYWlsIG91dCwgYmVpbmcgY2FyZWZ1bCB0 byBmcmVlIHRoZSBzaGFyZWQgbWVtb3J5CisJICogd2UndmUgYWxyZWFkeSBhbGxvY2F0ZWQgYmVm b3JlLCBzaW5jZSBlcnJvciBjbGVhbnVwIHdpbGwgbm90IGRvIHNvLgorCSAqLworCWlmIChlbnRy eSA9PSBOVUxMKQorCXsKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgbmV3X2RwKTsKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJZXJy bXNnKCJvdXQgb2YgbWVtb3J5IiksCisJCQkJZXJyZGV0YWlsKCJjb3VsZCBub3QgaW5zZXJ0IGFk dmljZSBzdHJpbmcgaW50byBzaGFyZWQgaGFzaCB0YWJsZSIpKTsKKwl9CisKKwkvKiBVcGRhdGUg dGhlIGVudHJ5IGFuZCByZWxlYXNlIHRoZSBsb2NrLiAqLworCW9sZF9kcCA9IGZvdW5kID8gZW50 cnktPmFkdmljZV9zdHJpbmcgOiBJbnZhbGlkRHNhUG9pbnRlcjsKKwllbnRyeS0+YWR2aWNlX3N0 cmluZyA9IG5ld19kcDsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2FfZW50cnlfZHNoYXNoLCBl bnRyeSk7CisKKwkvKgorCSAqIFdlJ3JlIG5vdCBzYWZlIGZyb20gbGVha3MgeWV0IQorCSAqCisJ ICogVGhlcmUncyBub3cgYSBwb2ludGVyIHRvIG5ld19kcCBpbiB0aGUgZW50cnkgdGhhdCB3ZSBq dXN0IHVwZGF0ZWQsIGJ1dAorCSAqIHRoYXQgbWVhbnMgdGhhdCB0aGVyZSdzIG5vIGxvbmdlciBh bnl0aGluZyBwb2ludGluZyB0byBvbGRfZHAuCisJICovCisJaWYgKERzYVBvaW50ZXJJc1ZhbGlk KG9sZF9kcCkpCisJCWRzYV9mcmVlKHBnc2FfZHNhX2FyZWEsIG9sZF9kcCk7Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29udHJvbCBiL2Nv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9sCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YTBmZmY1Yzg2NgotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9sCkBAIC0w LDAgKzEsNSBAQAorIyBwZ19zdGFzaF9hZHZpY2UgZXh0ZW5zaW9uCitjb21tZW50ID0gJ3N0b3Jl IGFuZCBhdXRvbWF0aWNhbGx5IGFwcGx5IHBsYW4gYWR2aWNlJworZGVmYXVsdF92ZXJzaW9uID0g JzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX3N0YXNoX2FkdmljZScKK3JlbG9j YXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rh c2hfYWR2aWNlLmggYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWVhYTYxZTBmMzcKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuaApA QCAtMCwwICsxLDk5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGFzaF9hZHZp Y2UuaAorICoJICBtYWluIGhlYWRlciBmb3IgcGdfc3Rhc2hfYWR2aWNlIGNvbnRyaWIgbW9kdWxl CisgKgorICogVGhpcyBtb2R1bGUgYWxsb3dzIHBsYW4gYWR2aWNlIHN0cmluZ3MgKGFzIHVzZWQg YW5kIGdlbmVyYXRlZCBieQorICogcGdfcGxhbl9hZHZpY2UpIHRvIGJlICJzdGFzaGVkIiBpbiBk eW5hbWljIHNoYXJlZCBtZW1vcnkgYW5kLCBmcm9tCisgKiB0aGVyZSwgYXV0b21hdGljYWxseSBi ZSBhcHBsaWVkIHRvIHF1ZXJpZXMgYXMgdGhleSBhcmUgcGxhbm5lZC4KKyAqIFlvdSBjYW4gY3Jl YXRlIGFueSBudW1iZXIgb2YgYWR2aWNlIHN0YXNoZXMsIGVhY2ggb2Ygd2hpY2ggaXMKKyAqIGlk ZW50aWZpZWQgYnkgYSBodW1hbi1yZWFkYWJsZSwgQVNDSUkgaWRlbnRpZmllciwgYW5kIGVhY2gg b2YgdGhlbSBpcworICogZXNzZW50aWFsbHkgYSBxdWVyeSBJRCAtPiBhZHZpY2Vfc3RyaW5nIG1h cHBpbmcuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19z dGFzaF9hZHZpY2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1NU QVNIX0FEVklDRV9ICisjZGVmaW5lIFBHX1NUQVNIX0FEVklDRV9ICisKKyNpbmNsdWRlICJsaWIv ZHNoYXNoLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKworLyoKKyAqIFRoZSBrZXkg dGhhdCB3ZSB1c2UgdG8gZmluZCBhIHBhcnRpY3VsYXIgc3Rhc2ggZW50cnkuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBnc2FfZW50cnlfa2V5Cit7CisJdWludDY0CQlwZ3NhX3N0YXNoX2lkOworCWlu dDY0CQlxdWVyeUlkOworfSBwZ3NhX2VudHJ5X2tleTsKKworLyoKKyAqIEEgc2luZ2xlIHN0YXNo IGVudHJ5LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3NhX2VudHJ5Cit7CisJcGdzYV9lbnRyeV9r ZXkga2V5OworCWRzYV9wb2ludGVyIGFkdmljZV9zdHJpbmc7Cit9IHBnc2FfZW50cnk7CisKKy8q CisgKiBUaGUgc3Rhc2ggaXRzZWxmIGlzIGp1c3QgYSBtYXBwaW5nIGZyb20gYSBuYW1lIHRvIGEg c3Rhc2ggSUQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnc2Ffc3Rhc2gKK3sKKwljaGFyCQluYW1l W05BTUVEQVRBTEVOXTsKKwl1aW50NjQJCXBnc2Ffc3Rhc2hfaWQ7Cit9IHBnc2Ffc3Rhc2g7CisK Ky8qCisgKiBUb3AtbGV2ZWwgc2hhcmVkIHN0YXRlIG9iamVjdCBmb3IgcGdfc3Rhc2hfYWR2aWNl LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3NhX3NoYXJlZF9zdGF0ZQoreworCUxXTG9jawkJbG9j azsKKwlpbnQJCQlkc2FfdHJhbmNoZTsKKwlpbnQJCQlzdGFzaF90cmFuY2hlOworCWludAkJCWVu dHJ5X3RyYW5jaGU7CisJdWludDY0CQluZXh0X3N0YXNoX2lkOworCWRzYV9oYW5kbGUJYXJlYTsK Kwlkc2hhc2hfdGFibGVfaGFuZGxlIHN0YXNoX2hhc2g7CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBl bnRyeV9oYXNoOworfSBwZ3NhX3NoYXJlZF9zdGF0ZTsKKworLyogRm9yIHN0YXNoIElEIC0+IHN0 YXNoIG5hbWUgaGFzaCB0YWJsZSAqLwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaF9uYW1lCit7 CisJdWludDMyCQlzdGF0dXM7CisJdWludDY0CQlwZ3NhX3N0YXNoX2lkOworCWNoYXIJICAgKm5h bWU7Cit9IHBnc2Ffc3Rhc2hfbmFtZTsKKworLyogRGVjbGFyZSBzdGFzaCBJRCAtPiBzdGFzaCBu YW1lIGhhc2ggdGFibGUgKi8KKyNkZWZpbmUgU0hfUFJFRklYIHBnc2Ffc3Rhc2hfbmFtZV90YWJs ZQorI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUgcGdzYV9zdGFzaF9uYW1lCisjZGVmaW5lIFNIX0tF WV9UWVBFIHVpbnQ2NAorI2RlZmluZSBTSF9TQ09QRSBleHRlcm4KKyNkZWZpbmUgU0hfREVDTEFS RQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKKy8qIFNoYXJlZCBtZW1vcnkgcG9pbnRl cnMgKi8KK2V4dGVybiBwZ3NhX3NoYXJlZF9zdGF0ZSAqcGdzYV9zdGF0ZTsKK2V4dGVybiBkc2Ff YXJlYSAqcGdzYV9kc2FfYXJlYTsKK2V4dGVybiBkc2hhc2hfdGFibGUgKnBnc2Ffc3Rhc2hfZHNo YXNoOworZXh0ZXJuIGRzaGFzaF90YWJsZSAqcGdzYV9lbnRyeV9kc2hhc2g7CisKKy8qIEZ1bmN0 aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVybiB2b2lkIHBnc2FfYXR0YWNoKHZvaWQpOworZXh0ZXJu IHZvaWQgcGdzYV9jaGVja19zdGFzaF9uYW1lKGNoYXIgKnN0YXNoX25hbWUpOworZXh0ZXJuIHZv aWQgcGdzYV9jbGVhcl9hZHZpY2Vfc3RyaW5nKGNoYXIgKnN0YXNoX25hbWUsIGludDY0IHF1ZXJ5 SWQpOworZXh0ZXJuIHZvaWQgcGdzYV9jcmVhdGVfc3Rhc2goY2hhciAqc3Rhc2hfbmFtZSk7Citl eHRlcm4gdm9pZCBwZ3NhX2Ryb3Bfc3Rhc2goY2hhciAqc3Rhc2hfbmFtZSk7CitleHRlcm4gdWlu dDY0IHBnc2FfbG9va3VwX3N0YXNoX2lkKGNoYXIgKnN0YXNoX25hbWUpOworZXh0ZXJuIHZvaWQg cGdzYV9zZXRfYWR2aWNlX3N0cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAor CQkJCQkJCQkgICBjaGFyICphZHZpY2Vfc3RyaW5nKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3N0YXNoX2FkdmljZS9zcWwvcGdfc3Rhc2hfYWR2aWNlLnNxbCBiL2NvbnRyaWIv cGdfc3Rhc2hfYWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lM2ZlODgwODkzNwotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsCkBAIC0wLDAgKzEs MTUwIEBACitDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2FkdmljZTsKK1NFVCBjb21wdXRlX3F1 ZXJ5X2lkID0gb247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisK Ky0tIEhlbHBlcjogZXh0cmFjdCBxdWVyeSBpZGVudGlmaWVyIGZyb20gRVhQTEFJTiBWRVJCT1NF IG91dHB1dC4KK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdldF9xdWVyeV9pZChxdWVyeV90 ZXh0IHRleHQpIFJFVFVSTlMgYmlnaW50CitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitERUNMQVJF CisgICAgbGluZSB0ZXh0OworICAgIHFpZCBiaWdpbnQ7CitCRUdJTgorICAgIEZPUiBsaW5lIElO IEVYRUNVVEUgJ0VYUExBSU4gKFZFUkJPU0UsIEZPUk1BVCBURVhUKSAnIHx8IHF1ZXJ5X3RleHQK KyAgICBMT09QCisgICAgICAgIElGIGxpbmUgfiAnUXVlcnkgSWRlbnRpZmllcjonIFRIRU4KKyAg ICAgICAgICAgIHFpZCA6PSByZWdleHBfcmVwbGFjZShsaW5lLCAnLipRdWVyeSBJZGVudGlmaWVy OlxzKigtP1xkKykuKicsICdcMScpOjpiaWdpbnQ7CisgICAgICAgICAgICBSRVRVUk4gcWlkOwor ICAgICAgICBFTkQgSUY7CisgICAgRU5EIExPT1A7CisgICAgUkFJU0UgRVhDRVBUSU9OICdRdWVy eSBJZGVudGlmaWVyIG5vdCBmb3VuZCBpbiBFWFBMQUlOIG91dHB1dCc7CitFTkQ7CiskJDsKKwor Q1JFQVRFIFRBQkxFIGFhX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwg dmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElO VE8gYWFfZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0 ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOwor VkFDVVVNIEFOQUxZWkUgYWFfZGltMTsKKworQ1JFQVRFIFRBQkxFIGFhX2RpbTIgKGlkIGludGVn ZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJ U0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2RpbTI7CisKK0NS RUFURSBUQUJMRSBhYV9mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRl Z2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgYWFfZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBu b3QgbnVsbCByZWZlcmVuY2VzIGFhX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBhYV9mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwg KGclMTAwKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgYWFfZmFjdDsKKworLS0gR2V0IHRoZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNUIGdldF9x dWVyeV9pZCgkJAorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEgZDEg T04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQg PSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQgXGdzZXQK KworLS0gQ3JlYXRlIGFuIGFkdmljZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2aWNlIGF0 IGl0LgorU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NF VCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKKworLS0gUnVu IG91ciB0ZXN0IHF1ZXJ5IGZvciB0aGUgZmlyc3QgdGltZSB3aXRoIG5vIHN0YXNoZWQgYWR2aWNl LgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lO IGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0g Rm9yY2UgYW4gaW5kZXggc2NhbiBvbiBkaW0xCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNl KCdyZWdyZXNzX3N0YXNoJywgOidxaWQnLAorCSdJTkRFWF9TQ0FOKGQxIGFhX2RpbTFfcGtleSkn KTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpP SU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQy IE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCist LSBGb3JjZSBhbiBhbHRlcm5hdGl2ZSBqb2luIG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRf YWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidxaWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lO IGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0g Rm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VMRUNUIHBnX3NldF9zdGFzaGVk X2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVTVEVEX0xPT1BfUExBSU4oZDEp Jyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBK T0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKwor LS0gQWRkIGEgdXNlbGVzcyBleHRyYSBlbnRyeSB0byBvdXIgdGVzdCBzdGFzaC4gU2hvdWxkbid0 IGNoYW5nZSB0aGUgcmVzdWx0CistLSBmcm9tIHRoZSBwcmV2aW91cyB0ZXN0LgorLS0gKElmIHdl J3JlIHVubHVja3kgZW5vdWdoIHRoYXQgdGhpcyBldmVyIGZhaWxzIGR1ZSB0byBxdWVyeSBJRCBh Y3R1YWxseQorLS0gYmVpbmcgMSwgdGhlbiBqdXN0IHB1dCBzb21lIG90aGVyIGNvbnN0YW50IGhl cmUuIFNlZW1zIHVubGlrZWx5LikKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jl c3Nfc3Rhc2gnLCAxLCAnU0VRX1NDQU4oZDEpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVD VCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0g ZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJF IHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gVHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1 cmUgaXQgZG9lcyBub3RoaW5nCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVz c19lbXB0eV9zdGFzaCcpOworU0VUIHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jl c3NfZW1wdHlfc3Rhc2gnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2Zh Y3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNoIGluZGl2aWR1 YWxseSBhbmQgYWxsIG9mIHRoZW0gdG9nZXRoZXIsCistLSBidXQgbm90IGEgbm9uZXhpc3RlbnQg c3Rhc2guCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0 YXNoX25hbWU7CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCUZST00gcGdfZ2V0 X2FkdmljZV9zdGFzaF9jb250ZW50cygncmVncmVzc19zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lk OworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNl X3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX2VtcHR5X3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7 CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vf c3Rhc2hfY29udGVudHMoTlVMTCkgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qgc3Rhc2hfbmFt ZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ25v X3N1Y2hfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKworLS0gVGVzdCB0aGF0IHdlIGNhbiBy ZW1vdmUgYWR2aWNlLgorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFz aCcsIDoncWlkJywgbnVsbCk7CitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVn cmVzc19zdGFzaCc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBm CisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4g YWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwy ID0gMTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rh c2hfbmFtZTsKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRf YWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7 CisKKy0tIENhbid0IGNyZWF0ZSBhIHN0YXNoIHRoYXQgYWxyZWFkeSBleGlzdHMsIG9yIGRyb3Ag b25lIHRoYXQgZG9lc24ndC4KK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNz X3N0YXNoJyk7CitTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ25vX3N1Y2hfc3Rhc2gnKTsK KworLS0gQ2FuJ3QgYWRkIHRvIG9yIHJlbW92ZSBmcm9tIGEgc3Rhc2ggdGhhdCBkb2VzIG5vdCBl eGlzdC4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ25vX3N1Y2hfc3Rhc2gnLCAxLCAn U0VRX1NDQU4odCknKTsKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ25vX3N1Y2hfc3Rh c2gnLCAxLCBudWxsKTsKKworLS0gQ2FuJ3QgdXNlIHF1ZXJ5IElEIDAuCitTRUxFQ1QgcGdfc2V0 X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgMCwgJ1NFUV9TQ0FOKHQpJyk7CisKKy0t IFN0YXNoIG5hbWVzIG11c3QgYmUgbm9uLWVtcHR5LCBBU0NJSSwgYW5kIG5vdCB0b28gbG9uZywg YW5kIG11c3QgbG9vaworLS0gbGlrZSBpZGVudGlmaWVycy4KK1NFTEVDVCBwZ19jcmVhdGVfYWR2 aWNlX3N0YXNoKCcnKTsKK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyk7 CitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaChFJ2NhZlx1MDBlOScpOworU0VMRUNUIHBn X2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJyAgICcpOworU0VUIHBnX3N0YXNoX2FkdmljZS5zdGFzaF9u YW1lID0gJ2NhZsOpJzsKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICc5OWJvdHRs ZXMnOworCistLSBDbGVhbiB1cCBzdGF0ZSBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkuCitTRUxF Q1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NFTEVDVCBwZ19kcm9w X2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19zdGFzaF9hZHZpY2Uvc3Rhc2hmdW5jcy5jIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uv c3Rhc2hmdW5jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGM2 NjlkNmFiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3N0YXNo ZnVuY3MuYwpAQCAtMCwwICsxLDMwNyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogc3Rh c2hmdW5jcy5jCisgKgkgIFNRTCBpbnRlcmZhY2UgdG8gcGdfc3Rhc2hfYWR2aWNlCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICoJICBjb250cmliL3BnX3N0YXNoX2FkdmljZS9zdGFzaGZ1bmNzLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl ICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImZ1bmNhcGku aCIKKyNpbmNsdWRlICJwZ19zdGFzaF9hZHZpY2UuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKworUEdfRlVOQ1RJT05fSU5GT19W MShwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZHJvcF9h ZHZpY2Vfc3Rhc2gpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfYWR2aWNlX3N0YXNoX2Nv bnRlbnRzKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2FkdmljZV9zdGFzaGVzKTsKK1BH X0ZVTkNUSU9OX0lORk9fVjEocGdfc2V0X3N0YXNoZWRfYWR2aWNlKTsKKwordHlwZWRlZiBzdHJ1 Y3QgcGdzYV9zdGFzaF9jb3VudAoreworCXVpbnQzMgkJc3RhdHVzOworCXVpbnQ2NAkJcGdzYV9z dGFzaF9pZDsKKwlpbnQ2NAkJbnVtX2VudHJpZXM7Cit9IHBnc2Ffc3Rhc2hfY291bnQ7CisKKyNk ZWZpbmUgU0hfUFJFRklYIHBnc2Ffc3Rhc2hfY291bnRfdGFibGUKKyNkZWZpbmUgU0hfRUxFTUVO VF9UWVBFIHBnc2Ffc3Rhc2hfY291bnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUgdWludDY0CisjZGVm aW5lIFNIX0tFWSBwZ3NhX3N0YXNoX2lkCisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpIGhh c2hfYnl0ZXMoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgJihrZXkpLCBzaXplb2YodWludDY0KSkK KyNkZWZpbmUgU0hfRVFVQUwodGIsIGEsIGIpIChhID09IGIpCisjZGVmaW5lIFNIX1NDT1BFIHN0 YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVGSU5FCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNs dWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRv IGNyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2gKKyAqLworRGF0dW0KK3BnX2NyZWF0ZV9hZHZpY2Vfc3Rh c2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lID0gdGV4dF90b19j c3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShz dGFzaF9uYW1lKTsKKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJ CXBnc2FfYXR0YWNoKCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhD TFVTSVZFKTsKKwlwZ3NhX2NyZWF0ZV9zdGFzaChzdGFzaF9uYW1lKTsKKwlMV0xvY2tSZWxlYXNl KCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FM LWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRyb3AgYW4gYWR2aWNlIHN0YXNoCisgKi8KK0RhdHVtCitw Z19kcm9wX2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0YXNo X25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJcGdzYV9j aGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2Rz aGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0 YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCXBnc2FfZHJvcF9zdGFzaChzdGFzaF9uYW1lKTsK KwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOwor fQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYSBsaXN0IG9mIGFk dmljZSBzdGFzaGVzCisgKi8KK0RhdHVtCitwZ19nZXRfYWR2aWNlX3N0YXNoZXMoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBm Y2luZm8tPnJlc3VsdGluZm87CisJZHNoYXNoX3NlcV9zdGF0dXMgaXRlcmF0b3I7CisJcGdzYV9l bnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJcGdzYV9zdGFzaF9jb3VudF90YWJs ZV9oYXNoICpjaGFzaDsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8q IEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8K KwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNo KCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgcGVyIHN0YXNoLiAqLwor CWNoYXNoID0gcGdzYV9zdGFzaF9jb3VudF90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRl eHQsIDY0LCBOVUxMKTsKKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX2VudHJ5X2Rz aGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0b3Ip KSAhPSBOVUxMKQorCXsKKwkJcGdzYV9zdGFzaF9jb3VudCAqYzsKKwkJYm9vbAkJZm91bmQ7CisK KwkJYyA9IHBnc2Ffc3Rhc2hfY291bnRfdGFibGVfaW5zZXJ0KGNoYXNoLAorCQkJCQkJCQkJCSAg ZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwkJaWYgKCFm b3VuZCkKKwkJCWMtPm51bV9lbnRyaWVzID0gMTsKKwkJZWxzZQorCQkJYy0+bnVtX2VudHJpZXMr KzsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwkvKiBFbWl0IHJlc3VsdHMu ICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9zdGFzaF9kc2hhc2gsIHRydWUp OworCXdoaWxlICgoc3Rhc2ggPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVMTCkK Kwl7CisJCURhdHVtCQl2YWx1ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdOworCQlwZ3NhX3N0YXNo X2NvdW50ICpjOworCisJCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oc3Rhc2gtPm5h bWUpOworCQludWxsc1swXSA9IGZhbHNlOworCisJCWMgPSBwZ3NhX3N0YXNoX2NvdW50X3RhYmxl X2xvb2t1cChjaGFzaCwgc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQpOworCQl2YWx1ZXNbMV0gPSBJbnQ2 NEdldERhdHVtKGMgPT0gTlVMTCA/IDAgOiBjLT5udW1fZW50cmllcyk7CisJCW51bGxzWzFdID0g ZmFsc2U7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5m by0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9zZXFfdGVy bSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxs YWJsZSBmdW5jdGlvbiB0byBwcm92aWRlIGFkdmljZSBzdGFzaCBjb250ZW50cworICovCitEYXR1 bQorcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhQR19GVU5DVElPTl9BUkdTKQoreworCVJl dHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5m bzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwljaGFyCSAgICpzdGFzaF9uYW1lID0g TlVMTDsKKwlwZ3NhX3N0YXNoX25hbWVfdGFibGVfaGFzaCAqbmhhc2ggPSBOVUxMOworCXVpbnQ2 NAkJc3Rhc2hfaWQgPSAwOworCXBnc2FfZW50cnkgKmVudHJ5OworCisJSW5pdE1hdGVyaWFsaXpl ZFNSRihmY2luZm8sIDApOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBp ZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9 PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8qIFVzZXIgY2FuIHBhc3MgTlVMTCBmb3Ig YWxsIHN0YXNoZXMsIG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgc3Rhc2guICovCisJaWYgKCFQ R19BUkdJU05VTEwoMCkpCisJeworCQlzdGFzaF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dF VEFSR19URVhUX1BQKDApKTsKKwkJcGdzYV9jaGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOwor CQlzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHN0YXNoX25hbWUpOworCisJCS8qIElm IHRoZSB1c2VyIHNwZWNpZmllZCBhIHN0YXNoIG5hbWUsIGl0IHNob3VsZCBleGlzdC4gKi8KKwkJ aWYgKHN0YXNoX2lkID09IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQllcnJtc2coImFkdmljZSBzdGFzaCBc IiVzXCIgZG9lcyBub3QgZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisJfQorCWVsc2UKKwl7CisJCXBn c2Ffc3Rhc2ggKnN0YXNoOworCisJCS8qCisJCSAqIElmIHdlJ3JlIGR1bXBpbmcgZGF0YSBhYm91 dCBhbGwgc3Rhc2hlcywgd2UgbmVlZCBhbiBJRC0+bmFtZSBsb29rdXAKKwkJICogdGFibGUuCisJ CSAqLworCQluaGFzaCA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9y eUNvbnRleHQsIDY0LCBOVUxMKTsKKwkJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9z dGFzaF9kc2hhc2gsIHRydWUpOworCQl3aGlsZSAoKHN0YXNoID0gZHNoYXNoX3NlcV9uZXh0KCZp dGVyYXRvcikpICE9IE5VTEwpCisJCXsKKwkJCXBnc2Ffc3Rhc2hfbmFtZSAqbjsKKwkJCWJvb2wJ CWZvdW5kOworCisJCQluID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2luc2VydChuaGFzaCwKKwkJ CQkJCQkJCQkJIHN0YXNoLT5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCQkgJmZvdW5kKTsKKwkJ CUFzc2VydCghZm91bmQpOworCQkJbi0+bmFtZSA9IHBzdHJkdXAoc3Rhc2gtPm5hbWUpOworCQl9 CisJCWRzaGFzaF9zZXFfdGVybSgmaXRlcmF0b3IpOworCX0KKworCS8qIE5vdyBpdGVyYXRlIG92 ZXIgYWxsIHRoZSBlbnRyaWVzLiAqLworCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2Ff ZW50cnlfZHNoYXNoLCBmYWxzZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgm aXRlcmF0b3IpKSAhPSBOVUxMKQorCXsKKwkJRGF0dW0JCXZhbHVlc1szXTsKKwkJYm9vbAkJbnVs bHNbM107CisJCWNoYXIJICAgKnRoaXNfc3Rhc2hfbmFtZTsKKwkJY2hhcgkgICAqYWR2aWNlX3N0 cmluZzsKKworCQkvKiBTa2lwIGluY29tcGxldGUgZW50cmllcyB3aGVyZSB0aGUgYWR2aWNlIHN0 cmluZyB3YXMgbmV2ZXIgc2V0LiAqLworCQlpZiAoZW50cnktPmFkdmljZV9zdHJpbmcgPT0gSW52 YWxpZERzYVBvaW50ZXIpCisJCQljb250aW51ZTsKKworCQlpZiAoc3Rhc2hfaWQgIT0gMCkKKwkJ eworCQkJLyoKKwkJCSAqIFdlJ3JlIG9ubHkgZHVtcGluZyBkYXRhIGZvciBvbmUgcGFydGljdWxh ciBzdGFzaCwgc28gc2tpcAorCQkJICogZW50cmllcyBmb3IgYW55IG90aGVyIHN0YXNoIGFuZCB1 c2UgdGhlIHN0YXNoIG5hbWUgc3BlY2lmaWVkIGJ5CisJCQkgKiB0aGUgdXNlci4KKwkJCSAqLwor CQkJaWYgKHN0YXNoX2lkICE9IGVudHJ5LT5rZXkucGdzYV9zdGFzaF9pZCkKKwkJCQljb250aW51 ZTsKKwkJCXRoaXNfc3Rhc2hfbmFtZSA9IHN0YXNoX25hbWU7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlwZ3NhX3N0YXNoX25hbWUgKm47CisKKwkJCS8qCisJCQkgKiBXZSdyZSBkdW1waW5nIGRhdGEg Zm9yIGFsbCBzdGFzaGVzLCBzbyBsb29rIHVwIHRoZSBjb3JyZWN0IG5hbWUKKwkJCSAqIHRvIHVz ZSBpbiB0aGUgaGFzaCB0YWJsZS4gSWYgbm90aGluZyBpcyBmb3VuZCwgd2hpY2ggaXMKKwkJCSAq IHBvc3NpYmxlIGR1ZSB0byByYWNlIGNvbmRpdGlvbnMsIG1ha2UgdXAgYSBzdHJpbmcgdG8gdXNl LgorCQkJICovCisJCQluID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2xvb2t1cChuaGFzaCwgZW50 cnktPmtleS5wZ3NhX3N0YXNoX2lkKTsKKwkJCWlmIChuICE9IE5VTEwpCisJCQkJdGhpc19zdGFz aF9uYW1lID0gbi0+bmFtZTsKKwkJCWVsc2UKKwkJCQl0aGlzX3N0YXNoX25hbWUgPSBwc3ByaW50 ZigiPHN0YXNoICUiIFBSSXU2NCAiPiIsCisJCQkJCQkJCQkJICAgZW50cnktPmtleS5wZ3NhX3N0 YXNoX2lkKTsKKwkJfQorCisJCS8qIFdvcmsgb3V0IHR1cGxlIHZhbHVlcy4gKi8KKwkJdmFsdWVz WzBdID0gQ1N0cmluZ0dldFRleHREYXR1bSh0aGlzX3N0YXNoX25hbWUpOworCQludWxsc1swXSA9 IGZhbHNlOworCQl2YWx1ZXNbMV0gPSBJbnQ2NEdldERhdHVtKGVudHJ5LT5rZXkucXVlcnlJZCk7 CisJCW51bGxzWzFdID0gZmFsc2U7CisJCWFkdmljZV9zdHJpbmcgPSBkc2FfZ2V0X2FkZHJlc3Mo cGdzYV9kc2FfYXJlYSwgZW50cnktPmFkdmljZV9zdHJpbmcpOworCQl2YWx1ZXNbMl0gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKGFkdmljZV9zdHJpbmcpOworCQludWxsc1syXSA9IGZhbHNlOworCisJ CS8qIEVtaXQgdGhlIHR1cGxlLiAqLworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNl dFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsCisJCQkJCQkJIG51bGxzKTsKKwl9CisJ ZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQorCisv KgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHVwZGF0ZSBhbiBhZHZpY2Ugc3Rhc2ggZW50 cnkgZm9yIGEgcGFydGljdWxhcgorICogcXVlcnkgSUQKKyAqCisgKiBJZiB0aGUgc2Vjb25kIGFy Z3VtZW50IGlzIE5VTEwsIHdlIGRlbGV0ZSBhbnkgZXhpc3RpbmcgYWR2aWNlIHN0YXNoCisgKiBl bnRyeTsgb3RoZXJ3aXNlLCB3ZSBlaXRoZXIgY3JlYXRlIGFuIGVudHJ5IG9yIHVwZGF0ZSBpdCB3 aXRoIHRoZSBuZXcKKyAqIGFkdmljZSBzdHJpbmcuCisgKi8KK0RhdHVtCitwZ19zZXRfc3Rhc2hl ZF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lOworCWlu dDY0CQlxdWVyeUlkOworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSB8fCBQR19BUkdJU05VTEwoMSkp CisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwkvKiBHZXQgYW5kIGNoZWNrIGFkdmljZSBzdGFzaCBu YW1lLiAqLworCXN0YXNoX25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAo MCkpOworCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShzdGFzaF9uYW1lKTsKKworCS8qCisJICogR2V0 IGFuZCBjaGVjayBxdWVyeSBJRC4KKwkgKgorCSAqIHF1ZXJ5SUQgMCBtZWFucyBubyBxdWVyeSBJ RCB3YXMgY29tcHV0ZWQsIHNvIHJlamVjdCB0aGF0LgorCSAqLworCXF1ZXJ5SWQgPSBQR19HRVRB UkdfSU5UNjQoMSk7CisJaWYgKHF1ZXJ5SWQgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiY2Fu bm90IHNldCBhZHZpY2Ugc3RyaW5nIGZvciBxdWVyeSBJRCAwIikpOworCisJLyogQXR0YWNoIHRv IGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxp a2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8q IE5vdyBjYWxsIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byBkbyB0aGUgcmVhbCB3b3JrLiAq LworCWlmIChQR19BUkdJU05VTEwoMikpCisJeworCQlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRl LT5sb2NrLCBMV19TSEFSRUQpOworCQlwZ3NhX2NsZWFyX2FkdmljZV9zdHJpbmcoc3Rhc2hfbmFt ZSwgcXVlcnlJZCk7CisJCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCX0KKwll bHNlCisJeworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nID0gdGV4dF90b19jc3RyaW5nKFBHX0dF VEFSR19URVhUX1BQKDIpKTsKKworCQlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBM V19TSEFSRUQpOworCQlwZ3NhX3NldF9hZHZpY2Vfc3RyaW5nKHN0YXNoX25hbWUsIHF1ZXJ5SWQs IGFkdmljZV9zdHJpbmcpOworCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwl9 CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29u dHJpYi5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCBiZGQ0ODY1ZjUzZi4u YjliMDM2NTRhYWQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAtMTU5LDYgKzE1OSw3IEBAIENSRUFURSBFWFRF TlNJT04gPHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJnBncGxh bmFkdmljZTsKICAmcGdwcmV3YXJtOwogICZwZ3Jvd2xvY2tzOworICZwZ3N0YXNoYWR2aWNlOwog ICZwZ3N0YXRzdGF0ZW1lbnRzOwogICZwZ3N0YXR0dXBsZTsKICAmcGdzdXJnZXJ5OwpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Qu c2dtbAppbmRleCBkOTBiNDMzOGQyYS4uZThmNzU4ZmMyNGIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9maWxlbGlzdC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0x NDQsNiArMTQ0LDcgQEAKIDwhRU5USVRZIG9pZDJuYW1lICAgICAgICBTWVNURU0gIm9pZDJuYW1l LnNnbWwiPgogPCFFTlRJVFkgcGFnZWluc3BlY3QgICAgIFNZU1RFTSAicGFnZWluc3BlY3Quc2dt bCI+CiA8IUVOVElUWSBwYXNzd29yZGNoZWNrICAgU1lTVEVNICJwYXNzd29yZGNoZWNrLnNnbWwi PgorPCFFTlRJVFkgcGdzdGFzaGFkdmljZSAgIFNZU1RFTSAicGdzdGFzaGFkdmljZS5zZ21sIj4K IDwhRU5USVRZIHBnYnVmZmVyY2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+CiA8 IUVOVElUWSBwZ2NyeXB0byAgICAgICAgU1lTVEVNICJwZ2NyeXB0by5zZ21sIj4KIDwhRU5USVRZ IHBnZnJlZXNwYWNlbWFwICBTWVNURU0gInBnZnJlZXNwYWNlbWFwLnNnbWwiPgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9wZ3N0YXNo YWR2aWNlLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjNjA1 NTJhNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dt bApAQCAtMCwwICsxLDIxNiBAQAorPCEtLSBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21s IC0tPgorCis8c2VjdDEgaWQ9InBnc3Rhc2hhZHZpY2UiIHhyZWZsYWJlbD0icGdfc3Rhc2hfYWR2 aWNlIj4KKyA8dGl0bGU+cGdfc3Rhc2hfYWR2aWNlICZtZGFzaDsgc3RvcmUgYW5kIGF1dG9tYXRp Y2FsbHkgYXBwbHkgcGxhbiBhZHZpY2U8L3RpdGxlPgorCisgPGluZGV4dGVybSB6b25lPSJwZ3N0 YXNoYWR2aWNlIj4KKyAgPHByaW1hcnk+cGdfc3Rhc2hfYWR2aWNlPC9wcmltYXJ5PgorIDwvaW5k ZXh0ZXJtPgorCisgPHBhcmE+CisgIFRoZSA8ZmlsZW5hbWU+cGdfc3Rhc2hfYWR2aWNlPC9maWxl bmFtZT4gZXh0ZW5zaW9uIGFsbG93cyB5b3UgdG8gc3Rhc2gKKyAgPGxpbmsgbGlua2VuZD0icGdw bGFuYWR2aWNlIj5wbGFuIGFkdmljZTwvbGluaz4gc3RyaW5ncyBpbiBkeW5hbWljCisgIHNoYXJl ZCBtZW1vcnkgd2hlcmUgdGhleSBjYW4gYmUgYXV0b21hdGljYWxseSBhcHBsaWVkLiBBbgorICA8 bGl0ZXJhbD5hZHZpY2Ugc3Rhc2g8L2xpdGVyYWw+IGlzIGEgbWFwcGluZyBmcm9tCisgIDxsaW5r IGxpbmtlbmQ9Imd1Yy1jb21wdXRlLXF1ZXJ5LWlkIj5xdWVyeSBpZGVudGlmaWVyczwvbGluaz4g dG8gcGxhbiBhZHZpY2UKKyAgc3RyaW5ncy4gV2hlbmV2ZXIgYSBzZXNzaW9uIGlzIGFza2VkIHRv IHBsYW4gYSBxdWVyeSB3aG9zZSBxdWVyeSBJRCBhcHBlYXJzCisgIGluIHRoZSByZWxldmFudCBh ZHZpY2Ugc3Rhc2gsIHRoZSBwbGFuIGFkdmljZSBzdHJpbmcgaXMgYXV0b21hdGljYWxseSBhcHBs aWVkCisgIHRvIGd1aWRlIHBsYW5uaW5nLiBOb3RlIHRoYXQgYWR2aWNlIHN0YXNoZXMgZXhpc3Qg cHVyZWx5IGluIG1lbW9yeS4gVGhpcworICBtZWFucyBib3RoIHRoYXQgaXQgaXMgaW1wb3J0YW50 IHRvIGJlIG1pbmRmdWwgb2YgbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4KKyAgZGVjaWRpbmcgaG93 IG11Y2ggcGxhbiBhZHZpY2UgdG8gc3Rhc2gsIGFuZCBhbHNvIHRoYXQgYWR2aWNlIHN0YXNoZXMg bXVzdAorICBiZSByZWNyZWF0ZWQgYW5kIHJlcG9wdWxhdGVkIHdoZW5ldmVyIHRoZSBzZXJ2ZXIg aXMgcmVzdGFydGVkLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBJbiBvcmRlciB0byB1c2UgdGhp cyBtb2R1bGUsIHlvdSB3aWxsIG5lZWQgdG8gZXhlY3V0ZQorICA8bGl0ZXJhbD5DUkVBVEUgRVhU RU5TSU9OIHBnX3N0YXNoX2FkdmljZTwvbGl0ZXJhbD4gaW4gYXQgbGVhc3QKKyAgb25lIGRhdGFi YXNlLCBzbyB0aGF0IHlvdSBoYXZlIGFjY2VzcyB0byB0aGUgU1FMIGZ1bmN0aW9ucyB0byBtYW5h Z2UKKyAgYWR2aWNlIHN0YXNoZXMuIFlvdSB3aWxsIGFsc28gbmVlZCB0aGUgPGxpdGVyYWw+cGdf c3Rhc2hfYWR2aWNlPC9saXRlcmFsPgorICBtb2R1bGUgdG8gYmUgbG9hZGVkIGluIGFsbCBzZXNz aW9ucyB3aGVyZSB5b3Ugd2FudCB0aGlzIG1vZHVsZSB0bworICBhdXRvbWF0aWNhbGx5IGFwcGx5 IGFkdmljZS4gSXQgd2lsbCB1c3VhbGx5IGJlIGJlc3QgdG8gZG8gdGhpcyBieSBhZGRpbmcKKyAg PGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiB0bworICA8eHJlZiBsaW5rZW5kPSJn dWMtc2hhcmVkLXByZWxvYWQtbGlicmFyaWVzIi8+IGFuZCByZXN0YXJ0aW5nIHRoZSBzZXJ2ZXIu CisgPC9wYXJhPgorCisgPHBhcmE+CisgIE9uY2UgeW91IGhhdmUgbWV0IHRoZSBhYm92ZSBjcml0 ZXJpYSwgeW91IGNhbiBjcmVhdGUgYWR2aWNlIHN0YXNoZXMKKyAgdXNpbmcgdGhlIDxsaXRlcmFs PnBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2g8L2xpdGVyYWw+IGZ1bmN0aW9uIGRlc2NyaWJlZAorICBi ZWxvdyBhbmQgc2V0IHRoZSBwbGFuIGFkdmljZSBmb3IgYSBnaXZlbiBxdWVyeSBJRCBpbiBhIGdp dmVuIHN0YXNoIHVzaW5nCisgIHRoZSA8bGl0ZXJhbD5wZ19zZXRfc3Rhc2hlZF9hZHZpY2U8L2xp dGVyYWw+IGZ1bmN0aW9uLiBUaGVuLCB5b3UgbmVlZAorICBvbmx5IGNvbmZpZ3VyZSA8bGl0ZXJh bD5wZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZTwvbGl0ZXJhbD4gdG8gcG9pbnQKKyAgdG8gdGhl IGNob3NlbiBhZHZpY2Ugc3Rhc2ggbmFtZS4gRm9yIHNvbWUgdXNlIGNhc2VzLCByYXRoZXIgdGhh biBzZXR0aW5nCisgIHRoaXMgb24gYSBzeXN0ZW0td2lkZSBiYXNpcywgeW91IG1heSBmaW5kIGl0 IGhlbHBmdWwgdG8gdXNlCisgIDxsaXRlcmFsPkFMVEVSIERBVEFCQVNFIC4uLiBTRVQ8L2xpdGVy YWw+IG9yCisgIDxsaXRlcmFsPkFMVEVSIFJPTEUgLi4uIFNFVDwvbGl0ZXJhbD4gdG8gY29uZmln dXJlIHZhbHVlcyB0aGF0IHdpbGwgYXBwbHkKKyAgb25seSB0byBhIGRhdGFiYXNlIG9yIG9ubHkg dG8gYSBjZXJ0YWluIHJvbGUuIExpa2V3aXNlLCBpdCBtYXkgc29tZXRpbWVzCisgIGJlIGJldHRl ciB0byBzZXQgdGhlIHN0YXNoIG5hbWUgaW4gYSBwYXJ0aWN1bGFyIHNlc3Npb24gdXNpbmcKKyAg PGxpdGVyYWw+U0VUPC9saXRlcmFsPi4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgQmVjYXVzZSA8 bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IHdvcmtzIG9uIHRoZSBiYXNpcyBvZiBx dWVyeQorICBpZGVudGlmaWVycywgeW91IHdpbGwgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHF1ZXJ5 IGlkZW50aWZpZXIgZm9yIGVhY2ggcXVlcnkKKyAgd2hvc2UgcGxhbiB5b3Ugd2lzaCB0byBjb250 cm9sLiBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBhZHZpY2UKKyAgc3RyaW5n IHRoYXQgeW91IHdpc2ggdG8gc3RvcmUgZm9yIGVhY2ggcXVlcnkuIE9uZSB3YXkgdG8gZG8gdGhp cyBpcyB0byB1c2UKKyAgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD46IHRoZSA8bGl0ZXJhbD5W RVJCT1NFPC9saXRlcmFsPiBvcHRpb24gd2lsbAorICBzaG93IHRoZSBxdWVyeSBJRCwgYW5kIHRo ZSA8bGl0ZXJhbD5QTEFOX0FEVklDRTwvbGl0ZXJhbD4gb3B0aW9uIHdpbGwKKyAgc2hvdyBwbGFu IGFkdmljZS4gIFF1ZXJ5IGlkZW50aWZpZXJzIGNhbiBhbHNvIGJlIG9idGFpbmVkIHRocm91Z2gg dG9vbHMKKyAgc3VjaCBhcyA8eHJlZiBsaW5rZW5kPSJwZ3N0YXRzdGF0ZW1lbnRzIiAvPiBvcgor ICA8eHJlZiBsaW5rZW5kPSJtb25pdG9yaW5nLXBnLXN0YXQtYWN0aXZpdHktdmlldyIgLz4sIGJ1 dCB0aGVzZSB0b29scworICB3aWxsIG5vdCBwcm92aWRlIHBsYW4gYWR2aWNlIHN0cmluZ3MuIE5v dGUgdGhhdAorICA8eHJlZiBsaW5rZW5kPSJndWMtY29tcHV0ZS1xdWVyeS1pZCIgLz4gbXVzdCBi ZSBlbmFibGVkIGZvciBxdWVyeQorICBpZGVudGlmaWVycyB0byBiZSBjb21wdXRlZDsgaWYgc2V0 IHRvIDxsaXRlcmFsPmF1dG88L2xpdGVyYWw+LCBsb2FkaW5nCisgIDxsaXRlcmFsPnBnX3N0YXNo X2FkdmljZTwvbGl0ZXJhbD4gd2lsbCBlbmFibGUgaXQgYXV0b21hdGljYWxseS4KKyA8L3BhcmE+ CisKKyA8cGFyYT4KKyAgR2VuZXJhbGx5LCB0aGUgZmFjdCB0aGF0IHRoZSBwbGFubmVyIGlzIGFi bGUgdG8gY2hhbmdlIHF1ZXJ5IHBsYW5zIGFzCisgIHRoZSB1bmRlcmx5aW5nIGRpc3RyaWJ1dGlv biBvZiBkYXRhIGNoYW5nZXMgaXMgYSBmZWF0dXJlLCBub3QgYSBidWcuCisgIE1vcmVvdmVyLCBh cHBseWluZyBwbGFuIGFkdmljZSBjYW4gaGF2ZSBhIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgY29z dCBldmVuCisgIHdoZW4gaXQgZG9lcyBub3QgcmVzdWx0IGluIGEgY2hhbmdlIHRvIHRoZSBxdWVy eSBwbGFuLiBUaGVyZWZvcmUsIGl0IGlzCisgIGEgZ29vZCBpZGVhIHRvIHVzZSB0aGlzIGZlYXR1 cmUgb25seSB3aGVuIGFuZCB0byB0aGUgZXh0ZW50IG5lZWRlZC4KKyAgUGxhbiBhZHZpY2Ugc3Ry aW5ncyBjYW4gYmUgdHJpbW1lZCBkb3duIHRvIG1lbnRpb24gb25seSB0aG9zZSBhc3BlY3RzCisg IG9mIHRoZSBwbGFuIHRoYXQgbmVlZCB0byBiZSBjb250cm9sbGVkLCBhbmQgdXNlZCBvbmx5IGZv ciBxdWVyaWVzIHdoZXJlCisgIHRoZXJlIGlzIGJlbGlldmVkIHRvIGJlIGEgc2lnbmlmaWNhbnQg cmlzayBvZiBwbGFubmVyIGVycm9yLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBOb3RlIHRoYXQg PGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiBjdXJyZW50bHkgbGFja3MgYSBzb3Bo aXN0aWNhdGVkCisgIHNlY3VyaXR5IG1vZGVsLiBPbmx5IHRoZSBzdXBlcnVzZXIsIG9yIGEgdXNl ciB0byB3aG9tIHRoZSBzdXBlcnVzZXIgaGFzCisgIGdyYW50ZWQgPGxpdGVyYWw+RVhFQ1VURTwv bGl0ZXJhbD4gcGVybWlzc2lvbiBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLAorICBtYXkgY3Jl YXRlIGFkdmljZSBzdGFzaGVzIG9yIGFsdGVyIHRoZWlyIGNvbnRlbnRzLCBidXQgYW55IHVzZXIg bWF5IHNldAorICA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZTwvbGl0ZXJhbD4g Zm9yIHRoZWlyIHNlc3Npb24sIGFuZCB0aGlzCisgIG1heSByZXZlYWwgdGhlIGNvbnRlbnRzIG9m IGFueSBhZHZpY2Ugc3Rhc2ggd2l0aCB0aGF0IG5hbWUuIFVzZXJzIHNob3VsZAorICBhc3N1bWUg dGhhdCBpbmZvcm1hdGlvbiBlbWJlZGRlZCBpbiBzdGFzaGVkIGFkdmljZSBzdHJpbmdzIG1heSBi ZWNvbWUgdmlzaWJsZQorICB0byBub25wcml2aWxlZ2VkIHVzZXJzLgorIDwvcGFyYT4KKworIDxz ZWN0MiBpZD0icGdzdGFzaGFkdmljZS1mdW5jdGlvbnMiPgorICA8dGl0bGU+RnVuY3Rpb25zPC90 aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PgorICAgICA8ZnVuY3Rpb24+cGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9uYW1lIHRleHQp IHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFy eT5wZ19jcmVhdGVfYWR2aWNlX3N0YXNoPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgQ3JlYXRlcyBh IG5ldywgZW1wdHkgYWR2aWNlIHN0YXNoIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50 cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19kcm9wX2FkdmljZV9zdGFzaChzdGFz aF9uYW1lIHRleHQpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+Cisg ICAgICA8cHJpbWFyeT5wZ19kcm9wX2FkdmljZV9zdGFzaDwvcHJpbWFyeT4KKyAgICAgPC9pbmRl eHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAg IERyb3BzIHRoZSBuYW1lZCBhZHZpY2Ugc3Rhc2ggYW5kIGFsbCBvZiBpdHMgZW50cmllcy4KKyAg ICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZh cmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX3NldF9zdGFzaGVkX2Fk dmljZShzdGFzaF9uYW1lIHRleHQsIHF1ZXJ5X2lkIGJpZ2ludCwKKyAgICAgICBhZHZpY2Vfc3Ry aW5nIHRleHQpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAg ICA8cHJpbWFyeT5wZ19zZXRfc3Rhc2hlZF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBT dG9yZXMgYW4gYWR2aWNlIHN0cmluZyBpbiB0aGUgbmFtZWQgYWR2aWNlIHN0YXNoLCBhc3NvY2lh dGVkIHdpdGgKKyAgICAgIHRoZSBnaXZlbiBxdWVyeSBpZGVudGlmaWVyLiBJZiBhbiBlbnRyeSBm b3IgdGhhdCBxdWVyeSBpZGVudGlmaWVyCisgICAgICBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc3Rh c2gsIGl0IGlzIHJlcGxhY2VkLiBJZgorICAgICAgPHBhcmFtZXRlcj5hZHZpY2Vfc3RyaW5nPC9w YXJhbWV0ZXI+IGlzIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LAorICAgICAgYW55IGV4aXN0aW5n IGVudHJ5IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIgaXMgcmVtb3ZlZC4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIHJl dHVybnMgc2V0b2YgKHN0YXNoX25hbWUgdGV4dCwKKyAgICAgICBudW1fZW50cmllcyBiaWdpbnQp PC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9hZHZp Y2Vfc3Rhc2hlczwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgb25lIHJvdyBmb3IgZWFj aCBhZHZpY2Ugc3Rhc2gsIHNob3dpbmcgdGhlIHN0YXNoIG5hbWUgYW5kCisgICAgICB0aGUgbnVt YmVyIG9mIGVudHJpZXMgaXQgY29udGFpbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+Cisg ICAgIDxmdW5jdGlvbj5wZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKHN0YXNoX25hbWUgdGV4 dCkgcmV0dXJucyBzZXRvZgorICAgICAgIChzdGFzaF9uYW1lIHRleHQsIHF1ZXJ5X2lkIGJpZ2lu dCwgYWR2aWNlX3N0cmluZyB0ZXh0KTwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAg ICA8cHJpbWFyeT5wZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzPC9wcmltYXJ5PgorICAgICA8 L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgor ICAgICAgUmV0dXJucyBvbmUgcm93IGZvciBlYWNoIGVudHJ5IGluIHRoZSBuYW1lZCBhZHZpY2Ug c3Rhc2guIElmCisgICAgICA8cGFyYW1ldGVyPnN0YXNoX25hbWU8L3BhcmFtZXRlcj4gaXMgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4sIHJldHVybnMKKyAgICAgIGVudHJpZXMgZnJvbSBhbGwgc3Rh c2hlcy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4K KworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnc3Rhc2hh ZHZpY2UtY29uZmlnLXBhcmFtcyI+CisgIDx0aXRsZT5Db25maWd1cmF0aW9uIFBhcmFtZXRlcnM8 L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDx2YXJuYW1lPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC92YXJuYW1lPiAo PHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0 aGUgYWR2aWNlIHN0YXNoIHRvIGNvbnN1bHQgZHVyaW5nIHF1ZXJ5CisgICAgICBwbGFubmluZy4g VGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgd2hpY2ggZGlzYWJsZXMKKyAg ICAgIHRoaXMgbW9kdWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBp ZD0icGdzdGFzaGFkdmljZS1hdXRob3IiPgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8 cGFyYT4KKyAgIFJvYmVydCBIYWFzIDxlbWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+ CisgIDwvcGFyYT4KKyA8L3NlY3QyPgorCis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCBjOWRhMWY5MWNiOS4uODQwZmE3MzY5OGEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC00MDU0LDYgKzQwNTQsMTIgQEAgcGdwYV90cm92ZV9sb29rdXBfdHlwZQogcGdwYV90 cm92ZV9yZXN1bHQKIHBncGFfdHJvdmVfc2xpY2UKIHBncGFfdW5yb2xsZWRfam9pbgorcGdzYV9l bnRyeQorcGdzYV9lbnRyeV9rZXkKK3Bnc2Ffc2hhcmVkX3N0YXRlCitwZ3NhX3N0YXNoCitwZ3Nh X3N0YXNoX2NvdW50CitwZ3NhX3N0YXNoX25hbWUKIHBnc29ja2V0CiBwZ3NxbF90aGluZ190CiBw Z3NzRW50cnkKLS0gCjIuNTEuMAoK --000000000000f2fd36064e7c81fe--