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.web10.2923.1622060854859718477 for ; Wed, 26 May 2021 13:27:35 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=djwK9dgW; 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=1622060854; 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=yreeChcVLfq6yvv4rXHOEa/tK9LIMlGDV48s/EOomfc=; b=djwK9dgWJadys+v/AcqI9JxkW4zPoAXBMxUU1KtozDfKep95UbpbTABaAgoK5mFaPE1P4b VNEidjN0LrDQ2R08hFCdwkNcPAA2HHmCwAtBio7A4n3vIAlReNkRlNaGNjVGYsRcv/cRSp niGabXf19AZ9BcjlSOXtinFjEmDpM+U= 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-535-pXUIMjkzMRKTXv1fyEw7DQ-1; Wed, 26 May 2021 16:27:30 -0400 X-MC-Unique: pXUIMjkzMRKTXv1fyEw7DQ-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 A6EA46D254; Wed, 26 May 2021 20:27:28 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-114-61.ams2.redhat.com [10.36.114.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id 599B569FB5; Wed, 26 May 2021 20:27:26 +0000 (UTC) From: "Laszlo Ersek" To: devel@edk2.groups.io Cc: Andrew Fish , Ard Biesheuvel , Jordan Justen , Leif Lindholm , Michael D Kinney , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 12/43] OvmfPkg/AcpiPlatformDxe: remove the "AcpiPlatformDxe.inf" driver Date: Wed, 26 May 2021 22:14:15 +0200 Message-Id: <20210526201446.12554-13-lersek@redhat.com> In-Reply-To: <20210526201446.12554-1-lersek@redhat.com> References: <20210526201446.12554-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 VGhlICJPdm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm1EeGUuaW5mIiBtb2R1bGUg aXMgbm8gbG9uZ2VyCnJlZmVyZW5jZWQgaW4gYW55IHBsYXRmb3JtIERTQyBmaWxlOyByZW1vdmUg aXQuCgpUaGF0IG9ycGhhbnMgdGhlICJBY3BpUGxhdGZvcm0uYyIsICJRZW11LmMiIGFuZCAiWGVu LmMiIGZpbGVzIGluIHRoZQoiT3ZtZlBrZy9BY3BpUGxhdGZvcm1EeGUvIiBkaXJlY3Rvcnk7IHJl bW92ZSB0aGVtLgoKVGhhdCBpbiB0dXJuIHJlbW92ZXMgdGhlIG9ubHkgZGVmaW5pdGlvbnMgb2Yg dGhlIEluc3RhbGxBY3BpVGFibGUoKSwKUWVtdURldGVjdGVkKCksIFFlbXVJbnN0YWxsQWNwaVRh YmxlKCksIEluc3RhbGxYZW5UYWJsZXMoKSBmdW5jdGlvbnMgaW4KdGhlICJPdm1mUGtnL0FjcGlQ bGF0Zm9ybUR4ZS8iIGRpcmVjdG9yeSwgc28gcmVtb3ZlIHRoZWlyIGRlY2xhcmF0aW9ucwpmcm9t ICJBY3BpUGxhdGZvcm0uaCIuCgpSZW1vdmUgIk92bWZQa2cvQWNwaVBsYXRmb3JtRHhlL1hlbi5j IiBmcm9tIHRoZSAiT3ZtZlBrZzogWGVuLXJlbGF0ZWQKbW9kdWxlcyIgc2VjdGlvbiBvZiAiTWFp bnRhaW5lcnMudHh0IiwgYXMgd2VsbC4KCkNjOiBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29t PgpDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZGIrdGlhbm9jb3JlQGtlcm5lbC5vcmc+CkNjOiBKb3Jk YW4gSnVzdGVuIDxqb3JkYW4ubC5qdXN0ZW5AaW50ZWwuY29tPgpDYzogTGVpZiBMaW5kaG9sbSA8 bGVpZkBudXZpYWluYy5jb20+CkNjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbT4KQ2M6IFBoaWxpcHBlIE1hdGhpZXUtRGF1ZMOpIDxwaGlsbWRAcmVkaGF0LmNv bT4KUmVmOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTIx MjIKU2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4KLS0tCiBP dm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm1EeGUuaW5mIHwgIDY5IC0tLQogTWFp bnRhaW5lcnMudHh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSAtCiBPdm1mUGtn L0FjcGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm0uaCAgICAgIHwgIDI5IC0tCiBPdm1mUGtnL0Fj cGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm0uYyAgICAgIHwgMjY3IC0tLS0tLS0tLS0KIE92bWZQ a2cvQWNwaVBsYXRmb3JtRHhlL1FlbXUuYyAgICAgICAgICAgICAgfCA1MTIgLS0tLS0tLS0tLS0t LS0tLS0tLS0KIE92bWZQa2cvQWNwaVBsYXRmb3JtRHhlL1hlbi5jICAgICAgICAgICAgICAgfCAz MTUgLS0tLS0tLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDExOTMgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvT3ZtZlBrZy9BY3BpUGxhdGZvcm1EeGUvQWNwaVBsYXRmb3JtRHhlLmluZiBiL092 bWZQa2cvQWNwaVBsYXRmb3JtRHhlL0FjcGlQbGF0Zm9ybUR4ZS5pbmYKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDc3NjA3Mjk4Y2JlYS4uMDAwMDAwMDAwMDAwCi0tLSBhL092bWZQa2cv QWNwaVBsYXRmb3JtRHhlL0FjcGlQbGF0Zm9ybUR4ZS5pbmYKKysrIC9kZXYvbnVsbApAQCAtMSw2 OSArMCwwIEBACi0jIyBAZmlsZQ0KLSMgIE9WTUYgQUNQSSBQbGF0Zm9ybSBEcml2ZXINCi0jDQot IyAgQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KLSMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQotIw0KLSMjDQotDQotW0RlZmluZXNdDQotICBJTkZfVkVSU0lPTiAgICAgICAg ICAgICAgICAgICAgPSAweDAwMDEwMDA1DQotICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAg ICAgPSBBY3BpUGxhdGZvcm0NCi0gIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDQ5 OTcwMzMxLUUzRkEtNDYzNy05QUJDLTNCNzg2ODY3Njk3MA0KLSAgTU9EVUxFX1RZUEUgICAgICAg ICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KLSAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAg ICAgID0gMS4wDQotICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBBY3BpUGxhdGZv cm1FbnRyeVBvaW50DQotDQotIw0KLSMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3Ig cmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZCBieSB0aGUgYnVpbGQgdG9vbHMuDQotIw0K LSMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJDDQotIw0KLQ0K LVtTb3VyY2VzXQ0KLSAgQWNwaVBsYXRmb3JtLmMNCi0gIEFjcGlQbGF0Zm9ybS5oDQotICBCb290 U2NyaXB0LmMNCi0gIEVudHJ5UG9pbnQuYw0KLSAgUGNpRGVjb2RpbmcuYw0KLSAgUWVtdS5jDQot ICBRZW11RndDZmdBY3BpLmMNCi0gIFhlbi5jDQotDQotW1BhY2thZ2VzXQ0KLSAgTWRlTW9kdWxl UGtnL01kZU1vZHVsZVBrZy5kZWMNCi0gIE1kZVBrZy9NZGVQa2cuZGVjDQotICBPdm1mUGtnL092 bWZQa2cuZGVjDQotICBVZWZpQ3B1UGtnL1VlZmlDcHVQa2cuZGVjDQotDQotW0xpYnJhcnlDbGFz c2VzXQ0KLSAgQmFzZUxpYg0KLSAgQmFzZU1lbW9yeUxpYg0KLSAgRGVidWdMaWINCi0gIER4ZVNl cnZpY2VzVGFibGVMaWINCi0gIE1lbW9yeUFsbG9jYXRpb25MaWINCi0gIE9yZGVyZWRDb2xsZWN0 aW9uTGliDQotICBQY2RMaWINCi0gIFFlbXVGd0NmZ0xpYg0KLSAgUWVtdUZ3Q2ZnUzNMaWINCi0g IFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KLSAgVWVmaURyaXZlckVudHJ5UG9pbnQNCi0gIFhl blBsYXRmb3JtTGliDQotDQotW1Byb3RvY29sc10NCi0gIGdFZmlBY3BpVGFibGVQcm90b2NvbEd1 aWQgICAgICAgICAgICAgICAgICAgICAjIFBST1RPQ09MIEFMV0FZU19DT05TVU1FRA0KLSAgZ0Vm aUZpcm13YXJlVm9sdW1lMlByb3RvY29sR3VpZCAgICAgICAgICAgICAgICMgUFJPVE9DT0wgU09N RVRJTUVTX0NPTlNVTUVEDQotICBnRWZpUGNpSW9Qcm90b2NvbEd1aWQgICAgICAgICAgICAgICAg ICAgICAgICAgIyBQUk9UT0NPTCBTT01FVElNRVNfQ09OU1VNRUQNCi0NCi1bR3VpZHNdDQotICBn Um9vdEJyaWRnZXNDb25uZWN0ZWRFdmVudEdyb3VwR3VpZA0KLQ0KLVtQY2RdDQotICBnRWZpTWRl TW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkQWNwaVRhYmxlU3RvcmFnZUZpbGUNCi0gIGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lEaXNhYmxlQnVzRW51bWVyYXRpb24NCi0g IGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1TG9jYWxBcGljQmFzZUFkZHJlc3MNCi0g IGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZDgyNTlMZWdhY3lNb2RlRWRnZUxldmVsDQot ICBnVWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZC5QY2RPdm1mRmRCYXNlQWRkcmVzcw0KLQ0KLVtE ZXBleF0NCi0gIGdFZmlBY3BpVGFibGVQcm90b2NvbEd1aWQNCmRpZmYgLS1naXQgYS9NYWludGFp bmVycy50eHQgYi9NYWludGFpbmVycy50eHQKaW5kZXggNTBjODdkMWFjMjlhLi44MjAwOGEwMDQ2 YzYgMTAwNjQ0Ci0tLSBhL01haW50YWluZXJzLnR4dAorKysgYi9NYWludGFpbmVycy50eHQKQEAg LTQ4MSwxMyArNDgxLDEyIEBAIEY6IE92bWZQa2cvTGlicmFyeS9UY2cyUGh5c2ljYWxQcmVzZW5j ZUxpYiovCiBGOiBPdm1mUGtnL1BsYXRmb3JtUGVpL0NsZWFyQ2FjaGUuYw0KIEY6IE92bWZQa2cv VGNnLw0KIFI6IE1hcmMtQW5kcsOpIEx1cmVhdSA8bWFyY2FuZHJlLmx1cmVhdUByZWRoYXQuY29t Pg0KIFI6IFN0ZWZhbiBCZXJnZXIgPHN0ZWZhbmJAbGludXguaWJtLmNvbT4NCiANCiBPdm1mUGtn OiBYZW4tcmVsYXRlZCBtb2R1bGVzDQotRjogT3ZtZlBrZy9BY3BpUGxhdGZvcm1EeGUvWGVuLmMN CiBGOiBPdm1mUGtnL0luY2x1ZGUvR3VpZC9YZW5CdXNSb290RGV2aWNlLmgNCiBGOiBPdm1mUGtn L0luY2x1ZGUvR3VpZC9YZW5JbmZvLmgNCiBGOiBPdm1mUGtnL0luY2x1ZGUvSW5kdXN0cnlTdGFu ZGFyZC9YZW4vDQogRjogT3ZtZlBrZy9JbmNsdWRlL0xpYnJhcnkvWGVuSHlwZXJjYWxsTGliLmgN CiBGOiBPdm1mUGtnL0luY2x1ZGUvTGlicmFyeS9YZW5Jb01taW9MaWIuaA0KIEY6IE92bWZQa2cv SW5jbHVkZS9MaWJyYXJ5L1hlblBsYXRmb3JtTGliLmgNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL0Fj cGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm0uaCBiL092bWZQa2cvQWNwaVBsYXRmb3JtRHhlL0Fj cGlQbGF0Zm9ybS5oCmluZGV4IGQ5OGI3OWJhYWI0MC4uYmQ0YzI2ZjA3ZmNkIDEwMDY0NAotLS0g YS9Pdm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm0uaAorKysgYi9Pdm1mUGtnL0Fj cGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm0uaApAQCAtMTYsNDEgKzE2LDEyIEBAIHR5cGVkZWYg c3RydWN0IHsKICAgRUZJX1BDSV9JT19QUk9UT0NPTCAqUGNpSW87DQogICBVSU5UNjQgICAgICAg ICAgICAgIFBjaUF0dHJpYnV0ZXM7DQogfSBPUklHSU5BTF9BVFRSSUJVVEVTOw0KIA0KIHR5cGVk ZWYgc3RydWN0IFMzX0NPTlRFWFQgUzNfQ09OVEVYVDsNCiANCi1FRklfU1RBVFVTDQotRUZJQVBJ DQotSW5zdGFsbEFjcGlUYWJsZSAoDQotICBJTiAgIEVGSV9BQ1BJX1RBQkxFX1BST1RPQ09MICAg ICAgICpBY3BpUHJvdG9jb2wsDQotICBJTiAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAg ICpBY3BpVGFibGVCdWZmZXIsDQotICBJTiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg IEFjcGlUYWJsZUJ1ZmZlclNpemUsDQotICBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICpUYWJsZUtleQ0KLSAgKTsNCi0NCi1CT09MRUFODQotUWVtdURldGVjdGVkICgNCi0gIFZP SUQNCi0gICk7DQotDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLVFlbXVJbnN0YWxsQWNwaVRhYmxl ICgNCi0gIElOICAgRUZJX0FDUElfVEFCTEVfUFJPVE9DT0wgICAgICAgKkFjcGlQcm90b2NvbCwN Ci0gIElOICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKkFjcGlUYWJsZUJ1ZmZlciwN Ci0gIElOICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQWNwaVRhYmxlQnVmZmVyU2l6 ZSwNCi0gIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlS2V5DQotICAp Ow0KLQ0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1JbnN0YWxsWGVuVGFibGVzICgNCi0gIElOICAg RUZJX0FDUElfVEFCTEVfUFJPVE9DT0wgICAgICAgKkFjcGlQcm90b2NvbA0KLSAgKTsNCi0NCiBF RklfU1RBVFVTDQogRUZJQVBJDQogSW5zdGFsbFFlbXVGd0NmZ1RhYmxlcyAoDQogICBJTiAgIEVG SV9BQ1BJX1RBQkxFX1BST1RPQ09MICAgICAgICpBY3BpUHJvdG9jb2wNCiAgICk7DQogDQpkaWZm IC0tZ2l0IGEvT3ZtZlBrZy9BY3BpUGxhdGZvcm1EeGUvQWNwaVBsYXRmb3JtLmMgYi9Pdm1mUGtn L0FjcGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggZWZiYmZhYjg5ZDJiLi4wMDAwMDAwMDAwMDAKLS0tIGEvT3ZtZlBrZy9BY3BpUGxhdGZv cm1EeGUvQWNwaVBsYXRmb3JtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoq IEBmaWxlDQotICBPVk1GIEFDUEkgUGxhdGZvcm0gRHJpdmVyDQotDQotICBDb3B5cmlnaHQgKGMp IDIwMDggLSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQotICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KLQ0KLSoq Lw0KLQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ICAgICAgICAgICAgICAgICAvLyBB U1NFUlRfRUZJX0VSUk9SKCkNCi0jaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFi bGVMaWIuaD4gLy8gZ0JTDQotI2luY2x1ZGUgPExpYnJhcnkvWGVuUGxhdGZvcm1MaWIuaD4gICAg ICAgICAgIC8vIFhlbkRldGVjdGVkKCkNCi0jaW5jbHVkZSA8UHJvdG9jb2wvRmlybXdhcmVWb2x1 bWUyLmg+ICAgICAgICAgLy8gZ0VmaUZpcm13YXJlVm9sdW1lMlByb3RvY29sLi4uDQotDQotI2lu Y2x1ZGUgIkFjcGlQbGF0Zm9ybS5oIg0KLQ0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1JbnN0YWxs QWNwaVRhYmxlICgNCi0gIElOICAgRUZJX0FDUElfVEFCTEVfUFJPVE9DT0wgICAgICAgKkFjcGlQ cm90b2NvbCwNCi0gIElOICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKkFjcGlUYWJs ZUJ1ZmZlciwNCi0gIElOICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQWNwaVRhYmxl QnVmZmVyU2l6ZSwNCi0gIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxl S2V5DQotICApDQotew0KLSAgcmV0dXJuIEFjcGlQcm90b2NvbC0+SW5zdGFsbEFjcGlUYWJsZSAo DQotICAgICAgICAgICAgICAgICAgICAgICAgIEFjcGlQcm90b2NvbCwNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgQWNwaVRhYmxlQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBB Y3BpVGFibGVCdWZmZXJTaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUtleQ0K LSAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLX0NCi0NCi0NCi0vKioNCi0gIExvY2F0ZSB0 aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYSBwcm90b2NvbC4gIElmIHRoZSBwcm90b2NvbCByZXF1ZXN0 ZWQgaXMgYW4NCi0gIEZWIHByb3RvY29sLCB0aGVuIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBG ViB0aGF0IGNvbnRhaW5zIHRoZSBBQ1BJIHRhYmxlDQotICBzdG9yYWdlIGZpbGUuDQotDQotICBA cGFyYW0gIEluc3RhbmNlICAgICAgUmV0dXJuIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGluc3RhbmNl IG9mIHRoZSBwcm90b2NvbA0KLQ0KLSAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IGZ1bmN0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQotICBAcmV0dXJuIEVGSV9OT1RfRk9V TkQgICAgICAgICBUaGUgcHJvdG9jb2wgY291bGQgbm90IGJlIGxvY2F0ZWQuDQotICBAcmV0dXJu IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8g ZmluZCB0aGUgcHJvdG9jb2wuDQotDQotKiovDQotRUZJX1NUQVRVUw0KLUxvY2F0ZUZ2SW5zdGFu Y2VXaXRoVGFibGVzICgNCi0gIE9VVCBFRklfRklSTVdBUkVfVk9MVU1FMl9QUk9UT0NPTCAqKklu c3RhbmNlDQotICApDQotew0KLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KLSAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCi0gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mSGFuZGxlczsNCi0gIEVGSV9GVl9G SUxFVFlQRSAgICAgICAgICAgICAgIEZpbGVUeXBlOw0KLSAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgRnZTdGF0dXM7DQotICBFRklfRlZfRklMRV9BVFRSSUJVVEVTICAgICAgICBBdHRy aWJ1dGVzOw0KLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCi0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KLSAgRUZJX0ZJUk1XQVJFX1ZPTFVNRTJf UFJPVE9DT0wgKkZ2SW5zdGFuY2U7DQotDQotICBGdlN0YXR1cyA9IDA7DQotDQotICAvLw0KLSAg Ly8gTG9jYXRlIHByb3RvY29sLg0KLSAgLy8NCi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxl QnVmZmVyICgNCi0gICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCi0gICAgICAgICAgICAg ICAgICAgJmdFZmlGaXJtd2FyZVZvbHVtZTJQcm90b2NvbEd1aWQsDQotICAgICAgICAgICAgICAg ICAgIE5VTEwsDQotICAgICAgICAgICAgICAgICAgICZOdW1iZXJPZkhhbmRsZXMsDQotICAgICAg ICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCi0gICAgICAgICAgICAgICAgICAgKTsNCi0gIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAgLy8NCi0gICAgLy8gRGVmaW5lZCBlcnJvcnMg YXQgdGhpcyB0aW1lIGFyZSBub3QgZm91bmQgYW5kIG91dCBvZiByZXNvdXJjZXMuDQotICAgIC8v DQotICAgIHJldHVybiBTdGF0dXM7DQotICB9DQotDQotICAvLw0KLSAgLy8gTG9va2luZyBmb3Ig RlYgd2l0aCBBQ1BJIHN0b3JhZ2UgZmlsZQ0KLSAgLy8NCi0gIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IE51bWJlck9mSGFuZGxlczsgSW5kZXgrKykgew0KLSAgICAvLw0KLSAgICAvLyBHZXQgdGhl IHByb3RvY29sIG9uIHRoaXMgaGFuZGxlDQotICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBmYWlsIGJl Y2F1c2Ugb2YgTG9jYXRlSGFuZGxlQnVmZmVyDQotICAgIC8vDQotICAgIFN0YXR1cyA9IGdCUy0+ SGFuZGxlUHJvdG9jb2wgKA0KLSAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRl eF0sDQotICAgICAgICAgICAgICAgICAgICAgJmdFZmlGaXJtd2FyZVZvbHVtZTJQcm90b2NvbEd1 aWQsDQotICAgICAgICAgICAgICAgICAgICAgKFZPSUQqKikgJkZ2SW5zdGFuY2UNCi0gICAgICAg ICAgICAgICAgICAgICApOw0KLSAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KLQ0KLSAg ICAvLw0KLSAgICAvLyBTZWUgaWYgaXQgaGFzIHRoZSBBQ1BJIHN0b3JhZ2UgZmlsZQ0KLSAgICAv Lw0KLSAgICBTdGF0dXMgPSBGdkluc3RhbmNlLT5SZWFkRmlsZSAoDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgRnZJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoRUZJ X0dVSUQqKVBjZEdldFB0ciAoUGNkQWNwaVRhYmxlU3RvcmFnZUZpbGUpLA0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNpemUs DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVUeXBlLA0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICZBdHRyaWJ1dGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZG dlN0YXR1cw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQotDQotICAgIC8vDQotICAg IC8vIElmIHdlIGZvdW5kIGl0LCB0aGVuIHdlIGFyZSBkb25lDQotICAgIC8vDQotICAgIGlmIChT dGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsNCi0gICAgICAqSW5zdGFuY2UgPSBGdkluc3RhbmNlOw0K LSAgICAgIGJyZWFrOw0KLSAgICB9DQotICB9DQotDQotICAvLw0KLSAgLy8gT3VyIGV4aXQgc3Rh dHVzIGlzIGRldGVybWluZWQgYnkgdGhlIHN1Y2Nlc3Mgb2YgdGhlIHByZXZpb3VzIG9wZXJhdGlv bnMNCi0gIC8vIElmIHRoZSBwcm90b2NvbCB3YXMgZm91bmQsIEluc3RhbmNlIGFscmVhZHkgcG9p bnRzIHRvIGl0Lg0KLSAgLy8NCi0NCi0gIC8vDQotICAvLyBGcmVlIGFueSBhbGxvY2F0ZWQgYnVm ZmVycw0KLSAgLy8NCi0gIGdCUy0+RnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQotDQotICByZXR1 cm4gU3RhdHVzOw0KLX0NCi0NCi0NCi0vKioNCi0gIEZpbmQgQUNQSSB0YWJsZXMgaW4gYW4gRlYg YW5kIGluc3RhbGwgdGhlbS4NCi0NCi0gIFRoaXMgaXMgbm93IGEgZmFsbC1iYWNrIHBhdGguIE5v cm1hbGx5LCB3ZSB3aWxsIHNlYXJjaCBmb3IgdGFibGVzIHByb3ZpZGVkDQotICBieSB0aGUgVk1N IGZpcnN0Lg0KLQ0KLSAgSWYgdGhhdCBmYWlscywgd2UgdXNlIHRoaXMgZnVuY3Rpb24gdG8gbG9h ZCB0aGUgQUNQSSB0YWJsZXMgZnJvbSBhbiBGVi4gVGhlDQotICBzb3VyY2VzIGZvciB0aGUgRlYg YmFzZWQgdGFibGVzIGlzIGxvY2F0ZWQgdW5kZXIgT3ZtZlBrZy9BY3BpVGFibGVzLg0KLQ0KLSAg QHBhcmFtICBBY3BpVGFibGUgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXINCi0NCi0qKi8N Ci1FRklfU1RBVFVTDQotRUZJQVBJDQotSW5zdGFsbE92bWZGdlRhYmxlcyAoDQotICBJTiAgRUZJ X0FDUElfVEFCTEVfUFJPVE9DT0wgICAgICpBY3BpVGFibGUNCi0gICkNCi17DQotICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KLSAgRUZJX0ZJUk1XQVJFX1ZP TFVNRTJfUFJPVE9DT0wgICAgICAgICpGd1ZvbDsNCi0gIElOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbnN0YW5jZTsNCi0gIEVGSV9BQ1BJX0NPTU1PTl9IRUFERVIgICAgICAg ICAgICAgICAqQ3VycmVudFRhYmxlOw0KLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRhYmxlSGFuZGxlOw0KLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZ2U3RhdHVzOw0KLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRh YmxlU2l6ZTsNCi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOw0K LSAgRUZJX0FDUElfVEFCTEVfSU5TVEFMTF9BQ1BJX1RBQkxFICAgIFRhYmxlSW5zdGFsbEZ1bmN0 aW9uOw0KLQ0KLSAgSW5zdGFuY2UgICAgID0gMDsNCi0gIEN1cnJlbnRUYWJsZSA9IE5VTEw7DQot ICBUYWJsZUhhbmRsZSAgPSAwOw0KLQ0KLSAgaWYgKFFlbXVEZXRlY3RlZCAoKSkgew0KLSAgICBU YWJsZUluc3RhbGxGdW5jdGlvbiA9IFFlbXVJbnN0YWxsQWNwaVRhYmxlOw0KLSAgfSBlbHNlIHsN Ci0gICAgVGFibGVJbnN0YWxsRnVuY3Rpb24gPSBJbnN0YWxsQWNwaVRhYmxlOw0KLSAgfQ0KLQ0K LSAgLy8NCi0gIC8vIHNldCBGd1ZvbCAoYW5kIHVzZSBhbiBBU1NFUlQoKSBiZWxvdykgdG8gc3Vw cHJlc3MgaW5jb3JyZWN0DQotICAvLyBjb21waWxlci9hbmFseXplciB3YXJuaW5ncw0KLSAgLy8N Ci0gIEZ3Vm9sID0gTlVMTDsNCi0gIC8vDQotICAvLyBMb2NhdGUgdGhlIGZpcm13YXJlIHZvbHVt ZSBwcm90b2NvbA0KLSAgLy8NCi0gIFN0YXR1cyA9IExvY2F0ZUZ2SW5zdGFuY2VXaXRoVGFibGVz ICgmRndWb2wpOw0KLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICByZXR1cm4gRUZJ X0FCT1JURUQ7DQotICB9DQotICBBU1NFUlQgKEZ3Vm9sICE9IE5VTEwpOw0KLQ0KLSAgLy8NCi0g IC8vIFJlYWQgdGFibGVzIGZyb20gdGhlIHN0b3JhZ2UgZmlsZS4NCi0gIC8vDQotICB3aGlsZSAo U3RhdHVzID09IEVGSV9TVUNDRVNTKSB7DQotDQotICAgIFN0YXR1cyA9IEZ3Vm9sLT5SZWFkU2Vj dGlvbiAoDQotICAgICAgICAgICAgICAgICAgICAgIEZ3Vm9sLA0KLSAgICAgICAgICAgICAgICAg ICAgICAoRUZJX0dVSUQqKVBjZEdldFB0ciAoUGNkQWNwaVRhYmxlU3RvcmFnZUZpbGUpLA0KLSAg ICAgICAgICAgICAgICAgICAgICBFRklfU0VDVElPTl9SQVcsDQotICAgICAgICAgICAgICAgICAg ICAgIEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAoVk9JRCoqKSAmQ3VycmVudFRh YmxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAmU2l6ZSwNCi0gICAgICAgICAgICAgICAgICAg ICAgJkZ2U3RhdHVzDQotICAgICAgICAgICAgICAgICAgICAgICk7DQotICAgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQotICAgICAgLy8NCi0gICAgICAvLyBBZGQgdGhlIHRhYmxlDQotICAg ICAgLy8NCi0gICAgICBUYWJsZUhhbmRsZSA9IDA7DQotDQotICAgICAgVGFibGVTaXplID0gKChF RklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgKikgQ3VycmVudFRhYmxlKS0+TGVuZ3RoOw0KLSAg ICAgIEFTU0VSVCAoU2l6ZSA+PSBUYWJsZVNpemUpOw0KLQ0KLSAgICAgIC8vDQotICAgICAgLy8g SW5zdGFsbCBBQ1BJIHRhYmxlDQotICAgICAgLy8NCi0gICAgICBTdGF0dXMgPSBUYWJsZUluc3Rh bGxGdW5jdGlvbiAoDQotICAgICAgICAgICAgICAgICBBY3BpVGFibGUsDQotICAgICAgICAgICAg ICAgICBDdXJyZW50VGFibGUsDQotICAgICAgICAgICAgICAgICBUYWJsZVNpemUsDQotICAgICAg ICAgICAgICAgICAmVGFibGVIYW5kbGUNCi0gICAgICAgICAgICAgICAgICk7DQotDQotICAgICAg Ly8NCi0gICAgICAvLyBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgUmVhZFNlY3Rpb24NCi0gICAg ICAvLw0KLSAgICAgIGdCUy0+RnJlZVBvb2wgKEN1cnJlbnRUYWJsZSk7DQotDQotICAgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICAgICAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KLSAg ICAgIH0NCi0NCi0gICAgICAvLw0KLSAgICAgIC8vIEluY3JlbWVudCB0aGUgaW5zdGFuY2UNCi0g ICAgICAvLw0KLSAgICAgIEluc3RhbmNlKys7DQotICAgICAgQ3VycmVudFRhYmxlID0gTlVMTDsN Ci0gICAgfQ0KLSAgfQ0KLQ0KLSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KLX0NCi0NCi0vKioNCi0g IEVmZmVjdGl2ZSBlbnRyeXBvaW50IG9mIEFjcGkgUGxhdGZvcm0gZHJpdmVyLg0KLQ0KLSAgQHBh cmFtICBJbWFnZUhhbmRsZQ0KLSAgQHBhcmFtICBTeXN0ZW1UYWJsZQ0KLQ0KLSAgQHJldHVybiBF RklfU1VDQ0VTUw0KLSAgQHJldHVybiBFRklfTE9BRF9FUlJPUg0KLSAgQHJldHVybiBFRklfT1VU X09GX1JFU09VUkNFUw0KLQ0KLSoqLw0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1JbnN0YWxsQWNw aVRhYmxlcyAoDQotICBJTiAgIEVGSV9BQ1BJX1RBQkxFX1BST1RPQ09MICAgICAgICpBY3BpVGFi bGUNCi0gICkNCi17DQotICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCi0NCi0gIGlmIChYZW5EZXRlY3RlZCAoKSkgew0KLSAgICBTdGF0dXMgPSBJbnN0YWxsWGVu VGFibGVzIChBY3BpVGFibGUpOw0KLSAgfSBlbHNlIHsNCi0gICAgU3RhdHVzID0gSW5zdGFsbFFl bXVGd0NmZ1RhYmxlcyAoQWNwaVRhYmxlKTsNCi0gIH0NCi0NCi0gIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCi0gICAgU3RhdHVzID0gSW5zdGFsbE92bWZGdlRhYmxlcyAoQWNwaVRhYmxlKTsN Ci0gIH0NCi0NCi0gIHJldHVybiBTdGF0dXM7DQotfQ0KLQ0KZGlmZiAtLWdpdCBhL092bWZQa2cv QWNwaVBsYXRmb3JtRHhlL1FlbXUuYyBiL092bWZQa2cvQWNwaVBsYXRmb3JtRHhlL1FlbXUuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjYzQ2YjcxODZhLi4wMDAwMDAwMDAwMDAK LS0tIGEvT3ZtZlBrZy9BY3BpUGxhdGZvcm1EeGUvUWVtdS5jCisrKyAvZGV2L251bGwKQEAgLTEs NTEyICswLDAgQEAKLS8qKiBAZmlsZQ0KLSAgT1ZNRiBBQ1BJIFFFTVUgc3VwcG9ydA0KLQ0KLSAg Q29weXJpZ2h0IChjKSAyMDA4IC0gMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KLQ0KLSAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIFJlZCBIYXQsIElu Yy4NCi0NCi0gIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQot DQotKiovDQotDQotI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvQWNwaS5oPiAgICAgICAgLy8g RUZJX0FDUElfMV8wX0lPX0FQSUNfU1RSVUNUVVJFDQotI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1l bW9yeUxpYi5oPiAgICAgICAgLy8gQ29weU1lbSgpDQotI2luY2x1ZGUgPExpYnJhcnkvRGVidWdM aWIuaD4gICAgICAgICAgICAgLy8gREVCVUcoKQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L0R4ZVNlcnZp Y2VzVGFibGVMaWIuaD4gIC8vIGdEUw0KLSNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRp b25MaWIuaD4gIC8vIEFsbG9jYXRlUG9vbCgpDQotI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+ ICAgICAgICAgICAgICAgLy8gUGNkR2V0MTYoKQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L1FlbXVGd0Nm Z0xpYi5oPiAgICAgICAgIC8vIFFlbXVGd0NmZ0lzQXZhaWxhYmxlKCkNCi0NCi0jaW5jbHVkZSAi QWNwaVBsYXRmb3JtLmgiDQotDQotQk9PTEVBTg0KLVFlbXVEZXRlY3RlZCAoDQotICBWT0lEDQot ICApDQotew0KLSAgaWYgKCFRZW11RndDZmdJc0F2YWlsYWJsZSAoKSkgew0KLSAgICByZXR1cm4g RkFMU0U7DQotICB9DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotU1RBVElDDQotVUlO VE4NCi1Db3VudEJpdHMxNiAoDQotICBVSU5UMTYgTWFzaw0KLSAgKQ0KLXsNCi0gIC8vDQotICAv LyBGb3IgYWxsIE4gPj0gMSwgTiBiaXRzIGFyZSBlbm91Z2ggdG8gcmVwcmVzZW50IHRoZSBudW1i ZXIgb2YgYml0cyBzZXQNCi0gIC8vIGFtb25nIE4gYml0cy4gSXQncyB0cnVlIGZvciBOID09IDEu IFdoZW4gYWRkaW5nIGEgbmV3IGJpdCAoTiA6PSBOKzEpLA0KLSAgLy8gdGhlIG1heGltdW0gbnVt YmVyIG9mIHBvc3NpYmx5IHNldCBiaXRzIGluY3JlYXNlcyBieSBvbmUsIHdoaWxlIHRoZQ0KLSAg Ly8gcmVwcmVzZW50YWJsZSBtYXhpbXVtIGRvdWJsZXMuDQotICAvLw0KLSAgTWFzayA9ICgoTWFz ayAmIDB4QUFBQSkgPj4gMSkgKyAoTWFzayAmIDB4NTU1NSk7DQotICBNYXNrID0gKChNYXNrICYg MHhDQ0NDKSA+PiAyKSArIChNYXNrICYgMHgzMzMzKTsNCi0gIE1hc2sgPSAoKE1hc2sgJiAweEYw RjApID4+IDQpICsgKE1hc2sgJiAweDBGMEYpOw0KLSAgTWFzayA9ICgoTWFzayAmIDB4RkYwMCkg Pj4gOCkgKyAoTWFzayAmIDB4MDBGRik7DQotDQotICByZXR1cm4gTWFzazsNCi19DQotDQotDQot U1RBVElDDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLVFlbXVJbnN0YWxsQWNwaU1hZHRUYWJsZSAo DQotICBJTiAgIEVGSV9BQ1BJX1RBQkxFX1BST1RPQ09MICAgICAgICpBY3BpUHJvdG9jb2wsDQot ICBJTiAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICpBY3BpVGFibGVCdWZmZXIsDQot ICBJTiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEFjcGlUYWJsZUJ1ZmZlclNpemUs DQotICBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZUtleQ0KLSAgKQ0K LXsNCi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDcHVDb3VudDsNCi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQY2lMaW5rSXNvQ291bnQ7DQotICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3QnVmZmVyU2l6ZTsNCi0gIEVGSV9BQ1BJXzFf MF9NVUxUSVBMRV9BUElDX0RFU0NSSVBUSU9OX1RBQkxFX0hFQURFUiAqTWFkdDsNCi0gIEVGSV9B Q1BJXzFfMF9QUk9DRVNTT1JfTE9DQUxfQVBJQ19TVFJVQ1RVUkUgICAgICAgICAqTG9jYWxBcGlj Ow0KLSAgRUZJX0FDUElfMV8wX0lPX0FQSUNfU1RSVUNUVVJFICAgICAgICAgICAgICAgICAgICAg ICpJb0FwaWM7DQotICBFRklfQUNQSV8xXzBfSU5URVJSVVBUX1NPVVJDRV9PVkVSUklERV9TVFJV Q1RVUkUgICAgKklzbzsNCi0gIEVGSV9BQ1BJXzFfMF9MT0NBTF9BUElDX05NSV9TVFJVQ1RVUkUg ICAgICAgICAgICAgICAqTG9jYWxBcGljTm1pOw0KLSAgVk9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQdHI7DQotICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9vcDsNCi0gIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQotDQotICBBU1NF UlQgKEFjcGlUYWJsZUJ1ZmZlclNpemUgPj0gc2l6ZW9mIChFRklfQUNQSV9ERVNDUklQVElPTl9I RUFERVIpKTsNCi0NCi0gIFFlbXVGd0NmZ1NlbGVjdEl0ZW0gKFFlbXVGd0NmZ0l0ZW1TbXBDcHVD b3VudCk7DQotICBDcHVDb3VudCA9IFFlbXVGd0NmZ1JlYWQxNiAoKTsNCi0gIEFTU0VSVCAoQ3B1 Q291bnQgPj0gMSk7DQotDQotICAvLw0KLSAgLy8gU2V0IExldmVsLXRpZ2dlcmVkLCBBY3RpdmUg SGlnaCBmb3IgdGhlc2UgaWRlbnRpdHkgbWFwcGVkIElSUXMuIFRoZSBiaXRzZXQNCi0gIC8vIGNv cnJlc3BvbmRzIHRvIHRoZSB1bmlvbiBvZiBhbGwgcG9zc2libGUgaW50ZXJydXB0IGFzc2lnbm1l bnRzIGZvciB0aGUgTE5LQSwNCi0gIC8vIExOS0IsIExOS0MsIExOS0QgUENJIGludGVycnVwdCBs aW5lcy4gU2VlIHRoZSBEU0RULg0KLSAgLy8NCi0gIFBjaUxpbmtJc29Db3VudCA9IENvdW50Qml0 czE2IChQY2RHZXQxNiAoUGNkODI1OUxlZ2FjeU1vZGVFZGdlTGV2ZWwpKTsNCi0NCi0gIE5ld0J1 ZmZlclNpemUgPSAxICAgICAgICAgICAgICAgICAgICAgKiBzaXplb2YgKCpNYWR0KSArDQotICAg ICAgICAgICAgICAgICAgQ3B1Q291bnQgICAgICAgICAgICAgICogc2l6ZW9mICgqTG9jYWxBcGlj KSArDQotICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mICgq SW9BcGljKSArDQotICAgICAgICAgICAgICAgICAgKDEgKyBQY2lMaW5rSXNvQ291bnQpICogc2l6 ZW9mICgqSXNvKSArDQotICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICog c2l6ZW9mICgqTG9jYWxBcGljTm1pKTsNCi0NCi0gIE1hZHQgPSBBbGxvY2F0ZVBvb2wgKE5ld0J1 ZmZlclNpemUpOw0KLSAgaWYgKE1hZHQgPT0gTlVMTCkgew0KLSAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQotICB9DQotDQotICBDb3B5TWVtICgmKE1hZHQtPkhlYWRlciksIEFjcGlU YWJsZUJ1ZmZlciwgc2l6ZW9mIChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIpKTsNCi0gIE1h ZHQtPkhlYWRlci5MZW5ndGggICAgPSAoVUlOVDMyKSBOZXdCdWZmZXJTaXplOw0KLSAgTWFkdC0+ TG9jYWxBcGljQWRkcmVzcyA9IFBjZEdldDMyIChQY2RDcHVMb2NhbEFwaWNCYXNlQWRkcmVzcyk7 DQotICBNYWR0LT5GbGFncyAgICAgICAgICAgID0gRUZJX0FDUElfMV8wX1BDQVRfQ09NUEFUOw0K LSAgUHRyID0gTWFkdCArIDE7DQotDQotICBMb2NhbEFwaWMgPSBQdHI7DQotICBmb3IgKExvb3Ag PSAwOyBMb29wIDwgQ3B1Q291bnQ7ICsrTG9vcCkgew0KLSAgICBMb2NhbEFwaWMtPlR5cGUgICAg ICAgICAgICA9IEVGSV9BQ1BJXzFfMF9QUk9DRVNTT1JfTE9DQUxfQVBJQzsNCi0gICAgTG9jYWxB cGljLT5MZW5ndGggICAgICAgICAgPSBzaXplb2YgKCpMb2NhbEFwaWMpOw0KLSAgICBMb2NhbEFw aWMtPkFjcGlQcm9jZXNzb3JJZCA9IChVSU5UOCkgTG9vcDsNCi0gICAgTG9jYWxBcGljLT5BcGlj SWQgICAgICAgICAgPSAoVUlOVDgpIExvb3A7DQotICAgIExvY2FsQXBpYy0+RmxhZ3MgICAgICAg ICAgID0gMTsgLy8gZW5hYmxlZA0KLSAgICArK0xvY2FsQXBpYzsNCi0gIH0NCi0gIFB0ciA9IExv Y2FsQXBpYzsNCi0NCi0gIElvQXBpYyA9IFB0cjsNCi0gIElvQXBpYy0+VHlwZSAgICAgICAgICAg ICA9IEVGSV9BQ1BJXzFfMF9JT19BUElDOw0KLSAgSW9BcGljLT5MZW5ndGggICAgICAgICAgID0g c2l6ZW9mICgqSW9BcGljKTsNCi0gIElvQXBpYy0+SW9BcGljSWQgICAgICAgICA9IChVSU5UOCkg Q3B1Q291bnQ7DQotICBJb0FwaWMtPlJlc2VydmVkICAgICAgICAgPSBFRklfQUNQSV9SRVNFUlZF RF9CWVRFOw0KLSAgSW9BcGljLT5Jb0FwaWNBZGRyZXNzICAgID0gMHhGRUMwMDAwMDsNCi0gIElv QXBpYy0+U3lzdGVtVmVjdG9yQmFzZSA9IDB4MDAwMDAwMDA7DQotICBQdHIgPSBJb0FwaWMgKyAx Ow0KLQ0KLSAgLy8NCi0gIC8vIElSUTAgKDgyNTQgVGltZXIpID0+IElSUTIgKFBJQykgSW50ZXJy dXB0IFNvdXJjZSBPdmVycmlkZSBTdHJ1Y3R1cmUNCi0gIC8vDQotICBJc28gPSBQdHI7DQotICBJ c28tPlR5cGUgICAgICAgICAgICAgICAgICAgICAgICA9IEVGSV9BQ1BJXzFfMF9JTlRFUlJVUFRf U09VUkNFX09WRVJSSURFOw0KLSAgSXNvLT5MZW5ndGggICAgICAgICAgICAgICAgICAgICAgPSBz aXplb2YgKCpJc28pOw0KLSAgSXNvLT5CdXMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAw OyAvLyBJU0ENCi0gIElzby0+U291cmNlICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDsgLy8g SVJRMA0KLSAgSXNvLT5HbG9iYWxTeXN0ZW1JbnRlcnJ1cHRWZWN0b3IgPSAweDAwMDAwMDAyOw0K LSAgSXNvLT5GbGFncyAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA7IC8vIENvbmZvcm1z IHRvIHNwZWNzIG9mIHRoZSBidXMNCi0gICsrSXNvOw0KLQ0KLSAgLy8NCi0gIC8vIFNldCBMZXZl bC10cmlnZ2VyZWQsIEFjdGl2ZSBIaWdoIGZvciBhbGwgcG9zc2libGUgUENJIGxpbmsgdGFyZ2V0 cy4NCi0gIC8vDQotICBmb3IgKExvb3AgPSAwOyBMb29wIDwgMTY7ICsrTG9vcCkgew0KLSAgICBp ZiAoKFBjZEdldDE2IChQY2Q4MjU5TGVnYWN5TW9kZUVkZ2VMZXZlbCkgJiAoMSA8PCBMb29wKSkg PT0gMCkgew0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICB9DQotICAgIElzby0+VHlwZSAgICAgICAg ICAgICAgICAgICAgICAgID0gRUZJX0FDUElfMV8wX0lOVEVSUlVQVF9TT1VSQ0VfT1ZFUlJJREU7 DQotICAgIElzby0+TGVuZ3RoICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mICgqSXNvKTsN Ci0gICAgSXNvLT5CdXMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwOyAvLyBJU0ENCi0g ICAgSXNvLT5Tb3VyY2UgICAgICAgICAgICAgICAgICAgICAgPSAoVUlOVDgpIExvb3A7DQotICAg IElzby0+R2xvYmFsU3lzdGVtSW50ZXJydXB0VmVjdG9yID0gKFVJTlQzMikgTG9vcDsNCi0gICAg SXNvLT5GbGFncyAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMEQ7IC8vIExldmVsLXRyaWdn ZXJlZCwgQWN0aXZlIEhpZ2gNCi0gICAgKytJc287DQotICB9DQotICBBU1NFUlQgKA0KLSAgICAo VUlOVE4pIChJc28gLSAoRUZJX0FDUElfMV8wX0lOVEVSUlVQVF9TT1VSQ0VfT1ZFUlJJREVfU1RS VUNUVVJFICopUHRyKSA9PQ0KLSAgICAgIDEgKyBQY2lMaW5rSXNvQ291bnQNCi0gICAgKTsNCi0g IFB0ciA9IElzbzsNCi0NCi0gIExvY2FsQXBpY05taSA9IFB0cjsNCi0gIExvY2FsQXBpY05taS0+ VHlwZSAgICAgICAgICAgID0gRUZJX0FDUElfMV8wX0xPQ0FMX0FQSUNfTk1JOw0KLSAgTG9jYWxB cGljTm1pLT5MZW5ndGggICAgICAgICAgPSBzaXplb2YgKCpMb2NhbEFwaWNObWkpOw0KLSAgTG9j YWxBcGljTm1pLT5BY3BpUHJvY2Vzc29ySWQgPSAweEZGOyAvLyBhcHBsaWVzIHRvIGFsbCBwcm9j ZXNzb3JzDQotICAvLw0KLSAgLy8gcG9sYXJpdHkgYW5kIHRyaWdnZXIgbW9kZSBvZiB0aGUgQVBJ QyBJL08gaW5wdXQgc2lnbmFscyBjb25mb3JtIHRvIHRoZQ0KLSAgLy8gc3BlY2lmaWNhdGlvbnMg b2YgdGhlIGJ1cw0KLSAgLy8NCi0gIExvY2FsQXBpY05taS0+RmxhZ3MgICAgICAgICAgID0gMHgw MDAwOw0KLSAgLy8NCi0gIC8vIExvY2FsIEFQSUMgaW50ZXJydXB0IGlucHV0IExJTlRuIHRvIHdo aWNoIE5NSSBpcyBjb25uZWN0ZWQuDQotICAvLw0KLSAgTG9jYWxBcGljTm1pLT5Mb2NhbEFwaWNJ bnRpICAgPSAweDAxOw0KLSAgUHRyID0gTG9jYWxBcGljTm1pICsgMTsNCi0NCi0gIEFTU0VSVCAo KFVJTlROKSAoKFVJTlQ4ICopUHRyIC0gKFVJTlQ4ICopTWFkdCkgPT0gTmV3QnVmZmVyU2l6ZSk7 DQotICBTdGF0dXMgPSBJbnN0YWxsQWNwaVRhYmxlIChBY3BpUHJvdG9jb2wsIE1hZHQsIE5ld0J1 ZmZlclNpemUsIFRhYmxlS2V5KTsNCi0NCi0gIEZyZWVQb29sIChNYWR0KTsNCi0NCi0gIHJldHVy biBTdGF0dXM7DQotfQ0KLQ0KLQ0KLSNwcmFnbWEgcGFjaygxKQ0KLQ0KLXR5cGVkZWYgc3RydWN0 IHsNCi0gIFVJTlQ2NCBCYXNlOw0KLSAgVUlOVDY0IEVuZDsNCi0gIFVJTlQ2NCBMZW5ndGg7DQot fSBQQ0lfV0lORE9XOw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIFBDSV9XSU5ET1cgUGNpV2lu ZG93MzI7DQotICBQQ0lfV0lORE9XIFBjaVdpbmRvdzY0Ow0KLX0gRklSTVdBUkVfREFUQTsNCi0N Ci10eXBlZGVmIHN0cnVjdCB7DQotICBVSU5UOCBCeXRlUHJlZml4Ow0KLSAgVUlOVDggQnl0ZVZh bHVlOw0KLX0gQU1MX0JZVEU7DQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgVUlOVDggICAgTmFt ZU9wOw0KLSAgVUlOVDggICAgUm9vdENoYXI7DQotICBVSU5UOCAgICBOYW1lQ2hhcls0XTsNCi0g IFVJTlQ4ICAgIFBhY2thZ2VPcDsNCi0gIFVJTlQ4ICAgIFBrZ0xlbmd0aDsNCi0gIFVJTlQ4ICAg IE51bUVsZW1lbnRzOw0KLSAgQU1MX0JZVEUgUG0xYUNudFNscFR5cDsNCi0gIEFNTF9CWVRFIFBt MWJDbnRTbHBUeXA7DQotICBBTUxfQllURSBSZXNlcnZlZFsyXTsNCi19IFNZU1RFTV9TVEFURV9Q QUNLQUdFOw0KLQ0KLSNwcmFnbWEgcGFjaygpDQotDQotDQotU1RBVElDDQotRUZJX1NUQVRVUw0K LUVGSUFQSQ0KLVBvcHVsYXRlRndEYXRhKA0KLSAgT1VUICBGSVJNV0FSRV9EQVRBICpGd0RhdGEN Ci0gICkNCi17DQotICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCi0g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtRGVzYzsNCi0gIEVGSV9HQ0RfTUVN T1JZX1NQQUNFX0RFU0NSSVBUT1IgKkFsbERlc2M7DQotDQotICBTdGF0dXMgPSBnRFMtPkdldE1l bW9yeVNwYWNlTWFwICgmTnVtRGVzYywgJkFsbERlc2MpOw0KLSAgaWYgKFN0YXR1cyA9PSBFRklf U1VDQ0VTUykgew0KLSAgICBVSU5UNjQgTm9uTW1pbzMyTWF4RXhjbFRvcDsNCi0gICAgVUlOVDY0 IE1taW8zMk1pbkJhc2U7DQotICAgIFVJTlQ2NCBNbWlvMzJNYXhFeGNsVG9wOw0KLSAgICBVSU5U TiBDdXJEZXNjOw0KLQ0KLSAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQotDQotICAgIE5v bk1taW8zMk1heEV4Y2xUb3AgPSAwOw0KLSAgICBNbWlvMzJNaW5CYXNlID0gQkFTRV80R0I7DQot ICAgIE1taW8zMk1heEV4Y2xUb3AgPSAwOw0KLQ0KLSAgICBmb3IgKEN1ckRlc2MgPSAwOyBDdXJE ZXNjIDwgTnVtRGVzYzsgKytDdXJEZXNjKSB7DQotICAgICAgQ09OU1QgRUZJX0dDRF9NRU1PUllf U1BBQ0VfREVTQ1JJUFRPUiAqRGVzYzsNCi0gICAgICBVSU5UNjQgRXhjbFRvcDsNCi0NCi0gICAg ICBEZXNjID0gJkFsbERlc2NbQ3VyRGVzY107DQotICAgICAgRXhjbFRvcCA9IERlc2MtPkJhc2VB ZGRyZXNzICsgRGVzYy0+TGVuZ3RoOw0KLQ0KLSAgICAgIGlmIChFeGNsVG9wIDw9IChVSU5UNjQp IFBjZEdldDMyIChQY2RPdm1mRmRCYXNlQWRkcmVzcykpIHsNCi0gICAgICAgIHN3aXRjaCAoRGVz Yy0+R2NkTWVtb3J5VHlwZSkgew0KLSAgICAgICAgICBjYXNlIEVmaUdjZE1lbW9yeVR5cGVOb25F eGlzdGVudDoNCi0gICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgICAgY2FzZSBFZmlHY2RN ZW1vcnlUeXBlUmVzZXJ2ZWQ6DQotICAgICAgICAgIGNhc2UgRWZpR2NkTWVtb3J5VHlwZVN5c3Rl bU1lbW9yeToNCi0gICAgICAgICAgICBpZiAoTm9uTW1pbzMyTWF4RXhjbFRvcCA8IEV4Y2xUb3Ap IHsNCi0gICAgICAgICAgICAgIE5vbk1taW8zMk1heEV4Y2xUb3AgPSBFeGNsVG9wOw0KLSAgICAg ICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgICAgY2FzZSBFZmlHY2RN ZW1vcnlUeXBlTWVtb3J5TWFwcGVkSW86DQotICAgICAgICAgICAgaWYgKE1taW8zMk1pbkJhc2Ug PiBEZXNjLT5CYXNlQWRkcmVzcykgew0KLSAgICAgICAgICAgICAgTW1pbzMyTWluQmFzZSA9IERl c2MtPkJhc2VBZGRyZXNzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoTW1pbzMy TWF4RXhjbFRvcCA8IEV4Y2xUb3ApIHsNCi0gICAgICAgICAgICAgIE1taW8zMk1heEV4Y2xUb3Ag PSBFeGNsVG9wOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0NCi0gICAg ICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBBU1NFUlQoMCk7DQotICAgICAgICB9DQotICAg ICAgfQ0KLSAgICB9DQotDQotICAgIGlmIChNbWlvMzJNaW5CYXNlIDwgTm9uTW1pbzMyTWF4RXhj bFRvcCkgew0KLSAgICAgIE1taW8zMk1pbkJhc2UgPSBOb25NbWlvMzJNYXhFeGNsVG9wOw0KLSAg ICB9DQotDQotICAgIGlmIChNbWlvMzJNaW5CYXNlIDwgTW1pbzMyTWF4RXhjbFRvcCkgew0KLSAg ICAgIEZ3RGF0YS0+UGNpV2luZG93MzIuQmFzZSAgID0gTW1pbzMyTWluQmFzZTsNCi0gICAgICBG d0RhdGEtPlBjaVdpbmRvdzMyLkVuZCAgICA9IE1taW8zMk1heEV4Y2xUb3AgLSAxOw0KLSAgICAg IEZ3RGF0YS0+UGNpV2luZG93MzIuTGVuZ3RoID0gTW1pbzMyTWF4RXhjbFRvcCAtIE1taW8zMk1p bkJhc2U7DQotDQotICAgICAgRndEYXRhLT5QY2lXaW5kb3c2NC5CYXNlICAgPSAwOw0KLSAgICAg IEZ3RGF0YS0+UGNpV2luZG93NjQuRW5kICAgID0gMDsNCi0gICAgICBGd0RhdGEtPlBjaVdpbmRv dzY0Lkxlbmd0aCA9IDA7DQotDQotICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQotICAgIH0N Ci0NCi0gICAgRnJlZVBvb2wgKEFsbERlc2MpOw0KLSAgfQ0KLQ0KLSAgREVCVUcgKCgNCi0gICAg REVCVUdfSU5GTywNCi0gICAgIkFDUEkgUGNpV2luZG93MzI6IEJhc2U9MHglMDhseCBFbmQ9MHgl MDhseCBMZW5ndGg9MHglMDhseFxuIiwNCi0gICAgRndEYXRhLT5QY2lXaW5kb3czMi5CYXNlLA0K LSAgICBGd0RhdGEtPlBjaVdpbmRvdzMyLkVuZCwNCi0gICAgRndEYXRhLT5QY2lXaW5kb3czMi5M ZW5ndGgNCi0gICAgKSk7DQotICBERUJVRyAoKA0KLSAgICBERUJVR19JTkZPLA0KLSAgICAiQUNQ SSBQY2lXaW5kb3c2NDogQmFzZT0weCUwOGx4IEVuZD0weCUwOGx4IExlbmd0aD0weCUwOGx4XG4i LA0KLSAgICBGd0RhdGEtPlBjaVdpbmRvdzY0LkJhc2UsDQotICAgIEZ3RGF0YS0+UGNpV2luZG93 NjQuRW5kLA0KLSAgICBGd0RhdGEtPlBjaVdpbmRvdzY0Lkxlbmd0aA0KLSAgICApKTsNCi0NCi0g IHJldHVybiBTdGF0dXM7DQotfQ0KLQ0KLQ0KLVNUQVRJQw0KLVZPSUQNCi1FRklBUEkNCi1HZXRT dXNwZW5kU3RhdGVzICgNCi0gIFVJTlROICAgICAgICAgICAgICAgICpTdXNwZW5kVG9SYW1TaXpl LA0KLSAgU1lTVEVNX1NUQVRFX1BBQ0tBR0UgKlN1c3BlbmRUb1JhbSwNCi0gIFVJTlROICAgICAg ICAgICAgICAgICpTdXNwZW5kVG9EaXNrU2l6ZSwNCi0gIFNZU1RFTV9TVEFURV9QQUNLQUdFICpT dXNwZW5kVG9EaXNrDQotICApDQotew0KLSAgU1RBVElDIENPTlNUIFNZU1RFTV9TVEFURV9QQUNL QUdFIFRlbXBsYXRlID0gew0KLSAgICAweDA4LCAgICAgICAgICAgICAgICAgICAvLyBOYW1lT3AN Ci0gICAgJ1xcJywgICAgICAgICAgICAgICAgICAgLy8gUm9vdENoYXINCi0gICAgeyAnXycsICdT JywgJ3gnLCAnXycgfSwgLy8gTmFtZUNoYXJbNF0NCi0gICAgMHgxMiwgICAgICAgICAgICAgICAg ICAgLy8gUGFja2FnZU9wDQotICAgIDB4MEEsICAgICAgICAgICAgICAgICAgIC8vIFBrZ0xlbmd0 aA0KLSAgICAweDA0LCAgICAgICAgICAgICAgICAgICAvLyBOdW1FbGVtZW50cw0KLSAgICB7IDB4 MEEsIDB4MDAgfSwgICAgICAgICAvLyBQbTFhQ250U2xwVHlwDQotICAgIHsgMHgwQSwgMHgwMCB9 LCAgICAgICAgIC8vIFBtMWJDbnRTbHBUeXAgLS0gd2UgZG9uJ3Qgc3VwcG9ydCBpdA0KLSAgICB7 ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNlcnZlZFsyXQ0KLSAgICAgIHsgMHgwQSwgMHgw MCB9LA0KLSAgICAgIHsgMHgwQSwgMHgwMCB9DQotICAgIH0NCi0gIH07DQotICBSRVRVUk5fU1RB VFVTICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KLSAgRklSTVdBUkVfQ09ORklHX0lURU0g ICAgICAgICAgICAgIEZ3Q2ZnSXRlbTsNCi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGd0NmZ1NpemU7DQotICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lz dGVtU3RhdGVzWzZdOw0KLQ0KLSAgLy8NCi0gIC8vIGNvbmZpZ3VyZSBkZWZhdWx0cw0KLSAgLy8N Ci0gICpTdXNwZW5kVG9SYW1TaXplID0gc2l6ZW9mIFRlbXBsYXRlOw0KLSAgQ29weU1lbSAoU3Vz cGVuZFRvUmFtLCAmVGVtcGxhdGUsIHNpemVvZiBUZW1wbGF0ZSk7DQotICBTdXNwZW5kVG9SYW0t Pk5hbWVDaGFyWzJdICAgICAgICAgICAgID0gJzMnOyAvLyBTMw0KLSAgU3VzcGVuZFRvUmFtLT5Q bTFhQ250U2xwVHlwLkJ5dGVWYWx1ZSA9IDE7ICAgLy8gUElJWDQ6IFNUUg0KLQ0KLSAgKlN1c3Bl bmRUb0Rpc2tTaXplID0gc2l6ZW9mIFRlbXBsYXRlOw0KLSAgQ29weU1lbSAoU3VzcGVuZFRvRGlz aywgJlRlbXBsYXRlLCBzaXplb2YgVGVtcGxhdGUpOw0KLSAgU3VzcGVuZFRvRGlzay0+TmFtZUNo YXJbMl0gICAgICAgICAgICAgPSAnNCc7IC8vIFM0DQotICBTdXNwZW5kVG9EaXNrLT5QbTFhQ250 U2xwVHlwLkJ5dGVWYWx1ZSA9IDI7ICAgLy8gUElJWDQ6IFBPU0NMDQotDQotICAvLw0KLSAgLy8g Y2hlY2sgZm9yIG92ZXJyaWRlcw0KLSAgLy8NCi0gIFN0YXR1cyA9IFFlbXVGd0NmZ0ZpbmRGaWxl ICgiZXRjL3N5c3RlbS1zdGF0ZXMiLCAmRndDZmdJdGVtLCAmRndDZmdTaXplKTsNCi0gIGlmIChT dGF0dXMgIT0gUkVUVVJOX1NVQ0NFU1MgfHwgRndDZmdTaXplICE9IHNpemVvZiBTeXN0ZW1TdGF0 ZXMpIHsNCi0gICAgREVCVUcgKChERUJVR19JTkZPLCAiQUNQSSB1c2luZyBTMy9TNCBkZWZhdWx0 c1xuIikpOw0KLSAgICByZXR1cm47DQotICB9DQotICBRZW11RndDZmdTZWxlY3RJdGVtIChGd0Nm Z0l0ZW0pOw0KLSAgUWVtdUZ3Q2ZnUmVhZEJ5dGVzIChzaXplb2YgU3lzdGVtU3RhdGVzLCBTeXN0 ZW1TdGF0ZXMpOw0KLQ0KLSAgLy8NCi0gIC8vIEVhY2ggYnl0ZSBjb3JyZXNwb25kcyB0byBhIHN5 c3RlbSBzdGF0ZS4gSW4gZWFjaCBieXRlLCB0aGUgTVNCIHRlbGxzIHVzDQotICAvLyB3aGV0aGVy IHRoZSBnaXZlbiBzdGF0ZSBpcyBlbmFibGVkLiBJZiBzbywgdGhlIHRocmVlIExTQnMgc3BlY2lm eSB0aGUNCi0gIC8vIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIFBNIGNvbnRyb2wgcmVnaXN0 ZXIncyBTVVNfVFlQIGJpdHMuDQotICAvLw0KLSAgaWYgKFN5c3RlbVN0YXRlc1szXSAmIEJJVDcp IHsNCi0gICAgU3VzcGVuZFRvUmFtLT5QbTFhQ250U2xwVHlwLkJ5dGVWYWx1ZSA9DQotICAgICAg ICBTeXN0ZW1TdGF0ZXNbM10gJiAoQklUMiB8IEJJVDEgfCBCSVQwKTsNCi0gICAgREVCVUcgKChE RUJVR19JTkZPLCAiQUNQSSBTMyB2YWx1ZTogJWRcbiIsDQotICAgICAgICAgICAgU3VzcGVuZFRv UmFtLT5QbTFhQ250U2xwVHlwLkJ5dGVWYWx1ZSkpOw0KLSAgfSBlbHNlIHsNCi0gICAgKlN1c3Bl bmRUb1JhbVNpemUgPSAwOw0KLSAgICBERUJVRyAoKERFQlVHX0lORk8sICJBQ1BJIFMzIGRpc2Fi bGVkXG4iKSk7DQotICB9DQotDQotICBpZiAoU3lzdGVtU3RhdGVzWzRdICYgQklUNykgew0KLSAg ICBTdXNwZW5kVG9EaXNrLT5QbTFhQ250U2xwVHlwLkJ5dGVWYWx1ZSA9DQotICAgICAgICBTeXN0 ZW1TdGF0ZXNbNF0gJiAoQklUMiB8IEJJVDEgfCBCSVQwKTsNCi0gICAgREVCVUcgKChERUJVR19J TkZPLCAiQUNQSSBTNCB2YWx1ZTogJWRcbiIsDQotICAgICAgICAgICAgU3VzcGVuZFRvRGlzay0+ UG0xYUNudFNscFR5cC5CeXRlVmFsdWUpKTsNCi0gIH0gZWxzZSB7DQotICAgICpTdXNwZW5kVG9E aXNrU2l6ZSA9IDA7DQotICAgIERFQlVHICgoREVCVUdfSU5GTywgIkFDUEkgUzQgZGlzYWJsZWRc biIpKTsNCi0gIH0NCi19DQotDQotDQotU1RBVElDDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLVFl bXVJbnN0YWxsQWNwaVNzZHRUYWJsZSAoDQotICBJTiAgIEVGSV9BQ1BJX1RBQkxFX1BST1RPQ09M ICAgICAgICpBY3BpUHJvdG9jb2wsDQotICBJTiAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICpBY3BpVGFibGVCdWZmZXIsDQotICBJTiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgIEFjcGlUYWJsZUJ1ZmZlclNpemUsDQotICBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICpUYWJsZUtleQ0KLSAgKQ0KLXsNCi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KLSAg RklSTVdBUkVfREFUQSAqRndEYXRhOw0KLQ0KLSAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQotDQotICBGd0RhdGEgPSBBbGxvY2F0ZVJlc2VydmVkUG9vbCAoc2l6ZW9mICgqRndEYXRh KSk7DQotICBpZiAoRndEYXRhICE9IE5VTEwpIHsNCi0gICAgVUlOVE4gICAgICAgICAgICAgICAg U3VzcGVuZFRvUmFtU2l6ZTsNCi0gICAgU1lTVEVNX1NUQVRFX1BBQ0tBR0UgU3VzcGVuZFRvUmFt Ow0KLSAgICBVSU5UTiAgICAgICAgICAgICAgICBTdXNwZW5kVG9EaXNrU2l6ZTsNCi0gICAgU1lT VEVNX1NUQVRFX1BBQ0tBR0UgU3VzcGVuZFRvRGlzazsNCi0gICAgVUlOVE4gICAgICAgICAgICAg ICAgU3NkdFNpemU7DQotICAgIFVJTlQ4ICAgICAgICAgICAgICAgICpTc2R0Ow0KLQ0KLSAgICBH ZXRTdXNwZW5kU3RhdGVzICgmU3VzcGVuZFRvUmFtU2l6ZSwgICZTdXNwZW5kVG9SYW0sDQotICAg ICAgICAgICAgICAgICAgICAgICZTdXNwZW5kVG9EaXNrU2l6ZSwgJlN1c3BlbmRUb0Rpc2spOw0K LSAgICBTc2R0U2l6ZSA9IEFjcGlUYWJsZUJ1ZmZlclNpemUgKyAxNyArIFN1c3BlbmRUb1JhbVNp emUgKyBTdXNwZW5kVG9EaXNrU2l6ZTsNCi0gICAgU3NkdCA9IEFsbG9jYXRlUG9vbCAoU3NkdFNp emUpOw0KLQ0KLSAgICBpZiAoU3NkdCAhPSBOVUxMKSB7DQotICAgICAgU3RhdHVzID0gUG9wdWxh dGVGd0RhdGEgKEZ3RGF0YSk7DQotDQotICAgICAgaWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykg ew0KLSAgICAgICAgVUlOVDggKlNzZHRQdHI7DQotDQotICAgICAgICBTc2R0UHRyID0gU3NkdDsN Ci0NCi0gICAgICAgIENvcHlNZW0gKFNzZHRQdHIsIEFjcGlUYWJsZUJ1ZmZlciwgQWNwaVRhYmxl QnVmZmVyU2l6ZSk7DQotICAgICAgICBTc2R0UHRyICs9IEFjcGlUYWJsZUJ1ZmZlclNpemU7DQot DQotICAgICAgICAvLw0KLSAgICAgICAgLy8gYnVpbGQgIk9wZXJhdGlvblJlZ2lvbihGV0RULCBT eXN0ZW1NZW1vcnksIDB4MTIzNDU2NzgsIDB4ODc2NTQzMjEpIg0KLSAgICAgICAgLy8NCi0gICAg ICAgICooU3NkdFB0cisrKSA9IDB4NUI7IC8vIEV4dE9wUHJlZml4DQotICAgICAgICAqKFNzZHRQ dHIrKykgPSAweDgwOyAvLyBPcFJlZ2lvbk9wDQotICAgICAgICAqKFNzZHRQdHIrKykgPSAnRic7 DQotICAgICAgICAqKFNzZHRQdHIrKykgPSAnVyc7DQotICAgICAgICAqKFNzZHRQdHIrKykgPSAn RCc7DQotICAgICAgICAqKFNzZHRQdHIrKykgPSAnVCc7DQotICAgICAgICAqKFNzZHRQdHIrKykg PSAweDAwOyAvLyBTeXN0ZW1NZW1vcnkNCi0gICAgICAgICooU3NkdFB0cisrKSA9IDB4MEM7IC8v IERXb3JkUHJlZml4DQotDQotICAgICAgICAvLw0KLSAgICAgICAgLy8gbm8gdmlydHVhbCBhZGRy ZXNzaW5nIHlldCwgdGFrZSB0aGUgZm91ciBsZWFzdCBzaWduaWZpY2FudCBieXRlcw0KLSAgICAg ICAgLy8NCi0gICAgICAgIENvcHlNZW0oU3NkdFB0ciwgJkZ3RGF0YSwgNCk7DQotICAgICAgICBT c2R0UHRyICs9IDQ7DQotDQotICAgICAgICAqKFNzZHRQdHIrKykgPSAweDBDOyAvLyBEV29yZFBy ZWZpeA0KLQ0KLSAgICAgICAgKihVSU5UMzIqKSBTc2R0UHRyID0gc2l6ZW9mICgqRndEYXRhKTsN Ci0gICAgICAgIFNzZHRQdHIgKz0gNDsNCi0NCi0gICAgICAgIC8vDQotICAgICAgICAvLyBhZGQg c3VzcGVuZCBzeXN0ZW0gc3RhdGVzDQotICAgICAgICAvLw0KLSAgICAgICAgQ29weU1lbSAoU3Nk dFB0ciwgJlN1c3BlbmRUb1JhbSwgU3VzcGVuZFRvUmFtU2l6ZSk7DQotICAgICAgICBTc2R0UHRy ICs9IFN1c3BlbmRUb1JhbVNpemU7DQotICAgICAgICBDb3B5TWVtIChTc2R0UHRyLCAmU3VzcGVu ZFRvRGlzaywgU3VzcGVuZFRvRGlza1NpemUpOw0KLSAgICAgICAgU3NkdFB0ciArPSBTdXNwZW5k VG9EaXNrU2l6ZTsNCi0NCi0gICAgICAgIEFTU0VSVCgoVUlOVE4pIChTc2R0UHRyIC0gU3NkdCkg PT0gU3NkdFNpemUpOw0KLSAgICAgICAgKChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgKikg U3NkdCktPkxlbmd0aCA9IChVSU5UMzIpIFNzZHRTaXplOw0KLSAgICAgICAgU3RhdHVzID0gSW5z dGFsbEFjcGlUYWJsZSAoQWNwaVByb3RvY29sLCBTc2R0LCBTc2R0U2l6ZSwgVGFibGVLZXkpOw0K LSAgICAgIH0NCi0NCi0gICAgICBGcmVlUG9vbChTc2R0KTsNCi0gICAgfQ0KLQ0KLSAgICBpZiAo U3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQotICAgICAgRnJlZVBvb2woRndEYXRhKTsNCi0gICAg fQ0KLSAgfQ0KLQ0KLSAgcmV0dXJuIFN0YXR1czsNCi19DQotDQotDQotRUZJX1NUQVRVUw0KLUVG SUFQSQ0KLVFlbXVJbnN0YWxsQWNwaVRhYmxlICgNCi0gIElOICAgRUZJX0FDUElfVEFCTEVfUFJP VE9DT0wgICAgICAgKkFjcGlQcm90b2NvbCwNCi0gIElOICAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgKkFjcGlUYWJsZUJ1ZmZlciwNCi0gIElOICAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgQWNwaVRhYmxlQnVmZmVyU2l6ZSwNCi0gIE9VVCAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgKlRhYmxlS2V5DQotICApDQotew0KLSAgRUZJX0FDUElfREVTQ1JJUFRJT05f SEVBREVSICAgICAgICAqSGRyOw0KLSAgRUZJX0FDUElfVEFCTEVfSU5TVEFMTF9BQ1BJX1RBQkxF ICBUYWJsZUluc3RhbGxGdW5jdGlvbjsNCi0NCi0gIEhkciA9IChFRklfQUNQSV9ERVNDUklQVElP Tl9IRUFERVIqKSBBY3BpVGFibGVCdWZmZXI7DQotICBzd2l0Y2ggKEhkci0+U2lnbmF0dXJlKSB7 DQotICBjYXNlIEVGSV9BQ1BJXzFfMF9BUElDX1NJR05BVFVSRToNCi0gICAgVGFibGVJbnN0YWxs RnVuY3Rpb24gPSBRZW11SW5zdGFsbEFjcGlNYWR0VGFibGU7DQotICAgIGJyZWFrOw0KLSAgY2Fz ZSBFRklfQUNQSV8xXzBfU0VDT05EQVJZX1NZU1RFTV9ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRV UkU6DQotICAgIFRhYmxlSW5zdGFsbEZ1bmN0aW9uID0gUWVtdUluc3RhbGxBY3BpU3NkdFRhYmxl Ow0KLSAgICBicmVhazsNCi0gIGRlZmF1bHQ6DQotICAgIFRhYmxlSW5zdGFsbEZ1bmN0aW9uID0g SW5zdGFsbEFjcGlUYWJsZTsNCi0gIH0NCi0NCi0gIHJldHVybiBUYWJsZUluc3RhbGxGdW5jdGlv biAoDQotICAgICAgICAgICBBY3BpUHJvdG9jb2wsDQotICAgICAgICAgICBBY3BpVGFibGVCdWZm ZXIsDQotICAgICAgICAgICBBY3BpVGFibGVCdWZmZXJTaXplLA0KLSAgICAgICAgICAgVGFibGVL ZXkNCi0gICAgICAgICAgICk7DQotfQ0KZGlmZiAtLWdpdCBhL092bWZQa2cvQWNwaVBsYXRmb3Jt RHhlL1hlbi5jIGIvT3ZtZlBrZy9BY3BpUGxhdGZvcm1EeGUvWGVuLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGJlMmM1ZDY5NTg0Ni4uMDAwMDAwMDAwMDAwCi0tLSBhL092bWZQa2cv QWNwaVBsYXRmb3JtRHhlL1hlbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLS8q KiBAZmlsZQ0KLSAgT1ZNRiBBQ1BJIFhlbiBzdXBwb3J0DQotDQotICBDb3B5cmlnaHQgKGMpIDIw MDggLSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQot ICBDb3B5cmlnaHQgKGMpIDIwMTIsIEJlaSBHdWFuIDxnYnRqdTg1QGdtYWlsLmNvbT4NCi0NCi0g IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQotDQotKiovDQot DQotI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPiAgICAgICAgLy8gQ3B1RGVhZExvb3AoKQ0K LSNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ICAgICAgIC8vIERFQlVHKCkNCi0jaW5jbHVk ZSA8TGlicmFyeS9YZW5QbGF0Zm9ybUxpYi5oPiAvLyBYZW5HZXRJbmZvSE9CKCkNCi0NCi0jaW5j bHVkZSAiQWNwaVBsYXRmb3JtLmgiDQotDQotI2RlZmluZSBYRU5fQUNQSV9QSFlTSUNBTF9BRERS RVNTICAgICAgICAgMHgwMDBFQTAyMA0KLSNkZWZpbmUgWEVOX0JJT1NfUEhZU0lDQUxfRU5EICAg ICAgICAgICAgIDB4MDAwRkZGRkYNCi0NCi1FRklfQUNQSV8yXzBfUk9PVF9TWVNURU1fREVTQ1JJ UFRJT05fUE9JTlRFUiAgKlhlbkFjcGlSc2RwU3RydWN0dXJlUHRyID0gTlVMTDsNCi0NCi0vKioN Ci0gIEdldCB0aGUgYWRkcmVzcyBvZiBYZW4gQUNQSSBSb290IFN5c3RlbSBEZXNjcmlwdGlvbiBQ b2ludGVyIChSU0RQKQ0KLSAgc3RydWN0dXJlLg0KLQ0KLSAgQHBhcmFtICBSc2RwU3RydWN0dXJl UHRyICAgUmV0dXJuIHBvaW50ZXIgdG8gUlNEUCBzdHJ1Y3R1cmUNCi0NCi0gIEByZXR1cm4gRUZJ X1NVQ0NFU1MgICAgICAgIEZpbmQgWGVuIFJTRFAgc3RydWN0dXJlIHN1Y2Nlc3NmdWxseS4NCi0g IEByZXR1cm4gRUZJX05PVF9GT1VORCAgICAgIERvbid0IGZpbmQgWGVuIFJTRFAgc3RydWN0dXJl Lg0KLSAgQHJldHVybiBFRklfQUJPUlRFRCAgICAgICAgRmluZCBYZW4gUlNEUCBzdHJ1Y3R1cmUs IGJ1dCBpdCdzIG5vdCBpbnRlZ3JhdGVkLg0KLQ0KLSoqLw0KLUVGSV9TVEFUVVMNCi1FRklBUEkN Ci1HZXRYZW5BY3BpUnNkcCAoDQotICBPVVQgICBFRklfQUNQSV8yXzBfUk9PVF9TWVNURU1fREVT Q1JJUFRJT05fUE9JTlRFUiAgICoqUnNkcFB0cg0KLSAgKQ0KLXsNCi0gIEVGSV9BQ1BJXzJfMF9S T09UX1NZU1RFTV9ERVNDUklQVElPTl9QT0lOVEVSICAgKlJzZHBTdHJ1Y3R1cmVQdHI7DQotICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpYZW5BY3BpUHRy Ow0KLSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdW07 DQotICBFRklfWEVOX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpYZW5J bmZvOw0KLQ0KLSAgLy8NCi0gIC8vIERldGVjdCB0aGUgUlNEUCBzdHJ1Y3R1cmUNCi0gIC8vDQot DQotICAvLw0KLSAgLy8gRmlyc3QgbG9vayBmb3IgUFZIIG9uZQ0KLSAgLy8NCi0gIFhlbkluZm8g PSBYZW5HZXRJbmZvSE9CICgpOw0KLSAgQVNTRVJUIChYZW5JbmZvICE9IE5VTEwpOw0KLSAgaWYg KFhlbkluZm8tPlJzZHBQdmggIT0gTlVMTCkgew0KLSAgICBERUJVRyAoKERFQlVHX0lORk8sICIl YTogVXNlIEFDUEkgUlNEUCB0YWJsZSBhdCAweCVwXG4iLA0KLSAgICAgIGdFZmlDYWxsZXJCYXNl TmFtZSwgWGVuSW5mby0+UnNkcFB2aCkpOw0KLSAgICAqUnNkcFB0ciA9IFhlbkluZm8tPlJzZHBQ dmg7DQotICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCi0gIH0NCi0NCi0gIC8vDQotICAvLyBPdGhl cndpc2UsIGxvb2sgZm9yIHRoZSBIVk0gb25lDQotICAvLw0KLSAgZm9yIChYZW5BY3BpUHRyID0g KFVJTlQ4KikoVUlOVE4pIFhFTl9BQ1BJX1BIWVNJQ0FMX0FERFJFU1M7DQotICAgICAgIFhlbkFj cGlQdHIgPCAoVUlOVDgqKShVSU5UTikgWEVOX0JJT1NfUEhZU0lDQUxfRU5EOw0KLSAgICAgICBY ZW5BY3BpUHRyICs9IDB4MTApIHsNCi0NCi0gICAgUnNkcFN0cnVjdHVyZVB0ciA9IChFRklfQUNQ SV8yXzBfUk9PVF9TWVNURU1fREVTQ1JJUFRJT05fUE9JTlRFUiAqKQ0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAoVUlOVE4pIFhlbkFjcGlQdHI7DQotDQotICAgIGlmICghQXNjaWlTdHJuQ21w ICgoQ0hBUjggKikgJlJzZHBTdHJ1Y3R1cmVQdHItPlNpZ25hdHVyZSwgIlJTRCBQVFIgIiwgOCkp IHsNCi0gICAgICAvLw0KLSAgICAgIC8vIFJTRFAgQUNQSSAxLjAgY2hlY2tzdW0gZm9yIDEuMC8y LjAvMy4wIHRhYmxlLg0KLSAgICAgIC8vIFRoaXMgaXMgb25seSB0aGUgZmlyc3QgMjAgYnl0ZXMg b2YgdGhlIHN0cnVjdHVyZQ0KLSAgICAgIC8vDQotICAgICAgU3VtID0gQ2FsY3VsYXRlU3VtOCAo DQotICAgICAgICAgICAgICAoQ09OU1QgVUlOVDggKilSc2RwU3RydWN0dXJlUHRyLA0KLSAgICAg ICAgICAgICAgc2l6ZW9mIChFRklfQUNQSV8xXzBfUk9PVF9TWVNURU1fREVTQ1JJUFRJT05fUE9J TlRFUikNCi0gICAgICAgICAgICAgICk7DQotICAgICAgaWYgKFN1bSAhPSAwKSB7DQotICAgICAg ICByZXR1cm4gRUZJX0FCT1JURUQ7DQotICAgICAgfQ0KLQ0KLSAgICAgIGlmIChSc2RwU3RydWN0 dXJlUHRyLT5SZXZpc2lvbiA+PSAyKSB7DQotICAgICAgICAvLw0KLSAgICAgICAgLy8gUlNEUCBB Q1BJIDIuMC8zLjAgY2hlY2tzdW0sIHRoaXMgaXMgdGhlIGVudGlyZSB0YWJsZQ0KLSAgICAgICAg Ly8NCi0gICAgICAgIFN1bSA9IENhbGN1bGF0ZVN1bTggKA0KLSAgICAgICAgICAgICAgICAoQ09O U1QgVUlOVDggKilSc2RwU3RydWN0dXJlUHRyLA0KLSAgICAgICAgICAgICAgICBzaXplb2YgKEVG SV9BQ1BJXzJfMF9ST09UX1NZU1RFTV9ERVNDUklQVElPTl9QT0lOVEVSKQ0KLSAgICAgICAgICAg ICAgICApOw0KLSAgICAgICAgaWYgKFN1bSAhPSAwKSB7DQotICAgICAgICAgIHJldHVybiBFRklf QUJPUlRFRDsNCi0gICAgICAgIH0NCi0gICAgICB9DQotICAgICAgKlJzZHBQdHIgPSBSc2RwU3Ry dWN0dXJlUHRyOw0KLSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCi0gICAgfQ0KLSAgfQ0KLQ0K LSAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQotfQ0KLQ0KLS8qKg0KLSAgR2V0IFhlbiBBY3BpIHRh YmxlcyBmcm9tIHRoZSBSU0RQIHN0cnVjdHVyZS4gQW5kIGluc3RhbGxzIFhlbiBBQ1BJIHRhYmxl cw0KLSAgaW50byB0aGUgUlNEVC9YU0RUIHVzaW5nIEluc3RhbGxBY3BpVGFibGUuIFNvbWUgc2ln bmF0dXJlIG9mIHRoZSBpbnN0YWxsZWQNCi0gIEFDUEkgdGFibGVzIGFyZTogRkFDUCwgQVBJQywg SFBFVCwgV0FFVCwgU1NEVCwgRkFDUywgRFNEVC4NCi0NCi0gIEBwYXJhbSAgQWNwaVByb3RvY29s ICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KLQ0KLSAgQHJldHVybiBFRklf U1VDQ0VTUyAgICAgICAgICAgIFRoZSB0YWJsZSB3YXMgc3VjY2Vzc2Z1bGx5IGluc2VydGVkLg0K LSAgQHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEVpdGhlciBBY3BpVGFibGVCdWZmZXIg aXMgTlVMTCwgVGFibGVIYW5kbGUgaXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCBvciBBY3BpVGFibGVCdWZmZXJTaXplIGFuZCB0aGUgc2l6ZQ0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGVtYmVkZGVkIGluIHRoZSBBQ1BJIHRhYmxlIHBv aW50ZWQgdG8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBBY3BpVGFibGVC dWZmZXIgYXJlIG5vdCBpbiBzeW5jLg0KLSAgQHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUyAg IEluc3VmZmljaWVudCByZXNvdXJjZXMgZXhpc3QgdG8gY29tcGxldGUgdGhlIHJlcXVlc3QuDQot DQotKiovDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLUluc3RhbGxYZW5UYWJsZXMgKA0KLSAgSU4g ICBFRklfQUNQSV9UQUJMRV9QUk9UT0NPTCAgICAgICAqQWNwaVByb3RvY29sDQotICApDQotew0K LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU YWJsZUhhbmRsZTsNCi0NCi0gIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAgICAgICAgICAg ICAgICAgICAgICAqUnNkdDsNCi0gIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAgICAgICAg ICAgICAgICAgICAgICAqWHNkdDsNCi0gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqQ3VycmVudFRhYmxlRW50cnk7DQotICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudFRhYmxlUG9pbnRlcjsNCi0g IEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAgICAgICAgICAgICAgICAgICAgICAqQ3VycmVu dFRhYmxlOw0KLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE51bWJlck9mVGFibGVFbnRyaWVzOw0KLSAgRUZJX0FDUElfMl8wX0ZJWEVEX0FDUElf REVTQ1JJUFRJT05fVEFCTEUgICAgICAgICpGYWR0MlRhYmxlOw0KLSAgRUZJX0FDUElfMV8wX0ZJ WEVEX0FDUElfREVTQ1JJUFRJT05fVEFCTEUgICAgICAgICpGYWR0MVRhYmxlOw0KLSAgRUZJX0FD UElfMl8wX0ZJUk1XQVJFX0FDUElfQ09OVFJPTF9TVFJVQ1RVUkUgICAgICpGYWNzMlRhYmxlOw0K LSAgRUZJX0FDUElfMV8wX0ZJUk1XQVJFX0FDUElfQ09OVFJPTF9TVFJVQ1RVUkUgICAgICpGYWNz MVRhYmxlOw0KLSAgRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICAgICAgICAgICAgICAgICAg ICAgICpEc2R0VGFibGU7DQotDQotICBGYWR0MlRhYmxlICA9IE5VTEw7DQotICBGYWR0MVRhYmxl ICA9IE5VTEw7DQotICBGYWNzMlRhYmxlICA9IE5VTEw7DQotICBGYWNzMVRhYmxlICA9IE5VTEw7 DQotICBEc2R0VGFibGUgICA9IE5VTEw7DQotICBUYWJsZUhhbmRsZSA9IDA7DQotICBOdW1iZXJP ZlRhYmxlRW50cmllcyA9IDA7DQotDQotICAvLw0KLSAgLy8gVHJ5IHRvIGZpbmQgWGVuIEFDUEkg dGFibGVzDQotICAvLw0KLSAgU3RhdHVzID0gR2V0WGVuQWNwaVJzZHAgKCZYZW5BY3BpUnNkcFN0 cnVjdHVyZVB0cik7DQotICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgIHJldHVybiBT dGF0dXM7DQotICB9DQotDQotICAvLw0KLSAgLy8gSWYgWFNEVCB0YWJsZSBpcyBmaW5kLCBqdXN0 IGluc3RhbGwgaXRzIHRhYmxlcy4NCi0gIC8vIE90aGVyd2lzZSwgdHJ5IHRvIGZpbmQgYW5kIGlu c3RhbGwgdGhlIFJTRFQgdGFibGVzLg0KLSAgLy8NCi0gIGlmIChYZW5BY3BpUnNkcFN0cnVjdHVy ZVB0ci0+WHNkdEFkZHJlc3MpIHsNCi0gICAgLy8NCi0gICAgLy8gUmV0cmlldmUgdGhlIGFkZHJl c3NlcyBvZiBYU0RUIGFuZA0KLSAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBpdHMgdGFi bGUgZW50cmllcy4NCi0gICAgLy8NCi0gICAgWHNkdCA9IChFRklfQUNQSV9ERVNDUklQVElPTl9I RUFERVIgKikgKFVJTlROKQ0KLSAgICAgICAgICAgICBYZW5BY3BpUnNkcFN0cnVjdHVyZVB0ci0+ WHNkdEFkZHJlc3M7DQotICAgIE51bWJlck9mVGFibGVFbnRyaWVzID0gKFhzZHQtPkxlbmd0aCAt DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9BQ1BJX0RFU0NSSVBU SU9OX0hFQURFUikpIC8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoVUlO VDY0KTsNCi0NCi0gICAgLy8NCi0gICAgLy8gSW5zdGFsbCBBQ1BJIHRhYmxlcyBmb3VuZCBpbiBY U0RULg0KLSAgICAvLw0KLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZlRhYmxl RW50cmllczsgSW5kZXgrKykgew0KLSAgICAgIC8vDQotICAgICAgLy8gR2V0IHRoZSB0YWJsZSBl bnRyeSBmcm9tIFhTRFQNCi0gICAgICAvLw0KLSAgICAgIEN1cnJlbnRUYWJsZUVudHJ5ID0gKFZP SUQgKikgKChVSU5UOCAqKSBYc2R0ICsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mIChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIpICsNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW5kZXggKiBzaXplb2YgKFVJTlQ2NCkpOw0KLSAgICAgIEN1cnJlbnRUYWJsZVBv aW50ZXIgPSAoVUlOVE4pICooVUlOVDY0ICopQ3VycmVudFRhYmxlRW50cnk7DQotICAgICAgQ3Vy cmVudFRhYmxlID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAqKSBDdXJyZW50VGFibGVQ b2ludGVyOw0KLQ0KLSAgICAgIC8vDQotICAgICAgLy8gSW5zdGFsbCB0aGUgWFNEVCB0YWJsZXMN Ci0gICAgICAvLw0KLSAgICAgIFN0YXR1cyA9IEluc3RhbGxBY3BpVGFibGUgKA0KLSAgICAgICAg ICAgICAgICAgQWNwaVByb3RvY29sLA0KLSAgICAgICAgICAgICAgICAgQ3VycmVudFRhYmxlLA0K LSAgICAgICAgICAgICAgICAgQ3VycmVudFRhYmxlLT5MZW5ndGgsDQotICAgICAgICAgICAgICAg ICAmVGFibGVIYW5kbGUNCi0gICAgICAgICAgICAgICAgICk7DQotDQotICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KLSAgICAgICAgcmV0dXJuIFN0YXR1czsNCi0gICAgICB9DQotDQot ICAgICAgLy8NCi0gICAgICAvLyBHZXQgdGhlIEZBQ1MgYW5kIERTRFQgdGFibGUgYWRkcmVzcyBm cm9tIHRoZSB0YWJsZSBGQURUDQotICAgICAgLy8NCi0gICAgICBpZiAoIUFzY2lpU3RybkNtcCAo KENIQVI4ICopICZDdXJyZW50VGFibGUtPlNpZ25hdHVyZSwgIkZBQ1AiLCA0KSkgew0KLSAgICAg ICAgRmFkdDJUYWJsZSA9IChFRklfQUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJM RSAqKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgKFVJTlROKSBDdXJyZW50VGFibGVQb2ludGVy Ow0KLSAgICAgICAgRmFjczJUYWJsZSA9IChFRklfQUNQSV8yXzBfRklSTVdBUkVfQUNQSV9DT05U Uk9MX1NUUlVDVFVSRSAqKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgKFVJTlROKSBGYWR0MlRh YmxlLT5GaXJtd2FyZUN0cmw7DQotICAgICAgICBEc2R0VGFibGUgID0gKEVGSV9BQ1BJX0RFU0NS SVBUSU9OX0hFQURFUiAqKSAoVUlOVE4pIEZhZHQyVGFibGUtPkRzZHQ7DQotICAgICAgfQ0KLSAg ICB9DQotICB9DQotICBlbHNlIGlmIChYZW5BY3BpUnNkcFN0cnVjdHVyZVB0ci0+UnNkdEFkZHJl c3MpIHsNCi0gICAgLy8NCi0gICAgLy8gUmV0cmlldmUgdGhlIGFkZHJlc3NlcyBvZiBSU0RUIGFu ZA0KLSAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBpdHMgdGFibGUgZW50cmllcy4NCi0g ICAgLy8NCi0gICAgUnNkdCA9IChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgKikgKFVJTlRO KQ0KLSAgICAgICAgICAgICBYZW5BY3BpUnNkcFN0cnVjdHVyZVB0ci0+UnNkdEFkZHJlc3M7DQot ICAgIE51bWJlck9mVGFibGVFbnRyaWVzID0gKFJzZHQtPkxlbmd0aCAtDQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUikpIC8N Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoVUlOVDMyKTsNCi0NCi0gICAg Ly8NCi0gICAgLy8gSW5zdGFsbCBBQ1BJIHRhYmxlcyBmb3VuZCBpbiBYU0RULg0KLSAgICAvLw0K LSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZlRhYmxlRW50cmllczsgSW5kZXgr Kykgew0KLSAgICAgIC8vDQotICAgICAgLy8gR2V0IHRoZSB0YWJsZSBlbnRyeSBmcm9tIFJTRFQN Ci0gICAgICAvLw0KLSAgICAgIEN1cnJlbnRUYWJsZUVudHJ5ID0gKFVJTlQzMiAqKSAoKFVJTlQ4 ICopIFJzZHQgKw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9BQ1BJ X0RFU0NSSVBUSU9OX0hFQURFUikgKw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eCAqIHNpemVvZiAoVUlOVDMyKSk7DQotICAgICAgQ3VycmVudFRhYmxlUG9pbnRlciA9ICooVUlO VDMyICopQ3VycmVudFRhYmxlRW50cnk7DQotICAgICAgQ3VycmVudFRhYmxlID0gKEVGSV9BQ1BJ X0RFU0NSSVBUSU9OX0hFQURFUiAqKSBDdXJyZW50VGFibGVQb2ludGVyOw0KLQ0KLSAgICAgIC8v DQotICAgICAgLy8gSW5zdGFsbCB0aGUgUlNEVCB0YWJsZXMNCi0gICAgICAvLw0KLSAgICAgIFN0 YXR1cyA9IEluc3RhbGxBY3BpVGFibGUgKA0KLSAgICAgICAgICAgICAgICAgQWNwaVByb3RvY29s LA0KLSAgICAgICAgICAgICAgICAgQ3VycmVudFRhYmxlLA0KLSAgICAgICAgICAgICAgICAgQ3Vy cmVudFRhYmxlLT5MZW5ndGgsDQotICAgICAgICAgICAgICAgICAmVGFibGVIYW5kbGUNCi0gICAg ICAgICAgICAgICAgICk7DQotDQotICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAg ICAgICAgcmV0dXJuIFN0YXR1czsNCi0gICAgICB9DQotDQotICAgICAgLy8NCi0gICAgICAvLyBH ZXQgdGhlIEZBQ1MgYW5kIERTRFQgdGFibGUgYWRkcmVzcyBmcm9tIHRoZSB0YWJsZSBGQURUDQot ICAgICAgLy8NCi0gICAgICBpZiAoIUFzY2lpU3RybkNtcCAoKENIQVI4ICopICZDdXJyZW50VGFi bGUtPlNpZ25hdHVyZSwgIkZBQ1AiLCA0KSkgew0KLSAgICAgICAgRmFkdDFUYWJsZSA9IChFRklf QUNQSV8xXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRSAqKQ0KLSAgICAgICAgICAgICAg ICAgICAgICAgKFVJTlROKSBDdXJyZW50VGFibGVQb2ludGVyOw0KLSAgICAgICAgRmFjczFUYWJs ZSA9IChFRklfQUNQSV8xXzBfRklSTVdBUkVfQUNQSV9DT05UUk9MX1NUUlVDVFVSRSAqKQ0KLSAg ICAgICAgICAgICAgICAgICAgICAgKFVJTlROKSBGYWR0MVRhYmxlLT5GaXJtd2FyZUN0cmw7DQot ICAgICAgICBEc2R0VGFibGUgID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAqKSAoVUlO VE4pIEZhZHQxVGFibGUtPkRzZHQ7DQotICAgICAgfQ0KLSAgICB9DQotICB9DQotDQotICAvLw0K LSAgLy8gSW5zdGFsbCB0aGUgRkFDUyB0YWJsZS4NCi0gIC8vDQotICBpZiAoRmFkdDJUYWJsZSkg ew0KLSAgICAvLw0KLSAgICAvLyBGQUNTIDIuMA0KLSAgICAvLw0KLSAgICBTdGF0dXMgPSBJbnN0 YWxsQWNwaVRhYmxlICgNCi0gICAgICAgICAgICAgICBBY3BpUHJvdG9jb2wsDQotICAgICAgICAg ICAgICAgRmFjczJUYWJsZSwNCi0gICAgICAgICAgICAgICBGYWNzMlRhYmxlLT5MZW5ndGgsDQot ICAgICAgICAgICAgICAgJlRhYmxlSGFuZGxlDQotICAgICAgICAgICAgICAgKTsNCi0gICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICAgIHJldHVybiBTdGF0dXM7DQotICAgIH0NCi0g IH0NCi0gIGVsc2UgaWYgKEZhZHQxVGFibGUpIHsNCi0gICAgLy8NCi0gICAgLy8gRkFDUyAxLjAN Ci0gICAgLy8NCi0gICAgU3RhdHVzID0gSW5zdGFsbEFjcGlUYWJsZSAoDQotICAgICAgICAgICAg ICAgQWNwaVByb3RvY29sLA0KLSAgICAgICAgICAgICAgIEZhY3MxVGFibGUsDQotICAgICAgICAg ICAgICAgRmFjczFUYWJsZS0+TGVuZ3RoLA0KLSAgICAgICAgICAgICAgICZUYWJsZUhhbmRsZQ0K LSAgICAgICAgICAgICAgICk7DQotICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAg ICByZXR1cm4gU3RhdHVzOw0KLSAgICB9DQotICB9DQotDQotICAvLw0KLSAgLy8gSW5zdGFsbCBE U0RUIHRhYmxlLiBJZiB3ZSByZWFjaGVkIHRoaXMgcG9pbnQgd2l0aG91dCBmaW5kaW5nIHRoZSBE U0RULA0KLSAgLy8gdGhlbiB3ZSdyZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSBoeXBlcnZpc29yLCBh bmQgY2Fubm90IGNvbnRpbnVlLg0KLSAgLy8NCi0gIGlmIChEc2R0VGFibGUgPT0gTlVMTCkgew0K LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IG5vIERTRFQgZm91bmRcbiIsIF9fRlVOQ1RJ T05fXykpOw0KLSAgICBBU1NFUlQgKEZBTFNFKTsNCi0gICAgQ3B1RGVhZExvb3AgKCk7DQotICB9 DQotDQotICBTdGF0dXMgPSBJbnN0YWxsQWNwaVRhYmxlICgNCi0gICAgICAgICAgICAgQWNwaVBy b3RvY29sLA0KLSAgICAgICAgICAgICBEc2R0VGFibGUsDQotICAgICAgICAgICAgIERzZHRUYWJs ZS0+TGVuZ3RoLA0KLSAgICAgICAgICAgICAmVGFibGVIYW5kbGUNCi0gICAgICAgICAgICAgKTsN Ci0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAgcmV0dXJuIFN0YXR1czsNCi0gIH0N Ci0NCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQotDQotLSAKMi4xOS4xLjMuZzMwMjQ3YWE1 ZDIwMQoKCg==