From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Fioravante Subject: Several vtpm patches and workarounds: persistence, stability, tpm_emulator-0.5.1 Date: Fri, 21 Aug 2009 12:02:13 -0400 Message-ID: <1250870533.13535.1.camel@anonelbe> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1532478779==" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --===============1532478779== Content-Type: multipart/signed; micalg="sha1"; protocol="application/x-pkcs7-signature"; boundary="=-a9+ffEH5+jJpLhrz5hTc" --=-a9+ffEH5+jJpLhrz5hTc Content-Type: multipart/mixed; boundary="=-POIV130cRnnxupcAqKB3" --=-POIV130cRnnxupcAqKB3 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable We are using xen and vtpm at JHU APL for a project and ran into many problems. I've had to develop several patches and workarounds and wanted to contribute them back to the xen community. Here are a few patches that will make the xen vtpm system more stable and allow you to have persistent vtpms. In other words you can reboot a domU and it will come back up with the same vtpm instance and retain all the keys and data you stored in it. Also included is a patch that ports vtpm to tpm_emulator-0.5.1. The new emulator has a lot of bug fixes over the old 0.4 and is recommended if you want a working vtpm implementation. This port is incomplete, so please see the details on that patch before applying it. Some of these are actual bug fixes while others are hacks/workarounds. Becuase of this, they have been broken into several patches to assist the developers in choosing which they want to integrate. With these patches we have been successfully able to use persistent vtpms for signing certificates. All of these patches can be applied on top of each other in any order. $ patch -p1 < patchfile Finally, there are also some bugs in the xen hotplug system and the vtpm_manager. Sometimes the manager can get into a corrupted state and it will cease to work properly. Workarounds for some of the problems are included at the end of this email. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D vtpm_manager-hash_error.patch =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D There is a bug in the vtpm_manager that has to do with hashing and saving the NVM memory files (vtpm_dm_%d.data). The file is not truncated when it is written and this results in the hash becoming invalid because of the extra bits at the end of the file. This patch adds O_TRUNC to the flags when opening the file. More details on this issue are in the bug report on bugzilla=20 http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=3D1488 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D vtpm-uuid.patch =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D Right now xen will create a new vtpm instance everytime you start up a domU, even if you specify the instance parameter in your config file. Each vtpm instance is then given a uuid and the vtpm.db file maps instance numbers to uuid numbers. This patch is a hack that lets you explicitly set the uuid of your vtpm instance. Everytime you boot up your domU now the vtpm will get that uuid and thus it will always get the same vtpm instance number instead of being generated a new one. So for example, in your config file you would do something like this vtpm =3D [ 'backend=3D0,uuid=3Ddcdb124b-9fed-4040-b149-dd2dfd8d094c' ] If you are using this patch then be sure to also use the hash_error patch, otherwise you may see checksum failed messages when booting your domain and the vtpm tries to read the NVM file. These 2 patches were made separate because the first is a bug fix and this one is more of a hack. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D vtpm-0.4-persistence.patch =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D This patch is only needed if you want to continue using tpm_emulator-0.4. It is not necessary if you are going to use the tpm_emulator-0.5.1 patch. This patch will add #define TPM_STRONG_PERSISTENCE which will make the tpm_emulator send a TPM_SaveState command after every tpm command it executes. This is needed because some commands like TPM_TakeOwnership do not send the TPM_SaveState command on their own. The tpm_emulator will only request the manager to save its state when this TPM command is sent. So in short without this patch, if you took ownership of your vtpm and then rebooted the domU, the the change in state would not be saved and your vtpm would come back unowned again.=20 I imagine several other tpm commands would have this problem as well. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D vtpm-0.5.1.patch =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D This patch will port vtpm to use tpm_emulator-0.5.1 The newer version of the emulator contains several bug fixes, one that we were seeing in our use of vtpm. This patch also defines TPM_STRONG_PERSISTENCE for the new emulator. A couple of important notes about this patch: -This has only been tested on PVM domU's. In theory it should work for HVM but I have not tried it at all and can guarantee nothing. -All the relevant changes in tools/vtpm/vtpm.patch have been ported to=20 tpm_emulator-0.5.1.=20 -None of the changes in tpm_emulator.patch have been ported. In particular this means the BUILD_EMULATOR option, which as I understand lets you use the tpm_emulator in dom0 for a machine that does not have a real hardware TPM does not work. This functionality should be easy to add though because the new emulator already comes with a kernel module interface. -No considerations were made for the VTPM_MULTI_VM feature (which is supposedly unfinished). This patch may or may not break any progress made on that feature. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D vtpm_manager and xen hotplug workarounds =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D Here are some issues I've run into when trying to use vtpm. Note that in my test cases we were only using vtpms in PVM domains. It might make sense to add these to a readme or something somewhere until the hotplug issues are fixed. 1-Q) When I boot my domU with a vtpm for the first time I get=20 the following error message in the vtpm_managerd output Loading NVM. Sending LoadNVM command ERROR[VTPM]: Failed to load NVM .INFO[VTPM]: [VTPM Listener]: VTPM Listener waiting for messages. Reading LoadNVM header 1-A) This is ok. This message comes up when the vtpm non-volatile memory file does not exist, which is normal when xen creates a new vtpm instance. 2-Q) When I start vtpm_managerd it starts spamming output to the console forever and gives the following error: ERROR[VTPM]: [Hotplug Listener]: Hotplug Listener can't read from ipc. Errono =3D 0. Aborting...=20 2-A) Sometimes the hotplug scripts and the fifos they use to communicate=20 get in a corrupted state. We need to clear all the fifos.=20 1) First, stop all of the vms that have vtpms. 2) Kill the vtpm_managerd 3) Search for vtpm processes. #ps -ef | grep vtpm You may see processes that look like the following. If you do not see any then skip ahead to the next step. /bin/bash /etc/xen/scripts/vtpm add dd skip=3D10 bs=3D1 count=3D4 if=3D/var/vtpm/fifos/to_console.fifo /usr/bin/vtpmd First, kill any of the dd processes, and then run ps again. Most if not all of the /etx/xen/scripts/vtpm processes should have quit. Kill any of the remaining scripts/vtpm and vtpmd processes. Note that after killing some of of the "vtpm add" processes new "vtpm remove" processes may get spawned which you will also need to kill. 4) Delete all of the fifos and socks #rm /var/vtpm/fifos/* #rm /var/vtpm/socks/* 5) Remove the lock files if they exist # rm -rf /var/run/xen-hotplug/vtpm* 6) Now start up the vtpm_managerd again, it should start without errors. 7) Finally, you should be able to boot up the vms again without any problems. 3-Q) When I start a domU that has a vtpm it hangs in the pause state and will not boot. If I wait long enough it will quit and tell me that the Hotplug scripts are not working. 3-A) This occurs when we have stale lock files that did not get removed properly.=20 Perform the same set of steps in 2-A. --=-POIV130cRnnxupcAqKB3 Content-Disposition: attachment; filename="vtpm_manager-hash_error.patch" Content-Type: text/x-patch; name="vtpm_manager-hash_error.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtTmF1ciB4ZW4tdW5zdGFibGUuaGcucHJpc3RpbmUvdG9vbHMvdnRwbV9tYW5hZ2VyL21h bmFnZXIvc2VjdXJlc3RvcmFnZS5jIHhlbi11bnN0YWJsZS5oZy90b29scy92dHBtX21hbmFnZXIv bWFuYWdlci9zZWN1cmVzdG9yYWdlLmMNCi0tLSB4ZW4tdW5zdGFibGUuaGcucHJpc3RpbmUvdG9v bHMvdnRwbV9tYW5hZ2VyL21hbmFnZXIvc2VjdXJlc3RvcmFnZS5jCTIwMDktMDgtMDcgMTA6MTk6 NDguMDAwMDAwMDAwIC0wNDAwDQorKysgeGVuLXVuc3RhYmxlLmhnL3Rvb2xzL3Z0cG1fbWFuYWdl ci9tYW5hZ2VyL3NlY3VyZXN0b3JhZ2UuYwkyMDA5LTA4LTA3IDEwOjIxOjQzLjAwMDAwMDAwMCAt MDQwMA0KQEAgLTE5OSw3ICsxOTksNyBAQA0KICAgLy8gVE9ETzogSG93IHRvIHByb3Blcmx5IHJl dHVybiBmcm9tIHRoZXNlLiBEbyB3ZSBjYXJlIGlmIHdlIHJldHVybiBmYWlsdXJlDQogICAvLyAg ICAgICBhZnRlciB3cml0aW5nIHRoZSBmaWxlPyBXZSBjYW4ndCBnZXQgdGhlIG9sZCBvbmUgYmFj ay4NCiAgIC8vIFRPRE86IEJhY2t1cCBvbGQgZmlsZSBhbmQgdHJ5IGFuZCByZWNvdmVyIHRoYXQg d2F5Lg0KLSAgZmggPSBvcGVuKG15RE1JLT5OVk1Mb2NhdGlvbiwgT19XUk9OTFkgfCBPX0NSRUFU LCBTX0lSRUFEIHwgU19JV1JJVEUpOw0KKyAgZmggPSBvcGVuKG15RE1JLT5OVk1Mb2NhdGlvbiwg T19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgU19JUkVBRCB8IFNfSVdSSVRFKTsNCiAgIGlm ICggKGJ5dGVzX3dyaXR0ZW4gPSB3cml0ZShmaCwgc2VhbGVkX05WTS5ieXRlcywgYnVmZmVyX2xl bigmc2VhbGVkX05WTSkgKSAhPSAobG9uZykgYnVmZmVyX2xlbigmc2VhbGVkX05WTSkpKSB7DQog ICAgIHZ0cG1sb2dlcnJvcihWVFBNX0xPR19WVFBNLCAiV2UganVzdCBvdmVyd3JvdGUgYSBETUlf TlZNIGFuZCBmYWlsZWQgdG8gZmluaXNoLiAlbGQvJWxkIGJ5dGVzLlxuIiwgYnl0ZXNfd3JpdHRl biwgKGxvbmcpYnVmZmVyX2xlbigmc2VhbGVkX05WTSkpOw0KICAgICBzdGF0dXMgPSBUUE1fSU9F UlJPUjsNCg== --=-POIV130cRnnxupcAqKB3 Content-Disposition: attachment; filename="vtpm-uuid.patch" Content-Type: text/x-patch; name="vtpm-uuid.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtTmF1ciB4ZW4tdW5zdGFibGUuaGcucHJpc3RpbmUvdG9vbHMvcHl0aG9uL3hlbi94bS9j cmVhdGUucHkgeGVuLXVuc3RhYmxlLmhnL3Rvb2xzL3B5dGhvbi94ZW4veG0vY3JlYXRlLnB5DQot LS0geGVuLXVuc3RhYmxlLmhnLnByaXN0aW5lL3Rvb2xzL3B5dGhvbi94ZW4veG0vY3JlYXRlLnB5 CTIwMDktMDgtMDcgMTA6MTk6NDguMDAwMDAwMDAwIC0wNDAwDQorKysgeGVuLXVuc3RhYmxlLmhn L3Rvb2xzL3B5dGhvbi94ZW4veG0vY3JlYXRlLnB5CTIwMDktMDgtMDcgMTA6NDE6MzEuMDAwMDAw MDAwIC0wNDAwDQpAQCAtODkwLDYgKzg5MCw3IEBADQogICAgIGlmIGxlbih2dHBtKSA+IDA6DQog ICAgICAgICBkID0gdnRwbVswXQ0KICAgICAgICAgaW5zdGFuY2UgPSBkLmdldCgnaW5zdGFuY2Un KQ0KKwl1dWlkID0gZC5nZXQoJ3V1aWQnKQ0KICAgICAgICAgaWYgaW5zdGFuY2UgPT0gIlZUUE1E IjoNCiAgICAgICAgICAgICBpbnN0YW5jZSA9ICIwIg0KICAgICAgICAgZWxzZToNCkBAIC05MDgs NiArOTA5LDggQEANCiAgICAgICAgICAgICBjb25maWdfdnRwbS5hcHBlbmQoWydiYWNrZW5kJywg YmFja2VuZF0pDQogICAgICAgICBpZiB0eXA6DQogICAgICAgICAgICAgY29uZmlnX3Z0cG0uYXBw ZW5kKFsndHlwZScsIHR5cGVdKQ0KKyAgICAgICAgaWYgdXVpZDoNCisgICAgICAgICAgICBjb25m aWdfdnRwbS5hcHBlbmQoWyd1dWlkJywgdHlwZV0pDQogICAgICAgICBjb25maWdfZGV2cy5hcHBl bmQoWydkZXZpY2UnLCBjb25maWdfdnRwbV0pDQogDQogDQpAQCAtMTE0Nyw3ICsxMTUwLDcgQEAN CiAgICAgICAgICAgICAoaywgdikgPSBiLnN0cmlwKCkuc3BsaXQoJz0nLCAxKQ0KICAgICAgICAg ICAgIGsgPSBrLnN0cmlwKCkNCiAgICAgICAgICAgICB2ID0gdi5zdHJpcCgpDQotICAgICAgICAg ICAgaWYgayBub3QgaW4gWydiYWNrZW5kJywgJ2luc3RhbmNlJ106DQorICAgICAgICAgICAgaWYg ayBub3QgaW4gWydiYWNrZW5kJywgJ2luc3RhbmNlJywgJ3V1aWQnXToNCiAgICAgICAgICAgICAg ICAgZXJyKCdJbnZhbGlkIHZ0cG0gc3BlY2lmaWVyOiAnICsgdnRwbSkNCiAgICAgICAgICAgICBk W2tdID0gdg0KICAgICAgICAgdnRwbXMuYXBwZW5kKGQpDQo= --=-POIV130cRnnxupcAqKB3 Content-Disposition: attachment; filename="vtpm-0.4-persistence.patch" Content-Type: text/x-patch; name="vtpm-0.4-persistence.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtTmF1ciB4ZW4tdW5zdGFibGUuaGcucHJpc3RpbmUvdG9vbHMvdnRwbS90cG1fZW11bGF0 b3IucGF0Y2ggeGVuLXVuc3RhYmxlLmhnL3Rvb2xzL3Z0cG0vdHBtX2VtdWxhdG9yLnBhdGNoDQot LS0geGVuLXVuc3RhYmxlLmhnLnByaXN0aW5lL3Rvb2xzL3Z0cG0vdHBtX2VtdWxhdG9yLnBhdGNo CTIwMDktMDgtMDcgMTA6MTk6NDguMDAwMDAwMDAwIC0wNDAwDQorKysgeGVuLXVuc3RhYmxlLmhn L3Rvb2xzL3Z0cG0vdHBtX2VtdWxhdG9yLnBhdGNoCTIwMDktMDgtMDcgMTE6MDI6NDcuMDAwMDAw MDAwIC0wNDAwDQpAQCAtMTA0NSw3ICsxMDQ1LDggQEANCiBAQCAtMjIsNyArMjMsOCBAQA0KICAv KiBUUE0gY29uZmlndXJhdGlvbiAqLw0KICAjZGVmaW5lIFRQTV9TVE9SRV9UT19GSUxFICAgICAg IDENCi0gI3VuZGVmICBUUE1fU1RST05HX1BFUlNJU1RFTkNFDQorLSN1bmRlZiAgVFBNX1NUUk9O R19QRVJTSVNURU5DRQ0KKysjZGVmaW5lICBUUE1fU1RST05HX1BFUlNJU1RFTkNFDQogLSN1bmRl ZiAgVFBNX0dFTkVSQVRFX0VLDQogKy8vI3VuZGVmICBUUE1fR0VORVJBVEVfRUsNCiArI2RlZmlu ZSAgVFBNX0dFTkVSQVRFX0VLDQo= --=-POIV130cRnnxupcAqKB3 Content-Disposition: attachment; filename="vtpm-0.5.1.patch" Content-Type: text/x-patch; name="vtpm-0.5.1.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtTmF1ciB4ZW4tdW5zdGFibGUuaGcucHJpc3RpbmUvdG9vbHMvdnRwbS9NYWtlZmlsZSB4 ZW4tdW5zdGFibGUuaGcvdG9vbHMvdnRwbS9NYWtlZmlsZQ0KLS0tIHhlbi11bnN0YWJsZS5oZy5w cmlzdGluZS90b29scy92dHBtL01ha2VmaWxlCTIwMDktMDgtMDcgMTA6MTk6NDguMDAwMDAwMDAw IC0wNDAwDQorKysgeGVuLXVuc3RhYmxlLmhnL3Rvb2xzL3Z0cG0vTWFrZWZpbGUJMjAwOS0wOC0w NyAxMToxODo1MS4wMDAwMDAwMDAgLTA0MDANCkBAIC0xMCw3ICsxMCw3IEBADQogT1JJR19ESVIg PSBvcmlnDQogDQogIyBFbXVsYXRvciB0YXJiYWxsIG5hbWUNCi1UUE1fRU1VTEFUT1JfTkFNRSA9 IHRwbV9lbXVsYXRvci0wLjQNCitUUE1fRU1VTEFUT1JfTkFNRSA9IHRwbV9lbXVsYXRvci0wLjUu MQ0KIFRQTV9FTVVMQVRPUl9UQVJGSUxFID0gJChUUE1fRU1VTEFUT1JfTkFNRSkudGFyLmd6DQog DQogR01QX0hFQURFUiA9IC91c3IvaW5jbHVkZS9nbXAuaA0KQEAgLTE5LDEzICsxOSwxMCBAQA0K IGFsbDogYnVpbGQNCiANCiAuUEhPTlk6IGJ1aWxkDQotYnVpbGQ6ICQoVlRQTV9ESVIpICQoVFBN X0VNVUxBVE9SX0RJUikgYnVpbGRfc3ViDQorYnVpbGQ6IGJ1aWxkX3N1Yg0KIA0KIC5QSE9OWTog aW5zdGFsbA0KIGluc3RhbGw6IGJ1aWxkDQotCWlmIFsgIiQoQlVJTERfRU1VTEFUT1IpIiA9ICJ5 IiBdOyB0aGVuIFwNCi0JCSQoTUFLRSkgLUMgJChUUE1fRU1VTEFUT1JfRElSKSAkQCA7XA0KLQlm aSANCiAJJChNQUtFKSAtQyAkKFZUUE1fRElSKSAkQA0KIA0KIC5QSE9OWTogY2xlYW4NCkBAIC00 NiwyNSArNDMsMTQgQEANCiAkKFRQTV9FTVVMQVRPUl9UQVJGSUxFKToNCiAJd2dldCBodHRwOi8v ZG93bmxvYWQuYmVybGlvcy5kZS90cG0tZW11bGF0b3IvJChUUE1fRU1VTEFUT1JfVEFSRklMRSkN CiANCi0jIENyZWF0ZSB2dHBtIGFuZCBUUE0gZW11bGF0b3IgZGlycw0KLSMgYXBwbHkgcGF0Y2hl cyBmb3IgMSkgdXNlZCBhcyBkb20wIHRwbSBkcml2ZXIgMikgdXNlZCBhcyB2dHBtIGRldmljZSBp bnN0YW5jZQ0KLSQoVFBNX0VNVUxBVE9SX0RJUik6ICQoVFBNX0VNVUxBVE9SX1RBUkZJTEUpIHRw bV9lbXVsYXRvci5wYXRjaCANCi0Jc2V0IC1lOyBpZiBbICIkKEJVSUxEX0VNVUxBVE9SKSIgPSAi eSIgXTsgdGhlbiBcDQotCQlybSAtcmYgJChUUE1fRU1VTEFUT1JfRElSKTsgXA0KLQkJdGFyIC14 emYgJChUUE1fRU1VTEFUT1JfVEFSRklMRSk7IFwNCi0JCW12ICQoVFBNX0VNVUxBVE9SX05BTUUp ICQoVFBNX0VNVUxBVE9SX0RJUik7IFwNCi0JCWNkICQoVFBNX0VNVUxBVE9SX0RJUik7IFwNCi0J CXBhdGNoIC1wMSA8Li4vdHBtX2VtdWxhdG9yLnBhdGNoOyBcDQotCWZpDQotDQotJChWVFBNX0RJ Uik6ICQoVFBNX0VNVUxBVE9SX1RBUkZJTEUpIHZ0cG0ucGF0Y2gNCisjIENyZWF0ZSB2dHBtIGRp cnMNCiskKFZUUE1fRElSKS90cG1kL3RwbWQ6ICQoVFBNX0VNVUxBVE9SX1RBUkZJTEUpIHZ0cG0t MC41LjEucGF0Y2gNCiAJcm0gLXJmICQoVlRQTV9ESVIpDQogCXRhciAteHpmICQoVFBNX0VNVUxB VE9SX1RBUkZJTEUpDQogCW12ICQoVFBNX0VNVUxBVE9SX05BTUUpICQoVlRQTV9ESVIpDQogDQog CXNldCAtZTsgY2QgJChWVFBNX0RJUik7IFwNCi0JcGF0Y2ggLXAxIDwgLi4vdHBtX2VtdWxhdG9y LnBhdGNoOyBcDQotCXBhdGNoIC1wMSA8IC4uL3Z0cG0ucGF0Y2gNCisJcGF0Y2ggLXAxIDwgLi4v dnRwbS0wLjUuMS5wYXRjaA0KIA0KIG9yaWc6ICQoVFBNX0VNVUxBVE9SX1RBUkZJTEUpDQogCW1r ZGlyICQoT1JJR19ESVIpOw0KQEAgLTcyLDIyICs1OCwxNCBAQA0KIAl0YXIgLXh6ZiAuLi8kKFRQ TV9FTVVMQVRPUl9UQVJGSUxFKTsNCiANCiB1cGRhdGVwYXRjaGVzOiBjbGVhbiBvcmlnDQotCXNl dCAtZTsgaWYgWyAiJChCVUlMRF9FTVVMQVRPUikiID0gInkiIF07IHRoZW4gXA0KLQkJZmluZCAk KFRQTV9FTVVMQVRPUl9ESVIpIC1uYW1lICIqLm9yaWciIC1wcmludCB8IHhhcmdzIHJtIC1mOyBc DQotCQltdiB0cG1fZW11bGF0b3IucGF0Y2ggdHBtX2VtdWxhdG9yLnBhdGNoLm9sZDsgXA0KLQkJ ZGlmZiAtdXByTiBvcmlnLyQoVFBNX0VNVUxBVE9SX05BTUUpICQoVFBNX0VNVUxBVE9SX0RJUikg PiB0cG1fZW11bGF0b3IucGF0Y2ggfHwgdHJ1ZTsgXA0KLSAgICAgICAgZmk7IA0KIAlmaW5kICQo VlRQTV9ESVIpIC1uYW1lICIqLm9yaWciIC1wcmludCB8IHhhcmdzIHJtIC1mOyANCiAJbXYgdnRw bS5wYXRjaCB2dHBtLnBhdGNoLm9sZDsgDQogCWRpZmYgLXVwck4gJChUUE1fRU1VTEFUT1JfRElS KSAkKFZUUE1fRElSKSA+IHZ0cG0ucGF0Y2ggfHwgdHJ1ZTsNCiANCiAuUEhPTlk6IGJ1aWxkX3N1 Yg0KLWJ1aWxkX3N1YjoNCitidWlsZF9zdWI6ICQoVlRQTV9ESVIpL3RwbWQvdHBtZA0KIAlzZXQg LWU7IGlmIFsgLWUgJChHTVBfSEVBREVSKSBdOyB0aGVuIFwNCiAJCSQoTUFLRSkgLUMgJChWVFBN X0RJUik7IFwNCi0JCWlmIFsgIiQoQlVJTERfRU1VTEFUT1IpIiA9ICJ5IiBdOyB0aGVuIFwNCi0J CQkkKE1BS0UpIC1DICQoVFBNX0VNVUxBVE9SX0RJUik7IFwNCi0JCWZpIFwNCiAJZWxzZSBcDQog CQllY2hvICI9PT0gVW5hYmxlIHRvIGJ1aWxkIFZUUE1zLiBsaWJnbXAgY291bGQgbm90IGJlIGZv dW5kLiI7IFwNCiAJZmkNCmRpZmYgLU5hdXIgeGVuLXVuc3RhYmxlLmhnLnByaXN0aW5lL3Rvb2xz L3Z0cG0vdnRwbS0wLjUuMS5wYXRjaCB4ZW4tdW5zdGFibGUuaGcvdG9vbHMvdnRwbS92dHBtLTAu NS4xLnBhdGNoDQotLS0geGVuLXVuc3RhYmxlLmhnLnByaXN0aW5lL3Rvb2xzL3Z0cG0vdnRwbS0w LjUuMS5wYXRjaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMA0KKysrIHhlbi11 bnN0YWJsZS5oZy90b29scy92dHBtL3Z0cG0tMC41LjEucGF0Y2gJMjAwOS0wOC0wNyAxMToxNjox Ny4wMDAwMDAwMDAgLTA0MDANCkBAIC0wLDAgKzEsNzY2IEBADQorZGlmZiAtTmF1cnAgdHBtX2Vt dWxhdG9yLTAuNS4xL01ha2VmaWxlIHRwbTUtdGVzdC9NYWtlZmlsZQ0KKy0tLSB0cG1fZW11bGF0 b3ItMC41LjEvTWFrZWZpbGUJMjAwOC0wMi0xNCAwMzoyMjo0OC4wMDAwMDAwMDAgLTA1MDANCisr KysgdHBtNS10ZXN0L01ha2VmaWxlCTIwMDktMDctMTUgMDk6NDU6MjguMDAwMDAwMDAwIC0wNDAw DQorQEAgLTEwLDcgKzEwLDcgQEAgVkVSU0lPTl9NSU5PUiAgOj0gNQ0KKyBWRVJTSU9OX0JVSUxE ICA6PSAkKHNoZWxsIGRhdGUgKyIlcyIpDQorIFZFUlNJT05fU1VGRklYIDo9IC4xDQorIA0KKy1T VUJESVJTIDo9IHRwbWQgdHBtZF9kZXYgdGRkbA0KKytTVUJESVJTIDo9IHRwbWQgDQorIA0KKyBh bGw6IHZlcnNpb24gYWxsLXJlY3Vyc2l2ZQ0KKyANCitAQCAtNDgsMTIgKzQ4LDEyIEBAIHVzZXJf aW5zdGFsbDogdXNlcg0KKyBtb2R1bGVzX2luc3RhbGw6IG1vZHVsZXMNCisgCUAkKE1BS0UpIC1D IHRwbWRfZGV2IGluc3RhbGwgfHwgZXhpdCAtMQ0KKyANCistRElSUyAgICA6PSAuIHRwbSBjcnlw dG8gdHBtZCB0cG1kX2RldiB0ZGRsIHRwbWRfZGV2X29wZW5ic2QNCisrRElSUyAgICA6PSAuIHRw bSBjcnlwdG8gdHBtZCANCisgRElTVFNSQyA6PSAkKGZvcmVhY2ggZGlyLCAkKERJUlMpLCAkKHdp bGRjYXJkICQoZGlyKS8qLmMpKQ0KKyBESVNUU1JDICs9ICQoZm9yZWFjaCBkaXIsICQoRElSUyks ICQod2lsZGNhcmQgJChkaXIpLyouaCkpDQorLURJUlMgICAgOj0gLiB0cG1kIHRwbWRfZGV2IHRk ZGwgdHBtZF9kZXZfb3BlbmJzZA0KKytESVJTICAgIDo9IC4gdHBtZCANCisgRElTVFNSQyArPSAk KGZvcmVhY2ggZGlyLCAkKERJUlMpLCAkKGRpcikvTWFrZWZpbGUpDQorLURJU1RTUkMgKz0gLi9S RUFETUUgLi9BVVRIT1JTIC4vQ2hhbmdlTG9nIHRwbWRfZGV2L3RwbWRfZGV2LnJ1bGVzLmluDQor K0RJU1RTUkMgKz0gLi9SRUFETUUgLi9BVVRIT1JTIC4vQ2hhbmdlTG9nIA0KKyBESVNURElSIDo9 IHRwbV9lbXVsYXRvci0kKFZFUlNJT05fTUFKT1IpLiQoVkVSU0lPTl9NSU5PUikkKFZFUlNJT05f U1VGRklYKQ0KKyANCisgZGlzdDogJChESVNUU1JDKQ0KK2RpZmYgLU5hdXJwIHRwbV9lbXVsYXRv ci0wLjUuMS90cG0vdHBtX2NhcGFiaWxpdHkuYyB0cG01LXRlc3QvdHBtL3RwbV9jYXBhYmlsaXR5 LmMNCistLS0gdHBtX2VtdWxhdG9yLTAuNS4xL3RwbS90cG1fY2FwYWJpbGl0eS5jCTIwMDgtMDIt MTQgMDM6MjI6NDguMDAwMDAwMDAwIC0wNTAwDQorKysrIHRwbTUtdGVzdC90cG0vdHBtX2NhcGFi aWxpdHkuYwkyMDA5LTA3LTE2IDEyOjA0OjIwLjAwMDAwMDAwMCAtMDQwMA0KK0BAIC0xMzYsOCAr MTM2LDE5IEBAIHN0YXRpYyBUUE1fUkVTVUxUIGNhcF9wcm9wZXJ0eShVSU5UMzIgc3UNCisgDQor ICAgICBjYXNlIFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDoNCisgICAgICAgZGVidWcoIltUUE1f Q0FQX1BST1BfVElTX1RJTUVPVVRdIik7DQorLSAgICAgIC8qIFRPRE86IFRQTV9DQVBfUFJPUF9U SVNfVElNRU9VVCAqLw0KKy0gICAgICByZXR1cm4gVFBNX0ZBSUw7DQorKyAgICAgIC8qIFRPRE86 IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDogTWVhc3VyZSB0aGVzZSB2YWx1ZXMgYW5kIGRldGVy bWluZSBjb3JyZWN0IG9uZXMgKi8NCisrICAgICAgVUlOVDMyIGxlbiA9ICpyZXNwU2l6ZSA9IDE2 Ow0KKysgICAgICBCWVRFICpwdHIgPSAqcmVzcCA9IHRwbV9tYWxsb2MoKnJlc3BTaXplKTsNCisr ICAgICAgaWYgKHB0ciA9PSBOVUxMIHx8IA0KKysgICAgICAgICAgdHBtX21hcnNoYWxfVUlOVDMy KCZwdHIsICZsZW4sIDIwMDAwMCkgfHwNCisrICAgICAgICAgIHRwbV9tYXJzaGFsX1VJTlQzMigm cHRyLCAmbGVuLCAyMDAwMDApIHx8DQorKyAgICAgICAgICB0cG1fbWFyc2hhbF9VSU5UMzIoJnB0 ciwgJmxlbiwgMjAwMDAwKSB8fA0KKysgICAgICAgICAgdHBtX21hcnNoYWxfVUlOVDMyKCZwdHIs ICZsZW4sIDIwMDAwMCkpIHsNCisrICAgICAgICB0cG1fZnJlZSgqcmVzcCk7DQorKyAgICAgICAg cmV0dXJuIFRQTV9GQUlMOw0KKysgICAgICB9DQorKyAgICAgIHJldHVybiBUUE1fU1VDQ0VTUzsN CisrDQorIA0KKyAgICAgY2FzZSBUUE1fQ0FQX1BST1BfU1RBUlRVUF9FRkZFQ1Q6DQorICAgICAg IGRlYnVnKCJbVFBNX0NBUF9QUk9QX1NUQVJUVVBfRUZGRUNUXSIpOw0KK0BAIC0xODksOCArMjAw LDEyIEBAIHN0YXRpYyBUUE1fUkVTVUxUIGNhcF9wcm9wZXJ0eShVSU5UMzIgc3UNCisgDQorICAg ICBjYXNlIFRQTV9DQVBfUFJPUF9EVVJBVElPTjoNCisgICAgICAgZGVidWcoIltUUE1fQ0FQX1BS T1BfRFVSQVRJT05dIik7DQorLSAgICAgIC8qIFRPRE86IFRQTV9DQVBfUFJPUF9EVVJBVElPTiAq Lw0KKy0gICAgICByZXR1cm4gVFBNX0ZBSUw7DQorKyAgICAgIC8qIFRPRE86IFRQTV9DQVBfUFJP UF9EVVJBVElPTjogTWVhc3VyZSB0aGVzZSB2YWx1ZXMgYW5kIHJldHVybiBhY2N1cmF0ZSBvbmVz ICovDQorKyAgICAgIEJZVEUgZHVyW109IHsweDAsMHgwLDB4MCwweGMsMHgwLDB4NywweGExLDB4 MjAsMHgwLDB4MWUsMHg4NCwweDgwLDB4MTEsMHhlMSwweGEzLDB4MH07IA0KKysgICAgICAqcmVz cFNpemUgPSAxNjsNCisrICAgICAgKnJlc3AgPSB0cG1fbWFsbG9jKCpyZXNwU2l6ZSk7DQorKyAg ICAgIG1lbWNweSgqcmVzcCxkdXIsMTYpOyANCisrDQorIA0KKyAgICAgY2FzZSBUUE1fQ0FQX1BS T1BfQUNUSVZFX0NPVU5URVI6DQorICAgICAgIGRlYnVnKCJbVFBNX0NBUF9QUk9QX0FDVElWRV9D T1VOVEVSXSIpOw0KK2RpZmYgLU5hdXJwIHRwbV9lbXVsYXRvci0wLjUuMS90cG1kL01ha2VmaWxl IHRwbTUtdGVzdC90cG1kL01ha2VmaWxlDQorLS0tIHRwbV9lbXVsYXRvci0wLjUuMS90cG1kL01h a2VmaWxlCTIwMDgtMDItMTQgMDM6MjI6NDguMDAwMDAwMDAwIC0wNTAwDQorKysrIHRwbTUtdGVz dC90cG1kL01ha2VmaWxlCTIwMDktMDctMTYgMTI6MDg6MjYuMDAwMDAwMDAwIC0wNDAwDQorQEAg LTgsOSArOCwxMCBAQCBXRkxBR1MgIDo9IC1XYWxsIC1Xbm8tdW51c2VkIC1XcG9pbnRlci1hDQor ICAgICAgICAgICAgLVd3cml0ZS1zdHJpbmdzIC1Xc2lnbi1jb21wYXJlIC1Xbm8tbXVsdGljaGFy DQorICAgICAgICAgICAgI1dGTEFHUyAgKz0gLVdleHRyYSAtV2Nhc3QtcXVhbCAtV21pc3Npbmct cHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1Xc3RyaWN0LWFsaWFzaW5nDQorIENG TEFHUyAgKz0gJChXRkxBR1MpIC1nIC1JLi4gLUkuIC1PMiAtZm5vLXN0cmljdC1hbGlhc2luZw0K KytDRkxBR1MgICs9IC1JLi4vLi4vLi4vLi4vdG9vbHMvdnRwbV9tYW5hZ2VyL21hbmFnZXINCisg TERGTEFHUyArPSAtbGdtcA0KKyANCistQklORElSICA6PSAvdXNyL3NiaW4vDQorK0JJTkRJUiAg Oj0gL3Vzci9iaW4vDQorIA0KKyBUUE1EICAgIDo9IHRwbWQNCisgRElSUyAgICA6PSAuLi90cG0g Li4vY3J5cHRvDQorQEAgLTE4LDYgKzE5LDggQEAgU1JDUyAgICA6PSAkKGZvcmVhY2ggZGlyLCAk KERJUlMpLCAkKHdpbA0KKyBPQkpTICAgIDo9ICQocGF0c3Vic3QgJS5jLCAlLm8sICQoU1JDUykp DQorIE9CSlMgICAgOj0gJChmb3JlYWNoIGRpciwgJChESVJTKSwgJChwYXRzdWJzdCAkKGRpcikv JS5vLCAlLm8sICQoZmlsdGVyICQoZGlyKS8lLm8sICQoT0JKUykpKSkNCisgDQorK1ZUUE1fQklO IDo9IHZ0cG1kDQorKw0KKyB2cGF0aCAlLmMgJChzdHJpcCAkKERJUlMpKQ0KKyANCisgYWxsOiAk KFRQTUQpDQorQEAgLTMyLDEwICszNSw4IEBAIFRQTURfR1JPVVAgPz0gdHNzDQorIElOU1RBTEwg ICAgPz0gaW5zdGFsbA0KKyANCisgaW5zdGFsbDogJChUUE1EKQ0KKy0JJChJTlNUQUxMKSAtbSA3 NTUgLW8gJChUUE1EX1VTRVIpIC1nICQoVFBNRF9HUk9VUCkgLWQgJChERVNURElSKS92YXIvbGli L3RwbQ0KKy0JJChJTlNUQUxMKSAtbSA3NTUgLW8gJChUUE1EX1VTRVIpIC1nICQoVFBNRF9HUk9V UCkgLWQgJChERVNURElSKS92YXIvcnVuL3RwbQ0KKyAJJChJTlNUQUxMKSAtRCAtZCAkKERFU1RE SVIpLyQoQklORElSKQ0KKy0JJChJTlNUQUxMKSAtbSA3NTUgJChUUE1EKSAkKERFU1RESVIpLyQo QklORElSKQ0KKysJJChJTlNUQUxMKSAtbSA3NTUgJChUUE1EKSAkKERFU1RESVIpLyQoQklORElS KS8kKFZUUE1fQklOKQ0KKyANCisgLlBIT05ZOiBhbGwgY2xlYW4gaW5zdGFsbA0KKyANCitkaWZm IC1OYXVycCB0cG1fZW11bGF0b3ItMC41LjEvdHBtZC90cG1kLmMgdHBtNS10ZXN0L3RwbWQvdHBt ZC5jDQorLS0tIHRwbV9lbXVsYXRvci0wLjUuMS90cG1kL3RwbWQuYwkyMDA4LTAyLTE0IDAzOjIy OjQ4LjAwMDAwMDAwMCAtMDUwMA0KKysrKyB0cG01LXRlc3QvdHBtZC90cG1kLmMJMjAwOS0wNy0x NiAxMToxOTowNS4wMDAwMDAwMDAgLTA0MDANCitAQCAtMzIsNiArMzIsOSBAQA0KKyAjaW5jbHVk ZSA8Z3JwLmg+DQorICNpbmNsdWRlICJ0cG1fZW11bGF0b3JfY29uZmlnLmgiDQorICNpbmNsdWRl ICJ0cG0vdHBtX2VtdWxhdG9yLmgiDQorKyNpbmNsdWRlICJ0cG0vdHBtX3N0cnVjdHVyZXMuaCIN CisrI2luY2x1ZGUgInRwbS90cG1fbWFyc2hhbGxpbmcuaCINCisrI2luY2x1ZGUgInZ0cG1fbWFu YWdlci5oIg0KKyANCisgI2RlZmluZSBUUE1fREFFTU9OX05BTUUgICAgICJ0cG1kIg0KKyAjZGVm aW5lIFRQTV9DTURfQlVGX1NJWkUgICAgNDA5Ng0KK0BAIC0zOSw2ICs0MiwyNCBAQA0KKyAjZGVm aW5lIFRQTV9SQU5ET01fREVWSUNFICAgIi9kZXYvdXJhbmRvbSINCisgI3VuZGVmICBUUE1fTUtE SVJTDQorIA0KKysjaWZkZWYgVlRQTV9NVUxUSV9WTQ0KKysgI2RlZmluZSBERVZfQkUgIi9kZXYv dnRwbSINCisrICNkZWZpbmUgREVWX0ZFICIvZGV2L3RwbSINCisrI2Vsc2UNCisrICNkZWZpbmUg UFZNX1JYX0ZJRk9fRCAiL3Zhci92dHBtL2ZpZm9zL3RwbV9jbWRfdG9fJWQuZmlmbyINCisrICNk ZWZpbmUgUFZNX1RYX0ZJRk8gIi92YXIvdnRwbS9maWZvcy90cG1fcnNwX2Zyb21fYWxsLmZpZm8i DQorKyAjZGVmaW5lIEhWTV9SWF9GSUZPX0QgIi92YXIvdnRwbS9zb2Nrcy8lZC5zb2NrZXQiDQor Kw0KKysgI2RlZmluZSBWVFBNX1JYX0ZJRk9fRCAiL3Zhci92dHBtL2ZpZm9zL3Z0cG1fcnNwX3Rv XyVkLmZpZm8iDQorKyAjZGVmaW5lIFZUUE1fVFhfRklGTyAiL3Zhci92dHBtL2ZpZm9zL3Z0cG1f Y21kX2Zyb21fYWxsLmZpZm8iDQorKw0KKysgc3RhdGljIGNoYXIgKnZ0cG1fcnhfbmFtZT1OVUxM Ow0KKysjZW5kaWYNCisrDQorKyBzdGF0aWMgaW50IHZ0cG1fdHhfZmg9LTEsIHZ0cG1fcnhfZmg9 LTE7DQorKw0KKysjZGVmaW5lIEJVRkZFUl9TSVpFIDIwNDgNCisrDQorIHN0YXRpYyB2b2xhdGls ZSBpbnQgc3RvcGZsYWcgPSAwOw0KKyBzdGF0aWMgaW50IGlzX2RhZW1vbiA9IDA7DQorIHN0YXRp YyBpbnQgb3B0X2RlYnVnID0gMDsNCitAQCAtNDksNiArNzAsOCBAQCBzdGF0aWMgY29uc3QgY2hh ciAqb3B0X3N0b3JhZ2VfZmlsZSA9ICIvDQorIHN0YXRpYyB1aWRfdCBvcHRfdWlkID0gMDsNCisg c3RhdGljIGdpZF90IG9wdF9naWQgPSAwOw0KKyBzdGF0aWMgaW50IHRwbV9zdGFydHVwID0gMjsN Cisrc3RhdGljIGludCB2dHBtX3R5cGUgPSBWVFBNX1RZUEVfUFZNOw0KKytpbnQgZG1pX2lkID0g MDsNCisgc3RhdGljIGludCByYW5kX2ZoOw0KKyANCisgdm9pZCB0cG1fbG9nKGludCBwcmlvcml0 eSwgY29uc3QgY2hhciAqZm10LCAuLi4pDQorQEAgLTkwLDU2ICsxMTMsMjQxIEBAIHVpbnQ2NF90 IHRwbV9nZXRfdGlja3Modm9pZCkNCisgDQorIGludCB0cG1fd3JpdGVfdG9fZmlsZSh1aW50OF90 ICpkYXRhLCBzaXplX3QgZGF0YV9sZW5ndGgpDQorIHsNCistICAgIGludCBmaDsNCistICAgIHNz aXplX3QgcmVzOw0KKy0gICAgZmggPSBvcGVuKG9wdF9zdG9yYWdlX2ZpbGUsIE9fV1JPTkxZIHwg T19UUlVOQyB8IE9fQ1JFQVQsIFNfSVJVU1IgfCBTX0lXVVNSKTsNCistICAgIGlmIChmaCA8IDAp IHJldHVybiAtMTsNCistICAgIHdoaWxlIChkYXRhX2xlbmd0aCA+IDApIHsNCistICAgICAgICBy ZXMgPSB3cml0ZShmaCwgZGF0YSwgZGF0YV9sZW5ndGgpOw0KKy0JaWYgKHJlcyA8IDApIHsNCist CSAgICBjbG9zZShmaCk7DQorLQkgICAgcmV0dXJuIC0xOw0KKy0JfQ0KKy0JZGF0YV9sZW5ndGgg LT0gcmVzOyANCistCWRhdGEgKz0gcmVzOw0KKysgIGludCByZXMsIG91dF9kYXRhX3NpemUsIGlu X2hlYWRlcl9zaXplOw0KKysgIEJZVEUgKnB0ciwgKm91dF9kYXRhLCAqaW5faGVhZGVyOw0KKysg IFVJTlQzMiByZXN1bHQsIGxlbiwgaW5fcnNwX3NpemU7DQorKyAgVUlOVDE2IHRhZyA9IFZUUE1f VEFHX1JFUTsNCisrCQ0KKysgIHByaW50ZigiU2F2aW5nIE5WTVxuIik7DQorKyAgaWYgKHZ0cG1f dHhfZmggPCAwKSB7DQorKyNpZmRlZiBWVFBNX01VVExJX1ZNDQorKyAgICB2dHBtX3R4X2ZoID0g b3BlbihERVZfRkUsIE9fUkRXUik7DQorKyNlbHNlDQorKwl2dHBtX3R4X2ZoID0gb3BlbihWVFBN X1RYX0ZJRk8sIE9fV1JPTkxZKTsNCisrI2VuZGlmDQorKyAgfQ0KKysNCisrICBpZiAodnRwbV90 eF9maCA8IDApIHsNCisrCQlyZXR1cm4gLTE7DQorKyAgfQ0KKysgDQorKyAgLy8gU2VuZCByZXF1 ZXN0IHRvIFZUUE0gTWFuYWdlciB0byBlbmNyeXB0IGRhdGENCisrI2lmZGVmIFZUUE1fTVVUTElf Vk0NCisrICBvdXRfZGF0YV9zaXplID0gbGVuID0gVlRQTV9DT01NQU5EX0hFQURFUl9TSVpFX0NM VCArIGRhdGFfbGVuZ3RoOw0KKysjZWxzZQ0KKysgIG91dF9kYXRhX3NpemUgPSBsZW4gPSBWVFBN X0NPTU1BTkRfSEVBREVSX1NJWkVfU1JWICsgZGF0YV9sZW5ndGg7DQorKyNlbmRpZg0KKysgIA0K KysgIG91dF9kYXRhID0gcHRyID0gKEJZVEUgKikgbWFsbG9jKGxlbik7DQorKw0KKysgIGlmIChw dHIgPT0gTlVMTA0KKysjaWZuZGVmIFZUUE1fTVVUTElfVk0NCisrICAgICAgfHwgdHBtX21hcnNo YWxfVUlOVDMyKCZwdHIsICZsZW4sIGRtaV9pZCkNCisrI2VuZGlmDQorKwkgIHx8IHRwbV9tYXJz aGFsX1VJTlQxNigmcHRyLCAmbGVuLCB0YWcpDQorKyNpZmRlZiBWVFBNX01VVExJX1ZNDQorKwkg IHx8IHRwbV9tYXJzaGFsX1VJTlQzMigmcHRyLCAmbGVuLCBvdXRfZGF0YV9zaXplKQ0KKysjZWxz ZQ0KKysJICB8fCB0cG1fbWFyc2hhbF9VSU5UMzIoJnB0ciwgJmxlbiwgb3V0X2RhdGFfc2l6ZSAt IHNpemVvZih1aW50MzJfdCkpDQorKyNlbmRpZiAgDQorKwkgIHx8IHRwbV9tYXJzaGFsX1VJTlQz MigmcHRyLCAmbGVuLCBWVFBNX09SRF9TQVZFTlZNKQ0KKysJICB8fCB0cG1fbWFyc2hhbF9CWVRF X0FSUkFZKCZwdHIsICZsZW4sIGRhdGEsIGRhdGFfbGVuZ3RoKSkgew0KKysJZnJlZShvdXRfZGF0 YSk7DQorKwlyZXR1cm4gLTE7DQorKyAgfQ0KKysgIA0KKysgIHByaW50ZigiXHRTZW5kaW5nIFNh dmVOVk0gQ29tbWFuZC5cbiIpOw0KKysgIHJlcyA9IHdyaXRlKHZ0cG1fdHhfZmgsIG91dF9kYXRh LCBvdXRfZGF0YV9zaXplKTsNCisrICBmcmVlKG91dF9kYXRhKTsNCisrICBpZiAocmVzICE9IG91 dF9kYXRhX3NpemUpIHJldHVybiAtMTsNCisrDQorKyAgaWYgKHZ0cG1fcnhfZmggPCAwKSB7DQor KyNpZmRlZiBWVFBNX01VVExJX1ZNDQorKyAgICB2dHBtX3J4X2ZoID0gdnRwbV90eF9maA0KKysj ZWxzZQ0KKysgICAgaWYgKHZ0cG1fcnhfbmFtZSA9PSBOVUxMKSB7DQorKyAgICAgIHZ0cG1fcnhf bmFtZSA9IG1hbGxvYygxMCArIHN0cmxlbihWVFBNX1JYX0ZJRk9fRCkpOw0KKysgICAgICBzcHJp bnRmKHZ0cG1fcnhfbmFtZSwgVlRQTV9SWF9GSUZPX0QsICh1aW50MzJfdCkgZG1pX2lkKTsNCisg ICAgIH0NCistICAgIGNsb3NlKGZoKTsNCistICAgIHJldHVybiAwOw0KKysJdnRwbV9yeF9maCA9 IG9wZW4odnRwbV9yeF9uYW1lLCBPX1JET05MWSk7DQorKyNlbmRpZg0KKysgIH0NCisrDQorKyAg aWYgKHZ0cG1fcnhfZmggPCAwKSB7DQorKwkJcmV0dXJuIC0xOw0KKysgIH0NCisrICANCisrICAv LyBSZWFkIEhlYWRlciBvZiByZXNwb25zZSBzbyB3ZSBjYW4gZ2V0IHRoZSBzaXplICYgc3RhdHVz DQorKyNpZmRlZiBWVFBNX01VVExJX1ZNDQorKyAgaW5faGVhZGVyX3NpemUgPSBsZW4gPSBWVFBN X0NPTU1BTkRfSEVBREVSX1NJWkVfQ0xUOw0KKysjZWxzZQ0KKysgIGluX2hlYWRlcl9zaXplID0g bGVuID0gVlRQTV9DT01NQU5EX0hFQURFUl9TSVpFX1NSVjsNCisrI2VuZGlmDQorKyAgaW5faGVh ZGVyID0gcHRyID0gbWFsbG9jKGluX2hlYWRlcl9zaXplKTsNCisrICANCisrICBwcmludGYoIlx0 UmVhZGluZyBTYXZlTlZNIGhlYWRlci5cbiIpOw0KKysgIHJlcyA9IHJlYWQodnRwbV9yeF9maCwg aW5faGVhZGVyLCBpbl9oZWFkZXJfc2l6ZSk7DQorKw0KKysgIGlmICggKHJlcyAhPSBpbl9oZWFk ZXJfc2l6ZSkNCisrI2lmbmRlZiBWVFBNX01VVExJX1ZNDQorKyAgICAgICB8fCB0cG1fdW5tYXJz aGFsX1VJTlQzMigmcHRyLCAmbGVuLCAoVUlOVDMyKikmZG1pX2lkKQ0KKysjZW5kaWYNCisrCSAg IHx8IHRwbV91bm1hcnNoYWxfVUlOVDE2KCZwdHIsICZsZW4sICZ0YWcpDQorKwkgICB8fCB0cG1f dW5tYXJzaGFsX1VJTlQzMigmcHRyLCAmbGVuLCAmaW5fcnNwX3NpemUpDQorKwkgICB8fCB0cG1f dW5tYXJzaGFsX1VJTlQzMigmcHRyLCAmbGVuLCAmcmVzdWx0KSApIHsNCisrCSAgZnJlZShpbl9o ZWFkZXIpOw0KKysJICByZXR1cm4gLTE7DQorKyAgfQ0KKysgIGZyZWUoaW5faGVhZGVyKTsNCisr ICANCisrICBpZiAocmVzdWx0ICE9IFZUUE1fU1VDQ0VTUykgew0KKysgICAgICByZXR1cm4gLTE7 ICANCisrICB9DQorKw0KKysjaWZkZWYgVlRQTV9NVVRMSV9WTQ0KKysgIGNsb3NlKHZ0cG1fdHhf ZmgpOyBjbG9zZSh2dHBtX3J4X2ZoKTsNCisrI2VuZGlmDQorKwkgIA0KKysgIHByaW50ZigiXHRG aW5pc2hpbmcgdXAgU2F2ZU5WTVxuIik7DQorKyAgcmV0dXJuICgwKTsNCisgfQ0KKyANCisgaW50 IHRwbV9yZWFkX2Zyb21fZmlsZSh1aW50OF90ICoqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbmd0aCkN Cisgew0KKy0gICAgaW50IGZoOw0KKy0gICAgc3NpemVfdCByZXM7DQorLSAgICBzaXplX3QgdG90 YWxfbGVuZ3RoOw0KKy0gICAgZmggPSBvcGVuKG9wdF9zdG9yYWdlX2ZpbGUsIE9fUkRPTkxZKTsN CistICAgIGlmIChmaCA8IDApIHJldHVybiAtMTsNCistICAgIHRvdGFsX2xlbmd0aCA9IGxzZWVr KGZoLCAwLCBTRUVLX0VORCk7DQorLSAgICBsc2VlayhmaCwgMCwgU0VFS19TRVQpOw0KKy0gICAg KmRhdGEgPSB0cG1fbWFsbG9jKHRvdGFsX2xlbmd0aCk7DQorLSAgICBpZiAoKmRhdGEgPT0gTlVM TCkgew0KKy0gICAgICAgIGNsb3NlKGZoKTsNCistICAgICAgICByZXR1cm4gLTE7DQorLSAgICB9 DQorLSAgICAqZGF0YV9sZW5ndGggPSAwOw0KKy0gICAgd2hpbGUgKHRvdGFsX2xlbmd0aCA+IDAp IHsNCistICAgICAgICByZXMgPSByZWFkKGZoLCAmKCpkYXRhKVsqZGF0YV9sZW5ndGhdLCB0b3Rh bF9sZW5ndGgpOw0KKy0JaWYgKHJlcyA8IDApIHsNCistCSAgICBjbG9zZShmaCk7DQorLQkgICAg dHBtX2ZyZWUoKmRhdGEpOw0KKy0JICAgIHJldHVybiAtMTsNCistCX0NCistICAgICAgICAqZGF0 YV9sZW5ndGggKz0gcmVzOw0KKy0JdG90YWxfbGVuZ3RoIC09IHJlczsNCisrICBpbnQgcmVzLCBv dXRfZGF0YV9zaXplLCBpbl9oZWFkZXJfc2l6ZTsNCisrICB1aW50OF90ICpwdHIsICpvdXRfZGF0 YSwgKmluX2hlYWRlcjsNCisrICBVSU5UMTYgdGFnID0gVlRQTV9UQUdfUkVROw0KKysgIFVJTlQz MiBsZW4sIGluX3JzcF9zaXplLCByZXN1bHQ7DQorKyNpZmRlZiBWVFBNX01VVExJX1ZNDQorKwlp bnQgdnRwbV9yeF9maCwgdnRwbV90eF9maDsNCisrI2VuZGlmDQorKwkNCisrICBwcmludGYoIkxv YWRpbmcgTlZNLlxuIik7DQorKyAgaWYgKHZ0cG1fdHhfZmggPCAwKSB7DQorKyNpZmRlZiBWVFBN X01VVExJX1ZNDQorKyAgICB2dHBtX3R4X2ZoID0gb3BlbihERVZfRkUsIE9fUkRXUik7DQorKyNl bHNlDQorKwl2dHBtX3R4X2ZoID0gb3BlbihWVFBNX1RYX0ZJRk8sIE9fV1JPTkxZKTsNCisrI2Vu ZGlmDQorKyAgfQ0KKysNCisrICBpZiAodnRwbV90eF9maCA8IDApIHsNCisrCXByaW50ZigiRXJy b3IgaW4gcmVhZF9mcm9tX2ZpbGU6MzAxXG4iKTsNCisrCQlyZXR1cm4gLTE7DQorKyAgfQ0KKysg DQorKyAgLy8gU2VuZCByZXF1ZXN0IHRvIFZUUE0gTWFuYWdlciB0byBlbmNyeXB0IGRhdGENCisr I2lmZGVmIFZUUE1fTVVUTElfVk0NCisrICBvdXRfZGF0YV9zaXplID0gbGVuID0gVlRQTV9DT01N QU5EX0hFQURFUl9TSVpFX0NMVDsNCisrI2Vsc2UNCisrICBvdXRfZGF0YV9zaXplID0gbGVuID0g VlRQTV9DT01NQU5EX0hFQURFUl9TSVpFX1NSVjsNCisrI2VuZGlmDQorKyAgb3V0X2RhdGEgPSBw dHIgPSAoQllURSAqKSBtYWxsb2MobGVuKTsNCisrDQorKyAgaWYgKHB0ciA9PSBOVUxMDQorKyNp Zm5kZWYgVlRQTV9NVVRMSV9WTQ0KKysgICAgICB8fCB0cG1fbWFyc2hhbF9VSU5UMzIoJnB0ciwg JmxlbiwgZG1pX2lkKQ0KKysjZW5kaWYgIA0KKysgICAgICB8fCB0cG1fbWFyc2hhbF9VSU5UMTYo JnB0ciwgJmxlbiwgdGFnKQ0KKysjaWZkZWYgVlRQTV9NVVRMSV9WTQ0KKysgICAgICB8fCB0cG1f bWFyc2hhbF9VSU5UMzIoJnB0ciwgJmxlbiwgb3V0X2RhdGFfc2l6ZSkNCisrI2Vsc2UNCisrICAg ICAgfHwgdHBtX21hcnNoYWxfVUlOVDMyKCZwdHIsICZsZW4sIG91dF9kYXRhX3NpemUgLSBzaXpl b2YodWludDMyX3QpKQ0KKysjZW5kaWYNCisrICAgICAgfHwgdHBtX21hcnNoYWxfVUlOVDMyKCZw dHIsICZsZW4sIFZUUE1fT1JEX0xPQUROVk0pKSB7DQorKyAgICBmcmVlKG91dF9kYXRhKTsNCisr ICAgIHByaW50ZigiRXJyb3IgaW4gcmVhZF9mcm9tX2ZpbGU6MzI1XG4iKTsNCisrDQorKyAgICBy ZXR1cm4gLTE7DQorKyAgfQ0KKysNCisrICBwcmludGYoIlx0U2VuZGluZyBMb2FkTlZNIGNvbW1h bmRcbiIpOw0KKysgIHJlcyA9IHdyaXRlKHZ0cG1fdHhfZmgsIG91dF9kYXRhLCBvdXRfZGF0YV9z aXplKTsNCisrICBmcmVlKG91dF9kYXRhKTsNCisrICBpZiAocmVzICE9IG91dF9kYXRhX3NpemUp IA0KKysgICAgew0KKysJcHJpbnRmKCJFcnJvciBpbiByZWFkX2Zyb21fZmlsZTozMzVcbiIpOw0K KysJcmV0dXJuIC0xOw0KKysgICAgfQ0KKysNCisrICAgIGlmICh2dHBtX3J4X2ZoIDwgMCkgew0K KysjaWZkZWYgVlRQTV9NVVRMSV9WTQ0KKysgICAgdnRwbV9yeF9maCA9IHZ0cG1fdHhfZmg7DQor KyNlbHNlDQorKyAgICBpZiAodnRwbV9yeF9uYW1lID09IE5VTEwpIHsNCisrICAgICAgdnRwbV9y eF9uYW1lID0gbWFsbG9jKDEwICsgc3RybGVuKFZUUE1fUlhfRklGT19EKSk7DQorKyAgICAgIHNw cmludGYodnRwbV9yeF9uYW1lLCBWVFBNX1JYX0ZJRk9fRCwgKHVpbnQzMl90KSBkbWlfaWQpOw0K KyAgICAgfQ0KKy0gICAgY2xvc2UoZmgpOw0KKy0gICAgcmV0dXJuIDA7DQorKwl2dHBtX3J4X2Zo ID0gb3Blbih2dHBtX3J4X25hbWUsIE9fUkRPTkxZKTsNCisrI2VuZGlmDQorKyAgfQ0KKysNCisr ICBpZiAodnRwbV9yeF9maCA8IDApIHsNCisrCXByaW50ZigiRXJyb3IgaW4gcmVhZF9mcm9tX2Zp bGU6MzUyXG4iKTsJDQorKwlyZXR1cm4gLTE7DQorKyAgfQ0KKysgIA0KKysgIC8vIFJlYWQgSGVh ZGVyIG9mIHJlc3BvbnNlIHNvIHdlIGNhbiBnZXQgdGhlIHNpemUgJiBzdGF0dXMNCisrI2lmZGVm IFZUUE1fTVVUTElfVk0NCisrICBpbl9oZWFkZXJfc2l6ZSA9IGxlbiA9IFZUUE1fQ09NTUFORF9I RUFERVJfU0laRV9DTFQ7DQorKyNlbHNlDQorKyAgaW5faGVhZGVyX3NpemUgPSBsZW4gPSBWVFBN X0NPTU1BTkRfSEVBREVSX1NJWkVfU1JWOw0KKysjZW5kaWYNCisrICBpbl9oZWFkZXIgPSBwdHIg PSBtYWxsb2MoaW5faGVhZGVyX3NpemUpOw0KKysgIA0KKysgIHByaW50ZigiXHRSZWFkaW5nIExv YWROVk0gaGVhZGVyXG4iKTsNCisrICByZXMgPSByZWFkKHZ0cG1fcnhfZmgsIGluX2hlYWRlciwg aW5faGVhZGVyX3NpemUpOw0KKysNCisrICBpZiAoIChyZXMgIT0gaW5faGVhZGVyX3NpemUpDQor KyNpZm5kZWYgVlRQTV9NVVRMSV9WTQ0KKysgICAgICAgfHwgdHBtX3VubWFyc2hhbF9VSU5UMzIo JnB0ciwgJmxlbiwgKFVJTlQzMiopJmRtaV9pZCkNCisrI2VuZGlmDQorKyAgICAgICB8fCB0cG1f dW5tYXJzaGFsX1VJTlQxNigmcHRyLCAmbGVuLCAmdGFnKQ0KKysgICAgICAgfHwgdHBtX3VubWFy c2hhbF9VSU5UMzIoJnB0ciwgJmxlbiwgJmluX3JzcF9zaXplKQ0KKysgICAgICAgfHwgdHBtX3Vu bWFyc2hhbF9VSU5UMzIoJnB0ciwgJmxlbiwgJnJlc3VsdCkgKSB7DQorKyAgICAgIGZyZWUoaW5f aGVhZGVyKTsNCisrICAgICAgcHJpbnRmKCJFcnJvciBpbiByZWFkX2Zyb21fZmlsZTozNzVcbiIp OyAgICAgDQorKyAgICAgIHJldHVybiAtMTsNCisrICB9DQorKyAgZnJlZShpbl9oZWFkZXIpOw0K KysgIA0KKysgIGlmIChyZXN1bHQgIT0gVlRQTV9TVUNDRVNTKSB7DQorKyAgICBwcmludGYoIkVy cm9yIGluIHJlYWRfZnJvbV9maWxlOjM4MVxuIik7DQorKyAgICByZXR1cm4gLTE7ICANCisrICB9 DQorKw0KKysgIC8vIFJlYWQgRW5jcnlwdGVkIGRhdGEgZnJvbSBWVFBNIE1hbmFnZXINCisrICAq ZGF0YV9sZW5ndGggPSBpbl9yc3Bfc2l6ZSAtIFZUUE1fQ09NTUFORF9IRUFERVJfU0laRV9DTFQ7 DQorKyAgKmRhdGEgPSAodWludDhfdCAqKSBtYWxsb2MoKmRhdGFfbGVuZ3RoKTsNCisrDQorKyAg cHJpbnRmKCJcdFJlYWRpbmcgY2xlYXIgZGF0YSBmcm9tIExvYWROVk0uXG4iKTsNCisrICByZXMg PSByZWFkKHZ0cG1fcnhfZmgsICpkYXRhLCAqZGF0YV9sZW5ndGgpOw0KKysjaWZkZWYgVlRQTV9N VVRMSV9WTQ0KKysgIGNsb3NlKHZ0cG1fcnhfZmgpO2Nsb3NlKHZ0cG1fdHhfZmgpOw0KKysjZW5k aWYgDQorKwkNCisrICBwcmludGYoIlx0UmV0dXJpbmcgZnJvbSBsb2FkaW5nIE5WTVxuIik7DQor KyAgaWYgKHJlcyAhPSAoaW50KSpkYXRhX2xlbmd0aCkgew0KKysgICAgICBmcmVlKCpkYXRhKTsN CisrICAgICAgcHJpbnRmKCJFcnJvciBpbiByZWFkX2Zyb21fZmlsZTozOThcbiIpOw0KKysgICAg ICByZXR1cm4gLTE7DQorKyAgfSBlbHNlIHsNCisrICAgICAgcmV0dXJuIDA7DQorKyAgfQ0KKysN CisrDQorKyAgICANCisgfQ0KKyANCisgc3RhdGljIHZvaWQgcHJpbnRfdXNhZ2UoY2hhciAqbmFt ZSkNCisgew0KKyAgICAgcHJpbnRmKCJ1c2FnZTogJXMgWy1kXSBbLWZdIFstcyBzdG9yYWdlIGZp bGVdIFstdSB1bml4IHNvY2tldCBuYW1lXSAiDQorLSAgICAgICAgICAgIlstbyB1c2VyIG5hbWVd IFstZyBncm91cCBuYW1lXSBbLWhdIFtzdGFydHVwIG1vZGVdXG4iLCBuYW1lKTsNCisrICAgICAg ICAgICAiWy1vIHVzZXIgbmFtZV0gWy1nIGdyb3VwIG5hbWVdIFstaF0iDQorKyNpZmRlZiBWVFBN X01VTFRJX1ZNDQorKwkgICAiY2xlYXJ8c2F2ZXxkZWFjdGl2YXRlZFxuIiwgbmFtZSk7DQorKyNl bHNlDQorKwkgICAiY2xlYXJ8c2F2ZXxkZWFjdGl2YXRlZCBwdm18aHZtIHZ0cG1pZFxuIiwgbmFt ZSk7DQorKyNlbmRpZg0KKyAgICAgcHJpbnRmKCIgIGQgOiBlbmFibGUgZGVidWcgbW9kZVxuIik7 DQorICAgICBwcmludGYoIiAgZiA6IGZvcmNlcyB0aGUgYXBwbGljYXRpb24gdG8gcnVuIGluIHRo ZSBmb3JlZ3JvdW5kXG4iKTsNCisgICAgIHByaW50ZigiICBzIDogc3RvcmFnZSBmaWxlIHRvIHVz ZSAoZGVmYXVsdDogJXMpXG4iLCBvcHRfc3RvcmFnZV9maWxlKTsNCitAQCAtMjA1LDcgKzQxMywx MyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyDQorICAgICAgICAg ICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7DQorICAgICAgICAgfQ0KKyAgICAgfQ0KKy0gICAg aWYgKG9wdGluZCA8IGFyZ2MpIHsNCisrICAgIC8qTWFrZSBzdXJlIHdlIGhhdmUgYWxsIHJlcXVp cmVkIG9wdGlvbnMqLw0KKysjaWZkZWYgVlRQTV9NVUxUSV9WTQ0KKysjZGVmaW5lIEVYVFJBX09Q VFMgMA0KKysjZWxzZQ0KKysjZGVmaW5lIEVYVFJBX09QVFMgMg0KKysjZW5kaWYNCisrICAgIGlm IChvcHRpbmQgPCBhcmdjIC0gRVhUUkFfT1BUUyApIHsNCisgICAgICAgICBkZWJ1Zygic3RhcnR1 cCBtb2RlID0gJyVzJyIsIGFyZ3Zbb3B0aW5kXSk7DQorICAgICAgICAgaWYgKCFzdHJjbXAoYXJn dltvcHRpbmRdLCAiY2xlYXIiKSkgew0KKyAgICAgICAgICAgICB0cG1fc3RhcnR1cCA9IDE7DQor QEAgLTIxOSw2ICs0MzMsMjUgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywg Y2hhcg0KKyAgICAgICAgICAgICBwcmludF91c2FnZShhcmd2WzBdKTsNCisgICAgICAgICAgICAg ZXhpdChFWElUX1NVQ0NFU1MpOw0KKyAgICAgICAgIH0NCisrI2lmbmRlZiBWVFBNX01VTFRJX1ZN DQorKyAgICAgICAgKytvcHRpbmQ7DQorKwlpZighc3RyY21wKGFyZ3Zbb3B0aW5kXSwgInB2bSIp KSB7DQorKwkJdnRwbV90eXBlID0gVlRQTV9UWVBFX1BWTTsJLy8gR2V0IGNvbW1hbmRzIGZyb20g dlRQTSBNYW5hZ2VyIHRocm91Z2ggZmlmbw0KKysJfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zbb3B0 aW5kXSwgImh2bSIpKSB7DQorKwkJdnRwbV90eXBlID0gVlRQTV9UWVBFX0hWTTsJLy8gR2V0IGNv bW1hbmRzIGZyb20gcWVtdSB2aWEgc29ja2V0DQorKyAgICAgICAgfSBlbHNlIHsNCisrCQllcnJv cigiSW52YWxpZCB2bSBtb2RlICclcyc7IG11c3QgYmUgJ3B2bScsICINCisrCQkJIm9yICdodm0n ICIsIGFyZ3Zbb3B0aW5kXSk7DQorKwkJcHJpbnRfdXNhZ2UoYXJndlswXSk7DQorKwkJZXhpdChF WElUX1NVQ0NFU1MpOw0KKysJfQ0KKysgICAgICAgICsrb3B0aW5kOw0KKysJZG1pX2lkID0gYXRv aShhcmd2W29wdGluZF0pOw0KKysjZW5kaWYNCisrICAgIH0gZWxzZSB7DQorKwllcnJvcigiSW52 YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7DQorKwlwcmludF91c2FnZShhcmd2WzBdKTsNCisr CWV4aXQoRVhJVF9TVUNDRVNTKTsNCisgICAgIH0NCisgfQ0KKyANCitAQCAtMzQ4LDkzICs1ODEs MTgwIEBAIHN0YXRpYyBpbnQgaW5pdF9zb2NrZXQoY29uc3QgY2hhciAqbmFtZSkNCisgDQorIHN0 YXRpYyB2b2lkIG1haW5fbG9vcCh2b2lkKQ0KKyB7DQorLSAgICBpbnQgc29jaywgZmgsIHJlczsN CistICAgIGludDMyX3QgaW5fbGVuOw0KKysgICAgaW50MzJfdCBpbl9sZW4sIHdyaXR0ZW47DQor ICAgICB1aW50MzJfdCBvdXRfbGVuOw0KKy0gICAgdWludDhfdCBpbltUUE1fQ01EX0JVRl9TSVpF XSwgKm91dDsNCisrICAgIHVpbnQ4X3QgaW5bVFBNX0NNRF9CVUZfU0laRV0sICpvdXQsICphZGRy ZXNzZWRfb3V0Ow0KKysgICAgaW50IGd1ZXN0X2lkPS0xOw0KKysgICAgaW50IGk7DQorKyAgICBj aGFyICp2dHBtX3J4X2ZpbGU9TlVMTDsNCisrICAgIGludCByZXM7DQorKw0KKysjaWZuZGVmIFZU UE1fTVVMVElfVk0NCisrICAgIGludCBzb2NrZmQgPSAtMTsNCisgICAgIHN0cnVjdCBzb2NrYWRk cl91biBhZGRyOw0KKy0gICAgc29ja2xlbl90IGFkZHJfbGVuOw0KKy0gICAgZmRfc2V0IHJmZHM7 DQorLSAgICBzdHJ1Y3QgdGltZXZhbCB0djsNCisrICAgIHN0cnVjdCBzb2NrYWRkcl91biBjbGll bnRfYWRkcjsNCisrICAgIHVuc2lnbmVkIGludCBjbGllbnRfbGVuZ3RoOw0KKysjZW5kaWYNCisr DQorKyAgICBpbnQgdnRwbV90eF9maD0tMSwgdnRwbV9yeF9maD0tMTsNCisrDQorKyNpZm5kZWYg VlRQTV9NVUxUSV9WTQ0KKysgIGlmICh2dHBtX3R5cGUgPT0gVlRQTV9UWVBFX1BWTSkgew0KKysg ICAgdnRwbV9yeF9maWxlID0gbWFsbG9jKDEwICsgc3RybGVuKFBWTV9SWF9GSUZPX0QpKTsNCisr ICAgIHNwcmludGYodnRwbV9yeF9maWxlLCBQVk1fUlhfRklGT19ELCAodWludDMyX3QpIGRtaV9p ZCk7DQorKyAgfSBlbHNlIHsNCisrICAgIHZ0cG1fcnhfZmlsZSA9IG1hbGxvYygxMCArIHN0cmxl bihIVk1fUlhfRklGT19EKSk7DQorKyAgICBzcHJpbnRmKHZ0cG1fcnhfZmlsZSwgSFZNX1JYX0ZJ Rk9fRCwgKHVpbnQzMl90KSBkbWlfaWQpOw0KKysNCisrICAgIGlmICggKHNvY2tmZCA9IHNvY2tl dChQRl9VTklYLFNPQ0tfU1RSRUFNLDApKSA8IDApIHsNCisrICAgICAgICAgIGVycm9yKCJVbmFi bGUgdG8gY3JlYXRlIHNvY2tldC4gZXJybm8gPSAlZFxuIiwgZXJybm8pOw0KKysgICAgICBleGl0 ICgtMSk7DQorKyAgICB9DQorKw0KKysgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikp Ow0KKysgICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsNCisrICAgIHN0cmNweShhZGRyLnN1 bl9wYXRoLHZ0cG1fcnhfZmlsZSApOw0KKysgICAgdW5saW5rKGFkZHIuc3VuX3BhdGgpOw0KKysg IH0NCisrI2VuZGlmDQorIA0KKyAgICAgaW5mbygic3RhcmluZyBtYWluIGxvb3AiKTsNCistICAg IC8qIG9wZW4gVU5JWCBzb2NrZXQgKi8NCistICAgIHNvY2sgPSBpbml0X3NvY2tldChvcHRfc29j a2V0X25hbWUpOw0KKy0gICAgaWYgKHNvY2sgPCAwKSBleGl0KEVYSVRfRkFJTFVSRSk7DQorICAg ICAvKiBpbml0IHRwbSBlbXVsYXRvciAqLw0KKy0gICAgZGVidWcoImluaXRpYWxpemluZyBUUE0g ZW11bGF0b3I6ICVkIiwgdHBtX3N0YXJ0dXApOw0KKysjaWZkZWYgVlRQTV9NVUxUSV9WTQ0KKysg ICAgZGVidWcoImluaXRpYWxpemluZyBUUE0gZW11bGF0b3I6IHN0YXRlPSVkIiwgdHBtX3N0YXJ0 dXApOw0KKysjZWxzZQ0KKysgICAgZGVidWcoImluaXRpYWxpemluZyBUUE0gZW11bGF0b3I6IHN0 YXRlPSVkLCB0eXBlPSVkLCBpZD0lZCIsIHRwbV9zdGFydHVwLCB2dHBtX3R5cGUsIGRtaV9pZCk7 DQorKyNlbmRpZg0KKyAgICAgdHBtX2VtdWxhdG9yX2luaXQodHBtX3N0YXJ0dXApOw0KKyAgICAg Lyogc3RhcnQgY29tbWFuZCBwcm9jZXNzaW5nICovDQorICAgICB3aGlsZSAoIXN0b3BmbGFnKSB7 DQorICAgICAgICAgLyogd2FpdCBmb3IgaW5jb21taW5nIGNvbm5lY3Rpb25zICovDQorICAgICAg ICAgZGVidWcoIndhaXRpbmcgZm9yIGNvbm5lY3Rpb25zLi4uIik7DQorLSAgICAgICAgRkRfWkVS TygmcmZkcyk7DQorLSAgICAgICAgRkRfU0VUKHNvY2ssICZyZmRzKTsNCistICAgICAgICB0di50 dl9zZWMgPSAxMDsNCistICAgICAgICB0di50dl91c2VjID0gMDsNCistICAgICAgICByZXMgPSBz ZWxlY3Qoc29jayArIDEsICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYpOw0KKy0gICAgICAgIGlmIChy ZXMgPCAwKSB7DQorLSAgICAgICAgICAgIGVycm9yKCJzZWxlY3Qoc29jaykgZmFpbGVkOiAlcyIs IHN0cmVycm9yKGVycm5vKSk7DQorLSAgICAgICAgICAgIGJyZWFrOw0KKy0gICAgICAgIH0gZWxz ZSBpZiAocmVzID09IDApIHsNCistICAgICAgICAgICAgY29udGludWU7DQorLSAgICAgICAgfQ0K Ky0gICAgICAgIGFkZHJfbGVuID0gc2l6ZW9mKGFkZHIpOw0KKy0gICAgICAgIGZoID0gYWNjZXB0 KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCAmYWRkcl9sZW4pOw0KKy0gICAgICAgIGlm IChmaCA8IDApIHsNCistICAgICAgICAgICAgZXJyb3IoImFjY2VwdCgpIGZhaWxlZDogJXMiLCBz dHJlcnJvcihlcnJubykpOw0KKy0gICAgICAgICAgICBjb250aW51ZTsNCistICAgICAgICB9DQor KwlpZiAodnRwbV9yeF9maCA8IDApIHsNCisrI2lmZGVmIFZUUE1fTVVUTElfVk0NCisrCSAgICB2 dHBtX3J4X2ZoID0gb3BlbihERVZfQkUsIE9fUkRXUik7DQorKyNlbHNlDQorKwkgICAgaWYgKHZ0 cG1fdHlwZSA9PSBWVFBNX1RZUEVfUFZNKQ0KKysJICAgIHsNCisrCQl2dHBtX3J4X2ZoID0gb3Bl bih2dHBtX3J4X2ZpbGUsIE9fUkRPTkxZKTsNCisrCSAgICB9IGVsc2Ugew0KKysJCWlmIChiaW5k KHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpIDwgMCkgew0K KysJCSAgICBlcnJvcigiVW5hYmxlIHRvIGJpbmQoKS4gZXJybm8gPSAlZFxuIiwgZXJybm8pOw0K KysJCSAgICBleGl0ICgtMSk7DQorKwkJfQ0KKysNCisrCQlpZiAobGlzdGVuKHNvY2tmZCwgMTAp IDwwKSB7DQorKwkJICAgIGVycm9yKCJVbmFibGUgdG8gbGlzdGVuKCkuIGVycm5vID0gJWRcbiIs IGVycm5vKTsNCisrCQkgICAgZXhpdCAoLTEpOw0KKysJCX0gDQorKw0KKysJCSBtZW1zZXQoJmNs aWVudF9hZGRyLCAwLCBzaXplb2YoY2xpZW50X2FkZHIpKTsNCisrCQkgY2xpZW50X2xlbmd0aCA9 IHNpemVvZihjbGllbnRfYWRkcik7DQorKw0KKysJCSB2dHBtX3J4X2ZoID0gdnRwbV90eF9maCA9 IGFjY2VwdChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xpZW50X2FkZHIsICZjbGllbnRf bGVuZ3RoKTsNCisrCSAgICB9DQorKyNlbmRpZg0KKysJfQ0KKysJDQorKwkvKkVycm9yIENoZWNr aW5nKi8NCisrCWlmICh2dHBtX3J4X2ZoIDwgMCkgew0KKysJICBlcnJvcigiRmFpbGVkIHRvIG9w ZW4gZGV2aWNlcyB0byBsaXN0ZW4gdG8gZ3Vlc3QuXG4iKTsNCisrCSAgZXhpdCgtMSk7DQorKwl9 DQorKw0KKyAgICAgICAgIC8qIHJlY2VpdmUgYW5kIGhhbmRsZSBjb21tYW5kcyAqLw0KKyAgICAg ICAgIGluX2xlbiA9IDA7DQorICAgICAgICAgZG8gew0KKyAgICAgICAgICAgICBkZWJ1Zygid2Fp dGluZyBmb3IgY29tbWFuZHMuLi4iKTsNCistICAgICAgICAgICAgRkRfWkVSTygmcmZkcyk7DQor LSAgICAgICAgICAgIEZEX1NFVChmaCwgJnJmZHMpOw0KKy0gICAgICAgICAgICB0di50dl9zZWMg PSBUUE1fQ09NTUFORF9USU1FT1VUOw0KKy0gICAgICAgICAgICB0di50dl91c2VjID0gMDsNCist ICAgICAgICAgICAgcmVzID0gc2VsZWN0KGZoICsgMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZ0dik7 DQorLSAgICAgICAgICAgIGlmIChyZXMgPCAwKSB7DQorLSAgICAgICAgICAgICAgICBlcnJvcigi c2VsZWN0KGZoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsNCistICAgICAgICAgICAg ICAgIGNsb3NlKGZoKTsNCistICAgICAgICAgICAgICAgIGJyZWFrOw0KKy0gICAgICAgICAgICB9 IGVsc2UgaWYgKHJlcyA9PSAwKSB7DQorLSNpZmRlZiBUUE1EX0RJU0NPTk5FQ1RfSURMRV9DTElF TlRTCSAgICANCistICAgICAgICAgICAgICAgIGluZm8oImNvbm5lY3Rpb24gY2xvc2VkIGR1ZSB0 byBpbmFjdGl2aXR5Iik7DQorLSAgICAgICAgICAgICAgICBjbG9zZShmaCk7DQorLSAgICAgICAg ICAgICAgICBicmVhazsNCistI2Vsc2UJCQ0KKy0gICAgICAgICAgICAgICAgY29udGludWU7DQor LSNlbmRpZgkJDQorLSAgICAgICAgICAgIH0NCistICAgICAgICAgICAgaW5fbGVuID0gcmVhZChm aCwgaW4sIHNpemVvZihpbikpOw0KKy0gICAgICAgICAgICBpZiAoaW5fbGVuID4gMCkgew0KKysN CisrICAgICAgICAgICAgaW5fbGVuID0gcmVhZCh2dHBtX3J4X2ZoLCBpbiwgc2l6ZW9mKGluKSk7 DQorKwkgICAgLypNYWdpYyBzaXplIG9mIG1pbmltdW0gVFBNIGNvbW1hbmQgaXMgNiovDQorKwkJ Ly9GSVhNRSBNYWdpYyBzaXplIGNoZWNrIG1heSBub3QgYmUgcmVxdWlyZWQgYW55bW9yZQ0KKysg ICAgICAgICAgICBpZiAoaW5fbGVuIDwgNikgew0KKysJCWluZm8oIlJlY3YgaW5jb21wbGV0ZSBj b21tYW5kIG9mICVkIGJ5dGVzLiIsIGluX2xlbik7DQorKwkJaWYgKGluX2xlbiA8PSAwKSB7DQor KwkJICAgIGNsb3NlKHZ0cG1fcnhfZmgpOw0KKysJCSAgICB2dHBtX3J4X2ZoID0gLTE7DQorKwkJ ICAgIGNvbnRpbnVlOw0KKysgICAgICAgICAgICAgICAgIH0NCisrCSAgICB9IGVsc2Ugew0KKysJ CS8qRGVidWcgUHJpbnRvdXRzKi8NCisgICAgICAgICAgICAgICAgIGRlYnVnKCJyZWNlaXZlZCAl ZCBieXRlcyIsIGluX2xlbik7DQorKwkJZGVidWdfbm9zdG9wKCJSZWN2WyVkXTogMHgiLCBpbl9s ZW4pOw0KKysJCWZvciAoaT0wOyBpPCBpbl9sZW47IGkrKykgDQorKwkJICAgIGRlYnVnX21vcmUo IiV4ICIsIGluW2ldKTsNCisrCQlkZWJ1Z19tb3JlKCJcbiIpOw0KKysJCS8qTXVsdGlwbGUgR3Vl c3QgY2hlY2sqLw0KKysJCWlmIChndWVzdF9pZCA9PSAtMSkgew0KKysJCSAgICBndWVzdF9pZCA9 ICooKGludDMyX3QgKikgaW4pOw0KKysJCX0gZWxzZSB7DQorKwkJICAgIGlmIChndWVzdF9pZCAh PSAqKChpbnQzMl90ICopIGluKSApIHsNCisrCQkJZXJyb3IoIldBUk5JTkc6IE1vcmUgdGhhbiBv bmUgZ3Vlc3QgYXR0YWNoZWRcbiIpOw0KKysJCSAgICB9DQorKwkJfQ0KKysNCisrCQkvKk9wZW4g dHggaGFuZGxlIG5vdyovDQorKwkJaWYgKHZ0cG1fdHhfZmggPCAwKSB7DQorKyNpZmRlZiBWVFBN X01VVExJX1ZNDQorKwkJICAgIHZ0cG1fdHhfZmggPSBvcGVuKERFVl9CRSwgT19SRFdSKTsNCisr CQkgICAgdnRwbV9yeF9maCA9IHZ0cG1fdHhfZmg7DQorKyNlbHNlDQorKwkJICAgIGlmICh2dHBt X3R5cGUgPT0gVlRQTV9UWVBFX1BWTSkgew0KKysJCQl2dHBtX3R4X2ZoID0gb3BlbihQVk1fVFhf RklGTywgT19XUk9OTFkpOw0KKysgICAgIAkJICAgIH0gLy8gTm8gbmVlZCB0byBvcGVuIHRoZSBv dGhlciBkaXJlY3Rpb24gZm9yIEhWTQ0KKysjZW5kaWYNCisrCQl9DQorKwkJaWYgKHZ0cG1fdHhf ZmggPCAwKSB7DQorKwkJICBlcnJvcigiRmFpbGVkIHRvIG9wZW4gZGV2aWNlcyB0byByZXNwb25k IHRvIGd1ZXN0LlxuIik7DQorKwkJICBleGl0KC0xKTsNCisrCQl9DQorKw0KKysJCS8qSGFuZGxl IHRoZSBUUE0gY29tbWFuZCBub3cqLw0KKyAgICAgICAgICAgICAgICAgb3V0ID0gTlVMTDsNCist ICAgICAgICAgICAgICAgIHJlcyA9IHRwbV9oYW5kbGVfY29tbWFuZChpbiwgaW5fbGVuLCAmb3V0 LCAmb3V0X2xlbik7DQorKyAgICAgICAgICAgICAgICByZXMgPSB0cG1faGFuZGxlX2NvbW1hbmQo aW4gKyBzaXplb2YodWludDMyX3QpLCBpbl9sZW4gLSBzaXplb2YodWludDMyX3QpLCAmb3V0LCAm b3V0X2xlbik7DQorICAgICAgICAgICAgICAgICBpZiAocmVzIDwgMCkgew0KKyAgICAgICAgICAg ICAgICAgICAgIGVycm9yKCJ0cG1faGFuZGxlX2NvbW1hbmQoKSBmYWlsZWQiKTsNCisgICAgICAg ICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgZGVidWcoInNlbmRpbmcg JWQgYnl0ZXMiLCBvdXRfbGVuKTsNCisrCQkgICAgLy9GSVhNRSB0aGlzIHByZXBlbmRpbmcgbWF5 IG9yIG1heSBub3QgYmUgbmVlZGVkDQorKwkJICAgIC8qUHJlcGVuZCB0aGUgZmlyc3QgNCBieXRl cyBvZiB0aGUgaW4gYnVmZmVyLi4gd2h5PyovDQorKwkJICAgIGFkZHJlc3NlZF9vdXQgPSAodWlu dDhfdCAqKSB0cG1fbWFsbG9jKHNpemVvZih1aW50MzJfdCkgKyBvdXRfbGVuKTsNCisrCQkgICAg Kih1aW50MzJfdCAqKSBhZGRyZXNzZWRfb3V0ID0gKih1aW50MzJfdCAqKSBpbjsNCisrCQkgICAg bWVtY3B5KGFkZHJlc3NlZF9vdXQgKyBzaXplb2YodWludDMyX3QpLCBvdXQsIG91dF9sZW4pOw0K KysJCSAgICBvdXRfbGVuICs9IHNpemVvZih1aW50MzJfdCk7DQorKwkJICAgIC8qRW5kIFByZXBl bmQqLw0KKysNCisrCQkgICAgLypQZXJmb3JtIHdyaXRlIG9wZXJhdGlvbiBub3cqLw0KKyAgICAg ICAgICAgICAgICAgICAgIHdoaWxlIChvdXRfbGVuID4gMCkgew0KKy0gICAgICAgICAgICAgICAg ICAgICAgICByZXMgPSB3cml0ZShmaCwgb3V0LCBvdXRfbGVuKTsNCisrICAgICAgICAgICAgICAg ICAgICAgICAgcmVzID0gd3JpdGUodnRwbV90eF9maCwgYWRkcmVzc2VkX291dCwgb3V0X2xlbik7 DQorKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzIDwgMCkgew0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIndyaXRlKCVkKSBmYWlsZWQ6ICVzIiwgb3V0X2xl biwgc3RyZXJyb3IoZXJybm8pKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KKy0gICAgICAgICAgICAgICAgICAgICAgICB9DQorKyAgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7DQorKwkJCSAgZGVidWdfbm9zdG9wKCJTZW50WyVadV06ICIsIG91dF9sZW4pOw0K KysJCQkgIGZvciAoaT0wOyAodW5zaWduZWQgaW50KWk8IG91dF9sZW47IGkrKykNCisrCQkJICAg IGRlYnVnX21vcmUoIiV4ICIsIGFkZHJlc3NlZF9vdXRbaV0pOw0KKysJCQkgIGRlYnVnX21vcmUo IlxuIik7DQorKwkJCX0NCisgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2xlbgktPSByZXM7 DQorICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgIHRwbV9mcmVl KG91dCk7DQorKwkJICAgIHRwbV9mcmVlKGFkZHJlc3NlZF9vdXQpOw0KKyAgICAgICAgICAgICAg ICAgfQ0KKyAgICAgICAgICAgICB9DQorICAgICAgICAgfSB3aGlsZSAoaW5fbGVuID4gMCk7DQor LSAgICAgICAgY2xvc2UoZmgpOw0KKysgICAgICAgIC8vY2xvc2UoZmgpOw0KKyAgICAgfQ0KKysg ICAgDQorICAgICAvKiBzaHV0ZG93biB0cG0gZW11bGF0b3IgKi8NCisgICAgIHRwbV9lbXVsYXRv cl9zaHV0ZG93bigpOw0KKy0gICAgLyogY2xvc2Ugc29ja2V0ICovDQorLSAgICBjbG9zZShzb2Nr KTsNCistICAgIHVubGluayhvcHRfc29ja2V0X25hbWUpOw0KKysgICAgLyogQ2xvc2UgaGFuZGxl cyAqLw0KKysgICAgY2xvc2UodnRwbV90eF9maCk7DQorKyNpZm5kZWYgVlRQTV9NVUxUSV9WTQ0K KysgICAgY2xvc2UodnRwbV9yeF9maCk7DQorKyAgICBmcmVlKHZ0cG1fcnhfZmlsZSk7DQorKyNl bmRpZg0KKyAgICAgaW5mbygibWFpbiBsb29wIHN0b3BwZWQiKTsNCisgfQ0KKyANCitAQCAtNDUw LDEyICs3NzAsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KKyAgICAgLyog b3BlbiByYW5kb20gZGV2aWNlICovDQorICAgICBpbml0X3JhbmRvbSgpOw0KKyAgICAgLyogaW5p dCBzaWduYWwgaGFuZGxlcnMgKi8NCistICAgIGluaXRfc2lnbmFsX2hhbmRsZXIoKTsNCisrICAg IC8vaW5pdF9zaWduYWxfaGFuZGxlcigpOw0KKyAgICAgLyogdW5sZXNzIHJlcXVlc3RlZCBvdGhl cndpZXNlLCBmb3JrIGFuZCBkYWVtb25pemUgcHJvY2VzcyAqLw0KKy0gICAgaWYgKCFvcHRfZm9y ZWdyb3VuZCkgZGFlbW9uaXplKCk7DQorKyAgICAvL2lmICghb3B0X2ZvcmVncm91bmQpIGRhZW1v bml6ZSgpOw0KKyAgICAgLyogc3RhcnQgbWFpbiBwcm9jZXNzaW5nIGxvb3AgKi8NCisgICAgIG1h aW5fbG9vcCgpOw0KKyAgICAgaW5mbygic3RvcHBpbmcgVFBNIEVtdWxhdG9yIGRhZW1vbiIpOw0K KyAgICAgY2xvc2Vsb2coKTsNCisgICAgIHJldHVybiAwOw0KKyB9DQorKw0KK2RpZmYgLU5hdXJw IHRwbV9lbXVsYXRvci0wLjUuMS90cG1kL3RwbV9lbXVsYXRvcl9jb25maWcuaCB0cG01LXRlc3Qv dHBtZC90cG1fZW11bGF0b3JfY29uZmlnLmgNCistLS0gdHBtX2VtdWxhdG9yLTAuNS4xL3RwbWQv dHBtX2VtdWxhdG9yX2NvbmZpZy5oCTIwMDgtMDItMTQgMDM6MjI6NDguMDAwMDAwMDAwIC0wNTAw DQorKysrIHRwbTUtdGVzdC90cG1kL3RwbV9lbXVsYXRvcl9jb25maWcuaAkyMDA5LTA3LTE2IDEx OjI1OjI2LjAwMDAwMDAwMCAtMDQwMA0KK0BAIC0yOSwyMyArMjksMjggQEANCisgDQorIC8qIFRQ TSBlbXVsYXRvciBjb25maWd1cmF0aW9uICovDQorIA0KKy0jdW5kZWYgIFRQTV9TVFJPTkdfUEVS U0lTVEVOQ0UNCistI3VuZGVmICBUUE1fR0VORVJBVEVfRUsNCisrI2RlZmluZSAgVFBNX1NUUk9O R19QRVJTSVNURU5DRQ0KKysjZGVmaW5lICBUUE1fR0VORVJBVEVfRUsNCisgI3VuZGVmICBUUE1f R0VORVJBVEVfU0VFRF9EQUENCisgI3VuZGVmICBUUE1fTUVNT1JZX0FMSUdOTUVOVF9NQU5EQVRP UlkNCisgDQorK2V4dGVybiBpbnQgZG1pX2lkOw0KKysNCisgLyogbG9nIG1hY3JvcyAqLw0KKyAN Cisgdm9pZCB0cG1fbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm10LCAuLi4pOw0KKyAN CistI2RlZmluZSBkZWJ1ZyhmbXQsIC4uLikgdHBtX2xvZyhMT0dfREVCVUcsICIlczolZDogRGVi dWc6ICIgZm10ICJcbiIsIFwNCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJ TEVfXywgX19MSU5FX18sICMjIF9fVkFfQVJHU19fKQ0KKy0jZGVmaW5lIGluZm8oZm10LCAuLi4p ICB0cG1fbG9nKExPR19JTkZPLCAiJXM6JWQ6IEluZm86ICIgZm10ICJcbiIsIFwNCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICMjIF9fVkFfQVJH U19fKQ0KKy0jZGVmaW5lIGVycm9yKGZtdCwgLi4uKSB0cG1fbG9nKExPR19FUlIsICIlczolZDog RXJyb3I6ICIgZm10ICJcbiIsIFwNCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X0ZJTEVfXywgX19MSU5FX18sICMjIF9fVkFfQVJHU19fKQ0KKy0jZGVmaW5lIGFsZXJ0KGZtdCwg Li4uKSB0cG1fbG9nKExPR19BTEVSVCwgIiVzOiVkOiBBbGVydDogIiBmbXQgIlxuIiwgXA0KKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgIyMgX19W QV9BUkdTX18pDQorKyNkZWZpbmUgZGVidWcoZm10LCAuLi4pIHRwbV9sb2coTE9HX0RFQlVHLCAi VlRQTURbJWRdOiAlczolZDogRGVidWc6ICIgZm10ICJcbiIsIFwNCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkbWlfaWQsIF9fRklMRV9fLCBfX0xJTkVfXywgIyMgX19WQV9BUkdT X18pDQorKyNkZWZpbmUgaW5mbyhmbXQsIC4uLikgIHRwbV9sb2coTE9HX0lORk8sICJWVFBNRFsl ZF06ICVzOiVkOiBJbmZvOiAiIGZtdCAiXG4iLCBcDQorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG1pX2lkLCBfX0ZJTEVfXywgX19MSU5FX18sICMjIF9fVkFfQVJHU19fKQ0KKysj ZGVmaW5lIGVycm9yKGZtdCwgLi4uKSB0cG1fbG9nKExPR19FUlIsICJWVFBNRFslZF06ICVzOiVk OiBFcnJvcjogIiBmbXQgIlxuIiwgXA0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRtaV9pZCwgX19GSUxFX18sIF9fTElORV9fLCAjIyBfX1ZBX0FSR1NfXykNCisrI2RlZmluZSBh bGVydChmbXQsIC4uLikgdHBtX2xvZyhMT0dfQUxFUlQsICJWVFBNRFslZF06ICVzOiVkOiBBbGVy dDogIiBmbXQgIlxuIiwgXA0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9p ZCwgX19GSUxFX18sIF9fTElORV9fLCAjIyBfX1ZBX0FSR1NfXykNCisrI2RlZmluZSBkZWJ1Z19u b3N0b3AoZm10LCAuLi4pIHRwbV9sb2coTE9HX0RFQlVHLCAiVlRQTURbJWRdOiAlczolZDogRGVi dWc6ICIgZm10LCBcDQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX2lkLCBf X0ZJTEVfXywgX19MSU5FX18sICMjIF9fVkFfQVJHU19fKQ0KKysjZGVmaW5lIGRlYnVnX21vcmUo Zm10LCAuLi4pIHRwbV9sb2coTE9HX0RFQlVHLCBmbXQsICMjIF9fVkFfQVJHU19fKQ0KKyANCisg LyogIG1pbi9tYXggbWFjcm9zIHRoYXQgYWxzbyBkbyBzdHJpY3QgdHlwZS1jaGVja2luZyAqLw0K KyANCg== --=-POIV130cRnnxupcAqKB3-- --=-a9+ffEH5+jJpLhrz5hTc Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Disposition: attachment; filename="smime.p7s" Content-Transfer-Encoding: base64 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 bBH3MslLhAvNq+3mA6AiAErkj8oAAAAAAAA= --=-a9+ffEH5+jJpLhrz5hTc-- --===============1532478779== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============1532478779==--