LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTkyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDIJR2FyeSBKZW5uZWpvaG4gPGdqQGRlbnguZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKCi5nbG9ibCBfc3RhcnQKX3N0YXJ0OgliICAgICAgIHJlc2V0CglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoJLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKICoKICogZG8gaW1wb3J0YW50IGluaXQgb25seSBpZiB3ZSBkb24ndCBzdGFydCBmcm9tIG1lbW9yeSEKICogcmVsb2NhdGUgYXJtYm9vdCB0byByYW0KICogc2V0dXAgc3RhY2sKICoganVtcCB0byBzZWNvbmQgc3RhZ2UKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpfVEVYVF9CQVNFOgoJLndvcmQJVEVYVF9CQVNFCgouZ2xvYmwgX2FybWJvb3Rfc3RhcnQKX2FybWJvb3Rfc3RhcnQ6Cgkud29yZCBfc3RhcnQKCi8qCiAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgogKi8KLmdsb2JsIF9ic3Nfc3RhcnQKX2Jzc19zdGFydDoKCS53b3JkIF9fYnNzX3N0YXJ0CgouZ2xvYmwgX2Jzc19lbmQKX2Jzc19lbmQ6Cgkud29yZCBfZW5kCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIElSUV9TVEFDS19TVEFSVApJUlFfU1RBQ0tfU1RBUlQ6Cgkud29yZAkweDBiYWRjMGRlCgovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwouZ2xvYmwgRklRX1NUQUNLX1NUQVJUCkZJUV9TVEFDS19TVEFSVDoKCS53b3JkIDB4MGJhZGMwZGUKI2VuZGlmCgoKLyoKICogdGhlIGFjdHVhbCByZXNldCBjb2RlCiAqLwoKcmVzZXQ6CgkvKgoJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQoJICovCgltcnMJcjAsY3BzcgoJYmljCXIwLHIwLCMweDFmCglvcnIJcjAscjAsIzB4ZDMKCW1zcgljcHNyLHIwCgovKiB0dXJuIG9mZiB0aGUgd2F0Y2hkb2cgKi8KI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApCiMgZGVmaW5lIHBXVENPTgkJMHgxNTMwMDAwMAojIGRlZmluZSBJTlRNU0sJCTB4MTQ0MDAwMDgJLyogSW50ZXJ1cHQtQ29udHJvbGxlciBiYXNlIGFkZHJlc3NlcyAqLwojIGRlZmluZSBDTEtESVZOCTB4MTQ4MDAwMTQJLyogY2xvY2sgZGl2aXNvciByZWdpc3RlciAqLwojZWxpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQojIGRlZmluZSBwV1RDT04JCTB4NTMwMDAwMDAKIyBkZWZpbmUgSU5UTVNLCQkweDRBMDAwMDA4CS8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KIyBkZWZpbmUgSU5UU1VCTVNLCTB4NEEwMDAwMUMKIyBkZWZpbmUgQ0xLRElWTgkweDRDMDAwMDE0CS8qIGNsb2NrIGRpdmlzb3IgcmVnaXN0ZXIgKi8KI2VuZGlmCgojaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKCWxkciAgICAgcjAsID1wV1RDT04KCW1vdiAgICAgcjEsICMweDAKCXN0ciAgICAgcjEsIFtyMF0KCgkvKgoJICogbWFzayBhbGwgSVJRcyBieSBzZXR0aW5nIGFsbCBiaXRzIGluIHRoZSBJTlRNUiAtIGRlZmF1bHQKCSAqLwoJbW92CXIxLCAjMHhmZmZmZmZmZgoJbGRyCXIwLCA9SU5UTVNLCglzdHIJcjEsIFtyMF0KIyBpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQoJbGRyCXIxLCA9MHgzZmYKCWxkcglyMCwgPUlOVFNVQk1TSwoJc3RyCXIxLCBbcjBdCiMgZW5kaWYKCgkvKiBGQ0xLOkhDTEs6UENMSyA9IDE6Mjo0ICovCgkvKiBkZWZhdWx0IEZDTEsgaXMgMTIwIE1IeiAhICovCglsZHIJcjAsID1DTEtESVZOCgltb3YJcjEsICMzCglzdHIJcjEsIFtyMF0KI2VuZGlmCS8qIENPTkZJR19TM0MyNDAwIHx8IENPTkZJR19TM0MyNDEwICovCgoJLyoKCSAqIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cyBvbmx5IGF0IHJlYm9vdCwKCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCgkgKi8KI2lmZGVmIENPTkZJR19JTklUX0NSSVRJQ0FMCglibAljcHVfaW5pdF9jcml0CiNlbmRpZgoKcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KCWNtcCAgICAgcjAsIHIxICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnICAgICAgICAgKi8KCWJlcSAgICAgc3RhY2tfc2V0dXAKCglsZHIJcjIsIF9hcm1ib290X3N0YXJ0CglsZHIJcjMsIF9ic3Nfc3RhcnQKCXN1YglyMiwgcjMsIHIyCQkvKiByMiA8LSBzaXplIG9mIGFybWJvb3QgICAgICAgICAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcyAgICAgICAgICovCgpjb3B5X2xvb3A6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlZWUgW3IyXSAgICAqLwoJYmxlCWNvcHlfbG9vcAoKCS8qIFNldCB1cCB0aGUgc3RhY2sJCQkJCQkgICAgKi8Kc3RhY2tfc2V0dXA6CglsZHIJcjAsIF9URVhUX0JBU0UJCS8qIHVwcGVyIDEyOCBLaUI6IHJlbG9jYXRlZCB1Ym9vdCAgICovCglzdWIJcjAsIHIwLCAjQ0ZHX01BTExPQ19MRU4JLyogbWFsbG9jIGFyZWEgICAgICAgICAgICAgICAgICAgICAgKi8KCXN1YglyMCwgcjAsICNDRkdfR0JMX0RBVEFfU0laRSAvKiBiZGluZm8gICAgICAgICAgICAgICAgICAgICAgICAqLwojaWZkZWYgQ09ORklHX1VTRV9JUlEKCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpCiNlbmRpZgoJc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICAqLwoKY2xlYXJfYnNzOgoJbGRyCXIwLCBfYnNzX3N0YXJ0CQkvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50ICAgICAgICAqLwoJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8KCW1vdiAJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4gICAgICAgICAgICAgICAgICAgICovCglhZGQJcjAsIHIwLCAjNAoJY21wCXIwLCByMQoJYm5lCWNsYnNzX2wKCiNpZiAwCgkvKiB0cnkgZG9pbmcgdGhpcyBzdHVmZiBhZnRlciB0aGUgcmVsb2NhdGlvbiAqLwoJbGRyICAgICByMCwgPXBXVENPTgoJbW92ICAgICByMSwgIzB4MAoJc3RyICAgICByMSwgW3IwXQoKCS8qCgkgKiBtYXNrIGFsbCBJUlFzIGJ5IHNldHRpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1SIC0gZGVmYXVsdAoJICovCgltb3YJcjEsICMweGZmZmZmZmZmCglsZHIJcjAsID1JTlRNUgoJc3RyCXIxLCBbcjBdCgoJLyogRkNMSzpIQ0xLOlBDTEsgPSAxOjI6NCAqLwoJLyogZGVmYXVsdCBGQ0xLIGlzIDEyMCBNSHogISAqLwoJbGRyCXIwLCA9Q0xLRElWTgoJbW92CXIxLCAjMwoJc3RyCXIxLCBbcjBdCgkvKiBFTkQgc3R1ZmYgYWZ0ZXIgcmVsb2NhdGlvbiAqLwojZW5kaWYKCglsZHIJcGMsIF9zdGFydF9hcm1ib290Cgpfc3RhcnRfYXJtYm9vdDoJLndvcmQgc3RhcnRfYXJtYm9vdAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIENQVV9pbml0X2NyaXRpY2FsIHJlZ2lzdGVycwogKgogKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCiAqIHNldHVwIG1lbW9yeSB0aW1pbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgoKY3B1X2luaXRfY3JpdDoKCS8qCgkgKiBmbHVzaCB2NCBJL0QgY2FjaGVzCgkgKi8KCW1vdglyMCwgIzAKCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJLyogZmx1c2ggdjMvdjQgY2FjaGUgKi8KCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCgoJLyoKCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKCSAqLwoJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJQCBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykKCWJpYwlyMCwgcjAsICMweDAwMDAwMDg3CUAgY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkKCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCUAgc2V0IGJpdCAyIChBKSBBbGlnbgoJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJQCBzZXQgYml0IDEyIChJKSBJLUNhY2hlCgltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCgoKCS8qCgkgKiBiZWZvcmUgcmVsb2NhdGluZywgd2UgaGF2ZSB0byBzZXR1cCBSQU0gdGltaW5nCgkgKiBiZWNhdXNlIG1lbW9yeSB0aW1pbmcgaXMgYm9hcmQtZGVwZW5kZW5kLCB5b3Ugd2lsbAoJICogZmluZCBhIG1lbXNldHVwLlMgaW4geW91ciBib2FyZCBkaXJlY3RvcnkuCgkgKi8KCW1vdglpcCwgbHIKCWJsCW1lbXNldHVwCgltb3YJbHIsIGlwCgoJbW92CXBjLCBscgoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEludGVycnVwdCBoYW5kbGluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCkAKQCBJUlEgc3RhY2sgZnJhbWUuCkAKI2RlZmluZSBTX0ZSQU1FX1NJWkUJNzIKCiNkZWZpbmUgU19PTERfUjAJNjgKI2RlZmluZSBTX1BTUgkJNjQKI2RlZmluZSBTX1BDCQk2MAojZGVmaW5lIFNfTFIJCTU2CiNkZWZpbmUgU19TUAkJNTIKCiNkZWZpbmUgU19JUAkJNDgKI2RlZmluZSBTX0ZQCQk0NAojZGVmaW5lIFNfUjEwCQk0MAojZGVmaW5lIFNfUjkJCTM2CiNkZWZpbmUgU19SOAkJMzIKI2RlZmluZSBTX1I3CQkyOAojZGVmaW5lIFNfUjYJCTI0CiNkZWZpbmUgU19SNQkJMjAKI2RlZmluZSBTX1I0CQkxNgojZGVmaW5lIFNfUjMJCTEyCiNkZWZpbmUgU19SMgkJOAojZGVmaW5lIFNfUjEJCTQKI2RlZmluZSBTX1IwCQkwCgojZGVmaW5lIE1PREVfU1ZDIDB4MTMKI2RlZmluZSBJX0JJVAkgMHg4MAoKLyoKICogdXNlIGJhZF9zYXZlX3VzZXJfcmVncyBmb3IgYWJvcnQvcHJlZmV0Y2gvdW5kZWYvc3dpIC4uLgogKiB1c2UgaXJxX3NhdmVfdXNlcl9yZWdzIC8gaXJxX3Jlc3RvcmVfdXNlcl9yZWdzIGZvciBJUlEvRklRIGhhbmRsaW5nCiAqLwoKCS5tYWNybwliYWRfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJc3ViCXIyLCByMiwgIyhDT05GSUdfU1RBQ0tTSVpFK0NGR19NQUxMT0NfTEVOKQoJc3ViCXIyLCByMiwgIyhDRkdfR0JMX0RBVEFfU0laRSs4KSAgQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQgc3RhY2sKCWxkbWlhCXIyLCB7cjIgLSByM30JCQlAIGdldCBwYywgY3BzcgoJYWRkCXIwLCBzcCwgI1NfRlJBTUVfU0laRQkJQCByZXN0b3JlIHNwX1NWQwoKCWFkZAlyNSwgc3AsICNTX1NQCgltb3YJcjEsIGxyCglzdG1pYQlyNSwge3IwIC0gcjN9CQkJQCBzYXZlIHNwX1NWQywgbHJfU1ZDLCBwYywgY3BzcgoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMC1yMTIKCWFkZCAgICAgcjgsIHNwLCAjU19QQwoJc3RtZGIgICByOCwge3NwLCBscn1eICAgICAgICAgICAgICAgICAgIEAgQ2FsbGluZyBTUCwgTFIKCXN0ciAgICAgbHIsIFtyOCwgIzBdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgY2FsbGluZyBQQwoJbXJzICAgICByNiwgc3BzcgoJc3RyICAgICByNiwgW3I4LCAjNF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBDUFNSCglzdHIgICAgIHIwLCBbcjgsICM4XSAgICAgICAgICAgICAgICAgICAgQCBTYXZlIE9MRF9SMAoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCglsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCgltb3YJcjAsIHIwCglsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN1YnMJcGMsIGxyLCAjNAkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKCS5lbmRtCgoJLm1hY3JvIGdldF9iYWRfc3RhY2sKCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrCglzdWIJcjEzLCByMTMsICMoQ09ORklHX1NUQUNLU0laRStDRkdfTUFMTE9DX0xFTikKCXN1YglyMTMsIHIxMywgIyhDRkdfR0JMX0RBVEFfU0laRSs4KSBAIHJlc2VydmVkIGEgY291cGxlIHNwb3RzIGluIGFib3J0IHN0YWNrCgoJc3RyCWxyLCBbcjEzXQkJCUAgc2F2ZSBjYWxsZXIgbHIgLyBzcHNyCgltcnMJbHIsIHNwc3IKCXN0ciAgICAgbHIsIFtyMTMsICM0XQoKCW1vdglyMTMsICNNT0RFX1NWQwkJCUAgcHJlcGFyZSBTVkMtTW9kZQoJQCBtc3IJc3Bzcl9jLCByMTMKCW1zcglzcHNyLCByMTMKCW1vdglsciwgcGMKCW1vdnMJcGMsIGxyCgkuZW5kbQoKCS5tYWNybyBnZXRfaXJxX3N0YWNrCQkJQCBzZXR1cCBJUlEgc3RhY2sKCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCgkuZW5kbQoKCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKCWxkcglzcCwgRklRX1NUQUNLX1NUQVJUCgkuZW5kbQoKLyoKICogZXhjZXB0aW9uIGhhbmRsZXJzCiAqLwoJLmFsaWduICA1CnVuZGVmaW5lZF9pbnN0cnVjdGlvbjoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgoKCS5hbGlnbgk1CnNvZnR3YXJlX2ludGVycnVwdDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX3NvZnR3YXJlX2ludGVycnVwdAoKCS5hbGlnbgk1CnByZWZldGNoX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fcHJlZmV0Y2hfYWJvcnQKCgkuYWxpZ24JNQpkYXRhX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fZGF0YV9hYm9ydAoKCS5hbGlnbgk1Cm5vdF91c2VkOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fbm90X3VzZWQKCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoKCS5hbGlnbgk1CmlycToKCWdldF9pcnFfc3RhY2sKCWlycV9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2lycQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2ZpcV9zdGFjawoJLyogc29tZW9uZSBvdWdodCB0byB3cml0ZSBhIG1vcmUgZWZmaWN0aW9uIGZpcV9zYXZlX3VzZXJfcmVncyAqLwoJaXJxX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fZmlxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCiNlbHNlCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9faXJxCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fZmlxCgojZW5kaWYKCgkuYWxpZ24JNQouZ2xvYmwgcmVzZXRfY3B1CnJlc2V0X2NwdToKI2lmZGVmIENPTkZJR19TM0MyNDAwCglibAlkaXNhYmxlX2ludGVycnVwdHMKIyBpZmRlZiBDT05GSUdfVFJBQgoJYmwJZGlzYWJsZV92ZmQKIyBlbmRpZgoJbGRyCXIxLCBfcldUQ09OCglsZHIJcjIsIF9yV1RDTlQKCS8qIERpc2FibGUgd2F0Y2hkb2cgKi8KCW1vdglyMywgIzB4MDAwMAoJc3RyCXIzLCBbcjFdCgkvKiBJbml0aWFsaXplIHdhdGNoZG9nIHRpbWVyIGNvdW50IHJlZ2lzdGVyICovCgltb3YJcjMsICMweDAwMDEKCXN0cglyMywgW3IyXQoJLyogRW5hYmxlIHdhdGNoZG9nIHRpbWVyOyBhc3NlcnQgcmVzZXQgYXQgdGltZXIgdGltZW91dCAqLwoJbW92CXIzLCAjMHgwMDIxCglzdHIJcjMsIFtyMV0KX2xvb3BfZm9yZXZlcjoKCWIJX2xvb3BfZm9yZXZlcgpfcldUQ09OOgoJLndvcmQJMHgxNTMwMDAwMApfcldUQ05UOgoJLndvcmQJMHgxNTMwMDAwOAojZWxzZSAvKiAhIENPTkZJR19TM0MyNDAwICovCgltb3YgICAgIGlwLCAjMAoJbWNyICAgICBwMTUsIDAsIGlwLCBjNywgYzcsIDAgICAgICAgICAgIEAgaW52YWxpZGF0ZSBjYWNoZQoJbWNyICAgICBwMTUsIDAsIGlwLCBjOCwgYzcsIDAgICAgICAgICAgIEAgZmx1c2ggVExCICh2NCkKCW1yYyAgICAgcDE1LCAwLCBpcCwgYzEsIGMwLCAwICAgICAgICAgICBAIGdldCBjdHJsIHJlZ2lzdGVyCgliaWMgICAgIGlwLCBpcCwgIzB4MDAwZiAgICAgICAgICAgICAgICAgQCAuLi4uLi4uLi4uLi53Y2FtCgliaWMgICAgIGlwLCBpcCwgIzB4MjEwMCAgICAgICAgICAgICAgICAgQCAuLnYuLi4ucy4uLi4uLi4uCgltY3IgICAgIHAxNSwgMCwgaXAsIGMxLCBjMCwgMCAgICAgICAgICAgQCBjdHJsIHJlZ2lzdGVyCgltb3YgICAgIHBjLCByMAojZW5kaWYgLyogQ09ORklHX1MzQzI0MDAgKi8K