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 1vucdk-00GGYk-1Z for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 20:34:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vucdj-00FGgX-1X for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 20:34:47 +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 1vucdi-00FGgN-1e for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 20:34:47 +0000 Received: from mail-qv1-xf42.google.com ([2607:f8b0:4864:20::f42]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vucdd-00000000qtQ-0A27 for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 20:34:45 +0000 Received: by mail-qv1-xf42.google.com with SMTP id 6a1803df08f44-8947e17968eso52683796d6.0 for ; Mon, 23 Feb 2026 12:34:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1771878880; x=1772483680; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=qZ32HTb0RJ34hDDCc84s8yZfAswDlUBhpQ/NMtzSFZI=; b=2r5KKqcatCH/0/JlgbbxNXDSzuQUcHXC5CsjBaJzuSIFOVsrbyguUGf77HpKMdzroA EZyO0afUpptqyjTzhOq0GZGHufPEvCJTtQKA4aRv8xPQbsXiR6AKJWMQpLlIPnbxgh4R w1vi6H4IhMfL2jAoDBGzEzgMwy6ZYzj+lUa8R+6FGo0AlTQU4o+NaPyNYP2b8lS+5Vjp oNRbfJV0+pd100NfZ02yWRoMdm7taTekucsD7aiu69VCdwXD7vi9IptilcqRpNhhBj+1 nv1kV2qOsjPQmlN7X+Z9KU6quukL64kLrzwPuA3HiT0iyWaQ/ksLVULDkusmk6Vo53os rqxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771878880; x=1772483680; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qZ32HTb0RJ34hDDCc84s8yZfAswDlUBhpQ/NMtzSFZI=; b=L/4f5IPWbEtGYiTCiRxW77nSOR2ylK+I1/ahZD4J73KkQ/hv/8oZGI1g7SQodqix6F VqlytDAMAK8+RfFWkq5TF27QpAvtRW6j5od2UGWdQuLYUM3e9nnf0jxCj1EJmwOKCkRF yIUH7bj69Rmt7SaIN1xBNL+SRR7n5HB4hAm/Pf/WxRjP7a2cFSLC0waT06+rNjgb4B0X qEXyWmE3ri0SjrF8mHdeaZdOpoU+rOu5YQQ4JCsC8T39bLwrMDKO2yTXnieRCBsOGscr vlJefFjz49MCBnPnEHmDzzJAFzIuOTeEfKtqso+xoGBDHCys/MmXp18kjngd8d5/NMwW 9m9A== X-Forwarded-Encrypted: i=1; AJvYcCVSTatfXSdbCS93cG7su+pedjDUjogdgYVWfNda/6KLc43J6vgAJpKEWWxTtNOH2QqZmPj2PDyvWt3DJsVj@lists.postgresql.org X-Gm-Message-State: AOJu0Ywa4nybsLaX9dz/AguvU8Mofe9h4YmzGki8A0PGwSKVMniEo6em MrtoL0QgghM/1I+eYzzS1oTSe/L8Isu2viuWtEBm+CwepqMZBchSPP//8XHlFUrdV54= X-Gm-Gg: ATEYQzx0EU3RDfBaEfzRmOAy+VbamfwF6R+2/BY15XqHwd9JREoumHXJTyEtY2qoj65 LYE+2HbsSdFE9F+I6eJphY84oaPtSkzNEUYuJBWOLRLyAcCPPxdH35bZsFCC/JrAhkdjLjSTBK+ LSmo6t5eb8pTOAJhCySnS9HwiFYJi24vwOmEwk3g7YLLiLMliFFJNepzwGezsAa0Uy7kJi4S62A K7VqBoEcywj0Ki5y8Qm71esrKhXzZBlyIeI0qqAMiIEKn18uBltTrnEiQ9UQCnTPd/BJMGJ9vRV WFgjSCsPRRdB3+vPFTS0ys8/iR8li7iJKppl+K+EUVQEx0nVvzKFVAS4yUVT/UhW3+oTpSuQt0G 7UPBgjLGp/EzMBbN/J3rrG6SpK1Obp4Hu/B1+UkQAZ50WQa3NlGhSmz6jrsAlHeKKleel5qF6gO b0rYZcN6JhBqX9/vVYxx68kEeobsGiqg== X-Received: by 2002:ad4:5c6e:0:b0:894:562d:c0b9 with SMTP id 6a1803df08f44-89979d45c79mr138455706d6.0.1771878879946; Mon, 23 Feb 2026 12:34:39 -0800 (PST) Received: from ?IPV6:2605:a601:a6b0:500::1cb? ([2605:a601:a6b0:500::1cb]) by smtp.googlemail.com with ESMTPSA id 6a1803df08f44-8997e242fb8sm79124436d6.33.2026.02.23.12.34.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 23 Feb 2026 12:34:39 -0800 (PST) Content-Type: multipart/mixed; boundary="------------HNt6KID0iO9Jx5vfosVrPbzZ" Message-ID: <7faf3a59-cfe1-45cb-a972-55e05560b414@dunslane.net> Date: Mon, 23 Feb 2026 15:34:36 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall To: Mahendra Singh Thalor , jian he Cc: tushar , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <4022765f-38ee-48a3-b246-615b3f8e1c23@dunslane.net> <59d3616f-6d6d-40d5-87e2-e019e350b52d@dunslane.net> From: Andrew Dunstan Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAlwQTAQgAQQIbAwIX gAIZAQULCQgHAwUVCgkICwUWAgMBAAIeBRYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNGd BQkdEO8nAAoJEJn6f8tZ/DuBq74H/jkTR4Zi3stbw+xC7v2u3QozssK7MYPL2AsVfh7OealS h182fiWXpfvmmAB7WUHbhk9GC2RAOnHI/2d2jgKaMLAHsGYOT0YopTVIwRY43fCw/mK67yxc wmDcX+zyKfLaivNbf5A7QPLNwda98bEAMSJ8Sn652Uc6cA8t3uKGsVzbRBQOoYzjgvBCfSrE 9ql3PDNg0l4BfAqabd2f70ZUm9VAMEPrgv/v2xI7M2XiL4g5BVmqLCOwxLM8RMCotCuoweUr VO43DeBCIDwLxotMJKvGWDjBzQYlU1NPUAtNcz/gN9ITUe1VUGjyvGj4u1lxBOcQQUw7l1+T 5moZ4iZxXzvOwE0ETspYWQEIANGc4zQULOxhbqO2dyD51YhqCNRmm9oKWaqf+wmW4tpDe/VV cxAnNizd4LWCHfzpb5cHAtGkOPePMfzWVf6nvdF7d3eglbtf59+zG7O7llV0xSSoFiieQBsr GvqDInXYX/4mRRXMtyhM353/tixC9RWLs1oofyYmCPPXXY7h9R7en3B8BoVrRFcdzlIY/NFN hFGW/9dkEiGjgna2Rk6e15kln4ZvFBWUg23p93w/pqXcxY6+k/8TEk+C4R+M6w7o2PLGOjdZ +kPiUcw5H85zf/yZJwQXzisXaNduwWB6Vads9YC9dj6kPR1c4VGRqAaYL++LAEOqrlvm2Tvq QqZRtnEAEQEAAcLAfAQYAQgAJgIbDBYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNI2BQkd EODdAAoJEJn6f8tZ/DuBfw0IAKTsfD40teP/pp+bsLLMSxPXUYrrprTj7WFB5v61p6dkpSr/ qXmMlyahdxQFaPmfVgVirB1Vk/kHiWNnnGjfUV9nB2Zg9LI0Xb9/ts3LsUiRWXzG3tkMY6XL vsVOxW4XFRND9l2q+WW93aZ1DZl+fqWfYgMvsusFRhmGFOKTRfKPta2Pkv+AhA24N4+PrR5p bU4k2MO8PAGiK8eaYKGFG1bHKuAvoDoF7WXJ3FHxuWqLnKEt4dfOLm5pAe3zq1Lt6q8azT9i QWGpSAK5vQUWQHBHpiDjdPeqKZ6HiAXIIKfSmb+jrvXBqoP+D6/K7rUjG2aXiRtTIAXms9sm VRu7cmw= In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------HNt6KID0iO9Jx5vfosVrPbzZ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2026-02-23 Mo 3:58 AM, Mahendra Singh Thalor wrote: > On Mon, 23 Feb 2026 at 13:35, jian he wrote: >> On Sun, Feb 22, 2026 at 1:05 AM Andrew Dunstan wrote: >>> What about options like these?: >>> >>> n/--schema >>> N/--exclude-schema >>> t/--table >>> T/--trigger >>> I/--index >>> P/--function >>> -filter >>> >>> We're not currently doing anything about those, but do they make sense when restoring a pg_dumpall archive? > We can keep these. If we use these options, then all databases will be > created(CREATE DATABASE) and based on n/N/t/T options, objects will be > restored. > Let say customers want to restore tables tb1, tb2, tb5 from the > cluster so only these tables will be restored even if they belong to > different-different databases. OK, I left that alone. We can revisit later if it bothers anyone. > >> We should reject these options too, since these options do not make >> sense for multiple databases, IMHO. >> >>> pg_restore --clean --format=directory will produce DROP DATABASE will >>> process global objects, >>> it will also produce DROP DATABASE when processing each individual database. >>> To prevent errors during a subsequent restore, we can require >>> pg_restore --clean option must be used together with --if-exists when >>> restoring a non-plain-text dump. >>> >>> We could. Or we could just turn it on (and document that it will be turned on) in this case. I'd rather not force people to use lots of flags. >>> >> Turning it on is OK for me. >> >> The attached patch addresses the two issues described above. >> >> OK, here is my commit candidate patch. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------HNt6KID0iO9Jx5vfosVrPbzZ Content-Type: text/x-patch; charset=UTF-8; name="v19-0001-Add-non-text-output-formats-to-pg_dumpall.patch" Content-Disposition: attachment; filename="v19-0001-Add-non-text-output-formats-to-pg_dumpall.patch" Content-Transfer-Encoding: base64 RnJvbSBkMTE1YmVmZDg5OGNlMzczYmQ3ZGM3NDdiNzkyZWUzNDYxOTE4MDQwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogTW9uLCAyMyBGZWIgMjAyNiAxNTowODo1NSAtMDUwMApTdWJqZWN0OiBb UEFUQ0ggdjE5XSBBZGQgbm9uLXRleHQgb3V0cHV0IGZvcm1hdHMgdG8gcGdfZHVtcGFsbAoK cGdfZHVtcGFsbCBjYW4gbm93IHByb2R1Y2Ugb3V0cHV0IGluIGN1c3RvbSwgZGlyZWN0b3J5 LCBvciB0YXIgZm9ybWF0cwppbiBhZGRpdGlvbiB0byBwbGFpbiB0ZXh0IFNRTCBzY3JpcHRz LiBXaGVuIHVzaW5nIG5vbi10ZXh0IGZvcm1hdHMsCnBnX2R1bXBhbGwgY3JlYXRlcyBhIGRp cmVjdG9yeSBjb250YWluaW5nOgotIHRvYy5nbG86IGdsb2JhbCBkYXRhIChyb2xlcyBhbmQg dGFibGVzcGFjZXMpIGluIGN1c3RvbSBmb3JtYXQKLSBtYXAuZGF0OiBtYXBwaW5nIGJldHdl ZW4gZGF0YWJhc2UgT0lEcyBhbmQgbmFtZXMKLSBkYXRhYmFzZXMvOiBzdWJkaXJlY3Rvcnkg d2l0aCBwZXItZGF0YWJhc2UgYXJjaGl2ZXMgbmFtZWQgYnkgT0lECgpwZ19yZXN0b3JlIGlz IGV4dGVuZGVkIHRvIGhhbmRsZSB0aGVzZSBwZ19kdW1wYWxsIGFyY2hpdmVzLCByZXN0b3Jp bmcKZ2xvYmFscyBhbmQgdGhlbiBlYWNoIGRhdGFiYXNlLiBUaGUgLS1nbG9iYWxzLW9ubHkg YW5kIC0tbm8tZ2xvYmFscwpvcHRpb25zIGNvbnRyb2wgd2hpY2ggcGFydHMgYXJlIHJlc3Rv cmVkLgoKVGhpcyBlbmFibGVzIHBhcmFsbGVsIHJlc3RvcmUgb2YgcGdfZHVtcGFsbCBvdXRw dXQgYW5kIHNlbGVjdGl2ZQpyZXN0b3JhdGlvbiBvZiBpbmRpdmlkdWFsIGRhdGFiYXNlcyBm cm9tIGEgY2x1c3Rlci13aWRlIGJhY2t1cC4KCkF1dGhvcjogTWFoZW5kcmEgU2luZ2ggVGhh bG9yIDxtYWhpNnJ1bkBnbWFpbC5jb20+CkNvLUF1dGhvcjogQW5kcmV3IER1bnN0YW4gPGFu ZHJld0BkdW5zbGFuZS5uZXQ+ClJldmlld2VkLUJ5OiBUdXNoYXIgQWh1amEgPHR1c2hhci5h aHVqYUBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1CeTogSmlhbiBIZSA8amlhbi51bml2 ZXJzYWxpdHlAZ21haWwuY29tPgpSZXZpZXdlZC1CeTogVmFpYmhhdiBEYWx2aSA8dmFpYmhh di5kYWx2aUBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1CeTogU3JpbmF0aCBSZWRkeSA8 c3JpbmF0aDIxMzNAZ21haWwuY29tPgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9jYjEwMzYyMy04ZWU2LTRiYTUtYTJjOS1mMzJlM2E0OTMzZmFAZHVuc2xhbmUubmV0Ci0t LQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgIHwgMTEzICsrKy0KIGRv Yy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICB8IDEwNiArKystCiBzcmMvYmlu L3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1w L3BhcmFsbGVsLmMgICAgICAgICAgIHwgIDE0ICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaCAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jIHwgIDY3ICsrLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o IHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8ICAgMiAr LQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICAyICstCiBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgfCA4MDAgKysrKysrKysrKysrKysr KysrKysrKy0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgfCA3 MDMgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNp Yy5wbCAgICAgICB8ICA1NSArKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwu cGwgIHwgNjM5ICsrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgICAgIHwgICAxICsKIDE0IGZpbGVzIGNoYW5nZWQsIDIzMzUgaW5zZXJ0 aW9ucygrKSwgMTcxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dt bAppbmRleCA4ODM0YjdlYzE0MS4uNDllNWM5OWIwOWUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVt cGFsbC5zZ21sCkBAIC0xNiw3ICsxNiwxMCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K IAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5wZ19kdW1wYWxsPC9yZWZuYW1lPgotICA8 cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3Ru YW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQgZmlsZTwvcmVmcHVycG9zZT4K KworICA8cmVmcHVycG9zZT4KKyAgIGV4cG9ydCBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FM PC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0IG9yIHRv IG90aGVyIGZvcm1hdHMKKyAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIAogIDxy ZWZzeW5vcHNpc2Rpdj4KQEAgLTMzLDcgKzM2LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0 aW9uCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9u PiBpcyBhIHV0aWxpdHkgZm9yIHdyaXRpbmcgb3V0CiAgICAoPHF1b3RlPmR1bXBpbmc8L3F1 b3RlPikgYWxsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJh c2VzCi0gICBvZiBhIGNsdXN0ZXIgaW50byBvbmUgc2NyaXB0IGZpbGUuICBUaGUgc2NyaXB0 IGZpbGUgY29udGFpbnMKKyAgIG9mIGEgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmls ZSBvciBhbiBhcmNoaXZlLiAgVGhlIG91dHB1dCBjb250YWlucwogICAgPGFjcm9ueW0+U1FM PC9hY3JvbnltPiBjb21tYW5kcyB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IHRvIDx4cmVm CiAgICBsaW5rZW5kPSJhcHAtcHNxbCIvPiB0byByZXN0b3JlIHRoZSBkYXRhYmFzZXMuICBJ dCBkb2VzIHRoaXMgYnkKICAgIGNhbGxpbmcgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIv PiBmb3IgZWFjaCBkYXRhYmFzZSBpbiB0aGUgY2x1c3Rlci4KQEAgLTUyLDExICs1NSwxNiBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAg VGhlIFNRTCBzY3JpcHQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQu ICBVc2UgdGhlCisgICBQbGFpbiB0ZXh0IFNRTCBzY3JpcHRzIHdpbGwgYmUgd3JpdHRlbiB0 byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQogICAgPG9wdGlvbj4tZjwvb3B0aW9u Pi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiBvcHRpb24gb3Igc2hlbGwgb3BlcmF0b3JzIHRv CiAgICByZWRpcmVjdCBpdCBpbnRvIGEgZmlsZS4KICAgPC9wYXJhPgogCisgIDxwYXJhPgor ICAgQXJjaGl2ZXMgaW4gb3RoZXIgZm9ybWF0cyB3aWxsIGJlIHBsYWNlZCBpbiBhIGRpcmVj dG9yeSBuYW1lZCB1c2luZyB0aGUKKyAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4t LWZpbGU8L29wdGlvbj4sIHdoaWNoIGlzIHJlcXVpcmVkIGluIHRoaXMgY2FzZS4KKyAgPC9w YXJhPgorCiAgIDxwYXJhPgogICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRp b24+IG5lZWRzIHRvIGNvbm5lY3Qgc2V2ZXJhbAogICB0aW1lcyB0byB0aGUgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzZXJ2ZXIgKG9uY2UgcGVyCkBAIC0xMzEs MTYgKzEzOSw5MyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4K ICAgICAgICAgU2VuZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBp cyBvbWl0dGVkLCB0aGUKICAgICAgICAgc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuCisgICAg ICAgIFRoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIG9taXR0ZWQgd2hlbiA8b3B0aW9uPi0tZm9y bWF0PC9vcHRpb24+IGlzIHBsYWluLgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAg ICA8dGVybT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3Jt YXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+ LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFj ZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBTcGVjaWZ5IHRoZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWlu IGZvcm1hdCwgYWxsIHRoZSBkdW1wIGRhdGEgaXMKKyAgICAgICAgc2VudCBpbiBhIHNpbmds ZSB0ZXh0IHN0cmVhbS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICAgICBJbiBhbGwg b3RoZXIgbW9kZXMsIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmly c3QgY3JlYXRlcyB0d28gZmlsZXMsCisgICAgICAgIDxmaWxlbmFtZT50b2MuZ2xvPC9maWxl bmFtZT4gYW5kIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxlbmFtZT4sIGluIHRoZSBkaXJlY3Rv cnkKKyAgICAgICAgc3BlY2lmaWVkIGJ5IDxvcHRpb24+LS1maWxlPC9vcHRpb24+LgorICAg ICAgICBUaGUgZmlyc3QgZmlsZSBjb250YWlucyBnbG9iYWwgZGF0YSAocm9sZXMgYW5kIHRh Ymxlc3BhY2VzKSBpbiBjdXN0b20gZm9ybWF0LiBUaGUgc2Vjb25kCisgICAgICAgIGNvbnRh aW5zIGEgbWFwcGluZyBiZXR3ZWVuIGRhdGFiYXNlIE9JRHMgYW5kIG5hbWVzLiBUaGVzZSBm aWxlcyBhcmUgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBw bGljYXRpb24+LiBEYXRhIGZvciBpbmRpdmlkdWFsIGRhdGFiYXNlcyBpcyBwbGFjZWQgaW4K KyAgICAgICAgdGhlIDxmaWxlbmFtZT5kYXRhYmFzZXM8L2ZpbGVuYW1lPiBzdWJkaXJlY3Rv cnksIG5hbWVkIHVzaW5nIHRoZSBkYXRhYmFzZSdzIE9JRC4KKworICAgICAgIDx2YXJpYWJs ZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJh bD5kPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9y eTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgIE91dHB1dCBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmVzIGZvciBl YWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19y ZXN0b3JlLiBUaGUgZGlyZWN0b3J5CisgICAgICAgICAgIHdpbGwgaGF2ZSBkYXRhYmFzZSA8 dHlwZT5vaWQ8L3R5cGU+IGFzIGl0cyBuYW1lLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAg ICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRlcmFsPjwvdGVybT4KKyAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0 IGEgcGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4KKyAgICAgICAg ICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jdXN0b208L2xp dGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgor ICAgICAgICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgZm9yIGVhY2ggZGF0 YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUu IFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lk LmRtcDwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKKyAgICAg ICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgPC9w YXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisK KyAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgIE91dHB1dCBhIHRhci1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAg ICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hp dmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQudGFyPC9maWxl bmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAgICAgICA8dHlw ZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAg ICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8 L3ZhcmlhYmxlbGlzdD4KKworICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1w Ii8+IGZvciBkZXRhaWxzIG9uIGhvdyB0aGUKKyAgICAgICB2YXJpb3VzIG5vbi1wbGFpbi10 ZXh0IGFyY2hpdmUgZm9ybWF0cyB3b3JrLgorCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+ CiAgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+ PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRl bT4KICAgICAgICA8cGFyYT4KICAgICAgICAgRHVtcCBvbmx5IGdsb2JhbCBvYmplY3RzIChy b2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgIE5vdGU6IDxv cHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj4gY2Fubm90IGJlIHVzZWQgd2l0aAorICAg ICAgICA8b3B0aW9uPi0tY2xlYW48L29wdGlvbj4gd2l0aCBub24tdGV4dCBkdW1wIGZvcm1h dC4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3Rl bnRyeT4KQEAgLTkzNiwxMyArMTAyMSwyMSBAQCBleGNsdWRlIGRhdGFiYXNlIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5QQVRURVJOPC9yZXBsYWNlYWJsZT4KICA8cmVmc2Vj dDEgaWQ9ImFwcC1wZy1kdW1wYWxsLWV4Ij4KICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4K ICAgPHBhcmE+Ci0gICBUbyBkdW1wIGFsbCBkYXRhYmFzZXM6Ci0KKyAgIFRvIGR1bXAgYWxs IGRhdGFiYXNlcyBpbiBwbGFpbiB0ZXh0IGZvcm1hdCAodGhlIGRlZmF1bHQpOgogPHNjcmVl bj4KIDxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwgJmd0OyBkYi5v dXQ8L3VzZXJpbnB1dD4KIDwvc2NyZWVuPgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBU byBkdW1wIGFsbCBkYXRhYmFzZXMgdXNpbmcgb3RoZXIgZm9ybWF0czoKKzxzY3JlZW4+Cis8 cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVj dG9yeSAtZiBkYi5vdXQ8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlu cHV0PnBnX2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC1mIGRiLm91dDwvdXNlcmlucHV0Pgor PHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAtLWZvcm1hdD10YXIg LWYgZGIub3V0PC91c2VyaW5wdXQ+Cis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCiAgIDxwYXJh PgogICAgVG8gcmVzdG9yZSBkYXRhYmFzZShzKSBmcm9tIHRoaXMgZmlsZSwgeW91IGNhbiB1 c2U6CiA8c2NyZWVuPgpAQCAtOTU2LDYgKzEwNDksMTYgQEAgZXhjbHVkZSBkYXRhYmFzZSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+UEFUVEVSTjwvcmVwbGFjZWFibGU+CiAg ICB0aGUgc2NyaXB0IHdpbGwgYXR0ZW1wdCB0byBkcm9wIG90aGVyIGRhdGFiYXNlcyBpbW1l ZGlhdGVseSwgYW5kIHRoYXQKICAgIHdpbGwgZmFpbCBmb3IgdGhlIGRhdGFiYXNlIHlvdSBh cmUgY29ubmVjdGVkIHRvLgogICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJZiB0aGUgZHVt cCB3YXMgdGFrZW4gaW4gYSBub24tcGxhaW4tdGV4dCBmb3JtYXQsIHVzZQorICAgPGFwcGxp Y2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0byByZXN0b3JlIHRoZSBkYXRhYmFz ZXM6Cis8c2NyZWVuPgorPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfcmVzdG9y ZSBkYi5vdXQgLWQgcG9zdGdyZXMgLUM8L3VzZXJpbnB1dD4KKzwvc2NyZWVuPgorICAgVGhp cyB3aWxsIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gIFRvIHJlc3RvcmUgb25seSBzb21lIGRh dGFiYXNlcywgdXNlCisgICB0aGUgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlv bj4gb3B0aW9uIHRvIHNraXAgdGhvc2Ugbm90IHdhbnRlZC4KKyAgPC9wYXJhPgogIDwvcmVm c2VjdDE+CiAKICA8cmVmc2VjdDE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn X3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4 IDQyMGEzMDhhN2M3Li5mZjUwZmMyMzUzOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Jl Zi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNn bWwKQEAgLTE4LDggKzE4LDkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDxyZWZu YW1lPnBnX3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+Ci0gICByZXN0b3Jl IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9t IGFuCi0gICBhcmNoaXZlIGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwv YXBwbGljYXRpb24+CisgICByZXN0b3JlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9k dWN0bmFtZT4gZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMKKyAgIGNyZWF0ZWQgYnkgPGFwcGxp Y2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1 bXBhbGw8L2FwcGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2Pgog CkBAIC0zOCwxMyArMzksMTQgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICAgPHBh cmE+CiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRp bGl0eSBmb3IgcmVzdG9yaW5nIGEKLSAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9k dWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVm IGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAor ICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBvciBj bHVzdGVyIGZyb20gYW4gYXJjaGl2ZQorICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJh cHAtcGdkdW1wIi8+IG9yCisgICA8eHJlZiBsaW5rZW5kPSJhcHAtcGctZHVtcGFsbCIvPiBp biBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAgSXQgd2lsbCBpc3N1 ZSB0aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQotICAgZGF0YWJh c2UgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2ZWQuICBU aGUKLSAgIGFyY2hpdmUgZmlsZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9y ZTwvYXBwbGljYXRpb24+IHRvCisgICBkYXRhYmFzZSBvciBjbHVzdGVyIHRvIHRoZSBzdGF0 ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiBUaGUKKyAgIGFyY2hpdmVz IGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bwog ICAgYmUgc2VsZWN0aXZlIGFib3V0IHdoYXQgaXMgcmVzdG9yZWQsIG9yIGV2ZW4gdG8gcmVv cmRlciB0aGUgaXRlbXMKLSAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2 ZSBmaWxlcyBhcmUgZGVzaWduZWQgdG8gYmUKKyAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVk LiBUaGUgYXJjaGl2ZSBmb3JtYXRzIGFyZSBkZXNpZ25lZCB0byBiZQogICAgcG9ydGFibGUg YWNyb3NzIGFyY2hpdGVjdHVyZXMuCiAgIDwvcGFyYT4KIApAQCAtNTIsMTQgKzU0LDM0IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8 L2FwcGxpY2F0aW9uPiBjYW4gb3BlcmF0ZSBpbiB0d28gbW9kZXMuCiAgICBJZiBhIGRhdGFi YXNlIG5hbWUgaXMgc3BlY2lmaWVkLCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGlj YXRpb24+CiAgICBjb25uZWN0cyB0byB0aGF0IGRhdGFiYXNlIGFuZCByZXN0b3JlcyBhcmNo aXZlIGNvbnRlbnRzIGRpcmVjdGx5IGludG8KLSAgIHRoZSBkYXRhYmFzZS4gIE90aGVyd2lz ZSwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FMCi0gICBjb21tYW5kcyBuZWNlc3Nhcnkg dG8gcmVidWlsZCB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCBhbmQgd3JpdHRlbgorICAgdGhl IGRhdGFiYXNlLgorICAgV2hlbiByZXN0b3JpbmcgZnJvbSBhIGR1bXAgbWFkZSBieSA8YXBw bGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LAorICAgZWFjaCBkYXRhYmFzZSB3 aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZW4gdGhlIHJlc3RvcmF0aW9uIHdpbGwgYmUgcnVuIGlu IHRoYXQKKyAgIGRhdGFiYXNlLgorCisgICBPdGhlcndpc2UsIHdoZW4gYSBkYXRhYmFzZSBu YW1lIGlzIG5vdCBzcGVjaWZpZWQsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAorICAg Y29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIG9yIGNsdXN0ZXIg aXMgY3JlYXRlZCBhbmQgd3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1 dC4gIFRoaXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4g dGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlv bj4uCisgICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5w Z19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9h cHBsaWNhdGlvbj4uCisKICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgdGhl IG91dHB1dCBhcmUgdGhlcmVmb3JlIGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0aW9uPnBn X2R1bXA8L2FwcGxpY2F0aW9uPiBvcHRpb25zLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+Cisg ICBBIG5vbi1wbGFpbi10ZXh0IGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdf ZHVtcGFsbDwvYXBwbGljYXRpb24+CisgICBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEg PGZpbGVuYW1lPnRvYy5nbG88L2ZpbGVuYW1lPiBmaWxlIHdpdGggZ2xvYmFsCisgICBvYmpl Y3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBhIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxl bmFtZT4gZmlsZQorICAgbGlzdGluZyB0aGUgZGF0YWJhc2VzLCBhbmQgYSBzdWJkaXJlY3Rv cnkgZm9yIGVhY2ggZGF0YWJhc2UgY29udGFpbmluZworICAgaXRzIGFyY2hpdmUuICBXaGVu IHJlc3RvcmluZyBzdWNoIGFuIGFyY2hpdmUsCisgICA8YXBwbGljYXRpb24+cGdfcmVzdG9y ZTwvYXBwbGljYXRpb24+IGZpcnN0IHJlc3RvcmVzIGdsb2JhbCBvYmplY3RzIGZyb20KKyAg IDxmaWxlbmFtZT50b2MuZ2xvPC9maWxlbmFtZT4sIHRoZW4gcHJvY2Vzc2VzIGVhY2ggZGF0 YWJhc2UgbGlzdGVkIGluCisgICA8ZmlsZW5hbWU+bWFwLmRhdDwvZmlsZW5hbWU+LiAgTGlu ZXMgaW4gPGZpbGVuYW1lPm1hcC5kYXQ8L2ZpbGVuYW1lPiBjYW4KKyAgIGJlIGNvbW1lbnRl ZCBvdXQgd2l0aCA8bGl0ZXJhbD4jPC9saXRlcmFsPiB0byBza2lwIHJlc3RvcmluZyBzcGVj aWZpYworICAgZGF0YWJhc2VzLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiAgICBPYnZpb3Vz bHksIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2Fubm90IHJlc3Rv cmUgaW5mb3JtYXRpb24KICAgIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFyY2hpdmUg ZmlsZS4gIEZvciBpbnN0YW5jZSwgaWYgdGhlCkBAIC0xMzAsNiArMTUyLDEyIEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBpZ25vcmFibGUgZXJyb3IgbWVzc2FnZXMg d2lsbCBiZSByZXBvcnRlZCwKICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1pZi1leGlzdHM8 L29wdGlvbj4gaXMgYWxzbyBzcGVjaWZpZWQuCiAgICAgICAgPC9wYXJhPgorICAgICAgIDxw YXJhPgorICAgICAgICBXaGVuIHJlc3RvcmluZyBhIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4gYXJjaGl2ZSwKKyAgICAgICAgPG9wdGlvbj4tLWlmLWV4aXN0czwv b3B0aW9uPiBpcyBpbXBsaWVkIGJ5IDxvcHRpb24+LS1jbGVhbjwvb3B0aW9uPiwKKyAgICAg ICAgc2luY2UgZ2xvYmFsIG9iamVjdHMgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMg bWF5IG5vdCBleGlzdAorICAgICAgICBpbiB0aGUgdGFyZ2V0IGNsdXN0ZXIuCisgICAgICAg PC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKQEAg LTE1Miw2ICsxODAsOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgY29t bWFuZHMgdGhhdCBtZW50aW9uIHRoaXMgZGF0YWJhc2UuCiAgICAgICAgIEFjY2VzcyBwcml2 aWxlZ2VzIGZvciB0aGUgZGF0YWJhc2UgaXRzZWxmIGFyZSBhbHNvIHJlc3RvcmVkLAogICAg ICAgICB1bmxlc3MgPG9wdGlvbj4tLW5vLWFjbDwvb3B0aW9uPiBpcyBzcGVjaWZpZWQuCisg ICAgICAgIDxvcHRpb24+LS1jcmVhdGU8L29wdGlvbj4gaXMgcmVxdWlyZWQgd2hlbiByZXN0 b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzCisgICAgICAgIGZyb20gYSBub24tcGxhaW4tdGV4 dCBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFyYT4KQEAgLTI0Nyw2ICsyNzcs MjggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAg ICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+ PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9i YWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBh cmE+CisgICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRh Ymxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3Rvcmlu ZyBmcm9tIGEgbm9uLXBsYWluLXRleHQgYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlv bj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisgICAgICAgIE5vdGU6IDxvcHRpb24+LS1n bG9iYWxzLW9ubHk8L29wdGlvbj4gY2Fubm90IGJlIHVzZWQgd2l0aAorICAgICAgICA8b3B0 aW9uPi0tZGF0YS1vbmx5PC9vcHRpb24+LAorICAgICAgICA8b3B0aW9uPi0tc2NoZW1hLW9u bHk8L29wdGlvbj4sCisgICAgICAgIDxvcHRpb24+LS1zdGF0aXN0aWNzLW9ubHk8L29wdGlv bj4sCisgICAgICAgIDxvcHRpb24+LS1zdGF0aXN0aWNzPC9vcHRpb24+LAorICAgICAgICA8 b3B0aW9uPi0tZXhpdC1vbi1lcnJvcjwvb3B0aW9uPiwKKyAgICAgICAgPG9wdGlvbj4tLXNp bmdsZS10cmFuc2FjdGlvbjwvb3B0aW9uPiwKKyAgICAgICAgPG9wdGlvbj4tLWNsZWFuPC9v cHRpb24+LCBvcgorICAgICAgICA8b3B0aW9uPi0tdHJhbnNhY3Rpb24tc2l6ZTwvb3B0aW9u Pi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K QEAgLTU4MSw2ICs2MzMsMjggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8 L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVy bT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJl c3RvcmUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBN dWx0aXBsZSBwYXR0ZXJucyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQor ICAgICAgICA8b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4g IFRoZQorICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwv cmVwbGFjZWFibGU+IHBhcmFtZXRlciBpcworICAgICAgICBpbnRlcnByZXRlZCBhcyBhIHBh dHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFw cGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPidzIDxsaXRlcmFsPlxkPC9saXRlcmFsPgor ICAgICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5z Ii8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJhc2VzIGNhbiBhbHNvIGJlIGV4Y2x1 ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hhcmFjdGVycyBpbiB0aGUgcGF0 dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVsIHRvCisgICAgICAgIHF1 b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxsIHdpbGRjYXJkIGV4 cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMg b3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiByZXN0b3JpbmcgZnJvbSBhIG5vbi1wbGFp bi10ZXh0IGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBw bGljYXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwv dmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0 aW9uPi0tZmlsdGVyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5maWxlbmFtZTwv cmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgpAQCAtNjY5 LDcgKzc0Myw5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBpbiA8b3B0 aW9uPi0tY2xlYW48L29wdGlvbj4gbW9kZS4gIFRoaXMgc3VwcHJlc3NlcyA8cXVvdGU+ZG9l cyBub3QKICAgICAgICAgZXhpc3Q8L3F1b3RlPiBlcnJvcnMgdGhhdCBtaWdodCBvdGhlcndp c2UgYmUgcmVwb3J0ZWQuICBUaGlzCiAgICAgICAgIG9wdGlvbiBpcyBub3QgdmFsaWQgdW5s ZXNzIDxvcHRpb24+LS1jbGVhbjwvb3B0aW9uPiBpcyBhbHNvCi0gICAgICAgIHNwZWNpZmll ZC4KKyAgICAgICAgc3BlY2lmaWVkLiAgVGhpcyBvcHRpb24gaXMgaW1wbGllZCB3aGVuIHJl c3RvcmluZyBhCisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlv bj4gYXJjaGl2ZSB3aXRoCisgICAgICAgIDxvcHRpb24+LS1jbGVhbjwvb3B0aW9uPi4KICAg ICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K QEAgLTExMjUsNiArMTIwMSwxNCBAQCBDUkVBVEUgREFUQUJBU0UgZm9vIFdJVEggVEVNUExB VEUgdGVtcGxhdGUwOwogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KIAorICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIHJlc3RvcmluZyBmcm9tIGEgbm9u LXBsYWluLXRleHQgYXJjaGl2ZSBtYWRlIHVzaW5nCisgICAgICA8YXBwbGljYXRpb24+cGdf ZHVtcGFsbDwvYXBwbGljYXRpb24+LCB0aGUgPG9wdGlvbj4tLXNlY3Rpb248L29wdGlvbj4K KyAgICAgIG9wdGlvbiBtYXkgYmUgdXNlZCwgYnV0IG11c3QgaW5jbHVkZSA8b3B0aW9uPnBy ZS1kYXRhPC9vcHRpb24+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKwogICAg PC9pdGVtaXplZGxpc3Q+CiAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IDc5 YmQ1MDM2ODQxLi43YzlhNDc1OTYzYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21l c29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMTAzLDYg KzEwMyw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBs JywKICAgICAgICd0LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwnLAogICAgICAgJ3QvMDA2 X3BnX2R1bXBfY29tcHJlc3MucGwnLAorCSAgJ3QvMDA3X3BnX2R1bXBhbGwucGwnLAogICAg ICAgJ3QvMDEwX2R1bXBfY29ubnN0ci5wbCcsCiAgICAgXSwKICAgfSwKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVs LmMKaW5kZXggNTZjYjJjMWYzMmQuLmEyODU2MWZiZDg0IDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpA QCAtMzMzLDYgKzMzMywyMCBAQCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhY KQogCW9uX2V4aXRfbmljZWx5KGFyY2hpdmVfY2xvc2VfY29ubmVjdGlvbiwgJnNodXRkb3du X2luZm8pOwogfQogCisvKgorICogVXBkYXRlIHRoZSBhcmNoaXZlIGhhbmRsZSBpbiB0aGUg b25fZXhpdCBjYWxsYmFjayByZWdpc3RlcmVkIGJ5CisgKiBvbl9leGl0X2Nsb3NlX2FyY2hp dmUoKS4gV2hlbiBwZ19yZXN0b3JlIHByb2Nlc3NlcyBhIHBnX2R1bXBhbGwgYXJjaGl2ZQor ICogY29udGFpbmluZyBtdWx0aXBsZSBkYXRhYmFzZXMsIGVhY2ggZGF0YWJhc2UgaXMgcmVz dG9yZWQgZnJvbSBhIHNlcGFyYXRlCisgKiBhcmNoaXZlLiBBZnRlciBjbG9zaW5nIG9uZSBh cmNoaXZlIGFuZCBvcGVuaW5nIHRoZSBuZXh0LCB3ZSB1cGRhdGUgdGhlCisgKiBzaHV0ZG93 bl9pbmZvIHRvIHJlZmVyZW5jZSB0aGUgbmV3IGFyY2hpdmUgaGFuZGxlIHNvIHRoZSBjbGVh bnVwIGNhbGxiYWNrCisgKiB3aWxsIGNsb3NlIHRoZSBjb3JyZWN0IGFyY2hpdmUgb24gZXhp dC4KKyAqLwordm9pZAorcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAq QUhYKQoreworCXNodXRkb3duX2luZm8uQUhYID0gQUhYOworfQorCiAvKgogICogb25fZXhp dF9uaWNlbHkgaGFuZGxlciBmb3Igc2h1dHRpbmcgZG93biBkYXRhYmFzZSBjb25uZWN0aW9u cyBhbmQKICAqIHdvcmtlciBwcm9jZXNzZXMgY2xlYW5seS4KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApp bmRleCAyZjhkOTc5OWMzMC4uZmRhOTEyYmEwYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAg LTMxMyw3ICszMTMsNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhBcmNoaXZl ICpBSCwgRHVtcE9wdGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRlcm4g dm9pZCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4 dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBS ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpOwogCiAvKiBP cGVuIGFuIGV4aXN0aW5nIGFyY2hpdmUgKi8KIGV4dGVybiBBcmNoaXZlICpPcGVuQXJjaGl2 ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQpOwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDdhZmNjMDg1OWM4Li5kZjhh NjlkM2I3OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODYs NyArODYsNyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgp Owogc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGlj IHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNn LCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpB SCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKwkJCQkJICBjb25zdCBwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEpOwog c3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCk7CiBzdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KTsKIApAQCAtMzM5LDkgKzMzOSwxNCBAQCBQ cm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCkKIAkJU3RyaWN0TmFt ZXNDaGVjayhyb3B0KTsKIH0KIAotLyogUHVibGljICovCisvKgorICogUmVzdG9yZUFyY2hp dmUKKyAqCisgKiBJZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50 byBmaWxlIGFzIHdlIGFyZSByZXN0b3JpbmcgZHVtcAorICogb2YgbXVsdGlwbGUgZGF0YWJh c2VzIHdoaWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxsLgorICovCiB2b2lkCi1SZXN0b3Jl QXJjaGl2ZShBcmNoaXZlICpBSFgpCitSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJv b2wgYXBwZW5kX2RhdGEpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRs ZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CkBA IC00NTgsNyArNDYzLDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCSAqLwog CXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSB8fCByb3B0LT5j b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQotCQlT ZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjKTsK KwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3Bl YywgYXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBk YXRhYmFzZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzYxLDYgKzc2NiwxOSBAQCBSZXN0b3Jl QXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJCQlpZiAoKHRlLT5yZXFzICYgKFJFUV9TQ0hFTUEg fCBSRVFfREFUQSB8IFJFUV9TVEFUUykpID09IDApCiAJCQkJY29udGludWU7CQkvKiBpZ25v cmUgaWYgbm90IHRvIGJlIGR1bXBlZCBhdCBhbGwgKi8KIAorCQkJLyogU2tpcCBpZiBuby10 YWJsZXNwYWNlIGlzIGdpdmVuLiAqLworCQkJaWYgKHJvcHQtPm5vVGFibGVzcGFjZSAmJiB0 ZSAmJiB0ZS0+ZGVzYyAmJgorCQkJCShzdHJjbXAodGUtPmRlc2MsICJUQUJMRVNQQUNFIikg PT0gMCkpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBTa2lwIERST1AgREFUQUJB U0UvUk9MRVMvVEFCTEVTUEFDRSBpZiB3ZSBkaWRuJ3Qgc3BlY2lmeQorCQkJICogLS1jbGVh bgorCQkJICovCisJCQlpZiAoIXJvcHQtPmRyb3BTY2hlbWEgJiYgdGUgJiYgdGUtPmRlc2Mg JiYKKwkJCQlzdHJjbXAodGUtPmRlc2MsICJEUk9QX0dMT0JBTCIpID09IDApCisJCQkJY29u dGludWU7CisKIAkJCXN3aXRjaCAoX3RvY0VudHJ5UmVzdG9yZVBhc3ModGUpKQogCQkJewog CQkJCWNhc2UgUkVTVE9SRV9QQVNTX01BSU46CkBAIC0xMzE2LDcgKzEzMzQsNyBAQCBQcmlu dFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJ aWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBv dXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUs IG91dF9jb21wcmVzc2lvbl9zcGVjLCBmYWxzZSk7CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBf c3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9j YWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCkBAIC0xNjkxLDExICsxNzA5LDE1IEBA IGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTdHVmZiBiZWxvdyBoZXJlIHNob3Vs ZCBiZSAncHJpdmF0ZScgdG8gdGhlIGFyY2hpdmVyIHJvdXRpbmVzCisgKgorICogSWYgYXBw ZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFwcGVuZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUg cmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRpcGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFr ZW4gYnkgcGdfZHVtcGFsbC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwog CiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJlc3NGaWxl SGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE3MTUsNyArMTczNyw3IEBA IFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJ ZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFyY2hN b2RlQXBwZW5kKQorCWlmIChhcHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFw cGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFS WV9XOwpAQCAtMjM5MSw3ICsyNDEzLDcgQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNw ZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCiAJLyogaW5pdGlhbGl6ZSBmb3IgYmFj a3dhcmRzIGNvbXBhdGlibGUgc3RyaW5nIHByb2Nlc3NpbmcgKi8KIAlBSC0+cHVibGljLmVu Y29kaW5nID0gMDsJLyogUEdfU1FMX0FTQ0lJICovCi0JQUgtPnB1YmxpYy5zdGRfc3RyaW5n cyA9IGZhbHNlOworCUFILT5wdWJsaWMuc3RkX3N0cmluZ3MgPSB0cnVlOwogCiAJLyogc3Fs IGVycm9yIGhhbmRsaW5nICovCiAJQUgtPnB1YmxpYy5leGl0X29uX2Vycm9yID0gdHJ1ZTsK QEAgLTMwMjcsNiArMzA0OSwxNiBAQCBfdG9jRW50cnlSZXF1aXJlZChUb2NFbnRyeSAqdGUs IHRlU2VjdGlvbiBjdXJTZWN0aW9uLCBBcmNoaXZlSGFuZGxlICpBSCkKIAkJCXJldHVybiAw OwogCX0KIAorCS8qCisJICogR2xvYmFsIG9iamVjdCBUT0MgZW50cmllcyAoZS5nLiwgUk9M RXMgb3IgVEFCTEVTUEFDRXMpIG11c3Qgbm90IGJlCisJICogaWdub3JlZC4KKwkgKi8KKwlp ZiAoc3RyY21wKHRlLT5kZXNjLCAiUk9MRSIpID09IDAgfHwKKwkJc3RyY21wKHRlLT5kZXNj LCAiUk9MRSBQUk9QRVJUSUVTIikgPT0gMCB8fAorCQlzdHJjbXAodGUtPmRlc2MsICJUQUJM RVNQQUNFIikgPT0gMCB8fAorCQlzdHJjbXAodGUtPmRlc2MsICJEUk9QX0dMT0JBTCIpID09 IDApCisJCXJldHVybiBSRVFfU0NIRU1BOworCiAJLyoKIAkgKiBQcm9jZXNzIGV4Y2x1c2lv bnMgdGhhdCBhZmZlY3QgY2VydGFpbiBjbGFzc2VzIG9mIFRPQyBlbnRyaWVzLgogCSAqLwpA QCAtMzA2Miw2ICszMDk0LDE0IEBAIF90b2NFbnRyeVJlcXVpcmVkKFRvY0VudHJ5ICp0ZSwg dGVTZWN0aW9uIGN1clNlY3Rpb24sIEFyY2hpdmVIYW5kbGUgKkFIKQogCQlpZiAocm9wdC0+ bm9fc3Vic2NyaXB0aW9ucyAmJgogCQkJc3RybmNtcCh0ZS0+dGFnLCAiU1VCU0NSSVBUSU9O Iiwgc3RybGVuKCJTVUJTQ1JJUFRJT04iKSkgPT0gMCkKIAkJCXJldHVybiAwOworCisJCS8q CisJCSAqIENvbW1lbnRzIG9uIGdsb2JhbCBvYmplY3RzIChST0xFcyBvciBUQUJMRVNQQUNF cykgc2hvdWxkIG5vdCBiZQorCQkgKiBza2lwcGVkLCBzaW5jZSBnbG9iYWwgb2JqZWN0cyB0 aGVtc2VsdmVzIGFyZSBuZXZlciBza2lwcGVkLgorCQkgKi8KKwkJaWYgKHN0cm5jbXAodGUt PnRhZywgIlJPTEUiLCBzdHJsZW4oIlJPTEUiKSkgPT0gMCB8fAorCQkJc3RybmNtcCh0ZS0+ dGFnLCAiVEFCTEVTUEFDRSIsIHN0cmxlbigiVEFCTEVTUEFDRSIpKSA9PSAwKQorCQkJcmV0 dXJuIFJFUV9TQ0hFTUE7CiAJfQogCiAJLyoKQEAgLTMwOTEsNiArMzEzMSwxNCBAQCBfdG9j RW50cnlSZXF1aXJlZChUb2NFbnRyeSAqdGUsIHRlU2VjdGlvbiBjdXJTZWN0aW9uLCBBcmNo aXZlSGFuZGxlICpBSCkKIAkJaWYgKHJvcHQtPm5vX3N1YnNjcmlwdGlvbnMgJiYKIAkJCXN0 cm5jbXAodGUtPnRhZywgIlNVQlNDUklQVElPTiIsIHN0cmxlbigiU1VCU0NSSVBUSU9OIikp ID09IDApCiAJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBTZWN1cml0eSBsYWJlbHMgb24g Z2xvYmFsIG9iamVjdHMgKFJPTEVzIG9yIFRBQkxFU1BBQ0VzKSBzaG91bGQgbm90CisJCSAq IGJlIHNraXBwZWQsIHNpbmNlIGdsb2JhbCBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlIG5ldmVy IHNraXBwZWQuCisJCSAqLworCQlpZiAoc3RybmNtcCh0ZS0+dGFnLCAiUk9MRSIsIHN0cmxl bigiUk9MRSIpKSA9PSAwIHx8CisJCQlzdHJuY21wKHRlLT50YWcsICJUQUJMRVNQQUNFIiwg c3RybGVuKCJUQUJMRVNQQUNFIikpID09IDApCisJCQlyZXR1cm4gUkVRX1NDSEVNQTsKIAl9 CiAKIAkvKiBJZiBpdCdzIGEgc3Vic2NyaXB0aW9uLCBtYXliZSBpZ25vcmUgaXQgKi8KQEAg LTM4NjUsNiArMzkxMyw5IEBAIF9nZXRPYmplY3REZXNjcmlwdGlvbihQUUV4cEJ1ZmZlciBi dWYsIGNvbnN0IFRvY0VudHJ5ICp0ZSkKIAllbHNlIGlmIChzdHJjbXAodHlwZSwgIkNBU1Qi KSA9PSAwIHx8CiAJCQkgc3RyY21wKHR5cGUsICJDSEVDSyBDT05TVFJBSU5UIikgPT0gMCB8 fAogCQkJIHN0cmNtcCh0eXBlLCAiQ09OU1RSQUlOVCIpID09IDAgfHwKKwkJCSBzdHJjbXAo dHlwZSwgIkRST1BfR0xPQkFMIikgPT0gMCB8fAorCQkJIHN0cmNtcCh0eXBlLCAiUk9MRSBQ Uk9QRVJUSUVTIikgPT0gMCB8fAorCQkJIHN0cmNtcCh0eXBlLCAiUk9MRSIpID09IDAgfHwK IAkJCSBzdHJjbXAodHlwZSwgIkRBVEFCQVNFIFBST1BFUlRJRVMiKSA9PSAwIHx8CiAJCQkg c3RyY21wKHR5cGUsICJERUZBVUxUIikgPT0gMCB8fAogCQkJIHN0cmNtcCh0eXBlLCAiRksg Q09OU1RSQUlOVCIpID09IDAgfHwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu aAppbmRleCAzMjViNTNmYzliZC4uMzY1MDczYjNlYWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmgKQEAgLTM5NCw2ICszOTQsNyBAQCBzdHJ1Y3QgX3RvY0VudHJ5 CiAKIGV4dGVybiBpbnQJcGFyYWxsZWxfcmVzdG9yZShBcmNoaXZlSGFuZGxlICpBSCwgVG9j RW50cnkgKnRlKTsKIGV4dGVybiB2b2lkIG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZl ICpBSFgpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJj aGl2ZSAqQUhYKTsKIAogZXh0ZXJuIHZvaWQgd2Fybl9vcl9leGl0X2hvcnJpYmx5KEFyY2hp dmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRm KDIsIDMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBiNWJhM2I0NmRkOS4u ZDk0ZDBkZTJhNWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFy LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcgKzgy Niw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2Ug PSBBSC0+cHVibGljLnZlcmJvc2U7CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJ UmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJj aGl2ZSAqKSBBSCwgZmFsc2UpOwogCiAJCVNldEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICop IEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNDUwY2VjMjg1 YjMuLmNlMjk2MjcwNTBmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTEyOTIsNyArMTI5Miw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlp ZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hp dmUoZm91dCwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYwppbmRleCA5ODM4OWQyMDM0Yy4uOTJkMTIxNGI0MjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYwpAQCAtMSwxMyArMSwyMCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgog ICogcGdfZHVtcGFsbC5jCisgKgkgIHBnX2R1bXBhbGwgZHVtcHMgYWxsIGRhdGFiYXNlcyBh bmQgZ2xvYmFsIG9iamVjdHMgKHJvbGVzIGFuZAorICoJICB0YWJsZXNwYWNlcykgZnJvbSBh IFBvc3RncmVTUUwgY2x1c3Rlci4KKyAqCisgKgkgIEZvciB0ZXh0IGZvcm1hdCBvdXRwdXQs IGdsb2JhbHMgYXJlIHdyaXR0ZW4gZGlyZWN0bHkgYW5kIHBnX2R1bXAgaXMKKyAqCSAgaW52 b2tlZCBmb3IgZWFjaCBkYXRhYmFzZSwgd2l0aCBhbGwgb3V0cHV0IGdvaW5nIHRvIHN0ZG91 dCBvciBhIGZpbGUuCisgKgorICoJICBGb3Igbm9uLXRleHQgZm9ybWF0cyAoY3VzdG9tLCBk aXJlY3RvcnksIHRhciksIGEgZGlyZWN0b3J5IGlzIGNyZWF0ZWQKKyAqCSAgY29udGFpbmlu ZyBhIHRvYy5nbG8gZmlsZSB3aXRoIGdsb2JhbCBvYmplY3RzLCBhIG1hcC5kYXQgZmlsZSBt YXBwaW5nCisgKgkgIGRhdGFiYXNlIE9JRHMgdG8gbmFtZXMsIGFuZCBhIGRhdGFiYXNlcy8g c3ViZGlyZWN0b3J5IHdpdGggaW5kaXZpZHVhbAorICoJICBwZ19kdW1wIGFyY2hpdmVzIGZv ciBlYWNoIGRhdGFiYXNlLgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKICAqCi0gKiBwZ19kdW1wYWxsIGZvcmNlcyBhbGwgcGdfZHVtcCBvdXRwdXQgdG8g YmUgdGV4dCwgc2luY2UgaXQgYWxzbyBvdXRwdXRzCi0gKiB0ZXh0IGludG8gdGhlIHNhbWUg b3V0cHV0IHN0cmVhbS4KLSAqCiAgKiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCiAg KgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMCw2ICszNyw3IEBACiAjaW5jbHVkZSAi ZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVk ZSAiZ2V0b3B0X2xvbmcuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKIAog LyogdmVyc2lvbiBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19kdW1wICovCiAjZGVm aW5lIFBHRFVNUF9WRVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJ T04gIlxuIgpAQCAtNjcsMTUgKzc1LDE4IEBAIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25u ICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqdXNlcm5hbWUpOwogc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4g KmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpOwot c3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpj cmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUpOwogc3RhdGljIHZvaWQg YnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNh dGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBl LCBjb25zdCBjaGFyICpvYmpuYW1lLAogCQkJCQkJCSBQUUV4cEJ1ZmZlciBidWZmZXIpOwog c3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpx dWVyeSk7CitzdGF0aWMgdm9pZCBjaGVja19mb3JfaW52YWxpZF9nbG9iYWxfbmFtZXMoUEdj b25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25u ICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxl U3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMo Y29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3Rh dGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7 CitzdGF0aWMgaW50CWNyZWF0ZUR1bXBJZCh2b2lkKTsKIAogc3RhdGljIGNoYXIgcGdfZHVt cF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwpAQCAt MTIzLDYgKzEzNCwxMSBAQCBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNs dWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3Qg ZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAogc3RhdGljIGNoYXIg KnJlc3RyaWN0X2tleTsKK3N0YXRpYyBBcmNoaXZlICpmb3V0ID0gTlVMTDsKK3N0YXRpYyBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CitzdGF0 aWMgaW50CWR1bXBJZFZhbCA9IDA7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZv cm1hdCA9IGFyY2hOdWxsOworc3RhdGljIGNvbnN0IENhdGFsb2dJZCBuaWxDYXRhbG9nSWQg PSB7MCwgMH07CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpAQCAtMTQ4 LDYgKzE2NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyJwYXNzd29y ZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7Im5vLXByaXZpbGVnZXMiLCBub19h cmd1bWVudCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBub19hcmd1bWVudCwgTlVMTCwg J3gnfSwKKwkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0YnfSwKIAog CQkvKgogCQkgKiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2ZSBhbiBlcXVpdmFs ZW50IHNob3J0IG9wdGlvbiBsZXR0ZXIKQEAgLTE5Nyw2ICsyMTQsNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hhcgkgICAq dXNlX3JvbGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7CisJ Y29uc3QgY2hhciAqZm9ybWF0X25hbWUgPSAicCI7CiAJdHJpdmFsdWUJcHJvbXB0X3Bhc3N3 b3JkID0gVFJJX0RFRkFVTFQ7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJ Z2xvYmFsc19vbmx5ID0gZmFsc2U7CkBAIC0yMDcsNiArMjI1LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCWludAkJCWMsCiAJCQkJcmV0OwogCWludAkJCW9wdGluZGV4 OworCUR1bXBPcHRpb25zIGRvcHQ7CiAKIAlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7CiAJ cGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOwpAQCAtMjQ0LDggKzI2Myw5 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl9CiAKIAlwZ2R1bXBvcHRzID0g Y3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlJbml0RHVtcE9wdGlvbnMoJmRvcHQpOwogCi0Jd2hp bGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6 dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChj ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2 d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAo YykKIAkJewpAQCAtMjczLDcgKzI5Myw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJ CWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsK LQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0X25hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsK KwkJCQlicmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CiAJ CQkJYnJlYWs7CkBAIC0zMTMsNiArMzM1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCiAJCQljYXNlICdVJzoKIAkJCQlwZ3VzZXIgPSBwZ19zdHJkdXAob3B0YXJnKTsK KwkJCQlkb3B0LmNwYXJhbXMudXNlcm5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQli cmVhazsKIAogCQkJY2FzZSAndic6CkBAIC00MzQsNiArNDU3LDMyIEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0IGZv cm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChm b3JtYXRfbmFtZSk7CisKKwkvKgorCSAqIElmIGEgbm9uLXBsYWluIGZvcm1hdCBpcyBzcGVj aWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCisJICogcGF0aCB0 byB0aGUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFy Y2hOdWxsICYmCisJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkp CisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAlcz1kfGN8dCByZXF1aXJlcyBvcHRpb24g JXMiLAorCQkJCQkgIi1GLy0tZm9ybWF0IiwgIi1mLy0tZmlsZSIpOworCQlwZ19sb2dfZXJy b3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJv Z25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwkvKiByZXN0cmljdC1rZXkgaXMg b25seSBzdXBwb3J0ZWQgd2l0aCAtLWZvcm1hdD1wbGFpbiAqLworCWlmIChhcmNoRHVtcEZv cm1hdCAhPSBhcmNoTnVsbCAmJiByZXN0cmljdF9rZXkpCisJCXBnX2ZhdGFsKCJvcHRpb24g JXMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoICVzPXBsYWluIiwKKwkJCQkgIi0tcmVzdHJpY3Qt a2V5IiwgIi0tZm9ybWF0Iik7CisKKwkvKiAtLWNsZWFuIGFuZCAtZy8tLWdsb2JhbHMtb25s eSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciBpbiBub24tdGV4dCBkdW1wICovCisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmIG91dHB1dF9jbGVhbiAmJiBnbG9iYWxzX29u bHkpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlciBpbiBub24tdGV4dCBkdW1wIiwKKwkJCQkgIi0tY2xlYW4iLCAiLWcvLS1nbG9iYWxz LW9ubHkiKTsKKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWly ZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlz IGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVk CkBAIC00OTQsNiArNTQzLDI3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlp ZiAoc2VxdWVuY2VfZGF0YSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywg IiAtLXNlcXVlbmNlLWRhdGEiKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUg aWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICog dGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQg IT0gYXJjaE51bGwpCisJeworCQlBc3NlcnQoZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBu ZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAq LworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCX0KKwllbHNlIGlmIChmaWxl bmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CisJCWlm ICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNc IjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0ZG91dDsK KwogCS8qCiAJICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSByZXN0cmljdCBrZXksIG9uZSB3 aWxsIGJlIGFwcG9pbnRlZCBmb3IgeW91LgogCSAqLwpAQCAtNTQzLDE5ICs2MTMsNiBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhj b25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9l eGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVx dWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsK LQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0J CQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0J CQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkg KiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC01OTMs MzUgKzY1MCwxMjAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChxdW90 ZV9hbGxfaWRlbnRpZmllcnMpCiAJCWV4ZWN1dGVDb21tYW5kKGNvbm4sICJTRVQgcXVvdGVf YWxsX2lkZW50aWZpZXJzID0gdHJ1ZSIpOwogCi0JZnByaW50ZihPUEYsICItLVxuLS0gUG9z dGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOwotCWlmICh2ZXJib3Nl KQotCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7Ci0KLQkvKgotCSAqIEVudGVyIHJl c3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFu ZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFy aWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBX aGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQotCSAqIGFmZmVjdGlu ZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sgcHNxbAot CSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5z IHBzcWwgd2l0aCB0aGUgZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCi0J ICovCi0JZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7 Ci0KLQkvKgotCSAqIFdlIHVzZWQgdG8gZW1pdCBcY29ubmVjdCBwb3N0Z3JlcyBoZXJlLCBi dXQgdGhhdCBzZXJ2ZWQgbm8gcHVycG9zZQotCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhp bmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcwotCSAqIGRhdGFiYXNl LiAgRXZlcnl0aGluZyB3ZSdyZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwgc28gd2hp Y2hldmVyCi0JICogZGF0YWJhc2Ugd2UncmUgY29ubmVjdGVkIHRvIGF0IHRoZSBtb21lbnQg aXMgZmluZS4KLQkgKi8KLQotCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRlIHRvIHRo ZSB0YXJnZXQgY2x1c3RlciAqLwotCWZwcmludGYoT1BGLCAiU0VUIGRlZmF1bHRfdHJhbnNh Y3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKLQotCS8qIFJlcGxpY2F0ZSBlbmNvZGlu ZyBhbmQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzIGluIG91dHB1dCAqLwotCWZwcmlu dGYoT1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAotCQkJcGdfZW5jb2Rp bmdfdG9fY2hhcihlbmNvZGluZykpOwotCWZwcmludGYoT1BGLCAiU0VUIHN0YW5kYXJkX2Nv bmZvcm1pbmdfc3RyaW5ncyA9IG9uO1xuIik7Ci0JZnByaW50ZihPUEYsICJcbiIpOworCS8q IGNyZWF0ZSBhIGFyY2hpdmUgZmlsZSBmb3IgZ2xvYmFsIGNvbW1hbmRzLiAqLworCWlmIChh cmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCVBRRXhwQnVmZmVyIHFyeSA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CisJCWNoYXIJCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisJ CWNvbnN0IGNoYXIgKmVuY25hbWU7CisKKwkJLyoKKwkJICogQ2hlY2sgdGhhdCBubyBnbG9i YWwgb2JqZWN0IG5hbWVzIGNvbnRhaW4gbmV3bGluZXMgb3IgY2FycmlhZ2UKKwkJICogcmV0 dXJucywgd2hpY2ggd291bGQgYnJlYWsgdGhlIG1hcC5kYXQgZmlsZSBmb3JtYXQuICBUaGlz IGlzIG9ubHkKKwkJICogbmVlZGVkIGZvciBzZXJ2ZXJzIG9sZGVyIHRoYW4gdjE5LCB3aGlj aCBzdGFydGVkIHByb2hpYml0aW5nIHN1Y2gKKwkJICogbmFtZXMuCisJCSAqLworCQlpZiAo c2VydmVyX3ZlcnNpb24gPCAxOTAwMDApCisJCQljaGVja19mb3JfaW52YWxpZF9nbG9iYWxf bmFtZXMoY29ubik7CisKKwkJLyogU2V0IGZpbGUgcGF0aCBmb3IgZ2xvYmFsIHNxbCBjb21t YW5kcy4gKi8KKwkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5n bG8iLCBmaWxlbmFtZSk7CisKKwkJLyogT3BlbiB0aGUgb3V0cHV0IGZpbGUgKi8KKwkJZm91 dCA9IENyZWF0ZUFyY2hpdmUoZ2xvYmFsX3BhdGgsIGFyY2hDdXN0b20sIGNvbXByZXNzaW9u X3NwZWMsCisJCQkJCQkJIGRvc3luYywgYXJjaE1vZGVXcml0ZSwgTlVMTCwgREFUQV9ESVJf U1lOQ19NRVRIT0RfRlNZTkMpOworCisJCS8qIE1ha2UgZHVtcCBvcHRpb25zIGFjY2Vzc2li bGUgcmlnaHQgYXdheSAqLworCQlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgTlVM TCk7CisKKwkJKChBcmNoaXZlSGFuZGxlICopIGZvdXQpLT5jb25uZWN0aW9uID0gY29ubjsK KwkJKChBcmNoaXZlSGFuZGxlICopIGZvdXQpLT5wdWJsaWMubnVtV29ya2VycyA9IDE7CisK KwkJLyogUmVnaXN0ZXIgdGhlIGNsZWFudXAgaG9vayAqLworCQlvbl9leGl0X2Nsb3NlX2Fy Y2hpdmUoZm91dCk7CisKKwkJLyogTGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0 byBiZSAqLworCQlmb3V0LT52ZXJib3NlID0gdmVyYm9zZTsKKworCQkvKgorCQkgKiBXZSBh bGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9y IHJlbGVhc2UKKwkJICogb2Ygb3VyIG93biBtYWpvciB2ZXJzaW9uLiAgKFNlZSBhbHNvIHZl cnNpb24gY2hlY2sgaW4KKwkJICogcGdfZHVtcGFsbC5jLikKKwkJICovCisJCWZvdXQtPm1p blJlbW90ZVZlcnNpb24gPSA5MDIwMDsKKwkJZm91dC0+bWF4UmVtb3RlVmVyc2lvbiA9IChQ R19WRVJTSU9OX05VTSAvIDEwMCkgKiAxMDAgKyA5OTsKKwkJZm91dC0+bnVtV29ya2VycyA9 IDE7CisKKwkJLyogRHVtcCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seS4gKi8KKwkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVh ZF9vbmx5ID0gb2ZmO1xuXG4iKTsKKwkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCSBuaWxD YXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBk dW1wIElEICovCisJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9ICJkZWZhdWx0X3RyYW5zYWN0 aW9uX3JlYWRfb25seSIsCisJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gImRlZmF1bHRfdHJh bnNhY3Rpb25fcmVhZF9vbmx5IiwKKwkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJF X0RBVEEsCisJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBxcnktPmRhdGEpKTsKKwkJcmVzZXRQ UUV4cEJ1ZmZlcihxcnkpOworCisJCS8qIFB1dCB0aGUgY29ycmVjdCBlbmNvZGluZyBpbnRv IHRoZSBhcmNoaXZlICovCisJCWVuY25hbWUgPSBwZ19lbmNvZGluZ190b19jaGFyKGVuY29k aW5nKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQgY2xpZW50X2VuY29k aW5nID0gIik7CisJCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChxcnksIGVuY25hbWUsIGZvdXQp OworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICI7XG4iKTsKKwkJQXJjaGl2ZUVudHJ5 KGZvdXQsCisJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJIGNy ZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9 ICJjbGllbnRfZW5jb2RpbmciLAorCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJjbGllbnRf ZW5jb2RpbmciLAorCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJ CQkJCQkJICAuY3JlYXRlU3RtdCA9IHFyeS0+ZGF0YSkpOworCQlyZXNldFBRRXhwQnVmZmVy KHFyeSk7CisKKwkJLyogUHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBzdHJpbmcgYmVoYXZpb3Ig aW50byB0aGUgYXJjaGl2ZS4gKi8KKwkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiU0VUIHN0 YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICdvbic7XG4iKTsKKwkJQXJjaGl2ZUVudHJ5 KGZvdXQsCisJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJIGNy ZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9 ICJzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MiLAorCQkJCQkJCQkgIC5kZXNjcmlwdGlv biA9ICJzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MiLAorCQkJCQkJCQkgIC5zZWN0aW9u ID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHFyeS0+ZGF0 YSkpOworCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwl9CisJZWxzZQorCXsKKwkJZnBy aW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0t XG5cbiIpOworCisJCWlmICh2ZXJib3NlKQorCQkJZHVtcFRpbWVzdGFtcCgiU3RhcnRlZCBv biIpOworCisJCS8qCisJCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkg dW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFuZHMuIEEKKwkJICogbWFsaWNpb3VzIHNvdXJj ZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJ CSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3Vj aCBzb3VyY2VzIGZyb20KKwkJICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0 b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3FsCisJCSAqIG1ldGEtY29tbWFuZHMgc28gdGhh dCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUKKwkJICogZHVt cCBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgorCQkgKi8KKwkJZnByaW50ZihPUEYsICJc XHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisKKwkJLyoKKwkJICogV2UgdXNl ZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBw dXJwb3NlCisJCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRp b25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2Un cmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvCisJCSAqIHdoaWNoZXZlciBkYXRh YmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgorCQkgKi8K KworCQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0 ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29u bHkgPSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RhbmRh cmRfY29uZm9ybWluZ19zdHJpbmdzIGluIG91dHB1dCAqLworCQlmcHJpbnRmKE9QRiwgIlNF VCBjbGllbnRfZW5jb2RpbmcgPSAnJXMnO1xuIiwKKwkJCQlwZ19lbmNvZGluZ190b19jaGFy KGVuY29kaW5nKSk7CisJCWZwcmludGYoT1BGLCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdf c3RyaW5ncyA9IG9uO1xuIik7CisJCWZwcmludGYoT1BGLCAiXG4iKTsKKwl9CiAKIAlpZiAo IWRhdGFfb25seSAmJiAhc3RhdGlzdGljc19vbmx5ICYmICFub19zY2hlbWEpCiAJewpAQCAt NjMwLDggKzc3MiwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCSAqIGRl cGVuZGVuY3kgYW5hbHlzaXMgYmVjYXVzZSBkYXRhYmFzZXMgbmV2ZXIgZGVwZW5kIG9uIGVh Y2ggb3RoZXIsCiAJCSAqIGFuZCB0YWJsZXNwYWNlcyBuZXZlciBkZXBlbmQgb24gZWFjaCBv dGhlci4gIFJvbGVzIGNvdWxkIGhhdmUKIAkJICogZ3JhbnRzIHRvIGVhY2ggb3RoZXIsIGJ1 dCBEUk9QIFJPTEUgd2lsbCBjbGVhbiB0aG9zZSB1cCBzaWxlbnRseS4KKwkJICoKKwkJICog Rm9yIG5vbi10ZXh0IGZvcm1hdHMsIHBnX2R1bXBhbGwgdW5jb25kaXRpb25hbGx5IHByb2Nl c3MgLS1jbGVhbgorCQkgKiBvcHRpb24uIEluIGNvbnRyYXN0LCBwZ19yZXN0b3JlIG9ubHkg YXBwbGllcyBpdCBpZiB0aGUgdXNlcgorCQkgKiBleHBsaWNpdGx5IHByb3ZpZGVzIHRoZSBm bGFnLiAgVGhpcyBkaXNjcmVwYW5jeSByZXNvbHZlcyBjb3JuZXIKKwkJICogY2FzZXMgd2hl cmUgcGdfcmVzdG9yZSByZXF1aXJlcyBjbGVhbnVwIGluc3RydWN0aW9ucyB0aGF0IG1heSBi ZQorCQkgKiBtaXNzaW5nIGZyb20gYSBzdGFuZGFyZCBwZ19kdW1wYWxsIG91dHB1dC4KIAkJ ICovCi0JCWlmIChvdXRwdXRfY2xlYW4pCisJCWlmIChvdXRwdXRfY2xlYW4gfHwgYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwpCiAJCXsKIAkJCWlmICghZ2xvYmFsc19vbmx5ICYmICFy b2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQogCQkJCWRyb3BEQnMoY29ubik7CkBA IC02NjUsMjggKzgxMyw0NSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQlk dW1wVGFibGVzcGFjZXMoY29ubik7CiAJfQogCi0JLyoKLQkgKiBFeGl0IHJlc3RyaWN0ZWQg bW9kZSBqdXN0IGJlZm9yZSBkdW1waW5nIHRoZSBkYXRhYmFzZXMuICBwZ19kdW1wIHdpbGwK LQkgKiBoYW5kbGUgZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJp YXRlLgotCSAqLwotCWZwcmludGYoT1BGLCAiXFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3Ry aWN0X2tleSk7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCXsKKwkJLyoK KwkJICogRXhpdCByZXN0cmljdGVkIG1vZGUganVzdCBiZWZvcmUgZHVtcGluZyB0aGUgZGF0 YWJhc2VzLiAgcGdfZHVtcAorCQkgKiB3aWxsIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVk IG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlhdGUuCisJCSAqLworCQlmcHJpbnRmKE9QRiwgIlxc dW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCX0KIAogCWlmICghZ2xvYmFs c19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQogCQlkdW1wRGF0 YWJhc2VzKGNvbm4pOwogCi0JUFFmaW5pc2goY29ubik7CisJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCXsKKwkJUFFmaW5pc2goY29ubik7CisKKwkJaWYgKHZlcmJvc2Up CisJCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsKKwkJZnByaW50ZihPUEYsICIt LVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5c biIpOwogCi0JaWYgKHZlcmJvc2UpCi0JCWR1bXBUaW1lc3RhbXAoIkNvbXBsZXRlZCBvbiIp OwotCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBk dW1wIGNvbXBsZXRlXG4tLVxuXG4iKTsKKwkJaWYgKGZpbGVuYW1lKQorCQl7CisJCQlmY2xv c2UoT1BGKTsKIAotCWlmIChmaWxlbmFtZSkKKwkJCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBm aWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLworCQkJaWYgKGRvc3luYykKKwkJCQkodm9p ZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKKwkJfQorCX0KKwllbHNlCiAJewot CQlmY2xvc2UoT1BGKTsKKwkJUmVzdG9yZU9wdGlvbnMgKnJvcHQ7CisKKwkJcm9wdCA9IE5l d1Jlc3RvcmVPcHRpb25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCBy b3B0KTsKIAotCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBub3Qg ZmF0YWwgKi8KLQkJaWYgKGRvc3luYykKLQkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFt ZSwgZmFsc2UpOworCQkvKiBNYXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJlIG91dHB1dCAq LworCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9zZUFyY2hp dmUoZm91dCk7CiAJfQogCiAJZXhpdF9uaWNlbHkoMCk7CkBAIC02OTYsMTIgKzg2MSwxNCBA QCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lk KQogewotCXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVz dGVyIGFzIGFuIFNRTCBzY3JpcHQuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVz IGV4cG9ydHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlw dCBvciB0byBvdGhlciBmb3JtYXRzLlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJV c2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1l KTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygi ICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1dCBmaWxlIG5hbWVcbiIpKTsK KwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAgIG91dHB1dCBmaWxl IGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCSAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxuIikpOwogCXByaW50 ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBtb2RlXG4iKSk7 CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRwdXQgdmVy c2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1sb2Nr LXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3Ig YSB0YWJsZSBsb2NrXG4iKSk7CkBAIC03OTYsMjQgKzk2Myw0NSBAQCBkcm9wUm9sZXMoUEdj b25uICpjb25uKQogCiAJaV9yb2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJvbG5hbWUiKTsK IAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAm JiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0g RHJvcCByb2xlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJl cyk7IGkrKykKIAl7CiAJCWNvbnN0IGNoYXIgKnJvbGVuYW1lOworCQlQUUV4cEJ1ZmZlciBk ZWxRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJCXJvbGVuYW1lID0gUFFnZXR2YWx1 ZShyZXMsIGksIGlfcm9sbmFtZSk7CiAKLQkJZnByaW50ZihPUEYsICJEUk9QIFJPTEUgJXMl cztcbiIsCi0JCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCi0JCQkJZm10SWQo cm9sZW5hbWUpKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQl7CisJ CQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgJXMlcztcbiIsCisJCQkJ CQkJICBpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKKwkJCQkJCQkgIGZtdElkKHJv bGVuYW1lKSk7CisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJfQor CQllbHNlCisJCXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgUk9MRSBJ RiBFWElTVFMgJXM7XG4iLAorCQkJCQkJCSAgZm10SWQocm9sZW5hbWUpKTsKKworCQkJQXJj aGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICov CisJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJCSBBUkNISVZF X09QVFMoLnRhZyA9IHBzcHJpbnRmKCJST0xFICVzIiwgZm10SWQocm9sZW5hbWUpKSwKKwkJ CQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIkRST1BfR0xPQkFMIiwKKwkJCQkJCQkJCSAgLnNl Y3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGRl bFFyeS0+ZGF0YSkpOworCQl9CisKKwkJZGVzdHJveVBRRXhwQnVmZmVyKGRlbFFyeSk7CiAJ fQogCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCi0JZnBy aW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAgLTgyMyw2ICsxMDExLDggQEAg c3RhdGljIHZvaWQKIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUFFFeHBCdWZmZXIg YnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQUUV4cEJ1ZmZlciBjb21tZW50X2J1ZiA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgc2VjbGFiZWxfYnVmID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaV9vaWQsCiAJ CQkJaV9yb2xuYW1lLApAQCAtODk0LDcgKzEwODQsNyBAQCBkdW1wUm9sZXMoUEdjb25uICpj b25uKQogCWlfcm9sY29tbWVudCA9IFBRZm51bWJlcihyZXMsICJyb2xjb21tZW50Iik7CiAJ aV9pc19jdXJyZW50X3VzZXIgPSBQUWZudW1iZXIocmVzLCAiaXNfY3VycmVudF91c2VyIik7 CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAg JiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0t IFJvbGVzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsg aSsrKQpAQCAtOTEzLDYgKzExMDMsOCBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCQl9 CiAKIAkJcmVzZXRQUUV4cEJ1ZmZlcihidWYpOworCQlyZXNldFBRRXhwQnVmZmVyKGNvbW1l bnRfYnVmKTsKKwkJcmVzZXRQUUV4cEJ1ZmZlcihzZWNsYWJlbF9idWYpOwogCiAJCWlmIChi aW5hcnlfdXBncmFkZSkKIAkJewpAQCAtOTg5LDE3ICsxMTgxLDUzIEBAIGR1bXBSb2xlcyhQ R2Nvbm4gKmNvbm4pCiAKIAkJaWYgKCFub19jb21tZW50cyAmJiAhUFFnZXRpc251bGwocmVz LCBpLCBpX3JvbGNvbW1lbnQpKQogCQl7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICJD T01NRU5UIE9OIFJPTEUgJXMgSVMgIiwgZm10SWQocm9sZW5hbWUpKTsKLQkJCWFwcGVuZFN0 cmluZ0xpdGVyYWxDb25uKGJ1ZiwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sY29tbWVudCks IGNvbm4pOwotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVmLCAiO1xuIik7CisJCQlhcHBl bmRQUUV4cEJ1ZmZlcihjb21tZW50X2J1ZiwgIkNPTU1FTlQgT04gUk9MRSAlcyBJUyAiLCBm bXRJZChyb2xlbmFtZSkpOworCQkJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4oY29tbWVudF9i dWYsIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbGNvbW1lbnQpLCBjb25uKTsKKwkJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKGNvbW1lbnRfYnVmLCAiO1xuIik7CiAJCX0KIAogCQlpZiAoIW5v X3NlY3VyaXR5X2xhYmVscykKIAkJCWJ1aWxkU2hTZWNMYWJlbHMoY29ubiwgInBnX2F1dGhp ZCIsIGF1dGhfb2lkLAogCQkJCQkJCSAiUk9MRSIsIHJvbGVuYW1lLAotCQkJCQkJCSBidWYp OworCQkJCQkJCSBzZWNsYWJlbF9idWYpOwogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYt PmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCXsKKwkJCWZw cmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQkJZnByaW50ZihPUEYsICIlcyIsIGNv bW1lbnRfYnVmLT5kYXRhKTsKKworCQkJaWYgKHNlY2xhYmVsX2J1Zi0+ZGF0YVswXSAhPSAn XDAnKQorCQkJCWZwcmludGYoT1BGLCAiJXMiLCBzZWNsYWJlbF9idWYtPmRhdGEpOworCQl9 CisJCWVsc2UKKwkJeworCQkJY2hhcgkgICAqdGFnID0gcHNwcmludGYoIlJPTEUgJXMiLCBm bXRJZChyb2xlbmFtZSkpOworCisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCSBuaWxD YXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyog ZHVtcCBJRCAqLworCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAorCQkJCQkJCQkJ ICAuZGVzY3JpcHRpb24gPSAiUk9MRSIsCisJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElP Tl9QUkVfREFUQSwKKwkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEpKTsKKwkJ CWlmIChjb21tZW50X2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJCUFyY2hpdmVFbnRyeShm b3V0LAorCQkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCQkg Y3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJCQkgQVJDSElWRV9PUFRTKC50 YWcgPSB0YWcsCisJCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiQ09NTUVOVCIsCisJCQkJ CQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkJCQkJICAuY3Jl YXRlU3RtdCA9IGNvbW1lbnRfYnVmLT5kYXRhKSk7CisKKwkJCWlmIChzZWNsYWJlbF9idWYt PmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCQkgbmls Q2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkv KiBkdW1wIElEICovCisJCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAorCQkJCQkJ CQkJCSAgLmRlc2NyaXB0aW9uID0gIlNFQ1VSSVRZIExBQkVMIiwKKwkJCQkJCQkJCQkgIC5z ZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0g c2VjbGFiZWxfYnVmLT5kYXRhKSk7CisJCX0KIAl9CiAKIAkvKgpAQCAtMTAwNyw3ICsxMjM1 LDcgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkgKiBXZSBkbyBpdCB0aGlzIHdheSBi ZWNhdXNlIGNvbmZpZyBzZXR0aW5ncyBmb3Igcm9sZXMgY291bGQgbWVudGlvbiB0aGUKIAkg KiBuYW1lcyBvZiBvdGhlciByb2xlcy4KIAkgKi8KLQlpZiAoUFFudHVwbGVzKHJlcykgPiAw KQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpCiAJCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWd1cmF0aW9uc1xuLS1c biIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCkBAIC0xMDE1 LDkgKzEyNDMsMTIgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAogCVBRY2xlYXIocmVz KTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiAKIAlkZXN0cm95UFFFeHBCdWZm ZXIoYnVmKTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoY29tbWVudF9idWYpOworCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihzZWNsYWJlbF9idWYpOwogfQogCiAKQEAgLTEwMzEsNiArMTI2Miw3IEBA IHN0YXRpYyB2b2lkCiBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogewogCVBR RXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgcXVl cnlidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCVBRRXhwQnVmZmVyIG9wdGJ1ZiA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCXN0YXJ0ID0g MCwKQEAgLTEwOTMsNyArMTMyNSw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNv bm4pCiAJaV9pbmhlcml0X29wdGlvbiA9IFBRZm51bWJlcihyZXMsICJpbmhlcml0X29wdGlv biIpOwogCWlfc2V0X29wdGlvbiA9IFBRZm51bWJlcihyZXMsICJzZXRfb3B0aW9uIik7CiAK LQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYg YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJv bGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOwogCiAJLyoKQEAgLTEyMjksOCArMTQ2MSw5IEBA IGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkvKiBHZW5lcmF0ZSB0 aGUgYWN0dWFsIEdSQU5UIHN0YXRlbWVudC4gKi8KIAkJCQlyZXNldFBRRXhwQnVmZmVyKG9w dGJ1Zik7Ci0JCQkJZnByaW50ZihPUEYsICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKLQkJ CQlmcHJpbnRmKE9QRiwgIiBUTyAlcyIsIGZtdElkKG1lbWJlcikpOworCQkJCXJlc2V0UFFF eHBCdWZmZXIocXVlcnlidWYpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5YnVmLCAi R1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnli dWYsICIgVE8gJXMiLCBmbXRJZChtZW1iZXIpKTsKIAkJCQlpZiAoKmFkbWluX29wdGlvbiA9 PSAndCcpCiAJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKG9wdGJ1ZiwgIkFETUlOIE9QVElP TiIpOwogCQkJCWlmIChkdW1wX2dyYW50X29wdGlvbnMpCkBAIC0xMjUxLDEwICsxNDg0LDIx IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKG9wdGJ1ZiwgIlNFVCBGQUxTRSIpOwogCQkJCX0KIAkJCQlpZiAob3B0YnVm LT5kYXRhWzBdICE9ICdcMCcpCi0JCQkJCWZwcmludGYoT1BGLCAiIFdJVEggJXMiLCBvcHRi dWYtPmRhdGEpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeWJ1ZiwgIiBXSVRIICVz Iiwgb3B0YnVmLT5kYXRhKTsKIAkJCQlpZiAoZHVtcF9ncmFudG9ycykKLQkJCQkJZnByaW50 ZihPUEYsICIgR1JBTlRFRCBCWSAlcyIsIGZtdElkKGdyYW50b3IpKTsKLQkJCQlmcHJpbnRm KE9QRiwgIjtcbiIpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeWJ1ZiwgIiBHUkFO VEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1 ZXJ5YnVmLCAiO1xuIik7CisKKwkJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJCQkJCWZwcmludGYoT1BGLCAiJXMiLCBxdWVyeWJ1Zi0+ZGF0YSk7CisJCQkJZWxzZQor CQkJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0 YWxvZyBJRCAqLworCQkJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJ CQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gcHNwcmludGYoIlJPTEUgJXMiLCBmbXRJZChy b2xlKSksCisJCQkJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlJPTEUgUFJPUEVSVElFUyIs CisJCQkJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJ CQkgIC5jcmVhdGVTdG10ID0gcXVlcnlidWYtPmRhdGEpKTsKIAkJCX0KIAkJfQogCkBAIC0x MjY1LDggKzE1MDksMTEgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAog CVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKwlkZXN0cm95UFFF eHBCdWZmZXIocXVlcnlidWYpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihvcHRidWYpOwogCi0J ZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMjkzLDcgKzE1NDAsNyBA QCBkdW1wUm9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIkZST00gcGdfY2F0 YWxvZy5wZ19wYXJhbWV0ZXJfYWNsICIKIAkJCQkJICAgIk9SREVSIEJZIDEiKTsKIAotCWlm IChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBw cml2aWxlZ2VzIG9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIik7CiAKIAlm b3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKQEAgLTEzMTgsMTQgKzE1NjUs MjUgQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQlleGl0X25pY2VseSgx KTsKIAkJfQogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5k YXRhKTsKKwkJZWxzZQorCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkgbmlsQ2F0YWxv Z0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAg SUQgKi8KKwkJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHBzcHJpbnRmKCJST0xFICVzIiwg Zm10SWQocGFyb3duZXIpKSwKKwkJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlJPTEUgUFJP UEVSVElFUyIsCisJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJ CQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEpKTsKIAogCQlmcmVlKGZwYXJuYW1l KTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwot CWZwcmludGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMzQ3LDIxICsxNjA1 LDQxIEBAIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJXSEVSRSBz cGNuYW1lICF+ICdecGdfJyAiCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7CiAKLQlpZiAoUFFu dHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgdGFibGVz cGFjZXNcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBp KyspCiAJewogCQljaGFyCSAgICpzcGNuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwor CQlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0JCWZwcmlu dGYoT1BGLCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7XG4iLAotCQkJCWlmX2V4aXN0cyA/ICJJ RiBFWElTVFMgIiA6ICIiLAotCQkJCWZtdElkKHNwY25hbWUpKTsKKwkJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQl7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnks ICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCisJCQkJCQkJICBpZl9leGlzdHMgPyAiSUYg RVhJU1RTICIgOiAiIiwKKwkJCQkJCQkgIGZtdElkKHNwY25hbWUpKTsKKwkJCWZwcmludGYo T1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQl9CisJCWVsc2UKKwkJeworCQkJYXBwZW5k UFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBUQUJMRVNQQUNFIElGIEVYSVNUUyAlcztcbiIs CisJCQkJCQkJICBmbXRJZChzcGNuYW1lKSk7CisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJ CQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBjcmVhdGVEdW1w SWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gcHNwcmlu dGYoIlRBQkxFU1BBQ0UgJXMiLCBmbXRJZChzcGNuYW1lKSksCisJCQkJCQkJCQkgIC5kZXNj cmlwdGlvbiA9ICJEUk9QX0dMT0JBTCIsCisJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElP Tl9QUkVfREFUQSwKKwkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsK KwkJfQorCisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkZWxRcnkpOwogCX0KIAogCVBRY2xlYXIo cmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC0xMzcx LDYgKzE2NDksOCBAQCBzdGF0aWMgdm9pZAogZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29u bikKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CisJUFFFeHBCdWZmZXIgY29tbWVudF9idWYgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCVBRRXhwQnVmZmVyIHNlY2xhYmVsX2J1ZiA9IGNyZWF0 ZVBRRXhwQnVmZmVyKCk7CiAJaW50CQkJaTsKIAogCS8qCkBAIC0xMzg3LDcgKzE2NjcsNyBA QCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkgICAiV0hFUkUgc3BjbmFt ZSAhfiAnXnBnXycgIgogCQkJCQkgICAiT1JERVIgQlkgMSIpOwogCi0JaWYgKFBRbnR1cGxl cyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1c blxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKQEAgLTE0 MDYsNiArMTY4Niw5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCS8qIG5l ZWRlZCBmb3IgYnVpbGRBQ0xDb21tYW5kcygpICovCiAJCWZzcGNuYW1lID0gcGdfc3RyZHVw KGZtdElkKHNwY25hbWUpKTsKIAorCQlyZXNldFBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmKTsK KwkJcmVzZXRQUUV4cEJ1ZmZlcihzZWNsYWJlbF9idWYpOworCiAJCWlmIChiaW5hcnlfdXBn cmFkZSkKIAkJewogCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVmLCAiXG4tLSBGb3IgYmlu YXJ5IHVwZ3JhZGUsIG11c3QgcHJlc2VydmUgcGdfdGFibGVzcGFjZSBvaWRcbiIpOwpAQCAt MTQ0NywyNCArMTczMCw2NyBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCiAJ CWlmICghbm9fY29tbWVudHMgJiYgc3BjY29tbWVudCAmJiBzcGNjb21tZW50WzBdICE9ICdc MCcpCiAJCXsKLQkJCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIkNPTU1FTlQgT04gVEFCTEVT UEFDRSAlcyBJUyAiLCBmc3BjbmFtZSk7Ci0JCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihi dWYsIHNwY2NvbW1lbnQsIGNvbm4pOwotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVmLCAi O1xuIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjb21tZW50X2J1ZiwgIkNPTU1FTlQgT04g VEFCTEVTUEFDRSAlcyBJUyAiLCBmc3BjbmFtZSk7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFs Q29ubihjb21tZW50X2J1Ziwgc3BjY29tbWVudCwgY29ubik7CisJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihjb21tZW50X2J1ZiwgIjtcbiIpOwogCQl9CiAKIAkJaWYgKCFub19zZWN1cml0 eV9sYWJlbHMpCiAJCQlidWlsZFNoU2VjTGFiZWxzKGNvbm4sICJwZ190YWJsZXNwYWNlIiwg c3Bjb2lkLAogCQkJCQkJCSAiVEFCTEVTUEFDRSIsIHNwY25hbWUsCi0JCQkJCQkJIGJ1Zik7 CisJCQkJCQkJIHNlY2xhYmVsX2J1Zik7CiAKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJeworCQkJZnBy aW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisKKwkJCWlmIChjb21tZW50X2J1Zi0+ZGF0 YVswXSAhPSAnXDAnKQorCQkJCWZwcmludGYoT1BGLCAiJXMiLCBjb21tZW50X2J1Zi0+ZGF0 YSk7CisKKwkJCWlmIChzZWNsYWJlbF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlmcHJp bnRmKE9QRiwgIiVzIiwgc2VjbGFiZWxfYnVmLT5kYXRhKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCWNoYXIJICAgKnRhZyA9IHBzcHJpbnRmKCJUQUJMRVNQQUNFICVzIiwgZm10SWQoZnNw Y25hbWUpKTsKKworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkgbmlsQ2F0YWxvZ0lk LAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQg Ki8KKwkJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJCQkJCQkJCSAgLmRlc2Ny aXB0aW9uID0gIlRBQkxFU1BBQ0UiLAorCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05f UFJFX0RBVEEsCisJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7CisKKwkJ CWlmIChjb21tZW50X2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJCUFyY2hpdmVFbnRyeShm b3V0LAorCQkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCQkg Y3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJCQkgQVJDSElWRV9PUFRTKC50 YWcgPSB0YWcsCisJCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiQ09NTUVOVCIsCisJCQkJ CQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkJCQkJICAuY3Jl YXRlU3RtdCA9IGNvbW1lbnRfYnVmLT5kYXRhKSk7CisKKwkJCWlmIChzZWNsYWJlbF9idWYt PmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCQkgbmls Q2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkv KiBkdW1wIElEICovCisJCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAorCQkJCQkJ CQkJCSAgLmRlc2NyaXB0aW9uID0gIlNFQ1VSSVRZIExBQkVMIiwKKwkJCQkJCQkJCQkgIC5z ZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0g c2VjbGFiZWxfYnVmLT5kYXRhKSk7CisJCX0KIAogCQlmcmVlKGZzcGNuYW1lKTsKIAkJZGVz dHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYo T1BGLCAiXG5cbiIpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihjb21tZW50X2J1Zik7CisJZGVz dHJveVBRRXhwQnVmZmVyKHNlY2xhYmVsX2J1Zik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTE0ODcs MTIgKzE4MTMsMTMgQEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJXSEVSRSBk YXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBC WSBkYXRuYW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBs ZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYo T1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdyZXMgYW5kIHRlbXBs YXRlMSlcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBp KyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CisJ CVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkJLyoKIAkJ ICogU2tpcCAicG9zdGdyZXMiIGFuZCAidGVtcGxhdGUxIjsgZHVtcERhdGFiYXNlcygpIHdp bGwgZGVhbCB3aXRoCkBAIC0xNTAzLDE1ICsxODMwLDM1IEBAIGRyb3BEQnMoUEdjb25uICpj b25uKQogCQkJc3RyY21wKGRibmFtZSwgInRlbXBsYXRlMCIpICE9IDAgJiYKIAkJCXN0cmNt cChkYm5hbWUsICJwb3N0Z3JlcyIpICE9IDApCiAJCXsKLQkJCWZwcmludGYoT1BGLCAiRFJP UCBEQVRBQkFTRSAlcyVzO1xuIiwKLQkJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDog IiIsCi0JCQkJCWZtdElkKGRibmFtZSkpOworCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQorCQkJeworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgREFU QUJBU0UgJXMlcztcbiIsCisJCQkJCQkJCSAgaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDog IiIsCisJCQkJCQkJCSAgZm10SWQoZGJuYW1lKSk7CisJCQkJZnByaW50ZihPUEYsICIlcyIs IGRlbFFyeS0+ZGF0YSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJYXBwZW5kUFFFeHBC dWZmZXIoZGVsUXJ5LCAiRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgJXM7XG4iLAorCQkJCQkJ CQkgIGZtdElkKGRibmFtZSkpOworCisJCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkJ IG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCQkJCSBjcmVhdGVEdW1wSWQo KSwJLyogZHVtcCBJRCAqLworCQkJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHBzcHJpbnRm KCJEQVRBQkFTRSAlcyIsIGZtdElkKGRibmFtZSkpLAorCQkJCQkJCQkJCSAgLmRlc2NyaXB0 aW9uID0gIkRST1BfR0xPQkFMIiwKKwkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9Q UkVfREFUQSwKKwkJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJ CQl9CisKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkZWxRcnkpOwogCQl9CiAJfQogCiAJUFFj bGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0x NTMzLDcgKzE4ODAsNyBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnVzZXJuYW1lKQogCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSk7 CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAg JiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJewogCQljaGFyCSAgICpzYW5pdGl6 ZWQ7CiAKQEAgLTE1NDgsNyArMTg5NSwxNyBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNv bm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCQltYWtlQWx0ZXJDb25maWdDb21tYW5kKGNv bm4sIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSwKIAkJCQkJCQkgICAiUk9MRSIsIHVzZXJuYW1l LCBOVUxMLCBOVUxMLAogCQkJCQkJCSAgIGJ1Zik7Ci0JCWZwcmludGYoT1BGLCAiJXMiLCBi dWYtPmRhdGEpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZw cmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQlBcmNoaXZlRW50cnko Zm91dCwKKwkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBj cmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFn ID0gcHNwcmludGYoIlJPTEUgJXMiLCBmbXRJZCh1c2VybmFtZSkpLAorCQkJCQkJCQkJICAu ZGVzY3JpcHRpb24gPSAiUk9MRSBQUk9QRVJUSUVTIiwKKwkJCQkJCQkJCSAgLnNlY3Rpb24g PSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0 YSkpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE2MTgsNiArMTk3NSw5IEBAIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uKQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlp OworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNoYXIJCWRiZmlsZXBhdGhbTUFY UEdQQVRIXTsKKwlGSUxFCSAgICptYXBfZmlsZSA9IE5VTEw7CiAKIAkvKgogCSAqIFNraXAg ZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdkIGJlIHVuYWJs ZSB0byBjb25uZWN0CkBAIC0xNjMxLDE5ICsxOTkxLDU5IEBAIGR1bXBEYXRhYmFzZXMoUEdj b25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3aXRoIC0t Y2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJTRUxF Q1QgZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJICAg IkZST00gcGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5E IGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAn dGVtcGxhdGUxJyksIGRhdG5hbWUiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJ aWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK IAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJ ICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCwgY3JlYXRl IGEgc3ViZGlyZWN0b3J5CisJICogdW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFuZCBlYWNo IGRhdGFiYXNlIGR1bXAgZmlsZSBvciBzdWJkaXJlY3RvcnkKKwkgKiB3aWxsIGJlIGNyZWF0 ZWQgaW4gdGhhdCBzdWJkaXJlY3RvcnkgYnkgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCQltYXBfZmlsZV9wYXRoW01BWFBH UEFUSF07CisJCWNoYXIJICAgKm1hcF9wcmVhbWJsZVtdID0geworCQkJIiMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IiwKKwkJCSIjIG1hcC5kYXQiLAorCQkJIiMiLAorCQkJIiMgVGhpcyBmaWxlIG1hcHMgb2lk cyB0byBkYXRhYmFzZSBuYW1lcyIsCisJCQkiIyIsCisJCQkiIyBwZ19yZXN0b3JlIHdpbGwg cmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBsaXN0ZWQgaGVyZSwgdW5sZXNzIiwKKwkJCSIj IG90aGVyd2lzZSBleGNsdWRlZC4gWW91IGNhbiBhbHNvIGluaGliaXQgcmVzdG9yYXRpb24g b2YgYSIsCisJCQkiIyBkYXRhYmFzZSBieSByZW1vdmluZyB0aGUgbGluZSBvciBjb21tZW50 aW5nIG91dCB0aGUgbGluZSB3aXRoIgorCQkJIiMgYSAjIG1hcmsuIiwKKwkJCSIjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyIsCisJCQlOVUxMCisJCX07CisKKwkJc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BB VEgsICIlcy9kYXRhYmFzZXMiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgc3ViZGly ZWN0b3J5IHdpdGggJ2RhdGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9yeS4gKi8K KwkJaWYgKG1rZGlyKGRiX3N1YmRpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSAhPSAwKQorCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9z dWJkaXIpOworCisJCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21h cC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3Jl IGRib2lkIGFuZCBkYm5hbWUpICovCisJCW1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0 aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIW1hcF9maWxlKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgpOworCisJCWZvciAo Y2hhciAqKmxpbmUgPSBtYXBfcHJlYW1ibGU7ICpsaW5lOyBsaW5lKyspCisJCQlmcHJpbnRm KG1hcF9maWxlLCAiJXNcbiIsICpsaW5lKTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgUFFu dHVwbGVzKHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUo cmVzLCBpLCAwKTsKIAkJY2hhcgkgICAqc2FuaXRpemVkOwotCQljb25zdCBjaGFyICpjcmVh dGVfb3B0czsKKwkJY2hhcgkgICAqb2lkID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOworCQlj b25zdCBjaGFyICpjcmVhdGVfb3B0cyA9ICIiOwogCQlpbnQJCQlyZXQ7CiAKIAkJLyogU2tp cCB0ZW1wbGF0ZTAsIGV2ZW4gaWYgaXQncyBub3QgbWFya2VkICFkYXRhbGxvd2Nvbm4uICov CkBAIC0xNjYwLDcgKzIwNjAsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ CXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7CiAKIAkJ c2FuaXRpemVkID0gc2FuaXRpemVfbGluZShkYm5hbWUsIHRydWUpOwotCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsK KworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwg Ii0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwog CQlmcmVlKHNhbml0aXplZCk7CiAKIAkJLyoKQEAgLTE2NzUsMjQgKzIwNzgsNDAgQEAgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCXsKIAkJCWlmIChvdXRwdXRfY2xlYW4pCiAJ CQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7Ci0JCQllbHNlCi0JCQl7Ci0J CQkJY3JlYXRlX29wdHMgPSAiIjsKLQkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQg YSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCisJCQkvKiBTaW5jZSBwZ19kdW1wIHdv bid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCisJCQllbHNlIGlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVj dCAlc1xuXG4iLCBkYm5hbWUpOwotCQkJfQorCQkJZWxzZQorCQkJCWNyZWF0ZV9vcHRzID0g IiI7CiAJCX0KIAkJZWxzZQogCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOwogCi0JCWlm IChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQogCQkJZmNsb3NlKE9QRik7CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3Jl YXRlX29wdHMpOworCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZvcm1hdCBk dW1wLCB0aGVuIGFwcGVuZCBkYm9pZCBhbmQgZGJuYW1lIHRvCisJCSAqIHRoZSBtYXAuZGF0 IGZpbGUuCisJCSAqLworCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCXsK KwkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJCXNucHJpbnRmKGRi ZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIuZG1wIiwgZGJfc3ViZGlyLCBv aWQpOworCQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCQlzbnBy aW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiLnRhciIsIGRiX3N1 YmRpciwgb2lkKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BB VEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGlyLCBvaWQpOworCisJCQkvKiBQdXQgb25l IGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFwIGZpbGUuICovCisJCQlm cHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgZGJuYW1lKTsKKwkJfQorCisJCXJl dCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzLCBkYmZpbGVwYXRoKTsKIAkJaWYg KHJldCAhPSAwKQogCQkJcGdfZmF0YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwi JXNcIiwgZXhpdGluZyIsIGRibmFtZSk7CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmls ZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCXsKIAkJCU9QRiA9IGZv cGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9QRikKQEAgLTE3MDEsNiAr MjEyMCwxMCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJfQogCX0KIAorCS8q IENsb3NlIG1hcCBmaWxlICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQor CQlmY2xvc2UobWFwX2ZpbGUpOworCiAJUFFjbGVhcihyZXMpOwogfQogCkBAIC0xNzEwLDcg KzIxMzMsNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKICAqIFJ1biBwZ19kdW1w IG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4KICAqLwogc3RhdGljIGludAot cnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMp CitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0 cywgY2hhciAqZGJmaWxlKQogewogCVBRRXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBR RXhwQnVmZmVyRGF0YSBjbWQ7CkBAIC0xNzE5LDE3ICsyMTQyLDM2IEBAIHJ1blBnRHVtcChj b25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4 cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5pdFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJp bnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAotCQkJ CQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKLQogCS8qCi0JICogSWYgd2Ug aGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdf ZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZvcm1hdCBk dW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBmb3JtYXQgdG8gdGhl IHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwotCWlmIChmaWxl bmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNt ZCwgIlwiJXNcIiAlcyAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBwZ2R1bXBv cHRzLT5kYXRhLCBkYmZpbGUsIGNyZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIg IC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0 PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PXRhciAiKTsKKwl9CiAJ ZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl7CisJCXBy aW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJ CQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOworCisJCS8qCisJCSAqIElm IHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5k IHBnX2R1bXAKKwkJICogZm9ybWF0LgorCQkgKi8KKwkJaWYgKGZpbGVuYW1lKQorCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJCWVsc2UKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8qCiAJICogQXBwZW5kIHRo ZSBkYXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVkIHN0ZW0gb2YgY29u bmVjdGlvbgpAQCAtMTgwMyw2ICsyMjQ1LDY2IEBAIGV4ZWN1dGVDb21tYW5kKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqcXVlcnkpCiB9CiAKIAorLyoKKyAqIGNoZWNrX2Zvcl9pbnZh bGlkX2dsb2JhbF9uYW1lcworICoKKyAqIENoZWNrIHRoYXQgbm8gZGF0YWJhc2UsIHJvbGUs IG9yIHRhYmxlc3BhY2UgbmFtZSBjb250YWlucyBhIG5ld2xpbmUgb3IKKyAqIGNhcnJpYWdl IHJldHVybiBjaGFyYWN0ZXIuICBTdWNoIGNoYXJhY3RlcnMgd291bGQgYnJlYWsgdGhlIG1h cC5kYXQgZmlsZQorICogZm9ybWF0IHVzZWQgZm9yIG5vbi1wbGFpbi10ZXh0IGR1bXBzLgor ICovCitzdGF0aWMgdm9pZAorY2hlY2tfZm9yX2ludmFsaWRfZ2xvYmFsX25hbWVzKFBHY29u biAqY29ubikKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisJaW50CQkJaTsKKwlQUUV4cEJ1ZmZl ciBuYW1lczsKKwlpbnQJCQljb3VudCA9IDA7CisKKwlyZXMgPSBleGVjdXRlUXVlcnkoY29u biwKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lIEFTIG9iam5hbWUsICdkYXRhYmFzZScgQVMg b2JqdHlwZSAiCisJCQkJCSAgICJGUk9NIHBnX2NhdGFsb2cucGdfZGF0YWJhc2UgIgorCQkJ CQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRjb25ubGltaXQgIT0gLTIgIgorCQkJ CQkgICAiVU5JT04gQUxMICIKKwkJCQkJICAgIlNFTEVDVCByb2xuYW1lIEFTIG9iam5hbWUs ICdyb2xlJyBBUyBvYmp0eXBlICIKKwkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5wZ19yb2xl cyAiCisJCQkJCSAgICJVTklPTiBBTEwgIgorCQkJCQkgICAiU0VMRUNUIHNwY25hbWUgQVMg b2JqbmFtZSwgJ3RhYmxlc3BhY2UnIEFTIG9ianR5cGUgIgorCQkJCQkgICAiRlJPTSBwZ19j YXRhbG9nLnBnX3RhYmxlc3BhY2UiKTsKKworCW5hbWVzID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKKworCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQorCXsKKwkJY2hh cgkgICAqb2JqbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKKwkJY2hhcgkgICAqb2Jq dHlwZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKKworCQlpZiAoc3RycGJyayhvYmpuYW1l LCAiXG5cciIpKQorCQl7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihuYW1lcywgIiAgJXM6IFwi Iiwgb2JqdHlwZSk7CisJCQlmb3IgKGNoYXIgKnAgPSBvYmpuYW1lOyAqcDsgcCsrKQorCQkJ eworCQkJCWlmICgqcCA9PSAnXG4nKQorCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihuYW1l cywgIlxcbiIpOworCQkJCWVsc2UgaWYgKCpwID09ICdccicpCisJCQkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKG5hbWVzLCAiXFxyIik7CisJCQkJZWxzZQorCQkJCQlhcHBlbmRQUUV4cEJ1 ZmZlckNoYXIobmFtZXMsICpwKTsKKwkJCX0KKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKG5h bWVzLCAiXCJcbiIpOworCQkJY291bnQrKzsKKwkJfQorCX0KKworCVBRY2xlYXIocmVzKTsK KworCWlmIChjb3VudCA+IDApCisJCXBnX2ZhdGFsKCJkYXRhYmFzZSwgcm9sZSwgb3IgdGFi bGVzcGFjZSBuYW1lcyBjb250YWluIGEgbmV3bGluZSBvciBjYXJyaWFnZSByZXR1cm4gY2hh cmFjdGVyLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIG5vbi1wbGFpbi10ZXh0IGR1bXBz OlxuJXMiLAorCQkJCSBuYW1lcy0+ZGF0YSk7CisKKwlkZXN0cm95UFFFeHBCdWZmZXIobmFt ZXMpOworfQorCisKIC8qCiAgKiBkdW1wVGltZXN0YW1wCiAgKi8KQEAgLTE4NzQsMyArMjM3 Niw0NyBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2lt cGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQor CisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICogVGhpcyB3aWxsIHZhbGlkYXRlIGR1 bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVGb3JtYXQKK3BhcnNlRHVtcEZvcm1h dChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1h dDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMiKSA9PSAwKQorCQlhcmNoRHVt cEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQs ICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxz ZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi ZGlyZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5Owor CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1w Rm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJw bGFpbiIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoVGFyOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVj b2duaXplZCBvdXRwdXQgZm9ybWF0IFwiJXNcIjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwi ZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJCSBmb3JtYXQpOworCisJcmV0dXJuIGFyY2hE dW1wRm9ybWF0OworfQorCisvKgorICogY3JlYXRlRHVtcElkCisgKgorICogUmV0dXJuIHRo ZSBuZXh0IGR1bXBJZC4KKyAqLworc3RhdGljIGludAorY3JlYXRlRHVtcElkKHZvaWQpCit7 CisJcmV0dXJuICsrZHVtcElkVmFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5kZXggODRi OGQ0MTBjOWUuLjE0ZDg4NmZjODZlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf cmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIsNyAr Miw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxp dHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBh IGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIK KyAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFs bCB1c2luZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3Jl IHdpbGwgcmVhZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwxMiArNDEsMTYgQEAK ICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVy bWlvcy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVk ZSAiY29ubmVjdGRiLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVf dXRpbHMvb3B0aW9uX3V0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxz LmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNp bmNsdWRlICJwYXJhbGxlbC5oIgpAQCAtNTQsMTggKzU4LDQxIEBACiAKIHN0YXRpYyB2b2lk IHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKTsKIHN0YXRpYyB2b2lkIHJlYWRfcmVzdG9y ZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cyk7 CitzdGF0aWMgYm9vbCBmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGly LCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMgaW50CXJlc3RvcmVfb25lX2RhdGFi YXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAor CQkJCQkJCQkgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpOworc3RhdGljIGlu dAlyZXN0b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJl c3RvcmVPcHRpb25zICpvcHRzKTsKKworc3RhdGljIGludAlyZXN0b3JlX2FsbF9kYXRhYmFz ZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJICBTaW1wbGVTdHJpbmdM aXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVt V29ya2Vycyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nv bm4gKmNvbm4sCisJCQkJCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAor CQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0 aWMgaW50CWdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjaGFyICpkdW1wZGlycGF0 aCwKKwkJCQkJCQkJCQkgICBTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworCisv KgorICogU3RvcmVzIGEgZGF0YWJhc2UgT0lEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBuYW1l LgorICovCit0eXBlZGVmIHN0cnVjdCBEYk9pZE5hbWUKK3sKKwlPaWQJCQlvaWQ7CisJY2hh cgkJc3RyW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG51bGwtdGVybWluYXRlZCBzdHJp bmcgaGVyZSAqLworfSBEYk9pZE5hbWU7CisKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0czsKIAlpbnQJCQljOwotCWludAkJ CWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsKLQlBcmNoaXZlICAgICpBSDsK IAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwog CWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJvcnMgPSAwOworCWJv b2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVk ZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dl cnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJc3RhdGlj IGludAlpZl9leGlzdHMgPSAwOwpAQCAtODksNiArMTE2LDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIs IDAsIE5VTEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJn bG9iYWxzLW9ubHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdk J30sCiAJCXsiZXhpdC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1z Y2hlbWEiLCAxLCBOVUxMLCAnTid9LApAQCAtMTQyLDYgKzE3MCw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQl7InN0YXRpc3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAm c3RhdGlzdGljc19vbmx5LCAxfSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgNH0sCiAJCXsicmVzdHJpY3Qta2V5IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws IDZ9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg N30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE3MCw3ICsxOTksNyBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdoaWxlICgoYyA9IGdl dG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpOOk9wOlA6UnNT OnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAi YWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJCQkJ CWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE5NywxMSAr MjI2LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4o b3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFy Zyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xv YmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOworCQkJCWJy ZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJ CW9wdHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7 Ci0KIAkJCWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJCQlp ZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJ CSAgUEdfTUFYX0pPQlMsCkBAIC0zMjEsNiArMzUzLDEwIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCW9wdHMtPnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1cChvcHRhcmcp OwogCQkJCWJyZWFrOwogCisJCQljYXNlIDc6CQkJCS8qIGRhdGFiYXNlIHBhdHRlcm5zIHRv IHNraXAgKi8KKwkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3Bh dHRlcm5zLCBvcHRhcmcpOworCQkJCWJyZWFrOworCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdl dG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwogCQkJCXBnX2xvZ19l cnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBw cm9nbmFtZSk7CkBAIC0zNDcsNiArMzgzLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYm ICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFu ZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3Bh dHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJy b3IoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoICVzIiwKKwkJCQkJ ICItLWV4Y2x1ZGUtZGF0YWJhc2UiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9n X2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIs IHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyogU2hvdWxkIGdldCBh dCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBjb25mdXNlZCAqLwogCWlm IChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC00MjAsNiArNDY0LDMxIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMg Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAogCQkJCSAiLTEvLS1zaW5nbGUtdHJhbnNhY3Rp b24iLCAiLS10cmFuc2FjdGlvbi1zaXplIik7CiAKKwlpZiAob3B0cy0+c2luZ2xlX3R4biAm JiBnbG9iYWxzX29ubHkpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3Qg YmUgdXNlZCB0b2dldGhlciB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkg cGdfZHVtcGFsbCIsCisJCQkJICItLXNpbmdsZS10cmFuc2FjdGlvbiIsICItZy8tLWdsb2Jh bHMtb25seSIpOworCisJaWYgKG9wdHMtPnR4bl9zaXplICYmIGdsb2JhbHNfb25seSkKKwkJ cGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdo ZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkg Ii0tdHJhbnNhY3Rpb24tc2l6ZSIsICItZy8tLWdsb2JhbHMtb25seSIpOworCisJaWYgKG9w dHMtPmV4aXRfb25fZXJyb3IgJiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9u cyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3JpbmcgYW4g YXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCSAiLS1leGl0LW9uLWVycm9y IiwgIi1nLy0tZ2xvYmFscy1vbmx5Iik7CisKKwlpZiAoZGF0YV9vbmx5ICYmIGdsb2JhbHNf b25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRv Z2V0aGVyIiwKKwkJCQkgIi1hLy0tZGF0YS1vbmx5IiwgIi1nLy0tZ2xvYmFscy1vbmx5Iik7 CisJaWYgKHNjaGVtYV9vbmx5ICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlv bnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi1zLy0tc2No ZW1hLW9ubHkiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwlpZiAoc3RhdGlzdGljc19vbmx5 ICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi0tc3RhdGlzdGljcy1vbmx5IiwgIi1nLy0t Z2xvYmFscy1vbmx5Iik7CisJaWYgKHdpdGhfc3RhdGlzdGljcyAmJiBnbG9iYWxzX29ubHkp CisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhl ciIsCisJCQkJICItLXN0YXRpc3RpY3MiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwogCS8q CiAJICogLUMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCAtMSwgYmVjYXVzZSB3ZSBjYW4ndCBj cmVhdGUgYSBkYXRhYmFzZSBpbnNpZGUKIAkgKiBhIHRyYW5zYWN0aW9uIGJsb2NrLgpAQCAt NDg1LDYgKzU1NCwxODMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCSBv cHRzLT5mb3JtYXROYW1lKTsKIAl9CiAKKwkvKgorCSAqIElmIHRvYy5nbG8gZmlsZSBpcyBw cmVzZW50LCB0aGVuIHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbQorCSAqIG1hcC5k YXQsIGJ1dCBza2lwIHJlc3RvcmluZyB0aG9zZSBtYXRjaGluZyAtLWV4Y2x1ZGUtZGF0YWJh c2UgcGF0dGVybnMuCisJICovCisJaWYgKGlucHV0RmlsZVNwZWMgIT0gTlVMTCAmJgorCQko ZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZ2xvIikpKQor CXsKKwkJY2hhcgkJZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKwkJUmVzdG9yZU9wdGlvbnMg KnRtcG9wdHMgPSBwZ19tYWxsb2MwX29iamVjdChSZXN0b3JlT3B0aW9ucyk7CisKKwkJb3B0 cy0+Zm9ybWF0ID0gYXJjaFVua25vd247CisKKwkJbWVtY3B5KHRtcG9wdHMsIG9wdHMsIHNp emVvZihSZXN0b3JlT3B0aW9ucykpOworCisJCS8qCisJCSAqIENhbiBvbmx5IHVzZSAtLWxp c3Qgb3IgLS11c2UtbGlzdCBvcHRpb25zIHdpdGggYSBzaW5nbGUgZGF0YWJhc2UKKwkJICog ZHVtcC4KKwkJICovCisJCWlmIChvcHRzLT50b2NTdW1tYXJ5KQorCQkJcGdfZmF0YWwoIm9w dGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSAiLWwvLS1saXN0Iik7CisJCWlmIChvcHRzLT50 b2NGaWxlKQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3aGVuIHJl c3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSAiLUwv LS11c2UtbGlzdCIpOworCisJCWlmIChvcHRzLT5zdHJpY3RfbmFtZXMpCisJCQlwZ19mYXRh bCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJICItLXN0cmljdC1uYW1lcyIpOworCQlp ZiAoZ2xvYmFsc19vbmx5ICYmIG9wdHMtPmRyb3BTY2hlbWEpCisJCQlwZ19mYXRhbCgib3B0 aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3Jpbmcg YW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi0tY2xlYW4iLCAi LWcvLS1nbG9iYWxzLW9ubHkiKTsKKworCQkvKgorCQkgKiBGb3IgcGdfZHVtcGFsbCBhcmNo aXZlcywgLS1jbGVhbiBpbXBsaWVzIC0taWYtZXhpc3RzIHNpbmNlIGdsb2JhbAorCQkgKiBv YmplY3RzIG1heSBub3QgZXhpc3QgaW4gdGhlIHRhcmdldCBjbHVzdGVyLgorCQkgKi8KKwkJ aWYgKG9wdHMtPmRyb3BTY2hlbWEgJiYgIW9wdHMtPmlmX2V4aXN0cykKKwkJeworCQkJb3B0 cy0+aWZfZXhpc3RzID0gMTsKKwkJCXBnX2xvZ19pbmZvKCItLWlmLWV4aXN0cyBpcyBpbXBs aWVkIGJ5IC0tY2xlYW4gZm9yIHBnX2R1bXBhbGwgYXJjaGl2ZXMiKTsKKwkJfQorCisJCWlm IChub19zY2hlbWEpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdo ZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJ ICItLW5vLXNjaGVtYSIpOworCisJCWlmIChkYXRhX29ubHkpCisJCQlwZ19mYXRhbCgib3B0 aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJICItYS8tLWRhdGEtb25seSIpOworCisJCWlmIChz dGF0aXN0aWNzX29ubHkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2Vk IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJ CQkJICItLXN0YXRpc3RpY3Mtb25seSIpOworCisJCWlmICghKG9wdHMtPmR1bXBTZWN0aW9u cyAmIERVTVBfUFJFX0RBVEEpKQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3QgZXhj bHVkZSAlcyB3aGVuIHJlc3RvcmluZyBhIHBnX2R1bXBhbGwgYXJjaGl2ZSIsCisJCQkJCSAi LS1zZWN0aW9uIiwgIi0tcHJlLWRhdGEiKTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZy b20gYSBwZ19kdW1wYWxsIGFyY2hpdmUsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgor CQkgKiBtdXN0IGJlIHNwZWNpZmllZCB1bmxlc3Mgd2UgYXJlIG9ubHkgcmVzdG9yaW5nIGds b2JhbHMuCisJCSAqLworCQlpZiAoIWdsb2JhbHNfb25seSAmJiBvcHRzLT5jcmVhdGVEQiAh PSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAlcyBtdXN0IGJlIHNwZWNpZmll ZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJ CQkJCQkgIi1DLy0tY3JlYXRlIik7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMg LS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJcGdfbG9n X2Vycm9yX2hpbnQoIkluZGl2aWR1YWwgZGF0YWJhc2VzIGNhbiBiZSByZXN0b3JlZCB1c2lu ZyB0aGVpciBzcGVjaWZpYyBhcmNoaXZlcy4iKTsKKwkJCWV4aXRfbmljZWx5KDEpOworCQl9 CisKKwkJLyoKKwkJICogQWx3YXlzIHJlc3RvcmUgZ2xvYmFsIG9iamVjdHMsIGV2ZW4gaWYg LS1leGNsdWRlLWRhdGFiYXNlIHJlc3VsdHMKKwkJICogaW4gemVybyBkYXRhYmFzZXMgdG8g cHJvY2Vzcy4gSWYgJ2dsb2JhbHMtb25seScgaXMgc2V0LCBleGl0CisJCSAqIGltbWVkaWF0 ZWx5LgorCQkgKi8KKwkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3Rv Yy5nbG8iLCBpbnB1dEZpbGVTcGVjKTsKKworCQluX2Vycm9ycyA9IHJlc3RvcmVfZ2xvYmFs X29iamVjdHMoZ2xvYmFsX3BhdGgsIHRtcG9wdHMpOworCisJCWlmIChnbG9iYWxzX29ubHkp CisJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIHNraXBwZWQgYmVjYXVzZSBv cHRpb24gJXMgd2FzIHNwZWNpZmllZCIsCisJCQkJCQkiLWcvLS1nbG9iYWxzLW9ubHkiKTsK KwkJZWxzZQorCQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9t IG1hcC5kYXQgKi8KKwkJCW5fZXJyb3JzID0gbl9lcnJvcnMgKyByZXN0b3JlX2FsbF9kYXRh YmFzZXMoaW5wdXRGaWxlU3BlYywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJCQkJCQkJ CQkJb3B0cywgbnVtV29ya2Vycyk7CisJCX0KKworCQkvKiBGcmVlIGRiIHBhdHRlcm4gbGlz dC4gKi8KKwkJc2ltcGxlX3N0cmluZ19saXN0X2Rlc3Ryb3koJmRiX2V4Y2x1ZGVfcGF0dGVy bnMpOworCX0KKwllbHNlCisJeworCQlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9 IE5VTEwpCisJCXsKKwkJCXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95KCZkYl9leGNsdWRl X3BhdHRlcm5zKTsKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2FuIGJlIHVzZWQgb25seSB3 aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJ CSAiLS1leGNsdWRlLWRhdGFiYXNlIik7CisJCX0KKworCQlpZiAoZ2xvYmFsc19vbmx5KQor CQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5n IGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJICItZy8tLWdsb2Jh bHMtb25seSIpOworCisJCS8qIFByb2Nlc3MgaWYgdG9jLmdsbyBmaWxlIGRvZXMgbm90IGV4 aXN0LiAqLworCQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKGlucHV0RmlsZVNw ZWMsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlKTsKKwl9CisKKwkvKiBEb25lLCBwcmludCBh IHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHJlc3RvcmUuICovCisJaWYgKG5f ZXJyb3JzKQorCXsKKwkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3Rv cmU6ICVkIiwgbl9lcnJvcnMpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30K KworLyoKKyAqIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMKKyAqCisgKiBUaGlzIHJlc3RvcmUg YWxsIGdsb2JhbCBvYmplY3RzLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX2dsb2JhbF9v YmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRz KQoreworCUFyY2hpdmUgICAgKkFIOworCWludAkJCW5lcnJvciA9IDA7CisKKwkvKiBTZXQg Zm9ybWF0IGFzIGN1c3RvbSBzbyB0aGF0IHRvYy5nbG8gZmlsZSBjYW4gYmUgcmVhZC4gKi8K KwlvcHRzLT5mb3JtYXQgPSBhcmNoQ3VzdG9tOworCW9wdHMtPnR4bl9zaXplID0gMDsKKwor CUFIID0gT3BlbkFyY2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKKworCVNl dEFyY2hpdmVPcHRpb25zKEFILCBOVUxMLCBvcHRzKTsKKworCW9uX2V4aXRfY2xvc2VfYXJj aGl2ZShBSCk7CisKKwkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5vaXN5IHRvIGJl ICovCisJQUgtPnZlcmJvc2UgPSBvcHRzLT52ZXJib3NlOworCisJLyogRG9uJ3Qgb3V0cHV0 IFRPQyBlbnRyeSBjb21tZW50cyB3aGVuIHJlc3RvcmluZyBnbG9iYWxzICovCisJKChBcmNo aXZlSGFuZGxlICopIEFIKS0+bm9Ub2NDb21tZW50cyA9IDE7CisKKwlBSC0+ZXhpdF9vbl9l cnJvciA9IGZhbHNlOworCisJLyogUGFyYWxsZWwgZXhlY3V0aW9uIGlzIG5vdCBzdXBwb3J0 ZWQgZm9yIGdsb2JhbCBvYmplY3QgcmVzdG9yYXRpb24uICovCisJQUgtPm51bVdvcmtlcnMg PSAxOworCisJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7CisJUmVzdG9yZUFy Y2hpdmUoQUgsIGZhbHNlKTsKKworCW5lcnJvciA9IEFILT5uX2Vycm9yczsKKworCS8qIEFI IG1heSBiZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCisJQ2xvc2VBcmNoaXZlKEFIKTsK KworCXJldHVybiBuZXJyb3I7Cit9CisKKy8qCisgKiByZXN0b3JlX29uZV9kYXRhYmFzZQor ICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFzZSB1c2luZyB0b2MuZGF0IGZp bGUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyBy ZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX29uZV9kYXRhYmFzZShjb25zdCBj aGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJIGludCBu dW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhKQoreworCUFyY2hpdmUgICAgKkFIOworCWlu dAkJCW5fZXJyb3JzOworCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRz LT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAt NDkyLDkgKzczOCwxNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKgogCSAq IFdlIGRvbid0IGhhdmUgYSBjb25uZWN0aW9uIHlldCBidXQgdGhhdCBkb2Vzbid0IG1hdHRl ci4gVGhlIGNvbm5lY3Rpb24KIAkgKiBpcyBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBpZiB3 ZSB0ZXJtaW5hdGUgdGhyb3VnaCBleGl0X25pY2VseSgpIHdoaWxlCi0JICogaXQncyBzdGls bCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBuby1vcC4KKwkg KiBpdCdzIHN0aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBh IG5vLW9wLiBJZiB3ZSBhcmUKKwkgKiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzLCB0 aGVuIG9ubHkgdXBkYXRlIEFYIGhhbmRsZSBmb3IgY2xlYW51cCBhcworCSAqIHRoZSBwcmV2 aW91cyBlbnRyeSB3YXMgYWxyZWFkeSBpbiB0aGUgYXJyYXkgYW5kIHdlIGhhZCBjbG9zZWQg cHJldmlvdXMKKwkgKiBjb25uZWN0aW9uLCBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIGFycmF5 IHNsb3QuCiAJICovCi0Jb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwlpZiAoIWFwcGVu ZF9kYXRhKQorCQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWVsc2UKKwkJcmVwbGFj ZV9vbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOwogCiAJLyogTGV0IHRoZSBhcmNoaXZlciBr bm93IGhvdyBub2lzeSB0byBiZSAqLwogCUFILT52ZXJib3NlID0gb3B0cy0+dmVyYm9zZTsK QEAgLTUxNCwyNSArNzY2LDIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWVs c2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3Jl QXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZlKEFILCBhcHBlbmRfZGF0YSk7CiAJfQog Ci0JLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCi0JaWYg KEFILT5uX2Vycm9ycykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJl c3RvcmU6ICVkIiwgQUgtPm5fZXJyb3JzKTsKKwluX2Vycm9ycyA9IEFILT5uX2Vycm9yczsK IAogCS8qIEFIIG1heSBiZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCi0JZXhpdF9jb2Rl ID0gQUgtPm5fZXJyb3JzID8gMSA6IDA7Ci0KIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0 dXJuIGV4aXRfY29kZTsKKwlyZXR1cm4gbl9lcnJvcnM7CiB9CiAKIHN0YXRpYyB2b2lkCiB1 c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMg YSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1 bXAuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIHJlc3RvcmVzIFBvc3RncmVT UUwgZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMgY3JlYXRlZCBieSBwZ19kdW1wIG9yIHBnX2R1 bXBhbGwuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXBy aW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtGSUxFXVxuIiksIHByb2duYW1lKTsKIApAQCAt NTUwLDYgKzc5OCw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50Zihf KCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xlYW4gKGRyb3ApIGRhdGFiYXNl IG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmludGYoXygiICAtQywgLS1j cmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRhdGFiYXNlXG4iKSk7 CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBleGl0IG9uIGVy cm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0t Z2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5v IGRhdGFiYXNlc1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAg ICAgICAgcmVzdG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpv YnM9TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJl c3RvcmVcbiIpKTsKIAlwcmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAg IHVzZSB0YWJsZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTU2Niw2 ICs4MTUsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAt MSwgLS1zaW5nbGUtdHJhbnNhY3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNh Y3Rpb25cbiIpKTsKIAlwcmludGYoXygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAg IGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5nIGRhdGEtb25seSByZXN0b3JlXG4iKSk7CiAJcHJp bnRmKF8oIiAgLS1lbmFibGUtcm93LXNlY3VyaXR5ICAgICAgICBlbmFibGUgcm93IHNlY3Vy aXR5XG4iKSk7CisJcHJpbnRmKF8oIiAgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gICBk byBub3QgcmVzdG9yZSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlKHMpXG4iKSk7CiAJcHJpbnRm KF8oIiAgLS1maWx0ZXI9RklMRU5BTUUgICAgICAgICAgICByZXN0b3JlIG9yIHNraXAgb2Jq ZWN0cyBiYXNlZCBvbiBleHByZXNzaW9uc1xuIgogCQkJICIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW4gRklMRU5BTUVcbiIpKTsKIAlwcmludGYoXygiICAtLWlmLWV4aXN0 cyAgICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9wcGluZyBvYmplY3Rz XG4iKSk7CkBAIC02MDEsOCArODUxLDggQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp CiAJcHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBST0xFIGJl Zm9yZSByZXN0b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRpb25z IC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rpb24gY2FuIGJlIGNvbWJpbmVk IGFuZCBzcGVjaWZpZWRcbiIKLQkJCSAibXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRp cGxlIG9iamVjdHMuXG4iKSk7CisJCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAt dCwgLVQsIC0tc2VjdGlvbiwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmVcbiIKKwkJ CSAiY29tYmluZWQgYW5kIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVs dGlwbGUgb2JqZWN0cy5cbiIpKTsKIAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5h bWUgaXMgc3VwcGxpZWQsIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwog CXByaW50ZihfKCJSZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JU KTsKIAlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQ QUNLQUdFX1VSTCk7CkBAIC03MDcsMyArOTU3LDQyMiBAQCByZWFkX3Jlc3RvcmVfZmlsdGVy cyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlmaWx0 ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIGZpbGVfZXhpc3RzX2luX2RpcmVjdG9y eQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBleGlzdHMgaW4gdGhlIGdpdmVu IGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK2ZpbGVfZXhpc3RzX2luX2RpcmVjdG9y eShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBz dGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1Ziwg TUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBn X2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJl dHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30K KworLyoKKyAqIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZQorICoKKyAqIFRoaXMgd2ls bCBtYXJrIGZvciBza2lwcGluZyBhbnkgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0 aGF0IHBhdHRlcm4gbWF0Y2ggYW4KKyAqIGVudHJ5IGluIHRoZSBkYl9leGNsdWRlX3BhdHRl cm5zIGxpc3QuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIHRvIGJl IHJlc3RvcmVkLgorICoKKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90b19y ZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lk X2xpc3QsCisJCQkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQor eworCWludAkJCWNvdW50X2RiID0gMDsKKwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQUUV4cEJ1 ZmZlciBkYl9saXQ7CisJUEdyZXN1bHQgICAqcmVzOworCisJcXVlcnkgPSBjcmVhdGVQUUV4 cEJ1ZmZlcigpOworCWRiX2xpdCA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkvKgorCSAq IFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNr aXAgcmVzdG9yaW5nLCB0aGVuCisJICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3QuCisJICov CisJZm9yIChTaW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+ aGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJP aWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1lICopIGRiX2NlbGwtPnB0cjsKKwkJYm9v bAkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisKKwkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVy eSk7CisJCXJlc2V0UFFFeHBCdWZmZXIoZGJfbGl0KTsKKworCQlhcHBlbmRTdHJpbmdMaXRl cmFsQ29ubihkYl9saXQsIGRiaWRuYW1lLT5zdHIsIGNvbm4pOworCisJCWZvciAoU2ltcGxl U3RyaW5nTGlzdENlbGwgKnBhdF9jZWxsID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBw YXRfY2VsbDsgcGF0X2NlbGwgPSBwYXRfY2VsbC0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAq IElmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB0cnkg YSBwYXR0ZXJuCisJCQkgKiBtYXRjaAorCQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNtcChk YmlkbmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFsKSA9PSAwKQorCQkJCXNraXBfZGJfcmVzdG9y ZSA9IHRydWU7CisJCQkvKiBPdGhlcndpc2UsIHRyeSBhIHBhdHRlcm4gbWF0Y2ggaWYgdGhl cmUgaXMgYSBjb25uZWN0aW9uICovCisJCQllbHNlCisJCQl7CisJCQkJaW50CQkJZG90Y250 OworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAiKTsKKwkJ CQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4oY29ubiwgcXVlcnksIHBhdF9jZWxsLT52YWwsIGZh bHNlLAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgZGJfbGl0LT5kYXRhLAorCQkJCQkJCQkJ ICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJCWlmIChkb3RjbnQgPiAwKQor CQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFsaWZpZWQgbmFtZSAodG9v IG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgZGJpZG5hbWUtPnN0cik7CisJ CQkJCVBRZmluaXNoKGNvbm4pOworCQkJCQlleGl0X25pY2VseSgxKTsKKwkJCQl9CisKKwkJ CQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOworCisJCQkJaWYgKFBR bnR1cGxlcyhyZXMpKQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJ CQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIG5hbWUgXCIlc1wiIG1hdGNoZXMgLS1leGNsdWRl LWRhdGFiYXNlIHBhdHRlcm4gXCIlc1wiIiwgZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwtPnZh bCk7CisJCQkJfQorCisJCQkJUFFjbGVhcihyZXMpOworCQkJCXJlc2V0UFFFeHBCdWZmZXIo cXVlcnkpOworCQkJfQorCisJCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJCWJyZWFrOwor CQl9CisKKwkJLyoKKwkJICogTWFyayBkYiB0byBiZSBza2lwcGVkIG9yIGluY3JlbWVudCB0 aGUgY291bnRlciBvZiBkYnMgdG8gYmUKKwkJICogcmVzdG9yZWQKKwkJICovCisJCWlmIChz a2lwX2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJh c2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisJCQlkYmlkbmFtZS0+b2lkID0gSW52YWxp ZE9pZDsKKwkJfQorCQllbHNlCisJCQljb3VudF9kYisrOworCX0KKworCWRlc3Ryb3lQUUV4 cEJ1ZmZlcihxdWVyeSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGRiX2xpdCk7CisKKwlyZXR1 cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZp bGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5k IHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNw b25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJh c2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1l X29pZF9saXN0X2Zyb21fbWZpbGUoY2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZVB0ckxpc3Qg KmRibmFtZV9vaWRfbGlzdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBsaW5lYnVmOworCUZJTEUJ ICAgKnBmaWxlOworCWNoYXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlpbnQJCQlj b3VudCA9IDA7CisJaW50CQkJbGVuOworCisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIG1h cC5kYXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMgdGhlcmUgaXMK KwkgKiBubyBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghZmlsZV9leGlzdHNf aW5fZGlyZWN0b3J5KGR1bXBkaXJwYXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2lu Zm8oImRhdGFiYXNlIHJlc3RvcmluZyBpcyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIg ZG9lcyBub3QgZXhpc3QgaW4gZGlyZWN0b3J5IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRp cnBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlsZW4gPSBzdHJsZW4oZHVtcGRpcnBhdGgp OworCisJLyogVHJpbSBzbGFzaCBmcm9tIGRpcmVjdG9yeSBuYW1lLiAqLworCXdoaWxlIChs ZW4gPiAxICYmIGR1bXBkaXJwYXRoW2xlbiAtIDFdID09ICcvJykKKwl7CisJCWR1bXBkaXJw YXRoW2xlbiAtIDFdID0gJ1wwJzsKKwkJbGVuLS07CisJfQorCisJc25wcmludGYobWFwX2Zp bGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8q IE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwg UEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmlsZV9wYXRoKTsKKworCWluaXRT dHJpbmdJbmZvKCZsaW5lYnVmKTsKKworCS8qIEFwcGVuZCBhbGwgdGhlIGRibmFtZS9kYl9v aWQgY29tYmluYXRpb25zIHRvIHRoZSBsaXN0LiAqLworCXdoaWxlIChwZ19nZXRfbGluZV9i dWYocGZpbGUsICZsaW5lYnVmKSkKKwl7CisJCU9pZAkJCWRiX29pZCA9IEludmFsaWRPaWQ7 CisJCWNoYXIJICAgKmRibmFtZTsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWU7CisJCWludAkJ CW5hbWVsZW47CisJCWNoYXIJICAgKnAgPSBsaW5lYnVmLmRhdGE7CisKKwkJLyogbG9vayBm b3IgdGhlIGRib2lkLiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnAp KQorCQkJcCsrOworCisJCS8qIGlnbm9yZSBsaW5lcyB0aGF0IGRvbid0IGJlZ2luIHdpdGgg YSBkaWdpdCAqLworCQlpZiAocCA9PSBsaW5lYnVmLmRhdGEpCisJCQljb250aW51ZTsKKwor CQlpZiAoKnAgPT0gJyAnKQorCQl7CisJCQlzc2NhbmYobGluZWJ1Zi5kYXRhLCAiJXUiLCAm ZGJfb2lkKTsKKwkJCXArKzsKKwkJfQorCisJCS8qIGRibmFtZSBpcyB0aGUgcmVzdCBvZiB0 aGUgbGluZSAqLworCQlkYm5hbWUgPSBwOworCQluYW1lbGVuID0gc3RybGVuKGRibmFtZSk7 CisKKwkJLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZSAqLworCQlpZiAobmFtZWxlbiA+IDAg JiYgZGJuYW1lW25hbWVsZW4gLSAxXSA9PSAnXG4nKQorCQkJZGJuYW1lWy0tbmFtZWxlbl0g PSAnXDAnOworCisJCS8qIFJlcG9ydCBlcnJvciBhbmQgZXhpdCBpZiB0aGUgZmlsZSBoYXMg YW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBu YW1lbGVuIDwgMSkKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGVudHJ5IGluIGZpbGUgXCIlc1wi IG9uIGxpbmUgJWQiLCBtYXBfZmlsZV9wYXRoLAorCQkJCQkgY291bnQgKyAxKTsKKworCQlk YmlkbmFtZSA9IHBnX21hbGxvYyhvZmZzZXRvZihEYk9pZE5hbWUsIHN0cikgKyBuYW1lbGVu ICsgMSk7CisJCWRiaWRuYW1lLT5vaWQgPSBkYl9vaWQ7CisJCXN0cmxjcHkoZGJpZG5hbWUt PnN0ciwgZGJuYW1lLCBuYW1lbGVuICsgMSk7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRh dGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gZmlsZSBcIiVzXCIiLAorCQkJCQlkYmlkbmFt ZS0+c3RyLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCXNpbXBsZV9wdHJfbGlzdF9h cHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYmlkbmFtZSk7CisJCWNvdW50Kys7CisJfQorCisJ LyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlwZnJlZShs aW5lYnVmLmRhdGEpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogcmVzdG9yZV9h bGxfZGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgZGF0YWJhc2VzIHRob3Nl IGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFzZWQgb24gbWFwLmRhdCBm aWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9yaW5nIGZvciBkYXRh YmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0YWJhc2Ugb3B0 aW9uLgorICoKKyAqIHJldHVybnMsIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVz dG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGNvbnN0IGNo YXIgKmlucHV0RmlsZVNwZWMsCisJCQkJCSAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRl X3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJICBpbnQgbnVtV29ya2Vy cykKK3sKKwlTaW1wbGVQdHJMaXN0IGRibmFtZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsK KwlpbnQJCQludW1fZGJfcmVzdG9yZSA9IDA7CisJaW50CQkJbnVtX3RvdGFsX2RiOworCWlu dAkJCW5fZXJyb3JzX3RvdGFsID0gMDsKKwljaGFyCSAgICpjb25uZWN0ZWRfZGIgPSBOVUxM OworCVBHY29ubgkgICAqY29ubiA9IE5VTEw7CisJUmVzdG9yZU9wdGlvbnMgKm9yaWdpbmFs X29wdHMgPSBwZ19tYWxsb2MwX29iamVjdChSZXN0b3JlT3B0aW9ucyk7CisJUmVzdG9yZU9w dGlvbnMgKnRtcG9wdHMgPSBwZ19tYWxsb2MwX29iamVjdChSZXN0b3JlT3B0aW9ucyk7CisK KwltZW1jcHkob3JpZ2luYWxfb3B0cywgb3B0cywgc2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7 CisKKwkvKiBTYXZlIGRiIG5hbWUgdG8gcmV1c2UgaXQgZm9yIGFsbCB0aGUgZGF0YWJhc2Uu ICovCisJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQljb25uZWN0ZWRfZGIgPSBvcHRz LT5jcGFyYW1zLmRibmFtZTsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xp c3RfZnJvbV9tZmlsZSgoY2hhciAqKSBpbnB1dEZpbGVTcGVjLCAmZGJuYW1lX29pZF9saXN0 KTsKKworCXBnX2xvZ19pbmZvKG5nZXR0ZXh0KCJmb3VuZCAlZCBkYXRhYmFzZSBuYW1lIGlu IFwiJXNcIiIsCisJCQkJCQkgImZvdW5kICVkIGRhdGFiYXNlIG5hbWVzIGluIFwiJXNcIiIs CisJCQkJCQkgbnVtX3RvdGFsX2RiKSwKKwkJCQludW1fdG90YWxfZGIsICJtYXAuZGF0Iik7 CisKKwkvKgorCSAqIElmIGV4Y2x1ZGUtcGF0dGVybnMgaXMgZ2l2ZW4sIGNvbm5lY3QgdG8g dGhlIGRhdGFiYXNlIHRvIHByb2Nlc3MgdGhlbS4KKwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9w YXR0ZXJucy5oZWFkICE9IE5VTEwpCisJeworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUp CisJCXsKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUs IE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1z LnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJ CSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCWlm ICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2Ug XCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJaWYgKCFjb25uKQor CQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIl c1wiIiwgInBvc3RncmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3Rn cmVzIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCSAgIG9wdHMtPmNw YXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJ CQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwor CQkJLyogVHJ5IHdpdGggdGVtcGxhdGUxLiAqLworCQkJaWYgKCFjb25uKQorCQkJeworCQkJ CXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAi dGVtcGxhdGUxIik7CisKKwkJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEi LCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJCSAgIG9wdHMtPmNwYXJh bXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJ CQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQkJ aWYgKCFjb25uKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY29ubmVj dCB0byBkYXRhYmFzZXMgXCJwb3N0Z3Jlc1wiIG9yIFwidGVtcGxhdGUxXCJcbiIKKwkJCQkJ CQkJICJQbGVhc2Ugc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBkYXRhYmFzZS4iKTsKKwkJCQkJ cGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0 aW9uLiIsIHByb2duYW1lKTsKKwkJCQkJZXhpdF9uaWNlbHkoMSk7CisJCQkJfQorCQkJfQor CQl9CisKKwkJLyogRmlsdGVyIHRoZSBkYiBsaXN0IGFjY29yZGluZyB0byB0aGUgZXhjbHVk ZSBwYXR0ZXJucy4gKi8KKwkJbnVtX2RiX3Jlc3RvcmUgPSBnZXRfZGJuYW1lc19saXN0X3Rv X3Jlc3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQkJCQkJCQkgZGJfZXhj bHVkZV9wYXR0ZXJucyk7CisJCVBRZmluaXNoKGNvbm4pOworCX0KKwllbHNlCisJCW51bV9k Yl9yZXN0b3JlID0gbnVtX3RvdGFsX2RiOworCisJLyogRXhpdCBpZiBubyBkYiBuZWVkcyB0 byBiZSByZXN0b3JlZC4gKi8KKwlpZiAobnVtX2RiX3Jlc3RvcmUgPT0gMCkKKwl7CisJCXBn X2xvZ19pbmZvKG5nZXR0ZXh0KCJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jpbmcgb3V0IG9m ICVkIGRhdGFiYXNlIiwKKwkJCQkJCQkgIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3RvcmluZyBv dXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX3RvdGFsX2RiKSwKKwkJCQkJbnVtX3RvdGFsX2Ri KTsKKwkJcGdfZnJlZShvcmlnaW5hbF9vcHRzKTsKKwkJcGdfZnJlZSh0bXBvcHRzKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJcGdfbG9nX2luZm8oIm5lZWQgdG8gcmVzdG9yZSAlZCBkYXRh YmFzZXMgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV9kYl9yZXN0b3JlLCBudW1fdG90YWxf ZGIpOworCisJLyoKKwkgKiBXZSBoYXZlIGEgbGlzdCBvZiBkYXRhYmFzZXMgdG8gcmVzdG9y ZSBhZnRlciBwcm9jZXNzaW5nIHRoZQorCSAqIGV4Y2x1ZGUtZGF0YWJhc2Ugc3dpdGNoKGVz KS4gIE5vdyB3ZSBjYW4gcmVzdG9yZSB0aGVtIG9uZSBieSBvbmUuCisJICovCisJZm9yIChT aW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5oZWFkOworCQkg ZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJeworCQlEYk9pZE5hbWUgICpk YmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOworCQljaGFyCQlzdWJkaXJw YXRoW01BWFBHUEFUSF07CisJCWNoYXIJCXN1YmRpcmRicGF0aFtNQVhQR1BBVEhdOworCQlj aGFyCQlkYmZpbGVuYW1lW01BWFBHUEFUSF07CisJCWludAkJCW5fZXJyb3JzOworCisJCS8q IGlnbm9yZSBkYnMgbWFya2VkIGZvciBza2lwcGluZyAqLworCQlpZiAoZGJpZG5hbWUtPm9p ZCA9PSBJbnZhbGlkT2lkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU2luY2UgcGdf YmFja3VwX2FyY2hpdmVyLmMgbWF5IG1vZGlmeSBSZXN0b3JlT3B0aW9ucyBkdXJpbmcgdGhl CisJCSAqIHByZXZpb3VzIHJlc3RvcmUsIHdlIG11c3QgcHJvdmlkZSBhIGZyZXNoIGNvcHkg b2YgdGhlIG9yaWdpbmFsCisJCSAqICJvcHRzIiBmb3IgZWFjaCBjYWxsIHRvIHJlc3RvcmVf b25lX2RhdGFiYXNlLgorCQkgKi8KKwkJbWVtY3B5KHRtcG9wdHMsIG9yaWdpbmFsX29wdHMs IHNpemVvZihSZXN0b3JlT3B0aW9ucykpOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVz ZXQgb3ZlcnJpZGVfZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcmVzdG9yZWQKKwkJ ICogaW50byBhbiBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGggLWQvLS1k Ym5hbWUgb3B0aW9uKQorCQkgKi8KKwkJaWYgKHRtcG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVf ZGJuYW1lKQorCQl7CisJCQlwZnJlZSh0bXBvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFt ZSk7CisJCQl0bXBvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CisJCX0K KworCQlzbnByaW50ZihzdWJkaXJkYnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIs IGlucHV0RmlsZVNwZWMpOworCisJCS8qCisJCSAqIExvb2sgZm9yIHRoZSBkYXRhYmFzZSBk dW1wIGZpbGUvZGlyLiBJZiB0aGVyZSBpcyBhbiB7b2lkfS50YXIgb3IKKwkJICoge29pZH0u ZG1wIGZpbGUsIHVzZSBpdC4gT3RoZXJ3aXNlIHRyeSB0byB1c2UgYSBkaXJlY3RvcnkgY2Fs bGVkCisJCSAqIHtvaWR9CisJCSAqLworCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQR1BB VEgsICIldS50YXIiLCBkYmlkbmFtZS0+b2lkKTsKKwkJaWYgKGZpbGVfZXhpc3RzX2luX2Rp cmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJc25wcmludGYoc3ViZGly cGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LnRhciIsIGlucHV0RmlsZVNwZWMs IGRiaWRuYW1lLT5vaWQpOworCQllbHNlCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZW5hbWUs IE1BWFBHUEFUSCwgIiV1LmRtcCIsIGRiaWRuYW1lLT5vaWQpOworCisJCQlpZiAoZmlsZV9l eGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQkJc25w cmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LmRtcCIsIGlu cHV0RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHN1 YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGlucHV0RmlsZVNwZWMs IGRiaWRuYW1lLT5vaWQpOworCQl9CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRh YmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKworCQkvKiBJZiBkYXRhYmFzZSBpcyBh bHJlYWR5IGNyZWF0ZWQsIHRoZW4gZG9uJ3Qgc2V0IGNyZWF0ZURCIGZsYWcuICovCisJCWlm ICh0bXBvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJeworCQkJUEdjb25uCSAgICp0ZXN0X2Nv bm47CisKKwkJCXRlc3RfY29ubiA9IENvbm5lY3REYXRhYmFzZShkYmlkbmFtZS0+c3RyLCBO VUxMLCB0bXBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJCQl0bXBvcHRzLT5jcGFy YW1zLnBncG9ydCwgdG1wb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJ CQkJCQkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJ CWlmICh0ZXN0X2Nvbm4pCisJCQl7CisJCQkJUFFmaW5pc2godGVzdF9jb25uKTsKKworCQkJ CS8qIFVzZSBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UgZm9yIGNvbm5lY3Rpb24uICovCisJ CQkJdG1wb3B0cy0+Y3JlYXRlREIgPSAwOworCQkJCXRtcG9wdHMtPmNwYXJhbXMuZGJuYW1l ID0gZGJpZG5hbWUtPnN0cjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBXZSdsbCBo YXZlIHRvIGNyZWF0ZSBpdCAqLworCQkJCXRtcG9wdHMtPmNyZWF0ZURCID0gMTsKKwkJCQl0 bXBvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGNvbm5lY3RlZF9kYjsKKwkJCX0KKwkJfQorCisJ CS8qIFJlc3RvcmUgdGhlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJbl9lcnJvcnMgPSByZXN0 b3JlX29uZV9kYXRhYmFzZShzdWJkaXJwYXRoLCB0bXBvcHRzLCBudW1Xb3JrZXJzLCB0cnVl KTsKKworCQluX2Vycm9yc190b3RhbCArPSBuX2Vycm9yczsKKworCQkvKiBQcmludCBhIHN1 bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHNpbmdsZSBkYXRhYmFzZSByZXN0b3Jl LiAqLworCQlpZiAobl9lcnJvcnMpCisJCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9y ZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJlc3RvcmU6ICVkIiwgZGJpZG5hbWUtPnN0ciwgbl9l cnJvcnMpOworCX0KKworCS8qIExvZyBudW1iZXIgb2YgcHJvY2Vzc2VkIGRhdGFiYXNlcy4g Ki8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3RvcmVkIGRhdGFiYXNlcyBpcyAlZCIs IG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJuYW1lIGFuZCBkYm9pZCBsaXN0LiAq LworCXNpbXBsZV9wdHJfbGlzdF9kZXN0cm95KCZkYm5hbWVfb2lkX2xpc3QpOworCisJcGdf ZnJlZShvcmlnaW5hbF9vcHRzKTsKKwlwZ19mcmVlKHRtcG9wdHMpOworCisJcmV0dXJuIG5f ZXJyb3JzX3RvdGFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jh c2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCmluZGV4IGFiOTMxMGVi NDJiLi5hODk1YmMzMTRiMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jh c2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjQ0LDQg KzI0NCw1OSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAt LWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWds b2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxs JywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNv Z25pemVkIG91dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5yZWNvZ25p emVkIG91dHB1dCBmb3JtYXQnKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1 bXBhbGwnLCAnLS1mb3JtYXQnLCAnZCcsICctLXJlc3RyaWN0LWtleT11dScsICctZiBkdW1w ZmlsZScgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiBvcHRpb24gLS1yZXN0cmljdC1r ZXkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tZm9ybWF0PXBsYWluXEUvLAorCSdwZ19kdW1w YWxsOiAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggcGxhaW4gZHVtcCBm b3JtYXQnKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1m b3JtYXQnLCAnZCcsICctLWdsb2JhbHMtb25seScsICctLWNsZWFuJywgJy1mJywgJ2R1bXBm aWxlJyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlvbnMgLS1jbGVhbiBhbmQg LWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIGluIG5vbi10ZXh0 IGR1bXBcRS8sCisJJ3BnX2R1bXBhbGw6IC0tY2xlYW4gYW5kIC1nLy0tZ2xvYmFscy1vbmx5 IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIGluIG5vbi10ZXh0IGR1bXAnKTsKKworY29tbWFu ZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAnZCcgXSwKKwlx ci9cUXBnX2R1bXBhbGw6IGVycm9yOiBvcHRpb24gLUZcLy0tZm9ybWF0PWR8Y3x0IHJlcXVp cmVzIG9wdGlvbiAtZlwvLS1maWxlXEUvLAorCSdwZ19kdW1wYWxsOiBub24tcGxhaW4gZm9y bWF0IHJlcXVpcmVzIC0tZmlsZSBvcHRpb24nKTsKKworY29tbWFuZF9mYWlsc19saWtlKAor CVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMt b25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9u IC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8t LWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRh YmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jwor KTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1kYXRhLW9u bHknLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBdLAorCXFyL1xRcGdfcmVzdG9y ZTogZXJyb3I6IG9wdGlvbnMgLWFcLy0tZGF0YS1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxzLW9u bHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCisJJ3BnX3Jlc3RvcmU6IGVycm9yOiBv cHRpb25zIC1hLy0tZGF0YS1vbmx5IGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUg dXNlZCB0b2dldGhlcicKKyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0 b3JlJywgJy0tc2NoZW1hLW9ubHknLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBd LAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLXNcLy0tc2NoZW1hLW9ubHkg YW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwkn cGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLXMvLS1zY2hlbWEtb25seSBhbmQgLWcvLS1n bG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCispOworCitjb21tYW5kX2Zh aWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLXN0YXRpc3RpY3Mtb25seScsICctLWds b2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjog b3B0aW9ucyAtLXN0YXRpc3RpY3Mtb25seSBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyXEUvLAorCSdwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAt LXN0YXRpc3RpY3Mtb25seSBhbmQgLWcvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXInCispOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScs ICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy1kJywgJ3h4eCcsICdkdW1wZGlyJyBdLAor CXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fu IGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdf ZHVtcGFsbFxFLywKKwknV2hlbiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGlzIHVzZWQg aW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcCcKKyk7CisKK2NvbW1hbmRfZmFp bHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4 eCcsICdkdW1wZGlyJyBdLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtZ1wv LS1nbG9iYWxzLW9ubHkgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiBvcHRpb24gLS1nbG9iYWxz LW9ubHkgaXMgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggdGhlIGR1bXAgb2YgcGdfZHVtcCcK Kyk7CiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAw N19wZ19kdW1wYWxsLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIyMjhlNTcyZjQzCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwK QEAgLTAsMCArMSw2MzkgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjYsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fybmlu Z3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICR0 ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7CitteSAkcnVuX2Ri ID0gJ3Bvc3RncmVzJzsKK215ICRzZXAgPSAkd2luZG93c19vcyA/ICJcXCIgOiAiLyI7CisK KyMgVGFibGVzcGFjZSBsb2NhdGlvbnMgdXNlZCBieSAicmVzdG9yZV90YWJsZXNwYWNlIiB0 ZXN0IGNhc2UuCitteSAkdGFibGVzcGFjZTEgPSAiJHt0ZW1wZGlyfSR7c2VwfXRibDEiOwor bXkgJHRhYmxlc3BhY2UyID0gIiR7dGVtcGRpcn0ke3NlcH10YmwyIjsKK21rZGlyKCR0YWJs ZXNwYWNlMSkgfHwgZGllICJta2RpciAkdGFibGVzcGFjZTEgJCEiOworbWtkaXIoJHRhYmxl c3BhY2UyKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMiAkISI7CisKKyMgZXNjYXBlIHRh Ymxlc3BhY2UgbG9jYXRpb25zIG9uIFdpbmRvd3MuCitteSAkdGFibGVzcGFjZTJfb3JpZyA9 ICR0YWJsZXNwYWNlMjsKKyR0YWJsZXNwYWNlMSA9ICR3aW5kb3dzX29zID8gKCR0YWJsZXNw YWNlMSA9fiBzL1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2UxOworJHRhYmxlc3BhY2UyID0g JHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UyID1+IHMvXFwvXFxcXC9ncikgOiAkdGFibGVz cGFjZTI7CisKKyMgV2hlcmUgcGdfZHVtcGFsbCB3aWxsIGJlIGV4ZWN1dGVkLgorbXkgJG5v ZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUnKTsKKyRub2RlLT5p bml0OworJG5vZGUtPnN0YXJ0OworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZpbml0aW9uIG9mIHRo ZSBwZ19kdW1wYWxsIHRlc3QgY2FzZXMgdG8gcnVuLgorIworIyBFYWNoIG9mIHRoZXNlIHRl c3QgY2FzZXMgYXJlIG5hbWVkIGFuZCB0aG9zZSBuYW1lcyBhcmUgdXNlZCBmb3IgZmFpbAor IyByZXBvcnRpbmcgYW5kIGFsc28gdG8gc2F2ZSB0aGUgZHVtcCBhbmQgcmVzdG9yZSBpbmZv cm1hdGlvbiBuZWVkZWQgZm9yIHRoZQorIyB0ZXN0IHRvIGFzc2VydC4KKyMKKyMgVGhlICJz ZXR1cF9zcWwiIGlzIGEgcHNxbCB2YWxpZCBzY3JpcHQgdGhhdCBjb250YWlucyBTUUwgY29t bWFuZHMgdG8gZXhlY3V0ZQorIyBiZWZvcmUgb2YgYWN0dWFsbHkgZXhlY3V0ZSB0aGUgdGVz dHMuIFRoZSBzZXR1cHMgYXJlIGFsbCBleGVjdXRlZCBiZWZvcmUgb2YKKyMgYW55IHRlc3Qg ZXhlY3V0aW9uLgorIworIyBUaGUgImR1bXBfY21kIiBhbmQgInJlc3RvcmVfY21kIiBhcmUg dGhlIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gVGhlCisjICJyZXN0b3JlX2Nt ZCIgbXVzdCBoYXZlIHRoZSAtLWZpbGUgZmxhZyB0byBzYXZlIHRoZSByZXN0b3JlIG91dHB1 dCBzbyB0aGF0IHdlCisjIGNhbiBhc3NlcnQgb24gaXQuCisjCisjIFRoZSAibGlrZSIgYW5k ICJ1bmxpa2UiIGlzIGEgcmVnZXhwIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB0aGUgcGdfcmVz dG9yZQorIyBvdXRwdXQuIEl0IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgb2YgdGhlbiBmaWxs ZWQgcGVyIHRlc3QgY2FzZXMgYnV0IGl0IGFsc28KKyMgY2FuIGhhdmUgYm90aC4gU2VlICJl eGNsdWRpbmdfZGF0YWJhc2VzIiB0ZXN0IGNhc2UgZm9yIGV4YW1wbGUuCitteSAlcGdkdW1w YWxsX3J1bnMgPSAoCisJcmVzdG9yZV9yb2xlcyA9PiB7CisJCXNldHVwX3NxbCA9PiAnCisJ CUNSRUFURSBST0xFIGR1bXBhbGwgV0lUSCBFTkNSWVBURUQgUEFTU1dPUkQgXCdhZG1pblwn IFNVUEVSVVNFUjsKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbDIgV0lUSCBSRVBMSUNBVElPTiBD T05ORUNUSU9OIExJTUlUIDEwOycsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxs JywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdw Z19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcy5zcWwiLAorCQkJIiR0ZW1wZGly L3Jlc3RvcmVfcm9sZXMiLAorCQldLAorCQlsaWtlID0+IHFyLworCQkJXHMqXFFDUkVBVEUg Uk9MRSBkdW1wYWxsMjtcRQorCQkJXHMqXFFBTFRFUiBST0xFIGR1bXBhbGwyIFdJVEggTk9T VVBFUlVTRVIgSU5IRVJJVCBOT0NSRUFURVJPTEUgTk9DUkVBVEVEQiBOT0xPR0lOIFJFUExJ Q0FUSU9OIE5PQllQQVNTUkxTIENPTk5FQ1RJT04gTElNSVQgMTA7XEUKKwkJL3htCisJfSwK KworCXJlc3RvcmVfdGFibGVzcGFjZSA9PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFU RSBST0xFIHRhcDsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMSBPV05FUiB0YXAgTE9DQVRJ T04gJyR0YWJsZXNwYWNlMSc7CisJCUNSRUFURSBUQUJMRVNQQUNFIHRibDIgT1dORVIgdGFw IExPQ0FUSU9OICckdGFibGVzcGFjZTInIFdJVEggKHNlcV9wYWdlX2Nvc3Q9MS4wKTsiLAor CQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdk aXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFj ZSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywK KwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvcmVzdG9yZV90YWJsZXNwYWNlLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV90YWJs ZXNwYWNlIiwKKwkJXSwKKwkJIyBNYXRjaCAiRSIgYXMgb3B0aW9uYWwgc2luY2UgaXQgaXMg YWRkZWQgb24gTE9DQVRJT04gd2hlbiBydW5uaW5nIG9uCisJCSMgV2luZG93cy4KKwkJbGlr ZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9D QVRJT04gXEUoPzpFKT9cUSckdGFibGVzcGFjZTJfb3JpZyc7XEUKKwkJCVxuXFFBTFRFUiBU QUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKKwkJL3htLAorCX0s CisKKwlyZXN0b3JlX2dyYW50cyA9PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFURSBE QVRBQkFTRSB0YXBncmFudHNkYjsKKwkJQ1JFQVRFIFNDSEVNQSBwcml2YXRlOworCQlDUkVB VEUgU0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEwMTsKKwkJQ1JFQVRFIEZVTkNUSU9OIGZuKCkg UkVUVVJOUyB2b2lkIEFTIFwkXCQKKwkJQkVHSU4KKwkJRU5EOworCQlcJFwkIExBTkdVQUdF IHBscGdzcWw7CisJCUNSRUFURSBST0xFIHN1cGVyOworCQlDUkVBVEUgUk9MRSBncmFudDE7 CisJCUNSRUFURSBST0xFIGdyYW50MjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQzOworCQlDUkVB VEUgUk9MRSBncmFudDQ7CisJCUNSRUFURSBST0xFIGdyYW50NTsKKwkJQ1JFQVRFIFJPTEUg Z3JhbnQ2OworCQlDUkVBVEUgUk9MRSBncmFudDc7CisJCUNSRUFURSBST0xFIGdyYW50ODsK KworCQlDUkVBVEUgVEFCTEUgdCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdCBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCisJCUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0IFRPIGdy YW50MTsKKwkJR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHQgVE8gZ3JhbnQyOworCQlHUkFOVCBB TEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdyYW50MzsKKwkJR1JBTlQgQ09OTkVDVCwg Q1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDsKKwkJR1JBTlQgVVNB R0UsIENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7CisJCUdSQU5UIFVTQUdF LCBTRUxFQ1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8gZ3JhbnQ2OworCQlHUkFO VCBzdXBlciBUTyBncmFudDc7CisJCUdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gZm4oKSBU TyBncmFudDg7CisJCSIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJ CSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIv cmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVz dG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVz dG9yZV9ncmFudHMiLAorCQldLAorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFHUkFOVCBBTEwg T04gU0NIRU1BIHByaXZhdGUgVE8gZ3JhbnQ1O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JB TlQgQUxMIE9OIEZVTkNUSU9OIHB1YmxpYy5mbigpIFRPIGdyYW50ODtcRQorCQkJKC4qXG4p KgorCQkJXG5cUUdSQU5UIEFMTCBPTiBTRVFVRU5DRSBwdWJsaWMuc2VyaWFsIFRPIGdyYW50 NjtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIFNFTEVDVCBPTiBUQUJMRSBwdWJsaWMu dCBUTyBncmFudDE7XEUKKwkJCVxuXFFHUkFOVCBJTlNFUlQgT04gVEFCTEUgcHVibGljLnQg VE8gZ3JhbnQyO1xFCisJCQlcblxRR1JBTlQgQUxMIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdy YW50MztcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIENSRUFURSxDT05ORUNUIE9OIERB VEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDtcRQorCQkveG0sCisJfSwKKworCWV4Y2x1 ZGluZ19kYXRhYmFzZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJ0NSRUFURSBEQVRBQkFTRSBk YjE7CisJCVxjIGRiMQorCQlDUkVBVEUgVEFCTEUgdDEgKGlkIGludCk7CisJCUlOU0VSVCBJ TlRPIHQxIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MiAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDIgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsK KworCQlDUkVBVEUgREFUQUJBU0UgZGIyOworCQlcYyBkYjIKKwkJQ1JFQVRFIFRBQkxFIHQz IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MyBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQp OworCQlDUkVBVEUgVEFCTEUgdDQgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ0IFZBTFVF UyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXgzOworCQlc YyBkYmV4MworCQlDUkVBVEUgVEFCTEUgdDUgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ1 IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0NiAoaWQgaW50 KTsKKwkJSU5TRVJUIElOVE8gdDYgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlD UkVBVEUgREFUQUJBU0UgZGJleDQ7CisJCVxjIGRiZXg0CisJCUNSRUFURSBUQUJMRSB0NyAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDcgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsK KwkJQ1JFQVRFIFRBQkxFIHQ4IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OCBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYjU7CisJCVxjIGRi NQorCQlDUkVBVEUgVEFCTEUgdDkgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ5IFZBTFVF UyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MTAgKGlkIGludCk7CisJ CUlOU0VSVCBJTlRPIHQxMCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQknLAorCQlk dW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJl Y3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMi LAorCQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiZXgqJywKKwkJXSwKKwkJcmVzdG9y ZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAn ZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJh c2VzLnNxbCIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAnZGI1JywKKwkJCSIkdGVt cGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eCisJCQlc blxRQ1JFQVRFIERBVEFCQVNFIGRiMVxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRB QkxFIHB1YmxpYy50MSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVi bGljLnQyIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjJcRQor CQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDMgKFxFCisJCQkoLipc bikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NCAoL3htLAorCQl1bmxpa2UgPT4g cXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjNcRQorCQkJKC4qXG4pKgorCQkJXG5c UUNSRUFURSBUQUJMRSBwdWJsaWMudDUgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRF IFRBQkxFIHB1YmxpYy50NiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFUQUJB U0UgZGI0XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ3IChc RQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDggKFxFCisJCQlc blxRQ1JFQVRFIERBVEFCQVNFIGRiNVxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRB QkxFIHB1YmxpYy50OSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVi bGljLnQxMCAoXEUKKwkJL3htLAorCX0sCisKKwlmb3JtYXRfZGlyZWN0b3J5ID0+IHsKKwkJ c2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcmVjdG9yeShhIGludCwgYiBi b29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyZWN0b3J5IFZBTFVF UyAoMSwgdHJ1ZSwgJ25hbWUxJyksICgyLCBmYWxzZSwgJ25hbWUyJyk7IiwKKwkJZHVtcF9j bWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5 JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5IiwKKwkJXSwK KwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9y bWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRf ZGlyZWN0b3J5LnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0s CisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfZGlyZWN0b3J5IChhLCBi LCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfdGFyID0+IHsKKwkJc2V0dXBf c3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X3RhcihhIGludCwgYiBib29sZWFuLCBjIHRl eHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfdGFyIFZBTFVFUyAoMSwgZmFsc2UsICduYW1l MycpLCAoMiwgdHJ1ZSwgJ25hbWU0Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1 bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9mb3JtYXRfdGFyIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jl c3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ ICIkdGVtcGRpci9mb3JtYXRfdGFyLnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X3RhciIs CisJCV0sCisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfdGFyIChhLCBi LCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfY3VzdG9tID0+IHsKKwkJc2V0 dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2N1c3RvbShhIGludCwgYiBib29sZWFu LCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfY3VzdG9tIFZBTFVFUyAoMSwgZmFs c2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWwor CQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSctLWZp bGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9t JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tLnNxbCIsCisJCQki JHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJCWxpa2UgPT4gcXIvXiBcblxRQ09Q WSBwdWJsaWMuZm9ybWF0X2N1c3RvbSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAor CisJZHVtcF9nbG9iYWxzX29ubHkgPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJM RSBmb3JtYXRfZGlyKGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRP IGZvcm1hdF9kaXIgVkFMVUVTICgxLCBmYWxzZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFt ZTYnKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3Jt YXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIsCisJCV0sCisJCXJlc3RvcmVfY21k ID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywgJy0tZ2xvYmFscy1vbmx5JywKKwkJCSct LWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVt cF9nbG9iYWxzX29ubHkuc3FsIiwKKwkJCSIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIs CisJCV0sCisJCWxpa2UgPT4gcXIvCisgICAgICAgICAgICBeXHMqXFFDUkVBVEUgUk9MRSBk dW1wYWxsO1xFXHMqXG4KKwkJCS94bQorCX0sKTsKKworIyBGaXJzdCBleGVjdXRlIHRoZSBz ZXR1cF9zcWwKK2ZvcmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVucykK K3sKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSkKKwl7CisJCSRu b2RlLT5zYWZlX3BzcWwoJHJ1bl9kYiwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBf c3FsfSk7CisJfQorfQorCisjIEV4ZWN1dGUgdGhlIHRlc3RzCitmb3JlYWNoIG15ICRydW4g KHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJIyBDcmVhdGUgYSBuZXcgdGFyZ2V0 IGNsdXN0ZXIgdG8gcGdfcmVzdG9yZSBlYWNoIHRlc3QgY2FzZSBydW4gc28gdGhhdCB3ZQor CSMgZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIGNsZWFudXAgZnJvbSB0aGUgdGFy Z2V0IGNsdXN0ZXIgYWZ0ZXIgZWFjaAorCSMgcnVuLgorCW15ICR0YXJnZXRfbm9kZSA9IFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygidGFyZ2V0XyRydW4iKTsKKwkkdGFyZ2V0 X25vZGUtPmluaXQ7CisJJHRhcmdldF9ub2RlLT5zdGFydDsKKworCSMgRHVtcGFsbCBmcm9t IG5vZGUgY2x1c3Rlci4KKwkkbm9kZS0+Y29tbWFuZF9vayhcQHsgJHBnZHVtcGFsbF9ydW5z eyRydW59LT57ZHVtcF9jbWR9IH0sCisJCSIkcnVuOiBwZ19kdW1wYWxsIHJ1bnMiKTsKKwor CSMgUmVzdG9yZSB0aGUgZHVtcCBvbiAidGFyZ2V0X25vZGUiIGNsdXN0ZXIuCisJbXkgQHJl c3RvcmVfY21kID0gKAorCQlAeyAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntyZXN0b3JlX2Nt ZH0gfSwKKwkJJy0taG9zdCcsICR0YXJnZXRfbm9kZS0+aG9zdCwgJy0tcG9ydCcsICR0YXJn ZXRfbm9kZS0+cG9ydCk7CisKKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPSBydW5fY29tbWFu ZChcQHJlc3RvcmVfY21kKTsKKworCSMgcGdfcmVzdG9yZSAtLWZpbGUgb3V0cHV0IGZpbGUu CisJbXkgJG91dHB1dF9maWxlID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvJHtydW59LnNxbCIp OworCisJaWYgKCAgICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJCSYmICEo JHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSkpCisJeworCQlkaWUgIm1pc3Npbmcg XCJsaWtlXCIgb3IgXCJ1bmxpa2VcIiBpbiB0ZXN0IFwiJHJ1blwiIjsKKwl9CisKKwlpZiAo JHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJeworCQlsaWtlKCRvdXRwdXRfZmls ZSwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0sICJzaG91bGQgZHVtcCAkcnVuIik7 CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pCisJeworCQl1 bmxpa2UoCisJCQkkb3V0cHV0X2ZpbGUsCisJCQkkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1 bmxpa2V9LAorCQkJInNob3VsZCBub3QgZHVtcCAkcnVuIik7CisJfQorfQorCisjIFNvbWUg bmVnYXRpdmUgdGVzdCBjYXNlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsIGFuZCByZXN0b3Jl IHVzaW5nIHBnX3Jlc3RvcmUKKyMgcmVwb3J0IGFuIGVycm9yIHdoZW4gLUMgaXMgbm90IHVz ZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1h bmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1h dF9jdXN0b20iLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJv cjogb3B0aW9uIC1DXC8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3Rvcmlu ZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtQyBpcyBu b3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMg cmVwb3J0IGFuIGVycm9yIHdoZW4gXGwvLS1saXN0IG9wdGlvbiBpcyB1c2VkIHdpdGggZHVt cCBvZiBwZ19kdW1wYWxsCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3Bn X3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZv cm1hdCcgPT4gJ2N1c3RvbScsCisJCSctLWxpc3QnLAorCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0 aW9uIC1sXC8tLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2 ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLS1saXN0IGlzIHVzZWQgaW4g cGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHJlcG9ydCBhbiBl cnJvciB3aGVuIC1MLy0tdXNlLWxpc3Qgb3B0aW9uIGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBn X2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9y ZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9 PiAnY3VzdG9tJywKKwkJJy0tdXNlLWxpc3QnID0+ICd1c2UnLAorCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJv cjogb3B0aW9uIC1MXC8tLXVzZS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5n IGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC1MLy0tdXNl LWxpc3QgaXMgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7 CisKKyMgcmVwb3J0IGFuIGVycm9yIHdoZW4gLS1zdHJpY3QtbmFtZXMgb3B0aW9uIGlzIHVz ZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2Uo CisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1D JywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tc3RyaWN0LW5hbWVzJywKKwkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLXN0cmljdC1uYW1lcyBjYW5ub3QgYmUgdXNlZCB3 aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwkn V2hlbiAtLXN0cmljdC1uYW1lcyBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9m IHBnX2R1bXBhbGwnKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWNsZWFuIGFuZCAt Zy8tLWdsb2JhbHMtb25seSBhcmUgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBw Z19kdW1wYWxsCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3Rv cmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcg PT4gJ2N1c3RvbScsCisJCSctLWNsZWFuJywKKwkJJy0tZ2xvYmFscy1vbmx5JywKKwkJJy0t ZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVz dG9yZTogZXJyb3I6IG9wdGlvbnMgLS1jbGVhbiBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0tY2xlYW4gYW5kIC1nLy0tZ2xvYmFscy1v bmx5IGFyZSB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnCisp OworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIG5vbi1leGlzdCBkYXRhYmFzZSBpcyBnaXZl biB3aXRoIC1kIG9wdGlvbgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdw Z19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1m b3JtYXQnID0+ICdjdXN0b20nLAorCQknLWQnID0+ICdkYnBxJywKKwldLAorCXFyL1xRRkFU QUw6ICBkYXRhYmFzZSAiZGJwcSIgZG9lcyBub3QgZXhpc3RcRS8sCisJJ1doZW4gbm9uLWV4 aXN0ZW50IGRhdGFiYXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uIGluIHBnX3Jlc3RvcmUg d2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnCispOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVu IC0tbm8tc2NoZW1hIGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5j b21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9m b3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0t bm8tc2NoZW1hJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwK KwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLW5vLXNjaGVtYSBjYW5u b3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVt cGFsbFxFLywKKwknV2hlbiAtLW5vLXNjaGVtYSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0 aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWRh dGEtb25seSBpcyB1c2VkIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCiskbm9kZS0+Y29tbWFu ZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0 X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctLWRhdGEt b25seScsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwK Kwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLWFcLy0tZGF0YS1vbmx5IGNhbm5v dCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1w YWxsXEUvLAorCSdXaGVuIC0tZGF0YS1vbmx5IGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRo IGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tc3Rh dGlzdGljcy1vbmx5IGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5j b21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9m b3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0t c3RhdGlzdGljcy1vbmx5JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Qu c3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLXN0YXRpc3Rp Y3Mtb25seSBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtLXN0YXRpc3RpY3Mtb25seSBpcyB1c2Vk IGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyByZXBvcnQg YW4gZXJyb3Igd2hlbiAtLXNlY3Rpb24gZXhjbHVkZXMgcHJlLWRhdGEgd2l0aCBkdW1wIG9m IHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVz dG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0 JyA9PiAnY3VzdG9tJywKKwkJJy0tc2VjdGlvbicgPT4gJ3Bvc3QtZGF0YScsCisJCSctLWZp bGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3Rv cmU6IGVycm9yOiBvcHRpb24gLS1zZWN0aW9uIGNhbm5vdCBleGNsdWRlIC0tcHJlLWRhdGEg d2hlbiByZXN0b3JpbmcgYSBwZ19kdW1wYWxsIGFyY2hpdmVcRS8sCisJJ1doZW4gLS1zZWN0 aW9uPXBvc3QtZGF0YSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1 bXBhbGwnKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWdsb2JhbHMtb25seSBhbmQg LS1kYXRhLW9ubHkgYXJlIHVzZWQgdG9nZXRoZXIKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xp a2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwg Jy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZ2xvYmFscy1vbmx5JywK KwkJJy0tZGF0YS1vbmx5JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Qu c3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLWFcLy0tZGF0 YS1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJc RS8sCisJJ1doZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tZGF0YS1vbmx5IGFyZSB1c2VkIHRv Z2V0aGVyJyk7CisKKyMgcmVwb3J0IGFuIGVycm9yIHdoZW4gLS1nbG9iYWxzLW9ubHkgYW5k IC0tc2NoZW1hLW9ubHkgYXJlIHVzZWQgdG9nZXRoZXIKKyRub2RlLT5jb21tYW5kX2ZhaWxz X2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9t IiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZ2xvYmFscy1vbmx5 JywKKwkJJy0tc2NoZW1hLW9ubHknLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3Jf dGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtc1wv LS1zY2hlbWEtb25seSBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRv Z2V0aGVyXEUvLAorCSdXaGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLXNjaGVtYS1vbmx5IGFy ZSB1c2VkIHRvZ2V0aGVyJyk7CisKKyMgcmVwb3J0IGFuIGVycm9yIHdoZW4gLS1nbG9iYWxz LW9ubHkgYW5kIC0tc3RhdGlzdGljcy1vbmx5IGFyZSB1c2VkIHRvZ2V0aGVyCiskbm9kZS0+ Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIv Zm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSct LWdsb2JhbHMtb25seScsCisJCSctLXN0YXRpc3RpY3Mtb25seScsCisJCSctLWZpbGUnID0+ ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVy cm9yOiBvcHRpb25zIC0tc3RhdGlzdGljcy1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkg Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCisJJ1doZW4gLS1nbG9iYWxzLW9ubHkgYW5k IC0tc3RhdGlzdGljcy1vbmx5IGFyZSB1c2VkIHRvZ2V0aGVyJyk7CisKKyMgcmVwb3J0IGFu IGVycm9yIHdoZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tc3RhdGlzdGljcyBhcmUgdXNlZCB0 b2dldGhlcgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3Jl JywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ ICdjdXN0b20nLAorCQknLS1nbG9iYWxzLW9ubHknLAorCQknLS1zdGF0aXN0aWNzJywKKwkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLS1zdGF0aXN0aWNzIGFuZCAtZ1wvLS1nbG9iYWxz LW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCisJJ1doZW4gLS1nbG9iYWxzLW9u bHkgYW5kIC0tc3RhdGlzdGljcyBhcmUgdXNlZCB0b2dldGhlcicpOworCisjIHJlcG9ydCBh biBlcnJvciB3aGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLWV4aXQtb24tZXJyb3IgYXJlIHVz ZWQgdG9nZXRoZXIKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVz dG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0 JyA9PiAnY3VzdG9tJywKKwkJJy0tZ2xvYmFscy1vbmx5JywKKwkJJy0tZXhpdC1vbi1lcnJv cicsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlx ci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25zIC0tZXhpdC1vbi1lcnJvciBhbmQgLWdc Ly0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyXEUvLAorCSdXaGVuIC0t Z2xvYmFscy1vbmx5IGFuZCAtLWV4aXQtb24tZXJyb3IgYXJlIHVzZWQgdG9nZXRoZXInKTsK KworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS1zaW5nbGUt dHJhbnNhY3Rpb24gYXJlIHVzZWQgdG9nZXRoZXIKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xp a2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwg Jy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZ2xvYmFscy1vbmx5JywK KwkJJy0tc2luZ2xlLXRyYW5zYWN0aW9uJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vy cm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMg LS1zaW5nbGUtdHJhbnNhY3Rpb24gYW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUg dXNlZCB0b2dldGhlclxFLywKKwknV2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS1zaW5nbGUt dHJhbnNhY3Rpb24gYXJlIHVzZWQgdG9nZXRoZXInKTsKKworIyByZXBvcnQgYW4gZXJyb3Ig d2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS10cmFuc2FjdGlvbi1zaXplIGFyZSB1c2VkIHRv Z2V0aGVyCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUn LAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4g J2N1c3RvbScsCisJCSctLWdsb2JhbHMtb25seScsCisJCSctLXRyYW5zYWN0aW9uLXNpemUn ID0+ICcxMDAnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAor CV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLXRyYW5zYWN0aW9uLXNp emUgYW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywK KwknV2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS10cmFuc2FjdGlvbi1zaXplIGFyZSB1c2Vk IHRvZ2V0aGVyJyk7CisKKyMgdmVyaWZ5IG1hcC5kYXQgcHJlYW1ibGUgZXhpc3RzCitteSAk bWFwX2RhdF9jb250ZW50ID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9y eS9tYXAuZGF0Iik7CitsaWtlKAorCSRtYXBfZGF0X2NvbnRlbnQsCisJcXIvXiMgbWFwXC5k YXRcbi4qIyBUaGlzIGZpbGUgbWFwcyBvaWRzIHRvIGRhdGFiYXNlIG5hbWVzL21zLAorCSdt YXAuZGF0IGNvbnRhaW5zIGV4cGVjdGVkIHByZWFtYmxlJyk7CisKKyMgdmVyaWZ5IGNvbW1l bnRpbmcgb3V0IGEgbGluZSBpbiBtYXAuZGF0IHNraXBzIHRoYXQgZGF0YWJhc2UKKyRub2Rl LT5zYWZlX3BzcWwoJHJ1bl9kYiwgJ0NSRUFURSBEQVRBQkFTRSBjb21tZW50X3Rlc3RfZGI7 CitcYyBjb21tZW50X3Rlc3RfZGIKK0NSRUFURSBUQUJMRSBjb21tZW50X3Rlc3RfdGFibGUg KGlkIGludCk7Jyk7CisKKyRub2RlLT5jb21tYW5kX29rKAorCVsKKwkJJ3BnX2R1bXBhbGwn LAorCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvY29tbWVudF90ZXN0IiwKKwldLAorCSdwZ19kdW1wYWxsIGZvciBjb21tZW50IHRlc3Qn KTsKKworIyBNb2RpZnkgbWFwLmRhdCB0byBjb21tZW50IG91dCB0aGUgY29tbWVudF90ZXN0 X2RiIGVudHJ5CitteSAkbWFwX2NvbnRlbnQgPSBzbHVycF9maWxlKCIkdGVtcGRpci9jb21t ZW50X3Rlc3QvbWFwLmRhdCIpOworJG1hcF9jb250ZW50ID1+IHMvXihcZCsgY29tbWVudF90 ZXN0X2RiKSQvIyAkMS9tOworb3BlbihteSAkZmgsICc+JywgIiR0ZW1wZGlyL2NvbW1lbnRf dGVzdC9tYXAuZGF0IikKKyAgb3IgZGllICJDYW5ub3Qgb3BlbiBtYXAuZGF0OiAkISI7Citw cmludCAkZmggJG1hcF9jb250ZW50OworY2xvc2UoJGZoKTsKKworIyBDcmVhdGUgYSB0YXJn ZXQgbm9kZSBhbmQgcmVzdG9yZSAtIGNvbW1lbnRlZCBkYiBzaG91bGQgYmUgc2tpcHBlZAor bXkgJHRhcmdldF9jb21tZW50ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJ0 YXJnZXRfY29tbWVudCIpOworJHRhcmdldF9jb21tZW50LT5pbml0OworJHRhcmdldF9jb21t ZW50LT5zdGFydDsKKworJG5vZGUtPmNvbW1hbmRfb2soCisJWworCQkncGdfcmVzdG9yZScs ICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCSctLWZpbGUnID0+ICIk dGVtcGRpci9jb21tZW50X3Rlc3RfcmVzdG9yZS5zcWwiLAorCQknLS1ob3N0JywgJHRhcmdl dF9jb21tZW50LT5ob3N0LAorCQknLS1wb3J0JywgJHRhcmdldF9jb21tZW50LT5wb3J0LAor CQkiJHRlbXBkaXIvY29tbWVudF90ZXN0IiwKKwldLAorCSdwZ19yZXN0b3JlIHdpdGggY29t bWVudGVkIG91dCBkYXRhYmFzZSBpbiBtYXAuZGF0Jyk7CisKK215ICRyZXN0b3JlX291dHB1 dCA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyL2NvbW1lbnRfdGVzdF9yZXN0b3JlLnNxbCIpOwor dW5saWtlKAorCSRyZXN0b3JlX291dHB1dCwKKwlxci9DUkVBVEUgREFUQUJBU0UgY29tbWVu dF90ZXN0X2RiLywKKwknY29tbWVudGVkIG91dCBkYXRhYmFzZSBpbiBtYXAuZGF0IGlzIG5v dCByZXN0b3JlZCcpOworCisjIFRlc3QgdGhhdCAtLWNsZWFuIGltcGxpZXMgLS1pZi1leGlz dHMgZm9yIHBnX2R1bXBhbGwgYXJjaGl2ZXMKKyRub2RlLT5jb21tYW5kX29rKAorCVsKKwkJ J3BnX3Jlc3RvcmUnLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1j bGVhbicsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9jbGVhbl90ZXN0LnNxbCIsCisJCSIk dGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwldLAorCSdwZ19yZXN0b3JlIHdpdGggLS1jbGVh biBvbiBwZ19kdW1wYWxsIGFyY2hpdmUnKTsKKworbXkgJGNsZWFuX291dHB1dCA9IHNsdXJw X2ZpbGUoIiR0ZW1wZGlyL2NsZWFuX3Rlc3Quc3FsIik7CitsaWtlKAorCSRjbGVhbl9vdXRw dXQsCisJcXIvRFJPUCBST0xFIElGIEVYSVNUUy8sCisJJy0tY2xlYW4gaW1wbGllcyAtLWlm LWV4aXN0czogRFJPUCBST0xFIElGIEVYSVNUUyBpbiBvdXRwdXQnKTsKKworJG5vZGUtPnN0 b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDI0MTk0NTczNGVjLi4xYTg5ZWY5NGJlYyAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTYwMCw2ICs2MDAsNyBAQCBDdXN0b21TY2FuTWV0aG9kcwogQ3Vz dG9tU2NhblN0YXRlCiBDeWNsZUN0cgogREJTdGF0ZQorRGJPaWROYW1lCiBEQ0hDYWNoZUVu dHJ5CiBERUFETE9DS19JTkZPCiBERUNvdW50SXRlbQotLSAKMi40My4wCgo= --------------HNt6KID0iO9Jx5vfosVrPbzZ--