LyogRkNyeXB0IGVuY3J5cHRpb24gYWxnb3JpdGhtCiAqCiAqIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogQmFzZWQgb24gY29kZToKICoKICogQ29weXJpZ2h0IChjKSAxOTk1IC0gMjAwMCBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICoKICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogKgogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAqCiAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEluc3RpdHV0ZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQogKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNVQ0ggREFNQUdFLgogKi8KCiNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CgojZGVmaW5lIFJPVU5EUyAxNgoKc3RydWN0IGZjcnlwdF9jdHggewoJdTMyIHNjaGVkW1JPVU5EU107Cn07CgovKiBSb3RhdGUgcmlnaHQgdHdvIDMyIGJpdCBudW1iZXJzIGFzIGEgNTYgYml0IG51bWJlciAqLwojZGVmaW5lIHJvcjU2KGhpLCBsbywgbikJCQkJCVwKZG8gewkJCQkJCQkJXAoJdTMyIHQgPSBsbyAmICgoMSA8PCBuKSAtIDEpOwkJCQlcCglsbyA9IChsbyA+PiBuKSB8ICgoaGkgJiAoKDEgPDwgbikgLSAxKSkgPDwgKDMyIC0gbikpOwlcCgloaSA9IChoaSA+PiBuKSB8ICh0IDw8ICgyNC1uKSk7CQkJCVwKfSB3aGlsZSgwKQoKLyogUm90YXRlIHJpZ2h0IG9uZSA2NCBiaXQgbnVtYmVyIGFzIGEgNTYgYml0IG51bWJlciAqLwojZGVmaW5lIHJvcjU2XzY0KGssIG4pCQkJCQkJXApkbyB7CQkJCQkJCQlcCglrID0gKGsgPj4gbikgfCAoKGsgJiAoKDEgPDwgbikgLSAxKSkgPDwgKDU2IC0gbikpOwlcCn0gd2hpbGUoMCkKCi8qCiAqIFNib3hlcyBmb3IgRmVpc3RlbCBuZXR3b3JrIGRlcml2ZWQgZnJvbQogKiAvYWZzL3RyYW5zYXJjLmNvbS9wdWJsaWMvYWZzcHMvYWZzLnJlbDMxYi5leHBvcnQtc3JjL3J4a2FkL3Nib3hlcy5oCiAqLwojdW5kZWYgWgojZGVmaW5lIFooeCkgX19jb25zdGFudF9iZTMyX3RvX2NwdSh4IDw8IDMpCnN0YXRpYyBjb25zdCB1MzIgc2JveDBbMjU2XSA9IHsKCVooMHhlYSksIFooMHg3ZiksIFooMHhiMiksIFooMHg2NCksIFooMHg5ZCksIFooMHhiMCksIFooMHhkOSksIFooMHgxMSksCglaKDB4Y2QpLCBaKDB4ODYpLCBaKDB4ODYpLCBaKDB4OTEpLCBaKDB4MGEpLCBaKDB4YjIpLCBaKDB4OTMpLCBaKDB4MDYpLAoJWigweDBlKSwgWigweDA2KSwgWigweGQyKSwgWigweDY1KSwgWigweDczKSwgWigweGM1KSwgWigweDI4KSwgWigweDYwKSwKCVooMHhmMiksIFooMHgyMCksIFooMHhiNSksIFooMHgzOCksIFooMHg3ZSksIFooMHhkYSksIFooMHg5ZiksIFooMHhlMyksCglaKDB4ZDIpLCBaKDB4Y2YpLCBaKDB4YzQpLCBaKDB4M2MpLCBaKDB4NjEpLCBaKDB4ZmYpLCBaKDB4NGEpLCBaKDB4NGEpLAoJWigweDM1KSwgWigweGFjKSwgWigweGFhKSwgWigweDVmKSwgWigweDJiKSwgWigweGJiKSwgWigweGJjKSwgWigweDUzKSwKCVooMHg0ZSksIFooMHg5ZCksIFooMHg3OCksIFooMHhhMyksIFooMHhkYyksIFooMHgwOSksIFooMHgzMiksIFooMHgxMCksCglaKDB4YzYpLCBaKDB4NmYpLCBaKDB4NjYpLCBaKDB4ZDYpLCBaKDB4YWIpLCBaKDB4YTkpLCBaKDB4YWYpLCBaKDB4ZmQpLAoJWigweDNiKSwgWigweDk1KSwgWigweGU4KSwgWigweDM0KSwgWigweDlhKSwgWigweDgxKSwgWigweDcyKSwgWigweDgwKSwKCVooMHg5YyksIFooMHhmMyksIFooMHhlYyksIFooMHhkYSksIFooMHg5ZiksIFooMHgyNiksIFooMHg3NiksIFooMHgxNSksCglaKDB4M2UpLCBaKDB4NTUpLCBaKDB4NGQpLCBaKDB4ZGUpLCBaKDB4ODQpLCBaKDB4ZWUpLCBaKDB4YWQpLCBaKDB4YzcpLAoJWigweGYxKSwgWigweDZiKSwgWigweDNkKSwgWigweGQzKSwgWigweDA0KSwgWigweDQ5KSwgWigweGFhKSwgWigweDI0KSwKCVooMHgwYiksIFooMHg4YSksIFooMHg4MyksIFooMHhiYSksIFooMHhmYSksIFooMHg4NSksIFooMHhhMCksIFooMHhhOCksCglaKDB4YjEpLCBaKDB4ZDQpLCBaKDB4MDEpLCBaKDB4ZDgpLCBaKDB4NzApLCBaKDB4NjQpLCBaKDB4ZjApLCBaKDB4NTEpLAoJWigweGQyKSwgWigweGMzKSwgWigweGE3KSwgWigweDc1KSwgWigweDhjKSwgWigweGE1KSwgWigweDY0KSwgWigweGVmKSwKCVooMHgxMCksIFooMHg0ZSksIFooMHhiNyksIFooMHhjNiksIFooMHg2MSksIFooMHgwMyksIFooMHhlYiksIFooMHg0NCksCglaKDB4M2QpLCBaKDB4ZTUpLCBaKDB4YjMpLCBaKDB4NWIpLCBaKDB4YWUpLCBaKDB4ZDUpLCBaKDB4YWQpLCBaKDB4MWQpLAoJWigweGZhKSwgWigweDVhKSwgWigweDFlKSwgWigweDMzKSwgWigweGFiKSwgWigweDkzKSwgWigweGEyKSwgWigweGI3KSwKCVooMHhlNyksIFooMHhhOCksIFooMHg0NSksIFooMHhhNCksIFooMHhjZCksIFooMHgyOSksIFooMHg2MyksIFooMHg0NCksCglaKDB4YjYpLCBaKDB4NjkpLCBaKDB4N2UpLCBaKDB4MmUpLCBaKDB4NjIpLCBaKDB4MDMpLCBaKDB4YzgpLCBaKDB4ZTApLAoJWigweDE3KSwgWigweGJiKSwgWigweGM3KSwgWigweGYzKSwgWigweDNmKSwgWigweDM2KSwgWigweGJhKSwgWigweDcxKSwKCVooMHg4ZSksIFooMHg5NyksIFooMHg2NSksIFooMHg2MCksIFooMHg2OSksIFooMHhiNiksIFooMHhmNiksIFooMHhlNiksCglaKDB4NmUpLCBaKDB4ZTApLCBaKDB4ODEpLCBaKDB4NTkpLCBaKDB4ZTgpLCBaKDB4YWYpLCBaKDB4ZGQpLCBaKDB4OTUpLAoJWigweDIyKSwgWigweDk5KSwgWigweGZkKSwgWigweDYzKSwgWigweDE5KSwgWigweDc0KSwgWigweDYxKSwgWigweGIxKSwKCVooMHhiNiksIFooMHg1YiksIFooMHhhZSksIFooMHg1NCksIFooMHhiMyksIFooMHg3MCksIFooMHhmZiksIFooMHhjNiksCglaKDB4M2IpLCBaKDB4M2UpLCBaKDB4YzEpLCBaKDB4ZDcpLCBaKDB4ZTEpLCBaKDB4MGUpLCBaKDB4NzYpLCBaKDB4ZTUpLAoJWigweDM2KSwgWigweDRmKSwgWigweDU5KSwgWigweGM3KSwgWigweDA4KSwgWigweDZlKSwgWigweDgyKSwgWigweGE2KSwKCVooMHg5MyksIFooMHhjNCksIFooMHhhYSksIFooMHgyNiksIFooMHg0OSksIFooMHhlMCksIFooMHgyMSksIFooMHg2NCksCglaKDB4MDcpLCBaKDB4OWYpLCBaKDB4NjQpLCBaKDB4ODEpLCBaKDB4OWMpLCBaKDB4YmYpLCBaKDB4ZjkpLCBaKDB4ZDEpLAoJWigweDQzKSwgWigweGY4KSwgWigweGI2KSwgWigweGI5KSwgWigweGYxKSwgWigweDI0KSwgWigweDc1KSwgWigweDAzKSwKCVooMHhlNCksIFooMHhiMCksIFooMHg5OSksIFooMHg0NiksIFooMHgzZCksIFooMHhmNSksIFooMHhkMSksIFooMHgzOSksCglaKDB4NzIpLCBaKDB4MTIpLCBaKDB4ZjYpLCBaKDB4YmEpLCBaKDB4MGMpLCBaKDB4MGQpLCBaKDB4NDIpLCBaKDB4MmUpCn07CgojdW5kZWYgWgojZGVmaW5lIFooeCkgX19jb25zdGFudF9iZTMyX3RvX2NwdSgoeCA8PCAyNykgfCAoeCA+PiA1KSkKc3RhdGljIGNvbnN0IHUzMiBzYm94MVsyNTZdID0gewoJWigweDc3KSwgWigweDE0KSwgWigweGE2KSwgWigweGZlKSwgWigweGIyKSwgWigweDVlKSwgWigweDhjKSwgWigweDNlKSwKCVooMHg2NyksIFooMHg2YyksIFooMHhhMSksIFooMHgwZCksIFooMHhjMiksIFooMHhhMiksIFooMHhjMSksIFooMHg4NSksCglaKDB4NmMpLCBaKDB4N2IpLCBaKDB4NjcpLCBaKDB4YzYpLCBaKDB4MjMpLCBaKDB4ZTMpLCBaKDB4ZjIpLCBaKDB4ODkpLAoJWigweDUwKSwgWigweDljKSwgWigweDAzKSwgWigweGI3KSwgWigweDczKSwgWigweGU2KSwgWigweGUxKSwgWigweDM5KSwKCVooMHgzMSksIFooMHgyYyksIFooMHgyNyksIFooMHg5ZiksIFooMHhhNSksIFooMHg2OSksIFooMHg0NCksIFooMHhkNiksCglaKDB4MjMpLCBaKDB4ODMpLCBaKDB4OTgpLCBaKDB4N2QpLCBaKDB4M2MpLCBaKDB4YjQpLCBaKDB4MmQpLCBaKDB4OTkpLAoJWigweDFjKSwgWigweDFmKSwgWigweDhjKSwgWigweDIwKSwgWigweDAzKSwgWigweDdjKSwgWigweDVmKSwgWigweGFkKSwKCVooMHhmNCksIFooMHhmYSksIFooMHg5NSksIFooMHhjYSksIFooMHg3NiksIFooMHg0NCksIFooMHhjZCksIFooMHhiNiksCglaKDB4YjgpLCBaKDB4YTEpLCBaKDB4YTEpLCBaKDB4YmUpLCBaKDB4OWUpLCBaKDB4NTQpLCBaKDB4OGYpLCBaKDB4MGIpLAoJWigweDE2KSwgWigweDc0KSwgWigweDMxKSwgWigweDhhKSwgWigweDIzKSwgWigweDE3KSwgWigweDA0KSwgWigweGZhKSwKCVooMHg3OSksIFooMHg4NCksIFooMHhiMSksIFooMHhmNSksIFooMHgxMyksIFooMHhhYiksIFooMHhiNSksIFooMHgyZSksCglaKDB4YWEpLCBaKDB4MGMpLCBaKDB4NjApLCBaKDB4NmIpLCBaKDB4NWIpLCBaKDB4YzQpLCBaKDB4NGIpLCBaKDB4YmMpLAoJWigweGUyKSwgWigweGFmKSwgWigweDQ1KSwgWigweDczKSwgWigweGZhKSwgWigweGM5KSwgWigweDQ5KSwgWigweGNkKSwKCVooMHgwMCksIFooMHg5MiksIFooMHg3ZCksIFooMHg5NyksIFooMHg3YSksIFooMHgxOCksIFooMHg2MCksIFooMHgzZCksCglaKDB4Y2YpLCBaKDB4NWIpLCBaKDB4ZGUpLCBaKDB4YzYpLCBaKDB4ZTIpLCBaKDB4ZTYpLCBaKDB4YmIpLCBaKDB4OGIpLAoJWigweDA2KSwgWigweGRhKSwgWigweDA4KSwgWigweDE1KSwgWigweDFiKSwgWigweDg4KSwgWigweDZhKSwgWigweDE3KSwKCVooMHg4OSksIFooMHhkMCksIFooMHhhOSksIFooMHhjMSksIFooMHhjOSksIFooMHg3MCksIFooMHg2YiksIFooMHhlNSksCglaKDB4NDMpLCBaKDB4ZjQpLCBaKDB4NjgpLCBaKDB4YzgpLCBaKDB4ZDMpLCBaKDB4ODQpLCBaKDB4MjgpLCBaKDB4MGEpLAoJWigweDUyKSwgWigweDY2KSwgWigweGEzKSwgWigweGNhKSwgWigweGYyKSwgWigweGUzKSwgWigweDdmKSwgWigweDdhKSwKCVooMHgzMSksIFooMHhmNyksIFooMHg4OCksIFooMHg5NCksIFooMHg1ZSksIFooMHg5YyksIFooMHg2MyksIFooMHhkNSksCglaKDB4MjQpLCBaKDB4NjYpLCBaKDB4ZmMpLCBaKDB4YjMpLCBaKDB4NTcpLCBaKDB4MjUpLCBaKDB4YmUpLCBaKDB4ODkpLAoJWigweDQ0KSwgWigweGM0KSwgWigweGUwKSwgWigweDhmKSwgWigweDIzKSwgWigweDNjKSwgWigweDEyKSwgWigweDUyKSwKCVooMHhmNSksIFooMHgxZSksIFooMHhmNCksIFooMHhjYiksIFooMHgxOCksIFooMHgzMyksIFooMHgxZiksIFooMHhmOCksCglaKDB4NjkpLCBaKDB4MTApLCBaKDB4OWQpLCBaKDB4ZDMpLCBaKDB4ZjcpLCBaKDB4MjgpLCBaKDB4ZjgpLCBaKDB4MzApLAoJWigweDA1KSwgWigweDVlKSwgWigweDMyKSwgWigweGMwKSwgWigweGQ1KSwgWigweDE5KSwgWigweGJkKSwgWigweDQ1KSwKCVooMHg4YiksIFooMHg1YiksIFooMHhmZCksIFooMHhiYyksIFooMHhlMiksIFooMHg1YyksIFooMHhhOSksIFooMHg5NiksCglaKDB4ZWYpLCBaKDB4NzApLCBaKDB4Y2YpLCBaKDB4YzIpLCBaKDB4MmEpLCBaKDB4YjMpLCBaKDB4NjEpLCBaKDB4YWQpLAoJWigweDgwKSwgWigweDQ4KSwgWigweDgxKSwgWigweGI3KSwgWigweDFkKSwgWigweDQzKSwgWigweGQ5KSwgWigweGQ3KSwKCVooMHg0NSksIFooMHhmMCksIFooMHhkOCksIFooMHg4YSksIFooMHg1OSksIFooMHg3YyksIFooMHg1NyksIFooMHhjMSksCglaKDB4NzkpLCBaKDB4YzcpLCBaKDB4MzQpLCBaKDB4ZDYpLCBaKDB4NDMpLCBaKDB4ZGYpLCBaKDB4ZTQpLCBaKDB4NzgpLAoJWigweDE2KSwgWigweDA2KSwgWigweGRhKSwgWigweDkyKSwgWigweDc2KSwgWigweDUxKSwgWigweGUxKSwgWigweGQ0KSwKCVooMHg3MCksIFooMHgwMyksIFooMHhlMCksIFooMHgyZiksIFooMHg5NiksIFooMHg5MSksIFooMHg4MiksIFooMHg4MCkKfTsKCiN1bmRlZiBaCiNkZWZpbmUgWih4KSBfX2NvbnN0YW50X2JlMzJfdG9fY3B1KHggPDwgMTEpCnN0YXRpYyBjb25zdCB1MzIgc2JveDJbMjU2XSA9IHsKCVooMHhmMCksIFooMHgzNyksIFooMHgyNCksIFooMHg1MyksIFooMHgyYSksIFooMHgwMyksIFooMHg4MyksIFooMHg4NiksCglaKDB4ZDEpLCBaKDB4ZWMpLCBaKDB4NTApLCBaKDB4ZjApLCBaKDB4NDIpLCBaKDB4NzgpLCBaKDB4MmYpLCBaKDB4NmQpLAoJWigweGJmKSwgWigweDgwKSwgWigweDg3KSwgWigweDI3KSwgWigweDk1KSwgWigweGUyKSwgWigweGM1KSwgWigweDVkKSwKCVooMHhmOSksIFooMHg2ZiksIFooMHhkYiksIFooMHhiNCksIFooMHg2NSksIFooMHg2ZSksIFooMHhlNyksIFooMHgyNCksCglaKDB4YzgpLCBaKDB4MWEpLCBaKDB4YmIpLCBaKDB4NDkpLCBaKDB4YjUpLCBaKDB4MGEpLCBaKDB4N2QpLCBaKDB4YjkpLAoJWigweGU4KSwgWigweGRjKSwgWigweGI3KSwgWigweGQ5KSwgWigweDQ1KSwgWigweDIwKSwgWigweDFiKSwgWigweGNlKSwKCVooMHg1OSksIFooMHg5ZCksIFooMHg2YiksIFooMHhiZCksIFooMHgwZSksIFooMHg4ZiksIFooMHhhMyksIFooMHhhOSksCglaKDB4YmMpLCBaKDB4NzQpLCBaKDB4YTYpLCBaKDB4ZjYpLCBaKDB4N2YpLCBaKDB4NWYpLCBaKDB4YjEpLCBaKDB4NjgpLAoJWigweDg0KSwgWigweGJjKSwgWigweGE5KSwgWigweGZkKSwgWigweDU1KSwgWigweDUwKSwgWigweGU5KSwgWigweGI2KSwKCVooMHgxMyksIFooMHg1ZSksIFooMHgwNyksIFooMHhiOCksIFooMHg5NSksIFooMHgwMiksIFooMHhjMCksIFooMHhkMCksCglaKDB4NmEpLCBaKDB4MWEpLCBaKDB4ODUpLCBaKDB4YmQpLCBaKDB4YjYpLCBaKDB4ZmQpLCBaKDB4ZmUpLCBaKDB4MTcpLAoJWigweDNmKSwgWigweDA5KSwgWigweGEzKSwgWigweDhkKSwgWigweGZiKSwgWigweGVkKSwgWigweGRhKSwgWigweDFkKSwKCVooMHg2ZCksIFooMHgxYyksIFooMHg2YyksIFooMHgwMSksIFooMHg1YSksIFooMHhlNSksIFooMHg3MSksIFooMHgzZSksCglaKDB4OGIpLCBaKDB4NmIpLCBaKDB4YmUpLCBaKDB4MjkpLCBaKDB4ZWIpLCBaKDB4MTIpLCBaKDB4MTkpLCBaKDB4MzQpLAoJWigweGNkKSwgWigweGIzKSwgWigweGJkKSwgWigweDM1KSwgWigweGVhKSwgWigweDRiKSwgWigweGQ1KSwgWigweGFlKSwKCVooMHgyYSksIFooMHg3OSksIFooMHg1YSksIFooMHhhNSksIFooMHgzMiksIFooMHgxMiksIFooMHg3YiksIFooMHhkYyksCglaKDB4MmMpLCBaKDB4ZDApLCBaKDB4MjIpLCBaKDB4NGIpLCBaKDB4YjEpLCBaKDB4ODUpLCBaKDB4NTkpLCBaKDB4ODApLAoJWigweGMwKSwgWigweDMwKSwgWigweDlmKSwgWigweDczKSwgWigweGQzKSwgWigweDE0KSwgWigweDQ4KSwgWigweDQwKSwKCVooMHgwNyksIFooMHgyZCksIFooMHg4ZiksIFooMHg4MCksIFooMHgwZiksIFooMHhjZSksIFooMHgwYiksIFooMHg1ZSksCglaKDB4YjcpLCBaKDB4NWUpLCBaKDB4YWMpLCBaKDB4MjQpLCBaKDB4OTQpLCBaKDB4NGEpLCBaKDB4MTgpLCBaKDB4MTUpLAoJWigweDA1KSwgWigweGU4KSwgWigweDAyKSwgWigweDc3KSwgWigweGE5KSwgWigweGM3KSwgWigweDQwKSwgWigweDQ1KSwKCVooMHg4OSksIFooMHhkMSksIFooMHhlYSksIFooMHhkZSksIFooMHgwYyksIFooMHg3OSksIFooMHgyYSksIFooMHg5OSksCglaKDB4NmMpLCBaKDB4M2UpLCBaKDB4OTUpLCBaKDB4ZGQpLCBaKDB4OGMpLCBaKDB4N2QpLCBaKDB4YWQpLCBaKDB4NmYpLAoJWigweGRjKSwgWigweGZmKSwgWigweGZkKSwgWigweDYyKSwgWigweDQ3KSwgWigweGIzKSwgWigweDIxKSwgWigweDhhKSwKCVooMHhlYyksIFooMHg4ZSksIFooMHgxOSksIFooMHgxOCksIFooMHhiNCksIFooMHg2ZSksIFooMHgzZCksIFooMHhmZCksCglaKDB4NzQpLCBaKDB4NTQpLCBaKDB4MWUpLCBaKDB4MDQpLCBaKDB4ODUpLCBaKDB4ZDgpLCBaKDB4YmMpLCBaKDB4MWYpLAoJWigweDU2KSwgWigweGU3KSwgWigweDNhKSwgWigweDU2KSwgWigweDY3KSwgWigweGQ2KSwgWigweGM4KSwgWigweGE1KSwKCVooMHhmMyksIFooMHg4ZSksIFooMHhkZSksIFooMHhhZSksIFooMHgzNyksIFooMHg0OSksIFooMHhiNyksIFooMHhmYSksCglaKDB4YzgpLCBaKDB4ZjQpLCBaKDB4MWYpLCBaKDB4ZTApLCBaKDB4MmEpLCBaKDB4OWIpLCBaKDB4MTUpLCBaKDB4ZDEpLAoJWigweDM0KSwgWigweDBlKSwgWigweGI1KSwgWigweGUwKSwgWigweDQ0KSwgWigweDc4KSwgWigweDg0KSwgWigweDU5KSwKCVooMHg1NiksIFooMHg2OCksIFooMHg3NyksIFooMHhhNSksIFooMHgxNCksIFooMHgwNiksIFooMHhmNSksIFooMHgyZiksCglaKDB4OGMpLCBaKDB4OGEpLCBaKDB4NzMpLCBaKDB4ODApLCBaKDB4NzYpLCBaKDB4YjQpLCBaKDB4MTApLCBaKDB4ODYpCn07CgojdW5kZWYgWgojZGVmaW5lIFooeCkgX19jb25zdGFudF9iZTMyX3RvX2NwdSh4IDw8IDE5KQpzdGF0aWMgY29uc3QgdTMyIHNib3gzWzI1Nl0gPSB7CglaKDB4YTkpLCBaKDB4MmEpLCBaKDB4NDgpLCBaKDB4NTEpLCBaKDB4ODQpLCBaKDB4N2UpLCBaKDB4NDkpLCBaKDB4ZTIpLAoJWigweGI1KSwgWigweGI3KSwgWigweDQyKSwgWigweDMzKSwgWigweDdkKSwgWigweDVkKSwgWigweGE2KSwgWigweDEyKSwKCVooMHg0NCksIFooMHg0OCksIFooMHg2ZCksIFooMHgyOCksIFooMHhhYSksIFooMHgyMCksIFooMHg2ZCksIFooMHg1NyksCglaKDB4ZDYpLCBaKDB4NmIpLCBaKDB4NWQpLCBaKDB4NzIpLCBaKDB4ZjApLCBaKDB4OTIpLCBaKDB4NWEpLCBaKDB4MWIpLAoJWigweDUzKSwgWigweDgwKSwgWigweDI0KSwgWigweDcwKSwgWigweDlhKSwgWigweGNjKSwgWigweGE3KSwgWigweDY2KSwKCVooMHhhMSksIFooMHgwMSksIFooMHhhNSksIFooMHg0MSksIFooMHg5NyksIFooMHg0MSksIFooMHgzMSksIFooMHg4MiksCglaKDB4ZjEpLCBaKDB4MTQpLCBaKDB4Y2YpLCBaKDB4NTMpLCBaKDB4MGQpLCBaKDB4YTApLCBaKDB4MTApLCBaKDB4Y2MpLAoJWigweDJhKSwgWigweDdkKSwgWigweGQyKSwgWigweGJmKSwgWigweDRiKSwgWigweDFhKSwgWigweGRiKSwgWigweDE2KSwKCVooMHg0NyksIFooMHhmNiksIFooMHg1MSksIFooMHgzNiksIFooMHhlZCksIFooMHhmMyksIFooMHhiOSksIFooMHgxYSksCglaKDB4YTcpLCBaKDB4ZGYpLCBaKDB4MjkpLCBaKDB4NDMpLCBaKDB4MDEpLCBaKDB4NTQpLCBaKDB4NzApLCBaKDB4YTQpLAoJWigweGJmKSwgWigweGQ0KSwgWigweDBiKSwgWigweDUzKSwgWigweDQ0KSwgWigweDYwKSwgWigweDllKSwgWigweDIzKSwKCVooMHhhMSksIFooMHgxOCksIFooMHg2OCksIFooMHg0ZiksIFooMHhmMCksIFooMHgyZiksIFooMHg4MiksIFooMHhjMiksCglaKDB4MmEpLCBaKDB4NDEpLCBaKDB4YjIpLCBaKDB4NDIpLCBaKDB4MGMpLCBaKDB4ZWQpLCBaKDB4MGMpLCBaKDB4MWQpLAoJWigweDEzKSwgWigweDNhKSwgWigweDNjKSwgWigweDZlKSwgWigweDM1KSwgWigweGRjKSwgWigweDYwKSwgWigweDY1KSwKCVooMHg4NSksIFooMHhlOSksIFooMHg2NCksIFooMHgwMiksIFooMHg5YSksIFooMHgzZiksIFooMHg5ZiksIFooMHg4NyksCglaKDB4OTYpLCBaKDB4ZGYpLCBaKDB4YmUpLCBaKDB4ZjIpLCBaKDB4Y2IpLCBaKDB4ZTUpLCBaKDB4NmMpLCBaKDB4ZDQpLAoJWigweDVhKSwgWigweDgzKSwgWigweGJmKSwgWigweDkyKSwgWigweDFiKSwgWigweDk0KSwgWigweDAwKSwgWigweDQyKSwKCVooMHhjZiksIFooMHg0YiksIFooMHgwMCksIFooMHg3NSksIFooMHhiYSksIFooMHg4ZiksIFooMHg3NiksIFooMHg1ZiksCglaKDB4NWQpLCBaKDB4M2EpLCBaKDB4NGQpLCBaKDB4MDkpLCBaKDB4MTIpLCBaKDB4MDgpLCBaKDB4MzgpLCBaKDB4OTUpLAoJWigweDE3KSwgWigweGU0KSwgWigweDAxKSwgWigweDFkKSwgWigweDRjKSwgWigweGE5KSwgWigweGNjKSwgWigweDg1KSwKCVooMHg4MiksIFooMHg0YyksIFooMHg5ZCksIFooMHgyZiksIFooMHgzYiksIFooMHg2NiksIFooMHhhMSksIFooMHgzNCksCglaKDB4MTApLCBaKDB4Y2QpLCBaKDB4NTkpLCBaKDB4ODkpLCBaKDB4YTUpLCBaKDB4MzEpLCBaKDB4Y2YpLCBaKDB4MDUpLAoJWigweGM4KSwgWigweDg0KSwgWigweGZhKSwgWigweGM3KSwgWigweGJhKSwgWigweDRlKSwgWigweDhiKSwgWigweDFhKSwKCVooMHgxOSksIFooMHhmMSksIFooMHhhMSksIFooMHgzYiksIFooMHgxOCksIFooMHgxMiksIFooMHgxNyksIFooMHhiMCksCglaKDB4OTgpLCBaKDB4OGQpLCBaKDB4MGIpLCBaKDB4MjMpLCBaKDB4YzMpLCBaKDB4M2EpLCBaKDB4MmQpLCBaKDB4MjApLAoJWigweGRmKSwgWigweDEzKSwgWigweGEwKSwgWigweGE4KSwgWigweDRjKSwgWigweDBkKSwgWigweDZjKSwgWigweDJmKSwKCVooMHg0NyksIFooMHgxMyksIFooMHgxMyksIFooMHg1MiksIFooMHgxZiksIFooMHgyZCksIFooMHhmNSksIFooMHg3OSksCglaKDB4M2QpLCBaKDB4YTIpLCBaKDB4NTQpLCBaKDB4YmQpLCBaKDB4NjkpLCBaKDB4YzgpLCBaKDB4NmIpLCBaKDB4ZjMpLAoJWigweDA1KSwgWigweDI4KSwgWigweGYxKSwgWigweDE2KSwgWigweDQ2KSwgWigweDQwKSwgWigweGIwKSwgWigweDExKSwKCVooMHhkMyksIFooMHhiNyksIFooMHg5NSksIFooMHg0OSksIFooMHhjZiksIFooMHhjMyksIFooMHgxZCksIFooMHg4ZiksCglaKDB4ZDgpLCBaKDB4ZTEpLCBaKDB4NzMpLCBaKDB4ZGIpLCBaKDB4YWQpLCBaKDB4YzgpLCBaKDB4YzkpLCBaKDB4YTkpLAoJWigweGExKSwgWigweGMyKSwgWigweGM1KSwgWigweGUzKSwgWigweGJhKSwgWigweGZjKSwgWigweDBlKSwgWigweDI1KQp9OwoKLyoKICogVGhpcyBpcyBhIDE2IHJvdW5kIEZlaXN0ZWwgbmV0d29yayB3aXRoIHBlcm11dGF0aW9uIEZfRU5DUllQVAogKi8KI2RlZmluZSBGX0VOQ1JZUFQoUiwgTCwgc2NoZWQpCQkJCQkJXApkbyB7CQkJCQkJCQkJXAoJdW5pb24gbGM0IHsgdTMyIGw7IHU4IGNbNF07IH0gdTsJCQkJXAoJdS5sID0gc2NoZWQgXiBSOwkJCQkJCVwKCUwgXj0gc2JveDBbdS5jWzBdXSBeIHNib3gxW3UuY1sxXV0gXiBzYm94Mlt1LmNbMl1dIF4gc2JveDNbdS5jWzNdXTsgXAp9IHdoaWxlKDApCgovKgogKiBlbmNyeXB0b3IKICovCnN0YXRpYyB2b2lkIGZjcnlwdF9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCnsKCWNvbnN0IHN0cnVjdCBmY3J5cHRfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwoJc3RydWN0IHsKCQl1MzIgbCwgcjsKCX0gWDsKCgltZW1jcHkoJlgsIHNyYywgc2l6ZW9mKFgpKTsKCglGX0VOQ1JZUFQoWC5yLCBYLmwsIGN0eC0+c2NoZWRbMHgwXSk7CglGX0VOQ1JZUFQoWC5sLCBYLnIsIGN0eC0+c2NoZWRbMHgxXSk7CglGX0VOQ1JZUFQoWC5yLCBYLmwsIGN0eC0+c2NoZWRbMHgyXSk7CglGX0VOQ1JZUFQoWC5sLCBYLnIsIGN0eC0+c2NoZWRbMHgzXSk7CglGX0VOQ1JZUFQoWC5yLCBYLmwsIGN0eC0+c2NoZWRbMHg0XSk7CglGX0VOQ1JZUFQoWC5sLCBYLnIsIGN0eC0+c2NoZWRbMHg1XSk7CglGX0VOQ1JZUFQoWC5yLCBYLmwsIGN0eC0+c2NoZWRbMHg2XSk7CglGX0VOQ1JZUFQoWC5sLCBYLnIsIGN0eC0+c2NoZWRbMHg3XSk7CglGX0VOQ1JZUFQoWC5yLCBYLmwsIGN0eC0+c2NoZWRbMHg4XSk7CglGX0VOQ1JZUFQoWC5sLCBYLnIsIGN0eC0+c2NoZWRbMHg5XSk7CglGX0VOQ1JZUFQoWC5yLCBYLmwsIGN0eC0+c2NoZWRbMHhhXSk7CglGX0VOQ1JZUFQoWC5sLCBYLnIsIGN0eC0+c2NoZWRbMHhiXSk7CglGX0VOQ1JZUFQoWC5yLCBYLmwsIGN0eC0+c2NoZWRbMHhjXSk7CglGX0VOQ1JZUFQoWC5sLCBYLnIsIGN0eC0+c2NoZWRbMHhkXSk7CglGX0VOQ1JZUFQoWC5yLCBYLmwsIGN0eC0+c2NoZWRbMHhlXSk7CglGX0VOQ1JZUFQoWC5sLCBYLnIsIGN0eC0+c2NoZWRbMHhmXSk7CgoJbWVtY3B5KGRzdCwgJlgsIHNpemVvZihYKSk7Cn0KCi8qCiAqIGRlY3J5cHRvcgogKi8Kc3RhdGljIHZvaWQgZmNyeXB0X2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKewoJY29uc3Qgc3RydWN0IGZjcnlwdF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CglzdHJ1Y3QgewoJCXUzMiBsLCByOwoJfSBYOwoKCW1lbWNweSgmWCwgc3JjLCBzaXplb2YoWCkpOwoKCUZfRU5DUllQVChYLmwsIFguciwgY3R4LT5zY2hlZFsweGZdKTsKCUZfRU5DUllQVChYLnIsIFgubCwgY3R4LT5zY2hlZFsweGVdKTsKCUZfRU5DUllQVChYLmwsIFguciwgY3R4LT5zY2hlZFsweGRdKTsKCUZfRU5DUllQVChYLnIsIFgubCwgY3R4LT5zY2hlZFsweGNdKTsKCUZfRU5DUllQVChYLmwsIFguciwgY3R4LT5zY2hlZFsweGJdKTsKCUZfRU5DUllQVChYLnIsIFgubCwgY3R4LT5zY2hlZFsweGFdKTsKCUZfRU5DUllQVChYLmwsIFguciwgY3R4LT5zY2hlZFsweDldKTsKCUZfRU5DUllQVChYLnIsIFgubCwgY3R4LT5zY2hlZFsweDhdKTsKCUZfRU5DUllQVChYLmwsIFguciwgY3R4LT5zY2hlZFsweDddKTsKCUZfRU5DUllQVChYLnIsIFgubCwgY3R4LT5zY2hlZFsweDZdKTsKCUZfRU5DUllQVChYLmwsIFguciwgY3R4LT5zY2hlZFsweDVdKTsKCUZfRU5DUllQVChYLnIsIFgubCwgY3R4LT5zY2hlZFsweDRdKTsKCUZfRU5DUllQVChYLmwsIFguciwgY3R4LT5zY2hlZFsweDNdKTsKCUZfRU5DUllQVChYLnIsIFgubCwgY3R4LT5zY2hlZFsweDJdKTsKCUZfRU5DUllQVChYLmwsIFguciwgY3R4LT5zY2hlZFsweDFdKTsKCUZfRU5DUllQVChYLnIsIFgubCwgY3R4LT5zY2hlZFsweDBdKTsKCgltZW1jcHkoZHN0LCAmWCwgc2l6ZW9mKFgpKTsKfQoKLyoKICogR2VuZXJhdGUgYSBrZXkgc2NoZWR1bGUgZnJvbSBrZXksIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaW4gZWFjaCBrZXkgYnl0ZQogKiBpcyBwYXJpdHkgYW5kIHNoYWxsIGJlIGlnbm9yZWQuIFRoaXMgbGVhdmVzIDU2IHNpZ25pZmljYW50IGJpdHMgaW4gdGhlIGtleQogKiB0byBzY2F0dGVyIG92ZXIgdGhlIDE2IGtleSBzY2hlZHVsZXMuIEZvciBlYWNoIHNjaGVkdWxlIGV4dHJhY3QgdGhlIGxvdwogKiBvcmRlciAzMiBiaXRzIGFuZCB1c2UgYXMgc2NoZWR1bGUsIHRoZW4gcm90YXRlIHJpZ2h0IGJ5IDExIGJpdHMuCiAqLwpzdGF0aWMgaW50IGZjcnlwdF9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKewoJc3RydWN0IGZjcnlwdF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CgojaWYgQklUU19QRVJfTE9ORyA9PSA2NCAgLyogdGhlIDY0LWJpdCB2ZXJzaW9uIGNhbiBhbHNvIGJlIHVzZWQgZm9yIDMyLWJpdAoJCQkgICoga2VybmVscyAtIGl0IHNlZW1zIHRvIGJlIGZhc3RlciBidXQgdGhlIGNvZGUgaXMKCQkJICAqIGxhcmdlciAqLwoKCXU2NCBrOwkvKiBrIGhvbGRzIGFsbCA1NiBub24tcGFyaXR5IGJpdHMgKi8KCgkvKiBkaXNjYXJkIHRoZSBwYXJpdHkgYml0cyAqLwoJayA9ICgqa2V5KyspID4+IDE7CglrIDw8PSA3OwoJayB8PSAoKmtleSsrKSA+PiAxOwoJayA8PD0gNzsKCWsgfD0gKCprZXkrKykgPj4gMTsKCWsgPDw9IDc7CglrIHw9ICgqa2V5KyspID4+IDE7CglrIDw8PSA3OwoJayB8PSAoKmtleSsrKSA+PiAxOwoJayA8PD0gNzsKCWsgfD0gKCprZXkrKykgPj4gMTsKCWsgPDw9IDc7CglrIHw9ICgqa2V5KyspID4+IDE7CglrIDw8PSA3OwoJayB8PSAoKmtleSkgPj4gMTsKCgkvKiBVc2UgbG93ZXIgMzIgYml0cyBmb3Igc2NoZWR1bGUsIHJvdGF0ZSBieSAxMSBlYWNoIHJvdW5kICgxNiB0aW1lcykgKi8KCWN0eC0+c2NoZWRbMHgwXSA9IGJlMzJfdG9fY3B1KGspOyByb3I1Nl82NChrLCAxMSk7CgljdHgtPnNjaGVkWzB4MV0gPSBiZTMyX3RvX2NwdShrKTsgcm9yNTZfNjQoaywgMTEpOwoJY3R4LT5zY2hlZFsweDJdID0gYmUzMl90b19jcHUoayk7IHJvcjU2XzY0KGssIDExKTsKCWN0eC0+c2NoZWRbMHgzXSA9IGJlMzJfdG9fY3B1KGspOyByb3I1Nl82NChrLCAxMSk7CgljdHgtPnNjaGVkWzB4NF0gPSBiZTMyX3RvX2NwdShrKTsgcm9yNTZfNjQoaywgMTEpOwoJY3R4LT5zY2hlZFsweDVdID0gYmUzMl90b19jcHUoayk7IHJvcjU2XzY0KGssIDExKTsKCWN0eC0+c2NoZWRbMHg2XSA9IGJlMzJfdG9fY3B1KGspOyByb3I1Nl82NChrLCAxMSk7CgljdHgtPnNjaGVkWzB4N10gPSBiZTMyX3RvX2NwdShrKTsgcm9yNTZfNjQoaywgMTEpOwoJY3R4LT5zY2hlZFsweDhdID0gYmUzMl90b19jcHUoayk7IHJvcjU2XzY0KGssIDExKTsKCWN0eC0+c2NoZWRbMHg5XSA9IGJlMzJfdG9fY3B1KGspOyByb3I1Nl82NChrLCAxMSk7CgljdHgtPnNjaGVkWzB4YV0gPSBiZTMyX3RvX2NwdShrKTsgcm9yNTZfNjQoaywgMTEpOwoJY3R4LT5zY2hlZFsweGJdID0gYmUzMl90b19jcHUoayk7IHJvcjU2XzY0KGssIDExKTsKCWN0eC0+c2NoZWRbMHhjXSA9IGJlMzJfdG9fY3B1KGspOyByb3I1Nl82NChrLCAxMSk7CgljdHgtPnNjaGVkWzB4ZF0gPSBiZTMyX3RvX2NwdShrKTsgcm9yNTZfNjQoaywgMTEpOwoJY3R4LT5zY2hlZFsweGVdID0gYmUzMl90b19jcHUoayk7IHJvcjU2XzY0KGssIDExKTsKCWN0eC0+c2NoZWRbMHhmXSA9IGJlMzJfdG9fY3B1KGspOwoKCXJldHVybiAwOwojZWxzZQoJdTMyIGhpLCBsbzsJCS8qIGhpIGlzIHVwcGVyIDI0IGJpdHMgYW5kIGxvIGxvd2VyIDMyLCB0b3RhbCA1NiAqLwoKCS8qIGRpc2NhcmQgdGhlIHBhcml0eSBiaXRzICovCglsbyA9ICgqa2V5KyspID4+IDE7CglsbyA8PD0gNzsKCWxvIHw9ICgqa2V5KyspID4+IDE7CglsbyA8PD0gNzsKCWxvIHw9ICgqa2V5KyspID4+IDE7CglsbyA8PD0gNzsKCWxvIHw9ICgqa2V5KyspID4+IDE7CgloaSA9IGxvID4+IDQ7CglsbyAmPSAweGY7CglsbyA8PD0gNzsKCWxvIHw9ICgqa2V5KyspID4+IDE7CglsbyA8PD0gNzsKCWxvIHw9ICgqa2V5KyspID4+IDE7CglsbyA8PD0gNzsKCWxvIHw9ICgqa2V5KyspID4+IDE7CglsbyA8PD0gNzsKCWxvIHw9ICgqa2V5KSA+PiAxOwoKCS8qIFVzZSBsb3dlciAzMiBiaXRzIGZvciBzY2hlZHVsZSwgcm90YXRlIGJ5IDExIGVhY2ggcm91bmQgKDE2IHRpbWVzKSAqLwoJY3R4LT5zY2hlZFsweDBdID0gYmUzMl90b19jcHUobG8pOyByb3I1NihoaSwgbG8sIDExKTsKCWN0eC0+c2NoZWRbMHgxXSA9IGJlMzJfdG9fY3B1KGxvKTsgcm9yNTYoaGksIGxvLCAxMSk7CgljdHgtPnNjaGVkWzB4Ml0gPSBiZTMyX3RvX2NwdShsbyk7IHJvcjU2KGhpLCBsbywgMTEpOwoJY3R4LT5zY2hlZFsweDNdID0gYmUzMl90b19jcHUobG8pOyByb3I1NihoaSwgbG8sIDExKTsKCWN0eC0+c2NoZWRbMHg0XSA9IGJlMzJfdG9fY3B1KGxvKTsgcm9yNTYoaGksIGxvLCAxMSk7CgljdHgtPnNjaGVkWzB4NV0gPSBiZTMyX3RvX2NwdShsbyk7IHJvcjU2KGhpLCBsbywgMTEpOwoJY3R4LT5zY2hlZFsweDZdID0gYmUzMl90b19jcHUobG8pOyByb3I1NihoaSwgbG8sIDExKTsKCWN0eC0+c2NoZWRbMHg3XSA9IGJlMzJfdG9fY3B1KGxvKTsgcm9yNTYoaGksIGxvLCAxMSk7CgljdHgtPnNjaGVkWzB4OF0gPSBiZTMyX3RvX2NwdShsbyk7IHJvcjU2KGhpLCBsbywgMTEpOwoJY3R4LT5zY2hlZFsweDldID0gYmUzMl90b19jcHUobG8pOyByb3I1NihoaSwgbG8sIDExKTsKCWN0eC0+c2NoZWRbMHhhXSA9IGJlMzJfdG9fY3B1KGxvKTsgcm9yNTYoaGksIGxvLCAxMSk7CgljdHgtPnNjaGVkWzB4Yl0gPSBiZTMyX3RvX2NwdShsbyk7IHJvcjU2KGhpLCBsbywgMTEpOwoJY3R4LT5zY2hlZFsweGNdID0gYmUzMl90b19jcHUobG8pOyByb3I1NihoaSwgbG8sIDExKTsKCWN0eC0+c2NoZWRbMHhkXSA9IGJlMzJfdG9fY3B1KGxvKTsgcm9yNTYoaGksIGxvLCAxMSk7CgljdHgtPnNjaGVkWzB4ZV0gPSBiZTMyX3RvX2NwdShsbyk7IHJvcjU2KGhpLCBsbywgMTEpOwoJY3R4LT5zY2hlZFsweGZdID0gYmUzMl90b19jcHUobG8pOwoJcmV0dXJuIDA7CiNlbmRpZgp9CgpzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgZmNyeXB0X2FsZyA9IHsKCS5jcmFfbmFtZQkJPQkiZmNyeXB0IiwKCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKCS5jcmFfYmxvY2tzaXplCQk9CTgsCgkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBmY3J5cHRfY3R4KSwKCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAoJLmNyYV9hbGlnbm1hc2sJCT0JMywKCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChmY3J5cHRfYWxnLmNyYV9saXN0KSwKCS5jcmFfdQkJCT0JeyAuY2lwaGVyID0gewoJLmNpYV9taW5fa2V5c2l6ZQk9CTgsCgkuY2lhX21heF9rZXlzaXplCT0JOCwKCS5jaWFfc2V0a2V5CQk9CWZjcnlwdF9zZXRrZXksCgkuY2lhX2VuY3J5cHQJCT0JZmNyeXB0X2VuY3J5cHQsCgkuY2lhX2RlY3J5cHQJCT0JZmNyeXB0X2RlY3J5cHQgfSB9Cn07CgpzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCnsKCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZmY3J5cHRfYWxnKTsKfQoKc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKewoJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZmY3J5cHRfYWxnKTsKfQoKbW9kdWxlX2luaXQoaW5pdCk7Cm1vZHVsZV9leGl0KGZpbmkpOwoKTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwpNT0RVTEVfREVTQ1JJUFRJT04oIkZDcnlwdCBDaXBoZXIgQWxnb3JpdGhtIik7Ck1PRFVMRV9BVVRIT1IoIkRhdmlkIEhvd2VsbHMgPGRob3dlbGxzQHJlZGhhdC5jb20+Iik7Cg==