From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH v3 05/34] x86emul: support basic AVX512 moves Date: Tue, 18 Sep 2018 05:56:36 -0600 Message-ID: <5BA0E7F402000078001E9537@prv1-mh.provo.novell.com> References: <5B6BF83602000078001DC548@prv1-mh.provo.novell.com> <5BA0E58F02000078001E94CE@prv1-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1g2EcS-0006Xv-Qo for xen-devel@lists.xenproject.org; Tue, 18 Sep 2018 11:56:40 +0000 In-Reply-To: <5BA0E58F02000078001E94CE@prv1-mh.provo.novell.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu List-Id: xen-devel@lists.xenproject.org Tm90ZTogU0RNIFZvbCAyIHJldiAwNjcgaXMgbm90IHJlYWxseSBjb25zaXN0ZW50IGFib3V0IEVW RVguTCdMIGZvciBMSUcKICAgICAgaW5zbnMgLSB0aGUgb25seSBwbGFjZSB3aGVyZSB0aGlzIGlz IG1hZGUgZXhwbGljaXQgaXMgYSB0YWJsZSBpbgogICAgICB0aGUgc2VjdGlvbiB0aXRsZWQgIlZl Y3RvciBMZW5ndGggT3J0aG9nb25hbGl0eSI6IFdoaWxlIHRoZXkKICAgICAgdG9sZXJhdGUgMCwg MSwgYW5kIDIsIGEgdmFsdWUgb2YgMyB1bmlmb3JtbHkgbGVhZHMgdG8gI1VELgoKU2lnbmVkLW9m Zi1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgotLS0KdjM6IFJlc3RyaWN0IGst cmVnIHJlYWRpbmcgdG8gaW5zbnMgd2l0aCBtZW1vcnkgb3BlcmFuZC4gU2hyaW5rIHNjb3BlIG9m CiAgICAiZGlzcDhzY2FsZSIuCnYyOiBNb3ZlICJmdWxsIiBpbnRvIG1vcmUgbmFycm93IHNjb3Bl LgoKLS0tIGEvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3Rlc3RfeDg2X2VtdWxhdG9yLmMKKysr IGIvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3Rlc3RfeDg2X2VtdWxhdG9yLmMKQEAgLTE5ODUs NiArMTk4NSw1MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgZWxzZQog ICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOwogCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0 aW5nIHtldmV4fSB2bW92cSAleG1tMSwzMiglZWR4KS4uLiIpOworICAgIGlmICggc3RhY2tfZXhl YyAmJiBjcHVfaGFzX2F2eDUxMmYgKQorICAgIHsKKyAgICAgICAgZGVjbF9pbnNuKGV2ZXhfdm1v dnFfdG9fbWVtKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAicGNtcGd0YiAlJXhtbTEsICUl eG1tMVxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3ZxX3RvX21l bSwgIiV7ZXZleCV9IHZtb3ZxICUleG1tMSwgMzIoJTApIikKKyAgICAgICAgICAgICAgICAgICAg ICAgOjogImQiIChOVUxMKSApOworCisgICAgICAgIG1lbXNldChyZXMsIDB4ZGIsIDY0KTsKKyAg ICAgICAgc2V0X2luc24oZXZleF92bW92cV90b19tZW0pOworICAgICAgICByZWdzLmVjeCA9IDA7 CisgICAgICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4 Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9P S0FZIHx8ICFjaGVja19laXAoZXZleF92bW92cV90b19tZW0pIHx8CisgICAgICAgICAgICAgKigo dWludDY0X3QgKilyZXMgKyA0KSB8fAorICAgICAgICAgICAgIG1lbWNtcChyZXMsIHJlcyArIDEw LCAyNCkgfHwKKyAgICAgICAgICAgICBtZW1jbXAocmVzLCByZXMgKyA2LCA4KSApCisgICAgICAg ICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVs c2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKworICAgIHByaW50ZigiJS00MHMiLCAi VGVzdGluZyB7ZXZleH0gdm1vdnEgMzIoJWVkeCksJXhtbTAuLi4iKTsKKyAgICBpZiAoIHN0YWNr X2V4ZWMgJiYgY3B1X2hhc19hdng1MTJmICkKKyAgICB7CisgICAgICAgIGRlY2xfaW5zbihldmV4 X3Ztb3ZxX2Zyb21fbWVtKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAicGNtcGVxYiAlJXht bTAsICUleG1tMFxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3Zx X2Zyb21fbWVtLCAiJXtldmV4JX0gdm1vdnEgMzIoJTApLCAlJXhtbTAiKQorICAgICAgICAgICAg ICAgICAgICAgICA6OiAiZCIgKE5VTEwpICk7CisKKyAgICAgICAgc2V0X2luc24oZXZleF92bW92 cV9mcm9tX21lbSk7CisgICAgICAgIHJjID0geDg2X2VtdWxhdGUoJmN0eHQsICZlbXVsb3BzKTsK KyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgfHwgIWNoZWNrX2VpcChldmV4X3Ztb3Zx X2Zyb21fbWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2bW92 cSAlMSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgInZwY21wZXFxICUlem1tMCwgJSV6bW0x LCAlJWswXG4iCisgICAgICAgICAgICAgICJrbW92dyAlJWswLCAlMCIgOiAiPXIiIChyYykgOiAi bSIgKHJlc1s4XSkgKTsKKyAgICAgICAgaWYgKCByYyAhPSAweGZmICkKKyAgICAgICAgICAgIGdv dG8gZmFpbDsKKyAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAg ICAgICBwcmludGYoInNraXBwZWRcbiIpOworCiAgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5n IG1vdmRxdSAleG1tMiwoJWVjeCkuLi4iKTsKICAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hh c19zc2UyICkKICAgICB7CkBAIC0yMDg1LDYgKzIxMzIsMTE4IEBAIGludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKICAgICBlbHNlCiAgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CiAK KyAgICBwcmludGYoIiUtNDBzIiwgIlRlc3Rpbmcgdm1vdmRxdTMyICV6bW0yLCglZWN4KXslazF9 Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgewor ICAgICAgICBkZWNsX2luc24odm1vdmRxdTMyX3RvX21lbSk7CisKKyAgICAgICAgbWVtc2V0KHJl cywgMHg1NSwgMTI4KTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAidnBjbXBlcWQgJSV5bW0y LCAlJXltbTIsICUleW1tMlxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICJrbW92dyAlMSwl JWsxXG4iCisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKHZtb3ZkcXUzMl90b19tZW0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2bW92ZHF1MzIgJSV6bW0yLCAoJTAp JXslJWsxJX0iKQorICAgICAgICAgICAgICAgICAgICAgICA6OiAiYyIgKE5VTEwpLCAicm0iIChy ZXNbMF0pICk7CisgICAgICAgIHNldF9pbnNuKHZtb3ZkcXUzMl90b19tZW0pOworCisgICAgICAg IHJlZ3MuZWN4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRl KCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggKHJjICE9IFg4NkVNVUxfT0tBWSkgfHwg bWVtY21wKHJlcyArIDE2LCByZXMgKyAyNCwgMzIpIHx8CisgICAgICAgICAgICAgIWNoZWNrX2Vp cCh2bW92ZHF1MzJfdG9fbWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAg cmVzWzE2XSA9IH4wOyByZXNbMThdID0gfjA7IHJlc1syMF0gPSB+MDsgcmVzWzIyXSA9IH4wOwor ICAgICAgICByZXNbMjRdID0gIDA7IHJlc1syNl0gPSAgMDsgcmVzWzI4XSA9ICAwOyByZXNbMzBd ID0gIDA7CisgICAgICAgIGlmICggbWVtY21wKHJlcywgcmVzICsgMTYsIDY0KSApCisgICAgICAg ICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKKyAgICB9CisgICAg ZWxzZQorICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOworCisgICAgcHJpbnRmKCIlLTQwcyIs ICJUZXN0aW5nIHZtb3ZkcXUzMiA2NCglZWR4KSwlem1tMnslazJ9Li4uIik7CisgICAgaWYgKCBz dGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2luc24o dm1vdmRxdTMyX2Zyb21fbWVtKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAia25vdHcgJSVr MSwgJSVrMlxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbih2bW92ZHF1MzJfZnJv bV9tZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2bW92ZHF1MzIgNjQoJTAp LCAlJXptbTIleyUlazIlfSIpCisgICAgICAgICAgICAgICAgICAgICAgIDo6ICJkIiAoTlVMTCkg KTsKKworICAgICAgICBzZXRfaW5zbih2bW92ZHF1MzJfZnJvbV9tZW0pOworICAgICAgICByZWdz LmVjeCA9IDA7CisgICAgICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAg ICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0g WDg2RU1VTF9PS0FZIHx8ICFjaGVja19laXAodm1vdmRxdTMyX2Zyb21fbWVtKSApCisgICAgICAg ICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2cGNtcGVxZCAlMSwgJSV6bW0yLCAlJWsw XG5cdCIKKyAgICAgICAgICAgICAgImttb3Z3ICUlazAsICUwIiA6ICI9ciIgKHJjKSA6ICJtIiAo cmVzWzBdKSApOworICAgICAgICBpZiAoIHJjICE9IDB4ZmZmZiApCisgICAgICAgICAgICBnb3Rv IGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAg ICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKworICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGluZyB2 bW92ZHF1MTYgJXptbTMsKCVlY3gpeyVrMX0uLi4iKTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYg Y3B1X2hhc19hdng1MTJidyApCisgICAgeworICAgICAgICBkZWNsX2luc24odm1vdmRxdTE2X3Rv X21lbSk7CisKKyAgICAgICAgbWVtc2V0KHJlcywgMHg1NSwgMTI4KTsKKworICAgICAgICBhc20g dm9sYXRpbGUgKCAidnBjbXBlcXcgJSV5bW0zLCAlJXltbTMsICUleW1tM1xuXHQiCisgICAgICAg ICAgICAgICAgICAgICAgICJrbW92ZCAlMSwlJWsxXG4iCisgICAgICAgICAgICAgICAgICAgICAg IHB1dF9pbnNuKHZtb3ZkcXUxNl90b19tZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJ2bW92ZHF1MTYgJSV6bW0zLCAoJTApJXslJWsxJX0iKQorICAgICAgICAgICAgICAgICAg ICAgICA6OiAiYyIgKE5VTEwpLCAicm0iIChyZXNbMF0pICk7CisgICAgICAgIHNldF9pbnNuKHZt b3ZkcXUxNl90b19tZW0pOworCisgICAgICAgIHJlZ3MuZWN4ID0gKHVuc2lnbmVkIGxvbmcpcmVz OworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlm ICggKHJjICE9IFg4NkVNVUxfT0tBWSkgfHwgbWVtY21wKHJlcyArIDE2LCByZXMgKyAyNCwgMzIp IHx8CisgICAgICAgICAgICAgIWNoZWNrX2VpcCh2bW92ZHF1MTZfdG9fbWVtKSApCisgICAgICAg ICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgZm9yICggaSA9IDE2OyBpIDwgMjQ7ICsraSApCisg ICAgICAgICAgICByZXNbaV0gfD0gMHgwMDAwZmZmZjsKKyAgICAgICAgZm9yICggOyBpIDwgMzI7 ICsraSApCisgICAgICAgICAgICByZXNbaV0gJj0gMHhmZmZmMDAwMDsKKyAgICAgICAgaWYgKCBt ZW1jbXAocmVzLCByZXMgKyAxNiwgNjQpICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAg ICAgICBwcmludGYoIm9rYXlcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHByaW50Zigi c2tpcHBlZFxuIik7CisKKyAgICBwcmludGYoIiUtNDBzIiwgIlRlc3Rpbmcgdm1vdmRxdTE2IDY0 KCVlZHgpLCV6bW0zeyVrMn0uLi4iKTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19h dng1MTJidyApCisgICAgeworICAgICAgICBkZWNsX2luc24odm1vdmRxdTE2X2Zyb21fbWVtKTsK KworICAgICAgICBhc20gdm9sYXRpbGUgKCAia25vdGQgJSVrMSwgJSVrMlxuIgorICAgICAgICAg ICAgICAgICAgICAgICBwdXRfaW5zbih2bW92ZHF1MTZfZnJvbV9tZW0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJ2bW92ZHF1MTYgNjQoJTApLCAlJXptbTMleyUlazIlfSIpCisg ICAgICAgICAgICAgICAgICAgICAgIDo6ICJkIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5z bih2bW92ZHF1MTZfZnJvbV9tZW0pOworICAgICAgICByZWdzLmVjeCA9IDA7CisgICAgICAgIHJl Z3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZj dHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVj a19laXAodm1vdmRxdTE2X2Zyb21fbWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAg ICAgIGFzbSAoICJ2cGNtcGVxdyAlMSwgJSV6bW0zLCAlJWswXG5cdCIKKyAgICAgICAgICAgICAg Imttb3ZkICUlazAsICUwIiA6ICI9ciIgKHJjKSA6ICJtIiAocmVzWzBdKSApOworICAgICAgICBp ZiAoIHJjICE9IDB4ZmZmZmZmZmYgKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBw cmludGYoIm9rYXlcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHByaW50Zigic2tpcHBl ZFxuIik7CisKICAgICBwcmludGYoIiUtNDBzIiwgIlRlc3RpbmcgbW92c2QgJXhtbTUsKCVlY3gp Li4uIik7CiAgICAgbWVtc2V0KHJlcywgMHg3NywgNjQpOwogICAgIG1lbXNldChyZXMgKyAxMCwg MHg2NiwgOCk7CkBAIC0yMTg2LDYgKzIzNDUsNzEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogICAgIGVsc2UKICAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKIAorICAgIHBy aW50ZigiJS00MHMiLCAiVGVzdGluZyB2bW92c2QgJXhtbTUsMTYoJWVjeCl7JWszfS4uLiIpOwor ICAgIG1lbXNldChyZXMsIDB4ODgsIDEyOCk7CisgICAgbWVtc2V0KHJlcyArIDIwLCAweDc3LCA4 KTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19hdng1MTJmICkKKyAgICB7CisgICAg ICAgIGRlY2xfaW5zbih2bW92c2RfbWFza2VkX3RvX21lbSk7CisKKyAgICAgICAgYXNtIHZvbGF0 aWxlICggInZicm9hZGNhc3RzZCAlMCwgJSV5bW01XG5cdCIKKyAgICAgICAgICAgICAgICAgICAg ICAgImt4b3J3ICUlazMsICUlazMsICUlazNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgcHV0 X2luc24odm1vdnNkX21hc2tlZF90b19tZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJ2bW92c2QgJSV4bW01LCAxNiglMSkleyUlazMlfSIpCisgICAgICAgICAgICAgICAgICAg ICAgIDo6ICJtIiAocmVzWzIwXSksICJjIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5zbih2 bW92c2RfbWFza2VkX3RvX21lbSk7CisgICAgICAgIHJlZ3MuZWN4ID0gMDsKKyAgICAgICAgcmVn cy5lZHggPSAwOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7Cisg ICAgICAgIGlmICggKHJjICE9IFg4NkVNVUxfT0tBWSkgfHwgIWNoZWNrX2VpcCh2bW92c2RfbWFz a2VkX3RvX21lbSkgKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGFzbSB2b2xh dGlsZSAoICJrbW92dyAlMCwgJSVrM1xuIiA6OiAibSIgKHJlc1syMF0pICk7CisKKyAgICAgICAg c2V0X2luc24odm1vdnNkX21hc2tlZF90b19tZW0pOworICAgICAgICByZWdzLmVjeCA9ICh1bnNp Z25lZCBsb25nKXJlczsKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVtdWxvcHMp OworICAgICAgICBpZiAoIChyYyAhPSBYODZFTVVMX09LQVkpIHx8ICFjaGVja19laXAodm1vdnNk X21hc2tlZF90b19tZW0pIHx8CisgICAgICAgICAgICAgbWVtY21wKHJlcywgcmVzICsgMTYsIDY0 KSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsK KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKyAg ICAgICAgbWVtc2V0KHJlcyArIDQsIDB4NzcsIDgpOworICAgIH0KKworICAgIHByaW50ZigiJS00 MHMiLCAiVGVzdGluZyB2bW92YXBzICglZWR4KSwlem1tN3slazN9e3p9Li4uIik7CisgICAgaWYg KCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2lu c24odm1vdmFwc19tYXNrZWRfZnJvbV9tZW0pOworCisgICAgICAgIGFzbSB2b2xhdGlsZSAoICJ2 cGNtcGVxZCAlJXhtbTcsICUleG1tNywgJSV4bW03XG5cdCIKKyAgICAgICAgICAgICAgICAgICAg ICAgInZicm9hZGNhc3RzcyAlJXhtbTcsICUlem1tN1xuIgorICAgICAgICAgICAgICAgICAgICAg ICBwdXRfaW5zbih2bW92YXBzX21hc2tlZF9mcm9tX21lbSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgInZtb3ZhcHMgKCUwKSwgJSV6bW03JXslJWszJX0le3olfSIpCisgICAgICAg ICAgICAgICAgICAgICAgIDo6ICJkIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5zbih2bW92 YXBzX21hc2tlZF9mcm9tX21lbSk7CisgICAgICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcp cmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAg IGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVja19laXAodm1vdmFwc19tYXNrZWRfZnJv bV9tZW0pICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgYXNtICggInZjbXBlcXBz ICUxLCAlJXptbTcsICUlazBcblx0IgorICAgICAgICAgICAgICAidnhvcnBzICUleG1tMCwgJSV4 bW0wLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAidmNtcGVxcHMgJSV6bW0wLCAlJXptbTcs ICUlazFcblx0IgorICAgICAgICAgICAgICAia3hvcncgJSVrMSwgJSVrMCwgJSVrMFxuXHQiCisg ICAgICAgICAgICAgICJrbW92dyAlJWswLCAlMCIgOiAiPXIiIChyYykgOiAibSIgKHJlc1sxNl0p ICk7CisgICAgICAgIGlmICggcmMgIT0gMHhmZmZmICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsK KyAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBwcmlu dGYoInNraXBwZWRcbiIpOworCiAgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIG1vdmQgJW1t MywzMiglZWN4KS4uLiIpOwogICAgIGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFzX21teCApCiAg ICAgewpAQCAtMjM0MSw2ICsyNTY1LDU1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKICAgICBlbHNlCiAgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CiAKKyAgICBwcmludGYo IiUtNDBzIiwgIlRlc3Rpbmcge2V2ZXh9IHZtb3ZkICV4bW0zLDMyKCVlY3gpLi4uIik7CisgICAg aWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNs X2luc24oZXZleF92bW92ZF90b19tZW0pOworCisgICAgICAgIGFzbSB2b2xhdGlsZSAoICJwY21w ZXFiICUleG1tMywgJSV4bW0zXG4iCisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKGV2 ZXhfdm1vdmRfdG9fbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXtldmV4 JX0gdm1vdmQgJSV4bW0zLCAzMiglMCkiKQorICAgICAgICAgICAgICAgICAgICAgICA6OiAiYyIg KE5VTEwpICk7CisKKyAgICAgICAgbWVtc2V0KHJlcywgMHhiZCwgNjQpOworICAgICAgICBzZXRf aW5zbihldmV4X3Ztb3ZkX3RvX21lbSk7CisgICAgICAgIHJlZ3MuZWN4ID0gKHVuc2lnbmVkIGxv bmcpcmVzOworICAgICAgICByZWdzLmVkeCA9IDA7CisgICAgICAgIHJjID0geDg2X2VtdWxhdGUo JmN0eHQsICZlbXVsb3BzKTsKKyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgfHwgIWNo ZWNrX2VpcChldmV4X3Ztb3ZkX3RvX21lbSkgfHwKKyAgICAgICAgICAgICByZXNbOF0gKyAxIHx8 CisgICAgICAgICAgICAgbWVtY21wKHJlcywgcmVzICsgOSwgMjgpIHx8CisgICAgICAgICAgICAg bWVtY21wKHJlcywgcmVzICsgNiwgOCkgKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAg ICBwcmludGYoIm9rYXlcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHByaW50Zigic2tp cHBlZFxuIik7CisKKyAgICBwcmludGYoIiUtNDBzIiwgIlRlc3Rpbmcge2V2ZXh9IHZtb3ZkIDMy KCVlY3gpLCV4bW00Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEy ZiApCisgICAgeworICAgICAgICBkZWNsX2luc24oZXZleF92bW92ZF9mcm9tX21lbSk7CisKKyAg ICAgICAgYXNtIHZvbGF0aWxlICggInBjbXBlcWIgJSV4bW00LCAlJXhtbTRcbiIKKyAgICAgICAg ICAgICAgICAgICAgICAgcHV0X2luc24oZXZleF92bW92ZF9mcm9tX21lbSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiV7ZXZleCV9IHZtb3ZkIDMyKCUwKSwgJSV4bW00IikKKyAg ICAgICAgICAgICAgICAgICAgICAgOjogImMiIChOVUxMKSApOworCisgICAgICAgIHNldF9pbnNu KGV2ZXhfdm1vdmRfZnJvbV9tZW0pOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAm ZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVja19laXAo ZXZleF92bW92ZF9mcm9tX21lbSkgKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBh c20gKCAidm1vdmQgJTEsICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICJ2cGNtcGVxZCAlJXpt bTQsICUlem1tMCwgJSVrMFxuXHQiCisgICAgICAgICAgICAgICJrbW92dyAlJWswLCAlMCIgOiAi PXIiIChyYykgOiAibSIgKHJlc1s4XSkgKTsKKyAgICAgICAgaWYgKCByYyAhPSAweGZmZmYgKQor ICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBwcmludGYoIm9rYXlcbiIpOworICAgIH0K KyAgICBlbHNlCisgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CisKICAgICBwcmludGYoIiUt NDBzIiwgIlRlc3RpbmcgbW92ZCAlbW0zLCVlYnguLi4iKTsKICAgICBpZiAoIHN0YWNrX2V4ZWMg JiYgY3B1X2hhc19tbXggKQogICAgIHsKQEAgLTI1MDcsNiArMjc4MCw1NyBAQCBpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgZWxzZQogICAgICAgICBwcmludGYoInNraXBwZWRc biIpOwogCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHtldmV4fSB2bW92ZCAleG1tMiwl ZWJ4Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAg eworICAgICAgICBkZWNsX2luc24oZXZleF92bW92ZF90b19yZWcpOworCisgICAgICAgIC8qIFNl ZSBjb21tZW50IG5leHQgdG8gbW92ZCBhYm92ZS4gKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlICgg InBjbXBlcWIgJSV4bW0yLCAlJXhtbTJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgcHV0X2lu c24oZXZleF92bW92ZF90b19yZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIl e2V2ZXglfSB2bW92ZCAlJXhtbTIsICUlZWJ4IikKKyAgICAgICAgICAgICAgICAgICAgICAgOjog KTsKKworICAgICAgICBzZXRfaW5zbihldmV4X3Ztb3ZkX3RvX3JlZyk7CisjaWZkZWYgX194ODZf NjRfXworICAgICAgICByZWdzLnJieCA9IDB4YmRiZGJkYmRiZGJkYmRiZFVMOworI2Vsc2UKKyAg ICAgICAgcmVncy5lYnggPSAweGJkYmRiZGJkVUw7CisjZW5kaWYKKyAgICAgICAgcmMgPSB4ODZf ZW11bGF0ZSgmY3R4dCwgJmVtdWxvcHMpOworICAgICAgICBpZiAoIChyYyAhPSBYODZFTVVMX09L QVkpIHx8ICFjaGVja19laXAoZXZleF92bW92ZF90b19yZWcpIHx8CisgICAgICAgICAgICAgcmVn cy5lYnggIT0gMHhmZmZmZmZmZiApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHBy aW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVk XG4iKTsKKworICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGluZyB7ZXZleH0gdm1vdmQgJWVieCwl eG1tMS4uLiIpOworICAgIGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFzX2F2eDUxMmYgKQorICAg IHsKKyAgICAgICAgZGVjbF9pbnNuKGV2ZXhfdm1vdmRfZnJvbV9yZWcpOworCisgICAgICAgIC8q IFNlZSBjb21tZW50IG5leHQgdG8gbW92ZCBhYm92ZS4gKi8KKyAgICAgICAgYXNtIHZvbGF0aWxl ICggInBjbXBndGIgJSV4bW0xLCAlJXhtbTFcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgcHV0 X2luc24oZXZleF92bW92ZF9mcm9tX3JlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiV7ZXZleCV9IHZtb3ZkICUlZWJ4LCAlJXhtbTEiKQorICAgICAgICAgICAgICAgICAgICAg ICA6OiApOworCisgICAgICAgIHNldF9pbnNuKGV2ZXhfdm1vdmRfZnJvbV9yZWcpOworICAgICAg ICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggKHJjICE9 IFg4NkVNVUxfT0tBWSkgfHwgIWNoZWNrX2VpcChldmV4X3Ztb3ZkX2Zyb21fcmVnKSApCisgICAg ICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2bW92ZCAlMSwgJSV4bW0wXG5cdCIK KyAgICAgICAgICAgICAgInZwY21wZXFkICUlem1tMSwgJSV6bW0wLCAlJWswXG5cdCIKKyAgICAg ICAgICAgICAgImttb3Z3ICUlazAsICUwIiA6ICI9ciIgKHJjKSA6ICJtIiAocmVzWzhdKSApOwor ICAgICAgICBpZiAoIHJjICE9IDB4ZmZmZiApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAg ICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJz a2lwcGVkXG4iKTsKKwogI2lmZGVmIF9feDg2XzY0X18KICAgICBwcmludGYoIiUtNDBzIiwgIlRl c3RpbmcgbW92cSAlbW0zLDMyKCVlY3gpLi4uIik7CiAgICAgaWYgKCBzdGFja19leGVjICYmIGNw dV9oYXNfbW14ICkKQEAgLTI1ODQsNiArMjkwOCwzNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAgICAgZWxzZQogICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOwogCisgICAg cHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHtldmV4fSB2bW92cSAleG1tMTEsMzIoJWVjeCkuLi4i KTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19hdng1MTJmICkKKyAgICB7CisgICAg ICAgIGRlY2xfaW5zbihldmV4X3Ztb3ZxX3RvX21lbTIpOworCisgICAgICAgIGFzbSB2b2xhdGls ZSAoICJwY21wZXFiICUleG1tMTEsICUleG1tMTFcbiIKKyNpZiAwIC8qIFRoaXMgbWF5IG5vdCB3 b3JrLCBhcyB0aGUgYXNzZW1ibGVyIG1pZ2h0IHBpY2sgb3Bjb2RlIEQ2LiAqLworICAgICAgICAg ICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3ZxX3RvX21lbTIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJ7ZXZleH0gdm1vdnEgJSV4bW0xMSwgMzIoJTApIikKKyNlbHNl CisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKGV2ZXhfdm1vdnFfdG9fbWVtMiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5ieXRlIDB4NjIsIDB4ZjEsIDB4ZmQsIDB4 MDgsIDB4N2UsIDB4NDksIDB4MDQiKQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgIDo6 ICJjIiAoTlVMTCkgKTsKKworICAgICAgICBtZW1zZXQocmVzLCAweGJkLCA2NCk7CisgICAgICAg IHNldF9pbnNuKGV2ZXhfdm1vdnFfdG9fbWVtMik7CisgICAgICAgIHJlZ3MuZWN4ID0gKHVuc2ln bmVkIGxvbmcpcmVzOworICAgICAgICByZWdzLmVkeCA9IDA7CisgICAgICAgIHJjID0geDg2X2Vt dWxhdGUoJmN0eHQsICZlbXVsb3BzKTsKKyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkg fHwgIWNoZWNrX2VpcChldmV4X3Ztb3ZxX3RvX21lbTIpIHx8CisgICAgICAgICAgICAgKigobG9u ZyAqKXJlcyArIDQpICsgMSB8fAorICAgICAgICAgICAgIG1lbWNtcChyZXMsIHJlcyArIDEwLCAy NCkgfHwKKyAgICAgICAgICAgICBtZW1jbXAocmVzLCByZXMgKyA2LCA4KSApCisgICAgICAgICAg ICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UK KyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKwogICAgIHByaW50ZigiJS00MHMiLCAiVGVz dGluZyBtb3ZxICVtbTMsJXJieC4uLiIpOwogICAgIGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFz X21teCApCiAgICAgewpAQCAtMjY0Myw2ICsyOTk3LDI4IEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKICAgICB9CiAgICAgZWxzZQogICAgICAgICBwcmludGYoInNraXBwZWRcbiIp OworCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHZtb3ZxICV4bW0yMiwlcmJ4Li4uIik7 CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAg ICBkZWNsX2luc24oZXZleF92bW92cV90b19yZWcpOworCisgICAgICAgIC8qIFNlZSBjb21tZW50 IG5leHQgdG8gbW92ZCBhYm92ZS4gKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlICggInBjbXBlcXEg JSV4bW0yLCAlJXhtbTJcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAidm1vdnEgJSV4bW0y LCAlJXhtbTIyXG4iCisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKGV2ZXhfdm1vdnFf dG9fcmVnLCAidm1vdnEgJSV4bW0yMiwgJSVyYngiKQorICAgICAgICAgICAgICAgICAgICAgICA6 OiApOworCisgICAgICAgIHNldF9pbnNuKGV2ZXhfdm1vdnFfdG9fcmVnKTsKKyAgICAgICAgcmVn cy5yYnggPSAweGJkYmRiZGJkYmRiZGJkYmRVTDsKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgm Y3R4dCwgJmVtdWxvcHMpOworICAgICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSB8fCAhY2hl Y2tfZWlwKGV2ZXhfdm1vdnFfdG9fcmVnKSB8fAorICAgICAgICAgICAgIHJlZ3MucmJ4ICsgMSAp CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAg fQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKICNlbmRpZgogCiAgICAg cHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIG1hc2ttb3ZxICVtbTQsJW1tNC4uLiIpOwpAQCAtMjgx Miw2ICszMTg4LDMyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAg ICAgIGdvdG8gZmFpbDsKICAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKICAgICB9CisgICAgZWxz ZQorICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOworCisgICAgcHJpbnRmKCIlLTQwcyIsICJU ZXN0aW5nIHZtb3ZudGRxYSA2NCglZWN4KSwlem1tNC4uLiIpOworICAgIGlmICggc3RhY2tfZXhl YyAmJiBjcHVfaGFzX2F2eDUxMmYgKQorICAgIHsKKyAgICAgICAgZGVjbF9pbnNuKGV2ZXhfdm1v dm50ZHFhKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAidnB4b3IgJSV4bW00LCAlJXhtbTQs ICUleG1tNFxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3ZudGRx YSwgInZtb3ZudGRxYSA2NCglMCksICUlem1tNCIpCisgICAgICAgICAgICAgICAgICAgICAgIDo6 ICJjIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5zbihldmV4X3Ztb3ZudGRxYSk7CisgICAg ICAgIG1lbXNldChyZXMsIDB4NTUsIDE5Mik7CisgICAgICAgIG1lbXNldChyZXMgKyAxNiwgMHhm ZiwgNjQpOworICAgICAgICByZWdzLmVjeCA9ICh1bnNpZ25lZCBsb25nKXJlczsKKyAgICAgICAg cmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVtdWxvcHMpOworICAgICAgICBpZiAoIHJjICE9IFg4 NkVNVUxfT0tBWSB8fCAhY2hlY2tfZWlwKGV2ZXhfdm1vdm50ZHFhKSApCisgICAgICAgICAgICBn b3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2cGJyb2FkY2FzdGQgJTEsICUlem1tMlxuXHQiCisg ICAgICAgICAgICAgICJ2cGNtcGVxZCAlJXptbTQsICUlem1tMiwgJSVrMFxuXHQiCisgICAgICAg ICAgICAgICJrbW92dyAlJWswLCAlMCIgOiAiPXIiIChyYykgOiAiMCIgKH4wKSApOworICAgICAg ICBpZiAoIHJjICE9IDB4ZmZmZiApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHBy aW50Zigib2theVxuIik7CisgICAgfQogICAgIGVsc2UKICAgICAgICAgcHJpbnRmKCJza2lwcGVk XG4iKTsKIAotLS0gYS90b29scy90ZXN0cy94ODZfZW11bGF0b3IveDg2LWVtdWxhdGUuYworKysg Yi90b29scy90ZXN0cy94ODZfZW11bGF0b3IveDg2LWVtdWxhdGUuYwpAQCAtMjEwLDYgKzIxMCw3 IEBAIGludCBlbXVsX3Rlc3RfZ2V0X2ZwdSgKICAgICAgICAgaWYgKCBjcHVfaGFzX2F2eCApCiAg ICAgICAgICAgICBicmVhazsKICAgICBjYXNlIFg4NkVNVUxfRlBVX29wbWFzazoKKyAgICBjYXNl IFg4NkVNVUxfRlBVX3ptbToKICAgICAgICAgaWYgKCBjcHVfaGFzX2F2eDUxMmYgKQogICAgICAg ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLS0tIGEvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9y L3g4Ni1lbXVsYXRlLmgKKysrIGIvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3g4Ni1lbXVsYXRl LmgKQEAgLTI2Niw2ICsyNjYsMTYgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCB4Z2V0YnYodWlu dDMyX3QgeAogICAgIChyZXMuYiAmICgxVSA8PCAzMCkpICE9IDA7IFwKIH0pCiAKKyNkZWZpbmUg Y3B1X2hhc19hdng1MTJ2bCAoeyBcCisgICAgc3RydWN0IGNwdWlkX2xlYWYgcmVzOyBcCisgICAg ZW11bF90ZXN0X2NwdWlkKDEsIDAsICZyZXMsIE5VTEwpOyBcCisgICAgaWYgKCAhKHJlcy5jICYg KDFVIDw8IDI3KSkgfHwgKCh4Z2V0YnYoMCkgJiAweGU2KSAhPSAweGU2KSApIFwKKyAgICAgICAg cmVzLmIgPSAwOyBcCisgICAgZWxzZSBcCisgICAgICAgIGVtdWxfdGVzdF9jcHVpZCg3LCAwLCAm cmVzLCBOVUxMKTsgXAorICAgIChyZXMuYiAmICgxVSA8PCAzMSkpICE9IDA7IFwKK30pCisKIGlu dCBlbXVsX3Rlc3RfY3B1aWQoCiAgICAgdWludDMyX3QgbGVhZiwKICAgICB1aW50MzJfdCBzdWJs ZWFmLAotLS0gYS94ZW4vYXJjaC94ODYveDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYworKysgYi94 ZW4vYXJjaC94ODYveDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYwpAQCAtMjQzLDkgKzI0MywyNSBA QCBlbnVtIHNpbWRfb3BzaXplIHsKIH07CiB0eXBlZGVmIHVpbnQ4X3Qgc2ltZF9vcHNpemVfdDsK IAorZW51bSBkaXNwOHNjYWxlIHsKKyAgICAvKiBWYWx1ZXMgMCAuLi4gNCBhcmUgZXhwbGljaXQg c2l6ZXMuICovCisgICAgZDhzX2J3ID0gNSwKKyAgICBkOHNfZHEsCisgICAgLyoKKyAgICAgKiBB bGwgZnVydGhlciB2YWx1ZXMgbXVzdCBzdHJpY3RseSBiZSBsYXN0IGFuZCBpbiB0aGUgb3JkZXIK KyAgICAgKiBnaXZlbiBzbyB0aGF0IGFyaXRobWV0aWMgb24gdGhlIHZhbHVlcyB3b3Jrcy4KKyAg ICAgKi8KKyAgICBkOHNfdmwsCisgICAgZDhzX3ZsX2J5XzIsCisgICAgZDhzX3ZsX2J5XzQsCisg ICAgZDhzX3ZsX2J5XzgsCit9OwordHlwZWRlZiB1aW50OF90IGRpc3A4c2NhbGVfdDsKKwogc3Rh dGljIGNvbnN0IHN0cnVjdCB0d29ieXRlX3RhYmxlIHsKICAgICBvcGNvZGVfZGVzY190IGRlc2M7 Ci0gICAgc2ltZF9vcHNpemVfdCBzaXplOworICAgIHNpbWRfb3BzaXplX3Qgc2l6ZTo0OworICAg IGRpc3A4c2NhbGVfdCBkOHM6NDsKIH0gdHdvYnl0ZV90YWJsZVsyNTZdID0gewogICAgIFsweDAw XSA9IHsgTW9kUk0gfSwKICAgICBbMHgwMV0gPSB7IEltcGxpY2l0T3BzfE1vZFJNIH0sCkBAIC0y NjAsOCArMjc2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0d29ieXRlX3RhYmxlIHsKICAgICBb MHgwZF0gPSB7IEltcGxpY2l0T3BzfE1vZFJNIH0sCiAgICAgWzB4MGVdID0geyBJbXBsaWNpdE9w cyB9LAogICAgIFsweDBmXSA9IHsgTW9kUk18U3JjSW1tQnl0ZSB9LAotICAgIFsweDEwXSA9IHsg RHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNfE1vdiwgc2ltZF9hbnlfZnAgfSwKLSAgICBbMHgxMV0g PSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YsIHNpbWRfYW55X2ZwIH0sCisgICAgWzB4 MTBdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18TW92LCBzaW1kX2FueV9mcCwgZDhzX3Zs IH0sCisgICAgWzB4MTFdID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9kUk18TW92LCBzaW1kX2Fu eV9mcCwgZDhzX3ZsIH0sCiAgICAgWzB4MTJdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18 TW92LCBzaW1kX290aGVyIH0sCiAgICAgWzB4MTNdID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9k Uk18TW92LCBzaW1kX290aGVyIH0sCiAgICAgWzB4MTQgLi4uIDB4MTVdID0geyBEc3RJbXBsaWNp dHxTcmNNZW18TW9kUk0sIHNpbWRfcGFja2VkX2ZwIH0sCkBAIC0yNzAsMTAgKzI4NiwxMCBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IHR3b2J5dGVfdGFibGUgewogICAgIFsweDE4IC4uLiAweDFmXSA9 IHsgSW1wbGljaXRPcHN8TW9kUk0gfSwKICAgICBbMHgyMCAuLi4gMHgyMV0gPSB7IERzdE1lbXxT cmNJbXBsaWNpdHxNb2RSTSB9LAogICAgIFsweDIyIC4uLiAweDIzXSA9IHsgRHN0SW1wbGljaXR8 U3JjTWVtfE1vZFJNIH0sCi0gICAgWzB4MjhdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18 TW92LCBzaW1kX3BhY2tlZF9mcCB9LAotICAgIFsweDI5XSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0 fE1vZFJNfE1vdiwgc2ltZF9wYWNrZWRfZnAgfSwKKyAgICBbMHgyOF0gPSB7IERzdEltcGxpY2l0 fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2ZwLCBkOHNfdmwgfSwKKyAgICBbMHgyOV0g PSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2ZwLCBkOHNfdmwg fSwKICAgICBbMHgyYV0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfb3Ro ZXIgfSwKLSAgICBbMHgyYl0gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YsIHNpbWRf YW55X2ZwIH0sCisgICAgWzB4MmJdID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9kUk18TW92LCBz aW1kX2FueV9mcCwgZDhzX3ZsIH0sCiAgICAgWzB4MmMgLi4uIDB4MmRdID0geyBEc3RJbXBsaWNp dHxTcmNNZW18TW9kUk18TW92LCBzaW1kX290aGVyIH0sCiAgICAgWzB4MmUgLi4uIDB4MmZdID0g eyBJbXBsaWNpdE9wc3xNb2RSTXxUd29PcCB9LAogICAgIFsweDMwIC4uLiAweDM1XSA9IHsgSW1w bGljaXRPcHMgfSwKQEAgLTI5Miw4ICszMDgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHR3b2J5 dGVfdGFibGUgewogICAgIFsweDYzIC4uLiAweDY3XSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1v ZFJNLCBzaW1kX3BhY2tlZF9pbnQgfSwKICAgICBbMHg2OCAuLi4gMHg2YV0gPSB7IERzdEltcGxp Y2l0fFNyY01lbXxNb2RSTSwgc2ltZF9vdGhlciB9LAogICAgIFsweDZiIC4uLiAweDZkXSA9IHsg RHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNLCBzaW1kX3BhY2tlZF9pbnQgfSwKLSAgICBbMHg2ZV0g PSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTXxNb3YgfSwKLSAgICBbMHg2Zl0gPSB7IERzdElt cGxpY2l0fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2ludCB9LAorICAgIFsweDZlXSA9 IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNfE1vdiwgc2ltZF9ub25lLCBkOHNfZHEgfSwKKyAg ICBbMHg2Zl0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2lu dCwgZDhzX3ZsIH0sCiAgICAgWzB4NzBdID0geyBTcmNJbW1CeXRlfE1vZFJNfFR3b09wLCBzaW1k X290aGVyIH0sCiAgICAgWzB4NzEgLi4uIDB4NzNdID0geyBEc3RJbXBsaWNpdHxTcmNJbW1CeXRl fE1vZFJNIH0sCiAgICAgWzB4NzQgLi4uIDB4NzZdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9k Uk0sIHNpbWRfcGFja2VkX2ludCB9LApAQCAtMzAxLDggKzMxNyw4IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgdHdvYnl0ZV90YWJsZSB7CiAgICAgWzB4NzhdID0geyBJbXBsaWNpdE9wc3xNb2RSTSB9 LAogICAgIFsweDc5XSA9IHsgRHN0UmVnfFNyY01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50IH0s CiAgICAgWzB4N2MgLi4uIDB4N2RdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNpbWRf b3RoZXIgfSwKLSAgICBbMHg3ZV0gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YgfSwK LSAgICBbMHg3Zl0gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YsIHNpbWRfcGFja2Vk X2ludCB9LAorICAgIFsweDdlXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2lt ZF9ub25lLCBkOHNfZHEgfSwKKyAgICBbMHg3Zl0gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RS TXxNb3YsIHNpbWRfcGFja2VkX2ludCwgZDhzX3ZsIH0sCiAgICAgWzB4ODAgLi4uIDB4OGZdID0g eyBEc3RJbXBsaWNpdHxTcmNJbW0gfSwKICAgICBbMHg5MCAuLi4gMHg5Zl0gPSB7IEJ5dGVPcHxE c3RNZW18U3JjTm9uZXxNb2RSTXxNb3YgfSwKICAgICBbMHhhMCAuLi4gMHhhMV0gPSB7IEltcGxp Y2l0T3BzfE1vdiB9LApAQCAtMzQ0LDE0ICszNjAsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0 d29ieXRlX3RhYmxlIHsKICAgICBbMHhkMF0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwg c2ltZF9vdGhlciB9LAogICAgIFsweGQxIC4uLiAweGQzXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVt fE1vZFJNLCBzaW1kX290aGVyIH0sCiAgICAgWzB4ZDQgLi4uIDB4ZDVdID0geyBEc3RJbXBsaWNp dHxTcmNNZW18TW9kUk0sIHNpbWRfcGFja2VkX2ludCB9LAotICAgIFsweGQ2XSA9IHsgRHN0TWVt fFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2ltZF9vdGhlciB9LAorICAgIFsweGQ2XSA9IHsgRHN0 TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2ltZF9vdGhlciwgMyB9LAogICAgIFsweGQ3XSA9 IHsgRHN0UmVnfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiB9LAogICAgIFsweGQ4IC4uLiAweGRmXSA9 IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNLCBzaW1kX3BhY2tlZF9pbnQgfSwKICAgICBbMHhl MF0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50IH0sCiAgICAg WzB4ZTEgLi4uIDB4ZTJdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNpbWRfb3RoZXIg fSwKICAgICBbMHhlMyAuLi4gMHhlNV0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwgc2lt ZF9wYWNrZWRfaW50IH0sCiAgICAgWzB4ZTZdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18 TW92LCBzaW1kX290aGVyIH0sCi0gICAgWzB4ZTddID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9k Uk18TW92LCBzaW1kX3BhY2tlZF9pbnQgfSwKKyAgICBbMHhlN10gPSB7IERzdE1lbXxTcmNJbXBs aWNpdHxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2ludCwgZDhzX3ZsIH0sCiAgICAgWzB4ZTggLi4u IDB4ZWZdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNpbWRfcGFja2VkX2ludCB9LAog ICAgIFsweGYwXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNfE1vdiwgc2ltZF9vdGhlciB9 LAogICAgIFsweGYxIC4uLiAweGYzXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNLCBzaW1k X290aGVyIH0sCkBAIC00MDYsNiArNDIyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBleHQwZjM4 X3RhYmxlIHsKICAgICB1aW50OF90IHRvX21lbToxOwogICAgIHVpbnQ4X3QgdHdvX29wOjE7CiAg ICAgdWludDhfdCB2c2liOjE7CisgICAgZGlzcDhzY2FsZV90IGQ4czo0OwogfSBleHQwZjM4X3Rh YmxlWzI1Nl0gPSB7CiAgICAgWzB4MDAgLi4uIDB4MGJdID0geyAuc2ltZF9zaXplID0gc2ltZF9w YWNrZWRfaW50IH0sCiAgICAgWzB4MGMgLi4uIDB4MGZdID0geyAuc2ltZF9zaXplID0gc2ltZF9w YWNrZWRfZnAgfSwKQEAgLTQxOCw3ICs0MzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV4dDBm MzhfdGFibGUgewogICAgIFsweDFjIC4uLiAweDFlXSA9IHsgLnNpbWRfc2l6ZSA9IHNpbWRfcGFj a2VkX2ludCwgLnR3b19vcCA9IDEgfSwKICAgICBbMHgyMCAuLi4gMHgyNV0gPSB7IC5zaW1kX3Np emUgPSBzaW1kX290aGVyLCAudHdvX29wID0gMSB9LAogICAgIFsweDI4IC4uLiAweDI5XSA9IHsg LnNpbWRfc2l6ZSA9IHNpbWRfcGFja2VkX2ludCB9LAotICAgIFsweDJhXSA9IHsgLnNpbWRfc2l6 ZSA9IHNpbWRfcGFja2VkX2ludCwgLnR3b19vcCA9IDEgfSwKKyAgICBbMHgyYV0gPSB7IC5zaW1k X3NpemUgPSBzaW1kX3BhY2tlZF9pbnQsIC50d29fb3AgPSAxLCAuZDhzID0gZDhzX3ZsIH0sCiAg ICAgWzB4MmJdID0geyAuc2ltZF9zaXplID0gc2ltZF9wYWNrZWRfaW50IH0sCiAgICAgWzB4MmMg Li4uIDB4MmRdID0geyAuc2ltZF9zaXplID0gc2ltZF9vdGhlciB9LAogICAgIFsweDJlIC4uLiAw eDJmXSA9IHsgLnNpbWRfc2l6ZSA9IHNpbWRfb3RoZXIsIC50b19tZW0gPSAxIH0sCkBAIC02NTYs NiArNjczLDIyIEBAIHVuaW9uIGV2ZXggewogICAgIH07CiB9OwogCisjZGVmaW5lIEVWRVhfUEZY X0JZVEVTIDQKKyNkZWZpbmUgaW5pdF9ldmV4KHN0dWIpICh7IFwKKyAgICB1aW50OF90ICpidWZf ID0gZ2V0X3N0dWIoc3R1Yik7IFwKKyAgICBidWZfWzBdID0gMHg2MjsgXAorICAgIGJ1Zl8gKyBF VkVYX1BGWF9CWVRFUzsgXAorfSkKKworI2RlZmluZSBjb3B5X0VWRVgocHRyLCBldmV4KSAoeyBc CisgICAgaWYgKCAhbW9kZV82NGJpdCgpICkgXAorICAgICAgICAoZXZleCkucmVnIHw9IDg7IFwK KyAgICAocHRyKVsxIC0gRVZFWF9QRlhfQllURVNdID0gKGV2ZXgpLnJhd1swXTsgXAorICAgIChw dHIpWzIgLSBFVkVYX1BGWF9CWVRFU10gPSAoZXZleCkucmF3WzFdOyBcCisgICAgKHB0cilbMyAt IEVWRVhfUEZYX0JZVEVTXSA9IChldmV4KS5yYXdbMl07IFwKKyAgICBjb250YWluZXJfb2YoKHB0 cikgKyAxIC0gRVZFWF9QRlhfQllURVMsIHR5cGVvZihldmV4KSwgcmF3WzBdKTsgXAorfSkKKwog I2RlZmluZSByZXBfcHJlZml4KCkgICAodmV4LnBmeCA+PSB2ZXhfZjMpCiAjZGVmaW5lIHJlcGVf cHJlZml4KCkgICh2ZXgucGZ4ID09IHZleF9mMykKICNkZWZpbmUgcmVwbmVfcHJlZml4KCkgKHZl eC5wZnggPT0gdmV4X2YyKQpAQCAtNzY4LDYgKzgwMSw3IEBAIHR5cGVkZWYgdW5pb24gewogICAg IHVpbnQ2NF90IG1teDsKICAgICB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikp KSB4bW1bMl07CiAgICAgdWludDY0X3QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSkgeW1t WzRdOworICAgIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDY0KSkpIHptbVs4XTsK IH0gbW12YWxfdDsKIAogLyoKQEAgLTExODMsNiArMTIxNywxMSBAQCBzdGF0aWMgaW50IF9nZXRf ZnB1KAogCiAgICAgc3dpdGNoICggdHlwZSApCiAgICAgeworICAgIGNhc2UgWDg2RU1VTF9GUFVf em1tOgorICAgICAgICBpZiAoICEoeGNyMCAmIFg4Nl9YQ1IwX1pNTSkgfHwgISh4Y3IwICYgWDg2 X1hDUjBfSElfWk1NKSB8fAorICAgICAgICAgICAgICEoeGNyMCAmIFg4Nl9YQ1IwX09QTUFTSykg KQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgICAgICAvKiBm YWxsIHRocm91Z2ggKi8KICAgICBjYXNlIFg4NkVNVUxfRlBVX3ltbToKICAgICAgICAgaWYgKCAh KHhjcjAgJiBYODZfWENSMF9TU0UpIHx8ICEoeGNyMCAmIFg4Nl9YQ1IwX1lNTSkgKQogICAgICAg ICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwpAQCAtMTc3Nyw2ICsxODE2LDcgQEAg c3RhdGljIGJvb2wgdmNwdV9oYXMoCiAjZGVmaW5lIHZjcHVfaGFzX2Nsd2IoKSAgICAgICAgdmNw dV9oYXMoICAgICAgICAgNywgRUJYLCAyNCwgY3R4dCwgb3BzKQogI2RlZmluZSB2Y3B1X2hhc19z aGEoKSAgICAgICAgIHZjcHVfaGFzKCAgICAgICAgIDcsIEVCWCwgMjksIGN0eHQsIG9wcykKICNk ZWZpbmUgdmNwdV9oYXNfYXZ4NTEyYncoKSAgICB2Y3B1X2hhcyggICAgICAgICA3LCBFQlgsIDMw LCBjdHh0LCBvcHMpCisjZGVmaW5lIHZjcHVfaGFzX2F2eDUxMnZsKCkgICAgdmNwdV9oYXMoICAg ICAgICAgNywgRUJYLCAzMSwgY3R4dCwgb3BzKQogI2RlZmluZSB2Y3B1X2hhc19yZHBpZCgpICAg ICAgIHZjcHVfaGFzKCAgICAgICAgIDcsIEVDWCwgMjIsIGN0eHQsIG9wcykKICNkZWZpbmUgdmNw dV9oYXNfY2x6ZXJvKCkgICAgICB2Y3B1X2hhcygweDgwMDAwMDA4LCBFQlgsICAwLCBjdHh0LCBv cHMpCiAKQEAgLTIxNTAsNiArMjE5MCw2MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyAqZGVjb2Rl X3ZleF9ncHIoCiAgICAgcmV0dXJuIGRlY29kZV9ncHIocmVncywgfnZleF9yZWcgJiAobW9kZV82 NGJpdCgpID8gMHhmIDogNykpOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGRlY29kZV9kaXNw OHNjYWxlKGVudW0gZGlzcDhzY2FsZSBzY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX3N0YXRlICpzdGF0ZSkKK3sKKyAg ICBzd2l0Y2ggKCBzY2FsZSApCisgICAgeworICAgIGNhc2UgZDhzX2J3OgorICAgICAgICByZXR1 cm4gc3RhdGUtPmV2ZXgudzsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICggc2NhbGUgPCBk OHNfdmwgKQorICAgICAgICAgICAgcmV0dXJuIHNjYWxlOworICAgICAgICBpZiAoIHN0YXRlLT5l dmV4LmJyICkKKyAgICAgICAgeworICAgIGNhc2UgZDhzX2RxOgorICAgICAgICAgICAgcmV0dXJu IDIgKyBzdGF0ZS0+ZXZleC53OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwor ICAgIHN3aXRjaCAoIHN0YXRlLT5zaW1kX3NpemUgKQorICAgIHsKKyAgICBjYXNlIHNpbWRfYW55 X2ZwOgorICAgIGNhc2Ugc2ltZF9zaW5nbGVfZnA6CisgICAgICAgIGlmICggIShzdGF0ZS0+ZXZl eC5wZnggJiBWRVhfUFJFRklYX1NDQUxBUl9NQVNLKSApCisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBzaW1kX3NjYWxhcl9vcGM6CisgICAg Y2FzZSBzaW1kX3NjYWxhcl92ZXh3OgorICAgICAgICByZXR1cm4gMiArIHN0YXRlLT5ldmV4Lnc7 CisKKyAgICBjYXNlIHNpbWRfMTI4OgorICAgICAgICAvKiBUaGVzZSBzaG91bGQgaGF2ZSBhbiBl eHBsaWNpdCBzaXplIHNwZWNpZmllZC4gKi8KKyAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7 CisgICAgICAgIHJldHVybiA0OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg fQorCisgICAgcmV0dXJuIDQgKyBzdGF0ZS0+ZXZleC5sciAtIChzY2FsZSAtIGQ4c192bCk7Cit9 CisKKyNkZWZpbmUgYXZ4NTEyX3ZsZW5fY2hlY2sobGlnKSBkbyB7IFwKKyAgICBzd2l0Y2ggKCBl dmV4LmxyICkgXAorICAgIHsgXAorICAgIGRlZmF1bHQ6IFwKKyAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uKEVYQ19VRCk7IFwKKyAgICBjYXNlIDI6IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICBj YXNlIDA6IGNhc2UgMTogXAorICAgICAgICBpZiAoIShsaWcpKSBcCisgICAgICAgICAgICBob3N0 X2FuZF92Y3B1X211c3RfaGF2ZShhdng1MTJ2bCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9 IFwKK30gd2hpbGUgKCBmYWxzZSApCisKIHN0YXRpYyBib29sIGlzX2FsaWduZWQoZW51bSB4ODZf c2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2ZmcywKICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHNpemUsIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCkBAIC0y Mzk5LDYgKzI0OTUsNyBAQCB4ODZfZGVjb2RlX3R3b2J5dGUoCiAgICAgICAgIGlmICggdmV4LnBm eCA9PSB2ZXhfZjMgKSAvKiBtb3ZxIHhtbS9tNjQseG1tICovCiAgICAgICAgIHsKICAgICBjYXNl IFg4NkVNVUxfT1BDX1ZFWF9GMygwLCAweDdlKTogLyogdm1vdnEgeG1tL202NCx4bW0gKi8KKyAg ICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfRjMoMCwgMHg3ZSk6IC8qIHZtb3ZxIHhtbS9tNjQseG1t ICovCiAgICAgICAgICAgICBzdGF0ZS0+ZGVzYyA9IERzdEltcGxpY2l0IHwgU3JjTWVtIHwgVHdv T3A7CiAgICAgICAgICAgICBzdGF0ZS0+c2ltZF9zaXplID0gc2ltZF9vdGhlcjsKICAgICAgICAg ICAgIC8qIEF2b2lkIHRoZSBzdGF0ZS0+ZGVzYyBjbG9iYmVyaW5nIG9mIFR3b09wIGJlbG93LiAq LwpAQCAtMjgzNCw2ICsyOTMxLDggQEAgeDg2X2RlY29kZSgKIAogICAgIGlmICggZCAmIE1vZFJN ICkKICAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBkaXNwOHNjYWxlID0gMDsKKwogICAgICAg ICBkICY9IH5Nb2RSTTsKICN1bmRlZiBNb2RSTSAvKiBPbmx5IGl0cyBhbGlhc2VzIGFyZSB2YWxp ZCB0byB1c2UgZnJvbSBoZXJlIG9uLiAqLwogICAgICAgICBtb2RybV9yZWcgPSAoKHJleF9wcmVm aXggJiA0KSA8PCAxKSB8ICgobW9kcm0gJiAweDM4KSA+PiAzKTsKQEAgLTI4NzYsNiArMjk3NSw5 IEBAIHg4Nl9kZWNvZGUoCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGV4dF8w ZjoKKyAgICAgICAgICAgIGlmICggZXZleF9lbmNvZGVkKCkgKQorICAgICAgICAgICAgICAgIGRp c3A4c2NhbGUgPSBkZWNvZGVfZGlzcDhzY2FsZSh0d29ieXRlX3RhYmxlW2JdLmQ4cywgc3RhdGUp OworCiAgICAgICAgICAgICBzd2l0Y2ggKCBiICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg IGNhc2UgMHgyMDogLyogbW92IGNyLHJlZyAqLwpAQCAtMjkwMCw2ICszMDAyLDggQEAgeDg2X2Rl Y29kZSgKICAgICAgICAgICAgIGlmICggZXh0MGYzOF90YWJsZVtiXS52c2liICkKICAgICAgICAg ICAgICAgICBkIHw9IHZTSUI7CiAgICAgICAgICAgICBzdGF0ZS0+c2ltZF9zaXplID0gZXh0MGYz OF90YWJsZVtiXS5zaW1kX3NpemU7CisgICAgICAgICAgICBpZiAoIGV2ZXhfZW5jb2RlZCgpICkK KyAgICAgICAgICAgICAgICBkaXNwOHNjYWxlID0gZGVjb2RlX2Rpc3A4c2NhbGUoZXh0MGYzOF90 YWJsZVtiXS5kOHMsIHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug ZXh0XzhmMDk6CkBAIC0yOTY4LDcgKzMwNzIsNyBAQCB4ODZfZGVjb2RlKAogICAgICAgICAgICAg ICAgICAgICBlYS5tZW0ub2ZmID0gaW5zbl9mZXRjaF90eXBlKGludDE2X3QpOwogICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGVhLm1l bS5vZmYgKz0gaW5zbl9mZXRjaF90eXBlKGludDhfdCk7CisgICAgICAgICAgICAgICAgZWEubWVt Lm9mZiArPSBpbnNuX2ZldGNoX3R5cGUoaW50OF90KSA8PCBkaXNwOHNjYWxlOwogICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgIGVhLm1l bS5vZmYgKz0gaW5zbl9mZXRjaF90eXBlKGludDE2X3QpOwpAQCAtMzAyNyw3ICszMTMxLDcgQEAg eDg2X2RlY29kZSgKICAgICAgICAgICAgICAgICBwY19yZWwgPSBtb2RlXzY0Yml0KCk7CiAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAg ZWEubWVtLm9mZiArPSBpbnNuX2ZldGNoX3R5cGUoaW50OF90KTsKKyAgICAgICAgICAgICAgICBl YS5tZW0ub2ZmICs9IGluc25fZmV0Y2hfdHlwZShpbnQ4X3QpIDw8IGRpc3A4c2NhbGU7CiAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAg ZWEubWVtLm9mZiArPSBpbnNuX2ZldGNoX3R5cGUoaW50MzJfdCk7CkBAIC0zMjI4LDEwICszMzMy LDExIEBAIHg4Nl9lbXVsYXRlKAogICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9zdGF0ZSBzdGF0ZTsK ICAgICBpbnQgcmM7CiAgICAgdWludDhfdCBiLCBkLCAqb3BjID0gTlVMTDsKLSAgICB1bnNpZ25l ZCBpbnQgZmlyc3RfYnl0ZSA9IDAsIGluc25fYnl0ZXMgPSAwOworICAgIHVuc2lnbmVkIGludCBm aXJzdF9ieXRlID0gMCwgZWxlbV9ieXRlcywgaW5zbl9ieXRlcyA9IDA7CisgICAgdWludDY0X3Qg b3BfbWFzayA9IH4wVUxMOwogICAgIGJvb2wgc2luZ2xlc3RlcCA9IChfcmVncy5lZmxhZ3MgJiBY ODZfRUZMQUdTX1RGKSAmJgogCSAgICAhaXNfYnJhbmNoX3N0ZXAoY3R4dCwgb3BzKTsKLSAgICBi b29sIHNmZW5jZSA9IGZhbHNlOworICAgIGJvb2wgc2ZlbmNlID0gZmFsc2UsIGZhdWx0X3N1cHBy ZXNzaW9uID0gZmFsc2U7CiAgICAgc3RydWN0IG9wZXJhbmQgc3JjID0geyAucmVnID0gUFRSX1BP SVNPTiB9OwogICAgIHN0cnVjdCBvcGVyYW5kIGRzdCA9IHsgLnJlZyA9IFBUUl9QT0lTT04gfTsK ICAgICB1bnNpZ25lZCBsb25nIGNyNDsKQEAgLTMyNzIsNiArMzM3Nyw3IEBAIHg4Nl9lbXVsYXRl KAogICAgIGIgPSBjdHh0LT5vcGNvZGU7CiAgICAgZCA9IHN0YXRlLmRlc2M7CiAjZGVmaW5lIHN0 YXRlICgmc3RhdGUpCisgICAgZWxlbV9ieXRlcyA9IDQgPDwgZXZleC53OwogCiAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKHN0YXRlLT5ub3RfNjRiaXQgJiYgbW9kZV82NGJpdCgpLCBFWENfVUQp OwogCkBAIC0zMzQ2LDYgKzM0NTIsMjggQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIGJyZWFrOwog ICAgIH0KIAorICAgIC8qIFdpdGggYSBtZW1vcnkgb3BlcmFuZCwgZmV0Y2ggdGhlIG1hc2sgcmVn aXN0ZXIgaW4gdXNlIChpZiBhbnkpLiAqLworICAgIGlmICggZWEudHlwZSA9PSBPUF9NRU0gJiYg ZXZleC5vcG1zayApCisgICAgeworICAgICAgICB1aW50OF90ICpzdGIgPSBnZXRfc3R1YihzdHVi KTsKKworICAgICAgICAvKiBLTU9We1csUX0gJWs8bj4sICglcmF4KSAqLworICAgICAgICBzdGJb MF0gPSAweGM0OworICAgICAgICBzdGJbMV0gPSAweGUxOworICAgICAgICBzdGJbMl0gPSBjcHVf aGFzX2F2eDUxMmJ3ID8gMHhmOCA6IDB4Nzg7CisgICAgICAgIHN0YlszXSA9IDB4OTE7CisgICAg ICAgIHN0Yls0XSA9IGV2ZXgub3Btc2sgPDwgMzsKKyAgICAgICAgaW5zbl9ieXRlcyA9IDU7Cisg ICAgICAgIHN0Yls1XSA9IDB4YzM7CisKKyAgICAgICAgaW52b2tlX3N0dWIoIiIsICIiLCAiK20i IChvcF9tYXNrKSA6ICJhIiAoJm9wX21hc2spKTsKKworICAgICAgICBpbnNuX2J5dGVzID0gMDsK KyAgICAgICAgcHV0X3N0dWIoc3R1Yik7CisKKyAgICAgICAgZmF1bHRfc3VwcHJlc3Npb24gPSB0 cnVlOworICAgIH0KKwogICAgIC8qIERlY29kZSAoYnV0IGRvbid0IGZldGNoKSB0aGUgZGVzdGlu YXRpb24gb3BlcmFuZDogcmVnaXN0ZXIgb3IgbWVtb3J5LiAqLwogICAgIHN3aXRjaCAoIGQgJiBE c3RNYXNrICkKICAgICB7CkBAIC01NzA4LDYgKzU4MzYsNDEgQEAgeDg2X2VtdWxhdGUoCiAgICAg ICAgIGluc25fYnl0ZXMgPSBQRlhfQllURVMgKyAyOwogICAgICAgICBicmVhazsKIAorICAgIENB U0VfU0lNRF9QQUNLRURfRlAoX0VWRVgsIDB4MGYsIDB4MmIpOiAvKiB2bW92bnRwe3MsZH0gW3h5 el1tbSxtZW0gKi8KKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1Bf TUVNIHx8IGV2ZXgub3Btc2ssIEVYQ19VRCk7CisgICAgICAgIHNmZW5jZSA9IHRydWU7CisgICAg ICAgIGZhdWx0X3N1cHByZXNzaW9uID0gZmFsc2U7CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAq LworICAgIENBU0VfU0lNRF9QQUNLRURfRlAoX0VWRVgsIDB4MGYsIDB4MTApOiAvKiB2bW92dXB7 cyxkfSBbeHl6XW1tL21lbSxbeHl6XW1te2t9ICovCisgICAgQ0FTRV9TSU1EX1NDQUxBUl9GUChf RVZFWCwgMHgwZiwgMHgxMCk6IC8qIHZtb3Zze3MsZH0gbWVtLHhtbXtrfSAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2bW92c3tzLGR9IHhtbSx4bW0s eG1te2t9ICovCisgICAgQ0FTRV9TSU1EX1BBQ0tFRF9GUChfRVZFWCwgMHgwZiwgMHgxMSk6IC8q IHZtb3Z1cHtzLGR9IFt4eXpdbW0sW3h5el1tbS9tZW17a30gKi8KKyAgICBDQVNFX1NJTURfU0NB TEFSX0ZQKF9FVkVYLCAweDBmLCAweDExKTogLyogdm1vdnN7cyxkfSB4bW0sbWVte2t9ICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZtb3Zze3MsZH0g eG1tLHhtbSx4bW17a30gKi8KKyAgICBDQVNFX1NJTURfUEFDS0VEX0ZQKF9FVkVYLCAweDBmLCAw eDI4KTogLyogdm1vdmFwe3MsZH0gW3h5el1tbS9tZW0sW3h5el1tbXtrfSAqLworICAgIENBU0Vf U0lNRF9QQUNLRURfRlAoX0VWRVgsIDB4MGYsIDB4MjkpOiAvKiB2bW92YXB7cyxkfSBbeHl6XW1t LFt4eXpdbW0vbWVte2t9ICovCisgICAgICAgIC8qIHZtb3Zze3MsZH0gdG8vZnJvbSBtZW1vcnkg aGF2ZSBvbmx5IHR3byBvcGVyYW5kcy4gKi8KKyAgICAgICAgaWYgKCAoYiAmIH4xKSA9PSAweDEw ICYmIGVhLnR5cGUgPT0gT1BfTUVNICkKKyAgICAgICAgICAgIGQgfD0gVHdvT3A7CisgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihldmV4LmJyLCBFWENfVUQpOworICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYoZXZleC53ICE9IChldmV4LnBmeCAmIFZFWF9QUkVGSVhfRE9VQkxFX01B U0spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VEKTsKKyAgICAgICAgaG9z dF9hbmRfdmNwdV9tdXN0X2hhdmUoYXZ4NTEyZik7CisgICAgICAgIGF2eDUxMl92bGVuX2NoZWNr KGV2ZXgucGZ4ICYgVkVYX1BSRUZJWF9TQ0FMQVJfTUFTSyk7CisgICAgc2ltZF96bW06CisgICAg ICAgIGdldF9mcHUoWDg2RU1VTF9GUFVfem1tKTsKKyAgICAgICAgb3BjID0gaW5pdF9ldmV4KHN0 dWIpOworICAgICAgICBvcGNbMF0gPSBiOworICAgICAgICBvcGNbMV0gPSBtb2RybTsKKyAgICAg ICAgaWYgKCBlYS50eXBlID09IE9QX01FTSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGNv bnZlcnQgbWVtb3J5IG9wZXJhbmQgdG8gKCVyQVgpICovCisgICAgICAgICAgICBldmV4LmIgPSAx OworICAgICAgICAgICAgb3BjWzFdICY9IDB4Mzg7CisgICAgICAgIH0KKyAgICAgICAgaW5zbl9i eXRlcyA9IEVWRVhfUEZYX0JZVEVTICsgMjsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFg4 NkVNVUxfT1BDXzY2KDB4MGYsIDB4MTIpOiAgICAgICAvKiBtb3ZscGQgbTY0LHhtbSAqLwogICAg IGNhc2UgWDg2RU1VTF9PUENfVkVYXzY2KDB4MGYsIDB4MTIpOiAgIC8qIHZtb3ZscGQgbTY0LHht bSx4bW0gKi8KICAgICBDQVNFX1NJTURfUEFDS0VEX0ZQKCwgMHgwZiwgMHgxMyk6ICAgICAvKiBt b3ZscHtzLGR9IHhtbSxtNjQgKi8KQEAgLTYzNDgsNiArNjUxMSw0MSBAQCB4ODZfZW11bGF0ZSgK ICAgICAgICAgQVNTRVJUKCFzdGF0ZS0+c2ltZF9zaXplKTsKICAgICAgICAgYnJlYWs7CiAKKyAg ICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfNjYoMHgwZiwgMHg2ZSk6IC8qIHZtb3Z7ZCxxfSByL20s eG1tICovCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYXzY2KDB4MGYsIDB4N2UpOiAvKiB2bW92 e2QscX0geG1tLHIvbSAqLworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKGV2ZXgubHIg fHwgZXZleC5vcG1zayB8fCBldmV4LmJyIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXZleC5yZWcgIT0gMHhmIHx8ICFldmV4LlJYKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVYQ19VRCk7CisgICAgICAgIGhvc3RfYW5kX3ZjcHVfbXVzdF9oYXZlKGF2eDUxMmYp OworICAgICAgICBnZXRfZnB1KFg4NkVNVUxfRlBVX3ptbSk7CisKKyAgICAgICAgb3BjID0gaW5p dF9ldmV4KHN0dWIpOworICAgICAgICBvcGNbMF0gPSBiOworICAgICAgICAvKiBDb252ZXJ0IG1l bW9yeS9HUFIgb3BlcmFuZCB0byAoJXJBWCkuICovCisgICAgICAgIGV2ZXguYiA9IDE7CisgICAg ICAgIGlmICggIW1vZGVfNjRiaXQoKSApCisgICAgICAgICAgICBldmV4LncgPSAwOworICAgICAg ICBvcGNbMV0gPSBtb2RybSAmIDB4Mzg7CisgICAgICAgIGluc25fYnl0ZXMgPSBFVkVYX1BGWF9C WVRFUyArIDI7CisgICAgICAgIG9wY1syXSA9IDB4YzM7CisKKyAgICAgICAgY29weV9FVkVYKG9w YywgZXZleCk7CisgICAgICAgIGludm9rZV9zdHViKCIiLCAiIiwgIittIiAoc3JjLnZhbCkgOiAi YSIgKCZzcmMudmFsKSk7CisgICAgICAgIGRzdC52YWwgPSBzcmMudmFsOworCisgICAgICAgIHB1 dF9zdHViKHN0dWIpOworICAgICAgICBBU1NFUlQoIXN0YXRlLT5zaW1kX3NpemUpOworICAgICAg ICBicmVhazsKKworICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF9GMygweDBmLCAweDdlKTogLyog dm1vdnEgeG1tL202NCx4bW0gKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfNjYoMHgwZiwg MHhkNik6IC8qIHZtb3ZxIHhtbSx4bW0vbTY0ICovCisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZihldmV4LmxyIHx8ICFldmV4LncgfHwgZXZleC5vcG1zayB8fCBldmV4LmJyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VEKTsKKyAgICAgICAgaG9zdF9hbmRfdmNwdV9t dXN0X2hhdmUoYXZ4NTEyZik7CisgICAgICAgIGQgfD0gVHdvT3A7CisgICAgICAgIG9wX2J5dGVz ID0gODsKKyAgICAgICAgZ290byBzaW1kX3ptbTsKKwogICAgIGNhc2UgWDg2RU1VTF9PUENfNjYo MHgwZiwgMHhlNyk6ICAgICAvKiBtb3ZudGRxIHhtbSxtMTI4ICovCiAgICAgY2FzZSBYODZFTVVM X09QQ19WRVhfNjYoMHgwZiwgMHhlNyk6IC8qIHZtb3ZudGRxIHt4LHl9bW0sbWVtICovCiAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwgRVhDX1VEKTsKQEAg LTYzNjgsNiArNjU2NiwzMCBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgIGdvdG8gc2ltZF8w Zl9hdng7CiAgICAgICAgIGdvdG8gc2ltZF8wZl9zc2UyOwogCisgICAgY2FzZSBYODZFTVVMX09Q Q19FVkVYXzY2KDB4MGYsIDB4ZTcpOiAvKiB2bW92bnRkcSBbeHl6XW1tLG1lbSAqLworICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9NRU0gfHwgZXZleC5vcG1zayB8 fCBldmV4LncsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQpOworICAgICAg ICBzZmVuY2UgPSB0cnVlOworICAgICAgICBmYXVsdF9zdXBwcmVzc2lvbiA9IGZhbHNlOworICAg ICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfNjYoMHgw ZiwgMHg2Zik6IC8qIHZtb3ZkcWF7MzIsNjR9IFt4eXpdbW0vbWVtLFt4eXpdbW17a30gKi8KKyAg ICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfRjMoMHgwZiwgMHg2Zik6IC8qIHZtb3ZkcXV7MzIsNjR9 IFt4eXpdbW0vbWVtLFt4eXpdbW17a30gKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfNjYo MHgwZiwgMHg3Zik6IC8qIHZtb3ZkcWF7MzIsNjR9IFt4eXpdbW0sW3h5el1tbS9tZW17a30gKi8K KyAgICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfRjMoMHgwZiwgMHg3Zik6IC8qIHZtb3ZkcXV7MzIs NjR9IFt4eXpdbW0sW3h5el1tbS9tZW17a30gKi8KKyAgICB2bW92ZHFhOgorICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYoZXZleC5iciwgRVhDX1VEKTsKKyAgICAgICAgaG9zdF9hbmRfdmNw dV9tdXN0X2hhdmUoYXZ4NTEyZik7CisgICAgICAgIGF2eDUxMl92bGVuX2NoZWNrKGZhbHNlKTsK KyAgICAgICAgZCB8PSBUd29PcDsKKyAgICAgICAgb3BfYnl0ZXMgPSAxNiA8PCBldmV4LmxyOwor ICAgICAgICBnb3RvIHNpbWRfem1tOworCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYX0YyKDB4 MGYsIDB4NmYpOiAvKiB2bW92ZHF1ezgsMTZ9IFt4eXpdbW0vbWVtLFt4eXpdbW17a30gKi8KKyAg ICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfRjIoMHgwZiwgMHg3Zik6IC8qIHZtb3ZkcXV7OCwxNn0g W3h5el1tbSxbeHl6XW1tL21lbXtrfSAqLworICAgICAgICBob3N0X2FuZF92Y3B1X211c3RfaGF2 ZShhdng1MTJidyk7CisgICAgICAgIGVsZW1fYnl0ZXMgPSAxIDw8IGV2ZXgudzsKKyAgICAgICAg Z290byB2bW92ZHFhOworCiAgICAgY2FzZSBYODZFTVVMX09QQ19WRVhfNjYoMHgwZiwgMHhkNik6 IC8qIHZtb3ZxIHhtbSx4bW0vbTY0ICovCiAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2 ZXgubCwgRVhDX1VEKTsKICAgICAgICAgZCB8PSBUd29PcDsKQEAgLTc3MzQsNiArNzk1NiwxNSBA QCB4ODZfZW11bGF0ZSgKICAgICAgICAgfQogICAgICAgICBnb3RvIG1vdmRxYTsKIAorICAgIGNh c2UgWDg2RU1VTF9PUENfRVZFWF82NigweDBmMzgsIDB4MmEpOiAvKiB2bW92bnRkcWEgbWVtLFt4 eXpdbW0gKi8KKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVN IHx8IGV2ZXgub3Btc2sgfHwgZXZleC53LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RVhDX1VEKTsKKyAgICAgICAgLyogSWdub3JlIHRoZSBub24tdGVtcG9yYWwgaGludCBmb3Igbm93 LCB1c2luZyB2bW92ZHFhMzIgaW5zdGVhZC4gKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlICggIm1m ZW5jZSIgOjo6ICJtZW1vcnkiICk7CisgICAgICAgIGIgPSAweDZmOworICAgICAgICBldmV4Lm9w Y3ggPSB2ZXhfMGY7CisgICAgICAgIGdvdG8gdm1vdmRxYTsKKwogICAgIGNhc2UgWDg2RU1VTF9P UENfVkVYXzY2KDB4MGYzOCwgMHgyYyk6IC8qIHZtYXNrbW92cHMgbWVtLHt4LHl9bW0se3gseX1t bSAqLwogICAgIGNhc2UgWDg2RU1VTF9PUENfVkVYXzY2KDB4MGYzOCwgMHgyZCk6IC8qIHZtYXNr bW92cGQgbWVtLHt4LHl9bW0se3gseX1tbSAqLwogICAgIGNhc2UgWDg2RU1VTF9PUENfVkVYXzY2 KDB4MGYzOCwgMHgyZSk6IC8qIHZtYXNrbW92cHMge3gseX1tbSx7eCx5fW1tLG1lbSAqLwpAQCAt ODc4NywxNyArOTAxOCwyNyBAQCB4ODZfZW11bGF0ZSgKICAgICBlbHNlIGlmICggc3RhdGUtPnNp bWRfc2l6ZSApCiAgICAgewogICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIW9wX2J5dGVz LCBFWENfVUQpOwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4Lm9wY3ggJiYgKGQg JiBUd29PcCkgJiYgdmV4LnJlZyAhPSAweGYsCisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9p ZigodmV4Lm9wY3ggJiYgKGQgJiBUd29PcCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodmV4LnJlZyAhPSAweGYgfHwgKGV2ZXhfZW5jb2RlZCgpICYmICFldmV4LlJYKSkpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VEKTsKIAogICAgICAgICBpZiAoICFv cGMgKQogICAgICAgICAgICAgQlVHKCk7Ci0gICAgICAgIG9wY1tpbnNuX2J5dGVzIC0gUEZYX0JZ VEVTXSA9IDB4YzM7Ci0gICAgICAgIGNvcHlfUkVYX1ZFWChvcGMsIHJleF9wcmVmaXgsIHZleCk7 CisgICAgICAgIGlmICggZXZleF9lbmNvZGVkKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBv cGNbaW5zbl9ieXRlcyAtIEVWRVhfUEZYX0JZVEVTXSA9IDB4YzM7CisgICAgICAgICAgICBjb3B5 X0VWRVgob3BjLCBldmV4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg ICAgICAgICAgIG9wY1tpbnNuX2J5dGVzIC0gUEZYX0JZVEVTXSA9IDB4YzM7CisgICAgICAgICAg ICBjb3B5X1JFWF9WRVgob3BjLCByZXhfcHJlZml4LCB2ZXgpOworICAgICAgICB9CiAKICAgICAg ICAgaWYgKCBlYS50eXBlID09IE9QX01FTSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHVpbnQz Ml90IG14Y3NyID0gMDsKKyAgICAgICAgICAgIHVpbnQ2NF90IGZ1bGwgPSAwOwogCiAgICAgICAg ICAgICBpZiAoIG9wX2J5dGVzIDwgMTYgfHwKICAgICAgICAgICAgICAgICAgKHZleC5vcGN4CkBA IC04ODE5LDYgKzkwNjAsNDQgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIWlzX2FsaWduZWQoZWEubWVtLnNlZywgZWEubWVtLm9mZiwgb3BfYnl0ZXMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dCwgb3Bz KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfR1AsIDApOworCisgICAg ICAgICAgICBpZiAoIGV2ZXguYnIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFT U0VSVCgoZCAmIERzdE1hc2spICE9IERzdE1lbSk7CisgICAgICAgICAgICAgICAgb3BfYnl0ZXMg PSBlbGVtX2J5dGVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBldmV4Lm9wbXNr ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIShvcF9ieXRlcyAlIGVs ZW1fYnl0ZXMpKTsKKyAgICAgICAgICAgICAgICBmdWxsID0gfjBVTEwgPj4gKDY0IC0gb3BfYnl0 ZXMgLyBlbGVtX2J5dGVzKTsKKyAgICAgICAgICAgICAgICBvcF9tYXNrICY9IGZ1bGw7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGZhdWx0X3N1cHByZXNzaW9uICkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoICFvcF9tYXNrICkKKyAgICAgICAgICAgICAgICAg ICAgZ290byBzaW1kX25vX21lbTsKKyAgICAgICAgICAgICAgICBpZiAoICFldmV4LmJyICkKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0X2J5dGUgPSBfX2J1aWx0 aW5fY3R6bGwob3BfbWFzayk7CisgICAgICAgICAgICAgICAgICAgIG9wX21hc2sgPj49IGZpcnN0 X2J5dGU7CisgICAgICAgICAgICAgICAgICAgIGZ1bGwgPj49IGZpcnN0X2J5dGU7CisgICAgICAg ICAgICAgICAgICAgIGZpcnN0X2J5dGUgKj0gZWxlbV9ieXRlczsKKyAgICAgICAgICAgICAgICAg ICAgb3BfYnl0ZXMgPSAoNjQgLSBfX2J1aWx0aW5fY2x6bGwob3BfbWFzaykpICogZWxlbV9ieXRl czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKgorICAg ICAgICAgICAgICogSW5kZXBlbmRlbnQgb2YgZmF1bHQgc3VwcHJlc3Npb24gd2UgbWF5IG5lZWQg dG8gcmVhZCAocGFydHMgb2YpCisgICAgICAgICAgICAgKiB0aGUgbWVtb3J5IG9wZXJhbmQgZm9y IHRoZSBwdXJwb3NlIG9mIG1lcmdpbmcgd2l0aG91dCBzcGxpdHRpbmcKKyAgICAgICAgICAgICAq IHRoZSB3cml0ZSBiZWxvdyBpbnRvIG11bHRpcGxlIG9uZXMuIE5vdGUgdGhhdCB0aGUgRVZFWC5a IGNoZWNrCisgICAgICAgICAgICAgKiBoZXJlIGlzbid0IHN0cmljdGx5IG5lZWRlZCwgZHVlIHRv IHRoZXJlIG5vdCBjdXJyZW50bHkgYmVpbmcKKyAgICAgICAgICAgICAqIGFueSBpbnN0cnVjdGlv bnMgYWxsb3dpbmcgemVyb2luZy1tZXJnaW5nIG9uIG1lbW9yeSB3cml0ZXMgKGFuZAorICAgICAg ICAgICAgICogd2UgcmFpc2UgI1VEIGR1cmluZyBEc3RNZW0gcHJvY2Vzc2luZyBmYXIgYWJvdmUg aW4gdGhpcyBjYXNlKSwKKyAgICAgICAgICAgICAqIHlldCBjb25jZXB0dWFsbHkgdGhlIHJlYWQg aXMgdGhlbiB1bm5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBl dmV4Lm9wbXNrICYmICFldmV4LnogJiYgKGQgJiBEc3RNYXNrKSA9PSBEc3RNZW0gJiYKKyAgICAg ICAgICAgICAgICAgb3BfbWFzayAhPSBmdWxsICkKKyAgICAgICAgICAgICAgICBkID0gKGQgJiB+ U3JjTWFzaykgfCBTcmNNZW07CisKICAgICAgICAgICAgIHN3aXRjaCAoIGQgJiBTcmNNYXNrICkK ICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgU3JjTWVtOgpAQCAtODg2NSw3ICs5MTQ0 LDEwIEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVs c2UKKyAgICAgICAgeworICAgICAgICBzaW1kX25vX21lbToKICAgICAgICAgICAgIGRzdC50eXBl ID0gT1BfTk9ORTsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIHssdn1tYXNrbW92e3EsZHF1fSwg YXMgYW4gZXhjZXB0aW9uLCB1c2VzIHJESS4gKi8KICAgICAgICAgaWYgKCBsaWtlbHkoKGN0eHQt Pm9wY29kZSAmIH4oWDg2RU1VTF9PUENfUEZYX01BU0sgfAotLS0gYS94ZW4vYXJjaC94ODYveDg2 X2VtdWxhdGUveDg2X2VtdWxhdGUuaAorKysgYi94ZW4vYXJjaC94ODYveDg2X2VtdWxhdGUveDg2 X2VtdWxhdGUuaApAQCAtMTcxLDYgKzE3MSw3IEBAIGVudW0geDg2X2VtdWxhdGVfZnB1X3R5cGUg ewogICAgIFg4NkVNVUxfRlBVX3htbSwgLyogU1NFIGluc3RydWN0aW9uIHNldCAoJXhtbTAtJXht bTcvMTUpICovCiAgICAgWDg2RU1VTF9GUFVfeW1tLCAvKiBBVlgvWE9QIGluc3RydWN0aW9uIHNl dCAoJXltbTAtJXltbTcvMTUpICovCiAgICAgWDg2RU1VTF9GUFVfb3BtYXNrLCAvKiBBVlg1MTIg b3BtYXNrIGluc3RydWN0aW9uIHNldCAoJWswLSVrNykgKi8KKyAgICBYODZFTVVMX0ZQVV96bW0s IC8qIEFWWDUxMiBpbnN0cnVjdGlvbiBzZXQgKCV6bW0wLSV6bW03LzMxKSAqLwogICAgIC8qIFRo aXMgc2VudGluZWwgd2lsbCBuZXZlciBiZSBwYXNzZWQgdG8gLT5nZXRfZnB1KCkuICovCiAgICAg WDg2RU1VTF9GUFVfbm9uZQogfTsKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJl LmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgKQEAgLTEwNSw2ICsxMDUs NyBAQAogI2RlZmluZSBjcHVfaGFzX3NtYXAgICAgICAgICAgICBib290X2NwdV9oYXMoWDg2X0ZF QVRVUkVfU01BUCkKICNkZWZpbmUgY3B1X2hhc19zaGEgICAgICAgICAgICAgYm9vdF9jcHVfaGFz KFg4Nl9GRUFUVVJFX1NIQSkKICNkZWZpbmUgY3B1X2hhc19hdng1MTJidyAgICAgICAgYm9vdF9j cHVfaGFzKFg4Nl9GRUFUVVJFX0FWWDUxMkJXKQorI2RlZmluZSBjcHVfaGFzX2F2eDUxMnZsICAg ICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYNTEyVkwpCiAKIC8qIENQVUlEIGxldmVs IDB4ODAwMDAwMDcuZWR4ICovCiAjZGVmaW5lIGNwdV9oYXNfaXRzYyAgICAgICAgICAgIGJvb3Rf Y3B1X2hhcyhYODZfRkVBVFVSRV9JVFNDKQoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp c3RpbmZvL3hlbi1kZXZlbA==