From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.61]) by mx.groups.io with SMTP id smtpd.web10.237.1582755147739210552 for ; Wed, 26 Feb 2020 14:12:28 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=aedNJqrH; spf=pass (domain: redhat.com, ip: 205.139.110.61, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1582755146; 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=rB5+gou0V7RO5xFLs6e/3ZjEkZyIi87PvuSMGvg3oEA=; b=aedNJqrHSRtDkKx31DDCFWzdVk4nHLFDBRx3zppc7evJ2buMNwI3Kuzoc8vyvpg2+dsgkh 0w2u46O+koDOct0rre1W0z7mKm+Xfw9HkZSQXuIqVii6y3btyWl07G7OYDLWv56F5A1NbE dVqWA7QEENd2GePBmiiTxKGgUEmGiGM= 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-58-kfsmcg2BM5mf9JdfdhKZ_g-1; Wed, 26 Feb 2020 17:12:24 -0500 X-MC-Unique: kfsmcg2BM5mf9JdfdhKZ_g-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6FBCD107ACC4; Wed, 26 Feb 2020 22:12:23 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-185.ams2.redhat.com [10.36.116.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id B818460BEF; Wed, 26 Feb 2020 22:12:21 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Igor Mammedov , Jiewen Yao , Jordan Justen , Michael Kinney , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 09/16] OvmfPkg/CpuHotplugSmm: add function for collecting CPUs with events Date: Wed, 26 Feb 2020 23:11:49 +0100 Message-Id: <20200226221156.29589-10-lersek@redhat.com> In-Reply-To: <20200226221156.29589-1-lersek@redhat.com> References: <20200226221156.29589-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 QWRkIGEgZnVuY3Rpb24gdGhhdCBjb2xsZWN0cyB0aGUgQVBJQyBJRHMgb2YgQ1BVcyB0aGF0IGhh dmUganVzdCBiZWVuCmhvdC1wbHVnZ2VkLCBvciBhcmUgYWJvdXQgdG8gYmUgaG90LXVucGx1Z2dl ZC4KClBlbmRpbmcgZXZlbnRzIGFyZSBvbmx5IGxvY2F0ZWQgYW5kIG5ldmVyIGNsZWFyZWQ7IFFF TVUncyBBTUwgbmVlZHMgdGhlCmZpcm13YXJlIHRvIGxlYXZlIHRoZSBzdGF0dXMgYml0cyBpbnRh Y3QgaW4gdGhlIGhvdHBsdWcgcmVnaXN0ZXIgYmxvY2suCgpDYzogQXJkIEJpZXNoZXV2ZWwgPGFy ZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+CkNjOiBJZ29yIE1hbW1lZG92IDxpbWFtbWVkb0ByZWRo YXQuY29tPgpDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+CkNjOiBKb3JkYW4g SnVzdGVuIDxqb3JkYW4ubC5qdXN0ZW5AaW50ZWwuY29tPgpDYzogTWljaGFlbCBLaW5uZXkgPG1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPgpDYzogUGhpbGlwcGUgTWF0aGlldS1EYXVkw6kgPHBo aWxtZEByZWRoYXQuY29tPgpSZWY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93 X2J1Zy5jZ2k/aWQ9MTUxMgpTaWduZWQtb2ZmLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRo YXQuY29tPgpBY2tlZC1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5v cmc+Ci0tLQoKTm90ZXM6CiAgICB2MjoKICAgIAogICAgLSBQaWNrIHVwIEFyZCdzIEFja2VkLWJ5 LCB3aGljaCBpcyBjb25kaXRpb25hbCBvbiBhcHByb3ZhbCBmcm9tIEludGVsCiAgICAgIHJldmll d2VycyBvbiBDYy4gKEknZCBsaWtlIHRvIHNhdmUgQXJkIHRoZSBjaHVybiBvZiByZS1hY2tpbmcK ICAgICAgdW5tb2RpZmllZCBwYXRjaGVzLikKCiBPdm1mUGtnL0luY2x1ZGUvSW5kdXN0cnlTdGFu ZGFyZC9RZW11Q3B1SG90cGx1Zy5oIHwgICAyICsKIE92bWZQa2cvQ3B1SG90cGx1Z1NtbS9DcHVI b3RwbHVnU21tLmluZiAgICAgICAgICAgfCAgIDEgKwogT3ZtZlBrZy9DcHVIb3RwbHVnU21tL0Fw aWNJZC5oICAgICAgICAgICAgICAgICAgICB8ICAyMyArKysKIE92bWZQa2cvQ3B1SG90cGx1Z1Nt bS9RZW11Q3B1aHAuaCAgICAgICAgICAgICAgICAgfCAgMjAgKystCiBPdm1mUGtnL0NwdUhvdHBs dWdTbW0vUWVtdUNwdWhwLmMgICAgICAgICAgICAgICAgIHwgMTcxICsrKysrKysrKysrKysrKysr KystCiA1IGZpbGVzIGNoYW5nZWQsIDIxMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL092bWZQa2cvSW5jbHVkZS9JbmR1c3RyeVN0YW5kYXJkL1FlbXVDcHVIb3Rw bHVnLmggYi9Pdm1mUGtnL0luY2x1ZGUvSW5kdXN0cnlTdGFuZGFyZC9RZW11Q3B1SG90cGx1Zy5o CmluZGV4IDNkMDEzNjMzNTAxYi4uYTM0YTZkM2ZhZTYxIDEwMDY0NAotLS0gYS9Pdm1mUGtnL0lu Y2x1ZGUvSW5kdXN0cnlTdGFuZGFyZC9RZW11Q3B1SG90cGx1Zy5oCisrKyBiL092bWZQa2cvSW5j bHVkZS9JbmR1c3RyeVN0YW5kYXJkL1FlbXVDcHVIb3RwbHVnLmgKQEAgLTEzLDMyICsxMywzNCBA QAogICAgIFRoZSBuZXcgKCJtb2Rlcm4iKSBob3RwbHVnIGludGVyZmFjZSBhcHBlYXJlZCBpbiBR RU1VIHYyLjcuMC4NCiANCiAgICAgVGhlIG1hY3JvcyBpbiB0aGlzIGhlYWRlciBmaWxlIG1hcCB0 byB0aGUgbWluaW1hbCBzdWJzZXQgb2YgdGhlIG1vZGVybg0KICAgICBpbnRlcmZhY2UgdGhhdCBP Vk1GIG5lZWRzLg0KICoqLw0KIA0KICNpZm5kZWYgUUVNVV9DUFVfSE9UUExVR19IXw0KICNkZWZp bmUgUUVNVV9DUFVfSE9UUExVR19IXw0KIA0KICNpbmNsdWRlIDxCYXNlLmg+DQogDQogLy8NCiAv LyBFYWNoIHJlZ2lzdGVyIG9mZnNldCBpczoNCiAvLyAtIHJlbGF0aXZlIHRvIHRoZSBib2FyZC1k ZXBlbmRlbnQgSU8gYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciBibG9jaywNCiAvLyAtIG5h bWVkIFFFTVVfQ1BVSFBfKFJ8V3xSVylfKiwgYWNjb3JkaW5nIHRvIHRoZSBwb3NzaWJsZSBhY2Nl c3MgbW9kZXMgb2YgdGhlDQogLy8gICByZWdpc3RlciwNCiAvLyAtIGZvbGxvd2VkIGJ5IGRpc3Rp bmd1aXNoZWQgYml0bWFza3Mgb3IgdmFsdWVzIGluIHRoZSByZWdpc3Rlci4NCiAvLw0KICNkZWZp bmUgUUVNVV9DUFVIUF9SX0NNRF9EQVRBMiAgICAgICAgICAgICAgIDB4MA0KIA0KICNkZWZpbmUg UUVNVV9DUFVIUF9SX0NQVV9TVEFUICAgICAgICAgICAgICAgIDB4NA0KICNkZWZpbmUgUUVNVV9D UFVIUF9TVEFUX0VOQUJMRUQgICAgICAgICAgICAgICAgQklUMA0KKyNkZWZpbmUgUUVNVV9DUFVI UF9TVEFUX0lOU0VSVCAgICAgICAgICAgICAgICAgQklUMQ0KKyNkZWZpbmUgUUVNVV9DUFVIUF9T VEFUX1JFTU9WRSAgICAgICAgICAgICAgICAgQklUMg0KIA0KICNkZWZpbmUgUUVNVV9DUFVIUF9S V19DTURfREFUQSAgICAgICAgICAgICAgIDB4OA0KIA0KICNkZWZpbmUgUUVNVV9DUFVIUF9XX0NQ VV9TRUwgICAgICAgICAgICAgICAgIDB4MA0KIA0KICNkZWZpbmUgUUVNVV9DUFVIUF9XX0NNRCAg ICAgICAgICAgICAgICAgICAgIDB4NQ0KICNkZWZpbmUgUUVNVV9DUFVIUF9DTURfR0VUX1BFTkRJ TkcgICAgICAgICAgICAgMHgwDQogI2RlZmluZSBRRU1VX0NQVUhQX0NNRF9HRVRfQVJDSF9JRCAg ICAgICAgICAgICAweDMNCiANCiAjZW5kaWYgLy8gUUVNVV9DUFVfSE9UUExVR19IXw0KZGlmZiAt LWdpdCBhL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9DcHVIb3RwbHVnU21tLmluZiBiL092bWZQa2cv Q3B1SG90cGx1Z1NtbS9DcHVIb3RwbHVnU21tLmluZgppbmRleCBhYzRjYTRjMWY0ZjIuLmFiNjkw YTllNWUyMCAxMDA2NDQKLS0tIGEvT3ZtZlBrZy9DcHVIb3RwbHVnU21tL0NwdUhvdHBsdWdTbW0u aW5mCisrKyBiL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9DcHVIb3RwbHVnU21tLmluZgpAQCAtMyw0 NCArMyw0NSBAQAogIw0KICMgQ29weXJpZ2h0IChjKSAyMDIwLCBSZWQgSGF0LCBJbmMuDQogIw0K ICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAjIw0KIA0K IFtEZWZpbmVzXQ0KICAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgPSAxLjI5DQogICBQSV9T UEVDSUZJQ0FUSU9OX1ZFUlNJT04gICA9IDB4MDAwMTAwNDYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBQSS0xLjcuMA0KICAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgPSBDcHVIb3Rw bHVnU21tDQogICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICA9IDg0RUVBMTE0LUM2QkUtNDQ0 NS04RjkwLTUxRDk3ODYzRTM2Mw0KICAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgPSBEWEVf U01NX0RSSVZFUg0KICAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgPSBDcHVIb3RwbHVnRW50 cnkNCiANCiAjDQogIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ug b25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZA0KICMgdG9vbHMuDQogIw0KICMgVkFM SURfQVJDSElURUNUVVJFUyAgICAgICAgPSBJQTMyIFg2NA0KICMNCiANCiBbU291cmNlc10NCisg IEFwaWNJZC5oDQogICBDcHVIb3RwbHVnLmMNCiAgIFFlbXVDcHVocC5jDQogICBRZW11Q3B1aHAu aA0KIA0KIFtQYWNrYWdlc10NCiAgIE1kZVBrZy9NZGVQa2cuZGVjDQogICBPdm1mUGtnL092bWZQ a2cuZGVjDQogDQogW0xpYnJhcnlDbGFzc2VzXQ0KICAgQmFzZUxpYg0KICAgRGVidWdMaWINCiAg IE1tU2VydmljZXNUYWJsZUxpYg0KICAgUGNkTGliDQogICBVZWZpRHJpdmVyRW50cnlQb2ludA0K IA0KIFtQcm90b2NvbHNdDQogICBnRWZpTW1DcHVJb1Byb3RvY29sR3VpZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KIA0KIFtQY2RdDQogICBn VWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZC5QY2RRMzVTbXJhbUF0RGVmYXVsdFNtYmFzZSAgICAg ICAgICAgICAjIyBDT05TVU1FUw0KIA0KIFtGZWF0dXJlUGNkXQ0KZGlmZiAtLWdpdCBhL092bWZQ a2cvQ3B1SG90cGx1Z1NtbS9BcGljSWQuaCBiL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9BcGljSWQu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjNjMzY1MTQ4ZWQwMgot LS0gL2Rldi9udWxsCisrKyBiL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9BcGljSWQuaApAQCAtMCww ICsxLDIzIEBACisvKiogQGZpbGUNCisgIFR5cGUgYW5kIG1hY3JvIGRlZmluaXRpb25zIGZvciBy ZXByZXNlbnRpbmcgYW5kIHByaW50aW5nIEFQSUMgSURzLCBjb21wYXRpYmx5DQorICB3aXRoIHRo ZSBMb2NhbEFwaWNMaWIgYW5kIFByaW50TGliIGNsYXNzZXMsIHJlc3BlY3RpdmVseS4NCisNCisg IENvcHlyaWdodCAoYykgMjAyMCwgUmVkIEhhdCwgSW5jLg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaWZuZGVmIEFQSUNfSURf SF8NCisjZGVmaW5lIEFQSUNfSURfSF8NCisNCisvLw0KKy8vIFRoZSB0eXBlIHRoYXQgTG9jYWxB cGljTGliIHJlcHJlc2VudHMgYW4gQVBJQyBJRCB3aXRoLg0KKy8vDQordHlwZWRlZiBVSU5UMzIg QVBJQ19JRDsNCisNCisvLw0KKy8vIFRoZSBQcmludExpYiBjb252ZXJzaW9uIHNwZWNpZmljYXRp b24gZm9yIGZvcm1hdHRpbmcgYW4gQVBJQ19JRC4NCisvLw0KKyNkZWZpbmUgRk1UX0FQSUNfSUQg IjB4JTA4eCINCisNCisjZW5kaWYgLy8gQVBJQ19JRF9IXw0KZGlmZiAtLWdpdCBhL092bWZQa2cv Q3B1SG90cGx1Z1NtbS9RZW11Q3B1aHAuaCBiL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9RZW11Q3B1 aHAuaAppbmRleCA4MmY4OGYwYjczYmIuLjhhZGFhMGFkOTFmMCAxMDA2NDQKLS0tIGEvT3ZtZlBr Zy9DcHVIb3RwbHVnU21tL1FlbXVDcHVocC5oCisrKyBiL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9R ZW11Q3B1aHAuaApAQCAtMSw0NyArMSw2MSBAQAogLyoqIEBmaWxlDQotICBTaW1wbGUgd3JhcHBl ciBmdW5jdGlvbnMgdGhhdCBhY2Nlc3MgUUVNVSdzIG1vZGVybiBDUFUgaG90cGx1ZyByZWdpc3Rl cg0KLSAgYmxvY2suDQorICBTaW1wbGUgd3JhcHBlciBmdW5jdGlvbnMgYW5kIHV0aWxpdHkgZnVu Y3Rpb25zIHRoYXQgYWNjZXNzIFFFTVUncyBtb2Rlcm4gQ1BVDQorICBob3RwbHVnIHJlZ2lzdGVy IGJsb2NrLg0KIA0KLSAgVGhlc2UgZnVuY3Rpb25zIHRoaW5seSB3cmFwIHNvbWUgb2YgdGhlIHJl Z2lzdGVycyBkZXNjcmliZWQgaW4NCisgIFRoZXNlIGZ1bmN0aW9ucyBtYW5pcHVsYXRlIHNvbWUg b2YgdGhlIHJlZ2lzdGVycyBkZXNjcmliZWQgaW4NCiAgICJkb2NzL3NwZWNzL2FjcGlfY3B1X2hv dHBsdWcudHh0IiBpbiB0aGUgUUVNVSBzb3VyY2UuIElPIFBvcnRzIGFyZSBhY2Nlc3NlZA0KICAg dmlhIEVGSV9NTV9DUFVfSU9fUFJPVE9DT0wuIElmIGEgcHJvdG9jb2wgY2FsbCBmYWlscywgdGhl c2UgZnVuY3Rpb25zIGRvbid0DQogICByZXR1cm4uDQogDQogICBDb3B5cmlnaHQgKGMpIDIwMjAs IFJlZCBIYXQsIEluYy4NCiANCiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQogKiovDQogDQogI2lmbmRlZiBRRU1VX0NQVUhQX0hfDQogI2RlZmluZSBRRU1V X0NQVUhQX0hfDQogDQogI2luY2x1ZGUgPFByb3RvY29sL01tQ3B1SW8uaD4gIC8vIEVGSV9NTV9D UFVfSU9fUFJPVE9DT0wNCisjaW5jbHVkZSA8VWVmaS9VZWZpQmFzZVR5cGUuaD4gLy8gRUZJX1NU QVRVUw0KKw0KKyNpbmNsdWRlICJBcGljSWQuaCIgICAgICAgICAgICAvLyBBUElDX0lEDQogDQog VUlOVDMyDQogUWVtdUNwdWhwUmVhZENvbW1hbmREYXRhMiAoDQogICBJTiBDT05TVCBFRklfTU1f Q1BVX0lPX1BST1RPQ09MICpNbUNwdUlvDQogICApOw0KIA0KIFVJTlQ4DQogUWVtdUNwdWhwUmVh ZENwdVN0YXR1cyAoDQogICBJTiBDT05TVCBFRklfTU1fQ1BVX0lPX1BST1RPQ09MICpNbUNwdUlv DQogICApOw0KIA0KIFVJTlQzMg0KIFFlbXVDcHVocFJlYWRDb21tYW5kRGF0YSAoDQogICBJTiBD T05TVCBFRklfTU1fQ1BVX0lPX1BST1RPQ09MICpNbUNwdUlvDQogICApOw0KIA0KIFZPSUQNCiBR ZW11Q3B1aHBXcml0ZUNwdVNlbGVjdG9yICgNCiAgIElOIENPTlNUIEVGSV9NTV9DUFVfSU9fUFJP VE9DT0wgKk1tQ3B1SW8sDQogICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgIFNlbGVj dG9yDQogICApOw0KIA0KIFZPSUQNCiBRZW11Q3B1aHBXcml0ZUNvbW1hbmQgKA0KICAgSU4gQ09O U1QgRUZJX01NX0NQVV9JT19QUk9UT0NPTCAqTW1DcHVJbywNCiAgIElOIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgQ29tbWFuZA0KICAgKTsNCiANCitFRklfU1RBVFVTDQorUWVtdUNwdWhw Q29sbGVjdEFwaWNJZHMgKA0KKyAgSU4gIENPTlNUIEVGSV9NTV9DUFVfSU9fUFJPVE9DT0wgKk1t Q3B1SW8sDQorICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZUNwdUNv dW50LA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgQXBpY0lkQ291bnQsDQor ICBPVVQgQVBJQ19JRCAgICAgICAgICAgICAgICAgICAgICAqUGx1Z2dlZEFwaWNJZHMsDQorICBP VVQgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAqUGx1Z2dlZENvdW50LA0KKyAgT1VUIEFQ SUNfSUQgICAgICAgICAgICAgICAgICAgICAgKlRvVW5wbHVnQXBpY0lkcywNCisgIE9VVCBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICpUb1VucGx1Z0NvdW50DQorICApOw0KKw0KICNlbmRp ZiAvLyBRRU1VX0NQVUhQX0hfDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9DcHVIb3RwbHVnU21tL1Fl bXVDcHVocC5jIGIvT3ZtZlBrZy9DcHVIb3RwbHVnU21tL1FlbXVDcHVocC5jCmluZGV4IDMxZTQ2 ZjUxOTM0YS4uOGQ0YTY2OTNjOGQ2IDEwMDY0NAotLS0gYS9Pdm1mUGtnL0NwdUhvdHBsdWdTbW0v UWVtdUNwdWhwLmMKKysrIGIvT3ZtZlBrZy9DcHVIb3RwbHVnU21tL1FlbXVDcHVocC5jCkBAIC0x LDI3ICsxLDI3IEBACiAvKiogQGZpbGUNCi0gIFNpbXBsZSB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0 IGFjY2VzcyBRRU1VJ3MgbW9kZXJuIENQVSBob3RwbHVnIHJlZ2lzdGVyDQotICBibG9jay4NCisg IFNpbXBsZSB3cmFwcGVyIGZ1bmN0aW9ucyBhbmQgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBhY2Nl c3MgUUVNVSdzIG1vZGVybiBDUFUNCisgIGhvdHBsdWcgcmVnaXN0ZXIgYmxvY2suDQogDQotICBU aGVzZSBmdW5jdGlvbnMgdGhpbmx5IHdyYXAgc29tZSBvZiB0aGUgcmVnaXN0ZXJzIGRlc2NyaWJl ZCBpbg0KKyAgVGhlc2UgZnVuY3Rpb25zIG1hbmlwdWxhdGUgc29tZSBvZiB0aGUgcmVnaXN0ZXJz IGRlc2NyaWJlZCBpbg0KICAgImRvY3Mvc3BlY3MvYWNwaV9jcHVfaG90cGx1Zy50eHQiIGluIHRo ZSBRRU1VIHNvdXJjZS4gSU8gUG9ydHMgYXJlIGFjY2Vzc2VkDQogICB2aWEgRUZJX01NX0NQVV9J T19QUk9UT0NPTC4gSWYgYSBwcm90b2NvbCBjYWxsIGZhaWxzLCB0aGVzZSBmdW5jdGlvbnMgZG9u J3QNCiAgIHJldHVybi4NCiANCiAgIENvcHlyaWdodCAoYykgMjAyMCwgUmVkIEhhdCwgSW5jLg0K IA0KICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAqKi8N CiANCiAjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9RMzVNY2hJY2g5Lmg+ICAgICAvLyBJQ0g5 X0NQVV9IT1RQTFVHX0JBU0UNCiAjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9RZW11Q3B1SG90 cGx1Zy5oPiAvLyBRRU1VX0NQVUhQX1JfQ01EX0RBVEEyDQogI2luY2x1ZGUgPExpYnJhcnkvQmFz ZUxpYi5oPiAgICAgICAgICAgICAgICAgLy8gQ3B1RGVhZExvb3AoKQ0KICNpbmNsdWRlIDxMaWJy YXJ5L0RlYnVnTGliLmg+ICAgICAgICAgICAgICAgIC8vIERFQlVHKCkNCiANCiAjaW5jbHVkZSAi UWVtdUNwdWhwLmgiDQogDQogVUlOVDMyDQogUWVtdUNwdWhwUmVhZENvbW1hbmREYXRhMiAoDQog ICBJTiBDT05TVCBFRklfTU1fQ1BVX0lPX1BST1RPQ09MICpNbUNwdUlvDQogICApDQogew0KICAg VUlOVDMyICAgICBDb21tYW5kRGF0YTI7DQpAQCAtMTE1LDIyICsxMTUsMTg3IEBAIFFlbXVDcHVo cFdyaXRlQ3B1U2VsZWN0b3IgKAogDQogVk9JRA0KIFFlbXVDcHVocFdyaXRlQ29tbWFuZCAoDQog ICBJTiBDT05TVCBFRklfTU1fQ1BVX0lPX1BST1RPQ09MICpNbUNwdUlvLA0KICAgSU4gVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kDQogICApDQogew0KICAgRUZJX1NUQVRVUyBT dGF0dXM7DQogDQogICBTdGF0dXMgPSBNbUNwdUlvLT5Jby5Xcml0ZSAoDQogICAgICAgICAgICAg ICAgICAgICAgICAgIE1tQ3B1SW8sDQogICAgICAgICAgICAgICAgICAgICAgICAgIE1NX0lPX1VJ TlQ4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBJQ0g5X0NQVV9IT1RQTFVHX0JBU0UgKyBR RU1VX0NQVUhQX1dfQ01ELA0KICAgICAgICAgICAgICAgICAgICAgICAgICAxLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAmQ29tbWFuZA0KICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi JWE6ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KICAgICBBU1NFUlQgKEZBTFNFKTsN CiAgICAgQ3B1RGVhZExvb3AgKCk7DQogICB9DQogfQ0KKw0KKy8qKg0KKyAgQ29sbGVjdCB0aGUg QVBJQyBJRHMgb2YNCisgIC0gdGhlIENQVXMgdGhhdCBoYXZlIGJlZW4gaG90LXBsdWdnZWQsDQor ICAtIHRoZSBDUFVzIHRoYXQgYXJlIGFib3V0IHRvIGJlIGhvdC11bnBsdWdnZWQuDQorDQorICBU aGlzIGZ1bmN0aW9uIG9ubHkgc2NhbnMgZm9yIGV2ZW50cyAtLSBpdCBkb2VzIG5vdCBtb2RpZnkg dGhlbSAtLSBpbiB0aGUNCisgIGhvdHBsdWcgcmVnaXN0ZXJzLg0KKw0KKyAgT24gZXJyb3IsIHRo ZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHBhcmFtZXRlcnMgYXJlIHVuZGVmaW5lZC4NCisNCisg IEBwYXJhbVtpbl0gTW1DcHVJbyAgICAgICAgICAgVGhlIEVGSV9NTV9DUFVfSU9fUFJPVE9DT0wg aW5zdGFuY2UgZm9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyBJ TyBQb3J0cy4NCisNCisgIEBwYXJhbVtpbl0gUG9zc2libGVDcHVDb3VudCAgVGhlIG51bWJlciBv ZiBwb3NzaWJsZSBDUFVzIGluIHRoZSBzeXN0ZW0uIE11c3QNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmUgcG9zaXRpdmUuDQorDQorICBAcGFyYW1baW5dIEFwaWNJZENvdW50ICAg ICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgZWFjaCBvbmUgb2YgdGhlDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBsdWdnZWRBcGljSWRzIGFuZCBUb1VucGx1Z0FwaWNJZHMgYXJy YXlzIGNhbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvbW1vZGF0ZS4gTXVz dCBiZSBwb3NpdGl2ZS4NCisNCisgIEBwYXJhbVtvdXRdIFBsdWdnZWRBcGljSWRzICAgVGhlIEFQ SUMgSURzIG9mIHRoZSBDUFVzIHRoYXQgaGF2ZSBiZWVuDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGhvdC1wbHVnZ2VkLg0KKw0KKyAgQHBhcmFtW291dF0gUGx1Z2dlZENvdW50ICAg ICBUaGUgbnVtYmVyIG9mIGZpbGxlZC1pbiBBUElDIElEcyBpbg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQbHVnZ2VkQXBpY0lkcy4NCisNCisgIEBwYXJhbVtvdXRdIFRvVW5wbHVn QXBpY0lkcyAgVGhlIEFQSUMgSURzIG9mIHRoZSBDUFVzIHRoYXQgYXJlIGFib3V0IHRvIGJlDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdC11bnBsdWdnZWQuDQorDQorICBAcGFy YW1bb3V0XSBUb1VucGx1Z0NvdW50ICAgIFRoZSBudW1iZXIgb2YgZmlsbGVkLWluIEFQSUMgSURz IGluDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvVW5wbHVnQXBpY0lkcy4NCisN CisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBQb3NzaWJsZUNwdUNvdW50IGlzIHpl cm8sIG9yIEFwaWNJZENvdW50IGlzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg emVyby4NCisNCisgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgICBJbnZhbGlkIGJpdG1h cCBkZXRlY3RlZCBpbiB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRRU1V X0NQVUhQX1JfQ1BVX1NUQVQgcmVnaXN0ZXIuDQorDQorICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9P X1NNQUxMICAgVGhlcmUgd2FzIGFuIGF0dGVtcHQgdG8gcGxhY2UgbW9yZSB0aGFuDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBpY0lkQ291bnQgQVBJQyBJRHMgaW50byBvbmUg b2YgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGx1Z2dlZEFwaWNJZHMg YW5kIFRvVW5wbHVnQXBpY0lkcyBhcnJheXMuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgT3V0cHV0IHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHNldCBzdWNjZXNzZnVsbHkuDQor KiovDQorRUZJX1NUQVRVUw0KK1FlbXVDcHVocENvbGxlY3RBcGljSWRzICgNCisgIElOICBDT05T VCBFRklfTU1fQ1BVX0lPX1BST1RPQ09MICpNbUNwdUlvLA0KKyAgSU4gIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgUG9zc2libGVDcHVDb3VudCwNCisgIElOICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgIEFwaWNJZENvdW50LA0KKyAgT1VUIEFQSUNfSUQgICAgICAgICAgICAgICAg ICAgICAgKlBsdWdnZWRBcGljSWRzLA0KKyAgT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgKlBsdWdnZWRDb3VudCwNCisgIE9VVCBBUElDX0lEICAgICAgICAgICAgICAgICAgICAgICpU b1VucGx1Z0FwaWNJZHMsDQorICBPVVQgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAqVG9V bnBsdWdDb3VudA0KKyAgKQ0KK3sNCisgIFVJTlQzMiBDdXJyZW50U2VsZWN0b3I7DQorDQorICBp ZiAoUG9zc2libGVDcHVDb3VudCA9PSAwIHx8IEFwaWNJZENvdW50ID09IDApIHsNCisgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgICpQbHVnZ2VkQ291bnQgPSAw Ow0KKyAgKlRvVW5wbHVnQ291bnQgPSAwOw0KKw0KKyAgQ3VycmVudFNlbGVjdG9yID0gMDsNCisg IGRvIHsNCisgICAgVUlOVDMyICBQZW5kaW5nU2VsZWN0b3I7DQorICAgIFVJTlQ4ICAgQ3B1U3Rh dHVzOw0KKyAgICBBUElDX0lEICpFeHRlbmRJZHM7DQorICAgIFVJTlQzMiAgKkV4dGVuZENvdW50 Ow0KKyAgICBBUElDX0lEIE5ld0FwaWNJZDsNCisNCisgICAgLy8NCisgICAgLy8gV3JpdGUgQ3Vy cmVudFNlbGVjdG9yICh3aGljaCBpcyB2YWxpZCkgdG8gdGhlIENQVSBzZWxlY3RvciByZWdpc3Rl ci4NCisgICAgLy8gQ29uc2VxdWVuY2VzOg0KKyAgICAvLw0KKyAgICAvLyAtIE90aGVyIHJlZ2lz dGVyIGFjY2Vzc2VzIHdpbGwgYmUgcGVybWl0dGVkLg0KKyAgICAvLw0KKyAgICAvLyAtIFRoZSBR RU1VX0NQVUhQX0NNRF9HRVRfUEVORElORyBjb21tYW5kIHdpbGwgc3RhcnQgc2Nhbm5pbmcgZm9y IGEgQ1BVDQorICAgIC8vICAgd2l0aCBwZW5kaW5nIGV2ZW50cyBhdCBDdXJyZW50U2VsZWN0b3Ig KGluY2x1c2l2ZSkuDQorICAgIC8vDQorICAgIFFlbXVDcHVocFdyaXRlQ3B1U2VsZWN0b3IgKE1t Q3B1SW8sIEN1cnJlbnRTZWxlY3Rvcik7DQorICAgIC8vDQorICAgIC8vIFdyaXRlIHRoZSBRRU1V X0NQVUhQX0NNRF9HRVRfUEVORElORyBjb21tYW5kLiBDb25zZXF1ZW5jZXMNCisgICAgLy8gKGlu ZGVwZW5kZW50bHkgb2YgZWFjaCBvdGhlcik6DQorICAgIC8vDQorICAgIC8vIC0gSWYgdGhlcmUg aXMgYSBDUFUgd2l0aCBwZW5kaW5nIGV2ZW50cywgc3RhcnRpbmcgYXQgQ3VycmVudFNlbGVjdG9y DQorICAgIC8vICAgKGluY2x1c2l2ZSksIHRoZSBDUFUgc2VsZWN0b3Igd2lsbCBiZSB1cGRhdGVk IHRvIHRoYXQgQ1BVLiBOb3RlIHRoYXQNCisgICAgLy8gICB0aGUgc2Nhbm5pbmcgaW4gUUVNVSBt YXkgd3JhcCBhcm91bmQsIGJlY2F1c2Ugd2UgbXVzdCBuZXZlciBjbGVhciB0aGUNCisgICAgLy8g ICBldmVudCBiaXRzLg0KKyAgICAvLw0KKyAgICAvLyAtIFRoZSBRRU1VX0NQVUhQX1JXX0NNRF9E QVRBIHJlZ2lzdGVyIHdpbGwgcmV0dXJuIHRoZSAocG9zc2libHkgdXBkYXRlZCkNCisgICAgLy8g ICBDUFUgc2VsZWN0b3IgdmFsdWUuDQorICAgIC8vDQorICAgIFFlbXVDcHVocFdyaXRlQ29tbWFu ZCAoTW1DcHVJbywgUUVNVV9DUFVIUF9DTURfR0VUX1BFTkRJTkcpOw0KKyAgICBQZW5kaW5nU2Vs ZWN0b3IgPSBRZW11Q3B1aHBSZWFkQ29tbWFuZERhdGEgKE1tQ3B1SW8pOw0KKyAgICBpZiAoUGVu ZGluZ1NlbGVjdG9yIDwgQ3VycmVudFNlbGVjdG9yKSB7DQorICAgICAgREVCVUcgKChERUJVR19W RVJCT1NFLCAiJWE6IEN1cnJlbnRTZWxlY3Rvcj0ldSBQZW5kaW5nU2VsZWN0b3I9JXU6ICINCisg ICAgICAgICJ3cmFwLWFyb3VuZFxuIiwgX19GVU5DVElPTl9fLCBDdXJyZW50U2VsZWN0b3IsIFBl bmRpbmdTZWxlY3RvcikpOw0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorICAgIEN1cnJlbnRTZWxl Y3RvciA9IFBlbmRpbmdTZWxlY3RvcjsNCisNCisgICAgLy8NCisgICAgLy8gQ2hlY2sgdGhlIGtu b3duIHN0YXR1cyAvIGV2ZW50IGJpdHMgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgQ1BVLg0K KyAgICAvLw0KKyAgICBDcHVTdGF0dXMgPSBRZW11Q3B1aHBSZWFkQ3B1U3RhdHVzIChNbUNwdUlv KTsNCisgICAgaWYgKChDcHVTdGF0dXMgJiBRRU1VX0NQVUhQX1NUQVRfSU5TRVJUKSAhPSAwKSB7 DQorICAgICAgLy8NCisgICAgICAvLyBUaGUgImluc2VydCIgZXZlbnQgZ3VhcmFudGVlcyB0aGUg ImVuYWJsZWQiIHN0YXR1czsgcGx1cyBpdCBleGNsdWRlcw0KKyAgICAgIC8vIHRoZSAicmVtb3Zl IiBldmVudC4NCisgICAgICAvLw0KKyAgICAgIGlmICgoQ3B1U3RhdHVzICYgUUVNVV9DUFVIUF9T VEFUX0VOQUJMRUQpID09IDAgfHwNCisgICAgICAgICAgKENwdVN0YXR1cyAmIFFFTVVfQ1BVSFBf U1RBVF9SRU1PVkUpICE9IDApIHsNCisgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTog Q3VycmVudFNlbGVjdG9yPSV1IENwdVN0YXR1cz0weCV4OiAiDQorICAgICAgICAgICJpbmNvbnNp c3RlbnQgQ1BVIHN0YXR1c1xuIiwgX19GVU5DVElPTl9fLCBDdXJyZW50U2VsZWN0b3IsDQorICAg ICAgICAgIENwdVN0YXR1cykpOw0KKyAgICAgICAgcmV0dXJuIEVGSV9QUk9UT0NPTF9FUlJPUjsN CisgICAgICB9DQorDQorICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiJWE6IEN1cnJlbnRT ZWxlY3Rvcj0ldTogaW5zZXJ0XG4iLCBfX0ZVTkNUSU9OX18sDQorICAgICAgICBDdXJyZW50U2Vs ZWN0b3IpKTsNCisNCisgICAgICBFeHRlbmRJZHMgICA9IFBsdWdnZWRBcGljSWRzOw0KKyAgICAg IEV4dGVuZENvdW50ID0gUGx1Z2dlZENvdW50Ow0KKyAgICB9IGVsc2UgaWYgKChDcHVTdGF0dXMg JiBRRU1VX0NQVUhQX1NUQVRfUkVNT1ZFKSAhPSAwKSB7DQorICAgICAgREVCVUcgKChERUJVR19W RVJCT1NFLCAiJWE6IEN1cnJlbnRTZWxlY3Rvcj0ldTogcmVtb3ZlXG4iLCBfX0ZVTkNUSU9OX18s DQorICAgICAgICBDdXJyZW50U2VsZWN0b3IpKTsNCisNCisgICAgICBFeHRlbmRJZHMgICA9IFRv VW5wbHVnQXBpY0lkczsNCisgICAgICBFeHRlbmRDb3VudCA9IFRvVW5wbHVnQ291bnQ7DQorICAg IH0gZWxzZSB7DQorICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiJWE6IEN1cnJlbnRTZWxl Y3Rvcj0ldTogbm8gZXZlbnRcbiIsDQorICAgICAgICBfX0ZVTkNUSU9OX18sIEN1cnJlbnRTZWxl Y3RvcikpOw0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIFNhdmUg dGhlIEFQSUMgSUQgb2YgdGhlIENQVSB3aXRoIHRoZSBwZW5kaW5nIGV2ZW50LCB0byB0aGUgY29y cmVzcG9uZGluZw0KKyAgICAvLyBBUElDIElEIGFycmF5Lg0KKyAgICAvLw0KKyAgICBpZiAoKkV4 dGVuZENvdW50ID09IEFwaWNJZENvdW50KSB7DQorICAgICAgREVCVUcgKChERUJVR19FUlJPUiwg IiVhOiBBUElDIElEIGFycmF5IHRvbyBzbWFsbFxuIiwgX19GVU5DVElPTl9fKSk7DQorICAgICAg cmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KKyAgICB9DQorICAgIFFlbXVDcHVocFdyaXRl Q29tbWFuZCAoTW1DcHVJbywgUUVNVV9DUFVIUF9DTURfR0VUX0FSQ0hfSUQpOw0KKyAgICBOZXdB cGljSWQgPSBRZW11Q3B1aHBSZWFkQ29tbWFuZERhdGEgKE1tQ3B1SW8pOw0KKyAgICBERUJVRyAo KERFQlVHX1ZFUkJPU0UsICIlYTogQXBpY0lkPSIgRk1UX0FQSUNfSUQgIlxuIiwgX19GVU5DVElP Tl9fLA0KKyAgICAgIE5ld0FwaWNJZCkpOw0KKyAgICBFeHRlbmRJZHNbKCpFeHRlbmRDb3VudCkr K10gPSBOZXdBcGljSWQ7DQorDQorICAgIC8vDQorICAgIC8vIFdlJ3ZlIHByb2Nlc3NlZCB0aGUg Q1BVIHdpdGggKGtub3duKSBwZW5kaW5nIGV2ZW50cywgYnV0IHdlIG11c3QgbmV2ZXINCisgICAg Ly8gY2xlYXIgZXZlbnRzLiBUaGVyZWZvcmUgd2UgbmVlZCB0byBhZHZhbmNlIHBhc3QgdGhpcyBD UFUgbWFudWFsbHk7DQorICAgIC8vIG90aGVyd2lzZSwgUUVNVV9DUFVIUF9DTURfR0VUX1BFTkRJ Tkcgd291bGQgc3RpY2sgdG8gdGhlIGN1cnJlbnRseQ0KKyAgICAvLyBzZWxlY3RlZCBDUFUuDQor ICAgIC8vDQorICAgIEN1cnJlbnRTZWxlY3RvcisrOw0KKyAgfSB3aGlsZSAoQ3VycmVudFNlbGVj dG9yIDwgUG9zc2libGVDcHVDb3VudCk7DQorDQorICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICIl YTogUGx1Z2dlZENvdW50PSV1IFRvVW5wbHVnQ291bnQ9JXVcbiIsDQorICAgIF9fRlVOQ1RJT05f XywgKlBsdWdnZWRDb3VudCwgKlRvVW5wbHVnQ291bnQpKTsNCisgIHJldHVybiBFRklfU1VDQ0VT UzsNCit9DQotLSAKMi4xOS4xLjMuZzMwMjQ3YWE1ZDIwMQoKCg==