From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80F9FC2D0C6 for ; Fri, 27 Dec 2019 16:33:34 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3BE2A208C4 for ; Fri, 27 Dec 2019 16:33:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="Nn+K6izt" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3BE2A208C4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iksXx-0001kR-Df; Fri, 27 Dec 2019 16:33:05 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iksXw-0001iu-3I for xen-devel@lists.xenproject.org; Fri, 27 Dec 2019 16:33:04 +0000 X-Inumbo-ID: 7dcd4905-28c6-11ea-9c5f-12813bfff9fa Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 7dcd4905-28c6-11ea-9c5f-12813bfff9fa; Fri, 27 Dec 2019 16:32:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1577464357; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AlJkJOYufL0unZZw2JEzlQJh/tZ1xxTaaDbuSok4rck=; b=Nn+K6iztq/rsfKYsIb/G5bWibAaGvDC7c6ixMSOBbLgp5DD6D4pObae6 3+Fma0TFTdv99j08zDN41QVXudQ2D1PIGo1gc3tStUtYSkLDR14YpmD4G YlOzlfa7b8NQLD48wmYicMgDIonqvtodCcbwCrFPPgrpbLZ78PVGCVXye Q=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=george.dunlap@citrix.com; spf=Pass smtp.mailfrom=George.Dunlap@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of george.dunlap@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="george.dunlap@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of George.Dunlap@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="George.Dunlap@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: 0+aWrp2HBsM25sx16Bi5QkwYVmsQYvZ+I0rqnEKSH5HayqLm3RYMnT14Ud1m3qQO7XGHE+LJ2p ykfUIfmYM4hFfOa+Ue/LK1lSd/zlw7M7hubA1eGzsfFrnfPcR1ko+hfoJ2hxbq6g0F68IURZgS OtBAZcv8Rb1SDU0BULB8ifSsXa1pN1dNOQpIQ0xyMmEaCMJm4OP8k/lgs39X1u6DNfG8zCBpaA DdSTTcXkdyfwgsIj9LkKLGWTfXQkJlcPkVlF+Utsqsz7+pPJFspqxBB52uepq5HYpWc/z4SutP HC8= X-SBRS: 2.7 X-MesageID: 10626146 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.69,363,1571716800"; d="scan'208";a="10626146" From: George Dunlap To: Date: Fri, 27 Dec 2019 16:32:20 +0000 Message-ID: <20191227163224.4113837-5-george.dunlap@citrix.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191227163224.4113837-1-george.dunlap@citrix.com> References: <20191227163224.4113837-1-george.dunlap@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 5/9] go/xenlight: More informative error messages X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Nick Rosbrook , George Dunlap Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" SWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgZGVlcCBpbiBhIGNvbXBsaWNhdGVkIGRhdGEgc3Ry dWN0dXJlLCBpdCdzCm9mdGVuIGRpZmZpY3VsdCB0byB0ZWxsIHdoZXJlIHRoZSBlcnJvciBhY3R1 YWxseSBpcy4gIE1ha2UgdGhlIGVycm9yCm1lc3NhZ2UgZnJvbSB0aGUgZ2VuZXJhdGVkIHRvQygp IGFuZCBmcm9tQygpIHN0cnVjdHVyZXMgbW9yZQppbmZvcm1hdGl2ZSBieSB0YWdnaW5nIHdoaWNo IGZpZWxkIGJlaW5nIGNvbnZlcnRlZCBlbmNvdW50ZXJlZCB0aGUKZXJyb3IuICBUaGlzIHdpbGwg aGF2ZSB0aGUgZWZmZWN0IG9mIGdpdmluZyBhICJzdGFjayB0cmFjZSIgb2YgdGhlCmZhaWx1cmUg aW5zaWRlIGEgbmVzdGVkIGRhdGEgc3RydWN0dXJlLgoKU2lnbmVkLW9mZi1ieTogR2VvcmdlIER1 bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRyaXguY29tPgotLS0KQ0M6IE5pY2sgUm9zYnJvb2sgPHJv c2Jyb29rbkBhaW5mb3NlYy5jb20+Ci0tLQogdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L2dlbmdvdHlw ZXMucHkgIHwgIDEwICstCiB0b29scy9nb2xhbmcveGVubGlnaHQvaGVscGVycy5nZW4uZ28gfCA0 NTYgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDIzMyBpbnNl cnRpb25zKCspLCAyMzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hl bmxpZ2h0L2dlbmdvdHlwZXMucHkgYi90b29scy9nb2xhbmcveGVubGlnaHQvZ2VuZ290eXBlcy5w eQppbmRleCBlNGVkNGQ1MGY1Li40OGUzZDg2ZjcwIDEwMDY0NAotLS0gYS90b29scy9nb2xhbmcv eGVubGlnaHQvZ2VuZ290eXBlcy5weQorKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvZ2VuZ290 eXBlcy5weQpAQCAtMzE0LDcgKzMxNCw3IEBAIGRlZiB4ZW5saWdodF9nb2xhbmdfY29udmVydF9m cm9tX0ModHkgPSBOb25lLCBvdXRlcl9uYW1lID0gTm9uZSwgY3Zhcm5hbWUgPSBOb25lCiAgICAg ICAgICMgSWYgdGhlIHR5cGUgaXMgbm90IGNhc3RhYmxlLCB3ZSBuZWVkIHRvIGNhbGwgaXRzIGZy b21DCiAgICAgICAgICMgZnVuY3Rpb24uCiAgICAgICAgIHMgKz0gJ2lmIGVyciA6PSB4Lnt9LmZy b21DKCZ7fS57fSk7Jy5mb3JtYXQoZ29uYW1lLGN2YXJuYW1lLGNuYW1lKQotICAgICAgICBzICs9 ICdlcnIgIT0gbmlsIHtcbiByZXR1cm4gZXJyIFxufVxuJworICAgICAgICBzICs9ICdlcnIgIT0g bmlsIHt7XG5yZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCB7fTogJXYiLCBlcnIp IFxufX1cbicuZm9ybWF0KGdvbmFtZSkKIAogICAgIGVsaWYgZ290eXBlbmFtZSA9PSAnc3RyaW5n JzoKICAgICAgICAgIyBVc2UgdGhlIGNnbyBoZWxwZXIgZm9yIGNvbnZlcnRpbmcgQyBzdHJpbmdz LgpAQCAtMzg5LDcgKzM4OSw3IEBAIGRlZiB4ZW5saWdodF9nb2xhbmdfdW5pb25fZnJvbV9DKHR5 ID0gTm9uZSwgdW5pb25fbmFtZSA9ICcnLCBzdHJ1Y3RfbmFtZSA9ICcnKToKIAogICAgICAgICBz ICs9ICd2YXIge30ge31cbicuZm9ybWF0KGdvbmFtZSwgZ290eXBlKQogICAgICAgICBzICs9ICdp ZiBlcnIgOj0ge30uZnJvbUMoeGMpOycuZm9ybWF0KGdvbmFtZSkKLSAgICAgICAgcyArPSAnZXJy ICE9IG5pbCB7XG4gcmV0dXJuIGVyciBcbn1cbicKKyAgICAgICAgcyArPSAnZXJyICE9IG5pbCB7 e1xuIHJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIHt9OiAldiIsIGVycikgXG59 fVxuJy5mb3JtYXQoZ29uYW1lKQogCiAgICAgICAgIGZpZWxkX25hbWUgPSB4ZW5saWdodF9nb2xh bmdfZm10X25hbWUoJ3t9X3VuaW9uJy5mb3JtYXQoa2V5bmFtZSkpCiAgICAgICAgIHMgKz0gJ3gu e30gPSB7fVxuJy5mb3JtYXQoZmllbGRfbmFtZSwgZ29uYW1lKQpAQCAtNDMyLDcgKzQzMiw3IEBA IGRlZiB4ZW5saWdodF9nb2xhbmdfYXJyYXlfZnJvbV9DKHR5ID0gTm9uZSk6CiAgICAgICAgIHMg Kz0gJ3gue31baV0gPSB7fSh2KVxuJy5mb3JtYXQoZ29uYW1lLCBnb3R5cGVuYW1lKQogICAgIGVs c2U6CiAgICAgICAgIHMgKz0gJ2lmIGVyciA6PSB4Lnt9W2ldLmZyb21DKCZ2KTsgZXJyICE9IG5p bCB7e1xuJy5mb3JtYXQoZ29uYW1lKQotICAgICAgICBzICs9ICdyZXR1cm4gZXJyIH1cbicKKyAg ICAgICAgcyArPSAncmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQge306ICV2Iiwg ZXJyKSB9fVxuJy5mb3JtYXQoZ29uYW1lKQogCiAgICAgcyArPSAnfVxufVxuJwogCkBAIC00OTcs NyArNDk3LDcgQEAgZGVmIHhlbmxpZ2h0X2dvbGFuZ19kZWZpbmVfdG9fQyh0eSA9IE5vbmUsIHR5 cGVuYW1lID0gTm9uZSwgbmVzdGVkID0gRmFsc2UpOgogICAgICAgICAgICAgICAgIHMgKz0gJ3hj Lnt9LCBlcnIgPSB4Lnt9LnRvQygpXG4nLmZvcm1hdChjbmFtZSxnb25hbWUpCiAgICAgICAgICAg ICAgICAgcyArPSAnaWYgZXJyICE9IG5pbCB7XG4nCiAgICAgICAgICAgICAgICAgcyArPSAnQy57 fSgmeGMpXG4nLmZvcm1hdCh0eS5kaXNwb3NlX2ZuKQotICAgICAgICAgICAgICAgIHMgKz0gJ3Jl dHVybiB4YywgZXJyXG4nCisgICAgICAgICAgICAgICAgcyArPSAncmV0dXJuIHhjLCBmbXQuRXJy b3JmKCJDb252ZXJ0aW5nIGZpZWxkIHt9OiAldiIsIGVycilcbicuZm9ybWF0KGdvbmFtZSkKICAg ICAgICAgICAgICAgICBzICs9ICd9XG4nCiAKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGYudHlw ZSwgaWRsLlN0cnVjdCk6CkBAIC01NjcsNyArNTY3LDcgQEAgZGVmIHhlbmxpZ2h0X2dvbGFuZ191 bmlvbl90b19DKHR5ID0gTm9uZSwgdW5pb25fbmFtZSA9ICcnLAogICAgICAgICAgICAgICAgIHMg Kz0gJ3t9Lnt9LCBlcnIgPSB0bXAue30udG9DKClcbicuZm9ybWF0KGYubmFtZSx1Zi5uYW1lLGdv Zm5hbWUpCiAgICAgICAgICAgICAgICAgcyArPSAnaWYgZXJyICE9IG5pbCB7XG4nCiAgICAgICAg ICAgICAgICAgcyArPSAnQy57fSgmeGMpXG4nLmZvcm1hdChkaXNwb3NlX2ZuKQotICAgICAgICAg ICAgICAgIHMgKz0gJ3JldHVybiB4YyxlcnIgXG59XG4nCisgICAgICAgICAgICAgICAgcyArPSAn cmV0dXJuIHhjLGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQge306ICV2IiwgZXJyKSBcbn19 XG4nLmZvcm1hdChnb2ZuYW1lKQogCiAgICAgICAgICAgICBlbGlmIGdvdHlwZW5hbWUgPT0gJ3N0 cmluZyc6CiAgICAgICAgICAgICAgICAgcyArPSAnaWYgdG1wLnt9ICE9ICIiIHt7XG4nLmZvcm1h dChnb2ZuYW1lKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L2hlbHBlcnMuZ2Vu LmdvIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L2hlbHBlcnMuZ2VuLmdvCmluZGV4IDIyMzYyMjJj YzIuLmYxNjU5NjhmZDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2dvbGFuZy94ZW5saWdodC9oZWxwZXJz Lmdlbi5nbworKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvaGVscGVycy5nZW4uZ28KQEAgLTc0 LDEzICs3NCwxMyBAQCBmdW5jICh4ICpWZ2FJbnRlcmZhY2VJbmZvKSB0b0MoKSAoeGMgQy5saWJ4 bF92Z2FfaW50ZXJmYWNlX2luZm8sIGVyciBlcnJvcikgewogCiBmdW5jICh4ICpWbmNJbmZvKSBm cm9tQyh4YyAqQy5saWJ4bF92bmNfaW5mbykgZXJyb3IgewogCWlmIGVyciA6PSB4LkVuYWJsZS5m cm9tQygmeGMuZW5hYmxlKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZt dC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgRW5hYmxlOiAldiIsIGVycikKIAl9CiAJeC5MaXN0 ZW4gPSBDLkdvU3RyaW5nKHhjLmxpc3RlbikKIAl4LlBhc3N3ZCA9IEMuR29TdHJpbmcoeGMucGFz c3dkKQogCXguRGlzcGxheSA9IGludCh4Yy5kaXNwbGF5KQogCWlmIGVyciA6PSB4LkZpbmR1bnVz ZWQuZnJvbUMoJnhjLmZpbmR1bnVzZWQpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQly ZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBGaW5kdW51c2VkOiAldiIsIGVycikK IAl9CiAKIAlyZXR1cm4gbmlsCkBAIC05MSw3ICs5MSw3IEBAIGZ1bmMgKHggKlZuY0luZm8pIHRv QygpICh4YyBDLmxpYnhsX3ZuY19pbmZvLCBlcnIgZXJyb3IpIHsKIAl4Yy5lbmFibGUsIGVyciA9 IHguRW5hYmxlLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxfdm5jX2luZm9fZGlz cG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29u dmVydGluZyBmaWVsZCBFbmFibGU6ICV2IiwgZXJyKQogCX0KIAlpZiB4Lkxpc3RlbiAhPSAiIiB7 CiAJCXhjLmxpc3RlbiA9IEMuQ1N0cmluZyh4Lkxpc3RlbikKQEAgLTEwMywzMCArMTAzLDMwIEBA IGZ1bmMgKHggKlZuY0luZm8pIHRvQygpICh4YyBDLmxpYnhsX3ZuY19pbmZvLCBlcnIgZXJyb3Ip IHsKIAl4Yy5maW5kdW51c2VkLCBlcnIgPSB4LkZpbmR1bnVzZWQudG9DKCkKIAlpZiBlcnIgIT0g bmlsIHsKIAkJQy5saWJ4bF92bmNfaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIK KwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEZpbmR1bnVzZWQ6ICV2 IiwgZXJyKQogCX0KIAlyZXR1cm4geGMsIG5pbAogfQogCiBmdW5jICh4ICpTcGljZUluZm8pIGZy b21DKHhjICpDLmxpYnhsX3NwaWNlX2luZm8pIGVycm9yIHsKIAlpZiBlcnIgOj0geC5FbmFibGUu ZnJvbUMoJnhjLmVuYWJsZSk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBm bXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEVuYWJsZTogJXYiLCBlcnIpCiAJfQogCXguUG9y dCA9IGludCh4Yy5wb3J0KQogCXguVGxzUG9ydCA9IGludCh4Yy50bHNfcG9ydCkKIAl4Lkhvc3Qg PSBDLkdvU3RyaW5nKHhjLmhvc3QpCiAJaWYgZXJyIDo9IHguRGlzYWJsZVRpY2tldGluZy5mcm9t QygmeGMuZGlzYWJsZV90aWNrZXRpbmcpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQly ZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBEaXNhYmxlVGlja2V0aW5nOiAldiIs IGVycikKIAl9CiAJeC5QYXNzd2QgPSBDLkdvU3RyaW5nKHhjLnBhc3N3ZCkKIAlpZiBlcnIgOj0g eC5BZ2VudE1vdXNlLmZyb21DKCZ4Yy5hZ2VudF9tb3VzZSk7IGVyciAhPSBuaWwgewotCQlyZXR1 cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEFnZW50TW91c2U6 ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5WZGFnZW50LmZyb21DKCZ4Yy52ZGFnZW50KTsg ZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRp bmcgZmllbGQgVmRhZ2VudDogJXYiLCBlcnIpCiAJfQogCWlmIGVyciA6PSB4LkNsaXBib2FyZFNo YXJpbmcuZnJvbUMoJnhjLmNsaXBib2FyZF9zaGFyaW5nKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVy biBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQ2xpcGJvYXJkU2hh cmluZzogJXYiLCBlcnIpCiAJfQogCXguVXNicmVkaXJlY3Rpb24gPSBpbnQoeGMudXNicmVkaXJl Y3Rpb24pCiAJeC5JbWFnZUNvbXByZXNzaW9uID0gQy5Hb1N0cmluZyh4Yy5pbWFnZV9jb21wcmVz c2lvbikKQEAgLTE0MCw3ICsxNDAsNyBAQCBmdW5jICh4ICpTcGljZUluZm8pIHRvQygpICh4YyBD LmxpYnhsX3NwaWNlX2luZm8sIGVyciBlcnJvcikgewogCXhjLmVuYWJsZSwgZXJyID0geC5FbmFi bGUudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9zcGljZV9pbmZvX2Rpc3Bvc2Uo JnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRp bmcgZmllbGQgRW5hYmxlOiAldiIsIGVycikKIAl9CiAJeGMucG9ydCA9IEMuaW50KHguUG9ydCkK IAl4Yy50bHNfcG9ydCA9IEMuaW50KHguVGxzUG9ydCkKQEAgLTE1MCw3ICsxNTAsNyBAQCBmdW5j ICh4ICpTcGljZUluZm8pIHRvQygpICh4YyBDLmxpYnhsX3NwaWNlX2luZm8sIGVyciBlcnJvcikg ewogCXhjLmRpc2FibGVfdGlja2V0aW5nLCBlcnIgPSB4LkRpc2FibGVUaWNrZXRpbmcudG9DKCkK IAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9zcGljZV9pbmZvX2Rpc3Bvc2UoJnhjKQotCQly ZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQg RGlzYWJsZVRpY2tldGluZzogJXYiLCBlcnIpCiAJfQogCWlmIHguUGFzc3dkICE9ICIiIHsKIAkJ eGMucGFzc3dkID0gQy5DU3RyaW5nKHguUGFzc3dkKQpAQCAtMTU4LDE3ICsxNTgsMTcgQEAgZnVu YyAoeCAqU3BpY2VJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9zcGljZV9pbmZvLCBlcnIgZXJyb3Ip IHsKIAl4Yy5hZ2VudF9tb3VzZSwgZXJyID0geC5BZ2VudE1vdXNlLnRvQygpCiAJaWYgZXJyICE9 IG5pbCB7CiAJCUMubGlieGxfc3BpY2VfaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBl cnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEFnZW50TW91c2U6 ICV2IiwgZXJyKQogCX0KIAl4Yy52ZGFnZW50LCBlcnIgPSB4LlZkYWdlbnQudG9DKCkKIAlpZiBl cnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9zcGljZV9pbmZvX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4g eGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgVmRhZ2Vu dDogJXYiLCBlcnIpCiAJfQogCXhjLmNsaXBib2FyZF9zaGFyaW5nLCBlcnIgPSB4LkNsaXBib2Fy ZFNoYXJpbmcudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9zcGljZV9pbmZvX2Rp c3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNv bnZlcnRpbmcgZmllbGQgQ2xpcGJvYXJkU2hhcmluZzogJXYiLCBlcnIpCiAJfQogCXhjLnVzYnJl ZGlyZWN0aW9uID0gQy5pbnQoeC5Vc2JyZWRpcmVjdGlvbikKIAlpZiB4LkltYWdlQ29tcHJlc3Np b24gIT0gIiIgewpAQCAtMTgyLDEwICsxODIsMTAgQEAgZnVuYyAoeCAqU3BpY2VJbmZvKSB0b0Mo KSAoeGMgQy5saWJ4bF9zcGljZV9pbmZvLCBlcnIgZXJyb3IpIHsKIAogZnVuYyAoeCAqU2RsSW5m bykgZnJvbUMoeGMgKkMubGlieGxfc2RsX2luZm8pIGVycm9yIHsKIAlpZiBlcnIgOj0geC5FbmFi bGUuZnJvbUMoJnhjLmVuYWJsZSk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVy biBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEVuYWJsZTogJXYiLCBlcnIpCiAJfQogCWlm IGVyciA6PSB4Lk9wZW5nbC5mcm9tQygmeGMub3BlbmdsKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVy biBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgT3BlbmdsOiAldiIs IGVycikKIAl9CiAJeC5EaXNwbGF5ID0gQy5Hb1N0cmluZyh4Yy5kaXNwbGF5KQogCXguWGF1dGhv cml0eSA9IEMuR29TdHJpbmcoeGMueGF1dGhvcml0eSkKQEAgLTE5OCwxMiArMTk4LDEyIEBAIGZ1 bmMgKHggKlNkbEluZm8pIHRvQygpICh4YyBDLmxpYnhsX3NkbF9pbmZvLCBlcnIgZXJyb3IpIHsK IAl4Yy5lbmFibGUsIGVyciA9IHguRW5hYmxlLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMu bGlieGxfc2RsX2luZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4 YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBFbmFibGU6ICV2IiwgZXJyKQogCX0KIAl4 Yy5vcGVuZ2wsIGVyciA9IHguT3BlbmdsLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGli eGxfc2RsX2luZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4Yywg Zm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBPcGVuZ2w6ICV2IiwgZXJyKQogCX0KIAlpZiB4 LkRpc3BsYXkgIT0gIiIgewogCQl4Yy5kaXNwbGF5ID0gQy5DU3RyaW5nKHguRGlzcGxheSkKQEAg LTIxNiw3ICsyMTYsNyBAQCBmdW5jICh4ICpTZGxJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9zZGxf aW5mbywgZXJyIGVycm9yKSB7CiAKIGZ1bmMgKHggKkRvbWluZm8pIGZyb21DKHhjICpDLmxpYnhs X2RvbWluZm8pIGVycm9yIHsKIAlpZiBlcnIgOj0geC5VdWlkLmZyb21DKCZ4Yy51dWlkKTsgZXJy ICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcg ZmllbGQgVXVpZDogJXYiLCBlcnIpCiAJfQogCXguRG9taWQgPSBEb21pZCh4Yy5kb21pZCkKIAl4 LlNzaWRyZWYgPSB1aW50MzIoeGMuc3NpZHJlZikKQEAgLTI0Nyw3ICsyNDcsNyBAQCBmdW5jICh4 ICpEb21pbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9kb21pbmZvLCBlcnIgZXJyb3IpIHsKIAl4Yy51 dWlkLCBlcnIgPSB4LlV1aWQudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21p bmZvX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJv cmYoIkNvbnZlcnRpbmcgZmllbGQgVXVpZDogJXYiLCBlcnIpCiAJfQogCXhjLmRvbWlkID0gQy5s aWJ4bF9kb21pZCh4LkRvbWlkKQogCXhjLnNzaWRyZWYgPSBDLnVpbnQzMl90KHguU3NpZHJlZikK QEAgLTI4MCw3ICsyODAsNyBAQCBmdW5jICh4ICpDcHVwb29saW5mbykgZnJvbUMoeGMgKkMubGli eGxfY3B1cG9vbGluZm8pIGVycm9yIHsKIAl4LlNjaGVkID0gU2NoZWR1bGVyKHhjLnNjaGVkKQog CXguTkRvbSA9IHVpbnQzMih4Yy5uX2RvbSkKIAlpZiBlcnIgOj0geC5DcHVtYXAuZnJvbUMoJnhj LmNwdW1hcCk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3Jm KCJDb252ZXJ0aW5nIGZpZWxkIENwdW1hcDogJXYiLCBlcnIpCiAJfQogCiAJcmV0dXJuIG5pbApA QCAtMjk3LDcgKzI5Nyw3IEBAIGZ1bmMgKHggKkNwdXBvb2xpbmZvKSB0b0MoKSAoeGMgQy5saWJ4 bF9jcHVwb29saW5mbywgZXJyIGVycm9yKSB7CiAJeGMuY3B1bWFwLCBlcnIgPSB4LkNwdW1hcC50 b0MoKQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2NwdXBvb2xpbmZvX2Rpc3Bvc2UoJnhj KQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcg ZmllbGQgQ3B1bWFwOiAldiIsIGVycikKIAl9CiAJcmV0dXJuIHhjLCBuaWwKIH0KQEAgLTMxNiw3 ICszMTYsNyBAQCBmdW5jICh4ICpDaGFubmVsaW5mbykgZnJvbUMoeGMgKkMubGlieGxfY2hhbm5l bGluZm8pIGVycm9yIHsKIAljYXNlIENoYW5uZWxDb25uZWN0aW9uUHR5OgogCQl2YXIgY29ubmVj dGlvblB0eSBDaGFubmVsaW5mb0Nvbm5lY3Rpb25VbmlvblB0eQogCQlpZiBlcnIgOj0gY29ubmVj dGlvblB0eS5mcm9tQyh4Yyk7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCQkJcmV0dXJu IGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgY29ubmVjdGlvblB0eTogJXYiLCBlcnIpCiAJ CX0KIAkJeC5Db25uZWN0aW9uVW5pb24gPSBjb25uZWN0aW9uUHR5CiAJZGVmYXVsdDoKQEAgLTM3 Miw3ICszNzIsNyBAQCBmdW5jICh4ICpDaGFubmVsaW5mbykgdG9DKCkgKHhjIEMubGlieGxfY2hh bm5lbGluZm8sIGVyciBlcnJvcikgewogCiBmdW5jICh4ICpWbWluZm8pIGZyb21DKHhjICpDLmxp YnhsX3ZtaW5mbykgZXJyb3IgewogCWlmIGVyciA6PSB4LlV1aWQuZnJvbUMoJnhjLnV1aWQpOyBl cnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGlu ZyBmaWVsZCBVdWlkOiAldiIsIGVycikKIAl9CiAJeC5Eb21pZCA9IERvbWlkKHhjLmRvbWlkKQog CkBAIC0zODQsNyArMzg0LDcgQEAgZnVuYyAoeCAqVm1pbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF92 bWluZm8sIGVyciBlcnJvcikgewogCXhjLnV1aWQsIGVyciA9IHguVXVpZC50b0MoKQogCWlmIGVy ciAhPSBuaWwgewogCQlDLmxpYnhsX3ZtaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBl cnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFV1aWQ6ICV2Iiwg ZXJyKQogCX0KIAl4Yy5kb21pZCA9IEMubGlieGxfZG9taWQoeC5Eb21pZCkKIAlyZXR1cm4geGMs IG5pbApAQCAtNDQ3LDMwICs0NDcsMzAgQEAgZnVuYyAoeCAqVmVyc2lvbkluZm8pIHRvQygpICh4 YyBDLmxpYnhsX3ZlcnNpb25faW5mbywgZXJyIGVycm9yKSB7CiBmdW5jICh4ICpEb21haW5DcmVh dGVJbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fY3JlYXRlX2luZm8pIGVycm9yIHsKIAl4 LlR5cGUgPSBEb21haW5UeXBlKHhjLl90eXBlKQogCWlmIGVyciA6PSB4LkhhcC5mcm9tQygmeGMu aGFwKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNv bnZlcnRpbmcgZmllbGQgSGFwOiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9IHguT29zLmZyb21D KCZ4Yy5vb3MpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9y ZigiQ29udmVydGluZyBmaWVsZCBPb3M6ICV2IiwgZXJyKQogCX0KIAl4LlNzaWRyZWYgPSB1aW50 MzIoeGMuc3NpZHJlZikKIAl4LlNzaWRMYWJlbCA9IEMuR29TdHJpbmcoeGMuc3NpZF9sYWJlbCkK IAl4Lk5hbWUgPSBDLkdvU3RyaW5nKHhjLm5hbWUpCiAJaWYgZXJyIDo9IHguVXVpZC5mcm9tQygm eGMudXVpZCk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3Jm KCJDb252ZXJ0aW5nIGZpZWxkIFV1aWQ6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5Yc2Rh dGEuZnJvbUMoJnhjLnhzZGF0YSk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVy biBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFhzZGF0YTogJXYiLCBlcnIpCiAJfQogCWlm IGVyciA6PSB4LlBsYXRmb3JtZGF0YS5mcm9tQygmeGMucGxhdGZvcm1kYXRhKTsgZXJyICE9IG5p bCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQg UGxhdGZvcm1kYXRhOiAldiIsIGVycikKIAl9CiAJeC5Qb29saWQgPSB1aW50MzIoeGMucG9vbGlk KQogCXguUG9vbE5hbWUgPSBDLkdvU3RyaW5nKHhjLnBvb2xfbmFtZSkKIAlpZiBlcnIgOj0geC5S dW5Ib3RwbHVnU2NyaXB0cy5mcm9tQygmeGMucnVuX2hvdHBsdWdfc2NyaXB0cyk7IGVyciAhPSBu aWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxk IFJ1bkhvdHBsdWdTY3JpcHRzOiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9IHguRHJpdmVyRG9t YWluLmZyb21DKCZ4Yy5kcml2ZXJfZG9tYWluKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIK KwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgRHJpdmVyRG9tYWluOiAldiIs IGVycikKIAl9CiAJeC5QYXNzdGhyb3VnaCA9IFBhc3N0aHJvdWdoKHhjLnBhc3N0aHJvdWdoKQog CkBAIC00ODMsMTIgKzQ4MywxMiBAQCBmdW5jICh4ICpEb21haW5DcmVhdGVJbmZvKSB0b0MoKSAo eGMgQy5saWJ4bF9kb21haW5fY3JlYXRlX2luZm8sIGVyciBlcnJvcikgewogCXhjLmhhcCwgZXJy ID0geC5IYXAudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fY3JlYXRl X2luZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBIYXA6ICV2IiwgZXJyKQogCX0KIAl4Yy5vb3MsIGVyciA9 IHguT29zLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxfZG9tYWluX2NyZWF0ZV9p bmZvX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJv cmYoIkNvbnZlcnRpbmcgZmllbGQgT29zOiAldiIsIGVycikKIAl9CiAJeGMuc3NpZHJlZiA9IEMu dWludDMyX3QoeC5Tc2lkcmVmKQogCWlmIHguU3NpZExhYmVsICE9ICIiIHsKQEAgLTUwMCwxNyAr NTAwLDE3IEBAIGZ1bmMgKHggKkRvbWFpbkNyZWF0ZUluZm8pIHRvQygpICh4YyBDLmxpYnhsX2Rv bWFpbl9jcmVhdGVfaW5mbywgZXJyIGVycm9yKSB7CiAJeGMudXVpZCwgZXJyID0geC5VdWlkLnRv QygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxfZG9tYWluX2NyZWF0ZV9pbmZvX2Rpc3Bv c2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZl cnRpbmcgZmllbGQgVXVpZDogJXYiLCBlcnIpCiAJfQogCXhjLnhzZGF0YSwgZXJyID0geC5Yc2Rh dGEudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fY3JlYXRlX2luZm9f ZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigi Q29udmVydGluZyBmaWVsZCBYc2RhdGE6ICV2IiwgZXJyKQogCX0KIAl4Yy5wbGF0Zm9ybWRhdGEs IGVyciA9IHguUGxhdGZvcm1kYXRhLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxf ZG9tYWluX2NyZWF0ZV9pbmZvX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1 cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgUGxhdGZvcm1kYXRhOiAldiIsIGVy cikKIAl9CiAJeGMucG9vbGlkID0gQy51aW50MzJfdCh4LlBvb2xpZCkKIAlpZiB4LlBvb2xOYW1l ICE9ICIiIHsKQEAgLTUxOSwxMiArNTE5LDEyIEBAIGZ1bmMgKHggKkRvbWFpbkNyZWF0ZUluZm8p IHRvQygpICh4YyBDLmxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mbywgZXJyIGVycm9yKSB7CiAJeGMu cnVuX2hvdHBsdWdfc2NyaXB0cywgZXJyID0geC5SdW5Ib3RwbHVnU2NyaXB0cy50b0MoKQogCWlm IGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mb19kaXNwb3NlKCZ4YykK LQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZp ZWxkIFJ1bkhvdHBsdWdTY3JpcHRzOiAldiIsIGVycikKIAl9CiAJeGMuZHJpdmVyX2RvbWFpbiwg ZXJyID0geC5Ecml2ZXJEb21haW4udG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9k b21haW5fY3JlYXRlX2luZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVy biB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBEcml2ZXJEb21haW46ICV2IiwgZXJy KQogCX0KIAl4Yy5wYXNzdGhyb3VnaCA9IEMubGlieGxfcGFzc3Rocm91Z2goeC5QYXNzdGhyb3Vn aCkKIAlyZXR1cm4geGMsIG5pbApAQCAtNTM1LDcgKzUzNSw3IEBAIGZ1bmMgKHggKkRvbWFpblJl c3RvcmVQYXJhbXMpIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9yZXN0b3JlX3BhcmFtcykgZXJy b3IgewogCXguU3RyZWFtVmVyc2lvbiA9IHVpbnQzMih4Yy5zdHJlYW1fdmVyc2lvbikKIAl4LkNv bG9Qcm94eVNjcmlwdCA9IEMuR29TdHJpbmcoeGMuY29sb19wcm94eV9zY3JpcHQpCiAJaWYgZXJy IDo9IHguVXNlcnNwYWNlQ29sb1Byb3h5LmZyb21DKCZ4Yy51c2Vyc3BhY2VfY29sb19wcm94eSk7 IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0 aW5nIGZpZWxkIFVzZXJzcGFjZUNvbG9Qcm94eTogJXYiLCBlcnIpCiAJfQogCiAJcmV0dXJuIG5p bApAQCAtNTUxLDcgKzU1MSw3IEBAIGZ1bmMgKHggKkRvbWFpblJlc3RvcmVQYXJhbXMpIHRvQygp ICh4YyBDLmxpYnhsX2RvbWFpbl9yZXN0b3JlX3BhcmFtcywgZXJyIGVycm9yCiAJeGMudXNlcnNw YWNlX2NvbG9fcHJveHksIGVyciA9IHguVXNlcnNwYWNlQ29sb1Byb3h5LnRvQygpCiAJaWYgZXJy ICE9IG5pbCB7CiAJCUMubGlieGxfZG9tYWluX3Jlc3RvcmVfcGFyYW1zX2Rpc3Bvc2UoJnhjKQot CQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmll bGQgVXNlcnNwYWNlQ29sb1Byb3h5OiAldiIsIGVycikKIAl9CiAJcmV0dXJuIHhjLCBuaWwKIH0K QEAgLTU4Niw3ICs1ODYsNyBAQCBmdW5jICh4ICpWY3B1U2NoZWRQYXJhbXMpIGZyb21DKHhjICpD LmxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zKSBlcnJvciB7CiAJCXguVmNwdXMgPSBtYWtlKFtdU2No ZWRQYXJhbXMsIG51bVZjcHVzKQogCQlmb3IgaSwgdiA6PSByYW5nZSBjVmNwdXMgewogCQkJaWYg ZXJyIDo9IHguVmNwdXNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCQlyZXR1cm4gZXJy CisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgVmNwdXM6ICV2IiwgZXJy KQogCQkJfQogCQl9CiAJfQpAQCAtNjUxLDcgKzY1MSw3IEBAIGZ1bmMgKHggKlZub2RlSW5mbykg ZnJvbUMoeGMgKkMubGlieGxfdm5vZGVfaW5mbykgZXJyb3IgewogCX0KIAl4LlBub2RlID0gdWlu dDMyKHhjLnBub2RlKQogCWlmIGVyciA6PSB4LlZjcHVzLmZyb21DKCZ4Yy52Y3B1cyk7IGVyciAh PSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZp ZWxkIFZjcHVzOiAldiIsIGVycikKIAl9CiAKIAlyZXR1cm4gbmlsCkBAIC02NzIsNyArNjcyLDcg QEAgZnVuYyAoeCAqVm5vZGVJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF92bm9kZV9pbmZvLCBlcnIg ZXJyb3IpIHsKIAl4Yy52Y3B1cywgZXJyID0geC5WY3B1cy50b0MoKQogCWlmIGVyciAhPSBuaWwg ewogCQlDLmxpYnhsX3Zub2RlX2luZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJ CXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBWY3B1czogJXYiLCBlcnIp CiAJfQogCXJldHVybiB4YywgbmlsCiB9CkBAIC02OTQsMTMgKzY5NCwxMyBAQCBmdW5jICh4ICpS ZG1SZXNlcnZlKSB0b0MoKSAoeGMgQy5saWJ4bF9yZG1fcmVzZXJ2ZSwgZXJyIGVycm9yKSB7CiBm dW5jICh4ICpEb21haW5CdWlsZEluZm8pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9idWlsZF9p bmZvKSBlcnJvciB7CiAJeC5NYXhWY3B1cyA9IGludCh4Yy5tYXhfdmNwdXMpCiAJaWYgZXJyIDo9 IHguQXZhaWxWY3B1cy5mcm9tQygmeGMuYXZhaWxfdmNwdXMpOyBlcnIgIT0gbmlsIHsKLQkJcmV0 dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBBdmFpbFZjcHVz OiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9IHguQ3B1bWFwLmZyb21DKCZ4Yy5jcHVtYXApOyBl cnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGlu ZyBmaWVsZCBDcHVtYXA6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5Ob2RlbWFwLmZyb21D KCZ4Yy5ub2RlbWFwKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5F cnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgTm9kZW1hcDogJXYiLCBlcnIpCiAJfQogCXguVmNwdUhh cmRBZmZpbml0eSA9IG5pbAogCWlmIG51bVZjcHVIYXJkQWZmaW5pdHkgOj0gaW50KHhjLm51bV92 Y3B1X2hhcmRfYWZmaW5pdHkpOyBudW1WY3B1SGFyZEFmZmluaXR5ID4gMCB7CkBAIC03MDgsNyAr NzA4LDcgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21h aW5fYnVpbGRfaW5mbykgZXJyb3IgewogCQl4LlZjcHVIYXJkQWZmaW5pdHkgPSBtYWtlKFtdQml0 bWFwLCBudW1WY3B1SGFyZEFmZmluaXR5KQogCQlmb3IgaSwgdiA6PSByYW5nZSBjVmNwdUhhcmRB ZmZpbml0eSB7CiAJCQlpZiBlcnIgOj0geC5WY3B1SGFyZEFmZmluaXR5W2ldLmZyb21DKCZ2KTsg ZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuIGVycgorCQkJCXJldHVybiBmbXQuRXJyb3JmKCJDb252 ZXJ0aW5nIGZpZWxkIFZjcHVIYXJkQWZmaW5pdHk6ICV2IiwgZXJyKQogCQkJfQogCQl9CiAJfQpA QCAtNzE4LDEyICs3MTgsMTIgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSBmcm9tQyh4YyAq Qy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbykgZXJyb3IgewogCQl4LlZjcHVTb2Z0QWZmaW5pdHkg PSBtYWtlKFtdQml0bWFwLCBudW1WY3B1U29mdEFmZmluaXR5KQogCQlmb3IgaSwgdiA6PSByYW5n ZSBjVmNwdVNvZnRBZmZpbml0eSB7CiAJCQlpZiBlcnIgOj0geC5WY3B1U29mdEFmZmluaXR5W2ld LmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuIGVycgorCQkJCXJldHVybiBmbXQu RXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFZjcHVTb2Z0QWZmaW5pdHk6ICV2IiwgZXJyKQogCQkJ fQogCQl9CiAJfQogCWlmIGVyciA6PSB4Lk51bWFQbGFjZW1lbnQuZnJvbUMoJnhjLm51bWFfcGxh Y2VtZW50KTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYo IkNvbnZlcnRpbmcgZmllbGQgTnVtYVBsYWNlbWVudDogJXYiLCBlcnIpCiAJfQogCXguVHNjTW9k ZSA9IFRzY01vZGUoeGMudHNjX21vZGUpCiAJeC5NYXhNZW1rYiA9IHVpbnQ2NCh4Yy5tYXhfbWVt a2IpCkBAIC03MzUsMTMgKzczNSwxMyBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIGZyb21D KHhjICpDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvKSBlcnJvciB7CiAJeC5FeGVjU3NpZHJlZiA9 IHVpbnQzMih4Yy5leGVjX3NzaWRyZWYpCiAJeC5FeGVjU3NpZExhYmVsID0gQy5Hb1N0cmluZyh4 Yy5leGVjX3NzaWRfbGFiZWwpCiAJaWYgZXJyIDo9IHguTG9jYWx0aW1lLmZyb21DKCZ4Yy5sb2Nh bHRpbWUpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigi Q29udmVydGluZyBmaWVsZCBMb2NhbHRpbWU6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5E aXNhYmxlTWlncmF0ZS5mcm9tQygmeGMuZGlzYWJsZV9taWdyYXRlKTsgZXJyICE9IG5pbCB7Ci0J CXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgRGlzYWJs ZU1pZ3JhdGU6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5DcHVpZC5mcm9tQygmeGMuY3B1 aWQpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29u dmVydGluZyBmaWVsZCBDcHVpZDogJXYiLCBlcnIpCiAJfQogCXguQmxrZGV2U3RhcnQgPSBDLkdv U3RyaW5nKHhjLmJsa2Rldl9zdGFydCkKIAl4LlZudW1hTm9kZXMgPSBuaWwKQEAgLTc1MCw3ICs3 NTAsNyBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFp bl9idWlsZF9pbmZvKSBlcnJvciB7CiAJCXguVm51bWFOb2RlcyA9IG1ha2UoW11Wbm9kZUluZm8s IG51bVZudW1hTm9kZXMpCiAJCWZvciBpLCB2IDo9IHJhbmdlIGNWbnVtYU5vZGVzIHsKIAkJCWlm IGVyciA6PSB4LlZudW1hTm9kZXNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCQlyZXR1 cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgVm51bWFOb2Rl czogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC03NTgsMjMgKzc1OCwyMyBAQCBmdW5jICh4 ICpEb21haW5CdWlsZEluZm8pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvKSBl cnJvciB7CiAJeC5NYXhNYXB0cmFja0ZyYW1lcyA9IHVpbnQzMih4Yy5tYXhfbWFwdHJhY2tfZnJh bWVzKQogCXguRGV2aWNlTW9kZWxWZXJzaW9uID0gRGV2aWNlTW9kZWxWZXJzaW9uKHhjLmRldmlj ZV9tb2RlbF92ZXJzaW9uKQogCWlmIGVyciA6PSB4LkRldmljZU1vZGVsU3R1YmRvbWFpbi5mcm9t QygmeGMuZGV2aWNlX21vZGVsX3N0dWJkb21haW4pOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVy cgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBEZXZpY2VNb2RlbFN0dWJk b21haW46ICV2IiwgZXJyKQogCX0KIAl4LkRldmljZU1vZGVsID0gQy5Hb1N0cmluZyh4Yy5kZXZp Y2VfbW9kZWwpCiAJeC5EZXZpY2VNb2RlbFNzaWRyZWYgPSB1aW50MzIoeGMuZGV2aWNlX21vZGVs X3NzaWRyZWYpCiAJeC5EZXZpY2VNb2RlbFNzaWRMYWJlbCA9IEMuR29TdHJpbmcoeGMuZGV2aWNl X21vZGVsX3NzaWRfbGFiZWwpCiAJeC5EZXZpY2VNb2RlbFVzZXIgPSBDLkdvU3RyaW5nKHhjLmRl dmljZV9tb2RlbF91c2VyKQogCWlmIGVyciA6PSB4LkV4dHJhLmZyb21DKCZ4Yy5leHRyYSk7IGVy ciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5n IGZpZWxkIEV4dHJhOiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9IHguRXh0cmFQdi5mcm9tQygm eGMuZXh0cmFfcHYpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBFeHRyYVB2OiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9 IHguRXh0cmFIdm0uZnJvbUMoJnhjLmV4dHJhX2h2bSk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4g ZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEV4dHJhSHZtOiAldiIs IGVycikKIAl9CiAJaWYgZXJyIDo9IHguU2NoZWRQYXJhbXMuZnJvbUMoJnhjLnNjaGVkX3BhcmFt cyk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252 ZXJ0aW5nIGZpZWxkIFNjaGVkUGFyYW1zOiAldiIsIGVycikKIAl9CiAJeC5Jb3BvcnRzID0gbmls CiAJaWYgbnVtSW9wb3J0cyA6PSBpbnQoeGMubnVtX2lvcG9ydHMpOyBudW1Jb3BvcnRzID4gMCB7 CkBAIC03ODIsNyArNzgyLDcgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSBmcm9tQyh4YyAq Qy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbykgZXJyb3IgewogCQl4LklvcG9ydHMgPSBtYWtlKFtd SW9wb3J0UmFuZ2UsIG51bUlvcG9ydHMpCiAJCWZvciBpLCB2IDo9IHJhbmdlIGNJb3BvcnRzIHsK IAkJCWlmIGVyciA6PSB4LklvcG9ydHNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCQly ZXR1cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgSW9wb3J0 czogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC04MDAsMTIgKzgwMCwxMiBAQCBmdW5jICh4 ICpEb21haW5CdWlsZEluZm8pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvKSBl cnJvciB7CiAJCXguSW9tZW0gPSBtYWtlKFtdSW9tZW1SYW5nZSwgbnVtSW9tZW0pCiAJCWZvciBp LCB2IDo9IHJhbmdlIGNJb21lbSB7CiAJCQlpZiBlcnIgOj0geC5Jb21lbVtpXS5mcm9tQygmdik7 IGVyciAhPSBuaWwgewotCQkJCXJldHVybiBlcnIKKwkJCQlyZXR1cm4gZm10LkVycm9yZigiQ29u dmVydGluZyBmaWVsZCBJb21lbTogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CiAJaWYgZXJyIDo9 IHguQ2xhaW1Nb2RlLmZyb21DKCZ4Yy5jbGFpbV9tb2RlKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVy biBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQ2xhaW1Nb2RlOiAl diIsIGVycikKIAl9CiAJeC5FdmVudENoYW5uZWxzID0gdWludDMyKHhjLmV2ZW50X2NoYW5uZWxz KQogCXguS2VybmVsID0gQy5Hb1N0cmluZyh4Yy5rZXJuZWwpCkBAIC04MTMsMjEgKzgxMywyMSBA QCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9idWls ZF9pbmZvKSBlcnJvciB7CiAJeC5SYW1kaXNrID0gQy5Hb1N0cmluZyh4Yy5yYW1kaXNrKQogCXgu RGV2aWNlVHJlZSA9IEMuR29TdHJpbmcoeGMuZGV2aWNlX3RyZWUpCiAJaWYgZXJyIDo9IHguQWNw aS5mcm9tQygmeGMuYWNwaSk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBm bXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEFjcGk6ICV2IiwgZXJyKQogCX0KIAl4LkJvb3Rs b2FkZXIgPSBDLkdvU3RyaW5nKHhjLmJvb3Rsb2FkZXIpCiAJaWYgZXJyIDo9IHguQm9vdGxvYWRl ckFyZ3MuZnJvbUMoJnhjLmJvb3Rsb2FkZXJfYXJncyk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4g ZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEJvb3Rsb2FkZXJBcmdz OiAldiIsIGVycikKIAl9CiAJeC5UaW1lck1vZGUgPSBUaW1lck1vZGUoeGMudGltZXJfbW9kZSkK IAlpZiBlcnIgOj0geC5OZXN0ZWRIdm0uZnJvbUMoJnhjLm5lc3RlZF9odm0pOyBlcnIgIT0gbmls IHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBO ZXN0ZWRIdm06ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5BcGljLmZyb21DKCZ4Yy5hcGlj KTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZl cnRpbmcgZmllbGQgQXBpYzogJXYiLCBlcnIpCiAJfQogCWlmIGVyciA6PSB4LkRtUmVzdHJpY3Qu ZnJvbUMoJnhjLmRtX3Jlc3RyaWN0KTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0 dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgRG1SZXN0cmljdDogJXYiLCBlcnIpCiAJ fQogCXguVGVlID0gVGVlVHlwZSh4Yy50ZWUpCiAJeC5UeXBlID0gRG9tYWluVHlwZSh4Yy5fdHlw ZSkKQEAgLTgzNSwxOSArODM1LDE5IEBAIGZ1bmMgKHggKkRvbWFpbkJ1aWxkSW5mbykgZnJvbUMo eGMgKkMubGlieGxfZG9tYWluX2J1aWxkX2luZm8pIGVycm9yIHsKIAljYXNlIERvbWFpblR5cGVI dm06CiAJCXZhciB0eXBlSHZtIERvbWFpbkJ1aWxkSW5mb1R5cGVVbmlvbkh2bQogCQlpZiBlcnIg Oj0gdHlwZUh2bS5mcm9tQyh4Yyk7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCQkJcmV0 dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgdHlwZUh2bTogJXYiLCBlcnIpCiAJCX0K IAkJeC5UeXBlVW5pb24gPSB0eXBlSHZtCiAJY2FzZSBEb21haW5UeXBlUHY6CiAJCXZhciB0eXBl UHYgRG9tYWluQnVpbGRJbmZvVHlwZVVuaW9uUHYKIAkJaWYgZXJyIDo9IHR5cGVQdi5mcm9tQyh4 Yyk7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNv bnZlcnRpbmcgZmllbGQgdHlwZVB2OiAldiIsIGVycikKIAkJfQogCQl4LlR5cGVVbmlvbiA9IHR5 cGVQdgogCWNhc2UgRG9tYWluVHlwZVB2aDoKIAkJdmFyIHR5cGVQdmggRG9tYWluQnVpbGRJbmZv VHlwZVVuaW9uUHZoCiAJCWlmIGVyciA6PSB0eXBlUHZoLmZyb21DKHhjKTsgZXJyICE9IG5pbCB7 Ci0JCQlyZXR1cm4gZXJyCisJCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCB0 eXBlUHZoOiAldiIsIGVycikKIAkJfQogCQl4LlR5cGVVbmlvbiA9IHR5cGVQdmgKIAlkZWZhdWx0 OgpAQCAtODY5LDEwMCArODY5LDEwMCBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm9UeXBlVW5p b25Idm0pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvKSBlcnJvcgogCXguRmly bXdhcmUgPSBDLkdvU3RyaW5nKHRtcC5maXJtd2FyZSkKIAl4LkJpb3MgPSBCaW9zVHlwZSh0bXAu YmlvcykKIAlpZiBlcnIgOj0geC5QYWUuZnJvbUMoJnRtcC5wYWUpOyBlcnIgIT0gbmlsIHsKLQkJ cmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBQYWU6ICV2 IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5BcGljLmZyb21DKCZ0bXAuYXBpYyk7IGVyciAhPSBu aWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxk IEFwaWM6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5BY3BpLmZyb21DKCZ0bXAuYWNwaSk7 IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0 aW5nIGZpZWxkIEFjcGk6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5BY3BpUzMuZnJvbUMo JnRtcC5hY3BpX3MzKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5F cnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQWNwaVMzOiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9 IHguQWNwaVM0LmZyb21DKCZ0bXAuYWNwaV9zNCk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJy CisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEFjcGlTNDogJXYiLCBlcnIp CiAJfQogCWlmIGVyciA6PSB4LkFjcGlMYXB0b3BTbGF0ZS5mcm9tQygmdG1wLmFjcGlfbGFwdG9w X3NsYXRlKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYo IkNvbnZlcnRpbmcgZmllbGQgQWNwaUxhcHRvcFNsYXRlOiAldiIsIGVycikKIAl9CiAJaWYgZXJy IDo9IHguTnguZnJvbUMoJnRtcC5ueCk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJl dHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIE54OiAldiIsIGVycikKIAl9CiAJaWYg ZXJyIDo9IHguVmlyaWRpYW4uZnJvbUMoJnRtcC52aXJpZGlhbik7IGVyciAhPSBuaWwgewotCQly ZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFZpcmlkaWFu OiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9IHguVmlyaWRpYW5FbmFibGUuZnJvbUMoJnRtcC52 aXJpZGlhbl9lbmFibGUpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10 LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBWaXJpZGlhbkVuYWJsZTogJXYiLCBlcnIpCiAJfQog CWlmIGVyciA6PSB4LlZpcmlkaWFuRGlzYWJsZS5mcm9tQygmdG1wLnZpcmlkaWFuX2Rpc2FibGUp OyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVy dGluZyBmaWVsZCBWaXJpZGlhbkRpc2FibGU6ICV2IiwgZXJyKQogCX0KIAl4LlRpbWVvZmZzZXQg PSBDLkdvU3RyaW5nKHRtcC50aW1lb2Zmc2V0KQogCWlmIGVyciA6PSB4LkhwZXQuZnJvbUMoJnRt cC5ocGV0KTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYo IkNvbnZlcnRpbmcgZmllbGQgSHBldDogJXYiLCBlcnIpCiAJfQogCWlmIGVyciA6PSB4LlZwdEFs aWduLmZyb21DKCZ0bXAudnB0X2FsaWduKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJ cmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgVnB0QWxpZ246ICV2IiwgZXJyKQog CX0KIAl4Lk1taW9Ib2xlTWVta2IgPSB1aW50NjQodG1wLm1taW9faG9sZV9tZW1rYikKIAl4LlRp bWVyTW9kZSA9IFRpbWVyTW9kZSh0bXAudGltZXJfbW9kZSkKIAlpZiBlcnIgOj0geC5OZXN0ZWRI dm0uZnJvbUMoJnRtcC5uZXN0ZWRfaHZtKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJ cmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgTmVzdGVkSHZtOiAldiIsIGVycikK IAl9CiAJaWYgZXJyIDo9IHguQWx0cDJNLmZyb21DKCZ0bXAuYWx0cDJtKTsgZXJyICE9IG5pbCB7 Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQWx0 cDJNOiAldiIsIGVycikKIAl9CiAJeC5TeXN0ZW1GaXJtd2FyZSA9IEMuR29TdHJpbmcodG1wLnN5 c3RlbV9maXJtd2FyZSkKIAl4LlNtYmlvc0Zpcm13YXJlID0gQy5Hb1N0cmluZyh0bXAuc21iaW9z X2Zpcm13YXJlKQogCXguQWNwaUZpcm13YXJlID0gQy5Hb1N0cmluZyh0bXAuYWNwaV9maXJtd2Fy ZSkKIAl4LkhkdHlwZSA9IEhkdHlwZSh0bXAuaGR0eXBlKQogCWlmIGVyciA6PSB4Lk5vZ3JhcGhp Yy5mcm9tQygmdG1wLm5vZ3JhcGhpYyk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJl dHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIE5vZ3JhcGhpYzogJXYiLCBlcnIpCiAJ fQogCWlmIGVyciA6PSB4LlZnYS5mcm9tQygmdG1wLnZnYSk7IGVyciAhPSBuaWwgewotCQlyZXR1 cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFZnYTogJXYiLCBl cnIpCiAJfQogCWlmIGVyciA6PSB4LlZuYy5mcm9tQygmdG1wLnZuYyk7IGVyciAhPSBuaWwgewot CQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFZuYzog JXYiLCBlcnIpCiAJfQogCXguS2V5bWFwID0gQy5Hb1N0cmluZyh0bXAua2V5bWFwKQogCWlmIGVy ciA6PSB4LlNkbC5mcm9tQygmdG1wLnNkbCk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJ CXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFNkbDogJXYiLCBlcnIpCiAJfQog CWlmIGVyciA6PSB4LlNwaWNlLmZyb21DKCZ0bXAuc3BpY2UpOyBlcnIgIT0gbmlsIHsKLQkJcmV0 dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBTcGljZTogJXYi LCBlcnIpCiAJfQogCWlmIGVyciA6PSB4LkdmeFBhc3N0aHJ1LmZyb21DKCZ0bXAuZ2Z4X3Bhc3N0 aHJ1KTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNv bnZlcnRpbmcgZmllbGQgR2Z4UGFzc3RocnU6ICV2IiwgZXJyKQogCX0KIAl4LkdmeFBhc3N0aHJ1 S2luZCA9IEdmeFBhc3N0aHJ1S2luZCh0bXAuZ2Z4X3Bhc3N0aHJ1X2tpbmQpCiAJeC5TZXJpYWwg PSBDLkdvU3RyaW5nKHRtcC5zZXJpYWwpCiAJeC5Cb290ID0gQy5Hb1N0cmluZyh0bXAuYm9vdCkK IAlpZiBlcnIgOj0geC5Vc2IuZnJvbUMoJnRtcC51c2IpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJu IGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBVc2I6ICV2IiwgZXJy KQogCX0KIAl4LlVzYnZlcnNpb24gPSBpbnQodG1wLnVzYnZlcnNpb24pCiAJeC5Vc2JkZXZpY2Ug PSBDLkdvU3RyaW5nKHRtcC51c2JkZXZpY2UpCiAJaWYgZXJyIDo9IHguVmtiRGV2aWNlLmZyb21D KCZ0bXAudmtiX2RldmljZSk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBm bXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFZrYkRldmljZTogJXYiLCBlcnIpCiAJfQogCXgu U291bmRodyA9IEMuR29TdHJpbmcodG1wLnNvdW5kaHcpCiAJaWYgZXJyIDo9IHguWGVuUGxhdGZv cm1QY2kuZnJvbUMoJnRtcC54ZW5fcGxhdGZvcm1fcGNpKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVy biBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgWGVuUGxhdGZvcm1Q Y2k6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5Vc2JkZXZpY2VMaXN0LmZyb21DKCZ0bXAu dXNiZGV2aWNlX2xpc3QpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10 LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBVc2JkZXZpY2VMaXN0OiAldiIsIGVycikKIAl9CiAJ eC5WZW5kb3JEZXZpY2UgPSBWZW5kb3JEZXZpY2UodG1wLnZlbmRvcl9kZXZpY2UpCiAJaWYgZXJy IDo9IHguTXNWbUdlbmlkLmZyb21DKCZ0bXAubXNfdm1fZ2VuaWQpOyBlcnIgIT0gbmlsIHsKLQkJ cmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBNc1ZtR2Vu aWQ6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5TZXJpYWxMaXN0LmZyb21DKCZ0bXAuc2Vy aWFsX2xpc3QpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9y ZigiQ29udmVydGluZyBmaWVsZCBTZXJpYWxMaXN0OiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9 IHguUmRtLmZyb21DKCZ0bXAucmRtKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0 dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgUmRtOiAldiIsIGVycikKIAl9CiAJeC5S ZG1NZW1Cb3VuZGFyeU1lbWtiID0gdWludDY0KHRtcC5yZG1fbWVtX2JvdW5kYXJ5X21lbWtiKQog CXguTWNhQ2FwcyA9IHVpbnQ2NCh0bXAubWNhX2NhcHMpCkBAIC05NzksMTMgKzk3OSwxMyBAQCBm dW5jICh4ICpEb21haW5CdWlsZEluZm9UeXBlVW5pb25QdikgZnJvbUMoeGMgKkMubGlieGxfZG9t YWluX2J1aWxkX2luZm8pIGVycm9yCiAJeC5TbGFja01lbWtiID0gdWludDY0KHRtcC5zbGFja19t ZW1rYikKIAl4LkJvb3Rsb2FkZXIgPSBDLkdvU3RyaW5nKHRtcC5ib290bG9hZGVyKQogCWlmIGVy ciA6PSB4LkJvb3Rsb2FkZXJBcmdzLmZyb21DKCZ0bXAuYm9vdGxvYWRlcl9hcmdzKTsgZXJyICE9 IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmll bGQgQm9vdGxvYWRlckFyZ3M6ICV2IiwgZXJyKQogCX0KIAl4LkNtZGxpbmUgPSBDLkdvU3RyaW5n KHRtcC5jbWRsaW5lKQogCXguUmFtZGlzayA9IEMuR29TdHJpbmcodG1wLnJhbWRpc2spCiAJeC5G ZWF0dXJlcyA9IEMuR29TdHJpbmcodG1wLmZlYXR1cmVzKQogCWlmIGVyciA6PSB4LkU4MjBIb3N0 LmZyb21DKCZ0bXAuZTgyMF9ob3N0KTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0 dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgRTgyMEhvc3Q6ICV2IiwgZXJyKQogCX0K IAlyZXR1cm4gbmlsCiB9CkBAIC05OTcsNyArOTk3LDcgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJ bmZvVHlwZVVuaW9uUHZoKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbykgZXJy b3IKIAogCXRtcCA6PSAoKkMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fdHlwZV91bmlvbl9wdmgp KHVuc2FmZS5Qb2ludGVyKCZ4Yy51WzBdKSkKIAlpZiBlcnIgOj0geC5QdnNoaW0uZnJvbUMoJnRt cC5wdnNoaW0pOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9y ZigiQ29udmVydGluZyBmaWVsZCBQdnNoaW06ICV2IiwgZXJyKQogCX0KIAl4LlB2c2hpbVBhdGgg PSBDLkdvU3RyaW5nKHRtcC5wdnNoaW1fcGF0aCkKIAl4LlB2c2hpbUNtZGxpbmUgPSBDLkdvU3Ry aW5nKHRtcC5wdnNoaW1fY21kbGluZSkKQEAgLTEwMTEsMTcgKzEwMTEsMTcgQEAgZnVuYyAoeCAq RG9tYWluQnVpbGRJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbywgZXJy IGVycm9yKSB7CiAJeGMuYXZhaWxfdmNwdXMsIGVyciA9IHguQXZhaWxWY3B1cy50b0MoKQogCWlm IGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQot CQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmll bGQgQXZhaWxWY3B1czogJXYiLCBlcnIpCiAJfQogCXhjLmNwdW1hcCwgZXJyID0geC5DcHVtYXAu dG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNw b3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252 ZXJ0aW5nIGZpZWxkIENwdW1hcDogJXYiLCBlcnIpCiAJfQogCXhjLm5vZGVtYXAsIGVyciA9IHgu Tm9kZW1hcC50b0MoKQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9p bmZvX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJv cmYoIkNvbnZlcnRpbmcgZmllbGQgTm9kZW1hcDogJXYiLCBlcnIpCiAJfQogCWlmIG51bVZjcHVI YXJkQWZmaW5pdHkgOj0gbGVuKHguVmNwdUhhcmRBZmZpbml0eSk7IG51bVZjcHVIYXJkQWZmaW5p dHkgPiAwIHsKIAkJeGMudmNwdV9oYXJkX2FmZmluaXR5ID0gKCpDLmxpYnhsX2JpdG1hcCkoQy5t YWxsb2MoQy51bG9uZyhudW1WY3B1SGFyZEFmZmluaXR5KSAqIEMuc2l6ZW9mX2xpYnhsX2JpdG1h cCkpCkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIHRvQygp ICh4YyBDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvLCBlcnIgZXJyb3IpIHsKIAl4Yy5udW1hX3Bs YWNlbWVudCwgZXJyID0geC5OdW1hUGxhY2VtZW50LnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJ CUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJy CisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBOdW1hUGxhY2VtZW50 OiAldiIsIGVycikKIAl9CiAJeGMudHNjX21vZGUgPSBDLmxpYnhsX3RzY19tb2RlKHguVHNjTW9k ZSkKIAl4Yy5tYXhfbWVta2IgPSBDLnVpbnQ2NF90KHguTWF4TWVta2IpCkBAIC0xMDY4LDE3ICsx MDY4LDE3IEBAIGZ1bmMgKHggKkRvbWFpbkJ1aWxkSW5mbykgdG9DKCkgKHhjIEMubGlieGxfZG9t YWluX2J1aWxkX2luZm8sIGVyciBlcnJvcikgewogCXhjLmxvY2FsdGltZSwgZXJyID0geC5Mb2Nh bHRpbWUudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5m b19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3Jm KCJDb252ZXJ0aW5nIGZpZWxkIExvY2FsdGltZTogJXYiLCBlcnIpCiAJfQogCXhjLmRpc2FibGVf bWlncmF0ZSwgZXJyID0geC5EaXNhYmxlTWlncmF0ZS50b0MoKQogCWlmIGVyciAhPSBuaWwgewog CQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVy cgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgRGlzYWJsZU1pZ3Jh dGU6ICV2IiwgZXJyKQogCX0KIAl4Yy5jcHVpZCwgZXJyID0geC5DcHVpZC50b0MoKQogCWlmIGVy ciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQly ZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQg Q3B1aWQ6ICV2IiwgZXJyKQogCX0KIAlpZiB4LkJsa2RldlN0YXJ0ICE9ICIiIHsKIAkJeGMuYmxr ZGV2X3N0YXJ0ID0gQy5DU3RyaW5nKHguQmxrZGV2U3RhcnQpCkBAIC0xMTAyLDcgKzExMDIsNyBA QCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIHRvQygpICh4YyBDLmxpYnhsX2RvbWFpbl9idWls ZF9pbmZvLCBlcnIgZXJyb3IpIHsKIAl4Yy5kZXZpY2VfbW9kZWxfc3R1YmRvbWFpbiwgZXJyID0g eC5EZXZpY2VNb2RlbFN0dWJkb21haW4udG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4 bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0 dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIERldmljZU1vZGVsU3R1YmRvbWFp bjogJXYiLCBlcnIpCiAJfQogCWlmIHguRGV2aWNlTW9kZWwgIT0gIiIgewogCQl4Yy5kZXZpY2Vf bW9kZWwgPSBDLkNTdHJpbmcoeC5EZXZpY2VNb2RlbCkKQEAgLTExMTcsMjIgKzExMTcsMjIgQEAg ZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9kb21haW5fYnVpbGRf aW5mbywgZXJyIGVycm9yKSB7CiAJeGMuZXh0cmEsIGVyciA9IHguRXh0cmEudG9DKCkKIAlpZiBl cnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJ cmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxk IEV4dHJhOiAldiIsIGVycikKIAl9CiAJeGMuZXh0cmFfcHYsIGVyciA9IHguRXh0cmFQdi50b0Mo KQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2Uo JnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRp bmcgZmllbGQgRXh0cmFQdjogJXYiLCBlcnIpCiAJfQogCXhjLmV4dHJhX2h2bSwgZXJyID0geC5F eHRyYUh2bS50b0MoKQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9p bmZvX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJv cmYoIkNvbnZlcnRpbmcgZmllbGQgRXh0cmFIdm06ICV2IiwgZXJyKQogCX0KIAl4Yy5zY2hlZF9w YXJhbXMsIGVyciA9IHguU2NoZWRQYXJhbXMudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5s aWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJ cmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFNjaGVkUGFyYW1zOiAldiIs IGVycikKIAl9CiAJaWYgbnVtSW9wb3J0cyA6PSBsZW4oeC5Jb3BvcnRzKTsgbnVtSW9wb3J0cyA+ IDAgewogCQl4Yy5pb3BvcnRzID0gKCpDLmxpYnhsX2lvcG9ydF9yYW5nZSkoQy5tYWxsb2MoQy51 bG9uZyhudW1Jb3BvcnRzKSAqIEMuc2l6ZW9mX2xpYnhsX2lvcG9ydF9yYW5nZSkpCkBAIC0xMTcx LDcgKzExNzEsNyBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIHRvQygpICh4YyBDLmxpYnhs X2RvbWFpbl9idWlsZF9pbmZvLCBlcnIgZXJyb3IpIHsKIAl4Yy5jbGFpbV9tb2RlLCBlcnIgPSB4 LkNsYWltTW9kZS50b0MoKQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9idWls ZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5F cnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQ2xhaW1Nb2RlOiAldiIsIGVycikKIAl9CiAJeGMuZXZl bnRfY2hhbm5lbHMgPSBDLnVpbnQzMl90KHguRXZlbnRDaGFubmVscykKIAlpZiB4Lktlcm5lbCAh PSAiIiB7CkBAIC0xMTg5LDcgKzExODksNyBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIHRv QygpICh4YyBDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvLCBlcnIgZXJyb3IpIHsKIAl4Yy5hY3Bp LCBlcnIgPSB4LkFjcGkudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5f YnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBm bXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEFjcGk6ICV2IiwgZXJyKQogCX0KIAlpZiB4LkJv b3Rsb2FkZXIgIT0gIiIgewogCQl4Yy5ib290bG9hZGVyID0gQy5DU3RyaW5nKHguQm9vdGxvYWRl cikKQEAgLTExOTcsMjMgKzExOTcsMjMgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSB0b0Mo KSAoeGMgQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbywgZXJyIGVycm9yKSB7CiAJeGMuYm9vdGxv YWRlcl9hcmdzLCBlcnIgPSB4LkJvb3Rsb2FkZXJBcmdzLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7 CiAJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4Yywg ZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBCb290bG9hZGVy QXJnczogJXYiLCBlcnIpCiAJfQogCXhjLnRpbWVyX21vZGUgPSBDLmxpYnhsX3RpbWVyX21vZGUo eC5UaW1lck1vZGUpCiAJeGMubmVzdGVkX2h2bSwgZXJyID0geC5OZXN0ZWRIdm0udG9DKCkKIAlp ZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykK LQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZp ZWxkIE5lc3RlZEh2bTogJXYiLCBlcnIpCiAJfQogCXhjLmFwaWMsIGVyciA9IHguQXBpYy50b0Mo KQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2Uo JnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRp bmcgZmllbGQgQXBpYzogJXYiLCBlcnIpCiAJfQogCXhjLmRtX3Jlc3RyaWN0LCBlcnIgPSB4LkRt UmVzdHJpY3QudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fYnVpbGRf aW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJy b3JmKCJDb252ZXJ0aW5nIGZpZWxkIERtUmVzdHJpY3Q6ICV2IiwgZXJyKQogCX0KIAl4Yy50ZWUg PSBDLmxpYnhsX3RlZV90eXBlKHguVGVlKQogCXhjLl90eXBlID0gQy5saWJ4bF9kb21haW5fdHlw ZSh4LlR5cGUpCkBAIC0xMjMyLDUyICsxMjMyLDUyIEBAIGZ1bmMgKHggKkRvbWFpbkJ1aWxkSW5m bykgdG9DKCkgKHhjIEMubGlieGxfZG9tYWluX2J1aWxkX2luZm8sIGVyciBlcnJvcikgewogCQlo dm0ucGFlLCBlcnIgPSB0bXAuUGFlLnRvQygpCiAJCWlmIGVyciAhPSBuaWwgewogCQkJQy5saWJ4 bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJCQly ZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgUGFlOiAldiIsIGVycikKIAkJ fQogCQlodm0uYXBpYywgZXJyID0gdG1wLkFwaWMudG9DKCkKIAkJaWYgZXJyICE9IG5pbCB7CiAJ CQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBl cnIKKwkJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBBcGljOiAldiIs IGVycikKIAkJfQogCQlodm0uYWNwaSwgZXJyID0gdG1wLkFjcGkudG9DKCkKIAkJaWYgZXJyICE9 IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0 dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBB Y3BpOiAldiIsIGVycikKIAkJfQogCQlodm0uYWNwaV9zMywgZXJyID0gdG1wLkFjcGlTMy50b0Mo KQogCQlpZiBlcnIgIT0gbmlsIHsKIAkJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9z ZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgorCQkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252 ZXJ0aW5nIGZpZWxkIEFjcGlTMzogJXYiLCBlcnIpCiAJCX0KIAkJaHZtLmFjcGlfczQsIGVyciA9 IHRtcC5BY3BpUzQudG9DKCkKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9i dWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4Yywg Zm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBBY3BpUzQ6ICV2IiwgZXJyKQogCQl9CiAJCWh2 bS5hY3BpX2xhcHRvcF9zbGF0ZSwgZXJyID0gdG1wLkFjcGlMYXB0b3BTbGF0ZS50b0MoKQogCQlp ZiBlcnIgIT0gbmlsIHsKIAkJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMp Ci0JCQlyZXR1cm4geGMsIGVycgorCQkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5n IGZpZWxkIEFjcGlMYXB0b3BTbGF0ZTogJXYiLCBlcnIpCiAJCX0KIAkJaHZtLm54LCBlcnIgPSB0 bXAuTngudG9DKCkKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9p bmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBOeDogJXYiLCBlcnIpCiAJCX0KIAkJaHZtLnZpcmlkaWFu LCBlcnIgPSB0bXAuVmlyaWRpYW4udG9DKCkKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhs X2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJl dHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBWaXJpZGlhbjogJXYiLCBlcnIp CiAJCX0KIAkJaHZtLnZpcmlkaWFuX2VuYWJsZSwgZXJyID0gdG1wLlZpcmlkaWFuRW5hYmxlLnRv QygpCiAJCWlmIGVyciAhPSBuaWwgewogCQkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNw b3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNv bnZlcnRpbmcgZmllbGQgVmlyaWRpYW5FbmFibGU6ICV2IiwgZXJyKQogCQl9CiAJCWh2bS52aXJp ZGlhbl9kaXNhYmxlLCBlcnIgPSB0bXAuVmlyaWRpYW5EaXNhYmxlLnRvQygpCiAJCWlmIGVyciAh PSBuaWwgewogCQkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJCXJl dHVybiB4YywgZXJyCisJCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQg VmlyaWRpYW5EaXNhYmxlOiAldiIsIGVycikKIAkJfQogCQlpZiB0bXAuVGltZW9mZnNldCAhPSAi IiB7CiAJCQlodm0udGltZW9mZnNldCA9IEMuQ1N0cmluZyh0bXAuVGltZW9mZnNldCkKQEAgLTEy ODUsMjQgKzEyODUsMjQgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSB0b0MoKSAoeGMgQy5s aWJ4bF9kb21haW5fYnVpbGRfaW5mbywgZXJyIGVycm9yKSB7CiAJCWh2bS5ocGV0LCBlcnIgPSB0 bXAuSHBldC50b0MoKQogCQlpZiBlcnIgIT0gbmlsIHsKIAkJCUMubGlieGxfZG9tYWluX2J1aWxk X2luZm9fZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgorCQkJcmV0dXJuIHhjLCBmbXQu RXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEhwZXQ6ICV2IiwgZXJyKQogCQl9CiAJCWh2bS52cHRf YWxpZ24sIGVyciA9IHRtcC5WcHRBbGlnbi50b0MoKQogCQlpZiBlcnIgIT0gbmlsIHsKIAkJCUMu bGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgor CQkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFZwdEFsaWduOiAldiIs IGVycikKIAkJfQogCQlodm0ubW1pb19ob2xlX21lbWtiID0gQy51aW50NjRfdCh0bXAuTW1pb0hv bGVNZW1rYikKIAkJaHZtLnRpbWVyX21vZGUgPSBDLmxpYnhsX3RpbWVyX21vZGUodG1wLlRpbWVy TW9kZSkKIAkJaHZtLm5lc3RlZF9odm0sIGVyciA9IHRtcC5OZXN0ZWRIdm0udG9DKCkKIAkJaWYg ZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQot CQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBm aWVsZCBOZXN0ZWRIdm06ICV2IiwgZXJyKQogCQl9CiAJCWh2bS5hbHRwMm0sIGVyciA9IHRtcC5B bHRwMk0udG9DKCkKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9p bmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBBbHRwMk06ICV2IiwgZXJyKQogCQl9CiAJCWlmIHRtcC5T eXN0ZW1GaXJtd2FyZSAhPSAiIiB7CiAJCQlodm0uc3lzdGVtX2Zpcm13YXJlID0gQy5DU3RyaW5n KHRtcC5TeXN0ZW1GaXJtd2FyZSkKQEAgLTEzMTcsMTcgKzEzMTcsMTcgQEAgZnVuYyAoeCAqRG9t YWluQnVpbGRJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbywgZXJyIGVy cm9yKSB7CiAJCWh2bS5ub2dyYXBoaWMsIGVyciA9IHRtcC5Ob2dyYXBoaWMudG9DKCkKIAkJaWYg ZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQot CQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBm aWVsZCBOb2dyYXBoaWM6ICV2IiwgZXJyKQogCQl9CiAJCWh2bS52Z2EsIGVyciA9IHRtcC5WZ2Eu dG9DKCkKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rp c3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVycm9yZigi Q29udmVydGluZyBmaWVsZCBWZ2E6ICV2IiwgZXJyKQogCQl9CiAJCWh2bS52bmMsIGVyciA9IHRt cC5WbmMudG9DKCkKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9p bmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBWbmM6ICV2IiwgZXJyKQogCQl9CiAJCWlmIHRtcC5LZXlt YXAgIT0gIiIgewogCQkJaHZtLmtleW1hcCA9IEMuQ1N0cmluZyh0bXAuS2V5bWFwKQpAQCAtMTMz NSwxNyArMTMzNSwxNyBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIHRvQygpICh4YyBDLmxp YnhsX2RvbWFpbl9idWlsZF9pbmZvLCBlcnIgZXJyb3IpIHsKIAkJaHZtLnNkbCwgZXJyID0gdG1w LlNkbC50b0MoKQogCQlpZiBlcnIgIT0gbmlsIHsKIAkJCUMubGlieGxfZG9tYWluX2J1aWxkX2lu Zm9fZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgorCQkJcmV0dXJuIHhjLCBmbXQuRXJy b3JmKCJDb252ZXJ0aW5nIGZpZWxkIFNkbDogJXYiLCBlcnIpCiAJCX0KIAkJaHZtLnNwaWNlLCBl cnIgPSB0bXAuU3BpY2UudG9DKCkKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFp bl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4 YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBTcGljZTogJXYiLCBlcnIpCiAJCX0KIAkJ aHZtLmdmeF9wYXNzdGhydSwgZXJyID0gdG1wLkdmeFBhc3N0aHJ1LnRvQygpCiAJCWlmIGVyciAh PSBuaWwgewogCQkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJCXJl dHVybiB4YywgZXJyCisJCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQg R2Z4UGFzc3RocnU6ICV2IiwgZXJyKQogCQl9CiAJCWh2bS5nZnhfcGFzc3RocnVfa2luZCA9IEMu bGlieGxfZ2Z4X3Bhc3N0aHJ1X2tpbmQodG1wLkdmeFBhc3N0aHJ1S2luZCkKIAkJaWYgdG1wLlNl cmlhbCAhPSAiIiB7CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBmdW5jICh4ICpEb21haW5CdWlsZElu Zm8pIHRvQygpICh4YyBDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvLCBlcnIgZXJyb3IpIHsKIAkJ aHZtLnVzYiwgZXJyID0gdG1wLlVzYi50b0MoKQogCQlpZiBlcnIgIT0gbmlsIHsKIAkJCUMubGli eGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgorCQkJ cmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFVzYjogJXYiLCBlcnIpCiAJ CX0KIAkJaHZtLnVzYnZlcnNpb24gPSBDLmludCh0bXAuVXNidmVyc2lvbikKIAkJaWYgdG1wLlVz YmRldmljZSAhPSAiIiB7CkBAIC0xMzY2LDcgKzEzNjYsNyBAQCBmdW5jICh4ICpEb21haW5CdWls ZEluZm8pIHRvQygpICh4YyBDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvLCBlcnIgZXJyb3IpIHsK IAkJaHZtLnZrYl9kZXZpY2UsIGVyciA9IHRtcC5Wa2JEZXZpY2UudG9DKCkKIAkJaWYgZXJyICE9 IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0 dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBW a2JEZXZpY2U6ICV2IiwgZXJyKQogCQl9CiAJCWlmIHRtcC5Tb3VuZGh3ICE9ICIiIHsKIAkJCWh2 bS5zb3VuZGh3ID0gQy5DU3RyaW5nKHRtcC5Tb3VuZGh3KQpAQCAtMTM3NCwyOCArMTM3NCwyOCBA QCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIHRvQygpICh4YyBDLmxpYnhsX2RvbWFpbl9idWls ZF9pbmZvLCBlcnIgZXJyb3IpIHsKIAkJaHZtLnhlbl9wbGF0Zm9ybV9wY2ksIGVyciA9IHRtcC5Y ZW5QbGF0Zm9ybVBjaS50b0MoKQogCQlpZiBlcnIgIT0gbmlsIHsKIAkJCUMubGlieGxfZG9tYWlu X2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgorCQkJcmV0dXJuIHhj LCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFhlblBsYXRmb3JtUGNpOiAldiIsIGVycikK IAkJfQogCQlodm0udXNiZGV2aWNlX2xpc3QsIGVyciA9IHRtcC5Vc2JkZXZpY2VMaXN0LnRvQygp CiAJCWlmIGVyciAhPSBuaWwgewogCQkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3Nl KCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZl cnRpbmcgZmllbGQgVXNiZGV2aWNlTGlzdDogJXYiLCBlcnIpCiAJCX0KIAkJaHZtLnZlbmRvcl9k ZXZpY2UgPSBDLmxpYnhsX3ZlbmRvcl9kZXZpY2UodG1wLlZlbmRvckRldmljZSkKIAkJaHZtLm1z X3ZtX2dlbmlkLCBlcnIgPSB0bXAuTXNWbUdlbmlkLnRvQygpCiAJCWlmIGVyciAhPSBuaWwgewog CQkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4Yywg ZXJyCisJCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgTXNWbUdlbmlk OiAldiIsIGVycikKIAkJfQogCQlodm0uc2VyaWFsX2xpc3QsIGVyciA9IHRtcC5TZXJpYWxMaXN0 LnRvQygpCiAJCWlmIGVyciAhPSBuaWwgewogCQkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19k aXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJCQlyZXR1cm4geGMsIGZtdC5FcnJvcmYo IkNvbnZlcnRpbmcgZmllbGQgU2VyaWFsTGlzdDogJXYiLCBlcnIpCiAJCX0KIAkJaHZtLnJkbSwg ZXJyID0gdG1wLlJkbS50b0MoKQogCQlpZiBlcnIgIT0gbmlsIHsKIAkJCUMubGlieGxfZG9tYWlu X2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgorCQkJcmV0dXJuIHhj LCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFJkbTogJXYiLCBlcnIpCiAJCX0KIAkJaHZt LnJkbV9tZW1fYm91bmRhcnlfbWVta2IgPSBDLnVpbnQ2NF90KHRtcC5SZG1NZW1Cb3VuZGFyeU1l bWtiKQogCQlodm0ubWNhX2NhcHMgPSBDLnVpbnQ2NF90KHRtcC5NY2FDYXBzKQpAQCAtMTQxOCw3 ICsxNDE4LDcgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9k b21haW5fYnVpbGRfaW5mbywgZXJyIGVycm9yKSB7CiAJCXB2LmJvb3Rsb2FkZXJfYXJncywgZXJy ID0gdG1wLkJvb3Rsb2FkZXJBcmdzLnRvQygpCiAJCWlmIGVyciAhPSBuaWwgewogCQkJQy5saWJ4 bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJCQly ZXR1cm4geGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQm9vdGxvYWRlckFyZ3M6ICV2 IiwgZXJyKQogCQl9CiAJCWlmIHRtcC5DbWRsaW5lICE9ICIiIHsKIAkJCXB2LmNtZGxpbmUgPSBD LkNTdHJpbmcodG1wLkNtZGxpbmUpCkBAIC0xNDMyLDcgKzE0MzIsNyBAQCBmdW5jICh4ICpEb21h aW5CdWlsZEluZm8pIHRvQygpICh4YyBDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvLCBlcnIgZXJy b3IpIHsKIAkJcHYuZTgyMF9ob3N0LCBlcnIgPSB0bXAuRTgyMEhvc3QudG9DKCkKIAkJaWYgZXJy ICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJ cmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVs ZCBFODIwSG9zdDogJXYiLCBlcnIpCiAJCX0KIAkJcHZCeXRlcyA6PSBDLkdvQnl0ZXModW5zYWZl LlBvaW50ZXIoJnB2KSwgQy5zaXplb2ZfbGlieGxfZG9tYWluX2J1aWxkX2luZm9fdHlwZV91bmlv bl9wdikKIAkJY29weSh4Yy51WzpdLCBwdkJ5dGVzKQpAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgZnVu YyAoeCAqRG9tYWluQnVpbGRJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9kb21haW5fYnVpbGRfaW5m bywgZXJyIGVycm9yKSB7CiAJCXB2aC5wdnNoaW0sIGVyciA9IHRtcC5QdnNoaW0udG9DKCkKIAkJ aWYgZXJyICE9IG5pbCB7CiAJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhj KQotCQkJcmV0dXJuIHhjLCBlcnIKKwkJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGlu ZyBmaWVsZCBQdnNoaW06ICV2IiwgZXJyKQogCQl9CiAJCWlmIHRtcC5QdnNoaW1QYXRoICE9ICIi IHsKIAkJCXB2aC5wdnNoaW1fcGF0aCA9IEMuQ1N0cmluZyh0bXAuUHZzaGltUGF0aCkKQEAgLTE0 NzMsMTAgKzE0NzMsMTAgQEAgZnVuYyAoeCAqRGV2aWNlVmZiKSBmcm9tQyh4YyAqQy5saWJ4bF9k ZXZpY2VfdmZiKSBlcnJvciB7CiAJeC5CYWNrZW5kRG9tbmFtZSA9IEMuR29TdHJpbmcoeGMuYmFj a2VuZF9kb21uYW1lKQogCXguRGV2aWQgPSBEZXZpZCh4Yy5kZXZpZCkKIAlpZiBlcnIgOj0geC5W bmMuZnJvbUMoJnhjLnZuYyk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBm bXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFZuYzogJXYiLCBlcnIpCiAJfQogCWlmIGVyciA6 PSB4LlNkbC5mcm9tQygmeGMuc2RsKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0 dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgU2RsOiAldiIsIGVycikKIAl9CiAJeC5L ZXltYXAgPSBDLkdvU3RyaW5nKHhjLmtleW1hcCkKIApAQCAtMTQ5MywxMiArMTQ5MywxMiBAQCBm dW5jICh4ICpEZXZpY2VWZmIpIHRvQygpICh4YyBDLmxpYnhsX2RldmljZV92ZmIsIGVyciBlcnJv cikgewogCXhjLnZuYywgZXJyID0geC5WbmMudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5s aWJ4bF9kZXZpY2VfdmZiX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4g eGMsIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgVm5jOiAldiIsIGVycikKIAl9CiAJeGMu c2RsLCBlcnIgPSB4LlNkbC50b0MoKQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2Rldmlj ZV92ZmJfZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBTZGw6ICV2IiwgZXJyKQogCX0KIAlpZiB4LktleW1hcCAh PSAiIiB7CiAJCXhjLmtleW1hcCA9IEMuQ1N0cmluZyh4LktleW1hcCkKQEAgLTE1NjMsMTMgKzE1 NjMsMTMgQEAgZnVuYyAoeCAqRGV2aWNlRGlzaykgZnJvbUMoeGMgKkMubGlieGxfZGV2aWNlX2Rp c2spIGVycm9yIHsKIAl4LklzQ2Ryb20gPSBpbnQoeGMuaXNfY2Ryb20pCiAJeC5EaXJlY3RJb1Nh ZmUgPSBib29sKHhjLmRpcmVjdF9pb19zYWZlKQogCWlmIGVyciA6PSB4LkRpc2NhcmRFbmFibGUu ZnJvbUMoJnhjLmRpc2NhcmRfZW5hYmxlKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJ cmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgRGlzY2FyZEVuYWJsZTogJXYiLCBl cnIpCiAJfQogCWlmIGVyciA6PSB4LkNvbG9FbmFibGUuZnJvbUMoJnhjLmNvbG9fZW5hYmxlKTsg ZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRp bmcgZmllbGQgQ29sb0VuYWJsZTogJXYiLCBlcnIpCiAJfQogCWlmIGVyciA6PSB4LkNvbG9SZXN0 b3JlRW5hYmxlLmZyb21DKCZ4Yy5jb2xvX3Jlc3RvcmVfZW5hYmxlKTsgZXJyICE9IG5pbCB7Ci0J CXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQ29sb1Jl c3RvcmVFbmFibGU6ICV2IiwgZXJyKQogCX0KIAl4LkNvbG9Ib3N0ID0gQy5Hb1N0cmluZyh4Yy5j b2xvX2hvc3QpCiAJeC5Db2xvUG9ydCA9IGludCh4Yy5jb2xvX3BvcnQpCkBAIC0xNjA0LDE3ICsx NjA0LDE3IEBAIGZ1bmMgKHggKkRldmljZURpc2spIHRvQygpICh4YyBDLmxpYnhsX2RldmljZV9k aXNrLCBlcnIgZXJyb3IpIHsKIAl4Yy5kaXNjYXJkX2VuYWJsZSwgZXJyID0geC5EaXNjYXJkRW5h YmxlLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9z ZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVy dGluZyBmaWVsZCBEaXNjYXJkRW5hYmxlOiAldiIsIGVycikKIAl9CiAJeGMuY29sb19lbmFibGUs IGVyciA9IHguQ29sb0VuYWJsZS50b0MoKQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2Rl dmljZV9kaXNrX2Rpc3Bvc2UoJnhjKQotCQlyZXR1cm4geGMsIGVycgorCQlyZXR1cm4geGMsIGZt dC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQ29sb0VuYWJsZTogJXYiLCBlcnIpCiAJfQogCXhj LmNvbG9fcmVzdG9yZV9lbmFibGUsIGVyciA9IHguQ29sb1Jlc3RvcmVFbmFibGUudG9DKCkKIAlp ZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZ4YykKLQkJcmV0 dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIENv bG9SZXN0b3JlRW5hYmxlOiAldiIsIGVycikKIAl9CiAJaWYgeC5Db2xvSG9zdCAhPSAiIiB7CiAJ CXhjLmNvbG9faG9zdCA9IEMuQ1N0cmluZyh4LkNvbG9Ib3N0KQpAQCAtMTYzOSw3ICsxNjM5LDcg QEAgZnVuYyAoeCAqRGV2aWNlTmljKSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfbmljKSBlcnJv ciB7CiAJeC5NdHUgPSBpbnQoeGMubXR1KQogCXguTW9kZWwgPSBDLkdvU3RyaW5nKHhjLm1vZGVs KQogCWlmIGVyciA6PSB4Lk1hYy5mcm9tQygmeGMubWFjKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVy biBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgTWFjOiAldiIsIGVy cikKIAl9CiAJeC5JcCA9IEMuR29TdHJpbmcoeGMuaXApCiAJeC5CcmlkZ2UgPSBDLkdvU3RyaW5n KHhjLmJyaWRnZSkKQEAgLTE3MTYsNyArMTcxNiw3IEBAIGZ1bmMgKHggKkRldmljZU5pYykgdG9D KCkgKHhjIEMubGlieGxfZGV2aWNlX25pYywgZXJyIGVycm9yKSB7CiAJeGMubWFjLCBlcnIgPSB4 Lk1hYy50b0MoKQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RldmljZV9uaWNfZGlzcG9z ZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVy dGluZyBmaWVsZCBNYWM6ICV2IiwgZXJyKQogCX0KIAlpZiB4LklwICE9ICIiIHsKIAkJeGMuaXAg PSBDLkNTdHJpbmcoeC5JcCkKQEAgLTE5NjYsNyArMTk2Niw3IEBAIGZ1bmMgKHggKkRldmljZVVz YmRldikgZnJvbUMoeGMgKkMubGlieGxfZGV2aWNlX3VzYmRldikgZXJyb3IgewogCWNhc2UgVXNi ZGV2VHlwZUhvc3RkZXY6CiAJCXZhciB0eXBlSG9zdGRldiBEZXZpY2VVc2JkZXZUeXBlVW5pb25I b3N0ZGV2CiAJCWlmIGVyciA6PSB0eXBlSG9zdGRldi5mcm9tQyh4Yyk7IGVyciAhPSBuaWwgewot CQkJcmV0dXJuIGVycgorCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgdHlw ZUhvc3RkZXY6ICV2IiwgZXJyKQogCQl9CiAJCXguVHlwZVVuaW9uID0gdHlwZUhvc3RkZXYKIAlk ZWZhdWx0OgpAQCAtMjAyOSw3ICsyMDI5LDcgQEAgZnVuYyAoeCAqRGV2aWNlVnRwbSkgZnJvbUMo eGMgKkMubGlieGxfZGV2aWNlX3Z0cG0pIGVycm9yIHsKIAl4LkJhY2tlbmREb21uYW1lID0gQy5H b1N0cmluZyh4Yy5iYWNrZW5kX2RvbW5hbWUpCiAJeC5EZXZpZCA9IERldmlkKHhjLmRldmlkKQog CWlmIGVyciA6PSB4LlV1aWQuZnJvbUMoJnhjLnV1aWQpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJu IGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBVdWlkOiAldiIsIGVy cikKIAl9CiAKIAlyZXR1cm4gbmlsCkBAIC0yMDQ1LDcgKzIwNDUsNyBAQCBmdW5jICh4ICpEZXZp Y2VWdHBtKSB0b0MoKSAoeGMgQy5saWJ4bF9kZXZpY2VfdnRwbSwgZXJyIGVycm9yKSB7CiAJeGMu dXVpZCwgZXJyID0geC5VdWlkLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxfZGV2 aWNlX3Z0cG1fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10 LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBVdWlkOiAldiIsIGVycikKIAl9CiAJcmV0dXJuIHhj LCBuaWwKIH0KQEAgLTIxMDgsNyArMjEwOCw3IEBAIGZ1bmMgKHggKkRldmljZUNoYW5uZWwpIGZy b21DKHhjICpDLmxpYnhsX2RldmljZV9jaGFubmVsKSBlcnJvciB7CiAJY2FzZSBDaGFubmVsQ29u bmVjdGlvblNvY2tldDoKIAkJdmFyIGNvbm5lY3Rpb25Tb2NrZXQgRGV2aWNlQ2hhbm5lbENvbm5l Y3Rpb25VbmlvblNvY2tldAogCQlpZiBlcnIgOj0gY29ubmVjdGlvblNvY2tldC5mcm9tQyh4Yyk7 IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZl cnRpbmcgZmllbGQgY29ubmVjdGlvblNvY2tldDogJXYiLCBlcnIpCiAJCX0KIAkJeC5Db25uZWN0 aW9uVW5pb24gPSBjb25uZWN0aW9uU29ja2V0CiAJZGVmYXVsdDoKQEAgLTIxODcsNyArMjE4Nyw3 IEBAIGZ1bmMgKHggKkRldmljZVZkaXNwbCkgZnJvbUMoeGMgKkMubGlieGxfZGV2aWNlX3ZkaXNw bCkgZXJyb3IgewogCQl4LkNvbm5lY3RvcnMgPSBtYWtlKFtdQ29ubmVjdG9yUGFyYW0sIG51bUNv bm5lY3RvcnMpCiAJCWZvciBpLCB2IDo9IHJhbmdlIGNDb25uZWN0b3JzIHsKIAkJCWlmIGVyciA6 PSB4LkNvbm5lY3RvcnNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCQlyZXR1cm4gZXJy CisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQ29ubmVjdG9yczogJXYi LCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC0yMjcxLDcgKzIyNzEsNyBAQCBmdW5jICh4ICpWc25k U3RyZWFtKSBmcm9tQyh4YyAqQy5saWJ4bF92c25kX3N0cmVhbSkgZXJyb3IgewogCXguVW5pcXVl SWQgPSBDLkdvU3RyaW5nKHhjLnVuaXF1ZV9pZCkKIAl4LlR5cGUgPSBWc25kU3RyZWFtVHlwZSh4 Yy5fdHlwZSkKIAlpZiBlcnIgOj0geC5QYXJhbXMuZnJvbUMoJnhjLnBhcmFtcyk7IGVyciAhPSBu aWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxk IFBhcmFtczogJXYiLCBlcnIpCiAJfQogCiAJcmV0dXJuIG5pbApAQCAtMjI4Niw3ICsyMjg2LDcg QEAgZnVuYyAoeCAqVnNuZFN0cmVhbSkgdG9DKCkgKHhjIEMubGlieGxfdnNuZF9zdHJlYW0sIGVy ciBlcnJvcikgewogCXhjLnBhcmFtcywgZXJyID0geC5QYXJhbXMudG9DKCkKIAlpZiBlcnIgIT0g bmlsIHsKIAkJQy5saWJ4bF92c25kX3N0cmVhbV9kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBl cnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFBhcmFtczogJXYi LCBlcnIpCiAJfQogCXJldHVybiB4YywgbmlsCiB9CkBAIC0yMjk0LDcgKzIyOTQsNyBAQCBmdW5j ICh4ICpWc25kU3RyZWFtKSB0b0MoKSAoeGMgQy5saWJ4bF92c25kX3N0cmVhbSwgZXJyIGVycm9y KSB7CiBmdW5jICh4ICpWc25kUGNtKSBmcm9tQyh4YyAqQy5saWJ4bF92c25kX3BjbSkgZXJyb3Ig ewogCXguTmFtZSA9IEMuR29TdHJpbmcoeGMubmFtZSkKIAlpZiBlcnIgOj0geC5QYXJhbXMuZnJv bUMoJnhjLnBhcmFtcyk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQu RXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFBhcmFtczogJXYiLCBlcnIpCiAJfQogCXguU3RyZWFt cyA9IG5pbAogCWlmIG51bVZzbmRTdHJlYW1zIDo9IGludCh4Yy5udW1fdnNuZF9zdHJlYW1zKTsg bnVtVnNuZFN0cmVhbXMgPiAwIHsKQEAgLTIzMDIsNyArMjMwMiw3IEBAIGZ1bmMgKHggKlZzbmRQ Y20pIGZyb21DKHhjICpDLmxpYnhsX3ZzbmRfcGNtKSBlcnJvciB7CiAJCXguU3RyZWFtcyA9IG1h a2UoW11Wc25kU3RyZWFtLCBudW1Wc25kU3RyZWFtcykKIAkJZm9yIGksIHYgOj0gcmFuZ2UgY1N0 cmVhbXMgewogCQkJaWYgZXJyIDo9IHguU3RyZWFtc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwg ewotCQkJCXJldHVybiBlcnIKKwkJCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVs ZCBTdHJlYW1zOiAldiIsIGVycikKIAkJCX0KIAkJfQogCX0KQEAgLTIzMTgsNyArMjMxOCw3IEBA IGZ1bmMgKHggKlZzbmRQY20pIHRvQygpICh4YyBDLmxpYnhsX3ZzbmRfcGNtLCBlcnIgZXJyb3Ip IHsKIAl4Yy5wYXJhbXMsIGVyciA9IHguUGFyYW1zLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJ CUMubGlieGxfdnNuZF9wY21fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVy biB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBQYXJhbXM6ICV2IiwgZXJyKQogCX0K IAlpZiBudW1Wc25kU3RyZWFtcyA6PSBsZW4oeC5TdHJlYW1zKTsgbnVtVnNuZFN0cmVhbXMgPiAw IHsKIAkJeGMuc3RyZWFtcyA9ICgqQy5saWJ4bF92c25kX3N0cmVhbSkoQy5tYWxsb2MoQy51bG9u ZyhudW1Wc25kU3RyZWFtcykgKiBDLnNpemVvZl9saWJ4bF92c25kX3N0cmVhbSkpCkBAIC0yMzQz LDcgKzIzNDMsNyBAQCBmdW5jICh4ICpEZXZpY2VWc25kKSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZp Y2VfdnNuZCkgZXJyb3IgewogCXguU2hvcnROYW1lID0gQy5Hb1N0cmluZyh4Yy5zaG9ydF9uYW1l KQogCXguTG9uZ05hbWUgPSBDLkdvU3RyaW5nKHhjLmxvbmdfbmFtZSkKIAlpZiBlcnIgOj0geC5Q YXJhbXMuZnJvbUMoJnhjLnBhcmFtcyk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJl dHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFBhcmFtczogJXYiLCBlcnIpCiAJfQog CXguUGNtcyA9IG5pbAogCWlmIG51bVZzbmRQY21zIDo9IGludCh4Yy5udW1fdnNuZF9wY21zKTsg bnVtVnNuZFBjbXMgPiAwIHsKQEAgLTIzNTEsNyArMjM1MSw3IEBAIGZ1bmMgKHggKkRldmljZVZz bmQpIGZyb21DKHhjICpDLmxpYnhsX2RldmljZV92c25kKSBlcnJvciB7CiAJCXguUGNtcyA9IG1h a2UoW11Wc25kUGNtLCBudW1Wc25kUGNtcykKIAkJZm9yIGksIHYgOj0gcmFuZ2UgY1BjbXMgewog CQkJaWYgZXJyIDo9IHguUGNtc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJCXJldHVy biBlcnIKKwkJCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBQY21zOiAldiIs IGVycikKIAkJCX0KIAkJfQogCX0KQEAgLTIzNzUsNyArMjM3NSw3IEBAIGZ1bmMgKHggKkRldmlj ZVZzbmQpIHRvQygpICh4YyBDLmxpYnhsX2RldmljZV92c25kLCBlcnIgZXJyb3IpIHsKIAl4Yy5w YXJhbXMsIGVyciA9IHguUGFyYW1zLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxf ZGV2aWNlX3ZzbmRfZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4Yywg Zm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBQYXJhbXM6ICV2IiwgZXJyKQogCX0KIAlpZiBu dW1Wc25kUGNtcyA6PSBsZW4oeC5QY21zKTsgbnVtVnNuZFBjbXMgPiAwIHsKIAkJeGMucGNtcyA9 ICgqQy5saWJ4bF92c25kX3BjbSkoQy5tYWxsb2MoQy51bG9uZyhudW1Wc25kUGNtcykgKiBDLnNp emVvZl9saWJ4bF92c25kX3BjbSkpCkBAIC0yMzk1LDEwICsyMzk1LDEwIEBAIGZ1bmMgKHggKkRl dmljZVZzbmQpIHRvQygpICh4YyBDLmxpYnhsX2RldmljZV92c25kLCBlcnIgZXJyb3IpIHsKIAog ZnVuYyAoeCAqRG9tYWluQ29uZmlnKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fY29uZmlnKSBl cnJvciB7CiAJaWYgZXJyIDo9IHguQ0luZm8uZnJvbUMoJnhjLmNfaW5mbyk7IGVyciAhPSBuaWwg ewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIENJ bmZvOiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9IHguQkluZm8uZnJvbUMoJnhjLmJfaW5mbyk7 IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0 aW5nIGZpZWxkIEJJbmZvOiAldiIsIGVycikKIAl9CiAJeC5EaXNrcyA9IG5pbAogCWlmIG51bURp c2tzIDo9IGludCh4Yy5udW1fZGlza3MpOyBudW1EaXNrcyA+IDAgewpAQCAtMjQwNiw3ICsyNDA2 LDcgQEAgZnVuYyAoeCAqRG9tYWluQ29uZmlnKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fY29u ZmlnKSBlcnJvciB7CiAJCXguRGlza3MgPSBtYWtlKFtdRGV2aWNlRGlzaywgbnVtRGlza3MpCiAJ CWZvciBpLCB2IDo9IHJhbmdlIGNEaXNrcyB7CiAJCQlpZiBlcnIgOj0geC5EaXNrc1tpXS5mcm9t Qygmdik7IGVyciAhPSBuaWwgewotCQkJCXJldHVybiBlcnIKKwkJCQlyZXR1cm4gZm10LkVycm9y ZigiQ29udmVydGluZyBmaWVsZCBEaXNrczogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC0y NDE2LDcgKzI0MTYsNyBAQCBmdW5jICh4ICpEb21haW5Db25maWcpIGZyb21DKHhjICpDLmxpYnhs X2RvbWFpbl9jb25maWcpIGVycm9yIHsKIAkJeC5OaWNzID0gbWFrZShbXURldmljZU5pYywgbnVt TmljcykKIAkJZm9yIGksIHYgOj0gcmFuZ2UgY05pY3MgewogCQkJaWYgZXJyIDo9IHguTmljc1tp XS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJCXJldHVybiBlcnIKKwkJCQlyZXR1cm4gZm10 LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBOaWNzOiAldiIsIGVycikKIAkJCX0KIAkJfQogCX0K QEAgLTI0MjYsNyArMjQyNiw3IEBAIGZ1bmMgKHggKkRvbWFpbkNvbmZpZykgZnJvbUMoeGMgKkMu bGlieGxfZG9tYWluX2NvbmZpZykgZXJyb3IgewogCQl4LlBjaWRldnMgPSBtYWtlKFtdRGV2aWNl UGNpLCBudW1QY2lkZXZzKQogCQlmb3IgaSwgdiA6PSByYW5nZSBjUGNpZGV2cyB7CiAJCQlpZiBl cnIgOj0geC5QY2lkZXZzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuIGVy cgorCQkJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFBjaWRldnM6ICV2Iiwg ZXJyKQogCQkJfQogCQl9CiAJfQpAQCAtMjQzNiw3ICsyNDM2LDcgQEAgZnVuYyAoeCAqRG9tYWlu Q29uZmlnKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fY29uZmlnKSBlcnJvciB7CiAJCXguUmRt cyA9IG1ha2UoW11EZXZpY2VSZG0sIG51bVJkbXMpCiAJCWZvciBpLCB2IDo9IHJhbmdlIGNSZG1z IHsKIAkJCWlmIGVyciA6PSB4LlJkbXNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCQly ZXR1cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgUmRtczog JXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC0yNDQ2LDcgKzI0NDYsNyBAQCBmdW5jICh4ICpE b21haW5Db25maWcpIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9jb25maWcpIGVycm9yIHsKIAkJ eC5EdGRldnMgPSBtYWtlKFtdRGV2aWNlRHRkZXYsIG51bUR0ZGV2cykKIAkJZm9yIGksIHYgOj0g cmFuZ2UgY0R0ZGV2cyB7CiAJCQlpZiBlcnIgOj0geC5EdGRldnNbaV0uZnJvbUMoJnYpOyBlcnIg IT0gbmlsIHsKLQkJCQlyZXR1cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRp bmcgZmllbGQgRHRkZXZzOiAldiIsIGVycikKIAkJCX0KIAkJfQogCX0KQEAgLTI0NTYsNyArMjQ1 Niw3IEBAIGZ1bmMgKHggKkRvbWFpbkNvbmZpZykgZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX2Nv bmZpZykgZXJyb3IgewogCQl4LlZmYnMgPSBtYWtlKFtdRGV2aWNlVmZiLCBudW1WZmJzKQogCQlm b3IgaSwgdiA6PSByYW5nZSBjVmZicyB7CiAJCQlpZiBlcnIgOj0geC5WZmJzW2ldLmZyb21DKCZ2 KTsgZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuIGVycgorCQkJCXJldHVybiBmbXQuRXJyb3JmKCJD b252ZXJ0aW5nIGZpZWxkIFZmYnM6ICV2IiwgZXJyKQogCQkJfQogCQl9CiAJfQpAQCAtMjQ2Niw3 ICsyNDY2LDcgQEAgZnVuYyAoeCAqRG9tYWluQ29uZmlnKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21h aW5fY29uZmlnKSBlcnJvciB7CiAJCXguVmticyA9IG1ha2UoW11EZXZpY2VWa2IsIG51bVZrYnMp CiAJCWZvciBpLCB2IDo9IHJhbmdlIGNWa2JzIHsKIAkJCWlmIGVyciA6PSB4LlZrYnNbaV0uZnJv bUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCQlyZXR1cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5FcnJv cmYoIkNvbnZlcnRpbmcgZmllbGQgVmticzogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC0y NDc2LDcgKzI0NzYsNyBAQCBmdW5jICh4ICpEb21haW5Db25maWcpIGZyb21DKHhjICpDLmxpYnhs X2RvbWFpbl9jb25maWcpIGVycm9yIHsKIAkJeC5WdHBtcyA9IG1ha2UoW11EZXZpY2VWdHBtLCBu dW1WdHBtcykKIAkJZm9yIGksIHYgOj0gcmFuZ2UgY1Z0cG1zIHsKIAkJCWlmIGVyciA6PSB4LlZ0 cG1zW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuIGVycgorCQkJCXJldHVy biBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFZ0cG1zOiAldiIsIGVycikKIAkJCX0KIAkJ fQogCX0KQEAgLTI0ODYsNyArMjQ4Niw3IEBAIGZ1bmMgKHggKkRvbWFpbkNvbmZpZykgZnJvbUMo eGMgKkMubGlieGxfZG9tYWluX2NvbmZpZykgZXJyb3IgewogCQl4LlA5UyA9IG1ha2UoW11EZXZp Y2VQOSwgbnVtUDlTKQogCQlmb3IgaSwgdiA6PSByYW5nZSBjUDlTIHsKIAkJCWlmIGVyciA6PSB4 LlA5U1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJCXJldHVybiBlcnIKKwkJCQlyZXR1 cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBQOVM6ICV2IiwgZXJyKQogCQkJfQogCQl9 CiAJfQpAQCAtMjQ5Niw3ICsyNDk2LDcgQEAgZnVuYyAoeCAqRG9tYWluQ29uZmlnKSBmcm9tQyh4 YyAqQy5saWJ4bF9kb21haW5fY29uZmlnKSBlcnJvciB7CiAJCXguUHZjYWxsc2lmcyA9IG1ha2Uo W11EZXZpY2VQdmNhbGxzaWYsIG51bVB2Y2FsbHNpZnMpCiAJCWZvciBpLCB2IDo9IHJhbmdlIGNQ dmNhbGxzaWZzIHsKIAkJCWlmIGVyciA6PSB4LlB2Y2FsbHNpZnNbaV0uZnJvbUMoJnYpOyBlcnIg IT0gbmlsIHsKLQkJCQlyZXR1cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRp bmcgZmllbGQgUHZjYWxsc2lmczogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC0yNTA2LDcg KzI1MDYsNyBAQCBmdW5jICh4ICpEb21haW5Db25maWcpIGZyb21DKHhjICpDLmxpYnhsX2RvbWFp bl9jb25maWcpIGVycm9yIHsKIAkJeC5WZGlzcGxzID0gbWFrZShbXURldmljZVZkaXNwbCwgbnVt VmRpc3BscykKIAkJZm9yIGksIHYgOj0gcmFuZ2UgY1ZkaXNwbHMgewogCQkJaWYgZXJyIDo9IHgu VmRpc3Bsc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJCXJldHVybiBlcnIKKwkJCQly ZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBWZGlzcGxzOiAldiIsIGVycikKIAkJ CX0KIAkJfQogCX0KQEAgLTI1MTYsNyArMjUxNiw3IEBAIGZ1bmMgKHggKkRvbWFpbkNvbmZpZykg ZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX2NvbmZpZykgZXJyb3IgewogCQl4LlZzbmRzID0gbWFr ZShbXURldmljZVZzbmQsIG51bVZzbmRzKQogCQlmb3IgaSwgdiA6PSByYW5nZSBjVnNuZHMgewog CQkJaWYgZXJyIDo9IHguVnNuZHNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCQlyZXR1 cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgVnNuZHM6ICV2 IiwgZXJyKQogCQkJfQogCQl9CiAJfQpAQCAtMjUyNiw3ICsyNTI2LDcgQEAgZnVuYyAoeCAqRG9t YWluQ29uZmlnKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fY29uZmlnKSBlcnJvciB7CiAJCXgu Q2hhbm5lbHMgPSBtYWtlKFtdRGV2aWNlQ2hhbm5lbCwgbnVtQ2hhbm5lbHMpCiAJCWZvciBpLCB2 IDo9IHJhbmdlIGNDaGFubmVscyB7CiAJCQlpZiBlcnIgOj0geC5DaGFubmVsc1tpXS5mcm9tQygm dik7IGVyciAhPSBuaWwgewotCQkJCXJldHVybiBlcnIKKwkJCQlyZXR1cm4gZm10LkVycm9yZigi Q29udmVydGluZyBmaWVsZCBDaGFubmVsczogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC0y NTM2LDcgKzI1MzYsNyBAQCBmdW5jICh4ICpEb21haW5Db25maWcpIGZyb21DKHhjICpDLmxpYnhs X2RvbWFpbl9jb25maWcpIGVycm9yIHsKIAkJeC5Vc2JjdHJscyA9IG1ha2UoW11EZXZpY2VVc2Jj dHJsLCBudW1Vc2JjdHJscykKIAkJZm9yIGksIHYgOj0gcmFuZ2UgY1VzYmN0cmxzIHsKIAkJCWlm IGVyciA6PSB4LlVzYmN0cmxzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJu IGVycgorCQkJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFVzYmN0cmxzOiAl diIsIGVycikKIAkJCX0KIAkJfQogCX0KQEAgLTI1NDYsNyArMjU0Niw3IEBAIGZ1bmMgKHggKkRv bWFpbkNvbmZpZykgZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX2NvbmZpZykgZXJyb3IgewogCQl4 LlVzYmRldnMgPSBtYWtlKFtdRGV2aWNlVXNiZGV2LCBudW1Vc2JkZXZzKQogCQlmb3IgaSwgdiA6 PSByYW5nZSBjVXNiZGV2cyB7CiAJCQlpZiBlcnIgOj0geC5Vc2JkZXZzW2ldLmZyb21DKCZ2KTsg ZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuIGVycgorCQkJCXJldHVybiBmbXQuRXJyb3JmKCJDb252 ZXJ0aW5nIGZpZWxkIFVzYmRldnM6ICV2IiwgZXJyKQogCQkJfQogCQl9CiAJfQpAQCAtMjU2NCwx MiArMjU2NCwxMiBAQCBmdW5jICh4ICpEb21haW5Db25maWcpIHRvQygpICh4YyBDLmxpYnhsX2Rv bWFpbl9jb25maWcsIGVyciBlcnJvcikgewogCXhjLmNfaW5mbywgZXJyID0geC5DSW5mby50b0Mo KQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmeGMp Ci0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBm aWVsZCBDSW5mbzogJXYiLCBlcnIpCiAJfQogCXhjLmJfaW5mbywgZXJyID0geC5CSW5mby50b0Mo KQogCWlmIGVyciAhPSBuaWwgewogCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmeGMp Ci0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBm aWVsZCBCSW5mbzogJXYiLCBlcnIpCiAJfQogCWlmIG51bURpc2tzIDo9IGxlbih4LkRpc2tzKTsg bnVtRGlza3MgPiAwIHsKIAkJeGMuZGlza3MgPSAoKkMubGlieGxfZGV2aWNlX2Rpc2spKEMubWFs bG9jKEMudWxvbmcobnVtRGlza3MpICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX2Rpc2spKQpAQCAt Mjg0Niw3ICsyODQ2LDcgQEAgZnVuYyAoeCAqVnRwbWluZm8pIGZyb21DKHhjICpDLmxpYnhsX3Z0 cG1pbmZvKSBlcnJvciB7CiAJeC5FdnRjaCA9IGludCh4Yy5ldnRjaCkKIAl4LlJyZWYgPSBpbnQo eGMucnJlZikKIAlpZiBlcnIgOj0geC5VdWlkLmZyb21DKCZ4Yy51dWlkKTsgZXJyICE9IG5pbCB7 Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgVXVp ZDogJXYiLCBlcnIpCiAJfQogCiAJcmV0dXJuIG5pbApAQCAtMjg2OSw3ICsyODY5LDcgQEAgZnVu YyAoeCAqVnRwbWluZm8pIHRvQygpICh4YyBDLmxpYnhsX3Z0cG1pbmZvLCBlcnIgZXJyb3IpIHsK IAl4Yy51dWlkLCBlcnIgPSB4LlV1aWQudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4 bF92dHBtaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBm bXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIFV1aWQ6ICV2IiwgZXJyKQogCX0KIAlyZXR1cm4g eGMsIG5pbAogfQpAQCAtMjkyMCwxMCArMjkyMCwxMCBAQCBmdW5jICh4ICpWY3B1aW5mbykgZnJv bUMoeGMgKkMubGlieGxfdmNwdWluZm8pIGVycm9yIHsKIAl4LlJ1bm5pbmcgPSBib29sKHhjLnJ1 bm5pbmcpCiAJeC5WY3B1VGltZSA9IHVpbnQ2NCh4Yy52Y3B1X3RpbWUpCiAJaWYgZXJyIDo9IHgu Q3B1bWFwLmZyb21DKCZ4Yy5jcHVtYXApOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQly ZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBDcHVtYXA6ICV2IiwgZXJyKQogCX0K IAlpZiBlcnIgOj0geC5DcHVtYXBTb2Z0LmZyb21DKCZ4Yy5jcHVtYXBfc29mdCk7IGVyciAhPSBu aWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxk IENwdW1hcFNvZnQ6ICV2IiwgZXJyKQogCX0KIAogCXJldHVybiBuaWwKQEAgLTI5NDAsMTIgKzI5 NDAsMTIgQEAgZnVuYyAoeCAqVmNwdWluZm8pIHRvQygpICh4YyBDLmxpYnhsX3ZjcHVpbmZvLCBl cnIgZXJyb3IpIHsKIAl4Yy5jcHVtYXAsIGVyciA9IHguQ3B1bWFwLnRvQygpCiAJaWYgZXJyICE9 IG5pbCB7CiAJCUMubGlieGxfdmNwdWluZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJy CisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBDcHVtYXA6ICV2Iiwg ZXJyKQogCX0KIAl4Yy5jcHVtYXBfc29mdCwgZXJyID0geC5DcHVtYXBTb2Z0LnRvQygpCiAJaWYg ZXJyICE9IG5pbCB7CiAJCUMubGlieGxfdmNwdWluZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4 YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBDcHVtYXBT b2Z0OiAldiIsIGVycikKIAl9CiAJcmV0dXJuIHhjLCBuaWwKIH0KQEAgLTI5NjUsNyArMjk2NSw3 IEBAIGZ1bmMgKHggKlBoeXNpbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9waHlzaW5mbykgZXJyb3Ig ewogCXguTWF4UG9zc2libGVNZm4gPSB1aW50NjQoeGMubWF4X3Bvc3NpYmxlX21mbikKIAl4Lk5y Tm9kZXMgPSB1aW50MzIoeGMubnJfbm9kZXMpCiAJaWYgZXJyIDo9IHguSHdDYXAuZnJvbUMoJnhj Lmh3X2NhcCk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3Jm KCJDb252ZXJ0aW5nIGZpZWxkIEh3Q2FwOiAldiIsIGVycikKIAl9CiAJeC5DYXBIdm0gPSBib29s KHhjLmNhcF9odm0pCiAJeC5DYXBQdiA9IGJvb2woeGMuY2FwX3B2KQpAQCAtMjk5NSw3ICsyOTk1 LDcgQEAgZnVuYyAoeCAqUGh5c2luZm8pIHRvQygpICh4YyBDLmxpYnhsX3BoeXNpbmZvLCBlcnIg ZXJyb3IpIHsKIAl4Yy5od19jYXAsIGVyciA9IHguSHdDYXAudG9DKCkKIAlpZiBlcnIgIT0gbmls IHsKIAkJQy5saWJ4bF9waHlzaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJ cmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEh3Q2FwOiAldiIsIGVycikK IAl9CiAJeGMuY2FwX2h2bSA9IEMuYm9vbCh4LkNhcEh2bSkKIAl4Yy5jYXBfcHYgPSBDLmJvb2wo eC5DYXBQdikKQEAgLTMwNDYsNyArMzA0Niw3IEBAIGZ1bmMgKHggKlZkaXNwbGluZm8pIGZyb21D KHhjICpDLmxpYnhsX3ZkaXNwbGluZm8pIGVycm9yIHsKIAkJeC5Db25uZWN0b3JzID0gbWFrZShb XUNvbm5lY3RvcmluZm8sIG51bUNvbm5lY3RvcnMpCiAJCWZvciBpLCB2IDo9IHJhbmdlIGNDb25u ZWN0b3JzIHsKIAkJCWlmIGVyciA6PSB4LkNvbm5lY3RvcnNbaV0uZnJvbUMoJnYpOyBlcnIgIT0g bmlsIHsKLQkJCQlyZXR1cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcg ZmllbGQgQ29ubmVjdG9yczogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBAIC0zMTA0LDcgKzMx MDQsNyBAQCBmdW5jICh4ICpQY21pbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9wY21pbmZvKSBlcnJv ciB7CiAJCXguU3RyZWFtcyA9IG1ha2UoW11TdHJlYW1pbmZvLCBudW1Wc25kU3RyZWFtcykKIAkJ Zm9yIGksIHYgOj0gcmFuZ2UgY1N0cmVhbXMgewogCQkJaWYgZXJyIDo9IHguU3RyZWFtc1tpXS5m cm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJCXJldHVybiBlcnIKKwkJCQlyZXR1cm4gZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBTdHJlYW1zOiAldiIsIGVycikKIAkJCX0KIAkJfQogCX0K QEAgLTMxNDMsNyArMzE0Myw3IEBAIGZ1bmMgKHggKlZzbmRpbmZvKSBmcm9tQyh4YyAqQy5saWJ4 bF92c25kaW5mbykgZXJyb3IgewogCQl4LlBjbXMgPSBtYWtlKFtdUGNtaW5mbywgbnVtVnNuZFBj bXMpCiAJCWZvciBpLCB2IDo9IHJhbmdlIGNQY21zIHsKIAkJCWlmIGVyciA6PSB4LlBjbXNbaV0u ZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCQlyZXR1cm4gZXJyCisJCQkJcmV0dXJuIGZtdC5F cnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgUGNtczogJXYiLCBlcnIpCiAJCQl9CiAJCX0KIAl9CkBA IC0zMzA0LDI2ICszMzA0LDI2IEBAIGZ1bmMgKHggKlNjaGVkQ3JlZGl0MlBhcmFtcykgdG9DKCkg KHhjIEMubGlieGxfc2NoZWRfY3JlZGl0Ml9wYXJhbXMsIGVyciBlcnJvcikKIGZ1bmMgKHggKkRv bWFpblJlbXVzSW5mbykgZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX3JlbXVzX2luZm8pIGVycm9y IHsKIAl4LkludGVydmFsID0gaW50KHhjLmludGVydmFsKQogCWlmIGVyciA6PSB4LkFsbG93VW5z YWZlLmZyb21DKCZ4Yy5hbGxvd191bnNhZmUpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgor CQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBBbGxvd1Vuc2FmZTogJXYiLCBl cnIpCiAJfQogCWlmIGVyciA6PSB4LkJsYWNraG9sZS5mcm9tQygmeGMuYmxhY2tob2xlKTsgZXJy ICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcg ZmllbGQgQmxhY2tob2xlOiAldiIsIGVycikKIAl9CiAJaWYgZXJyIDo9IHguQ29tcHJlc3Npb24u ZnJvbUMoJnhjLmNvbXByZXNzaW9uKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0 dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcgZmllbGQgQ29tcHJlc3Npb246ICV2IiwgZXJyKQog CX0KIAlpZiBlcnIgOj0geC5OZXRidWYuZnJvbUMoJnhjLm5ldGJ1Zik7IGVyciAhPSBuaWwgewot CQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIE5ldGJ1 ZjogJXYiLCBlcnIpCiAJfQogCXguTmV0YnVmc2NyaXB0ID0gQy5Hb1N0cmluZyh4Yy5uZXRidWZz Y3JpcHQpCiAJaWYgZXJyIDo9IHguRGlza2J1Zi5mcm9tQygmeGMuZGlza2J1Zik7IGVyciAhPSBu aWwgewotCQlyZXR1cm4gZXJyCisJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxk IERpc2tidWY6ICV2IiwgZXJyKQogCX0KIAlpZiBlcnIgOj0geC5Db2xvLmZyb21DKCZ4Yy5jb2xv KTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZl cnRpbmcgZmllbGQgQ29sbzogJXYiLCBlcnIpCiAJfQogCWlmIGVyciA6PSB4LlVzZXJzcGFjZUNv bG9Qcm94eS5mcm9tQygmeGMudXNlcnNwYWNlX2NvbG9fcHJveHkpOyBlcnIgIT0gbmlsIHsKLQkJ cmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBVc2Vyc3Bh Y2VDb2xvUHJveHk6ICV2IiwgZXJyKQogCX0KIAogCXJldHVybiBuaWwKQEAgLTMzMzUsMjIgKzMz MzUsMjIgQEAgZnVuYyAoeCAqRG9tYWluUmVtdXNJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9kb21h aW5fcmVtdXNfaW5mbywgZXJyIGVycm9yKSB7CiAJeGMuYWxsb3dfdW5zYWZlLCBlcnIgPSB4LkFs bG93VW5zYWZlLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxfZG9tYWluX3JlbXVz X2luZm9fZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBBbGxvd1Vuc2FmZTogJXYiLCBlcnIpCiAJfQogCXhjLmJs YWNraG9sZSwgZXJyID0geC5CbGFja2hvbGUudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5s aWJ4bF9kb21haW5fcmVtdXNfaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJ cmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIEJsYWNraG9sZTogJXYiLCBl cnIpCiAJfQogCXhjLmNvbXByZXNzaW9uLCBlcnIgPSB4LkNvbXByZXNzaW9uLnRvQygpCiAJaWYg ZXJyICE9IG5pbCB7CiAJCUMubGlieGxfZG9tYWluX3JlbXVzX2luZm9fZGlzcG9zZSgmeGMpCi0J CXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVs ZCBDb21wcmVzc2lvbjogJXYiLCBlcnIpCiAJfQogCXhjLm5ldGJ1ZiwgZXJyID0geC5OZXRidWYu dG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fcmVtdXNfaW5mb19kaXNw b3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252 ZXJ0aW5nIGZpZWxkIE5ldGJ1ZjogJXYiLCBlcnIpCiAJfQogCWlmIHguTmV0YnVmc2NyaXB0ICE9 ICIiIHsKIAkJeGMubmV0YnVmc2NyaXB0ID0gQy5DU3RyaW5nKHguTmV0YnVmc2NyaXB0KQpAQCAt MzM1OCwyOCArMzM1OCwyOCBAQCBmdW5jICh4ICpEb21haW5SZW11c0luZm8pIHRvQygpICh4YyBD LmxpYnhsX2RvbWFpbl9yZW11c19pbmZvLCBlcnIgZXJyb3IpIHsKIAl4Yy5kaXNrYnVmLCBlcnIg PSB4LkRpc2tidWYudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fcmVt dXNfaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQu RXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIERpc2tidWY6ICV2IiwgZXJyKQogCX0KIAl4Yy5jb2xv LCBlcnIgPSB4LkNvbG8udG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5f cmVtdXNfaW5mb19kaXNwb3NlKCZ4YykKLQkJcmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBm bXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIENvbG86ICV2IiwgZXJyKQogCX0KIAl4Yy51c2Vy c3BhY2VfY29sb19wcm94eSwgZXJyID0geC5Vc2Vyc3BhY2VDb2xvUHJveHkudG9DKCkKIAlpZiBl cnIgIT0gbmlsIHsKIAkJQy5saWJ4bF9kb21haW5fcmVtdXNfaW5mb19kaXNwb3NlKCZ4YykKLQkJ cmV0dXJuIHhjLCBlcnIKKwkJcmV0dXJuIHhjLCBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxk IFVzZXJzcGFjZUNvbG9Qcm94eTogJXYiLCBlcnIpCiAJfQogCXJldHVybiB4YywgbmlsCiB9CiAK IGZ1bmMgKHggKkV2ZW50KSBmcm9tQyh4YyAqQy5saWJ4bF9ldmVudCkgZXJyb3IgewogCWlmIGVy ciA6PSB4LkxpbmsuZnJvbUMoJnhjLmxpbmspOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgor CQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBMaW5rOiAldiIsIGVycikKIAl9 CiAJeC5Eb21pZCA9IERvbWlkKHhjLmRvbWlkKQogCWlmIGVyciA6PSB4LkRvbXV1aWQuZnJvbUMo JnhjLmRvbXV1aWQpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorCQlyZXR1cm4gZm10LkVy cm9yZigiQ29udmVydGluZyBmaWVsZCBEb211dWlkOiAldiIsIGVycikKIAl9CiAJeC5Gb3JVc2Vy ID0gdWludDY0KHhjLmZvcl91c2VyKQogCXguVHlwZSA9IEV2ZW50VHlwZSh4Yy5fdHlwZSkKQEAg LTMzODcsMTkgKzMzODcsMTkgQEAgZnVuYyAoeCAqRXZlbnQpIGZyb21DKHhjICpDLmxpYnhsX2V2 ZW50KSBlcnJvciB7CiAJY2FzZSBFdmVudFR5cGVEb21haW5TaHV0ZG93bjoKIAkJdmFyIHR5cGVE b21haW5TaHV0ZG93biBFdmVudFR5cGVVbmlvbkRvbWFpblNodXRkb3duCiAJCWlmIGVyciA6PSB0 eXBlRG9tYWluU2h1dGRvd24uZnJvbUMoeGMpOyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIK KwkJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIHR5cGVEb21haW5TaHV0ZG93 bjogJXYiLCBlcnIpCiAJCX0KIAkJeC5UeXBlVW5pb24gPSB0eXBlRG9tYWluU2h1dGRvd24KIAlj YXNlIEV2ZW50VHlwZURpc2tFamVjdDoKIAkJdmFyIHR5cGVEaXNrRWplY3QgRXZlbnRUeXBlVW5p b25EaXNrRWplY3QKIAkJaWYgZXJyIDo9IHR5cGVEaXNrRWplY3QuZnJvbUMoeGMpOyBlcnIgIT0g bmlsIHsKLQkJCXJldHVybiBlcnIKKwkJCXJldHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZp ZWxkIHR5cGVEaXNrRWplY3Q6ICV2IiwgZXJyKQogCQl9CiAJCXguVHlwZVVuaW9uID0gdHlwZURp c2tFamVjdAogCWNhc2UgRXZlbnRUeXBlT3BlcmF0aW9uQ29tcGxldGU6CiAJCXZhciB0eXBlT3Bl cmF0aW9uQ29tcGxldGUgRXZlbnRUeXBlVW5pb25PcGVyYXRpb25Db21wbGV0ZQogCQlpZiBlcnIg Oj0gdHlwZU9wZXJhdGlvbkNvbXBsZXRlLmZyb21DKHhjKTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1 cm4gZXJyCisJCQlyZXR1cm4gZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCB0eXBlT3BlcmF0 aW9uQ29tcGxldGU6ICV2IiwgZXJyKQogCQl9CiAJCXguVHlwZVVuaW9uID0gdHlwZU9wZXJhdGlv bkNvbXBsZXRlCiAJZGVmYXVsdDoKQEAgLTM0MjcsNyArMzQyNyw3IEBAIGZ1bmMgKHggKkV2ZW50 VHlwZVVuaW9uRGlza0VqZWN0KSBmcm9tQyh4YyAqQy5saWJ4bF9ldmVudCkgZXJyb3IgewogCXRt cCA6PSAoKkMubGlieGxfZXZlbnRfdHlwZV91bmlvbl9kaXNrX2VqZWN0KSh1bnNhZmUuUG9pbnRl cigmeGMudVswXSkpCiAJeC5WZGV2ID0gQy5Hb1N0cmluZyh0bXAudmRldikKIAlpZiBlcnIgOj0g eC5EaXNrLmZyb21DKCZ0bXAuZGlzayk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCisJCXJl dHVybiBmbXQuRXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIERpc2s6ICV2IiwgZXJyKQogCX0KIAly ZXR1cm4gbmlsCiB9CkBAIC0zNDQ3LDEzICszNDQ3LDEzIEBAIGZ1bmMgKHggKkV2ZW50KSB0b0Mo KSAoeGMgQy5saWJ4bF9ldmVudCwgZXJyIGVycm9yKSB7CiAJeGMubGluaywgZXJyID0geC5MaW5r LnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJCUMubGlieGxfZXZlbnRfZGlzcG9zZSgmeGMpCi0J CXJldHVybiB4YywgZXJyCisJCXJldHVybiB4YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVs ZCBMaW5rOiAldiIsIGVycikKIAl9CiAJeGMuZG9taWQgPSBDLmxpYnhsX2RvbWlkKHguRG9taWQp CiAJeGMuZG9tdXVpZCwgZXJyID0geC5Eb211dWlkLnRvQygpCiAJaWYgZXJyICE9IG5pbCB7CiAJ CUMubGlieGxfZXZlbnRfZGlzcG9zZSgmeGMpCi0JCXJldHVybiB4YywgZXJyCisJCXJldHVybiB4 YywgZm10LkVycm9yZigiQ29udmVydGluZyBmaWVsZCBEb211dWlkOiAldiIsIGVycikKIAl9CiAJ eGMuZm9yX3VzZXIgPSBDLnVpbnQ2NF90KHguRm9yVXNlcikKIAl4Yy5fdHlwZSA9IEMubGlieGxf ZXZlbnRfdHlwZSh4LlR5cGUpCkBAIC0zNDgxLDcgKzM0ODEsNyBAQCBmdW5jICh4ICpFdmVudCkg dG9DKCkgKHhjIEMubGlieGxfZXZlbnQsIGVyciBlcnJvcikgewogCQlkaXNrX2VqZWN0LmRpc2ss IGVyciA9IHRtcC5EaXNrLnRvQygpCiAJCWlmIGVyciAhPSBuaWwgewogCQkJQy5saWJ4bF9ldmVu dF9kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJCQlyZXR1cm4geGMsIGZtdC5FcnJv cmYoIkNvbnZlcnRpbmcgZmllbGQgRGlzazogJXYiLCBlcnIpCiAJCX0KIAkJZGlza19lamVjdEJ5 dGVzIDo9IEMuR29CeXRlcyh1bnNhZmUuUG9pbnRlcigmZGlza19lamVjdCksIEMuc2l6ZW9mX2xp YnhsX2V2ZW50X3R5cGVfdW5pb25fZGlza19lamVjdCkKIAkJY29weSh4Yy51WzpdLCBkaXNrX2Vq ZWN0Qnl0ZXMpCkBAIC0zNTI2LDEzICszNTI2LDEzIEBAIGZ1bmMgKHggKlBzckh3SW5mbykgZnJv bUMoeGMgKkMubGlieGxfcHNyX2h3X2luZm8pIGVycm9yIHsKIAljYXNlIFBzckZlYXRUeXBlQ2F0 OgogCQl2YXIgdHlwZUNhdCBQc3JId0luZm9UeXBlVW5pb25DYXQKIAkJaWYgZXJyIDo9IHR5cGVD YXQuZnJvbUMoeGMpOyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwkJCXJldHVybiBmbXQu RXJyb3JmKCJDb252ZXJ0aW5nIGZpZWxkIHR5cGVDYXQ6ICV2IiwgZXJyKQogCQl9CiAJCXguVHlw ZVVuaW9uID0gdHlwZUNhdAogCWNhc2UgUHNyRmVhdFR5cGVNYmE6CiAJCXZhciB0eXBlTWJhIFBz ckh3SW5mb1R5cGVVbmlvbk1iYQogCQlpZiBlcnIgOj0gdHlwZU1iYS5mcm9tQyh4Yyk7IGVyciAh PSBuaWwgewotCQkJcmV0dXJuIGVycgorCQkJcmV0dXJuIGZtdC5FcnJvcmYoIkNvbnZlcnRpbmcg ZmllbGQgdHlwZU1iYTogJXYiLCBlcnIpCiAJCX0KIAkJeC5UeXBlVW5pb24gPSB0eXBlTWJhCiAJ ZGVmYXVsdDoKLS0gCjIuMjQuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94 ZW4tZGV2ZWw=