LyoKICogQ29weXJpZ2h0IKkgMTk5Ny0yMDA3IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAogKgogKiAkSWQ6IHN4Z2h3LmgsdiAxLjIgMjAwOC8wNy8yNCAxNzoyNDoyMyBjaHJpcyBFeHAgJAogKgogKiBzeGdody5oOgogKgogKiBUaGlzIGZpbGUgY29udGFpbnMgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZQogKiBBbGFjcml0ZWNoIFNhaGFyYSBoYXJkd2FyZQogKi8KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBDb25maWd1cmF0aW9uIHNwYWNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiAgUENJIFZlbmRvciBJRCAqLwojZGVmaW5lIFNYR19WRU5ET1JfSUQJCQkweDEzOUEJLyogQWxhY3JpdGVjaCdzIFZlbmRvciBJRCAqLwoKLy8gIFBDSSBEZXZpY2UgSUQKI2RlZmluZSBTWEdfREVWSUNFX0lECQkJMHgwMDA5CS8qIFNhaGFyYSBEZXZpY2UgSUQgKi8KCi8vCi8vIFN1YnN5c3RlbSBJRHMuCi8vCi8vIFRoZSBzdWJzeXN0ZW0gSUQgdmFsdWUgaXMgYnJva2VuIGludG8gYml0IGZpZWxkcyBhcyBmb2xsb3dzOgovLwkJQml0cyBbMTU6MTJdIC0gRnVuY3Rpb24KLy8JCUJpdHMgWzExOjhdICAtIE9FTSBhbmQvb3Igb3BlcmF0aW5nIHN5c3RlbS4KLy8JCUJpdHMgWzc6MF0gICAtIEJhc2UgU0lELgovLwovLyBTU0lEIGZpZWxkIChiaXQpIG1hc2tzCiNkZWZpbmUgU1NJRF9CQVNFX01BU0sJCQkJCTB4MDBGRgkvLyBCYXNlIHN1YnN5c3RlbSBJRCBtYXNrCiNkZWZpbmUgU1NJRF9PRU1fTUFTSwkJCQkJMHgwRjAwCS8vIFN1YnN5c3RlbSBPRU0gbWFzawojZGVmaW5lIFNTSURfRlVOQ19NQVNLCQkJCQkweEYwMDAJLy8gU3Vic3lzdGVtIGZ1bmN0aW9uIG1hc2sKCi8vIEJhc2UgU1NJRCdzCiNkZWZpbmUgU1NJRF9TQUhBUkFfUFJPVE8JCQkJMHgwMDE4CS8vIDEwMDAyMiBTYWhhcmEgcHJvdG90eXBlIChYZW5QYWspIGJvYXJkCiNkZWZpbmUgU1NJRF9TQUhBUkFfRklCRVIJCQkJMHgwMDE5CS8vIDEwMDAyMyBTYWhhcmEgMS1wb3J0IGZpYmVyIGJvYXJkCiNkZWZpbmUgU1NJRF9TQUhBUkFfQ09QUEVSCQkJCTB4MDAxQQkvLyAxMDAwMjQgU2FoYXJhIDEtcG9ydCBjb3BwZXIgYm9hcmQKCi8vIFVzZWZ1bCBTU0lEIG1hY3JvcwojZGVmaW5lCVNTSURfQkFTRShzc2lkKQkJCSgoc3NpZCkgJiBTU0lEX0JBU0VfTUFTSykJCS8vIGlzb2xhdGUgYmFzZSBTU0lEIGJpdHMKI2RlZmluZQlTU0lEX09FTShzc2lkKQkJCSgoc3NpZCkgJiBTU0lEX09FTV9NQVNLKQkJLy8gaXNvbGF0ZSBTU0lEIE9FTSBiaXRzCiNkZWZpbmUJU1NJRF9GVU5DKHNzaWQpCQkJKChzc2lkKSAmIFNTSURfRlVOQ19NQVNLKQkJLy8gaXNvbGF0ZSBTU0lEIGZ1bmN0aW9uIGJpdHMKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEhXIFJlZ2lzdGVyIFNwYWNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIFNYR19IV1JFR19NRU1TSVpFCTB4NDAwMAkJLy8gMTZrCgojcHJhZ21hIHBhY2socHVzaCwgMSkKc3RydWN0IFNYR19IV19SRUdTIHsKCXUzMgkJUmVzZXQ7CQkJCS8vIFdyaXRlIDB4ZGVhZCB0byBpbnZva2Ugc29mdCByZXNldAoJdTMyCQlQYWQxOwkJCQkvLyBObyByZWdpc3RlciBkZWZpbmVkIGF0IG9mZnNldCA0Cgl1MzIJCUludGVycnVwdE1hc2swOwkJLy8gRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAwCgl1MzIJCUludGVycnVwdE1hc2sxOwkJLy8gRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAxCgl1MzIJCVVjb2RlRGF0YUxvdzsJCS8vIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDMxLTAKCXUzMgkJVWNvZGVEYXRhTWlkZGxlOwkvLyBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyA2My0zMgoJdTMyCQlVY29kZURhdGFIaWdoOwkJLy8gU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgOTUtNjQKCXUzMgkJVWNvZGVBZGRyOwkJCS8vIFN0b3JlIG1pY3JvY29kZSBhZGRyZXNzIC0gU2VlIGZsYWdzIGJlbG93Cgl1MzIJCVBhZFRvMHg4MFsyNF07CQkvLyBQYWQgdG8gWGN2IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCgl1MzIJCU1hY0NvbmZpZzA7CQkJLy8gMHg4MCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKCXUzMgkJTWFjQ29uZmlnMTsJCQkvLyAweDg0IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQoJdTMyCQlNYWNDb25maWcyOwkJCS8vIDB4ODggLSBBWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCgl1MzIJCU1hY0NvbmZpZzM7CQkJLy8gMHg4QyAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKCXUzMgkJTWFjQWRkcmVzc0xvdzsJCS8vIDB4OTAgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyAxLTQKCXUzMgkJTWFjQWRkcmVzc0hpZ2g7CQkvLyAweDk0IC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgNS02Cgl1MzIJCU1hY1Jlc2VydmVkMVsyXTsJLy8gMHg5OCAtIEFYR01BQyBSZXNlcnZlZAoJdTMyCQlNYWNNYXhGcmFtZUxlbjsJCS8vIDB4QTAgLSBBWEdNQUMgTWF4aW11bSBGcmFtZSBMZW5ndGgKCXUzMgkJTWFjUmVzZXJ2ZWQyWzJdOwkvLyAweEE0IC0gQVhHTUFDIFJlc2VydmVkCgl1MzIJCU1hY1JldmlzaW9uOwkJLy8gMHhBQyAtIEFYR01BQyBSZXZpc2lvbiBMZXZlbCBSZWdpc3RlcgoJdTMyCQlNYWNSZXNlcnZlZDNbNF07CS8vIDB4QjAgLSBBWEdNQUMgUmVzZXJ2ZWQKCXUzMgkJTWFjQW1paW1DbWQ7CQkvLyAweEMwIC0gQVhHTUFDIEFNSUlNIENvbW1hbmQgUmVnaXN0ZXIKCXUzMgkJTWFjQW1paW1GaWVsZDsJCS8vIDB4QzQgLSBBWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKCXUzMgkJTWFjQW1paW1Db25maWc7CQkvLyAweEM4IC0gQVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKCXUzMgkJTWFjQW1paW1MaW5rOwkJLy8gMHhDQyAtIEFYR01BQyBBTUlJTSBMaW5rIEZhaWwgVmVjdG9yIFJlZ2lzdGVyCgl1MzIJCU1hY0FtaWltSW5kaWNhdG9yOwkvLyAweEQwIC0gQVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RvcgoJdTMyCQlQYWRUbzB4MTAwWzExXTsJCS8vIDB4RDQgLSAweDEwMCAtIFBhZAoJdTMyCQlYbXRDb25maWc7CQkJLy8gMHgxMDAgLSBUcmFuc21pdCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCgl1MzIJCVJjdkNvbmZpZzsJCQkvLyAweDEwNCAtIFJlY2VpdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCgl1MzIJCUxpbmtBZGRyZXNzMExvdzsJLy8gMHgxMDggLSBMaW5rIGFkZHJlc3MgMAoJdTMyCQlMaW5rQWRkcmVzczBIaWdoOwkvLyAweDEwQyAtIExpbmsgYWRkcmVzcyAwCgl1MzIJCUxpbmtBZGRyZXNzMUxvdzsJLy8gMHgxMTAgLSBMaW5rIGFkZHJlc3MgMQoJdTMyCQlMaW5rQWRkcmVzczFIaWdoOwkvLyAweDExNCAtIExpbmsgYWRkcmVzcyAxCgl1MzIJCUxpbmtBZGRyZXNzMkxvdzsJLy8gMHgxMTggLSBMaW5rIGFkZHJlc3MgMgoJdTMyCQlMaW5rQWRkcmVzczJIaWdoOwkvLyAweDExQyAtIExpbmsgYWRkcmVzcyAyCgl1MzIJCUxpbmtBZGRyZXNzM0xvdzsJLy8gMHgxMjAgLSBMaW5rIGFkZHJlc3MgMwoJdTMyCQlMaW5rQWRkcmVzczNIaWdoOwkvLyAweDEyNCAtIExpbmsgYWRkcmVzcyAzCgl1MzIJCVRvZXBsaXR6S2V5WzEwXTsJLy8gMHgxMjggLSAweDE1MCAtIFRvZXBsaXR6IGtleQoJdTMyCQlTb2NrZXRLZXlbMTBdOwkJLy8gMHgxNTAgLSAweDE3OCAtIFNvY2tldCBLZXkKCXUzMgkJTGlua1N0YXR1czsJCQkvLyAweDE3OCAtIExpbmsgc3RhdHVzCgl1MzIJCUNsZWFyU3RhdHM7CQkJLy8gMHgxN0MgLSBDbGVhciBTdGF0cwoJdTMyCQlYbXRFcnJvcnNMb3c7CQkvLyAweDE4MCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzCgl1MzIJCVhtdEVycm9yc0hpZ2g7CQkvLyAweDE4NCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzCgl1MzIJCVhtdEZyYW1lc0xvdzsJCS8vIDB4MTg4IC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAoJdTMyCQlYbXRGcmFtZXNIaWdoOwkJLy8gMHgxOEMgLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50Cgl1MzIJCVhtdEJ5dGVzTG93OwkJLy8gMHgxOTAgLSBUcmFuc21pdCBzdGF0cyAtIGJ5dGUgY291bnQKCXUzMgkJWG10Qnl0ZXNIaWdoOwkJLy8gMHgxOTQgLSBUcmFuc21pdCBzdGF0cyAtIGJ5dGUgY291bnQKCXUzMgkJWG10VGNwU2VnbWVudHNMb3c7CS8vIDB4MTk4IC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMKCXUzMgkJWG10VGNwU2VnbWVudHNIaWdoOwkvLyAweDE5QyAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIHNlZ21lbnRzCgl1MzIJCVhtdFRjcEJ5dGVzTG93OwkJLy8gMHgxQTAgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBieXRlcwoJdTMyCQlYbXRUY3BCeXRlc0hpZ2g7CS8vIDB4MUE0IC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1AgYnl0ZXMKCXUzMgkJUmN2RXJyb3JzTG93OwkJLy8gMHgxQTggLSBSZWNlaXZlIHN0YXRzIC0gZXJyb3JzCgl1MzIJCVJjdkVycm9yc0hpZ2g7CQkvLyAweDFBQyAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKCXUzMgkJUmN2RnJhbWVzTG93OwkJLy8gMHgxQjAgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQKCXUzMgkJUmN2RnJhbWVzSGlnaDsJCS8vIDB4MUI0IC0gUmVjZWl2ZSBzdGF0cyAtIGZyYW1lIGNvdW50Cgl1MzIJCVJjdkJ5dGVzTG93OwkJLy8gMHgxQjggLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAoJdTMyCQlSY3ZCeXRlc0hpZ2g7CQkvLyAweDFCQyAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50Cgl1MzIJCVJjdlRjcFNlZ21lbnRzTG93OwkvLyAweDFDMCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1Agc2VnbWVudHMKCXUzMgkJUmN2VGNwU2VnbWVudHNIaWdoOwkvLyAweDFDNCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1Agc2VnbWVudHMKCXUzMgkJUmN2VGNwQnl0ZXNMb3c7CQkvLyAweDFDOCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1AgYnl0ZXMKCXUzMgkJUmN2VGNwQnl0ZXNIaWdoOwkvLyAweDFDQyAtIFJlY2VpdmUgc3RhdHMgLSBUQ1AgYnl0ZXMKCXUzMgkJUGFkVG8weDIwMFsxMl07CQkvLyAweDFEMCAtIDB4MjAwIC0gUGFkCgl1MzIJCVNvZnR3YXJlWzE5MjBdOwkJLy8gMHgyMDAgLSAweDIwMDAgLSBTb2Z0d2FyZSBkZWZpbmVkIChub3QgdXNlZCkKCXUzMgkJTXNpeFRhYmxlWzEwMjRdOwkvLyAweDIwMDAgLSAweDMwMDAgLSBNU0lYIFRhYmxlCgl1MzIJCU1zaXhCaXRBcnJheVsxMDI0XTsJLy8gMHgzMDAwIC0gMHg0MDAwIC0gTVNJWCBQZW5kaW5nIEJpdCBBcnJheQp9OwojcHJhZ21hIHBhY2socG9wKQoKLy8gTWljcm9jb2RlIEFkZHJlc3MgRmxhZ3MKI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19HTwkJMHg4MDAwMDAwMAkvLyBTdGFydCBtaWNyb2NvZGUKI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19XUklURQkJMHg0MDAwMDAwMAkvLyBTdG9yZSBtaWNyb2NvZGUKI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19SRUFECQkweDIwMDAwMDAwCS8vIFJlYWQgbWljcm9jb2RlCiNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfUEFSSVRZCTB4MTAwMDAwMDAJLy8gUGFyaXR5IGVycm9yIGRldGVjdGVkCiNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfTUFTSwkJMHgwMDAwMUZGRgkvLyBBZGRyZXNzIGJpdHMKCi8vIExpbmsgQWRkcmVzcyBSZWdpc3RlcnMKI2RlZmluZSBMSU5LX0FERFJFU1NfRU5BQkxFCQkJMHg4MDAwMDAwMAkvLyBBcHBsaWVkIHRvIGxpbmsgYWRkcmVzcyBoaWdoCgovLyBNaWNyb3NvZnQgcmVnaXN0ZXIgc3BhY2Ugc2l6ZQojZGVmaW5lIFNYR19VQ09ERVJFR19NRU1TSVpFCTB4NDAwMDAJCS8vIDI1NmsKCi8vIFNhaGFyYSBtaWNyb2NvZGUgcmVnaXN0ZXIgYWRkcmVzcyBmb3JtYXQuICBUaGUgY29tbWFuZCBjb2RlLAovLyBleHRlbmRlZCBjb21tYW5kIGNvZGUsIGFuZCBhc3NvY2lhdGVkIHByb2Nlc3NvciBhcmUgZW5jb2RlZCBpbgovLyB0aGUgYWRkcmVzcyBiaXRzIGFzIGZvbGxvd3MKI2RlZmluZSBTWEdfQUREUkVTU19DT0RFX1NISUZUCQkyCQkJLy8gQmFzZSBjb21tYW5kIGNvZGUKI2RlZmluZSBTWEdfQUREUkVTU19DT0RFX01BU0sJCTB4MDAwMDAwM0MKI2RlZmluZSBTWEdfQUREUkVTU19FWENPREVfU0hJRlQJNgkJCS8vIEV4dGVuZGVkIChvciBzdWIpIGNvbW1hbmQgY29kZQojZGVmaW5lIFNYR19BRERSRVNTX0VYQ09ERV9NQVNLCQkweDAwMDAxRkMwCiNkZWZpbmUJU1hHX0FERFJFU1NfQ1BVSURfU0hJRlQJCTEzCQkJLy8gQ1BVCiNkZWZpbmUgU1hHX0FERFJFU1NfQ1BVSURfTUFTSwkJMHgwMDAzRTAwMAojZGVmaW5lIFNYR19SRUdJU1RFUl9TSVpFX1BFUl9DUFUJMHgwMDAwMjAwMAkvLyBVc2VkIHRvIHNhbml0eSBjaGVjayBVQ09ERV9SRUdTIHN0cnVjdHVyZQoKLy8gU2FoYXJhIHJlY2VpdmUgc2VxdWVuY2VyIHN0YXR1cyB2YWx1ZXMKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BVFROCQkJMHg4MDAwMDAwMAkvLyBBdHRlbnRpb24KI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTUFTSwkJMHgzRjAwMDAwMAkvLyBUcmFuc3BvcnQgbWFzawojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9FUlJPUgkJMHgyMDAwMDAwMAkvLyBUcmFuc3BvcnQgZXJyb3IKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTQkJMHgyMzAwMDAwMAkvLyBUcmFuc3BvcnQgY2tzdW0gZXJyb3IKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfVUZMT1cJCTB4MjIwMDAwMDAJLy8gVHJhbnNwb3J0IHVuZGVyZmxvdwojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4JCTB4MjAwMDAwMDAJLy8gVHJhbnNwb3J0IGhlYWRlciBsZW5ndGgKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRkxBR1MJCTB4MTAwMDAwMDAJLy8gVHJhbnNwb3J0IGZsYWdzIGRldGVjdGVkCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX09QVFMJCTB4MDgwMDAwMDAJLy8gVHJhbnNwb3J0IG9wdGlvbnMgZGV0ZWN0ZWQKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfU0VTU19NQVNLCTB4MDcwMDAwMDAJLy8gVHJhbnNwb3J0IEREUAojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ERFAJCTB4MDYwMDAwMDAJLy8gVHJhbnNwb3J0IEREUAojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9pU0NTSQkJMHgwNTAwMDAwMAkvLyBUcmFuc3BvcnQgaVNDU0kKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTkZTCQkweDA0MDAwMDAwCS8vIFRyYW5zcG9ydCBORlMKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRlRQCQkweDAzMDAwMDAwCS8vIFRyYW5zcG9ydCBGVFAKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSFRUUAkJMHgwMjAwMDAwMAkvLyBUcmFuc3BvcnQgSFRUUAojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TTUIJCTB4MDEwMDAwMDAJLy8gVHJhbnNwb3J0IFNNQgojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUFTSwkJMHgwMEZGMDAwMAkvLyBOZXR3b3JrIG1hc2sKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0VSUk9SCQkweDAwODAwMDAwCS8vIE5ldHdvcmsgZXJyb3IKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU0JCTB4MDA4MzAwMDAJLy8gTmV0d29yayBja3N1bSBlcnJvcgojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1cJCTB4MDA4MjAwMDAJLy8gTmV0d29yayB1bmRlcmZsb3cgZXJyb3IKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTgkJMHgwMDgwMDAwMAkvLyBOZXR3b3JrIGhlYWRlciBsZW5ndGgKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09GTE9XCQkweDAwNDAwMDAwCS8vIE5ldHdvcmsgb3ZlcmZsb3cgZGV0ZWN0ZWQKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01DQVNUCQkweDAwMjAwMDAwCS8vIE5ldHdvcmsgbXVsdGljYXN0IGRldGVjdGVkCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PUFRJT05TCQkweDAwMTAwMDAwCS8vIE5ldHdvcmsgb3B0aW9ucyBkZXRlY3RlZAojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZGU0VUCQkweDAwMDgwMDAwCS8vIE5ldHdvcmsgb2Zmc2V0IGRldGVjdGVkCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19GUkFHTUVOVAkJMHgwMDA0MDAwMAkvLyBOZXR3b3JrIGZyYWdtZW50IGRldGVjdGVkCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UUkFOU19NQVNLCTB4MDAwMzAwMDAJLy8gTmV0d29yayB0cmFuc3BvcnQgdHlwZSBtYXNrCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19VRFAJCTB4MDAwMjAwMDAJLy8gVURQCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UQ1AJCTB4MDAwMTAwMDAJLy8gVENQCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfSVBPTkxZCQkJMHgwMDAwODAwMAkvLyBJUC1vbmx5IG5vdCBUQ1AKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19QS1RfUFJJCQkJMHgwMDAwNjAwMAkvLyBSZWNlaXZlIHByaW9yaXR5CiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSV9TSEZUCQkJMTMJLy8gUmVjZWl2ZSBwcmlvcml0eSBzaGlmdAojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BBUklUWQkJCTB4MDAwMDEwMDAJLy8gTUFDIFJlY2VpdmUgUkFNIHBhcml0eSBlcnJvcgojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUFTSwkJMHgwMDAwMEYwMAkvLyBMaW5rIGFkZHJlc3MgZGV0ZWN0aW9uIG1hc2sKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0QJCTB4MDAwMDBCMDAJLy8gTGluayBhZGRyZXNzIEQKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0MJCTB4MDAwMDBBMDAJLy8gTGluayBhZGRyZXNzIEMKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0IJCTB4MDAwMDA5MDAJLy8gTGluayBhZGRyZXNzIEIKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0EJCTB4MDAwMDA4MDAJLy8gTGluayBhZGRyZXNzIEEKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0JDQVNUCQkweDAwMDAwMzAwCS8vIExpbmsgYWRkcmVzcyBicm9hZGNhc3QKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX01DQVNUCQkweDAwMDAwMjAwCS8vIExpbmsgYWRkcmVzcyBtdWx0aWNhc3QKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0NNQ0FTVAkJMHgwMDAwMDEwMAkvLyBMaW5rIGNvbnRyb2wgbXVsdGljYXN0CiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkweDAwMDAwMEZGCS8vIExpbmsgc3RhdHVzIG1hc2sKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VSUk9SCQkweDAwMDAwMDgwCS8vIExpbmsgZXJyb3IKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX01BU0sJCTB4MDAwMDAwRkYJLy8gTGluayBzdGF0dXMgbWFzawojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfUEFSSVRZCQkweDAwMDAwMDg3CS8vIFJjdk1hY1EgcGFyaXR5IGVycm9yCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19FQVJMWQkJMHgwMDAwMDA4NgkvLyBEYXRhIGVhcmx5CiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19CVUZPRkxPVwkJMHgwMDAwMDA4NQkvLyBCdWZmZXIgb3ZlcmZsb3cKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREUJCTB4MDAwMDAwODQJLy8gTGluayBjb2RlIGVycm9yCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFCQkweDAwMDAwMDgzCS8vIERyaWJibGUgbmliYmxlCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DUkMJCQkweDAwMDAwMDgyCS8vIENSQyBlcnJvcgojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfT0ZMT1cJCTB4MDAwMDAwODEJLy8gTGluayBvdmVyZmxvdwojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVUZMT1cJCTB4MDAwMDAwODAJLy8gTGluayB1bmRlcmZsb3cKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LXzgwMjMJCTB4MDAwMDAwMjAJLy8gODAyLjMKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1NOQVAJCTB4MDAwMDAwMTAJLy8gU25hcAojZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVkxBTgkJMHgwMDAwMDAwOAkvLyBWTEFOCiNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19UWVBFX01BU0sJCTB4MDAwMDAwMDcJLy8gTmV0d29yayB0eXBlIG1hc2sKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPTlRST0wJCTB4MDAwMDAwMDMJLy8gQ29udHJvbCBwYWNrZXQKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjYJCTB4MDAwMDAwMDIJLy8gSVB2NiBwYWNrZXQKI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjQJCTB4MDAwMDAwMDEJLy8gSVB2NCBwYWNrZXQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogU2FoYXJhIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUJUkNWX0NPTkZJR19SRVNFVAkJMHg4MDAwMDAwMAkvLyBSY3ZDb25maWcgcmVnaXN0ZXIgcmVzZXQKI2RlZmluZQlSQ1ZfQ09ORklHX0VOQUJMRQkJMHg0MDAwMDAwMAkvLyBFbmFibGUgdGhlIHJlY2VpdmUgbG9naWMKI2RlZmluZQlSQ1ZfQ09ORklHX0VOUEFSU0UJCTB4MjAwMDAwMDAJLy8gRW5hYmxlIHRoZSByZWNlaXZlIHBhcnNlcgojZGVmaW5lCVJDVl9DT05GSUdfU09DS0VUCQkweDEwMDAwMDAwCS8vIEVuYWJsZSB0aGUgc29ja2V0IGRldGVjdG9yCiNkZWZpbmUJUkNWX0NPTkZJR19SQ1ZCQUQJCTB4MDgwMDAwMDAJLy8gUmVjZWl2ZSBhbGwgYmFkIGZyYW1lcwojZGVmaW5lCVJDVl9DT05GSUdfQ09OVFJPTAkJMHgwNDAwMDAwMAkvLyBSZWNlaXZlIGFsbCBjb250cm9sIGZyYW1lcwojZGVmaW5lCVJDVl9DT05GSUdfUkNWUEFVU0UJCTB4MDIwMDAwMDAJLy8gRW5hYmxlIHBhdXNlIHRyYW5zbWl0IHdoZW4gYXR0bgojZGVmaW5lCVJDVl9DT05GSUdfVFpJUFY2CQkweDAxMDAwMDAwCS8vIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NiB0b2VwbGl0egojZGVmaW5lCVJDVl9DT05GSUdfVFpJUFY0CQkweDAwODAwMDAwCS8vIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NCB0b2VwbGl0egojZGVmaW5lCVJDVl9DT05GSUdfRkxVU0gJCTB4MDA0MDAwMDAJLy8gRmx1c2ggYnVmZmVycwojZGVmaW5lCVJDVl9DT05GSUdfUFJJT1JJVFlfTUFTSwkweDAwMzAwMDAwCS8vIFByaW9yaXR5IGxldmVsCiNkZWZpbmUJUkNWX0NPTkZJR19IQVNIX01BU0sJCTB4MDAwMzAwMDAJLy8gSGFzaCBkZXB0aAojZGVmaW5lCVJDVl9DT05GSUdfSEFTSF84CQkweDAwMDAwMDAwCS8vIEhhc2ggZGVwdGggOAojZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8xNgkJMHgwMDAxMDAwMAkvLyBIYXNoIGRlcHRoIDE2CiNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzQJCTB4MDAwMjAwMDAJLy8gSGFzaCBkZXB0aCA0CiNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzIJCTB4MDAwMzAwMDAJLy8gSGFzaCBkZXB0aCAyCiNkZWZpbmUJUkNWX0NPTkZJR19CVUZMRU5fTUFTSwkJMHgwMDAwRkZGMAkvLyBCdWZmZXIgbGVuZ3RoIGJpdHMgMTU6NC4gaWUgbXVsdGlwbGUgb2YgMTYuCiNkZWZpbmUgUkNWX0NPTkZJR19TS1RfRElTCQkweDAwMDAwMDA4CS8vIERpc2FibGUgc29ja2V0IGRldGVjdGlvbiBvbiBhdHRuCi8vIE1hY3JvIHRvIGRldGVybWluZSBSQ1ZfQ09ORklHX0JVRkxFTiBiYXNlZCBvbiBtYXhpbXVtIGZyYW1lIHNpemUuCi8vIFdlIGFkZCAxOCBieXRlcyBmb3IgU2FoYXJhIHJlY2VpdmUgc3RhdHVzIGFuZCBwYWRkaW5nLCBwbHVzIDQgYnl0ZXMgZm9yIENSQywKLy8gYW5kIHJvdW5kIHVwIHRvIG5lYXJlc3QgMTYgYnl0ZSBib3VuZGFyeQojZGVmaW5lIFJDVl9DT05GSUdfQlVGU0laRShfTWF4RnJhbWUpICgoKChfTWF4RnJhbWUpICsgMjIpICsgMTUpICYgUkNWX0NPTkZJR19CVUZMRU5fTUFTSykKCiNkZWZpbmUJWE1UX0NPTkZJR19SRVNFVAkJMHg4MDAwMDAwMAkvLyBYbXRDb25maWcgcmVnaXN0ZXIgcmVzZXQKI2RlZmluZQlYTVRfQ09ORklHX0VOQUJMRQkJMHg0MDAwMDAwMAkvLyBFbmFibGUgdHJhbnNtaXQgbG9naWMKI2RlZmluZQlYTVRfQ09ORklHX01BQ19QQVJJVFkJCTB4MjAwMDAwMDAJLy8gSW5oaWJpdCBNQUMgUkFNIHBhcml0eSBlcnJvcgojZGVmaW5lCVhNVF9DT05GSUdfQlVGX1BBUklUWQkJMHgxMDAwMDAwMAkvLyBJbmhpYml0IEQyRiBidWZmZXIgcGFyaXR5IGVycm9yCiNkZWZpbmUJWE1UX0NPTkZJR19NRU1fUEFSSVRZCQkweDA4MDAwMDAwCS8vIEluaGliaXQgMVQgU1JBTSBwYXJpdHkgZXJyb3IKI2RlZmluZQlYTVRfQ09ORklHX0lOVkVSVF9QQVJJVFkJMHgwNDAwMDAwMAkvLyBJbnZlcnQgTUFDIFJBTSBwYXJpdHkKI2RlZmluZQlYTVRfQ09ORklHX0lOSVRJQUxfSVBJRAkJMHgwMDAwRkZGRgkvLyBJbml0aWFsIElQSUQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQS1YR01BQyBSZWdpc3RlcnMgLSBPY2N1cHkgMHg4MCAtIDB4RDQgb2YgdGhlIFNYR19IV19SRUdTCiAqCiAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBheGdtYWMucGRmCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwCiNkZWZpbmUgQVhHTUFDX0NGRzBfU1VCX1JFU0VUCQkweDgwMDAwMDAwCQkvLyBTdWIgbW9kdWxlIHJlc2V0CiNkZWZpbmUgQVhHTUFDX0NGRzBfUkNOVFJMX1JFU0VUCTB4MDA0MDAwMDAJCS8vIFJlY2VpdmUgY29udHJvbCByZXNldAojZGVmaW5lIEFYR01BQ19DRkcwX1JGVU5DX1JFU0VUCQkweDAwMjAwMDAwCQkvLyBSZWNlaXZlIGZ1bmN0aW9uIHJlc2V0CiNkZWZpbmUgQVhHTUFDX0NGRzBfVENOVFJMX1JFU0VUCTB4MDAwNDAwMDAJCS8vIFRyYW5zbWl0IGNvbnRyb2wgcmVzZXQKI2RlZmluZSBBWEdNQUNfQ0ZHMF9URlVOQ19SRVNFVAkJMHgwMDAyMDAwMAkJLy8gVHJhbnNtaXQgZnVuY3Rpb24gcmVzZXQKI2RlZmluZSBBWEdNQUNfQ0ZHMF9NSUlfUkVTRVQJCTB4MDAwMTAwMDAJCS8vIE1JSSBNYW5hZ2VtZW50IHJlc2V0CgovLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQojZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9QQVVTRQkJMHg4MDAwMDAwMAkJLy8gQWxsb3cgdGhlIHNlbmRpbmcgb2YgUGF1c2UgZnJhbWVzCiNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX0VOCQkweDQwMDAwMDAwCQkvLyBFbmFibGUgdHJhbnNtaXQKI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UJCTB4MjAwMDAwMDAJCS8vIEFsbG93IHRoZSBkZXRlY3Rpb24gb2YgUGF1c2UgZnJhbWVzCiNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0VOCQkweDEwMDAwMDAwCQkvLyBFbmFibGUgcmVjZWl2ZQojZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9TVEFURQkJMHgwNDAwMDAwMAkJLy8gQ3VycmVudCB0cmFuc21pdCBzdGF0ZSAtIFJFQUQgT05MWQojZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVEFURQkJMHgwMTAwMDAwMAkJLy8gQ3VycmVudCByZWNlaXZlIHN0YXRlIC0gUkVBRCBPTkxZCiNkZWZpbmUgQVhHTUFDX0NGRzFfWE9GRl9TSE9SVAkJMHgwMDAwMTAwMAkJLy8gT25seSBwYXVzZSBmb3IgNjQgc2xvdCBvbiBYT0ZGCiNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzEJCTB4MDAwMDA0MDAJCS8vIERlbGF5IHRyYW5zbWl0IEZDUyAxIDQtYnl0ZSB3b3JkCiNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzIJCTB4MDAwMDA4MDAJCS8vIERlbGF5IHRyYW5zbWl0IEZDUyAyIDQtYnl0ZSB3b3JkcwojZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MzCQkweDAwMDAwQzAwCQkvLyBEZWxheSB0cmFuc21pdCBGQ1MgMyA0LWJ5dGUgd29yZHMKI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRkNTMQkJMHgwMDAwMDEwMAkJLy8gRGVsYXkgcmVjZWl2ZSBGQ1MgMSA0LWJ5dGUgd29yZAojZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MyCQkweDAwMDAwMjAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAyIDQtYnl0ZSB3b3JkcwojZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MzCQkweDAwMDAwMzAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAzIDQtYnl0ZSB3b3JkcwojZGVmaW5lIEFYR01BQ19DRkcxX1BLVF9PVkVSUklERQkweDAwMDAwMDgwCQkvLyBQZXItcGFja2V0IG92ZXJyaWRlIGVuYWJsZQojZGVmaW5lIEFYR01BQ19DRkcxX1NXQVAJCTB4MDAwMDAwNDAJCS8vIEJ5dGUgc3dhcCBlbmFibGUKI2RlZmluZSBBWEdNQUNfQ0ZHMV9TSE9SVF9BU1NFUlQJMHgwMDAwMDAyMAkJLy8gQVNTRVJUIHNyZHJwZnJtIG9uIHNob3J0IGZyYW1lICg8NjQpCiNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1NUUklDVAkJMHgwMDAwMDAxMAkJLy8gUkNWIG9ubHkgODAyLjNBRSB3aGVuIENMRUFSCiNkZWZpbmUgQVhHTUFDX0NGRzFfQ0hFQ0tfTEVOCQkweDAwMDAwMDA4CQkvLyBWZXJpZnkgZnJhbWUgbGVuZ3RoCiNkZWZpbmUgQVhHTUFDX0NGRzFfR0VOX0ZDUwkJMHgwMDAwMDAwNAkJLy8gR2VuZXJhdGUgRkNTCiNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX01BU0sJCTB4MDAwMDAwMDMJCS8vIE1hc2sgZm9yIHBhZCBiaXRzCiNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY0CQkweDAwMDAwMDAxCQkvLyBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzCiNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX1ZMQU4JCTB4MDAwMDAwMDIJCS8vIERldGVjdCBWTEFOIGFuZCBwYWQgdG8gNjggYnl0ZXMKI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfNjgJCTB4MDAwMDAwMDMJCS8vIFBhZCB0byA2OCBieXRlcwoKLy8gQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIKI2RlZmluZSBBWEdNQUNfQ0ZHMl9HRU5fUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEdlbmVyYXRlIHNpbmdsZSBwYXVzZSBmcmFtZSAodGVzdCkKI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9NQU5VQUwJCTB4MDgwMDAwMDAJCS8vIE1hbnVhbCBsaW5rIGZhdWx0IHNlcXVlbmNlCiNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfQVVUTwkJMHgwNDAwMDAwMAkJLy8gQXV0byBsaW5rIGZhdWx0IHNlcXVlbmNlCiNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfUkVNT1RFCQkweDAyMDAwMDAwCQkvLyBSZW1vdGUgbGluayBmYXVsdCAoUkVBRCBPTkxZKQojZGVmaW5lIEFYR01BQ19DRkcyX0xGX0xPQ0FMCQkweDAxMDAwMDAwCQkvLyBMb2NhbCBsaW5rIGZhdWx0IChSRUFEIE9OTFkpCiNkZWZpbmUgQVhHTUFDX0NGRzJfSVBHX01BU0sJCTB4MDAxRjAwMDAJCS8vIEludGVyIHBhY2tldCBnYXAKI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfU0hJRlQJCQkxNgojZGVmaW5lIEFYR01BQ19DRkcyX1BBVVNFX1hNVAkJMHgwMDAwODAwMAkJLy8gUGF1c2UgdHJhbnNtaXQgbW9kdWxlCiNkZWZpbmUgQVhHTUFDX0NGRzJfSVBHX0VYVEVOCQkweDAwMDAwMDIwCQkvLyBFbmFibGUgSVBHIGV4dGVuc2lvbiBhbGdvcml0aG0KI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdFWF9NQVNLCQkweDAwMDAwMDFGCQkvLyBJUEcgZXh0ZW5zaW9uCgovLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMwojZGVmaW5lIEFYR01BQ19DRkczX1JDVl9EUk9QCQkweEZGRkYwMDAwCQkvLyBSZWNlaXZlIGZyYW1lIGRyb3AgZmlsdGVyCiNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RPTlRfQ0FSRQkweDAwMDBGRkZGCQkvLyBSZWNlaXZlIGZyYW1lIGRvbid0IGNhcmUgZmlsdGVyCgovLyBBLVhHTUFDIFN0YXRpb24gQWRkcmVzcyBSZWdpc3RlciAtIE9jdGV0cyAxLTQKI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX09ORQkJMHhGRjAwMDAwMAkJLy8gRmlyc3Qgb2N0ZXQKI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RXTwkJMHgwMEZGMDAwMAkJLy8gU2Vjb25kIG9jdGV0CiNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9USFJFRQkweDAwMDBGRjAwCQkvLyBUaGlyZCBvY3RldAojZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfRk9VUgkweDAwMDAwMEZGCQkvLyBGb3VydGggb2N0ZXQKCi8vIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDUtNgojZGVmaW5lIEFYR01BQ19TQVJISUdIX09DVEVUX0ZJVkUJMHhGRjAwMDAwMAkJLy8gRmlmdGggb2N0ZXQKI2RlZmluZSBBWEdNQUNfU0FSSElHSF9PQ1RFVF9TSVgJMHgwMEZGMDAwMAkJLy8gU2l4dGggb2N0ZXQKCi8vIEEtWEdNQUMgTWF4aW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIKI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfWE1UCQkweDNGRkYwMDAwCQkvLyBNYXhpbXVtIHRyYW5zbWl0IGZyYW1lIGxlbmd0aAojZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9YTVRfU0hJRlQJMTYKI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfUkNWCQkweDAwMDBGRkZGCQkvLyBNYXhpbXVtIHJlY2VpdmUgZnJhbWUgbGVuZ3RoCi8vIFRoaXMgcmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gZm9yIHN0YW5kYXJkIE1UVS4KLy8gRm9yIGp1bWJvLCBJJ2xsIGp1c3Qgc3RhdGljYWxseSBkZWZpbmUgdGhlIHZhbHVlIGhlcmUuICBUaGlzCi8vIHZhbHVlIHNldHMgdGhlIHJlY2VpdmUgYnl0ZSBjb3VudCB0byA5MDM2ICgweDIzNEMpIGFuZCB0aGUKLy8gdHJhbnNtaXQgV09SRCBjb3VudCB0byAyMjU5ICgweDhEMykuICBUaGVzZSB2YWx1ZXMgaW5jbHVkZSAyMgovLyBieXRlcyBvZiBwYWRkaW5nIGJleW9uZCB0aGUganVtYm8gTVRVIG9mIDkwMTQKI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfSlVNQk8JCTB4MDhEMzIzNEMKCi8vIEEtWEdNQUMgUmV2aXNpb24gbGV2ZWwKI2RlZmluZSBBWEdNQUNfUkVWSVNJT05fTUFTSwkJMHgwMDAwRkZGRgkJLy8gUmV2aXNpb24gbGV2ZWwKCi8vIEEtWEdNQUMgQU1JSU0gQ29tbWFuZCBSZWdpc3RlcgojZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfU1RBUlQJCTB4MDAwMDAwMDgJCS8vIENvbW1hbmQgc3RhcnQKI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01BU0sJCTB4MDAwMDAwMDcJCS8vIENvbW1hbmQKI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0xFR0FDWV9XUklURQkJMQkJLy8gMTAvMTAwLzEwMDAgTWJwcyBQaHkgV3JpdGUKI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0xFR0FDWV9SRUFECQkyCQkvLyAxMC8xMDAvMTAwMCBNYnBzIFBoeSBSZWFkCiNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX1NJTkdMRQkJMwkJLy8gTW9uaXRvciBzaW5nbGUgUEhZCiNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX01VTFRJUExFCTQJCS8vIE1vbml0b3IgbXVsdGlwbGUgY29udGlndW91cyBQSFlzCiNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF8xMEdfT1BFUkFUSU9OCQk1CQkvLyBQcmVzZW50IEFNSUlNIEZpZWxkIFJlZwojZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfQ0xFQVJfTElOS19GQUlMCTYJCS8vIENsZWFyIExpbmsgRmFpbCBCaXQgaW4gTUlJTQoKLy8gQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgojZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVAkJMHhDMDAwMDAwMAkJLy8gMi1iaXQgU1QgZmllbGQKI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfU1RfU0hJRlQJCTMwCiNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QCQkweDMwMDAwMDAwCQkvLyAyLWJpdCBPUCBmaWVsZAojZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVAkJMjgKI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSCTB4MEY4MDAwMDAJCS8vIFBvcnQgYWRkcmVzcyBmaWVsZCAoaHN0cGh5YWR4IGluIHNwZWMpCiNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfU0hJRlQJCTIzCiNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSCTB4MDA3QzAwMDAJCS8vIERldmljZSBhZGRyZXNzIGZpZWxkIChoc3RyZWdhZHggaW4gc3BlYykKI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUCQkxOAojZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9UQQkJMHgwMDAzMDAwMAkJLy8gMi1iaXQgVEEgZmllbGQKI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfVEFfU0hJRlQJCTE2CiNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RBVEEJCTB4MDAwMEZGRkYJCS8vIERhdGEgZmllbGQKCi8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9PUCBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgojZGVmaW5lCU1JSU1fT1BfQUREUgkJCQkwCQkvLyBNSUlNIEFkZHJlc3Mgc2V0IG9wZXJhdGlvbgojZGVmaW5lCU1JSU1fT1BfV1JJVEUJCQkJMQkJLy8gTUlJTSBXcml0ZSByZWdpc3RlciBvcGVyYXRpb24KI2RlZmluZQlNSUlNX09QX1JFQUQJCQkJMgkJLy8gTUlJTSBSZWFkIHJlZ2lzdGVyIG9wZXJhdGlvbgojZGVmaW5lCU1JSU1fT1BfQUREUl9TSElGVAkoTUlJTV9PUF9BRERSIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkKCi8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX0FERFIgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKI2RlZmluZQlNSUlNX1BPUlRfTlVNCQkJCTEJCS8vIEFsbCBTYWhhcmEgTUlJTSBtb2R1bGVzIHVzZSBwb3J0IDEKCi8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfQUREUiBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgojZGVmaW5lCU1JSU1fREVWX1BIWV9QTUEJCQkxCQkvLyBQSFkgUE1BL1BNRCBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyCiNkZWZpbmUJTUlJTV9ERVZfUEhZX1BDUwkJCTMJCS8vIFBIWSBQQ1MgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgojZGVmaW5lCU1JSU1fREVWX1BIWV9YUwkJCQk0CQkvLyBQSFkgWFMgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgojZGVmaW5lCU1JSU1fREVWX1hHWFMJCQkJNQkJLy8gWEdYUyBNSUlNIGRldmljZSBudW1iZXIKCi8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9UQSBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgojZGVmaW5lCU1JSU1fVEFfMTBHQgkJCQkyCQkvLyBzZXQgdG8gMiBmb3IgMTAgR0Igb3BlcmF0aW9uCgovLyBBLVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKI2RlZmluZSBBWEdNQUNfQU1JSU1fQ0ZHX05PUFJFQU0JMHgwMDAwMDA4MAkJLy8gQnlwYXNzIHByZWFtYmxlIG9mIG1uZ210IGZyYW1lCiNkZWZpbmUgQVhHTUFDX0FNSUlNX0NGR19IQUxGX0NMT0NLCTB4MDAwMDAwN0YJCS8vIGhhbGYtY2xvY2sgZHVyYXRpb24gb2YgTURDIG91dHB1dAoKLy8gQS1YR01BQyBBTUlJTSBJbmRpY2F0b3IgUmVnaXN0ZXIKI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19MSU5LCQkweDAwMDAwMDEwCQkvLyBMaW5rIHN0YXR1cyBmcm9tIGxlZ2FjeSBQSFkgb3IgTU1ECiNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTVBIWQkJMHgwMDAwMDAwOAkJLy8gTXVsdGlwbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcwojZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX1NQSFkJCTB4MDAwMDAwMDQJCS8vIFNpbmdsZSBwaHkgb3BlcmF0aW9uIGluIHByb2dyZXNzCiNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTU9OCQkweDAwMDAwMDAyCQkvLyBTaW5nbGUgb3IgbXVsdGlwbGUgbW9uaXRvciBjbWQKI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZCQkweDAwMDAwMDAxCQkvLyBTZXQgdW50aWwgY21kIG9wZXJhdGlvbiBjb21wbGV0ZQoKLy8gTGluayBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIKI2RlZmluZQlMU19QSFlfQ0xSX1JFU0VUCQkweDgwMDAwMDAwCQkvLyBDbGVhciByZXNldCBzaWduYWwgdG8gUEhZCiNkZWZpbmUJTFNfU0VSREVTX1BPV0VSX0RPV04JCTB4NDAwMDAwMDAJCS8vIFBvd2VyIGRvd24gdGhlIFNhaGFyYSBTZXJkZXMKI2RlZmluZQlMU19YR1hTX0VOQUJMRQkJCTB4MjAwMDAwMDAJCS8vIEVuYWJsZSB0aGUgWEFVSSBYR1hTIGxvZ2ljCiNkZWZpbmUJTFNfWEdYU19DVEwJCQkweDEwMDAwMDAwCQkvLyBIb2xkIFhBVUkgWEdYUyBsb2dpYyByZXNldCB1bnRpbCBTZXJkZXMgaXMgdXAKI2RlZmluZQlMU19TRVJERVNfRE9XTgkJCTB4MDgwMDAwMDAJCS8vIFdoZW4gMCwgWEFVSSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlCiNkZWZpbmUJTFNfVFJBQ0VfRE9XTgkJCTB4MDQwMDAwMDAJCS8vIFdoZW4gMCwgVHJhY2UgU2VyZGVzIGlzIHVwIGFuZCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZQojZGVmaW5lCUxTX1BIWV9DTEtfMjVNSFoJCTB4MDIwMDAwMDAJCS8vIFNldCBQSFkgY2xvY2sgdG8gMjUgTUh6IChlbHNlIDE1Ni4xMjUgTUh6KQojZGVmaW5lCUxTX1BIWV9DTEtfRU4JCQkweDAxMDAwMDAwCQkvLyBFbmFibGUgY2xvY2sgdG8gUEhZCiNkZWZpbmUJTFNfWEFVSV9MSU5LX1VQCQkJMHgwMDAwMDAxMAkJLy8gWEFVSSBsaW5rIGlzIHVwCiNkZWZpbmUJTFNfWEFVSV9MSU5LX0NITkcJCTB4MDAwMDAwMDgJCS8vIFhBVUkgbGluayBzdGF0dXMgaGFzIGNoYW5nZWQKI2RlZmluZQlMU19MSU5LX0FMQVJNCQkJMHgwMDAwMDAwNAkJLy8gTGluayBhbGFybSBwaW4KI2RlZmluZQlMU19BVFROX0NUUkxfTUFTSwkJMHgwMDAwMDAwMwkJLy8gTWFzayBsaW5rIGF0dGVudGlvbiBjb250cm9sIGJpdHMKI2RlZmluZQlMU19BVFROX0FMQVJNCQkJMHgwMDAwMDAwMAkJLy8gMDAgPT4gQXR0biBvbiBsaW5rIGFsYXJtCiNkZWZpbmUJTFNfQVRUTl9BTEFSTV9PUl9TVEFUX0NITkcJMHgwMDAwMDAwMQkJLy8gMDEgPT4gQXR0biBvbiBsaW5rIGFsYXJtIG9yIHN0YXR1cyBjaGFuZ2UKI2RlZmluZQlMU19BVFROX1NUQVRfQ0hORwkJMHgwMDAwMDAwMgkJLy8gMTAgPT4gQXR0biBvbiBsaW5rIHN0YXR1cyBjaGFuZ2UKI2RlZmluZQlMU19BVFROX05PTkUJCQkweDAwMDAwMDAzCQkvLyAxMSA9PiBubyBBdHRuCgovLyBMaW5rIEFkZHJlc3MgSGlnaCBSZWdpc3RlcnMKI2RlZmluZQlMSU5LX0FERFJfRU5BQkxFCQkweDgwMDAwMDAwCQkvLyBFbmFibGUgdGhpcyBsaW5rIGFkZHJlc3MKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFhHWFMgWEFVSSBYR01JSSBFeHRlbmRlciByZWdpc3RlcnMKICoKICogRnVsbCByZWdpc3RlciBkZXNjcmlwdGlvbnMgY2FuIGJlIGZvdW5kIGluIG14Z3hzLnBkZgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovLyBYR1hTIFJlZ2lzdGVyIE1hcAojZGVmaW5lIFhHWFNfQUREUkVTU19DT05UUk9MMQkJMHgwMDAwCQkJLy8gWFMgQ29udHJvbCAxCiNkZWZpbmUgWEdYU19BRERSRVNTX1NUQVRVUzEJCTB4MDAwMQkJCS8vIFhTIFN0YXR1cyAxCiNkZWZpbmUgWEdYU19BRERSRVNTX0RFVklEX0xPVwkJMHgwMDAyCQkJLy8gWFMgRGV2aWNlIElEIChsb3cpCiNkZWZpbmUgWEdYU19BRERSRVNTX0RFVklEX0hJR0gJCTB4MDAwMwkJCS8vIFhTIERldmljZSBJRCAoaGlnaCkKI2RlZmluZSBYR1hTX0FERFJFU1NfU1BFRUQJCTB4MDAwNAkJCS8vIFhTIFNwZWVkIGFiaWxpdHkKI2RlZmluZSBYR1hTX0FERFJFU1NfREVWX0xPVwkJMHgwMDA1CQkJLy8gWFMgRGV2aWNlcyBpbiBwYWNrYWdlCiNkZWZpbmUgWEdYU19BRERSRVNTX0RFVl9ISUdICQkweDAwMDYJCQkvLyBYUyBEZXZpY2VzIGluIHBhY2thZ2UKI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMgkJMHgwMDA4CQkJLy8gWFMgU3RhdHVzIDIKI2RlZmluZSBYR1hTX0FERFJFU1NfUEtHSURfbE9XCQkweDAwMEUJCQkvLyBYUyBQYWNrYWdlIElkZW50aWZpZXIKI2RlZmluZSBYR1hTX0FERFJFU1NfUEtHSURfSElHSAkJMHgwMDBGCQkJLy8gWFMgUGFja2FnZSBJZGVudGlmaWVyCiNkZWZpbmUgWEdYU19BRERSRVNTX0xBTkVfU1RBVFVTCTB4MDAxOAkJCS8vIDEwRyBYR1hTIExhbmUgU3RhdHVzCiNkZWZpbmUgWEdYU19BRERSRVNTX1RFU1RfQ1RSTAkJMHgwMDE5CQkJLy8gMTBHIFhHWFMgVGVzdCBDb250cm9sCiNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0xPMQkJMHg4MDAwCQkJLy8gVmVuZG9yLVNwZWNpZmljIFJlc2V0IExvIDEKI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8yCQkweDgwMDEJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMgojZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9ISTEJCTB4ODAwMgkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBIaSAxCiNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0hJMgkJMHg4MDAzCQkJLy8gVmVuZG9yLVNwZWNpZmljIFJlc2V0IEhpIDIKCi8vIFhTIENvbnRyb2wgMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZSBYR1hTX0NPTlRST0wxX1JFU0VUCQkweDgwMDAJCQkvLyBSZXNldCAtIHNlbGYgY2xlYXJpbmcKI2RlZmluZSBYR1hTX0NPTlRST0wxX0xPT1BCQUNLCQkweDQwMDAJCQkvLyBFbmFibGUgbG9vcGJhY2sKI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMQkJMHgyMDAwCQkJLy8gMCA9IHVuc3BlY2lmaWVkLCAxID0gMTBHYisKI2RlZmluZSBYR1hTX0NPTlRST0wxX0xPV1BPV0VSCQkweDA0MDAJCQkvLyAxID0gTG93IHBvd2VyIG1vZGUKI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMgkJMHgwMDQwCQkJLy8gU2FtZSBhcyBTUEVFRDEgKD8pCiNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRAkJMHgwMDNDCQkJLy8gRXZlcnl0aGluZyByZXNlcnZlZCBleGNlcHQgemVybyAoPykKCi8vIFhTIFN0YXR1cyAxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwojZGVmaW5lIFhHWFNfU1RBVFVTMV9GQVVMVAkJMHgwMDgwCQkJLy8gRmF1bHQgZGV0ZWN0ZWQKI2RlZmluZSBYR1hTX1NUQVRVUzFfTElOSwkJMHgwMDA0CQkJLy8gMSA9IExpbmsgdXAKI2RlZmluZSBYR1hTX1NUQVRVUzFfTE9XUE9XRVIJCTB4MDAwMgkJCS8vIDEgPSBMb3cgcG93ZXIgc3VwcG9ydGVkCgovLyBYUyBTcGVlZCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZSBYR1hTX1NQRUVEXzEwRwkJCTB4MDAwMQkJCS8vIDEgPSAxMEcgY2FwYWJsZQoKLy8gWFMgRGV2aWNlcyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZSBYR1hTX0RFVklDRVNfRFRFCQkweDAwMjAJCQkvLyBEVEUgWFMgUHJlc2VudAojZGVmaW5lIFhHWFNfREVWSUNFU19QSFkJCTB4MDAxMAkJCS8vIFBIWSBYUyBQcmVzZW50CiNkZWZpbmUgWEdYU19ERVZJQ0VTX1BDUwkJMHgwMDA4CQkJLy8gUENTIFByZXNlbnQKI2RlZmluZSBYR1hTX0RFVklDRVNfV0lTCQkweDAwMDQJCQkvLyBXSVMgUHJlc2VudAojZGVmaW5lIFhHWFNfREVWSUNFU19QTUQJCTB4MDAwMgkJCS8vIFBNRC9QTUEgUHJlc2VudAojZGVmaW5lIFhHWFNfREVWSUNFU19DTEFVU0UyMgkJMHgwMDAxCQkJLy8gQ2xhdXNlIDIyIHJlZ2lzdGVycyBwcmVzZW50CgovLyBYUyBEZXZpY2VzIEhpZ2ggcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCiNkZWZpbmUgWEdYU19ERVZJQ0VTX1ZFTkRPUjIJCTB4ODAwMAkJCS8vIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMgojZGVmaW5lIFhHWFNfREVWSUNFU19WRU5ET1IxCQkweDQwMDAJCQkvLyBWZW5kb3Igc3BlY2lmaWMgZGV2aWNlIDEKCi8vIFhTIFN0YXR1cyAyIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwojZGVmaW5lIFhHWFNfU1RBVFVTMl9ERVZfTUFTSwkJMHhDMDAwCQkJLy8gRGV2aWNlIHByZXNlbnQgbWFzawojZGVmaW5lIFhHWFNfU1RBVFVTMl9ERVZfUkVTUE9ORAkweDgwMDAJCQkvLyBEZXZpY2UgcmVzcG9uZGluZwojZGVmaW5lIFhHWFNfU1RBVFVTMl9YTVRfRkFVTFQJCTB4MDgwMAkJCS8vIFRyYW5zbWl0IGZhdWx0CiNkZWZpbmUgWEdYU19TVEFUVVMyX1JDVl9GQVVMVAkJMHgwNDAwCQkJLy8gUmVjZWl2ZSBmYXVsdAoKLy8gWFMgUGFja2FnZSBJRCBIaWdoIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwojZGVmaW5lIFhHWFNfUEtHSURfSElHSF9PUkcJCTB4RkMwMAkJCS8vIE9yZ2FuaXphdGlvbmFsbHkgVW5pcXVlCiNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX01GRwkJMHgwM0YwCQkJLy8gTWFudWZhY3R1cmVyIE1vZGVsCiNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX1JFVgkJMHgwMDBGCQkJLy8gUmV2aXNpb24gTnVtYmVyCgovLyBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZSBYR1hTX0xBTkVfUEhZCQkJMHgxMDAwCQkJLy8gUEhZL0RURSBsYW5lIGFsaWdubWVudCBzdGF0dXMKI2RlZmluZSBYR1hTX0xBTkVfUEFUVEVSTgkJMHgwODAwCQkJLy8gUGF0dGVybiB0ZXN0aW5nIGFiaWxpdHkKI2RlZmluZSBYR1hTX0xBTkVfTE9PUEJBQ0sJCTB4MDQwMAkJCS8vIFBIWSBsb29wYmFjayBhYmlsaXR5CiNkZWZpbmUgWEdYU19MQU5FX1NZTkMzCQkJMHgwMDA4CQkJLy8gTGFuZSAzIHN5bmMKI2RlZmluZSBYR1hTX0xBTkVfU1lOQzIJCQkweDAwMDQJCQkvLyBMYW5lIDIgc3luYwojZGVmaW5lIFhHWFNfTEFORV9TWU5DMQkJCTB4MDAwMgkJCS8vIExhbmUgMSBzeW5jCiNkZWZpbmUgWEdYU19MQU5FX1NZTkMwCQkJMHgwMDAxCQkJLy8gTGFuZSAwIHN5bmMKCi8vIFhTIFRlc3QgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9FTkFCTEUJMHgwMDA0CQkJLy8gVGVzdCBwYXR0ZXJuIGVuYWJsZWQKI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9NQVNLCQkweDAwMDMJCQkvLyBUZXN0IHBhdHRlcm5zCiNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fUlNWRAkJMHgwMDAzCQkJLy8gVGVzdCBwYXR0ZXJuIC0gcmVzZXJ2ZWQKI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9NSVgJCTB4MDAwMgkJCS8vIFRlc3QgcGF0dGVybiAtIG1peGVkCiNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTE9XCQkweDAwMDEJCQkvLyBUZXN0IHBhdHRlcm4gLSBsb3cKI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9ISUdICQkweDAwMDEJCQkvLyBUZXN0IHBhdHRlcm4gLSBoaWdoCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEV4dGVybmFsIE1ESU8gQnVzIFJlZ2lzdGVycwogKgogKiBGdWxsIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gUEhZL1hFTlBBSy9JRUVFIHNwZWNzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8vIExBU0kgKExpbmsgQWxhcm0gU3RhdHVzIEludGVycnVwdCkgUmVnaXN0ZXJzIChsb2NhdGVkIGluIE1JSU1fREVWX1BIWV9QTUEgZGV2aWNlKQojZGVmaW5lIExBU0lfUlhfQUxBUk1fQ09OVFJPTAkJMHg5MDAwCQkJLy8gTEFTSSBSWF9BTEFSTSBDb250cm9sCiNkZWZpbmUgTEFTSV9UWF9BTEFSTV9DT05UUk9MCQkweDkwMDEJCQkvLyBMQVNJIFRYX0FMQVJNIENvbnRyb2wKI2RlZmluZSBMQVNJX0NPTlRST0wJCQkweDkwMDIJCQkvLyBMQVNJIENvbnRyb2wKI2RlZmluZSBMQVNJX1JYX0FMQVJNX1NUQVRVUwkJMHg5MDAzCQkJLy8gTEFTSSBSWF9BTEFSTSBTdGF0dXMKI2RlZmluZSBMQVNJX1RYX0FMQVJNX1NUQVRVUwkJMHg5MDA0CQkJLy8gTEFTSSBUWF9BTEFSTSBTdGF0dXMKI2RlZmluZSBMQVNJX1NUQVRVUwkJCTB4OTAwNQkJCS8vIExBU0kgU3RhdHVzCgovLyBMQVNJX0NPTlRST0wgYml0IGRlZmluaXRpb25zCiNkZWZpbmUJTEFTSV9DVExfUlhfQUxBUk1fRU5BQkxFCTB4MDAwNAkJCS8vIEVuYWJsZSBSWF9BTEFSTSBpbnRlcnJ1cHRzCiNkZWZpbmUJTEFTSV9DVExfVFhfQUxBUk1fRU5BQkxFCTB4MDAwMgkJCS8vIEVuYWJsZSBUWF9BTEFSTSBpbnRlcnJ1cHRzCiNkZWZpbmUJTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFCTB4MDAwMQkJCS8vIEVuYWJsZSBMaW5rIFN0YXR1cyBpbnRlcnJ1cHRzCgovLyBMQVNJX1NUQVRVUyBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZQlMQVNJX1NUQVRVU19SWF9BTEFSTQkJMHgwMDA0CQkJLy8gUlhfQUxBUk0gc3RhdHVzCiNkZWZpbmUJTEFTSV9TVEFUVVNfVFhfQUxBUk0JCTB4MDAwMgkJCS8vIFRYX0FMQVJNIHN0YXR1cwojZGVmaW5lCUxBU0lfU1RBVFVTX0xTX0FMQVJNCQkweDAwMDEJCQkvLyBMaW5rIFN0YXR1cwoKLy8gUEhZIHJlZ2lzdGVycyAtIFBNQS9QTUQgKGRldmljZSAxKQojZGVmaW5lCVBIWV9QTUFfQ09OVFJPTDEJCTB4MDAwMAkJCS8vIFBNQS9QTUQgQ29udHJvbCAxCiNkZWZpbmUJUEhZX1BNQV9TVEFUVVMxCQkJMHgwMDAxCQkJLy8gUE1BL1BNRCBTdGF0dXMgMQojZGVmaW5lCVBIWV9QTUFfUkNWX0RFVAkJCTB4MDAwQQkJCS8vIFBNQS9QTUQgUmVjZWl2ZSBTaWduYWwgRGV0ZWN0CgkJLy8gb3RoZXIgUE1BL1BNRCByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAoKLy8gUEhZIHJlZ2lzdGVycyAtIFBDUyAoZGV2aWNlIDMpCiNkZWZpbmUJUEhZX1BDU19DT05UUk9MMQkJMHgwMDAwCQkJLy8gUENTIENvbnRyb2wgMQojZGVmaW5lCVBIWV9QQ1NfU1RBVFVTMQkJCTB4MDAwMQkJCS8vIFBDUyBTdGF0dXMgMQojZGVmaW5lCVBIWV9QQ1NfMTBHX1NUQVRVUzEJCTB4MDAyMAkJCS8vIFBDUyAxMEdCQVNFLVIgU3RhdHVzIDEKCQkvLyBvdGhlciBQQ1MgcmVnaXN0ZXJzIGV4aXN0IGFuZCBjYW4gYmUgZGVmaW5lZCBhcyBuZWVkZWQKCi8vIFBIWSByZWdpc3RlcnMgLSBYUyAoZGV2aWNlIDQpCiNkZWZpbmUJUEhZX1hTX0NPTlRST0wxCQkJMHgwMDAwCQkJLy8gWFMgQ29udHJvbCAxCiNkZWZpbmUJUEhZX1hTX1NUQVRVUzEJCQkweDAwMDEJCQkvLyBYUyBTdGF0dXMgMQojZGVmaW5lCVBIWV9YU19MQU5FX1NUQVRVUwkJMHgwMDE4CQkJLy8gWFMgTGFuZSBTdGF0dXMKCQkvLyBvdGhlciBYUyByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAoKLy8gUEhZX1BNQV9DT05UUk9MMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZQlQTUFfQ09OVFJPTDFfUkVTRVQJCTB4ODAwMAkJCS8vIFBNQS9QTUQgcmVzZXQKCi8vIFBIWV9QTUFfUkNWX0RFVCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZQlQTUFfUkNWX0RFVEVDVAkJCTB4MDAwMQkJCS8vIFBNQS9QTUQgcmVjZWl2ZSBzaWduYWwgZGV0ZWN0CgovLyBQSFlfUENTXzEwR19TVEFUVVMxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwojZGVmaW5lCVBDU18xMEJfQkxPQ0tfTE9DSwkJMHgwMDAxCQkJLy8gUENTIDEwR0JBU0UtUiBsb2NrZWQgdG8gcmVjZWl2ZSBibG9ja3MKCi8vIFBIWV9YU19MQU5FX1NUQVRVUyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZQlYU19MQU5FX0FMSUdOCQkJMHgxMDAwCQkJLy8gWFMgdHJhbnNtaXQgbGFuZXMgYWxpZ25lZAoKLy8gUEhZIE1pY3JvY29kZSBkb3dubG9hZCBkYXRhIHN0cnVjdHVyZQpzdHJ1Y3QgUEhZX1VDT0RFIHsKCXVzaG9ydAlBZGRyOwoJdXNob3J0CURhdGE7Cn07CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFRyYW5zbWl0IFNlcXVlbmNlciBDb21tYW5kIERlc2NyaXB0b3IgZGVmaW5pdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLy8gVGhpcyBkZXNjcmlwdG9yIG11c3QgYmUgcGxhY2VkIGluIEdSQU0uICBUaGUgYWRkcmVzcyBvZiB0aGlzIGRlc2NyaXB0b3IKLy8gKGFsb25nIHdpdGggYSBjb3VwbGUgb2YgY29udHJvbCBiaXRzKSBpcyBwdXNoZWQgb250byB0aGUgUHhoQ21kUSBvciBQeGxDbWRRCi8vIChQcm94eSBoaWdoIG9yIGxvdyBjb21tYW5kIHF1ZXVlKS4gIFRoaXMgZGF0YSBpcyByZWFkIGJ5IHRoZSBQcm94eSBTZXF1ZW5jZXIsCi8vIHdoaWNoIHB1c2hlcyBpdCBvbnRvIHRoZSBYbXRDbWRRLCB3aGljaCBpcyAoZXZlbnR1YWxseSkgcmVhZCBieSB0aGUgVHJhbnNtaXQKLy8gU2VxdWVuY2VyLCBjYXVzaW5nIGEgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkLiAgTm90IGFsbCBmaWVsZHMgYXJlIHZhbGlkIGZvcgovLyBhbGwgY29tbWFuZHMgLSBzZWUgdGhlIFNhaGFyYSBzcGVjIGZvciBkZXRhaWxzLiAgTm90ZSB0aGF0IHRoaXMgc3RydWN0dXJlIGlzCi8vIG9ubHkgdmFsaWQgd2hlbiBjb21waWxlZCBvbiBhIGxpdHRsZSBlbmRpYW4gbWFjaGluZS4KI3ByYWdtYSBwYWNrKHB1c2gsIDEpCnN0cnVjdCBYTVRfREVTQyB7Cgl1c2hvcnQJWG10TGVuOwkJCS8vIHdvcmQgMCwgYml0cyBbMTU6MF0gLSAgdHJhbnNtaXQgbGVuZ3RoCgl1bnNpZ25lZCBjaGFyCVhtdEN0bDsJCQkvLyB3b3JkIDAsIGJpdHMgWzIzOjE2XSAtIHRyYW5zbWl0IGNvbnRyb2wgYnl0ZQoJdW5zaWduZWQgY2hhcglDbWQ7CQkJLy8gd29yZCAwLCBiaXRzIFszMToyNF0gLSB0cmFuc21pdCBjb21tYW5kIHBsdXMgbWlzYy4KCXUzMglYbXRCdWZJZDsJCS8vIHdvcmQgMSwgYml0cyBbMzE6MF0gLSAgdHJhbnNtaXQgYnVmZmVyIElECgl1bnNpZ25lZCBjaGFyCVRjcFN0cnQ7CQkvLyB3b3JkIDIsIGJpdHMgWzc6MF0gLSAgIGJ5dGUgYWRkcmVzcyBvZiBUQ1AgaGVhZGVyCgl1bnNpZ25lZCBjaGFyCUlwU3RydDsJCQkvLyB3b3JkIDIsIGJpdHMgWzE1OjhdIC0gIGJ5dGUgYWRkcmVzcyBvZiBJUCBoZWFkZXIKCXVzaG9ydAlJcENrU3VtOwkJLy8gd29yZCAyLCBiaXRzIFszMToxNl0gLSBwYXJ0aWFsIElQIGNoZWNrc3VtCgl1c2hvcnQJVGNwQ2tTdW07CQkvLyB3b3JkIDMsIGJpdHMgWzE1OjBdIC0gIHBhcnRpYWwgVENQIGNoZWNrc3VtCgl1c2hvcnQJUnN2ZDE7CQkJLy8gd29yZCAzLCBiaXRzIFszMToxNl0gLSBQQUQKCXUzMglSc3ZkMjsJCQkvLyB3b3JkIDQsIGJpdHMgWzMxOjBdIC0gIFBBRAoJdTMyCVJzdmQzOwkJCS8vIHdvcmQgNSwgYml0cyBbMzE6MF0gLSAgUEFECgl1MzIJUnN2ZDQ7CQkgICAgLy8gd29yZCA2LCBiaXRzIFszMTowXSAtICBQQUQKCXUzMglSc3ZkNTsJCSAgICAvLyB3b3JkIDcsIGJpdHMgWzMxOjBdIC0gIFBBRAp9OwojcHJhZ21hIHBhY2socG9wKQoKLy8gWE1UX0RFU0MgQ21kIGJ5dGUgZGVmaW5pdGlvbnMKCQkvLyBjb21tYW5kIGNvZGVzCiNkZWZpbmUgWE1UX0RFU0NfQ01EX1JBV19TRU5ECQkwCQkvLyByYXcgc2VuZCBkZXNjcmlwdG9yCiNkZWZpbmUgWE1UX0RFU0NfQ01EX0NTVU1fSU5TRVJUCTEJCS8vIGNoZWNrc3VtIGluc2VydCBkZXNjcmlwdG9yCiNkZWZpbmUgWE1UX0RFU0NfQ01EX0ZPUk1BVAkJMgkJLy8gZm9ybWF0IGRlc2NyaXB0b3IKI2RlZmluZSBYTVRfREVTQ19DTURfUFJJTUUJCTMJCS8vIHByaW1lIGRlc2NyaXB0b3IKI2RlZmluZSBYTVRfREVTQ19DTURfQ09ERV9TSEZUCQk2CQkvLyBjb21hbmQgY29kZSBzaGlmdCAoc2hpZnQgdG8gYml0cyBbMzE6MzBdIGluIHdvcmQgMCkKCQkvLyBzaGlmdGVkIGNvbW1hbmQgY29kZXMKI2RlZmluZSBYTVRfUkFXX1NFTkQJCShYTVRfREVTQ19DTURfUkFXX1NFTkQgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKI2RlZmluZSBYTVRfQ1NVTV9JTlNFUlQJCShYTVRfREVTQ19DTURfQ1NVTV9JTlNFUlQgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKI2RlZmluZSBYTVRfRk9STUFUCQkJKFhNVF9ERVNDX0NNRF9GT1JNQVQgICAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQojZGVmaW5lIFhNVF9QUklNRQkJCShYTVRfREVTQ19DTURfUFJJTUUgICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKCi8vIFhNVF9ERVNDIENvbnRyb2wgQnl0ZSAoWG10Q3RsKSBkZWZpbml0aW9ucwovLyBOT1RFOiAgVGhlc2UgYml0cyBkbyBub3Qgd29yayBvbiBTYWhhcmEgKFJldiBBKSEKI2RlZmluZQlYTVRfQ1RMX1BBVVNFX0ZSQU1FCQkweDgwCS8vIGN1cnJlbnQgZnJhbWUgaXMgYSBwYXVzZSBjb250cm9sIGZyYW1lIChmb3Igc3RhdGlzdGljcykKI2RlZmluZQlYTVRfQ1RMX0NPTlRST0xfRlJBTUUJCTB4NDAJLy8gY3VycmVudCBmcmFtZSBpcyBhIGNvbnRyb2wgZnJhbWUgKGZvciBzdGF0aXN0aWNzKQojZGVmaW5lCVhNVF9DVExfUEVSX1BLVF9RVUFMCQkweDIwCS8vIHBlciBwYWNrZXQgcXVhbGlmaWVyCiNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV9OT05FCQkweDAwCS8vIGRvIG5vdCBwYWQgZnJhbWUKI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFXzY0CQkweDA4CS8vIHBhZCBmcmFtZSB0byA2NCBieXRlcwojZGVmaW5lCVhNVF9DVExfUEFEX01PREVfVkxBTl82OAkweDEwCS8vIHBhZCBmcmFtZSB0byA2NCBieXRlcywgYW5kIFZMQU4gZnJhbWVzIHRvIDY4IGJ5dGVzCiNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV82OAkJMHgxOAkvLyBwYWQgZnJhbWUgdG8gNjggYnl0ZXMKI2RlZmluZQlYTVRfQ1RMX0dFTl9GQ1MJCQkweDA0CS8vIGdlbmVyYXRlIEZDUyAoQ1JDKSBmb3IgdGhpcyBmcmFtZQojZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzAJCTB4MDAJLy8gZG8gbm90IGRlbGF5IEZDUyBjYWxjdXRpb24KI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18xCQkweDAxCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAxICg0LWJ5dGUpIHdvcmQKI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18yCQkweDAyCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAyICg0LWJ5dGUpIHdvcmRzCiNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMwkJMHgwMwkvLyBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMyAoNC1ieXRlKSB3b3JkcwoKLy8gWE1UX0RFU0MgWG10QnVmSWQgZGVmaW5pdGlvbgojZGVmaW5lIFhNVF9CVUZfSURfU0hGVAkJOAkvLyBUaGUgWG10IGJ1ZmZlciBJRCBpcyBmb3JtZWQgYnkgZGl2aWRpbmcKCQkJCQkvLyB0aGUgYnVmZmVyIChEUkFNKSBhZGRyZXNzIGJ5IDI1NiAob3IgPDwgOCkKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBSZWNlaXZlciBTZXF1ZW5jZXIgRGVmaW5pdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLy8gUmVjZWl2ZSBFdmVudCBRdWV1ZSAocXVldWVzIDMgLSA2KSBiaXQgZGVmaW5pdGlvbnMKI2RlZmluZQlSQ1ZfRVZUUV9SQkZJRF9NQVNLCQkweDAwMDBGRkZGCS8vIGJpdCBtYXNrIGZvciB0aGUgUmVjZWl2ZSBCdWZmZXIgSUQKCi8vIFJlY2VpdmUgQnVmZmVyIElEIGRlZmluaXRpb24KI2RlZmluZSBSQ1ZfQlVGX0lEX1NIRlQJCTUJLy8gVGhlIFJjdiBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nCgkJCQkJLy8gdGhlIGJ1ZmZlciAoRFJBTSkgYWRkcmVzcyBieSAzMiAob3IgPDwgNSkKCi8vIEZvcm1hdCBvZiB0aGUgMTggYnl0ZSBSZWNlaXZlIEJ1ZmZlciByZXR1cm5lZCBieSB0aGUKLy8gUmVjZWl2ZSBTZXF1ZW5jZXIgZm9yIHJlY2VpdmVkIHBhY2tldHMKI3ByYWdtYSBwYWNrKHB1c2gsIDEpCnN0cnVjdCBSQ1ZfQlVGX0hEUiB7Cgl1MzIJU3RhdHVzOwkJCQkvLyBTdGF0dXMgd29yZCBmcm9tIFJjdiBTZXEgUGFyc2VyCgl1c2hvcnQJTGVuZ3RoOwkJCQkvLyBSY3YgcGFja2V0IGJ5dGUgY291bnQKCXVuaW9uIHsKCQl1c2hvcnQJCVRjcENzdW07CS8vIFRDUCBjaGVja3N1bQoJCXN0cnVjdCB7CgkJCXVuc2lnbmVkIGNoYXIJVGNwQ3N1bUw7CS8vIGxvd2VyIDggYml0cyBvZiB0aGUgVENQIGNoZWNrc3VtCgkJCXVuc2lnbmVkIGNoYXIJTGlua0hhc2g7CS8vIExpbmsgaGFzaCAobXVsdGljYXN0IGZyYW1lcyBvbmx5KQoJCX07Cgl9OwoJdXNob3J0CVNrdEhhc2g7CQkJLy8gU29ja2V0IGhhc2gKCXVuc2lnbmVkIGNoYXIJVGNwSGRyT2Zmc2V0OwkJLy8gVENQIGhlYWRlciBvZmZzZXQgaW50byBwYWNrZXQKCXVuc2lnbmVkIGNoYXIJSXBIZHJPZmZzZXQ7CQkvLyBJUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0Cgl1MzIJVHB6SGFzaDsJCQkvLyBUb2VwbGl0eiBoYXNoCgl1c2hvcnQJUmVzZXJ2ZWQ7CQkJLy8gUmVzZXJ2ZWQKfTsKI3ByYWdtYSBwYWNrKHBvcCkKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogUXVldWUgZGVmaW5pdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyogSW5ncmVzcyAocmVhZCBvbmx5KSBxdWV1ZSBudW1iZXJzICovCiNkZWZpbmUgUFhZX0JVRl9RCQkwCQkvKiBQcm94eSBCdWZmZXIgUXVldWUgKi8KI2RlZmluZSBIU1RfRVZUX1EJCTEJCS8qIEhvc3QgRXZlbnQgUXVldWUgKi8KI2RlZmluZSBYTVRfQlVGX1EJCTIJCS8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSAqLwojZGVmaW5lIFNLVF9FVkxfUQkJMwkJLyogUmN2U3FyIFNvY2tldCBFdmVudCBMb3cgUHJpb3JpdHkgUXVldWUgKi8KI2RlZmluZSBSQ1ZfRVZMX1EJCTQJCS8qIFJjdlNxciBSY3YgRXZlbnQgTG93IFByaW9yaXR5IFF1ZXVlICovCiNkZWZpbmUgU0tUX0VWSF9RCQk1CQkvKiBSY3ZTcXIgU29ja2V0IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KI2RlZmluZSBSQ1ZfRVZIX1EJCTYJCS8qIFJjdlNxciBSY3YgRXZlbnQgSGlnaCBQcmlvcml0eSBRdWV1ZSAqLwojZGVmaW5lIERNQV9SU1BfUQkJNwkJLyogRG1hIFJlc3BvbnNlIFF1ZXVlIC0gb25lIHBlciBDUFUgY29udGV4dCAqLwovKiBMb2NhbCAocmVhZC93cml0ZSkgcXVldWUgbnVtYmVycyAqLwojZGVmaW5lIExPQ0FMX0FfUQkJOAkJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KI2RlZmluZSBMT0NBTF9CX1EJCTkJCS8qIFNwYXJlIGxvY2FsIFF1ZXVlICovCiNkZWZpbmUgTE9DQUxfQ19RCQkxMAkJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KI2RlZmluZSBGU01fRVZUX1EJCTExCQkvKiBGaW5pdGUtU3RhdGUtTWFjaGluZSBFdmVudCBRdWV1ZSAqLwojZGVmaW5lIFNCRl9QQUxfUQkJMTIJCS8qIFN5c3RlbSBCdWZmZXIgUGh5c2ljYWwgQWRkcmVzcyAobG93KSBRdWV1ZSAqLwojZGVmaW5lIFNCRl9QQUhfUQkJMTMJCS8qIFN5c3RlbSBCdWZmZXIgUGh5c2ljYWwgQWRkcmVzcyAoaGlnaCkgUXVldWUgKi8KI2RlZmluZSBTQkZfVkFMX1EJCTE0CQkvKiBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAobG93KSBRdWV1ZSAqLwojZGVmaW5lIFNCRl9WQUhfUQkJMTUJCS8qIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChoaWdoKSBRdWV1ZSAqLwovKiBFZ3Jlc3MgKHdyaXRlIG9ubHkpIHF1ZXVlIG51bWJlcnMgKi8KI2RlZmluZSBIMkdfQ01EX1EJCTE2CQkvKiBIb3N0IHRvIEdsYlJhbSBETUEgQ29tbWFuZCBRdWV1ZSAqLwojZGVmaW5lIEgyRF9DTURfUQkJMTcJCS8qIEhvc3QgdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLwojZGVmaW5lIEcySF9DTURfUQkJMTgJCS8qIEdsYlJhbSB0byBIb3N0IERNQSBDb21tYW5kIFF1ZXVlICovCiNkZWZpbmUgRzJEX0NNRF9RCQkxOQkJLyogR2xiUmFtIHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KI2RlZmluZSBEMkhfQ01EX1EJCTIwCQkvKiBEUkFNIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUgKi8KI2RlZmluZSBEMkdfQ01EX1EJCTIxCQkvKiBEUkFNIHRvIEdsYlJhbSBETUEgQ29tbWFuZCBRdWV1ZSAqLwojZGVmaW5lIEQyRF9DTURfUQkJMjIJCS8qIERSQU0gdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLwojZGVmaW5lIFBYTF9DTURfUQkJMjMJCS8qIExvdyBQcmlvcml0eSBQcm94eSBDb21tYW5kIFF1ZXVlICovCiNkZWZpbmUgUFhIX0NNRF9RCQkyNAkJLyogSGlnaCBQcmlvcml0eSBQcm94eSBDb21tYW5kIFF1ZXVlICovCiNkZWZpbmUgUlNRX0NNRF9RCQkyNQkJLyogUmVjZWl2ZSBTZXF1ZW5jZXIgQ29tbWFuZCBRdWV1ZSAqLwojZGVmaW5lIFJDVl9CVUZfUQkJMjYJCS8qIFJlY2VpdmUgQnVmZmVyIFF1ZXVlICovCgovKiBCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBQcm94eSBDb21tYW5kIHF1ZXVlcyAoUFhMX0NNRF9RIGFuZCBQWEhfQ01EX1EpICovCiNkZWZpbmUgUFhZX0NPUFlfRU4JCTB4MDAyMDAwMDAJCS8qIGVuYWJsZSBjb3B5IG9mIHhtdCBkZXNjcmlwdG9yIHRvIHhtdCBjb21tYW5kIHF1ZXVlICovCiNkZWZpbmUgUFhZX1NJWkVfMTYJCTB4MDAwMDAwMDAJCS8qIGNvcHkgMTYgYnl0ZXMgKi8KI2RlZmluZSBQWFlfU0laRV8zMgkJMHgwMDEwMDAwMAkJLyogY29weSAzMiBieXRlcyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFNYRyBFRVBST00vRmxhc2ggQ29uZmlndXJhdGlvbiBEZWZpbml0aW9ucwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNwcmFnbWEgcGFjayhwdXNoLCAxKQoKLyogKi8Kc3RydWN0IEhXX0NGR19EQVRBIHsKCXVzaG9ydAkJQWRkcjsKCXVuaW9uIHsKCQl1c2hvcnQJRGF0YTsKCQl1c2hvcnQJQ2hlY2tzdW07Cgl9Owp9OwoKLyogKi8KI2RlZmluZQlOVU1fSFdfQ0ZHX0VOVFJJRVMJKCgxMjgvc2l6ZW9mKHN0cnVjdCBIV19DRkdfREFUQSkpIC0gNCkKCi8qIE1BQyBhZGRyZXNzICovCnN0cnVjdCBTWEdfQ09ORklHX01BQyB7Cgl1bnNpZ25lZCBjaGFyCQlNYWNBZGRyWzZdOwkJCS8qIE1BQyBBZGRyZXNzICovCn07CgovKiAqLwpzdHJ1Y3QgQVRLX0ZSVSB7Cgl1bnNpZ25lZCBjaGFyCQlQYXJ0TnVtWzZdOwoJdW5zaWduZWQgY2hhcgkJUmV2aXNpb25bMl07Cgl1bnNpZ25lZCBjaGFyCQlTZXJpYWxbMTRdOwp9OwoKLyogT0VNIEZSVSBGb3JtYXQgdHlwZXMgKi8KI2RlZmluZQlBVEtfRlJVX0ZPUk1BVAkJMHgwMDAwCiNkZWZpbmUgQ1BRX0ZSVV9GT1JNQVQJCTB4MDAwMQojZGVmaW5lIERFTExfRlJVX0ZPUk1BVAkJMHgwMDAyCiNkZWZpbmUgSFBfRlJVX0ZPUk1BVAkJMHgwMDAzCiNkZWZpbmUgSUJNX0ZSVV9GT1JNQVQJCTB4MDAwNAojZGVmaW5lIEVNQ19GUlVfRk9STUFUCQkweDAwMDUKI2RlZmluZSBOT19GUlVfRk9STUFUCQkweEZGRkYKCi8qIEVFUFJPTS9GbGFzaCBGb3JtYXQgKi8Kc3RydWN0IFNYR19DT05GSUcgewoJLyogKi8KCS8qIFNlY3Rpb24gMSAoMTI4IGJ5dGVzKSAqLwoJLyogKi8KCXVzaG9ydAkJCU1hZ2ljV29yZDsJCQkvKiBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScgKi8KCXVzaG9ydAkJCVNwaUNsa3M7CQkJLyogU1BJIGJ1cyBjbG9jayBkaXZpZGVycyAqLwoJc3RydWN0IEhXX0NGR19EQVRBCQlId0NmZ1tOVU1fSFdfQ0ZHX0VOVFJJRVNdOwoJLyogKi8KCS8qICovCgkvKiAqLwoJdXNob3J0CQkJVmVyc2lvbjsJCQkvKiBFRVBST00gZm9ybWF0IHZlcnNpb24gKi8KCXN0cnVjdCBTWEdfQ09ORklHX01BQwlNYWNBZGRyWzRdOwkJCS8qIHNwYWNlIGZvciA0IE1BQyBhZGRyZXNzZXMgKi8KCXN0cnVjdCBBVEtfRlJVCQkJQXRrRnJ1OwkJCQkvKiBGUlUgaW5mb3JtYXRpb24gKi8KCXVzaG9ydAkJCU9lbUZydUZvcm1hdDsJCS8qIE9FTSBGUlUgZm9ybWF0IHR5cGUgKi8KCXVuc2lnbmVkIGNoYXIJCQlPZW1GcnVbNzZdOwkJCS8qIE9FTSBGUlUgaW5mb3JtYXRpb24gKG9wdGlvbmFsKSAqLwoJdXNob3J0CQkJQ2hlY2tzdW07CQkJLyogQ2hlY2tzdW0gb2Ygc2VjdGlvbiAyICovCgkvKiBDUyBpbmZvIFhYWFRPRE8gKi8KfTsKI3ByYWdtYSBwYWNrKHBvcCkKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBNaXNjZWxsYW5lb3VzIEhhcmR3YXJlIGRlZmluaXRpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vIFNhaGFyYSAoQVNJQyBsZXZlbCkgZGVmaW5lcwojZGVmaW5lIFNBSEFSQV9HUkFNX1NJWkUJCTB4MDIwMDAwCQkvLyBHUkFNIHNpemUgLSAxMjggS0IKI2RlZmluZSBTQUhBUkFfRFJBTV9TSVpFCQkweDIwMDAwMAkJLy8gRFJBTSBzaXplIC0gMiBNQgojZGVmaW5lIFNBSEFSQV9RUkFNX1NJWkUJCTB4MDA0MDAwCQkvLyBRUkFNIHNpemUgLSAxNksgZW50cmllcyAoNjQgS0IpCiNkZWZpbmUgU0FIQVJBX1dDU19TSVpFCQkJMHgwMDIwMDAJCS8vIFdDUyAtIDhLIGluc3RydWN0aW9ucyAoeCAxMDggYml0cykKCi8vIEFyYWJpYSAoYm9hcmQgbGV2ZWwpIGRlZmluZXMKI2RlZmluZQlGTEFTSF9TSVpFCQkJMHgwODAwMDAJCS8vIDUxMiBLQiAoNCBNYikKI2RlZmluZQlFRVBST01fU0laRV9YRk1SCQk1MTIJCQkvLyB0cnVlIEVFUFJPTSBzaXplIChieXRlcyksIGluY2x1ZGluZyB4Zm1yIGFyZWEKI2RlZmluZQlFRVBST01fU0laRV9OT19YRk1SCQkyNTYJCQkvLyBFRVBST00gc2l6ZSBleGNsdWRpbmcgeGZtciBhcmVhCg==