Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mXIcv-0002R9-62 for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Oct 2021 07:43:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mXIcs-00039z-RS for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Oct 2021 07:43:06 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mXIcs-00039r-BM for pgsql-hackers@lists.postgresql.org; Mon, 04 Oct 2021 07:43:06 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mXIck-0004Ar-3b for pgsql-hackers@lists.postgresql.org; Mon, 04 Oct 2021 07:43:05 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 4ABF421CAF51; Mon, 4 Oct 2021 10:42:56 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1633333376; bh=7TCJNFQIbXYSvHpqkUyeHjh3Cpk/Ewfc1X+sMZIcUKM=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=LLrfsUle7UjCQJOd39qvW7ndInrSP9rgb3/uz/Qg1iwKY3CrvjvfFQCTU1ny7CJ3r ZbNq5JRZIqkjzhKsWLhZgIVJG6fk8go+WD7qahEfUEqmn2AAuixOo35zu9ewS+y6qz TWZ0N25rzQjGox2V+bck/H+Fq3OSRf4wgY5COFMw= MIME-Version: 1.0 Date: Mon, 04 Oct 2021 10:42:56 +0300 From: Alexander Pyhalov To: Ashutosh Bapat Cc: Ashutosh Bapat , PostgreSQL Hackers Subject: Re: Function scan FDW pushdown In-Reply-To: References: User-Agent: Roundcube Webmail/1.4.11 Message-ID: X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_a9c5d35ae58b66328de23943afe2a165" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_a9c5d35ae58b66328de23943afe2a165 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Ashutosh Bapat писал 2021-06-15 16:15: > Hi Alexander, Hi. The current version of the patch is based on asymetric partition-wise join. Currently it is applied after v19-0001-Asymmetric-partitionwise-join.patch from on https://www.postgresql.org/message-id/792d60f4-37bc-e6ad-68ca-c2af5cbb2d9b@postgrespro.ru . >> So far I don't know how to visualize actual function expression used >> in >> function RTE, as in postgresExplainForeignScan() es->rtable comes from >> queryDesc->plannedstmt->rtable, and rte->functions is already 0. > > The actual function expression will be part of the Remote SQL of > ForeignScan node so no need to visualize it separately. We still need to create tuple description for functions in get_tupdesc_for_join_scan_tuples(), so I had to remove setting newrte->functions to NIL in add_rte_to_flat_rtable(). With rte->functions in place, there's no issues for explain. > > The patch will have problems when there are multiple foreign tables > all on different servers or use different FDWs. In such a case the > function scan's RelOptInfo will get the fpinfo based on the first > foreign table the function scan is paired with during join planning. > But that may not be the best foreign table to join. We should be able > to plan all the possible joins. Current infra to add one fpinfo per > RelOptInfo won't help there. We need something better. I suppose attached version of the patch is more mature. > > The patch targets only postgres FDW, how do you see this working with > other FDWs? Not now. We introduce necessary APIs for other FDWs, but implementing TryShippableJoinPaths() doesn't seem straightforward. > > If we come up with the right approach we could use it for 1. pushing > down queries with IN () clause 2. joining a small local table with a > large foreign table by sending the local table rows down to the > foreign server. -- Best regards, Alexander Pyhalov, Postgres Professional --=_a9c5d35ae58b66328de23943afe2a165 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=1-0001-Push-join-with-function-scan-to-remote-server.patch Content-Disposition: attachment; filename=1-0001-Push-join-with-function-scan-to-remote-server.patch; size=106081 RnJvbSBkOTk3YzMxM2RhZjAwMzFiODEyZDNmY2E1OWQzMzhiZTFhNGYyMTk2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBNb24sIDE3IE1heSAyMDIxIDE5OjE5OjMxICswMzAwClN1YmplY3Q6IFtQ QVRDSF0gUHVzaCBqb2luIHdpdGggZnVuY3Rpb24gc2NhbiB0byByZW1vdGUgc2VydmVyCgotLS0K IGNvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYyAgICAgICAgICAgICAgICB8ICAxOTkgKyst CiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAgfCAxMDk1ICsr KysrKysrKysrKysrKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAg ICAgICAgfCAgNDk3ICsrKysrKystCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu aCAgICAgICAgICAgfCAgICA2ICsKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19m ZHcuc3FsICAgICB8ICAzMzYgKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5w YXRoLmMgICAgICAgICB8ICAgMTEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jICAgICAgICAgIHwgICAgMSAtCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMgICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmggICAgICAg ICAgICAgICAgICB8ICAgIDEgKwogOSBmaWxlcyBjaGFuZ2VkLCAyMDM1IGluc2VydGlvbnMoKyks IDExMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBh cnNlLmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKaW5kZXggZDk4YmQ2NjY4MTgu LjdmMDg1NzVlZjYwIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMK KysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCkBAIC0xNTEsNiArMTUxLDcgQEAg c3RhdGljIHZvaWQgZGVwYXJzZUNvbnN0KENvbnN0ICpub2RlLCBkZXBhcnNlX2V4cHJfY3h0ICpj b250ZXh0LCBpbnQgc2hvd3R5cGUpOwogc3RhdGljIHZvaWQgZGVwYXJzZVBhcmFtKFBhcmFtICpu b2RlLCBkZXBhcnNlX2V4cHJfY3h0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGRlcGFyc2VTdWJz Y3JpcHRpbmdSZWYoU3Vic2NyaXB0aW5nUmVmICpub2RlLCBkZXBhcnNlX2V4cHJfY3h0ICpjb250 ZXh0KTsKIHN0YXRpYyB2b2lkIGRlcGFyc2VGdW5jRXhwcihGdW5jRXhwciAqbm9kZSwgZGVwYXJz ZV9leHByX2N4dCAqY29udGV4dCk7CitzdGF0aWMgdm9pZCBkZXBhcnNlRnVuY0NvbG5hbWVzKFN0 cmluZ0luZm8gYnVmLCBpbnQgdmFybm8sIFJhbmdlVGJsRW50cnkgKnJ0ZSwgYm9vbCBxdWFsaWZ5 X2NvbCk7CiBzdGF0aWMgdm9pZCBkZXBhcnNlT3BFeHByKE9wRXhwciAqbm9kZSwgZGVwYXJzZV9l eHByX2N4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBkZXBhcnNlT3BlcmF0b3JOYW1lKFN0cmlu Z0luZm8gYnVmLCBGb3JtX3BnX29wZXJhdG9yIG9wZm9ybSk7CiBzdGF0aWMgdm9pZCBkZXBhcnNl RGlzdGluY3RFeHByKERpc3RpbmN0RXhwciAqbm9kZSwgZGVwYXJzZV9leHByX2N4dCAqY29udGV4 dCk7CkBAIC0xNzQwLDEzICsxNzQxLDU0IEBAIGRlcGFyc2VGcm9tRXhwckZvclJlbChTdHJpbmdJ bmZvIGJ1ZiwgUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmZvcmVpZ25yZWwsCiAJewog CQlSYW5nZVRibEVudHJ5ICpydGUgPSBwbGFubmVyX3J0X2ZldGNoKGZvcmVpZ25yZWwtPnJlbGlk LCByb290KTsKIAotCQkvKgotCQkgKiBDb3JlIGNvZGUgYWxyZWFkeSBoYXMgc29tZSBsb2NrIG9u IGVhY2ggcmVsIGJlaW5nIHBsYW5uZWQsIHNvIHdlCi0JCSAqIGNhbiB1c2UgTm9Mb2NrIGhlcmUu Ci0JCSAqLwotCQlSZWxhdGlvbglyZWwgPSB0YWJsZV9vcGVuKHJ0ZS0+cmVsaWQsIE5vTG9jayk7 CisJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8IHJ0ZS0+cnRla2luZCA9 PSBSVEVfRlVOQ1RJT04pOworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKwkJ eworCQkJLyoKKwkJCSAqIENvcmUgY29kZSBhbHJlYWR5IGhhcyBzb21lIGxvY2sgb24gZWFjaCBy ZWwgYmVpbmcgcGxhbm5lZCwgc28KKwkJCSAqIHdlIGNhbiB1c2UgTm9Mb2NrIGhlcmUuCisJCQkg Ki8KKwkJCVJlbGF0aW9uCXJlbCA9IHRhYmxlX29wZW4ocnRlLT5yZWxpZCwgTm9Mb2NrKTsKIAot CQlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwpOworCQkJZGVwYXJzZVJlbGF0aW9uKGJ1ZiwgcmVs KTsKKworCQkJdGFibGVfY2xvc2UocmVsLCBOb0xvY2spOworCQl9CisJCWVsc2UgaWYgKHJ0ZS0+ cnRla2luZCA9PSBSVEVfRlVOQ1RJT04pCisJCXsKKwkJCVJhbmdlVGJsRnVuY3Rpb24gKnJ0ZnVu YzsKKwkJCWRlcGFyc2VfZXhwcl9jeHQgY29udGV4dDsKKwkJCUxpc3RDZWxsICAgKmxjOworCQkJ Ym9vbAkJZmlyc3QgPSB0cnVlOworCQkJaW50CQkJbjsKKworCQkJbiA9IGxpc3RfbGVuZ3RoKHJ0 ZS0+ZnVuY3Rpb25zKTsKKwkJCUFzc2VydChuID49IDEpOworCisJCQlpZiAobiA+IDEpCisJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJST1dTIEZST00gKCIpOworCisJCQlmb3JlYWNo KGxjLCBydGUtPmZ1bmN0aW9ucykKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7CisJCQkJZWxzZQorCQkJCQlmaXJzdCA9IGZhbHNl OworCisJCQkJcnRmdW5jID0gKFJhbmdlVGJsRnVuY3Rpb24gKikgbGZpcnN0KGxjKTsKKworCQkJ CWNvbnRleHQucm9vdCA9IHJvb3Q7CisJCQkJY29udGV4dC5mb3JlaWducmVsID0gZm9yZWlnbnJl bDsKKwkJCQljb250ZXh0LnNjYW5yZWwgPSBmb3JlaWducmVsOworCQkJCWNvbnRleHQuYnVmID0g YnVmOworCQkJCWNvbnRleHQucGFyYW1zX2xpc3QgPSBwYXJhbXNfbGlzdDsKKworCQkJCWRlcGFy c2VFeHByKChFeHByICopIHJ0ZnVuYy0+ZnVuY2V4cHIsICZjb250ZXh0KTsKKwkJCX0KKworCQkJ aWYgKG4gPiAxKQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiKSIpOworCQl9CiAK IAkJLyoKIAkJICogQWRkIGEgdW5pcXVlIGFsaWFzIHRvIGF2b2lkIGFueSBjb25mbGljdCBpbiBy ZWxhdGlvbiBuYW1lcyBkdWUgdG8KQEAgLTE3NTQsOSArMTc5Niw0MyBAQCBkZXBhcnNlRnJvbUV4 cHJGb3JSZWwoU3RyaW5nSW5mbyBidWYsIFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpm b3JlaWducmVsLAogCQkgKiBqb2luLgogCQkgKi8KIAkJaWYgKHVzZV9hbGlhcykKKwkJewogCQkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIgJXMlZCIsIFJFTF9BTElBU19QUkVGSVgsIGZvcmVpZ25y ZWwtPnJlbGlkKTsKKwkJCWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRFX0ZVTkNUSU9OKQorCQkJewor CQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICgiKTsKKwkJCQlkZXBhcnNlRnVuY0NvbG5hbWVz KGJ1ZiwgMCwgcnRlLCBmYWxzZSk7CisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIpICIpOwor CQkJfQorCQl9CisJfQorfQogCi0JCXRhYmxlX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKy8qCisgKiBE ZXBhcnNlIGZ1bmN0aW9uIGNvbHVtbnMgYWxpYXMgbGlzdAorICovCitzdGF0aWMgdm9pZAorZGVw YXJzZUZ1bmNDb2xuYW1lcyhTdHJpbmdJbmZvIGJ1ZiwgaW50IHZhcm5vLCBSYW5nZVRibEVudHJ5 ICpydGUsIGJvb2wgcXVhbGlmeV9jb2wpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCUxpc3RD ZWxsICAgKmxjOworCisJQXNzZXJ0KHJ0ZSk7CisJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVf RlVOQ1RJT04pOworCUFzc2VydChydGUtPmVyZWYpOworCisJZm9yZWFjaChsYywgcnRlLT5lcmVm LT5jb2xuYW1lcykKKwl7CisJCWNoYXIJICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGxjKSk7 CisKKwkJaWYgKGNvbG5hbWVbMF0gPT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWZpcnN0 KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsIik7CisJCWlmIChxdWFsaWZ5X2Nv bCkKKwkJCUFERF9SRUxfUVVBTElGSUVSKGJ1ZiwgdmFybm8pOworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihjb2xuYW1lKSk7CisJCWZpcnN0ID0gZmFsc2U7 CiAJfQogfQogCkBAIC0yMDU3LDcgKzIxMzMsNyBAQCBkZXBhcnNlRGlyZWN0VXBkYXRlU3FsKFN0 cmluZ0luZm8gYnVmLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoYnVmLCAiVVBEQVRFICIpOwogCWRlcGFyc2VSZWxhdGlvbihidWYsIHJlbCk7Ci0JaWYgKGZv cmVpZ25yZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0pPSU5SRUwpCisJaWYgKElTX0pPSU5fUkVM KGZvcmVpZ25yZWwpKQogCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyVkIiwgUkVMX0FMSUFT X1BSRUZJWCwgcnRpbmRleCk7CiAJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgU0VUICIp OwogCkBAIC0yMDg0LDcgKzIxNjAsNyBAQCBkZXBhcnNlRGlyZWN0VXBkYXRlU3FsKFN0cmluZ0lu Zm8gYnVmLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCXJlc2V0X3RyYW5zbWlzc2lvbl9tb2Rlcyhu ZXN0bGV2ZWwpOwogCi0JaWYgKGZvcmVpZ25yZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0pPSU5S RUwpCisJaWYgKElTX0pPSU5fUkVMKGZvcmVpZ25yZWwpKQogCXsKIAkJTGlzdAkgICAqaWdub3Jl X2NvbmRzID0gTklMOwogCkBAIC0yMTAwLDcgKzIxNzYsNyBAQCBkZXBhcnNlRGlyZWN0VXBkYXRl U3FsKFN0cmluZ0luZm8gYnVmLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJYXBwZW5kQ29uZGl0aW9u cyhyZW1vdGVfY29uZHMsICZjb250ZXh0KTsKIAl9CiAKLQlpZiAoZm9yZWlnbnJlbC0+cmVsb3B0 a2luZCA9PSBSRUxPUFRfSk9JTlJFTCkKKwlpZiAoSVNfSk9JTl9SRUwoZm9yZWlnbnJlbCkpCiAJ CWRlcGFyc2VFeHBsaWNpdFRhcmdldExpc3QocmV0dXJuaW5nTGlzdCwgdHJ1ZSwgcmV0cmlldmVk X2F0dHJzLAogCQkJCQkJCQkgICZjb250ZXh0KTsKIAllbHNlCkBAIC0yMTY0LDEwICsyMjQwLDEw IEBAIGRlcGFyc2VEaXJlY3REZWxldGVTcWwoU3RyaW5nSW5mbyBidWYsIFBsYW5uZXJJbmZvICpy b290LAogCiAJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJERUxFVEUgRlJPTSAiKTsKIAlk ZXBhcnNlUmVsYXRpb24oYnVmLCByZWwpOwotCWlmIChmb3JlaWducmVsLT5yZWxvcHRraW5kID09 IFJFTE9QVF9KT0lOUkVMKQorCWlmIChJU19KT0lOX1JFTChmb3JlaWducmVsKSkKIAkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIgJXMlZCIsIFJFTF9BTElBU19QUkVGSVgsIHJ0aW5kZXgpOwogCi0J aWYgKGZvcmVpZ25yZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0pPSU5SRUwpCisJaWYgKElTX0pP SU5fUkVMKGZvcmVpZ25yZWwpKQogCXsKIAkJTGlzdAkgICAqaWdub3JlX2NvbmRzID0gTklMOwog CkBAIC0yMTgzLDcgKzIyNTksNyBAQCBkZXBhcnNlRGlyZWN0RGVsZXRlU3FsKFN0cmluZ0luZm8g YnVmLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJYXBwZW5kQ29uZGl0aW9ucyhyZW1vdGVfY29uZHMs ICZjb250ZXh0KTsKIAl9CiAKLQlpZiAoZm9yZWlnbnJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRf Sk9JTlJFTCkKKwlpZiAoSVNfSk9JTl9SRUwoZm9yZWlnbnJlbCkpCiAJCWRlcGFyc2VFeHBsaWNp dFRhcmdldExpc3QocmV0dXJuaW5nTGlzdCwgdHJ1ZSwgcmV0cmlldmVkX2F0dHJzLAogCQkJCQkJ CQkgICZjb250ZXh0KTsKIAllbHNlCkBAIC0yNDA3LDIzICsyNDgzLDYgQEAgZGVwYXJzZUNvbHVt blJlZihTdHJpbmdJbmZvIGJ1ZiwgaW50IHZhcm5vLCBpbnQgdmFyYXR0bm8sIFJhbmdlVGJsRW50 cnkgKnJ0ZSwKIAkJLyogUmVxdWlyZWQgb25seSB0byBiZSBwYXNzZWQgZG93biB0byBkZXBhcnNl VGFyZ2V0TGlzdCgpLiAqLwogCQlMaXN0CSAgICpyZXRyaWV2ZWRfYXR0cnM7CiAKLQkJLyoKLQkJ ICogVGhlIGxvY2sgb24gdGhlIHJlbGF0aW9uIHdpbGwgYmUgaGVsZCBieSB1cHBlciBjYWxsZXJz LCBzbyBpdCdzCi0JCSAqIGZpbmUgdG8gb3BlbiBpdCB3aXRoIG5vIGxvY2sgaGVyZS4KLQkJICov Ci0JCXJlbCA9IHRhYmxlX29wZW4ocnRlLT5yZWxpZCwgTm9Mb2NrKTsKLQotCQkvKgotCQkgKiBU aGUgbG9jYWwgbmFtZSBvZiB0aGUgZm9yZWlnbiB0YWJsZSBjYW4gbm90IGJlIHJlY29nbml6ZWQg YnkgdGhlCi0JCSAqIGZvcmVpZ24gc2VydmVyIGFuZCB0aGUgdGFibGUgaXQgcmVmZXJlbmNlcyBv biBmb3JlaWduIHNlcnZlciBtaWdodAotCQkgKiBoYXZlIGRpZmZlcmVudCBjb2x1bW4gb3JkZXJp bmcgb3IgZGlmZmVyZW50IGNvbHVtbnMgdGhhbiB0aG9zZQotCQkgKiBkZWNsYXJlZCBsb2NhbGx5 LiBIZW5jZSB3ZSBoYXZlIHRvIGRlcGFyc2Ugd2hvbGUtcm93IHJlZmVyZW5jZSBhcwotCQkgKiBS T1coY29sdW1ucyByZWZlcmVuY2VkIGxvY2FsbHkpLiBDb25zdHJ1Y3QgdGhpcyBieSBkZXBhcnNp bmcgYQotCQkgKiAid2hvbGUgcm93IiBhdHRyaWJ1dGUuCi0JCSAqLwotCQlhdHRyc191c2VkID0g Ym1zX2FkZF9tZW1iZXIoTlVMTCwKLQkJCQkJCQkJCTAgLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0 cmlidXRlTnVtYmVyKTsKLQogCQkvKgogCQkgKiBJbiBjYXNlIHRoZSB3aG9sZS1yb3cgcmVmZXJl bmNlIGlzIHVuZGVyIGFuIG91dGVyIGpvaW4gdGhlbiBpdCBoYXMKIAkJICogdG8gZ28gTlVMTCB3 aGVuZXZlciB0aGUgcmVzdCBvZiB0aGUgcm93IGdvZXMgTlVMTC4gRGVwYXJzaW5nIGEgam9pbgpA QCAtMjQzOCwxNiArMjQ5Nyw0MyBAQCBkZXBhcnNlQ29sdW1uUmVmKFN0cmluZ0luZm8gYnVmLCBp bnQgdmFybm8sIGludCB2YXJhdHRubywgUmFuZ2VUYmxFbnRyeSAqcnRlLAogCQl9CiAKIAkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJST1coIik7Ci0JCWRlcGFyc2VUYXJnZXRMaXN0KGJ1 ZiwgcnRlLCB2YXJubywgcmVsLCBmYWxzZSwgYXR0cnNfdXNlZCwgcXVhbGlmeV9jb2wsCi0JCQkJ CQkgICZyZXRyaWV2ZWRfYXR0cnMpOworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElP TikKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBsb2NhbCBuYW1lIG9mIHRoZSBmb3JlaWduIHRhYmxl IGNhbiBub3QgYmUgcmVjb2duaXplZCBieQorCQkJICogdGhlIGZvcmVpZ24gc2VydmVyIGFuZCB0 aGUgdGFibGUgaXQgcmVmZXJlbmNlcyBvbiBmb3JlaWduCisJCQkgKiBzZXJ2ZXIgbWlnaHQgaGF2 ZSBkaWZmZXJlbnQgY29sdW1uIG9yZGVyaW5nIG9yIGRpZmZlcmVudAorCQkJICogY29sdW1ucyB0 aGFuIHRob3NlIGRlY2xhcmVkIGxvY2FsbHkuIEhlbmNlIHdlIGhhdmUgdG8gZGVwYXJzZQorCQkJ ICogd2hvbGUtcm93IHJlZmVyZW5jZSBhcyBST1coY29sdW1ucyByZWZlcmVuY2VkIGxvY2FsbHkp LgorCQkJICogQ29uc3RydWN0IHRoaXMgYnkgZGVwYXJzaW5nIGEgIndob2xlIHJvdyIgYXR0cmli dXRlLgorCQkJICovCisJCQlhdHRyc191c2VkID0gYm1zX2FkZF9tZW1iZXIoTlVMTCwKKwkJCQkJ CQkJCQkwIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisKKwkJCS8qCisJ CQkgKiBUaGUgbG9jayBvbiB0aGUgcmVsYXRpb24gd2lsbCBiZSBoZWxkIGJ5IHVwcGVyIGNhbGxl cnMsIHNvIGl0J3MKKwkJCSAqIGZpbmUgdG8gb3BlbiBpdCB3aXRoIG5vIGxvY2sgaGVyZS4KKwkJ CSAqLworCQkJcmVsID0gdGFibGVfb3BlbihydGUtPnJlbGlkLCBOb0xvY2spOworCQkJZGVwYXJz ZVRhcmdldExpc3QoYnVmLCBydGUsIHZhcm5vLCByZWwsIGZhbHNlLCBhdHRyc191c2VkLCBxdWFs aWZ5X2NvbCwKKwkJCQkJCQkgICZyZXRyaWV2ZWRfYXR0cnMpOworCQkJdGFibGVfY2xvc2UocmVs LCBOb0xvY2spOworCQkJYm1zX2ZyZWUoYXR0cnNfdXNlZCk7CisJCX0KKwkJZWxzZSBpZiAocnRl LT5ydGVraW5kID09IFJURV9GVU5DVElPTikKKwkJeworCQkJLyoKKwkJCSAqIEZ1bmN0aW9uIGNh bGwgaXMgdHJhbnNsYXRlZCBhcy1pcywgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZQorCQkJICog Y29sdW1ucyBpbiB0aGUgc2FtZSBvcmRlciBhcyBvbiBsb2NhbCBzZXJ2ZXIKKwkJCSAqLworCQkJ ZGVwYXJzZUZ1bmNDb2xuYW1lcyhidWYsIHZhcm5vLCBydGUsIHF1YWxpZnlfY29sKTsKKwkJfQog CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CiAKIAkJLyogQ29tcGxldGUgdGhlIENB U0UgV0hFTiBzdGF0ZW1lbnQgc3RhcnRlZCBhYm92ZS4gKi8KIAkJaWYgKHF1YWxpZnlfY29sKQog CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgRU5EIik7CiAKLQkJdGFibGVfY2xvc2Uo cmVsLCBOb0xvY2spOwotCQlibXNfZnJlZShhdHRyc191c2VkKTsKIAl9CiAJZWxzZQogCXsKQEAg LTI0NjIsMjkgKzI1NDgsNDAgQEAgZGVwYXJzZUNvbHVtblJlZihTdHJpbmdJbmZvIGJ1ZiwgaW50 IHZhcm5vLCBpbnQgdmFyYXR0bm8sIFJhbmdlVGJsRW50cnkgKnJ0ZSwKIAkJICogSWYgaXQncyBh IGNvbHVtbiBvZiBhIGZvcmVpZ24gdGFibGUsIGFuZCBpdCBoYXMgdGhlIGNvbHVtbl9uYW1lIEZE VwogCQkgKiBvcHRpb24sIHVzZSB0aGF0IHZhbHVlLgogCQkgKi8KLQkJb3B0aW9ucyA9IEdldEZv cmVpZ25Db2x1bW5PcHRpb25zKHJ0ZS0+cmVsaWQsIHZhcmF0dG5vKTsKLQkJZm9yZWFjaChsYywg b3B0aW9ucykKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pCiAJCXsKLQkJCURl ZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChsYyk7Ci0KLQkJCWlmIChzdHJjbXAo ZGVmLT5kZWZuYW1lLCAiY29sdW1uX25hbWUiKSA9PSAwKQorCQkJb3B0aW9ucyA9IEdldEZvcmVp Z25Db2x1bW5PcHRpb25zKHJ0ZS0+cmVsaWQsIHZhcmF0dG5vKTsKKwkJCWZvcmVhY2gobGMsIG9w dGlvbnMpCiAJCQl7Ci0JCQkJY29sbmFtZSA9IGRlZkdldFN0cmluZyhkZWYpOwotCQkJCWJyZWFr OworCQkJCURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCQlp ZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwgImNvbHVtbl9uYW1lIikgPT0gMCkKKwkJCQl7CisJCQkJ CWNvbG5hbWUgPSBkZWZHZXRTdHJpbmcoZGVmKTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQot CQl9CiAKLQkJLyoKLQkJICogSWYgaXQncyBhIGNvbHVtbiBvZiBhIHJlZ3VsYXIgdGFibGUgb3Ig aXQgZG9lc24ndCBoYXZlIGNvbHVtbl9uYW1lCi0JCSAqIEZEVyBvcHRpb24sIHVzZSBhdHRyaWJ1 dGUgbmFtZS4KLQkJICovCi0JCWlmIChjb2xuYW1lID09IE5VTEwpCi0JCQljb2xuYW1lID0gZ2V0 X2F0dG5hbWUocnRlLT5yZWxpZCwgdmFyYXR0bm8sIGZhbHNlKTsKKwkJCS8qCisJCQkgKiBJZiBp dCdzIGEgY29sdW1uIG9mIGEgcmVndWxhciB0YWJsZSBvciBpdCBkb2Vzbid0IGhhdmUKKwkJCSAq IGNvbHVtbl9uYW1lIEZEVyBvcHRpb24sIHVzZSBhdHRyaWJ1dGUgbmFtZS4KKwkJCSAqLworCQkJ aWYgKGNvbG5hbWUgPT0gTlVMTCkKKwkJCQljb2xuYW1lID0gZ2V0X2F0dG5hbWUocnRlLT5yZWxp ZCwgdmFyYXR0bm8sIGZhbHNlKTsKIAotCQlpZiAocXVhbGlmeV9jb2wpCi0JCQlBRERfUkVMX1FV QUxJRklFUihidWYsIHZhcm5vKTsKKwkJCWlmIChxdWFsaWZ5X2NvbCkKKwkJCQlBRERfUkVMX1FV QUxJRklFUihidWYsIHZhcm5vKTsKIAotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVv dGVfaWRlbnRpZmllcihjb2xuYW1lKSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg cXVvdGVfaWRlbnRpZmllcihjb2xuYW1lKSk7CisJCX0KKwkJZWxzZSBpZiAocnRlLT5ydGVraW5k ID09IFJURV9GVU5DVElPTikKKwkJeworCQkJY29sbmFtZSA9IGdldF9ydGVfYXR0cmlidXRlX25h bWUocnRlLCB2YXJhdHRubyk7CisKKwkJCWlmIChxdWFsaWZ5X2NvbCkKKwkJCQlBRERfUkVMX1FV QUxJRklFUihidWYsIHZhcm5vKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90 ZV9pZGVudGlmaWVyKGNvbG5hbWUpKTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9zdGdy ZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggYzdiN2RiODA2NTAuLmJjODk2 OTE0ZmQxIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jl c19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zk dy5vdXQKQEAgLTEwNzYxLDMgKzEwNzYxLDEwOTggQEAgRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZv ciBpbnRlZ2VyIG9wdGlvbiAiZmV0Y2hfc2l6ZSI6IDEwMCQlJCMkIwogQ1JFQVRFIEZPUkVJR04g VEFCTEUgaW52X2JzeiAoYzEgaW50ICkKIAlTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoYmF0Y2hf c2l6ZSAnMTAwJCUkIyQjJyk7CiBFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIGludGVnZXIgb3B0 aW9uICJiYXRjaF9zaXplIjogMTAwJCUkIyQjCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSB0ZXN0IGZ1bmN0 aW9uIHNjYW4gcHVzaGRvd24KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSBiYXNlX3RibCAo YSBpbnQsIGIgaW50KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHJlbW90ZV90YmwgKGEgaW50LCBi IGludCkKKyAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2VfdGJsJyk7 CitBTFRFUiBGT1JFSUdOIFRBQkxFIHJlbW90ZV90YmwgT1BUSU9OUyAodXNlX3JlbW90ZV9lc3Rp bWF0ZSAndHJ1ZScpOworQ1JFQVRFIFRBQkxFIGJhc2VfdGJsMSAoYyBpbnQsIGQgdGV4dCk7CitD UkVBVEUgRk9SRUlHTiBUQUJMRSByZW1vdGVfdGJsMSAoYyBpbnQsIGQgdGV4dCkKKyAgU0VSVkVS IGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2VfdGJsMScpOworQUxURVIgRk9SRUlH TiBUQUJMRSByZW1vdGVfdGJsMSBPUFRJT05TICh1c2VfcmVtb3RlX2VzdGltYXRlICd0cnVlJyk7 CitJTlNFUlQgSU5UTyByZW1vdGVfdGJsIFNFTEVDVCBnLCBnKjIgZnJvbSAgZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMCkgZzsKK0lOU0VSVCBJTlRPIHJlbW90ZV90YmwxIFNFTEVDVCBnLCAndGV4dCd8 fCBnIGZyb20gIGdlbmVyYXRlX3NlcmllcygxLDUwMCkgZzsKK0FOQUxZWkUgYmFzZV90Ymw7CitB TkFMWVpFIGJhc2VfdGJsMTsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gcmVtb3RlX3RibCByLCB1bm5lc3QoYXJyYXlbMiwzLDRdKSBuIFdIRVJFIHIuYSA9IG47 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGb3JlaWduIFNj YW4KKyAgIE91dHB1dDogci5hLCByLmIsIG4ubgorICAgUmVsYXRpb25zOiAocHVibGljLnJlbW90 ZV90YmwgcikgSU5ORVIgSk9JTiAocGdfY2F0YWxvZy51bm5lc3QoKSBuKQorICAgUmVtb3RlIFNR TDogU0VMRUNUIHIxLmEsIHIxLmIsIHIyLm4gRlJPTSAocHVibGljLmJhc2VfdGJsIHIxIElOTkVS IEpPSU4gdW5uZXN0KCd7MiwzLDR9Jzo6aW50ZWdlcltdKSByMiAobikgIE9OICgoKHIxLmEgPSBy Mi5uKSkpKQorKDQgcm93cykKKworU0VMRUNUICogRlJPTSByZW1vdGVfdGJsIHIsIHVubmVzdChh cnJheVsyLDMsNF0pIG4gV0hFUkUgci5hID0gbgorT1JERVIgQlkgci5hOworIGEgfCBiIHwgbiAK Ky0tLSstLS0rLS0tCisgMiB8IDQgfCAyCisgMyB8IDYgfCAzCisgNCB8IDggfCA0CisoMyByb3dz KQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHVubmVzdChh cnJheVsyLDMsNF0pIG4sIHJlbW90ZV90YmwgciBXSEVSRSByLmEgPSBuOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRm9yZWlnbiBTY2FuCisgICBPdXRwdXQ6 IG4ubiwgci5hLCByLmIKKyAgIFJlbGF0aW9uczogKHB1YmxpYy5yZW1vdGVfdGJsIHIpIElOTkVS IEpPSU4gKHBnX2NhdGFsb2cudW5uZXN0KCkgbikKKyAgIFJlbW90ZSBTUUw6IFNFTEVDVCByMS5u LCByMi5hLCByMi5iIEZST00gKHB1YmxpYy5iYXNlX3RibCByMiBJTk5FUiBKT0lOIHVubmVzdCgn ezIsMyw0fSc6OmludGVnZXJbXSkgcjEgKG4pICBPTiAoKChyMS5uID0gcjIuYSkpKSkKKyg0IHJv d3MpCisKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFycmF5WzIsMyw0XSkgbiwgcmVtb3RlX3RibCBy IFdIRVJFIHIuYSA9IG4KK09SREVSIEJZIHIuYTsKKyBuIHwgYSB8IGIgCistLS0rLS0tKy0tLQor IDIgfCAyIHwgNAorIDMgfCAzIHwgNgorIDQgfCA0IHwgOAorKDMgcm93cykKKworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSByZW1vdGVfdGJsIHIsIHJlbW90ZV90 YmwxIHIxLCB1bm5lc3QoYXJyYXlbMyw0XSkgbgorV0hFUkUgci5hID0gbiBBTkQgcjEuYyA9IHIu YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgRm9yZWlnbiBTY2FuCisgICBPdXRwdXQ6IHIuYSwgci5iLCByMS5jLCByMS5kLCBuLm4K KyAgIFJlbGF0aW9uczogKChwdWJsaWMucmVtb3RlX3RibCByKSBJTk5FUiBKT0lOIChwdWJsaWMu cmVtb3RlX3RibDEgcjEpKSBJTk5FUiBKT0lOIChwZ19jYXRhbG9nLnVubmVzdCgpIG4pCisgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgcjEuYSwgcjEuYiwgcjIuYywgcjIuZCwgcjMubiBGUk9NICgocHVi bGljLmJhc2VfdGJsIHIxIElOTkVSIEpPSU4gcHVibGljLmJhc2VfdGJsMSByMiBPTiAoKChyMS5h ID0gcjIuYykpKSkgSU5ORVIgSk9JTiB1bm5lc3QoJ3szLDR9Jzo6aW50ZWdlcltdKSByMyAobikg IE9OICgoKHIxLmEgPSByMy5uKSkpKQorKDQgcm93cykKKworU0VMRUNUICogRlJPTSByZW1vdGVf dGJsIHIsIHJlbW90ZV90YmwxIHIxLCB1bm5lc3QoYXJyYXlbMyw0XSkgbgorV0hFUkUgci5hID0g biBBTkQgcjEuYyA9IHIuYQorT1JERVIgQlkgci5hOworIGEgfCBiIHwgYyB8ICAgZCAgIHwgbiAK Ky0tLSstLS0rLS0tKy0tLS0tLS0rLS0tCisgMyB8IDYgfCAzIHwgdGV4dDMgfCAzCisgNCB8IDgg fCA0IHwgdGV4dDQgfCA0CisoMiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp CitTRUxFQ1Qgci4qLG4gZnJvbSByZW1vdGVfdGJsIHIsIHJlbW90ZV90YmwxIHIxLCB1bm5lc3Qo YXJyYXlbMyw0XSkgbgorV0hFUkUgci5hID0gbiBBTkQgcjEuYyA9IHIuYSBhbmQgbiA+IDM7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBGb3JlaWduIFNjYW4KKyAgIE91dHB1dDogci5hLCByLmIsIG4ubgorICAgUmVs YXRpb25zOiAoKHB1YmxpYy5yZW1vdGVfdGJsIHIpIElOTkVSIEpPSU4gKHB1YmxpYy5yZW1vdGVf dGJsMSByMSkpIElOTkVSIEpPSU4gKHBnX2NhdGFsb2cudW5uZXN0KCkgbikKKyAgIFJlbW90ZSBT UUw6IFNFTEVDVCByMS5hLCByMS5iLCByMy5uIEZST00gKChwdWJsaWMuYmFzZV90YmwgcjEgSU5O RVIgSk9JTiBwdWJsaWMuYmFzZV90YmwxIHIyIE9OICgoKHIxLmEgPSByMi5jKSkpKSBJTk5FUiBK T0lOIHVubmVzdCgnezMsNH0nOjppbnRlZ2VyW10pIHIzIChuKSAgT04gKCgocjEuYSA9IHIzLm4p KSBBTkQgKChyMy5uID4gMykpKSkKKyg0IHJvd3MpCisKK1NFTEVDVCAqIGZyb20gcmVtb3RlX3Ri bCByLCByZW1vdGVfdGJsMSByMSwgdW5uZXN0KGFycmF5WzMsNF0pIG4KK1dIRVJFIHIuYSA9IG4g QU5EIHIxLmMgPSByLmEgYW5kIG4gPiAzOworIGEgfCBiIHwgYyB8ICAgZCAgIHwgbiAKKy0tLSst LS0rLS0tKy0tLS0tLS0rLS0tCisgNCB8IDggfCA0IHwgdGV4dDQgfCA0CisoMSByb3cpCisKK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCByLiosIHQubiBmcm9tIHJlbW90ZV90 YmwxIHIsIFJPV1MgRlJPTSAodW5uZXN0KGFycmF5WzMsNF0pLCBqc29uX2VhY2hfdGV4dCgneyJh IjoidGV4dDEiLCAiYyI6InRleHQ0In0nKSkgdCAobiwgaywgdHh0KQorV0hFUkUgci5jID0gIHQu biBBTkQgci5kID0gdC50eHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEZvcmVpZ24gU2NhbgorICAgT3V0cHV0OiByLmMsIHIuZCwgdC5u CisgICBSZWxhdGlvbnM6IChwdWJsaWMucmVtb3RlX3RibDEgcikgSU5ORVIgSk9JTiAoUk9XUyBG Uk9NKHBnX2NhdGFsb2cudW5uZXN0KCksIHBnX2NhdGFsb2cuanNvbl9lYWNoX3RleHQoKSkgdCkK KyAgIFJlbW90ZSBTUUw6IFNFTEVDVCByMS5jLCByMS5kLCByMi5uIEZST00gKHB1YmxpYy5iYXNl X3RibDEgcjEgSU5ORVIgSk9JTiBST1dTIEZST00gKHVubmVzdCgnezMsNH0nOjppbnRlZ2VyW10p LCBqc29uX2VhY2hfdGV4dCgneyJhIjoidGV4dDEiLCAiYyI6InRleHQ0In0nOjpqc29uKSkgcjIg KG4sayx0eHQpICBPTiAoKChyMS5jID0gcjIubikpIEFORCAoKHIxLmQgPSByMi50eHQpKSkpCiso NCByb3dzKQorCitTRUxFQ1Qgci4qLCB0LnR4dCBmcm9tIHJlbW90ZV90YmwxIHIsIFJPV1MgRlJP TSAodW5uZXN0KGFycmF5WzMsNF0pLCBqc29uX2VhY2hfdGV4dCgneyJhIjoidGV4dDEiLCAiYyI6 InRleHQ0In0nKSkgdCAobiwgaywgdHh0KQorV0hFUkUgci5jID0gIHQubiBBTkQgci5kID0gdC50 eHQ7CisgYyB8ICAgZCAgIHwgIHR4dCAgCistLS0rLS0tLS0tLSstLS0tLS0tCisgNCB8IHRleHQ0 IHwgdGV4dDQKKygxIHJvdykKKworLS0gY29tcGxleCB0eXBlcworRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSByZW1vdGVfdGJsIHIgSk9JTiBVTk5FU1QoYXJyYXlb Ym94ICcoKDIsMyksKC0yLC0zKSknXSkgYXMgdChieCkgT04gYSA9IGFyZWEoYngpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBGb3JlaWduIFNjYW4KKyAgIE91dHB1dDogci5hLCByLmIsIHQuYngKKyAgIFJlbGF0 aW9uczogKHB1YmxpYy5yZW1vdGVfdGJsIHIpIElOTkVSIEpPSU4gKHBnX2NhdGFsb2cudW5uZXN0 KCkgdCkKKyAgIFJlbW90ZSBTUUw6IFNFTEVDVCByMS5hLCByMS5iLCByMi5ieCBGUk9NIChwdWJs aWMuYmFzZV90YmwgcjEgSU5ORVIgSk9JTiB1bm5lc3QoJ3soMiwzKSwoLTIsLTMpfSc6OmJveFtd KSByMiAoYngpICBPTiAoKChyMS5hID0gYXJlYShyMi5ieCkpKSkpCisoNCByb3dzKQorCitTRUxF Q1QgKiBGUk9NIHJlbW90ZV90YmwgciBKT0lOIFVOTkVTVChhcnJheVtib3ggJygoMiwzKSwoLTIs LTMpKSddKSBhcyB0KGJ4KSBPTiBhID0gYXJlYShieCkKK09SREVSIEJZIHIuYTsKKyBhICB8IGIg IHwgICAgICBieCAgICAgICAKKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLS0KKyAyNCB8IDQ4IHwg KDIsMyksKC0yLC0zKQorKDEgcm93KQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIHJlbW90ZV90YmwxIHIxIEpPSU4ganNvbl9lYWNoX3RleHQoJ3siYSI6InRl eHQxIiwgImIiOjIsICJjIjoidGV4dDE0In0nKSBPTiBkID0gdmFsdWU7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZvcmVpZ24gU2NhbgorICAgT3V0cHV0OiByMS5j LCByMS5kLCBqc29uX2VhY2hfdGV4dC5rZXksIGpzb25fZWFjaF90ZXh0LnZhbHVlCisgICBSZWxh dGlvbnM6IChwdWJsaWMucmVtb3RlX3RibDEgcjEpIElOTkVSIEpPSU4gKHBnX2NhdGFsb2cuanNv bl9lYWNoX3RleHQoKSkKKyAgIFJlbW90ZSBTUUw6IFNFTEVDVCByMS5jLCByMS5kLCByMi5rZXks IHIyLnZhbHVlIEZST00gKHB1YmxpYy5iYXNlX3RibDEgcjEgSU5ORVIgSk9JTiBqc29uX2VhY2hf dGV4dCgneyJhIjoidGV4dDEiLCAiYiI6MiwgImMiOiJ0ZXh0MTQifSc6Ompzb24pIHIyIChrZXks dmFsdWUpICBPTiAoKChyMS5kID0gcjIudmFsdWUpKSkpCisoNCByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIHJlbW90ZV90YmwxIHIxIEpPSU4ganNvbl9lYWNoX3RleHQoJ3siYSI6InRleHQxIiwgImIi OjIsICJjIjoidGV4dDE0In0nKSBPTiBkID0gdmFsdWUKK09SREVSIEJZIHIxLmM7CisgYyAgfCAg IGQgICAgfCBrZXkgfCB2YWx1ZSAgCistLS0tKy0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tCisgIDEg fCB0ZXh0MSAgfCBhICAgfCB0ZXh0MQorIDE0IHwgdGV4dDE0IHwgYyAgIHwgdGV4dDE0CisoMiBy b3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHJlbW90 ZV90YmwxIHIxIEpPSU4ganNvbl9lYWNoX3RleHQoJ3siYSI6InRleHQxIiwgImIiOjIsICJjIjoi dGV4dDE0In0nKSBBUyB0KHUsdikgT04gZCA9IHY7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGb3JlaWduIFNjYW4KKyAg IE91dHB1dDogcjEuYywgcjEuZCwgdC51LCB0LnYKKyAgIFJlbGF0aW9uczogKHB1YmxpYy5yZW1v dGVfdGJsMSByMSkgSU5ORVIgSk9JTiAocGdfY2F0YWxvZy5qc29uX2VhY2hfdGV4dCgpIHQpCisg ICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjEuYywgcjEuZCwgcjIudSwgcjIudiBGUk9NIChwdWJsaWMu YmFzZV90YmwxIHIxIElOTkVSIEpPSU4ganNvbl9lYWNoX3RleHQoJ3siYSI6InRleHQxIiwgImIi OjIsICJjIjoidGV4dDE0In0nOjpqc29uKSByMiAodSx2KSAgT04gKCgocjEuZCA9IHIyLnYpKSkp CisoNCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHJlbW90ZV90YmwxIHIxIEpPSU4ganNvbl9lYWNo X3RleHQoJ3siYSI6InRleHQxIiwgImIiOjIsICJjIjoidGV4dDE0In0nKSBBUyB0KHUsdikgT04g ZCA9IHYKK09SREVSIEJZIHIxLmM7CisgYyAgfCAgIGQgICAgfCB1IHwgICB2ICAgIAorLS0tLSst LS0tLS0tLSstLS0rLS0tLS0tLS0KKyAgMSB8IHRleHQxICB8IGEgfCB0ZXh0MQorIDE0IHwgdGV4 dDE0IHwgYyB8IHRleHQxNAorKDIgcm93cykKKworLS0gRE1MCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCitVUERBVEUgcmVtb3RlX3RibCByIFNFVCBiPTUgRlJPTSBVTk5FU1QoYXJyYXlb Ym94ICcoKDIsMyksKC0yLC0zKSknXSkgQVMgdCAoYngpIFdIRVJFIHIuYSA9IGFyZWEodC5ieCkK K1JFVFVSTklORyBhLGI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVXBkYXRlIG9uIHB1 YmxpYy5yZW1vdGVfdGJsIHIKKyAgIE91dHB1dDogci5hLCByLmIKKyAgIC0+ICBGb3JlaWduIFVw ZGF0ZQorICAgICAgICAgUmVtb3RlIFNRTDogVVBEQVRFIHB1YmxpYy5iYXNlX3RibCByMSBTRVQg YiA9IDUgRlJPTSB1bm5lc3QoJ3soMiwzKSwoLTIsLTMpfSc6OmJveFtdKSByMiAoYngpICBXSEVS RSAoKHIxLmEgPSBhcmVhKHIyLmJ4KSkpIFJFVFVSTklORyByMS5hLCByMS5iCisoNCByb3dzKQor CitVUERBVEUgcmVtb3RlX3RibCByIFNFVCBiPTUgRlJPTSBVTk5FU1QoYXJyYXlbYm94ICcoKDIs MyksKC0yLC0zKSknXSkgQVMgdCAoYngpIFdIRVJFIHIuYSA9IGFyZWEodC5ieCkKK1JFVFVSTklO RyBhLGI7CisgYSAgfCBiIAorLS0tLSstLS0KKyAyNCB8IDUKKygxIHJvdykKKworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorVVBEQVRFIHJlbW90ZV90YmwgciBTRVQgYj1DQVNFIFdIRU4g cmFuZG9tKCk+PTAgVEhFTiA1IEVMU0UgMCBFTkQgRlJPTSBVTk5FU1QoYXJyYXlbYm94ICcoKDIs MyksKC0yLC0zKSknXSkgQVMgdCAoYngpIFdIRVJFIHIuYSA9IGFyZWEodC5ieCkKK1JFVFVSTklO RyBhLGI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVXBk YXRlIG9uIHB1YmxpYy5yZW1vdGVfdGJsIHIKKyAgIE91dHB1dDogci5hLCByLmIKKyAgIFJlbW90 ZSBTUUw6IFVQREFURSBwdWJsaWMuYmFzZV90YmwgU0VUIGIgPSAkMiBXSEVSRSBjdGlkID0gJDEg UkVUVVJOSU5HIGEsIGIKKyAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgIE91dHB1dDogQ0FT RSBXSEVOIChyYW5kb20oKSA+PSAnMCc6OmRvdWJsZSBwcmVjaXNpb24pIFRIRU4gNSBFTFNFIDAg RU5ELCByLmN0aWQsIHIuKiwgdC4qCisgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMucmVtb3Rl X3RibCByKSBJTk5FUiBKT0lOIChwZ19jYXRhbG9nLnVubmVzdCgpIHQpCisgICAgICAgICBSZW1v dGUgU1FMOiBTRUxFQ1QgcjEuY3RpZCwgQ0FTRSBXSEVOIChyMS4qKTo6dGV4dCBJUyBOT1QgTlVM TCBUSEVOIFJPVyhyMS5hLCByMS5iKSBFTkQsIENBU0UgV0hFTiAocjIuKik6OnRleHQgSVMgTk9U IE5VTEwgVEhFTiBST1cocjIuYngpIEVORCBGUk9NIChwdWJsaWMuYmFzZV90YmwgcjEgSU5ORVIg Sk9JTiB1bm5lc3QoJ3soMiwzKSwoLTIsLTMpfSc6OmJveFtdKSByMiAoYngpICBPTiAoKChyMS5h ID0gYXJlYShyMi5ieCkpKSkpIEZPUiBVUERBVEUgT0YgcjEKKyAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgIE91dHB1dDogci5jdGlkLCByLiosIHQuKgorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAoKHIuYSk6OmRvdWJsZSBwcmVjaXNpb24gPSBhcmVhKHQuYngpKQorICAg ICAgICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMucmVtb3RlX3RibCByCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHIuY3RpZCwgci4qLCByLmEKKyAgICAgICAgICAgICAg ICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjdGlkIEZST00gcHVibGljLmJhc2VfdGJs IEZPUiBVUERBVEUKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQuKiwgdC5ieAorICAgICAgICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNj YW4gb24gcGdfY2F0YWxvZy51bm5lc3QgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0LiosIHQuYngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6 IHVubmVzdCgneygyLDMpLCgtMiwtMyl9Jzo6Ym94W10pCisoMTggcm93cykKKworVVBEQVRFIHJl bW90ZV90YmwgciBTRVQgYj1DQVNFIFdIRU4gcmFuZG9tKCk+PTAgVEhFTiA1IEVMU0UgMCBFTkQg RlJPTSBVTk5FU1QoYXJyYXlbYm94ICcoKDIsMyksKC0yLC0zKSknXSkgQVMgdCAoYngpIFdIRVJF IHIuYSA9IGFyZWEodC5ieCkKK1JFVFVSTklORyBhLGI7CisgYSAgfCBiIAorLS0tLSstLS0KKyAy NCB8IDUKKygxIHJvdykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorVVBEQVRFIHJl bW90ZV90YmwgciBTRVQgYj01IEZST00gVU5ORVNUKGFycmF5WzEwLDIwXSwgYXJyYXlbYm94ICco KDIsMyksKC0yLC00KSknLCBib3ggJygoMSwyKSwoLTIsLTMpKSddKSBBUyB0IChsLCBieCkgV0hF UkUgci5hIGJldHdlZW4gbCBhbmQgYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYjsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgVXBkYXRlIG9uIHB1YmxpYy5yZW1vdGVfdGJsIHIKKyAgIE91dHB1dDogci5hLCBy LmIKKyAgIC0+ICBGb3JlaWduIFVwZGF0ZQorICAgICAgICAgUmVtb3RlIFNRTDogVVBEQVRFIHB1 YmxpYy5iYXNlX3RibCByMSBTRVQgYiA9IDUgRlJPTSBST1dTIEZST00gKHVubmVzdCgnezEwLDIw fSc6OmludGVnZXJbXSksIHVubmVzdCgneygyLDMpLCgtMiwtNCk7KDEsMiksKC0yLC0zKX0nOjpi b3hbXSkpIHIyIChsLGJ4KSAgV0hFUkUgKChyMS5hID49IHIyLmwpKSBBTkQgKChyMS5hIDw9IGFy ZWEocjIuYngpKSkgUkVUVVJOSU5HIHIxLmEsIHIxLmIKKyg0IHJvd3MpCisKK1VQREFURSByZW1v dGVfdGJsIHIgU0VUIGI9NSBGUk9NIFVOTkVTVChhcnJheVsxMCwyMF0sIGFycmF5W2JveCAnKCgy LDMpLCgtMiwtNCkpJywgYm94ICcoKDEsMiksKC0yLC0zKSknXSkgQVMgdCAobCwgYngpIFdIRVJF IHIuYSBiZXR3ZWVuIGwgYW5kIGFyZWEodC5ieCkKK1JFVFVSTklORyBhLGI7CisgYSAgfCBiIAor LS0tLSstLS0KKyAxMCB8IDUKKyAxMSB8IDUKKyAxMiB8IDUKKyAxMyB8IDUKKyAxNCB8IDUKKyAx NSB8IDUKKyAxNiB8IDUKKyAxNyB8IDUKKyAxOCB8IDUKKyAxOSB8IDUKKyAyMCB8IDUKKyAyMSB8 IDUKKyAyMiB8IDUKKyAyMyB8IDUKKyAyNSB8IDUKKyAyNiB8IDUKKyAyNyB8IDUKKyAyOCB8IDUK KyAyNCB8IDUKKygxOSByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitVUERB VEUgcmVtb3RlX3RibCByIFNFVCBiPUNBU0UgV0hFTiByYW5kb20oKT49MCBUSEVOIDUgRUxTRSAw IEVORCBGUk9NIFVOTkVTVChhcnJheVsxMCwyMF0sIGFycmF5W2JveCAnKCgyLDMpLCgtMiwtNCkp JywgYm94ICcoKDEsMiksKC0yLC0zKSknXSkgQVMgdCAobCwgYngpIFdIRVJFIHIuYSBiZXR3ZWVu IGwgYW5kIGFyZWEodC5ieCkKK1JFVFVSTklORyBhLGI7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRhdGUgb24gcHVibGljLnJlbW90ZV90YmwgcgorICAg T3V0cHV0OiByLmEsIHIuYgorICAgUmVtb3RlIFNRTDogVVBEQVRFIHB1YmxpYy5iYXNlX3RibCBT RVQgYiA9ICQyIFdIRVJFIGN0aWQgPSAkMSBSRVRVUk5JTkcgYSwgYgorICAgLT4gIEZvcmVpZ24g U2NhbgorICAgICAgICAgT3V0cHV0OiBDQVNFIFdIRU4gKHJhbmRvbSgpID49ICcwJzo6ZG91Ymxl IHByZWNpc2lvbikgVEhFTiA1IEVMU0UgMCBFTkQsIHIuY3RpZCwgci4qLCB0LioKKyAgICAgICAg IFJlbGF0aW9uczogKHB1YmxpYy5yZW1vdGVfdGJsIHIpIElOTkVSIEpPSU4gKFJPV1MgRlJPTShw Z19jYXRhbG9nLnVubmVzdCgpLCBwZ19jYXRhbG9nLnVubmVzdCgpKSB0KQorICAgICAgICAgUmVt b3RlIFNRTDogU0VMRUNUIHIxLmN0aWQsIENBU0UgV0hFTiAocjEuKik6OnRleHQgSVMgTk9UIE5V TEwgVEhFTiBST1cocjEuYSwgcjEuYikgRU5ELCBDQVNFIFdIRU4gKHIyLiopOjp0ZXh0IElTIE5P VCBOVUxMIFRIRU4gUk9XKHIyLmwscjIuYngpIEVORCBGUk9NIChwdWJsaWMuYmFzZV90YmwgcjEg SU5ORVIgSk9JTiBST1dTIEZST00gKHVubmVzdCgnezEwLDIwfSc6OmludGVnZXJbXSksIHVubmVz dCgneygyLDMpLCgtMiwtNCk7KDEsMiksKC0yLC0zKX0nOjpib3hbXSkpIHIyIChsLGJ4KSAgT04g KCgocjEuYSA+PSByMi5sKSkgQU5EICgocjEuYSA8PSBhcmVhKHIyLmJ4KSkpKSkgRk9SIFVQREFU RSBPRiByMQorICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICBPdXRwdXQ6 IHIuY3RpZCwgci4qLCB0LioKKyAgICAgICAgICAgICAgIEpvaW4gRmlsdGVyOiAoKHIuYSA+PSB0 LmwpIEFORCAoKHIuYSk6OmRvdWJsZSBwcmVjaXNpb24gPD0gYXJlYSh0LmJ4KSkpCisgICAgICAg ICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5yZW1vdGVfdGJsIHIKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogci5jdGlkLCByLiosIHIuYQorICAgICAgICAgICAgICAgICAg ICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGN0aWQgRlJPTSBwdWJsaWMuYmFzZV90YmwgRk9S IFVQREFURQorICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gdAorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0LiosIHQubCwgdC5ieAorICAgICAgICAgICAgICAgICAgICAg RnVuY3Rpb24gQ2FsbDogdW5uZXN0KCd7MTAsMjB9Jzo6aW50ZWdlcltdKSwgdW5uZXN0KCd7KDIs MyksKC0yLC00KTsoMSwyKSwoLTIsLTMpfSc6OmJveFtdKQorKDE2IHJvd3MpCisKK1VQREFURSBy ZW1vdGVfdGJsIHIgU0VUIGI9Q0FTRSBXSEVOIHJhbmRvbSgpPj0wIFRIRU4gNSBFTFNFIDAgRU5E IEZST00gVU5ORVNUKGFycmF5WzEwLDIwXSwgYXJyYXlbYm94ICcoKDIsMyksKC0yLC00KSknLCBi b3ggJygoMSwyKSwoLTIsLTMpKSddKSBBUyB0IChsLCBieCkgV0hFUkUgci5hIGJldHdlZW4gbCBh bmQgYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYjsKKyBhICB8IGIgCistLS0tKy0tLQorIDEwIHwg NQorIDExIHwgNQorIDEyIHwgNQorIDEzIHwgNQorIDE0IHwgNQorIDE1IHwgNQorIDE2IHwgNQor IDE3IHwgNQorIDE4IHwgNQorIDE5IHwgNQorIDIwIHwgNQorIDIxIHwgNQorIDIyIHwgNQorIDIz IHwgNQorIDI1IHwgNQorIDI2IHwgNQorIDI3IHwgNQorIDI4IHwgNQorIDI0IHwgNQorKDE5IHJv d3MpCisKKy0tIFRlc3QgdGhhdCBsb2NhbCBmdW5jdGlvbnMgYXJlIG5vdCBwdXNoZWQgZG93bgor Q1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZihJTlRFR0VSKQorUkVUVVJOUyBTRVRPRiBJTlRF R0VSCitMQU5HVUFHRSBzcWwgQVMgJ3NlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwkMSk7JyBJTU1V VEFCTEU7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHJlbW90 ZV90YmwgciwgZigxMCkgbgorV0hFUkUgci5hID0gbjsKKyAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBPdXRwdXQ6IHIu YSwgci5iLCAoZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSkKKyAgIEhhc2ggQ29uZDogKHIuYSA9IChn ZW5lcmF0ZV9zZXJpZXMoMSwgMTApKSkKKyAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLnJl bW90ZV90YmwgcgorICAgICAgICAgT3V0cHV0OiByLmEsIHIuYgorICAgICAgICAgUmVtb3RlIFNR TDogU0VMRUNUIGEsIGIgRlJPTSBwdWJsaWMuYmFzZV90YmwKKyAgIC0+ICBIYXNoCisgICAgICAg ICBPdXRwdXQ6IChnZW5lcmF0ZV9zZXJpZXMoMSwgMTApKQorICAgICAgICAgLT4gIFByb2plY3RT ZXQKKyAgICAgICAgICAgICAgIE91dHB1dDogZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKQorICAgICAg ICAgICAgICAgLT4gIFJlc3VsdAorKDExIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcmVtb3RlX3Ri bCByLCByZW1vdGVfdGJsMSByMSwgdW5uZXN0KGFycmF5WzMsNF0pIG4KK1dIRVJFIHIuYSA9IG4g QU5EIHIxLmMgPSByLmEgQU5EIG4gPiAzOworIGEgfCBiIHwgYyB8ICAgZCAgIHwgbiAKKy0tLSst LS0rLS0tKy0tLS0tLS0rLS0tCisgNCB8IDggfCA0IHwgdGV4dDQgfCA0CisoMSByb3cpCisKKy0t IFRlc3Qgam9pbnMgd2l0aCBhcHBlbmQgcmVsYXRpb25zCitTRVQgZW5hYmxlX3BhcnRpdGlvbndp c2Vfam9pbj1vbjsKKy0tIFBhcnRpdGlvbmVkIHRhYmxlcyBhbmQgZnVuY3Rpb24gc2NhbiBwdXNo ZG93bgorQ1JFQVRFIFRBQkxFIGRpc3RyMShhIGludCwgYiBpbnQpIFBBUlRJVElPTiBCWSBIQVNI KGEpOworQ1JFQVRFIFRBQkxFIGRpc3RyMV9wYXJ0XzEgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1Ig VkFMVUVTIFdJVEggKCBNT0RVTFVTIDQsIFJFTUFJTkRFUiAwKTsKK0NSRUFURSBUQUJMRSBkaXN0 cjFfYmFzZV8yIChhIGludCwgYiBpbnQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3Bh cnRfMiBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMgV0lUSCAoIE1PRFVMVVMgNCwgUkVN QUlOREVSIDEpCisJU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Rpc3RyMV9i YXNlXzInLCB1c2VfcmVtb3RlX2VzdGltYXRlICd0cnVlJyk7CitDUkVBVEUgVEFCTEUgZGlzdHIx X2Jhc2VfMyAoYSBpbnQsIGIgaW50KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMV9wYXJ0 XzMgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKCBNT0RVTFVTIDQsIFJFTUFJ TkRFUiAyKQorCVNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAodGFibGVfbmFtZSAnZGlzdHIxX2Jh c2VfMycsIHVzZV9yZW1vdGVfZXN0aW1hdGUgJ3RydWUnKTsKK0NSRUFURSBUQUJMRSBkaXN0cjFf YmFzZV80IChhIGludCwgYiBpbnQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3BhcnRf NCBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMgV0lUSCAoIE1PRFVMVVMgNCwgUkVNQUlO REVSIDMpCisJU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Rpc3RyMV9iYXNl XzQnLCB1c2VfcmVtb3RlX2VzdGltYXRlICd0cnVlJyk7CitDUkVBVEUgVEFCTEUgZGlzdHIyKGMg aW50LCBkIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIKGMpOworQ1JFQVRFIFRBQkxFIGRpc3RyMl9w YXJ0XzEgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgNCwgUkVN QUlOREVSIDApOworQ1JFQVRFIFRBQkxFIGRpc3RyMl9iYXNlXzIgKGMgaW50LCBkIHRleHQpOwor Q1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3BhcnRfMiBQQVJUSVRJT04gT0YgZGlzdHIyIEZP UiBWQUxVRVMgV0lUSCAoIE1PRFVMVVMgNCwgUkVNQUlOREVSIDEpCisJU0VSVkVSIGxvb3BiYWNr IE9QVElPTlMgKHRhYmxlX25hbWUgJ2Rpc3RyMl9iYXNlXzInLCB1c2VfcmVtb3RlX2VzdGltYXRl ICd0cnVlJyk7CitDUkVBVEUgVEFCTEUgZGlzdHIyX2Jhc2VfMyAoYyBpbnQsIGQgdGV4dCk7CitD UkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcGFydF8zIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9S IFZBTFVFUyBXSVRIICggTU9EVUxVUyA0LCBSRU1BSU5ERVIgMikKKwlTRVJWRVIgbG9vcGJhY2sy IE9QVElPTlMgKHRhYmxlX25hbWUgJ2Rpc3RyMl9iYXNlXzMnLCB1c2VfcmVtb3RlX2VzdGltYXRl ICd0cnVlJyk7CitDUkVBVEUgVEFCTEUgZGlzdHIyX2Jhc2VfNCAoYyBpbnQsIGQgdGV4dCk7CitD UkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcGFydF80IFBBUlRJVElPTiBPRiBkaXN0cjIgRk9S IFZBTFVFUyBXSVRIICggTU9EVUxVUyA0LCBSRU1BSU5ERVIgMykKKwlTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAodGFibGVfbmFtZSAnZGlzdHIyX2Jhc2VfNCcsIHVzZV9yZW1vdGVfZXN0aW1hdGUg J3RydWUnKTsKK0lOU0VSVCBJTlRPIGRpc3RyMSBTRUxFQ1QgZywgZyoyIGZyb20gIGdlbmVyYXRl X3NlcmllcygxLDEwMDApIGc7CitJTlNFUlQgSU5UTyBkaXN0cjIgU0VMRUNUIGcsICd0ZXh0J3x8 IGcgZnJvbSAgZ2VuZXJhdGVfc2VyaWVzKDEsNTAwKSBnOworQU5BTFlaRSBkaXN0cjE7CitBTkFM WVpFIGRpc3RyMV9wYXJ0XzE7CitBTkFMWVpFIGRpc3RyMV9iYXNlXzI7CitBTkFMWVpFIGRpc3Ry MV9iYXNlXzM7CitBTkFMWVpFIGRpc3RyMV9iYXNlXzQ7CitBTkFMWVpFIGRpc3RyMjsKK0FOQUxZ WkUgZGlzdHIyX2Jhc2VfMjsKK0FOQUxZWkUgZGlzdHIyX2Jhc2VfMzsKK0FOQUxZWkUgZGlzdHIy X2Jhc2VfNDsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlz dHIxIGQsIHVubmVzdChhcnJheVsyLDMsNCw1XSkgbiBXSEVSRSBkLmEgPSBuOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBBcHBlbmQKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIE91dHB1dDogZF8xLmEsIGRf MS5iLCBuLm4KKyAgICAgICAgIEhhc2ggQ29uZDogKGRfMS5hID0gbi5uKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0cjFfcGFydF8xIGRfMQorICAgICAgICAgICAgICAgT3V0 cHV0OiBkXzEuYSwgZF8xLmIKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICBPdXRw dXQ6IG4ubgorICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy51 bm5lc3QgbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBuLm4KKyAgICAgICAgICAgICAg ICAgICAgIEZ1bmN0aW9uIENhbGw6IHVubmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdlcltdKQorICAg LT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiBkXzIuYSwgZF8yLmIsIG4ubgorICAg ICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wYXJ0XzIgZF8yKSBJTk5FUiBKT0lOIChw Z19jYXRhbG9nLnVubmVzdCgpIG4pCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjQuYSwg cjQuYiwgcjIubiBGUk9NIChwdWJsaWMuZGlzdHIxX2Jhc2VfMiByNCBJTk5FUiBKT0lOIHVubmVz dCgnezIsMyw0LDV9Jzo6aW50ZWdlcltdKSByMiAobikgIE9OICgoKHI0LmEgPSByMi5uKSkpKQor ICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiBkXzMuYSwgZF8zLmIsIG4ubgor ICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wYXJ0XzMgZF8zKSBJTk5FUiBKT0lO IChwZ19jYXRhbG9nLnVubmVzdCgpIG4pCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjUu YSwgcjUuYiwgcjIubiBGUk9NIChwdWJsaWMuZGlzdHIxX2Jhc2VfMyByNSBJTk5FUiBKT0lOIHVu bmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdlcltdKSByMiAobikgIE9OICgoKHI1LmEgPSByMi5uKSkp KQorICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiBkXzQuYSwgZF80LmIsIG4u bgorICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wYXJ0XzQgZF80KSBJTk5FUiBK T0lOIChwZ19jYXRhbG9nLnVubmVzdCgpIG4pCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1Qg cjYuYSwgcjYuYiwgcjIubiBGUk9NIChwdWJsaWMuZGlzdHIxX2Jhc2VfNCByNiBJTk5FUiBKT0lO IHVubmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdlcltdKSByMiAobikgIE9OICgoKHI2LmEgPSByMi5u KSkpKQorKDIzIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZGlzdHIxIGQsIHVubmVzdChhcnJheVsy LDMsNCw1XSkgbiBXSEVSRSBkLmEgPSBuCitPUkRFUiBCWSBkLmE7CisgYSB8IGIgIHwgbiAKKy0t LSstLS0tKy0tLQorIDIgfCAgNCB8IDIKKyAzIHwgIDYgfCAzCisgNCB8ICA4IHwgNAorIDUgfCAx MCB8IDUKKyg0IHJvd3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gdW5uZXN0KGFycmF5WzIsMyw0LDVdKSBuLCBkaXN0cjEgZCBXSEVSRSBkLmEgPSBuOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIE91dHB1dDog bi5uLCBkXzEuYSwgZF8xLmIKKyAgICAgICAgIEhhc2ggQ29uZDogKGRfMS5hID0gbi5uKQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0cjFfcGFydF8xIGRfMQorICAgICAgICAg ICAgICAgT3V0cHV0OiBkXzEuYSwgZF8xLmIKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICBPdXRwdXQ6IG4ubgorICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdf Y2F0YWxvZy51bm5lc3QgbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBuLm4KKyAgICAg ICAgICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6IHVubmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdl cltdKQorICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiBuLm4sIGRfMi5hLCBk XzIuYgorICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wYXJ0XzIgZF8yKSBJTk5F UiBKT0lOIChwZ19jYXRhbG9nLnVubmVzdCgpIG4pCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxF Q1QgcjEubiwgcjQuYSwgcjQuYiBGUk9NIChwdWJsaWMuZGlzdHIxX2Jhc2VfMiByNCBJTk5FUiBK T0lOIHVubmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdlcltdKSByMSAobikgIE9OICgoKHIxLm4gPSBy NC5hKSkpKQorICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiBuLm4sIGRfMy5h LCBkXzMuYgorICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wYXJ0XzMgZF8zKSBJ Tk5FUiBKT0lOIChwZ19jYXRhbG9nLnVubmVzdCgpIG4pCisgICAgICAgICBSZW1vdGUgU1FMOiBT RUxFQ1QgcjEubiwgcjUuYSwgcjUuYiBGUk9NIChwdWJsaWMuZGlzdHIxX2Jhc2VfMyByNSBJTk5F UiBKT0lOIHVubmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdlcltdKSByMSAobikgIE9OICgoKHIxLm4g PSByNS5hKSkpKQorICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiBuLm4sIGRf NC5hLCBkXzQuYgorICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wYXJ0XzQgZF80 KSBJTk5FUiBKT0lOIChwZ19jYXRhbG9nLnVubmVzdCgpIG4pCisgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgcjEubiwgcjYuYSwgcjYuYiBGUk9NIChwdWJsaWMuZGlzdHIxX2Jhc2VfNCByNiBJ Tk5FUiBKT0lOIHVubmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdlcltdKSByMSAobikgIE9OICgoKHIx Lm4gPSByNi5hKSkpKQorKDIzIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFycmF5WzIs Myw0LDVdKSBuLCBkaXN0cjEgZCBXSEVSRSBkLmEgPSBuCitPUkRFUiBCWSBkLmE7CisgbiB8IGEg fCBiICAKKy0tLSstLS0rLS0tLQorIDIgfCAyIHwgIDQKKyAzIHwgMyB8ICA2CisgNCB8IDQgfCAg OAorIDUgfCA1IHwgMTAKKyg0IHJvd3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gZGlzdHIxIGQxLCBkaXN0cjIgZDIsIHVubmVzdChhcnJheVszLDRdKSBu CitXSEVSRSBkMS5hID0gbiBBTkQgZDIuYyA9IGQxLmE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBPdXRw dXQ6IGQxXzEuYSwgZDFfMS5iLCBkMl8xLmMsIGQyXzEuZCwgbi5uCisgICAgICAgICBIYXNoIENv bmQ6IChkMV8xLmEgPSBuLm4pCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICBPdXRwdXQ6IGQxXzEuYSwgZDFfMS5iLCBkMl8xLmMsIGQyXzEuZAorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAoZDFfMS5hID0gZDJfMS5jKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5kaXN0cjFfcGFydF8xIGQxXzEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogZDFfMS5hLCBkMV8xLmIKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IGQyXzEuYywgZDJfMS5kCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmRpc3RyMl9wYXJ0XzEgZDJfMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiBkMl8xLmMsIGQyXzEuZAorICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgIE91dHB1dDogbi5uCisgICAgICAgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBwZ19jYXRhbG9nLnVubmVzdCBuCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IG4ubgor ICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDogdW5uZXN0KCd7Myw0fSc6OmludGVn ZXJbXSkKKyAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgIE91dHB1dDogZDFfMi5hLCBkMV8y LmIsIGQyXzIuYywgZDJfMi5kLCBuLm4KKyAgICAgICAgIFJlbGF0aW9uczogKChwdWJsaWMuZGlz dHIxX3BhcnRfMiBkMV8yKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3BhcnRfMiBkMl8yKSkg SU5ORVIgSk9JTiAocGdfY2F0YWxvZy51bm5lc3QoKSBuKQorICAgICAgICAgUmVtb3RlIFNRTDog U0VMRUNUIHI1LmEsIHI1LmIsIHI5LmMsIHI5LmQsIHIzLm4gRlJPTSAoKHB1YmxpYy5kaXN0cjFf YmFzZV8yIHI1IElOTkVSIEpPSU4gcHVibGljLmRpc3RyMl9iYXNlXzIgcjkgT04gKCgocjUuYSA9 IHI5LmMpKSkpIElOTkVSIEpPSU4gdW5uZXN0KCd7Myw0fSc6OmludGVnZXJbXSkgcjMgKG4pICBP TiAoKChyNS5hID0gcjMubikpKSkKKyAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgIE91dHB1 dDogZDFfMy5hLCBkMV8zLmIsIGQyXzMuYywgZDJfMy5kLCBuLm4KKyAgICAgICAgIFJlbGF0aW9u czogKChwdWJsaWMuZGlzdHIxX3BhcnRfMyBkMV8zKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIy X3BhcnRfMyBkMl8zKSkgSU5ORVIgSk9JTiAocGdfY2F0YWxvZy51bm5lc3QoKSBuKQorICAgICAg ICAgUmVtb3RlIFNRTDogU0VMRUNUIHI2LmEsIHI2LmIsIHIxMC5jLCByMTAuZCwgcjMubiBGUk9N ICgocHVibGljLmRpc3RyMV9iYXNlXzMgcjYgSU5ORVIgSk9JTiBwdWJsaWMuZGlzdHIyX2Jhc2Vf MyByMTAgT04gKCgocjYuYSA9IHIxMC5jKSkpKSBJTk5FUiBKT0lOIHVubmVzdCgnezMsNH0nOjpp bnRlZ2VyW10pIHIzIChuKSAgT04gKCgocjYuYSA9IHIzLm4pKSkpCisgICAtPiAgRm9yZWlnbiBT Y2FuCisgICAgICAgICBPdXRwdXQ6IGQxXzQuYSwgZDFfNC5iLCBkMl80LmMsIGQyXzQuZCwgbi5u CisgICAgICAgICBSZWxhdGlvbnM6ICgocHVibGljLmRpc3RyMV9wYXJ0XzQgZDFfNCkgSU5ORVIg Sk9JTiAocHVibGljLmRpc3RyMl9wYXJ0XzQgZDJfNCkpIElOTkVSIEpPSU4gKHBnX2NhdGFsb2cu dW5uZXN0KCkgbikKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNy5hLCByNy5iLCByMTEu YywgcjExLmQsIHIzLm4gRlJPTSAoKHB1YmxpYy5kaXN0cjFfYmFzZV80IHI3IElOTkVSIEpPSU4g cHVibGljLmRpc3RyMl9iYXNlXzQgcjExIE9OICgoKHI3LmEgPSByMTEuYykpKSkgSU5ORVIgSk9J TiB1bm5lc3QoJ3szLDR9Jzo6aW50ZWdlcltdKSByMyAobikgIE9OICgoKHI3LmEgPSByMy5uKSkp KQorKDMwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZGlzdHIxIGQxLCBkaXN0cjIgZDIsIHVubmVz dChhcnJheVszLDRdKSBuCitXSEVSRSBkMS5hID0gbiBBTkQgZDIuYyA9IGQxLmEKK09SREVSIEJZ IGQxLmE7CisgYSB8IGIgfCBjIHwgICBkICAgfCBuIAorLS0tKy0tLSstLS0rLS0tLS0tLSstLS0K KyAzIHwgNiB8IDMgfCB0ZXh0MyB8IDMKKyA0IHwgOCB8IDQgfCB0ZXh0NCB8IDQKKygyIHJvd3Mp CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIGZyb20gZGlzdHIxIGQx LCBkaXN0cjIgZDIsIHVubmVzdChhcnJheVszLDRdKSBuCitXSEVSRSBkMS5hID0gbiBBTkQgZDIu YyA9IGQxLmEgYW5kIG4gPiAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgIE91dHB1dDogZDFfMS5hLCBkMV8xLmIsIGQyXzEuYywgZDJfMS5kLCBu Lm4KKyAgICAgICAgIEhhc2ggQ29uZDogKGQxXzEuYSA9IG4ubikKKyAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogZDFfMS5hLCBkMV8xLmIsIGQyXzEuYywgZDJf MS5kCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChkMV8xLmEgPSBkMl8xLmMpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmRpc3RyMV9wYXJ0XzEgZDFfMQorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEuYgorICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZDJfMS5jLCBkMl8xLmQKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZGlzdHIyX3BhcnRfMSBkMl8x CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGQyXzEuYywgZDJfMS5kCisgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgT3V0cHV0OiBuLm4KKyAgICAgICAgICAgICAg IC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cudW5uZXN0IG4KKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogbi5uCisgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBDYWxsOiB1 bm5lc3QoJ3szLDR9Jzo6aW50ZWdlcltdKQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo bi5uID4gMykKKyAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgIE91dHB1dDogZDFfMi5hLCBk MV8yLmIsIGQyXzIuYywgZDJfMi5kLCBuLm4KKyAgICAgICAgIFJlbGF0aW9uczogKChwdWJsaWMu ZGlzdHIxX3BhcnRfMiBkMV8yKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3BhcnRfMiBkMl8y KSkgSU5ORVIgSk9JTiAocGdfY2F0YWxvZy51bm5lc3QoKSBuKQorICAgICAgICAgUmVtb3RlIFNR TDogU0VMRUNUIHI1LmEsIHI1LmIsIHI5LmMsIHI5LmQsIHIzLm4gRlJPTSAoKHB1YmxpYy5kaXN0 cjFfYmFzZV8yIHI1IElOTkVSIEpPSU4gcHVibGljLmRpc3RyMl9iYXNlXzIgcjkgT04gKCgocjUu YSA9IHI5LmMpKSkpIElOTkVSIEpPSU4gdW5uZXN0KCd7Myw0fSc6OmludGVnZXJbXSkgcjMgKG4p ICBPTiAoKChyNS5hID0gcjMubikpIEFORCAoKHIzLm4gPiAzKSkpKQorICAgLT4gIEZvcmVpZ24g U2NhbgorICAgICAgICAgT3V0cHV0OiBkMV8zLmEsIGQxXzMuYiwgZDJfMy5jLCBkMl8zLmQsIG4u bgorICAgICAgICAgUmVsYXRpb25zOiAoKHB1YmxpYy5kaXN0cjFfcGFydF8zIGQxXzMpIElOTkVS IEpPSU4gKHB1YmxpYy5kaXN0cjJfcGFydF8zIGQyXzMpKSBJTk5FUiBKT0lOIChwZ19jYXRhbG9n LnVubmVzdCgpIG4pCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjYuYSwgcjYuYiwgcjEw LmMsIHIxMC5kLCByMy5uIEZST00gKChwdWJsaWMuZGlzdHIxX2Jhc2VfMyByNiBJTk5FUiBKT0lO IHB1YmxpYy5kaXN0cjJfYmFzZV8zIHIxMCBPTiAoKChyNi5hID0gcjEwLmMpKSkpIElOTkVSIEpP SU4gdW5uZXN0KCd7Myw0fSc6OmludGVnZXJbXSkgcjMgKG4pICBPTiAoKChyNi5hID0gcjMubikp IEFORCAoKHIzLm4gPiAzKSkpKQorICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0 OiBkMV80LmEsIGQxXzQuYiwgZDJfNC5jLCBkMl80LmQsIG4ubgorICAgICAgICAgUmVsYXRpb25z OiAoKHB1YmxpYy5kaXN0cjFfcGFydF80IGQxXzQpIElOTkVSIEpPSU4gKHB1YmxpYy5kaXN0cjJf cGFydF80IGQyXzQpKSBJTk5FUiBKT0lOIChwZ19jYXRhbG9nLnVubmVzdCgpIG4pCisgICAgICAg ICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjcuYSwgcjcuYiwgcjExLmMsIHIxMS5kLCByMy5uIEZST00g KChwdWJsaWMuZGlzdHIxX2Jhc2VfNCByNyBJTk5FUiBKT0lOIHB1YmxpYy5kaXN0cjJfYmFzZV80 IHIxMSBPTiAoKChyNy5hID0gcjExLmMpKSkpIElOTkVSIEpPSU4gdW5uZXN0KCd7Myw0fSc6Omlu dGVnZXJbXSkgcjMgKG4pICBPTiAoKChyNy5hID0gcjMubikpIEFORCAoKHIzLm4gPiAzKSkpKQor KDMxIHJvd3MpCisKK1NFTEVDVCAqIGZyb20gZGlzdHIxIGQxLCBkaXN0cjIgZDIsIHVubmVzdChh cnJheVszLDRdKSBuCitXSEVSRSBkMS5hID0gbiBBTkQgZDIuYyA9IGQxLmEgYW5kIG4gPiAzCitP UkRFUiBCWSBkMS5hOworIGEgfCBiIHwgYyB8ICAgZCAgIHwgbiAKKy0tLSstLS0rLS0tKy0tLS0t LS0rLS0tCisgNCB8IDggfCA0IHwgdGV4dDQgfCA0CisoMSByb3cpCisKKy0tIERpcmVjdCB1cGRh dGUgd2l0aCByZXR1cm5pbmcKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1VQREFURSBk aXN0cjEgZDEgU0VUIGI9dC5sIEZST00gVU5ORVNUKGFycmF5WzEwLDIwXSwgYXJyYXlbYm94ICco KDIsMyksKC0yLC00KSknLCBib3ggJygoMSwyKSwoLTIsLTMpKSddKSBBUyB0IChsLCBieCkgV0hF UkUgZDEuYSBiZXR3ZWVuIGwgYW5kIGFyZWEodC5ieCkKK1JFVFVSTklORyBhLGI7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRhdGUgb24gcHVibGljLmRp c3RyMSBkMQorICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEuYgorICAgVXBkYXRlIG9uIHB1YmxpYy5k aXN0cjFfcGFydF8xIGQxXzEKKyAgIEZvcmVpZ24gVXBkYXRlIG9uIHB1YmxpYy5kaXN0cjFfcGFy dF8yIGQxXzIKKyAgIEZvcmVpZ24gVXBkYXRlIG9uIHB1YmxpYy5kaXN0cjFfcGFydF8zIGQxXzMK KyAgIEZvcmVpZ24gVXBkYXRlIG9uIHB1YmxpYy5kaXN0cjFfcGFydF80IGQxXzQKKyAgIC0+ICBS ZXN1bHQKKyAgICAgICAgIE91dHB1dDogdC5sLCB0LiosIGQxLnRhYmxlb2lkLCBkMS5jdGlkLCAo TlVMTDo6cmVjb3JkKQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGQxXzEudGFibGVvaWQsIGQx XzEuY3RpZCwgTlVMTDo6cmVjb3JkLCB0LmwsIHQuKgorICAgICAgICAgICAgICAgICAgICAgSm9p biBGaWx0ZXI6ICgoZDFfMS5hID49IHQubCkgQU5EICgoZDFfMS5hKTo6ZG91YmxlIHByZWNpc2lv biA8PSBhcmVhKHQuYngpKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2Fu IG9uIHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdC5sLCB0LiosIHQuYngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6IHVubmVzdCgnezEwLDIw fSc6OmludGVnZXJbXSksIHVubmVzdCgneygyLDMpLCgtMiwtNCk7KDEsMiksKC0yLC0zKX0nOjpi b3hbXSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEudGFibGVvaWQsIGQxXzEuY3RpZCwg TlVMTDo6cmVjb3JkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmRpc3RyMV9wYXJ0XzEgZDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEudGFibGVvaWQsIGQxXzEuY3RpZCwgTlVMTDo6cmVjb3Jk CisgICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBVcGRhdGUKKyAgICAgICAgICAgICAgICAgICAg IFJlbW90ZSBTUUw6IFVQREFURSBwdWJsaWMuZGlzdHIxX2Jhc2VfMiByNCBTRVQgYiA9IHIyLmwg RlJPTSBST1dTIEZST00gKHVubmVzdCgnezEwLDIwfSc6OmludGVnZXJbXSksIHVubmVzdCgneygy LDMpLCgtMiwtNCk7KDEsMiksKC0yLC0zKX0nOjpib3hbXSkpIHIyIChsLGJ4KSAgV0hFUkUgKChy NC5hID49IHIyLmwpKSBBTkQgKChyNC5hIDw9IGFyZWEocjIuYngpKSkgUkVUVVJOSU5HIENBU0Ug V0hFTiAocjQuKik6OnRleHQgSVMgTk9UIE5VTEwgVEhFTiAxNzI1NCBFTkQsIHI0LmEsIHI0LmIK KyAgICAgICAgICAgICAgIC0+ICBGb3JlaWduIFVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAg UmVtb3RlIFNRTDogVVBEQVRFIHB1YmxpYy5kaXN0cjFfYmFzZV8zIHI1IFNFVCBiID0gcjIubCBG Uk9NIFJPV1MgRlJPTSAodW5uZXN0KCd7MTAsMjB9Jzo6aW50ZWdlcltdKSwgdW5uZXN0KCd7KDIs MyksKC0yLC00KTsoMSwyKSwoLTIsLTMpfSc6OmJveFtdKSkgcjIgKGwsYngpICBXSEVSRSAoKHI1 LmEgPj0gcjIubCkpIEFORCAoKHI1LmEgPD0gYXJlYShyMi5ieCkpKSBSRVRVUk5JTkcgQ0FTRSBX SEVOIChyNS4qKTo6dGV4dCBJUyBOT1QgTlVMTCBUSEVOIDE3MjYwIEVORCwgcjUuYSwgcjUuYgor ICAgICAgICAgICAgICAgLT4gIEZvcmVpZ24gVXBkYXRlCisgICAgICAgICAgICAgICAgICAgICBS ZW1vdGUgU1FMOiBVUERBVEUgcHVibGljLmRpc3RyMV9iYXNlXzQgcjYgU0VUIGIgPSByMi5sIEZS T00gUk9XUyBGUk9NICh1bm5lc3QoJ3sxMCwyMH0nOjppbnRlZ2VyW10pLCB1bm5lc3QoJ3soMiwz KSwoLTIsLTQpOygxLDIpLCgtMiwtMyl9Jzo6Ym94W10pKSByMiAobCxieCkgIFdIRVJFICgocjYu YSA+PSByMi5sKSkgQU5EICgocjYuYSA8PSBhcmVhKHIyLmJ4KSkpIFJFVFVSTklORyBDQVNFIFdI RU4gKHI2LiopOjp0ZXh0IElTIE5PVCBOVUxMIFRIRU4gMTcyNjYgRU5ELCByNi5hLCByNi5iCiso MjUgcm93cykKKworVVBEQVRFIGRpc3RyMSBkMSBTRVQgYj10LmwgRlJPTSBVTk5FU1QoYXJyYXlb MTAsMjBdLCBhcnJheVtib3ggJygoMiwzKSwoLTIsLTQpKScsIGJveCAnKCgxLDIpLCgtMiwtMykp J10pIEFTIHQgKGwsIGJ4KSBXSEVSRSBkMS5hIGJldHdlZW4gbCBhbmQgYXJlYSh0LmJ4KQorUkVU VVJOSU5HIGEsYjsKKyBhICB8IGIgIAorLS0tLSstLS0tCisgMTIgfCAxMAorIDE0IHwgMTAKKyAx NiB8IDEwCisgMTcgfCAxMAorIDI2IHwgMTAKKyAyOCB8IDEwCisgMTEgfCAxMAorIDE5IHwgMTAK KyAyMCB8IDEwCisgMjEgfCAxMAorIDEzIHwgMTAKKyAxOCB8IDEwCisgMjMgfCAxMAorIDI1IHwg MTAKKyAyNyB8IDEwCisgMTAgfCAxMAorIDE1IHwgMTAKKyAyMiB8IDEwCisgMjQgfCAxMAorKDE5 IHJvd3MpCisKKy0tIERpcmVjdCB1cGRhdGUgd2l0aCByZXR1cm5pbmcgdGFibGVvaWQKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1VQREFURSBkaXN0cjEgZDEgU0VUIGI9dC5sIEZST00g VU5ORVNUKGFycmF5WzEwLDIwXSwgYXJyYXlbYm94ICcoKDIsMyksKC0yLC00KSknLCBib3ggJygo MSwyKSwoLTIsLTMpKSddKSBBUyB0IChsLCBieCkgV0hFUkUgZDEuYSBiZXR3ZWVuIGwgYW5kIGFy ZWEodC5ieCkKK1JFVFVSTklORyBhLGIsdGFibGVvaWQ7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRhdGUgb24gcHVibGljLmRpc3RyMSBkMQorICAgT3V0 cHV0OiBkMV8xLmEsIGQxXzEuYiwgZDFfMS50YWJsZW9pZAorICAgVXBkYXRlIG9uIHB1YmxpYy5k aXN0cjFfcGFydF8xIGQxXzEKKyAgIEZvcmVpZ24gVXBkYXRlIG9uIHB1YmxpYy5kaXN0cjFfcGFy dF8yIGQxXzIKKyAgIEZvcmVpZ24gVXBkYXRlIG9uIHB1YmxpYy5kaXN0cjFfcGFydF8zIGQxXzMK KyAgIEZvcmVpZ24gVXBkYXRlIG9uIHB1YmxpYy5kaXN0cjFfcGFydF80IGQxXzQKKyAgIC0+ICBS ZXN1bHQKKyAgICAgICAgIE91dHB1dDogdC5sLCB0LiosIGQxLnRhYmxlb2lkLCBkMS5jdGlkLCAo TlVMTDo6cmVjb3JkKQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGQxXzEudGFibGVvaWQsIGQx XzEuY3RpZCwgTlVMTDo6cmVjb3JkLCB0LmwsIHQuKgorICAgICAgICAgICAgICAgICAgICAgSm9p biBGaWx0ZXI6ICgoZDFfMS5hID49IHQubCkgQU5EICgoZDFfMS5hKTo6ZG91YmxlIHByZWNpc2lv biA8PSBhcmVhKHQuYngpKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2Fu IG9uIHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdC5sLCB0LiosIHQuYngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6IHVubmVzdCgnezEwLDIw fSc6OmludGVnZXJbXSksIHVubmVzdCgneygyLDMpLCgtMiwtNCk7KDEsMiksKC0yLC0zKX0nOjpi b3hbXSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEudGFibGVvaWQsIGQxXzEuY3RpZCwg TlVMTDo6cmVjb3JkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmRpc3RyMV9wYXJ0XzEgZDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEudGFibGVvaWQsIGQxXzEuY3RpZCwgTlVMTDo6cmVjb3Jk CisgICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBVcGRhdGUKKyAgICAgICAgICAgICAgICAgICAg IFJlbW90ZSBTUUw6IFVQREFURSBwdWJsaWMuZGlzdHIxX2Jhc2VfMiByNCBTRVQgYiA9IHIyLmwg RlJPTSBST1dTIEZST00gKHVubmVzdCgnezEwLDIwfSc6OmludGVnZXJbXSksIHVubmVzdCgneygy LDMpLCgtMiwtNCk7KDEsMiksKC0yLC0zKX0nOjpib3hbXSkpIHIyIChsLGJ4KSAgV0hFUkUgKChy NC5hID49IHIyLmwpKSBBTkQgKChyNC5hIDw9IGFyZWEocjIuYngpKSkgUkVUVVJOSU5HIENBU0Ug V0hFTiAocjQuKik6OnRleHQgSVMgTk9UIE5VTEwgVEhFTiAxNzI1NCBFTkQsIHI0LmEsIHI0LmIK KyAgICAgICAgICAgICAgIC0+ICBGb3JlaWduIFVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAg UmVtb3RlIFNRTDogVVBEQVRFIHB1YmxpYy5kaXN0cjFfYmFzZV8zIHI1IFNFVCBiID0gcjIubCBG Uk9NIFJPV1MgRlJPTSAodW5uZXN0KCd7MTAsMjB9Jzo6aW50ZWdlcltdKSwgdW5uZXN0KCd7KDIs MyksKC0yLC00KTsoMSwyKSwoLTIsLTMpfSc6OmJveFtdKSkgcjIgKGwsYngpICBXSEVSRSAoKHI1 LmEgPj0gcjIubCkpIEFORCAoKHI1LmEgPD0gYXJlYShyMi5ieCkpKSBSRVRVUk5JTkcgQ0FTRSBX SEVOIChyNS4qKTo6dGV4dCBJUyBOT1QgTlVMTCBUSEVOIDE3MjYwIEVORCwgcjUuYSwgcjUuYgor ICAgICAgICAgICAgICAgLT4gIEZvcmVpZ24gVXBkYXRlCisgICAgICAgICAgICAgICAgICAgICBS ZW1vdGUgU1FMOiBVUERBVEUgcHVibGljLmRpc3RyMV9iYXNlXzQgcjYgU0VUIGIgPSByMi5sIEZS T00gUk9XUyBGUk9NICh1bm5lc3QoJ3sxMCwyMH0nOjppbnRlZ2VyW10pLCB1bm5lc3QoJ3soMiwz KSwoLTIsLTQpOygxLDIpLCgtMiwtMyl9Jzo6Ym94W10pKSByMiAobCxieCkgIFdIRVJFICgocjYu YSA+PSByMi5sKSkgQU5EICgocjYuYSA8PSBhcmVhKHIyLmJ4KSkpIFJFVFVSTklORyBDQVNFIFdI RU4gKHI2LiopOjp0ZXh0IElTIE5PVCBOVUxMIFRIRU4gMTcyNjYgRU5ELCByNi5hLCByNi5iCiso MjUgcm93cykKKworVVBEQVRFIGRpc3RyMSBkMSBTRVQgYj10LmwgRlJPTSBVTk5FU1QoYXJyYXlb MTAsMjBdLCBhcnJheVtib3ggJygoMiwzKSwoLTIsLTQpKScsIGJveCAnKCgxLDIpLCgtMiwtMykp J10pIEFTIHQgKGwsIGJ4KSBXSEVSRSBkMS5hIGJldHdlZW4gbCBhbmQgYXJlYSh0LmJ4KQorUkVU VVJOSU5HIGEsYix0YWJsZW9pZDsKKyBhICB8IGIgIHwgdGFibGVvaWQgCistLS0tKy0tLS0rLS0t LS0tLS0tLQorIDEyIHwgMTAgfCAgICAxNzI0OAorIDE0IHwgMTAgfCAgICAxNzI0OAorIDE2IHwg MTAgfCAgICAxNzI0OAorIDE3IHwgMTAgfCAgICAxNzI0OAorIDI2IHwgMTAgfCAgICAxNzI0OAor IDI4IHwgMTAgfCAgICAxNzI0OAorIDExIHwgMTAgfCAgICAxNzI1NAorIDE5IHwgMTAgfCAgICAx NzI1NAorIDIwIHwgMTAgfCAgICAxNzI1NAorIDIxIHwgMTAgfCAgICAxNzI1NAorIDEzIHwgMTAg fCAgICAxNzI2MAorIDE4IHwgMTAgfCAgICAxNzI2MAorIDIzIHwgMTAgfCAgICAxNzI2MAorIDI1 IHwgMTAgfCAgICAxNzI2MAorIDI3IHwgMTAgfCAgICAxNzI2MAorIDEwIHwgMTAgfCAgICAxNzI2 NgorIDE1IHwgMTAgfCAgICAxNzI2NgorIDIyIHwgMTAgfCAgICAxNzI2NgorIDI0IHwgMTAgfCAg ICAxNzI2NgorKDE5IHJvd3MpCisKKy0tIEluZGlyZWN0IHVwZGF0ZSB3aXRoIHJldHVybmluZwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorVVBEQVRFIGRpc3RyMSBkMSBTRVQgYj1DQVNF IFdIRU4gcmFuZG9tKCk+PTAgVEhFTiB0LmwgRUxTRSAwIEVORCBGUk9NIFVOTkVTVChhcnJheVsx MCwyMF0sIGFycmF5W2JveCAnKCgyLDMpLCgtMiwtNCkpJywgYm94ICcoKDEsMiksKC0yLC0zKSkn XSkgQVMgdCAobCwgYngpIFdIRVJFIGQxLmEgYmV0d2VlbiBsIGFuZCBhcmVhKHQuYngpCitSRVRV Uk5JTkcgYSxiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBwdWJsaWMuZGlzdHIx IGQxCisgICBPdXRwdXQ6IGQxXzEuYSwgZDFfMS5iCisgICBVcGRhdGUgb24gcHVibGljLmRpc3Ry MV9wYXJ0XzEgZDFfMQorICAgRm9yZWlnbiBVcGRhdGUgb24gcHVibGljLmRpc3RyMV9wYXJ0XzIg ZDFfMgorICAgICBSZW1vdGUgU1FMOiBVUERBVEUgcHVibGljLmRpc3RyMV9iYXNlXzIgU0VUIGIg PSAkMiBXSEVSRSBjdGlkID0gJDEgUkVUVVJOSU5HIGEsIGIKKyAgIEZvcmVpZ24gVXBkYXRlIG9u IHB1YmxpYy5kaXN0cjFfcGFydF8zIGQxXzMKKyAgICAgUmVtb3RlIFNRTDogVVBEQVRFIHB1Ymxp Yy5kaXN0cjFfYmFzZV8zIFNFVCBiID0gJDIgV0hFUkUgY3RpZCA9ICQxIFJFVFVSTklORyBhLCBi CisgICBGb3JlaWduIFVwZGF0ZSBvbiBwdWJsaWMuZGlzdHIxX3BhcnRfNCBkMV80CisgICAgIFJl bW90ZSBTUUw6IFVQREFURSBwdWJsaWMuZGlzdHIxX2Jhc2VfNCBTRVQgYiA9ICQyIFdIRVJFIGN0 aWQgPSAkMSBSRVRVUk5JTkcgYSwgYgorICAgLT4gIFJlc3VsdAorICAgICAgICAgT3V0cHV0OiBD QVNFIFdIRU4gKHJhbmRvbSgpID49ICcwJzo6ZG91YmxlIHByZWNpc2lvbikgVEhFTiB0LmwgRUxT RSAwIEVORCwgdC4qLCBkMS50YWJsZW9pZCwgZDEuY3RpZCwgKE5VTEw6OnJlY29yZCkKKyAgICAg ICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiBkMV8xLnRhYmxlb2lkLCBkMV8xLmN0aWQsIE5VTEw6OnJlY29y ZCwgdC5sLCB0LioKKyAgICAgICAgICAgICAgICAgICAgIEpvaW4gRmlsdGVyOiAoKGQxXzEuYSA+ PSB0LmwpIEFORCAoKGQxXzEuYSk6OmRvdWJsZSBwcmVjaXNpb24gPD0gYXJlYSh0LmJ4KSkpCisg ICAgICAgICAgICAgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiB0CisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQubCwgdC4qLCB0LmJ4CisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGdW5jdGlvbiBDYWxsOiB1bm5lc3QoJ3sxMCwyMH0nOjppbnRlZ2VyW10pLCB1bm5l c3QoJ3soMiwzKSwoLTIsLTQpOygxLDIpLCgtMiwtMyl9Jzo6Ym94W10pCisgICAgICAgICAgICAg ICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogZDFfMS5hLCBkMV8xLnRhYmxlb2lkLCBkMV8xLmN0aWQsIE5VTEw6OnJlY29yZAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0cjFfcGFydF8x IGQxXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZDFfMS5hLCBk MV8xLnRhYmxlb2lkLCBkMV8xLmN0aWQsIE5VTEw6OnJlY29yZAorICAgICAgICAgICAgICAgLT4g IEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBkMV8yLnRhYmxlb2lk LCBkMV8yLmN0aWQsIGQxXzIuKiwgdC5sLCB0LioKKyAgICAgICAgICAgICAgICAgICAgIFJlbGF0 aW9uczogKHB1YmxpYy5kaXN0cjFfcGFydF8yIGQxXzIpIElOTkVSIEpPSU4gKFJPV1MgRlJPTShw Z19jYXRhbG9nLnVubmVzdCgpLCBwZ19jYXRhbG9nLnVubmVzdCgpKSB0KQorICAgICAgICAgICAg ICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIENBU0UgV0hFTiAocjQuKik6OnRleHQgSVMgTk9U IE5VTEwgVEhFTiAxNzI1NCBFTkQsIHI0LmN0aWQsIENBU0UgV0hFTiAocjQuKik6OnRleHQgSVMg Tk9UIE5VTEwgVEhFTiBST1cocjQuYSwgcjQuYikgRU5ELCByMi5sLCBDQVNFIFdIRU4gKHIyLiop Ojp0ZXh0IElTIE5PVCBOVUxMIFRIRU4gUk9XKHIyLmwscjIuYngpIEVORCBGUk9NIChwdWJsaWMu ZGlzdHIxX2Jhc2VfMiByNCBJTk5FUiBKT0lOIFJPV1MgRlJPTSAodW5uZXN0KCd7MTAsMjB9Jzo6 aW50ZWdlcltdKSwgdW5uZXN0KCd7KDIsMyksKC0yLC00KTsoMSwyKSwoLTIsLTMpfSc6OmJveFtd KSkgcjIgKGwsYngpICBPTiAoKChyNC5hID49IHIyLmwpKSBBTkQgKChyNC5hIDw9IGFyZWEocjIu YngpKSkpKSBGT1IgVVBEQVRFIE9GIHI0CisgICAgICAgICAgICAgICAgICAgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZDFfMi50YWJsZW9pZCwg ZDFfMi5jdGlkLCBkMV8yLiosIHQubCwgdC4qCisgICAgICAgICAgICAgICAgICAgICAgICAgICBK b2luIEZpbHRlcjogKChkMV8yLmEgPj0gdC5sKSBBTkQgKChkMV8yLmEpOjpkb3VibGUgcHJlY2lz aW9uIDw9IGFyZWEodC5ieCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEZvcmVp Z24gU2NhbiBvbiBwdWJsaWMuZGlzdHIxX3BhcnRfMiBkMV8yCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IGQxXzIuYSwgZDFfMi50YWJsZW9pZCwgZDFfMi5jdGlkLCBk MV8yLioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVD VCBhLCBiLCBjdGlkIEZST00gcHVibGljLmRpc3RyMV9iYXNlXzIgRk9SIFVQREFURQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gdAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0LmwsIHQuKiwgdC5ieAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDogdW5uZXN0KCd7MTAsMjB9Jzo6aW50 ZWdlcltdKSwgdW5uZXN0KCd7KDIsMyksKC0yLC00KTsoMSwyKSwoLTIsLTMpfSc6OmJveFtdKQor ICAgICAgICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiBkMV8zLnRhYmxlb2lkLCBkMV8zLmN0aWQsIGQxXzMuKiwgdC5sLCB0LioKKyAgICAgICAg ICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcGFydF8zIGQxXzMpIElOTkVS IEpPSU4gKFJPV1MgRlJPTShwZ19jYXRhbG9nLnVubmVzdCgpLCBwZ19jYXRhbG9nLnVubmVzdCgp KSB0KQorICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIENBU0UgV0hFTiAo cjUuKik6OnRleHQgSVMgTk9UIE5VTEwgVEhFTiAxNzI2MCBFTkQsIHI1LmN0aWQsIENBU0UgV0hF TiAocjUuKik6OnRleHQgSVMgTk9UIE5VTEwgVEhFTiBST1cocjUuYSwgcjUuYikgRU5ELCByMi5s LCBDQVNFIFdIRU4gKHIyLiopOjp0ZXh0IElTIE5PVCBOVUxMIFRIRU4gUk9XKHIyLmwscjIuYngp IEVORCBGUk9NIChwdWJsaWMuZGlzdHIxX2Jhc2VfMyByNSBJTk5FUiBKT0lOIFJPV1MgRlJPTSAo dW5uZXN0KCd7MTAsMjB9Jzo6aW50ZWdlcltdKSwgdW5uZXN0KCd7KDIsMyksKC0yLC00KTsoMSwy KSwoLTIsLTMpfSc6OmJveFtdKSkgcjIgKGwsYngpICBPTiAoKChyNS5hID49IHIyLmwpKSBBTkQg KChyNS5hIDw9IGFyZWEocjIuYngpKSkpKSBGT1IgVVBEQVRFIE9GIHI1CisgICAgICAgICAgICAg ICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogZDFfMy50YWJsZW9pZCwgZDFfMy5jdGlkLCBkMV8zLiosIHQubCwgdC4qCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBKb2luIEZpbHRlcjogKChkMV8zLmEgPj0gdC5sKSBBTkQgKChkMV8z LmEpOjpkb3VibGUgcHJlY2lzaW9uIDw9IGFyZWEodC5ieCkpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuZGlzdHIxX3BhcnRfMyBkMV8zCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGQxXzMuYSwgZDFfMy50YWJs ZW9pZCwgZDFfMy5jdGlkLCBkMV8zLioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjdGlkIEZST00gcHVibGljLmRpc3RyMV9iYXNlXzMg Rk9SIFVQREFURQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4g b24gdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0LmwsIHQuKiwg dC5ieAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDogdW5u ZXN0KCd7MTAsMjB9Jzo6aW50ZWdlcltdKSwgdW5uZXN0KCd7KDIsMyksKC0yLC00KTsoMSwyKSwo LTIsLTMpfSc6OmJveFtdKQorICAgICAgICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiBkMV80LnRhYmxlb2lkLCBkMV80LmN0aWQsIGQxXzQuKiwg dC5sLCB0LioKKyAgICAgICAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFf cGFydF80IGQxXzQpIElOTkVSIEpPSU4gKFJPV1MgRlJPTShwZ19jYXRhbG9nLnVubmVzdCgpLCBw Z19jYXRhbG9nLnVubmVzdCgpKSB0KQorICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNRTDog U0VMRUNUIENBU0UgV0hFTiAocjYuKik6OnRleHQgSVMgTk9UIE5VTEwgVEhFTiAxNzI2NiBFTkQs IHI2LmN0aWQsIENBU0UgV0hFTiAocjYuKik6OnRleHQgSVMgTk9UIE5VTEwgVEhFTiBST1cocjYu YSwgcjYuYikgRU5ELCByMi5sLCBDQVNFIFdIRU4gKHIyLiopOjp0ZXh0IElTIE5PVCBOVUxMIFRI RU4gUk9XKHIyLmwscjIuYngpIEVORCBGUk9NIChwdWJsaWMuZGlzdHIxX2Jhc2VfNCByNiBJTk5F UiBKT0lOIFJPV1MgRlJPTSAodW5uZXN0KCd7MTAsMjB9Jzo6aW50ZWdlcltdKSwgdW5uZXN0KCd7 KDIsMyksKC0yLC00KTsoMSwyKSwoLTIsLTMpfSc6OmJveFtdKSkgcjIgKGwsYngpICBPTiAoKChy Ni5hID49IHIyLmwpKSBBTkQgKChyNi5hIDw9IGFyZWEocjIuYngpKSkpKSBGT1IgVVBEQVRFIE9G IHI2CisgICAgICAgICAgICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogZDFfNC50YWJsZW9pZCwgZDFfNC5jdGlkLCBkMV80LiosIHQu bCwgdC4qCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2luIEZpbHRlcjogKChkMV80LmEg Pj0gdC5sKSBBTkQgKChkMV80LmEpOjpkb3VibGUgcHJlY2lzaW9uIDw9IGFyZWEodC5ieCkpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuZGlz dHIxX3BhcnRfNCBkMV80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IGQxXzQuYSwgZDFfNC50YWJsZW9pZCwgZDFfNC5jdGlkLCBkMV80LioKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjdGlkIEZST00gcHVi bGljLmRpc3RyMV9iYXNlXzQgRk9SIFVQREFURQorICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEZ1bmN0aW9uIFNjYW4gb24gdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0LmwsIHQuKiwgdC5ieAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RnVuY3Rpb24gQ2FsbDogdW5uZXN0KCd7MTAsMjB9Jzo6aW50ZWdlcltdKSwgdW5uZXN0KCd7KDIs MyksKC0yLC00KTsoMSwyKSwoLTIsLTMpfSc6OmJveFtdKQorKDYxIHJvd3MpCisKK1VQREFURSBk aXN0cjEgZDEgU0VUIGI9Q0FTRSBXSEVOIHJhbmRvbSgpPj0wIFRIRU4gdC5sIEVMU0UgMCBFTkQg RlJPTSBVTk5FU1QoYXJyYXlbMTAsMjBdLCBhcnJheVtib3ggJygoMiwzKSwoLTIsLTQpKScsIGJv eCAnKCgxLDIpLCgtMiwtMykpJ10pIEFTIHQgKGwsIGJ4KSBXSEVSRSBkMS5hIGJldHdlZW4gbCBh bmQgYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYjsKKyBhICB8IGIgIAorLS0tLSstLS0tCisgMTIg fCAxMAorIDE0IHwgMTAKKyAxNiB8IDEwCisgMTcgfCAxMAorIDI2IHwgMTAKKyAyOCB8IDEwCisg MTEgfCAxMAorIDE5IHwgMTAKKyAyMCB8IDEwCisgMjEgfCAxMAorIDEzIHwgMTAKKyAxOCB8IDEw CisgMjMgfCAxMAorIDI1IHwgMTAKKyAyNyB8IDEwCisgMTAgfCAxMAorIDE1IHwgMTAKKyAyMiB8 IDEwCisgMjQgfCAxMAorKDE5IHJvd3MpCisKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIsIGRp c3RyMV9iYXNlXzIsIGRpc3RyMl9iYXNlXzIsIGRpc3RyMV9iYXNlXzMsIGRpc3RyMl9iYXNlXzMs IGRpc3RyMV9iYXNlXzQsIGRpc3RyMl9iYXNlXzQ7CistLSBUZXN0IHB1c2hkb3duIG9mIHNldmVy YWwgZnVuY3Rpb24gc2NhbnMKK0NSRUFURSBUQUJMRSBkaXN0cjEoYSBpbnQsIGIgaW50KSBQQVJU SVRJT04gQlkgSEFTSChhKTsKK0NSRUFURSBUQUJMRSBkaXN0cjFfcGFydF8xIFBBUlRJVElPTiBP RiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIICggTU9EVUxVUyAyLCBSRU1BSU5ERVIgMCk7CitDUkVB VEUgVEFCTEUgZGlzdHIxX2Jhc2VfMiAoYSBpbnQsIGIgaW50KTsKK0NSRUFURSBGT1JFSUdOIFRB QkxFIGRpc3RyMV9wYXJ0XzIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKCBN T0RVTFVTIDIsIFJFTUFJTkRFUiAxKQorCVNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9u YW1lICdkaXN0cjFfYmFzZV8yJywgdXNlX3JlbW90ZV9lc3RpbWF0ZSAndHJ1ZScpOworQ1JFQVRF IFRBQkxFIGRpc3RyMihjIGludCwgZCB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSChjKTsKK0NSRUFU RSBUQUJMRSBkaXN0cjJfcGFydF8xIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZBTFVFUyBXSVRI IChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKTsKK0NSRUFURSBUQUJMRSBkaXN0cjJfYmFzZV8yIChj IGludCwgZCB0ZXh0KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wYXJ0XzIgUEFSVElU SU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKCBNT0RVTFVTIDIsIFJFTUFJTkRFUiAxKQor CVNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdkaXN0cjJfYmFzZV8yJywgdXNl X3JlbW90ZV9lc3RpbWF0ZSAndHJ1ZScpOworSU5TRVJUIElOVE8gZGlzdHIxIFNFTEVDVCBnLCBn KjIgZnJvbSAgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK0lOU0VSVCBJTlRPIGRpc3RyMiBT RUxFQ1QgZywgJ3RleHQnfHwgZyBmcm9tICBnZW5lcmF0ZV9zZXJpZXMoMSw1MDApIGc7CitBTkFM WVpFOworLS0gTWFrZSBsb2NhbCBmdW5jdGlvbiBzY2FuIG5vdCBzbyBhdHRyYWN0aXZlCitBTFRF UiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoQUREIGZkd190dXBsZV9jb3N0ICcxMDAwJyk7CitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBmcm9tIGRpc3RyMSBkMSwgZGlz dHIxIGQyLCB1bm5lc3QoYXJyYXlbMyw0XSkgbiwgdW5uZXN0KGFycmF5WzMsNF0pIGcKK1dIRVJF IGQxLmEgPSBuIEFORCBkMi5hID0gZDEuYSBhbmQgZyA9IG47CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAor ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEuYiwgZDJfMS5h LCBkMl8xLmIsIG4ubiwgZy5nCisgICAgICAgICBIYXNoIENvbmQ6IChkMV8xLmEgPSBnLmcpCisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IGQxXzEuYSwgZDFf MS5iLCBkMl8xLmEsIGQyXzEuYiwgbi5uCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChkMV8x LmEgPSBuLm4pCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IGQxXzEuYSwgZDFfMS5iLCBkMl8xLmEsIGQyXzEuYgorICAgICAgICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAoZDFfMS5hID0gZDJfMS5hKQorICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0cjFfcGFydF8xIGQxXzEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogZDFfMS5hLCBkMV8xLmIKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGQyXzEuYSwg ZDJfMS5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmRpc3RyMV9wYXJ0XzEgZDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiBkMl8xLmEsIGQyXzEuYgorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogbi5uCisgICAgICAgICAgICAgICAgICAgICAtPiAgRnVuY3Rpb24g U2NhbiBvbiBwZ19jYXRhbG9nLnVubmVzdCBuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IG4ubgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDogdW5u ZXN0KCd7Myw0fSc6OmludGVnZXJbXSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICBPdXRwdXQ6IGcuZworICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0 YWxvZy51bm5lc3QgZworICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBnLmcKKyAgICAgICAg ICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6IHVubmVzdCgnezMsNH0nOjppbnRlZ2VyW10pCisg ICAtPiAgRm9yZWlnbiBTY2FuCisgICAgICAgICBPdXRwdXQ6IGQxXzIuYSwgZDFfMi5iLCBkMl8y LmEsIGQyXzIuYiwgbi5uLCBnLmcKKyAgICAgICAgIFJlbGF0aW9uczogKCgocHVibGljLmRpc3Ry MV9wYXJ0XzIgZDFfMikgSU5ORVIgSk9JTiAocHVibGljLmRpc3RyMV9wYXJ0XzIgZDJfMikpIElO TkVSIEpPSU4gKHBnX2NhdGFsb2cudW5uZXN0KCkgbikpIElOTkVSIEpPSU4gKHBnX2NhdGFsb2cu dW5uZXN0KCkgZykKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNi5hLCByNi5iLCByOC5h LCByOC5iLCByMy5uLCByNC5nIEZST00gKCgocHVibGljLmRpc3RyMV9iYXNlXzIgcjYgSU5ORVIg Sk9JTiBwdWJsaWMuZGlzdHIxX2Jhc2VfMiByOCBPTiAoKChyNi5hID0gcjguYSkpKSkgSU5ORVIg Sk9JTiB1bm5lc3QoJ3szLDR9Jzo6aW50ZWdlcltdKSByMyAobikgIE9OICgoKHI2LmEgPSByMy5u KSkpKSBJTk5FUiBKT0lOIHVubmVzdCgnezMsNH0nOjppbnRlZ2VyW10pIHI0IChnKSAgT04gKCgo cjYuYSA9IHI0LmcpKSkpCisoMzAgcm93cykKKworU0VMRUNUICogZnJvbSBkaXN0cjEgZDEsIGRp c3RyMiBkMiwgdW5uZXN0KGFycmF5WzMsNF0pIG4sIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBn CitXSEVSRSBkMS5hID0gbiBBTkQgZDIuYyA9IGQxLmEgYW5kIGcgPSBkMS5hCitPUkRFUiBCWSBk MS5hOworIGEgfCBiIHwgYyB8ICAgZCAgIHwgbiB8IGcgCistLS0rLS0tKy0tLSstLS0tLS0tKy0t LSstLS0KKyAzIHwgNiB8IDMgfCB0ZXh0MyB8IDMgfCAzCisgNCB8IDggfCA0IHwgdGV4dDQgfCA0 IHwgNAorKDIgcm93cykKKworQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKERST1AgZmR3 X3R1cGxlX2Nvc3QpOworRFJPUCBUQUJMRSBkaXN0cjEsIGRpc3RyMiwgZGlzdHIxX2Jhc2VfMiwg ZGlzdHIyX2Jhc2VfMjsKKy0tIFRlc3QgaW5oZXJpdGFuY2UgY2hhaW4gYW5kIGZ1bmN0aW9uIHNj YW4gcHVzaGRvd24KK0NSRUFURSBUQUJMRSBkaXN0cjEoYSBpbnQsIGIgaW50KTsKK0NSRUFURSBU QUJMRSBkaXN0cjFfbG9jIChhIGludCwgYiBpbnQpIElOSEVSSVRTIChkaXN0cjEpOworTk9USUNF OiAgbWVyZ2luZyBjb2x1bW4gImEiIHdpdGggaW5oZXJpdGVkIGRlZmluaXRpb24KK05PVElDRTog IG1lcmdpbmcgY29sdW1uICJiIiB3aXRoIGluaGVyaXRlZCBkZWZpbml0aW9uCitDUkVBVEUgVEFC TEUgZGlzdHIxX2Jhc2UgKGEgaW50LCBiIGludCwgYyB0ZXh0KTsKK0NSRUFURSBGT1JFSUdOIFRB QkxFIGRpc3RyMV9yZW1vdGUgKGEgaW50LCBiIGludCwgYyB0ZXh0KSBJTkhFUklUUyAoZGlzdHIx KQorCVNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdkaXN0cjFfYmFzZScsIHVz ZV9yZW1vdGVfZXN0aW1hdGUgJ3RydWUnKTsKK05PVElDRTogIG1lcmdpbmcgY29sdW1uICJhIiB3 aXRoIGluaGVyaXRlZCBkZWZpbml0aW9uCitOT1RJQ0U6ICBtZXJnaW5nIGNvbHVtbiAiYiIgd2l0 aCBpbmhlcml0ZWQgZGVmaW5pdGlvbgorQ1JFQVRFIFRBQkxFIGRpc3RyMihjIGludCwgZCB0ZXh0 KTsKK0NSRUFURSBUQUJMRSBkaXN0cjJfbG9jIChjIGludCwgZCB0ZXh0KSBJTkhFUklUUyAoZGlz dHIyKTsKK05PVElDRTogIG1lcmdpbmcgY29sdW1uICJjIiB3aXRoIGluaGVyaXRlZCBkZWZpbml0 aW9uCitOT1RJQ0U6ICBtZXJnaW5nIGNvbHVtbiAiZCIgd2l0aCBpbmhlcml0ZWQgZGVmaW5pdGlv bgorQ1JFQVRFIFRBQkxFIGRpc3RyMl9iYXNlIChjIGludCwgZCB0ZXh0LCBlIGludCk7CitDUkVB VEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcmVtb3RlIChjIGludCwgZCB0ZXh0LCBlIGludCkgSU5I RVJJVFMgKGRpc3RyMikKKwlTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnZGlz dHIyX2Jhc2UnLCB1c2VfcmVtb3RlX2VzdGltYXRlICd0cnVlJyk7CitOT1RJQ0U6ICBtZXJnaW5n IGNvbHVtbiAiYyIgd2l0aCBpbmhlcml0ZWQgZGVmaW5pdGlvbgorTk9USUNFOiAgbWVyZ2luZyBj b2x1bW4gImQiIHdpdGggaW5oZXJpdGVkIGRlZmluaXRpb24KK0lOU0VSVCBJTlRPIGRpc3RyMV9s b2MgU0VMRUNUIGcsIGcqMiBmcm9tICBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitJTlNFUlQg SU5UTyBkaXN0cjFfYmFzZSBTRUxFQ1QgZywgZyoyLCAndGV4dCd8fCBnIGZyb20gIGdlbmVyYXRl X3NlcmllcygyMDAsMjAwMDApIGc7CitJTlNFUlQgSU5UTyBkaXN0cjJfbG9jIFNFTEVDVCBnLCAn dGV4dCd8fCBnIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworSU5TRVJUIElOVE8gZGlz dHIyX2Jhc2UgU0VMRUNUIGcsICd0ZXh0J3x8IGcsIGcqMiBmcm9tIGdlbmVyYXRlX3Nlcmllcygy MDAsMjAwMDApIGc7CitBTkFMWVpFIGRpc3RyMSwgZGlzdHIxX2xvYywgZGlzdHIxX2Jhc2U7CitB TkFMWVpFIGRpc3RyMiwgZGlzdHIyX2xvYywgZGlzdHIyX2Jhc2U7CitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBkLCB1bm5lc3QoYXJyYXlbMiwzLDQs NV0pIG4gV0hFUkUgZC5hID0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgIE91dHB1dDogZF8xLmEsIGRfMS5iLCBuLm4KKyAgICAgICAgIEhhc2ggQ29uZDog KG4ubiA9IGRfMS5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy51 bm5lc3QgbgorICAgICAgICAgICAgICAgT3V0cHV0OiBuLm4KKyAgICAgICAgICAgICAgIEZ1bmN0 aW9uIENhbGw6IHVubmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdlcltdKQorICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgIE91dHB1dDogZF8xLmEsIGRfMS5iCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmRpc3RyMSBkXzEKKyAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogZF8xLmEsIGRfMS5iCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBPdXRwdXQ6IGRf Mi5hLCBkXzIuYiwgbi5uCisgICAgICAgICBIYXNoIENvbmQ6IChkXzIuYSA9IG4ubikKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZGlzdHIxX2xvYyBkXzIKKyAgICAgICAgICAgICAg IE91dHB1dDogZF8yLmEsIGRfMi5iCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg T3V0cHV0OiBuLm4KKyAgICAgICAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFs b2cudW5uZXN0IG4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogbi5uCisgICAgICAgICAg ICAgICAgICAgICBGdW5jdGlvbiBDYWxsOiB1bm5lc3QoJ3syLDMsNCw1fSc6OmludGVnZXJbXSkK KyAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgIE91dHB1dDogZF8zLmEsIGRfMy5iLCBuLm4K KyAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcmVtb3RlIGRfMykgSU5ORVIgSk9J TiAocGdfY2F0YWxvZy51bm5lc3QoKSBuKQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHI1 LmEsIHI1LmIsIHIyLm4gRlJPTSAocHVibGljLmRpc3RyMV9iYXNlIHI1IElOTkVSIEpPSU4gdW5u ZXN0KCd7MiwzLDQsNX0nOjppbnRlZ2VyW10pIHIyIChuKSAgT04gKCgocjUuYSA9IHIyLm4pKSkp CisoMjUgcm93cykKKworU0VMRUNUICogRlJPTSBkaXN0cjEgZCwgdW5uZXN0KGFycmF5WzIsMyw0 LDVdKSBuIFdIRVJFIGQuYSA9IG4KK09SREVSIEJZIGQuYTsKKyBhIHwgYiAgfCBuIAorLS0tKy0t LS0rLS0tCisgMiB8ICA0IHwgMgorIDMgfCAgNiB8IDMKKyA0IHwgIDggfCA0CisgNSB8IDEwIHwg NQorKDQgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSB1bm5lc3QoYXJyYXlbMiwzLDQsNV0pIG4sIGRpc3RyMSBkIFdIRVJFIGQuYSA9IG47CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQXBwZW5kCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBPdXRwdXQ6IG4ubiwgZF8x LmEsIGRfMS5iCisgICAgICAgICBIYXNoIENvbmQ6IChuLm4gPSBkXzEuYSkKKyAgICAgICAgIC0+ ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cudW5uZXN0IG4KKyAgICAgICAgICAgICAgIE91 dHB1dDogbi5uCisgICAgICAgICAgICAgICBGdW5jdGlvbiBDYWxsOiB1bm5lc3QoJ3syLDMsNCw1 fSc6OmludGVnZXJbXSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICBPdXRwdXQ6 IGRfMS5hLCBkXzEuYgorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0 cjEgZF8xCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGRfMS5hLCBkXzEuYgorICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgT3V0cHV0OiBuLm4sIGRfMi5hLCBkXzIuYgorICAgICAgICAg SGFzaCBDb25kOiAoZF8yLmEgPSBuLm4pCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmRpc3RyMV9sb2MgZF8yCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRfMi5hLCBkXzIuYgorICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIE91dHB1dDogbi5uCisgICAgICAgICAgICAg ICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9nLnVubmVzdCBuCisgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IG4ubgorICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDog dW5uZXN0KCd7MiwzLDQsNX0nOjppbnRlZ2VyW10pCisgICAtPiAgRm9yZWlnbiBTY2FuCisgICAg ICAgICBPdXRwdXQ6IG4ubiwgZF8zLmEsIGRfMy5iCisgICAgICAgICBSZWxhdGlvbnM6IChwdWJs aWMuZGlzdHIxX3JlbW90ZSBkXzMpIElOTkVSIEpPSU4gKHBnX2NhdGFsb2cudW5uZXN0KCkgbikK KyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByMS5uLCByNS5hLCByNS5iIEZST00gKHB1Ymxp Yy5kaXN0cjFfYmFzZSByNSBJTk5FUiBKT0lOIHVubmVzdCgnezIsMyw0LDV9Jzo6aW50ZWdlcltd KSByMSAobikgIE9OICgoKHIxLm4gPSByNS5hKSkpKQorKDI1IHJvd3MpCisKK1NFTEVDVCAqIEZS T00gdW5uZXN0KGFycmF5WzIsMyw0LDVdKSBuLCBkaXN0cjEgZCBXSEVSRSBkLmEgPSBuCitPUkRF UiBCWSBkLmE7CisgbiB8IGEgfCBiICAKKy0tLSstLS0rLS0tLQorIDIgfCAyIHwgIDQKKyAzIHwg MyB8ICA2CisgNCB8IDQgfCAgOAorIDUgfCA1IHwgMTAKKyg0IHJvd3MpCisKK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlzdHIxIGQxLCBkaXN0cjIgZDIsIHVu bmVzdChhcnJheVszMDAsNDAwXSkgbgorV0hFUkUgZDEuYSA9IG4gQU5EIGQyLmMgPSBkMS5hOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgT3V0cHV0OiBk MS5hLCBkMS5iLCBkMi5jLCBkMi5kLCBuLm4KKyAgIEhhc2ggQ29uZDogKGQyLmMgPSBkMS5hKQor ICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0cjIgZDJf MQorICAgICAgICAgICAgICAgT3V0cHV0OiBkMl8xLmMsIGQyXzEuZAorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5kaXN0cjJfbG9jIGQyXzIKKyAgICAgICAgICAgICAgIE91dHB1dDog ZDJfMi5jLCBkMl8yLmQKKyAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLmRpc3Ry Ml9yZW1vdGUgZDJfMworICAgICAgICAgICAgICAgT3V0cHV0OiBkMl8zLmMsIGQyXzMuZAorICAg ICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGMsIGQgRlJPTSBwdWJsaWMuZGlzdHIyX2Jh c2UKKyAgIC0+ICBIYXNoCisgICAgICAgICBPdXRwdXQ6IGQxLmEsIGQxLmIsIG4ubgorICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IGQxXzEuYSwgZDFfMS5iLCBuLm4KKyAgICAgICAgICAgICAgICAg ICAgIEpvaW4gRmlsdGVyOiAoZDFfMS5hID0gbi5uKQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0cjEgZDFfMQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEuYgorICAgICAgICAgICAgICAgICAgICAgLT4gIEZ1bmN0 aW9uIFNjYW4gb24gcGdfY2F0YWxvZy51bm5lc3QgbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiBuLm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6 IHVubmVzdCgnezMwMCw0MDB9Jzo6aW50ZWdlcltdKQorICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBkMV8yLmEsIGQxXzIuYiwgbi5uCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChkMV8yLmEgPSBuLm4pCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmRpc3RyMV9sb2MgZDFfMgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBkMV8yLmEsIGQxXzIuYgorICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogbi5u CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRh bG9nLnVubmVzdCBuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IG4u bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDogdW5uZXN0 KCd7MzAwLDQwMH0nOjppbnRlZ2VyW10pCisgICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2Fu CisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGQxXzMuYSwgZDFfMy5iLCBuLm4KKyAgICAg ICAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcmVtb3RlIGQxXzMpIElO TkVSIEpPSU4gKHBnX2NhdGFsb2cudW5uZXN0KCkgbikKKyAgICAgICAgICAgICAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCByNi5hLCByNi5iLCByMy5uIEZST00gKHB1YmxpYy5kaXN0cjFfYmFz ZSByNiBJTk5FUiBKT0lOIHVubmVzdCgnezMwMCw0MDB9Jzo6aW50ZWdlcltdKSByMyAobikgIE9O ICgoKHI2LmEgPSByMy5uKSkpKQorKDM2IHJvd3MpCisKK1NFTEVDVCAqIEZST00gZGlzdHIxIGQx LCBkaXN0cjIgZDIsIHVubmVzdChhcnJheVszMDAsNDAwXSkgbgorV0hFUkUgZDEuYSA9IG4gQU5E IGQyLmMgPSBkMS5hCitPUkRFUiBCWSBkMS5hOworICBhICB8ICBiICB8ICBjICB8ICAgIGQgICAg fCAgbiAgCistLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0KKyAzMDAgfCA2MDAgfCAz MDAgfCB0ZXh0MzAwIHwgMzAwCisgNDAwIHwgODAwIHwgNDAwIHwgdGV4dDQwMCB8IDQwMAorKDIg cm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogZnJvbSBkaXN0 cjEgZDEsIGRpc3RyMiBkMiwgdW5uZXN0KGFycmF5WzMwMCw0MDBdKSBuCitXSEVSRSBkMS5hID0g biBBTkQgZDIuYyA9IGQxLmEgYW5kIG4gPiAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIE91dHB1dDogZDEuYSwgZDEuYiwgZDIuYywgZDIuZCwgbi5uCisgICAtPiAg TmVzdGVkIExvb3AKKyAgICAgICAgIE91dHB1dDogZDEuYSwgZDEuYiwgbi5uCisgICAgICAgICAt PiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9nLnVubmVzdCBuCisgICAgICAgICAgICAgICBP dXRwdXQ6IG4ubgorICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDogdW5uZXN0KCd7MzAwLDQw MH0nOjppbnRlZ2VyW10pCisgICAgICAgICAgICAgICBGaWx0ZXI6IChuLm4gPiAzKQorICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0 cjEgZDFfMQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBkMV8xLmEsIGQxXzEuYgorICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAobi5uID0gZDFfMS5hKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0cjFfbG9jIGQxXzIKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogZDFfMi5hLCBkMV8yLmIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KG4ubiA9IGQxXzIuYSkKKyAgICAgICAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGlj LmRpc3RyMV9yZW1vdGUgZDFfMworICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBkMV8zLmEs IGQxXzMuYgorICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIgRlJP TSBwdWJsaWMuZGlzdHIxX2Jhc2UgV0hFUkUgKCgkMTo6aW50ZWdlciA9IGEpKQorICAgLT4gIEFw cGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5kaXN0cjIgZDJfMQorICAgICAg ICAgICAgICAgT3V0cHV0OiBkMl8xLmMsIGQyXzEuZAorICAgICAgICAgICAgICAgRmlsdGVyOiAo ZDEuYSA9IGQyXzEuYykKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZGlzdHIyX2xv YyBkMl8yCisgICAgICAgICAgICAgICBPdXRwdXQ6IGQyXzIuYywgZDJfMi5kCisgICAgICAgICAg ICAgICBGaWx0ZXI6IChkMS5hID0gZDJfMi5jKQorICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBv biBwdWJsaWMuZGlzdHIyX3JlbW90ZSBkMl8zCisgICAgICAgICAgICAgICBPdXRwdXQ6IGQyXzMu YywgZDJfMy5kCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYywgZCBGUk9NIHB1 YmxpYy5kaXN0cjJfYmFzZSBXSEVSRSAoKCQxOjppbnRlZ2VyID0gYykpCisoMjggcm93cykKKwor U0VMRUNUICogZnJvbSBkaXN0cjEgZDEsIGRpc3RyMiBkMiwgdW5uZXN0KGFycmF5WzMwMCw0MDBd KSBuCitXSEVSRSBkMS5hID0gbiBBTkQgZDIuYyA9IGQxLmEgYW5kIG4gPiAzCitPUkRFUiBCWSBk MS5hOworICBhICB8ICBiICB8ICBjICB8ICAgIGQgICAgfCAgbiAgCistLS0tLSstLS0tLSstLS0t LSstLS0tLS0tLS0rLS0tLS0KKyAzMDAgfCA2MDAgfCAzMDAgfCB0ZXh0MzAwIHwgMzAwCisgNDAw IHwgODAwIHwgNDAwIHwgdGV4dDQwMCB8IDQwMAorKDIgcm93cykKKworRFJPUCBGT1JFSUdOIFRB QkxFIGRpc3RyMV9yZW1vdGUsIGRpc3RyMl9yZW1vdGU7CitEUk9QIFRBQkxFIGRpc3RyMSwgZGlz dHIxX2xvYywgZGlzdHIxX2Jhc2UsIGRpc3RyMiwgZGlzdHIyX2xvYywgZGlzdHIyX2Jhc2U7Cist LSBUZXN0IFVOSU9OIGFuZCBmdW5jdGlvbiBzY2FuIHB1c2hkb3duCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisoU0VMRUNUIGEgRlJPTSByZW1vdGVfdGJsCitV TklPTgorU0VMRUNUIGMgRlJPTSByZW1vdGVfdGJsMSkgdQorSk9JTiB1bm5lc3QoYXJyYXlbMyw0 XSkgbgorT04gdS5hID0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIE91dHB1 dDogcmVtb3RlX3RibC5hLCBuLm4KKyAgIEhhc2ggQ29uZDogKHJlbW90ZV90YmwuYSA9IG4ubikK KyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHJlbW90ZV90YmwuYQorICAg ICAgICAgR3JvdXAgS2V5OiByZW1vdGVfdGJsLmEKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAg ICAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLnJlbW90ZV90YmwKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogcmVtb3RlX3RibC5hCisgICAgICAgICAgICAgICAgICAgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgYSBGUk9NIHB1YmxpYy5iYXNlX3RibAorICAgICAgICAgICAgICAg LT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMucmVtb3RlX3RibDEKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogcmVtb3RlX3RibDEuYworICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNR TDogU0VMRUNUIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwxCisgICAtPiAgSGFzaAorICAgICAgICAg T3V0cHV0OiBuLm4KKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cudW5u ZXN0IG4KKyAgICAgICAgICAgICAgIE91dHB1dDogbi5uCisgICAgICAgICAgICAgICBGdW5jdGlv biBDYWxsOiB1bm5lc3QoJ3szLDR9Jzo6aW50ZWdlcltdKQorKDE4IHJvd3MpCisKK1NFTEVDVCAq IEZST00KKyhTRUxFQ1QgYSBGUk9NIHJlbW90ZV90YmwKK1VOSU9OCitTRUxFQ1QgYyBGUk9NIHJl bW90ZV90YmwxKSB1CitKT0lOIHVubmVzdChhcnJheVszLDRdKSBuCitPTiB1LmEgPSBuCitPUkRF UiBCWSBuOworIGEgfCBuIAorLS0tKy0tLQorIDMgfCAzCisgNCB8IDQKKygyIHJvd3MpCisKK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyhTRUxFQ1QgYSBGUk9N IHJlbW90ZV90YmwKK1VOSU9OIEFMTAorU0VMRUNUIGMgRlJPTSByZW1vdGVfdGJsMSkgdQorSk9J TiB1bm5lc3QoYXJyYXlbMyw0XSkgbgorT04gdS5hID0gbjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAg ICAgIE91dHB1dDogcmVtb3RlX3RibC5hLCBuLm4KKyAgICAgICAgIFJlbGF0aW9uczogKHB1Ymxp Yy5yZW1vdGVfdGJsKSBJTk5FUiBKT0lOIChwZ19jYXRhbG9nLnVubmVzdCgpIG4pCisgICAgICAg ICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjYuYSwgcjIubiBGUk9NIChwdWJsaWMuYmFzZV90YmwgcjYg SU5ORVIgSk9JTiB1bm5lc3QoJ3szLDR9Jzo6aW50ZWdlcltdKSByMiAobikgIE9OICgoKHI2LmEg PSByMi5uKSkpKQorICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiByZW1vdGVf dGJsMS5jLCBuLm4KKyAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5yZW1vdGVfdGJsMSkgSU5O RVIgSk9JTiAocGdfY2F0YWxvZy51bm5lc3QoKSBuKQorICAgICAgICAgUmVtb3RlIFNRTDogU0VM RUNUIHI3LmMsIHIyLm4gRlJPTSAocHVibGljLmJhc2VfdGJsMSByNyBJTk5FUiBKT0lOIHVubmVz dCgnezMsNH0nOjppbnRlZ2VyW10pIHIyIChuKSAgT04gKCgocjcuYyA9IHIyLm4pKSkpCisoOSBy b3dzKQorCitTRUxFQ1QgKiBGUk9NCisoU0VMRUNUIGEgRlJPTSByZW1vdGVfdGJsCitVTklPTiBB TEwKK1NFTEVDVCBjIEZST00gcmVtb3RlX3RibDEpIHUKK0pPSU4gdW5uZXN0KGFycmF5WzMsNF0p IG4KK09OIHUuYSA9IG4KK09SREVSIEJZIG47CisgYSB8IG4gCistLS0rLS0tCisgMyB8IDMKKyAz IHwgMworIDQgfCA0CisgNCB8IDQKKyg0IHJvd3MpCisKK1JFU0VUIGVuYWJsZV9wYXJ0aXRpb253 aXNlX2pvaW47CitEUk9QIEZVTkNUSU9OIGYoSU5URUdFUik7CitEUk9QIFRBQkxFIGJhc2VfdGJs LCBiYXNlX3RibDE7CitEUk9QIEZPUkVJR04gVEFCTEUgcmVtb3RlX3RibCwgcmVtb3RlX3RibDE7 CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDc2ZDRmZWEyMWM0Li5iZDZlOTc0 ZWJkYiAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysr IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTQ4LDYgKzQ4LDcgQEAK ICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zYW1wbGluZy5oIgogI2lu Y2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKIAog UEdfTU9EVUxFX01BR0lDOwogCkBAIC00MDYsNiArNDA3LDE0IEBAIHN0YXRpYyB2b2lkIHBvc3Rn cmVzR2V0Rm9yZWlnbkpvaW5QYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlSZWxP cHRJbmZvICppbm5lcnJlbCwKIAkJCQkJCQkJCQlKb2luVHlwZSBqb2ludHlwZSwKIAkJCQkJCQkJ CQlKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworCitzdGF0aWMgdm9pZCBwb3N0Z3Jlc1RyeVNo aXBwYWJsZUpvaW5QYXRocyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgIFJlbE9wdElu Zm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJCQkJ CQkgIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCQkJCSAgSm9pblR5cGUgam9pbnR5cGUs CisJCQkJCQkJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworCiBzdGF0aWMgYm9vbCBw b3N0Z3Jlc1JlY2hlY2tGb3JlaWduU2NhbihGb3JlaWduU2NhblN0YXRlICpub2RlLAogCQkJCQkJ CQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogc3RhdGljIHZvaWQgcG9zdGdyZXNHZXRGb3Jl aWduVXBwZXJQYXRocyhQbGFubmVySW5mbyAqcm9vdCwKQEAgLTQ3NCw3ICs0ODMsNyBAQCBzdGF0 aWMgdm9pZCBzdG9yZV9yZXR1cm5pbmdfcmVzdWx0KFBnRmR3TW9kaWZ5U3RhdGUgKmZtc3RhdGUs CiBzdGF0aWMgdm9pZCBmaW5pc2hfZm9yZWlnbl9tb2RpZnkoUGdGZHdNb2RpZnlTdGF0ZSAqZm1z dGF0ZSk7CiBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlX3F1ZXJ5KFBnRmR3TW9kaWZ5U3RhdGUgKmZt c3RhdGUpOwogc3RhdGljIExpc3QgKmJ1aWxkX3JlbW90ZV9yZXR1cm5pbmcoSW5kZXggcnRpbmRl eCwgUmVsYXRpb24gcmVsLAotCQkJCQkJCQkJTGlzdCAqcmV0dXJuaW5nTGlzdCk7CisJCQkJCQkJ CQlMaXN0ICpyZXR1cm5pbmdMaXN0LCBWYXIgKnRpZCk7CiBzdGF0aWMgdm9pZCByZWJ1aWxkX2Zk d19zY2FuX3RsaXN0KEZvcmVpZ25TY2FuICpmc2NhbiwgTGlzdCAqdGxpc3QpOwogc3RhdGljIHZv aWQgZXhlY3V0ZV9kbWxfc3RtdChGb3JlaWduU2NhblN0YXRlICpub2RlKTsKIHN0YXRpYyBUdXBs ZVRhYmxlU2xvdCAqZ2V0X3JldHVybmluZ19kYXRhKEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUpOwpA QCAtNTQwLDYgKzU0OSwxMiBAQCBzdGF0aWMgdm9pZCBtZXJnZV9mZHdfb3B0aW9ucyhQZ0Zkd1Jl bGF0aW9uSW5mbyAqZnBpbmZvLAogCQkJCQkJCSAgY29uc3QgUGdGZHdSZWxhdGlvbkluZm8gKmZw aW5mb19pKTsKIHN0YXRpYyBpbnQJZ2V0X2JhdGNoX3NpemVfb3B0aW9uKFJlbGF0aW9uIHJlbCk7 CiAKK3N0YXRpYyBib29sIGlzX25vbnJlbF9yZWxpbmZvX29rKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpmb3JlaWducmVsKTsKK3N0YXRpYyB2b2lkIGluaXRfZnBpbmZvKFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwKKwkJCQkJCU9pZCBmb3JlaWdu dGFibGVpZCwKKwkJCQkJCVBnRmR3UmVsYXRpb25JbmZvICpleGlzdGluZ19mcGluZm8pOworCiAK IC8qCiAgKiBGb3JlaWduLWRhdGEgd3JhcHBlciBoYW5kbGVyIGZ1bmN0aW9uOiByZXR1cm4gYSBz dHJ1Y3Qgd2l0aCBwb2ludGVycwpAQCAtNTk1LDYgKzYxMCw3IEBAIHBvc3RncmVzX2Zkd19oYW5k bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkvKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3Igam9pbiBw dXNoLWRvd24gKi8KIAlyb3V0aW5lLT5HZXRGb3JlaWduSm9pblBhdGhzID0gcG9zdGdyZXNHZXRG b3JlaWduSm9pblBhdGhzOworCXJvdXRpbmUtPlRyeVNoaXBwYWJsZUpvaW5QYXRocyA9IHBvc3Rn cmVzVHJ5U2hpcHBhYmxlSm9pblBhdGhzOwogCiAJLyogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHVw cGVyIHJlbGF0aW9uIHB1c2gtZG93biAqLwogCXJvdXRpbmUtPkdldEZvcmVpZ25VcHBlclBhdGhz ID0gcG9zdGdyZXNHZXRGb3JlaWduVXBwZXJQYXRoczsKQEAgLTYxOSwxMCArNjM1LDMxIEBAIHN0 YXRpYyB2b2lkCiBwb3N0Z3Jlc0dldEZvcmVpZ25SZWxTaXplKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJICBSZWxPcHRJbmZvICpiYXNlcmVsLAogCQkJCQkJICBPaWQgZm9yZWlnbnRhYmxlaWQp Cit7CisJaW5pdF9mcGluZm8ocm9vdCwgYmFzZXJlbCwgZm9yZWlnbnRhYmxlaWQsIE5VTEwpOwor fQorCisvKgorICogaW5pdF9mcGluZm8KKyAqCisgKiBFaXRoZXIgaW5pdGlhbGl6ZSBmcGluZm8g YmFzZWQgb24gZm9yZWlnbiB0YWJsZSBvciBnZW5lcmF0ZSBvbmUsIGJhc2VkIG9uCisgKiBleGlz dGluZyBmcGluZm8uCisgKiBBbHNvIGVzdGltYXRlICMgb2Ygcm93cyBhbmQgd2lkdGggb2YgdGhl IHJlc3VsdCBvZiB0aGUgc2Nhbi4KKyAqCisgKiBXZSBzaG91bGQgY29uc2lkZXIgdGhlIGVmZmVj dCBvZiBhbGwgYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzIGhlcmUsIGJ1dAorICogbm90IGFueSBq b2luIGNsYXVzZXMuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0X2ZwaW5mbyhQbGFubmVySW5mbyAq cm9vdCwKKwkJCVJlbE9wdEluZm8gKmJhc2VyZWwsCisJCQlPaWQgZm9yZWlnbnRhYmxlaWQsCisJ CQlQZ0Zkd1JlbGF0aW9uSW5mbyAqZXhpc3RpbmdfZnBpbmZvKQogewogCVBnRmR3UmVsYXRpb25J bmZvICpmcGluZm87CiAJTGlzdENlbGwgICAqbGM7Ci0JUmFuZ2VUYmxFbnRyeSAqcnRlID0gcGxh bm5lcl9ydF9mZXRjaChiYXNlcmVsLT5yZWxpZCwgcm9vdCk7CisKKwlBc3NlcnQoZXhpc3Rpbmdf ZnBpbmZvIHx8IGZvcmVpZ250YWJsZWlkICE9IEludmFsaWRPaWQpOworCUFzc2VydChleGlzdGlu Z19mcGluZm8gPT0gTlVMTCB8fCBmb3JlaWdudGFibGVpZCA9PSBJbnZhbGlkT2lkKTsKIAogCS8q CiAJICogV2UgdXNlIFBnRmR3UmVsYXRpb25JbmZvIHRvIHBhc3MgdmFyaW91cyBpbmZvcm1hdGlv biB0byBzdWJzZXF1ZW50CkBAIC02MzQsMzkgKzY3MSw1OSBAQCBwb3N0Z3Jlc0dldEZvcmVpZ25S ZWxTaXplKFBsYW5uZXJJbmZvICpyb290LAogCS8qIEJhc2UgZm9yZWlnbiB0YWJsZXMgbmVlZCB0 byBiZSBwdXNoZWQgZG93biBhbHdheXMuICovCiAJZnBpbmZvLT5wdXNoZG93bl9zYWZlID0gdHJ1 ZTsKIAotCS8qIExvb2sgdXAgZm9yZWlnbi10YWJsZSBjYXRhbG9nIGluZm8uICovCi0JZnBpbmZv LT50YWJsZSA9IEdldEZvcmVpZ25UYWJsZShmb3JlaWdudGFibGVpZCk7Ci0JZnBpbmZvLT5zZXJ2 ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZwaW5mby0+dGFibGUtPnNlcnZlcmlkKTsKLQotCS8qCi0J ICogRXh0cmFjdCB1c2VyLXNldHRhYmxlIG9wdGlvbiB2YWx1ZXMuICBOb3RlIHRoYXQgcGVyLXRh YmxlIHNldHRpbmdzIG9mCi0JICogdXNlX3JlbW90ZV9lc3RpbWF0ZSwgZmV0Y2hfc2l6ZSBhbmQg YXN5bmNfY2FwYWJsZSBvdmVycmlkZSBwZXItc2VydmVyCi0JICogc2V0dGluZ3Mgb2YgdGhlbSwg cmVzcGVjdGl2ZWx5LgotCSAqLwotCWZwaW5mby0+dXNlX3JlbW90ZV9lc3RpbWF0ZSA9IGZhbHNl OwotCWZwaW5mby0+ZmR3X3N0YXJ0dXBfY29zdCA9IERFRkFVTFRfRkRXX1NUQVJUVVBfQ09TVDsK LQlmcGluZm8tPmZkd190dXBsZV9jb3N0ID0gREVGQVVMVF9GRFdfVFVQTEVfQ09TVDsKLQlmcGlu Zm8tPnNoaXBwYWJsZV9leHRlbnNpb25zID0gTklMOwotCWZwaW5mby0+ZmV0Y2hfc2l6ZSA9IDEw MDsKLQlmcGluZm8tPmFzeW5jX2NhcGFibGUgPSBmYWxzZTsKKwlpZiAoZXhpc3RpbmdfZnBpbmZv KQorCXsKKwkJLyogV2UgZG9uJ3QgaGF2ZSBhbnkgdGFibGUsIHJlbGF0ZWQgdG8gcXVlcnkgKi8K KwkJZnBpbmZvLT50YWJsZSA9IE5VTEw7CisJCWZwaW5mby0+c2VydmVyID0gZXhpc3RpbmdfZnBp bmZvLT5zZXJ2ZXI7CisJfQorCWVsc2UKKwl7CisJCS8qIExvb2sgdXAgZm9yZWlnbi10YWJsZSBj YXRhbG9nIGluZm8uICovCisJCWZwaW5mby0+dGFibGUgPSBHZXRGb3JlaWduVGFibGUoZm9yZWln bnRhYmxlaWQpOworCQlmcGluZm8tPnNlcnZlciA9IEdldEZvcmVpZ25TZXJ2ZXIoZnBpbmZvLT50 YWJsZS0+c2VydmVyaWQpOworCX0KIAotCWFwcGx5X3NlcnZlcl9vcHRpb25zKGZwaW5mbyk7Ci0J YXBwbHlfdGFibGVfb3B0aW9ucyhmcGluZm8pOworCWlmIChleGlzdGluZ19mcGluZm8pCisJewor CQltZXJnZV9mZHdfb3B0aW9ucyhmcGluZm8sIGV4aXN0aW5nX2ZwaW5mbywgTlVMTCk7CisJCWZw aW5mby0+dXNlciA9IGV4aXN0aW5nX2ZwaW5mby0+dXNlcjsKIAotCS8qCi0JICogSWYgdGhlIHRh YmxlIG9yIHRoZSBzZXJ2ZXIgaXMgY29uZmlndXJlZCB0byB1c2UgcmVtb3RlIGVzdGltYXRlcywK LQkgKiBpZGVudGlmeSB3aGljaCB1c2VyIHRvIGRvIHJlbW90ZSBhY2Nlc3MgYXMgZHVyaW5nIHBs YW5uaW5nLiAgVGhpcwotCSAqIHNob3VsZCBtYXRjaCB3aGF0IEV4ZWNDaGVja1JURVBlcm1zKCkg ZG9lcy4gIElmIHdlIGZhaWwgZHVlIHRvIGxhY2sgb2YKLQkgKiBwZXJtaXNzaW9ucywgdGhlIHF1 ZXJ5IHdvdWxkIGhhdmUgZmFpbGVkIGF0IHJ1bnRpbWUgYW55d2F5LgotCSAqLwotCWlmIChmcGlu Zm8tPnVzZV9yZW1vdGVfZXN0aW1hdGUpCisJCS8qCisJCSAqIERvbid0IHRyeSB0byBleGVjdXRl IGFueXRoaW5nIG9uIHJlbW90ZSBzZXJ2ZXIgZm9yCisJCSAqIG5vbi1yZWxhdGlvbi1iYXNlZCBx dWVyeQorCQkgKi8KKwkJZnBpbmZvLT51c2VfcmVtb3RlX2VzdGltYXRlID0gZmFsc2U7CisJfQor CWVsc2UKIAl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYmFzZXJl bC0+cmVsaWQsIHJvb3QpOwogCQlPaWQJCQl1c2VyaWQgPSBydGUtPmNoZWNrQXNVc2VyID8gcnRl LT5jaGVja0FzVXNlciA6IEdldFVzZXJJZCgpOwogCisJCS8qCisJCSAqIEV4dHJhY3QgdXNlci1z ZXR0YWJsZSBvcHRpb24gdmFsdWVzLiAgTm90ZSB0aGF0IHBlci10YWJsZSBzZXR0aW5ncworCQkg KiBvZiB1c2VfcmVtb3RlX2VzdGltYXRlLCBmZXRjaF9zaXplIGFuZCBhc3luY19jYXBhYmxlIG92 ZXJyaWRlCisJCSAqIHBlci1zZXJ2ZXIgc2V0dGluZ3Mgb2YgdGhlbSwgcmVzcGVjdGl2ZWx5Lgor CQkgKi8KKwkJZnBpbmZvLT51c2VfcmVtb3RlX2VzdGltYXRlID0gZmFsc2U7CisJCWZwaW5mby0+ ZmR3X3N0YXJ0dXBfY29zdCA9IERFRkFVTFRfRkRXX1NUQVJUVVBfQ09TVDsKKwkJZnBpbmZvLT5m ZHdfdHVwbGVfY29zdCA9IERFRkFVTFRfRkRXX1RVUExFX0NPU1Q7CisJCWZwaW5mby0+c2hpcHBh YmxlX2V4dGVuc2lvbnMgPSBOSUw7CisJCWZwaW5mby0+ZmV0Y2hfc2l6ZSA9IDEwMDsKKwkJZnBp bmZvLT5hc3luY19jYXBhYmxlID0gZmFsc2U7CisJCWZwaW5mby0+aXNfZ2VuZXJhdGVkID0gZmFs c2U7CisKKwkJYXBwbHlfc2VydmVyX29wdGlvbnMoZnBpbmZvKTsKKwkJYXBwbHlfdGFibGVfb3B0 aW9ucyhmcGluZm8pOworCisJCS8qCisJCSAqIElmIHRoZSB0YWJsZSBvciB0aGUgc2VydmVyIGlz IGNvbmZpZ3VyZWQgdG8gdXNlIHJlbW90ZSBlc3RpbWF0ZXMsCisJCSAqIGlkZW50aWZ5IHdoaWNo IHVzZXIgdG8gZG8gcmVtb3RlIGFjY2VzcyBhcyBkdXJpbmcgcGxhbm5pbmcuICBUaGlzCisJCSAq IHNob3VsZCBtYXRjaCB3aGF0IEV4ZWNDaGVja1JURVBlcm1zKCkgZG9lcy4gIElmIHdlIGZhaWwg ZHVlIHRvIGxhY2sKKwkJICogb2YgcGVybWlzc2lvbnMsIHRoZSBxdWVyeSB3b3VsZCBoYXZlIGZh aWxlZCBhdCBydW50aW1lIGFueXdheS4KKwkJICovCiAJCWZwaW5mby0+dXNlciA9IEdldFVzZXJN YXBwaW5nKHVzZXJpZCwgZnBpbmZvLT5zZXJ2ZXItPnNlcnZlcmlkKTsKIAl9Ci0JZWxzZQotCQlm cGluZm8tPnVzZXIgPSBOVUxMOwogCiAJLyoKIAkgKiBJZGVudGlmeSB3aGljaCBiYXNlcmVzdHJp Y3RpbmZvIGNsYXVzZXMgY2FuIGJlIHNlbnQgdG8gdGhlIHJlbW90ZQpAQCAtNzc4LDYgKzgzNSw5 IEBAIHBvc3RncmVzR2V0Rm9yZWlnblJlbFNpemUoUGxhbm5lckluZm8gKnJvb3QsCiAJZnBpbmZv LT5sb3dlcl9zdWJxdWVyeV9yZWxzID0gTlVMTDsKIAkvKiBTZXQgdGhlIHJlbGF0aW9uIGluZGV4 LiAqLwogCWZwaW5mby0+cmVsYXRpb25faW5kZXggPSBiYXNlcmVsLT5yZWxpZDsKKwlpZiAoZXhp c3RpbmdfZnBpbmZvKQorCQkvKiBNYXJrIGZwaW5mbyBnZW5lcmF0ZWQgKi8KKwkJZnBpbmZvLT5p c19nZW5lcmF0ZWQgPSB0cnVlOwogfQogCiAvKgpAQCAtMTQ3MiwxMyArMTUzMiw3MiBAQCBnZXRf dHVwZGVzY19mb3Jfam9pbl9zY2FuX3R1cGxlcyhGb3JlaWduU2NhblN0YXRlICpub2RlKQogCQlp ZiAoIUlzQSh2YXIsIFZhcikgfHwgdmFyLT52YXJhdHRubyAhPSAwKQogCQkJY29udGludWU7CiAJ CXJ0ZSA9IGxpc3RfbnRoKGVzdGF0ZS0+ZXNfcmFuZ2VfdGFibGUsIHZhci0+dmFybm8gLSAxKTsK LQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCi0JCQljb250aW51ZTsKLQkJcmVs dHlwZSA9IGdldF9yZWxfdHlwZV9pZChydGUtPnJlbGlkKTsKLQkJaWYgKCFPaWRJc1ZhbGlkKHJl bHR5cGUpKQotCQkJY29udGludWU7Ci0JCWF0dC0+YXR0dHlwaWQgPSByZWx0eXBlOwotCQkvKiBz aG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgZWxzZSAqLworCQlpZiAocnRlLT5ydGVr aW5kID09IFJURV9SRUxBVElPTikKKwkJeworCQkJcmVsdHlwZSA9IGdldF9yZWxfdHlwZV9pZChy dGUtPnJlbGlkKTsKKwkJCWlmICghT2lkSXNWYWxpZChyZWx0eXBlKSkKKwkJCQljb250aW51ZTsK KwkJCWF0dC0+YXR0dHlwaWQgPSByZWx0eXBlOworCQkJLyogc2hvdWxkbid0IG5lZWQgdG8gY2hh bmdlIGFueXRoaW5nIGVsc2UgKi8KKwkJfQorCQllbHNlIGlmIChydGUtPnJ0ZWtpbmQgPT0gUlRF X0ZVTkNUSU9OKQorCQl7CisJCQlSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmM7CisJCQlUdXBsZURl c2MJdGQ7CisJCQlPaWQJCQlmdW5jcmV0dHlwZTsKKwkJCWludAkJCW51bV9mdW5jcywKKwkJCQkJ CWF0dG51bTsKKwkJCUxpc3RDZWxsICAgKmxjLAorCQkJCQkgICAqbGN0eXBlLAorCQkJCQkgICAq bGNuYW1lOworCQkJYm9vbAkJZnVuY3R5cGVfT0sgPSB0cnVlOworCQkJTGlzdAkgICAqZnVuY3R5 cGVzID0gTklMOworCisJCQlpZiAocnRlLT5mdW5jb3JkaW5hbGl0eSkKKwkJCQljb250aW51ZTsK KworCQkJbnVtX2Z1bmNzID0gbGlzdF9sZW5ndGgocnRlLT5mdW5jdGlvbnMpOworCQkJQXNzZXJ0 KG51bV9mdW5jcyA+PSAwKTsKKworCQkJZm9yZWFjaChsYywgcnRlLT5mdW5jdGlvbnMpCisJCQl7 CisJCQkJcnRmdW5jID0gKFJhbmdlVGJsRnVuY3Rpb24gKikgbGZpcnN0KGxjKTsKKwkJCQlnZXRf ZXhwcl9yZXN1bHRfdHlwZShydGZ1bmMtPmZ1bmNleHByLCAmZnVuY3JldHR5cGUsIE5VTEwpOwor CQkJCWlmICghT2lkSXNWYWxpZChmdW5jcmV0dHlwZSkgfHwgZnVuY3JldHR5cGUgPT0gUkVDT1JE T0lEKQorCQkJCXsKKwkJCQkJZnVuY3R5cGVfT0sgPSBmYWxzZTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCWZ1bmN0eXBlcyA9IGxhcHBlbmRfb2lkKGZ1bmN0eXBlcywgZnVuY3JldHR5cGUpOwor CQkJfQorCQkJaWYgKCFmdW5jdHlwZV9PSykKKwkJCQljb250aW51ZTsKKwkJCXRkID0gQ3JlYXRl VGVtcGxhdGVUdXBsZURlc2MobnVtX2Z1bmNzKTsKKworCQkJLyoKKwkJCSAqIGZ1bmNyZXR0eXBl ICE9IFJFQ09SRCwgc28gd2UgaGF2ZSBvbmx5IG9uZSByZXR1cm4gYXR0cmlidXRlIHBlcgorCQkJ ICogZnVuY3Rpb24KKwkJCSAqLworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJ0ZS0+ZXJlZi0+Y29s bmFtZXMpID09IG51bV9mdW5jcyk7CisJCQlhdHRudW0gPSAxOworCQkJZm9ydGhyZWUobGMsIHJ0 ZS0+ZnVuY3Rpb25zLCBsY3R5cGUsIGZ1bmN0eXBlcywgbGNuYW1lLCBydGUtPmVyZWYtPmNvbG5h bWVzKQorCQkJeworCQkJCWNoYXIJICAgKmNvbG5hbWU7CisKKwkJCQlydGZ1bmMgPSAoUmFuZ2VU YmxGdW5jdGlvbiAqKSBsZmlyc3QobGMpOworCQkJCWZ1bmNyZXR0eXBlID0gbGZpcnN0X29pZChs Y3R5cGUpOworCQkJCWNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGxjbmFtZSkpOworCisJCQkJVHVw bGVEZXNjSW5pdEVudHJ5KHRkLCAoQXR0ck51bWJlcikgYXR0bnVtLCBjb2xuYW1lLAorCQkJCQkJ CQkgICBmdW5jcmV0dHlwZSwgLTEsIDApOworCQkJCVR1cGxlRGVzY0luaXRFbnRyeUNvbGxhdGlv bih0ZCwgKEF0dHJOdW1iZXIpIGF0dG51bSwKKwkJCQkJCQkJCQkJZXhwckNvbGxhdGlvbihydGZ1 bmMtPmZ1bmNleHByKSk7CisJCQkJYXR0bnVtKys7CisJCQl9CisKKwkJCWFzc2lnbl9yZWNvcmRf dHlwZV90eXBtb2QodGQpOworCQkJYXR0LT5hdHR0eXBtb2QgPSB0ZC0+dGR0eXBtb2Q7CisJCX0K IAl9CiAJcmV0dXJuIHR1cGRlc2M7CiB9CkBAIC0xNTE0LDE1ICsxNjMzLDI1IEBAIHBvc3RncmVz QmVnaW5Gb3JlaWduU2NhbihGb3JlaWduU2NhblN0YXRlICpub2RlLCBpbnQgZWZsYWdzKQogCiAJ LyoKIAkgKiBJZGVudGlmeSB3aGljaCB1c2VyIHRvIGRvIHRoZSByZW1vdGUgYWNjZXNzIGFzLiAg VGhpcyBzaG91bGQgbWF0Y2ggd2hhdAotCSAqIEV4ZWNDaGVja1JURVBlcm1zKCkgZG9lcy4gIElu IGNhc2Ugb2YgYSBqb2luIG9yIGFnZ3JlZ2F0ZSwgdXNlIHRoZQotCSAqIGxvd2VzdC1udW1iZXJl ZCBtZW1iZXIgUlRFIGFzIGEgcmVwcmVzZW50YXRpdmU7IHdlIHdvdWxkIGdldCB0aGUgc2FtZQot CSAqIHJlc3VsdCBmcm9tIGFueS4KKwkgKiBFeGVjQ2hlY2tSVEVQZXJtcygpIGRvZXMuICBJbiBj YXNlIG9mIGEgam9pbiBvciBhZ2dyZWdhdGUsIHNjYW4gUlRFcworCSAqIHVudGlsIFJURV9SRUxB VElPTiBpcyBmb3VuZC4gV2Ugd291bGQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBmcm9tIGFueS4KIAkg Ki8KIAlpZiAoZnNwbGFuLT5zY2FuLnNjYW5yZWxpZCA+IDApCisJewogCQlydGluZGV4ID0gZnNw bGFuLT5zY2FuLnNjYW5yZWxpZDsKKwkJcnRlID0gZXhlY19ydF9mZXRjaChydGluZGV4LCBlc3Rh dGUpOworCX0KIAllbHNlCi0JCXJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIoZnNwbGFuLT5mc19y ZWxpZHMsIC0xKTsKLQlydGUgPSBleGVjX3J0X2ZldGNoKHJ0aW5kZXgsIGVzdGF0ZSk7CisJewor CQlydGluZGV4ID0gLTE7CisJCXdoaWxlICgocnRpbmRleCA9IGJtc19uZXh0X21lbWJlcihmc3Bs YW4tPmZzX3JlbGlkcywgcnRpbmRleCkpID49IDApCisJCXsKKwkJCXJ0ZSA9IGV4ZWNfcnRfZmV0 Y2gocnRpbmRleCwgZXN0YXRlKTsKKwkJCWlmIChydGUgJiYgcnRlLT5ydGVraW5kID09IFJURV9S RUxBVElPTikKKwkJCQlicmVhazsKKwkJfQorCQlBc3NlcnQocnRlICYmIHJ0ZS0+cnRla2luZCA9 PSBSVEVfUkVMQVRJT04pOworCX0KIAl1c2VyaWQgPSBydGUtPmNoZWNrQXNVc2VyID8gcnRlLT5j aGVja0FzVXNlciA6IEdldFVzZXJJZCgpOwogCiAJLyogR2V0IGluZm8gYWJvdXQgZm9yZWlnbiB0 YWJsZS4gKi8KQEAgLTI1MjIsOCArMjY1MSwzMCBAQCBwb3N0Z3Jlc1BsYW5EaXJlY3RNb2RpZnko UGxhbm5lckluZm8gKnJvb3QsCiAJCSAqIG5vZGUgYmVsb3cuCiAJCSAqLwogCQlpZiAoZnNjYW4t PnNjYW4uc2NhbnJlbGlkID09IDApCisJCXsKKwkJCUxpc3RDZWxsICAgKmxjOworCQkJVmFyCQkg ICAqdGlkX3ZhciA9IE5VTEw7CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgZXhwbGljaXRseSBh ZGQgdGFibGVvaWQgdG8gcmV0dXJuaW5nIGxpc3QgaWYgaXQncworCQkJICogcmVxdWVzdGVkCisJ CQkgKi8KKwkJCWZvcmVhY2gobGMsIHByb2Nlc3NlZF90bGlzdCkKKwkJCXsKKwkJCQlUYXJnZXRF bnRyeSAqdGxlID0gbGZpcnN0X25vZGUoVGFyZ2V0RW50cnksIGxjKTsKKwkJCQlWYXIJCSAgICp2 YXIgPSAoVmFyICopIHRsZS0+ZXhwcjsKKworCQkJCWlmIChJc0EodmFyLCBWYXIpICYmICh2YXIt PnZhcmF0dG5vID09IFRhYmxlT2lkQXR0cmlidXRlTnVtYmVyKSAmJiAoc3RyY21wKHRsZS0+cmVz bmFtZSwgInRhYmxlb2lkIikgPT0gMCkpCisJCQkJeworCQkJCQl0aWRfdmFyID0gdmFyOworCQkJ CQlicmVhazsKKwkJCQl9CisKKwkJCX0KKwogCQkJcmV0dXJuaW5nTGlzdCA9IGJ1aWxkX3JlbW90 ZV9yZXR1cm5pbmcocmVzdWx0UmVsYXRpb24sIHJlbCwKLQkJCQkJCQkJCQkJCSAgIHJldHVybmlu Z0xpc3QpOworCQkJCQkJCQkJCQkJICAgcmV0dXJuaW5nTGlzdCwgdGlkX3Zhcik7CisJCX0KIAl9 CiAKIAkvKgpAQCAtMjg0OCwyMSArMjk5OSw2NSBAQCBwb3N0Z3Jlc0V4cGxhaW5Gb3JlaWduU2Nh bihGb3JlaWduU2NhblN0YXRlICpub2RlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJCXJ0aSArPSBy dG9mZnNldDsKIAkJCQlBc3NlcnQoYm1zX2lzX21lbWJlcihydGksIHBsYW4tPmZzX3JlbGlkcykp OwogCQkJCXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgZXMtPnJ0YWJsZSk7Ci0JCQkJQXNzZXJ0KHJ0ZS0+ cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOwogCQkJCS8qIFRoaXMgbG9naWMgc2hvdWxkIGFncmVl IHdpdGggZXhwbGFpbi5jJ3MgRXhwbGFpblRhcmdldFJlbCAqLwotCQkJCXJlbG5hbWUgPSBnZXRf cmVsX25hbWUocnRlLT5yZWxpZCk7Ci0JCQkJaWYgKGVzLT52ZXJib3NlKQorCQkJCWlmIChydGUt PnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKQogCQkJCXsKLQkJCQkJY2hhcgkgICAqbmFtZXNwYWNl OwotCi0JCQkJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKGdldF9yZWxf bmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKLQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhyZWxhdGlvbnMs ICIlcy4lcyIsCi0JCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihuYW1lc3BhY2UpLAotCQkJCQkJ CQkJIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZSkpOworCQkJCQlyZWxuYW1lID0gZ2V0X3JlbF9u YW1lKHJ0ZS0+cmVsaWQpOworCQkJCQlpZiAoZXMtPnZlcmJvc2UpCisJCQkJCXsKKwkJCQkJCWNo YXIJICAgKm5hbWVzcGFjZTsKKworCQkJCQkJbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1l KGdldF9yZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm8o cmVsYXRpb25zLCAiJXMuJXMiLAorCQkJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKG5hbWVzcGFj ZSksCisJCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZSkpOworCQkJCQl9CisJCQkJ CWVsc2UKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocmVsYXRpb25zLAorCQkJCQkJCQkJ CQkgICBxdW90ZV9pZGVudGlmaWVyKHJlbG5hbWUpKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAocnRl LT5ydGVraW5kID09IFJURV9GVU5DVElPTikKKwkJCQl7CisJCQkJCUxpc3RDZWxsICAgKmxjOwor CQkJCQlpbnQJCQluOworCQkJCQlib29sCQlmaXJzdCA9IHRydWU7CisKKworCQkJCQluID0gbGlz dF9sZW5ndGgocnRlLT5mdW5jdGlvbnMpOworCisJCQkJCWlmIChuID4gMSkKKwkJCQkJCWFwcGVu ZFN0cmluZ0luZm8ocmVsYXRpb25zLCAiUk9XUyBGUk9NKCIpOworCQkJCQlmb3JlYWNoKGxjLCBy dGUtPmZ1bmN0aW9ucykKKwkJCQkJeworCQkJCQkJUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jID0g KFJhbmdlVGJsRnVuY3Rpb24gKikgbGZpcnN0KGxjKTsKKworCQkJCQkJaWYgKCFmaXJzdCkKKwkJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHJlbGF0aW9ucywgIiwgIik7CisJCQkJCQllbHNl CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKworCQkJCQkJaWYgKElzQShydGZ1bmMtPmZ1bmNleHBy LCBGdW5jRXhwcikpCisJCQkJCQl7CisJCQkJCQkJRnVuY0V4cHIgICAqZnVuY2V4cHIgPSAoRnVu Y0V4cHIgKikgcnRmdW5jLT5mdW5jZXhwcjsKKwkJCQkJCQlPaWQJCQlmdW5jaWQgPSBmdW5jZXhw ci0+ZnVuY2lkOworCisJCQkJCQkJcmVsbmFtZSA9IGdldF9mdW5jX25hbWUoZnVuY2lkKTsKKwkJ CQkJCQlpZiAoZXMtPnZlcmJvc2UpCisJCQkJCQkJeworCQkJCQkJCQljaGFyCSAgICpuYW1lc3Bh Y2U7CisKKwkJCQkJCQkJbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9mdW5jX25h bWVzcGFjZShmdW5jaWQpKTsKKwkJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhyZWxhdGlvbnMsICIl cy4lcygpIiwKKwkJCQkJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKG5hbWVzcGFjZSksCisJCQkJ CQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1lKSk7CisJCQkJCQkJfQorCQkJCQkJCWVs c2UKKwkJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhyZWxhdGlvbnMsICIlcygpIiwgcXVvdGVfaWRl bnRpZmllcihyZWxuYW1lKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKG4gPiAxKQorCQkJ CQkJYXBwZW5kU3RyaW5nSW5mbyhyZWxhdGlvbnMsICIpIik7CiAJCQkJfQotCQkJCWVsc2UKLQkJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhyZWxhdGlvbnMsCi0JCQkJCQkJCQkJICAgcXVvdGVf aWRlbnRpZmllcihyZWxuYW1lKSk7CiAJCQkJcmVmbmFtZSA9IChjaGFyICopIGxpc3RfbnRoKGVz LT5ydGFibGVfbmFtZXMsIHJ0aSAtIDEpOwogCQkJCWlmIChyZWZuYW1lID09IE5VTEwpCiAJCQkJ CXJlZm5hbWUgPSBydGUtPmVyZWYtPmFsaWFzbmFtZTsKQEAgLTMyMDEsNyArMzM5Niw3IEBAIGVz dGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJbmZvICpyb290LAogCQkJCS8qIFNob3VsZG4n dCBnZXQgaGVyZSB1bmxlc3Mgd2UgaGF2ZSBMSU1JVCAqLwogCQkJCUFzc2VydChmcGV4dHJhLT5o YXNfbGltaXQpOwogCQkJCUFzc2VydChmb3JlaWducmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9C QVNFUkVMIHx8Ci0JCQkJCSAgIGZvcmVpZ25yZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0pPSU5S RUwpOworCQkJCQkgICBJU19KT0lOX1JFTChmb3JlaWducmVsKSk7CiAJCQkJc3RhcnR1cF9jb3N0 ICs9IGZvcmVpZ25yZWwtPnJlbHRhcmdldC0+Y29zdC5zdGFydHVwOwogCQkJCXJ1bl9jb3N0ICs9 IGZvcmVpZ25yZWwtPnJlbHRhcmdldC0+Y29zdC5wZXJfdHVwbGUgKiByb3dzOwogCQkJfQpAQCAt NDM3OCw3ICs0NTczLDcgQEAgZGVhbGxvY2F0ZV9xdWVyeShQZ0Zkd01vZGlmeVN0YXRlICpmbXN0 YXRlKQogICoJCVVQREFURS9ERUxFVEUgLi4gUkVUVVJOSU5HIG9uIGEgam9pbiBkaXJlY3RseQog ICovCiBzdGF0aWMgTGlzdCAqCi1idWlsZF9yZW1vdGVfcmV0dXJuaW5nKEluZGV4IHJ0aW5kZXgs IFJlbGF0aW9uIHJlbCwgTGlzdCAqcmV0dXJuaW5nTGlzdCkKK2J1aWxkX3JlbW90ZV9yZXR1cm5p bmcoSW5kZXggcnRpbmRleCwgUmVsYXRpb24gcmVsLCBMaXN0ICpyZXR1cm5pbmdMaXN0LCBWYXIg KnRpZCkKIHsKIAlib29sCQloYXZlX3dob2xlcm93ID0gZmFsc2U7CiAJTGlzdAkgICAqdGxpc3Qg PSBOSUw7CkBAIC00Mzg3LDYgKzQ1ODIsMTkgQEAgYnVpbGRfcmVtb3RlX3JldHVybmluZyhJbmRl eCBydGluZGV4LCBSZWxhdGlvbiByZWwsIExpc3QgKnJldHVybmluZ0xpc3QpCiAKIAlBc3NlcnQo cmV0dXJuaW5nTGlzdCk7CiAKKwkvKgorCSAqIElmIHRpZCBpcyByZXF1ZXN0ZWQsIGFkZCBpdCB0 byB0aGUgcmV0dXJuaW5nIGxpc3QKKwkgKi8KKwlpZiAodGlkKQorCXsKKwkJdGxpc3QgPSBsYXBw ZW5kKHRsaXN0LAorCQkJCQkJbWFrZVRhcmdldEVudHJ5KChFeHByICopIHRpZCwKKwkJCQkJCQkJ CQlsaXN0X2xlbmd0aCh0bGlzdCkgKyAxLAorCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJZmFs c2UpKTsKKworCX0KKwogCXZhcnMgPSBwdWxsX3Zhcl9jbGF1c2UoKE5vZGUgKikgcmV0dXJuaW5n TGlzdCwgUFZDX0lOQ0xVREVfUExBQ0VIT0xERVJTKTsKIAogCS8qCkBAIC00Njc5LDExICs0ODg3 LDEzIEBAIGluaXRfcmV0dXJuaW5nX2ZpbHRlcihQZ0Zkd0RpcmVjdE1vZGlmeVN0YXRlICpkbXN0 YXRlLAogCQkJaWYgKGF0dHJubyA8IDApCiAJCQl7CiAJCQkJLyoKLQkJCQkgKiBXZSBkb24ndCBy ZXRyaWV2ZSBzeXN0ZW0gY29sdW1ucyBvdGhlciB0aGFuIGN0aWQgYW5kIG9pZC4KKwkJCQkgKiBX ZSBkb24ndCByZXRyaWV2ZSBzeXN0ZW0gY29sdW1ucyBvdGhlciB0aGFuIGN0aWQgYW5kIG9pZCwK KwkJCQkgKiBidXQgbG9jYWxseS1nZW5lcmF0ZWQgdGFibGVvaWQgY2FuIGFwcGVhciBpbiByZXR1 cm5pbmcKKwkJCQkgKiBsaXN0LgogCQkJCSAqLwogCQkJCWlmIChhdHRybm8gPT0gU2VsZkl0ZW1Q b2ludGVyQXR0cmlidXRlTnVtYmVyKQogCQkJCQlkbXN0YXRlLT5jdGlkQXR0bm8gPSBpOwotCQkJ CWVsc2UKKwkJCQllbHNlIGlmIChhdHRybm8gIT0gVGFibGVPaWRBdHRyaWJ1dGVOdW1iZXIpCiAJ CQkJCUFzc2VydChmYWxzZSk7CiAJCQkJZG1zdGF0ZS0+aGFzU3lzdGVtQ29scyA9IHRydWU7CiAJ CQl9CkBAIC01NDg3LDYgKzU2OTcsMTI4IEBAIHBvc3RncmVzSW1wb3J0Rm9yZWlnblNjaGVtYShJ bXBvcnRGb3JlaWduU2NoZW1hU3RtdCAqc3RtdCwgT2lkIHNlcnZlck9pZCkKIAlyZXR1cm4gY29t bWFuZHM7CiB9CiAKKy8qCisgKiBEZXRlcm1pbmUgaWYgZm9yZWlnbnJlbCwgbm90IGJhY2tlZCBi eSBmb3JlaWduCisgKiB0YWJsZSwgaXMgZmluZSB0byBwdXNoIGRvd24uCisgKi8KK3N0YXRpYyBi b29sCitpc19ub25yZWxfcmVsaW5mb19vayhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq Zm9yZWlnbnJlbCkKK3sKKwlSYW5nZVRibEVudHJ5ICpydGU7CisJUmFuZ2VUYmxGdW5jdGlvbiAq cnRmdW5jOworCisJcnRlID0gcGxhbm5lcl9ydF9mZXRjaChmb3JlaWducmVsLT5yZWxpZCwgcm9v dCk7CisKKwlpZiAoIXJ0ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJQXNzZXJ0KGZvcmVpZ25yZWwt PmZkd19wcml2YXRlKTsKKworCWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRFX0ZVTkNUSU9OKQorCXsK KwkJTGlzdENlbGwgICAqbGM7CisKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJ0ZS0+ZnVuY3Rpb25z KSA+PSAxKTsKKwkJZm9yZWFjaChsYywgcnRlLT5mdW5jdGlvbnMpCisJCXsKKwkJCXJ0ZnVuYyA9 IChSYW5nZVRibEZ1bmN0aW9uICopIGxmaXJzdChsYyk7CisKKwkJCWlmIChjb250YWluX3Zhcl9j bGF1c2UocnRmdW5jLT5mdW5jZXhwcikgfHwKKwkJCQljb250YWluX211dGFibGVfZnVuY3Rpb25z KHJ0ZnVuYy0+ZnVuY2V4cHIpIHx8CisJCQkJY29udGFpbl9zdWJwbGFucyhydGZ1bmMtPmZ1bmNl eHByKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlpZiAoIWlzX2ZvcmVpZ25fZXhwcihyb290LCBm b3JlaWducmVsLCAoRXhwciAqKSBydGZ1bmMtPmZ1bmNleHByKSkKKwkJCQlyZXR1cm4gZmFsc2U7 CisJCX0KKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisg KiBDaGVjayBpZiByZWx0YXJnZXQgaXMgc2FmZSBlbm91Z2ggdG8gcHVzaCBkb3duIHN1Y2ggam9p bgorICovCitzdGF0aWMgYm9vbAoram9pbnJlbF90YXJnZXRfb2soUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmpvaW5yZWwpCit7CisJTGlzdAkgICAqdmFyczsKKwlMaXN0Q2VsbCAgICps YzsKKwlib29sCQlvayA9IHRydWU7CisKKwlBc3NlcnQoam9pbnJlbC0+cmVsdGFyZ2V0KTsKKwor CS8qIFRPRE86IGlzIGZsYWcgY29ycmVjdCA/ICovCisJdmFycyA9IHB1bGxfdmFyX2NsYXVzZSgo Tm9kZSAqKSBqb2lucmVsLT5yZWx0YXJnZXQtPmV4cHJzLCBQVkNfSU5DTFVERV9QTEFDRUhPTERF UlMpOworCisJZm9yZWFjaChsYywgdmFycykKKwl7CisJCVZhcgkJICAgKnZhciA9IChWYXIgKikg bGZpcnN0KGxjKTsKKworCQkvKgorCQkgKiBXZSBjYW4ndCByZXR1cm4gYWJzdHJhY3QgcmVjb3Jk cywgZm9yYmlkIHN1Y2ggZm9yZWlnbiBqb2lucywgZXhjZXB0CisJCSAqIGNhc2VzIHdoZW4gd2Ug Y2FuIGRlcml2ZSBpdHMgdHlwZQorCQkgKi8KKwkJaWYgKElzQSh2YXIsIFZhcikgJiYKKwkJCXZh ci0+dmFydHlwZSA9PSBSRUNPUkRPSUQgJiYKKwkJCXZhci0+dmFydHlwbW9kIDwgMCkKKwkJewor CQkJb2sgPSBmYWxzZTsKKworCQkJaWYgKHZhci0+dmFyYXR0bm8gPT0gSW52YWxpZEF0dHJOdW1i ZXIpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcGxhbm5lcl9ydF9mZXRjaCh2YXIt PnZhcm5vLCByb290KTsKKworCQkJCWlmIChydGUpCisJCQkJeworCQkJCQlpZiAocnRlLT5ydGVr aW5kID09IFJURV9SRUxBVElPTikKKwkJCQkJeworCQkJCQkJT2lkCQkJcmVsdHlwZTsKKworCQkJ CQkJcmVsdHlwZSA9IGdldF9yZWxfdHlwZV9pZChydGUtPnJlbGlkKTsKKwkJCQkJCWlmIChPaWRJ c1ZhbGlkKHJlbHR5cGUpKQorCQkJCQkJCW9rID0gdHJ1ZTsKKwkJCQkJfQorCQkJCQllbHNlIGlm IChydGUtPnJ0ZWtpbmQgPT0gUlRFX0ZVTkNUSU9OICYmICFydGUtPmZ1bmNvcmRpbmFsaXR5KQor CQkJCQl7CisJCQkJCQlMaXN0Q2VsbCAgICpsYzsKKwkJCQkJCWludAkJCW47CisKKwkJCQkJCW4g PSBsaXN0X2xlbmd0aChydGUtPmZ1bmN0aW9ucyk7CisKKwkJCQkJCUFzc2VydChuID49IDEpOwor CisJCQkJCQlpZiAobiA9PSBsaXN0X2xlbmd0aChydGUtPmVyZWYtPmNvbG5hbWVzKSkKKwkJCQkJ CXsKKwkJCQkJCQlvayA9IHRydWU7CisJCQkJCQkJZm9yZWFjaChsYywgcnRlLT5mdW5jdGlvbnMp CisJCQkJCQkJeworCQkJCQkJCQlSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmM7CisJCQkJCQkJCVR1 cGxlRGVzYwl0dXBkZXNjOworCQkJCQkJCQlPaWQJCQlmdW5jcmV0dHlwZTsKKworCQkJCQkJCQly dGZ1bmMgPSAoUmFuZ2VUYmxGdW5jdGlvbiAqKSBsZmlyc3QobGMpOworCQkJCQkJCQlnZXRfZXhw cl9yZXN1bHRfdHlwZShydGZ1bmMtPmZ1bmNleHByLCAmZnVuY3JldHR5cGUsICZ0dXBkZXNjKTsK KworCQkJCQkJCQlpZiAoIU9pZElzVmFsaWQoZnVuY3JldHR5cGUpIHx8IGZ1bmNyZXR0eXBlID09 IFJFQ09SRE9JRCB8fCBmdW5jcmV0dHlwZSA9PSBWT0lET0lEKQorCQkJCQkJCQl7CisJCQkJCQkJ CQlvayA9IGZhbHNlOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJ CQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmICghb2spCisJCQkJYnJlYWs7CisJCX0K Kwl9CisJcmV0dXJuIG9rOworfQorCiAvKgogICogQXNzZXNzIHdoZXRoZXIgdGhlIGpvaW4gYmV0 d2VlbiBpbm5lciBhbmQgb3V0ZXIgcmVsYXRpb25zIGNhbiBiZSBwdXNoZWQgZG93bgogICogdG8g dGhlIGZvcmVpZ24gc2VydmVyLiBBcyBhIHNpZGUgZWZmZWN0LCBzYXZlIGluZm9ybWF0aW9uIHdl IG9idGFpbiBpbiB0aGlzCkBAIC01NTEyLDYgKzU4NDQsMTIgQEAgZm9yZWlnbl9qb2luX29rKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLCBKb2luVHlwZSBqb2ludHlwZSwK IAkJam9pbnR5cGUgIT0gSk9JTl9SSUdIVCAmJiBqb2ludHlwZSAhPSBKT0lOX0ZVTEwpCiAJCXJl dHVybiBmYWxzZTsKIAorCS8qCisJICogV2UgY2FuJ3QgcHVzaCBkb3duIGpvaW4gaWYgaXRzIHJl bHRhcmdldCBpcyBub3Qgc2FmZQorCSAqLworCWlmICgham9pbnJlbF90YXJnZXRfb2socm9vdCwg am9pbnJlbCkpCisJCXJldHVybiBmYWxzZTsKKwogCS8qCiAJICogSWYgZWl0aGVyIG9mIHRoZSBq b2luaW5nIHJlbGF0aW9ucyBpcyBtYXJrZWQgYXMgdW5zYWZlIHRvIHB1c2hkb3duLCB0aGUKIAkg KiBqb2luIGNhbiBub3QgYmUgcHVzaGVkIGRvd24uCkBAIC02MDc1LDYgKzY0MTMsNDMgQEAgcG9z dGdyZXNHZXRGb3JlaWduSm9pblBhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCS8qIFhYWCBDb25z aWRlciBwYXJhbWV0ZXJpemVkIHBhdGhzIGZvciB0aGUgam9pbiByZWxhdGlvbiAqLwogfQogCisv KgorICogcG9zdGdyZXNUcnlTaGlwcGFibGVKb2luUGF0aHMKKyAqCisgKiBUcnkgdG8gYWRkIGZv cmVpZ24gam9pbiBvZiBmb3JlaWduIHJlbGF0aW9uIHdpdGggc2hpcHBhYmxlIFJURS4KKyAqLwor c3RhdGljIHZvaWQKK3Bvc3RncmVzVHJ5U2hpcHBhYmxlSm9pblBhdGhzKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCSAgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkgIFJlbE9wdEluZm8g Km91dGVycmVsLAorCQkJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJICBKb2lu VHlwZSBqb2ludHlwZSwKKwkJCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSkKK3sKKwlQ Z0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvX28gPSAoUGdGZHdSZWxhdGlvbkluZm8gKikgb3V0ZXJy ZWwtPmZkd19wcml2YXRlOworCVBnRmR3UmVsYXRpb25JbmZvICpmcGluZm9faSA9IChQZ0Zkd1Jl bGF0aW9uSW5mbyAqKSBpbm5lcnJlbC0+ZmR3X3ByaXZhdGU7CisKKwlpZiAoZnBpbmZvX28gPT0g TlVMTCkKKwkJLyogT3V0ZXIgcGF0aCBpcyBub3QgZm9yZWlnbiByZWxhdGlvbiBvciBmb3JlaWdu IEpPSU4uICovCisJCXJldHVybjsKKworCWlmIChqb2lucmVsLT5mZHdyb3V0aW5lICE9IE5VTEwg fHwgaW5uZXJyZWwtPnJlbG9wdGtpbmQgIT0gUkVMT1BUX0JBU0VSRUwpCisJCXJldHVybjsKKwor CWlmIChmcGluZm9faSA9PSBOVUxMIHx8IGZwaW5mb19pLT5pc19nZW5lcmF0ZWQpCisJCWluaXRf ZnBpbmZvKHJvb3QsIGlubmVycmVsLCBJbnZhbGlkT2lkLCBmcGluZm9fbyk7CisKKwlpZiAoIWlz X25vbnJlbF9yZWxpbmZvX29rKHJvb3QsIGlubmVycmVsKSkKKwkJcmV0dXJuOworCisJam9pbnJl bC0+c2VydmVyaWQgPSBvdXRlcnJlbC0+c2VydmVyaWQ7CisJam9pbnJlbC0+dXNlcmlkID0gb3V0 ZXJyZWwtPnVzZXJpZDsKKwlqb2lucmVsLT51c2VyaWRpc2N1cnJlbnQgPSBvdXRlcnJlbC0+dXNl cmlkaXNjdXJyZW50OworCWpvaW5yZWwtPmZkd3JvdXRpbmUgPSBvdXRlcnJlbC0+ZmR3cm91dGlu ZTsKKworCXBvc3RncmVzR2V0Rm9yZWlnbkpvaW5QYXRocyhyb290LCBqb2lucmVsLCBvdXRlcnJl bCwgaW5uZXJyZWwsIGpvaW50eXBlLCBleHRyYSk7Cit9CisKIC8qCiAgKiBBc3Nlc3Mgd2hldGhl ciB0aGUgYWdncmVnYXRpb24sIGdyb3VwaW5nIGFuZCBoYXZpbmcgb3BlcmF0aW9ucyBjYW4gYmUg cHVzaGVkCiAgKiBkb3duIHRvIHRoZSBmb3JlaWduIHNlcnZlci4gIEFzIGEgc2lkZSBlZmZlY3Qs IHNhdmUgaW5mb3JtYXRpb24gd2Ugb2J0YWluIGluCkBAIC02NTA1LDcgKzY4ODAsNyBAQCBhZGRf Zm9yZWlnbl9vcmRlcmVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1 dF9yZWwsCiAJICogc3RhbmRhcmRfcXBfY2FsbGJhY2soKSkuCiAJICovCiAJaWYgKGlucHV0X3Jl bC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCB8fAotCQlpbnB1dF9yZWwtPnJlbG9wdGtp bmQgPT0gUkVMT1BUX0pPSU5SRUwpCisJCUlTX0pPSU5fUkVMKGlucHV0X3JlbCkpCiAJewogCQlB c3NlcnQocm9vdC0+cXVlcnlfcGF0aGtleXMgPT0gcm9vdC0+c29ydF9wYXRoa2V5cyk7CiAKQEAg LTY2NTYsMTEgKzcwMzEsMTEgQEAgYWRkX2ZvcmVpZ25fZmluYWxfcGF0aHMoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICogam9pbiByZWxhdGlvbi4KIAkJICov CiAJCUFzc2VydChpbnB1dF9yZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwgfHwKLQkJ CSAgIGlucHV0X3JlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfSk9JTlJFTCB8fAorCQkJICAgSVNf Sk9JTl9SRUwoaW5wdXRfcmVsKSB8fAogCQkJICAgKGlucHV0X3JlbC0+cmVsb3B0a2luZCA9PSBS RUxPUFRfVVBQRVJfUkVMICYmCiAJCQkJaWZwaW5mby0+c3RhZ2UgPT0gVVBQRVJSRUxfT1JERVJF RCAmJgogCQkJCShpZnBpbmZvLT5vdXRlcnJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJF TCB8fAotCQkJCSBpZnBpbmZvLT5vdXRlcnJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfSk9JTlJF TCkpKTsKKwkJCQkgSVNfSk9JTl9SRUwoaWZwaW5mby0+b3V0ZXJyZWwpKSkpOwogCiAJCWZvcmVh Y2gobGMsIGlucHV0X3JlbC0+cGF0aGxpc3QpCiAJCXsKQEAgLTY3MjgsNyArNzEwMyw3IEBAIGFk ZF9mb3JlaWduX2ZpbmFsX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1 dF9yZWwsCiAKIAkvKiBUaGUgaW5wdXRfcmVsIHNob3VsZCBiZSBhIGJhc2UsIGpvaW4sIG9yIGdy b3VwaW5nIHJlbGF0aW9uICovCiAJQXNzZXJ0KGlucHV0X3JlbC0+cmVsb3B0a2luZCA9PSBSRUxP UFRfQkFTRVJFTCB8fAotCQkgICBpbnB1dF9yZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0pPSU5S RUwgfHwKKwkJICAgSVNfSk9JTl9SRUwoaW5wdXRfcmVsKSB8fAogCQkgICAoaW5wdXRfcmVsLT5y ZWxvcHRraW5kID09IFJFTE9QVF9VUFBFUl9SRUwgJiYKIAkJCWlmcGluZm8tPnN0YWdlID09IFVQ UEVSUkVMX0dST1VQX0FHRykpOwogCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9w b3N0Z3Jlc19mZHcuaCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oCmluZGV4 IDkwYjcyZTllYzU1Li4wZjU5OWNkZWY1YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19m ZHcvcG9zdGdyZXNfZmR3LmgKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmgKQEAgLTUyLDYgKzUyLDEyIEBAIHR5cGVkZWYgc3RydWN0IFBnRmR3UmVsYXRpb25JbmZvCiAJ LyogVHJ1ZSBtZWFucyB0aGF0IHRoZSBxdWVyeV9wYXRoa2V5cyBpcyBzYWZlIHRvIHB1c2ggZG93 biAqLwogCWJvb2wJCXFwX2lzX3B1c2hkb3duX3NhZmU7CiAKKwkvKgorCSAqIFRydWUgbWVhbnMg dGhhdCBQZ0Zkd1JlbGF0aW9uSW5mbyBpcyBub3QgZXh0cmFjdGVkIGZyb20gY2F0YWxvZ3MsIGJ1 dAorCSAqIGdlbmVyYXRlZAorCSAqLworCWJvb2wJCWlzX2dlbmVyYXRlZDsKKwogCS8qIENvc3Qg YW5kIHNlbGVjdGl2aXR5IG9mIGxvY2FsX2NvbmRzLiAqLwogCVF1YWxDb3N0CWxvY2FsX2NvbmRz X2Nvc3Q7CiAJU2VsZWN0aXZpdHkgbG9jYWxfY29uZHNfc2VsOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9zcWwvcG9zdGdyZXNfZmR3LnNxbAppbmRleCAzOGY0YTc4MzdmZS4uZmIzNDY5ZWZlNWEgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zNDIyLDMgKzM0 MjIsMzM5IEBAIENSRUFURSBGT1JFSUdOIFRBQkxFIGludl9mc3ogKGMxIGludCApCiAtLSBJbnZh bGlkIGJhdGNoX3NpemUgb3B0aW9uCiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBpbnZfYnN6IChjMSBp bnQgKQogCVNFUlZFUiBsb29wYmFjayBPUFRJT05TIChiYXRjaF9zaXplICcxMDAkJSQjJCMnKTsK KworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorLS0gdGVzdCBmdW5jdGlvbiBzY2FuIHB1c2hkb3duCistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CitDUkVBVEUgVEFCTEUgYmFzZV90YmwgKGEgaW50LCBiIGludCk7CitDUkVBVEUgRk9S RUlHTiBUQUJMRSByZW1vdGVfdGJsIChhIGludCwgYiBpbnQpCisgIFNFUlZFUiBsb29wYmFjayBP UFRJT05TICh0YWJsZV9uYW1lICdiYXNlX3RibCcpOworQUxURVIgRk9SRUlHTiBUQUJMRSByZW1v dGVfdGJsIE9QVElPTlMgKHVzZV9yZW1vdGVfZXN0aW1hdGUgJ3RydWUnKTsKK0NSRUFURSBUQUJM RSBiYXNlX3RibDEgKGMgaW50LCBkIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgcmVtb3Rl X3RibDEgKGMgaW50LCBkIHRleHQpCisgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9u YW1lICdiYXNlX3RibDEnKTsKK0FMVEVSIEZPUkVJR04gVEFCTEUgcmVtb3RlX3RibDEgT1BUSU9O UyAodXNlX3JlbW90ZV9lc3RpbWF0ZSAndHJ1ZScpOworCitJTlNFUlQgSU5UTyByZW1vdGVfdGJs IFNFTEVDVCBnLCBnKjIgZnJvbSAgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK0lOU0VSVCBJ TlRPIHJlbW90ZV90YmwxIFNFTEVDVCBnLCAndGV4dCd8fCBnIGZyb20gIGdlbmVyYXRlX3Nlcmll cygxLDUwMCkgZzsKK0FOQUxZWkUgYmFzZV90Ymw7CitBTkFMWVpFIGJhc2VfdGJsMTsKKworRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSByZW1vdGVfdGJsIHIsIHVu bmVzdChhcnJheVsyLDMsNF0pIG4gV0hFUkUgci5hID0gbjsKKworU0VMRUNUICogRlJPTSByZW1v dGVfdGJsIHIsIHVubmVzdChhcnJheVsyLDMsNF0pIG4gV0hFUkUgci5hID0gbgorT1JERVIgQlkg ci5hOworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHVubmVz dChhcnJheVsyLDMsNF0pIG4sIHJlbW90ZV90YmwgciBXSEVSRSByLmEgPSBuOworCitTRUxFQ1Qg KiBGUk9NIHVubmVzdChhcnJheVsyLDMsNF0pIG4sIHJlbW90ZV90YmwgciBXSEVSRSByLmEgPSBu CitPUkRFUiBCWSByLmE7CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gcmVtb3RlX3RibCByLCByZW1vdGVfdGJsMSByMSwgdW5uZXN0KGFycmF5WzMsNF0pIG4K K1dIRVJFIHIuYSA9IG4gQU5EIHIxLmMgPSByLmE7CisKK1NFTEVDVCAqIEZST00gcmVtb3RlX3Ri bCByLCByZW1vdGVfdGJsMSByMSwgdW5uZXN0KGFycmF5WzMsNF0pIG4KK1dIRVJFIHIuYSA9IG4g QU5EIHIxLmMgPSByLmEKK09SREVSIEJZIHIuYTsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKQorU0VMRUNUIHIuKixuIGZyb20gcmVtb3RlX3RibCByLCByZW1vdGVfdGJsMSByMSwgdW5u ZXN0KGFycmF5WzMsNF0pIG4KK1dIRVJFIHIuYSA9IG4gQU5EIHIxLmMgPSByLmEgYW5kIG4gPiAz OworCitTRUxFQ1QgKiBmcm9tIHJlbW90ZV90YmwgciwgcmVtb3RlX3RibDEgcjEsIHVubmVzdChh cnJheVszLDRdKSBuCitXSEVSRSByLmEgPSBuIEFORCByMS5jID0gci5hIGFuZCBuID4gMzsKKwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHIuKiwgdC5uIGZyb20gcmVtb3Rl X3RibDEgciwgUk9XUyBGUk9NICh1bm5lc3QoYXJyYXlbMyw0XSksIGpzb25fZWFjaF90ZXh0KCd7 ImEiOiJ0ZXh0MSIsICJjIjoidGV4dDQifScpKSB0IChuLCBrLCB0eHQpCitXSEVSRSByLmMgPSAg dC5uIEFORCByLmQgPSB0LnR4dDsKKworU0VMRUNUIHIuKiwgdC50eHQgZnJvbSByZW1vdGVfdGJs MSByLCBST1dTIEZST00gKHVubmVzdChhcnJheVszLDRdKSwganNvbl9lYWNoX3RleHQoJ3siYSI6 InRleHQxIiwgImMiOiJ0ZXh0NCJ9JykpIHQgKG4sIGssIHR4dCkKK1dIRVJFIHIuYyA9ICB0Lm4g QU5EIHIuZCA9IHQudHh0OworCistLSBjb21wbGV4IHR5cGVzCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHJlbW90ZV90YmwgciBKT0lOIFVOTkVTVChhcnJheVti b3ggJygoMiwzKSwoLTIsLTMpKSddKSBhcyB0KGJ4KSBPTiBhID0gYXJlYShieCk7CisKK1NFTEVD VCAqIEZST00gcmVtb3RlX3RibCByIEpPSU4gVU5ORVNUKGFycmF5W2JveCAnKCgyLDMpLCgtMiwt MykpJ10pIGFzIHQoYngpIE9OIGEgPSBhcmVhKGJ4KQorT1JERVIgQlkgci5hOworCitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHJlbW90ZV90YmwxIHIxIEpPSU4g anNvbl9lYWNoX3RleHQoJ3siYSI6InRleHQxIiwgImIiOjIsICJjIjoidGV4dDE0In0nKSBPTiBk ID0gdmFsdWU7CisKK1NFTEVDVCAqIEZST00gcmVtb3RlX3RibDEgcjEgSk9JTiBqc29uX2VhY2hf dGV4dCgneyJhIjoidGV4dDEiLCAiYiI6MiwgImMiOiJ0ZXh0MTQifScpIE9OIGQgPSB2YWx1ZQor T1JERVIgQlkgcjEuYzsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSByZW1vdGVfdGJsMSByMSBKT0lOIGpzb25fZWFjaF90ZXh0KCd7ImEiOiJ0ZXh0MSIsICJi IjoyLCAiYyI6InRleHQxNCJ9JykgQVMgdCh1LHYpIE9OIGQgPSB2OworCitTRUxFQ1QgKiBGUk9N IHJlbW90ZV90YmwxIHIxIEpPSU4ganNvbl9lYWNoX3RleHQoJ3siYSI6InRleHQxIiwgImIiOjIs ICJjIjoidGV4dDE0In0nKSBBUyB0KHUsdikgT04gZCA9IHYKK09SREVSIEJZIHIxLmM7CisKKy0t IERNTAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorVVBEQVRFIHJlbW90ZV90YmwgciBT RVQgYj01IEZST00gVU5ORVNUKGFycmF5W2JveCAnKCgyLDMpLCgtMiwtMykpJ10pIEFTIHQgKGJ4 KSBXSEVSRSByLmEgPSBhcmVhKHQuYngpCitSRVRVUk5JTkcgYSxiOworCitVUERBVEUgcmVtb3Rl X3RibCByIFNFVCBiPTUgRlJPTSBVTk5FU1QoYXJyYXlbYm94ICcoKDIsMyksKC0yLC0zKSknXSkg QVMgdCAoYngpIFdIRVJFIHIuYSA9IGFyZWEodC5ieCkKK1JFVFVSTklORyBhLGI7CisKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1VQREFURSByZW1vdGVfdGJsIHIgU0VUIGI9Q0FTRSBX SEVOIHJhbmRvbSgpPj0wIFRIRU4gNSBFTFNFIDAgRU5EIEZST00gVU5ORVNUKGFycmF5W2JveCAn KCgyLDMpLCgtMiwtMykpJ10pIEFTIHQgKGJ4KSBXSEVSRSByLmEgPSBhcmVhKHQuYngpCitSRVRV Uk5JTkcgYSxiOworCitVUERBVEUgcmVtb3RlX3RibCByIFNFVCBiPUNBU0UgV0hFTiByYW5kb20o KT49MCBUSEVOIDUgRUxTRSAwIEVORCBGUk9NIFVOTkVTVChhcnJheVtib3ggJygoMiwzKSwoLTIs LTMpKSddKSBBUyB0IChieCkgV0hFUkUgci5hID0gYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYjsK KworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorVVBEQVRFIHJlbW90ZV90YmwgciBTRVQg Yj01IEZST00gVU5ORVNUKGFycmF5WzEwLDIwXSwgYXJyYXlbYm94ICcoKDIsMyksKC0yLC00KSkn LCBib3ggJygoMSwyKSwoLTIsLTMpKSddKSBBUyB0IChsLCBieCkgV0hFUkUgci5hIGJldHdlZW4g bCBhbmQgYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYjsKKworVVBEQVRFIHJlbW90ZV90YmwgciBT RVQgYj01IEZST00gVU5ORVNUKGFycmF5WzEwLDIwXSwgYXJyYXlbYm94ICcoKDIsMyksKC0yLC00 KSknLCBib3ggJygoMSwyKSwoLTIsLTMpKSddKSBBUyB0IChsLCBieCkgV0hFUkUgci5hIGJldHdl ZW4gbCBhbmQgYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYjsKKworRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorVVBEQVRFIHJlbW90ZV90YmwgciBTRVQgYj1DQVNFIFdIRU4gcmFuZG9tKCk+ PTAgVEhFTiA1IEVMU0UgMCBFTkQgRlJPTSBVTk5FU1QoYXJyYXlbMTAsMjBdLCBhcnJheVtib3gg JygoMiwzKSwoLTIsLTQpKScsIGJveCAnKCgxLDIpLCgtMiwtMykpJ10pIEFTIHQgKGwsIGJ4KSBX SEVSRSByLmEgYmV0d2VlbiBsIGFuZCBhcmVhKHQuYngpCitSRVRVUk5JTkcgYSxiOworCitVUERB VEUgcmVtb3RlX3RibCByIFNFVCBiPUNBU0UgV0hFTiByYW5kb20oKT49MCBUSEVOIDUgRUxTRSAw IEVORCBGUk9NIFVOTkVTVChhcnJheVsxMCwyMF0sIGFycmF5W2JveCAnKCgyLDMpLCgtMiwtNCkp JywgYm94ICcoKDEsMiksKC0yLC0zKSknXSkgQVMgdCAobCwgYngpIFdIRVJFIHIuYSBiZXR3ZWVu IGwgYW5kIGFyZWEodC5ieCkKK1JFVFVSTklORyBhLGI7CisKKy0tIFRlc3QgdGhhdCBsb2NhbCBm dW5jdGlvbnMgYXJlIG5vdCBwdXNoZWQgZG93bgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04g ZihJTlRFR0VSKQorUkVUVVJOUyBTRVRPRiBJTlRFR0VSCitMQU5HVUFHRSBzcWwgQVMgJ3NlbGVj dCBnZW5lcmF0ZV9zZXJpZXMoMSwkMSk7JyBJTU1VVEFCTEU7CisKK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcmVtb3RlX3RibCByLCBmKDEwKSBuCitXSEVSRSBy LmEgPSBuOworCitTRUxFQ1QgKiBGUk9NIHJlbW90ZV90YmwgciwgcmVtb3RlX3RibDEgcjEsIHVu bmVzdChhcnJheVszLDRdKSBuCitXSEVSRSByLmEgPSBuIEFORCByMS5jID0gci5hIEFORCBuID4g MzsKKworLS0gVGVzdCBqb2lucyB3aXRoIGFwcGVuZCByZWxhdGlvbnMKKworU0VUIGVuYWJsZV9w YXJ0aXRpb253aXNlX2pvaW49b247CisKKy0tIFBhcnRpdGlvbmVkIHRhYmxlcyBhbmQgZnVuY3Rp b24gc2NhbiBwdXNoZG93bgorCitDUkVBVEUgVEFCTEUgZGlzdHIxKGEgaW50LCBiIGludCkgUEFS VElUSU9OIEJZIEhBU0goYSk7CitDUkVBVEUgVEFCTEUgZGlzdHIxX3BhcnRfMSBQQVJUSVRJT04g T0YgZGlzdHIxIEZPUiBWQUxVRVMgV0lUSCAoIE1PRFVMVVMgNCwgUkVNQUlOREVSIDApOworQ1JF QVRFIFRBQkxFIGRpc3RyMV9iYXNlXzIgKGEgaW50LCBiIGludCk7CitDUkVBVEUgRk9SRUlHTiBU QUJMRSBkaXN0cjFfcGFydF8yIFBBUlRJVElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIICgg TU9EVUxVUyA0LCBSRU1BSU5ERVIgMSkKKwlTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVf bmFtZSAnZGlzdHIxX2Jhc2VfMicsIHVzZV9yZW1vdGVfZXN0aW1hdGUgJ3RydWUnKTsKK0NSRUFU RSBUQUJMRSBkaXN0cjFfYmFzZV8zIChhIGludCwgYiBpbnQpOworQ1JFQVRFIEZPUkVJR04gVEFC TEUgZGlzdHIxX3BhcnRfMyBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMgV0lUSCAoIE1P RFVMVVMgNCwgUkVNQUlOREVSIDIpCisJU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TICh0YWJsZV9u YW1lICdkaXN0cjFfYmFzZV8zJywgdXNlX3JlbW90ZV9lc3RpbWF0ZSAndHJ1ZScpOworQ1JFQVRF IFRBQkxFIGRpc3RyMV9iYXNlXzQgKGEgaW50LCBiIGludCk7CitDUkVBVEUgRk9SRUlHTiBUQUJM RSBkaXN0cjFfcGFydF80IFBBUlRJVElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIICggTU9E VUxVUyA0LCBSRU1BSU5ERVIgMykKKwlTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFt ZSAnZGlzdHIxX2Jhc2VfNCcsIHVzZV9yZW1vdGVfZXN0aW1hdGUgJ3RydWUnKTsKKworQ1JFQVRF IFRBQkxFIGRpc3RyMihjIGludCwgZCB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSChjKTsKK0NSRUFU RSBUQUJMRSBkaXN0cjJfcGFydF8xIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZBTFVFUyBXSVRI IChNT0RVTFVTIDQsIFJFTUFJTkRFUiAwKTsKK0NSRUFURSBUQUJMRSBkaXN0cjJfYmFzZV8yIChj IGludCwgZCB0ZXh0KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wYXJ0XzIgUEFSVElU SU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKCBNT0RVTFVTIDQsIFJFTUFJTkRFUiAxKQor CVNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdkaXN0cjJfYmFzZV8yJywgdXNl X3JlbW90ZV9lc3RpbWF0ZSAndHJ1ZScpOworQ1JFQVRFIFRBQkxFIGRpc3RyMl9iYXNlXzMgKGMg aW50LCBkIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3BhcnRfMyBQQVJUSVRJ T04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoIE1PRFVMVVMgNCwgUkVNQUlOREVSIDIpCisJ U0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TICh0YWJsZV9uYW1lICdkaXN0cjJfYmFzZV8zJywgdXNl X3JlbW90ZV9lc3RpbWF0ZSAndHJ1ZScpOworQ1JFQVRFIFRBQkxFIGRpc3RyMl9iYXNlXzQgKGMg aW50LCBkIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3BhcnRfNCBQQVJUSVRJ T04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoIE1PRFVMVVMgNCwgUkVNQUlOREVSIDMpCisJ U0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Rpc3RyMl9iYXNlXzQnLCB1c2Vf cmVtb3RlX2VzdGltYXRlICd0cnVlJyk7CisKK0lOU0VSVCBJTlRPIGRpc3RyMSBTRUxFQ1QgZywg ZyoyIGZyb20gIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitJTlNFUlQgSU5UTyBkaXN0cjIg U0VMRUNUIGcsICd0ZXh0J3x8IGcgZnJvbSAgZ2VuZXJhdGVfc2VyaWVzKDEsNTAwKSBnOworCitB TkFMWVpFIGRpc3RyMTsKK0FOQUxZWkUgZGlzdHIxX3BhcnRfMTsKK0FOQUxZWkUgZGlzdHIxX2Jh c2VfMjsKK0FOQUxZWkUgZGlzdHIxX2Jhc2VfMzsKK0FOQUxZWkUgZGlzdHIxX2Jhc2VfNDsKK0FO QUxZWkUgZGlzdHIyOworQU5BTFlaRSBkaXN0cjJfYmFzZV8yOworQU5BTFlaRSBkaXN0cjJfYmFz ZV8zOworQU5BTFlaRSBkaXN0cjJfYmFzZV80OworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBkLCB1bm5lc3QoYXJyYXlbMiwzLDQsNV0pIG4gV0hF UkUgZC5hID0gbjsKKworU0VMRUNUICogRlJPTSBkaXN0cjEgZCwgdW5uZXN0KGFycmF5WzIsMyw0 LDVdKSBuIFdIRVJFIGQuYSA9IG4KK09SREVSIEJZIGQuYTsKKworRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSB1bm5lc3QoYXJyYXlbMiwzLDQsNV0pIG4sIGRpc3Ry MSBkIFdIRVJFIGQuYSA9IG47CisKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFycmF5WzIsMyw0LDVd KSBuLCBkaXN0cjEgZCBXSEVSRSBkLmEgPSBuCitPUkRFUiBCWSBkLmE7CisKK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlzdHIxIGQxLCBkaXN0cjIgZDIsIHVu bmVzdChhcnJheVszLDRdKSBuCitXSEVSRSBkMS5hID0gbiBBTkQgZDIuYyA9IGQxLmE7CisKK1NF TEVDVCAqIEZST00gZGlzdHIxIGQxLCBkaXN0cjIgZDIsIHVubmVzdChhcnJheVszLDRdKSBuCitX SEVSRSBkMS5hID0gbiBBTkQgZDIuYyA9IGQxLmEKK09SREVSIEJZIGQxLmE7CisKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIGZyb20gZGlzdHIxIGQxLCBkaXN0cjIgZDIs IHVubmVzdChhcnJheVszLDRdKSBuCitXSEVSRSBkMS5hID0gbiBBTkQgZDIuYyA9IGQxLmEgYW5k IG4gPiAzOworCitTRUxFQ1QgKiBmcm9tIGRpc3RyMSBkMSwgZGlzdHIyIGQyLCB1bm5lc3QoYXJy YXlbMyw0XSkgbgorV0hFUkUgZDEuYSA9IG4gQU5EIGQyLmMgPSBkMS5hIGFuZCBuID4gMworT1JE RVIgQlkgZDEuYTsKKworLS0gRGlyZWN0IHVwZGF0ZSB3aXRoIHJldHVybmluZworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorVVBEQVRFIGRpc3RyMSBkMSBTRVQgYj10LmwgRlJPTSBVTk5F U1QoYXJyYXlbMTAsMjBdLCBhcnJheVtib3ggJygoMiwzKSwoLTIsLTQpKScsIGJveCAnKCgxLDIp LCgtMiwtMykpJ10pIEFTIHQgKGwsIGJ4KSBXSEVSRSBkMS5hIGJldHdlZW4gbCBhbmQgYXJlYSh0 LmJ4KQorUkVUVVJOSU5HIGEsYjsKKworVVBEQVRFIGRpc3RyMSBkMSBTRVQgYj10LmwgRlJPTSBV Tk5FU1QoYXJyYXlbMTAsMjBdLCBhcnJheVtib3ggJygoMiwzKSwoLTIsLTQpKScsIGJveCAnKCgx LDIpLCgtMiwtMykpJ10pIEFTIHQgKGwsIGJ4KSBXSEVSRSBkMS5hIGJldHdlZW4gbCBhbmQgYXJl YSh0LmJ4KQorUkVUVVJOSU5HIGEsYjsKKworLS0gRGlyZWN0IHVwZGF0ZSB3aXRoIHJldHVybmlu ZyB0YWJsZW9pZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorVVBEQVRFIGRpc3RyMSBk MSBTRVQgYj10LmwgRlJPTSBVTk5FU1QoYXJyYXlbMTAsMjBdLCBhcnJheVtib3ggJygoMiwzKSwo LTIsLTQpKScsIGJveCAnKCgxLDIpLCgtMiwtMykpJ10pIEFTIHQgKGwsIGJ4KSBXSEVSRSBkMS5h IGJldHdlZW4gbCBhbmQgYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYix0YWJsZW9pZDsKKworVVBE QVRFIGRpc3RyMSBkMSBTRVQgYj10LmwgRlJPTSBVTk5FU1QoYXJyYXlbMTAsMjBdLCBhcnJheVti b3ggJygoMiwzKSwoLTIsLTQpKScsIGJveCAnKCgxLDIpLCgtMiwtMykpJ10pIEFTIHQgKGwsIGJ4 KSBXSEVSRSBkMS5hIGJldHdlZW4gbCBhbmQgYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYix0YWJs ZW9pZDsKKworLS0gSW5kaXJlY3QgdXBkYXRlIHdpdGggcmV0dXJuaW5nCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitVUERBVEUgZGlzdHIxIGQxIFNFVCBiPUNBU0UgV0hFTiByYW5kb20o KT49MCBUSEVOIHQubCBFTFNFIDAgRU5EIEZST00gVU5ORVNUKGFycmF5WzEwLDIwXSwgYXJyYXlb Ym94ICcoKDIsMyksKC0yLC00KSknLCBib3ggJygoMSwyKSwoLTIsLTMpKSddKSBBUyB0IChsLCBi eCkgV0hFUkUgZDEuYSBiZXR3ZWVuIGwgYW5kIGFyZWEodC5ieCkKK1JFVFVSTklORyBhLGI7CisK K1VQREFURSBkaXN0cjEgZDEgU0VUIGI9Q0FTRSBXSEVOIHJhbmRvbSgpPj0wIFRIRU4gdC5sIEVM U0UgMCBFTkQgRlJPTSBVTk5FU1QoYXJyYXlbMTAsMjBdLCBhcnJheVtib3ggJygoMiwzKSwoLTIs LTQpKScsIGJveCAnKCgxLDIpLCgtMiwtMykpJ10pIEFTIHQgKGwsIGJ4KSBXSEVSRSBkMS5hIGJl dHdlZW4gbCBhbmQgYXJlYSh0LmJ4KQorUkVUVVJOSU5HIGEsYjsKKworRFJPUCBUQUJMRSBkaXN0 cjEsIGRpc3RyMiwgZGlzdHIxX2Jhc2VfMiwgZGlzdHIyX2Jhc2VfMiwgZGlzdHIxX2Jhc2VfMywg ZGlzdHIyX2Jhc2VfMywgZGlzdHIxX2Jhc2VfNCwgZGlzdHIyX2Jhc2VfNDsKKworLS0gVGVzdCBw dXNoZG93biBvZiBzZXZlcmFsIGZ1bmN0aW9uIHNjYW5zCisKK0NSRUFURSBUQUJMRSBkaXN0cjEo YSBpbnQsIGIgaW50KSBQQVJUSVRJT04gQlkgSEFTSChhKTsKK0NSRUFURSBUQUJMRSBkaXN0cjFf cGFydF8xIFBBUlRJVElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIICggTU9EVUxVUyAyLCBS RU1BSU5ERVIgMCk7CitDUkVBVEUgVEFCTEUgZGlzdHIxX2Jhc2VfMiAoYSBpbnQsIGIgaW50KTsK K0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMV9wYXJ0XzIgUEFSVElUSU9OIE9GIGRpc3RyMSBG T1IgVkFMVUVTIFdJVEggKCBNT0RVTFVTIDIsIFJFTUFJTkRFUiAxKQorCVNFUlZFUiBsb29wYmFj ayBPUFRJT05TICh0YWJsZV9uYW1lICdkaXN0cjFfYmFzZV8yJywgdXNlX3JlbW90ZV9lc3RpbWF0 ZSAndHJ1ZScpOworCitDUkVBVEUgVEFCTEUgZGlzdHIyKGMgaW50LCBkIHRleHQpIFBBUlRJVElP TiBCWSBIQVNIKGMpOworQ1JFQVRFIFRBQkxFIGRpc3RyMl9wYXJ0XzEgUEFSVElUSU9OIE9GIGRp c3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApOworQ1JFQVRFIFRB QkxFIGRpc3RyMl9iYXNlXzIgKGMgaW50LCBkIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUg ZGlzdHIyX3BhcnRfMiBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoIE1PRFVM VVMgMiwgUkVNQUlOREVSIDEpCisJU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUg J2Rpc3RyMl9iYXNlXzInLCB1c2VfcmVtb3RlX2VzdGltYXRlICd0cnVlJyk7CisKK0lOU0VSVCBJ TlRPIGRpc3RyMSBTRUxFQ1QgZywgZyoyIGZyb20gIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7 CitJTlNFUlQgSU5UTyBkaXN0cjIgU0VMRUNUIGcsICd0ZXh0J3x8IGcgZnJvbSAgZ2VuZXJhdGVf c2VyaWVzKDEsNTAwKSBnOworCitBTkFMWVpFOworCistLSBNYWtlIGxvY2FsIGZ1bmN0aW9uIHNj YW4gbm90IHNvIGF0dHJhY3RpdmUKK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChBREQg ZmR3X3R1cGxlX2Nvc3QgJzEwMDAnKTsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUICogZnJvbSBkaXN0cjEgZDEsIGRpc3RyMSBkMiwgdW5uZXN0KGFycmF5WzMsNF0pIG4s IHVubmVzdChhcnJheVszLDRdKSBnCitXSEVSRSBkMS5hID0gbiBBTkQgZDIuYSA9IGQxLmEgYW5k IGcgPSBuOworCitTRUxFQ1QgKiBmcm9tIGRpc3RyMSBkMSwgZGlzdHIyIGQyLCB1bm5lc3QoYXJy YXlbMyw0XSkgbiwgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIGcKK1dIRVJFIGQxLmEgPSBuIEFO RCBkMi5jID0gZDEuYSBhbmQgZyA9IGQxLmEKK09SREVSIEJZIGQxLmE7CisKK0FMVEVSIFNFUlZF UiBsb29wYmFjayBPUFRJT05TIChEUk9QIGZkd190dXBsZV9jb3N0KTsKKworRFJPUCBUQUJMRSBk aXN0cjEsIGRpc3RyMiwgZGlzdHIxX2Jhc2VfMiwgZGlzdHIyX2Jhc2VfMjsKKworLS0gVGVzdCBp bmhlcml0YW5jZSBjaGFpbiBhbmQgZnVuY3Rpb24gc2NhbiBwdXNoZG93bgorCitDUkVBVEUgVEFC TEUgZGlzdHIxKGEgaW50LCBiIGludCk7CitDUkVBVEUgVEFCTEUgZGlzdHIxX2xvYyAoYSBpbnQs IGIgaW50KSBJTkhFUklUUyAoZGlzdHIxKTsKK0NSRUFURSBUQUJMRSBkaXN0cjFfYmFzZSAoYSBp bnQsIGIgaW50LCBjIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3JlbW90ZSAo YSBpbnQsIGIgaW50LCBjIHRleHQpIElOSEVSSVRTIChkaXN0cjEpCisJU0VSVkVSIGxvb3BiYWNr IE9QVElPTlMgKHRhYmxlX25hbWUgJ2Rpc3RyMV9iYXNlJywgdXNlX3JlbW90ZV9lc3RpbWF0ZSAn dHJ1ZScpOworCitDUkVBVEUgVEFCTEUgZGlzdHIyKGMgaW50LCBkIHRleHQpOworQ1JFQVRFIFRB QkxFIGRpc3RyMl9sb2MgKGMgaW50LCBkIHRleHQpIElOSEVSSVRTIChkaXN0cjIpOworQ1JFQVRF IFRBQkxFIGRpc3RyMl9iYXNlIChjIGludCwgZCB0ZXh0LCBlIGludCk7CitDUkVBVEUgRk9SRUlH TiBUQUJMRSBkaXN0cjJfcmVtb3RlIChjIGludCwgZCB0ZXh0LCBlIGludCkgSU5IRVJJVFMgKGRp c3RyMikKKwlTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnZGlzdHIyX2Jhc2Un LCB1c2VfcmVtb3RlX2VzdGltYXRlICd0cnVlJyk7CisKK0lOU0VSVCBJTlRPIGRpc3RyMV9sb2Mg U0VMRUNUIGcsIGcqMiBmcm9tICBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitJTlNFUlQgSU5U TyBkaXN0cjFfYmFzZSBTRUxFQ1QgZywgZyoyLCAndGV4dCd8fCBnIGZyb20gIGdlbmVyYXRlX3Nl cmllcygyMDAsMjAwMDApIGc7CisKK0lOU0VSVCBJTlRPIGRpc3RyMl9sb2MgU0VMRUNUIGcsICd0 ZXh0J3x8IGcgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitJTlNFUlQgSU5UTyBkaXN0 cjJfYmFzZSBTRUxFQ1QgZywgJ3RleHQnfHwgZywgZyoyIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDIw MCwyMDAwMCkgZzsKKworQU5BTFlaRSBkaXN0cjEsIGRpc3RyMV9sb2MsIGRpc3RyMV9iYXNlOwor QU5BTFlaRSBkaXN0cjIsIGRpc3RyMl9sb2MsIGRpc3RyMl9iYXNlOworCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBkLCB1bm5lc3QoYXJyYXlbMiwz LDQsNV0pIG4gV0hFUkUgZC5hID0gbjsKKworU0VMRUNUICogRlJPTSBkaXN0cjEgZCwgdW5uZXN0 KGFycmF5WzIsMyw0LDVdKSBuIFdIRVJFIGQuYSA9IG4KK09SREVSIEJZIGQuYTsKKworRVhQTEFJ TiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSB1bm5lc3QoYXJyYXlbMiwzLDQs NV0pIG4sIGRpc3RyMSBkIFdIRVJFIGQuYSA9IG47CisKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFy cmF5WzIsMyw0LDVdKSBuLCBkaXN0cjEgZCBXSEVSRSBkLmEgPSBuCitPUkRFUiBCWSBkLmE7CisK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlzdHIxIGQxLCBk aXN0cjIgZDIsIHVubmVzdChhcnJheVszMDAsNDAwXSkgbgorV0hFUkUgZDEuYSA9IG4gQU5EIGQy LmMgPSBkMS5hOworCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBkMSwgZGlzdHIyIGQyLCB1bm5lc3Qo YXJyYXlbMzAwLDQwMF0pIG4KK1dIRVJFIGQxLmEgPSBuIEFORCBkMi5jID0gZDEuYQorT1JERVIg QlkgZDEuYTsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogZnJvbSBk aXN0cjEgZDEsIGRpc3RyMiBkMiwgdW5uZXN0KGFycmF5WzMwMCw0MDBdKSBuCitXSEVSRSBkMS5h ID0gbiBBTkQgZDIuYyA9IGQxLmEgYW5kIG4gPiAzOworCitTRUxFQ1QgKiBmcm9tIGRpc3RyMSBk MSwgZGlzdHIyIGQyLCB1bm5lc3QoYXJyYXlbMzAwLDQwMF0pIG4KK1dIRVJFIGQxLmEgPSBuIEFO RCBkMi5jID0gZDEuYSBhbmQgbiA+IDMKK09SREVSIEJZIGQxLmE7CisKK0RST1AgRk9SRUlHTiBU QUJMRSBkaXN0cjFfcmVtb3RlLCBkaXN0cjJfcmVtb3RlOworRFJPUCBUQUJMRSBkaXN0cjEsIGRp c3RyMV9sb2MsIGRpc3RyMV9iYXNlLCBkaXN0cjIsIGRpc3RyMl9sb2MsIGRpc3RyMl9iYXNlOwor CistLSBUZXN0IFVOSU9OIGFuZCBmdW5jdGlvbiBzY2FuIHB1c2hkb3duCisKK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyhTRUxFQ1QgYSBGUk9NIHJlbW90ZV90 YmwKK1VOSU9OCitTRUxFQ1QgYyBGUk9NIHJlbW90ZV90YmwxKSB1CitKT0lOIHVubmVzdChhcnJh eVszLDRdKSBuCitPTiB1LmEgPSBuOworCitTRUxFQ1QgKiBGUk9NCisoU0VMRUNUIGEgRlJPTSBy ZW1vdGVfdGJsCitVTklPTgorU0VMRUNUIGMgRlJPTSByZW1vdGVfdGJsMSkgdQorSk9JTiB1bm5l c3QoYXJyYXlbMyw0XSkgbgorT04gdS5hID0gbgorT1JERVIgQlkgbjsKKworRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorKFNFTEVDVCBhIEZST00gcmVtb3RlX3Ri bAorVU5JT04gQUxMCitTRUxFQ1QgYyBGUk9NIHJlbW90ZV90YmwxKSB1CitKT0lOIHVubmVzdChh cnJheVszLDRdKSBuCitPTiB1LmEgPSBuOworCitTRUxFQ1QgKiBGUk9NCisoU0VMRUNUIGEgRlJP TSByZW1vdGVfdGJsCitVTklPTiBBTEwKK1NFTEVDVCBjIEZST00gcmVtb3RlX3RibDEpIHUKK0pP SU4gdW5uZXN0KGFycmF5WzMsNF0pIG4KK09OIHUuYSA9IG4KK09SREVSIEJZIG47CisKK1JFU0VU IGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW47CisKK0RST1AgRlVOQ1RJT04gZihJTlRFR0VSKTsK K0RST1AgVEFCTEUgYmFzZV90YmwsIGJhc2VfdGJsMTsKK0RST1AgRk9SRUlHTiBUQUJMRSByZW1v dGVfdGJsLCByZW1vdGVfdGJsMTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2pvaW5wYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmlu ZGV4IDMyNjE4ZWJiZDUxLi5jOGIxMmM5MzYwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvam9pbnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9q b2lucGF0aC5jCkBAIC0zMjksNiArMzI5LDE3IEBAIGFkZF9wYXRoc190b19qb2lucmVsKFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJIG91dGVycmVsLCBpbm5lcnJlbCwKIAkJCQkJCQkJ CQkJCSBqb2ludHlwZSwgJmV4dHJhKTsKIAorCS8qCisJICogSWYgcHVzaCBkb3duIG9mIGpvaW4g aXMgbm90IHBvc3NpYmxlIHdlIGNhbiB0cnkgdG8gam9pbiBmb3JlaWduCisJICogcmVsYXRpb24g d2l0aCBzaGlwcGFibGUgUlRFLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSBhIGNoYW5jZSB0byBwdXNo IGRvd24KKwkgKiB0aGlzIGpvaW4geWV0LgorCSAqLworCWVsc2UgaWYgKG91dGVycmVsLT5mZHdy b3V0aW5lICYmCisJCQkgb3V0ZXJyZWwtPmZkd3JvdXRpbmUtPlRyeVNoaXBwYWJsZUpvaW5QYXRo cykKKwkJb3V0ZXJyZWwtPmZkd3JvdXRpbmUtPlRyeVNoaXBwYWJsZUpvaW5QYXRocyhyb290LCBq b2lucmVsLAorCQkJCQkJCQkJCQkJCW91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkJCQkJCQlq b2ludHlwZSwgJmV4dHJhKTsKKwogCS8qCiAJICogNi4gRmluYWxseSwgZ2l2ZSBleHRlbnNpb25z IGEgY2hhbmNlIHRvIG1hbmlwdWxhdGUgdGhlIHBhdGggbGlzdC4KIAkgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3NldHJlZnMuYwppbmRleCAwMjUyOWRhNTYyYi4uMTcyMTIyZWQ0ZDkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTUwMCw3ICs1MDAsNiBAQCBhZGRfcnRl X3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFJhbmdlVGJsRW50cnkgKnJ0ZSkK IAluZXdydGUtPmpvaW5sZWZ0Y29scyA9IE5JTDsKIAluZXdydGUtPmpvaW5yaWdodGNvbHMgPSBO SUw7CiAJbmV3cnRlLT5qb2luX3VzaW5nX2FsaWFzID0gTlVMTDsKLQluZXdydGUtPmZ1bmN0aW9u cyA9IE5JTDsKIAluZXdydGUtPnRhYmxlZnVuYyA9IE5VTEw7CiAJbmV3cnRlLT52YWx1ZXNfbGlz dHMgPSBOSUw7CiAJbmV3cnRlLT5jb2x0eXBlcyA9IE5JTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3JlbG5vZGUuYwppbmRleCBkZGYwZjVhODc2NS4uOTY3NWFhNmIzYWIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTIyLDEyICsyMiwxNCBAQAogI2luY2x1ZGUgIm9wdGlt aXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvaW5oZXJpdC5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNp bmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMu aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcGxhbmNhdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8uaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAj aW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9mb3JlaWduL2Zkd2FwaS5oIGIvc3JjL2luY2x1ZGUv Zm9yZWlnbi9mZHdhcGkuaAppbmRleCBhODAxY2QzMDU3Ni4uNTg1NTUwOTRkYTMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvZm9yZWln bi9mZHdhcGkuaApAQCAtMjIxLDYgKzIyMSw3IEBAIHR5cGVkZWYgc3RydWN0IEZkd1JvdXRpbmUK IAogCS8qIEZ1bmN0aW9ucyBmb3IgcmVtb3RlLWpvaW4gcGxhbm5pbmcgKi8KIAlHZXRGb3JlaWdu Sm9pblBhdGhzX2Z1bmN0aW9uIEdldEZvcmVpZ25Kb2luUGF0aHM7CisJR2V0Rm9yZWlnbkpvaW5Q YXRoc19mdW5jdGlvbiBUcnlTaGlwcGFibGVKb2luUGF0aHM7CiAKIAkvKiBGdW5jdGlvbnMgZm9y IHJlbW90ZSB1cHBlci1yZWxhdGlvbiAocG9zdCBzY2FuL2pvaW4pIHBsYW5uaW5nICovCiAJR2V0 Rm9yZWlnblVwcGVyUGF0aHNfZnVuY3Rpb24gR2V0Rm9yZWlnblVwcGVyUGF0aHM7Ci0tIAoyLjI1 LjEKCg== --=_a9c5d35ae58b66328de23943afe2a165--