LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJkYS5oCiAqIFZlcnNpb246ICAgICAgIAogKiBEZXNjcmlwdGlvbjogICAKICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgogKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBNYXIgIDggMTQ6MDY6MTIgMTk5OQogKiBNb2RpZmllZCBhdDogICBTYXQgRGVjIDI1IDE2OjA2OjQyIDE5OTkKICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogKiAKICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICogICAgICAKICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCiAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqICAKICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIEtFUk5FTF9JUkRBX0gKI2RlZmluZSBLRVJORUxfSVJEQV9ICgovKiBQbGVhc2UgZG8gKm5vdCogYWRkIGFueSAjaW5jbHVkZSBpbiB0aGlzIGZpbGUsIHRoaXMgZmlsZSBpcwogKiBpbmNsdWRlZCBhcy1pcyBpbiB1c2VyIHNwYWNlLgogKiBQbGVhc2UgZml4IHRoZSBjYWxsaW5nIGZpbGUgdG8gcHJvcGVybHkgaW5jbHVkZWQgbmVlZGVkIGZpbGVzIGJlZm9yZQogKiB0aGlzIG9uZSwgb3IgcHJlZmVyYWJseSB0byBpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+IGluc3RlYWQuCiAqIEplYW4gSUkgKi8KCi8qIEhpbnQgYml0IHBvc2l0aW9ucyBmb3IgZmlyc3QgaGludCBieXRlICovCiNkZWZpbmUgSElOVF9QTlAgICAgICAgICAweDAxCiNkZWZpbmUgSElOVF9QREEgICAgICAgICAweDAyCiNkZWZpbmUgSElOVF9DT01QVVRFUiAgICAweDA0CiNkZWZpbmUgSElOVF9QUklOVEVSICAgICAweDA4CiNkZWZpbmUgSElOVF9NT0RFTSAgICAgICAweDEwCiNkZWZpbmUgSElOVF9GQVggICAgICAgICAweDIwCiNkZWZpbmUgSElOVF9MQU4gICAgICAgICAweDQwCiNkZWZpbmUgSElOVF9FWFRFTlNJT04gICAweDgwCgovKiBIaW50IGJpdCBwb3NpdGlvbnMgZm9yIHNlY29uZCBoaW50IGJ5dGUgKGZpcnN0IGV4dGVuc2lvbiBieXRlKSAqLwojZGVmaW5lIEhJTlRfVEVMRVBIT05ZICAgMHgwMQojZGVmaW5lIEhJTlRfRklMRV9TRVJWRVIgMHgwMgojZGVmaW5lIEhJTlRfQ09NTSAgICAgICAgMHgwNAojZGVmaW5lIEhJTlRfTUVTU0FHRSAgICAgMHgwOAojZGVmaW5lIEhJTlRfSFRUUCAgICAgICAgMHgxMAojZGVmaW5lIEhJTlRfT0JFWCAgICAgICAgMHgyMAoKLyogSXJMTVAgY2hhcmFjdGVyIGNvZGUgdmFsdWVzICovCiNkZWZpbmUgQ1NfQVNDSUkgICAgICAgICAweDAwCiNkZWZpbmUJQ1NfSVNPXzg4NTlfMSAgICAweDAxCiNkZWZpbmUJQ1NfSVNPXzg4NTlfMiAgICAweDAyCiNkZWZpbmUJQ1NfSVNPXzg4NTlfMyAgICAweDAzCiNkZWZpbmUJQ1NfSVNPXzg4NTlfNCAgICAweDA0CiNkZWZpbmUJQ1NfSVNPXzg4NTlfNSAgICAweDA1CiNkZWZpbmUJQ1NfSVNPXzg4NTlfNiAgICAweDA2CiNkZWZpbmUJQ1NfSVNPXzg4NTlfNyAgICAweDA3CiNkZWZpbmUJQ1NfSVNPXzg4NTlfOCAgICAweDA4CiNkZWZpbmUJQ1NfSVNPXzg4NTlfOSAgICAweDA5CiNkZWZpbmUgQ1NfVU5JQ09ERSAgICAgICAweGZmCgovKiBUaGVzZSBhcmUgdGhlIGN1cnJlbnRseSBrbm93biBkb25nbGVzICovCnR5cGVkZWYgZW51bSB7CglJUkRBX1RFS1JBTV9ET05HTEUgICAgICAgPSAwLAoJSVJEQV9FU0lfRE9OR0xFICAgICAgICAgID0gMSwKCUlSREFfQUNUSVNZU19ET05HTEUgICAgICA9IDIsCglJUkRBX0FDVElTWVNfUExVU19ET05HTEUgPSAzLAoJSVJEQV9HSVJCSUxfRE9OR0xFICAgICAgID0gNCwKCUlSREFfTElURUxJTktfRE9OR0xFICAgICA9IDUsCglJUkRBX0FJUlBPUlRfRE9OR0xFICAgICAgPSA2LAoJSVJEQV9PTERfQkVMS0lOX0RPTkdMRSAgID0gNywKCUlSREFfRVA3MjExX0lSICAgICAgICAgICA9IDgsCglJUkRBX01DUDIxMjBfRE9OR0xFICAgICAgPSA5LAoJSVJEQV9BQ1QyMDBMX0RPTkdMRSAgICAgID0gMTAsCglJUkRBX01BNjAwX0RPTkdMRSAgICAgICAgPSAxMSwKfSBJUkRBX0RPTkdMRTsKCi8qIFByb3RvY29sIHR5cGVzIHRvIGJlIHVzZWQgZm9yIFNPQ0tfREdSQU0gKi8KZW51bSB7CglJUkRBUFJPVE9fVU5JVERBVEEgPSAwLAoJSVJEQVBST1RPX1VMVFJBICAgID0gMSwKCUlSREFQUk9UT19NQVgKfTsKCiNkZWZpbmUgU09MX0lSTE1QICAgICAgMjY2IC8qIFNhbWUgYXMgU09MX0lSREEgZm9yIG5vdyAqLwojZGVmaW5lIFNPTF9JUlRUUCAgICAgIDI2NiAvKiBTYW1lIGFzIFNPTF9JUkRBIGZvciBub3cgKi8KCiNkZWZpbmUgSVJMTVBfRU5VTURFVklDRVMgICAgICAgIDEJLyogUmV0dXJuIGRpc2NvdmVyeSBsb2cgKi8KI2RlZmluZSBJUkxNUF9JQVNfU0VUICAgICAgICAgICAgMgkvKiBTZXQgYW4gYXR0cmlidXRlIGluIGxvY2FsIElBUyAqLwojZGVmaW5lIElSTE1QX0lBU19RVUVSWSAgICAgICAgICAzCS8qIFF1ZXJ5IHJlbW90ZSBJQVMgZm9yIGF0dHJpYnV0ZSAqLwojZGVmaW5lIElSTE1QX0hJTlRTX1NFVCAgICAgICAgICA0CS8qIFNldCBoaW50IGJpdHMgYWR2ZXJ0aXNlZCAqLwojZGVmaW5lIElSTE1QX1FPU19TRVQgICAgICAgICAgICA1CiNkZWZpbmUgSVJMTVBfUU9TX0dFVCAgICAgICAgICAgIDYKI2RlZmluZSBJUkxNUF9NQVhfU0RVX1NJWkUgICAgICAgNwojZGVmaW5lIElSTE1QX0lBU19HRVQgICAgICAgICAgICA4CS8qIEdldCBhbiBhdHRyaWJ1dGUgZnJvbSBsb2NhbCBJQVMgKi8KI2RlZmluZSBJUkxNUF9JQVNfREVMCQkgOQkvKiBSZW1vdmUgYXR0cmlidXRlIGZyb20gbG9jYWwgSUFTICovCiNkZWZpbmUgSVJMTVBfSElOVF9NQVNLX1NFVAkxMAkvKiBTZXQgZGlzY292ZXJ5IGZpbHRlciAqLwojZGVmaW5lIElSTE1QX1dBSVRERVZJQ0UJMTEJLyogV2FpdCBmb3IgYSBuZXcgZGlzY292ZXJ5ICovCgojZGVmaW5lIElSVFRQX01BWF9TRFVfU0laRSBJUkxNUF9NQVhfU0RVX1NJWkUgLyogQ29tcGF0aWJpbGl0eSAqLwoKI2RlZmluZSBJQVNfTUFYX1NUUklORyAgICAgICAgIDI1NgkvKiBTZWUgSXJMTVAgMS4xLCA0LjMuMy4yICovCiNkZWZpbmUgSUFTX01BWF9PQ1RFVF9TVFJJTkcgIDEwMjQJLyogU2VlIElyTE1QIDEuMSwgNC4zLjMuMiAqLwojZGVmaW5lIElBU19NQVhfQ0xBU1NOQU1FICAgICAgIDYwCS8qIFNlZSBJckxNUCAxLjEsIDQuMy4xICovCiNkZWZpbmUgSUFTX01BWF9BVFRSSUJOQU1FICAgICAgNjAJLyogU2VlIElyTE1QIDEuMSwgNC4zLjMuMSAqLwojZGVmaW5lIElBU19NQVhfQVRUUklCTlVNQkVSICAgMjU2CS8qIFNlZSBJckxNUCAxLjEsIDQuMy4zLjEgKi8KLyogRm9yIHVzZXIgc3BhY2UgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAtIG1heSBiZSBmaXhlZCBpbiBrZXJuZWwgMi41LlgKICogTm90ZSA6IG5lZWQgNjArMSAoJ1wwJyksIG1ha2UgaXQgNjQgZm9yIGFsaWduZW1lbnQgLSBKZWFuIElJICovCiNkZWZpbmUgSUFTX0VYUE9SVF9DTEFTU05BTUUgICAgICAgNjQKI2RlZmluZSBJQVNfRVhQT1JUX0FUVFJJQk5BTUUgICAgIDI1NgoKLyogQXR0cmlidXRlIHR5cGUgbmVlZGVkIGZvciBzdHJ1Y3QgaXJkYV9pYXNfc2V0ICovCiNkZWZpbmUgSUFTX01JU1NJTkcgMAojZGVmaW5lIElBU19JTlRFR0VSIDEKI2RlZmluZSBJQVNfT0NUX1NFUSAyCiNkZWZpbmUgSUFTX1NUUklORyAgMwoKI2RlZmluZSBMU0FQX0FOWSAgICAgICAgICAgICAgMHhmZgoKc3RydWN0IHNvY2thZGRyX2lyZGEgewoJc2FfZmFtaWx5X3Qgc2lyX2ZhbWlseTsgICAvKiBBRl9JUkRBICovCglfX3U4ICAgICAgICBzaXJfbHNhcF9zZWw7IC8qIExTQVAgc2VsZWN0b3IgKi8KCV9fdTMyICAgICAgIHNpcl9hZGRyOyAgICAgLyogRGV2aWNlIGFkZHJlc3MgKi8KCWNoYXIgICAgICAgIHNpcl9uYW1lWzI1XTsgLyogVXN1YWxseSA8c2VydmljZT46SXJEQTpUaW55VFAgKi8KfTsKCnN0cnVjdCBpcmRhX2RldmljZV9pbmZvIHsKCV9fdTMyICAgICAgIHNhZGRyOyAgICAvKiBBZGRyZXNzIG9mIGxvY2FsIGludGVyZmFjZSAqLwoJX191MzIgICAgICAgZGFkZHI7ICAgIC8qIEFkZHJlc3Mgb2YgcmVtb3RlIGRldmljZSAqLwoJY2hhciAgICAgICAgaW5mb1syMl07IC8qIERlc2NyaXB0aW9uICovCglfX3U4ICAgICAgICBjaGFyc2V0OyAgLyogQ2hhcnNldCB1c2VkIGZvciBkZXNjcmlwdGlvbiAqLwoJX191OCAgICAgICAgaGludHNbMl07IC8qIEhpbnQgYml0cyAqLwp9OwoKc3RydWN0IGlyZGFfZGV2aWNlX2xpc3QgewogICAgICAgX191MzIgbGVuOwogICAgICAgc3RydWN0IGlyZGFfZGV2aWNlX2luZm8gZGV2WzFdOwp9OwoKc3RydWN0IGlyZGFfaWFzX3NldCB7CgljaGFyIGlyZGFfY2xhc3NfbmFtZVtJQVNfRVhQT1JUX0NMQVNTTkFNRV07CgljaGFyIGlyZGFfYXR0cmliX25hbWVbSUFTX0VYUE9SVF9BVFRSSUJOQU1FXTsKCXVuc2lnbmVkIGludCBpcmRhX2F0dHJpYl90eXBlOwoJdW5pb24gewoJCXVuc2lnbmVkIGludCBpcmRhX2F0dHJpYl9pbnQ7CgkJc3RydWN0IHsKCQkJdW5zaWduZWQgc2hvcnQgbGVuOwoJCQlfX3U4IG9jdGV0X3NlcVtJQVNfTUFYX09DVEVUX1NUUklOR107CgkJfSBpcmRhX2F0dHJpYl9vY3RldF9zZXE7CgkJc3RydWN0IHsKCQkJX191OCBsZW47CgkJCV9fdTggY2hhcnNldDsKCQkJX191OCBzdHJpbmdbSUFTX01BWF9TVFJJTkddOwoJCX0gaXJkYV9hdHRyaWJfc3RyaW5nOwoJfSBhdHRyaWJ1dGU7CglfX3UzMiAgICAgICBkYWRkcjsgICAgLyogQWRkcmVzcyBvZiBkZXZpY2UgKGZvciBzb21lIHF1ZXJpZXMgb25seSkgKi8KfTsKCi8qIFNvbWUgcHJpdmF0ZSBJT0NUTCdzIChtYXggMTYpICovCiNkZWZpbmUgU0lPQ1NET05HTEUgICAgKFNJT0NERVZQUklWQVRFICsgMCkKI2RlZmluZSBTSU9DR0RPTkdMRSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAxKQojZGVmaW5lIFNJT0NTQkFORFdJRFRIIChTSU9DREVWUFJJVkFURSArIDIpCiNkZWZpbmUgU0lPQ1NNRURJQUJVU1kgKFNJT0NERVZQUklWQVRFICsgMykKI2RlZmluZSBTSU9DR01FRElBQlVTWSAoU0lPQ0RFVlBSSVZBVEUgKyA0KQojZGVmaW5lIFNJT0NHUkVDRUlWSU5HIChTSU9DREVWUFJJVkFURSArIDUpCiNkZWZpbmUgU0lPQ1NNT0RFICAgICAgKFNJT0NERVZQUklWQVRFICsgNikKI2RlZmluZSBTSU9DR01PREUgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA3KQojZGVmaW5lIFNJT0NTRFRSUlRTICAgIChTSU9DREVWUFJJVkFURSArIDgpCiNkZWZpbmUgU0lPQ0dRT1MgICAgICAgKFNJT0NERVZQUklWQVRFICsgOSkKCi8qIE5vIHJlYXNvbiB0byBpbmNsdWRlIDxsaW51eC9pZi5oPiBqdXN0IGJlY2F1c2Ugb2YgdGhpcyBvbmUgOy0pICovCiNkZWZpbmUgSVJOQU1TSVogMTYgCgovKiBJckRBIHF1YWxpdHkgb2Ygc2VydmljZSBpbmZvcm1hdGlvbiAobXVzdCBub3QgZXhjZWVkIDE2IGJ5dGVzKSAqLwpzdHJ1Y3QgaWZfaXJkYV9xb3MgewoJdW5zaWduZWQgbG9uZyAgYmF1ZHJhdGU7Cgl1bnNpZ25lZCBzaG9ydCBkYXRhX3NpemU7Cgl1bnNpZ25lZCBzaG9ydCB3aW5kb3dfc2l6ZTsKCXVuc2lnbmVkIHNob3J0IG1pbl90dXJuX3RpbWU7Cgl1bnNpZ25lZCBzaG9ydCBtYXhfdHVybl90aW1lOwoJdW5zaWduZWQgY2hhciAgYWRkX2JvZnM7Cgl1bnNpZ25lZCBjaGFyICBsaW5rX2Rpc2M7Cn07CgovKiBGb3Igc2V0dGluZyBSVFMgYW5kIERUUiBsaW5lcyBvZiBhIGRvbmdsZSAqLwpzdHJ1Y3QgaWZfaXJkYV9saW5lIHsKCV9fdTggZHRyOwoJX191OCBydHM7Cn07CgovKiBJckRBIGludGVyZmFjZSBjb25maWd1cmF0aW9uIChkYXRhIHBhcnQgbXVzdCBub3QgZXhjZWVkIDE2IGJ5dGVzKSAqLwpzdHJ1Y3QgaWZfaXJkYV9yZXEgewoJdW5pb24gewoJCWNoYXIgaWZybl9uYW1lW0lSTkFNU0laXTsgIC8qIGlmIG5hbWUsIGUuZy4gImlyZGEwIiAqLwoJfSBpZnJfaWZybjsKCQoJLyogRGF0YSBwYXJ0ICovCgl1bmlvbiB7CgkJc3RydWN0IGlmX2lyZGFfbGluZSBpZnJ1X2xpbmU7CgkJc3RydWN0IGlmX2lyZGFfcW9zICBpZnJ1X3FvczsKCQl1bnNpZ25lZCBzaG9ydCAgICAgIGlmcnVfZmxhZ3M7CgkJdW5zaWduZWQgaW50ICAgICAgICBpZnJ1X3JlY2VpdmluZzsKCQl1bnNpZ25lZCBpbnQgICAgICAgIGlmcnVfbW9kZTsKCQl1bnNpZ25lZCBpbnQgICAgICAgIGlmcnVfZG9uZ2xlOwoJfSBpZnJfaWZydTsKfTsKCiNkZWZpbmUgaWZyX2JhdWRyYXRlICBpZnJfaWZydS5pZnJ1X3Fvcy5iYXVkcmF0ZQojZGVmaW5lIGlmcl9yZWNlaXZpbmcgaWZyX2lmcnUuaWZydV9yZWNlaXZpbmcgCiNkZWZpbmUgaWZyX2RvbmdsZSAgICBpZnJfaWZydS5pZnJ1X2RvbmdsZQojZGVmaW5lIGlmcl9tb2RlICAgICAgaWZyX2lmcnUuaWZydV9tb2RlCiNkZWZpbmUgaWZyX2R0ciAgICAgICBpZnJfaWZydS5pZnJ1X2xpbmUuZHRyCiNkZWZpbmUgaWZyX3J0cyAgICAgICBpZnJfaWZydS5pZnJ1X2xpbmUucnRzCgojZW5kaWYgLyogS0VSTkVMX0lSREFfSCAqLwoKCgoK