From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.groups.io with SMTP id smtpd.web11.11512.1623154393335203769 for ; Tue, 08 Jun 2021 05:13:13 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=GoybD6JP; spf=pass (domain: redhat.com, ip: 216.205.24.124, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1623154392; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SJQgKmsFLKLyMpxeGzSWfw+VMsY8ES9TRAHx1BsiIc8=; b=GoybD6JP2+aQ9OaUYXxseBs2cx88nJLS1isLSN4HOdo6LjlNzHM59VhopPyTERlydouNNF 6TZZfWElA+ryqf8VjSyuX1T53fC9hiGpXVmfY4hKQEBCH8Dh3PXFtVQHcdxJpm/38zVo3G vD1KUGDCsmO1xzAXrXEMjIxYWI8Xxa4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-421-hSk-1E-TNKyQMdDo6VybIg-1; Tue, 08 Jun 2021 08:13:11 -0400 X-MC-Unique: hSk-1E-TNKyQMdDo6VybIg-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E50858030A0; Tue, 8 Jun 2021 12:13:09 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-27.ams2.redhat.com [10.36.113.27]) by smtp.corp.redhat.com (Postfix) with ESMTP id AB197620DE; Tue, 8 Jun 2021 12:13:08 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Jiaxin Wu , Maciej Rabeda , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Siyuan Fu Subject: [PUBLIC edk2 PATCH v2 05/10] NetworkPkg/IScsiDxe: fix potential integer overflow in IScsiBinToHex() Date: Tue, 8 Jun 2021 14:12:54 +0200 Message-Id: <20210608121259.32451-6-lersek@redhat.com> In-Reply-To: <20210608121259.32451-1-lersek@redhat.com> References: <20210608121259.32451-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=lersek@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Q29uc2lkZXJpbmcgSVNjc2lCaW5Ub0hleCgpOgoKPiAgIGlmICgoKCpIZXhMZW5ndGgpIC0gMykg PCBCaW5MZW5ndGggKiAyKSB7Cj4gICAgICpIZXhMZW5ndGggPSBCaW5MZW5ndGggKiAyICsgMzsK PiAgIH0KCnRoZSBmb2xsb3dpbmcgc3ViZXhwcmVzc2lvbnMgYXJlIHByb2JsZW1hdGljOgoKICAo KkhleExlbmd0aCkgLSAzCiAgQmluTGVuZ3RoICogMgogIEJpbkxlbmd0aCAqIDIgKyAzCgpUaGUg Zmlyc3Qgb25lIG1heSB3cmFwIHVuZGVyIHplcm8sIHRoZSBsYXR0ZXIgdHdvIG1heSB3cmFwIG92 ZXIKTUFYX1VJTlQzMi4KClJld3JpdGUgdGhlIGNhbGN1bGF0aW9uIHVzaW5nIFNhZmVJbnRMaWIu CgpXaGlsZSBhdCBpdCwgY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSAiSW5kZXgiIHZhcmlhYmxlIGZy b20gVUlOVE4gdG8gVUlOVDMyLgpUaGUgbGFyZ2VzdCAiSW5kZXgiLWJhc2VkIHZhbHVlIHRoYXQg d2UgY2FsY3VsYXRlIGlzCgogIEluZGV4ICogMiArIDIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh3aXRoIChJbmRleCA9PSBCaW5MZW5ndGgpKQoKQmVjYXVzZSB0aGUgcGF0Y2ggbWFr ZXMKCiAgQmluTGVuZ3RoICogMiArIDMKCnNhZmUgdG8gY2FsY3VsYXRlIGluIFVJTlQzMiwgdXNp bmcgVUlOVDMyIGZvcgoKICBJbmRleCAqIDIgKyAyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAod2l0aCAoSW5kZXggPT0gQmluTGVuZ3RoKSkKCmlzIHNhZmUgdG9vLiBDb25zaXN0ZW50 bHkgdXNpbmcgVUlOVDMyIGltcHJvdmVzIHJlYWRhYmlsaXR5LgoKVGhpcyBwYXRjaCBpcyBiZXN0 IHJldmlld2VkIHdpdGggImdpdCBzaG93IC1XIi4KClRoZSBpbnRlZ2VyIG92ZXJmbG93cyB0aGF0 IHRoaXMgcGF0Y2ggZml4ZXMgYXJlIHRoZW9yZXRpY2FsOyBhIHN1YnNlcXVlbnQKcGF0Y2ggaW4g dGhlIHNlcmllcyB3aWxsIGF1ZGl0IHRoZSBJU2NzaUJpblRvSGV4KCkgY2FsbCBzaXRlcywgYW5k IHNob3cKdGhhdCBub25lIG9mIHRoZW0gY2FuIGZhaWwuCgpDYzogSmlheGluIFd1IDxqaWF4aW4u d3VAaW50ZWwuY29tPgpDYzogTWFjaWVqIFJhYmVkYSA8bWFjaWVqLnJhYmVkYUBsaW51eC5pbnRl bC5jb20+CkNjOiBQaGlsaXBwZSBNYXRoaWV1LURhdWTDqSA8cGhpbG1kQHJlZGhhdC5jb20+CkNj OiBTaXl1YW4gRnUgPHNpeXVhbi5mdUBpbnRlbC5jb20+ClJlZjogaHR0cHM6Ly9idWd6aWxsYS50 aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzU2ClNpZ25lZC1vZmYtYnk6IExhc3psbyBF cnNlayA8bGVyc2VrQHJlZGhhdC5jb20+ClJldmlld2VkLWJ5OiBNYWNpZWogUmFiZWRhIDxtYWNp ZWoucmFiZWRhQGxpbnV4LmludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFBoaWxpcHBlIE1hdGhpZXUt RGF1ZMOpIDxwaGlsbWRAcmVkaGF0LmNvbT4KLS0tCiBOZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3Np RHhlLmluZiB8ICAxICsKIE5ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lJbXBsLmggIHwgIDEgKwog TmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaU1pc2MuaCAgfCAgMSArCiBOZXR3b3JrUGtnL0lTY3Np RHhlL0lTY3NpTWlzYy5jICB8IDE5ICsrKysrKysrKysrKysrKy0tLS0KIDQgZmlsZXMgY2hhbmdl ZCwgMTggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9OZXR3b3Jr UGtnL0lTY3NpRHhlL0lTY3NpRHhlLmluZiBiL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lEeGUu aW5mCmluZGV4IDU0M2M0MDgzMDI2YS4uMWRkZTU2ZDAwY2EyIDEwMDY0NAotLS0gYS9OZXR3b3Jr UGtnL0lTY3NpRHhlL0lTY3NpRHhlLmluZgorKysgYi9OZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3Np RHhlLmluZgpAQCAtNTgsMzggKzU4LDM5IEBAIFtTb3VyY2VzXQogICBJU2NzaVByb3RvLmMNCiAg IElTY3NpUHJvdG8uaA0KIA0KIFtQYWNrYWdlc10NCiAgIE1kZVBrZy9NZGVQa2cuZGVjDQogICBN ZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KICAgQ3J5cHRvUGtnL0NyeXB0b1BrZy5kZWMN CiAgIE5ldHdvcmtQa2cvTmV0d29ya1BrZy5kZWMNCiANCiBbTGlicmFyeUNsYXNzZXNdDQogICBC YXNlQ3J5cHRMaWINCiAgIEJhc2VMaWINCiAgIEJhc2VNZW1vcnlMaWINCiAgIERlYnVnTGliDQog ICBEZXZpY2VQYXRoTGliDQogICBIaWlMaWINCiAgIE1lbW9yeUFsbG9jYXRpb25MaWINCiAgIE5l dExpYg0KICAgUHJpbnRMaWINCisgIFNhZmVJbnRMaWINCiAgIFRjcElvTGliDQogICBVZWZpQm9v dFNlcnZpY2VzVGFibGVMaWINCiAgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQogICBVZWZpSGlpU2Vy dmljZXNMaWINCiAgIFVlZmlMaWINCiAgIFVlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYg0KIA0K IFtQcm90b2NvbHNdDQogICBnRWZpQWNwaVRhYmxlUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAg ICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMjIFN5c3RlbVRhYmxlDQogICBnRWZpRHJpdmVy QmluZGluZ1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX1BST0RVQ0VT DQogICBnRWZpUGNpSW9Qcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09N RVRJTUVTX0NPTlNVTUVTDQogICBnRWZpRGhjcDRQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAg ICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQogICBnRWZpRGhjcDZQcm90b2NvbEd1aWQg ICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQogICBnRWZpRGhj cDRTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNV TUVTDQogICBnRWZpRGhjcDZTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAgICAgICAgICAgIyMg U09NRVRJTUVTX0NPTlNVTUVTDQogICBnRWZpRG5zNFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlk ICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQogICBnRWZpRG5zNFByb3RvY29sR3Vp ZCAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQogICBnRWZp RG5zNlNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NP TlNVTUVTDQogICBnRWZpRG5zNlByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAg IyMgU09NRVRJTUVTX0NPTlNVTUVTDQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9JU2NzaUR4ZS9J U2NzaUltcGwuaCBiL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lJbXBsLmgKaW5kZXggZDg5NWM3 ZmViOTQ3Li5hYzNhMjU3MzBlZmIgMTAwNjQ0Ci0tLSBhL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNj c2lJbXBsLmgKKysrIGIvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaUltcGwuaApAQCAtMjgsMzgg KzI4LDM5IEBAIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50CiAj aW5jbHVkZSA8UHJvdG9jb2wvVGNwNi5oPg0KICNpbmNsdWRlIDxQcm90b2NvbC9JcDRDb25maWcy Lmg+DQogI2luY2x1ZGUgPFByb3RvY29sL0lwNkNvbmZpZy5oPg0KIA0KICNpbmNsdWRlIDxQcm90 b2NvbC9BdXRoZW50aWNhdGlvbkluZm8uaD4NCiAjaW5jbHVkZSA8UHJvdG9jb2wvSVNjc2lJbml0 aWF0b3JOYW1lLmg+DQogI2luY2x1ZGUgPFByb3RvY29sL1Njc2lQYXNzVGhydUV4dC5oPg0KICNp bmNsdWRlIDxQcm90b2NvbC9BZGFwdGVySW5mb3JtYXRpb24uaD4NCiAjaW5jbHVkZSA8UHJvdG9j b2wvTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXIuaD4NCiANCiAjaW5jbHVkZSA8TGlicmFyeS9C YXNlQ3J5cHRMaWIuaD4NCiAjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQogI2luY2x1ZGUg PExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KICNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ DQogI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KICNpbmNsdWRlIDxMaWJyYXJ5 L0hpaUxpYi5oPg0KICNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCiAj aW5jbHVkZSA8TGlicmFyeS9OZXRMaWIuaD4NCiAjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1NhZmVJbnRMaWIuaD4NCiAjaW5jbHVkZSA8TGlicmFyeS9U Y3BJb0xpYi5oPg0KICNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5o Pg0KICNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlIaWlTZXJ2aWNlc0xpYi5oPg0KICNpbmNsdWRlIDxM aWJyYXJ5L1VlZmlMaWIuaD4NCiAjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2Vz VGFibGVMaWIuaD4NCiANCiAjaW5jbHVkZSA8R3VpZC9NZGVNb2R1bGVIaWkuaD4NCiAjaW5jbHVk ZSA8R3VpZC9FdmVudEdyb3VwLmg+DQogI2luY2x1ZGUgPEd1aWQvQWNwaS5oPg0KIA0KICNpbmNs dWRlICJJU2NzaUNvbmZpZ05WRGF0YVN0cnVjLmgiDQogI2luY2x1ZGUgIklTY3NpRHJpdmVyLmgi DQogI2luY2x1ZGUgIklTY3NpUHJvdG8uaCINCiAjaW5jbHVkZSAiSVNjc2lDSEFQLmgiDQogI2lu Y2x1ZGUgIklTY3NpRGhjcC5oIg0KICNpbmNsdWRlICJJU2NzaURoY3A2LmgiDQogDQogI2luY2x1 ZGUgIklTY3NpSWJmdC5oIg0KICNpbmNsdWRlICJJU2NzaU1pc2MuaCINCmRpZmYgLS1naXQgYS9O ZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpTWlzYy5oIGIvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2Nz aU1pc2MuaAppbmRleCA0NmM3MjVhYWIzYTQuLjIzMTQxMzk5M2IwOCAxMDA2NDQKLS0tIGEvTmV0 d29ya1BrZy9JU2NzaUR4ZS9JU2NzaU1pc2MuaAorKysgYi9OZXR3b3JrUGtnL0lTY3NpRHhlL0lT Y3NpTWlzYy5oCkBAIC0xMzQsMzggKzEzNCwzOSBAQCBJU2NzaU1hY0FkZHJUb1N0ciAoCiAqKi8N CiBFRklfU1RBVFVTDQogSVNjc2lBc2NpaVN0clRvSXAgKA0KICAgSU4gIENIQVI4ICAgICAgICAg ICAgICpTdHIsDQogICBJTiAgVUlOVDggICAgICAgICAgICAgSXBNb2RlLA0KICAgT1VUIEVGSV9J UF9BRERSRVNTICAgICpJcA0KICAgKTsNCiANCiAvKioNCiAgIENvbnZlcnQgdGhlIGJpbmFyeSBl bmNvZGVkIGJ1ZmZlciBpbnRvIGEgaGV4YWRlY2ltYWwgZW5jb2RlZCBzdHJpbmcuDQogDQogICBA cGFyYW1baW5dICAgICAgIEJpbkJ1ZmZlciAgIFRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgYmlu YXJ5IGRhdGEuDQogICBAcGFyYW1baW5dICAgICAgIEJpbkxlbmd0aCAgIExlbmd0aCBvZiB0aGUg YmluYXJ5IGJ1ZmZlci4NCiAgIEBwYXJhbVtpbiwgb3V0XSAgSGV4U3RyICAgICAgUG9pbnRlciB0 byB0aGUgc3RyaW5nLg0KICAgQHBhcmFtW2luLCBvdXRdICBIZXhMZW5ndGggICBUaGUgbGVuZ3Ro IG9mIHRoZSBzdHJpbmcuDQogDQogICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFRoZSBi aW5hcnkgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGhleGFkZWNpbWFsIHN0cmluZw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlz IHVwZGF0ZWQuDQogICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMIFRoZSBzdHJpbmcgaXMg dG9vIHNtYWxsLg0KKyAgQHJldHZhbCBFRklfQkFEX0JVRkZFUl9TSVpFICBCaW5MZW5ndGggaXMg dG9vIGxhcmdlIGZvciBoZXggZW5jb2RpbmcuDQogICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBUaGUgSVAgc3RyaW5nIGlzIG1hbGZvcm1hdHRlZC4NCiANCiAqKi8NCiBFRklfU1RBVFVT DQogSVNjc2lCaW5Ub0hleCAoDQogICBJTiAgICAgVUlOVDggICpCaW5CdWZmZXIsDQogICBJTiAg ICAgVUlOVDMyIEJpbkxlbmd0aCwNCiAgIElOIE9VVCBDSEFSOCAgKkhleFN0ciwNCiAgIElOIE9V VCBVSU5UMzIgKkhleExlbmd0aA0KICAgKTsNCiANCiAvKioNCiAgIENvbnZlcnQgdGhlIGhleGFk ZWNpbWFsIHN0cmluZyBpbnRvIGEgYmluYXJ5IGVuY29kZWQgYnVmZmVyLg0KIA0KICAgQHBhcmFt W2luLCBvdXRdICBCaW5CdWZmZXIgICBUaGUgYmluYXJ5IGJ1ZmZlci4NCiAgIEBwYXJhbVtpbiwg b3V0XSAgQmluTGVuZ3RoICAgTGVuZ3RoIG9mIHRoZSBiaW5hcnkgYnVmZmVyLg0KICAgQHBhcmFt W2luXSAgICAgICBIZXhTdHIgICAgICBUaGUgaGV4YWRlY2ltYWwgc3RyaW5nLg0KIA0KICAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBUaGUgaGV4YWRlY2ltYWwgc3RyaW5nIGlzIGNvbnZl cnRlZCBpbnRvIGEgYmluYXJ5DQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2Nz aU1pc2MuYyBiL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lNaXNjLmMKaW5kZXggYjhmZWYzZmY2 ZjVhLi40Mjk4OGUxNWNiMDYgMTAwNjQ0Ci0tLSBhL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lN aXNjLmMKKysrIGIvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaU1pc2MuYwpAQCAtMzAwLDYxICsz MDAsNzIgQEAgSVNjc2lNYWNBZGRyVG9TdHIgKAogICBTdHJpbmcgPSAmU3RyWzMgKiBJbmRleCAt IDFdIDsNCiAgIGlmIChWbGFuSWQgIT0gMCkgew0KICAgICBTdHJpbmcgKz0gVW5pY29kZVNQcmlu dCAoU3RyaW5nLCA2ICogc2l6ZW9mIChDSEFSMTYpLCBMIlxcJTA0eCIsIChVSU5UTikgVmxhbklk KTsNCiAgIH0NCiANCiAgICpTdHJpbmcgPSBMJ1wwJzsNCiB9DQogDQogLyoqDQogICBDb252ZXJ0 IHRoZSBiaW5hcnkgZW5jb2RlZCBidWZmZXIgaW50byBhIGhleGFkZWNpbWFsIGVuY29kZWQgc3Ry aW5nLg0KIA0KICAgQHBhcmFtW2luXSAgICAgICBCaW5CdWZmZXIgICBUaGUgYnVmZmVyIGNvbnRh aW5pbmcgdGhlIGJpbmFyeSBkYXRhLg0KICAgQHBhcmFtW2luXSAgICAgICBCaW5MZW5ndGggICBM ZW5ndGggb2YgdGhlIGJpbmFyeSBidWZmZXIuDQogICBAcGFyYW1baW4sIG91dF0gIEhleFN0ciAg ICAgIFBvaW50ZXIgdG8gdGhlIHN0cmluZy4NCiAgIEBwYXJhbVtpbiwgb3V0XSAgSGV4TGVuZ3Ro ICAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLg0KIA0KICAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICBUaGUgYmluYXJ5IGRhdGEgaXMgY29udmVydGVkIHRvIHRoZSBoZXhhZGVjaW1hbCBz dHJpbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBsZW5ndGggb2Yg dGhlIHN0cmluZyBpcyB1cGRhdGVkLg0KICAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCBU aGUgc3RyaW5nIGlzIHRvbyBzbWFsbC4NCisgIEByZXR2YWwgRUZJX0JBRF9CVUZGRVJfU0laRSAg QmluTGVuZ3RoIGlzIHRvbyBsYXJnZSBmb3IgaGV4IGVuY29kaW5nLg0KICAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgVGhlIElQIHN0cmluZyBpcyBtYWxmb3JtYXR0ZWQuDQogDQogKiov DQogRUZJX1NUQVRVUw0KIElTY3NpQmluVG9IZXggKA0KICAgSU4gICAgIFVJTlQ4ICAqQmluQnVm ZmVyLA0KICAgSU4gICAgIFVJTlQzMiBCaW5MZW5ndGgsDQogICBJTiBPVVQgQ0hBUjggICpIZXhT dHIsDQogICBJTiBPVVQgVUlOVDMyICpIZXhMZW5ndGgNCiAgICkNCiB7DQotICBVSU5UTiBJbmRl eDsNCisgIFVJTlQzMiBIZXhMZW5ndGhNaW47DQorICBVSU5UMzIgSGV4TGVuZ3RoUHJvdmlkZWQ7 DQorICBVSU5UMzIgSW5kZXg7DQogDQogICBpZiAoKEhleFN0ciA9PSBOVUxMKSB8fCAoQmluQnVm ZmVyID09IE5VTEwpIHx8IChCaW5MZW5ndGggPT0gMCkpIHsNCiAgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCiAgIH0NCiANCi0gIGlmICgoKCpIZXhMZW5ndGgpIC0gMykgPCBCaW5M ZW5ndGggKiAyKSB7DQotICAgICpIZXhMZW5ndGggPSBCaW5MZW5ndGggKiAyICsgMzsNCisgIC8v DQorICAvLyBTYWZlbHkgY2FsY3VsYXRlOiBIZXhMZW5ndGhNaW4gOj0gQmluTGVuZ3RoICogMiAr IDMuDQorICAvLw0KKyAgaWYgKFJFVFVSTl9FUlJPUiAoU2FmZVVpbnQzMk11bHQgKEJpbkxlbmd0 aCwgMiwgJkhleExlbmd0aE1pbikpIHx8DQorICAgICAgUkVUVVJOX0VSUk9SIChTYWZlVWludDMy QWRkIChIZXhMZW5ndGhNaW4sIDMsICZIZXhMZW5ndGhNaW4pKSkgew0KKyAgICByZXR1cm4gRUZJ X0JBRF9CVUZGRVJfU0laRTsNCisgIH0NCisNCisgIEhleExlbmd0aFByb3ZpZGVkID0gKkhleExl bmd0aDsNCisgICpIZXhMZW5ndGggPSBIZXhMZW5ndGhNaW47DQorICBpZiAoSGV4TGVuZ3RoUHJv dmlkZWQgPCBIZXhMZW5ndGhNaW4pIHsNCiAgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxM Ow0KICAgfQ0KIA0KLSAgKkhleExlbmd0aCA9IEJpbkxlbmd0aCAqIDIgKyAzOw0KICAgLy8NCiAg IC8vIFByZWZpeCBmb3IgSGV4IFN0cmluZy4NCiAgIC8vDQogICBIZXhTdHJbMF0gPSAnMCc7DQog ICBIZXhTdHJbMV0gPSAneCc7DQogDQogICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBCaW5MZW5n dGg7IEluZGV4KyspIHsNCiAgICAgSGV4U3RyW0luZGV4ICogMiArIDJdID0gSVNjc2lIZXhTdHJp bmdbQmluQnVmZmVyW0luZGV4XSA+PiA0XTsNCiAgICAgSGV4U3RyW0luZGV4ICogMiArIDNdID0g SVNjc2lIZXhTdHJpbmdbQmluQnVmZmVyW0luZGV4XSAmIDB4Zl07DQogICB9DQogDQogICBIZXhT dHJbSW5kZXggKiAyICsgMl0gPSAnXDAnOw0KIA0KICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KIH0N CiANCiANCiAvKioNCiAgIENvbnZlcnQgdGhlIGhleGFkZWNpbWFsIHN0cmluZyBpbnRvIGEgYmlu YXJ5IGVuY29kZWQgYnVmZmVyLg0KLS0gCjIuMTkuMS4zLmczMDI0N2FhNWQyMDEKCgo=