LyoKICogRGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0gCiAqIGtub3duIGFzIEZURElfU0lPIChTZXJpYWwgSW5wdXQvT3V0cHV0IGFwcGxpY2F0aW9uIG9mIHRoZSBjaGlwc2V0KSAKICoKICogVGhlIGV4YW1wbGUgSSBoYXZlIGlzIGtub3duIGFzIHRoZSBVU0MtMTAwMCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbQogKiBodHRwOi8vd3d3LmRzZS5jby5ueiAtIGNhdCBubyBYSDQyMTQgSXQgbG9va3Mgc2ltaWxhciB0byB0aGlzOgogKiBodHRwOi8vd3d3LmRhbnNkYXRhLmNvbS91c2JzZXIuaHRtIGJ1dCBJIGNhbid0IGJlIHN1cmUgVGhlcmUgYXJlIG90aGVyCiAqIFVTQy0xMDAwcyB3aGljaCBkb24ndCBsb29rIGxpa2UgbXkgZGV2aWNlIHRob3VnaCBzbyBiZXdhcmUhCiAqCiAqIFRoZSBkZXZpY2UgaXMgYmFzZWQgb24gdGhlIEZUREkgRlQ4VTEwMEFYIGNoaXAuIEl0IGhhcyBhIERCMjUgb24gb25lIHNpZGUsIAogKiBVU0Igb24gdGhlIG90aGVyLgogKgogKiBUaGFueCB0byBGVERJIChodHRwOi8vd3d3LmZ0ZGkuY28udWspIGZvciBzbyBraW5kbHkgcHJvdmlkaW5nIGRldGFpbHMKICogb2YgdGhlIHByb3RvY29sIHJlcXVpcmVkIHRvIHRhbGsgdG8gdGhlIGRldmljZSBhbmQgb25nb2luZyBhc3Npc3RlbmNlCiAqIGR1cmluZyBkZXZlbG9wbWVudC4KICoKICogQmlsbCBSeWRlciAtIGJyeWRlckBzZ2kuY29tIGZvcm1lcmx5IG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4tIHdyb3RlIHRoZSAKICogRlRESV9TSU8gaW1wbGVtZW50YXRpb24uCiAqCiAqIFBoaWxpcHAgR/xocmluZyAtIHBnQGZ1dHVyZXdhcmUuYXQgLSBhZGRlZCB0aGUgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzCiAqIGZyb20gUnVkb2xmIEd1Z2xlcgogKgogKi8KCiNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLwojZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KI2RlZmluZSBGVERJXzhVMjMyQU1fUElEIDB4NjAwMSAvKiBTaW1pbGFyIGRldmljZSB0byBTSU8gYWJvdmUgKi8KI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCiNkZWZpbmUgRlRESV84VTIyMzJDX1BJRCAweDYwMTAgLyogRHVhbCBjaGFubmVsIGRldmljZSAqLwojZGVmaW5lIEZURElfUkVMQUlTX1BJRAkweEZBMTAgIC8qIFJlbGFpcyBkZXZpY2UgZnJvbSBSdWRvbGYgR3VnbGVyICovCiNkZWZpbmUgRlRESV9ORl9SSUNfVklECTB4MERDRAkvKiBWZW5kb3IgSWQgKi8KI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KCi8qIHd3dy5pcnRyYW5zLmRlIGRldmljZSAqLwojZGVmaW5lIEZURElfSVJUUkFOU19QSUQgMHhGQzYwIC8qIFByb2R1Y3QgSWQgKi8KCi8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMgLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhICovCi8qIHRoZXkgdXNlIHRoZSBmdGRpIGNoaXBzZXQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCB0aGUgdmVuZG9yIGlkIGlzIHRoZSBzYW1lICovCiNkZWZpbmUgRlRESV9YRl82MzJfUElEIDB4RkMwOAkvKiA2MzI6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KI2RlZmluZSBGVERJX1hGXzYzNF9QSUQgMHhGQzA5CS8qIDYzNDogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLwojZGVmaW5lIEZURElfWEZfNTQ3X1BJRCAweEZDMEEJLyogNTQ3OiBUd28gbGluZSBEaXNwbGF5ICovCiNkZWZpbmUgRlRESV9YRl82MzNfUElEIDB4RkMwQgkvKiA2MzM6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgd2l0aCBLZXlzICovCiNkZWZpbmUgRlRESV9YRl82MzFfUElEIDB4RkMwQwkvKiA2MzE6IDIweDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KI2RlZmluZSBGVERJX1hGXzYzNV9QSUQgMHhGQzBECS8qIDYzNTogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLwojZGVmaW5lIEZURElfWEZfNjQwX1BJRCAweEZDMEUJLyogNjQwOiBUd28gbGluZSBEaXNwbGF5ICovCiNkZWZpbmUgRlRESV9YRl82NDJfUElEIDB4RkMwRgkvKiA2NDI6IFR3byBsaW5lIERpc3BsYXkgKi8KCi8qIFZpZGVvIE5ldHdvcmtzIExpbWl0ZWQgLyBIb21lY2hvaWNlIGluIHRoZSBVSyB1c2UgYW4gZnRkaS1iYXNlZCBkZXZpY2UgZm9yIHRoZWlyIDFNYiAqLwovKiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZCBieSB0aGUgdXNiIGRldmljZSBzdXBwbGllZCAqLwovKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLwojZGVmaW5lIEZURElfVk5IQ1BDVVNCX0RfUElEIDB4ZmUzOCAvKiBQcm9kdWN0IElkICovCgovKgogKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAogKiB3aGljaCBhcmUgdGhlIEZUMjMyQk0gKCBzaW1pbGFyIHRvIHRoZSA4VTIzMkFNICkKICovCiNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KI2RlZmluZSBGVERJX01UWE9SQl8xX1BJRCAgICAgIDB4RkEwMSAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwojZGVmaW5lIEZURElfTVRYT1JCXzJfUElEICAgICAgMHhGQTAyICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCiNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KI2RlZmluZSBGVERJX01UWE9SQl80X1BJRCAgICAgIDB4RkEwNCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwojZGVmaW5lIEZURElfTVRYT1JCXzVfUElEICAgICAgMHhGQTA1ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCiNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KCi8qIEludGVyYmlvbWV0cmljcyBVU0IgSS9PIEJvYXJkICovCi8qIERldmVsb3BlZCBmb3IgSW50ZXJiaW9tZXRyaWNzIGJ5IFJ1ZG9sZiBHdWdsZXIgKi8KI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfVklEICAgICAgICAgICAgICAweDEyMDkKI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQgICAgICAweDEwMDIKI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCAweDEwMDYKCi8qCiAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBQZXJsZSBTeXN0ZW1zCiAqIFVsdHJhUG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMKICovCiNkZWZpbmUgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElEIDB4RjBDMAkvKiBQZXJsZSBVbHRyYVBvcnQgUHJvZHVjdCBJZCAqLwoKLyoKICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFNlYWxldmVsIFNlYUxJTksrIGFkYXB0ZXJzLgogKiAoT3JpZ2luYWwgbGlzdCBzZW50IGJ5IFR1YW4gSG9hbmcuICBJYW4gQWJib3R0IHJlbmFtZWQgdGhlIG1hY3JvcyBhbmQKICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCiAqLwojZGVmaW5lIFNFQUxFVkVMX1ZJRAkJMHgwYzUyCS8qIFNlYWxldmVsIFZlbmRvciBJRCAqLwojZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLwojZGVmaW5lIFNFQUxFVkVMXzIxMDJfUElECTB4MjEwMgkvKiBTZWFMSU5LKzQ4NSAoMjEwMikgKi8KI2RlZmluZSBTRUFMRVZFTF8yMTAzX1BJRAkweDIxMDMJLyogU2VhTElOSysyMzJJICgyMTAzKSAqLwojZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMV8yX1BJRAkweDIyMjEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMl8xX1BJRAkweDIyMTIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwM18xX1BJRAkweDIyMTMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDEgKi8KI2RlZmluZSBTRUFMRVZFTF8yMjAzXzJfUElECTB4MjIyMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfMl9QSUQJMHgyNDIxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfM19QSUQJMHgyNDMxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfMV9QSUQJMHgyNDEyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMSAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfMl9QSUQJMHgyNDIyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfNF9QSUQJMHgyNDQyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgNCAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDNfMV9QSUQJMHgyNDEzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KI2RlZmluZSBTRUFMRVZFTF8yNDAzXzNfUElECTB4MjQzMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDNfNF9QSUQJMHgyNDQzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8yX1BJRAkwWDI4MjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8zX1BJRAkwWDI4MzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAzICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV81X1BJRAkwWDI4NTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA1ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV82X1BJRAkwWDI4NjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA2ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV84X1BJRAkwWDI4ODEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA4ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8xX1BJRAkwWDI4MTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8zX1BJRAkwWDI4MzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAzICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl80X1BJRAkwWDI4NDIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl82X1BJRAkwWDI4NjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA2ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl83X1BJRAkwWDI4NzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA3ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwM18xX1BJRAkwWDI4MTMJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDEgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzJfUElECTBYMjgyMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDIgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzRfUElECTBYMjg0MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDQgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzVfUElECTBYMjg1MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDUgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzdfUElECTBYMjg3MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDcgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzhfUElECTBYMjg4MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDggKi8KCi8qCiAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAogKi8KIAojZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MiAgCgovKgogKiBIb21lIEVsZWN0cm9uaWNzICh3d3cuaG9tZS1lbGVjdHJvLmNvbSkgVVNCIGdhZGdldHMKICovCiNkZWZpbmUgRlRESV9IRV9USVJBMV9QSUQJMHhGQTc4CS8qIFRpcmEtMSBJUiB0cmFuc2NlaXZlciAqLwoKLyogVVNCLVVJUlQgLSBBbiBpbmZyYXJlZCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgdXNpbmcgdGhlIDhVMjMyQU0gY2hpcCAqLwovKiBodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0gKi8KI2RlZmluZSBGVERJX1VTQl9VSVJUX1BJRAkweEY4NTAJLyogUHJvZHVjdCBJZCAqLwoKLyoKICogRUxWIFVTQiBkZXZpY2VzIHN1Ym1pdHRlZCBieSBDaHJpc3RpYW4gQWJ0IG9mIEVMViAod3d3LmVsdi5kZSkuCiAqIEFsbCBvZiB0aGVzZSBkZXZpY2VzIHVzZSBGVERJJ3MgdmVuZG9yIElEICgweDA0MDMpLgogKgogKiBUaGUgcHJldmlvdXNseSBpbmNsdWRlZCBQSUQgZm9yIHRoZSBVTyAxMDAgbW9kdWxlIHdhcyBpbmNvcnJlY3QuCiAqIEluIGZhY3QsIHRoYXQgUElEIHdhcyBmb3IgRUxWJ3MgVVIgMTAwIFVTQi1SUzIzMiBjb252ZXJ0ZXIgKDB4RkI1OCkuCiAqCiAqIEFybWluIExhZXVnZXIgb3JpZ2luYWxseSBzZW50IHRoZSBQSUQgZm9yIHRoZSBVTSAxMDAgbW9kdWxlLgogKi8KI2RlZmluZSBGVERJX0VMVl9VUjEwMF9QSUQJMHhGQjU4CS8qIFVTQi1SUzIzMi1VbXNldHplciAoVVIgMTAwKSAqLwojZGVmaW5lIEZURElfRUxWX1VNMTAwX1BJRAkweEZCNUEJLyogVVNCLU1vZHVsIFVNIDEwMCAqLwojZGVmaW5lIEZURElfRUxWX1VPMTAwX1BJRAkweEZCNUIJLyogVVNCLU1vZHVsIFVPIDEwMCAqLwojZGVmaW5lIEZURElfRUxWX0FMQzg1MDBfUElECTB4RjA2RQkvKiBBTEMgODUwMCBFeHBlcnQgKi8KLyogQWRkaXRpb25hbCBFTFYgUElEcyB0aGF0IGRlZmF1bHQgdG8gdXNpbmcgdGhlIEZUREkgRDJYWCBkcml2ZXJzIG9uCiAqIE1TIFdpbmRvd3MsIHJhdGhlciB0aGFuIHRoZSBGVERJIFZpcnR1YWwgQ29tIFBvcnQgZHJpdmVycy4KICogTWF5YmUgdGhlc2Ugd2lsbCBiZSBlYXNpZXIgdG8gdXNlIHdpdGggdGhlIGxpYmZ0ZGkvbGlidXNiIHVzZXItc3BhY2UKICogZHJpdmVycywgb3IgcG9zc2libHkgdGhlIENvbWVkaSBkcml2ZXJzIGluIHNvbWUgY2FzZXMuICovCiNkZWZpbmUgRlRESV9FTFZfQ0xJNzAwMF9QSUQJMHhGQjU5CS8qIENvbXB1dGVyLUxpZ2h0LUludGVyZmFjZSAoQ0xJIDcwMDApICovCiNkZWZpbmUgRlRESV9FTFZfUFBTNzMzMF9QSUQJMHhGQjVDCS8qIFByb2Nlc3Nvci1Qb3dlci1TdXBwbHkgKFBQUyA3MzMwKSAqLwojZGVmaW5lIEZURElfRUxWX1RGTTEwMF9QSUQJMHhGQjVECS8qIFRlbXBlcmFydHVyLUZldWNodGUgTWVzc2dlcmFldCAoVEZNIDEwMCkgKi8KI2RlZmluZSBGVERJX0VMVl9VREY3N19QSUQJMHhGQjVFCS8qIFVTQiBEQ0YgRnVua3VyaCAoVURGIDc3KSAqLwojZGVmaW5lIEZURElfRUxWX1VJTzg4X1BJRAkweEZCNUYJLyogVVNCLUkvTyBJbnRlcmZhY2UgKFVJTyA4OCkgKi8KI2RlZmluZSBGVERJX0VMVl9VQUQ4X1BJRAkweEYwNjgJLyogVVNCLUFELVdhbmRsZXIgKFVBRCA4KSAqLwojZGVmaW5lIEZURElfRUxWX1VEQTdfUElECTB4RjA2OQkvKiBVU0ItREEtV2FuZGxlciAoVURBIDcpICovCiNkZWZpbmUgRlRESV9FTFZfVVNJMl9QSUQJMHhGMDZBCS8qIFVTQi1TY2hyaXR0bW90b3Jlbi1JbnRlcmZhY2UgKFVTSSAyKSAqLwojZGVmaW5lIEZURElfRUxWX1QxMTAwX1BJRAkweEYwNkIJLyogVGhlcm1vbWV0ZXIgKFQgMTEwMCkgKi8KI2RlZmluZSBGVERJX0VMVl9QQ0QyMDBfUElECTB4RjA2QwkvKiBQQy1EYXRlbmxvZ2dlciAoUENEIDIwMCkgKi8KI2RlZmluZSBGVERJX0VMVl9VTEEyMDBfUElECTB4RjA2RAkvKiBVU0ItTENELUFuc3RldWVydW5nIChVTEEgMjAwKSAqLwojZGVmaW5lIEZURElfRUxWX0ZIWjEwMDBQQ19QSUQJMHhGMDZGCS8qIEZIWiAxMDAwIFBDICovCiNkZWZpbmUgRlRESV9FTFZfQ1NJOF9QSUQJMHhFMEYwCS8qIENvbXB1dGVyLVNjaGFsdC1JbnRlcmZhY2UgKENTSSA4KSAqLwojZGVmaW5lIEZURElfRUxWX0VNMTAwMERMX1BJRAkweEUwRjEJLyogUEMtRGF0ZW5sb2dnZXIgZnVlciBFbmVyZ2llbW9uaXRvciAoRU0gMTAwMCBETCkgKi8KI2RlZmluZSBGVERJX0VMVl9QQ0sxMDBfUElECTB4RTBGMgkvKiBQQy1LYWJlbHRlc3RlciAoUENLIDEwMCkgKi8KI2RlZmluZSBGVERJX0VMVl9SRlA1MDBfUElECTB4RTBGMwkvKiBIRi1MZWlzdHVuZ3NtZXNzZXIgKFJGUCA1MDApICovCiNkZWZpbmUgRlRESV9FTFZfRlMyMFNJR19QSUQJMHhFMEY0CS8qIFNpZ25hbGdlYmVyIChGUyAyMCBTSUcpICovCiNkZWZpbmUgRlRESV9FTFZfV1MzMDBQQ19QSUQJMHhFMEY2CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDMwMCBQQykgKi8KI2RlZmluZSBGVERJX0VMVl9GSFoxMzAwUENfUElECTB4RTBFOAkvKiBGSFogMTMwMCBQQyAqLwojZGVmaW5lIEZURElfRUxWX1dTNTAwX1BJRAkweEUwRTkJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgNTAwKSAqLwoKLyoKICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcwogKi8KI2RlZmluZSBJRFRFQ0hfVklECQkweDBBQ0QJLyogSUQgVEVDSCBWZW5kb3IgSUQgKi8KI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KCi8qCiAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKICovCiNkZWZpbmUgT0NUX1ZJRAkJCTB4MEIzOQkvKiBPQ1QgdmVuZG9yIElEICovCi8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KLyogQWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChBdXMpIFhINjQ1MSAqLwovKiBBbHNvIHJlYmFkZ2VkIGFzIFNJSUcgSW5jLiBtb2RlbCBVUzIzMDggaGFyZHdhcmUgdmVyc2lvbiAxICovCiNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCgovKiBhbiBpbmZyYXJlZCByZWNlaXZlciBmb3IgdXNlciBhY2Nlc3MgY29udHJvbCB3aXRoIElSIHRhZ3MgKi8KI2RlZmluZSBGVERJX1BJRUdST1VQX1BJRAkweEYyMDgJLyogUHJvZHVjdCBJZCAqLwoKLyoKICogUHJvdGVnbyBwcm9kdWN0IGlkcwogKi8KI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMQkweEZDNzAJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwojZGVmaW5lIFBST1RFR09fUjJYMAkJMHhGQzcxCS8qIFIyMDAtVVNCIFRSTkcgdW5pdCAoUjIxMCwgUjIyMCwgYW5kIFIyMzApICovCiNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzMJMHhGQzcyCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfNAkweEZDNzMJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwoKLyoKICogR3VkZSBBbmFsb2ctIHVuZCBEaWdpdGFsc3lzdGVtZSBHbWJICiAqLwojZGVmaW5lIEZURElfR1VERUFEU19FODA4X1BJRCAgICAweEU4MDgKI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOV9QSUQgICAgMHhFODA5CiNkZWZpbmUgRlRESV9HVURFQURTX0U4MEFfUElEICAgIDB4RTgwQQojZGVmaW5lIEZURElfR1VERUFEU19FODBCX1BJRCAgICAweEU4MEIKI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQ19QSUQgICAgMHhFODBDCiNkZWZpbmUgRlRESV9HVURFQURTX0U4MERfUElEICAgIDB4RTgwRAojZGVmaW5lIEZURElfR1VERUFEU19FODBFX1BJRCAgICAweEU4MEUKI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRl9QSUQgICAgMHhFODBGCiNkZWZpbmUgRlRESV9HVURFQURTX0U4ODhfUElEICAgIDB4RTg4OCAgLyogRXhwZXJ0IElTRE4gQ29udHJvbCBVU0IgKi8KI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OV9QSUQgICAgMHhFODg5ICAvKiBVU0IgUlMtMjMyIE9wdG9CcmlkZ2UgKi8KI2RlZmluZSBGVERJX0dVREVBRFNfRTg4QV9QSUQgICAgMHhFODhBCiNkZWZpbmUgRlRESV9HVURFQURTX0U4OEJfUElEICAgIDB4RTg4QgojZGVmaW5lIEZURElfR1VERUFEU19FODhDX1BJRCAgICAweEU4OEMKI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RF9QSUQgICAgMHhFODhECiNkZWZpbmUgRlRESV9HVURFQURTX0U4OEVfUElEICAgIDB4RTg4RQojZGVmaW5lIEZURElfR1VERUFEU19FODhGX1BJRCAgICAweEU4OEYKCi8qCiAqIExpbnggVGVjaG5vbG9naWVzIHByb2R1Y3QgaWRzCiAqLwojZGVmaW5lIExJTlhfU0RNVVNCUVNTX1BJRAkweEY0NDgJLyogTGlueCBTRE0tVVNCLVFTLVMgKi8KI2RlZmluZSBMSU5YX01BU1RFUkRFVkVMMl9QSUQgICAweEY0NDkgICAvKiBMaW54IE1hc3RlciBEZXZlbG9wbWVudCAyLjAgKi8KI2RlZmluZSBMSU5YX0ZVVFVSRV8wX1BJRCAgIDB4RjQ0QSAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwojZGVmaW5lIExJTlhfRlVUVVJFXzFfUElEICAgMHhGNDRCICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCiNkZWZpbmUgTElOWF9GVVRVUkVfMl9QSUQgICAweEY0NEMgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KCi8qIENDUyBJbmMuIElDRFUvSUNEVTQwIHByb2R1Y3QgSUQgLSB0aGUgRlQyMzJCTSBpcyB1c2VkIGluIGFuIGluLWNpcmN1aXQtZGVidWdnZXIgKi8KLyogdW5pdCBmb3IgUElDMTYncy9QSUMxOCdzICovCiNkZWZpbmUgRlRESV9DQ1NJQ0RVMjBfMF9QSUQgICAgMHhGOUQwICAgICAKI2RlZmluZSBGVERJX0NDU0lDRFU0MF8xX1BJRCAgICAweEY5RDEgICAgIAoKLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KI2RlZmluZSBJTlNJREVfQUNDRVNTTwkJMHhGQUQwCgovKgogKiBJbnRyZXBpZCBDb250cm9sIFN5c3RlbXMgKGh0dHA6Ly93d3cuaW50cmVwaWRjcy5jb20vKSBWYWx1ZUNBTiBhbmQgTmVvVkkKICovCiNkZWZpbmUgSU5UUkVQSURfVklECQkweDA5M0MKI2RlZmluZSBJTlRSRVBJRF9WQUxVRUNBTl9QSUQJMHgwNjAxCiNkZWZpbmUgSU5UUkVQSURfTkVPVklfUElECTB4MDcwMQoKLyoKICogRmFsY29tIFdpcmVsZXNzIENvbW11bmljYXRpb25zIEdtYkgKICovCiNkZWZpbmUgRkFMQ09NX1ZJRAkJMHgwRjk0CS8qIFZlbmRvciBJZCAqLwojZGVmaW5lIEZBTENPTV9UV0lTVF9QSUQJMHgwMDAxCS8qIEZhbGNvbSBUd2lzdCBVU0IgR1BSUyBtb2RlbSAqLwojZGVmaW5lIEZBTENPTV9TQU1CQV9QSUQJMHgwMDA1CS8qIEZhbGNvbSBTYW1iYSBVU0IgR1BSUyBtb2RlbSAqLwoKLyoKICogU1VVTlRPIHByb2R1Y3QgaWRzCiAqLwojZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLwoKLyoKICogRGVmaW5pdGlvbnMgZm9yIEImQiBFbGVjdHJvbmljcyBwcm9kdWN0cy4KICovCiNkZWZpbmUgQkFOREJfVklECQkweDA4NTYJLyogQiZCIEVsZWN0cm9uaWNzIFZlbmRvciBJRCAqLwojZGVmaW5lIEJBTkRCX1VTT1RMNF9QSUQJMHhBQzAxCS8qIFVTT1RMNCBJc29sYXRlZCBSUy00ODUgQ29udmVydGVyICovCiNkZWZpbmUgQkFOREJfVVNUTDRfUElECQkweEFDMDIJLyogVVNUTDQgUlMtNDg1IENvbnZlcnRlciAqLwojZGVmaW5lIEJBTkRCX1VTTzlNTDJfUElECTB4QUMwMwkvKiBVU085TUwyIElzb2xhdGVkIFJTLTIzMiBDb252ZXJ0ZXIgKi8KCi8qCiAqIFJNIE1pY2hhZWxpZGVzIENBTnZpZXcgVVNCIChodHRwOi8vd3d3LnJtY2FuLmNvbSkKICogQ0FOIGZpZWxkYnVzIGludGVyZmFjZSBhZGFwdGVyLCBhZGRlZCBieSBwb3J0IEdtYkggd3d3LnBvcnQuZGUpCiAqIElhbiBBYmJvdHQgY2hhbmdlZCB0aGUgbWFjcm8gbmFtZXMgZm9yIGNvbnNpc3RlbmN5LgogKi8KI2RlZmluZSBGVERJX1JNX0NBTlZJRVdfUElECTB4ZmQ2MAkvKiBQcm9kdWN0IElkICovCgovKgogKiBFVkVSIEVjbyBQcm8gVVBTIChodHRwOi8vd3d3LmV2ZXIuY29tLnBsLykKICovCgojZGVmaW5lCUVWRVJfRUNPX1BST19DRFMJMHhlNTIwCS8qIFJTLTIzMiBjb252ZXJ0ZXIgKi8KCi8qCiAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAogKiBVU0ItVFRZIGFjdGl2LCBVU0ItVFRZIHBhc3Npdi4gIFNvbWUgUElEcyBhcmUgdXNlZCBieSBzZXZlcmFsIGRldmljZXMKICogYW5kIEknbSBub3QgZW50aXJlbHkgc3VyZSB3aGljaCBhcmUgdXNlZCBieSB3aGljaC4KICovCiNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMF9QSUQJMHg4MzcyCiNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQJMHhGM0MwCiNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMl9QSUQJMHhGM0MxCgovKgogKiBNb2JpbGl0eSBFbGVjdHJvbmljcyBwcm9kdWN0cy4KICovCiNkZWZpbmUgTU9CSUxJVFlfVklECQkJMHgxMzQyCiNkZWZpbmUgTU9CSUxJVFlfVVNCX1NFUklBTF9QSUQJCTB4MDIwMgkvKiBFYXNpRG9jayBVU0IgMjAwIHNlcmlhbCAqLwoKLyoKICogbWljcm9IQU0gcHJvZHVjdCBJRHMgKGh0dHA6Ly93d3cubWljcm9oYW0uY29tKS4KICogU3VibWl0dGVkIGJ5IEp1c3RpbiBCdXJrZXQgKEtMMVJMKSA8em9ydG9uQGp0YW4uY29tPi4KICovCiNkZWZpbmUgRlRESV9NSEFNX1k2X1BJRCAweEVFRUEJCS8qIFVTQi1ZNiBpbnRlcmZhY2UgKi8KI2RlZmluZSBGVERJX01IQU1fWThfUElEIDB4RUVFQgkJLyogVVNCLVk4IGludGVyZmFjZSAqLwoKLyoKICogQWN0aXZlIFJvYm90cyBwcm9kdWN0IGlkcy4KICovCiNkZWZpbmUgRlRESV9BQ1RJVkVfUk9CT1RTX1BJRAkweEU1NDgJLyogVVNCIGNvbW1zIGJvYXJkICovCgovKgogKiBYc2VucyBUZWNobm9sb2dpZXMgQlYgcHJvZHVjdHMgKGh0dHA6Ly93d3cueHNlbnMuY29tKS4KICovCiNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzBfUElECTB4RDM4OAojZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8xX1BJRAkweEQzODkKI2RlZmluZSBYU0VOU19DT05WRVJURVJfMl9QSUQJMHhEMzhBCiNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzNfUElECTB4RDM4QgojZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl80X1BJRAkweEQzOEMKI2RlZmluZSBYU0VOU19DT05WRVJURVJfNV9QSUQJMHhEMzhECiNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzZfUElECTB4RDM4RQojZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl83X1BJRAkweEQzOEYKCi8qCiAqIEV2b2x1dGlvbiBSb2JvdGljcyBwcm9kdWN0cyAoaHR0cDovL3d3dy5ldm9sdXRpb24uY29tLykuCiAqIFN1Ym1pdHRlZCBieSBTaGF3biBNLiBMYXZlbGxlLgogKi8KI2RlZmluZSBFVk9MVVRJT05fVklECQkweERFRUUJLyogVmVuZG9yIElEICovCiNkZWZpbmUgRVZPTFVUSU9OX0VSMV9QSUQJMHgwMzAwCS8qIEVSMSBDb250cm9sIE1vZHVsZSAqLwoKLyogQ29tbWFuZHMgKi8KI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwojZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkwJMiAvKiBTZXQgZmxvdyBjb250cm9sIHJlZ2lzdGVyICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURfUkFURQkzIC8qIFNldCBiYXVkIHJhdGUgKi8KI2RlZmluZSBGVERJX1NJT19TRVRfREFUQQk0IC8qIFNldCB0aGUgZGF0YSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHBvcnQgKi8KI2RlZmluZSBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCTUgLyogUmV0cmlldmUgY3VycmVudCB2YWx1ZSBvZiBtb2Rlcm4gc3RhdHVzIHJlZ2lzdGVyICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIJNiAvKiBTZXQgdGhlIGV2ZW50IGNoYXJhY3RlciAqLwojZGVmaW5lIEZURElfU0lPX1NFVF9FUlJPUl9DSEFSCTcgLyogU2V0IHRoZSBlcnJvciBjaGFyYWN0ZXIgKi8KI2RlZmluZSBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgk5IC8qIFNldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwojZGVmaW5lIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCTEwIC8qIEdldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwoKCi8qCiAqICAgQm1SZXF1ZXN0VHlwZTogIDExMDAgMDAwMGIKICogICBiUmVxdWVzdDogICAgICAgRlRESV9FMl9SRUFECiAqICAgd1ZhbHVlOiAgICAgICAgIDAKICogICB3SW5kZXg6ICAgICAgICAgQWRkcmVzcyBvZiB3b3JkIHRvIHJlYWQKICogICB3TGVuZ3RoOiAgICAgICAgMgogKiAgIERhdGE6ICAgICAgICAgICBXaWxsIHJldHVybiBhIHdvcmQgb2YgZGF0YSBmcm9tIEUyQWRkcmVzcwogKgogKi8KCi8qIFBvcnQgSWRlbnRpZmllciBUYWJsZSAqLwojZGVmaW5lIFBJVF9ERUZBVUxUIAkJMCAvKiBTSU9BICovCiNkZWZpbmUgUElUX1NJT0EJCTEgLyogU0lPQSAqLwovKiBUaGUgZGV2aWNlIHRoaXMgZHJpdmVyIGlzIHRlc3RlZCB3aXRoIG9uZSBoYXMgb25seSBvbmUgcG9ydCAqLwojZGVmaW5lIFBJVF9TSU9CCQkyIC8qIFNJT0IgKi8KI2RlZmluZSBQSVRfUEFSQUxMRUwJCTMgLyogUGFyYWxsZWwgKi8KCi8qIEZURElfU0lPX1JFU0VUICovCiNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUkVRVUVTVCBGVERJX1NJT19SRVNFVAojZGVmaW5lIEZURElfU0lPX1JFU0VUX1JFUVVFU1RfVFlQRSAweDQwCiNkZWZpbmUgRlRESV9TSU9fUkVTRVRfU0lPIDAKI2RlZmluZSBGVERJX1NJT19SRVNFVF9QVVJHRV9SWCAxCiNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUFVSR0VfVFggMgoKLyoKICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIKICogYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1JFU0VUCiAqIHdWYWx1ZTogICAgICAgICBDb250cm9sIFZhbHVlIAogKiAgICAgICAgICAgICAgICAgICAwID0gUmVzZXQgU0lPCiAqICAgICAgICAgICAgICAgICAgIDEgPSBQdXJnZSBSWCBidWZmZXIKICogICAgICAgICAgICAgICAgICAgMiA9IFB1cmdlIFRYIGJ1ZmZlcgogKiB3SW5kZXg6ICAgICAgICAgUG9ydAogKiB3TGVuZ3RoOiAgICAgICAgMAogKiBEYXRhOiAgICAgICAgICAgTm9uZQogKgogKiBUaGUgUmVzZXQgU0lPIGNvbW1hbmQgaGFzIHRoaXMgZWZmZWN0OgogKgogKiAgICBTZXRzIGZsb3cgY29udHJvbCBzZXQgdG8gJ25vbmUnCiAqICAgIEV2ZW50IGNoYXIgPSAkMEQKICogICAgRXZlbnQgdHJpZ2dlciA9IGRpc2FibGVkCiAqICAgIFB1cmdlIFJYIGJ1ZmZlcgogKiAgICBQdXJnZSBUWCBidWZmZXIKICogICAgQ2xlYXIgRFRSCiAqICAgIENsZWFyIFJUUwogKiAgICBiYXVkIGFuZCBkYXRhIGZvcm1hdCBub3QgcmVzZXQKICoKICogVGhlIFB1cmdlIFJYIGFuZCBUWCBidWZmZXIgY29tbWFuZHMgYWZmZWN0IG5vdGhpbmcgZXhjZXB0IHRoZSBidWZmZXJzCiAqCiAgICovCgovKiBGVERJX1NJT19TRVRfQkFVRFJBVEUgKi8KI2RlZmluZSBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVF9UWVBFIDB4NDAKI2RlZmluZSBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVCAzCgovKgogKiBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwQgogKiBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0JBVURSQVRFCiAqIHdWYWx1ZTogICAgICAgICBCYXVkRGl2aXNvciB2YWx1ZSAtIHNlZSBiZWxvdwogKiB3SW5kZXg6ICAgICAgICAgUG9ydAogKiB3TGVuZ3RoOiAgICAgICAgMAogKiBEYXRhOiAgICAgICAgICAgTm9uZQogKiBUaGUgQmF1ZERpdmlzb3IgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGFzIGZvbGxvd3M6CiAqIC0gQmFzZUNsb2NrIGlzIGVpdGhlciAxMjAwMDAwMCBvciA0ODAwMDAwMCBkZXBlbmRpbmcgb24gdGhlIGRldmljZS4gRklYTUU6IEkgd2lzaAogKiAgIEkga25ldyBob3cgdG8gZGV0ZWN0IG9sZCBjaGlwcyB0byBzZWxlY3QgcHJvcGVyIGJhc2UgY2xvY2shCiAqIC0gQmF1ZERpdmlzb3IgaXMgYSBmaXhlZCBwb2ludCBudW1iZXIgZW5jb2RlZCBpbiBhIGZ1bm55IHdheS4KICogICAoLS1XUk9ORyBXQVkgT0YgVEhJTktJTkctLSkKICogICBCYXVkRGl2aXNvciBpcyBhIGZpeGVkIHBvaW50IG51bWJlciBlbmNvZGVkIHdpdGggZm9sbG93aW5nIGJpdCB3ZWlnaHM6CiAqICAgKC0yKSgtMSkoMTMuLjApLiBJdCBpcyBhIHJhZGljYWwgd2l0aCBhIGRlbm9taW5hdG9yIG9mIDQsIHNvIHZhbHVlcwogKiAgIGVuZCB3aXRoIDAuMCAoMDAuLi4pLCAwLjI1ICgxMC4uLiksIDAuNSAoMDEuLi4pLCBhbmQgMC43NSAoMTEuLi4pLgogKiAgICgtLVRIRSBSRUFMSVRZLS0pCiAqICAgVGhlIGJvdGgtYml0cy1zZXQgaGFzIHF1aXRlIGRpZmZlcmVudCBtZWFuaW5nIGZyb20gMC43NSAtIHRoZSBjaGlwIGRlc2lnbmVycwogKiAgIGhhdmUgZGVjaWRlZCBpdCB0byBtZWFuIDAuMTI1IGluc3RlYWQgb2YgMC43NS4KICogICBUaGlzIGluZm8gbG9va2VkIHVwIGluIEZUREkgYXBwbGljYXRpb24gbm90ZSAiRlQ4VTIzMiBERVZJQ0VTIFwgRGF0YSBSYXRlcwogKiAgIGFuZCBGbG93IENvbnRyb2wgQ29uc2lkZXJhdGlvbiBmb3IgVVNCIHRvIFJTMjMyIi4KICogLSBCYXVkRGl2aXNvciA9IChCYXNlQ2xvY2sgLyAxNikgLyBCYXVkUmF0ZSwgd2hlcmUgdGhlICg9KSBvcGVyYXRpb24gc2hvdWxkCiAqICAgYXV0b21hZ2ljYWxseSByZS1lbmNvZGUgdGhlIHJlc3VsdGluZyB2YWx1ZSB0byB0YWtlIGZyYWN0aW9ucyBpbnRvIGNvbnNpZGVyYXRpb24uCiAqIEFzIGFsbCB2YWx1ZXMgYXJlIGludGVnZXJzLCBzb21lIGJpdCB0d2lkZGxpbmcgaXMgaW4gb3JkZXI6CiAqICAgQmF1ZERpdmlzb3IgPSAoQmFzZUNsb2NrIC8gMTYgLyBCYXVkUmF0ZSkgfAogKiAgICgoKEJhc2VDbG9jayAvIDIgLyBCYXVkUmF0ZSkgJiA0KSA/IDB4NDAwMCAgICAvLyAwLjUKICogICAgOiAoKEJhc2VDbG9jayAvIDIgLyBCYXVkUmF0ZSkgJiAyKSA/IDB4ODAwMCAgLy8gMC4yNQogKiAgICA6ICgoQmFzZUNsb2NrIC8gMiAvIEJhdWRSYXRlKSAmIDEpID8gMHhjMDAwICAvLyAwLjEyNQogKiAgICA6IDApCiAqCiAqIEZvciB0aGUgRlQyMzJCTSwgYSAxN3RoIGRpdmlzb3IgYml0IHdhcyBpbnRyb2R1Y2VkIHRvIGVuY29kZSB0aGUgbXVsdGlwbGVzCiAqIG9mIDAuMTI1IG1pc3NpbmcgZnJvbSB0aGUgRlQ4VTIzMkFNLiAgQml0cyAxNiB0byAxNCBhcmUgY29kZWQgYXMgZm9sbG93cwogKiAodGhlIGZpcnN0IGZvdXIgY29kZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgRlQ4VTIzMkFNLCB3aGVyZSBiaXQgMTYgaXMKICogYWx3YXlzIDApOgogKiAgIDAwMCAtIGFkZCAuMDAwIHRvIGRpdmlzb3IKICogICAwMDEgLSBhZGQgLjUwMCB0byBkaXZpc29yCiAqICAgMDEwIC0gYWRkIC4yNTAgdG8gZGl2aXNvcgogKiAgIDAxMSAtIGFkZCAuMTI1IHRvIGRpdmlzb3IKICogICAxMDAgLSBhZGQgLjM3NSB0byBkaXZpc29yCiAqICAgMTAxIC0gYWRkIC42MjUgdG8gZGl2aXNvcgogKiAgIDExMCAtIGFkZCAuNzUwIHRvIGRpdmlzb3IKICogICAxMTEgLSBhZGQgLjg3NSB0byBkaXZpc29yCiAqIEJpdHMgMTUgdG8gMCBvZiB0aGUgMTctYml0IGRpdmlzb3IgYXJlIHBsYWNlZCBpbiB0aGUgdXJiIHZhbHVlLiAgQml0IDE2IGlzIAogKiBwbGFjZWQgaW4gYml0IDAgb2YgdGhlIHVyYiBpbmRleC4KICoKICogTm90ZSB0aGF0IHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzcGVjaWFsIGNhc2VzIHRvIHN1cHBvcnQgdGhlIGhpZ2hlc3QgYmF1ZAogKiByYXRlcy4gIElmIHRoZSBjYWxjdWxhdGVkIGRpdmlzb3IgdmFsdWUgaXMgMSwgdGhpcyBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoCiAqIDAuICBBZGRpdGlvbmFsbHkgZm9yIHRoZSBGVDIzMkJNLCBpZiB0aGUgY2FsY3VsYXRlZCBkaXZpc29yIHZhbHVlIGlzIDB4NDAwMQogKiAoMS41KSwgdGhpcyBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIDB4MDAwMSAoMSkgKGJ1dCB0aGlzIGRpdmlzb3IgdmFsdWUgaXMKICogbm90IHN1cHBvcnRlZCBieSB0aGUgRlQ4VTIzMkFNKS4KICovCgp0eXBlZGVmIGVudW0gewoJU0lPID0gMSwKCUZUOFUyMzJBTSA9IDIsCglGVDIzMkJNID0gMywKCUZUMjIzMkMgPSA0LAp9IGZ0ZGlfY2hpcF90eXBlX3Q7Cgp0eXBlZGVmIGVudW0gewogZnRkaV9zaW9fYjMwMCA9IDAsIAogZnRkaV9zaW9fYjYwMCA9IDEsIAogZnRkaV9zaW9fYjEyMDAgPSAyLAogZnRkaV9zaW9fYjI0MDAgPSAzLAogZnRkaV9zaW9fYjQ4MDAgPSA0LAogZnRkaV9zaW9fYjk2MDAgPSA1LAogZnRkaV9zaW9fYjE5MjAwID0gNiwKIGZ0ZGlfc2lvX2IzODQwMCA9IDcsCiBmdGRpX3Npb19iNTc2MDAgPSA4LAogZnRkaV9zaW9fYjExNTIwMCA9IDkKfSBGVERJX1NJT19iYXVkcmF0ZV90IDsKCi8qCiAqIFRoZSBmdGRpXzhVMjMyQU1feHhNSHpfYnl5eSBjb25zdGFudHMgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZSBlbmNvZGVkIGRpdmlzb3IgdmFsdWVzCiAqIGFyZSBjYWxjdWxhdGVkIGludGVybmFsbHkuCiAqLwoKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUIEZURElfU0lPX1NFVF9EQVRBCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFIDB4NDAKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfTk9ORSAoMHgwIDw8IDggKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9PREQgKDB4MSA8PCA4ICkKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfRVZFTiAoMHgyIDw8IDggKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9NQVJLICgweDMgPDwgOCApCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX1NQQUNFICgweDQgPDwgOCApCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzEgKDB4MCA8PCAxMSApCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzE1ICgweDEgPDwgMTEgKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18yICgweDIgPDwgMTEgKQojZGVmaW5lIEZURElfU0lPX1NFVF9CUkVBSyAoMHgxIDw8IDE0KQovKiBGVERJX1NJT19TRVRfREFUQSAqLwoKLyoKICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIgCiAqIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfREFUQQogKiB3VmFsdWU6ICAgICAgICAgRGF0YSBjaGFyYWN0ZXJpc3RpY3MgKHNlZSBiZWxvdykKICogd0luZGV4OiAgICAgICAgIFBvcnQKICogd0xlbmd0aDogICAgICAgIDAKICogRGF0YTogICAgICAgICAgIE5vCiAqCiAqIERhdGEgY2hhcmFjdGVyaXN0aWNzCiAqCiAqICAgQjAuLjcgICBOdW1iZXIgb2YgZGF0YSBiaXRzCiAqICAgQjguLjEwICBQYXJpdHkKICogICAgICAgICAgIDAgPSBOb25lCiAqICAgICAgICAgICAxID0gT2RkCiAqICAgICAgICAgICAyID0gRXZlbgogKiAgICAgICAgICAgMyA9IE1hcmsKICogICAgICAgICAgIDQgPSBTcGFjZQogKiAgIEIxMS4uMTMgU3RvcCBCaXRzCiAqICAgICAgICAgICAwID0gMQogKiAgICAgICAgICAgMSA9IDEuNQogKiAgICAgICAgICAgMiA9IDIKICogICBCMTQKICogICAgICAgICAgIDEgPSBUWCBPTiAoYnJlYWspCiAqICAgICAgICAgICAwID0gVFggT0ZGIChub3JtYWwgc3RhdGUpCiAqICAgQjE1IFJlc2VydmVkCiAqCiAqLwoKCgovKiBGVERJX1NJT19NT0RFTV9DVFJMICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVF9UWVBFIDB4NDAKI2RlZmluZSBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNUIEZURElfU0lPX01PREVNX0NUUkwKCi8qIAogKiBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMEIKICogYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19NT0RFTV9DVFJMCiAqIHdWYWx1ZTogICAgICAgICAgQ29udHJvbFZhbHVlIChzZWUgYmVsb3cpCiAqIHdJbmRleDogICAgICAgICAgUG9ydAogKiB3TGVuZ3RoOiAgICAgICAgIDAKICogRGF0YTogICAgICAgICAgICBOb25lCiAqCiAqIE5PVEU6IElmIHRoZSBkZXZpY2UgaXMgaW4gUlRTL0NUUyBmbG93IGNvbnRyb2wsIHRoZSBSVFMgc2V0IGJ5IHRoaXMKICogY29tbWFuZCB3aWxsIGJlIElHTk9SRUQgd2l0aG91dCBhbiBlcnJvciBiZWluZyByZXR1cm5lZAogKiBBbHNvIC0geW91IGNhbiBub3Qgc2V0IERUUiBhbmQgUlRTIHdpdGggb25lIGNvbnRyb2wgbWVzc2FnZQogKi8KCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9NQVNLIDB4MQojZGVmaW5lIEZURElfU0lPX1NFVF9EVFJfSElHSCAoIDEgfCAoIEZURElfU0lPX1NFVF9EVFJfTUFTSyAgPDwgOCkpCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9MT1cgICggMCB8ICggRlRESV9TSU9fU0VUX0RUUl9NQVNLICA8PCA4KSkKI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX01BU0sgMHgyCiNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19ISUdIICggMiB8ICggRlRESV9TSU9fU0VUX1JUU19NQVNLIDw8IDggKSkKI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX0xPVyAoIDAgfCAoIEZURElfU0lPX1NFVF9SVFNfTUFTSyA8PCA4ICkpCgovKgogKiBDb250cm9sVmFsdWUKICogQjAgICAgRFRSIHN0YXRlCiAqICAgICAgICAgIDAgPSByZXNldAogKiAgICAgICAgICAxID0gc2V0CiAqIEIxICAgIFJUUyBzdGF0ZQogKiAgICAgICAgICAwID0gcmVzZXQKICogICAgICAgICAgMSA9IHNldAogKiBCMi4uNyBSZXNlcnZlZAogKiBCOCAgICBEVFIgc3RhdGUgZW5hYmxlCiAqICAgICAgICAgIDAgPSBpZ25vcmUKICogICAgICAgICAgMSA9IHVzZSBEVFIgc3RhdGUKICogQjkgICAgUlRTIHN0YXRlIGVuYWJsZQogKiAgICAgICAgICAwID0gaWdub3JlCiAqICAgICAgICAgIDEgPSB1c2UgUlRTIHN0YXRlCiAqIEIxMC4uMTUgUmVzZXJ2ZWQKICovCgovKiBGVERJX1NJT19TRVRfRkxPV19DVFJMICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUgMHg0MAojZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCBGVERJX1NJT19TRVRfRkxPV19DVFJMCiNkZWZpbmUgRlRESV9TSU9fRElTQUJMRV9GTE9XX0NUUkwgMHgwIAojZGVmaW5lIEZURElfU0lPX1JUU19DVFNfSFMgKDB4MSA8PCA4KQojZGVmaW5lIEZURElfU0lPX0RUUl9EU1JfSFMgKDB4MiA8PCA4KQojZGVmaW5lIEZURElfU0lPX1hPTl9YT0ZGX0hTICgweDQgPDwgOCkKLyoKICogICBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwYgogKiAgIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMCiAqICAgd1ZhbHVlOiAgICAgICAgIFhvZmYvWG9uCiAqICAgd0luZGV4OiAgICAgICAgIFByb3RvY29sL1BvcnQgLSBoSW5kZXggaXMgcHJvdG9jbCAvIGxJbmRleCBpcyBwb3J0CiAqICAgd0xlbmd0aDogICAgICAgIDAgCiAqICAgRGF0YTogICAgICAgICAgIE5vbmUKICoKICogaEluZGV4IHByb3RvY29sIGlzOgogKiAgIEIwIE91dHB1dCBoYW5kc2hha2luZyB1c2luZyBSVFMvQ1RTCiAqICAgICAgIDAgPSBkaXNhYmxlZAogKiAgICAgICAxID0gZW5hYmxlZAogKiAgIEIxIE91dHB1dCBoYW5kc2hha2luZyB1c2luZyBEVFIvRFNSCiAqICAgICAgIDAgPSBkaXNhYmxlZAogKiAgICAgICAxID0gZW5hYmxlZAogKiAgIEIyIFhvbi9Yb2ZmIGhhbmRzaGFraW5nCiAqICAgICAgIDAgPSBkaXNhYmxlZAogKiAgICAgICAxID0gZW5hYmxlZAogKgogKiBBIHZhbHVlIG9mIHplcm8gaW4gdGhlIGhJbmRleCBmaWVsZCBkaXNhYmxlcyBoYW5kc2hha2luZwogKgogKiBJZiBYb24vWG9mZiBoYW5kc2hha2luZyBpcyBzcGVjaWZpZWQsIHRoZSBoVmFsdWUgZmllbGQgc2hvdWxkIGNvbnRhaW4gdGhlIFhPRkYgY2hhcmFjdGVyIAogKiBhbmQgdGhlIGxWYWx1ZSBmaWVsZCBjb250YWlucyB0aGUgWE9OIGNoYXJhY3Rlci4KICovICAKIAovKgogKiBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgogKgogKiBTZXQgdGhlIHRpbWVvdXQgaW50ZXJ2YWwuIFRoZSBGVERJIGNvbGxlY3RzIGRhdGEgZnJvbSB0aGUgc2xhdmUKICogZGV2aWNlLCB0cmFuc21pdHRpbmcgaXQgdG8gdGhlIGhvc3Qgd2hlbiBlaXRoZXIgQSkgNjIgYnl0ZXMgYXJlCiAqIHJlY2VpdmVkLCBvciBCKSB0aGUgdGltZW91dCBpbnRlcnZhbCBoYXMgZWxhcHNlZCBhbmQgdGhlIGJ1ZmZlcgogKiBjb250YWlucyBhdCBsZWFzdCAxIGJ5dGUuICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gYSBzbWFsbCBudW1iZXIKICogY2FuIGRyYW1hdGljYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggc2VuZAogKiBzbWFsbCBwYWNrZXRzLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxNm1zLgogKi8KI2RlZmluZSAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgojZGVmaW5lICBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUgMHhDMAoKLyogCiAqICBCbVJlcXVlc3RUeXBlOiAgIDExMDAgMDAwMGIKICogIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIKICogIHdWYWx1ZTogICAgICAgICAgMAogKiAgd0luZGV4OiAgICAgICAgICBQb3J0CiAqICB3TGVuZ3RoOiAgICAgICAgIDAKICogIERhdGE6ICAgICAgICAgICAgbGF0ZW5jeSAob24gcmV0dXJuKQogKi8KCi8qIAogKiBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgogKgogKiBTZXQgdGhlIHRpbWVvdXQgaW50ZXJ2YWwuIFRoZSBGVERJIGNvbGxlY3RzIGRhdGEgZnJvbSB0aGUgc2xhdmUKICogZGV2aWNlLCB0cmFuc21pdHRpbmcgaXQgdG8gdGhlIGhvc3Qgd2hlbiBlaXRoZXIgQSkgNjIgYnl0ZXMgYXJlCiAqIHJlY2VpdmVkLCBvciBCKSB0aGUgdGltZW91dCBpbnRlcnZhbCBoYXMgZWxhcHNlZCBhbmQgdGhlIGJ1ZmZlcgogKiBjb250YWlucyBhdCBsZWFzdCAxIGJ5dGUuICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gYSBzbWFsbCBudW1iZXIKICogY2FuIGRyYW1hdGljYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggc2VuZAogKiBzbWFsbCBwYWNrZXRzLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxNm1zLgogKi8KI2RlZmluZSAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgojZGVmaW5lICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUgMHg0MAoKLyogCiAqICBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMGIKICogIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIKICogIHdWYWx1ZTogICAgICAgICAgTGF0ZW5jeSAobWlsbGlzZWNvbmRzKQogKiAgd0luZGV4OiAgICAgICAgICBQb3J0CiAqICB3TGVuZ3RoOiAgICAgICAgIDAKICogIERhdGE6ICAgICAgICAgICAgTm9uZQogKgogKiB3VmFsdWU6CiAqICAgQjAuLjcgICBMYXRlbmN5IHRpbWVyCiAqICAgQjguLjE1ICAwCiAqCiAqLwoKLyoKICogRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIgCiAqCiAqIFNldCB0aGUgc3BlY2lhbCBldmVudCBjaGFyYWN0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgY29tbXVuaWNhdGlvbnMgcG9ydC4KICogSWYgdGhlIGRldmljZSBzZWVzIHRoaXMgY2hhcmFjdGVyIGl0IHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHRoZQogKiBkYXRhIHJlYWQgc28gZmFyIC0gcmF0aGVyIHRoYW4gd2FpdCA0MG1zIG9yIHVudGlsIDYyIGJ5dGVzIGFyZSByZWFkCiAqIHdoaWNoIGlzIHdoYXQgbm9ybWFsbHkgaGFwcGVucy4KICovCgoKI2RlZmluZSAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVCBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgojZGVmaW5lICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUl9SRVFVRVNUX1RZUEUgMHg0MAoKCi8qIAogKiAgQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBiCiAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCiAqICB3VmFsdWU6ICAgICAgICAgIEV2ZW50Q2hhcgogKiAgd0luZGV4OiAgICAgICAgICBQb3J0CiAqICB3TGVuZ3RoOiAgICAgICAgIDAKICogIERhdGE6ICAgICAgICAgICAgTm9uZQogKgogKiB3VmFsdWU6CiAqICAgQjAuLjcgICBFdmVudCBDaGFyYWN0ZXIKICogICBCOCAgICAgIEV2ZW50IENoYXJhY3RlciBQcm9jZXNzaW5nCiAqICAgICAgICAgICAgIDAgPSBkaXNhYmxlZAogKiAgICAgICAgICAgICAxID0gZW5hYmxlZAogKiAgIEI5Li4xNSAgUmVzZXJ2ZWQKICoKICovCiAgICAgICAgICAKLyogRlRESV9TSU9fU0VUX0VSUk9SX0NIQVIgKi8KCi8qIFNldCB0aGUgcGFyaXR5IGVycm9yIHJlcGxhY2VtZW50IGNoYXJhY3RlciBmb3IgdGhlIHNwZWNpZmllZCBjb21tdW5pY2F0aW9ucyBwb3J0ICovCgovKiAKICogIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBiCiAqICBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIKICogIHdWYWx1ZTogICAgICAgICBFcnJvciBDaGFyCiAqICB3SW5kZXg6ICAgICAgICAgUG9ydAogKiAgd0xlbmd0aDogICAgICAgIDAKICogIERhdGE6ICAgICAgICAgICBOb25lCiAqCiAqRXJyb3IgQ2hhcgogKiAgQjAuLjcgIEVycm9yIENoYXJhY3RlcgogKiAgQjggICAgIEVycm9yIENoYXJhY3RlciBQcm9jZXNzaW5nCiAqICAgICAgICAgICAwID0gZGlzYWJsZWQKICogICAgICAgICAgIDEgPSBlbmFibGVkCiAqICBCOS4uMTUgUmVzZXJ2ZWQKICoKICovCgovKiBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTICovCi8qIFJldHJlaXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBtb2RlbSBzdGF0dXMgcmVnaXN0ZXIgKi8KCiNkZWZpbmUgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUgMHhjMAojZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCiNkZWZpbmUgRlRESV9TSU9fQ1RTX01BU0sgMHgxMAojZGVmaW5lIEZURElfU0lPX0RTUl9NQVNLIDB4MjAKI2RlZmluZSBGVERJX1NJT19SSV9NQVNLICAweDQwCiNkZWZpbmUgRlRESV9TSU9fUkxTRF9NQVNLIDB4ODAKLyogCiAqICAgQm1SZXF1ZXN0VHlwZTogICAxMTAwIDAwMDBiCiAqICAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCiAqICAgd1ZhbHVlOiAgICAgICAgICB6ZXJvCiAqICAgd0luZGV4OiAgICAgICAgICBQb3J0CiAqICAgd0xlbmd0aDogICAgICAgICAxCiAqICAgRGF0YTogICAgICAgICAgICBTdGF0dXMKICogCiAqIE9uZSBieXRlIG9mIGRhdGEgaXMgcmV0dXJuZWQgCiAqIEIwLi4zIDAKICogQjQgICAgQ1RTCiAqICAgICAgICAgMCA9IGluYWN0aXZlCiAqICAgICAgICAgMSA9IGFjdGl2ZQogKiBCNSAgICBEU1IKICogICAgICAgICAwID0gaW5hY3RpdmUKICogICAgICAgICAxID0gYWN0aXZlCiAqIEI2ICAgIFJpbmcgSW5kaWNhdG9yIChSSSkKICogICAgICAgICAwID0gaW5hY3RpdmUKICogICAgICAgICAxID0gYWN0aXZlCiAqIEI3ICAgIFJlY2VpdmUgTGluZSBTaWduYWwgRGV0ZWN0IChSTFNEKQogKiAgICAgICAgIDAgPSBpbmFjdGl2ZQogKiAgICAgICAgIDEgPSBhY3RpdmUgCiAqLwoKCgovKiBEZXNjcmlwdG9ycyByZXR1cm5lZCBieSB0aGUgZGV2aWNlIAogKiAKICogIERldmljZSBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCVNpemUJVmFsdWUJRGVzY3JpcHRpb24KICogMAliTGVuZ3RoCQkxCTB4MTIJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCiAqIDEJYkRlc2NyaXB0b3JUeXBlCTEJMHgwMQlERVZJQ0UgRGVzY3JpcHRvciBUeXBlCiAqIDIJYmNkVVNCCQkyCTB4MDExMAlVU0IgU3BlYyBSZWxlYXNlIE51bWJlcgogKiA0CWJEZXZpY2VDbGFzcwkxCTB4MDAJQ2xhc3MgQ29kZQogKiA1CWJEZXZpY2VTdWJDbGFzcwkxCTB4MDAJU3ViQ2xhc3MgQ29kZQogKiA2CWJEZXZpY2VQcm90b2NvbAkxCTB4MDAJUHJvdG9jb2wgQ29kZQogKiA3CWJNYXhQYWNrZXRTaXplMCAxCTB4MDgJTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgZW5kcG9pbnQgMAogKiA4CWlkVmVuZG9yCTIJMHgwNDAzCVZlbmRvciBJRAogKiAxMAlpZFByb2R1Y3QJMgkweDgzNzIJUHJvZHVjdCBJRCAoRlRESV9TSU9fUElEKQogKiAxMgliY2REZXZpY2UJMgkweDAwMDEJRGV2aWNlIHJlbGVhc2UgbnVtYmVyCiAqIDE0CWlNYW51ZmFjdHVyZXIJMQkweDAxCUluZGV4IG9mIG1hbi4gc3RyaW5nIGRlc2MKICogMTUJaVByb2R1Y3QJMQkweDAyCUluZGV4IG9mIHByb2Qgc3RyaW5nIGRlc2MKICogMTYJaVNlcmlhbE51bWJlcgkxCTB4MDIJSW5kZXggb2Ygc2VyaWFsIG5tciBzdHJpbmcgZGVzYwogKiAxNwliTnVtQ29uZmlndXJhdGlvbnMgMSAgICAweDAxCU51bWJlciBvZiBwb3NzaWJsZSBjb25maWd1cmF0aW9ucwogKiAKICogQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCiAqIDAJYkxlbmd0aAkJCTEJMHgwOQlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwMglDT05GSUdVUkFUSU9OIERlc2NyaXB0b3IgVHlwZQogKiAyCXdUb3RhbExlbmd0aAkJMgkweDAwMjAJVG90YWwgbGVuZ3RoIG9mIGRhdGEKICogNAliTnVtSW50ZXJmYWNlcwkJMQkweDAxCU51bWJlciBvZiBpbnRlcmZhY2VzIHN1cHBvcnRlZAogKiA1CWJDb25maWd1cmF0aW9uVmFsdWUJMQkweDAxCUFyZ3VtZW50IGZvciBTZXRDT25maWd1cmF0aW9uKCkgcmVxCiAqIDYJaUNvbmZpZ3VyYXRpb24JCTEJMHgwMglJbmRleCBvZiBjb25maWcgc3RyaW5nIGRlc2NyaXB0b3IKICogNwlibUF0dHJpYnV0ZXMJCTEJMHgyMAlDb25maWcgY2hhcmFjdGVyaXN0aWNzIFJlbW90ZSBXYWtldXAKICogOAlNYXhQb3dlcgkJMQkweDFFCU1heCBwb3dlciBjb25zdW1wdGlvbgogKiAKICogSW50ZXJmYWNlIERlc2NyaXB0b3IKICogCiAqIE9mZnNldAlGaWVsZAkJCVNpemUJVmFsdWUKICogMAliTGVuZ3RoCQkJMQkweDA5CVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcwogKiAxCWJEZXNjcmlwdG9yVHlwZQkJMQkweDA0CUlOVEVSRkFDRSBEZXNjcmlwdG9yIFR5cGUKICogMgliSW50ZXJmYWNlTnVtYmVyCTEJMHgwMAlOdW1iZXIgb2YgaW50ZXJmYWNlCiAqIDMJYkFsdGVybmF0ZVNldHRpbmcJMQkweDAwCVZhbHVlIHVzZWQgdG8gc2VsZWN0IGFsdGVybmF0ZQogKiA0CWJOdW1FbmRwb2ludHMJCTEJMHgwMglOdW1iZXIgb2YgZW5kcG9pbnRzCiAqIDUJYkludGVyZmFjZUNsYXNzCQkxCTB4RkYJQ2xhc3MgQ29kZQogKiA2CWJJbnRlcmZhY2VTdWJDbGFzcwkxCTB4RkYJU3ViY2xhc3MgQ29kZQogKiA3CWJJbnRlcmZhY2VQcm90b2NvbAkxCTB4RkYJUHJvdG9jb2wgQ29kZQogKiA4CWlJbnRlcmZhY2UJCTEJMHgwMglJbmRleCBvZiBpbnRlcmZhY2Ugc3RyaW5nIGRlc2NyaXB0aW9uCiAqIAogKiBJTiBFbmRwb2ludCBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCiAqIDAJYkxlbmd0aAkJCTEJMHgwNwlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNQlFTkRQT0lOVCBkZXNjcmlwdG9yIHR5cGUKICogMgliRW5kcG9pbnRBZGRyZXNzCTEJMHg4MglBZGRyZXNzIG9mIGVuZHBvaW50CiAqIDMJYm1BdHRyaWJ1dGVzCQkxCTB4MDIJRW5kcG9pbnQgYXR0cmlidXRlcyAtIEJ1bGsKICogNAliTnVtRW5kcG9pbnRzCQkyCTB4MDA0MAltYXhpbXVtIHBhY2tldCBzaXplCiAqIDUJYkludGVydmFsCQkxCTB4MDAJSW50ZXJ2YWwgZm9yIHBvbGxpbmcgZW5kcG9pbnQKICogCiAqIE9VVCBFbmRwb2ludCBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCiAqIDAJYkxlbmd0aAkJCTEJMHgwNwlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNQlFTkRQT0lOVCBkZXNjcmlwdG9yIHR5cGUKICogMgliRW5kcG9pbnRBZGRyZXNzCTEJMHgwMglBZGRyZXNzIG9mIGVuZHBvaW50CiAqIDMJYm1BdHRyaWJ1dGVzCQkxCTB4MDIJRW5kcG9pbnQgYXR0cmlidXRlcyAtIEJ1bGsKICogNAliTnVtRW5kcG9pbnRzCQkyCTB4MDA0MAltYXhpbXVtIHBhY2tldCBzaXplCiAqIDUJYkludGVydmFsCQkxCTB4MDAJSW50ZXJ2YWwgZm9yIHBvbGxpbmcgZW5kcG9pbnQKICogICAgIAogKiBEQVRBIEZPUk1BVAogKiAKICogSU4gRW5kcG9pbnQKICogCiAqIFRoZSBkZXZpY2UgcmVzZXJ2ZXMgdGhlIGZpcnN0IHR3byBieXRlcyBvZiBkYXRhIG9uIHRoaXMgZW5kcG9pbnQgdG8gY29udGFpbiB0aGUgY3VycmVudAogKiB2YWx1ZXMgb2YgdGhlIG1vZGVtIGFuZCBsaW5lIHN0YXR1cyByZWdpc3RlcnMuIEluIHRoZSBhYnNlbmNlIG9mIGRhdGEsIHRoZSBkZXZpY2UgCiAqIGdlbmVyYXRlcyBhIG1lc3NhZ2UgY29uc2lzdGluZyBvZiB0aGVzZSB0d28gc3RhdHVzIGJ5dGVzIGV2ZXJ5IDQwIG1zCiAqIAogKiBCeXRlIDA6IE1vZGVtIFN0YXR1cwogKiAKICogT2Zmc2V0CURlc2NyaXB0aW9uCiAqIEIwCVJlc2VydmVkIC0gbXVzdCBiZSAxCiAqIEIxCVJlc2VydmVkIC0gbXVzdCBiZSAwCiAqIEIyCVJlc2VydmVkIC0gbXVzdCBiZSAwCiAqIEIzCVJlc2VydmVkIC0gbXVzdCBiZSAwCiAqIEI0CUNsZWFyIHRvIFNlbmQgKENUUykKICogQjUJRGF0YSBTZXQgUmVhZHkgKERTUikKICogQjYJUmluZyBJbmRpY2F0b3IgKFJJKQogKiBCNwlSZWNlaXZlIExpbmUgU2lnbmFsIERldGVjdCAoUkxTRCkKICogCiAqIEJ5dGUgMTogTGluZSBTdGF0dXMKICogCiAqIE9mZnNldAlEZXNjcmlwdGlvbgogKiBCMAlEYXRhIFJlYWR5IChEUikKICogQjEJT3ZlcnJ1biBFcnJvciAoT0UpCiAqIEIyCVBhcml0eSBFcnJvciAoUEUpCiAqIEIzCUZyYW1pbmcgRXJyb3IgKEZFKQogKiBCNAlCcmVhayBJbnRlcnJ1cHQgKEJJKQogKiBCNQlUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIChUSFJFKQogKiBCNglUcmFuc21pdHRlciBFbXB0eSAoVEVNVCkKICogQjcJRXJyb3IgaW4gUkNWUiBGSUZPCiAqIAogKi8KI2RlZmluZSBGVERJX1JTMF9DVFMJKDEgPDwgNCkKI2RlZmluZSBGVERJX1JTMF9EU1IJKDEgPDwgNSkKI2RlZmluZSBGVERJX1JTMF9SSQkoMSA8PCA2KQojZGVmaW5lIEZURElfUlMwX1JMU0QJKDEgPDwgNykKCiNkZWZpbmUgRlRESV9SU19EUiAgMQojZGVmaW5lIEZURElfUlNfT0UgKDE8PDEpCiNkZWZpbmUgRlRESV9SU19QRSAoMTw8MikKI2RlZmluZSBGVERJX1JTX0ZFICgxPDwzKQojZGVmaW5lIEZURElfUlNfQkkgKDE8PDQpCiNkZWZpbmUgRlRESV9SU19USFJFICgxPDw1KQojZGVmaW5lIEZURElfUlNfVEVNVCAoMTw8NikKI2RlZmluZSBGVERJX1JTX0ZJRk8gICgxPDw3KQoKLyoKICogT1VUIEVuZHBvaW50CiAqIAogKiBUaGlzIGRldmljZSByZXNlcnZlcyB0aGUgZmlyc3QgYnl0ZXMgb2YgZGF0YSBvbiB0aGlzIGVuZHBvaW50IGNvbnRhaW4gdGhlIGxlbmd0aAogKiBhbmQgcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBtZXNzYWdlLiBGb3IgdGhlIEZUREkgVVNCIFNlcmlhbCBjb252ZXJ0ZXIgdGhlIHBvcnQgCiAqIGlkZW50aWZpZXIgaXMgYWx3YXlzIDEuCiAqIAogKiBCeXRlIDA6IExpbmUgU3RhdHVzCiAqIAogKiBPZmZzZXQJRGVzY3JpcHRpb24KICogQjAJUmVzZXJ2ZWQgLSBtdXN0IGJlIDEKICogQjEJUmVzZXJ2ZWQgLSBtdXN0IGJlIDAKICogQjIuLjcJTGVuZ3RoIG9mIG1lc3NhZ2UgLSAobm90IGluY2x1ZGluZyBCeXRlIDApCiAqIAogKi8KCg==