LyoKICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKICoKICogIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgogKiAgQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAqLwojaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICgojZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJCTB4ZmZmZmZmZmYKI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCQkwCgovKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIG9tYXAxICovCiNkZWZpbmUgT01BUF9ETUFfQkFTRQkJCSgweGZmZmVkODAwKQojZGVmaW5lIE9NQVBfRE1BX0dDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDApCiNkZWZpbmUgT01BUF9ETUFfR1NDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDQpCiNkZWZpbmUgT01BUF9ETUFfR1JTVAkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDgpCiNkZWZpbmUgT01BUF9ETUFfSFdfSUQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDQyKQojZGVmaW5lIE9NQVBfRE1BX1BDSDJfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDQpCiNkZWZpbmUgT01BUF9ETUFfUENIMF9JRAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0NikKI2RlZmluZSBPTUFQX0RNQV9QQ0gxX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ4KQojZGVmaW5lIE9NQVBfRE1BX1BDSEdfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGEpCiNkZWZpbmUgT01BUF9ETUFfUENIRF9JRAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0YykKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfVQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0ZSkKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MCkKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfVQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MikKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NCkKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzIJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU2KQojZGVmaW5lIE9NQVBfRE1BX0NBUFNfMwkJCShPTUFQX0RNQV9CQVNFICsgMHg0NTgpCiNkZWZpbmUgT01BUF9ETUFfQ0FQU180CQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1YSkKI2RlZmluZSBPTUFQX0RNQV9QQ0gyX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDYwKQojZGVmaW5lIE9NQVBfRE1BX1BDSDBfU1IJCShPTUFQX0RNQV9CQVNFICsgMHg0ODApCiNkZWZpbmUgT01BUF9ETUFfUENIMV9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MikKI2RlZmluZSBPTUFQX0RNQV9QQ0hEX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NGMwKQoKLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBvbWFwMiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9CQVNFCQkoTDRfMjRYWF9CQVNFICsgMHg1NjAwMCkKI2RlZmluZSBPTUFQX0RNQTRfUkVWSVNJT04JCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MDApCiNkZWZpbmUgT01BUF9ETUE0X0dDUl9SRUcJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzgpCiNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwOCkKI2RlZmluZSBPTUFQX0RNQTRfSVJRU1RBVFVTX0wxCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDBjKQojZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDIJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTApCiNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxNCkKI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wwCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDE4KQojZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDEJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MWMpCiNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyMCkKI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wzCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDI0KQojZGVmaW5lIE9NQVBfRE1BNF9TWVNTVEFUVVMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjgpCiNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2NCkKI2RlZmluZSBPTUFQX0RNQTRfQ0FQU18yCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDZjKQojZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzApCiNkZWZpbmUgT01BUF9ETUE0X0NBUFNfNAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3NCkKCiNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQoKI2RlZmluZSBPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UCTE3CgovKiBDb21tb24gY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgZm9yIG9tYXAxICovCiNkZWZpbmUgT01BUF9ETUFfQ1NEUF9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAwKQojZGVmaW5lIE9NQVBfRE1BX0NDUl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAyKQojZGVmaW5lIE9NQVBfRE1BX0NJQ1JfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNCkKI2RlZmluZSBPTUFQX0RNQV9DU1JfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNikKI2RlZmluZSBPTUFQX0RNQV9DRU5fUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMCkKI2RlZmluZSBPTUFQX0RNQV9DRk5fUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMikKI2RlZmluZSBPTUFQX0RNQV9DU0ZJX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTQpCiNkZWZpbmUgT01BUF9ETUFfQ1NFSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE2KQojZGVmaW5lIE9NQVBfRE1BX0NTQUNfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxOCkKI2RlZmluZSBPTUFQX0RNQV9DREFDX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWEpCiNkZWZpbmUgT01BUF9ETUFfQ0RFSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFjKQojZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxZSkKI2RlZmluZSBPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI4KQoKI2Vsc2UKCiNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkzMgkvKiBSRVZJU0lUOiBJcyB0aGlzIDMyICsgMj8gKi8KCi8qIENvbW1vbiBjaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBmb3Igb21hcDIgKi8KI2RlZmluZSBPTUFQX0RNQV9DQ1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODApCiNkZWZpbmUgT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhuKQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODQpCiNkZWZpbmUgT01BUF9ETUFfQ0lDUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg4OCkKI2RlZmluZSBPTUFQX0RNQV9DU1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OGMpCiNkZWZpbmUgT01BUF9ETUFfQ1NEUF9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5MCkKI2RlZmluZSBPTUFQX0RNQV9DRU5fUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTQpCiNkZWZpbmUgT01BUF9ETUFfQ0ZOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDk4KQojZGVmaW5lIE9NQVBfRE1BX0NTRUlfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YTQpCiNkZWZpbmUgT01BUF9ETUFfQ1NGSV9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhOCkKI2RlZmluZSBPTUFQX0RNQV9DREVJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGFjKQojZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjApCiNkZWZpbmUgT01BUF9ETUFfQ1NBQ19SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiNCkKI2RlZmluZSBPTUFQX0RNQV9DREFDX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGI4KQoKI2VuZGlmCgovKiBDaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBvbmx5IG9uIG9tYXAxICovCiNkZWZpbmUgT01BUDFfRE1BX0NTU0FfTF9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA4KQojZGVmaW5lIE9NQVAxX0RNQV9DU1NBX1VfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYSkKI2RlZmluZSBPTUFQMV9ETUFfQ0RTQV9MX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGMpCiNkZWZpbmUgT01BUDFfRE1BX0NEU0FfVV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBlKQojZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9MX1JFRyhuKQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMCkKI2RlZmluZSBPTUFQMV9ETUFfQ0NSMl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI0KQojZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9VX1JFRyhuKQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMikKI2RlZmluZSBPTUFQMV9ETUFfTENIX0NUUkxfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDJhKQoKLyogQ2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgb25seSBvbiBvbWFwMiAqLwojZGVmaW5lIE9NQVAyX0RNQV9DU1NBX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDljKQojZGVmaW5lIE9NQVAyX0RNQV9DRFNBX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGEwKQojZGVmaW5lIE9NQVAyX0RNQV9DQ0VOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGJjKQojZGVmaW5lIE9NQVAyX0RNQV9DQ0ZOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGMwKQojZGVmaW5lIE9NQVAyX0RNQV9DT0xPUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhjNCkKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKiBETUEgY2hhbm5lbHMgZm9yIG9tYXAxICovCiNkZWZpbmUgT01BUF9ETUFfTk9fREVWSUNFCQkwCiNkZWZpbmUgT01BUF9ETUFfTUNTSTFfVFgJCTEKI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9SWAkJMgojZGVmaW5lIE9NQVBfRE1BX0kyQ19SWAkJCTMKI2RlZmluZSBPTUFQX0RNQV9JMkNfVFgJCQk0CiNkZWZpbmUgT01BUF9ETUFfRVhUX05ETUFfUkVRCQk1CiNkZWZpbmUgT01BUF9ETUFfRVhUX05ETUFfUkVRMgkJNgojZGVmaW5lIE9NQVBfRE1BX1VXSVJFX1RYCQk3CiNkZWZpbmUgT01BUF9ETUFfTUNCU1AxX1RYCQk4CiNkZWZpbmUgT01BUF9ETUFfTUNCU1AxX1JYCQk5CiNkZWZpbmUgT01BUF9ETUFfTUNCU1AzX1RYCQkxMAojZGVmaW5lIE9NQVBfRE1BX01DQlNQM19SWAkJMTEKI2RlZmluZSBPTUFQX0RNQV9VQVJUMV9UWAkJMTIKI2RlZmluZSBPTUFQX0RNQV9VQVJUMV9SWAkJMTMKI2RlZmluZSBPTUFQX0RNQV9VQVJUMl9UWAkJMTQKI2RlZmluZSBPTUFQX0RNQV9VQVJUMl9SWAkJMTUKI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDJfVFgJCTE2CiNkZWZpbmUgT01BUF9ETUFfTUNCU1AyX1JYCQkxNwojZGVmaW5lIE9NQVBfRE1BX1VBUlQzX1RYCQkxOAojZGVmaW5lIE9NQVBfRE1BX1VBUlQzX1JYCQkxOQojZGVmaW5lIE9NQVBfRE1BX0NBTUVSQV9JRl9SWAkJMjAKI2RlZmluZSBPTUFQX0RNQV9NTUNfVFgJCQkyMQojZGVmaW5lIE9NQVBfRE1BX01NQ19SWAkJCTIyCiNkZWZpbmUgT01BUF9ETUFfTkFORAkJCTIzCiNkZWZpbmUgT01BUF9ETUFfSVJRX0xDRF9MSU5FCQkyNAojZGVmaW5lIE9NQVBfRE1BX01FTU9SWV9TVElDSwkJMjUKI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19SWDAJCTI2CiNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfUlgxCQkyNwojZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1JYMgkJMjgKI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19UWDAJCTI5CiNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfVFgxCQkzMAojZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1RYMgkJMzEKCi8qIFRoZXNlIGFyZSBvbmx5IGZvciAxNjEwICovCiNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0RFU19JTgkJMzIKI2RlZmluZSBPTUFQX0RNQV9TUElfVFgJCQkzMwojZGVmaW5lIE9NQVBfRE1BX1NQSV9SWAkJCTM0CiNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0hBU0gJCTM1CiNkZWZpbmUgT01BUF9ETUFfQ0NQX0FUVE4JCTM2CiNkZWZpbmUgT01BUF9ETUFfQ0NQX0ZJRk9fTk9UX0VNUFRZCTM3CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzAJMzgKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMAkzOQojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8xCTQwCiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzEJNDEKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMgk0MgojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8yCTQzCiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzMJNDQKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMwk0NQojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl80CTQ2CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzQJNDcKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fNQk0OAojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl81CTQ5CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzYJNTAKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fNgk1MQojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl83CTUyCiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzcJNTMKI2RlZmluZSBPTUFQX0RNQV9NTUMyX1RYCQk1NAojZGVmaW5lIE9NQVBfRE1BX01NQzJfUlgJCTU1CiNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0RFU19PVVQJCTU2CgovKiBETUEgY2hhbm5lbHMgZm9yIDI0eHggKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfTk9fREVWSUNFCQkwCiNkZWZpbmUgT01BUDI0WFhfRE1BX1hUSV9ETUEJCTEJLyogU19ETUFfMCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfTkRNQV9SRVEwCTIJLyogU19ETUFfMSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfTkRNQV9SRVExCTMJLyogU19ETUFfMiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9HUE1DCQk0CS8qIFNfRE1BXzMgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfR0ZYCQk1CS8qIFNfRE1BXzQgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRFNTCQk2CS8qIFNfRE1BXzUgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfVkxZTlFfVFgJCTcJLyogU19ETUFfNiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9DV1QJCTgJLyogU19ETUFfNyAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9BRVNfVFgJCTkJLyogU19ETUFfOCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9BRVNfUlgJCTEwCS8qIFNfRE1BXzkgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1RYCQkxMQkvKiBTX0RNQV8xMCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfUlgJCTEyCS8qIFNfRE1BXzExICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NIQTFNRDVfUlgJCTEzCS8qIFNfRE1BXzEyICovCgojZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQUNfUkQJCTE3CS8qIFNfRE1BXzE2ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19BQ19XUgkJMTgJLyogU19ETUFfMTcgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1JECTE5CS8qIFNfRE1BXzE4ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9VTF9XUgkyMAkvKiBTX0RNQV8xOSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfRExfUkQJMjEJLyogU19ETUFfMjAgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX0RMX1dSCTIyCS8qIFNfRE1BXzIxICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9VTF9SRAkyMwkvKiBTX0RNQV8yMiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfVUxfV1IJMjQJLyogU19ETUFfMjMgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX0RMX1JECTI1CS8qIFNfRE1BXzI0ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9ETF9XUgkyNgkvKiBTX0RNQV8yNSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMxX1RYCQkyNwkvKiBTX0RNQV8yNiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMxX1JYCQkyOAkvKiBTX0RNQV8yNyAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMyX1RYCQkyOQkvKiBTX0RNQV8yOCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMyX1JYCQkzMAkvKiBTX0RNQV8yOSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgJCTMxCS8qIFNETUFfMzAgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYCQkzMgkvKiBTRE1BXzMxICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMl9UWAkJMzMJLyogU0RNQV8zMiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlgJCTM0CS8qIFNETUFfMzMgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDAJCTM1CS8qIFNETUFfMzQgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDAJCTM2CS8qIFNETUFfMzUgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDEJCTM3CS8qIFNETUFfMzYgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDEJCTM4CS8qIFNETUFfMzcgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDIJCTM5CS8qIFNETUFfMzggKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDIJCTQwCS8qIFNETUFfMzkgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDMJCTQxCS8qIFNETUFfNDAgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDMJCTQyCS8qIFNETUFfNDEgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDAJCTQzCS8qIFNETUFfNDIgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9SWDAJCTQ0CS8qIFNETUFfNDMgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDEJCTQ1CS8qIFNETUFfNDQgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9SWDEJCTQ2CS8qIFNETUFfNDUgKi8KCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQxX1RYCQk0OQkvKiBTRE1BXzQ4ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQxX1JYCQk1MAkvKiBTRE1BXzQ5ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQyX1RYCQk1MQkvKiBTRE1BXzUwICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQyX1JYCQk1MgkvKiBTRE1BXzUxICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQzX1RYCQk1MwkvKiBTRE1BXzUyICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQzX1JYCQk1NAkvKiBTRE1BXzUzICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMAk1NQkvKiBTRE1BXzU0ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMAk1NgkvKiBTRE1BXzU1ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMQk1NwkvKiBTRE1BXzU2ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMQk1OAkvKiBTRE1BXzU3ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMgk1OQkvKiBTRE1BXzU4ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMgk2MAkvKiBTRE1BXzU5ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfVFgJCTYxCS8qIFNETUFfNjAgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfTU1DMV9SWAkJNjIJLyogU0RNQV82MSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9NUwkJCTYzCS8qIFNETUFfNjIgKi8KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIExDRCBETUEgKi8KI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JBU0UJCSgweGZmZmVkYjAwKQojZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQ1RSTAkJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDApCiNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfTAkoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwMikKI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9VCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDA0KQojZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX0wJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDYpCiNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CT1RfRjFfVQkoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwOCkKCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZTMwMCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NTRFAJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMwKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMikKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NUUkwJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM0KQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzgpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjYSkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNjKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IxX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2UpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMl9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQyKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IyX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDQpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjJfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkNikKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19FSV9CMQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkOCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGRhKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0VOX0IxCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGUwKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZOX0IxCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGU0KQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZWEpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhmNCkKCiNkZWZpbmUgT01BUF9ETUFfVE9VVF9JUlEJCSgxIDw8IDApCS8qIE9ubHkgb24gb21hcDEgKi8KI2RlZmluZSBPTUFQX0RNQV9EUk9QX0lSUQkJKDEgPDwgMSkKI2RlZmluZSBPTUFQX0RNQV9IQUxGX0lSUQkJKDEgPDwgMikKI2RlZmluZSBPTUFQX0RNQV9GUkFNRV9JUlEJCSgxIDw8IDMpCiNkZWZpbmUgT01BUF9ETUFfTEFTVF9JUlEJCSgxIDw8IDQpCiNkZWZpbmUgT01BUF9ETUFfQkxPQ0tfSVJRCQkoMSA8PCA1KQojZGVmaW5lIE9NQVAxX0RNQV9TWU5DX0lSUQkJKDEgPDwgNikKI2RlZmluZSBPTUFQMl9ETUFfUEtUX0lSUQkJKDEgPDwgNykKI2RlZmluZSBPTUFQMl9ETUFfVFJBTlNfRVJSX0lSUQkJKDEgPDwgOCkKI2RlZmluZSBPTUFQMl9ETUFfU0VDVVJFX0VSUl9JUlEJKDEgPDwgOSkKI2RlZmluZSBPTUFQMl9ETUFfU1VQRVJWSVNPUl9FUlJfSVJRCSgxIDw8IDEwKQojZGVmaW5lIE9NQVAyX0RNQV9NSVNBTElHTkVEX0VSUl9JUlEJKDEgPDwgMTEpCgojZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TOAkJMHgwMAojZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTYJCTB4MDEKI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyCQkweDAyCgojZGVmaW5lIE9NQVBfRE1BX1NZTkNfRUxFTUVOVAkJMHgwMAojZGVmaW5lIE9NQVBfRE1BX1NZTkNfRlJBTUUJCTB4MDEKI2RlZmluZSBPTUFQX0RNQV9TWU5DX0JMT0NLCQkweDAyCgojZGVmaW5lIE9NQVBfRE1BX1BPUlRfRU1JRkYJCTB4MDAKI2RlZmluZSBPTUFQX0RNQV9QT1JUX0VNSUZTCQkweDAxCiNkZWZpbmUgT01BUF9ETUFfUE9SVF9PQ1BfVDEJCTB4MDIKI2RlZmluZSBPTUFQX0RNQV9QT1JUX1RJUEIJCTB4MDMKI2RlZmluZSBPTUFQX0RNQV9QT1JUX09DUF9UMgkJMHgwNAojZGVmaW5lIE9NQVBfRE1BX1BPUlRfTVBVSQkJMHgwNQoKI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVAkJMHgwMAojZGVmaW5lIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DCQkweDAxCiNkZWZpbmUgT01BUF9ETUFfQU1PREVfU0lOR0xFX0lEWAkweDAyCiNkZWZpbmUgT01BUF9ETUFfQU1PREVfRE9VQkxFX0lEWAkweDAzCgovKiBMQ0QgRE1BIGJsb2NrIG51bWJlcnMgKi8KZW51bSB7CglPTUFQX0xDRF9ETUFfQjFfVE9QLAoJT01BUF9MQ0RfRE1BX0IxX0JPVFRPTSwKCU9NQVBfTENEX0RNQV9CMl9UT1AsCglPTUFQX0xDRF9ETUFfQjJfQk9UVE9NCn07CgovKiBSRVZJU0lUOiBDaGVjayBpZiBCVVJTVF80IGlzIHJlYWxseSAxIChvciAyKSAqLwplbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgewoJT01BUF9ETUFfREFUQV9CVVJTVF9ESVMgPSAwLAoJT01BUF9ETUFfREFUQV9CVVJTVF80LAoJT01BUF9ETUFfREFUQV9CVVJTVF84Cn07CgplbnVtIG9tYXBfZG1hX2NvbG9yX21vZGUgewoJT01BUF9ETUFfQ09MT1JfRElTID0gMCwKCU9NQVBfRE1BX0NPTlNUQU5UX0ZJTEwsCglPTUFQX0RNQV9UUkFOU1BBUkVOVF9DT1BZCn07CgpzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgewoJaW50IGRhdGFfdHlwZTsJCS8qIGRhdGEgdHlwZSA4LDE2LDMyICovCglpbnQgZWxlbV9jb3VudDsJCS8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGZyYW1lICovCglpbnQgZnJhbWVfY291bnQ7CS8qIG51bWJlciBvZiBmcmFtZXMgaW4gYSBlbGVtZW50ICovCgoJaW50IHNyY19wb3J0OwkJLyogT25seSBvbiBPTUFQMSBSRVZJU0lUOiBJcyB0aGlzIG5lZWRlZD8gKi8KCWludCBzcmNfYW1vZGU7CQkvKiBjb25zdGFudCAsIHBvc3QgaW5jcmVtZW50LCBpbmRleGVkICwgZG91YmxlIGluZGV4ZWQgKi8KCWludCBzcmNfc3RhcnQ7CQkvKiBzb3VyY2UgYWRkcmVzcyA6IHBoeXNpY2FsICovCglpbnQgc3JjX2VpOwkJLyogc291cmNlIGVsZW1lbnQgaW5kZXggKi8KCWludCBzcmNfZmk7CQkvKiBzb3VyY2UgZnJhbWUgaW5kZXggKi8KCglpbnQgZHN0X3BvcnQ7CQkvKiBPbmx5IG9uIE9NQVAxIFJFVklTSVQ6IElzIHRoaXMgbmVlZGVkPyAqLwoJaW50IGRzdF9hbW9kZTsJCS8qIGNvbnN0YW50ICwgcG9zdCBpbmNyZW1lbnQsIGluZGV4ZWQgLCBkb3VibGUgaW5kZXhlZCAqLwoJaW50IGRzdF9zdGFydDsJCS8qIHNvdXJjZSBhZGRyZXNzIDogcGh5c2ljYWwgKi8KCWludCBkc3RfZWk7CQkvKiBzb3VyY2UgZWxlbWVudCBpbmRleCAqLwoJaW50IGRzdF9maTsJCS8qIHNvdXJjZSBmcmFtZSBpbmRleCAqLwoKCWludCB0cmlnZ2VyOwkJLyogdHJpZ2dlciBhdHRhY2hlZCBpZiB0aGUgY2hhbm5lbCBpcyBzeW5jaHJvbml6ZWQgKi8KCWludCBzeW5jX21vZGU7CQkvKiBzeWNuIG9uIGVsZW1lbnQsIGZyYW1lICwgYmxvY2sgb3IgcGFja2V0ICovCglpbnQgc3JjX29yX2RzdF9zeW5jaDsJLyogc291cmNlIHN5bmNoKDEpIG9yIGRlc3RpbmF0aW9uIHN5bmNoKDApICovCgoJaW50IGllOwkJCS8qIGludGVycnVwdCBlbmFibGVkICovCn07CgoKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3ByaW9yaXR5KGludCBkc3RfcG9ydCwgaW50IHByaW9yaXR5KTsKZXh0ZXJuIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAoJCQkgICAgdm9pZCAoKiBjYWxsYmFjaykoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSksCgkJCSAgICB2b2lkICpkYXRhLCBpbnQgKmRtYV9jaCk7CmV4dGVybiB2b2lkIG9tYXBfZW5hYmxlX2RtYV9pcnEoaW50IGNoLCB1MTYgaXJxX2JpdHMpOwpleHRlcm4gdm9pZCBvbWFwX2Rpc2FibGVfZG1hX2lycShpbnQgY2gsIHUxNiBpcnFfYml0cyk7CmV4dGVybiB2b2lkIG9tYXBfZnJlZV9kbWEoaW50IGNoKTsKZXh0ZXJuIHZvaWQgb21hcF9zdGFydF9kbWEoaW50IGxjaCk7CmV4dGVybiB2b2lkIG9tYXBfc3RvcF9kbWEoaW50IGxjaCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoaW50IGxjaCwgaW50IGRhdGFfdHlwZSwKCQkJCQkgaW50IGVsZW1fY291bnQsIGludCBmcmFtZV9jb3VudCwKCQkJCQkgaW50IHN5bmNfbW9kZSwKCQkJCQkgaW50IGRtYV90cmlnZ2VyLCBpbnQgc3JjX29yX2RzdF9zeW5jaCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9jb2xvcl9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfY29sb3JfbW9kZSBtb2RlLAoJCQkJICAgIHUzMiBjb2xvcik7CgpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhpbnQgbGNoLCBpbnQgc3JjX3BvcnQsIGludCBzcmNfYW1vZGUsCgkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsCgkJCQkgICAgaW50IHNyY19laSwgaW50IHNyY19maSk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShpbnQgbGNoLAoJCQkJCWVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSBidXJzdF9tb2RlKTsKCmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhpbnQgbGNoLCBpbnQgZGVzdF9wb3J0LCBpbnQgZGVzdF9hbW9kZSwKCQkJCSAgICAgdW5zaWduZWQgbG9uZyBkZXN0X3N0YXJ0LAoJCQkJICAgICBpbnQgZHN0X2VpLCBpbnQgZHN0X2ZpKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGludCBsY2gsCgkJCQkJIGVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSBidXJzdF9tb2RlKTsKCmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9wYXJhbXMoaW50IGxjaCwKCQkJCXN0cnVjdCBvbWFwX2RtYV9jaGFubmVsX3BhcmFtcyAqIHBhcmFtcyk7CgpleHRlcm4gdm9pZCBvbWFwX2RtYV9saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKZXh0ZXJuIHZvaWQgb21hcF9kbWFfdW5saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKCmV4dGVybiBkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpOwpleHRlcm4gZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKTsKZXh0ZXJuIGludCBvbWFwX2dldF9kbWFfc3JjX2FkZHJfY291bnRlcihpbnQgbGNoKTsKZXh0ZXJuIHZvaWQgb21hcF9jbGVhcl9kbWEoaW50IGxjaCk7CmV4dGVybiBpbnQgb21hcF9kbWFfcnVubmluZyh2b2lkKTsKCi8qIExDRCBETUEgZnVuY3Rpb25zICovCmV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2xjZF9kbWEodm9pZCAoKiBjYWxsYmFjaykodTE2IHN0YXR1cywgdm9pZCAqZGF0YSksCgkJCQl2b2lkICpkYXRhKTsKZXh0ZXJuIHZvaWQgb21hcF9mcmVlX2xjZF9kbWEodm9pZCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKTsKZXh0ZXJuIHZvaWQgb21hcF9lbmFibGVfbGNkX2RtYSh2b2lkKTsKZXh0ZXJuIHZvaWQgb21hcF9zdG9wX2xjZF9kbWEodm9pZCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfZXh0X2NvbnRyb2xsZXIoaW50IGV4dGVybmFsKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9zaW5nbGVfdHJhbnNmZXIoaW50IHNpbmdsZSk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjEodW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgZmJfeHJlcywgdTE2IGZiX3lyZXMsCgkJCQlpbnQgZGF0YV90eXBlKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9yb3RhdGlvbihpbnQgcm90YXRlKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV92eHJlcyh1bnNpZ25lZCBsb25nIHZ4cmVzKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9taXJyb3IoaW50IG1pcnJvcik7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfc2NhbGUodW5zaWduZWQgaW50IHhzY2FsZSwgdW5zaWduZWQgaW50IHlzY2FsZSk7CgojZW5kaWYgLyogX19BU01fQVJDSF9ETUFfSCAqLwo=